From 79af7d3c0053eb4d7fc673c449ef65c8f594233b Mon Sep 17 00:00:00 2001 From: Yuriy Toporovskyy Date: Thu, 5 Aug 2021 17:47:19 -0400 Subject: [PATCH 001/226] Make the maximum amount of vmem available for skinning related things configurable at runtime Signed-off-by: Yuriy Toporovskyy --- .../SkinnedMeshOutputStreamManager.cpp | 33 ++++++++++++++++++- .../SkinnedMeshOutputStreamManager.h | 3 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp index c4eac30431..ffbe850160 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp @@ -8,6 +8,8 @@ #include +#include + #include #include @@ -72,11 +74,36 @@ namespace AZ creator.End(m_bufferAsset); } + AZ_CVAR( + int, + r_skinnedMeshInstanceMemoryPoolSize, + 256, + nullptr, + AZ::ConsoleFunctorFlags::NeedsReload, + "The amount of memory in Mb available for all actor skinning data. Note that this must only be set once at application startup" + ); + void SkinnedMeshOutputStreamManager::Init() { + } + + void SkinnedMeshOutputStreamManager::EnsureInit() const + { + const_cast(this)->EnsureInit(); + } + + void SkinnedMeshOutputStreamManager::EnsureInit() + { + if (!m_needsInit) + { + return; + } + m_needsInit = false; + // 256mb supports roughly 42 character instances at 100,000 vertices per character x 64 bytes per vertex (12 byte position + 12 byte previous frame position + 12 byte normal + 16 byte tangent + 12 byte bitangent) // This includes only the output of the skinning compute shader, not the input buffers or bone transforms - m_sizeInBytes = 256u * (1024u * 1024u); + const AZ::u64 sizeInMb = r_skinnedMeshInstanceMemoryPoolSize; + m_sizeInBytes = AZ::GetMax(sizeInMb, 256ull) * (1024u * 1024u); CalculateAlignment(); @@ -90,6 +117,8 @@ namespace AZ RHI::VirtualAddress result; { AZStd::lock_guard lock(m_allocatorMutex); + + EnsureInit(); result = m_freeListAllocator.Allocate(byteCount, m_alignment); } @@ -129,11 +158,13 @@ namespace AZ Data::Asset SkinnedMeshOutputStreamManager::GetBufferAsset() const { + EnsureInit(); return m_bufferAsset; } Data::Instance SkinnedMeshOutputStreamManager::GetBuffer() { + EnsureInit(); if (!m_buffer) { m_buffer = RPI::Buffer::FindOrCreate(m_bufferAsset); diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h index 3cec34a2e2..6009a62362 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h @@ -46,6 +46,8 @@ namespace AZ // SystemTickBus void OnSystemTick() override; + void EnsureInit() const; + void EnsureInit(); void GarbageCollect(); void CalculateAlignment(); void CreateBufferAsset(); @@ -58,6 +60,7 @@ namespace AZ size_t m_sizeInBytes = 0; bool m_memoryWasFreed = false; bool m_broadcastMemoryAvailableEvent = false; + bool m_needsInit = true; }; } // namespace Render } // namespace AZ From 7e9b6116da19e2444ff42063c45ca8a1d6b93cfd Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 7 Sep 2021 21:04:24 -0700 Subject: [PATCH 002/226] Update component application tick to use the ITime interface and respect simulation t_scale settings Signed-off-by: kberg-amzn --- .../AzCore/Component/ComponentApplication.cpp | 20 ++++++--- .../AzCore/Component/ComponentApplication.h | 3 +- Code/Framework/AzCore/AzCore/Time/ITime.h | 41 ++++++++++++++++++- .../AzCore/Time/TimeSystemComponent.cpp | 19 +++++---- .../AzCore/AzCore/Time/TimeSystemComponent.h | 5 ++- 5 files changed, 71 insertions(+), 17 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index eda08401a2..e02485f8d9 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -612,6 +612,7 @@ namespace AZ AZ_Assert(m_systemEntity, "SystemEntity failed to initialize!"); AddRequiredSystemComponents(m_systemEntity.get()); + //m_currentTime = GetElapsedTimeUs(); m_isStarted = true; return m_systemEntity.get(); } @@ -652,7 +653,6 @@ namespace AZ ComponentApplicationBus::Handler::BusConnect(); - m_currentTime = AZStd::chrono::system_clock::now(); TickRequestBus::Handler::BusConnect(); #if defined(AZ_ENABLE_DEBUG_TOOLS) @@ -1368,14 +1368,18 @@ namespace AZ { AZ_PROFILE_SCOPE(System, "Component application simulation tick"); - AZStd::chrono::system_clock::time_point now = AZStd::chrono::system_clock::now(); + TimeUs now = GetElapsedTimeUs(); + if (m_currentTime == TimeUs{ 0 }) + { + m_currentTime = now; + } m_deltaTime = 0.0f; if (now >= m_currentTime) { - AZStd::chrono::duration delta = now - m_currentTime; - m_deltaTime = deltaOverride >= 0.f ? deltaOverride : delta.count(); + float delta = TimeUsToSeconds(now - m_currentTime); + m_deltaTime = deltaOverride >= 0.f ? deltaOverride : delta; } { @@ -1385,7 +1389,9 @@ namespace AZ m_currentTime = now; { AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:OnTick"); - EBUS_EVENT(TickBus, OnTick, m_deltaTime, ScriptTimePoint(now)); + auto epoch = AZStd::chrono::time_point(); + auto chronoNow = AZStd::chrono::microseconds(aznumeric_cast(now)); + EBUS_EVENT(TickBus, OnTick, m_deltaTime, ScriptTimePoint(epoch + chronoNow)); } } } @@ -1508,7 +1514,9 @@ namespace AZ //========================================================================= ScriptTimePoint ComponentApplication::GetTimeAtCurrentTick() { - return ScriptTimePoint(m_currentTime); + auto epoch = AZStd::chrono::time_point(); + auto chronoCurrent = AZStd::chrono::microseconds(aznumeric_cast(m_currentTime)); + return ScriptTimePoint(epoch + chronoCurrent); } //========================================================================= diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index 3768a75d83..1f76f0f79e 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -368,7 +369,7 @@ namespace AZ } } - AZStd::chrono::system_clock::time_point m_currentTime{ AZStd::chrono::system_clock::time_point::max() }; + AZ::TimeUs m_currentTime{ 0 }; float m_deltaTime{ 0.0f }; AZStd::unique_ptr m_moduleManager; AZStd::unique_ptr m_settingsRegistry; diff --git a/Code/Framework/AzCore/AzCore/Time/ITime.h b/Code/Framework/AzCore/AzCore/Time/ITime.h index 845017bd14..96332cd3da 100644 --- a/Code/Framework/AzCore/AzCore/Time/ITime.h +++ b/Code/Framework/AzCore/AzCore/Time/ITime.h @@ -19,6 +19,10 @@ namespace AZ //! This is a strong typedef for representing a millisecond value since application start. AZ_TYPE_SAFE_INTEGRAL(TimeMs, int64_t); + //! This is a strong typedef for representing a microsecond value since application start. + //! Using int64_t as the underlying type, this is good to represent approximately 292,471 years + AZ_TYPE_SAFE_INTEGRAL(TimeUs, int64_t); + //! @class ITime //! @brief This is an AZ::Interface<> for managing time related operations. class ITime @@ -33,6 +37,10 @@ namespace AZ //! @return the number of milliseconds that have elapsed since application start virtual TimeMs GetElapsedTimeMs() const = 0; + //! Returns the number of microseconds since application start. + //! @return the number of microseconds that have elapsed since application start + virtual TimeUs GetElapsedTimeUs() const = 0; + AZ_DISABLE_COPY_MOVE(ITime); }; @@ -51,6 +59,37 @@ namespace AZ { return AZ::Interface::Get()->GetElapsedTimeMs(); } -} + + //! This is a simple convenience wrapper + inline TimeUs GetElapsedTimeUs() + { + return AZ::Interface::Get()->GetElapsedTimeUs(); + } + + //! Converts from milliseconds to microseconds + inline TimeUs TimeMsToUs(TimeMs value) + { + return static_cast(value * static_cast(1000)); + } + + //! Converts from microseconds to milliseconds + inline TimeMs TimeUsToMs(TimeUs value) + { + return static_cast(value * static_cast(1000)); + } + + //! Converts from milliseconds to seconds + inline float TimeMsToSeconds(TimeMs value) + { + return static_cast(value) / 1000.0f; + } + + //! Converts from microseconds to seconds + inline float TimeUsToSeconds(TimeUs value) + { + return static_cast(value) / 1000000.0f; + } +} // namespace AZ AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(AZ::TimeMs); +AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(AZ::TimeUs); diff --git a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp index a2e7733222..99145d377a 100644 --- a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.cpp @@ -35,7 +35,7 @@ namespace AZ TimeSystemComponent::TimeSystemComponent() { - m_lastInvokedTimeMs = static_cast(AZStd::GetTimeNowMicroSecond() / 1000); + m_lastInvokedTimeUs = static_cast(AZStd::GetTimeNowMicroSecond()); AZ::Interface::Register(this); ITimeRequestBus::Handler::BusConnect(); } @@ -58,18 +58,23 @@ namespace AZ TimeMs TimeSystemComponent::GetElapsedTimeMs() const { - TimeMs currentTime = static_cast(AZStd::GetTimeNowMicroSecond() / 1000); - TimeMs deltaTime = currentTime - m_lastInvokedTimeMs; + return TimeUsToMs(GetElapsedTimeUs()); + } + + TimeUs TimeSystemComponent::GetElapsedTimeUs() const + { + TimeUs currentTime = static_cast(AZStd::GetTimeNowMicroSecond()); + TimeUs deltaTime = currentTime - m_lastInvokedTimeUs; if (t_scale != 1.0f) { float floatDelta = static_cast(deltaTime) * t_scale; - deltaTime = static_cast(static_cast(floatDelta)); + deltaTime = static_cast(static_cast(floatDelta)); } - m_accumulatedTimeMs += deltaTime; - m_lastInvokedTimeMs = currentTime; + m_accumulatedTimeUs += deltaTime; + m_lastInvokedTimeUs = currentTime; - return m_accumulatedTimeMs; + return m_accumulatedTimeUs; } } diff --git a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h index adf576becb..3ab3dbc234 100644 --- a/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h +++ b/Code/Framework/AzCore/AzCore/Time/TimeSystemComponent.h @@ -39,11 +39,12 @@ namespace AZ //! ITime overrides. //! @{ TimeMs GetElapsedTimeMs() const override; + TimeUs GetElapsedTimeUs() const override; //! @} private: - mutable TimeMs m_lastInvokedTimeMs = TimeMs{0}; - mutable TimeMs m_accumulatedTimeMs = TimeMs{0}; + mutable TimeUs m_lastInvokedTimeUs = TimeUs{0}; + mutable TimeUs m_accumulatedTimeUs = TimeUs{0}; }; } From 5cee8d18929c10b2bd67cbaaab0554e916360648 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 10:59:40 -0700 Subject: [PATCH 003/226] stubbed out refactor of version explorer Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Editor/View/Windows/MainWindow.cpp | 71 -- .../Code/Editor/View/Windows/MainWindow.h | 3 - .../Windows/Tools/UpgradeTool/FileSaver.cpp | 1023 +++++++++++++++++ .../Windows/Tools/UpgradeTool/FileSaver.h | 180 +++ .../Windows/Tools/UpgradeTool/Modifier.cpp | 1023 +++++++++++++++++ .../View/Windows/Tools/UpgradeTool/Modifier.h | 167 +++ .../Windows/Tools/UpgradeTool/Scanner.cpp | 1023 +++++++++++++++++ .../View/Windows/Tools/UpgradeTool/Scanner.h | 167 +++ .../Windows/Tools/UpgradeTool/UpgradeTool.cpp | 697 ----------- .../Windows/Tools/UpgradeTool/UpgradeTool.h | 149 --- .../Windows/Tools/UpgradeTool/UpgradeTool.ui | 260 ----- .../Tools/UpgradeTool/VersionExplorer.h | 10 +- .../Tools/UpgradeTool/VersionExplorerLog.cpp | 1023 +++++++++++++++++ .../Tools/UpgradeTool/VersionExplorerLog.h | 167 +++ .../Tools/UpgradeTool/VersionExplorerTraits.h | 19 + .../Code/scriptcanvasgem_editor_files.cmake | 11 +- 16 files changed, 4803 insertions(+), 1190 deletions(-) create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index fbe03ffc0a..856cceb508 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -704,78 +704,7 @@ namespace ScriptCanvasEditor m_autoSaveTimer.setSingleShot(true); connect(&m_autoSaveTimer, &QTimer::timeout, this, &MainWindow::OnAutoSave); - UpdateMenuState(false); - - PromptForUpgrade(); - } - - void MainWindow::PromptForUpgrade() - { - static bool displayUpgradePrompt = false; // Set to true if you need the upgrade dialog to show up on ScriptCanvas editor open - if (displayUpgradePrompt && m_showUpgradeTool) - { - QTimer::singleShot(1.f, this, [this]() - { - UpgradeTool* upgradeTool = aznew UpgradeTool(this); - - QPoint centerPoint = frameGeometry().center(); - - upgradeTool->adjustSize(); - upgradeTool->move(centerPoint.x() - upgradeTool->width() / 2, centerPoint.y() - upgradeTool->height() / 2); - - if (upgradeTool->exec() == QDialog::Accepted) - { - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - QString message = QObject::tr("%1 Graph(s) upgraded
%2 graph(s) did not require upgrade").arg(upgradeTool->UpgradedGraphCount()).arg(upgradeTool->SkippedGraphCount()); - if (assetsThatNeedManualInspection > 0) - { - message.append(QObject::tr("
%1 graph(s) that need manual corrections. You will be prompted to review them after you close this dialog.
").arg(assetsThatNeedManualInspection)); - } - - // Report - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZStd::string urlToReport = AZStd::string::format("For more information see the Upgrade Report.", resolvedBuffer); - message.append(QObject::tr("
%1").arg(urlToReport.c_str())); - - // Backup - if (upgradeTool->HasBackup()) - { - AZStd::string outputFileName2 = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP"); - - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName2.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - - AZStd::string backupPath = AZStd::string::format("
Open the Backup Folder.", resolvedBuffer); - message.append(QObject::tr("%1").arg(backupPath.c_str())); - } - - // Done upgrading, show details - QMessageBox mb(QMessageBox::Information, - QObject::tr("Upgrade Complete"), - message, - QMessageBox::Ok, this); - mb.setTextFormat(Qt::RichText); - - centerPoint = frameGeometry().center(); - - mb.adjustSize(); - mb.move(centerPoint.x() - width() / 2, centerPoint.y() - height() / 2); - - mb.exec(); - - // If there are graphs that need manual correction, show the helper - if (assetsThatNeedManualInspection > 0) - { - UpgradeHelper* upgradeHelper = new UpgradeHelper(this); - upgradeHelper->show(); - } - } - - }); - } } MainWindow::~MainWindow() diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index d11d2f0052..ed00254677 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -51,7 +51,6 @@ #include -#include #include #if SCRIPTCANVAS_EDITOR @@ -806,7 +805,5 @@ namespace ScriptCanvasEditor Workspace* m_workspace; void OnSaveCallback(bool saveSuccess, AZ::Data::AssetPtr, AZ::Data::AssetId previousFileAssetId); - - void PromptForUpgrade(); }; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp new file mode 100644 index 0000000000..eb182ed291 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp @@ -0,0 +1,1023 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace VersionExplorerCpp +{ + class FileEventHandler + : public AZ::IO::FileIOEventBus::Handler + { + public: + int m_errorCode = 0; + AZStd::string m_fileName; + + FileEventHandler() + { + BusConnect(); + } + + ~FileEventHandler() + { + BusDisconnect(); + } + + void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + { + m_errorCode = errorCode; + + if (fileName) + { + m_fileName = fileName; + } + } + }; +} + +namespace ScriptCanvasEditor +{ + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + + VersionExplorer::VersionExplorer(QWidget* parent /*= nullptr*/) + : AzQtComponents::StyledDialog(parent) + , m_ui(new Ui::VersionExplorer()) + { + m_ui->setupUi(this); + + m_ui->tableWidget->horizontalHeader()->setVisible(false); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_ui->tableWidget->setColumnWidth(3, 22); + + m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + + connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorer::OnScan); + connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorer::OnClose); + connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorer::OnUpgradeAll); + + m_ui->progressBar->setValue(0); + m_ui->progressBar->setVisible(false); + + m_keepEditorAlive = AZStd::make_unique(); + m_inspectingAsset = m_assetsToInspect.end(); + + } + + VersionExplorer::~VersionExplorer() + { + AZ::SystemTickBus::Handler::BusDisconnect(); + + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + + } + + void VersionExplorer::Log(const char* format, ...) + { + if (m_ui->verbose->isChecked()) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + void VersionExplorer::OnClose() + { + reject(); + } + + bool VersionExplorer::IsUpgrading() const + { + return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; + } + + void VersionExplorer::OnSystemTick() + { + switch (m_state) + { + case ProcessState::Scan: + + if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) + { + m_inProgress = true; + AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; + m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); + m_currentAsset.BlockUntilLoadComplete(); + if (m_currentAsset.IsReady()) + { + // The asset is ready, grab its info + m_inProgress = true; + InspectAsset(m_currentAsset, assetToUpgrade); + } + else + { + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + ++m_currentAssetRowIndex; + + Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); + ++m_failedAssets; + ScanComplete(m_currentAsset); + } + } + break; + + case ProcessState::Upgrade: + { + AZStd::lock_guard lock(m_mutex); + if (m_upgradeComplete) + { + ++m_upgradeAssetIndex; + m_inProgress = false; + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + + if (m_scriptCanvasEntity) + { + m_scriptCanvasEntity->Deactivate(); + m_scriptCanvasEntity = nullptr; + } + + GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); + + if (!m_isUpgradingSingleGraph) + { + if (m_inProgressAsset != m_assetsToUpgrade.end()) + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + } + + if (m_inProgressAsset == m_assetsToUpgrade.end()) + { + FinalizeUpgrade(); + } + } + else + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + m_inProgress = false; + m_state = ProcessState::Inactive; + m_settingsCache.reset(); + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + + m_isUpgradingSingleGraph = false; + + if (m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(false); + } + + m_upgradeComplete = false; + } + + if (!IsUpgrading() && m_state == ProcessState::Upgrade) + { + AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); + // Make the backup + if (errorMessage.empty()) + { + Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); + QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); + spinner->SetIsBusy(true); + } + } + + // Upgrade the graph + UpgradeGraph(*m_inProgressAsset); + } + else + { + Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); + GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); + } + + } + break; + } + default: + break; + } + + FlushLogs(); + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + // Backup + + void VersionExplorer::OnUpgradeAll() + { + m_state = ProcessState::Upgrade; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); + m_inProgressAsset = m_assetsToUpgrade.begin(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + AZ::SystemTickBus::Handler::BusConnect(); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_keepEditorAlive = AZStd::make_unique(); + } + + AZStd::string VersionExplorer::BackupGraph(const AZ::Data::Asset& asset) + { + if (!m_ui->makeBackupCheckbox->isChecked()) + { + // considered a success + return ""; + } + + QDateTime theTime = QDateTime::currentDateTime(); + QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); + + AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); + char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); + backupPath = backupPathCStr; + + if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + { + if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); + return "Failed to create backup folder"; + } + } + + AZStd::string devRoot = "@devroot@"; + AZStd::string devAssets = "@devassets@"; + + char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); + + char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); + + AZStd::string relativePath = devAssetsCStr; + AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AZStd::string sourceFilePath; + + AZStd::string watchFolder; + AZ::Data::AssetInfo assetInfo; + bool sourceInfoFound{}; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + if (sourceInfoFound) + { + AZStd::string assetPath; + AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); + + sourceFilePath = assetPath; + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + return "Failed to find source file"; + } + + devRoot = devRootCStr; + AzFramework::StringFunc::Path::Normalize(devRoot); + + relativePath = sourceFilePath; + AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AzFramework::StringFunc::Path::Normalize(relativePath); + AzFramework::StringFunc::Path::Normalize(backupPath); + + AZStd::string targetFilePath = backupPath; + targetFilePath += relativePath; + + if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return "Failed to copy source file to backup location"; + } + + Log("VersionExplorer::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return ""; + } + + void VersionExplorer::UpgradeGraph(const AZ::Data::Asset& asset) + { + m_inProgress = true; + m_upgradeComplete = false; + Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); + m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_scriptCanvasEntity = nullptr; + + UpgradeNotifications::Bus::Handler::BusConnect(); + + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "VersionExplorer::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + if (graphComponent) + { + m_scriptCanvasEntity = scriptCanvasEntity; + + graphComponent->UpgradeGraph + ( asset + , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_ui->verbose->isChecked()); + } + } + + AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); + } + + void VersionExplorer::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + if (!fullPathFound) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); + } + + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + + void VersionExplorer::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + m_tmpFileName.clear(); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + // attempt to remove temporary file no matter what + m_tmpFileName = tmpFileName; + if (!tempSavedSucceeded) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); + return; + } + + using SCCommandBus = AzToolsFramework::SourceControlCommandBus; + SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, + [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + if (m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + int result = QMessageBox::No; + if (!m_overwriteAll) + { + QMessageBox mb(QMessageBox::Warning, + QObject::tr("Failed to Save Upgraded File"), + QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), + QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); + + result = mb.exec(); + if (result == QMessageBox::YesToAll) + { + m_overwriteAll = true; + } + } + + if (result == QMessageBox::Yes || m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + } + } + }); + } + + void VersionExplorer::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + , size_t remainingAttempts) + { + VersionExplorerCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + // all attempts failed, give up + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); + } + else if (remainingAttempts == 2) + { + // before the final attempt, flush all caches + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction( + [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + m_tmpFileName.clear(); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, asset]() + { + GraphUpgradeComplete(asset, OperationResult::Success, ""); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void VersionExplorer::GraphUpgradeComplete + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + AZStd::lock_guard lock(m_mutex); + m_upgradeComplete = true; + m_upgradeResult = result; + m_upgradeMessage = message; + m_upgradeAsset = asset; + + if (!m_tmpFileName.empty()) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); + + if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + { + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + } + } + + if (m_upgradeResult == OperationResult::Failure) + { + AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + } + + m_tmpFileName.clear(); + } + + void VersionExplorer::GraphUpgradeCompleteUIUpdate + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + QString text = asset.GetHint().c_str(); + QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QString assetName = asset.GetHint().c_str(); + + if (label->text().compare(assetName) == 0) + { + m_ui->tableWidget->removeCellWidget(row, ColumnAction); + m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + + QToolButton* doneButton = new QToolButton(this); + doneButton->setToolTip("Upgrade complete"); + if (result == OperationResult::Success) + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + } + else + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + } + + m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + } + } + } + } + + void VersionExplorer::FinalizeUpgrade() + { + Log("FinalizeUpgrade!"); + m_inProgress = false; + m_assetsToUpgrade.clear(); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(true); + m_keepEditorAlive.reset(); + m_ui->progressBar->setVisible(false); + + // Manual correction + size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); + if (assetsThatNeedManualInspection > 0) + { + m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + } + else + { + m_ui->spinner->SetText("Upgrade complete."); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Interface::Get()->SetIsUpgrading(false); + m_settingsCache.reset(); + } + + // Scanning + + void VersionExplorer::OnScan() + { + m_assetsToUpgrade.clear(); + m_assetsToInspect.clear(); + m_ui->tableWidget->setRowCount(0); + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); + m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); + DoScan(); + } + + void VersionExplorer::DoScan() + { + m_state = ProcessState::Scan; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + + AZ::SystemTickBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + + if (!m_assetsToInspect.empty()) + { + m_discoveredAssets = m_assetsToInspect.size(); + m_failedAssets = 0; + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + m_ui->progressFrame->setVisible(true); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); + m_ui->progressBar->setValue(0); + + m_ui->spinner->SetIsBusy(true); + m_ui->spinner->SetBusyIconSize(32); + + m_ui->scanButton->setEnabled(false); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(false); + + m_inspectingAsset = m_assetsToInspect.begin(); + m_keepEditorAlive = AZStd::make_unique(); + } + } + + void VersionExplorer::BackupComplete() + { + m_currentAssetRowIndex = 0; + m_ui->progressBar->setValue(0); + DoScan(); + } + + void VersionExplorer::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) + { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); + ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + + + if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + { + ScanComplete(asset); + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); + return; + } + + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) + { + m_assetsToUpgrade.push_back(asset); + + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); + + QPushButton* rowGoToButton = new QPushButton(this); + rowGoToButton->setText("Upgrade"); + rowGoToButton->setEnabled(false); + + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { + // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda + UpgradeSingle(rowGoToButton, spinner, assetInfo); + }); + + AZ::SystemTickBus::ExecuteQueuedEvents(); + + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = asset.GetHint().c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); + + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + ScanComplete(asset); + ++m_inspectedAssets; + ++m_currentAssetRowIndex; + } + + void VersionExplorer::UpgradeSingle + ( QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + + if (asset) + { + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); + + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); + + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } + } + + void VersionExplorer::ScanComplete(const AZ::Data::Asset& asset) + { + Log("ScanComplete: %s", asset.GetHint().c_str()); + m_inProgress = false; + m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_ui->scanButton->setEnabled(true); + + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); + FlushLogs(); + + if (m_inspectingAsset == m_assetsToInspect.end()) + { + AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + } + } + + void VersionExplorer::FinalizeScan() + { + Log("FinalizeScan()"); + + m_ui->spinner->SetIsBusy(false); + m_ui->onlyShowOutdated->setEnabled(true); + + // Enable all the Upgrade buttons + for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) + { + QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + if (button) + { + button->setEnabled(true); + } + } + + QString spinnerText = QStringLiteral("Scan Complete"); + if (m_assetsToUpgrade.empty()) + { + spinnerText.append(" - No graphs require upgrade!"); + } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); + } + + + m_ui->spinner->SetText(spinnerText); + m_ui->progressBar->setVisible(false); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + + m_keepEditorAlive.reset(); + m_settingsCache.reset(); + m_state = ProcessState::Inactive; + } + + void VersionExplorer::FlushLogs() + { + if (m_logs.empty()) + { + return; + } + + const QTextCursor oldCursor = m_ui->textEdit->textCursor(); + QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); + + m_ui->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_ui->textEdit->textCursor(); + + while (!m_logs.empty()) + { + auto line = "\n" + m_logs.front(); + + m_logs.pop_front(); + + textCursor.insertText(line.c_str()); + } + + scrollBar->setValue(scrollBar->maximum()); + m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + + } + + bool VersionExplorer::CaptureLogFromTraceBus(const char* window, const char* message) + { + if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) + { + return true; + } + + AZStd::string msg = message; + if (msg.ends_with("\n")) + { + msg = msg.substr(0, msg.size() - 1); + } + + m_logs.push_back(msg); + return m_ui->updateReportingOnly->isChecked(); + } + + bool VersionExplorer::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool VersionExplorer::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool VersionExplorer::OnException(const char* message) + { + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); + } + + bool VersionExplorer::OnPrintf(const char* window, const char* message) + { + return CaptureLogFromTraceBus(window, message); + } + + void VersionExplorer::closeEvent(QCloseEvent* event) + { + m_keepEditorAlive.reset(); + + AzQtComponents::StyledDialog::closeEvent(event); + } + +#include + +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h new file mode 100644 index 0000000000..acb28a7dba --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include + +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +#include +#include +#include + +#include +#include + +#include +#include +#include +#endif + +class QPushButton; + +namespace Ui +{ + class VersionExplorer; +} + +namespace AzQtComponents +{ + class StyledBusyLabel; +} + +namespace ScriptCanvasEditor +{ + //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow + //! the upgrade tool to work even if the editor is not in the foreground + class EditorKeepAlive + { + public: + EditorKeepAlive(); + ~EditorKeepAlive(); + + private: + int m_keepEditorActive; + ICVar* m_edKeepEditorActive; + }; + + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + class VersionExplorer + : public AzQtComponents::StyledDialog + , private AZ::SystemTickBus::Handler + , private UpgradeNotifications::Bus::Handler + , private AZ::Debug::TraceMessageBus::Handler + { + Q_OBJECT + + public: + AZ_CLASS_ALLOCATOR(VersionExplorer, AZ::SystemAllocator, 0); + + explicit VersionExplorer(QWidget* parent = nullptr); + ~VersionExplorer(); + + private: + + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; + + void OnScan(); + void OnClose(); + + enum class ProcessState + { + Inactive, + Backup, + Scan, + Upgrade, + }; + ProcessState m_state = ProcessState::Inactive; + + void DoScan(); + void ScanComplete(const AZ::Data::Asset&); + + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + + void OnUpgradeAll(); + + // SystemTickBus::Handler + void OnSystemTick() override; + // + + // AZ::Debug::TranceMessageBus::Handler + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + // + + bool CaptureLogFromTraceBus(const char* window, const char* message); + + enum class OperationResult + { + Success, + Failure, + }; + + void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); + + bool IsUpgrading() const; + + bool m_inProgress = false; + // scan fields + size_t m_currentAssetRowIndex = 0; + size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; + + IUpgradeRequests::AssetList m_assetsToInspect; + IUpgradeRequests::AssetList::iterator m_inspectingAsset; + using UpgradeAssets = AZStd::vector>; + UpgradeAssets m_assetsToUpgrade; + UpgradeAssets::iterator m_inProgressAsset; + + AZ::Data::Asset m_currentAsset; + + AZStd::unique_ptr m_ui; + + AZStd::unique_ptr m_settingsCache; + + // upgrade fields + AZStd::recursive_mutex m_mutex; + bool m_upgradeComplete = false; + AZ::Data::Asset m_upgradeAsset; + int m_upgradeAssetIndex = 0; + OperationResult m_upgradeResult; + AZStd::string m_upgradeMessage; + AZStd::string m_tmpFileName; + + AZStd::unique_ptr m_keepEditorAlive; + + AZStd::deque m_logs; + + AZ::Entity* m_scriptCanvasEntity = nullptr; + + bool m_isUpgradingSingleGraph = false; + + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); + + void FlushLogs(); + + void FinalizeUpgrade(); + void FinalizeScan(); + + void BackupComplete(); + AZStd::string BackupGraph(const AZ::Data::Asset&); + void UpgradeGraph(const AZ::Data::Asset&); + + void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void closeEvent(QCloseEvent* event) override; + + bool m_overwriteAll = false; + void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); + + void Log(const char* format, ...); + }; +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp new file mode 100644 index 0000000000..b96a5c6d0c --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -0,0 +1,1023 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace VersionExplorerCpp +{ + class FileEventHandler + : public AZ::IO::FileIOEventBus::Handler + { + public: + int m_errorCode = 0; + AZStd::string m_fileName; + + FileEventHandler() + { + BusConnect(); + } + + ~FileEventHandler() + { + BusDisconnect(); + } + + void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + { + m_errorCode = errorCode; + + if (fileName) + { + m_fileName = fileName; + } + } + }; +} + +namespace ScriptCanvasEditor +{ + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + + Modifier::Modifier(QWidget* parent /*= nullptr*/) + : AzQtComponents::StyledDialog(parent) + , m_ui(new Ui::Modifier()) + { + m_ui->setupUi(this); + + m_ui->tableWidget->horizontalHeader()->setVisible(false); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_ui->tableWidget->setColumnWidth(3, 22); + + m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + + connect(m_ui->scanButton, &QPushButton::pressed, this, &Modifier::OnScan); + connect(m_ui->closeButton, &QPushButton::pressed, this, &Modifier::OnClose); + connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &Modifier::OnUpgradeAll); + + m_ui->progressBar->setValue(0); + m_ui->progressBar->setVisible(false); + + m_keepEditorAlive = AZStd::make_unique(); + m_inspectingAsset = m_assetsToInspect.end(); + + } + + Modifier::~Modifier() + { + AZ::SystemTickBus::Handler::BusDisconnect(); + + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + + } + + void Modifier::Log(const char* format, ...) + { + if (m_ui->verbose->isChecked()) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + void Modifier::OnClose() + { + reject(); + } + + bool Modifier::IsUpgrading() const + { + return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; + } + + void Modifier::OnSystemTick() + { + switch (m_state) + { + case ProcessState::Scan: + + if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) + { + m_inProgress = true; + AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; + m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); + m_currentAsset.BlockUntilLoadComplete(); + if (m_currentAsset.IsReady()) + { + // The asset is ready, grab its info + m_inProgress = true; + InspectAsset(m_currentAsset, assetToUpgrade); + } + else + { + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + ++m_currentAssetRowIndex; + + Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); + ++m_failedAssets; + ScanComplete(m_currentAsset); + } + } + break; + + case ProcessState::Upgrade: + { + AZStd::lock_guard lock(m_mutex); + if (m_upgradeComplete) + { + ++m_upgradeAssetIndex; + m_inProgress = false; + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + + if (m_scriptCanvasEntity) + { + m_scriptCanvasEntity->Deactivate(); + m_scriptCanvasEntity = nullptr; + } + + GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); + + if (!m_isUpgradingSingleGraph) + { + if (m_inProgressAsset != m_assetsToUpgrade.end()) + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + } + + if (m_inProgressAsset == m_assetsToUpgrade.end()) + { + FinalizeUpgrade(); + } + } + else + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + m_inProgress = false; + m_state = ProcessState::Inactive; + m_settingsCache.reset(); + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + + m_isUpgradingSingleGraph = false; + + if (m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(false); + } + + m_upgradeComplete = false; + } + + if (!IsUpgrading() && m_state == ProcessState::Upgrade) + { + AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); + // Make the backup + if (errorMessage.empty()) + { + Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); + QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); + spinner->SetIsBusy(true); + } + } + + // Upgrade the graph + UpgradeGraph(*m_inProgressAsset); + } + else + { + Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); + GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); + } + + } + break; + } + default: + break; + } + + FlushLogs(); + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + // Backup + + void Modifier::OnUpgradeAll() + { + m_state = ProcessState::Upgrade; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); + m_inProgressAsset = m_assetsToUpgrade.begin(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + AZ::SystemTickBus::Handler::BusConnect(); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_keepEditorAlive = AZStd::make_unique(); + } + + AZStd::string Modifier::BackupGraph(const AZ::Data::Asset& asset) + { + if (!m_ui->makeBackupCheckbox->isChecked()) + { + // considered a success + return ""; + } + + QDateTime theTime = QDateTime::currentDateTime(); + QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); + + AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); + char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); + backupPath = backupPathCStr; + + if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + { + if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); + return "Failed to create backup folder"; + } + } + + AZStd::string devRoot = "@devroot@"; + AZStd::string devAssets = "@devassets@"; + + char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); + + char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); + + AZStd::string relativePath = devAssetsCStr; + AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AZStd::string sourceFilePath; + + AZStd::string watchFolder; + AZ::Data::AssetInfo assetInfo; + bool sourceInfoFound{}; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + if (sourceInfoFound) + { + AZStd::string assetPath; + AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); + + sourceFilePath = assetPath; + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Modifier::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + return "Failed to find source file"; + } + + devRoot = devRootCStr; + AzFramework::StringFunc::Path::Normalize(devRoot); + + relativePath = sourceFilePath; + AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AzFramework::StringFunc::Path::Normalize(relativePath); + AzFramework::StringFunc::Path::Normalize(backupPath); + + AZStd::string targetFilePath = backupPath; + targetFilePath += relativePath; + + if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Modifier::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return "Failed to copy source file to backup location"; + } + + Log("Modifier::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return ""; + } + + void Modifier::UpgradeGraph(const AZ::Data::Asset& asset) + { + m_inProgress = true; + m_upgradeComplete = false; + Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); + m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_scriptCanvasEntity = nullptr; + + UpgradeNotifications::Bus::Handler::BusConnect(); + + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "Modifier::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + if (graphComponent) + { + m_scriptCanvasEntity = scriptCanvasEntity; + + graphComponent->UpgradeGraph + ( asset + , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_ui->verbose->isChecked()); + } + } + + AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); + } + + void Modifier::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + if (!fullPathFound) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); + } + + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + + void Modifier::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + m_tmpFileName.clear(); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + // attempt to remove temporary file no matter what + m_tmpFileName = tmpFileName; + if (!tempSavedSucceeded) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); + return; + } + + using SCCommandBus = AzToolsFramework::SourceControlCommandBus; + SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, + [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + if (m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + int result = QMessageBox::No; + if (!m_overwriteAll) + { + QMessageBox mb(QMessageBox::Warning, + QObject::tr("Failed to Save Upgraded File"), + QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), + QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); + + result = mb.exec(); + if (result == QMessageBox::YesToAll) + { + m_overwriteAll = true; + } + } + + if (result == QMessageBox::Yes || m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + } + } + }); + } + + void Modifier::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + , size_t remainingAttempts) + { + VersionExplorerCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + // all attempts failed, give up + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); + } + else if (remainingAttempts == 2) + { + // before the final attempt, flush all caches + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction( + [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + m_tmpFileName.clear(); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, asset]() + { + GraphUpgradeComplete(asset, OperationResult::Success, ""); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void Modifier::GraphUpgradeComplete + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + AZStd::lock_guard lock(m_mutex); + m_upgradeComplete = true; + m_upgradeResult = result; + m_upgradeMessage = message; + m_upgradeAsset = asset; + + if (!m_tmpFileName.empty()) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); + + if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + { + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + } + } + + if (m_upgradeResult == OperationResult::Failure) + { + AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + } + + m_tmpFileName.clear(); + } + + void Modifier::GraphUpgradeCompleteUIUpdate + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + QString text = asset.GetHint().c_str(); + QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QString assetName = asset.GetHint().c_str(); + + if (label->text().compare(assetName) == 0) + { + m_ui->tableWidget->removeCellWidget(row, ColumnAction); + m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + + QToolButton* doneButton = new QToolButton(this); + doneButton->setToolTip("Upgrade complete"); + if (result == OperationResult::Success) + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + } + else + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + } + + m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + } + } + } + } + + void Modifier::FinalizeUpgrade() + { + Log("FinalizeUpgrade!"); + m_inProgress = false; + m_assetsToUpgrade.clear(); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(true); + m_keepEditorAlive.reset(); + m_ui->progressBar->setVisible(false); + + // Manual correction + size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); + if (assetsThatNeedManualInspection > 0) + { + m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + } + else + { + m_ui->spinner->SetText("Upgrade complete."); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Interface::Get()->SetIsUpgrading(false); + m_settingsCache.reset(); + } + + // Scanning + + void Modifier::OnScan() + { + m_assetsToUpgrade.clear(); + m_assetsToInspect.clear(); + m_ui->tableWidget->setRowCount(0); + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); + m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); + DoScan(); + } + + void Modifier::DoScan() + { + m_state = ProcessState::Scan; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + + AZ::SystemTickBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + + if (!m_assetsToInspect.empty()) + { + m_discoveredAssets = m_assetsToInspect.size(); + m_failedAssets = 0; + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + m_ui->progressFrame->setVisible(true); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); + m_ui->progressBar->setValue(0); + + m_ui->spinner->SetIsBusy(true); + m_ui->spinner->SetBusyIconSize(32); + + m_ui->scanButton->setEnabled(false); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(false); + + m_inspectingAsset = m_assetsToInspect.begin(); + m_keepEditorAlive = AZStd::make_unique(); + } + } + + void Modifier::BackupComplete() + { + m_currentAssetRowIndex = 0; + m_ui->progressBar->setValue(0); + DoScan(); + } + + void Modifier::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) + { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); + ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + + + if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + { + ScanComplete(asset); + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); + return; + } + + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) + { + m_assetsToUpgrade.push_back(asset); + + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); + + QPushButton* rowGoToButton = new QPushButton(this); + rowGoToButton->setText("Upgrade"); + rowGoToButton->setEnabled(false); + + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { + // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda + UpgradeSingle(rowGoToButton, spinner, assetInfo); + }); + + AZ::SystemTickBus::ExecuteQueuedEvents(); + + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = asset.GetHint().c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); + + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + ScanComplete(asset); + ++m_inspectedAssets; + ++m_currentAssetRowIndex; + } + + void Modifier::UpgradeSingle + ( QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + + if (asset) + { + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); + + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); + + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } + } + + void Modifier::ScanComplete(const AZ::Data::Asset& asset) + { + Log("ScanComplete: %s", asset.GetHint().c_str()); + m_inProgress = false; + m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_ui->scanButton->setEnabled(true); + + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); + FlushLogs(); + + if (m_inspectingAsset == m_assetsToInspect.end()) + { + AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + } + } + + void Modifier::FinalizeScan() + { + Log("FinalizeScan()"); + + m_ui->spinner->SetIsBusy(false); + m_ui->onlyShowOutdated->setEnabled(true); + + // Enable all the Upgrade buttons + for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) + { + QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + if (button) + { + button->setEnabled(true); + } + } + + QString spinnerText = QStringLiteral("Scan Complete"); + if (m_assetsToUpgrade.empty()) + { + spinnerText.append(" - No graphs require upgrade!"); + } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); + } + + + m_ui->spinner->SetText(spinnerText); + m_ui->progressBar->setVisible(false); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + + m_keepEditorAlive.reset(); + m_settingsCache.reset(); + m_state = ProcessState::Inactive; + } + + void Modifier::FlushLogs() + { + if (m_logs.empty()) + { + return; + } + + const QTextCursor oldCursor = m_ui->textEdit->textCursor(); + QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); + + m_ui->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_ui->textEdit->textCursor(); + + while (!m_logs.empty()) + { + auto line = "\n" + m_logs.front(); + + m_logs.pop_front(); + + textCursor.insertText(line.c_str()); + } + + scrollBar->setValue(scrollBar->maximum()); + m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + + } + + bool Modifier::CaptureLogFromTraceBus(const char* window, const char* message) + { + if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) + { + return true; + } + + AZStd::string msg = message; + if (msg.ends_with("\n")) + { + msg = msg.substr(0, msg.size() - 1); + } + + m_logs.push_back(msg); + return m_ui->updateReportingOnly->isChecked(); + } + + bool Modifier::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool Modifier::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool Modifier::OnException(const char* message) + { + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); + } + + bool Modifier::OnPrintf(const char* window, const char* message) + { + return CaptureLogFromTraceBus(window, message); + } + + void Modifier::closeEvent(QCloseEvent* event) + { + m_keepEditorAlive.reset(); + + AzQtComponents::StyledDialog::closeEvent(event); + } + +#include + +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h new file mode 100644 index 0000000000..5f379d682a --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include + +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +#include +#include +#include + +#include +#include + +#include +#include +#include +#endif + +class QPushButton; + +namespace Ui +{ + class Modifier; +} + +namespace AzQtComponents +{ + class StyledBusyLabel; +} + +namespace ScriptCanvasEditor +{ + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + class Modifier + : public AzQtComponents::StyledDialog + , private AZ::SystemTickBus::Handler + , private UpgradeNotifications::Bus::Handler + , private AZ::Debug::TraceMessageBus::Handler + { + Q_OBJECT + + public: + AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); + + explicit Modifier(QWidget* parent = nullptr); + ~Modifier(); + + private: + + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; + + void OnScan(); + void OnClose(); + + enum class ProcessState + { + Inactive, + Backup, + Scan, + Upgrade, + }; + ProcessState m_state = ProcessState::Inactive; + + void DoScan(); + void ScanComplete(const AZ::Data::Asset&); + + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + + void OnUpgradeAll(); + + // SystemTickBus::Handler + void OnSystemTick() override; + // + + // AZ::Debug::TranceMessageBus::Handler + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + // + + bool CaptureLogFromTraceBus(const char* window, const char* message); + + enum class OperationResult + { + Success, + Failure, + }; + + void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); + + bool IsUpgrading() const; + + bool m_inProgress = false; + // scan fields + size_t m_currentAssetRowIndex = 0; + size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; + + IUpgradeRequests::AssetList m_assetsToInspect; + IUpgradeRequests::AssetList::iterator m_inspectingAsset; + using UpgradeAssets = AZStd::vector>; + UpgradeAssets m_assetsToUpgrade; + UpgradeAssets::iterator m_inProgressAsset; + + AZ::Data::Asset m_currentAsset; + + AZStd::unique_ptr m_ui; + + AZStd::unique_ptr m_settingsCache; + + // upgrade fields + AZStd::recursive_mutex m_mutex; + bool m_upgradeComplete = false; + AZ::Data::Asset m_upgradeAsset; + int m_upgradeAssetIndex = 0; + OperationResult m_upgradeResult; + AZStd::string m_upgradeMessage; + AZStd::string m_tmpFileName; + + AZStd::unique_ptr m_keepEditorAlive; + + AZStd::deque m_logs; + + AZ::Entity* m_scriptCanvasEntity = nullptr; + + bool m_isUpgradingSingleGraph = false; + + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); + + void FlushLogs(); + + void FinalizeUpgrade(); + void FinalizeScan(); + + void BackupComplete(); + AZStd::string BackupGraph(const AZ::Data::Asset&); + void UpgradeGraph(const AZ::Data::Asset&); + + void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void closeEvent(QCloseEvent* event) override; + + bool m_overwriteAll = false; + void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); + + void Log(const char* format, ...); + }; +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp new file mode 100644 index 0000000000..29f5f8f530 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -0,0 +1,1023 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace VersionExplorerCpp +{ + class FileEventHandler + : public AZ::IO::FileIOEventBus::Handler + { + public: + int m_errorCode = 0; + AZStd::string m_fileName; + + FileEventHandler() + { + BusConnect(); + } + + ~FileEventHandler() + { + BusDisconnect(); + } + + void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + { + m_errorCode = errorCode; + + if (fileName) + { + m_fileName = fileName; + } + } + }; +} + +namespace ScriptCanvasEditor +{ + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + + Scanner::Scanner(QWidget* parent /*= nullptr*/) + : AzQtComponents::StyledDialog(parent) + , m_ui(new Ui::Scanner()) + { + m_ui->setupUi(this); + + m_ui->tableWidget->horizontalHeader()->setVisible(false); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_ui->tableWidget->setColumnWidth(3, 22); + + m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + + connect(m_ui->scanButton, &QPushButton::pressed, this, &Scanner::OnScan); + connect(m_ui->closeButton, &QPushButton::pressed, this, &Scanner::OnClose); + connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &Scanner::OnUpgradeAll); + + m_ui->progressBar->setValue(0); + m_ui->progressBar->setVisible(false); + + m_keepEditorAlive = AZStd::make_unique(); + m_inspectingAsset = m_assetsToInspect.end(); + + } + + Scanner::~Scanner() + { + AZ::SystemTickBus::Handler::BusDisconnect(); + + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + + } + + void Scanner::Log(const char* format, ...) + { + if (m_ui->verbose->isChecked()) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + void Scanner::OnClose() + { + reject(); + } + + bool Scanner::IsUpgrading() const + { + return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; + } + + void Scanner::OnSystemTick() + { + switch (m_state) + { + case ProcessState::Scan: + + if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) + { + m_inProgress = true; + AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; + m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); + m_currentAsset.BlockUntilLoadComplete(); + if (m_currentAsset.IsReady()) + { + // The asset is ready, grab its info + m_inProgress = true; + InspectAsset(m_currentAsset, assetToUpgrade); + } + else + { + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + ++m_currentAssetRowIndex; + + Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); + ++m_failedAssets; + ScanComplete(m_currentAsset); + } + } + break; + + case ProcessState::Upgrade: + { + AZStd::lock_guard lock(m_mutex); + if (m_upgradeComplete) + { + ++m_upgradeAssetIndex; + m_inProgress = false; + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + + if (m_scriptCanvasEntity) + { + m_scriptCanvasEntity->Deactivate(); + m_scriptCanvasEntity = nullptr; + } + + GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); + + if (!m_isUpgradingSingleGraph) + { + if (m_inProgressAsset != m_assetsToUpgrade.end()) + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + } + + if (m_inProgressAsset == m_assetsToUpgrade.end()) + { + FinalizeUpgrade(); + } + } + else + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + m_inProgress = false; + m_state = ProcessState::Inactive; + m_settingsCache.reset(); + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + + m_isUpgradingSingleGraph = false; + + if (m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(false); + } + + m_upgradeComplete = false; + } + + if (!IsUpgrading() && m_state == ProcessState::Upgrade) + { + AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); + // Make the backup + if (errorMessage.empty()) + { + Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); + QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); + spinner->SetIsBusy(true); + } + } + + // Upgrade the graph + UpgradeGraph(*m_inProgressAsset); + } + else + { + Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); + GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); + } + + } + break; + } + default: + break; + } + + FlushLogs(); + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + // Backup + + void Scanner::OnUpgradeAll() + { + m_state = ProcessState::Upgrade; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); + m_inProgressAsset = m_assetsToUpgrade.begin(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + AZ::SystemTickBus::Handler::BusConnect(); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_keepEditorAlive = AZStd::make_unique(); + } + + AZStd::string Scanner::BackupGraph(const AZ::Data::Asset& asset) + { + if (!m_ui->makeBackupCheckbox->isChecked()) + { + // considered a success + return ""; + } + + QDateTime theTime = QDateTime::currentDateTime(); + QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); + + AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); + char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); + backupPath = backupPathCStr; + + if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + { + if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); + return "Failed to create backup folder"; + } + } + + AZStd::string devRoot = "@devroot@"; + AZStd::string devAssets = "@devassets@"; + + char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); + + char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); + + AZStd::string relativePath = devAssetsCStr; + AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AZStd::string sourceFilePath; + + AZStd::string watchFolder; + AZ::Data::AssetInfo assetInfo; + bool sourceInfoFound{}; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + if (sourceInfoFound) + { + AZStd::string assetPath; + AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); + + sourceFilePath = assetPath; + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Scanner::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + return "Failed to find source file"; + } + + devRoot = devRootCStr; + AzFramework::StringFunc::Path::Normalize(devRoot); + + relativePath = sourceFilePath; + AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AzFramework::StringFunc::Path::Normalize(relativePath); + AzFramework::StringFunc::Path::Normalize(backupPath); + + AZStd::string targetFilePath = backupPath; + targetFilePath += relativePath; + + if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Scanner::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return "Failed to copy source file to backup location"; + } + + Log("Scanner::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return ""; + } + + void Scanner::UpgradeGraph(const AZ::Data::Asset& asset) + { + m_inProgress = true; + m_upgradeComplete = false; + Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); + m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_scriptCanvasEntity = nullptr; + + UpgradeNotifications::Bus::Handler::BusConnect(); + + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "Scanner::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + if (graphComponent) + { + m_scriptCanvasEntity = scriptCanvasEntity; + + graphComponent->UpgradeGraph + ( asset + , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_ui->verbose->isChecked()); + } + } + + AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); + } + + void Scanner::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + if (!fullPathFound) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); + } + + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + + void Scanner::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + m_tmpFileName.clear(); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + // attempt to remove temporary file no matter what + m_tmpFileName = tmpFileName; + if (!tempSavedSucceeded) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); + return; + } + + using SCCommandBus = AzToolsFramework::SourceControlCommandBus; + SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, + [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + if (m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + int result = QMessageBox::No; + if (!m_overwriteAll) + { + QMessageBox mb(QMessageBox::Warning, + QObject::tr("Failed to Save Upgraded File"), + QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), + QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); + + result = mb.exec(); + if (result == QMessageBox::YesToAll) + { + m_overwriteAll = true; + } + } + + if (result == QMessageBox::Yes || m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + } + } + }); + } + + void Scanner::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + , size_t remainingAttempts) + { + VersionExplorerCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + // all attempts failed, give up + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); + } + else if (remainingAttempts == 2) + { + // before the final attempt, flush all caches + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction( + [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + m_tmpFileName.clear(); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, asset]() + { + GraphUpgradeComplete(asset, OperationResult::Success, ""); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void Scanner::GraphUpgradeComplete + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + AZStd::lock_guard lock(m_mutex); + m_upgradeComplete = true; + m_upgradeResult = result; + m_upgradeMessage = message; + m_upgradeAsset = asset; + + if (!m_tmpFileName.empty()) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); + + if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + { + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + } + } + + if (m_upgradeResult == OperationResult::Failure) + { + AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + } + + m_tmpFileName.clear(); + } + + void Scanner::GraphUpgradeCompleteUIUpdate + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + QString text = asset.GetHint().c_str(); + QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QString assetName = asset.GetHint().c_str(); + + if (label->text().compare(assetName) == 0) + { + m_ui->tableWidget->removeCellWidget(row, ColumnAction); + m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + + QToolButton* doneButton = new QToolButton(this); + doneButton->setToolTip("Upgrade complete"); + if (result == OperationResult::Success) + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + } + else + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + } + + m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + } + } + } + } + + void Scanner::FinalizeUpgrade() + { + Log("FinalizeUpgrade!"); + m_inProgress = false; + m_assetsToUpgrade.clear(); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(true); + m_keepEditorAlive.reset(); + m_ui->progressBar->setVisible(false); + + // Manual correction + size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); + if (assetsThatNeedManualInspection > 0) + { + m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + } + else + { + m_ui->spinner->SetText("Upgrade complete."); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Interface::Get()->SetIsUpgrading(false); + m_settingsCache.reset(); + } + + // Scanning + + void Scanner::OnScan() + { + m_assetsToUpgrade.clear(); + m_assetsToInspect.clear(); + m_ui->tableWidget->setRowCount(0); + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); + m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); + DoScan(); + } + + void Scanner::DoScan() + { + m_state = ProcessState::Scan; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + + AZ::SystemTickBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + + if (!m_assetsToInspect.empty()) + { + m_discoveredAssets = m_assetsToInspect.size(); + m_failedAssets = 0; + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + m_ui->progressFrame->setVisible(true); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); + m_ui->progressBar->setValue(0); + + m_ui->spinner->SetIsBusy(true); + m_ui->spinner->SetBusyIconSize(32); + + m_ui->scanButton->setEnabled(false); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(false); + + m_inspectingAsset = m_assetsToInspect.begin(); + m_keepEditorAlive = AZStd::make_unique(); + } + } + + void Scanner::BackupComplete() + { + m_currentAssetRowIndex = 0; + m_ui->progressBar->setValue(0); + DoScan(); + } + + void Scanner::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) + { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); + ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + + + if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + { + ScanComplete(asset); + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); + return; + } + + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) + { + m_assetsToUpgrade.push_back(asset); + + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); + + QPushButton* rowGoToButton = new QPushButton(this); + rowGoToButton->setText("Upgrade"); + rowGoToButton->setEnabled(false); + + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { + // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda + UpgradeSingle(rowGoToButton, spinner, assetInfo); + }); + + AZ::SystemTickBus::ExecuteQueuedEvents(); + + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = asset.GetHint().c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); + + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + ScanComplete(asset); + ++m_inspectedAssets; + ++m_currentAssetRowIndex; + } + + void Scanner::UpgradeSingle + ( QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + + if (asset) + { + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); + + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); + + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } + } + + void Scanner::ScanComplete(const AZ::Data::Asset& asset) + { + Log("ScanComplete: %s", asset.GetHint().c_str()); + m_inProgress = false; + m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_ui->scanButton->setEnabled(true); + + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); + FlushLogs(); + + if (m_inspectingAsset == m_assetsToInspect.end()) + { + AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + } + } + + void Scanner::FinalizeScan() + { + Log("FinalizeScan()"); + + m_ui->spinner->SetIsBusy(false); + m_ui->onlyShowOutdated->setEnabled(true); + + // Enable all the Upgrade buttons + for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) + { + QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + if (button) + { + button->setEnabled(true); + } + } + + QString spinnerText = QStringLiteral("Scan Complete"); + if (m_assetsToUpgrade.empty()) + { + spinnerText.append(" - No graphs require upgrade!"); + } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); + } + + + m_ui->spinner->SetText(spinnerText); + m_ui->progressBar->setVisible(false); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + + m_keepEditorAlive.reset(); + m_settingsCache.reset(); + m_state = ProcessState::Inactive; + } + + void Scanner::FlushLogs() + { + if (m_logs.empty()) + { + return; + } + + const QTextCursor oldCursor = m_ui->textEdit->textCursor(); + QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); + + m_ui->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_ui->textEdit->textCursor(); + + while (!m_logs.empty()) + { + auto line = "\n" + m_logs.front(); + + m_logs.pop_front(); + + textCursor.insertText(line.c_str()); + } + + scrollBar->setValue(scrollBar->maximum()); + m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + + } + + bool Scanner::CaptureLogFromTraceBus(const char* window, const char* message) + { + if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) + { + return true; + } + + AZStd::string msg = message; + if (msg.ends_with("\n")) + { + msg = msg.substr(0, msg.size() - 1); + } + + m_logs.push_back(msg); + return m_ui->updateReportingOnly->isChecked(); + } + + bool Scanner::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool Scanner::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool Scanner::OnException(const char* message) + { + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); + } + + bool Scanner::OnPrintf(const char* window, const char* message) + { + return CaptureLogFromTraceBus(window, message); + } + + void Scanner::closeEvent(QCloseEvent* event) + { + m_keepEditorAlive.reset(); + + AzQtComponents::StyledDialog::closeEvent(event); + } + +#include + +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h new file mode 100644 index 0000000000..574b2b2503 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include + +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +#include +#include +#include + +#include +#include + +#include +#include +#include +#endif + +class QPushButton; + +namespace Ui +{ + class Scanner; +} + +namespace AzQtComponents +{ + class StyledBusyLabel; +} + +namespace ScriptCanvasEditor +{ + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + class Scanner + : public AzQtComponents::StyledDialog + , private AZ::SystemTickBus::Handler + , private UpgradeNotifications::Bus::Handler + , private AZ::Debug::TraceMessageBus::Handler + { + Q_OBJECT + + public: + AZ_CLASS_ALLOCATOR(Scanner, AZ::SystemAllocator, 0); + + explicit Scanner(QWidget* parent = nullptr); + ~Scanner(); + + private: + + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; + + void OnScan(); + void OnClose(); + + enum class ProcessState + { + Inactive, + Backup, + Scan, + Upgrade, + }; + ProcessState m_state = ProcessState::Inactive; + + void DoScan(); + void ScanComplete(const AZ::Data::Asset&); + + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + + void OnUpgradeAll(); + + // SystemTickBus::Handler + void OnSystemTick() override; + // + + // AZ::Debug::TranceMessageBus::Handler + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + // + + bool CaptureLogFromTraceBus(const char* window, const char* message); + + enum class OperationResult + { + Success, + Failure, + }; + + void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); + + bool IsUpgrading() const; + + bool m_inProgress = false; + // scan fields + size_t m_currentAssetRowIndex = 0; + size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; + + IUpgradeRequests::AssetList m_assetsToInspect; + IUpgradeRequests::AssetList::iterator m_inspectingAsset; + using UpgradeAssets = AZStd::vector>; + UpgradeAssets m_assetsToUpgrade; + UpgradeAssets::iterator m_inProgressAsset; + + AZ::Data::Asset m_currentAsset; + + AZStd::unique_ptr m_ui; + + AZStd::unique_ptr m_settingsCache; + + // upgrade fields + AZStd::recursive_mutex m_mutex; + bool m_upgradeComplete = false; + AZ::Data::Asset m_upgradeAsset; + int m_upgradeAssetIndex = 0; + OperationResult m_upgradeResult; + AZStd::string m_upgradeMessage; + AZStd::string m_tmpFileName; + + AZStd::unique_ptr m_keepEditorAlive; + + AZStd::deque m_logs; + + AZ::Entity* m_scriptCanvasEntity = nullptr; + + bool m_isUpgradingSingleGraph = false; + + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); + + void FlushLogs(); + + void FinalizeUpgrade(); + void FinalizeScan(); + + void BackupComplete(); + AZStd::string BackupGraph(const AZ::Data::Asset&); + void UpgradeGraph(const AZ::Data::Asset&); + + void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void closeEvent(QCloseEvent* event) override; + + bool m_overwriteAll = false; + void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); + + void Log(const char* format, ...); + }; +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp deleted file mode 100644 index 5e6858c993..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -#include "UpgradeTool.h" - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "UpgradeHelper.h" - -namespace ScriptCanvasEditor -{ - UpgradeTool::UpgradeTool(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::UpgradeTool()) - { - m_ui->setupUi(this); - - AzQtComponents::CheckBox::applyToggleSwitchStyle(m_ui->doNotAskCheckbox); - AzQtComponents::CheckBox::applyToggleSwitchStyle(m_ui->makeBackupCheckbox); - - m_ui->progressFrame->setVisible(false); - - connect(m_ui->upgradeButton, &QPushButton::pressed, this, &UpgradeTool::OnUpgrade); - connect(m_ui->notNowButton, &QPushButton::pressed, this, &UpgradeTool::OnNoThanks); - - UpgradeNotifications::Bus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - resize(700, 100); - } - - void UpgradeTool::OnNoThanks() - { - DisconnectBuses(); - - UpdateSettings(); - - reject(); - } - - void UpgradeTool::UpdateSettings() - { - auto userSettings = AZ::UserSettings::CreateFind(AZ_CRC("ScriptCanvasPreviewSettings", 0x1c5a2965), AZ::UserSettings::CT_LOCAL); - if (userSettings) - { - userSettings->m_showUpgradeDialog = !m_ui->doNotAskCheckbox->isChecked(); - - AZ::UserSettingsOwnerRequestBus::Event(AZ::UserSettings::CT_LOCAL, &AZ::UserSettingsOwnerRequests::SaveSettings); - } - } - - UpgradeTool::~UpgradeTool() - { - DisconnectBuses(); - } - - void UpgradeTool::DisconnectBuses() - { - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - void UpgradeTool::closeEvent(QCloseEvent* event) - { - // m_keepEditorAlive.reset(); - - DisconnectBuses(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeCancelled); - - AzQtComponents::StyledDialog::closeEvent(event); - } - - bool UpgradeTool::HasBackup() const - { - return m_ui->makeBackupCheckbox->isChecked(); - } - - void UpgradeTool::OnUpgrade() - { - setWindowFlag(Qt::WindowCloseButtonHint, false); - - // m_keepEditorAlive = AZStd::make_unique(); - - UpdateSettings(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeStart); - - m_assetsToUpgrade.clear(); - - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToUpgrade = upgradeRequests->GetAssetsToUpgrade(); - - AZ::SystemTickBus::Handler::BusConnect(); - - if (m_ui->makeBackupCheckbox->isChecked()) - { - if (!DoBackup()) - { - // There was a problem, ask if the user wants to keep going or abort - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Backup Failed"), - QObject::tr("Failed to backup your Script Canvas graphs, do you want to proceed with upgrade?"), - QMessageBox::Yes | QMessageBox::No, this); - - if (mb.exec() == QMessageBox::Yes) - { - DoUpgrade(); - } - } - } - else - { - DoUpgrade(); - } - } - - bool UpgradeTool::DoBackup() - { - if (!m_assetsToUpgrade.empty()) - { - m_state = UpgradeState::Backup; - - m_inProgressAsset = m_assetsToUpgrade.begin(); - - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->upgradeButton->setEnabled(false); - m_ui->notNowButton->setEnabled(false); - m_ui->doNotAskCheckbox->setEnabled(false); - m_ui->makeBackupCheckbox->setEnabled(false); - - // Make the folder for the backup - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - m_backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(m_backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - m_backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(m_backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(m_backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error("Script Canvas", false, "Failed to create backup folder %s", m_backupPath.c_str()); - - return false; - } - } - } - - return true; - } - - void UpgradeTool::BackupComplete() - { - m_currentAssetIndex = 0; - m_ui->progressBar->setValue(0); - - DoUpgrade(); - } - - void UpgradeTool::DoUpgrade() - { - m_state = UpgradeState::Upgrade; - - if (!m_assetsToUpgrade.empty()) - { - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->upgradeButton->setEnabled(false); - m_ui->notNowButton->setEnabled(false); - m_ui->doNotAskCheckbox->setEnabled(false); - m_ui->makeBackupCheckbox->setEnabled(false); - - m_inProgressAsset = m_assetsToUpgrade.begin(); - } - } - - void UpgradeTool::OnAssetReady(AZ::Data::Asset asset) - { - // Start asset upgrade job when current asset is unassigned only - // If current asset is present, there is ongoing progress handling this asset already - if (IsOnReadyAssetForCurrentProcess(asset.GetId())) - { - m_inProgress = true; - m_currentAsset = asset; - m_scriptCanvasEntity = AssetUpgradeJob(asset); - if (!m_scriptCanvasEntity) - { - ResetUpgradeCurrentAsset(); - } - } - } - - void UpgradeTool::OnAssetError(AZ::Data::Asset asset) - { - // Reset upgrade target when script canvas entity is unassigned only. - // If script canvas entity is present, we should let the conversion progress finish itself. - if (IsCurrentProcessFreeToAbort(asset.GetId())) - { - AZ_TracePrintf("Script Canvas", "Asset fails to get load: %s\n", asset.GetHint().c_str()); - ResetUpgradeCurrentAsset(); - } - } - - void UpgradeTool::OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType) - { - // Reset upgrade target when script canvas entity is unassigned only. - // If script canvas entity is present, we should let the conversion progress finish itself. - if (IsCurrentProcessFreeToAbort(assetId)) - { - AZ_TracePrintf("Script Canvas", "Asset gets unloaded: %s\n", m_inProgressAsset->m_relativePath.c_str()); - ResetUpgradeCurrentAsset(); - } - } - - - void UpgradeTool::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool skipped /*=false*/) - { - if (!skipped) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - - AZStd::string tmpFileName; - bool tmpFilesaved = false; - - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - tmpFilesaved = AZ::Utils::SaveObjectToStream(fileStream, AZ::DataStream::ST_XML, &asset.GetAs()->GetScriptCanvasData()); - } - - fileStream.Close(); - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, &asset, fullPath, tmpFileName, tmpFilesaved](bool /*success*/, const AzToolsFramework::SourceControlFileInfo& info) - { - if (!info.IsReadOnly()) - { - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - else - { - if (m_overwriteAll) - { - MakeWriteable(info); - - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - MakeWriteable(info); - - if (tmpFilesaved) - { - PerformMove(asset, tmpFileName, fullPath); - } - } - - } - } - }); - } - } - else - { - // We skipped the upgrade (it's up to date), just mark it complete - AZ::SystemTickBus::QueueFunction([this, asset]() { UpgradeComplete(asset, true); }); - - } - - } - - void UpgradeTool::MakeWriteable(const AzToolsFramework::SourceControlFileInfo& info) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - } - - void UpgradeTool::PerformMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target) - { - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - - AZ::SystemTickBus::QueueFunction([this, &asset]() { UpgradeComplete(asset); }); - } - else - { - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, &asset, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - }); - streamer->QueueRequest(flushRequest); - } - } - - bool UpgradeTool::IsOnReadyAssetForCurrentProcess(const AZ::Data::AssetId& assetId) - { - return !m_currentAsset && m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgressAsset->m_assetId == assetId; - } - - bool UpgradeTool::IsCurrentProcessFreeToAbort(const AZ::Data::AssetId& assetId) - { - return !m_scriptCanvasEntity && m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgressAsset->m_assetId == assetId; - } - - bool UpgradeTool::IsUpgradeCompleteForAllAssets() - { - return !m_inProgress && !m_currentAsset && !m_scriptCanvasEntity && m_inProgressAsset == m_assetsToUpgrade.end(); - } - - bool UpgradeTool::IsUpgradeCompleteForCurrentAsset() - { - return !m_inProgress && !m_currentAsset && !m_scriptCanvasEntity && m_inProgressAsset != m_assetsToUpgrade.end(); - } - - void UpgradeTool::ResetUpgradeCurrentAsset() - { - AZ::Data::AssetBus::MultiHandler::BusDisconnect(m_currentAsset.GetId()); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - m_currentAsset.Release(); - m_currentAsset = {}; - m_inProgress = false; - } - - void UpgradeTool::OnSystemTick() - { - switch (m_state) - { - case UpgradeTool::UpgradeState::Upgrade: - - if (IsUpgradeCompleteForCurrentAsset()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inProgressAsset; - - if (!AZ::Data::AssetBus::MultiHandler::BusIsConnectedId(assetToUpgrade.m_assetId)) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetToUpgrade.m_assetId); - } - - auto asset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::Default); - asset.BlockUntilLoadComplete(); - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(assetToUpgrade.m_relativePath); - streamer->SetRequestCompleteCallback(flushRequest, []([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - }); - streamer->QueueRequest(flushRequest); - - if (asset.IsReady() || asset.GetStatus() == AZ::Data::AssetData::AssetStatus::ReadyPreNotify) - { - m_currentAsset = asset; - m_scriptCanvasEntity = AssetUpgradeJob(asset); - if (!m_scriptCanvasEntity) - { - ResetUpgradeCurrentAsset(); - } - } - - m_ui->spinner->SetText(QObject::tr("%1").arg(assetToUpgrade.m_relativePath.c_str())); - } - else if (IsUpgradeCompleteForAllAssets()) - { - FinalizeUpgrade(); - } - break; - - case UpgradeTool::UpgradeState::Backup: - - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - AZ::Data::AssetInfo& assetToBackup = *m_inProgressAsset; - - m_ui->spinner->SetText(QObject::tr("%1").arg(assetToBackup.m_relativePath.c_str())); - - BackupAsset(assetToBackup); - - m_ui->progressBar->setValue(aznumeric_cast(++m_currentAssetIndex)); - } - else - { - BackupComplete(); - } - break; - - default: - break; - } - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - - } - - void UpgradeTool::BackupAsset(const AZ::Data::AssetInfo& assetInfo) - { - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - // Using this to get the watch folder - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo2; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetInfo.m_relativePath.c_str(), assetInfo2, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string targetFilePath; - AzFramework::StringFunc::Path::Join(m_backupPath.c_str(), relativePath.c_str(), targetFilePath); - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Error) - { - AZStd::string filename; - AzFramework::StringFunc::Path::GetFileName(sourceFilePath.c_str(), filename); - AZ_TracePrintf("Script Canvas", "Backup: %s -> %s\n", filename.c_str(), targetFilePath.c_str()); - } - else - { - AZ_TracePrintf("Script Canvas", "(Error) Failed to create backup: %s -> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - } - - ++m_inProgressAsset; - } - - void UpgradeTool::UpgradeComplete(const AZ::Data::Asset& asset, bool skipped /*= false*/) - { - m_ui->progressBar->setValue(aznumeric_cast(++m_currentAssetIndex)); - - ResetUpgradeCurrentAsset(); - - if (!skipped) - { - AZStd::string filename; - AzFramework::StringFunc::Path::GetFileName(asset.GetHint().c_str(), filename); - AZ_TracePrintf("Script Canvas", "%s -> Upgraded and Saved!\n", filename.c_str()); - } - } - - void UpgradeTool::FinalizeUpgrade() - { - setWindowFlag(Qt::WindowCloseButtonHint, true); - - AZ::SystemTickBus::Handler::BusDisconnect(); - - m_currentAsset = {}; - - SaveLog(); - - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnUpgradeComplete); - - AZ_TracePrintf("Script Canvas", "\nUpgrade Complete!\n"); - - DisconnectBuses(); - - accept(); - } - - void UpgradeTool::SaveLog() - { - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - - AZStd::string endPath = resolvedBuffer; - AZ::StringFunc::Path::Normalize(endPath); - - AZ::IO::SystemFile outputFile; - if (!outputFile.Open(endPath.c_str(), - AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY)) - { - AZ_Error("Script Canvas", false, "Failed to open file for writing: %s", endPath.c_str()); - return; - } - - QDateTime theTime = QDateTime::currentDateTime(); - AZStd::string timeStamp = theTime.toString("yyyy-MM-dd [HH.mm.ss]").toUtf8().data(); - - AZStd::string header = "\n\n\n\n\n"; - header.append(AZStd::string::format("Log captured: %s
\n", timeStamp.c_str()).c_str()); - - outputFile.Write(header.c_str(), header.size()); - for (auto& log : m_logs) - { - AZStd::string logText = AZStd::string::format("%s
", log.c_str()); - AzFramework::StringFunc::Replace(logText, "\n", "
\n"); - outputFile.Write(logText.data(), logText.size()); - } - AZStd::string footer = "\n\n"; - outputFile.Write(footer.c_str(), footer.size()); - - - - outputFile.Close(); - } - - AZ::Entity* UpgradeTool::AssetUpgradeJob(AZ::Data::Asset&) - { - return nullptr; - } - - void UpgradeTool::RetryMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target) - { - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - - AZ::SystemTickBus::QueueFunction([this, &asset]() { UpgradeComplete(asset); }); - } - else - { - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, &asset, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - }); - streamer->QueueRequest(flushRequest); - - - //AZ::SystemTickBus::QueueFunction([this, &asset, source, target]() { RetryMove(asset, source, target); }); - } - } - - void UpgradeTool::CaptureLogFromTraceBus(const char* /*window*/, const char* message) - { - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - } - - bool UpgradeTool::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s
", message); - CaptureLogFromTraceBus(window, msg.c_str()); - - return false; - } - - bool UpgradeTool::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s
", message); - CaptureLogFromTraceBus(window, msg.c_str()); - - return false; - } - - bool UpgradeTool::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s
", message); - CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - - return false; - } - - bool UpgradeTool::OnPrintf(const char* window, const char* message) - { - CaptureLogFromTraceBus(window, message); - return false; - } - -#include - -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h deleted file mode 100644 index be00198457..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include - -#include - -#include - -#include - -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class UpgradeTool; -} - -namespace ScriptCanvasEditor -{ - class KeepEditorAlive; - - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class UpgradeTool - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private AZ::Data::AssetBus::MultiHandler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(UpgradeTool, AZ::SystemAllocator, 0); - - UpgradeTool(QWidget* parent = nullptr); - ~UpgradeTool(); - - size_t& UpgradedGraphCount() { return m_upgradedAssets; } - size_t& SkippedGraphCount() { return m_skippedAssets; } - - bool HasBackup() const; - - private: - - bool IsOnReadyAssetForCurrentProcess(const AZ::Data::AssetId& assetId); - bool IsCurrentProcessFreeToAbort(const AZ::Data::AssetId& assetId); - bool IsUpgradeCompleteForAllAssets(); - bool IsUpgradeCompleteForCurrentAsset(); - void ResetUpgradeCurrentAsset(); - - void OnUpgrade(); - void OnNoThanks(); - void UpdateSettings(); - - enum class UpgradeState - { - Inactive, - Backup, - Upgrade - }; - UpgradeState m_state = UpgradeState::Inactive; - - bool DoBackup(); - void BackupAsset(const AZ::Data::AssetInfo& assetInfo); - void BackupComplete(); - - void DoUpgrade(); - void UpgradeComplete(const AZ::Data::Asset&, bool skipped = false); - - AZ::Entity* AssetUpgradeJob(AZ::Data::Asset& asset); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AssetBus::Handler - void OnAssetReady(AZ::Data::Asset asset) override; - void OnAssetError(AZ::Data::Asset asset) override; - void OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType assetType) override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - void CaptureLogFromTraceBus(const char* window, const char* message); - - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void RetryMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target); - - void SaveLog(); - - bool m_inProgress = false; - size_t m_currentAssetIndex = 0; - - size_t m_upgradedAssets = 0; - size_t m_skippedAssets = 0; - - IUpgradeRequests::AssetList m_assetsToUpgrade; - IUpgradeRequests::AssetList::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - AZStd::recursive_mutex m_mutex; - - // AZStd::unique_ptr m_keepEditorAlive; - - AZStd::vector m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - AZStd::string m_backupPath; - - void FinalizeUpgrade(); - void DisconnectBuses(); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void MakeWriteable(const AzToolsFramework::SourceControlFileInfo& info); - void PerformMove(AZ::Data::Asset& asset, const AZStd::string& source, const AZStd::string& target); - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui deleted file mode 100644 index 78a63ce727..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui +++ /dev/null @@ -1,260 +0,0 @@ - - - UpgradeTool - - - Qt::WindowModal - - - - 0 - 0 - 801 - 328 - - - - - 0 - 0 - - - - Script Canvas Upgrade - - - - 5 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Script Canvas graphs are now compiled into Lua by the Asset Processor! In order to complete this upgrade, all graphs in your current project must be updated.</p><p>This upgrading is making changes to the underlying Script Canvas graph format. Depending on the number of scripts you've created this process could take a few minutes to complete. </p><p>This upgrade is required for any projects saved on 1.26 or earlier.</p><p>If you choose &quot;Not now&quot;, your project may not work correctly.</p></body></html> - - - false - - - true - - - - - - - - 0 - 80 - - - - QFrame::NoFrame - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - true - - - - 0 - 0 - - - - - 0 - 0 - - - - false - - - background-color: rgb(47, 47, 47); - - - QFrame::NoFrame - - - QFrame::Raised - - - - - - - 0 - 0 - - - - - 32 - 32 - - - - false - - - - - - - - 0 - 0 - - - - - - - 24 - - - true - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 0 - - - - - - - - - - - - Backup my source graphs - - - true - - - - - - - Do not ask me again - - - - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Upgrade - - - - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Not now - - - false - - - - - - - - - - - - - - - - AzQtComponents::StyledBusyLabel - QWidget -
AzQtComponents/Components/StyledBusyLabel.h
- 1 -
-
- - -
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h index acb28a7dba..7ce1920dbb 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h @@ -10,21 +10,17 @@ #if !defined(Q_MOC_RUN) #include - AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") #include AZ_POP_DISABLE_WARNING - #include #include +#include #include - +#include +#include #include #include - -#include -#include -#include #endif class QPushButton; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp new file mode 100644 index 0000000000..6c9acea25c --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp @@ -0,0 +1,1023 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace VersionExplorerCpp +{ + class FileEventHandler + : public AZ::IO::FileIOEventBus::Handler + { + public: + int m_errorCode = 0; + AZStd::string m_fileName; + + FileEventHandler() + { + BusConnect(); + } + + ~FileEventHandler() + { + BusDisconnect(); + } + + void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + { + m_errorCode = errorCode; + + if (fileName) + { + m_fileName = fileName; + } + } + }; +} + +namespace ScriptCanvasEditor +{ + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + + VersionExplorerLog::VersionExplorerLog(QWidget* parent /*= nullptr*/) + : AzQtComponents::StyledDialog(parent) + , m_ui(new Ui::VersionExplorerLog()) + { + m_ui->setupUi(this); + + m_ui->tableWidget->horizontalHeader()->setVisible(false); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_ui->tableWidget->setColumnWidth(3, 22); + + m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + + connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorerLog::OnScan); + connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorerLog::OnClose); + connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorerLog::OnUpgradeAll); + + m_ui->progressBar->setValue(0); + m_ui->progressBar->setVisible(false); + + m_keepEditorAlive = AZStd::make_unique(); + m_inspectingAsset = m_assetsToInspect.end(); + + } + + VersionExplorerLog::~VersionExplorerLog() + { + AZ::SystemTickBus::Handler::BusDisconnect(); + + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + + } + + void VersionExplorerLog::Log(const char* format, ...) + { + if (m_ui->verbose->isChecked()) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + void VersionExplorerLog::OnClose() + { + reject(); + } + + bool VersionExplorerLog::IsUpgrading() const + { + return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; + } + + void VersionExplorerLog::OnSystemTick() + { + switch (m_state) + { + case ProcessState::Scan: + + if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) + { + m_inProgress = true; + AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; + m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); + m_currentAsset.BlockUntilLoadComplete(); + if (m_currentAsset.IsReady()) + { + // The asset is ready, grab its info + m_inProgress = true; + InspectAsset(m_currentAsset, assetToUpgrade); + } + else + { + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem + ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + ++m_currentAssetRowIndex; + + Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); + ++m_failedAssets; + ScanComplete(m_currentAsset); + } + } + break; + + case ProcessState::Upgrade: + { + AZStd::lock_guard lock(m_mutex); + if (m_upgradeComplete) + { + ++m_upgradeAssetIndex; + m_inProgress = false; + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + + if (m_scriptCanvasEntity) + { + m_scriptCanvasEntity->Deactivate(); + m_scriptCanvasEntity = nullptr; + } + + GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); + + if (!m_isUpgradingSingleGraph) + { + if (m_inProgressAsset != m_assetsToUpgrade.end()) + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + } + + if (m_inProgressAsset == m_assetsToUpgrade.end()) + { + FinalizeUpgrade(); + } + } + else + { + m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + m_inProgress = false; + m_state = ProcessState::Inactive; + m_settingsCache.reset(); + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + + m_isUpgradingSingleGraph = false; + + if (m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(false); + } + + m_upgradeComplete = false; + } + + if (!IsUpgrading() && m_state == ProcessState::Upgrade) + { + AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); + // Make the backup + if (errorMessage.empty()) + { + Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); + QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); + spinner->SetIsBusy(true); + } + } + + // Upgrade the graph + UpgradeGraph(*m_inProgressAsset); + } + else + { + Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); + GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); + } + + } + break; + } + default: + break; + } + + FlushLogs(); + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + // Backup + + void VersionExplorerLog::OnUpgradeAll() + { + m_state = ProcessState::Upgrade; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); + m_inProgressAsset = m_assetsToUpgrade.begin(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + AZ::SystemTickBus::Handler::BusConnect(); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_keepEditorAlive = AZStd::make_unique(); + } + + AZStd::string VersionExplorerLog::BackupGraph(const AZ::Data::Asset& asset) + { + if (!m_ui->makeBackupCheckbox->isChecked()) + { + // considered a success + return ""; + } + + QDateTime theTime = QDateTime::currentDateTime(); + QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); + + AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); + char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); + backupPath = backupPathCStr; + + if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + { + if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); + return "Failed to create backup folder"; + } + } + + AZStd::string devRoot = "@devroot@"; + AZStd::string devAssets = "@devassets@"; + + char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); + + char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); + + AZStd::string relativePath = devAssetsCStr; + AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AZStd::string sourceFilePath; + + AZStd::string watchFolder; + AZ::Data::AssetInfo assetInfo; + bool sourceInfoFound{}; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + if (sourceInfoFound) + { + AZStd::string assetPath; + AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); + + sourceFilePath = assetPath; + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorerLog::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + return "Failed to find source file"; + } + + devRoot = devRootCStr; + AzFramework::StringFunc::Path::Normalize(devRoot); + + relativePath = sourceFilePath; + AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } + + AzFramework::StringFunc::Path::Normalize(relativePath); + AzFramework::StringFunc::Path::Normalize(backupPath); + + AZStd::string targetFilePath = backupPath; + targetFilePath += relativePath; + + if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorerLog::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return "Failed to copy source file to backup location"; + } + + Log("VersionExplorerLog::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return ""; + } + + void VersionExplorerLog::UpgradeGraph(const AZ::Data::Asset& asset) + { + m_inProgress = true; + m_upgradeComplete = false; + Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); + m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_scriptCanvasEntity = nullptr; + + UpgradeNotifications::Bus::Handler::BusConnect(); + + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "VersionExplorerLog::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + if (graphComponent) + { + m_scriptCanvasEntity = scriptCanvasEntity; + + graphComponent->UpgradeGraph + ( asset + , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_ui->verbose->isChecked()); + } + } + + AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); + } + + void VersionExplorerLog::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + if (!fullPathFound) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); + } + + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + + void VersionExplorerLog::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + m_tmpFileName.clear(); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + // attempt to remove temporary file no matter what + m_tmpFileName = tmpFileName; + if (!tempSavedSucceeded) + { + GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); + return; + } + + using SCCommandBus = AzToolsFramework::SourceControlCommandBus; + SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, + [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + if (m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + int result = QMessageBox::No; + if (!m_overwriteAll) + { + QMessageBox mb(QMessageBox::Warning, + QObject::tr("Failed to Save Upgraded File"), + QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), + QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); + + result = mb.exec(); + if (result == QMessageBox::YesToAll) + { + m_overwriteAll = true; + } + } + + if (result == QMessageBox::Yes || m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + } + } + }); + } + + void VersionExplorerLog::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + , size_t remainingAttempts) + { + VersionExplorerCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + // all attempts failed, give up + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); + } + else if (remainingAttempts == 2) + { + // before the final attempt, flush all caches + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction( + [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + m_tmpFileName.clear(); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, asset]() + { + GraphUpgradeComplete(asset, OperationResult::Success, ""); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void VersionExplorerLog::GraphUpgradeComplete + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + AZStd::lock_guard lock(m_mutex); + m_upgradeComplete = true; + m_upgradeResult = result; + m_upgradeMessage = message; + m_upgradeAsset = asset; + + if (!m_tmpFileName.empty()) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); + + if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + { + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + } + } + + if (m_upgradeResult == OperationResult::Failure) + { + AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + } + + m_tmpFileName.clear(); + } + + void VersionExplorerLog::GraphUpgradeCompleteUIUpdate + ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + QString text = asset.GetHint().c_str(); + QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QString assetName = asset.GetHint().c_str(); + + if (label->text().compare(assetName) == 0) + { + m_ui->tableWidget->removeCellWidget(row, ColumnAction); + m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + + QToolButton* doneButton = new QToolButton(this); + doneButton->setToolTip("Upgrade complete"); + if (result == OperationResult::Success) + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + } + else + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + } + + m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + } + } + } + } + + void VersionExplorerLog::FinalizeUpgrade() + { + Log("FinalizeUpgrade!"); + m_inProgress = false; + m_assetsToUpgrade.clear(); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(true); + m_keepEditorAlive.reset(); + m_ui->progressBar->setVisible(false); + + // Manual correction + size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); + if (assetsThatNeedManualInspection > 0) + { + m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + } + else + { + m_ui->spinner->SetText("Upgrade complete."); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::Interface::Get()->SetIsUpgrading(false); + m_settingsCache.reset(); + } + + // Scanning + + void VersionExplorerLog::OnScan() + { + m_assetsToUpgrade.clear(); + m_assetsToInspect.clear(); + m_ui->tableWidget->setRowCount(0); + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); + m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); + DoScan(); + } + + void VersionExplorerLog::DoScan() + { + m_state = ProcessState::Scan; + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + + AZ::SystemTickBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + + if (!m_assetsToInspect.empty()) + { + m_discoveredAssets = m_assetsToInspect.size(); + m_failedAssets = 0; + m_inspectedAssets = 0; + m_currentAssetRowIndex = 0; + m_ui->progressFrame->setVisible(true); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); + m_ui->progressBar->setValue(0); + + m_ui->spinner->SetIsBusy(true); + m_ui->spinner->SetBusyIconSize(32); + + m_ui->scanButton->setEnabled(false); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(false); + + m_inspectingAsset = m_assetsToInspect.begin(); + m_keepEditorAlive = AZStd::make_unique(); + } + } + + void VersionExplorerLog::BackupComplete() + { + m_currentAssetRowIndex = 0; + m_ui->progressBar->setValue(0); + DoScan(); + } + + void VersionExplorerLog::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) + { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + + bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); + ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + + + if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + { + ScanComplete(asset); + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); + return; + } + + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) + { + m_assetsToUpgrade.push_back(asset); + + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); + + QPushButton* rowGoToButton = new QPushButton(this); + rowGoToButton->setText("Upgrade"); + rowGoToButton->setEnabled(false); + + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { + // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda + UpgradeSingle(rowGoToButton, spinner, assetInfo); + }); + + AZ::SystemTickBus::ExecuteQueuedEvents(); + + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = asset.GetHint().c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); + + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + ScanComplete(asset); + ++m_inspectedAssets; + ++m_currentAssetRowIndex; + } + + void VersionExplorerLog::UpgradeSingle + ( QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + + if (asset) + { + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); + + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); + + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } + } + + void VersionExplorerLog::ScanComplete(const AZ::Data::Asset& asset) + { + Log("ScanComplete: %s", asset.GetHint().c_str()); + m_inProgress = false; + m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_ui->scanButton->setEnabled(true); + + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); + FlushLogs(); + + if (m_inspectingAsset == m_assetsToInspect.end()) + { + AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + } + } + + void VersionExplorerLog::FinalizeScan() + { + Log("FinalizeScan()"); + + m_ui->spinner->SetIsBusy(false); + m_ui->onlyShowOutdated->setEnabled(true); + + // Enable all the Upgrade buttons + for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) + { + QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + if (button) + { + button->setEnabled(true); + } + } + + QString spinnerText = QStringLiteral("Scan Complete"); + if (m_assetsToUpgrade.empty()) + { + spinnerText.append(" - No graphs require upgrade!"); + } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); + } + + + m_ui->spinner->SetText(spinnerText); + m_ui->progressBar->setVisible(false); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } + + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + UpgradeNotifications::Bus::Handler::BusDisconnect(); + + m_keepEditorAlive.reset(); + m_settingsCache.reset(); + m_state = ProcessState::Inactive; + } + + void VersionExplorerLog::FlushLogs() + { + if (m_logs.empty()) + { + return; + } + + const QTextCursor oldCursor = m_ui->textEdit->textCursor(); + QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); + + m_ui->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_ui->textEdit->textCursor(); + + while (!m_logs.empty()) + { + auto line = "\n" + m_logs.front(); + + m_logs.pop_front(); + + textCursor.insertText(line.c_str()); + } + + scrollBar->setValue(scrollBar->maximum()); + m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + + } + + bool VersionExplorerLog::CaptureLogFromTraceBus(const char* window, const char* message) + { + if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) + { + return true; + } + + AZStd::string msg = message; + if (msg.ends_with("\n")) + { + msg = msg.substr(0, msg.size() - 1); + } + + m_logs.push_back(msg); + return m_ui->updateReportingOnly->isChecked(); + } + + bool VersionExplorerLog::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool VersionExplorerLog::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) + { + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureLogFromTraceBus(window, msg.c_str()); + } + + bool VersionExplorerLog::OnException(const char* message) + { + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); + } + + bool VersionExplorerLog::OnPrintf(const char* window, const char* message) + { + return CaptureLogFromTraceBus(window, message); + } + + void VersionExplorerLog::closeEvent(QCloseEvent* event) + { + m_keepEditorAlive.reset(); + + AzQtComponents::StyledDialog::closeEvent(event); + } + +#include + +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h new file mode 100644 index 0000000000..498b2f7745 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include + +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +#include +#include +#include + +#include +#include + +#include +#include +#include +#endif + +class QPushButton; + +namespace Ui +{ + class VersionExplorerLog; +} + +namespace AzQtComponents +{ + class StyledBusyLabel; +} + +namespace ScriptCanvasEditor +{ + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + class VersionExplorerLog + : public AzQtComponents::StyledDialog + , private AZ::SystemTickBus::Handler + , private UpgradeNotifications::Bus::Handler + , private AZ::Debug::TraceMessageBus::Handler + { + Q_OBJECT + + public: + AZ_CLASS_ALLOCATOR(VersionExplorerLog, AZ::SystemAllocator, 0); + + explicit VersionExplorerLog(QWidget* parent = nullptr); + ~VersionExplorerLog(); + + private: + + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; + + void OnScan(); + void OnClose(); + + enum class ProcessState + { + Inactive, + Backup, + Scan, + Upgrade, + }; + ProcessState m_state = ProcessState::Inactive; + + void DoScan(); + void ScanComplete(const AZ::Data::Asset&); + + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + + void OnUpgradeAll(); + + // SystemTickBus::Handler + void OnSystemTick() override; + // + + // AZ::Debug::TranceMessageBus::Handler + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + // + + bool CaptureLogFromTraceBus(const char* window, const char* message); + + enum class OperationResult + { + Success, + Failure, + }; + + void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); + + bool IsUpgrading() const; + + bool m_inProgress = false; + // scan fields + size_t m_currentAssetRowIndex = 0; + size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; + + IUpgradeRequests::AssetList m_assetsToInspect; + IUpgradeRequests::AssetList::iterator m_inspectingAsset; + using UpgradeAssets = AZStd::vector>; + UpgradeAssets m_assetsToUpgrade; + UpgradeAssets::iterator m_inProgressAsset; + + AZ::Data::Asset m_currentAsset; + + AZStd::unique_ptr m_ui; + + AZStd::unique_ptr m_settingsCache; + + // upgrade fields + AZStd::recursive_mutex m_mutex; + bool m_upgradeComplete = false; + AZ::Data::Asset m_upgradeAsset; + int m_upgradeAssetIndex = 0; + OperationResult m_upgradeResult; + AZStd::string m_upgradeMessage; + AZStd::string m_tmpFileName; + + AZStd::unique_ptr m_keepEditorAlive; + + AZStd::deque m_logs; + + AZ::Entity* m_scriptCanvasEntity = nullptr; + + bool m_isUpgradingSingleGraph = false; + + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); + + void FlushLogs(); + + void FinalizeUpgrade(); + void FinalizeScan(); + + void BackupComplete(); + AZStd::string BackupGraph(const AZ::Data::Asset&); + void UpgradeGraph(const AZ::Data::Asset&); + + void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void closeEvent(QCloseEvent* event) override; + + bool m_overwriteAll = false; + void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); + + void Log(const char* format, ...); + }; +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h new file mode 100644 index 0000000000..4bed23c74e --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h @@ -0,0 +1,19 @@ +#include + +namespace ScriptCanvasEditor +{ + class VersionExplorerNotificationsTraits : public AZ::EBusTraits + { + public: + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusHandlerPolicy::Multiple; + using BusIdType = VersionExplorerNotificationsTraits*; + }; + using VersionExplorerNotificationsBus = AZ:EBus; + + class VersionExplorerRequestsTraits : public AZ::EBusTraits + { + public: + static const AZ::EBusHandlerPolicy = AZ::EBusHandlerPolicy::Single; + }; + using VersionExplorerRequestsBus = AZ:EBus; +} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 52b1cc4772..dbffe99afd 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -262,12 +262,17 @@ set(FILES Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h - Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.ui + Editor/View/Windows/Tools/UpgradeTool/Scanner.h + Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp + Editor/View/Windows/Tools/UpgradeTool/Modifier.h + Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp + Editor/View/Windows/Tools/UpgradeTool/FileSaver.h + Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui + Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h + Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp Editor/Framework/ScriptCanvasGraphUtilities.inl Editor/Framework/ScriptCanvasGraphUtilities.h Editor/Framework/ScriptCanvasTraceUtilities.h From 30d27f23eee9de032a7aaa4750324f9be36ca78a Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 12:52:54 -0700 Subject: [PATCH 004/226] rename version explorer to view Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/{VersionExplorer.cpp => View.cpp} | 0 .../View/Windows/Tools/UpgradeTool/{VersionExplorer.h => View.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{VersionExplorer.cpp => View.cpp} (100%) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{VersionExplorer.h => View.h} (100%) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h From e558e7b0ffcc098dd1b4ff2e90fcc481af1e6997 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 12:54:25 -0700 Subject: [PATCH 005/226] rename version explorer ui to view Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/{VersionExplorer.ui => View.ui} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{VersionExplorer.ui => View.ui} (100%) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui From e0f93ea159d7e7dfc4f641c2b797e87253cf9340 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 13:19:55 -0700 Subject: [PATCH 006/226] view traits wip before rename Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Tools/UpgradeTool/VersionExplorerTraits.h | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h index 4bed23c74e..2b23c711dd 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h @@ -2,18 +2,21 @@ namespace ScriptCanvasEditor { - class VersionExplorerNotificationsTraits : public AZ::EBusTraits + namespace VersionExplorer { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusHandlerPolicy::Multiple; - using BusIdType = VersionExplorerNotificationsTraits*; - }; - using VersionExplorerNotificationsBus = AZ:EBus; + class RequestsTraits : public AZ::EBusTraits + { + public: + static const AZ::EBusAddressPolicy HandlerPolicy = AZ::EBusAddressPolicy::Single; + }; + using RequestsBus = AZ::EBus; - class VersionExplorerRequestsTraits : public AZ::EBusTraits - { - public: - static const AZ::EBusHandlerPolicy = AZ::EBusHandlerPolicy::Single; - }; - using VersionExplorerRequestsBus = AZ:EBus; + class NotificationsTraits : public AZ::EBusTraits + { + public: + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + using BusIdType = NotificationsTraits*; + }; + using NotificationsBus = AZ::EBus; + } } From b6eb9123e545052cd2f35f8d2d21db22b9dcf2b5 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 19:38:28 -0700 Subject: [PATCH 007/226] version explorer refactor wip Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Editor/View/Windows/MainWindow.cpp | 4 +- .../Code/Editor/View/Windows/MainWindow.h | 2 +- .../Windows/Tools/UpgradeTool/FileSaver.cpp | 980 +---------- .../Windows/Tools/UpgradeTool/FileSaver.h | 167 +- .../View/Windows/Tools/UpgradeTool/Model.cpp | 25 + .../View/Windows/Tools/UpgradeTool/Model.h | 33 + .../Windows/Tools/UpgradeTool/ModelTraits.h | 31 + .../Windows/Tools/UpgradeTool/Modifier.cpp | 1005 +---------- .../View/Windows/Tools/UpgradeTool/Modifier.h | 154 +- .../Windows/Tools/UpgradeTool/Scanner.cpp | 1005 +---------- .../View/Windows/Tools/UpgradeTool/Scanner.h | 154 +- .../Tools/UpgradeTool/VersionExplorerLog.cpp | 1004 +---------- .../Tools/UpgradeTool/VersionExplorerLog.h | 172 +- .../Tools/UpgradeTool/VersionExplorerTraits.h | 22 - .../View/Windows/Tools/UpgradeTool/View.cpp | 1493 ++++++++--------- .../View/Windows/Tools/UpgradeTool/View.h | 206 ++- .../View/Windows/Tools/UpgradeTool/View.ui | 4 +- .../Windows/Tools/UpgradeTool/ViewTraits.h | 26 + .../Code/scriptcanvasgem_editor_files.cmake | 26 +- 19 files changed, 1024 insertions(+), 5489 deletions(-) create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 856cceb508..33a58c18a7 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -134,7 +134,7 @@ #include #include #include -#include +#include #include @@ -3436,7 +3436,7 @@ namespace ScriptCanvasEditor void MainWindow::RunUpgradeTool() { - VersionExplorer* versionExplorer = aznew VersionExplorer(this); + auto versionExplorer = aznew VersionExplorer::View(this); versionExplorer->exec(); // Manual correction diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index ed00254677..54557c3691 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -51,7 +51,7 @@ #include -#include +#include #if SCRIPTCANVAS_EDITOR #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp index eb182ed291..7a7c4fe5a3 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp @@ -6,35 +6,10 @@ * */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include -namespace VersionExplorerCpp +namespace FileSaverCpp { class FileEventHandler : public AZ::IO::FileIOEventBus::Handler @@ -67,957 +42,8 @@ namespace VersionExplorerCpp namespace ScriptCanvasEditor { - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - - VersionExplorer::VersionExplorer(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::VersionExplorer()) - { - m_ui->setupUi(this); - - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - - connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorer::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorer::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorer::OnUpgradeAll); - - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); - - } - - VersionExplorer::~VersionExplorer() - { - AZ::SystemTickBus::Handler::BusDisconnect(); - - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - - } - - void VersionExplorer::Log(const char* format, ...) - { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } - - void VersionExplorer::OnClose() - { - reject(); - } - - bool VersionExplorer::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } - - void VersionExplorer::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: - - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } - } - break; - - case ProcessState::Upgrade: - { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) - { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); - - if (!m_isUpgradingSingleGraph) - { - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } - } - else - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(false); - } - - m_upgradeComplete = false; - } - - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) - { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } - - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); - } - - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void VersionExplorer::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); - } - - AZStd::string VersionExplorer::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_ui->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; - } - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; - } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("VersionExplorer::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void VersionExplorer::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "VersionExplorer::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); - } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void VersionExplorer::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void VersionExplorer::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; - } - - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void VersionExplorer::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void VersionExplorer::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + namespace VersionExplorer { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } - - if (m_upgradeResult == OperationResult::Failure) - { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } - - m_tmpFileName.clear(); } - - void VersionExplorer::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } - } - - void VersionExplorer::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void VersionExplorer::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void VersionExplorer::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - if (!m_assetsToInspect.empty()) - { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); - m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); - } - } - - void VersionExplorer::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - - void VersionExplorer::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) - { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); - } - - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - - - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) - { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; - } - - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); - - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); - - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; - } - - void VersionExplorer::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) - { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) - { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) - { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } - - void VersionExplorer::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - } - } - - void VersionExplorer::FinalizeScan() - { - Log("FinalizeScan()"); - - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); - - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); - } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void VersionExplorer::FlushLogs() - { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - - } - - bool VersionExplorer::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } - - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } - - bool VersionExplorer::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorer::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorer::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } - - bool VersionExplorer::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - - void VersionExplorer::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); - } - -#include - } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h index acb28a7dba..e1ab92acbc 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h @@ -8,173 +8,16 @@ #pragma once -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include -#include - -#include #include -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class VersionExplorer; -} - -namespace AzQtComponents -{ - class StyledBusyLabel; -} - namespace ScriptCanvasEditor { - //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow - //! the upgrade tool to work even if the editor is not in the foreground - class EditorKeepAlive + namespace VersionExplorer { - public: - EditorKeepAlive(); - ~EditorKeepAlive(); - - private: - int m_keepEditorActive; - ICVar* m_edKeepEditorActive; - }; - - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class VersionExplorer - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(VersionExplorer, AZ::SystemAllocator, 0); - - explicit VersionExplorer(QWidget* parent = nullptr); - ~VersionExplorer(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; - - void OnScan(); - void OnClose(); - - enum class ProcessState - { - Inactive, - Backup, - Scan, - Upgrade, - }; - ProcessState m_state = ProcessState::Inactive; - - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); - - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - - void OnUpgradeAll(); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - bool CaptureLogFromTraceBus(const char* window, const char* message); - - enum class OperationResult + class FileSaver { - Success, - Failure, + public: + AZ_CLASS_ALLOCATOR(FileSaver, AZ::SystemAllocator, 0); }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const; - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - - AZStd::unique_ptr m_settingsCache; - - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); - }; + } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp new file mode 100644 index 0000000000..710d6863f5 --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace ModifierCpp +{ + +} + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + const AZStd::vector* Model::GetLogs() + { + return &m_log.GetEntries(); + } + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h new file mode 100644 index 0000000000..44da70e85c --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once +#include +#include +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + //! Handles model change requests, state queries; sends state change notifications + class Model + : public ModelRequestsBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(Model, AZ::SystemAllocator, 0); + + const AZStd::vector* GetLogs(); + + private: + Log m_log; + + AZStd::unique_ptr m_settingsCache; + }; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h new file mode 100644 index 0000000000..e66cdac13e --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class ModelRequestsTraits + : public AZ::EBusTraits + { + public: + virtual const AZStd::vector* GetLogs(); + }; + using ModelRequestsBus = AZ::EBus; + + class ModelNotificationsTraits + : public AZ::EBusTraits + { + public: + }; + using ModelNotificationsBus = AZ::EBus; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index b96a5c6d0c..a0067e1a5f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -6,1018 +6,17 @@ * */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -namespace VersionExplorerCpp +namespace ModifierCpp { - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - - if (fileName) - { - m_fileName = fileName; - } - } - }; } namespace ScriptCanvasEditor { - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - - Modifier::Modifier(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::Modifier()) - { - m_ui->setupUi(this); - - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - - connect(m_ui->scanButton, &QPushButton::pressed, this, &Modifier::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &Modifier::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &Modifier::OnUpgradeAll); - - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); - - } - - Modifier::~Modifier() - { - AZ::SystemTickBus::Handler::BusDisconnect(); - - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - - } - - void Modifier::Log(const char* format, ...) + namespace VersionExplorer { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } - - void Modifier::OnClose() - { - reject(); - } - - bool Modifier::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } - - void Modifier::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: - - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } - } - break; - - case ProcessState::Upgrade: - { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) - { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); - - if (!m_isUpgradingSingleGraph) - { - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } - } - else - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(false); - } - - m_upgradeComplete = false; - } - - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) - { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } - - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); - } - - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void Modifier::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); } - - AZStd::string Modifier::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_ui->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; - } - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; - } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Modifier::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Modifier::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("Modifier::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void Modifier::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "Modifier::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); - } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void Modifier::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void Modifier::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; - } - - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void Modifier::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void Modifier::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } - - if (m_upgradeResult == OperationResult::Failure) - { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } - - m_tmpFileName.clear(); - } - - void Modifier::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } - } - - void Modifier::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void Modifier::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void Modifier::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - if (!m_assetsToInspect.empty()) - { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); - m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); - } - } - - void Modifier::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - - void Modifier::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) - { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); - } - - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - - - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) - { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; - } - - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); - - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); - - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; - } - - void Modifier::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) - { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) - { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) - { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } - - void Modifier::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - } - } - - void Modifier::FinalizeScan() - { - Log("FinalizeScan()"); - - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); - - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); - } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void Modifier::FlushLogs() - { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - - } - - bool Modifier::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } - - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } - - bool Modifier::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool Modifier::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool Modifier::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } - - bool Modifier::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - - void Modifier::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); - } - -#include - } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index 5f379d682a..e5a40ff096 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -8,160 +8,16 @@ #pragma once -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include -#include - -#include #include -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class Modifier; -} - -namespace AzQtComponents -{ - class StyledBusyLabel; -} - namespace ScriptCanvasEditor { - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class Modifier - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler + namespace VersionExplorer { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); - - explicit Modifier(QWidget* parent = nullptr); - ~Modifier(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; - - void OnScan(); - void OnClose(); - - enum class ProcessState + class Modifier { - Inactive, - Backup, - Scan, - Upgrade, + public: + AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); }; - ProcessState m_state = ProcessState::Inactive; - - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); - - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - - void OnUpgradeAll(); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - bool CaptureLogFromTraceBus(const char* window, const char* message); - - enum class OperationResult - { - Success, - Failure, - }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const; - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - - AZStd::unique_ptr m_settingsCache; - - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); - }; + } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp index 29f5f8f530..f74c27004b 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -6,1018 +6,17 @@ * */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -namespace VersionExplorerCpp +namespace ScannerCpp { - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - - if (fileName) - { - m_fileName = fileName; - } - } - }; } namespace ScriptCanvasEditor { - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - - Scanner::Scanner(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::Scanner()) - { - m_ui->setupUi(this); - - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - - connect(m_ui->scanButton, &QPushButton::pressed, this, &Scanner::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &Scanner::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &Scanner::OnUpgradeAll); - - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); - - } - - Scanner::~Scanner() - { - AZ::SystemTickBus::Handler::BusDisconnect(); - - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - - } - - void Scanner::Log(const char* format, ...) + namespace VersionExplorer { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } - - void Scanner::OnClose() - { - reject(); - } - - bool Scanner::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } - - void Scanner::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: - - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } - } - break; - - case ProcessState::Upgrade: - { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) - { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); - - if (!m_isUpgradingSingleGraph) - { - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } - } - else - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(false); - } - - m_upgradeComplete = false; - } - - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) - { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } - - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); - } - - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void Scanner::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); } - - AZStd::string Scanner::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_ui->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; - } - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; - } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Scanner::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Scanner::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("Scanner::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void Scanner::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "Scanner::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); - } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void Scanner::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void Scanner::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; - } - - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void Scanner::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void Scanner::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } - - if (m_upgradeResult == OperationResult::Failure) - { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } - - m_tmpFileName.clear(); - } - - void Scanner::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } - } - - void Scanner::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void Scanner::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void Scanner::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - if (!m_assetsToInspect.empty()) - { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); - m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); - } - } - - void Scanner::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - - void Scanner::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) - { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); - } - - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - - - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) - { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; - } - - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); - - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); - - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; - } - - void Scanner::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) - { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) - { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) - { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } - - void Scanner::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - } - } - - void Scanner::FinalizeScan() - { - Log("FinalizeScan()"); - - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); - - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); - } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void Scanner::FlushLogs() - { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - - } - - bool Scanner::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } - - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } - - bool Scanner::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool Scanner::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool Scanner::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } - - bool Scanner::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - - void Scanner::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); - } - -#include - } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h index 574b2b2503..19642a07f1 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h @@ -8,160 +8,16 @@ #pragma once -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include -#include - -#include #include -#include -#include -#include -#endif - -class QPushButton; - -namespace Ui -{ - class Scanner; -} - -namespace AzQtComponents -{ - class StyledBusyLabel; -} - namespace ScriptCanvasEditor { - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class Scanner - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler + namespace VersionExplorer { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(Scanner, AZ::SystemAllocator, 0); - - explicit Scanner(QWidget* parent = nullptr); - ~Scanner(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; - - void OnScan(); - void OnClose(); - - enum class ProcessState + class Scanner { - Inactive, - Backup, - Scan, - Upgrade, + public: + AZ_CLASS_ALLOCATOR(Scanner, AZ::SystemAllocator, 0); }; - ProcessState m_state = ProcessState::Inactive; - - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); - - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - - void OnUpgradeAll(); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - bool CaptureLogFromTraceBus(const char* window, const char* message); - - enum class OperationResult - { - Success, - Failure, - }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const; - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - - AZStd::unique_ptr m_settingsCache; - - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); - }; + } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp index 6c9acea25c..be4b619bfd 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp @@ -6,1018 +6,94 @@ * */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -namespace VersionExplorerCpp +namespace LoggerCpp { - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - if (fileName) - { - m_fileName = fileName; - } - } - }; } namespace ScriptCanvasEditor { - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - - VersionExplorerLog::VersionExplorerLog(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::VersionExplorerLog()) - { - m_ui->setupUi(this); - - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - - connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorerLog::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorerLog::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorerLog::OnUpgradeAll); - - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); - - } - - VersionExplorerLog::~VersionExplorerLog() - { - AZ::SystemTickBus::Handler::BusDisconnect(); - - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - - } - - void VersionExplorerLog::Log(const char* format, ...) - { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } - - void VersionExplorerLog::OnClose() - { - reject(); - } - - bool VersionExplorerLog::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } - - void VersionExplorerLog::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: - - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) - { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } - } - break; - - case ProcessState::Upgrade: - { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) - { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - - if (m_scriptCanvasEntity) - { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; - } - - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); - - if (!m_isUpgradingSingleGraph) - { - if (m_inProgressAsset != m_assetsToUpgrade.end()) - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - } - - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } - } - else - { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } - - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(false); - } - - m_upgradeComplete = false; - } - - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) - { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } - - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); - } - - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void VersionExplorerLog::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); - } - - AZStd::string VersionExplorerLog::BackupGraph(const AZ::Data::Asset& asset) + namespace VersionExplorer { - if (!m_ui->makeBackupCheckbox->isChecked()) + void Log::Activate() { - // considered a success - return ""; + AZ::Debug::TraceMessageBus::Handler::BusConnect(); } - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + void Log::AddEntry(const char* format, ...) { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + if (m_isVerbose) { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); } } - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) + bool Log::CaptureFromTraceBus(const char* window, const char* message) { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorerLog::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorerLog::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("VersionExplorerLog::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void VersionExplorerLog::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "VersionExplorerLog::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) + if (m_isExclusiveReportingEnabled && window != ScriptCanvas::k_VersionExplorerWindow) { - return; + return true; } - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) + AZStd::string msg = message; + if (msg.ends_with("\n")) { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); + msg = msg.substr(0, msg.size() - 1); } - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); - } + m_logs.push_back(msg); + return m_isExclusiveReportingEnabled; } - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void VersionExplorerLog::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) + void Log::Deactivate() { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); } - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void VersionExplorerLog::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + const AZStd::vector& Log::GetEntries() const { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; + return m_logs; } - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) + void Log::SetVersionExporerExclusivity(bool enabled) { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); + m_isExclusiveReportingEnabled = enabled; } - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) + void Log::SetVerbose(bool verbosity) { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; + m_isVerbose = verbosity; } - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + bool Log::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void VersionExplorerLog::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); + AZStd::string msg = AZStd::string::format("(Error): %s", message); + return CaptureFromTraceBus(window, msg.c_str()); } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void VersionExplorerLog::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } - - if (m_upgradeResult == OperationResult::Failure) - { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } - - m_tmpFileName.clear(); - } - - void VersionExplorerLog::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } - } - - void VersionExplorerLog::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void VersionExplorerLog::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void VersionExplorerLog::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - - if (!m_assetsToInspect.empty()) + bool Log::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); - m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); + AZStd::string msg = AZStd::string::format("(Warning): %s", message); + return CaptureFromTraceBus(window, msg.c_str()); } - } - - void VersionExplorerLog::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - void VersionExplorerLog::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) + bool Log::OnException(const char* message) { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) - { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + AZStd::string msg = AZStd::string::format("(Exception): %s", message); + return CaptureFromTraceBus("Script Canvas", msg.c_str()); } - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - - - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + bool Log::OnPrintf(const char* window, const char* message) { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; + return CaptureFromTraceBus(window, message); } - - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); - - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); - - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; } - - void VersionExplorerLog::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) - { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) - { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) - { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } - - void VersionExplorerLog::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - } - } - - void VersionExplorerLog::FinalizeScan() - { - Log("FinalizeScan()"); - - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); - - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); - } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void VersionExplorerLog::FlushLogs() - { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - - } - - bool VersionExplorerLog::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } - - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } - - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } - - bool VersionExplorerLog::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorerLog::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } - - bool VersionExplorerLog::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } - - bool VersionExplorerLog::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - - void VersionExplorerLog::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); - } - -#include - } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h index 498b2f7745..1ba8e8c9b1 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h @@ -8,160 +8,36 @@ #pragma once -#if !defined(Q_MOC_RUN) -#include - -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -#include -#include -#include - -#include #include - -#include -#include #include -#endif - -class QPushButton; - -namespace Ui -{ - class VersionExplorerLog; -} - -namespace AzQtComponents -{ - class StyledBusyLabel; -} namespace ScriptCanvasEditor { - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class VersionExplorerLog - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler + namespace VersionExplorer { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(VersionExplorerLog, AZ::SystemAllocator, 0); - - explicit VersionExplorerLog(QWidget* parent = nullptr); - ~VersionExplorerLog(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; - - void OnScan(); - void OnClose(); - - enum class ProcessState + class Log + : private AZ::Debug::TraceMessageBus::Handler { - Inactive, - Backup, - Scan, - Upgrade, + public: + AZ_CLASS_ALLOCATOR(Log, AZ::SystemAllocator, 0); + + void Activate(); + void AddEntry(const char* format, ...); + void Deactivate(); + const AZStd::vector& GetEntries() const; + void SetVersionExporerExclusivity(bool enabled); + void SetVerbose(bool verbosity); + + private: + bool m_isExclusiveReportingEnabled = false; + bool m_isVerbose = false; + AZStd::vector m_logs; + + bool CaptureFromTraceBus(const char* window, const char* message); + bool OnException(const char* /*message*/) override; + bool OnPrintf(const char* /*window*/, const char* /*message*/) override; + bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; + bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; }; - ProcessState m_state = ProcessState::Inactive; - - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); - - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - - void OnUpgradeAll(); - - // SystemTickBus::Handler - void OnSystemTick() override; - // - - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // - - bool CaptureLogFromTraceBus(const char* window, const char* message); - - enum class OperationResult - { - Success, - Failure, - }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const; - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_ui; - - AZStd::unique_ptr m_settingsCache; - - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); - }; + } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h deleted file mode 100644 index 2b23c711dd..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerTraits.h +++ /dev/null @@ -1,22 +0,0 @@ -#include - -namespace ScriptCanvasEditor -{ - namespace VersionExplorer - { - class RequestsTraits : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy HandlerPolicy = AZ::EBusAddressPolicy::Single; - }; - using RequestsBus = AZ::EBus; - - class NotificationsTraits : public AZ::EBusTraits - { - public: - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - using BusIdType = NotificationsTraits*; - }; - using NotificationsBus = AZ::EBus; - } -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp index eb182ed291..bf407765e1 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp @@ -28,996 +28,909 @@ #include #include #include -#include -#include +#include +#include #include #include #include -namespace VersionExplorerCpp +namespace ScriptCanvasEditor { - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler + namespace VersionExplorer { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() + EditorKeepAlive::EditorKeepAlive() { - BusConnect(); - } + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - ~FileEventHandler() - { - BusDisconnect(); + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } } - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override + EditorKeepAlive::~EditorKeepAlive() { - m_errorCode = errorCode; - - if (fileName) + if (m_edKeepEditorActive) { - m_fileName = fileName; + m_edKeepEditorActive->Set(m_keepEditorActive); } } - }; -} -namespace ScriptCanvasEditor -{ - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + View::View(QWidget* parent) + : AzQtComponents::StyledDialog(parent) + , m_ui(new Ui::View()) + { + m_ui->setupUi(this); + m_ui->tableWidget->horizontalHeader()->setVisible(false); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_ui->tableWidget->setColumnWidth(3, 22); + m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + connect(m_ui->scanButton, &QPushButton::pressed, this, &View::OnScanButtonPress); + connect(m_ui->closeButton, &QPushButton::pressed, this, &View::OnCloseButtonPress); + connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &View::OnUpgradeAllButtonPress); + m_ui->progressBar->setValue(0); + m_ui->progressBar->setVisible(false); - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + ViewRequestsBus::Handler::BusConnect(); + ModelNotificationsBus::Handler::BusConnect(); - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); + // move to model, maybe + m_keepEditorAlive = AZStd::make_unique(); } - } - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); + void View::Log(const char* /*format*/, ...) + { +// if (m_ui->verbose->isChecked()) +// { +// char sBuffer[2048]; +// va_list ArgList; +// va_start(ArgList, format); +// azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); +// sBuffer[sizeof(sBuffer) - 1] = '\0'; +// va_end(ArgList); +// +// AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); +// } + } + + void View::OnCloseButtonPress() + { + reject(); + } + + void View::OnSystemTick() + { +// switch (m_state) +// { +// case ProcessState::Scan: +// +// if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) +// { +// m_inProgress = true; +// AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; +// m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); +// Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); +// m_currentAsset.BlockUntilLoadComplete(); +// if (m_currentAsset.IsReady()) +// { +// // The asset is ready, grab its info +// m_inProgress = true; +// InspectAsset(m_currentAsset, assetToUpgrade); +// } +// else +// { +// m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); +// QTableWidgetItem* rowName = new QTableWidgetItem +// (tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); +// m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); +// ++m_currentAssetRowIndex; +// +// Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); +// ++m_failedAssets; +// ScanComplete(m_currentAsset); +// } +// } +// break; +// +// case ProcessState::Upgrade: +// { +// AZStd::lock_guard lock(m_mutex); +// if (m_upgradeComplete) +// { +// ++m_upgradeAssetIndex; +// m_inProgress = false; +// m_ui->progressBar->setVisible(true); +// m_ui->progressBar->setValue(m_upgradeAssetIndex); +// +// if (m_scriptCanvasEntity) +// { +// m_scriptCanvasEntity->Deactivate(); +// m_scriptCanvasEntity = nullptr; +// } +// +// GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); +// +// if (!m_isUpgradingSingleGraph) +// { +// if (m_inProgressAsset != m_assetsToUpgrade.end()) +// { +// m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); +// } +// +// if (m_inProgressAsset == m_assetsToUpgrade.end()) +// { +// FinalizeUpgrade(); +// } +// } +// else +// { +// m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); +// m_inProgress = false; +// m_state = ProcessState::Inactive; +// // m_settingsCache.reset(); +// AZ::SystemTickBus::Handler::BusDisconnect(); +// +// } +// +// m_isUpgradingSingleGraph = false; +// +// if (m_assetsToUpgrade.empty()) +// { +// m_ui->upgradeAllButton->setEnabled(false); +// } +// +// m_upgradeComplete = false; +// } +// +// if (!IsUpgrading() && m_state == ProcessState::Upgrade) +// { +// AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); +// // Make the backup +// if (errorMessage.empty()) +// { +// Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); +// QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); +// if (!items.isEmpty()) +// { +// for (auto* item : items) +// { +// int row = item->row(); +// AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); +// spinner->SetIsBusy(true); +// } +// } +// +// // Upgrade the graph +// UpgradeGraph(*m_inProgressAsset); +// } +// else +// { +// Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); +// GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); +// } +// +// } +// break; +// } +// default: +// break; +// } +// +// FlushLogs(); +// +// AZ::Data::AssetManager::Instance().DispatchEvents(); +// AZ::SystemTickBus::ExecuteQueuedEvents(); + } + + // Backup + + void View::OnUpgradeAllButtonPress() + { + m_state = ProcessState::Upgrade; + //m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + AZ::Interface::Get()->SetIsUpgrading(true); + AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); + m_inProgressAsset = m_assetsToUpgrade.begin(); + AZ::SystemTickBus::Handler::BusConnect(); + m_ui->progressBar->setVisible(true); + m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_keepEditorAlive = AZStd::make_unique(); } - } - VersionExplorer::VersionExplorer(QWidget* parent /*= nullptr*/) - : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::VersionExplorer()) - { - m_ui->setupUi(this); + AZStd::string View::BackupGraph(const AZ::Data::Asset& asset) + { + if (!m_ui->makeBackupCheckbox->isChecked()) + { + // considered a success + return ""; + } - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); + QDateTime theTime = QDateTime::currentDateTime(); + QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); + char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); + backupPath = backupPathCStr; - connect(m_ui->scanButton, &QPushButton::pressed, this, &VersionExplorer::OnScan); - connect(m_ui->closeButton, &QPushButton::pressed, this, &VersionExplorer::OnClose); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &VersionExplorer::OnUpgradeAll); + if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + { + if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + { + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); + return "Failed to create backup folder"; + } + } - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); + AZStd::string devRoot = "@devroot@"; + AZStd::string devAssets = "@devassets@"; - m_keepEditorAlive = AZStd::make_unique(); - m_inspectingAsset = m_assetsToInspect.end(); + char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - } + char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; + AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - VersionExplorer::~VersionExplorer() - { - AZ::SystemTickBus::Handler::BusDisconnect(); + AZStd::string relativePath = devAssetsCStr; + AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + AZStd::string sourceFilePath; - } + AZStd::string watchFolder; + AZ::Data::AssetInfo assetInfo; + bool sourceInfoFound{}; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + if (sourceInfoFound) + { + AZStd::string assetPath; + AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - void VersionExplorer::Log(const char* format, ...) - { - if (m_ui->verbose->isChecked()) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } - } + sourceFilePath = assetPath; + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "View::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + return "Failed to find source file"; + } - void VersionExplorer::OnClose() - { - reject(); - } + devRoot = devRootCStr; + AzFramework::StringFunc::Path::Normalize(devRoot); - bool VersionExplorer::IsUpgrading() const - { - return m_inProgressAsset != m_assetsToUpgrade.end() && m_inProgress; - } + relativePath = sourceFilePath; + AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); + if (relativePath.starts_with("/")) + { + relativePath = relativePath.substr(1, relativePath.size() - 1); + } - void VersionExplorer::OnSystemTick() - { - switch (m_state) - { - case ProcessState::Scan: + AzFramework::StringFunc::Path::Normalize(relativePath); + AzFramework::StringFunc::Path::Normalize(backupPath); + + AZStd::string targetFilePath = backupPath; + targetFilePath += relativePath; - if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) + if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) { - m_inProgress = true; - AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; - m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); - m_currentAsset.BlockUntilLoadComplete(); - if (m_currentAsset.IsReady()) - { - // The asset is ready, grab its info - m_inProgress = true; - InspectAsset(m_currentAsset, assetToUpgrade); - } - else - { - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem - ( tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - ++m_currentAssetRowIndex; - - Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); - ++m_failedAssets; - ScanComplete(m_currentAsset); - } + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "View::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return "Failed to copy source file to backup location"; } - break; - case ProcessState::Upgrade: + Log("View::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + return ""; + } + + void View::UpgradeGraph(const AZ::Data::Asset& asset) { - AZStd::lock_guard lock(m_mutex); - if (m_upgradeComplete) + m_inProgress = true; + m_upgradeComplete = false; + Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); + m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_scriptCanvasEntity = nullptr; + + UpgradeNotifications::Bus::Handler::BusConnect(); + + if (asset.GetType() == azrtti_typeid()) { - ++m_upgradeAssetIndex; - m_inProgress = false; - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setValue(m_upgradeAssetIndex); + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); - if (m_scriptCanvasEntity) + if (!scriptCanvasAsset) { - m_scriptCanvasEntity->Deactivate(); - m_scriptCanvasEntity = nullptr; + return; } - GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } - if (!m_isUpgradingSingleGraph) + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) { - if (m_inProgressAsset != m_assetsToUpgrade.end()) + if (queryEntity->GetState() == AZ::Entity::State::Active) { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); + queryEntity->Deactivate(); } - if (m_inProgressAsset == m_assetsToUpgrade.end()) - { - FinalizeUpgrade(); - } + scriptCanvasEntity = queryEntity; } - else + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) { - m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); - m_inProgress = false; - m_state = ProcessState::Inactive; - m_settingsCache.reset(); - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + scriptCanvasEntity->Init(); } - m_isUpgradingSingleGraph = false; - - if (m_assetsToUpgrade.empty()) + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) { - m_ui->upgradeAllButton->setEnabled(false); + scriptCanvasEntity->Activate(); } - m_upgradeComplete = false; - } + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - if (!IsUpgrading() && m_state == ProcessState::Upgrade) - { - AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); - // Make the backup - if (errorMessage.empty()) + if (graphComponent) { - Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); - QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); - spinner->SetIsBusy(true); - } - } + m_scriptCanvasEntity = scriptCanvasEntity; - // Upgrade the graph - UpgradeGraph(*m_inProgressAsset); - } - else - { - Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); - GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); + graphComponent->UpgradeGraph + (asset + , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_ui->verbose->isChecked()); } - } - break; - } - default: - break; - } - - FlushLogs(); - - AZ::Data::AssetManager::Instance().DispatchEvents(); - AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - void VersionExplorer::OnUpgradeAll() - { - m_state = ProcessState::Upgrade; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); - } - - AZStd::string VersionExplorer::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_ui->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; + AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); } - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + void View::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + if (!fullPathFound) { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); } - Log("VersionExplorer::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; - } - - void VersionExplorer::UpgradeGraph(const AZ::Data::Asset& asset) - { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) + void View::OnSourceFileReleased(AZ::Data::Asset asset) { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + m_tmpFileName.clear(); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) { + GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); return; } - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "VersionExplorer::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) + if (asset.GetType() == azrtti_typeid()) { - queryEntity->Deactivate(); + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); } - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); + fileStream.Close(); } - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + // attempt to remove temporary file no matter what + m_tmpFileName = tmpFileName; + if (!tempSavedSucceeded) { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - ( asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); + return; } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - void VersionExplorer::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void VersionExplorer::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); - return; - } - - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) + using SCCommandBus = AzToolsFramework::SourceControlCommandBus; + SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, + [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } + constexpr const size_t k_maxAttemps = 10; - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) + if (!info.IsReadOnly()) { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); } else { - int result = QMessageBox::No; - if (!m_overwriteAll) + if (m_overwriteAll) { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } + else + { + int result = QMessageBox::No; + if (!m_overwriteAll) { - m_overwriteAll = true; + QMessageBox mb(QMessageBox::Warning, + QObject::tr("Failed to Save Upgraded File"), + QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), + QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); + + result = mb.exec(); + if (result == QMessageBox::YesToAll) + { + m_overwriteAll = true; + } } - } - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + if (result == QMessageBox::Yes || m_overwriteAll) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); + } } } - } - }); - } - - void VersionExplorer::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - VersionExplorerCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target](){ PerformMove(asset, source, target, remainingAttempts - 1); }); }); - streamer->QueueRequest(flushRequest); } - else + + void View::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + , size_t remainingAttempts) { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + // ViewCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); + // all attempts failed, give up + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); + GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); } - else + else if (remainingAttempts == 2) { + // before the final attempt, flush all caches AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) { // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + AZ::SystemTickBus::QueueFunction( + [this, asset, remainingAttempts, source, target]() { PerformMove(asset, source, target, remainingAttempts - 1); }); }); streamer->QueueRequest(flushRequest); } - } - } - - void VersionExplorer::GraphUpgradeComplete - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + else { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + m_tmpFileName.clear(); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, asset]() + { + GraphUpgradeComplete(asset, OperationResult::Success, ""); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } } } - if (m_upgradeResult == OperationResult::Failure) + void View::GraphUpgradeComplete + (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); - } + AZStd::lock_guard lock(m_mutex); + m_upgradeComplete = true; + m_upgradeResult = result; + m_upgradeMessage = message; + m_upgradeAsset = asset; - m_tmpFileName.clear(); - } + if (!m_tmpFileName.empty()) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); - void VersionExplorer::GraphUpgradeCompleteUIUpdate - ( const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) + { + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); + } + } - if (!items.isEmpty()) - { - for (auto* item : items) + if (m_upgradeResult == OperationResult::Failure) { - int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); + AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + } + + m_tmpFileName.clear(); + } + + void View::GraphUpgradeCompleteUIUpdate + (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) + { + QString text = asset.GetHint().c_str(); + QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - if (label->text().compare(assetName) == 0) + if (!items.isEmpty()) + { + for (auto* item : items) { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + int row = item->row(); + QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QString assetName = asset.GetHint().c_str(); - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else + if (label->text().compare(assetName) == 0) { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } + m_ui->tableWidget->removeCellWidget(row, ColumnAction); + m_ui->tableWidget->removeCellWidget(row, ColumnStatus); - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + QToolButton* doneButton = new QToolButton(this); + doneButton->setToolTip("Upgrade complete"); + if (result == OperationResult::Success) + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + } + else + { + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + } + + m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + } } } } - } - void VersionExplorer::FinalizeUpgrade() - { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else + void View::FinalizeUpgrade() { - m_ui->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - m_settingsCache.reset(); - } - - // Scanning - - void VersionExplorer::OnScan() - { - m_assetsToUpgrade.clear(); - m_assetsToInspect.clear(); - m_ui->tableWidget->setRowCount(0); - m_inspectedAssets = 0; - m_currentAssetRowIndex = 0; - IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); - m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); - DoScan(); - } - - void VersionExplorer::DoScan() - { - m_state = ProcessState::Scan; - m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + Log("FinalizeUpgrade!"); + m_inProgress = false; + m_assetsToUpgrade.clear(); + m_ui->upgradeAllButton->setEnabled(false); + m_ui->onlyShowOutdated->setEnabled(true); + m_keepEditorAlive.reset(); + m_ui->progressBar->setVisible(false); - AZ::SystemTickBus::Handler::BusConnect(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); + // Manual correction + size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); + if (assetsThatNeedManualInspection > 0) + { + m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + } + else + { + m_ui->spinner->SetText("Upgrade complete."); + } - if (!m_assetsToInspect.empty()) + AZ::SystemTickBus::Handler::BusDisconnect(); + AZ::Interface::Get()->SetIsUpgrading(false); + //m_settingsCache.reset(); + } + + // Scanning + + void View::OnScanButtonPress() + { + ViewNotificationsBus::Broadcast(&ViewNotificationsTraits::ScanRequested); + +// m_assetsToUpgrade.clear(); +// m_assetsToInspect.clear(); +// m_ui->tableWidget->setRowCount(0); +// m_inspectedAssets = 0; +// m_currentAssetRowIndex = 0; +// IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); +// m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); +// DoScan(); + } + + void View::DoScan() + { +// m_state = ProcessState::Scan; +// m_settingsCache = AZStd::make_unique(); +// ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; +// ScriptCanvas::Grammar::g_printAbstractCodeModel = false; +// ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; +// +// AZ::SystemTickBus::Handler::BusConnect(); +// +// if (!m_assetsToInspect.empty()) +// { +// m_discoveredAssets = m_assetsToInspect.size(); +// m_failedAssets = 0; +// m_inspectedAssets = 0; +// m_currentAssetRowIndex = 0; +// m_ui->progressFrame->setVisible(true); +// m_ui->progressBar->setVisible(true); +// m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); +// m_ui->progressBar->setValue(0); +// +// m_ui->spinner->SetIsBusy(true); +// m_ui->spinner->SetBusyIconSize(32); +// +// m_ui->scanButton->setEnabled(false); +// m_ui->upgradeAllButton->setEnabled(false); +// m_ui->onlyShowOutdated->setEnabled(false); +// +// m_inspectingAsset = m_assetsToInspect.begin(); +// m_keepEditorAlive = AZStd::make_unique(); +// } + } + + void View::BackupComplete() { - m_discoveredAssets = m_assetsToInspect.size(); - m_failedAssets = 0; - m_inspectedAssets = 0; m_currentAssetRowIndex = 0; - m_ui->progressFrame->setVisible(true); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); m_ui->progressBar->setValue(0); - - m_ui->spinner->SetIsBusy(true); - m_ui->spinner->SetBusyIconSize(32); - - m_ui->scanButton->setEnabled(false); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(false); - - m_inspectingAsset = m_assetsToInspect.begin(); - m_keepEditorAlive = AZStd::make_unique(); + DoScan(); } - } - - void VersionExplorer::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); - } - void VersionExplorer::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) - { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) + void View::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; + if (asset.GetType() == azrtti_typeid()) { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; - } + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return; + } - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); - } + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); + bool forceUpgrade = m_ui->forceUpgrade->isChecked(); + ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) - { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; - } + if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + { + ScanComplete(asset); + Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); + return; + } - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); + m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); + if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) + { + m_assetsToUpgrade.push_back(asset); - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); + QPushButton* rowGoToButton = new QPushButton(this); + rowGoToButton->setText("Upgrade"); + rowGoToButton->setEnabled(false); - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { + connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); + AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { + // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda + UpgradeSingle(rowGoToButton, spinner, assetInfo); }); - AZ::SystemTickBus::ExecuteQueuedEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); }); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); - } + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + } - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = asset.GetHint().c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); }); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; - ++m_currentAssetRowIndex; - } - - void VersionExplorer::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) - { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - ( assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); + m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + ScanComplete(asset); + ++m_inspectedAssets; + ++m_currentAssetRowIndex; + } - if (asset) + void View::UpgradeSingle + (QPushButton* rowGoToButton + , AzQtComponents::StyledBusyLabel* spinner + , AZ::Data::AssetInfo assetInfo) { - asset.BlockUntilLoadComplete(); + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + (assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - if (asset.IsReady()) + if (asset) { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_ui->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); + asset.BlockUntilLoadComplete(); - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) + if (asset.IsReady()) { - return assetToUpgrade.GetId() == asset.GetId(); - }); + AZ::Interface::Get()->SetIsUpgrading(true); + m_isUpgradingSingleGraph = true; + m_logs.clear(); + m_ui->textEdit->clear(); + spinner->SetIsBusy(true); + rowGoToButton->setEnabled(false); + + m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() + , [asset](const UpgradeAssets::value_type& assetToUpgrade) + { + return assetToUpgrade.GetId() == asset.GetId(); + }); - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } + m_state = ProcessState::Upgrade; + AZ::SystemTickBus::Handler::BusConnect(); + } + } } - } - void VersionExplorer::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); - - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - - if (m_inspectingAsset == m_assetsToInspect.end()) + void View::ScanComplete(const AZ::Data::Asset& asset) { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + Log("ScanComplete: %s", asset.GetHint().c_str()); + m_inProgress = false; + m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_ui->scanButton->setEnabled(true); - if (!m_assetsToUpgrade.empty()) + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); + FlushLogs(); + + if (m_inspectingAsset == m_assetsToInspect.end()) { - m_ui->upgradeAllButton->setEnabled(true); + AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } } } - } - void VersionExplorer::FinalizeScan() - { - Log("FinalizeScan()"); + void View::FinalizeScan() + { + Log("FinalizeScan()"); - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); + m_ui->spinner->SetIsBusy(false); + m_ui->onlyShowOutdated->setEnabled(true); - // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); - if (button) + // Enable all the Upgrade buttons + for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) { - button->setEnabled(true); + QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + if (button) + { + button->setEnabled(true); + } } - } - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } + QString spinnerText = QStringLiteral("Scan Complete"); + if (m_assetsToUpgrade.empty()) + { + spinnerText.append(" - No graphs require upgrade!"); + } + else + { + spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" + , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); + } - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); + m_ui->spinner->SetText(spinnerText); + m_ui->progressBar->setVisible(false); - if (!m_assetsToUpgrade.empty()) - { - m_ui->upgradeAllButton->setEnabled(true); - } + if (!m_assetsToUpgrade.empty()) + { + m_ui->upgradeAllButton->setEnabled(true); + } - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); + AZ::SystemTickBus::Handler::BusDisconnect(); - m_keepEditorAlive.reset(); - m_settingsCache.reset(); - m_state = ProcessState::Inactive; - } - - void VersionExplorer::FlushLogs() - { - if (m_logs.empty()) - { - return; + m_keepEditorAlive.reset(); + //m_settingsCache.reset(); + m_state = ProcessState::Inactive; } - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); - - while (!m_logs.empty()) + void View::FlushLogs() { - auto line = "\n" + m_logs.front(); - - m_logs.pop_front(); - - textCursor.insertText(line.c_str()); - } - - scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + if (m_logs.empty()) + { + return; + } - } + const QTextCursor oldCursor = m_ui->textEdit->textCursor(); + QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); - bool VersionExplorer::CaptureLogFromTraceBus(const char* window, const char* message) - { - if (m_ui->updateReportingOnly->isChecked() && window != ScriptCanvas::k_VersionExplorerWindow) - { - return true; - } + m_ui->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_ui->textEdit->textCursor(); - AZStd::string msg = message; - if (msg.ends_with("\n")) - { - msg = msg.substr(0, msg.size() - 1); - } + while (!m_logs.empty()) + { + auto line = "\n" + m_logs.front(); - m_logs.push_back(msg); - return m_ui->updateReportingOnly->isChecked(); - } + m_logs.pop_front(); - bool VersionExplorer::OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Error): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } + textCursor.insertText(line.c_str()); + } - bool VersionExplorer::OnPreWarning(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) - { - AZStd::string msg = AZStd::string::format("(Warning): %s", message); - return CaptureLogFromTraceBus(window, msg.c_str()); - } + scrollBar->setValue(scrollBar->maximum()); + m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); - bool VersionExplorer::OnException(const char* message) - { - AZStd::string msg = AZStd::string::format("(Exception): %s", message); - return CaptureLogFromTraceBus("Script Canvas", msg.c_str()); - } + } - bool VersionExplorer::OnPrintf(const char* window, const char* message) - { - return CaptureLogFromTraceBus(window, message); - } - void VersionExplorer::closeEvent(QCloseEvent* event) - { - m_keepEditorAlive.reset(); + void View::closeEvent(QCloseEvent* event) + { + m_keepEditorAlive.reset(); - AzQtComponents::StyledDialog::closeEvent(event); + AzQtComponents::StyledDialog::closeEvent(event); + } } -#include +#include } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h index 7ce1920dbb..905074d17e 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h @@ -15,7 +15,6 @@ AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") AZ_POP_DISABLE_WARNING #include #include -#include #include #include #include @@ -23,11 +22,14 @@ AZ_POP_DISABLE_WARNING #include #endif +#include +#include + class QPushButton; namespace Ui { - class VersionExplorer; + class View; } namespace AzQtComponents @@ -37,140 +39,132 @@ namespace AzQtComponents namespace ScriptCanvasEditor { - //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow - //! the upgrade tool to work even if the editor is not in the foreground - class EditorKeepAlive - { - public: - EditorKeepAlive(); - ~EditorKeepAlive(); - - private: - int m_keepEditorActive; - ICVar* m_edKeepEditorActive; - }; - - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog - class VersionExplorer - : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler - , private UpgradeNotifications::Bus::Handler - , private AZ::Debug::TraceMessageBus::Handler + namespace VersionExplorer { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(VersionExplorer, AZ::SystemAllocator, 0); - - explicit VersionExplorer(QWidget* parent = nullptr); - ~VersionExplorer(); - - private: - - static constexpr int ColumnAsset = 0; - static constexpr int ColumnAction = 1; - static constexpr int ColumnBrowse = 2; - static constexpr int ColumnStatus = 3; + //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow + //! the upgrade tool to work even if the editor is not in the foreground + class EditorKeepAlive + { + public: + EditorKeepAlive(); + ~EditorKeepAlive(); - void OnScan(); - void OnClose(); + private: + int m_keepEditorActive; + ICVar* m_edKeepEditorActive; + }; - enum class ProcessState + //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog + //! Handles display change notifications, handles state change notifications, sends control requests + class View + : public AzQtComponents::StyledDialog + , private AZ::SystemTickBus::Handler + , private UpgradeNotifications::Bus::Handler + , private ViewRequestsBus::Handler + , private ModelNotificationsBus::Handler { - Inactive, - Backup, - Scan, - Upgrade, - }; - ProcessState m_state = ProcessState::Inactive; + Q_OBJECT - void DoScan(); - void ScanComplete(const AZ::Data::Asset&); + public: + AZ_CLASS_ALLOCATOR(View, AZ::SystemAllocator, 0); - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + explicit View(QWidget* parent = nullptr); + + private: - void OnUpgradeAll(); + static constexpr int ColumnAsset = 0; + static constexpr int ColumnAction = 1; + static constexpr int ColumnBrowse = 2; + static constexpr int ColumnStatus = 3; - // SystemTickBus::Handler - void OnSystemTick() override; - // + void OnCloseButtonPress(); + void OnScanButtonPress(); + void OnUpgradeAllButtonPress(); - // AZ::Debug::TranceMessageBus::Handler - bool OnException(const char* /*message*/) override; - bool OnPrintf(const char* /*window*/, const char* /*message*/) override; - bool OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override; - // + enum class ProcessState + { + Inactive, + Backup, + Scan, + Upgrade, + }; + ProcessState m_state = ProcessState::Inactive; - bool CaptureLogFromTraceBus(const char* window, const char* message); + void DoScan(); + void ScanComplete(const AZ::Data::Asset&); - enum class OperationResult - { - Success, - Failure, - }; + void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); + + // SystemTickBus::Handler + void OnSystemTick() override; - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); + enum class OperationResult + { + Success, + Failure, + }; - bool IsUpgrading() const; + void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; + bool IsUpgrading() const { return false; } - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; + bool m_inProgress = false; + // scan fields + size_t m_currentAssetRowIndex = 0; + size_t m_inspectedAssets = 0; + size_t m_failedAssets = 0; + size_t m_discoveredAssets = 0; - AZ::Data::Asset m_currentAsset; + IUpgradeRequests::AssetList m_assetsToInspect; + IUpgradeRequests::AssetList::iterator m_inspectingAsset; + using UpgradeAssets = AZStd::vector>; + UpgradeAssets m_assetsToUpgrade; + UpgradeAssets::iterator m_inProgressAsset; - AZStd::unique_ptr m_ui; + AZ::Data::Asset m_currentAsset; - AZStd::unique_ptr m_settingsCache; + AZStd::unique_ptr m_ui; - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; + + // upgrade fields + AZStd::recursive_mutex m_mutex; + bool m_upgradeComplete = false; + AZ::Data::Asset m_upgradeAsset; + int m_upgradeAssetIndex = 0; + OperationResult m_upgradeResult; + AZStd::string m_upgradeMessage; + AZStd::string m_tmpFileName; - AZStd::unique_ptr m_keepEditorAlive; + AZStd::unique_ptr m_keepEditorAlive; - AZStd::deque m_logs; + AZStd::deque m_logs; - AZ::Entity* m_scriptCanvasEntity = nullptr; + AZ::Entity* m_scriptCanvasEntity = nullptr; - bool m_isUpgradingSingleGraph = false; + bool m_isUpgradingSingleGraph = false; - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); + void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - void FlushLogs(); + void FlushLogs(); - void FinalizeUpgrade(); - void FinalizeScan(); + void FinalizeUpgrade(); + void FinalizeScan(); - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); + void BackupComplete(); + AZStd::string BackupGraph(const AZ::Data::Asset&); + void UpgradeGraph(const AZ::Data::Asset&); - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; + void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - void OnSourceFileReleased(AZ::Data::Asset asset); + void OnSourceFileReleased(AZ::Data::Asset asset); - void closeEvent(QCloseEvent* event) override; + void closeEvent(QCloseEvent* event) override; - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); + bool m_overwriteAll = false; + void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - void Log(const char* format, ...); - }; + void Log(const char* format, ...); + }; + } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui index 0cd67bcf22..f549c821d6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui @@ -1,7 +1,7 @@ - VersionExplorer - + View + Qt::WindowModal diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h new file mode 100644 index 0000000000..7f36e8503d --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class ViewRequestsTraits : public AZ::EBusTraits + { + public: + // flush logs, or add log text + // set progress update + virtual void ClearProgress() {} + virtual void SetInProgress() {} + }; + using ViewRequestsBus = AZ::EBus; + } +} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index dbffe99afd..eb914ae139 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -259,20 +259,24 @@ set(FILES Editor/View/Windows/ScriptCanvasContextMenus.cpp Editor/View/Windows/ScriptCanvasContextMenus.h Editor/View/Windows/ScriptCanvasEditorResources.qrc - Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h + Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp + Editor/View/Windows/Tools/UpgradeTool/FileSaver.h + Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp + Editor/View/Windows/Tools/UpgradeTool/Modifier.h + Editor/View/Windows/Tools/UpgradeTool/Model.cpp + Editor/View/Windows/Tools/UpgradeTool/Model.h + Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h + Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp + Editor/View/Windows/Tools/UpgradeTool/Scanner.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui - Editor/View/Windows/Tools/UpgradeTool/Scanner.h - Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp - Editor/View/Windows/Tools/UpgradeTool/Modifier.h - Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp - Editor/View/Windows/Tools/UpgradeTool/FileSaver.h - Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.h - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp - Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.ui - Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h + Editor/View/Windows/Tools/UpgradeTool/View.cpp + Editor/View/Windows/Tools/UpgradeTool/View.h + Editor/View/Windows/Tools/UpgradeTool/View.ui + Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp + Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h + Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h Editor/Framework/ScriptCanvasGraphUtilities.inl Editor/Framework/ScriptCanvasGraphUtilities.h Editor/Framework/ScriptCanvasTraceUtilities.h From fd717048945744f7c1afcea6815336bbeba6ccda Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 20:27:01 -0700 Subject: [PATCH 008/226] rename view files --> controller Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/{View.cpp => Controller.cpp} | 0 .../View/Windows/Tools/UpgradeTool/{View.h => Controller.h} | 0 Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{View.cpp => Controller.cpp} (100%) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{View.h => Controller.h} (100%) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.cpp rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.h rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index eb914ae139..1ce2b0c502 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -270,8 +270,8 @@ set(FILES Editor/View/Windows/Tools/UpgradeTool/Scanner.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui - Editor/View/Windows/Tools/UpgradeTool/View.cpp - Editor/View/Windows/Tools/UpgradeTool/View.h + Editor/View/Windows/Tools/UpgradeTool/Controller.cpp + Editor/View/Windows/Tools/UpgradeTool/Controller.h Editor/View/Windows/Tools/UpgradeTool/View.ui Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp From cbaa2fcff554ca27fb07b9229b6ea06537166f3e Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 10 Sep 2021 21:03:14 -0700 Subject: [PATCH 009/226] rename view --> controller Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../View/Windows/Tools/UpgradeTool/{View.ui => Controller.ui} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{View.ui => Controller.ui} (100%) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui similarity index 100% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui From dbc1f3bb62ec246115f6f7f22c9f766da58d9897 Mon Sep 17 00:00:00 2001 From: Yuriy Toporovskyy Date: Mon, 13 Sep 2021 11:57:39 -0400 Subject: [PATCH 010/226] Don't const_cast, instead remove const qualifier from function Signed-off-by: Yuriy Toporovskyy --- .../SkinnedMesh/SkinnedMeshOutputStreamManagerInterface.h | 2 +- .../Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp | 7 +------ .../Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h | 3 +-- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshOutputStreamManagerInterface.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshOutputStreamManagerInterface.h index 3c3ddc7ddc..fea6d090f7 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshOutputStreamManagerInterface.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshOutputStreamManagerInterface.h @@ -51,7 +51,7 @@ namespace AZ } //! Returns the buffer asset that is used for all skinned mesh outputs - virtual Data::Asset GetBufferAsset() const = 0; + virtual Data::Asset GetBufferAsset() = 0; //! Returns the buffer that is used for all skinned mesh outputs virtual Data::Instance GetBuffer() = 0; diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp index ffbe850160..f3744fe119 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp @@ -87,11 +87,6 @@ namespace AZ { } - void SkinnedMeshOutputStreamManager::EnsureInit() const - { - const_cast(this)->EnsureInit(); - } - void SkinnedMeshOutputStreamManager::EnsureInit() { if (!m_needsInit) @@ -156,7 +151,7 @@ namespace AZ } } - Data::Asset SkinnedMeshOutputStreamManager::GetBufferAsset() const + Data::Asset SkinnedMeshOutputStreamManager::GetBufferAsset() { EnsureInit(); return m_bufferAsset; diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h index 6009a62362..d0d00ead18 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.h @@ -39,14 +39,13 @@ namespace AZ AZStd::intrusive_ptr Allocate(size_t byteCount) override; void DeAllocate(RHI::VirtualAddress allocation) override; void DeAllocateNoSignal(RHI::VirtualAddress allocation) override; - Data::Asset GetBufferAsset() const override; + Data::Asset GetBufferAsset() override; Data::Instance GetBuffer() override; private: // SystemTickBus void OnSystemTick() override; - void EnsureInit() const; void EnsureInit(); void GarbageCollect(); void CalculateAlignment(); From 1badb5a31f7b73b7b83247f6ba90c48949c088a6 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:30:31 -0700 Subject: [PATCH 011/226] scan refactor is in a working state Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../ScriptCanvas/Bus/EditorScriptCanvasBus.h | 3 +- .../Code/Editor/SystemComponent.cpp | 107 +---- .../Code/Editor/SystemComponent.h | 69 +-- .../Code/Editor/View/Windows/MainWindow.cpp | 10 +- .../Code/Editor/View/Windows/MainWindow.h | 2 +- .../Windows/Tools/UpgradeTool/Controller.cpp | 393 +++++++++--------- .../Windows/Tools/UpgradeTool/Controller.h | 45 +- .../Windows/Tools/UpgradeTool/Controller.ui | 4 +- .../View/Windows/Tools/UpgradeTool/Model.cpp | 44 ++ .../View/Windows/Tools/UpgradeTool/Model.h | 26 +- .../Windows/Tools/UpgradeTool/ModelTraits.h | 23 +- .../Windows/Tools/UpgradeTool/Scanner.cpp | 94 +++++ .../View/Windows/Tools/UpgradeTool/Scanner.h | 20 + .../Windows/Tools/UpgradeTool/ViewTraits.h | 10 +- 14 files changed, 477 insertions(+), 373 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h index 4497968ffc..09869ba2eb 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h @@ -221,8 +221,7 @@ namespace ScriptCanvasEditor AZ_TYPE_INFO(IUpgradeRequests, "{D25318F2-4DDA-4E76-98CB-6D561BB6234D}"); using AssetList = AZStd::list; - virtual AssetList& GetAssetsToUpgrade() = 0; - + virtual void ClearGraphsThatNeedUpgrade() = 0; virtual void GraphNeedsManualUpgrade(const AZ::Data::AssetId&) = 0; virtual const AZStd::vector& GetGraphsThatNeedManualUpgrade() const = 0; diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp index 4b60fd357c..f901915fdb 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp @@ -6,46 +6,35 @@ * */ - -#include -#include -#include #include +#include +#include +#include +#include #include - #include - +#include #include +#include #include - -#include - +#include +#include #include - -#include #include #include -#include - +#include +#include +#include +#include +#include #include +#include +#include #include #include #include #include -#include -#include - -#include - -#include -#include - #include -#include -#include - -#include -#include namespace ScriptCanvasEditor { @@ -54,6 +43,7 @@ namespace ScriptCanvasEditor SystemComponent::SystemComponent() { AzToolsFramework::AssetSeedManagerRequests::Bus::Handler::BusConnect(); + m_versionExplorer = AZStd::make_unique(); } SystemComponent::~SystemComponent() @@ -61,7 +51,6 @@ namespace ScriptCanvasEditor AzToolsFramework::UnregisterViewPane(LyViewPane::ScriptCanvas); AzToolsFramework::EditorContextMenuBus::Handler::BusDisconnect(); AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); - AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); AzToolsFramework::AssetSeedManagerRequests::Bus::Handler::BusDisconnect(); } @@ -141,17 +130,12 @@ namespace ScriptCanvasEditor { if (userSettings->m_showUpgradeDialog) { - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); } else { m_upgradeDisabled = true; } } - else - { - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - } } void SystemComponent::NotifyRegisterViews() @@ -172,7 +156,6 @@ namespace ScriptCanvasEditor AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); ScriptCanvasExecutionBus::Handler::BusDisconnect(); SystemRequestBus::Handler::BusDisconnect(); - AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); m_jobContext.reset(); m_jobManager.reset(); @@ -397,64 +380,6 @@ namespace ScriptCanvasEditor return reporter; } - void SystemComponent::OnCatalogLoaded(const char* /*catalogFile*/) - { - // Enumerate all ScriptCanvas assets - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets, - nullptr, - [this](const AZ::Data::AssetId, const AZ::Data::AssetInfo& assetInfo) { - - if (assetInfo.m_assetType == azrtti_typeid()) - { - AddAssetToUpgrade(assetInfo); - } - }, - nullptr - ); - } - - void SystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) - { - if (IsUpgrading()) - { - return; - } - - auto assetInfo = ScriptCanvasEditor::AssetHelpers::GetAssetInfo(assetId); - AddAssetToUpgrade(assetInfo); - } - - void SystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& /*assetInfo*/) - { - if (IsUpgrading()) - { - return; - } - - AZStd::erase_if(m_assetsToConvert, [assetId](const AZ::Data::AssetInfo& assetToConvert) - { - return assetToConvert.m_assetId == assetId; - } - ); - } - - void SystemComponent::AddAssetToUpgrade(const AZ::Data::AssetInfo& assetInfo) - { - auto query = AZStd::find_if(m_assetsToConvert.begin(), m_assetsToConvert.end(), [assetInfo](const AZ::Data::AssetInfo& assetToConvert) - { - return assetToConvert.m_assetId == assetInfo.m_assetId; - } - ); - - if (query == m_assetsToConvert.end()) - { - if (assetInfo.m_assetType == azrtti_typeid()) - { - m_assetsToConvert.push_back(assetInfo); - } - } - } - AzToolsFramework::AssetSeedManagerRequests::AssetTypePairs SystemComponent::GetAssetTypeMapping() { return { diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h index ba850401d6..37d5962271 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h @@ -9,23 +9,20 @@ #pragma once -#include -#include -#include - #include -#include +#include +#include #include - +#include #include +#include #include #include +#include #include - -#include - -#include -#include +#include +#include +#include namespace ScriptCanvasEditor { @@ -36,9 +33,7 @@ namespace ScriptCanvasEditor , private AzToolsFramework::AssetBrowser::AssetBrowserInteractionNotificationBus::Handler , private ScriptCanvasExecutionBus::Handler , private AZ::UserSettingsNotificationBus::Handler - , private AzFramework::AssetCatalogEventBus::Handler , private AZ::Data::AssetBus::MultiHandler - , private AZ::Interface::Registrar , private AzToolsFramework::AssetSeedManagerRequests::Bus::Handler , private AzToolsFramework::EditorContextMenuBus::Handler { @@ -96,74 +91,30 @@ namespace ScriptCanvasEditor void OnUserSettingsActivated() override; //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// - // AzFramework::AssetCatalogEventBus::Handler... - void OnCatalogLoaded(const char* /*catalogFile*/) override; - void OnCatalogAssetAdded(const AZ::Data::AssetId& /*assetId*/) override; - void OnCatalogAssetRemoved(const AZ::Data::AssetId& /*assetId*/, const AZ::Data::AssetInfo& /*assetInfo*/) override; - //////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////// // AssetSeedManagerRequests::Bus::Handler... AzToolsFramework::AssetSeedManagerRequests::AssetTypePairs GetAssetTypeMapping() override; //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// - // IUpgradeRequests... - void ClearGraphsThatNeedUpgrade() - { - m_assetsThatNeedManualUpgrade.clear(); - } - - IUpgradeRequests::AssetList& GetAssetsToUpgrade() override - { - return m_assetsToConvert; - } - - void GraphNeedsManualUpgrade(const AZ::Data::AssetId& assetId) override - { - if (AZStd::find(m_assetsThatNeedManualUpgrade.begin(), m_assetsThatNeedManualUpgrade.end(), assetId) == m_assetsThatNeedManualUpgrade.end()) - { - m_assetsThatNeedManualUpgrade.push_back(assetId); - } - } - - const AZStd::vector& GetGraphsThatNeedManualUpgrade() const override - { - return m_assetsThatNeedManualUpgrade; - } - - bool IsUpgrading() override - { - return m_isUpgrading; - } - - void SetIsUpgrading(bool isUpgrading) override - { - m_isUpgrading = isUpgrading; - } - - //////////////////////////////////////////////////////////////////////// private: SystemComponent(const SystemComponent&) = delete; void FilterForScriptCanvasEnabledEntities(AzToolsFramework::EntityIdList& sourceList, AzToolsFramework::EntityIdList& targetList); void PopulateEditorCreatableTypes(); - void AddAssetToUpgrade(const AZ::Data::AssetInfo& assetInfo); - + AZStd::unique_ptr m_jobManager; AZStd::unique_ptr m_jobContext; + AZStd::unique_ptr m_versionExplorer; AZStd::unordered_set m_creatableTypes; AssetTracker m_assetTracker; - IUpgradeRequests::AssetList m_assetsToConvert; AZStd::vector m_assetsThatNeedManualUpgrade; bool m_isUpgrading = false; bool m_upgradeDisabled = false; - }; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 33a58c18a7..6c10726e13 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -134,7 +134,6 @@ #include #include #include -#include #include @@ -3436,9 +3435,14 @@ namespace ScriptCanvasEditor void MainWindow::RunUpgradeTool() { - auto versionExplorer = aznew VersionExplorer::View(this); + // \todo, restore this behavior, post modification step + + /* + auto versionExplorer = aznew VersionExplorer::Controller(this); versionExplorer->exec(); + + // Manual correction size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); @@ -3448,6 +3452,8 @@ namespace ScriptCanvasEditor UpgradeHelper* upgradeHelper = new UpgradeHelper(this); upgradeHelper->show(); } + */ + } void MainWindow::OnShowValidationErrors() diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index 54557c3691..1eeb2dadfb 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -51,7 +51,7 @@ #include -#include +#include #if SCRIPTCANVAS_EDITOR #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index bf407765e1..4b2d3d37b9 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -28,12 +28,14 @@ #include #include #include -#include -#include +#include #include #include #include +#include +#include + namespace ScriptCanvasEditor { namespace VersionExplorer @@ -60,33 +62,32 @@ namespace ScriptCanvasEditor } } - View::View(QWidget* parent) + Controller::Controller(QWidget* parent) : AzQtComponents::StyledDialog(parent) - , m_ui(new Ui::View()) + , m_view(new Ui::Controller()) { - m_ui->setupUi(this); - m_ui->tableWidget->horizontalHeader()->setVisible(false); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); - m_ui->tableWidget->setColumnWidth(3, 22); - m_ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); - m_ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - connect(m_ui->scanButton, &QPushButton::pressed, this, &View::OnScanButtonPress); - connect(m_ui->closeButton, &QPushButton::pressed, this, &View::OnCloseButtonPress); - connect(m_ui->upgradeAllButton, &QPushButton::pressed, this, &View::OnUpgradeAllButtonPress); - m_ui->progressBar->setValue(0); - m_ui->progressBar->setVisible(false); - - ViewRequestsBus::Handler::BusConnect(); + m_view->setupUi(this); + m_view->tableWidget->horizontalHeader()->setVisible(false); + m_view->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + m_view->tableWidget->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed); + m_view->tableWidget->setColumnWidth(3, 22); + m_view->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); + m_view->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); + connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnScanButtonPress); + connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnCloseButtonPress); + connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnUpgradeAllButtonPress); + m_view->progressBar->setValue(0); + m_view->progressBar->setVisible(false); + ModelNotificationsBus::Handler::BusConnect(); // move to model, maybe m_keepEditorAlive = AZStd::make_unique(); } - void View::Log(const char* /*format*/, ...) + void Controller::Log(const char* /*format*/, ...) { -// if (m_ui->verbose->isChecked()) +// if (m_view->verbose->isChecked()) // { // char sBuffer[2048]; // va_list ArgList; @@ -99,12 +100,12 @@ namespace ScriptCanvasEditor // } } - void View::OnCloseButtonPress() + void Controller::OnCloseButtonPress() { reject(); } - void View::OnSystemTick() + void Controller::OnSystemTick() { // switch (m_state) // { @@ -125,10 +126,10 @@ namespace ScriptCanvasEditor // } // else // { -// m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); +// m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); // QTableWidgetItem* rowName = new QTableWidgetItem // (tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); -// m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); +// m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); // ++m_currentAssetRowIndex; // // Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); @@ -145,8 +146,8 @@ namespace ScriptCanvasEditor // { // ++m_upgradeAssetIndex; // m_inProgress = false; -// m_ui->progressBar->setVisible(true); -// m_ui->progressBar->setValue(m_upgradeAssetIndex); +// m_view->progressBar->setVisible(true); +// m_view->progressBar->setValue(m_upgradeAssetIndex); // // if (m_scriptCanvasEntity) // { @@ -182,7 +183,7 @@ namespace ScriptCanvasEditor // // if (m_assetsToUpgrade.empty()) // { -// m_ui->upgradeAllButton->setEnabled(false); +// m_view->upgradeAllButton->setEnabled(false); // } // // m_upgradeComplete = false; @@ -195,13 +196,13 @@ namespace ScriptCanvasEditor // if (errorMessage.empty()) // { // Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); -// QList items = m_ui->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); +// QList items = m_view->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); // if (!items.isEmpty()) // { // for (auto* item : items) // { // int row = item->row(); -// AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnStatus)); +// AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnStatus)); // spinner->SetIsBusy(true); // } // } @@ -230,7 +231,7 @@ namespace ScriptCanvasEditor // Backup - void View::OnUpgradeAllButtonPress() + void Controller::OnUpgradeAllButtonPress() { m_state = ProcessState::Upgrade; //m_settingsCache = AZStd::make_unique(); @@ -241,15 +242,15 @@ namespace ScriptCanvasEditor AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); m_inProgressAsset = m_assetsToUpgrade.begin(); AZ::SystemTickBus::Handler::BusConnect(); - m_ui->progressBar->setVisible(true); - m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_ui->progressBar->setValue(m_upgradeAssetIndex); + m_view->progressBar->setVisible(true); + m_view->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); + m_view->progressBar->setValue(m_upgradeAssetIndex); m_keepEditorAlive = AZStd::make_unique(); } - AZStd::string View::BackupGraph(const AZ::Data::Asset& asset) + AZStd::string Controller::BackupGraph(const AZ::Data::Asset& asset) { - if (!m_ui->makeBackupCheckbox->isChecked()) + if (!m_view->makeBackupCheckbox->isChecked()) { // considered a success return ""; @@ -303,7 +304,7 @@ namespace ScriptCanvasEditor } else { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "View::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Controller::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); return "Failed to find source file"; } @@ -325,20 +326,20 @@ namespace ScriptCanvasEditor if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "View::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Controller::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); return "Failed to copy source file to backup location"; } - Log("View::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); + Log("Controller::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); return ""; } - void View::UpgradeGraph(const AZ::Data::Asset& asset) + void Controller::UpgradeGraph(const AZ::Data::Asset& asset) { m_inProgress = true; m_upgradeComplete = false; Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_ui->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); + m_view->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); m_scriptCanvasEntity = nullptr; UpgradeNotifications::Bus::Handler::BusConnect(); @@ -355,7 +356,7 @@ namespace ScriptCanvasEditor } AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); + AZ_Assert(scriptCanvasEntity, "Controller::UpgradeGraph The Script Canvas asset must have a valid entity"); if (!scriptCanvasEntity) { return; @@ -393,15 +394,15 @@ namespace ScriptCanvasEditor graphComponent->UpgradeGraph (asset - , m_ui->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_ui->verbose->isChecked()); + , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_view->verbose->isChecked()); } } AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); } - void View::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) + void Controller::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) { AZStd::string relativePath, fullPath; AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); @@ -421,7 +422,7 @@ namespace ScriptCanvasEditor streamer->QueueRequest(flushRequest); } - void View::OnSourceFileReleased(AZ::Data::Asset asset) + void Controller::OnSourceFileReleased(AZ::Data::Asset asset) { AZStd::string relativePath, fullPath; AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); @@ -502,7 +503,7 @@ namespace ScriptCanvasEditor }); } - void View::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target + void Controller::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target , size_t remainingAttempts) { // ViewCpp::FileEventHandler fileEventHandler; @@ -559,7 +560,7 @@ namespace ScriptCanvasEditor } } - void View::GraphUpgradeComplete + void Controller::GraphUpgradeComplete (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) { AZStd::lock_guard lock(m_mutex); @@ -587,24 +588,24 @@ namespace ScriptCanvasEditor m_tmpFileName.clear(); } - void View::GraphUpgradeCompleteUIUpdate + void Controller::GraphUpgradeCompleteUIUpdate (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) { QString text = asset.GetHint().c_str(); - QList items = m_ui->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); + QList items = m_view->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); if (!items.isEmpty()) { for (auto* item : items) { int row = item->row(); - QTableWidgetItem* label = m_ui->tableWidget->item(row, ColumnAsset); + QTableWidgetItem* label = m_view->tableWidget->item(row, ColumnAsset); QString assetName = asset.GetHint().c_str(); if (label->text().compare(assetName) == 0) { - m_ui->tableWidget->removeCellWidget(row, ColumnAction); - m_ui->tableWidget->removeCellWidget(row, ColumnStatus); + m_view->tableWidget->removeCellWidget(row, ColumnAction); + m_view->tableWidget->removeCellWidget(row, ColumnStatus); QToolButton* doneButton = new QToolButton(this); doneButton->setToolTip("Upgrade complete"); @@ -618,31 +619,31 @@ namespace ScriptCanvasEditor doneButton->setToolTip(message.data()); } - m_ui->tableWidget->setCellWidget(row, ColumnStatus, doneButton); + m_view->tableWidget->setCellWidget(row, ColumnStatus, doneButton); } } } } - void View::FinalizeUpgrade() + void Controller::FinalizeUpgrade() { Log("FinalizeUpgrade!"); m_inProgress = false; m_assetsToUpgrade.clear(); - m_ui->upgradeAllButton->setEnabled(false); - m_ui->onlyShowOutdated->setEnabled(true); + m_view->upgradeAllButton->setEnabled(false); + m_view->onlyShowOutdated->setEnabled(true); m_keepEditorAlive.reset(); - m_ui->progressBar->setVisible(false); + m_view->progressBar->setVisible(false); // Manual correction size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); if (assetsThatNeedManualInspection > 0) { - m_ui->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); + m_view->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); } else { - m_ui->spinner->SetText("Upgrade complete."); + m_view->spinner->SetText("Upgrade complete."); } AZ::SystemTickBus::Handler::BusDisconnect(); @@ -650,126 +651,120 @@ namespace ScriptCanvasEditor //m_settingsCache.reset(); } - // Scanning - - void View::OnScanButtonPress() + void Controller::OnScanButtonPress() { - ViewNotificationsBus::Broadcast(&ViewNotificationsTraits::ScanRequested); - -// m_assetsToUpgrade.clear(); -// m_assetsToInspect.clear(); -// m_ui->tableWidget->setRowCount(0); -// m_inspectedAssets = 0; -// m_currentAssetRowIndex = 0; -// IUpgradeRequests* upgradeRequests = AZ::Interface::Get(); -// m_assetsToInspect = upgradeRequests->GetAssetsToUpgrade(); -// DoScan(); - } + auto isUpToDate = [this](AZ::Data::Asset asset) + { + Log("InspectAsset: %s", asset.GetHint().c_str()); + AZ::Entity* scriptCanvasEntity = nullptr; - void View::DoScan() - { -// m_state = ProcessState::Scan; -// m_settingsCache = AZStd::make_unique(); -// ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; -// ScriptCanvas::Grammar::g_printAbstractCodeModel = false; -// ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; -// -// AZ::SystemTickBus::Handler::BusConnect(); -// -// if (!m_assetsToInspect.empty()) -// { -// m_discoveredAssets = m_assetsToInspect.size(); -// m_failedAssets = 0; -// m_inspectedAssets = 0; -// m_currentAssetRowIndex = 0; -// m_ui->progressFrame->setVisible(true); -// m_ui->progressBar->setVisible(true); -// m_ui->progressBar->setRange(0, aznumeric_cast(m_assetsToInspect.size())); -// m_ui->progressBar->setValue(0); -// -// m_ui->spinner->SetIsBusy(true); -// m_ui->spinner->SetBusyIconSize(32); -// -// m_ui->scanButton->setEnabled(false); -// m_ui->upgradeAllButton->setEnabled(false); -// m_ui->onlyShowOutdated->setEnabled(false); -// -// m_inspectingAsset = m_assetsToInspect.begin(); -// m_keepEditorAlive = AZStd::make_unique(); -// } + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + if (!scriptCanvasAsset) + { + Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + return true; + } + + scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); + } + + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + return !m_view->forceUpgrade->isChecked() && graphComponent->GetVersion().IsLatest(); + }; + + ScanConfiguration config; + config.reportFilteredGraphs = !m_view->onlyShowOutdated->isChecked(); + config.filter = isUpToDate; + + ModelRequestsBus::Broadcast(&ModelRequestsTraits::Scan, config); } - void View::BackupComplete() + void Controller::OnScanBegin(size_t assetCount) { m_currentAssetRowIndex = 0; - m_ui->progressBar->setValue(0); - DoScan(); + m_view->tableWidget->setRowCount(0); + m_view->progressBar->setVisible(true); + m_view->progressBar->setRange(0, aznumeric_cast(assetCount)); + m_view->progressBar->setValue(0); + m_view->scanButton->setEnabled(false); + m_view->upgradeAllButton->setEnabled(false); + m_view->onlyShowOutdated->setEnabled(false); } - void View::InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo) + void Controller::OnScanComplete(const ScanResult& result) { - Log("InspectAsset: %s", asset.GetHint().c_str()); - AZ::Entity* scriptCanvasEntity = nullptr; - if (asset.GetType() == azrtti_typeid()) + Log("Full Scan Complete."); + + m_view->onlyShowOutdated->setEnabled(true); + + // Enable all the Upgrade buttons + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - if (!scriptCanvasAsset) + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); - return; + button->setEnabled(true); } - - scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity"); } - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - bool onlyShowOutdatedGraphs = m_ui->onlyShowOutdated->isChecked(); - bool forceUpgrade = m_ui->forceUpgrade->isChecked(); - ScriptCanvas::VersionData graphVersion = graphComponent->GetVersion(); + QString spinnerText = QStringLiteral("Scan Complete"); + spinnerText.append(QString::asprintf(" - Discovered: %zu, Failed: %zu, Upgradeable: %zu, Up-to-date: %zu" + , result.m_catalogAssets.size() + , result.m_loadErrors.size() + , result.m_unfiltered.size() + , result.m_filteredAssets.size())); + m_view->spinner->SetText(spinnerText); + m_view->progressBar->setVisible(false); - if (!forceUpgrade && onlyShowOutdatedGraphs && graphVersion.IsLatest()) + if (!result.m_unfiltered.empty()) { - ScanComplete(asset); - Log("InspectAsset: %s, is at latest", asset.GetHint().c_str()); - return; + m_view->upgradeAllButton->setEnabled(true); } - m_ui->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(asset.GetHint().c_str())); - m_ui->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + m_keepEditorAlive.reset(); + } - if (forceUpgrade || !graphComponent->GetVersion().IsLatest()) - { - m_assetsToUpgrade.push_back(asset); + void Controller::OnScanFilteredGraph(const AZ::Data::AssetInfo& info) + { + OnScannedGraph(info, Filtered::Yes); + } - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); + void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, Filtered filtered) + { + m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + if (filtered == Filtered::No) + { QPushButton* rowGoToButton = new QPushButton(this); rowGoToButton->setText("Upgrade"); rowGoToButton->setEnabled(false); + AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); + spinner->SetBusyIconSize(16); +// +// connect(rowGoToButton, &QPushButton::clicked, [this, rowGoToButton, assetInfo] { +// +// // request upgrade of a single graph +// // AZ::SystemTickBus::QueueFunction([this, rowGoToButton, assetInfo]() { +// // // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda +// // UpgradeSingle(rowGoToButton, spinner, assetInfo); +// // }); +// // +// // AZ::SystemTickBus::ExecuteQueuedEvents(); +// +// }); - connect(rowGoToButton, &QPushButton::clicked, [this, spinner, rowGoToButton, assetInfo] { - - AZ::SystemTickBus::QueueFunction([this, rowGoToButton, spinner, assetInfo]() { - // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda - UpgradeSingle(rowGoToButton, spinner, assetInfo); - }); - - AZ::SystemTickBus::ExecuteQueuedEvents(); - - }); - - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); + m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); } char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); AZ::StringFunc::Path::Normalize(path); @@ -777,10 +772,17 @@ namespace ScriptCanvasEditor bool result = false; AZ::Data::AssetInfo info; AZStd::string watchFolder; - QByteArray assetNameUtf8 = asset.GetHint().c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetNameUtf8, info, watchFolder); - - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), result, "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + ( result + , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath + , assetNameUtf8 + , info + , watchFolder); + AZ_Error + ( ScriptCanvas::k_VersionExplorerWindow.data() + , result + , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); QToolButton* browseButton = new QToolButton(this); browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); @@ -791,14 +793,40 @@ namespace ScriptCanvasEditor AzQtComponents::ShowFileOnDesktop(absolutePath); }); - m_ui->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); - ScanComplete(asset); - ++m_inspectedAssets; + m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + OnScannedGraphResult(assetInfo); + } + + void Controller::OnScannedGraphResult(const AZ::Data::AssetInfo& info) + { + m_view->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); ++m_currentAssetRowIndex; + Log("ScanComplete: %s", info.m_relativePath.c_str()); + FlushLogs(); + } + + void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) + { + m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + QTableWidgetItem* rowName = new QTableWidgetItem + (tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); + m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + OnScannedGraphResult(info); + } + + void Controller::OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) + { + OnScannedGraph(info, Filtered::No); } - void View::UpgradeSingle - (QPushButton* rowGoToButton + void Controller::BackupComplete() + { + m_currentAssetRowIndex = 0; + m_view->progressBar->setValue(0); + } + + void Controller::UpgradeSingle + ( QPushButton* rowGoToButton , AzQtComponents::StyledBusyLabel* spinner , AZ::Data::AssetInfo assetInfo) { @@ -814,7 +842,7 @@ namespace ScriptCanvasEditor AZ::Interface::Get()->SetIsUpgrading(true); m_isUpgradingSingleGraph = true; m_logs.clear(); - m_ui->textEdit->clear(); + m_view->textEdit->clear(); spinner->SetIsBusy(true); rowGoToButton->setEnabled(false); @@ -830,38 +858,37 @@ namespace ScriptCanvasEditor } } - void View::ScanComplete(const AZ::Data::Asset& asset) + void Controller::ScanComplete(const AZ::Data::Asset& asset) { Log("ScanComplete: %s", asset.GetHint().c_str()); m_inProgress = false; - m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_ui->scanButton->setEnabled(true); + m_view->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); + m_view->scanButton->setEnabled(true); m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - FlushLogs(); - + if (m_inspectingAsset == m_assetsToInspect.end()) { AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); if (!m_assetsToUpgrade.empty()) { - m_ui->upgradeAllButton->setEnabled(true); + m_view->upgradeAllButton->setEnabled(true); } } } - void View::FinalizeScan() + void Controller::FinalizeScan() { Log("FinalizeScan()"); - m_ui->spinner->SetIsBusy(false); - m_ui->onlyShowOutdated->setEnabled(true); + m_view->spinner->SetIsBusy(false); + m_view->onlyShowOutdated->setEnabled(true); // Enable all the Upgrade buttons - for (int row = 0; row < m_ui->tableWidget->rowCount(); ++row) + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) { - QPushButton* button = qobject_cast(m_ui->tableWidget->cellWidget(row, ColumnAction)); + QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction)); if (button) { button->setEnabled(true); @@ -880,12 +907,12 @@ namespace ScriptCanvasEditor } - m_ui->spinner->SetText(spinnerText); - m_ui->progressBar->setVisible(false); + m_view->spinner->SetText(spinnerText); + m_view->progressBar->setVisible(false); if (!m_assetsToUpgrade.empty()) { - m_ui->upgradeAllButton->setEnabled(true); + m_view->upgradeAllButton->setEnabled(true); } AZ::SystemTickBus::Handler::BusDisconnect(); @@ -895,18 +922,18 @@ namespace ScriptCanvasEditor m_state = ProcessState::Inactive; } - void View::FlushLogs() + void Controller::FlushLogs() { if (m_logs.empty()) { return; } - const QTextCursor oldCursor = m_ui->textEdit->textCursor(); - QScrollBar* scrollBar = m_ui->textEdit->verticalScrollBar(); + const QTextCursor oldCursor = m_view->textEdit->textCursor(); + QScrollBar* scrollBar = m_view->textEdit->verticalScrollBar(); - m_ui->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_ui->textEdit->textCursor(); + m_view->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_view->textEdit->textCursor(); while (!m_logs.empty()) { @@ -918,19 +945,15 @@ namespace ScriptCanvasEditor } scrollBar->setValue(scrollBar->maximum()); - m_ui->textEdit->moveCursor(QTextCursor::StartOfLine); + m_view->textEdit->moveCursor(QTextCursor::StartOfLine); } - - void View::closeEvent(QCloseEvent* event) + void Controller::closeEvent(QCloseEvent* event) { m_keepEditorAlive.reset(); AzQtComponents::StyledDialog::closeEvent(event); } } - -#include - } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 905074d17e..85459b4d46 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -9,27 +9,26 @@ #pragma once #if !defined(Q_MOC_RUN) -#include -AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING #include #include +#include #include +#include +#include #include #include #include #include +AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING #endif -#include -#include - class QPushButton; namespace Ui { - class View; + class Controller; } namespace AzQtComponents @@ -56,29 +55,41 @@ namespace ScriptCanvasEditor //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog //! Handles display change notifications, handles state change notifications, sends control requests - class View + class Controller : public AzQtComponents::StyledDialog , private AZ::SystemTickBus::Handler , private UpgradeNotifications::Bus::Handler - , private ViewRequestsBus::Handler , private ModelNotificationsBus::Handler { Q_OBJECT public: - AZ_CLASS_ALLOCATOR(View, AZ::SystemAllocator, 0); + AZ_CLASS_ALLOCATOR(Controller, AZ::SystemAllocator, 0); - explicit View(QWidget* parent = nullptr); + explicit Controller(QWidget* parent = nullptr); private: - static constexpr int ColumnAsset = 0; static constexpr int ColumnAction = 1; static constexpr int ColumnBrowse = 2; static constexpr int ColumnStatus = 3; void OnCloseButtonPress(); + void OnScanBegin(size_t assetCount) override; void OnScanButtonPress(); + void OnScanComplete(const ScanResult& result) override; + void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) override; + void OnScanLoadFailure(const AZ::Data::AssetInfo& info) override; + void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) override; + enum Filtered + { + No, + Yes + }; + void OnScannedGraph(const AZ::Data::AssetInfo& info, Filtered filtered); + void OnScannedGraphResult(const AZ::Data::AssetInfo& info); + + void OnUpgradeAllButtonPress(); enum class ProcessState @@ -90,11 +101,8 @@ namespace ScriptCanvasEditor }; ProcessState m_state = ProcessState::Inactive; - void DoScan(); void ScanComplete(const AZ::Data::Asset&); - void InspectAsset(AZ::Data::Asset& asset, AZ::Data::AssetInfo& assetInfo); - // SystemTickBus::Handler void OnSystemTick() override; @@ -123,9 +131,8 @@ namespace ScriptCanvasEditor AZ::Data::Asset m_currentAsset; - AZStd::unique_ptr m_ui; - - + AZStd::unique_ptr m_view; + // upgrade fields AZStd::recursive_mutex m_mutex; bool m_upgradeComplete = false; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui index f549c821d6..fdeb701f33 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui @@ -1,7 +1,7 @@ - View - + Controller + Qt::WindowModal diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index 710d6863f5..8d5aa62674 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -6,7 +6,10 @@ * */ +#include #include +#include +#include namespace ModifierCpp { @@ -17,9 +20,50 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + Model::Model() + { + ModelRequestsBus::Handler::BusConnect(); + } + + void Model::CacheSettings() + { + m_settingsCache = AZStd::make_unique(); + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + ScriptCanvas::Grammar::g_printAbstractCodeModel = false; + ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; + } + const AZStd::vector* Model::GetLogs() { return &m_log.GetEntries(); } + + bool Model::IsWorking() const + { + return m_state != State::Idle; + } + + void Model::OnScanComplete() + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanComplete, m_scanner->GetResult()); + m_state = State::Idle; + } + + void Model::Scan(const ScanConfiguration& config) + { + if (IsWorking()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Explorer is already working"); + return; + } + + m_state = State::Scanning; + m_scanner = AZStd::make_unique(config, [this](){ OnScanComplete(); }); + } + + void Model::RestoreSettings() + { + m_settingsCache.reset(); + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index 44da70e85c..407074fa94 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -7,9 +7,13 @@ */ #pragma once -#include + +#include #include +#include +#include #include +#include namespace ScriptCanvasEditor { @@ -22,12 +26,30 @@ namespace ScriptCanvasEditor public: AZ_CLASS_ALLOCATOR(Model, AZ::SystemAllocator, 0); + Model(); + const AZStd::vector* GetLogs(); + void Scan(const ScanConfiguration& config) override; private: - Log m_log; + enum class State + { + Idle, + Scanning, + Modifying, + }; + State m_state = State::Idle; + Log m_log; + + AZStd::unique_ptr m_modifier; + AZStd::unique_ptr m_scanner; AZStd::unique_ptr m_settingsCache; + + void CacheSettings(); + bool IsWorking() const; + void OnScanComplete(); + void RestoreSettings(); }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index e66cdac13e..11a956c555 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -8,23 +8,44 @@ #pragma once #include +#include namespace ScriptCanvasEditor { namespace VersionExplorer { + struct ScanConfiguration + { + AZStd::function)> filter; + bool reportFilteredGraphs = false; + }; + class ModelRequestsTraits : public AZ::EBusTraits { public: - virtual const AZStd::vector* GetLogs(); + virtual const AZStd::vector* GetLogs() = 0; + virtual void Scan(const ScanConfiguration& filter) = 0; }; using ModelRequestsBus = AZ::EBus; + struct ScanResult + { + AZStd::vector m_catalogAssets; + AZStd::vector m_unfiltered; + AZStd::vector m_filteredAssets; + AZStd::vector m_loadErrors; + }; + class ModelNotificationsTraits : public AZ::EBusTraits { public: + virtual void OnScanBegin(size_t assetCount) = 0; + virtual void OnScanComplete(const ScanResult& result) = 0; + virtual void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) = 0; + virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0; + virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; }; using ModelNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp index f74c27004b..09574883b6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace ScannerCpp { @@ -17,6 +18,99 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + Scanner::Scanner(const ScanConfiguration& config, AZStd::function onComplete) + : m_config(config) + , m_onComplete(onComplete) + { + AZ::Data::AssetCatalogRequestBus::Broadcast + ( &AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets + , nullptr + , [this](const AZ::Data::AssetId, const AZ::Data::AssetInfo& assetInfo) + { + if (assetInfo.m_assetType == azrtti_typeid()) + { + m_result.m_catalogAssets.push_back(assetInfo); + } + } + , nullptr); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanBegin, m_result.m_catalogAssets.size()); + AZ::SystemTickBus::Handler::BusConnect(); + } + + void Scanner::FilterAsset(AZ::Data::Asset asset) + { + if (m_config.filter && m_config.filter(asset)) + { + m_result.m_filteredAssets.push_back(GetCurrentAsset()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanFilteredGraph, GetCurrentAsset()); + } + else + { + m_result.m_unfiltered.push_back(GetCurrentAsset()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanUnFilteredGraph, GetCurrentAsset()); + } + } + + const AZ::Data::AssetInfo& Scanner::GetCurrentAsset() const + { + return m_result.m_catalogAssets[m_catalogAssetIndex]; + } + + const ScanResult& Scanner::GetResult() const + { + return m_result; + } + + AZ::Data::Asset Scanner::LoadAsset() + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + ( GetCurrentAsset().m_assetId + , azrtti_typeid() + , AZ::Data::AssetLoadBehavior::PreLoad); + + // Log("Scan: Loading: %s ", m_catalogAssets[m_catalogAssetIndex].GetHint().c_str()); + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + return asset; + } + else + { + return {}; + } + } + + void Scanner::OnSystemTick() + { + if (m_catalogAssetIndex == m_result.m_catalogAssets.size()) + { + AZ::SystemTickBus::Handler::BusConnect(); + if (m_onComplete) + { + m_onComplete(); + } + } + else + { + if (auto asset = LoadAsset()) + { + FilterAsset(asset); + } + else + { + m_result.m_loadErrors.push_back(GetCurrentAsset()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanLoadFailure, GetCurrentAsset()); + } + + ++m_catalogAssetIndex; + } + } + + ScanResult&& Scanner::TakeResult() + { + return AZStd::move(m_result); + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h index 19642a07f1..8b4dd69c82 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h @@ -9,15 +9,35 @@ #pragma once #include +#include +#include namespace ScriptCanvasEditor { namespace VersionExplorer { class Scanner + : private AZ::SystemTickBus::Handler { public: AZ_CLASS_ALLOCATOR(Scanner, AZ::SystemAllocator, 0); + + Scanner(const ScanConfiguration& config, AZStd::function onComplete); + + const ScanResult& GetResult() const; + + ScanResult&& TakeResult(); + + private: + size_t m_catalogAssetIndex = 0; + AZStd::function m_onComplete; + ScanConfiguration m_config; + ScanResult m_result; + + void FilterAsset(AZ::Data::Asset); + const AZ::Data::AssetInfo& GetCurrentAsset() const; + AZ::Data::Asset LoadAsset(); + void OnSystemTick() override; }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h index 7f36e8503d..cf49072230 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h @@ -13,14 +13,6 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { - class ViewRequestsTraits : public AZ::EBusTraits - { - public: - // flush logs, or add log text - // set progress update - virtual void ClearProgress() {} - virtual void SetInProgress() {} - }; - using ViewRequestsBus = AZ::EBus; + } } From cb12d318217e2616dc97d3e66f62af6221b75ac8 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:01:49 -0700 Subject: [PATCH 012/226] Modifier step WIP Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Controller.cpp | 790 ++---------------- .../Windows/Tools/UpgradeTool/Controller.h | 119 +-- .../Windows/Tools/UpgradeTool/LogTraits.h | 32 + .../View/Windows/Tools/UpgradeTool/Model.cpp | 77 +- .../View/Windows/Tools/UpgradeTool/Model.h | 22 +- .../Windows/Tools/UpgradeTool/ModelTraits.h | 18 +- .../Windows/Tools/UpgradeTool/Modifier.cpp | 13 + .../View/Windows/Tools/UpgradeTool/Modifier.h | 16 + .../Windows/Tools/UpgradeTool/Scanner.cpp | 16 +- .../Tools/UpgradeTool/VersionExplorerLog.cpp | 32 +- .../Tools/UpgradeTool/VersionExplorerLog.h | 13 +- .../Windows/Tools/UpgradeTool/ViewTraits.h | 18 - .../Code/scriptcanvasgem_editor_files.cmake | 14 +- 13 files changed, 317 insertions(+), 863 deletions(-) create mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 4b2d3d37b9..44d6f2e738 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -40,28 +41,6 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { - EditorKeepAlive::EditorKeepAlive() - { - ISystem* system = nullptr; - CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); - - m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); - - if (m_edKeepEditorActive) - { - m_keepEditorActive = m_edKeepEditorActive->GetIVal(); - m_edKeepEditorActive->Set(1); - } - } - - EditorKeepAlive::~EditorKeepAlive() - { - if (m_edKeepEditorActive) - { - m_edKeepEditorActive->Set(m_keepEditorActive); - } - } - Controller::Controller(QWidget* parent) : AzQtComponents::StyledDialog(parent) , m_view(new Ui::Controller()) @@ -80,582 +59,43 @@ namespace ScriptCanvasEditor m_view->progressBar->setVisible(false); ModelNotificationsBus::Handler::BusConnect(); - - // move to model, maybe - m_keepEditorAlive = AZStd::make_unique(); - } - - void Controller::Log(const char* /*format*/, ...) - { -// if (m_view->verbose->isChecked()) -// { -// char sBuffer[2048]; -// va_list ArgList; -// va_start(ArgList, format); -// azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); -// sBuffer[sizeof(sBuffer) - 1] = '\0'; -// va_end(ArgList); -// -// AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); -// } - } - - void Controller::OnCloseButtonPress() - { - reject(); - } - - void Controller::OnSystemTick() - { -// switch (m_state) -// { -// case ProcessState::Scan: -// -// if (!m_inProgress && m_inspectingAsset != m_assetsToInspect.end()) -// { -// m_inProgress = true; -// AZ::Data::AssetInfo& assetToUpgrade = *m_inspectingAsset; -// m_currentAsset = AZ::Data::AssetManager::Instance().GetAsset(assetToUpgrade.m_assetId, assetToUpgrade.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); -// Log("SystemTick::ProcessState::Scan: %s pre-blocking load hint", m_currentAsset.GetHint().c_str()); -// m_currentAsset.BlockUntilLoadComplete(); -// if (m_currentAsset.IsReady()) -// { -// // The asset is ready, grab its info -// m_inProgress = true; -// InspectAsset(m_currentAsset, assetToUpgrade); -// } -// else -// { -// m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); -// QTableWidgetItem* rowName = new QTableWidgetItem -// (tr(AZStd::string::format("Error: %s", assetToUpgrade.m_relativePath.c_str()).c_str())); -// m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); -// ++m_currentAssetRowIndex; -// -// Log("SystemTick::ProcessState::Scan: %s post-blocking load, problem loading asset", assetToUpgrade.m_relativePath.c_str()); -// ++m_failedAssets; -// ScanComplete(m_currentAsset); -// } -// } -// break; -// -// case ProcessState::Upgrade: -// { -// AZStd::lock_guard lock(m_mutex); -// if (m_upgradeComplete) -// { -// ++m_upgradeAssetIndex; -// m_inProgress = false; -// m_view->progressBar->setVisible(true); -// m_view->progressBar->setValue(m_upgradeAssetIndex); -// -// if (m_scriptCanvasEntity) -// { -// m_scriptCanvasEntity->Deactivate(); -// m_scriptCanvasEntity = nullptr; -// } -// -// GraphUpgradeCompleteUIUpdate(m_upgradeAsset, m_upgradeResult, m_upgradeMessage); -// -// if (!m_isUpgradingSingleGraph) -// { -// if (m_inProgressAsset != m_assetsToUpgrade.end()) -// { -// m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); -// } -// -// if (m_inProgressAsset == m_assetsToUpgrade.end()) -// { -// FinalizeUpgrade(); -// } -// } -// else -// { -// m_inProgressAsset = m_assetsToUpgrade.erase(m_inProgressAsset); -// m_inProgress = false; -// m_state = ProcessState::Inactive; -// // m_settingsCache.reset(); -// AZ::SystemTickBus::Handler::BusDisconnect(); -// -// } -// -// m_isUpgradingSingleGraph = false; -// -// if (m_assetsToUpgrade.empty()) -// { -// m_view->upgradeAllButton->setEnabled(false); -// } -// -// m_upgradeComplete = false; -// } -// -// if (!IsUpgrading() && m_state == ProcessState::Upgrade) -// { -// AZStd::string errorMessage = BackupGraph(*m_inProgressAsset); -// // Make the backup -// if (errorMessage.empty()) -// { -// Log("SystemTick::ProcessState::Upgrade: Backup Success %s ", m_inProgressAsset->GetHint().c_str()); -// QList items = m_view->tableWidget->findItems(m_inProgressAsset->GetHint().c_str(), Qt::MatchFlag::MatchExactly); -// if (!items.isEmpty()) -// { -// for (auto* item : items) -// { -// int row = item->row(); -// AzQtComponents::StyledBusyLabel* spinner = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnStatus)); -// spinner->SetIsBusy(true); -// } -// } -// -// // Upgrade the graph -// UpgradeGraph(*m_inProgressAsset); -// } -// else -// { -// Log("SystemTick::ProcessState::Upgrade: Backup Failed %s ", m_inProgressAsset->GetHint().c_str()); -// GraphUpgradeComplete(*m_inProgressAsset, OperationResult::Failure, errorMessage); -// } -// -// } -// break; -// } -// default: -// break; -// } -// -// FlushLogs(); -// -// AZ::Data::AssetManager::Instance().DispatchEvents(); -// AZ::SystemTickBus::ExecuteQueuedEvents(); - } - - // Backup - - void Controller::OnUpgradeAllButtonPress() - { - m_state = ProcessState::Upgrade; - //m_settingsCache = AZStd::make_unique(); - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - ScriptCanvas::Grammar::g_printAbstractCodeModel = false; - ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; - AZ::Interface::Get()->SetIsUpgrading(true); - AZ::Interface::Get()->ClearGraphsThatNeedUpgrade(); - m_inProgressAsset = m_assetsToUpgrade.begin(); - AZ::SystemTickBus::Handler::BusConnect(); - m_view->progressBar->setVisible(true); - m_view->progressBar->setRange(0, aznumeric_cast(m_assetsToUpgrade.size())); - m_view->progressBar->setValue(m_upgradeAssetIndex); - m_keepEditorAlive = AZStd::make_unique(); - } - - AZStd::string Controller::BackupGraph(const AZ::Data::Asset& asset) - { - if (!m_view->makeBackupCheckbox->isChecked()) - { - // considered a success - return ""; - } - - QDateTime theTime = QDateTime::currentDateTime(); - QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; - - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) - { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); - return "Failed to create backup folder"; - } - } - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); - if (sourceInfoFound) - { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Controller::BackupGraph: Failed to find file: %s", asset.GetHint().c_str()); - return "Failed to find source file"; - } - - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Controller::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return "Failed to copy source file to backup location"; - } - - Log("Controller::BackupGraph: Backed up: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); - return ""; } - void Controller::UpgradeGraph(const AZ::Data::Asset& asset) + void Controller::AddLogEntries() { - m_inProgress = true; - m_upgradeComplete = false; - Log("UpgradeGraph %s ", m_inProgressAsset->GetHint().c_str()); - m_view->spinner->SetText(QObject::tr("Upgrading: %1").arg(asset.GetHint().c_str())); - m_scriptCanvasEntity = nullptr; - - UpgradeNotifications::Bus::Handler::BusConnect(); - - if (asset.GetType() == azrtti_typeid()) + const AZStd::vector* logs = nullptr; + LogBus::BroadcastResult(logs, &LogTraits::GetEntries); + if (!logs || logs->empty()) { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "Controller::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - - if (graphComponent) - { - m_scriptCanvasEntity = scriptCanvasEntity; - - graphComponent->UpgradeGraph - (asset - , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_view->verbose->isChecked()); - } - } - - AZ_Assert(m_scriptCanvasEntity, "The ScriptCanvas asset should have an entity"); - } - - void Controller::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool /*skipped*/ /*= false*/) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - if (!fullPathFound) - { - AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Full source path not found for %s", relativePath.c_str()); - } - - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - this->OnSourceFileReleased(asset); - }); - streamer->QueueRequest(flushRequest); - } - - void Controller::OnSourceFileReleased(AZ::Data::Asset asset) - { - AZStd::string relativePath, fullPath; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); - bool fullPathFound = false; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); - m_tmpFileName.clear(); - AZStd::string tmpFileName; - // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. - // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. - if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Failure to create temporary file name"); return; } - bool tempSavedSucceeded = false; - AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); - if (fileStream.IsOpen()) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasEditor::ScriptCanvasAssetHandler handler; - tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); - } - - fileStream.Close(); - } - - // attempt to remove temporary file no matter what - m_tmpFileName = tmpFileName; - if (!tempSavedSucceeded) - { - GraphUpgradeComplete(asset, OperationResult::Failure, "Save asset data to temporary file failed"); - return; - } - - using SCCommandBus = AzToolsFramework::SourceControlCommandBus; - SCCommandBus::Broadcast(&SCCommandBus::Events::RequestEdit, fullPath.c_str(), true, - [this, asset, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) - { - constexpr const size_t k_maxAttemps = 10; - - if (!info.IsReadOnly()) - { - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - if (m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - else - { - int result = QMessageBox::No; - if (!m_overwriteAll) - { - QMessageBox mb(QMessageBox::Warning, - QObject::tr("Failed to Save Upgraded File"), - QObject::tr("The upgraded file could not be saved because the file is read only.\nDo you want to make it writeable and overwrite it?"), - QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No, this); - - result = mb.exec(); - if (result == QMessageBox::YesToAll) - { - m_overwriteAll = true; - } - } - - if (result == QMessageBox::Yes || m_overwriteAll) - { - AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); - PerformMove(asset, tmpFileName, fullPath, k_maxAttemps); - } - } - } - }); - } - - void Controller::PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target - , size_t remainingAttempts) - { - // ViewCpp::FileEventHandler fileEventHandler; - - if (remainingAttempts == 0) - { - // all attempts failed, give up - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s. giving up", target.c_str()); - GraphUpgradeComplete(asset, OperationResult::Failure, "Failed to move updated file from backup to source destination"); - } - else if (remainingAttempts == 2) - { - // before the final attempt, flush all caches - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); - streamer->SetRequestCompleteCallback(flushRequest - , [this, asset, remainingAttempts, source, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction( - [this, asset, remainingAttempts, source, target]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - else - { - // the actual move attempt - auto moveResult = AZ::IO::SmartMove(source.c_str(), target.c_str()); - if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) - { - m_tmpFileName.clear(); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - // Bump the slice asset up in the asset processor's queue. - AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); - AZ::SystemTickBus::QueueFunction([this, asset]() - { - GraphUpgradeComplete(asset, OperationResult::Success, ""); - }); - } - else - { - AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to source destination failed: %s, trying again", target.c_str()); - auto streamer = AZ::Interface::Get(); - AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); - streamer->SetRequestCompleteCallback(flushRequest, [this, asset, source, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) - { - // Continue saving. - AZ::SystemTickBus::QueueFunction([this, asset, source, target, remainingAttempts]() { PerformMove(asset, source, target, remainingAttempts - 1); }); - }); - streamer->QueueRequest(flushRequest); - } - } - } - - void Controller::GraphUpgradeComplete - (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - AZStd::lock_guard lock(m_mutex); - m_upgradeComplete = true; - m_upgradeResult = result; - m_upgradeMessage = message; - m_upgradeAsset = asset; - - if (!m_tmpFileName.empty()) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - AZ_Assert(fileIO, "GraphUpgradeComplete: No FileIO instance"); + const QTextCursor oldCursor = m_view->textEdit->textCursor(); + QScrollBar* scrollBar = m_view->textEdit->verticalScrollBar(); - if (fileIO->Exists(m_tmpFileName.c_str()) && !fileIO->Remove(m_tmpFileName.c_str())) - { - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "Failed to remove temporary file: %s", m_tmpFileName.c_str()); - } - } + m_view->textEdit->moveCursor(QTextCursor::End); + QTextCursor textCursor = m_view->textEdit->textCursor(); - if (m_upgradeResult == OperationResult::Failure) + for (auto& entry : *logs) { - AZ::Interface::Get()->GraphNeedsManualUpgrade(asset.GetId()); + auto line = "\n" + entry; + textCursor.insertText(line.c_str()); } - m_tmpFileName.clear(); - } - - void Controller::GraphUpgradeCompleteUIUpdate - (const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message) - { - QString text = asset.GetHint().c_str(); - QList items = m_view->tableWidget->findItems(text, Qt::MatchFlag::MatchExactly); - - if (!items.isEmpty()) - { - for (auto* item : items) - { - int row = item->row(); - QTableWidgetItem* label = m_view->tableWidget->item(row, ColumnAsset); - QString assetName = asset.GetHint().c_str(); - - if (label->text().compare(assetName) == 0) - { - m_view->tableWidget->removeCellWidget(row, ColumnAction); - m_view->tableWidget->removeCellWidget(row, ColumnStatus); - - QToolButton* doneButton = new QToolButton(this); - doneButton->setToolTip("Upgrade complete"); - if (result == OperationResult::Success) - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); - } - else - { - doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); - doneButton->setToolTip(message.data()); - } - - m_view->tableWidget->setCellWidget(row, ColumnStatus, doneButton); - } - } - } + scrollBar->setValue(scrollBar->maximum()); + m_view->textEdit->moveCursor(QTextCursor::StartOfLine); + LogBus::Broadcast(&LogTraits::Clear); } - void Controller::FinalizeUpgrade() + void Controller::OnCloseButtonPress() { - Log("FinalizeUpgrade!"); - m_inProgress = false; - m_assetsToUpgrade.clear(); - m_view->upgradeAllButton->setEnabled(false); - m_view->onlyShowOutdated->setEnabled(true); - m_keepEditorAlive.reset(); - m_view->progressBar->setVisible(false); - - // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - if (assetsThatNeedManualInspection > 0) - { - m_view->spinner->SetText("Some graphs will require manual corrections, you will be prompted to review them upon closing this dialog"); - } - else - { - m_view->spinner->SetText("Upgrade complete."); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); - AZ::Interface::Get()->SetIsUpgrading(false); - //m_settingsCache.reset(); + reject(); } void Controller::OnScanButtonPress() { auto isUpToDate = [this](AZ::Data::Asset asset) { - Log("InspectAsset: %s", asset.GetHint().c_str()); AZ::Entity* scriptCanvasEntity = nullptr; if (asset.GetType() == azrtti_typeid()) @@ -663,7 +103,11 @@ namespace ScriptCanvasEditor ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); if (!scriptCanvasAsset) { - Log("InspectAsset: %s, AsestData failed to return ScriptCanvasAsset", asset.GetHint().c_str()); + AZ_Warning + ( ScriptCanvas::k_VersionExplorerWindow.data() + , false + , "InspectAsset: %s, AsestData failed to return ScriptCanvasAsset" + , asset.GetHint().c_str()); return true; } @@ -697,8 +141,6 @@ namespace ScriptCanvasEditor void Controller::OnScanComplete(const ScanResult& result) { - Log("Full Scan Complete."); - m_view->onlyShowOutdated->setEnabled(true); // Enable all the Upgrade buttons @@ -724,8 +166,6 @@ namespace ScriptCanvasEditor { m_view->upgradeAllButton->setEnabled(true); } - - m_keepEditorAlive.reset(); } void Controller::OnScanFilteredGraph(const AZ::Data::AssetInfo& info) @@ -746,7 +186,7 @@ namespace ScriptCanvasEditor rowGoToButton->setEnabled(false); AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); spinner->SetBusyIconSize(16); -// +// \\ todo restore this // connect(rowGoToButton, &QPushButton::clicked, [this, rowGoToButton, assetInfo] { // // // request upgrade of a single graph @@ -797,19 +237,18 @@ namespace ScriptCanvasEditor OnScannedGraphResult(assetInfo); } - void Controller::OnScannedGraphResult(const AZ::Data::AssetInfo& info) + void Controller::OnScannedGraphResult([[maybe_unused]] const AZ::Data::AssetInfo& info) { m_view->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); ++m_currentAssetRowIndex; - Log("ScanComplete: %s", info.m_relativePath.c_str()); - FlushLogs(); + AddLogEntries(); } void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) { m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); QTableWidgetItem* rowName = new QTableWidgetItem - (tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); + ( tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); OnScannedGraphResult(info); } @@ -819,141 +258,92 @@ namespace ScriptCanvasEditor OnScannedGraph(info, Filtered::No); } - void Controller::BackupComplete() - { - m_currentAssetRowIndex = 0; - m_view->progressBar->setValue(0); - } - - void Controller::UpgradeSingle - ( QPushButton* rowGoToButton - , AzQtComponents::StyledBusyLabel* spinner - , AZ::Data::AssetInfo assetInfo) + void Controller::OnUpgradeAllButtonPress() { - AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - (assetInfo.m_assetId, assetInfo.m_assetType, AZ::Data::AssetLoadBehavior::PreLoad); - - if (asset) + auto simpleUpdate = [this](AZ::Data::Asset asset) { - asset.BlockUntilLoadComplete(); - - if (asset.IsReady()) + if (asset.GetType() == azrtti_typeid()) { - AZ::Interface::Get()->SetIsUpgrading(true); - m_isUpgradingSingleGraph = true; - m_logs.clear(); - m_view->textEdit->clear(); - spinner->SetIsBusy(true); - rowGoToButton->setEnabled(false); - - m_inProgressAsset = AZStd::find_if(m_assetsToUpgrade.begin(), m_assetsToUpgrade.end() - , [asset](const UpgradeAssets::value_type& assetToUpgrade) + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + if (!scriptCanvasAsset) { - return assetToUpgrade.GetId() == asset.GetId(); - }); - - m_state = ProcessState::Upgrade; - AZ::SystemTickBus::Handler::BusConnect(); - } - } - } + return; + } - void Controller::ScanComplete(const AZ::Data::Asset& asset) - { - Log("ScanComplete: %s", asset.GetHint().c_str()); - m_inProgress = false; - m_view->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - m_view->scanButton->setEnabled(true); + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } - m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); - - if (m_inspectingAsset == m_assetsToInspect.end()) - { - AZ::SystemTickBus::QueueFunction([this]() { FinalizeScan(); }); + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } - if (!m_assetsToUpgrade.empty()) - { - m_view->upgradeAllButton->setEnabled(true); - } - } - } + scriptCanvasEntity = queryEntity; + } - void Controller::FinalizeScan() - { - Log("FinalizeScan()"); + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } - m_view->spinner->SetIsBusy(false); - m_view->onlyShowOutdated->setEnabled(true); + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } - // Enable all the Upgrade buttons - for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) - { - QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction)); - if (button) - { - button->setEnabled(true); + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + if (graphComponent) + { + graphComponent->UpgradeGraph + ( asset + , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_view->verbose->isChecked()); + } } - } - - QString spinnerText = QStringLiteral("Scan Complete"); - if (m_assetsToUpgrade.empty()) - { - spinnerText.append(" - No graphs require upgrade!"); - } - else - { - spinnerText.append(QString::asprintf(" - Discovered: %zu, Inspected: %zu, Failed: %zu, Upgradeable: %zu" - , m_discoveredAssets, m_inspectedAssets, m_failedAssets, m_assetsToUpgrade.size())); - } - - - m_view->spinner->SetText(spinnerText); - m_view->progressBar->setVisible(false); - - if (!m_assetsToUpgrade.empty()) - { - m_view->upgradeAllButton->setEnabled(true); - } - - AZ::SystemTickBus::Handler::BusDisconnect(); + }; - m_keepEditorAlive.reset(); - //m_settingsCache.reset(); - m_state = ProcessState::Inactive; + ModifyConfiguration config; + config.modification = simpleUpdate; + config.backupGraphBeforeModification = m_view->makeBackupCheckbox->isChecked(); + ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); } - void Controller::FlushLogs() + void Controller::OnUpgradeAllBegin() { - if (m_logs.empty()) - { - return; - } - - const QTextCursor oldCursor = m_view->textEdit->textCursor(); - QScrollBar* scrollBar = m_view->textEdit->verticalScrollBar(); - - m_view->textEdit->moveCursor(QTextCursor::End); - QTextCursor textCursor = m_view->textEdit->textCursor(); - - while (!m_logs.empty()) - { - auto line = "\n" + m_logs.front(); + m_currentAssetRowIndex = 0; + m_view->tableWidget->setRowCount(0); + m_view->progressBar->setVisible(true); + m_view->progressBar->setValue(0); + m_view->scanButton->setEnabled(false); + m_view->upgradeAllButton->setEnabled(false); + m_view->onlyShowOutdated->setEnabled(false); + } - m_logs.pop_front(); + void Controller::OnUpgradeAllComplete() + { - textCursor.insertText(line.c_str()); - } + } - scrollBar->setValue(scrollBar->maximum()); - m_view->textEdit->moveCursor(QTextCursor::StartOfLine); + void Controller::OnUpgradeAllDependencySortBegin() + { } - void Controller::closeEvent(QCloseEvent* event) + void Controller::OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) { - m_keepEditorAlive.reset(); - - AzQtComponents::StyledDialog::closeEvent(event); + m_view->progressBar->setRange(0, aznumeric_cast(sortedAssets.size())); } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 85459b4d46..f7a0315730 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -10,12 +10,9 @@ #if !defined(Q_MOC_RUN) #include -#include #include #include #include -#include -#include #include #include #include @@ -40,24 +37,10 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { - //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow - //! the upgrade tool to work even if the editor is not in the foreground - class EditorKeepAlive - { - public: - EditorKeepAlive(); - ~EditorKeepAlive(); - - private: - int m_keepEditorActive; - ICVar* m_edKeepEditorActive; - }; - //! A tool that collects and upgrades all Script Canvas graphs in the asset catalog //! Handles display change notifications, handles state change notifications, sends control requests class Controller : public AzQtComponents::StyledDialog - , private AZ::SystemTickBus::Handler , private UpgradeNotifications::Bus::Handler , private ModelNotificationsBus::Handler { @@ -74,104 +57,28 @@ namespace ScriptCanvasEditor static constexpr int ColumnBrowse = 2; static constexpr int ColumnStatus = 3; + AZStd::unique_ptr m_view; + size_t m_currentAssetRowIndex = 0; + + void AddLogEntries(); + void OnCloseButtonPress(); - void OnScanBegin(size_t assetCount) override; void OnScanButtonPress(); + void OnUpgradeAllButtonPress(); + + void OnScanBegin(size_t assetCount) override; void OnScanComplete(const ScanResult& result) override; void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) override; void OnScanLoadFailure(const AZ::Data::AssetInfo& info) override; void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) override; - enum Filtered - { - No, - Yes - }; + enum class Filtered { No, Yes }; void OnScannedGraph(const AZ::Data::AssetInfo& info, Filtered filtered); void OnScannedGraphResult(const AZ::Data::AssetInfo& info); - - - void OnUpgradeAllButtonPress(); - - enum class ProcessState - { - Inactive, - Backup, - Scan, - Upgrade, - }; - ProcessState m_state = ProcessState::Inactive; - - void ScanComplete(const AZ::Data::Asset&); - - // SystemTickBus::Handler - void OnSystemTick() override; - - enum class OperationResult - { - Success, - Failure, - }; - - void GraphUpgradeComplete(const AZ::Data::Asset, OperationResult result, AZStd::string_view message); - - bool IsUpgrading() const { return false; } - - bool m_inProgress = false; - // scan fields - size_t m_currentAssetRowIndex = 0; - size_t m_inspectedAssets = 0; - size_t m_failedAssets = 0; - size_t m_discoveredAssets = 0; - - IUpgradeRequests::AssetList m_assetsToInspect; - IUpgradeRequests::AssetList::iterator m_inspectingAsset; - using UpgradeAssets = AZStd::vector>; - UpgradeAssets m_assetsToUpgrade; - UpgradeAssets::iterator m_inProgressAsset; - - AZ::Data::Asset m_currentAsset; - - AZStd::unique_ptr m_view; - // upgrade fields - AZStd::recursive_mutex m_mutex; - bool m_upgradeComplete = false; - AZ::Data::Asset m_upgradeAsset; - int m_upgradeAssetIndex = 0; - OperationResult m_upgradeResult; - AZStd::string m_upgradeMessage; - AZStd::string m_tmpFileName; - - AZStd::unique_ptr m_keepEditorAlive; - - AZStd::deque m_logs; - - AZ::Entity* m_scriptCanvasEntity = nullptr; - - bool m_isUpgradingSingleGraph = false; - - void UpgradeSingle(QPushButton* item, AzQtComponents::StyledBusyLabel* spinner, AZ::Data::AssetInfo assetInfo); - - void FlushLogs(); - - void FinalizeUpgrade(); - void FinalizeScan(); - - void BackupComplete(); - AZStd::string BackupGraph(const AZ::Data::Asset&); - void UpgradeGraph(const AZ::Data::Asset&); - - void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset asset, OperationResult result, AZStd::string_view message); - void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) override; - - void OnSourceFileReleased(AZ::Data::Asset asset); - - void closeEvent(QCloseEvent* event) override; - - bool m_overwriteAll = false; - void PerformMove(AZ::Data::Asset asset, AZStd::string source, AZStd::string target, size_t remainingAttempts); - - void Log(const char* format, ...); + void OnUpgradeAllBegin() override; + void OnUpgradeAllComplete() override; + void OnUpgradeAllDependencySortBegin() override; + void OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) override; }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h new file mode 100644 index 0000000000..c75133f09e --- /dev/null +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#define VE_LOG(...) LogBus::Broadcast(&LogTraits::Entry, __VA_ARGS__); + +namespace ScriptCanvasEditor +{ + namespace VersionExplorer + { + class LogTraits + : public AZ::EBusTraits + { + public: + virtual void Activate() = 0; + virtual void Clear() = 0; + virtual void Deactivate() = 0; + virtual void Entry(const char* format, ...) = 0; + virtual const AZStd::vector* GetEntries() const = 0; + virtual void SetVersionExporerExclusivity(bool enabled) = 0; + virtual void SetVerbose(bool verbosity) = 0; + }; + using LogBus = AZ::EBus; + } +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index 8d5aa62674..ad9d39cb98 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -7,8 +7,11 @@ */ #include -#include +#include #include +#include +#include +#include #include namespace ModifierCpp @@ -20,6 +23,31 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + EditorKeepAlive::EditorKeepAlive() + { + ISystem* system = nullptr; + CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem); + + if (system) + { + m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive"); + + if (m_edKeepEditorActive) + { + m_keepEditorActive = m_edKeepEditorActive->GetIVal(); + m_edKeepEditorActive->Set(1); + } + } + } + + EditorKeepAlive::~EditorKeepAlive() + { + if (m_edKeepEditorActive) + { + m_edKeepEditorActive->Set(m_keepEditorActive); + } + } + Model::Model() { ModelRequestsBus::Handler::BusConnect(); @@ -33,20 +61,58 @@ namespace ScriptCanvasEditor ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; } - const AZStd::vector* Model::GetLogs() + void Model::Idle() { - return &m_log.GetEntries(); + m_state = State::Idle; + m_keepEditorAlive.reset(); } - + + bool Model::IsReadyToModify() const + { + if (IsWorking()) + { + return false; + } + + if (!m_scanner) + { + return false; + } + + return !m_scanner->GetResult().m_unfiltered.empty(); + } + bool Model::IsWorking() const { return m_state != State::Idle; } + void Model::Modify(const ModifyConfiguration& modification) + { + if (!IsReadyToModify()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Explorer is not ready to modify graphs."); + return; + } + + m_state = State::Modifying; + m_keepEditorAlive = AZStd::make_unique(); + auto results = m_scanner->TakeResult(); + m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); }); + } + + void Model::OnModificationComplete() + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanComplete, m_scanner->GetResult()); + m_modifier.reset(); + m_scanner.reset(); + Idle(); + } + void Model::OnScanComplete() { ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanComplete, m_scanner->GetResult()); - m_state = State::Idle; + Idle(); } void Model::Scan(const ScanConfiguration& config) @@ -58,6 +124,7 @@ namespace ScriptCanvasEditor } m_state = State::Scanning; + m_keepEditorAlive = AZStd::make_unique(); m_scanner = AZStd::make_unique(config, [this](){ OnScanComplete(); }); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index 407074fa94..72ab210e37 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -15,10 +15,25 @@ #include #include +struct ICVar; + namespace ScriptCanvasEditor { namespace VersionExplorer { + //!Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow + //! the upgrade tool to work even if the editor is not in the foreground + class EditorKeepAlive + { + public: + EditorKeepAlive(); + ~EditorKeepAlive(); + + private: + int m_keepEditorActive; + ICVar* m_edKeepEditorActive; + }; + //! Handles model change requests, state queries; sends state change notifications class Model : public ModelRequestsBus::Handler @@ -28,7 +43,8 @@ namespace ScriptCanvasEditor Model(); - const AZStd::vector* GetLogs(); + void Modify(const ModifyConfiguration& modification) override; + void Scan(const ScanConfiguration& config) override; private: @@ -45,9 +61,13 @@ namespace ScriptCanvasEditor AZStd::unique_ptr m_modifier; AZStd::unique_ptr m_scanner; AZStd::unique_ptr m_settingsCache; + AZStd::unique_ptr m_keepEditorAlive; void CacheSettings(); + void Idle(); + bool IsReadyToModify() const; bool IsWorking() const; + void OnModificationComplete(); void OnScanComplete(); void RestoreSettings(); }; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index 11a956c555..d48c15949a 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -14,6 +14,12 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + struct ModifyConfiguration + { + AZStd::function)> modification; + bool backupGraphBeforeModification = false; + }; + struct ScanConfiguration { AZStd::function)> filter; @@ -24,11 +30,16 @@ namespace ScriptCanvasEditor : public AZ::EBusTraits { public: - virtual const AZStd::vector* GetLogs() = 0; + virtual void Modify(const ModifyConfiguration& modification) = 0; virtual void Scan(const ScanConfiguration& filter) = 0; }; using ModelRequestsBus = AZ::EBus; + struct ModificationResult + { + + }; + struct ScanResult { AZStd::vector m_catalogAssets; @@ -46,6 +57,11 @@ namespace ScriptCanvasEditor virtual void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) = 0; virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0; virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; + + virtual void OnUpgradeAllBegin() = 0; + virtual void OnUpgradeAllComplete() = 0; + virtual void OnUpgradeAllDependencySortBegin() = 0; + virtual void OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) = 0; }; using ModelNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index a0067e1a5f..d782ebd572 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -17,6 +17,19 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + Modifier::Modifier + ( const ModifyConfiguration& modification + , AZStd::vector&& assets + , AZStd::function onComplete) + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllBegin); + AZ::SystemTickBus::Handler::BusConnect(); + } + + void Modifier::OnSystemTick() + { + + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index e5a40ff096..d391f51bf7 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -9,15 +9,31 @@ #pragma once #include +#include +#include namespace ScriptCanvasEditor { namespace VersionExplorer { class Modifier + : private AZ::SystemTickBus::Handler { public: AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); + + Modifier + ( const ModifyConfiguration& modification + , AZStd::vector&& assets + , AZStd::function onComplete); + + private: + size_t m_assetIndex = 0; + AZStd::function m_onComplete; + ModifyConfiguration m_config; + ModifyConfiguration m_result; + + void OnSystemTick() override; }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp index 09574883b6..26765a9f97 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -8,11 +8,7 @@ #include #include - -namespace ScannerCpp -{ - -} +#include namespace ScriptCanvasEditor { @@ -42,11 +38,13 @@ namespace ScriptCanvasEditor { if (m_config.filter && m_config.filter(asset)) { + VE_LOG("Scanner: Excluded: %s ", GetCurrentAsset().m_relativePath.c_str()); m_result.m_filteredAssets.push_back(GetCurrentAsset()); ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanFilteredGraph, GetCurrentAsset()); } else { + VE_LOG("Scanner: Included: %s ", GetCurrentAsset().m_relativePath.c_str()); m_result.m_unfiltered.push_back(GetCurrentAsset()); ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanUnFilteredGraph, GetCurrentAsset()); } @@ -69,7 +67,6 @@ namespace ScriptCanvasEditor , azrtti_typeid() , AZ::Data::AssetLoadBehavior::PreLoad); - // Log("Scan: Loading: %s ", m_catalogAssets[m_catalogAssetIndex].GetHint().c_str()); asset.BlockUntilLoadComplete(); if (asset.IsReady()) @@ -86,7 +83,9 @@ namespace ScriptCanvasEditor { if (m_catalogAssetIndex == m_result.m_catalogAssets.size()) { - AZ::SystemTickBus::Handler::BusConnect(); + VE_LOG("Scanner: Complete."); + AZ::SystemTickBus::Handler::BusDisconnect(); + if (m_onComplete) { m_onComplete(); @@ -96,14 +95,17 @@ namespace ScriptCanvasEditor { if (auto asset = LoadAsset()) { + VE_LOG("Scanner: Loaded: %s ", GetCurrentAsset().m_relativePath.c_str()); FilterAsset(asset); } else { + VE_LOG("Scanner: Failed to load: %s ", GetCurrentAsset().m_relativePath.c_str()); m_result.m_loadErrors.push_back(GetCurrentAsset()); ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanLoadFailure, GetCurrentAsset()); } + VE_LOG("Scanner: scan of %s complete", GetCurrentAsset().m_relativePath.c_str()); ++m_catalogAssetIndex; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp index be4b619bfd..6f856b9d4c 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp @@ -20,20 +20,12 @@ namespace ScriptCanvasEditor void Log::Activate() { AZ::Debug::TraceMessageBus::Handler::BusConnect(); + LogBus::Handler::BusConnect(); } - void Log::AddEntry(const char* format, ...) + void Log::Clear() { - if (m_isVerbose) - { - char sBuffer[2048]; - va_list ArgList; - va_start(ArgList, format); - azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); - sBuffer[sizeof(sBuffer) - 1] = '\0'; - va_end(ArgList); - AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); - } + m_logs.clear(); } bool Log::CaptureFromTraceBus(const char* window, const char* message) @@ -58,9 +50,23 @@ namespace ScriptCanvasEditor AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); } - const AZStd::vector& Log::GetEntries() const + void Log::Entry(const char* format, ...) + { + if (m_isVerbose) + { + char sBuffer[2048]; + va_list ArgList; + va_start(ArgList, format); + azvsnprintf(sBuffer, sizeof(sBuffer), format, ArgList); + sBuffer[sizeof(sBuffer) - 1] = '\0'; + va_end(ArgList); + AZ_TracePrintf(ScriptCanvas::k_VersionExplorerWindow.data(), "%s\n", sBuffer); + } + } + + const AZStd::vector* Log::GetEntries() const { - return m_logs; + return &m_logs; } void Log::SetVersionExporerExclusivity(bool enabled) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h index 1ba8e8c9b1..7399b085da 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h @@ -10,6 +10,7 @@ #include #include +#include namespace ScriptCanvasEditor { @@ -17,16 +18,18 @@ namespace ScriptCanvasEditor { class Log : private AZ::Debug::TraceMessageBus::Handler + , private LogBus::Handler { public: AZ_CLASS_ALLOCATOR(Log, AZ::SystemAllocator, 0); - void Activate(); - void AddEntry(const char* format, ...); + void Activate() override; + void Clear() override; void Deactivate(); - const AZStd::vector& GetEntries() const; - void SetVersionExporerExclusivity(bool enabled); - void SetVerbose(bool verbosity); + void Entry(const char* format, ...) override; + const AZStd::vector* GetEntries() const override; + void SetVersionExporerExclusivity(bool enabled) override; + void SetVerbose(bool verbosity) override; private: bool m_isExclusiveReportingEnabled = false; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h deleted file mode 100644 index cf49072230..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace ScriptCanvasEditor -{ - namespace VersionExplorer - { - - } -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 1ce2b0c502..b12c608fe5 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -259,24 +259,24 @@ set(FILES Editor/View/Windows/ScriptCanvasContextMenus.cpp Editor/View/Windows/ScriptCanvasContextMenus.h Editor/View/Windows/ScriptCanvasEditorResources.qrc + Editor/View/Windows/Tools/UpgradeTool/Controller.cpp + Editor/View/Windows/Tools/UpgradeTool/Controller.h + Editor/View/Windows/Tools/UpgradeTool/Controller.ui Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp Editor/View/Windows/Tools/UpgradeTool/FileSaver.h - Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp - Editor/View/Windows/Tools/UpgradeTool/Modifier.h + Editor/View/Windows/Tools/UpgradeTool/LogTraits.h Editor/View/Windows/Tools/UpgradeTool/Model.cpp Editor/View/Windows/Tools/UpgradeTool/Model.h + Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp + Editor/View/Windows/Tools/UpgradeTool/Modifier.h Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp Editor/View/Windows/Tools/UpgradeTool/Scanner.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp + Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui - Editor/View/Windows/Tools/UpgradeTool/Controller.cpp - Editor/View/Windows/Tools/UpgradeTool/Controller.h - Editor/View/Windows/Tools/UpgradeTool/View.ui - Editor/View/Windows/Tools/UpgradeTool/ViewTraits.h Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h - Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.h Editor/Framework/ScriptCanvasGraphUtilities.inl Editor/Framework/ScriptCanvasGraphUtilities.h Editor/Framework/ScriptCanvasTraceUtilities.h From f55737af11081c6f6cc588b61df696774dfb9d23 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 14 Sep 2021 08:41:11 -0700 Subject: [PATCH 013/226] dependency sort WIP Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Controller.cpp | 1 + .../Windows/Tools/UpgradeTool/ModelTraits.h | 2 + .../Windows/Tools/UpgradeTool/Modifier.cpp | 87 ++++++++++++++++++- .../View/Windows/Tools/UpgradeTool/Modifier.h | 19 +++- 4 files changed, 107 insertions(+), 2 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 44d6f2e738..09f0428901 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -94,6 +94,7 @@ namespace ScriptCanvasEditor void Controller::OnScanButtonPress() { + // \todo move to another file auto isUpToDate = [this](AZ::Data::Asset asset) { AZ::Entity* scriptCanvasEntity = nullptr; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index d48c15949a..d01d311ebc 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -18,6 +18,8 @@ namespace ScriptCanvasEditor { AZStd::function)> modification; bool backupGraphBeforeModification = false; + // disabling this can be acceptable, but be careful + bool successfulDependencyUpgradeRequired = true; }; struct ScanConfiguration diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index d782ebd572..9841a9f60e 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -7,6 +7,8 @@ */ #include +#include +#include namespace ModifierCpp { @@ -21,15 +23,98 @@ namespace ScriptCanvasEditor ( const ModifyConfiguration& modification , AZStd::vector&& assets , AZStd::function onComplete) + : m_config(modification) + , m_assets(assets) + , m_onComplete(onComplete) { - ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllBegin); AZ::SystemTickBus::Handler::BusConnect(); } + + const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const + { + return m_state == State::GatheringDependencies + ? m_assets[m_assetIndex] + : m_assets[m_dependencyOrderedIndicies[m_assetIndex]]; + } + + void Modifier::GatherDependencies() + { + AZ::SerializeContext* serializeContext{}; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + AZ_Assert(serializeContext, "SerializeContext is required to enumerate dependent assets in the ScriptCanvas file"); + + /* + + // AZStd::unordered_multimap jobDependenciesByKey; + auto assetFilter = [this, &jobDependenciesByKey] + ( void* instancePointer + , const AZ::SerializeContext::ClassData* classData + , [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement) + { + auto azTypeId = classData->m_azRtti->GetTypeId(); + if (azTypeId == azrtti_typeid>()) + { + const auto* subgraphAsset = reinterpret_cast*>(instancePointer); + if (subgraphAsset->GetId().IsValid()) + { + // AssetBuilderSDK::SourceFileDependency dependency; + // dependency.m_sourceFileDependencyUUID = subgraphAsset->GetId().m_guid; + // jobDependenciesByKey.insert({ s_scriptCanvasProcessJobKey, dependency }); + // this->m_processEditorAssetDependencies.push_back + // ({ subgraphAsset->GetId(), azTypeId, AZ::Data::AssetLoadBehavior::PreLoad }); + } + } + // always continue, make note of the script canvas dependencies + return true; + }; + + AZ_Verify(serializeContext->EnumerateInstanceConst + ( sourceGraph->GetGraphData() + , azrtti_typeid() + , assetFilter + , {} + , AZ::SerializeContext::ENUM_ACCESS_FOR_READ + , nullptr + , nullptr), "Failed to gather dependencies from graph data"); + + // Flush asset database events to ensure no asset references are held by closures queued on Ebuses. + AZ::Data::AssetManager::Instance().DispatchEvents(); + */ + } + + AZ::Data::Asset Modifier::LoadAsset() + { + AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset + (GetCurrentAsset().m_assetId + , azrtti_typeid() + , AZ::Data::AssetLoadBehavior::PreLoad); + + asset.BlockUntilLoadComplete(); + + if (asset.IsReady()) + { + return asset; + } + else + { + return {}; + } + } + void Modifier::OnSystemTick() { + switch (m_state) + { + case State::GatheringDependencies: + TickGatherDependencies(); + break; + case State::ModifyingGraphs: + TickUpdateGraph(); + break; + } } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index d391f51bf7..b862de82f0 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -28,12 +28,29 @@ namespace ScriptCanvasEditor , AZStd::function onComplete); private: + enum class State + { + GatheringDependencies, + ModifyingGraphs + }; + + State m_state = State::GatheringDependencies; size_t m_assetIndex = 0; AZStd::function m_onComplete; + AZStd::vector m_assets; + AZStd::vector m_dependencyOrderedIndicies; + AZStd::unordered_map> m_dependencies; + AZStd::vector m_failures; ModifyConfiguration m_config; - ModifyConfiguration m_result; + ModificationResult m_result; + void GatherDependencies(); + const AZ::Data::AssetInfo& GetCurrentAsset() const; + AZ::Data::Asset LoadAsset(); + void SortGraphsByDependencies(); void OnSystemTick() override; + void TickGatherDependencies(); + void TickUpdateGraph(); }; } } From 0e2f75492c4ac67fdd475c62729912fb5365d50e Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 14 Sep 2021 14:05:15 -0700 Subject: [PATCH 014/226] dependency sort finished, but not tested Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Controller.cpp | 4 +- .../Windows/Tools/UpgradeTool/Controller.h | 4 +- .../Windows/Tools/UpgradeTool/LogTraits.h | 1 + .../Windows/Tools/UpgradeTool/ModelTraits.h | 4 +- .../Windows/Tools/UpgradeTool/Modifier.cpp | 159 ++++++++++++++++-- .../View/Windows/Tools/UpgradeTool/Modifier.h | 21 ++- 6 files changed, 174 insertions(+), 19 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 09f0428901..8eae0e1bd0 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -342,7 +342,9 @@ namespace ScriptCanvasEditor } - void Controller::OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) + void Controller::OnUpgradeAllDependencySortEnd + ( const AZStd::vector& sortedAssets + , [[maybe_unused]] const AZStd::vector& sortedOrder) { m_view->progressBar->setRange(0, aznumeric_cast(sortedAssets.size())); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index f7a0315730..e2f00fe6f3 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -78,7 +78,9 @@ namespace ScriptCanvasEditor void OnUpgradeAllBegin() override; void OnUpgradeAllComplete() override; void OnUpgradeAllDependencySortBegin() override; - void OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) override; + void OnUpgradeAllDependencySortEnd + ( const AZStd::vector& sortedAssets + , const AZStd::vector& sortedOrder) override; }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h index c75133f09e..47cebe7324 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/LogTraits.h @@ -8,6 +8,7 @@ #pragma once #include +#include #define VE_LOG(...) LogBus::Broadcast(&LogTraits::Entry, __VA_ARGS__); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index d01d311ebc..09ad2b01c1 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -63,7 +63,9 @@ namespace ScriptCanvasEditor virtual void OnUpgradeAllBegin() = 0; virtual void OnUpgradeAllComplete() = 0; virtual void OnUpgradeAllDependencySortBegin() = 0; - virtual void OnUpgradeAllDependencySortEnd(const AZStd::vector& sortedAssets) = 0; + virtual void OnUpgradeAllDependencySortEnd + ( const AZStd::vector& assets + , const AZStd::vector& sortedOrder) = 0; }; using ModelNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 9841a9f60e..1723b0f8ff 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -6,9 +6,11 @@ * */ +#include #include #include #include +#include namespace ModifierCpp { @@ -23,7 +25,8 @@ namespace ScriptCanvasEditor ( const ModifyConfiguration& modification , AZStd::vector&& assets , AZStd::function onComplete) - : m_config(modification) + : m_state(State::GatheringDependencies) + , m_config(modification) , m_assets(assets) , m_onComplete(onComplete) { @@ -31,12 +34,22 @@ namespace ScriptCanvasEditor AZ::SystemTickBus::Handler::BusConnect(); } - const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const { return m_state == State::GatheringDependencies ? m_assets[m_assetIndex] - : m_assets[m_dependencyOrderedIndicies[m_assetIndex]]; + : m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]]; + } + + AZStd::unordered_set& Modifier::GetOrCreateDependencyIndexSet() + { + auto iter = m_dependencies.find(m_assetIndex); + if (iter == m_dependencies.end()) + { + iter = m_dependencies.insert_or_assign(m_assetIndex, AZStd::unordered_set()).first; + } + + return iter->second; } void Modifier::GatherDependencies() @@ -45,10 +58,19 @@ namespace ScriptCanvasEditor AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); AZ_Assert(serializeContext, "SerializeContext is required to enumerate dependent assets in the ScriptCanvas file"); - /* + auto asset = LoadAsset(); + if (!asset + || !asset.GetAs() + || !asset.GetAs()->GetScriptCanvasGraph() + || !asset.GetAs()->GetScriptCanvasGraph()->GetGraphData()) + { + VE_LOG("Modifier: Failed to load asset %s for modification, even though it scanned properly"); + return; + } - // AZStd::unordered_multimap jobDependenciesByKey; - auto assetFilter = [this, &jobDependenciesByKey] + auto graphData = asset.GetAs()->GetScriptCanvasGraph()->GetGraphData(); + + auto dependencyGrabber = [this] ( void* instancePointer , const AZ::SerializeContext::ClassData* classData , [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement) @@ -59,11 +81,15 @@ namespace ScriptCanvasEditor const auto* subgraphAsset = reinterpret_cast*>(instancePointer); if (subgraphAsset->GetId().IsValid()) { - // AssetBuilderSDK::SourceFileDependency dependency; - // dependency.m_sourceFileDependencyUUID = subgraphAsset->GetId().m_guid; - // jobDependenciesByKey.insert({ s_scriptCanvasProcessJobKey, dependency }); - // this->m_processEditorAssetDependencies.push_back - // ({ subgraphAsset->GetId(), azTypeId, AZ::Data::AssetLoadBehavior::PreLoad }); + if (auto iter = m_assetInfoIndexById.find(subgraphAsset->GetId().m_guid); iter != m_assetInfoIndexById.end()) + { + GetOrCreateDependencyIndexSet().insert(iter->second); + } + else + { + VE_LOG("Modifier: Dependency found that was not picked up by the scanner: %s" + , subgraphAsset->GetId().ToString().c_str()); + } } } // always continue, make note of the script canvas dependencies @@ -71,9 +97,9 @@ namespace ScriptCanvasEditor }; AZ_Verify(serializeContext->EnumerateInstanceConst - ( sourceGraph->GetGraphData() + ( graphData , azrtti_typeid() - , assetFilter + , dependencyGrabber , {} , AZ::SerializeContext::ENUM_ACCESS_FOR_READ , nullptr @@ -81,13 +107,12 @@ namespace ScriptCanvasEditor // Flush asset database events to ensure no asset references are held by closures queued on Ebuses. AZ::Data::AssetManager::Instance().DispatchEvents(); - */ } AZ::Data::Asset Modifier::LoadAsset() { AZ::Data::Asset asset = AZ::Data::AssetManager::Instance().GetAsset - (GetCurrentAsset().m_assetId + ( GetCurrentAsset().m_assetId , azrtti_typeid() , AZ::Data::AssetLoadBehavior::PreLoad); @@ -116,5 +141,109 @@ namespace ScriptCanvasEditor break; } } + + const AZStd::unordered_set* Modifier::Sorter::GetDependencies(size_t index) const + { + auto iter = modifier->m_dependencies.find(index); + return iter != modifier->m_dependencies.end() ? &iter->second : nullptr; + } + + void Modifier::Sorter::Sort() + { + for (size_t index = 0; index != modifier->m_assets.size(); ++index) + { + Visit(index); + } + /* + L ← Empty list that will contain the sorted nodes + (m_dependencyOrderedAssetIndicies) + + while exists nodes without a permanent mark do + select an unmarked node n + visit(n) + */ + } + + void Modifier::Sorter::Visit(size_t index) + { + if (markedPermanent.contains(index)) + { + return; + } + + if (markedTemporary.contains(index)) + { + AZ_Error + ( ScriptCanvas::k_VersionExplorerWindow.data() + , false + , "Modifier: Dependency sort has failed during, circular dependency detected for Asset: %s" + , modifier->GetCurrentAsset().m_relativePath.c_str()); + return; + } + + markedTemporary.insert(index); + + if (auto dependencies = GetDependencies(index)) + { + for (auto& dependency : *dependencies) + { + Visit(dependency); + } + } + + markedTemporary.erase(index); + markedPermanent.insert(index); + modifier->m_dependencyOrderedAssetIndicies.push_back(index); + } + + void Modifier::SortGraphsByDependencies() + { + m_dependencyOrderedAssetIndicies.reserve(m_assets.size()); + Sorter sorter; + sorter.modifier = this; + sorter.Sort(); + } + + void Modifier::TickGatherDependencies() + { + if (m_assetIndex == 0) + { + if (m_config.successfulDependencyUpgradeRequired) + { + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllDependencySortBegin); + m_assetInfoIndexById.reserve(m_assets.size()); + + for (size_t index = 0; index != m_assets.size(); ++index) + { + m_assetInfoIndexById.insert({ m_assets[index].m_assetId.m_guid, index }); + } + } + else + { + m_dependencyOrderedAssetIndicies.reserve(m_assets.size()); + + for (size_t index = 0; index != m_assets.size(); ++index) + { + m_dependencyOrderedAssetIndicies.push_back(index); + } + } + } + + if (m_assetIndex == m_assets.size()) + { + SortGraphsByDependencies(); + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeAllDependencySortEnd + , m_assets + , m_dependencyOrderedAssetIndicies); + m_assetIndex = 0; + m_state = State::ModifyingGraphs; + } + else + { + GatherDependencies(); + ++m_assetIndex; + } + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index b862de82f0..e0b1f1a289 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -28,6 +28,20 @@ namespace ScriptCanvasEditor , AZStd::function onComplete); private: + friend class Sorter; + + struct Sorter + { + Modifier* modifier; + AZStd::unordered_set markedPermanent; + AZStd::unordered_set markedTemporary; + void Sort(); + + private: + void Visit(size_t index); + const AZStd::unordered_set* GetDependencies(size_t index) const; + }; + enum class State { GatheringDependencies, @@ -37,15 +51,20 @@ namespace ScriptCanvasEditor State m_state = State::GatheringDependencies; size_t m_assetIndex = 0; AZStd::function m_onComplete; + // asset infos in scanned order AZStd::vector m_assets; - AZStd::vector m_dependencyOrderedIndicies; + // dependency sorted order indices into the asset vector + AZStd::vector m_dependencyOrderedAssetIndicies; + // dependency indices by asset info index (only exist if graphs have them) AZStd::unordered_map> m_dependencies; + AZStd::unordered_map m_assetInfoIndexById; AZStd::vector m_failures; ModifyConfiguration m_config; ModificationResult m_result; void GatherDependencies(); const AZ::Data::AssetInfo& GetCurrentAsset() const; + AZStd::unordered_set& GetOrCreateDependencyIndexSet(); AZ::Data::Asset LoadAsset(); void SortGraphsByDependencies(); void OnSystemTick() override; From 0dfcc1ea42708d12c4d68103908f83ae3fad523d Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Wed, 15 Sep 2021 12:25:06 -0700 Subject: [PATCH 015/226] dependency sort finished, UI updated Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Editor/View/Windows/MainWindow.cpp | 25 +-- .../Windows/Tools/UpgradeTool/Controller.cpp | 186 +++++++++++++++--- .../Windows/Tools/UpgradeTool/Controller.h | 28 ++- .../Windows/Tools/UpgradeTool/ModelTraits.h | 24 ++- .../Windows/Tools/UpgradeTool/Modifier.cpp | 122 +++++++----- 5 files changed, 281 insertions(+), 104 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 6c10726e13..ee539aa5fa 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -3435,25 +3435,20 @@ namespace ScriptCanvasEditor void MainWindow::RunUpgradeTool() { - // \todo, restore this behavior, post modification step - - /* auto versionExplorer = aznew VersionExplorer::Controller(this); versionExplorer->exec(); - - + // update and fix this // Manual correction - size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); - - // If there are graphs that need manual correction, show the helper - if (assetsThatNeedManualInspection > 0) - { - UpgradeHelper* upgradeHelper = new UpgradeHelper(this); - upgradeHelper->show(); - } - */ - +// size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); +// // If there are graphs that need manual correction, show the helper +// if (assetsThatNeedManualInspection > 0) +// { +// UpgradeHelper* upgradeHelper = new UpgradeHelper(this); +// upgradeHelper->show(); +// } + + delete versionExplorer; } void MainWindow::OnShowValidationErrors() diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 8eae0e1bd0..c8353b1d25 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -54,7 +54,7 @@ namespace ScriptCanvasEditor m_view->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnScanButtonPress); connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnCloseButtonPress); - connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnUpgradeAllButtonPress); + connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnUpgradeButtonPress); m_view->progressBar->setValue(0); m_view->progressBar->setVisible(false); @@ -130,7 +130,7 @@ namespace ScriptCanvasEditor void Controller::OnScanBegin(size_t assetCount) { - m_currentAssetRowIndex = 0; + m_handledAssetCount = 0; m_view->tableWidget->setRowCount(0); m_view->progressBar->setVisible(true); m_view->progressBar->setRange(0, aznumeric_cast(assetCount)); @@ -138,6 +138,10 @@ namespace ScriptCanvasEditor m_view->scanButton->setEnabled(false); m_view->upgradeAllButton->setEnabled(false); m_view->onlyShowOutdated->setEnabled(false); + + QString spinnerText = QStringLiteral("Scan in progress - gathering graphs that can be updated"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); } void Controller::OnScanComplete(const ScanResult& result) @@ -161,6 +165,7 @@ namespace ScriptCanvasEditor , result.m_filteredAssets.size())); m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(false); m_view->progressBar->setVisible(false); if (!result.m_unfiltered.empty()) @@ -176,17 +181,17 @@ namespace ScriptCanvasEditor void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, Filtered filtered) { - m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + m_view->tableWidget->insertRow(m_handledAssetCount); QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); - m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); + SetRowSucceeded(m_handledAssetCount); if (filtered == Filtered::No) { QPushButton* rowGoToButton = new QPushButton(this); rowGoToButton->setText("Upgrade"); rowGoToButton->setEnabled(false); - AzQtComponents::StyledBusyLabel* spinner = new AzQtComponents::StyledBusyLabel(this); - spinner->SetBusyIconSize(16); + SetRowBusy(m_handledAssetCount); // \\ todo restore this // connect(rowGoToButton, &QPushButton::clicked, [this, rowGoToButton, assetInfo] { // @@ -200,8 +205,7 @@ namespace ScriptCanvasEditor // // }); - m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnAction), rowGoToButton); - m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnStatus), spinner); + m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnAction), rowGoToButton); } char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; @@ -234,23 +238,24 @@ namespace ScriptCanvasEditor AzQtComponents::ShowFileOnDesktop(absolutePath); }); - m_view->tableWidget->setCellWidget(static_cast(m_currentAssetRowIndex), static_cast(ColumnBrowse), browseButton); + m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnBrowse), browseButton); OnScannedGraphResult(assetInfo); } void Controller::OnScannedGraphResult([[maybe_unused]] const AZ::Data::AssetInfo& info) { - m_view->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); - ++m_currentAssetRowIndex; + m_view->progressBar->setValue(aznumeric_cast(m_handledAssetCount)); + ++m_handledAssetCount; AddLogEntries(); } void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) { - m_view->tableWidget->insertRow(static_cast(m_currentAssetRowIndex)); + m_view->tableWidget->insertRow(m_handledAssetCount); QTableWidgetItem* rowName = new QTableWidgetItem ( tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); - m_view->tableWidget->setItem(static_cast(m_currentAssetRowIndex), static_cast(ColumnAsset), rowName); + m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); + SetRowFailed(m_handledAssetCount, "Load failed"); OnScannedGraphResult(info); } @@ -259,7 +264,7 @@ namespace ScriptCanvasEditor OnScannedGraph(info, Filtered::No); } - void Controller::OnUpgradeAllButtonPress() + void Controller::OnUpgradeButtonPress() { auto simpleUpdate = [this](AZ::Data::Asset asset) { @@ -321,32 +326,167 @@ namespace ScriptCanvasEditor ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); } - void Controller::OnUpgradeAllBegin() + void Controller::OnUpgradeBegin + ( const ModifyConfiguration& config + , [[maybe_unused]] const AZStd::vector& assets) { - m_currentAssetRowIndex = 0; - m_view->tableWidget->setRowCount(0); + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + SetRowBusy(row); + } + } + + QString spinnerText = QStringLiteral("Upgrade in progress - "); + if (config.modifySingleAsset) + { + spinnerText.append(" single graph"); + } + else + { + spinnerText.append(" all scanned graphs"); + } + + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); + } + + void Controller::SetSpinnerIsBusy(bool isBusy) + { + m_view->spinner->SetIsBusy(isBusy); + m_view->spinner->SetBusyIconSize(16); + } + + void Controller::OnUpgradeComplete() + { + SetSpinnerIsBusy(false); + } + + void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) + { + QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + + if (result == Result::Success) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + } + } + } + m_view->progressBar->setVisible(true); + ++m_handledAssetCount; + m_view->progressBar->setValue(m_handledAssetCount); + } + + void Controller::OnUpgradeDependencySortBegin + ( [[maybe_unused]] const ModifyConfiguration& config + , const AZStd::vector& assets) + { + m_handledAssetCount = 0; + m_view->progressBar->setVisible(true); + m_view->progressBar->setRange(0, aznumeric_caster(assets.size())); m_view->progressBar->setValue(0); m_view->scanButton->setEnabled(false); m_view->upgradeAllButton->setEnabled(false); m_view->onlyShowOutdated->setEnabled(false); + + for (int row = 0; row != m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + SetRowBusy(row); + } + } + + QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies for the scanned graphs"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(true); + } + + void Controller::OnUpgradeDependencySortEnd + ( [[maybe_unused]] const ModifyConfiguration& config + , const AZStd::vector& assets + , [[maybe_unused]] const AZStd::vector& sortedOrder) + { + m_handledAssetCount = 0; + m_view->progressBar->setRange(0, aznumeric_caster(assets.size())); + m_view->progressBar->setValue(0); + m_view->progressBar->setVisible(true); + + for (int row = 0; row != m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + SetRowPending(row); + } + } + + QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies is complete"); + m_view->spinner->SetText(spinnerText); + SetSpinnerIsBusy(false); } - void Controller::OnUpgradeAllComplete() + void Controller::SetRowBusy(int index) { + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + AzQtComponents::StyledBusyLabel* busy = new AzQtComponents::StyledBusyLabel(this); + busy->SetBusyIconSize(16); + m_view->tableWidget->setCellWidget(index, ColumnStatus, busy); } - void Controller::OnUpgradeAllDependencySortBegin() + void Controller::SetRowFailed(int index, AZStd::string_view message) { + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + QToolButton* doneButton = new QToolButton(this); + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/titlebar-close.svg")); + doneButton->setToolTip(message.data()); + m_view->tableWidget->setCellWidget(index, ColumnStatus, doneButton); } - void Controller::OnUpgradeAllDependencySortEnd - ( const AZStd::vector& sortedAssets - , [[maybe_unused]] const AZStd::vector& sortedOrder) + void Controller::SetRowPending(int index) + { + m_view->tableWidget->removeCellWidget(index, ColumnStatus); + } + + void Controller::SetRowsBusy() + { + for (int i = 0; i != m_view->tableWidget->rowCount(); ++i) + { + SetRowBusy(i); + } + } + + void Controller::SetRowSucceeded(int index) { - m_view->progressBar->setRange(0, aznumeric_cast(sortedAssets.size())); + if (index >= m_view->tableWidget->rowCount()) + { + return; + } + + QToolButton* doneButton = new QToolButton(this); + doneButton->setIcon(QIcon(":/stylesheet/img/UI20/checkmark-menu.svg")); + m_view->tableWidget->setCellWidget(index, ColumnStatus, doneButton); } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index e2f00fe6f3..f99aaf5466 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -58,13 +58,13 @@ namespace ScriptCanvasEditor static constexpr int ColumnStatus = 3; AZStd::unique_ptr m_view; - size_t m_currentAssetRowIndex = 0; + int m_handledAssetCount = 0; void AddLogEntries(); void OnCloseButtonPress(); void OnScanButtonPress(); - void OnUpgradeAllButtonPress(); + void OnUpgradeButtonPress(); void OnScanBegin(size_t assetCount) override; void OnScanComplete(const ScanResult& result) override; @@ -74,13 +74,25 @@ namespace ScriptCanvasEditor enum class Filtered { No, Yes }; void OnScannedGraph(const AZ::Data::AssetInfo& info, Filtered filtered); void OnScannedGraphResult(const AZ::Data::AssetInfo& info); - - void OnUpgradeAllBegin() override; - void OnUpgradeAllComplete() override; - void OnUpgradeAllDependencySortBegin() override; - void OnUpgradeAllDependencySortEnd - ( const AZStd::vector& sortedAssets + + // for single operation UI updates, just check the assets size, or note it on the request + void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) override; + void OnUpgradeComplete() override; + void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) override; + void OnUpgradeDependencySortBegin + ( const ModifyConfiguration& config + , const AZStd::vector& assets) override; + void OnUpgradeDependencySortEnd + ( const ModifyConfiguration& config + , const AZStd::vector& assets , const AZStd::vector& sortedOrder) override; + + void SetSpinnerIsBusy(bool isBusy); + void SetRowBusy(int index); + void SetRowFailed(int index, AZStd::string_view message); + void SetRowPending(int index); + void SetRowsBusy(); + void SetRowSucceeded(int index); }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index 09ad2b01c1..86e1b47b18 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -17,8 +17,8 @@ namespace ScriptCanvasEditor struct ModifyConfiguration { AZStd::function)> modification; + bool modifySingleAsset = false; bool backupGraphBeforeModification = false; - // disabling this can be acceptable, but be careful bool successfulDependencyUpgradeRequired = true; }; @@ -50,6 +50,12 @@ namespace ScriptCanvasEditor AZStd::vector m_loadErrors; }; + enum Result + { + Failure, + Success + }; + class ModelNotificationsTraits : public AZ::EBusTraits { @@ -60,11 +66,17 @@ namespace ScriptCanvasEditor virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0; virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; - virtual void OnUpgradeAllBegin() = 0; - virtual void OnUpgradeAllComplete() = 0; - virtual void OnUpgradeAllDependencySortBegin() = 0; - virtual void OnUpgradeAllDependencySortEnd - ( const AZStd::vector& assets + virtual void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) = 0; + virtual void OnUpgradeComplete() = 0; + // virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config) = 0; + // virtual void OnUpgradeModification(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, Result result) = 0; + virtual void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) = 0; + virtual void OnUpgradeDependencySortBegin + ( const ModifyConfiguration& config + , const AZStd::vector& assets) = 0; + virtual void OnUpgradeDependencySortEnd + ( const ModifyConfiguration& config + , const AZStd::vector& assets , const AZStd::vector& sortedOrder) = 0; }; using ModelNotificationsBus = AZ::EBus; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 1723b0f8ff..5656d6cf6d 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -30,7 +30,7 @@ namespace ScriptCanvasEditor , m_assets(assets) , m_onComplete(onComplete) { - ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllBegin); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeBegin, modification, m_assets); AZ::SystemTickBus::Handler::BusConnect(); } @@ -58,52 +58,64 @@ namespace ScriptCanvasEditor AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); AZ_Assert(serializeContext, "SerializeContext is required to enumerate dependent assets in the ScriptCanvas file"); + bool anyFailures = false; auto asset = LoadAsset(); - if (!asset - || !asset.GetAs() - || !asset.GetAs()->GetScriptCanvasGraph() - || !asset.GetAs()->GetScriptCanvasGraph()->GetGraphData()) - { - VE_LOG("Modifier: Failed to load asset %s for modification, even though it scanned properly"); - return; - } - auto graphData = asset.GetAs()->GetScriptCanvasGraph()->GetGraphData(); - - auto dependencyGrabber = [this] - ( void* instancePointer - , const AZ::SerializeContext::ClassData* classData - , [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement) + if (asset + && asset.GetAs() + && asset.GetAs()->GetScriptCanvasGraph() + && asset.GetAs()->GetScriptCanvasGraph()->GetGraphData()) { - auto azTypeId = classData->m_azRtti->GetTypeId(); - if (azTypeId == azrtti_typeid>()) + auto graphData = asset.GetAs()->GetScriptCanvasGraph()->GetGraphData(); + + auto dependencyGrabber = [this] + ( void* instancePointer + , const AZ::SerializeContext::ClassData* classData + , [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement) { - const auto* subgraphAsset = reinterpret_cast*>(instancePointer); - if (subgraphAsset->GetId().IsValid()) + if (auto azTypeId = classData->m_azRtti->GetTypeId(); + azTypeId == azrtti_typeid>()) { - if (auto iter = m_assetInfoIndexById.find(subgraphAsset->GetId().m_guid); iter != m_assetInfoIndexById.end()) - { - GetOrCreateDependencyIndexSet().insert(iter->second); - } - else + const auto* subgraphAsset = + reinterpret_cast*>(instancePointer); + if (subgraphAsset->GetId().IsValid()) { - VE_LOG("Modifier: Dependency found that was not picked up by the scanner: %s" - , subgraphAsset->GetId().ToString().c_str()); + if (auto iter = m_assetInfoIndexById.find(subgraphAsset->GetId().m_guid); iter != m_assetInfoIndexById.end()) + { + // insert the index of the dependency into the set that belongs to this asset + GetOrCreateDependencyIndexSet().insert(iter->second); + } } } + // always continue, make note of the script canvas dependencies + return true; + }; + + if (!serializeContext->EnumerateInstanceConst + ( graphData + , azrtti_typeid() + , dependencyGrabber + , {} + , AZ::SerializeContext::ENUM_ACCESS_FOR_READ + , nullptr + , nullptr)) + { + anyFailures = true; + VE_LOG("Modifier: ERROR - Failed to gather dependencies from graph data: %s" + , GetCurrentAsset().m_relativePath.c_str()) } - // always continue, make note of the script canvas dependencies - return true; - }; - - AZ_Verify(serializeContext->EnumerateInstanceConst - ( graphData - , azrtti_typeid() - , dependencyGrabber - , {} - , AZ::SerializeContext::ENUM_ACCESS_FOR_READ - , nullptr - , nullptr), "Failed to gather dependencies from graph data"); + } + else + { + anyFailures = true; + VE_LOG("Modifier: ERROR - Failed to load asset %s for modification, even though it scanned properly" + , GetCurrentAsset().m_relativePath.c_str()); + } + + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeDependenciesGathered + , GetCurrentAsset() + , anyFailures ? Result::Failure : Result::Success); // Flush asset database events to ensure no asset references are held by closures queued on Ebuses. AZ::Data::AssetManager::Instance().DispatchEvents(); @@ -154,14 +166,6 @@ namespace ScriptCanvasEditor { Visit(index); } - /* - L ← Empty list that will contain the sorted nodes - (m_dependencyOrderedAssetIndicies) - - while exists nodes without a permanent mark do - select an unmarked node n - visit(n) - */ } void Modifier::Sorter::Visit(size_t index) @@ -210,7 +214,7 @@ namespace ScriptCanvasEditor { if (m_config.successfulDependencyUpgradeRequired) { - ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllDependencySortBegin); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeDependencySortBegin, m_config, m_assets); m_assetInfoIndexById.reserve(m_assets.size()); for (size_t index = 0; index != m_assets.size(); ++index) @@ -226,16 +230,24 @@ namespace ScriptCanvasEditor { m_dependencyOrderedAssetIndicies.push_back(index); } + + // go straight into ModifyinGraphs + m_assetIndex = m_assets.size(); } } if (m_assetIndex == m_assets.size()) { - SortGraphsByDependencies(); - ModelNotificationsBus::Broadcast - ( &ModelNotificationsTraits::OnUpgradeAllDependencySortEnd - , m_assets - , m_dependencyOrderedAssetIndicies); + if (m_config.successfulDependencyUpgradeRequired) + { + SortGraphsByDependencies(); + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeDependencySortEnd + , m_config + , m_assets + , m_dependencyOrderedAssetIndicies); + } + m_assetIndex = 0; m_state = State::ModifyingGraphs; } @@ -245,5 +257,11 @@ namespace ScriptCanvasEditor ++m_assetIndex; } } + + void Modifier::TickUpdateGraph() + { + + } + } } From 296fca722e36aab372ee8f43d545c9ef027d5023 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:42:54 -0700 Subject: [PATCH 016/226] file save finished, not tested Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Editor/Components/GraphUpgrade.cpp | 2 +- .../ScriptCanvas/Bus/EditorScriptCanvasBus.h | 5 +- .../Widgets/NodePalette/NodePaletteModel.cpp | 4 +- .../Widgets/NodePalette/NodePaletteModel.h | 2 +- .../ScriptCanvasNodePaletteDockWidget.cpp | 4 +- .../ScriptCanvasNodePaletteDockWidget.h | 2 +- .../Code/Editor/View/Windows/MainWindow.h | 6 +- .../Windows/Tools/UpgradeTool/Controller.cpp | 221 ++++++++++++------ .../Windows/Tools/UpgradeTool/Controller.h | 14 +- .../Windows/Tools/UpgradeTool/FileSaver.cpp | 184 +++++++++++++++ .../Windows/Tools/UpgradeTool/FileSaver.h | 25 ++ .../View/Windows/Tools/UpgradeTool/Model.cpp | 2 +- .../View/Windows/Tools/UpgradeTool/Model.h | 3 +- .../Windows/Tools/UpgradeTool/ModelTraits.h | 27 ++- .../Windows/Tools/UpgradeTool/Modifier.cpp | 185 ++++++++++++--- .../View/Windows/Tools/UpgradeTool/Modifier.h | 27 ++- .../View/Windows/Tools/UpgradeTool/Scanner.h | 1 - 17 files changed, 581 insertions(+), 133 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp index e87c82e186..2754cc9777 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp @@ -686,7 +686,7 @@ namespace ScriptCanvasEditor void EditorGraphUpgradeMachine::OnComplete(IState::ExitStatus exitStatus) { - UpgradeNotifications::Bus::Broadcast(&UpgradeNotifications::OnGraphUpgradeComplete, m_asset, exitStatus == IState::ExitStatus::Skipped); + UpgradeNotificationsBus::Broadcast(&UpgradeNotifications::OnGraphUpgradeComplete, m_asset, exitStatus == IState::ExitStatus::Skipped); m_asset = {}; } diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h index 09869ba2eb..7c47c77b3e 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h @@ -236,8 +236,6 @@ namespace ScriptCanvasEditor static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - using Bus = AZ::EBus; - virtual void OnUpgradeStart() {} virtual void OnUpgradeComplete() {} virtual void OnUpgradeCancelled() {} @@ -245,6 +243,5 @@ namespace ScriptCanvasEditor virtual void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) { (void)skipped; } }; - - + using UpgradeNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp index 390dbaf0fb..4602fe5a87 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.cpp @@ -829,12 +829,12 @@ namespace ScriptCanvasEditor NodePaletteModel::NodePaletteModel() : m_paletteId(AZ::Entity::MakeId()) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); } NodePaletteModel::~NodePaletteModel() { - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); DisconnectLambdas(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h index b27bfd97f1..f92ab5142e 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h @@ -61,7 +61,7 @@ namespace ScriptCanvasEditor class NodePaletteModel : public GraphCanvas::CategorizerInterface - , UpgradeNotifications::Bus::Handler + , UpgradeNotificationsBus::Handler { public: typedef AZStd::unordered_map< ScriptCanvas::NodeTypeIdentifier, NodePaletteModelInformation* > NodePaletteRegistry; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp index 96b0ac353f..b60b4f2924 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp @@ -148,7 +148,7 @@ namespace ScriptCanvasEditor , m_assetModel(assetModel) , m_categorizer(nodePaletteModel) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); if (m_assetModel) { @@ -166,7 +166,7 @@ namespace ScriptCanvasEditor AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); AZ::Data::AssetBus::MultiHandler::BusDisconnect(); - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h index 7b2e9293bd..16beb5b79e 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h @@ -57,7 +57,7 @@ namespace ScriptCanvasEditor : public GraphCanvas::NodePaletteTreeItem , AzFramework::AssetCatalogEventBus::Handler , AZ::Data::AssetBus::MultiHandler - , UpgradeNotifications::Bus::Handler + , UpgradeNotificationsBus::Handler , AZ::SystemTickBus::Handler { public: diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index 1eeb2dadfb..afc413a425 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -98,19 +98,19 @@ namespace ScriptCanvasEditor class ScriptCanvasAssetBrowserModel : public AzToolsFramework::AssetBrowser::AssetBrowserFilterModel - , private UpgradeNotifications::Bus::Handler + , private UpgradeNotificationsBus::Handler { public: explicit ScriptCanvasAssetBrowserModel(QObject* parent = nullptr) : AzToolsFramework::AssetBrowser::AssetBrowserFilterModel(parent) { - UpgradeNotifications::Bus::Handler::BusConnect(); + UpgradeNotificationsBus::Handler::BusConnect(); } ~ScriptCanvasAssetBrowserModel() override { - UpgradeNotifications::Bus::Handler::BusDisconnect(); + UpgradeNotificationsBus::Handler::BusDisconnect(); } void OnUpgradeStart() override diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index c8353b1d25..f3ea605451 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -52,9 +52,9 @@ namespace ScriptCanvasEditor m_view->tableWidget->setColumnWidth(3, 22); m_view->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); m_view->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); - connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnScanButtonPress); - connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnCloseButtonPress); - connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnUpgradeButtonPress); + connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnButtonPressScan); + connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnButtonPressClose); + connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnButtonPressUpgrade); m_view->progressBar->setValue(0); m_view->progressBar->setVisible(false); @@ -87,12 +87,12 @@ namespace ScriptCanvasEditor LogBus::Broadcast(&LogTraits::Clear); } - void Controller::OnCloseButtonPress() + void Controller::OnButtonPressClose() { reject(); } - void Controller::OnScanButtonPress() + void Controller::OnButtonPressScan() { // \todo move to another file auto isUpToDate = [this](AZ::Data::Asset asset) @@ -128,6 +128,148 @@ namespace ScriptCanvasEditor ModelRequestsBus::Broadcast(&ModelRequestsTraits::Scan, config); } + void Controller::OnButtonPressUpgrade() + { + auto simpleUpdate = [this](AZ::Data::Asset asset) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); + AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" + , azrtti_typeid().template ToString().c_str()); + if (!scriptCanvasAsset) + { + return; + } + + AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); + AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); + if (!scriptCanvasEntity) + { + return; + } + + AZ::Entity* queryEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); + if (queryEntity) + { + if (queryEntity->GetState() == AZ::Entity::State::Active) + { + queryEntity->Deactivate(); + } + + scriptCanvasEntity = queryEntity; + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) + { + scriptCanvasEntity->Init(); + } + + if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) + { + scriptCanvasEntity->Activate(); + } + + AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); + auto graphComponent = scriptCanvasEntity->FindComponent(); + AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); + if (graphComponent) + { + graphComponent->UpgradeGraph + ( asset + , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate + , m_view->verbose->isChecked()); + } + } + }; + + auto onReadyOnlyFile = [this]()->bool + { + int result = QMessageBox::No; + QMessageBox mb + ( QMessageBox::Warning + , QObject::tr("Failed to Save Upgraded File") + , QObject::tr("The upgraded file could not be saved because the file is read only.\n" + "Do you want to make it writeable and overwrite it?") + , QMessageBox::YesToAll | QMessageBox::Yes | QMessageBox::No + , this); + result = mb.exec(); + return result == QMessageBox::YesToAll; + }; + + ModifyConfiguration config; + config.modification = simpleUpdate; + config.onReadOnlyFile = onReadyOnlyFile; + config.backupGraphBeforeModification = m_view->makeBackupCheckbox->isChecked(); + ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); + } + + void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) + { + QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + SetRowBusy(row); + } + } + } + + void Controller::OnUpgradeModificationEnd + ( [[maybe_unused]] const ModifyConfiguration& config + , const AZ::Data::AssetInfo& info + , ModificationResult result) + { + if (result.errorMessage.empty()) + { + VE_LOG("Successfully modified %s", result.assetInfo.m_relativePath.c_str()); + } + else + { + VE_LOG("Failed to modify %s: %s", result.assetInfo.m_relativePath.c_str(), result.errorMessage.data()); + } + + QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + if (!items.isEmpty()) + { + for (auto* item : items) + { + int row = item->row(); + + if (result.errorMessage.empty()) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + } + } + } + + m_view->progressBar->setVisible(true); + ++m_handledAssetCount; + m_view->progressBar->setValue(m_handledAssetCount); + } + + void Controller::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool skipped) + { + ModificationResult result; + result.asset = asset; + AZ::Data::AssetCatalogRequestBus::BroadcastResult + ( result.assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, asset.GetId()); + + if (skipped) + { + result.errorMessage = "Failed in editor upgrade state machine - check logs"; + } + + ModificationNotificationsBus::Broadcast(&ModificationNotificationsTraits::ModificationComplete, result); + } + void Controller::OnScanBegin(size_t assetCount) { m_handledAssetCount = 0; @@ -264,68 +406,6 @@ namespace ScriptCanvasEditor OnScannedGraph(info, Filtered::No); } - void Controller::OnUpgradeButtonPress() - { - auto simpleUpdate = [this](AZ::Data::Asset asset) - { - if (asset.GetType() == azrtti_typeid()) - { - ScriptCanvasAsset* scriptCanvasAsset = asset.GetAs(); - AZ_Assert(scriptCanvasAsset, "Unable to get the asset of ScriptCanvasAsset, but received type: %s" - , azrtti_typeid().template ToString().c_str()); - if (!scriptCanvasAsset) - { - return; - } - - AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity(); - AZ_Assert(scriptCanvasEntity, "View::UpgradeGraph The Script Canvas asset must have a valid entity"); - if (!scriptCanvasEntity) - { - return; - } - - AZ::Entity* queryEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId()); - if (queryEntity) - { - if (queryEntity->GetState() == AZ::Entity::State::Active) - { - queryEntity->Deactivate(); - } - - scriptCanvasEntity = queryEntity; - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed) - { - scriptCanvasEntity->Init(); - } - - if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init) - { - scriptCanvasEntity->Activate(); - } - - AZ_Assert(scriptCanvasEntity->GetState() == AZ::Entity::State::Active, "Graph entity is not active"); - auto graphComponent = scriptCanvasEntity->FindComponent(); - AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component"); - if (graphComponent) - { - graphComponent->UpgradeGraph - ( asset - , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate - , m_view->verbose->isChecked()); - } - } - }; - - ModifyConfiguration config; - config.modification = simpleUpdate; - config.backupGraphBeforeModification = m_view->makeBackupCheckbox->isChecked(); - ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); - } - void Controller::OnUpgradeBegin ( const ModifyConfiguration& config , [[maybe_unused]] const AZStd::vector& assets) @@ -359,8 +439,13 @@ namespace ScriptCanvasEditor m_view->spinner->SetBusyIconSize(16); } - void Controller::OnUpgradeComplete() + void Controller::OnUpgradeComplete(const ModificationResults& result) { + QString spinnerText = QStringLiteral("Upgrade Complete - "); + spinnerText.append(QString::asprintf(" - Upgraded: %zu, Failed: %zu" + , result.m_successes.size() + , result.m_failures.size())); + m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index f99aaf5466..1b8b109759 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -41,7 +41,7 @@ namespace ScriptCanvasEditor //! Handles display change notifications, handles state change notifications, sends control requests class Controller : public AzQtComponents::StyledDialog - , private UpgradeNotifications::Bus::Handler + , private UpgradeNotificationsBus::Handler , private ModelNotificationsBus::Handler { Q_OBJECT @@ -62,10 +62,12 @@ namespace ScriptCanvasEditor void AddLogEntries(); - void OnCloseButtonPress(); - void OnScanButtonPress(); - void OnUpgradeButtonPress(); + void OnButtonPressClose(); + void OnButtonPressScan(); + void OnButtonPressUpgrade(); + void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped) override; + void OnScanBegin(size_t assetCount) override; void OnScanComplete(const ScanResult& result) override; void OnScanFilteredGraph(const AZ::Data::AssetInfo& info) override; @@ -77,7 +79,7 @@ namespace ScriptCanvasEditor // for single operation UI updates, just check the assets size, or note it on the request void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) override; - void OnUpgradeComplete() override; + void OnUpgradeComplete(const ModificationResults& results) override; void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) override; void OnUpgradeDependencySortBegin ( const ModifyConfiguration& config @@ -86,6 +88,8 @@ namespace ScriptCanvasEditor ( const ModifyConfiguration& config , const AZStd::vector& assets , const AZStd::vector& sortedOrder) override; + void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) override; + void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) override; void SetSpinnerIsBusy(bool isBusy); void SetRowBusy(int index); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp index 7a7c4fe5a3..f067feeca4 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp @@ -6,8 +6,15 @@ * */ +#include +#include #include +#include +#include +#include +#include #include +#include namespace FileSaverCpp { @@ -44,6 +51,183 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + FileSaver::FileSaver + ( AZStd::function onReadOnlyFile + , AZStd::function onComplete) + : m_onReadOnlyFile(onReadOnlyFile) + , m_onComplete(onComplete) + {} + void FileSaver::PerformMove + ( AZStd::string tmpFileName + , AZStd::string target + , size_t remainingAttempts) + { + FileSaverCpp::FileEventHandler fileEventHandler; + + if (remainingAttempts == 0) + { + AZ::SystemTickBus::QueueFunction([this, tmpFileName]() + { + FileSaveResult result; + result.fileSaveError = "Failed to move updated file from temporary location to tmpFileName destination"; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + }); + } + else if (remainingAttempts == 2) + { + auto streamer = AZ::Interface::Get(); + // before the last attempt, flush all the caches + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCaches(); + streamer->SetRequestCompleteCallback(flushRequest + , [this, remainingAttempts, tmpFileName, target]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // One last try + AZ::SystemTickBus::QueueFunction( + [this, remainingAttempts, tmpFileName, target]() { PerformMove(tmpFileName, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + else + { + // the actual move attempt + auto moveResult = AZ::IO::SmartMove(tmpFileName.c_str(), target.c_str()); + if (moveResult.GetResultCode() == AZ::IO::ResultCode::Success) + { + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + // Bump the slice asset up in the asset processor's queue. + AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, target.c_str()); + AZ::SystemTickBus::QueueFunction([this, tmpFileName]() + { + FileSaveResult result; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + }); + } + else + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "moving converted file to tmpFileName destination failed: %s, trying again", target.c_str()); + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(target.c_str()); + streamer->SetRequestCompleteCallback(flushRequest, [this, tmpFileName, target, remainingAttempts]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + // Continue saving. + AZ::SystemTickBus::QueueFunction([this, tmpFileName, target, remainingAttempts]() { PerformMove(tmpFileName, target, remainingAttempts - 1); }); + }); + streamer->QueueRequest(flushRequest); + } + } + } + + void FileSaver::OnSourceFileReleased(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, relativePath, fullPath); + AZStd::string tmpFileName; + // here we are saving the graph to a temp file instead of the original file and then copying the temp file to the original file. + // This ensures that AP will not a get a file change notification on an incomplete graph file causing it to fail processing. Temp files are ignored by AP. + if (!AZ::IO::CreateTempFileName(fullPath.c_str(), tmpFileName)) + { + FileSaveResult result; + result.fileSaveError = "Failure to create temporary file name"; + m_onComplete(result); + return; + } + + bool tempSavedSucceeded = false; + AZ::IO::FileIOStream fileStream(tmpFileName.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText); + if (fileStream.IsOpen()) + { + if (asset.GetType() == azrtti_typeid()) + { + ScriptCanvasEditor::ScriptCanvasAssetHandler handler; + tempSavedSucceeded = handler.SaveAssetData(asset, &fileStream); + } + + fileStream.Close(); + } + + if (!tempSavedSucceeded) + { + FileSaveResult result; + result.fileSaveError = "Save asset data to temporary file failed"; + m_onComplete(result); + return; + } + + AzToolsFramework::SourceControlCommandBus::Broadcast + ( &AzToolsFramework::SourceControlCommandBus::Events::RequestEdit + , fullPath.c_str() + , true + , [this, fullPath, tmpFileName]([[maybe_unused]] bool success, const AzToolsFramework::SourceControlFileInfo& info) + { + constexpr const size_t k_maxAttemps = 10; + + if (!info.IsReadOnly()) + { + PerformMove(tmpFileName, fullPath, k_maxAttemps); + } + else if (m_onReadOnlyFile && m_onReadOnlyFile()) + { + AZ::IO::SystemFile::SetWritable(info.m_filePath.c_str(), true); + PerformMove(tmpFileName, fullPath, k_maxAttemps); + } + else + { + FileSaveResult result; + result.fileSaveError = "Source file was and remained read-only"; + result.tempFileRemovalError = RemoveTempFile(tmpFileName); + m_onComplete(result); + } + }); + } + + AZStd::string FileSaver::RemoveTempFile(AZStd::string_view tempFile) + { + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + if (!fileIO) + { + return "GraphUpgradeComplete: No FileIO instance"; + } + + if (fileIO->Exists(tempFile.data()) && !fileIO->Remove(tempFile.data())) + { + return AZStd::string::format("Failed to remove temporary file: %s", tempFile.data()); + } + + return ""; + } + + void FileSaver::Save(AZ::Data::Asset asset) + { + AZStd::string relativePath, fullPath; + AZ::Data::AssetCatalogRequestBus::BroadcastResult(relativePath, &AZ::Data::AssetCatalogRequests::GetAssetPathById, asset.GetId()); + bool fullPathFound = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + (fullPathFound + , &AzToolsFramework::AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath + , relativePath, fullPath); + + if (!fullPathFound) + { + FileSaveResult result; + result.fileSaveError = "Full source path not found"; + m_onComplete(result); + } + else + { + auto streamer = AZ::Interface::Get(); + AZ::IO::FileRequestPtr flushRequest = streamer->FlushCache(fullPath); + streamer->SetRequestCompleteCallback(flushRequest, [this, asset]([[maybe_unused]] AZ::IO::FileRequestHandle request) + { + this->OnSourceFileReleased(asset); + }); + streamer->QueueRequest(flushRequest); + } + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h index e1ab92acbc..dd333927ed 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.h @@ -14,10 +14,35 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + struct FileSaveResult + { + AZStd::string fileSaveError; + AZStd::string tempFileRemovalError; + }; + class FileSaver { public: AZ_CLASS_ALLOCATOR(FileSaver, AZ::SystemAllocator, 0); + + FileSaver + ( AZStd::function onReadOnlyFile + , AZStd::function onComplete); + + void Save(AZ::Data::Asset asset); + + private: + AZStd::function m_onComplete; + AZStd::function m_onReadOnlyFile; + + void OnSourceFileReleased(AZ::Data::Asset asset); + + void PerformMove + ( AZStd::string source + , AZStd::string target + , size_t remainingAttempts); + + AZStd::string RemoveTempFile(AZStd::string_view tempFile); }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index ad9d39cb98..b88d147d6d 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -103,7 +103,7 @@ namespace ScriptCanvasEditor void Model::OnModificationComplete() { - ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanComplete, m_scanner->GetResult()); + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeComplete, m_modifier->GetResult()); m_modifier.reset(); m_scanner.reset(); Idle(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index 72ab210e37..637c77648a 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -57,7 +57,8 @@ namespace ScriptCanvasEditor State m_state = State::Idle; Log m_log; - + + // these two are managed by the same class because the modifer will only operate on the results of the scanner AZStd::unique_ptr m_modifier; AZStd::unique_ptr m_scanner; AZStd::unique_ptr m_settingsCache; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index 86e1b47b18..6eedba647f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -17,11 +17,27 @@ namespace ScriptCanvasEditor struct ModifyConfiguration { AZStd::function)> modification; + AZStd::function onReadOnlyFile; bool modifySingleAsset = false; bool backupGraphBeforeModification = false; bool successfulDependencyUpgradeRequired = true; }; + struct ModificationResult + { + AZ::Data::Asset asset; + AZ::Data::AssetInfo assetInfo; + AZStd::string errorMessage; + }; + + class ModificationNotificationsTraits + : public AZ::EBusTraits + { + public: + virtual void ModificationComplete(const ModificationResult& result) = 0; + }; + using ModificationNotificationsBus = AZ::EBus; + struct ScanConfiguration { AZStd::function)> filter; @@ -37,9 +53,10 @@ namespace ScriptCanvasEditor }; using ModelRequestsBus = AZ::EBus; - struct ModificationResult + struct ModificationResults { - + AZStd::vector m_successes; + AZStd::vector m_failures; }; struct ScanResult @@ -67,9 +84,7 @@ namespace ScriptCanvasEditor virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; virtual void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) = 0; - virtual void OnUpgradeComplete() = 0; - // virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config) = 0; - // virtual void OnUpgradeModification(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, Result result) = 0; + virtual void OnUpgradeComplete(const ModificationResults& results) = 0; virtual void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) = 0; virtual void OnUpgradeDependencySortBegin ( const ModifyConfiguration& config @@ -78,6 +93,8 @@ namespace ScriptCanvasEditor ( const ModifyConfiguration& config , const AZStd::vector& assets , const AZStd::vector& sortedOrder) = 0; + virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) = 0; + virtual void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) = 0; }; using ModelNotificationsBus = AZ::EBus; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 5656d6cf6d..4096508b8b 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -30,6 +30,7 @@ namespace ScriptCanvasEditor , m_assets(assets) , m_onComplete(onComplete) { + AZ_Assert(m_config.modification, "No modification function provided"); ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeBegin, modification, m_assets); AZ::SystemTickBus::Handler::BusConnect(); } @@ -52,6 +53,11 @@ namespace ScriptCanvasEditor return iter->second; } + const ModificationResults& Modifier::GetResult() const + { + return m_results; + } + void Modifier::GatherDependencies() { AZ::SerializeContext* serializeContext{}; @@ -140,64 +146,105 @@ namespace ScriptCanvasEditor } } - void Modifier::OnSystemTick() + void Modifier::ModificationComplete(const ModificationResult& result) { - switch (m_state) + m_result = result; + + if (result.errorMessage.empty()) { - case State::GatheringDependencies: - TickGatherDependencies(); - break; + SaveModifiedGraph(result); + } + else + { + ReportModificationError(result.errorMessage); + } + } - case State::ModifyingGraphs: - TickUpdateGraph(); - break; + void Modifier::ModifyCurrentAsset() + { + m_result = {}; + m_result.assetInfo = GetCurrentAsset(); + + ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeModificationBegin, m_config, GetCurrentAsset()); + + if (auto asset = LoadAsset()) + { + ModificationNotificationsBus::Handler::BusConnect(); + m_modifyState = ModifyState::InProgress; + m_config.modification(asset); + } + else + { + ReportModificationError("Failed to load during modification"); } } - const AZStd::unordered_set* Modifier::Sorter::GetDependencies(size_t index) const + void Modifier::ModifyNextAsset() { - auto iter = modifier->m_dependencies.find(index); - return iter != modifier->m_dependencies.end() ? &iter->second : nullptr; + ModelNotificationsBus::Broadcast + ( &ModelNotificationsTraits::OnUpgradeModificationEnd, m_config, GetCurrentAsset(), m_result); + m_modifyState = ModifyState::Idle; + ++m_assetIndex; + m_result = {}; } - void Modifier::Sorter::Sort() + void Modifier::ReportModificationError(AZStd::string_view report) { - for (size_t index = 0; index != modifier->m_assets.size(); ++index) - { - Visit(index); - } + m_result.asset = {}; + m_result.errorMessage = report; + m_results.m_failures.push_back(m_result); + ModifyNextAsset(); } - void Modifier::Sorter::Visit(size_t index) + void Modifier::ReportModificationSuccess() { - if (markedPermanent.contains(index)) + m_results.m_successes.push_back(m_result.assetInfo); + ModifyNextAsset(); + } + + void Modifier::OnFileSaveComplete(const FileSaveResult& result) + { + if (!result.tempFileRemovalError.empty()) { - return; + VE_LOG + ( "Temporary file not removed for %s: %s" + , m_result.assetInfo.m_relativePath.c_str() + , result.tempFileRemovalError.c_str()); } - if (markedTemporary.contains(index)) + m_fileSaver.reset(); + + if (result.fileSaveError.empty()) { - AZ_Error - ( ScriptCanvas::k_VersionExplorerWindow.data() - , false - , "Modifier: Dependency sort has failed during, circular dependency detected for Asset: %s" - , modifier->GetCurrentAsset().m_relativePath.c_str()); - return; + ReportModificationSuccess(); } + else + { + ReportModificationError(result.fileSaveError); + } + } - markedTemporary.insert(index); - - if (auto dependencies = GetDependencies(index)) + void Modifier::OnSystemTick() + { + switch (m_state) { - for (auto& dependency : *dependencies) - { - Visit(dependency); - } + case State::GatheringDependencies: + TickGatherDependencies(); + break; + + case State::ModifyingGraphs: + TickUpdateGraph(); + break; } + } - markedTemporary.erase(index); - markedPermanent.insert(index); - modifier->m_dependencyOrderedAssetIndicies.push_back(index); + void Modifier::SaveModifiedGraph(const ModificationResult& result) + { + m_modifyState = ModifyState::Saving; + m_fileSaver = AZStd::make_unique + ( m_config.onReadOnlyFile + , [this](const FileSaveResult& result) { OnFileSaveComplete(result); }); + m_fileSaver->Save(result.asset); } void Modifier::SortGraphsByDependencies() @@ -208,6 +255,11 @@ namespace ScriptCanvasEditor sorter.Sort(); } + ModificationResults&& Modifier::TakeResult() + { + return AZStd::move(m_results); + } + void Modifier::TickGatherDependencies() { if (m_assetIndex == 0) @@ -260,8 +312,69 @@ namespace ScriptCanvasEditor void Modifier::TickUpdateGraph() { + if (m_assetIndex == m_assets.size()) + { + VE_LOG("Modifier: Complete."); + AZ::SystemTickBus::Handler::BusDisconnect(); + + if (m_onComplete) + { + m_onComplete(); + } + } + else + { + if (m_modifyState == ModifyState::Idle) + { + ModifyCurrentAsset(); + } + } + } + + const AZStd::unordered_set* Modifier::Sorter::GetDependencies(size_t index) const + { + auto iter = modifier->m_dependencies.find(index); + return iter != modifier->m_dependencies.end() ? &iter->second : nullptr; + } + void Modifier::Sorter::Sort() + { + for (size_t index = 0; index != modifier->m_assets.size(); ++index) + { + Visit(index); + } } + void Modifier::Sorter::Visit(size_t index) + { + if (markedPermanent.contains(index)) + { + return; + } + + if (markedTemporary.contains(index)) + { + AZ_Error + (ScriptCanvas::k_VersionExplorerWindow.data() + , false + , "Modifier: Dependency sort has failed during, circular dependency detected for Asset: %s" + , modifier->GetCurrentAsset().m_relativePath.c_str()); + return; + } + + markedTemporary.insert(index); + + if (auto dependencies = GetDependencies(index)) + { + for (auto& dependency : *dependencies) + { + Visit(dependency); + } + } + + markedTemporary.erase(index); + markedPermanent.insert(index); + modifier->m_dependencyOrderedAssetIndicies.push_back(index); + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index e0b1f1a289..f318627cbe 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -8,9 +8,10 @@ #pragma once -#include -#include #include +#include +#include +#include namespace ScriptCanvasEditor { @@ -18,6 +19,7 @@ namespace ScriptCanvasEditor { class Modifier : private AZ::SystemTickBus::Handler + , private ModificationNotificationsBus::Handler { public: AZ_CLASS_ALLOCATOR(Modifier, AZ::SystemAllocator, 0); @@ -27,6 +29,9 @@ namespace ScriptCanvasEditor , AZStd::vector&& assets , AZStd::function onComplete); + const ModificationResults& GetResult() const; + ModificationResults&& TakeResult(); + private: friend class Sorter; @@ -48,7 +53,16 @@ namespace ScriptCanvasEditor ModifyingGraphs }; + enum class ModifyState + { + Idle, + InProgress, + Saving, + }; + + // the two states reside in this class because the modification is only complete if the new source file saves out State m_state = State::GatheringDependencies; + ModifyState m_modifyState = ModifyState::Idle; size_t m_assetIndex = 0; AZStd::function m_onComplete; // asset infos in scanned order @@ -61,12 +75,21 @@ namespace ScriptCanvasEditor AZStd::vector m_failures; ModifyConfiguration m_config; ModificationResult m_result; + ModificationResults m_results; + AZStd::unique_ptr m_fileSaver; void GatherDependencies(); const AZ::Data::AssetInfo& GetCurrentAsset() const; AZStd::unordered_set& GetOrCreateDependencyIndexSet(); AZ::Data::Asset LoadAsset(); + void ModifyCurrentAsset(); + void ModifyNextAsset(); + void ModificationComplete(const ModificationResult& result) override; + void ReportModificationError(AZStd::string_view report); + void ReportModificationSuccess(); + void SaveModifiedGraph(const ModificationResult& result); void SortGraphsByDependencies(); + void OnFileSaveComplete(const FileSaveResult& result); void OnSystemTick() override; void TickGatherDependencies(); void TickUpdateGraph(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h index 8b4dd69c82..fb030845c7 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.h @@ -25,7 +25,6 @@ namespace ScriptCanvasEditor Scanner(const ScanConfiguration& config, AZStd::function onComplete); const ScanResult& GetResult() const; - ScanResult&& TakeResult(); private: From 9196e98ee6e2057f3543525fad2a33e7d81cfb30 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Wed, 15 Sep 2021 17:03:16 -0700 Subject: [PATCH 017/226] update reporting and logging and make bug fixes Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Editor/Components/GraphUpgrade.cpp | 4 +- .../ScriptCanvas/Bus/EditorScriptCanvasBus.h | 14 ---- .../ScriptCanvas/Components/GraphUpgrade.h | 5 ++ .../Code/Editor/View/Windows/MainWindow.cpp | 18 ++--- .../Windows/Tools/UpgradeTool/Controller.cpp | 15 ++-- .../Windows/Tools/UpgradeTool/Controller.h | 11 +-- .../View/Windows/Tools/UpgradeTool/Model.cpp | 9 +++ .../View/Windows/Tools/UpgradeTool/Model.h | 4 + .../Windows/Tools/UpgradeTool/ModelTraits.h | 59 ++++++++------- .../Windows/Tools/UpgradeTool/Modifier.cpp | 9 ++- .../View/Windows/Tools/UpgradeTool/Modifier.h | 4 +- .../Windows/Tools/UpgradeTool/Scanner.cpp | 2 +- .../Tools/UpgradeTool/UpgradeHelper.cpp | 74 ++++++++++--------- 13 files changed, 122 insertions(+), 106 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp index 2754cc9777..0e5f11fa40 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/GraphUpgrade.cpp @@ -519,7 +519,7 @@ namespace ScriptCanvasEditor if (validationResults.HasErrors()) { - AZ::Interface::Get()->GraphNeedsManualUpgrade(sm->m_asset.GetId()); + sm->MarkError("Failed to Parse"); for (auto& err : validationResults.GetEvents()) { @@ -735,7 +735,7 @@ namespace ScriptCanvasEditor { AZ::SystemTickBus::Handler::BusDisconnect(); - OnComplete(exitStatus); + OnComplete(m_error.empty() ? exitStatus : IState::ExitStatus::Skipped); } } diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h index 7c47c77b3e..02edce4974 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h @@ -215,20 +215,6 @@ namespace ScriptCanvasEditor using EditorLoggingComponentNotificationBus = AZ::EBus; - class IUpgradeRequests - { - public: - AZ_TYPE_INFO(IUpgradeRequests, "{D25318F2-4DDA-4E76-98CB-6D561BB6234D}"); - - using AssetList = AZStd::list; - - virtual void ClearGraphsThatNeedUpgrade() = 0; - virtual void GraphNeedsManualUpgrade(const AZ::Data::AssetId&) = 0; - virtual const AZStd::vector& GetGraphsThatNeedManualUpgrade() const = 0; - virtual bool IsUpgrading() = 0; - virtual void SetIsUpgrading(bool isUpgrading) = 0; - }; - class UpgradeNotifications : public AZ::EBusTraits { diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h index 89ee0f3b55..f67bc11244 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/GraphUpgrade.h @@ -133,18 +133,23 @@ namespace ScriptCanvasEditor bool GetVerbose() const; + const AZStd::string GetError() const { return m_error; } + void SetVerbose(bool isVerbose); const AZStd::string& GetDebugPrefix() const; void SetDebugPrefix(AZStd::string_view); + void MarkError(AZStd::string_view error) { m_error = error; } + AZStd::shared_ptr m_currentState = nullptr; AZStd::vector> m_states; private: bool m_isVerbose = true; AZStd::string m_debugPrefix; + AZStd::string m_error; }; //! This state machine will collect and share a variety of data from the EditorGraph diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index ee539aa5fa..4da806f2e8 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -3435,18 +3435,18 @@ namespace ScriptCanvasEditor void MainWindow::RunUpgradeTool() { + using namespace VersionExplorer; auto versionExplorer = aznew VersionExplorer::Controller(this); versionExplorer->exec(); - // update and fix this - // Manual correction -// size_t assetsThatNeedManualInspection = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade().size(); -// // If there are graphs that need manual correction, show the helper -// if (assetsThatNeedManualInspection > 0) -// { -// UpgradeHelper* upgradeHelper = new UpgradeHelper(this); -// upgradeHelper->show(); -// } + const ModificationResults* result = nullptr; + ModelRequestsBus::BroadcastResult(result, &ModelRequestsTraits::GetResults); + if (result && !result->m_failures.empty()) + { + // If there are graphs that need manual correction, show the helper + UpgradeHelper* upgradeHelper = new UpgradeHelper(this); + upgradeHelper->show(); + } delete versionExplorer; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index f3ea605451..9d7224373f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -58,6 +58,7 @@ namespace ScriptCanvasEditor m_view->progressBar->setValue(0); m_view->progressBar->setVisible(false); + UpgradeNotificationsBus::Handler::BusConnect(); ModelNotificationsBus::Handler::BusConnect(); } @@ -78,8 +79,8 @@ namespace ScriptCanvasEditor for (auto& entry : *logs) { - auto line = "\n" + entry; - textCursor.insertText(line.c_str()); + textCursor.insertText("\n"); + textCursor.insertText(entry.c_str()); } scrollBar->setValue(scrollBar->maximum()); @@ -253,6 +254,7 @@ namespace ScriptCanvasEditor m_view->progressBar->setVisible(true); ++m_handledAssetCount; m_view->progressBar->setValue(m_handledAssetCount); + AddLogEntries(); } void Controller::OnGraphUpgradeComplete(AZ::Data::Asset& asset, bool skipped) @@ -408,7 +410,7 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeBegin ( const ModifyConfiguration& config - , [[maybe_unused]] const AZStd::vector& assets) + , [[maybe_unused]] const WorkingAssets& assets) { for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) { @@ -447,6 +449,7 @@ namespace ScriptCanvasEditor , result.m_failures.size())); m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); + AddLogEntries(); } void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) @@ -472,11 +475,12 @@ namespace ScriptCanvasEditor m_view->progressBar->setVisible(true); ++m_handledAssetCount; m_view->progressBar->setValue(m_handledAssetCount); + AddLogEntries(); } void Controller::OnUpgradeDependencySortBegin ( [[maybe_unused]] const ModifyConfiguration& config - , const AZStd::vector& assets) + , const WorkingAssets& assets) { m_handledAssetCount = 0; m_view->progressBar->setVisible(true); @@ -502,7 +506,7 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeDependencySortEnd ( [[maybe_unused]] const ModifyConfiguration& config - , const AZStd::vector& assets + , const WorkingAssets& assets , [[maybe_unused]] const AZStd::vector& sortedOrder) { m_handledAssetCount = 0; @@ -522,6 +526,7 @@ namespace ScriptCanvasEditor QString spinnerText = QStringLiteral("Upgrade in progress - gathering dependencies is complete"); m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); + AddLogEntries(); } void Controller::SetRowBusy(int index) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 1b8b109759..0fb3ce1bf4 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -50,7 +50,7 @@ namespace ScriptCanvasEditor AZ_CLASS_ALLOCATOR(Controller, AZ::SystemAllocator, 0); explicit Controller(QWidget* parent = nullptr); - + private: static constexpr int ColumnAsset = 0; static constexpr int ColumnAction = 1; @@ -61,7 +61,6 @@ namespace ScriptCanvasEditor int m_handledAssetCount = 0; void AddLogEntries(); - void OnButtonPressClose(); void OnButtonPressScan(); void OnButtonPressUpgrade(); @@ -78,15 +77,13 @@ namespace ScriptCanvasEditor void OnScannedGraphResult(const AZ::Data::AssetInfo& info); // for single operation UI updates, just check the assets size, or note it on the request - void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) override; + void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override; void OnUpgradeComplete(const ModificationResults& results) override; void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) override; - void OnUpgradeDependencySortBegin - ( const ModifyConfiguration& config - , const AZStd::vector& assets) override; + void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) override; void OnUpgradeDependencySortEnd ( const ModifyConfiguration& config - , const AZStd::vector& assets + , const WorkingAssets& assets , const AZStd::vector& sortedOrder) override; void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) override; void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) override; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index b88d147d6d..ed17293ab7 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -61,10 +61,16 @@ namespace ScriptCanvasEditor ScriptCanvas::Grammar::g_saveRawTranslationOuputToFile = false; } + const ModificationResults* Model::GetResults() + { + return !IsWorking() ? &m_modResults : nullptr; + } + void Model::Idle() { m_state = State::Idle; m_keepEditorAlive.reset(); + m_log.Deactivate(); } bool Model::IsReadyToModify() const @@ -95,7 +101,9 @@ namespace ScriptCanvasEditor return; } + m_modResults = {}; m_state = State::Modifying; + m_log.Activate(); m_keepEditorAlive = AZStd::make_unique(); auto results = m_scanner->TakeResult(); m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); }); @@ -124,6 +132,7 @@ namespace ScriptCanvasEditor } m_state = State::Scanning; + m_log.Activate(); m_keepEditorAlive = AZStd::make_unique(); m_scanner = AZStd::make_unique(config, [this](){ OnScanComplete(); }); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index 637c77648a..e11f8857e7 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -43,6 +43,8 @@ namespace ScriptCanvasEditor Model(); + const ModificationResults* GetResults() override; + void Modify(const ModifyConfiguration& modification) override; void Scan(const ScanConfiguration& config) override; @@ -64,6 +66,8 @@ namespace ScriptCanvasEditor AZStd::unique_ptr m_settingsCache; AZStd::unique_ptr m_keepEditorAlive; + ModificationResults m_modResults; + void CacheSettings(); void Idle(); bool IsReadyToModify() const; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index 6eedba647f..026748c344 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -14,6 +14,14 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { + struct WorkingAsset + { + AZ::Data::Asset asset; + AZ::Data::AssetInfo info; + }; + + using WorkingAssets = AZStd::vector; + struct ModifyConfiguration { AZStd::function)> modification; @@ -30,13 +38,11 @@ namespace ScriptCanvasEditor AZStd::string errorMessage; }; - class ModificationNotificationsTraits - : public AZ::EBusTraits + struct ModificationResults { - public: - virtual void ModificationComplete(const ModificationResult& result) = 0; + AZStd::vector m_successes; + AZStd::vector m_failures; }; - using ModificationNotificationsBus = AZ::EBus; struct ScanConfiguration { @@ -44,25 +50,10 @@ namespace ScriptCanvasEditor bool reportFilteredGraphs = false; }; - class ModelRequestsTraits - : public AZ::EBusTraits - { - public: - virtual void Modify(const ModifyConfiguration& modification) = 0; - virtual void Scan(const ScanConfiguration& filter) = 0; - }; - using ModelRequestsBus = AZ::EBus; - - struct ModificationResults - { - AZStd::vector m_successes; - AZStd::vector m_failures; - }; - struct ScanResult { AZStd::vector m_catalogAssets; - AZStd::vector m_unfiltered; + WorkingAssets m_unfiltered; AZStd::vector m_filteredAssets; AZStd::vector m_loadErrors; }; @@ -73,6 +64,24 @@ namespace ScriptCanvasEditor Success }; + class ModificationNotificationsTraits + : public AZ::EBusTraits + { + public: + virtual void ModificationComplete(const ModificationResult& result) = 0; + }; + using ModificationNotificationsBus = AZ::EBus; + + class ModelRequestsTraits + : public AZ::EBusTraits + { + public: + virtual const ModificationResults* GetResults() = 0; + virtual void Modify(const ModifyConfiguration& modification) = 0; + virtual void Scan(const ScanConfiguration& filter) = 0; + }; + using ModelRequestsBus = AZ::EBus; + class ModelNotificationsTraits : public AZ::EBusTraits { @@ -83,15 +92,13 @@ namespace ScriptCanvasEditor virtual void OnScanLoadFailure(const AZ::Data::AssetInfo& info) = 0; virtual void OnScanUnFilteredGraph(const AZ::Data::AssetInfo& info) = 0; - virtual void OnUpgradeBegin(const ModifyConfiguration& config, const AZStd::vector& assets) = 0; + virtual void OnUpgradeBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0; virtual void OnUpgradeComplete(const ModificationResults& results) = 0; virtual void OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) = 0; - virtual void OnUpgradeDependencySortBegin - ( const ModifyConfiguration& config - , const AZStd::vector& assets) = 0; + virtual void OnUpgradeDependencySortBegin(const ModifyConfiguration& config, const WorkingAssets& assets) = 0; virtual void OnUpgradeDependencySortEnd ( const ModifyConfiguration& config - , const AZStd::vector& assets + , const WorkingAssets& assets , const AZStd::vector& sortedOrder) = 0; virtual void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) = 0; virtual void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) = 0; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 4096508b8b..1bd33bbe49 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -23,7 +23,7 @@ namespace ScriptCanvasEditor { Modifier::Modifier ( const ModifyConfiguration& modification - , AZStd::vector&& assets + , WorkingAssets&& assets , AZStd::function onComplete) : m_state(State::GatheringDependencies) , m_config(modification) @@ -38,8 +38,8 @@ namespace ScriptCanvasEditor const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const { return m_state == State::GatheringDependencies - ? m_assets[m_assetIndex] - : m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]]; + ? m_assets[m_assetIndex].info + : m_assets[m_dependencyOrderedAssetIndicies[m_assetIndex]].info; } AZStd::unordered_set& Modifier::GetOrCreateDependencyIndexSet() @@ -183,6 +183,7 @@ namespace ScriptCanvasEditor { ModelNotificationsBus::Broadcast ( &ModelNotificationsTraits::OnUpgradeModificationEnd, m_config, GetCurrentAsset(), m_result); + ModificationNotificationsBus::Handler::BusDisconnect(); m_modifyState = ModifyState::Idle; ++m_assetIndex; m_result = {}; @@ -271,7 +272,7 @@ namespace ScriptCanvasEditor for (size_t index = 0; index != m_assets.size(); ++index) { - m_assetInfoIndexById.insert({ m_assets[index].m_assetId.m_guid, index }); + m_assetInfoIndexById.insert({ m_assets[index].info.m_assetId.m_guid, index }); } } else diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index f318627cbe..2a8a12e3cf 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -26,7 +26,7 @@ namespace ScriptCanvasEditor Modifier ( const ModifyConfiguration& modification - , AZStd::vector&& assets + , WorkingAssets&& assets , AZStd::function onComplete); const ModificationResults& GetResult() const; @@ -66,7 +66,7 @@ namespace ScriptCanvasEditor size_t m_assetIndex = 0; AZStd::function m_onComplete; // asset infos in scanned order - AZStd::vector m_assets; + WorkingAssets m_assets; // dependency sorted order indices into the asset vector AZStd::vector m_dependencyOrderedAssetIndicies; // dependency indices by asset info index (only exist if graphs have them) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp index 26765a9f97..bc69f6e634 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Scanner.cpp @@ -45,7 +45,7 @@ namespace ScriptCanvasEditor else { VE_LOG("Scanner: Included: %s ", GetCurrentAsset().m_relativePath.c_str()); - m_result.m_unfiltered.push_back(GetCurrentAsset()); + m_result.m_unfiltered.push_back({ asset, GetCurrentAsset() }); ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnScanUnFilteredGraph, GetCurrentAsset()); } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp index 9670bb2f1f..14bc1c4dc8 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.cpp @@ -6,37 +6,32 @@ * */ +#include +#include #include #include -#include #include -#include #include -#include "UpgradeHelper.h" - #include #include #include #include - #include #include - +#include +#include #include #include #include - -#include - +#include #include +#include +#include #include #include - #include #include -#include -#include namespace ScriptCanvasEditor { @@ -52,40 +47,47 @@ namespace ScriptCanvasEditor m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); int rows = 0; - auto& graphsToUpgrade = AZ::Interface::Get()->GetGraphsThatNeedManualUpgrade(); - for (auto& assetId : graphsToUpgrade) + const VersionExplorer::ModificationResults* result = nullptr; + VersionExplorer::ModelRequestsBus::BroadcastResult(result, &VersionExplorer::ModelRequestsTraits::GetResults); + + if (result && !result->m_failures.empty()) { - auto assetInfo = ScriptCanvasEditor::AssetHelpers::GetAssetInfo(assetId); - m_ui->tableWidget->insertRow(rows); + for (auto& failedUpdate : result->m_failures) + { + auto& assetInfo = failedUpdate.assetInfo; + auto assetId = assetInfo.m_assetId; - connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept); - connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item) - { - if (item && item->data(Qt::UserRole).toInt() == rows) + m_ui->tableWidget->insertRow(rows); + + connect(m_ui->closeButton, &QPushButton::pressed, this, &QDialog::accept); + connect(m_ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [this, rows, assetId](QTableWidgetItem* item) { - OpenGraph(assetId); + if (item && item->data(Qt::UserRole).toInt() == rows) + { + OpenGraph(assetId); + } } - } - ); + ); + + auto openGraph = [this, assetId] { + OpenGraph(assetId); + }; - auto openGraph = [this, assetId] { - OpenGraph(assetId); - }; + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + rowName->setData(Qt::UserRole, rows); + m_ui->tableWidget->setItem(rows, 0, rowName); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); - rowName->setData(Qt::UserRole, rows); - m_ui->tableWidget->setItem(rows, 0, rowName); + QToolButton* rowGoToButton = new QToolButton(this); + rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); + rowGoToButton->setToolTip("Open Graph"); - QToolButton* rowGoToButton = new QToolButton(this); - rowGoToButton->setIcon(QIcon(":/stylesheet/img/UI20/open-in-internal-app.svg")); - rowGoToButton->setToolTip("Open Graph"); - - connect(rowGoToButton, &QToolButton::clicked, openGraph); + connect(rowGoToButton, &QToolButton::clicked, openGraph); - m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton); + m_ui->tableWidget->setCellWidget(rows, 1, rowGoToButton); - ++rows; + ++rows; + } } } From 6e8449597576bef5fcd72f95fb0735aec293cb63 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Fri, 17 Sep 2021 16:48:16 -0700 Subject: [PATCH 018/226] Changes to make client and entity migration functional, needed in the event of a host quitting necessitating a host migration Signed-off-by: kberg-amzn --- Code/Framework/AzCore/AzCore/Math/Aabb.h | 1 + Code/Framework/AzCore/AzCore/Utils/Utils.h | 2 +- .../Framework/INetworkInterface.h | 12 +- .../Serialization/AzContainerSerializers.h | 15 ++ .../TcpTransport/TcpNetworkInterface.cpp | 19 +- .../TcpTransport/TcpNetworkInterface.h | 6 +- .../UdpTransport/UdpNetworkInterface.cpp | 19 +- .../UdpTransport/UdpNetworkInterface.h | 6 +- .../LocalPredictionPlayerInputComponent.h | 4 +- .../Multiplayer/Components/NetBindComponent.h | 8 - .../Multiplayer/EntityDomains/IEntityDomain.h | 8 + .../Code/Include/Multiplayer/IMultiplayer.h | 10 + .../Include/Multiplayer/MultiplayerTypes.h | 19 +- .../EntityReplicationManager.h | 218 ++++++++++++++++++ .../EntityReplication/EntityReplicator.h | 2 +- .../EntityReplication/EntityReplicator.inl | 0 .../NetworkEntity/INetworkEntityManager.h | 14 ++ .../LocalPredictionPlayerInputComponent.cpp | 4 +- .../Source/Components/NetBindComponent.cpp | 20 -- .../ClientToServerConnectionData.cpp | 2 + .../ClientToServerConnectionData.h | 2 +- .../ServerToClientConnectionData.h | 2 +- .../Editor/MultiplayerEditorConnection.cpp | 2 +- .../FullOwnershipEntityDomain.cpp | 11 + .../EntityDomains/FullOwnershipEntityDomain.h | 2 + .../Source/MultiplayerSystemComponent.cpp | 72 +++--- .../Code/Source/MultiplayerSystemComponent.h | 14 +- .../EntityReplicationManager.cpp | 21 +- .../EntityReplicationManager.h | 2 +- .../EntityReplication/EntityReplicator.cpp | 4 +- .../EntityReplication/PropertySubscriber.cpp | 2 +- .../NetworkEntity/NetworkEntityManager.cpp | 10 + .../NetworkEntity/NetworkEntityManager.h | 6 +- Gems/Multiplayer/Code/multiplayer_files.cmake | 6 +- 34 files changed, 424 insertions(+), 121 deletions(-) create mode 100644 Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h rename Gems/Multiplayer/Code/{Source => Include/Multiplayer}/NetworkEntity/EntityReplication/EntityReplicator.h (98%) rename Gems/Multiplayer/Code/{Source => Include/Multiplayer}/NetworkEntity/EntityReplication/EntityReplicator.inl (100%) diff --git a/Code/Framework/AzCore/AzCore/Math/Aabb.h b/Code/Framework/AzCore/AzCore/Math/Aabb.h index 488808bc4c..f6fb695399 100644 --- a/Code/Framework/AzCore/AzCore/Math/Aabb.h +++ b/Code/Framework/AzCore/AzCore/Math/Aabb.h @@ -1,3 +1,4 @@ + /* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.h b/Code/Framework/AzCore/AzCore/Utils/Utils.h index e72a9b3f9c..51711877ac 100644 --- a/Code/Framework/AzCore/AzCore/Utils/Utils.h +++ b/Code/Framework/AzCore/AzCore/Utils/Utils.h @@ -24,7 +24,7 @@ namespace AZ { //! Protects from allocating too much memory. The choice of a 1MB threshold is arbitrary. //! If you need to work with larger files, please use AZ::IO directly instead of these utility functions. - inline constexpr size_t DefaultMaxFileSize = 1024 * 1024; + inline constexpr size_t DefaultMaxFileSize = 5 * 1024 * 1024; //! Terminates the application without going through the shutdown procedure. //! This is used when due to abnormal circumstances the application can no diff --git a/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h index 09aa62f7d7..3a37a44a02 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/Framework/INetworkInterface.h @@ -103,13 +103,13 @@ namespace AzNetworking //! @return boolean true on success virtual bool Disconnect(ConnectionId connectionId, DisconnectReason reason) = 0; - //! Sets whether this connection interface can disconnect by virtue of a timeout - //! @param timeoutEnabled If this connection interface will automatically disconnect due to a timeout - virtual void SetTimeoutEnabled(bool timeoutEnabled) = 0; + //! Sets the timeout time in milliseconds, 0 ms means timeouts are disabled. + //! @param timeoutMs the number of milliseconds with no traffic before we timeout and close a connection + virtual void SetTimeoutMs(AZ::TimeMs timeoutMs) = 0; - //! Whether this connection interface will disconnect by virtue of a time out (does not account for cvars affecting all connections) - //! @return boolean true if this connection will not disconnect on timeout (does not account for cvars affecting all connections) - virtual bool IsTimeoutEnabled() const = 0; + //! Retrieves the timeout time in milliseconds for this network interface, 0 ms means timeouts are disabled. + //! @return the timeout time in milliseconds for this network interface, 0 ms means timeouts are disabled + virtual AZ::TimeMs GetTimeoutMs() const = 0; //! Const access to the metrics tracked by this network interface. //! @return const reference to the metrics tracked by this network interface diff --git a/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h b/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h index 59e0cc8235..e99144acbf 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h +++ b/Code/Framework/AzNetworking/AzNetworking/Serialization/AzContainerSerializers.h @@ -321,4 +321,19 @@ namespace AzNetworking return serializer.IsValid(); } }; + + template <> + struct SerializeObjectHelper + { + static bool SerializeObject(ISerializer& serializer, AZ::Aabb& value) + { + AZ::Vector3 minValue = value.GetMin(); + AZ::Vector3 maxValue = value.GetMax(); + serializer.Serialize(minValue, "minValue"); + serializer.Serialize(maxValue, "maxValue"); + value.SetMin(minValue); + value.SetMax(maxValue); + return serializer.IsValid(); + } + }; } diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp index 62335a9b39..f15e0c5d1a 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp @@ -22,14 +22,15 @@ namespace AzNetworking #endif AZ_CVAR(bool, net_TcpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Tcp connections"); - AZ_CVAR(AZ::TimeMs, net_TcpHearthbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Tcp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_TcpTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); + AZ_CVAR(AZ::TimeMs, net_TcpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Tcp connection heartbeat frequency"); + AZ_CVAR(AZ::TimeMs, net_TcpDefaultTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); TcpNetworkInterface::TcpNetworkInterface(AZ::Name name, IConnectionListener& connectionListener, TrustZone trustZone, TcpListenThread& listenThread) : m_name(name) , m_trustZone(trustZone) , m_connectionListener(connectionListener) , m_listenThread(listenThread) + , m_timeoutMs(net_TcpDefaultTimeoutTimeMs) { ; } @@ -97,7 +98,7 @@ namespace AzNetworking } AZLOG_INFO("Adding new socket %d", static_cast(tcpSocket->GetSocketFd())); - const TimeoutId newTimeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket->GetSocketFd()), net_TcpHearthbeatTimeMs); + const TimeoutId newTimeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket->GetSocketFd()), net_TcpHeartbeatTimeMs); connection->SetTimeoutId(newTimeoutId); connection->SendReliablePacket(CorePackets::InitiateConnectionPacket()); m_connectionListener.OnConnect(connection.get()); @@ -174,14 +175,14 @@ namespace AzNetworking return connection->Disconnect(reason, TerminationEndpoint::Local); } - void TcpNetworkInterface::SetTimeoutEnabled(bool timeoutEnabled) + void TcpNetworkInterface::SetTimeoutMs(AZ::TimeMs timeoutMs) { - m_timeoutEnabled = timeoutEnabled; + m_timeoutMs = timeoutMs; } - bool TcpNetworkInterface::IsTimeoutEnabled() const + AZ::TimeMs TcpNetworkInterface::GetTimeoutMs() const { - return m_timeoutEnabled; + return m_timeoutMs; } void TcpNetworkInterface::QueueNewConnection(const PendingConnection& pendingConnection) @@ -257,7 +258,7 @@ namespace AzNetworking return; } AZLOG(NET_TcpTraffic, "Adding new socket %d", static_cast(tcpSocket.GetSocketFd())); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket.GetSocketFd()), net_TcpTimeoutTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(static_cast(tcpSocket.GetSocketFd()), m_timeoutMs); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, remoteAddress, *this, tcpSocket, timeoutId); AZ_Assert(connection->GetConnectionRole() == ConnectionRole::Acceptor, "Invalid role for connection"); GetConnectionListener().OnConnect(connection.get()); @@ -316,7 +317,7 @@ namespace AzNetworking { tcpConnection->SendReliablePacket(CorePackets::HeartbeatPacket()); } - else if (net_TcpTimeoutConnections && m_networkInterface.IsTimeoutEnabled()) + else if (net_TcpTimeoutConnections && (m_networkInterface.GetTimeoutMs() > AZ::TimeMs{ 0 })) { tcpConnection->Disconnect(DisconnectReason::Timeout, TerminationEndpoint::Local); return TimeoutResult::Delete; diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h index b9ea88974d..d8f5d1b62b 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.h @@ -99,8 +99,8 @@ namespace AzNetworking bool WasPacketAcked(ConnectionId connectionId, PacketId packetId) override; bool StopListening() override; bool Disconnect(ConnectionId connectionId, DisconnectReason reason) override; - void SetTimeoutEnabled(bool timeoutEnabled) override; - bool IsTimeoutEnabled() const override; + void SetTimeoutMs(AZ::TimeMs timeoutMs) override; + AZ::TimeMs GetTimeoutMs() const override; //! @} //! Queues a new incoming connection for this network interface. @@ -156,7 +156,7 @@ namespace AzNetworking AZ::Name m_name; TrustZone m_trustZone; uint16_t m_port = 0; - bool m_timeoutEnabled = true; + AZ::TimeMs m_timeoutMs = AZ::TimeMs{ 0 }; IConnectionListener& m_connectionListener; TcpConnectionSet m_connectionSet; TcpSocketManager m_tcpSocketManager; diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp index bf01ece458..b12d3ef845 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp @@ -31,8 +31,8 @@ namespace AzNetworking AZ_CVAR(bool, net_UdpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Udp connections"); AZ_CVAR(AZ::TimeMs, net_UdpPacketTimeSliceMs, AZ::TimeMs{ 8 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The number of milliseconds to allow for packet processing"); - AZ_CVAR(AZ::TimeMs, net_UdpHearthbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Udp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_UdpTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); + AZ_CVAR(AZ::TimeMs, net_UdpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Udp connection heartbeat frequency"); + AZ_CVAR(AZ::TimeMs, net_UdpDefaultTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); AZ_CVAR(AZ::TimeMs, net_MinPacketTimeoutMs, AZ::TimeMs{ 200 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Minimum time to wait before timing out an unacked packet"); AZ_CVAR(int32_t, net_MaxTimeoutsPerFrame, 1000, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Maximum number of packet timeouts to allow to process in a single frame"); AZ_CVAR(float, net_RttFudgeScalar, 2.0f, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Scalar value to multiply computed Rtt by to determine an optimal packet timeout threshold"); @@ -61,6 +61,7 @@ namespace AzNetworking , m_connectionListener(connectionListener) , m_socket(net_UdpUseEncryption ? new DtlsSocket() : new UdpSocket()) , m_readerThread(readerThread) + , m_timeoutMs(net_UdpDefaultTimeoutTimeMs) { const AZ::CVarFixedString compressor = static_cast(net_UdpCompressor); const AZ::Name compressorName = AZ::Name(compressor); @@ -138,7 +139,7 @@ namespace AzNetworking } const ConnectionId connectionId = m_connectionSet.GetNextConnectionId(); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), net_UdpHearthbeatTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), m_timeoutMs); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, remoteAddress, *this, ConnectionRole::Connector); UdpPacketEncodingBuffer dtlsData; @@ -403,14 +404,14 @@ namespace AzNetworking return connection->Disconnect(reason, TerminationEndpoint::Local); } - void UdpNetworkInterface::SetTimeoutEnabled(bool timeoutEnabled) + void UdpNetworkInterface::SetTimeoutMs(AZ::TimeMs timeoutMs) { - m_timeoutEnabled = timeoutEnabled; + m_timeoutMs = timeoutMs; } - bool UdpNetworkInterface::IsTimeoutEnabled() const + AZ::TimeMs UdpNetworkInterface::GetTimeoutMs() const { - return m_timeoutEnabled; + return m_timeoutMs; } bool UdpNetworkInterface::IsEncrypted() const @@ -681,7 +682,7 @@ namespace AzNetworking // How long should we sit in the timeout queue before heartbeating or disconnecting const ConnectionId connectionId = m_connectionSet.GetNextConnectionId(); - const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), net_UdpTimeoutTimeMs); + const TimeoutId timeoutId = m_connectionTimeoutQueue.RegisterItem(aznumeric_cast(connectionId), m_timeoutMs); AZLOG(Debug_UdpConnect, "Accepted new Udp Connection"); AZStd::unique_ptr connection = AZStd::make_unique(connectionId, connectPacket.m_address, *this, ConnectionRole::Acceptor); @@ -745,7 +746,7 @@ namespace AzNetworking { udpConnection->SendUnreliablePacket(CorePackets::HeartbeatPacket()); } - else if (net_UdpTimeoutConnections && m_networkInterface.IsTimeoutEnabled()) + else if (net_UdpTimeoutConnections && (m_networkInterface.GetTimeoutMs() > AZ::TimeMs{ 0 })) { udpConnection->Disconnect(DisconnectReason::Timeout, TerminationEndpoint::Local); return TimeoutResult::Delete; diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h index 949914da91..8f827c74c4 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.h @@ -104,8 +104,8 @@ namespace AzNetworking bool WasPacketAcked(ConnectionId connectionId, PacketId packetId) override; bool StopListening() override; bool Disconnect(ConnectionId connectionId, DisconnectReason reason) override; - void SetTimeoutEnabled(bool timeoutEnabled) override; - bool IsTimeoutEnabled() const override; + void SetTimeoutMs(AZ::TimeMs timeoutMs) override; + AZ::TimeMs GetTimeoutMs() const override; //! @} //! Returns true if this is an encrypted socket, false if not. @@ -181,7 +181,7 @@ namespace AzNetworking TrustZone m_trustZone; uint16_t m_port = 0; bool m_allowIncomingConnections = false; - bool m_timeoutEnabled = true; + AZ::TimeMs m_timeoutMs = AZ::TimeMs{ 0 }; IConnectionListener& m_connectionListener; UdpConnectionSet m_connectionSet; TimeoutQueue m_connectionTimeoutQueue; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h index 397406f3b5..bcbea6542f 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/LocalPredictionPlayerInputComponent.h @@ -83,8 +83,8 @@ namespace Multiplayer AZ::ScheduledEvent m_autonomousUpdateEvent; // Drives autonomous input collection AZ::ScheduledEvent m_updateBankedTimeEvent; // Drives authority bank time updates - EntityMigrationStartEvent::Handler m_migrateStartHandler; - EntityMigrationEndEvent::Handler m_migrateEndHandler; + ClientMigrationStartEvent::Handler m_migrateStartHandler; + ClientMigrationEndEvent::Handler m_migrateEndHandler; double m_moveAccumulator = 0.0; double m_clientBankedTime = 0.0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h index 65bac09726..55ed70088d 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h @@ -32,8 +32,6 @@ namespace Multiplayer using EntityStopEvent = AZ::Event; using EntityDirtiedEvent = AZ::Event<>; using EntitySyncRewindEvent = AZ::Event<>; - using EntityMigrationStartEvent = AZ::Event; - using EntityMigrationEndEvent = AZ::Event<>; using EntityServerMigrationEvent = AZ::Event; using EntityPreRenderEvent = AZ::Event; using EntityCorrectionEvent = AZ::Event<>; @@ -115,8 +113,6 @@ namespace Multiplayer void MarkDirty(); void NotifyLocalChanges(); void NotifySyncRewindState(); - void NotifyMigrationStart(ClientInputId migratedInputId); - void NotifyMigrationEnd(); void NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId); void NotifyPreRender(float deltaTime, float blendFactor); void NotifyCorrection(); @@ -124,8 +120,6 @@ namespace Multiplayer void AddEntityStopEventHandler(EntityStopEvent::Handler& eventHandler); void AddEntityDirtiedEventHandler(EntityDirtiedEvent::Handler& eventHandler); void AddEntitySyncRewindEventHandler(EntitySyncRewindEvent::Handler& eventHandler); - void AddEntityMigrationStartEventHandler(EntityMigrationStartEvent::Handler& eventHandler); - void AddEntityMigrationEndEventHandler(EntityMigrationEndEvent::Handler& eventHandler); void AddEntityServerMigrationEventHandler(EntityServerMigrationEvent::Handler& eventHandler); void AddEntityPreRenderEventHandler(EntityPreRenderEvent::Handler& eventHandler); void AddEntityCorrectionEventHandler(EntityCorrectionEvent::Handler& handler); @@ -174,8 +168,6 @@ namespace Multiplayer EntityStopEvent m_entityStopEvent; EntityDirtiedEvent m_dirtiedEvent; EntitySyncRewindEvent m_syncRewindEvent; - EntityMigrationStartEvent m_entityMigrationStartEvent; - EntityMigrationEndEvent m_entityMigrationEndEvent; EntityServerMigrationEvent m_entityServerMigrationEvent; EntityPreRenderEvent m_entityPreRenderEvent; EntityCorrectionEvent m_entityCorrectionEvent; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h index 66e39419e7..092cf9b854 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h @@ -21,6 +21,14 @@ namespace Multiplayer virtual ~IEntityDomain() = default; + //! For domains that operate on a region of space, this sets the area the domain is responsible for. + //! @param aabb the aabb associated with this entity domain + virtual void SetAabb(const AZ::Aabb& aabb) = 0; + + //! Retrieves the aabb representing the domain area, an invalid aabb will be returned for non-spatial domains. + //! @return the aabb associated with this entity domain + virtual const AZ::Aabb& GetAabb() const = 0; + //! Returns whether or not an entity should be owned by an entity manager. //! @param entityHandle the handle of the netbound entity to check //! @return false if this entity should not belong to the entity manger, true if it could be owned by the entity manager diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index 4f714068db..69d2eb4071 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -42,6 +42,8 @@ namespace Multiplayer AzNetworking::ByteBuffer<2048> m_userData; }; + using ClientMigrationStartEvent = AZ::Event; + using ClientMigrationEndEvent = AZ::Event<>; using ClientDisconnectedEvent = AZ::Event<>; using ConnectionAcquiredEvent = AZ::Event; using SessionInitEvent = AZ::Event; @@ -94,6 +96,14 @@ namespace Multiplayer //! @param reason The reason for terminating connections virtual void Terminate(AzNetworking::DisconnectReason reason) = 0; + //! Adds a ClientMigrationStartEvent Handler which is invoked at the start of a client migration + //! @param handler The ClientMigrationStartEvent Handler to add + virtual void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) = 0; + + //! Adds a ClientMigrationEndEvent Handler which is invoked when a client completes migration + //! @param handler The ClientMigrationEndEvent Handler to add + virtual void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) = 0; + //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs //! @param handler The ClientDisconnectedEvent Handler to add virtual void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) = 0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h index 4ac20abc83..26cdf72e5f 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h @@ -105,9 +105,11 @@ namespace Multiplayer struct EntityMigrationMessage { - NetEntityId m_entityId; + NetEntityId m_netEntityId; PrefabEntityId m_prefabEntityId; AzNetworking::PacketEncodingBuffer m_propertyUpdateData; + bool operator!=(const EntityMigrationMessage& rhs) const; + bool Serialize(AzNetworking::ISerializer& serializer); }; inline PrefabEntityId::PrefabEntityId(AZ::Name name, uint32_t entityOffset) @@ -133,6 +135,21 @@ namespace Multiplayer serializer.Serialize(m_entityOffset, "entityOffset"); return serializer.IsValid(); } + + inline bool EntityMigrationMessage::operator!=(const EntityMigrationMessage& rhs) const + { + return m_netEntityId != rhs.m_netEntityId + || m_prefabEntityId != rhs.m_prefabEntityId + || m_propertyUpdateData != rhs.m_propertyUpdateData; + } + + inline bool EntityMigrationMessage::Serialize(AzNetworking::ISerializer& serializer) + { + serializer.Serialize(m_netEntityId, "netEntityId"); + serializer.Serialize(m_prefabEntityId, "prefabEntityId"); + serializer.Serialize(m_propertyUpdateData, "propertyUpdateData"); + return serializer.IsValid(); + } } AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::HostId); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h new file mode 100644 index 0000000000..118ff0e6af --- /dev/null +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -0,0 +1,218 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AzNetworking +{ + class IConnection; + class IConnectionListener; +} + +namespace Multiplayer +{ + class IEntityDomain; + class EntityReplicator; + + using SendMigrateEntityEvent = AZ::Event; + + //! @class EntityReplicationManager + //! @brief Handles replication of relevant entities for one connection. + class EntityReplicationManager final + { + public: + using EntityReplicatorMap = AZStd::map>; + + enum class Mode + { + Invalid, + LocalServerToRemoteClient, + LocalServerToRemoteServer, + LocalClientToRemoteServer, + }; + + EntityReplicationManager(AzNetworking::IConnection& connection, AzNetworking::IConnectionListener& connectionListener, Mode mode); + ~EntityReplicationManager() = default; + + void SetRemoteHostId(HostId hostId); + HostId GetRemoteHostId() const; + + void ActivatePendingEntities(); + void SendUpdates(AZ::TimeMs hostTimeMs); + void Clear(bool forMigration); + + bool SetEntityRebasing(NetworkEntityHandle& entityHandle); + + void MigrateAllEntities(); + void MigrateEntity(NetEntityId netEntityId); + bool CanMigrateEntity(const ConstNetworkEntityHandle& entityHandle) const; + + bool HasRemoteAuthority(const ConstNetworkEntityHandle& entityHandle) const; + + void SetEntityDomain(AZStd::unique_ptr entityDomain); + IEntityDomain* GetEntityDomain(); + void SetReplicationWindow(AZStd::unique_ptr replicationWindow); + IReplicationWindow* GetReplicationWindow(); + + void GetEntityReplicatorIdList(AZStd::list& outList); + uint32_t GetEntityReplicatorCount(NetEntityRole localNetworkRole); + + void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage); + + void AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler); + void AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler); + + bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message); + bool HandleEntityDeleteMessage(EntityReplicator* entityReplicator, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); + bool HandleEntityUpdateMessage(AzNetworking::IConnection* invokingConnection, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); + bool HandleEntityRpcMessage(AzNetworking::IConnection* invokingConnection, NetworkEntityRpcMessage& message); + + AZ::TimeMs GetResendTimeoutTimeMs() const; + + void SetMaxRemoteEntitiesPendingCreationCount(uint32_t maxPendingEntities); + void SetEntityActivationTimeSliceMs(AZ::TimeMs timeSliceMs); + void SetEntityPendingRemovalMs(AZ::TimeMs entityPendingRemovalMs); + + AzNetworking::IConnection& GetConnection(); + AZ::TimeMs GetFrameTimeMs(); + + void AddReplicatorToPendingSend(const EntityReplicator& entityReplicator); + + bool IsUpdateModeToServerClient(); + + private: + AZ_DISABLE_COPY_MOVE(EntityReplicationManager); + + enum class UpdateValidationResult + { + HandleMessage, // Handle an entity update message + DropMessage, // Do not handle an entity update message, but don't disconnect (could be out of order/date and isn't relevant) + DropMessageAndDisconnect, // Do not handle the message, it is malformed and we should disconnect the connection + }; + + UpdateValidationResult ValidateUpdate(const NetworkEntityUpdateMessage& updateMessage, AzNetworking::PacketId packetId, EntityReplicator* entityReplicator); + + using RpcMessages = AZStd::list; + bool DispatchOrphanedRpc(NetworkEntityRpcMessage& message, EntityReplicator* entityReplicator); + + using EntityReplicatorList = AZStd::deque; + EntityReplicatorList GenerateEntityUpdateList(); + + void SendEntityUpdatesPacketHelper(AZ::TimeMs hostTimeMs, EntityReplicatorList& toSendList, uint32_t maxPayloadSize, AzNetworking::IConnection& connection); + + void SendEntityUpdates(AZ::TimeMs hostTimeMs); + void SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable); + + void MigrateEntityInternal(NetEntityId entityId); + void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); + void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); + + EntityReplicator* AddEntityReplicator(const ConstNetworkEntityHandle& entityHandle, NetEntityRole netEntityRole); + + const EntityReplicator* GetEntityReplicator(NetEntityId entityId) const; + EntityReplicator* GetEntityReplicator(NetEntityId entityId); + EntityReplicator* GetEntityReplicator(const ConstNetworkEntityHandle& entityHandle); + + void UpdateWindow(); + + bool HandlePropertyChangeMessage + ( + AzNetworking::IConnection* invokingConnection, + EntityReplicator* entityReplicator, + AzNetworking::PacketId packetId, + NetEntityId netEntityId, + NetEntityRole netEntityRole, + AzNetworking::ISerializer& serializer, + const PrefabEntityId& prefabEntityId + ); + + void AddReplicatorToPendingRemoval(const EntityReplicator& replicator); + void ClearRemovedReplicators(); + + class OrphanedEntityRpcs + : public AzNetworking::ITimeoutHandler + { + public: + OrphanedEntityRpcs(EntityReplicationManager& replicationManager); + void Update(); + bool DispatchOrphanedRpcs(EntityReplicator& entityReplicator); + void AddOrphanedRpc(NetEntityId entityId, NetworkEntityRpcMessage& entityRpcMessage); + AZStd::size_t Size() const { return m_entityRpcMap.size(); } + private: + AzNetworking::TimeoutResult HandleTimeout(AzNetworking::TimeoutQueue::TimeoutItem& item) override; + struct OrphanedRpcs + { + OrphanedRpcs() = default; + OrphanedRpcs(OrphanedRpcs&& rhs) + { + m_rpcMessages.swap(rhs.m_rpcMessages); + m_timeoutId = rhs.m_timeoutId; + rhs.m_timeoutId = AzNetworking::TimeoutId{ 0 }; + } + RpcMessages m_rpcMessages; + AzNetworking::TimeoutId m_timeoutId = AzNetworking::TimeoutId{ 0 }; + }; + typedef AZStd::unordered_map EntityRpcMap; + EntityRpcMap m_entityRpcMap; + AzNetworking::TimeoutQueue m_timeoutQueue; + EntityReplicationManager& m_replicationManager; + }; + OrphanedEntityRpcs m_orphanedEntityRpcs; + EntityReplicatorMap m_entityReplicatorMap; + + //! The set of entities that we have sent creation messages for, but have not received confirmation back that the create has occurred + AZStd::unordered_set m_remoteEntitiesPendingCreation; + AZStd::deque m_entitiesPendingActivation; + AZStd::set m_replicatorsPendingRemoval; + AZStd::unordered_set m_replicatorsPendingSend; + + // Deferred RPC Sends + RpcMessages m_deferredRpcMessagesReliable; + RpcMessages m_deferredRpcMessagesUnreliable; + + AZ::Event m_autonomousEntityReplicatorCreated; + EntityExitDomainEvent::Handler m_entityExitDomainEventHandler; + SendMigrateEntityEvent m_sendMigrateEntityEvent; + + AZ::ScheduledEvent m_clearRemovedReplicators; + AZ::ScheduledEvent m_updateWindow; + + AzNetworking::IConnectionListener& m_connectionListener; + AzNetworking::IConnection& m_connection; + AZStd::unique_ptr m_replicationWindow; + AZStd::unique_ptr m_remoteEntityDomain; + + AZ::TimeMs m_entityActivationTimeSliceMs = AZ::TimeMs{ 0 }; + AZ::TimeMs m_entityPendingRemovalMs = AZ::TimeMs{ 0 }; + AZ::TimeMs m_frameTimeMs = AZ::TimeMs{ 0 }; + HostId m_remoteHostId = InvalidHostId; + uint32_t m_maxRemoteEntitiesPendingCreationCount = AZStd::numeric_limits::max(); + uint32_t m_maxPayloadSize = 0; + Mode m_updateMode = Mode::Invalid; + + friend class EntityReplicator; + }; +} + diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h similarity index 98% rename from Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h rename to Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h index ec4bd8c4f5..1f1c64c707 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h @@ -139,4 +139,4 @@ namespace Multiplayer }; } -#include +#include diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.inl b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl similarity index 100% rename from Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.inl rename to Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h index 8a5fec869c..51f432953e 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h @@ -20,6 +20,7 @@ namespace Multiplayer class NetworkEntityAuthorityTracker; class NetworkEntityRpcMessage; class MultiplayerComponentRegistry; + class IEntityDomain; using EntityExitDomainEvent = AZ::Event; using ControllersActivatedEvent = AZ::Event; @@ -37,6 +38,19 @@ namespace Multiplayer virtual ~INetworkEntityManager() = default; + //! Configures the NetworkEntityManager to operate as an authoritative host. + //! @param hostId the hostId of this NetworkEntityManager + //! @param entityDomain the entity domain used to determine which entities this manager has authority over + virtual void Initialize(HostId hostId, AZStd::unique_ptr entityDomain) = 0; + + //! Returns whether or not the network entity manager has been initialized to host. + //! @return boolean true if this network entity manager has been intialized to host + virtual bool IsInitialized() const = 0; + + //! Returns the entity domain associated with this network entity manager, this will be nullptr on clients. + //! @return boolean the entity domain for this network entity manager + virtual IEntityDomain* GetEntityDomain() const = 0; + //! Returns the NetworkEntityTracker for this INetworkEntityManager instance. //! @return the NetworkEntityTracker for this INetworkEntityManager instance virtual NetworkEntityTracker* GetNetworkEntityTracker() = 0; diff --git a/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp b/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp index 418bea79dd..41d7d7cb1c 100644 --- a/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/LocalPredictionPlayerInputComponent.cpp @@ -123,8 +123,8 @@ namespace Multiplayer if (IsAutonomous()) { m_autonomousUpdateEvent.Enqueue(AZ::TimeMs{ 1 }, true); - GetParent().GetNetBindComponent()->AddEntityMigrationStartEventHandler(m_migrateStartHandler); - GetParent().GetNetBindComponent()->AddEntityMigrationEndEventHandler(m_migrateEndHandler); + GetMultiplayer()->AddClientMigrationStartEventHandler(m_migrateStartHandler); + GetMultiplayer()->AddClientMigrationEndEventHandler(m_migrateEndHandler); } } diff --git a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp index d8e8a765ce..f42a8824f5 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp @@ -388,16 +388,6 @@ namespace Multiplayer m_syncRewindEvent.Signal(); } - void NetBindComponent::NotifyMigrationStart(ClientInputId migratedInputId) - { - m_entityMigrationStartEvent.Signal(migratedInputId); - } - - void NetBindComponent::NotifyMigrationEnd() - { - m_entityMigrationEndEvent.Signal(); - } - void NetBindComponent::NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId) { m_entityServerMigrationEvent.Signal(m_netEntityHandle, hostId, connectionId); @@ -428,16 +418,6 @@ namespace Multiplayer eventHandler.Connect(m_syncRewindEvent); } - void NetBindComponent::AddEntityMigrationStartEventHandler(EntityMigrationStartEvent::Handler& eventHandler) - { - eventHandler.Connect(m_entityMigrationStartEvent); - } - - void NetBindComponent::AddEntityMigrationEndEventHandler(EntityMigrationEndEvent::Handler& eventHandler) - { - eventHandler.Connect(m_entityMigrationEndEvent); - } - void NetBindComponent::AddEntityServerMigrationEventHandler(EntityServerMigrationEvent::Handler& eventHandler) { eventHandler.Connect(m_entityServerMigrationEvent); diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp index 7ac28fc078..a943406df3 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp @@ -13,6 +13,7 @@ namespace Multiplayer // This can be used to help mitigate client side performance when large numbers of entities are created off the network AZ_CVAR(uint32_t, cl_ClientMaxRemoteEntitiesPendingCreationCount, AZStd::numeric_limits::max(), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Maximum number of entities that we have sent to the client, but have not had a confirmation back from the client"); AZ_CVAR(AZ::TimeMs, cl_ClientEntityReplicatorPendingRemovalTimeMs, AZ::TimeMs{ 10000 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "How long should wait prior to removing an entity for the client through a change in the replication window, entity deletes are still immediate"); + AZ_CVAR(AZ::TimeMs, cl_DefaultNetworkEntityActivationTimeSliceMs, AZ::TimeMs{ 0 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Max Ms to use to activate entities coming from the network, 0 means instantiate everything"); ClientToServerConnectionData::ClientToServerConnectionData ( @@ -26,6 +27,7 @@ namespace Multiplayer { m_entityReplicationManager.SetMaxRemoteEntitiesPendingCreationCount(cl_ClientMaxRemoteEntitiesPendingCreationCount); m_entityReplicationManager.SetEntityPendingRemovalMs(cl_ClientEntityReplicatorPendingRemovalTimeMs); + m_entityReplicationManager.SetEntityActivationTimeSliceMs(cl_DefaultNetworkEntityActivationTimeSliceMs); } ClientToServerConnectionData::~ClientToServerConnectionData() diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h index e5f1d0edfc..9776cbabb9 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace Multiplayer { diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 9e9afc4413..78ee721d97 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace Multiplayer { diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp index 3ca1af8b66..582cda3eea 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp @@ -32,7 +32,7 @@ namespace Multiplayer { m_networkEditorInterface = AZ::Interface::Get()->CreateNetworkInterface( AZ::Name(MpEditorInterfaceName), ProtocolType::Tcp, TrustZone::ExternalClientToServer, *this); - m_networkEditorInterface->SetTimeoutEnabled(false); + m_networkEditorInterface->SetTimeoutMs(AZ::TimeMs{ 0 }); // Disable timeouts on this network interface if (editorsv_isDedicated) { uint16_t editorServerPort = DefaultServerEditorPort; diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp index b63ce65da7..5b28208cd9 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp @@ -10,6 +10,17 @@ namespace Multiplayer { + void FullOwnershipEntityDomain::SetAabb([[maybe_unused]] const AZ::Aabb& aabb) + { + ; // Do nothing, by definition we own everything + } + + const AZ::Aabb& FullOwnershipEntityDomain::GetAabb() const + { + static AZ::Aabb nullAabb = AZ::Aabb::CreateNull(); + return nullAabb; + } + bool FullOwnershipEntityDomain::IsInDomain([[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) const { return true; diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h index 3fe164a31f..ddf09e31d5 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h @@ -21,6 +21,8 @@ namespace Multiplayer //! IEntityDomain overrides. //! @{ + void SetAabb(const AZ::Aabb& aabb) override; + const AZ::Aabb& GetAabb() const override; bool IsInDomain(const ConstNetworkEntityHandle& entityHandle) const override; void ActivateTracking(const INetworkEntityManager::OwnedEntitySet& ownedEntitySet) override; void RetrieveEntitiesNotInDomain(EntitiesNotInDomain& outEntitiesNotInDomain) const override; diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index 24f865194f..543107a3ed 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -79,8 +79,6 @@ namespace Multiplayer AZ_CVAR(ProtocolType, sv_protocol, ProtocolType::Udp, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "This flag controls whether we use TCP or UDP for game networking"); AZ_CVAR(bool, sv_isDedicated, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Whether the host command creates an independent or client hosted server"); AZ_CVAR(bool, sv_isTransient, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Whether a dedicated server shuts down if all existing connections disconnect."); - AZ_CVAR(AZ::TimeMs, cl_defaultNetworkEntityActivationTimeSliceMs, AZ::TimeMs{ 0 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, - "Max Ms to use to activate entities coming from the network, 0 means instantiate everything"); AZ_CVAR(AZ::TimeMs, sv_serverSendRateMs, AZ::TimeMs{ 50 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Minimum number of milliseconds between each network update"); AZ_CVAR(AZ::CVarFixedString, sv_defaultPlayerSpawnAsset, "prefabs/player.network.spawnable", nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The default spawnable to use when a new player connects"); @@ -94,7 +92,6 @@ namespace Multiplayer { serializeContext->Class() ->Version(1); - serializeContext->Class() ->Version(1); serializeContext->Class() @@ -173,7 +170,12 @@ namespace Multiplayer AZ::ConsoleInvokedFrom invokedFrom ) { OnConsoleCommandInvoked(command, args, flags, invokedFrom); }) { - ; + AZ::Interface::Register(this); + } + + MultiplayerSystemComponent::~MultiplayerSystemComponent() + { + AZ::Interface::Unregister(this); } void MultiplayerSystemComponent::Activate() @@ -185,7 +187,6 @@ namespace Multiplayer { m_consoleCommandHandler.Connect(AZ::Interface::Get()->GetConsoleCommandInvokedEvent()); } - AZ::Interface::Register(this); AZ::Interface::Register(this); //! Register our gems multiplayer components to assign NetComponentIds @@ -195,7 +196,6 @@ namespace Multiplayer void MultiplayerSystemComponent::Deactivate() { AZ::Interface::Unregister(this); - AZ::Interface::Unregister(this); m_consoleCommandHandler.Disconnect(); AZ::Interface::Get()->DestroyNetworkInterface(AZ::Name(MpNetworkInterfaceName)); AzFramework::SessionNotificationBus::Handler::BusDisconnect(); @@ -459,7 +459,7 @@ namespace Multiplayer AzFramework::PlayerConnectionConfig config; config.m_playerConnectionId = aznumeric_cast(connection->GetConnectionId()); config.m_playerSessionId = packet.GetTicket(); - if(!AZ::Interface::Get()->ValidatePlayerJoinSession(config)) + if (!AZ::Interface::Get()->ValidatePlayerJoinSession(config)) { auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); @@ -488,10 +488,8 @@ namespace Multiplayer ) { m_didHandshake = true; - AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); AZ::Interface::Get()->PerformCommand(commandString.c_str()); - AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); return true; @@ -606,7 +604,22 @@ namespace Multiplayer [[maybe_unused]] MultiplayerPackets::ClientMigration& packet ) { - return false; + if (GetAgentType() != MultiplayerAgentType::Client) + { + // Only clients are allowed to migrate from one server to another + return false; + } + + // Store the temporary user identifier so we can transmit it with our next Connect packet + // The new server will use this to reattach our set of autonomous entities + + // Disconnect our existing server connection + auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::ClientMigrated, TerminationEndpoint::Local); }; + m_networkInterface->GetConnectionSet().VisitConnections(visitor); + AZLOG_INFO("Migrating to new server shard"); + //m_clientMigrateStartEvent(packet.GetLastInputGameTimeMs()); + m_networkInterface->Connect(packet.GetRemoteServerAddress()); + return true; } ConnectResult MultiplayerSystemComponent::ValidateConnect @@ -640,7 +653,7 @@ namespace Multiplayer else { AZLOG_INFO("New incoming connection from remote address: %s", connection->GetRemoteAddress().GetString().c_str()); - m_connAcquiredEvent.Signal(datum); + m_connectionAcquiredEvent.Signal(datum); } // Hosts will spawn a new default player prefab for the user that just connected @@ -654,27 +667,14 @@ namespace Multiplayer } controlledEntity.Activate(); - if (connection->GetUserData() == nullptr) // Only add user data if the connect event handler has not already done so - { - connection->SetUserData(new ServerToClientConnectionData(connection, *this, controlledEntity)); - } - + connection->SetUserData(new ServerToClientConnectionData(connection, *this, controlledEntity)); AZStd::unique_ptr window = AZStd::make_unique(controlledEntity, connection); reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetReplicationWindow(AZStd::move(window)); } else { - if (connection->GetUserData() == nullptr) // Only add user data if the connect event handler has not already done so - { - connection->SetUserData(new ClientToServerConnectionData(connection, *this, providerTicket)); - } - else - { - reinterpret_cast(connection->GetUserData())->SetProviderTicket(providerTicket); - } - + connection->SetUserData(new ClientToServerConnectionData(connection, *this, providerTicket)); AZStd::unique_ptr window = AZStd::make_unique(); - reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetEntityActivationTimeSliceMs(cl_defaultNetworkEntityActivationTimeSliceMs); reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetReplicationWindow(AZStd::move(window)); } } @@ -757,9 +757,11 @@ namespace Multiplayer { m_initEvent.Signal(m_networkInterface); - //const AZ::Aabb worldBounds = AZ::Interface.Get()->GetWorldBounds(); - AZStd::unique_ptr newDomain = AZStd::make_unique(); - m_networkEntityManager.Initialize(InvalidHostId, AZStd::move(newDomain)); + if (!m_networkEntityManager.IsInitialized()) + { + // Set up a full ownership domain if we didn't construct a domain during the initialize event + m_networkEntityManager.Initialize(InvalidHostId, AZStd::make_unique()); + } } } m_agentType = multiplayerType; @@ -778,6 +780,16 @@ namespace Multiplayer AZLOG_INFO("Multiplayer operating in %s mode", GetEnumString(m_agentType)); } + void MultiplayerSystemComponent::AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) + { + handler.Connect(m_clientMigrationStartEvent); + } + + void MultiplayerSystemComponent::AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) + { + handler.Connect(m_clientMigrationEndEvent); + } + void MultiplayerSystemComponent::AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) { handler.Connect(m_clientDisconnectedEvent); @@ -785,7 +797,7 @@ namespace Multiplayer void MultiplayerSystemComponent::AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) { - handler.Connect(m_connAcquiredEvent); + handler.Connect(m_connectionAcquiredEvent); } void MultiplayerSystemComponent::AddSessionInitHandler(SessionInitEvent::Handler& handler) diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index c467ed9ad9..40d806a0e0 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -55,7 +55,7 @@ namespace Multiplayer static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); MultiplayerSystemComponent(); - ~MultiplayerSystemComponent() override = default; + ~MultiplayerSystemComponent() override; //! AZ::Component overrides. //! @{ @@ -105,13 +105,15 @@ namespace Multiplayer //! @{ MultiplayerAgentType GetAgentType() const override; void InitializeMultiplayer(MultiplayerAgentType state) override; + bool StartHosting(uint16_t port, bool isDedicated = true) override; + bool Connect(AZStd::string remoteAddress, uint16_t port) override; + void Terminate(AzNetworking::DisconnectReason reason) override; + void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) override; + void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) override; void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) override; void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; - bool StartHosting(uint16_t port, bool isDedicated = true) override; - bool Connect(AZStd::string remoteAddress, uint16_t port) override; - void Terminate(AzNetworking::DisconnectReason reason) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; float GetCurrentBlendFactor() const override; @@ -148,8 +150,10 @@ namespace Multiplayer SessionInitEvent m_initEvent; SessionShutdownEvent m_shutdownEvent; - ConnectionAcquiredEvent m_connAcquiredEvent; + ConnectionAcquiredEvent m_connectionAcquiredEvent; ClientDisconnectedEvent m_clientDisconnectedEvent; + ClientMigrationStartEvent m_clientMigrationStartEvent; + ClientMigrationEndEvent m_clientMigrationEndEvent; AZStd::queue m_pendingConnectionTickets; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index 482d3a1ee8..938b3611c5 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -6,8 +6,8 @@ * */ -#include -#include +#include +#include #include #include #include @@ -444,6 +444,11 @@ namespace Multiplayer handler.Connect(m_autonomousEntityReplicatorCreated); } + void EntityReplicationManager::AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler) + { + handler.Connect(m_sendMigrateEntityEvent); + } + const EntityReplicator* EntityReplicationManager::GetEntityReplicator(NetEntityId netEntityId) const { auto it = m_entityReplicatorMap.find(netEntityId); @@ -1094,7 +1099,7 @@ namespace Multiplayer bool didSucceed = true; EntityMigrationMessage message; - message.m_entityId = replicator->GetEntityHandle().GetNetEntityId(); + message.m_netEntityId = replicator->GetEntityHandle().GetNetEntityId(); message.m_prefabEntityId = netBindComponent->GetPrefabEntityId(); if (localEnt->GetState() == AZ::Entity::State::Active) @@ -1119,8 +1124,8 @@ namespace Multiplayer message.m_propertyUpdateData.Resize(inputSerializer.GetSize()); } AZ_Assert(didSucceed, "Failed to migrate entity from server"); - // TODO: Move this to an event - //m_connection.SendReliablePacket(message); + + m_sendMigrateEntityEvent.Signal(m_connection, message); AZLOG(NET_RepDeletes, "Migration packet sent %u to remote manager id %d", netEntityId, aznumeric_cast(GetRemoteHostId())); // Immediately add a new replicator so that we catch RPC invocations, the remote side will make us a new one, and then remove us if needs be @@ -1130,7 +1135,7 @@ namespace Multiplayer bool EntityReplicationManager::HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message) { - EntityReplicator* replicator = GetEntityReplicator(message.m_entityId); + EntityReplicator* replicator = GetEntityReplicator(message.m_netEntityId); { if (message.m_propertyUpdateData.GetSize() > 0) { @@ -1140,7 +1145,7 @@ namespace Multiplayer invokingConnection, replicator, AzNetworking::InvalidPacketId, - message.m_entityId, + message.m_netEntityId, NetEntityRole::Server, outputSerializer, message.m_prefabEntityId @@ -1154,7 +1159,7 @@ namespace Multiplayer // The HandlePropertyChangeMessage will have made a replicator if we didn't have one already if (!replicator) { - replicator = GetEntityReplicator(message.m_entityId); + replicator = GetEntityReplicator(message.m_netEntityId); } AZ_Assert(replicator, "Do not have replicator after handling migration message"); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h index 731a1a7556..1920dc8881 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -8,7 +8,7 @@ #pragma once -#include +#include #include #include #include diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp index 14df1bb028..95e2b6d12c 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp @@ -6,8 +6,8 @@ * */ -#include -#include +#include +#include #include #include #include diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp index 1541885620..c0e5c09c7b 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp @@ -7,7 +7,7 @@ */ #include -#include +#include #include namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 69d2726c65..518c0c8c99 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -48,6 +48,16 @@ namespace Multiplayer m_updateEntityDomainEvent.Enqueue(net_EntityDomainUpdateMs, true); } + bool NetworkEntityManager::IsInitialized() const + { + return m_entityDomain != nullptr; + } + + IEntityDomain* NetworkEntityManager::GetEntityDomain() const + { + return m_entityDomain.get(); + } + NetworkEntityTracker* NetworkEntityManager::GetNetworkEntityTracker() { return &m_networkEntityTracker; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h index 9ccc576447..804946b882 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h @@ -31,11 +31,11 @@ namespace Multiplayer NetworkEntityManager(); ~NetworkEntityManager(); - //! Only invoked for authoritative hosts - void Initialize(HostId hostId, AZStd::unique_ptr entityDomain); - //! INetworkEntityManager overrides. //! @{ + void Initialize(HostId hostId, AZStd::unique_ptr entityDomain) override; + bool IsInitialized() const override; + IEntityDomain* GetEntityDomain() const override; NetworkEntityTracker* GetNetworkEntityTracker() override; NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override; MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override; diff --git a/Gems/Multiplayer/Code/multiplayer_files.cmake b/Gems/Multiplayer/Code/multiplayer_files.cmake index 0b2adb1530..c03773d5b3 100644 --- a/Gems/Multiplayer/Code/multiplayer_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_files.cmake @@ -28,6 +28,9 @@ set(FILES Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h Include/Multiplayer/NetworkEntity/NetworkEntityHandle.inl + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl Include/Multiplayer/NetworkEntity/EntityReplication/ReplicationRecord.h Include/Multiplayer/NetworkInput/IMultiplayerComponentInput.h Include/Multiplayer/NetworkInput/NetworkInput.h @@ -69,10 +72,7 @@ set(FILES Source/EntityDomains/FullOwnershipEntityDomain.cpp Source/EntityDomains/FullOwnershipEntityDomain.h Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp - Source/NetworkEntity/EntityReplication/EntityReplicationManager.h Source/NetworkEntity/EntityReplication/EntityReplicator.cpp - Source/NetworkEntity/EntityReplication/EntityReplicator.h - Source/NetworkEntity/EntityReplication/EntityReplicator.inl Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp Source/NetworkEntity/EntityReplication/PropertyPublisher.h Source/NetworkEntity/EntityReplication/PropertySubscriber.cpp From 6cd770a9448cfd00274efb3647e70395fc4d40bb Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 12:57:57 -0400 Subject: [PATCH 019/226] Fixed in-editor "Scripting" category components reference links to o3de.org docs Signed-off-by: Pinfel --- .../AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp | 2 +- .../Code/Editor/Components/EditorScriptCanvasComponent.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp index cc350c8107..376cd67e32 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/ScriptEditorComponent.cpp @@ -1024,7 +1024,7 @@ namespace AzToolsFramework ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/LuaScript.svg") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Script.png") - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/lua-script/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/scripting/lua-script/") ->DataElement("AssetRef", &ScriptEditorComponent::m_scriptAsset, "Script", "Which script to use") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &ScriptEditorComponent::ScriptHasChanged) ->Attribute("BrowseIcon", ":/stylesheet/img/UI20/browse-edit-select-files.svg") diff --git a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp index 2708f95f92..043e034062 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp @@ -170,7 +170,7 @@ namespace ScriptCanvasEditor ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("UI", 0x27ff46b0)) ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Level", 0x9aeacc13)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/script-canvas/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/scripting/script-canvas/") ->DataElement(AZ::Edit::UIHandlers::Default, &EditorScriptCanvasComponent::m_scriptCanvasAssetHolder, "Script Canvas Asset", "Script Canvas asset associated with this component") ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorScriptCanvasComponent::m_variableOverrides, "Properties", "Script Canvas Graph Properties") From 890dbbf2e9180983110ac02a8832737e781fefc9 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:01:40 -0400 Subject: [PATCH 020/226] Fixed in-editor "AI" category components reference links to o3de.org docs Signed-off-by: Pinfel --- .../Code/Source/Ai/EditorNavigationAreaComponent.cpp | 2 +- .../Code/Source/Ai/EditorNavigationSeedComponent.cpp | 2 +- Gems/LmbrCentral/Code/Source/Ai/NavigationComponent.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationAreaComponent.cpp b/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationAreaComponent.cpp index 4a290443d0..f723918cf3 100644 --- a/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationAreaComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationAreaComponent.cpp @@ -51,7 +51,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/NavigationArea.svg") ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/NavigationArea.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/nav-area/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/ai/nav-area/") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->DataElement(AZ::Edit::UIHandlers::CheckBox, &EditorNavigationAreaComponent::m_exclusion, "Exclusion", "Does this area add or subtract from the Navigation Mesh") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorNavigationAreaComponent::OnNavigationAreaChanged) diff --git a/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationSeedComponent.cpp b/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationSeedComponent.cpp index 975eb17da1..47999dbd4b 100644 --- a/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationSeedComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Ai/EditorNavigationSeedComponent.cpp @@ -36,7 +36,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/NavigationSeed.svg") ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/NavigationSeed.svg") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/nav-seed/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/ai/nav-seed/") ->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorNavigationSeedComponent::m_agentType, "Agent Type", "Describes the type of the Entity for navigation purposes.") ->Attribute(AZ::Edit::Attributes::StringList, &PopulateAgentTypeList) ->Attribute("ChangeNotify", &EditorNavigationSeedComponent::OnAgentTypeChanged); diff --git a/Gems/LmbrCentral/Code/Source/Ai/NavigationComponent.cpp b/Gems/LmbrCentral/Code/Source/Ai/NavigationComponent.cpp index 9897895dcd..500d5c17da 100644 --- a/Gems/LmbrCentral/Code/Source/Ai/NavigationComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Ai/NavigationComponent.cpp @@ -125,7 +125,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Navigation.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/navigation/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/ai/navigation/") ->DataElement(AZ::Edit::UIHandlers::Default, &NavigationComponent::m_agentSpeed, "Agent Speed", "The speed of the agent while navigating ") ->DataElement(AZ::Edit::UIHandlers::ComboBox, &NavigationComponent::m_agentType, "Agent Type", From 1fc8ef44c7da3c54b50fc2071a96f75176a68386 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:07:50 -0400 Subject: [PATCH 021/226] Fixed in-editor "Animation" category components reference links to o3de.org docs Signed-off-by: Pinfel --- .../Code/Source/Animation/EditorAttachmentComponent.cpp | 2 +- .../Integration/Editor/Components/EditorActorComponent.cpp | 2 +- .../Integration/Editor/Components/EditorAnimGraphComponent.cpp | 2 +- .../Editor/Components/EditorSimpleMotionComponent.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp index 878eb51efb..c494b08b22 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Animation/EditorAttachmentComponent.cpp @@ -70,7 +70,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->Attribute( AZ::Edit::Attributes::HelpPageURL, - "https://o3de.org/docs/user-guide/components/reference/attachment/") + "https://o3de.org/docs/user-guide/components/reference/animation/attachment/") ->DataElement(0, &EditorAttachmentComponent::m_targetId, "Target entity", "Attach to this entity.") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorAttachmentComponent::OnTargetIdChanged) ->DataElement( diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp index ed4edda891..293f9a1015 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp @@ -106,7 +106,7 @@ namespace EMotionFX ->Attribute(AZ::Edit::Attributes::ViewportIcon, ":/EMotionFX/Viewport/ActorComponent.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/actor/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/animation/actor/") ->DataElement(0, &EditorActorComponent::m_actorAsset, "Actor asset", "Assigned actor asset") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorActorComponent::OnAssetSelected) diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp index 8721acbf3d..3e5de8237c 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorAnimGraphComponent.cpp @@ -64,7 +64,7 @@ namespace EMotionFX ->Attribute(AZ::Edit::Attributes::ViewportIcon, ":/EMotionFX/Viewport/AnimGraphComponent.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/animgraph/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/animation/animgraph/") ->DataElement(AZ::Edit::UIHandlers::Default, &EditorAnimGraphComponent::m_motionSetAsset, "Motion set asset", "EMotion FX motion set asset to be loaded for this actor.") ->Attribute("EditButton", "") diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorSimpleMotionComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorSimpleMotionComponent.cpp index 8446050254..783399c956 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorSimpleMotionComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorSimpleMotionComponent.cpp @@ -46,12 +46,12 @@ namespace EMotionFX ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, azrtti_typeid()) ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Mannequin.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/animation/simple-motion/") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->DataElement(0, &EditorSimpleMotionComponent::m_previewInEditor, "Preview In Editor", "Plays motion in Editor") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorSimpleMotionComponent::OnEditorPropertyChanged) ->DataElement(0, &EditorSimpleMotionComponent::m_configuration, "Configuration", "Settings for this Simple Motion") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorSimpleMotionComponent::OnEditorPropertyChanged) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/simple-motion/") ; } } From 00b5b7ba2d0cfa357ee7386562c4ab28dbefee81 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:15:05 -0400 Subject: [PATCH 022/226] Fixed in-editor "Atom" category components reference links to o3de.org docs Signed-off-by: Pinfel --- .../Code/Source/CoreLights/EditorAreaLightComponent.cpp | 2 +- .../Code/Source/CoreLights/EditorDirectionalLightComponent.cpp | 2 +- .../EditorDiffuseProbeGridComponent.cpp | 1 + .../CommonFeatures/Code/Source/Grid/EditorGridComponent.cpp | 2 +- .../Source/ImageBasedLights/EditorImageBasedLightComponent.cpp | 2 +- .../Code/Source/Material/EditorMaterialComponent.cpp | 2 +- .../CommonFeatures/Code/Source/Mesh/EditorMeshComponent.cpp | 2 +- .../EditorOcclusionCullingPlaneComponent.cpp | 1 + .../Code/Source/PostProcess/Bloom/EditorBloomComponent.cpp | 2 +- .../PostProcess/DepthOfField/EditorDepthOfFieldComponent.cpp | 2 +- .../PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp | 2 +- .../Code/Source/PostProcess/EditorPostFxLayerComponent.cpp | 2 +- .../ExposureControl/EditorExposureControlComponent.cpp | 2 +- .../EditorGradientWeightModifierComponent.cpp | 2 +- .../LookModification/EditorLookModificationComponent.cpp | 2 +- .../EditorRadiusWeightModifierComponent.cpp | 2 +- .../ShapeWeightModifier/EditorShapeWeightModifierComponent.cpp | 2 +- .../Code/Source/PostProcess/Ssao/EditorSsaoComponent.cpp | 2 +- .../Source/ReflectionProbe/EditorReflectionProbeComponent.cpp | 1 + .../Code/Source/ScreenSpace/EditorDeferredFogComponent.cpp | 2 +- .../Code/Source/Scripting/EditorEntityReferenceComponent.cpp | 2 +- .../Code/Source/SkyBox/EditorHDRiSkyboxComponent.cpp | 2 +- .../Code/Source/SkyBox/EditorPhysicalSkyComponent.cpp | 2 +- 23 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorAreaLightComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorAreaLightComponent.cpp index 659c394cba..954ec4cad8 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorAreaLightComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorAreaLightComponent.cpp @@ -49,7 +49,7 @@ namespace AZ ->Attribute(Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/AreaLight.svg") ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/area-light/") + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/light/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorDirectionalLightComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorDirectionalLightComponent.cpp index ef9c73c0b4..2854244f6b 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorDirectionalLightComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/CoreLights/EditorDirectionalLightComponent.cpp @@ -44,7 +44,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO][ATOM-1998] create icons. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [GFX TODO][ATOM-1998] create page + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/directional-light/") // [GFX TODO][ATOM-1998] create page ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp index 013a8ee1b4..8383ac0f17 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp @@ -53,6 +53,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/diffuse-probe-grid/") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->ClassElement(AZ::Edit::ClassElements::Group, "Probe Spacing") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Grid/EditorGridComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Grid/EditorGridComponent.cpp index 76f198852e..253f3ddd90 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Grid/EditorGridComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Grid/EditorGridComponent.cpp @@ -34,7 +34,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/grid/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/EditorImageBasedLightComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/EditorImageBasedLightComponent.cpp index 0547da6240..31eb0d51b1 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/EditorImageBasedLightComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ImageBasedLights/EditorImageBasedLightComponent.cpp @@ -34,7 +34,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/global-skylight-ibl/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponent.cpp index c243522257..899dce4feb 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponent.cpp @@ -89,7 +89,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/material/") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->DataElement(AZ::Edit::UIHandlers::MultiLineEdit, &EditorMaterialComponent::m_message, "Message", "") ->Attribute(AZ_CRC("PlaceholderText", 0xa23ec278), "Component cannot be edited with multiple entities selected") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/EditorMeshComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/EditorMeshComponent.cpp index 3324bdfa8d..c89546264a 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/EditorMeshComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/EditorMeshComponent.cpp @@ -48,7 +48,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Mesh.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/mesh/") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->DataElement(AZ::Edit::UIHandlers::Button, &EditorMeshComponent::m_addMaterialComponentFlag, "Add Material Component", "Add Material Component") ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/EditorOcclusionCullingPlaneComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/EditorOcclusionCullingPlaneComponent.cpp index 3908aafe89..85eb4a209a 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/EditorOcclusionCullingPlaneComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/EditorOcclusionCullingPlaneComponent.cpp @@ -37,6 +37,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/occlusion-culling-plane/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Bloom/EditorBloomComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Bloom/EditorBloomComponent.cpp index 22c8e2dceb..9018b0860b 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Bloom/EditorBloomComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Bloom/EditorBloomComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [TODO ATOM-2672][PostFX] need create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/bloom/") // [TODO ATOM-2672][PostFX] need create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DepthOfField/EditorDepthOfFieldComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DepthOfField/EditorDepthOfFieldComponent.cpp index b3f77b1b8f..4b9ed8f6af 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DepthOfField/EditorDepthOfFieldComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DepthOfField/EditorDepthOfFieldComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing.y ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [GFX TODO][ATOM-2672][PostFX] need create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/depth-of-field/") // [GFX TODO][ATOM-2672][PostFX] need create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp index d06bc981fe..246fbbff5d 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/DisplayMapper/EditorDisplayMapperComponent.cpp @@ -33,7 +33,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO][ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC("Level", 0x9aeacc13), AZ_CRC("Game", 0x232b318c) })) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [GFX TODO][ATOM-2672][PostFX] need to create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/display-mapper/") // [GFX TODO][ATOM-2672][PostFX] need to create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/EditorPostFxLayerComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/EditorPostFxLayerComponent.cpp index 344c5f8edd..b61cce839e 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/EditorPostFxLayerComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/EditorPostFxLayerComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/postfx-layer/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ExposureControl/EditorExposureControlComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ExposureControl/EditorExposureControlComponent.cpp index 5bf3e0ec9c..d8bf13dd81 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ExposureControl/EditorExposureControlComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ExposureControl/EditorExposureControlComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [TODO ATOM-2672][PostFX] need create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/exposure-control/") // [TODO ATOM-2672][PostFX] need create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/EditorGradientWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/EditorGradientWeightModifierComponent.cpp index 86b5ad554a..2f143491f5 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/EditorGradientWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/GradientWeightModifier/EditorGradientWeightModifierComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "") + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/postfx-gradient-weight-modifier/") ; editContext->Class("GradientWeightModifierComponentController", "") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/EditorLookModificationComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/EditorLookModificationComponent.cpp index 310762863a..b23ae9805b 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/EditorLookModificationComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/LookModification/EditorLookModificationComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [TODO ATOM-2672][PostFX] need to create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/look-modification/") // [TODO ATOM-2672][PostFX] need to create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/EditorRadiusWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/EditorRadiusWeightModifierComponent.cpp index 219ab6acb9..d4d86d6496 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/EditorRadiusWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/RadiusWeightModifier/EditorRadiusWeightModifierComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "") + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/radius-weight-modifier/") ; editContext->Class("RadiusWeightModifierComponentController", "") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/EditorShapeWeightModifierComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/EditorShapeWeightModifierComponent.cpp index 46de0f0c68..842e1a6995 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/EditorShapeWeightModifierComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/ShapeWeightModifier/EditorShapeWeightModifierComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "") + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/postfx-shape-weight-modifier/") ; editContext->Class("ShapeWeightModifierComponentController", "") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Ssao/EditorSsaoComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Ssao/EditorSsaoComponent.cpp index b018ac7a54..43f311a77e 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Ssao/EditorSsaoComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/PostProcess/Ssao/EditorSsaoComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("Game")) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [GFX TODO][ATOM-2672][PostFX] need create page for PostProcessing. + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/ssao/") // [GFX TODO][ATOM-2672][PostFX] need create page for PostProcessing. ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp index 4f4f21ab0f..deb26f869d 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp @@ -51,6 +51,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/reflection-probe/") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->ClassElement(AZ::Edit::ClassElements::Group, "Cubemap Bake") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ScreenSpace/EditorDeferredFogComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ScreenSpace/EditorDeferredFogComponent.cpp index 208747abaa..139c24a959 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ScreenSpace/EditorDeferredFogComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ScreenSpace/EditorDeferredFogComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") // [GFX TODO ATOM-2672][PostFX] need to create icons for PostProcessing. ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "https://") // [TODO][ATOM-13427] Create Wiki for Deferred Fog + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/deferred-fog/") // [TODO][ATOM-13427] Create Wiki for Deferred Fog ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Scripting/EditorEntityReferenceComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Scripting/EditorEntityReferenceComponent.cpp index 65491a9833..e297b7cc12 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Scripting/EditorEntityReferenceComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Scripting/EditorEntityReferenceComponent.cpp @@ -31,7 +31,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(Edit::Attributes::AutoExpand, true) - ->Attribute(Edit::Attributes::HelpPageURL, "") + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/entity-reference/") ; editContext->Class("EntityReferenceComponentController", "") diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorHDRiSkyboxComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorHDRiSkyboxComponent.cpp index a0ffb4e509..1cf14cca71 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorHDRiSkyboxComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorHDRiSkyboxComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/hdri-skybox/") ; editContext->Class( diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorPhysicalSkyComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorPhysicalSkyComponent.cpp index 28cb4121cf..81b182ccaa 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorPhysicalSkyComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/SkyBox/EditorPhysicalSkyComponent.cpp @@ -32,7 +32,7 @@ namespace AZ ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/atom/physical-sky/") ; editContext->Class( From 83616242c7ce2650e1feb6cad88009d9948a9d56 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:15:55 -0400 Subject: [PATCH 023/226] Fixed in-editor "Camera" category components reference links to o3de.org docs Signed-off-by: Pinfel --- Gems/Camera/Code/Source/EditorCameraComponent.cpp | 2 +- Gems/CameraFramework/Code/Source/CameraRigComponent.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gems/Camera/Code/Source/EditorCameraComponent.cpp b/Gems/Camera/Code/Source/EditorCameraComponent.cpp index 4ebec334ec..0a922b4c4c 100644 --- a/Gems/Camera/Code/Source/EditorCameraComponent.cpp +++ b/Gems/Camera/Code/Source/EditorCameraComponent.cpp @@ -95,7 +95,7 @@ namespace Camera ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/Camera.svg") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/camera/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/camera/camera/") ->UIElement(AZ::Edit::UIHandlers::Button,"", "Sets the view to this camera") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorCameraComponent::OnPossessCameraButtonClicked) ->Attribute(AZ::Edit::Attributes::ButtonText, &EditorCameraComponent::GetCameraViewButtonText) diff --git a/Gems/CameraFramework/Code/Source/CameraRigComponent.cpp b/Gems/CameraFramework/Code/Source/CameraRigComponent.cpp index e8df095ed0..12c1e5861b 100644 --- a/Gems/CameraFramework/Code/Source/CameraRigComponent.cpp +++ b/Gems/CameraFramework/Code/Source/CameraRigComponent.cpp @@ -126,7 +126,7 @@ namespace Camera ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/CameraRig.svg") ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/CameraRig.png") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/camera-rig/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/camera/camera-rig/") ->DataElement(0, &CameraRigComponent::m_targetAcquirers, "Target acquirers", "A list of behaviors that define how a camera will select a target. They are executed in order until one succeeds") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) From 9b29ea7ae24ac1b58ad6f3bdfcbe8e49c774ca75 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:16:26 -0400 Subject: [PATCH 024/226] Fixed in-editor "Editor" category components reference links to o3de.org docs Signed-off-by: Pinfel --- Gems/LmbrCentral/Code/Source/Editor/EditorCommentComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/LmbrCentral/Code/Source/Editor/EditorCommentComponent.cpp b/Gems/LmbrCentral/Code/Source/Editor/EditorCommentComponent.cpp index 97f8dc60a2..6c929bd3c4 100644 --- a/Gems/LmbrCentral/Code/Source/Editor/EditorCommentComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Editor/EditorCommentComponent.cpp @@ -33,7 +33,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Comment.svg") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC("Level", 0x9aeacc13), AZ_CRC("Game", 0x232b318c), AZ_CRC("Layer", 0xe4db211a) })) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/comment/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/editor/comment/") ->DataElement(AZ::Edit::UIHandlers::MultiLineEdit, &EditorCommentComponent::m_comment,"", "Comment") ->Attribute(AZ_CRC("PlaceholderText", 0xa23ec278), "Add comment text here"); } From c2a3351676dd24bbbe8b907480adfab408f3fe72 Mon Sep 17 00:00:00 2001 From: Pinfel Date: Sun, 19 Sep 2021 13:19:17 -0400 Subject: [PATCH 025/226] Fixed in-editor "Gameplay" category components reference links to o3de.org docs Signed-off-by: Pinfel --- Gems/LmbrCentral/Code/Source/Scripting/EditorTagComponent.cpp | 2 +- Gems/LmbrCentral/Code/Source/Scripting/SimpleStateComponent.cpp | 2 +- .../Code/Source/InputConfigurationComponent.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gems/LmbrCentral/Code/Source/Scripting/EditorTagComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/EditorTagComponent.cpp index fa98601a11..90fc0db437 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/EditorTagComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/EditorTagComponent.cpp @@ -38,7 +38,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/Tag.svg") ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Tag.svg") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/tag/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/gameplay/tag/") ->DataElement(AZ::Edit::UIHandlers::Default, &EditorTagComponent::m_tags, "Tags", "The tags that will be on this entity by default") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorTagComponent::OnTagChanged); } diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SimpleStateComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/SimpleStateComponent.cpp index e278f18e8b..29c97cdde1 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SimpleStateComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/SimpleStateComponent.cpp @@ -204,7 +204,7 @@ namespace LmbrCentral ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) ->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/SimpleState.svg") ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/SimpleState.svg") - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/simple-state/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/gameplay/simple-state/") ->DataElement(AZ::Edit::UIHandlers::ComboBox, &SimpleStateComponent::m_initialStateName, "Initial state", "The initial active state") ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ_CRC("RefreshAttributesAndValues", 0xcbc2147c)) ->Attribute(AZ::Edit::Attributes::StringList, &SimpleStateComponent::GetStateNames) diff --git a/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp b/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp index 42fa05473c..b2a1251662 100644 --- a/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp +++ b/Gems/StartingPointInput/Code/Source/InputConfigurationComponent.cpp @@ -55,7 +55,7 @@ namespace StartingPointInput ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/InputConfig.svg") ->Attribute(AZ::Edit::Attributes::PrimaryAssetType, AZ::AzTypeInfo::Uuid()) ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game")) - ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/input/") + ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/gameplay/input/") ->DataElement(AZ::Edit::UIHandlers::Default, &InputConfigurationComponent::m_inputEventBindingsAsset, "Input to event bindings", "Asset containing input to event binding information.") ->Attribute(AZ::Edit::Attributes::AutoExpand, true) From ca7de715fdaced0bb040bb981f7d44501aa1e213 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 21 Sep 2021 11:56:19 -0700 Subject: [PATCH 026/226] minor code cleanup Signed-off-by: kberg-amzn --- .../Multiplayer/Components/NetworkCharacterComponent.h | 6 +----- .../Multiplayer/Components/NetworkRigidBodyComponent.h | 1 + .../Code/Source/Components/NetworkCharacterComponent.cpp | 6 +++++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h index 478c925299..9d111ea86d 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkCharacterComponent.h @@ -31,14 +31,10 @@ namespace Multiplayer AZ_MULTIPLAYER_COMPONENT(Multiplayer::NetworkCharacterComponent, s_networkCharacterComponentConcreteUuid, Multiplayer::NetworkCharacterComponentBase) static void Reflect(AZ::ReflectContext* context); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); NetworkCharacterComponent(); - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC_CE("NetworkRigidBodyService")); - } - // AZ::Component void OnInit() override {} void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h index 19379fc959..fa4c838816 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h @@ -4,6 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once #include diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp index b14fc8761f..f34771b2c6 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp @@ -19,7 +19,6 @@ namespace Multiplayer { - bool CollisionLayerBasedControllerFilter(const physx::PxController& controllerA, const physx::PxController& controllerB) { PHYSX_SCENE_READ_LOCK(controllerA.getActor()->getScene()); @@ -94,6 +93,11 @@ namespace Multiplayer NetworkCharacterComponentBase::Reflect(context); } + void NetworkCharacterComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("NetworkRigidBodyService")); + } + NetworkCharacterComponent::NetworkCharacterComponent() : m_translationEventHandler([this](const AZ::Vector3& translation) { OnTranslationChangedEvent(translation); }) { From d28bcbe027bc7d0bc601cbca8be09dea1d71e004 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 21 Sep 2021 19:33:59 -0700 Subject: [PATCH 027/226] Reverts changes to component application and adds further client migration handling hookup Signed-off-by: kberg-amzn --- .../AzCore/Component/ComponentApplication.cpp | 92 ++++++++++--------- .../AzCore/Component/ComponentApplication.h | 12 +-- .../Code/Include/Multiplayer/IMultiplayer.h | 27 ++++-- .../Source/AutoGen/AutoComponent_Header.jinja | 2 + .../AutoGen/Multiplayer.AutoPackets.xml | 6 +- .../ServerToClientConnectionData.cpp | 58 ++++++------ .../Source/MultiplayerSystemComponent.cpp | 12 ++- .../Code/Source/MultiplayerSystemComponent.h | 3 + 8 files changed, 120 insertions(+), 92 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index b8f84cb0ea..54c3edfcdc 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -121,9 +121,9 @@ namespace AZ return environment ? environment->Get() : nullptr; } - ComponentApplication::EventLoggerDeleter::EventLoggerDeleter() noexcept= default; + ComponentApplication::EventLoggerDeleter::EventLoggerDeleter() noexcept = default; ComponentApplication::EventLoggerDeleter::EventLoggerDeleter(bool skipDelete) noexcept - : m_skipDelete{skipDelete} + : m_skipDelete{ skipDelete } {} void ComponentApplication::EventLoggerDeleter::operator()(AZ::Debug::LocalFileEventLogger* ptr) { @@ -332,27 +332,27 @@ namespace AZ ->Value("Stack trace always", Debug::AllocationRecords::RECORD_FULL); ec->Class("System memory settings", "Settings for managing application memory usage") ->ClassElement(Edit::ClassElements::EditorData, "") - ->Attribute(Edit::Attributes::AutoExpand, true) + ->Attribute(Edit::Attributes::AutoExpand, true) ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_grabAllMemory, "Allocate all memory at startup", "Allocate all system memory at startup if enabled, or allocate as needed if disabled") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecords, "Record allocations", "Collect information on each allocation made for debugging purposes (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecordsSaveNames, "Record allocations with name saving", "Saves names/filenames information on each allocation made, useful for tracking down leaks in dynamic modules (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecordsAttemptDecodeImmediately, "Record allocations and attempt immediate decode", "Decode callstacks for each allocation when they occur, used for tracking allocations that fail decoding. Very expensive. (ignored in Release builds)") ->DataElement(Edit::UIHandlers::ComboBox, &Descriptor::m_recordingMode, "Stack recording mode", "Stack record mode. (Ignored in final builds)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_stackRecordLevels, "Stack entries to record", "Number of stack levels to record for each allocation (ignored in Release builds)") - ->Attribute(Edit::Attributes::Step, 1) - ->Attribute(Edit::Attributes::Max, 1024) + ->Attribute(Edit::Attributes::Step, 1) + ->Attribute(Edit::Attributes::Max, 1024) ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_autoIntegrityCheck, "Validate allocations", "Check allocations for integrity on each allocation/free (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_markUnallocatedMemory, "Mark freed memory", "Set memory to 0xcd when a block is freed for debugging (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_doNotUsePools, "Don't pool allocations", "Pipe pool allocations in system/tree heap (ignored in Release builds)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_pageSize, "Page size", "Memory page size in bytes (must be OS page size aligned)") - ->Attribute(Edit::Attributes::Step, 1024) + ->Attribute(Edit::Attributes::Step, 1024) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_poolPageSize, "Pool page size", "Memory pool page size in bytes (must be a multiple of page size)") - ->Attribute(Edit::Attributes::Max, &Descriptor::m_pageSize) - ->Attribute(Edit::Attributes::Step, 1024) + ->Attribute(Edit::Attributes::Max, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, 1024) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_memoryBlockAlignment, "Block alignment", "Memory block alignment in bytes (must be multiple of the page size)") - ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_memoryBlocksByteSize, "Block size", "Memory block size in bytes (must be multiple of the page size)") - ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedOS, "OS reserved memory", "System memory reserved for OS (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedDebug, "Memory reserved for debugger", "System memory reserved for Debug allocator, like memory tracking (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_enableDrilling, "Enable Driller", "Enable Drilling support for the application (ignored in Release builds)") @@ -419,11 +419,11 @@ namespace AZ } else { - azstrcpy(m_commandLineBuffer, AZ_ARRAY_SIZE(m_commandLineBuffer), "no_argv_supplied"); + azstrcpy(m_commandLineBuffer, AZ_ARRAY_SIZE(m_commandLineBuffer), "no_argv_supplied"); // use a "valid" value here. This is because Qt and potentially other third party libraries require // that ArgC be 'at least 1' and that (*argV)[0] be a valid pointer to a real null terminated string. - m_argC = 1; - m_argV = &m_commandLineBufferAddress; + m_argC = 1; + m_argV = &m_commandLineBufferAddress; } // Create the Event logger if it doesn't exist, otherwise reuse the one registered @@ -557,8 +557,8 @@ namespace AZ void ReportBadEngineRoot() { - AZStd::string errorMessage = {"Unable to determine a valid path to the engine.\n" - "Check parameters such as --project-path and --engine-path and make sure they are valid.\n"}; + AZStd::string errorMessage = { "Unable to determine a valid path to the engine.\n" + "Check parameters such as --project-path and --engine-path and make sure they are valid.\n" }; if (auto registry = AZ::SettingsRegistry::Get(); registry != nullptr) { AZ::SettingsRegistryInterface::FixedValueString filePathErrorStr; @@ -614,7 +614,6 @@ namespace AZ AZ_Assert(m_systemEntity, "SystemEntity failed to initialize!"); AddRequiredSystemComponents(m_systemEntity.get()); - //m_currentTime = GetElapsedTimeUs(); m_isStarted = true; return m_systemEntity.get(); } @@ -1372,38 +1371,44 @@ namespace AZ void ComponentApplication::Tick(float deltaOverride /*= -1.f*/) { - AZ_PROFILE_SCOPE(System, "Component application simulation tick"); - AZStd::chrono::system_clock::time_point now = AZStd::chrono::system_clock::now(); - m_deltaTime = 0.0f; - if (now >= m_currentTime) { - AZStd::chrono::duration delta = now - m_currentTime; - m_deltaTime = deltaOverride >= 0.f ? deltaOverride : delta.count(); - } - { - AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:ExecuteQueuedEvents"); - TickBus::ExecuteQueuedEvents(); - } - m_currentTime = now; - { - AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:OnTick"); - EBUS_EVENT(TickBus, OnTick, m_deltaTime, ScriptTimePoint(now)); - } + AZ_PROFILE_SCOPE(System, "Component application simulation tick"); - // If tick rate limiting is on, ensure (1 / g_simulation_tick_rate) ms has elapsed since the last frame, - // sleeping if there's still time remaining. - if (g_simulation_tick_rate > 0.f) - { - now = AZStd::chrono::system_clock::now(); + AZStd::chrono::system_clock::time_point now = AZStd::chrono::system_clock::now(); - // Work in microsecond durations here as that's the native measurement time for time_point - constexpr float microsecondsPerSecond = 1000.f * 1000.f; - const AZStd::chrono::microseconds timeBudgetPerTick(static_cast(microsecondsPerSecond / g_simulation_tick_rate)); - AZStd::chrono::microseconds timeUntilNextTick = m_currentTime + timeBudgetPerTick - now; + m_deltaTime = 0.0f; - if (timeUntilNextTick.count() > 0) + if (now >= m_currentTime) { - AZStd::this_thread::sleep_for(timeUntilNextTick); + AZStd::chrono::duration delta = now - m_currentTime; + m_deltaTime = deltaOverride >= 0.f ? deltaOverride : delta.count(); + } + + { + AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:ExecuteQueuedEvents"); + TickBus::ExecuteQueuedEvents(); + } + m_currentTime = now; + { + AZ_PROFILE_SCOPE(AzCore, "ComponentApplication::Tick:OnTick"); + EBUS_EVENT(TickBus, OnTick, m_deltaTime, ScriptTimePoint(now)); + } + + // If tick rate limiting is on, ensure (1 / g_simulation_tick_rate) ms has elapsed since the last frame, + // sleeping if there's still time remaining. + if (g_simulation_tick_rate > 0.f) + { + now = AZStd::chrono::system_clock::now(); + + // Work in microsecond durations here as that's the native measurement time for time_point + constexpr float microsecondsPerSecond = 1000.f * 1000.f; + const AZStd::chrono::microseconds timeBudgetPerTick(static_cast(microsecondsPerSecond / g_simulation_tick_rate)); + AZStd::chrono::microseconds timeUntilNextTick = m_currentTime + timeBudgetPerTick - now; + + if (timeUntilNextTick.count() > 0) + { + AZStd::this_thread::sleep_for(timeUntilNextTick); + } } } } @@ -1555,5 +1560,4 @@ namespace AZ AZ::SettingsRegistryScriptUtils::ReflectSettingsRegistryToBehaviorContext(*behaviorContext); } } - } // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index 969903cdc1..892563fb08 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -5,13 +5,13 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once #include #include #include #include -#include #include #include #include @@ -377,14 +377,14 @@ namespace AZ EntityRemovedEvent m_entityRemovedEvent; EntityAddedEvent m_entityActivatedEvent; EntityRemovedEvent m_entityDeactivatedEvent; - AZ::IConsole* m_console{}; + AZ::IConsole* m_console{}; Descriptor m_descriptor; bool m_isStarted{ false }; bool m_isSystemAllocatorOwner{ false }; bool m_isOSAllocatorOwner{ false }; bool m_ownsConsole{}; - void* m_fixedMemoryBlock{ nullptr }; //!< Pointer to the memory block allocator, so we can free it OnDestroy. - IAllocatorAllocate* m_osAllocator{ nullptr }; + void* m_fixedMemoryBlock{ nullptr }; //!< Pointer to the memory block allocator, so we can free it OnDestroy. + IAllocatorAllocate* m_osAllocator{ nullptr }; EntitySetType m_entities; AZ::IO::FixedMaxPath m_exeDirectory; AZ::IO::FixedMaxPath m_engineRoot; @@ -405,11 +405,11 @@ namespace AZ // we create a buffer that can be written to (up to AZ_MAX_PATH_LEN) and then // pack it with a single param. char m_commandLineBuffer[AZ_MAX_PATH_LEN]; - char* m_commandLineBufferAddress{ m_commandLineBuffer }; + char* m_commandLineBufferAddress{ m_commandLineBuffer }; StartupParameters m_startupParameters; - char** m_argV{ nullptr }; + char** m_argV{ nullptr }; int m_argC{ 0 }; AZ::CommandLine m_commandLine; // < Stores parsed command line supplied to the constructor diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index 11f5ac7e47..021907fb7a 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -45,6 +45,7 @@ namespace Multiplayer using ClientMigrationStartEvent = AZ::Event; using ClientMigrationEndEvent = AZ::Event<>; using ClientDisconnectedEvent = AZ::Event<>; + using NotifyClientMigrationEvent = AZ::Event; using ConnectionAcquiredEvent = AZ::Event; using SessionInitEvent = AZ::Event; using SessionShutdownEvent = AZ::Event; @@ -80,34 +81,38 @@ namespace Multiplayer //! @param state The state of this connection virtual void InitializeMultiplayer(MultiplayerAgentType state) = 0; - //! Starts hosting a server + //! Starts hosting a server. //! @param port The port to listen for connection on //! @param isDedicated Whether the server is dedicated or client hosted //! @return if the application successfully started hosting virtual bool StartHosting(uint16_t port, bool isDedicated = true) = 0; - //! Connects to the specified IP as a Client + //! Connects to the specified IP as a Client. //! @param remoteAddress The domain or IP to connect to //! @param port The port to connect to //! @result if a connection was successfully created virtual bool Connect(AZStd::string remoteAddress, uint16_t port) = 0; - // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context + // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context. //! @param reason The reason for terminating connections virtual void Terminate(AzNetworking::DisconnectReason reason) = 0; - //! Adds a ClientMigrationStartEvent Handler which is invoked at the start of a client migration + //! Adds a ClientMigrationStartEvent Handler which is invoked at the start of a client migration. //! @param handler The ClientMigrationStartEvent Handler to add virtual void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) = 0; - //! Adds a ClientMigrationEndEvent Handler which is invoked when a client completes migration + //! Adds a ClientMigrationEndEvent Handler which is invoked when a client completes migration. //! @param handler The ClientMigrationEndEvent Handler to add virtual void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) = 0; - //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs + //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs. //! @param handler The ClientDisconnectedEvent Handler to add virtual void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) = 0; + //! Adds a NotifyClientMigrationEvent Handler which is invoked when a client migrates from one host to another. + //! @param handler The NotifyClientMigrationEvent Handler to add + virtual void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) = 0; + //! Adds a ConnectionAcquiredEvent Handler which is invoked when a new endpoint connects to the session. //! @param handler The ConnectionAcquiredEvent Handler to add virtual void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) = 0; @@ -120,7 +125,13 @@ namespace Multiplayer //! @param handler The SessionShutdownEvent handler to add virtual void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) = 0; - //! Sends a packet telling if entity update messages can be sent + //! Signals a NotifyClientMigrationEvent with the provided parameters. + //! @param hostId the host id of the host the client is migrating to + //! @param userIdentifier the user identifier the client will provide the new host to validate identity + //! @param lastClientInputId the last processed clientInputId by the current host + virtual void SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId); + + //! Sends a packet telling if entity update messages can be sent. //! @param readyForEntityUpdates Ready for entity updates or not virtual void SendReadyForEntityUpdates(bool readyForEntityUpdates) = 0; @@ -132,7 +143,7 @@ namespace Multiplayer //! @return the current server time in milliseconds virtual AZ::TimeMs GetCurrentHostTimeMs() const = 0; - //! Returns the current blend factor for client side interpolation + //! Returns the current blend factor for client side interpolation. //! This value is only relevant on the client and is used to smooth between host frames //! @return the current blend factor virtual float GetCurrentBlendFactor() const = 0; diff --git a/Gems/Multiplayer/Code/Source/AutoGen/AutoComponent_Header.jinja b/Gems/Multiplayer/Code/Source/AutoGen/AutoComponent_Header.jinja index 41f0fa1b02..5cfeb250fa 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/AutoComponent_Header.jinja +++ b/Gems/Multiplayer/Code/Source/AutoGen/AutoComponent_Header.jinja @@ -403,6 +403,8 @@ namespace {{ Component.attrib['Namespace'] }} : public Multiplayer::MultiplayerController { public: + using ComponentType = {{ ComponentName }}; + {{ ControllerBaseName }}({{ ComponentName }}& owner); ~{{ ControllerBaseName }}() override = default; diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml index c553bc5351..d7602b1a3b 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml @@ -40,8 +40,8 @@ - - - + + + diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp index 5a9e8b4d4b..ad1bcb5130 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp @@ -7,7 +7,10 @@ */ #include +#include +#include #include +#include namespace Multiplayer { @@ -95,36 +98,31 @@ namespace Multiplayer [[maybe_unused]] AzNetworking::ConnectionId connectionId ) { - //Multiplayer::ServerAddrInfo serverAddr; - //if (gNovaGame->GetMultiplayerworkAgent().GetServerToServerNetwork().GetServerAddrInfoFromConnectionId(newConnectionId, serverAddr) == false) - //{ - // AZLOG_WARN("MigrateClient::Failed to find servershard address, userID:%d", static_cast(GetUserId())); - // return; - //} - // - //Multiplayer::GameTimePoint migratedClientGameTimePoint; - // - //if (m_ControlledEntity != nullptr) - //{ - // if (const PlayerNetworkInputComponent::Authority* pComponent = Multiplayer::FindController(m_ControlledEntity)) - // { - // migratedClientGameTimePoint = pComponent->GetLastInputId().GetServerGameTimePoint(); - // } - //} - // - // generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration - //const uint64_t randomUserIdentifier = 0; - // - //// Tell the server a new client is about to join - //MultiplayerPackets::NotifyClientMigration notifyClientMigration(randomUserIdentifier); - //gNovaGame->GetMultiplayerworkAgent().GetServerToServerNetwork().SendReliablePacket(newConnectionId, notifyClientMigration); - // - //// Tell the client who to join - //MultiplayerPackets::ClientMigration clientMigration(randomUserIdentifier, serverAddr, migratedClientGameTimePoint); - //GetConnection()->SendReliablePacket(clientMigration); - // - //m_controlledEntity = nullptr; - //m_canSendUpdates = false; + AzNetworking::IpAddress serverAddress; + // serverAddress = GetHost(remoteHostId).GetAddress(); + + ClientInputId migratedClientInputId = ClientInputId{ 0 }; + if (m_controlledEntity != nullptr) + { + auto controller = m_controlledEntity.FindController(); + if (controller != nullptr) + { + migratedClientInputId = controller->GetLastInputId(); + } + } + + // Generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration + const uint64_t randomUserIdentifier = AzNetworking::CryptoRand64(); + + // Tell the new host that a client is about to (re)join + GetMultiplayer()->SendNotifyClientMigrationEvent(remoteHostId, randomUserIdentifier, migratedClientInputId); + + // Tell the client who to join + MultiplayerPackets::ClientMigration clientMigration(serverAddress, randomUserIdentifier, migratedClientInputId); + GetConnection()->SendReliablePacket(clientMigration); + + m_controlledEntity = NetworkEntityHandle(); + m_canSendUpdates = false; } void ServerToClientConnectionData::OnGameplayStarted() diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index c28fb23cc4..dbc93834e8 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -617,7 +617,7 @@ namespace Multiplayer auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::ClientMigrated, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); AZLOG_INFO("Migrating to new server shard"); - //m_clientMigrateStartEvent(packet.GetLastInputGameTimeMs()); + m_clientMigrationStartEvent.Signal(ClientInputId{ 0 }); m_networkInterface->Connect(packet.GetRemoteServerAddress()); return true; } @@ -795,6 +795,11 @@ namespace Multiplayer handler.Connect(m_clientDisconnectedEvent); } + void MultiplayerSystemComponent::AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) + { + handler.Connect(m_notifyClientMigrationEvent); + } + void MultiplayerSystemComponent::AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) { handler.Connect(m_connectionAcquiredEvent); @@ -810,6 +815,11 @@ namespace Multiplayer handler.Connect(m_shutdownEvent); } + void MultiplayerSystemComponent::SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) + { + m_notifyClientMigrationEvent.Signal(hostId, userIdentifier, lastClientInputId); + } + void MultiplayerSystemComponent::SendReadyForEntityUpdates(bool readyForEntityUpdates) { IConnectionSet& connectionSet = m_networkInterface->GetConnectionSet(); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index 40d806a0e0..bdf6511409 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -111,9 +111,11 @@ namespace Multiplayer void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) override; void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) override; void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) override; + void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) override; void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; + void SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; float GetCurrentBlendFactor() const override; @@ -154,6 +156,7 @@ namespace Multiplayer ClientDisconnectedEvent m_clientDisconnectedEvent; ClientMigrationStartEvent m_clientMigrationStartEvent; ClientMigrationEndEvent m_clientMigrationEndEvent; + NotifyClientMigrationEvent m_notifyClientMigrationEvent; AZStd::queue m_pendingConnectionTickets; From e8aeb9b10103edec556d79a4a33fdbe86e8cb265 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 21 Sep 2021 19:37:54 -0700 Subject: [PATCH 028/226] Format fixing Signed-off-by: kberg-amzn --- .../AzCore/Component/ComponentApplication.cpp | 30 +++++++++---------- .../AzCore/Component/ComponentApplication.h | 10 +++---- .../AutoGen/Multiplayer.AutoPackets.xml | 6 ++-- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index 54c3edfcdc..4a6e6d035d 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -121,9 +121,9 @@ namespace AZ return environment ? environment->Get() : nullptr; } - ComponentApplication::EventLoggerDeleter::EventLoggerDeleter() noexcept = default; + ComponentApplication::EventLoggerDeleter::EventLoggerDeleter() noexcept= default; ComponentApplication::EventLoggerDeleter::EventLoggerDeleter(bool skipDelete) noexcept - : m_skipDelete{ skipDelete } + : m_skipDelete{skipDelete} {} void ComponentApplication::EventLoggerDeleter::operator()(AZ::Debug::LocalFileEventLogger* ptr) { @@ -332,27 +332,27 @@ namespace AZ ->Value("Stack trace always", Debug::AllocationRecords::RECORD_FULL); ec->Class("System memory settings", "Settings for managing application memory usage") ->ClassElement(Edit::ClassElements::EditorData, "") - ->Attribute(Edit::Attributes::AutoExpand, true) + ->Attribute(Edit::Attributes::AutoExpand, true) ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_grabAllMemory, "Allocate all memory at startup", "Allocate all system memory at startup if enabled, or allocate as needed if disabled") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecords, "Record allocations", "Collect information on each allocation made for debugging purposes (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecordsSaveNames, "Record allocations with name saving", "Saves names/filenames information on each allocation made, useful for tracking down leaks in dynamic modules (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_allocationRecordsAttemptDecodeImmediately, "Record allocations and attempt immediate decode", "Decode callstacks for each allocation when they occur, used for tracking allocations that fail decoding. Very expensive. (ignored in Release builds)") ->DataElement(Edit::UIHandlers::ComboBox, &Descriptor::m_recordingMode, "Stack recording mode", "Stack record mode. (Ignored in final builds)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_stackRecordLevels, "Stack entries to record", "Number of stack levels to record for each allocation (ignored in Release builds)") - ->Attribute(Edit::Attributes::Step, 1) - ->Attribute(Edit::Attributes::Max, 1024) + ->Attribute(Edit::Attributes::Step, 1) + ->Attribute(Edit::Attributes::Max, 1024) ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_autoIntegrityCheck, "Validate allocations", "Check allocations for integrity on each allocation/free (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_markUnallocatedMemory, "Mark freed memory", "Set memory to 0xcd when a block is freed for debugging (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_doNotUsePools, "Don't pool allocations", "Pipe pool allocations in system/tree heap (ignored in Release builds)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_pageSize, "Page size", "Memory page size in bytes (must be OS page size aligned)") - ->Attribute(Edit::Attributes::Step, 1024) + ->Attribute(Edit::Attributes::Step, 1024) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_poolPageSize, "Pool page size", "Memory pool page size in bytes (must be a multiple of page size)") - ->Attribute(Edit::Attributes::Max, &Descriptor::m_pageSize) - ->Attribute(Edit::Attributes::Step, 1024) + ->Attribute(Edit::Attributes::Max, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, 1024) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_memoryBlockAlignment, "Block alignment", "Memory block alignment in bytes (must be multiple of the page size)") - ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_memoryBlocksByteSize, "Block size", "Memory block size in bytes (must be multiple of the page size)") - ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) + ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedOS, "OS reserved memory", "System memory reserved for OS (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedDebug, "Memory reserved for debugger", "System memory reserved for Debug allocator, like memory tracking (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_enableDrilling, "Enable Driller", "Enable Drilling support for the application (ignored in Release builds)") @@ -419,11 +419,11 @@ namespace AZ } else { - azstrcpy(m_commandLineBuffer, AZ_ARRAY_SIZE(m_commandLineBuffer), "no_argv_supplied"); + azstrcpy(m_commandLineBuffer, AZ_ARRAY_SIZE(m_commandLineBuffer), "no_argv_supplied"); // use a "valid" value here. This is because Qt and potentially other third party libraries require // that ArgC be 'at least 1' and that (*argV)[0] be a valid pointer to a real null terminated string. - m_argC = 1; - m_argV = &m_commandLineBufferAddress; + m_argC = 1; + m_argV = &m_commandLineBufferAddress; } // Create the Event logger if it doesn't exist, otherwise reuse the one registered @@ -557,8 +557,8 @@ namespace AZ void ReportBadEngineRoot() { - AZStd::string errorMessage = { "Unable to determine a valid path to the engine.\n" - "Check parameters such as --project-path and --engine-path and make sure they are valid.\n" }; + AZStd::string errorMessage = {"Unable to determine a valid path to the engine.\n" + "Check parameters such as --project-path and --engine-path and make sure they are valid.\n"}; if (auto registry = AZ::SettingsRegistry::Get(); registry != nullptr) { AZ::SettingsRegistryInterface::FixedValueString filePathErrorStr; diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index 892563fb08..8e95ff5fa3 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -377,14 +377,14 @@ namespace AZ EntityRemovedEvent m_entityRemovedEvent; EntityAddedEvent m_entityActivatedEvent; EntityRemovedEvent m_entityDeactivatedEvent; - AZ::IConsole* m_console{}; + AZ::IConsole* m_console{}; Descriptor m_descriptor; bool m_isStarted{ false }; bool m_isSystemAllocatorOwner{ false }; bool m_isOSAllocatorOwner{ false }; bool m_ownsConsole{}; - void* m_fixedMemoryBlock{ nullptr }; //!< Pointer to the memory block allocator, so we can free it OnDestroy. - IAllocatorAllocate* m_osAllocator{ nullptr }; + void* m_fixedMemoryBlock{ nullptr }; //!< Pointer to the memory block allocator, so we can free it OnDestroy. + IAllocatorAllocate* m_osAllocator{ nullptr }; EntitySetType m_entities; AZ::IO::FixedMaxPath m_exeDirectory; AZ::IO::FixedMaxPath m_engineRoot; @@ -405,11 +405,11 @@ namespace AZ // we create a buffer that can be written to (up to AZ_MAX_PATH_LEN) and then // pack it with a single param. char m_commandLineBuffer[AZ_MAX_PATH_LEN]; - char* m_commandLineBufferAddress{ m_commandLineBuffer }; + char* m_commandLineBufferAddress{ m_commandLineBuffer }; StartupParameters m_startupParameters; - char** m_argV{ nullptr }; + char** m_argV{ nullptr }; int m_argC{ 0 }; AZ::CommandLine m_commandLine; // < Stores parsed command line supplied to the constructor diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml index d7602b1a3b..ee0898b681 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml @@ -40,8 +40,8 @@ - - - + + + From aacb6a18db590d5310062fdf280a79448ae8855e Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 21 Sep 2021 19:41:23 -0700 Subject: [PATCH 029/226] Hook up the last client inputId to the migrate notification Signed-off-by: kberg-amzn --- Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index dbc93834e8..df88af5296 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -611,13 +611,13 @@ namespace Multiplayer } // Store the temporary user identifier so we can transmit it with our next Connect packet - // The new server will use this to reattach our set of autonomous entities + // The new server will use this to re-attach our set of autonomous entities // Disconnect our existing server connection auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::ClientMigrated, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); AZLOG_INFO("Migrating to new server shard"); - m_clientMigrationStartEvent.Signal(ClientInputId{ 0 }); + m_clientMigrationStartEvent.Signal(packet.GetLastClientInputId()); m_networkInterface->Connect(packet.GetRemoteServerAddress()); return true; } From 3c46336ab02e4aff176b8711eb125b1101c76710 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Thu, 23 Sep 2021 10:20:52 -0400 Subject: [PATCH 030/226] NetTransform replicates local transform for child entities Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../Components/NetworkTransformComponent.h | 2 +- .../Components/NetworkTransformComponent.cpp | 55 +++- .../Code/Tests/CommonHierarchySetup.h | 40 ++- .../Code/Tests/MultiplayerSystemTests.cpp | 5 +- .../Code/Tests/NetworkTransformTests.cpp | 293 ++++++++++++++++++ .../Code/multiplayer_tests_files.cmake | 7 +- 6 files changed, 375 insertions(+), 27 deletions(-) create mode 100644 Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h index 35bf6e9f50..b0370e9027 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkTransformComponent.h @@ -50,7 +50,7 @@ namespace Multiplayer void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; private: - void OnTransformChangedEvent(const AZ::Transform& worldTm); + void OnTransformChangedEvent(const AZ::Transform& localTm, const AZ::Transform& worldTm); void OnParentIdChangedEvent(AZ::EntityId oldParent, AZ::EntityId newParent); AZ::TransformChangedEvent::Handler m_transformChangedHandler; diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp index d284f100ff..9e3c6ac211 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp @@ -77,9 +77,19 @@ namespace Multiplayer } } - if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform)) + if (GetParentEntityId() == InvalidNetEntityId) { - GetTransformComponent()->SetWorldTM(blendTransform); + if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform)) + { + GetTransformComponent()->SetWorldTM(blendTransform); + } + } + else + { + if (!GetTransformComponent()->GetLocalTM().IsClose(blendTransform)) + { + GetTransformComponent()->SetLocalTM(blendTransform); + } } } } @@ -93,9 +103,19 @@ namespace Multiplayer targetTransform.SetUniformScale(GetScale()); // Hard set the entities transform - if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform)) + if (GetParentEntityId() == InvalidNetEntityId) { - GetTransformComponent()->SetWorldTM(targetTransform); + if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform)) + { + GetTransformComponent()->SetWorldTM(targetTransform); + } + } + else + { + if (!GetTransformComponent()->GetLocalTM().IsClose(targetTransform)) + { + GetTransformComponent()->SetLocalTM(targetTransform); + } } } @@ -117,7 +137,7 @@ namespace Multiplayer NetworkTransformComponentController::NetworkTransformComponentController(NetworkTransformComponent& parent) : NetworkTransformComponentControllerBase(parent) - , m_transformChangedHandler([this](const AZ::Transform&, const AZ::Transform& worldTm) { OnTransformChangedEvent(worldTm); }) + , m_transformChangedHandler([this](const AZ::Transform& localTm, const AZ::Transform& worldTm) { OnTransformChangedEvent(localTm, worldTm); }) , m_parentIdChangedHandler([this](AZ::EntityId oldParent, AZ::EntityId newParent) { OnParentIdChangedEvent(oldParent, newParent); }) { ; @@ -125,11 +145,14 @@ namespace Multiplayer void NetworkTransformComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - GetParent().GetTransformComponent()->BindTransformChangedEventHandler(m_transformChangedHandler); - OnTransformChangedEvent(GetParent().GetTransformComponent()->GetWorldTM()); + if (AzFramework::TransformComponent* parentTransform = GetParent().GetTransformComponent()) + { + parentTransform->BindTransformChangedEventHandler(m_transformChangedHandler); + OnTransformChangedEvent(parentTransform->GetLocalTM(), parentTransform->GetWorldTM()); - GetParent().GetTransformComponent()->BindParentChangedEventHandler(m_parentIdChangedHandler); - OnParentIdChangedEvent(AZ::EntityId(), GetParent().GetTransformComponent()->GetParentId()); + parentTransform->BindParentChangedEventHandler(m_parentIdChangedHandler); + OnParentIdChangedEvent(AZ::EntityId(), parentTransform->GetParentId()); + } } void NetworkTransformComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -137,11 +160,12 @@ namespace Multiplayer ; } - void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& worldTm) + void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& localTm, const AZ::Transform& worldTm) { - SetRotation(worldTm.GetRotation()); - SetTranslation(worldTm.GetTranslation()); - SetScale(worldTm.GetUniformScale()); + const AZ::Transform& localOrWorld = GetParentEntityId() == InvalidNetEntityId ? worldTm : localTm; + SetRotation(localOrWorld.GetRotation()); + SetTranslation(localOrWorld.GetTranslation()); + SetScale(localOrWorld.GetUniformScale()); } void NetworkTransformComponentController::OnParentIdChangedEvent([[maybe_unused]] AZ::EntityId oldParent, AZ::EntityId newParent) @@ -150,7 +174,10 @@ namespace Multiplayer if (parentEntity) { const ConstNetworkEntityHandle parentHandle(parentEntity, GetNetworkEntityTracker()); - SetParentEntityId(parentHandle.GetNetEntityId()); + if (parentHandle.Exists()) + { + SetParentEntityId(parentHandle.GetNetEntityId()); + } } } } diff --git a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h index 2deac1aa27..3a5409c7ed 100644 --- a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -248,17 +249,19 @@ namespace Multiplayer void SetupEntity(const AZStd::unique_ptr& entity, NetEntityId netId, NetEntityRole role) { - const auto netBindComponent = entity->FindComponent(); - EXPECT_NE(netBindComponent, nullptr); - netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); - entity->Init(); + if (const auto netBindComponent = entity->FindComponent()) + { + netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); + entity->Init(); + } } static void StopEntity(const AZStd::unique_ptr& entity) { - const auto netBindComponent = entity->FindComponent(); - EXPECT_NE(netBindComponent, nullptr); - netBindComponent->StopEntity(); + if (const auto netBindComponent = entity->FindComponent()) + { + netBindComponent->StopEntity(); + } } static void StopAndDeactivateEntity(AZStd::unique_ptr& entity) @@ -311,6 +314,29 @@ namespace Multiplayer entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); } + void SetTranslationOnNetworkTransform(const AZStd::unique_ptr& entity, AZ::Vector3 translation) + { + /* Derived from NetworkTransformComponent.AutoComponent.xml */ + constexpr int totalBits = 6 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int translationBit = 1 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::translation_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(translationBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + static_cast(&inSerializer)->Serialize(translation, + "translation" /* Derived from NetworkTransformComponent.AutoComponent.xml */); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + template void SetHierarchyRootFieldOnNetworkHierarchyChild(const AZStd::unique_ptr& entity, NetEntityId value) { diff --git a/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp b/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp index 2463a8e4cb..d6c3117d6f 100644 --- a/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp +++ b/Gems/Multiplayer/Code/Tests/MultiplayerSystemTests.cpp @@ -95,8 +95,9 @@ namespace UnitTest TEST_F(MultiplayerSystemTests, TestConnectionDatum) { - IMultiplayerConnectionMock connMock1 = IMultiplayerConnectionMock(aznumeric_cast(10), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); - IMultiplayerConnectionMock connMock2 = IMultiplayerConnectionMock(aznumeric_cast(15), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); + using namespace testing; + NiceMock connMock1(aznumeric_cast(10), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); + NiceMock connMock2(aznumeric_cast(15), AzNetworking::IpAddress(), AzNetworking::ConnectionRole::Acceptor); m_mpComponent->OnConnect(&connMock1); m_mpComponent->OnConnect(&connMock2); diff --git a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp new file mode 100644 index 0000000000..7ea7ea6974 --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Multiplayer +{ + using namespace testing; + using namespace ::UnitTest; + + /* + * (Networked) Parent -> (Networked) Child + */ + class ServerNetTransformTests : public HierarchyTests + { + public: + void SetUp() override + { + HierarchyTests::SetUp(); + + m_root = AZStd::make_unique(1, "root", NetEntityId{ 1 }, EntityInfo::Role::Root); + m_child = AZStd::make_unique(2, "child", NetEntityId{ 2 }, EntityInfo::Role::Child); + + CreateNetworkParentChild(*m_root, *m_child); + + AZ::Transform rootTransform = AZ::Transform::CreateIdentity(); + rootTransform.SetTranslation(AZ::Vector3::CreateOne()); + m_root->m_entity->FindComponent()->SetWorldTM(rootTransform); + m_child->m_entity->FindComponent()->SetWorldTM(rootTransform); + + m_child->m_entity->FindComponent()->SetParent(m_root->m_entity->GetId()); + m_child->m_entity->FindComponent()->SetLocalTM(AZ::Transform::CreateIdentity()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + } + + void TearDown() override + { + m_child.reset(); + m_root.reset(); + + HierarchyTests::TearDown(); + } + + void PopulateNetworkEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + } + + void CreateNetworkParentChild(EntityInfo& root, EntityInfo& child) + { + PopulateNetworkEntity(root); + SetupEntity(root.m_entity, root.m_netId, NetEntityRole::Authority); + + PopulateNetworkEntity(child); + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Authority); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_networkEntityTracker.get()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Client, childHandle); + child.m_replicator->Initialize(childHandle); + + // Create an entity replicator for the root entity + const NetworkEntityHandle rootHandle(root.m_entity.get(), m_networkEntityTracker.get()); + root.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Client, rootHandle); + root.m_replicator->Initialize(rootHandle); + + root.m_entity->Activate(); + child.m_entity->Activate(); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr m_child; + + void MultiplayerTick() + { + m_root->m_entity->FindComponent()->NotifyPreRender(0.1f); + m_child->m_entity->FindComponent()->NotifyPreRender(0.1f); + } + }; + + TEST_F(ServerNetTransformTests, SanityCheck) + { + EXPECT_EQ( + m_root->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ServerNetTransformTests, NetTransformSavesLocalTransformWhenParentSet) + { + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ServerNetTransformTests, NetTransformSavesWorldTransformWhenParentIsNotSet) + { + m_child->m_entity->FindComponent()->SetParent(AZ::EntityId()); + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateOne() // back at the parent translation + ); + } + + TEST_F(ServerNetTransformTests, ParentMovesChildNetTransformDoesntChange) + { + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + + // move the parent + AZ::Transform rootTransform = AZ::Transform::CreateIdentity(); + rootTransform.SetTranslation(AZ::Vector3::CreateOne() * 10.f); + m_root->m_entity->FindComponent()->SetWorldTM(rootTransform); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() * 10.f + ); + // child local tm doesn't change + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + /* + * (Networked) Parent -> (Networked) Child + */ + class ClientNetTransformTests : public HierarchyTests + { + public: + void SetUp() override + { + HierarchyTests::SetUp(); + + m_root = AZStd::make_unique(1, "root", NetEntityId{ 1 }, EntityInfo::Role::Root); + m_child = AZStd::make_unique(2, "child", NetEntityId{ 2 }, EntityInfo::Role::Child); + + CreateNetworkParentChild(*m_root, *m_child); + } + + void TearDown() override + { + m_child.reset(); + m_root.reset(); + + HierarchyTests::TearDown(); + } + + void PopulateNetworkEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + } + + void CreateNetworkParentChild(EntityInfo& root, EntityInfo& child) + { + PopulateNetworkEntity(root); + SetupEntity(root.m_entity, root.m_netId, NetEntityRole::Client); + + PopulateNetworkEntity(child); + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Client); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_networkEntityTracker.get()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Authority, childHandle); + child.m_replicator->Initialize(childHandle); + + // Create an entity replicator for the root entity + const NetworkEntityHandle rootHandle(root.m_entity.get(), m_networkEntityTracker.get()); + root.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Authority, rootHandle); + root.m_replicator->Initialize(rootHandle); + + root.m_entity->Activate(); + child.m_entity->Activate(); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr m_child; + + void MultiplayerTick() + { + m_root->m_entity->FindComponent()->NotifyPreRender(0.1f); + m_child->m_entity->FindComponent()->NotifyPreRender(0.1f); + } + }; + + TEST_F(ClientNetTransformTests, ClientSetsLocalTmWhenParentIsSet) + { + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ClientNetTransformTests, ClientSetsWorldTmWhenParentIsNotSet) + { + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } + + TEST_F(ClientNetTransformTests, ChildFollowsWhenParentMovesOnServer) + { + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + // now parent moves + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne() * 2.f); + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetWorldTM().GetTranslation(), + AZ::Vector3::CreateOne() * 2.f + ); + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetLocalTM().GetTranslation(), + AZ::Vector3::CreateZero() + ); + } +} diff --git a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake index 3f4fcc9efa..93fb807b66 100644 --- a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake @@ -7,13 +7,14 @@ # set(FILES - Tests/Main.cpp - Tests/MockInterfaces.h Tests/ClientHierarchyTests.cpp - Tests/ServerHierarchyTests.cpp Tests/CommonHierarchySetup.h Tests/IMultiplayerConnectionMock.h + Tests/Main.cpp + Tests/MockInterfaces.h Tests/MultiplayerSystemTests.cpp + Tests/NetworkTransformTests.cpp Tests/RewindableContainerTests.cpp Tests/RewindableObjectTests.cpp + Tests/ServerHierarchyTests.cpp ) From 40286b7bac3df15ee0ecaef870373a71cb0bd937 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Thu, 23 Sep 2021 17:37:39 -0400 Subject: [PATCH 031/226] A small optimization Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../Components/NetworkTransformComponent.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp index 9e3c6ac211..f03d12343f 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp @@ -77,18 +77,19 @@ namespace Multiplayer } } + AzFramework::TransformComponent* transformComponent = GetTransformComponent(); if (GetParentEntityId() == InvalidNetEntityId) { - if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform)) + if (!transformComponent->GetWorldTM().IsClose(blendTransform)) { - GetTransformComponent()->SetWorldTM(blendTransform); + transformComponent->SetWorldTM(blendTransform); } } else { - if (!GetTransformComponent()->GetLocalTM().IsClose(blendTransform)) + if (!transformComponent->GetLocalTM().IsClose(blendTransform)) { - GetTransformComponent()->SetLocalTM(blendTransform); + transformComponent->SetLocalTM(blendTransform); } } } @@ -103,18 +104,19 @@ namespace Multiplayer targetTransform.SetUniformScale(GetScale()); // Hard set the entities transform + AzFramework::TransformComponent* transformComponent = GetTransformComponent(); if (GetParentEntityId() == InvalidNetEntityId) { - if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform)) + if (!transformComponent->GetWorldTM().IsClose(targetTransform)) { - GetTransformComponent()->SetWorldTM(targetTransform); + transformComponent->SetWorldTM(targetTransform); } } else { - if (!GetTransformComponent()->GetLocalTM().IsClose(targetTransform)) + if (!transformComponent->GetLocalTM().IsClose(targetTransform)) { - GetTransformComponent()->SetLocalTM(targetTransform); + transformComponent->SetLocalTM(targetTransform); } } } From f837f0494b1e6159bf2bea1cc4e30922cb178753 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Thu, 23 Sep 2021 18:25:46 -0700 Subject: [PATCH 032/226] many bug fixes Signed-off-by: kberg-amzn --- Code/Framework/AzCore/AzCore/Time/ITime.h | 2 +- .../Visibility/EntityBoundsUnionBus.h | 5 +- .../EntityVisibilityBoundsUnionSystem.cpp | 18 +++++ .../EntityVisibilityBoundsUnionSystem.h | 1 + .../TcpTransport/TcpNetworkInterface.cpp | 4 +- .../AzNetworking/TcpTransport/TcpSocket.cpp | 18 ++--- .../UdpTransport/UdpNetworkInterface.cpp | 4 +- .../AzNetworking/UdpTransport/UdpSocket.cpp | 10 +-- .../Multiplayer/Components/NetBindComponent.h | 4 +- .../Code/Include/Multiplayer/IMultiplayer.h | 6 +- .../Include/Multiplayer/MultiplayerTypes.h | 7 +- .../EntityReplicationManager.h | 6 +- .../NetworkEntity/INetworkEntityManager.h | 4 +- .../AutoGen/Multiplayer.AutoPackets.xml | 1 - .../Source/Components/NetBindComponent.cpp | 2 +- .../Components/NetworkCharacterComponent.cpp | 2 +- .../ServerToClientConnectionData.cpp | 9 +-- .../ServerToClientConnectionData.h | 2 +- .../Source/MultiplayerSystemComponent.cpp | 22 +++--- .../Code/Source/MultiplayerSystemComponent.h | 4 +- .../EntityReplicationManager.cpp | 73 ++++++++++++------- .../EntityReplication/EntityReplicator.cpp | 4 +- .../NetworkEntityAuthorityTracker.cpp | 28 +++---- .../NetworkEntityAuthorityTracker.h | 6 +- .../NetworkEntity/NetworkEntityHandle.cpp | 13 +++- .../NetworkEntity/NetworkEntityManager.cpp | 6 +- .../NetworkEntity/NetworkEntityManager.h | 4 +- .../Code/Source/NetworkTime/NetworkTime.cpp | 2 +- 28 files changed, 154 insertions(+), 113 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Time/ITime.h b/Code/Framework/AzCore/AzCore/Time/ITime.h index 8146065146..a97ba2319a 100644 --- a/Code/Framework/AzCore/AzCore/Time/ITime.h +++ b/Code/Framework/AzCore/AzCore/Time/ITime.h @@ -83,7 +83,7 @@ namespace AZ //! Converts from microseconds to milliseconds inline TimeMs TimeUsToMs(TimeUs value) { - return static_cast(value * static_cast(1000)); + return static_cast(value / static_cast(1000)); } //! Converts from milliseconds to seconds diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h b/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h index b6c26e3e9e..862dea38cc 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityBoundsUnionBus.h @@ -28,9 +28,12 @@ namespace AzFramework //! @note This is used to drive event driven updates to the visibility system. virtual void RefreshEntityLocalBoundsUnion(AZ::EntityId entityId) = 0; - //! Returns the cached union of all component Aabbs. + //! Returns the cached union of all component Aabbs in local entity space. virtual AZ::Aabb GetEntityLocalBoundsUnion(AZ::EntityId entityId) const = 0; + //! Returns the cached union of all component Aabbs in world space. + virtual AZ::Aabb GetEntityWorldBoundsUnion(AZ::EntityId entityId) const = 0; + //! Writes the current changes made to all entities (transforms and bounds) to the visibility system. //! @note During normal operation this is called every frame in OnTick but can //! also be called explicitly (e.g. For testing purposes). diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp index 826570fee5..1963411147 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.cpp @@ -128,6 +128,24 @@ namespace AzFramework return AZ::Aabb::CreateNull(); } + AZ::Aabb EntityVisibilityBoundsUnionSystem::GetEntityWorldBoundsUnion(const AZ::EntityId entityId) const + { + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(entityId); + if (entity != nullptr) + { + // if the entity is not found in the mapping then return a null Aabb, this is to mimic + // as closely as possible the behavior of an individual GetLocalBounds call to an Entity that + // had been deleted (there would be no response, leaving the default value assigned) + if (auto instance_it = m_entityVisibilityBoundsUnionInstanceMapping.find(entity); + instance_it != m_entityVisibilityBoundsUnionInstanceMapping.end()) + { + return instance_it->second.m_localEntityBoundsUnion.GetTranslated(entity->GetTransform()->GetWorldTranslation()); + } + } + + return AZ::Aabb::CreateNull(); + } + void EntityVisibilityBoundsUnionSystem::ProcessEntityBoundsUnionRequests() { AZ_PROFILE_FUNCTION(AzFramework); diff --git a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h index 03109f0dd2..1a3531e506 100644 --- a/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h +++ b/Code/Framework/AzFramework/AzFramework/Visibility/EntityVisibilityBoundsUnionSystem.h @@ -31,6 +31,7 @@ namespace AzFramework // EntityBoundsUnionRequestBus overrides ... void RefreshEntityLocalBoundsUnion(AZ::EntityId entityId) override; AZ::Aabb GetEntityLocalBoundsUnion(AZ::EntityId entityId) const override; + AZ::Aabb GetEntityWorldBoundsUnion(AZ::EntityId entityId) const override; void ProcessEntityBoundsUnionRequests() override; void OnTransformUpdated(AZ::Entity* entity) override; diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp index f15e0c5d1a..1ccff7be50 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpNetworkInterface.cpp @@ -23,14 +23,14 @@ namespace AzNetworking AZ_CVAR(bool, net_TcpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Tcp connections"); AZ_CVAR(AZ::TimeMs, net_TcpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Tcp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_TcpDefaultTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); + AZ_CVAR(AZ::TimeMs, net_TcpDefaultTimeoutMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Tcp connection"); TcpNetworkInterface::TcpNetworkInterface(AZ::Name name, IConnectionListener& connectionListener, TrustZone trustZone, TcpListenThread& listenThread) : m_name(name) , m_trustZone(trustZone) , m_connectionListener(connectionListener) , m_listenThread(listenThread) - , m_timeoutMs(net_TcpDefaultTimeoutTimeMs) + , m_timeoutMs(net_TcpDefaultTimeoutMs) { ; } diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp index 272683febc..da0ae4ef08 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp @@ -55,16 +55,19 @@ namespace AzNetworking if (!SocketCreateInternal()) { + Close(); return false; } if (!BindSocketForListenInternal(port)) { + Close(); return false; } if (!(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) { + Close(); return false; } @@ -75,18 +78,11 @@ namespace AzNetworking { Close(); - if (!SocketCreateInternal()) - { - return false; - } - - if (!BindSocketForConnectInternal(address)) - { - return false; - } - - if (!(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) + if (!SocketCreateInternal() + || !BindSocketForConnectInternal(address) + || !(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) { + Close(); return false; } diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp index b12d3ef845..b0e64f93e3 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpNetworkInterface.cpp @@ -32,7 +32,7 @@ namespace AzNetworking AZ_CVAR(bool, net_UdpTimeoutConnections, true, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Boolean value on whether we should timeout Udp connections"); AZ_CVAR(AZ::TimeMs, net_UdpPacketTimeSliceMs, AZ::TimeMs{ 8 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The number of milliseconds to allow for packet processing"); AZ_CVAR(AZ::TimeMs, net_UdpHeartbeatTimeMs, AZ::TimeMs{ 2 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Udp connection heartbeat frequency"); - AZ_CVAR(AZ::TimeMs, net_UdpDefaultTimeoutTimeMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); + AZ_CVAR(AZ::TimeMs, net_UdpDefaultTimeoutMs, AZ::TimeMs{ 10 * 1000 }, nullptr, AZ::ConsoleFunctorFlags::Null, "Time in milliseconds before we timeout an idle Udp connection"); AZ_CVAR(AZ::TimeMs, net_MinPacketTimeoutMs, AZ::TimeMs{ 200 }, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Minimum time to wait before timing out an unacked packet"); AZ_CVAR(int32_t, net_MaxTimeoutsPerFrame, 1000, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Maximum number of packet timeouts to allow to process in a single frame"); AZ_CVAR(float, net_RttFudgeScalar, 2.0f, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "Scalar value to multiply computed Rtt by to determine an optimal packet timeout threshold"); @@ -61,7 +61,7 @@ namespace AzNetworking , m_connectionListener(connectionListener) , m_socket(net_UdpUseEncryption ? new DtlsSocket() : new UdpSocket()) , m_readerThread(readerThread) - , m_timeoutMs(net_UdpDefaultTimeoutTimeMs) + , m_timeoutMs(net_UdpDefaultTimeoutMs) { const AZ::CVarFixedString compressor = static_cast(net_UdpCompressor); const AZ::Name compressorName = AZ::Name(compressor); diff --git a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp index 44f6562c84..300b3527fa 100644 --- a/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/UdpTransport/UdpSocket.cpp @@ -79,17 +79,15 @@ namespace AzNetworking { const int32_t error = GetLastNetworkError(); AZLOG_ERROR("Failed to bind UDP socket to port %u (%d:%s)", uint32_t(port), error, GetNetworkErrorDesc(error)); + Close(); return false; } } - if (!SetSocketBufferSizes(m_socketFd, net_UdpSendBufferSize, net_UdpRecvBufferSize)) - { - return false; - } - - if (!SetSocketNonBlocking(m_socketFd)) + if (!SetSocketBufferSizes(m_socketFd, net_UdpSendBufferSize, net_UdpRecvBufferSize) + || !SetSocketNonBlocking(m_socketFd)) { + Close(); return false; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h index d1f9e001b1..887aabb3fb 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h @@ -32,7 +32,7 @@ namespace Multiplayer using EntityStopEvent = AZ::Event; using EntityDirtiedEvent = AZ::Event<>; using EntitySyncRewindEvent = AZ::Event<>; - using EntityServerMigrationEvent = AZ::Event; + using EntityServerMigrationEvent = AZ::Event; using EntityPreRenderEvent = AZ::Event; using EntityCorrectionEvent = AZ::Event<>; @@ -113,7 +113,7 @@ namespace Multiplayer void MarkDirty(); void NotifyLocalChanges(); void NotifySyncRewindState(); - void NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId); + void NotifyServerMigration(const HostId& hostId, AzNetworking::ConnectionId connectionId); void NotifyPreRender(float deltaTime); void NotifyCorrection(); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index 021907fb7a..ff4c9106e6 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -45,7 +45,7 @@ namespace Multiplayer using ClientMigrationStartEvent = AZ::Event; using ClientMigrationEndEvent = AZ::Event<>; using ClientDisconnectedEvent = AZ::Event<>; - using NotifyClientMigrationEvent = AZ::Event; + using NotifyClientMigrationEvent = AZ::Event; using ConnectionAcquiredEvent = AZ::Event; using SessionInitEvent = AZ::Event; using SessionShutdownEvent = AZ::Event; @@ -91,7 +91,7 @@ namespace Multiplayer //! @param remoteAddress The domain or IP to connect to //! @param port The port to connect to //! @result if a connection was successfully created - virtual bool Connect(AZStd::string remoteAddress, uint16_t port) = 0; + virtual bool Connect(const AZStd::string& remoteAddress, uint16_t port) = 0; // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context. //! @param reason The reason for terminating connections @@ -129,7 +129,7 @@ namespace Multiplayer //! @param hostId the host id of the host the client is migrating to //! @param userIdentifier the user identifier the client will provide the new host to validate identity //! @param lastClientInputId the last processed clientInputId by the current host - virtual void SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId); + virtual void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) = 0; //! Sends a packet telling if entity update messages can be sent. //! @param readyForEntityUpdates Ready for entity updates or not diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h index 26cdf72e5f..96035083d8 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/MultiplayerTypes.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -25,8 +26,8 @@ namespace Multiplayer //! The default blend factor for ScopedAlterTime static constexpr float DefaultBlendFactor = 1.f; - AZ_TYPE_SAFE_INTEGRAL(HostId, uint32_t); - static constexpr HostId InvalidHostId = static_cast(-1); + using HostId = AzNetworking::IpAddress; + static const HostId InvalidHostId = HostId(); AZ_TYPE_SAFE_INTEGRAL(NetEntityId, uint32_t); static constexpr NetEntityId InvalidNetEntityId = static_cast(-1); @@ -152,7 +153,6 @@ namespace Multiplayer } } -AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::HostId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::NetEntityId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::NetComponentId); AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::PropertyIndex); @@ -162,7 +162,6 @@ AZ_TYPE_SAFE_INTEGRAL_SERIALIZEBINDING(Multiplayer::HostFrameId); namespace AZ { - AZ_TYPE_INFO_SPECIALIZE(Multiplayer::HostId, "{D04B3363-8E1B-4193-8B2B-D2140389C9D5}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::NetEntityId, "{05E4C08B-3A1B-4390-8144-3767D8E56A81}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::NetComponentId, "{8AF3B382-F187-4323-9014-B380638767E3}"); AZ_TYPE_INFO_SPECIALIZE(Multiplayer::PropertyIndex, "{F4460210-024D-4B3B-A10A-04B669C34230}"); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h index 118ff0e6af..dd84c9d952 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -56,8 +56,8 @@ namespace Multiplayer EntityReplicationManager(AzNetworking::IConnection& connection, AzNetworking::IConnectionListener& connectionListener, Mode mode); ~EntityReplicationManager() = default; - void SetRemoteHostId(HostId hostId); - HostId GetRemoteHostId() const; + void SetRemoteHostId(const HostId& hostId); + const HostId& GetRemoteHostId() const; void ActivatePendingEntities(); void SendUpdates(AZ::TimeMs hostTimeMs); @@ -127,7 +127,7 @@ namespace Multiplayer void MigrateEntityInternal(NetEntityId entityId); void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); - void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); + void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId); EntityReplicator* AddEntityReplicator(const ConstNetworkEntityHandle& entityHandle, NetEntityRole netEntityRole); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h index 51f432953e..ba2024bb8e 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h @@ -41,7 +41,7 @@ namespace Multiplayer //! Configures the NetworkEntityManager to operate as an authoritative host. //! @param hostId the hostId of this NetworkEntityManager //! @param entityDomain the entity domain used to determine which entities this manager has authority over - virtual void Initialize(HostId hostId, AZStd::unique_ptr entityDomain) = 0; + virtual void Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) = 0; //! Returns whether or not the network entity manager has been initialized to host. //! @return boolean true if this network entity manager has been intialized to host @@ -65,7 +65,7 @@ namespace Multiplayer //! Returns the HostId for this INetworkEntityManager instance. //! @return the HostId for this INetworkEntityManager instance - virtual HostId GetHostId() const = 0; + virtual const HostId& GetHostId() const = 0; //! Creates new entities of the given archetype //! @param prefabEntryId the name of the spawnable to spawn diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml index ee0898b681..a782a7dcf2 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml @@ -13,7 +13,6 @@ - diff --git a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp index 7d630ebe1d..524400d008 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp @@ -390,7 +390,7 @@ namespace Multiplayer m_syncRewindEvent.Signal(); } - void NetBindComponent::NotifyServerMigration(HostId hostId, AzNetworking::ConnectionId connectionId) + void NetBindComponent::NotifyServerMigration(const HostId& hostId, AzNetworking::ConnectionId connectionId) { m_entityServerMigrationEvent.Signal(m_netEntityHandle, hostId, connectionId); } diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp index f34771b2c6..5c46a30a9b 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp @@ -186,7 +186,7 @@ namespace Multiplayer // Ensure any entities that we might interact with are properly synchronized to their rewind state if (IsAuthority()) { - const AZ::Aabb entityStartBounds = AZ::Interface::Get()->GetEntityLocalBoundsUnion(GetEntity()->GetId()); + const AZ::Aabb entityStartBounds = AZ::Interface::Get()->GetEntityWorldBoundsUnion(GetEntity()->GetId()); const AZ::Aabb entityFinalBounds = entityStartBounds.GetTranslated(velocity); AZ::Aabb entitySweptBounds = entityStartBounds; entitySweptBounds.AddAabb(entityFinalBounds); diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp index ad1bcb5130..218f8421d2 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp @@ -28,7 +28,7 @@ namespace Multiplayer ) : m_connection(connection) , m_controlledEntityRemovedHandler([this](const ConstNetworkEntityHandle&) { OnControlledEntityRemove(); }) - , m_controlledEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId) { OnControlledEntityMigration(entityHandle, remoteHostId, connectionId); }) + , m_controlledEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId) { OnControlledEntityMigration(entityHandle, remoteHostId, connectionId); }) , m_controlledEntity(controlledEntity) , m_entityReplicationManager(*connection, connectionListener, EntityReplicationManager::Mode::LocalServerToRemoteClient) { @@ -94,13 +94,10 @@ namespace Multiplayer void ServerToClientConnectionData::OnControlledEntityMigration ( [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, - [[maybe_unused]] HostId remoteHostId, + [[maybe_unused]] const HostId& remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId ) { - AzNetworking::IpAddress serverAddress; - // serverAddress = GetHost(remoteHostId).GetAddress(); - ClientInputId migratedClientInputId = ClientInputId{ 0 }; if (m_controlledEntity != nullptr) { @@ -118,7 +115,7 @@ namespace Multiplayer GetMultiplayer()->SendNotifyClientMigrationEvent(remoteHostId, randomUserIdentifier, migratedClientInputId); // Tell the client who to join - MultiplayerPackets::ClientMigration clientMigration(serverAddress, randomUserIdentifier, migratedClientInputId); + MultiplayerPackets::ClientMigration clientMigration(remoteHostId, randomUserIdentifier, migratedClientInputId); GetConnection()->SendReliablePacket(clientMigration); m_controlledEntity = NetworkEntityHandle(); diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 78ee721d97..764497430f 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -42,7 +42,7 @@ namespace Multiplayer private: void OnControlledEntityRemove(); - void OnControlledEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); + void OnControlledEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId); void OnGameplayStarted(); EntityReplicationManager m_entityReplicationManager; diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index df88af5296..eb4c2f0f0b 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -71,7 +71,7 @@ namespace Multiplayer AZ_CVAR(uint16_t, cl_clientport, 0, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port to bind to for game traffic when connecting to a remote host, a value of 0 will select any available port"); - AZ_CVAR(AZ::CVarFixedString, cl_serveraddr, AZ::CVarFixedString(LocalHost), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, + AZ_CVAR(AZ::CVarFixedString, cl_serveraddr, AZ::CVarFixedString(LocalHost), nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The address of the remote server or host to connect to"); AZ_CVAR(uint16_t, cl_serverport, DefaultServerPort, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port of the remote host to connect to for game traffic"); AZ_CVAR(uint16_t, sv_port, DefaultServerPort, nullptr, AZ::ConsoleFunctorFlags::DontReplicate, "The port that this multiplayer gem will bind to for game traffic"); @@ -92,8 +92,6 @@ namespace Multiplayer { serializeContext->Class() ->Version(1); - serializeContext->Class() - ->Version(1); serializeContext->Class() ->Version(1); serializeContext->Class() @@ -109,7 +107,6 @@ namespace Multiplayer } else if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) { - behaviorContext->Class(); behaviorContext->Class(); behaviorContext->Class(); behaviorContext->Class(); @@ -208,7 +205,7 @@ namespace Multiplayer return m_networkInterface->Listen(port); } - bool MultiplayerSystemComponent::Connect(AZStd::string remoteAddress, uint16_t port) + bool MultiplayerSystemComponent::Connect(const AZStd::string& remoteAddress, uint16_t port) { InitializeMultiplayer(MultiplayerAgentType::Client); const IpAddress address(remoteAddress.c_str(), port, m_networkInterface->GetType()); @@ -468,7 +465,7 @@ namespace Multiplayer } reinterpret_cast(connection->GetUserData())->SetProviderTicket(packet.GetTicket().c_str()); - if (connection->SendReliablePacket(MultiplayerPackets::Accept(InvalidHostId, sv_map))) + if (connection->SendReliablePacket(MultiplayerPackets::Accept(sv_map))) { m_didHandshake = true; @@ -760,7 +757,11 @@ namespace Multiplayer if (!m_networkEntityManager.IsInitialized()) { // Set up a full ownership domain if we didn't construct a domain during the initialize event - m_networkEntityManager.Initialize(InvalidHostId, AZStd::make_unique()); + const AZ::CVarFixedString serverAddr = cl_serveraddr; + const uint16_t serverPort = cl_serverport; + const AzNetworking::ProtocolType serverProtocol = sv_protocol; + const AzNetworking::IpAddress hostId = AzNetworking::IpAddress(serverAddr.c_str(), serverPort, serverProtocol); + m_networkEntityManager.Initialize(hostId, AZStd::make_unique()); } } } @@ -815,7 +816,7 @@ namespace Multiplayer handler.Connect(m_shutdownEvent); } - void MultiplayerSystemComponent::SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) + void MultiplayerSystemComponent::SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) { m_notifyClientMigrationEvent.Signal(hostId, userIdentifier, lastClientInputId); } @@ -1012,7 +1013,10 @@ namespace Multiplayer void host([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments) { - AZ::Interface::Get()->StartHosting(sv_port, sv_isDedicated); + if (!AZ::Interface::Get()->StartHosting(sv_port, sv_isDedicated)) + { + AZLOG_ERROR("Failed to start listening on port %u, port is in use?", static_cast(sv_port)); + } } AZ_CONSOLEFREEFUNC(host, AZ::ConsoleFunctorFlags::DontReplicate, "Opens a multiplayer connection as a host for other clients to connect to"); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index bdf6511409..b49ad831c1 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -106,7 +106,7 @@ namespace Multiplayer MultiplayerAgentType GetAgentType() const override; void InitializeMultiplayer(MultiplayerAgentType state) override; bool StartHosting(uint16_t port, bool isDedicated = true) override; - bool Connect(AZStd::string remoteAddress, uint16_t port) override; + bool Connect(const AZStd::string& remoteAddress, uint16_t port) override; void Terminate(AzNetworking::DisconnectReason reason) override; void AddClientMigrationStartEventHandler(ClientMigrationStartEvent::Handler& handler) override; void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) override; @@ -115,7 +115,7 @@ namespace Multiplayer void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; - void SendNotifyClientMigrationEvent(HostId hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) override; + void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; float GetCurrentBlendFactor() const override; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index 938b3611c5..df6be37e5e 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -63,12 +63,12 @@ namespace Multiplayer } } - void EntityReplicationManager::SetRemoteHostId(HostId hostId) + void EntityReplicationManager::SetRemoteHostId(const HostId& hostId) { m_remoteHostId = hostId; } - HostId EntityReplicationManager::GetRemoteHostId() const + const HostId& EntityReplicationManager::GetRemoteHostId() const { return m_remoteHostId; } @@ -106,9 +106,9 @@ namespace Multiplayer AZLOG ( NET_ReplicationInfo, - "Sending from %u to %u, replicator count %u orphan count %u deferred reliable count %u deferred unreliable count %u", - aznumeric_cast(GetNetworkEntityManager()->GetHostId()), - aznumeric_cast(GetRemoteHostId()), + "Sending from %s to %s, replicator count %u orphan count %u deferred reliable count %u deferred unreliable count %u", + GetNetworkEntityManager()->GetHostId().GetString().c_str(), + GetRemoteHostId().GetString().c_str(), aznumeric_cast(m_entityReplicatorMap.size()), aznumeric_cast(m_orphanedEntityRpcs.Size()), aznumeric_cast(m_deferredRpcMessagesReliable.size()), @@ -250,7 +250,14 @@ namespace Multiplayer { EntityReplicatorList toSendList = GenerateEntityUpdateList(); - AZLOG(NET_ReplicationInfo, "Sending %zd updates from %d to %d", toSendList.size(), (uint8_t)GetNetworkEntityManager()->GetHostId(), (uint8_t)GetRemoteHostId()); + AZLOG + ( + NET_ReplicationInfo, + "Sending %zd updates from %s to %s", + toSendList.size(), + GetNetworkEntityManager()->GetHostId().GetString().c_str(), + GetRemoteHostId().GetString().c_str() + ); // prep a replication record for send, at this point, everything needs to be sent for (EntityReplicator* replicator : toSendList) @@ -357,7 +364,7 @@ namespace Multiplayer // Check if we changed our remote role - this can happen during server entity migration. After we migrate ownership to the new server, we hold onto our entity replicator until we are sure // the other side has received all the packets (and we haven't had to do resends). At this point, it is possible hear back from the remote side we migrated to on the old replicator prior to the timeout and cleanup on the old one const bool changedRemoteRole = (remoteNetworkRole != entityReplicator->GetRemoteNetworkRole()); - // check if we've changed our bound local role - this can occur when we gain Autonomous or lose Autonomous on a client + // Check if we've changed our bound local role - this can occur when we gain Autonomous or lose Autonomous on a client bool changedLocalRole(false); if (AZ::Entity* localEnt = entityReplicator->GetEntityHandle().GetEntity()) { @@ -377,19 +384,33 @@ namespace Multiplayer // Reset our replicator, we are establishing a new one entityReplicator->Reset(remoteNetworkRole); } - // else case is when an entity had left relevancy and come back (but it was still pending a removal) + // Else case is when an entity had left relevancy and come back (but it was still pending a removal) entityReplicator->Initialize(entityHandle); - AZLOG(NET_RepDeletes, "Reinited replicator for %u from remote manager id %d role %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId()), aznumeric_cast(remoteNetworkRole)); + AZLOG + ( + NET_RepDeletes, + "Reinited replicator for %u from remote host %s role %d", + entityHandle.GetNetEntityId(), + GetRemoteHostId().GetString().c_str(), + aznumeric_cast(remoteNetworkRole) + ); } else { - // haven't seen him before, let's add him + // Haven't seen him before, let's add him AZ_Assert(entityHandle.GetNetBindComponent(), "No NetBindComponent"); AZStd::unique_ptr newEntityReplicator = AZStd::make_unique(*this, &m_connection, remoteNetworkRole, entityHandle); newEntityReplicator->Initialize(entityHandle); entityReplicator = newEntityReplicator.get(); m_entityReplicatorMap.emplace(entityHandle.GetNetEntityId(), AZStd::move(newEntityReplicator)); - AZLOG(NET_RepDeletes, "Added replicator for %u from remote manager id %d role %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId()), aznumeric_cast(remoteNetworkRole)); + AZLOG + ( + NET_RepDeletes, + "Added replicator for %u from remote host %s role %d", + entityHandle.GetNetEntityId(), + GetRemoteHostId().GetString().c_str(), + aznumeric_cast(remoteNetworkRole) + ); } } else @@ -483,18 +504,18 @@ namespace Multiplayer { if (entityReplicator->IsMarkedForRemoval()) { - AZLOG(NET_RepDeletes, "Got a replicator delete message that is a duplicate id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Got a replicator delete message that is a duplicate id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } else if (entityReplicator->OwnsReplicatorLifetime()) { // This can occur if we migrate entities quickly - if this is a replicator from C to A, A migrates to B, B then migrates to C, and A's delete replicator has not arrived at C - AZLOG(NET_RepDeletes, "Got a replicator delete message for a replicator we own id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Got a replicator delete message for a replicator we own id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } else { shouldDeleteEntity = true; entityReplicator->MarkForRemoval(); - AZLOG(NET_RepDeletes, "Deleting replicater for entity id %u remote manager id %d", updateMessage.GetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Deleting replicater for entity id %u remote host %s", updateMessage.GetEntityId(), GetRemoteHostId().GetString().c_str()); } } else @@ -510,17 +531,17 @@ namespace Multiplayer { if (updateMessage.GetWasMigrated()) { - AZLOG(NET_RepDeletes, "Leaving id %u using timeout remote manager id %d", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Leaving id %u using timeout remote host %s", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); } else { - AZLOG(NET_RepDeletes, "Deleting entity id %u remote manager id %d", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Deleting entity id %u remote host %s", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); GetNetworkEntityManager()->MarkForRemoval(entity); } } else { - AZLOG(NET_RepDeletes, "Trying to delete entity id %u remote manager id %d, but it has been removed", entity.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Trying to delete entity id %u remote host %s, but it has been removed", entity.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); } } @@ -689,8 +710,8 @@ namespace Multiplayer AZLOG_WARN ( "Dropping Packet and LocalServerToRemoteClient connection, unexpected packet " - "LocalShard=%u EntityId=%u RemoteNetworkRole=%u BoundLocalNetworkRole=%u ActualNetworkRole=%u IsMarkedForRemoval=%s", - aznumeric_cast(GetNetworkEntityManager()->GetHostId()), + "LocalShard=%s EntityId=%u RemoteNetworkRole=%u BoundLocalNetworkRole=%u ActualNetworkRole=%u IsMarkedForRemoval=%s", + GetNetworkEntityManager()->GetHostId().GetString().c_str(), aznumeric_cast(entityReplicator->GetEntityHandle().GetNetEntityId()), aznumeric_cast(entityReplicator->GetRemoteNetworkRole()), aznumeric_cast(entityReplicator->GetBoundLocalNetworkRole()), @@ -741,13 +762,13 @@ namespace Multiplayer result = UpdateValidationResult::DropMessage; if (updateMessage.GetIsDelete()) { - AZLOG(NET_RepDeletes, "EntityReplicationManager: Received old DeleteProxy message for entity id %u, sequence %d latest sequence %d from remote manager id %d", - updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "EntityReplicationManager: Received old DeleteProxy message for entity id %u, sequence %d latest sequence %d from remote host %s", + updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), GetRemoteHostId().GetString().c_str()); } else { - AZLOG(NET_RepUpdate, "EntityReplicationManager: Received old PropertyChangeMessage message for entity id %u, sequence %d latest sequence %d from remote manager id %d", - updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepUpdate, "EntityReplicationManager: Received old PropertyChangeMessage message for entity id %u, sequence %d latest sequence %d from remote host %s", + updateMessage.GetEntityId(), (uint32_t)packetId, (uint32_t)propSubscriber->GetLastReceivedPacketId(), GetRemoteHostId().GetString().c_str()); } } } @@ -1126,7 +1147,7 @@ namespace Multiplayer AZ_Assert(didSucceed, "Failed to migrate entity from server"); m_sendMigrateEntityEvent.Signal(m_connection, message); - AZLOG(NET_RepDeletes, "Migration packet sent %u to remote manager id %d", netEntityId, aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Migration packet sent %u to remote host %s", netEntityId, GetRemoteHostId().GetString().c_str()); // Immediately add a new replicator so that we catch RPC invocations, the remote side will make us a new one, and then remove us if needs be AddEntityReplicator(entityHandle, NetEntityRole::Authority); @@ -1179,7 +1200,7 @@ namespace Multiplayer // Change the role on the replicator AddEntityReplicator(entityHandle, NetEntityRole::Server); - AZLOG(NET_RepDeletes, "Handle Migration %u new authority from remote manager id %d", entityHandle.GetNetEntityId(), aznumeric_cast(GetRemoteHostId())); + AZLOG(NET_RepDeletes, "Handle Migration %u new authority from remote host %s", entityHandle.GetNetEntityId(), GetRemoteHostId().GetString().c_str()); return true; } @@ -1191,7 +1212,7 @@ namespace Multiplayer } } - void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId) + void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId) { if (remoteHostId == GetRemoteHostId()) { diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp index 95e2b6d12c..8329d7c9df 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp @@ -413,10 +413,10 @@ namespace Multiplayer AZLOG ( NET_RepDeletes, - "Sending delete replicator id %u migrated %d to remote manager id %d", + "Sending delete replicator id %u migrated %d to remote host %s", aznumeric_cast(GetEntityHandle().GetNetEntityId()), WasMigrated() ? 1 : 0, - aznumeric_cast(m_replicationManager.GetRemoteHostId()) + m_replicationManager.GetRemoteHostId().GetString().c_str() ); return NetworkEntityUpdateMessage(GetEntityHandle().GetNetEntityId(), WasMigrated(), m_propertyPublisher->IsRemoteReplicatorEstablished()); } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp index 947d303278..0a99f4b0d4 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.cpp @@ -24,7 +24,7 @@ namespace Multiplayer ; } - bool NetworkEntityAuthorityTracker::AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId newOwner) + bool NetworkEntityAuthorityTracker::AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& newOwner) { bool ret = false; auto timeoutData = m_timeoutDataMap.find(entityHandle.GetNetEntityId()); @@ -33,10 +33,10 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Removing timeout for networkEntityId %u from %u, new owner is %u", + "AuthTracker: Removing timeout for networkEntityId %u from %s, new owner is %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(timeoutData->second.m_previousOwner), - aznumeric_cast(newOwner) + timeoutData->second.m_previousOwner.GetString().c_str(), + newOwner.GetString().c_str() ); m_timeoutDataMap.erase(timeoutData); ret = true; @@ -48,10 +48,10 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Assigning networkEntityId %u from %u to %u", + "AuthTracker: Assigning networkEntityId %u from %s to %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(iter->second.back()), - aznumeric_cast(newOwner) + iter->second.back().GetString().c_str(), + newOwner.GetString().c_str() ); } else @@ -59,9 +59,9 @@ namespace Multiplayer AZLOG ( NET_AuthTracker, - "AuthTracker: Assigning networkEntityId %u to %u", + "AuthTracker: Assigning networkEntityId %u to %s", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(newOwner) + newOwner.GetString().c_str() ); } @@ -69,7 +69,7 @@ namespace Multiplayer return ret; } - void NetworkEntityAuthorityTracker::RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId previousOwner) + void NetworkEntityAuthorityTracker::RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner) { auto mapIter = m_entityAuthorityMap.find(entityHandle.GetNetEntityId()); if (mapIter != m_entityAuthorityMap.end()) @@ -87,7 +87,7 @@ namespace Multiplayer } } - AZLOG(NET_AuthTracker, "AuthTracker: Removing networkEntityId %u from %u", aznumeric_cast(entityHandle.GetNetEntityId()), aznumeric_cast(previousOwner)); + AZLOG(NET_AuthTracker, "AuthTracker: Removing networkEntityId %u from %s", aznumeric_cast(entityHandle.GetNetEntityId()), previousOwner.GetString().c_str()); if (auto localEnt = entityHandle.GetEntity()) { if (authorityStack.empty()) @@ -167,7 +167,7 @@ namespace Multiplayer return InvalidHostId; } - NetworkEntityAuthorityTracker::TimeoutData::TimeoutData(ConstNetworkEntityHandle entityHandle, HostId previousOwner) + NetworkEntityAuthorityTracker::TimeoutData::TimeoutData(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner) : m_entityHandle(entityHandle) , m_previousOwner(previousOwner) { @@ -205,9 +205,9 @@ namespace Multiplayer { AZLOG_ERROR ( - "Timed out entity id %u during migration previous owner %u, removing it", + "Timed out entity id %u during migration previous owner %s, removing it", aznumeric_cast(entityHandle.GetNetEntityId()), - aznumeric_cast(timeoutData->second.m_previousOwner) + timeoutData->second.m_previousOwner.GetString().c_str() ); m_networkEntityManager.MarkForRemoval(entityHandle); } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h index d69edcf55b..0f4ff5665a 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityAuthorityTracker.h @@ -24,8 +24,8 @@ namespace Multiplayer NetworkEntityAuthorityTracker(INetworkEntityManager& networkEntityManager); bool DoesEntityHaveOwner(ConstNetworkEntityHandle entityHandle) const; - bool AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId newOwner); - void RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, HostId previousOwner); + bool AddEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& newOwner); + void RemoveEntityAuthorityManager(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner); HostId GetEntityAuthorityManager(ConstNetworkEntityHandle entityHandle) const; private: @@ -37,7 +37,7 @@ namespace Multiplayer struct TimeoutData final { TimeoutData() = default; - TimeoutData(ConstNetworkEntityHandle entityHandle, HostId previousOwner); + TimeoutData(ConstNetworkEntityHandle entityHandle, const HostId& previousOwner); ConstNetworkEntityHandle m_entityHandle; HostId m_previousOwner = InvalidHostId; }; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp index 6f5819eaa3..6f3bd719e0 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp @@ -29,9 +29,16 @@ namespace Multiplayer { AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); NetBindComponent* netBindComponent = m_entity->template FindComponent(); - AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); - m_netBindComponent = netBindComponent; - m_netEntityId = netBindComponent->GetNetEntityId(); + if (netBindComponent != nullptr) + { + AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); + m_netBindComponent = netBindComponent; + m_netEntityId = netBindComponent->GetNetEntityId(); + } + else + { + *this = ConstNetworkEntityHandle(); + } } } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index e9866085ae..1ed2c8f6a4 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -41,7 +41,7 @@ namespace Multiplayer AZ::Interface::Unregister(this); } - void NetworkEntityManager::Initialize(HostId hostId, AZStd::unique_ptr entityDomain) + void NetworkEntityManager::Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) { m_hostId = hostId; m_entityDomain = AZStd::move(entityDomain); @@ -73,7 +73,7 @@ namespace Multiplayer return &m_multiplayerComponentRegistry; } - HostId NetworkEntityManager::GetHostId() const + const HostId& NetworkEntityManager::GetHostId() const { return m_hostId; } @@ -106,8 +106,6 @@ namespace Multiplayer if (net_DebugCheckNetworkEntityManager) { AZ_Assert(entityHandle.GetNetBindComponent(), "No NetBindComponent found on networked entity"); - [[maybe_unused]] const bool isClientOnlyEntity = false;// (ServerIdFromEntityId(it->first) == InvalidHostId); - AZ_Assert(entityHandle.GetNetBindComponent()->IsNetEntityRoleAuthority() || isClientOnlyEntity, "Trying to delete a proxy entity, this will lead to issues deserializing entity updates"); } m_removeList.push_back(entityHandle.GetNetEntityId()); m_removeEntitiesEvent.Enqueue(AZ::TimeMs{ 0 }); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h index 804946b882..d3f296b03d 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h @@ -33,13 +33,13 @@ namespace Multiplayer //! INetworkEntityManager overrides. //! @{ - void Initialize(HostId hostId, AZStd::unique_ptr entityDomain) override; + void Initialize(const HostId& hostId, AZStd::unique_ptr entityDomain) override; bool IsInitialized() const override; IEntityDomain* GetEntityDomain() const override; NetworkEntityTracker* GetNetworkEntityTracker() override; NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override; MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override; - HostId GetHostId() const override; + const HostId& GetHostId() const override; ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override; NetEntityId GetNetEntityIdById(const AZ::EntityId& entityId) const override; diff --git a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp index b37f485ff4..9e69d93e16 100644 --- a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp @@ -105,7 +105,7 @@ namespace Multiplayer if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - const AZ::Aabb currentBounds = entityBoundsUnion->GetEntityLocalBoundsUnion(entity->GetId()); + const AZ::Aabb currentBounds = entityBoundsUnion->GetEntityWorldBoundsUnion(entity->GetId()); const AZ::Vector3 currentCenter = currentBounds.GetCenter(); NetworkTransformComponent* networkTransform = entity->template FindComponent(); From efda2c91e984142dbddd4e8ba27c7c22c067080d Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Thu, 23 Sep 2021 18:28:11 -0700 Subject: [PATCH 033/226] Cleaning up tcp socket changes Signed-off-by: kberg-amzn --- .../AzNetworking/TcpTransport/TcpSocket.cpp | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp index da0ae4ef08..e469b70640 100644 --- a/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/TcpTransport/TcpSocket.cpp @@ -53,19 +53,9 @@ namespace AzNetworking { Close(); - if (!SocketCreateInternal()) - { - Close(); - return false; - } - - if (!BindSocketForListenInternal(port)) - { - Close(); - return false; - } - - if (!(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) + if (!SocketCreateInternal() + || !BindSocketForListenInternal(port) + || !(SetSocketNonBlocking(m_socketFd) && SetSocketNoDelay(m_socketFd))) { Close(); return false; From e125462eaaaadbd9c0762784100b52bfef8935c2 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Fri, 24 Sep 2021 11:56:42 -0700 Subject: [PATCH 034/226] Set logging preference before running tools Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Editor/View/Windows/Tools/UpgradeTool/Controller.cpp | 8 ++++++++ .../Editor/View/Windows/Tools/UpgradeTool/Controller.h | 1 + .../Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp | 3 +++ 3 files changed, 12 insertions(+) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 9d7224373f..4e4e842cb8 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -126,6 +126,7 @@ namespace ScriptCanvasEditor config.reportFilteredGraphs = !m_view->onlyShowOutdated->isChecked(); config.filter = isUpToDate; + SetLoggingPreferences(); ModelRequestsBus::Broadcast(&ModelRequestsTraits::Scan, config); } @@ -199,6 +200,7 @@ namespace ScriptCanvasEditor return result == QMessageBox::YesToAll; }; + SetLoggingPreferences(); ModifyConfiguration config; config.modification = simpleUpdate; config.onReadOnlyFile = onReadyOnlyFile; @@ -435,6 +437,12 @@ namespace ScriptCanvasEditor SetSpinnerIsBusy(true); } + void Controller::SetLoggingPreferences() + { + LogBus::Broadcast(&LogTraits::SetVerbose, m_view->verbose->isChecked()); + LogBus::Broadcast(&LogTraits::SetVersionExporerExclusivity, m_view->updateReportingOnly->isChecked()); + } + void Controller::SetSpinnerIsBusy(bool isBusy) { m_view->spinner->SetIsBusy(isBusy); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 0fb3ce1bf4..fd297832bb 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -88,6 +88,7 @@ namespace ScriptCanvasEditor void OnUpgradeModificationBegin(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) override; void OnUpgradeModificationEnd(const ModifyConfiguration& config, const AZ::Data::AssetInfo& info, ModificationResult result) override; + void SetLoggingPreferences(); void SetSpinnerIsBusy(bool isBusy); void SetRowBusy(int index); void SetRowFailed(int index, AZStd::string_view message); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 1bd33bbe49..3c62670ef0 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -237,6 +237,9 @@ namespace ScriptCanvasEditor TickUpdateGraph(); break; } + + AZ::Data::AssetManager::Instance().DispatchEvents(); + AZ::SystemTickBus::ExecuteQueuedEvents(); } void Modifier::SaveModifiedGraph(const ModificationResult& result) From 95d7cc72123cd4802f232108da791f3d39784266 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Mon, 27 Sep 2021 12:14:41 -0700 Subject: [PATCH 035/226] Adding the NetworkConnectionComponent to hold user nonce and migration values for a backup host in case the current host crashes or abnormally disconnects Signed-off-by: kberg-amzn --- .../NetworkConnectionComponent.AutoComponent.xml | 14 ++++++++++++++ .../Source/NetworkEntity/NetworkEntityManager.cpp | 1 - Gems/Multiplayer/Code/multiplayer_files.cmake | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml diff --git a/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml b/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml new file mode 100644 index 0000000000..eff1b5e9cf --- /dev/null +++ b/Gems/Multiplayer/Code/Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 1ed2c8f6a4..68c87d1c6d 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -374,7 +374,6 @@ namespace Multiplayer &AzFramework::GameEntityContextRequestBus::Events::AddGameEntity, clone); returnList.push_back(netBindComponent->GetEntityHandle()); - } else { diff --git a/Gems/Multiplayer/Code/multiplayer_files.cmake b/Gems/Multiplayer/Code/multiplayer_files.cmake index c1d27402f5..51a5a1754d 100644 --- a/Gems/Multiplayer/Code/multiplayer_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_files.cmake @@ -58,6 +58,7 @@ set(FILES Source/AutoGen/Multiplayer.AutoPackets.xml Source/AutoGen/MultiplayerEditor.AutoPackets.xml Source/AutoGen/NetworkCharacterComponent.AutoComponent.xml + Source/AutoGen/NetworkConnectionComponent.AutoComponent.xml Source/AutoGen/NetworkHitVolumesComponent.AutoComponent.xml Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml Source/AutoGen/NetworkTransformComponent.AutoComponent.xml From 3fa9d16be2fc53a9915e6573275da6c0a90d6a04 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Mon, 27 Sep 2021 20:35:54 -0500 Subject: [PATCH 036/226] Material editor: replacing modified property highlight color with indicator icons Testing to see how easy it is to set up the indicated icons. Problematic because icons are to the left of property labels instead of the left of property widget. This completely destroys alignment. Signed-off-by: Guthrie Adams --- .../Inspector/InspectorPropertyGroupWidget.h | 3 +- .../InspectorPropertyGroupWidget.cpp | 4 ++- .../MaterialInspector/MaterialInspector.cpp | 29 ++++++++++++------- .../MaterialInspector/MaterialInspector.h | 4 +-- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h index cef3eada75..d373e2010c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -41,7 +41,8 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler = {}, QWidget* parent = {}, const AZ::u32 saveStateKey = {}, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}); + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction = {}); void Refresh() override; void Rebuild() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp index e1f8573bb3..6ab76dedef 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -19,7 +19,8 @@ namespace AtomToolsFramework AzToolsFramework::IPropertyEditorNotify* instanceNotificationHandler, QWidget* parent, const AZ::u32 saveStateKey, - const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction) + const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -34,6 +35,7 @@ namespace AtomToolsFramework m_propertyEditor->SetHideRootProperties(true); m_propertyEditor->SetAutoResizeLabels(true); m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction); + m_propertyEditor->SetIndicatorQueryFunction(indicatorQueryFunction); m_propertyEditor->SetSavedStateKey(saveStateKey); m_propertyEditor->Setup(context, instanceNotificationHandler, false); m_propertyEditor->AddInstance(instance, instanceClassId, nullptr, instanceToCompare); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp index 28d7d3d3f5..78e3edecf5 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -91,12 +91,19 @@ namespace MaterialEditor return AZ::Crc32(AZStd::string::format("MaterialInspector::PropertyGroup::%s::%s", m_documentPath.c_str(), groupNameId.c_str())); } - bool MaterialInspector::CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const + bool MaterialInspector::IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const { - AZ_UNUSED(source); - const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(node); + return property && !AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + } + + const char* MaterialInspector::GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const + { + if (IsInstanceNodePropertyModifed(node)) + { + return ":/PropertyEditor/Resources/changed_data_item.png"; + } + return nullptr; } void MaterialInspector::AddOverviewGroup() @@ -122,8 +129,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -153,8 +160,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -189,8 +196,8 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), - [this](const auto source, const auto target) { return CompareInstanceNodeProperties(source, target); }); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); bool isGroupVisible = false; diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h index 845a8cb0f7..4ac127d94b 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.h @@ -43,8 +43,8 @@ namespace MaterialEditor private: AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupNameId) const; - bool CompareInstanceNodeProperties( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) const; + bool IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const; + const char* GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const; void AddOverviewGroup(); void AddUvNamesGroup(); From 36102a75f2cc852215285725840895cb04d6ecc8 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Mon, 27 Sep 2021 21:24:05 -0500 Subject: [PATCH 037/226] Material Editor: Added alternate skybox toggle to the toolbar Signed-off-by: Guthrie Adams --- .../Code/Source/Window/Icons/skybox.svg | 15 +++++++++++++++ .../Code/Source/Window/MaterialEditor.qrc | 1 + .../Window/ToolBar/MaterialEditorToolBar.cpp | 15 ++++++++++++++- .../Source/Window/ToolBar/MaterialEditorToolBar.h | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg new file mode 100644 index 0000000000..83df996198 --- /dev/null +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/Icons/skybox.svg @@ -0,0 +1,15 @@ + + + + icon / Environmental / Sky Highlight + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc index cde48079ac..902201e792 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditor.qrc @@ -19,6 +19,7 @@ Icons/texture_edit.png Icons/grid.svg Icons/shadow.svg + Icons/skybox.svg Icons/toneMapping.svg Icons/View.svg diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp index 55829fd744..1e189168da 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.cpp @@ -50,8 +50,16 @@ namespace MaterialEditor }); m_toggleShadowCatcher->setChecked(viewportSettings->m_enableShadowCatcher); - // Add mapping selection button + // Add toggle alternate skybox button + m_toggleAlternateSkybox = addAction(QIcon(":/Icons/skybox.svg"), "Toggle Alternate Skybox"); + m_toggleAlternateSkybox->setCheckable(true); + connect(m_toggleAlternateSkybox, &QAction::triggered, [this]() { + MaterialViewportRequestBus::Broadcast( + &MaterialViewportRequestBus::Events::SetAlternateSkyboxEnabled, m_toggleAlternateSkybox->isChecked()); + }); + m_toggleAlternateSkybox->setChecked(viewportSettings->m_enableAlternateSkybox); + // Add mapping selection button QToolButton* toneMappingButton = new QToolButton(this); QMenu* toneMappingMenu = new QMenu(toneMappingButton); @@ -105,6 +113,11 @@ namespace MaterialEditor m_toggleGrid->setChecked(enable); } + void MaterialEditorToolBar::OnAlternateSkyboxEnabledChanged(bool enable) + { + m_toggleAlternateSkybox->setChecked(enable); + } + void MaterialEditorToolBar::OnDisplayMapperOperationTypeChanged(AZ::Render::DisplayMapperOperationType operationType) { for (auto operationActionPair : m_operationActions) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h index d68c23665f..c25b90eb80 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ToolBar/MaterialEditorToolBar.h @@ -29,10 +29,12 @@ namespace MaterialEditor // MaterialViewportNotificationBus::Handler overrides... void OnShadowCatcherEnabledChanged([[maybe_unused]] bool enable) override; void OnGridEnabledChanged([[maybe_unused]] bool enable) override; + void OnAlternateSkyboxEnabledChanged([[maybe_unused]] bool enable) override; void OnDisplayMapperOperationTypeChanged(AZ::Render::DisplayMapperOperationType operationType) override; QAction* m_toggleGrid = {}; QAction* m_toggleShadowCatcher = {}; + QAction* m_toggleAlternateSkybox = {}; AZStd::unordered_map m_operationNames; AZStd::unordered_map m_operationActions; From 7c2464ad157d50bbfebd32f0cad7739eef182ca0 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Tue, 28 Sep 2021 17:32:02 -0500 Subject: [PATCH 038/226] Changing material inspector to use indicator icons instead of highlighting modified properties Added a blank placeholder image to account for changes to indention when indicator icons are active Added parameter to inspector constructor for specifying leaf property indention size Signed-off-by: Guthrie Adams --- .../UI/PropertyEditor/PropertyRowWidget.cpp | 13 +++---------- .../UI/PropertyEditor/Resources/Icons.qrc | 1 + .../UI/PropertyEditor/Resources/blank.png | 3 +++ .../Inspector/InspectorPropertyGroupWidget.h | 3 ++- .../Inspector/InspectorPropertyGroupWidget.cpp | 6 ++++-- .../Code/Source/Util/MaterialPropertyUtil.cpp | 1 + .../Window/MaterialInspector/MaterialInspector.cpp | 8 ++++---- 7 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp index 9ba998b99a..bb2d2851ca 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyRowWidget.cpp @@ -1102,10 +1102,7 @@ namespace AzToolsFramework { m_dropDownArrow->hide(); } - m_indent->changeSize((m_treeDepth * m_treeIndentation) + m_leafIndentation, 1, QSizePolicy::Fixed, QSizePolicy::Fixed); - m_leftHandSideLayout->invalidate(); - m_leftHandSideLayout->update(); - m_leftHandSideLayout->activate(); + SetIndentSize(m_treeDepth * m_treeIndentation + m_leafIndentation); } else { @@ -1117,10 +1114,7 @@ namespace AzToolsFramework connect(m_dropDownArrow, &QCheckBox::clicked, this, &PropertyRowWidget::OnClickedExpansionButton); } m_dropDownArrow->show(); - m_indent->changeSize((m_treeDepth * m_treeIndentation), 1, QSizePolicy::Fixed, QSizePolicy::Fixed); - m_leftHandSideLayout->invalidate(); - m_leftHandSideLayout->update(); - m_leftHandSideLayout->activate(); + SetIndentSize(m_treeDepth * m_treeIndentation); m_dropDownArrow->setChecked(m_expanded); } } @@ -1720,10 +1714,9 @@ namespace AzToolsFramework } else { - m_indicatorButton->setVisible(true); - QPixmap pixmap(imagePath); m_indicatorButton->setIcon(pixmap); + m_indicatorButton->setVisible(true); }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc index 7dcc593d5a..621f9be4ad 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/Icons.qrc @@ -1,5 +1,6 @@ + blank.png point_hand.png cross-circle-small.png cross-small.png diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png new file mode 100644 index 0000000000..d040fa2e14 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/Resources/blank.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81b5fa1f978888c3be8a40fce20455668df2723a77587aeb7039f8bf74bdd0e3 +size 119 diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h index d373e2010c..d641af697f 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Inspector/InspectorPropertyGroupWidget.h @@ -42,7 +42,8 @@ namespace AtomToolsFramework QWidget* parent = {}, const AZ::u32 saveStateKey = {}, const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction = {}, - const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction = {}); + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction = {}, + int leafIndentSize = 16); void Refresh() override; void Rebuild() override; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp index 6ab76dedef..903c74b076 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Inspector/InspectorPropertyGroupWidget.cpp @@ -20,7 +20,8 @@ namespace AtomToolsFramework QWidget* parent, const AZ::u32 saveStateKey, const AzToolsFramework::InstanceDataHierarchy::ValueComparisonFunction& valueComparisonFunction, - const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction) + const AzToolsFramework::IndicatorQueryFunction& indicatorQueryFunction, + int leafIndentSize) : InspectorGroupWidget(parent) { AZ::SerializeContext* context = nullptr; @@ -33,7 +34,8 @@ namespace AtomToolsFramework m_propertyEditor = new AzToolsFramework::ReflectedPropertyEditor(this); m_propertyEditor->SetHideRootProperties(true); - m_propertyEditor->SetAutoResizeLabels(true); + m_propertyEditor->SetAutoResizeLabels(false); + m_propertyEditor->SetLeafIndentation(leafIndentSize); m_propertyEditor->SetValueComparisonFunction(valueComparisonFunction); m_propertyEditor->SetIndicatorQueryFunction(indicatorQueryFunction); m_propertyEditor->SetSavedStateKey(saveStateKey); diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp index 641cf63d04..1ce973b4d7 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Util/MaterialPropertyUtil.cpp @@ -150,6 +150,7 @@ namespace AtomToolsFramework ComparePropertyValues(valueA, valueB) || ComparePropertyValues(valueA, valueB) || ComparePropertyValues(valueA, valueB) || + ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || ComparePropertyValues>(valueA, valueB) || diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp index 78e3edecf5..525930548a 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialInspector/MaterialInspector.cpp @@ -103,7 +103,7 @@ namespace MaterialEditor { return ":/PropertyEditor/Resources/changed_data_item.png"; } - return nullptr; + return ":/PropertyEditor/Resources/blank.png"; } void MaterialInspector::AddOverviewGroup() @@ -130,7 +130,7 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, - [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -161,7 +161,7 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, - [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -197,7 +197,7 @@ namespace MaterialEditor // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, - [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }); + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); bool isGroupVisible = false; From f8374b76b7afdd4fd82db679ddd6e9e35085a3b5 Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Tue, 28 Sep 2021 18:16:23 -0500 Subject: [PATCH 039/226] Added modified property indicator icon to material property inspector in material component Signed-off-by: Guthrie Adams --- .../EditorMaterialComponentInspector.cpp | 25 +++++++++++++------ .../EditorMaterialComponentInspector.h | 6 ++--- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp index a3152faf87..59d5723911 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp @@ -271,7 +271,8 @@ namespace AZ // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, nullptr, group.TYPEINFO_Uuid(), this, this, GetSaveStateKeyForGroup(groupNameId)); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -316,7 +317,8 @@ namespace AZ // Passing in same group as main and comparison instance to enable custom value comparison for highlighting modified properties auto propertyGroupWidget = new AtomToolsFramework::InspectorPropertyGroupWidget( - &group, nullptr, group.TYPEINFO_Uuid(), this, this, GetSaveStateKeyForGroup(groupNameId)); + &group, &group, group.TYPEINFO_Uuid(), this, this, GetGroupSaveStateKey(groupNameId), {}, + [this](const auto node) { return GetInstanceNodePropertyIndicator(node); }, 0); AddGroup(groupNameId, groupDisplayName, groupDescription, propertyGroupWidget); } @@ -496,19 +498,26 @@ namespace AZ } } - AZ::Crc32 MaterialPropertyInspector::GetSaveStateKeyForGroup(const AZStd::string& groupNameId) const + AZ::Crc32 MaterialPropertyInspector::GetGroupSaveStateKey(const AZStd::string& groupNameId) const { return AZ::Crc32(AZStd::string::format( "MaterialPropertyInspector::PropertyGroup::%s::%s", m_editData.m_materialAssetId.ToString().c_str(), groupNameId.c_str())); } - bool MaterialPropertyInspector::AreNodePropertyValuesEqual( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target) + bool MaterialPropertyInspector::IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const { - AZ_UNUSED(source); - const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(target); - return property && AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + const AtomToolsFramework::DynamicProperty* property = AtomToolsFramework::FindDynamicPropertyForInstanceDataNode(node); + return property && !AtomToolsFramework::ArePropertyValuesEqual(property->GetValue(), property->GetConfig().m_parentValue); + } + + const char* MaterialPropertyInspector::GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const + { + if (IsInstanceNodePropertyModifed(node)) + { + return ":/PropertyEditor/Resources/changed_data_item.png"; + } + return ":/PropertyEditor/Resources/blank.png"; } bool MaterialPropertyInspector::SaveMaterial() const diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h index 11eb2cec51..ff5a843392 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.h @@ -100,9 +100,9 @@ namespace AZ void RunEditorMaterialFunctors(); void UpdateMaterialInstanceProperty(const AtomToolsFramework::DynamicProperty& property); - AZ::Crc32 GetSaveStateKeyForGroup(const AZStd::string& groupNameId) const; - static bool AreNodePropertyValuesEqual( - const AzToolsFramework::InstanceDataNode* source, const AzToolsFramework::InstanceDataNode* target); + AZ::Crc32 GetGroupSaveStateKey(const AZStd::string& groupNameId) const; + bool IsInstanceNodePropertyModifed(const AzToolsFramework::InstanceDataNode* node) const; + const char* GetInstanceNodePropertyIndicator(const AzToolsFramework::InstanceDataNode* node) const; // Tracking the property that is actively being edited in the inspector const AtomToolsFramework::DynamicProperty* m_activeProperty = {}; From 02bc89cd9250626e129bc8cf80dc1601e51a31df Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Tue, 28 Sep 2021 19:25:04 -0700 Subject: [PATCH 040/226] Fixes to sending entity updates and entity rpcs within an environment set up for cross host entity migration Signed-off-by: kberg-amzn --- .../ConnectionData/IConnectionData.h | 3 +- .../EntityReplicationManager.h | 10 +- .../EntityReplication/EntityReplicator.h | 1 + .../NetworkEntity/NetworkEntityRpcMessage.h | 1 + .../NetworkEntityUpdateMessage.h | 1 + .../ReplicationWindows/IReplicationWindow.h | 8 + .../AutoGen/Multiplayer.AutoPackets.xml | 6 +- .../ClientToServerConnectionData.cpp | 4 +- .../ClientToServerConnectionData.h | 2 +- .../ServerToClientConnectionData.cpp | 4 +- .../ServerToClientConnectionData.h | 2 +- .../Source/MultiplayerSystemComponent.cpp | 7 +- .../EntityReplicationManager.cpp | 182 ++++++++---------- .../EntityReplicationManager.h | 8 +- .../EntityReplication/EntityReplicator.cpp | 6 +- .../EntityReplication/PropertyPublisher.cpp | 1 - .../NullReplicationWindow.cpp | 30 +++ .../NullReplicationWindow.h | 6 +- .../ServerToClientReplicationWindow.cpp | 26 ++- .../ServerToClientReplicationWindow.h | 6 +- Gems/Multiplayer/Code/multiplayer_files.cmake | 3 + 21 files changed, 184 insertions(+), 133 deletions(-) diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h index 66a7a1175a..c3e251ea5e 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h @@ -40,8 +40,7 @@ namespace Multiplayer virtual EntityReplicationManager& GetReplicationManager() = 0; //! Creates and manages sending updates to the remote endpoint. - //! @param hostTimeMs current server game time in milliseconds - virtual void Update(AZ::TimeMs hostTimeMs) = 0; + virtual void Update() = 0; //! Returns whether update messages can be sent to the connection. //! @return true if update messages can be sent diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h index dd84c9d952..01ae966fb5 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -60,7 +60,7 @@ namespace Multiplayer const HostId& GetRemoteHostId() const; void ActivatePendingEntities(); - void SendUpdates(AZ::TimeMs hostTimeMs); + void SendUpdates(); void Clear(bool forMigration); bool SetEntityRebasing(NetworkEntityHandle& entityHandle); @@ -81,7 +81,7 @@ namespace Multiplayer void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage); - void AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler); + void AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler); void AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler); bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message); @@ -120,10 +120,8 @@ namespace Multiplayer using EntityReplicatorList = AZStd::deque; EntityReplicatorList GenerateEntityUpdateList(); - void SendEntityUpdatesPacketHelper(AZ::TimeMs hostTimeMs, EntityReplicatorList& toSendList, uint32_t maxPayloadSize, AzNetworking::IConnection& connection); - - void SendEntityUpdates(AZ::TimeMs hostTimeMs); - void SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable); + void SendEntityUpdateMessages(EntityReplicatorList& replicatorList); + void SendEntityRpcs(RpcMessages& rpcMessages, bool reliable); void MigrateEntityInternal(NetEntityId entityId); void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h index 7edefc15e0..d239682c93 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h @@ -66,6 +66,7 @@ namespace Multiplayer bool IsReadyToActivate() const; NetworkEntityUpdateMessage GenerateUpdatePacket(); + void FinalizeSerialization(AzNetworking::PacketId sentId); AZ::TimeMs GetResendTimeoutTimeMs() const; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h index 9720de81eb..3f1d8e346c 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h @@ -103,6 +103,7 @@ namespace Multiplayer // Non-serialized RPC metadata ReliabilityType m_isReliable = ReliabilityType::Reliable; }; + using NetworkEntityRpcVector = AZStd::fixed_vector; struct IRpcParamStruct { diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h index 3c400d5a13..90f622a8ae 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h @@ -118,4 +118,5 @@ namespace Multiplayer // This is to prevent blowing out stack memory if we declare an array of these EntityUpdateMessages AZStd::unique_ptr m_data; }; + using NetworkEntityUpdateVector = AZStd::fixed_vector; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h b/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h index e2e4c5abfe..018d90eef3 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ReplicationWindows/IReplicationWindow.h @@ -10,10 +10,14 @@ #include #include +#include +#include #include namespace Multiplayer { + class EntityReplicator; + struct EntityReplicationData { EntityReplicationData() = default; @@ -21,6 +25,8 @@ namespace Multiplayer float m_priority = 0.0f; }; using ReplicationSet = AZStd::map; + using RpcMessages = AZStd::list; + using EntityReplicatorList = AZStd::deque; class IReplicationWindow { @@ -33,6 +39,8 @@ namespace Multiplayer virtual uint32_t GetMaxProxyEntityReplicatorSendCount() const = 0; virtual bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const = 0; virtual void UpdateWindow() = 0; + virtual AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) = 0; + virtual void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) = 0; virtual void DebugDraw() const = 0; }; } diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml index a782a7dcf2..091043f034 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml @@ -15,7 +15,7 @@ - + @@ -31,11 +31,11 @@ - + - + diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp index a943406df3..392b020748 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.cpp @@ -50,9 +50,9 @@ namespace Multiplayer return m_entityReplicationManager; } - void ClientToServerConnectionData::Update(AZ::TimeMs hostTimeMs) + void ClientToServerConnectionData::Update() { m_entityReplicationManager.ActivatePendingEntities(); - m_entityReplicationManager.SendUpdates(hostTimeMs); + m_entityReplicationManager.SendUpdates(); } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h index 9776cbabb9..77df604b49 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h @@ -30,7 +30,7 @@ namespace Multiplayer ConnectionDataType GetConnectionDataType() const override; AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; - void Update(AZ::TimeMs hostTimeMs) override; + void Update() override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; //! @} diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp index 218f8421d2..a9b8e03126 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.cpp @@ -69,7 +69,7 @@ namespace Multiplayer return m_entityReplicationManager; } - void ServerToClientConnectionData::Update(AZ::TimeMs hostTimeMs) + void ServerToClientConnectionData::Update() { m_entityReplicationManager.ActivatePendingEntities(); @@ -79,7 +79,7 @@ namespace Multiplayer // potentially false if we just migrated the player, if that is the case, don't send any more updates if (netBindComponent != nullptr && (netBindComponent->GetNetEntityRole() == NetEntityRole::Authority)) { - m_entityReplicationManager.SendUpdates(hostTimeMs); + m_entityReplicationManager.SendUpdates(); } } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 764497430f..8dcf08c480 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -30,7 +30,7 @@ namespace Multiplayer ConnectionDataType GetConnectionDataType() const override; AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; - void Update(AZ::TimeMs hostTimeMs) override; + void Update() override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; //! @} diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index c1a29f9539..cb72fe9252 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -307,7 +307,6 @@ namespace Multiplayer void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) { const AZ::TimeMs deltaTimeMs = aznumeric_cast(static_cast(deltaTime * 1000.0f)); - const AZ::TimeMs hostTimeMs = AZ::GetElapsedTimeMs(); const AZ::TimeMs serverRateMs = static_cast(sv_serverSendRateMs); const float serverRateSeconds = static_cast(serverRateMs) / 1000.0f; @@ -344,12 +343,12 @@ namespace Multiplayer // Send out the game state update to all connections { - auto sendNetworkUpdates = [hostTimeMs, &stats](IConnection& connection) + auto sendNetworkUpdates = [&stats](IConnection& connection) { if (connection.GetUserData() != nullptr) { IConnectionData* connectionData = reinterpret_cast(connection.GetUserData()); - connectionData->Update(hostTimeMs); + connectionData->Update(); if (connectionData->GetConnectionDataType() == ConnectionDataType::ServerToClient) { stats.m_clientConnectionCount++; @@ -671,7 +670,7 @@ namespace Multiplayer else { connection->SetUserData(new ClientToServerConnectionData(connection, *this, providerTicket)); - AZStd::unique_ptr window = AZStd::make_unique(); + AZStd::unique_ptr window = AZStd::make_unique(connection); reinterpret_cast(connection->GetUserData())->GetReplicationManager().SetReplicationWindow(AZStd::move(window)); } } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index fff9a1cbd8..cdda18e43a 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -107,10 +106,34 @@ namespace Multiplayer } } - void EntityReplicationManager::SendUpdates(AZ::TimeMs hostTimeMs) + void EntityReplicationManager::SendUpdates() { m_frameTimeMs = AZ::GetElapsedTimeMs(); - SendEntityUpdates(hostTimeMs); + + { + EntityReplicatorList toSendList = GenerateEntityUpdateList(); + + AZLOG + ( + NET_ReplicationInfo, + "Sending %zd updates from %s to %s", + toSendList.size(), + GetNetworkEntityManager()->GetHostId().GetString().c_str(), + GetRemoteHostId().GetString().c_str() + ); + + // Prep a replication record for send, at this point, everything needs to be sent + for (EntityReplicator* replicator : toSendList) + { + replicator->GetPropertyPublisher()->PrepareSerialization(); + } + + // While our to send list is not empty, build up another packet to send + do + { + SendEntityUpdateMessages(toSendList); + } while (!toSendList.empty()); + } SendEntityRpcs(m_deferredRpcMessagesReliable, true); SendEntityRpcs(m_deferredRpcMessagesUnreliable, false); @@ -130,65 +153,6 @@ namespace Multiplayer ); } - void EntityReplicationManager::SendEntityUpdatesPacketHelper - ( - AZ::TimeMs hostTimeMs, - EntityReplicatorList& toSendList, - uint32_t maxPayloadSize, - AzNetworking::IConnection& connection - ) - { - uint32_t pendingPacketSize = 0; - EntityReplicatorList replicatorUpdatedList; - MultiplayerPackets::EntityUpdates entityUpdatePacket; - entityUpdatePacket.SetHostTimeMs(hostTimeMs); - entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); - // Serialize everything - while (!toSendList.empty()) - { - EntityReplicator* replicator = toSendList.front(); - NetworkEntityUpdateMessage updateMessage(replicator->GenerateUpdatePacket()); - - const uint32_t nextMessageSize = updateMessage.GetEstimatedSerializeSize(); - - // Check if we are over our limits - const bool payloadFull = (pendingPacketSize + nextMessageSize > maxPayloadSize); - const bool capacityReached = (entityUpdatePacket.GetEntityMessages().size() >= entityUpdatePacket.GetEntityMessages().capacity()); - const bool largeEntityDetected = (payloadFull && replicatorUpdatedList.empty()); - if (capacityReached || (payloadFull && !largeEntityDetected)) - { - break; - } - - pendingPacketSize += nextMessageSize; - entityUpdatePacket.ModifyEntityMessages().push_back(updateMessage); - replicatorUpdatedList.push_back(replicator); - toSendList.pop_front(); - - if (largeEntityDetected) - { - AZLOG_WARN("\n\n*******************************"); - AZLOG_WARN - ( - "Serializing extremely large entity (%u) - MaxPayload: %d NeededSize %d", - aznumeric_cast(replicator->GetEntityHandle().GetNetEntityId()), - maxPayloadSize, - nextMessageSize - ); - AZLOG_WARN("*******************************"); - break; - } - } - - const AzNetworking::PacketId sentId = connection.SendUnreliablePacket(entityUpdatePacket); - - // Update the sent things with the packet id - for (EntityReplicator* replicator : replicatorUpdatedList) - { - replicator->GetPropertyPublisher()->FinalizeSerialization(sentId); - } - } - EntityReplicationManager::EntityReplicatorList EntityReplicationManager::GenerateEntityUpdateList() { if (m_replicationWindow == nullptr) @@ -260,76 +224,92 @@ namespace Multiplayer return toSendList; } - void EntityReplicationManager::SendEntityUpdates(AZ::TimeMs hostTimeMs) + void EntityReplicationManager::SendEntityUpdateMessages(EntityReplicatorList& replicatorList) { - EntityReplicatorList toSendList = GenerateEntityUpdateList(); + uint32_t pendingPacketSize = 0; + EntityReplicatorList replicatorUpdatedList; + NetworkEntityUpdateVector entityUpdates; + // Serialize everything + while (!replicatorList.empty()) + { + EntityReplicator* replicator = replicatorList.front(); + NetworkEntityUpdateMessage updateMessage(replicator->GenerateUpdatePacket()); - AZLOG - ( - NET_ReplicationInfo, - "Sending %zd updates from %s to %s", - toSendList.size(), - GetNetworkEntityManager()->GetHostId().GetString().c_str(), - GetRemoteHostId().GetString().c_str() - ); + const uint32_t nextMessageSize = updateMessage.GetEstimatedSerializeSize(); - // prep a replication record for send, at this point, everything needs to be sent - for (EntityReplicator* replicator : toSendList) - { - replicator->GetPropertyPublisher()->PrepareSerialization(); + // Check if we are over our limits + const bool payloadFull = (pendingPacketSize + nextMessageSize > m_maxPayloadSize); + const bool capacityReached = (entityUpdates.size() >= entityUpdates.capacity()); + const bool largeEntityDetected = (payloadFull && replicatorUpdatedList.empty()); + if (capacityReached || (payloadFull && !largeEntityDetected)) + { + break; + } + + pendingPacketSize += nextMessageSize; + entityUpdates.push_back(updateMessage); + replicatorUpdatedList.push_back(replicator); + replicatorList.pop_front(); + + if (largeEntityDetected) + { + AZLOG_WARN + ( + "Serializing extremely large entity (%u) - MaxPayload: %d NeededSize %d", + aznumeric_cast(replicator->GetEntityHandle().GetNetEntityId()), + m_maxPayloadSize, + nextMessageSize + ); + break; + } } - // While our to send list is not empty, build up another packet to send - do + const AzNetworking::PacketId sentId = m_replicationWindow->SendEntityUpdateMessages(entityUpdates); + + // Update the sent things with the packet id + for (EntityReplicator* replicator : replicatorUpdatedList) { - SendEntityUpdatesPacketHelper(hostTimeMs, toSendList, m_maxPayloadSize, m_connection); - } while (!toSendList.empty()); + replicator->FinalizeSerialization(sentId); + } } - void EntityReplicationManager::SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable) + void EntityReplicationManager::SendEntityRpcs(RpcMessages& rpcMessages, bool reliable) { - while (!deferredRpcs.empty()) + while (!rpcMessages.empty()) { - MultiplayerPackets::EntityRpcs entityRpcsPacket; + NetworkEntityRpcVector entityRpcs; uint32_t pendingPacketSize = 0; - while (!deferredRpcs.empty()) + while (!rpcMessages.empty()) { - NetworkEntityRpcMessage& message = deferredRpcs.front(); + NetworkEntityRpcMessage& message = rpcMessages.front(); const uint32_t nextRpcSize = message.GetEstimatedSerializeSize(); if ((pendingPacketSize + nextRpcSize) > m_maxPayloadSize) { // We're over our limit, break and send an Rpc packet - if (entityRpcsPacket.GetEntityRpcs().size() == 0) + if (entityRpcs.size() == 0) { AZLOG(NET_Replicator, "Encountered an RPC that is above our MTU, message will be segmented (object size %u, max allowed size %u)", nextRpcSize, m_maxPayloadSize); - entityRpcsPacket.ModifyEntityRpcs().push_back(message); - deferredRpcs.pop_front(); + entityRpcs.push_back(message); + rpcMessages.pop_front(); } break; } pendingPacketSize += nextRpcSize; - if (entityRpcsPacket.GetEntityRpcs().full()) + if (entityRpcs.full()) { // Packet was full, send what we've accumulated so far - AZLOG(NET_Replicator, "We've hit our RPC message limit (RPC count %u, packet size %u)", aznumeric_cast(entityRpcsPacket.GetEntityRpcs().size()), pendingPacketSize); + AZLOG(NET_Replicator, "We've hit our RPC message limit (RPC count %u, packet size %u)", aznumeric_cast(entityRpcs.size()), pendingPacketSize); break; } - entityRpcsPacket.ModifyEntityRpcs().push_back(message); - deferredRpcs.pop_front(); + entityRpcs.push_back(message); + rpcMessages.pop_front(); } - if (reliable) - { - m_connection.SendReliablePacket(entityRpcsPacket); - } - else - { - m_connection.SendUnreliablePacket(entityRpcsPacket); - } + m_replicationWindow->SendEntityRpcs(entityRpcs, reliable); } } @@ -474,7 +454,7 @@ namespace Multiplayer } // @nt: TODO - delete once dropped RPC problem fixed - void EntityReplicationManager::AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler) + void EntityReplicationManager::AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler) { handler.Connect(m_autonomousEntityReplicatorCreated); } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h index 9eec27be27..28a0963a57 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -79,7 +79,7 @@ namespace Multiplayer void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage); - void AddAutonomousEntityReplicatorCreatedHandle(AZ::Event::Handler& handler); + void AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler); bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message); bool HandleEntityDeleteMessage(EntityReplicator* entityReplicator, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); @@ -117,10 +117,8 @@ namespace Multiplayer using EntityReplicatorList = AZStd::deque; EntityReplicatorList GenerateEntityUpdateList(); - void SendEntityUpdatesPacketHelper(AZ::TimeMs hostTimeMs, EntityReplicatorList& toSendList, uint32_t maxPayloadSize, AzNetworking::IConnection& connection); - - void SendEntityUpdates(AZ::TimeMs hostTimeMs); - void SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable); + void SendEntityUpdateMessages(EntityReplicatorList& replicatorList); + void SendEntityRpcs(RpcMessages& rpcMessages, bool reliable); void MigrateEntityInternal(NetEntityId entityId); void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp index 3d6322eed5..e569389659 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -495,6 +494,11 @@ namespace Multiplayer return updateMessage; } + void EntityReplicator::FinalizeSerialization(AzNetworking::PacketId sentId) + { + m_propertyPublisher->FinalizeSerialization(sentId); + } + void EntityReplicator::DeferRpcMessage(NetworkEntityRpcMessage& entityRpcMessage) { // Received rpc metrics, log rpc sent, number of bytes, and the componentId/rpcId for bandwidth metrics diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp index 43815da6c5..4247377629 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/PropertyPublisher.cpp @@ -336,7 +336,6 @@ namespace Multiplayer case PropertyPublisher::EntityReplicatorState::Deleting: { AZ_Assert(m_serializationPhase == PropertyPublisher::EntityReplicatorSerializationPhase::Prepared, "Unexpected serialization phase"); - FinalizeDeleteEntityRecord(sentId); } break; diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp index 7c9ee2a667..e4e5a7bc53 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.cpp @@ -7,9 +7,16 @@ */ #include +#include namespace Multiplayer { + NullReplicationWindow::NullReplicationWindow(AzNetworking::IConnection* connection) + : m_connection(connection) + { + ; + } + bool NullReplicationWindow::ReplicationSetUpdateReady() { return true; @@ -36,6 +43,29 @@ namespace Multiplayer ; } + AzNetworking::PacketId NullReplicationWindow::SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) + { + MultiplayerPackets::EntityUpdates entityUpdatePacket; + entityUpdatePacket.SetHostTimeMs(GetNetworkTime()->GetHostTimeMs()); + entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); + entityUpdatePacket.SetEntityMessages(entityUpdateVector); + return m_connection->SendUnreliablePacket(entityUpdatePacket); + } + + void NullReplicationWindow::SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) + { + MultiplayerPackets::EntityRpcs entityRpcsPacket; + entityRpcsPacket.SetEntityRpcs(entityRpcVector); + if (reliable) + { + m_connection->SendReliablePacket(entityRpcsPacket); + } + else + { + m_connection->SendUnreliablePacket(entityRpcsPacket); + } + } + void NullReplicationWindow::DebugDraw() const { // Nothing to draw diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h index 91788a6b15..39e373f164 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/NullReplicationWindow.h @@ -9,6 +9,7 @@ #pragma once #include +#include namespace Multiplayer { @@ -16,7 +17,7 @@ namespace Multiplayer : public IReplicationWindow { public: - NullReplicationWindow() = default; + NullReplicationWindow(AzNetworking::IConnection* connection); //! IReplicationWindow interface //! @{ @@ -25,10 +26,13 @@ namespace Multiplayer uint32_t GetMaxProxyEntityReplicatorSendCount() const override; bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const override; void UpdateWindow() override; + AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) override; + void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) override; void DebugDraw() const override; //! @} private: ReplicationSet m_emptySet; + AzNetworking::IConnection* m_connection = nullptr; }; } diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp index 3677eb8b5c..740495b606 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -50,7 +51,7 @@ namespace Multiplayer return m_priority < rhs.m_priority; } - ServerToClientReplicationWindow::ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, const AzNetworking::IConnection* connection) + ServerToClientReplicationWindow::ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, AzNetworking::IConnection* connection) : m_controlledEntity(controlledEntity) , m_entityActivatedEventHandler([this](AZ::Entity* entity) { OnEntityActivated(entity); }) , m_entityDeactivatedEventHandler([this](AZ::Entity* entity) { OnEntityDeactivated(entity); }) @@ -179,6 +180,29 @@ namespace Multiplayer //} } + AzNetworking::PacketId ServerToClientReplicationWindow::SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) + { + MultiplayerPackets::EntityUpdates entityUpdatePacket; + entityUpdatePacket.SetHostTimeMs(GetNetworkTime()->GetHostTimeMs()); + entityUpdatePacket.SetHostFrameId(GetNetworkTime()->GetHostFrameId()); + entityUpdatePacket.SetEntityMessages(entityUpdateVector); + return m_connection->SendUnreliablePacket(entityUpdatePacket); + } + + void ServerToClientReplicationWindow::SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) + { + MultiplayerPackets::EntityRpcs entityRpcsPacket; + entityRpcsPacket.SetEntityRpcs(entityRpcVector); + if (reliable) + { + m_connection->SendReliablePacket(entityRpcsPacket); + } + else + { + m_connection->SendUnreliablePacket(entityRpcsPacket); + } + } + void ServerToClientReplicationWindow::DebugDraw() const { //static const float BoundaryStripeHeight = 1.0f; diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h index bfaa351095..b034bde90c 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.h @@ -38,7 +38,7 @@ namespace Multiplayer // we sort lowest priority first, so that we can easily keep the biggest N priorities using ReplicationCandidateQueue = AZStd::priority_queue; - ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, const AzNetworking::IConnection* connection); + ServerToClientReplicationWindow(NetworkEntityHandle controlledEntity, AzNetworking::IConnection* connection); //! IReplicationWindow interface //! @{ @@ -47,6 +47,8 @@ namespace Multiplayer uint32_t GetMaxProxyEntityReplicatorSendCount() const override; bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const override; void UpdateWindow() override; + AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) override; + void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) override; void DebugDraw() const override; //! @} @@ -75,7 +77,7 @@ namespace Multiplayer //NetBindComponent* m_controlledNetBindComponent = nullptr; - const AzNetworking::IConnection* m_connection = nullptr; + AzNetworking::IConnection* m_connection = nullptr; // Cached values to detect a poor network connection uint32_t m_lastCheckedSentPackets = 0; diff --git a/Gems/Multiplayer/Code/multiplayer_files.cmake b/Gems/Multiplayer/Code/multiplayer_files.cmake index db76c76374..95fce35f8e 100644 --- a/Gems/Multiplayer/Code/multiplayer_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_files.cmake @@ -33,6 +33,9 @@ set(FILES Include/Multiplayer/MultiplayerConstants.h Include/Multiplayer/MultiplayerStats.h Include/Multiplayer/MultiplayerTypes.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h + Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.inl Include/Multiplayer/NetworkEntity/EntityReplication/ReplicationRecord.h Include/Multiplayer/NetworkEntity/IFilterEntityManager.h Include/Multiplayer/NetworkEntity/INetworkEntityManager.h From a1f22f68238aae636b9a0d0ec3def89b3440e4d4 Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Thu, 30 Sep 2021 10:19:26 -0700 Subject: [PATCH 041/226] Adding some code to cache the material in the editor component to avoid flickering Signed-off-by: mrieggeramzn --- .../Code/Source/Decals/EditorDecalComponent.cpp | 16 ++++++++++++++++ .../Code/Source/Decals/EditorDecalComponent.h | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp index c5d61dd54a..02a2e1c0c9 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp @@ -15,6 +15,11 @@ namespace AZ { namespace Render { + static AZ::Data::Asset QueueLoad(const AZ::Data::AssetId id) + { + return AZ::Data::AssetManager::Instance().GetAsset(id, AZ::Data::AssetLoadBehavior::QueueLoad); + } + EditorDecalComponent::EditorDecalComponent(const DecalComponentConfig& config) : BaseClass(config) { @@ -87,16 +92,26 @@ namespace AZ AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusConnect(GetEntityId()); AzFramework::BoundsRequestBus::Handler::BusConnect(GetEntityId()); + CacheMaterial(); } void EditorDecalComponent::Deactivate() { + m_cachedMaterial = {}; AzFramework::BoundsRequestBus::Handler::BusDisconnect(); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusDisconnect(); AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); BaseClass::Deactivate(); } + void EditorDecalComponent::CacheMaterial() + { + DecalComponentConfig decalComponentConfig; + GetConfiguration(decalComponentConfig); + const auto& materialAsset = decalComponentConfig.m_materialAsset; + m_cachedMaterial = QueueLoad(materialAsset.GetId()); + } + AZ::Transform EditorDecalComponent::GetWorldTransform() const { AZ::Transform transform = AZ::Transform::CreateIdentity(); @@ -193,6 +208,7 @@ namespace AZ u32 EditorDecalComponent::OnConfigurationChanged() { BaseClass::OnConfigurationChanged(); + CacheMaterial(); return Edit::PropertyRefreshLevels::AttributesAndValues; } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h index 1ca88d23fc..9878e72da0 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h @@ -64,6 +64,12 @@ namespace AZ //! EditorRenderComponentAdapter overrides ... u32 OnConfigurationChanged() override; + + // Hold onto the material for the lifespan of the EditorDecalComponent to smooth out performance. This is so we can avoid + // duplicate loads as the DecalTextureArrayFeatureProcessor will unload the materials after texture packing. + void CacheMaterial(); + + AZ::Data::Asset m_cachedMaterial; }; } // namespace Render } // namespace AZ From 25a7b70440d79dae0f379bc3d859676729b822c5 Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Thu, 30 Sep 2021 10:36:09 -0700 Subject: [PATCH 042/226] Getting rid of some tabs Signed-off-by: mrieggeramzn --- .../CommonFeatures/Code/Source/Decals/EditorDecalComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h index 9878e72da0..1a3d8f3844 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h @@ -65,7 +65,7 @@ namespace AZ //! EditorRenderComponentAdapter overrides ... u32 OnConfigurationChanged() override; - // Hold onto the material for the lifespan of the EditorDecalComponent to smooth out performance. This is so we can avoid + // Hold onto the material for the lifespan of the EditorDecalComponent to smooth out performance. This is so we can avoid // duplicate loads as the DecalTextureArrayFeatureProcessor will unload the materials after texture packing. void CacheMaterial(); From d9a3048a6d8d33093934721f65f0896e88889e20 Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Thu, 30 Sep 2021 11:04:02 -0700 Subject: [PATCH 043/226] Adding comment Signed-off-by: mrieggeramzn --- .../Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli index 1bd8e0b9a5..1d7a2d6dd0 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli @@ -67,6 +67,9 @@ void ApplyDecal(uint currDecalIndex, inout Surface surface) float3 decalSample; float4 baseMap = 0; + + // Each texture array handles a size permutation. + // e.g. it could be that tex array 0 handles 256x256 and tex array 1 handles 512x64, etc. switch(textureArrayIndex) { case 0: From 65e375bb422017a01fb5d94c883ee493ad917ded Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Thu, 30 Sep 2021 13:44:06 -0700 Subject: [PATCH 044/226] Guthries excellent recommendation Signed-off-by: mrieggeramzn --- .../DecalTextureArrayFeatureProcessor.cpp | 4 +++- .../Source/Decals/EditorDecalComponent.cpp | 18 +----------------- .../Code/Source/Decals/EditorDecalComponent.h | 6 ------ 3 files changed, 4 insertions(+), 24 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index c0b8f3315a..3975df52b9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -303,7 +303,9 @@ namespace AZ if (material.IsValid()) { - AZ_Assert(m_decalData.GetData(handle.GetIndex()).m_textureArrayIndex == DecalData::UnusedIndex, "Setting Material on a decal more than once is not currently supported."); + AZ_Assert( + m_decalData.GetData(handle.GetIndex()).m_textureArrayIndex == DecalData::UnusedIndex || GetMaterialUsedByDecal(handle) == material, + "Setting Material on a decal more than once is not currently supported."); const auto iter = m_materialToTextureArrayLookupTable.find(material); if (iter != m_materialToTextureArrayLookupTable.end()) diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp index 02a2e1c0c9..f8865e8d34 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp @@ -15,11 +15,6 @@ namespace AZ { namespace Render { - static AZ::Data::Asset QueueLoad(const AZ::Data::AssetId id) - { - return AZ::Data::AssetManager::Instance().GetAsset(id, AZ::Data::AssetLoadBehavior::QueueLoad); - } - EditorDecalComponent::EditorDecalComponent(const DecalComponentConfig& config) : BaseClass(config) { @@ -92,26 +87,16 @@ namespace AZ AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusConnect(GetEntityId()); AzFramework::BoundsRequestBus::Handler::BusConnect(GetEntityId()); - CacheMaterial(); } void EditorDecalComponent::Deactivate() { - m_cachedMaterial = {}; AzFramework::BoundsRequestBus::Handler::BusDisconnect(); AzToolsFramework::EditorComponentSelectionRequestsBus::Handler::BusDisconnect(); AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); BaseClass::Deactivate(); } - void EditorDecalComponent::CacheMaterial() - { - DecalComponentConfig decalComponentConfig; - GetConfiguration(decalComponentConfig); - const auto& materialAsset = decalComponentConfig.m_materialAsset; - m_cachedMaterial = QueueLoad(materialAsset.GetId()); - } - AZ::Transform EditorDecalComponent::GetWorldTransform() const { AZ::Transform transform = AZ::Transform::CreateIdentity(); @@ -207,8 +192,7 @@ namespace AZ u32 EditorDecalComponent::OnConfigurationChanged() { - BaseClass::OnConfigurationChanged(); - CacheMaterial(); + m_controller.ConfigurationChanged(); return Edit::PropertyRefreshLevels::AttributesAndValues; } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h index 1a3d8f3844..1ca88d23fc 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.h @@ -64,12 +64,6 @@ namespace AZ //! EditorRenderComponentAdapter overrides ... u32 OnConfigurationChanged() override; - - // Hold onto the material for the lifespan of the EditorDecalComponent to smooth out performance. This is so we can avoid - // duplicate loads as the DecalTextureArrayFeatureProcessor will unload the materials after texture packing. - void CacheMaterial(); - - AZ::Data::Asset m_cachedMaterial; }; } // namespace Render } // namespace AZ From 619948231a9f67f7b687a89bdce80fc4154f9dbb Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Thu, 30 Sep 2021 14:26:27 -0700 Subject: [PATCH 045/226] fix compile error from bad automatic merge Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- Gems/ScriptCanvas/Code/Editor/SystemComponent.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h index 0b085a7e8d..6f85b3c5a6 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h @@ -97,8 +97,7 @@ namespace ScriptCanvasEditor //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// - void ClearGraphsThatNeedUpgrade() - + private: SystemComponent(const SystemComponent&) = delete; From 2185505302e7a80dbb0c441a44d7df487711b98e Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Thu, 30 Sep 2021 14:59:11 -0700 Subject: [PATCH 046/226] Repair upgrade notification after bad automatic merge Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h | 1 - .../Editor/View/Widgets/NodePalette/NodePaletteModel.h | 4 ---- .../View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp | 9 --------- .../View/Widgets/ScriptCanvasNodePaletteDockWidget.h | 1 - Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h | 5 ----- 5 files changed, 20 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h index 02edce4974..7e7b600081 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h @@ -223,7 +223,6 @@ namespace ScriptCanvasEditor static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; virtual void OnUpgradeStart() {} - virtual void OnUpgradeComplete() {} virtual void OnUpgradeCancelled() {} virtual void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped = false) { (void)skipped; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h index f92ab5142e..28d627af01 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/NodePaletteModel.h @@ -104,10 +104,6 @@ namespace ScriptCanvasEditor { DisconnectLambdas(); } - void OnUpgradeComplete() override - { - ConnectLambdas(); - } // Asset Node Support void OnRowsInserted(const QModelIndex& parentIndex, int first, int last); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp index b60b4f2924..9e51c1896f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.cpp @@ -386,15 +386,6 @@ namespace ScriptCanvasEditor AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); } - void ScriptCanvasRootPaletteTreeItem::OnUpgradeComplete() - { - ConnectLambdas(); - - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - - TraverseTree(); - } - void ScriptCanvasRootPaletteTreeItem::OnUpgradeCancelled() { if (!AzFramework::AssetCatalogEventBus::Handler::BusIsConnected()) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h index 16beb5b79e..45645ceb33 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h @@ -92,7 +92,6 @@ namespace ScriptCanvasEditor // UpgradeNotifications::Bus void OnUpgradeStart() override; - void OnUpgradeComplete() override; void OnUpgradeCancelled() override; //// diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index f8703cc5c5..244d9dcd72 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -117,11 +117,6 @@ namespace ScriptCanvasEditor { AzToolsFramework::AssetBrowser::AssetBrowserComponentNotificationBus::Handler::BusDisconnect(); } - - void OnUpgradeComplete() override - { - AzToolsFramework::AssetBrowser::AssetBrowserComponentNotificationBus::Handler::BusConnect(); - } }; class OnSaveToast From fbf09f27c72e0713b4dd0f3fd970aba6e629a92c Mon Sep 17 00:00:00 2001 From: lsemp3d <58790905+lsemp3d@users.noreply.github.com> Date: Thu, 30 Sep 2021 17:15:06 -0700 Subject: [PATCH 047/226] Marked test_VariableManager_UnpinVariableType_Works as xfail, the test needs to be reworked Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com> --- .../Gem/PythonTests/scripting/TestSuite_Periodic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py index 0862e03a79..b2001e6825 100755 --- a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py +++ b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Periodic.py @@ -122,6 +122,7 @@ class TestAutomation(TestAutomationBase): from . import Debugger_HappyPath_TargetMultipleEntities as test_module self._run_test(request, workspace, editor, test_module) + @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") def test_EditMenu_Default_UndoRedo(self, request, workspace, editor, launcher_platform, project): from . import EditMenu_Default_UndoRedo as test_module self._run_test(request, workspace, editor, test_module) @@ -181,6 +182,7 @@ class TestAutomation(TestAutomationBase): from . import NodePalette_SearchText_Deletion as test_module self._run_test(request, workspace, editor, test_module) + @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform): from . import VariableManager_UnpinVariableType_Works as test_module self._run_test(request, workspace, editor, test_module) From 2811a8418774bb0002fb51333259878360547377 Mon Sep 17 00:00:00 2001 From: puvvadar Date: Thu, 30 Sep 2021 19:59:34 -0700 Subject: [PATCH 048/226] Move did handshake logic to connection data plus an optimization Signed-off-by: puvvadar --- .../AutoGen/AutoPacketDispatcher_Inline.jinja | 11 ++++++- .../ConnectionData/IConnectionData.h | 9 ++++++ .../ClientToServerConnectionData.h | 3 ++ .../ClientToServerConnectionData.inl | 10 ++++++ .../ServerToClientConnectionData.h | 3 ++ .../ServerToClientConnectionData.inl | 10 ++++++ .../Editor/MultiplayerEditorConnection.h | 1 - .../Source/MultiplayerSystemComponent.cpp | 31 ++++++++++++------- .../Code/Source/MultiplayerSystemComponent.h | 3 +- 9 files changed, 66 insertions(+), 15 deletions(-) diff --git a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja index c6f1a23402..73c3227cd5 100644 --- a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja +++ b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja @@ -6,15 +6,24 @@ namespace {{ xml.attrib['Name'] }} { switch (aznumeric_cast(packetHeader.GetPacketType())) { +{% set hs = namespace(handshake=false) %} +{% for Packet in xml.iter('Packet') %} +{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket'] == 'true') %} +{% set hs.handshake = True %} +{% endif %} +{% endfor %} + {% for Packet in xml.iter('Packet') %} case aznumeric_cast({{ Packet.attrib['Name'] }}::Type): { AZLOG(Debug_DispatchPackets, "Received packet %s", "{{ Packet.attrib['Name'] }}"); +{% if hs.handshake %} {% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %} - if (!handler.IsHandshakeComplete()) + if (!handler.IsHandshakeComplete(connection)) { return AzNetworking::PacketDispatchResult::Skipped; } +{% endif %} {% endif %} {{ Packet.attrib['Name'] }} packet; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h index 66a7a1175a..01914f55ae 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h @@ -50,5 +50,14 @@ namespace Multiplayer //! Sets the state of connection whether update messages can be sent or not. //! @param canSendUpdates the state value virtual void SetCanSendUpdates(bool canSendUpdates) = 0; + + + //! Fetches the state of connection whether handshake logic has completed + //! @return true if handshake has completed + virtual bool DidHandshake() const = 0; + + //! Sets the state of connection whether handshake logic has completed + //! @param didHandshake if handshake logic has completed + virtual void SetDidHandshake(bool didHandshake) = 0; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h index e5f1d0edfc..27826baf88 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h @@ -33,6 +33,8 @@ namespace Multiplayer void Update(AZ::TimeMs hostTimeMs) override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; + bool DidHandshake() const override; + void SetDidHandshake(bool didHandshake) override; //! @} const AZStd::string& GetProviderTicket() const; @@ -43,6 +45,7 @@ namespace Multiplayer AZStd::string m_providerTicket; AzNetworking::IConnection* m_connection = nullptr; bool m_canSendUpdates = true; + bool m_didHandshake = false; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl index 9d6a3ca744..8874fbbabc 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl @@ -27,4 +27,14 @@ namespace Multiplayer { m_providerTicket = ticket; } + + inline bool ClientToServerConnectionData::DidHandshake() const + { + return m_didHandshake; + } + + inline void ClientToServerConnectionData::SetDidHandshake(bool didHandshake) + { + m_didHandshake = didHandshake; + } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 9e9afc4413..4e588570ec 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -33,6 +33,8 @@ namespace Multiplayer void Update(AZ::TimeMs hostTimeMs) override; bool CanSendUpdates() const override; void SetCanSendUpdates(bool canSendUpdates) override; + bool DidHandshake() const override; + void SetDidHandshake(bool didHandshake) override; //! @} NetworkEntityHandle GetPrimaryPlayerEntity(); @@ -52,6 +54,7 @@ namespace Multiplayer AZStd::string m_providerTicket; AzNetworking::IConnection* m_connection = nullptr; bool m_canSendUpdates = false; + bool m_didHandshake = false; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl index 53ba51f36a..e4348fe539 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.inl @@ -38,4 +38,14 @@ namespace Multiplayer { m_providerTicket = ticket; } + + inline bool ServerToClientConnectionData::DidHandshake() const + { + return m_didHandshake; + } + + inline void ServerToClientConnectionData::SetDidHandshake(bool didHandshake) + { + m_didHandshake = didHandshake; + } } diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h index ca815d5c48..b93c830cd0 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.h @@ -33,7 +33,6 @@ namespace Multiplayer MultiplayerEditorConnection(); ~MultiplayerEditorConnection() = default; - bool IsHandshakeComplete() const { return true; }; bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerInit& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerReady& packet); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index 023c5ea3af..b1d80a87b5 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -442,9 +442,9 @@ namespace Multiplayer MultiplayerPackets::SyncConsole m_syncPacket; }; - bool MultiplayerSystemComponent::IsHandshakeComplete() const + bool MultiplayerSystemComponent::IsHandshakeComplete(AzNetworking::IConnection* connection) const { - return m_didHandshake; + return reinterpret_cast(connection->GetUserData())->DidHandshake(); } bool MultiplayerSystemComponent::HandleRequest @@ -471,7 +471,7 @@ namespace Multiplayer if (connection->SendReliablePacket(MultiplayerPackets::Accept(InvalidHostId, sv_map))) { - m_didHandshake = true; + reinterpret_cast(connection->GetUserData())->SetDidHandshake(true); // Sync our console ConsoleReplicator consoleReplicator(connection); @@ -488,7 +488,7 @@ namespace Multiplayer [[maybe_unused]] MultiplayerPackets::Accept& packet ) { - m_didHandshake = true; + reinterpret_cast(connection->GetUserData())->SetDidHandshake(true); AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); AZ::Interface::Get()->PerformCommand(commandString.c_str()); @@ -903,8 +903,9 @@ namespace Multiplayer // Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system AZStd::vector gatheredEntities; + INetworkEntityManager* netEntityManager = GetNetworkEntityManager(); AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum, - [&gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [netEntityManager, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) { gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) @@ -912,10 +913,14 @@ namespace Multiplayer if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - NetBindComponent* netBindComponent = entity->FindComponent(); - if (netBindComponent != nullptr) + NetEntityId netEntitydId = netEntityManager->GetNetEntityIdById(entity->GetId()); + if (netEntitydId != InvalidNetEntityId) { - gatheredEntities.push_back(netBindComponent); + NetBindComponent* netBindComponent = netEntityManager->GetEntity(netEntitydId).GetNetBindComponent(); + if (netBindComponent != nullptr) + { + gatheredEntities.push_back(netBindComponent); + } } } } @@ -932,10 +937,14 @@ namespace Multiplayer for (auto& iter : *(m_networkEntityManager.GetNetworkEntityTracker())) { AZ::Entity* entity = iter.second; - NetBindComponent* netBindComponent = entity->FindComponent(); - if (netBindComponent != nullptr) + NetEntityId netEntitydId = GetNetworkEntityManager()->GetNetEntityIdById(entity->GetId()); + if (netEntitydId != InvalidNetEntityId) { - netBindComponent->NotifyPreRender(deltaTime); + NetBindComponent* netBindComponent = GetNetworkEntityManager()->GetEntity(netEntitydId).GetNetBindComponent(); + if (netBindComponent != nullptr) + { + netBindComponent->NotifyPreRender(deltaTime); + } } } } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index c467ed9ad9..ad9f22bc5b 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -76,7 +76,7 @@ namespace Multiplayer int GetTickOrder() override; //! @} - bool IsHandshakeComplete() const; + bool IsHandshakeComplete(AzNetworking::IConnection* connection) const; bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Connect& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Accept& packet); bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ReadyForEntityUpdates& packet); @@ -159,7 +159,6 @@ namespace Multiplayer double m_serverSendAccumulator = 0.0; float m_renderBlendFactor = 0.0f; float m_tickFactor = 0.0f; - bool m_didHandshake = false; #if !defined(AZ_RELEASE_BUILD) MultiplayerEditorConnection m_editorConnectionListener; From f6638420f09fb6ca97b0b47962c201d08aeb020f Mon Sep 17 00:00:00 2001 From: puvvadar Date: Thu, 30 Sep 2021 20:02:38 -0700 Subject: [PATCH 049/226] Formatting fix up Signed-off-by: puvvadar --- .../AutoGen/AutoPacketDispatcher_Inline.jinja | 16 ++++++++-------- .../Multiplayer/ConnectionData/IConnectionData.h | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja index 73c3227cd5..a621af92cb 100644 --- a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja +++ b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja @@ -6,25 +6,25 @@ namespace {{ xml.attrib['Name'] }} { switch (aznumeric_cast(packetHeader.GetPacketType())) { -{% set hs = namespace(handshake=false) %} +{% set packet_ns = namespace(handshake=false) %} {% for Packet in xml.iter('Packet') %} -{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket'] == 'true') %} -{% set hs.handshake = True %} -{% endif %} +{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket'] == 'true') %} +{% set packet_ns.handshake = True %} +{% endif %} {% endfor %} {% for Packet in xml.iter('Packet') %} case aznumeric_cast({{ Packet.attrib['Name'] }}::Type): { AZLOG(Debug_DispatchPackets, "Received packet %s", "{{ Packet.attrib['Name'] }}"); -{% if hs.handshake %} -{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %} +{% if packet_ns.handshake %} +{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %} if (!handler.IsHandshakeComplete(connection)) { return AzNetworking::PacketDispatchResult::Skipped; } -{% endif %} -{% endif %} +{% endif %} +{% endif %} {{ Packet.attrib['Name'] }} packet; if (!serializer.Serialize(packet, "Packet")) diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h index 01914f55ae..90dfcc16bd 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/ConnectionData/IConnectionData.h @@ -51,7 +51,6 @@ namespace Multiplayer //! @param canSendUpdates the state value virtual void SetCanSendUpdates(bool canSendUpdates) = 0; - //! Fetches the state of connection whether handshake logic has completed //! @return true if handshake has completed virtual bool DidHandshake() const = 0; From 8d993494f64bd39b87ac25f6e9028b9c0ede28fe Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Thu, 30 Sep 2021 22:53:51 -0700 Subject: [PATCH 050/226] Entity migrations now totally functional again, plus some fixes to network rigid bodies to make them work properly as they migrate around Signed-off-by: kberg-amzn --- .../Components/NetworkRigidBodyComponent.h | 5 +- .../Multiplayer/EntityDomains/IEntityDomain.h | 3 +- .../Code/Include/Multiplayer/IMultiplayer.h | 10 ++++ .../EntityReplicationManager.h | 8 +-- .../NetworkEntity/INetworkEntityManager.h | 3 ++ .../NetworkEntity/NetworkEntityHandle.h | 14 +---- ...etworkRigidBodyComponent.AutoComponent.xml | 4 +- .../Source/Components/NetBindComponent.cpp | 14 +++-- .../Components/NetworkRigidBodyComponent.cpp | 28 +++++++--- .../FullOwnershipEntityDomain.cpp | 4 +- .../EntityDomains/FullOwnershipEntityDomain.h | 5 +- .../Source/MultiplayerSystemComponent.cpp | 22 ++++++-- .../Code/Source/MultiplayerSystemComponent.h | 3 ++ .../EntityReplicationManager.cpp | 19 ++++--- .../EntityReplication/EntityReplicator.cpp | 16 +++--- .../NetworkEntity/NetworkEntityHandle.cpp | 39 ++++---------- .../NetworkEntity/NetworkEntityManager.cpp | 48 ++++++++++------- .../NetworkEntity/NetworkEntityManager.h | 5 +- .../NetworkEntity/NetworkEntityTracker.cpp | 15 +++++- .../NetworkEntity/NetworkEntityTracker.h | 22 +++++++- .../NetworkEntity/NetworkEntityTracker.inl | 10 ++++ .../Code/Source/NetworkTime/NetworkTime.cpp | 51 ++++++++++++++----- .../ServerToClientReplicationWindow.cpp | 39 +++++++------- .../Code/Tests/ClientHierarchyTests.cpp | 2 +- .../Code/Tests/CommonHierarchySetup.h | 6 +-- Gems/Multiplayer/Code/Tests/MockInterfaces.h | 31 +++++++---- .../Code/Tests/ServerHierarchyTests.cpp | 2 +- 27 files changed, 275 insertions(+), 153 deletions(-) diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h index 796016afee..72fd00cad9 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkRigidBodyComponent.h @@ -61,10 +61,11 @@ namespace Multiplayer { public: NetworkRigidBodyComponentController(NetworkRigidBodyComponent& parent); - void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override; - void HandleSendApplyImpulse(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& impulse, const AZ::Vector3& worldPoint) override; + private: + void OnTransformUpdate(); + AZ::TransformChangedEvent::Handler m_transformChangedHandler; }; } // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h index 092cf9b854..fc41a9b4d0 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/EntityDomains/IEntityDomain.h @@ -39,8 +39,7 @@ namespace Multiplayer virtual void ActivateTracking(const INetworkEntityManager::OwnedEntitySet& ownedEntitySet) = 0; //! Return the set of netbound entities not included in this domain. - //! @param outEntitiesNotInDomain the set of known networked entities not included in this domain - virtual void RetrieveEntitiesNotInDomain(EntitiesNotInDomain& outEntitiesNotInDomain) const = 0; + virtual const EntitiesNotInDomain& RetrieveEntitiesNotInDomain() const = 0; //! Debug draw to visualize host entity domains. virtual void DebugDraw() const = 0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index b0507e8fc6..32af39a43b 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -46,6 +46,7 @@ namespace Multiplayer using ClientMigrationEndEvent = AZ::Event<>; using ClientDisconnectedEvent = AZ::Event<>; using NotifyClientMigrationEvent = AZ::Event; + using NotifyEntityMigrationEvent = AZ::Event; using ConnectionAcquiredEvent = AZ::Event; using SessionInitEvent = AZ::Event; using SessionShutdownEvent = AZ::Event; @@ -113,6 +114,10 @@ namespace Multiplayer //! @param handler The NotifyClientMigrationEvent Handler to add virtual void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) = 0; + //! Adds a NotifyEntityMigrationEvent Handler which is invoked when an entity migrates from one host to another. + //! @param handler The NotifyEntityMigrationEvent Handler to add + virtual void AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) = 0; + //! Adds a ConnectionAcquiredEvent Handler which is invoked when a new endpoint connects to the session. //! @param handler The ConnectionAcquiredEvent Handler to add virtual void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) = 0; @@ -131,6 +136,11 @@ namespace Multiplayer //! @param lastClientInputId the last processed clientInputId by the current host virtual void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) = 0; + //! Signals a NotifyEntityMigrationEvent with the provided parameters. + //! @param entityHandle the network entity handle of the entity being migrated + //! @param remoteHostId the host id of the host the entity is migrating to + virtual void SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) = 0; + //! Sends a packet telling if entity update messages can be sent. //! @param readyForEntityUpdates Ready for entity updates or not virtual void SendReadyForEntityUpdates(bool readyForEntityUpdates) = 0; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h index 01ae966fb5..2e1f83ae38 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/EntityReplication/EntityReplicationManager.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include @@ -71,8 +72,8 @@ namespace Multiplayer bool HasRemoteAuthority(const ConstNetworkEntityHandle& entityHandle) const; - void SetEntityDomain(AZStd::unique_ptr entityDomain); - IEntityDomain* GetEntityDomain(); + void SetRemoteEntityDomain(AZStd::unique_ptr entityDomain); + IEntityDomain* GetRemoteEntityDomain(); void SetReplicationWindow(AZStd::unique_ptr replicationWindow); IReplicationWindow* GetReplicationWindow(); @@ -125,7 +126,7 @@ namespace Multiplayer void MigrateEntityInternal(NetEntityId entityId); void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); - void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, AzNetworking::ConnectionId connectionId); + void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId); EntityReplicator* AddEntityReplicator(const ConstNetworkEntityHandle& entityHandle, NetEntityRole netEntityRole); @@ -193,6 +194,7 @@ namespace Multiplayer AZ::Event m_autonomousEntityReplicatorCreated; EntityExitDomainEvent::Handler m_entityExitDomainEventHandler; SendMigrateEntityEvent m_sendMigrateEntityEvent; + NotifyEntityMigrationEvent::Handler m_notifyEntityMigrationHandler; AZ::ScheduledEvent m_clearRemovedReplicators; AZ::ScheduledEvent m_updateWindow; diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h index 65bb1ad966..43915127ed 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/INetworkEntityManager.h @@ -180,5 +180,8 @@ namespace Multiplayer //! Handle a local rpc message. //! @param entityRpcMessage the local rpc message to handle virtual void HandleLocalRpcMessage(NetworkEntityRpcMessage& message) = 0; + + //! Visualization of network entity manager state. + virtual void DebugDraw() const = 0; }; } diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h index 8deb3d92ce..3281bd40e9 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/NetworkEntity/NetworkEntityHandle.h @@ -30,18 +30,8 @@ namespace Multiplayer //! Constructs a ConstNetworkEntityHandle given an entity, an entity tracker //! @param entity pointer to the entity to construct a ConstNetworkEntityHandle for //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(AZ::Entity* entity, const NetworkEntityTracker* entityTracker); - - //! Constructs a ConstNetworkEntityHandle given an entity, a networkEntityId, and an entity tracker - //! @param entity pointer to the entity to construct a ConstNetworkEntityHandle for - //! @param netEntityId the networkEntityId of the entity - //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(AZ::Entity* entity, NetEntityId netEntityId, const NetworkEntityTracker* entityTracker); - - //! Constructs a ConstNetworkEntityHandle given an entity, a networked entityId, an entity tracker, and a dirty version - //! @param netBindComponent pointer to the entities NetBindComponent - //! @param entityTracker pointer to the entity tracker that tracks the entity - ConstNetworkEntityHandle(NetBindComponent* netBindComponent, const NetworkEntityTracker* entityTracker); + //! can optionally be null in which case the entity tracker will be looked up + ConstNetworkEntityHandle(AZ::Entity* entity, const NetworkEntityTracker* entityTracker = nullptr); ConstNetworkEntityHandle(const ConstNetworkEntityHandle&) = default; diff --git a/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml b/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml index b6cdfca9c2..a85f8c833f 100644 --- a/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml +++ b/Gems/Multiplayer/Code/Source/AutoGen/NetworkRigidBodyComponent.AutoComponent.xml @@ -10,9 +10,11 @@ + + + - diff --git a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp index 524400d008..4e183d22f1 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetBindComponent.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -58,7 +59,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity-> FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning( "NetBindComponent", false, "NetBindComponent IsNetEntityRoleAuthority failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -75,7 +76,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleAutonomous failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -92,7 +93,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleClient failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -109,7 +110,7 @@ namespace Multiplayer return false; } - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = GetNetworkEntityTracker()->GetNetBindComponent(entity); if (!netBindComponent) { AZ_Warning("NetBindComponent", false, "NetBindComponent IsNetEntityRoleServer failed. Entity '%s' (id: %s) is missing a NetBindComponent, make sure this entity contains a component which derives from NetBindComponent.", entity->GetName().c_str(), id.ToString().c_str()) @@ -171,6 +172,8 @@ namespace Multiplayer { GetNetworkEntityManager()->NotifyControllersDeactivated(m_netEntityHandle, EntityIsMigrating::False); } + + GetNetworkEntityTracker()->UnregisterNetBindComponent(this); } NetEntityRole NetBindComponent::GetNetEntityRole() const @@ -502,6 +505,9 @@ namespace Multiplayer m_netEntityId = netEntityId; m_netEntityRole = netEntityRole; m_prefabEntityId = prefabEntityId; + + GetNetworkEntityTracker()->RegisterNetBindComponent(entity, this); + m_netEntityHandle = GetNetworkEntityManager()->AddEntityToEntityMap(m_netEntityId, entity); for (AZ::Component* component : entity->GetComponents()) diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp index 725ebc024c..7e25c8d34b 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkRigidBodyComponent.cpp @@ -57,16 +57,13 @@ namespace Multiplayer NetworkRigidBodyRequestBus::Handler::BusConnect(GetEntityId()); GetNetBindComponent()->AddEntitySyncRewindEventHandler(m_syncRewindHandler); - GetEntity()->FindComponent()->BindTransformChangedEventHandler(m_transformChangedHandler); + GetEntity()->GetTransform()->BindTransformChangedEventHandler(m_transformChangedHandler); m_physicsRigidBodyComponent = Physics::RigidBodyRequestBus::FindFirstHandler(GetEntity()->GetId()); AZ_Assert(m_physicsRigidBodyComponent, "PhysX Rigid Body Component is required on entity %s", GetEntity()->GetName().c_str()); - - if (!HasController()) - { - m_physicsRigidBodyComponent->SetKinematic(true); - } + // By default we're kinematic, activating a controller will allow us to simulate + m_physicsRigidBodyComponent->SetKinematic(true); } void NetworkRigidBodyComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -121,18 +118,26 @@ namespace Multiplayer NetworkRigidBodyComponentController::NetworkRigidBodyComponentController(NetworkRigidBodyComponent& parent) : NetworkRigidBodyComponentControllerBase(parent) + , m_transformChangedHandler([this](const AZ::Transform&, const AZ::Transform&) { OnTransformUpdate(); }) { ; } void NetworkRigidBodyComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - ; + GetParent().m_physicsRigidBodyComponent->SetKinematic(false); + if (IsAuthority()) + { + AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); + rigidBody->SetLinearVelocity(GetLinearVelocity()); + rigidBody->SetAngularVelocity(GetAngularVelocity()); + GetEntity()->GetTransform()->BindTransformChangedEventHandler(m_transformChangedHandler); + } } void NetworkRigidBodyComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) { - ; + GetParent().m_physicsRigidBodyComponent->SetKinematic(true); } void NetworkRigidBodyComponentController::HandleSendApplyImpulse @@ -145,4 +150,11 @@ namespace Multiplayer AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); rigidBody->ApplyLinearImpulseAtWorldPoint(impulse, worldPoint); } + + void NetworkRigidBodyComponentController::OnTransformUpdate() + { + AzPhysics::RigidBody* rigidBody = GetParent().m_physicsRigidBodyComponent->GetRigidBody(); + SetLinearVelocity(rigidBody->GetLinearVelocity()); + SetAngularVelocity(rigidBody->GetAngularVelocity()); + } } // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp index 5b28208cd9..9d53990fb4 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.cpp @@ -31,9 +31,9 @@ namespace Multiplayer ; } - void FullOwnershipEntityDomain::RetrieveEntitiesNotInDomain([[maybe_unused]] EntitiesNotInDomain& outEntitiesNotInDomain) const + const IEntityDomain::EntitiesNotInDomain& FullOwnershipEntityDomain::RetrieveEntitiesNotInDomain() const { - ; + return m_entitiesNotInDomain; } void FullOwnershipEntityDomain::DebugDraw() const diff --git a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h index ddf09e31d5..ae80c16ab8 100644 --- a/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h +++ b/Gems/Multiplayer/Code/Source/EntityDomains/FullOwnershipEntityDomain.h @@ -25,8 +25,11 @@ namespace Multiplayer const AZ::Aabb& GetAabb() const override; bool IsInDomain(const ConstNetworkEntityHandle& entityHandle) const override; void ActivateTracking(const INetworkEntityManager::OwnedEntitySet& ownedEntitySet) override; - void RetrieveEntitiesNotInDomain(EntitiesNotInDomain& outEntitiesNotInDomain) const override; + const EntitiesNotInDomain& RetrieveEntitiesNotInDomain() const override; void DebugDraw() const override; //! @} + + private: + EntitiesNotInDomain m_entitiesNotInDomain; }; } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index cb72fe9252..407a5b2140 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -85,6 +85,7 @@ namespace Multiplayer AZ_CVAR(float, cl_renderTickBlendBase, 0.15f, nullptr, AZ::ConsoleFunctorFlags::Null, "The base used for blending between network updates, 0.1 will be quite linear, 0.2 or 0.3 will " "slow down quicker and may be better suited to connections with highly variable latency"); + AZ_CVAR(bool, bg_multiplayerDebugDraw, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enables debug draw for the multiplayer gem"); void MultiplayerSystemComponent::Reflect(AZ::ReflectContext* context) { @@ -390,6 +391,11 @@ namespace Multiplayer { m_networkInterface->GetConnectionSet().VisitConnections(visitor); } + + if (bg_multiplayerDebugDraw) + { + m_networkEntityManager.DebugDraw(); + } } int MultiplayerSystemComponent::GetTickOrder() @@ -802,6 +808,11 @@ namespace Multiplayer handler.Connect(m_notifyClientMigrationEvent); } + void MultiplayerSystemComponent::AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) + { + handler.Connect(m_notifyEntityMigrationEvent); + } + void MultiplayerSystemComponent::AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) { handler.Connect(m_connectionAcquiredEvent); @@ -822,6 +833,11 @@ namespace Multiplayer m_notifyClientMigrationEvent.Signal(hostId, userIdentifier, lastClientInputId); } + void MultiplayerSystemComponent::SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) + { + m_notifyEntityMigrationEvent.Signal(entityHandle, remoteHostId); + } + void MultiplayerSystemComponent::SendReadyForEntityUpdates(bool readyForEntityUpdates) { IConnectionSet& connectionSet = m_networkInterface->GetConnectionSet(); @@ -937,7 +953,7 @@ namespace Multiplayer // Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system AZStd::vector gatheredEntities; AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum, - [&gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [this, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) { gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) @@ -945,7 +961,7 @@ namespace Multiplayer if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityManager.GetNetworkEntityTracker()->GetNetBindComponent(entity); if (netBindComponent != nullptr) { gatheredEntities.push_back(netBindComponent); @@ -965,7 +981,7 @@ namespace Multiplayer for (auto& iter : *(m_networkEntityManager.GetNetworkEntityTracker())) { AZ::Entity* entity = iter.second; - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityManager.GetNetworkEntityTracker()->GetNetBindComponent(entity); if (netBindComponent != nullptr) { netBindComponent->NotifyPreRender(deltaTime); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index d24b143da0..262168b536 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -112,10 +112,12 @@ namespace Multiplayer void AddClientMigrationEndEventHandler(ClientMigrationEndEvent::Handler& handler) override; void AddClientDisconnectedHandler(ClientDisconnectedEvent::Handler& handler) override; void AddNotifyClientMigrationHandler(NotifyClientMigrationEvent::Handler& handler) override; + void AddNotifyEntityMigrationEventHandler(NotifyEntityMigrationEvent::Handler& handler) override; void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; void SendNotifyClientMigrationEvent(const HostId& hostId, uint64_t userIdentifier, ClientInputId lastClientInputId) override; + void SendNotifyEntityMigrationEvent(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; float GetCurrentBlendFactor() const override; @@ -159,6 +161,7 @@ namespace Multiplayer ClientMigrationStartEvent m_clientMigrationStartEvent; ClientMigrationEndEvent m_clientMigrationEndEvent; NotifyClientMigrationEvent m_notifyClientMigrationEvent; + NotifyEntityMigrationEvent m_notifyEntityMigrationEvent; AZStd::queue m_pendingConnectionTickets; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index cdda18e43a..6f65d01e50 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -45,6 +45,7 @@ namespace Multiplayer , m_clearRemovedReplicators([this]() { ClearRemovedReplicators(); }, AZ::Name("EntityReplicationManager::ClearRemovedReplicators")) , m_updateWindow([this]() { UpdateWindow(); }, AZ::Name("EntityReplicationManager::UpdateWindow")) , m_entityExitDomainEventHandler([this](const ConstNetworkEntityHandle& entityHandle) { OnEntityExitDomain(entityHandle); }) + , m_notifyEntityMigrationHandler([this](const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) { OnPostEntityMigration(entityHandle, remoteHostId); }) { // Our max payload size is whatever is passed in, minus room for a udp packetheader m_maxPayloadSize = connection.GetConnectionMtu() - UdpPacketHeaderSerializeSize - ReplicationManagerPacketOverhead; @@ -60,6 +61,8 @@ namespace Multiplayer { networkEntityManager->AddEntityExitDomainHandler(m_entityExitDomainEventHandler); } + + GetMultiplayer()->AddNotifyEntityMigrationEventHandler(m_notifyEntityMigrationHandler); } void EntityReplicationManager::SetRemoteHostId(const HostId& hostId) @@ -355,8 +358,9 @@ namespace Multiplayer entityReplicator = GetEntityReplicator(entityHandle); if (entityReplicator) { - // Check if we changed our remote role - this can happen during server entity migration. After we migrate ownership to the new server, we hold onto our entity replicator until we are sure - // the other side has received all the packets (and we haven't had to do resends). At this point, it is possible hear back from the remote side we migrated to on the old replicator prior to the timeout and cleanup on the old one + // Check if we changed our remote role - this can happen during server entity migration. + // Retain our replicator after migration until we are sure the other side has received all the packets (and we haven't had to do resends). + // At this point, the remote host should inform us we've migrated prior to the timeout and cleanup of the old replicator const bool changedRemoteRole = (remoteNetworkRole != entityReplicator->GetRemoteNetworkRole()); // Check if we've changed our bound local role - this can occur when we gain Autonomous or lose Autonomous on a client bool changedLocalRole(false); @@ -1068,12 +1072,12 @@ namespace Multiplayer return false; } - void EntityReplicationManager::SetEntityDomain(AZStd::unique_ptr entityDomain) + void EntityReplicationManager::SetRemoteEntityDomain(AZStd::unique_ptr entityDomain) { m_remoteEntityDomain = AZStd::move(entityDomain); } - IEntityDomain* EntityReplicationManager::GetEntityDomain() + IEntityDomain* EntityReplicationManager::GetRemoteEntityDomain() { return m_remoteEntityDomain.get(); } @@ -1143,6 +1147,9 @@ namespace Multiplayer m_sendMigrateEntityEvent.Signal(m_connection, message); AZLOG(NET_RepDeletes, "Migration packet sent %u to remote host %s", netEntityId, GetRemoteHostId().GetString().c_str()); + // Notify all other EntityReplicationManagers that this entity has migrated so they can adjust their own replicators given our new proxy status + GetMultiplayer()->SendNotifyEntityMigrationEvent(entityHandle, GetRemoteHostId()); + // Immediately add a new replicator so that we catch RPC invocations, the remote side will make us a new one, and then remove us if needs be AddEntityReplicator(entityHandle, NetEntityRole::Authority); } @@ -1206,11 +1213,11 @@ namespace Multiplayer } } - void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId, [[maybe_unused]] AzNetworking::ConnectionId connectionId) + void EntityReplicationManager::OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, const HostId& remoteHostId) { if (remoteHostId == GetRemoteHostId()) { - // don't handle self sent messages + // Don't handle self sent messages return; } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp index e569389659..05001b5960 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicator.cpp @@ -54,7 +54,7 @@ namespace Multiplayer { if (auto localEnt = m_entityHandle.GetEntity()) { - m_netBindComponent = localEnt->FindComponent(); + m_netBindComponent = m_entityHandle.GetNetBindComponent(); m_boundLocalNetworkRole = m_netBindComponent->GetNetEntityRole(); } } @@ -94,7 +94,7 @@ namespace Multiplayer m_entityHandle = entityHandle; if (auto localEntity = m_entityHandle.GetEntity()) { - m_netBindComponent = localEntity->FindComponent(); + m_netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(m_netBindComponent, "No Multiplayer::NetBindComponent"); m_boundLocalNetworkRole = m_netBindComponent->GetNetEntityRole(); SetPrefabEntityId(m_netBindComponent->GetPrefabEntityId()); @@ -125,7 +125,8 @@ namespace Multiplayer !RemoteManagerOwnsEntityLifetime() ? PropertyPublisher::OwnsLifetime::True : PropertyPublisher::OwnsLifetime::False, m_netBindComponent, *m_connection - ); + ); + m_onEntityDirtiedHandler.Disconnect(); m_netBindComponent->AddEntityDirtiedEventHandler(m_onEntityDirtiedHandler); } else @@ -146,8 +147,9 @@ namespace Multiplayer // Prepare event handlers if (auto localEntity = m_entityHandle.GetEntity()) { - NetBindComponent* netBindComponent = localEntity->FindComponent(); + NetBindComponent* netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); + m_onEntityStopHandler.Disconnect(); netBindComponent->AddEntityStopEventHandler(m_onEntityStopHandler); AttachRPCHandlers(); } @@ -168,7 +170,7 @@ namespace Multiplayer if (auto localEntity = m_entityHandle.GetEntity()) { - NetBindComponent* netBindComponent = localEntity->FindComponent(); + NetBindComponent* netBindComponent = m_entityHandle.GetNetBindComponent(); AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); switch (GetBoundLocalNetworkRole()) @@ -479,10 +481,10 @@ namespace Multiplayer } NetBindComponent* netBindComponent = GetNetBindComponent(); - const bool sendSliceName = !m_propertyPublisher->IsRemoteReplicatorEstablished(); + //const bool sendSliceName = !m_propertyPublisher->IsRemoteReplicatorEstablished(); NetworkEntityUpdateMessage updateMessage(GetRemoteNetworkRole(), GetEntityHandle().GetNetEntityId()); - if (sendSliceName) + //if (sendSliceName) { updateMessage.SetPrefabEntityId(netBindComponent->GetPrefabEntityId()); } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp index 6f3bd719e0..ef338840f9 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityHandle.cpp @@ -20,6 +20,11 @@ namespace Multiplayer : m_entity(entity) , m_networkEntityTracker(networkEntityTracker) { + if (m_networkEntityTracker == nullptr) + { + m_networkEntityTracker = GetNetworkEntityTracker(); + } + if (m_networkEntityTracker) { m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); @@ -28,12 +33,10 @@ namespace Multiplayer if (entity) { AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); - NetBindComponent* netBindComponent = m_entity->template FindComponent(); - if (netBindComponent != nullptr) + m_netBindComponent = networkEntityTracker->GetNetBindComponent(entity); + if (m_netBindComponent != nullptr) { - AZ_Assert(netBindComponent, "No Multiplayer::NetBindComponent"); - m_netBindComponent = netBindComponent; - m_netEntityId = netBindComponent->GetNetEntityId(); + m_netEntityId = m_netBindComponent->GetNetEntityId(); } else { @@ -42,30 +45,6 @@ namespace Multiplayer } } - ConstNetworkEntityHandle::ConstNetworkEntityHandle(AZ::Entity* entity, NetEntityId netEntityId, const NetworkEntityTracker* networkEntityTracker) - : m_entity(entity) - , m_netEntityId(netEntityId) - , m_networkEntityTracker(networkEntityTracker) - { - if (m_networkEntityTracker) - { - m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); - } - } - - ConstNetworkEntityHandle::ConstNetworkEntityHandle(NetBindComponent* netBindComponent, const NetworkEntityTracker* networkEntityTracker) - : m_entity(netBindComponent->GetEntity()) - , m_netBindComponent(netBindComponent) - , m_networkEntityTracker(networkEntityTracker) - , m_netEntityId(netBindComponent->GetNetEntityId()) - { - if (m_networkEntityTracker) - { - m_changeDirty = m_networkEntityTracker->GetChangeDirty(m_entity); - } - AZ_Assert(networkEntityTracker, "NetworkEntityTracker is not valid"); - } - bool ConstNetworkEntityHandle::Exists() const { if (!m_networkEntityTracker) @@ -151,7 +130,7 @@ namespace Multiplayer } if (m_netBindComponent == nullptr) { - m_netBindComponent = m_entity->template FindComponent(); + m_netBindComponent = m_networkEntityTracker->GetNetBindComponent(m_entity); } return m_netBindComponent; } diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 720f869633..93a816fdcf 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -46,6 +48,7 @@ namespace Multiplayer m_hostId = hostId; m_entityDomain = AZStd::move(entityDomain); m_updateEntityDomainEvent.Enqueue(net_EntityDomainUpdateMs, true); + m_entityDomain->ActivateTracking(m_ownedEntities); } bool NetworkEntityManager::IsInitialized() const @@ -96,7 +99,7 @@ namespace Multiplayer NetworkEntityHandle NetworkEntityManager::AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) { m_networkEntityTracker.Add(netEntityId, entity); - return NetworkEntityHandle(entity, netEntityId, &m_networkEntityTracker); + return NetworkEntityHandle(entity, &m_networkEntityTracker); } void NetworkEntityManager::MarkForRemoval(const ConstNetworkEntityHandle& entityHandle) @@ -212,6 +215,29 @@ namespace Multiplayer m_localDeferredRpcMessages.emplace_back(AZStd::move(message)); } + void NetworkEntityManager::DebugDraw() const + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + + for (NetworkEntityTracker::const_iterator it = m_networkEntityTracker.begin(); it != m_networkEntityTracker.end(); ++it) + { + AZ::Entity* entity = it->second; + NetBindComponent* netBindComponent = m_networkEntityTracker.GetNetBindComponent(entity); + if (netBindComponent->GetNetEntityRole() == NetEntityRole::Authority) + { + const AZ::Aabb entityBounds = AZ::Interface::Get()->GetEntityWorldBoundsUnion(entity->GetId()); + debugDisplay->DrawWireBox(entityBounds.GetMin(), entityBounds.GetMax()); + } + } + + if (m_entityDomain != nullptr) + { + m_entityDomain->DebugDraw(); + } + } + void NetworkEntityManager::DispatchLocalDeferredRpcMessages() { for (NetworkEntityRpcMessage& rpcMessage : m_localDeferredRpcMessages) @@ -219,7 +245,7 @@ namespace Multiplayer AZ::Entity* entity = m_networkEntityTracker.GetRaw(rpcMessage.GetEntityId()); if (entity != nullptr) { - NetBindComponent* netBindComponent = entity->FindComponent(); + NetBindComponent* netBindComponent = m_networkEntityTracker.GetNetBindComponent(entity); AZ_Assert(netBindComponent != nullptr, "Attempting to send an RPC to an entity with no NetBindComponent"); netBindComponent->HandleRpcMessage(nullptr, NetEntityRole::Server, rpcMessage); } @@ -234,9 +260,8 @@ namespace Multiplayer return; } - m_entitiesNotInDomain.clear(); - m_entityDomain->RetrieveEntitiesNotInDomain(m_entitiesNotInDomain); - for (NetEntityId exitingId : m_entitiesNotInDomain) + const IEntityDomain::EntitiesNotInDomain& entitiesNotInDomain = m_entityDomain->RetrieveEntitiesNotInDomain(); + for (NetEntityId exitingId : entitiesNotInDomain) { OnEntityExitDomain(exitingId); } @@ -247,18 +272,6 @@ namespace Multiplayer bool safeToExit = true; NetworkEntityHandle entityHandle = m_networkEntityTracker.Get(entityId); - // ClientAutonomous entities need special handling here. When we migrate a player's entity the player's client must tell the new server which - // entity they were controlling. If we tell them to migrate before they know which entity they control it results in them requesting a new entity - // from the new server, resulting in an orphaned PlayerChar. PlayerControllerComponentServerAuthority::PlayerClientHasControlledEntity() - // will tell us whether the client sent an RPC acknowledging that they now know which entity is theirs. - if (AZ::Entity* entity = entityHandle.GetEntity()) - { - //if (PlayerComponent::Authority* playerController = FindController(nonConstExitingEntityPtr)) - //{ - // safeToExit = playerController->PlayerClientHasControlledEntity(); - //} - } - // We also need special handling for the EntityHierarchyComponent as well, since related entities need to be migrated together //auto* hierarchyController = FindController(nonConstExitingEntityPtr); //if (hierarchyController) @@ -338,6 +351,7 @@ namespace Multiplayer originalToCloneIdMap[originalEntity->GetId()] = clone->GetId(); + // Can't use NetworkEntityTracker to do the lookup since the entity has not activated yet NetBindComponent* netBindComponent = clone->FindComponent(); if (netBindComponent != nullptr) { diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h index 7ff47f3f75..13b8f0e778 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h @@ -62,9 +62,7 @@ namespace Multiplayer AZStd::unique_ptr RequestNetSpawnableInstantiation( const AZ::Data::Asset& netSpawnable, const AZ::Transform& transform) override; - void SetupNetEntity(AZ::Entity* netEntity, PrefabEntityId prefabEntityId, NetEntityRole netEntityRole) override; - uint32_t GetEntityCount() const override; NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) override; void MarkForRemoval(const ConstNetworkEntityHandle& entityHandle) override; @@ -81,11 +79,13 @@ namespace Multiplayer void NotifyControllersActivated(const ConstNetworkEntityHandle& entityHandle, EntityIsMigrating entityIsMigrating) override; void NotifyControllersDeactivated(const ConstNetworkEntityHandle& entityHandle, EntityIsMigrating entityIsMigrating) override; void HandleLocalRpcMessage(NetworkEntityRpcMessage& message) override; + void DebugDraw() const override; //! @} void DispatchLocalDeferredRpcMessages(); void UpdateEntityDomain(); void OnEntityExitDomain(NetEntityId entityId); + //! RootSpawnableNotificationBus //! @{ void OnRootSpawnableAssigned(AZ::Data::Asset rootSpawnable, uint32_t generation) override; @@ -105,7 +105,6 @@ namespace Multiplayer AZStd::unique_ptr m_entityDomain; AZ::ScheduledEvent m_updateEntityDomainEvent; - IEntityDomain::EntitiesNotInDomain m_entitiesNotInDomain; OwnedEntitySet m_ownedEntities; EntityExitDomainEvent m_entityExitDomainEvent; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp index e31907461b..928f5b4f80 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -21,16 +22,26 @@ namespace Multiplayer m_netEntityIdMap[entity->GetId()] = netEntityId; } + void NetworkEntityTracker::RegisterNetBindComponent(AZ::Entity* entity, NetBindComponent* component) + { + m_netBindingMap[entity] = component; + } + + void NetworkEntityTracker::UnregisterNetBindComponent(NetBindComponent* component) + { + m_netBindingMap.erase(component->GetEntity()); + } + NetworkEntityHandle NetworkEntityTracker::Get(NetEntityId netEntityId) { AZ::Entity* entity = GetRaw(netEntityId); - return NetworkEntityHandle(entity, netEntityId, this); + return NetworkEntityHandle(entity, this); } ConstNetworkEntityHandle NetworkEntityTracker::Get(NetEntityId netEntityId) const { AZ::Entity* entity = GetRaw(netEntityId); - return ConstNetworkEntityHandle(entity, netEntityId, this); + return ConstNetworkEntityHandle(entity, this); } NetEntityId NetworkEntityTracker::Get(const AZ::EntityId& entityId) const diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h index 0e632dc7b4..a7f5b9e585 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.h @@ -15,6 +15,8 @@ namespace Multiplayer { + class NetBindComponent; + //! @class NetworkEntityTracker //! @brief The responsibly of this class is to allow entity netEntityId's to be looked up. class NetworkEntityTracker @@ -23,16 +25,26 @@ namespace Multiplayer using EntityMap = AZStd::unordered_map; using NetEntityIdMap = AZStd::unordered_map; + using NetBindingMap = AZStd::unordered_map; using iterator = EntityMap::iterator; using const_iterator = EntityMap::const_iterator; NetworkEntityTracker() = default; - //! Adds a networked entity to the tracker + //! Adds a networked entity to the tracker. //! @param netEntityId the networkId of the entity to add //! @param entity pointer to the entity corresponding to the networkId void Add(NetEntityId netEntityId, AZ::Entity* entity); + //! Registers a new NetBindComponent with the NetworkEntityTracker. + //! @param entity pointer to the entity we are registering the NetBindComponent for + //! @param component pointer to the NetBindComponent being registered + void RegisterNetBindComponent(AZ::Entity* entity, NetBindComponent* component); + + //! Unregisters a NetBindComponent from the NetworkEntityTracker. + //! @param component pointer to the NetBindComponent being removed + void UnregisterNetBindComponent(NetBindComponent* component); + //! Returns an entity handle which can validate entity existence. NetworkEntityHandle Get(NetEntityId netEntityId); ConstNetworkEntityHandle Get(NetEntityId netEntityId) const; @@ -46,9 +58,14 @@ namespace Multiplayer //! Get a raw pointer of an entity. AZ::Entity *GetRaw(NetEntityId netEntityId) const; - //! Moves the given iterator out of the entity holder and returns the ptr + //! Moves the given iterator out of the entity holder and returns the ptr. AZ::Entity *Move(EntityMap::iterator iter); + //! Retrieves the NetBindComponent for the provided AZ::Entity, nullptr if the entity does not have netbinding. + //! @param entity pointer to the entity to retrieve the NetBindComponent for + //! @return pointer to the entities NetBindComponent, or nullptr if the entity doesn't exist or does not have netbinding + NetBindComponent* GetNetBindComponent(AZ::Entity* rawEntity) const; + //! Container overloads //!@{ iterator begin(); @@ -79,6 +96,7 @@ namespace Multiplayer EntityMap m_entityMap; NetEntityIdMap m_netEntityIdMap; + NetBindingMap m_netBindingMap; uint32_t m_deleteChangeDirty = 0; uint32_t m_addChangeDirty = 0; }; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl index 44098336be..e9210e7a9f 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityTracker.inl @@ -10,6 +10,16 @@ namespace Multiplayer { + inline NetBindComponent* NetworkEntityTracker::GetNetBindComponent(AZ::Entity* rawEntity) const + { + auto found = m_netBindingMap.find(rawEntity); + if (found != m_netBindingMap.end()) + { + return found->second; + } + return nullptr; + } + inline NetworkEntityTracker::iterator NetworkEntityTracker::begin() { return m_entityMap.begin(); diff --git a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp index 9e69d93e16..59dddf5652 100644 --- a/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkTime/NetworkTime.cpp @@ -13,10 +13,12 @@ #include #include #include +#include namespace Multiplayer { AZ_CVAR(float, sv_RewindVolumeExtrudeDistance, 50.0f, nullptr, AZ::ConsoleFunctorFlags::Null, "The amount to increase rewind volume checks to account for fast moving entities"); + AZ_CVAR(bool, bg_RewindDebugDraw, false, nullptr, AZ::ConsoleFunctorFlags::Null, "If true enables debug draw of rewind operations"); NetworkTime::NetworkTime() { @@ -94,21 +96,46 @@ namespace Multiplayer // Since the vis system doesn't support rewound queries, first query with an expanded volume to catch any fast moving entities const AZ::Aabb expandedVolume = rewindVolume.GetExpanded(AZ::Vector3(sv_RewindVolumeExtrudeDistance)); + AzFramework::DebugDisplayRequests* debugDisplay = nullptr; + if (bg_RewindDebugDraw) + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + } + + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::Red); + debugDisplay->DrawWireBox(expandedVolume.GetMin(), expandedVolume.GetMax()); + } + + NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker(); AzFramework::IEntityBoundsUnion* entityBoundsUnion = AZ::Interface::Get(); - AZStd::vector gatheredEntities; AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(expandedVolume, - [entityBoundsUnion, rewindVolume, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [this, debugDisplay, networkEntityTracker, entityBoundsUnion, rewindVolume](const AzFramework::IVisibilityScene::NodeData& nodeData) { - gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); + m_rewoundEntities.reserve(m_rewoundEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) { if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); + NetworkEntityHandle entityHandle(entity, networkEntityTracker); + if (entityHandle.GetNetBindComponent() == nullptr) + { + // Not a net-bound entity, terminate processing of this entity + return; + } + const AZ::Aabb currentBounds = entityBoundsUnion->GetEntityWorldBoundsUnion(entity->GetId()); const AZ::Vector3 currentCenter = currentBounds.GetCenter(); - NetworkTransformComponent* networkTransform = entity->template FindComponent(); + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::White); + debugDisplay->DrawWireBox(currentBounds.GetMin(), currentBounds.GetMax()); + } if (networkTransform != nullptr) { @@ -123,24 +150,20 @@ namespace Multiplayer } const AZ::Vector3 rewindOffset = rewindCenter - currentCenter; // Compute offset between rewound and current positions const AZ::Aabb rewoundAabb = currentBounds.GetTranslated(rewindOffset); // Apply offset to the entity aabb + if (debugDisplay) + { + debugDisplay->SetColor(AZ::Colors::Grey); + debugDisplay->DrawWireBox(rewoundAabb.GetMin(), rewoundAabb.GetMax()); + } if (AZ::ShapeIntersection::Overlaps(rewoundAabb, rewindVolume)) // Validate the rewound aabb intersects our rewind volume { - // Due to component constraints, netBindComponent must exist if networkTransform exists - NetBindComponent* netBindComponent = entity->template FindComponent(); - gatheredEntities.push_back(netBindComponent); + m_rewoundEntities.push_back(entityHandle); } } } } }); - - NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker(); - for (NetBindComponent* netBindComponent : gatheredEntities) - { - netBindComponent->NotifySyncRewindState(); - m_rewoundEntities.push_back(NetworkEntityHandle(netBindComponent, networkEntityTracker)); - } } void NetworkTime::ClearRewoundEntities() diff --git a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp index 740495b606..9d9cc74d2b 100644 --- a/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp +++ b/Gems/Multiplayer/Code/Source/ReplicationWindows/ServerToClientReplicationWindow.cpp @@ -107,7 +107,7 @@ namespace Multiplayer void ServerToClientReplicationWindow::UpdateWindow() { - // clear the candidate queue, we're going to rebuild it + // Clear the candidate queue, we're going to rebuild it ReplicationCandidateQueue::container_type clearQueueContainer; clearQueueContainer.reserve(sv_MaxEntitiesToTrackReplication); // Move the clearQueueContainer into the ReplicationCandidateQueue to maintain the reserved memory @@ -118,7 +118,7 @@ namespace Multiplayer NetBindComponent* netBindComponent = m_controlledEntity.GetNetBindComponent(); if (!netBindComponent || !netBindComponent->HasController()) { - // if we don't have a controlled entity, or we no longer have control of the entity, don't run the update + // If we don't have a controlled entity, or we no longer have control of the entity, don't run the update return; } @@ -149,24 +149,25 @@ namespace Multiplayer for (AzFramework::VisibilityEntry* visEntry : gatheredEntries) { AZ::Entity* entity = static_cast(visEntry->m_userData); - - if (filterEntityManager && filterEntityManager->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId())) + NetworkEntityHandle entityHandle(entity, networkEntityTracker); + if (entityHandle.GetNetBindComponent() == nullptr) { + // Entity does not have netbinding, skip this entity continue; } - NetBindComponent* entryNetBindComponent = entity->template FindComponent(); - if (entryNetBindComponent != nullptr) + if (filterEntityManager && filterEntityManager->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId())) { - // We want to find the closest extent to the player and prioritize using that distance - const AZ::Vector3 supportNormal = controlledEntityPosition - visEntry->m_boundingVolume.GetCenter(); - const AZ::Vector3 closestPosition = visEntry->m_boundingVolume.GetSupport(supportNormal); - const float gatherDistanceSquared = controlledEntityPosition.GetDistanceSq(closestPosition); - const float priority = (gatherDistanceSquared > 0.0f) ? 1.0f / gatherDistanceSquared : 0.0f; - - NetworkEntityHandle entityHandle(entryNetBindComponent, networkEntityTracker); - AddEntityToReplicationSet(entityHandle, priority, gatherDistanceSquared); + continue; } + + // We want to find the closest extent to the player and prioritize using that distance + const AZ::Vector3 supportNormal = controlledEntityPosition - visEntry->m_boundingVolume.GetCenter(); + const AZ::Vector3 closestPosition = visEntry->m_boundingVolume.GetSupport(supportNormal); + const float gatherDistanceSquared = controlledEntityPosition.GetDistanceSq(closestPosition); + const float priority = (gatherDistanceSquared > 0.0f) ? 1.0f / gatherDistanceSquared : 0.0f; + + AddEntityToReplicationSet(entityHandle, priority, gatherDistanceSquared); } // Add in Autonomous Entities @@ -228,11 +229,10 @@ namespace Multiplayer void ServerToClientReplicationWindow::OnEntityActivated(AZ::Entity* entity) { - NetBindComponent* netBindComponent = entity->FindComponent(); + ConstNetworkEntityHandle entityHandle(entity); + NetBindComponent* netBindComponent = entityHandle.GetNetBindComponent(); if (netBindComponent != nullptr) { - ConstNetworkEntityHandle entityHandle(netBindComponent, GetNetworkEntityTracker()); - if (netBindComponent->HasController()) { if (IFilterEntityManager* filter = GetMultiplayer()->GetFilterEntityManager()) @@ -261,10 +261,9 @@ namespace Multiplayer void ServerToClientReplicationWindow::OnEntityDeactivated(AZ::Entity* entity) { - NetBindComponent* netBindComponent = entity->FindComponent(); - if (netBindComponent != nullptr) + ConstNetworkEntityHandle entityHandle(entity); + if (entityHandle.GetNetBindComponent() != nullptr) { - ConstNetworkEntityHandle entityHandle(netBindComponent, GetNetworkEntityTracker()); m_replicationSet.erase(entityHandle); } } diff --git a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp index 316f85c214..a58f23bae2 100644 --- a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp +++ b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include namespace Multiplayer { diff --git a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h index 2deac1aa27..dba7fa5405 100644 --- a/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonHierarchySetup.h @@ -25,10 +25,10 @@ #include #include #include +#include +#include #include #include -#include -#include namespace Multiplayer { @@ -205,7 +205,7 @@ namespace Multiplayer NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) { m_networkEntityMap[netEntityId] = entity; - return NetworkEntityHandle(entity, netEntityId, m_networkEntityTracker.get()); + return NetworkEntityHandle(entity, m_networkEntityTracker.get()); } ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const diff --git a/Gems/Multiplayer/Code/Tests/MockInterfaces.h b/Gems/Multiplayer/Code/Tests/MockInterfaces.h index 42e034d234..44024f67ab 100644 --- a/Gems/Multiplayer/Code/Tests/MockInterfaces.h +++ b/Gems/Multiplayer/Code/Tests/MockInterfaces.h @@ -19,42 +19,53 @@ namespace UnitTest class MockMultiplayer : public Multiplayer::IMultiplayer { public: - MOCK_CONST_METHOD0(GetCurrentBlendFactor, float ()); MOCK_CONST_METHOD0(GetAgentType, Multiplayer::MultiplayerAgentType()); MOCK_METHOD1(InitializeMultiplayer, void(Multiplayer::MultiplayerAgentType)); MOCK_METHOD2(StartHosting, bool(uint16_t, bool)); - MOCK_METHOD2(Connect, bool(AZStd::string, uint16_t)); + MOCK_METHOD2(Connect, bool(const AZStd::string&, uint16_t)); MOCK_METHOD1(Terminate, void(AzNetworking::DisconnectReason)); + MOCK_METHOD1(AddClientMigrationStartEventHandler, void(Multiplayer::ClientMigrationStartEvent::Handler&)); + MOCK_METHOD1(AddClientMigrationEndEventHandler, void(Multiplayer::ClientMigrationEndEvent::Handler&)); MOCK_METHOD1(AddClientDisconnectedHandler, void(AZ::Event<>::Handler&)); + MOCK_METHOD1(AddNotifyClientMigrationHandler, void(Multiplayer::NotifyClientMigrationEvent::Handler&)); + MOCK_METHOD1(AddNotifyEntityMigrationEventHandler, void(Multiplayer::NotifyEntityMigrationEvent::Handler&)); MOCK_METHOD1(AddConnectionAcquiredHandler, void(AZ::Event::Handler&)); MOCK_METHOD1(AddSessionInitHandler, void(AZ::Event::Handler&)); MOCK_METHOD1(AddSessionShutdownHandler, void(AZ::Event::Handler&)); + MOCK_METHOD3(SendNotifyClientMigrationEvent, void(const Multiplayer::HostId&, uint64_t, Multiplayer::ClientInputId)); + MOCK_METHOD2(SendNotifyEntityMigrationEvent, void(const Multiplayer::ConstNetworkEntityHandle&, const Multiplayer::HostId&)); MOCK_METHOD1(SendReadyForEntityUpdates, void(bool)); MOCK_CONST_METHOD0(GetCurrentHostTimeMs, AZ::TimeMs()); + MOCK_CONST_METHOD0(GetCurrentBlendFactor, float()); MOCK_METHOD0(GetNetworkTime, Multiplayer::INetworkTime* ()); MOCK_METHOD0(GetNetworkEntityManager, Multiplayer::INetworkEntityManager* ()); MOCK_METHOD1(SetFilterEntityManager, void(Multiplayer::IFilterEntityManager*)); MOCK_METHOD0(GetFilterEntityManager, Multiplayer::IFilterEntityManager* ()); + MOCK_METHOD1(SetShouldSpawnNetworkEntities, void(bool)); + MOCK_CONST_METHOD0(GetShouldSpawnNetworkEntities, bool()); }; class MockNetworkEntityManager : public Multiplayer::INetworkEntityManager { public: - MOCK_METHOD2(RequestNetSpawnableInstantiation, AZStd::unique_ptr (const AZ::Data::Asset&, const AZ::Transform&)); - MOCK_METHOD4( - CreateEntitiesImmediate, - EntityList (const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ::Transform&, Multiplayer::AutoActivate)); - MOCK_CONST_METHOD1(GetNetEntityIdById, Multiplayer::NetEntityId (const AZ::EntityId&)); + MOCK_METHOD2(Initialize, void(const Multiplayer::HostId&, AZStd::unique_ptr)); + MOCK_CONST_METHOD0(IsInitialized, bool()); + MOCK_CONST_METHOD0(GetEntityDomain, Multiplayer::IEntityDomain*()); MOCK_METHOD0(GetNetworkEntityTracker, Multiplayer::NetworkEntityTracker* ()); MOCK_METHOD0(GetNetworkEntityAuthorityTracker, Multiplayer::NetworkEntityAuthorityTracker* ()); MOCK_METHOD0(GetMultiplayerComponentRegistry, Multiplayer::MultiplayerComponentRegistry* ()); - MOCK_CONST_METHOD0(GetHostId, Multiplayer::HostId()); + MOCK_CONST_METHOD0(GetHostId, const Multiplayer::HostId&()); + MOCK_CONST_METHOD1(GetEntity, Multiplayer::ConstNetworkEntityHandle(Multiplayer::NetEntityId)); + MOCK_CONST_METHOD1(GetNetEntityIdById, Multiplayer::NetEntityId(const AZ::EntityId&)); MOCK_METHOD3(CreateEntitiesImmediate, EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ:: Transform&)); + MOCK_METHOD4( + CreateEntitiesImmediate, + EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityRole, const AZ::Transform&, Multiplayer::AutoActivate)); MOCK_METHOD5(CreateEntitiesImmediate, EntityList(const Multiplayer::PrefabEntityId&, Multiplayer::NetEntityId, Multiplayer:: NetEntityRole, Multiplayer::AutoActivate, const AZ::Transform&)); + MOCK_METHOD2(RequestNetSpawnableInstantiation, AZStd::unique_ptr(const AZ::Data::Asset&, const AZ::Transform&)); MOCK_METHOD3(SetupNetEntity, void(AZ::Entity*, Multiplayer::PrefabEntityId, Multiplayer::NetEntityRole)); - MOCK_CONST_METHOD1(GetEntity, Multiplayer::ConstNetworkEntityHandle(Multiplayer::NetEntityId)); MOCK_CONST_METHOD0(GetEntityCount, uint32_t()); MOCK_METHOD2(AddEntityToEntityMap, Multiplayer::NetworkEntityHandle(Multiplayer::NetEntityId, AZ::Entity*)); MOCK_METHOD1(MarkForRemoval, void(const Multiplayer::ConstNetworkEntityHandle&)); @@ -73,6 +84,7 @@ namespace UnitTest MOCK_METHOD2(NotifyControllersActivated, void(const Multiplayer::ConstNetworkEntityHandle&, Multiplayer::EntityIsMigrating)); MOCK_METHOD2(NotifyControllersDeactivated, void(const Multiplayer::ConstNetworkEntityHandle&, Multiplayer::EntityIsMigrating)); MOCK_METHOD1(HandleLocalRpcMessage, void(Multiplayer::NetworkEntityRpcMessage&)); + MOCK_CONST_METHOD0(DebugDraw, void()); }; class MockConnectionListener : public AzNetworking::IConnectionListener @@ -88,6 +100,7 @@ namespace UnitTest class MockTime : public AZ::ITime { public: + MOCK_CONST_METHOD0(GetElapsedTimeUs, AZ::TimeUs()); MOCK_CONST_METHOD0(GetElapsedTimeMs, AZ::TimeMs()); }; diff --git a/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp b/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp index 385a4b83ae..b8e892e71a 100644 --- a/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp +++ b/Gems/Multiplayer/Code/Tests/ServerHierarchyTests.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include namespace Multiplayer { From 10c7ef714725a9db2427658d03ae2f98e333db87 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 1 Oct 2021 10:36:08 +0100 Subject: [PATCH 051/226] Change editor viewport mdoe tracker id from viewport to entity context. Signed-off-by: John --- ...ViewportEditorModeTrackerNotificationBus.h | 8 +- .../ComponentMode/ComponentModeCollection.cpp | 4 +- .../FocusMode/FocusModeSystemComponent.cpp | 6 +- .../EditorDefaultSelection.cpp | 4 +- .../EditorPickEntitySelection.cpp | 4 +- .../ViewportEditorModeTracker.cpp | 10 +- .../Viewport/ViewportEditorModeTests.cpp | 112 +++++++++--------- 7 files changed, 77 insertions(+), 71 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h index 42a1cb0113..1f05e869f1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include namespace AzToolsFramework @@ -23,11 +23,11 @@ namespace AzToolsFramework Pick }; - //! Viewport identifier and other relevant viewport data. + //! Viewport editor mode tracker identifier and other relevant data. struct ViewportEditorModeInfo { - using IdType = AzFramework::ViewportId; - IdType m_id = ViewportUi::DefaultViewportId; //!< The unique identifier for a given viewport. + using IdType = AzFramework::EntityContextId; + IdType m_id = AzFramework::EntityContextId::CreateNull(); //!< The unique identifier for a given viewport editor mode tracker. }; //! Interface for the editor modes of a given viewport. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index 4d849466ee..df93e924b8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -218,7 +218,7 @@ namespace AzToolsFramework // this call to activate the component mode editor state should eventually replace the bus call in // ComponentModeCollection::BeginComponentMode() to EditorComponentModeNotifications::EnteredComponentMode // such that all of the notifications for activating/deactivating the different editor modes are in a central location - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Component); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // enable actions for the first/primary ComponentMode // note: if multiple ComponentModes are activated at the same time, actions @@ -296,7 +296,7 @@ namespace AzToolsFramework // this call to deactivate the component mode editor state should eventually replace the bus call in // ComponentModeCollection::EndComponentMode() to EditorComponentModeNotifications::LeftComponentMode // such that all of the notifications for activating/deactivating the different editor modes are in a central location - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Component); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // clear stored modes and builders for this ComponentMode // TLDR: avoid 'use after free' error diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp index 3fafb4db81..2549792375 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include namespace AzToolsFramework { @@ -72,11 +72,11 @@ namespace AzToolsFramework { if (!m_focusRoot.IsValid() && entityId.IsValid()) { - tracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Focus); + tracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); } else if (m_focusRoot.IsValid() && !entityId.IsValid()) { - tracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Focus); + tracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Focus); } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp index 30958cfbc1..1ad0ee8ff3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp @@ -32,14 +32,14 @@ namespace AzToolsFramework m_manipulatorManager = AZStd::make_shared(AzToolsFramework::g_mainManipulatorManagerId); m_transformComponentSelection = AZStd::make_unique(entityDataCache); - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Default); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } EditorDefaultSelection::~EditorDefaultSelection() { ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusDisconnect(); ActionOverrideRequestBus::Handler::BusDisconnect(); - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Default); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); } void EditorDefaultSelection::SetOverridePhantomWidget(QWidget* phantomOverrideWidget) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp index 18eda140a0..6e7777b31c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorPickEntitySelection.cpp @@ -21,7 +21,7 @@ namespace AzToolsFramework : m_editorHelpers(AZStd::make_unique(entityDataCache)) , m_viewportEditorModeTracker(viewportEditorModeTracker) { - m_viewportEditorModeTracker->ActivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Pick); + m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } EditorPickEntitySelection::~EditorPickEntitySelection() @@ -31,7 +31,7 @@ namespace AzToolsFramework ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetEntityHighlighted, m_hoveredEntityId, false); } - m_viewportEditorModeTracker->DeactivateMode({ /* DefaultViewportId */ }, ViewportEditorMode::Pick); + m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Pick); } // note: entityIdUnderCursor is the authoritative entityId we get each frame by querying diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp index 105712c789..05b645f52c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp @@ -52,7 +52,8 @@ namespace AzToolsFramework if (editorModes.IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(mode), + viewportEditorModeInfo.m_id.ToString().c_str())); } if (const auto result = editorModes.ActivateMode(mode); @@ -78,7 +79,8 @@ namespace AzToolsFramework if (!editorModes->IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(mode), viewportEditorModeInfo.m_id)); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(mode), + viewportEditorModeInfo.m_id.ToString().c_str())); } } else @@ -103,8 +105,8 @@ namespace AzToolsFramework else { return AZ::Failure(AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(mode), - viewportEditorModeInfo.m_id)); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(mode), + viewportEditorModeInfo.m_id.ToString().c_str())); } } diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp index 866d88b7ba..393a1e9055 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -18,7 +19,7 @@ namespace UnitTest using ViewportEditorModes = AzToolsFramework::ViewportEditorModes; using ViewportEditorModeTracker = AzToolsFramework::ViewportEditorModeTracker; using ViewportEditorModeInfo = AzToolsFramework::ViewportEditorModeInfo; - using ViewportId = ViewportEditorModeInfo::IdType; + using TrackerId = ViewportEditorModeInfo::IdType; using ViewportEditorModesInterface = AzToolsFramework::ViewportEditorModesInterface; using ViewportEditorModeTrackerInterface = AzToolsFramework::ViewportEditorModeTrackerInterface; @@ -113,10 +114,10 @@ namespace UnitTest using EditModeTracker = AZStd::unordered_map; - ViewportEditorModeNotificationsBusHandler(ViewportId viewportId) - : m_viewportSubscription(viewportId) + ViewportEditorModeNotificationsBusHandler(TrackerId id) + : m_trackerSubscription(id) { - AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_viewportSubscription); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(m_trackerSubscription); } ~ViewportEditorModeNotificationsBusHandler() @@ -124,11 +125,6 @@ namespace UnitTest AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); } - ViewportId GetViewportSubscription() const - { - return m_viewportSubscription; - } - const EditModeTracker& GetEditorModes() const { return m_editorModes; @@ -145,7 +141,7 @@ namespace UnitTest } private: - ViewportId m_viewportSubscription; + TrackerId m_trackerSubscription; EditModeTracker m_editorModes; }; @@ -158,10 +154,13 @@ namespace UnitTest void SetUpEditorFixtureImpl() override { + m_handlerIds.resize(ViewportEditorModes::NumEditorModes); for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - m_editorModeHandlers[mode] = AZStd::make_unique(mode); + m_handlerIds[mode] = TrackerId::CreateRandom(); + m_editorModeHandlers[mode] = AZStd::make_unique(m_handlerIds[mode]); } + } void TearDownEditorFixtureImpl() override @@ -173,6 +172,7 @@ namespace UnitTest } AZStd::array, ViewportEditorModes::NumEditorModes> m_editorModeHandlers; + AZStd::vector m_handlerIds; }; // Fixture for testing the integration of viewport editor mode state tracker @@ -184,7 +184,8 @@ namespace UnitTest { m_viewportEditorModeTracker = AZ::Interface::Get(); ASSERT_NE(m_viewportEditorModeTracker, nullptr); - m_viewportEditorModes = m_viewportEditorModeTracker->GetViewportEditorModes({}); + m_viewportEditorModes = m_viewportEditorModeTracker->GetViewportEditorModes({AzToolsFramework::GetEntityContextId()}); + ASSERT_NE(m_viewportEditorModes, nullptr); } ViewportEditorModeTrackerInterface* m_viewportEditorModeTracker = nullptr; @@ -316,17 +317,17 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatId) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is activated for that viewport const auto editorMode = ViewportEditorMode::Default; - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); // Expect that viewport to now be tracked - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); // Expect the mode for that viewport to be active @@ -336,23 +337,24 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModeForNonExistentIdCreatesViewportEditorModesForThatIdButReturnsError) { // Given a viewport not currently being tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); // When a mode is deactivated for that viewport const auto editorMode = ViewportEditorMode::Default; const auto expectedErrorMsg = AZStd::string::format( - "Call to DeactivateMode for mode '%u' on id '%i' without precursor call to ActivateMode", static_cast(editorMode), viewportid); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(editorMode), + id.ToString().c_str()); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error due to no precursor activation of that mode EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect that viewport to now be tracked - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); // Expect the mode for that viewport to be inactive EXPECT_NE(viewportEditorModeState, nullptr); @@ -361,45 +363,46 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, GettingNonExistentViewportEditorModesForIdReturnsNull) { - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); } TEST_F(ViewportEditorModeTrackerTestFixture, ActivatingViewportEditorModesForExistingIdInThatStateReturnsError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect no error as there is no duplicate activation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is activated again for the viewport - const auto result = m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); // Expect an error for the duplicate activation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to ActivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be active for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_TRUE(viewportEditorModeState->IsModeActive(editorMode)); } @@ -408,38 +411,39 @@ namespace UnitTest TEST_F(ViewportEditorModeTrackerTestFixture, DeactivatingViewportEditorModesForExistingIdNotInThatStateReturnssError) { // Given a viewport not currently tracked - const ViewportId viewportid = 0; - EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); - EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }), nullptr); + const TrackerId id = 0; + EXPECT_FALSE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); + EXPECT_EQ(m_viewportEditorModeTracker.GetViewportEditorModes({ id }), nullptr); const auto editorMode = ViewportEditorMode::Default; { // When the mode is activated and then deactivated for the viewport - m_viewportEditorModeTracker.ActivateMode({ viewportid }, editorMode); - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect no error as there is no duplicate deactivation EXPECT_TRUE(result.IsSuccess()); // Expect the mode to be inctive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } { // When the mode is deactivated again for the viewport - const auto result = m_viewportEditorModeTracker.DeactivateMode({ viewportid }, editorMode); + const auto result = m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); // Expect an error for the duplicate deactivation const auto expectedErrorMsg = AZStd::string::format( - "Duplicate call to DeactivateMode for mode '%u' on id '%i'", static_cast(editorMode), viewportid); + "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(editorMode), + id.ToString().c_str()); EXPECT_FALSE(result.IsSuccess()); EXPECT_EQ(result.GetError(), expectedErrorMsg); // Expect the mode to still be inactive for the viewport - const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ viewportid }); - EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ viewportid })); + const auto* viewportEditorModeState = m_viewportEditorModeTracker.GetViewportEditorModes({ id }); + EXPECT_TRUE(m_viewportEditorModeTracker.IsViewportModeTracked({ id })); EXPECT_NE(viewportEditorModeState, nullptr); EXPECT_FALSE(viewportEditorModeState->IsModeActive(editorMode)); } @@ -459,9 +463,9 @@ namespace UnitTest // When each editor mode is activated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) @@ -491,10 +495,10 @@ namespace UnitTest // When each editor mode is activated deactivated by the state tracker for a specific viewport for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { - const ViewportId viewportId = mode; + const TrackerId id = m_handlerIds[mode]; const ViewportEditorMode editorMode = static_cast(mode); - m_viewportEditorModeTracker.ActivateMode({ viewportId }, editorMode); - m_viewportEditorModeTracker.DeactivateMode({ viewportId }, editorMode); + m_viewportEditorModeTracker.ActivateMode({ id }, editorMode); + m_viewportEditorModeTracker.DeactivateMode({ id }, editorMode); } for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) From 0a6ddfab5efd24ab232105927f04200a393debeb Mon Sep 17 00:00:00 2001 From: puvvadar Date: Fri, 1 Oct 2021 11:02:12 -0700 Subject: [PATCH 052/226] Revert optimization change in favor of another PR Signed-off-by: puvvadar --- .../Source/MultiplayerSystemComponent.cpp | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index b1d80a87b5..71e8b04d85 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -903,9 +903,8 @@ namespace Multiplayer // Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system AZStd::vector gatheredEntities; - INetworkEntityManager* netEntityManager = GetNetworkEntityManager(); AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum, - [netEntityManager, &gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) + [&gatheredEntities](const AzFramework::IVisibilityScene::NodeData& nodeData) { gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) @@ -913,14 +912,10 @@ namespace Multiplayer if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) { AZ::Entity* entity = static_cast(visEntry->m_userData); - NetEntityId netEntitydId = netEntityManager->GetNetEntityIdById(entity->GetId()); - if (netEntitydId != InvalidNetEntityId) + NetBindComponent* netBindComponent = entity->FindComponent(); + if (netBindComponent != nullptr) { - NetBindComponent* netBindComponent = netEntityManager->GetEntity(netEntitydId).GetNetBindComponent(); - if (netBindComponent != nullptr) - { - gatheredEntities.push_back(netBindComponent); - } + gatheredEntities.push_back(netBindComponent); } } } @@ -937,14 +932,10 @@ namespace Multiplayer for (auto& iter : *(m_networkEntityManager.GetNetworkEntityTracker())) { AZ::Entity* entity = iter.second; - NetEntityId netEntitydId = GetNetworkEntityManager()->GetNetEntityIdById(entity->GetId()); - if (netEntitydId != InvalidNetEntityId) + NetBindComponent* netBindComponent = entity->FindComponent(); + if (netBindComponent != nullptr) { - NetBindComponent* netBindComponent = GetNetworkEntityManager()->GetEntity(netEntitydId).GetNetBindComponent(); - if (netBindComponent != nullptr) - { - netBindComponent->NotifyPreRender(deltaTime); - } + netBindComponent->NotifyPreRender(deltaTime); } } } From a18655e8f7305f05844170adfce2ee0a574cf832 Mon Sep 17 00:00:00 2001 From: puvvadar Date: Fri, 1 Oct 2021 11:43:22 -0700 Subject: [PATCH 053/226] Update jinja change to use booleanTrue filter Signed-off-by: puvvadar --- .../AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja index a621af92cb..145f15bb19 100644 --- a/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja +++ b/Code/Framework/AzNetworking/AzNetworking/AutoGen/AutoPacketDispatcher_Inline.jinja @@ -8,7 +8,7 @@ namespace {{ xml.attrib['Name'] }} { {% set packet_ns = namespace(handshake=false) %} {% for Packet in xml.iter('Packet') %} -{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket'] == 'true') %} +{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket']|booleanTrue == true) %} {% set packet_ns.handshake = True %} {% endif %} {% endfor %} From b3d7de1e78c447d44f3cb3702a1b084e6c319aaf Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Fri, 1 Oct 2021 13:03:52 -0700 Subject: [PATCH 054/226] Improvements. You can now call SetDecalMaterial() with any permutation and it works as expected Signed-off-by: mrieggeramzn --- .../ShaderLib/Atom/Features/PBR/Decals.azsli | 2 + .../DecalTextureArrayFeatureProcessor.cpp | 45 ++++++++++++++----- .../DecalTextureArrayFeatureProcessor.h | 1 + .../Decals/DecalComponentController.cpp | 2 +- .../Source/Decals/EditorDecalComponent.cpp | 2 +- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli index 5e7088617b..f9ead72ce4 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Decals.azsli @@ -70,6 +70,8 @@ void ApplyDecal(uint currDecalIndex, inout Surface surface) float4 baseMap = 0; float2 normalMap = 0; + // Each texture array handles a size permutation. + // e.g. it could be that tex array 0 handles 256x256 and tex array 1 handles 512x64, etc. switch(textureArrayIndex) { case 0: diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index e5bf0bd9fa..0323282f5c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -301,23 +301,44 @@ namespace AZ return; } - if (material.IsValid()) + if (GetMaterialUsedByDecal(handle) == material) + return; + + const auto decalIndex = handle.GetIndex(); + + const bool isValidMaterialBeingUsedCurrently = m_decalData.GetData(decalIndex).m_textureArrayIndex != DecalData::UnusedIndex; + if (isValidMaterialBeingUsedCurrently) { - AZ_Assert(m_decalData.GetData(handle.GetIndex()).m_textureArrayIndex == DecalData::UnusedIndex, "Setting Material on a decal more than once is not currently supported."); + RemoveMaterialFromDecal(decalIndex); + } - const auto iter = m_materialToTextureArrayLookupTable.find(material); - if (iter != m_materialToTextureArrayLookupTable.end()) - { - // This material is already loaded and registered with this feature processor - iter->second.m_useCount++; - SetDecalTextureLocation(handle, iter->second.m_location); - return; - } + if (!material.IsValid()) + return; - // Material not loaded so queue it up for loading. - QueueMaterialLoadForDecal(material, handle); + const auto iter = m_materialToTextureArrayLookupTable.find(material); + if (iter != m_materialToTextureArrayLookupTable.end()) + { + // This material is already loaded and registered with this feature processor + iter->second.m_useCount++; + SetDecalTextureLocation(handle, iter->second.m_location); return; } + + // Material not loaded so queue it up for loading. + QueueMaterialLoadForDecal(material, handle); + } + + void DecalTextureArrayFeatureProcessor::RemoveMaterialFromDecal(const uint16_t decalIndex) + { + DecalLocation decalLocation; + decalLocation.textureArrayIndex = m_decalData.GetData(decalIndex).m_textureArrayIndex; + decalLocation.textureIndex = m_decalData.GetData(decalIndex).m_textureIndex; + RemoveDecalFromTextureArrays(decalLocation); + + m_decalData.GetData(decalIndex).m_textureArrayIndex = DecalData::UnusedIndex; + m_decalData.GetData(decalIndex).m_textureIndex = DecalData::UnusedIndex; + + m_deviceBufferNeedsUpdate = true; } void DecalTextureArrayFeatureProcessor::CacheShaderIndices() diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h index 13a6682629..fd535bbe64 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.h @@ -114,6 +114,7 @@ namespace AZ AZStd::optional AddMaterialToTextureArrays(const AZ::RPI::MaterialAsset* materialAsset); int FindTextureArrayWithSize(const RHI::Size& size) const; + void RemoveMaterialFromDecal(const uint16_t decalIndex); void SetDecalTextureLocation(const DecalHandle& handle, const DecalLocation location); void QueueMaterialLoadForDecal(const AZ::Data::AssetId material, const DecalHandle handle); bool RemoveDecalFromTextureArrays(const DecalLocation decalLocation); diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp index 5d16164d92..dd8266c1ca 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/DecalComponentController.cpp @@ -230,7 +230,7 @@ namespace AZ { DecalNotificationBus::Event(m_entityId, &DecalNotifications::OnMaterialChanged, m_configuration.m_materialAsset); - if (m_featureProcessor && m_configuration.m_materialAsset.GetId().IsValid()) + if (m_featureProcessor) { m_featureProcessor->SetDecalMaterial(m_handle, m_configuration.m_materialAsset.GetId()); } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp index c5d61dd54a..f8865e8d34 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Decals/EditorDecalComponent.cpp @@ -192,7 +192,7 @@ namespace AZ u32 EditorDecalComponent::OnConfigurationChanged() { - BaseClass::OnConfigurationChanged(); + m_controller.ConfigurationChanged(); return Edit::PropertyRefreshLevels::AttributesAndValues; } From 76de21940ddd02eb08bee151b3b8b852e5b69abc Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Fri, 1 Oct 2021 13:29:52 -0700 Subject: [PATCH 055/226] Fixup merge Signed-off-by: mrieggeramzn --- .../Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index 46b00ef47f..0323282f5c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -309,8 +309,8 @@ namespace AZ const bool isValidMaterialBeingUsedCurrently = m_decalData.GetData(decalIndex).m_textureArrayIndex != DecalData::UnusedIndex; if (isValidMaterialBeingUsedCurrently) { - AZ_Assert( - AZ_Assert(m_decalData.GetData(handle.GetIndex()).m_textureArrayIndex == DecalData::UnusedIndex, "Setting Material on a decal more than once is not currently supported."); + RemoveMaterialFromDecal(decalIndex); + } if (!material.IsValid()) return; From f3e6adce7fcff851e3d2a53d5590e4104f4daa16 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 1 Oct 2021 13:52:52 -0700 Subject: [PATCH 056/226] LYN-6882 release builds are executing code in asserts (#4305) * adding Windows/release to PR-validation builds Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * changing trace back to expand to nothing for release Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * typo Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * more fixes Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * fixing some more unused variable cases Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * renaming file in ScriptCanvas that causes a msbuild warning Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> * reverting a previous change Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/Debug/Trace.h | 22 +++++++++---------- .../AssetBrowser/Views/EntryDelegate.cpp | 2 +- .../Prefab/PrefabSystemComponent.cpp | 5 +++++ .../UI/Prefab/PrefabIntegrationManager.cpp | 2 +- Code/LauncherUnified/Launcher.cpp | 2 ++ .../native/utilities/assetUtils.cpp | 3 +++ .../Factory/TestImpactTestRunSuiteFactory.cpp | 8 +++++-- .../Code/Tests/ImageProcessing_Test.cpp | 3 ++- .../Code/Source/Editor/ShaderAssetBuilder.cpp | 6 ++--- .../RHI/Code/Source/RHI/FrameScheduler.cpp | 2 +- .../Model/ModelAssetBuilderComponent.cpp | 2 ++ .../RPI.Reflect/Material/MaterialFunctor.cpp | 4 +++- Gems/Atom/Utils/Code/Source/PngFile.cpp | 4 ++-- .../BenchmarkAssetBuilderWorker.cpp | 2 ++ .../ScriptEventsNodePaletteTreeItemTypes.cpp | 2 ++ .../ScriptEvents/ScriptEventDefinition.h | 2 +- ...riptEventMethod.h => ScriptEventsMethod.h} | 0 ...EventMethod.cpp => ScriptEventsMethod.cpp} | 2 +- .../Code/Tests/ScriptEventsTestFixture.h | 2 +- .../Code/scriptevents_common_files.cmake | 4 ++-- .../Rendering/Atom/TangentSpaceHelper.cpp | 2 ++ cmake/Projects.cmake | 6 ++++- .../build/Platform/Windows/build_config.json | 1 + 23 files changed, 59 insertions(+), 29 deletions(-) rename Gems/ScriptEvents/Code/Include/ScriptEvents/{ScriptEventMethod.h => ScriptEventsMethod.h} (100%) rename Gems/ScriptEvents/Code/Source/{ScriptEventMethod.cpp => ScriptEventsMethod.cpp} (99%) diff --git a/Code/Framework/AzCore/AzCore/Debug/Trace.h b/Code/Framework/AzCore/AzCore/Debug/Trace.h index a1334d334e..507ba48e53 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Trace.h +++ b/Code/Framework/AzCore/AzCore/Debug/Trace.h @@ -262,17 +262,17 @@ namespace AZ #else // !AZ_ENABLE_TRACING - #define AZ_Assert(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_Error(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_ErrorOnce(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_Warning(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_WarningOnce(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_TracePrintf(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_TracePrintfOnce(...) AZ_UNUSED(__VA_ARGS__); - - #define AZ_Verify(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_VerifyError(...) AZ_UNUSED(__VA_ARGS__); - #define AZ_VerifyWarning(...) AZ_UNUSED(__VA_ARGS__); + #define AZ_Assert(...) + #define AZ_Error(...) + #define AZ_ErrorOnce(...) + #define AZ_Warning(...) + #define AZ_WarningOnce(...) + #define AZ_TracePrintf(...) + #define AZ_TracePrintfOnce(...) + + #define AZ_Verify(expression, ...) AZ_UNUSED(expression) + #define AZ_VerifyError(window, expression, ...) AZ_UNUSED(expression) + #define AZ_VerifyWarning(window, expression, ...) AZ_UNUSED(expression) #endif // AZ_ENABLE_TRACING diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp index 755c59b55b..b463381638 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp @@ -290,7 +290,7 @@ namespace AzToolsFramework absoluteIconPath = AZ::IO::FixedMaxPath(AZ::Utils::GetEnginePath()) / TreeIconPathOneChild; break; } - bool pixmapLoadedSuccess = pixmap.load(absoluteIconPath.c_str()); + [[maybe_unused]] bool pixmapLoadedSuccess = pixmap.load(absoluteIconPath.c_str()); AZ_Assert(pixmapLoadedSuccess, "Error loading Branch Icons in SearchEntryDelegate"); m_branchIcons[static_cast(branchType)] = pixmap; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 0ecde973c2..4f8f575a7b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -579,10 +579,13 @@ namespace AzToolsFramework Template& targetTemplate = targetTemplateReference->get(); +#if defined(AZ_ENABLE_TRACING) Template& sourceTemplate = sourceTemplateReference->get(); AZStd::string_view instanceName(instanceIterator->name.GetString(), instanceIterator->name.GetStringLength()); + const AZStd::string& targetTemplateFilePath = targetTemplate.GetFilePath().Native(); const AZStd::string& sourceTemplateFilePath = sourceTemplate.GetFilePath().Native(); +#endif LinkId newLinkId = CreateUniqueLinkId(); Link newLink(newLinkId); @@ -911,8 +914,10 @@ namespace AzToolsFramework return false; } +#if defined(AZ_ENABLE_TRACING) Template& sourceTemplate = sourceTemplateReference->get(); Template& targetTemplate = targetTemplateReference->get(); +#endif AZStd::string_view instanceName(instanceIterator->name.GetString(), instanceIterator->name.GetStringLength()); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 9b7f2fff10..34152f8287 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -1160,7 +1160,7 @@ namespace AzToolsFramework AZStd::string unsavedPrefabFileName = unsavedPrefabFileLabel->property("FilePath").toString().toUtf8().data(); AzToolsFramework::Prefab::TemplateId unsavedPrefabTemplateId = s_prefabSystemComponentInterface->GetTemplateIdFromFilePath(unsavedPrefabFileName.data()); - bool isTemplateSavedSuccessfully = s_prefabLoaderInterface->SaveTemplate(unsavedPrefabTemplateId); + [[maybe_unused]] bool isTemplateSavedSuccessfully = s_prefabLoaderInterface->SaveTemplate(unsavedPrefabTemplateId); AZ_Error("Prefab", isTemplateSavedSuccessfully, "Prefab '%s' could not be saved successfully.", unsavedPrefabFileName.c_str()); } } diff --git a/Code/LauncherUnified/Launcher.cpp b/Code/LauncherUnified/Launcher.cpp index 27aab074ef..0ef9cdfc3b 100644 --- a/Code/LauncherUnified/Launcher.cpp +++ b/Code/LauncherUnified/Launcher.cpp @@ -627,8 +627,10 @@ namespace O3DELauncher AZ_TracePrintf("Launcher", "Application is configured for VFS"); AZ_TracePrintf("Launcher", "Log and cache files will be written to the Cache directory on your host PC"); +#if defined(AZ_ENABLE_TRACING) constexpr const char* message = "If your game does not run, check any of the following:\n" "\t- Verify the remote_ip address is correct in bootstrap.cfg"; +#endif if (mainInfo.m_additionalVfsResolution) { AZ_TracePrintf("Launcher", "%s\n%s", message, mainInfo.m_additionalVfsResolution) diff --git a/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp b/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp index c0e907f2d5..cacd6c4cc9 100644 --- a/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/assetUtils.cpp @@ -164,7 +164,10 @@ namespace AssetUtilsInternal AZ::SettingsRegistryMergeUtils::DumperSettings apDumperSettings; apDumperSettings.m_prettifyOutput = true; + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr in the + // capture. Newer versions issue unused warning apDumperSettings.m_includeFilter = [&AssetProcessorUserSettingsRootKey](AZStd::string_view path) + AZ_POP_DISABLE_WARNING { // The AssetUtils only updates the following keys in the registry // Dump them all out to the setreg file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp index b7a44d43ea..f39cfaaf10 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp +++ b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestRunSuiteFactory.cpp @@ -64,9 +64,11 @@ namespace TestImpact return !name.starts_with("DISABLED_") && name.find("/DISABLED_") == AZStd::string::npos; }; + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr + // in the capture. Newer versions issue unused warning const auto getDuration = [Keys](const AZ::rapidxml::xml_node<>* node) + AZ_POP_DISABLE_WARNING { - AZ_UNUSED(Keys); const AZStd::string duration = node->first_attribute(Keys[DurationKey])->value(); return AZStd::chrono::milliseconds(static_cast(AZStd::stof(duration) * 1000.f)); }; @@ -79,9 +81,11 @@ namespace TestImpact for (auto testcase_node = testsuite_node->first_node(Keys[TestCaseKey]); testcase_node; testcase_node = testcase_node->next_sibling()) { + AZ_PUSH_DISABLE_WARNING(5233, "-Wunknown-warning-option") // Older versions of MSVC toolchain require to pass constexpr in the capture. + // Newer versions issue unused warning const auto getStatus = [Keys](const AZ::rapidxml::xml_node<>* node) + AZ_POP_DISABLE_WARNING { - AZ_UNUSED(Keys); const AZStd::string status = node->first_attribute(Keys[StatusKey])->value(); if (status == Keys[RunKey]) { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp index c4240306c4..c72e1dc309 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp @@ -860,8 +860,9 @@ namespace UnitTest { continue; } - +#if defined(AZ_ENABLE_TRACING) auto formatInfo = CPixelFormats::GetInstance().GetPixelFormatInfo(pixelFormat); +#endif ColorSpace sourceColorSpace = srcImage->HasImageFlags(EIF_SRGBRead) ? ColorSpace::sRGB : ColorSpace::linear; ICompressorPtr compressor = ICompressor::FindCompressor(pixelFormat, sourceColorSpace, true); diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp index 2babba1ecc..3bc63b89a0 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderAssetBuilder.cpp @@ -228,9 +228,9 @@ namespace AZ response.m_createJobOutputs.push_back(jobDescriptor); } // for all request.m_enabledPlatforms - const AZStd::sys_time_t createJobsEndStamp = AZStd::GetTimeNowMicroSecond(); - const u64 createJobDurationMicros = createJobsEndStamp - shaderAssetBuildTimestamp; - AZ_TracePrintf(ShaderAssetBuilderName, "CreateJobs for %s took %llu microseconds", fullPath.c_str(), createJobDurationMicros ); + AZ_TracePrintf( + ShaderAssetBuilderName, "CreateJobs for %s took %llu microseconds", fullPath.c_str(), + AZStd::GetTimeNowMicroSecond() - shaderAssetBuildTimestamp); response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp index 3363675d0e..0d3ac8216b 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp @@ -370,7 +370,7 @@ namespace AZ //It is possible for certain back ends to run out of SRG memory (due to fragmentation) in which case //we try to compact and re-compile SRGs. - RHI::ResultCode resultCode = m_device->CompactSRGMemory(); + [[maybe_unused]] RHI::ResultCode resultCode = m_device->CompactSRGMemory(); AZ_Assert(resultCode == RHI::ResultCode::Success, "SRG compaction failed and this can lead to a gpu crash."); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp index 1da16b44b6..9fc99e3ea4 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/ModelAssetBuilderComponent.cpp @@ -1078,7 +1078,9 @@ namespace AZ template void ModelAssetBuilderComponent::ValidateStreamSize([[maybe_unused]] size_t expectedVertexCount, [[maybe_unused]] const AZStd::vector& bufferData, [[maybe_unused]] AZ::RHI::Format format, [[maybe_unused]] const char* streamName) const { +#if defined(AZ_ENABLE_TRACING) size_t actualVertexCount = (bufferData.size() * sizeof(T)) / RHI::GetFormatSize(format); +#endif AZ_Error(s_builderName, expectedVertexCount == actualVertexCount, "VertexStream '%s' does not match the expected vertex count. This typically means multiple sub-meshes have mis-matched vertex stream layouts (such as one having more uv sets than the other) but are assigned the same material in the dcc tool so they were merged.", streamName); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp index 0f70d0af35..52b6349ca0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialFunctor.cpp @@ -417,14 +417,16 @@ namespace AZ template const Color& MaterialFunctor::EditorContext::GetMaterialPropertyValue (const MaterialPropertyIndex& index) const; template const Data::Instance& MaterialFunctor::EditorContext::GetMaterialPropertyValue> (const MaterialPropertyIndex& index) const; - void CheckPropertyAccess(const MaterialPropertyIndex& index, const MaterialPropertyFlags& materialPropertyDependencies, [[maybe_unused]] const MaterialPropertiesLayout& materialPropertiesLayout) + void CheckPropertyAccess([[maybe_unused]] const MaterialPropertyIndex& index, [[maybe_unused]] const MaterialPropertyFlags& materialPropertyDependencies, [[maybe_unused]] const MaterialPropertiesLayout& materialPropertiesLayout) { +#if defined(AZ_ENABLE_TRACING) if (!materialPropertyDependencies.test(index.GetIndex())) { const MaterialPropertyDescriptor* propertyDescriptor = materialPropertiesLayout.GetPropertyDescriptor(index); AZ_Error("MaterialFunctor", false, "Material functor accessing an unregistered material property '%s'.", propertyDescriptor ? propertyDescriptor->GetName().GetCStr() : ""); } +#endif } const MaterialPropertyValue& MaterialFunctor::RuntimeContext::GetMaterialPropertyValue(const MaterialPropertyIndex& index) const diff --git a/Gems/Atom/Utils/Code/Source/PngFile.cpp b/Gems/Atom/Utils/Code/Source/PngFile.cpp index 09a5d950e5..28f5374d88 100644 --- a/Gems/Atom/Utils/Code/Source/PngFile.cpp +++ b/Gems/Atom/Utils/Code/Source/PngFile.cpp @@ -21,7 +21,7 @@ namespace AZ (*errorHandler)(error_msg); } - void PngImage_user_warning_fn(png_structp /*png_ptr*/, png_const_charp warning_msg) + void PngImage_user_warning_fn(png_structp /*png_ptr*/, [[maybe_unused]] png_const_charp warning_msg) { AZ_Warning("PngFile", false, "%s", warning_msg); } @@ -301,7 +301,7 @@ AZ_POP_DISABLE_WARNING return true; } - void PngFile::DefaultErrorHandler(const char* message) + void PngFile::DefaultErrorHandler([[maybe_unused]] const char* message) { AZ_Error("PngFile", false, "%s", message); } diff --git a/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp index 22be22265a..da7181ae04 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/BenchmarkAssetBuilder/BenchmarkAssetBuilderWorker.cpp @@ -253,10 +253,12 @@ namespace BenchmarkAssetBuilder // and 2 bytes of storage for text-based formats. // This is just an approximate total size because there's a bit of additional overhead // for asset headers and the other fields in the generated asset. +#if defined(AZ_ENABLE_TRACING) uint64_t approximateTotalStorageBytes = (settingsPtr->m_assetStorageType == AZ::DataStream::StreamType::ST_BINARY) ? UINT64_C(1) * totalGeneratedBytes : UINT64_C(2) * totalGeneratedBytes; +#endif AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Benchmark asset generation will generate %" PRIu64 " assets " diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp index 704f67e034..da0e9c6045 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/ScriptEventsNodePaletteTreeItemTypes.cpp @@ -154,7 +154,9 @@ namespace ScriptCanvasEditor const ScriptEvents::ScriptEvent& definition = data->m_definition; +#if defined(AZ_ENABLE_TRACING) bool recategorize = previousDefinition ? definition.GetCategory().compare(previousDefinition->GetCategory()) != 0 : false; +#endif AZ_Warning("ScriptCanvas", !recategorize, "Unable to recategorize ScriptEvents events while open. Please close and re-open the Script Canvas Editor to see the new categorization"); if (definition.GetName().empty()) diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h index bc8112802b..a56e9b422b 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include namespace ScriptEvents diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventMethod.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsMethod.h similarity index 100% rename from Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventMethod.h rename to Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsMethod.h diff --git a/Gems/ScriptEvents/Code/Source/ScriptEventMethod.cpp b/Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp similarity index 99% rename from Gems/ScriptEvents/Code/Source/ScriptEventMethod.cpp rename to Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp index 5b7bb590af..579c51a782 100644 --- a/Gems/ScriptEvents/Code/Source/ScriptEventMethod.cpp +++ b/Gems/ScriptEvents/Code/Source/ScriptEventsMethod.cpp @@ -6,7 +6,7 @@ * */ -#include "ScriptEvents/ScriptEventMethod.h" +#include "ScriptEvents/ScriptEventsMethod.h" #include #include diff --git a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h index 78c7308dde..53d4fd58b9 100644 --- a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h +++ b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include "ScriptEventTestUtilities.h" diff --git a/Gems/ScriptEvents/Code/scriptevents_common_files.cmake b/Gems/ScriptEvents/Code/scriptevents_common_files.cmake index 5938050f5d..a7ecd9e049 100644 --- a/Gems/ScriptEvents/Code/scriptevents_common_files.cmake +++ b/Gems/ScriptEvents/Code/scriptevents_common_files.cmake @@ -10,7 +10,7 @@ set(FILES Source/ScriptEventsSystemComponent.h Source/ScriptEventsSystemComponent.cpp Source/ScriptEventParameter.cpp - Source/ScriptEventMethod.cpp + Source/ScriptEventsMethod.cpp Source/ScriptEventsAssetRef.cpp Include/ScriptEvents/ScriptEventsGem.h Include/ScriptEvents/ScriptEventsAsset.h @@ -23,7 +23,7 @@ set(FILES Include/ScriptEvents/ScriptEventDefinition.h Include/ScriptEvents/ScriptEventDefinition.cpp Include/ScriptEvents/ScriptEvent.h - Include/ScriptEvents/ScriptEventMethod.h + Include/ScriptEvents/ScriptEventsMethod.h Include/ScriptEvents/ScriptEvent.cpp Include/ScriptEvents/ScriptEventParameter.h Include/ScriptEvents/ScriptEventSystem.h diff --git a/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp b/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp index a43b48d3b9..913778cc44 100644 --- a/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp +++ b/Gems/WhiteBox/Code/Source/Rendering/Atom/TangentSpaceHelper.cpp @@ -73,7 +73,9 @@ namespace WhiteBox for (AZ::u32 i = 0; i < triangleCount; ++i) { +#if defined(AZ_ENABLE_TRACING) const auto& trianglePositions = trianglesPositions[i]; +#endif const auto& triangleUVs = trianglesUVs[i]; const auto& triangleEdges = trianglesEdges[i]; diff --git a/cmake/Projects.cmake b/cmake/Projects.cmake index b21704ee85..6109229e72 100644 --- a/cmake/Projects.cmake +++ b/cmake/Projects.cmake @@ -10,7 +10,11 @@ include_guard() -set(LY_PROJECTS "" CACHE STRING "List of projects to enable, this can be a relative path to the engine root or an absolute path") +# Passing ${LY_PROJECTS} as the default since in project-centric LY_PROJECTS is defined by the project and +# we want to pick up that one as the value of the variable. +# Ideally this cache variable would be defined before the project sets LY_PROJECTS, but that would mean +# it would have to be defined in each project. +set(LY_PROJECTS "${LY_PROJECTS}" CACHE STRING "List of projects to enable, this can be a relative path to the engine root or an absolute path") #! ly_add_target_dependencies: adds module load dependencies for this target. # diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index e33025a4d9..c607c3d821 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -306,6 +306,7 @@ }, "release_vs2019": { "TAGS": [ + "default", "nightly-incremental", "nightly-clean", "weekly-build-metrics" From 65b82b41d60c007b136d488f72c426d8b888719b Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Fri, 1 Oct 2021 17:56:32 -0400 Subject: [PATCH 057/226] Added unittest for an activation test Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../Components/NetworkTransformComponent.cpp | 26 ++++++++++----- .../Code/Tests/NetworkTransformTests.cpp | 33 +++++++++++++++++-- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp index f03d12343f..bd1e1bf0d9 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkTransformComponent.cpp @@ -14,7 +14,7 @@ namespace Multiplayer { - void NetworkTransformComponent::NetworkTransformComponent::Reflect(AZ::ReflectContext* context) + void NetworkTransformComponent::Reflect(AZ::ReflectContext* context) { AZ::SerializeContext* serializeContext = azrtti_cast(context); if (serializeContext) @@ -43,6 +43,11 @@ namespace Multiplayer GetNetBindComponent()->AddEntityPreRenderEventHandler(m_entityPreRenderEventHandler); GetNetBindComponent()->AddEntityCorrectionEventHandler(m_entityCorrectionEventHandler); ParentEntityIdAddEvent(m_parentChangedEventHandler); + + if (!HasController()) + { + OnParentChanged(GetParentEntityId()); + } } void NetworkTransformComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating) @@ -123,18 +128,21 @@ namespace Multiplayer void NetworkTransformComponent::OnParentChanged(NetEntityId parentId) { - const ConstNetworkEntityHandle parentEntityHandle = GetNetworkEntityManager()->GetEntity(parentId); - if (parentEntityHandle.Exists()) + if (AZ::TransformInterface* transformComponent = GetEntity()->GetTransform()) { - if (const AZ::Entity* parentEntity = parentEntityHandle.GetEntity()) + const ConstNetworkEntityHandle parentEntityHandle = GetNetworkEntityManager()->GetEntity(parentId); + if (parentEntityHandle.Exists()) + { + if (const AZ::Entity* parentEntity = parentEntityHandle.GetEntity()) + { + transformComponent->SetParent(parentEntity->GetId()); + } + } + else { - GetEntity()->GetTransform()->SetParent(parentEntity->GetId()); + transformComponent->SetParent(AZ::EntityId()); } } - else - { - GetEntity()->GetTransform()->SetParent(AZ::EntityId()); - } } NetworkTransformComponentController::NetworkTransformComponentController(NetworkTransformComponent& parent) diff --git a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp index 7ea7ea6974..94cb94e000 100644 --- a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp +++ b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp @@ -211,9 +211,6 @@ namespace Multiplayer const NetworkEntityHandle rootHandle(root.m_entity.get(), m_networkEntityTracker.get()); root.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_mockConnection.get(), NetEntityRole::Authority, rootHandle); root.m_replicator->Initialize(rootHandle); - - root.m_entity->Activate(); - child.m_entity->Activate(); } AZStd::unique_ptr m_root; @@ -228,6 +225,9 @@ namespace Multiplayer TEST_F(ClientNetTransformTests, ClientSetsLocalTmWhenParentIsSet) { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); @@ -249,6 +249,9 @@ namespace Multiplayer TEST_F(ClientNetTransformTests, ClientSetsWorldTmWhenParentIsNotSet) { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); @@ -268,6 +271,9 @@ namespace Multiplayer TEST_F(ClientNetTransformTests, ChildFollowsWhenParentMovesOnServer) { + m_root->m_entity->Activate(); + m_child->m_entity->Activate(); + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); @@ -290,4 +296,25 @@ namespace Multiplayer AZ::Vector3::CreateZero() ); } + + TEST_F(ClientNetTransformTests, ChildAttachesToParentIfParentIdIsSetBeforeActivation) + { + m_root->m_entity->Activate(); + + SetTranslationOnNetworkTransform(m_root->m_entity, AZ::Vector3::CreateOne()); + + SetParentIdOnNetworkTransform(m_child->m_entity, NetEntityId{ 1 }); + SetTranslationOnNetworkTransform(m_child->m_entity, AZ::Vector3::CreateZero()); + + m_child->m_entity->Activate(); + + AZ::EntityBus::Broadcast(&AZ::EntityBus::Events::OnEntityActivated, m_root->m_entity->GetId()); + + MultiplayerTick(); + + EXPECT_EQ( + m_child->m_entity->FindComponent()->GetParentId(), + AZ::EntityId(1) + ); + } } From bf136a567b538c8e2da7a29a821dbe7f9cd0f03d Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Fri, 1 Oct 2021 15:04:50 -0700 Subject: [PATCH 058/226] Some shutdown crash fixes, reverted a whitespace, and added some basic unit tests for time additions Signed-off-by: kberg-amzn --- Code/Framework/AzCore/AzCore/Math/Aabb.h | 2 - .../Framework/AzCore/Tests/Time/TimeTests.cpp | 56 +++++++++++++++++++ .../AzCore/Tests/azcoretests_files.cmake | 1 + .../Components/MultiplayerComponentRegistry.h | 3 + .../MultiplayerComponentRegistry.cpp | 5 ++ .../Source/MultiplayerSystemComponent.cpp | 2 + .../NetworkEntity/NetworkEntityManager.cpp | 15 +++++ .../NetworkEntity/NetworkEntityManager.h | 3 + 8 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 Code/Framework/AzCore/Tests/Time/TimeTests.cpp diff --git a/Code/Framework/AzCore/AzCore/Math/Aabb.h b/Code/Framework/AzCore/AzCore/Math/Aabb.h index f6fb695399..438d95622e 100644 --- a/Code/Framework/AzCore/AzCore/Math/Aabb.h +++ b/Code/Framework/AzCore/AzCore/Math/Aabb.h @@ -1,4 +1,3 @@ - /* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. @@ -6,7 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ - #pragma once #include diff --git a/Code/Framework/AzCore/Tests/Time/TimeTests.cpp b/Code/Framework/AzCore/Tests/Time/TimeTests.cpp new file mode 100644 index 0000000000..6727ef1501 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Time/TimeTests.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace UnitTest +{ + class TimeTests + : public AllocatorsFixture + { + public: + void SetUp() override + { + SetupAllocator(); + m_timeComponent = new AZ::TimeSystemComponent; + } + + void TearDown() override + { + delete m_timeComponent; + TeardownAllocator(); + } + + AZ::TimeSystemComponent* m_timeComponent = nullptr; + }; + + TEST_F(TimeTests, TestConversionUsToMs) + { + AZ::TimeUs timeUs = AZ::TimeUs{ 1000 }; + AZ::TimeMs timeMs = AZ::TimeUsToMs(timeUs); + EXPECT_EQ(timeMs, AZ::TimeMs{ 1 }); + } + + TEST_F(TimeTests, TestConversionMsToUs) + { + AZ::TimeMs timeMs = AZ::TimeMs{ 1000 }; + AZ::TimeUs timeUs = AZ::TimeMsToUs(timeMs); + EXPECT_EQ(timeUs, AZ::TimeUs{ 1000000 }); + } + + TEST_F(TimeTests, TestClocks) + { + AZ::TimeUs timeUs = AZ::GetElapsedTimeUs(); + AZ::TimeMs timeMs = AZ::GetElapsedTimeMs(); + + AZ::TimeMs timeUsToMs = AZ::TimeUsToMs(timeUs); + int64_t delta = static_cast(timeMs) - static_cast(timeUsToMs); + EXPECT_LT(abs(delta), 1); + } +} diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index c36d37d874..a111af0353 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -127,6 +127,7 @@ set(FILES Serialization/Json/UnorderedSetSerializerTests.cpp Serialization/Json/UnsupportedTypesSerializerTests.cpp Serialization/Json/UuidSerializerTests.cpp + Time/TimeTests.cpp Math/AabbTests.cpp Math/ColorTests.cpp Math/CrcTests.cpp diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h index c4ded8cc1c..8cc507c0a2 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/MultiplayerComponentRegistry.h @@ -67,6 +67,9 @@ namespace Multiplayer //! @return reference to the requested component data, an empty container will be returned if the NetComponentId does not exist const ComponentData& GetMultiplayerComponentData(NetComponentId netComponentId) const; + //! This releases all owned memory, should only be called during multiplayer shutdown. + void Reset(); + private: NetComponentId m_nextNetComponentId = NetComponentId{ 0 }; AZStd::unordered_map m_componentData; diff --git a/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp b/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp index e0e180431c..d92f95f6d2 100644 --- a/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp +++ b/Gems/Multiplayer/Code/Source/Components/MultiplayerComponentRegistry.cpp @@ -57,4 +57,9 @@ namespace Multiplayer } return nullComponentData; } + + void MultiplayerComponentRegistry::Reset() + { + m_componentData.clear(); + } } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index 877267adde..b7dde3b9e7 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -199,6 +199,8 @@ namespace Multiplayer AZ::Interface::Get()->DestroyNetworkInterface(AZ::Name(MpNetworkInterfaceName)); AzFramework::SessionNotificationBus::Handler::BusDisconnect(); AZ::TickBus::Handler::BusDisconnect(); + + m_networkEntityManager.Reset(); } bool MultiplayerSystemComponent::StartHosting(uint16_t port, bool isDedicated) diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 93a816fdcf..db7f7243cc 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -300,6 +300,21 @@ namespace Multiplayer } } + void NetworkEntityManager::Reset() + { + m_multiplayerComponentRegistry.Reset(); + m_removeList.clear(); + m_entityDomain = nullptr; + m_updateEntityDomainEvent.RemoveFromQueue(); + m_ownedEntities.clear(); + m_entityExitDomainEvent.DisconnectAllHandlers(); + m_onEntityMarkedDirty.DisconnectAllHandlers(); + m_onEntityNotifyChanges.DisconnectAllHandlers(); + m_controllersActivatedEvent.DisconnectAllHandlers(); + m_controllersDeactivatedEvent.DisconnectAllHandlers(); + m_localDeferredRpcMessages.clear(); + } + void NetworkEntityManager::RemoveEntities() { AZStd::vector removeList; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h index 13b8f0e778..133c35dce0 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.h @@ -92,6 +92,9 @@ namespace Multiplayer void OnRootSpawnableReleased(uint32_t generation) override; //! @} + //! Used to release all memory prior to shutdown. + void Reset(); + private: void RemoveEntities(); NetEntityId NextId(); From ba23583d5f464faa22ee385a670563fda609d6a7 Mon Sep 17 00:00:00 2001 From: mrieggeramzn Date: Fri, 1 Oct 2021 15:54:49 -0700 Subject: [PATCH 059/226] Adding gadams feedback Signed-off-by: mrieggeramzn --- .../Decals/DecalTextureArrayFeatureProcessor.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index 0323282f5c..472dbff5c8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -302,7 +302,9 @@ namespace AZ } if (GetMaterialUsedByDecal(handle) == material) + { return; + } const auto decalIndex = handle.GetIndex(); @@ -313,7 +315,9 @@ namespace AZ } if (!material.IsValid()) + { return; + } const auto iter = m_materialToTextureArrayLookupTable.find(material); if (iter != m_materialToTextureArrayLookupTable.end()) @@ -330,13 +334,15 @@ namespace AZ void DecalTextureArrayFeatureProcessor::RemoveMaterialFromDecal(const uint16_t decalIndex) { + auto& decalData = m_decalData.GetData(decalIndex); + DecalLocation decalLocation; - decalLocation.textureArrayIndex = m_decalData.GetData(decalIndex).m_textureArrayIndex; - decalLocation.textureIndex = m_decalData.GetData(decalIndex).m_textureIndex; + decalLocation.textureArrayIndex = decalData.m_textureArrayIndex; + decalLocation.textureIndex = decalData.m_textureIndex; RemoveDecalFromTextureArrays(decalLocation); - m_decalData.GetData(decalIndex).m_textureArrayIndex = DecalData::UnusedIndex; - m_decalData.GetData(decalIndex).m_textureIndex = DecalData::UnusedIndex; + decalData.m_textureArrayIndex = DecalData::UnusedIndex; + decalData.m_textureIndex = DecalData::UnusedIndex; m_deviceBufferNeedsUpdate = true; } From 5f8e60f4bb8e885b17f59276e9fd4cb3610454d2 Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Fri, 1 Oct 2021 15:55:37 -0700 Subject: [PATCH 060/226] ATOM-16558 Buffer memory leak (#4444) Fixed the memory leaking with ID3D12CommandAllocator in DX12 AsyncUploadQueue. Add reset for the ID3D12CommandAllocator when the commandlist was executed. Fixed another small memory leak in NativeWindow. Signed-off-by: Qing Tao --- .../Windowing/NativeWindow_Windows.cpp | 2 + .../DX12/Code/Source/RHI/AsyncUploadQueue.cpp | 53 ++++++++++--------- .../DX12/Code/Source/RHI/AsyncUploadQueue.h | 5 +- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp index 3f2b29a7bb..57b37037ae 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/Windowing/NativeWindow_Windows.cpp @@ -239,6 +239,8 @@ namespace AzFramework RAWINPUT* rawInput = (RAWINPUT*)rawInputBytes; AzFramework::RawInputNotificationBusWindows::Broadcast( &AzFramework::RawInputNotificationBusWindows::Events::OnRawInputEvent, *rawInput); + + delete [] rawInputBytes; break; } case WM_CHAR: diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp index cb9dac3864..5f85d3ad03 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.cpp @@ -48,11 +48,6 @@ namespace AZ FramePacket& framePacket = m_framePackets.back(); framePacket.m_fence.Init(dx12Device, RHI::FenceState::Signaled); - Microsoft::WRL::ComPtr commandAllocator; - AssertSuccess(dx12Device->CreateCommandAllocator( - D3D12_COMMAND_LIST_TYPE_COPY, - IID_GRAPHICS_PPV_ARGS(commandAllocator.GetAddressOf()))); - CD3DX12_HEAP_PROPERTIES heapProperties(D3D12_HEAP_TYPE_UPLOAD); CD3DX12_RESOURCE_DESC bufferDesc = CD3DX12_RESOURCE_DESC::Buffer(descriptor.m_stagingSizeInBytes); @@ -65,22 +60,28 @@ namespace AZ nullptr, IID_GRAPHICS_PPV_ARGS(stagingResource.GetAddressOf()))); - framePacket.m_commandAllocator = commandAllocator.Get(); framePacket.m_stagingResource = stagingResource.Get(); CD3DX12_RANGE readRange(0, 0); framePacket.m_stagingResource->Map(0, &readRange, reinterpret_cast(&framePacket.m_stagingResourceData)); - } - Microsoft::WRL::ComPtr commandList; - AssertSuccess(dx12Device->CreateCommandList( - 0, - D3D12_COMMAND_LIST_TYPE_COPY, - m_framePackets.front().m_commandAllocator.get(), - nullptr, - IID_GRAPHICS_PPV_ARGS(commandList.GetAddressOf()))); + + Microsoft::WRL::ComPtr commandAllocator; + AssertSuccess(dx12Device->CreateCommandAllocator( + D3D12_COMMAND_LIST_TYPE_COPY, + IID_GRAPHICS_PPV_ARGS(commandAllocator.GetAddressOf()))); + framePacket.m_commandAllocator = commandAllocator.Get(); + + Microsoft::WRL::ComPtr commandList; + AssertSuccess(dx12Device->CreateCommandList( + 0, + D3D12_COMMAND_LIST_TYPE_COPY, + framePacket.m_commandAllocator.get(), + nullptr, + IID_GRAPHICS_PPV_ARGS(commandList.GetAddressOf()))); - m_commandList = commandList.Get(); - AssertSuccess(m_commandList->Close()); + framePacket.m_commandList = commandList.Get(); + AssertSuccess(framePacket.m_commandList->Close()); + } } void AsyncUploadQueue::Shutdown() @@ -90,11 +91,12 @@ namespace AZ m_copyQueue->Shutdown(); m_copyQueue = nullptr; } - m_commandList = nullptr; for (auto& framePacket : m_framePackets) { framePacket.m_fence.Shutdown(); + framePacket.m_commandList = nullptr; + framePacket.m_commandAllocator = nullptr; } m_framePackets.clear(); m_uploadFence.Shutdown(); @@ -170,7 +172,7 @@ namespace AZ memcpy(framePacket->m_stagingResourceData, sourceData + pendingByteOffset, bytesToCopy); } - m_commandList->CopyBufferRegion( + framePacket->m_commandList->CopyBufferRegion( dx12Buffer.get(), byteOffset + pendingByteOffset, framePacket->m_stagingResource.get(), @@ -204,7 +206,9 @@ namespace AZ framePacket->m_fence.Increment(); framePacket->m_dataOffset = 0; - AssertSuccess(m_commandList->Reset(framePacket->m_commandAllocator.get(), nullptr)); + AssertSuccess(framePacket->m_commandAllocator->Reset()); + AssertSuccess(framePacket->m_commandList->Reset(framePacket->m_commandAllocator.get(), nullptr)); + m_recordingFrame = true; return framePacket; @@ -215,11 +219,12 @@ namespace AZ AZ_PROFILE_SCOPE(RHI, "AsyncUploadQueue: EndFramePacket"); AZ_Assert(m_recordingFrame, "The frame packet wasn't started. You need to call StartFramePacket first."); - AssertSuccess(m_commandList->Close()); - ID3D12CommandList* commandLists[] = { m_commandList.get() }; + FramePacket& framePacket = m_framePackets[m_frameIndex]; + + AssertSuccess(framePacket.m_commandList->Close()); + ID3D12CommandList* commandLists[] = { framePacket.m_commandList.get() }; commandQueue->ExecuteCommandLists(1, commandLists); - FramePacket& framePacket = m_framePackets[m_frameIndex]; commandQueue->Signal(framePacket.m_fence.Get(), framePacket.m_fence.GetPendingValue()); m_frameIndex = (m_frameIndex + 1) % m_descriptor.m_frameCount; @@ -344,7 +349,7 @@ namespace AZ const uint32_t subresourceIdx = D3D12CalcSubresource(curMip, arraySlice, 0, imageMipLevels, arraySize); CD3DX12_TEXTURE_COPY_LOCATION destLocation(imageMemory, subresourceIdx); - m_commandList->CopyTextureRegion( + framePacket->m_commandList->CopyTextureRegion( &destLocation, 0, 0, depth, &sourceLocation, @@ -417,7 +422,7 @@ namespace AZ footprint.Offset = framePacket->m_dataOffset; CD3DX12_TEXTURE_COPY_LOCATION sourceLocation(framePacket->m_stagingResource.get(), footprint); - m_commandList->CopyTextureRegion( + framePacket->m_commandList->CopyTextureRegion( &destLocation, 0, destHeight, depth, &sourceLocation, diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h index 0856db0a11..a468ee4bc2 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h @@ -69,12 +69,13 @@ namespace AZ void ProcessCallbacks(uint64_t fenceValue); RHI::Ptr m_copyQueue; - RHI::Ptr m_commandList; struct FramePacket { - RHI::Ptr m_commandAllocator; RHI::Ptr m_stagingResource; + RHI::Ptr m_commandAllocator; + RHI::Ptr m_commandList; + Fence m_fence; // Using persistent mapping for the staging resource so the Map function only need to be called called once. From 98e5a18e49bf232e76e47bf598c77f509c473a30 Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Fri, 1 Oct 2021 16:06:11 -0700 Subject: [PATCH 061/226] Fixes for API changes from most recent integrate Signed-off-by: kberg-amzn --- .../AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp | 5 +++-- .../AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp b/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp index 3031f66774..77632da572 100644 --- a/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp +++ b/Code/Framework/AzNetworking/Tests/TcpTransport/TcpTransportTests.cpp @@ -149,8 +149,9 @@ namespace UnitTest EXPECT_EQ(testServer.m_serverNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); EXPECT_EQ(testClient.m_clientNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); - testClient.m_clientNetworkInterface->SetTimeoutEnabled(true); - EXPECT_TRUE(testClient.m_clientNetworkInterface->IsTimeoutEnabled()); + const AZ::TimeMs timeoutMs = AZ::TimeMs{ 100 }; + testClient.m_clientNetworkInterface->SetTimeoutMs(timeoutMs); + EXPECT_EQ(testClient.m_clientNetworkInterface->GetTimeoutMs(), timeoutMs); EXPECT_TRUE(testServer.m_serverNetworkInterface->StopListening()); } diff --git a/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp b/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp index 91db3b4549..65c2cfa2b5 100644 --- a/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp +++ b/Code/Framework/AzNetworking/Tests/UdpTransport/UdpTransportTests.cpp @@ -279,8 +279,9 @@ namespace UnitTest EXPECT_EQ(testServer.m_serverNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); EXPECT_EQ(testClient.m_clientNetworkInterface->GetConnectionSet().GetConnectionCount(), 1); - testClient.m_clientNetworkInterface->SetTimeoutEnabled(true); - EXPECT_TRUE(testClient.m_clientNetworkInterface->IsTimeoutEnabled()); + const AZ::TimeMs timeoutMs = AZ::TimeMs{ 100 }; + testClient.m_clientNetworkInterface->SetTimeoutMs(timeoutMs); + EXPECT_EQ(testClient.m_clientNetworkInterface->GetTimeoutMs(), timeoutMs); EXPECT_FALSE(dynamic_cast(testClient.m_clientNetworkInterface)->IsEncrypted()); From 1245c2361d769bd777255400660caff958a151af Mon Sep 17 00:00:00 2001 From: Mike Cronin <58789750+micronAMZN@users.noreply.github.com> Date: Fri, 1 Oct 2021 16:06:11 -0700 Subject: [PATCH 062/226] Updated documentation_url field. This doc is being moved per: https://github.com/o3de/o3de.org/pull/993 Signed-off-by: Mike Cronin <58789750+micronAMZN@users.noreply.github.com> --- Gems/LmbrCentral/gem.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/LmbrCentral/gem.json b/Gems/LmbrCentral/gem.json index 36de4c4ed3..9fca421538 100644 --- a/Gems/LmbrCentral/gem.json +++ b/Gems/LmbrCentral/gem.json @@ -15,6 +15,6 @@ ], "icon_path": "preview.png", "requirements": "", - "documentation_url": "https://o3de.org/docs/user-guide/gems/reference/core/lmbr-central/", + "documentation_url": "https://o3de.org/docs/user-guide/gems/reference/o3de-core/", "dependencies": [] } From 49cfc67f614b61cacff278c1f406838d051439a4 Mon Sep 17 00:00:00 2001 From: FiniteStateGit <31811688+FiniteStateGit@users.noreply.github.com> Date: Fri, 1 Oct 2021 16:13:59 -0700 Subject: [PATCH 063/226] AzCore/Ebus/Ebus.h: Fix docs urls Issue#913 Signed-off-by: FiniteStateGit <31811688+FiniteStateGit@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/EBus/EBus.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/EBus/EBus.h b/Code/Framework/AzCore/AzCore/EBus/EBus.h index ff8966e8e0..da8c880963 100644 --- a/Code/Framework/AzCore/AzCore/EBus/EBus.h +++ b/Code/Framework/AzCore/AzCore/EBus/EBus.h @@ -12,7 +12,7 @@ * that Open 3D Engine uses to dispatch notifications and receive requests. * EBuses are configurable and support many different use cases. * For more information about %EBuses, see AZ::EBus in this guide and - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) * in the *Open 3D Engine Developer Guide*. */ @@ -62,7 +62,7 @@ namespace AZ * @endcode * * For more information about %EBuses, see EBus in this guide and - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) * in the *Open 3D Engine Developer Guide*. */ struct EBusTraits @@ -259,8 +259,8 @@ namespace AZ * * EBuses are configurable and support many different use cases. * For more information about EBuses, see - * [Event Bus](http://docs.aws.amazon.com/lumberyard/latest/developerguide/asset-pipeline-ebus.html) - * and [Components and EBuses: Best Practices ](http://docs.aws.amazon.com/lumberyard/latest/developerguide/component-entity-system-pg-components-ebuses-best-practices.html) + * [Event Bus](https://o3de.org/docs/user-guide/engine/ebus/) + * and [Components and EBuses: Best Practices ](https://o3de.org/docs/user-guide/components/development/entity-system-pg-components-ebuses-best-practices/) * in the *Open 3D Engine Developer Guide*. * * ## How Components Use EBuses From 73891c71b777ed1e8e1402ffdbc7463bff6670a8 Mon Sep 17 00:00:00 2001 From: Gene Walters Date: Sun, 3 Oct 2021 22:49:13 -0700 Subject: [PATCH 064/226] Fix EditorServer connection by ensuring that SendReadyForEntityUpdates is only called after a handshake is finished and the editor has accepted the editorserver's connection. Also allow engine-centric projects to use editor-server by passing in the project-path when launching the editor-server. Also allow devs to set sv_defaultPlayerSpawnAsset from inside the editor and it'll be used by the editor-server Signed-off-by: Gene Walters --- .../Editor/MultiplayerEditorConnection.cpp | 1 - .../MultiplayerEditorSystemComponent.cpp | 8 ++++++- .../Source/MultiplayerSystemComponent.cpp | 22 ++++++++++++++----- .../Code/Source/MultiplayerSystemComponent.h | 2 ++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp index 3ca1af8b66..24858e6412 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorConnection.cpp @@ -146,7 +146,6 @@ namespace Multiplayer { // Connect the Editor to the editor server for Multiplayer simulation AZ::Interface::Get()->Connect(remoteAddress.c_str(), remotePort); - AZ::Interface::Get()->SendReadyForEntityUpdates(true); } } } diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp index 377fb1eb56..d13c6538db 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp @@ -142,8 +142,14 @@ namespace Multiplayer } // Start the configured server if it's available + AZStd::string projectPath(AZ::Utils::GetProjectPath().c_str()); + AZStd::replace(projectPath.begin(), projectPath.end(), AZ::IO::WindowsPathSeparator, AZ::IO::PosixPathSeparator); AzFramework::ProcessLauncher::ProcessLaunchInfo processLaunchInfo; - processLaunchInfo.m_commandlineParameters = AZStd::string::format("\"%s\" --editorsv_isDedicated true", serverPath.c_str()); + processLaunchInfo.m_commandlineParameters = AZStd::string::format( + R"("%s" --project-path "%s" --editorsv_isDedicated true --sv_defaultPlayerSpawnAsset "%s")", + serverPath.c_str(), + projectPath.c_str(), + static_cast(sv_defaultPlayerSpawnAsset).c_str()); processLaunchInfo.m_showWindow = true; processLaunchInfo.m_processPriority = AzFramework::ProcessPriority::PROCESSPRIORITY_NORMAL; diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index e66eb8d3a3..9b04cd98d4 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -489,11 +489,23 @@ namespace Multiplayer { m_didHandshake = true; - AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); - AZ::Interface::Get()->PerformCommand(commandString.c_str()); + // If this is an Editor then we're now accepting the connection to the EditorServer. + // In normal game clients SendReadyForEntityUpdates will be enabled once the appropriate level's root spawnable is loaded, + // but since we're in Editor, we're already in the level. + AZ::ApplicationTypeQuery applicationType; + AZ::ComponentApplicationBus::Broadcast(&AZ::ComponentApplicationRequests::QueryApplicationType, applicationType); + if (applicationType.IsEditor()) + { + SendReadyForEntityUpdates(true); + } + else + { + AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); + AZ::Interface::Get()->PerformCommand(commandString.c_str()); - AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); - AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); + AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); + AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); + } return true; } @@ -981,7 +993,7 @@ namespace Multiplayer INetworkEntityManager::EntityList entityList = m_networkEntityManager.CreateEntitiesImmediate(playerPrefabEntityId, NetEntityRole::Authority, AZ::Transform::CreateIdentity(), Multiplayer::AutoActivate::DoNotActivate); NetworkEntityHandle controlledEntity; - if (entityList.size() > 0) + if (!entityList.empty()) { controlledEntity = entityList[0]; } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index c467ed9ad9..ba014f814a 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -37,6 +37,8 @@ namespace AzNetworking namespace Multiplayer { + AZ_CVAR_EXTERNED(AZ::CVarFixedString, sv_defaultPlayerSpawnAsset); + //! Multiplayer system component wraps the bridging logic between the game and transport layer. class MultiplayerSystemComponent final : public AZ::Component From 8c55107e073b1dbdfbf2fceed729974f449eb645 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 4 Oct 2021 09:36:12 +0100 Subject: [PATCH 065/226] ViewportEditorModeInfo to ViewportEditorModeTrackerInfo. Signed-off-by: John --- .../API/ViewportEditorModeTrackerInterface.h | 18 +++++------ ...ViewportEditorModeTrackerNotificationBus.h | 4 +-- .../ViewportEditorModeTracker.cpp | 30 +++++++++---------- .../ViewportEditorModeTracker.h | 12 ++++---- .../Viewport/ViewportEditorModeTests.cpp | 4 +-- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h index bcc8afbe6a..9da8d97990 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerInterface.h @@ -22,22 +22,22 @@ namespace AzToolsFramework virtual ~ViewportEditorModeTrackerInterface() = default; - //! Activates the specified editor mode for the specified viewport. + //! Activates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Deactivates the specified editor mode for the specified viewport. + //! Deactivates the specified editor mode for the specified viewport editor mode tracker. virtual AZ::Outcome DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) = 0; + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) = 0; - //! Attempts to retrieve the editor mode state for the specified viewport, otherwise returns nullptr. - virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Attempts to retrieve the editor mode state for the specified viewport editor mode tracker, otherwise returns nullptr. + virtual const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; - //! Returns the number of viewports currently being tracked. + //! Returns the number of viewport editor mode trackers. virtual size_t GetTrackedViewportCount() const = 0; - //! Returns true if the specified viewport is being tracked, otherwise false. - virtual bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const = 0; + //! Returns true if viewport editor modes are being tracked for the specified od, otherwise false. + virtual bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const = 0; }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h index 1f05e869f1..4fcb891e61 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h @@ -24,7 +24,7 @@ namespace AzToolsFramework }; //! Viewport editor mode tracker identifier and other relevant data. - struct ViewportEditorModeInfo + struct ViewportEditorModeTrackerInfo { using IdType = AzFramework::EntityContextId; IdType m_id = AzFramework::EntityContextId::CreateNull(); //!< The unique identifier for a given viewport editor mode tracker. @@ -49,7 +49,7 @@ namespace AzToolsFramework // EBusTraits overrides static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = ViewportEditorModeInfo::IdType; + using BusIdType = ViewportEditorModeTrackerInfo::IdType; ////////////////////////////////////////////////////////////////////////// //! Notifies subscribers of the a given viewport to the activation of the specified editor mode. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp index 05b645f52c..d3cfa47e51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.cpp @@ -46,14 +46,14 @@ namespace AzToolsFramework } AZ::Outcome ViewportEditorModeTracker::ActivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { - auto& editorModes = m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + auto& editorModes = m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; if (editorModes.IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( "Duplicate call to ActivateMode for mode '%u' on id '%s'", static_cast(mode), - viewportEditorModeInfo.m_id.ToString().c_str())); + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } if (const auto result = editorModes.ActivateMode(mode); @@ -63,30 +63,30 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeActivated, editorModes, mode); return AZ::Success(); } AZ::Outcome ViewportEditorModeTracker::DeactivateMode( - const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) + const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) { ViewportEditorModes* editorModes = nullptr; bool modeWasActive = true; - if (m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id)) + if (m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id)) { - editorModes = &m_viewportEditorModesMap.at(viewportEditorModeInfo.m_id); + editorModes = &m_viewportEditorModesMap.at(ViewportEditorModeTrackerInfo.m_id); if (!editorModes->IsModeActive(mode)) { return AZ::Failure(AZStd::string::format( "Duplicate call to DeactivateMode for mode '%u' on id '%s'", static_cast(mode), - viewportEditorModeInfo.m_id.ToString().c_str())); + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } else { modeWasActive = false; - editorModes = &m_viewportEditorModesMap[viewportEditorModeInfo.m_id]; + editorModes = &m_viewportEditorModesMap[ViewportEditorModeTrackerInfo.m_id]; } if(const auto result = editorModes->DeactivateMode(mode); @@ -96,7 +96,7 @@ namespace AzToolsFramework } ViewportEditorModeNotificationsBus::Event( - viewportEditorModeInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); + ViewportEditorModeTrackerInfo.m_id, &ViewportEditorModeNotificationsBus::Events::OnEditorModeDeactivated, *editorModes, mode); if (modeWasActive) { @@ -106,13 +106,13 @@ namespace AzToolsFramework { return AZ::Failure(AZStd::string::format( "Call to DeactivateMode for mode '%u' on id '%s' without precursor call to ActivateMode", static_cast(mode), - viewportEditorModeInfo.m_id.ToString().c_str())); + ViewportEditorModeTrackerInfo.m_id.ToString().c_str())); } } - const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const + const ViewportEditorModesInterface* ViewportEditorModeTracker::GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - if (auto editorModes = m_viewportEditorModesMap.find(viewportEditorModeInfo.m_id); + if (auto editorModes = m_viewportEditorModesMap.find(ViewportEditorModeTrackerInfo.m_id); editorModes != m_viewportEditorModesMap.end()) { return &editorModes->second; @@ -128,8 +128,8 @@ namespace AzToolsFramework return m_viewportEditorModesMap.size(); } - bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const + bool ViewportEditorModeTracker::IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const { - return m_viewportEditorModesMap.count(viewportEditorModeInfo.m_id) > 0; + return m_viewportEditorModesMap.count(ViewportEditorModeTrackerInfo.m_id) > 0; } } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h index 5b382c44e7..2efc0a66f7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/ViewportEditorModeTracker.h @@ -42,14 +42,14 @@ namespace AzToolsFramework { public: // ViewportEditorModeTrackerInterface overrides ... - AZ::Outcome ActivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - AZ::Outcome DeactivateMode(const ViewportEditorModeInfo& viewportEditorModeInfo, ViewportEditorMode mode) override; - const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + AZ::Outcome ActivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + AZ::Outcome DeactivateMode(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo, ViewportEditorMode mode) override; + const ViewportEditorModesInterface* GetViewportEditorModes(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; size_t GetTrackedViewportCount() const override; - bool IsViewportModeTracked(const ViewportEditorModeInfo& viewportEditorModeInfo) const override; + bool IsViewportModeTracked(const ViewportEditorModeTrackerInfo& ViewportEditorModeTrackerInfo) const override; private: - using ViewportEditorModesMap = AZStd::unordered_map; - ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode state per viewport. + using ViewportEditorModesMap = AZStd::unordered_map; + ViewportEditorModesMap m_viewportEditorModesMap; //!< Editor mode states per tracker. }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp index 393a1e9055..50a1f8f21f 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp @@ -18,8 +18,8 @@ namespace UnitTest using ViewportEditorMode = AzToolsFramework::ViewportEditorMode; using ViewportEditorModes = AzToolsFramework::ViewportEditorModes; using ViewportEditorModeTracker = AzToolsFramework::ViewportEditorModeTracker; - using ViewportEditorModeInfo = AzToolsFramework::ViewportEditorModeInfo; - using TrackerId = ViewportEditorModeInfo::IdType; + using ViewportEditorModeTrackerInfo = AzToolsFramework::ViewportEditorModeTrackerInfo; + using TrackerId = ViewportEditorModeTrackerInfo::IdType; using ViewportEditorModesInterface = AzToolsFramework::ViewportEditorModesInterface; using ViewportEditorModeTrackerInterface = AzToolsFramework::ViewportEditorModeTrackerInterface; From f0c66cfa6f4a1e1b2035ec6a786caa0b0b4ae8e2 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Mon, 4 Oct 2021 09:42:16 +0100 Subject: [PATCH 066/226] Remove references to legacy visibility system (#4441) * remove look at interpolation position Signed-off-by: hultonha * remove visibility switch Signed-off-by: hultonha * remove references to object cache Signed-off-by: hultonha * add some more asserts to catch code that should never run Signed-off-by: hultonha * add missing [[maybe_unused]] Signed-off-by: hultonha * revert clang-format change Signed-off-by: hultonha --- Code/Editor/Include/IDisplayViewport.h | 2 - Code/Editor/Objects/ObjectManager.cpp | 334 ++----------------------- Code/Editor/Objects/ObjectManager.h | 34 --- Code/Editor/Viewport.cpp | 16 +- Code/Editor/Viewport.h | 6 - 5 files changed, 17 insertions(+), 375 deletions(-) diff --git a/Code/Editor/Include/IDisplayViewport.h b/Code/Editor/Include/IDisplayViewport.h index 813c54355b..c7dff33e50 100644 --- a/Code/Editor/Include/IDisplayViewport.h +++ b/Code/Editor/Include/IDisplayViewport.h @@ -35,8 +35,6 @@ struct IDisplayViewport */ virtual float GetDistanceToLine(const Vec3& lineP1, const Vec3& lineP2, const QPoint& point) const = 0; - virtual CBaseObjectsCache* GetVisibleObjectsCache() = 0; - enum EAxis { AXIS_NONE, diff --git a/Code/Editor/Objects/ObjectManager.cpp b/Code/Editor/Objects/ObjectManager.cpp index 06aa8866b3..f67cf24553 100644 --- a/Code/Editor/Objects/ObjectManager.cpp +++ b/Code/Editor/Objects/ObjectManager.cpp @@ -33,10 +33,6 @@ AZ_CVAR_EXTERNED(bool, ed_visibility_logTiming); -AZ_CVAR( - bool, ed_visibility_use, true, nullptr, AZ::ConsoleFunctorFlags::Null, - "Enable/disable using the new IVisibilitySystem for Entity visibility determination"); - /*! * Class Description used for object templates. * This description filled from Xml template files. @@ -76,17 +72,6 @@ public: int GameCreationOrder() override { return superType->GameCreationOrder(); }; }; -void CBaseObjectsCache::AddObject(CBaseObject* object) -{ - m_objects.push_back(object); - if (object->GetType() == OBJTYPE_AZENTITY) - { - auto componentEntityObject = static_cast(object); - m_entityIds.push_back(componentEntityObject->GetAssociatedEntityId()); - } -} - - ////////////////////////////////////////////////////////////////////////// // CObjectManager implementation. ////////////////////////////////////////////////////////////////////////// @@ -1267,25 +1252,8 @@ void CObjectManager::Display(DisplayContext& dc) UpdateVisibilityList(); } - bool viewIsDirty = dc.settings->IsDisplayHelpers(); // displaying helpers require computing all the bound boxes and things anyway. - - if (!viewIsDirty) + if (dc.settings->IsDisplayHelpers()) { - if (CBaseObjectsCache* cache = dc.view->GetVisibleObjectsCache()) - { - // if the current rendering viewport has an out-of-date cache serial number, it needs to be refreshed too. - // views set their cache empty when they indicate they need to force a refresh. - if ((cache->GetObjectCount() == 0) || (cache->GetSerialNumber() != m_visibilitySerialNumber)) - { - viewIsDirty = true; - } - } - } - - if (viewIsDirty) - { - FindDisplayableObjects(dc, true); // this also actually draws the helpers. - // Also broadcast for anyone else that needs to draw global debug to do so now AzFramework::DebugDisplayEventBus::Broadcast(&AzFramework::DebugDisplayEvents::DrawGlobalDebugInfo); } @@ -1296,94 +1264,14 @@ void CObjectManager::Display(DisplayContext& dc) } } -void CObjectManager::ForceUpdateVisibleObjectCache(DisplayContext& dc) +void CObjectManager::ForceUpdateVisibleObjectCache([[maybe_unused]] DisplayContext& dc) { - FindDisplayableObjects(dc, false); + AZ_Assert(false, "CObjectManager::ForceUpdateVisibleObjectCache is legacy/deprecated and should not be used."); } -void CObjectManager::FindDisplayableObjects(DisplayContext& dc, [[maybe_unused]] bool bDisplay) +void CObjectManager::FindDisplayableObjects([[maybe_unused]] DisplayContext& dc, [[maybe_unused]] bool bDisplay) { - // if the new IVisibilitySystem is being used, do not run this logic - if (ed_visibility_use) - { - return; - } - - AZ_PROFILE_FUNCTION(Editor); - - auto start = std::chrono::steady_clock::now(); - CBaseObjectsCache* pDispayedViewObjects = dc.view->GetVisibleObjectsCache(); - if (!pDispayedViewObjects) - { - return; - } - - pDispayedViewObjects->SetSerialNumber(m_visibilitySerialNumber); // update viewport to be latest serial number - - AABB bbox; - bbox.min.zero(); - bbox.max.zero(); - - pDispayedViewObjects->ClearObjects(); - pDispayedViewObjects->Reserve(static_cast(m_visibleObjects.size())); - - if (dc.flags & DISPLAY_2D) - { - int numVis = static_cast(m_visibleObjects.size()); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = m_visibleObjects[i]; - - obj->GetBoundBox(bbox); - if (dc.box.IsIntersectBox(bbox)) - { - pDispayedViewObjects->AddObject(obj); - } - } - } - else - { - CSelectionGroup* pSelection = GetSelection(); - if (pSelection && pSelection->GetCount() > 1) - { - AABB mergedAABB; - mergedAABB.Reset(); - for (int i = 0, iCount(pSelection->GetCount()); i < iCount; ++i) - { - CBaseObject* pObj(pSelection->GetObject(i)); - if (pObj == nullptr) - { - continue; - } - AABB aabb; - pObj->GetBoundBox(aabb); - mergedAABB.Add(aabb); - } - - pSelection->GetObject(0)->CBaseObject::DrawDimensions(dc, &mergedAABB); - } - - int numVis = static_cast(m_visibleObjects.size()); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = m_visibleObjects[i]; - - if (obj) - { - if ((dc.flags & DISPLAY_SELECTION_HELPERS) || obj->IsSelected()) - { - pDispayedViewObjects->AddObject(obj); - } - } - } - } - - if (ed_visibility_logTiming && !ed_visibility_use) - { - auto stop = std::chrono::steady_clock::now(); - std::chrono::duration diff = stop - start; - AZ_Printf("Visibility", "FindDisplayableObjects (old) - Duration: %f", diff); - } + AZ_Assert(false, "CObjectManager::FindDisplayableObjects is legacy/deprecated and should not be used."); } void CObjectManager::BeginEditParams(CBaseObject* obj, int flags) @@ -1630,214 +1518,24 @@ bool CObjectManager::HitTestObject(CBaseObject* obj, HitContext& hc) return (bSelectionHelperHit || obj->HitTest(hc)); } - ////////////////////////////////////////////////////////////////////////// -bool CObjectManager::HitTest(HitContext& hitInfo) +bool CObjectManager::HitTest([[maybe_unused]] HitContext& hitInfo) { - AZ_PROFILE_FUNCTION(Editor); - - hitInfo.object = nullptr; - hitInfo.dist = FLT_MAX; - hitInfo.axis = 0; - hitInfo.manipulatorMode = 0; - - HitContext hcOrg = hitInfo; - if (hcOrg.view) - { - hcOrg.view->GetPerpendicularAxis(nullptr, &hcOrg.b2DViewport); - } - hcOrg.rayDir = hcOrg.rayDir.GetNormalized(); - - HitContext hc = hcOrg; - - float mindist = FLT_MAX; - - if (!hitInfo.bIgnoreAxis && !hc.bUseSelectionHelpers) - { - // Test gizmos. - if (m_gizmoManager->HitTest(hc)) - { - if (hc.axis != 0) - { - hitInfo.object = hc.object; - hitInfo.gizmo = hc.gizmo; - hitInfo.axis = hc.axis; - hitInfo.manipulatorMode = hc.manipulatorMode; - hitInfo.dist = hc.dist; - return true; - } - } - } - - if (hitInfo.bOnlyGizmo) - { - return false; - } - - // Only HitTest objects, that where previously Displayed. - CBaseObjectsCache* pDispayedViewObjects = hitInfo.view->GetVisibleObjectsCache(); - - const bool iconsPrioritized = true; // Force icons to always be prioritized over other things you hit. Can change to be a configurable option in the future. - - CBaseObject* selected = nullptr; - const char* name = nullptr; - bool iconHit = false; - int numVis = pDispayedViewObjects->GetObjectCount(); - for (int i = 0; i < numVis; i++) - { - CBaseObject* obj = pDispayedViewObjects->GetObject(i); - - if (obj == hitInfo.pExcludedObject) - { - continue; - } - - if (HitTestObject(obj, hc)) - { - if (m_selectCallback && !m_selectCallback->CanSelectObject(obj)) - { - continue; - } - - // Check if this object is nearest. - if (hc.axis != 0) - { - hitInfo.object = obj; - hitInfo.axis = hc.axis; - hitInfo.dist = hc.dist; - return true; - } - - // When prioritizing icons, we don't allow non-icon hits to beat icon hits - if (iconsPrioritized && iconHit && !hc.iconHit) - { - continue; - } - - if (hc.dist < mindist || (!iconHit && hc.iconHit)) - { - if (hc.iconHit) - { - iconHit = true; - } - - mindist = hc.dist; - name = hc.name; - selected = obj; - } - - // Clear the object pointer if an object was hit, not just if the collision - // was closer than any previous. Not all paths from HitTestObject set the object pointer and so you could get - // an object from a previous (rejected) result but with collision information about a closer hit. - hc.object = nullptr; - hc.iconHit = false; - - // If use deep selection - if (hitInfo.pDeepSelection) - { - hitInfo.pDeepSelection->AddObject(hc.dist, obj); - } - } - } - - if (selected) - { - hitInfo.object = selected; - hitInfo.dist = mindist; - hitInfo.name = name; - hitInfo.iconHit = iconHit; - return true; - } + AZ_Assert(false, "CObjectManager::HitTest is legacy/deprecated and should not be used."); return false; } -void CObjectManager::FindObjectsInRect(CViewport* view, const QRect& rect, std::vector& guids) -{ - AZ_PROFILE_FUNCTION(Editor); - - if (rect.width() < 1 || rect.height() < 1) - { - return; - } - - HitContext hc; - hc.view = view; - hc.b2DViewport = view->GetType() != ET_ViewportCamera; - hc.rect = rect; - hc.bUseSelectionHelpers = view->GetAdvancedSelectModeFlag(); - - guids.clear(); - CBaseObjectsCache* pDispayedViewObjects = view->GetVisibleObjectsCache(); - - int numVis = pDispayedViewObjects->GetObjectCount(); - for (int i = 0; i < numVis; ++i) - { - CBaseObject* pObj = pDispayedViewObjects->GetObject(i); - - HitTestObjectAgainstRect(pObj, view, hc, guids); - } +void CObjectManager::FindObjectsInRect( + [[maybe_unused]] CViewport* view, [[maybe_unused]] const QRect& rect, [[maybe_unused]] std::vector& guids) +{ + AZ_Assert(false, "CObjectManager::FindObjectsInRect is legacy/deprecated and should not be used."); } ////////////////////////////////////////////////////////////////////////// -void CObjectManager::SelectObjectsInRect(CViewport* view, const QRect& rect, bool bSelect) +void CObjectManager::SelectObjectsInRect( + [[maybe_unused]] CViewport* view, [[maybe_unused]] const QRect& rect, [[maybe_unused]] bool bSelect) { - AZ_PROFILE_FUNCTION(Editor); - - // Ignore too small rectangles. - if (rect.width() < 1 || rect.height() < 1) - { - return; - } - - CUndo undo("Select Object(s)"); - - HitContext hc; - hc.view = view; - hc.b2DViewport = view->GetType() != ET_ViewportCamera; - hc.rect = rect; - hc.bUseSelectionHelpers = view->GetAdvancedSelectModeFlag(); - - bool isUndoRecording = GetIEditor()->IsUndoRecording(); - if (isUndoRecording) - { - m_processingBulkSelect = true; - } - - CBaseObjectsCache* displayedViewObjects = view->GetVisibleObjectsCache(); - int numVis = displayedViewObjects->GetObjectCount(); - - // Tracking the previous selection allows proper undo/redo functionality of additional - // selections (CTRL + drag select) - AZStd::unordered_set previousSelection; - - for (int i = 0; i < numVis; ++i) - { - CBaseObject* object = displayedViewObjects->GetObject(i); - - if (object->IsSelected()) - { - previousSelection.insert(object); - } - else - { - // This will update m_currSelection - SelectObjectInRect(object, view, hc, bSelect); - - // Legacy undo/redo does not go through the Ebus system and must be done individually - if (isUndoRecording && object->GetType() != OBJTYPE_AZENTITY) - { - GetIEditor()->RecordUndo(new CUndoBaseObjectSelect(object, true)); - } - } - } - - if (isUndoRecording && m_currSelection) - { - // Component Entities can handle undo/redo in bulk due to Ebuses - GetIEditor()->RecordUndo(new CUndoBaseObjectBulkSelect(previousSelection, *m_currSelection)); - } - - m_processingBulkSelect = false; + AZ_Assert(false, "CObjectManager::SelectObjectsInRect is legacy/deprecated and should not be used."); } ////////////////////////////////////////////////////////////////////////// @@ -3011,6 +2709,4 @@ namespace AzToolsFramework } } -} - - +} // namespace AzToolsFramework diff --git a/Code/Editor/Objects/ObjectManager.h b/Code/Editor/Objects/ObjectManager.h index 4ffa5e9a07..0ad5d8323e 100644 --- a/Code/Editor/Objects/ObjectManager.h +++ b/Code/Editor/Objects/ObjectManager.h @@ -52,40 +52,6 @@ public: } }; -////////////////////////////////////////////////////////////////////////// -// Array of editor objects. -////////////////////////////////////////////////////////////////////////// -class CBaseObjectsCache -{ -public: - int GetObjectCount() const { return static_cast(m_objects.size()); } - CBaseObject* GetObject(int nIndex) const { return m_objects[nIndex]; } - void AddObject(CBaseObject* object); - - void ClearObjects() - { - m_objects.clear(); - m_entityIds.clear(); - } - - void Reserve(int nCount) - { - m_objects.reserve(nCount); - m_entityIds.reserve(nCount); - } - - const AZStd::vector& GetEntityIdCache() const { return m_entityIds; } - - /// Checksum is used as a dirty flag. - unsigned int GetSerialNumber() { return m_serialNumber; } - void SetSerialNumber(unsigned int serialNumber) { m_serialNumber = serialNumber; } -private: - //! List of objects that was displayed at last frame. - std::vector<_smart_ptr > m_objects; - AZStd::vector m_entityIds; - unsigned int m_serialNumber = 0; -}; - /*! * CObjectManager is a singleton object that * manages global set of objects in level. diff --git a/Code/Editor/Viewport.cpp b/Code/Editor/Viewport.cpp index 2d41538d92..5b4f4a4df3 100644 --- a/Code/Editor/Viewport.cpp +++ b/Code/Editor/Viewport.cpp @@ -173,8 +173,6 @@ QtViewport::QtViewport(QWidget* parent) m_bAdvancedSelectMode = false; - m_pVisibleObjectsCache = new CBaseObjectsCache; - m_constructionPlane.SetPlane(Vec3_OneZ, Vec3_Zero); m_constructionPlaneAxisX = Vec3_Zero; m_constructionPlaneAxisY = Vec3_Zero; @@ -204,8 +202,6 @@ QtViewport::QtViewport(QWidget* parent) ////////////////////////////////////////////////////////////////////////// QtViewport::~QtViewport() { - delete m_pVisibleObjectsCache; - GetIEditor()->GetViewManager()->UnregisterViewport(this); } @@ -376,11 +372,6 @@ void QtViewport::OnDeactivate() void QtViewport::ResetContent() { m_pMouseOverObject = nullptr; - - // Need to clear visual object cache. - // Right after loading new level, some code(e.g. OnMouseMove) access invalid - // previous level object before cache updated. - GetVisibleObjectsCache()->ClearObjects(); } ////////////////////////////////////////////////////////////////////////// @@ -398,11 +389,8 @@ void QtViewport::Update() m_viewportUi.Update(); m_bAdvancedSelectMode = false; - bool bSpaceClick = false; - { - bSpaceClick = CheckVirtualKey(Qt::Key_Space) & !CheckVirtualKey(Qt::Key_Shift) /*& !CheckVirtualKey(Qt::Key_Control)*/; - } - if (bSpaceClick && hasFocus()) + + if (CheckVirtualKey(Qt::Key_Space) && !CheckVirtualKey(Qt::Key_Shift) && hasFocus()) { m_bAdvancedSelectMode = true; } diff --git a/Code/Editor/Viewport.h b/Code/Editor/Viewport.h index 60c1306420..fdb8332479 100644 --- a/Code/Editor/Viewport.h +++ b/Code/Editor/Viewport.h @@ -491,10 +491,6 @@ public: void ResetCursor() override; void SetSupplementaryCursorStr(const QString& str) override; - ////////////////////////////////////////////////////////////////////////// - // Return visble objects cache. - CBaseObjectsCache* GetVisibleObjectsCache() override { return m_pVisibleObjectsCache; }; - void RegisterRenderListener(IRenderListener* piListener) override; bool UnregisterRenderListener(IRenderListener* piListener) override; bool IsRenderListenerRegistered(IRenderListener* piListener) override; @@ -612,8 +608,6 @@ protected: int m_nLastUpdateFrame; int m_nLastMouseMoveFrame; - CBaseObjectsCache* m_pVisibleObjectsCache; - QRect m_rcClient; AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING From d5dcd3c74a7437d519fd44a024cb9a5b2432313c Mon Sep 17 00:00:00 2001 From: John Date: Mon, 4 Oct 2021 09:53:36 +0100 Subject: [PATCH 067/226] Add explanatory comment to broadcast fixture. Signed-off-by: John --- .../AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp index 50a1f8f21f..db6a0b8571 100644 --- a/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Viewport/ViewportEditorModeTests.cpp @@ -157,6 +157,7 @@ namespace UnitTest m_handlerIds.resize(ViewportEditorModes::NumEditorModes); for (auto mode = 0; mode < ViewportEditorModes::NumEditorModes; mode++) { + // Create a random GUID for each handler and associate that GUID with an index derived from one of the possible editor modes m_handlerIds[mode] = TrackerId::CreateRandom(); m_editorModeHandlers[mode] = AZStd::make_unique(m_handlerIds[mode]); } From 1c305c64024d4f442aed53489a182eda31ef1c86 Mon Sep 17 00:00:00 2001 From: moraaar Date: Mon, 4 Oct 2021 12:05:33 +0100 Subject: [PATCH 068/226] Fixed physx asset when exported as convex or primitives. (#4414) * Fixed physx asset when exported as convex or primitives. Before it was limited to 1 material for the entire object, now it correctly uses multiple materials by looking at the first material per node. Signed-off-by: moraaar --- .../Code/Source/Pipeline/MeshExporter.cpp | 24 ++++++++++++++----- Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp | 11 +-------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp b/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp index 412e53d0da..0bb3639826 100644 --- a/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp +++ b/Gems/PhysX/Code/Source/Pipeline/MeshExporter.cpp @@ -298,8 +298,10 @@ namespace PhysX assetMaterialData.m_nodesToPerFaceMaterialIndices.emplace(nodeName, AZStd::vector(faceCount)); - // Convex and primitive methods can only have 1 material + // Convex and primitive methods can only have 1 material per node. const bool limitToOneMaterial = meshGroup.GetExportAsConvex() || meshGroup.GetExportAsPrimitive(); + AZStd::string firstMaterial; + AZStd::set nodeMaterials; for (AZ::u32 faceIndex = 0; faceIndex < faceCount; ++faceIndex) { @@ -318,18 +320,28 @@ namespace PhysX materialName = localSourceSceneMaterialsList[materialId]; - // Keep using the first material when it has to be limited to one. - if (limitToOneMaterial && - assetMaterialData.m_sourceSceneMaterialNames.size() == 1 && - assetMaterialData.m_sourceSceneMaterialNames[0] != materialName) + // Use the first material found in the mesh when it has to be limited to one. + if (limitToOneMaterial) { - materialName = assetMaterialData.m_sourceSceneMaterialNames[0]; + nodeMaterials.insert(materialName); + if (firstMaterial.empty()) + { + firstMaterial = materialName; + } + materialName = firstMaterial; } } const AZ::u16 materialIndex = InsertMaterialIndexByName(materialName, assetMaterialData); assetMaterialData.m_nodesToPerFaceMaterialIndices[nodeName][faceIndex] = materialIndex; } + + if (limitToOneMaterial && nodeMaterials.size() > 1) + { + AZ_TracePrintf(AZ::SceneAPI::Utilities::WarningWindow, + "Node '%s' has %d materials, but cooking methods Convex and Primitive support one material per node. The first material '%s' will be used.", + sceneNodeSelectionList.GetSelectedNode(index).c_str(), nodeMaterials.size(), firstMaterial.c_str()); + } } return assetMaterialData; diff --git a/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp b/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp index f95804e805..d0ff4008b2 100644 --- a/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp +++ b/Gems/PhysX/Code/Source/Pipeline/MeshGroup.cpp @@ -852,16 +852,7 @@ namespace PhysX { if (index < m_materialSlots.size()) { - // When limited to one material, clarify in the label the material - // will be used for the entire object. - if (index == 0 && (GetExportAsConvex() || GetExportAsPrimitive())) - { - return m_materialSlots[index] + " (entire object)"; - } - else - { - return m_materialSlots[index]; - } + return m_materialSlots[index]; } else { From 4d49a604af5355fdb3b2c2aa5cf2122691191f73 Mon Sep 17 00:00:00 2001 From: amzn-sean <75276488+amzn-sean@users.noreply.github.com> Date: Mon, 4 Oct 2021 12:34:51 +0100 Subject: [PATCH 069/226] Moving run Physx Benchmarks behind a cmake flag (#4411) The benchmark code is still built, as it is part of the PhysX.Tests project. Currently jenkins has a 1500sec(25min) timeout, the benchmarks can sometimes take over 1500sec and cause a build failure for timeout. Jenkins currently doesn't upload the results of the benchmarks, so this is ok. Signed-off-by: amzn-sean <75276488+amzn-sean@users.noreply.github.com> --- Gems/PhysX/Code/CMakeLists.txt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Gems/PhysX/Code/CMakeLists.txt b/Gems/PhysX/Code/CMakeLists.txt index e2c3896356..1acfae3bfd 100644 --- a/Gems/PhysX/Code/CMakeLists.txt +++ b/Gems/PhysX/Code/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory(NumericalMethods) ly_get_list_relative_pal_filename(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME}) include(${pal_source_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_PHYSX_SUPPORTED +set(PHYSX_ENABLE_RUNNING_BENCHMARKS OFF CACHE BOOL "Adds a target to allow running of the physx benchmarks.") if(PAL_TRAIT_PHYSX_SUPPORTED) set(physx_dependency 3rdParty::PhysX) @@ -150,9 +151,6 @@ endif() # Tests ################################################################################ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) - - - ly_add_target( NAME PhysX.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} NAMESPACE Gem @@ -183,10 +181,16 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) ly_add_googletest( NAME Gem::PhysX.Tests ) - ly_add_googlebenchmark( - NAME Gem::PhysX.Benchmarks - TARGET Gem::PhysX.Tests - ) + + # Only add the physx benchmarks if this flag is set. The benchmark code is still built, as it is part of the PhysX.Tests project. + # Currently jenkins has a 1500sec(25min) timeout, our benchmarks can sometimes take over 1500sec and cause a build failure for timeout. + # Jenkins currently doesn't upload the results of the benchmarks, so this is ok. + if(PHYSX_ENABLE_RUNNING_BENCHMARKS) + ly_add_googlebenchmark( + NAME Gem::PhysX.Benchmarks + TARGET Gem::PhysX.Tests + ) + endif() list(APPEND testTargets PhysX.Tests) From 3321f9e5eaa131d6738d0e7410f4d127dc42fb94 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Mon, 4 Oct 2021 09:00:20 -0400 Subject: [PATCH 070/226] First google benchmarks for hierarchy logic. Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- Gems/Multiplayer/Code/CMakeLists.txt | 4 + .../Multiplayer/Components/NetBindComponent.h | 1 + .../NetworkHierarchyRootComponent.h | 2 + .../Code/Tests/CommonBenchmarkSetup.h | 640 ++++++++++++++++++ .../Code/Tests/ServerHierarchyBenchmarks.cpp | 118 ++++ .../Code/multiplayer_tests_files.cmake | 2 + 6 files changed, 767 insertions(+) create mode 100644 Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h create mode 100644 Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp diff --git a/Gems/Multiplayer/Code/CMakeLists.txt b/Gems/Multiplayer/Code/CMakeLists.txt index 49b404fb1c..909590a25d 100644 --- a/Gems/Multiplayer/Code/CMakeLists.txt +++ b/Gems/Multiplayer/Code/CMakeLists.txt @@ -179,6 +179,10 @@ if (PAL_TRAIT_BUILD_TESTS_SUPPORTED) ly_add_googletest( NAME Gem::Multiplayer.Tests ) + ly_add_googlebenchmark( + NAME Gem::Multiplayer.Benchmarks + TARGET Gem::Multiplayer.Tests + ) if (PAL_TRAIT_BUILD_HOST_TOOLS) ly_add_target( diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h index 743315e8bc..eea4a259f4 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetBindComponent.h @@ -201,6 +201,7 @@ namespace Multiplayer friend class EntityReplicationManager; friend class HierarchyTests; + friend class HierarchyBenchmarkBase; }; bool NetworkRoleHasController(NetEntityRole networkRole); diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h index 4c9f94c004..674dc6114d 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/Components/NetworkHierarchyRootComponent.h @@ -96,5 +96,7 @@ namespace Multiplayer //! Set to false when deactivating or otherwise not to be included in hierarchy considerations. bool m_isHierarchyEnabled = true; + + friend class HierarchyBenchmarkBase; }; } diff --git a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h new file mode 100644 index 0000000000..e0018e2f26 --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h @@ -0,0 +1,640 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#ifdef HAVE_BENCHMARK +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Multiplayer +{ + class BenchmarkComponentApplicationRequests : public AZ::ComponentApplicationRequests + { + public: + void RegisterComponentDescriptor([[maybe_unused]] const AZ::ComponentDescriptor* descriptor) override {} + void UnregisterComponentDescriptor([[maybe_unused]] const AZ::ComponentDescriptor* descriptor) override {} + AZ::ComponentApplication* GetApplication() override { return {}; } + void RegisterEntityAddedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityRemovedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityActivatedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void RegisterEntityDeactivatedEventHandler([[maybe_unused]] AZ::Event::Handler& handler) override {} + void SignalEntityActivated([[maybe_unused]] AZ::Entity* entity) override {} + void SignalEntityDeactivated([[maybe_unused]] AZ::Entity* entity) override {} + bool RemoveEntity([[maybe_unused]] AZ::Entity* entity) override { return {}; } + bool DeleteEntity([[maybe_unused]] const AZ::EntityId& id) override { return {}; } + void EnumerateEntities([[maybe_unused]] const EntityCallback& callback) override {} + AZ::SerializeContext* GetSerializeContext() override { return {}; } + AZ::BehaviorContext* GetBehaviorContext() override { return {}; } + AZ::JsonRegistrationContext* GetJsonRegistrationContext() override { return {}; } + const char* GetAppRoot() const override { return {}; } + const char* GetEngineRoot() const override { return {}; } + const char* GetExecutableFolder() const override { return {}; } + void QueryApplicationType([[maybe_unused]] AZ::ApplicationTypeQuery& appType) const override {} + + AZStd::map m_entities; + + bool AddEntity(AZ::Entity* entity) override + { + m_entities[entity->GetId()] = entity; + return true; + } + + AZ::Entity* FindEntity(const AZ::EntityId& id) override + { + const auto iterator = m_entities.find(id); + if (iterator != m_entities.end()) + { + return iterator->second; + } + + return nullptr; + } + }; + + + class BenchmarkConnectionListener : public AzNetworking::IConnectionListener + { + public: + ConnectResult ValidateConnect([[maybe_unused]] const IpAddress& remoteAddress, [[maybe_unused]] const IPacketHeader& packetHeader, [[maybe_unused]] ISerializer& serializer) override + { + return {}; + } + + void OnConnect([[maybe_unused]] IConnection* connection) override + { + } + + PacketDispatchResult OnPacketReceived([[maybe_unused]] IConnection* connection, [[maybe_unused]] const IPacketHeader& packetHeader, [[maybe_unused]] ISerializer& serializer) override + { + return {}; + } + + void OnPacketLost([[maybe_unused]] IConnection* connection, [[maybe_unused]] PacketId packetId) override + { + } + + void OnDisconnect([[maybe_unused]] IConnection* connection, [[maybe_unused]] DisconnectReason reason, [[maybe_unused]] TerminationEndpoint endpoint) override + { + } + }; + + class BenchmarkTime : public AZ::ITime + { + public: + AZ::TimeMs GetElapsedTimeMs() const override + { + return {}; + } + }; + + class BenchmarkNetworkTime : public Multiplayer::INetworkTime + { + public: + bool IsTimeRewound() const override + { + return false; + } + + HostFrameId GetHostFrameId() const override + { + return {}; + } + + HostFrameId GetUnalteredHostFrameId() const override + { + return {}; + } + + void IncrementHostFrameId() override + { + } + + AZ::TimeMs GetHostTimeMs() const override + { + return {}; + } + + float GetHostBlendFactor() const override + { + return 0; + } + + AzNetworking::ConnectionId GetRewindingConnectionId() const override + { + return {}; + } + + void ForceSetTime([[maybe_unused]] HostFrameId frameId, [[maybe_unused]] AZ::TimeMs timeMs) override + { + } + + void SyncEntitiesToRewindState([[maybe_unused]] const AZ::Aabb& rewindVolume) override + { + } + + void ClearRewoundEntities() override + { + } + + void AlterTime([[maybe_unused]] HostFrameId frameId, [[maybe_unused]] AZ::TimeMs timeMs, [[maybe_unused]] float blendFactor, [[maybe_unused]] AzNetworking::ConnectionId rewindConnectionId) override + { + } + }; + + class BenchmarkMultiplayerConnection : public IConnection + { + public: + BenchmarkMultiplayerConnection(ConnectionId connectionId, const IpAddress& address, [[maybe_unused]] ConnectionRole connectionRole) + : IConnection(connectionId, address) + { + ; + } + + ~BenchmarkMultiplayerConnection() override = default; + + bool SendReliablePacket([[maybe_unused]] const IPacket& packet) override + { + return false; + } + + PacketId SendUnreliablePacket([[maybe_unused]] const IPacket& packet) override + { + return {}; + } + + bool WasPacketAcked([[maybe_unused]] PacketId packetId) const override + { + return false; + } + + ConnectionState GetConnectionState() const override + { + return {}; + } + + ConnectionRole GetConnectionRole() const override + { + return {}; + } + + bool Disconnect([[maybe_unused]] DisconnectReason reason, [[maybe_unused]] TerminationEndpoint endpoint) override + { + return false; + } + + void SetConnectionMtu([[maybe_unused]] uint32_t connectionMtu) override + { + } + + uint32_t GetConnectionMtu() const override + { + return 0; + } + }; + + class BenchmarkNetworkEntityManager : public Multiplayer::INetworkEntityManager + { + public: + BenchmarkNetworkEntityManager() : m_authorityTracker(*this) {} + + NetworkEntityTracker* GetNetworkEntityTracker() override { return &m_tracker; } + NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override { return &m_authorityTracker; } + MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override { return &m_multiplayerComponentRegistry; } + HostId GetHostId() const override { return {}; } + EntityList CreateEntitiesImmediate( + [[maybe_unused]] const PrefabEntityId& prefabEntryId, + [[maybe_unused]] NetEntityRole netEntityRole, + [[maybe_unused]] const AZ::Transform& transform, + [[maybe_unused]] AutoActivate autoActivate) override { + return {}; + } + EntityList CreateEntitiesImmediate( + [[maybe_unused]] const PrefabEntityId& prefabEntryId, + [[maybe_unused]] NetEntityId netEntityId, + [[maybe_unused]] NetEntityRole netEntityRole, + [[maybe_unused]] AutoActivate autoActivate, + [[maybe_unused]] const AZ::Transform& transform) override { + return {}; + } + void SetupNetEntity( + [[maybe_unused]] AZ::Entity* netEntity, + [[maybe_unused]] PrefabEntityId prefabEntityId, + [[maybe_unused]] NetEntityRole netEntityRole) override {} + uint32_t GetEntityCount() const override { return {}; } + void MarkForRemoval( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) override {} + bool IsMarkedForRemoval( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) const override { + return {}; + } + void ClearEntityFromRemovalList( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle) override {} + void ClearAllEntities() override {} + void AddEntityMarkedDirtyHandler( + [[maybe_unused]] AZ::Event<>::Handler& entityMarkedDirtyHandle) override {} + void AddEntityNotifyChangesHandler( + [[maybe_unused]] AZ::Event<>::Handler& entityNotifyChangesHandle) override {} + void AddEntityExitDomainHandler( + [[maybe_unused]] EntityExitDomainEvent::Handler& entityExitDomainHandler) override {} + void AddControllersActivatedHandler( + [[maybe_unused]] ControllersActivatedEvent::Handler& controllersActivatedHandler) override {} + void AddControllersDeactivatedHandler( + [[maybe_unused]] ControllersDeactivatedEvent::Handler& controllersDeactivatedHandler) override {} + void NotifyEntitiesDirtied() override {} + void NotifyEntitiesChanged() override {} + void NotifyControllersActivated( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, + [[maybe_unused]] EntityIsMigrating entityIsMigrating) override {} + void NotifyControllersDeactivated( + [[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, + [[maybe_unused]] EntityIsMigrating entityIsMigrating) override {} + void HandleLocalRpcMessage( + [[maybe_unused]] NetworkEntityRpcMessage& message) override {} + + mutable AZStd::map m_networkEntityMap; + + NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) override + { + m_networkEntityMap[netEntityId] = entity; + return NetworkEntityHandle(entity, netEntityId, &m_tracker); + } + + ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override + { + AZ::Entity* entity = m_networkEntityMap[netEntityId]; + return ConstNetworkEntityHandle(entity, &m_tracker); + } + + NetEntityId GetNetEntityIdById(const AZ::EntityId& entityId) const override + { + for (const auto& pair : m_networkEntityMap) + { + if (pair.second->GetId() == entityId) + { + return pair.first; + } + } + + return InvalidNetEntityId; + } + + [[nodiscard]] AZStd::unique_ptr RequestNetSpawnableInstantiation( + [[maybe_unused]] const AZ::Data::Asset& netSpawnable, + [[maybe_unused]] const AZ::Transform& transform) override + { + return {}; + } + + NetworkEntityTracker m_tracker; + NetworkEntityAuthorityTracker m_authorityTracker; + MultiplayerComponentRegistry m_multiplayerComponentRegistry; + }; + + class BenchmarkMultiplayer : public Multiplayer::IMultiplayer + { + public: + BenchmarkMultiplayer(BenchmarkNetworkEntityManager& manager) : m_manager(manager) {} + + MultiplayerAgentType GetAgentType() const override { return {}; } + void InitializeMultiplayer([[maybe_unused]] MultiplayerAgentType state) override {} + bool StartHosting([[maybe_unused]] uint16_t port, [[maybe_unused]] bool isDedicated) override { return {}; } + bool Connect([[maybe_unused]] AZStd::string remoteAddress, [[maybe_unused]] uint16_t port) override { return {}; } + void Terminate([[maybe_unused]] AzNetworking::DisconnectReason reason) override {} + void AddClientDisconnectedHandler([[maybe_unused]] ClientDisconnectedEvent::Handler& handler) override {} + void AddConnectionAcquiredHandler([[maybe_unused]] ConnectionAcquiredEvent::Handler& handler) override {} + void AddSessionInitHandler([[maybe_unused]] SessionInitEvent::Handler& handler) override {} + void AddSessionShutdownHandler([[maybe_unused]] SessionShutdownEvent::Handler& handler) override {} + void SendReadyForEntityUpdates([[maybe_unused]] bool readyForEntityUpdates) override {} + AZ::TimeMs GetCurrentHostTimeMs() const override { return {}; } + float GetCurrentBlendFactor() const override { return {}; } + INetworkTime* GetNetworkTime() override { return {}; } + INetworkEntityManager* GetNetworkEntityManager() override { return &m_manager; } + void SetFilterEntityManager([[maybe_unused]] IFilterEntityManager* entityFilter) override {} + IFilterEntityManager* GetFilterEntityManager() override { return {}; } + + BenchmarkNetworkEntityManager& m_manager; + }; + + class HierarchyBenchmarkBase + : public benchmark::Fixture + , public AllocatorsBase + { + public: + void SetUp(const benchmark::State&) override + { + internalSetUp(); + } + void SetUp(benchmark::State&) override + { + internalSetUp(); + } + + void TearDown(const benchmark::State&) override + { + internalTearDown(); + } + void TearDown(benchmark::State&) override + { + internalTearDown(); + } + + virtual void internalSetUp() + { + SetupAllocator(); + AZ::NameDictionary::Create(); + + m_ComponentApplicationRequests = AZStd::make_unique(); + AZ::Interface::Register(m_ComponentApplicationRequests.get()); + + // register components involved in testing + m_serializeContext = AZStd::make_unique(); + + m_transformDescriptor.reset(AzFramework::TransformComponent::CreateDescriptor()); + m_transformDescriptor->Reflect(m_serializeContext.get()); + + m_netBindDescriptor.reset(NetBindComponent::CreateDescriptor()); + m_netBindDescriptor->Reflect(m_serializeContext.get()); + + m_hierarchyRootDescriptor.reset(NetworkHierarchyRootComponent::CreateDescriptor()); + m_hierarchyRootDescriptor->Reflect(m_serializeContext.get()); + + m_hierarchyChildDescriptor.reset(NetworkHierarchyChildComponent::CreateDescriptor()); + m_hierarchyChildDescriptor->Reflect(m_serializeContext.get()); + + m_netTransformDescriptor.reset(NetworkTransformComponent::CreateDescriptor()); + m_netTransformDescriptor->Reflect(m_serializeContext.get()); + + m_NetworkEntityManager = AZStd::make_unique(); + + m_Multiplayer = AZStd::make_unique(*m_NetworkEntityManager); + AZ::Interface::Register(m_Multiplayer.get()); + + // Create space for replication stats + // Without Multiplayer::RegisterMultiplayerComponents() the stats go to invalid id, which is fine for unit tests + GetMultiplayer()->GetStats().ReserveComponentStats(Multiplayer::InvalidNetComponentId, 50, 0); + + m_Time = AZStd::make_unique(); + AZ::Interface::Register(m_Time.get()); + + m_NetworkTime = AZStd::make_unique(); + AZ::Interface::Register(m_NetworkTime.get()); + + EXPECT_NE(AZ::Interface::Get()->GetNetworkEntityManager(), nullptr); + + const IpAddress address("localhost", 1, ProtocolType::Udp); + m_Connection = AZStd::make_unique(ConnectionId{ 1 }, address, ConnectionRole::Connector); + m_ConnectionListener = AZStd::make_unique(); + + m_entityReplicationManager = AZStd::make_unique(*m_Connection, *m_ConnectionListener, EntityReplicationManager::Mode::LocalClientToRemoteServer); + + m_console.reset(aznew AZ::Console()); + AZ::Interface::Register(m_console.get()); + m_console->LinkDeferredFunctors(AZ::ConsoleFunctorBase::GetDeferredHead()); + + RegisterMultiplayerComponents(); + } + + virtual void internalTearDown() + { + AZ::Interface::Unregister(m_console.get()); + m_console.reset(); + + m_entityReplicationManager.reset(); + + m_Connection.reset(); + m_ConnectionListener.reset(); + + AZ::Interface::Unregister(m_NetworkTime.get()); + AZ::Interface::Unregister(m_Time.get()); + AZ::Interface::Unregister(m_Multiplayer.get()); + AZ::Interface::Unregister(m_ComponentApplicationRequests.get()); + + m_Time.reset(); + + m_NetworkEntityManager.reset(); + m_Multiplayer.reset(); + + m_transformDescriptor.reset(); + m_netTransformDescriptor.reset(); + m_hierarchyRootDescriptor.reset(); + m_hierarchyChildDescriptor.reset(); + m_netBindDescriptor.reset(); + m_serializeContext.reset(); + m_ComponentApplicationRequests.reset(); + + AZ::NameDictionary::Destroy(); + TeardownAllocator(); + } + + AZStd::unique_ptr m_console; + + AZStd::unique_ptr m_ComponentApplicationRequests; + AZStd::unique_ptr m_serializeContext; + AZStd::unique_ptr m_transformDescriptor; + AZStd::unique_ptr m_netBindDescriptor; + AZStd::unique_ptr m_hierarchyRootDescriptor; + AZStd::unique_ptr m_hierarchyChildDescriptor; + AZStd::unique_ptr m_netTransformDescriptor; + + AZStd::unique_ptr m_Multiplayer; + AZStd::unique_ptr m_NetworkEntityManager; + AZStd::unique_ptr m_Time; + AZStd::unique_ptr m_NetworkTime; + + AZStd::unique_ptr m_Connection; + AZStd::unique_ptr m_ConnectionListener; + + AZStd::unique_ptr m_entityReplicationManager; + + void SetupEntity(const AZStd::unique_ptr& entity, NetEntityId netId, NetEntityRole role) + { + const auto netBindComponent = entity->FindComponent(); + EXPECT_NE(netBindComponent, nullptr); + netBindComponent->PreInit(entity.get(), PrefabEntityId{ AZ::Name("test"), 1 }, netId, role); + entity->Init(); + } + + static void StopEntity(const AZStd::unique_ptr& entity) + { + const auto netBindComponent = entity->FindComponent(); + EXPECT_NE(netBindComponent, nullptr); + netBindComponent->StopEntity(); + } + + static void StopAndDeactivateEntity(AZStd::unique_ptr& entity) + { + if (entity) + { + StopEntity(entity); + entity->Deactivate(); + entity.reset(); + } + } + + void CreateEntityWithRootHierarchy(AZStd::unique_ptr& rootEntity) + { + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + rootEntity->CreateComponent(); + } + + void CreateEntityWithChildHierarchy(AZStd::unique_ptr& childEntity) + { + childEntity->CreateComponent(); + childEntity->CreateComponent(); + childEntity->CreateComponent(); + childEntity->CreateComponent(); + } + + void SetParentIdOnNetworkTransform(const AZStd::unique_ptr& entity, NetEntityId netParentId) + { + /* Derived from NetworkTransformComponent.AutoComponent.xml */ + constexpr int totalBits = 6 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int parentIdBit = 4 /*NetworkTransformComponentInternal::AuthorityToClientDirtyEnum::parentEntityId_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(parentIdBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + inSerializer.Serialize(reinterpret_cast(netParentId), + "parentEntityId", /* Derived from NetworkTransformComponent.AutoComponent.xml */ + AZStd::numeric_limits::min(), AZStd::numeric_limits::max()); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + + template + void SetHierarchyRootFieldOnNetworkHierarchyChild(const AZStd::unique_ptr& entity, NetEntityId value) + { + /* Derived from NetworkHierarchyChildComponent.AutoComponent.xml */ + constexpr int totalBits = 1 /*NetworkHierarchyChildComponentInternal::AuthorityToClientDirtyEnum::Count*/; + constexpr int inHierarchyBit = 0 /*NetworkHierarchyChildComponentInternal::AuthorityToClientDirtyEnum::hierarchyRoot_DirtyFlag*/; + + ReplicationRecord currentRecord; + currentRecord.m_authorityToClient.AddBits(totalBits); + currentRecord.m_authorityToClient.SetBit(inHierarchyBit, true); + + constexpr uint32_t bufferSize = 100; + AZStd::array buffer = {}; + NetworkInputSerializer inSerializer(buffer.begin(), bufferSize); + inSerializer.Serialize(reinterpret_cast(value), + "hierarchyRoot", /* Derived from NetworkHierarchyChildComponent.AutoComponent.xml */ + AZStd::numeric_limits::min(), AZStd::numeric_limits::max()); + + NetworkOutputSerializer outSerializer(buffer.begin(), bufferSize); + + ReplicationRecord notifyRecord = currentRecord; + entity->FindComponent()->SerializeStateDeltaMessage(currentRecord, outSerializer); + entity->FindComponent()->NotifyStateDeltaChanges(notifyRecord); + } + + struct EntityInfo + { + enum class Role + { + Root, + Child, + None + }; + + EntityInfo(AZ::u64 entityId, const char* entityName, NetEntityId netId, Role role) + : m_entity(AZStd::make_unique(AZ::EntityId(entityId), entityName)) + , m_netId(netId) + , m_role(role) + { + } + + ~EntityInfo() + { + StopAndDeactivateEntity(m_entity); + } + + AZStd::unique_ptr m_entity; + NetEntityId m_netId; + AZStd::unique_ptr m_replicator; + Role m_role = Role::None; + }; + + void PopulateHierarchicalEntity(const EntityInfo& entityInfo) + { + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + entityInfo.m_entity->CreateComponent(); + switch (entityInfo.m_role) + { + case EntityInfo::Role::Root: + entityInfo.m_entity->CreateComponent(); + break; + case EntityInfo::Role::Child: + entityInfo.m_entity->CreateComponent(); + break; + case EntityInfo::Role::None: + break; + } + } + + void CreateParent(EntityInfo& parent) + { + PopulateHierarchicalEntity(parent); + + SetupEntity(parent.m_entity, parent.m_netId, NetEntityRole::Authority); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(parent.m_entity.get(), m_NetworkEntityManager->GetNetworkEntityTracker()); + parent.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_Connection.get(), NetEntityRole::Client, childHandle); + parent.m_replicator->Initialize(childHandle); + + parent.m_entity->Activate(); + } + + void CreateChildForParent(EntityInfo& child, EntityInfo& parent) + { + PopulateHierarchicalEntity(child); + + SetupEntity(child.m_entity, child.m_netId, NetEntityRole::Authority); + + // we need a parent-id value to be present in NetworkTransformComponent (which is in client mode and doesn't have a controller) + SetParentIdOnNetworkTransform(child.m_entity, parent.m_netId); + + // Create an entity replicator for the child entity + const NetworkEntityHandle childHandle(child.m_entity.get(), m_NetworkEntityManager->GetNetworkEntityTracker()); + child.m_replicator = AZStd::make_unique(*m_entityReplicationManager, m_Connection.get(), NetEntityRole::Client, childHandle); + child.m_replicator->Initialize(childHandle); + + child.m_entity->Activate(); + } + + void ForceRebuildHierarchy(const AZStd::unique_ptr& rootEntity) + { + if (NetworkHierarchyRootComponent* root = rootEntity->FindComponent()) + { + root->RebuildHierarchy(); + } + } + }; +} + +#endif diff --git a/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp new file mode 100644 index 0000000000..6a404bfa01 --- /dev/null +++ b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#ifdef HAVE_BENCHMARK +#include +#include + +namespace Multiplayer +{ + /* + * Hierarchy of 16 entities: Parent -> Child_2 -> .. -> Child_16 + */ + class ServerDeepHierarchyBenchmark : public HierarchyBenchmarkBase + { + public: + const NetEntityId RootNetEntityId = NetEntityId{ 1 }; + const NetEntityId ChildNetEntityId = NetEntityId{ 2 }; + const NetEntityId ChildOfChildNetEntityId = NetEntityId{ 3 }; + + void internalSetUp() override + { + HierarchyBenchmarkBase::internalSetUp(); + + m_root = AZStd::make_unique((1), "root", RootNetEntityId, EntityInfo::Role::Root); + CreateParent(*m_root); + + m_children = AZStd::make_unique>>(); + + EntityInfo* parent = m_root.get(); + for (int i = 0; i < 15; ++i) + { + m_children->push_back(AZStd::make_shared((i + 2), "child", ChildNetEntityId, EntityInfo::Role::Child)); + CreateChildForParent(*m_children->back(), *parent); + + m_children->back()->m_entity->FindComponent()->SetParent(parent->m_entity->GetId()); + parent = m_children->back().get(); + } + } + + void internalTearDown() override + { + m_children.reset(); + m_root.reset(); + + HierarchyBenchmarkBase::internalTearDown(); + } + + AZStd::unique_ptr m_root; + AZStd::unique_ptr>> m_children; + }; + + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchy)(benchmark::State& state) + { + for ([[maybe_unused]] auto value : state) + { + ForceRebuildHierarchy(m_root->m_entity); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchy) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddLastChild)(benchmark::State& state) + { + const AZ::EntityId parentOfLastChild = m_children->at(m_children->size() - 2)->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->back()->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->back()->m_entity->FindComponent()->SetParent(parentOfLastChild); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddLastChild) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddMiddleChild)(benchmark::State& state) + { + const AZ::EntityId parentOfMiddleChild = m_children->at(4)->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->at(5)->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->at(5)->m_entity->FindComponent()->SetParent(parentOfMiddleChild); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddMiddleChild) + ->Unit(benchmark::kMicrosecond) + ; + + // Should be roughly twice the time of @RebuildHierarchy benchmark + BENCHMARK_DEFINE_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddFirstChild)(benchmark::State& state) + { + const AZ::EntityId rootId = m_children->front()->m_entity->GetId(); + + for ([[maybe_unused]] auto value : state) + { + m_children->at(1)->m_entity->FindComponent()->SetParent(AZ::EntityId()); + m_children->at(1)->m_entity->FindComponent()->SetParent(rootId); + } + } + + BENCHMARK_REGISTER_F(ServerDeepHierarchyBenchmark, RebuildHierarchyRemoveAndAddFirstChild) + ->Unit(benchmark::kMicrosecond) + ; +} + +#endif diff --git a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake index 93fb807b66..2114143b68 100644 --- a/Gems/Multiplayer/Code/multiplayer_tests_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_tests_files.cmake @@ -8,7 +8,9 @@ set(FILES Tests/ClientHierarchyTests.cpp + Tests/ServerHierarchyBenchmarks.cpp Tests/CommonHierarchySetup.h + Tests/CommonBenchmarkSetup.h Tests/IMultiplayerConnectionMock.h Tests/Main.cpp Tests/MockInterfaces.h From 9786d63596ec5ef7beb313a8113d9f80548be214 Mon Sep 17 00:00:00 2001 From: Adi Bar-Lev <82479970+Adi-Amazon@users.noreply.github.com> Date: Mon, 4 Oct 2021 10:46:31 -0400 Subject: [PATCH 071/226] Hair - Hair Gem introduction to O3DE from Atom/barlev/AtomTressFX_DevRebase (#4439) * Hair - First introduction of Hair gem to Atom and O3DE - The hair technology is based off TressFX 4.1 - These are some of the areas we enhanced the original TressFX implementation: - Lighting model was replaced and we now use a modified Marschner model - Blending is done directly with the back buffer removing the silhouette of the original implementation - Hair depth / thickness is now calculated to remove incorrect back lighting (TT lobe in the Marschner model) - Thickness corrected to handle hair gaps hence introducing better light passage for the TT - The hair is fully integrated into the Atom pipeline and structure design - Usage of single shared buffer for the computer buffers reduces barriers sync overhead Remarks: - Collisions via SDF compute are to be introduced soon - Improved shortcut rendering method ala Eidos Montreal to be introduced soon Signed-off-by: Adi-Amazon * Hair - code clean pass Signed-off-by: Adi-Amazon * Hair - EMFX Actor visibility implementation Signed-off-by: Adi-Amazon * Hair - COnnecting hair passes to Atom's MainPipeline.pass Signed-off-by: Adi-Amazon * Hair - adding dedicated thumbnail pipeline that does not include the hair gem Signed-off-by: Adi-Amazon * Hair - changed Atom shader files to allow hooking the hair to the lighting data structures Signed-off-by: Adi-Amazon * Hair - fixed a few headers to have the latest O3DE license + verification fixes Signed-off-by: Adi-Amazon * Hair - enabling editor component only when tool pipline is built + default texture add Signed-off-by: Adi-Amazon * Hair - fixing Linux and Android compilation builds Signed-off-by: Adi-Amazon * Hair - another files change to make Linux compile Signed-off-by: Adi-Amazon * Hair - more Linux and Android build fixes Signed-off-by: Adi-Amazon * Hair - Adding usage of fallback white texture - Removing invalid null assignments into vectors - Removing redundant mutex preventing deletion on some platforms Signed-off-by: Adi-Amazon * Hair - Shame: removed forgoten #pragma optimize - Adding header complained by Android Signed-off-by: Adi-Amazon * Hair - removing the Hair Gem connection in the active project. - This submission removes the connection to the active project hence allowing to run without the Gem. Enable the passes in MainPipeline.pass and declare them again when you want to use the Gem. Remark: the gem file PassTemplates.azasset was renamed and will be connected via code in the future to avoid the need to declare in the global pass template. Signed-off-by: Adi-Amazon * Hair - registrating gem pass templates through the gem templates file (#198) * Hair - registrating gem pass templates through the gem templates file Signed-off-by: Adi-Amazon * Hair - adding handler disconnect for the pass template registration. Signed-off-by: Adi-Amazon * Hair - PPLLIndexCounter buffer going data driven via the pass declarations (#202) * Hair - PPLLIndexCounter buffer going data driven via the pass declaration - Moving PPLLIndexCounter from code allocation and attachment to be data driven - Fixed RPI typo bug that can prevent using buffers like that Signed-off-by: Adi-Amazon * Hair - fixing UI Editor (LYShine) crash (#209) Signed-off-by: Adi-Amazon * [Hair - resolved the multi pipeline mismatches and crashes + cleaned initialization & leftovers (#222) * [Hair] - multiple render pipelines handling Signed-off-by: Adi-Amazon * [Hair] - Shut down order is handle to allow hair feature processor be deregistered only after the bootstrap component has disabled it Signed-off-by: Adi-Amazon * [Hair] - minor cleanups Signed-off-by: Adi-Amazon * [Hair] - followups from review nits Signed-off-by: Adi-Amazon * Hair - code fixes based on the CR remarks for the Hair merge to Dev (#248) * Hair - First introduction of Hair gem to Atom and O3DE - The hair technology is based off TressFX 4.1 - These are some of the areas we enhanced the original TressFX implementation: - Lighting model was replaced and we now use a modified Marschner model - Blending is done directly with the back buffer removing the silhouette of the original implementation - Hair depth / thickness is now calculated to remove incorrect back lighting (TT lobe in the Marschner model) - Thickness corrected to handle hair gaps hence introducing better light passage for the TT - The hair is fully integrated into the Atom pipeline and structure design - Usage of single shared buffer for the computer buffers reduces barriers sync overhead Remarks: - Collisions via SDF compute are to be introduced soon - Improved shortcut rendering method ala Eidos Montreal to be introduced soon Signed-off-by: Adi-Amazon * Hair - code clean pass Signed-off-by: Adi-Amazon * Hair - EMFX Actor visibility implementation Signed-off-by: Adi-Amazon * Hair - COnnecting hair passes to Atom's MainPipeline.pass Signed-off-by: Adi-Amazon * Hair - adding dedicated thumbnail pipeline that does not include the hair gem Signed-off-by: Adi-Amazon * Hair - changed Atom shader files to allow hooking the hair to the lighting data structures Signed-off-by: Adi-Amazon * Hair - fixed a few headers to have the latest O3DE license + verification fixes Signed-off-by: Adi-Amazon * Hair - enabling editor component only when tool pipline is built + default texture add Signed-off-by: Adi-Amazon * Hair - fixing Linux and Android compilation builds Signed-off-by: Adi-Amazon * Hair - another files change to make Linux compile Signed-off-by: Adi-Amazon * Hair - more Linux and Android build fixes Signed-off-by: Adi-Amazon * Hair - Adding usage of fallback white texture - Removing invalid null assignments into vectors - Removing redundant mutex preventing deletion on some platforms Signed-off-by: Adi-Amazon * Hair - Shame: removed forgoten #pragma optimize - Adding header complained by Android Signed-off-by: Adi-Amazon * Hair - removing the Hair Gem connection in the active project. - This submission removes the connection to the active project hence allowing to run without the Gem. Enable the passes in MainPipeline.pass and declare them again when you want to use the Gem. Remark: the gem file PassTemplates.azasset was renamed and will be connected via code in the future to avoid the need to declare in the global pass template. Signed-off-by: Adi-Amazon * Hair - registrating gem pass templates through the gem templates file (#198) * Hair - registrating gem pass templates through the gem templates file Signed-off-by: Adi-Amazon * Hair - adding handler disconnect for the pass template registration. Signed-off-by: Adi-Amazon * Hair - PPLLIndexCounter buffer going data driven via the pass declarations (#202) * Hair - PPLLIndexCounter buffer going data driven via the pass declaration - Moving PPLLIndexCounter from code allocation and attachment to be data driven - Fixed RPI typo bug that can prevent using buffers like that Signed-off-by: Adi-Amazon * Hair - fixing UI Editor (LYShine) crash (#209) Signed-off-by: Adi-Amazon * [Hair - resolved the multi pipeline mismatches and crashes + cleaned initialization & leftovers (#222) * [Hair] - multiple render pipelines handling Signed-off-by: Adi-Amazon * [Hair] - Shut down order is handle to allow hair feature processor be deregistered only after the bootstrap component has disabled it Signed-off-by: Adi-Amazon * [Hair] - minor cleanups Signed-off-by: Adi-Amazon * [Hair] - followups from review nits Signed-off-by: Adi-Amazon * Hair - last fixes based on CR remarks Signed-off-by: Adi-Amazon * Hair - fixing AR Signed-off-by: Adi-Amazon --- .../Code/Source/BootstrapSystemComponent.cpp | 1 + .../Assets/Passes/PassTemplates.azasset | 8 + .../Assets/Passes/ThumbnailPipeline.pass | 463 + .../ThumbnailPipelineRenderToTexture.pass | 32 + .../Atom/Features/PBR/LightingOptions.azsli | 6 +- .../Atom/Features/PBR/Lights/Lights.azsli | 1 + .../PBR/Lights/SimplePointLight.azsli | 2 +- .../Features/Shadow/ProjectedShadow.azsli | 1 - .../atom_feature_common_asset_files.cmake | 2 + .../RPI/Assets/ShaderLib/Atom/RPI/Math.azsli | 33 + .../Source/RPI.Public/Pass/PassLibrary.cpp | 2 +- .../ThumbnailRendererSteps/InitializeStep.cpp | 2 +- Gems/AtomTressFX/.gitattributes | 4 + Gems/AtomTressFX/.gitignore | 4 + Gems/AtomTressFX/Assets/DefaultWhite.png | 3 + .../Passes/AtomTressFX_MainPipeline.pass | 552 + .../Passes/AtomTressFX_PassTemplates.azasset | 45 + .../HairCalculateStrandLevelDataCompute.pass | 30 + .../Assets/Passes/HairFillPPLL.pass | 130 + .../HairGlobalShapeConstraintsCompute.pass | 30 + ...gthConstraintsWindAndCollisionCompute.pass | 30 + .../HairLocalShapeConstraintsCompute.pass | 30 + .../Assets/Passes/HairParentPass.pass | 347 + .../Assets/Passes/HairResolvePPLL.pass | 150 + .../Passes/HairUpdateFollowHairCompute.pass | 30 + .../HairVelocityShockPropagationCompute.pass | 30 + ...HairCalculateStrandLevelDataCompute.shader | 14 + .../HairGlobalShapeConstraintsCompute.shader | 14 + ...hConstraintsWindAndCollisionCompute.shader | 14 + .../Assets/Shaders/HairLightTypes.azsli | 495 + .../Assets/Shaders/HairLighting.azsli | 275 + .../Shaders/HairLightingEquations.azsli | 244 + .../HairLocalShapeConstraintsCompute.shader | 14 + .../Assets/Shaders/HairRenderingFillPPLL.azsl | 233 + .../Shaders/HairRenderingFillPPLL.shader | 43 + .../Shaders/HairRenderingResolvePPLL.azsl | 394 + .../Shaders/HairRenderingResolvePPLL.shader | 42 + .../Assets/Shaders/HairRenderingSrgs.azsli | 203 + .../Assets/Shaders/HairSimulationCommon.azsli | 444 + .../Assets/Shaders/HairSimulationCompute.azsl | 437 + .../Assets/Shaders/HairSimulationSrgs.azsli | 179 + .../AtomTressFX/Assets/Shaders/HairSrgs.azsli | 217 + .../Assets/Shaders/HairStrands.azsli | 182 + .../Assets/Shaders/HairSurface.azsli | 80 + .../HairUpdateFollowHairCompute.shader | 14 + .../Assets/Shaders/HairUtilities.azsli | 167 + ...HairVelocityShockPropagationCompute.shader | 14 + .../TestData/DefaultHairColorWithNoise.tga | 3 + .../test_hair_bone_chain_head_style.fbx | 3 + .../test_hair_bone_chain_head_style.mb | 3 + .../test_hair_bone_chain_head_style.tfx | 3 + .../test_hair_bone_chain_head_style.tfxbone | 3 + .../test_hair_bone_chain_head_style.tfxmesh | 3 + ...r_bone_chain_head_style__hair_test_01.xgen | 89546 ++++++++++++++++ .../Assets/TestData/StrandAlbedo.png | 3 + .../Assets/TestData/test_hair_basecolor.png | 3 + .../TestData/test_hair_skin_basecolor.png | 3 + Gems/AtomTressFX/CMakeLists.txt | 154 + Gems/AtomTressFX/Code/Assets/HairAsset.cpp | 40 + Gems/AtomTressFX/Code/Assets/HairAsset.h | 57 + .../Code/Builders/HairAssetBuilder.cpp | 173 + .../Code/Builders/HairAssetBuilder.h | 39 + .../Code/Builders/HairBuilderComponent.cpp | 67 + .../Code/Builders/HairBuilderComponent.h | 51 + .../Code/Builders/HairBuilderModule.cpp | 31 + .../Code/Builders/HairBuilderModule.h | 35 + .../Code/Components/EditorHairComponent.cpp | 149 + .../Code/Components/EditorHairComponent.h | 67 + Gems/AtomTressFX/Code/Components/HairBus.h | 36 + .../Code/Components/HairComponent.cpp | 60 + .../Code/Components/HairComponent.h | 47 + .../Code/Components/HairComponentConfig.cpp | 47 + .../Code/Components/HairComponentConfig.h | 62 + .../Components/HairComponentController.cpp | 374 + .../Code/Components/HairComponentController.h | 124 + .../Code/Components/HairSystemComponent.cpp | 95 + .../Code/Components/HairSystemComponent.h | 54 + Gems/AtomTressFX/Code/HairModule.cpp | 47 + Gems/AtomTressFX/Code/HairModule.h | 37 + .../Code/HairModuleUnsupported.cpp | 11 + .../Code/Passes/HairPPLLRasterPass.cpp | 320 + .../Code/Passes/HairPPLLRasterPass.h | 116 + .../Code/Passes/HairPPLLResolvePass.cpp | 142 + .../Code/Passes/HairPPLLResolvePass.h | 73 + .../Code/Passes/HairParentPass.cpp | 55 + Gems/AtomTressFX/Code/Passes/HairParentPass.h | 47 + .../Code/Passes/HairSkinningComputePass.cpp | 269 + .../Code/Passes/HairSkinningComputePass.h | 113 + .../Code/Rendering/HairBuffersSemantics.h | 57 + .../AtomTressFX/Code/Rendering/HairCommon.cpp | 195 + Gems/AtomTressFX/Code/Rendering/HairCommon.h | 208 + .../Code/Rendering/HairDispatchItem.cpp | 61 + .../Code/Rendering/HairDispatchItem.h | 74 + .../Code/Rendering/HairFeatureProcessor.cpp | 532 + .../Code/Rendering/HairFeatureProcessor.h | 206 + .../Code/Rendering/HairGlobalSettings.cpp | 63 + .../Code/Rendering/HairGlobalSettings.h | 44 + .../Code/Rendering/HairGlobalSettingsBus.h | 48 + .../Code/Rendering/HairLightingModels.h | 25 + .../Code/Rendering/HairRenderObject.cpp | 1209 + .../Code/Rendering/HairRenderObject.h | 388 + .../Rendering/HairSharedBufferInterface.h | 128 + .../Code/Rendering/SharedBuffer.cpp | 258 + .../AtomTressFX/Code/Rendering/SharedBuffer.h | 147 + .../External/Assets/Objects/MissingAssets.txt | 2 + Gems/AtomTressFX/External/CMakeLists.txt | 2 + Gems/AtomTressFX/External/Code/CMakeLists.txt | 8 + Gems/AtomTressFX/External/Code/README.md | 117 + .../External/Code/libs/Cauldron - read me.txt | 4 + .../{ => External}/Code/license.txt | 0 .../External/Code/src/CMakeLists.txt | 8 + .../External/Code/src/DX12/CMakeLists.txt | 5 + .../Code/src/DX12/DX12EngineInterfaceImpl.cpp | 1658 + .../Code/src/DX12/DX12EngineInterfaceImpl.h | 338 + .../External/Code/src/EngineInterface.h | 286 + .../External/Code/src/HairStrands.cpp | 103 + .../External/Code/src/HairStrands.h | 69 + .../External/Code/src/MarchingCubesTables.h | 235 + .../External/Code/src/Math/CMakeLists.txt | 14 + .../External/Code/src/Math/Color.h | 70 + .../External/Code/src/Math/Matrix33.cpp | 378 + .../External/Code/src/Math/Matrix33.h | 103 + .../External/Code/src/Math/Matrix44.cpp | 244 + .../External/Code/src/Math/Matrix44.h | 79 + .../External/Code/src/Math/Quaternion.cpp | 291 + .../External/Code/src/Math/Quaternion.h | 90 + .../External/Code/src/Math/Transform.cpp | 86 + .../External/Code/src/Math/Transform.h | 59 + .../External/Code/src/Math/Vector3D.cpp | 191 + .../External/Code/src/Math/Vector3D.h | 116 + Gems/AtomTressFX/External/Code/src/SDF.cpp | 96 + Gems/AtomTressFX/External/Code/src/SDF.h | 70 + .../External/Code/src/SceneGLTFImpl.cpp | 228 + .../External/Code/src/SceneGLTFImpl.h | 106 + .../Code/src/Shaders/FullScreenRender.hlsl | 61 + .../Code/src/Shaders/TressFXBoneSkinning.hlsl | 140 + .../TressFXBoneSkinningVisualization.hlsl | 88 + .../Code/src/Shaders/TressFXLighting.hlsl | 303 + .../src/Shaders/TressFXMarchingCubes.hlsl | 313 + .../Code/src/Shaders/TressFXPPLL.hlsl | 395 + .../Code/src/Shaders/TressFXRendering.hlsl | 133 + .../Code/src/Shaders/TressFXSDFCollision.hlsl | 717 + .../Code/src/Shaders/TressFXShadow.hlsl | 59 + .../Code/src/Shaders/TressFXShortCut.hlsl | 281 + .../Code/src/Shaders/TressFXSimulation.hlsl | 1199 + .../Code/src/Shaders/TressFXStrands.hlsl | 161 + .../Code/src/Shaders/TressFXUtilities.hlsl | 119 + .../External/Code/src/Simulation.cpp | 146 + .../External/Code/src/Simulation.h | 59 + .../External/Code/src/TressFX/AMD_TressFX.cpp | 37 + .../External/Code/src/TressFX/AMD_TressFX.h | 55 + .../External/Code/src/TressFX/AMD_Types.h | 91 + .../External/Code/src/TressFX/CMakeLists.txt | 29 + .../Code/src/TressFX/TressFXAsset.cpp | 986 + .../External/Code/src/TressFX/TressFXAsset.h | 187 + .../Code/src/TressFX/TressFXBoneSkinning.cpp | 522 + .../Code/src/TressFX/TressFXBoneSkinning.h | 138 + .../External/Code/src/TressFX/TressFXCommon.h | 258 + .../Code/src/TressFX/TressFXConstantBuffers.h | 258 + .../Code/src/TressFX/TressFXFileFormat.h | 66 + .../Code/src/TressFX/TressFXHairObject.cpp | 607 + .../Code/src/TressFX/TressFXHairObject.h | 193 + .../Code/src/TressFX/TressFXLayouts.cpp | 332 + .../Code/src/TressFX/TressFXLayouts.h | 91 + .../External/Code/src/TressFX/TressFXPPLL.cpp | 315 + .../External/Code/src/TressFX/TressFXPPLL.h | 98 + .../Code/src/TressFX/TressFXSDFCollision.cpp | 221 + .../Code/src/TressFX/TressFXSDFCollision.h | 126 + .../TressFX/TressFXSDFInputMeshInterface.h | 57 + .../src/TressFX/TressFXSDFMarchingCubes.cpp | 233 + .../src/TressFX/TressFXSDFMarchingCubes.h | 119 + .../Code/src/TressFX/TressFXSettings.cpp | 339 + .../Code/src/TressFX/TressFXSettings.h | 146 + .../Code/src/TressFX/TressFXShortCut.cpp | 488 + .../Code/src/TressFX/TressFXShortCut.h | 110 + .../Code/src/TressFX/TressFXSimulation.cpp | 141 + .../Code/src/TressFX/TressFXSimulation.h | 54 + .../External/Code/src/TressFXSample.cpp | 960 + .../External/Code/src/TressFXSample.h | 192 + .../External/Code/src/VK/CMakeLists.txt | 5 + .../Code/src/VK/VKEngineInterfaceImpl.cpp | 1623 + .../Code/src/VK/VKEngineInterfaceImpl.h | 305 + .../External/Code/src/org_CMakeLists_org.txt | 78 + .../External/Tools/Maya/TressFX_Exporter.py | 2084 + Gems/AtomTressFX/External/license.txt | 19 + Gems/AtomTressFX/Hair_builders_files.cmake | 14 + .../Hair_builders_shared_files.cmake | 12 + Gems/AtomTressFX/Hair_files.cmake | 149 + Gems/AtomTressFX/Hair_shared_files.cmake | 17 + Gems/AtomTressFX/Tools/Launch_Cmd.bat | 43 + Gems/AtomTressFX/Tools/Launch_Maya_2020.bat | 80 + .../Tools/Maya/TressFX_Exporter.py | 7 +- Gems/AtomTressFX/Tools/Project_Env.bat | 82 + Gems/AtomTressFX/gem.json | 2 +- Gems/AtomTressFX/workspace.mel | 89 + .../Include/Integration/ActorComponentBus.h | 1 + .../Integration/Components/ActorComponent.cpp | 9 + .../Integration/Components/ActorComponent.h | 1 + .../Components/EditorActorComponent.cpp | 8 + .../Editor/Components/EditorActorComponent.h | 1 + 200 files changed, 123192 insertions(+), 11 deletions(-) create mode 100644 Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass create mode 100644 Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass create mode 100644 Gems/AtomTressFX/.gitattributes create mode 100644 Gems/AtomTressFX/.gitignore create mode 100644 Gems/AtomTressFX/Assets/DefaultWhite.png create mode 100644 Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset create mode 100644 Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairParentPass.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli create mode 100644 Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader create mode 100644 Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh create mode 100644 Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen create mode 100644 Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png create mode 100644 Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png create mode 100644 Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png create mode 100644 Gems/AtomTressFX/Code/Assets/HairAsset.cpp create mode 100644 Gems/AtomTressFX/Code/Assets/HairAsset.h create mode 100644 Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp create mode 100644 Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h create mode 100644 Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp create mode 100644 Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h create mode 100644 Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp create mode 100644 Gems/AtomTressFX/Code/Builders/HairBuilderModule.h create mode 100644 Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp create mode 100644 Gems/AtomTressFX/Code/Components/EditorHairComponent.h create mode 100644 Gems/AtomTressFX/Code/Components/HairBus.h create mode 100644 Gems/AtomTressFX/Code/Components/HairComponent.cpp create mode 100644 Gems/AtomTressFX/Code/Components/HairComponent.h create mode 100644 Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp create mode 100644 Gems/AtomTressFX/Code/Components/HairComponentConfig.h create mode 100644 Gems/AtomTressFX/Code/Components/HairComponentController.cpp create mode 100644 Gems/AtomTressFX/Code/Components/HairComponentController.h create mode 100644 Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp create mode 100644 Gems/AtomTressFX/Code/Components/HairSystemComponent.h create mode 100644 Gems/AtomTressFX/Code/HairModule.cpp create mode 100644 Gems/AtomTressFX/Code/HairModule.h create mode 100644 Gems/AtomTressFX/Code/HairModuleUnsupported.cpp create mode 100644 Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp create mode 100644 Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h create mode 100644 Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp create mode 100644 Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h create mode 100644 Gems/AtomTressFX/Code/Passes/HairParentPass.cpp create mode 100644 Gems/AtomTressFX/Code/Passes/HairParentPass.h create mode 100644 Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp create mode 100644 Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairCommon.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/HairCommon.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairLightingModels.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/HairRenderObject.h create mode 100644 Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h create mode 100644 Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp create mode 100644 Gems/AtomTressFX/Code/Rendering/SharedBuffer.h create mode 100644 Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt create mode 100644 Gems/AtomTressFX/External/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/README.md create mode 100644 Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt rename Gems/AtomTressFX/{ => External}/Code/license.txt (100%) create mode 100644 Gems/AtomTressFX/External/Code/src/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h create mode 100644 Gems/AtomTressFX/External/Code/src/EngineInterface.h create mode 100644 Gems/AtomTressFX/External/Code/src/HairStrands.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/HairStrands.h create mode 100644 Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Color.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Matrix33.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Matrix44.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Quaternion.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Transform.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Transform.h create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Math/Vector3D.h create mode 100644 Gems/AtomTressFX/External/Code/src/SDF.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/SDF.h create mode 100644 Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl create mode 100644 Gems/AtomTressFX/External/Code/src/Simulation.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/Simulation.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h create mode 100644 Gems/AtomTressFX/External/Code/src/TressFXSample.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/TressFXSample.h create mode 100644 Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt create mode 100644 Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp create mode 100644 Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h create mode 100644 Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt create mode 100644 Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py create mode 100644 Gems/AtomTressFX/External/license.txt create mode 100644 Gems/AtomTressFX/Hair_builders_files.cmake create mode 100644 Gems/AtomTressFX/Hair_builders_shared_files.cmake create mode 100644 Gems/AtomTressFX/Hair_files.cmake create mode 100644 Gems/AtomTressFX/Hair_shared_files.cmake create mode 100644 Gems/AtomTressFX/Tools/Launch_Cmd.bat create mode 100644 Gems/AtomTressFX/Tools/Launch_Maya_2020.bat create mode 100644 Gems/AtomTressFX/Tools/Project_Env.bat create mode 100644 Gems/AtomTressFX/workspace.mel diff --git a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp index 1349bc34f9..8f2ff264e5 100644 --- a/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp +++ b/Gems/Atom/Bootstrap/Code/Source/BootstrapSystemComponent.cpp @@ -88,6 +88,7 @@ namespace AZ dependent.push_back(AZ_CRC("CoreLightsService", 0x91932ef6)); dependent.push_back(AZ_CRC("DynamicDrawService", 0x023c1673)); dependent.push_back(AZ_CRC("CommonService", 0x6398eec4)); + dependent.push_back(AZ_CRC_CE("HairService")); } void BootstrapSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) diff --git a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset index 4e38717d31..76285b00c7 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset +++ b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset @@ -468,6 +468,14 @@ "Name": "OpaqueParentTemplate", "Path": "Passes/OpaqueParent.pass" }, + { + "Name": "ThumbnailPipeline", + "Path": "Passes/ThumbnailPipeline.pass" + }, + { + "Name": "ThumbnailPipelineRenderToTexture", + "Path": "Passes/ThumbnailPipelineRenderToTexture.pass" + }, { "Name": "TransparentParentTemplate", "Path": "Passes/TransparentParent.pass" diff --git a/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass new file mode 100644 index 0000000000..932b6ac435 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipeline.pass @@ -0,0 +1,463 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "ThumbnailPipeline", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "SwapChainOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + } + ], + "PassRequests": [ + { + "Name": "MorphTargetPass", + "TemplateName": "MorphTargetPassTemplate" + }, + { + "Name": "SkinningPass", + "TemplateName": "SkinningPassTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshOutputStream", + "AttachmentRef": { + "Pass": "MorphTargetPass", + "Attachment": "MorphTargetDeltaOutput" + } + } + ] + }, + { + "Name": "RayTracingAccelerationStructurePass", + "TemplateName": "RayTracingAccelerationStructurePassTemplate" + }, + { + "Name": "DiffuseProbeGridUpdatePass", + "TemplateName": "DiffuseProbeGridUpdatePassTemplate", + "ExecuteAfter": [ + "RayTracingAccelerationStructurePass" + ] + }, + { + "Name": "DepthPrePass", + "TemplateName": "DepthMSAAParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "MotionVectorPass", + "TemplateName": "MotionVectorParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "LightCullingPass", + "TemplateName": "LightCullingParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "DepthMSAA", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "ShadowPass", + "TemplateName": "ShadowParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "OpaquePass", + "TemplateName": "OpaqueParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "TransparentPass", + "TemplateName": "TransparentParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + } + ] + }, + { + "Name": "DeferredFogPass", + "TemplateName": "DeferredFogPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "InputDepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "TransparentPass", + "Attachment": "InputOutput" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + "FilePath": "Shaders/ScreenSpace/DeferredFog.shader" + }, + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "ReflectionCopyFrameBufferPass", + "TemplateName": "ReflectionCopyFrameBufferPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "PostProcessPass", + "TemplateName": "PostProcessParentTemplate", + "Connections": [ + { + "LocalSlot": "LightingInput", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "MotionVectors", + "AttachmentRef": { + "Pass": "MotionVectorPass", + "Attachment": "MotionVectorOutput" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "AuxGeomPass", + "TemplateName": "AuxGeomPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "ColorInputOutput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "auxgeom", + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "DebugOverlayPass", + "TemplateName": "DebugOverlayParentTemplate", + "Connections": [ + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "RawLightingInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "RawLightingOutput" + } + }, + { + "LocalSlot": "LuminanceMipChainInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "LuminanceMipChainOutput" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "AuxGeomPass", + "Attachment": "ColorInputOutput" + } + } + ] + }, + { + "Name": "UIPass", + "TemplateName": "UIParentTemplate", + "Connections": [ + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "DebugOverlayPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + } + ] + }, + { + "Name": "CopyToSwapChain", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "UIPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + } + ] + } + } +} diff --git a/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass new file mode 100644 index 0000000000..11e2cb717a --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/ThumbnailPipelineRenderToTexture.pass @@ -0,0 +1,32 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "ThumbnailPipelineRenderToTexture", + "PassClass": "RenderToTexturePass", + "PassData": { + "$type": "RenderToTexturePassData", + "OutputWidth": 512, + "OutputHeight": 512, + "OutputFormat": "R8G8B8A8_UNORM" + }, + "PassRequests": [ + { + "Name": "Pipeline", + "TemplateName": "ThumbnailPipeline", + "Connections": [ + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Output" + } + } + ] + } + ] + } + } +} diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli index 712761602a..f807acc374 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/LightingOptions.azsli @@ -8,14 +8,14 @@ #pragma once -option bool o_specularF0_enableMultiScatterCompensation; +option bool o_specularF0_enableMultiScatterCompensation = true; option bool o_enableShadows = true; option bool o_enableDirectionalLights = true; option bool o_enablePunctualLights = true; option bool o_enableAreaLights = true; option bool o_enableIBL = true; -option bool o_enableSubsurfaceScattering; -option bool o_clearCoat_feature_enabled; +option bool o_enableSubsurfaceScattering = false; +option bool o_clearCoat_feature_enabled = false; option enum class TransmissionMode {None, ThickObject, ThinObject} o_transmission_mode; option bool o_meshUseForwardPassIBLSpecular = false; option bool o_materialUseForwardPassIBLSpecular = false; diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli index 2f39c3a049..99e0d1372f 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/Lights.azsli @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli index 2bdaf71e27..0b761fff8f 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/PBR/Lights/SimplePointLight.azsli @@ -8,7 +8,7 @@ #pragma once -#include +#include void ApplySimplePointLight(ViewSrg::SimplePointLight light, Surface surface, inout LightingData lightingData) { diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli index 899fbb1553..b91d0ce915 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/Shadow/ProjectedShadow.azsli @@ -10,7 +10,6 @@ #include #include -#include #include #include #include "BicubicPcfFilters.azsli" diff --git a/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake b/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake index c8f99cdb24..60614993b5 100644 --- a/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake +++ b/Gems/Atom/Feature/Common/Assets/atom_feature_common_asset_files.cmake @@ -160,6 +160,8 @@ set(FILES Passes/LuminanceHistogramGenerator.pass Passes/MainPipeline.pass Passes/MainPipelineRenderToTexture.pass + Passes/ThumbnailPipeline.pass + Passes/ThumbnailPipelineRenderToTexture.pass Passes/MeshMotionVector.pass Passes/ModulateTexture.pass Passes/MorphTarget.pass diff --git a/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli b/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli index b004623c4e..80f8a6cc36 100644 --- a/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli +++ b/Gems/Atom/RPI/Assets/ShaderLib/Atom/RPI/Math.azsli @@ -31,6 +31,23 @@ void swap(inout float a, inout float b) b = c; } +float Pow2(float x) +{ + return x * x; +} +float Pow3(float x) +{ + return x * x * x; +} +float Pow4(float x) +{ + x *= x; + return x * x; +} +float Pow5(float x) +{ + return x * Pow4(x); +} // ---------- Intersection ----------- // a simple ray sphere intersection function, didn't take limited precision @@ -250,3 +267,19 @@ float LerpInverse(float a, float b, float value) return (value - a) / (b - a); } } +//-------- Gaussinan distribution functions --------- +// https://en.wikipedia.org/wiki/Gaussian_function +// Parameter: +// amplitude - the height of the curve's peak +// median - the position of the Mean / Median - the center of the "bell" +// standardDeviation - controls the width of the "bell" +float Gaussian(float x, float amplitude, float median, float standardDeviation) +{ + float exponent = -0.5 * Pow2((x - median) / standardDeviation); + return amplitude * exp(exponent); +} +float GaussianNormalized(float x, float expectedValue, float standardDeviation) +{ + float normalizedAmplitude = 1.0f / (standardDeviation * sqrt(TWO_PI)); + return Gaussian(x, normalizedAmplitude, expectedValue, standardDeviation); +} diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp index 8eedf3aa1f..c43edafd6b 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassLibrary.cpp @@ -410,7 +410,7 @@ namespace AZ { RHI::Format format = slot.m_bufferViewDesc->m_elementFormat; AZStd::string formatLocation = AZStd::string::format("BufferViewDescriptor on Slot [%s] in PassTemplate [%s]", slot.m_name.GetCStr(), passTemplate->m_name.GetCStr()); - RHI::FormatCapabilities capabilities = RHI::GetCapabilities(slot.m_scopeAttachmentUsage, slot.GetAttachmentAccess(), RHI::AttachmentType::Image); + RHI::FormatCapabilities capabilities = RHI::GetCapabilities(slot.m_scopeAttachmentUsage, slot.GetAttachmentAccess(), RHI::AttachmentType::Buffer); slot.m_bufferViewDesc->m_elementFormat = RHI::ValidateFormat(format, formatLocation.c_str(), slot.m_formatFallbacks, capabilities); } } diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp index 46eb0937bd..6f74627bee 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Thumbnails/Rendering/ThumbnailRendererSteps/InitializeStep.cpp @@ -86,7 +86,7 @@ namespace AZ RPI::RenderPipelineDescriptor pipelineDesc; pipelineDesc.m_mainViewTagName = "MainCamera"; pipelineDesc.m_name = data->m_pipelineName; - pipelineDesc.m_rootPassTemplate = "MainPipelineRenderToTexture"; + pipelineDesc.m_rootPassTemplate = "ThumbnailPipelineRenderToTexture"; // We have to set the samples to 4 to match the pipeline passes' setting, otherwise it may lead to device lost issue // [GFX TODO] [ATOM-13551] Default value sand validation required to prevent pipeline crash and device lost pipelineDesc.m_renderSettings.m_multisampleState.m_samples = 4; diff --git a/Gems/AtomTressFX/.gitattributes b/Gems/AtomTressFX/.gitattributes new file mode 100644 index 0000000000..8d27c1e373 --- /dev/null +++ b/Gems/AtomTressFX/.gitattributes @@ -0,0 +1,4 @@ +*.ptx filter=lfs diff=lfs merge=lfs -text +*.tfx filter=lfs diff=lfs merge=lfs -text +*.tfxbone filter=lfs diff=lfs merge=lfs -text +*.tfxmesh filter=lfs diff=lfs merge=lfs -text diff --git a/Gems/AtomTressFX/.gitignore b/Gems/AtomTressFX/.gitignore new file mode 100644 index 0000000000..1ab0eb9149 --- /dev/null +++ b/Gems/AtomTressFX/.gitignore @@ -0,0 +1,4 @@ +.maya_data +.mayaSwatches +.ma.swatches +*.pyc diff --git a/Gems/AtomTressFX/Assets/DefaultWhite.png b/Gems/AtomTressFX/Assets/DefaultWhite.png new file mode 100644 index 0000000000..e93f731efb --- /dev/null +++ b/Gems/AtomTressFX/Assets/DefaultWhite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7310efe7e71a8de16f32daf3688984e7d7ad3761690bd7af948965c9b5ecd2e +size 132 diff --git a/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass new file mode 100644 index 0000000000..84bb85c3e1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_MainPipeline.pass @@ -0,0 +1,552 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "MainPipeline", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "SwapChainOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + } + ], + "PassRequests": [ + { + "Name": "MorphTargetPass", + "TemplateName": "MorphTargetPassTemplate" + }, + { + "Name": "SkinningPass", + "TemplateName": "SkinningPassTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshOutputStream", + "AttachmentRef": { + "Pass": "MorphTargetPass", + "Attachment": "MorphTargetDeltaOutput" + } + } + ] + }, + { + "Name": "RayTracingAccelerationStructurePass", + "TemplateName": "RayTracingAccelerationStructurePassTemplate" + }, + { + "Name": "DiffuseProbeGridUpdatePass", + "TemplateName": "DiffuseProbeGridUpdatePassTemplate", + "ExecuteAfter": [ + "RayTracingAccelerationStructurePass" + ] + }, + { + "Name": "DepthPrePass", + "TemplateName": "DepthMSAAParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "MotionVectorPass", + "TemplateName": "MotionVectorParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "LightCullingPass", + "TemplateName": "LightCullingParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "DepthMSAA", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "ShadowPass", + "TemplateName": "ShadowParentTemplate", + "Connections": [ + { + "LocalSlot": "SkinnedMeshes", + "AttachmentRef": { + "Pass": "SkinningPass", + "Attachment": "SkinnedMeshOutputStream" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "OpaquePass", + "TemplateName": "OpaqueParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthMSAA" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + + { + // NOTE: HairParentPass does not write into Depth MSAA from Opaque Pass. If new passes downstream + // of HairParentPass will need to use Depth MSAA, HairParentPass will need to be updated to use Depth MSAA + // instead of regular Depth as DepthStencil. Specifically, HairResolvePPLL.pass and the associated + // .azsl file will need to be updated. + "Name": "HairParentPass", + "TemplateName": "HairParentPassTemplate", + "Enabled": true, + "Connections": [ + // Critical to keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "LocalSlot": "DepthLinearInput", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "DepthPrePass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "RenderTargetInputOnly", + "AttachmentRef": { + "Pass": "OpaquePass", + "Attachment": "Output" + } + }, + + // Shadows resources + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + + // Lighting Resources + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + } + ] + }, + + { + "Name": "TransparentPass", + "TemplateName": "TransparentParentTemplate", + "Connections": [ + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "ShadowPass", + "Attachment": "ProjectedESM" + } + }, + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "LightListRemapped" + } + }, + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "DepthStencil", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "DeferredFogPass", + "TemplateName": "DeferredFogPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "InputLinearDepth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "DepthLinear" + } + }, + { + "LocalSlot": "InputDepthStencil", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "RenderTargetInputOutput" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + "FilePath": "Shaders/ScreenSpace/DeferredFog.shader" + }, + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "ReflectionCopyFrameBufferPass", + "TemplateName": "ReflectionCopyFrameBufferPassTemplate", + "Enabled": false, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + { + "Name": "PostProcessPass", + "TemplateName": "PostProcessParentTemplate", + "Connections": [ + { + "LocalSlot": "LightingInput", + "AttachmentRef": { + "Pass": "DeferredFogPass", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "MotionVectors", + "AttachmentRef": { + "Pass": "MotionVectorPass", + "Attachment": "MotionVectorOutput" + } + }, + { + "LocalSlot": "SwapChainOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + }, + { + "Name": "AuxGeomPass", + "TemplateName": "AuxGeomPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "ColorInputOutput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "auxgeom", + "PipelineViewTag": "MainCamera" + } + }, + { + "Name": "DebugOverlayPass", + "TemplateName": "DebugOverlayParentTemplate", + "Connections": [ + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "LightCullingPass", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "RawLightingInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "RawLightingOutput" + } + }, + { + "LocalSlot": "LuminanceMipChainInput", + "AttachmentRef": { + "Pass": "PostProcessPass", + "Attachment": "LuminanceMipChainOutput" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "AuxGeomPass", + "Attachment": "ColorInputOutput" + } + } + ] + }, + { + "Name": "UIPass", + "TemplateName": "UIParentTemplate", + "Connections": [ + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "DebugOverlayPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "DepthInputOutput", + "AttachmentRef": { + "Pass": "HairParentPass", + "Attachment": "Depth" + } + } + ] + }, + { + "Name": "CopyToSwapChain", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "UIPass", + "Attachment": "InputOutput" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "SwapChainOutput" + } + } + ] + } + ] + } + } +} diff --git a/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset new file mode 100644 index 0000000000..a287664286 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/AtomTressFX_PassTemplates.azasset @@ -0,0 +1,45 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "AssetAliasesSourceData", + "ClassData": { + "AssetPaths": [ + { + "Name": "HairParentPassTemplate", + "Path": "Passes/HairParentPass.pass" + }, + { + "Name": "HairGlobalShapeConstraintsComputePassTemplate", + "Path": "Passes/HairGlobalShapeConstraintsCompute.pass" + }, + { + "Name": "HairCalculateStrandLevelDataComputePassTemplate", + "Path": "Passes/HairCalculateStrandLevelDataCompute.pass" + }, + { + "Name": "HairVelocityShockPropagationComputePassTemplate", + "Path": "Passes/HairVelocityShockPropagationCompute.pass" + }, + { + "Name": "HairLocalShapeConstraintsComputePassTemplate", + "Path": "Passes/HairLocalShapeConstraintsCompute.pass" + }, + { + "Name": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "Path": "Passes/HairLengthConstraintsWindAndCollisionCompute.pass" + }, + { + "Name": "HairUpdateFollowHairComputePassTemplate", + "Path": "Passes/HairUpdateFollowHairCompute.pass" + }, + { + "Name": "HairPPLLRasterPassTemplate", + "Path": "Passes/HairFillPPLL.pass" + }, + { + "Name": "HairPPLLResolvePassTemplate", + "Path": "Passes/HairResolvePPLL.pass" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass new file mode 100644 index 0000000000..a20a246933 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairCalculateStrandLevelDataCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairCalculateStrandLevelDataComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairCalculateStrandLevelDataCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass b/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass new file mode 100644 index 0000000000..fd196551bf --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairFillPPLL.pass @@ -0,0 +1,130 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairPPLLRasterPassTemplate", + "PassClass": "HairPPLLRasterPass", + "Slots": [ + // Input/Outputs... + { + // Super important to keep this as it is used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + "Name": "DepthLinear", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader" + }, + { // The depth buffer will be used to write the closest hair fragment depth + "Name": "Depth", + "SlotType": "Input", + "ScopeAttachmentUsage": "DepthStencil" + }, + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "PPLLIndexCounter", + "ShaderInputName": "m_linkedListCounter", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "BufferViewDesc": { + "m_elementOffset": "0", + "m_elementCount": "1", + "m_elementSize": "4", + "m_elementFormat": "R32_UINT" // Unknown is not accpeted and the pass compilation failsd + }, + "LoadStoreAction": { + "ClearValue": { + "Value": [ 0, 0, 0, 0 ] + }, + "LoadAction": "Clear" + } + }, + { + "Name": "PerPixelListHead", + "ShaderInputName": "m_fragmentListHead", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "ClearValue": { + "Value": [ + 0, + 0, + 0, + 0 + ] + }, + "LoadAction": "Clear", + "StoreAction": "Store" + } + }, + { + "Name": "PerPixelLinkedList", + "ShaderInputName": "m_linkedListNodes", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader" + } + ], + "BufferAttachments": [ + { + "Name": "PPLLIndexCounter", + "BufferDescriptor": { + "m_bindFlags": "ShaderReadWrite", + "m_byteCount": "4", + "m_alignment": "0" // or size of the buffer element + } + } + ], + "ImageAttachments": [ + { + "Name": "PerPixelListHead", + "SizeSource": { + "Source": { + "Pass": "This", + "Attachment": "DepthLinear" + } + }, + "ImageDescriptor": { + "Format": "R32_UINT", + "SharedQueueMask": "Graphics", + "BindFlags": "ShaderReadWrite" + } + } + ], + "Connections": [ + { + "LocalSlot": "PerPixelListHead", + "AttachmentRef": { + "Pass": "This", + "Attachment": "PerPixelListHead" + } + }, + { + "LocalSlot": "PPLLIndexCounter", + "AttachmentRef": { + "Pass": "This", + "Attachment": "PPLLIndexCounter" + } + } + ], + "PassData": { + "$type": "RasterPassData", + "DrawListTag": "hairFillPass", + "PipelineViewTag": "MainCamera" + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass new file mode 100644 index 0000000000..ab10c6fe97 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairGlobalShapeConstraintsCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairGlobalShapeConstraintsComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "Output", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairGlobalShapeConstraintsCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass new file mode 100644 index 0000000000..820864161a --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairLengthConstraintsWindAndCollisionCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass new file mode 100644 index 0000000000..718e01a30f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairLocalShapeConstraintsCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairLocalShapeConstraintsComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairLocalShapeConstraintsCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass b/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass new file mode 100644 index 0000000000..6ae8b9526e --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairParentPass.pass @@ -0,0 +1,347 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairParentPassTemplate", + "PassClass": "ParentPass", + "Slots": [ + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget" + }, + { + "Name": "RenderTargetInputOnly", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + // This is the depth stencil buffer that is to be used by the fill pass + // to early reject pixels by depth and in the resolve pass to write the + // the hair depth + { + "Name": "Depth", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "DepthStencil" + }, + // Keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "Name": "DepthLinearInput", + "SlotType": "Input" + }, + { + "Name": "DepthLinear", + "SlotType": "Output" + }, + + // Lights & Shadows resources + { + "Name": "DirectionalShadowmap", + "SlotType": "Input" + }, + { + "Name": "DirectionalESM", + "SlotType": "Input" + }, + { + "Name": "ProjectedShadowmap", + "SlotType": "Input" + }, + { + "Name": "ProjectedESM", + "SlotType": "Input" + }, + { + "Name": "TileLightData", + "SlotType": "Input" + }, + { + "Name": "LightListRemapped", + "SlotType": "Input" + } + ], + "Connections": [ + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "DepthToDepthLinearPass", + "Attachment": "Output" + } + } + ], + "PassRequests": [ + { + "Name": "HairGlobalShapeConstraintsComputePass", + "TemplateName": "HairGlobalShapeConstraintsComputePassTemplate", + "Enabled": true + }, + { + "Name": "HairCalculateStrandLevelDataComputePass", + "TemplateName": "HairCalculateStrandLevelDataComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairGlobalShapeConstraintsComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairVelocityShockPropagationComputePass", + "TemplateName": "HairVelocityShockPropagationComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairCalculateStrandLevelDataComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairLocalShapeConstraintsComputePass", + "TemplateName": "HairLocalShapeConstraintsComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairVelocityShockPropagationComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairLengthConstraintsWindAndCollisionComputePass", + "TemplateName": "HairLengthConstraintsWindAndCollisionComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairLocalShapeConstraintsComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + { + "Name": "HairUpdateFollowHairComputePass", + "TemplateName": "HairUpdateFollowHairComputePassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairLengthConstraintsWindAndCollisionComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + } + ] + }, + + { + "Name": "HairPPLLRasterPass", + "TemplateName": "HairPPLLRasterPassTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "SkinnedHairSharedBuffer", + "AttachmentRef": { + "Pass": "HairUpdateFollowHairComputePass", + "Attachment": "SkinnedHairSharedBuffer" + } + }, + // Keep DepthLinear as input - used to set the size of the Head PPLL image buffer. + // If DepthLinear is not availbale - connect to another viewport (non MSAA) image. + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DepthLinearInput" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOutput" + } + } + ] + }, + + { + "Name": "RenderTargetCopyPass", + "TemplateName": "FullscreenCopyTemplate", + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOnly" + } + }, + { + "LocalSlot": "Output", + "AttachmentRef": { + "Pass": "This", + "Attachment": "Output" + } + } + ], + "ImageAttachments": [ + { + "Name": "Output", + "SizeSource": { + "Source": { + "Pass": "This", + "Attachment": "Input" + } + }, + "FormatSource": { + "Pass": "This", + "Attachment": "Input" + }, + "GenerateFullMipChain": false + } + ] + }, + + { + "Name": "HairPPLLResolvePass", + "TemplateName": "HairPPLLResolvePassTemplate", + "Enabled": true, + "Connections": [ + // General + Render Target resources + { + "LocalSlot": "RenderTargetInputOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "RenderTargetInputOutput" + } + }, + { + "LocalSlot": "RenderTargetCopy", + "AttachmentRef": { + "Pass": "RenderTargetCopyPass", + "Attachment": "Output" + } + }, + { + "LocalSlot": "Depth", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Depth" + } + }, + { + "LocalSlot": "DepthLinear", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DepthLinearInput" + } + }, + + // Shadows resources + { + "LocalSlot": "DirectionalShadowmap", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DirectionalShadowmap" + } + }, + { + "LocalSlot": "DirectionalESM", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "DirectionalESM" + } + }, + { + "LocalSlot": "ProjectedShadowmap", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "ProjectedShadowmap" + } + }, + { + "LocalSlot": "ProjectedESM", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "ProjectedESM" + } + }, + + // Lights Resources + { + "LocalSlot": "TileLightData", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "TileLightData" + } + }, + { + "LocalSlot": "LightListRemapped", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "LightListRemapped" + } + }, + + + // PPLL Resources + { + "LocalSlot": "PerPixelListHead", + "AttachmentRef": { + "Pass": "HairPPLLRasterPass", + "Attachment": "PerPixelListHead" + } + }, + { + "LocalSlot": "PerPixelLinkedList", + "AttachmentRef": { + "Pass": "HairPPLLRasterPass", + "Attachment": "PerPixelLinkedList" + } + } + ] + }, + { + // This pass copies the updated depth buffer (now contains hair depth) to linear depth texture + // for downstream passes to use. This can be optimized even further by writing into the stencil + // buffer pixels that were touched by HairPPLLResolvePass hence preventing depth update unless + // it is hair. + "Name": "DepthToDepthLinearPass", + "TemplateName": "DepthToLinearTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "HairPPLLResolvePass", + "Attachment": "Depth" + } + } + ] + } + ] + } + } +} + diff --git a/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass b/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass new file mode 100644 index 0000000000..0061fa1666 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairResolvePPLL.pass @@ -0,0 +1,150 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairPPLLResolvePassTemplate", + "PassClass": "HairPPLLResolvePass", + "Slots": [ + //------ General Input/Output resources and Render Target ------ + { + "Name": "RenderTargetInputOutput", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "RenderTarget", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + { // Will be used to get the background color for the hair blending + "Name": "RenderTargetCopy", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ShaderInputName": "m_frameBuffer" + }, + { // Used to get the transform from screen space to world space. + "Name": "DepthLinear", + "SlotType": "Input", + "ShaderInputName": "m_linearDepth", + "ScopeAttachmentUsage": "Shader" + }, + { // The depth buffer will be used to write the closest hair fragment depth + "Name": "Depth", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "DepthStencil", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + }, + + //------------- Shadowing Resources ------------- + { + "Name": "DirectionalShadowmap", + "ShaderInputName": "m_directionalLightShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "DirectionalESM", + "ShaderInputName": "m_directionalLightExponentialShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "ProjectedShadowmap", + "ShaderInputName": "m_projectedShadowmaps", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + { + "Name": "ProjectedESM", + "ShaderInputName": "m_projectedExponentialShadowmap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "ImageViewDesc": { + "IsArray": 1 + } + }, + + //------------- Lighting Resources ------------- + { + "Name": "BRDFTextureInput", + "ShaderInputName": "m_brdfMap", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "TileLightData", + "SlotType": "Input", + "ShaderInputName": "m_tileLightData", + "ScopeAttachmentUsage": "Shader" + }, + { + "Name": "LightListRemapped", + "SlotType": "Input", + "ShaderInputName": "m_lightListRemapped", + "ScopeAttachmentUsage": "Shader" + }, + + //---------- PPLL Resources ----------- + { + "Name": "PerPixelListHead", + "ShaderInputName": "m_fragmentListHead", + "SlotType": "Input", // Read only - the reset is done before the fill pass + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "DontCare" + } + }, + { + "Name": "PerPixelLinkedList", + "ShaderInputName": "m_linkedListNodes", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "DontCare" + } + } + ], + "ImageAttachments": [ + { + "Name": "BRDFTexture", + "Lifetime": "Imported", + "AssetRef": { + "FilePath": "Textures/BRDFTexture.attimage" + } + } + ], + "Connections": [ + { + "LocalSlot": "BRDFTextureInput", + "AttachmentRef": { + "Pass": "This", + "Attachment": "BRDFTexture" + } + } + ], + "PassData": { + "$type": "FullscreenTrianglePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairRenderingResolvePPLL.shader" + } + } + } + } +} + diff --git a/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass new file mode 100644 index 0000000000..6f265b4e99 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairUpdateFollowHairCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairUpdateFollowHairComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "inputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairUpdateFollowHairCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass b/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass new file mode 100644 index 0000000000..0b94cd5d6b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Passes/HairVelocityShockPropagationCompute.pass @@ -0,0 +1,30 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "HairVelocityShockPropagationComputePassTemplate", + "PassClass": "HairSkinningComputePass", + "Slots": [ + { + "Name": "SkinnedHairSharedBuffer", + "ShaderInputName": "m_skinnedHairSharedBuffer", + "SlotType": "InputOutput", + "ScopeAttachmentUsage": "Shader", + "LoadStoreAction": { + "LoadAction": "Load", + "StoreAction": "Store" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + // Looking for it in the Shaders directory relative to the Assets directory + "FilePath": "Shaders/HairVelocityShockPropagationCompute.shader" + } + } + } + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader new file mode 100644 index 0000000000..66bac88250 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairCalculateStrandLevelDataCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "CalculateStrandLevelData", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader new file mode 100644 index 0000000000..32b9c1bd4f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairGlobalShapeConstraintsCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "IntegrationAndGlobalShapeConstraints", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader new file mode 100644 index 0000000000..a00916f1e4 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "LengthConstriantsWindAndCollision", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli new file mode 100644 index 0000000000..535d1380e7 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLightTypes.azsli @@ -0,0 +1,495 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ + +#pragma once + +//============================================================================== +// Atom Lighting & Light Types +//============================================================================== +// Include options first +#include +#include +#include +#include + +#include +#include +#include +//------------------------------------------------------------------------------ +#include + +#include +//===================== Hair Lighting Shader Options =========================== +enum class HairLightingModel {GGX, Marschner, Kajiya}; +option HairLightingModel o_hairLightingModel = HairLightingModel::Marschner; + +//============================================================================== +float3 GetSpecularLighting(Surface surface, LightingData lightingData, const float3 lightIntensity, const float3 dirToLight) +{ + float3 specular = float3(1, 0, 1); // purple - error color + if (o_hairLightingModel == HairLightingModel::GGX) + { + specular = SpecularGGX(lightingData.dirToCamera, dirToLight, surface.normal, surface.specularF0, lightingData.NdotV, surface.roughnessA2, lightingData.multiScatterCompensation); + } + else if(o_hairLightingModel == HairLightingModel::Marschner) + { + specular = HairMarschnerBSDF(surface, lightingData, dirToLight); + } + // [To Do] - add the Kajiya-Kay lighting model option here in order to connect to Atom lighting loop + + return specular * lightIntensity; +} + +float3 GetHairBackLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight, float shadowRatio) +{ + if (o_hairLightingModel == HairLightingModel::GGX) + { + float3 result = float3(0.0, 0.0, 0.0); + float thickness = 0.0; + float4 transmissionParams = surface.transmission.transmissionParams; + + // Thin object mode, using thin-film assumption proposed by Jimenez J. et al, 2010, "Real-Time Realistic Skin Translucency" + // http://www.iryoku.com/translucency/downloads/Real-Time-Realistic-Skin-Translucency.pdf + + result = shadowRatio ? + float3(0.0, 0.0, 0.0) : + TransmissionKernel(surface.transmission.thickness * transmissionParams.w, rcp(transmissionParams.xyz)) * + saturate(dot(-surface.normal, dirToLight)) * lightIntensity * shadowRatio; + + return result; + } + else // if ((o_hairLightingModel == HairLightingModel::Marschner) || (o_hairLightingModel == HairLightingModel::Kajiya)) + { + return float3(0.0f, 0.0f, 0.0f); + } + + return float3(1.0f, 0.0f, 0.0f); +} + +//! Simple Lambertian BRDF +float3 HairDiffuseLambertian(float3 albedo, float3 normal, float3 dirToLight) +{ + float NdotL = saturate(dot(normal, dirToLight)); + return albedo * NdotL * INV_PI; +} + +// Replacing the generic Diffuse and Specular methods in StandardLighting.azsli +// and removing the regular usage of clear coat second lobe energy distribution. +float3 GetDiffuseLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight) +{ + float3 diffuse = float3(0, 1, 0); // Green - error color + + if (o_hairLightingModel == HairLightingModel::GGX) + { + // Notice that addition of the response (1-F) here + diffuse = HairDiffuseLambertian(surface.albedo, surface.normal, dirToLight) * lightingData.diffuseResponse; + } + else if (o_hairLightingModel == HairLightingModel::Marschner) + { + return float3(0.0f, 0.0f, 0.0f); + } + // [To Do] - add the Kajiya-Kay lighting model option here in order to connect to Atom lighting loop + + diffuse *= lightIntensity; + return diffuse; +} + +void UpdateLightingParameters( + inout LightingData lightingData, + float3 positionWS, float3 normal, float roughnessLinear) +{ + lightingData.dirToCamera = normalize(ViewSrg::m_worldPosition.xyz - positionWS); + + // sample BRDF map (indexed by smoothness values rather than roughness) + lightingData.NdotV = saturate(dot(normal, lightingData.dirToCamera)); + + float2 brdfUV = float2(lightingData.NdotV, (1.0f - roughnessLinear)); + + lightingData.brdf = PassSrg::m_brdfMap.Sample(PassSrg::LinearSampler, brdfUV).rg; +} + +void SetNormalAndUpdateLightingParams( + in float3 tangent, in float3 dirToLight, + inout Surface surface, + inout LightingData lightingData) +{ + float3 biNormal; + if (o_hairLightingModel == HairLightingModel::GGX) + { // Towards half vector but never cross fully (more weight to camera direction) + float3 halfDir = normalize( dirToLight + 1.2 * lightingData.dirToCamera); + biNormal = normalize(cross(tangent, halfDir)); + } + else + { // Face forward towards the camera + biNormal = normalize(cross(tangent, lightingData.dirToCamera)); + } + + float3 projectedNormal = cross(biNormal, tangent); + surface.normal = normalize(projectedNormal); // the normalization might be redundunt + + // Next is important in order to set NdotV and other PBR settings - needs to be set once per light + UpdateLightingParameters(lightingData, surface.position, surface.normal, surface.roughnessLinear); + + // Diffuse and Specular response + lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear); + lightingData.diffuseResponse = 1.0f - lightingData.specularResponse; +} + +//============================================================================== +#include +//============================================================================== + + +//============================================================================== +// Simple Point Light +//============================================================================== +void ApplySimplePointLight(ViewSrg::SimplePointLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + float3 dirToLight = normalize(posToLight); + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Specular contribution + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, lightIntensity, dirToLight); + } +} + +// The following function is currently not used and is written here for future testing. +// The culling scheme requires some more preperation and testing in HairLighting.azsli +// and once done, all light types can use the culling. +// Not that the current culling scheme assumes light types lists order and is bogus if +// some light types are not used or out of order (Atom's To Do list) +void ApplyCulledSimplePointLights(Surface surface, inout LightingData lightingData) +{ + lightingData.tileIterator.LoadAdvance(); + + int lightCount = 0; + while( !lightingData.tileIterator.IsDone() && lightCount<1) + { + uint currLightIndex = lightingData.tileIterator.GetValue(); + lightingData.tileIterator.LoadAdvance(); + + ViewSrg::SimplePointLight light = ViewSrg::m_simplePointLights[currLightIndex]; + ApplySimplePointLight(light, surface, lightingData); + ++lightCount; + } +} + +void ApplyAllSimplePointLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_simplePointLightCount; ++l) + { + ViewSrg::SimplePointLight light = ViewSrg::m_simplePointLights[l]; + ApplySimplePointLight(light, surface, lightingData); + } +} + +//============================================================================== +// Simple Spot Light +//============================================================================== +void ApplySimpleSpotLight(ViewSrg::SimpleSpotLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float3 dirToLight = normalize(posToLight); + float dotWithDirection = dot(dirToLight, -normalize(light.m_direction)); + + // If outside the outer cone angle return. + if (dotWithDirection < light.m_cosOuterConeAngle) + { + return; + } + + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + if (dotWithDirection < light.m_cosInnerConeAngle) // in penumbra + { + // Normalize into 0.0 - 1.0 space. + float penumbraMask = (dotWithDirection - light.m_cosOuterConeAngle) / (light.m_cosInnerConeAngle - light.m_cosOuterConeAngle); + + // Apply smoothstep + penumbraMask = penumbraMask * penumbraMask * (3.0 - 2.0 * penumbraMask); + + lightIntensity *= penumbraMask; + } + + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Tranmission contribution + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, lightIntensity, dirToLight, 1.0); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Specular contribution + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, lightIntensity, dirToLight); + } +} + +void ApplyAllSimpleSpotLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_simpleSpotLightCount; ++l) + { + ViewSrg::SimpleSpotLight light = ViewSrg::m_simpleSpotLights[l]; + ApplySimpleSpotLight(light, surface, lightingData); + } +} +//============================================================================== +// Point Light +//============================================================================== +void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData) +{ + float3 posToLight = light.m_position - surface.position; + float d2 = dot(posToLight, posToLight); // light distance squared + float falloff = d2 * light.m_invAttenuationRadiusSquared; + + // Only calculate shading if light is in range + if (falloff < 1.0f) + { + // Smoothly adjusts the light intensity so it reaches 0 at light.m_attenuationRadius distance + float radiusAttenuation = 1.0 - (falloff * falloff); + radiusAttenuation = radiusAttenuation * radiusAttenuation; + + // Standard quadratic falloff + d2 = max(0.001 * 0.001, d2); // clamp the light to at least 1mm away to avoid extreme values. + float3 lightIntensity = (light.m_rgbIntensityCandelas / d2) * radiusAttenuation; + + float3 dirToLight = normalize(posToLight); + SetNormalAndUpdateLightingParams(surface.tangent, dirToLight, surface, lightingData); + + // Diffuse contribution + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, dirToLight); + + // Tranmission contribution + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, lightIntensity, dirToLight, 1.0); + + // Adjust the light direcion for specular based on bulb size + + // Calculate the reflection off the normal from the view direction + float3 reflectionDir = reflect(-lightingData.dirToCamera, surface.normal); + + // Calculate a vector from the reflection vector to the light + float3 reflectionPosToLight = posToLight - dot(posToLight, reflectionDir) * reflectionDir; + + // Adjust the direction to light based on the bulb size + posToLight -= reflectionPosToLight * saturate(light.m_bulbRadius / length(reflectionPosToLight)); + + // Adjust the intensity of the light based on the bulb size to conserve energy + float sphereIntensityNormalization = GetIntensityAdjustedByRadiusAndRoughness(surface.roughnessA, light.m_bulbRadius, d2); + + // Specular contribution + lightingData.specularLighting += sphereIntensityNormalization * GetSpecularLighting(surface, lightingData, lightIntensity, normalize(posToLight)); + } +} + +void ApplyAllPointLights(Surface surface, inout LightingData lightingData) +{ + for (int l = 0; l < ViewSrg::m_pointLightCount; ++l) + { + ViewSrg::PointLight light = ViewSrg::m_pointLights[l]; + ApplyPointLight(light, surface, lightingData); + } +} + +//============================================================================== +// Disk Lights +//============================================================================== +#include + +void ApplyAllDiskLights(Surface surface, inout LightingData lightingData) +{ + SetNormalAndUpdateLightingParams(surface.tangent, lightingData.dirToCamera, surface, lightingData); + for (int l = 0; l < ViewSrg::m_diskLightCount; ++l) + { + ViewSrg::DiskLight light = ViewSrg::m_diskLights[l]; + ApplyDiskLight(light, surface, lightingData); + } +} + +//============================================================================== +// Directional Lights +//============================================================================== +void ApplyDirectionalLights(Surface surface, inout LightingData lightingData) +{ + DirectionalLightShadow::DebugInfo debugInfo = {0, false}; + + // Shadowed check + const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; + float litRatio = 1.0f; + float backShadowRatio = 0.0f; + + SetNormalAndUpdateLightingParams(surface.tangent, -lightingData.dirToCamera, surface, lightingData); + + if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) + { + litRatio = DirectionalLightShadow::GetVisibility( + shadowIndex, + lightingData.shadowCoords, + surface.normal, + debugInfo); + } + + // Add the lighting contribution for each directional light + for (int index = 0; index < SceneSrg::m_directionalLightCount; index++) + { + SceneSrg::DirectionalLight light = SceneSrg::m_directionalLights[index]; + float3 dirToLight = normalize(-light.m_direction); + + // Adjust the direction of the light based on its angular diameter. + float3 reflectionDir = reflect(-lightingData.dirToCamera, surface.normal); + float3 lightDirToReflectionDir = reflectionDir - dirToLight; + float lightDirToReflectionDirLen = length(lightDirToReflectionDir); + lightDirToReflectionDir = lightDirToReflectionDir / lightDirToReflectionDirLen; // normalize the length + lightDirToReflectionDirLen = min(light.m_angularRadius, lightDirToReflectionDirLen); + dirToLight += lightDirToReflectionDir * lightDirToReflectionDirLen; + dirToLight = normalize(dirToLight); + + float currentLitRatio = 1.0f; + float currentBackShadowRatio = 1.0f; + if (o_enableShadows) + { + currentLitRatio = (index == shadowIndex) ? litRatio : 1.0f; + + currentBackShadowRatio = 1.0 - currentLitRatio; + if (o_transmission_mode == TransmissionMode::ThickObject) + { + currentBackShadowRatio = (index == shadowIndex) ? backShadowRatio : 0.; + } + } + + lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; + lightingData.specularLighting += GetSpecularLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; + lightingData.translucentBackLighting += GetHairBackLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight, currentBackShadowRatio); + } +} + +//============================================================================== +// IBL - GI and Reflections +//============================================================================== +// Adding diffuse contribution from IBL to the hair - this part still requires +// multiple passes and improvements for both diffuse and specular IBL components. +// The immediate things to improve: +// - Virtual direction to 'light' +// - Absorption function based on hair accumulated thickness (back to front) and +// reverse thickness (front to back) +// - Diffuse contribution elements / scaling +float3 ApplyIblDiffuse(Surface surface, LightingData lightingData) +{ + float3 irradianceDir = MultiplyVectorQuaternion(surface.normal, SceneSrg::m_iblOrientation); + float3 diffuseSample = SceneSrg::m_diffuseEnvMap.Sample(SceneSrg::m_samplerEnv, GetCubemapCoords(irradianceDir)).rgb; + +// float3 diffuseLighting = HairDiffuseLambertian(surface.albedo, surface.normal, lightingData.dirToCamera) * lightingData.diffuseResponse * diffuseSample; +// float3 diffuseLighting = GetDiffuseLighting(surface, lightingData, diffuseSample, surface.normal); + + // Notice the multiplication with inverse thickness used as a measure of occlusion + return lightingData.diffuseResponse * surface.albedo * diffuseSample * (1.0f - surface.thickness); +} + +float3 ApplyIblSpecular(Surface surface, LightingData lightingData) +{ + float3 reflectDir = reflect(-lightingData.dirToCamera, surface.normal); + reflectDir = MultiplyVectorQuaternion(reflectDir, SceneSrg::m_iblOrientation); + + // global + float3 specularSample = SceneSrg::m_specularEnvMap.SampleLevel( + SceneSrg::m_samplerEnv, GetCubemapCoords(reflectDir), + GetRoughnessMip(surface.roughnessLinear)).rgb; + + float3 specularLighting = GetSpecularLighting(surface, lightingData, specularSample, reflectDir); + return specularLighting; +} + +// Remark: IBL is still WIP and this part will change in the near future +void ApplyIBL(Surface surface, inout LightingData lightingData) +{ +// float3 normal = normalize(float3(surface.tangent.z, -surface.tangent.x, surface.tangent.y)); +// SetNormalAndUpdateLightingParams(surface.tangent, normal, surface, lightingData); + SetNormalAndUpdateLightingParams(surface.tangent, lightingData.dirToCamera, surface, lightingData); + + float3 iblDiffuse = ApplyIblDiffuse(surface, lightingData); + float3 iblSpecular = ApplyIblSpecular(surface, lightingData); + + // Adjust IBL lighting by exposure. + float iblExposureFactor = pow(2.0, SceneSrg::m_iblExposure); + lightingData.diffuseLighting += (iblDiffuse * iblExposureFactor * lightingData.diffuseAmbientOcclusion); + lightingData.specularLighting += (iblSpecular * iblExposureFactor); +} + + +//============================================================================== +// +// Light Types Application +// +//============================================================================== +void ApplyLighting(inout Surface surface, inout LightingData lightingData) +{ + // Shadow coordinates generation for the directional light + const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; + if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) + { + DirectionalLightShadow::GetShadowCoords(shadowIndex, surface.position, lightingData.shadowCoords); + } + + // Light loops application. + // If culling is used, the order of the calls must match the light types list order +// ApplyDecals(lightingData.tileIterator, surface); + + if (o_enableDirectionalLights) + { + ApplyDirectionalLights(surface, lightingData); + } + + if (o_enablePunctualLights) + { + ApplyAllSimplePointLights(surface, lightingData); + ApplyAllSimpleSpotLights(surface, lightingData); + } + + if (o_enableAreaLights) + { + ApplyAllPointLights(surface, lightingData); + ApplyAllDiskLights(surface, lightingData); + } + + if (o_enableIBL) + { + ApplyIBL(surface, lightingData); + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli new file mode 100644 index 0000000000..bf452e6ba8 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLighting.azsli @@ -0,0 +1,275 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include +//------------------------------------------------------------------------------ +struct HairShadeParams +{ + float3 m_color; + float m_hairShadowAlpha; + float m_fiberRadius; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_Ka; + float m_Kd; + float m_Ks1; + float m_Ex1; + float m_Ks2; + float m_Ex2; + + // Marschner lighting model parameters + float m_cuticleTilt; + float m_roughness; +}; + +//! Original TressFX enhanced Kajiya-Kay lighting model code +//! +//! Returns a float3 which is the scale for diffuse, spec term, and colored spec term. +//! +//! The diffuse term is from Kajiya. +//! +//! The spec term is what Marschner refers to as "R", reflecting directly off the surface +//! of the hair, taking the color of the light like a dielectric specular term. This +//! highlight is shifted towards the root of the hair. +//! +//! The colored spec term is caused by light passing through the hair, bouncing off the +//! back, and coming back out. It therefore picks up the color of the light. +//! Marschner refers to this term as the "TRT" term. This highlight is shifted towards the +//! tip of the hair. +//! +//! vEyeDir, vLightDir and vTangentDir are all pointing out. +//! coneAngleRadians explained below. +//! +//! hair has a tiled-conical shape along its lenght. Sort of like the following. +//! +//! \ / +//! \ / +//! \ / +//! \ / +//! +//! The angle of the cone is the last argument, in radians. +//! It's typically in the range of 5 to 10 degrees +float3 ComputeDiffuseSpecFactors( + float3 vEyeDir, float3 vLightDir, float3 vTangentDir, HairShadeParams params, + float coneAngleRadians = 10 * AMD_PI / 180) +{ + // In Kajiya's model: diffuse component: sin(t, l) + float cosTL = (dot(vTangentDir, vLightDir)); + float sinTL = sqrt(1 - cosTL * cosTL); + float diffuse = sinTL; + + float cosTRL = -cosTL; + float sinTRL = sinTL; + float cosTE = (dot(vTangentDir, vEyeDir)); + float sinTE = sqrt(1 - cosTE * cosTE); + + // Primary highlight: reflected direction shift towards root (2 * coneAngleRadians) + float cosTRL_root = cosTRL * cos(2 * coneAngleRadians) - sinTRL * sin(2 * coneAngleRadians); + float sinTRL_root = sqrt(1 - cosTRL_root * cosTRL_root); + float specular_root = max(0, cosTRL_root * cosTE + sinTRL_root * sinTE); + + // Secondary highlight: reflected direction shifted toward tip (3*coneAngleRadians) + float cosTRL_tip = cosTRL * cos(-3 * coneAngleRadians) - sinTRL * sin(-3 * coneAngleRadians); + float sinTRL_tip = sqrt(1 - cosTRL_tip * cosTRL_tip); + float specular_tip = max(0, cosTRL_tip * cosTE + sinTRL_tip * sinTE); + + return float3( + params.m_Kd * diffuse, + params.m_Ks1 * pow(specular_root, params.m_Ex1), + params.m_Ks2 * pow(specular_tip, params.m_Ex2)); +} + +float LinearizeDepth(float depthNDC, float fNear, float fFar) +{ + return fNear * fFar / (fFar - depthNDC * (fFar - fNear)); +} + +//! The following code is for reference only and should be removed once the +//! Kajiya-Kay original TressFX lighting model is connected to Atom as was +//! done for the Marshcner lighting model. +#define DEMO_NUMBER_OF_LIGHTS 3 +#define DEMO_NUMBER_OF_LIGHTS 3 +float3 SimplifiedHairLighting(float3 vTangent, float3 vPositionWS, float3 vViewDirWS, in HairShadeParams params, float3 vNDC) +{ + // Initialize information needed for all lights + float3 V = normalize(vViewDirWS); + float3 T = normalize(vTangent); + + float3 accumulatedHairColor = float3(0.0, 0.0, 0.0); + + float4 lightPosWSVec[DEMO_NUMBER_OF_LIGHTS] = { + float4(3, 0, 3, 1.5f), // Sun + float4(-.5, 0, 0.5, .5f), + float4(.5, 0, 0.5, .5f), + }; + + float3 lightColorVec[DEMO_NUMBER_OF_LIGHTS] = { + float3(1,1,.95f), // Sun + float3(1,1,1), + float3(1,1,1) + }; + + // Static lights loop for reference - not connected to Atom + // [To Do] - connect to Atom lighting ala HairLightTypes loop + for (int l = 0; l < DEMO_NUMBER_OF_LIGHTS ; l++) + { + float3 lightPosWS = lightPosWSVec[l].xyz; + float3 LightVector = normalize( vPositionWS - lightPosWS ); + float lightIntensity = lightPosWSVec[l].w; + float3 LightColor = lightColorVec[l]; + float3 L = LightVector; + + // Reference usage of shadow +// float shadowTerm = ComputeLightShadow(l, vPositionWS, params); +// if (shadowTerm <= 0.f) +// continue; + + float3 lightSurfaceCoeffs = ComputeDiffuseSpecFactors(V, L, T, params); + + // The diffuse coefficient here is a rough approximation as per the Kajiya model + float3 diffuseCompoenent = lightSurfaceCoeffs.x * params.m_color; + + // This is the approximation to Marschner R but azimuthal only + float3 specularAtPos = lightSurfaceCoeffs.y; + + // This is the approximation to Marschner TRT but azimuthal only + // Notice the base color gather due to the trsmittance within the hair + float3 specularAtBase = lightSurfaceCoeffs.z * params.m_color; + + // Final result + float3 lightContribution = (diffuseCompoenent + specularAtPos + specularAtBase) * lightIntensity * LightColor; // * shadowTerm; + + accumulatedHairColor += max(float3(0, 0, 0), lightContribution ); + } + return accumulatedHairColor; +} + +//============================================================================== +// Atom Lighting +//============================================================================== +#include +#include +//------------------------------------------------------------------------------ + +float3 CalculateLighting( + float4 screenCoords, // XY - screen coords 0..max pix res, Z - depth 0..1 + float3 vPositionWS, float3 vViewDirWS, float3 vTangent, + float thickness, in HairShadeParams material ) +{ + //-------- Surface init -------- + Surface surface; + + const float specularF0Factor = 0.04f; // set this to 0.04?! + + surface.position = vPositionWS; + surface.tangent = vTangent; // Redundant - will be calculated per light + surface.normal = float3(0, 0, 0); // Will fail lights that did not initialize properly. + surface.roughnessLinear = material.m_roughness; + surface.cuticleTilt = material.m_cuticleTilt; + surface.thickness = thickness; + surface.CalculateRoughnessA(); + surface.SetAlbedoAndSpecularF0( material.m_color, specularF0Factor); + + // The trasmission / back lighting does not seem to work! + surface.transmission.InitializeToZero(); // Assuming thin layer + surface.transmission.tint = material.m_color; + surface.transmission.thickness = 0.001; // 1 mm settings + surface.transmission.transmissionParams = float4(1.0, 1.0, 1.0, 32.0); // for thin surface XYZ are partials * W that is the exponent mult + + //------- LightingData init ------- + LightingData lightingData; + + float4 screenPositionForLighting = mul(ViewSrg::m_viewProjectionMatrix, float4(vPositionWS, 1.0)); + uint2 dimensions; + PassSrg::m_linearDepth.GetDimensions(dimensions.x, dimensions.y); + screenPositionForLighting.y = 1.0 - screenPositionForLighting.y; + screenPositionForLighting.xy = (screenPositionForLighting.xy * 0.5 + 0.5) * dimensions; + + // Light iterator - required for the init but the culling is not used yet. + lightingData.tileIterator.Init(screenCoords, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + + // The normal assignment will be overriden afterwards per light + lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); + + ApplyLighting(surface, lightingData); + + return lightingData.diffuseLighting + lightingData.specularLighting; +} + +float3 TressFXShading(float2 pixelCoord, float depth, float3 vTangentCoverage, float3 baseColor, float thickness, int shaderParamIndex) +{ + float3 vNDC; // normalized device / screen coordinates: [-1..1, -1..1, 0..1] + float3 vPositionWS = ScreenPosToWorldPos(PassSrg::m_linearDepth, pixelCoord, depth, vNDC); + + // [To Do] the follwing two lines are a hack to make the tile lighting work for now + #define _BIG_HACK_FOR_TESTING_ 1//32 + float4 screenCoords = float4( _BIG_HACK_FOR_TESTING_ * pixelCoord, depth, depth); // screen space position - XY in pixels - ZW are depth 0..1 + + float3 vViewDirWS = g_vEye - vPositionWS; + + // Need to expand the tangent that was compressed to store in the buffer + float3 vTangent = normalize(vTangentCoverage.xyz * 2.f - 1.f); + + //---- TressFX original lighting params setting ---- + HairShadeParams params; + params.m_color = baseColor; + params.m_hairShadowAlpha = HairParams[shaderParamIndex].m_shadowAlpha; + params.m_fiberRadius = HairParams[shaderParamIndex].m_fiberRadius; + params.m_fiberSpacing = HairParams[shaderParamIndex].m_fiberSpacing; + + params.m_Ka = HairParams[shaderParamIndex].m_matKValue.x; + params.m_Kd = HairParams[shaderParamIndex].m_matKValue.y; + params.m_Ks1 = HairParams[shaderParamIndex].m_matKValue.z; + params.m_Ex1 = HairParams[shaderParamIndex].m_matKValue.w; + params.m_Ks2 = HairParams[shaderParamIndex].m_hairKs2; + params.m_Ex2 = HairParams[shaderParamIndex].m_hairEx2; + + params.m_cuticleTilt = HairParams[shaderParamIndex].m_cuticleTilt; + params.m_roughness = HairParams[shaderParamIndex].m_roughness; + //--------------------------------------------------- + + float3 accumulatedLight = float3(0, 0, 1); + if (o_hairLightingModel == HairLightingModel::Kajiya) + { // This option should be removed and the Kajiya-Kay model should be operated from within + // the Atom lighting loop. + accumulatedLight = SimplifiedHairLighting(vTangent, vPositionWS, vViewDirWS, params, vNDC); + } + else + { + accumulatedLight = CalculateLighting(screenCoords, vPositionWS, vViewDirWS, vTangent, thickness, params); + } + return accumulatedLight; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli new file mode 100644 index 0000000000..cbab545c2d --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli @@ -0,0 +1,244 @@ +/* +* Modifications Copyright (c) Contributors to the Open 3D Engine Project. +* For complete copyright and license terms please see the LICENSE at the root of this distribution. +* +* SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT +* +*/ + +#pragma once + +// --- Overview --- +// +// This is a modified Marschner Lighting Model for hair based on the following papers: +// +// The original Marschner Siggraph paper defining the fundementsal hair lighting model. +// http://www.graphics.stanford.edu/papers/hair/hair-sg03final.pdf +// +// An Energy-Conserving Hair Reflectance Model +// http://www.eugenedeon.com/project/an-energy-conserving-hair-reflectance-model/ +// http://www.eugenedeon.com/wp-content/uploads/2014/04/egsrhair.pdf +// +// Physically Based Hair Shading in Unreal - specifically adapted in our shader +// https://blog.selfshadow.com/publications/s2016-shading-course/karis/s2016_pbs_epic_hair.pptx +// +// Strand-based Hair Rendering in Frostbite for reference +// https://advances.realtimerendering.com/s2019/hair_presentation_final.pdf +// +// +// Path Notations +// -------------- +// The Marschner model divides hair rendering into three light paths: R, TT and TRT +// R - the light bounces straight off the hair fiber (Reflection) +// TT - the light penetrates the hair fiber and exits at the other side (Transmitance - Transmitance) +// TRT - the light penetrates the hair fiber, bounces inside and exists (Transmitance - Reflection - Transmitance) +// +// The calculations for each path are devided into longitude (M) and azimuth (N) terms: +// Longtitude: M_R, M_TT, M_TRT +// Azimuth: N_R, N_TT, N_TRT +// +// Other notations +// --------------- +// Wi - incoming light vector +// Wr - reflected light vector +// L - angles with respect to the Longitude +// O - vectors with respect to the azimuth +// Li and Lr are the longitudinal angles with respect to incoming/reflected light, i.e. the angle between +// those vector and the normal plane (plane perpendicular to the hair) +// Oi and Or are the azimuthal angles, i.e. the angles contained by the normal plane +// Lh and Oh are the averages, i.e. Lh = (Lr + Li) / 2 and Oh = (Or + Oi) / 2 +// Ld is the difference angle, i.e. Ld = (Lr - Li) / 2 +// O denotes the relative azimuth, simply O = (Or - Oi) + +#include + +//------------------------------------------------------------------------------ +option bool o_enableMarschner_R = true; +option bool o_enableMarschner_TRT = true; +option bool o_enableMarschner_TT = true; + +option bool o_enableDiffuseLobe = true; +option bool o_enableSpecularLobe = true; +option bool o_enableTransmittanceLobe = true; +//------------------------------------------------------------------------------ + +// Longitudinal functions (M_R, M_TT, M_RTR) +// Notice that tilt and roughness multipliers are a-priori per Epic artistic taste +float M_R(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.0f * surface.cuticleTilt; // Tilt is translate as the mean offset + float b = 0.5 * surface.roughnessA2; // Roughness is used as the standard deviation + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + +float M_TT(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.0 * surface.cuticleTilt; + float b = 0.5 * surface.roughnessA2; + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + +float M_TRT(Surface surface, float Lh, float sinLiPlusSinLr) +{ + float a = 1.5 * surface.cuticleTilt; + float b = 1.0 * surface.roughnessA2; + +// return GaussianNormalized(sinLiPlusSinLr, a, b); // reference + return GaussianNormalized(Lh, a, b); +} + + +// Azimuth functions (N_R, N_TT, N_RTR) +float N_R(Surface surface, float cos_O2, float3 Wi, float3 Wr, float f0) +{ + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick( sqrt(0.5 * dot(Wi, Wr) + 0.5) , f0); + + // Distribution term + float distribution = 0.25 * cos_O2; + + // No absorption term since this is the reflected light path + return fresnel * distribution; +} + +// Light passes through the hair and exits at the back - most dominant effect +// will be of lights at the back of the hair when the hair is thin and not concealed +float3 N_TT(Surface surface, float n2, float cos_O, float cos_O2, float3 cos_Ld, float f0) +{ + // Helper variables (see papers) + float a = rcp(n2); + float h = (1 + a * (0.6 - (0.8 * cos_O))) * cos_O2; + + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick(cos_Ld * sqrt( 1 - (h*h) ), f0); + fresnel = Pow2(1 - fresnel); + + // The absorption part of the attenuation term (A in the papers). + float3 absorption = pow(surface.albedo, sqrt( 1 - (h*h*a*a) ) / (2 * cos_Ld) ); + + // Distribution term + float distribution = exp(-3.65 * cos_O - 3.98); + + return absorption * (fresnel * distribution); +} + +float3 N_TRT(Surface surface, float cos_O, float3 cos_Ld, float f0) +{ + // Helper variables (see papers) + float h = sqrt(3.0f) * 0.5f; + + // Fresnel part of the attentuation term (A in the papers) + float fresnel = FresnelSchlick(cos_Ld * sqrt( 1 - (h*h) ), f0); + fresnel = Pow2(1 - fresnel) * fresnel; + + // How much light the hair will absorb. Part of the attenuation term (A in the papers) + float3 absorption = pow(surface.albedo, 0.8f / max(cos_Ld, 0.001) ); + + // Distribution term + float distribution = exp(17.0f * cos_O - 16.78f); + + return absorption * (fresnel * distribution); +} + +//------------------------------------------------------------------------------ +// The BSDF lighting function used by Hair +//------------------------------------------------------------------------------ +float3 HairMarschnerBSDF(Surface surface, LightingData lightingData, const float3 dirToLight) +{ + //-------------- Lighting Parameters Calculations --------------- + // Incoming and outgoing light directions + float3 Wi = normalize(dirToLight); // Incident light direction + float3 Wr = normalize(lightingData.dirToCamera); // Reflected light measurement direction AKA reflection + float3 T = normalize(surface.tangent); // Hair tangent + + // Incident light and reflection direction projected along the tangent + float Ti = T * dot(T, Wi); + float Tr = T * dot(T, Wr); + + // The light and reflection vectors projected along the normal plane to the hair. + // The plane is spliting the Azimuth and Longtitude angles and vectors contributions. + float3 NPi = normalize(Wi - Ti); + float3 NPr = normalize(Wr - Tr); + + // Azimuthal angle between the incident light vector and the reflection + // direction (the direction at which we measure the light scaterring) + // float O = acos(dot(NPi, NPr)) <- Unused, for reference only + float cos_O = dot(NPi, NPr); + + // cosine(O / 2) + float cos_O2 = sqrt(0.5 * cos_O + 0.5); // <- trigonometric formula for calculating cos(x/2) given cos(x) + + // Longitude angles + float Li = acos(clamp(dot(Wi, NPi),-1.0f, 1.0f)); + float Lr = acos(clamp(dot(Wr, NPr),-1.0f, 1.0f)); + float Lh = (Lr + Li) * 0.5f; + float Ld = (Lr - Li) * 0.5f; + + // The folowing is according to the original article - reference only + // float sinLiPlusSinLr = dot(Wi, NPi) * dot(Wr, NPr);// sin(Li) + sin(Lr); + float sinLiPlusSinLr = sin(Li) + sin(Lr); + + // Refraction index + const float n = 1.55f; + float cos_Ld = cos(Ld); + float n2 = (1.19f / cos_Ld) + 0.36f * cos_Ld; + + // Fresnel F0 + float f0 = Pow2( (1.0f - n) / (1.0f + n) ); + + //--------------- Lighting accumulation per lobe ------------------ + float3 lighting = float3(0.0f, 0.0f, 0.0f); + + // R Path - single reflection from the hair towards the eye. + if (o_enableMarschner_R) + { + float lighting_R = o_enableDiffuseLobe ? M_R(surface, Lh, sinLiPlusSinLr) : 1.0f; + if (o_enableSpecularLobe) + lighting_R *= N_R(surface, cos_O2, Wi, Wr, f0); + + // The following lines are a cheap method to get occluded reflection by accoounting + // for the thickness if the reflection of light is going through the hair. + // A reminder for this approximation - this is the R and not the TT lobe. + float lightToEye = saturate(-dot(Wi, Wr)); + float selfOcclude = lightToEye * surface.thickness; + float lightTransferRatio = 1.0f - selfOcclude; + lightTransferRatio *= lightTransferRatio; + lighting_R *= lightTransferRatio; + + lighting += float3(lighting_R, lighting_R, lighting_R); + } + + // TT Path - ray passes through the hair. + // The ray from the eye is refracted into the hair, then refracted again through the + // back of the hair. The main contribution here would for thin hair areas from lights + // behind the hair that are not concealed. For thicker hair this contribution should + // be blocked by the head consealing the back light and by the thickness of the hair + // that absorbs this energy over thick area hence reducing the energy pass based + // on the average thickness. + if (o_enableMarschner_TT) + { + float3 lighting_TT = o_enableDiffuseLobe ? M_TT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableSpecularLobe) + lighting_TT *= N_TT(surface, n2, cos_O, cos_O2, cos_Ld, f0); + + // Reduce back transmittance based on the thickness of the hair + lighting_TT *= (1.0f - surface.thickness); + lighting += lighting_TT; + } + + // TRT Path - ray refracted into the hair, reflected back inside and exits (refracted) + // the hair towards the eye. + if (o_enableMarschner_TRT) + { + float3 lighting_TRT = o_enableDiffuseLobe ? M_TRT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableSpecularLobe) + lighting_TRT *= N_TRT(surface, cos_O, cos_Ld, f0); + lighting += lighting_TRT; + } + + return lighting; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader new file mode 100644 index 0000000000..18d5b2d3bd --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairLocalShapeConstraintsCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "LocalShapeConstraints", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl new file mode 100644 index 0000000000..82c677faad --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.azsl @@ -0,0 +1,233 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//============================================================================== +#include +#include + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG the holds the dynamic shared read-write buffer shared +//! across all dispatches and draw calls and used for all the dynamic buffers +//! that can change between passes due to the application of skinning, simulation +//! and physics affect and is then read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass_WithFallback +{ //! This shared buffer needs to match the SharedBuffer structure + //! shared between all draw calls / dispatches for the hair skinning + StructuredBuffer m_skinnedHairSharedBuffer; + + //! Per Pixel Linked List data used by the render raster pass to generate per pixel + //! hair OIT data and shade it in the full screen resolve pass. + //! Originally used space3 for raster pass linked lists and space0 for the resolve pass. + RWTexture2D m_fragmentListHead; + RWStructuredBuffer m_linkedListNodes; + RWBuffer m_linkedListCounter; + + // Linear depth is used for getting the screen to world transform + Texture2D m_linearDepth; +} + +//------------------------------------------------------------------------------ +// Originally marked for the TressFX raster pass at space3 +#define RWFragmentListHead PassSrg::m_fragmentListHead +#define LinkedListUAV PassSrg::m_linkedListNodes +#define LinkedListCounter PassSrg::m_linkedListCounter +//------------------------------------------------------------------------------ + + +//!============================================================================= +//! +//! Per Instance Space 1 - Dynamic Buffers for Hair Skinning and Simulation +//! +//! ---------------------------------------------------------------------------- +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; +//!------------------------------ SRG Structure -------------------------------- +//! Per instance/draw SRG representing dynamic read-write set of buffers +//! that are unique per instance and are shared and changed between passes due +//! to the application of skinning, simulation and physics affect. +//! It is then also read by the rendering shaders. +//! This Srg is NOT shared by the passes since it requires having barriers between +//! both passes and draw calls, instead, all buffers are allocated from a single +//! shared buffer (through BufferViews) and that buffer is then shared between +//! the passes via the PerPass Srg frequency. +ShaderResourceGroup HairDynamicDataSrg : SRG_PerObject // space 1 - per instance / object +{ + Buffer m_hairVertexPositions; + Buffer m_hairVertexTangents; + + //! Per hair object offset to the start location of each buffer within + //! 'm_skinnedHairSharedBuffer'. The offset is in bytes! + uint m_positionBufferOffset; + uint m_tangentBufferOffset; +}; +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - skinning / simulation compute passes + +// Usage of per-instance buffer +#define g_GuideHairVertexPositions HairDynamicDataSrg::m_hairVertexPositions +#define g_GuideHairVertexTangents HairDynamicDataSrg::m_hairVertexTangents + +//============================================================================== +#include +//============================================================================== +//! Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +//! Hair Render VS +PS_INPUT_HAIR RenderHairVS(uint vertexId : SV_VertexID) +{ +// uint2 scrSize; +// PassSrg::m_linearDepth.GetDimensions(scrSize.x, scrSize.y); +// TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye.xyz, float2(scrSize), g_mVP); + + // [To Do] Hair: the above code should replace the existing but requires modifications to + // the function GetExpandedTressFXVert. + // Note that in Atom g_vViewport is aspect ratio and NOT size. + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye.xyz, g_vViewport.zw, g_mVP); + + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +// Allocate a new fragment location in fragment color, depth, and link buffers +int AllocateFragment(int2 vScreenAddress) +{ + uint newAddress; + InterlockedAdd(LinkedListCounter[0], 1, newAddress); + + if (newAddress < 0 || newAddress >= NodePoolSize) + newAddress = FRAGMENT_LIST_NULL; + return newAddress; +} + +// Insert a new fragment at the head of the list. The old list head becomes the +// the second fragment in the list and so on. Return the address of the *old* head. +int MakeFragmentLink(int2 vScreenAddress, int nNewHeadAddress) +{ + int nOldHeadAddress; + InterlockedExchange(RWFragmentListHead[vScreenAddress], nNewHeadAddress, nOldHeadAddress); + return nOldHeadAddress; +} + +// Write fragment attributes to list location. +void WriteFragmentAttributes(int nAddress, int nPreviousLink, float4 vData, float3 vColor3, float fDepth) +{ + PPLL_STRUCT element; + element.data = PackFloat4IntoUint(vData); + element.color = PackFloat3ByteIntoUint(vColor3, RenderParamsIndex); + element.depth = asuint(saturate(fDepth)); + element.uNext = nPreviousLink; + LinkedListUAV[nAddress] = element; +} + + +// Use the following structure for debug purposes for outputting test results to RT +// You can use depth, color or both when outputing and testing the calculation. +struct PSOutput +{ + float4 m_color : SV_Target0; + float m_depth : SV_Depth; +}; + + +////////////////////////////////////////////////////////////// +// PPLL Fill PS +// First pass of PPLL implementation +// Builds up the linked list of hair fragments +[earlydepthstencil] +void PPLLFillPS(PS_INPUT_HAIR input) +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read + // from texture in the vertex shader for base color along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + { + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + } + + ////////////////////////////////////////////////////////////////////// + // [To Do] Hair: anti aliasing via coverage requires work and is disabled for now + float3 vNDC = ScreenPosToNDC(PassSrg::m_linearDepth, input.Position.xy, input.Position.z); + uint2 dimensions; + PassSrg::m_linearDepth.GetDimensions(dimensions.x, dimensions.y); +// float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, float2(dimensions.x, dimensions.y)); + float coverage = 1.0; + ///////////////////////////////////////////////////////////////////// + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + float alpha = coverage * strandColor.w; + + // Early out + if (alpha < 1.f / 255.f) + { + discard; + } + + // Get the screen address + int2 vScreenAddress = int2(input.Position.xy); + + // Allocate a new fragment + int nNewFragmentAddress = AllocateFragment(vScreenAddress); + + int nOldFragmentAddress = MakeFragmentLink(vScreenAddress, nNewFragmentAddress); + WriteFragmentAttributes(nNewFragmentAddress, nOldFragmentAddress, + float4(input.Tangent.xyz * 0.5 + float3(0.5, 0.5, 0.5), alpha), + strandColor.xyz, + input.Position.z + ); +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader new file mode 100644 index 0000000000..e4859eca9b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingFillPPLL.shader @@ -0,0 +1,43 @@ +{ + "Source" : "HairRenderingFillPPLL.azsl", + "DrawList" : "hairFillPass", + + "DepthStencilState" : + { + "Depth" : + { + "Enable" : true, + "CompareFunc" : "GreaterEqual" + // Originally in TressFX this is LessEqual - Atom is using reverse sort + }, + "Stencil" : + { + "Enable" : false + } + }, + + "RasterState" : + { + "CullMode" : "None" + }, + + "BlendState" : + { + "Enable" : false + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "RenderHairVS", + "type": "Vertex" + }, + { + "name": "PPLLFillPS", + "type": "Fragment" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl new file mode 100644 index 0000000000..82c75280f6 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.azsl @@ -0,0 +1,394 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//============================================================================== +#include +#include + +#define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG that holds the dynamic shared read-write buffer shared +//! across all dispatches and draw calls. It is used for all the dynamic buffers +//! that can change between passes due to the application of skinning, simulation +//! and physics affect. +//! Once the compute pases are done, it is read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass_WithFallback +{ + //! Per Pixel Linked List data used by the render raster pass to generate per pixel + //! hair OIT data and shade it in the full screen resolve pass. + //! Originally used space3 for raster pass linked lists and space0 for the resolve pass. + Texture2D m_fragmentListHead; + StructuredBuffer m_linkedListNodes; + + //! Per hair object material array used by the PPLL resolve pass + //! Originally in TressFXRendering.hlsl this is space 0 + HairObjectShadeParams m_hairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; + + // Used as the base color to blend with the furthest hair strand - it is the first + // in the OIT process. + // It can also be used to avoid the HW blend done at the end of the pixel + // shader stage but HW blend might be cheaper than additional PS blend. + Texture2D m_frameBuffer; // The merged MSAA output + + // Linear depth is used for getting the screen to world transform + Texture2D m_linearDepth; + + //------------------------------ + // Lighting Data + //------------------------------ + Sampler LinearSampler + { // Required by LightingData.azsli + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; + }; + + Texture2DArray m_directionalLightShadowmap; + Texture2DArray m_directionalLightExponentialShadowmap; + Texture2DArray m_projectedShadowmaps; + Texture2DArray m_projectedExponentialShadowmap; + Texture2D m_brdfMap; + Texture2D m_tileLightData; + StructuredBuffer m_lightListRemapped; +} + +//------------------------------------------------------------------------------ +// Originally defined for the TressFX resolve pass at space0 +#define FragmentListHead PassSrg::m_fragmentListHead +#define LinkedListNodes PassSrg::m_linkedListNodes +//! The hair objects' material array buffer used by the rendering resolve pass +#define HairParams PassSrg::m_hairParams +//============================================================================== + +#include +#include +#include + +// Generates a fullscreen triangle from pipeline provided vertex id +VSOutput FullScreenVS(VSInput input) +{ + VSOutput OUT; + + float4 posTex = GetVertexPositionAndTexCoords(input.m_vertexID); + + OUT.m_texCoord = float2(posTex.z, posTex.w); + OUT.m_position = float4(posTex.x, posTex.y, 0.0, 1.0); + + return OUT; +} + +////////////////////////////////////////////////////////////// +// Bind data for PPLLResolvePS + +#define NODE_DATA(x) LinkedListNodes[x].data +#define NODE_NEXT(x) LinkedListNodes[x].uNext +#define NODE_DEPTH(x) LinkedListNodes[x].depth +#define NODE_COLOR(x) LinkedListNodes[x].color + +#define GET_DEPTH_AT_INDEX(uIndex) kBuffer[uIndex].x +#define GET_DATA_AT_INDEX(uIndex) kBuffer[uIndex].y +#define GET_COLOR_AT_INDEX(uIndex) kBuffer[uIndex].z +#define STORE_DEPTH_AT_INDEX(uIndex, uValue) kBuffer[uIndex].x = uValue +#define STORE_DATA_AT_INDEX( uIndex, uValue) kBuffer[uIndex].y = uValue +#define STORE_COLOR_AT_INDEX( uIndex, uValue ) kBuffer[uIndex].z = uValue + +float GetLinearDepth(float zDepth) +{ + return abs(((ViewSrg::GetFarZTimesNearZ()) / (ViewSrg::GetFarZMinusNearZ() * zDepth - ViewSrg::GetFarZ()))); +} + +float4 GatherLinkedList(float2 vfScreenAddress, float2 screenUV, inout float outDepth ) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + + if (pointer == FRAGMENT_LIST_NULL) // [To Do] Skips the very first hair if reset value is 0 + { + discard; + } + + uint4 kBuffer[KBUFFER_SIZE]; + + // Init kbuffer to far depth values (reverse depth - 0 is the furthest) + [unroll] + for (int t = 0; t < KBUFFER_SIZE; ++t) + { + STORE_DEPTH_AT_INDEX(t, asuint(0.0)); + STORE_DATA_AT_INDEX(t, 0); + } + + // Get first K elements from the top (top to bottom) + // And store them in the kbuffer for later + for (int p = 0; p < KBUFFER_SIZE; ++p) + { + if (pointer != FRAGMENT_LIST_NULL) + { + STORE_DEPTH_AT_INDEX(p, NODE_DEPTH(pointer)); + STORE_DATA_AT_INDEX(p, NODE_DATA(pointer)); + STORE_COLOR_AT_INDEX(p, NODE_COLOR(pointer)); + pointer = NODE_NEXT(pointer); + } + } + +// float4 fcolor = float4(1, 1, 1, 1); // Blend alpha and inverse alpha +// float4 fcolor = float4(1, 1, 1, 0); // Blend one and inverse alpha + // The very first color taken is the background render target pixel color. + // Alpha should be 1 for Alpha blend alpha and 0 for alpha One, depending on your + // alpha blending method of choice + // When using the render target as the input, alpha blending mode should be disabled! + float4 backgroundColor = float4(PassSrg::m_frameBuffer.Sample(PassSrg::LinearSampler, screenUV).xyz, 0); // Blend one and inverse alpha + float4 fcolor = backgroundColor; + float backgroundLinearDepth = PassSrg::m_linearDepth.Sample(PassSrg::LinearSampler, screenUV).x; + float previousLinearDepth = backgroundLinearDepth; + + // Go through the remaining layers of hair + [allow_uav_condition] + for (int iFragment = 0; iFragment < MAX_FRAGMENTS && pointer != FRAGMENT_LIST_NULL ; ++iFragment) + { + int id = 0; + float minDepth = 1.0; + + // Find the current furthest sample in the KBuffer + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (minDepth > fDepth) + { + minDepth = fDepth; + id = i; + } + } + + // Fetch the node data + uint data = NODE_DATA(pointer); + uint color = NODE_COLOR(pointer); + uint nodeDepth = NODE_DEPTH(pointer); + float fNodeDepth = asfloat(nodeDepth); + + // If the node in the linked list is nearer than the furthest one in the local array, exchange the node + // in the local array for the one in the linked list. + if (minDepth < fNodeDepth) + { + uint tmp = GET_DEPTH_AT_INDEX(id); + STORE_DEPTH_AT_INDEX(id, nodeDepth); + fNodeDepth = asfloat(tmp); + + tmp = GET_DATA_AT_INDEX(id); + STORE_DATA_AT_INDEX(id, data); + data = tmp; + + tmp = GET_COLOR_AT_INDEX(id); + STORE_COLOR_AT_INDEX(id, color); + color = tmp; + } + + // Calculate color contribution from whatever sample we are using + float4 vData = UnpackUintIntoFloat4(data); + float alpha = vData.w; + + uint shadeParamIndex; // So we know what settings to shade with + float3 fragmentColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + + // Cheap back layers - the bottom hair layers use background and scalp base color + // The first layer blends the image buffer and the rest of the hairs are blended + // on top. + // These layer also used as the blocking factor for the TT lobe in the Marschner + // lighting model by accumulating the depth. + fcolor.xyz = fcolor.xyz * (1.f - alpha) + fragmentColor * alpha; + fcolor.w += alpha * (1.0f - fcolor.w); + + pointer = NODE_NEXT(pointer); + } + + // Make sure we are blending the correct number of strands (don't blend more than we have) + float maxAlpha = 0; + float minDepth = 1.0; // furthest fragment in Atom + const float closeRangeTH = 0.01f; // Lying on the skin - block lights from the back + const float gapRangeTH = 0.05f; // Far enough from the previous hair - allow for TT lobe to pass + bool isCloseToObject = false; + + // Blend the top-most entries + for (int j = 0; j < KBUFFER_SIZE; j++) + { + int id = 0; + minDepth = 1.0; + + // find the furthest node in the array + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (minDepth > fDepth) + { + minDepth = fDepth; + id = i; + } + } + + // take this node out of the next search + uint nodeDepth = GET_DEPTH_AT_INDEX(id); + uint data = GET_DATA_AT_INDEX(id); + uint color = GET_COLOR_AT_INDEX(id); + + // take this node out of the next search + STORE_DEPTH_AT_INDEX(id, asuint(1.0)); + + // Use high quality shading for the nearest k fragments + float fDepth = asfloat(nodeDepth); + float currentLinearDepth = GetLinearDepth(fDepth); + + // Light should not pass through hair if the back of the hair is too close to the + // background object. In this case mark the hair as thick to prevent TT lobe from + // transmitting light and cancel light accumulation passed so far. + bool currentIsCloseToObject = (backgroundLinearDepth - currentLinearDepth < closeRangeTH) ? true : false; + if (!isCloseToObject && currentIsCloseToObject) + { // Indicate that the object behind is very close - need to preven any light passage. + // Food for Thought: should the color be reset to background color / other? + isCloseToObject = true; // TT should be blocked +// fcolor.xyz = backgroundColor; // remove the accumulated lighting so far + fcolor.w = 1.0; // Mark hair as thick / blocked from behind. + } + + // When the front hair strands are separated from the back, hence creating a large + // gap we should only count for the front hair group thickness (restart counting). + bool hairHasGap = (previousLinearDepth - currentLinearDepth > gapRangeTH) ? true : false; + if (!currentIsCloseToObject && hairHasGap) + { // These is a gap to the previous strands group - restard depth blocking + fcolor.w = 0.0f; // Reset the hair thickness - large gap. + } + + previousLinearDepth = currentLinearDepth; + + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; // Alpha will be used to determine light pass + uint shadeParamIndex; // So we know what settings to shade with + + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, fDepth, vTangent, vColor, fcolor.w, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + fragmentColor * alpha; + // No HW alpha blending - the first layer blends the image buffer and + // the rest of the hairs are blended on top. However, this might be used + // as the blocking factor for the TT lobe in the Marschner lighting model + // to gradually block light passing through the hair strands from the back. + fcolor.w += alpha * (1.0f - fcolor.w); + } + + outDepth = minDepth; // Output closest hair depth + return fcolor; +} + +//!----------------------------------------------------------------------------- +//! This method is a testing method for displaying only the closest hair +//! strand for getting a clear method for testing the lighting elelments, the +//! depth and the blending of a single hair strand. +//!----------------------------------------------------------------------------- +float4 GetClosestFragment(float2 vfScreenAddress, float2 screenUV, inout float closestDepth) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + if (pointer == FRAGMENT_LIST_NULL) + { + discard; + } + + float4 fcolor = float4(PassSrg::m_frameBuffer.Sample(PassSrg::LinearSampler, screenUV).xyz, 0); // Blend one and inverse alpha + + float maxDepth = -999.0f; + float minDepth = 999.0f; + uint curColor, curData; + for ( ; (pointer!=FRAGMENT_LIST_NULL) ; ) + { + float depth = asfloat(NODE_DEPTH(pointer)); + if (depth > maxDepth) + { + maxDepth = depth; + curColor = NODE_COLOR(pointer); + curData = NODE_DATA(pointer); + } + if (depth < minDepth) + { + minDepth = depth; + } + pointer = NODE_NEXT(pointer); + } + + float curDepth = closestDepth = maxDepth; + float4 vData = UnpackUintIntoFloat4(curData); + float3 vTangent = vData.xyz; + float alpha = 1.0; + uint shadeParamIndex; // the material index + float3 vColor = UnpackUintIntoFloat3Byte(curColor, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, curDepth, vTangent, vColor, fcolor.w, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (fragmentColor * alpha); + fcolor.w = saturate(fcolor.w + alpha); // Blend alpha and inverse alpha + + /*-------------------- + // Depth Testing - this block will draw [closets hair depth, furthest hair depth, background depth] + float backgroundLinearDepth = PassSrg::m_linearDepth.Sample(PassSrg::LinearSampler, screenUV).x; + float minLinearDepth = GetLinearDepth(minDepth); + float maxLinearDepth = GetLinearDepth(maxDepth); + fcolor = float4( minLinearDepth * 0.1f, maxLinearDepth * 0.1f, backgroundLinearDepth * 0.1f, 1.0f); + //------------------- */ + + return fcolor; +} + +struct PSColorDepthOutput +{ + float4 m_color : SV_Target; + float m_depth : SV_Depth; +}; + +// The resolve will combine the base color driven by the further fragments while +// the actual shading will be combined on top based on the shaded closest fragments. +// The closest depth will be returned and written in the depth buffer. +PSColorDepthOutput PPLLResolvePS(VSOutput input) +{ + PSColorDepthOutput pixOut; + + // GetClosestFragment is a refernece method for testing the closest hair strand lone +// pixOut.m_color = GetClosestFragment(input.m_position.xy, input.m_texCoord, tangent, pixOut.m_depth); + + pixOut.m_color = GatherLinkedList(input.m_position.xy, input.m_texCoord, pixOut.m_depth); + + return pixOut; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader new file mode 100644 index 0000000000..b3d56b980b --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingResolvePPLL.shader @@ -0,0 +1,42 @@ +{ + "Source" : "HairRenderingResolvePPLL.azsl", + + "DepthStencilState" : + { + "Depth" : + { + "Enable" : true, // The resolve will write the closest hair depth + // Pixels that don't belong to the hair will be discarded, otherwise if a fragment + // already exists in the list, it passed the depth test in the fill pass + "CompareFunc" : "Always" + }, + "Stencil" : + { + "Enable" : false + } + }, + + // Note that in the original TressFX 4.1 a blend operation is used with source One and destination AlphaSource. + // In our current implementation alpha blending is not required as the backbuffer is being sampled to create + // the proper background color. This will prevent having the slight silhuette that the original implementation + // sometime had. + "BlendState" : + { + "Enable" : false + }, + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "FullScreenVS", + "type": "Vertex" + }, + { + "name": "PPLLResolvePS", + "type": "Fragment" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli new file mode 100644 index 0000000000..314592befc --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairRenderingSrgs.azsli @@ -0,0 +1,203 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//------------------------------------------------------------------------------ +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +// originated from: TressFXRendering.hlsl + +#pragma once + +#include + +//------------------------------------------------------------------------------ +#define g_mVP ViewSrg::m_viewProjectionMatrix +#define g_vEye ViewSrg::m_worldPosition.xyz +#define g_vViewport ViewSrg::m_unprojectionConstants // xy = normaliz scale, zw = offset in 0..1 scale +#define cInvViewProjMatrix ViewSrg::m_viewProjectionInverseMatrix +//------------------------------------------------------------------------------ + +#define AMD_PI 3.1415926 +#define AMD_e 2.71828183 +#define AMD_TRESSFX_KERNEL_SIZE 5 +#define KBUFFER_SIZE 8 +#define MAX_FRAGMENTS 512 +// Using value 0 as indicator will skip the first hair fragment to allow +// for clear screen value (0). +// If Atom will allow other value (0xffffffff) this can be avoided. +#define FRAGMENT_LIST_NULL 0 +//!============================================================================= +//! +//! Render Pass only +//! +//!============================================================================= +// If you change this, you MUST also change TressFXRenderParams in TressFXConstantBuffers.h +// originally: cbuffer TressFXParameters : register(b3, space0) +struct TressFXRenderParameters +{ + // General information + float m_hairFiberRadius; + + // For deep approximated shadow lookup + float m_shadowAlpha; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_hairKs2; + float m_hairEx2; + float3 m_fPadding0; + float4 m_matKValue; + + int m_maxShadowFibers; + + // Marschner lighting model parameters + float m_roughness; + float m_cuticleTilt; + + float m_fPadding1; +}; + +// Separate strand params from pixel render params (so we can index for PPLL) +// If you change this, you MUST change TressFXStrandParams in TressFXConstantBuffers.h +// originally: cbuffer TressFXStrandParameters : register(b4, space0) +struct TressFXStrandParameters +{ + float4 m_matBaseColor; + float4 m_matTipColor; + + float m_tipPercentage; + float m_strandUVTilingFactor; + float m_fiberRatio; + float m_fiberRadius; + + int m_numVerticesPerStrand; + int m_enableThinTip; + int m_nodePoolSize; + int m_renderParamsIndex; // Material index in the hair material array + + // Other params + int m_enableStrandUV; + int m_enableStrandTangent; + int2 m_iPadding1; +}; + +//!------------------------------ SRG Structure -------------------------------- +//! Used by the rendering raster pass only - might be possible to harness +//! the material pipeline / tooling. +//! This is the per draw Srg containing the specific per hair object parameters +//! for the physics simulation and material rendering. +//! Originally at space0 in TressFXRendering.hlsl +//!----------------------------------------------------------------------------- +ShaderResourceGroup HairRenderingMaterialSrg : SRG_PerMaterial +{ + // Generated + Buffer m_hairThicknessCoeffs; // Does not seem to be used! + Buffer m_hairStrandTexCd; + + //! The hair textures defining the color of the hair at its base + Texture2D m_baseAlbedoTexture; + Texture2D m_strandAlbedoTexture; + + //! The hair render material properties (combined with the above textures) + TressFXRenderParameters m_tressFXRenderParameters; + + //! The hair object physical material properties. + TressFXStrandParameters m_tressFXStrandParameters; + + Sampler LinearWrapSampler + { + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + AddressU = Wrap; + AddressV = Wrap; + AddressW = Wrap; + }; +}; +//------------------------------------------------------------------------------ +#define g_HairThicknessCoeffs HairRenderingMaterialSrg::m_hairThicknessCoeffs +#define g_HairStrandTexCd HairRenderingMaterialSrg::m_hairStrandTexCd +#define BaseAlbedoTexture HairRenderingMaterialSrg::m_baseAlbedoTexture +#define StrandAlbedoTexture HairRenderingMaterialSrg::m_strandAlbedoTexture +#define LinearWrapSampler HairRenderingMaterialSrg::LinearWrapSampler + +#define HairFiberRadius HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairFiberRadius +#define ShadowAlpha HairRenderingMaterialSrg::m_tressFXRenderParameters.m_shadowAlpha +#define FiberSpacing HairRenderingMaterialSrg::m_tressFXRenderParameters.m_fiberSpacing +#define HairKs2 HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairKs2 +#define HairEx2 HairRenderingMaterialSrg::m_tressFXRenderParameters.m_hairEx2 +#define MatKValue HairRenderingMaterialSrg::m_tressFXRenderParameters.m_matKValue +#define MaxShadowFibers HairRenderingMaterialSrg::m_tressFXRenderParameters.m_maxShadowFibers + +#define MatBaseColor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_matBaseColor +#define MatTipColor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_matTipColor +#define TipPercentage HairRenderingMaterialSrg::m_tressFXStrandParameters.m_tipPercentage +#define StrandUVTilingFactor HairRenderingMaterialSrg::m_tressFXStrandParameters.m_strandUVTilingFactor +#define FiberRatio HairRenderingMaterialSrg::m_tressFXStrandParameters.m_fiberRatio +#define FiberRadius HairRenderingMaterialSrg::m_tressFXStrandParameters.m_fiberRadius +#define NumVerticesPerStrand HairRenderingMaterialSrg::m_tressFXStrandParameters.m_numVerticesPerStrand +#define EnableThinTip HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableThinTip +#define NodePoolSize HairRenderingMaterialSrg::m_tressFXStrandParameters.m_nodePoolSize +#define RenderParamsIndex HairRenderingMaterialSrg::m_tressFXStrandParameters.m_renderParamsIndex +#define EnableStrandUV HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableStrandUV +#define EnableStrandTangent HairRenderingMaterialSrg::m_tressFXStrandParameters.m_enableStrandTangent +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +//! If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h +//! and ShadeParams in TressFXShortcut.hlsl +struct HairObjectShadeParams +{ + // General information + float m_fiberRadius; + // For deep approximated shadow lookup + float m_shadowAlpha; + float m_fiberSpacing; + + // Original TressFX Kajiya lighting model parameters + float m_hairEx2; + float4 m_matKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float m_hairKs2; + + // Marschner lighting model parameters + float m_roughness; + float m_cuticleTilt; + + float fPadding0; +}; + +//------------------------------------------------------------------------------ +struct PPLL_STRUCT +{ + uint depth; + uint data; + uint color; + uint uNext; +}; +//------------------------------------------------------------------------------ diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli new file mode 100644 index 0000000000..a3ee3b9769 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCommon.azsli @@ -0,0 +1,444 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +//-------------------------------------------------------------------------------------- +// File: HairSimulation.azsl +// +// Physics simulation of hair using compute shaders +//-------------------------------------------------------------------------------------- + +#pragma once + +#define USE_MESH_BASED_HAIR_TRANSFORM 0 + +// If you change the value below, you must change it in TressFXAsset.h as well. +#ifndef THREAD_GROUP_SIZE + #define THREAD_GROUP_SIZE 64 +#endif + +groupshared float4 sharedPos[THREAD_GROUP_SIZE]; +groupshared float4 sharedTangent[THREAD_GROUP_SIZE]; +groupshared float sharedLength[THREAD_GROUP_SIZE]; + +//-------------------------------------------------------------------------------------- +// +// Helper Functions for the main simulation shaders +// +//-------------------------------------------------------------------------------------- +bool IsMovable(float4 particle) +{ + if ( particle.w > 0 ) + return true; + return false; +} + +float2 ConstraintMultiplier(float4 particle0, float4 particle1) +{ + if (IsMovable(particle0)) + { + if (IsMovable(particle1)) + return float2(0.5, 0.5); + else + return float2(1, 0); + } + else + { + if (IsMovable(particle1)) + return float2(0, 1); + else + return float2(0, 0); + } +} + +float4 MakeQuaternion(float angle_radian, float3 axis) +{ + // create quaternion using angle and rotation axis + float4 quaternion; + float halfAngle = 0.5f * angle_radian; + float sinHalf = sin(halfAngle); + + quaternion.w = cos(halfAngle); + quaternion.xyz = sinHalf * axis.xyz; + + return quaternion; +} + +// Makes a quaternion from a 4x4 column major rigid transform matrix. Rigid transform means that rotational 3x3 sub matrix is orthonormal. +// Note that this function does not check the orthonormality. +float4 MakeQuaternion(column_major float4x4 m) +{ + float4 q; + float trace = m[0][0] + m[1][1] + m[2][2]; + + if (trace > 0.0f) + { + float r = sqrt(trace + 1.0f); + q.w = 0.5 * r; + r = 0.5 / r; + q.x = (m[1][2] - m[2][1])*r; + q.y = (m[2][0] - m[0][2])*r; + q.z = (m[0][1] - m[1][0])*r; + } + else + { + int i = 0, j = 1, k = 2; + + if (m[1][1] > m[0][0]) + { + i = 1; j = 2; k = 0; + } + if (m[2][2] > m[i][i]) + { + i = 2; j = 0; k = 1; + } + + float r = sqrt(m[i][i] - m[j][j] - m[k][k] + 1.0f); + + float qq[4]; + + qq[i] = 0.5f * r; + r = 0.5f / r; + q.w = (m[j][k] - m[k][j])*r; + qq[j] = (m[j][i] + m[i][j])*r; + qq[k] = (m[k][i] + m[i][k])*r; + + q.x = qq[0]; q.y = qq[1]; q.z = qq[2]; + } + + return q; +} + +float4 InverseQuaternion(float4 q) +{ + float lengthSqr = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if ( lengthSqr < 0.001 ) + return float4(0, 0, 0, 1.0f); + + q.x = -q.x / lengthSqr; + q.y = -q.y / lengthSqr; + q.z = -q.z / lengthSqr; + q.w = q.w / lengthSqr; + + return q; +} + +float3 MultQuaternionAndVector(float4 q, float3 v) +{ + float3 uv, uuv; + float3 qvec = float3(q.x, q.y, q.z); + uv = cross(qvec, v); + uuv = cross(qvec, uv); + uv *= (2.0f * q.w); + uuv *= 2.0f; + + return v + uv + uuv; +} + +float4 MultQuaternionAndQuaternion(float4 qA, float4 qB) +{ + float4 q; + + q.w = qA.w * qB.w - qA.x * qB.x - qA.y * qB.y - qA.z * qB.z; + q.x = qA.w * qB.x + qA.x * qB.w + qA.y * qB.z - qA.z * qB.y; + q.y = qA.w * qB.y + qA.y * qB.w + qA.z * qB.x - qA.x * qB.z; + q.z = qA.w * qB.z + qA.z * qB.w + qA.x * qB.y - qA.y * qB.x; + + return q; +} + +float4 NormalizeQuaternion(float4 q) +{ + float4 qq = q; + float n = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if (n < 1e-10f) + { + qq.w = 1; + return qq; + } + + qq *= 1.0f / sqrt(n); + return qq; +} + +// Compute a quaternion which rotates u to v. u and v must be unit vector. +float4 QuatFromTwoUnitVectors(float3 u, float3 v) +{ + float r = 1.f + dot(u, v); + float3 n; + + // if u and v are parallel + if (r < 1e-7) + { + r = 0.0f; + n = abs(u.x) > abs(u.z) ? float3(-u.y, u.x, 0.f) : float3(0.f, -u.z, u.y); + } + else + { + n = cross(u, v); + } + + float4 q = float4(n.x, n.y, n.z, r); + return NormalizeQuaternion(q); +} + +// Make the inpute 4x4 matrix be identity +float4x4 MakeIdentity() +{ + float4x4 m; + m._m00 = 1; m._m01 = 0; m._m02 = 0; m._m03 = 0; + m._m10 = 0; m._m11 = 1; m._m12 = 0; m._m13 = 0; + m._m20 = 0; m._m21 = 0; m._m22 = 1; m._m23 = 0; + m._m30 = 0; m._m31 = 0; m._m32 = 0; m._m33 = 1; + + return m; +} + +void ApplyDistanceConstraint(inout float4 pos0, inout float4 pos1, float targetDistance, float stiffness = 1.0) +{ + float3 delta = pos1.xyz - pos0.xyz; + float distance = max(length(delta), 1e-7); + float stretching = 1 - targetDistance / distance; + delta = stretching * delta; + float2 multiplier = ConstraintMultiplier(pos0, pos1); + + pos0.xyz += multiplier[0] * delta * stiffness; + pos1.xyz -= multiplier[1] * delta * stiffness; +} + +void CalcIndicesInVertexLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInVertexLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInStrandLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +void CalcIndicesInStrandLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +//-------------------------------------------------------------------------------------- +// +// Integrate +// +// Verlet integration for calculating the new position based on exponential decay to move +// from the current position towards an approximated extrapolation point based +// on the velocity between the two last points and influenced by gravity force. +//-------------------------------------------------------------------------------------- +float3 Integrate(float3 curPosition, float3 oldPosition, float3 initialPos, float dampingCoeff = 1.0f) +{ + float3 force = g_GravityMagnitude * float3(0, 0, -1.0f); + // float decay = exp(-g_TimeStep/decayTime) + float decay = exp(-dampingCoeff * g_TimeStep * 60.0f); + return curPosition + decay * (curPosition - oldPosition) + force * g_TimeStep * g_TimeStep; +} + + +struct CollisionCapsule +{ + float4 p0; // xyz = position of capsule 0, w = radius 0 + float4 p1; // xyz = position of capsule 1, w = radius 1 +}; + +//-------------------------------------------------------------------------------------- +// +// CapsuleCollision +// +// Moves the position based on collision with capsule +// +//-------------------------------------------------------------------------------------- +bool CapsuleCollision(float4 curPosition, float4 oldPosition, inout float3 newPosition, CollisionCapsule cc, float friction = 0.4f) +{ + const float radius0 = cc.p0.w; + const float radius1 = cc.p1.w; + newPosition = curPosition.xyz; + + if ( !IsMovable(curPosition) ) + return false; + + float3 segment = cc.p1.xyz - cc.p0.xyz; + float3 delta0 = curPosition.xyz - cc.p0.xyz; + float3 delta1 = cc.p1.xyz - curPosition.xyz; + + float dist0 = dot(delta0, segment); + float dist1 = dot(delta1, segment); + + // colliding with sphere 1 + if (dist0 < 0.f ) + { + if ( dot(delta0, delta0) < radius0 * radius0) + { + float3 n = normalize(delta0); + newPosition = radius0 * n + cc.p0.xyz; + return true; + } + + return false; + } + + // colliding with sphere 2 + if (dist1 < 0.f ) + { + if ( dot(delta1, delta1) < radius1 * radius1) + { + float3 n = normalize(-delta1); + newPosition = radius1 * n + cc.p1.xyz; + return true; + } + + return false; + } + + // colliding with middle cylinder + float3 x = (dist0 * cc.p1.xyz + dist1 * cc.p0.xyz) / (dist0 + dist1); + float3 delta = curPosition.xyz - x; + + float radius_at_x = (dist0 * radius1 + dist1 * radius0) / (dist0 + dist1); + + if ( dot(delta, delta) < radius_at_x * radius_at_x) + { + float3 n = normalize(delta); + float3 vec = curPosition.xyz - oldPosition.xyz; + float3 segN = normalize(segment); + float3 vecTangent = dot(vec, segN) * segN; + float3 vecNormal = vec - vecTangent; + newPosition = oldPosition.xyz + friction * vecTangent + (vecNormal + radius_at_x * n - delta); + return true; + } + + return false; +} + +float3 ApplyVertexBoneSkinning(float3 vertexPos, BoneSkinningData skinningData, inout float4 bone_quat) +{ + float3 newVertexPos; + +#if TRESSFX_DQ + { + // weighted rotation part of dual quaternion + float4 nq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2] * skinningData.boneWeight.x + + g_BoneSkinningDQ[skinningData.boneIndex.y * 2] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2] * skinningData.boneWeight.z + + g_BoneSkinningDQ[skinningData.boneIndex.w * 2] * skinningData.boneWeight.w; + + // weighted tranlation part of dual quaternion + float4 dq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2 + 1] * skinningData.boneWeight.x + + g_BoneSkinningDQ[skinningData.boneIndex.y * 2 + 1] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2 + 1] * skinningData.boneWeight.z + + g_BoneSkinningDQ[skinningData.boneIndex.w * 2 + 1] * skinningData.boneWeight.w; + + float len = rsqrt(dot(nq, nq)); + nq *= len; + dq *= len; + + bone_quat = nq; + + //convert translation part of dual quaternion to translation vector: + float3 translation = (nq.w*dq.xyz - dq.w*nq.xyz + cross(nq.xyz, dq.xyz)) * 2; + + newVertexPos = MultQuaternionAndVector(nq, vertexPos) + translation.xyz; + } +#else + { + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinningData.boneIndex[0]] * skinningData.boneWeight[0]; + float weight_sum = skinningData.boneWeight[0]; + + for (int i = 1; i < 4; i++) + { + if (skinningData.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinningData.boneIndex[i]] * skinningData.boneWeight[i]; + weight_sum += skinningData.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + bone_quat = MakeQuaternion(bone_matrix); + + newVertexPos = mul(float4(vertexPos, 1), bone_matrix).xyz; + } +#endif + + return newVertexPos; +} + + +//-------------------------------------------------------------------------------------- +// +// UpdateFinalVertexPositions +// +// Updates the hair vertex positions based on the physics simulation +// +//-------------------------------------------------------------------------------------- +void UpdateFinalVertexPositions(float4 oldPosition, float4 newPosition, int globalVertexIndex) +{ + SetSharedPrevPrevPosition(globalVertexIndex, GetSharedPrevPosition(globalVertexIndex)); + SetSharedPrevPosition(globalVertexIndex, oldPosition); + SetSharedPosition(globalVertexIndex, newPosition); +} +//-------------------------------------------------------------------------------------- diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl new file mode 100644 index 0000000000..f8d178206a --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl @@ -0,0 +1,437 @@ +/* +* Modifications Copyright (c) Contributors to the Open 3D Engine Project. +* For complete copyright and license terms please see the LICENSE at the root of this distribution. +* +* SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT +* +*/ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- +#include +#include + +//-------------------------------------------------------------------------------------- +// +// IntegrationAndGlobalShapeConstraints +// +// Compute shader to simulate the gravitational force with integration and to maintain the +// global shape constraints. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void IntegrationAndGlobalShapeConstraints( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data from init rest data to be used to set updated shared memory + float4 initialPos = float4(CM_TO_METERS,CM_TO_METERS,CM_TO_METERS,1.0) * g_InitialHairPositions[globalVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + + // position when this step starts. In other words, a position from the last step. + sharedPos[indexForSharedMem] = GetSharedPosition(globalVertexIndex); + float4 currentPos = sharedPos[indexForSharedMem]; + // float4 currentPos = sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + + GroupMemoryBarrierWithGroupSync(); + + // Integrate + float dampingCoeff = GetDamping(strandType); + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + // reset if we got teleported + if (g_ResetPositions != 0.0f) + { // Originally part of the data here was NaN as the original TressFX code wrote number + // vertices including the follow hair although the shader accounts for that, hence + // memory was overwriten. In our implementation the memory resides all within + // a single buffer and this would actively overwrite the rest of the buffer hence + // destroying the original contexnt. + currentPos = initialPos; + g_HairVertexPositions[globalVertexIndex] = initialPos; + g_HairVertexPositionsPrev[globalVertexIndex] = initialPos; + g_HairVertexPositionsPrevPrev[globalVertexIndex] = initialPos; + oldPos = initialPos; + } + + // skipping all the physics simulation in between + if ( IsMovable(currentPos) ) + sharedPos[indexForSharedMem].xyz = Integrate(currentPos.xyz, oldPos.xyz, initialPos.xyz, dampingCoeff); + else + sharedPos[indexForSharedMem] = initialPos; + + // Global Shape Constraints + float stiffnessForGlobalShapeMatching = GetGlobalStiffness(strandType); + float globalShapeMatchingEffectiveRange = GetGlobalRange(strandType); + + if ( stiffnessForGlobalShapeMatching > 0 && globalShapeMatchingEffectiveRange ) + { + if ( IsMovable(sharedPos[indexForSharedMem]) ) + { + if ( (float)localVertexIndex < globalShapeMatchingEffectiveRange * (float)numVerticesInTheStrand ) + { + float factor = stiffnessForGlobalShapeMatching; + float3 del = factor * (initialPos - sharedPos[indexForSharedMem]).xyz; + sharedPos[indexForSharedMem].xyz += del; + } + } + } + + // update global position buffers + UpdateFinalVertexPositions(currentPos, sharedPos[indexForSharedMem], globalVertexIndex); +} + + +//-------------------------------------------------------------------------------------- +// +// Calculate Strand Level Data +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes two vertices within a strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CalculateStrandLevelData( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // Accounting for the right and left side of the strand. + float4 pos_old_old[2]; // previous previous positions for vertex 0 (root) and vertex 1. + float4 pos_old[2]; // previous positions for vertex 0 (root) and vertex 1. + float4 pos_new[2]; // current positions for vertex 0 (root) and vertex 1. + + pos_old_old[0] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex]; + pos_old_old[1] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex + 1]; + + pos_old[0] = g_HairVertexPositionsPrev[globalRootVertexIndex]; + pos_old[1] = g_HairVertexPositionsPrev[globalRootVertexIndex + 1]; + + pos_new[0] = g_HairVertexPositions[globalRootVertexIndex]; + pos_new[1] = g_HairVertexPositions[globalRootVertexIndex + 1]; + + float3 u = normalize(pos_old[1].xyz - pos_old[0].xyz); + float3 v = normalize(pos_new[1].xyz - pos_new[0].xyz); + + // Compute rotation and translation which transform pos_old to pos_new. + // Since the first two vertices are immovable, we can assume that there is no scaling during tranform. + float4 rot = QuatFromTwoUnitVectors(u, v); + float3 trans = pos_new[0].xyz - MultQuaternionAndVector(rot, pos_old[0].xyz); + + float vspCoeff = GetVelocityShockPropogation(); + float restLength0 = g_HairRestLengthSRV[globalRootVertexIndex]; + float vspAccelThreshold = GetVSPAccelThreshold(); + + // Increase the VSP coefficient by checking pseudo-acceleration to handle over-stretching when the character moves very fast + float accel = length(pos_new[1] - 2.0 * pos_old[1] + pos_old_old[1]); + + if (accel > vspAccelThreshold) + vspCoeff = 1.0f; + g_StrandLevelData[globalStrandIndex].vspQuat = rot; + g_StrandLevelData[globalStrandIndex].vspTranslation = float4(trans, vspCoeff); + + // Skinning + + // Copy data from init rest data to be used to set updated shared memory + float4 initialPos = float4(CM_TO_METERS,CM_TO_METERS,CM_TO_METERS,1.0) * g_InitialHairPositions[globalRootVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + g_StrandLevelData[globalStrandIndex].skinningQuat = bone_quat; +} + + +//-------------------------------------------------------------------------------------- +// +// VelocityShockPropagation +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes a vertex in a strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void VelocityShockPropagation( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // The first two vertices are the ones attached to the skin + if (localVertexIndex < 2) + return; + + float4 vspQuat = g_StrandLevelData[globalStrandIndex].vspQuat; + float4 vspTrans = g_StrandLevelData[globalStrandIndex].vspTranslation; + float vspCoeff = vspTrans.w; + + float4 pos_new_n = g_HairVertexPositions[globalVertexIndex]; + float4 pos_old_n = g_HairVertexPositionsPrev[globalVertexIndex]; + + pos_new_n.xyz = (1.f - vspCoeff) * pos_new_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_new_n.xyz) + vspTrans.xyz); + pos_old_n.xyz = (1.f - vspCoeff) * pos_old_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_old_n.xyz) + vspTrans.xyz); + + g_HairVertexPositions[globalVertexIndex].xyz = pos_new_n.xyz; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = pos_old_n.xyz; +} + + +//-------------------------------------------------------------------------------------- +// +// LocalShapeConstraints +// +// Compute shader to maintain the local shape constraints. +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LocalShapeConstraints( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // stiffness for local shape constraints + float stiffnessForLocalShapeMatching = GetLocalStiffness(strandType); + + // Going beyond the TH will create less stability in convergence + const float stabilityTH = 0.95f; + stiffnessForLocalShapeMatching = 0.5f * min(stiffnessForLocalShapeMatching, stabilityTH); + + //-------------------------------------------- + // Local shape constraint for bending/twisting + //-------------------------------------------- + { + float4 boneQuat = g_StrandLevelData[globalStrandIndex].skinningQuat; + + // vertex 1 through n-1 + for (uint localVertexIndex = 1; localVertexIndex < numVerticesInTheStrand - 1; localVertexIndex++) + { + uint globalVertexIndex = globalRootVertexIndex + localVertexIndex; + + float4 pos = g_HairVertexPositions[globalVertexIndex]; + float4 pos_plus_one = g_HairVertexPositions[globalVertexIndex + 1]; + float4 pos_minus_one = g_HairVertexPositions[globalVertexIndex - 1]; + + float3 bindPos = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex].xyz * CM_TO_METERS); + float3 bindPos_plus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex + 1].xyz * CM_TO_METERS); + float3 bindPos_minus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex - 1].xyz * CM_TO_METERS); + + float3 lastVec = pos.xyz - pos_minus_one.xyz; + + float3 vecBindPose = bindPos_plus_one - bindPos; + float3 lastVecBindPose = bindPos - bindPos_minus_one; + float4 rotGlobal = QuatFromTwoUnitVectors(normalize(lastVecBindPose), normalize(lastVec)); + + float3 orgPos_i_plus_1_InGlobalFrame = MultQuaternionAndVector(rotGlobal, vecBindPose) + pos.xyz; + float3 del = stiffnessForLocalShapeMatching * (orgPos_i_plus_1_InGlobalFrame - pos_plus_one.xyz); + + if (IsMovable(pos)) + pos.xyz -= del.xyz; + + if (IsMovable(pos_plus_one)) + pos_plus_one.xyz += del.xyz; + + + g_HairVertexPositions[globalVertexIndex].xyz = pos.xyz; + g_HairVertexPositions[globalVertexIndex + 1].xyz = pos_plus_one.xyz; + } + } +} + +//-------------------------------------------------------------------------------------- +// +// LengthConstriantsWindAndCollision +// +// Compute shader to move the vertex position based on wind, maintain the lenght constraints +// and handles collisions. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LengthConstriantsWindAndCollision(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + + //------------------------------ + // Copy data into shared memory + //------------------------------ + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedLength[indexForSharedMem] = g_HairRestLengthSRV[globalVertexIndex] * CM_TO_METERS; + + GroupMemoryBarrierWithGroupSync(); + +/* + //------------ + // Wind - does not work yet and requires some LTC + //------------ + if (any(g_Wind.xyz)) // g_Wind.w is the current frame + { + float4 force = float4(0, 0, 0, 0); + + if ( localVertexIndex >= 2 && localVertexIndex < numVerticesInTheStrand-1 ) + { + // combining four winds. + float a = ((float)(globalStrandIndex % 20))/20.0f; + float3 w = a* g_Wind.xyz + (1.0f - a) * g_Wind1.xyz + a * g_Wind2.xyz + (1.0f - a) * g_Wind3.xyz; +// float3 w = float3(5.2, 0, 0); + + uint sharedIndex = localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + float3 v = sharedPos[sharedIndex].xyz - sharedPos[sharedIndex+numOfStrandsPerThreadGroup].xyz; + float3 force = -cross(cross(v, w), v); + sharedPos[sharedIndex].xyz += force*g_TimeStep*g_TimeStep; + } + } + + GroupMemoryBarrierWithGroupSync(); +*/ + //---------------------------- + // Enforce length constraints + //---------------------------- + uint a = numVerticesInTheStrand/2.0f; + uint b = (numVerticesInTheStrand-1)/2.0f; + + int lengthContraintIterations = GetLengthConstraintIterations(); + + for ( int iterationE=0; iterationE < lengthContraintIterations; iterationE++ ) + { + uint sharedIndex = 2 * localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + // Notice that the following is based on the fact that we are dealing here with two vertices + // one at each side of the central control point and each should extend towards its side only. + if( localVertexIndex < a ) + ApplyDistanceConstraint(sharedPos[sharedIndex], sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedLength[sharedIndex].x); + + GroupMemoryBarrierWithGroupSync(); + + if( localVertexIndex < b ) + ApplyDistanceConstraint(sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedPos[sharedIndex+numOfStrandsPerThreadGroup*2], sharedLength[sharedIndex+numOfStrandsPerThreadGroup].x); + + GroupMemoryBarrierWithGroupSync(); + } + + //------------------------------------------ + // Collision handling with capsule objects + //------------------------------------------ + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + bool bAnyColDetected = false; // Adi +// bool bAnyColDetected = ResolveCapsuleCollisions(sharedPos[indexForSharedMem], oldPos); + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //--------------------------------------- + // clamp velocities, rewrite history + //--------------------------------------- + float3 positionDelta = sharedPos[indexForSharedMem].xyz - oldPos; + float speedSqr = dot(positionDelta, positionDelta); + if (speedSqr > g_ClampPositionDelta * g_ClampPositionDelta) { + positionDelta *= g_ClampPositionDelta * g_ClampPositionDelta / speedSqr; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = sharedPos[indexForSharedMem].xyz - positionDelta; + } + + //--------------------------------------- + // update global position buffers + //--------------------------------------- + g_HairVertexPositions[globalVertexIndex] = sharedPos[indexForSharedMem]; + + if (bAnyColDetected) + g_HairVertexPositionsPrev[globalVertexIndex] = sharedPos[indexForSharedMem]; + + return; +} + +//-------------------------------------------------------------------------------------- +// +// UpdateFollowHairVertices +// +// Last stage update of the follow hair to follow their guide hair +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void UpdateFollowHairVertices( + uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = GetSharedPosition(globalVertexIndex); // g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem].xyz = GetSharedTangent(globalVertexIndex); // g_HairVertexTangents[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor * CM_TO_METERS * g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + + SetSharedPosition3(globalFollowVertexIndex, followPos); + // g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + //----------------------- + // SetSharedTangent(globalFollowVertexIndex, sharedTangent[indexForSharedMem]); + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli new file mode 100644 index 0000000000..f95dac92cf --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationSrgs.azsli @@ -0,0 +1,179 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//----------------------------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//------------------------------------------------------------------------------ +// File: HairSRGs.azsli +// +// Declarations of SRGs used by the hair shaders. +//------------------------------------------------------------------------------ +#pragma once + +#include + +//!----------------------------------------------------------------------------- +//! +//! Skinning / Simulation Render Usage +//! Per Objects Space 0 - Static Buffers for Hair Generation +//! +//! ---------------------------------------------------------------------------- +struct TressFXSimulationParams +{ + float4 m_Wind; + float4 m_Wind1; + float4 m_Wind2; + float4 m_Wind3; + + float4 m_Shape; // damping, local stiffness, global stiffness, global range. + float4 m_GravTimeTip; // gravity maginitude (assumed to be in negative y direction.) + int4 m_SimInts; // Length iterations, local iterations, collision flag. + int4 m_Counts; // num strands per thread group, num follow hairs per guid hair, num verts per strand. + float4 m_VSP; // VSP parameters - controls how Velocity Shock Propogation will dictate how + // fast velocities are handled and can be compensated using the hair root velocity + + float m_ResetPositions; + float m_ClampPositionDelta; + float m_pad1; + float m_pad2; + +#if TRESSFX_DQ // this option is currently not functional + float4 m_BoneSkinningDQ[AMD_TRESSFX_MAX_NUM_BONES * 2]; +#else + row_major float4x4 m_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +#endif +}; + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +//!------------------------------ SRG Structure -------------------------------- +//! This is the static Srg required for the hair genration per hair object draw. +//! The data is used only for skinning / simulation and doesn't change between +//! the object's passes. +//! To match to the original TressFX naming follow the global defines bellow. +ShaderResourceGroup HairGenerationSrg : SRG_PerDraw +{ + // Buffers containing hair generation properties. + Buffer m_initialHairPositions; + Buffer m_hairRestLengthSRV; + Buffer m_hairStrandType; + Buffer m_followHairRootOffset; + StructuredBuffer m_boneSkinningData; + + // Constant buffer structure reflected in code as 'TressFXSimulationParams' + TressFXSimulationParams m_tressfxSimParameters; +}; + +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - compute passes usage + +#define g_InitialHairPositions HairGenerationSrg::m_initialHairPositions +#define g_HairRestLengthSRV HairGenerationSrg::m_hairRestLengthSRV +#define g_HairStrandType HairGenerationSrg::m_hairStrandType + +#define g_FollowHairRootOffset HairGenerationSrg::m_followHairRootOffset +#define g_BoneSkinningData HairGenerationSrg::m_boneSkinningData + +#define g_NumOfStrandsPerThreadGroup HairGenerationSrg::m_tressfxSimParameters.m_Counts.x +#define g_NumFollowHairsPerGuideHair HairGenerationSrg::m_tressfxSimParameters.m_Counts.y +#define g_NumVerticesPerStrand HairGenerationSrg::m_tressfxSimParameters.m_Counts.z + +#define g_NumLocalShapeMatchingIterations HairGenerationSrg::m_tressfxSimParameters.m_SimInts.y + +#define g_GravityMagnitude HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.x +#define g_TimeStep HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.y +#define g_TipSeparationFactor HairGenerationSrg::m_tressfxSimParameters.m_GravTimeTip.z + +#define g_Wind HairGenerationSrg::m_tressfxSimParameters.m_Wind +#define g_Wind1 HairGenerationSrg::m_tressfxSimParameters.m_Wind1 +#define g_Wind2 HairGenerationSrg::m_tressfxSimParameters.m_Wind2 +#define g_Wind3 HairGenerationSrg::m_tressfxSimParameters.m_Wind3 +#define g_ResetPositions HairGenerationSrg::m_tressfxSimParameters.m_ResetPositions +#define g_ClampPositionDelta HairGenerationSrg::m_tressfxSimParameters.m_ClampPositionDelta +#define g_BoneSkinningDQ HairGenerationSrg::m_tressfxSimParameters.m_BoneSkinningDQ +#define g_BoneSkinningMatrix HairGenerationSrg::m_tressfxSimParameters.m_BoneSkinningMatrix + +// We no longer support groups (indirection). +int GetStrandType(int globalThreadIndex) +{ + return 0; +} + +float GetDamping(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.x; +} + +float GetLocalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.y; +} + +float GetGlobalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.z; +} + +float GetGlobalRange(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return HairGenerationSrg::m_tressfxSimParameters.m_Shape.w; +} + +float GetVelocityShockPropogation() +{ + return HairGenerationSrg::m_tressfxSimParameters.m_VSP.x; +} + +float GetVSPAccelThreshold() +{ + return HairGenerationSrg::m_tressfxSimParameters.m_VSP.y; +} + +int GetLocalConstraintIterations() +{ + return (int)HairGenerationSrg::m_tressfxSimParameters.m_SimInts.y; +} + +int GetLengthConstraintIterations() +{ + return (int)HairGenerationSrg::m_tressfxSimParameters.m_SimInts.x; +} +//------------------------------------------------------------------------------ + diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli new file mode 100644 index 0000000000..cb0bdc2c6c --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSrgs.azsli @@ -0,0 +1,217 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//----------------------------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//------------------------------------------------------------------------------ +// File: HairSRGs.azsli +// +// Declarations of SRGs used by the hair shaders. +//------------------------------------------------------------------------------ +#pragma once + +#include + +// Whether bones are specified by dual quaternion. +// This option is not currently functional. +#define TRESSFX_DQ 0 + +//! notice - the following constants need to match what appears in AMD_TressFX.h +#define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 +#define AMD_TRESSFX_MAX_NUM_BONES 512 + +#define CM_TO_METERS 1.0 +#define METERS_TO_CM 1.0 +//#define CM_TO_METERS 0.01 +//#define METERS_TO_CM 100.0 + +// The following macro is not being used yet due to limitation of the C preprocessor +// mcpp that creates a shader compilation fault not being able to extend the macro. +#define BYTE_OFFSET(index,baseOffset) ((baseOffset >> 2) + (index << 2)) + +//!------------------------------ SRG Structure -------------------------------- +//! Per pass SRG the holds the dynamic read-write buffer shared across all +//! dispatches and draw calls and used as the memory pool for all the dynamic +//! buffer that can change between passes due to the application of skinning, +//! simulation and physics affect and read by the rendering shaders. +ShaderResourceGroup PassSrg : SRG_PerPass +{ + RWStructuredBuffer m_skinnedHairSharedBuffer; +} + +//!============================================================================= +//! +//! Per Instance Space 1 - Dynamic Buffers for Hair Skinning and Simulation +//! +//! ---------------------------------------------------------------------------- +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; + +//!------------------------------ SRG Structure -------------------------------- +//! Per instance/draw SRG representing dynamic read-write set of buffers +//! that are unique per instance and are shared and changed between passes due +//! to the application of skinning, simulation and physics affect. +//! It is then also read by the rendering shaders. +//! This Srg is NOT shared by the passes since it requires having barriers between +//! both passes and draw calls, instead, all buffers are allocated from a single +//! shared buffer (through BufferViews) and that buffer is then shared between +//! the passes via the PerPass Srg frequency. +ShaderResourceGroup HairDynamicDataSrg : SRG_PerObject // space 1 - per instance / object +{ + RWBuffer m_hairVertexPositions; + RWBuffer m_hairVertexPositionsPrev; + RWBuffer m_hairVertexPositionsPrevPrev; + RWBuffer m_hairVertexTangents; + RWStructuredBuffer m_strandLevelData; + + //! Per hair object offset to the start location of each buffer within + //! 'm_skinnedHairSharedBuffer'. The offset is in bytes! + uint m_positionBufferOffset; + uint m_positionPrevBufferOffset; + uint m_positionPrevPrevBufferOffset; + uint m_tangentBufferOffset; + uint m_strandLevelDataOffset; +}; +//------------------------------------------------------------------------------ +// Allow for the code to run with minimal changes - skinning / simulation compute passes + +// Usage of per-instance buffer +#define g_HairVertexPositions HairDynamicDataSrg::m_hairVertexPositions + +#define g_HairVertexPositionsPrev HairDynamicDataSrg::m_hairVertexPositionsPrev +#define g_HairVertexPositionsPrevPrev HairDynamicDataSrg::m_hairVertexPositionsPrevPrev +#define g_HairVertexTangents HairDynamicDataSrg::m_hairVertexTangents +#define g_StrandLevelData HairDynamicDataSrg::m_strandLevelData + +//------------------------------------------------------------------------------ +float3 GetSharedVector3(int offset) +{ + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + );// *CM_TO_METERS; // convert to meters when using +} + +void SetSharedVector3(int offset, float3 pos) +{ +// pos.xyz *= METERS_TO_CM; // convert to cm when storing + PassSrg::m_skinnedHairSharedBuffer[offset] = asint(pos.x); + PassSrg::m_skinnedHairSharedBuffer[offset+1] = asint(pos.y); + PassSrg::m_skinnedHairSharedBuffer[offset+2] = asint(pos.z); +} + +float4 GetSharedVector4(int offset) +{ + return float4( + float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + ),// * CM_TO_METERS, // convert to meters when using + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 3]) + ); +} + +void SetSharedVector4(int offset, float4 pos) +{ +// pos.xyz *= METERS_TO_CM; // convert to cm when storing + PassSrg::m_skinnedHairSharedBuffer[offset] = asint(pos.x); + PassSrg::m_skinnedHairSharedBuffer[offset+1] = asint(pos.y); + PassSrg::m_skinnedHairSharedBuffer[offset+2] = asint(pos.z); + PassSrg::m_skinnedHairSharedBuffer[offset+3] = asint(pos.w); +} + +//------------------------------------------------------------------------------ +//! Getter/setter of position / tangent in the global shared buffer based on the +//! per-instance offset of the instance positions buffer within the global shared buffer +void SetSharedPosition3(int vertexIndex, float3 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector3(vertexOffset, position); +} + +void SetSharedPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedPrevPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPrevPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedPrevPrevPosition(int vertexIndex, float4 position) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevPrevBufferOffset >> 2) + (vertexIndex << 2); + SetSharedVector4(vertexOffset, position); +} + +float4 GetSharedPrevPrevPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionPrevPrevBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +void SetSharedTangent(int tangentIndex, float3 currentTangent) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + PassSrg::m_skinnedHairSharedBuffer[tangentOffset] = asint(currentTangent.x); + PassSrg::m_skinnedHairSharedBuffer[tangentOffset+1] = asint(currentTangent.y); + PassSrg::m_skinnedHairSharedBuffer[tangentOffset+2] = asint(currentTangent.z); +} + +float3 GetSharedTangent(int tangentIndex) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 2]) + ); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli b/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli new file mode 100644 index 0000000000..b8c4ea9eb4 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairStrands.azsli @@ -0,0 +1,182 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code related to hair strands in the graphics pipeline. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include + +#define CM_TO_METERS_RENDER 0.01 + +float4 GetSharedVector4(int offset) +{ + return float4( + float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 2]) + ),// * CM_TO_METERS, // convert to meters when using + asfloat(PassSrg::m_skinnedHairSharedBuffer[offset + 3]) + ); +} + +float4 GetSharedPosition(int vertexIndex) +{ + int vertexOffset = (HairDynamicDataSrg::m_positionBufferOffset >> 2) + (vertexIndex << 2); + return GetSharedVector4(vertexOffset); +} + +float3 GetSharedTangent(int tangentIndex) +{ + int tangentOffset = (HairDynamicDataSrg::m_tangentBufferOffset >> 2) + (tangentIndex << 2); + + return float3( + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 1]), + asfloat(PassSrg::m_skinnedHairSharedBuffer[tangentOffset + 2]) + ); +} + +struct TressFXVertex +{ + float4 Position; + float4 Tangent; + float4 p0p1; + float4 StrandColor; +}; + +float3 GetStrandColor(int index, float fractionOfStrand) +{ + float3 rootColor; + float3 tipColor; + + float2 texCd = g_HairStrandTexCd[(float) index / NumVerticesPerStrand].xy; + rootColor = BaseAlbedoTexture.SampleLevel(LinearWrapSampler, texCd, 0).rgb; + tipColor = MatTipColor.rgb; + + // Multiply with Base Material color + rootColor *= MatBaseColor.rgb; + + // Update the color based on position along the strand (vertex level) and lerp between tip and root if within the tipPercentage requested + float rootRange = 1.f - TipPercentage; + return (fractionOfStrand > rootRange) ? lerp(rootColor, tipColor, (fractionOfStrand - rootRange) / TipPercentage) : rootColor; +} + +TressFXVertex GetExpandedTressFXVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + // Access the current line / curve segment - remember that the mesh is built around + // the center line / curve that is expanded as the vertices. + uint index = vertexId / 2; // vertexId is the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result +// float3 v = GetSharedPosition(index).xyz; + float3 v = g_GuideHairVertexPositions[index].xyz; + + // Both approaches (offset to shared buffer or BufferView) will work! +// float3 t = GetSharedTangent(index); + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; // need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 0.71 * CM_TO_METERS_RENDER; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v - right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Gonna hi-jack Tangent.w (unused) and add a .w component to strand color to store a strand UV + float2 strandUV; + strandUV.x = (vertexId & 0x01) ? 0.f : 1.f; + strandUV.y = fractionOfStrand; + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + // [To Do] Hair: remove the scale + + CM_TO_METERS_RENDER * fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) + * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + Output.Tangent = float4(t, strandUV.x); + Output.p0p1 = float4(hairEdgePositions[0].xy / max(hairEdgePositions[0].w, TRESSFX_FLOAT_EPSILON), hairEdgePositions[1].xy / max(hairEdgePositions[1].w, TRESSFX_FLOAT_EPSILON)); + Output.StrandColor = float4(GetStrandColor(index, fractionOfStrand), strandUV.y); + return Output; +} + +TressFXVertex GetExpandedTressFXShadowVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result +// float3 v = GetSharedPosition(index).xyz; + float3 v = g_GuideHairVertexPositions[index].xyz; +// float3 t = GetSharedTangent(index); // Adi: both approaches will work!! + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 1.f * CM_TO_METERS_RENDER; // Disable for shadows 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius * CM_TO_METERS_RENDER, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius * CM_TO_METERS_RENDER, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + return Output; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli b/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli new file mode 100644 index 0000000000..16496f0dcd --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairSurface.azsli @@ -0,0 +1,80 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +class Surface +{ + TransmissionSurfaceData transmission; + + // ------- BasePbrSurfaceData ------- + float3 position; //!< Position in world-space + float3 normal; //!< Normal in world-space + float3 albedo; //!< Albedo color of the non-metallic material, will be multiplied against the diffuse lighting value + float3 specularF0; //!< Fresnel f0 spectral value of the surface + float roughnessLinear; //!< Perceptually linear roughness value authored by artists. Must be remapped to roughnessA before use + float roughnessA; //!< Actual roughness value ( a.k.a. "alpha roughness") to be used in microfacet calculations + float roughnessA2; //!< Alpha roughness ^ 2 (i.e. roughnessA * roughnessA), used in GGX, cached here for perfromance + + // ------- Hair Surface Data ------- + float3 tangent; + float3 cuticleTilt; + float thickness; + + //! Applies specular anti-aliasing to roughnessA2 + void ApplySpecularAA(); + + //! Calculates roughnessA and roughnessA2 after roughness has been set + void CalculateRoughnessA(); + + //! Sets albedo and specularF0 using metallic workflow + void SetAlbedoAndSpecularF0(float3 baseColor, float specularF0Factor); + +}; + +// Specular Anti-Aliasing technique from this paper: +// http://www.jp.square-enix.com/tech/library/pdf/ImprovedGeometricSpecularAA.pdf +void Surface::ApplySpecularAA() +{ + // Constants for formula below + const float screenVariance = 0.25f; + const float varianceThresh = 0.18f; + + // Specular Anti-Aliasing + float3 dndu = ddx_fine( normal ); + float3 dndv = ddy_fine( normal ); + float variance = screenVariance * (dot( dndu , dndu ) + dot( dndv , dndv )); + float kernelRoughnessA2 = min(2.0 * variance , varianceThresh ); + float filteredRoughnessA2 = saturate ( roughnessA2 + kernelRoughnessA2 ); + roughnessA2 = filteredRoughnessA2; +} + +void Surface::CalculateRoughnessA() +{ + // The roughness value in microfacet calculations (called "alpha" in the literature) does not give perceptually + // linear results. Disney found that squaring the roughness value before using it in microfacet equations causes + // the user-provided roughness parameter to be more perceptually linear. We keep both values available as some + // equations need roughnessLinear (i.e. IBL sampling) while others need roughnessA (i.e. GGX equations). + // See Burley's Disney PBR: https://pdfs.semanticscholar.org/eeee/3b125c09044d3e2f58ed0e4b1b66a677886d.pdf + + roughnessA = max(roughnessLinear * roughnessLinear, MinRoughnessA); + roughnessA2 = roughnessA * roughnessA; + if(o_applySpecularAA) + { + ApplySpecularAA(); + } +} + +void Surface::SetAlbedoAndSpecularF0(float3 baseColor, float specularF0Factor) +{ + albedo = baseColor; + specularF0 = MaxDielectricSpecularF0 * specularF0Factor; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader new file mode 100644 index 0000000000..c53a8a766f --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairUpdateFollowHairCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "UpdateFollowHairVertices", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli b/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli new file mode 100644 index 0000000000..1d50d3c040 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairUtilities.azsli @@ -0,0 +1,167 @@ +/* + * Modifications Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT + * + */ + +//--------------------------------------------------------------------------------------- +// Shader code utilities for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +// Cutoff to not render hair + +#pragma once + +#include + + +#define SHORTCUT_MIN_ALPHA 0.02 + +#define TRESSFX_FLOAT_EPSILON 1e-7 + +//-------------------------------------------------------------------------------------- +// +// Controls whether you do mul(M,v) or mul(v,M) +// i.e., row major vs column major +// +//-------------------------------------------------------------------------------------- +float4 MatrixMult(float4x4 m, float4 v) +{ + return mul(m, v); +} + +// Given the depth buffer depth of the current pixel and the fragment XY position, +// reconstruct the NDC. +// screenCoords - from 0.. dimension of the screen of the current pixel +// screenTexture - screen buffer texture representing the same resolution we work in +// sDepth - the depth buffer depth at the fragment location +// NDC - Normalized Device Coordinates = warped screen space ( -1.1, -1..1, 0..1 ) +float3 ScreenPosToNDC( Texture2D screenTexture, float2 screenCoords, float depth ) +{ + uint2 dimensions; + screenTexture.GetDimensions(dimensions.x, dimensions.y); + float2 UV = saturate(screenCoords / dimensions.xy); + + float x = UV.x * 2.0f - 1.0f; + float y = (1.0f - UV.y) * 2.0f - 1.0f; + float3 NDC = float3(x, y, depth); + + return NDC; +} + +// Given the depth buffer depth of the current pixel and the fragment XY position, +// reconstruct the world space position +float3 ScreenPosToWorldPos( + Texture2D screenTexture, float2 screenCoords, float depth, + inout float3 screenPosNDC ) +{ + screenPosNDC = ScreenPosToNDC(PassSrg::m_linearDepth, screenCoords, depth); + float4 projectedPos = float4(screenPosNDC, 1.0f); // warped projected space [0..1] + float4 positionVS = mul(ViewSrg::m_projectionMatrixInverse, projectedPos); + positionVS /= positionVS.w; // notice the normalization factor - crucial! + float4 positionWS = mul(ViewSrg::m_viewMatrixInverse, positionVS); + + return positionWS.xyz; +} + +// Pack a float4 into an uint +uint PackFloat4IntoUint(float4 vValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | (uint)(vValue.w * 255); +} + +// Unpack a uint into a float4 value +float4 UnpackUintIntoFloat4(uint uValue) +{ + return float4(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0, ((uValue & 0x000000FF)) / 255.0); +} + +// Pack a float3 and a uint8 into an uint +uint PackFloat3ByteIntoUint(float3 vValue, uint uByteValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | uByteValue; +} + +// Unpack a uint into a float3 and a uint8 value +float3 UnpackUintIntoFloat3Byte(uint uValue, out uint uByteValue) +{ + uByteValue = uValue & 0x000000FF; + return float3(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float2 +// +//-------------------------------------------------------------------------------------- +float2 Safe_normalize(float2 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float2(0, 0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float3 +// +//-------------------------------------------------------------------------------------- +float3 Safe_normalize(float3 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float3(0, 0, 0); +} + +//-------------------------------------------------------------------------------------- +// ComputeCoverage +// +// Calculate the pixel coverage of a hair strand by computing the hair width +//-------------------------------------------------------------------------------------- +float ComputeCoverage(float2 p0, float2 p1, float2 pixelLoc, float2 winSize) +{ + // p0, p1, pixelLoc are in d3d clip space (-1 to 1)x(-1 to 1) + + // Scale positions so 1.f = half pixel width + p0 *= winSize; + p1 *= winSize; + pixelLoc *= winSize; + + float p0dist = length(p0 - pixelLoc); + float p1dist = length(p1 - pixelLoc); + float hairWidth = length(p0 - p1); + + // will be 1.f if pixel outside hair, 0.f if pixel inside hair + float outside = any(float2(step(hairWidth, p0dist), step(hairWidth, p1dist))); + + // if outside, set sign to -1, else set sign to 1 + float sign = outside > 0.f ? -1.f : 1.f; + + // signed distance (positive if inside hair, negative if outside hair) + float relDist = sign * saturate(min(p0dist, p1dist)); + + // returns coverage based on the relative distance + // 0, if completely outside hair edge + // 1, if completely inside hair edge + return (relDist + 1.f) * 0.5f; +} diff --git a/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader b/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader new file mode 100644 index 0000000000..fb64f79127 --- /dev/null +++ b/Gems/AtomTressFX/Assets/Shaders/HairVelocityShockPropagationCompute.shader @@ -0,0 +1,14 @@ +{ + "Source" : "HairSimulationCompute.azsl", + + "ProgramSettings": + { + "EntryPoints": + [ + { + "name": "VelocityShockPropagation", + "type": "Compute" + } + ] + } +} diff --git a/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga b/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga new file mode 100644 index 0000000000..f304d70498 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/DefaultHairColorWithNoise.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a0d9d2461d2317b21e0fbd9bf8385bfb978f4dfd0db8f50450c3482faee85ed +size 4116085 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx new file mode 100644 index 0000000000..77292bed4a --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea292419a5d2ebc9c33eaddb1b69a5d7b21055bcce2edc703dc32cfcb3a45cb +size 209056 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb new file mode 100644 index 0000000000..98a646a4ff --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.mb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4856b6163507f326804fd98e1d3d5d0cbfc08139068ceea6480dae542a2ddfb3 +size 15098332 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx new file mode 100644 index 0000000000..1970051619 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:092278e1a27dbd90685f4e7f0da0fc7c2600f5c9e5217bdcef523ece6e8900b4 +size 1934040 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone new file mode 100644 index 0000000000..c396e56a60 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxbone @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae42c22c58c6daef42dbe9db16dd827f44ca66e8d1bb1761dfcb1f5890396dc2 +size 134009 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh new file mode 100644 index 0000000000..4b33f98c5a --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style.tfxmesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cbc84f42d4acdaf748dfdc76102796e705a5c95bc3e73acf1deca3db57b53a9 +size 221701 diff --git a/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen new file mode 100644 index 0000000000..e285952543 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/HeadBoneChainHairStyle/test_hair_bone_chain_head_style__hair_test_01.xgen @@ -0,0 +1,89546 @@ +# XGen Palette File +# +# Version: C:/Program Files/Autodesk/Maya2020/plug-ins/xgen/ +# Author: gallowj +# Date: Wed May 12 18:27:28 2021 + +FileVersion 18 + +Palette + name hair_test_01 + parent + xgDataPath ${PROJECT}xgen/collections/hair_test_01 + xgProjectPath C:/Depot/CC-O3DE-TressFX/Gems/AtomTressFX/ + xgDogTag + endAttrs + +Description + name hair_desc_01 + flipNormals false + strayPercentage 0.0 + lodFlag false + averageWidth 1.0 + pixelCullSize 0.0 + pixelFadeSize 20.0 + cullFade 0.1 + minDensity 0.01 + cullWidthRatio 0.01 + maxWidthRatio 20.0 + groom + descriptionId 10 + xgDataPath ${PROJECT}xgen/collections/hair_test_01/ + xgProjectPath C:/Depot/CC-O3DE-TressFX/Gems/AtomTressFX/ + endAttrs + +SplinePrimitive + _patchNames + length $a=1.0000;#0.05,5.0\n$a + width $a=0.0500;#0.005,0.5\n$a + depth $a=1.0;#0.05,5.0\n$a + offU $a=0.0000;#-2.0,2.0\n$a + offV $a=0.0000;#-2.0,2.0\n$a + offN $a=0.0000;#-180.0,180.0\n$a + aboutN $a=0.0000;#-180.0,180.0\n$a + regionMap ${DESC}/Region/ + regionMask 0.0 + iMethod 1 + useCache false + liveMode true + _wireNames + cacheFileName ${DESC}/guides.abc + attrCVCount 3 + bendParam[0] $a=0.5000;#0.0,1.0\n$a + bendU[0] $a=0.0000;#-2.0,2.0\n$a + bendV[0] $a=0.0000;#-2.0,2.0\n$a + fxCVCount 20 + uniformCVs true + taper $a=0.8000;#-1.0,1.0\n$a + taperStart $a=0.0000;#0.0,1.0\n$a + displayWidth true + faceCamera true + tubeShade true + tubes + guideSpacing 1.0 + guideMask 1.0 + cutParam 1.0 + texelsPerUnit 10.0 + CVFrequency 1.0 + widthRamp rampUI(0.0,1.0,1:1.0,1.0,1) + endAttrs + +ClumpingFXModule + active true + mask 1.0 + name Clumping1 + cvAttr false + mapInitialized True + pointDir ${DESC}/${FXMODULE}/Points/ + mapDir ${DESC}/${FXMODULE}/Maps/ + clump .5 + clumpScale rampUI(0.0,0.475806451613,3:1.0,0.0,3) + clumpVolumize true + clumpVariance 10 + cut 0.0 + copy 0.0 + copyScale rampUI(0.0,0.0,3) + copyVariance 0.0 + curl 0.0 + curlScale rampUI(0.0,0.5,3) + offset 0.0 + offsetScale rampUI(0.0,0.0,3:0.5,1.0,3:1.0,0.0,3) + flatness 0.0 + flatnessScale rampUI(0.0,0.0,3) + frame 0.0 + noise 0.0 + noiseScale rampUI(0.0,0.0,3) + noiseFrequency 0.0 + noiseCorrelation 0.0 + exportCurves false + exportDir curves/ + exportFaces + texelsPerUnit 10.0 + radiusVariance .5 + ptDensity 10.0 + ptMask 1.0 + ptLength 5.0 + colorPreview false + useControlMaps 0 + controlMask 0.0 + controlMapDir ${DESC}/Region/ + endAttrs + +CutFXModule + active true + mask 1.0 + name Cut1 + amount rand(0.2,0.5) + rebuildType 1 + endAttrs + +NoiseFXModule + active true + mask 1 + name Noise1 + frequency .1 + magnitude 10 + magnitudeScale rampUI(0.0,0.0,1:1.0,1.0,1) + correlation 0.0 + preserveLength 0.0 + mode 0 + bakeDir ${DESC}/${FXMODULE}/ + endAttrs + +GuideRenderer + percent 10.0 + startPercent 0.0 + inCameraOnly false + inCameraMargin 0.0 + replace true + applyFX true + endAttrs + +UniformGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + spacing 1.0 + endAttrs + +RandomGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + density 100.0 + mask 1.0 # map('${DESC}/density/') + dcFlag false + scFlag true + usePoints false + pointDir ${DESC}/Points/ + ptLength 1.0 + endAttrs + +GLRenderer + percent 10.0 + startPercent 0.0 + inCameraOnly true + inCameraMargin 0.0 + patchNames false + faceIds false + primIDs false + primIDsAt 1.0 + vertices false + poly false + culled false + unitCube false + color $a=[0,0,0];#color\n$a + guideColor $a=[1.0,0.4313725,0.0];#color\n$a + TEXCOORD3 [ $cWidth, 0, 0 ] # red channel reserved by XGen + TEXCOORD4 + TEXCOORD5 + TEXCOORD6 + TEXCOORD7 + splineSegments 2 + primNumLimit 3000 + endAttrs + +PointGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + pointDir ${DESC}/Points/ + ptLength 1.0 + endAttrs + +RendermanRenderer + percent 100.0 + startPercent 0.0 + inCameraOnly false + inCameraMargin 0.0 + length_XP true + width_XP true + T_XP false + stray_XP false + id_XP false + descid_XP false + ri_XP true + rf_XP true + u_XS true + v_XS true + faceid_XS true + geomid_XS false + geomName_XS true + P_XS true + Pref_XS false + Pg_XS false + Prefg_XS false + N_XS true + Ng_XS false + Nref_XS false + Nrefg_XS false + dPdu_XS true + dPduref_XS false + dPdug_XS false + dPdurefg_XS false + dPdv_XS true + dPdvref_XS false + dPdvg_XS false + dPdvrefg_XS false + renderer None + renderMethod 2 + draMode 0 + primitiveBound 1.0 + custom__arnold_rendermode 0 + custom__arnold_curveMode 0 + custom__arnold_minPixelWidth 0.0 + custom__arnold_motion_blur 0 + custom__arnold_motion_blur_mode 1 + custom__arnold_motion_blur_steps 2 + custom__arnold_motion_blur_factor 0.5 + custom__arnold_useAuxRenderPatch 0 + custom__arnold_auxRenderPatch 0 + custom__arnold_multithreading 0 + endAttrs + +GuideGenerator + displacement $a=0.0000;#-1.0,1.0\n$a + vectorDisplacement 0 + bump $a=0.0000;#-1.0,1.0\n$a + offset $a=0.0000;#-1.0,1.0\n$a + cullFlag false + cullBackface false + cullFrustrum false + cullAngleBF 0.0 + cullAngleF 0.0 + cullExpr $a=0.0000;#0.0,1.0\n$a + endAttrs + + Active SplinePrimitive + Active RandomGenerator + Active GuideRenderer + Preview GLRenderer + +Patches hair_desc_01 3719 +Patch Subd + name defaultHead + faceIds 1642 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 + animCurves 0 +Guides Spline 3719 + id 11239 + loc 6.1766004562377930e-01 3.2296255230903625e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8250411230059725e-01:4.3533091168113164e-01:7.4855125270986744e-01:4.8249928725947427e-01:1.0949231440375033e+00:4.0644893538153759e-01:1.8421064143743513e+00:4.1593970243878403e-01:2.4420267811887344e+00:3.8291967032135965e-01:3.0008632363956571e+00:3.7392378005353183e-01:3.9180893488767223e+00 + CVs 20 + 2.4846511913689479e-01 3.2214596061080186e-01 -2.0354872028641174e-01 + 4.7915935495719814e-01 5.7264123779978848e-01 -3.0958901426499796e-01 + 6.8786984326479572e-01 7.8802773588567043e-01 -3.7633277396523857e-01 + 8.7149724962639363e-01 9.7900841465162469e-01 -4.1423700683137077e-01 + 1.0409465093987373e+00 1.1575257395592029e+00 -4.0048104127307915e-01 + 1.2131268217066997e+00 1.3609372405672167e+00 -3.3505296216045410e-01 + 1.3877108223369525e+00 1.6239682150453278e+00 -2.6811589618590415e-01 + 1.5514042867190785e+00 1.9428618786108545e+00 -2.6562657512600163e-01 + 1.6991993789006590e+00 2.2831574957507570e+00 -3.5591150405796346e-01 + 1.8437029628891737e+00 2.5981805363819901e+00 -5.4073419892738617e-01 + 2.0110791040178126e+00 2.8242167378938330e+00 -8.1452125581881329e-01 + 2.2139823909981251e+00 2.8939078783708525e+00 -1.1522920225465267e+00 + 2.4307488126471855e+00 2.7848199708489068e+00 -1.5039743113312687e+00 + 2.6342413877634598e+00 2.5269886273184481e+00 -1.8209479330197982e+00 + 2.8183279152655691e+00 2.1616889472471188e+00 -2.0742175047181197e+00 + 2.9798265639151449e+00 1.6999234255440816e+00 -2.2433791958691245e+00 + 3.0770753624352079e+00 1.1373855238938864e+00 -2.2885142541752801e+00 + 3.0394375887415297e+00 5.3603446702325241e-01 -2.1752430886144971e+00 + 3.0146542150128006e+00 1.1458961218477914e-01 -2.1417414129211032e+00 + id 11240 + loc 6.2059760093688965e-01 9.4030863046646118e-01 1077 + blend 0.0000000000000000e+00 + interp 4.2977053398824394e-01:3.5725795778658548e-01:3.0989393716459590e-02:3.6149101805564876e-01:9.5714156011088758e-01:4.2807020525498701e-01:1.9716085115790805e+00:4.1881657767306374e-01:2.2644834972059975e+00:3.9587324654258443e-01:2.9946765242667817e+00:4.2976623628290406e-01:3.4053831056794803e+00 + CVs 20 + 1.4598030893277561e-01 3.6265297671607266e-01 -1.8903296177682780e-01 + 2.9001014815205933e-01 6.9064855813398063e-01 -4.0354826322926746e-01 + 4.1605384674189483e-01 9.8112484549610501e-01 -6.4768420911160784e-01 + 5.0897198373475727e-01 1.2296565341061132e+00 -9.2287873105698115e-01 + 5.5889109839327511e-01 1.4361219452528187e+00 -1.2323782375656125e+00 + 5.7107814925083333e-01 1.6082853521248741e+00 -1.5843150571348776e+00 + 5.7356566362509342e-01 1.7539215702150270e+00 -1.9872415787319906e+00 + 6.0356057178739564e-01 1.8722295870525882e+00 -2.4398769657963602e+00 + 6.8969893824209061e-01 1.9524156115373135e+00 -2.9281597352526809e+00 + 8.4087184829371853e-01 1.9722322858211312e+00 -3.4216818644356630e+00 + 1.0207419878574946e+00 1.9081727787799216e+00 -3.8654400069504060e+00 + 1.1333356030107091e+00 1.7734007673006829e+00 -4.1927219935317099e+00 + 1.1227223960470871e+00 1.6228651373965948e+00 -4.3904708397790202e+00 + 1.0544801206334347e+00 1.4198452347851684e+00 -4.5325361724002615e+00 + 9.4896760833746130e-01 1.1252326871501357e+00 -4.6365483526669795e+00 + 7.9480159958330587e-01 9.5227673875680896e-01 -4.6767813603590058e+00 + 7.4814346733443837e-01 1.2261063089953383e+00 -4.7048761497406879e+00 + 9.1609986574566049e-01 1.5585359404363155e+00 -4.7609421610985070e+00 + 5.0776356194935579e-01 1.4145008385396176e+00 -4.7452816866369725e+00 + id 11241 + loc 7.3946279287338257e-01 4.6131584048271179e-01 410 + blend 0.0000000000000000e+00 + interp 4.5890157615427518e-01:3.3656738264634023e-01:4.7635488526662184e-01:2.7076987405761810e-01:1.0142872175827768e+00:3.1046619940156961e-01:1.9911709296561084e+00:2.7253223215495348e-01:2.9173550394527834e+00:3.9312529834466109e-01:3.4808854407796193e+00:4.5889698713851368e-01:3.9938441220327663e+00 + CVs 20 + -4.7461451783151598e-01 3.9982365853629770e-01 1.0059133897716148e-01 + -8.9239769779437195e-01 7.5421079737479291e-01 1.8878590190240330e-01 + -1.3187898826797613e+00 1.0937133313103355e+00 2.5931801488333284e-01 + -1.7891056920101294e+00 1.4143430275030737e+00 3.4146393799269692e-01 + -2.3080042562962193e+00 1.6845128250663066e+00 4.7562439748027863e-01 + -2.8636774395062137e+00 1.8665051897071143e+00 6.9627444131892724e-01 + -3.4191353095889450e+00 1.9269986165100004e+00 1.0068178956152343e+00 + -3.9333412885433074e+00 1.8521522371706072e+00 1.3654821938701287e+00 + -4.3856960021083706e+00 1.6415536541246738e+00 1.7202202196135672e+00 + -4.7617036023298507e+00 1.2981017004023760e+00 2.0281231400803996e+00 + -5.0391481791347612e+00 8.4678756862816340e-01 2.2553453421129568e+00 + -5.2098821321305753e+00 3.2094557828592585e-01 2.4100014755328534e+00 + -5.2901825344166467e+00 -2.7390577707525310e-01 2.5456814153630685e+00 + -5.3097856406487010e+00 -9.3075834333233498e-01 2.7317874819979986e+00 + -5.3052679698375984e+00 -1.6179653197549726e+00 3.0231629131324635e+00 + -5.3104551011946892e+00 -2.2904790265893578e+00 3.4214003573219602e+00 + -5.3568949752264983e+00 -2.9232256784687327e+00 3.8723781334110994e+00 + -5.4683507868910359e+00 -3.5084886092025820e+00 4.3152929295445501e+00 + -5.6210220746587058e+00 -4.0282849994590153e+00 4.7058919264253927e+00 + id 11242 + loc 2.4403645098209381e-01 7.5677603483200073e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3348958057862880e-01:3.4895738320241698e-01:2.4644026811798314e-01:4.2466330470954194e-01:9.7596746527485712e-01:3.3104090821974635e-01:1.8773290084940342e+00:3.8491509362178528e-01:2.8667521597695647e+00:4.3348524568282304e-01:3.2854852966045058e+00:2.8648918184150668e-01:3.8722186532711671e+00 + CVs 20 + -2.8657863403758321e-01 4.3492695504183299e-01 2.8953997676938570e-01 + -5.1975654170584140e-01 8.1112395078547017e-01 4.9927969188073223e-01 + -7.1056132306491149e-01 1.1675071806173625e+00 6.9920221427909890e-01 + -8.9343155142724617e-01 1.5097401774106458e+00 8.5991472969261595e-01 + -1.0862941133912958e+00 1.8029176488641019e+00 9.1014701348899973e-01 + -1.2764326654451055e+00 2.0205460416851468e+00 8.3898033301759822e-01 + -1.4198458934718945e+00 2.1448920024329814e+00 6.7884483185811861e-01 + -1.4281549520774679e+00 2.1674046970714578e+00 5.0199826066124165e-01 + -1.2416670217837362e+00 2.1315075728203059e+00 4.5667102454010622e-01 + -1.0058706911202391e+00 2.1282514296791657e+00 6.0623118006494714e-01 + -8.4799664840049926e-01 2.1500003465407858e+00 7.6602104897467838e-01 + -7.2010657727583238e-01 2.1520257451303859e+00 8.8441416818509044e-01 + -5.9201671440122861e-01 2.1188030722467626e+00 9.8682785988288213e-01 + -4.0746771127462972e-01 1.9896295262286250e+00 1.0505400670295015e+00 + -1.1510867095823551e-01 1.6834558747073116e+00 1.0424515341411233e+00 + 2.4366806686854420e-01 1.2100390889697481e+00 8.7260809136364137e-01 + 5.6406479222599670e-01 7.0631452781019743e-01 3.9265112879091751e-01 + 6.8194385643885669e-01 4.9397881880312766e-01 -5.1814866305649365e-01 + 7.4351884466827389e-01 4.3954166351020962e-01 -7.1381651064939622e-01 + id 11243 + loc 3.5056790709495544e-01 2.2520402073860168e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7161415510986737e-01:2.8086590374772819e-01:2.2423713086493269e-02:4.7160943896831631e-01:4.0416718586487266e-01:4.4081031464401360e-01:1.0257869543901426e+00:3.7072491698081955e-01:1.6411871066445718e+00:2.5630139945730285e-01:2.0380538087915565e+00:2.8269060852355188e-01:2.9566996011760187e+00:3.6345283878021095e-01:3.3148630804549351e+00 + CVs 20 + -1.6360640871792401e-01 2.6421289525509695e-01 2.9995225428842837e-03 + -3.1755842433191628e-01 5.1493198464873213e-01 -1.1089937169873804e-02 + -4.6549849333266846e-01 7.4446663222648723e-01 -4.9199699687006548e-02 + -6.0812570262721088e-01 9.4853134529589900e-01 -1.1264452478601411e-01 + -7.4518838385253516e-01 1.1269153831663057e+00 -1.9722314893747817e-01 + -8.7688930331844284e-01 1.2809117428885446e+00 -2.9773128091818418e-01 + -1.0047652382694248e+00 1.4116659641547273e+00 -4.1150931162771426e-01 + -1.1314995558534122e+00 1.5182710278487592e+00 -5.4005235066136459e-01 + -1.2573338741511890e+00 1.5968890994679681e+00 -6.8958860602630112e-01 + -1.3785871333951583e+00 1.6379313737516670e+00 -8.7337246662149204e-01 + -1.4923815448000819e+00 1.6301629993810316e+00 -1.0992730391085093e+00 + -1.6025492015443534e+00 1.5697953026286118e+00 -1.3582573734848258e+00 + -1.7151382172067611e+00 1.4554360758539013e+00 -1.6363278229700269e+00 + -1.8340181866721867e+00 1.2703739964937877e+00 -1.9235438493270267e+00 + -1.9650848285463884e+00 9.8404954701181890e-01 -2.1968544287738303e+00 + -2.1181501786596821e+00 5.7139061790127554e-01 -2.3746146484782136e+00 + -2.3094403599750484e+00 5.0438633268983235e-02 -2.3312537608107693e+00 + -2.5755581793191906e+00 -4.4127840380517935e-01 -2.0235392613821119e+00 + -2.7870858389604627e+00 -5.3206797214788359e-01 -1.6881333429960148e+00 + id 11244 + loc 4.6513280272483826e-01 6.1413817107677460e-02 1051 + blend 0.0000000000000000e+00 + interp 3.7327538845454264e+00:1.7773141623964150e+00:7.3373316265661792e-02:2.6715193022916344e+00:7.7629404478597785e-02:4.2867817829031057e-01:3.2261785003334653e-01:3.9394967544100845e-01:9.7943334227607248e-01:2.2408772120476719e-01:1.7196944843555664e+00:2.5750043404263928e-01:1.9750082016946628e+00:5.7496549099723371e-01:1.9987429827309402e+00:1.9679081232879532e+00:2.0249678803851587e+00:2.8575556819183370e+00:2.0305731560489639e+00:3.2216942272252096e+00:2.0356588771129775e+00:3.4908659077586770e+00:2.0441762341288521e+00:3.7327438845454264e+00:2.0491966337121803e+00 + CVs 20 + 6.0639485433271370e-02 4.3411385224016430e-01 -3.0000765763808912e-01 + 1.1126466072956538e-01 8.1032172612428210e-01 -5.0698366706265341e-01 + 1.3945033526786055e-01 1.2075437811769389e+00 -6.4963078369328620e-01 + 1.7853288365958264e-01 1.7036624677639611e+00 -7.6060097659739978e-01 + 3.4665357417168102e-01 2.2809550074180360e+00 -8.9955694362832350e-01 + 7.3422613929258662e-01 2.7985555186561584e+00 -1.1300041583264189e+00 + 1.3034147377960690e+00 3.1030053910260240e+00 -1.4589596795692854e+00 + 1.9348243298444214e+00 3.1168601116120458e+00 -1.8302906880372949e+00 + 2.5172414608810092e+00 2.8730934663676964e+00 -2.1506108389258842e+00 + 2.9682424894502595e+00 2.4998386437782996e+00 -2.3361742735134872e+00 + 3.2577548847693354e+00 2.1615718476344683e+00 -2.3751410210022428e+00 + 3.4080178086900461e+00 1.9426385907736956e+00 -2.2960807823805194e+00 + 3.4944308714995453e+00 1.8114157364839176e+00 -2.1050546021910863e+00 + 3.7173207439461313e+00 1.7066271357850689e+00 -1.8937149805840090e+00 + 4.1562626423565980e+00 1.6511376913937914e+00 -1.8909215054943733e+00 + 4.6923555830028487e+00 1.6429948891621169e+00 -2.1469850558093424e+00 + 5.2424085754559178e+00 1.6140386914765636e+00 -2.5432172559779991e+00 + 5.7534965310633366e+00 1.4959770382817095e+00 -2.8465317137348665e+00 + 6.2067239485145240e+00 1.3044304865482277e+00 -2.9147635717861684e+00 + id 11245 + loc 1.3318803906440735e-01 7.8666359186172485e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5064609808207740e-01:3.6884525654436368e-01:4.2825366257954678e-01:4.5064159162109657e-01:9.9992319068122526e-01:4.4349351027539968e-01:1.3614296355075641e+00:4.2569046639763231e-01:1.9283185688374558e+00:3.0253330240372889e-01:2.1727187972906474e+00:4.1075126450218624e-01:3.0062007789445042e+00:2.9794376613931056e-01:3.6883098710971249e+00 + CVs 20 + 1.9054302130905390e-01 2.7026481811022524e-01 -5.9085954745423032e-02 + 3.4679597402629947e-01 5.5565458712225479e-01 -1.4549534187815527e-01 + 5.0525796759676989e-01 8.3810912577373275e-01 -2.6318515551372268e-01 + 6.8582886878845750e-01 1.0995086591871772e+00 -4.1443728156887272e-01 + 8.8876044472603710e-01 1.3301222904377208e+00 -6.0256425066501040e-01 + 1.1161151000032457e+00 1.5174445904895686e+00 -8.2765646918915081e-01 + 1.3720389086029596e+00 1.6473094759291511e+00 -1.0854831536743539e+00 + 1.6589113407623748e+00 1.7078336569346038e+00 -1.3671985826625264e+00 + 1.9743300045444716e+00 1.6925108416794821e+00 -1.6603355652546365e+00 + 2.3103780185338163e+00 1.6008300465471315e+00 -1.9531812607479175e+00 + 2.6516340717261611e+00 1.4384105499751214e+00 -2.2400907449190246e+00 + 2.9730750713287195e+00 1.2156564067843663e+00 -2.5207368118944147e+00 + 3.2433897984871538e+00 9.4397599586305247e-01 -2.7970553928530220e+00 + 3.4260391974903390e+00 6.3963300754293284e-01 -3.0721999656559627e+00 + 3.4796878273449394e+00 3.3706496642230421e-01 -3.3496126547367746e+00 + 3.3717638684815672e+00 1.1352046239581348e-01 -3.6210624444607724e+00 + 3.1648577114987795e+00 8.4859078628669815e-02 -3.8687581813563603e+00 + 3.0293397762952003e+00 2.8039518428333521e-01 -4.0646414094851337e+00 + 2.8980878285040879e+00 2.7732866685035984e-01 -4.3274719578244270e+00 + id 11246 + loc 2.3129728436470032e-01 8.9733213186264038e-01 410 + blend 0.0000000000000000e+00 + interp 4.3245667417841016e-01:3.7015565771251041e-01:4.0427668585726739e-01:4.3245234961166840e-01:1.0599013001672317e+00:3.4125331677304588e-01:1.9590447743911703e+00:3.7375857108107513e-01:2.8157372820239548e+00:3.4514573078606270e-01:3.2615302584416628e+00:3.0535149778952364e-01:3.9568558971205494e+00 + CVs 20 + 3.2859321888387322e-01 2.1908242107866643e-01 -3.4869758473066545e-02 + 5.7067170541436840e-01 3.9906742767173864e-01 -6.2150101893577808e-02 + 7.8465078484166850e-01 5.6605322043080109e-01 -8.3219528037176083e-02 + 1.0140766383662783e+00 7.4150238253015299e-01 -9.5695519777494076e-02 + 1.2575740152820738e+00 9.1843218431894136e-01 -9.8933803735602455e-02 + 1.5099124366776127e+00 1.0885270572439194e+00 -9.2270631562123673e-02 + 1.7686438534088236e+00 1.2458212560241106e+00 -7.2952620023985060e-02 + 2.0338078416582128e+00 1.3857453912783473e+00 -3.7881331991143241e-02 + 2.3005331446652457e+00 1.5032166013064023e+00 1.1900323669769841e-02 + 2.5635211022674045e+00 1.5958743905677806e+00 7.3873107747856992e-02 + 2.8485922899313367e+00 1.6698121895852771e+00 1.6478929388077207e-01 + 3.2239768151825108e+00 1.7239908520971392e+00 3.2257495477541737e-01 + 3.7239311727766307e+00 1.7165339724263653e+00 5.2276585065491377e-01 + 4.2751139139193013e+00 1.6058253202145303e+00 6.6100702036666670e-01 + 4.7922524852434547e+00 1.4044175901140019e+00 6.8565199249210607e-01 + 5.2504377041374699e+00 1.1396036597230013e+00 6.0874670761299088e-01 + 5.6352152398373079e+00 8.3903590617303569e-01 4.4779585128527599e-01 + 5.9215016642444898e+00 5.4142267235381025e-01 2.2015723889619332e-01 + 6.0349002146193547e+00 3.3184690608081180e-01 -2.7595155062146937e-02 + id 11247 + loc 8.1744241714477539e-01 4.0772235393524170e-01 1077 + blend 0.0000000000000000e+00 + interp 3.5526841965139205e-01:3.1036510647559634e-01:1.7980081091779399e-02:3.4341152419971954e-01:9.3317863709942406e-01:2.5105301465512042e-01:1.4997672317600268e+00:3.5526486696719556e-01:2.0546892327625228e+00:3.4737880534329896e-01:3.0285944733599233e+00 + CVs 20 + -1.0933945760014097e-01 2.9398478899795988e-01 3.0525077788503763e-01 + -1.7524732797313675e-01 6.3083393137140487e-01 5.7590977449723957e-01 + -2.3447099493923468e-01 9.7778904808028311e-01 8.6443424469927677e-01 + -3.1479123993919494e-01 1.3103248912406102e+00 1.2046488244146472e+00 + -4.4028249489808802e-01 1.6065355645614894e+00 1.6126316596586521e+00 + -6.3530508903853844e-01 1.8394137237243045e+00 2.0853073738380270e+00 + -9.1845560293009754e-01 1.9830691118944639e+00 2.5983994576214346e+00 + -1.2960088403306211e+00 2.0223882919343827e+00 3.1133723714710930e+00 + -1.7559883105892296e+00 1.9560471459905882e+00 3.5925821534949365e+00 + -2.2685788164861225e+00 1.7930818539966058e+00 4.0177577314777544e+00 + -2.7975645989525972e+00 1.5380087657573400e+00 4.3979255753839546e+00 + -3.3039727753074701e+00 1.1795660339489906e+00 4.7573280760382257e+00 + -3.7384628043159740e+00 7.0458212226022643e-01 5.1197488657872174e+00 + -4.0318571932562728e+00 1.2635665837253418e-01 5.5161823203471236e+00 + -4.0836183668586470e+00 -4.9630856402208900e-01 5.9915533099482507e+00 + -3.8483863915751533e+00 -9.8418947736174589e-01 6.5567781474481777e+00 + -3.4780086420371790e+00 -1.1437185636292013e+00 7.1592395740356700e+00 + -3.1583051213341369e+00 -1.1043480844552309e+00 7.7211485991198945e+00 + -2.9547293535379242e+00 -1.3810947325946115e+00 8.1916009674638595e+00 + id 11248 + loc 4.5940113067626953e-01 5.9736484289169312e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1961586828616892e-01:3.2307646654426014e-01:2.5081550972079703e-01:3.7244906037262482e-01:8.8784725885179350e-01:3.8071745766169951e-01:1.4017351482526514e+00:3.0633597295697484e-01:1.9981983728494841e+00:3.6727399360742413e-01:2.6801664602642621e+00:4.1808103674640323e-01:3.0521753718501232e+00:4.1961167212748607e-01:3.9855702113976297e+00 + CVs 20 + 1.5966063422579185e-01 2.6347213664814073e-01 -1.9194391665356372e-01 + 2.6586052171508778e-01 5.5182162412653657e-01 -3.9339566337841114e-01 + 3.5084605038998606e-01 8.3323592741905927e-01 -6.2304141540835889e-01 + 4.3268706971278392e-01 1.0859869540212055e+00 -8.8898028128983331e-01 + 5.1900779274455966e-01 1.3013743142806105e+00 -1.1920186010120135e+00 + 6.2344055906374352e-01 1.4713751246417748e+00 -1.5312743907644364e+00 + 7.6171568937419543e-01 1.5849664379592616e+00 -1.8987888257064989e+00 + 9.4311572336357030e-01 1.6305645072988313e+00 -2.2763158209642596e+00 + 1.1660010572410426e+00 1.6023355096638854e+00 -2.6387807031479484e+00 + 1.4180918547648278e+00 1.5041800243391541e+00 -2.9602085688041919e+00 + 1.6808510423766629e+00 1.3503862913572064e+00 -3.2223591902072162e+00 + 1.9362220234019676e+00 1.1608042495821425e+00 -3.4214144712571386e+00 + 2.1694665641825948e+00 9.5468397100479629e-01 -3.5651970316962376e+00 + 2.3700540952375899e+00 7.4678915460374917e-01 -3.6633901836606113e+00 + 2.5336637081721558e+00 5.4743617255920141e-01 -3.7191827762351490e+00 + 2.6596703768827243e+00 3.6066983019724685e-01 -3.7415521816815347e+00 + 2.7320295381561168e+00 1.5301183799765661e-01 -3.7649821850800635e+00 + 2.7021516688054974e+00 -9.1086862464741181e-02 -3.8525979844391585e+00 + 2.5351197512392538e+00 -3.1132586748196767e-01 -4.0737791947174706e+00 + id 11249 + loc 1.9332330673933029e-02 1.5976321697235107e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1960251021936743e-01:3.4153836515856817e-01:1.0544303647520203e-01:3.3512728696871719e-01:1.0002384578988952e+00:4.2566431135897653e-01:1.5386824046489334e+00:2.9069766691037102e-01:2.2225514592398237e+00:5.1959731419426525e-01:2.9705089603168267e+00:3.1846435421605057e-01:3.6641787151580214e+00 + CVs 20 + -7.3276651383610003e-03 4.0058043492797835e-01 -3.6728927736000422e-02 + -8.1186539667377405e-02 7.7871667850492243e-01 -8.8805227474750503e-02 + -2.0870000714188541e-01 1.1309755326868616e+00 -1.5877915489881650e-01 + -3.8838743053745517e-01 1.4431852837383827e+00 -2.5150423617959250e-01 + -6.1935426057497156e-01 1.6911966418309108e+00 -3.7059712143916207e-01 + -8.9032102218395148e-01 1.8498586647008839e+00 -5.1383210707261862e-01 + -1.1812803557590967e+00 1.9035321759176784e+00 -6.7236238433735929e-01 + -1.4717166103908914e+00 1.8532063391584805e+00 -8.3454504853324707e-01 + -1.7479188381774844e+00 1.7105483317648280e+00 -9.8670084571203187e-01 + -2.0065643689453472e+00 1.4936466814275964e+00 -1.1091020847129458e+00 + -2.2485365942995110e+00 1.2247275455568920e+00 -1.1768036558629089e+00 + -2.4675905796843152e+00 9.3034746425841131e-01 -1.1628429878482347e+00 + -2.6499497043973359e+00 6.5065730995429960e-01 -1.0382283515153043e+00 + -2.7791381694590913e+00 4.5468526218883243e-01 -7.7921662164424865e-01 + -2.8293263057596132e+00 4.4869301698841613e-01 -3.9894483476988718e-01 + -2.8050984602206621e+00 6.9422152745953292e-01 -1.6589646439372135e-02 + -2.7653330815025199e+00 1.1263672974314904e+00 2.3008379987976951e-01 + -2.7318060284436423e+00 1.6139766810696612e+00 3.0584752861109371e-01 + -2.9311488749848329e+00 1.6810972870801315e+00 6.0431193294614172e-01 + id 11250 + loc 7.2338765859603882e-01 6.7745864391326904e-01 1070 + blend 0.0000000000000000e+00 + interp 3.8849599008605762e-01:3.8849210512615678e-01:4.4228602653311333e-01:3.2841934110992127e-01:1.0394511212575157e+00:2.7415892130968605e-01:1.9443088546354739e+00:3.6054172612427066e-01:2.2813878510589900e+00:3.4972619620357315e-01:3.0318601795608360e+00:3.6038180880552972e-01:3.9442284473709037e+00 + CVs 20 + -3.1054339152341681e-01 3.9487291860453000e-01 8.2403504868078681e-02 + -5.5870749365937111e-01 7.7414004302385586e-01 1.6076393881376161e-01 + -7.6391187973062646e-01 1.1540441764730121e+00 2.5576758508945219e-01 + -9.7491344962220805e-01 1.5289336021669397e+00 3.1244098429695266e-01 + -1.2309048355956387e+00 1.8671146828746286e+00 2.6166474312613430e-01 + -1.5328474358728874e+00 2.1294157629894328e+00 8.5465901548536616e-02 + -1.8345819674218828e+00 2.2744259128098254e+00 -2.0646192466675006e-01 + -2.0347081252971919e+00 2.2769309063432233e+00 -5.8684450042613001e-01 + -2.0309755787871846e+00 2.1581762548090415e+00 -9.8517297110122626e-01 + -1.8441711905657889e+00 1.9798028309546458e+00 -1.3153087441214890e+00 + -1.5727832217807625e+00 1.7673829740079032e+00 -1.5684988858697717e+00 + -1.2350410811732129e+00 1.4967176958569279e+00 -1.7328441769364231e+00 + -8.5194313321557669e-01 1.1702341926458228e+00 -1.7726415798321868e+00 + -5.1912331326845107e-01 8.4600116439142181e-01 -1.8027986489694194e+00 + -3.1720544521928307e-01 5.7423711740987093e-01 -2.0438692422563518e+00 + -3.1101467643162173e-01 4.8976864660103847e-01 -2.5455389821756578e+00 + -5.7321524121938627e-01 8.8258202031634192e-01 -3.1080663365561558e+00 + -1.0297613159464218e+00 1.7799352713593937e+00 -3.1953726738502071e+00 + -1.0608225075976532e+00 1.8895494600080207e+00 -3.5175758535224140e+00 + id 11251 + loc 2.5593778491020203e-01 2.0799468457698822e-01 410 + blend 0.0000000000000000e+00 + interp 3.8155119961273437e-01:2.9853847392786897e-01:1.0921523064978400e-03:3.4045358855122021e-01:9.3987748342479716e-01:3.8154738410073824e-01:1.9577216504690100e+00:3.4903908543069762e-01:2.7349073182278647e+00:3.2373856069993673e-01:3.1648215290605002e+00 + CVs 20 + -1.2955398851746824e-01 1.1956593130168594e-01 -2.1693254552318855e-01 + -2.4019560079610658e-01 2.3974564087212008e-01 -4.0870646813706968e-01 + -3.3737299767222118e-01 3.6282640108452102e-01 -5.8708274198871535e-01 + -4.2325250056989860e-01 4.9055016154325837e-01 -7.5693727719692161e-01 + -4.9603482448397762e-01 6.2183211965429941e-01 -9.1621839526088955e-01 + -5.5430777004547926e-01 7.5492255162879096e-01 -1.0616900128513533e+00 + -5.9693118231467324e-01 8.8802340688876513e-01 -1.1892282629604605e+00 + -6.2497360318629469e-01 1.0201881773599930e+00 -1.2952531996035308e+00 + -6.4312592854563688e-01 1.1516664695909595e+00 -1.3781012848094234e+00 + -6.5863709958055161e-01 1.2829900234499219e+00 -1.4381487387133087e+00 + -6.7206107419325800e-01 1.4183679319483449e+00 -1.4807223869783637e+00 + -6.5126633611445184e-01 1.5762148588468299e+00 -1.5186489605719973e+00 + -5.3137469852590113e-01 1.7817483494000768e+00 -1.5706869870049811e+00 + -2.9032538586653323e-01 2.0311829817035676e+00 -1.6761679432703089e+00 + 1.7082863827141526e-02 2.2886554148686034e+00 -1.8727079712257639e+00 + 3.3551621414468602e-01 2.5254866988776081e+00 -2.1679306849779056e+00 + 6.4306936094609690e-01 2.7231724079231214e+00 -2.5600700567654391e+00 + 9.1405822399054881e-01 2.8681311507222165e+00 -3.0289232035900655e+00 + 1.0065957195366007e+00 3.0215754169981617e+00 -3.1757512602818827e+00 + id 11252 + loc 1.5156152844429016e-01 4.4093063473701477e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8318625418662448e-01:3.8013349040582456e-01:3.5932622168840456e-01:2.9544940253400498e-01:9.9620282253966197e-01:4.1875228098485784e-01:1.4322196087892807e+00:3.1668415061825456e-01:2.0399793745030323e+00:4.8318142232408262e-01:2.9996394885750743e+00:3.7963839276517763e-01:3.7902426451990738e+00 + CVs 20 + -7.9519661120537627e-02 2.8826147533052893e-01 -1.0288604601145600e-01 + -1.7931902952211867e-01 5.8973253169490203e-01 -2.0149286811535860e-01 + -2.9995639547295611e-01 8.8812013215704755e-01 -3.1761628856222845e-01 + -4.4423771363040770e-01 1.1670342556465934e+00 -4.6177331573507202e-01 + -6.1432652658795761e-01 1.4108478524640891e+00 -6.3505342949887555e-01 + -8.0623673032502996e-01 1.6039477699816396e+00 -8.3648959542637746e-01 + -1.0109809363051332e+00 1.7350919518254193e+00 -1.0624252009499884e+00 + -1.2176816265725725e+00 1.8005708404013274e+00 -1.3065578709522689e+00 + -1.4175293515216509e+00 1.8031548167854541e+00 -1.5614903686482844e+00 + -1.6078048147404345e+00 1.7481151285511394e+00 -1.8210271538602079e+00 + -1.7901455230761132e+00 1.6395068689412640e+00 -2.0786183346562073e+00 + -1.9651227701511187e+00 1.4795275804344126e+00 -2.3245669839226202e+00 + -2.1303848889203931e+00 1.2703502153077992e+00 -2.5459254513537801e+00 + -2.2861668376028832e+00 1.0122623893155942e+00 -2.7299436942432020e+00 + -2.4391722883676832e+00 7.0261547956591786e-01 -2.8600203011407781e+00 + -2.6012972305869222e+00 3.4541198309348897e-01 -2.9030051728323825e+00 + -2.7892843242954859e+00 -3.5469869478894411e-02 -2.8136344781001901e+00 + -3.0196309344213841e+00 -3.7501158693708159e-01 -2.5768075142665001e+00 + -3.1363744497927319e+00 -5.2386430319009514e-01 -2.3945219002224549e+00 + id 11253 + loc 2.2471497952938080e-01 4.4820398092269897e-01 1070 + blend 0.0000000000000000e+00 + interp 1.3170359928719133e+00:3.4309432322788602e-01:6.3130904710610369e-01:1.3170259928719132e+00:7.9004430661961711e-01:3.7702242566891880e-01:2.6106300760092007e+00:4.9179940552769458e-01:3.0306187576332344e+00:3.6880936599767611e-01:3.7977354860326229e+00 + CVs 20 + 2.6714292389095184e-01 3.3096425856446171e-01 3.7082578034879010e-01 + 4.3913102651166180e-01 5.8544682012496230e-01 6.5671119679777268e-01 + 6.0437936620701038e-01 8.0853802218954240e-01 8.6964305987640267e-01 + 7.9552676829224600e-01 1.0112066379013909e+00 9.9671638624202585e-01 + 1.0084820047664211e+00 1.2127678583812160e+00 1.0601458586023373e+00 + 1.2314902682401763e+00 1.4581784654567853e+00 1.1335707438505347e+00 + 1.4396295019077086e+00 1.7574178425288185e+00 1.2758537409483237e+00 + 1.6232181797628904e+00 2.0845996113852152e+00 1.5170229438526843e+00 + 1.7615532107932852e+00 2.4209543814363270e+00 1.8939101016354198e+00 + 1.7286223861284546e+00 2.7445093106424414e+00 2.4082096588798652e+00 + 1.3996210752962210e+00 2.9989940585323969e+00 2.8939036839840009e+00 + 7.8954178034498157e-01 3.1464688129025928e+00 3.2086822071617722e+00 + 1.8394361416049776e-03 3.1206648695486177e+00 3.2709852067630738e+00 + -6.3611707164805731e-01 2.9598291361313587e+00 3.1368741881038886e+00 + -9.0760546628929384e-01 2.8975426624340455e+00 3.0208507958666471e+00 + -7.6811998134365167e-01 3.0512816152858173e+00 2.9948319573003754e+00 + -6.1682629963641489e-02 3.2974283822761716e+00 2.9416435074161997e+00 + 1.3673924218453593e+00 3.0751473929924682e+00 2.5289230864848133e+00 + 1.2452091646337533e+00 3.2728291759580812e+00 2.6737953938226271e+00 + id 11254 + loc 4.3200597167015076e-01 5.8635413646697998e-01 410 + blend 0.0000000000000000e+00 + interp 4.3063273414973374e-01:3.7062358752781188e-01:2.8817592850253559e-01:3.5885287435108715e-01:9.9634620928951467e-01:4.3062842782239225e-01:1.6730844490335373e+00:3.2128925706775824e-01:2.0897654273525177e+00:2.9564996449930675e-01:3.0700904131048743e+00:3.6378638476363262e-01:3.8784800769612215e+00 + CVs 20 + 3.1803335472518401e-01 1.1720191523485306e-01 -1.7147236446308356e-01 + 6.0174449413946829e-01 2.1184562304716445e-01 -3.1475367073670302e-01 + 8.8778049239891432e-01 2.9744717422642197e-01 -4.4448357267412797e-01 + 1.1969457019701402e+00 3.8251279813010441e-01 -5.6889278550650302e-01 + 1.5262897185149651e+00 4.6559181891068185e-01 -6.8813434215667668e-01 + 1.8712386286689102e+00 5.4517235690637822e-01 -7.9811974908197225e-01 + 2.2263560515592506e+00 6.2007746792153473e-01 -8.8709066027997807e-01 + 2.5851943795635339e+00 6.8864202110509243e-01 -9.3905395358179811e-01 + 2.9392567810476642e+00 7.4899610339859057e-01 -9.3847716300638928e-01 + 3.2770858189297973e+00 8.0094435698624156e-01 -8.7350534613943109e-01 + 3.5895670164067930e+00 8.4216665710873784e-01 -7.4634680068000825e-01 + 3.8933300907820749e+00 8.5232731193766398e-01 -5.9542642766618048e-01 + 4.2351995380118819e+00 7.9062610240634279e-01 -4.9107496567722109e-01 + 4.6244639594738883e+00 6.3639310718978570e-01 -4.8436608259567659e-01 + 5.0208072737678897e+00 4.0933185986459719e-01 -5.8100466274241935e-01 + 5.3876833274331659e+00 1.3471148167537583e-01 -7.7902618886866815e-01 + 5.6942445221691838e+00 -1.6356655592723701e-01 -1.0867826217190788e+00 + 5.9152506813445953e+00 -4.5070528877792215e-01 -1.4902353055677138e+00 + 6.2032754634326013e+00 -6.1755115821603423e-01 -1.6864896769123625e+00 + id 11255 + loc 6.1082065105438232e-01 1.6355621814727783e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7820951267485945e-01:4.7820473057973273e-01:4.9671265689518929e-01:4.4541772022996329e-01:9.3488524144925467e-01:3.8132958110980397e-01:1.1454475291795470e+00:3.2696953032635689e-01:2.0008853046888735e+00:3.2188332610953391e-01:2.5150433567090964e+00:2.8432123993418407e-01:3.0125693036575112e+00:3.2722945418161015e-01:3.9889751479256486e+00 + CVs 20 + -6.3499303460113302e-02 2.5044579076053225e-01 2.3963608403933218e-01 + -1.2693677007495818e-01 4.8712300897517591e-01 4.4270878139573888e-01 + -1.9091102301974419e-01 6.9372442685801206e-01 6.2036896306762412e-01 + -2.5216918929811039e-01 8.6653276040645644e-01 7.7826514148726833e-01 + -3.0556449434889238e-01 1.0120529390608290e+00 9.2062460750283526e-01 + -3.4602375535713953e-01 1.1398882172960081e+00 1.0546730888674327e+00 + -3.7181881245873610e-01 1.2592502267359345e+00 1.1900719464096257e+00 + -3.9124903911393383e-01 1.3733335433372513e+00 1.3391219832234826e+00 + -4.2697397040774254e-01 1.4761464832689883e+00 1.5058334893089322e+00 + -5.0886678421084397e-01 1.5545708810939789e+00 1.6767233194690858e+00 + -6.5257861259723415e-01 1.6060456227677959e+00 1.8330741865808502e+00 + -8.6061788088123214e-01 1.6404282237329317e+00 1.9691085604901404e+00 + -1.1369825275327763e+00 1.6554386486928854e+00 2.0884180544198556e+00 + -1.5005011156138017e+00 1.6146785047178063e+00 2.1856952145659938e+00 + -1.9642752281393188e+00 1.4567232894149662e+00 2.2592056684126613e+00 + -2.4303528077818801e+00 1.0837082850671607e+00 2.3248104664049754e+00 + -2.7049494678261428e+00 4.7326339655936622e-01 2.4074884121890596e+00 + -2.6944073154530388e+00 -1.2520932703996701e-01 2.5763582468917354e+00 + -2.4880328435541923e+00 -1.2241475370774424e-01 2.8195494333008289e+00 + id 11256 + loc 5.5327582359313965e-01 9.2272841930389404e-01 1070 + blend 0.0000000000000000e+00 + interp 5.3900728273881049e-01:2.9769596423061456e-01:3.2556298495553848e-01:3.6274458290221684e-01:1.3552172317979581e+00:4.3920044234718209e-01:1.7810522078529509e+00:5.3900189266598308e-01:2.0057440307646441e+00:4.0532357402035085e-01:2.6984089590863429e+00:3.4937434294254149e-01:3.0866679700441222e+00:4.7131563756458328e-01:3.6768952445980663e+00 + CVs 20 + -2.5400352113901109e-01 3.4565392714708632e-01 1.7772818523908779e-01 + -4.6373828035623926e-01 6.4696438336305095e-01 3.3145325182300239e-01 + -6.2590467173274189e-01 9.3215617544735907e-01 5.0024514437230261e-01 + -7.6448421877274175e-01 1.2005754521169150e+00 6.5396939443539670e-01 + -9.0727442282156634e-01 1.4349482202046744e+00 7.4097707428298032e-01 + -1.0618606673194979e+00 1.6257033538340822e+00 7.4890837781552710e-01 + -1.2118258260888171e+00 1.7632582328217041e+00 7.0034745513323904e-01 + -1.3392723228887262e+00 1.8497125842119826e+00 6.4034150461488792e-01 + -1.4547503215662809e+00 1.9068011057660279e+00 5.8902277918279644e-01 + -1.5507839730928601e+00 1.9399911870696918e+00 5.0329788787752072e-01 + -1.6002350652886010e+00 1.9534095718680045e+00 3.7432890953618791e-01 + -1.6141621508676400e+00 1.9660280444809841e+00 2.1414975293160432e-01 + -1.5721610266447268e+00 1.9617478095653624e+00 4.4353933050279792e-02 + -1.4283114811937865e+00 1.8967552064950877e+00 -3.5418114740186413e-02 + -1.1815992294516464e+00 1.7403071174754130e+00 4.3963642364540423e-02 + -8.4724915893912744e-01 1.4215041625892055e+00 2.2681343792357067e-01 + -4.0287233524337129e-01 7.7680366376694310e-01 3.3287522018002974e-01 + -4.9046125289791279e-03 5.9198519635569775e-02 -1.5757698129850797e-03 + -2.6372643411875615e-02 7.5837777279346444e-02 -1.1592849256426388e-01 + id 11257 + loc 8.1865882873535156e-01 7.3305612802505493e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5476870251197360e-01:3.0120036317977100e-01:5.0135832290187921e-05:3.6713669227925000e-01:8.4032631482469156e-01:4.5476415482494847e-01:1.4010995250839744e+00:3.1795715164726107e-01:2.0456011555915059e+00:4.3667763166693091e-01:2.7047000693457117e+00:3.6606496387656695e-01:3.0789502969539724e+00 + CVs 20 + 2.9047651999747667e-02 3.4929251844095643e-01 -2.1187047471971854e-01 + 9.7986630386479701e-02 6.7451901041879381e-01 -4.1342604449000475e-01 + 1.8830685339987174e-01 9.8196853714249532e-01 -6.2085312210926102e-01 + 2.9126900730579464e-01 1.2732525869551305e+00 -8.5020175985784474e-01 + 4.0464980189766958e-01 1.5424313157132628e+00 -1.1143922151958814e+00 + 5.2838391069483270e-01 1.7778297247408341e+00 -1.4131679596512732e+00 + 6.7284659105326572e-01 1.9678235302036846e+00 -1.7294089954144982e+00 + 8.4877450743857086e-01 2.1055914001984339e+00 -2.0371314817311390e+00 + 1.0554259222612290e+00 2.1922164813823986e+00 -2.3121434857144596e+00 + 1.2866579801734992e+00 2.2352701287813632e+00 -2.5418978696236980e+00 + 1.5441748837468054e+00 2.2428346166405779e+00 -2.7305135339323265e+00 + 1.8420210333859368e+00 2.2133219682576946e+00 -2.8983501823237461e+00 + 2.1698204391925686e+00 2.1117785773071178e+00 -3.0660332832141077e+00 + 2.4477697583772842e+00 1.8959624367489125e+00 -3.2170380010693855e+00 + 2.6159643748976871e+00 1.5742392488639261e+00 -3.3218541160841424e+00 + 2.6989881066514352e+00 1.1133020632820967e+00 -3.3755195127958237e+00 + 2.6434053544663048e+00 4.0415059131114850e-01 -3.3703809485103950e+00 + 2.2364903451884848e+00 -2.3424702361535310e-01 -3.3238516145959860e+00 + 1.8673594350007299e+00 -1.5776642894604165e-01 -3.2929560189700458e+00 + id 11258 + loc 1.0068932175636292e-01 5.3251320123672485e-01 410 + blend 0.0000000000000000e+00 + interp 4.1498723942059679e-01:2.6216028477569869e-01:1.4700219104293277e-01:4.1498308954820262e-01:9.9819329837654758e-01:4.1364880840183399e-01:1.4632032836328295e+00:2.9119689676374216e-01:2.0546729375864947e+00:3.2073156432023403e-01:2.9893969547177912e+00:3.1069153489925855e-01:3.5920449425109826e+00 + CVs 20 + 2.3292751140230455e-01 1.6148453771117938e-01 -3.0516619918143278e-02 + 4.1415679432750940e-01 2.9002532664196723e-01 -4.7448709125580968e-02 + 5.6798596742588447e-01 4.0123234761733795e-01 -5.1624140002487939e-02 + 7.1547775957933879e-01 5.1083909181977716e-01 -4.1332886597182761e-02 + 8.5295553859896489e-01 6.1734484658781874e-01 -2.1565267058823390e-02 + 9.7466232493012550e-01 7.1803442346370405e-01 3.5076915743725845e-05 + 1.0785639278004606e+00 8.1268792261161704e-01 1.7232169928400376e-02 + 1.1689232279627224e+00 9.0386831615655383e-01 2.8514493187610235e-02 + 1.2506837321764965e+00 9.9271481496274028e-01 3.2850247535724353e-02 + 1.3265884848980247e+00 1.0777122700987991e+00 2.6172886451995336e-02 + 1.4033457358296706e+00 1.1652126147654507e+00 2.0105345395616536e-02 + 1.4950112730604972e+00 1.2851746589566786e+00 8.1881470876071782e-02 + 1.6273646130107102e+00 1.4641776514060980e+00 2.9964462642735307e-01 + 1.8464853638757117e+00 1.6665655717849515e+00 6.4566416075040467e-01 + 2.1543276417497141e+00 1.8318638300053023e+00 9.8349795987486033e-01 + 2.5144363134488756e+00 1.9466865198049246e+00 1.2460763191886319e+00 + 2.9143793448232600e+00 2.0155047926694327e+00 1.4505775799493053e+00 + 3.3438628768680507e+00 2.0363398445490279e+00 1.6084518366910499e+00 + 3.4999019658610688e+00 2.0472276949910704e+00 1.5314633904901338e+00 + id 11259 + loc 8.7983590364456177e-01 1.5931004285812378e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0344641936156531e-01:2.7564566074774077e-01:2.1435345788985982e-03:5.0344138489737167e-01:9.6224660174425203e-01:4.3364462451785263e-01:1.5016793650025573e+00:4.1917420044836229e-01:2.0390115518862815e+00:2.7423845415462023e-01:2.7192376202478585e+00:2.9236560389228139e-01:3.2192863377533953e+00 + CVs 20 + 3.8064975217108810e-01 3.0067366200031537e-01 -1.6308090497124197e-01 + 7.4461103427177533e-01 5.5091871660271319e-01 -2.4431017815981776e-01 + 1.1012366962563418e+00 7.9411907842130469e-01 -2.6758100831935372e-01 + 1.4430079677259364e+00 1.0577426553166629e+00 -2.3336105137282870e-01 + 1.7338399504062667e+00 1.3294574054865140e+00 -1.7924748425211678e-01 + 1.9522693395754256e+00 1.5577381058232858e+00 -1.9153942205480312e-01 + 2.1168720624564172e+00 1.6926545723060893e+00 -2.8208589975359755e-01 + 2.2585568178654536e+00 1.7454838895895868e+00 -3.9325739215988920e-01 + 2.3768229196991086e+00 1.7163540847747989e+00 -4.7268808852902255e-01 + 2.4317220875861190e+00 1.6002672612199813e+00 -4.5277582880086475e-01 + 2.4055701147038135e+00 1.4866157321852849e+00 -3.3057299317721789e-01 + 2.3753093188634304e+00 1.4497251231992143e+00 -2.1356737900692591e-01 + 2.3962465591724511e+00 1.4536570570534164e+00 -1.5668004812019909e-01 + 2.4722811842289714e+00 1.4475025602138634e+00 -1.5751773987406459e-01 + 2.5856758176808143e+00 1.4030175847664208e+00 -1.9472518390993310e-01 + 2.6936997929610640e+00 1.3374403164028341e+00 -2.3509345543857463e-01 + 2.7618904529024455e+00 1.2692457094641325e+00 -2.6012160042855581e-01 + 2.7946739626290826e+00 1.1279171734905724e+00 -2.5630083838362683e-01 + 2.8319917988631964e+00 7.1232529610504280e-01 -2.0437878291893563e-01 + id 11260 + loc 5.5300253629684448e-01 1.6139855980873108e-01 410 + blend 0.0000000000000000e+00 + interp 4.7478210530003201e-01:4.7477735747897903e-01:3.7194841997908634e-01:3.5395802157777145e-01:9.5933475539871893e-01:3.5539110736760504e-01:1.8218809458458787e+00:2.8263876370366331e-01:2.7119175466792353e+00:3.9850185413019606e-01:3.1744990870157848e+00:4.0435506289442613e-01:3.9332134187430849e+00 + CVs 20 + -3.4039151216189090e-01 2.6043713333147589e-01 1.1296161748292478e-01 + -6.4867414173904225e-01 5.1047493143147449e-01 2.6511078813421507e-01 + -9.5581678107985879e-01 7.7467637336326711e-01 4.3605234056740738e-01 + -1.2594818392597369e+00 1.0408914471349726e+00 6.2166178554713003e-01 + -1.5399783237841576e+00 1.2717719791489286e+00 8.2295337700237159e-01 + -1.7749370648777902e+00 1.4265397500004395e+00 1.0318801593783589e+00 + -1.9617437332376775e+00 1.5014533115969240e+00 1.2543163745051620e+00 + -2.1309733918588640e+00 1.5182250558117216e+00 1.5234420048628743e+00 + -2.3056882650013586e+00 1.4794246821791708e+00 1.8492857257731266e+00 + -2.4997464507969873e+00 1.3712067704006685e+00 2.2034687042688232e+00 + -2.7140695914438409e+00 1.1791493080255424e+00 2.5391290361067744e+00 + -2.9301339426728696e+00 9.2582890584743094e-01 2.8094337959726561e+00 + -3.1394391912125679e+00 6.6234372573375078e-01 3.0091554739452637e+00 + -3.3525861717621641e+00 4.1266505084639449e-01 3.1728330813407233e+00 + -3.5864972492059772e+00 1.7602095391183359e-01 3.3581314860787450e+00 + -3.8681968138178062e+00 -4.6622571296172977e-02 3.6477274845802805e+00 + -4.2277634462450431e+00 -2.4295852808762297e-01 4.0770060600374078e+00 + -4.6828281636422622e+00 -4.1004244845541948e-01 4.5818791940990762e+00 + -5.2143098466856275e+00 -5.5458404737840850e-01 5.0865075697169413e+00 + id 11261 + loc 3.7122738361358643e-01 8.3648252487182617e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4308282416350986e-01:4.2215490376567183e-01:3.5528379750886518e-03:2.6671255178044384e-01:1.0123139258110041e+00:3.5733241780717923e-01:1.9768205793285838e+00:3.0410765117452759e-01:2.9417659176763937e+00:4.4307839333526822e-01:3.6629114682669597e+00 + CVs 20 + 3.0275037337693683e-01 2.3026117501283869e-01 -2.2644511802121847e-01 + 5.5685987555972982e-01 4.9590969618897873e-01 -4.6108453949143113e-01 + 7.9967355792145522e-01 7.4388209039317810e-01 -7.1561225165939046e-01 + 1.0473525660540712e+00 9.5564183956113968e-01 -9.9828736162114662e-01 + 1.3019140461488432e+00 1.1201083116229165e+00 -1.3055711924164026e+00 + 1.5729508522254378e+00 1.2266138880760136e+00 -1.6277723560641126e+00 + 1.8722386846649091e+00 1.2684209701186500e+00 -1.9532102450421629e+00 + 2.2053674967099677e+00 1.2429095169635103e+00 -2.2709669013397438e+00 + 2.5677607222223036e+00 1.1493415631985937e+00 -2.5702520887934619e+00 + 2.9441637025283036e+00 9.8968648946721105e-01 -2.8439561356755254e+00 + 3.3098732891654277e+00 7.6814628709078958e-01 -3.0922883538447010e+00 + 3.6321184167736273e+00 4.8715036690512070e-01 -3.3174390128930016e+00 + 3.8720900863754641e+00 1.4941738846699359e-01 -3.5201320313729534e+00 + 3.9874995055639850e+00 -2.3098536261037728e-01 -3.7048926349550042e+00 + 3.9358530010061945e+00 -6.1505432746718092e-01 -3.8858451729646939e+00 + 3.6816920378443507e+00 -9.2268065682478095e-01 -4.0768222630935744e+00 + 3.2830728030962302e+00 -1.0367930134060530e+00 -4.2942901578602273e+00 + 2.8905307090107168e+00 -9.2097546554101761e-01 -4.5354487652386428e+00 + 2.6912638540025657e+00 -1.0393262196727391e+00 -4.6295493454262413e+00 + id 11262 + loc 6.6333115100860596e-01 8.1335955858230591e-01 410 + blend 0.0000000000000000e+00 + interp 5.0051352313555508e-01:2.3605690957175166e-01:6.0436016871159359e-01:3.7276445339550751e-01:1.0694146068470203e+00:3.1509471249651144e-01:1.9999512158409041e+00:5.0050851800032370e-01:2.2898766748551305e+00:4.4545565426920286e-01:3.0054216057743912e+00:3.0472181656721092e-01:3.9730567657348712e+00 + CVs 20 + 5.3050344736833432e-01 2.8741224640076818e-01 -9.4406308057840879e-02 + 9.4923251598114100e-01 4.9270485654991891e-01 -1.8540650545864695e-01 + 1.3618826268640114e+00 6.7093246959741593e-01 -2.6340985328817307e-01 + 1.8036659104982271e+00 8.3184563911546205e-01 -3.2853497294017331e-01 + 2.2587398284099494e+00 9.5706562896349667e-01 -3.9385099493663756e-01 + 2.7119798189444153e+00 1.0284789961852323e+00 -4.7215523941304993e-01 + 3.1515910997278969e+00 1.0262225837469963e+00 -5.7517124596039837e-01 + 3.5567535899197198e+00 9.3264360982713113e-01 -7.1031928110367404e-01 + 3.9004745915857564e+00 7.5283762886907590e-01 -8.6536123423096378e-01 + 4.1658073657845085e+00 5.1937413749825900e-01 -1.0093593285397693e+00 + 4.3605675253580767e+00 2.3726414146422603e-01 -1.1154649643636654e+00 + 4.5145537638542157e+00 -1.7427246588720458e-01 -1.1709219100103516e+00 + 4.6515960887889225e+00 -7.7873612323561381e-01 -1.2042194235502812e+00 + 4.7943215537689134e+00 -1.5431624584495889e+00 -1.3069258799445844e+00 + 4.9615962255354784e+00 -2.3550300412107221e+00 -1.5644153113159707e+00 + 5.1524362063301155e+00 -3.0580392023078335e+00 -1.9750212106016574e+00 + 5.3606136427772046e+00 -3.5771584544071584e+00 -2.4602586956834651e+00 + 5.5999971695180806e+00 -3.9561078723870375e+00 -2.9523535050089427e+00 + 5.8890118846206692e+00 -4.2561029733485416e+00 -3.4090298811363171e+00 + id 11263 + loc 4.5592591166496277e-01 9.8290756344795227e-02 1070 + blend 0.0000000000000000e+00 + interp 1.6881172001052274e+00:3.4455155657682734e-01:4.1498292377263613e-01:4.7047798805452895e-01:6.0388349878669934e-01:7.9118663662153399e-01:7.0584293540744691e-01:1.6881072001052273e+00:2.6809272031410378e+00:1.3170259928719132e+00:2.7207969618288459e+00:9.8119754100703305e-01:2.7738617323219263e+00:4.0371266565382286e-01:3.0562816220486377e+00:3.3896386141348556e-01:3.8092049930566736e+00 + CVs 20 + 3.7406363135950293e-01 4.2718823586294852e-01 2.9443130521343308e-01 + 5.9908703246567341e-01 8.1052820976782458e-01 5.4825244619440860e-01 + 7.3916182830838284e-01 1.1775591180485019e+00 7.5465151398403663e-01 + 8.2197910846583766e-01 1.5462221449203684e+00 9.0561672024662532e-01 + 8.7669931851683924e-01 1.8766623895845020e+00 9.6254116933609013e-01 + 9.6153198452446065e-01 2.1262689835212676e+00 9.2355415936455376e-01 + 1.0943859776682952e+00 2.3241002099644508e+00 8.4936027082639753e-01 + 1.2923132509640480e+00 2.5531958699400725e+00 8.1070032910650114e-01 + 1.6007856279748958e+00 2.8247733985526478e+00 8.5605870201386414e-01 + 2.0486186857793349e+00 3.0660407372422158e+00 1.0350153078167315e+00 + 2.6008665308235925e+00 3.1555559066646448e+00 1.3763262768293001e+00 + 3.1329341165789297e+00 3.0208033556079217e+00 1.8235339578829746e+00 + 3.5514304847551847e+00 2.6928458520445675e+00 2.2919752662374493e+00 + 3.8290614190612344e+00 2.2180908711069716e+00 2.7410150321116111e+00 + 3.9520339657960712e+00 1.6495412500136655e+00 3.1517798341687611e+00 + 3.9129256381031396e+00 1.0255579115766940e+00 3.5007599547683244e+00 + 3.6949874584044800e+00 3.5439176075578471e-01 3.7288944556838710e+00 + 3.2833897954148292e+00 -3.0705577057944211e-01 3.7632711923598050e+00 + 3.1037348794777837e+00 -5.9648495667476742e-01 3.8924395919949757e+00 + id 11264 + loc 1.9087237119674683e-01 2.9600101988762617e-03 1077 + blend 0.0000000000000000e+00 + interp 5.4864453789397916e-01:1.6768382302204488e-01:4.6108405695831745e-01:4.3175821060470310e-01:9.9951808624274785e-01:4.6883916235448220e-01:1.3464314142444307e+00:5.4863905144860026e-01:1.8530221182206135e+00:5.1401455954485176e-01:2.0012156003597807e+00:3.1978996528853204e-01:2.6317283876958628e+00:2.6903925534976803e-01:3.0331138287388382e+00:2.6756515830885108e-01:3.8702503796180654e+00 + CVs 20 + -9.9026906309465326e-02 3.5822715679412143e-01 5.1623447138970574e-02 + -2.2605701458459743e-01 6.8378194862204222e-01 7.1446541058530544e-02 + -3.7607337601467244e-01 9.8143248145333961e-01 6.4556473380320001e-02 + -5.4524095201525680e-01 1.2475923843307271e+00 3.1327106814389105e-02 + -7.3081226458793425e-01 1.4737671229105218e+00 -3.0926665597698411e-02 + -9.2691822682402669e-01 1.6528574727334435e+00 -1.2243625434749583e-01 + -1.1267676161403326e+00 1.7800003953636252e+00 -2.4246306637155934e-01 + -1.3240303787146122e+00 1.8526283181716356e+00 -3.9092381130193093e-01 + -1.5119644642646388e+00 1.8694069697877858e+00 -5.6870404314426293e-01 + -1.6870331621574672e+00 1.8278984709632315e+00 -7.7717059418547318e-01 + -1.8517779523665943e+00 1.7244107600406098e+00 -1.0110024837985958e+00 + -2.0122101724672117e+00 1.5553895262217547e+00 -1.2539019877357556e+00 + -2.1751531835699378e+00 1.3145248170894768e+00 -1.4815840932819546e+00 + -2.3516367850796893e+00 9.9055026434546056e-01 -1.6581506834663515e+00 + -2.5549241356301797e+00 5.8578713759926992e-01 -1.7214888790406304e+00 + -2.8036990779396485e+00 1.4781678420959610e-01 -1.6121220405428058e+00 + -3.1443052913195677e+00 -2.3627535194518878e-01 -1.3197472575878051e+00 + -3.6009071207799423e+00 -4.6330299860098045e-01 -9.0695885829512546e-01 + -3.9903520448690264e+00 -6.9903713942079126e-01 -6.3599855912888303e-01 + id 11265 + loc 6.6654686816036701e-03 1.1573594808578491e-01 410 + blend 0.0000000000000000e+00 + interp 4.0303406205490333e-01:3.3044649961738354e-01:3.4239333764538271e-01:2.5536860410779760e-01:9.9924005905154645e-01:3.8529195127177707e-01:2.0244642202638468e+00:4.0303003171428281e-01:2.8788656594061326e+00:3.0593111777888155e-01:3.0727844028546261e+00:3.8664260558465674e-01:3.9546814504461185e+00 + CVs 20 + -1.1041324272177679e-01 1.0668398434576194e-01 -1.0696773039150997e-01 + -2.3167774035604016e-01 2.0754057907387274e-01 -2.0020253107928471e-01 + -3.6240534049433148e-01 3.1449793430691247e-01 -2.9614666817688451e-01 + -4.9702971495511694e-01 4.3644243386059217e-01 -4.0597810563007314e-01 + -6.3221722252374191e-01 5.7606666354657188e-01 -5.3834070221385066e-01 + -7.6190944532399407e-01 7.3468804844573721e-01 -7.0288260277841297e-01 + -8.7347339022512671e-01 9.1166634338874197e-01 -9.0474776102771748e-01 + -9.5202132392124228e-01 1.1019042171274549e+00 -1.1396491192343767e+00 + -9.8943897901098188e-01 1.2978204440449894e+00 -1.3997910232173525e+00 + -9.8382725165431362e-01 1.4928459188929881e+00 -1.6792454890863262e+00 + -9.3735376793043246e-01 1.6809255245285355e+00 -1.9609403665216922e+00 + -8.7006221738270328e-01 1.8531246296593453e+00 -2.1957873593996990e+00 + -8.2225995708640676e-01 2.0021140763630676e+00 -2.3253975415671930e+00 + -8.0404325961858225e-01 2.1358901108504029e+00 -2.3499646315258689e+00 + -7.9968584990016922e-01 2.2606395940071318e+00 -2.3546283467261864e+00 + -8.1810333315652628e-01 2.3677917382281022e+00 -2.3923401000399904e+00 + -8.5867572325600050e-01 2.4585949098206843e+00 -2.4290726233814079e+00 + -9.0475716934325456e-01 2.5418447404242084e+00 -2.4293388166347230e+00 + -1.1132700226343490e+00 2.5227145039851768e+00 -2.5947664242160511e+00 + id 11266 + loc 6.1922818422317505e-01 4.0964931249618530e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6993938100347299e-01:3.7583548213779044e-01:2.1592262207515656e-01:3.6215322102802627e-01:9.2729299779033025e-01:4.2111259926989286e-01:1.6137445050383121e+00:3.5974680254230335e-01:2.0930356543492850e+00:2.8797530080046957e-01:2.8486432356915747e+00:4.6993468160966295e-01:3.0188179224824072e+00:4.1028982439234224e-01:3.9198239465527536e+00 + CVs 20 + -1.4679233572254394e-01 2.4142503377009650e-01 2.4995046137805166e-01 + -2.8885133564032622e-01 5.1746790197307146e-01 4.8641877912784898e-01 + -4.4730553793584338e-01 7.8789490424179565e-01 7.3276511818239876e-01 + -6.3611843946516622e-01 1.0235047836865765e+00 1.0057974267816485e+00 + -8.6135580753301810e-01 1.2008047076765591e+00 1.3056391047203240e+00 + -1.1276940037032639e+00 1.2983687993066133e+00 1.6173517576133405e+00 + -1.4344487991799078e+00 1.3031219702077133e+00 1.9158733233983232e+00 + -1.7730663975477654e+00 1.2136110810188490e+00 2.1772463969943341e+00 + -2.1290809326222306e+00 1.0376612713110061e+00 2.3896795357411427e+00 + -2.4864654385583376e+00 7.8478742197251272e-01 2.5626270214779323e+00 + -2.8232377001374296e+00 4.5982144297329985e-01 2.7155391666925066e+00 + -3.1063064975689163e+00 6.5883859187188865e-02 2.8622807498208855e+00 + -3.2994182283474194e+00 -3.8851044410852076e-01 3.0102097621005308e+00 + -3.3731044707795461e+00 -8.9543107813959799e-01 3.1843384188366741e+00 + -3.2753019289597116e+00 -1.4454094155021808e+00 3.4355801987252312e+00 + -2.9536029413001899e+00 -1.9806376480397954e+00 3.8321057852210236e+00 + -2.4243837686628193e+00 -2.3710328064448078e+00 4.4345846033255629e+00 + -1.8540653103976394e+00 -2.5145741903253143e+00 5.1109554669592621e+00 + -1.6389766200150317e+00 -2.6912053367208597e+00 5.4021912216755368e+00 + id 11267 + loc 9.0655112266540527e-01 4.0591442584991455e-01 1070 + blend 0.0000000000000000e+00 + interp 3.8546267485736019e-01:3.8545882023061162e-01:2.9881514207339399e-01:3.8379917056650464e-01:1.0711864747373487e+00:2.8808070499282545e-01:2.0167267772395800e+00:3.5709673233342487e-01:2.9970593766348932e+00:3.5224001892451462e-01:3.5951775007046995e+00 + CVs 20 + 1.7217497068891752e-01 2.8804187676787757e-01 -7.1911262553681576e-02 + 3.2347941070182817e-01 5.1413864580675817e-01 -8.7120111396487038e-02 + 4.4551357729087598e-01 6.9523260196581926e-01 -9.0981606851524510e-02 + 5.4075005180255298e-01 8.4121116909589466e-01 -1.0260407574934427e-01 + 6.3130038083744067e-01 9.6836050274565288e-01 -7.2766431202496595e-02 + 7.2535991560921720e-01 1.0926057464808938e+00 5.1163310292009712e-02 + 8.1804676564256518e-01 1.2614193394461233e+00 2.3817468763160388e-01 + 8.9568752750808678e-01 1.5134749582025382e+00 3.9788185019734679e-01 + 9.4509764161213605e-01 1.8440989881558245e+00 4.7883846885112380e-01 + 9.7039361696011639e-01 2.2518382033674573e+00 4.7049956769838741e-01 + 1.0294163467905129e+00 2.7130252423898096e+00 3.3496338574889517e-01 + 1.1941744460976875e+00 3.0831651958855804e+00 4.5220583876437237e-02 + 1.4276186720822555e+00 3.2336921055927732e+00 -3.2499645744355421e-01 + 1.6550982526450269e+00 3.1714404389462323e+00 -6.9209878139342296e-01 + 1.8637819681344263e+00 2.9559296840485745e+00 -1.0140854821605367e+00 + 2.0864783481057003e+00 2.6349123366399692e+00 -1.2776361482390914e+00 + 2.3192835055894552e+00 2.2199946959023045e+00 -1.4632868833895514e+00 + 2.4709505261719480e+00 1.7418011363242718e+00 -1.5191075587171243e+00 + 2.4436334174118839e+00 1.3686450525554326e+00 -1.4112258336828074e+00 + id 11268 + loc 9.1891449689865112e-01 9.7416579723358154e-01 410 + blend 0.0000000000000000e+00 + interp 4.8613592304118131e-01:2.6649626805222676e-01:6.4666593348914936e-01:4.8613106168195092e-01:1.3816612747187653e+00:2.7063424963508498e-01:1.9881471380736073e+00:2.7677028735900872e-01:2.8359264200685264e+00:2.9998279505852776e-01:3.2416237552542881e+00:4.3517760336708750e-01:3.9938864066591457e+00 + CVs 20 + 6.0900641393598531e-01 2.6101612324450402e-01 -1.5243099437395360e-01 + 1.0854872014144716e+00 4.1569515022693204e-01 -2.7206626861666783e-01 + 1.5490598465923475e+00 5.3163347778649361e-01 -3.6289176854814142e-01 + 2.0386032794726185e+00 6.2698218290044683e-01 -4.2680396353131078e-01 + 2.5420370115165207e+00 6.8985078514316789e-01 -4.7621375897769802e-01 + 3.0527763117934881e+00 7.0485759078738397e-01 -5.3178444711020978e-01 + 3.5570390357804609e+00 6.5477882518094566e-01 -6.1539386608111712e-01 + 4.0204469707598776e+00 5.3582887117144851e-01 -7.3605630857717763e-01 + 4.4120194740888525e+00 3.6935621488926507e-01 -8.8337234537905340e-01 + 4.7273003651544911e+00 1.9216095499723607e-01 -1.0467468349581865e+00 + 4.9915753902557487e+00 -8.7580540780018978e-03 -1.2277193578358958e+00 + 5.2355130780265240e+00 -3.3709554879119041e-01 -1.4174974078621609e+00 + 5.4420931270104891e+00 -8.4596405493251892e-01 -1.6354742933574420e+00 + 5.5867526909620731e+00 -1.4813262948445827e+00 -1.9692644055083071e+00 + 5.6616388738963259e+00 -2.1205137122841400e+00 -2.5060668640300796e+00 + 5.6793967955434397e+00 -2.6379003621246730e+00 -3.2793840778259931e+00 + 5.6897878309115342e+00 -3.0360719522836037e+00 -4.2644110793099914e+00 + 5.7675360165894727e+00 -3.4227013968236433e+00 -5.3783972680457079e+00 + 5.9180797183947433e+00 -3.8460965017368105e+00 -6.4963750017086408e+00 + id 11269 + loc 8.1789022684097290e-01 1.6511510312557220e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5823000152790133e-01:4.5822541922788607e-01:6.4009492771731269e-01:3.8724359025198796e-01:1.1804109071415640e+00:2.8130450818495695e-01:2.0705433460796714e+00:2.8395975697548242e-01:3.0463911238528518e+00:3.1355297747629290e-01:3.9828353931652480e+00 + CVs 20 + 3.2641270598543493e-03 3.5285087266025622e-01 2.8952547311360355e-01 + 1.0873901884448367e-03 7.2572666318465873e-01 5.5031621462881442e-01 + -3.1516808248826411e-02 1.0991074315330527e+00 8.3574471398590855e-01 + -1.2005455223598793e-01 1.4477179806088063e+00 1.1729132250385128e+00 + -2.8334652001823779e-01 1.7442839988039265e+00 1.5627193898811602e+00 + -5.2888192179762117e-01 1.9634838900735219e+00 1.9863492325221108e+00 + -8.5224853722848048e-01 2.0876616209792873e+00 2.4110922525161693e+00 + -1.2371588138607503e+00 2.1128464423169291e+00 2.8003560550256070e+00 + -1.6573528854708099e+00 2.0504823219641941e+00 3.1296167732295483e+00 + -2.0847058274837478e+00 1.9197698291935832e+00 3.3991449988766100e+00 + -2.4986175487880788e+00 1.7351316786834170e+00 3.6290484537149608e+00 + -2.8868465234089840e+00 1.4998089995261559e+00 3.8419078492705698e+00 + -3.2396564171195243e+00 1.2108817903787985e+00 4.0554970354593456e+00 + -3.5454431284523968e+00 8.6557348737209283e-01 4.2885537695178009e+00 + -3.7854337632391188e+00 4.5117335041418083e-01 4.5722730117524035e+00 + -3.9206565909101827e+00 -2.3941457201163807e-02 4.9281840667852155e+00 + -3.9288920553140692e+00 -4.7243982801904005e-01 5.3275485436636263e+00 + -3.8510765596533698e+00 -8.1298308910792350e-01 5.7176033964318336e+00 + -3.8198894070695264e+00 -9.1742373750241168e-01 5.9389110382650614e+00 + id 11270 + loc 4.6293541789054871e-01 5.8480817079544067e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0782047001221217e-01:3.7035772719321225e-01:5.3296567367120151e-01:2.7501558491905514e-01:1.1385192400901065e+00:2.7262746855376718e-01:2.0485838762223278e+00:4.0781639180751206e-01:3.0005209000645787e+00:3.2244418463895719e-01:3.6264039348043808e+00 + CVs 20 + -3.3373883954594313e-01 3.4285459089294951e-01 2.2228903210086226e-01 + -6.0526630663386105e-01 6.4990413918905632e-01 3.9319219704503477e-01 + -8.2818776013118078e-01 9.5357748892984573e-01 5.6989739758544622e-01 + -1.0339119966306307e+00 1.2606197580192573e+00 7.2917840167672177e-01 + -1.2516644015655884e+00 1.5492679802592744e+00 8.0355180742898646e-01 + -1.4904676464279021e+00 1.7987407474106663e+00 7.6478202588555722e-01 + -1.7259401994022137e+00 1.9863869986072782e+00 6.2213424421915564e-01 + -1.8989038767114503e+00 2.0952334901884617e+00 4.1180467492275219e-01 + -1.9513727039042683e+00 2.1362957438083323e+00 1.9831477020217614e-01 + -1.8984806542175479e+00 2.1420605033085716e+00 2.8079197690152657e-02 + -1.7923791855934934e+00 2.1187399145521031e+00 -1.2703532848102705e-01 + -1.6387164591732049e+00 2.0457568919836207e+00 -2.7644967708237300e-01 + -1.4369061739888920e+00 1.9045361289791067e+00 -3.9427810934864216e-01 + -1.2097895628190145e+00 1.6956651263897073e+00 -4.8653815597014294e-01 + -9.9618253387101086e-01 1.4354821758809857e+00 -6.1420972674988461e-01 + -8.5318608568755694e-01 1.1848016737534453e+00 -8.3516528884717489e-01 + -8.3985323067173190e-01 1.0740387241001059e+00 -1.1349356351270756e+00 + -9.5613767599310706e-01 1.2088815887496442e+00 -1.3497341550489361e+00 + -1.0147226570741652e+00 1.2083555427635795e+00 -1.5832745161666204e+00 + id 11271 + loc 2.7293118834495544e-01 6.2223482131958008e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5859485752593138e-01:3.7327057348823739e-01:8.1286601661230362e-02:4.5859027157735616e-01:9.8738541389450774e-01:3.4780187087076614e-01:1.3121441872288881e+00:4.1666665862223068e-01:1.9859422083733749e+00:4.0683855683171527e-01:2.7358314616964554e+00:3.2461004573920504e-01:3.2299607493520681e+00 + CVs 20 + 1.6350797467921052e-01 2.8283598883120231e-01 -1.1004290675612202e-01 + 3.1547545938253735e-01 5.8087107555309658e-01 -2.2944898554587895e-01 + 4.8584223052390618e-01 8.6750582216819194e-01 -3.7021889114921958e-01 + 6.8553033930659502e-01 1.1206345954595505e+00 -5.3818836712641904e-01 + 9.0804393937245131e-01 1.3252698961651315e+00 -7.3161739876160481e-01 + 1.1451951951806782e+00 1.4681889485999773e+00 -9.4084057162234402e-01 + 1.3889602094438260e+00 1.5435502493751483e+00 -1.1531832361945757e+00 + 1.6305208648124250e+00 1.5546962761790259e+00 -1.3588333894354276e+00 + 1.8610772513402163e+00 1.5118237663010061e+00 -1.5533476533641417e+00 + 2.0760109377701079e+00 1.4269335860857322e+00 -1.7390298342925885e+00 + 2.2717711146311199e+00 1.3120884771492987e+00 -1.9209903165358775e+00 + 2.4417122157793405e+00 1.1827118708283284e+00 -2.1017521216607289e+00 + 2.5831094258631913e+00 1.0556689492066027e+00 -2.2791523962762081e+00 + 2.7052254355559548e+00 9.4065945729585132e-01 -2.4449091717525238e+00 + 2.8314849428453632e+00 8.3886212419794592e-01 -2.5813923203024300e+00 + 2.9825305572618257e+00 7.2220369360579895e-01 -2.6696066711765960e+00 + 3.1080733542207377e+00 5.2545740362268978e-01 -2.7059508275000876e+00 + 3.1191138173179436e+00 2.7062213325647777e-01 -2.7218444624022640e+00 + 2.9693244487762729e+00 3.7828322653290947e-01 -2.8551274000027873e+00 + id 11272 + loc 9.7540110349655151e-01 3.5624668002128601e-01 410 + blend 0.0000000000000000e+00 + interp 4.8325297742800122e-01:3.2448449367045834e-01:2.6614207183273675e-02:3.6820373988203819e-01:6.5546794297924116e-01:2.8886506653341343e-01:1.0508256165028844e+00:3.9411415013351442e-01:1.7031047982549250e+00:3.5008131127393349e-01:2.3616447686879072e+00:4.8324814489822698e-01:2.9997860745830613e+00:4.6920762848724690e-01:3.6694920931918267e+00 + CVs 20 + -4.0660191357291897e-01 3.0908405379882609e-01 1.9287895365581706e-01 + -7.4329340411859857e-01 6.0471118728499540e-01 3.6484928097000319e-01 + -1.0666874966861992e+00 9.1651332674503605e-01 5.2773357442993674e-01 + -1.4022105191932295e+00 1.2462694454625725e+00 7.0209840168947324e-01 + -1.7553658906824148e+00 1.5734651617734590e+00 9.1549275339457603e-01 + -2.1293046678044427e+00 1.8727957369382191e+00 1.1971746123531612e+00 + -2.5244932403445506e+00 2.1147563766063104e+00 1.5706433046131922e+00 + -2.9410651032402408e+00 2.2626838075147484e+00 2.0416605820448104e+00 + -3.3857261527259879e+00 2.2742041070075207e+00 2.5900614660462109e+00 + -3.8624722190988972e+00 2.1049955947687256e+00 3.1710454477951675e+00 + -4.3345720013425062e+00 1.7485784010258856e+00 3.6884217554062770e+00 + -4.7311224286175300e+00 1.3043236976285459e+00 4.0354524051983915e+00 + -5.0209016870068144e+00 8.8230926320890379e-01 4.2112627268652547e+00 + -5.2110063509129754e+00 4.9984412441186610e-01 4.2847419946479395e+00 + -5.3144378008686086e+00 1.1213597788777419e-01 4.3182158306113116e+00 + -5.3483448101980002e+00 -3.3548893065725593e-01 4.3839460107997166e+00 + -5.3327940956116944e+00 -8.5810124722304382e-01 4.5265788867000110e+00 + -5.3065293242057416e+00 -1.4489789709595802e+00 4.7215370285076244e+00 + -5.3544300107675440e+00 -2.0921010831221469e+00 4.9185693643982020e+00 + id 11273 + loc 7.9099977016448975e-01 8.7534785270690918e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6890479663028573e-01:4.6890010758231943e-01:1.9247769367652456e-01:4.1181538403233842e-01:7.9044617170992693e-01:3.2119964589892303e-01:1.0926000297372174e+00:3.1506085929094702e-01:1.9946354475132231e+00:3.0506737365974607e-01:2.7606990742949371e+00:3.9012068165832919e-01:3.1233863122641070e+00:3.9214085400705956e-01:3.9829834407364584e+00 + CVs 20 + -2.5979244925508244e-01 3.0028975283751286e-01 9.6885706351267087e-02 + -4.7877793897190640e-01 5.7406761004800766e-01 2.0265949118212881e-01 + -6.5846089692946519e-01 8.3644658075783962e-01 3.3664992739451111e-01 + -8.2590343316111547e-01 1.0857046910659616e+00 4.6780713973396665e-01 + -1.0127354807294406e+00 1.3053774301447776e+00 5.4229021475783101e-01 + -1.2267914215356415e+00 1.4754829753922214e+00 5.3730352587525720e-01 + -1.4527252327900690e+00 1.5797597954831171e+00 4.6650607555509316e-01 + -1.6747299727314060e+00 1.6147942699495637e+00 3.5113699229065676e-01 + -1.8704657742862449e+00 1.5859251547302622e+00 1.9978245715988741e-01 + -2.0011431898845840e+00 1.5031750489367737e+00 2.6471897358500751e-02 + -2.0626703880318171e+00 1.3958559055990043e+00 -1.3467957409045772e-01 + -2.0958761430858917e+00 1.3065691882772494e+00 -2.6699516731082973e-01 + -2.1054409736244954e+00 1.2435077196191329e+00 -3.6537674321088753e-01 + -2.0219541121502482e+00 1.1528750159216978e+00 -3.6209441209702886e-01 + -1.7866407995412104e+00 9.5138903265150376e-01 -2.1006058712685838e-01 + -1.3826165146251235e+00 5.0233270899313764e-01 -3.9222894584144630e-02 + -8.4412505885421718e-01 -3.0771049997319727e-01 -2.1119956055261005e-01 + -4.6205930356766939e-01 -9.8044269947330853e-01 -9.1785994442468799e-01 + -4.0564331898138917e-01 -1.0000766699626289e+00 -1.0831698230569966e+00 + id 11274 + loc 9.9648362398147583e-01 3.8210994005203247e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7132573098949176e-01:3.1847222869119834e-01:1.4261805834824282e-03:2.0128608538275164e-01:8.9008739795249148e-01:2.7318107342349540e-01:1.5921014551144950e+00:2.8218042797717602e-01:2.0099308849423325e+00:4.7132101773218188e-01:2.8992460691301063e+00:3.2160562551969679e-01:3.1388829696311467e+00 + CVs 20 + -1.0416387388510240e-01 3.1389577230081267e-01 1.0762111540785373e-01 + -1.6593669845708325e-01 6.7759253912409123e-01 2.3240962173663471e-01 + -2.2090724165791903e-01 1.0704675327517392e+00 3.5458026627421146e-01 + -2.9327475075170373e-01 1.4793052609153790e+00 4.8566963754838399e-01 + -4.0586125639713855e-01 1.8922744189857346e+00 6.4973252275693016e-01 + -5.8763223756789018e-01 2.2824166886622304e+00 8.5905451930266441e-01 + -8.7334540286553486e-01 2.6001721210361182e+00 1.1050204126644525e+00 + -1.2859470661038928e+00 2.7685039998840235e+00 1.3418196752503890e+00 + -1.7819443470500611e+00 2.7343965174708851e+00 1.4959078254341975e+00 + -2.2871142691172119e+00 2.5348039987962778e+00 1.5479756914580873e+00 + -2.7753948566865319e+00 2.1942601412557599e+00 1.5340471873192214e+00 + -3.1979698479990519e+00 1.6706840958048907e+00 1.4908872005328118e+00 + -3.4507083793942153e+00 9.7574978930073286e-01 1.4308009555889643e+00 + -3.5688219577912288e+00 3.0565072813166805e-01 1.3154404978989234e+00 + -3.7818809295298430e+00 -1.6474596810383479e-01 1.1124957059425158e+00 + -4.2120956260716733e+00 -3.5973467949896731e-01 8.7784344022373806e-01 + -4.7951927377065990e+00 -2.3324900788140646e-01 7.2759607514247127e-01 + -5.3570855986106949e+00 4.4588169335100680e-02 7.0253172163250943e-01 + -5.8746184419702834e+00 -1.7980611241124445e-01 6.1507304343429847e-01 + id 11275 + loc 8.8321614265441895e-01 6.5653109550476074e-01 410 + blend 0.0000000000000000e+00 + interp 4.3020523596987104e-01:3.0672584484093340e-01:3.9288217449803975e-01:2.9437957444639329e-01:1.2888425256556055e+00:4.3020093391751135e-01:2.0424595178806397e+00:2.5905176627239418e-01:2.7249816104729181e+00:2.9515817286157514e-01:3.4955881900722474e+00 + CVs 20 + 4.8284102408473395e-01 2.7251338164930045e-01 -1.5550891575429623e-01 + 8.8338107732539295e-01 4.9013407127435743e-01 -2.9986219660901042e-01 + 1.2878992737216493e+00 6.9684261304502715e-01 -4.3418233711880538e-01 + 1.7283232611606896e+00 8.9527234501276931e-01 -5.6494904778816513e-01 + 2.1959493835530153e+00 1.0581285968487337e+00 -7.0909366515240413e-01 + 2.6776717547550941e+00 1.1581674788382950e+00 -8.8623838748731021e-01 + 3.1549001205058795e+00 1.1754888036763529e+00 -1.1063371145788587e+00 + 3.6061309262875372e+00 1.1030627633009786e+00 -1.3572686461383880e+00 + 4.0203055061679418e+00 9.5057842584939567e-01 -1.6077671471028205e+00 + 4.3986051831190558e+00 7.3819317136351525e-01 -1.8278789829557074e+00 + 4.7496774282207319e+00 4.6840762943560099e-01 -2.0008396188868089e+00 + 5.0898345869439137e+00 9.9470771323555418e-02 -2.1200661218578190e+00 + 5.4340747907868341e+00 -3.9866439849748092e-01 -2.2073949125838159e+00 + 5.7935464962072913e+00 -9.9088341531243973e-01 -2.3284984056613922e+00 + 6.1665671460212490e+00 -1.5891646873373664e+00 -2.5446607042248361e+00 + 6.5322733460103262e+00 -2.0833809714489009e+00 -2.8593175934964066e+00 + 6.8693685065707708e+00 -2.4256527990463836e+00 -3.2263897675355615e+00 + 7.1871684770993376e+00 -2.6733417552098393e+00 -3.6215762471024848e+00 + 7.5542053291619231e+00 -2.9479964947000257e+00 -4.0929697513983614e+00 + id 11276 + loc 7.0187473297119141e-01 4.9079671502113342e-01 1070 + blend 0.0000000000000000e+00 + interp 4.5254379744429585e-01:3.1578979826729803e-01:1.0982066090443010e-01:3.3638331997431359e-01:1.0279216023615538e+00:3.9163457221332088e-01:1.7657683827007120e+00:3.4919703091841509e-01:2.6952043007204924e+00:4.5253927200632144e-01:3.0441712237661411e+00:4.2307225427340261e-01:3.6770486768607293e+00 + CVs 20 + 3.5993529570701360e-01 3.0037371219568720e-01 -1.0895502837879423e-01 + 6.4992184571807676e-01 5.4491321638866086e-01 -1.8440485875126872e-01 + 8.9599162057080473e-01 7.6634970493615884e-01 -2.6147021313727981e-01 + 1.1111621747709814e+00 9.7515298309752507e-01 -3.4451381046084206e-01 + 1.3048110672855151e+00 1.1726099546017874e+00 -4.0800917993943819e-01 + 1.4899220176040813e+00 1.3611345071365926e+00 -4.3244452411979339e-01 + 1.6726032047375536e+00 1.5365425846069007e+00 -4.2471406976693693e-01 + 1.8642276544875886e+00 1.6927375758913401e+00 -4.0579294374675356e-01 + 2.0794633083202965e+00 1.8257010402338336e+00 -3.7686253125881541e-01 + 2.3007807177897748e+00 1.9163755369665780e+00 -2.9663926644116367e-01 + 2.4730550449198874e+00 1.9464589381954931e+00 -1.4506362960015617e-01 + 2.5822388776401102e+00 1.9345241853114339e+00 5.5417199648479798e-02 + 2.6206630838655283e+00 1.8815504274035955e+00 2.7259616794923702e-01 + 2.5416276966006945e+00 1.7396628266673528e+00 4.1327254691797743e-01 + 2.3246496810882200e+00 1.4721997132205678e+00 4.1576523622838901e-01 + 2.0025400249697447e+00 1.0533041421336222e+00 3.9516476009522483e-01 + 1.6372545056890699e+00 4.8553021886491021e-01 5.6688641648074611e-01 + 1.3662647660833269e+00 2.9834930744394306e-03 1.1092350087356015e+00 + 1.3207516625085223e+00 -2.4911401366944474e-02 1.4399517456285083e+00 + id 11277 + loc 9.3766796588897705e-01 7.3640143871307373e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9550588450874657e-01:3.1687000779327318e-01:4.3536676780551820e-01:3.8600289255393838e-01:1.1120483301100139e+00:3.9446383340912561e-01:1.9788847077502918e+00:2.9887784638651277e-01:2.2763683243757802e+00:2.6569936233803709e-01:3.0108802132488983e+00:3.9550192944990148e-01:3.9494755865358671e+00 + CVs 20 + -2.9357576912245192e-01 3.9403484052964155e-01 -5.2790685905962642e-02 + -5.2013728167654705e-01 7.8074503269753981e-01 -9.6577839269871513e-02 + -7.0395623752361880e-01 1.1565844074366254e+00 -1.3685392087769810e-01 + -8.7720608262702227e-01 1.4876010440369263e+00 -2.2623369741017940e-01 + -1.0590674032059726e+00 1.7382105312955849e+00 -3.9559935690164605e-01 + -1.2417082752788220e+00 1.8870648532449039e+00 -6.3096576714579833e-01 + -1.3677347532638053e+00 1.9139820499573403e+00 -8.8751062986325124e-01 + -1.3586056303586873e+00 1.8429246314112970e+00 -1.0820401925114267e+00 + -1.2296752920810259e+00 1.7558990372481835e+00 -1.1443299888602945e+00 + -1.0895299335374879e+00 1.6926039413121239e+00 -1.1263388646015591e+00 + -9.7285117744347394e-01 1.6302795203658311e+00 -1.0905376626095951e+00 + -8.7947789150973066e-01 1.5726180800827816e+00 -1.0280633826389163e+00 + -7.9677988442339598e-01 1.5015084502159159e+00 -9.6593579681894770e-01 + -6.4771397818505805e-01 1.3177414874284019e+00 -9.5114023735849762e-01 + -3.9924854282831868e-01 9.6304423680071305e-01 -1.0229011754367252e+00 + -1.2044247629436398e-01 5.0213182770893150e-01 -1.2864827850514355e+00 + 8.1553168144789662e-02 1.1915425774363131e-01 -1.8415563905576890e+00 + 1.2875903537784611e-01 2.8547780972980608e-03 -2.4603020104754849e+00 + 1.2043906309706220e-01 -4.1961659839021559e-02 -2.7595297751555492e+00 + id 11278 + loc 7.7397656440734863e-01 1.9632850587368011e-01 410 + blend 0.0000000000000000e+00 + interp 5.1669072909456326e-01:3.9065376607778340e-01:1.4845942270228907e-01:4.4281676855654811e-01:9.5203689779007827e-01:5.1668556218727235e-01:1.2671238592500202e+00:3.4396314299858499e-01:1.8891836652701013e+00:4.0139613466626273e-01:2.5619782019590165e+00:3.7154647363767385e-01:3.0104436195207636e+00:4.1759984292855562e-01:3.8919265949167459e+00 + CVs 20 + -3.3113690338315904e-01 1.7034469788831699e-01 1.6795423310828142e-01 + -6.3744032946591378e-01 3.2113196725839194e-01 3.2503814306164036e-01 + -9.4822676796516470e-01 4.7281134618004972e-01 4.6361951989317585e-01 + -1.2639072298100189e+00 6.1759614859981049e-01 5.7840787629415213e-01 + -1.5728515769837768e+00 7.3572310469564961e-01 6.7922761000513088e-01 + -1.8706767318113782e+00 8.1563681303886371e-01 7.8658320307185747e-01 + -2.1436115785907557e+00 8.5514119382301090e-01 9.1718959123844201e-01 + -2.3689944314649729e+00 8.6049149522304202e-01 1.0684216497887431e+00 + -2.5393060532252760e+00 8.4937451711869971e-01 1.2223931091494094e+00 + -2.6656149698617329e+00 8.4809677564105668e-01 1.3669387909095816e+00 + -2.7822744820550138e+00 8.3595637776011589e-01 1.5109051115271208e+00 + -2.9332431856505261e+00 6.9543419755691138e-01 1.6405187071710448e+00 + -3.1260812683164056e+00 3.4916203482131847e-01 1.7320466947839783e+00 + -3.3505881876011374e+00 -1.7321292073967398e-01 1.8393829894940117e+00 + -3.5941909327833854e+00 -7.8356205146179003e-01 2.0568387200243978e+00 + -3.8337033806414214e+00 -1.3552618963007537e+00 2.4432338088616214e+00 + -4.0605594760001544e+00 -1.8097458437350729e+00 2.9854299492550851e+00 + -4.3193205145132492e+00 -2.1790045916630127e+00 3.6225997785044242e+00 + -4.6690501208594268e+00 -2.5050853811818659e+00 4.2629424739078106e+00 + id 11279 + loc 6.3450592756271362e-01 7.0521062612533569e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1199256573531404e-01:4.8490679204173825e-01:2.0367035841185155e-01:3.5324612869455663e-01:8.6187132398314004e-01:4.7555311740049699e-01:1.1530229252326560e+00:3.3140467557543640e-01:1.9423869933532656e+00:5.1004990169866937e-01:2.3798575049055906e+00:3.2437918956351602e-01:3.0104999290846810e+00:5.1198744580965672e-01:3.4558071501570558e+00:4.9970336893673539e-01:3.9793685673856185e+00 + CVs 20 + 3.9879645356399984e-02 3.9650540724989836e-01 -1.7407558711792376e-01 + 1.1783865920526954e-01 7.8383894409079424e-01 -3.7100133544946240e-01 + 2.0352835461636365e-01 1.1596249434115842e+00 -6.0393785415424239e-01 + 2.8030863726267852e-01 1.5085695142080180e+00 -8.8769222993908581e-01 + 3.4705843206296816e-01 1.8101271523359519e+00 -1.2285501869190685e+00 + 4.2001563233036115e-01 2.0486399366786401e+00 -1.6164620117761164e+00 + 5.2395139608827390e-01 2.2140993929675084e+00 -2.0298456399136118e+00 + 6.7306630563595737e-01 2.2990648214463505e+00 -2.4419250064818407e+00 + 8.6406943231540512e-01 2.2954075460641263e+00 -2.8255604478630434e+00 + 1.0719761372299219e+00 2.1946722296472663e+00 -3.1544569927014763e+00 + 1.2426470429566958e+00 1.9986641975888335e+00 -3.4019308727360937e+00 + 1.2997726130580818e+00 1.7439607875641752e+00 -3.5359297827621630e+00 + 1.2253975011412468e+00 1.5212561499089194e+00 -3.5507714516189033e+00 + 1.1082064749067697e+00 1.3506341936269470e+00 -3.5148110892113782e+00 + 9.8538419454076531e-01 1.1917363155087686e+00 -3.4665336747041562e+00 + 8.7335044570237352e-01 1.1230569259128536e+00 -3.4015451663874208e+00 + 9.0307133361298852e-01 1.2418939660957067e+00 -3.3365902520571820e+00 + 1.0215092340648422e+00 1.3025134772147349e+00 -3.2781570398375734e+00 + 7.2145031882311095e-01 1.2834681886407611e+00 -3.1970846632024643e+00 + id 11280 + loc 5.1258808374404907e-01 7.5637429952621460e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9756838495028574e-01:3.1478906443189958e-01:1.6707749626438728e-02:3.9324201040410789e-01:7.5364603761145177e-01:3.9756440926643627e-01:1.1976422430566636e+00:3.3594123020758776e-01:1.9251523610467969e+00:3.9680160728717273e-01:2.7726686643103213e+00:3.4298200178131100e-01:3.4817741699142148e+00 + CVs 20 + -2.7022130866426158e-01 4.8272593445360690e-01 1.7114289352803069e-01 + -4.6474025262028407e-01 9.1185216559429738e-01 3.2691173712501553e-01 + -5.9905327049371437e-01 1.3113499010180363e+00 4.9421385629034953e-01 + -7.3339119644625927e-01 1.6932557471424801e+00 6.2262832964114867e-01 + -9.0851135883319334e-01 2.0416416927054488e+00 6.4953166531328910e-01 + -1.1210692852642330e+00 2.3351041268189388e+00 5.6495448412418137e-01 + -1.3316913265755708e+00 2.5539378235371317e+00 3.8825363112862599e-01 + -1.4674120795769745e+00 2.6885202299896038e+00 1.6245304381040238e-01 + -1.4826869393744979e+00 2.7643016071276083e+00 -3.9344098110410286e-02 + -1.4323116517586112e+00 2.8206053152965005e+00 -1.9597022332451375e-01 + -1.3632803580514428e+00 2.8493208941332631e+00 -3.7759428138116258e-01 + -1.2473946048803506e+00 2.8160271110449706e+00 -6.1347542144269762e-01 + -1.0541099980562563e+00 2.6937472363101889e+00 -8.7537773633104066e-01 + -8.2191645880510233e-01 2.5140209197405285e+00 -1.0939563892390587e+00 + -6.4047959607487726e-01 2.3625452201408845e+00 -1.2337934092981093e+00 + -5.5491605743118155e-01 2.3056588015222674e+00 -1.2686718932758050e+00 + -5.5225690679390937e-01 2.3555136595284263e+00 -1.0793475053612895e+00 + -4.9099069761021319e-01 2.2997240720175163e+00 -5.0152884169047907e-01 + -5.3966439223768092e-01 2.3414849993315703e+00 -6.2831027997997579e-01 + id 11281 + loc 6.1936122365295887e-03 7.9560768604278564e-01 410 + blend 0.0000000000000000e+00 + interp 4.5782818941649633e-01:4.5782361113460218e-01:2.3862113697146170e-01:2.6924615123154244e-01:1.1274227563471622e+00:3.3559131587819568e-01:2.2849987810716987e+00:3.9261299580781733e-01:3.0642189189131996e+00:2.7725364723190454e-01:3.6211446393032012e+00:3.9875388962551550e-01:3.9902919741720435e+00 + CVs 20 + 3.4498710896352247e-01 1.6405353742312573e-01 -6.0152203244412311e-02 + 5.9982196833383561e-01 2.6446747800888593e-01 -1.4436847254459265e-01 + 8.3020900421603794e-01 3.4050568355920718e-01 -2.3998830656926479e-01 + 1.0699033166049501e+00 4.1232298834228315e-01 -3.4019741313653162e-01 + 1.3207052180336278e+00 4.7671307338506053e-01 -4.4379585222866297e-01 + 1.5849373540333507e+00 5.3084846515043749e-01 -5.4780618835618400e-01 + 1.8634628232404484e+00 5.7317316907658322e-01 -6.4529610615715449e-01 + 2.1529981621361047e+00 6.0242646105965147e-01 -7.2845912578672334e-01 + 2.4486660380903320e+00 6.1688148507553686e-01 -7.9320869838784791e-01 + 2.7432764305538235e+00 6.1598729433243737e-01 -8.3759290512152051e-01 + 3.0082854162276975e+00 6.0829951991085407e-01 -8.5673345632647346e-01 + 3.1803389398001549e+00 6.1917164727450857e-01 -8.4394664944369269e-01 + 3.2244522503037940e+00 6.7466225283354930e-01 -7.8654807112033098e-01 + 3.2081296699491939e+00 7.5825858926761247e-01 -6.8135826815715672e-01 + 3.2042040077910832e+00 8.3172530533709421e-01 -5.5539815406284065e-01 + 3.2130521264340048e+00 8.9277759411334567e-01 -4.1015923051066472e-01 + 3.2231818779347128e+00 9.4950929456240496e-01 -2.2427167459093822e-01 + 3.2411461812865792e+00 9.8903087127188238e-01 -1.1072018684122220e-02 + 3.2439750177120485e+00 8.8516577293267429e-01 -6.3185700064389949e-02 + id 11282 + loc 4.3267992138862610e-01 8.4021168947219849e-01 410 + blend 0.0000000000000000e+00 + interp 4.5754890457718045e-01:3.5529153930448720e-01:2.6541917384551095e-01:3.1561168551235541e-01:1.0131026198293296e+00:4.5754432908813469e-01:1.6617403310309049e+00:3.3379518376121187e-01:2.2365607246367714e+00:3.5294266169275190e-01:3.0117501367071791e+00:3.9143407808753655e-01:3.8360689467685036e+00 + CVs 20 + 3.3618718512917256e-01 1.8255398392613351e-01 -1.2080410396369393e-01 + 5.8190135240575291e-01 3.1847457928060968e-01 -2.2932136879875159e-01 + 8.0184268098241862e-01 4.3260020607798133e-01 -3.4018198725618343e-01 + 1.0332884223307834e+00 5.4205255072420555e-01 -4.5912632124295716e-01 + 1.2773600730957555e+00 6.4599259099288442e-01 -5.8715097421031270e-01 + 1.5337292421466759e+00 7.4284495447997734e-01 -7.2543708261717388e-01 + 1.8042398946396272e+00 8.3200342336924404e-01 -8.7069601589375634e-01 + 2.0933240782736320e+00 9.1325636367769802e-01 -1.0137501959558919e+00 + 2.4041657980806113e+00 9.8480391253783250e-01 -1.1423083990903959e+00 + 2.7355439930732586e+00 1.0441063445061336e+00 -1.2429809787666473e+00 + 3.0850361443991257e+00 1.0925813315380553e+00 -1.3000483619837337e+00 + 3.4548198932965564e+00 1.1318578445179137e+00 -1.2998259654332731e+00 + 3.8492023164481282e+00 1.1454834796822415e+00 -1.2553396675868145e+00 + 4.2635750735803333e+00 1.1014361457289934e+00 -1.2159235233677999e+00 + 4.6811834796407297e+00 9.8379140085551264e-01 -1.2251944418568514e+00 + 5.0787986016218536e+00 7.9985087050460191e-01 -1.2987985954885770e+00 + 5.4291915713821091e+00 5.7098791683972339e-01 -1.4391096727011417e+00 + 5.7136832381694855e+00 3.2478269602831888e-01 -1.6387796960297285e+00 + 5.9703591817590969e+00 9.5246198888078837e-02 -1.8284205210499040e+00 + id 11283 + loc 6.7631584405899048e-01 9.5125325024127960e-02 1070 + blend 0.0000000000000000e+00 + interp 4.0446620885016793e-01:4.0446216418807945e-01:3.7855624589658710e-01:2.7343799107682804e-01:9.8236632488013431e-01:3.4970190850228006e-01:1.9766803188776212e+00:3.3975636670369264e-01:2.7041557999964079e+00:3.1473573403506094e-01:3.3500196025074378e+00:3.8461156584635203e-01:3.9944645977898041e+00 + CVs 20 + 2.2374348862532628e-01 3.4230601015218715e-01 -1.0932225229579362e-01 + 3.9329413912710620e-01 6.1004817151224344e-01 -1.3316321156974315e-01 + 5.3038186342524196e-01 8.3326634334286764e-01 -1.1500616097935462e-01 + 6.3868805308990573e-01 1.0196617791851943e+00 -8.7195948190910477e-02 + 7.2594009203412901e-01 1.1753606682671536e+00 -2.7727421426902543e-02 + 8.0614874308615092e-01 1.3428337214636921e+00 9.6222257622407659e-02 + 8.8549555057918594e-01 1.5909698556809264e+00 2.4107478623678924e-01 + 9.5962856535363206e-01 1.9320676342894703e+00 2.9714688628925057e-01 + 1.0350621077456899e+00 2.3278045811237602e+00 2.1197714622835062e-01 + 1.1378803766023939e+00 2.7433827757735569e+00 -2.1343874564482723e-02 + 1.3096038176146771e+00 3.1132576142222996e+00 -3.9097126603032373e-01 + 1.5667686488986490e+00 3.3306170881983364e+00 -8.2267785924549286e-01 + 1.8718514362664669e+00 3.3612707261622279e+00 -1.2235322625286209e+00 + 2.1734329873858722e+00 3.2446515413418258e+00 -1.5561752447071087e+00 + 2.4334376234568995e+00 3.0273749528013698e+00 -1.8110248962867825e+00 + 2.6597260753228040e+00 2.7629529124568402e+00 -1.9990891456027695e+00 + 2.8983683872036146e+00 2.4953316505240108e+00 -2.1503618586826265e+00 + 3.1642163912694272e+00 2.2187907550734347e+00 -2.2771532788222606e+00 + 3.1298844095692013e+00 2.0161984936422712e+00 -2.1112452741013987e+00 + id 11284 + loc 1.4282165095210075e-02 5.7948648929595947e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5113208919273867e-01:3.3381864829388619e-01:1.4655257368196206e-01:2.7831512159863986e-01:8.8015672749123119e-01:3.9185078250583361e-01:1.7064908961075105e+00:3.9088399325325296e-01:2.2617689155788296e+00:4.5112757787184676e-01:2.9250201197095569e+00:3.1490286254660643e-01:3.8456542657442707e+00 + CVs 20 + 1.5009928327669511e-01 2.9376160924126932e-01 -3.2665469432586552e-02 + 2.7300862621535626e-01 5.7903677753940630e-01 -1.0894690411511077e-01 + 3.9124561580705186e-01 8.4136790750712487e-01 -2.1365181395445579e-01 + 5.1093404734763370e-01 1.0712732647925329e+00 -3.3695377657257986e-01 + 6.2639825882619538e-01 1.2668070394814310e+00 -4.7513618806722169e-01 + 7.3425313194284059e-01 1.4307096634968333e+00 -6.2711734850984080e-01 + 8.3663632400226962e-01 1.5664745899842138e+00 -7.9877604142397129e-01 + 9.3927047428627208e-01 1.6729277857916025e+00 -9.9940781886558661e-01 + 1.0469596886883483e+00 1.7432573825714166e+00 -1.2324816304505282e+00 + 1.1600824648398511e+00 1.7683971391485742e+00 -1.4899528071683894e+00 + 1.2704374072138256e+00 1.7477079022978510e+00 -1.7564738708190120e+00 + 1.3650490310035899e+00 1.6953930778188375e+00 -2.0166742153779000e+00 + 1.4338780404260287e+00 1.6391978250750960e+00 -2.2498359626154305e+00 + 1.4784321639273179e+00 1.6208006814109188e+00 -2.4220490051344568e+00 + 1.5376380728830221e+00 1.7030630407887695e+00 -2.4817385872303195e+00 + 1.6986610582130770e+00 1.8896746422244202e+00 -2.3802030016668416e+00 + 1.9844533673194427e+00 2.0304555453181314e+00 -2.1137992754766630e+00 + 2.2137154471015257e+00 2.0053330361621224e+00 -1.8183724965010049e+00 + 1.8541921272430999e+00 2.1123117005929317e+00 -1.9923408339365862e+00 + id 11285 + loc 7.3946279287338257e-01 4.9332624673843384e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5683737186235163e-01:4.5683280348863303e-01:4.9906043369236330e-01:3.3117541671375339e-01:1.0007665886566368e+00:3.7399300678665193e-01:2.0000761509881588e+00:3.6123262346580504e-01:2.8658704255901899e+00:4.4021417766850701e-01:3.4576505730357918e+00:2.7500849698105062e-01:3.9774992680083692e+00 + CVs 20 + -8.1876473094165542e-02 2.0143295626259919e-01 2.3619958760388676e-01 + -1.9525187718625084e-01 3.7176086388801777e-01 4.7451123123161865e-01 + -3.3847193231285866e-01 5.0721002955893679e-01 7.0645206501838798e-01 + -5.0464252441300061e-01 6.0333663206197197e-01 9.2196560207274303e-01 + -6.8457624676186757e-01 6.5830475700032842e-01 1.1110586717603121e+00 + -8.6891411524721363e-01 6.7531091444687408e-01 1.2658143921308038e+00 + -1.0529660632251272e+00 6.6304162080806817e-01 1.3805481196803200e+00 + -1.2394486512055494e+00 6.3429946033994444e-01 1.4540637618127874e+00 + -1.4324758327769460e+00 6.0164439708981177e-01 1.4982382228855271e+00 + -1.6282928037934241e+00 5.7329821620602772e-01 1.5319756595068414e+00 + -1.8209595124033220e+00 5.5430914089295746e-01 1.5673473689293640e+00 + -2.0083442087951999e+00 5.4657771364124341e-01 1.6114757127563053e+00 + -2.1919582174691947e+00 5.5386264359619131e-01 1.6656512592561286e+00 + -2.3806518344292060e+00 5.8491764808054891e-01 1.7309993244998600e+00 + -2.5837525018820271e+00 6.3972389285529419e-01 1.8228144720627970e+00 + -2.8013166636860176e+00 6.8377007469521867e-01 1.9672938069407153e+00 + -3.0091314318307569e+00 6.5607403769669881e-01 2.1671408130211876e+00 + -3.1505924633978166e+00 5.1838264257960631e-01 2.3673333173124833e+00 + -3.0614311320482366e+00 2.3074406826419730e-01 2.3505354683039230e+00 + id 11286 + loc 8.1472116708755493e-01 9.4590193033218384e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0370086506839870e-01:3.0836052413171505e-01:9.9691641829775346e-01:3.7277155762307856e-01:1.9000357233354457e+00:4.0369682805974805e-01:2.3264855437572627e+00:2.8809093786225526e-01:3.1422591483166720e+00:3.0438084623197820e-01:3.9694442405207213e+00 + CVs 20 + 1.6843720809268750e-01 3.5207102390658673e-01 -2.7383390603495739e-01 + 3.5997498472548528e-01 6.9522771848297671e-01 -5.3427241566864259e-01 + 5.5917639932015006e-01 1.0272422707405215e+00 -8.0748448525416672e-01 + 7.5286245402662555e-01 1.3437111195109446e+00 -1.1113830040982540e+00 + 9.3620609997244009e-01 1.6323759908140945e+00 -1.4506309260087487e+00 + 1.1232205618829310e+00 1.8794311346540007e+00 -1.8148991002858164e+00 + 1.3379006528465403e+00 2.0829383833306530e+00 -2.1904706051638474e+00 + 1.5967833891593410e+00 2.2486115197078220e+00 -2.5659118927418243e+00 + 1.9064965634512374e+00 2.3754843489564603e+00 -2.9334105188716686e+00 + 2.2698976810919174e+00 2.4471405458040838e+00 -3.2987684187175654e+00 + 2.6848401046642847e+00 2.4170925558670593e+00 -3.6869302254003049e+00 + 3.1212127726302255e+00 2.1844371400767697e+00 -4.1258285065811195e+00 + 3.4677651167382133e+00 1.6565913509721049e+00 -4.5761076839753665e+00 + 3.6080876207935479e+00 9.3480983256981931e-01 -4.9375253968557722e+00 + 3.5302432766896978e+00 1.6386228818939164e-01 -5.1958051559101177e+00 + 3.1213185943537516e+00 -6.2733887158517510e-01 -5.3878684100231249e+00 + 2.1339080149844158e+00 -1.1772186041524448e+00 -5.5445626514017574e+00 + 1.1462771110309731e+00 -1.1056498100058572e+00 -5.6930566348983893e+00 + 7.7654235899971913e-01 -1.0734178766782203e+00 -5.8086576577124545e+00 + id 11287 + loc 4.1206067800521851e-01 3.4933090209960938e-01 410 + blend 0.0000000000000000e+00 + interp 4.0904290226544543e-01:4.0903881183642277e-01:1.0665507158406162e-01:3.8444984471391919e-01:8.8213165311906216e-01:3.6621388703647151e-01:1.1962386944861230e+00:3.1892247691991749e-01:1.9971614528092876e+00:3.4740892549006924e-01:2.6863862710207251e+00:2.9657759218598068e-01:3.1970505193368832e+00 + CVs 20 + -1.5482040561050339e-01 1.1503013514215116e-01 -2.8618063589884241e-01 + -2.7654591744013013e-01 2.1642834204987701e-01 -5.4337543907158126e-01 + -3.8286060505818426e-01 3.0878521733456171e-01 -7.9255377592842546e-01 + -4.8084127991076120e-01 3.9581820386255745e-01 -1.0426951864127156e+00 + -5.6906072178418632e-01 4.7771638273047895e-01 -1.2913887370914172e+00 + -6.4303032987863462e-01 5.5416337057581477e-01 -1.5338543516158381e+00 + -6.9452768942534693e-01 6.2449688620845745e-01 -1.7634707954290041e+00 + -7.1542172202842502e-01 6.8746333816831917e-01 -1.9723919519043005e+00 + -7.0154800089632308e-01 7.4140251962552128e-01 -2.1516350078803792e+00 + -6.5519862426049369e-01 7.8520770442764265e-01 -2.2928721870080593e+00 + -5.8572708700960274e-01 8.2004206176685368e-01 -2.3998169883361364e+00 + -4.9956782896009105e-01 8.5064292814240938e-01 -2.5067464021486714e+00 + -3.9387670799667646e-01 8.7604011071001242e-01 -2.6611522878989957e+00 + -2.7999710913532050e-01 8.8061444894851126e-01 -2.8771018052329964e+00 + -1.8033105835023688e-01 8.5029605463170133e-01 -3.1373229115366925e+00 + -1.1087933059187061e-01 7.7810846297340053e-01 -3.4312861988146479e+00 + -8.7278141399172782e-02 6.5986769112545818e-01 -3.7509592313505089e+00 + -1.1865227651320087e-01 5.0344465806975114e-01 -4.0712674604418391e+00 + -1.2751984829094110e-01 3.9479653497494693e-01 -4.2722395028321856e+00 + id 11288 + loc 1.1579153686761856e-01 9.1325068473815918e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2366942941427255e-01:2.9153018073329329e-01:8.6901255469766236e-02:4.0676477011100781e-01:1.9997281484999645e+00:4.2366519271997843e-01:2.4113864864615131e+00:2.9537760109964972e-01:2.9638450799591869e+00:3.3835165797797506e-01:3.4472750833009131e+00 + CVs 20 + -2.6743010026169012e-01 3.6620692302482016e-01 3.6722231757753554e-01 + -4.7249748750036658e-01 6.2055906271316219e-01 6.5083395536034527e-01 + -6.2116807624718551e-01 8.2262376895177447e-01 9.3310138303270052e-01 + -7.3672259488268632e-01 1.0090167673408934e+00 1.2344524058386563e+00 + -8.5780631248255712e-01 1.1966815270728519e+00 1.5171797631364337e+00 + -1.0168262422308341e+00 1.3930593092859673e+00 1.7452766002882367e+00 + -1.2257813712427699e+00 1.5877608202014446e+00 1.9071923369236090e+00 + -1.5107324098904626e+00 1.7711170481182812e+00 2.0051028791773051e+00 + -1.8987111973202393e+00 1.9296143613992554e+00 1.9721972499198266e+00 + -2.2229709145698013e+00 2.0053731578193643e+00 1.7403577416954583e+00 + -2.3528141156507054e+00 2.0086778641790253e+00 1.4425777066978733e+00 + -2.3408960594678194e+00 1.9825784025158717e+00 1.1438318995114582e+00 + -2.2186378576777694e+00 1.9306429131494831e+00 8.8908619747372364e-01 + -2.0107200077066234e+00 1.8478912068196003e+00 7.8241663562892594e-01 + -1.7401013690267702e+00 1.7283030918911437e+00 8.7389769513346172e-01 + -1.4023037296795853e+00 1.5111702248402752e+00 1.0957551657621343e+00 + -9.7642167900363686e-01 1.0580641380495706e+00 1.3203549696469259e+00 + -4.4574520765029524e-01 2.9643375201055050e-01 1.1647885479766658e+00 + -3.7316981852280251e-01 2.9797897520979832e-01 1.0039170728694695e+00 + id 11289 + loc 2.4736027419567108e-01 6.7103427648544312e-01 410 + blend 0.0000000000000000e+00 + interp 3.7161748510510095e-01:2.8417687915079082e-01:7.7421799636815836e-02:3.2026828331929025e-01:9.9829699174968745e-01:2.9117735744304751e-01:1.9740118365257420e+00:3.3745558119819868e-01:2.9436791264128477e+00:3.7161376893024994e-01:3.6389620547197166e+00 + CVs 20 + 3.4804542057138055e-01 1.3861759341879681e-01 -1.3300408370159955e-01 + 6.4161468164079916e-01 2.4764063457135740e-01 -2.5507517660239792e-01 + 9.3212489443194180e-01 3.5067646291846083e-01 -3.6214640037166801e-01 + 1.2429692927951304e+00 4.5787689887246380e-01 -4.5168254107446154e-01 + 1.5703651015392999e+00 5.6419962403508039e-01 -5.1939800271760639e-01 + 1.9077162899125035e+00 6.6465498084590036e-01 -5.5658848843983266e-01 + 2.2457110070155362e+00 7.5479328511243815e-01 -5.5164651595986824e-01 + 2.5735738084731890e+00 8.3057088026875636e-01 -4.9660250342700563e-01 + 2.8795385309670687e+00 8.8983514402454245e-01 -3.8982559950993900e-01 + 3.1514375094514131e+00 9.3381702641939413e-01 -2.3541636905208174e-01 + 3.3921298151461632e+00 9.6108789560873609e-01 -4.7624927949011187e-02 + 3.6476636104328577e+00 9.5416393550766543e-01 1.4564232041012914e-01 + 3.9765061811234852e+00 8.8008199441896262e-01 3.0478052626353902e-01 + 4.3634109252540538e+00 7.2436827578024410e-01 3.9103405582776218e-01 + 4.7470961739753035e+00 5.0799910125157899e-01 4.0111311864702265e-01 + 5.0989288421517660e+00 2.5116432635803676e-01 3.4204923323292513e-01 + 5.4082977062138635e+00 -3.0980128642469129e-02 2.0855033217364793e-01 + 5.6623928854405152e+00 -3.1271846551547622e-01 1.1715032095797384e-02 + 5.8630277446482024e+00 -4.9335854941274615e-01 -7.6670175935990237e-02 + id 11290 + loc 1.8031007051467896e-01 2.2370871901512146e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8453508600336650e-01:3.1294112139320718e-01:3.0727560454120917e-01:3.1714181265596703e-01:9.8863684762099202e-01:3.8453124065250649e-01:1.2963472691578883e+00:2.8079357648953185e-01:1.9896336953341884e+00:2.8990592057323150e-01:2.9870521598247652e+00:3.2749159388305887e-01:3.9115496637043732e+00 + CVs 20 + -1.3476247951222556e-01 2.3978305420857510e-01 5.5548051700448929e-02 + -2.8159310786958325e-01 4.7261854112061941e-01 1.0675126280819741e-01 + -4.3661861317201500e-01 6.9936982850960749e-01 1.4651128806552827e-01 + -5.9425561389399262e-01 9.1750220181585651e-01 1.6975680108965302e-01 + -7.5620675322325936e-01 1.1261441999859731e+00 1.7339226749562592e-01 + -9.2601140846499752e-01 1.3246926185123886e+00 1.5372655588153433e-01 + -1.1096102975546296e+00 1.5094469018287175e+00 1.0473404344562648e-01 + -1.3110606883328970e+00 1.6707968301874307e+00 1.8900538765520836e-02 + -1.5226396601450463e+00 1.7967289827801616e+00 -1.0822375497206665e-01 + -1.7225076829280810e+00 1.8789745098490345e+00 -2.7562182317526129e-01 + -1.8903872231959773e+00 1.9189749419816220e+00 -4.7669171684013001e-01 + -2.0235278485222885e+00 1.9272932060611487e+00 -7.0335162149441277e-01 + -2.1282894256417930e+00 1.9156335548118917e+00 -9.5376446964741224e-01 + -2.2077834661298898e+00 1.8859786023322984e+00 -1.2372816090856276e+00 + -2.2651224049401666e+00 1.8207629833309604e+00 -1.5732963880694530e+00 + -2.3131168357934002e+00 1.6665117263433755e+00 -1.9490874476673203e+00 + -2.3518549074691144e+00 1.3594083988388821e+00 -2.2668700682802774e+00 + -2.3864990999307603e+00 9.1079153149115999e-01 -2.4260772540052042e+00 + -2.5608522454127156e+00 7.7686764282242871e-01 -2.2983320996335816e+00 + id 11291 + loc 2.7024719119071960e-01 1.4151073060929775e-02 1051 + blend 0.0000000000000000e+00 + interp 3.2128290921299524e-01:1.0113799330841389e-01:4.9010311043105692e-01:1.6235653536247760e-01:1.6529751811297331e+00:3.2127969638390314e-01:1.9980320188079914e+00:2.5750043404263928e-01:3.9309687303790111e+00 + CVs 20 + 1.2071650614254369e-01 4.5201118957422792e-01 -2.4029272704852095e-01 + 2.3400876675945334e-01 8.7584579239581362e-01 -3.7971392149705635e-01 + 3.3890995060587376e-01 1.3387304593036125e+00 -4.4085209396364894e-01 + 5.0588159752651252e-01 1.9063145008774760e+00 -4.6934750095128719e-01 + 8.8018250406745968e-01 2.5199596194257197e+00 -5.3739136921016617e-01 + 1.5224237054374954e+00 2.9900723171127854e+00 -7.0755793591838256e-01 + 2.3316818388875733e+00 3.1541167479378567e+00 -9.7675981549032254e-01 + 3.1350187192049179e+00 2.9794359824446399e+00 -1.2692120972859740e+00 + 3.8119516841089358e+00 2.5688711723529205e+00 -1.4832514520630040e+00 + 4.3193424526719051e+00 2.1239403515347299e+00 -1.5506476274700343e+00 + 4.6758598022881621e+00 1.8651611429570152e+00 -1.5003280628865938e+00 + 4.9116436391294425e+00 1.8538248236835528e+00 -1.4640056630430980e+00 + 5.0398321368433354e+00 1.9865428692016158e+00 -1.5504773807597350e+00 + 5.0948393135733703e+00 2.1357358819336740e+00 -1.7248140814061150e+00 + 5.2500708950223487e+00 2.2066653534039808e+00 -1.9377775728721667e+00 + 5.5959259561741579e+00 2.1772067123983598e+00 -2.2629103801595787e+00 + 6.1449594595369987e+00 1.9702665487401996e+00 -2.6906540770322183e+00 + 6.8219466805853575e+00 1.5086386403496843e+00 -2.9847729252140835e+00 + 7.0867765123370141e+00 1.2424840438979108e+00 -3.0893235395829683e+00 + id 11292 + loc 3.2963293790817261e-01 9.0552043914794922e-01 1070 + blend 0.0000000000000000e+00 + interp 5.3780020082156865e-01:3.6508388857282420e-01:7.6788568581444583e-01:3.0486318874097090e-01:1.1234002072156306e+00:4.8531767698767886e-01:1.5992083597645190e+00:5.3779482281956048e-01:2.0447601990428490e+00:3.9162491316665426e-01:2.6021656620057403e+00:4.7228715488216322e-01:3.2072076674295125e+00:3.8395357663479190e-01:3.8438357489510269e+00 + CVs 20 + -2.4620391821819648e-01 4.0341537507587599e-01 2.5502782063899126e-01 + -4.3909927809079996e-01 7.2634743851014250e-01 4.6612551013557246e-01 + -5.8073278622285351e-01 1.0038429352657032e+00 6.8633810226435377e-01 + -7.0305414205601102e-01 1.2575042959344707e+00 9.1107795111721035e-01 + -8.4152355746783525e-01 1.4905996697969706e+00 1.0977088487892617e+00 + -1.0171916696296304e+00 1.7038207811374624e+00 1.2203583856867954e+00 + -1.2268607517872336e+00 1.8878180184370192e+00 1.2728678801216369e+00 + -1.4559986462732861e+00 2.0322727300616941e+00 1.2615010837229623e+00 + -1.6967685395164711e+00 2.1350857131824155e+00 1.1816982871812129e+00 + -1.9101865104505404e+00 2.1871043282420719e+00 1.0065034586607793e+00 + -2.0301312596006689e+00 2.1837660136084445e+00 7.5969644357045385e-01 + -2.0535906128847299e+00 2.1401561607578938e+00 4.7800736880974748e-01 + -1.9874229156684147e+00 2.0607671244188612e+00 1.8464091192806498e-01 + -1.8446841640807838e+00 1.9502215532654112e+00 -4.1554129627359604e-02 + -1.6688142900755889e+00 1.8414472021701327e+00 -1.1629859381473739e-01 + -1.4803107650505911e+00 1.7423050568783041e+00 -2.4993822961877799e-02 + -1.2652182818957289e+00 1.5847839981973260e+00 2.0914533468454888e-01 + -9.6052851419552820e-01 1.1865326775800633e+00 5.4079753900882177e-01 + -9.0609100830714517e-01 1.1733748757809099e+00 4.1244194545060375e-01 + id 11293 + loc 2.3129728436470032e-01 9.5959740877151489e-01 1074 + blend 0.0000000000000000e+00 + interp 5.2941829604553736e-01:3.0052612555542052e-01:9.1381762787312659e-01:5.2941300186257689e-01:1.2860168020423675e+00:4.1725599084052339e-01:1.9804093633565243e+00:3.3346558674364535e-01:2.4804608222965263e+00:2.6661147581158140e-01:2.8824122850236433e+00:4.1592167631505156e-01:3.1980183170831249e+00:3.7945915120960172e-01:3.9881581491596774e+00 + CVs 20 + 1.2979171396199418e-01 3.8880875572563350e-01 -9.1466063951900892e-02 + 2.6341938257808423e-01 7.9741686796064992e-01 -2.0698027002729438e-01 + 4.2001720015532773e-01 1.2207098723061522e+00 -3.4742981496556130e-01 + 6.1691445197105954e-01 1.6506654362384616e+00 -5.1203740868563186e-01 + 8.6697915963293526e-01 2.0804871468471275e+00 -7.0407113541769750e-01 + 1.1663038412975486e+00 2.4993809080622662e+00 -9.5111638696673717e-01 + 1.4907107510352307e+00 2.8856357836592816e+00 -1.3136472389987215e+00 + 1.7981441788656685e+00 3.1706360857564300e+00 -1.8464946049214730e+00 + 2.0133093782891276e+00 3.2245403079161332e+00 -2.5020587441085507e+00 + 2.0910891388535120e+00 3.0045459129824690e+00 -3.1174263341957804e+00 + 2.0631193962430947e+00 2.5936745718494585e+00 -3.5799359416647998e+00 + 1.9900312229557682e+00 2.0992230858543452e+00 -3.8616028597143175e+00 + 1.9237666037712022e+00 1.5909756201655216e+00 -4.0030359013171655e+00 + 1.8919751811318071e+00 1.0995581602021443e+00 -4.0662138131547900e+00 + 1.9045616384028474e+00 6.0169650678417386e-01 -4.1306668780678200e+00 + 1.9899724538918171e+00 6.1599919551539442e-02 -4.3311467117124032e+00 + 2.1960545347012492e+00 -3.9275147309912295e-01 -4.8203106761679573e+00 + 2.4033229566288252e+00 -4.7764149304248577e-01 -5.4054110116481153e+00 + 2.4297667665118934e+00 -3.3085882343362383e-01 -5.7219685981536177e+00 + id 11294 + loc 3.5312560200691223e-01 4.3247827887535095e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4691229362115009e-01:3.0622832795483701e-01:7.4551437711427604e-01:3.0697052142859210e-01:1.1247587769622918e+00:4.4553524125097937e-01:1.6793803408353085e+00:3.7591434660704226e-01:2.1596448140326063e+00:3.6084441677216816e-01:3.0145991170577728e+00:3.0712426246778413e-01:3.5682208343994568e+00:4.4690782449821392e-01:3.9801584067751614e+00 + CVs 20 + -1.7604703063795243e-01 2.6070470782203764e-01 -5.2846146869415675e-02 + -3.4928512569113035e-01 5.4732133557953022e-01 -9.3469634642059513e-02 + -5.3415109962258389e-01 8.4338900395983141e-01 -1.4813231314323022e-01 + -7.4236517956596171e-01 1.1332272960712078e+00 -2.3526427898254382e-01 + -9.8203800585087420e-01 1.4044063932076571e+00 -3.6508121583311759e-01 + -1.2532215445568458e+00 1.6384946383289798e+00 -5.4878379603045557e-01 + -1.5432405140097509e+00 1.8138480301910653e+00 -7.9411612600993109e-01 + -1.8295080972840181e+00 1.9139354232344676e+00 -1.0986194601534667e+00 + -2.0875367713548036e+00 1.9334198048950397e+00 -1.4487952729930105e+00 + -2.3016602048908341e+00 1.8775645427399261e+00 -1.8256833675271307e+00 + -2.4722256383124050e+00 1.7562642464970957e+00 -2.2110139328495135e+00 + -2.6116096334399268e+00 1.5763903104270471e+00 -2.5892844115048410e+00 + -2.7376761736345823e+00 1.3358795425977452e+00 -2.9480902815351540e+00 + -2.8735557995146670e+00 1.0171761449828050e+00 -3.2751073664471724e+00 + -3.0503616061422760e+00 5.8881387365310633e-01 -3.5394641317985185e+00 + -3.2911969201249258e+00 5.3266888663327183e-02 -3.6670412686942711e+00 + -3.5935094682299495e+00 -5.0437794303222527e-01 -3.5966256340332197e+00 + -3.9385534867570793e+00 -9.5813606519873984e-01 -3.3687841792358215e+00 + -4.1128785448907790e+00 -1.1023682421089922e+00 -3.2796085478112786e+00 + id 11295 + loc 4.9788245558738708e-01 2.9297864437103271e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1471260511589675e-01:2.9526094379995477e-01:9.4195920899544494e-01:3.4605810995639896e-01:1.4302452123625240e+00:3.1721205879668984e-01:2.0641075716773720e+00:4.1470845798984562e-01:2.9960362763398045e+00:2.9124388459266648e-01:3.3488219394196537e+00:3.2457830147804062e-01:3.9999431358641964e+00 + CVs 20 + -2.2982804897015985e-01 2.1790466609158479e-01 1.9140584926273782e-02 + -4.4194410578253474e-01 4.3350834214583023e-01 5.1722122196950798e-02 + -6.4122114996806112e-01 6.3514269836101644e-01 8.6584134387785797e-02 + -8.3455492852061830e-01 8.2154809026004050e-01 1.1704556718409836e-01 + -1.0347217123333745e+00 9.9964153774336517e-01 1.4060898953976425e-01 + -1.2587892471857387e+00 1.1716111205397497e+00 1.5020247532644418e-01 + -1.5183309896058619e+00 1.3286674132343927e+00 1.3214524580010834e-01 + -1.8126756304761773e+00 1.4520292209744037e+00 7.0676192381114666e-02 + -2.1204992738835760e+00 1.5215203706214506e+00 -4.5329855336729841e-02 + -2.4045714729233580e+00 1.5251399565196668e+00 -2.1632066398161592e-01 + -2.6380765773322423e+00 1.4685346453064088e+00 -4.2832311476958690e-01 + -2.8160591269043684e+00 1.3688244436956776e+00 -6.6104121747576694e-01 + -2.9440175244373039e+00 1.2385673365812861e+00 -8.9537404129184206e-01 + -3.0182477046507779e+00 1.0797418552023403e+00 -1.1153114523403802e+00 + -3.0292573660427613e+00 9.0051602854785551e-01 -1.3071229464520244e+00 + -3.0065539280306353e+00 6.6110830479632399e-01 -1.4229591287757923e+00 + -3.0366448485688111e+00 3.3649990348453052e-01 -1.3594987035579793e+00 + -3.2153251925778994e+00 4.6839881217277890e-02 -1.0585522572128516e+00 + -3.5422622829455457e+00 -1.2871628089963172e-01 -5.7808866956589222e-01 + id 11296 + loc 2.5593778491020203e-01 2.2242730855941772e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4858318065660613e-01:2.7489896606830766e-01:4.2805994967278671e-01:3.9941185164497456e-01:9.8370200360083904e-01:3.8750474711157906e-01:1.3486707134730676e+00:4.1014537347450258e-01:2.0924561349505892e+00:3.9397019026026803e-01:2.7968378334199393e+00:4.4857869482479956e-01:3.2272441303384243e+00:3.6810210807819671e-01:3.9930256377321580e+00 + CVs 20 + -2.1196133344264056e-01 4.0174430236081587e-01 -9.5021733504204592e-02 + -4.1142318188154925e-01 8.1833033093847440e-01 -1.5426803629708113e-01 + -5.9546689788291884e-01 1.2456331822150735e+00 -1.6612522437213859e-01 + -7.4410034911546108e-01 1.6759392228264647e+00 -1.2478759981977244e-01 + -8.7061480751408404e-01 2.1092477388928215e+00 -3.8595212590662620e-02 + -1.0607359316462475e+00 2.5280311317229316e+00 6.6875293742765352e-02 + -1.4019465907732245e+00 2.8460259212952663e+00 1.4920729788791026e-01 + -1.8646822519431223e+00 2.9854996954895752e+00 1.7443680354956687e-01 + -2.3793898709198089e+00 2.9458239575045257e+00 1.1940665336298850e-01 + -2.8803600500544291e+00 2.7482092248725412e+00 -4.3989699514141223e-02 + -3.3043397950980991e+00 2.4358571956767081e+00 -3.3314094355172752e-01 + -3.6015793325175705e+00 2.0647079892931313e+00 -7.2465334319907759e-01 + -3.7618480001939201e+00 1.6821347987700750e+00 -1.1342339117195170e+00 + -3.8027651033766743e+00 1.2880386351857651e+00 -1.4933250210721998e+00 + -3.7181237777345872e+00 8.6732080822280821e-01 -1.7475134373145107e+00 + -3.5374580923773999e+00 4.6832431491623239e-01 -1.7871927182839769e+00 + -3.2377590370323621e+00 1.5368333325567049e-01 -1.5966927115670455e+00 + -2.9021159485408563e+00 1.3887408332991541e-01 -1.1486852606374498e+00 + -2.6075830843438421e+00 -6.0851484374443016e-02 -8.9524515920260850e-01 + id 11297 + loc 1.8432857096195221e-01 9.6837002784013748e-03 410 + blend 0.0000000000000000e+00 + interp 4.4923481829881184e-01:1.7006240298801323e-01:5.1219831506534685e-01:2.1402060374479104e-01:1.7201215750200718e+00:3.4054211721692457e-01:2.1459148550232889e+00:4.4923032595062889e-01:2.8049750646441978e+00:3.1086027959027157e-01:3.7249670216399675e+00 + CVs 20 + -7.3253522013953076e-02 1.1748774597886917e-01 -2.4847595229177988e-01 + -1.1323940739468473e-01 2.2808421672553625e-01 -4.8347166896692573e-01 + -1.3033082209022778e-01 3.2899890540808263e-01 -7.0467274275035963e-01 + -1.2856057931397880e-01 4.1923769275244394e-01 -9.0973031533956072e-01 + -1.0832360074446562e-01 4.9774727374865818e-01 -1.0944359416300777e+00 + -6.7260437649339477e-02 5.5947384150815438e-01 -1.2478116704430802e+00 + -6.5989845697543847e-03 5.9707746350440449e-01 -1.3548279947195612e+00 + 6.2877000410788697e-02 6.0785259403266734e-01 -1.4052518559334768e+00 + 1.3838405521972866e-01 6.2290593865766231e-01 -1.4435424742155494e+00 + 2.1657914298159087e-01 6.3709771171468410e-01 -1.4815527280401610e+00 + 1.9306375535685813e-01 5.6775371137103270e-01 -1.4027912153441962e+00 + 1.5027530005205103e-01 5.4609749003241115e-01 -1.2880833210386360e+00 + 2.8862126501495550e-01 6.1495963140082377e-01 -1.2374114237677107e+00 + 5.6170148569174216e-01 7.2976311486278889e-01 -1.2550040539920122e+00 + 8.8696164420739221e-01 8.5629462438059334e-01 -1.3596967321889857e+00 + 1.2143015440038387e+00 9.7483697308859341e-01 -1.5482392937320482e+00 + 1.5333710030401577e+00 1.0722092567220487e+00 -1.8326222953241733e+00 + 1.8169381510930627e+00 1.1349642406583129e+00 -2.1985010853976403e+00 + 1.9569269172103425e+00 1.2004136984396843e+00 -2.2638561610563444e+00 + id 11298 + loc 4.5271006226539612e-01 4.2247107625007629e-01 1070 + blend 0.0000000000000000e+00 + interp 4.1572494768780999e-01:3.4127262072720443e-01:9.7310666898146581e-01:4.1572079043833315e-01:1.8517870094376980e+00:3.9184657832074016e-01:2.5148939814745654e+00:3.4975629905060679e-01:3.3091121382738691e+00:3.4274539512835184e-01:3.9999851769811867e+00 + CVs 20 + 2.3257485479633866e-01 3.2742408926944783e-01 4.0871617288543544e-01 + 4.3018128404077205e-01 5.8277399580584777e-01 7.5813421493183275e-01 + 6.5558419223525333e-01 8.0354919995976526e-01 1.0756995985476543e+00 + 8.7591376611162208e-01 9.9290698059741422e-01 1.3958945955172635e+00 + 1.0139383103239354e+00 1.1326634287748729e+00 1.7407978943466573e+00 + 1.0431120338458713e+00 1.2023729665739979e+00 2.1020114259799811e+00 + 9.7898489300908409e-01 1.1898823345879330e+00 2.4468356936928264e+00 + 8.4085495994944093e-01 1.1002204814019312e+00 2.7373014818727777e+00 + 6.5731684490733122e-01 9.4700403929338361e-01 2.9242729515905683e+00 + 4.9628571588085513e-01 7.5518490529268734e-01 2.9860492912790080e+00 + 4.3351235419478262e-01 5.6367841846136246e-01 2.9693503299482202e+00 + 5.1519089481383484e-01 4.2909815459220230e-01 2.9546444391265552e+00 + 6.5823794609804909e-01 3.6115686236619371e-01 2.9827614494623216e+00 + 7.1741199694960434e-01 1.9672706483690061e-01 2.9455882782145721e+00 + 6.1690258845864721e-01 -1.8572287056049330e-01 2.7834826560692156e+00 + 2.0995815157220871e-01 -7.1378252090393279e-01 2.5935150989812699e+00 + -6.9874470137297540e-01 -1.1174423830275353e+00 2.5685367602558031e+00 + -1.7034168243700933e+00 -9.8994936732103178e-01 2.8187022204079089e+00 + -1.9931954584088922e+00 -9.3674146460925867e-01 2.8697838390841865e+00 + id 11299 + loc 4.6900436282157898e-01 1.0273956507444382e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7161415510986737e-01:2.5460612467830013e-01:1.0360519013236758e-02:3.3036357229165580e-01:8.3586211945591671e-01:3.0290606984427965e-01:1.3810034481521107e+00:4.5515199048974203e-01:1.8991734384455372e+00:4.7160943896831631e-01:2.3836654551595737e+00:2.7187330284002370e-01:2.8862374561962230e+00:3.0982356967644509e-01:3.4440378553962625e+00 + CVs 20 + -1.8835185877247965e-01 3.6281498168096427e-01 -1.3898021372926950e-02 + -3.8803968158626539e-01 7.0465405926782565e-01 -3.0393573433046217e-02 + -6.1326475828093630e-01 1.0113655546367299e+00 -5.8163353515043981e-02 + -8.6561090325931822e-01 1.2688053556500933e+00 -1.0412019275826817e-01 + -1.1372757523422554e+00 1.4658199096032214e+00 -1.7187875570319566e-01 + -1.4155449635752870e+00 1.5962724748485952e+00 -2.6069353709494475e-01 + -1.6859068586936334e+00 1.6616512535860415e+00 -3.6647866122419909e-01 + -1.9366972846481558e+00 1.6697775197013516e+00 -4.8407038132378816e-01 + -2.1587693824037384e+00 1.6320017338086061e+00 -6.0939181503909490e-01 + -2.3436552720550190e+00 1.5610850543849735e+00 -7.4111244458811854e-01 + -2.4853194107240451e+00 1.4718845141453745e+00 -8.7948136188214610e-01 + -2.5844273573973373e+00 1.3807839375194755e+00 -1.0275349994165131e+00 + -2.6481841864990758e+00 1.2965624999840810e+00 -1.1966725910117071e+00 + -2.6866408785982099e+00 1.2039111652975074e+00 -1.4091901816455763e+00 + -2.7154089306008795e+00 1.0572457818404051e+00 -1.6821649074724960e+00 + -2.7647487205121730e+00 7.7534433334359476e-01 -1.9665218203053221e+00 + -2.8684387772680320e+00 3.1083205448033557e-01 -2.1334714393054446e+00 + -3.0788330460224604e+00 -2.2891170370375180e-01 -2.0986239403755471e+00 + -3.3407277123079688e+00 -4.4214844956016131e-01 -1.9880958815502241e+00 + id 11300 + loc 4.3200597167015076e-01 6.2704086303710938e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3623978302171873e-01:2.6603181157783751e-01:6.3209564445964972e-01:2.8034269633797260e-01:1.2149990932793631e+00:4.3623542062388854e-01:2.1536214319620681e+00:2.7533249355283668e-01:2.6865222214545890e+00:3.5969251743085423e-01:3.0291906638081070e+00:4.2878522832333066e-01:3.9307144407035448e+00 + CVs 20 + 1.4106558457219870e-01 3.5335012536233079e-01 -3.3833022380421074e-01 + 3.2475889602415065e-01 6.9626437408808328e-01 -6.5547495414038615e-01 + 5.3781593819459195e-01 1.0314635700502075e+00 -9.5395084054496426e-01 + 7.7146927235850549e-01 1.3570697208122620e+00 -1.2290009089934339e+00 + 1.0122453542957071e+00 1.6611858940642830e+00 -1.4898539666476078e+00 + 1.2404371337646360e+00 1.9251954833189544e+00 -1.7701184119700670e+00 + 1.4371730558282492e+00 2.1248684325926783e+00 -2.1006631298983072e+00 + 1.5829108531745011e+00 2.2222737603001863e+00 -2.4804784399772437e+00 + 1.6655348848685554e+00 2.1932774675600539e+00 -2.8821279395463217e+00 + 1.6875906175631066e+00 2.0458563457888461e+00 -3.2815726638973923e+00 + 1.6622500725818266e+00 1.8017280551293775e+00 -3.6559711294086856e+00 + 1.6182635232762372e+00 1.4926476747931514e+00 -3.9954525323708001e+00 + 1.5895458198142947e+00 1.1525407183822665e+00 -4.3134708174046201e+00 + 1.5915456470351561e+00 8.2025759741003701e-01 -4.6184343834753356e+00 + 1.6196587599010230e+00 5.4250027216435093e-01 -4.9135124920758075e+00 + 1.6611577246220062e+00 3.4307309155800136e-01 -5.2020312670062543e+00 + 1.7111981827964662e+00 2.2686156793944542e-01 -5.4979672950359078e+00 + 1.7699598690928948e+00 2.3692419721800628e-01 -5.8436490382535391e+00 + 1.8121436244632603e+00 4.0424254155853639e-01 -6.1954318627634937e+00 + id 11301 + loc 8.7139332294464111e-01 5.6852984428405762e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2999215698660620e-01:3.1533062769536829e-01:9.2780946958708532e-02:3.2780863412470762e-01:1.0267175613235220e+00:3.5621575420136309e-01:1.9582358813362137e+00:3.0917760786594695e-01:2.5461085194062614e+00:3.9133856158560276e-01:2.9967274698037998e+00:4.2998785706503634e-01:3.3742085252299097e+00 + CVs 20 + -3.4317607070252676e-01 3.0343345673940464e-01 4.8624831319433598e-02 + -6.0850236390660672e-01 6.0398425690144353e-01 9.9427918287011363e-02 + -8.2387064234252316e-01 9.1804539175474764e-01 1.6857160297771384e-01 + -1.0274605593576585e+00 1.2551946096607285e+00 2.3239587167170506e-01 + -1.2593602806420006e+00 1.6069821319493705e+00 2.4068564281441451e-01 + -1.5431989563713977e+00 1.9441378001422644e+00 1.6149377244023322e-01 + -1.8755728876532682e+00 2.2237940473598674e+00 -1.6095809946608863e-02 + -2.2199440892432203e+00 2.4022723291633685e+00 -3.0128431047742632e-01 + -2.5073340261468662e+00 2.4501640620925325e+00 -6.9280924515804521e-01 + -2.6750966342130056e+00 2.3722185902536408e+00 -1.1437145861533500e+00 + -2.7176979772405860e+00 2.1947875702613060e+00 -1.6016859954496694e+00 + -2.6419812569917376e+00 1.9143704304531837e+00 -2.0427112170352184e+00 + -2.4656541983462175e+00 1.5582936074392593e+00 -2.4062775380887018e+00 + -2.3066134309870110e+00 1.2798640734377267e+00 -2.6423617607141101e+00 + -2.2855264427366642e+00 1.2207691089518866e+00 -2.7628028107886160e+00 + -2.3951498714180324e+00 1.3892475027328532e+00 -2.6890448212894902e+00 + -2.5267743685916195e+00 1.6379882441939406e+00 -2.2248031274168714e+00 + -2.5138039433367307e+00 1.6084759617429072e+00 -1.6395301285012061e+00 + -2.5580374162596744e+00 1.6327819756199085e+00 -1.8470985717719821e+00 + id 11302 + loc 2.5529208779335022e-01 4.4461563229560852e-01 410 + blend 0.0000000000000000e+00 + interp 3.6315111098878960e-01:3.1039962185531900e-01:1.7448057575863984e-05:3.6314747947767972e-01:7.2061862394686116e-01:3.2183227072267923e-01:1.1369048788205796e+00:2.8938929666170926e-01:2.0113320705743774e+00:3.4219033213984629e-01:2.7734471980496318e+00:3.1596880843769437e-01:3.1961796465371153e+00 + CVs 20 + -1.5496269059178602e-01 1.2843489060681806e-01 -2.3277816970067214e-01 + -2.9770340913797594e-01 2.3494992279806870e-01 -4.3286504446095886e-01 + -4.3227373153302584e-01 3.3543754891262695e-01 -6.3503764242337812e-01 + -5.5775259334719018e-01 4.3756739034348657e-01 -8.5465377226754269e-01 + -6.7326718184480616e-01 5.4006511699081328e-01 -1.0912854879703540e+00 + -7.7725662552345132e-01 6.4108412791564084e-01 -1.3449491494252510e+00 + -8.6151578968737119e-01 7.3900327437926072e-01 -1.6152199504587417e+00 + -9.1307363204768899e-01 8.3146922018212788e-01 -1.8990734189796217e+00 + -9.1997959629810655e-01 9.1508873293136639e-01 -2.1899291213070611e+00 + -8.7476079953191954e-01 9.8703327040120326e-01 -2.4772966809918371e+00 + -7.7871159393741696e-01 1.0451040222146561e+00 -2.7488405945903489e+00 + -6.5057067697874127e-01 1.0820825140429504e+00 -3.0019010307191327e+00 + -5.2590532125739331e-01 1.0828975577243769e+00 -3.2509255685111320e+00 + -4.3753606815161405e-01 1.0352825326378341e+00 -3.5073619554567061e+00 + -3.9764561562208889e-01 9.3901409771008804e-01 -3.7657582325580856e+00 + -4.0769631803054218e-01 8.0155946310679949e-01 -4.0101905494642098e+00 + -4.6715863590429751e-01 6.3639072227597593e-01 -4.2213686440897913e+00 + -5.6510300494905574e-01 4.6024410384866665e-01 -4.3881742297153838e+00 + -6.3300361588465304e-01 2.9124710520013641e-01 -4.5514389247340024e+00 + id 11303 + loc 1.0068932175636292e-01 5.6946396827697754e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3548403006787306e-01:3.8221966220173398e-01:1.9813865344952020e-01:2.5915935428139764e-01:1.0754777853509034e+00:3.0790189872788964e-01:1.8905075329133236e+00:4.1494676376948331e-01:2.1170668974765032e+00:4.3547967522757242e-01:2.9551862444325616e+00:3.5892944313052572e-01:3.6265572657345309e+00 + CVs 20 + 2.4979678330713734e-01 3.8188028612917457e-01 -1.9234417588985003e-01 + 4.7503953371637020e-01 7.8450201597244729e-01 -3.8638681971133143e-01 + 6.8492987286249696e-01 1.1990319241962009e+00 -5.7357429454477782e-01 + 8.7194437343659836e-01 1.6202518199406626e+00 -7.3690203723706516e-01 + 1.0240191893309207e+00 2.0234598117015561e+00 -8.7926730820547128e-01 + 1.1410987345197192e+00 2.3426519925838454e+00 -1.0435650734334281e+00 + 1.2258529981581900e+00 2.5084862825706034e+00 -1.2403352626670039e+00 + 1.2854814291785837e+00 2.5470472374185009e+00 -1.4352552747982907e+00 + 1.3299841491600706e+00 2.5109324936112061e+00 -1.6193070764803739e+00 + 1.3686022504720432e+00 2.4223837357428475e+00 -1.7975881137009164e+00 + 1.4206737364452597e+00 2.2822044996379738e+00 -1.9797731133111667e+00 + 1.5109521492698412e+00 2.0928946410646669e+00 -2.1547594123337683e+00 + 1.6446385872062628e+00 1.8838490639335657e+00 -2.2970198247629128e+00 + 1.7951095007710998e+00 1.7159687480683903e+00 -2.4035991920006681e+00 + 1.9494244556902143e+00 1.6452710119502090e+00 -2.5040585993757865e+00 + 2.1483909491281374e+00 1.6483145897884841e+00 -2.6470785250004232e+00 + 2.4670825399716776e+00 1.6244425744319073e+00 -2.9048630728033800e+00 + 2.8900264737798436e+00 1.3783368867946511e+00 -3.1298357394338634e+00 + 2.8368221967193801e+00 1.2110619410208114e+00 -2.8288807807946745e+00 + id 11304 + loc 9.0901029109954834e-01 5.6528007984161377e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9861594391989011e-01:3.6385139879026152e-01:2.3365820248599789e-03:3.4273614064444990e-01:8.1578023190170812e-01:3.3518644596568814e-01:1.1999933063293986e+00:3.5573784465957520e-01:2.0209854419183735e+00:4.9861095776045095e-01:2.4957217820406994e+00:3.3978065548211506e-01:3.2458665498169688e+00 + CVs 20 + -4.3367930580072295e-03 3.6513704992898333e-01 -2.8619741329575504e-01 + 3.2166558980430443e-02 6.9617309913102421e-01 -5.4488305802784021e-01 + 7.1743950936798639e-02 9.9566392129447445e-01 -8.0146762666920457e-01 + 1.0128013716462009e-01 1.2590651543547464e+00 -1.0716076766450238e+00 + 1.2003935933425391e-01 1.4827867421967145e+00 -1.3652888025066461e+00 + 1.2906492609956377e-01 1.6669147814192906e+00 -1.6873355994120243e+00 + 1.3739767375107637e-01 1.8111185210554370e+00 -2.0402024537803145e+00 + 1.6169102564794902e-01 1.9138720545214190e+00 -2.4233907261622871e+00 + 2.2137452259126478e-01 1.9722099882443003e+00 -2.8300889040653763e+00 + 3.3395553657094423e-01 1.9773563142060282e+00 -3.2425369652689335e+00 + 4.9933984935905723e-01 1.9141820026227747e+00 -3.6256229273546916e+00 + 6.7999006838720399e-01 1.7736448580061241e+00 -3.9354704667184270e+00 + 8.2055369234420827e-01 1.5446317305537351e+00 -4.1550892763220402e+00 + 8.9134659389404891e-01 1.1955020382120796e+00 -4.2965164562140030e+00 + 8.7846336402620451e-01 7.4641681485588229e-01 -4.3551153388924098e+00 + 7.3420349288647224e-01 3.3172135353699844e-01 -4.3413022276983027e+00 + 3.9862047044206417e-01 1.8504481357698216e-01 -4.3137730432750017e+00 + -2.6405668795544554e-02 2.2931213810786610e-01 -4.3108210983544764e+00 + -5.9225264258697730e-01 -1.5247174538504299e-02 -4.3338971248956746e+00 + id 11305 + loc 2.6870819926261902e-01 5.9806495904922485e-01 1070 + blend 0.0000000000000000e+00 + interp 4.9180432357093029e-01:4.9179940552769458e-01:3.7695494149101227e-02:3.7306382144333750e-01:7.5868238654057996e-01:3.4343329585956534e-01:1.4137995034566084e+00:2.6340931230607462e-01:2.0019830188700647e+00:2.6026216291938808e-01:2.9847651837687268e+00:4.0067617940295458e-01:3.6498344955818696e+00 + CVs 20 + -3.4389147007210236e-01 3.2509560876481097e-01 3.2282564128906632e-01 + -6.3247472058486731e-01 5.8182364958515020e-01 5.8091903180951476e-01 + -8.8285357916319351e-01 8.1794189095348768e-01 8.6378753149886955e-01 + -1.1387122986935041e+00 1.0540594984799272e+00 1.1613172599037713e+00 + -1.4517349491637295e+00 1.2779179804601386e+00 1.3859526792162575e+00 + -1.8287474145236695e+00 1.4537675760841282e+00 1.4797195551321902e+00 + -2.2294962275327661e+00 1.5435633190755538e+00 1.4339329337340807e+00 + -2.5909152441780670e+00 1.5297680014877151e+00 1.2471341453004867e+00 + -2.8147344897624618e+00 1.4035759908461849e+00 9.3402760895561943e-01 + -2.8395154740778135e+00 1.1806441639238083e+00 6.1255678009535774e-01 + -2.7433406471949522e+00 9.0188781296003628e-01 4.0583544948363337e-01 + -2.6221809944585250e+00 5.9713226849427481e-01 3.6049404571248411e-01 + -2.5496775881670568e+00 3.0069758281411213e-01 4.2842613947216135e-01 + -2.5223149408939776e+00 -1.1969735605532716e-02 4.5409740448525537e-01 + -2.5259563978886934e+00 -3.6344181128154462e-01 3.2687688727456549e-01 + -2.6016412245514635e+00 -6.7674538301292586e-01 -9.7582059240448049e-03 + -2.8338289643373851e+00 -7.5443587923503141e-01 -6.0537596198944466e-01 + -3.2378254633436896e+00 -4.3146742984296099e-01 -1.1446691568226266e+00 + -3.4190594913034693e+00 -4.6690970888818439e-01 -1.3513487689572528e+00 + id 11306 + loc 5.5300253629684448e-01 1.7259790003299713e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8882454665255933e-01:3.2961232284484421e-01:2.7374475653056185e-01:2.6100152911222779e-01:1.1023777449730678e+00:3.8882065840709285e-01:1.8826371324602991e+00:3.8053004451950290e-01:2.6631185068242251e+00:2.5613196455994186e-01:3.6940076867775149e+00 + CVs 20 + -2.0672007650995639e-01 1.4105937834697202e-01 2.3798593648521021e-01 + -4.0418259750631497e-01 2.8560829476181487e-01 4.5443819485288567e-01 + -6.1217122809281099e-01 4.2108411626210129e-01 6.4920078038696871e-01 + -8.3923424778052380e-01 5.4845148479224592e-01 8.2294817716821822e-01 + -1.0798266833041215e+00 6.7858780579677813e-01 9.7318818770805882e-01 + -1.3348745861530078e+00 8.2387182078248622e-01 1.1119854985526212e+00 + -1.6038426133696002e+00 9.9066295971886864e-01 1.2643213527000750e+00 + -1.8767120418996632e+00 1.1789204811070797e+00 1.4437384387478163e+00 + -2.1441058624172977e+00 1.3869733946669311e+00 1.6485377702446746e+00 + -2.4067244425490832e+00 1.6108295628587523e+00 1.8781460884175085e+00 + -2.6743670859576425e+00 1.8384454055899018e+00 2.1425597107041590e+00 + -2.9577377629738533e+00 2.0445337426014785e+00 2.4603320874891548e+00 + -3.2544896441768358e+00 2.1928872215875446e+00 2.8453500556694871e+00 + -3.5447288364232143e+00 2.2462279990082998e+00 3.2861836686596884e+00 + -3.8086545103651650e+00 2.1828216604141404e+00 3.7546063419269862e+00 + -4.0480157355413082e+00 1.9819496532322551e+00 4.2379742006326317e+00 + -4.2539457151248952e+00 1.6148382962724765e+00 4.7312003804788487e+00 + -4.3593185692127836e+00 1.1310419188126166e+00 5.1867492566459106e+00 + -4.2928119437674752e+00 9.2001998120890160e-01 5.3781317108648725e+00 + id 11307 + loc 5.7015877962112427e-01 4.7101145982742310e-01 410 + blend 0.0000000000000000e+00 + interp 4.1771397263765414e-01:3.2393496513539577e-01:6.1146611573832421e-01:3.2095402132545608e-01:1.2136726381499174e+00:4.1770979549792780e-01:2.0471771515219199e+00:3.3331283357040775e-01:2.9999948994421004e+00:3.1110574723155687e-01:3.6967757550896447e+00 + CVs 20 + -4.4401867565304065e-01 3.1217571261954707e-01 7.8974037747024897e-02 + -8.2425241066934485e-01 5.9257614749896870e-01 1.5950611252111443e-01 + -1.2083385002076577e+00 8.7878010383448357e-01 2.2583355000784960e-01 + -1.6285034827220179e+00 1.1740367081473952e+00 2.8908685777419829e-01 + -2.0889734644841047e+00 1.4480315491712774e+00 3.7933484179446403e-01 + -2.5938283959939419e+00 1.6534570041083370e+00 5.3151022721488372e-01 + -3.1270582516336871e+00 1.7363255035310894e+00 7.7206023332522000e-01 + -3.6496817317764321e+00 1.6667653579068449e+00 1.0892363818733592e+00 + -4.1370457184320557e+00 1.4409672016368711e+00 1.4343224203256961e+00 + -4.5743992795377597e+00 1.0631149872856016e+00 1.7429190529953889e+00 + -4.9468380209175722e+00 5.6916077000524545e-01 1.9696886747490323e+00 + -5.2717119978046219e+00 2.7564723788287893e-02 2.1536669981099563e+00 + -5.5919071252200077e+00 -4.9800363882601362e-01 2.3860803535758581e+00 + -5.9314469186545331e+00 -9.3373461499630794e-01 2.7121184676482897e+00 + -6.2893125108655337e+00 -1.2121515665280085e+00 3.0977592283459678e+00 + -6.6531313213954890e+00 -1.3324713837800912e+00 3.4586304380573241e+00 + -7.0039618122003757e+00 -1.3571411084409375e+00 3.7455761362810809e+00 + -7.3062493135750337e+00 -1.3505807882792200e+00 3.9909233603460561e+00 + -7.5685283231805034e+00 -1.4048724967392525e+00 4.3016555744721003e+00 + id 11308 + loc 9.9219799041748047e-01 2.8027021884918213e-01 1070 + blend 0.0000000000000000e+00 + interp 3.7492905638484053e-01:3.7323155353763032e-01:9.3729384751433664e-02:3.1983518070903794e-01:1.0044109266450285e+00:3.7492530709427668e-01:1.6305825830426737e+00:2.7664121808204695e-01:2.8261408868511637e+00:3.2791442572090135e-01:3.2351580848559198e+00 + CVs 20 + 2.2036966277044517e-01 2.9055350084479281e-01 -4.1928060147730595e-02 + 4.0387120881986549e-01 5.4177627646471427e-01 -2.5263944471268118e-02 + 5.4916799764844415e-01 7.6780958840485514e-01 2.3726966768688129e-02 + 6.5241056096921324e-01 9.7061457316770250e-01 9.4269752921491867e-02 + 7.1561906766422734e-01 1.1534240607506652e+00 2.0180104724002268e-01 + 7.4470732674258244e-01 1.3398129688909433e+00 3.5423154093039277e-01 + 7.4790139155875668e-01 1.5808938375077586e+00 5.1472521553467654e-01 + 7.3316506453512287e-01 1.9146140654222199e+00 6.1266054777634027e-01 + 7.2022379700167805e-01 2.3464917905992482e+00 5.9238887129269224e-01 + 7.6761862930448843e-01 2.8624548686991700e+00 3.9610271202169289e-01 + 9.6680308210615118e-01 3.3461104844664837e+00 -2.9056741016704857e-02 + 1.3127770781508952e+00 3.5936274884905188e+00 -6.0745759482450423e-01 + 1.7039949882323153e+00 3.5419907211156314e+00 -1.2074401523806608e+00 + 2.0688881487380000e+00 3.2291363261861497e+00 -1.7526089290743594e+00 + 2.3787862644687676e+00 2.7096833764160979e+00 -2.1898141420021440e+00 + 2.6200007725993881e+00 2.0201254845378260e+00 -2.4763377163662703e+00 + 2.7281985251942142e+00 1.2017213948845062e+00 -2.5567710201757743e+00 + 2.6239953242791647e+00 4.0800470777684916e-01 -2.4183166585331328e+00 + 2.4987622989329474e+00 -2.3117866641745088e-02 -2.3353795263048482e+00 + id 11309 + loc 4.4592660665512085e-01 9.9984085559844971e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1589102891995527e-01:3.6690336154946052e-01:8.6085586246608126e-01:2.0865915269737745e-01:1.3123799026803302e+00:3.5949410647413560e-01:2.2150237350369331e+00:3.4325624921425918e-01:3.4199661620626829e+00:4.1588687000966612e-01:3.9994423135779500e+00 + CVs 20 + 1.2879554111092301e-01 3.7139475783300036e-01 -9.4564725261414656e-02 + 2.7304683818328629e-01 7.3439035822371568e-01 -2.3145757969836633e-01 + 4.2218762983581359e-01 1.0925474502210166e+00 -4.0914470247925649e-01 + 5.6309621120855069e-01 1.4427656953665631e+00 -6.3507552034174708e-01 + 6.8765285619028771e-01 1.7767686304007229e+00 -9.2058194920618042e-01 + 8.0741877544017315e-01 2.0861287906886279e+00 -1.2695505933985851e+00 + 9.5284502854945496e-01 2.3608876308464071e+00 -1.6781250534801668e+00 + 1.1518806633761911e+00 2.5871569942163033e+00 -2.1346292174020478e+00 + 1.4165156672164552e+00 2.7444253999180948e+00 -2.6265716090530562e+00 + 1.7430506168008375e+00 2.7940187144567386e+00 -3.1425953680677576e+00 + 2.1019885119294095e+00 2.6669960603132798e+00 -3.6604291078881670e+00 + 2.4103390710521246e+00 2.2742743830994181e+00 -4.1234552826413573e+00 + 2.5248438380586964e+00 1.6404586999440394e+00 -4.4477292595883053e+00 + 2.4155695951259197e+00 9.5547090722276751e-01 -4.6343469731696194e+00 + 2.1558170289531429e+00 3.0872441573865017e-01 -4.7388147927242272e+00 + 1.6865777610067765e+00 -2.1781255375632269e-01 -4.7778607817442920e+00 + 8.6849108944323117e-01 -2.8586710127137249e-01 -4.7712900287088527e+00 + 1.3956547406275888e-01 3.0187704334507326e-01 -4.8210995223640625e+00 + -2.8434169266000725e-01 1.9914461986861132e-01 -4.8747682377160100e+00 + id 11310 + loc 3.8074609637260437e-01 8.8046461343765259e-02 410 + blend 0.0000000000000000e+00 + interp 3.5606563909391054e-01:3.0455045158326549e-01:5.8845631029391665e-04:3.2393447969713624e-01:1.0781495338388396e+00:3.4291957412793478e-01:2.0023406323339819e+00:3.5606207843751964e-01:2.8797559944686668e+00:3.5147979889337277e-01:3.2375434796467557e+00 + CVs 20 + -1.5267679174443874e-01 1.0448832159087390e-01 -1.9761422286537694e-01 + -2.7044584088129486e-01 2.1323900161213694e-01 -4.1082702463034948e-01 + -3.7159873561084361e-01 3.1889022672278755e-01 -6.3938908179696452e-01 + -4.6228010229849958e-01 4.1757018628552955e-01 -8.8103090609012025e-01 + -5.4075811798916784e-01 5.0770013343846687e-01 -1.1317574535335764e+00 + -6.0138873462978726e-01 5.8711307150540681e-01 -1.3850253296161323e+00 + -6.3219458328327116e-01 6.5276998977480694e-01 -1.6312302533103409e+00 + -6.1983877818035371e-01 6.9999391543724632e-01 -1.8573929795742996e+00 + -5.5598140776805283e-01 7.2248736169054817e-01 -2.0467467307159328e+00 + -4.4310910489037980e-01 7.1371325701602562e-01 -2.1802229501374897e+00 + -3.0268900817950772e-01 6.6757579342902718e-01 -2.2471062473652363e+00 + -1.8248346933934817e-01 5.9376863420572412e-01 -2.3038840207693552e+00 + -1.3105988772352989e-01 5.3022211960029619e-01 -2.5154638302984984e+00 + -4.4836062110064578e-02 4.3045534681203346e-01 -2.5708842374663092e+00 + 1.1695512522151674e-02 3.0538174888140901e-01 -2.6097360025700169e+00 + 2.1859402946597384e-02 1.6457146163181235e-01 -2.7475993550137918e+00 + 4.9837504998030413e-03 1.3626824764888079e-02 -2.8976864301669600e+00 + -3.9820779116318317e-02 -1.4585056088264525e-01 -3.0437945917462748e+00 + -3.8298389792223886e-02 -2.7171496323223954e-01 -3.1432239254217667e+00 + id 11311 + loc 7.9412913322448730e-01 2.8803077340126038e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8250411230059725e-01:2.5214805262929818e-01:8.3750015881652917e-01:3.1234688954951290e-01:1.3083664429985538e+00:3.0294924091416775e-01:2.0027566632291132e+00:3.7265715516891085e-01:2.6134162677365245e+00:4.8249928725947427e-01:3.0810330202369958e+00:3.7589171491736600e-01:3.9410383623141914e+00 + CVs 20 + 2.5029958052727541e-01 3.1915524031630049e-01 -1.3907343863024271e-01 + 4.7248744985060076e-01 6.0853300271353361e-01 -2.0201541870716333e-01 + 6.6228771400658748e-01 8.8679609407630422e-01 -2.2164686709035675e-01 + 8.1505233429153212e-01 1.1593898680019687e+00 -1.9888488192326281e-01 + 9.2592830344926447e-01 1.4247023797581595e+00 -1.3230266503958377e-01 + 9.9891215874572326e-01 1.6991639305050836e+00 -6.6136158358499619e-02 + 1.0442848551310471e+00 1.9965316931199539e+00 -6.2294260247814259e-02 + 1.0792357653256270e+00 2.3123247471017363e+00 -1.5516118426474046e-01 + 1.1320953838901797e+00 2.6280602427364759e+00 -3.6002011696706115e-01 + 1.2446757497747338e+00 2.8876542752168639e+00 -6.9171305791076132e-01 + 1.4441647196120182e+00 2.9783149873588242e+00 -1.1264122321385150e+00 + 1.6733227279207816e+00 2.8250889046806695e+00 -1.5541297095863251e+00 + 1.8500620253942182e+00 2.4876782420862873e+00 -1.8863734636913767e+00 + 1.9586909750167756e+00 2.0451125778477910e+00 -2.1067922591252999e+00 + 2.0141990730692698e+00 1.5477316612449332e+00 -2.2121423449974555e+00 + 1.9999112606733940e+00 1.0403504322359654e+00 -2.1870675081409394e+00 + 1.8570488550275812e+00 6.0764935901842798e-01 -2.0183154564620418e+00 + 1.5774784862142397e+00 3.6118227758605670e-01 -1.7527145141114295e+00 + 1.4328579165423307e+00 7.5343691499170973e-02 -1.6046863149225157e+00 + id 11312 + loc 6.6333115100860596e-01 8.6979806423187256e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6353071563594439e-01:3.2674632864321695e-01:6.0699158897153338e-01:4.6352608032878806e-01:1.0266195002531457e+00:4.6347874102875541e-01:1.5503507220491954e+00:3.8343146788529586e-01:2.0076847617587825e+00:3.8811857992105347e-01:2.7036234868550482e+00:3.3547310874275810e-01:3.2501256508593204e+00:3.6388622689710992e-01:3.9936183645834027e+00 + CVs 20 + 9.4233700030069423e-02 3.3062512587146881e-01 -2.5715652589917820e-01 + 2.3099279892996344e-01 6.6724403218728279e-01 -4.7135752561428790e-01 + 4.2640696413959139e-01 1.0099889503157373e+00 -6.7170822724827117e-01 + 6.8660556948507667e-01 1.3543253208569028e+00 -8.7473117149827728e-01 + 1.0121639073358142e+00 1.7006753127542151e+00 -1.0952409757528994e+00 + 1.3958299541509624e+00 2.0498327650867285e+00 -1.3657628881978110e+00 + 1.8181873352532338e+00 2.3892435026108805e+00 -1.7384423743570483e+00 + 2.2395940761944457e+00 2.6567647479705006e+00 -2.2720933604524571e+00 + 2.5879074244887712e+00 2.7392956454813184e+00 -2.9603604956914364e+00 + 2.7943666865135426e+00 2.5787607259784111e+00 -3.6922993174882039e+00 + 2.8439120388948256e+00 2.2205283745102204e+00 -4.3507739807698504e+00 + 2.7703208165247495e+00 1.7583182207246946e+00 -4.8660890113467907e+00 + 2.6321070532427342e+00 1.2777075684847250e+00 -5.2358236311658697e+00 + 2.4767301876217451e+00 8.2397499714180011e-01 -5.5117117750353852e+00 + 2.3170133862816771e+00 4.1643703369968144e-01 -5.7690591485386049e+00 + 2.1599643564429836e+00 6.5339415779953613e-02 -6.0695226762956898e+00 + 2.0190218416204586e+00 -2.0170885731062016e-01 -6.4410938495417751e+00 + 1.9012881081698727e+00 -3.3503273013274854e-01 -6.9015674348169931e+00 + 1.7523378922762973e+00 -3.0789723968410265e-01 -7.3566420819831118e+00 + id 11313 + loc 2.3875829577445984e-01 9.1328114271163940e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9395014142041177e-01:2.8369731603844461e-01:8.4426655248464311e-01:2.7897856490173245e-01:1.3747369434686127e+00:3.1125722690793428e-01:1.8386225006364869e+00:4.9394520191899760e-01:2.1770684652991159e+00:4.2974631816294451e-01:2.8797323172466895e+00:2.5475658459452272e-01:3.4544073767220063e+00:4.1826199181535278e-01:3.9963755937764387e+00 + CVs 20 + 3.5964001969245268e-01 2.5416184892999300e-01 -2.0785324550383741e-01 + 6.7157889188975728e-01 5.3181499026937462e-01 -4.2512394645219831e-01 + 9.8241990533971935e-01 7.7077327784017635e-01 -6.5538423569918725e-01 + 1.3038653615511027e+00 9.5158780427887157e-01 -8.9978685944602532e-01 + 1.6287081341560135e+00 1.0634695658643292e+00 -1.1473233129822373e+00 + 1.9529857934409602e+00 1.1040805940807910e+00 -1.3812941117351423e+00 + 2.2760034327797056e+00 1.0850360689484373e+00 -1.5911831038977899e+00 + 2.5980425777220297e+00 1.0242000086670431e+00 -1.7759831105347366e+00 + 2.9191114395376947e+00 9.3713392088855108e-01 -1.9415976299738362e+00 + 3.2413308719622034e+00 8.3374809726250110e-01 -2.1021634723915210e+00 + 3.5640187078065639e+00 7.1378437406841477e-01 -2.2730098109596262e+00 + 3.8778696968574997e+00 5.6614941014150055e-01 -2.4639454185712624e+00 + 4.1658686346465625e+00 3.7077582837339396e-01 -2.6839303970143065e+00 + 4.4001921001560014e+00 1.0444881113177851e-01 -2.9480592732034721e+00 + 4.5216893652498555e+00 -2.4492703119515413e-01 -3.2764453056935707e+00 + 4.4531651778914476e+00 -6.1538829478557755e-01 -3.6841774892460362e+00 + 4.2241410953609009e+00 -8.3156959772097361e-01 -4.1445767573934535e+00 + 4.0196507444905558e+00 -8.3579862872565913e-01 -4.5541870296900493e+00 + 3.9480227834090535e+00 -8.3677733852596070e-01 -4.8203782643245496e+00 + id 11314 + loc 7.4777489900588989e-01 5.7513701915740967e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1199256573531404e-01:4.0635782816610094e-01:9.7331927099820081e-02:3.4005090171820035e-01:7.9745978951790419e-01:5.1198744580965672e-01:1.4423340022254623e+00:3.1722804040898128e-01:1.9651715104240421e+00:3.1554519283304483e-01:2.7567593704959528e+00:2.9561606460628270e-01:3.2280426020837067e+00 + CVs 20 + 1.7636206601208410e-01 2.4603875600234978e-01 -2.7064737142876460e-01 + 3.1562943690246986e-01 5.2048781767964292e-01 -4.9426999820721285e-01 + 4.5156400857252138e-01 7.9241748578464610e-01 -7.0567950793188994e-01 + 6.0345838784943751e-01 1.0457794270018184e+00 -9.2823267414250266e-01 + 7.7756599432425288e-01 1.2738684235463162e+00 -1.1730089688169472e+00 + 9.8086504197210345e-01 1.4655000349512286e+00 -1.4427610807611193e+00 + 1.2214678888690647e+00 1.6077014572505812e+00 -1.7307654143238940e+00 + 1.5055030202425805e+00 1.6882958915381050e+00 -2.0240178308609376e+00 + 1.8357911633412767e+00 1.6989160391793843e+00 -2.3068383193669599e+00 + 2.2138598293116858e+00 1.6358253314091036e+00 -2.5668844997162585e+00 + 2.6347820868551661e+00 1.4975812536216935e+00 -2.8039281702946655e+00 + 3.0806478789253511e+00 1.2797708404705190e+00 -3.0311505508928258e+00 + 3.5194652584582355e+00 9.7484565138231405e-01 -3.2667861744672972e+00 + 3.9103316065450753e+00 5.7317350148692925e-01 -3.5271499984441084e+00 + 4.2082574504181745e+00 6.4985220887695538e-02 -3.8353967527747210e+00 + 4.3414220616845842e+00 -5.2399542905311147e-01 -4.2177729325271924e+00 + 4.2538020449943161e+00 -1.0743818831140355e+00 -4.6659745894847369e+00 + 4.0076096939316539e+00 -1.4425288683746720e+00 -5.1234094118133875e+00 + 3.8203361592908212e+00 -1.5251562186739189e+00 -5.3732942953879759e+00 + id 11315 + loc 1.0647183656692505e-01 3.3372393250465393e-01 410 + blend 0.0000000000000000e+00 + interp 4.5931332740639669e-01:3.1543996937596180e-01:3.9597478047352030e-02:4.5930873427312263e-01:9.3076617881346457e-01:2.7559501304288692e-01:1.3635243748144432e+00:4.0598470629605504e-01:1.9011471117027225e+00:3.0328596100910882e-01:2.6855723548635981e+00:2.9083784476222951e-01:3.1960050969189142e+00 + CVs 20 + -1.6634499658258806e-01 1.3138506694022095e-01 -1.0111086085392385e-01 + -3.3302651723064314e-01 2.4170459035146510e-01 -1.7385823655074481e-01 + -5.0589881938024894e-01 3.4908411519359595e-01 -2.5211979422737485e-01 + -6.8016682124216854e-01 4.6334744139767237e-01 -3.4969902261473662e-01 + -8.6018297192792603e-01 5.8648382854583558e-01 -4.7470939608835461e-01 + -1.0501543474711139e+00 7.2106639227884672e-01 -6.4109000684467099e-01 + -1.2398583018127638e+00 8.6933883167133597e-01 -8.6061495930999721e-01 + -1.4068204500298094e+00 1.0291935798516942e+00 -1.1349344621592234e+00 + -1.5315712357994082e+00 1.1921374650385033e+00 -1.4588430790500462e+00 + -1.6001830961406700e+00 1.3486623309754091e+00 -1.8198051680690570e+00 + -1.5980005052926898e+00 1.4979474068920391e+00 -2.1649737622737666e+00 + -1.5280778763089913e+00 1.6484258261197873e+00 -2.3948081039958842e+00 + -1.4063566248807629e+00 1.8104813016725774e+00 -2.4731475499205500e+00 + -1.2524673293145760e+00 1.9698674827676901e+00 -2.5115909806171977e+00 + -1.1151277491158673e+00 2.0891583432485463e+00 -2.6173799981618169e+00 + -1.0135202295190997e+00 2.1601140007189095e+00 -2.7724950749731292e+00 + -9.3716981000120980e-01 2.1943266174836600e+00 -2.9286446559806754e+00 + -8.9909645154555295e-01 2.1918353790311134e+00 -3.0768436465184967e+00 + -1.0565257262092551e+00 2.0737366155332300e+00 -3.2895201024106608e+00 + id 11316 + loc 5.0304943323135376e-01 2.2309830784797668e-01 1070 + blend 0.0000000000000000e+00 + interp 7.3351829256816947e-01:4.1593970243878403e-01:4.3659124963227836e-01:4.4241928600284103e-01:1.0184395690425703e+00:3.2143244272916854e-01:1.5932403664690777e+00:4.0371266565382286e-01:2.0642991984432992e+00:7.3351095738524386e-01:3.4295986236601452e+00:3.3890123430884328e-01:3.8984785356406935e+00 + CVs 20 + 2.2181431620147499e-01 3.6040082643510096e-01 -1.9703172777714573e-01 + 3.8447279046619753e-01 6.3708470302782338e-01 -2.6830068256913603e-01 + 5.0722851087586718e-01 8.6322433434286627e-01 -2.8025883978210303e-01 + 5.9258471449403116e-01 1.0413083263271563e+00 -2.6699226694843020e-01 + 6.5922895756766398e-01 1.1871791474127806e+00 -1.9935262763077821e-01 + 7.3183712131018352e-01 1.3789265930664554e+00 -4.5383630025864874e-02 + 8.0668032435966919e-01 1.7002794100292853e+00 1.1449475078632676e-01 + 8.6939299788850433e-01 2.1404340243157440e+00 1.5919543748703613e-01 + 9.3450586383032430e-01 2.6637404085948164e+00 3.4260367844540340e-02 + 1.0512208798143714e+00 3.2324369597201912e+00 -3.0488388761991136e-01 + 1.2972397544910472e+00 3.7157270182971018e+00 -8.6369531953987710e-01 + 1.6944652978285495e+00 3.9454539654369407e+00 -1.5180943189521166e+00 + 2.1781531208418512e+00 3.8792067775354915e+00 -2.1340141844099447e+00 + 2.6577192269229215e+00 3.5607466940460428e+00 -2.6358911361640640e+00 + 3.0800600593187735e+00 3.0662687300106710e+00 -2.9831698474607382e+00 + 3.4538996817672878e+00 2.4407862692801454e+00 -3.1746328031874653e+00 + 3.7590246395346094e+00 1.6918851681459881e+00 -3.1896905671344191e+00 + 3.8939169692522864e+00 9.4324119845895660e-01 -2.9910901354331951e+00 + 3.8637887539949576e+00 6.1171820741198535e-01 -2.7231131008404068e+00 + id 11317 + loc 6.6654686816036701e-03 1.2376679480075836e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7572180730749299e-01:3.5533935769615566e-01:3.1971697668273080e-01:3.1972389539418244e-01:1.0096435240637738e+00:2.8343711755373879e-01:1.8097923014815500e+00:2.9728341522040824e-01:2.2662163901555887e+00:3.7571805008941994e-01:2.9739069610859405e+00:2.6045411273952029e-01:3.7532696867103015e+00 + CVs 20 + -1.4793114352129980e-01 4.0627074293106263e-01 -1.0743932094114864e-01 + -3.1170901922554817e-01 8.3278334873080762e-01 -2.0098098723812666e-01 + -4.7194213540412905e-01 1.2804213566632052e+00 -2.5544860281490062e-01 + -6.0029395492768511e-01 1.7408846390713768e+00 -2.5197114781870378e-01 + -6.9905887040189540e-01 2.2075883363623610e+00 -1.9316701673354697e-01 + -8.5082305965240446e-01 2.6721347446921500e+00 -1.1608996051353082e-01 + -1.1653737934184889e+00 3.0608080327914129e+00 -8.9760245950553208e-02 + -1.6169191602388628e+00 3.2542940810851713e+00 -1.7555541919149764e-01 + -2.0623015234722608e+00 3.2141472594728766e+00 -3.9184835355790837e-01 + -2.3651519275171955e+00 3.0100550801289323e+00 -7.0771571193186067e-01 + -2.4939235302815215e+00 2.7544929877710413e+00 -1.0652767707601731e+00 + -2.4967396077230091e+00 2.4963298521352906e+00 -1.4137223950746136e+00 + -2.4265839121967470e+00 2.2250409814368517e+00 -1.7200109640821257e+00 + -2.3017330554168698e+00 1.9102448170213857e+00 -1.9476114513462497e+00 + -2.1284863636925428e+00 1.5579443393039605e+00 -2.0397176938144406e+00 + -1.9170309538724970e+00 1.2434335679457975e+00 -1.9665806261712242e+00 + -1.6969927758538665e+00 1.0852055078429861e+00 -1.7295276671540798e+00 + -1.5813568349604461e+00 1.1155773719730400e+00 -1.4499396148382337e+00 + -1.4251422822702415e+00 1.0216015866119086e+00 -1.2081434084034932e+00 + id 11318 + loc 5.0775855779647827e-01 7.7970671653747559e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7555787297922675e-01:3.0514946638851365e-01:4.7658768040811050e-01:2.7880770494061025e-01:1.5882701102286401e+00:4.1566131861988687e-01:2.0290155741131897e+00:3.8287757581920423e-01:2.8831355424921252e+00:4.7555311740049699e-01:3.1628401789123108e+00:3.3570713465109092e-01:3.9015171543646670e+00 + CVs 20 + 6.8702231332715330e-02 3.9012560847439187e-01 -1.2703450060128735e-01 + 1.6931806698881477e-01 7.4118797503612588e-01 -2.8694508646474215e-01 + 2.7759698135731325e-01 1.0580945641659976e+00 -4.7173850538194750e-01 + 3.7903933777486953e-01 1.3388114412831162e+00 -6.7767628029162985e-01 + 4.6589744498833646e-01 1.5800677073048481e+00 -9.0327802298692872e-01 + 5.3530385098576605e-01 1.7814432369914084e+00 -1.1429934934086730e+00 + 5.9363202688210159e-01 1.9458399122632590e+00 -1.3897258397740899e+00 + 6.4931175939963093e-01 2.0795597856000532e+00 -1.6367264618390047e+00 + 7.0563468132887652e-01 2.1939092747105624e+00 -1.8777129619132955e+00 + 7.6810010916438798e-01 2.3052934708565056e+00 -2.1053580257508480e+00 + 8.5378542806251367e-01 2.4391257218317017e+00 -2.3037842494355192e+00 + 1.0069425584596341e+00 2.6399210678171325e+00 -2.4653661407097927e+00 + 1.2755734136142314e+00 2.8515364382736159e+00 -2.6456118145632228e+00 + 1.5516785038058249e+00 2.8963225611452375e+00 -2.8590565399399508e+00 + 1.7654825566167383e+00 2.7809494096809297e+00 -3.0355888597934699e+00 + 2.1007234944799031e+00 2.5598279213711419e+00 -3.1358980536418906e+00 + 2.6972578925909310e+00 2.0407815043355200e+00 -3.1511843015441254e+00 + 2.9444614490929144e+00 1.3742272193599525e+00 -3.0512363996264154e+00 + 2.6501164597631295e+00 1.4295837431639749e+00 -2.8851256185169958e+00 + id 11319 + loc 7.6299774646759033e-01 9.7695469856262207e-01 410 + blend 0.0000000000000000e+00 + interp 5.1976986833508132e-01:5.0050851800032370e-01:3.0744388742341577e-01:2.9183089413501173e-01:8.7901389164030574e-01:5.1976467063639797e-01:1.1519399506302350e+00:4.7034538212797888e-01:1.8892669694477875e+00:2.7319076112155061e-01:2.1335371670145493e+00:3.4297615159984540e-01:3.3416426765576510e+00:4.8692583926299715e-01:3.8833856044004920e+00 + CVs 20 + 6.9715249817542913e-01 2.1086242571868283e-01 -2.0780430638370806e-01 + 1.2667313555892210e+00 3.2163373095985326e-01 -3.9945511136793249e-01 + 1.8218473407378211e+00 4.0171151526301629e-01 -5.7074114547026378e-01 + 2.3775827983748834e+00 4.5652161163373883e-01 -7.3535912741544851e-01 + 2.8937182222636242e+00 4.6327361627874142e-01 -9.1389511010674984e-01 + 3.3324079932252184e+00 4.0713886332434357e-01 -1.1196810221224416e+00 + 3.6785684550695814e+00 2.9227836301713772e-01 -1.3546896192073867e+00 + 3.9481279793035884e+00 1.3360504693832254e-01 -1.6153209769443735e+00 + 4.1645799438592874e+00 -6.0829252225561126e-02 -1.8954131176840510e+00 + 4.3379203496321264e+00 -2.9112169514130670e-01 -2.1807771332435397e+00 + 4.4787572643139688e+00 -5.6593073867500565e-01 -2.4645416556677424e+00 + 4.6015093004147563e+00 -8.9756047309642040e-01 -2.7547606155319215e+00 + 4.7135485702628097e+00 -1.2630872717680750e+00 -3.0574642704585728e+00 + 4.8202454097478924e+00 -1.6155779335776885e+00 -3.3693211017997746e+00 + 4.9233148878480870e+00 -1.9370137556097879e+00 -3.6756903824675615e+00 + 5.0291497200812518e+00 -2.2489622451120361e+00 -3.9888085482016518e+00 + 5.1462996938105636e+00 -2.5809700012709227e+00 -4.3371318279385154e+00 + 5.2811922138631093e+00 -2.9457836875169603e+00 -4.6962229655612973e+00 + 5.4659488431426606e+00 -3.3248836290768078e+00 -4.9759701497975177e+00 + id 11320 + loc 9.7540110349655151e-01 3.8096639513969421e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6173862431650192e-01:4.0182419356688287e-01:6.2883379029778474e-02:4.5314570598395199e-01:4.2968738474247581e-01:3.0877260767675058e-01:1.1900608625976863e+00:3.0347098667483313e-01:1.9951700394216729e+00:4.6173400693025879e-01:2.3913115260511271e+00:3.2830931101754840e-01:3.1006471739323582e+00 + CVs 20 + -1.7292773451951404e-01 2.7580137334260957e-01 2.2332904832944564e-01 + -3.5690877510982677e-01 5.5062944138267444e-01 4.3497241902840561e-01 + -5.6193925909462661e-01 8.2159222188620784e-01 6.4079359859412222e-01 + -7.8951458665337948e-01 1.0864082937944508e+00 8.4770867985788967e-01 + -1.0349735285543848e+00 1.3431330532697401e+00 1.0650755659865661e+00 + -1.2903141993952882e+00 1.5887331603147858e+00 1.3043762759477593e+00 + -1.5453862960838074e+00 1.8184053159406999e+00 1.5779990896602243e+00 + -1.7888978620474805e+00 2.0236179169661646e+00 1.8962381033692153e+00 + -2.0096873192208111e+00 2.1914584025686210e+00 2.2622973726695399e+00 + -2.2000274696099162e+00 2.3074670160490744e+00 2.6681451067629505e+00 + -2.3588017968675690e+00 2.3602932437947066e+00 3.0950455656452713e+00 + -2.4924659555836617e+00 2.3472342936876598e+00 3.5164009422175009e+00 + -2.6129185443220537e+00 2.2775362990758889e+00 3.9069512035381173e+00 + -2.7267053936953514e+00 2.1692573509898052e+00 4.2542766151850460e+00 + -2.8343078960798835e+00 2.0372995765584188e+00 4.5619249030498850e+00 + -2.9370813042424366e+00 1.8795943376043600e+00 4.8478032645475277e+00 + -3.0410557751980622e+00 1.6756031047585229e+00 5.1258174717085074e+00 + -3.1475078681435473e+00 1.4157810343953710e+00 5.3781854615898297e+00 + -3.2429619801808918e+00 1.1585860976607987e+00 5.5200087127788677e+00 + id 11321 + loc 4.6941488981246948e-01 4.8526945710182190e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2618335887704589e-01:3.9775804504001278e-01:9.9222560612122201e-05:2.6629844760776467e-01:7.5651316429310178e-01:2.9455944312581067e-01:1.6794674463972641e+00:3.7979076380369420e-01:2.0333266873129885e+00:4.2617909704345713e-01:2.8790406636128347e+00:3.6774736618017539e-01:3.2883644389682747e+00 + CVs 20 + -2.2632832390143914e-01 2.3855054541249712e-01 1.4999741918954451e-03 + -4.4117629389201435e-01 4.7193970398298657e-01 -2.8271087429166619e-02 + -6.4263297687510446e-01 7.0397867155746607e-01 -7.7625335239219606e-02 + -8.3759285609487666e-01 9.3755441064393019e-01 -1.4572881921045866e-01 + -1.0365297398513171e+00 1.1715186666021702e+00 -2.3763667771157682e-01 + -1.2437813851789399e+00 1.4057488302717895e+00 -3.4840341928850094e-01 + -1.4559553621202614e+00 1.6416753943720057e+00 -4.6624343662321877e-01 + -1.6683422940878345e+00 1.8802033694743661e+00 -5.8437100259895203e-01 + -1.8860909367443293e+00 2.1213106250551239e+00 -7.0603506745361977e-01 + -2.1342999484754270e+00 2.3628797484388087e+00 -8.3822745701847590e-01 + -2.4534643668175584e+00 2.5848124854849468e+00 -9.8280864559144898e-01 + -2.8643651583433205e+00 2.7336070383113698e+00 -1.1318886350192301e+00 + -3.3276860021095671e+00 2.7560487897303467e+00 -1.2727015201333467e+00 + -3.7716312631188949e+00 2.6517384255491150e+00 -1.4037027911400735e+00 + -4.1649863056857619e+00 2.4491708394276923e+00 -1.5382582794024287e+00 + -4.5225364368336294e+00 2.1514634674773934e+00 -1.6837251027494697e+00 + -4.8643648355694085e+00 1.7376080649229346e+00 -1.8202317207925891e+00 + -5.1714900873728027e+00 1.2296921270587164e+00 -1.8985121785888395e+00 + -5.2955445125261065e+00 9.0307573750499337e-01 -1.9301780625225422e+00 + id 11322 + loc 6.8531984090805054e-01 9.9107176065444946e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3343800895705431e-01:3.2539160129037442e-01:3.0243279900166176e-04:4.0532357402035085e-01:7.0072492658851182e-01:4.3343367457696474e-01:1.5305343877575566e+00:2.1263647940444277e-01:2.1942838165606711e+00:3.0452164598649795e-01:3.1429373420498985e+00 + CVs 20 + -2.3939125307528336e-01 3.2053307218408034e-01 1.2526267717736728e-01 + -4.4663793301773158e-01 6.2689898103809294e-01 2.4053769928054616e-01 + -6.0963374827074590e-01 9.3700133964755450e-01 3.7197748984519502e-01 + -7.5233095794312865e-01 1.2342655619364726e+00 4.7038512995279369e-01 + -8.9962283278142552e-01 1.4802697590311806e+00 4.7286879689362804e-01 + -1.0446388325896521e+00 1.6538664367850471e+00 3.7526951671334663e-01 + -1.1495083281414105e+00 1.7458643988621012e+00 2.1400733921067627e-01 + -1.1639657148906046e+00 1.7671033803120753e+00 5.8221194814104926e-02 + -1.0928863364174513e+00 1.7631604270267531e+00 -2.8590503431400127e-02 + -9.8643719103548178e-01 1.7615369915926522e+00 -8.0070290369204988e-02 + -8.5091180453162796e-01 1.7593229640350097e+00 -1.2873337199571666e-01 + -6.9976228879735336e-01 1.7664570665592898e+00 -1.5450851568932833e-01 + -5.2345037099441805e-01 1.7650344483203653e+00 -1.7058060647046769e-01 + -2.4556856106571481e-01 1.6737517956609191e+00 -1.9802581118074658e-01 + 1.5352985375510850e-01 1.4334098969757356e+00 -2.6435187689916084e-01 + 5.8505787809133469e-01 1.0838239766200113e+00 -4.6249663074385139e-01 + 9.4044708935515831e-01 7.5878697202441336e-01 -8.8312915266108760e-01 + 1.1227786797736814e+00 6.6395085266577336e-01 -1.4017391858878419e+00 + 1.1828776506960148e+00 7.4279017781086776e-01 -1.5948885632501852e+00 + id 11323 + loc 7.0260155200958252e-01 2.8199586272239685e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7820951267485945e-01:4.3624118254073779e-01:3.5186504575520527e-02:3.3684929360761706e-01:9.9603365874133665e-01:2.4421160956806826e-01:1.8456924799439203e+00:4.7820473057973273e-01:2.4867695860662771e+00:3.7156075894765395e-01:2.9977904997849847e+00:4.2111259926989286e-01:3.6014733680892976e+00 + CVs 20 + -1.0089465972463510e-01 2.0272209671209257e-01 2.7099186960432176e-01 + -1.5732911014350925e-01 4.0907641758814861e-01 5.0955711514024982e-01 + -1.7821217810960616e-01 6.0273139283912980e-01 7.2814500626103895e-01 + -1.7199911029357515e-01 7.8466351033828263e-01 9.4346679609163098e-01 + -1.4639117479365826e-01 9.6521643451692796e-01 1.1735507645641692e+00 + -1.1601472258822337e-01 1.1502228718637202e+00 1.4406956808123808e+00 + -1.0249567332511378e-01 1.3354091672824295e+00 1.7614410453422669e+00 + -1.3058590137115639e-01 1.5059738941682326e+00 2.1396233462290666e+00 + -2.2085345009878204e-01 1.6439987708877881e+00 2.5588950311874021e+00 + -3.7845978157272958e-01 1.7395648091260292e+00 2.9828135831092375e+00 + -5.9118011493106692e-01 1.7991401376284228e+00 3.3778208480790402e+00 + -8.4390582687971993e-01 1.8358470721920295e+00 3.7316385928429501e+00 + -1.1258052310311677e+00 1.8526621666652014e+00 4.0467640186393874e+00 + -1.4267728694285293e+00 1.8474608861945632e+00 4.3130728750606400e+00 + -1.7505804191438548e+00 1.8359813397763418e+00 4.4982503138606891e+00 + -2.0989712237417959e+00 1.8146157083888919e+00 4.5700389430104744e+00 + -2.4404575483780282e+00 1.7369293062075788e+00 4.5078056314917943e+00 + -2.6856431368198423e+00 1.5784535600114906e+00 4.4300109915409758e+00 + -2.5058541702834263e+00 1.5583461076206471e+00 4.8000769524003291e+00 + id 11324 + loc 8.8321614265441895e-01 7.0208740234375000e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1016482818899963e-01:4.1016072654071778e-01:4.2382424062252011e-01:3.4127861980827595e-01:1.2307764728401023e+00:3.3088944510808976e-01:1.9609687357830698e+00:3.4542455086724699e-01:2.7201573989733774e+00:3.3330851583238963e-01:3.4782191284871997e+00 + CVs 20 + 7.4022389997884380e-02 2.7629521052679978e-01 -1.9299410605274625e-01 + 1.3376343037676802e-01 5.4197621583559108e-01 -3.5546723638430805e-01 + 1.9544779753218888e-01 8.0557519504852582e-01 -5.0234241429873006e-01 + 2.7085694773455704e-01 1.0706454141186093e+00 -6.4166130292615109e-01 + 3.6809320157844411e-01 1.3388147662749379e+00 -7.7709260667341495e-01 + 4.9703449841566033e-01 1.6092111521293706e+00 -9.1211010673085458e-01 + 6.7106841686988328e-01 1.8794939004961422e+00 -1.0502139210236816e+00 + 9.0464782008355782e-01 2.1434950930755541e+00 -1.1999314220879809e+00 + 1.1998826186163356e+00 2.3866546598494192e+00 -1.3833557391573801e+00 + 1.5400722069311270e+00 2.5898245521809753e+00 -1.6284358919528428e+00 + 1.9036749644301560e+00 2.7351756683193602e+00 -1.9506928693107390e+00 + 2.2700917908326428e+00 2.8044226432110837e+00 -2.3496715084306841e+00 + 2.6165635069451429e+00 2.7820113061732563e+00 -2.8158008412730560e+00 + 2.9220369202411622e+00 2.6582744278530832e+00 -3.3362277065312278e+00 + 3.1683057454172121e+00 2.4222838638700228e+00 -3.8911706883253543e+00 + 3.3409559343958093e+00 2.0566284186386459e+00 -4.4405939698052466e+00 + 3.4268365210806850e+00 1.5566319078881588e+00 -4.9186244088922315e+00 + 3.4178287994095964e+00 9.6761951570911509e-01 -5.2441950383212612e+00 + 3.3329131971753485e+00 6.1751581210806827e-01 -5.1978948364903053e+00 + id 11325 + loc 5.7412284612655640e-01 6.5706807374954224e-01 410 + blend 0.0000000000000000e+00 + interp 4.0226026864326270e-01:2.6422147930183854e-01:2.8311667310983757e-01:3.5999394843251609e-01:1.2120440863110624e+00:2.4745525162235110e-01:2.0524609103245379e+00:3.0764334640711882e-01:2.9079047739070720e+00:4.0225624604057630e-01:3.5033930314183124e+00 + CVs 20 + 2.9255053248769364e-01 1.4374455884242104e-01 -1.7487479587814536e-01 + 5.2983959969891159e-01 2.5190760530232881e-01 -3.2004533965108917e-01 + 7.5448673234007713e-01 3.3520764232244216e-01 -4.5782221131067241e-01 + 9.8906227179331763e-01 3.9885325154444967e-01 -5.9791551082847694e-01 + 1.2300352775530681e+00 4.3933593752314304e-01 -7.3686506483329739e-01 + 1.4716619477734549e+00 4.5400014414583867e-01 -8.7174213977331727e-01 + 1.7078235109866369e+00 4.4246043082317765e-01 -9.9841368708040845e-01 + 1.9329810955487114e+00 4.0668130723296236e-01 -1.1118836281408662e+00 + 2.1422356538761878e+00 3.4974740534805593e-01 -1.2088585595981711e+00 + 2.3323073651870918e+00 2.7510785826173589e-01 -1.2892129006399629e+00 + 2.5016469764598042e+00 1.8883521747489052e-01 -1.3519897717772573e+00 + 2.6436752059761872e+00 1.0381933992793968e-01 -1.3855911950911401e+00 + 2.7459207671672390e+00 3.3135343540665829e-02 -1.3732029137219361e+00 + 2.8153675905312614e+00 -2.9398976071552507e-02 -1.3177893070445095e+00 + 2.8720465867995113e+00 -1.0284366162609904e-01 -1.2385521639447721e+00 + 2.9248056411146939e+00 -1.9394775660267149e-01 -1.1429848380844907e+00 + 2.9801178629529099e+00 -3.0316694848967973e-01 -1.0292046472443863e+00 + 3.0438485121576027e+00 -4.3690826761168733e-01 -9.0959269795960040e-01 + 3.0763882628824488e+00 -6.6377370478458109e-01 -9.3353462780287433e-01 + id 11326 + loc 2.3904095869511366e-03 7.9451626539230347e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5064609808207740e-01:3.4877290363845348e-01:3.5192837014640010e-01:4.0403489781450386e-01:9.9662137494710634e-01:2.0965571804815766e-01:1.6704301683782821e+00:2.8707738319745113e-01:2.1207554875244026e+00:4.5064159162109657e-01:3.0000226775336909e+00:3.4545664075551563e-01:3.6465049881204599e+00 + CVs 20 + 1.4147292739389536e-01 2.8788507915698325e-01 -2.1651660346319315e-01 + 2.9745184447869588e-01 5.8013891439190657e-01 -4.0779792385221059e-01 + 4.6194265437450666e-01 8.5202759303475095e-01 -6.0489859865783102e-01 + 6.3326393632297406e-01 1.0937155925475992e+00 -8.1802077464267398e-01 + 8.0994046244998807e-01 1.2963245196788051e+00 -1.0457333844245806e+00 + 9.8859656053373857e-01 1.4484478902237266e+00 -1.2845215193704185e+00 + 1.1640060117967541e+00 1.5444712326121739e+00 -1.5317525081478820e+00 + 1.3295269876101683e+00 1.5863121135742024e+00 -1.7864311866393281e+00 + 1.4768532821106861e+00 1.5771672040130589e+00 -2.0459665628206380e+00 + 1.5970690617730803e+00 1.5201667014464060e+00 -2.3049857321882250e+00 + 1.6824489678068477e+00 1.4196829058911429e+00 -2.5557189181492772e+00 + 1.7277980388327312e+00 1.2821974926290238e+00 -2.7879405659015606e+00 + 1.7318994993355314e+00 1.1165464167318273e+00 -2.9911738852888328e+00 + 1.6976731074131868e+00 9.3258478091545416e-01 -3.1574938049076979e+00 + 1.6295597828352841e+00 7.4235776102610440e-01 -3.2795211682883569e+00 + 1.5299492914900830e+00 5.8052683538169680e-01 -3.3406563053802114e+00 + 1.4009652427537278e+00 5.5147596727559467e-01 -3.3385228822058699e+00 + 1.2660538650913935e+00 6.8827269302655159e-01 -3.3895070567588381e+00 + 1.1277410089441715e+00 5.3161136763746852e-01 -3.2606935170760365e+00 + id 11327 + loc 8.8649797439575195e-01 4.5190095901489258e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0521512889414821e-01:4.4538676955972945e-01:7.0539121966835827e-01:3.4453644957810481e-01:1.0304895691307585e+00:2.7991687185377634e-01:1.9974060869838959e+00:5.0521007674285934e-01:2.6114798135847979e+00:4.7433229369337299e-01:3.0000105985281360e+00:2.6588535413129222e-01:3.4350217070682909e+00:4.4629951307121524e-01:3.9997801425750814e+00 + CVs 20 + -1.5124996666028379e-01 2.4477000729547504e-01 2.0379983955234268e-01 + -2.4482719902385067e-01 5.4874132905838913e-01 4.0804863293366156e-01 + -3.2235920070739638e-01 8.8841549233995742e-01 6.0699239223191626e-01 + -4.2535989208838371e-01 1.2428104803132638e+00 8.1817992327418354e-01 + -5.9828580867526715e-01 1.5781733748264819e+00 1.0725611703938374e+00 + -8.7302002940815648e-01 1.8314069255905823e+00 1.3806201175352404e+00 + -1.2595062077896406e+00 1.9234794154640331e+00 1.7077303849433711e+00 + -1.7287989631269158e+00 1.8093735282825441e+00 1.9568151890671241e+00 + -2.2088904954259228e+00 1.5422074276703941e+00 2.0389194205147496e+00 + -2.6481138506422131e+00 1.2151344034775651e+00 1.9596612846073735e+00 + -3.0347694475764233e+00 8.6276415634094950e-01 1.7459927327175848e+00 + -3.3370741683994458e+00 4.8851148780722320e-01 1.3930091400947047e+00 + -3.5107025711209645e+00 1.2155939973923502e-01 9.3974960588951384e-01 + -3.6177987711515316e+00 -2.0140147648229867e-01 5.2520206511406431e-01 + -3.8081597396048719e+00 -4.6420000274830375e-01 2.5061844154294211e-01 + -4.1538336468518269e+00 -5.8235100794800387e-01 1.2471308869391345e-01 + -4.5953810775389039e+00 -3.8722299958229578e-01 1.7963880794186676e-01 + -4.9084069109766597e+00 2.5845737962558735e-02 3.8548470612201996e-01 + -5.2923601949774808e+00 3.6787977559309848e-02 2.3711288274028341e-01 + id 11328 + loc 8.5015721619129181e-02 7.3130798339843750e-01 1070 + blend 0.0000000000000000e+00 + interp 2.5497746308182645e+00:2.5497646308182644e+00:1.9366523193962122e+00:2.2424038191231901e+00:1.9510483273644030e+00:3.1518192307960935e-01:1.9909206964967159e+00:4.8316839740533468e-01:2.4013728498537024e+00:4.2466330470954194e-01:2.9780636974821673e+00:3.4184429347398915e-01:3.4880022830924990e+00:6.6271434995844281e-01:3.9346502812520927e+00 + CVs 20 + -3.2470924282126923e-01 2.8712360617641136e-01 3.8140332373409741e-01 + -5.9091157247482962e-01 5.0664237602276241e-01 6.4288115221932318e-01 + -8.0453146482484605e-01 7.1622406514260539e-01 8.9960584351012141e-01 + -9.6826809349563714e-01 9.2695206441331013e-01 1.1620654140629532e+00 + -1.1089615314727228e+00 1.1276619475521596e+00 1.3764169204807239e+00 + -1.2481846947292401e+00 1.3146991290721770e+00 1.5191866178915139e+00 + -1.3839108391934238e+00 1.4757088070355928e+00 1.6131766189889722e+00 + -1.5189559155293932e+00 1.6079787543095123e+00 1.7222821753297652e+00 + -1.7150466401478672e+00 1.7474221882316652e+00 1.8765931251315784e+00 + -1.9649223622247729e+00 1.8881893580594329e+00 1.9242555920559381e+00 + -2.1382177664127329e+00 2.0032225616481312e+00 1.8229331020300776e+00 + -2.2130521964013536e+00 2.1004746412509308e+00 1.6279376055531953e+00 + -2.1550119248808466e+00 2.1227946753660545e+00 1.4188108020147623e+00 + -1.9545405745918014e+00 2.0126822382798446e+00 1.3267035489758734e+00 + -1.6608904627249284e+00 1.7655627447932081e+00 1.3672345963074948e+00 + -1.3185020645730348e+00 1.3653989622046341e+00 1.4454538117703912e+00 + -9.0121825544613621e-01 6.9002664556713778e-01 1.3849530499414542e+00 + -6.3151812308311084e-01 1.0138541148865055e-01 9.0382916267365765e-01 + -7.2097406140081766e-01 2.0161538190993639e-01 7.8438058546933520e-01 + id 11329 + loc 7.7397656440734863e-01 2.0995160937309265e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8205749566305303e-01:2.7867919546261499e-01:5.4170080730941761e-01:2.9562834350980977e-01:1.0392309880613175e+00:3.8205367508809640e-01:1.9404658519237468e+00:2.9732449267896482e-01:2.2296117556268054e+00:2.7821086990256078e-01:3.4049303288795798e+00 + CVs 20 + -1.0872744289456446e-01 2.6673428232193563e-01 1.6843465671093469e-01 + -2.2783213856976556e-01 5.5373724355636122e-01 3.3490827930606082e-01 + -3.5370776505127322e-01 8.5880892717634461e-01 4.8922070570204151e-01 + -4.8111946447693543e-01 1.1794400480912934e+00 6.3230124012331324e-01 + -6.0427619669751398e-01 1.5133501602180777e+00 7.7425989995381039e-01 + -7.1647177335199452e-01 1.8572156965221240e+00 9.2996244985916232e-01 + -8.1085092345040077e-01 2.2058065705243144e+00 1.1186338398904343e+00 + -8.8001223017781560e-01 2.5492681987785364e+00 1.3619549448581132e+00 + -9.1456875426873052e-01 2.8692675853791587e+00 1.6785119793451140e+00 + -9.0506709424128651e-01 3.1394456952923511e+00 2.0780243425867804e+00 + -8.4602831847307169e-01 3.3282694289509691e+00 2.5576145860478761e+00 + -7.4010653051789810e-01 3.4058546417973123e+00 3.0964389203938358e+00 + -6.0155645557691984e-01 3.3538740766242823e+00 3.6661458528089654e+00 + -4.5397731673130226e-01 3.1627531830829567e+00 4.2437955589564362e+00 + -3.2530183656868716e-01 2.8260341296970211e+00 4.8082350624243162e+00 + -2.4188039910353176e-01 2.3409763025768253e+00 5.3323948719636540e+00 + -2.1661741974882565e-01 1.7268157870484211e+00 5.7721258321219873e+00 + -2.3060802287035032e-01 1.0596794542603591e+00 6.0787336071770959e+00 + -1.8227564925905526e-01 6.9030541383423150e-01 6.2232619893119496e+00 + id 11330 + loc 6.4856249094009399e-01 8.1625849008560181e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7132035076809092e-01:4.3917140027936452e-01:5.3857987478070690e-02:3.9680160728717273e-01:7.7283388484587046e-01:4.6058853556772839e-01:1.0848612129402129e+00:4.7131563756458328e-01:1.6573251264156550e+00:2.9244384941875967e-01:2.0421742190883068e+00:4.1181538403233842e-01:2.7901081331774931e+00:2.8273265749167609e-01:3.6779514497850201e+00 + CVs 20 + -2.6794299170235453e-01 4.2516895672796851e-01 1.1992838683696144e-01 + -4.7976315270983771e-01 8.3961133816224809e-01 2.3941808052352770e-01 + -6.4440259372525954e-01 1.2570129931174776e+00 3.7712780386360822e-01 + -8.2577554466332970e-01 1.6664176522717984e+00 4.5187349047637970e-01 + -1.0607843809050359e+00 2.0135469994078261e+00 3.7177902249703887e-01 + -1.3157740264996627e+00 2.2469493154810145e+00 1.3711370956552393e-01 + -1.5125126333251677e+00 2.3426101919527560e+00 -2.0305727278755947e-01 + -1.5365307106050416e+00 2.3085511914653978e+00 -5.6909031222798401e-01 + -1.3344508060068365e+00 2.2052500412549789e+00 -8.3601633588767776e-01 + -1.0312571257041647e+00 2.1022402256974617e+00 -9.5460960519170290e-01 + -7.3927047858086736e-01 1.9894366672643937e+00 -1.0015750983315965e+00 + -4.5601317867718244e-01 1.8332116255498696e+00 -9.8153905023878796e-01 + -1.9566050581363625e-01 1.6350561759372988e+00 -8.8670203593936603e-01 + 2.3580566430255689e-02 1.3912592482129944e+00 -8.3488265778008885e-01 + 2.0579813695695756e-01 1.0791358219410867e+00 -9.5535780797612035e-01 + 3.0108046753189438e-01 7.8283936494548145e-01 -1.2843724735501001e+00 + 2.3541093244758834e-01 7.1502553139701563e-01 -1.7702474872244496e+00 + 1.2005195152517772e-02 9.8842738039331535e-01 -2.1465023916899977e+00 + -5.5652144551657734e-02 9.4838300735486769e-01 -2.3385252809486858e+00 + id 11331 + loc 9.0012633800506592e-01 1.0506589710712433e-01 410 + blend 0.0000000000000000e+00 + interp 5.1669072909456326e-01:3.4132808715228047e-01:9.4638059215111314e-01:4.5997394792806062e-01:1.2590934078983635e+00:4.0558981248222847e-01:1.8489767386262748e+00:5.1434430247779039e-01:2.3719501072737366e+00:3.3273467809923318e-01:2.9759960028642833e+00:5.1668556218727235e-01:3.2828030218463464e+00:3.6408897954962166e-01:3.9998946863860616e+00 + CVs 20 + -3.3997824532073095e-01 4.0212086040802225e-01 1.6124215001302561e-01 + -6.5270546026918519e-01 7.9167915356107399e-01 3.0676983718668838e-01 + -9.7223011713515317e-01 1.1803565976059558e+00 4.6028088201169315e-01 + -1.3113028407631195e+00 1.5581507273710509e+00 6.6481868054991300e-01 + -1.6565626207637483e+00 1.8943485826590090e+00 9.5510385638595985e-01 + -1.9903206093542340e+00 2.1572537232964417e+00 1.3393080545892107e+00 + -2.3106766225686743e+00 2.3217607596569536e+00 1.8048461865128647e+00 + -2.6317682567201328e+00 2.3645063462004656e+00 2.3283369416472453e+00 + -2.9710160285968028e+00 2.2592638345550413e+00 2.8785088210170100e+00 + -3.3349057880017048e+00 1.9772685629152660e+00 3.4113129785331839e+00 + -3.6920995020029892e+00 1.5339634357988159e+00 3.8523037444027159e+00 + -3.9840675365660125e+00 1.0478439231782617e+00 4.1530729590280187e+00 + -4.1960859163342947e+00 6.2544987440041044e-01 4.3541177159641151e+00 + -4.3565574982385824e+00 2.6801715463815934e-01 4.5195382922862031e+00 + -4.4992080583062179e+00 -6.6935338653498322e-02 4.7036901311518147e+00 + -4.6603820910865741e+00 -4.2415847310752808e-01 4.9637882151865176e+00 + -4.8741110493164337e+00 -8.2433090563663991e-01 5.3265791000926077e+00 + -5.1520589972414790e+00 -1.2565447793056406e+00 5.7630087084695960e+00 + -5.4493207304801947e+00 -1.7062077974826448e+00 6.2608638607874321e+00 + id 11332 + loc 3.3994814753532410e-01 6.2600828707218170e-02 1077 + blend 0.0000000000000000e+00 + interp 4.5515654205516254e-01:2.6196705556277594e-01:1.4023216951206008e-01:4.3813942740521339e-01:1.0586769790711508e+00:2.6524851822444617e-01:1.8545499875981240e+00:3.1057695468009378e-01:2.4653497451686484e+00:4.4081031464401360e-01:3.0243561878422964e+00:4.5515199048974203e-01:3.9095383382806812e+00 + CVs 20 + -1.7588434279837653e-01 2.7843623299129616e-01 7.0787708119639095e-02 + -3.7893462263991862e-01 5.4983855951316118e-01 1.3215656734175399e-01 + -6.1436516960366494e-01 8.1012706600953277e-01 1.7870633946814912e-01 + -8.8515234708876211e-01 1.0506614646171957e+00 2.0264119990822965e-01 + -1.1915156256228321e+00 1.2584539149336231e+00 1.9358992537343289e-01 + -1.5287206810421685e+00 1.4192597887071439e+00 1.4273322165999275e-01 + -1.8864698371112252e+00 1.5188564015089034e+00 4.3767781400549266e-02 + -2.2494782972726952e+00 1.5459005322468617e+00 -1.0536754414562000e-01 + -2.5965444889684242e+00 1.4945846021688580e+00 -2.9629356264022866e-01 + -2.9072964127976046e+00 1.3702474681256689e+00 -5.0330378401550391e-01 + -3.1752633459041091e+00 1.1910102347690694e+00 -6.9186041117282182e-01 + -3.4042207072607704e+00 9.7769951391849719e-01 -8.3387985539559395e-01 + -3.5954049180157406e+00 7.5224757882672955e-01 -9.0530716219917617e-01 + -3.7475348417429246e+00 5.4990374405586617e-01 -8.8261560602843692e-01 + -3.8574264789769077e+00 4.2814828085980072e-01 -7.5422833953302759e-01 + -3.9334191058268693e+00 4.3179189281583819e-01 -5.6376602631189576e-01 + -4.0165836497528291e+00 5.4797013435823649e-01 -3.9218737421532912e-01 + -4.1200592257399613e+00 7.4786068273569883e-01 -2.8626959456389584e-01 + -4.3707866343439550e+00 6.2244736474218576e-01 -9.7708634299486091e-02 + id 11333 + loc 1.4605772495269775e-01 1.0126683861017227e-01 1075 + blend 0.0000000000000000e+00 + interp 3.6986163383140364e-01:3.0306021779356601e-01:7.1213269991427919e-01:2.6168924022152862e-01:1.1393383546972482e+00:2.7522292866337150e-01:2.0450819720798954e+00:3.5290240853148064e-01:2.9300279746453821e+00:3.6985793521506533e-01:3.8119127846329208e+00 + CVs 20 + -1.8926241598604240e-01 1.7380858261978344e-01 7.9703560477815752e-02 + -3.9648015102895240e-01 3.7845518483775498e-01 1.7533103963364655e-01 + -6.0224142666229141e-01 6.1660281322421751e-01 2.8564247568106821e-01 + -7.9942979772462130e-01 8.8551761476830693e-01 4.0230717032734786e-01 + -1.0082966861914993e+00 1.1848394425940751e+00 5.0885685010783133e-01 + -1.2514992130826776e+00 1.5094577188248428e+00 5.8497332168984695e-01 + -1.5504968461487154e+00 1.8512826668670592e+00 6.0696086831103213e-01 + -1.9291923138195313e+00 2.1902383482989474e+00 5.2491098231920796e-01 + -2.3688584306344902e+00 2.4508775671569376e+00 2.5973261559563510e-01 + -2.7562318069333607e+00 2.5356235578020936e+00 -1.7801847491697687e-01 + -3.0191292164952919e+00 2.4550834001066777e+00 -6.7735126359139486e-01 + -3.1827426237912100e+00 2.2524743508884217e+00 -1.1601764408054471e+00 + -3.2930381888303710e+00 1.9211654750735976e+00 -1.5804449777526093e+00 + -3.3652813469744451e+00 1.4399123819829995e+00 -1.9316908497462710e+00 + -3.3632623605346104e+00 8.5691907089166808e-01 -2.2803774524881133e+00 + -3.2557156708854667e+00 3.3225162163204369e-01 -2.7237783721723554e+00 + -3.0978725477605011e+00 6.6374921449817714e-02 -3.2799142411997129e+00 + -2.9793617747703163e+00 8.9144768813073316e-02 -3.8477467929438571e+00 + -2.8360603251575101e+00 -5.7238437145743060e-02 -4.4093834732135173e+00 + id 11334 + loc 1.3997372984886169e-01 6.1493670940399170e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1648396482861958e-01:5.1647879998897128e-01:3.4698280563100614e-01:4.5112757787184676e-01:9.1758122434921163e-01:3.1583021650121496e-01:1.4383217206763108e+00:2.9724775326039443e-01:2.3302286876951905e+00:4.5859027157735616e-01:2.9904968208517753e+00:4.6442674202747058e-01:3.4499221802841848e+00:4.8318142232408262e-01:3.9998633855886236e+00 + CVs 20 + 1.3991290953111943e-01 2.9279130046332674e-01 -5.6597227327350813e-02 + 2.4057927914791158e-01 6.0321764505710695e-01 -1.2041151460776758e-01 + 3.3588125680820313e-01 9.1991330592097253e-01 -1.9870327185438022e-01 + 4.4726506884919542e-01 1.2337379865765432e+00 -2.9930827495860585e-01 + 5.8418297186905632e-01 1.5403425202867247e+00 -4.3205919882526511e-01 + 7.5828148496512471e-01 1.8301054839916944e+00 -6.0404530004603196e-01 + 9.8001340828883066e-01 2.0840879535710561e+00 -8.1666244644048369e-01 + 1.2528988187181642e+00 2.2795184059339531e+00 -1.0608654413016427e+00 + 1.5726694091502358e+00 2.3983965995565790e+00 -1.3184661505022071e+00 + 1.9297092732913295e+00 2.4302512350072591e+00 -1.5673504965151910e+00 + 2.3110838287161992e+00 2.3731119079527283e+00 -1.7917826956300322e+00 + 2.7027363692850579e+00 2.2304597009368301e+00 -1.9895605959058003e+00 + 3.0909870613135726e+00 2.0035422002638783e+00 -2.1669096197657569e+00 + 3.4595191061657666e+00 1.6850361118358719e+00 -2.3317791378767261e+00 + 3.7840639072840716e+00 1.2578319880602971e+00 -2.4991559682593398e+00 + 4.0031409007331185e+00 7.1257083274825628e-01 -2.6871001235318901e+00 + 4.0220997746491820e+00 1.0152003841342649e-01 -2.8877778118289452e+00 + 3.8139321957417955e+00 -4.5986066582831553e-01 -3.1045389661072376e+00 + 3.6409484671994017e+00 -5.9921632754700394e-01 -3.1985097579635893e+00 + id 11335 + loc 6.1936122365295887e-03 8.5081434249877930e-01 1074 + blend 0.0000000000000000e+00 + interp 3.5259291160240369e-01:3.5258938567328768e-01:3.2231176872117828e-01:8.1006255716198183e-02:1.0086038775252413e+00:2.9099233803925956e-01:1.7584794244657325e+00:2.8743883567845985e-01:2.9021729711331572e+00:3.3233338531253381e-01:3.6458770030528385e+00 + CVs 20 + 2.0685377751614206e-01 3.7116884671738770e-01 -9.1468922352871185e-02 + 4.2141153274121462e-01 7.5580208990168418e-01 -2.1974200568401425e-01 + 6.4604527567050363e-01 1.1520221965440818e+00 -3.5950193269969699e-01 + 8.8441138530105867e-01 1.5556173843850711e+00 -5.0206420154974818e-01 + 1.1366068978487418e+00 1.9590907316026107e+00 -6.6289111069010409e-01 + 1.3901364801449796e+00 2.3421661696272413e+00 -8.8462345521008579e-01 + 1.6224997221809332e+00 2.6612591233922367e+00 -1.2151519594380669e+00 + 1.8032151026842460e+00 2.8340729111259906e+00 -1.6692513946075391e+00 + 1.8918714774840355e+00 2.7801706123718040e+00 -2.1779357134144184e+00 + 1.8830093182014940e+00 2.5281178497109078e+00 -2.6310533841665684e+00 + 1.8178642130071412e+00 2.1625055908829798e+00 -2.9915923357314580e+00 + 1.7488879570923404e+00 1.7484178468620324e+00 -3.2810220765207387e+00 + 1.7106496151430748e+00 1.3417265758825254e+00 -3.5322639346630447e+00 + 1.7036333235726402e+00 1.0119209873570678e+00 -3.7684865360834983e+00 + 1.7074447674987421e+00 8.0258318322215660e-01 -3.9868754211659385e+00 + 1.7118237738409476e+00 6.8833082890888508e-01 -4.1746334332890420e+00 + 1.7385533072368697e+00 6.1875982128090590e-01 -4.3747964798032442e+00 + 1.8141345726583886e+00 6.3458185968253367e-01 -4.6433081640350569e+00 + 1.9052611693651604e+00 7.7078211879109459e-01 -4.8859868920383427e+00 + id 11336 + loc 1.3238435983657837e-01 5.9996634721755981e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5786791849914971e-01:3.8272723237653539e-01:5.2720848245111707e-01:2.7261437837695646e-01:1.0211474961563451e+00:4.5786333981996474e-01:1.9266976380599248e+00:3.2960755617462162e-01:2.2156833936726796e+00:2.5576770230308182e-01:3.0537200741327548e+00:3.6071992782454981e-01:3.7879203462646425e+00 + CVs 20 + -9.0955556115719788e-03 2.6361975549106820e-01 -4.1170869175920735e-02 + 3.0156657821414634e-03 5.1284155002410059e-01 -1.1675430151912958e-01 + 2.9336864075436009e-02 7.4227281906033282e-01 -2.0391746121402393e-01 + 6.8134495380015980e-02 9.6079872845888559e-01 -2.9561674478830430e-01 + 1.2114007850603969e-01 1.1613908163766065e+00 -3.9918947775496783e-01 + 1.8797860453810378e-01 1.3349533089438137e+00 -5.1414291805413470e-01 + 2.6548924628965315e-01 1.4851655280113598e+00 -6.3322014448846664e-01 + 3.4712473062974702e-01 1.6309517587570919e+00 -7.4788512241539518e-01 + 4.2854013949833181e-01 1.7978871312339753e+00 -8.5098695525377943e-01 + 5.1534524296034179e-01 2.0115380878863607e+00 -9.4249083245529641e-01 + 6.2394138656299969e-01 2.2936036559717259e+00 -1.0442979664474659e+00 + 7.7684688637586929e-01 2.6378886399411594e+00 -1.2125450258539427e+00 + 9.7307111950401393e-01 2.9696663325325190e+00 -1.5062742080295657e+00 + 1.1567882969463685e+00 3.1758403654159966e+00 -1.8963385982815588e+00 + 1.3003718021300332e+00 3.2230661211267231e+00 -2.2938744092641596e+00 + 1.4511627542782128e+00 3.1318997988280106e+00 -2.6639938898448587e+00 + 1.6504577518631289e+00 2.9023442156510137e+00 -3.0000584807966120e+00 + 1.8422645500887449e+00 2.5517270509779850e+00 -3.2839109492446146e+00 + 1.8407364337142162e+00 2.2640025480713257e+00 -3.3794039690821047e+00 + id 11337 + loc 7.3946279287338257e-01 6.2772053480148315e-01 1047 + blend 0.0000000000000000e+00 + interp 3.2217042272252097e+00:3.2216942272252096e+00:2.6289356370956685e-01:3.7202225635186587e-01:3.5415763401859757e-01:4.3598686816250892e-01:1.0007578853148591e+00:2.8260263595529411e-01:1.4528822554864704e+00:3.4869896273873430e-01:2.0003039625125418e+00:5.3284014127083079e-01:2.4715023705827210e+00:2.8277144485165867e-01:2.5057082815927636e+00 + CVs 20 + 2.2952887249079768e-01 7.4498200094108458e-01 -6.3528217343886051e-01 + 5.0821690862002566e-01 1.4420296455231159e+00 -1.2168816488917660e+00 + 8.6360024859358364e-01 2.1193779697552708e+00 -1.7054455690584536e+00 + 1.3341801570060867e+00 2.7416499009967090e+00 -1.9491145622177044e+00 + 1.8694535060820818e+00 3.1813626503869110e+00 -1.8390541840807177e+00 + 2.3512448763181402e+00 3.3478273096062949e+00 -1.4735167423107272e+00 + 2.7011451219035707e+00 3.2523794896138165e+00 -1.0313017833436551e+00 + 2.9192027930081035e+00 2.9821106888820399e+00 -6.3727099243839924e-01 + 3.0437542518921425e+00 2.6307519132911366e+00 -3.2937806281765636e-01 + 3.1092684859953570e+00 2.2454047310160972e+00 -7.3913259153973176e-02 + 3.1087728248973860e+00 1.7644550151272971e+00 2.0408632296649398e-01 + 2.9725166391510056e+00 1.0768296450584058e+00 5.5416903436430054e-01 + 2.6361646257265106e+00 2.2429798587802752e-01 1.0359815957714265e+00 + 2.1385715041193332e+00 -5.8281498670022391e-01 1.7459891948090374e+00 + 1.7177687279724723e+00 -1.0595825460680106e+00 2.7764516911801529e+00 + 1.7259348925975622e+00 -9.0426019267970270e-01 3.8680154302686356e+00 + 2.1130890289259310e+00 -2.5330492671179528e-01 4.5927289303950980e+00 + 2.6340579528577530e+00 6.0071874138649406e-01 4.8873028320688814e+00 + 3.1116114330128024e+00 1.4357425265479493e+00 5.0135738947200723e+00 + id 11338 + loc 9.6535325050354004e-01 9.4052362442016602e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5712945555386386e-01:3.0630712692744372e-01:8.5412142056116247e-01:4.5712488425930836e-01:1.4979136408907934e+00:4.2627268615738007e-01:1.9643278610942390e+00:2.6599237106600909e-01:2.2899387968287219e+00:2.5628154097127387e-01:2.9831367011209142e+00:2.4769223076163144e-01:3.7653095024946879e+00 + CVs 20 + 1.8443459022359646e-01 3.3495869350341234e-01 -3.8095466260970029e-01 + 3.5584589777817666e-01 6.6916646940424140e-01 -7.4723500965759893e-01 + 4.9390039185127688e-01 9.8613419051652151e-01 -1.1308040550584619e+00 + 5.8809748431860487e-01 1.2714257988731310e+00 -1.5376930571206098e+00 + 6.4788915940008440e-01 1.5057223498704169e+00 -1.9610988072636857e+00 + 7.0923582164835652e-01 1.6867839745080653e+00 -2.4040776939070194e+00 + 8.0885570526488926e-01 1.8342128583002080e+00 -2.8791296469740533e+00 + 9.6863779866509858e-01 1.9629279756335274e+00 -3.3878239822796634e+00 + 1.2005480342005139e+00 2.0673086256878492e+00 -3.9148826108884727e+00 + 1.5031077807438180e+00 2.1232234631221409e+00 -4.4435187281977049e+00 + 1.8503863971862211e+00 2.0894573613955720e+00 -4.9640575772637003e+00 + 2.1842841999262350e+00 1.9039230234732396e+00 -5.4702399715461372e+00 + 2.4294290874249840e+00 1.5202827203714584e+00 -5.9374768737561840e+00 + 2.5460863493708081e+00 9.9057083560528070e-01 -6.3261995111136802e+00 + 2.5380087117240042e+00 4.2292430273983850e-01 -6.6287418124343711e+00 + 2.3611858970329460e+00 -5.8603550297375628e-02 -6.8645626044234307e+00 + 1.9986774789349107e+00 -2.4455067336818148e-01 -7.0657734413538016e+00 + 1.6935070905729104e+00 -1.9827202309761560e-01 -7.2422092272270753e+00 + 1.4345976955774320e+00 -3.2046006854497322e-01 -7.3873704024455700e+00 + id 11339 + loc 4.3267992138862610e-01 8.9851343631744385e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7111146842182361e-01:2.7143486427678210e-01:3.3906929998632984e-02:4.1240480387195250e-01:1.0000006706330287e+00:2.7242938409625228e-01:1.8385178331660106e+00:4.7110675730713941e-01:2.3922389178629131e+00:4.5571373613521798e-01:3.0002449527770088e+00:4.7023622801887865e-01:3.3327864592255469e+00 + CVs 20 + 2.1989955913192541e-01 3.3336842322587362e-01 -2.9417096800440751e-01 + 4.4839642640268423e-01 6.4393502110870715e-01 -5.6688219019902297e-01 + 6.9302303667433574e-01 9.2423826986212865e-01 -8.2384994886718210e-01 + 9.5441994301911592e-01 1.1715576529443426e+00 -1.0673952580209889e+00 + 1.2253826379056805e+00 1.3844889822306536e+00 -1.2946151723593389e+00 + 1.4926666925116663e+00 1.5647423767279569e+00 -1.5014139883517894e+00 + 1.7412792224406168e+00 1.7254186582623066e+00 -1.6793272908146806e+00 + 1.9684811322217646e+00 1.8994555691779953e+00 -1.8225483857032965e+00 + 2.1870655976764151e+00 2.0954832565978516e+00 -1.9874394938870490e+00 + 2.3760413531872118e+00 2.2423822696015945e+00 -2.2423378869009563e+00 + 2.4857913425513218e+00 2.2820741974005458e+00 -2.5661321266371133e+00 + 2.4762098543094995e+00 2.1909936009311211e+00 -2.8922458003983382e+00 + 2.3701936227018581e+00 1.9376923316839050e+00 -3.1582501566229322e+00 + 2.2672182858928642e+00 1.4814930672479045e+00 -3.3356218166554843e+00 + 2.2680952564399735e+00 8.3162253684296372e-01 -3.4894288994078599e+00 + 2.4196982192864365e+00 6.5008221487438705e-02 -3.7755151377413911e+00 + 2.7366017855489271e+00 -6.3819164991431154e-01 -4.3543753040830229e+00 + 3.0815142059766787e+00 -8.2414299047649697e-01 -5.0652829218385236e+00 + 3.2162024470189081e+00 -4.2704115917694918e-01 -5.4079177346637453e+00 + id 11340 + loc 6.5369480848312378e-01 3.1501564383506775e-01 410 + blend 0.0000000000000000e+00 + interp 4.7478210530003201e-01:2.8288462482486471e-01:9.6360634451196880e-01:3.1017934731252200e-01:1.9730890535209440e+00:4.7477735747897903e-01:2.3921217096631771e+00:3.9411149340287244e-01:3.0033027152013365e+00:2.8011087362544329e-01:3.9965395366058303e+00 + CVs 20 + -4.0195560186806623e-01 3.2104686895818013e-01 9.9842297464021984e-02 + -7.6376362250011687e-01 5.9017462934738896e-01 2.0036073847775282e-01 + -1.1345146464008260e+00 8.3361591302464866e-01 2.9415328550959130e-01 + -1.5263171813168710e+00 1.0446421065196954e+00 3.9460378534594176e-01 + -1.9173419219897556e+00 1.1953698899309932e+00 5.1940001201973374e-01 + -2.2810097057001832e+00 1.2646481711883348e+00 6.7676334819968931e-01 + -2.5938680870969288e+00 1.2500362097365034e+00 8.6466159249839203e-01 + -2.8357744615739104e+00 1.1684925214629107e+00 1.0715588988095262e+00 + -2.9992443355640299e+00 1.0518799179982510e+00 1.2824326119839111e+00 + -3.0985165149450329e+00 9.3047450108878171e-01 1.4934822383894322e+00 + -3.1730095163741208e+00 7.8134551318845191e-01 1.7159042759156156e+00 + -3.2582954242791882e+00 5.1111628150287380e-01 1.9416407211594326e+00 + -3.3538662387987719e+00 7.7871434104429760e-02 2.1719715154702461e+00 + -3.4502947022922239e+00 -4.7262427559043729e-01 2.4697691756762921e+00 + -3.5502782994967044e+00 -1.0567473793926772e+00 2.9106116464232077e+00 + -3.6736602217058074e+00 -1.5951630492677986e+00 3.5321627575517329e+00 + -3.8697714557006830e+00 -2.0643930607999361e+00 4.3070119964235332e+00 + -4.1839396763009242e+00 -2.4607703485245422e+00 5.1476824426335632e+00 + -4.5485014848516929e+00 -2.7406577171752784e+00 5.9313269795183903e+00 + id 11341 + loc 3.7929630279541016e-01 6.9381093978881836e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3348958057862880e-01:2.7398948164229525e-01:4.4335576301691715e-03:2.6648262073727347e-01:9.7653396927076064e-01:4.3348524568282304e-01:1.2691050692649988e+00:3.7211600864422023e-01:1.9984097484080863e+00:3.9324201040410789e-01:2.7534998046645125e+00:3.2266600734595435e-01:3.1314440295559702e+00 + CVs 20 + -3.1024627123647253e-01 3.6079174126798275e-01 2.6082757022318293e-01 + -5.6627357519986998e-01 6.3912863259368224e-01 4.7637428658419784e-01 + -7.7581984544174198e-01 8.8154443638867397e-01 7.0786590460667476e-01 + -9.6579747285842543e-01 1.1086240757689136e+00 9.4327329990617426e-01 + -1.1675100356038397e+00 1.3216587428914370e+00 1.1279760227948590e+00 + -1.3956988468752956e+00 1.5167049547143840e+00 1.2325260425623514e+00 + -1.6426877465438543e+00 1.6835519316087901e+00 1.2583544365298132e+00 + -1.8991824946188598e+00 1.8154159019452174e+00 1.2179337900180804e+00 + -2.1566368722988876e+00 1.9109340202290368e+00 1.1083405462553813e+00 + -2.3695741146930995e+00 1.9652772125034044e+00 9.1452346806068152e-01 + -2.4876753664836340e+00 1.9874594122230467e+00 6.5939486894116972e-01 + -2.5125840663941776e+00 1.9928909771705545e+00 3.6078821249807480e-01 + -2.4358715697379054e+00 1.9684535569788979e+00 5.1865030015232572e-02 + -2.2662789755433543e+00 1.9133556404163972e+00 -1.5244112688551792e-01 + -2.0489506910821027e+00 1.8606239636676780e+00 -1.7326653328616670e-01 + -1.7975799094480887e+00 1.7833889661806488e+00 -2.0267501063667037e-02 + -1.4787475488220867e+00 1.5401884426292742e+00 2.9434597712575072e-01 + -1.0713015146612075e+00 9.9123193036428958e-01 4.9665372418546594e-01 + -1.0426483433574700e+00 1.1011772997044704e+00 3.5754152620674984e-01 + id 11342 + loc 4.2364722490310669e-01 7.3234051465988159e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3345736667363077e-01:3.5563484003958318e-01:2.6175781762930050e-01:3.8233265518854803e-01:9.9668252649435862e-01:3.4568784882454950e-01:1.7095697703960973e+00:3.3460188418047893e-01:2.2632195977159397e+00:3.7245934251654783e-01:3.0257666123291669e+00:4.3345303209996405e-01:3.8067431831417449e+00 + CVs 20 + 1.6095770389994773e-01 2.7980917944083938e-01 -5.9959389665233925e-02 + 3.3622184397376331e-01 5.4626411558841492e-01 -1.3599150769244772e-01 + 5.1231469922470707e-01 7.9481870998605664e-01 -2.3398054624784156e-01 + 6.8013677937268124e-01 1.0212244076852435e+00 -3.5733936679376599e-01 + 8.3557756368330571e-01 1.2201831708292659e+00 -5.0635085418641035e-01 + 9.7442966020528776e-01 1.3876714666136880e+00 -6.7815666065904823e-01 + 1.0943166829197024e+00 1.5204490314087964e+00 -8.6664665540159236e-01 + 1.1934219097150642e+00 1.6177987655501227e+00 -1.0637857193664346e+00 + 1.2687967395537671e+00 1.6840834448538180e+00 -1.2629927747523733e+00 + 1.3182739007075279e+00 1.7260914523818152e+00 -1.4634053515754237e+00 + 1.3433860958922228e+00 1.7505552957689283e+00 -1.6654788591600260e+00 + 1.3505841595869865e+00 1.7654520856759270e+00 -1.8655974062113190e+00 + 1.3502281232672995e+00 1.7753881752305962e+00 -2.0571736464855732e+00 + 1.3579237868883958e+00 1.7765115562296789e+00 -2.2228219442690555e+00 + 1.3991243914963327e+00 1.7731141955075524e+00 -2.3355375040900732e+00 + 1.4929917439223330e+00 1.7699424618773532e+00 -2.3991382477021652e+00 + 1.6350062937074572e+00 1.7530668230568112e+00 -2.4470546223839085e+00 + 1.7727130663968862e+00 1.7045089909709301e+00 -2.5158633209439056e+00 + 1.4843430609125754e+00 1.6831453897004922e+00 -2.6786334704996562e+00 + id 11343 + loc 2.5593778491020203e-01 2.8302201628684998e-01 1047 + blend 0.0000000000000000e+00 + interp 5.0546381660677120e-01:4.0133518436257060e-01:3.5137495476314351e-01:2.6474761564900301e-01:9.7935926711707533e-01:3.6059088200964290e-01:1.8931585421286414e+00:2.7026955479058984e-01:2.7761635478544697e+00:3.0438247232088966e-01:3.2584342545419336e+00:5.0545876196860517e-01:3.9987097209108589e+00 + CVs 20 + -6.5093563886112882e-01 6.2109181485405540e-01 -9.6072392545977048e-02 + -1.1938145765956536e+00 1.1938561903982634e+00 -2.3666531339628818e-01 + -1.6378146137006715e+00 1.7412169215583582e+00 -4.4749361540135280e-01 + -1.9647016094796914e+00 2.2669550508513585e+00 -7.6347382802508867e-01 + -2.1386463186558937e+00 2.7452473879200281e+00 -1.2162321464907313e+00 + -2.1526649763754238e+00 3.1177167506822041e+00 -1.8015543295386920e+00 + -2.0345227912671477e+00 3.3004038023650408e+00 -2.4731599992164739e+00 + -1.8425301329312631e+00 3.2194127768866130e+00 -3.1489775159970526e+00 + -1.6391842448096035e+00 2.8589329971894575e+00 -3.7210972857039417e+00 + -1.4434375672215833e+00 2.2852322409632899e+00 -4.0945989468316277e+00 + -1.2342699488652664e+00 1.6260738774993255e+00 -4.2192357893535464e+00 + -9.9585379232704163e-01 1.0341653503436519e+00 -4.1096598875453809e+00 + -7.4059666289937320e-01 6.2013609511771861e-01 -3.8487440294497035e+00 + -4.9877942014304966e-01 3.9477803723692401e-01 -3.5406904807480268e+00 + -2.7514754503573297e-01 2.8508363590164759e-01 -3.2476410863267535e+00 + -5.4690573054890834e-02 2.3081197278058210e-01 -2.9896462266976331e+00 + 1.8203515095241110e-01 1.8598807909605497e-01 -2.7922104231382288e+00 + 5.5736229415442240e-01 1.4943416638084966e-01 -2.5598952050638988e+00 + 5.5581470041967629e-01 4.0416424749945934e-01 -2.4222197624477286e+00 + id 11344 + loc 7.1689319610595703e-01 8.4097254276275635e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1005500224869182e-01:5.1004990169866937e-01:3.7488750979052099e-01:4.0186074494850288e-01:9.5847302619955577e-01:4.2976623628290406e-01:1.3960326826239291e+00:3.0903253062898822e-01:2.0384527722237045e+00:4.2036493051788404e-01:2.9981138541102368e+00:4.5476415482494847e-01:3.4114768623370209e+00:4.3491961972780058e-01:3.9994016741114837e+00 + CVs 20 + 1.5098930416769241e-02 3.5041778445571348e-01 -1.1817442751279518e-01 + 6.2744755643571903e-02 6.9297830094961443e-01 -2.5365646744064629e-01 + 1.3243738016832590e-01 1.0242418320625390e+00 -4.1807862856784894e-01 + 2.1290714950921352e-01 1.3395821704602633e+00 -6.2461877920159981e-01 + 2.9325895767038951e-01 1.6292381364576751e+00 -8.8641387504018554e-01 + 3.6903781819234882e-01 1.8819772635659791e+00 -1.2089247415745434e+00 + 4.5675340373566553e-01 2.0868932535815539e+00 -1.5813912375476096e+00 + 5.8157560692574584e-01 2.2359893430154680e+00 -1.9811690914712845e+00 + 7.5883111708079387e-01 2.3246344661444969e+00 -2.3832437575990273e+00 + 9.9070680219273655e-01 2.3470625728595249e+00 -2.7629063024792790e+00 + 1.2635462114781448e+00 2.2937361337508548e+00 -3.0936162383546124e+00 + 1.5406881632297715e+00 2.1598194607051351e+00 -3.3512314713813374e+00 + 1.7663295226857101e+00 1.9527557546105889e+00 -3.5231037267417600e+00 + 1.8927490110224763e+00 1.6768196111209357e+00 -3.6117245633883623e+00 + 1.9043240152676786e+00 1.3418022086826535e+00 -3.6201105745957598e+00 + 1.8189208759425328e+00 1.0101187403639624e+00 -3.5522238029496238e+00 + 1.6787546005305181e+00 7.9614538383690625e-01 -3.4366178982141009e+00 + 1.5382804553597487e+00 7.4871060879944884e-01 -3.3169382251936677e+00 + 1.1548559877858504e+00 7.1366866024067221e-01 -3.1923901185415930e+00 + id 11345 + loc 4.3200597167015076e-01 7.9786229133605957e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3596238490966532e-01:3.3294350065661493e-01:9.7174657317426194e-01:3.3549451987892176e-01:1.6829196657161125e+00:2.8486855845145242e-01:2.1690603626576732e+00:4.0903476121695576e-01:2.8686862114726903e+00:4.3595802528581623e-01:3.2945825344602433e+00:2.8266641290013422e-01:3.9152254533574120e+00 + CVs 20 + 1.4300528218787845e-01 7.3085205679105236e-01 -3.3037161772906426e-01 + 2.9719017132661835e-01 1.4547054363963632e+00 -6.2905502823577752e-01 + 4.8107423479141731e-01 2.1543611186141391e+00 -8.8561181531722577e-01 + 7.1758402992751968e-01 2.7831657186260346e+00 -1.0300593226974284e+00 + 1.0291474355091310e+00 3.2971163245130546e+00 -9.7070914404742470e-01 + 1.3935031650498984e+00 3.6440814088762110e+00 -6.8511547160325637e-01 + 1.7424361229650793e+00 3.7727220996352786e+00 -2.3850191866867632e-01 + 2.0195384768683962e+00 3.6695303585052494e+00 2.7760443825088643e-01 + 2.2080945514893817e+00 3.3740445101025101e+00 7.7896419020971486e-01 + 2.3350109525085521e+00 2.9332291035215827e+00 1.2264170579458875e+00 + 2.4294536194417531e+00 2.3392317183979663e+00 1.6201647302665145e+00 + 2.4787913728463278e+00 1.5650122143278313e+00 1.9771681248669748e+00 + 2.4260531017874389e+00 6.6308837032555357e-01 2.3715791302370843e+00 + 2.2763024665802201e+00 -1.8304521109877347e-01 2.8798805878259199e+00 + 2.1973433452856734e+00 -7.2648222697176945e-01 3.4856286978634285e+00 + 2.3506111809713435e+00 -8.7269938336469477e-01 4.0841404761426459e+00 + 2.7263710282024922e+00 -6.8572664178723364e-01 4.6147650781462781e+00 + 3.2154464260147742e+00 -2.5507324807804022e-01 5.0269332606321466e+00 + 3.6894492657176001e+00 2.9310496452316759e-01 5.4265245400002016e+00 + id 11346 + loc 5.2216970920562744e-01 9.6924370527267456e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0809832717152383e-01:3.2077600672229956e-01:9.9780322144376143e-01:3.8362362180668269e-01:1.1369625817817770e+00:4.0809424618825213e-01:1.8338674478677524e+00:3.5930407968975492e-01:2.5941728120910250e+00:3.0456732186685170e-01:3.0393905414135851e+00:3.2528145579936663e-01:3.9821646993136128e+00 + CVs 20 + 1.0394897705981357e-01 2.2896125862194636e-01 -1.9954326869016323e-01 + 1.7007193149552732e-01 4.5619048782955968e-01 -3.9932801830320358e-01 + 2.1388871846816099e-01 6.7013408865895263e-01 -6.0377347845589147e-01 + 2.4131787194351553e-01 8.6191869294331880e-01 -8.0740171064807564e-01 + 2.5439244859321658e-01 1.0368004774010986e+00 -1.0033152632219340e+00 + 2.5749765210722969e-01 1.2032353887074800e+00 -1.1937332750373846e+00 + 2.5217557659611906e-01 1.3648210065879018e+00 -1.3973659834232059e+00 + 2.3964419745779131e-01 1.5235839613140927e+00 -1.6334234135244727e+00 + 2.2800381166454170e-01 1.6821189719010090e+00 -1.9030796236103806e+00 + 2.3013003728649750e-01 1.8428280863743194e+00 -2.1933172171209430e+00 + 2.5673497896804431e-01 2.0033155611226841e+00 -2.4928770265874718e+00 + 3.1534355175517137e-01 2.1495505500141752e+00 -2.7966876805356140e+00 + 4.0641365315569900e-01 2.2576295706047493e+00 -3.1049123784300527e+00 + 5.2044679193520671e-01 2.2925748454370352e+00 -3.4160906203167398e+00 + 6.5527095660100665e-01 2.2385598666060833e+00 -3.7039408671383689e+00 + 8.3385517789081853e-01 2.1289722762211722e+00 -3.9268832059493861e+00 + 1.0693315650965425e+00 1.9924860033896752e+00 -4.0803043185841599e+00 + 1.2802238811443742e+00 1.7776612162097614e+00 -4.1989886392215583e+00 + 1.2265685475262824e+00 1.3656298186693534e+00 -4.2823310542007453e+00 + id 11347 + loc 4.1206067800521851e-01 3.7357074022293091e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0361480360621558e-01:2.6154632031703212e-01:3.9903965325901047e-01:4.4421113564852183e-01:9.3916911515988344e-01:5.0360976745817954e-01:1.2438567533287701e+00:4.1002422709075959e-01:1.9665923925403903e+00:3.9222092357350613e-01:2.7308224701861699e+00:4.1057615370168005e-01:3.2567585047385315e+00:4.6031755791632351e-01:3.8661513029072028e+00 + CVs 20 + -2.9362703900825055e-01 3.1331129971788862e-01 -1.0678899613211837e-01 + -5.6403219443365560e-01 6.0956884086320728e-01 -1.9113930929112699e-01 + -8.3076308541026789e-01 8.9077773766821233e-01 -2.5985383948144936e-01 + -1.1011285739050285e+00 1.1611697546714732e+00 -3.1297634482561421e-01 + -1.3475456860121926e+00 1.4215709067344677e+00 -3.3952348648091846e-01 + -1.5076671777810446e+00 1.6383385876447771e+00 -3.2327449043410450e-01 + -1.5553799652394793e+00 1.8025117617399609e+00 -2.6396937261121423e-01 + -1.6059860491422671e+00 1.9548859115723989e+00 -1.7367382361735417e-01 + -1.7729563240714925e+00 2.0680853972395252e+00 -5.2586909155711514e-02 + -2.0768784017171176e+00 2.0811106996851789e+00 7.8587071005693176e-02 + -2.4951239577581834e+00 1.9386475262149876e+00 1.6220200832181214e-01 + -2.9479547741422825e+00 1.6439255826504786e+00 1.2921413210079052e-01 + -3.3272561724548795e+00 1.2722689366124385e+00 -3.9272461775643142e-02 + -3.5853044921009158e+00 9.3618272095274979e-01 -2.7738529626340303e-01 + -3.7408581196867270e+00 7.4152158787227984e-01 -4.8258518819469215e-01 + -3.8508089854997540e+00 6.9485554027944307e-01 -6.2920003781956879e-01 + -3.9982758935250455e+00 7.4669524804036091e-01 -7.5878222318979816e-01 + -4.2635800318469341e+00 8.6235525426736903e-01 -9.4111583475239835e-01 + -3.8827339473542337e+00 6.0642492629148981e-01 -8.7610849889361719e-01 + id 11348 + loc 5.7881563901901245e-01 5.5535066127777100e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8491164115814983e-01:4.7972263697887579e-01:5.3792438872896020e-01:4.1808103674640323e-01:1.0461315245483067e+00:3.2053556882313639e-01:1.8859434164096454e+00:4.8490679204173825e-01:2.2060913252656098e+00:2.9701527942517419e-01:3.0446643284046924e+00:4.1028982439234224e-01:3.9238206901919832e+00 + CVs 20 + 2.0076656172995888e-01 2.7161915978112072e-01 -2.8257481508252602e-01 + 3.5963518645733966e-01 5.6720134551979495e-01 -5.6662983354623186e-01 + 5.0945792919260913e-01 8.3426764005559217e-01 -8.7161348541020989e-01 + 6.6457954832722177e-01 1.0486540481094742e+00 -1.2027674201057594e+00 + 8.3336303873978201e-01 1.2018262977374579e+00 -1.5522019143244898e+00 + 1.0287059937174750e+00 1.2928688184483921e+00 -1.9063513290007259e+00 + 1.2602538738387752e+00 1.3262970547723767e+00 -2.2499885636552417e+00 + 1.5315516214895961e+00 1.3093589964637782e+00 -2.5691374621688885e+00 + 1.8388000812614145e+00 1.2505512021003053e+00 -2.8529782594148814e+00 + 2.1711358998692574e+00 1.1591051123563969e+00 -3.0990816999017321e+00 + 2.5138268952761207e+00 1.0401733365491932e+00 -3.3130518998992056e+00 + 2.8518479687270730e+00 8.9027566183981632e-01 -3.5053281141492865e+00 + 3.1709843057272566e+00 6.9748513578259019e-01 -3.6893932157002434e+00 + 3.4535867364031674e+00 4.4583350312442893e-01 -3.8828284399553108e+00 + 3.6656063979431810e+00 1.2206032381048093e-01 -4.1079393313083532e+00 + 3.7587258991178993e+00 -2.4751766863126745e-01 -4.3788364805030371e+00 + 3.7250791712027933e+00 -5.8192405545160586e-01 -4.6795988173356484e+00 + 3.6141917898681517e+00 -8.2802866456056567e-01 -4.9818378234693164e+00 + 3.5108232605417187e+00 -9.5043909516110503e-01 -5.2150250983763859e+00 + id 11349 + loc 9.6766775846481323e-01 7.9555529356002808e-01 1086 + blend 0.0000000000000000e+00 + interp 2.4785214797816715e+00:9.7340625260104885e-01:5.3917367193968557e-03:2.4785114797816714e+00:1.9481373682454954e+00:2.1118995733388748e+00:1.9625525405990913e+00:1.0176002314473342e+00:2.0006280796797418e+00:7.4672792056279114e-01:2.0095753819656079e+00:2.9113335604958174e-01:2.7351012596077622e+00:4.3042898292833981e-01:3.5923300838516190e+00:1.2713892803377571e+00:3.9994924183896781e+00 + CVs 20 + -2.0575362554664728e-01 4.3173711053978270e-01 5.4104417025403106e-01 + -4.0510133286090771e-01 7.7942316474709283e-01 9.5955483414646692e-01 + -5.9482272388465041e-01 1.0950078626470618e+00 1.3506063667070565e+00 + -7.8726492448543273e-01 1.4025491904393026e+00 1.7394621945662410e+00 + -9.9930083462981600e-01 1.6982564554137840e+00 2.0963820902631096e+00 + -1.2402979666247003e+00 1.9758595616728207e+00 2.3929124188775064e+00 + -1.5094035648116113e+00 2.2269992258126248e+00 2.6045143275496532e+00 + -1.7975527475466451e+00 2.4415006144273876e+00 2.7063303195439592e+00 + -2.0849292908167163e+00 2.6020472351978774e+00 2.6685940463927729e+00 + -2.3274507993934428e+00 2.6836415118921528e+00 2.4896177073718770e+00 + -2.4977838877489704e+00 2.6771549358529576e+00 2.2178148871881787e+00 + -2.6054761415488783e+00 2.5738988058530383e+00 1.8972806880898632e+00 + -2.6688534687501311e+00 2.3673640090028383e+00 1.5791344231393578e+00 + -2.7117489185204979e+00 2.0880005260791754e+00 1.3077274623409574e+00 + -2.7484420956674604e+00 1.7866724129490650e+00 1.0863827065525138e+00 + -2.7782750248091137e+00 1.5142762296397363e+00 9.0254345406597281e-01 + -2.8055081151628425e+00 1.3048649798728844e+00 7.6325461951330753e-01 + -2.8304759362268408e+00 1.1473055099583913e+00 6.6194874475349041e-01 + -2.7667243030134285e+00 1.0986882907189837e+00 3.5077161583881483e-01 + id 11350 + loc 8.0060923099517822e-01 3.4492272138595581e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9901827574621362e-01:3.7329364796007353e-01:4.2650625582598689e-03:3.9901428556345619e-01:7.9801144134480273e-01:2.4372372301526130e-01:1.1139610941284899e+00:3.4185283687656481e-01:2.0101085850553675e+00:3.9580443966430534e-01:2.6069539137299844e+00:3.4759000422711722e-01:3.0094117831190661e+00:3.2266595172310125e-01:3.6194775694192298e+00 + CVs 20 + -2.3625964225561630e-01 2.7672550457488443e-01 2.0662738979296200e-01 + -4.4097262430260475e-01 5.5967882794637036e-01 4.1616872629736962e-01 + -6.2499613834198819e-01 8.3591644470320370e-01 6.3842589634484825e-01 + -7.8723318492906769e-01 1.0992330135754051e+00 8.7210986515016675e-01 + -9.1762847495618116e-01 1.3506240777817737e+00 1.1132343828901197e+00 + -1.0263949954316791e+00 1.5986097182622512e+00 1.3857801473216158e+00 + -1.1481144848825087e+00 1.8491254427616792e+00 1.7325120081796335e+00 + -1.3214210059616245e+00 2.1003459773303188e+00 2.1719710082969348e+00 + -1.5836249643383591e+00 2.3399473727196467e+00 2.6982419913781759e+00 + -1.9701126874884061e+00 2.5304394039107794e+00 3.2919108343568726e+00 + -2.4935874167224643e+00 2.6025901039054724e+00 3.9212016490262362e+00 + -3.1102423763293490e+00 2.4552896063843912e+00 4.5546922521711561e+00 + -3.6846969653029662e+00 1.9736986335497941e+00 5.1543614038002401e+00 + -4.0215630248877803e+00 1.1715756359303982e+00 5.6296716723174995e+00 + -4.0354040220343688e+00 2.4590745233791078e-01 5.9113856553390116e+00 + -3.6717754145119725e+00 -5.9881234236623881e-01 6.0335259329069126e+00 + -2.7560811118464259e+00 -9.6840022234673784e-01 6.0934665176222724e+00 + -1.8667348445147116e+00 -5.3322193809787333e-01 6.1407830111313029e+00 + -1.4034673369341191e+00 -5.2051155809819327e-01 6.1275337252251934e+00 + id 11351 + loc 1.0068932175636292e-01 7.2460007667541504e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2661754908710623e-01:4.6742694797350587e-01:6.6212028998404060e-01:5.2661228291161544e-01:1.0000073579648776e+00:3.6770037976952930e-01:1.4303279150630099e+00:2.9556244091253586e-01:2.1379216943576855e+00:3.2548073093733454e-01:2.9643039326137437e+00:4.7883569222364220e-01:3.1598441567883926e+00:4.5751943800377504e-01:3.9987036606224784e+00 + CVs 20 + 8.6614267116901345e-02 5.8109510036576340e-01 -3.4086693608619539e-01 + 2.1431036402698458e-01 1.1721245737635082e+00 -6.1914695237918049e-01 + 3.8418487154987641e-01 1.7366117717220519e+00 -7.9203791353231878e-01 + 5.7401872394876763e-01 2.2106943318022818e+00 -8.3857906531817383e-01 + 7.6498638035942113e-01 2.5653060107085777e+00 -7.6796662539285199e-01 + 9.6315199386714689e-01 2.8096681426588970e+00 -5.8992204539204285e-01 + 1.1712005594800690e+00 2.9219240902143566e+00 -3.0002943491570555e-01 + 1.3775242533094281e+00 2.8461785156993686e+00 1.0231992680434288e-01 + 1.5679313998294451e+00 2.5508610755739132e+00 5.8632712965840561e-01 + 1.7272084845820919e+00 2.0276418400019045e+00 1.1096056957696827e+00 + 1.8262613818370044e+00 1.2828300855821448e+00 1.6218602696381041e+00 + 1.8169131301574215e+00 3.5861227997600709e-01 2.1099849302832427e+00 + 1.6622535953757773e+00 -6.3317866422213576e-01 2.6744664225338237e+00 + 1.4534602272324533e+00 -1.5044445522482310e+00 3.4796532095778252e+00 + 1.4935069379098631e+00 -1.9862862870555424e+00 4.5908790004279423e+00 + 1.9817651702652410e+00 -1.9534023676894132e+00 5.6934894466955654e+00 + 2.7889483737134642e+00 -1.5774987573457566e+00 6.5374574870624151e+00 + 3.7193182186001974e+00 -1.0518332822145573e+00 7.1012052880653922e+00 + 4.5089911985309596e+00 -6.1060962077411096e-01 7.6022645418165480e+00 + id 11352 + loc 7.3987245559692383e-01 6.3496589660644531e-01 410 + blend 0.0000000000000000e+00 + interp 4.5890157615427518e-01:3.0868135768681565e-01:6.4625877377452212e-01:3.0102203730016946e-01:1.4189078755476414e+00:2.7124668500864163e-01:2.5560482891317280e+00:3.4303418872146985e-01:3.3932403964352043e+00:4.5889698713851368e-01:3.9945620971461260e+00 + CVs 20 + 5.5634101063849906e-01 2.2588130009784568e-01 -2.0776647148616800e-01 + 1.0261753790092707e+00 3.9467648125290172e-01 -4.1819365114096718e-01 + 1.4830868995357966e+00 5.5215827635086634e-01 -6.2139535027325432e-01 + 1.9287509263745479e+00 6.9186505873108561e-01 -8.2476305546503825e-01 + 2.3276117002825800e+00 7.8421668171762049e-01 -1.0391016224151182e+00 + 2.6541016787995018e+00 8.1441259979091485e-01 -1.2654432790291175e+00 + 2.9140005741442279e+00 7.9195960602756854e-01 -1.4956503573741871e+00 + 3.1436219547187685e+00 7.3009177650050616e-01 -1.7308979184702746e+00 + 3.3784242034356899e+00 6.2673478046253317e-01 -1.9736088544019366e+00 + 3.6359729965085537e+00 4.6901070537772926e-01 -2.2109545224380693e+00 + 3.9238414699134867e+00 2.3320418291144529e-01 -2.4230155500539285e+00 + 4.2472162451950579e+00 -1.1073346168022913e-01 -2.5963774373282384e+00 + 4.6129447691641019e+00 -5.6370646856827911e-01 -2.7558746954722895e+00 + 5.0274572227948147e+00 -1.0820222799951307e+00 -2.9774806748747604e+00 + 5.4875939434395313e+00 -1.5853766521129191e+00 -3.3310839171472586e+00 + 5.9849611647288956e+00 -1.9966555737334717e+00 -3.8256808946902181e+00 + 6.5162318821254130e+00 -2.3064677284141544e+00 -4.4138923293589460e+00 + 7.0719371204081227e+00 -2.5644625819773266e+00 -5.0488781619391174e+00 + 7.6002966942946646e+00 -2.8535945900948150e+00 -5.7596134373733872e+00 + id 11353 + loc 5.8429414033889771e-01 1.1523962765932083e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4292534635319886e-01:3.1434566557740939e-01:7.0609620673412588e-02:2.7973723414638207e-01:8.0255321508403432e-01:2.7820053615795876e-01:1.5958848477273349e+00:4.4292091709973536e-01:2.0004223340264153e+00:3.4866312335470440e-01:2.8619439813350880e+00:4.0742731749071504e-01:3.1590343516499697e+00 + CVs 20 + -6.9273793102145972e-02 2.2273374055967343e-01 2.7810926638790623e-01 + -1.1713824471874032e-01 4.8098407296935497e-01 5.2661038340925970e-01 + -1.4878099773965181e-01 7.6485071913896130e-01 7.4596363857759995e-01 + -1.7869476339785434e-01 1.0637036457056483e+00 9.4623560081517633e-01 + -2.2805111598548189e-01 1.3709202625062575e+00 1.1485381086930437e+00 + -3.1402642462459118e-01 1.6730496204939285e+00 1.3708485656738905e+00 + -4.4230528175101991e-01 1.9421008351763331e+00 1.6144150335600957e+00 + -6.1159571917856725e-01 2.1434492074664186e+00 1.8608639187058467e+00 + -8.2423610637454980e-01 2.2521640694265379e+00 2.0881464215176835e+00 + -1.0919034862988866e+00 2.2528731509049589e+00 2.2887069122854697e+00 + -1.4108027431719457e+00 2.1309124110403328e+00 2.4605195666670605e+00 + -1.7372530225740210e+00 1.8688920135352975e+00 2.6054138184700268e+00 + -1.9831782880443445e+00 1.4772686458651816e+00 2.7263350512295070e+00 + -2.1071306821861766e+00 1.0366721914854942e+00 2.8138955615826204e+00 + -2.1863106470392970e+00 6.1440466763839496e-01 2.8546922568646544e+00 + -2.3283678901325642e+00 2.3028517965072282e-01 2.8447649715534435e+00 + -2.5961558062092975e+00 -9.2532887202187331e-02 2.7968526432448497e+00 + -2.9568542186169653e+00 -3.5376675124722168e-01 2.7361411379397063e+00 + -3.2425058998939296e+00 -6.8701034656130555e-01 2.7089727070791811e+00 + id 11354 + loc 8.0503547191619873e-01 8.1260210275650024e-01 410 + blend 0.0000000000000000e+00 + interp 4.8693070857008280e-01:4.7650406359637376e-01:7.0324510131916551e-01:4.4545565426920286e-01:1.0088853622472589e+00:4.8692583926299715e-01:1.8850021473032401e+00:2.8055266272444468e-01:2.1614701928807643e+00:3.6642508165648308e-01:3.0014270323583689e+00:2.8180223357139933e-01:3.9871609976101618e+00 + CVs 20 + 6.3907921353229458e-01 2.2317094435574514e-01 -2.4311813485413564e-01 + 1.1693071806649478e+00 3.8343161509289359e-01 -4.9697496321280255e-01 + 1.6896134857227429e+00 5.3499644661570867e-01 -7.5168664233521254e-01 + 2.2042828131748142e+00 6.6602459158180016e-01 -1.0166074933554947e+00 + 2.6726748738936315e+00 7.3696657573554258e-01 -1.3024728843252906e+00 + 3.0633704141229030e+00 7.2493025634868580e-01 -1.6115326686018974e+00 + 3.3756753503688937e+00 6.3177184092502658e-01 -1.9381527236070268e+00 + 3.6414952881727980e+00 4.6222547482103749e-01 -2.2768670703470284e+00 + 3.8838932706010820e+00 2.0711800305540873e-01 -2.6132800799508726e+00 + 4.0989593886157998e+00 -1.4157766559592044e-01 -2.9128307613826476e+00 + 4.2756501401723437e+00 -5.6545962776161507e-01 -3.1531019358442354e+00 + 4.4192562034263716e+00 -1.0261062933690843e+00 -3.3610016843424524e+00 + 4.5407710482522319e+00 -1.4965622832513303e+00 -3.5778627891490515e+00 + 4.6468848437807289e+00 -1.9662862877918028e+00 -3.8290551284550061e+00 + 4.7472711126760077e+00 -2.4410855100919742e+00 -4.1325801266760003e+00 + 4.8608359994062162e+00 -2.9430320277869235e+00 -4.5026060137687338e+00 + 5.0081110469606838e+00 -3.4841833387128069e+00 -4.9336563995193981e+00 + 5.1908328230893197e+00 -4.0477009752004385e+00 -5.3920495684464678e+00 + 5.3632220898957881e+00 -4.5896501443777078e+00 -5.8386462419633789e+00 + id 11355 + loc 9.1822499036788940e-01 2.5951540470123291e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5823000152790133e-01:2.7637744045354123e-01:9.3954790390946297e-01:3.1516880221523558e-01:1.1797512095534128e+00:4.3958156003407839e-01:2.0005751218128758e+00:4.5822541922788607e-01:2.6283740141235619e+00:4.0918961406502607e-01:3.0057595454691004e+00:2.5201471583554780e-01:3.6467355955235328e+00 + CVs 20 + -5.3974772603979204e-02 3.0643782195417674e-01 3.3530348190441628e-01 + -7.8334727961215572e-02 6.4208841347984547e-01 6.3038028073645425e-01 + -1.0027922092414332e-01 9.7624495033638636e-01 9.4507731229422687e-01 + -1.4217494801462865e-01 1.2837279612015142e+00 1.3133666046637906e+00 + -2.2098705006451358e-01 1.5418877031058165e+00 1.7476460233381774e+00 + -3.4931771108528908e-01 1.7269050625663365e+00 2.2450304108089463e+00 + -5.3676307629844455e-01 1.8160733670708633e+00 2.7894899496769816e+00 + -7.8736776030063571e-01 1.7914124266926770e+00 3.3539875268277948e+00 + -1.0896076350163000e+00 1.6456933940072564e+00 3.9043901311168860e+00 + -1.4098459463723503e+00 1.3880097143990702e+00 4.4118068649264037e+00 + -1.7050353451359610e+00 1.0379630029791025e+00 4.8629756827447128e+00 + -1.9350249331062819e+00 6.1684404873321297e-01 5.2535107252118456e+00 + -2.0647762860227257e+00 1.5335261893431662e-01 5.5813928773092245e+00 + -2.0552540809160535e+00 -2.9551608389157757e-01 5.8535830965917226e+00 + -1.8690429567153388e+00 -6.3758997696679387e-01 6.0817849456383097e+00 + -1.5497263191838582e+00 -7.8092778814531805e-01 6.2895224429945253e+00 + -1.2172945439282072e+00 -7.1724042206248440e-01 6.5207021411996582e+00 + -9.2859636363295528e-01 -6.1892859102915931e-01 6.8042510879952509e+00 + -6.5763341025421906e-01 -9.1890468836702999e-01 7.1973133919937071e+00 + id 11356 + loc 2.4736027419567108e-01 7.1759688854217529e-01 1074 + blend 0.0000000000000000e+00 + interp 4.8634030591327254e-01:3.9860680825121070e-01:1.3309273673736510e-01:4.3536198492790718e-01:9.7151124940014522e-01:2.6572602545746188e-01:1.2196746919255006e+00:3.6885506857803185e-01:1.9982547315716845e+00:3.5751736495790398e-01:2.3971149153455924e+00:4.7035907700397234e-01:2.9001485690100290e+00:4.8633544251021343e-01:3.0789616585376591e+00:4.2960222434188949e-01:3.6708848852491252e+00 + CVs 20 + 1.3256705795802753e-01 3.5524196295649607e-01 -1.9265972389320093e-01 + 2.7537130027869777e-01 6.8226633993154862e-01 -3.8643295564252006e-01 + 4.1913775011029009e-01 9.8106604667504360e-01 -5.7542818680603447e-01 + 5.6050645911840791e-01 1.2561880105393097e+00 -7.5303982355963761e-01 + 7.0256751105910209e-01 1.5168661671027539e+00 -9.0526023400578970e-01 + 8.4966907234128775e-01 1.7752122438071178e+00 -1.0274297430560999e+00 + 1.0031930081626532e+00 2.0468738566228577e+00 -1.1517148087048232e+00 + 1.1608011019711708e+00 2.3422409397141499e+00 -1.3247846716275140e+00 + 1.3125627067799426e+00 2.6197549946246617e+00 -1.6049869851619853e+00 + 1.4231700669941620e+00 2.7724588630271456e+00 -2.0114882002010885e+00 + 1.4564685316432009e+00 2.7384436797435923e+00 -2.4820706378128596e+00 + 1.4047626930037009e+00 2.5197850236015689e+00 -2.9354654477235411e+00 + 1.3110279175895063e+00 2.1392894509500731e+00 -3.3247986355070029e+00 + 1.2518595350034882e+00 1.6497147716537639e+00 -3.6416597451952537e+00 + 1.2682909249642245e+00 1.1383314259711459e+00 -3.9281488137294254e+00 + 1.3467002758427671e+00 7.0565226004938220e-01 -4.2599427634322646e+00 + 1.4482340423698408e+00 4.5843795339836468e-01 -4.6555758040724280e+00 + 1.5224158542869419e+00 5.3768930718730945e-01 -5.0688871327981131e+00 + 1.5575814942766391e+00 1.0036198172157036e+00 -5.5237509300731977e+00 + id 11357 + loc 3.3049839735031128e-01 1.7370851337909698e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4459850908633025e-01:2.9835099828947859e-01:6.5420786826047128e-02:4.4459406310123939e-01:7.5923359084855480e-01:3.7078472900881071e-01:1.1594720527386659e+00:4.3500636532985537e-01:1.9489105862639726e+00:3.0153339328158479e-01:2.5911969671457733e+00:3.4556625600593310e-01:3.5585880785589543e+00 + CVs 20 + -3.4518573360428184e-02 3.8007360539352208e-01 -1.9540378246174298e-01 + -1.1288983523489876e-01 7.7431747409233431e-01 -3.8682880763402228e-01 + -2.2847347504754983e-01 1.1837901508234030e+00 -5.7655632144921531e-01 + -3.9144476037542258e-01 1.6043574879954683e+00 -7.5904332195327784e-01 + -6.1749580749687594e-01 2.0244489919894639e+00 -9.2830124264116964e-01 + -9.1126242011055614e-01 2.4311846712075242e+00 -1.0962552959816894e+00 + -1.2685336069457875e+00 2.8109664662016391e+00 -1.2894647865471143e+00 + -1.6796536053854856e+00 3.1467498650706318e+00 -1.5317313908186658e+00 + -2.1363013798822328e+00 3.4125211902135715e+00 -1.8466705041122262e+00 + -2.6299336528103261e+00 3.5588637939707626e+00 -2.2661197603824883e+00 + -3.1376802108940374e+00 3.5065100666923428e+00 -2.7971718035462185e+00 + -3.6340100951470391e+00 3.1686466391230428e+00 -3.3646341458402844e+00 + -4.0894593108438571e+00 2.4952075861955256e+00 -3.8107192393926796e+00 + -4.4290022652904462e+00 1.6067426602031731e+00 -3.9925558544983013e+00 + -4.6211335420969979e+00 7.0161285304448318e-01 -3.9335655387901189e+00 + -4.6898768052037116e+00 -1.9569953509782256e-01 -3.6146894098520281e+00 + -4.6218314933076483e+00 -1.0055256253836351e+00 -2.7182343663602273e+00 + -4.4534691079573605e+00 -1.0817630915495129e+00 -1.2369039543562987e+00 + -4.4938190875315245e+00 -1.2313338305518751e+00 -8.6188482280198042e-01 + id 11358 + loc 9.9566847085952759e-01 5.0151622295379639e-01 1070 + blend 0.0000000000000000e+00 + interp 4.5388335707420635e-01:3.8545882023061162e-01:3.0727311199729290e-01:4.3775799888515060e-01:9.8851948434276493e-01:4.2998785706503634e-01:1.3532307040346441e+00:2.8979344374663835e-01:2.0233996954243443e+00:3.2625795107558453e-01:2.9347936739210017e+00:3.4069742918668494e-01:3.3189990120342090e+00:4.5387881824063564e-01:3.8828827221423592e+00 + CVs 20 + -1.8132719600447472e-01 3.2769915046490500e-01 4.3265793598336849e-02 + -3.7487094640907043e-01 6.3443501923184109e-01 2.7740619586018256e-02 + -5.5114404979707010e-01 9.2405214949162495e-01 -3.2721138652429760e-02 + -6.9491314918842251e-01 1.1764229825826718e+00 -1.6172348241642831e-01 + -8.0855826831517841e-01 1.4010936445182618e+00 -3.5328099307916727e-01 + -9.0898987635993023e-01 1.6776007119078613e+00 -5.5235021479792812e-01 + -1.0002183719702371e+00 2.0664441594962484e+00 -6.7456982860436332e-01 + -1.0870464236764281e+00 2.5314130864639104e+00 -6.6277438484981532e-01 + -1.2083948714975024e+00 3.0111616457863777e+00 -5.1609458583272061e-01 + -1.4335616631524803e+00 3.4420539933590404e+00 -2.0984616787094934e-01 + -1.8237824345452425e+00 3.6745221453897861e+00 2.9334510203233077e-01 + -2.3130220573653655e+00 3.5253100539638811e+00 9.0143770372931242e-01 + -2.7440270817049113e+00 3.0342822664478586e+00 1.4158289185485848e+00 + -3.0872807936929396e+00 2.3938929349189495e+00 1.7336076304874268e+00 + -3.3943040104587072e+00 1.7308448809934602e+00 1.8610680685064700e+00 + -3.6527287108649906e+00 1.0152523510213554e+00 1.8292759514990975e+00 + -3.7480916964501643e+00 1.5660980972835592e-01 1.6031737875583580e+00 + -3.5823918137239477e+00 -7.4898667079231218e-01 1.1346948675831607e+00 + -3.7332945597753122e+00 -1.1963157284599357e+00 1.0767483654302907e+00 + id 11359 + loc 5.5300253629684448e-01 2.1961784362792969e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9217640887623565e-01:4.1377669555682034e-01:4.2670970965257793e-01:4.9217148711214692e-01:2.2195902018915774e+00:4.8296025202319798e-01:2.8739137985694034e+00:2.9680483416162939e-01:3.0977636574348479e+00:3.0205848664216528e-01:3.9747263885709980e+00 + CVs 20 + -4.1023968720954568e-02 7.3577803003907438e-01 4.6833844517265544e-01 + -6.9928921479337214e-02 1.4641821462725100e+00 8.8856406336069460e-01 + -1.0839375792658124e-01 2.2157617844344109e+00 1.2594069955426472e+00 + -2.3513615770521062e-01 2.9950862149107698e+00 1.4744509606078664e+00 + -5.0446021823677167e-01 3.7105692150997323e+00 1.3597400766215979e+00 + -8.4224281272649226e-01 4.1960439971631782e+00 8.8489198727504137e-01 + -1.1284555352256085e+00 4.3353422939963782e+00 1.8012543458761332e-01 + -1.2865349941450896e+00 4.1118086986413296e+00 -5.7492366160830000e-01 + -1.2990230354796148e+00 3.5907636344941478e+00 -1.2240883888015150e+00 + -1.1826015320179435e+00 2.8915552651289893e+00 -1.6616745904087207e+00 + -9.7114527178886678e-01 2.1626547871157586e+00 -1.8727427779294761e+00 + -6.9447267088372400e-01 1.5060401496945823e+00 -1.9407386094721055e+00 + -3.7004661200077393e-01 9.0671636258609523e-01 -1.9698159126911872e+00 + 2.8999377497209183e-02 2.8597740866841437e-01 -2.1051392028089380e+00 + 5.3821196392432835e-01 -3.6098202404735025e-01 -2.6498258722568759e+00 + 9.2862293523237738e-01 -6.8905250590175315e-01 -3.7664061844704890e+00 + 9.8474222118255161e-01 -4.7121947401184139e-01 -4.9391605556399725e+00 + 8.3041476488254728e-01 8.5519796126524383e-02 -5.7838707571687289e+00 + 6.8945383844451658e-01 6.2222160250346903e-01 -6.0458092477689949e+00 + id 11360 + loc 7.4497342109680176e-01 7.8840643167495728e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8007651930275902e-01:3.1358374433970670e-01:6.5168529336108949e-02:3.8318982589425954e-01:7.8133597428851720e-01:4.8007171853756603e-01:1.1034390874954130e+00:3.4370223252529919e-01:2.0049835864278340e+00:3.7075790381822743e-01:2.9039002763947694e+00:3.4959007995151242e-01:3.4921542342494298e+00 + CVs 20 + 1.3998810362863756e-01 2.4720894644674068e-01 -2.5919765903503539e-01 + 2.8077252942257230e-01 4.9672481838508742e-01 -4.9871932006068376e-01 + 4.2812198386627398e-01 7.4523371136195415e-01 -7.4437581901920946e-01 + 5.8090006756125856e-01 9.8888055811092745e-01 -1.0083141013376073e+00 + 7.3216989450218994e-01 1.2260656211183241e+00 -1.2927365001902618e+00 + 8.7109532115542443e-01 1.4587599780848832e+00 -1.5980612259943967e+00 + 9.8757169536694445e-01 1.6902062101605806e+00 -1.9271326564900053e+00 + 1.0795033593707377e+00 1.9164739572767893e+00 -2.2864436635029901e+00 + 1.1541553760005927e+00 2.1230700664762669e+00 -2.6830382118373972e+00 + 1.2213968271058131e+00 2.2875072448626672e+00 -3.1224022086751404e+00 + 1.2881049532750546e+00 2.3828473187743331e+00 -3.6037089589362070e+00 + 1.3564144912274239e+00 2.3845204036694398e+00 -4.1166697709635907e+00 + 1.4234548978261135e+00 2.2760171621048850e+00 -4.6436643794731856e+00 + 1.4838751526373879e+00 2.0530076115739853e+00 -5.1603921187053050e+00 + 1.5300101674779043e+00 1.7240992243487985e+00 -5.6445828362991755e+00 + 1.5377012448058636e+00 1.3096166173602670e+00 -6.0755137689534857e+00 + 1.4610837129153704e+00 8.4923478803162367e-01 -6.4293628472988775e+00 + 1.2840983363115588e+00 3.9639623788977979e-01 -6.6969457554784082e+00 + 1.1533394715788921e+00 -4.1400104917432290e-03 -6.9464711934932835e+00 + id 11361 + loc 9.4262920320034027e-03 7.1392339468002319e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7395629533900907e-01:3.3510558058687373e-01:6.4154763471964138e-03:2.6257911763375819e-01:7.6654824863203608e-01:4.7395155577605569e-01:1.1058427566252376e+00:3.7857655381771754e-01:1.8255894683079656e+00:3.3187853995239253e-01:2.0113547152366031e+00:4.2194292967184627e-01:2.9218851898704652e+00:4.6779453244405866e-01:3.2293894268588224e+00 + CVs 20 + 3.0363378983805733e-01 3.7890309488131713e-01 -9.3219956437258972e-02 + 6.0623125571970005e-01 7.1257526396310866e-01 -2.3854564319062654e-01 + 8.9490522507606762e-01 1.0213960546632510e+00 -4.0368820101334613e-01 + 1.1568545600509306e+00 1.2888094123120466e+00 -5.8857510901078380e-01 + 1.3853830277957522e+00 1.4976509965693301e+00 -7.9921976423003205e-01 + 1.5700500116157041e+00 1.6297026783808226e+00 -1.0345979446980205e+00 + 1.6946702142048133e+00 1.6704318577381430e+00 -1.2841414875135146e+00 + 1.7384280781383232e+00 1.6127244829664962e+00 -1.5235411819581510e+00 + 1.6868392623474902e+00 1.4617059799285466e+00 -1.7107367359013903e+00 + 1.5544005511209991e+00 1.2505208952388931e+00 -1.8047959053829490e+00 + 1.3792727052538074e+00 1.0306401364525026e+00 -1.8025287267837720e+00 + 1.1932244774487204e+00 8.4072384408983103e-01 -1.7448804411345249e+00 + 1.0009129771256651e+00 6.9509111168178406e-01 -1.6856906331969352e+00 + 7.7772785340364892e-01 6.0855036267036855e-01 -1.6540504814316948e+00 + 4.9711903171897376e-01 6.3068742284235346e-01 -1.6156702468746966e+00 + 1.9992133445819102e-01 8.2992169834412677e-01 -1.4882743745833842e+00 + 1.8744634513854934e-02 1.2209988918993742e+00 -1.2278981052961475e+00 + 2.0993320582920832e-02 1.6437623346507020e+00 -9.5052950655275903e-01 + -2.6442614572339090e-01 1.7098881228565306e+00 -9.9142680343471468e-01 + id 11362 + loc 2.4834305047988892e-01 3.5022780299186707e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4553969664794585e-01:2.6111847367670465e-01:2.0918137099579126e-02:2.6786708557718719e-01:9.4699849460444008e-01:2.9374784437577861e-01:1.9404785104585485e+00:3.8013349040582456e-01:2.3438915437787715e+00:4.0301871138646539e-01:3.0044591843612900e+00:4.4553524125097937e-01:3.6895990168621222e+00 + CVs 20 + -7.6314412078725399e-02 3.7929460384577063e-01 -1.4802130313624812e-01 + -1.7134375347790431e-01 7.6878628734301002e-01 -2.8902484604950313e-01 + -2.9839523498608700e-01 1.1517888395661415e+00 -4.4377596828046439e-01 + -4.7091179972539621e-01 1.5148106902864835e+00 -6.2358453635221678e-01 + -6.9617379547046854e-01 1.8406185204813887e+00 -8.3551937634147078e-01 + -9.7187379865200341e-01 2.1090846379060340e+00 -1.0867764248210361e+00 + -1.2871405167771446e+00 2.3030398634502998e+00 -1.3815720044715332e+00 + -1.6273540621974383e+00 2.4109219572385490e+00 -1.7180552327602812e+00 + -1.9806582012611087e+00 2.4259830509452343e+00 -2.0880574392066018e+00 + -2.3451767544115421e+00 2.3454149409373373e+00 -2.4751872385288554e+00 + -2.7270980112263721e+00 2.1677672082587689e+00 -2.8535963553241763e+00 + -3.1293320534152125e+00 1.8885950530103450e+00 -3.1906422138627231e+00 + -3.5503083087936087e+00 1.5032977878048457e+00 -3.4447559687970424e+00 + -3.9902344053343546e+00 1.0265306360892481e+00 -3.5560860163278667e+00 + -4.4497517231027492e+00 5.1816470262226444e-01 -3.4460639859276774e+00 + -4.9032956614833640e+00 1.3461856224371616e-01 -3.0783260837104027e+00 + -5.3028918459893655e+00 1.0049278004820117e-01 -2.6109394660594054e+00 + -5.5898654215106873e+00 4.4923568416183057e-01 -2.3137803742623144e+00 + -5.8687546076261912e+00 5.0513966839513880e-01 -2.1082820043547832e+00 + id 11363 + loc 1.8432857096195221e-01 1.0355645790696144e-02 1074 + blend 0.0000000000000000e+00 + interp 3.7462071864468371e-01:2.8707977657755207e-01:3.1641469638526987e-03:8.8418615951885479e-02:1.0000000601937331e+00:3.7461697243749731e-01:2.0788319847978034e+00:3.2705506054742806e-01:3.0410688516291393e+00 + CVs 20 + -1.8894731055468372e-01 4.6435704999480426e-01 -1.5707692112999616e-01 + -3.7236152873594958e-01 9.3336586315132897e-01 -3.1052499925994226e-01 + -5.4177249553889717e-01 1.4194639675117229e+00 -4.1915456964234965e-01 + -6.7164751298587788e-01 1.9171365003748451e+00 -4.5915408538555419e-01 + -7.7797861833439785e-01 2.4221847150129503e+00 -4.3221712201077334e-01 + -9.5746727972808543e-01 2.9331675176451215e+00 -3.6687288634900972e-01 + -1.3203831128096255e+00 3.3835089930081814e+00 -3.2424592783704520e-01 + -1.8375972617533969e+00 3.6520854298599068e+00 -3.7479336853231826e-01 + -2.3650577812652585e+00 3.6981180638074074e+00 -5.5192324018502337e-01 + -2.7563579101878397e+00 3.5924543472075006e+00 -8.3799533893978873e-01 + -2.9684156389754444e+00 3.4557226609611211e+00 -1.1721927124850755e+00 + -3.0664899036322137e+00 3.3326371501448504e+00 -1.5129650187392474e+00 + -3.1173321687998250e+00 3.1877149085368783e+00 -1.8670129466028342e+00 + -3.1301575308740284e+00 2.9451363982413223e+00 -2.2642185791483840e+00 + -3.0679860497654783e+00 2.5325013677190942e+00 -2.6878377859952627e+00 + -2.8791849305018804e+00 1.9576181538065209e+00 -3.0349995696388690e+00 + -2.4693716878536458e+00 1.2664988483681134e+00 -3.1791183680371917e+00 + -1.8716696676750582e+00 6.7019899958444551e-01 -3.0033154392768306e+00 + -1.7447827098111841e+00 4.3413267062151017e-01 -2.9342728809481993e+00 + id 11364 + loc 6.6654686816036701e-03 1.5748393535614014e-01 1047 + blend 0.0000000000000000e+00 + interp 5.1950462501986916e-01:5.1949942997361898e-01:1.7159383138876416e-01:4.5363931442490496e-01:1.0015160400125960e+00:2.2612106214892161e-01:1.5761815268178943e+00:3.1161624416676964e-01:1.9999786348163060e+00:2.6337478857992075e-01:2.9482413560918750e+00:3.7244631348775237e-01:3.9246962227870781e+00 + CVs 20 + -7.1103737246773191e-01 5.4889383817608095e-01 1.3979475704111566e-02 + -1.3038841128145060e+00 1.0886766951300200e+00 -1.1612496633133190e-01 + -1.7407558706709025e+00 1.6116756940748787e+00 -4.0113591936564008e-01 + -2.0022936803104754e+00 2.0859934414587249e+00 -8.2562143091697737e-01 + -2.0966292291291828e+00 2.4742767137161890e+00 -1.3523450422710870e+00 + -2.0686428102883418e+00 2.7490815262322639e+00 -1.9362085926855228e+00 + -1.9736671405600621e+00 2.8882206917644009e+00 -2.5420173597536726e+00 + -1.8576457225700287e+00 2.8756621699626126e+00 -3.1418936613416606e+00 + -1.7386342468002272e+00 2.7138371375318151e+00 -3.7054673383978054e+00 + -1.6011864630399624e+00 2.4197200192405846e+00 -4.2044896653394312e+00 + -1.4261537659408918e+00 2.0003126001456613e+00 -4.6056602015047101e+00 + -1.1892758036290938e+00 1.4624510559067412e+00 -4.8647201173236949e+00 + -8.5793519101852089e-01 8.4564435447267383e-01 -4.9302889644859027e+00 + -4.0020857292173417e-01 2.3809091858719950e-01 -4.7571772592013968e+00 + 1.7840483322967027e-01 -2.3327485816661009e-01 -4.3359665816246462e+00 + 8.1799878175341045e-01 -4.5416555871352171e-01 -3.7210813726468652e+00 + 1.4519081034501831e+00 -3.5044036316812210e-01 -2.9864828958880123e+00 + 1.9232093426255907e+00 2.5288285150562029e-01 -2.1620009890407239e+00 + 1.8922971961310293e+00 6.9288200533359212e-01 -1.8685257977601983e+00 + id 11365 + loc 2.5529208779335022e-01 4.7546723484992981e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5200638871394155e-01:4.1458036349473881e-01:7.7882858192395810e-01:4.5200186865005443e-01:1.1891855792210555e+00:3.6710687710586315e-01:1.9992010437392369e+00:4.0156956561902657e-01:2.8356016094192782e+00:4.5050252449689793e-01:3.2583425371870756e+00:3.9958281790388472e-01:3.9883804965857754e+00 + CVs 20 + -2.7383799637356415e-01 3.0930974201100070e-01 -6.3005715002135115e-02 + -5.5645134158858534e-01 6.3296021624334275e-01 -1.0029702608981098e-01 + -8.5130869012942634e-01 9.7317559317179092e-01 -1.2789783471948502e-01 + -1.1387558238481084e+00 1.3325081971180537e+00 -1.4930736439573403e-01 + -1.3679002037001637e+00 1.6833632126052014e+00 -1.4668542777313107e-01 + -1.5048516967634469e+00 1.9575666007912043e+00 -1.0052415814873011e-01 + -1.5872167175061964e+00 2.1708147464014695e+00 -1.4318280129791749e-02 + -1.7349853954178525e+00 2.3651990637682423e+00 5.7280623722897828e-02 + -2.0291045712889288e+00 2.4991900331475851e+00 7.2327837408739881e-02 + -2.5051022073676781e+00 2.5043984292698314e+00 3.4813283917100035e-03 + -3.0739114627031334e+00 2.3448408470625597e+00 -2.0499906775903787e-01 + -3.5703994352512298e+00 2.0902304103818046e+00 -5.5310244437147227e-01 + -3.9283529832743533e+00 1.8341388563485568e+00 -9.6616161206080753e-01 + -4.1830985632246769e+00 1.6281169180799717e+00 -1.3874540888027524e+00 + -4.3833805929718537e+00 1.4636297757176906e+00 -1.8112606079724916e+00 + -4.5478398196949765e+00 1.2402779655308909e+00 -2.2774615850165683e+00 + -4.6076213007661790e+00 7.4446454157565090e-01 -2.8193822513009312e+00 + -4.2942854894733777e+00 -1.0557839564161370e-01 -3.2169364091937043e+00 + -4.1168646202434438e+00 -3.4574439901915044e-01 -3.2635703781040979e+00 + id 11366 + loc 9.5019258558750153e-02 9.2955148220062256e-01 1077 + blend 0.0000000000000000e+00 + interp 4.2569472334486574e-01:2.7992852970078241e-01:7.4423843972927139e-01:3.7645025395487453e-01:1.5936405897551031e+00:4.0459224263384586e-01:2.0617703672542902e+00:3.1764130445848421e-01:2.7903655706240587e+00:2.7507363461807127e-01:3.2471920389826399e+00:4.2569046639763231e-01:3.9321983530124482e+00 + CVs 20 + 8.2415134348670982e-02 2.7485028853982102e-01 -1.2668116188414513e-01 + 1.7103272898835148e-01 5.7412955873720395e-01 -2.2300339516230813e-01 + 2.7740420480962297e-01 8.8638020002098061e-01 -3.2737115051220589e-01 + 4.0650293243764279e-01 1.1994864069114186e+00 -4.6197956192898199e-01 + 5.6147455667215307e-01 1.5114948718275345e+00 -6.3632660725274759e-01 + 7.4839323310804073e-01 1.8149883899361545e+00 -8.6028241435821373e-01 + 9.7510546185580838e-01 2.0899873475788162e+00 -1.1400024825450963e+00 + 1.2432389012467753e+00 2.3127981501874553e+00 -1.4730728412581655e+00 + 1.5452924394943208e+00 2.4669689869837912e+00 -1.8522258327137202e+00 + 1.8679507212794100e+00 2.5418914645171937e+00 -2.2694354286780740e+00 + 2.1943225649577331e+00 2.5300768624862537e+00 -2.7161921396548139e+00 + 2.5045710954516216e+00 2.4270344483982207e+00 -3.1813777816411157e+00 + 2.7783602369656357e+00 2.2340291798025169e+00 -3.6475937579422255e+00 + 3.0016822815363144e+00 1.9610062414576968e+00 -4.0914534918637981e+00 + 3.1755876664089393e+00 1.6141281735159336e+00 -4.4975769117265356e+00 + 3.3152794095257971e+00 1.1500002321197660e+00 -4.8663251891341588e+00 + 3.4278518320344049e+00 4.5283321780969121e-01 -5.1131505331305975e+00 + 3.4757738834448229e+00 -2.7674594826354948e-01 -5.0202570463730680e+00 + 3.4664927289757994e+00 -5.1244159941554202e-01 -4.8981254828653631e+00 + id 11367 + loc 3.4399449825286865e-01 7.6202327013015747e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7839426323316292e-01:3.1437886700537615e-01:6.9063859047189258e-03:3.8327963281312111e-01:9.8727781449445995e-01:4.3554152637203486e-01:1.7654930222230347e+00:3.9289740085778191e-01:2.1251519324175021e+00:4.7698308976094206e-01:2.8420372974747767e+00:4.7838947929053061e-01:3.0409523406256529e+00:4.4382180279246924e-01:3.5972431109618586e+00 + CVs 20 + 7.4182078971043022e-02 2.5026438280189856e-01 -1.4480862985940607e-01 + 1.5978844863684158e-01 5.0240648918078046e-01 -3.2006923917709568e-01 + 2.5569708498653143e-01 7.4647395277203077e-01 -5.1656410620410675e-01 + 3.5812663797486011e-01 9.7823519797234437e-01 -7.2674990565251030e-01 + 4.6171057589610703e-01 1.1995848316666595e+00 -9.4912185301224472e-01 + 5.6567669648559149e-01 1.4143362265025496e+00 -1.1856611208063095e+00 + 6.7421623793782914e-01 1.6250788604698487e+00 -1.4407141684608891e+00 + 7.9132887493545356e-01 1.8300757370003367e+00 -1.7164665171840556e+00 + 9.1827302902283170e-01 2.0191916107835435e+00 -2.0136494603425477e+00 + 1.0534764273000343e+00 2.1707707401036602e+00 -2.3345073791715243e+00 + 1.1908366471203076e+00 2.2536318610501294e+00 -2.6783399189861163e+00 + 1.3183124469731908e+00 2.2390973762593007e+00 -3.0310056264375462e+00 + 1.4201395800922387e+00 2.1171133074626258e+00 -3.3649586056173559e+00 + 1.4847721626282759e+00 1.9028987415617373e+00 -3.6501087260699960e+00 + 1.5083207143009953e+00 1.6284599625381511e+00 -3.8740425251903812e+00 + 1.4799478937648882e+00 1.3240550247960055e+00 -4.0448961292678245e+00 + 1.3804409218864286e+00 1.0213677854697294e+00 -4.1770627746516844e+00 + 1.2141226940230179e+00 7.5300863245998872e-01 -4.2833715297531700e+00 + 1.0599263223836541e+00 5.0954541965909605e-01 -4.4153903765696167e+00 + id 11368 + loc 7.6076225377619267e-04 8.6332476139068604e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0297947466646731e-01:5.0297444487172072e-01:2.5258693375910246e-03:3.5538193009151908e-01:7.8263553924797913e-01:4.1519096391155796e-01:1.0558407878611153e+00:2.4769223076163144e-01:1.7621783230023591e+00:2.8365445147257778e-01:2.2205914880738273e+00:3.3139454199870405e-01:2.9753578570318564e+00:4.2591669279160355e-01:3.4268213113981503e+00 + CVs 20 + 2.0087673452107935e-02 3.7148824349483645e-01 -1.4964372656163125e-01 + 8.0097055191070299e-02 7.2550802563236461e-01 -3.0335374016699762e-01 + 1.4748235726721898e-01 1.0733759055303511e+00 -4.5277782675895101e-01 + 2.0365532471167141e-01 1.4225884306250567e+00 -5.9053093033019421e-01 + 2.3554462849966346e-01 1.7811501329144115e+00 -6.9911668386210912e-01 + 2.3436284627021275e-01 2.1553140251923946e+00 -7.6026004624196308e-01 + 2.0526356962964898e-01 2.5504289058936758e+00 -7.9913189560084164e-01 + 1.6110474254658602e-01 2.9614747338050900e+00 -8.8846010143702447e-01 + 1.1909981787171642e-01 3.3496245609838433e+00 -1.0881359369617876e+00 + 1.1123604494506323e-01 3.6268695024914956e+00 -1.3784814122347868e+00 + 1.5901165137237872e-01 3.7679554741550763e+00 -1.6717501650716200e+00 + 2.9641649171275897e-01 3.8159069007852033e+00 -1.9184119888038986e+00 + 5.6305907979458847e-01 3.8056218133933331e+00 -2.0963307972313392e+00 + 1.0051117334754518e+00 3.7284752277074444e+00 -2.1992995237107027e+00 + 1.6046267097952129e+00 3.5079240415622692e+00 -2.1946618878879427e+00 + 2.2277079062211604e+00 3.0790783022071357e+00 -2.0603401931779239e+00 + 2.7337589248354117e+00 2.4287540453921208e+00 -1.7372572907706150e+00 + 2.9035062944162435e+00 1.7758939908713698e+00 -1.1777734863201892e+00 + 2.8081210603997979e+00 1.4689875108706771e+00 -7.1646686204796484e-01 + id 11369 + loc 5.7015877962112427e-01 5.0369465351104736e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4900357538567653e-01:3.1136652973881440e-01:4.1957719093777046e-01:4.2567672019544545e-01:9.8497205638868657e-01:3.5220221520115425e-01:1.7311968124983979e+00:3.0873692209480841e-01:2.0758630718369151e+00:4.4899908534992272e-01:2.6057913945570350e+00:3.6726723600215799e-01:3.1627286963407459e+00:3.3289360695227399e-01:3.9565788750505879e+00 + CVs 20 + 8.1632898446070551e-02 2.9595472726569555e-01 -2.1796805462266799e-01 + 1.7579757038774479e-01 5.9698055577350806e-01 -4.6484034620760906e-01 + 2.9705804401186892e-01 8.9866064201076645e-01 -7.1999034996162348e-01 + 4.5877012391393202e-01 1.1901768516487510e+00 -9.6810119960028784e-01 + 6.6485628846215072e-01 1.4462252932068393e+00 -1.2088445720875587e+00 + 9.0242761158142371e-01 1.6334218315725071e+00 -1.4605942553933018e+00 + 1.1500406015829423e+00 1.7352460466687352e+00 -1.7402289586892379e+00 + 1.3848282717105755e+00 1.7521710396001327e+00 -2.0494837202405027e+00 + 1.5801337704491967e+00 1.6862971739281643e+00 -2.3798429086457014e+00 + 1.7090256602756289e+00 1.5364527952474207e+00 -2.7130746856204238e+00 + 1.7490432325234919e+00 1.3030091972931275e+00 -3.0186194073113408e+00 + 1.6931540263265736e+00 9.9879787096057493e-01 -3.2597474887068252e+00 + 1.5519730853976474e+00 6.4678450738076276e-01 -3.4025986853374324e+00 + 1.3442560719422005e+00 2.7552809315508997e-01 -3.4147620340148750e+00 + 1.0962570614099920e+00 -7.4567240013897668e-02 -3.2774043260179146e+00 + 8.3581995046036028e-01 -3.5777399798631859e-01 -3.0054316786257278e+00 + 5.9043439354278393e-01 -5.5605942467335157e-01 -2.6558274389796437e+00 + 3.7173810018179193e-01 -7.2772158183501967e-01 -2.3254114727625783e+00 + 1.4162480463260912e-01 -1.0710555782736166e+00 -2.2007336853336064e+00 + id 11370 + loc 8.8321614265441895e-01 8.9335340261459351e-01 1047 + blend 0.0000000000000000e+00 + interp 3.7327538845454264e+00:3.7327438845454264e+00:2.7198851422866743e-01:1.7958349828893798e+00:3.3231833332524996e-01:9.0299165714021945e-01:4.0529751155466753e-01:2.5048835202899994e-01:4.1594929538955749e-01:5.3284014127083079e-01:4.5412611881176179e-01:3.6182808138288247e-01:9.8461005357666143e-01:1.7760292423224050e-01:1.9019853579188493e+00:8.4457222646007879e-01:2.0606972141752795e+00:1.3731460938938691e+00:2.0902846988044606e+00:2.1239602038152885e+00:2.0969670751356659e+00 + CVs 20 + 1.9405082932300272e-01 7.2805404545517094e-01 -5.7589706549956843e-01 + 4.2401892169137306e-01 1.3804903884434849e+00 -1.0967691230906986e+00 + 7.0644059279733040e-01 1.9985400742360240e+00 -1.5880337948202623e+00 + 1.0707442216548346e+00 2.5963898804691978e+00 -1.9639177227756468e+00 + 1.5394536309112263e+00 3.1463996932321066e+00 -2.0703054794727667e+00 + 2.0601217695910901e+00 3.5625800757523169e+00 -1.8385197120336816e+00 + 2.5218021596852416e+00 3.7459480742205358e+00 -1.3259649495334627e+00 + 2.8336303728854539e+00 3.6531317358333180e+00 -6.6338952783678740e-01 + 2.9659324165969734e+00 3.3114448396973488e+00 1.3747305803281984e-02 + 2.9294084978188644e+00 2.7824683655345499e+00 6.0474252555652619e-01 + 2.7510003149674951e+00 2.1465717098992600e+00 1.0759566870582242e+00 + 2.4534832767100587e+00 1.4911892485430047e+00 1.4699907970431876e+00 + 2.0662023599077961e+00 9.1695313599677142e-01 1.8650854944848563e+00 + 1.6665948830373438e+00 5.2982807161631362e-01 2.3180744485004170e+00 + 1.4129922021059260e+00 4.3274452454781165e-01 2.8146992250717608e+00 + 1.3888193946649590e+00 6.1628664662570865e-01 3.2123756308992313e+00 + 1.4974482597823018e+00 9.6302622397910187e-01 3.5011002999829706e+00 + 1.7142876284088762e+00 1.4601201586351018e+00 3.7190044423651063e+00 + 2.0590046584773236e+00 2.1176025593228722e+00 3.9740468937201685e+00 + id 11371 + loc 4.8208630084991455e-01 4.4587051868438721e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7972743425321829e-01:4.6993468160966295e-01:2.3806610792597604e-02:2.6690595046343280e-01:4.5463555740862815e-01:4.1470845798984562e-01:9.9672664335949912e-01:4.3590194738513260e-01:1.4206689430227091e+00:4.4690782449821392e-01:1.9756026822884967e+00:2.5252886480337194e-01:2.2882703696292053e+00:4.1961167212748607e-01:2.9840702053710029e+00:4.7972263697887579e-01:3.5467032387545236e+00 + CVs 20 + -2.1895621051904993e-01 2.0637361229879070e-01 -2.8395957706767568e-02 + -4.0828732396679723e-01 4.1212289124135121e-01 -3.8786487010574938e-02 + -5.7322600153951131e-01 6.0542933573881585e-01 -4.2768052621092068e-02 + -7.2161613314249984e-01 7.8639014929214923e-01 -4.7078444980058393e-02 + -8.6805512501280757e-01 9.6911672352504075e-01 -5.0052442477690195e-02 + -1.0350846910561715e+00 1.1629689238711274e+00 -5.5651650160328081e-02 + -1.2419976450073036e+00 1.3658249134067306e+00 -7.7771750885398727e-02 + -1.4980875504948794e+00 1.5639360289059427e+00 -1.3713614743464320e-01 + -1.7965687158732826e+00 1.7380890738293986e+00 -2.5460967826410558e-01 + -2.1124867048784068e+00 1.8691067970921085e+00 -4.4646255809674262e-01 + -2.4209577126713882e+00 1.9494101896706437e+00 -7.1537914034171957e-01 + -2.7147224318264414e+00 1.9815848036948787e+00 -1.0521132142568232e+00 + -2.9968654601875544e+00 1.9637459418752414e+00 -1.4418414447912342e+00 + -3.2598993848516655e+00 1.8828202795054598e+00 -1.8657806084844124e+00 + -3.4814509382541434e+00 1.7326267953954648e+00 -2.3039577658022066e+00 + -3.6395326084983379e+00 1.5023330351108479e+00 -2.6984399301936310e+00 + -3.7272359641425155e+00 1.2049182103377527e+00 -2.9628292417899740e+00 + -3.8460244108255601e+00 9.2730924471049558e-01 -3.0415851502370534e+00 + -4.2909599692160203e+00 9.1240739795144110e-01 -2.7922738207729934e+00 + id 11372 + loc 6.7472583055496216e-01 2.1320864558219910e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4242371023994342e-01:3.7265715516891085e-01:6.1295999328009487e-01:2.8492635079767675e-01:1.0616917537670640e+00:3.8461156584635203e-01:1.9972497751205203e+00:2.9936205731633464e-01:2.5872837434505431e+00:4.4241928600284103e-01:3.0133283194219826e+00:4.0644893538153759e-01:3.8230804652130219e+00 + CVs 20 + 2.9591744711401557e-01 3.2327821040516952e-01 -1.8571007056073977e-01 + 5.4133489184044947e-01 5.8250934718797109e-01 -2.5371231599463079e-01 + 7.4360318149153892e-01 8.0614076370841004e-01 -2.6059189391073639e-01 + 9.0314096152144696e-01 1.0017204927933343e+00 -2.3234322779490946e-01 + 1.0263922960547136e+00 1.1726112387505381e+00 -1.6505560910826511e-01 + 1.1298098005124975e+00 1.3488281545186203e+00 -5.1591611028336426e-02 + 1.2223386602751836e+00 1.5756359386174603e+00 7.7329742776975241e-02 + 1.2999737408810499e+00 1.8662522308160105e+00 1.6040673141573780e-01 + 1.3602812503601518e+00 2.2105488563426872e+00 1.6716380884189319e-01 + 1.4139891054432951e+00 2.6115873034870525e+00 7.9485484049970800e-02 + 1.5085244564508067e+00 3.0453080118340967e+00 -1.3893430245147531e-01 + 1.7052439486690070e+00 3.4055015862552809e+00 -4.8453515752605836e-01 + 2.0020411289041404e+00 3.6087340272227557e+00 -8.9612622448568846e-01 + 2.3449496149649791e+00 3.6410800472805782e+00 -1.3245953382828950e+00 + 2.6887575074474523e+00 3.5196396813838664e+00 -1.7349064426242813e+00 + 3.0581385796976832e+00 3.2600503062011028e+00 -2.1200026240767120e+00 + 3.4985377053156297e+00 2.8225798260140218e+00 -2.4668040518715637e+00 + 3.9204665620721535e+00 2.1848239067732238e+00 -2.6845757613681700e+00 + 3.9800667805968022e+00 1.8885941431232243e+00 -2.6134830120706853e+00 + id 11373 + loc 9.0066212415695190e-01 4.9458593130111694e-01 410 + blend 0.0000000000000000e+00 + interp 4.6921232061045298e-01:2.5750818145944648e-01:2.2740841627554043e-01:3.2883385783229019e-01:1.0336126474827765e+00:4.6920762848724690e-01:1.6593347182453386e+00:4.4535200616343873e-01:2.2211915898752057e+00:2.6267468426037915e-01:2.9041189212750380e+00:3.4073185313047172e-01:3.3290351011816006e+00 + CVs 20 + -4.4598735526097838e-01 2.5884451869038128e-01 1.7555763529924301e-01 + -8.1629155546938470e-01 4.6903003644502972e-01 3.2916877138554596e-01 + -1.1819646219895512e+00 6.6900409428370455e-01 4.6867578905910312e-01 + -1.5652220338913032e+00 8.6149305985413016e-01 6.0741095279359536e-01 + -1.9585484764388528e+00 1.0270679390227828e+00 7.6888578845665012e-01 + -2.3490336441904129e+00 1.1449263723627277e+00 9.7940654466126498e-01 + -2.7158071010427745e+00 1.1973759607663252e+00 1.2574098872224262e+00 + -3.0393334998024399e+00 1.1713990177910816e+00 1.6044598656263362e+00 + -3.3185542703012452e+00 1.0572457762118503e+00 2.0034957577732544e+00 + -3.5639782132308109e+00 8.4365218366577088e-01 2.4232264848673504e+00 + -3.7817990610632179e+00 5.1104677665768272e-01 2.8211218470551924e+00 + -3.9738314859248209e+00 5.9108496755305495e-02 3.1709046743793294e+00 + -4.1503870943921823e+00 -4.5996000417550653e-01 3.5059365017372510e+00 + -4.3307291500810727e+00 -9.6927246335739436e-01 3.8835846967508627e+00 + -4.5383339142775911e+00 -1.3952675388736004e+00 4.3483473359821714e+00 + -4.8005951949421926e+00 -1.7070951007056745e+00 4.9090942564686504e+00 + -5.1455738622718421e+00 -1.9260802511213067e+00 5.5341155027295423e+00 + -5.5734958870650182e+00 -2.0876218854481401e+00 6.1630562813145566e+00 + -6.0375911606926209e+00 -2.2267765477129080e+00 6.7558583575868871e+00 + id 11374 + loc 7.6810640096664429e-01 7.0552605390548706e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4248736300840924e-01:4.2336038931635439e-01:4.0935159117618358e-02:3.5291907593111949e-01:7.7405375102746632e-01:4.2593360456698792e-01:1.2831608899147016e+00:4.4248293813477918e-01:1.9454507723637136e+00:3.5082399475514969e-01:2.5752804851615383e+00:3.4811468636090931e-01:3.5724183056640664e+00 + CVs 20 + 1.7289236523717000e-01 2.9084584616755610e-01 -2.3051050047905919e-01 + 3.6601474397816497e-01 5.8384884667140935e-01 -4.4335828364585467e-01 + 5.6322014509877094e-01 8.6180055598152328e-01 -6.6847890335777227e-01 + 7.5485690915991122e-01 1.1122726858410430e+00 -9.1422006247961785e-01 + 9.3283972502999446e-01 1.3156811738448575e+00 -1.1772558192342322e+00 + 1.0884128700259392e+00 1.4484297638815853e+00 -1.4611108643588253e+00 + 1.2232186541669661e+00 1.5080006653700539e+00 -1.7753552432593160e+00 + 1.3456599458541341e+00 1.5059352131742403e+00 -2.1286257013456629e+00 + 1.4590974916676713e+00 1.4512319163683771e+00 -2.5158267780640360e+00 + 1.5653837850508856e+00 1.3531659727512264e+00 -2.9233191970076970e+00 + 1.6657754005095680e+00 1.2199803470115840e+00 -3.3357427541593632e+00 + 1.7552337532242348e+00 1.0553471562662804e+00 -3.7380050880050200e+00 + 1.8192319304464275e+00 8.6090965822325294e-01 -4.1214513027252222e+00 + 1.8299546031854288e+00 6.5215765360829558e-01 -4.4853289435277430e+00 + 1.7515099832086918e+00 4.7185254286949702e-01 -4.8281858515303258e+00 + 1.5741148101780518e+00 3.6870923059708316e-01 -5.1384064316008438e+00 + 1.3284756713101129e+00 3.6941988368441792e-01 -5.4007061397583405e+00 + 1.0646787838064919e+00 4.5151703764891016e-01 -5.6247480019489258e+00 + 8.2075201779128282e-01 3.9286062203234395e-01 -5.9728769766509098e+00 + id 11375 + loc 2.5218394398689270e-01 7.6882332563400269e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4777395524509389e-01:3.2440232860098372e-01:5.4910544342771750e-01:4.1075126450218624e-01:1.0044091165798752e+00:4.1836169609396012e-01:1.5280665623020768e+00:4.1826199181535278e-01:1.9957533235570240e+00:2.9488246258104889e-01:2.3009349223339575e+00:4.4776947750554147e-01:3.2133883795657603e+00:4.1666665862223068e-01:3.9873539060074181e+00 + CVs 20 + 1.6682135519864433e-01 2.8645889682012904e-01 -7.5515240388565497e-02 + 2.8846519792116054e-01 6.2090821202131119e-01 -1.6465633256592802e-01 + 4.1193207486808520e-01 9.8214723256759695e-01 -2.9176045208714141e-01 + 5.6110496860970460e-01 1.3435301571346756e+00 -4.7464010629002340e-01 + 7.4358055541110368e-01 1.6860597707995393e+00 -7.2824144769622323e-01 + 9.6932711741629141e-01 1.9834230718325123e+00 -1.0588971125648201e+00 + 1.2440933964696648e+00 2.2056341080847739e+00 -1.4585084293743531e+00 + 1.5637662480534766e+00 2.3283662589690204e+00 -1.9063418946320083e+00 + 1.9141007518848403e+00 2.3392421755414139e+00 -2.3753652117985484e+00 + 2.2696581837323855e+00 2.2404196084248884e+00 -2.8380424294335334e+00 + 2.5986189197680081e+00 2.0475515833334428e+00 -3.2747466108972239e+00 + 2.8693068379272431e+00 1.7811566376721675e+00 -3.6757393829732474e+00 + 3.0463263600716903e+00 1.4677922482912846e+00 -4.0321892837408573e+00 + 3.0931864946957668e+00 1.1627685826003558e+00 -4.3259950192325780e+00 + 2.9989608784893687e+00 9.7083367633556383e-01 -4.5230641763803678e+00 + 2.8475872659055428e+00 1.0254090908279128e+00 -4.5640928700983308e+00 + 2.8333360614401997e+00 1.3154974272085209e+00 -4.3969872826442709e+00 + 2.9405532561106664e+00 1.5730587728545924e+00 -4.1276281350995436e+00 + 2.5737352843534880e+00 1.6287777376746790e+00 -4.3097806167705004e+00 + id 11376 + loc 3.8074609637260437e-01 9.4155952334403992e-02 1074 + blend 0.0000000000000000e+00 + interp 5.9122182727111916e-01:2.6184946113415952e-01:5.5840515823540704e-01:5.9121591505284643e-01:1.0054577900729689e+00:5.5178201627744761e-01:1.7224108494304176e+00:4.1396402359211598e-01:1.9918293307463653e+00:3.1405672275934893e-01:2.3292419152722634e+00:4.0455551852368782e-01:2.9390050763189719e+00:4.7649512904051716e-01:3.2938886566114114e+00:3.6780607502556195e-01:3.9918970316710269e+00 + CVs 20 + -2.6495970675786046e-01 4.0673611105464941e-01 -1.2388794738204745e-01 + -4.8478847677876297e-01 8.2317379980461014e-01 -2.5666351072735871e-01 + -6.7804557247373987e-01 1.2547924350378294e+00 -3.7846847164109204e-01 + -8.4184088934539203e-01 1.6991067272673543e+00 -4.7730704566765619e-01 + -1.0036789588251875e+00 2.1642100550978984e+00 -5.5119372011936307e-01 + -1.2483973474623395e+00 2.6368552384624606e+00 -6.0909098511862159e-01 + -1.6442563677289630e+00 3.0126353542550675e+00 -6.8146297165169034e-01 + -2.1244867970398760e+00 3.1760111069444075e+00 -8.0785197279314447e-01 + -2.5536731380236879e+00 3.1287345745840542e+00 -1.0047790911360970e+00 + -2.8315304890187680e+00 2.9522620537598856e+00 -1.2608455058793331e+00 + -2.9286495143502909e+00 2.7397713323119284e+00 -1.5449009071421409e+00 + -2.8840807240348814e+00 2.5335905918419579e+00 -1.8270948773301581e+00 + -2.7589901307053224e+00 2.3097165964966484e+00 -2.1040660841269925e+00 + -2.5676173791330408e+00 2.0121901044155428e+00 -2.3627999689508159e+00 + -2.2684416197424491e+00 1.6473282794567496e+00 -2.5005968920128758e+00 + -1.8632073454584805e+00 1.3510938771239835e+00 -2.4004923627355015e+00 + -1.4544568018978137e+00 1.3997009142250034e+00 -1.9675199942884369e+00 + -1.3840636876990446e+00 2.0004976184576018e+00 -1.4455122749144860e+00 + -1.0185306001519596e+00 1.9418889091762157e+00 -1.1863588542172783e+00 + id 11377 + loc 4.2412492632865906e-01 2.6860132813453674e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9397275148413655e-01:4.1095474307200963e-01:3.6374718709768628e-01:3.7454664834655826e-01:9.8171191286997761e-01:3.0742555952983547e-01:1.8311213280589360e+00:3.4362100108284349e-01:2.1840753109825264e+00:4.9396781175662174e-01:2.8685642914683767e+00:3.5864098969375430e-01:3.2226889604764963e+00:4.1151410566419760e-01:3.9975333678528377e+00 + CVs 20 + 3.1578820447067935e-01 4.1258018201677532e-01 1.7268339605829214e-01 + 5.8714994574299939e-01 7.9836087801752731e-01 3.6890541212037975e-01 + 8.4816006982087822e-01 1.1759432337399356e+00 5.8745686255618712e-01 + 1.1119355407538287e+00 1.5495483477108538e+00 8.4002556571813458e-01 + 1.3712934609116201e+00 1.9025598088687405e+00 1.1446082605248979e+00 + 1.6170004889667147e+00 2.2105855132194652e+00 1.5174757269418699e+00 + 1.8349353451067205e+00 2.4441470210714691e+00 1.9682320055952038e+00 + 2.0020109398204728e+00 2.5736778275570611e+00 2.4935090442604562e+00 + 2.0909916824647037e+00 2.5700582906478346e+00 3.0738893422250113e+00 + 2.0786063132497370e+00 2.3948964393379351e+00 3.6743763823674289e+00 + 1.9441407746322077e+00 2.0029368833933359e+00 4.2242347740513377e+00 + 1.6951385507798102e+00 1.4110524563085423e+00 4.6127260214264645e+00 + 1.3748304730031828e+00 7.2417167560794193e-01 4.7806668140283444e+00 + 1.0147050864222553e+00 9.2905592563989892e-02 4.7868990057506187e+00 + 6.1829560855128629e-01 -3.6674537866794743e-01 4.7700478953125840e+00 + 1.8439335559550507e-01 -6.2119874274859654e-01 4.8102599993235318e+00 + -2.7517666217615044e-01 -6.5655170118254302e-01 4.9129859168809586e+00 + -6.9144716930677053e-01 -4.9430427301071211e-01 5.0794063799307203e+00 + -1.1113899673897765e+00 -4.6281737524906696e-01 5.2068963613352448e+00 + id 11378 + loc 3.5911679267883301e-01 2.1889215707778931e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4668145839759360e-01:4.3562433619436330e-01:2.5184560932330569e-02:2.5066310845329459e-01:4.1278738846770924e-01:2.8138105650208284e-01:1.0504236957422852e+00:2.4418653097207438e-01:1.9993795003626165e+00:3.4182911215635131e-01:2.9817722439422436e+00:4.4667699158300966e-01:3.4554116964124644e+00 + CVs 20 + -2.1339985216136087e-01 2.9162774473231812e-01 -6.8937026180126856e-02 + -4.3901992570205423e-01 6.2138095309923347e-01 -9.7028370451490598e-02 + -6.7934630864769185e-01 9.7193036247063858e-01 -1.0319452029634973e-01 + -9.5068266941659052e-01 1.3227544197655583e+00 -1.0923302496519760e-01 + -1.2706909806910407e+00 1.6516491315565245e+00 -1.3672289336100529e-01 + -1.6381945996109015e+00 1.9334738602787140e+00 -2.1297989824394958e-01 + -2.0285355274670347e+00 2.1329200828070931e+00 -3.7756521002069587e-01 + -2.3943317081795015e+00 2.1951507717740260e+00 -6.5274311229999959e-01 + -2.6825394884024520e+00 2.0892705139215546e+00 -1.0007714431499188e+00 + -2.8691227094263247e+00 1.8420649883553817e+00 -1.3593597973725244e+00 + -2.9569282235693404e+00 1.4931363646905482e+00 -1.6702444458603212e+00 + -2.9663711671846928e+00 1.0782577967832911e+00 -1.8562313808534734e+00 + -2.9258673728518665e+00 6.5592384518590907e-01 -1.8727707525540165e+00 + -2.8343666787521649e+00 2.6493998418707998e-01 -1.8377001702855558e+00 + -2.6571612738022852e+00 -1.2869895212167870e-01 -1.9377688770387380e+00 + -2.3812205556155019e+00 -4.8396655320011961e-01 -2.2546945446720570e+00 + -2.0579018510012395e+00 -6.6860042607318670e-01 -2.7761660105396362e+00 + -1.7680538370131205e+00 -6.1646632623501008e-01 -3.3497323836928583e+00 + -1.5517411033596851e+00 -6.6439535747956247e-01 -3.7038818260437525e+00 + id 11379 + loc 1.3814340531826019e-01 7.7239662408828735e-01 410 + blend 0.0000000000000000e+00 + interp 4.3250581428991663e-01:2.4061433476892008e-01:7.6693595462641007e-01:3.9261299580781733e-01:1.0710762434660461e+00:4.3250148923177373e-01:1.7962286379920847e+00:3.7015565771251041e-01:2.3765751939459854e+00:2.9896725780441774e-01:3.0002319947960925e+00:3.0696686768988241e-01:3.9924785358204371e+00 + CVs 20 + 3.9094779180899308e-01 1.2232493720703494e-01 -1.2069467251541156e-01 + 7.2103011695566499e-01 1.9038149021752909e-01 -2.4618520304842550e-01 + 1.0575466420901862e+00 2.4691278257164107e-01 -3.5921949442793621e-01 + 1.4247956097814507e+00 3.0395826982366569e-01 -4.4991998853231596e-01 + 1.8171037750759274e+00 3.5672971609052040e-01 -5.0869958080111966e-01 + 2.2258980718266299e+00 4.0240747370253915e-01 -5.2454221565611658e-01 + 2.6394865266319036e+00 4.3924466429628461e-01 -4.9041757261233743e-01 + 3.0458629603265370e+00 4.6614467863030629e-01 -4.0730588918107402e-01 + 3.4351122252581954e+00 4.8465235722991085e-01 -2.7933761306495253e-01 + 3.7992710503806428e+00 4.9627576875462220e-01 -1.1464188363048733e-01 + 4.1395244686909569e+00 4.8597255571343601e-01 5.0195911523750025e-02 + 4.4727973995260708e+00 4.1792998291084982e-01 1.4033826182996378e-01 + 4.7985473499473112e+00 2.8105231045292278e-01 1.0957704140662816e-01 + 5.1034752888806736e+00 1.0828991306560898e-01 -2.2781594862936183e-03 + 5.3921485249872738e+00 -7.9817693107277599e-02 -1.5336368211669993e-01 + 5.6577422003617519e+00 -2.7509009283381802e-01 -3.5201200291671786e-01 + 5.8880129737920406e+00 -4.6117983891105219e-01 -6.0727906771459750e-01 + 6.0959249308705221e+00 -6.2314245919328570e-01 -8.9074867386737810e-01 + 6.4070262878190700e+00 -7.5308224541731361e-01 -1.0539589252064263e+00 + id 11380 + loc 4.1206067800521851e-01 4.7534066438674927e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2504051178688460e-01:3.2222021229866260e-01:5.6628341445163377e-02:2.9131906991098538e-01:9.2855609569206854e-01:2.8643211275767505e-01:1.9686153642671371e+00:4.6867703732154253e-01:2.1724218405006961e+00:5.2503526138176670e-01:2.7522167610509927e+00:2.7071160011825995e-01:3.2794778297012401e+00 + CVs 20 + -4.5037408743206725e-01 7.1362860865263900e-01 -1.2573757159922633e-01 + -8.3975419231656268e-01 1.4311959491219910e+00 -3.2280613982941186e-01 + -1.1305664005464178e+00 2.1244139812176699e+00 -5.8281663878394574e-01 + -1.2249510306241000e+00 2.7190591594933755e+00 -9.0304544705657008e-01 + -1.0643316906992921e+00 3.1419483134118815e+00 -1.2581631918932210e+00 + -6.9337807608779434e-01 3.3651080603011021e+00 -1.5965859639207183e+00 + -2.0247548020978501e-01 3.3882124184702378e+00 -1.8666726901170638e+00 + 3.4293442742115432e-01 3.2559250114032952e+00 -2.0457301081891028e+00 + 9.1419552430698325e-01 3.0196224256575643e+00 -2.1323258719833071e+00 + 1.5021151606220184e+00 2.7068225753241504e+00 -2.1280941245757781e+00 + 2.0845619209133659e+00 2.3309350728100404e+00 -2.0319664980298762e+00 + 2.6008196381374655e+00 1.9405582315393195e+00 -1.8569475257258803e+00 + 2.9897989811219370e+00 1.6019687130354141e+00 -1.6292610987515834e+00 + 3.2010460071644333e+00 1.3391131131561962e+00 -1.3609846825693872e+00 + 3.1975866309737624e+00 1.0996021910946350e+00 -1.0507516531291687e+00 + 3.2814052416863952e+00 8.2621399231804604e-01 -7.0840467107404270e-01 + 3.7013574694077440e+00 7.3981905582974905e-01 -5.1324809092782175e-01 + 4.3083328688679812e+00 1.0313087630141686e+00 -5.7923692214698275e-01 + 4.9877428852887311e+00 1.6926310753022280e+00 -8.8222070806202635e-01 + id 11381 + loc 1.0647183656692505e-01 3.5688081383705139e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3949065830697742e-01:3.8269421923830355e-01:8.0339821317156890e-03:3.0811700644122197e-01:7.0924396795683953e-01:4.0002065920080243e-01:1.3723436058557217e+00:4.3948626340039437e-01:1.9968192606063326e+00:3.5122865895338284e-01:2.7454253543636664e+00:4.2028386870368428e-01:3.2545562514069823e+00 + CVs 20 + -1.6498776240477081e-01 4.0054937571456800e-01 -1.3648552306578030e-01 + -3.4111542200878231e-01 8.1093817744331709e-01 -2.6314546590716098e-01 + -5.1389023204322926e-01 1.2367361922249620e+00 -3.6958080483206524e-01 + -6.5108882289722192e-01 1.6814028163120769e+00 -4.3838312084023640e-01 + -7.4211781325096682e-01 2.1291194371350635e+00 -4.6060674707508453e-01 + -8.6033168022179496e-01 2.5343019516155629e+00 -4.5869604978140088e-01 + -1.0994958694308563e+00 2.8236467557960503e+00 -4.7557536689218227e-01 + -1.4564619101293075e+00 2.9731161064426477e+00 -5.3902778921317851e-01 + -1.8867963605018356e+00 2.9899910823875002e+00 -6.7552385432355111e-01 + -2.3207645208165295e+00 2.8847416791681502e+00 -9.1621143159497931e-01 + -2.6977910537869993e+00 2.6995763450549370e+00 -1.2714304856314045e+00 + -3.0015843422180155e+00 2.4804265951903934e+00 -1.7114641865187330e+00 + -3.2582567789058734e+00 2.2355892633984134e+00 -2.1900200801407550e+00 + -3.4820268980837628e+00 1.9146741115385129e+00 -2.6722740240314793e+00 + -3.6430677926490387e+00 1.4419595885303789e+00 -3.1172260676404568e+00 + -3.6485145571758864e+00 7.5686767892432627e-01 -3.4746286308559187e+00 + -3.2332113249102474e+00 -2.1760476211215607e-01 -3.5951855909591006e+00 + -2.3924680016498208e+00 -1.0833503728643605e+00 -3.2167422341014342e+00 + -2.2709010964199159e+00 -1.4701495980606349e+00 -3.1640008465621436e+00 + id 11382 + loc 2.1298903226852417e-01 9.9443674087524414e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5108253742569654e-01:3.3470478163679623e-01:9.8436226024154583e-02:3.0697658137748229e-01:1.3377040869517098e+00:2.8290968585124160e-01:2.0411150512955718e+00:3.4510925730594239e-01:2.9376263135385621e+00:3.6071843723989022e-01:3.1963930143314090e+00:4.5107802660032231e-01:3.7798173557351853e+00 + CVs 20 + 3.6079183077543736e-01 2.9457768991084948e-01 -9.0434076651869311e-02 + 6.9820858939105879e-01 5.8244618640813306e-01 -2.0136597021093330e-01 + 1.0147434700764264e+00 8.6177582274744557e-01 -3.1940155502763384e-01 + 1.3066266119286674e+00 1.1189982909546787e+00 -4.4790530469091561e-01 + 1.5676433733611530e+00 1.3413662705000957e+00 -5.9619472826469311e-01 + 1.7893292853078249e+00 1.5207164306878025e+00 -7.7023322207778910e-01 + 1.9680744323310722e+00 1.6559990171632344e+00 -9.6795674423024503e-01 + 2.1089824712789498e+00 1.7525366857231828e+00 -1.1823638286710034e+00 + 2.2232045637735984e+00 1.8161785511642816e+00 -1.4078966878123045e+00 + 2.3258554880938127e+00 1.8495449897762541e+00 -1.6440030821062548e+00 + 2.4280099647022584e+00 1.8485628521505191e+00 -1.8923423362721468e+00 + 2.5301565786897324e+00 1.8046881627967948e+00 -2.1503612542753392e+00 + 2.6211394353013460e+00 1.7149973629929502e+00 -2.4084951108203079e+00 + 2.6800541740942356e+00 1.5958009299528655e+00 -2.6502142464276255e+00 + 2.6899380838912870e+00 1.4791618179285380e+00 -2.8559045542061403e+00 + 2.6557661143649982e+00 1.3887747167949149e+00 -3.0122524813423044e+00 + 2.5990113574755176e+00 1.3270106251578935e+00 -3.1176648615482332e+00 + 2.5275003605318735e+00 1.2688339658819667e+00 -3.1922278901658103e+00 + 2.3452483006309603e+00 1.1751493269228093e+00 -3.2858792961180079e+00 + id 11383 + loc 2.4736027419567108e-01 9.1308808326721191e-01 1047 + blend 0.0000000000000000e+00 + interp 5.3741738043937048e-01:2.7483972331597573e-01:1.3695311824099354e-01:3.2227091018038373e-01:9.7648290353716682e-01:5.3741200626556607e-01:1.6429524580256984e+00:3.1554476383097851e-01:2.0211570877411877e+00:3.3392363112343643e-01:2.9174378841509467e+00:3.0024407363698441e-01:3.6293210736025250e+00 + CVs 20 + 1.7965233845897025e-01 6.7519986891544248e-01 -3.2730413804556013e-01 + 3.4945060460283994e-01 1.3420600688209479e+00 -6.4005818882879484e-01 + 5.3329325688213991e-01 2.0003807638750315e+00 -9.2681343727935872e-01 + 7.9016978332944865e-01 2.6577635762906047e+00 -1.1246474191817082e+00 + 1.1878967736182922e+00 3.2840309862115085e+00 -1.1019246660189133e+00 + 1.7083011124574428e+00 3.7721865215507231e+00 -7.8154873315804863e-01 + 2.2692130490312108e+00 4.0090373867803972e+00 -1.9487757746544121e-01 + 2.7777520846676818e+00 3.9233718624432274e+00 5.6378593010324640e-01 + 3.1682125507349679e+00 3.5072882463462016e+00 1.3964185823684332e+00 + 3.3909805492339848e+00 2.7722277140119242e+00 2.1933445886577965e+00 + 3.4105399214994803e+00 1.7791141704137616e+00 2.8402321965429911e+00 + 3.2069309776238462e+00 6.6458238410046211e-01 3.3181739310084142e+00 + 2.7899949385816476e+00 -3.8574487801187241e-01 3.7672573027215890e+00 + 2.3217157620026310e+00 -1.1516157550054211e+00 4.3781302047140080e+00 + 2.1788268229473866e+00 -1.3747449500449973e+00 5.2226938151307980e+00 + 2.5007418521538245e+00 -1.0379757813255530e+00 6.0223870077629202e+00 + 3.0067471159397199e+00 -4.3375593679034496e-01 6.6424659648354947e+00 + 3.5430928361347727e+00 2.4510124756016394e-01 7.1742819280839232e+00 + 3.9117129951824730e+00 6.2378680259517649e-01 7.9501560771363389e+00 + id 11384 + loc 6.7633688449859619e-01 4.3167829513549805e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7022714816496536e-01:3.3361291274984556e-01:1.6981716770946598e-01:3.4599522415038336e-01:9.0727066981339566e-01:2.5198955224948999e-01:1.8031006130040070e+00:3.1251733381446251e-01:2.3715573624731014e+00:3.8458096890881360e-01:3.0655128324130168e+00:4.7022244589348372e-01:3.9642067168118902e+00 + CVs 20 + -3.9218119369779786e-02 2.1529876672216164e-01 2.7655470402869214e-01 + -8.9798058948239334e-02 3.9872108811720741e-01 5.2737473369206722e-01 + -1.3676370266972845e-01 5.6451670235533880e-01 7.6906197293330303e-01 + -1.7622111794487322e-01 7.2036742306731261e-01 1.0155955060578921e+00 + -2.1800731446637633e-01 8.6887030587963399e-01 1.2833139921561472e+00 + -2.6303407141776430e-01 1.0120223549459793e+00 1.5823015084005241e+00 + -2.9946996404450177e-01 1.1529997552019879e+00 1.9101419567765845e+00 + -3.1731154831517028e-01 1.2923484774306249e+00 2.2558844241160916e+00 + -3.2012458405768807e-01 1.4206147513313718e+00 2.6054650687579799e+00 + -3.1793553538689234e-01 1.5147377696139692e+00 2.9473317167788027e+00 + -3.1770413500358741e-01 1.5436834648308850e+00 3.2787797901475080e+00 + -3.2314187409298611e-01 1.4789388375641970e+00 3.6045478669099253e+00 + -3.3810556546768478e-01 1.3007787766601562e+00 3.9283341288880522e+00 + -3.7334226401008441e-01 1.0011291473546782e+00 4.2480670836631145e+00 + -4.3477153474117286e-01 5.9050109590285071e-01 4.5479152818925215e+00 + -4.8517684831848173e-01 9.8743506920664359e-02 4.8028149324630451e+00 + -4.4324082764803330e-01 -4.3462899252163201e-01 4.9934370133565151e+00 + -2.7507053031917705e-01 -9.6608608449357614e-01 5.1178207817604617e+00 + -2.0874890117980921e-01 -1.5212368053193996e+00 5.3878262052349157e+00 + id 11385 + loc 9.2374372482299805e-01 9.5204979181289673e-02 1077 + blend 0.0000000000000000e+00 + interp 4.3958595589363730e-01:4.3958156003407839e-01:4.9752340387620997e-04:4.2551147451137339e-01:4.8220158020843806e-01:3.3397114229119285e-01:1.1218434671426016e+00:4.2116395996276579e-01:1.9946857850078423e+00:4.3839270802113750e-01:2.9334877216247817e+00:3.8724359025198796e-01:3.1691935575695158e+00 + CVs 20 + 5.2798430040130212e-02 3.6436057526144272e-01 3.2231788678609419e-01 + 1.0676296123739565e-01 7.2835622663811661e-01 6.0799547183576552e-01 + 1.4103553445131234e-01 1.0768456433687912e+00 9.2162594846687440e-01 + 1.3025545749741552e-01 1.3888803077217071e+00 1.2960719194323183e+00 + 5.4282811114709562e-02 1.6384780727019392e+00 1.7349728805537801e+00 + -9.5440404611828011e-02 1.7996320900525700e+00 2.2231175463615815e+00 + -3.1776443843608226e-01 1.8520609762376017e+00 2.7322101175449354e+00 + -6.0192394376890113e-01 1.7858763732934655e+00 3.2271054665026244e+00 + -9.2320536842765355e-01 1.6051474554404139e+00 3.6761484286596415e+00 + -1.2420540234087629e+00 1.3275112696828102e+00 4.0646353139906841e+00 + -1.5155933588821282e+00 9.7654844889451908e-01 4.3978395037181581e+00 + -1.7074135397780708e+00 5.7458894422757889e-01 4.6857795268703084e+00 + -1.7881181889653099e+00 1.4750969500958089e-01 4.9319369074880646e+00 + -1.7346113753687695e+00 -2.6487685822003160e-01 5.1388243313249129e+00 + -1.5252921314438410e+00 -5.9747043949976675e-01 5.3073111231036387e+00 + -1.1839629219604515e+00 -7.7412852367352580e-01 5.4296377453475175e+00 + -8.0248275421676474e-01 -7.7902749904189517e-01 5.5305978773445608e+00 + -4.4230918969753646e-01 -6.7360933956935809e-01 5.6420907155651596e+00 + -1.0293622254557644e-01 -8.1956779880631558e-01 5.8480838763418115e+00 + id 11386 + loc 6.7712819576263428e-01 8.4819100797176361e-02 410 + blend 0.0000000000000000e+00 + interp 4.1940273983987042e-01:4.0139613466626273e-01:5.4532396535038929e-01:4.1939854581247205e-01:1.0152818334779683e+00:4.1346919756212508e-01:1.9837246334788401e+00:2.9062879989832041e-01:2.9085149075814121e+00:3.1126502796150191e-01:3.9436536843583165e+00 + CVs 20 + -3.2036011204046755e-01 3.1220757958580880e-01 1.2764355888501316e-01 + -6.1829452287561582e-01 6.2274282335662690e-01 2.5443263208768219e-01 + -9.2266710440504918e-01 9.4696542280633089e-01 3.6420632312017148e-01 + -1.2486866431567043e+00 1.2713040187084663e+00 4.7096623633701806e-01 + -1.6005417792764134e+00 1.5631113721128802e+00 6.1528234291471273e-01 + -1.9617654427715929e+00 1.7908317039987665e+00 8.3634287968628385e-01 + -2.3027266669431254e+00 1.9366526102811088e+00 1.1376568618926091e+00 + -2.6094792608965527e+00 1.9910056705024555e+00 1.4921577077618080e+00 + -2.8844298498971881e+00 1.9453515676570114e+00 1.8674292996738739e+00 + -3.1295428189990497e+00 1.7922512553105658e+00 2.2338012303082908e+00 + -3.3244640475607303e+00 1.5394560128280403e+00 2.5475821576728728e+00 + -3.4303766882021796e+00 1.2232241168125717e+00 2.7621940929112689e+00 + -3.4317158156446679e+00 8.6750610835150210e-01 2.8708201520163072e+00 + -3.3492900461134134e+00 4.4974568271332505e-01 2.9098721287132339e+00 + -3.2248421676167025e+00 -6.7687697993512597e-02 2.9643173912587288e+00 + -3.0973754700493714e+00 -6.6888855536178027e-01 3.1552352031116655e+00 + -3.0077989041186433e+00 -1.2973194050177201e+00 3.5278792106163737e+00 + -3.0164624172397403e+00 -1.9131448495777374e+00 3.9996008882905931e+00 + -3.1508143710970433e+00 -2.4613411821487139e+00 4.4029156604516739e+00 + id 11387 + loc 6.8209391832351685e-01 9.6181458234786987e-01 1053 + blend 0.0000000000000000e+00 + interp 5.1313212906507422e-01:5.1312699774378356e-01:2.5348546929933302e-01:3.3920139605421717e-01:8.9343974358882683e-01:2.0852979249363077e-01:2.4725518245885518e+00:3.0679041487599090e-01:3.0441155898181966e+00:3.5759313707479157e-01:3.8039935123387316e+00 + CVs 20 + 1.1717233770443689e-01 5.0045027016891219e-01 2.8028150439308130e-01 + 1.5530344238318494e-01 9.3399617127369683e-01 5.4143353684301698e-01 + 1.6756173853660483e-01 1.3300091580674942e+00 8.1401877122367128e-01 + 1.6232355479193805e-01 1.7033333935317023e+00 1.1161852748237859e+00 + 1.1861728991804799e-01 2.0474075943713910e+00 1.4495748284267829e+00 + 7.5155085906897234e-03 2.3477487860967670e+00 1.8122721484657167e+00 + -2.0618116068554548e-01 2.5764409814456530e+00 2.1935319904374708e+00 + -5.5176851450309838e-01 2.6886749181364604e+00 2.5612598149219563e+00 + -1.0171080953082505e+00 2.6259835119951549e+00 2.8546266646509757e+00 + -1.5184330625044022e+00 2.3433334609095651e+00 3.0067466996559444e+00 + -1.9191711591057028e+00 1.8662402904144584e+00 2.9923219438744288e+00 + -2.1393742570412808e+00 1.2928036265502665e+00 2.8540200346661022e+00 + -2.1983797582613791e+00 6.9388104540689111e-01 2.6240774345796369e+00 + -2.1548338356327230e+00 1.1485638512998764e-01 2.2840895493701407e+00 + -2.0739191997818653e+00 -3.9105759805792567e-01 1.7892704520095537e+00 + -1.9997390079457873e+00 -7.3929129563567542e-01 1.1093099562882254e+00 + -1.9576634871025145e+00 -8.0604380550071997e-01 2.8681982432076492e-01 + -1.9773875378996286e+00 -5.4993162846275756e-01 -4.5183239198697078e-01 + -2.0382249710159126e+00 -3.3143764521818697e-01 -8.1391332673665495e-01 + id 11388 + loc 9.2964977025985718e-01 9.9653601646423340e-01 1070 + blend 0.0000000000000000e+00 + interp 4.8215059350983736e-01:2.7921271628338307e-01:7.9091238136956954e-02:3.7931139998420355e-01:9.3059691548073753e-01:4.8214577200390230e-01:1.5045459464665685e+00:2.5193834884853833e-01:2.2446464961635986e+00:3.0428713505707966e-01:3.1193948407002532e+00 + CVs 20 + -2.3170425794483224e-01 2.3701291410612985e-01 5.7821733675847253e-02 + -4.4250820620032938e-01 4.6157476964587901e-01 1.2547604437396651e-01 + -6.1640112549854731e-01 6.8253847301840642e-01 2.2120278845833635e-01 + -7.5114855786274404e-01 8.8525956889354807e-01 3.3126089241596174e-01 + -8.7227721495608823e-01 1.0635988491828130e+00 4.2101733152184517e-01 + -1.0126735747128770e+00 1.2207389144207548e+00 4.6188751944633849e-01 + -1.1883998730563279e+00 1.3478909002067789e+00 4.5558914606983447e-01 + -1.4146075834055396e+00 1.4349821249107801e+00 4.0843097043087506e-01 + -1.6705277470631841e+00 1.4699551834665436e+00 3.0005635204223946e-01 + -1.8765958187546095e+00 1.4509498701246994e+00 1.2953995166754717e-01 + -2.0091530856150599e+00 1.4168355491077653e+00 -6.8391414628447444e-02 + -2.1080542494588577e+00 1.4137634479622139e+00 -2.9442683331973973e-01 + -2.1458776237332331e+00 1.4307892121347621e+00 -5.3102551530480469e-01 + -2.0273172434545965e+00 1.4118298250155867e+00 -6.2698580190734465e-01 + -1.7163100432201157e+00 1.2833180641513857e+00 -4.8242496549405489e-01 + -1.2307723827533152e+00 8.8029916802440011e-01 -2.2271272177684809e-01 + -6.1199841931824717e-01 3.5436463811947684e-02 -1.8985977700623788e-01 + -1.5076530430110585e-01 -7.3456155505529575e-01 -6.8259788181853609e-01 + -1.6073624150279289e-01 -6.3865072882680407e-01 -8.7447380291591958e-01 + id 11389 + loc 5.7412284612655640e-01 7.0266157388687134e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2538742834083004e-01:3.6547447839151459e-01:3.2750428883167382e-01:3.4606259407813195e-01:9.4076032806306487e-01:4.2538317446654667e-01:1.1467019642868581e+00:3.6337437532832789e-01:1.7843858304194087e+00:3.2375321005473917e-01:2.1055547860603698e+00:2.5665021305085756e-01:3.0683639997652152e+00:3.1043450935458206e-01:3.9645248001404978e+00 + CVs 20 + 1.4496800311642818e-01 3.1940220942790210e-01 -3.6765001487425431e-01 + 3.2522009300881105e-01 6.1809797864654570e-01 -6.8416681841674798e-01 + 5.3063456272281062e-01 8.9602950166589090e-01 -9.7017042561089262e-01 + 7.5271935281231317e-01 1.1554254530121075e+00 -1.2331251185548835e+00 + 9.8290653360127411e-01 1.3977146537551395e+00 -1.4768656071182709e+00 + 1.2116049447888140e+00 1.6232684802203587e+00 -1.7113969447343382e+00 + 1.4295817131746884e+00 1.8316571221035509e+00 -1.9490823656732759e+00 + 1.6321839204390336e+00 2.0214287383498291e+00 -2.2040126933543465e+00 + 1.8191266347328234e+00 2.1697843119079794e+00 -2.5126708426975921e+00 + 1.9735772440835855e+00 2.2190788762053053e+00 -2.8976312219856166e+00 + 2.0697276292533191e+00 2.1350447135185551e+00 -3.3206171312982864e+00 + 2.0953881133597276e+00 1.9231799808095869e+00 -3.7174558193824105e+00 + 2.0739551144818864e+00 1.5998751036026262e+00 -4.0413639184403651e+00 + 2.0702142506049821e+00 1.1725411445665457e+00 -4.2804460440827299e+00 + 2.1454641535498311e+00 6.6420284102801663e-01 -4.4867896902049305e+00 + 2.3262323555072864e+00 1.3524211449146259e-01 -4.7694314339925308e+00 + 2.6071285308852330e+00 -2.9280435933674831e-01 -5.2235973037378756e+00 + 2.9082978246982050e+00 -3.7862920559769553e-01 -5.7717660154354906e+00 + 3.1148668756889419e+00 -8.9376373492212308e-02 -6.1134667329798154e+00 + id 11390 + loc 8.3987301588058472e-01 3.1822785735130310e-02 1070 + blend 0.0000000000000000e+00 + interp 4.1917839223228459e-01:4.1917420044836229e-01:3.1604768793535576e-02:4.0246709220670956e-01:9.2332574199927597e-01:3.9819247299959654e-01:1.6484719675348796e+00:2.1886739107923361e-01:2.0222464249911196e+00:3.8114993321353569e-01:2.8896231933941317e+00:3.0490079980054730e-01:3.7412916904661175e+00 + CVs 20 + 3.6430901363025031e-01 3.1851231970283089e-01 -1.2618044118261523e-01 + 7.1043135732958862e-01 5.7863780519510444e-01 -1.5395900683132185e-01 + 1.0502325344616998e+00 8.2194182232177926e-01 -1.1748399529027953e-01 + 1.3759586670429615e+00 1.0756931673839965e+00 -2.7581055444333313e-02 + 1.6676238795042497e+00 1.3558357752418568e+00 8.4001531469781399e-02 + 1.9215103149033208e+00 1.6672654471742070e+00 1.2432615322506968e-01 + 2.1473531419027232e+00 1.9604870482048127e+00 2.3213382322082365e-02 + 2.3689246272770919e+00 2.1729103012767732e+00 -1.9249867495968176e-01 + 2.6022551343814602e+00 2.2502622608342491e+00 -4.6511446488988839e-01 + 2.8237836571055288e+00 2.1279007174858364e+00 -7.1312694667704801e-01 + 2.9698539852400989e+00 1.8271389240106801e+00 -8.5684390303626379e-01 + 3.0152989024543682e+00 1.4631956824747241e+00 -9.1156928239340740e-01 + 2.9749012294372772e+00 1.1030472928908011e+00 -9.1572754343264096e-01 + 2.8758282074986958e+00 7.8037179537566959e-01 -8.7875371180247408e-01 + 2.7530951665334928e+00 5.0921074857787274e-01 -8.1083671869530305e-01 + 2.5807285755842910e+00 3.2400918132753309e-01 -7.0170302124182127e-01 + 2.3183485858306150e+00 3.1160668868493502e-01 -5.6320001314958124e-01 + 2.0568656208902243e+00 4.3900742329546960e-01 -4.6823166899760349e-01 + 2.0170897836492778e+00 1.2470644344808535e-01 -4.1485654527931703e-01 + id 11391 + loc 3.5519459843635559e-01 9.7188293933868408e-01 410 + blend 0.0000000000000000e+00 + interp 4.5754890457718045e-01:3.3938625718240545e-01:2.0268410482658594e-02:3.7375857108107513e-01:8.3265086002137523e-01:4.4207390472103714e-01:1.1710431823849985e+00:3.6449679476763458e-01:1.7701520705132796e+00:3.5850888916119328e-01:2.1687832804914322e+00:4.5667115669947200e-01:2.8484302792655218e+00:4.3583163688499532e-01:3.0349310380323180e+00:4.5754432908813469e-01:3.6639961995491150e+00 + CVs 20 + 4.3607046716206821e-01 1.0941677213495364e-01 -1.4986508156384148e-01 + 7.7685851434830677e-01 1.6031348914822174e-01 -2.7022855810872404e-01 + 1.0960237207584320e+00 1.8818772918018684e-01 -3.6477265414950188e-01 + 1.4334572805855226e+00 2.1214195984736106e-01 -4.3201396074429155e-01 + 1.7862545177168967e+00 2.2919484432175297e-01 -4.6626687347410090e-01 + 2.1482999461041197e+00 2.3609003303748588e-01 -4.5976783725363496e-01 + 2.5097199377619628e+00 2.3045621575261310e-01 -4.0386358534826938e-01 + 2.8587643583381812e+00 2.1059468943499215e-01 -2.9315852018049754e-01 + 3.1834424461772577e+00 1.7579022411954393e-01 -1.2774151133299538e-01 + 3.4714652182795982e+00 1.2771461726369426e-01 8.7789430929162915e-02 + 3.7176381963429463e+00 6.7924592842803388e-02 3.4316070102076834e-01 + 3.9532652969252391e+00 -1.6680489034773816e-02 6.1811332693538912e-01 + 4.2514595852684653e+00 -1.6596389232172082e-01 8.8205653032445697e-01 + 4.6353689232510504e+00 -4.1589340370382377e-01 1.0977232563141750e+00 + 5.0478054241358068e+00 -7.5597536803598508e-01 1.2474915359249170e+00 + 5.4447887668362105e+00 -1.1597745867629206e+00 1.3317867329791273e+00 + 5.8180525443686761e+00 -1.6171121261538923e+00 1.3354409683625175e+00 + 6.1586302777993538e+00 -2.1139971052316757e+00 1.2399084547705663e+00 + 6.4031168169879003e+00 -2.4300046647913218e+00 1.2679450881306826e+00 + id 11392 + loc 7.5013421475887299e-02 3.3269676566123962e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5499960186694460e-01:2.9567674673970712e-01:9.8083435940332830e-01:3.0970401415856069e-01:2.0124836215575943e+00:4.5499505187092598e-01:2.6107515258136011e+00:3.8039918613788581e-01:2.9926031417937331e+00:4.1875228098485784e-01:3.4383974561523010e+00:2.9418815784837726e-01:3.9959256488313524e+00 + CVs 20 + -4.9313402260697872e-02 3.4341296751782024e-01 -7.1970827434634510e-02 + -1.4717805015238775e-01 6.9254887258753572e-01 -1.4717044219465775e-01 + -2.8798482236653034e-01 1.0329302204990385e+00 -2.4268012600697220e-01 + -4.7227571505275240e-01 1.3442595969321183e+00 -3.6819380031881804e-01 + -7.0191879358653719e-01 1.6020973928979576e+00 -5.2562904249085829e-01 + -9.7018879816213666e-01 1.7820776128316278e+00 -7.1100287950775087e-01 + -1.2621539995849411e+00 1.8685143598830882e+00 -9.1461843708163792e-01 + -1.5601929654357038e+00 1.8601776945668780e+00 -1.1242898494577478e+00 + -1.8506780749971148e+00 1.7663345701309354e+00 -1.3257579074006240e+00 + -2.1290030840498924e+00 1.6033212014665643e+00 -1.5001430280738359e+00 + -2.3972829969859277e+00 1.3909491927426074e+00 -1.6262755376158124e+00 + -2.6549803993762882e+00 1.1484044009253156e+00 -1.6840994939358163e+00 + -2.8916172558472240e+00 9.0366193837891307e-01 -1.6484889455104597e+00 + -3.0881204028790679e+00 7.1158328761652567e-01 -1.4936990167022097e+00 + -3.2118543907030577e+00 6.6598521436796942e-01 -1.2203838452975428e+00 + -3.2333309766376361e+00 8.5375272623899590e-01 -9.2278389421611040e-01 + -3.1702382138077034e+00 1.2374466618085151e+00 -7.5729411076169750e-01 + -3.0411145882339512e+00 1.6713820799755075e+00 -7.8448547650862699e-01 + -3.1877100945520294e+00 1.7722623198343659e+00 -5.2750536501294998e-01 + id 11393 + loc 8.0028069019317627e-01 1.7280179262161255e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3030951999147909e-01:3.9607963797050921e-01:7.1983900439914894e-01:2.4897263801519526e-01:1.4661973451133139e+00:3.1242736069266730e-01:2.0562228002784120e+00:4.3030521689627921e-01:2.7082398532620418e+00:2.5478443388648769e-01:3.6735071013941676e+00 + CVs 20 + -1.3148720020082383e-02 3.0074754335071185e-01 1.8625933065121267e-01 + 3.2265272649091847e-03 6.2115481462872746e-01 3.7947785010135032e-01 + 2.2748988878756871e-02 9.5701328622107940e-01 5.7083510349798583e-01 + -4.0080227000371949e-04 1.2960062103344594e+00 7.8315894729554669e-01 + -1.1759701563059910e-01 1.5964658814118027e+00 1.0408301198530323e+00 + -3.4849350865846740e-01 1.7904734943869856e+00 1.3309932172977859e+00 + -6.7303249689648004e-01 1.8196952936306272e+00 1.6005299881004911e+00 + -1.0415348057224449e+00 1.6747901445271018e+00 1.7706116927969915e+00 + -1.3912677654810004e+00 1.4081518369413728e+00 1.7895233057650923e+00 + -1.6733869977580982e+00 1.0883112725264312e+00 1.6754000098563970e+00 + -1.8675642714664686e+00 7.5214256723462114e-01 1.4709807691021541e+00 + -1.9484467553978964e+00 4.2112220730052685e-01 1.2025413491076282e+00 + -1.9011910456533276e+00 1.2904376511907178e-01 9.1923759449288533e-01 + -1.8002129497730246e+00 -1.1381946655077002e-01 6.7762607443292366e-01 + -1.7570642235510183e+00 -3.4866284421552074e-01 4.5590325413159227e-01 + -1.8414653244459300e+00 -6.0411935824916707e-01 1.9232363453706444e-01 + -2.1579854124192979e+00 -8.5545034039913670e-01 -1.4812380727890681e-01 + -2.7675926313758499e+00 -9.4941523164920305e-01 -4.6718241266558347e-01 + -2.9205107421458969e+00 -9.7146564961028159e-01 -5.8875663214176521e-01 + id 11394 + loc 1.8432857096195221e-01 1.3176781125366688e-02 1047 + blend 0.0000000000000000e+00 + interp 5.4509209691682503e-01:9.0035513752998036e-02:3.0057969201604995e-01:4.4771488320036845e-01:1.1442082806356353e+00:5.4508664599585588e-01:1.7768487310985486e+00:5.1949942997361898e-01:2.1429869945619444e+00:3.3739430994768421e-01:2.8582649022733158e+00:2.8883262652120822e-01:3.7214304413506465e+00 + CVs 20 + -7.6933010379883360e-01 4.5275857381271511e-01 8.5740176467407753e-02 + -1.4109309110619728e+00 9.2057513078761866e-01 7.1579156440100628e-02 + -1.9363598201390353e+00 1.4231566030144267e+00 -6.1149518740136466e-02 + -2.3506089577197278e+00 1.9560685744898185e+00 -3.3712242153775918e-01 + -2.6346308987428295e+00 2.4772559026001857e+00 -7.7893717558971165e-01 + -2.7887439980947120e+00 2.9209013540725333e+00 -1.3818343782538698e+00 + -2.8268883254558705e+00 3.2086029718674594e+00 -2.1130629153833520e+00 + -2.7761635428678288e+00 3.2648385875523176e+00 -2.9085435442105756e+00 + -2.6900709048269071e+00 3.0250753029989648e+00 -3.6786260662899815e+00 + -2.5789471052427073e+00 2.4791332913909572e+00 -4.3173388051044679e+00 + -2.3890628500150317e+00 1.6851567564031309e+00 -4.7057624546238497e+00 + -2.0615577678992758e+00 7.7421501717416075e-01 -4.7445418516609710e+00 + -1.5670016131862234e+00 -7.8366959629397659e-02 -4.4038761961531092e+00 + -9.3583708476566230e-01 -6.7270217729618764e-01 -3.7274119796944092e+00 + -2.7484919382911488e-01 -8.6232545675827366e-01 -2.8380844351669201e+00 + 2.8626848510869018e-01 -6.1618355188645091e-01 -1.9072990469966005e+00 + 5.6857532045355352e-01 3.6148885560436272e-02 -1.0977737951109683e+00 + 1.5957433607363797e-01 9.5190369647711137e-01 -7.3266114099015689e-01 + -3.7483627320374913e-03 1.5731598176128880e+00 -4.8968920839814190e-01 + id 11395 + loc 9.0012633800506592e-01 1.1235635727643967e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0712741752317347e-01:3.2476179603185179e-01:4.8920770147585924e-01:4.1054215062404126e-01:9.9756151345198041e-01:2.7366119213568718e-01:1.5642442887448111e+00:5.0712234624899821e-01:2.0983064733154304e+00:4.1385120638111633e-01:2.9322498373140333e+00:2.9071406462278260e-01:3.5007390875966786e+00 + CVs 20 + -1.4497866735925649e-01 2.1459378299033499e-01 2.0486737679459649e-01 + -2.9915133703544178e-01 4.2786054100612525e-01 4.1900695308086755e-01 + -4.5242523271940782e-01 6.4487996776447987e-01 6.4224366499123620e-01 + -5.9611185944035949e-01 8.6695535832777149e-01 8.7429807569069207e-01 + -7.2418374645351458e-01 1.0921811405619903e+00 1.1157344735168553e+00 + -8.2977084452582173e-01 1.3160249719846064e+00 1.3681463317526454e+00 + -9.0644559124247559e-01 1.5320126997494008e+00 1.6352542059784498e+00 + -9.4958987486259905e-01 1.7314883268836971e+00 1.9224823475513502e+00 + -9.5649007873684289e-01 1.9030415502125824e+00 2.2367338688682996e+00 + -9.2575504736867487e-01 2.0319045479247873e+00 2.5834517910071613e+00 + -8.5883548531468756e-01 2.0994964819555690e+00 2.9635006995592348e+00 + -7.6320729112411800e-01 2.0861278077448375e+00 3.3739285582461873e+00 + -6.5494685031025657e-01 1.9761923950576481e+00 3.8069039464611536e+00 + -5.5707533655160368e-01 1.7589244508268038e+00 4.2467303843121735e+00 + -4.9360632034389240e-01 1.4273542962194412e+00 4.6690605692395435e+00 + -4.7990899796573944e-01 9.7922269985244303e-01 5.0370748407157846e+00 + -5.1223341436998338e-01 4.2775164423068501e-01 5.3049954195328617e+00 + -5.7066135312089383e-01 -1.8236952214667812e-01 5.4599009280595894e+00 + -5.7955054981611065e-01 -6.9370550337203940e-01 5.6720854827533378e+00 + id 11396 + loc 6.1884063482284546e-01 5.8925259113311768e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4336191535582153e-01:3.2378163844260760e-01:4.1180368685075286e-01:4.0781639180751206e-01:1.0001306069055804e+00:4.4335748173666800e-01:1.3744038585990304e+00:3.6090544437750333e-01:1.9668374212598398e+00:3.8849210512615678e-01:2.4361237489256751e+00:3.4868634171354718e-01:3.0276930086924914e+00:4.2307225427340261e-01:3.6982361413081897e+00 + CVs 20 + -3.3100278275196315e-01 2.0883361440753329e-01 1.8936875382545296e-01 + -6.1201248841354472e-01 3.9367806680512740e-01 3.3511832342798326e-01 + -8.5280450044423484e-01 5.8586273384138299e-01 4.8693908408541237e-01 + -1.0661109546348209e+00 8.0012671122184009e-01 6.5512581488910404e-01 + -1.2758260746597090e+00 1.0272373949159599e+00 7.8782651785656421e-01 + -1.5012689520268963e+00 1.2478103380054413e+00 8.3850353020297863e-01 + -1.7394896327034997e+00 1.4362661637417322e+00 8.0351024623674405e-01 + -1.9778357565214377e+00 1.5711377659402013e+00 7.0282838807288406e-01 + -2.1905512696456615e+00 1.6439507287433821e+00 5.5523786599084768e-01 + -2.3373612006085347e+00 1.6586866623319969e+00 3.7098219413656941e-01 + -2.3903864414219345e+00 1.6281143398983124e+00 1.6633458156635439e-01 + -2.3630610348268859e+00 1.5733787045008598e+00 -3.0899118080288224e-02 + -2.2715998286484949e+00 1.4969054668226258e+00 -1.9875873142511868e-01 + -2.0976806693830636e+00 1.3549742956315509e+00 -3.1548770104361867e-01 + -1.8324067880141452e+00 1.1027481241549384e+00 -3.9467605584477805e-01 + -1.5264698921396560e+00 7.4733507012322664e-01 -5.4768217791119578e-01 + -1.2725962713024865e+00 3.8845549395435319e-01 -9.1998211773732497e-01 + -1.1885748924622968e+00 2.6891342483384384e-01 -1.5265039104962215e+00 + -1.1546060281569737e+00 2.5450010281381252e-01 -1.9000900651965815e+00 + id 11397 + loc 5.2726262807846069e-01 4.1726639866828918e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0293294379105027e-01:3.7607464687125913e-01:3.3993274048511113e-01:3.3263956820341917e-01:1.0862410738602877e+00:3.4018324807108147e-01:1.9382996862488273e+00:4.0292891446161239e-01:2.7044344087996173e+00:3.2666002605841776e-01:3.5732631969261033e+00 + CVs 20 + -2.8878168162736689e-01 3.5280910076850003e-01 1.0095242688045609e-01 + -5.7011643295871506e-01 7.1698192756014956e-01 2.4047108173071413e-01 + -8.6192706388348872e-01 1.0732893602314804e+00 4.2349023805709585e-01 + -1.1601559096955272e+00 1.4038945027896426e+00 6.5943822573667754e-01 + -1.4564416350263536e+00 1.6913051740925635e+00 9.4995578742319142e-01 + -1.7588481243860792e+00 1.9178154519970583e+00 1.2773717448489279e+00 + -2.0813852003560491e+00 2.0713633857527762e+00 1.6132732451343155e+00 + -2.4269151508017233e+00 2.1493106605117638e+00 1.9326115479522601e+00 + -2.7873892011982511e+00 2.1551886053561962e+00 2.2203929332505390e+00 + -3.1515712895275283e+00 2.0923679160010993e+00 2.4726397450925348e+00 + -3.5070240985899468e+00 1.9599043244157013e+00 2.6993444416245072e+00 + -3.8332902854085118e+00 1.7365441325167559e+00 2.9218793491725212e+00 + -4.0822193310870274e+00 1.3910525488479335e+00 3.1445847582419528e+00 + -4.2123317370740754e+00 9.4451038404451271e-01 3.3484195285599774e+00 + -4.2222506730202589e+00 4.3704043167212481e-01 3.5335587324775859e+00 + -4.0373231827543972e+00 -1.3362214164638364e-01 3.7033557134350552e+00 + -3.3932518781395591e+00 -6.3791269935066008e-01 3.8180106867791648e+00 + -2.5420931218025413e+00 -6.5932004532818111e-01 3.9037044312957438e+00 + -2.1817343911417648e+00 -7.1983461798974835e-01 4.0923841999563288e+00 + id 11398 + loc 8.5806578397750854e-01 4.1075959801673889e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3139559369774358e-01:2.8238450896406142e-01:1.3263259017450113e-01:4.5655188585387629e-01:7.6362585739742017e-01:4.6994470259944476e-01:9.8122287259025165e-01:5.3139027974180664e-01:1.2525479350253939e+00:3.2872479183017794e-01:1.9186618515779927e+00:4.3125496732277319e-01:2.2465397730032053e+00:3.1764178842859292e-01:2.9208811100052321e+00:4.2587166438378998e-01:3.2531765891834805e+00:4.6904208676666431e-01:3.8848648402007910e+00 + CVs 20 + 1.2557808356009736e-01 3.4537661042223361e-01 -1.8778478301593832e-01 + 2.6827621552342462e-01 6.5855192118563899e-01 -3.7835926044589741e-01 + 4.1577831130495774e-01 9.4774798482904754e-01 -5.7389035663238541e-01 + 5.6186081167654578e-01 1.2162909212271718e+00 -7.7164936501889358e-01 + 7.0609693075749613e-01 1.4653570547879546e+00 -9.6559116903349151e-01 + 8.4841566013602920e-01 1.7020732416946545e+00 -1.1540170989274612e+00 + 9.9977796292255283e-01 1.9405526551169432e+00 -1.3481575227675711e+00 + 1.1996678587467158e+00 2.1836315189952766e+00 -1.5685008701932639e+00 + 1.5004320099666593e+00 2.3934576170192985e+00 -1.8137950731311014e+00 + 1.9241982783190299e+00 2.5089717112308954e+00 -2.0540359724661839e+00 + 2.4460595409822710e+00 2.4679620984573472e+00 -2.2494988613554661e+00 + 2.9877047230811464e+00 2.2255007616252644e+00 -2.3669678765879181e+00 + 3.4281236183077057e+00 1.7718110370352558e+00 -2.4105150724374527e+00 + 3.6224750065103022e+00 1.1513917752680873e+00 -2.4172405189341952e+00 + 3.5317095754312113e+00 4.1357776748906949e-01 -2.3778768186883630e+00 + 3.2369002142885748e+00 -4.3754438975956339e-01 -2.1591114009782091e+00 + 2.8582727932429139e+00 -1.2791738818022833e+00 -1.5843489547159231e+00 + 2.5424342343733004e+00 -1.7787327339944641e+00 -7.6528090607903099e-01 + 2.4269052495866483e+00 -1.7229539787718973e+00 -3.3550736606097520e-01 + id 11399 + loc 1.3273607194423676e-01 1.6105522215366364e-01 410 + blend 0.0000000000000000e+00 + interp 5.2142660264123741e-01:5.2142138837521101e-01:2.1279544820963747e-01:4.4923032595062889e-01:8.0626870619594104e-01:2.9669158934003048e-01:1.1551384527205479e+00:3.8664260558465674e-01:1.9649416531259569e+00:3.6350705843441639e-01:2.3660797108127003e+00:4.5930873427312263e-01:2.9249447040246173e+00:4.2433607503491350e-01:3.1883454035756493e+00:3.8154738410073824e-01:3.9473500167423432e+00 + CVs 20 + -9.1987894161353931e-02 1.1640105726969244e-01 -2.3610142532372441e-01 + -1.8030766903247847e-01 2.2873926115099066e-01 -4.6742372142033617e-01 + -2.6309680652365530e-01 3.4208843568428671e-01 -7.0206480776644975e-01 + -3.4114819366562565e-01 4.5937238188032237e-01 -9.4481430502668173e-01 + -4.1232594031690201e-01 5.7934790327492214e-01 -1.1943776716279162e+00 + -4.6824163154479548e-01 7.0110055516030756e-01 -1.4498263772531668e+00 + -4.9490508345814715e-01 8.2404596659417950e-01 -1.7106597602776210e+00 + -4.7972990236612278e-01 9.4642875445247876e-01 -1.9755182202684087e+00 + -4.1567197448751891e-01 1.0667159308136656e+00 -2.2412587380341731e+00 + -2.9912255360424522e-01 1.1870384327628289e+00 -2.5022655995164884e+00 + -1.3616933759173355e-01 1.3092351290797772e+00 -2.7532767782871459e+00 + 3.0110473515467473e-02 1.4197029261901166e+00 -3.0086592298414199e+00 + 1.1297379656566930e-01 1.4862903886968013e+00 -3.3071625933256401e+00 + 3.5529540512651780e-02 1.4847252468976455e+00 -3.6446213718044924e+00 + -1.8543227593394129e-01 1.4337463730347488e+00 -3.9574374863300816e+00 + -4.7819046321604541e-01 1.3691778135578225e+00 -4.2159389896338135e+00 + -8.2281191284325017e-01 1.3096092762007285e+00 -4.4103023209660677e+00 + -1.2147616460429294e+00 1.2758076470113304e+00 -4.5177102567067511e+00 + -1.4115248982651973e+00 1.3044058964183256e+00 -4.7952174920947890e+00 + id 11400 + loc 3.7055066227912903e-01 6.8968904018402100e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1076912109395189e-01:3.7029748957473158e-01:2.7002580596472425e-02:4.0683855683171527e-01:7.2808447246867403e-01:4.4776947750554147e-01:1.2020060551998553e+00:5.1076401340274102e-01:1.7764104051047802e+00:4.2215490376567183e-01:2.0031578917708384e+00:2.8877199425728761e-01:2.9546400802129744e+00:3.8071745766169951e-01:3.4131815564286843e+00 + CVs 20 + 2.2453680581563726e-01 2.7483829140255428e-01 -1.7252152309112812e-01 + 4.4240169268683766e-01 5.8124097180726364e-01 -3.4818862638895426e-01 + 6.9126245162361388e-01 8.7268560802068618e-01 -5.4460984261021816e-01 + 9.8164815767756008e-01 1.1200690284993928e+00 -7.6885804676059277e-01 + 1.3074983055549176e+00 1.3017705394649348e+00 -1.0125966030783229e+00 + 1.6619696391671821e+00 1.4007266584600417e+00 -1.2550699202060427e+00 + 2.0377373473936693e+00 1.4138559768562218e+00 -1.4768606973040377e+00 + 2.4268963875829646e+00 1.3488897632052312e+00 -1.6705112151214399e+00 + 2.8200188066201224e+00 1.2152862994827187e+00 -1.8396518300533160e+00 + 3.2096570669901201e+00 1.0181820619784334e+00 -2.0027858737976478e+00 + 3.5825222045991580e+00 7.5413267746264434e-01 -2.1835357536087869e+00 + 3.9091027393440405e+00 4.1494505548833382e-01 -2.3967828191927958e+00 + 4.1445646561651213e+00 -7.2806171796504504e-03 -2.6519336781126404e+00 + 4.2290628527981182e+00 -5.1116327857335619e-01 -2.9684020447265640e+00 + 4.0702552556958391e+00 -1.0548978574285675e+00 -3.3718165773637896e+00 + 3.6149180761302020e+00 -1.4812113978577279e+00 -3.8804719850340219e+00 + 2.9990113439503610e+00 -1.5665370645769814e+00 -4.4861227989753010e+00 + 2.5055203292008890e+00 -1.3188899469785107e+00 -5.0289989659750933e+00 + 2.2869423488440765e+00 -1.2428814568990889e+00 -5.2781468001741905e+00 + id 11401 + loc 2.5529208779335022e-01 6.0499626398086548e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9893614259459501e-01:3.1168632673766128e-01:1.9760720414931632e-01:4.9893115323316911e-01:7.1749919489653058e-01:4.7883569222364220e-01:1.1612679596393998e+00:2.7960109205708472e-01:1.8195156798149994e+00:3.0842983787746975e-01:2.2902265805309994e+00:4.6867703732154253e-01:3.1765363150478731e+00:2.8470341845662284e-01:3.7472374847912424e+00 + CVs 20 + 1.7785191970523834e-01 6.6523310966364668e-01 -5.0702827567102349e-01 + 4.0231311250549778e-01 1.3780000492396909e+00 -9.2869823753313940e-01 + 6.8748471559115543e-01 2.1246476232932605e+00 -1.2019282294975751e+00 + 1.0639036972763882e+00 2.8153550632932687e+00 -1.1980064951989555e+00 + 1.4863851419464940e+00 3.3035306599942968e+00 -8.4537912955869965e-01 + 1.8467428480929620e+00 3.5104274547474672e+00 -2.2917363242884026e-01 + 2.0572662567500788e+00 3.4261701229678447e+00 5.0225098703736637e-01 + 2.0925540002353822e+00 3.1026720694204220e+00 1.2059136826200689e+00 + 1.9804206804449123e+00 2.6151917618153688e+00 1.7770535455357050e+00 + 1.7820730183119748e+00 2.0373647280555254e+00 2.1594586892798993e+00 + 1.5646330142233780e+00 1.4276776538190443e+00 2.3658443068998136e+00 + 1.3624780259892837e+00 8.0134438380809503e-01 2.4859474705913085e+00 + 1.1491565376800963e+00 1.1072954898613796e-01 2.6552988257167485e+00 + 8.8195561744528750e-01 -6.7036481754927690e-01 3.0162380838507996e+00 + 6.2348193381488159e-01 -1.3862640135837871e+00 3.7960685763866566e+00 + 6.0177701169595876e-01 -1.7171938065084567e+00 4.9900827585316154e+00 + 8.8376745090779818e-01 -1.5906875160992202e+00 6.2160672721828263e+00 + 1.3047589506689234e+00 -1.2227357544901833e+00 7.2102103701719749e+00 + 1.5522411381183960e+00 -1.0589311049628032e+00 7.7415001209184116e+00 + id 11402 + loc 2.7954545617103577e-01 4.4866651296615601e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6389626827879538e-01:4.6389162931611261e-01:4.0095237390935790e-03:3.3884638790938876e-01:6.2391176354276079e-01:3.3299074690082664e-01:1.6278407541432545e+00:3.5328393619719745e-01:2.0335577186909628e+00:4.2315845351841047e-01:2.5967619204847443e+00:2.6964932910954603e-01:3.1004180215888066e+00:3.9682369114047661e-01:3.7217657415633143e+00 + CVs 20 + -1.6219728142138340e-01 3.3375125885030954e-01 -4.8100494435698277e-02 + -3.5107464969406577e-01 6.4348328822430667e-01 -1.2435225587346255e-01 + -5.5434746493368103e-01 9.3214514028229134e-01 -2.1081022115192383e-01 + -7.7668391445467577e-01 1.1980914496434760e+00 -3.0511906013418894e-01 + -1.0254144966018359e+00 1.4429906012908313e+00 -4.0577190041061484e-01 + -1.2990400281299543e+00 1.6739549292051081e+00 -5.0275065579443023e-01 + -1.5911333792893754e+00 1.8948043008381106e+00 -5.8748413672238375e-01 + -1.8976960692100360e+00 2.0983840358812835e+00 -6.6302247005553794e-01 + -2.2227527101879887e+00 2.2648440657940281e+00 -7.3959648654902432e-01 + -2.5750737125923648e+00 2.3593253497392501e+00 -8.2050849828041350e-01 + -2.9505028575724106e+00 2.3296997837650069e+00 -8.9321845236195652e-01 + -3.3056915557663173e+00 2.1287313069342155e+00 -9.2959962388683115e-01 + -3.5657520351379439e+00 1.7749811071490724e+00 -9.1541858670251841e-01 + -3.7152174856784739e+00 1.3550539484252107e+00 -8.7839539896051910e-01 + -3.8098729221115750e+00 9.0910249090497486e-01 -8.3119704844040276e-01 + -3.8846628223776198e+00 4.2498152372733511e-01 -7.3253605864748805e-01 + -3.9320577270924741e+00 -9.5336026987076064e-02 -5.1817470576604774e-01 + -3.9259481231914397e+00 -6.1305490784581429e-01 -1.8378490570017136e-01 + -4.0282135975797901e+00 -1.1357199924478452e+00 5.8866763307946768e-02 + id 11403 + loc 9.9539268016815186e-01 7.3166146874427795e-02 1070 + blend 0.0000000000000000e+00 + interp 4.5752443220319317e-01:4.4627299514879337e-01:1.5295499670864221e-01:2.8986619673507602e-01:1.0008790990605683e+00:3.4402509777199797e-01:1.7072244322120542e+00:4.5751985695887115e-01:2.1000600716635942e+00:4.0246709220670956e-01:2.9161478418570694e+00:4.3364462451785263e-01:3.4690302702062885e+00 + CVs 20 + 3.1319970749641812e-01 3.0810588325157395e-01 -4.9666373188121088e-02 + 5.8485991122888747e-01 5.8156920913907650e-01 -1.4113194393908568e-02 + 8.2082909657061887e-01 8.3958566214256458e-01 8.4398223233418945e-02 + 1.0088314043940554e+00 1.0867726205208570e+00 2.3199678612248209e-01 + 1.1398102324309420e+00 1.3280617780265116e+00 4.0954706995508328e-01 + 1.2323757670749385e+00 1.5945347373076513e+00 5.7705773212386702e-01 + 1.3169985455465709e+00 1.9161006631603956e+00 6.8524916032030470e-01 + 1.4230580871668739e+00 2.2890159324133683e+00 7.0444833115386674e-01 + 1.5865323170022021e+00 2.6868428019990174e+00 6.2544826065292036e-01 + 1.8526360104438200e+00 3.0584969193279927e+00 4.4186111003546502e-01 + 2.2394542622110598e+00 3.3162917987232872e+00 1.7496064922482124e-01 + 2.6996364185282369e+00 3.3990387184514632e+00 -1.0735031848698040e-01 + 3.1752551254158097e+00 3.3150222508127700e+00 -3.5048262066170421e-01 + 3.6182906409016562e+00 3.1038296853463794e+00 -5.2188104438107974e-01 + 3.9954639249624542e+00 2.8216403158136147e+00 -6.0494373257497180e-01 + 4.3143882885633751e+00 2.4899978511910161e+00 -6.1090483789718841e-01 + 4.5865175455139626e+00 2.0876549298915661e+00 -5.4565680596555222e-01 + 4.7684849094235080e+00 1.6542776251898592e+00 -3.9346091352177504e-01 + 4.7789165592390122e+00 1.4999306252789513e+00 -1.8742167285302291e-01 + id 11404 + loc 6.5369480848312378e-01 3.3687436580657959e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6596245633357932e-01:3.4223791986579322e-01:2.7035085580736640e-03:3.6472188512797304e-01:9.2460377754460465e-01:3.0993789029850333e-01:1.3396953445057236e+00:3.6595879670901599e-01:1.9969584552625572e+00:3.2316129769000673e-01:2.5532669430381847e+00:2.9692343615603783e-01:3.3018818037245561e+00 + CVs 20 + -4.3574714007316911e-02 2.5926261116236937e-01 2.0481588114515406e-01 + -1.0395381202156634e-01 5.3171898046750699e-01 4.1617155275121609e-01 + -1.7469592976925177e-01 8.1583793180949715e-01 6.2660544094244941e-01 + -2.5553552092673004e-01 1.1060372795918070e+00 8.3118401792270258e-01 + -3.5219211607168260e-01 1.3932692957447745e+00 1.0326478587015626e+00 + -4.7002398353286345e-01 1.6652459746425681e+00 1.2452279220559193e+00 + -6.0791108746648448e-01 1.9068501988746882e+00 1.4887559684617189e+00 + -7.5130816004701328e-01 2.1034965885095263e+00 1.7767301643666589e+00 + -8.7640384124188042e-01 2.2447758851425657e+00 2.1121886260565224e+00 + -9.6072388734535452e-01 2.3222361048175291e+00 2.4895177810793658e+00 + -9.8539421024602258e-01 2.3256499780894697e+00 2.8940058209368735e+00 + -9.3568571922120336e-01 2.2496788092930902e+00 3.3003501977330680e+00 + -8.0396378231519694e-01 2.0961681596596065e+00 3.6786828745796543e+00 + -5.8920159133531058e-01 1.8712746200342119e+00 3.9966999971058423e+00 + -2.9650885355273321e-01 1.5917899435671492e+00 4.2180363815599238e+00 + 5.9654400328621127e-02 1.2998779376098373e+00 4.3084014691528445e+00 + 4.4958775339345536e-01 1.0539760072790298e+00 4.2591217625886726e+00 + 8.3750137224007704e-01 8.7429242678139418e-01 4.1080897314045988e+00 + 1.2135876282677798e+00 6.4175399299417513e-01 4.0060143827494521e+00 + id 11405 + loc 5.7015877962112427e-01 6.4091354608535767e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3599122807478963e-01:3.5123561678582260e-01:9.1944134742893535e-02:2.8585001279917349e-01:9.8701046621444866e-01:4.3595802528581623e-01:1.2986553459510801e+00:3.8497793560986726e-01:2.0019442149577054e+00:2.8837640104536649e-01:2.6269370248993296e+00:4.3598686816250892e-01:3.0013310184576611e+00:3.7762886057217615e-01:3.6865132365540747e+00 + CVs 20 + 1.1372620111181569e-01 7.1323701514223803e-01 -3.9883402326517758e-01 + 2.5169740570641097e-01 1.3728271587638448e+00 -7.5951970213212394e-01 + 4.0838694640559364e-01 1.9998879154017768e+00 -1.1011499134278382e+00 + 5.9895864074746985e-01 2.6041138567260074e+00 -1.3795610770088893e+00 + 8.7986066678620400e-01 3.1911925848294667e+00 -1.4682708504584232e+00 + 1.2481129888870837e+00 3.6923899169295837e+00 -1.2619283354875037e+00 + 1.6093729143159059e+00 3.9985470513717321e+00 -7.8163347018227025e-01 + 1.8631624024299269e+00 4.0438573786667789e+00 -1.3370006592658457e-01 + 1.9647107103822321e+00 3.8444066970422242e+00 5.5155408727370570e-01 + 1.9186335411148661e+00 3.4498621834090630e+00 1.1701850612770985e+00 + 1.7654781266951605e+00 2.9048965616533948e+00 1.6591592466432417e+00 + 1.5657144621359609e+00 2.2542338723593400e+00 2.0208569504721856e+00 + 1.3424765140131105e+00 1.5317339250815241e+00 2.3425168858268854e+00 + 1.1076202758591069e+00 8.0963320472382660e-01 2.7643802706266016e+00 + 1.0048356575524500e+00 3.0615994105771271e-01 3.3748056137230455e+00 + 1.2331977754785415e+00 2.2622015708227905e-01 4.0346361925223242e+00 + 1.7724380493093648e+00 4.8006302709619275e-01 4.5678190427335039e+00 + 2.5187554426964964e+00 9.4047900462205414e-01 4.9528873838466527e+00 + 3.3206852556155022e+00 1.4583370900091617e+00 5.4377690824879377e+00 + id 11406 + loc 8.2857871055603027e-01 3.3846738934516907e-01 410 + blend 0.0000000000000000e+00 + interp 4.8325297742800122e-01:4.4535200616343873e-01:2.1019610689197343e-01:4.8324814489822698e-01:9.9858563240382914e-01:3.8551029767937933e-01:1.4771382664991353e+00:3.9065376607778340e-01:2.1562090768249900e+00:2.8966272294788348e-01:3.0164086406148711e+00:3.1430643333263614e-01:3.9799221760641430e+00 + CVs 20 + -4.0962352205638469e-01 3.6382469130856260e-01 1.5031131448355303e-01 + -7.6821904523024209e-01 7.1264063022972779e-01 3.0596328753497970e-01 + -1.1328398139252045e+00 1.0698139186502900e+00 4.6765083670004171e-01 + -1.5292169856113782e+00 1.4228809756714449e+00 6.6212527536179600e-01 + -1.9514085618175563e+00 1.7308757475250180e+00 9.2182887929195423e-01 + -2.3809742329449759e+00 1.9539722485398618e+00 1.2635999487351388e+00 + -2.8059150070140841e+00 2.0647614659524214e+00 1.6769343309437201e+00 + -3.2323837287010324e+00 2.0434712611833135e+00 2.1293714167389717e+00 + -3.6696882254104009e+00 1.8726692281942825e+00 2.5755892258817537e+00 + -4.1109213519558239e+00 1.5431556301428395e+00 2.9627521667730479e+00 + -4.5220910461623109e+00 1.0917974036018829e+00 3.2370949047442550e+00 + -4.8731163926261791e+00 6.1044225175497147e-01 3.3955324567317997e+00 + -5.1730763293277136e+00 1.4850613936257817e-01 3.5013228031671999e+00 + -5.4418319581312957e+00 -2.9977254322400171e-01 3.6285147210205926e+00 + -5.6898999907027399e+00 -7.4070045614430713e-01 3.8320301078187096e+00 + -5.9257880731884276e+00 -1.1823009676808311e+00 4.1301515913159719e+00 + -6.1645063134279514e+00 -1.6578116252821247e+00 4.4935332584165595e+00 + -6.4205782397932651e+00 -2.2044487746918326e+00 4.8781873332786656e+00 + -6.6798055554017521e+00 -2.8609347989209679e+00 5.3013245372039854e+00 + id 11407 + loc 9.1667371988296509e-01 8.1079274415969849e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4370846699732830e-01:3.4044519928531475e-01:1.3775354617583391e-03:4.3667763166693091e-01:6.9784770836883259e-01:3.0750613076744887e-01:1.0534754149753529e+00:2.7839105763855138e-01:1.9012178907787294e+00:3.5538193009151908e-01:2.7876126380944264e+00:4.4370402991265834e-01:3.5819070934306829e+00 + CVs 20 + 8.9494224966751565e-02 3.3122684581281581e-01 -2.9085804730171966e-01 + 1.9640358394285659e-01 6.3013293747894339e-01 -5.6278765173330125e-01 + 2.9584609764331377e-01 8.9113431528664955e-01 -8.3737257083971484e-01 + 3.7321117832066425e-01 1.1075565454395480e+00 -1.1203270211710636e+00 + 4.2138936482318207e-01 1.2763341309113909e+00 -1.4069501037718910e+00 + 4.3672006531574892e-01 1.4025866007547116e+00 -1.6962722779447961e+00 + 4.2470614225788822e-01 1.4975840729150938e+00 -1.9967747732378682e+00 + 3.9925166068950807e-01 1.5730968915182986e+00 -2.3184859382503533e+00 + 3.7671212288866618e-01 1.6413078806588484e+00 -2.6638840941714244e+00 + 3.7902144672243793e-01 1.7137950368071575e+00 -3.0238661349850267e+00 + 4.3043999332896249e-01 1.8027852945556151e+00 -3.3702321758312070e+00 + 5.5043019102778490e-01 1.9362558212982321e+00 -3.6648096456367689e+00 + 7.6923825107108801e-01 2.1211966305130723e+00 -3.9183551767628328e+00 + 1.0859702414024448e+00 2.2294471227771222e+00 -4.1891832616481626e+00 + 1.4254412345871161e+00 2.1409928828040456e+00 -4.4540521541626390e+00 + 1.8159778071664090e+00 1.9043120912396916e+00 -4.6389930054339477e+00 + 2.3940171995832014e+00 1.4754971863360118e+00 -4.7062725573741533e+00 + 2.7882635285415169e+00 6.9111922356040401e-01 -4.6993019108533192e+00 + 2.5262957864881930e+00 4.5341774557147818e-01 -4.7220140526871219e+00 + id 11408 + loc 4.6674731373786926e-01 6.5585929155349731e-01 1053 + blend 0.0000000000000000e+00 + interp 4.3625841150361988e-01:3.4450238911482706e-01:9.7881667282661500e-01:3.4020786333426239e-01:1.5950229123431019e+00:2.9105124007835842e-01:2.1411325335588423e+00:4.3625404891950487e-01:3.0672847152640554e+00:2.8313157380692094e-01:3.9483366377835916e+00 + CVs 20 + -1.1239327879530339e-01 2.9647291433683853e-01 3.3812045748296193e-01 + -2.6928254049162953e-01 5.2347466064379722e-01 6.1641011074257257e-01 + -4.4842078545246883e-01 7.2304075138843626e-01 8.6873069346698595e-01 + -6.2696057440893538e-01 9.0300192642865840e-01 1.1001124763841985e+00 + -7.9912042354729207e-01 1.0542832962362649e+00 1.2964470640651808e+00 + -9.5145388557283572e-01 1.1698552309867560e+00 1.4438911743369109e+00 + -1.0665407325181189e+00 1.2515030665371687e+00 1.5388575398156066e+00 + -1.1289620443824151e+00 1.3142907132470805e+00 1.5893138896750454e+00 + -1.1301190960274652e+00 1.3906741953967747e+00 1.6066722643501192e+00 + -1.0720623415737347e+00 1.5339655700956711e+00 1.6122131539935092e+00 + -1.0191150288224327e+00 1.7624416892029380e+00 1.6350507443741265e+00 + -1.0541073532630403e+00 1.9677618273733446e+00 1.6468963922118600e+00 + -1.1307444099730377e+00 2.0391309462097738e+00 1.5992924853318891e+00 + -1.1516243255576493e+00 1.9612460284882289e+00 1.4870579640886712e+00 + -1.0992814164617926e+00 1.8110617024053381e+00 1.3315311977625859e+00 + -1.0406233272473493e+00 1.7041782379619992e+00 1.1926536591534576e+00 + -1.0250564886430635e+00 1.6857957435327624e+00 1.1685613575712219e+00 + -1.0190120196426631e+00 1.6894770186263761e+00 1.1771282038251707e+00 + -9.4322459183487706e-01 1.7942344535052765e+00 7.3128911035603528e-01 + id 11409 + loc 2.1361242234706879e-01 4.7234117984771729e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5131829521944045e-01:3.2921394971788370e-01:1.3722126833067616e-02:3.6236899433792241e-01:9.3036747034492207e-01:3.3755127708865101e-01:1.2135743895610827e+00:3.6357823982555382e-01:1.9953247173599094e+00:3.0840979948589931e-01:2.4747227990797942e+00:4.5131378203648825e-01:3.2105857439200767e+00 + CVs 20 + -1.2293748213999831e-01 2.8790256488081728e-01 8.7534425929612983e-03 + -2.5402665141841185e-01 5.5872767938749401e-01 -1.7869956735680960e-02 + -3.8054930341330989e-01 8.0791902570955687e-01 -5.5605293333219175e-02 + -4.9652846818119184e-01 1.0414119732655100e+00 -8.9454227698721772e-02 + -6.0725352763146268e-01 1.2649472185569470e+00 -1.1816234775849292e-01 + -7.1880000350490070e-01 1.4844976033291015e+00 -1.4362517357892185e-01 + -8.3217574989203680e-01 1.6965900920562884e+00 -1.7250038359051684e-01 + -9.4327212143695582e-01 1.8947937279412534e+00 -2.0984815737585030e-01 + -1.0570889354615205e+00 2.0801379916991278e+00 -2.5657820989975511e-01 + -1.1940960219763697e+00 2.2493699562543696e+00 -3.1235490364990376e-01 + -1.3682833390537055e+00 2.3867207316228720e+00 -3.7577623864043741e-01 + -1.5741621833220885e+00 2.4717494033056973e+00 -4.4544787511728978e-01 + -1.7857181329496674e+00 2.4882813823385810e+00 -5.2095979360322797e-01 + -1.9603352208545006e+00 2.4432188333311178e+00 -6.1295644156430995e-01 + -2.0879435404235198e+00 2.3587037144656335e+00 -7.3570277875660717e-01 + -2.2035479413119639e+00 2.2320465356206940e+00 -8.7106073971174647e-01 + -2.3347650130744939e+00 2.0508898190128519e+00 -9.6756701313641835e-01 + -2.4965532037537388e+00 1.8182386458637689e+00 -9.2358962470477945e-01 + -2.7092696002604471e+00 1.5700113557258282e+00 -5.8163755598005273e-01 + id 11410 + loc 5.5238622426986694e-01 7.1814554929733276e-01 1075 + blend 0.0000000000000000e+00 + interp 4.9423965367291284e-01:3.8053885920913538e-01:1.5697896861590965e-01:3.1508469583541099e-01:9.9835019371627054e-01:4.4437834458385234e-01:1.3772922123963864e+00:3.8349558493725533e-01:1.9897952608309271e+00:4.9423471127637614e-01:2.3767518736456115e+00:4.1772294296314205e-01:2.9827483825242500e+00:2.5809698626060340e-01:3.8754522089676628e+00 + CVs 20 + 1.9887805304980885e-01 1.8681750004081499e-01 -3.2508746636456548e-01 + 4.0134629103788255e-01 3.7458478648866855e-01 -6.4168573438252929e-01 + 6.0230126999772704e-01 5.6413023974927889e-01 -9.5737519375075286e-01 + 7.9484479272436426e-01 7.6045265537199558e-01 -1.2778689031586565e+00 + 9.6976408272797077e-01 9.7052244638263063e-01 -1.6061924280825424e+00 + 1.1172926054813848e+00 1.1978279584195159e+00 -1.9421155054281161e+00 + 1.2348660364147814e+00 1.4333394854893091e+00 -2.2802671633798086e+00 + 1.3338140882826486e+00 1.6550812327521003e+00 -2.6158754680329674e+00 + 1.4308795205176246e+00 1.8384780569019334e+00 -2.9515838127027147e+00 + 1.5367334173462428e+00 1.9604827574609898e+00 -3.2940191878731908e+00 + 1.6542875289216119e+00 2.0025579772902109e+00 -3.6464236537142938e+00 + 1.7798066831555506e+00 1.9557006761552875e+00 -4.0076257415725944e+00 + 1.9076421581427836e+00 1.8180064161681238e+00 -4.3686577138726648e+00 + 2.0355658977465136e+00 1.5998275695661630e+00 -4.7147985845941109e+00 + 2.1551086240592432e+00 1.3123963343803899e+00 -5.0437421061104759e+00 + 2.2308933510097027e+00 9.4426336622415352e-01 -5.3676032901095709e+00 + 2.2016579372994149e+00 4.8642745188610942e-01 -5.6870029699779572e+00 + 2.0528953998379391e+00 6.7503278222705299e-03 -5.9754709974068332e+00 + 2.0084410564655353e+00 -2.5646652478814225e-01 -6.2340378270546424e+00 + id 11411 + loc 3.5444274544715881e-01 5.0438344478607178e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6742849762017580e-01:4.5483726282469245e-01:6.9864815013883974e-02:3.6880936599767611e-01:7.9630005008105209e-01:4.0067617940295458e-01:1.6297093192472127e+00:3.5572456311744322e-01:2.0014905172864017e+00:3.7035772719321225e-01:2.5290813535325700e+00:4.6742382333519961e-01:3.0000007676487273e+00:3.9184657832074016e-01:3.5362078019221257e+00 + CVs 20 + -3.5424633173045095e-01 1.9122315414162266e-01 2.9905637183373551e-01 + -6.5445808726825705e-01 3.1630410826130506e-01 5.3561909663773899e-01 + -9.1219825748746941e-01 4.2265888947774666e-01 7.8951712004455521e-01 + -1.1449876891061581e+00 5.4280912468521236e-01 1.0969151828797798e+00 + -1.3953015554635102e+00 6.8729453505396210e-01 1.3992354625745265e+00 + -1.6956222439686641e+00 8.4408948429058617e-01 1.6202916983366116e+00 + -2.0404090962932373e+00 9.8329004414880827e-01 1.7297634358132730e+00 + -2.4215481091072544e+00 1.0809027927934816e+00 1.7251904201685120e+00 + -2.8131030273089284e+00 1.1187634781618192e+00 1.5942404207843606e+00 + -3.1256480682771710e+00 1.0855127046940418e+00 1.3515948336272725e+00 + -3.2878020563068091e+00 1.0075813625922967e+00 1.0947844079172171e+00 + -3.3453416319461260e+00 9.4189467778068181e-01 9.0083094833940758e-01 + -3.3569494468011887e+00 9.2115245737515417e-01 7.7380493870091027e-01 + -3.2934778411973276e+00 8.8362339759012509e-01 6.9975135453277104e-01 + -3.1068748686817624e+00 7.4538347933659876e-01 6.9619036603273066e-01 + -2.8145641182359715e+00 4.7087819606541520e-01 7.0076174179657647e-01 + -2.4709215118139576e+00 4.1897819914894829e-02 5.5219200121146872e-01 + -2.1997141480565885e+00 -4.3753075232414135e-01 2.0886382763791567e-02 + -2.1213065076764503e+00 -4.5270318736520132e-01 -1.5365715992578008e-01 + id 11412 + loc 7.3987245559692383e-01 6.7902576923370361e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2384165564326326e-01:2.8985301039221795e-01:3.3741563799398411e-02:4.2383741722670687e-01:6.2887236147255166e-01:4.1188752074440610e-01:9.9984734186078927e-01:3.4341827949585729e-01:1.3776152976381035e+00:4.0683844812546749e-01:1.9993911731196858e+00:3.6867631402741680e-01:2.5724514029537757e+00:3.8922538764499859e-01:3.3622011257402713e+00 + CVs 20 + 1.6746717879039896e-01 2.6577424615926776e-01 -3.0046262287409997e-01 + 3.3683223868188239e-01 5.3402400090331192e-01 -5.9278929839384331e-01 + 5.3117690087971048e-01 7.9413063838650644e-01 -8.7094288601241243e-01 + 7.5574713554598771e-01 1.0371658163749635e+00 -1.1356038870067631e+00 + 1.0023253985067027e+00 1.2532378639616188e+00 -1.3930308974331076e+00 + 1.2546730752258417e+00 1.4327945309436056e+00 -1.6553731992871601e+00 + 1.4909065145899341e+00 1.5678728395064461e+00 -1.9369539041195296e+00 + 1.6851129952960524e+00 1.6536214579090307e+00 -2.2468916972430337e+00 + 1.8157612252118438e+00 1.6900398769925271e+00 -2.5810006099844176e+00 + 1.8733978366604711e+00 1.6793321605302238e+00 -2.9220624117551282e+00 + 1.8576267200710135e+00 1.6249433255487136e+00 -3.2468745496710429e+00 + 1.7761613270158498e+00 1.5347474797640015e+00 -3.5341171571388070e+00 + 1.6415255082163538e+00 1.4183718924901099e+00 -3.7676308793403970e+00 + 1.4664606761203869e+00 1.2872811374418833e+00 -3.9322377171656511e+00 + 1.2668353110840735e+00 1.1614635181297679e+00 -4.0168121614218819e+00 + 1.0643351430520676e+00 1.0590381811738021e+00 -4.0282946747956139e+00 + 8.8424573782663651e-01 1.0119115020969036e+00 -3.9737164690605313e+00 + 7.5531199377846225e-01 1.0368402236549232e+00 -3.8864836666974494e+00 + 5.3496888689931643e-01 9.1002910350532717e-01 -3.7834476910941990e+00 + id 11413 + loc 7.1913039684295654e-01 1.0003576427698135e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6398149606193534e-01:2.7057432707838364e-01:7.4980467241018367e-02:2.8252309210478066e-01:1.0698058839398723e+00:3.4016361974545933e-01:1.7657910476110008e+00:4.6397685624697477e-01:2.0929052295677022e+00:4.0501142502221021e-01:2.7862311535279880e+00:3.8132958110980397e-01:3.1342852096534686e+00 + CVs 20 + 3.8156197699857744e-02 3.7224121693462886e-01 2.6706135379117052e-01 + 7.1731022902943753e-02 7.6058235247977013e-01 5.2301118871850583e-01 + 7.6781380006331501e-02 1.1429740217284616e+00 8.1700544108078255e-01 + 2.4208698350901670e-02 1.4922515056190517e+00 1.1744785899128867e+00 + -1.0964663506274130e-01 1.7769655335617913e+00 1.5961125475247442e+00 + -3.3710299577100900e-01 1.9668544626312936e+00 2.0628815177708968e+00 + -6.5894796970834657e-01 2.0370673640467678e+00 2.5404037996185371e+00 + -1.0605712935341143e+00 1.9751035241033994e+00 2.9866925656531382e+00 + -1.5084411243906148e+00 1.7853482305726005e+00 3.3722686202472199e+00 + -1.9556106931429820e+00 1.4840011994651825e+00 3.6992520979530266e+00 + -2.3563330046675470e+00 1.0840898899766860e+00 3.9906605306844045e+00 + -2.6669925888368402e+00 5.9256176951299988e-01 4.2629980492276562e+00 + -2.8440295749410058e+00 2.7428981705098998e-02 4.5219232930477435e+00 + -2.8400358281055205e+00 -5.7062840794186043e-01 4.7887641069556128e+00 + -2.5956144345406873e+00 -1.1296904364386808e+00 5.0963069218227801e+00 + -2.1314406337894893e+00 -1.5194757476830847e+00 5.4700851211414472e+00 + -1.5868597987837656e+00 -1.6332018404461093e+00 5.9301888206885032e+00 + -1.1187843945625775e+00 -1.5538648418359378e+00 6.3901311042499422e+00 + -9.0732775488357298e-01 -1.7554599492294409e+00 6.6408313246947452e+00 + id 11414 + loc 3.8074609637260437e-01 1.1980636417865753e-01 1047 + blend 0.0000000000000000e+00 + interp 4.8296508167401470e-01:3.4354473952858738e-01:6.1952893196570979e-01:2.0344055706532357e-01:1.1316464047203274e+00:2.8620056949693257e-01:1.9900611580614691e+00:4.0133518436257060e-01:2.3367705252071529e+00:3.1395603297403035e-01:3.3217000620542612e+00:4.8296025202319798e-01:3.8947416974885853e+00 + CVs 20 + -7.1681002694478579e-01 6.6296998876215674e-01 -1.1269865057145248e-01 + -1.2994326276860899e+00 1.2781437891162923e+00 -3.0185443169059567e-01 + -1.7557161423830383e+00 1.8542012587920276e+00 -5.9638984730022293e-01 + -2.0426038196603549e+00 2.3594876977037242e+00 -1.0174645112019327e+00 + -2.1371441494140733e+00 2.7422711643340953e+00 -1.5529974713929537e+00 + -2.0780197422055471e+00 2.9513334742647608e+00 -2.1550552582917377e+00 + -1.9329248791996425e+00 2.9459211692405307e+00 -2.7435348098600638e+00 + -1.7758331312433899e+00 2.7478686897996720e+00 -3.2424178333211917e+00 + -1.6263608356642583e+00 2.4361172202412051e+00 -3.6335387566267991e+00 + -1.4442517880834467e+00 2.0744983156701324e+00 -3.9473777099940568e+00 + -1.1842057369062362e+00 1.6856582900040258e+00 -4.1999678663880511e+00 + -8.2385834053018459e-01 1.2831595269209903e+00 -4.3717790373625833e+00 + -3.5354497278307750e-01 9.2258239537660169e-01 -4.4140702384202672e+00 + 2.0338921875278274e-01 6.8959893626037838e-01 -4.2955805485594807e+00 + 7.9402398736191593e-01 6.5474632817134182e-01 -4.0220034561489770e+00 + 1.3401101877248847e+00 8.6851724732154734e-01 -3.6069604420750703e+00 + 1.6767249618925448e+00 1.4088406992063529e+00 -3.0592246493091175e+00 + 1.3977845406840348e+00 2.2826583776877207e+00 -2.6198801289306837e+00 + 1.1411914747157945e+00 2.8249326335907314e+00 -2.4558409205750218e+00 + id 11415 + loc 5.3354641422629356e-03 6.3407808542251587e-01 410 + blend 0.0000000000000000e+00 + interp 4.1365294493128330e-01:3.1920663917747466e-01:1.2195931352262179e-01:2.6280387724653326e-01:9.9844759141198536e-01:3.9875388962551550e-01:1.9839818099965787e+00:2.2150797417870163e-01:2.3253795004330780e+00:3.7106784069217991e-01:2.9999731081928411e+00:4.1364880840183399e-01:3.4625413875766178e+00 + CVs 20 + 2.9898343808308375e-01 1.5775854404587059e-01 -4.5547620802196889e-02 + 5.4491859016525768e-01 2.5911664773990134e-01 -1.0815101340599884e-01 + 7.8513710448903584e-01 3.3748320728377534e-01 -1.7182746007609265e-01 + 1.0461388607383095e+00 4.0956615380568073e-01 -2.2559463709293071e-01 + 1.3266947000603619e+00 4.7260679389168569e-01 -2.6365190655498683e-01 + 1.6232277649845090e+00 5.2433619705099632e-01 -2.7862712319083421e-01 + 1.9300799065477645e+00 5.6386692093968649e-01 -2.6198737600625172e-01 + 2.2395843136083942e+00 5.9063251627066626e-01 -2.0831836138153281e-01 + 2.5432719129455261e+00 6.0434149793983316e-01 -1.1712018670627800e-01 + 2.8324089465073667e+00 6.0570447153718332e-01 9.2341638087301003e-03 + 3.0981699368419475e+00 5.9414562980846886e-01 1.6189383019161907e-01 + 3.3381477880145614e+00 5.6242191168263034e-01 3.1612434698621261e-01 + 3.5609632044572401e+00 4.9917587934984842e-01 4.4011224183154718e-01 + 3.7792712897920122e+00 4.0053878919048724e-01 5.2277480117158259e-01 + 3.9994762852457306e+00 2.6949191238286985e-01 5.7149776373457217e-01 + 4.2144417356682693e+00 1.1303506810840669e-01 5.8978365514121034e-01 + 4.4158748124644687e+00 -5.9458640816721697e-02 5.7616905061232038e-01 + 4.6035537376515538e+00 -2.4008226687437473e-01 5.3248733636733747e-01 + 4.8069406130174528e+00 -4.2019020029633802e-01 5.0232085323777875e-01 + id 11416 + loc 8.0503547191619873e-01 8.6898803710937500e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6686668481357102e-01:3.2460471294523185e-01:7.3007317038651698e-01:3.2103160021170674e-01:1.4296747830843684e+00:3.6001923859153651e-01:2.2266547660779437e+00:4.6686201614672290e-01:2.9992084938408849e+00:3.0142707466928370e-01:3.3362977009390731e+00:3.3498465628813673e-01:3.9988563042867074e+00 + CVs 20 + 2.4305325235486608e-01 2.5609689166619587e-01 -2.8991339606711991e-01 + 4.7764720164363172e-01 5.0114760677942305e-01 -5.4641401250203392e-01 + 7.2290895135162658e-01 7.2256401871249221e-01 -7.7017326773142347e-01 + 9.7905483682494598e-01 9.1708213199824651e-01 -9.7009745278452220e-01 + 1.2357818985249256e+00 1.0834421104526957e+00 -1.1561456045150267e+00 + 1.4846953775232674e+00 1.2229775917643453e+00 -1.3394818406580169e+00 + 1.7204864005161458e+00 1.3387448643293811e+00 -1.5327013583393714e+00 + 1.9389418997976291e+00 1.4330804388716596e+00 -1.7491832502639888e+00 + 2.1330850592692459e+00 1.5059252209712366e+00 -1.9993337919309107e+00 + 2.2922443379389108e+00 1.5553531721979479e+00 -2.2856368883662270e+00 + 2.4062841867280964e+00 1.5784522881109886e+00 -2.6012135530864580e+00 + 2.4685415348544346e+00 1.5722399153596460e+00 -2.9331573695057100e+00 + 2.4758815031113346e+00 1.5355918019932717e+00 -3.2668842546661763e+00 + 2.4288448823566777e+00 1.4699641342294618e+00 -3.5877578876157541e+00 + 2.3306816739350791e+00 1.3786131163566175e+00 -3.8812073416927118e+00 + 2.1860448034371411e+00 1.2689405539307350e+00 -4.1310578319841929e+00 + 1.9977142515938704e+00 1.1523918414328866e+00 -4.3230303084458015e+00 + 1.7659662701532126e+00 1.0429489402205179e+00 -4.4471998356161073e+00 + 1.4152845198365038e+00 8.7855336870563350e-01 -4.4918282343642719e+00 + id 11417 + loc 1.7375759780406952e-01 8.5099244117736816e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4774558431815759e-01:4.2288355951413942e-01:7.1160928955820157e-03:4.1510681203992739e-01:5.6811434949678330e-01:3.1786451275149041e-01:1.0327417280125823e+00:3.7646423364199005e-01:2.0251065322772179e+00:4.4774110686231444e-01:2.8742106818794735e+00:3.5794468754709902e-01:3.5401084144738846e+00 + CVs 20 + 1.1979704198645970e-01 2.6527830167928984e-01 -1.2042968819868539e-01 + 2.4108335638402872e-01 5.3007615289429422e-01 -2.8848593117222765e-01 + 3.6798887989640866e-01 7.7959035324530945e-01 -4.8062110587804685e-01 + 4.9709574787677058e-01 1.0105820971095898e+00 -6.8135797240831175e-01 + 6.2303997882882922e-01 1.2280196127306708e+00 -8.8607713033542557e-01 + 7.5168256945443424e-01 1.4357385958989859e+00 -1.0977198454588886e+00 + 8.9744729265376133e-01 1.6345834155406704e+00 -1.3222656041341820e+00 + 1.0702709272662840e+00 1.8228266154449022e+00 -1.5587049715169119e+00 + 1.2708540689496437e+00 1.9909979816276109e+00 -1.8016308109177028e+00 + 1.4931590977957425e+00 2.1180683246121159e+00 -2.0533821052182333e+00 + 1.7237716917558417e+00 2.1705366937632173e+00 -2.3227765547892827e+00 + 1.9395005488489849e+00 2.1118170020379687e+00 -2.6090777834446803e+00 + 2.1154993666609161e+00 1.9276393597127432e+00 -2.8851508753204449e+00 + 2.2510581434945736e+00 1.6465272997539802e+00 -3.1196141745602075e+00 + 2.3560722632324316e+00 1.2951425650065884e+00 -3.3188225040711767e+00 + 2.4037569393312981e+00 8.6496175809683029e-01 -3.5081963495112434e+00 + 2.3454379469169542e+00 3.6218670782900514e-01 -3.6937983766924893e+00 + 2.2135158194600377e+00 -1.3988539462689598e-01 -3.8697430283953689e+00 + 2.1937332923516224e+00 -5.3290243571394025e-01 -4.0486232994109548e+00 + id 11418 + loc 1.2358006834983826e-01 1.0801254957914352e-01 1077 + blend 0.0000000000000000e+00 + interp 3.9735465637880962e-01:3.1978996528853204e-01:6.4752456913169421e-01:3.9735068283224584e-01:1.6631802011789978e+00:3.4153836515856817e-01:2.0937671448414208e+00:3.0215454312871576e-01:2.9476691503128611e+00:3.8453124065250649e-01:3.2992646518511890e+00:2.4319398112615026e-01:3.9993043090687248e+00 + CVs 20 + -1.0025780244305667e-01 3.1285675662668327e-01 5.3987416345603723e-02 + -2.4087614460643947e-01 6.0681335128856329e-01 9.6519891759256821e-02 + -4.1355879757651137e-01 8.8199485170206604e-01 1.2597283019212493e-01 + -6.1116317824901845e-01 1.1308077773870180e+00 1.4004648897761451e-01 + -8.3067557971443695e-01 1.3429063429216965e+00 1.3557448776851755e-01 + -1.0667937285789078e+00 1.5108365214408694e+00 1.1173788539685914e-01 + -1.3152189654781292e+00 1.6309924410614323e+00 6.7767204460091213e-02 + -1.5725463681937215e+00 1.7018446099981328e+00 1.8458483067697595e-03 + -1.8288177353557469e+00 1.7232024215304778e+00 -8.3565517360670249e-02 + -2.0662769493795667e+00 1.7013462651391542e+00 -1.7708433517489724e-01 + -2.2716474788563974e+00 1.6545629325938487e+00 -2.6271577173301347e-01 + -2.4419924183035162e+00 1.6088869147337721e+00 -3.2994842755235776e-01 + -2.5742210121508755e+00 1.5941603042912469e+00 -3.7864508166514371e-01 + -2.6569333654024079e+00 1.6436436806159007e+00 -4.2669260592405989e-01 + -2.6740069291478048e+00 1.7826050054478642e+00 -5.2492388159007841e-01 + -2.6249161737421285e+00 1.9572824060235900e+00 -7.2802713337149128e-01 + -2.5022409605677329e+00 2.0514099161903534e+00 -1.0166314450474874e+00 + -2.3255899464627019e+00 1.9938648097394802e+00 -1.3050467004966484e+00 + -2.4749817775107914e+00 2.0104251958843560e+00 -1.1628955548245128e+00 + id 11419 + loc 2.0606911182403564e-01 4.2316094040870667e-01 1053 + blend 0.0000000000000000e+00 + interp 1.7773241623964151e+00:3.3608668195318259e-01:2.3422776665375111e-01:3.7675456910188571e-01:9.9725488349872515e-01:7.7619650948587904e-01:1.0350874822375571e+00:1.3800721191897463e+00:1.1699508583923588e+00:1.7773141623964150e+00:1.2516260225742089e+00:8.9842703223054343e-01:3.2738288479002482e+00:2.4815917154105202e-01:3.4834598583432541e+00 + CVs 20 + 3.9731907402737515e-01 4.1385266998437287e-01 9.6033716691615034e-02 + 7.2413881590379714e-01 7.4190896877301404e-01 2.2951405453926704e-01 + 1.0294252536393613e+00 1.0196768025123015e+00 3.8515769033004571e-01 + 1.3319535497007688e+00 1.2600664503600756e+00 5.5766503387715294e-01 + 1.6216916244311137e+00 1.4559572883223275e+00 7.5030064234755101e-01 + 1.8892324760256292e+00 1.5995843964063861e+00 9.5989584830455932e-01 + 2.1280936792230030e+00 1.6852214529636598e+00 1.1787629976234220e+00 + 2.3318306792859138e+00 1.7151896261475785e+00 1.3979510595107087e+00 + 2.4906256325189280e+00 1.7016283262218408e+00 1.6040946375815683e+00 + 2.5971789089190374e+00 1.6751324483443706e+00 1.7744464386019088e+00 + 2.6595819967863377e+00 1.6741961338300870e+00 1.9014240039233230e+00 + 2.6759702399514689e+00 1.6837069852280417e+00 2.0142138148124564e+00 + 2.6239050002805899e+00 1.6380282554395771e+00 2.1096038720553736e+00 + 2.4958002013403755e+00 1.4935605141774251e+00 2.1288358674033048e+00 + 2.2924899329899855e+00 1.2859957122436971e+00 2.0455005139026130e+00 + 2.0425896595391078e+00 1.1286913254062947e+00 1.9319436215484860e+00 + 1.8627339011081574e+00 1.1120440330742827e+00 1.8850865006437285e+00 + 1.8287964550762918e+00 1.1868956809569062e+00 1.9207025993549220e+00 + 1.4719324277273402e+00 1.4433429371771551e+00 1.9393620276501329e+00 + id 11420 + loc 7.6868796348571777e-01 3.9447265863418579e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0348319310217970e-01:3.1980362097294196e-01:1.7985958310926398e-01:3.5709673233342487e-01:9.9814310463288436e-01:4.1574967585937217e-01:1.4213999966702897e+00:3.7589171491736600e-01:1.9508103174094304e+00:4.3533091168113164e-01:2.7464547381185760e+00:5.0347815827024867e-01:3.0762856334899777e+00:3.9163457221332088e-01:3.7463871418928831e+00 + CVs 20 + 3.8403079088010372e-01 2.8271240459009983e-01 -2.9546426131423414e-01 + 7.4335945625621602e-01 5.3408008308162291e-01 -5.0625327766386641e-01 + 1.0732079841065274e+00 7.9491751859512949e-01 -6.6606805951896608e-01 + 1.3948985517370323e+00 1.0963536512510612e+00 -7.3301114739340634e-01 + 1.6819761700570139e+00 1.4091938486107782e+00 -7.1403509752707151e-01 + 1.8983372150406883e+00 1.6918949224394899e+00 -7.2651164817875613e-01 + 2.0438594829917776e+00 1.9055876947567203e+00 -8.4019997598419738e-01 + 2.1478414040003257e+00 2.0267302501435407e+00 -1.0112336843275607e+00 + 2.2379211426641215e+00 2.0435337546115209e+00 -1.1765171527427198e+00 + 2.3121635087563326e+00 1.9022499482600619e+00 -1.2634662812963884e+00 + 2.3159169965586961e+00 1.5996363165742127e+00 -1.1479822413421843e+00 + 2.2118780436174825e+00 1.3437275094393399e+00 -8.2119393042264655e-01 + 2.0935535233803688e+00 1.2743016299493579e+00 -4.9499086514239921e-01 + 2.0338043725793606e+00 1.3043745384002525e+00 -2.7919177823716823e-01 + 2.0294779799934730e+00 1.3490680648338049e+00 -1.5448932354461109e-01 + 2.0499357878001652e+00 1.3954524828747144e+00 -7.2859381542197399e-02 + 2.0733303684691102e+00 1.4723674483808220e+00 -9.9626913411077211e-03 + 2.1090723398001034e+00 1.5694982543125324e+00 2.7163179511649149e-02 + 2.1631372666994224e+00 1.2692266340998517e+00 1.2594696830793550e-01 + id 11421 + loc 6.2129441648721695e-02 1.5312789380550385e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7108773534227300e-01:3.3232804534032268e-01:6.7252468907941321e-01:4.0095667544512309e-01:1.1422598203886853e+00:2.4937785854410202e-01:1.7240378859696217e+00:4.7108302446491962e-01:2.1197716330696501e+00:3.6160078605750090e-01:3.0262199066026745e+00:3.0947601821867338e-01:3.7541416141709205e+00 + CVs 20 + -1.4913597669583009e-01 3.1728878931705784e-01 -2.9829858743157373e-01 + -2.9864969082943166e-01 6.4811209829576577e-01 -5.8606454993739021e-01 + -4.9362302196089913e-01 9.4785805770328158e-01 -8.8044289713384205e-01 + -7.4195865254873161e-01 1.1920024687363160e+00 -1.1774052129317738e+00 + -1.0323304022778772e+00 1.3670996601830647e+00 -1.4638036897419342e+00 + -1.3471222321100944e+00 1.4638303654149718e+00 -1.7250046827201277e+00 + -1.6695986574858686e+00 1.4853530572132174e+00 -1.9461409585687830e+00 + -1.9879217199572012e+00 1.4469493787183927e+00 -2.1139136872496915e+00 + -2.2919098875089277e+00 1.3684273589813043e+00 -2.2184786573646491e+00 + -2.5724956438107691e+00 1.2746783158171386e+00 -2.2598831416625123e+00 + -2.8276047541057778e+00 1.1900198594692737e+00 -2.2483656172604434e+00 + -3.0640772568183969e+00 1.1317126913504492e+00 -2.2008201884903693e+00 + -3.2976841153736505e+00 1.1053091132053035e+00 -2.1364326147440038e+00 + -3.5510793385054464e+00 1.1020529519736217e+00 -2.0711881706227246e+00 + -3.8525374600035356e+00 1.1035227313878004e+00 -2.0161350865636485e+00 + -4.2541639683769832e+00 1.0762971894442757e+00 -1.9882241190219669e+00 + -4.8267930261661007e+00 8.7248867811017550e-01 -2.0233667969766644e+00 + -5.3192807963328681e+00 3.1048573083122766e-01 -2.1048957461802353e+00 + -5.4189460586306577e+00 6.7946250121089236e-02 -2.1016398522094444e+00 + id 11422 + loc 1.0647183656692505e-01 4.5410397648811340e-01 1047 + blend 0.0000000000000000e+00 + interp 4.9893614259459501e-01:2.8443497214197722e-01:7.7073616082957708e-03:3.8518741034177895e-01:9.6923443401785347e-01:4.4159864117105840e-01:1.6662757024246724e+00:3.2053628239409920e-01:1.9813686424329180e+00:4.3792419571506946e-01:2.2099418856430901e+00:4.5751943800377504e-01:3.0000098211289856e+00:4.9893115323316911e-01:3.7514462636733321e+00 + CVs 20 + -5.7586372811303899e-01 6.0731839808297472e-01 -6.2835828493536097e-02 + -1.0729659476684525e+00 1.2193277413017707e+00 -1.6029901282160744e-01 + -1.4851328504791137e+00 1.8477740724936489e+00 -3.4742285256508754e-01 + -1.7682290046708402e+00 2.4790220370702825e+00 -6.8553758177311086e-01 + -1.8753969141908158e+00 3.0486419746520936e+00 -1.2050217495649569e+00 + -1.8180627118903869e+00 3.4678595941165029e+00 -1.8833374796305491e+00 + -1.6535135825006091e+00 3.6452029157475874e+00 -2.6564193211773479e+00 + -1.4601732585242440e+00 3.5263255381063283e+00 -3.4216513314496173e+00 + -1.3012504075359990e+00 3.1425174144103005e+00 -4.0557085871409670e+00 + -1.1911306633223986e+00 2.5975390095424240e+00 -4.4866803537495166e+00 + -1.1089503286896916e+00 1.9971164537340123e+00 -4.7217814740697994e+00 + -1.0213494072445155e+00 1.4019439766796025e+00 -4.8039985415605582e+00 + -9.0415183064522409e-01 8.4814323262108826e-01 -4.7851081533745603e+00 + -7.3599344074347517e-01 3.3879997665383876e-01 -4.7121352435643891e+00 + -4.7951687021490674e-01 -1.3019924854776105e-01 -4.5955263277748131e+00 + -9.9743688849274648e-02 -5.3279647082052561e-01 -4.4500326961829364e+00 + 5.3321641248214535e-01 -9.0926521010281469e-01 -4.2729381386490433e+00 + 1.8349144728365854e+00 -1.1347847553449997e+00 -3.6839706984662941e+00 + 1.9551594710437874e+00 -9.0787097308237219e-01 -3.7039000139142741e+00 + id 11423 + loc 9.0066212415695190e-01 5.2890491485595703e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9639962864082939e-01:3.2542590282362693e-01:3.3407965339959933e-03:3.4507846388385099e-01:8.6009586087534584e-01:3.8676477062997189e-01:1.2766228742840633e+00:3.3666563265649752e-01:2.2816184961356929e+00:3.9639566464454301e-01:3.0109092741767602e+00 + CVs 20 + 8.6916850636922491e-02 2.7803508057813758e-01 -2.6935091522344368e-01 + 1.7508103417449958e-01 5.5643686194746977e-01 -5.3600322727169725e-01 + 2.6885125246519326e-01 8.3875971412818917e-01 -8.1411305159610481e-01 + 3.7408254160291099e-01 1.1220649963063813e+00 -1.1101314217592513e+00 + 4.9561735345179925e-01 1.3973547928692276e+00 -1.4256795681434031e+00 + 6.3328498702945613e-01 1.6525080228247548e+00 -1.7633721340871802e+00 + 7.7761729115791456e-01 1.8732884990296508e+00 -2.1262009444675747e+00 + 9.0684370260656133e-01 2.0451283050732081e+00 -2.5152772853155416e+00 + 9.9786960628923560e-01 2.1592613742977442e+00 -2.9303301941227242e+00 + 1.0403614268301558e+00 2.2116700732083334e+00 -3.3703304853525102e+00 + 1.0327376748735901e+00 2.1988594362437790e+00 -3.8275417575323578e+00 + 9.7771534448803465e-01 2.1201350367161558e+00 -4.2884487668465319e+00 + 8.7868341844076148e-01 1.9716672097326018e+00 -4.7395140002030605e+00 + 7.3454173204560347e-01 1.7421357885275817e+00 -5.1643739977655869e+00 + 5.3549426298512870e-01 1.4275685887848275e+00 -5.5322989291673430e+00 + 2.6653093295454400e-01 1.0628220330486164e+00 -5.7978761333272679e+00 + -7.6240701285963428e-02 6.9600819054398988e-01 -5.9384049161528010e+00 + -4.6346454735194875e-01 3.2120434860247904e-01 -5.9949950872817155e+00 + -7.5903396087985109e-01 -8.8128009086328674e-02 -6.1784613221690927e+00 + id 11424 + loc 1.1743482947349548e-01 3.7153199315071106e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1245289791911272e-01:2.3803699255674182e-01:5.2515825935900740e-01:3.8299031747854811e-01:1.0089971638038926e+00:3.2761783573335101e-01:1.5966432405216948e+00:2.5122861822844561e-01:2.0755757458195578e+00:4.1244877339013353e-01:2.7929286014509729e+00:4.0223608454903376e-01:3.4060875934872397e+00:3.3749165300080758e-01:3.9854587363585425e+00 + CVs 20 + -1.2857876203139432e-01 3.2033686624008811e-01 -1.8918976363776357e-01 + -2.6427808736771813e-01 6.7742731740359652e-01 -3.2258395301278198e-01 + -3.9620357291254849e-01 1.0350898020346921e+00 -4.3150879384717095e-01 + -5.3776896800106022e-01 1.3762300825516036e+00 -5.3400866483620502e-01 + -7.0287885528223892e-01 1.6864577062328405e+00 -6.3996742300716758e-01 + -8.9123587516817915e-01 1.9477073457475536e+00 -7.5589046464924114e-01 + -1.0888923104085937e+00 2.1427862493973091e+00 -8.8272615935392651e-01 + -1.2772922878068449e+00 2.2646152560448622e+00 -1.0152234789138537e+00 + -1.4553606705166817e+00 2.3216722099761711e+00 -1.1584133738622882e+00 + -1.6349336471018157e+00 2.3107747010619635e+00 -1.3381130584263614e+00 + -1.8107721453620627e+00 2.2178666856363516e+00 -1.5598107236065584e+00 + -1.9684628343292645e+00 2.0463977432613705e+00 -1.7954345856173319e+00 + -2.1048526293431533e+00 1.8095962789909750e+00 -1.9957430208899025e+00 + -2.2334496744847545e+00 1.4952265601877062e+00 -2.1161262215103265e+00 + -2.3468579440420099e+00 1.0641548816197322e+00 -2.1635168309408499e+00 + -2.3917310042891913e+00 5.0664530498661242e-01 -2.2292638995859480e+00 + -2.3261945268640547e+00 -1.0639598474588674e-01 -2.4421818441678176e+00 + -2.1847950419250139e+00 -6.3410912688003451e-01 -2.8505517446363133e+00 + -2.0718322645989904e+00 -9.9531972118201084e-01 -3.2617960713561569e+00 + id 11425 + loc 5.9606790542602539e-01 8.4802582859992981e-02 1076 + blend 0.0000000000000000e+00 + interp 5.7091589694338918e-01:3.4973155118344046e-01:3.4320543540669035e-01:2.9422833067895915e-01:1.0473032453955500e+00:4.2807020525498701e-01:1.9731129111559302e+00:5.7091018778441982e-01:2.2473327797239229e+00:3.8614720272609060e-01:3.0134637834026439e+00:3.3206372377018789e-01:3.9611842339084400e+00 + CVs 20 + -1.7475837724570295e-01 3.9597296026358875e-01 1.5083571489411701e-01 + -3.4830366870695084e-01 7.9451984372968254e-01 3.2543164634518740e-01 + -5.2085194695091075e-01 1.1846228307790134e+00 5.3471771668780321e-01 + -6.8751219488735615e-01 1.5534367129045075e+00 7.9066143738458816e-01 + -8.5040597370276827e-01 1.8886892668463300e+00 1.1010124805453056e+00 + -1.0318045999224181e+00 2.1768439194390017e+00 1.4600522395064259e+00 + -1.2598788606625342e+00 2.3996712394878701e+00 1.8435102296622841e+00 + -1.5429140100174015e+00 2.5403756259599253e+00 2.2192266851212246e+00 + -1.8667480623324655e+00 2.5885955799890956e+00 2.5652499578446197e+00 + -2.1961269777724559e+00 2.5373758977314722e+00 2.8437043929996637e+00 + -2.4839590830308631e+00 2.4068453662600184e+00 3.0121601361252677e+00 + -2.7583869520968287e+00 2.1969202741873777e+00 3.1220924544797759e+00 + -2.9910416079645148e+00 1.9112987075299031e+00 3.1910403470804281e+00 + -3.1287014091068222e+00 1.6035408969837859e+00 3.2074657114434548e+00 + -3.1850916209159039e+00 1.2942594186430938e+00 3.1832912090692376e+00 + -3.2087013651030638e+00 9.3153739265616720e-01 3.1406957415542784e+00 + -3.1438151258947373e+00 4.2118855707849046e-01 3.0730569415423727e+00 + -2.8497831291745483e+00 5.4475231180597161e-02 2.9808895681831284e+00 + -2.5742146169751945e+00 1.2956484726994377e-01 2.9414166784755138e+00 + id 11426 + loc 5.7412284612655640e-01 8.9408403635025024e-01 1047 + blend 0.0000000000000000e+00 + interp 4.3360811549908901e-01:3.8497793560986726e-01:6.8200568324860988e-04:4.0903476121695576e-01:8.6017602298564488e-01:2.8662964082818315e-01:1.1424983223621161e+00:4.3360377941793404e-01:1.9451529399819183e+00:4.1880393305278912e-01:2.2648287520036949e+00:4.3062595716556828e-01:3.0103018914848034e+00:2.9682178213379223e-01:3.4749372846749687e+00 + CVs 20 + 2.9128818227131004e-01 7.3273531524048308e-01 -5.5222984387620477e-01 + 5.8201760446791317e-01 1.4313267365030857e+00 -1.0473846105207540e+00 + 9.0302597466074908e-01 2.1175828893104174e+00 -1.4422558286772489e+00 + 1.2951135471523232e+00 2.7699755632930652e+00 -1.6296185694359746e+00 + 1.7447572398641782e+00 3.3080391696556011e+00 -1.5080890012878037e+00 + 2.1639162353079797e+00 3.6594253842183955e+00 -1.1010830454670406e+00 + 2.4646838416034687e+00 3.7995591812638150e+00 -5.0933179243139248e-01 + 2.6039590494410652e+00 3.7438278884907481e+00 1.6896321233430411e-01 + 2.5829858979891331e+00 3.5162586889674792e+00 8.6898110735597700e-01 + 2.4227083755179506e+00 3.1235430453106723e+00 1.5345506377046965e+00 + 2.1586122948495627e+00 2.5868073745611060e+00 2.0973154398798530e+00 + 1.8426007409891023e+00 1.9852471187059064e+00 2.5158562260986255e+00 + 1.5143779502895505e+00 1.4031095800470048e+00 2.8438588342030915e+00 + 1.2163344404137271e+00 9.1261903072726347e-01 3.1916621273603432e+00 + 1.0824031358022688e+00 6.5364440257006295e-01 3.6085729519752343e+00 + 1.1900411319204478e+00 6.7295852714169424e-01 4.0300842698352639e+00 + 1.4904733337992766e+00 8.9585362446925698e-01 4.4392825368209561e+00 + 1.9514830040820250e+00 1.2923628706458439e+00 4.8260453985699012e+00 + 2.5175927961703235e+00 1.7932929136262834e+00 5.3187660914128099e+00 + id 11427 + loc 2.4829535186290741e-01 4.9636715650558472e-01 1077 + blend 0.0000000000000000e+00 + interp 4.6443138634133396e-01:3.7591434660704226e-01:1.7076092768901108e-01:4.0301871138646539e-01:1.0051320629909368e+00:3.7963839276517763e-01:1.7816934396374644e+00:4.6442674202747058e-01:2.4333199472660945e+00:3.7327057348823739e-01:3.0808396222978658e+00:4.4030723760713092e-01:3.7889528221151472e+00 + CVs 20 + -5.6838518015378356e-02 3.9351268523668242e-01 -2.6863767576531128e-01 + -1.4642788272673701e-01 7.9635090868861558e-01 -5.2873848090981279e-01 + -2.7967720842831945e-01 1.1691356176780858e+00 -8.0925044606614116e-01 + -4.6210666597081462e-01 1.4884793747017175e+00 -1.1157972855870653e+00 + -6.8348433964162836e-01 1.7298311334859360e+00 -1.4429902136922046e+00 + -9.1972960444146579e-01 1.8754464493719087e+00 -1.7816226234445247e+00 + -1.1458818334613228e+00 1.9269309252792235e+00 -2.1184679038559362e+00 + -1.3479285193964234e+00 1.9033637713244020e+00 -2.4405928895903748e+00 + -1.5275228036381492e+00 1.8284179941226177e+00 -2.7408309854397168e+00 + -1.7034436061163143e+00 1.7195454157771874e+00 -3.0208556907835313e+00 + -1.8981965164104024e+00 1.5805360855040289e+00 -3.2861752226864880e+00 + -2.1214681228338894e+00 1.4039017489738044e+00 -3.5362749084559657e+00 + -2.3766596650149667e+00 1.1752428056925033e+00 -3.7642583077522382e+00 + -2.6733115314907927e+00 8.7398524421297075e-01 -3.9552840420132389e+00 + -3.0279840626902943e+00 4.7837707910411087e-01 -4.0718528664170943e+00 + -3.4445989170365898e+00 1.3268050678100884e-02 -4.0449756431048653e+00 + -3.8875807662446942e+00 -3.8204122592840006e-01 -3.8535167806994446e+00 + -4.2958134824746095e+00 -5.8339490688213180e-01 -3.6009642858699333e+00 + -4.5038478776305313e+00 -5.5707587988167173e-01 -3.5215026594911745e+00 + id 11428 + loc 8.5650071501731873e-02 9.1866981983184814e-01 410 + blend 0.0000000000000000e+00 + interp 5.1908744656975159e-01:3.3559131587819568e-01:3.1352666167406273e-01:4.6934433206508347e-01:8.6324914138697262e-01:5.1908225569528588e-01:1.7002500960096061e+00:3.8010101408990615e-01:2.0099382296165471e+00:4.1802650158333621e-01:2.6896167038409340e+00:4.3245234961166840e-01:3.0539146093276832e+00:4.3250148923177373e-01:3.8093607287533793e+00 + CVs 20 + 4.2155125885198408e-01 1.2215517883484092e-01 -1.1660647841765789e-01 + 7.4891284623190646e-01 1.6504754532269655e-01 -2.4670744510292372e-01 + 1.0621921358776532e+00 1.7981622410832848e-01 -3.7364721796509870e-01 + 1.3937610714319411e+00 1.8663765023747481e-01 -4.8943334497742008e-01 + 1.7393854230638550e+00 1.8454698833208949e-01 -5.9011598692985423e-01 + 2.0958934723768259e+00 1.7458436640799346e-01 -6.7176179586549145e-01 + 2.4596790597116276e+00 1.5954485998739554e-01 -7.2901761071922300e-01 + 2.8261436929048687e+00 1.4244355176436319e-01 -7.5845033564366049e-01 + 3.1911138312621521e+00 1.2625493595179660e-01 -7.5881145604525702e-01 + 3.5489607357868462e+00 1.1390567602333479e-01 -7.3025597148507870e-01 + 3.8819425619985930e+00 1.0640578137282941e-01 -6.8315341027113075e-01 + 4.1532334181859616e+00 1.0280593803396432e-01 -6.5185630394357486e-01 + 4.3387780993957215e+00 1.0944428762024616e-01 -6.6589632696487389e-01 + 4.4757868666722667e+00 1.3397749384556756e-01 -7.0511250271096981e-01 + 4.6228736405424531e+00 1.6688614308815053e-01 -7.4386873704168144e-01 + 4.7881402387635568e+00 2.0318612185256302e-01 -7.7934382924477585e-01 + 4.9555760956186568e+00 2.4811671909837485e-01 -8.0895177187646483e-01 + 5.1232929448946694e+00 2.9928054936393145e-01 -8.2997859985690703e-01 + 5.3456260882338134e+00 2.8620191136079942e-01 -8.9662012768412569e-01 + id 11429 + loc 6.3188987970352173e-01 1.0606260597705841e-01 1053 + blend 0.0000000000000000e+00 + interp 5.2167073469891778e-01:3.0857473727667778e-01:6.7420172476475537e-01:4.1480661529392387e-01:1.0220941585934462e+00:5.2166551799157079e-01:1.2769999148339279e+00:4.5053078181041800e-01:2.0474994845226111e+00:2.7540084406293108e-01:3.1160829414741795e+00:4.2317599982434478e-01:3.7630814044241983e+00 + CVs 20 + 1.4025746120115484e-01 4.0586521583443025e-01 -1.1677002808566017e-01 + 2.7924683773785286e-01 7.9915841919161990e-01 -2.0473599981907584e-01 + 4.4337161749171311e-01 1.2076042914618299e+00 -2.8639422521774599e-01 + 6.7091011793369337e-01 1.6386127531404118e+00 -3.8196276800363393e-01 + 1.0023452842559930e+00 2.0599224617416643e+00 -5.0643126751618073e-01 + 1.4545517103797732e+00 2.4171777262319210e+00 -6.6429679979222800e-01 + 2.0144385365091382e+00 2.6554491544296384e+00 -8.4085282833450092e-01 + 2.6495020729532137e+00 2.7325932902233769e+00 -1.0002226974861070e+00 + 3.3189747919280839e+00 2.6226098271710567e+00 -1.0935771320138392e+00 + 3.9631699684554320e+00 2.3035697758333229e+00 -1.0785834517336170e+00 + 4.4811024426902852e+00 1.7692155382520494e+00 -9.3592478422653280e-01 + 4.7550132910016378e+00 1.0726418474515742e+00 -6.9478782116203330e-01 + 4.7356544895490904e+00 3.5228780632775603e-01 -4.0919257244182106e-01 + 4.5287284069999227e+00 -2.2485997579117090e-01 -7.9791306180528210e-02 + 4.2945310846464331e+00 -5.8411957920749635e-01 3.4524638982981215e-01 + 4.1090675279139486e+00 -6.7650984658564917e-01 8.7972075143118333e-01 + 4.0203858970097759e+00 -4.5633694777363287e-01 1.4237519323501056e+00 + 4.0235431853745318e+00 -9.6943484085211029e-02 1.8705461580203009e+00 + 3.9668960709639109e+00 1.2554363105750910e-01 2.3703734445765026e+00 + id 11430 + loc 3.8169831037521362e-01 8.0384427309036255e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0367101508401591e-01:3.8491509362178528e-01:8.6521643820543248e-01:5.0366597837386506e-01:1.1121234488409391e+00:3.8395357663479190e-01:1.8310553164758749e+00:3.0207117823718049e-01:2.7778327302718444e+00:3.9756440926643627e-01:3.2099865922853437e+00:3.7211600864422023e-01:3.9994185757167378e+00 + CVs 20 + -2.8888678973605819e-01 3.2867754054389520e-01 2.7456850897264512e-01 + -5.1739265199514795e-01 6.0956873642609621e-01 5.1380040326044729e-01 + -6.9199907429460339e-01 8.8648159810820248e-01 7.8445750305819362e-01 + -8.6518454014858071e-01 1.1899279724772469e+00 1.0665672481130928e+00 + -1.1071792381369359e+00 1.5157895785204532e+00 1.2685558478484378e+00 + -1.4327185229605848e+00 1.8225926758634343e+00 1.3220557617476962e+00 + -1.7978414713537700e+00 2.0612814340792682e+00 1.2055314455419137e+00 + -2.1168937496461728e+00 2.1981709571406838e+00 9.1074968136449663e-01 + -2.2684125722236033e+00 2.2168962089442115e+00 4.7774885045898419e-01 + -2.2155262276650314e+00 2.1472357252603143e+00 3.4745763120155981e-02 + -2.0169853839658698e+00 2.0151104288691171e+00 -3.6116266239860684e-01 + -1.6981527430996626e+00 1.8037134603879756e+00 -6.9006645298263147e-01 + -1.3316206320902058e+00 1.5478209848350148e+00 -9.2542154042432589e-01 + -1.0469323610848997e+00 1.3570433429069357e+00 -1.1342132727750169e+00 + -9.3084843826455810e-01 1.3431936465392615e+00 -1.3679074714744184e+00 + -1.0172481052337636e+00 1.6165115054779118e+00 -1.4868080375384707e+00 + -1.2321455303020279e+00 2.1486954315586577e+00 -1.0315869888904530e+00 + -1.2257312997478720e+00 2.3201382571511977e+00 -2.5623612683150498e-01 + -1.2614938333755876e+00 2.5417358363018141e+00 -3.5424616329179370e-01 + id 11431 + loc 9.6834301948547363e-01 9.3258279561996460e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7415521169423841e-01:3.7449905402886657e-01:2.6298306685319217e-01:2.9182424851455696e-01:9.7871959230813754e-01:2.8027757089901367e-01:1.5929942830864934e+00:2.8083941867359735e-01:2.1423565921227796e+00:4.7415047014212147e-01:2.8918764371945538e+00:4.4698239858243094e-01:3.1351437337024994e+00:2.9099233803925956e-01:3.7602307361343428e+00:2.5369498799269602e-01:3.9405742033028317e+00 + CVs 20 + 1.9569504631226403e-01 3.4730217812685660e-01 -3.9040288629250186e-02 + 4.1110373073964401e-01 6.9859815526280744e-01 -1.3085210029859023e-01 + 6.5402743103630345e-01 1.0504445460961209e+00 -2.4990761617877832e-01 + 9.3184917115923971e-01 1.3988434059648545e+00 -3.8112524295221945e-01 + 1.2460533006983323e+00 1.7379921273266821e+00 -5.2737855624745933e-01 + 1.5856360828252465e+00 2.0567078322120871e+00 -7.1188478140700062e-01 + 1.9258846608458136e+00 2.3282925081567623e+00 -9.7194362761502506e-01 + 2.2308750446026755e+00 2.4917608129541633e+00 -1.3258263727554480e+00 + 2.4571411198852133e+00 2.4701017434235406e+00 -1.7340737149413545e+00 + 2.5929638615374793e+00 2.2614963724333306e+00 -2.1115797357779220e+00 + 2.6777551372913919e+00 1.9351728429958994e+00 -2.4168250934118793e+00 + 2.7680029018039396e+00 1.5651535651795043e+00 -2.6598306529370661e+00 + 2.9059425380523605e+00 1.2211613699617736e+00 -2.8757268147368529e+00 + 3.0920412512434763e+00 9.6717478361139053e-01 -3.1031218058606731e+00 + 3.2895612699162005e+00 8.6586942257191257e-01 -3.3475208500839662e+00 + 3.4357651655794337e+00 9.5575304204234235e-01 -3.5270048712305511e+00 + 3.4631976511103093e+00 1.1380162891228658e+00 -3.5029644943225486e+00 + 3.4280769935368931e+00 1.2132258902492161e+00 -3.3790382124970075e+00 + 3.4604688586700623e+00 1.4799104841464339e+00 -3.4592408233995928e+00 + id 11432 + loc 9.0737766027450562e-01 7.5313347578048706e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2055322903092673e-01:4.1104217803968290e-01:1.1055351280550307e-01:4.2054902349863643e-01:8.1331234189623347e-01:3.3377082804604025e-01:1.2906200836874520e+00:3.6553103117994429e-01:2.1201793066940220e+00:3.8289835904014546e-01:2.9826531071981606e+00:3.6653733091788460e-01:3.7593629568767710e+00 + CVs 20 + 1.6389646115004441e-01 2.4022732980243083e-01 -3.3457970145618809e-01 + 3.2232016635502952e-01 4.5842409687376351e-01 -6.3365600315585402e-01 + 4.7615239070057935e-01 6.5379084603205895e-01 -9.3632678649137502e-01 + 6.2410585155992149e-01 8.2501274064915686e-01 -1.2602557299870949e+00 + 7.6211937151720743e-01 9.7146502475101237e-01 -1.6077099075520613e+00 + 8.8260000106149561e-01 1.0945599160351409e+00 -1.9772583113459601e+00 + 9.7780572002571275e-01 1.1938313060255628e+00 -2.3625544657433699e+00 + 1.0479119496188372e+00 1.2623841841593393e+00 -2.7484301616752380e+00 + 1.1029318769944783e+00 1.2900803134240890e+00 -3.1132182540811755e+00 + 1.1546152389145976e+00 1.2728543910656422e+00 -3.4331750448896186e+00 + 1.2108232470769842e+00 1.2192446822644976e+00 -3.6910724910266191e+00 + 1.2768105762869926e+00 1.1482977763689273e+00 -3.8840435834170712e+00 + 1.3554831785801118e+00 1.0815364292389664e+00 -4.0226116024666725e+00 + 1.4481782955861426e+00 1.0311355299776039e+00 -4.1290937074726362e+00 + 1.5688452551457444e+00 9.9648714137709227e-01 -4.2257774421744356e+00 + 1.7560983274001509e+00 9.6588202291008540e-01 -4.3320301085754096e+00 + 2.0472772393586909e+00 8.9937912285231236e-01 -4.4735532660211064e+00 + 2.3866277242801375e+00 7.3541818975766715e-01 -4.6614843118980964e+00 + 2.4932529387679465e+00 4.7775554975823908e-01 -4.7543409323300230e+00 + id 11433 + loc 1.3814340531826019e-01 8.2599270343780518e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0492815458152825e-01:4.0269931492816724e-01:9.0402525524280186e-04:3.6226450066231064e-01:7.1362127903228534e-01:2.8322627772574421e-01:1.3322800943498452e+00:3.3464270825682824e-01:2.0488391198339442e+00:4.0492410529998246e-01:2.9911648442815215e+00:2.7499541714523046e-01:3.5569764475045504e+00 + CVs 20 + 2.1824663588653931e-01 3.6291573128567722e-01 -1.7436107549827123e-01 + 4.4848918740815213e-01 7.1563978660000116e-01 -3.6967100182468693e-01 + 6.8827063418891454e-01 1.0565837383935579e+00 -5.6646070894130851e-01 + 9.3538670997678641e-01 1.3848926636455092e+00 -7.5295087642414105e-01 + 1.1851854095680641e+00 1.6982893597630542e+00 -9.3119571595251915e-01 + 1.4280886281923608e+00 1.9906327575632494e+00 -1.1243236277706949e+00 + 1.6528162879981765e+00 2.2498241198378852e+00 -1.3684478808916385e+00 + 1.8466081354517658e+00 2.4440803767006036e+00 -1.6874769145101951e+00 + 1.9960882396333808e+00 2.5211513612043328e+00 -2.0838748936856186e+00 + 2.0912907662185418e+00 2.4403971451225117e+00 -2.5348810130180279e+00 + 2.1390027928778759e+00 2.2022003376647041e+00 -2.9987663030832783e+00 + 2.1784278524439138e+00 1.8476531785137831e+00 -3.4440015925481338e+00 + 2.2667050091703151e+00 1.4569378842191967e+00 -3.8695859512730069e+00 + 2.4264796308792027e+00 1.1621004371388355e+00 -4.2950978493300713e+00 + 2.6040774660457124e+00 1.1305055385202758e+00 -4.6993105693788717e+00 + 2.6821045100696113e+00 1.4585471889588899e+00 -4.9160940147637939e+00 + 2.5448786423347012e+00 1.9571946298430403e+00 -4.6717939149822607e+00 + 2.3586305121286575e+00 2.2783809454731609e+00 -4.2954675283642851e+00 + 2.4213499125743017e+00 2.8306334192527944e+00 -4.5307080199218248e+00 + id 11434 + loc 2.7364995330572128e-02 3.0623033642768860e-02 1077 + blend 0.0000000000000000e+00 + interp 5.1401969974184913e-01:5.1401455954485176e-01:4.0613678573272471e-03:2.2829024852596355e-01:9.9999886330649113e-01:3.9442576306726468e-01:1.5451121571410087e+00:3.1059463688922850e-01:2.0192098030361350e+00:3.3512728696871719e-01:3.0000430196771282e+00:3.9735068283224584e-01:3.6739692956274568e+00 + CVs 20 + -2.4337256019820702e-02 4.0344304821338511e-01 2.1389517941267033e-02 + -1.1019421969730109e-01 7.7069361051327290e-01 3.5084593498432848e-03 + -2.4070162018973018e-01 1.0992887616599503e+00 -4.6208821715437387e-02 + -4.0567558885348282e-01 1.3727694515995357e+00 -1.2487061675622640e-01 + -5.9288558565594651e-01 1.5681818353156056e+00 -2.2762073768440555e-01 + -7.7953860201375402e-01 1.6710679744177006e+00 -3.3991321474265657e-01 + -9.4132293100141529e-01 1.6862339446498595e+00 -4.4072075705085773e-01 + -1.0664667368194942e+00 1.6384544544230422e+00 -5.1252147626670408e-01 + -1.1590165759113014e+00 1.5577615270413356e+00 -5.4951931709104407e-01 + -1.2311009677591276e+00 1.4653133038125172e+00 -5.5937776193667077e-01 + -1.2890768405626487e+00 1.3742449171287243e+00 -5.5073855598961863e-01 + -1.3312288476139695e+00 1.3033144053032397e+00 -5.2621747787648432e-01 + -1.3536548768642520e+00 1.2774084210963246e+00 -4.9595382483855416e-01 + -1.3519992597113539e+00 1.3144686917899191e+00 -4.9142251955806748e-01 + -1.3232212934220964e+00 1.4103033460754961e+00 -5.6591315112848806e-01 + -1.2839576923987286e+00 1.4723767729938855e+00 -7.3791261198647262e-01 + -1.2495461542647222e+00 1.3752810512977212e+00 -9.1148711995720610e-01 + -1.2490601629301183e+00 1.1398716372980551e+00 -9.6969750215300543e-01 + -1.4308707729273336e+00 1.1499945262223408e+00 -7.9550742830730903e-01 + id 11435 + loc 9.2636746168136597e-01 8.4371960163116455e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0254884815102282e-01:4.0254482266254132e-01:5.9655344535696209e-01:3.9012068165832919e-01:1.1154587559191618e+00:3.0289342488555721e-01:1.8851124391062859e+00:2.9347026589623099e-01:2.7505506101449679e+00:2.5394568370071763e-01:3.3028035964789693e+00:3.9446383340912561e-01:3.9836026369315425e+00 + CVs 20 + -2.7930105431636304e-01 2.4507703239724538e-01 5.9042993224397919e-02 + -5.3048893730577684e-01 4.7979985896229749e-01 1.3832627723946073e-01 + -7.5026207815409596e-01 7.1740210972722451e-01 2.5210885773751246e-01 + -9.5660039417625065e-01 9.5736999189334249e-01 3.7486730056999190e-01 + -1.1802992836966690e+00 1.1854831680783988e+00 4.5373261374173279e-01 + -1.4360528570966828e+00 1.3813735489778010e+00 4.6080738906652541e-01 + -1.7260521784786613e+00 1.5314295394830564e+00 3.9478112058059622e-01 + -2.0509898380653881e+00 1.6211020460225043e+00 2.3735513227883986e-01 + -2.3642173976242988e+00 1.6240956275083471e+00 -3.4204452918807027e-02 + -2.5825416599699551e+00 1.5403793208041980e+00 -3.7630190554062826e-01 + -2.6923002891516647e+00 1.4078489737661097e+00 -7.3084029522522731e-01 + -2.7185502178578478e+00 1.2510870139641961e+00 -1.0867013511520469e+00 + -2.6715485559545686e+00 1.0837020699957192e+00 -1.4015886979160923e+00 + -2.5834465581002464e+00 9.5482183695526079e-01 -1.5683479394732247e+00 + -2.4846067774458773e+00 8.8991975025410630e-01 -1.5239211694605466e+00 + -2.3420455473660344e+00 7.7115274880408879e-01 -1.2793010597350074e+00 + -2.0944857102330663e+00 3.7362159230180425e-01 -9.6359634460603127e-01 + -1.8471847212227108e+00 -1.3548234190439756e-01 -9.5517656767517045e-01 + -1.8876680299277431e+00 -5.2195481985419151e-02 -1.1117492724214222e+00 + id 11436 + loc 7.4074518680572510e-01 6.6888356208801270e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7665970455441625e-01:4.2295723116351164e-01:4.0124924012606700e-03:4.3860668135172681e-01:8.6671439004281836e-01:4.7665493795737074e-01:1.2508966375039701e+00:3.8784093435016254e-01:1.9998617519305857e+00:3.5786996069132410e-01:2.7549450722247801e+00:2.8305631301704659e-01:3.5319779777454356e+00 + CVs 20 + -3.7728462033685933e-02 4.2041665820068397e-01 2.4358029052506111e-01 + -1.3768129762111608e-01 7.8854863126553254e-01 4.6301838653316707e-01 + -2.7502890474845576e-01 1.1191115249484513e+00 6.7604716267635867e-01 + -4.4172883537296848e-01 1.4099658950406617e+00 8.8638748877854978e-01 + -6.3585815238809240e-01 1.6458673313440948e+00 1.0849890141912091e+00 + -8.4359212999136080e-01 1.8130074250794601e+00 1.2593406698736116e+00 + -1.0376438757152906e+00 1.9054232416037049e+00 1.3964811961237451e+00 + -1.1862779145194984e+00 1.9364788323207840e+00 1.4909981296820143e+00 + -1.2785706893390674e+00 1.9392263470698703e+00 1.5526743088534158e+00 + -1.3326556800108538e+00 1.9459053771255457e+00 1.5985027072328433e+00 + -1.3839812923892312e+00 1.9602187794362844e+00 1.6368379125446579e+00 + -1.4537762843847242e+00 1.9436245628011890e+00 1.6513621414003827e+00 + -1.5197775002710256e+00 1.8602196114656790e+00 1.6235982207565036e+00 + -1.5314069040531866e+00 1.6855363168241813e+00 1.5444741053364348e+00 + -1.4648618324503950e+00 1.4336143787922395e+00 1.4040702451443989e+00 + -1.3744844102722660e+00 1.1705000112786250e+00 1.2100274404727807e+00 + -1.3244464131943889e+00 9.5745514796233389e-01 1.0026088473636250e+00 + -1.3319187446293677e+00 8.3926412934930061e-01 7.7249654139516366e-01 + -1.4258689634792401e+00 1.0077149478990306e+00 3.5224045607809706e-01 + id 11437 + loc 5.3091555833816528e-01 3.0945378541946411e-01 410 + blend 0.0000000000000000e+00 + interp 4.7369714143406411e-01:4.1770979549792780e-01:4.1630844665188182e-02:4.5615770532856026e-01:6.6464117968339720e-01:3.9411149340287244e-01:1.0014684849043638e+00:4.0435506289442613e-01:1.9345145837959679e+00:3.4138971333679979e-01:2.5721827805262842e+00:4.0903881183642277e-01:3.1170738011818822e+00:4.7369240446264976e-01:3.7254715852981937e+00 + CVs 20 + -3.6811229622560765e-01 1.8083834990350683e-01 1.2527511498623939e-01 + -6.9689345019072768e-01 3.4956303691966406e-01 2.6993115119006206e-01 + -1.0301567249209898e+00 5.4678276691983851e-01 4.1479049560074621e-01 + -1.3697236018847674e+00 7.7418421764300471e-01 5.5211094270718652e-01 + -1.6935855951275562e+00 1.0052396522559848e+00 6.9491549576384726e-01 + -1.9915889549550743e+00 1.2037411230863568e+00 8.5472049969038399e-01 + -2.2777433574585189e+00 1.3371265607917964e+00 1.0568527406345756e+00 + -2.5711925035187937e+00 1.3846945123530605e+00 1.3431304835334061e+00 + -2.8758217093177048e+00 1.3288677466315968e+00 1.7244011736245921e+00 + -3.1876798103559354e+00 1.1414968674593622e+00 2.1629777381793271e+00 + -3.4918633506929284e+00 8.0495691301098016e-01 2.6033624987287265e+00 + -3.7629929655269807e+00 3.8096169275810454e-01 3.0352367195472110e+00 + -3.9839902013735520e+00 -1.0439516963853812e-03 3.5044676898183651e+00 + -4.1425636195940569e+00 -2.2839910813631792e-01 4.0242748487205908e+00 + -4.2336906191301038e+00 -2.7447967054281097e-01 4.5458497462390888e+00 + -4.2904875661119783e+00 -2.3960648680310626e-01 5.0454834659234589e+00 + -4.3841953706188628e+00 -2.5619535241626301e-01 5.5710562330858373e+00 + -4.5556187206873275e+00 -3.5983651905563963e-01 6.1148140646661373e+00 + -4.7419135649367430e+00 -5.0587734998333445e-01 6.5734962517195887e+00 + id 11438 + loc 6.7932689189910889e-01 9.3387842178344727e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8395423924188880e-01:4.8394939969949641e-01:5.4107588931930906e-03:3.1023821485003805e-01:9.1028171245767209e-01:3.7919168650436741e-01:1.2900325057992834e+00:3.8723145729261993e-01:1.9565456017882672e+00:3.0626292980275988e-01:3.0002781301690269e+00:3.5858411230047688e-01:3.6131582676319565e+00 + CVs 20 + 3.0982909293846606e-01 2.6883807792063324e-01 -2.2624376808694835e-01 + 6.1278716357061802e-01 5.5006050295202447e-01 -4.0468455595300667e-01 + 9.0908640488876602e-01 8.2430304572111979e-01 -5.6824233406190972e-01 + 1.2007931787710329e+00 1.0824366712643252e+00 -7.3439369342820904e-01 + 1.4867855705266393e+00 1.3144228157487989e+00 -9.1931828295567586e-01 + 1.7640389996344903e+00 1.5103727839805514e+00 -1.1443364826009692e+00 + 2.0294155615629430e+00 1.6640674896992793e+00 -1.4230713520887899e+00 + 2.2806206790976189e+00 1.7739636022448870e+00 -1.7545737338396521e+00 + 2.5182009634395248e+00 1.8428348873485687e+00 -2.1261150176710739e+00 + 2.7467436902341684e+00 1.8756323612770596e+00 -2.5205527218275199e+00 + 2.9711529148141946e+00 1.8740553581769543e+00 -2.9247895995815369e+00 + 3.1930218079031825e+00 1.8329046784883158e+00 -3.3355072843100264e+00 + 3.4070949430188380e+00 1.7411525413750149e+00 -3.7575548650046002e+00 + 3.5970219690824372e+00 1.5908297892410252e+00 -4.1950881203683972e+00 + 3.7357897954382651e+00 1.3838339424872483e+00 -4.6460862143456891e+00 + 3.7918910235736707e+00 1.1365829481700287e+00 -5.1026246475460928e+00 + 3.7399782189451982e+00 8.7632116643101754e-01 -5.5538852072883635e+00 + 3.5880085513393261e+00 6.5955366121165682e-01 -5.9586080683300509e+00 + 3.4635421440916621e+00 6.3703826973471589e-01 -6.1602847502278211e+00 + id 11439 + loc 6.5369480848312378e-01 4.2864727973937988e-01 1047 + blend 0.0000000000000000e+00 + interp 2.8575656819183370e+00:3.7202225635186587e-01:3.6773539159934643e-01:6.5278085569593891e-01:4.3266890867502539e-01:9.0299165714021945e-01:4.3661018454716494e-01:2.8575556819183370e+00:2.2653809750538993e+00:9.0007242836140400e-01:2.2931668507829635e+00:4.1377669555682034e-01:2.4093517128931730e+00:3.1862101587725433e-01:2.9958201970234475e+00:3.7762886057217615e-01:3.6903834890172162e+00 + CVs 20 + -1.8167157282670748e-01 6.7064201395171841e-01 5.5715415221240572e-01 + -4.1466924424080509e-01 1.3307737705036238e+00 1.0855782530782954e+00 + -7.0709579873389916e-01 2.0026375395827030e+00 1.5629575144034575e+00 + -1.0982075631431409e+00 2.6611736963358172e+00 1.8535826691238664e+00 + -1.5910771215026140e+00 3.2083797835645775e+00 1.8066825332473477e+00 + -2.0968860271712124e+00 3.5297870223911518e+00 1.4335612964572904e+00 + -2.5069356065818846e+00 3.5679817786243837e+00 8.6737473058640280e-01 + -2.7641971569672488e+00 3.3462252704153981e+00 2.4780353491126816e-01 + -2.8581193236156417e+00 2.9378241287469420e+00 -3.1602441779170598e-01 + -2.8071383153051639e+00 2.4308010765688457e+00 -7.6706153253806786e-01 + -2.6351077451228107e+00 1.8768550904230390e+00 -1.1202877120627233e+00 + -2.3526712455855670e+00 1.2889990017895929e+00 -1.4216215717697758e+00 + -1.9731602858960633e+00 7.0660193249255887e-01 -1.7171762150680310e+00 + -1.5210606182837947e+00 1.7489127036317786e-01 -2.0597302161154896e+00 + -1.0467165666711422e+00 -2.8022914138960697e-01 -2.5548799695364921e+00 + -7.4589200984581594e-01 -4.6002759262739712e-01 -3.2923946281226755e+00 + -7.5984479779908942e-01 -2.2220348927109113e-01 -4.0452825272989186e+00 + -1.0175267069013010e+00 3.3725509661097064e-01 -4.5893362705539644e+00 + -1.4074466117046804e+00 1.0714620097716034e+00 -4.9090158768770138e+00 + id 11440 + loc 6.7712819576263428e-01 9.0704642236232758e-02 1074 + blend 0.0000000000000000e+00 + interp 5.6454889497288507e-01:2.7350926856575036e-01:8.6677074649078756e-01:5.6454324948393542e-01:1.8036179116089186e+00:5.4033034637643462e-01:2.3503175218213217e+00:3.7329999485963439e-01:2.8462480745023475e+00:2.6860465705305969e-01:3.2573798524323418e+00:3.5532587941917848e-01:3.9821588704145898e+00 + CVs 20 + -2.1096835990397442e-01 1.2310067282586840e-01 2.6886516990786441e-01 + -3.8683404058566756e-01 2.7060725473364616e-01 5.2355205607203747e-01 + -5.5154873913667091e-01 4.3158190646123090e-01 7.7965420531819618e-01 + -7.1544557887930593e-01 6.0209054206324208e-01 1.0452223198529440e+00 + -8.7227790295707830e-01 7.8157470020229503e-01 1.3172679858474747e+00 + -1.0148269421486791e+00 9.6861352903362263e-01 1.5965079998970959e+00 + -1.1363667587268078e+00 1.1621655501776800e+00 1.8882075500140783e+00 + -1.2325109811835184e+00 1.3607145375507324e+00 2.1961161351382890e+00 + -1.3040032648356259e+00 1.5603098817851215e+00 2.5214193131148162e+00 + -1.3607633702787707e+00 1.7523699674330366e+00 2.8643985063938509e+00 + -1.4166443209802089e+00 1.9242485753689031e+00 3.2273331651358079e+00 + -1.4842389559522200e+00 2.0584428466933571e+00 3.6120133061967148e+00 + -1.5704079947874907e+00 2.1352742641884030e+00 4.0144155432860931e+00 + -1.6744717314759803e+00 2.1361637799177382e+00 4.4218742156791517e+00 + -1.7972024507876481e+00 2.0557690181410027e+00 4.8088534149504349e+00 + -1.9527693136458313e+00 1.9119024997314100e+00 5.1443406164876517e+00 + -2.1517042322423858e+00 1.7200116900348572e+00 5.4188281825893503e+00 + -2.3410683862664921e+00 1.4629360187671463e+00 5.6442154882578937e+00 + -2.3393628897926484e+00 1.1625313830904416e+00 5.7609975831078586e+00 + id 11441 + loc 2.6500526070594788e-01 1.5099683403968811e-01 1077 + blend 0.0000000000000000e+00 + interp 3.7072862426706221e-01:3.1057695468009378e-01:4.8029544316753803e-01:3.1351328113353744e-01:1.0053276931278028e+00:2.6731965041221600e-01:1.7040228970095728e+00:3.1294112139320718e-01:2.2928757778323430e+00:2.7581196285844023e-01:3.0303346994190465e+00:3.7072491698081955e-01:3.6503333758747525e+00 + CVs 20 + -1.3772841966121716e-01 2.6894164635557782e-01 4.8926626510218250e-02 + -2.6916779191110413e-01 5.3277522440841030e-01 8.8619220752220479e-02 + -3.9594077217759893e-01 7.9376141273683287e-01 1.1420446083295221e-01 + -5.2162132701233943e-01 1.0545976524741780e+00 1.2219355646249924e-01 + -6.5565279321689962e-01 1.3177574524326277e+00 1.0796880246496648e-01 + -8.1080848767238001e-01 1.5833023671263149e+00 6.3976520718349472e-02 + -1.0000150149595022e+00 1.8427247390299035e+00 -2.0436549777253177e-02 + -1.2298866362903289e+00 2.0770418740873264e+00 -1.5642494824232789e-01 + -1.4937174245996943e+00 2.2627944890306591e+00 -3.5210203635160808e-01 + -1.7720911388096903e+00 2.3777440305215509e+00 -6.0959023083356390e-01 + -2.0486233263698335e+00 2.4069779686989499e+00 -9.1906881542369590e-01 + -2.3241120178520687e+00 2.3437948972770641e+00 -1.2595673921659691e+00 + -2.6060619633062085e+00 2.1825417880719682e+00 -1.6051283516002921e+00 + -2.8966971301588385e+00 1.9170599260104750e+00 -1.9216692133390161e+00 + -3.1973428745264960e+00 1.5536889274611965e+00 -2.1584251616874743e+00 + -3.5008880339192801e+00 1.1445143245175631e+00 -2.2394602699794501e+00 + -3.7887555939715076e+00 8.0198498057040157e-01 -2.1386030743624054e+00 + -4.0673496208893773e+00 6.2335161360495417e-01 -1.9258317847601965e+00 + -4.4485428332617509e+00 5.0064671619506229e-01 -1.5770496670500378e+00 + id 11442 + loc 2.7349737938493490e-03 2.0335884392261505e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2551572966867007e-01:2.8321461800772602e-01:4.1621427567305891e-01:4.2305888260104474e-01:9.9733601662631888e-01:4.2551147451137339e-01:1.4721794496998930e+00:3.1516880221523558e-01:2.1713887711573459e+00:2.0232787691713139e-01:2.9904911176475988e+00:3.2783224852498205e-01:3.3107891323366156e+00:4.0849509996913957e-01:3.9448209076733622e+00 + CVs 20 + -1.3167359741918513e-01 2.7286194498796901e-01 -2.2244290189227203e-02 + -2.9476321846768205e-01 5.9620451559077847e-01 -3.7428192956905360e-03 + -4.6379761103406369e-01 9.5724625689610221e-01 3.9361225474840111e-02 + -6.4446171320251933e-01 1.3428280356892224e+00 8.6234705504510845e-02 + -8.6270088465478389e-01 1.7418423277721233e+00 1.1161660366306425e-01 + -1.1370149627465456e+00 2.1348335217226664e+00 8.2331030159434881e-02 + -1.4749603833098770e+00 2.4888474733815427e+00 -5.2668767721683940e-02 + -1.8569973147558885e+00 2.7341207809566463e+00 -3.6591348786655775e-01 + -2.1968082999699923e+00 2.7704645821852312e+00 -8.5690009938286948e-01 + -2.4245941652130947e+00 2.5979984703236698e+00 -1.3994734902251995e+00 + -2.5625454453239715e+00 2.2628411143883662e+00 -1.9081049739097289e+00 + -2.6479294201444499e+00 1.7641597218718479e+00 -2.3072076799618895e+00 + -2.6944880037383703e+00 1.1459431990655558e+00 -2.5298647543563932e+00 + -2.6678245393540490e+00 5.1932889584153830e-01 -2.6813932893837507e+00 + -2.5326274358103009e+00 -2.7954714924044666e-02 -2.9524897111079653e+00 + -2.3345516784581060e+00 -3.6371838053183159e-01 -3.4233146022268617e+00 + -2.1927301507051209e+00 -3.7879119768671554e-01 -4.0073744562415978e+00 + -2.1612317975643944e+00 -2.2793698520492733e-01 -4.5262749926283155e+00 + -2.1264532698882230e+00 -3.3895550121228801e-01 -4.9717927891527554e+00 + id 11443 + loc 8.0322653055191040e-01 7.6707571744918823e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0254884815102282e-01:3.6054172612427066e-01:2.8920851161286143e-01:2.5894685977040788e-01:9.7961807742113161e-01:3.9214085400705956e-01:1.9782975970162056e+00:4.0254482266254132e-01:2.5921719159148884e+00:3.8600289255393838e-01:3.1205939228725885e+00:3.9846499112934125e-01:3.8588610071731817e+00 + CVs 20 + -2.8799941305236398e-01 2.0897705844275935e-01 1.1369117963494155e-01 + -5.4455164224674657e-01 3.9288084253559397e-01 2.1255341055385241e-01 + -7.7106264735141405e-01 5.7738429577068051e-01 3.3222379083835241e-01 + -9.7251280174795818e-01 7.6983521936610333e-01 4.7723790767982976e-01 + -1.1744288794036368e+00 9.6370168689874813e-01 6.0136877675070644e-01 + -1.4034305068934037e+00 1.1426680667147358e+00 6.5818765818901059e-01 + -1.6659130593878542e+00 1.2832439385555887e+00 6.3751009252837265e-01 + -1.9588641561153031e+00 1.3624506535303860e+00 5.3497868005789617e-01 + -2.2404464404933093e+00 1.3551316727651785e+00 3.3478330148623048e-01 + -2.4215336672141303e+00 1.2521928316295605e+00 6.0033130580885663e-02 + -2.4626766599247127e+00 1.0828279001390533e+00 -2.1996583980035345e-01 + -2.3931189781649458e+00 8.8572505876897378e-01 -4.4810871582889955e-01 + -2.2499382946800854e+00 6.8496560256837591e-01 -5.8595107830080451e-01 + -2.0401613432098529e+00 4.5945427171040470e-01 -6.5011950882389968e-01 + -1.7545111905059805e+00 1.5671593743302614e-01 -7.3393567443533458e-01 + -1.4359271944286531e+00 -2.1933419409515792e-01 -9.9249088643819672e-01 + -1.1857107676030623e+00 -5.2156945450730308e-01 -1.5935055913770690e+00 + -1.1564159409790662e+00 -4.2374285659247291e-01 -2.4332374838804443e+00 + -1.0778439071622681e+00 -3.7497824080541919e-01 -2.8051660338594027e+00 + id 11444 + loc 3.6167910695075989e-01 7.1477693319320679e-01 410 + blend 0.0000000000000000e+00 + interp 4.3063273414973374e-01:3.9127881791741492e-01:8.2060294868939843e-02:3.3745558119819868e-01:9.5279353713177406e-01:4.2817046021760247e-01:1.2521756867443838e+00:3.6473685791450700e-01:1.8580298921211613e+00:3.5529153930448720e-01:2.2478877060753839e+00:3.4555129793214551e-01:3.0182435927780431e+00:4.3062842782239225e-01:3.6730007728389769e+00 + CVs 20 + 3.4386448624072330e-01 1.3806776319788627e-01 -1.5146737177872394e-01 + 6.2573600034611965e-01 2.4443691824158181e-01 -2.9065580925397094e-01 + 8.9562526123267205e-01 3.4100231548618321e-01 -4.2331821039386242e-01 + 1.1803933339272890e+00 4.4162031348338443e-01 -5.5277046245948602e-01 + 1.4773869102625308e+00 5.4540150586170277e-01 -6.7749483554376710e-01 + 1.7834554346132179e+00 6.5129899629938404e-01 -7.9319190518482496e-01 + 2.0959512850535251e+00 7.5851177776907386e-01 -8.9094636846846698e-01 + 2.4123945385916006e+00 8.6580893531787728e-01 -9.6019011020592870e-01 + 2.7292423830471408e+00 9.7162797529763945e-01 -9.9223583948089944e-01 + 3.0403962695589746e+00 1.0755219180153532e+00 -9.8153046925631182e-01 + 3.3411126100146791e+00 1.1771988670014548e+00 -9.2879327081059848e-01 + 3.6448172978746545e+00 1.2685499829201272e+00 -8.4732197129667319e-01 + 3.9854065122862137e+00 1.3277815825531347e+00 -7.6466629438319822e-01 + 4.3745485269349720e+00 1.3342596987278221e+00 -7.1582445105016035e-01 + 4.7880411724181702e+00 1.2883556351207590e+00 -7.2403250009525599e-01 + 5.1997951759096601e+00 1.2024790017863258e+00 -7.9601051602996642e-01 + 5.5878581253885784e+00 1.0923271822262373e+00 -9.3456664591827443e-01 + 5.9310778630233045e+00 9.8035432582010262e-01 -1.1333492057559371e+00 + 6.2084359230387562e+00 9.5976578245421651e-01 -1.2696685688551759e+00 + id 11445 + loc 1.3273607194423676e-01 1.7223073542118073e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0484358516066377e-01:2.8483763951890140e-01:2.7013132435204557e-01:4.0483953672481215e-01:1.2057752760623406e+00:2.5464735907413466e-01:1.9852440731762619e+00:3.9976980857111005e-01:2.3339426035812991e+00:3.0206145412538726e-01:3.0768261448869243e+00 + CVs 20 + -1.5377707658665879e-01 4.7329187671874640e-01 -1.6292936749863252e-01 + -3.1324069596346399e-01 9.6151871886651086e-01 -3.0104303608220101e-01 + -4.5638150934378624e-01 1.4615364003598132e+00 -3.8570810441939596e-01 + -5.5004653783616242e-01 1.9581451809850359e+00 -3.9954668925738152e-01 + -6.2596177968323929e-01 2.4480537572435916e+00 -3.5498465909263666e-01 + -8.1829989435303740e-01 2.9279721763281228e+00 -2.9921773539264818e-01 + -1.2251955553696317e+00 3.2817937895742966e+00 -3.0853183742416490e-01 + -1.7185957310094864e+00 3.4016260852604301e+00 -4.1344576345524819e-01 + -2.1612815446714007e+00 3.3288968465032247e+00 -5.9615954150239603e-01 + -2.4914659916076536e+00 3.1465687243792635e+00 -8.3123319754546920e-01 + -2.7192007336562161e+00 2.9241041029676613e+00 -1.0929782230762615e+00 + -2.8906561740135888e+00 2.6764966221984907e+00 -1.3671576819546711e+00 + -3.0358488472818856e+00 2.3882614074040442e+00 -1.6453231506596699e+00 + -3.1524099629511060e+00 2.0359806462633494e+00 -1.9101571534947921e+00 + -3.2220043288652169e+00 1.6130713302542405e+00 -2.1211649852753482e+00 + -3.2121195861171756e+00 1.1239937813596894e+00 -2.2481823329703410e+00 + -3.0206702619620547e+00 5.5143532634192882e-01 -2.2389711575444622e+00 + -2.6411556608846505e+00 5.3747126782642096e-02 -1.9924428096075482e+00 + -2.4572059063386908e+00 -2.5062672887417159e-01 -1.7989570007199032e+00 + id 11446 + loc 7.3987245559692383e-01 8.6400920152664185e-01 1047 + blend 0.0000000000000000e+00 + interp 4.5542874005172751e-01:3.4869896273873430e-01:2.3042617215418559e-05:2.6713506815264121e-01:6.3630252914657159e-01:4.3062595716556828e-01:1.0100625370424638e+00:4.5542418576432703e-01:1.7812273666250797e+00:3.7101848033132517e-01:2.6721784905621146e+00:3.6182808138288247e-01:2.9855414485131853e+00:2.4589171059688655e-01:3.3589006961854087e+00 + CVs 20 + 2.4999051454355953e-01 7.2868745868561968e-01 -5.8925351036523110e-01 + 5.1460091675707154e-01 1.4149627098483863e+00 -1.1265033759141643e+00 + 8.1576916371702735e-01 2.0963775576638786e+00 -1.5966211360657894e+00 + 1.1990492764047358e+00 2.7718381731667456e+00 -1.8817811474135031e+00 + 1.6706398503342339e+00 3.3677118570579871e+00 -1.8428704964823321e+00 + 2.1516787688471455e+00 3.7892864727286275e+00 -1.4788266898336904e+00 + 2.5518565365062225e+00 3.9820157056553969e+00 -8.9176562302510320e-01 + 2.8264755842051232e+00 3.9517161363202526e+00 -2.0429297741157870e-01 + 2.9829589588354755e+00 3.7375437918670649e+00 5.0061567871192847e-01 + 3.0463562195398461e+00 3.3726551616387801e+00 1.1741424743101545e+00 + 3.0461736746954653e+00 2.8904850791613725e+00 1.7740114232172672e+00 + 3.0186116796918196e+00 2.3463210924999229e+00 2.2582470654411351e+00 + 2.9812511662765284e+00 1.8123241928187492e+00 2.6124305877718466e+00 + 2.9230900757128846e+00 1.3911121053283289e+00 2.7897248887580322e+00 + 2.8322168159516257e+00 1.1056571465092153e+00 2.5821778916452174e+00 + 2.5607567623253651e+00 7.0999632796003376e-01 2.1960911688623059e+00 + 2.2740298225050961e+00 4.0686273756814995e-01 2.2361884538452248e+00 + 2.2082750348322033e+00 5.2840036003493185e-01 2.5386274019900359e+00 + 2.4819029052008452e+00 1.2970126076149739e+00 2.8734397808014807e+00 + id 11447 + loc 2.1360166370868683e-01 7.3328673839569092e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5862369312014406e-01:2.9334840018752645e-01:2.9295296566567597e-02:3.3969141171471579e-01:1.0207861354109813e+00:2.6349352763814149e-01:1.8229786084833315e+00:2.5228946537373381e-01:2.6268936468638500e+00:3.8460397170420368e-01:3.0019032913045254e+00:4.5861910688321289e-01:3.8208258468362137e+00 + CVs 20 + 2.0599073838057591e-01 3.2621646277005389e-01 -3.5553546975051198e-02 + 4.3726611280332617e-01 6.4716877316013122e-01 -8.7585783035504072e-02 + 6.8030772521282157e-01 9.6343621900930643e-01 -1.5106907020625476e-01 + 9.2907727008499064e-01 1.2687740890773214e+00 -2.3375156025438593e-01 + 1.1816727152944240e+00 1.5517667422299182e+00 -3.4845934736427009e-01 + 1.4354583313739315e+00 1.7984814453870521e+00 -5.0427035937513054e-01 + 1.6845080681814246e+00 1.9951001875959360e+00 -7.0568930222525461e-01 + 1.9180371583101825e+00 2.1303139383746972e+00 -9.5121894752928782e-01 + 2.1242275604283285e+00 2.1958355250353980e+00 -1.2302009252916495e+00 + 2.2967037928323784e+00 2.1900032117702164e+00 -1.5231905228617375e+00 + 2.4352467668774214e+00 2.1185383125790338e+00 -1.8126665411782454e+00 + 2.5400222742629492e+00 1.9902465921153076e+00 -2.0907807760644568e+00 + 2.6060913977113001e+00 1.8172216514619017e+00 -2.3582085077589792e+00 + 2.6209346506985183e+00 1.6163725027903035e+00 -2.6215397151086961e+00 + 2.5692514671768176e+00 1.4079839662094553e+00 -2.8807398122596610e+00 + 2.4450694998754590e+00 1.2172774529893666e+00 -3.1239542251239238e+00 + 2.2612872449607648e+00 1.0694114316170462e+00 -3.3348509569606377e+00 + 2.0513837290106203e+00 9.8098514901648781e-01 -3.4990595474039292e+00 + 1.8386557755161466e+00 9.7177983065310003e-01 -3.6024516372231981e+00 + id 11448 + loc 3.5135617852210999e-01 9.5858365297317505e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4765271495378423e-01:3.8605554071727960e-01:3.0202807126101827e-01:4.2974631816294451e-01:8.7427712008012382e-01:3.5705275616042015e-01:1.6939704812820060e+00:3.0374963448756764e-01:2.3095347667166184e+00:3.6690336154946052e-01:2.8652735011374570e+00:4.4764823842663470e-01:3.3947066993454502e+00:3.5733241780717923e-01:3.9781692875398837e+00 + CVs 20 + 1.0166958576205325e-01 3.8769674679642413e-01 -4.0031623512488318e-02 + 2.3015052824294185e-01 7.7238817317256514e-01 -1.1664571044017602e-01 + 3.7562416164040185e-01 1.1599650816563019e+00 -2.2250059979802345e-01 + 5.2902609339170914e-01 1.5501381915122034e+00 -3.6787326639232387e-01 + 6.8442934543350065e-01 1.9321406527111542e+00 -5.6991685082612187e-01 + 8.4856403235521149e-01 2.2886918422854006e+00 -8.3277585091352291e-01 + 1.0405750820108000e+00 2.6002447007902547e+00 -1.1471695944025875e+00 + 1.2759271697735755e+00 2.8485214867477611e+00 -1.4983650331414027e+00 + 1.5607396677888963e+00 3.0133659546619493e+00 -1.8747727022796785e+00 + 1.8913014263372578e+00 3.0634328894038698e+00 -2.2668582978448524e+00 + 2.2426628034997540e+00 2.9509521957529978e+00 -2.6568162638779134e+00 + 2.5466191362821129e+00 2.6236167558597616e+00 -3.0059565840563409e+00 + 2.6888761058624815e+00 2.1157233475874424e+00 -3.2454434606657996e+00 + 2.6358809842013828e+00 1.5839536979963071e+00 -3.3518223634509057e+00 + 2.4361565133310861e+00 1.1153606260665829e+00 -3.3650754011233897e+00 + 2.0995960996460052e+00 7.6706623834276044e-01 -3.3162677614851326e+00 + 1.6818918270720427e+00 6.9555313573678312e-01 -3.2419967383717676e+00 + 1.4145082552374733e+00 8.6873762905319041e-01 -3.1995845348719607e+00 + 1.1306150865921660e+00 1.0107617474074777e+00 -3.1506123008014546e+00 + id 11449 + loc 9.7340470552444458e-01 4.0270528197288513e-01 1086 + blend 0.0000000000000000e+00 + interp 2.2424138191231902e+00:3.1615607158476838e-01:7.5760451486663549e-02:3.5385768129703932e-01:9.5462403845004362e-01:5.2748084395264072e-01:1.1185206475771667e+00:5.8352546622479329e-01:1.5635214294283810e+00:1.0504819667567740e+00:1.8621786847573405e+00:1.9303151886814580e+00:1.9788973950197541e+00:2.2424038191231901e+00:1.9844667531385483e+00:3.1657375994553233e-01:3.8623270320999548e+00:1.2713892803377571e+00:3.9934282626183961e+00 + CVs 20 + 3.3232606349797505e-01 4.0289452529179881e-01 -5.7530689959404702e-01 + 6.1254974500081794e-01 7.1225311451431450e-01 -1.0425920716020127e+00 + 8.6539442354192908e-01 9.8908349263900719e-01 -1.4946226764754500e+00 + 1.1257247665196835e+00 1.2686159282679639e+00 -1.9610474052692364e+00 + 1.4320213912373967e+00 1.5519842116461176e+00 -2.4112924481344704e+00 + 1.8177965182527105e+00 1.8310871363336148e+00 -2.8033566578185360e+00 + 2.2984139526129233e+00 2.0893811358886434e+00 -3.0858351340041339e+00 + 2.8686292678895873e+00 2.3019558780665701e+00 -3.1943324437496412e+00 + 3.4775285708727544e+00 2.4217518541187744e+00 -3.0544895603250595e+00 + 3.9848562445201186e+00 2.3861266799769152e+00 -2.6775197064097371e+00 + 4.2813011775301151e+00 2.1854147606672845e+00 -2.2401264632384974e+00 + 4.3977471916198407e+00 1.8787761772151441e+00 -1.9356416642036551e+00 + 4.4191022679705130e+00 1.5638742930665686e+00 -1.8075771498351736e+00 + 4.3838116556199225e+00 1.2456607370919572e+00 -1.7228837777530392e+00 + 4.2716275075076853e+00 8.6505120214688958e-01 -1.5914482176345066e+00 + 4.0695740017439128e+00 4.6413610846812803e-01 -1.3974499160078384e+00 + 3.8005515291030170e+00 1.2418812890871878e-01 -1.1329946699261817e+00 + 3.5048474914794681e+00 -9.9275512149608724e-02 -8.1095292601251245e-01 + 3.2996928331242010e+00 -1.4082337173572473e-01 -6.7225024881422013e-01 + id 11450 + loc 8.6573582887649536e-01 9.4597667455673218e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0712741752317347e-01:3.8059733070507185e-01:1.4469573840124961e-01:4.9079917989231997e-01:9.3408008887903449e-01:4.4452718241345424e-01:1.7045745408174684e+00:5.0712234624899821e-01:2.0968379667685011e+00:4.3760324958491875e-01:2.5999042905514962e+00:3.4533495361886896e-01:2.9120401281635475e+00:3.2665928639165903e-01:3.3456463013071560e+00 + CVs 20 + 7.8328491102722261e-02 2.6377387584623996e-01 -1.6664260930726435e-01 + 1.8424913077245059e-01 5.1129660789843201e-01 -3.2857869033474291e-01 + 3.0050971641690416e-01 7.4665462024647200e-01 -4.8483838692588110e-01 + 4.2188362728439782e-01 9.7347953777146845e-01 -6.3841722685886559e-01 + 5.5157880044529117e-01 1.1950168957034832e+00 -7.9440199167796544e-01 + 6.9028306718263766e-01 1.4174631395220403e+00 -9.6016360536952239e-01 + 8.3341239404904921e-01 1.6476543848627414e+00 -1.1463411753814805e+00 + 9.7396638862878726e-01 1.8858585711386258e+00 -1.3668400453923308e+00 + 1.1061616898766267e+00 2.1196023063342286e+00 -1.6385579628900000e+00 + 1.2240013801208987e+00 2.3244085233300655e+00 -1.9732796363358025e+00 + 1.3220586298635388e+00 2.4682107005204039e+00 -2.3653578450327126e+00 + 1.4023603853302071e+00 2.5248224498321750e+00 -2.7888183624915923e+00 + 1.4769118651478430e+00 2.4906804557351121e+00 -3.2111523613760244e+00 + 1.5612922332511052e+00 2.3793021068616502e+00 -3.6068766545897377e+00 + 1.6705166545151120e+00 2.2045913939204560e+00 -3.9641465218287228e+00 + 1.8187460450999882e+00 1.9638322912785902e+00 -4.2795482716793831e+00 + 2.0112875587185077e+00 1.6448822057513697e+00 -4.5319292710188321e+00 + 2.2363526957629709e+00 1.2574862282573751e+00 -4.6934280195005309e+00 + 2.4786612407702746e+00 8.0029019606945262e-01 -4.7964130206256685e+00 + id 11451 + loc 5.8535295724868774e-01 4.2902949452400208e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0348319310217970e-01:3.4919703091841509e-01:6.9522390466106188e-01:5.0347815827024867e-01:1.0889360951370879e+00:3.7392378005353183e-01:1.9292638684528183e+00:4.4321910912575357e-01:2.4076283317268854e+00:3.4274539512835184e-01:2.9997852042900091e+00:3.2511593769350983e-01:3.7833151894543198e+00 + CVs 20 + 4.1015705392914448e-01 3.1937673644213904e-01 -2.0175978276788470e-01 + 7.3577847294447551e-01 5.9647713230185229e-01 -3.7021350041859613e-01 + 1.0113519365034800e+00 8.5745669701024774e-01 -5.4342958022740151e-01 + 1.2809911217018024e+00 1.1171848531985087e+00 -7.0844447520350762e-01 + 1.5690562029626247e+00 1.3609896117228881e+00 -8.2111399161673493e-01 + 1.8754572386945210e+00 1.5628798118150504e+00 -8.6302744152469335e-01 + 2.1853224242878864e+00 1.7043054969427187e+00 -8.4369253924424492e-01 + 2.4899442384304775e+00 1.7818019064176531e+00 -7.7515642804089957e-01 + 2.7839630456443931e+00 1.7961513157123703e+00 -6.5625256380583719e-01 + 3.0381706367273975e+00 1.7461265187924295e+00 -4.8844377746361545e-01 + 3.2192194817867774e+00 1.6466195651357762e+00 -3.0109898909816524e-01 + 3.3375795571418494e+00 1.5272637767654680e+00 -1.1684633561521429e-01 + 3.4086773777542003e+00 1.4048128466144383e+00 5.5094487677235238e-02 + 3.4126953212758231e+00 1.2529381750600721e+00 1.6608327255169786e-01 + 3.3245972249345086e+00 1.0350599788994592e+00 1.5451378080445299e-01 + 3.1413628359687729e+00 7.0454394908294293e-01 7.5140301496355422e-02 + 2.8752698902034499e+00 1.9308917181782786e-01 1.0189959663355852e-01 + 2.6205933907883794e+00 -3.8548663608482026e-01 4.8569173563645907e-01 + 2.6391022105658619e+00 -4.1610851406459665e-01 7.1580074900072233e-01 + id 11452 + loc 6.1344081163406372e-01 4.3702763319015503e-01 1053 + blend 0.0000000000000000e+00 + interp 4.8775253636911958e-01:4.3040308772680796e-01:8.3273118363107879e-01:4.8774765884375593e-01:1.0645254424833404e+00:2.5106631451392830e-01:1.9327625111215485e+00:4.2194051466246618e-01:2.1710995704283365e+00:3.9291857735674890e-01:2.9710840848294202e+00:4.1939563128236446e-01:3.2579487673783127e+00:3.9640346048678321e-01:3.9986865334611186e+00 + CVs 20 + 6.0263935511254807e-02 4.0933068338613410e-01 -1.7771882439386094e-01 + 1.6068105975351518e-01 7.9146967612655550e-01 -3.3335893125731247e-01 + 2.9763582887126949e-01 1.1643187688858689e+00 -4.9148216052417026e-01 + 4.7323396486671937e-01 1.5316238006689531e+00 -6.6387331238315639e-01 + 6.9783469876915294e-01 1.8804523228563077e+00 -8.4670349868741546e-01 + 9.7997595613551969e-01 2.1919964817201683e+00 -1.0329151567403803e+00 + 1.3215745690078453e+00 2.4396928707179848e+00 -1.2108066334327461e+00 + 1.7121028310641782e+00 2.5985747183356067e+00 -1.3614700719958874e+00 + 2.1349032442444047e+00 2.6551673528144404e+00 -1.4611005686651337e+00 + 2.5700272182415174e+00 2.6016438408453073e+00 -1.4890918509609805e+00 + 2.9756376703090472e+00 2.4244638282821152e+00 -1.4269150163987703e+00 + 3.2799292677625078e+00 2.1301843818531201e+00 -1.2657310392745469e+00 + 3.4271273973120948e+00 1.7859904336530503e+00 -1.0399640696805290e+00 + 3.4336690074124085e+00 1.4969129186887316e+00 -8.1799347166397873e-01 + 3.3826257336557788e+00 1.3225847655951979e+00 -6.5982770639035704e-01 + 3.3523726199664443e+00 1.2451377443970899e+00 -6.2127360401447795e-01 + 3.3617393091204670e+00 1.1747274810050339e+00 -7.3711932300427530e-01 + 3.3665133067113109e+00 1.0682362475069722e+00 -8.3729188431710322e-01 + 3.3713307031974260e+00 1.2491872489399718e+00 -5.0906214265516714e-01 + id 11453 + loc 9.2057019472122192e-01 8.1589728593826294e-01 410 + blend 0.0000000000000000e+00 + interp 4.3518195518663932e-01:4.3020093391751135e-01:4.5493516614787177e-02:4.2719947793997137e-01:6.2925080046677029e-01:3.6642508165648308e-01:1.0030980695598046e+00:3.7080698335008122e-01:1.5509728758796100e+00:4.3517760336708750e-01:1.9937973846592052e+00:3.6556356999999257e-01:2.3860212806447687e+00:3.0864957857267106e-01:3.0402479591143399e+00:3.1415071987200233e-01:3.8292027759722647e+00 + CVs 20 + 5.7316517253469457e-01 2.4064378882955206e-01 -1.8311738972387992e-01 + 1.0375179469691105e+00 3.8077124116503891e-01 -3.4995560981383267e-01 + 1.4914844791685302e+00 4.7945347917967396e-01 -5.0928080968698886e-01 + 1.9506412804147857e+00 5.4460644417977100e-01 -6.6885916177104932e-01 + 2.3820239406725117e+00 5.6261758535302464e-01 -8.3641274114197128e-01 + 2.7599002059642221e+00 5.2953096762387997e-01 -1.0157713265784556e+00 + 3.0730228896934655e+00 4.5058524003938927e-01 -1.2098337537288333e+00 + 3.3203698835458066e+00 3.3215458341770998e-01 -1.4221958275050028e+00 + 3.5072356391045458e+00 1.7978542467823866e-01 -1.6438435938546119e+00 + 3.6440922998214882e+00 1.1301170946083516e-02 -1.8563261493434344e+00 + 3.7569824685494524e+00 -1.8998037699204162e-01 -2.0547633857497405e+00 + 3.8791431133092389e+00 -5.2624770628089723e-01 -2.2402365906026080e+00 + 4.0258835114615508e+00 -1.0550924832441768e+00 -2.4370294821552534e+00 + 4.2102211064417636e+00 -1.7259902553155222e+00 -2.7317288098039456e+00 + 4.4462400610543167e+00 -2.4167257760578558e+00 -3.2112504879812134e+00 + 4.7455259276566739e+00 -2.9970484207843411e+00 -3.8887353842527528e+00 + 5.1269281881728972e+00 -3.4360265297913140e+00 -4.6981234053511001e+00 + 5.6127014119085175e+00 -3.7770483362150911e+00 -5.5431275190327653e+00 + 6.1610469593639685e+00 -4.0537527768201009e+00 -6.3588818104476861e+00 + id 11454 + loc 9.9044507741928101e-01 3.5294759273529053e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3949065830697742e-01:4.1950072336713806e-01:3.9291139422151733e-01:4.3948626340039437e-01:9.9730458312720993e-01:3.5101808865311679e-01:1.6967506941600088e+00:3.1375285154851373e-01:2.0046856452176307e+00:4.3562890801388643e-01:2.5402760691522142e+00:3.7960661505733934e-01:3.1282425816144186e+00:3.5476540700077880e-01:3.9984974567196110e+00 + CVs 20 + -1.5946287801675449e-01 3.7288122527585715e-01 1.1658052263862828e-01 + -3.0736614668901352e-01 7.6071570861324855e-01 2.2319751058849546e-01 + -4.4206314478274800e-01 1.1619390314987068e+00 3.0618183775818314e-01 + -5.5413479116551123e-01 1.5681409206148347e+00 3.4490533905669613e-01 + -6.3670447643355810e-01 1.9858495518811869e+00 3.2950664451975392e-01 + -7.0300604920806453e-01 2.4531486064305970e+00 3.1201305344953278e-01 + -7.9501651275743601e-01 2.9574617543146315e+00 4.3227564880640490e-01 + -9.5285452968205731e-01 3.3548011588799245e+00 7.4167057882759091e-01 + -1.1773304759920751e+00 3.5646240478694904e+00 1.1254085493476711e+00 + -1.4414693087853858e+00 3.6158366573154401e+00 1.4560549208946498e+00 + -1.7115345405503624e+00 3.5814456702781960e+00 1.6803461768629813e+00 + -1.9907104474105672e+00 3.5005783378994506e+00 1.8211934184417253e+00 + -2.3109439200059900e+00 3.3659744127931361e+00 1.9073224223568208e+00 + -2.6991394843898338e+00 3.1481842244828240e+00 1.9484047653436956e+00 + -3.1365296882644995e+00 2.8077228714097666e+00 1.9316851867130431e+00 + -3.5264543556715635e+00 2.3448217259287620e+00 1.8357423433490616e+00 + -3.7773939533421661e+00 1.8025684921379148e+00 1.6259025962534799e+00 + -3.8095230739781143e+00 1.3005437724862672e+00 1.2724860445035442e+00 + -3.7193551996514995e+00 1.0551501572179391e+00 1.0160420937250842e+00 + id 11455 + loc 7.1815854310989380e-01 4.3788969516754150e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8009906107565237e-01:4.0635782816610094e-01:9.8085976250038232e-02:4.5748696659321880e-01:7.1488960854736761e-01:3.4737880534329896e-01:1.0327105084075385e+00:4.8009426008504164e-01:1.7194765608705485e+00:4.3624118254073779e-01:2.0353693256992509e+00:3.6215322102802627e-01:2.9213630000706146e+00:2.9253763488418077e-01:3.6354206928164041e+00 + CVs 20 + -8.0492473049260424e-02 4.0690040237081315e-01 2.6067035494658769e-01 + -1.4808616591233886e-01 8.4201293193151550e-01 5.0440014291160640e-01 + -2.5279625270714712e-01 1.2741475911167066e+00 7.9483184783614691e-01 + -4.2137403805143192e-01 1.6650175083081908e+00 1.1577975872932138e+00 + -6.7189492406332141e-01 1.9769080426087229e+00 1.5930823434076105e+00 + -1.0139990425968743e+00 2.1720511277236323e+00 2.0717295699332241e+00 + -1.4397693097814281e+00 2.2246690543914456e+00 2.5455851526929267e+00 + -1.9207822184619827e+00 2.1308871912188270e+00 2.9654796836632160e+00 + -2.4143888710217749e+00 1.9079038277638489e+00 3.3023715625345020e+00 + -2.8746995115447089e+00 1.5827590568833418e+00 3.5608086467552322e+00 + -3.2645840589841333e+00 1.1761161769337252e+00 3.7672255898861859e+00 + -3.5563635501874007e+00 6.9790316465578006e-01 3.9401650151056100e+00 + -3.7271923200103645e+00 1.6270793085788648e-01 4.0798596096154043e+00 + -3.7630646107644417e+00 -3.9783874507616357e-01 4.1898515298060639e+00 + -3.6511326007372666e+00 -9.5395088547897977e-01 4.3035300238454752e+00 + -3.3783048002256493e+00 -1.4678211669438412e+00 4.4700819360933970e+00 + -2.9771690886516353e+00 -1.8860542129327516e+00 4.7419797452970487e+00 + -2.5080257828318739e+00 -2.1818845635557702e+00 5.1194084438273180e+00 + -2.3139047072761034e+00 -2.4988561693989766e+00 5.1698180272131022e+00 + id 11456 + loc 8.2857871055603027e-01 3.6195343732833862e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1972478835842686e-01:3.3460363439738666e-01:7.2173133391394551e-01:4.1972059111054327e-01:1.4706874662673584e+00:2.6574940907895866e-01:2.0110189820049627e+00:3.5014303221551862e-01:3.0002776018155366e+00:3.7234262690757103e-01:3.9978650860517768e+00 + CVs 20 + -1.4864388313789312e-01 1.9591071856753650e-01 1.9127564131136729e-01 + -2.9193779326397368e-01 4.0670549382489540e-01 3.7906547990507233e-01 + -4.4075643730312714e-01 6.2786252776216500e-01 5.5590825225543761e-01 + -6.0064981401800910e-01 8.5584489917451778e-01 7.1915634756474911e-01 + -7.7176893786714840e-01 1.0876024399767132e+00 8.7135326691267356e-01 + -9.5213938338325566e-01 1.3201881715539217e+00 1.0183745323430178e+00 + -1.1381216704305213e+00 1.5521989327355832e+00 1.1704196246062888e+00 + -1.3236985652908047e+00 1.7829500710036648e+00 1.3421405582248798e+00 + -1.4976286104464627e+00 2.0077407828254383e+00 1.5516397623492426e+00 + -1.6465862304508077e+00 2.2128368010398343e+00 1.8121531395263843e+00 + -1.7591340381850005e+00 2.3778066357462615e+00 2.1247506399049514e+00 + -1.8296056801547957e+00 2.4797637467641840e+00 2.4753805029534024e+00 + -1.8618991437682146e+00 2.5045346092140650e+00 2.8398800379321010e+00 + -1.8682355173350236e+00 2.4512278296942993e+00 3.1944907617382823e+00 + -1.8644939426048268e+00 2.3269378151388507e+00 3.5221175991833427e+00 + -1.8722589608770051e+00 2.1411019767363544e+00 3.8125014972870828e+00 + -1.9159537941584694e+00 1.9009910183552354e+00 4.0490558240843901e+00 + -2.0038443480885437e+00 1.6129882787046692e+00 4.1959415848925188e+00 + -2.1482875611987291e+00 1.2505271236422280e+00 4.1515086921546791e+00 + id 11457 + loc 1.3273607194423676e-01 2.1915066242218018e-01 1047 + blend 0.0000000000000000e+00 + interp 4.4556557862697893e-01:4.0525947859976852e-01:1.5059009029182868e-01:3.3739430994768421e-01:8.5308852227546039e-01:3.7244631348775237e-01:1.8987274075480116e+00:4.4556112297119266e-01:2.0918555517714532e+00:3.8518741034177895e-01:2.9776182995250218e+00:4.1471802764530336e-01:3.2943279645667167e+00:3.6059088200964290e-01:3.9135980908988173e+00 + CVs 20 + -6.8481624352064641e-01 5.1161966270686399e-01 3.8266113841558258e-02 + -1.2943500353446387e+00 1.0256848933741973e+00 1.2059194369075127e-02 + -1.8378020090921439e+00 1.5740350237429741e+00 -1.4390534654940690e-01 + -2.2748484933577364e+00 2.1491278138798742e+00 -5.0080702274816691e-01 + -2.5285124227399463e+00 2.6683226076810347e+00 -1.0837331070465432e+00 + -2.5836983160712119e+00 3.0174551137926300e+00 -1.8303031734546160e+00 + -2.4940889666723276e+00 3.1058445592766306e+00 -2.6225760414454093e+00 + -2.3468963343231484e+00 2.9098295441917648e+00 -3.3308416612938201e+00 + -2.1999200608656961e+00 2.4878419792098416e+00 -3.8744805233135300e+00 + -2.0440373691635729e+00 1.9316652599156936e+00 -4.2387098142511288e+00 + -1.8370967547181096e+00 1.3229340560309755e+00 -4.4354312061631793e+00 + -1.5350057825127266e+00 7.1437937389392048e-01 -4.4891092190787294e+00 + -1.1019271090873306e+00 1.4895328811336805e-01 -4.4082508037124253e+00 + -5.3202137189131704e-01 -3.0981169697364108e-01 -4.1894917192862868e+00 + 1.4494297602742801e-01 -5.9683640205904775e-01 -3.8425642069086057e+00 + 8.7184226457971370e-01 -6.6288640077640570e-01 -3.3852581686940670e+00 + 1.6134203233099229e+00 -4.1911238233283499e-01 -2.7482302995396015e+00 + 2.0839655774511501e+00 4.3569414746284618e-01 -1.8739814207216003e+00 + 2.0646786500530361e+00 8.0219885050413464e-01 -1.6955321245900368e+00 + id 11458 + loc 1.4152386784553528e-01 5.3686124086380005e-01 1070 + blend 0.0000000000000000e+00 + interp 1.6881172001052274e+00:6.6271434995844281e-01:1.9176707478593347e+00:4.0885750095051343e-01:2.0230587348788647e+00:3.7306382144333750e-01:2.7589499513789986e+00:3.7702242566891880e-01:3.6301486704337904e+00:1.6881072001052273e+00:3.7707997702918603e+00 + CVs 20 + -3.5160006860564064e-01 4.2833741409731252e-01 3.8718098741032170e-01 + -6.2027717219156764e-01 7.4777848662406654e-01 6.9678148065799528e-01 + -8.3690785781492605e-01 1.0205216760524174e+00 1.0204325275765223e+00 + -1.0658185350258180e+00 1.2862105643436352e+00 1.3496145068198748e+00 + -1.3652891057323675e+00 1.5485068731452403e+00 1.6049338315113588e+00 + -1.7419524662631449e+00 1.7792360746231728e+00 1.7282117228788589e+00 + -2.1515667256408886e+00 1.9398641726668895e+00 1.7018712785921708e+00 + -2.5255171252999715e+00 2.0083550539061346e+00 1.5240336300342605e+00 + -2.7711350961871872e+00 1.9731652596265956e+00 1.2092584998603146e+00 + -2.8190116677841770e+00 1.8416623409251704e+00 8.5892820256797120e-01 + -2.7185036084393843e+00 1.6444699914202567e+00 5.8371977694807398e-01 + -2.5386749457160134e+00 1.3970402836717266e+00 4.2446613191514149e-01 + -2.3430514923140469e+00 1.1321508670269971e+00 3.7627606427171933e-01 + -2.1658056399177714e+00 8.7010979256838361e-01 3.5389069552975472e-01 + -2.0182286533699507e+00 6.1124579749093344e-01 2.6362080065727289e-01 + -1.9395933473545708e+00 4.0328418573875380e-01 4.1761208031724006e-02 + -2.0075694255972594e+00 4.0372926637866513e-01 -3.0961555329604684e-01 + -2.1833825001434595e+00 6.5382014013668188e-01 -5.6612815786080450e-01 + -2.2559572624291664e+00 6.9916033227947394e-01 -8.2952598474328776e-01 + id 11459 + loc 5.4819786548614502e-01 8.3739846944808960e-01 410 + blend 0.0000000000000000e+00 + interp 5.3681456063568145e-01:3.7303580029323580e-01:2.7906043430506167e-01:3.5294266169275190e-01:1.0152137375825436e+00:3.7991921770082565e-01:1.7668720879654067e+00:5.3680919249007508e-01:2.0662224579315240e+00:4.1799152977067761e-01:2.7175185754531110e+00:3.7276445339550751e-01:3.0620886901154725e+00:3.0306317550593365e-01:3.6484963021962957e+00 + CVs 20 + 4.0055822537152719e-01 1.0033118931133100e-01 -2.2562991054143369e-01 + 6.9393943155983062e-01 1.6167272484255241e-01 -4.2594776221541192e-01 + 9.5103123357001951e-01 2.1021604632666763e-01 -6.2304116539227028e-01 + 1.2004209625375259e+00 2.5855858424532041e-01 -8.2728875167832516e-01 + 1.4413306587441286e+00 3.0491859399409310e-01 -1.0384371677385169e+00 + 1.6768575477884122e+00 3.4742862152655107e-01 -1.2559953930703049e+00 + 1.9141887067481322e+00 3.8434652900708566e-01 -1.4777012973779131e+00 + 2.1623509027724310e+00 4.1385964472362080e-01 -1.6988295233704445e+00 + 2.4310101580614214e+00 4.3404983958840393e-01 -1.9126786761491941e+00 + 2.7283284435612609e+00 4.4338014545683180e-01 -2.1100698382158476e+00 + 3.0486672001549824e+00 4.4371578134918155e-01 -2.2770376992657719e+00 + 3.3521992147018240e+00 4.4315891504318383e-01 -2.4025183630806173e+00 + 3.5896393319179021e+00 4.5160797724876867e-01 -2.4947850682173680e+00 + 3.7673244650234814e+00 4.6603318168164276e-01 -2.5722770590388238e+00 + 3.9217170797825842e+00 4.6904061866578983e-01 -2.6481353887469812e+00 + 4.0578651189552168e+00 4.5526114252832728e-01 -2.7239587237652731e+00 + 4.1655999329994629e+00 4.2962603287667367e-01 -2.7941202712740285e+00 + 4.2511564641240236e+00 3.8473574932954202e-01 -2.8634312144537444e+00 + 4.4130016125763945e+00 1.8816610450813420e-01 -3.0407045996516620e+00 + id 11460 + loc 7.7347195148468018e-01 5.8686840534210205e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2133272763255469e-01:3.4480322542258779e-01:3.4307397881000457e-02:2.9466305401471460e-01:7.6686253153423167e-01:2.9623385242602618e-01:1.7085619218298653e+00:3.5192990764903082e-01:2.2306309480755848e+00:4.2132851430527840e-01:2.9436342271030758e+00:2.7149838250066832e-01:3.3853899686678282e+00 + CVs 20 + 4.6653889606456722e-02 2.6994580430679838e-01 -2.5188520469854847e-01 + 1.0984781920555833e-01 5.3265184943394905e-01 -4.6792264585220084e-01 + 1.8310168383349124e-01 7.9195164058680423e-01 -6.7289969667218807e-01 + 2.6456496325320766e-01 1.0484823807593397e+00 -8.8559401173818431e-01 + 3.5641728265070322e-01 1.2959925164785786e+00 -1.1132424637925744e+00 + 4.5455683168117988e-01 1.5283928877940558e+00 -1.3578468955347851e+00 + 5.4849698804266134e-01 1.7452756812883083e+00 -1.6213054101626936e+00 + 6.2831744269860557e-01 1.9499994683892918e+00 -1.9085528189138892e+00 + 6.9270341790560463e-01 2.1434964532632694e+00 -2.2264389701760332e+00 + 7.4858543617295503e-01 2.3190508361339246e+00 -2.5838890439683242e+00 + 8.0392120440226544e-01 2.4548605388440836e+00 -2.9876767856682478e+00 + 8.6411756244432592e-01 2.5145154656558426e+00 -3.4305225597665872e+00 + 9.2996774447599251e-01 2.4660998919636707e+00 -3.8868694501668783e+00 + 9.9755761247191488e-01 2.2978635920827823e+00 -4.3215791595049344e+00 + 1.0690312872301901e+00 2.0177858584907025e+00 -4.7048617867927973e+00 + 1.1503659133976685e+00 1.6424472059107682e+00 -5.0165266610828096e+00 + 1.2308531685292121e+00 1.1932993399364111e+00 -5.2447894869828122e+00 + 1.2686418945205959e+00 6.9724043914268807e-01 -5.3844645404307192e+00 + 1.2268467396857792e+00 1.7740938210410800e-01 -5.4377726938460471e+00 + id 11461 + loc 6.4212507009506226e-01 6.5895754098892212e-01 1054 + blend 0.0000000000000000e+00 + interp 3.4182539565339259e-01:3.4182197739943609e-01:3.3506794643646864e-01:2.3580416741715182e-01:9.9163003809202732e-01:2.8697127547716100e-01:1.7462568305238952e+00:2.3774234256945112e-01:2.0619612235882365e+00:2.9548275040555366e-01:2.7443005532604543e+00:2.1987928995154901e-01:3.7555491042147473e+00 + CVs 20 + 2.5135354132449916e-01 4.1843637925256105e-01 -1.2854231378359768e-01 + 4.8102464109159859e-01 8.1503725572004826e-01 -2.1916915760541944e-01 + 6.8330160530152928e-01 1.2273299580505626e+00 -2.6780529673210840e-01 + 8.9242920328750452e-01 1.6448581871989667e+00 -2.8126606772679807e-01 + 1.1661903062737282e+00 2.0004858420449523e+00 -2.8511061692666329e-01 + 1.5171316175581442e+00 2.2283214708322863e+00 -3.1189783405676175e-01 + 1.9023273668620293e+00 2.3019438193528714e+00 -3.7885130077323015e-01 + 2.2774437036516009e+00 2.2226232390234664e+00 -4.8372194633771026e-01 + 2.6136122478022661e+00 1.9999238719045662e+00 -6.0355688677474761e-01 + 2.8964983751407614e+00 1.6370068117281322e+00 -6.9855374739709886e-01 + 3.1350474269131543e+00 1.1512543535175135e+00 -7.0683805979678060e-01 + 3.3457283047745277e+00 6.3762244345255481e-01 -5.6821391451363468e-01 + 3.5560157048312857e+00 2.0108885343767657e-01 -3.0756186683399278e-01 + 3.8472992494962339e+00 -1.1878304195577138e-01 -3.3343046802708720e-02 + 4.2499530565087946e+00 -3.0684163534056730e-01 1.2445170064790456e-01 + 4.6823712783239912e+00 -3.9576188933600753e-01 1.4689814325182093e-01 + 5.0147712978143151e+00 -4.3618208700042016e-01 1.0639005907534016e-01 + 5.2120521530049011e+00 -4.8327819359636348e-01 9.7816168966412098e-02 + 5.6664372263510749e+00 -8.2020617037358501e-01 2.4236382241804894e-01 + id 11462 + loc 6.1549419164657593e-01 4.0295187383890152e-02 1077 + blend 0.0000000000000000e+00 + interp 4.0501547517696196e-01:3.2696953032635689e-01:6.9495941810548967e-04:4.0501142502221021e-01:7.9715246346937185e-01:3.3497231203974359e-01:1.5913914325517953e+00:3.8262786020559814e-01:2.0946232520218890e+00:3.7851541255755305e-01:2.7813886287185001e+00:2.4390219988503162e-01:3.1743557857446487e+00 + CVs 20 + -4.5581247526904303e-02 2.1938011357129167e-01 2.5484710173921826e-01 + -8.4523238868930317e-02 4.3329839620677840e-01 4.8654403916297279e-01 + -1.1572022227256720e-01 6.3160624686512779e-01 7.0593839376979295e-01 + -1.3922014658144402e-01 8.0726572330926616e-01 9.2292136137824565e-01 + -1.5859855209854584e-01 9.5796220756294836e-01 1.1432693382879247e+00 + -1.8033423760082790e-01 1.0825795855847209e+00 1.3759773347600013e+00 + -2.1539113882175875e-01 1.1769887262090479e+00 1.6297999783715396e+00 + -2.7732165734462061e-01 1.2317067476494072e+00 1.9091963160356573e+00 + -3.7792170343277914e-01 1.2337699609763235e+00 2.2076014164547435e+00 + -5.1966040754103016e-01 1.1719757632277099e+00 2.5076231050572639e+00 + -6.8637004547599356e-01 1.0439180046329435e+00 2.7901339429134557e+00 + -8.4595187832869190e-01 8.5882062408332638e-01 3.0419405817642429e+00 + -9.6492718507189601e-01 6.3240799953646376e-01 3.2551878182850986e+00 + -1.0170714656581596e+00 3.7987271205017781e-01 3.4256503619095047e+00 + -9.8008083174851257e-01 1.2974441200947828e-01 3.5500546779282969e+00 + -8.4381285545993456e-01 -8.4328868077673036e-02 3.6380324561436486e+00 + -6.0974384381609770e-01 -2.7206578543390070e-01 3.7493248070197445e+00 + -2.7057418870016486e-01 -4.1991446324036652e-01 3.9528515500984986e+00 + 9.7564395091708223e-02 -6.9789485296927767e-01 4.2136047868638578e+00 + id 11463 + loc 8.8938313722610474e-01 5.3818929195404053e-01 1076 + blend 0.0000000000000000e+00 + interp 4.1946350396368637e-01:3.9220180318979331e-01:6.6808135046989880e-01:3.2989246205877892e-01:1.5612857293844700e+00:3.1932430517014271e-01:2.3359857242744360e+00:4.0778973212246011e-01:3.2481189829379664e+00:4.1945930932864672e-01:3.9992622732229135e+00 + CVs 20 + 1.6645881129507051e-01 3.6435665255010952e-01 -2.0289869301767058e-02 + 3.1740686054666845e-01 7.3617977942651558e-01 -6.3145219134854699e-02 + 4.6038024603186556e-01 1.1135759313330427e+00 -1.1202391052902320e-01 + 5.9035489156905319e-01 1.4970126440312779e+00 -1.4603838226981344e-01 + 7.0269691105186116e-01 1.9163285395279546e+00 -1.4570332469252856e-01 + 8.1829280226944912e-01 2.4176520655446718e+00 -1.4832946966892985e-01 + 9.8480442058568196e-01 2.9697491778368557e+00 -3.0007575606225334e-01 + 1.2338658553557491e+00 3.3941982653822365e+00 -6.7679536965707143e-01 + 1.5634185007691421e+00 3.5619601333661572e+00 -1.1459854108715959e+00 + 1.9439531417487499e+00 3.5052282903842000e+00 -1.5168039333183501e+00 + 2.3422154440013636e+00 3.3452616755280973e+00 -1.7048217301855337e+00 + 2.7509335620074893e+00 3.1551703866948917e+00 -1.7332621954628058e+00 + 3.1816976207855330e+00 2.9319135289726099e+00 -1.6448778370943897e+00 + 3.6296194715291787e+00 2.6257717448215532e+00 -1.4546625360917358e+00 + 4.0163099922504930e+00 2.2065754853178534e+00 -1.1527520887333513e+00 + 4.2008454000227058e+00 1.7816843100949074e+00 -7.3234981461801874e-01 + 4.0987613629935762e+00 1.6021188331364868e+00 -2.5956126585384803e-01 + 3.9008222712533005e+00 1.7120413645896515e+00 7.6220920236337406e-02 + 3.7577941270361830e+00 1.6929241636721950e+00 4.5460341593108711e-01 + id 11464 + loc 5.3354641422629356e-03 6.7807632684707642e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0579114474232625e-01:3.1526301947571256e-01:6.8036318325403078e-01:4.0578708683087883e-01:1.0481233220983015e+00:3.1028317496431074e-01:1.6196268962587124e+00:3.3898046224571760e-01:2.3710534906784781e+00:2.5917545179695461e-01:3.0215529252072262e+00:2.7864470777029088e-01:3.8493280497544697e+00 + CVs 20 + 1.9770803226935221e-01 3.7023918815849477e-01 -6.5468407884273994e-02 + 3.5571915274713167e-01 7.5404804703771866e-01 -1.4522289686827811e-01 + 4.9321360452839874e-01 1.1374429869120715e+00 -2.3576390893856347e-01 + 6.1342740662236517e-01 1.5099078112184541e+00 -3.2616391296115343e-01 + 7.1641951314004060e-01 1.8949424829752035e+00 -4.0121010374165655e-01 + 8.1242085482839976e-01 2.3236372724311805e+00 -4.7543774158764418e-01 + 9.1935408753884729e-01 2.7720050350658028e+00 -6.4061643146053693e-01 + 1.0445542139231454e+00 3.1299830609823140e+00 -9.8389757599326844e-01 + 1.1897359407234247e+00 3.2922875535638414e+00 -1.4739529957900293e+00 + 1.3687468284457389e+00 3.2205465520860619e+00 -2.0051178732668338e+00 + 1.6086800279329361e+00 2.9475518220800678e+00 -2.4774058556919991e+00 + 1.9194933978459410e+00 2.5473064859125016e+00 -2.8216499581326859e+00 + 2.2703802538468678e+00 2.0840956761504636e+00 -3.0284616871653416e+00 + 2.6054091821848653e+00 1.5878079467510715e+00 -3.1293534654346380e+00 + 2.8451471357850671e+00 1.0743788561760763e+00 -3.1515540828525279e+00 + 2.9476378810713944e+00 5.4184069716534577e-01 -3.0964689183243048e+00 + 2.8794921977179246e+00 7.0911018220317090e-03 -2.8976009998740646e+00 + 2.5790275088370738e+00 -3.7562835065838995e-01 -2.5526568699590904e+00 + 2.2417488279418438e+00 -6.6815828489825990e-01 -2.2379975534617600e+00 + id 11465 + loc 5.2234047651290894e-01 9.2041289806365967e-01 1077 + blend 0.0000000000000000e+00 + interp 5.7091589694338918e-01:4.1566131861988687e-01:2.9557922815177218e-02:3.1724026042715259e-01:6.2103528714166134e-01:3.4325624921425918e-01:1.4124292648571712e+00:5.4910228305277042e-01:1.9677156052153402e+00:5.7091018778441982e-01:2.2491026340870173e+00:3.6149101805564876e-01:2.9600746985815771e+00:4.0142247838709427e-01:3.4831197292152964e+00 + CVs 20 + 1.3975464577455876e-01 3.9425192747856491e-01 -1.5673302003108114e-01 + 2.8043448223030354e-01 7.8588907714621037e-01 -3.3901502175054504e-01 + 4.0931605526963266e-01 1.1757586513019527e+00 -5.5344467893712745e-01 + 5.1712563512796561e-01 1.5544536290049975e+00 -8.1262485000626317e-01 + 6.0776215085405361e-01 1.9101066512959384e+00 -1.1270900220102968e+00 + 7.0841342564753362e-01 2.2326492448300561e+00 -1.4987485296571992e+00 + 8.5541013922280373e-01 2.5086968561660332e+00 -1.9197548565847042e+00 + 1.0702257852693617e+00 2.7192507756439883e+00 -2.3742275198008875e+00 + 1.3575108363349913e+00 2.8378377651494424e+00 -2.8468620187966849e+00 + 1.7052459881747022e+00 2.8212010659351705e+00 -3.3181417734980925e+00 + 2.0532835284741733e+00 2.6163614559296420e+00 -3.7580838836517101e+00 + 2.2713805937196643e+00 2.1847936957574321e+00 -4.1164811710584770e+00 + 2.2283800713709123e+00 1.6188413330148765e+00 -4.3080119202153320e+00 + 2.0036641761919718e+00 1.1113641611691683e+00 -4.3305512524965515e+00 + 1.7083179141166895e+00 7.1092528561035284e-01 -4.2483259120792596e+00 + 1.3344029208135377e+00 5.2884940687007842e-01 -4.0969423719509477e+00 + 1.0110947280755289e+00 7.7897297188152170e-01 -3.9490545764352771e+00 + 9.4289240028458887e-01 1.1298378499696005e+00 -3.8409674920026857e+00 + 6.7737423893326676e-01 1.1832334652915615e+00 -3.6647239539185095e+00 + id 11466 + loc 4.4383221864700317e-01 2.1283523738384247e-01 410 + blend 0.0000000000000000e+00 + interp 3.9850583918858795e-01:3.9850185413019606e-01:1.6347818793437985e-01:3.4128069118347432e-01:8.5892074795296991e-01:3.5147979889337277e-01:1.2513630839075307e+00:2.9591186700710870e-01:2.0116176155985519e+00:3.8444984471391919e-01:2.8804691391985893e+00:3.4138971333679979e-01:3.5541015124131361e+00 + CVs 20 + -1.5378974550779453e-01 1.0375089321577433e-01 -2.6926814324253867e-01 + -2.6609320513369705e-01 1.8624080579638336e-01 -5.3318304266617567e-01 + -3.6132927122682262e-01 2.4582269043822511e-01 -7.9887679841342929e-01 + -4.4744414422522216e-01 2.8294402670572028e-01 -1.0671598670804103e+00 + -5.2343084713928612e-01 2.9917272163191433e-01 -1.3333888450915237e+00 + -5.8498331223119271e-01 2.9610457091846454e-01 -1.5901967688023229e+00 + -6.2398856901881705e-01 2.7520665692622726e-01 -1.8275382276452614e+00 + -6.3316611571718484e-01 2.3736734847678809e-01 -2.0335519761487726e+00 + -6.1105776730149675e-01 1.8281709932494827e-01 -2.1958194339060322e+00 + -5.6554302026215364e-01 1.1200849174786809e-01 -2.3047272818518407e+00 + -5.1402774241692373e-01 2.6772795462796761e-02 -2.3590724262051053e+00 + -4.7413049215314590e-01 -6.6281806493443396e-02 -2.3709064871025034e+00 + -4.4565429814693702e-01 -1.5280162739703218e-01 -2.3592302396568519e+00 + -4.1406023918093449e-01 -2.1970804203231009e-01 -2.3435421196569330e+00 + -3.7291761344668312e-01 -2.6632528671472477e-01 -2.3422139062094658e+00 + -3.2449779676544632e-01 -2.9790327901977798e-01 -2.3628490249432117e+00 + -2.6946924542644823e-01 -3.2160365768050492e-01 -2.4136447167911887e+00 + -2.1636208353815317e-01 -3.4870192619508134e-01 -2.4995453506590883e+00 + -2.5299143579706784e-01 -4.0874071041915960e-01 -2.5669137753732745e+00 + id 11467 + loc 2.9854202270507813e-01 7.4522204697132111e-02 1053 + blend 0.0000000000000000e+00 + interp 4.2465088352429703e-01:2.3037617141783398e-01:9.7060360629498854e-01:3.4698478996411186e-01:1.8849644920540167e+00:2.3400370078129346e-01:2.0997055386612828e+00:2.7956206634136477e-01:3.0658081666770229e+00:4.2464663701546179e-01:3.9844236311970072e+00 + CVs 20 + 4.3387652861786907e-01 4.6972105442101675e-01 1.6655915465206522e-01 + 7.3942593643631283e-01 8.9158070588703020e-01 3.7333433915555891e-01 + 9.6233571832272524e-01 1.2694172917991984e+00 6.2656013121802256e-01 + 1.1300953130490052e+00 1.5867924969607030e+00 9.4235046634867048e-01 + 1.2498641932053500e+00 1.8136106791158404e+00 1.3208985194273184e+00 + 1.3201377228192541e+00 1.9316604543368427e+00 1.7414794137844840e+00 + 1.3328568458978776e+00 1.9367912260012805e+00 2.1618629168239938e+00 + 1.2803147173647733e+00 1.8454030181192120e+00 2.5247507337595012e+00 + 1.1672912710665924e+00 1.6997030017972623e+00 2.7749604081734818e+00 + 1.0216178973958865e+00 1.5622080749467950e+00 2.8803946130008833e+00 + 8.8721131349552418e-01 1.4921457207958100e+00 2.8614485384403321e+00 + 7.8848960211839092e-01 1.5033693761139189e+00 2.7933441590124866e+00 + 7.3152169016804558e-01 1.5812102715226102e+00 2.7361944874284823e+00 + 7.3874221305867127e-01 1.6975797308744531e+00 2.7083730103294532e+00 + 8.4606017531427902e-01 1.8061624526500566e+00 2.6982855088811704e+00 + 1.0947173708401652e+00 1.8735332389996358e+00 2.7144260619035929e+00 + 1.4976517645162044e+00 1.8174919177613722e+00 2.7606088491336811e+00 + 1.7856264110601856e+00 1.6095046959642336e+00 2.7303480673789253e+00 + 1.4500243701593876e+00 1.6848730234366887e+00 2.5281590776055207e+00 + id 11468 + loc 4.6868318319320679e-01 3.2089996337890625e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7377327113598933e-01:3.8291967032135965e-01:1.9105322080704701e-03:3.3890123430884328e-01:9.1034027951244223e-01:4.7376853340327801e-01:2.1265748609228048e+00:3.4127262072720443e-01:2.9668931535639542e+00:4.4321910912575357e-01:3.4006477771443566e+00 + CVs 20 + 1.5054399676992075e-01 2.9801475650942261e-01 4.4499539705657087e-01 + 2.5150347756218955e-01 5.4591421312740296e-01 8.2316013745106154e-01 + 3.7458877708343541e-01 7.8237135716014050e-01 1.1649283210928294e+00 + 5.0567917191342471e-01 9.9933019521975142e-01 1.4770058604611329e+00 + 5.8763748524106274e-01 1.1855306742790357e+00 1.7830794078071583e+00 + 5.9369219983705923e-01 1.3272697270965623e+00 2.1000552841131315e+00 + 5.2900341911786697e-01 1.3971521822655313e+00 2.4057040969005481e+00 + 4.1042358464063033e-01 1.3812958631036625e+00 2.6503795958277947e+00 + 2.6770525354698593e-01 1.2917553505842250e+00 2.7789222273336969e+00 + 1.3677984535304355e-01 1.1575358564207803e+00 2.7945032923347379e+00 + 4.4069345924299785e-02 9.9796404499931290e-01 2.7373360059074314e+00 + 2.9780171970631875e-02 8.3231084542012967e-01 2.6364135224410790e+00 + 4.3100605855378449e-02 6.4948143452501683e-01 2.5173019092424349e+00 + -7.1444744005162875e-02 3.7026350933664087e-01 2.3614140466720102e+00 + -4.3477696826652590e-01 2.5852096493198196e-02 2.1976857955396261e+00 + -1.0904890254377149e+00 -1.6355734178356726e-01 2.1441166083168435e+00 + -1.8483639062690334e+00 1.2636500903533782e-01 2.3304441390855049e+00 + -2.2197102674771281e+00 6.8745023221505164e-01 2.5791704709229517e+00 + -2.4718745954347856e+00 9.4819155411957712e-01 2.6386502476752693e+00 + id 11469 + loc 5.3354641422629356e-03 8.6280113458633423e-01 1047 + blend 0.0000000000000000e+00 + interp 3.8865868873441073e-01:3.4567096557988991e-01:5.0259626954592240e-01:1.8585286735180512e-01:9.6981516289384706e-01:2.5759952852652634e-01:1.9338333060549440e+00:3.8865480214752340e-01:2.9894204592316411e+00:3.6770037976952930e-01:3.4133847259289829e+00 + CVs 20 + 1.3916383456969678e-01 6.2557004188790599e-01 -3.7529672176262541e-01 + 3.6477706350027223e-01 1.2767961872546676e+00 -7.2005710888014929e-01 + 6.9957044089098508e-01 1.9098175654137821e+00 -9.3636059102218239e-01 + 1.1319685050086370e+00 2.4242351297715965e+00 -9.2654132097841146e-01 + 1.5866639097092041e+00 2.7007878611045490e+00 -6.8074426133516752e-01 + 1.9732237352328739e+00 2.7091522693164598e+00 -2.9522121440790605e-01 + 2.2457409724630084e+00 2.4938603907053540e+00 1.3399555542117536e-01 + 2.4076424765730455e+00 2.1144203737836493e+00 5.5885477565504194e-01 + 2.4828720278372010e+00 1.6239465873209777e+00 9.4738705678341750e-01 + 2.5078794833051683e+00 1.0613785876229804e+00 1.2800243873720025e+00 + 2.5113886198029309e+00 4.2281308783566118e-01 1.5731875518614420e+00 + 2.4768379777950322e+00 -3.4221590225508947e-01 1.9001298956993513e+00 + 2.3548415761993953e+00 -1.2212921314301011e+00 2.3863535519816237e+00 + 2.1743289711590785e+00 -2.0438397725498212e+00 3.1576484788355774e+00 + 2.1372915322089026e+00 -2.5160963549801627e+00 4.1923278240362372e+00 + 2.4010869862289974e+00 -2.4824737706338027e+00 5.1912118998855643e+00 + 2.8643564641715131e+00 -2.0446635152639412e+00 5.9530827878037700e+00 + 3.3536710438501700e+00 -1.3772226074752880e+00 6.4315785401521897e+00 + 3.7960831243266995e+00 -6.6456239241143367e-01 6.7632204686747457e+00 + id 11470 + loc 5.4934227466583252e-01 3.1067615747451782e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4946646802230183e-01:3.2028826875536642e-01:8.8898333354299552e-01:2.8177225325756083e-01:1.5840033203027741e+00:4.4946197335762161e-01:2.3762568049089858e+00:4.1572945628698199e-01:3.0095525211348231e+00:2.6512365254886017e-01:3.7264106246179471e+00 + CVs 20 + -1.1649574827573840e-01 2.0910801502134105e-01 2.8031564098668521e-01 + -1.9060494589499016e-01 4.5311928685392222e-01 5.6382177418478008e-01 + -2.3978322458716123e-01 7.1147989521294197e-01 8.4985812993404664e-01 + -2.7994576976433150e-01 9.6790633879713994e-01 1.1421138311569037e+00 + -3.2342969487763640e-01 1.2119945632026221e+00 1.4467890986244558e+00 + -3.7846044087493302e-01 1.4329510756273449e+00 1.7635737236457207e+00 + -4.5197702436345721e-01 1.6195694763283144e+00 2.0864042828231106e+00 + -5.6077733997759704e-01 1.7609592788665873e+00 2.4110769616476806e+00 + -7.3353223916554711e-01 1.8406924657972086e+00 2.7321884941455301e+00 + -9.8520699356283770e-01 1.8413609619324396e+00 3.0300408456756363e+00 + -1.2880132291738806e+00 1.7676980574505139e+00 3.2746556200503329e+00 + -1.5917800677820475e+00 1.6438692791325775e+00 3.4513108116396385e+00 + -1.8768462882100840e+00 1.4679584417234457e+00 3.5750992438955591e+00 + -2.1479076760291362e+00 1.1999064001106761e+00 3.6629179866783170e+00 + -2.4008405425033179e+00 8.6957746135008063e-01 3.6972754585303531e+00 + -2.6270628492050476e+00 5.8009251951889484e-01 3.6620395449110386e+00 + -2.8022718473707435e+00 3.9057559095619143e-01 3.5753332791970540e+00 + -2.9566825678544388e+00 2.9315964342261358e-01 3.4506759960768383e+00 + -3.2060121636570775e+00 3.2823824571793891e-01 3.2621574005073448e+00 + id 11471 + loc 5.4374647140502930e-01 2.2135458886623383e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5128141277478334e-01:2.7257273218707612e-01:8.1788442804339156e-01:2.7462316110864976e-01:1.4374735946490032e+00:2.7958111330925789e-01:2.0386903203420461e+00:3.6550530556197036e-01:2.8212567656792724e+00:4.5127689996065562e-01:3.2557482982357864e+00:3.4251385114122851e-01:3.9122844788784539e+00 + CVs 20 + 1.5129121228744585e-01 3.1606661001972103e-01 -1.7008809820184689e-01 + 3.0230182363258457e-01 5.8959869714286528e-01 -2.8852270266100227e-01 + 4.3069079813383249e-01 8.4171860891614192e-01 -4.0648304515615252e-01 + 5.1668661457933629e-01 1.0592826908387400e+00 -5.3153476721482706e-01 + 5.5329458668350839e-01 1.2241235557294001e+00 -6.5270306201826722e-01 + 5.4803398257906877e-01 1.3578887867933418e+00 -7.9429783583639046e-01 + 5.5787899086347803e-01 1.5106197903347796e+00 -9.8737185238569103e-01 + 6.8304424957796650e-01 1.6915586789786685e+00 -1.1892122093175264e+00 + 9.3248367796523379e-01 1.8484084337578808e+00 -1.2856711741372040e+00 + 1.1872879459376244e+00 1.9405579622603062e+00 -1.2200615880167793e+00 + 1.3732584999136903e+00 1.9915611013545735e+00 -1.0304005606669215e+00 + 1.4866479512255100e+00 2.0390148231769132e+00 -7.4255833376991076e-01 + 1.4718923629803879e+00 2.0661660405002937e+00 -4.0797277166522250e-01 + 1.2643809333785256e+00 2.0247026047741157e+00 -1.9250427379966562e-01 + 9.0800105289160227e-01 1.8870651010635473e+00 -1.9114149961150251e-01 + 4.8554096338783270e-01 1.5915001886491205e+00 -3.5372092116828369e-01 + -3.2649513763244736e-02 9.6393612516012306e-01 -5.7385146139166965e-01 + -6.1814033129703505e-01 2.9427569162422057e-01 -4.1075708749989726e-01 + -6.4962963587348410e-01 4.7196791899757828e-01 -2.4478674703714726e-01 + id 11472 + loc 8.5650071501731873e-02 9.8241567611694336e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7415521169423841e-01:3.2178606082502181e-01:1.0080796611421472e-02:4.7415047014212147e-01:8.9239281090217393e-01:3.5732788914792168e-01:1.0854803871698693e+00:4.7299365942621102e-01:1.7537496415652056e+00:2.4177690207170202e-01:2.2216104893339894e+00:3.1606829027685424e-01:3.2503360619294428e+00 + CVs 20 + 2.7169393244426737e-01 3.3765298354386014e-01 -1.4634963509227011e-01 + 5.5575159372006455e-01 6.4913307238946982e-01 -3.2886610438747366e-01 + 8.5983798952116974e-01 9.2863386161569916e-01 -5.2611182883441998e-01 + 1.1831978452118410e+00 1.1731830011014315e+00 -7.2631768440602318e-01 + 1.5166866191808248e+00 1.3822930812965002e+00 -9.2675449805799381e-01 + 1.8402428837774489e+00 1.5533608310581426e+00 -1.1296631852426067e+00 + 2.1225441488647778e+00 1.6778183009716849e+00 -1.3314471799486023e+00 + 2.3321329112205280e+00 1.7476159107170499e+00 -1.4977754304947581e+00 + 2.4762129853484769e+00 1.7859106071551536e+00 -1.6070742260790905e+00 + 2.5909406917630786e+00 1.8025033553924705e+00 -1.7238496108016350e+00 + 2.6789478179900317e+00 1.7559890633675512e+00 -1.8962037354647281e+00 + 2.7297120377341981e+00 1.6109486591234110e+00 -2.1108143512832895e+00 + 2.7634374622526825e+00 1.3577139730581160e+00 -2.3425269522197216e+00 + 2.8285720630274387e+00 1.0095446793581269e+00 -2.5927392057994565e+00 + 2.9622382882504175e+00 6.2067746601975082e-01 -2.8936573707146227e+00 + 3.1582497784442682e+00 2.9968658934839992e-01 -3.2740126665228058e+00 + 3.3742293057210846e+00 1.5919900490390754e-01 -3.7026351631655965e+00 + 3.5240076793753041e+00 2.8715687877813234e-01 -4.0422225569081993e+00 + 3.5402742405493992e+00 7.3515911699444847e-01 -4.1827634731056822e+00 + id 11473 + loc 3.1247171759605408e-01 5.6249397993087769e-01 410 + blend 0.0000000000000000e+00 + interp 3.9128273074472236e-01:3.1596880843769437e-01:2.1205658456311349e-01:3.0324714439104267e-01:1.0061237645890300e+00:3.7161376893024994e-01:1.6379654631990870e+00:3.9127881791741492e-01:2.0709960609134010e+00:3.5885287435108715e-01:2.9935405931785164e+00:3.3166266044787235e-01:3.7528060070683136e+00 + CVs 20 + 2.1628847218568770e-01 2.2273068501416760e-01 -5.0801416133655332e-02 + 3.8171935031326382e-01 4.2224472846107819e-01 -8.8960347085238312e-02 + 5.3530148743014772e-01 6.1092809610265564e-01 -1.2479480983438218e-01 + 7.0007734234813124e-01 7.9745632710933234e-01 -1.5961209576221344e-01 + 8.7272922292154931e-01 9.7773367551292600e-01 -1.9404692500840715e-01 + 1.0424919788227047e+00 1.1460484406180935e+00 -2.3152613951191814e-01 + 1.1994721046689594e+00 1.2991822431834945e+00 -2.7444005666671334e-01 + 1.3407001503925748e+00 1.4372531122691434e+00 -3.2259128343686000e-01 + 1.4660950620564621e+00 1.5592083539248263e+00 -3.7570819129539063e-01 + 1.5772318723046941e+00 1.6625936739543878e+00 -4.3259144393713844e-01 + 1.6978031942137879e+00 1.7603943657984207e+00 -4.6575275859550769e-01 + 1.8793871194592433e+00 1.8835030248893494e+00 -3.9224653210879290e-01 + 2.1663851533375809e+00 2.0247022583471765e+00 -1.5926403621621732e-01 + 2.5603772726344611e+00 2.1188500952407812e+00 1.5571041686206444e-01 + 3.0170041444327205e+00 2.1218094899314801e+00 4.4505322788803359e-01 + 3.4990773419538410e+00 2.0325760706157388e+00 6.7188969473633531e-01 + 3.9799216361924401e+00 1.8624864064033115e+00 8.3046330763908793e-01 + 4.4050469152029903e+00 1.6412414951712795e+00 9.0898054910753412e-01 + 4.5240737463656568e+00 1.4889424550394130e+00 8.6727800820377576e-01 + id 11474 + loc 8.7246984243392944e-01 8.5940456390380859e-01 1053 + blend 0.0000000000000000e+00 + interp 5.7712714685597588e-01:3.4641438875158576e-01:1.3214241859691445e-01:4.3325552419688451e-01:9.5851866727873802e-01:3.2408163297813353e-01:1.2613914085296589e+00:5.7712137558450738e-01:2.1329144002022069e+00:4.3583833358227736e-01:2.7510206339779741e+00:3.3711419058217879e-01:3.6902556430406892e+00 + CVs 20 + 2.2117909020957671e-02 4.0879917122377624e-01 3.4787069379468660e-01 + -4.1803827208825806e-02 7.6212834446737787e-01 6.5165005706123869e-01 + -1.7351916215889318e-01 1.0772786917469450e+00 9.3098728093421856e-01 + -3.6431002466312057e-01 1.3610662070458097e+00 1.1790870450821336e+00 + -5.8587188581365990e-01 1.6168140121593948e+00 1.3775815427160638e+00 + -7.8713038542673919e-01 1.8683612892754302e+00 1.5337489548079128e+00 + -9.3058355465841203e-01 2.1429988585702815e+00 1.6755706950395419e+00 + -1.0083916032718589e+00 2.4519891930792208e+00 1.8381558609591955e+00 + -1.0152600510976348e+00 2.7862328565940633e+00 2.0632268796123805e+00 + -9.2936590783294970e-01 3.0995651682331742e+00 2.4002819862474096e+00 + -7.4339302189166934e-01 3.2945091883206437e+00 2.8612267150548254e+00 + -5.1035615667385947e-01 3.3066329840368973e+00 3.3731550043710179e+00 + -2.8953376894274774e-01 3.1629000897254795e+00 3.8716869972754813e+00 + -1.1498801733406827e-01 2.9127994712755902e+00 4.3323967275748023e+00 + -3.4382903248060259e-03 2.6030596800987702e+00 4.7448856510146618e+00 + 4.9772105370388564e-02 2.2340449420778321e+00 5.1149411392842961e+00 + 3.7770242318583502e-02 1.7529947995867854e+00 5.4375765149718784e+00 + -7.2116403116845307e-02 1.1658869138083057e+00 5.6585364530367404e+00 + -1.4515326655062588e-01 9.2222866027530448e-01 5.7861038286773399e+00 + id 11475 + loc 5.5837059020996094e-01 3.2424494624137878e-02 1070 + blend 0.0000000000000000e+00 + interp 3.7474123277470678e-01:3.7226083890935724e-01:7.5917438704367068e-03:3.3975636670369264e-01:7.0695478316429550e-01:3.7473748536237905e-01:1.1867733236775579e+00:1.4729359813540135e-01:1.9399349068641374e+00:3.4455155657682734e-01:3.3911256237517304e+00 + CVs 20 + 4.1504433971933696e-01 3.3242021147886891e-01 -2.8353720150561501e-01 + 8.1083968644306936e-01 6.0428499265874125e-01 -4.3918808634905937e-01 + 1.1965053499326364e+00 8.6967062191115807e-01 -5.2129741693834797e-01 + 1.5657869853721433e+00 1.1655723502890885e+00 -5.4666516031599888e-01 + 1.8819041252409874e+00 1.4876571737241255e+00 -5.5512543128953973e-01 + 2.1237490226612867e+00 1.7942703865880323e+00 -6.4953673647208032e-01 + 2.3106178720016639e+00 2.0192083179122351e+00 -8.6518349824256924e-01 + 2.4923211785742518e+00 2.1466317230167595e+00 -1.1407134143080429e+00 + 2.7017121917515645e+00 2.1655820004714501e+00 -1.4233265662664669e+00 + 2.9342064159168544e+00 2.0293700689772027e+00 -1.6484363255714158e+00 + 3.1466153124312983e+00 1.7433433872581805e+00 -1.7500635930818209e+00 + 3.3089163524276728e+00 1.3927236373131848e+00 -1.7517391149474517e+00 + 3.4249865249347771e+00 1.0182360502565584e+00 -1.7041038828542434e+00 + 3.4976701413233919e+00 6.3079752814910206e-01 -1.6022363594115625e+00 + 3.5381059824887693e+00 2.5137860416414637e-01 -1.4347376866448607e+00 + 3.5081001734203419e+00 -9.1732283856282404e-02 -1.1761010513673547e+00 + 3.3079879264665073e+00 -3.2024295465213382e-01 -7.9885236017463024e-01 + 2.9374045190412792e+00 -3.3551807045398163e-01 -3.6047406799503123e-01 + 2.9158462349417711e+00 -7.4905765243962308e-01 -1.6287510227621993e-01 + id 11476 + loc 5.3091555833816528e-01 4.2107918858528137e-01 1047 + blend 0.0000000000000000e+00 + interp 3.5123912917711436e-01:3.5123561678582260e-01:1.0111930351022869e-01:3.1862101587725433e-01:9.9723854232474507e-01:3.0205848664216528e-01:1.9732070633478753e+00:3.1124161197120503e-01:2.5601025930012482e+00:3.2222021229866260e-01:3.0520624585356959e+00:3.5033484440608931e-01:3.7566791374773585e+00 + CVs 20 + -1.1656627813314273e-01 7.6929527144830523e-01 4.6612276930909607e-01 + -3.2059217983928634e-01 1.5065300640110719e+00 9.1797589524672052e-01 + -6.2455349017279105e-01 2.2306692004924793e+00 1.3151922406511436e+00 + -1.0554226741015875e+00 2.9033975141677901e+00 1.4897812958790801e+00 + -1.5788181719377234e+00 3.3949825371960838e+00 1.2920626717659178e+00 + -2.0803510847668965e+00 3.5906211777804038e+00 7.7784217809357070e-01 + -2.4499470699029602e+00 3.4479659414361210e+00 1.1590963356704154e-01 + -2.6472982765037045e+00 3.0279619006050140e+00 -5.2551934387506649e-01 + -2.6908244176478826e+00 2.4353360577811718e+00 -1.0531648670089717e+00 + -2.6103440808980753e+00 1.7548746878561206e+00 -1.4551086847631978e+00 + -2.4062721765273825e+00 1.0403792112816010e+00 -1.7958230888858029e+00 + -2.0556508995193452e+00 3.5663919334721572e-01 -2.1844439807366083e+00 + -1.5893835722540173e+00 -1.7512528681335815e-01 -2.6957179851013091e+00 + -1.1582495989706891e+00 -4.1231061428368188e-01 -3.3289385543200520e+00 + -9.6362864561872397e-01 -2.5192744920048460e-01 -3.9640664280463662e+00 + -9.6748278062255300e-01 1.6411958118218095e-01 -4.3361068047377298e+00 + -9.5693947585158856e-01 6.0348081481423410e-01 -4.5206592295802803e+00 + -9.1656778655091764e-01 1.0579447156744308e+00 -4.6871414578761055e+00 + -9.1786292468174313e-01 1.5957312770627001e+00 -4.9086398856964086e+00 + id 11477 + loc 3.5923695564270020e-01 5.6100285053253174e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4031164072353812e-01:3.6084441677216816e-01:1.5282250436245204e-02:4.4030723760713092e-01:7.7963391741965848e-01:3.2461004573920504e-01:1.2204022106779022e+00:3.7029748957473158e-01:2.0263524593082098e+00:3.7244906037262482e-01:2.8942776600166651e+00:2.4444984428027475e-01:3.4117921952558339e+00 + CVs 20 + 1.8767353303053702e-01 2.8692109282727074e-01 -1.8519393262160774e-01 + 3.4990077661498503e-01 5.8687863271293783e-01 -3.6646383985250108e-01 + 5.1484075206811863e-01 8.6184183863688202e-01 -5.5989632464376593e-01 + 6.9151067811665434e-01 1.0907347855696661e+00 -7.7295985240551057e-01 + 8.7556442988418914e-01 1.2604823010068242e+00 -1.0022723712973904e+00 + 1.0616653382629260e+00 1.3619146167449916e+00 -1.2380541875570275e+00 + 1.2440727841249206e+00 1.3924975120392444e+00 -1.4697352724808146e+00 + 1.4157794494173792e+00 1.3552138086907175e+00 -1.6890852116162030e+00 + 1.5685511360386650e+00 1.2573304992863823e+00 -1.8891030317712971e+00 + 1.6958431525654596e+00 1.1101208539698919e+00 -2.0633478064062620e+00 + 1.7917548631237079e+00 9.3079933888164945e-01 -2.2048961014951955e+00 + 1.8454969567212856e+00 7.4220084362900440e-01 -2.3072406235682670e+00 + 1.8499522054313213e+00 5.7706823998075663e-01 -2.3605465644133519e+00 + 1.8201072461026500e+00 4.6874219171677889e-01 -2.3505309953407725e+00 + 1.8042197846774135e+00 4.3959100197858270e-01 -2.2565425237276533e+00 + 1.8585840409199890e+00 4.2885822896972481e-01 -2.0796265122895359e+00 + 1.8922963669535928e+00 2.5187121554366443e-01 -1.8938194706630282e+00 + 1.7084896073925706e+00 -7.4542293490867717e-02 -1.8138741654198713e+00 + 1.3676072152148280e+00 -9.5473057494166680e-02 -1.8363006441814109e+00 + id 11478 + loc 5.9231269359588623e-01 6.2891536951065063e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5653073901152382e-01:3.5545589194304966e-01:8.2555715292188525e-03:2.6278374548231048e-01:5.4951714921228123e-01:3.5652717370413373e-01:1.5132642255374114e+00:2.9645558903624614e-01:2.0299487193290600e+00:3.5425221695705733e-01:2.9498457039719286e+00:3.4412352928931489e-01:3.4189192364536369e+00 + CVs 20 + 2.1030741838723011e-01 2.9931907476022923e-01 -1.8762432721846170e-01 + 4.5560380712938714e-01 5.9571127886446251e-01 -3.4428162399584350e-01 + 7.1370554035493727e-01 8.7862670809814292e-01 -4.9704617224485015e-01 + 9.7569612182703114e-01 1.1359327266645560e+00 -6.5770346121699430e-01 + 1.2400363886948378e+00 1.3489088464775587e+00 -8.3283266542632151e-01 + 1.5083378677876744e+00 1.4984188697080927e+00 -1.0296910146981260e+00 + 1.7860260061061290e+00 1.5803463962493201e+00 -1.2544172394020441e+00 + 2.0754355281283137e+00 1.5972167907398525e+00 -1.5114800377720727e+00 + 2.3675860466373768e+00 1.5457217165310273e+00 -1.7965080066194159e+00 + 2.6456578772487198e+00 1.4221626961281044e+00 -2.0931286647043632e+00 + 2.8921893304017336e+00 1.2271673520639945e+00 -2.3802478446734936e+00 + 3.0911055674509567e+00 9.6211230985171670e-01 -2.6454646866807097e+00 + 3.2251455645310290e+00 6.2460213050218261e-01 -2.8948001577610625e+00 + 3.2650341449469122e+00 2.0057483545363008e-01 -3.1668001720394474e+00 + 3.1490781319810113e+00 -3.1291928606249231e-01 -3.4956467478680588e+00 + 2.8124656834411379e+00 -8.5257016677323549e-01 -3.8576044159131033e+00 + 2.2445007200855946e+00 -1.3139436594747724e+00 -4.1893979011779274e+00 + 1.5628496696343608e+00 -1.6168548242186800e+00 -4.4125033249977310e+00 + 1.1419268048631277e+00 -1.8173710111015784e+00 -4.4761928584574919e+00 + id 11479 + loc 2.8324779868125916e-01 4.9701396375894547e-02 1075 + blend 0.0000000000000000e+00 + interp 4.5211835281945201e-01:2.8945063816120237e-01:8.5995631949589080e-01:3.4428922825862779e-01:1.8131490986428491e+00:3.0773529663570814e-01:2.7713103635040435e+00:3.0489394073838150e-01:3.5947884148782494e+00:4.5211383163592384e-01:3.9854355299913342e+00 + CVs 20 + -2.0639453951184397e-01 2.5631256236591693e-01 5.8297711167401234e-02 + -4.1913572502743646e-01 5.4477262202101684e-01 1.4371116396472106e-01 + -6.3265604620877136e-01 8.6613133824591759e-01 2.4812027569679079e-01 + -8.6663660479500504e-01 1.2189933326914810e+00 3.4690801506298491e-01 + -1.1541977400143257e+00 1.5935725679683381e+00 4.0182678965958640e-01 + -1.5111416855707804e+00 1.9636132542068205e+00 3.7540888074981282e-01 + -1.9301745673281370e+00 2.2844144742381065e+00 2.3349615487006792e-01 + -2.3737030448516854e+00 2.4815300578359381e+00 -5.5277246621268317e-02 + -2.7499778862766528e+00 2.4523471957991050e+00 -4.9319542999172561e-01 + -2.8919840587820764e+00 2.2064954076780481e+00 -1.0317889529948294e+00 + -2.9073825213507010e+00 1.9039379559567946e+00 -1.4862488238081561e+00 + -2.9356391008551674e+00 1.4591275128369203e+00 -1.8370943549949998e+00 + -2.9306754901239138e+00 8.5491901173922846e-01 -2.0077859092868269e+00 + -2.8349633290949234e+00 2.3835671459456409e-01 -2.1188722133790954e+00 + -2.5953328068952697e+00 -3.0292094041312445e-01 -2.3893056055409421e+00 + -2.2455483358463804e+00 -6.2713530055034772e-01 -2.9130024351730257e+00 + -1.9100515155447197e+00 -5.9296586708837262e-01 -3.6143824093239347e+00 + -1.6598113610792142e+00 -3.6282517101302392e-01 -4.2567306395165385e+00 + -1.4254673925223256e+00 -5.1559223902839402e-01 -4.7266620452335495e+00 + id 11480 + loc 5.3091555833816528e-01 3.3092659711837769e-01 1074 + blend 0.0000000000000000e+00 + interp 3.0745821788096778e-01:3.0745514329878898e-01:5.9706289540776447e-01:3.0544761431941037e-01:1.3628765406923686e+00:2.6028611927633211e-01:2.0734352580572120e+00:2.6285669168571157e-01:2.9616684481356623e+00:2.8514727382279814e-01:3.9861130182282691e+00 + CVs 20 + 2.1403126579435418e-02 3.6147463721106660e-01 1.5650533135565725e-01 + 3.1199945292692571e-02 7.0457340330488927e-01 3.3170318081424216e-01 + 4.0603015707778967e-02 1.0257384093627311e+00 5.0474030921202273e-01 + 4.6673457595714701e-02 1.3287286565280643e+00 6.7133162050802409e-01 + 3.6923910118584230e-02 1.6204164180004397e+00 8.4257249168134563e-01 + -1.4627755725246661e-03 1.8979521726939093e+00 1.0379221110333370e+00 + -6.4549953755200451e-02 2.1360145987865753e+00 1.2655500732222684e+00 + -1.3102943112872889e-01 2.3130224395719803e+00 1.5130137230889253e+00 + -1.8172674103079312e-01 2.4295510934078508e+00 1.7590031204515957e+00 + -2.0817294490226751e-01 2.4999828354937881e+00 1.9830788596041813e+00 + -2.1248575782698359e-01 2.5447634105881094e+00 2.1691503592403967e+00 + -2.0651084367535549e-01 2.5853370327938339e+00 2.3108823019366440e+00 + -2.0711561045430654e-01 2.6354534838917845e+00 2.4215266612094695e+00 + -2.2570816895850254e-01 2.6948469358555869e+00 2.5300879053710803e+00 + -2.6342363864052992e-01 2.7503593091772882e+00 2.6624106355086101e+00 + -3.2037533676513430e-01 2.7835410511429828e+00 2.8247771990047847e+00 + -3.9577200101019205e-01 2.7729179714648624e+00 3.0087045355084170e+00 + -4.5482865277445861e-01 2.6899953462719259e+00 3.1807086816453252e+00 + -3.5516271267512189e-01 2.5069600886955925e+00 3.1151375622726740e+00 + id 11481 + loc 4.9757245182991028e-01 9.5618605613708496e-01 410 + blend 0.0000000000000000e+00 + interp 4.3583599524494776e-01:3.3379518376121187e-01:2.5086161920772598e-01:4.3583163688499532e-01:1.0406688244401745e+00:2.5933404806922888e-01:1.9998138296838253e+00:3.7145159054372417e-01:2.7495781930816818e+00:3.7991921770082565e-01:3.7677102890915846e+00 + CVs 20 + 4.3771744293622739e-01 1.1498748993580271e-01 -1.9492888766639138e-01 + 7.6334272712522078e-01 1.8292379543744708e-01 -3.6190221316302529e-01 + 1.0589320330699801e+00 2.3729502006759967e-01 -5.1744672599333585e-01 + 1.3618380357242108e+00 2.9503861107209545e-01 -6.6927563618728481e-01 + 1.6713127067488478e+00 3.5368959908783865e-01 -8.1783014876153415e-01 + 1.9870335853125278e+00 4.0979175547406632e-01 -9.6195269285274354e-01 + 2.3093189867138428e+00 4.5963948854403835e-01 -1.0968399560025168e+00 + 2.6383592511956784e+00 4.9922030856162447e-01 -1.2150905427196368e+00 + 2.9729345410919179e+00 5.2443951946954681e-01 -1.3089325982701647e+00 + 3.3091561038740993e+00 5.3248614971551689e-01 -1.3713543499822831e+00 + 3.6407298783840556e+00 5.2197934816881841e-01 -1.3985892381250224e+00 + 3.9628540688433329e+00 4.8731810625449601e-01 -1.3976830502113540e+00 + 4.2714698314343096e+00 4.1408086186379811e-01 -1.3923304851099130e+00 + 4.5608732600271846e+00 2.8840003738683118e-01 -1.4102992571665611e+00 + 4.8253604295519192e+00 1.0551666071470223e-01 -1.4657260431080541e+00 + 5.0522804231094103e+00 -1.2962800173116040e-01 -1.5626158126181526e+00 + 5.2228137558352197e+00 -4.0117038858555709e-01 -1.7011948158536501e+00 + 5.3278324290891312e+00 -6.8982858350912313e-01 -1.8759338394326592e+00 + 5.4582437241709876e+00 -1.0161792805118650e+00 -2.0491725459972066e+00 + id 11482 + loc 3.6167910695075989e-01 9.7260946035385132e-01 1047 + blend 0.0000000000000000e+00 + interp 3.6107380311300274e-01:3.6107019237497162e-01:1.3776855083052841e-01:3.3392363112343643e-01:9.1263151903740836e-01:3.4894088135284584e-01:1.3758990209691651e+00:8.5387742905902023e-02:2.4205235524007200e+00:3.0650537749166218e-01:3.0016846347371580e+00:3.3549451987892176e-01:3.6679052986372698e+00 + CVs 20 + 1.1871831255793104e-01 6.9569048997211214e-01 -2.4104690730192938e-01 + 2.4508657329114439e-01 1.3658556823003063e+00 -4.8402502965484734e-01 + 4.0785271942094092e-01 2.0008320198113561e+00 -7.5012736108479006e-01 + 6.4911223274745145e-01 2.6047853152287934e+00 -9.9252576849981933e-01 + 1.0464674634816835e+00 3.1713168789949386e+00 -1.0450158422809614e+00 + 1.5933747368157216e+00 3.5774622902120896e+00 -7.7931165898028554e-01 + 2.1687379477180375e+00 3.6788011084483552e+00 -2.3109283650565504e-01 + 2.6363257592602380e+00 3.4160928000967283e+00 4.6394012742321000e-01 + 2.9139539072983056e+00 2.8333975302197318e+00 1.1320212480179661e+00 + 2.9739954378919542e+00 2.0525304559701714e+00 1.6314099452622592e+00 + 2.8304939991986666e+00 1.2177463428741009e+00 1.9420665761247458e+00 + 2.5086283165334446e+00 4.2381326709933997e-01 2.1786876417522372e+00 + 2.0662825048321323e+00 -2.6371481150804277e-01 2.5014461514709732e+00 + 1.6077746773413089e+00 -7.8211344449246001e-01 3.0452978141844405e+00 + 1.3291856609542279e+00 -9.9565233595933145e-01 3.8335347065011582e+00 + 1.3467860199904824e+00 -8.2594507157211883e-01 4.5976525734447993e+00 + 1.5682321292882260e+00 -4.0989433946953646e-01 5.1460789389022077e+00 + 1.9078215489683141e+00 9.2266250559184471e-02 5.4705958586694328e+00 + 2.3524520643975402e+00 5.8833460769547319e-01 5.6767680457782639e+00 + id 11483 + loc 9.3565475940704346e-01 4.9241682887077332e-01 1086 + blend 0.0000000000000000e+00 + interp 3.4166353116333217e+00:9.7340625260104885e-01:8.5968447537909665e-04:7.2720263739639823e-01:1.9093359664145182e-01:4.8080314452781209e-01:6.5610090251672393e-01:2.0472085074354476e-01:9.9884678764019852e-01:3.1657375994553233e-01:1.8723758596462703e+00:2.2392715223459523e+00:1.9734989021134410e+00:2.5497646308182644e+00:1.9802060600305329e+00:3.4166253116333216e+00:3.9641450548909143e+00:3.0589385713320607e+00:3.9758893136472762e+00 + CVs 20 + 2.4682243215967664e-01 4.5244175916672230e-01 -4.7841803769629088e-01 + 5.0833769851657318e-01 7.9589877298523981e-01 -8.3574294552570638e-01 + 7.9318719175595787e-01 1.0952766990716050e+00 -1.1754102978891492e+00 + 1.1076672330099149e+00 1.3745228091214239e+00 -1.5266333800795178e+00 + 1.4545668795192181e+00 1.6254535058261514e+00 -1.8535221643821536e+00 + 1.8285881175515686e+00 1.8387136789392164e+00 -2.1194010286784626e+00 + 2.2116073138022623e+00 2.0038195763327709e+00 -2.2934261389802644e+00 + 2.5669757229546066e+00 2.1068757951834267e+00 -2.3490774757784303e+00 + 2.8384027149020139e+00 2.1300326592336960e+00 -2.2762626366850225e+00 + 2.9965328822413051e+00 2.0690656690911595e+00 -2.1158586837298805e+00 + 3.0781530180522005e+00 1.9252890011058230e+00 -1.9300457440903962e+00 + 3.1332900369029986e+00 1.6799277086146538e+00 -1.7761263680849355e+00 + 3.1989455799705953e+00 1.3343565089647305e+00 -1.6811257851213655e+00 + 3.2729673556962080e+00 8.9422129396782724e-01 -1.5713970378186051e+00 + 3.3012766417155310e+00 3.6304852975624363e-01 -1.3387078318049310e+00 + 3.2245312508235218e+00 -1.5888674219743304e-01 -8.9728888671792095e-01 + 3.0566226425743115e+00 -4.7244792666441210e-01 -2.1125845314177952e-01 + 2.9024187775527563e+00 -4.3272962192227660e-01 5.9100098229348119e-01 + 2.8504202881209708e+00 -6.4908973271380743e-01 1.0719103344694634e+00 + id 11484 + loc 4.4813653826713562e-01 9.8189854621887207e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7636575057212932e-01:3.9162491316665426e-01:6.0576358701468580e-01:3.3728993604477658e-01:1.6859150372594218e+00:1.9216579791496530e-01:2.2102414390417877e+00:3.6274458290221684e-01:3.3684499619644850e+00:4.7636098691462364e-01:3.9417012098983668e+00 + CVs 20 + -2.4683294429855585e-01 3.2410945029794286e-01 2.3444913304716258e-01 + -4.4645288699643226e-01 5.9315244624971175e-01 4.4416906960791075e-01 + -5.9618453132188431e-01 8.4258022678919053e-01 6.8416133415126046e-01 + -7.3135019938217871e-01 1.0964403003555239e+00 9.4357919228314646e-01 + -9.1121308401346579e-01 1.3603885003075054e+00 1.1555302133598917e+00 + -1.1651574107275575e+00 1.6127774561396275e+00 1.2628040290015221e+00 + -1.4801091885364410e+00 1.8180334029566718e+00 1.2405727232582220e+00 + -1.8174328051679738e+00 1.9461241271336993e+00 1.0604914214534689e+00 + -2.0761133852821976e+00 1.9652273513119303e+00 7.1009662858468281e-01 + -2.1622088162318165e+00 1.8809756585624857e+00 2.9319449236215767e-01 + -2.1011820845393179e+00 1.7274955641359484e+00 -1.0619008130301077e-01 + -1.9260353931113143e+00 1.5080730923953825e+00 -4.6472795049752358e-01 + -1.6840174015177973e+00 1.2376441030546521e+00 -7.3745231846580506e-01 + -1.4769062209768362e+00 9.8445450349548635e-01 -9.1838810450572961e-01 + -1.3857275565928817e+00 8.2596473991499619e-01 -1.0541569941348841e+00 + -1.4303329522142212e+00 8.1016143976437394e-01 -1.1317752504692191e+00 + -1.5886803020264175e+00 9.3431403768657328e-01 -9.8695514660220263e-01 + -1.7011392650205235e+00 9.6428892236060482e-01 -6.4552656068741010e-01 + -1.8289095507329751e+00 1.0975978531288155e+00 -8.4905854163455574e-01 + id 11485 + loc 6.7143164575099945e-02 6.9415533542633057e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1224562371135703e-01:3.9088399325325296e-01:2.5971252263985023e-01:4.1224150125511994e-01:9.9968654937452872e-01:3.4545664075551563e-01:1.6368739543950630e+00:3.6884525654436368e-01:2.4324085190371481e+00:4.0888736182075558e-01:2.9946515656404462e+00:3.1583021650121496e-01:3.4490115011885027e+00 + CVs 20 + 7.7507452638744756e-02 2.7009030502089937e-01 4.8862360105188546e-02 + 1.3404488251362934e-01 5.8603094264436617e-01 8.2700091551836483e-02 + 2.0693197777606112e-01 9.5063650410740030e-01 9.0427715396635605e-02 + 3.2817926151889826e-01 1.3499044920249648e+00 5.8713927558992074e-02 + 5.1342370167091955e-01 1.7688629968690623e+00 -3.5545374714244682e-02 + 7.7717571865740553e-01 2.1758287789671975e+00 -2.1034617308147574e-01 + 1.1243277883621341e+00 2.5232675413241452e+00 -4.6653974125835618e-01 + 1.5433681616495034e+00 2.7656256129602244e+00 -7.8335944913800060e-01 + 2.0117703538709124e+00 2.8761052410768846e+00 -1.1283396771612824e+00 + 2.5027129648641013e+00 2.8479497614395646e+00 -1.4710436499541837e+00 + 2.9909091518523327e+00 2.6886614040840207e+00 -1.7959325844891152e+00 + 3.4559782670468397e+00 2.4084081173551688e+00 -2.1046958419747543e+00 + 3.8664500654749152e+00 2.0121932458080565e+00 -2.4066561209661059e+00 + 4.1719210883077826e+00 1.5073458514151552e+00 -2.7131994245699182e+00 + 4.3067110179922938e+00 9.1916936269386729e-01 -3.0382882090629360e+00 + 4.1986048283474808e+00 3.3718086386039259e-01 -3.3825355076501653e+00 + 3.8744469748837318e+00 -4.8254473762742833e-02 -3.7036136249961347e+00 + 3.5089158676428491e+00 -1.4557237567292702e-01 -3.9483117333152800e+00 + 3.2384318062954560e+00 -1.6309172082022050e-01 -4.0570642841332774e+00 + id 11486 + loc 3.6167910695075989e-01 7.6437485218048096e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7036378064177875e-01:4.7035907700397234e-01:8.9974731402398289e-01:2.5582587521524214e-01:1.2535460855061809e+00:4.3372968556384561e-01:1.9081615646487915e+00:2.7421571681815787e-01:2.7128655610125323e+00:4.4117575164436068e-01:3.0011835131273514e+00:2.8598728975303750e-01:3.9947497996226877e+00 + CVs 20 + 1.6719527529101721e-01 3.5360872665643561e-01 -2.6969444926750163e-01 + 3.7098659552760804e-01 6.9142147335570225e-01 -5.4095233658558251e-01 + 6.0660929412639852e-01 1.0128376470701885e+00 -8.1596454472978763e-01 + 8.6894376227761816e-01 1.3192111253388521e+00 -1.0925543745901249e+00 + 1.1463622292260454e+00 1.6072061247638603e+00 -1.3749494910438085e+00 + 1.4129886988105818e+00 1.8600543269834948e+00 -1.6859164228617269e+00 + 1.6351757372961100e+00 2.0454200202099524e+00 -2.0465701110777719e+00 + 1.7824551244592894e+00 2.1176770488195444e+00 -2.4409280630747356e+00 + 1.8475388075029551e+00 2.0548426497666696e+00 -2.8332677627237186e+00 + 1.8513516041992852e+00 1.8708031719083322e+00 -3.2171921667816274e+00 + 1.8260987681638621e+00 1.5842041835290284e+00 -3.5946311229565135e+00 + 1.8126603949941456e+00 1.2259493978299394e+00 -3.9792457299369777e+00 + 1.8517343600126899e+00 8.5453385081806676e-01 -4.4041145558595680e+00 + 1.9462974604396619e+00 5.8628339119035666e-01 -4.8956783041230594e+00 + 2.0369230058029615e+00 5.7519706524701009e-01 -5.4016897490308589e+00 + 2.0200441661545465e+00 8.8447429034581793e-01 -5.7265881921721729e+00 + 1.8117451802791360e+00 1.3070070604467670e+00 -5.6136691696767738e+00 + 1.5530322590170509e+00 1.5283378011876183e+00 -5.3265127256745783e+00 + 1.4290056858146465e+00 1.9673601977524620e+00 -5.4315773066244546e+00 + id 11487 + loc 1.9984354078769684e-01 1.1972626671195030e-02 1076 + blend 0.0000000000000000e+00 + interp 4.0853754488859334e-01:3.1125722690793428e-01:8.4282744523825659e-01:1.4893448934789119e-01:1.4172958044369239e+00:3.0897954017564083e-01:2.1814805674567719e+00:4.0853345951314446e-01:3.0210006454768381e+00:3.7062635052443438e-01:3.8106736368152117e+00 + CVs 20 + -2.0064672750333945e-01 2.6009609586822097e-01 -2.0165841419638258e-01 + -3.7901651380952162e-01 5.3381607070441806e-01 -3.9697408249895755e-01 + -5.7503378125379900e-01 7.8419007010274400e-01 -5.9555172079151242e-01 + -7.9903385289146933e-01 9.8951929882928025e-01 -7.9923724466503721e-01 + -1.0414142854509709e+00 1.1422507184730541e+00 -1.0063820530257717e+00 + -1.2876696002075743e+00 1.2361908018816501e+00 -1.2152003965974627e+00 + -1.5202103538601563e+00 1.2689579347836624e+00 -1.4229242663257731e+00 + -1.7257751694527179e+00 1.2467109970174095e+00 -1.6281338451344165e+00 + -1.8965158082857605e+00 1.1825311162708723e+00 -1.8302370585782681e+00 + -2.0290655927975028e+00 1.0934844594942004e+00 -2.0286562629803591e+00 + -2.1266712887904591e+00 9.9712600025554121e-01 -2.2249220331713966e+00 + -2.1994257807990838e+00 9.0803086210217177e-01 -2.4231655217522725e+00 + -2.2619142464538986e+00 8.3566316900620685e-01 -2.6263604562775598e+00 + -2.3287793676847413e+00 7.8675311318739838e-01 -2.8304727952343551e+00 + -2.4111853925171167e+00 7.7385342829955239e-01 -3.0219336937381773e+00 + -2.5242838860631536e+00 8.4220992639998182e-01 -3.1869036868111280e+00 + -2.7464779947995361e+00 1.1209048858449149e+00 -3.3264865899870251e+00 + -3.3481477815851846e+00 1.6355619831354755e+00 -3.4859801045217491e+00 + -3.3036125583272202e+00 1.4723033574329156e+00 -3.5825121092830474e+00 + id 11488 + loc 6.8014174699783325e-01 2.4829074740409851e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1279819101975423e-01:2.9765818861037280e-01:1.8045827577269935e-01:2.9187039816055294e-01:9.8858358792928103e-01:4.1279406303784405e-01:1.9732966627681483e+00:2.8010476784507304e-01:2.1888473459088509e+00:3.0104899359077014e-01:2.9364145602499141e+00:3.0396573097461310e-01:3.6650991767069105e+00 + CVs 20 + -8.6561637065530023e-02 1.9541326240578216e-01 1.5913782290837977e-01 + -1.3571108965152631e-01 4.2786346905928174e-01 3.1509352478104674e-01 + -1.6190313908661791e-01 6.7469508939169254e-01 4.3707371726901767e-01 + -1.8058506599102381e-01 9.2407027597393876e-01 5.1955846226608970e-01 + -2.1123161634838888e-01 1.1764834062920830e+00 5.8216976933980447e-01 + -2.7651990683558536e-01 1.4296252817195734e+00 6.4721888572877495e-01 + -3.8965399327273409e-01 1.6702238791359902e+00 7.3011300540952195e-01 + -5.5061798430209341e-01 1.8695938262621330e+00 8.3302978064253042e-01 + -7.4886391535156527e-01 2.0026986489150049e+00 9.3201441005656060e-01 + -9.7146035982510537e-01 2.0687185343490402e+00 9.8577394684957576e-01 + -1.2027124107870129e+00 2.0924126567500392e+00 9.7538394852303401e-01 + -1.4359184300394068e+00 2.1045703392966182e+00 9.1710158730596036e-01 + -1.6596719591478206e+00 2.1142190658088067e+00 8.0833253489130275e-01 + -1.7983541375559882e+00 2.1076170763272080e+00 5.8819463899548163e-01 + -1.7647770699405192e+00 2.0595271526181391e+00 2.2033847921348831e-01 + -1.5708368093057901e+00 1.9115376495846732e+00 -2.3345327456225839e-01 + -1.2492462201732530e+00 1.5658023640605372e+00 -6.9274593935605921e-01 + -1.0244659727886019e+00 9.9671348338916843e-01 -1.2305875663774490e+00 + -1.1848507329599816e+00 1.0281898135925389e+00 -1.4036661529476295e+00 + id 11489 + loc 4.4383221864700317e-01 2.8960862755775452e-01 1047 + blend 0.0000000000000000e+00 + interp 5.0546381660677120e-01:2.9680483416162939e-01:1.0576232017976461e-01:3.1395603297403035e-01:1.3043144333396148e+00:5.0545876196860517e-01:1.9952220689549207e+00:4.2692493124748887e-01:2.2960399202647945e+00:2.9131906991098538e-01:2.9320052774373924e+00:3.1124161197120503e-01:3.5773518861651188e+00 + CVs 20 + -4.7629246692228838e-01 7.1855373156777291e-01 -8.3770941355698750e-02 + -8.6943943516875444e-01 1.4022216053074736e+00 -2.0389206520750328e-01 + -1.1750297869117028e+00 2.0271667713069035e+00 -3.5657795313746399e-01 + -1.3633639674500855e+00 2.5544731593145560e+00 -5.4758444125267025e-01 + -1.4082138697523980e+00 2.9891349248380390e+00 -7.9782935156208690e-01 + -1.2790016935020998e+00 3.3383893268791818e+00 -1.1269635852184114e+00 + -9.6208389174203046e-01 3.5513044006178873e+00 -1.5038722926674783e+00 + -4.7733884483401079e-01 3.5635659100876196e+00 -1.8584909225144737e+00 + 1.1982397266396205e-01 3.3465429122725006e+00 -2.1139844650460562e+00 + 7.5585102394930559e-01 2.9039145122565699e+00 -2.1982176552563422e+00 + 1.3500732082702349e+00 2.2686981811868563e+00 -2.0598702661643640e+00 + 1.8642058180914780e+00 1.5283919374425459e+00 -1.6837445050383175e+00 + 2.3647592779519266e+00 8.2353131072719465e-01 -1.1086946230557733e+00 + 2.9712875264691969e+00 2.9721167990007458e-01 -4.7373249092983605e-01 + 3.7510644539623517e+00 1.1056738675532807e-01 -3.9121721622008887e-02 + 4.4940357710608803e+00 3.4549490024524543e-01 2.0905053951053576e-02 + 4.9799490978151955e+00 7.6384872993543107e-01 -1.3651524459653466e-01 + 5.3148919538968737e+00 1.1325392381017751e+00 -3.7559022960971677e-01 + 5.6211210233097137e+00 1.3215071928348281e+00 -6.6010163079974182e-01 + id 11490 + loc 9.0675252676010132e-01 2.4375994503498077e-01 410 + blend 0.0000000000000000e+00 + interp 4.4282119676851578e-01:3.5008131127393349e-01:3.5073930882152171e-01:4.2816703649878929e-01:1.0115925212703116e+00:4.4035335362060851e-01:1.4205418836680566e+00:3.6408897954962166e-01:1.9999343764874085e+00:4.4281676855654811e-01:2.9604935424933920e+00:3.8551029767937933e-01:3.4879368210945851e+00 + CVs 20 + -3.7688179746111822e-01 3.0622085973033936e-01 1.6393781125701276e-01 + -7.0917928809772035e-01 5.7355149102255676e-01 2.9368601369248648e-01 + -1.0441719288812747e+00 8.2889379134680397e-01 4.0217827756719593e-01 + -1.4030454098816549e+00 1.0771644253414405e+00 5.1266595161875661e-01 + -1.7861803042424578e+00 1.3067192682415381e+00 6.5805666724320100e-01 + -2.1823868204580585e+00 1.4994823278447014e+00 8.7005166986187110e-01 + -2.5684105933177510e+00 1.6347202305238673e+00 1.1631354202963224e+00 + -2.9233170931210148e+00 1.6930256281013334e+00 1.5280332621128616e+00 + -3.2487266460304109e+00 1.6578298530388835e+00 1.9424372791623270e+00 + -3.5570450322572396e+00 1.5104341980640921e+00 2.3751505115601339e+00 + -3.8442505728734813e+00 1.2336738019008977e+00 2.7695962968519363e+00 + -4.0943852067350797e+00 8.4015816699576518e-01 3.0733403805164183e+00 + -4.3049731803432136e+00 3.7914496283626842e-01 3.3001492903882728e+00 + -4.4909616858238977e+00 -1.0251738879181671e-01 3.5073320859802877e+00 + -4.6716274670226525e+00 -5.7553735210644152e-01 3.7475428179494070e+00 + -4.8613129478467911e+00 -1.0216948959036354e+00 4.0538123557812469e+00 + -5.0673980031763746e+00 -1.4447703671522250e+00 4.4151720422566871e+00 + -5.2996884842872687e+00 -1.8726207155538650e+00 4.7971575230864820e+00 + -5.5734042396665897e+00 -2.3328989030432679e+00 5.1849504881178330e+00 + id 11491 + loc 9.2057019472122192e-01 8.7251186370849609e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6686668481357102e-01:2.9017868644520256e-01:5.8042297449564773e-01:4.6686201614672290e-01:9.9920128512674777e-01:4.2338354212021645e-01:1.5136434393123772e+00:2.6320004745072140e-01:2.0691245120570612e+00:3.7484777234844296e-01:3.0110650613624959e+00:3.5739161659515423e-01:3.8524519285817731e+00 + CVs 20 + 7.5258337374772569e-02 3.0401955339229825e-01 -1.7469577024553337e-01 + 1.8031364614921266e-01 6.4639588821174199e-01 -3.7199758228491486e-01 + 2.9843772446208205e-01 1.0263797074860990e+00 -5.6633446072878435e-01 + 4.1735709285229261e-01 1.4362812109218326e+00 -7.6245058869817872e-01 + 5.2614454317267567e-01 1.8637821585313872e+00 -9.8505343186106686e-01 + 6.1127595813630753e-01 2.2866220133945601e+00 -1.2587359657412596e+00 + 6.6055444645622508e-01 2.6693043397574510e+00 -1.6036429583252341e+00 + 6.7007220154307567e-01 2.9616699682101233e+00 -2.0281886083012579e+00 + 6.5777638354080026e-01 3.1269921998181243e+00 -2.5145133623444225e+00 + 6.6595557672890471e-01 3.1776198516288083e+00 -3.0329057942865112e+00 + 7.3508228885373950e-01 3.1279811563040467e+00 -3.5563856995119334e+00 + 8.6950143845684280e-01 2.9533111216608399e+00 -4.0362350005785412e+00 + 1.0469414260334486e+00 2.6427289487391228e+00 -4.4086360340371469e+00 + 1.2600700434878076e+00 2.2465108853829809e+00 -4.6368639171426258e+00 + 1.4857548462181258e+00 1.8348516345710375e+00 -4.7359614532709564e+00 + 1.6493225450676654e+00 1.4481160990878976e+00 -4.7854734185552816e+00 + 1.7131717064193386e+00 1.0861334945787458e+00 -4.8766572811576321e+00 + 1.7606829595731013e+00 7.3183055699404909e-01 -5.0227568663035358e+00 + 1.9523822873443029e+00 3.7420167622015466e-01 -5.1330790085307072e+00 + id 11492 + loc 3.0078372359275818e-01 3.6744678020477295e-01 1070 + blend 0.0000000000000000e+00 + interp 9.8120735308056384e-01:4.7376853340327801e-01:1.4235987604258937e-01:7.3351095738524386e-01:4.7304277010952833e-01:9.8119754100703305e-01:8.2296420962990735e-01:3.4309432322788602e-01:2.6126455198923573e+00:4.5483726282469245e-01:3.0613644714554731e+00:4.1572079043833315e-01:3.8550069124669051e+00 + CVs 20 + 3.6374456232231300e-01 3.6457081301606142e-01 3.9373619005985633e-01 + 6.6450147466331810e-01 6.3273502152879990e-01 7.0989699769190895e-01 + 9.7424850408233732e-01 8.5372413100158884e-01 9.8482325570074036e-01 + 1.2869740555572389e+00 1.0671675603296260e+00 1.2886271134713323e+00 + 1.5228902908980890e+00 1.2671358720314996e+00 1.6610820066414185e+00 + 1.6305714413606771e+00 1.4172535943916040e+00 2.0867827932534393e+00 + 1.6130970466878247e+00 1.4876549151069554e+00 2.5190135472017552e+00 + 1.4872476406105406e+00 1.4752728296563666e+00 2.9186387359446870e+00 + 1.2612109409602470e+00 1.3861251511937971e+00 3.2476973496820936e+00 + 9.8119156617901315e-01 1.2268155896999351e+00 3.4510896787889020e+00 + 7.5462574720031950e-01 1.0287476003733020e+00 3.5238341705023370e+00 + 6.4859632366069198e-01 8.4137835120414139e-01 3.5365567110561362e+00 + 6.5194256102007131e-01 7.1299062586387674e-01 3.5644914466319428e+00 + 6.8266254877609100e-01 6.0253530363715990e-01 3.5987289069535926e+00 + 7.1231661291993664e-01 4.0956312046219123e-01 3.5792953544718329e+00 + 7.0420807595638002e-01 1.0149857078521418e-01 3.5068184758032954e+00 + 5.4806163370935601e-01 -3.1164794136731755e-01 3.4222345537810535e+00 + 9.5126975529008118e-02 -7.1445894119930675e-01 3.4256509420709707e+00 + -4.2531491991170012e-02 -7.8428781455702334e-01 3.5417374337028327e+00 + id 11493 + loc 7.9935614485293627e-04 6.8614035844802856e-01 1075 + blend 0.0000000000000000e+00 + interp 5.2545623236637762e-01:5.2545097780405403e-01:9.7183317576468031e-03:4.9861095776045095e-01:4.8798067246136467e-01:2.9947991902746590e-01:9.9978430815556973e-01:4.4370402991265834e-01:1.5732123916606586e+00:5.0297444487172072e-01:2.0023283999975758e+00:4.1355263572483253e-01:2.7050028767598402e+00:2.6284426104695774e-01:3.4414670373717273e+00 + CVs 20 + 7.3373721794639524e-04 3.4753920346005690e-01 -2.7036801795954052e-01 + 4.0324301032317850e-02 7.0300560329274653e-01 -5.2941512082943420e-01 + 9.4434987060169617e-02 1.0643474091563281e+00 -8.1454773909674183e-01 + 1.5338574998496241e-01 1.4185835474689836e+00 -1.1584213408190491e+00 + 2.2263116237690206e-01 1.7423298631213910e+00 -1.5800740000024931e+00 + 3.2098042015709505e-01 2.0100628965594227e+00 -2.0805095309465971e+00 + 4.7819217087473931e-01 2.1994745117932339e+00 -2.6379647287573502e+00 + 7.1724017632948767e-01 2.2931012313959429e+00 -3.2129093947794827e+00 + 1.0423961059515270e+00 2.2743275181640192e+00 -3.7583988597166149e+00 + 1.4308843256537793e+00 2.1228509583161310e+00 -4.2306435220995393e+00 + 1.8214718163481707e+00 1.8173450979132431e+00 -4.5991960234664431e+00 + 2.1109696204783508e+00 1.3418556203123124e+00 -4.8443309419091110e+00 + 2.1915736019593481e+00 7.4281307052118573e-01 -4.9295674234807931e+00 + 2.0769314929463434e+00 1.7076570915897837e-01 -4.8499186109743651e+00 + 1.8650410144577765e+00 -2.9080849903547379e-01 -4.6814114007215553e+00 + 1.5221558771084749e+00 -6.3458800606566912e-01 -4.5032957418049424e+00 + 9.1562965876775793e-01 -7.3152065773582209e-01 -4.3796459199597129e+00 + 2.9818165473193503e-01 -4.5344767591772017e-01 -4.3018608346349456e+00 + -4.4655355936686347e-03 -5.2418588417595857e-01 -4.1880684533506667e+00 + id 11494 + loc 7.9994201660156250e-01 2.8219729661941528e-01 1077 + blend 0.0000000000000000e+00 + interp 4.8009906107565237e-01:3.5526486696719556e-01:5.5000163439943517e-02:3.1001204885712708e-01:7.0736301995589357e-01:4.0918961406502607e-01:1.0082611576775982e+00:3.1355297747629290e-01:1.9837621401844721e+00:3.4366573856770727e-01:2.4761506810377267e+00:3.3684929360761706e-01:2.9943358951681383e+00:4.8009426008504164e-01:3.7086416850645461e+00 + CVs 20 + -8.6163884158348858e-02 2.7369074109562352e-01 3.0541023852693577e-01 + -1.6053350438144831e-01 5.6702482141698940e-01 5.8993020165933918e-01 + -2.4592632821888244e-01 8.4524167279687989e-01 8.8919195230395032e-01 + -3.6044628739988305e-01 1.0809983704050192e+00 1.2216115387282320e+00 + -5.1577696464097811e-01 1.2531418675108825e+00 1.5862535590233324e+00 + -7.1805570876890301e-01 1.3448828611691086e+00 1.9676953341419632e+00 + -9.6582685785329270e-01 1.3476280758768153e+00 2.3390142351730017e+00 + -1.2501674789442363e+00 1.2653267979688985e+00 2.6728738529024283e+00 + -1.5543317021289513e+00 1.1142833914920749e+00 2.9550790795792965e+00 + -1.8585806983228690e+00 9.1578737450136960e-01 3.1925664233323512e+00 + -2.1430525254861927e+00 6.8831770063305242e-01 3.4030089371809744e+00 + -2.3892021182972347e+00 4.4610254438190222e-01 3.6016048521667856e+00 + -2.5860405646791147e+00 1.9969187039478498e-01 3.8008555219500439e+00 + -2.7308866026736927e+00 -4.8045286426216860e-02 4.0201332109561321e+00 + -2.8136992625121415e+00 -2.9585469385157759e-01 4.2759297201261592e+00 + -2.8251414828145238e+00 -5.2839527147971377e-01 4.5726056030380198e+00 + -2.7750469120616637e+00 -7.1060755232758477e-01 4.8965132024764086e+00 + -2.7029900856127602e+00 -8.0866349089527101e-01 5.2116992894046934e+00 + -2.6496026376178907e+00 -7.8115489930044735e-01 5.4832138232695158e+00 + id 11495 + loc 8.5263782739639282e-01 1.3707655668258667e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8937648341579976e-01:4.2600615059371583e-01:2.5193560041828322e-01:3.4399546029935446e-01:8.4803060814861708e-01:3.4489188716170827e-01:1.1716619486429702e+00:2.4643343692595715e-01:1.9203014226838770e+00:3.5139735281801476e-01:2.6299556609475743e+00:4.8937158965096561e-01:3.0018802192672949e+00:3.4677854113361478e-01:3.6427575905192335e+00 + CVs 20 + -1.6828368146970962e-01 3.5658164900526412e-01 2.2618063314599440e-01 + -3.2936228218635422e-01 7.2085235211259335e-01 4.4255699767460455e-01 + -4.8492727279925396e-01 1.0789810269189510e+00 6.7185964118804298e-01 + -6.2888080030898497e-01 1.4187766021261963e+00 9.2426233429488769e-01 + -7.5750914543654435e-01 1.7310334437936226e+00 1.2076286688460427e+00 + -8.8353440421343665e-01 2.0048683603100836e+00 1.5343617846996263e+00 + -1.0303123708917024e+00 2.2279013935958383e+00 1.9064094527115294e+00 + -1.2124170733907675e+00 2.3926547159690474e+00 2.3096189511772169e+00 + -1.4302248245452975e+00 2.4966489966202658e+00 2.7239273823749297e+00 + -1.6794719080368505e+00 2.5382378506143435e+00 3.1350808379753516e+00 + -1.9573240485602708e+00 2.5137972389954819e+00 3.5336804194076712e+00 + -2.2547869881468494e+00 2.4245667705463996e+00 3.9045614272979412e+00 + -2.5551242051734246e+00 2.2783280470084994e+00 4.2372671953148915e+00 + -2.8192616394540031e+00 2.0723436013330634e+00 4.5266553881253779e+00 + -3.0057099895936208e+00 1.8178705387911667e+00 4.7565349367557763e+00 + -3.1883739748285764e+00 1.5440571016060576e+00 4.9101507515805611e+00 + -3.5724405600927147e+00 1.1387631708876755e+00 4.9705294873181360e+00 + -3.9096444435860427e+00 3.9609606750783655e-01 4.9602616941051627e+00 + -3.7642536606139281e+00 4.1301833856164716e-01 4.9675287746390318e+00 + id 11496 + loc 3.1247171759605408e-01 7.6539540290832520e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2504051178688460e-01:3.0842983787746975e-01:2.7045441390902714e-01:2.8498946538304465e-01:9.9793967669137273e-01:3.0024407363698441e-01:1.6437787641360353e+00:3.6107019237497162e-01:2.1549705865209612e+00:3.3294350065661493e-01:2.9746729898416771e+00:4.6306699343138713e-01:3.2222144037689402e+00:5.2503526138176670e-01:3.7368617816531495e+00 + CVs 20 + 2.0231856811286780e-01 7.0012901813770712e-01 -4.3176385358996183e-01 + 4.0381920850017877e-01 1.3954539730049080e+00 -8.3302659910314936e-01 + 6.2711190378971793e-01 2.0919592045098914e+00 -1.1606828174522548e+00 + 9.1680967879297959e-01 2.7893835781945828e+00 -1.3105658934254061e+00 + 1.2916118843197006e+00 3.4219102481731829e+00 -1.1621236963689627e+00 + 1.6839485516121537e+00 3.8861748470236677e+00 -6.9384161826120794e-01 + 1.9953168655394711e+00 4.1004551744155453e+00 1.5895852805981825e-02 + 2.1529589942772205e+00 4.0255356174835466e+00 8.4270712776184231e-01 + 2.1392314669131900e+00 3.6667581534577449e+00 1.6613801088057312e+00 + 1.9749827955554531e+00 3.0593787907966101e+00 2.3556443038438708e+00 + 1.7106501343537033e+00 2.2914208628211017e+00 2.8412574112454112e+00 + 1.4080494867316826e+00 1.4896433980052255e+00 3.1486688711714295e+00 + 1.0989396796467885e+00 7.3048357311409839e-01 3.4588471458709122e+00 + 8.5005248239740328e-01 1.1017408547353313e-01 3.9938793256712541e+00 + 9.1838639719125437e-01 -8.2986527519065767e-02 4.7769388837157818e+00 + 1.3966901300202499e+00 2.2212002568813594e-01 5.3980612002899129e+00 + 2.0564297984604378e+00 7.0987585420351662e-01 5.7046396921786870e+00 + 2.7975588576813468e+00 1.2126387487860852e+00 5.8413716536044600e+00 + 3.5696157835357929e+00 1.6479295239706007e+00 6.1412396352518011e+00 + id 11497 + loc 4.7416725754737854e-01 7.0874476432800293e-01 410 + blend 0.0000000000000000e+00 + interp 4.2857810442555361e-01:3.2128925706775824e-01:9.8282081027493917e-02:3.4555129793214551e-01:1.0225921975870624e+00:3.9143407808753655e-01:1.8331341100921934e+00:3.7303580029323580e-01:2.2628058522922516e+00:3.8360803615439948e-01:2.9571086666861146e+00:3.5999394843251609e-01:3.2027642613054850e+00:4.2857381864450939e-01:3.8169739505208491e+00 + CVs 20 + 3.8500982847132570e-01 8.1190411760663148e-02 -2.0772952690311616e-01 + 7.0931216027657562e-01 1.2319208814963473e-01 -3.7158250776438806e-01 + 1.0248024610813573e+00 1.4827898184517085e-01 -5.0842586578936155e-01 + 1.3556170389459949e+00 1.6738931347736608e-01 -6.2576845727829622e-01 + 1.6983828149685265e+00 1.8017557775483217e-01 -7.2304508251052213e-01 + 2.0479916887578198e+00 1.8648842215794337e-01 -7.9562378800917033e-01 + 2.3961229996273654e+00 1.8635609289047128e-01 -8.3234483477426680e-01 + 2.7302861183638134e+00 1.7910276860818630e-01 -8.2004677965317030e-01 + 3.0344451798479022e+00 1.6323553058750617e-01 -7.5088861819520147e-01 + 3.2918013747476524e+00 1.4004308359978834e-01 -6.2516807200704783e-01 + 3.4933996415863193e+00 1.0979417910155886e-01 -4.5649683423572457e-01 + 3.6613634073616850e+00 6.1561662165860787e-02 -2.7719326100069136e-01 + 3.8504416606208220e+00 -2.6345510679240292e-02 -1.2269659074726186e-01 + 4.0875473331509804e+00 -1.6588311126433775e-01 -1.1098565320225573e-02 + 4.3550708540376455e+00 -3.5000925776208858e-01 5.2557077519393980e-02 + 4.6343337864453797e+00 -5.7028008289070664e-01 5.9034634275261233e-02 + 4.9123011372032197e+00 -8.1945660243291929e-01 -6.3094040078885416e-03 + 5.1690187476000862e+00 -1.0784201288155217e+00 -1.4385095048769764e-01 + 5.3642706641693012e+00 -1.2203927009750726e+00 -1.9582127470368865e-01 + id 11498 + loc 1.7373165488243103e-01 6.6220092773437500e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0886158956640906e-01:4.0885750095051343e-01:2.8192707985426502e-02:3.4184429347398915e-01:1.4719890502314228e+00:3.4895738320241698e-01:2.2388842137314366e+00:2.7790119055452994e-01:2.9815374344535730e+00:3.4343329585956534e-01:3.4299288211840295e+00 + CVs 20 + -3.0274898508155401e-01 4.5453670751372122e-01 3.5296642028590153e-01 + -5.1325881517822836e-01 8.1804760817945965e-01 6.2218850699147699e-01 + -6.5945758537568389e-01 1.1442233942272977e+00 8.8546250380837299e-01 + -7.9491375905777106e-01 1.4640135708519573e+00 1.1373067123557021e+00 + -9.6693456008310918e-01 1.7759298756944493e+00 1.3243315967498550e+00 + -1.1907726311341096e+00 2.0646291813077600e+00 1.4147440517561440e+00 + -1.4380878192515154e+00 2.3009949700911299e+00 1.4082539450616114e+00 + -1.6573215370543066e+00 2.4671161772387804e+00 1.3425500130157553e+00 + -1.8358664564800420e+00 2.5832960693382994e+00 1.2650375719016571e+00 + -1.9840427830772016e+00 2.6647675990447603e+00 1.1395745648530751e+00 + -2.0503576221993791e+00 2.6924524235766674e+00 9.2853441310950280e-01 + -2.0083200737329143e+00 2.6557711467609932e+00 6.6525576959780586e-01 + -1.8662627876778066e+00 2.5497493201264558e+00 4.4210944003072972e-01 + -1.6757927993421180e+00 2.3986224582067148e+00 3.8035215610574347e-01 + -1.4651486338623840e+00 2.2075362655607633e+00 5.0705778052448180e-01 + -1.2105506455118817e+00 1.9117426038255916e+00 7.5009679037051902e-01 + -8.5540229880254326e-01 1.3559613036590088e+00 9.7840710230501038e-01 + -5.0382754220375947e-01 6.2534304409217856e-01 7.8585367046830690e-01 + -5.3885758572739784e-01 5.8487733108938855e-01 6.3231663556511086e-01 + id 11499 + loc 5.4819786548614502e-01 8.9550501108169556e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6353071563594439e-01:2.7362670435264558e-01:6.8029658428557016e-02:4.5571373613521798e-01:1.0002289182598256e+00:4.0735056264266506e-01:1.8443484810603432e+00:3.0559079645326109e-01:2.2304088679385026e+00:4.6352608032878806e-01:3.0268788130748279e+00:3.4605453299679251e-01:3.6576125686329806e+00 + CVs 20 + 1.5041138888545263e-01 3.4403343535599656e-01 -2.8422810546287997e-01 + 3.2083576636516159e-01 7.0360335285259756e-01 -5.6097058436857805e-01 + 5.3131894409422176e-01 1.0696358933012950e+00 -8.4966995831317027e-01 + 7.8921235181936533e-01 1.4276871391519081e+00 -1.1583558333625394e+00 + 1.0866574973750349e+00 1.7569870908600511e+00 -1.4928187073696118e+00 + 1.4001160463131115e+00 2.0260763696099477e+00 -1.8661713571198675e+00 + 1.6973170566198428e+00 2.1899985409318838e+00 -2.2852047674860767e+00 + 1.9412195991501855e+00 2.1959600274640203e+00 -2.7179069804471405e+00 + 2.1137095220912894e+00 2.0358127058307360e+00 -3.0934531141268597e+00 + 2.2396243689045119e+00 1.7607080609795036e+00 -3.3724209737663351e+00 + 2.3518824604554562e+00 1.4279320310967423e+00 -3.5541103957819247e+00 + 2.4662658512253648e+00 1.0811722791669494e+00 -3.6575111746237554e+00 + 2.5806186047264479e+00 7.2107829517456201e-01 -3.7219192651699275e+00 + 2.7042945851963420e+00 2.8437195042515689e-01 -3.8089858531874947e+00 + 2.8798806695961487e+00 -2.7562088327580558e-01 -4.0180829910323119e+00 + 3.1532833750201998e+00 -8.8305479000461851e-01 -4.4900476033830321e+00 + 3.5328392159490778e+00 -1.2912770880767492e+00 -5.3209764994152877e+00 + 3.8515451655946049e+00 -1.2221033546653697e+00 -6.1777676948148983e+00 + 3.9002603265472504e+00 -9.3451615991767856e-01 -6.5212319118843469e+00 + id 11500 + loc 9.7282612323760986e-01 3.1265643239021301e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7077992849708505e-01:3.0060689411165858e-01:1.1478230006107926e-02:4.5156750711934240e-01:7.9665256621909508e-01:4.7077522069780009e-01:1.0803122703270955e+00:3.7283282954133473e-01:1.8325724178546201e+00:3.4507646148073257e-01:2.1008500393507115e+00:3.9265411280606966e-01:2.7247336915742442e+00:3.0058539166921311e-01:3.0646645282249501e+00 + CVs 20 + -1.0919103701645480e-01 2.5330887811689107e-01 2.1256496460802360e-01 + -1.8934078568065787e-01 5.2716464468465740e-01 4.0234378281594801e-01 + -2.6526307437044688e-01 8.0666858151185006e-01 5.6580490940736361e-01 + -3.5939646394429237e-01 1.0794035572148637e+00 7.0978517482813297e-01 + -4.9028638650006051e-01 1.3298068930499354e+00 8.4532023844425885e-01 + -6.6412114123499000e-01 1.5369051342501203e+00 9.7497471004964287e-01 + -8.6407025726565301e-01 1.6832331637049567e+00 1.0879595687074346e+00 + -1.0517913022133634e+00 1.7665577949383797e+00 1.1657058233020496e+00 + -1.2025392173632934e+00 1.8019058049445147e+00 1.2013051188209807e+00 + -1.3269593643237743e+00 1.7970614242576186e+00 1.1940403475388148e+00 + -1.4315796322656720e+00 1.7703027428267442e+00 1.1493186826104014e+00 + -1.5168634468788478e+00 1.7559168604707178e+00 1.0961498784740202e+00 + -1.5941105676431786e+00 1.7574289289864851e+00 1.0394530776693238e+00 + -1.6433419336864015e+00 1.7143792607911261e+00 8.7927484030910252e-01 + -1.6234126467017631e+00 1.5579443657447980e+00 5.2711971114138390e-01 + -1.5899993026813668e+00 1.2550327297626385e+00 4.7712184236626043e-02 + -1.6563554711447785e+00 8.2621868254103825e-01 -4.5885483983277792e-01 + -1.9706903537035316e+00 4.5303192241818391e-01 -9.1282233056768169e-01 + -2.3023040598030575e+00 4.7975580296564557e-01 -1.0366321621930097e+00 + id 11501 + loc 5.4293662309646606e-01 6.6554063558578491e-01 1077 + blend 0.0000000000000000e+00 + interp 3.6727766638408793e-01:3.6727399360742413e-01:6.7328191829185635e-01:3.3081089493887861e-01:1.0843402554022117e+00:3.3570713465109092e-01:1.8980668794950613e+00:3.5324612869455663e-01:2.8675767458918195e+00:3.2053556882313639e-01:3.8897155290488357e+00 + CVs 20 + 2.2146447618155574e-01 2.5405995700051703e-01 -2.2340849467502952e-01 + 4.1766730945377950e-01 5.5271439047892756e-01 -4.2897408430170619e-01 + 6.2508952054222200e-01 8.5017619835393199e-01 -6.4267500014441159e-01 + 8.5943846490430131e-01 1.1215131719893097e+00 -8.7795301445417140e-01 + 1.1228245784964683e+00 1.3523643331890296e+00 -1.1326970016596141e+00 + 1.4188798030231216e+00 1.5301019414277877e+00 -1.3932543461758267e+00 + 1.7499093654270961e+00 1.6493524701394873e+00 -1.6417282005303651e+00 + 2.1147146348555212e+00 1.7119359198880519e+00 -1.8667338346153026e+00 + 2.5085838687638637e+00 1.7209855204350712e+00 -2.0655588656080890e+00 + 2.9198902779946736e+00 1.6794121266286748e+00 -2.2390665073853775e+00 + 3.3362942709877430e+00 1.5881446968595951e+00 -2.3963510963256289e+00 + 3.7472908613756997e+00 1.4424523679944365e+00 -2.5515748714744513e+00 + 4.1465398663296424e+00 1.2286884801138944e+00 -2.7211377802602605e+00 + 4.5291232281890572e+00 9.2025595727976750e-01 -2.9228987329227847e+00 + 4.8797557249043386e+00 4.6985091471074436e-01 -3.1826159920474333e+00 + 5.1309353627449079e+00 -1.5818383365807342e-01 -3.5311114842916900e+00 + 5.1684374612830775e+00 -8.7156705243679333e-01 -3.9510201104103975e+00 + 5.0021733287683201e+00 -1.4638459081251733e+00 -4.3620617819934875e+00 + 4.9413233394147076e+00 -1.5224100624106285e+00 -4.4526725236898210e+00 + id 11502 + loc 3.7907305359840393e-01 5.2416306734085083e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5759761135201998e-01:3.4684095318631353e-01:6.2909224034770039e-01:4.5759303537590651e-01:1.2478160720478322e+00:3.4600455284578996e-01:1.9992358742152883e+00:4.4880119971131616e-01:2.6551202753697765e+00:3.2838876303823605e-01:3.0478221080206502e+00:3.0849443178277636e-01:3.9975601561607466e+00 + CVs 20 + 1.0990873206127093e-01 3.1664355541531858e-01 -8.4235220424699192e-02 + 2.5421612402887045e-01 6.3142053807852438e-01 -1.8967508837941033e-01 + 4.0304559102891874e-01 9.3844878603828263e-01 -3.2060039755758096e-01 + 5.3975192271531891e-01 1.2319850943400170e+00 -4.8146143537149749e-01 + 6.6142019069690627e-01 1.5038153475979841e+00 -6.7558536604514519e-01 + 7.7111690094147989e-01 1.7450541385350866e+00 -9.0360124474798265e-01 + 8.7294910970937456e-01 1.9449760812787964e+00 -1.1623609006815956e+00 + 9.6407753634867277e-01 2.0936518605083876e+00 -1.4439277489507329e+00 + 1.0361948093878386e+00 2.1863766872024053e+00 -1.7380661369987822e+00 + 1.0827217577814794e+00 2.2243245888783321e+00 -2.0355508086606675e+00 + 1.1009272124880574e+00 2.2133125880513900e+00 -2.3271664392820277e+00 + 1.0893675645788188e+00 2.1626698558388058e+00 -2.6027861961119880e+00 + 1.0473113680873751e+00 2.0877552682845026e+00 -2.8503281205188240e+00 + 9.7899733624646745e-01 2.0199447430928532e+00 -3.0479989887988732e+00 + 9.0905877995751427e-01 2.0019820006153095e+00 -3.1716773398609566e+00 + 8.8047004868020418e-01 2.0432407993773225e+00 -3.2246392472523508e+00 + 9.2346189035695259e-01 2.1099013851541213e+00 -3.2365141997784654e+00 + 1.0003346782565115e+00 2.1495997710301928e+00 -3.2528719247843916e+00 + 7.7956792135147868e-01 2.1477274468706087e+00 -3.3548746470459823e+00 + id 11503 + loc 4.7416725754737854e-01 9.6440136432647705e-01 1047 + blend 0.0000000000000000e+00 + interp 3.7730718181948580e-01:2.8486855845145242e-01:1.5684222649044255e-01:3.0650537749166218e-01:1.0016935339230182e+00:2.6260093399437423e-01:1.0873638130286936e+00:3.7730340874766760e-01:1.8254211049552320e+00:3.5354249008067840e-01:2.2104169247029946e+00:2.8662964082818315e-01:3.1392077036248871e+00 + CVs 20 + 3.2708010691181200e-01 7.1284749593443186e-01 -4.9840723867928605e-01 + 6.8784426746874905e-01 1.4040108220605922e+00 -9.1114288608762262e-01 + 1.0966213628944368e+00 2.0628755448310385e+00 -1.1915039773200502e+00 + 1.5405411268834250e+00 2.5991988988306467e+00 -1.2234172986550593e+00 + 1.9416278163060063e+00 2.8935824804605881e+00 -9.7597284217940827e-01 + 2.2239412682683644e+00 2.9378229456152125e+00 -5.6084142813407500e-01 + 2.3569454086138544e+00 2.7836084113796042e+00 -8.5293321356449292e-02 + 2.3519609866766595e+00 2.4856800523852587e+00 4.0563442080576995e-01 + 2.2269038628612456e+00 2.0762486162471667e+00 8.7561820426254966e-01 + 2.0142689121552046e+00 1.5797510491051070e+00 1.2919444204325692e+00 + 1.7482187220869660e+00 1.0131589164821002e+00 1.6805537871777689e+00 + 1.4446239725180230e+00 4.1656964719938161e-01 2.1368918061578652e+00 + 1.1497588901061142e+00 -1.1928310039984935e-01 2.7600273597745639e+00 + 1.0111883792303857e+00 -4.5525598785308730e-01 3.5929318546049398e+00 + 1.2978715806046230e+00 -3.8541619507383795e-01 4.4654428007549987e+00 + 1.8830484607840186e+00 7.1099649155662803e-02 4.8552523399019858e+00 + 2.4193144511193490e+00 4.6198652687526698e-01 4.8849547796417632e+00 + 2.8997757781213460e+00 7.1678189113397073e-01 4.8649933556413067e+00 + 3.3628964187961961e+00 9.6908864449697507e-01 5.0710815242290401e+00 + id 11504 + loc 3.2732424139976501e-01 8.4093713760375977e-01 410 + blend 0.0000000000000000e+00 + interp 3.6474050531956015e-01:2.6321921974950274e-01:7.8867769889611583e-01:3.4514573078606270e-01:1.2660822509677712e+00:3.3938625718240545e-01:2.0159049778207576e+00:3.1561168551235541e-01:3.0102376453226620e+00:3.6473685791450700e-01:3.8631210662179361e+00 + CVs 20 + 4.4975270123527994e-01 7.5138770587441284e-02 -2.0889031835708954e-01 + 8.0343092011007822e-01 8.7227992374750374e-02 -4.0640321530136692e-01 + 1.1427526681480771e+00 8.2380392867361596e-02 -5.9258358999456884e-01 + 1.4901129125011434e+00 7.5690114473923154e-02 -7.6809796950753972e-01 + 1.8425381139777208e+00 6.8217214446309904e-02 -9.3083934806675095e-01 + 2.2014710976143235e+00 6.1826907444458734e-02 -1.0741473972753433e+00 + 2.5681747100369101e+00 5.7882179608976569e-02 -1.1865275039498693e+00 + 2.9400551171875451e+00 5.6072977753652387e-02 -1.2574968836551552e+00 + 3.3128640573612169e+00 5.6742016887169733e-02 -1.2795927554925639e+00 + 3.6793529814493429e+00 6.1503894120320313e-02 -1.2491298437271066e+00 + 4.0154065368550880e+00 6.4864863779052095e-02 -1.1825592486749272e+00 + 4.2867255632160326e+00 5.0332560802655912e-02 -1.1340831695379356e+00 + 4.4886136699516532e+00 1.5173387615389222e-02 -1.1432670382683643e+00 + 4.6627427707426472e+00 -2.5922823145497098e-02 -1.1850505233603914e+00 + 4.8497804194748326e+00 -7.1275789867203176e-02 -1.2303484097833099e+00 + 5.0494407059344226e+00 -1.2292602029661559e-01 -1.2794271803970583e+00 + 5.2506975601706927e+00 -1.7821468217663616e-01 -1.3369789433331907e+00 + 5.4593678538348742e+00 -2.3928572984946772e-01 -1.3982080351786101e+00 + 5.7217823054045960e+00 -3.1530473212814814e-01 -1.4264994995766296e+00 + id 11505 + loc 2.6256731152534485e-01 6.2244904041290283e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8928261439595868e-01:2.7526178331723472e-01:7.1311993072574920e-01:3.8927872156981475e-01:1.2707665373742465e+00:3.6779042408386892e-01:1.9771809807750684e+00:3.1117867013521228e-01:2.9138624612745767e+00:2.5084982493854235e-01:3.7653753412927591e+00 + CVs 20 + 5.7019078306919213e-02 2.6287664616607875e-01 -1.4193820448495600e-01 + 1.2782594081009133e-01 5.0735666596333517e-01 -2.8990757259479605e-01 + 2.0477706188524827e-01 7.3350605063262220e-01 -4.2471618788522053e-01 + 2.8701117213177885e-01 9.4615905338494777e-01 -5.4410716698392181e-01 + 3.7749155922279787e-01 1.1442847296077867e+00 -6.5358675960726897e-01 + 4.7751809702834419e-01 1.3259785062612979e+00 -7.5330021172906658e-01 + 5.8385770511049007e-01 1.4988367324307179e+00 -8.4103289062248920e-01 + 6.8816714188413219e-01 1.6827661381285091e+00 -9.1609326459961471e-01 + 7.8746270641923666e-01 1.9044413122769632e+00 -9.8383359409986659e-01 + 8.9350384422514506e-01 2.1904412150559374e+00 -1.0662035572286108e+00 + 1.0325851964482526e+00 2.5506282358165344e+00 -1.2120447289272285e+00 + 1.2354978804817542e+00 2.9483858967594596e+00 -1.4912420034256679e+00 + 1.4881473377226118e+00 3.2764702631437186e+00 -1.9361243499431791e+00 + 1.7278835728403568e+00 3.4242761697824760e+00 -2.4652243809812440e+00 + 1.9433047969142145e+00 3.3681202047839083e+00 -2.9776299122419534e+00 + 2.1672405819991361e+00 3.1091233149052644e+00 -3.4373914031193937e+00 + 2.3696439283570281e+00 2.6599053386845544e+00 -3.8395095720692609e+00 + 2.4500445096269226e+00 2.1080788591706838e+00 -4.1571630896347216e+00 + 2.3456536938013945e+00 1.6673087998230085e+00 -4.2624198476044155e+00 + id 11506 + loc 8.5306948423385620e-01 6.6605895757675171e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9846897581909940e-01:3.8714998343613505e-01:4.3633538893772528e-01:3.4972619620357315e-01:1.0281163948922056e+00:3.9846499112934125e-01:1.8451406615797175e+00:3.1687000779327318e-01:2.4297307329484426e+00:3.3237860617957915e-01:3.1920533749473732e+00:3.5621575420136309e-01:3.9649728117519238e+00 + CVs 20 + -3.0886668467864109e-01 4.0691633622112755e-01 5.9096425193737312e-03 + -5.3159882203958719e-01 8.1049549472806071e-01 2.3617786331259827e-02 + -6.9450316433597603e-01 1.2154902865109922e+00 5.6349110634466459e-02 + -8.4860748325460889e-01 1.6161018503213769e+00 5.2440271442751540e-02 + -1.0418685347662624e+00 1.9957097214070421e+00 -4.0107252661723214e-02 + -1.2920386321476820e+00 2.3253604532004668e+00 -2.3861514382521243e-01 + -1.5668776985473205e+00 2.5574851717822975e+00 -5.4254529798951268e-01 + -1.7733607389210662e+00 2.6535728614040366e+00 -9.2762285492722052e-01 + -1.8221752787105170e+00 2.6269338009973415e+00 -1.3323221668483973e+00 + -1.7295561084926243e+00 2.5280833573098116e+00 -1.7023918834792764e+00 + -1.5559317872677201e+00 2.3700991094602610e+00 -2.0439608636254278e+00 + -1.2980588554827519e+00 2.1230377989114895e+00 -2.3517402084612478e+00 + -9.5759038670159735e-01 1.7858466473143013e+00 -2.5825884927955016e+00 + -6.4620443093264379e-01 1.4632650774661233e+00 -2.7667966574268297e+00 + -5.0548169039992907e-01 1.2907541394520461e+00 -3.0303079318831800e+00 + -6.0203660107730572e-01 1.4111686984686624e+00 -3.3475881940457382e+00 + -9.3684813139004153e-01 1.9892131225427985e+00 -3.3895785624005814e+00 + -1.2655320268985129e+00 2.6840124370103116e+00 -2.7935808319714521e+00 + -1.3379648286713837e+00 2.8307785517041530e+00 -3.0597763723937366e+00 + id 11507 + loc 6.3985794782638550e-01 2.8151312470436096e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6430164868534998e-01:3.5032310383492299e-01:5.1896464489826089e-01:2.9087907775661581e-01:1.0180768873877413e+00:3.1387924503197390e-01:1.9931693920426190e+00:3.6429800566886317e-01:2.4496875497242900e+00:3.2356159856680283e-01:3.0511395069331213e+00:3.1806532400965326e-01:3.9309313028244897e+00 + CVs 20 + -2.4838911641540551e-01 2.8626996375076191e-01 1.6484146702745295e-01 + -4.8935195196556486e-01 5.7514061301980768e-01 3.5127930805531654e-01 + -7.2613626413950993e-01 8.5413002547277261e-01 5.7167628812896609e-01 + -9.4961278982196751e-01 1.1107094811810132e+00 8.3622351785562321e-01 + -1.1437014084795227e+00 1.3303026771591189e+00 1.1488758043727194e+00 + -1.3128180819598123e+00 1.4995123459215052e+00 1.5073772560668484e+00 + -1.4848273577072737e+00 1.6121215751821087e+00 1.9090839241018025e+00 + -1.6857816900642393e+00 1.6626714322204563e+00 2.3456401973733998e+00 + -1.9234168053145235e+00 1.6405717687673842e+00 2.7948590136026765e+00 + -2.1850342134749243e+00 1.5314818434277959e+00 3.2242443549021353e+00 + -2.4266745223861408e+00 1.3255233705673071e+00 3.5958097997989129e+00 + -2.5557924288440983e+00 1.0382852229060149e+00 3.8641088971389830e+00 + -2.4784314358129209e+00 7.5035705226980343e-01 3.9863981741627890e+00 + -2.2567176098939092e+00 5.5448525972435847e-01 3.9952299468991255e+00 + -2.0216347027013799e+00 4.1509668520552256e-01 3.9781232726850422e+00 + -1.7793313392801475e+00 3.9147837024222221e-01 3.9542378732228554e+00 + -1.6295230538639065e+00 7.9548789175271895e-01 3.9418599078300356e+00 + -1.9316525047309927e+00 1.4402030013787430e+00 3.9920995406386095e+00 + -1.6297851603016118e+00 1.3925572238439672e+00 4.0292671213217401e+00 + id 11508 + loc 5.7301420718431473e-02 4.7253221273422241e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1648396482861958e-01:3.1668415061825456e-01:4.5459529294520462e-02:3.8039918613788581e-01:9.9392527948277232e-01:4.4064396834133718e-01:1.3976806287117494e+00:2.5217176322369961e-01:1.9929061634528962e+00:3.1490286254660643e-01:2.8387936943644725e+00:5.1647879998897128e-01:3.3520362995691926e+00 + CVs 20 + -2.0548329413755645e-02 3.5038523699879237e-01 -1.5343033416727780e-01 + -8.3482167910697236e-02 7.1417739932634150e-01 -2.9315645177353888e-01 + -1.8578667336465654e-01 1.0708120328070074e+00 -4.4577237036051531e-01 + -3.3237304762012354e-01 1.4017075288095695e+00 -6.2514017517112896e-01 + -5.2767595616780794e-01 1.6841884103710465e+00 -8.3529587806010719e-01 + -7.6636107400675213e-01 1.8938025671347352e+00 -1.0764497323358504e+00 + -1.0325206807434624e+00 2.0129373334131064e+00 -1.3427853398542728e+00 + -1.3045797579583949e+00 2.0374687734561170e+00 -1.6237750231429429e+00 + -1.5643548343627871e+00 1.9737974158534366e+00 -1.9060229081771956e+00 + -1.8036909552224785e+00 1.8350180632196806e+00 -2.1735852389228336e+00 + -2.0222877786463846e+00 1.6360725884524783e+00 -2.4095991759231157e+00 + -2.2189762513349698e+00 1.3901243273786852e+00 -2.5972863189408093e+00 + -2.3907227650682374e+00 1.1108795224652721e+00 -2.7198754857506415e+00 + -2.5369366816830863e+00 8.1740765023789397e-01 -2.7616228449844424e+00 + -2.6581638901852358e+00 5.3736433241747861e-01 -2.7090958680965858e+00 + -2.7559634404551785e+00 3.0999757908562908e-01 -2.5675568841512657e+00 + -2.8508934969799578e+00 1.5320304512846361e-01 -2.3717968222091068e+00 + -2.9674067929421661e+00 5.5051354129108665e-02 -2.1410295444687191e+00 + -3.0495923480911236e+00 -6.2348310625970793e-02 -1.9415996912184830e+00 + id 11509 + loc 4.4383221864700317e-01 2.2760373353958130e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7649989403945753e-01:3.8280926487239031e-01:9.1968637367183448e-01:4.7649512904051716e-01:1.2928332630407275e+00:3.5825286322233191e-01:1.9994050466876647e+00:4.4421113564852183e-01:2.9375662869028973e+00:2.8116502800510679e-01:3.1078017296746183e+00:2.8691624019236778e-01:3.9468444703697063e+00 + CVs 20 + -2.9110022321106033e-01 3.7547843147495674e-01 -1.2208972202832635e-01 + -5.3444407236876135e-01 7.5977416529507358e-01 -2.2348630480586612e-01 + -7.4546712645865543e-01 1.1550251198929065e+00 -2.9621076437408550e-01 + -9.1311394629342857e-01 1.5552840457128572e+00 -3.3268171920229500e-01 + -1.0446154668382976e+00 1.9683126408048175e+00 -3.3566164777641949e-01 + -1.2083087721177763e+00 2.4150440102726209e+00 -3.2064376223320473e-01 + -1.5059672376527613e+00 2.8544385004011863e+00 -3.0803658305800630e-01 + -1.9646715197344939e+00 3.1867441519804709e+00 -3.1595296579782195e-01 + -2.5344449492789747e+00 3.3593001123108790e+00 -3.6909392234917260e-01 + -3.1418094742913780e+00 3.3676149967250781e+00 -5.0078827946364046e-01 + -3.7130634505725104e+00 3.2424602313421924e+00 -7.3951463648534677e-01 + -4.1929788648158830e+00 3.0309874048882333e+00 -1.0966008978869493e+00 + -4.5540035657396620e+00 2.7682695932079602e+00 -1.5549988941302668e+00 + -4.7950413799264169e+00 2.4376599130696004e+00 -2.0976548447002368e+00 + -4.8926273583321187e+00 1.9667595565144294e+00 -2.7021011774158366e+00 + -4.7673125151357398e+00 1.2884363640830183e+00 -3.2805279275498447e+00 + -4.2254734926863895e+00 3.7153534556371304e-01 -3.6482536704647042e+00 + -3.1559275614222932e+00 -4.3277428067163004e-01 -3.4431592584705686e+00 + -2.7427174097321969e+00 -6.7814069099610619e-01 -3.4432850970298476e+00 + id 11510 + loc 3.0847480893135071e-01 4.4855675101280212e-01 1047 + blend 0.0000000000000000e+00 + interp 4.2692920053949424e-01:4.2692493124748887e-01:3.0430644855321876e-01:3.0438247232088966e-01:1.2382382016987241e+00:2.8359386180573465e-01:1.9883923954175273e+00:2.8470341845662284e-01:2.7552590953483569e+00:2.8643211275767505e-01:3.9736984447662578e+00 + CVs 20 + -4.5870945686219078e-01 6.8982553231369892e-01 -1.2521088673457542e-01 + -8.4285692134085066e-01 1.3383081457775767e+00 -3.0115958849993762e-01 + -1.1312457958529021e+00 1.9274420061910962e+00 -5.2494468271898798e-01 + -1.2831168394248003e+00 2.4142123584585633e+00 -7.8937365954067618e-01 + -1.2831180672190148e+00 2.7850647895468312e+00 -1.0858815020658634e+00 + -1.1448673338897302e+00 3.0544362731491512e+00 -1.4067548555210232e+00 + -8.9232873136811297e-01 3.2199330180730543e+00 -1.7250985544509785e+00 + -5.4715093124872971e-01 3.2688491171636507e+00 -2.0072710552386015e+00 + -1.3457812568457084e-01 3.1939000333085019e+00 -2.2231416800558286e+00 + 3.2328949750708857e-01 2.9825978537047293e+00 -2.3484373177041586e+00 + 7.9400289217992126e-01 2.5945828716859918e+00 -2.3731133089695766e+00 + 1.2377895955618667e+00 1.9777360638098578e+00 -2.2931197341672176e+00 + 1.6945289147746680e+00 1.1577897835940518e+00 -2.0738195624663813e+00 + 2.2759625105525831e+00 2.7907803038464096e-01 -1.7111754697628132e+00 + 3.0501601386371764e+00 -4.2511705194819460e-01 -1.3609021372703318e+00 + 3.9390242972688223e+00 -7.0409731964199418e-01 -1.3065117689022148e+00 + 4.7195509100491790e+00 -5.2826388799552770e-01 -1.6267312713247053e+00 + 5.3072851629450657e+00 -2.4435577899340366e-02 -2.1883800459100700e+00 + 5.9396131885101227e+00 6.8549845204189985e-01 -2.8430491488864273e+00 + id 11511 + loc 3.0847480893135071e-01 3.2964721322059631e-01 410 + blend 0.0000000000000000e+00 + interp 3.6315111098878960e-01:3.4826966554648953e-01:7.8452530863946546e-01:3.2373856069993673e-01:1.1780111408209526e+00:3.1107219817810944e-01:2.0008255621626283e+00:3.6314747947767972e-01:2.7198808338620202e+00:3.2898916223044805e-01:3.1292805011809710e+00:3.1892247691991749e-01:3.9949298823821788e+00 + CVs 20 + -1.4169519550110091e-01 1.1843479674942547e-01 -2.4706484409517337e-01 + -2.5301025627062546e-01 2.2480662902120468e-01 -4.8440146765505865e-01 + -3.4325246629912509e-01 3.2423337855294870e-01 -7.3272061712956060e-01 + -4.1679268833688243e-01 4.1913212366525909e-01 -1.0025351805109217e+00 + -4.7310292883302918e-01 5.0696404597037825e-01 -1.2910313948547825e+00 + -5.0710699078209187e-01 5.8443935715817330e-01 -1.5911977550398038e+00 + -5.0648669658497347e-01 6.4789647454932808e-01 -1.8913177894522823e+00 + -4.5750920379791443e-01 6.9316251225137737e-01 -2.1758755728853076e+00 + -3.5227740552489828e-01 7.1657610026426444e-01 -2.4271224162335532e+00 + -1.9298636849987394e-01 7.1767272645607838e-01 -2.6288166779832052e+00 + 2.3985266533276262e-03 6.9784612366587573e-01 -2.7819452851387179e+00 + 1.9921299760752464e-01 6.5165907205505191e-01 -2.9334008728884449e+00 + 3.5797435198094352e-01 5.6039158868441863e-01 -3.1541216970036299e+00 + 4.4318428304779733e-01 4.0716162682639134e-01 -3.4521544717134587e+00 + 4.4120836617098924e-01 1.9961146544143671e-01 -3.7738736935538366e+00 + 3.5035935684961322e-01 -4.4033802867776028e-02 -4.0784875825212987e+00 + 1.6677599758544071e-01 -3.0395664509459097e-01 -4.3442770522601268e+00 + -9.0804895625673621e-02 -5.5231665153199749e-01 -4.5517898374948143e+00 + -1.8832050860211003e-01 -6.9380211520213209e-01 -4.7421121337519025e+00 + id 11512 + loc 6.0757821798324585e-01 8.1965851783752441e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0186476359613882e-01:3.8287757581920423e-01:8.7779410187747342e-01:4.0142247838709427e-01:1.4739774502452740e+00:3.5725795778658548e-01:2.0305804173790740e+00:4.0186074494850288e-01:2.9619902558924678e+00:3.3140467557543640e-01:3.9444924516777400e+00 + CVs 20 + 1.3587376913263283e-01 3.8276054655056618e-01 -2.2330415305423393e-01 + 2.9527945376173748e-01 7.1513262079337925e-01 -4.8071599520836544e-01 + 4.5063737124647735e-01 9.9702691165105706e-01 -7.7343541974801511e-01 + 5.8502026400607088e-01 1.2196251713780262e+00 -1.0976102025054972e+00 + 6.9500747192486212e-01 1.3776335128555586e+00 -1.4436617802393106e+00 + 7.9223600191010268e-01 1.4740728893908241e+00 -1.7963856164311238e+00 + 8.9677371895080971e-01 1.5183978064487254e+00 -2.1417270708416440e+00 + 1.0231973558517127e+00 1.5189328310245231e+00 -2.4659266761548841e+00 + 1.1718588526283353e+00 1.4779469543678618e+00 -2.7491093388170289e+00 + 1.3251169109725225e+00 1.3953448847562711e+00 -2.9677959010784134e+00 + 1.4410112395713106e+00 1.2783546279212454e+00 -3.0988283268443375e+00 + 1.4575423623919701e+00 1.1632354020706712e+00 -3.1205126894993875e+00 + 1.3953983957260363e+00 1.0913980558313090e+00 -3.0709306225716313e+00 + 1.3514309668699016e+00 9.7157223132693782e-01 -3.0461193819466117e+00 + 1.3002660984279653e+00 7.4134754153923232e-01 -3.0481494863501282e+00 + 1.1406868052917587e+00 5.3836808281297333e-01 -3.0426120134332102e+00 + 8.4863471296567761e-01 6.0710404307058785e-01 -3.0424555179773165e+00 + 5.4270834915148636e-01 7.7544521869163840e-01 -3.0710480595677554e+00 + 6.9060439824622802e-02 6.5419946962321085e-01 -3.1057624516209157e+00 + id 11513 + loc 3.7865009903907776e-01 9.3829810619354248e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8987677642230143e-01:3.5508256795941173e-01:5.3406217712564930e-03:2.8164849783365875e-01:1.0033152357368369e+00:3.7699012623031058e-01:1.4839811318209692e+00:2.6103719855033880e-01:2.1503976236189635e+00:3.6599914748519702e-01:2.7305712957265218e+00:4.2516444077659948e-01:3.0075076304954695e+00:4.8987187765453721e-01:3.5407382811736468e+00 + CVs 20 + 4.0081370145068906e-01 2.5531478359805848e-01 -1.5150154265491350e-01 + 7.8064232513251353e-01 5.0239833671462952e-01 -3.1277488689131661e-01 + 1.1309867365481001e+00 7.2797755563367594e-01 -4.9110326877373595e-01 + 1.4407385056368738e+00 9.1344284232624628e-01 -6.9271818202005653e-01 + 1.6980512018818283e+00 1.0438899455774648e+00 -9.1749862679568839e-01 + 1.8920056360097333e+00 1.1133081214112488e+00 -1.1561604300642143e+00 + 2.0188243772804833e+00 1.1285310685895567e+00 -1.3924828397919551e+00 + 2.0859986407787852e+00 1.1073291200726652e+00 -1.6112315847887073e+00 + 2.1089627849352048e+00 1.0687411692761422e+00 -1.8029030251919846e+00 + 2.1082485109868592e+00 1.0279595516605053e+00 -1.9667972467564794e+00 + 2.0999515266177040e+00 9.9299135003238659e-01 -2.1080128782467811e+00 + 2.0894252268342015e+00 9.6824083251917570e-01 -2.2273670417510245e+00 + 2.0789398615434616e+00 9.6130105306420610e-01 -2.3246050724185783e+00 + 2.0764122727057317e+00 9.7983216572213039e-01 -2.4053632755918137e+00 + 2.0988903583775436e+00 1.0249509945119597e+00 -2.4707192130580133e+00 + 2.1678700527167161e+00 1.0839025384922054e+00 -2.5246051285891355e+00 + 2.2913323704294144e+00 1.1313790629970781e+00 -2.5852366573241254e+00 + 2.4415495715315982e+00 1.1446843981488442e+00 -2.6802933871574059e+00 + 2.2979258058886334e+00 1.1949145466099220e+00 -2.8505385991384795e+00 + id 11514 + loc 6.5679788589477539e-01 7.5720673799514771e-01 1047 + blend 0.0000000000000000e+00 + interp 2.9682475038129602e-01:2.8837640104536649e-01:6.1572202949601262e-01:2.9682178213379223e-01:1.4819932873306585e+00:2.6713506815264121e-01:2.6447972320574662e+00:2.8260263595529411e-01:3.4496868563070491e+00 + CVs 20 + 2.0377520403420649e-01 7.4905606680160208e-01 -4.9869698385863065e-01 + 4.5394374257705655e-01 1.4717447264232009e+00 -9.2505300041410532e-01 + 7.6185513893907664e-01 2.1533865899165736e+00 -1.2667425440613780e+00 + 1.1200561579597612e+00 2.7212481261897556e+00 -1.4352990429088650e+00 + 1.4992030916245853e+00 3.1196534109896632e+00 -1.3834245636801885e+00 + 1.8771334198365586e+00 3.3578960837879830e+00 -1.1547882741814059e+00 + 2.2328595474435642e+00 3.4477546587142047e+00 -8.0625777210293958e-01 + 2.5558655366688603e+00 3.3951256391538127e+00 -3.7336185525634424e-01 + 2.8388971809585604e+00 3.2048572543780072e+00 1.0494098279600017e-01 + 3.0722680838580598e+00 2.8757941408060854e+00 5.7830834077284377e-01 + 3.2420264675009389e+00 2.3979610712425554e+00 9.8588132795172978e-01 + 3.3254216702072781e+00 1.7636338521725337e+00 1.2627857099630915e+00 + 3.2645347310752530e+00 9.9507729641867815e-01 1.3990507097756391e+00 + 2.9669008136564448e+00 1.3372876489135765e-01 1.4525635015783029e+00 + 2.3506460337771307e+00 -8.6518149959634538e-01 1.6467034442543143e+00 + 1.7071439720414747e+00 -1.7024576686023236e+00 2.4854816045962238e+00 + 1.5237805097588755e+00 -1.8774239652675342e+00 3.7116451621419362e+00 + 1.7393775200021180e+00 -1.4521669908648940e+00 4.7253671139394662e+00 + 2.0740047696392825e+00 -7.5197117770751243e-01 5.1546982733080640e+00 + id 11515 + loc 3.1247171759605408e-01 6.0152506828308105e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5050702956719357e-01:4.5050252449689793e-01:2.5890367126028990e-01:3.9229869455341504e-01:9.9725082614386962e-01:4.2960222434188949e-01:1.6678966336169543e+00:3.0792245667082585e-01:2.5086915544291299e+00:2.6688888658813947e-01:3.0802096313997973e+00:3.8371787314190275e-01:3.8080812341295158e+00 + CVs 20 + -2.9594266625227530e-03 3.6371484196514348e-01 -1.4109018980460067e-01 + 2.1526155378215811e-02 7.2671908325253654e-01 -3.0031105159821975e-01 + 6.5912033788176005e-02 1.0825763401790016e+00 -4.7817529737256237e-01 + 1.3062745577778745e-01 1.4335918658284517e+00 -6.6945007123481504e-01 + 2.2653664030334425e-01 1.7894207266447857e+00 -8.6368522826228833e-01 + 3.5735963419643446e-01 2.1447114458776153e+00 -1.0777577222182284e+00 + 5.0874640869392962e-01 2.4662049751324671e+00 -1.3643591927194139e+00 + 6.5417708271430275e-01 2.7014925562280045e+00 -1.7524768566531193e+00 + 7.6335168048434676e-01 2.7812928860771562e+00 -2.2122043363139063e+00 + 8.1462335727629909e-01 2.6614975142612471e+00 -2.6769975262851315e+00 + 8.1065498559477045e-01 2.3528925384310586e+00 -3.0901863352000545e+00 + 7.8293870152882750e-01 1.8873877274218316e+00 -3.4289550977269410e+00 + 7.9324207173333916e-01 1.3093040933411881e+00 -3.7119683624143183e+00 + 8.9981551164124218e-01 6.9425450638190322e-01 -4.0042500009444089e+00 + 1.1160815185675892e+00 1.5289182426862202e-01 -4.4071447008743236e+00 + 1.4089900578066534e+00 -1.5973103449280995e-01 -4.9867449946585989e+00 + 1.6989424795078754e+00 -6.1348881993014664e-02 -5.6647563736213185e+00 + 1.9046841195811532e+00 3.7422822182342746e-01 -6.1868991359791448e+00 + 2.1081769587525256e+00 6.9050591554523755e-01 -6.5499598019920686e+00 + id 11516 + loc 8.7447381019592285e-01 7.9263228178024292e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5393678076743527e-01:2.9968034374430297e-01:5.7249561874515131e-02:3.7240121367374274e-01:9.1172374904831988e-01:3.2969183780644379e-01:1.2708804162346863e+00:3.2664914581608423e-01:2.0386154349823502e+00:3.3561556947827292e-01:2.9979608896875400e+00:4.5393224139962762e-01:3.7848499792124497e+00 + CVs 20 + -1.8415753661480153e-01 2.8569799752950586e-01 1.4198305455160731e-01 + -3.8082514592619332e-01 5.6793412777707530e-01 2.6746918196946895e-01 + -5.7569360010030246e-01 8.5128225998591622e-01 3.8501999334479675e-01 + -7.6527104470621932e-01 1.1328001779260541e+00 4.9075860402956833e-01 + -9.5885237067478446e-01 1.4050202477609568e+00 5.6987754299280835e-01 + -1.1621559236767618e+00 1.6575690809601695e+00 6.0885628951338844e-01 + -1.3729565222009696e+00 1.8774429320545010e+00 6.0075143199532233e-01 + -1.5784782967534348e+00 2.0520310172801137e+00 5.4723430489654246e-01 + -1.7609462138831411e+00 2.1703437681205626e+00 4.4268367822903931e-01 + -1.8964221635714333e+00 2.2174837575271598e+00 2.6914269217392750e-01 + -1.9543822911657218e+00 2.1943181789980906e+00 3.9685658562883974e-02 + -1.9275268182940559e+00 2.1197769110833131e+00 -2.0624110946270324e-01 + -1.8426547736232000e+00 1.9800191142208017e+00 -4.3265238683021590e-01 + -1.7278099096350144e+00 1.7303432115787349e+00 -6.0200324930307036e-01 + -1.5745804468675706e+00 1.3862540696403178e+00 -7.1920810174968675e-01 + -1.3566442177869849e+00 1.0060849238395888e+00 -8.6095996833788957e-01 + -1.0691828020316412e+00 6.5575331433716721e-01 -1.1195173511142285e+00 + -7.4992583324129536e-01 4.1322352925744871e-01 -1.5219963162826837e+00 + -4.4616122153864168e-01 2.0491023124816299e-01 -1.9348747431494893e+00 + id 11517 + loc 2.0670068264007568e-01 8.4877055883407593e-01 1070 + blend 0.0000000000000000e+00 + interp 5.0367101508401591e-01:4.8316839740533468e-01:4.0974019720697497e-01:3.4150413271214208e-01:9.7198851857822344e-01:3.3835165797797506e-01:1.4330357638041369e+00:2.8502654741602745e-01:2.0145615292850594e+00:3.6508388857282420e-01:2.7676136770111981e+00:5.0366597837386506e-01:3.1232482426758219e+00:3.3104090821974635e-01:3.8871657862066011e+00 + CVs 20 + -2.6411328455757105e-01 3.8470885106922359e-01 3.1860911718871687e-01 + -4.6775767518527367e-01 6.9755566856291107e-01 5.8013425920431316e-01 + -6.1482276669240687e-01 9.8024691016900678e-01 8.4786328457517823e-01 + -7.4741490393103649e-01 1.2688271794436436e+00 1.1236080527532559e+00 + -9.1941703790301588e-01 1.5665992750518425e+00 1.3441218316245405e+00 + -1.1556178926092346e+00 1.8532780122370802e+00 1.4549539622528174e+00 + -1.4321364942410590e+00 2.0916091236515868e+00 1.4345184560567663e+00 + -1.6849184651149862e+00 2.2480909929811235e+00 1.2866542105619378e+00 + -1.8247562910288979e+00 2.3105081583402449e+00 1.0480940603570783e+00 + -1.8100580850060124e+00 2.3008994717134810e+00 8.0274715376258943e-01 + -1.6909136796823154e+00 2.2496838417882739e+00 5.9010544003904686e-01 + -1.4915115619549801e+00 2.1541615940725216e+00 4.0974839950660091e-01 + -1.2226957146808659e+00 2.0080409855802417e+00 2.8932723042670916e-01 + -9.1999339797909840e-01 1.8270868125750739e+00 2.4218433302057529e-01 + -6.1065727234868694e-01 1.6232072508077420e+00 2.2650042468837073e-01 + -3.1106850358112431e-01 1.3994495344158646e+00 1.7335360840539304e-01 + -6.0018279491243290e-02 1.2002086801610810e+00 1.8589924298597960e-02 + 7.3945839547199160e-02 1.1553651294851770e+00 -2.4132353597395900e-01 + 2.0686341912968689e-01 1.0969915853555090e+00 -4.1570900762574881e-01 + id 11518 + loc 2.3567959666252136e-01 2.8098335862159729e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3936435492401105e-01:2.4061555235290344e-01:3.7152614911345783e-01:3.4000434509385069e-01:1.0017927415309491e+00:2.5023326261609397e-01:2.0350741772029566e+00:2.7362433197608821e-01:2.9193492087861661e+00:4.3935996128046184e-01:3.8024595628510114e+00 + CVs 20 + -1.9856235491387231e-01 2.2889007499420000e-01 -3.7545444443903092e-02 + -4.0696707793693943e-01 4.9534507228068952e-01 -2.8870492989157226e-02 + -6.1251212677178313e-01 7.8357677309745188e-01 8.7506558808345125e-03 + -8.1751935065564163e-01 1.0812396734255394e+00 5.8128332286085771e-02 + -1.0390640117089003e+00 1.3838491277157368e+00 1.0439130245482608e-01 + -1.2935045182867935e+00 1.6858349670849373e+00 1.3105655218693135e-01 + -1.5972401631112569e+00 1.9826194890789353e+00 1.1671204613614439e-01 + -1.9669617555761836e+00 2.2607316086780713e+00 1.9229374267384913e-02 + -2.3765845380636268e+00 2.4654509618285263e+00 -2.1075817083988091e-01 + -2.7470538449976747e+00 2.5393067924874808e+00 -5.5183269675034108e-01 + -3.0373606772447190e+00 2.4931761862283155e+00 -9.3853519360816029e-01 + -3.2488708954208212e+00 2.3678816005895840e+00 -1.3221532269910075e+00 + -3.4043624675154507e+00 2.1766895137448770e+00 -1.6744647240658985e+00 + -3.5391845484761295e+00 1.8680908539408967e+00 -1.9639410526284420e+00 + -3.6561060541173029e+00 1.4182459044044324e+00 -2.1664853558309196e+00 + -3.7169338268393419e+00 8.9674497955511623e-01 -2.3320950803014098e+00 + -3.7036733619900772e+00 4.1083998957072698e-01 -2.5296237560678305e+00 + -3.6424362492140800e+00 4.9642966430902824e-02 -2.8071586314400774e+00 + -3.5672819141216094e+00 -8.4608622918861176e-02 -3.2213016701413677e+00 + id 11519 + loc 6.5679788589477539e-01 5.5647605657577515e-01 410 + blend 0.0000000000000000e+00 + interp 4.2844610530777372e-01:3.2393496513539577e-01:6.2775631391949371e-01:4.2844182084672067e-01:1.0230229355713059e+00:4.0225624604057630e-01:1.5114379073561444e+00:3.7883401488195639e-01:2.0011416861073048e+00:3.0868135768681565e-01:2.6316818981914736e+00:3.9312529834466109e-01:3.4711792052427248e+00:3.5162784834212640e-01:3.9947154716969271e+00 + CVs 20 + 4.8403250844309154e-01 2.6747366770214498e-01 -1.2796776997787862e-01 + 9.0945866224173944e-01 4.7774288454827729e-01 -2.5918325684620791e-01 + 1.3488790528550796e+00 6.7217934810935653e-01 -3.7790158362585446e-01 + 1.8161216761495576e+00 8.4625853722385669e-01 -4.8816840119546467e-01 + 2.2847822809885030e+00 9.7045539531955682e-01 -6.0672493670367100e-01 + 2.7307466789238659e+00 1.0208668761948012e+00 -7.4837660359781122e-01 + 3.1429300168947414e+00 9.9043832304916757e-01 -9.2242933429441243e-01 + 3.5199347443783848e+00 8.8803659772749044e-01 -1.1253687989310155e+00 + 3.8643238329705576e+00 7.3240465655427500e-01 -1.3379083696467511e+00 + 4.1840636243266891e+00 5.4079824758099382e-01 -1.5413558382226349e+00 + 4.5061146191444763e+00 3.0031741460594952e-01 -1.7446973672042396e+00 + 4.8642382543643565e+00 -2.9404630513589769e-02 -1.9795232379847887e+00 + 5.2537169723022759e+00 -4.2641961821497887e-01 -2.2838661620751743e+00 + 5.6382112537213196e+00 -7.9335495371188092e-01 -2.6852063515925177e+00 + 5.9768499987605761e+00 -1.0364324682013275e+00 -3.1629728778437132e+00 + 6.2461114322240103e+00 -1.1410255798853326e+00 -3.6709445718083358e+00 + 6.4544252552218708e+00 -1.1798072538779105e+00 -4.1920649420399672e+00 + 6.6275547719817327e+00 -1.2385374568854233e+00 -4.7182553259077036e+00 + 6.7952475235609731e+00 -1.3710036551128733e+00 -5.2340629575466888e+00 + id 11520 + loc 9.1801381111145020e-01 6.9060498476028442e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0523684082229416e-01:3.5573784465957520e-01:2.1119488938934894e-02:4.0523278845388594e-01:7.5204223738077869e-01:3.6606496387656695e-01:1.0738116704805647e+00:3.4044519928531475e-01:2.0012619796015114e+00:2.9947991902746590e-01:2.9999510137688086e+00 + CVs 20 + 1.7292419858389127e-02 3.4977080151672785e-01 -2.6562606764302338e-01 + 5.9422237063939315e-02 6.8220498434382293e-01 -5.1665479176175599e-01 + 1.0205181274942177e-01 9.9404376362075231e-01 -7.7684477449068845e-01 + 1.3735102378899028e-01 1.2771004508046520e+00 -1.0619441063924917e+00 + 1.6971613080595405e-01 1.5227700380047722e+00 -1.3796756149147278e+00 + 2.0909757577239002e-01 1.7264148345561974e+00 -1.7306989530996373e+00 + 2.7338280328524778e-01 1.8865862283852752e+00 -2.1070063990464161e+00 + 3.8131759563470413e-01 2.0034623566372813e+00 -2.4936018616508804e+00 + 5.4506074300261231e-01 2.0786169427275203e+00 -2.8722828540426888e+00 + 7.6986481161726972e-01 2.1122389679405535e+00 -3.2254637570399090e+00 + 1.0533899056553122e+00 2.0990205529405768e+00 -3.5408133704197917e+00 + 1.3811116616976591e+00 2.0212120971001655e+00 -3.8221768653508761e+00 + 1.7133837904976099e+00 1.8283879995243435e+00 -4.0866556179660130e+00 + 1.9800695693114230e+00 1.4693844220059160e+00 -4.3285877538888711e+00 + 2.1293870470229428e+00 9.5620025697862476e-01 -4.5279049054383682e+00 + 2.1006683428333570e+00 3.2614809906068698e-01 -4.6869400786411708e+00 + 1.7080508993466348e+00 -2.9298039738074166e-01 -4.8316891909046191e+00 + 1.0180489652274298e+00 -5.5261632927333459e-01 -4.9907712697358404e+00 + 5.2495732323226874e-01 -6.8403552833758841e-01 -5.1732311588746525e+00 + id 11521 + loc 9.0675252676010132e-01 2.6067429780960083e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6491125136279615e-01:4.6173400693025879e-01:3.9069352196302798e-01:3.1518652212868953e-01:9.6649289001686134e-01:2.7203515357914404e-01:1.5381464404946241e+00:3.3440006745441869e-01:2.5489721456084009e+00:3.3407141423051190e-01:3.0044673533139981e+00:4.1972059111054327e-01:3.4666752865694037e+00:4.6490660225028252e-01:3.9975785659640675e+00 + CVs 20 + -1.6641771744401038e-01 2.8730475511100845e-01 1.9672947113972067e-01 + -3.3954219295403415e-01 5.6403663411129035e-01 4.0244551575409904e-01 + -5.1778678193982486e-01 8.2969237386408279e-01 6.2265665845022045e-01 + -6.9735819010479838e-01 1.0830023093734136e+00 8.6364066115600757e-01 + -8.7169337121981527e-01 1.3209551634448109e+00 1.1320644604018721e+00 + -1.0305636520238748e+00 1.5371973404519883e+00 1.4339336855369791e+00 + -1.1612565491406008e+00 1.7208989353639539e+00 1.7728550076554463e+00 + -1.2508662243077699e+00 1.8556056265798953e+00 2.1463507482912290e+00 + -1.2907272001782473e+00 1.9218985451267687e+00 2.5435886702959847e+00 + -1.2816817352149517e+00 1.9029287735063056e+00 2.9461652258410789e+00 + -1.2352913568453996e+00 1.7888538506525853e+00 3.3313518052048408e+00 + -1.1717028376683472e+00 1.5804863948151666e+00 3.6801192831106970e+00 + -1.1149303552310528e+00 1.2877739173761549e+00 3.9788589348311172e+00 + -1.0860800525798731e+00 9.2642643762272026e-01 4.2116651033351493e+00 + -1.0970454272416728e+00 5.1812446835328518e-01 4.3586939505666384e+00 + -1.1422866637791700e+00 9.2927799243410492e-02 4.3958664698265206e+00 + -1.1985532066840896e+00 -3.1040959396192846e-01 4.3146744002124136e+00 + -1.2517183546884278e+00 -6.7476608767165192e-01 4.1671341309490240e+00 + -1.3131529415349139e+00 -1.1028348527839351e+00 4.1878058419723194e+00 + id 11522 + loc 1.9162522256374359e-01 2.7563071250915527e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5215883608640917e-01:3.0175272296362171e-01:4.3025050730813086e-02:3.9480349270303011e-01:9.7649395232118497e-01:3.1025526748904392e-01:1.4329161498570506e+00:4.1637886734926105e-01:1.9943947455521722e+00:4.5215431449804833e-01:2.4908690227758918e+00:3.1406282475305575e-01:2.9614021396874683e+00:3.2114037234729159e-01:3.3504900230602956e+00 + CVs 20 + -1.4792351952685232e-02 3.6995446187561609e-01 -1.9247185466807928e-01 + -1.0067078525302076e-01 7.1347534718195282e-01 -3.7656850964183919e-01 + -2.2959884732868591e-01 1.0293856515748616e+00 -5.6644536601648132e-01 + -3.9136412083217298e-01 1.3074989630474638e+00 -7.6105584499177026e-01 + -5.8895049478882844e-01 1.5393643519943803e+00 -9.5253584607232311e-01 + -8.2189723593814601e-01 1.7197783775958237e+00 -1.1385466092901380e+00 + -1.0836351853602366e+00 1.8414239921966975e+00 -1.3251309247399072e+00 + -1.3589612766859411e+00 1.8953817370757533e+00 -1.5150466227257178e+00 + -1.6225845464665241e+00 1.8758390543614087e+00 -1.6963529354921620e+00 + -1.8377831892820198e+00 1.7840353026195546e+00 -1.8419418139965911e+00 + -1.9615920061038032e+00 1.6434083884787287e+00 -1.9107756694610938e+00 + -1.9629787638454221e+00 1.5292012562497594e+00 -1.8575306748014024e+00 + -1.8692062314811826e+00 1.5239953104898554e+00 -1.7070537396967189e+00 + -1.7572658246269985e+00 1.5659384923449307e+00 -1.5416548116118898e+00 + -1.6436905497448304e+00 1.6391322510810027e+00 -1.3724848802068230e+00 + -1.5377834239135595e+00 2.0354168376566917e+00 -1.3374115627520122e+00 + -1.6093166249877600e+00 2.8962505015435243e+00 -2.0634340520900798e+00 + -1.7618337905849080e+00 3.2030265341934103e+00 -2.9741507779247440e+00 + -1.6466879035136244e+00 3.4391377783493757e+00 -2.6338598311126362e+00 + id 11523 + loc 2.7318766713142395e-01 8.1532850861549377e-02 410 + blend 0.0000000000000000e+00 + interp 5.2142660264123741e-01:3.4291957412793478e-01:9.5711897170247529e-04:4.1320090346063237e-01:6.1171784519260497e-01:3.1992110050198491e-01:1.2231096897733820e+00:3.1086027959027157e-01:1.7414229600875624e+00:5.2142138837521101e-01:2.2277809425713437e+00:3.4045358855122021e-01:2.9373498243415783e+00:3.8555621192524486e-01:3.3060910377183959e+00 + CVs 20 + -8.6653133643331826e-02 1.1584661589872229e-01 -2.7267055790292355e-01 + -1.2757977308031354e-01 2.1620433099026082e-01 -5.3811767060159021e-01 + -1.3950653639065635e-01 2.9923798992010270e-01 -7.9808399888870207e-01 + -1.2812424632886871e-01 3.6463722523889036e-01 -1.0497739204574053e+00 + -9.4952282191470117e-02 4.1330741158670720e-01 -1.2893177729868937e+00 + -3.6863589426436860e-02 4.4289092518509349e-01 -1.5065685013740362e+00 + 5.1641570311386165e-02 4.4710160954540312e-01 -1.6837081483659126e+00 + 1.6930678402868193e-01 4.1821831952840682e-01 -1.8001642003625977e+00 + 3.0167626142765236e-01 3.5037746255558144e-01 -1.8389443310022733e+00 + 4.2279830655561179e-01 2.4787769243777313e-01 -1.8056615465479489e+00 + 5.2834801382271801e-01 1.4268316112819679e-01 -1.7667567837291671e+00 + 6.2664496458846286e-01 4.7970875286033610e-02 -1.6911575074648968e+00 + 6.6254697129479900e-01 -6.3848387237910309e-02 -1.5263324249774666e+00 + 7.4762904075958525e-01 -1.4021276866246557e-01 -1.4457702520350471e+00 + 1.0042299289834591e+00 -1.6683823942891007e-01 -1.5656037515657186e+00 + 1.2616594535557664e+00 -2.0775050017187302e-01 -1.7527331107881201e+00 + 1.4958103086626882e+00 -2.7823207439143460e-01 -2.0064522761822028e+00 + 1.6887698201407124e+00 -3.9124863877116289e-01 -2.3326386697991035e+00 + 1.8004232086780956e+00 -4.9781815638438975e-01 -2.4357747855746332e+00 + id 11524 + loc 6.0238850116729736e-01 6.9157111644744873e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3917579203728485e-01:2.9697629580713503e-01:9.2983226661802643e-01:3.4298200178131100e-01:1.4659688362391499e+00:4.3917140027936452e-01:2.0469806481061861e+00:3.2652262316936859e-01:2.6305201256464050e+00:3.2841934110992127e-01:3.0437237242011488e+00:3.6090544437750333e-01:3.9727166360910076e+00 + CVs 20 + -3.0396503320835894e-01 2.9720930716482197e-01 1.8093174832850489e-01 + -5.3957647616933535e-01 5.5901858872774524e-01 3.3262981709917927e-01 + -7.1915662119949675e-01 8.1939403360025664e-01 5.0673779708344346e-01 + -8.7568360066362971e-01 1.0975854469665380e+00 6.9678553548276501e-01 + -1.0654108121877306e+00 1.3947611297434372e+00 8.3825294642382586e-01 + -1.3195793609381121e+00 1.6864103389376406e+00 8.7188761029633621e-01 + -1.6188636860683183e+00 1.9284965285846514e+00 7.8152554936436769e-01 + -1.9107808452030657e+00 2.0867303797303309e+00 5.8073062987977808e-01 + -2.1277736307286470e+00 2.1531274579451933e+00 2.9500946289723129e-01 + -2.2170258143215049e+00 2.1389791223459387e+00 -3.6963913716928642e-02 + -2.1732737072545323e+00 2.0586542246622601e+00 -3.7502516389321761e-01 + -2.0125593169834728e+00 1.9111751958413348e+00 -6.8169697488236924e-01 + -1.7656238507025994e+00 1.7023428072794822e+00 -8.9890412460895752e-01 + -1.4990800227904946e+00 1.4717361304300309e+00 -1.0118709328124842e+00 + -1.2665795433854468e+00 1.2511697899660290e+00 -1.0902549912501294e+00 + -1.1008667390082718e+00 1.0746316844248518e+00 -1.2021938851896221e+00 + -1.0251853315198780e+00 1.0111859594447783e+00 -1.3314312269258441e+00 + -1.0027453185412771e+00 1.0382789318974353e+00 -1.4566511130547117e+00 + -1.0035149065261280e+00 1.0804198075517373e+00 -1.7587905553081911e+00 + id 11525 + loc 2.7318766713142395e-01 1.1094318330287933e-01 1047 + blend 0.0000000000000000e+00 + interp 4.0526353123508085e-01:2.6538941988771070e-01:3.9305859590758818e-01:2.6388057356006062e-01:1.3822556741953047e+00:2.8883262652120822e-01:1.6908262322733525e+00:4.0525947859976852e-01:2.1326923921191452e+00:2.6474761564900301e-01:2.9819947944317642e+00:2.8620056949693257e-01:3.9944698961339631e+00 + CVs 20 + -7.5461891233575151e-01 5.7854894823599279e-01 -6.5827362850103377e-02 + -1.3963147361733639e+00 1.0784868767441267e+00 -2.3476478504359150e-01 + -1.9186044215965499e+00 1.5319016751314409e+00 -5.1032333484840486e-01 + -2.2951392504212373e+00 1.9436754941391883e+00 -8.8054345576986193e-01 + -2.5088125657490159e+00 2.3073362548038348e+00 -1.3165620910374094e+00 + -2.5796259615726282e+00 2.6213312645686737e+00 -1.7800970035728620e+00 + -2.5391414558647400e+00 2.8857157471481245e+00 -2.2572434192606394e+00 + -2.4168334536552840e+00 3.0780647781490318e+00 -2.7836810042242455e+00 + -2.2442722417736611e+00 3.1208029658891570e+00 -3.4010799849415645e+00 + -2.0425796544173793e+00 2.9346950473771960e+00 -4.0836912424157958e+00 + -1.7852749840354276e+00 2.4846496139394025e+00 -4.7483666490464254e+00 + -1.4035406724485959e+00 1.7922494035079217e+00 -5.2682509736542471e+00 + -8.2689964532871207e-01 9.6288965911014757e-01 -5.5165754949064656e+00 + -2.6964140704317352e-02 1.9925245143768361e-01 -5.3982094815346322e+00 + 9.2476351107281385e-01 -2.8046330034283484e-01 -4.9149322473462105e+00 + 1.8933316802314002e+00 -3.3527822908230975e-01 -4.1333183143219614e+00 + 2.7324443298733820e+00 2.4491867451339377e-01 -2.9788551616693133e+00 + 2.7043354806788078e+00 1.7802389312300104e+00 -1.6931202338110307e+00 + 2.4482273977998630e+00 2.3728540069114357e+00 -1.4053614098982985e+00 + id 11526 + loc 8.0546841025352478e-02 5.8335316181182861e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8080795260733816e-01:3.3136068540253444e-01:3.1809571688327309e-01:4.8080314452781209e-01:6.6295575110339899e-01:3.7891085722137396e-01:1.9671271709305729e+00:3.7530141829958702e-01:2.7578092775764174e+00:4.7946081359684939e-01:3.0118484091238287e+00:3.2778759605275037e-01:3.6340649380442005e+00 + CVs 20 + -2.5554146561967750e-01 5.2032570181435012e-01 4.8169098041830521e-01 + -5.0851827955905038e-01 9.5401841385435615e-01 8.5861568848094028e-01 + -7.6275186939804918e-01 1.3500744579080777e+00 1.2143392938455411e+00 + -1.0409434875878003e+00 1.7296188502545835e+00 1.5601479612436571e+00 + -1.3590887120659718e+00 2.0858113358101651e+00 1.8585980920872842e+00 + -1.7184137939562569e+00 2.4065387938907623e+00 2.0697446930244254e+00 + -2.1009709962114633e+00 2.6753382511291020e+00 2.1555730722362485e+00 + -2.4645356544680483e+00 2.8675449624946063e+00 2.0784735204066598e+00 + -2.7395500845431084e+00 2.9517882135686779e+00 1.8330108158278018e+00 + -2.8926849693178860e+00 2.9262292416962437e+00 1.4971090308674646e+00 + -2.9811975463968796e+00 2.7953677821223986e+00 1.1345461229889207e+00 + -3.0524183125009996e+00 2.5205796385361250e+00 7.6913889588770368e-01 + -3.1060979297376434e+00 2.1377844537977939e+00 4.6262793332531249e-01 + -3.1311293440194152e+00 1.7954648790400096e+00 2.2113517847528952e-01 + -3.1339579440242988e+00 1.5918286905883363e+00 1.0222841712357988e-02 + -3.1514274544516039e+00 1.5599709669382635e+00 -1.3754906945851886e-01 + -3.2321379942949746e+00 1.6613473547165987e+00 -1.2969546116715347e-01 + -3.3512877334662252e+00 1.7408069292848092e+00 3.1246346435191974e-02 + -3.2984312230127144e+00 1.7954844812221245e+00 -1.5066079397928511e-01 + id 11527 + loc 9.1017264127731323e-01 4.3338733911514282e-01 1077 + blend 0.0000000000000000e+00 + interp 3.6837966145627743e-01:3.6385139879026152e-01:2.2070574691929190e-03:3.6837597765966290e-01:7.1907894934492189e-01:3.2160562551969679e-01:1.1460386700632930e+00:3.0763827845177205e-01:2.2420627396922828e+00:3.4341152419971954e-01:2.9278979189586130e+00:3.6332809845741953e-01:3.3527577814673304e+00 + CVs 20 + -9.7970686712856261e-02 3.4487741832677582e-01 3.3124947649778774e-01 + -1.6499739137999611e-01 7.1665537991483608e-01 6.1998838215128071e-01 + -2.4757619448537632e-01 1.0801459131196771e+00 9.3088812742892135e-01 + -3.7184308729268212e-01 1.4043020784534197e+00 1.2882029370089181e+00 + -5.5176466246948619e-01 1.6663718657619073e+00 1.6908581640118554e+00 + -7.9212834854546754e-01 1.8476853142860128e+00 2.1199762811991136e+00 + -1.0880504022129047e+00 1.9383464356601947e+00 2.5460520257518309e+00 + -1.4249935316946436e+00 1.9403864425345645e+00 2.9397114046367290e+00 + -1.7817231914522176e+00 1.8662079247898276e+00 3.2828313157641111e+00 + -2.1368916237638107e+00 1.7318405913547086e+00 3.5738985031745010e+00 + -2.4752428407829612e+00 1.5495323337658067e+00 3.8237394455333926e+00 + -2.7872063866836010e+00 1.3261717654353222e+00 4.0460750447734721e+00 + -3.0643469037235658e+00 1.0675837891477851e+00 4.2503434871630708e+00 + -3.2994418720907199e+00 7.8105397374498309e-01 4.4383202768726573e+00 + -3.4957684119040922e+00 4.6798957456823742e-01 4.6095171993105835e+00 + -3.6513453288694566e+00 1.2224330381081217e-01 4.7650385824257517e+00 + -3.7342703114501354e+00 -2.5426282569943082e-01 4.8981809928074931e+00 + -3.7086000304549613e+00 -6.2919030205598947e-01 5.0319941022953865e+00 + -3.5499248627847217e+00 -7.5088457578233170e-01 5.1978841822629622e+00 + id 11528 + loc 6.4612042903900146e-01 6.0272687673568726e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7022714816496536e-01:4.6033083474881065e-01:3.8061259403550185e-01:2.5588189367358638e-01:1.0524022772898283e+00:3.6484684864903982e-01:2.0381480000936798e+00:4.0252376464748746e-01:2.6680757339025698e+00:2.7596149120918384e-01:3.3296975106191860e+00:4.7022244589348372e-01:3.9653430390626561e+00 + CVs 20 + 1.5557712190958628e-01 2.3083664598687448e-01 -3.5932721722637467e-01 + 3.2441931241020339e-01 4.5852385551365871e-01 -7.0210291724094520e-01 + 4.9699150785052659e-01 6.8470302555441942e-01 -1.0426737626904385e+00 + 6.7049575712648357e-01 9.1163568767319703e-01 -1.3925690695335273e+00 + 8.3891389061038779e-01 1.1477599183339970e+00 -1.7631849372498301e+00 + 9.8837634837380495e-01 1.4028116451809007e+00 -2.1609086447119989e+00 + 1.1096422056090645e+00 1.6727400926978784e+00 -2.5810115584843989e+00 + 1.2118744312786860e+00 1.9331101529709374e+00 -3.0158198380845902e+00 + 1.3133414513066941e+00 2.1431840445800403e+00 -3.4683342678317235e+00 + 1.4232812496878555e+00 2.2498983207685579e+00 -3.9496237386425617e+00 + 1.5393399411476953e+00 2.2026448415792066e+00 -4.4555783697638702e+00 + 1.6519623040115692e+00 1.9850008528868419e+00 -4.9543998587827298e+00 + 1.7577379804610076e+00 1.6244365567525232e+00 -5.4053607279115177e+00 + 1.8729203568212798e+00 1.1777585776834512e+00 -5.7836958573926118e+00 + 1.9982051095878135e+00 6.8755613924487635e-01 -6.0946392075938034e+00 + 2.0736558764012689e+00 1.5079346741080080e-01 -6.3586915576582435e+00 + 1.9957368969646758e+00 -4.5153219019490004e-01 -6.5864422554629627e+00 + 1.7394030484164280e+00 -1.0782345017612689e+00 -6.7513260006606695e+00 + 1.7749698039635375e+00 -1.4450218138243178e+00 -6.9628699132951670e+00 + id 11529 + loc 4.7416725754737854e-01 7.5792407989501953e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9946130692927465e-01:4.3623542062388854e-01:1.5470115253262673e-01:4.9945631231620541e-01:7.0637315986733151e-01:4.4117575164436068e-01:1.0010937488434000e+00:2.6480723255907662e-01:1.3735075748142802e+00:2.7478213354688424e-01:2.6674368094830596e+00:4.2538317446654667e-01:3.1480766378750595e+00:2.5369676228208421e-01:3.9498940878343149e+00 + CVs 20 + 1.2369197143932965e-02 3.6326895009555232e-01 -1.5819115853257038e-01 + 5.4179323702759338e-02 7.3441096805991535e-01 -3.0839791352436591e-01 + 1.3376153173756800e-01 1.1150184699339061e+00 -4.6869723987835743e-01 + 2.6140053378339395e-01 1.5036778585461978e+00 -6.4772988549767752e-01 + 4.6069537656678738e-01 1.9031249599344684e+00 -8.4869365287983378e-01 + 7.4623237806395026e-01 2.3076777984045003e+00 -1.1026487716651672e+00 + 1.1046325850104792e+00 2.6853408087575956e+00 -1.4786796850670623e+00 + 1.4895926692226662e+00 2.9456182428213995e+00 -2.0319076734144970e+00 + 1.8195542063153853e+00 2.9415223489211555e+00 -2.7040980971794095e+00 + 2.0447101471860880e+00 2.6205830042345881e+00 -3.3270982438924150e+00 + 2.1873404438887585e+00 2.0705447646193855e+00 -3.7694781024076214e+00 + 2.3089214342942204e+00 1.4223023080854704e+00 -3.9961982256684543e+00 + 2.4731488367896364e+00 7.5544300833750322e-01 -4.0869727656169585e+00 + 2.7229310193020759e+00 8.0206175639678107e-02 -4.2152338111211440e+00 + 3.0836444865340655e+00 -5.4304113877554983e-01 -4.5856160562443309e+00 + 3.5414755337900283e+00 -8.9408511390742129e-01 -5.3156389924034908e+00 + 3.9871450745862496e+00 -6.6275791741271184e-01 -6.2572361122398581e+00 + 4.2596511745527152e+00 -8.0609344181857431e-02 -6.9293189970064102e+00 + 4.4008456882697171e+00 1.5923063491210526e-01 -7.2585631416519938e+00 + id 11530 + loc 7.4928909540176392e-01 5.7875353097915649e-01 1070 + blend 0.0000000000000000e+00 + interp 4.2061660347901536e-01:3.1578979826729803e-01:1.1657655910321596e-01:3.4868634171354718e-01:1.0239195444898455e+00:3.6038180880552972e-01:1.9357751998018751e+00:3.8714998343613505e-01:2.4298767210874783e+00:3.2780863412470762e-01:3.0304965754939999e+00:4.2061239731298061e-01:3.7182876997246357e+00 + CVs 20 + -3.3962653222899419e-01 3.2207933332652117e-01 9.2261930191322145e-02 + -6.0755499738877616e-01 6.3483454751209933e-01 1.5921389949187525e-01 + -8.2236110867136025e-01 9.5638407957669125e-01 2.2676275572126392e-01 + -1.0110349644422751e+00 1.2863295457163715e+00 2.7112368187705993e-01 + -1.2018712249018622e+00 1.6094250470956151e+00 2.4798364146625151e-01 + -1.4145125108221599e+00 1.9080843716262996e+00 1.3662799244667423e-01 + -1.6396227913608119e+00 2.1516624085912022e+00 -6.0635838010236087e-02 + -1.8285083544057605e+00 2.3094798840770228e+00 -3.2094388901601012e-01 + -1.9258332693435762e+00 2.3830789942057651e+00 -6.0323524595428024e-01 + -1.9279372694500849e+00 2.3973958266035158e+00 -8.8519628670618711e-01 + -1.8542483952289466e+00 2.3559358418712764e+00 -1.1798599616972121e+00 + -1.7003182689487488e+00 2.2410180338670878e+00 -1.4813224252465873e+00 + -1.4611518512451407e+00 2.0443470992963246e+00 -1.7488904471761477e+00 + -1.1933547725891758e+00 1.8277742673409958e+00 -1.9539512773454504e+00 + -9.9174356061995350e-01 1.6860192154708908e+00 -2.1403337694973152e+00 + -9.1530626711166652e-01 1.7001886530930013e+00 -2.3104434947366537e+00 + -9.8128408923853050e-01 1.9523986052056936e+00 -2.2858285318658638e+00 + -1.0484813126112704e+00 2.2306657496488351e+00 -1.9113816190002502e+00 + -1.0550008333502243e+00 2.3344765329804158e+00 -2.1903524147770064e+00 + id 11531 + loc 4.6306023001670837e-01 4.5791816711425781e-01 410 + blend 0.0000000000000000e+00 + interp 4.7369714143406411e-01:4.7369240446264976e-01:7.2296941469318243e-01:2.9657759218598068e-01:1.2088020144737914e+00:3.2686825808059722e-01:2.0068020200799994e+00:3.6378638476363262e-01:2.8761154812697338e+00:3.0667650438333760e-01:3.2634823673043645e+00:3.3331283357040775e-01:3.9996218102476120e+00 + CVs 20 + -1.5066721328840771e-01 1.0772524562443871e-01 -3.4328601649950852e-01 + -2.6511036326133841e-01 1.8778575011477677e-01 -6.4909863088478348e-01 + -3.6324664523323325e-01 2.5172983806862376e-01 -9.4416132660940488e-01 + -4.5525309797743085e-01 3.0787922530194145e-01 -1.2417376021351991e+00 + -5.4095403526058772e-01 3.5901811953846607e-01 -1.5386443277962583e+00 + -6.1543504287775130e-01 4.0728467451497397e-01 -1.8283201672142915e+00 + -6.6843394053844052e-01 4.5430752009043984e-01 -2.1018665765750235e+00 + -6.8920357233781449e-01 5.0076414521517709e-01 -2.3496071268061822e+00 + -6.7090570726863041e-01 5.4655881991884581e-01 -2.5613425368347658e+00 + -6.1350877033754614e-01 5.9177560862845924e-01 -2.7273055797593537e+00 + -5.2831709110556779e-01 6.3600584256192350e-01 -2.8473965288545666e+00 + -4.3719407995522869e-01 6.7675274458687773e-01 -2.9556881404873647e+00 + -3.5546504880996355e-01 7.0781850960668558e-01 -3.1130664249796580e+00 + -2.9132560441598337e-01 7.2008974972070461e-01 -3.3405592885831261e+00 + -2.5367581778843584e-01 7.1114317014496020e-01 -3.6147433896652106e+00 + -2.5115959493104456e-01 6.8071534193690653e-01 -3.9197071546910935e+00 + -2.9395799176326431e-01 6.2639200513469628e-01 -4.2476481218166100e+00 + -3.8459364360123993e-01 5.5468246031112955e-01 -4.5787781094733768e+00 + -4.2114879397584914e-01 5.7096032276418796e-01 -4.7912081946619622e+00 + id 11532 + loc 4.6306023001670837e-01 6.2309724092483521e-01 1047 + blend 0.0000000000000000e+00 + interp 4.6307162414762859e-01:2.7071160011825995e-01:2.6559771860441750e-01:4.6306699343138713e-01:1.2246190838146487e+00:2.8266641290013422e-01:1.9221321143389027e+00:2.8585001279917349e-01:2.9889180741413495e+00:3.5033484440608931e-01:3.7514139848137171e+00 + CVs 20 + 1.8061723802798099e-01 7.2077071420000549e-01 -4.4309357090905899e-01 + 3.6749267829345522e-01 1.4013168912901530e+00 -8.2919645978727308e-01 + 5.7268405362069474e-01 2.0483533503272628e+00 -1.1380418659622353e+00 + 8.1582953080369225e-01 2.6369875138484526e+00 -1.3113760843726121e+00 + 1.1109654633721575e+00 3.1263772128313190e+00 -1.2821739868015434e+00 + 1.4346173339182726e+00 3.4677317331915107e+00 -1.0330110630793150e+00 + 1.7262365688368191e+00 3.6108215500815790e+00 -6.1873250577557459e-01 + 1.9411008348555971e+00 3.5287768051553421e+00 -1.1602995259348003e-01 + 2.0705069558613229e+00 3.2312015548024995e+00 4.0140307685638699e-01 + 2.1266753837780237e+00 2.7411147223020378e+00 8.7195027757528820e-01 + 2.1247695617637405e+00 2.0717671623683280e+00 1.2562461747583860e+00 + 2.0569155174609475e+00 1.2375732357129934e+00 1.5715913523489784e+00 + 1.8789226581451026e+00 3.1372917782194876e-01 1.9325123768338783e+00 + 1.5942180822547858e+00 -5.4162857475328252e-01 2.4840528444651033e+00 + 1.3474481294540543e+00 -1.1132878446568604e+00 3.3388502760447221e+00 + 1.3803725170361782e+00 -1.1657517749425712e+00 4.3478501288706282e+00 + 1.6789447484431856e+00 -7.4636592030924787e-01 5.1803919040146118e+00 + 2.0563217603973580e+00 -3.8745392245560950e-02 5.7502509118047449e+00 + 2.2966438185603781e+00 6.8917860108643492e-01 6.1974605774155691e+00 + id 11533 + loc 5.9561587870121002e-02 5.3139734268188477e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3720940824622584e-01:3.3375208953678503e-01:4.9548469661148009e-02:3.7594181558711298e-01:5.6746436114764853e-01:4.3720503615214340e-01:9.9931994110994671e-01:3.0754626035053823e-01:1.5811556784842442e+00:4.2088148240930712e-01:2.3190211081127607e+00:3.3166649762366773e-01:2.9858066916912342e+00:2.7235396646967724e-01:3.5219787757165193e+00 + CVs 20 + 1.7206941718334026e-01 3.7718734218653172e-01 -4.2198174243426048e-02 + 3.6885667521975712e-01 7.0062415213032903e-01 -1.3769902565252456e-01 + 5.6057357611967373e-01 9.8264026395723603e-01 -2.5913673975775298e-01 + 7.3086098988308468e-01 1.2179531232394003e+00 -3.9558338226983508e-01 + 8.7367407902422356e-01 1.3989997752726575e+00 -5.4192343103352414e-01 + 9.8277138997842117e-01 1.5210194361660947e+00 -6.8648470135025064e-01 + 1.0526183513016822e+00 1.5858987147025605e+00 -8.1204479584596223e-01 + 1.0791539762302254e+00 1.6052690445593514e+00 -8.9613753464509771e-01 + 1.0637894425586163e+00 1.6056010336991120e+00 -9.1756570503186052e-01 + 1.0207364911989876e+00 1.6245102373144920e+00 -8.7949456314798069e-01 + 9.7108270212469050e-01 1.6840743777333091e+00 -8.1626647231552396e-01 + 9.3061794020284361e-01 1.7713367519359879e+00 -7.6713509193046781e-01 + 9.0906132020133168e-01 1.8509283463738480e+00 -7.4383953116007850e-01 + 9.2419143387959624e-01 1.8994791143565397e+00 -7.2312364785784966e-01 + 1.0067941697665468e+00 1.9267797998115670e+00 -6.8189807912120270e-01 + 1.1788004320134400e+00 1.9357389598962547e+00 -6.3322229720674617e-01 + 1.4173000410404617e+00 1.8878896856766583e+00 -6.0586018559130417e-01 + 1.5680585943595415e+00 1.7799953309833363e+00 -6.0434306512368208e-01 + 1.3270395094104042e+00 1.8228918563039580e+00 -5.8506341119958027e-01 + id 11534 + loc 5.9388244152069092e-01 2.8606709837913513e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8433204443871094e-01:3.5974680254230335e-01:9.3455414538813009e-02:3.7156075894765395e-01:9.9891243315760914e-01:3.2722945418161015e-01:1.9899665477803699e+00:3.8432820111826654e-01:2.4219007094507341e+00:3.2457830147804062e-01:2.9995908234367992e+00:2.7811272360553224e-01:3.6876551239408597e+00 + CVs 20 + -6.5350893910017291e-02 3.0113027730092812e-01 2.2947023124489579e-01 + -1.2057243492673836e-01 6.0021920199582879e-01 4.4745708774406856e-01 + -1.8237315864510939e-01 8.7323881068593157e-01 6.7756641555326513e-01 + -2.6035925177242542e-01 1.1019955607711311e+00 9.2998509837140109e-01 + -3.5739408931018601e-01 1.2755869767309775e+00 1.2032866793364705e+00 + -4.7380809344950880e-01 1.3853446658449800e+00 1.4904287545317836e+00 + -6.0752698468313460e-01 1.4265115728710147e+00 1.7801163303268290e+00 + -7.5485866132640078e-01 1.3987988662251500e+00 2.0613138550126378e+00 + -9.1111629477916445e-01 1.3059497433837917e+00 2.3243808548075302e+00 + -1.0699184907432377e+00 1.1551385984312030e+00 2.5615861301533505e+00 + -1.2183890788224945e+00 9.5965297079817935e-01 2.7680111502663980e+00 + -1.3365744004668236e+00 7.4193769525147024e-01 2.9410167163774990e+00 + -1.4073082123935698e+00 5.2913717788455161e-01 3.0789877745885637e+00 + -1.4280364092637692e+00 3.4249840549161648e-01 3.1809166928985499e+00 + -1.4107551569236119e+00 2.0518711641360921e-01 3.2380148028885900e+00 + -1.3769259657899915e+00 1.1294877284793980e-01 3.2515857698046515e+00 + -1.3040809835618179e+00 -4.0944128288125103e-03 3.2736457214828683e+00 + -1.1314941505782068e+00 -1.4114567798709854e-01 3.3689768754032303e+00 + -8.2807610394801623e-01 -1.9219006622399859e-01 3.5930106144083229e+00 + id 11535 + loc 3.2732424139976501e-01 8.9928925037384033e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5020942899348881e-01:2.9828131819035603e-01:9.1795069982179567e-02:3.8283301427267469e-01:7.4673189562932596e-01:4.1592167631505156e-01:1.1967886953271363e+00:3.0222310344052067e-01:1.8358845959828796e+00:3.2953472148958607e-01:2.0934888326343462e+00:3.9218988554148859e-01:2.5969528003015321e+00:4.1240480387195250e-01:3.0000017447658580e+00:4.5020492689919889e-01:3.3525966386644588e+00:4.3372968556384561e-01:3.9097367248797763e+00 + CVs 20 + 2.1709067423754330e-01 3.7897750497242549e-01 -2.3600431075525022e-01 + 4.6662211193948977e-01 7.6700087794458727e-01 -4.8148530050404570e-01 + 7.5605320669219200e-01 1.1557684716620313e+00 -7.3337032638410549e-01 + 1.0857678319440593e+00 1.5393731375685569e+00 -9.8941457823018475e-01 + 1.4442477575735408e+00 1.9131958381219838e+00 -1.2646882662443975e+00 + 1.8013250117037385e+00 2.2602380883993347e+00 -1.6032486284825767e+00 + 2.1146973443081039e+00 2.5318946357355152e+00 -2.0519739640472050e+00 + 2.3363431217281687e+00 2.6368428905463550e+00 -2.6110998852588470e+00 + 2.4316049471963073e+00 2.5106745177446053e+00 -3.1876139583223964e+00 + 2.4233218867688882e+00 2.2022962615979158e+00 -3.6744170284037780e+00 + 2.3703917168961013e+00 1.7995906351215860e+00 -4.0358631923197086e+00 + 2.3334096901523655e+00 1.3812581004674258e+00 -4.2887401519682875e+00 + 2.3395501020269407e+00 1.0011886564307939e+00 -4.4817529977076402e+00 + 2.3792944277022992e+00 6.8600079190216690e-01 -4.6632213775751996e+00 + 2.4387861475299610e+00 4.4281239323141997e-01 -4.8587085365797593e+00 + 2.5150547269902028e+00 2.7645813115337797e-01 -5.0784580726700010e+00 + 2.6098464496668337e+00 2.0714593920395452e-01 -5.3321789852635835e+00 + 2.7246136894387902e+00 2.8238382848625648e-01 -5.6370931212931685e+00 + 2.8353910683916212e+00 4.9976066279086157e-01 -5.9411195365452247e+00 + id 11536 + loc 8.1824862957000732e-01 5.6049382686614990e-01 410 + blend 0.0000000000000000e+00 + interp 4.0303542241990414e-01:3.3656738264634023e-01:4.9078011428919732e-01:3.4303418872146985e-01:1.4034171234315431e+00:4.0108246664236324e-01:1.9770472221827404e+00:3.0672584484093340e-01:2.3815246925707863e+00:4.0303139206567995e-01:2.9921197153281311e+00:3.4073185313047172e-01:3.3178039629166012e+00:2.7831277915758756e-01:3.9862634577762033e+00 + CVs 20 + 3.9138699392265786e-01 3.1618365231904755e-01 -8.8727868082089073e-02 + 7.2254549346398245e-01 5.9631764585509051e-01 -1.8304322796261563e-01 + 1.0748796188430554e+00 8.8591872009804729e-01 -2.8532927375081241e-01 + 1.4920631970729683e+00 1.1940993791347645e+00 -4.0997928392682986e-01 + 1.9741997752441864e+00 1.4857646445629475e+00 -5.9235937946131190e-01 + 2.5011936428827015e+00 1.7077364249587013e+00 -8.7298361948450365e-01 + 3.0314871133715728e+00 1.8076193406111341e+00 -1.2713164056102677e+00 + 3.5260492282677682e+00 1.7498712044229459e+00 -1.7665232223346516e+00 + 3.9720289919956135e+00 1.5129807721734914e+00 -2.3053067749587446e+00 + 4.3628077876713531e+00 1.0851789320231267e+00 -2.8144319803576958e+00 + 4.6732005555298137e+00 5.0252196574670327e-01 -3.2172070335898213e+00 + 4.8893211311181632e+00 -1.2799715916893639e-01 -3.5095532557709883e+00 + 5.0369201091052096e+00 -7.1485407941516987e-01 -3.7685592876810259e+00 + 5.1503392918409432e+00 -1.2169409054822702e+00 -4.0571185008796071e+00 + 5.2520283277312210e+00 -1.6266921253442845e+00 -4.3920400786195994e+00 + 5.3638939336914859e+00 -1.9774926177262475e+00 -4.7654876661380250e+00 + 5.5094248267569181e+00 -2.3093925398086887e+00 -5.1728950592375558e+00 + 5.6927951294609613e+00 -2.6312064632410119e+00 -5.6105535517109510e+00 + 5.8805237059584679e+00 -2.9367114366525224e+00 -6.0752499514003446e+00 + id 11537 + loc 5.8006286621093750e-01 1.5007610619068146e-01 1070 + blend 0.0000000000000000e+00 + interp 3.7226456155497278e-01:2.9936205731633464e-01:5.8666998332766818e-01:3.1473573403506094e-01:1.3708580644433785e+00:3.7226083890935724e-01:2.0112455829814948e+00:3.3896386141348556e-01:2.8053009380809790e+00:3.2143244272916854e-01:3.5720894936329404e+00 + CVs 20 + 2.8515769634640942e-01 3.4735651787396477e-01 -2.0641486531705219e-01 + 5.3481786532598641e-01 6.2766633215217560e-01 -3.1240957073742409e-01 + 7.6387852381563914e-01 8.8439339570702358e-01 -3.6894204030608679e-01 + 9.6828238526125443e-01 1.1381798943237378e+00 -3.9848915914353333e-01 + 1.1300231112729486e+00 1.3857848975976492e+00 -4.0479802051183977e-01 + 1.2407810925317859e+00 1.6197840343767869e+00 -4.2141219833657395e-01 + 1.3148795148081316e+00 1.8438559519327329e+00 -4.9348919648738221e-01 + 1.3776646407030007e+00 2.0646828483202575e+00 -6.5394201540702934e-01 + 1.4517635061351934e+00 2.2579313825003204e+00 -9.0794688020644787e-01 + 1.5562331841988515e+00 2.3737568648610279e+00 -1.2266177072668785e+00 + 1.6958177551039337e+00 2.3648536319008113e+00 -1.5565105966886101e+00 + 1.8520049149704767e+00 2.2224581055275827e+00 -1.8478376296248988e+00 + 1.9979556639545923e+00 1.9718691399987431e+00 -2.0727525617686648e+00 + 2.1193521346227762e+00 1.6457819948173658e+00 -2.2181331994822626e+00 + 2.2165827571035281e+00 1.2731558789934190e+00 -2.2770944469034888e+00 + 2.2681094055752471e+00 9.0465898646214349e-01 -2.2333824269632405e+00 + 2.2278904536470812e+00 6.2446236738823613e-01 -2.0835161466747105e+00 + 2.1078858149778381e+00 4.6488986469906046e-01 -1.8710236666291165e+00 + 2.0789862798041483e+00 9.7523534533834111e-02 -1.6738791025152924e+00 + id 11538 + loc 8.1824862957000732e-01 7.6267379522323608e-01 1047 + blend 0.0000000000000000e+00 + interp 3.4908759077586771e+00:3.4908659077586770e+00:2.7063616681241853e-01:1.5475168832927018e+00:3.2709526394311628e-01:6.5278085569593891e-01:4.0917097643877232e-01:2.8277144485165867e-01:4.9615774827941417e-01:2.4589171059688655e-01:1.3623633651141847e+00:2.5048835202899994e-01:2.4237687321200094e+00 + CVs 20 + 3.1599968535440726e-01 7.2854220448247498e-01 -7.2664050908477962e-01 + 6.6720381927188577e-01 1.3844849098480079e+00 -1.3532193282360143e+00 + 1.0816579253399572e+00 2.0184209722122439e+00 -1.8497471082257233e+00 + 1.5783780634877307e+00 2.6084430372270249e+00 -2.0816190013700160e+00 + 2.0934129032597979e+00 3.0368667155167341e+00 -1.9567625689762962e+00 + 2.5153532805084038e+00 3.2292683208275470e+00 -1.5713293232573011e+00 + 2.7788342826136461e+00 3.2009833509643002e+00 -1.0856608883722938e+00 + 2.8949467885969451e+00 3.0252423971479963e+00 -6.0034862316771975e-01 + 2.9018371132522605e+00 2.7646935145050420e+00 -1.4421503595697205e-01 + 2.8213220358643065e+00 2.4470941516982130e+00 2.8550824129270902e-01 + 2.6411415993419221e+00 2.0692134096166326e+00 6.9722830278212000e-01 + 2.3489919949228679e+00 1.6475651263044162e+00 1.0765221701484955e+00 + 1.9628640500094359e+00 1.2597727348717858e+00 1.4024820779890552e+00 + 1.5086060086121580e+00 9.4942401108784269e-01 1.6556435847646043e+00 + 9.6462886129105119e-01 6.2296161326465005e-01 1.8624748557684145e+00 + 4.1970858335966421e-01 3.3788665122584582e-01 2.2787434208263901e+00 + 9.8855447803346999e-02 3.2820846274953452e-01 2.8596216791139155e+00 + 2.3580496606422183e-02 5.8329354617623319e-01 3.3475453983255834e+00 + 1.7904618617780749e-01 1.0481211315885826e+00 3.4960289887027054e+00 + id 11539 + loc 4.0840736031532288e-01 6.1748959124088287e-02 1075 + blend 0.0000000000000000e+00 + interp 4.6925499329700582e-01:3.1749092023477504e-01:8.4061068498662272e-01:4.6925030074707286e-01:1.5097693178834737e+00:4.5211383163592384e-01:1.9812157882059531e+00:2.5517350383583148e-01:2.2839671925791141e+00:2.5326072463791488e-01:3.0235062577526199e+00:3.2352510945771762e-01:3.9761879196378507e+00 + CVs 20 + -2.2203192505929267e-01 2.7303421926818494e-01 2.5008243502061545e-02 + -4.3237783838653204e-01 5.5881992077958642e-01 6.4931967880100971e-02 + -6.2805053451141335e-01 8.5485279176378259e-01 1.1683538012761774e-01 + -8.1594080303133265e-01 1.1575993216556106e+00 1.6737076084959529e-01 + -1.0105205971557527e+00 1.4634510034138146e+00 1.9048056694984261e-01 + -1.2259350649307219e+00 1.7606741539411579e+00 1.6146690471175074e-01 + -1.4691230645579823e+00 2.0259690466621647e+00 7.7555682590591424e-02 + -1.7306289802274946e+00 2.2323880910679463e+00 -5.5203989300445677e-02 + -1.9860607270542832e+00 2.3573703638494630e+00 -2.4049133169158421e-01 + -2.2062838481455835e+00 2.3900557425505111e+00 -4.8296547722672023e-01 + -2.3682653308479340e+00 2.3391652914554379e+00 -7.7013418444511950e-01 + -2.4652808875795404e+00 2.2227643412367453e+00 -1.0775708869708676e+00 + -2.5097225786904347e+00 2.0446426115543579e+00 -1.3765839654624517e+00 + -2.5216126856773502e+00 1.8063250303807510e+00 -1.6225538235856511e+00 + -2.5109510864087965e+00 1.5511635824303993e+00 -1.7844907943121080e+00 + -2.4798361377400635e+00 1.3276953546060790e+00 -1.8730416234342122e+00 + -2.4264864393790271e+00 1.1392504880412919e+00 -1.9099842557139939e+00 + -2.3436823093492207e+00 9.7562158759178963e-01 -1.9581282144891159e+00 + -2.1906978536201271e+00 9.3865486495691397e-01 -2.2496008002589378e+00 + id 11540 + loc 6.7741817235946655e-01 4.5988312363624573e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3972218570477073e-01:4.3971778848291371e-01:3.6162712515166662e-01:2.6342328929402475e-01:1.1077347857340245e+00:3.2164879452869577e-01:1.9027466354512681e+00:3.3694484046824830e-01:2.4885461485258396e+00:3.7301912852612562e-01:3.1881160368364694e+00:2.9800166422313296e-01:3.9797918303982889e+00 + CVs 20 + -2.7390824672851322e-01 4.0723986134359041e-01 1.2920803080254462e-01 + -5.2247037540175534e-01 8.1729663045560652e-01 3.0025286429077414e-01 + -7.6728412877590213e-01 1.2086407629980809e+00 5.2989483955837158e-01 + -1.0029757422295091e+00 1.5598174106657439e+00 8.2561245258213067e-01 + -1.2250907544188130e+00 1.8481647063886262e+00 1.1916492259529257e+00 + -1.4531322846674237e+00 2.0518957657038435e+00 1.6259999108825636e+00 + -1.7202173017221625e+00 2.1628252799820102e+00 2.1145467671054821e+00 + -2.0545262724422284e+00 2.1800642406791702e+00 2.6300194424589702e+00 + -2.4693831870108900e+00 2.0970396425343063e+00 3.1309263725885503e+00 + -2.9516266891487355e+00 1.8998772844612239e+00 3.5708708449035034e+00 + -3.4423752065970703e+00 1.5708986010775110e+00 3.9161056247395725e+00 + -3.8245823090389757e+00 1.0877692763820270e+00 4.1547461475277920e+00 + -3.9638525832950848e+00 4.7137887614220553e-01 4.2683928644433502e+00 + -3.8497657258293336e+00 -1.5135055574524725e-01 4.2421547996428863e+00 + -3.5688904140745814e+00 -6.7819175840347690e-01 4.1222099806546302e+00 + -3.0405747228395894e+00 -1.0036462407089140e+00 3.9707529085250730e+00 + -2.1546536900696118e+00 -6.6656843708087354e-01 3.8371864934866999e+00 + -1.6671486098197670e+00 1.8825241657834568e-01 3.7696482531841213e+00 + -1.3002621353479724e+00 2.5220877051004065e-01 3.7122927740345490e+00 + id 11541 + loc 3.0847480893135071e-01 3.5252121090888977e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5618921368702264e-01:3.9442092171154708e-01:8.4929362154773291e-01:4.4857869482479956e-01:1.2270531530675750e+00:3.9366267712593023e-01:1.9882572973666535e+00:4.1458036349473881e-01:2.7757916656456159e+00:4.5618465179488582e-01:3.1938830902023057e+00:4.1002422709075959e-01:3.9677602897891573e+00 + CVs 20 + -2.4607545934451130e-01 3.4220906753808844e-01 -1.0597258981909438e-01 + -4.5677577588127005e-01 6.8062584610830434e-01 -1.9731056246792489e-01 + -6.4415483218920422e-01 1.0133180647665538e+00 -2.7709935123559598e-01 + -8.0401705890740105e-01 1.3371348090048305e+00 -3.4184817974347520e-01 + -9.0937018250049928e-01 1.6639006884034504e+00 -3.8095040465925506e-01 + -9.4137648025513376e-01 2.0212150584800850e+00 -3.9722196094754364e-01 + -9.9504257776803828e-01 2.4201908477193004e+00 -4.2225311606468957e-01 + -1.2018125038069307e+00 2.7827949003457393e+00 -4.5595459525769633e-01 + -1.5567884926160664e+00 3.0285744798102958e+00 -4.8729260202456703e-01 + -1.9913224710918722e+00 3.1214630734423583e+00 -5.3388072347388515e-01 + -2.4346132400572551e+00 3.0632306888127401e+00 -6.2287142536085360e-01 + -2.8229514969545679e+00 2.8893055750954533e+00 -7.8113983784009988e-01 + -3.1345236462818860e+00 2.6515865215934942e+00 -1.0207360897074018e+00 + -3.3735148927198160e+00 2.4071822818607824e+00 -1.3447129503324482e+00 + -3.5353582238318739e+00 2.1809488050769206e+00 -1.7211813392051427e+00 + -3.6505981500465192e+00 1.9277748925808147e+00 -2.0965326359960850e+00 + -3.7548405106736311e+00 1.5872254211570214e+00 -2.4673439267131347e+00 + -3.7390172867979907e+00 1.1221001266941180e+00 -2.7659313078031733e+00 + -3.4867376176722416e+00 9.7067565812030909e-01 -2.6170670485544623e+00 + id 11542 + loc 4.0491628646850586e-01 3.3164814114570618e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3590630644819706e-01:3.1721205879668984e-01:7.0768244894606203e-02:3.5069411638306014e-01:9.5401612330066188e-01:3.6345283878021095e-01:1.3111357671118733e+00:2.6384637066121613e-01:1.9907632918341216e+00:3.0622832795483701e-01:2.7371137463583777e+00:4.3590194738513260e-01:3.4273204137998374e+00 + CVs 20 + -1.5832253663285306e-01 3.4595476386969626e-01 -1.0909133986986588e-01 + -3.1964621107001456e-01 6.8907851962931521e-01 -2.0821904295884597e-01 + -4.9638318190518105e-01 1.0049138641123154e+00 -3.2037872080361951e-01 + -6.9060471626718167e-01 1.2785167925847061e+00 -4.5509971273161509e-01 + -8.9625441660497851e-01 1.5009418302253932e+00 -6.1315538810158543e-01 + -1.1033564648428749e+00 1.6660216076048737e+00 -7.9139597184876231e-01 + -1.3006921201900337e+00 1.7714357904598659e+00 -9.8280944211721577e-01 + -1.4777968910812684e+00 1.8197705933765707e+00 -1.1763809889916845e+00 + -1.6288937496533262e+00 1.8185060792406234e+00 -1.3631473274798718e+00 + -1.7524024351848002e+00 1.7746100191363445e+00 -1.5431762789784922e+00 + -1.8475681602273131e+00 1.6965678193183686e+00 -1.7192640655585116e+00 + -1.9156999686843954e+00 1.5989096238533722e+00 -1.8952670323473484e+00 + -1.9594106359514478e+00 1.4921172120600423e+00 -2.0873420257922377e+00 + -1.9789012218467059e+00 1.3563772871507405e+00 -2.3315279512772205e+00 + -1.9791328749734893e+00 1.1248815005925428e+00 -2.6539077323347726e+00 + -1.9726635879450143e+00 6.8232029738223909e-01 -2.9533635336402426e+00 + -1.9914885819982924e+00 5.0958091366961611e-03 -3.0192593273639199e+00 + -2.0971611601218223e+00 -6.1961590878496797e-01 -2.7880771352924398e+00 + -2.1789716401969925e+00 -6.2853614531568880e-01 -2.5315388306323325e+00 + id 11543 + loc 1.3623484969139099e-01 8.8512384891510010e-01 1047 + blend 0.0000000000000000e+00 + interp 5.2036467840741207e-01:2.9556244091253586e-01:1.2063612207869923e-01:3.8865480214752340e-01:9.8773883990405054e-01:4.9865042202508658e-01:1.1698268007879202e+00:5.2035947476062805e-01:1.6262344214103623e+00:4.8021405635926567e-01:2.0000000381572831e+00:5.1323942335136652e-01:2.5099536694491151e+00:3.2227091018038373e-01:2.9784458076338378e+00:2.9891658662776505e-01:3.4812285611765055e+00 + CVs 20 + 1.5986932962945116e-01 6.2391327065048130e-01 -3.9952841164037933e-01 + 3.7881525509364156e-01 1.2689147754541248e+00 -7.7888076039802034e-01 + 6.8694604851550878e-01 1.9047510464810262e+00 -1.0652277384818740e+00 + 1.0964099457184739e+00 2.4634367318144932e+00 -1.1533912773224564e+00 + 1.5629858789255473e+00 2.8473538829271279e+00 -9.8817624814220673e-01 + 2.0047388669308890e+00 3.0068338329907589e+00 -6.2149531854358986e-01 + 2.3544442854942718e+00 2.9506395656862598e+00 -1.3751238364211082e-01 + 2.5804316317946978e+00 2.7161048098262874e+00 4.0724150363953338e-01 + 2.6733689294710370e+00 2.3386285654576922e+00 9.8396525721637973e-01 + 2.6342328962875290e+00 1.8370191407715317e+00 1.5720269533455478e+00 + 2.4689786701988616e+00 1.2215959938109866e+00 2.1521777058753724e+00 + 2.1892444041004340e+00 5.5012287180948016e-01 2.7263149492563770e+00 + 1.8409991271991040e+00 -4.3160857638470107e-02 3.3405752275651848e+00 + 1.5371201630373135e+00 -4.4176013684945925e-01 4.0315470861515026e+00 + 1.4754487457757648e+00 -5.1626009302335030e-01 4.7501194821296728e+00 + 1.7370975630692194e+00 -3.1100652799223472e-01 5.3571059658419227e+00 + 2.2297886984683073e+00 1.2598112065672851e-02 5.8554739303535808e+00 + 2.9012715764020371e+00 3.6081265372850035e-01 6.3243967802144532e+00 + 3.6421776665997485e+00 6.0327742915168114e-01 6.9918771330177343e+00 + id 11544 + loc 9.6342766284942627e-01 6.3108849525451660e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9832291421752464e-01:3.0917760786594695e-01:5.4970251542744064e-01:3.3237860617957915e-01:1.1814059331310371e+00:3.9550192944990148e-01:1.9408030061946415e+00:3.9831893098838250e-01:2.1789594877802942e+00:2.9297465521146693e-01:2.9143974185522619e+00:2.4669752892713748e-01:3.5710395990183819e+00 + CVs 20 + -3.2820834297704271e-01 3.6366872983095189e-01 -5.4753330491068675e-02 + -5.9335818819844621e-01 7.2226393781448350e-01 -9.2821078768608400e-02 + -8.2149984158988754e-01 1.0781311685897645e+00 -1.1787537017182470e-01 + -1.0417076634712887e+00 1.4112482043557266e+00 -1.7317595398741614e-01 + -1.2763971828313432e+00 1.6935565759319022e+00 -2.9519264583104410e-01 + -1.5255030022761098e+00 1.8975132727839168e+00 -4.8668224058854148e-01 + -1.7481645762429070e+00 1.9947861700079366e+00 -7.2807267519155561e-01 + -1.8744158377817262e+00 1.9857801334257055e+00 -9.7699612356247900e-01 + -1.8754116563853058e+00 1.9188733405231782e+00 -1.1783127812976382e+00 + -1.8043253908623522e+00 1.8412373857936237e+00 -1.3259122565120871e+00 + -1.7001415845740513e+00 1.7550974609061050e+00 -1.4480571126046817e+00 + -1.5680555333075801e+00 1.6609857339415970e+00 -1.5442789439483340e+00 + -1.4122079696842116e+00 1.5619905587726144e+00 -1.6149979196469060e+00 + -1.2231664527648358e+00 1.4411293635789428e+00 -1.6702515359770005e+00 + -9.9680150374770071e-01 1.2872339750116883e+00 -1.7182197401568970e+00 + -7.6201787363187612e-01 1.1212942899770189e+00 -1.7740131923241664e+00 + -5.4162254724551939e-01 9.5704820359574505e-01 -1.8404813057511846e+00 + -3.4541282670810580e-01 8.3352385363669135e-01 -1.9928309145538674e+00 + -2.2791788338970612e-01 9.2261611706384994e-01 -2.2220187288564164e+00 + id 11545 + loc 1.3623484969139099e-01 6.5048319101333618e-01 410 + blend 0.0000000000000000e+00 + interp 4.0602310339607539e-01:2.9119689676374216e-01:6.4642321068067443e-02:3.7106784069217991e-01:1.0003034118934666e+00:3.0373904277558800e-01:1.3729175475536080e+00:3.0696686768988241e-01:1.9892367784744502e+00:4.0601904316504145e-01:2.4331992122249675e+00:3.2026828331929025e-01:2.9963873439442033e+00:3.5420267057912680e-01:3.5189401627484833e+00 + CVs 20 + 2.9679661919042905e-01 1.5489381887231518e-01 -6.7175437818018185e-02 + 5.2789171743770602e-01 2.6913346343874678e-01 -1.3058760982994874e-01 + 7.3896864804904849e-01 3.7200013958615408e-01 -1.8637087799220312e-01 + 9.5459362359779765e-01 4.8089544143962121e-01 -2.3106997221035430e-01 + 1.1732592635271206e+00 5.9518675458604009e-01 -2.6467679450497816e-01 + 1.3926689552429807e+00 7.1367573833757714e-01 -2.8650661483555079e-01 + 1.6123350349914540e+00 8.3634460422938939e-01 -2.9272819568144148e-01 + 1.8329305080435219e+00 9.6315439845176343e-01 -2.7801261554258710e-01 + 2.0526186995762181e+00 1.0920071020366944e+00 -2.3985649775770579e-01 + 2.2675892398622390e+00 1.2208550974062931e+00 -1.7717569230176777e-01 + 2.4847735147065966e+00 1.3548152364622259e+00 -7.4713527409490332e-02 + 2.7380571728271379e+00 1.5003174075039087e+00 1.0295821867406585e-01 + 3.0790287557893925e+00 1.6333349316333416e+00 3.5436100667633535e-01 + 3.5157616265421652e+00 1.7058724612019800e+00 5.9919297057443610e-01 + 4.0067862774123215e+00 1.7018864626910235e+00 7.7562408196523402e-01 + 4.5271084210012518e+00 1.6250743049413436e+00 8.7901048372948010e-01 + 5.0586932246809777e+00 1.4793236477924250e+00 9.0770693146811332e-01 + 5.5647753545446061e+00 1.2848045629822780e+00 8.5810087698576865e-01 + 5.8900120907981144e+00 1.1662601584361005e+00 8.1268220583655415e-01 + id 11546 + loc 7.8662782907485962e-01 3.4514135122299194e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0521512889414821e-01:5.0521007674285934e-01:6.2366144675239588e-01:4.1079089414331610e-01:9.9459003632157794e-01:4.3865263518582909e-01:1.3277933347456119e+00:2.8029560546184529e-01:2.1894818848135729e+00:2.8958630814979752e-01:2.9967900798287603e+00:3.2620245249004043e-01:3.9466026085615655e+00 + CVs 20 + -1.3061855372360401e-01 1.7116771753225740e-01 1.9268780154935122e-01 + -2.2400736966402468e-01 3.8405066002526750e-01 3.9797308298877682e-01 + -2.9582920104260568e-01 6.1404160493744830e-01 5.9160771249217914e-01 + -3.5929164412974895e-01 8.3742524631046489e-01 7.6433452362470522e-01 + -4.2621751599530094e-01 1.0361043330082567e+00 9.2446555221358129e-01 + -5.0519694387293645e-01 1.1984828139683745e+00 1.0808555821427133e+00 + -5.9913310064200354e-01 1.3205839274422662e+00 1.2414214007608737e+00 + -7.2741061468209556e-01 1.3920628837409168e+00 1.4200524163163266e+00 + -9.1834105502303853e-01 1.3819686040628751e+00 1.6014190505133277e+00 + -1.1677750612787499e+00 1.2771973748096264e+00 1.7328669361891207e+00 + -1.4480590436865999e+00 1.1035962824346168e+00 1.7837447479583481e+00 + -1.7351958589214025e+00 8.9407312879725831e-01 1.7534753299666461e+00 + -1.9948725643995497e+00 6.7220972560144843e-01 1.6404378875416483e+00 + -2.1708767144983239e+00 4.5936214315680296e-01 1.4436444345260455e+00 + -2.2407316601420320e+00 2.5470974297360260e-01 1.1810343662574256e+00 + -2.2530321659374661e+00 3.4688065992889427e-03 8.6967721549831900e-01 + -2.3159091198050743e+00 -3.5047569206650275e-01 5.0563363034149322e-01 + -2.5707027174323818e+00 -6.7565364964272090e-01 1.3415396873602181e-01 + -2.8350642801147119e+00 -6.4934425109177996e-01 1.5042026599271063e-02 + id 11547 + loc 7.7793073654174805e-01 3.7814387679100037e-01 1090 + blend 0.0000000000000000e+00 + interp 5.0313253732718055e-01:2.9191268380678687e-01:3.3903259633514471e-01:5.0312750600180733e-01:9.4442611438400070e-01:3.6590672156701709e-01:1.7980930751341972e+00:4.2825228003840077e-01:2.0532795124082406e+00:3.1027459723673068e-01:3.0237496204494434e+00:4.9758844541731334e-01:3.9928501471015951e+00 + CVs 20 + -1.3817881161005255e-01 4.5991375306311250e-01 -1.4356178298778155e-01 + -1.9782656214283700e-01 8.4201443083497618e-01 -2.1207850955217056e-01 + -2.2829341761578509e-01 1.1858620292472595e+00 -2.4290754838727896e-01 + -2.4660175815341812e-01 1.5022514595737846e+00 -2.4926314612695155e-01 + -2.4947942691567959e-01 1.7835287650118035e+00 -2.3085602385056303e-01 + -2.3948534207131589e-01 2.0251285927160922e+00 -1.9235495027307603e-01 + -2.2029250671908307e-01 2.2301745711251471e+00 -1.4118373803111650e-01 + -1.8856333265678238e-01 2.4070718231243777e+00 -7.7568537006852178e-02 + -1.3650957108301642e-01 2.5523211765459650e+00 1.6743573907357256e-02 + -6.8440923228100914e-02 2.6405430365114393e+00 1.6377155067828320e-01 + 2.4767855418869056e-03 2.6539208109640393e+00 3.6016756202135203e-01 + 7.1700663492841987e-02 2.5924905455365788e+00 5.8924665611202531e-01 + 1.4155256762226187e-01 2.4525303868620170e+00 8.4050155010919991e-01 + 2.2074282597944711e-01 2.2155888378724859e+00 1.1073005299304906e+00 + 3.1838469767027322e-01 1.8548486623278004e+00 1.3533346945542770e+00 + 4.2012333155744519e-01 1.3587191485512424e+00 1.4832686741207828e+00 + 5.1861643722748785e-01 7.4634144675363301e-01 1.4015992264600068e+00 + 6.4973576309715286e-01 1.8538584553685444e-01 1.0887465053438488e+00 + 7.5134278928613218e-01 8.8115440425090674e-02 8.4797575804145087e-01 + id 11548 + loc 6.5679788589477539e-01 5.9508955478668213e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4900357538567653e-01:4.3023422853900323e-01:9.4299432937372529e-04:4.4899908534992272e-01:6.0549732024195690e-01:2.6483289389175452e-01:1.0031258117850650e+00:2.6418542931461370e-01:1.9176846870996842e+00:4.2383741722670687e-01:2.6287829102640656e+00:2.8410774604859718e-01:3.0088298073713209e+00:4.4021417766850701e-01:3.4604203581405759e+00 + CVs 20 + 9.4414385286848201e-02 2.6863870389249400e-01 -2.3285355612273581e-01 + 2.2501041346006334e-01 5.1802340861109908e-01 -4.6354931496867879e-01 + 4.0144547877466102e-01 7.3522508238380269e-01 -6.7685006132775516e-01 + 6.2038614206048626e-01 9.0886220982804544e-01 -8.6183288774372513e-01 + 8.6962257685236732e-01 1.0318850070337393e+00 -1.0155577682862698e+00 + 1.1356359721415168e+00 1.1040548260229104e+00 -1.1446989026375876e+00 + 1.4086506041673039e+00 1.1312170685438618e+00 -1.2626925299932892e+00 + 1.6818523212385126e+00 1.1214316724707936e+00 -1.3842407244106794e+00 + 1.9457821355160292e+00 1.0809311726828670e+00 -1.5212509060404957e+00 + 2.1849444773233366e+00 1.0138122954673365e+00 -1.6753857704338126e+00 + 2.3857846925738948e+00 9.2628157400025057e-01 -1.8365281631347814e+00 + 2.5447843430299422e+00 8.2778375616748501e-01 -1.9935004020475864e+00 + 2.6663841888290833e+00 7.2987514389952690e-01 -2.1401630347683183e+00 + 2.7597903266089618e+00 6.4557671437865338e-01 -2.2760046284681237e+00 + 2.8355194422677013e+00 5.8118226667120487e-01 -2.4123575809784055e+00 + 2.8957789848836457e+00 5.1861057382396081e-01 -2.5736158490145216e+00 + 2.9242983343907634e+00 4.1916810360140117e-01 -2.7711532571015804e+00 + 2.8933636140394943e+00 2.6226663845033282e-01 -2.9803998771751044e+00 + 2.7558220496615076e+00 7.3447797088720512e-02 -3.0932377664628516e+00 + id 11549 + loc 9.9158406257629395e-02 8.6086273193359375e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2885985006711991e-01:3.2350112450918711e-01:8.2445751396652311e-01:3.9421489361657136e-01:1.1114871771483517e+00:4.2885556146861925e-01:1.8547330944435401e+00:3.2799744926564922e-01:2.8967706416302326e+00:3.4149970159201459e-01:3.2190574696575460e+00:3.5669680453211555e-01:3.9552789702755304e+00 + CVs 20 + 1.9115796020443768e-01 2.9440589012973090e-01 5.4259620389851410e-03 + 3.7976111061564716e-01 5.5968236572650987e-01 -3.0386862639627088e-02 + 5.6416771430155255e-01 8.0253275536782176e-01 -9.0346361205111136e-02 + 7.4197142882790890e-01 1.0218802039418213e+00 -1.6548362011757217e-01 + 9.1157630658772260e-01 1.2106686376155176e+00 -2.5632587385848771e-01 + 1.0685598168188550e+00 1.3619314313614415e+00 -3.6126347454883045e-01 + 1.2056753546041208e+00 1.4701247946897338e+00 -4.7455742268846296e-01 + 1.3150106744244667e+00 1.5339467976583168e+00 -5.8614667318475999e-01 + 1.3894655979438313e+00 1.5595373091803257e+00 -6.8431720204705038e-01 + 1.4249685247466672e+00 1.5588070682246467e+00 -7.6488792444689868e-01 + 1.4218054006488177e+00 1.5410281133687955e+00 -8.3302853737763449e-01 + 1.3853658140016745e+00 1.5071504440207877e+00 -8.9237265717293424e-01 + 1.3264488427776149e+00 1.4482932356932821e+00 -9.3772538812070738e-01 + 1.2601686903519509e+00 1.3517083295239525e+00 -9.4960371329151050e-01 + 1.2023459925747109e+00 1.2260740203056752e+00 -8.9962746648737346e-01 + 1.1701605110129298e+00 1.1167568250233175e+00 -7.7101583341569413e-01 + 1.1989863080271375e+00 1.0596301681545164e+00 -5.6576898041915369e-01 + 1.3009180908368401e+00 1.0194245591483373e+00 -3.2621630892461262e-01 + 9.0551761590118007e-01 8.2059682474412343e-01 -3.0807027733323722e-01 + id 11550 + loc 7.2626298666000366e-01 6.8780821561813354e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3492396896749025e-01:3.2437918956351602e-01:1.0087169204606101e+00:4.3491961972780058e-01:1.9992293982959977e+00:3.6713669227925000e-01:2.8461397995408539e+00:3.6833085688913492e-01:3.1821445661217300e+00:3.1722804040898128e-01:3.9665696085565001e+00 + CVs 20 + 3.1975822797513098e-03 3.7776169777796165e-01 -1.7668045329955462e-01 + 4.1601452214413026e-02 7.6509184123637619e-01 -3.6770370975898792e-01 + 8.9636386146970171e-02 1.1608343745312888e+00 -5.9103561453893050e-01 + 1.3248831152759427e-01 1.5542217759183012e+00 -8.7026685147079930e-01 + 1.7024762679478600e-01 1.9256969222341822e+00 -1.2226238788138768e+00 + 2.2065116700930532e-01 2.2577053943704266e+00 -1.6485564921188962e+00 + 3.1559543549997982e-01 2.5350992895465740e+00 -2.1314325969751780e+00 + 4.8114761485171154e-01 2.7424631298843329e+00 -2.6437944465100913e+00 + 7.2796825609463334e-01 2.8608466342089987e+00 -3.1580228833404744e+00 + 1.0468194056944027e+00 2.8625086914647282e+00 -3.6516916839585960e+00 + 1.3952942222812776e+00 2.7116380614611719e+00 -4.1069804931855085e+00 + 1.6881532911833677e+00 2.3708354579258604e+00 -4.5069993087875302e+00 + 1.8202900023706783e+00 1.8527884269221868e+00 -4.8096579864116613e+00 + 1.7770977620085695e+00 1.2841456592468925e+00 -4.9781406938922679e+00 + 1.6318812464918004e+00 7.5709173748900593e-01 -5.0447537644315616e+00 + 1.3718447218908056e+00 3.1384062890956310e-01 -5.0491271191736518e+00 + 9.3092751285708475e-01 1.1589995831671018e-01 -5.0303959747496103e+00 + 4.9536667494781916e-01 2.8125324422133668e-01 -5.0291806279504057e+00 + 1.6061054047549889e-01 1.8807312664763354e-01 -5.0201353210859869e+00 + id 11551 + loc 8.2817900180816650e-01 4.8086774349212646e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3776237650891570e-01:3.1533062769536829e-01:8.6272631633673158e-02:4.3775799888515060e-01:9.9070716423942540e-01:3.5224001892451462e-01:1.6151280575068450e+00:3.1980362097294196e-01:2.1872796219443948e+00:3.3638331997431359e-01:3.0238961290170581e+00:4.2061239731298061e-01:3.6973395737716679e+00 + CVs 20 + 4.6813120120164997e-01 2.7459156939443896e-01 -1.2809957767622304e-01 + 8.6986062603845604e-01 5.2364260751013059e-01 -2.3821111470544543e-01 + 1.2354447790647562e+00 7.6769458878219754e-01 -3.4274584432611654e-01 + 1.5946403828257989e+00 1.0055621446550194e+00 -4.1003155252600354e-01 + 1.9480732848836344e+00 1.2004413564333398e+00 -4.0760490749709244e-01 + 2.2798396288488050e+00 1.3187822947368277e+00 -3.4331943790321984e-01 + 2.5714944897729568e+00 1.3511297895107528e+00 -2.3975776759856837e-01 + 2.8128376384628639e+00 1.3064220436078267e+00 -1.0470594374589992e-01 + 2.9896168297784409e+00 1.1934900311103132e+00 5.8718746913347220e-02 + 3.0852272576020456e+00 1.0315413801806992e+00 2.2008526839798426e-01 + 3.1132202335097388e+00 8.5489197436496922e-01 3.4603567516078704e-01 + 3.0994672178931841e+00 6.9254896062462912e-01 4.2041485538642498e-01 + 3.0703240334943400e+00 5.6404551790271062e-01 4.4500003131539789e-01 + 3.0122088415471922e+00 4.1678664219496014e-01 4.6450262509858309e-01 + 2.8741059348051134e+00 1.6341572847348046e-01 5.1586326810406724e-01 + 2.6593368408408233e+00 -2.1124540605590589e-01 6.7227808216836704e-01 + 2.4255683563725881e+00 -6.5478967088344353e-01 1.0949849974024350e+00 + 2.3091207791296764e+00 -9.1210544886405254e-01 1.8240184943339868e+00 + 2.2919517790416046e+00 -8.8572109045911329e-01 2.0586502698282065e+00 + id 11552 + loc 2.0682123303413391e-01 4.3544912338256836e-01 1047 + blend 0.0000000000000000e+00 + interp 4.1472217486705198e-01:2.7026955479058984e-01:7.7063658948242431e-01:4.1471802764530336e-01:1.2580073117121002e+00:2.8443497214197722e-01:2.0054718481281135e+00:3.1168632673766128e-01:3.2179824034433646e+00:2.8359386180573465e-01:3.9916287666827523e+00 + CVs 20 + -6.2072345144206309e-01 5.0544443341182055e-01 7.5010202478493770e-03 + -1.1894626323252473e+00 1.0184506029504741e+00 -3.4739015724780387e-03 + -1.7224224181604193e+00 1.5955051666789910e+00 -9.9819094538058262e-02 + -2.1767017863476275e+00 2.2570059828403339e+00 -3.7445685058358141e-01 + -2.4341062169642997e+00 2.9241575024802562e+00 -8.8083685076638507e-01 + -2.4404549665556785e+00 3.4821643414489833e+00 -1.5754753637637045e+00 + -2.2287446838285021e+00 3.8367829988085842e+00 -2.3831282800042253e+00 + -1.8788919297659399e+00 3.9097577593448607e+00 -3.2363281575010596e+00 + -1.4878504640210442e+00 3.6575274688265660e+00 -4.0446027408416345e+00 + -1.1140041370312703e+00 3.1338500254366166e+00 -4.6974359767401914e+00 + -7.6475586067096757e-01 2.4690092352067721e+00 -5.1162095670458427e+00 + -4.3966981712484565e-01 1.8024989842434542e+00 -5.2923171520514849e+00 + -1.3359360592767350e-01 1.2133344220276474e+00 -5.2892444120517670e+00 + 1.9648947919819509e-01 7.1550831720457442e-01 -5.1457651115197427e+00 + 6.0325162074447469e-01 3.3837274154743235e-01 -4.8531600436996820e+00 + 1.0980675383216538e+00 1.5094582854993865e-01 -4.4069249520992155e+00 + 1.6517955439263405e+00 2.4347337229977550e-01 -3.7944121024856203e+00 + 2.0051541568813636e+00 8.5231176200426639e-01 -3.0169525021150454e+00 + 1.8728091874291839e+00 1.2919465676010358e+00 -2.7134435569688575e+00 + id 11553 + loc 9.2027163505554199e-01 8.9110255241394043e-02 1075 + blend 0.0000000000000000e+00 + interp 4.2114145449511431e-01:3.1126230477702016e-01:1.5888544558668749e-01:4.0490488981766826e-01:1.0931544740821320e+00:2.8938256609175511e-01:1.9559968833430377e+00:2.4976985843146246e-01:3.0122427894250072e+00:4.2113724308056938e-01:3.9445078575369070e+00 + CVs 20 + -5.8752854895834178e-02 1.9759613901324136e-01 2.2623634004019488e-01 + -9.3481471432100810e-02 4.1400348295565392e-01 4.4435581625818987e-01 + -9.9424804452773963e-02 6.3830875310573632e-01 6.2839833543432477e-01 + -7.8554597353966638e-02 8.5304225713089843e-01 7.6562997025455493e-01 + -4.8563290347965693e-02 1.0601196213938628e+00 8.7857503162496331e-01 + -3.5261621070355131e-02 1.2695656600266656e+00 1.0018092362636095e+00 + -5.9638659101942326e-02 1.4751127188587660e+00 1.1650274500807409e+00 + -1.4877720413440343e-01 1.6445786542244791e+00 1.3903991726673532e+00 + -3.3569970082772282e-01 1.7300462022727507e+00 1.6500136452516603e+00 + -6.1947390059481311e-01 1.7074483693013389e+00 1.8621589800428722e+00 + -9.6362643046457297e-01 1.5956877409988666e+00 1.9810178283932318e+00 + -1.3351438975241074e+00 1.4140505580479428e+00 2.0000011249948773e+00 + -1.6632020390872633e+00 1.1723468655377443e+00 1.9059187889195011e+00 + -1.8400842335394574e+00 9.0211322630989355e-01 1.7212271656343707e+00 + -1.8535990792192849e+00 6.1325268612438266e-01 1.5010664838676941e+00 + -1.8037628359576814e+00 2.4391359503106719e-01 1.2557277192384264e+00 + -1.8873648622868759e+00 -2.4884435783028869e-01 9.5034001945265223e-01 + -2.2888186861956754e+00 -6.2355562549809240e-01 6.7781061801353615e-01 + -2.6822106675237016e+00 -6.9646830654542946e-01 6.1676610992381697e-01 + id 11554 + loc 2.0682123303413391e-01 3.2001435756683350e-01 410 + blend 0.0000000000000000e+00 + interp 4.2434031843809783e-01:3.1107219817810944e-01:1.2371766983287902e-04:3.4903908543069762e-01:7.3545294274220097e-01:4.2433607503491350e-01:1.2091886568080141e+00:3.1543996937596180e-01:2.0460448293195235e+00:3.7035873593757829e-01:2.7765407926070127e+00:3.2183227072267923e-01:3.1239711374352339e+00 + CVs 20 + -1.1366219959231202e-01 1.1376248679922821e-01 -2.5830632956183480e-01 + -2.2653505778328492e-01 2.0168006879632039e-01 -4.8706867151017796e-01 + -3.3909432704937870e-01 2.7255602357635733e-01 -7.0465415101824158e-01 + -4.5430462252774068e-01 3.3154954961690564e-01 -9.2127085005341636e-01 + -5.7244910108066982e-01 3.7828291480158710e-01 -1.1354763711094622e+00 + -6.9252046986949256e-01 4.1374252495670105e-01 -1.3481739911249431e+00 + -8.1070594375434546e-01 4.4088920396701242e-01 -1.5640256170765259e+00 + -9.2043848156848496e-01 4.6321410961439669e-01 -1.7893076600281530e+00 + -1.0137328254349285e+00 4.8338585711336590e-01 -2.0297509245930776e+00 + -1.0817232551385914e+00 5.0338170845767982e-01 -2.2905792935950244e+00 + -1.1158006490214614e+00 5.2347813498178708e-01 -2.5692862170967103e+00 + -1.1239840861189689e+00 5.3740153413618497e-01 -2.8318562341018243e+00 + -1.1478676091713451e+00 5.3554116888004921e-01 -3.0138776467988979e+00 + -1.2156489828227715e+00 5.2559241985029903e-01 -3.0743115356564115e+00 + -1.2994500244605454e+00 5.2843440015707488e-01 -3.0429888796960594e+00 + -1.3678426639357806e+00 5.4809669967335584e-01 -2.9849895751869537e+00 + -1.4125776817807383e+00 5.8011248954406913e-01 -2.9239622917427566e+00 + -1.4280986857744535e+00 6.2234440638424071e-01 -2.8605348031751010e+00 + -1.5301947371819917e+00 5.3997717884023499e-01 -3.0216159382248247e+00 + id 11555 + loc 2.7318766713142395e-01 8.7190367281436920e-02 1074 + blend 0.0000000000000000e+00 + interp 4.1396816327374869e-01:2.5955668713299690e-01:1.0503910032524151e+00:2.9192995398755289e-01:2.0799749363039171e+00:3.9941185164497456e-01:2.9829832979245516e+00:2.6719115709498120e-01:3.3421815197993321e+00:4.1396402359211598e-01:3.9928460078979739e+00 + CVs 20 + -2.5711675913328086e-01 2.8011642821033850e-01 1.1484166280389847e-02 + -4.8422869970897459e-01 5.4502234213077461e-01 2.7485861398840183e-03 + -6.9646666699035042e-01 8.0056425132714071e-01 -2.0445807707117736e-02 + -8.9273005342044387e-01 1.0551946730517596e+00 -5.1899629819158521e-02 + -1.0129589935926198e+00 1.3155099515669268e+00 -7.4841197495666367e-02 + -9.7821548836293093e-01 1.5904681493679955e+00 -6.2290509724833742e-02 + -8.4152939865980259e-01 1.9452739315255752e+00 1.2687969602609706e-02 + -8.1373084375977334e-01 2.3785332421714842e+00 1.3701267845214404e-01 + -9.8054878596026085e-01 2.7898802049959111e+00 2.8072827117611965e-01 + -1.3072246124826881e+00 3.0845660781560480e+00 4.1939511066193053e-01 + -1.7161420153254354e+00 3.2283313307642505e+00 5.1758781935428111e-01 + -2.1133098433999038e+00 3.2723302468787612e+00 5.1777179251115557e-01 + -2.4324867618306110e+00 3.3158909052566776e+00 3.8293334182754629e-01 + -2.7025276848137390e+00 3.4664216531116159e+00 7.9977198671569383e-02 + -2.9787888082638156e+00 3.7102822546328715e+00 -4.5869290083252101e-01 + -3.3234690658765178e+00 3.8682740081696965e+00 -1.2563515969054100e+00 + -3.8355776029970459e+00 3.6494452236431023e+00 -2.4195404407570895e+00 + -4.0211129932762883e+00 2.8898273453463705e+00 -3.5261796751069872e+00 + -3.7145387235345226e+00 2.8846817854105602e+00 -3.5404375690472367e+00 + id 11556 + loc 3.2754331827163696e-01 3.5454601049423218e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0890306394371845e-01:3.9069903924344418e-01:5.0301953851472625e-04:4.0889897491307903e-01:6.1933579181325926e-01:3.7457503097549055e-01:1.2816311446558313e+00:3.0551002497569951e-01:2.0001231370264989e+00:3.2538738519037569e-01:2.9444248461347176e+00:3.0680700714716258e-01:3.4858330628158081e+00 + CVs 20 + 2.8632717398700422e-02 3.8984460097867379e-01 -3.8006832982549776e-01 + -1.5378874110742680e-02 7.7445661302251712e-01 -7.4227667718048962e-01 + -1.1708541783926368e-01 1.1437418975018228e+00 -1.0941875028270267e+00 + -2.8576109824243789e-01 1.4949349262818687e+00 -1.4308512445401853e+00 + -5.2091226794944057e-01 1.8095959382170963e+00 -1.7397220829462268e+00 + -7.9939383711339962e-01 2.0649424648648669e+00 -2.0210569848395634e+00 + -1.0943433317447120e+00 2.2517491709313298e+00 -2.2866098055958166e+00 + -1.3842335857880101e+00 2.3693693388770227e+00 -2.5447476933049433e+00 + -1.6474508669827070e+00 2.4151756356288194e+00 -2.7957764435177017e+00 + -1.8691451623805295e+00 2.3896707248942644e+00 -3.0327757431226887e+00 + -2.0584416116995943e+00 2.3022154482921708e+00 -3.2469810728568667e+00 + -2.2377199883248431e+00 2.1568216583794264e+00 -3.4336590364654533e+00 + -2.4090838958312588e+00 1.9592420323045063e+00 -3.5826336609527711e+00 + -2.5637125815784700e+00 1.7391319935918175e+00 -3.6872085402150638e+00 + -2.7053696656771247e+00 1.5161011362735612e+00 -3.7550603997716023e+00 + -2.8414763137825854e+00 1.2621359099433298e+00 -3.8212124593169681e+00 + -2.9644587548629939e+00 8.2690837198336853e-01 -3.9273252400842216e+00 + -3.0031150161554843e+00 2.1697106077439243e-01 -3.8386934094236809e+00 + -3.0165313808535599e+00 2.2248082885267495e-01 -3.7424946618937911e+00 + id 11557 + loc 1.1161391437053680e-01 1.1304917931556702e-01 1084 + blend 0.0000000000000000e+00 + interp 1.0504919667567740e+00:4.4741740426753590e-01:2.5576199174971448e-02:2.5786109823243586e-01:9.8364583169006270e-01:9.4085986218306450e-01:1.0046868293263476e+00:1.0504819667567740e+00:2.8280621674019741e+00:5.3736104408631624e-01:2.9968967449301607e+00:3.0477402358108513e-01:3.1984962017213241e+00 + CVs 20 + 4.7807320174403267e-01 4.0359034800125887e-01 1.9305609316145600e-01 + 8.5795142930976287e-01 7.1153068448378154e-01 3.2682986933778591e-01 + 1.2341184236217866e+00 9.8980945251568719e-01 4.2056123998040940e-01 + 1.6095167199131968e+00 1.3042706199284171e+00 5.6114342565880937e-01 + 1.8853185682173201e+00 1.6497364583101082e+00 8.2206068842695545e-01 + 1.9700933339363538e+00 1.9578964864840787e+00 1.1979625191357006e+00 + 1.8159646883780363e+00 2.1566068960501465e+00 1.6070758484079855e+00 + 1.3833618580062836e+00 2.1928154656255181e+00 1.8794259819995829e+00 + 8.5620820293185629e-01 2.0403632738009629e+00 1.7794330804226504e+00 + 5.4292447326872728e-01 1.8201987815821130e+00 1.4847602200636754e+00 + 3.7318748638123278e-01 1.5605522634637723e+00 1.1680644337232102e+00 + 3.2561853457911771e-01 1.2381335166637022e+00 8.3572780718494266e-01 + 3.8250242570969945e-01 8.7967465044898663e-01 5.3891999628353338e-01 + 4.2882583889831810e-01 5.1360726011320246e-01 3.1199391586006675e-01 + 3.4620166248234813e-01 1.5007115936284907e-01 1.4912473131568993e-01 + 5.3128910132976048e-02 -1.4455688618628737e-01 4.6959580102119099e-02 + -5.5847621154120042e-01 -1.2700106199431418e-01 5.6776981304822408e-02 + -1.1306778286708716e+00 4.6012932617084579e-01 3.4090415693273313e-01 + -1.4145103362278624e+00 4.5828207017999534e-01 3.4287207776794104e-01 + id 11558 + loc 6.6347211599349976e-01 5.2687638998031616e-01 1077 + blend 0.0000000000000000e+00 + interp 4.9970836602039559e-01:3.7583548213779044e-01:2.1343474012016328e-01:2.9701527942517419e-01:1.0406843422927676e+00:4.9970336893673539e-01:1.9776056946633103e+00:3.4005090171820035e-01:2.8041128004822040e+00:2.9253763488418077e-01:3.6427387839954868e+00 + CVs 20 + 3.2152220712432109e-02 2.8260128284581093e-01 -1.1260603512920486e-01 + 3.0859999669140076e-02 6.0546811545572277e-01 -2.0210171198187071e-01 + 3.0444237075019531e-02 9.7927480123230826e-01 -3.1522796208606862e-01 + 5.7950511543474026e-02 1.3824510082251358e+00 -4.8886016464072146e-01 + 1.2701028477094578e-01 1.7935205679005626e+00 -7.5357201440524202e-01 + 2.5253229562237767e-01 2.1739082563751886e+00 -1.1228578951066639e+00 + 4.4928294146321601e-01 2.4786190625016471e+00 -1.5820016248519837e+00 + 7.2288020736522074e-01 2.6686170620884431e+00 -2.0949376983084096e+00 + 1.0647913943115268e+00 2.7204090186109147e+00 -2.6164765229969102e+00 + 1.4520923877379295e+00 2.6298069890627209e+00 -3.1027122803028759e+00 + 1.8524361770189208e+00 2.4112411228368145e+00 -3.5291427995515781e+00 + 2.2307471071789395e+00 2.0890605912144076e+00 -3.8973139119067897e+00 + 2.5488624519235272e+00 1.6899532672193918e+00 -4.2198186447305934e+00 + 2.7654194390786673e+00 1.2482175807237463e+00 -4.5004649765621618e+00 + 2.8499685992545603e+00 8.2409332167080840e-01 -4.7282333038949194e+00 + 2.8002836267290694e+00 5.0428507018434399e-01 -4.8841708248891607e+00 + 2.6633104533061234e+00 3.3666967923064539e-01 -4.9616946719176109e+00 + 2.4816285016859752e+00 2.7156997990364462e-01 -5.0189064614992525e+00 + 2.1082487074491585e+00 1.0854988261211695e-01 -5.3213265217820229e+00 + id 11559 + loc 5.3414577245712280e-01 5.1264178752899170e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6742849762017580e-01:3.4975629905060679e-01:3.1610895484954560e-01:4.6742382333519961e-01:9.9984148649208571e-01:3.2244418463895719e-01:1.6098221470180836e+00:3.2378163844260760e-01:2.4064775368874716e+00:4.5253927200632144e-01:3.0517730398021623e+00:3.2511593769350983e-01:3.7980292335001500e+00 + CVs 20 + -3.5597654776576160e-01 2.9987251756301636e-01 1.9736464423007868e-01 + -6.3285157417555060e-01 5.4654864683740834e-01 3.2659143515267269e-01 + -8.5535266201469728e-01 7.7628727992103852e-01 4.5284852950401477e-01 + -1.0315119900738274e+00 9.9273639054477925e-01 5.8668130798603868e-01 + -1.1815569933607761e+00 1.1955434768593922e+00 6.9790625655423966e-01 + -1.3339884712557577e+00 1.3913991563669308e+00 7.6191418841297653e-01 + -1.4946835905594789e+00 1.5703699002187816e+00 7.8714673275889191e-01 + -1.6640560304954815e+00 1.7248683603938426e+00 8.1336866103132066e-01 + -1.8609031673308782e+00 1.8718191519961553e+00 8.6087451720885433e-01 + -2.0785138133451602e+00 2.0138823785373439e+00 8.6591101759618982e-01 + -2.2611583473024823e+00 2.1487303725786919e+00 7.8165314283248000e-01 + -2.3947213540650503e+00 2.3001480658643834e+00 6.0482860337407085e-01 + -2.4214836886704179e+00 2.4142011788911377e+00 3.7492192396516844e-01 + -2.2425130306550050e+00 2.3809560709890807e+00 2.8635093424920499e-01 + -1.8437108897558754e+00 2.1321174570359807e+00 4.2370856555594427e-01 + -1.2691804794055992e+00 1.5814338728192190e+00 5.8473581231177074e-01 + -6.0763907930479522e-01 6.8179916284298892e-01 3.8206097069695727e-01 + -1.7206984493058031e-01 -1.5465735111402007e-02 -3.8229097177026056e-01 + -4.7506287689007221e-02 4.5274883405258259e-02 -6.9833855568825698e-01 + id 11560 + loc 6.2600213289260864e-01 8.5243022441864014e-01 1075 + blend 0.0000000000000000e+00 + interp 5.1449502508789957e-01:4.9423471127637614e-01:3.7225782093992343e-01:3.4213160817607946e-01:9.9910977168167026e-01:2.6920282450742239e-01:1.8900538174921460e+00:5.1448988013764874e-01:2.8726316443738877e+00:4.8007171853756603e-01:3.1097159967348635e+00:3.5310403348133990e-01:3.8987092209855367e+00 + CVs 20 + 2.0864954089384646e-01 2.0276637632800831e-01 -3.0658810342858372e-01 + 4.2186212000033652e-01 4.1447711459569259e-01 -6.2101349618718771e-01 + 6.4655970010197372e-01 6.3002208328202991e-01 -9.5849963742143884e-01 + 8.7572627684789439e-01 8.5338906578648188e-01 -1.3260832687880042e+00 + 1.0913783546123230e+00 1.0888905930021455e+00 -1.7253927458121012e+00 + 1.2757065412235895e+00 1.3336567969057858e+00 -2.1579319894822877e+00 + 1.4261932819821443e+00 1.5679291876648742e+00 -2.6223506715510516e+00 + 1.5616234231388193e+00 1.7532309428044957e+00 -3.1136581106113890e+00 + 1.7051491471002467e+00 1.8446027055254044e+00 -3.6204458800152750e+00 + 1.8673233884016081e+00 1.8016194224788116e+00 -4.1170343899889614e+00 + 2.0440593546710955e+00 1.6060748192546559e+00 -4.5612441503345904e+00 + 2.2177139354971125e+00 1.2764317937081822e+00 -4.9108303929864965e+00 + 2.3691717584424414e+00 8.5776218015275885e-01 -5.1381956672936582e+00 + 2.4905154187234055e+00 4.1056770393406811e-01 -5.2443529044655763e+00 + 2.5642746853358203e+00 -2.4010657528280577e-02 -5.2643087371984612e+00 + 2.5373561257295503e+00 -4.4556339214765273e-01 -5.2470421482913077e+00 + 2.3650414860813429e+00 -8.5364383779655040e-01 -5.2173172559615075e+00 + 2.1196369290272434e+00 -1.2019609563276108e+00 -5.1800000139769704e+00 + 2.0779944321928818e+00 -1.4476879838236707e+00 -5.2240723401124880e+00 + id 11561 + loc 1.7534536123275757e-01 1.9952504336833954e-01 1054 + blend 0.0000000000000000e+00 + interp 7.7719930244597690e-01:5.4059576944438903e-01:9.8042049621992144e-02:5.3597469475119874e-01:9.7944200165971873e-01:7.7719153045295253e-01:1.4899011910413384e+00:5.1626601541873773e-01:2.0386701092383013e+00:3.2036843767024742e-01:2.9083749558323317e+00:5.3158691119598755e-01:3.3189597640275506e+00:6.1879659948248877e-01:3.7929561593095578e+00 + CVs 20 + -1.3130406818400606e-01 4.2723309464603981e-01 -2.3970156066235798e-01 + -2.0449953752705080e-01 8.5334725098419151e-01 -4.3411302255659190e-01 + -1.9268332599803600e-01 1.2960570878833038e+00 -6.1370063657162943e-01 + -6.9248639856023919e-02 1.7524991504253302e+00 -8.1862073720878703e-01 + 1.7659742465489670e-01 2.1759006187848389e+00 -1.1028040642657779e+00 + 5.1504222076767125e-01 2.4929125019462210e+00 -1.5006745196923976e+00 + 8.9266930206584005e-01 2.6452013255489648e+00 -1.9907342843815827e+00 + 1.2634724377702584e+00 2.6172013667670440e+00 -2.5063004540304568e+00 + 1.6043362643212171e+00 2.4401816502120415e+00 -2.9796197885851869e+00 + 1.9028710452362882e+00 2.1725800219421498e+00 -3.3685883587975693e+00 + 2.1537898019945731e+00 1.8692933012676944e+00 -3.6613711574878991e+00 + 2.3646753405828318e+00 1.5461591886996806e+00 -3.8675219547608228e+00 + 2.5197876985753487e+00 1.2249723624423847e+00 -3.9907301767386416e+00 + 2.5627930802899632e+00 9.8950444211846245e-01 -4.0605501662383316e+00 + 2.4378553794431252e+00 8.7199221755637968e-01 -4.1584136973252512e+00 + 2.1153355736867141e+00 7.4733504998631650e-01 -4.3213052942776571e+00 + 1.7065122889943007e+00 4.3941816880959672e-01 -4.4251831504362755e+00 + 1.4875891172866387e+00 6.6944501228186612e-02 -4.3008028332741732e+00 + 1.6701205937398953e+00 6.7261587082057261e-02 -4.0607797321342831e+00 + id 11562 + loc 8.0110329389572144e-01 7.5555205345153809e-02 410 + blend 0.0000000000000000e+00 + interp 5.1019517909928680e-01:3.3273467809923318e-01:9.7126956936710762e-01:3.5640057087843885e-01:1.9968071465080952e+00:5.1019007714749587e-01:2.5248472875842545e+00:4.1939854581247205e-01:3.0200112057388329e+00:3.4396314299858499e-01:3.8904932563737313e+00 + CVs 20 + -2.9402740383079784e-01 1.1549719461778921e-01 1.9287317228399581e-01 + -5.7976695638021303e-01 2.2516769264632089e-01 3.8242757924717968e-01 + -8.7135144079855509e-01 3.4532703763345124e-01 5.5101329113241426e-01 + -1.1592554413102030e+00 4.6791677310167679e-01 6.8381002613728681e-01 + -1.4328224464971355e+00 5.8077828184581848e-01 7.9283555660732274e-01 + -1.6873492117482527e+00 6.8058809536804765e-01 9.0877380900338545e-01 + -1.9084658820973768e+00 7.6842228402389667e-01 1.0523930764037643e+00 + -2.0845709248860960e+00 8.4584976978366833e-01 1.2287372348461485e+00 + -2.2245129250262514e+00 9.1436821895370279e-01 1.4338711880133670e+00 + -2.3494627125189087e+00 9.7562199143208195e-01 1.6608237001333541e+00 + -2.4909543278282884e+00 9.9064540063483464e-01 1.9057000435439249e+00 + -2.6744307560971157e+00 8.6363791511820831e-01 2.1308745306796735e+00 + -2.8860105421766509e+00 5.6810261254064010e-01 2.2971959663611772e+00 + -3.0993994080841105e+00 1.6342746384044737e-01 2.4359183495977916e+00 + -3.2947083491994889e+00 -2.8074898596298814e-01 2.6072026196251277e+00 + -3.4502690425973621e+00 -6.9161756867763791e-01 2.8616510725262465e+00 + -3.5514563337712639e+00 -1.0177197383539112e+00 3.2120681457154165e+00 + -3.6308098596341831e+00 -1.2747362995974540e+00 3.6187579592230814e+00 + -3.8003845591318095e+00 -1.4615400540744290e+00 3.9585366287259185e+00 + id 11563 + loc 2.1123677492141724e-01 7.5990128517150879e-01 1047 + blend 0.0000000000000000e+00 + interp 3.2548398577719229e-01:3.2548073093733454e-01:9.5954110756645117e-01:2.9891658662776505e-01:1.4951116498625225e+00:2.7483972331597573e-01:2.1517415260987556e+00:2.8498946538304465e-01:2.9984892435881010e+00:2.7960109205708472e-01:3.8078467268768263e+00 + CVs 20 + 6.3240821787802853e-02 6.3949037370847861e-01 -2.9723902129905749e-01 + 1.6511165008626066e-01 1.2699872155019030e+00 -5.6305791272590655e-01 + 2.9885882510094774e-01 1.8681468130967067e+00 -7.9535683705937599e-01 + 4.7799264022324561e-01 2.4167927822933581e+00 -9.7227809712939928e-01 + 7.6061368813227115e-01 2.9173700474454503e+00 -1.0092067322173506e+00 + 1.1638244311572139e+00 3.3071455115970405e+00 -8.2291816475030721e-01 + 1.6164672083656331e+00 3.4819189817806775e+00 -4.2694556737629030e-01 + 2.0184662641296001e+00 3.3763536064805049e+00 9.2465871345215334e-02 + 2.2931420064933210e+00 3.0129466572804500e+00 6.2315199566669821e-01 + 2.4005742166636446e+00 2.4707306849897921e+00 1.0750489105956200e+00 + 2.3501460817437021e+00 1.8293013973775647e+00 1.4038422286848951e+00 + 2.1539334172820070e+00 1.1266955192038137e+00 1.6252249509379324e+00 + 1.7663579680328076e+00 4.0036460047133082e-01 1.8155781618876969e+00 + 1.1577307460630213e+00 -3.2337954661949442e-01 2.1164147406368725e+00 + 3.8670527163207302e-01 -1.0272838210120971e+00 2.8075269029676333e+00 + -1.7211547897019236e-01 -1.3885573445248580e+00 4.0370221519593246e+00 + -2.4738837023115495e-01 -1.1690746200055999e+00 5.3614394165228667e+00 + 6.4945619166697333e-02 -5.0111730074695471e-01 6.3744009642744697e+00 + 5.5930683376254486e-01 3.1050399401569218e-01 6.9068498394007634e+00 + id 11564 + loc 4.6306023001670837e-01 4.8969280719757080e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2878951621849282e-01:2.8804672602981074e-01:4.1491847479611832e-01:4.1057615370168005e-01:1.2569776648121149e+00:4.1190286962813943e-01:1.9979874884560047e+00:4.1091906195189704e-01:2.3741689957286480e+00:4.2878522832333066e-01:2.9293064031841087e+00:4.2703382024182812e-01:3.3174585988645102e+00:4.2567672019544545e-01:3.9855262295320708e+00 + CVs 20 + -2.5516913404161240e-01 4.3010044054094171e-01 -9.8192402313706434e-02 + -4.9615091810415940e-01 8.4956195509968657e-01 -2.5421261545089968e-01 + -7.3202257853235431e-01 1.2565198327370717e+00 -4.4115380487856803e-01 + -9.6004845176170361e-01 1.6421484378232083e+00 -6.4813607719623034e-01 + -1.2053791110556584e+00 2.0008656209941007e+00 -8.7197811289156346e-01 + -1.5183075843318783e+00 2.3150193003373793e+00 -1.1047197005283416e+00 + -1.9243266310301308e+00 2.5432511608849002e+00 -1.3276037138914627e+00 + -2.4015653858280297e+00 2.6360822658936582e+00 -1.5172606890930160e+00 + -2.8861693145495471e+00 2.5764580889450821e+00 -1.6567683494270362e+00 + -3.3249795063344916e+00 2.4058341883183201e+00 -1.7454842351524551e+00 + -3.7071595870343210e+00 2.1855948483311214e+00 -1.7890475473488856e+00 + -4.0434523740300126e+00 1.9685917163156246e+00 -1.7903144754946416e+00 + -4.3500336537484250e+00 1.7804274941040570e+00 -1.7476919715131936e+00 + -4.6125529940264016e+00 1.6317990559278481e+00 -1.6664908040738564e+00 + -4.7651595697439246e+00 1.5392157065229353e+00 -1.5472505867521873e+00 + -4.7164319385482392e+00 1.4529885910946796e+00 -1.3782602170275196e+00 + -4.4496829404476976e+00 1.1808085867295366e+00 -1.1866528337075450e+00 + -4.2938465243341453e+00 8.4843074667116181e-01 -1.0345020283646433e+00 + -4.3963504515665317e+00 1.2665386678832864e+00 -8.0858442465686264e-01 + id 11565 + loc 1.5962314605712891e-01 1.6266095638275146e-01 1090 + blend 0.0000000000000000e+00 + interp 2.5156975084031892e+00:3.1550105743466267e-01:4.1238390857632590e-02:4.6948273748018926e-01:8.4863791317976478e-01:6.0680031542869550e-01:1.0047917158371151e+00:9.3134444084555157e-01:1.1419962932209122e+00:2.5156875084031891e+00:3.1196580847923272e+00:2.2491340705641596e+00:3.2160432171048594e+00:1.8721937176890051e+00:3.3655839405820616e+00:4.6382926931997953e-01:3.8711027098829343e+00 + CVs 20 + 4.1697402944533390e-01 4.6990769961373424e-01 2.3763912585176655e-02 + 7.0718663790038694e-01 8.3505813752066682e-01 1.1407559320683092e-01 + 9.5348137957931456e-01 1.1586656734177585e+00 2.4560763510586553e-01 + 1.1772543450991444e+00 1.4586989509948980e+00 4.1167726224204126e-01 + 1.3548546248515245e+00 1.7208974152794252e+00 6.1525512481884570e-01 + 1.4648312652817275e+00 1.9242233731232949e+00 8.4800466540313135e-01 + 1.4927058141999827e+00 2.0408086912993362e+00 1.0855828937950305e+00 + 1.4458504598740514e+00 2.0443895602659188e+00 1.2825486423960717e+00 + 1.3751870495333294e+00 1.9406425897086255e+00 1.3904297400853782e+00 + 1.3368243667293220e+00 1.7837950851631499e+00 1.4239071988848764e+00 + 1.3332510243975022e+00 1.6044871966583338e+00 1.4314808712404243e+00 + 1.3614619136797699e+00 1.4027962547495845e+00 1.4267896995516582e+00 + 1.4337838736647415e+00 1.1857341510090875e+00 1.4075776055638625e+00 + 1.5699414524184925e+00 9.8031877033189341e-01 1.3674742907067314e+00 + 1.7716266441810777e+00 8.2531763477980236e-01 1.3012826274875913e+00 + 2.0090740838193204e+00 7.0760415022038925e-01 1.2306468425985058e+00 + 2.2780221087553705e+00 5.9944399692755357e-01 1.1950729322995133e+00 + 2.5820892655417476e+00 5.0052575837657454e-01 1.2138406617040434e+00 + 2.9022368194251467e+00 2.4654235680379122e-01 1.2639608234794633e+00 + id 11566 + loc 4.0163674950599670e-01 8.3043706417083740e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2097480081709115e-01:4.1602607993814722e-01:4.0077512094844603e-01:3.6788596813630425e-01:9.9406373777319224e-01:4.2097059106908302e-01:1.3791606690060980e+00:4.1826960903097987e-01:2.0018084627079427e+00:3.2430767734220167e-01:2.7607473460774754e+00:3.4881058324288577e-01:3.1557375780184787e+00:3.6839437124938262e-01:3.9465105366539706e+00 + CVs 20 + -2.0124654346030577e-01 3.0240994144052458e-01 3.3190669862841099e-01 + -3.9667612879215658e-01 5.8230347386683401e-01 5.9826707423267189e-01 + -5.7893244481860429e-01 8.6802346484115944e-01 8.4960454662797713e-01 + -7.5225089085584340e-01 1.1652403129978017e+00 1.1004396515576778e+00 + -9.3642809821851958e-01 1.4627855740741573e+00 1.3349189125054710e+00 + -1.1467327700544507e+00 1.7480210994822569e+00 1.5371665688337701e+00 + -1.3912526062880934e+00 2.0111564617715718e+00 1.6943942790762749e+00 + -1.6781323443696692e+00 2.2506232613179384e+00 1.7908961050909229e+00 + -2.0109722164576946e+00 2.4544160557483301e+00 1.7788340730665291e+00 + -2.3362212788225412e+00 2.5765352436760320e+00 1.6173225779853118e+00 + -2.5909831621358466e+00 2.6053202083678131e+00 1.3539536459171271e+00 + -2.7706521061332205e+00 2.5662711466364412e+00 1.0543707094225572e+00 + -2.9090582644140364e+00 2.4407044125076527e+00 7.6072549076628526e-01 + -3.0466821891381222e+00 2.1697085073173064e+00 5.2441012864556824e-01 + -3.1860605560804802e+00 1.7565939965514337e+00 3.6097198188838220e-01 + -3.2864016509943212e+00 1.2600181998480200e+00 2.2584301703306831e-01 + -3.3146425842127614e+00 7.4840812661285383e-01 6.6609937262938679e-02 + -3.2823277640030843e+00 3.2504304345338608e-01 -1.6491709101522994e-01 + -3.2835130640081931e+00 2.2717740717386176e-01 -4.6147101909234728e-01 + id 11567 + loc 2.1123677492141724e-01 5.5845630168914795e-01 410 + blend 0.0000000000000000e+00 + interp 3.5420621264125318e-01:2.9756520443954165e-01:1.7960978099771019e-01:3.2073156432023403e-01:9.9323206282129795e-01:3.5420267057912680e-01:1.5194026688722690e+00:2.8417687915079082e-01:2.0682063303368552e+00:3.0324714439104267e-01:3.0038734078756133e+00:3.4219033213984629e-01:3.7770435571811705e+00 + CVs 20 + 3.0781985439402204e-01 1.3432435972319498e-01 -1.2290078855780018e-01 + 5.7066429738368640e-01 2.2714813915735965e-01 -2.4461829198951845e-01 + 8.3006730038835608e-01 2.9889234351730481e-01 -3.6135500669893517e-01 + 1.1032944578767392e+00 3.5709259451143782e-01 -4.7094826308544235e-01 + 1.3864187028922017e+00 3.9829015172683724e-01 -5.7058480164263714e-01 + 1.6756673403397824e+00 4.2045176872874068e-01 -6.5456125599007886e-01 + 1.9668886403223440e+00 4.2301840367325705e-01 -7.1411540135735185e-01 + 2.2544765440612977e+00 4.0578204315041766e-01 -7.4186004433902042e-01 + 2.5331728952447339e+00 3.6919797861456427e-01 -7.3475853884484110e-01 + 2.7991127752314622e+00 3.1534505543142211e-01 -6.9299933844507655e-01 + 3.0412445943349398e+00 2.4538238475158058e-01 -6.2403563898375425e-01 + 3.2329702084400056e+00 1.5608215451476926e-01 -5.5591625150452972e-01 + 3.3485726353194281e+00 4.8756585415967724e-02 -5.2211672272886789e-01 + 3.3982981587925067e+00 -6.4724725520620474e-02 -5.1854527744578205e-01 + 3.4205441899613707e+00 -1.8031702883185208e-01 -5.2448337542549461e-01 + 3.4277723049246926e+00 -2.9557030941061435e-01 -5.3322068431651160e-01 + 3.4178125712573162e+00 -4.0319404832454664e-01 -5.3901974364396577e-01 + 3.4037022201801017e+00 -5.0643114589995197e-01 -5.4207931703749668e-01 + 3.4793670686791764e+00 -6.8647415989668947e-01 -6.2020145940316551e-01 + id 11568 + loc 7.9816117882728577e-02 8.2720053195953369e-01 1070 + blend 0.0000000000000000e+00 + interp 2.2392815223459523e+00:2.2392715223459523e+00:1.9325045216721626e+00:1.9303151886814580e+00:1.9480204672298469e+00:9.4085986218306450e-01:2.0010469711607191e+00:6.8983730642980923e-01:2.0111035108516835e+00:2.9153018073329329e-01:2.0816508592048359e+00:3.4150413271214208e-01:2.9736312503813007e+00:3.1518192307960935e-01:3.9933459235682425e+00 + CVs 20 + -2.7356556084577910e-01 4.6758258263434421e-01 3.6806365229403826e-01 + -4.9184545177555050e-01 8.5430203415417938e-01 6.5179554659759642e-01 + -6.6266582110645733e-01 1.2062842605922945e+00 9.2774339032105912e-01 + -8.3655871318763486e-01 1.5523240555479703e+00 1.1804031224128639e+00 + -1.0532214770899089e+00 1.8749678680564918e+00 1.3309177285706184e+00 + -1.3103251848965598e+00 2.1424022317137936e+00 1.3412745540532294e+00 + -1.5605707836969220e+00 2.3203333416093979e+00 1.2154762076253569e+00 + -1.6978975422342690e+00 2.3797943527680778e+00 9.8251120356015820e-01 + -1.5785434306018262e+00 2.3259432144174310e+00 7.5759104160085688e-01 + -1.2667291089380284e+00 2.2466235893308997e+00 7.2140137151331252e-01 + -9.9362504261127393e-01 2.1830239669150324e+00 7.6605741190610421e-01 + -7.3879453355341596e-01 2.0757459897661956e+00 8.0048801539902292e-01 + -4.6916919374226407e-01 1.8986993905838849e+00 8.6212783562948214e-01 + -1.8633587530001977e-01 1.6467101005858935e+00 9.1717948734273702e-01 + 1.1696813577921783e-01 1.2980894614183964e+00 8.6174242887881058e-01 + 3.9901064991372104e-01 8.8782248283105580e-01 5.8672864687060788e-01 + 5.5325294946952275e-01 5.9666111723202053e-01 1.7952424677486839e-02 + 3.9951136581478031e-01 8.3763382997017444e-01 -7.9000929552974086e-01 + 4.6075867800216141e-01 7.8223791025113454e-01 -1.0679228037787205e+00 + id 11569 + loc 8.4877383708953857e-01 1.7615799605846405e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5523877656730377e-01:3.9255589192170698e-01:1.5929498727480751e-01:3.2555105338718004e-01:9.5366554066532161e-01:3.6818646379944375e-01:1.6552576991189230e+00:4.3479925552408288e-01:2.5534624931967058e+00:4.5523422417953813e-01:2.9933255575141224e+00:2.9224026370171619e-01:3.7724188124475782e+00 + CVs 20 + 2.1628704261980108e-01 3.5394042278943405e-01 -1.2702101438142904e-01 + 4.4636858501431931e-01 7.1520732485982763e-01 -2.4770164052679355e-01 + 6.9986202959996069e-01 1.0820217875779174e+00 -3.7127612773183660e-01 + 9.9329192068971839e-01 1.4431387631172772e+00 -5.0781058973222626e-01 + 1.3468615134404187e+00 1.7744083606760510e+00 -6.6412944881119851e-01 + 1.7758853308675022e+00 2.0401245272175430e+00 -8.3981036866488856e-01 + 2.2824965720694386e+00 2.1972336219991000e+00 -1.0216839245438232e+00 + 2.8512208029536610e+00 2.2053539935292403e+00 -1.1814407554639459e+00 + 3.4458097598120658e+00 2.0303165113159150e+00 -1.2815635609061311e+00 + 3.9957740964175166e+00 1.6422308566937476e+00 -1.2833155984007689e+00 + 4.3871119819247992e+00 1.0433912028278223e+00 -1.1733944335028048e+00 + 4.5149185707627559e+00 3.0816445915535468e-01 -9.9256919116312781e-01 + 4.3699889129885818e+00 -4.4041059293737006e-01 -7.8575391653587612e-01 + 4.0718302462306424e+00 -1.1068330076483925e+00 -5.2695366556772683e-01 + 3.7665908276406674e+00 -1.6699924145313616e+00 -1.1163737746167013e-01 + 3.5076401620845967e+00 -2.0857661788730764e+00 5.5666888377363533e-01 + 3.3126295776248615e+00 -2.2156041275820915e+00 1.4979712958850468e+00 + 3.2317847468989598e+00 -2.0039907692217085e+00 2.4985471065678304e+00 + 3.1224786340407733e+00 -2.1868155545241903e+00 2.9242350019971708e+00 + id 11570 + loc 4.2411595582962036e-01 6.3392364978790283e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4382624105487978e-01:3.9965641426325371e-01:3.2208126186175590e-01:3.0916285345863870e-01:1.0077903128570842e+00:4.4382180279246924e-01:1.5895513351822426e+00:3.0899552376419265e-01:2.3582694795244050e+00:3.5698459541782929e-01:3.0648308801413773e+00:4.2617909704345713e-01:3.8821040897667656e+00 + CVs 20 + 5.8506578504311776e-02 2.3316616953611352e-01 -1.9072098104304303e-01 + 1.2299444588541819e-01 4.4435434439572924e-01 -3.8593391585802767e-01 + 1.8919142437219383e-01 6.3627287758439954e-01 -5.8056936687034955e-01 + 2.5730841870295046e-01 8.1301071583685647e-01 -7.7513246042380157e-01 + 3.3076581263738897e-01 9.7574785003581677e-01 -9.7135465558332790e-01 + 4.0853492881494835e-01 1.1281059745335105e+00 -1.1673859966594260e+00 + 4.8146243640816033e-01 1.2806598264757278e+00 -1.3619188319220048e+00 + 5.3907578375832665e-01 1.4464735300223757e+00 -1.5565885853622676e+00 + 5.8501029788925218e-01 1.6321484414610519e+00 -1.7548835348693510e+00 + 6.3719664652501862e-01 1.8374105825181566e+00 -1.9612385718303891e+00 + 7.1265842225427334e-01 2.0566757513783402e+00 -2.1857402545799380e+00 + 8.1828627512228724e-01 2.2674278731600745e+00 -2.4524658536261548e+00 + 9.4269926468332288e-01 2.4172210840891366e+00 -2.7850552781266891e+00 + 1.0558524237765265e+00 2.4446596845117563e+00 -3.1699970165455027e+00 + 1.1475082358445738e+00 2.3313964365272906e+00 -3.5683273205700159e+00 + 1.2359875457031566e+00 2.0938622530156703e+00 -3.9602675883261989e+00 + 1.3224640634526326e+00 1.7456797140145954e+00 -4.3397706995893097e+00 + 1.3592997078410163e+00 1.3025623419751633e+00 -4.6940594290899149e+00 + 1.3336086360782045e+00 8.8504815232794409e-01 -4.9683105020933436e+00 + id 11571 + loc 8.2396399974822998e-01 5.1901149749755859e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5749154150863386e-01:3.1036510647559634e-01:1.8130527525887286e-02:4.5748696659321880e-01:7.0511440806532022e-01:2.9561606460628270e-01:1.2206515842913355e+00:2.9712923236188377e-01:2.0016893422682469e+00:3.4273614064444990e-01:2.8222967999053052e+00:3.6332809845741953e-01:3.3627491472809576e+00 + CVs 20 + 1.5174408981311527e-01 2.5367982903220176e-01 -2.8582007046611829e-01 + 2.6247771393697406e-01 5.5164073765176291e-01 -5.1941334398955619e-01 + 3.6433099034199212e-01 8.6439981961029722e-01 -7.4284254969667163e-01 + 4.7815970080336739e-01 1.1734086106641870e+00 -9.8580258850432301e-01 + 6.1416721570808996e-01 1.4692051487704019e+00 -1.2640479022935525e+00 + 7.8243505948883263e-01 1.7375391999905583e+00 -1.5838350348573633e+00 + 9.9154682996681287e-01 1.9615078399812778e+00 -1.9409500235363017e+00 + 1.2446355541833884e+00 2.1241796509287729e+00 -2.3216473614720945e+00 + 1.5373275243083206e+00 2.2133565818300518e+00 -2.7053983173942946e+00 + 1.8607740168415823e+00 2.2237603762150981e+00 -3.0712512959523512e+00 + 2.2043919822287834e+00 2.1568847117071872e+00 -3.4050513981359041e+00 + 2.5589078581676534e+00 2.0181357440171981e+00 -3.7049025342042472e+00 + 2.9142833358343614e+00 1.8120458801675055e+00 -3.9770615765401098e+00 + 3.2555650962579556e+00 1.5405578485884257e+00 -4.2226846826769044e+00 + 3.5769499764235793e+00 1.2037349054744022e+00 -4.4347245729484914e+00 + 3.8610094594923234e+00 8.0061275696470946e-01 -4.6110024882861884e+00 + 4.0437057821868310e+00 3.4952406150031723e-01 -4.7423628328332015e+00 + 4.0710822077462634e+00 -9.8577320490219167e-02 -4.8675588203028042e+00 + 3.8591929552068911e+00 -2.5300336128002154e-01 -5.1425222440179814e+00 + id 11572 + loc 5.5867779254913330e-01 8.1886947154998779e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3107440942074782e-01:3.6022083964300822e-01:1.3314608516559057e-01:3.2759080352366837e-01:1.0012578134092027e+00:4.1086907994338140e-01:1.6663781295639952e+00:3.1001606324179154e-01:2.2438826783715169e+00:4.3107009867665363e-01:3.0771449913410174e+00:3.4462035963318050e-01:3.7600915175028855e+00 + CVs 20 + 8.5655446601729038e-02 2.9556700600792724e-01 -2.1741451598566344e-02 + 1.7443008057952233e-01 5.8908986302827571e-01 -3.6997479084448018e-02 + 2.7025783538185855e-01 8.7700297714937292e-01 -5.9177400346163644e-02 + 3.7823707508759707e-01 1.1598258059359028e+00 -9.4116911161673728e-02 + 5.1313847591724726e-01 1.4495486527440071e+00 -1.3927641765183557e-01 + 6.9106380133936729e-01 1.7490987023069351e+00 -2.0964200060715116e-01 + 9.1240340053207569e-01 2.0264574726741609e+00 -3.3710740476063172e-01 + 1.1626405479272690e+00 2.2376874689597068e+00 -5.3264176285445286e-01 + 1.4244094054162719e+00 2.3566446151213327e+00 -7.8111325471661841e-01 + 1.6822991353020316e+00 2.3749608145339125e+00 -1.0586595532355823e+00 + 1.9313794399028448e+00 2.3015985175728852e+00 -1.3411327413374092e+00 + 2.1767550723602520e+00 2.1547957952597097e+00 -1.6073497171988684e+00 + 2.4272567218503682e+00 1.9420358488315395e+00 -1.8376905749749786e+00 + 2.6985363110836778e+00 1.6355812262788021e+00 -2.0186151327655493e+00 + 2.9819289962835462e+00 1.1910337940692945e+00 -2.1730611905957771e+00 + 3.1948903178044739e+00 5.9808459766009059e-01 -2.3541196882733790e+00 + 3.2251001271492439e+00 -9.2790528435990893e-02 -2.5894721470932938e+00 + 2.9946907495432531e+00 -7.4509444479735654e-01 -2.8257343983144629e+00 + 2.6023795854244050e+00 -1.0996810946829085e+00 -2.8702603474950195e+00 + id 11573 + loc 8.1824862957000732e-01 5.9938615560531616e-01 1074 + blend 0.0000000000000000e+00 + interp 5.1414238253283751e-01:4.5683280348863303e-01:4.9930532688637452e-01:3.6756816720854535e-01:9.8049706339290521e-01:3.8922538764499859e-01:1.3605219944683244e+00:4.7634617092258452e-01:1.9953021454831354e+00:4.1016072654071778e-01:2.4232318950865213e+00:5.1413724110901216e-01:2.9751343044198153e+00:3.8676477062997189e-01:3.2782452969248901e+00:3.3259252464107808e-01:3.9993810725900714e+00 + CVs 20 + 1.1512248835264062e-01 2.5259967624862167e-01 -2.5952362751721481e-01 + 2.4245422035655340e-01 4.9040270027472782e-01 -5.1011133190693370e-01 + 3.8957359171577860e-01 7.1167811882340315e-01 -7.5267840469179015e-01 + 5.5855674408337097e-01 9.1268119099761802e-01 -9.8665590650562951e-01 + 7.4625987793824433e-01 1.0883879325643131e+00 -1.2110668155681057e+00 + 9.4685351466724343e-01 1.2344695054807266e+00 -1.4290572142950355e+00 + 1.1525170542278440e+00 1.3482511902237864e+00 -1.6466941278062297e+00 + 1.3524886613922091e+00 1.4279056306619096e+00 -1.8717628830514983e+00 + 1.5333852071299063e+00 1.4712042720400165e+00 -2.1142310710040633e+00 + 1.6829251333853832e+00 1.4758379680619709e+00 -2.3816129386684275e+00 + 1.7918913109885575e+00 1.4392304689834767e+00 -2.6716021709580060e+00 + 1.8533642639028374e+00 1.3591103391655581e+00 -2.9724747538076111e+00 + 1.8626096376498653e+00 1.2351599723289191e+00 -3.2677047133221726e+00 + 1.8177050196289752e+00 1.0707741104946440e+00 -3.5350403340766814e+00 + 1.7213914711553795e+00 8.7372077756036870e-01 -3.7477963531282001e+00 + 1.5818750398612638e+00 6.5569803615903000e-01 -3.8838559151479104e+00 + 1.4088548769953437e+00 4.2948609333945359e-01 -3.9383761067625485e+00 + 1.2024038825247336e+00 2.4053511904733416e-01 -3.9077462583429767e+00 + 9.3677373260203345e-01 -9.2318113200394014e-02 -3.9127219613811026e+00 + id 11574 + loc 5.1828449964523315e-01 2.2135458886623383e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2521967833742822e-01:3.9288885668457479e-01:1.6535228966980231e-01:4.5102067337989604e-01:1.0025255499888883e+00:5.2521442614064484e-01:1.4092508636144190e+00:4.9213633054452577e-01:1.9392414860511940e+00:3.3468889931820500e-01:2.8423590948876205e+00:4.3447994389397382e-01:3.2705974559290318e+00:3.2354953170733652e-01:3.8945267728926249e+00 + CVs 20 + 2.4185417213332328e-01 3.7007205422133332e-01 -2.2422899709840244e-01 + 4.5893025133277376e-01 7.0815158424745928e-01 -3.8525511643100685e-01 + 6.8562066050981252e-01 1.0296235745345608e+00 -5.2171250909782818e-01 + 9.4273315281578196e-01 1.3363636698134373e+00 -6.4253163060585283e-01 + 1.2416996996510026e+00 1.6192772538869624e+00 -7.3170837870404193e-01 + 1.5865905048632531e+00 1.8664109450710740e+00 -7.7404466258472304e-01 + 1.9706401321026614e+00 2.0637037166787944e+00 -7.5814403670311070e-01 + 2.3772170883885675e+00 2.1984639862762672e+00 -6.7885671024389904e-01 + 2.7836743441647149e+00 2.2626206734527035e+00 -5.3854384664005694e-01 + 3.1658477101486180e+00 2.2536414950660029e+00 -3.4904594545161471e-01 + 3.5056132491593859e+00 2.1754418159013560e+00 -1.3213750285661041e-01 + 3.7954208174111428e+00 2.0362504127570178e+00 8.7979429814333154e-02 + 4.0318468905839868e+00 1.8463370210877452e+00 2.9016489961033765e-01 + 4.2059892458424910e+00 1.6208733715243815e+00 4.6153742336928688e-01 + 4.3056155700493060e+00 1.3795236323520093e+00 6.0588927618978516e-01 + 4.3227146639040610e+00 1.1256817256394351e+00 7.2453163702474466e-01 + 4.2571724726752294e+00 8.2914361662843095e-01 7.9835766462682600e-01 + 4.1595484962653018e+00 4.6367138535965863e-01 7.8766287488311593e-01 + 4.1792186385129391e+00 2.3343800550246285e-01 5.6736834856255169e-01 + id 11575 + loc 1.3623484969139099e-01 6.9561976194381714e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3536633859129309e-01:4.1494676376948331e-01:1.1808742712958697e-01:2.6329800395165504e-01:8.5879237382063445e-01:3.6041524895459365e-01:1.3325693967584753e+00:4.0269931492816724e-01:2.0007590527968793e+00:2.7748075569326591e-01:2.4920705096442259e+00:4.3536198492790718e-01:2.9719677169056098e+00:4.1114623952324053e-01:3.5255504952230723e+00 + CVs 20 + 2.0604240822852057e-01 3.7973088112983538e-01 -2.1422106583381806e-01 + 4.2900657377746199e-01 7.5662670455486658e-01 -4.5152600293247547e-01 + 6.6345933481632469e-01 1.1381986521669307e+00 -6.8668798980421564e-01 + 9.0710776863223264e-01 1.5213361728041064e+00 -9.0261727018646820e-01 + 1.1510648251926370e+00 1.8855010532777567e+00 -1.1134685537106039e+00 + 1.3767670774821095e+00 2.1954178996653027e+00 -1.3717277895420859e+00 + 1.5685107581438662e+00 2.4134909739813839e+00 -1.7216488256310745e+00 + 1.7098748935050265e+00 2.4804748375423324e+00 -2.1609825875313842e+00 + 1.7806398161403070e+00 2.3430146475346687e+00 -2.6302431682265195e+00 + 1.7896531294343385e+00 2.0304444607117800e+00 -3.0662154006796611e+00 + 1.7770315550873999e+00 1.6003077783505311e+00 -3.4527327619259696e+00 + 1.8025042894157211e+00 1.1098569101971698e+00 -3.8049204088296578e+00 + 1.9149653123922137e+00 6.4064378258113097e-01 -4.1750609265896648e+00 + 2.1010352779901020e+00 3.1556968846195604e-01 -4.6343263402893990e+00 + 2.2852463739988607e+00 3.1002469844992014e-01 -5.2031284988595594e+00 + 2.3620469021060271e+00 7.7681940611249989e-01 -5.7168022912089667e+00 + 2.2092532300756016e+00 1.6547618245577860e+00 -5.8075579075523800e+00 + 1.9011634049310269e+00 2.3535933720497590e+00 -5.4975463386823806e+00 + 1.8668653805975552e+00 2.6352358549232631e+00 -5.8501564457382500e+00 + id 11576 + loc 4.5703992247581482e-01 8.2252311706542969e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7698785963953844e-01:4.7698308976094206e-01:8.3577223068720419e-01:3.4762239451152449e-01:1.2545447784918047e+00:4.1724029365318654e-01:1.9854909664168872e+00:3.3019813058351549e-01:2.8972000080160334e+00:4.4437834458385234e-01:3.3857620339409662e+00:2.8799862490919842e-01:3.9866271626330878e+00 + CVs 20 + 1.4419691473937246e-01 1.9901185907828389e-01 -2.6333563141119515e-01 + 2.6303246527269564e-01 4.0340121359318298e-01 -5.4296923765135074e-01 + 3.6353530931533046e-01 6.0677600017636280e-01 -8.3502813940004361e-01 + 4.4606651282096327e-01 8.0762396265782510e-01 -1.1320083917162063e+00 + 5.0707624681645047e-01 1.0050381783041877e+00 -1.4272680800984074e+00 + 5.4613550472481931e-01 1.1948590727773576e+00 -1.7229535494852055e+00 + 5.6871978061831785e-01 1.3735918778288676e+00 -2.0306572861457877e+00 + 5.8462735230544560e-01 1.5365728474662113e+00 -2.3612056780131256e+00 + 6.0150676300184236e-01 1.6700548378192484e+00 -2.7149108964820243e+00 + 6.2127883097867209e-01 1.7489660451091666e+00 -3.0797070618219924e+00 + 6.3959710033554495e-01 1.7465128456576680e+00 -3.4339872583073228e+00 + 6.4695802135642866e-01 1.6528435944831417e+00 -3.7500531216332265e+00 + 6.3545360789712779e-01 1.4817330065411016e+00 -4.0036436992400022e+00 + 6.0917003792627988e-01 1.2589522000987881e+00 -4.1921511185965583e+00 + 5.7852961455169249e-01 1.0055485068858003e+00 -4.3299101232226720e+00 + 5.3706378117427567e-01 7.4923402871933065e-01 -4.4159532187622466e+00 + 4.6650918583320944e-01 5.3413340635508055e-01 -4.4447659967602196e+00 + 3.7674356871386783e-01 3.6003058837546964e-01 -4.4465968500898425e+00 + 3.5510332698170877e-01 -4.5967340412848834e-03 -4.5957183514278688e+00 + id 11577 + loc 5.9839016199111938e-01 5.4049426317214966e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4674259003733091e-01:2.6653670900510074e-01:3.6026097608278307e-01:4.0822569279501336e-01:9.8613489189035897e-01:4.4673812261143053e-01:1.6168742688326918e+00:3.4854765707946006e-01:2.1047814684357506e+00:3.0000532948457087e-01:2.9607200710953849e+00:3.6863911044771586e-01:3.9268813915601406e+00 + CVs 20 + -2.4388310189547455e-01 3.7626904731179456e-01 2.3658062046103168e-01 + -4.6731415669225596e-01 7.3144591309860396e-01 4.4187965947515423e-01 + -6.7398008797406339e-01 1.0817662456494870e+00 6.3942611775762137e-01 + -8.7809225784141542e-01 1.4316161315642693e+00 8.2456857192819200e-01 + -1.0956651290409278e+00 1.7730342706927640e+00 9.7416305208032972e-01 + -1.3347829217548064e+00 2.0967217658426520e+00 1.0704407213751344e+00 + -1.5938980273737597e+00 2.3930427619147885e+00 1.1031217559402493e+00 + -1.8633581040173195e+00 2.6526200065993644e+00 1.0674906197227176e+00 + -2.1272585720061628e+00 2.8670539053463688e+00 9.6035562578479583e-01 + -2.3683942049440794e+00 3.0293258043869176e+00 7.7269449197845042e-01 + -2.5685624856674960e+00 3.1367044761892231e+00 4.9351533767940858e-01 + -2.7159088931971098e+00 3.1803554960496712e+00 1.0129204991265905e-01 + -2.8045875829240510e+00 3.1175944651576799e+00 -3.8376531226186716e-01 + -2.8558474548145472e+00 2.9631208222450449e+00 -7.9792558995103691e-01 + -2.9212222373445513e+00 2.8427940229626536e+00 -9.8668104076939733e-01 + -3.0383220835175906e+00 2.7940090305285095e+00 -9.0836138759681018e-01 + -3.1847967946812057e+00 2.7092860901295488e+00 -5.5800659060098345e-01 + -3.2783287993804717e+00 2.4573625328464654e+00 -8.4129070145982920e-02 + -3.1561349512800168e+00 2.4833322170205392e+00 -2.3666392946515868e-01 + id 11578 + loc 8.3352488279342651e-01 7.9263228178024292e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3176252822998540e-01:2.6581488313392077e-01:4.6518345561845753e-02:3.3236060407896068e-01:9.3461599130644391e-01:3.0878732419599125e-01:1.2834264532013460e+00:2.9014087143248080e-01:2.0280770365961192e+00:4.3175821060470310e-01:2.9987552059201286e+00:3.3749390827456671e-01:3.1049870652242624e+00 + CVs 20 + -1.3131819692706170e-01 3.5122382995333379e-01 1.3184727544709074e-01 + -2.9840090162715194e-01 6.7554901006934531e-01 2.1010129302814065e-01 + -4.9622190074147332e-01 9.7786790731643991e-01 2.4952713779667174e-01 + -7.2086759868372918e-01 1.2455152987934091e+00 2.5253666146151366e-01 + -9.6613053380841252e-01 1.4557253417327427e+00 2.1502245571358536e-01 + -1.2159282144936370e+00 1.5892606616755325e+00 1.3989081211222054e-01 + -1.4479646651146689e+00 1.6365215885359596e+00 3.7642008514431113e-02 + -1.6418477081669460e+00 1.6016579549534868e+00 -7.6276236425517230e-02 + -1.7845710874166980e+00 1.4997092764608726e+00 -1.8378706391838517e-01 + -1.8756009149205854e+00 1.3502980917379257e+00 -2.7020125236392523e-01 + -1.9198977086982227e+00 1.1725380988945084e+00 -3.2469053800967351e-01 + -1.9182300255532923e+00 9.8948441801849440e-01 -3.3668247153225261e-01 + -1.8692805594810535e+00 8.2955580075711743e-01 -3.0369504742926684e-01 + -1.7748313293995417e+00 7.1674225827715499e-01 -2.4142724027241930e-01 + -1.6443033186297227e+00 6.5325724618273040e-01 -1.8218254343645934e-01 + -1.5204625264935840e+00 5.5572423438570007e-01 -1.3163770155139171e-01 + -1.4647247903616212e+00 3.3123644981053407e-01 -2.4539907622321000e-03 + -1.5154701873877747e+00 4.8039454306360141e-02 2.7518381681628784e-01 + -1.5867320032525365e+00 -8.5128556063716915e-02 5.6639118238815200e-01 + id 11579 + loc 3.3358338475227356e-01 3.1463620066642761e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0282621273436953e-01:3.2039067317344294e-01:3.2917640167631601e-01:3.8877366157031112e-01:1.0145004172490690e+00:3.2034661150898980e-01:1.8254858330850268e+00:3.7194119971194584e-01:2.5265496397280813e+00:4.0282218447224222e-01:3.0076006661749606e+00:3.2769803489205723e-01:3.5637874363070265e+00 + CVs 20 + -3.0928368403509349e-01 6.1105892856289401e-01 -1.0080793084044867e-01 + -5.5370058588176074e-01 1.2276139487885027e+00 -2.5162281260332792e-01 + -7.0666322218837041e-01 1.8349288413592266e+00 -4.6169778612255058e-01 + -7.8111776077171835e-01 2.3924551724012404e+00 -7.4027117971837586e-01 + -8.2553112373828541e-01 2.8591067818831015e+00 -1.0812252636267838e+00 + -8.9378313676315724e-01 3.2075440204374317e+00 -1.4285911922418317e+00 + -1.0103063130432142e+00 3.4683732950211086e+00 -1.7108413000767226e+00 + -1.0631044843483068e+00 3.6611505050245956e+00 -2.0364014107451851e+00 + -1.0991722219328648e+00 3.7448079033190584e+00 -2.4722018465784235e+00 + -1.2389274152812471e+00 3.6822742133273998e+00 -3.0106048535931911e+00 + -1.4837267667427949e+00 3.3844051706147700e+00 -3.6031418061707701e+00 + -1.7032989556407174e+00 2.7832812004449359e+00 -4.1487395314342299e+00 + -1.7260187584591766e+00 1.9669111733787865e+00 -4.5189054446907786e+00 + -1.5010725969944083e+00 1.1411130329832901e+00 -4.6690487079970895e+00 + -1.1492419722695706e+00 4.9228671656786849e-01 -4.6426960042447689e+00 + -8.4476272732594460e-01 2.9516098467875623e-01 -4.4864460129303874e+00 + -6.4445146422772814e-01 -8.9326631124143852e-01 -1.9639339726824037e+00 + -8.7348954779238275e-01 -1.1980197598455815e+00 -2.2512004535152492e+00 + -7.7851634487623000e-01 -6.8412741213678629e-01 -2.2058461405127323e+00 + id 11580 + loc 7.6775088906288147e-02 5.8335316181182861e-01 1085 + blend 0.0000000000000000e+00 + interp 5.3641712421070875e-01:2.8699109695299174e-01:3.0483071033919729e-01:5.3641176003946667e-01:1.0093837589975361e+00:3.4988483243847951e-01:1.9440202357711853e+00:3.2462093654356028e-01:2.7855633049277113e+00:3.1701094375764660e-01:3.6111488552757738e+00 + CVs 20 + -1.8256504897573994e-01 4.6580937188594895e-01 4.1739669105568783e-01 + -3.9368675370559802e-01 8.5394117211820930e-01 6.7634615155285005e-01 + -6.3347671806993633e-01 1.2104982068787320e+00 8.6941563424590407e-01 + -9.0143750020554836e-01 1.5444636932017999e+00 1.0194751454324387e+00 + -1.1919855888253703e+00 1.8395438780444198e+00 1.1129945934874454e+00 + -1.4936122834817525e+00 2.0798163049642602e+00 1.1404985072126259e+00 + -1.7894448887712679e+00 2.2517404228216802e+00 1.0978528027485195e+00 + -2.0613597415926317e+00 2.3478066337736792e+00 9.8946517438361303e-01 + -2.3009690734919048e+00 2.3671707845112824e+00 8.2903596167436522e-01 + -2.5215784768500380e+00 2.3108720679226527e+00 6.3447344745307244e-01 + -2.7404062020693747e+00 2.1752039789593214e+00 4.2435341746856492e-01 + -2.9625314489917587e+00 1.9559728952588276e+00 2.2217793745601760e-01 + -3.1889847463848864e+00 1.6535808592861010e+00 5.6621355952062025e-02 + -3.4252214004417407e+00 1.2722338171861023e+00 -3.6531247065093780e-02 + -3.6680527158192189e+00 8.4807888624068573e-01 -1.7616042112379625e-02 + -3.9095728874404334e+00 4.5924214628277304e-01 1.1815050380455377e-01 + -4.1483595203315753e+00 1.6929671377376959e-01 3.3236703615950691e-01 + -4.3778078314677877e+00 -1.8395432663883937e-02 5.7692698131161391e-01 + -4.6037805121937136e+00 -2.0740740284654169e-01 8.3371455511901449e-01 + id 11581 + loc 2.0682123303413391e-01 3.4221994876861572e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5200638871394155e-01:3.9397019026026803e-01:7.9994964246664302e-01:3.1131898906250516e-01:1.4727154436653942e+00:3.8269421923830355e-01:2.0073197587914620e+00:4.3162243535477529e-01:2.8437505390036293e+00:4.5200186865005443e-01:3.1888094734138344e+00:3.9366267712593023e-01:3.9890267871329281e+00 + CVs 20 + -1.7298724610540131e-01 4.4966584473846971e-01 -1.8636250611394442e-01 + -3.2480344947076684e-01 8.9425133320426509e-01 -3.4897423585535453e-01 + -4.4145479626250084e-01 1.3249039721778295e+00 -4.8078669683470077e-01 + -4.9895360801376237e-01 1.7275092665253058e+00 -5.7307324871389231e-01 + -5.0338318764065448e-01 2.1109320172701111e+00 -6.2966843251437532e-01 + -5.1589785568007018e-01 2.5306880684073780e+00 -6.7629515743572266e-01 + -6.8595295157591618e-01 3.0036060248960936e+00 -7.7936507427231483e-01 + -9.9642740134028751e-01 3.3641557394991821e+00 -8.9562569752811971e-01 + -1.3475160755470550e+00 3.6025830784569153e+00 -9.9786060191337123e-01 + -1.7191496689177348e+00 3.7436625079531707e+00 -1.1305932906009692e+00 + -2.0401876250678757e+00 3.8198095302646160e+00 -1.1674452945142684e+00 + -2.3665437690052875e+00 3.8339126257398046e+00 -1.2311597963581158e+00 + -2.6732143509971169e+00 3.7977582136525436e+00 -1.4613967911130348e+00 + -2.9451258314680744e+00 3.7246025835228580e+00 -1.8472676369205447e+00 + -3.1995984263909580e+00 3.5788758268571068e+00 -2.4352504388675689e+00 + -3.4299040349668433e+00 3.2486790112844708e+00 -3.1740991260497218e+00 + -3.5933498232226064e+00 2.5118801793568291e+00 -4.0388422126906063e+00 + -3.3645199867042423e+00 1.4025383947151067e+00 -4.6575217349076059e+00 + -3.1857395390646199e+00 1.2426287337225097e+00 -4.5862961933442872e+00 + id 11582 + loc 9.0233540534973145e-01 8.9399319887161255e-01 1090 + blend 0.0000000000000000e+00 + interp 2.2491440705641597e+00:5.0658241792799141e-01:4.1870055131964845e-02:2.2491340705641596e+00:5.4281342853070313e-01:4.0213544495916620e-01:1.9963571138642111e+00:3.7628386832995403e-01:2.3979390471304836e+00:3.0666842252115062e-01:3.0399016947875381e+00:4.8955260249117105e-01:3.5148078999906596e+00 + CVs 20 + 3.6473091480118552e-01 4.8623829270453667e-01 6.7405695102382895e-02 + 5.6681558331783966e-01 9.0389938198210640e-01 1.0364739569971976e-01 + 7.0501645143635794e-01 1.3002950759032839e+00 1.3129223233219800e-01 + 8.1906717320718936e-01 1.6916234902680700e+00 1.5747841663220263e-01 + 8.9665697351339313e-01 2.0641015728359640e+00 1.7168106776693404e-01 + 9.2279735556381159e-01 2.4034953126974470e+00 1.6156622030928836e-01 + 8.7932939777314756e-01 2.6985427509449638e+00 1.0816636254949508e-01 + 7.4294699209597637e-01 2.9282987298157686e+00 -1.9132433008919647e-02 + 5.1293637213511512e-01 3.0310927264764618e+00 -2.1672474168073985e-01 + 2.5511571798373200e-01 2.9955559466525288e+00 -4.0651681683254171e-01 + 7.1468832546777161e-03 2.8839601342077561e+00 -5.5505902567328769e-01 + -2.3202904063400065e-01 2.7279116763028064e+00 -6.6704316973795652e-01 + -4.6108414769408279e-01 2.5415256420201406e+00 -7.3977192018026283e-01 + -6.7283485979241586e-01 2.3411581957280214e+00 -7.6438771518580906e-01 + -8.5862057883824372e-01 2.1428913404070822e+00 -7.3386403875032957e-01 + -1.0047539716135265e+00 1.9829841280510194e+00 -6.5899429951607957e-01 + -1.0982054405015285e+00 1.9080813530558380e+00 -6.0434244195081444e-01 + -1.1357815645993932e+00 1.8897474808412424e+00 -6.5118485332660803e-01 + -1.2301358255813915e+00 1.8117237485961060e+00 -4.4982180962730833e-01 + id 11583 + loc 4.3623864650726318e-01 3.3557412028312683e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4668145839759360e-01:4.1572945628698199e-01:1.2238462863477184e-02:4.1894783311967215e-01:8.9955517114731698e-01:4.4667699158300966e-01:1.4454713365899179e+00:3.4763255370477902e-01:2.0002622823098339e+00:2.6630182192506308e-01:2.8686210061008452e+00:3.3164626501144340e-01:3.6996670231684137e+00 + CVs 20 + -2.3802103501971267e-01 2.6097432570854084e-01 -1.1020654972129214e-01 + -4.7653209098480348e-01 5.7233193541525684e-01 -1.7745567060200765e-01 + -7.2098471059958025e-01 9.0794902758261165e-01 -2.2751112682281499e-01 + -9.8796788658203205e-01 1.2444692576860981e+00 -2.8088816429460084e-01 + -1.2955896703376224e+00 1.5604734941609610e+00 -3.5205998779032777e-01 + -1.6492904080157500e+00 1.8297601679896704e+00 -4.5426102499790866e-01 + -2.0371354872970011e+00 2.0200503166570662e+00 -6.0490479345609582e-01 + -2.4282210663296615e+00 2.0958080462637163e+00 -8.2140072598282299e-01 + -2.7817714600401127e+00 2.0363629053233079e+00 -1.0982073241168189e+00 + -3.0758830736185927e+00 1.8559894521899838e+00 -1.4011621895935527e+00 + -3.3114903654573440e+00 1.5861107575401419e+00 -1.6811529046206952e+00 + -3.4981393191981063e+00 1.2687765404131310e+00 -1.8697830651086074e+00 + -3.6496716586580251e+00 9.5661644650523192e-01 -1.9454564605451046e+00 + -3.7719924165024583e+00 6.2928643642047011e-01 -2.0138434459157195e+00 + -3.8463630829410991e+00 2.1860769584830375e-01 -2.1833456007966161e+00 + -3.8479313085824449e+00 -2.1840213079924364e-01 -2.4932202696908825e+00 + -3.7977723845054356e+00 -5.4143639135523514e-01 -2.9112970173044403e+00 + -3.7486607446982099e+00 -6.8757261627179422e-01 -3.3175937715337303e+00 + -3.7375862941855393e+00 -6.8329901499458390e-01 -3.5920462908542290e+00 + id 11584 + loc 9.5471644401550293e-01 3.1017971038818359e-01 1054 + blend 0.0000000000000000e+00 + interp 1.3800821191897463e+00:4.2867817829031057e-01:3.4341854256532711e-01:1.3800721191897463e+00:2.0388623417042866e+00:6.5169205976282252e-01:2.2142321469158892e+00:4.5001173197631622e-01:2.4465366487794427e+00:2.7877574857438220e-01:3.1656517346448485e+00:3.3021059256878504e-01:3.8201750023904038e+00 + CVs 20 + -1.0185983053106426e-01 4.6527969154511128e-01 3.6783835807044113e-01 + -2.1854399098544330e-01 9.2169114315529455e-01 6.4253828294988113e-01 + -3.2925655978106394e-01 1.3979870358689779e+00 8.4075239033322191e-01 + -4.7837659109568897e-01 1.8628430331781018e+00 1.0127734416205121e+00 + -7.2406470275025936e-01 2.2285567921501341e+00 1.2205394384603006e+00 + -1.0510212342334828e+00 2.4153632552057140e+00 1.4884260618329628e+00 + -1.3930369775598259e+00 2.3981775054649859e+00 1.7926350421589137e+00 + -1.7076975053334016e+00 2.2011505128930722e+00 2.0908934734943685e+00 + -1.9928418876702971e+00 1.8646854721656418e+00 2.3423526270227306e+00 + -2.2851826012260479e+00 1.4404474292661522e+00 2.5157905438587513e+00 + -2.6402798269072618e+00 1.0036346653442103e+00 2.5977590948049549e+00 + -3.0239934774102899e+00 6.8793037149564529e-01 2.6598373346680271e+00 + -3.2297196179099918e+00 5.8290440791390097e-01 2.8324273923916570e+00 + -3.1334382654428152e+00 5.6888738452994747e-01 3.0037554883036575e+00 + -3.0128840897029039e+00 5.1963651263386024e-01 3.1115213026450377e+00 + -2.9942712955908415e+00 4.5940378041514829e-01 3.3021485330778986e+00 + -3.1191285844026746e+00 3.8982163839103690e-01 3.6885079994602998e+00 + -3.4576065844579800e+00 2.0289805856393239e-01 4.1884944984471844e+00 + -3.6195875933934616e+00 1.5220127830932739e-02 4.3113056713676379e+00 + id 11585 + loc 2.6418948173522949e-01 3.4872731566429138e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4993028712912775e-01:4.4992578782625647e-01:2.8312020478491284e-01:3.4045872801576571e-01:8.3157745785312831e-01:2.8473612524730829e-01:1.1942609126603549e+00:3.0725159093895538e-01:2.0089108801922575e+00:3.0532019848757030e-01:2.7292425753604759e+00:3.1595248930942404e-01:3.4467194334311242e+00 + CVs 20 + 3.8809454291958567e-01 4.1388275838214583e-01 3.0078363527120161e-01 + 7.0510851699755062e-01 7.6851452128726894e-01 5.7311837455029524e-01 + 1.0154206709058797e+00 1.1052430868504890e+00 8.3338354735279874e-01 + 1.3208247776351758e+00 1.4413979775029315e+00 1.1124065399785883e+00 + 1.5791983446095788e+00 1.7691905320225518e+00 1.4372447920200164e+00 + 1.7514198616902794e+00 2.0739809311775770e+00 1.8147024498614268e+00 + 1.8072615342997524e+00 2.3355028028095770e+00 2.2258108528886269e+00 + 1.7248083021502252e+00 2.5301345521984784e+00 2.6277809799686991e+00 + 1.5054118770672698e+00 2.6327321145911684e+00 2.9583290633190131e+00 + 1.1962878871136002e+00 2.6371247292154072e+00 3.1732929072130291e+00 + 8.4957465318982828e-01 2.5500013160597383e+00 3.2862319885476778e+00 + 4.9396517479094348e-01 2.3523336474997665e+00 3.3331360319770260e+00 + 1.6742478473073752e-01 2.0370392135080539e+00 3.3299760638518903e+00 + -1.1266178609492039e-01 1.6810639105555945e+00 3.2646303516884703e+00 + -3.7152081117331104e-01 1.4004625529562653e+00 3.1251418077339030e+00 + -6.0809334828121120e-01 1.2985315249793579e+00 2.9369443443698562e+00 + -7.6402280332684991e-01 1.4168699625308494e+00 2.7644648655578603e+00 + -8.0828529580105213e-01 1.6520908850174276e+00 2.6408087904237307e+00 + -1.1785925780187996e+00 1.6925747597211727e+00 2.4038022993624049e+00 + id 11586 + loc 4.8986062407493591e-01 2.3606947064399719e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0508060459809614e-01:3.2569418100099334e-01:1.2776308670869063e-01:3.9437106546389272e-01:1.0017896215843805e+00:4.0507655379205015e-01:1.5108641436483055e+00:3.2289529355541285e-01:2.0047914947729795e+00:3.8544498873500410e-01:2.7638893604498027e+00:3.2754492981108047e-01:3.5176614618942801e+00 + CVs 20 + -7.1399908407744753e-02 3.7556531251803560e-01 -2.9835061515190314e-01 + -1.9543258854333045e-01 7.3367718255462033e-01 -5.8239442019827803e-01 + -3.6755688294556321e-01 1.0646696917329430e+00 -8.5429095612082862e-01 + -5.8766417718435915e-01 1.3623251283538922e+00 -1.1064370621487523e+00 + -8.4656120378324795e-01 1.6168781506277994e+00 -1.3291887743874002e+00 + -1.1230258418811145e+00 1.8220659290899623e+00 -1.5248818112286004e+00 + -1.3988423723046490e+00 1.9824793082623697e+00 -1.7059236982492747e+00 + -1.6639712918371186e+00 2.1081290872654606e+00 -1.8844761516589104e+00 + -1.9117986784561225e+00 2.2077877308183433e+00 -2.0674928168152684e+00 + -2.1427549691385948e+00 2.2879927174568309e+00 -2.2637938303221654e+00 + -2.3663759690446620e+00 2.3469744145977938e+00 -2.4941303606742942e+00 + -2.5948046395570064e+00 2.3657206599021046e+00 -2.7838737014916219e+00 + -2.8416477980813006e+00 2.2944280716397221e+00 -3.1357596602795659e+00 + -3.1012273422819354e+00 2.0667768074138486e+00 -3.4866867394575096e+00 + -3.3398231719605214e+00 1.6813426582756794e+00 -3.7554198431893266e+00 + -3.5356594114258444e+00 1.1262708719557051e+00 -3.9253097008101485e+00 + -3.6538406879901495e+00 2.9388301143096807e-01 -3.8701108729593474e+00 + -3.6481029395944700e+00 -4.8963641243664680e-01 -3.2845400953301103e+00 + -3.6626660765936725e+00 -6.2414444513744205e-01 -2.9420562844589004e+00 + id 11587 + loc 7.7141779661178589e-01 3.9377185702323914e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6817694511349253e-01:2.5404487008470361e-01:9.6476221670852569e-03:2.6101082059866398e-01:6.8604092216646362e-01:3.6817326334404143e-01:1.0471445593427520e+00:2.7211149162260073e-01:1.8261364375914946e+00:2.3994822318309422e-01:2.3286460636739661e+00:2.9819400282568864e-01:3.2253229825234153e+00 + CVs 20 + -7.5029114016197190e-02 5.3065631744072761e-01 3.7833988174263566e-01 + -1.8547093340130816e-01 1.1111836052942752e+00 7.5460565113724709e-01 + -3.9324317817935539e-01 1.7296265140390712e+00 1.0758119376561528e+00 + -7.4784740332085042e-01 2.3374525091917500e+00 1.2802304624612786e+00 + -1.2613432190764051e+00 2.8416176431141298e+00 1.3251623888989243e+00 + -1.8830449871596320e+00 3.1516661452097803e+00 1.2287630821637445e+00 + -2.5334347073558581e+00 3.2287023913524209e+00 1.0508643215950613e+00 + -3.1587961503169582e+00 3.0979665293196712e+00 8.4588332972727098e-01 + -3.7405916362486931e+00 2.8144013825853289e+00 6.2218283198891788e-01 + -4.2640871127928337e+00 2.4273621771973426e+00 3.6069454014134206e-01 + -4.7047611779479137e+00 1.9735648667761945e+00 5.4712390339910932e-02 + -5.0297241106085604e+00 1.5046593066476104e+00 -2.7505635026353775e-01 + -5.2296037311917765e+00 1.0797024328633762e+00 -5.8132181266396799e-01 + -5.3285261466999136e+00 6.8910457285267801e-01 -8.3028856611968205e-01 + -5.3148555491696960e+00 2.7659407101295663e-01 -1.0707193589464907e+00 + -5.1220120270371492e+00 -1.2455629521212952e-01 -1.4122070130330269e+00 + -4.7077468075219864e+00 -4.2666704745348283e-01 -1.9404789028504659e+00 + -3.9721654292398929e+00 -4.3369948726171703e-01 -2.7944105834044315e+00 + -3.5619036620255979e+00 -1.2500051034334558e-01 -2.8170985373835427e+00 + id 11588 + loc 1.0638738423585892e-01 1.1304917931556702e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5478741875403872e-01:4.3127826633462413e-01:3.3187647991942293e-02:4.5478287087985120e-01:5.4805712486807723e-01:3.4116074526329671e-01:1.4988882258730531e+00:2.7679910036821254e-01:2.0158214989985552e+00:3.1297994075324592e-01:2.6712940378394778e+00:2.8120916187354200e-01:3.1826600879320304e+00 + CVs 20 + 4.0653719726608090e-01 3.6376311065426503e-01 3.0713766476621818e-01 + 6.7468837436380324e-01 6.4944795919581089e-01 5.8189459698980850e-01 + 8.8147712452801597e-01 8.9643124173740663e-01 8.5400638421369690e-01 + 1.0565294448916731e+00 1.1216053349663859e+00 1.1340206576375855e+00 + 1.1917761384229215e+00 1.3240727248033703e+00 1.4198797831583807e+00 + 1.2842486629122287e+00 1.5039256873728533e+00 1.7087178824217180e+00 + 1.3341975502047649e+00 1.6615295866598203e+00 1.9979458503522090e+00 + 1.3421002563950124e+00 1.7973208771911628e+00 2.2860098291401676e+00 + 1.3049926906919840e+00 1.9125964273611489e+00 2.5715421468386168e+00 + 1.2111889127315434e+00 2.0062538097129496e+00 2.8521510353783270e+00 + 1.0484089266578591e+00 2.0700451894230483e+00 3.1242851504952562e+00 + 8.1681810665911114e-01 2.0884065626051820e+00 3.3881416966388218e+00 + 5.2665957376182482e-01 2.0395506120398141e+00 3.6461557239309639e+00 + 1.8908195516841142e-01 1.8950084815679937e+00 3.8949638753813254e+00 + -1.7644143104617271e-01 1.6228911896288865e+00 4.1299569571673347e+00 + -4.9975983126726259e-01 1.2094117747069402e+00 4.3443942947130161e+00 + -7.0493793474684474e-01 6.8440208217424225e-01 4.5298044472472210e+00 + -7.6572967411753956e-01 1.0713401996034738e-01 4.7238922019113048e+00 + -6.5113177426511759e-01 -2.6430574854545630e-01 4.9865237339220565e+00 + id 11589 + loc 8.0110329389572144e-01 8.0797933042049408e-02 1074 + blend 0.0000000000000000e+00 + interp 5.5066415398102242e-01:3.6868686613166834e-01:2.8088559388788226e-01:4.1385120638111633e-01:9.3425901118278909e-01:4.4452718241345424e-01:1.7109753867509712e+00:5.5065864733948267e-01:2.1843589043976879e+00:2.5988131797754976e-01:3.1747000322457324e+00:3.8205367508809640e-01:3.9386525068287108e+00 + CVs 20 + -9.4945394642635586e-02 2.8627201509252675e-01 1.7625084109495176e-01 + -2.0770789783150898e-01 5.6768608351595362e-01 3.6835805174972269e-01 + -3.2491295252196434e-01 8.4528207667961053e-01 5.6765179234165397e-01 + -4.3823592408992457e-01 1.1177273171413964e+00 7.7236186765321779e-01 + -5.4274334088474618e-01 1.3808685202249185e+00 9.8506735001660473e-01 + -6.3312425952291396e-01 1.6284632041880993e+00 1.2088937026431774e+00 + -7.0515361565163448e-01 1.8531303830965347e+00 1.4474268702330402e+00 + -7.5665698035962581e-01 2.0468514784709515e+00 1.7037736488282826e+00 + -7.8755476312770745e-01 2.2014343343239360e+00 1.9795861880162486e+00 + -7.9960563537428120e-01 2.3091669721981183e+00 2.2745031750405067e+00 + -7.9629423564638935e-01 2.3622368393006679e+00 2.5851918424075770e+00 + -7.8354404186606275e-01 2.3533417076064720e+00 2.9038058661022803e+00 + -7.7072643741121538e-01 2.2802985035410295e+00 3.2172076635988316e+00 + -7.6908365005431234e-01 2.1490738287453084e+00 3.5093774673676688e+00 + -7.8812303406130102e-01 1.9724882703734812e+00 3.7654510889647992e+00 + -8.3362352535864348e-01 1.7671622709516837e+00 3.9755341825401116e+00 + -9.0753417358379318e-01 1.5500411968486199e+00 4.1343639230884976e+00 + -1.0066077387273149e+00 1.3337639786215583e+00 4.2348518770677535e+00 + -1.1434589050750739e+00 1.1074705980086603e+00 4.2161935818392138e+00 + id 11590 + loc 9.9456197023391724e-01 4.9845236539840698e-01 1077 + blend 0.0000000000000000e+00 + interp 5.2545623236637762e-01:5.2545097780405403e-01:9.5277905613527780e-03:4.2762977857596612e-01:3.3602966422283664e-01:2.4011010495958901e-01:9.6361639806146315e-01:3.0804193584319484e-01:1.6673393504900260e+00:3.1847222869119834e-01:2.0014987363714947e+00:3.6837597765966290e-01:2.7111621181046548e+00:3.3978065548211506e-01:3.2376806271220189e+00 + CVs 20 + -1.5020090046658183e-01 2.7357467993319828e-01 1.2326210933327600e-01 + -2.3860614473910907e-01 6.0154667990901622e-01 2.6979686856638307e-01 + -2.9796616740008025e-01 9.5261019390237012e-01 4.1581033633727132e-01 + -3.4755558512277246e-01 1.3064617054200061e+00 5.6157070645415863e-01 + -4.0085897160599659e-01 1.6562750763935115e+00 7.2104933382285885e-01 + -4.7703103089956811e-01 1.9952809708389943e+00 9.0359331508883045e-01 + -6.0220667805743422e-01 2.3159108827369832e+00 1.1159290321775388e+00 + -8.1167275559686847e-01 2.6011678854085449e+00 1.3621494171621429e+00 + -1.1294151895281024e+00 2.8105681479374098e+00 1.6235880697254159e+00 + -1.5340131222826678e+00 2.9093113628957266e+00 1.8560269261024041e+00 + -1.9961601026583535e+00 2.8962896880098050e+00 2.0322799919079557e+00 + -2.5093262345870766e+00 2.7641408054283976e+00 2.1453907496059492e+00 + -3.0373831890456731e+00 2.4798602177628535e+00 2.1982449198490110e+00 + -3.4542074665842915e+00 2.0751959621442637e+00 2.2066092228105605e+00 + -3.6779046858300188e+00 1.6923012901544761e+00 2.1882761847751566e+00 + -3.7482258104580977e+00 1.4078203510616085e+00 2.1478982364473289e+00 + -3.7262558669591255e+00 1.1976720029464509e+00 2.0792789960760731e+00 + -3.7340224860122571e+00 9.8776880577656778e-01 1.9527489988124651e+00 + -4.0958921551476193e+00 6.9840528331751006e-01 1.6770947931146065e+00 + id 11591 + loc 8.5031136870384216e-02 6.4721846580505371e-01 1054 + blend 0.0000000000000000e+00 + interp 4.9822143831952875e-01:4.9821645610514559e-01:1.1583248899396037e-01:2.8230605123452396e-01:1.0017342448546680e+00:4.8749897423377941e-01:1.4244644264067159e+00:3.3010652655612283e-01:2.4000390913738485e+00:3.5576563956657875e-01:3.3534491187575499e+00 + CVs 20 + 2.9279873809015688e-01 3.8452590986022883e-01 6.6402352590919339e-02 + 5.5921245601219649e-01 7.4712075847010206e-01 1.6130816841464618e-01 + 7.8269760500704066e-01 1.0994879501333990e+00 3.0421843466374637e-01 + 9.7437179532747142e-01 1.4183150172868249e+00 4.9322380679227318e-01 + 1.1649022440110346e+00 1.6551987507066590e+00 7.0308397631182362e-01 + 1.3717131210425435e+00 1.7857237598840174e+00 8.9103855818612254e-01 + 1.5805849368992844e+00 1.8259631440044379e+00 1.0224891307403960e+00 + 1.7969710563770667e+00 1.7944966177195785e+00 1.0954129067445033e+00 + 2.0402581107059485e+00 1.6767679644576048e+00 1.1230175949354133e+00 + 2.3108287906462746e+00 1.4313115290963534e+00 1.1291579703620778e+00 + 2.5899658718665970e+00 1.0341774535727444e+00 1.1680407373771131e+00 + 2.8528996383004697e+00 5.5529894710162897e-01 1.3181106568767280e+00 + 3.0934086205101954e+00 1.3529445098547277e-01 1.5802348659166414e+00 + 3.3338436032310934e+00 -1.3167256389958037e-01 1.8490950510789492e+00 + 3.6081891883305541e+00 -2.2062689957168491e-01 2.0202915725703847e+00 + 3.9200433698007533e+00 -1.5831039073316489e-01 2.0590969580252576e+00 + 4.2867032900656641e+00 8.0619141704997288e-03 1.9641007173893263e+00 + 4.7918684226457700e+00 1.4995295405693465e-01 1.7835793897911871e+00 + 5.1410683868343448e+00 -7.2828156428839108e-04 1.7321134913763512e+00 + id 11592 + loc 4.8491016030311584e-01 8.4937846660614014e-01 1070 + blend 0.0000000000000000e+00 + interp 4.7636575057212932e-01:3.0207117823718049e-01:7.7789566970038204e-01:4.7228715488216322e-01:1.1935901831989320e+00:4.7636098691462364e-01:1.9318005590040781e+00:2.9769596423061456e-01:2.3196186534750507e+00:4.6058853556772839e-01:3.0932333634132676e+00:3.3594123020758776e-01:3.9329492123179119e+00 + CVs 20 + -2.6972383092491947e-01 2.6870976231136434e-01 2.1915494795970958e-01 + -4.9700398117165201e-01 4.9913254606376334e-01 3.9944757157776112e-01 + -6.7414741931265465e-01 7.2476131071337802e-01 5.9345223053393492e-01 + -8.1178477492771184e-01 9.5997712690304349e-01 8.0203785537617800e-01 + -9.4641555457592896e-01 1.2021050239999165e+00 9.7604881340403504e-01 + -1.1102894136797032e+00 1.4445659949350811e+00 1.0743859639304760e+00 + -1.3060113574110246e+00 1.6683254192754471e+00 1.0872185425279013e+00 + -1.5211951608445720e+00 1.8535040652364776e+00 1.0288689910672235e+00 + -1.7371140564902037e+00 1.9923810343253756e+00 9.0909380653379590e-01 + -1.9043010516352243e+00 2.0838118429846189e+00 7.1918862746609957e-01 + -1.9699037547301343e+00 2.1385538943280240e+00 4.7538274676627057e-01 + -1.9385764042502329e+00 2.1740754686250798e+00 1.9672149403149386e-01 + -1.8103504803276349e+00 2.1816970328052334e+00 -9.6741888712854163e-02 + -1.5813722757268125e+00 2.1444033773522020e+00 -3.1440578418651155e-01 + -1.2898772345665466e+00 2.0779079407255505e+00 -3.7776319597028774e-01 + -9.7676029458159330e-01 1.9792783518879959e+00 -3.0211865902201129e-01 + -6.6080749072079104e-01 1.7890344249591497e+00 -1.0037250691808430e-01 + -2.8642013865614002e-01 1.3511846137629036e+00 1.4253215735146185e-01 + -2.3398459352099776e-01 1.4292074332564337e+00 9.6872578790174746e-03 + id 11593 + loc 8.1011003255844116e-01 8.7406285107135773e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8215059350983736e-01:3.5117010757923706e-01:1.0416716328730535e-03:3.1337899570745020e-01:7.0645401510787342e-01:4.8011428830972047e-01:1.0752689950388101e+00:4.8214577200390230e-01:1.5222919011914287e+00:4.4309876122320097e-01:2.0060363490957869e+00:2.5817039163884747e-01:2.7288816071121844e+00:3.4916612001200481e-01:3.2066167722120298e+00 + CVs 20 + 1.3973934451989983e-01 2.7022470422859041e-01 -3.8780943242357396e-02 + 2.6351914540422899e-01 5.0667469583102576e-01 -7.4993286291380079e-02 + 3.5333786437079584e-01 7.1835313640088050e-01 -1.3535240751946820e-01 + 3.8958727408118549e-01 9.0468230805432803e-01 -2.4012668389227998e-01 + 3.8662575237540375e-01 1.0877590782898521e+00 -3.8889583835265495e-01 + 4.0326272271042451e-01 1.3078136426126208e+00 -5.4901991825610152e-01 + 4.9107703403500497e-01 1.5589870897589955e+00 -6.8499642935681249e-01 + 6.8338346987158682e-01 1.8067849170210477e+00 -7.9140272337347894e-01 + 9.9314107413427988e-01 2.0176891740535572e+00 -8.3605882064959602e-01 + 1.3342595054053166e+00 2.1565699383125008e+00 -7.5159726544369909e-01 + 1.5872799273864380e+00 2.2237722750433635e+00 -5.4801794792344038e-01 + 1.7438890112206260e+00 2.2631926946180503e+00 -2.6195086797008194e-01 + 1.8062756171541838e+00 2.2936770103139521e+00 8.9180444950550886e-02 + 1.7039743620807555e+00 2.2748258341941545e+00 3.7266138295837070e-01 + 1.3996253909965972e+00 2.1659185957716587e+00 3.9557852662747117e-01 + 9.2216548323967418e-01 1.8942377359049085e+00 1.7466563870075436e-01 + 3.1469030511413976e-01 1.3220066792510528e+00 -8.9715061416989372e-02 + -4.0021077314273679e-01 3.9314161152770821e-01 -1.5328883474289512e-02 + -5.3140934223191028e-01 3.0562955569720524e-01 2.1024625677391934e-01 + id 11594 + loc 3.5768839716911316e-01 4.5527860522270203e-01 410 + blend 0.0000000000000000e+00 + interp 3.7062729380074988e-01:3.2686825808059722e-01:4.3424380501216886e-03:3.4740892549006924e-01:6.8511426356932537e-01:3.2898916223044805e-01:1.1411264035480768e+00:3.1039962185531900e-01:2.0004580062163191e+00:3.3166266044787235e-01:2.7512590186583212e+00:3.7062358752781188e-01:3.2693407855836685e+00 + CVs 20 + -1.6467418713139026e-01 1.2048731493008047e-01 -2.5400748192168154e-01 + -3.1878380352854591e-01 2.2558066899914311e-01 -4.6490615787913020e-01 + -4.7421490220874785e-01 3.2560054438808983e-01 -6.6563331069243825e-01 + -6.3794926656106032e-01 4.2566957519724657e-01 -8.7417179255842759e-01 + -8.1028896772962655e-01 5.2257073147245836e-01 -1.0923484175923814e+00 + -9.9053389115669788e-01 6.1311462588335797e-01 -1.3240023957869145e+00 + -1.1728144166395138e+00 6.9547159869485753e-01 -1.5766413076582273e+00 + -1.3445217371861677e+00 7.6854903367202676e-01 -1.8590315299856639e+00 + -1.4882681216915934e+00 8.3113158670060983e-01 -2.1778095895898639e+00 + -1.5843593126271416e+00 8.8212905719682388e-01 -2.5340882625374359e+00 + -1.6182844726660370e+00 9.1830286353437551e-01 -2.9150222836435797e+00 + -1.6070440589722290e+00 9.2456403812441490e-01 -3.2830866453707874e+00 + -1.6133655302905039e+00 8.7646981400458257e-01 -3.5912123721693696e+00 + -1.6851586207600513e+00 7.7058102524276650e-01 -3.8170903591294083e+00 + -1.8161348676454803e+00 6.2532027918909239e-01 -3.9686921491751308e+00 + -1.9883453393864388e+00 4.5909234907320706e-01 -4.0486359665528324e+00 + -2.1875427609311133e+00 2.9422756713662590e-01 -4.0422002056036073e+00 + -2.3910356943737812e+00 1.4969765268737811e-01 -3.9540512840490853e+00 + -2.5714898534654864e+00 -8.6685165289087651e-02 -4.0918156823367138e+00 + id 11595 + loc 3.6708745360374451e-01 4.8902988433837891e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9397275148413655e-01:3.7698454118344388e-01:2.1567317824646393e-01:4.9396781175662174e-01:9.2357634778475939e-01:3.3926856782380033e-01:1.2199357026878963e+00:2.7513136653494430e-01:2.0261527641870720e+00:3.0944308789339481e-01:2.9612539220584138e+00:3.7325965905136288e-01:3.9210210485580661e+00 + CVs 20 + 2.8108410466321193e-01 4.2297980793118950e-01 1.2774867319252012e-01 + 4.9080282888802640e-01 7.9745957189978434e-01 2.8994454823768018e-01 + 6.8260745158436376e-01 1.1636925869221411e+00 4.6847791891927887e-01 + 8.7538604718278279e-01 1.5290825569269120e+00 6.5732767832942107e-01 + 1.0686569519971592e+00 1.8835894287745960e+00 8.6901578829381332e-01 + 1.2617948492809186e+00 2.2142493433987598e+00 1.1178469107714843e+00 + 1.4533297198516331e+00 2.5030321315629811e+00 1.4153301850936513e+00 + 1.6358979410342214e+00 2.7297372318391506e+00 1.7697684739197548e+00 + 1.7961609530164586e+00 2.8718154605570581e+00 2.1973828865035734e+00 + 1.9093273140788498e+00 2.8808649233413428e+00 2.7181477530083811e+00 + 1.9243290939093107e+00 2.6747956371643182e+00 3.2939771438484340e+00 + 1.8070182856518120e+00 2.2306251139073545e+00 3.7896743764591920e+00 + 1.6132666799626487e+00 1.6677379446965992e+00 4.0917889850980380e+00 + 1.4493399834554508e+00 1.1623223535947909e+00 4.2284068696777179e+00 + 1.3786870326854443e+00 7.6729789632390166e-01 4.2981220873877799e+00 + 1.3783635333836974e+00 3.9348465878172539e-01 4.3388663958937039e+00 + 1.3142783997659599e+00 -4.3509463042837204e-02 4.3301930100729544e+00 + 1.0500819945233562e+00 -4.1168189589781701e-01 4.2764392482609388e+00 + 7.4522120244337808e-01 -4.8954151605216101e-01 4.2625829915545328e+00 + id 11596 + loc 2.1123677492141724e-01 5.9720724821090698e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3548403006787306e-01:4.2907695165806636e-01:2.2912598703927789e-01:4.3547967522757242e-01:9.5430627680805524e-01:4.1114623952324053e-01:1.5222905320206070e+00:3.9860680825121070e-01:2.1320986905233665e+00:3.9229869455341504e-01:2.9974666073247951e+00:4.0156956561902657e-01:3.8379426787215016e+00 + CVs 20 + 1.4530649277810648e-01 3.8923104525543506e-01 -2.2452773997633280e-01 + 3.2443103341982110e-01 7.7845469413002710e-01 -4.4804838920433898e-01 + 5.1494751715673703e-01 1.1683178322814072e+00 -6.5498543516065155e-01 + 7.0432858341341797e-01 1.5503425748033139e+00 -8.3308649850845451e-01 + 8.8512608030225726e-01 1.9096091189347788e+00 -9.9853503144770883e-01 + 1.0493452719283436e+00 2.2294289996838383e+00 -1.2005278185463080e+00 + 1.1883139313383126e+00 2.4924238072778162e+00 -1.4790535718771782e+00 + 1.2913860492775358e+00 2.6712518227485207e+00 -1.8408441878894066e+00 + 1.3470969004990720e+00 2.7354099916287931e+00 -2.2633023456957373e+00 + 1.3492582141015621e+00 2.6798009741797246e+00 -2.7101152022774166e+00 + 1.3011390048078018e+00 2.5226593565876119e+00 -3.1515849862238077e+00 + 1.2165480588834319e+00 2.2934169840276208e+00 -3.5677404266921022e+00 + 1.1166135713821013e+00 2.0357677391487137e+00 -3.9426855733973549e+00 + 1.0132290333815444e+00 1.8159923907041038e+00 -4.2348232234645229e+00 + 8.8833979559463372e-01 1.6795477451078018e+00 -4.3596996632719494e+00 + 7.2162719997740965e-01 1.5328201730552222e+00 -4.2487358212602526e+00 + 5.5931457541455343e-01 1.1388296891638572e+00 -3.9810513488830956e+00 + 5.1230251620328593e-01 6.1347162629537366e-01 -3.9505958347691723e+00 + 4.6017528162863264e-01 7.5126767818594375e-01 -4.1447417711176069e+00 + id 11597 + loc 3.8282936811447144e-01 8.3043706417083740e-01 1085 + blend 0.0000000000000000e+00 + interp 3.9172051604421476e-01:3.4942995762446261e-01:4.0060566648502283e-01:3.2500740848884702e-01:9.9990733096596562e-01:3.9171659883905435e-01:1.3958960934352409e+00:3.6503803836322457e-01:1.9998749259900075e+00:2.7522561745240132e-01:2.7831464272525785e+00:3.2318027106196517e-01:3.1742440817661128e+00:3.3546402306571782e-01:3.9216875482969877e+00 + CVs 20 + -1.2309231864837256e-01 3.6397650427996625e-01 3.1994411093030689e-01 + -2.6729017461005811e-01 6.5186848272235332e-01 5.5281909814033525e-01 + -4.2579152161268896e-01 9.1020970967665304e-01 7.4913595349024686e-01 + -5.9408681125143603e-01 1.1565840181058824e+00 9.2617167517441512e-01 + -7.7454473775665811e-01 1.3880026609317127e+00 1.0734751801390128e+00 + -9.6781374739147452e-01 1.6015508749032370e+00 1.1843965278381767e+00 + -1.1756396482558007e+00 1.7946319250397607e+00 1.2538911047379371e+00 + -1.3998267998972347e+00 1.9619848061443093e+00 1.2738565633142327e+00 + -1.6301432422789137e+00 2.0931017597776602e+00 1.2336905039494246e+00 + -1.8407723396870004e+00 2.1773359664482790e+00 1.1296332115887071e+00 + -2.0174124263853752e+00 2.2135905696863296e+00 9.7041569494900792e-01 + -2.1671656265649757e+00 2.2030314206573007e+00 7.6602589056854975e-01 + -2.3001182325821419e+00 2.1391475412772953e+00 5.2254367021077885e-01 + -2.4238327921570431e+00 2.0055300120481805e+00 2.4331681949103517e-01 + -2.5502772576751207e+00 1.7716651342791736e+00 -4.6760935389156433e-02 + -2.6829280690066950e+00 1.4193360750179305e+00 -2.8036196450885864e-01 + -2.8228478128455490e+00 9.7662938116204057e-01 -4.0670061278852615e-01 + -3.0128084620103017e+00 5.1521927661752587e-01 -4.0219884823994972e-01 + -3.2859743312502916e+00 2.4100727922882348e-01 -2.8937223584584748e-01 + id 11598 + loc 4.0303736925125122e-01 7.6700896024703979e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1687474604788938e-01:3.0396118532413891e-01:1.6208020738954698e-01:3.5528264298811391e-01:9.6627003073513673e-01:4.0243666026451719e-01:1.7902125994886173e+00:3.5948058931264854e-01:2.6447891713481386e+00:4.1687057730042892e-01:3.1915657955025649e+00 + CVs 20 + 1.3989430443167400e-01 6.4837562037170060e-01 -3.1989914947059295e-01 + 2.6369055778102368e-01 1.2901317571743072e+00 -5.7295260057754660e-01 + 4.2136108512238368e-01 1.9490650841269013e+00 -7.5765408303360826e-01 + 6.7153732492864626e-01 2.6367012581241278e+00 -8.5993599546973465e-01 + 1.0821161771684942e+00 3.3122463728129734e+00 -8.5357638004903846e-01 + 1.6894993777337417e+00 3.8716658089634128e+00 -7.5319139102656341e-01 + 2.4614935165764478e+00 4.1902442402084592e+00 -6.2030267395816963e-01 + 3.2913538745669344e+00 4.1818976702393620e+00 -5.2545900483338825e-01 + 4.0491166277471216e+00 3.8437599916658716e+00 -5.0757940262539891e-01 + 4.6457459176867539e+00 3.2262861129727485e+00 -5.4466998402154476e-01 + 5.0166096240565539e+00 2.4090410019975663e+00 -5.5532077786880729e-01 + 5.1244003809705543e+00 1.5380281393777278e+00 -4.4896175824434453e-01 + 5.0105387894101954e+00 7.7557839390149130e-01 -2.0809912141783452e-01 + 4.7603700811559024e+00 1.7999301118747180e-01 1.0711879945240212e-01 + 4.4446412392867778e+00 -3.1419044517870298e-01 4.1726884710101453e-01 + 4.1658612053098256e+00 -8.2177197814851521e-01 5.9294014714852616e-01 + 4.5196329319512225e+00 -1.1954770641051000e+00 1.7593431047975472e-01 + 4.8480475380109471e+00 -8.0473376622243742e-01 3.4353197042016170e-02 + 5.1383762986779322e+00 -4.6255501585613856e-01 -5.7337117622030254e-02 + id 11599 + loc 5.8789628744125366e-01 1.6999666392803192e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6393578744934566e-01:4.3538633623744544e-01:7.5009961609371745e-01:3.1095279792322122e-01:1.4869465257131753e+00:3.1059429413742873e-01:2.3985691060260099e+00:4.6393114809147118e-01:3.1498950245146475e+00:2.8047319312656627e-01:3.9723853726641458e+00 + CVs 20 + -1.1876054351626790e-01 4.4004122286926650e-01 1.7435238352314944e-01 + -2.3919176106234535e-01 8.4693062930617524e-01 2.8401829947169888e-01 + -3.3730669253723405e-01 1.2353225144261590e+00 3.3729564739922624e-01 + -4.2588129725739343e-01 1.6167822815375863e+00 3.5401005758005810e-01 + -5.4398927780295614e-01 1.9904465481452565e+00 3.6181340604997247e-01 + -7.2811165116686050e-01 2.3441022445134472e+00 3.8931418362927639e-01 + -9.9677639842404298e-01 2.6553246352399040e+00 4.6174895875903188e-01 + -1.3409252296608145e+00 2.8774512138183921e+00 6.0375767018017634e-01 + -1.7120628264796327e+00 2.9630577458243734e+00 8.1705681553170673e-01 + -2.0243222039893825e+00 2.8918193466806330e+00 1.0769005815878760e+00 + -2.2006830527245764e+00 2.6735431245330536e+00 1.3516754268375806e+00 + -2.1863650835284445e+00 2.3401476386544089e+00 1.5315651024461303e+00 + -1.9041276831086857e+00 1.9017055211224749e+00 1.3929685861645200e+00 + -1.6822564429344242e+00 1.3516020716442354e+00 8.3485087838079275e-01 + -1.8419617676018136e+00 1.0455472959184502e+00 4.0377519151571162e-01 + -2.0775572213038691e+00 1.1126392663226985e+00 3.6753654542641101e-01 + -2.2629013616902878e+00 1.5108397347027713e+00 8.1912551271526612e-01 + -2.6219618595901162e+00 1.9035208341535270e+00 1.7208961266291869e+00 + -2.9692075919293068e+00 1.6771005378883155e+00 1.9027137786799735e+00 + id 11600 + loc 8.2355254888534546e-01 8.8025224208831787e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8848293234650766e-01:3.3577038984983715e-01:8.8201654200118151e-01:2.8277399760677530e-01:1.3222956159705046e+00:2.6634866234589183e-01:2.0135043532639196e+00:2.8661262058018311e-01:2.8166570753814288e+00:3.8847904751718421e-01:3.1616731278433368e+00:3.2264410985075942e-01:3.9726108751138605e+00 + CVs 20 + 2.0620510750236890e-01 2.6239150932461286e-01 -2.2241879383577401e-01 + 4.1866099797481010e-01 5.2267521525973271e-01 -3.9976876314827919e-01 + 6.3703443467403342e-01 7.6834468185856486e-01 -5.6580469791598731e-01 + 8.6068139045428993e-01 9.9296245161250063e-01 -7.3721666121771290e-01 + 1.0892539550311382e+00 1.1935749270374429e+00 -9.1741665445869724e-01 + 1.3219968184955853e+00 1.3645962055876155e+00 -1.1184562031744603e+00 + 1.5557707096332698e+00 1.4958406572568608e+00 -1.3614165658051114e+00 + 1.7828611909019962e+00 1.5738822673473645e+00 -1.6632168432566530e+00 + 1.9920412640232079e+00 1.5871747093614430e+00 -2.0252973089026027e+00 + 2.1730308208575901e+00 1.5297269906726805e+00 -2.4354488715080187e+00 + 2.3213663307912737e+00 1.4014560081875223e+00 -2.8739953071542979e+00 + 2.4373261467932741e+00 1.2044408779712628e+00 -3.3174502483452248e+00 + 2.5172582117315376e+00 9.4131197773272468e-01 -3.7423074875018139e+00 + 2.5412582621898014e+00 6.2542465571966444e-01 -4.1345290305076450e+00 + 2.4712669798997893e+00 2.9295396025420944e-01 -4.4893708456207735e+00 + 2.2680314706004783e+00 7.8497213252103348e-03 -4.7916459750493532e+00 + 1.9342853748575679e+00 -1.6080253126528199e-01 -5.0063389200756809e+00 + 1.5335116849536106e+00 -1.8174379314369260e-01 -5.1034013791383774e+00 + 1.1287438925386466e+00 -3.0762325059150109e-01 -5.2896940848680591e+00 + id 11601 + loc 2.8340515494346619e-01 9.0055394172668457e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5699880807323778e-01:4.5699423808515705e-01:1.4263958126543286e-01:4.4774110686231444e-01:8.6915777796198246e-01:4.1730987147927784e-01:1.2537878247896066e+00:2.9437585316866155e-01:1.9361279098190924e+00:3.5008349043595155e-01:3.0019867751503981e+00:4.3554152637203486e-01:3.7705713250405903e+00 + CVs 20 + 1.1611110634316352e-01 2.4098862569939486e-01 -1.3489929352957225e-01 + 2.3378367997926847e-01 4.7932923801663141e-01 -2.9236618019529320e-01 + 3.5590943342092263e-01 7.0135416471096734e-01 -4.6018734124011212e-01 + 4.7991894647944827e-01 9.0086874213114032e-01 -6.2623080430566380e-01 + 5.9775771297878899e-01 1.0852622657251136e+00 -7.8696333340477187e-01 + 7.0868122797972477e-01 1.2631880175930745e+00 -9.4870372971352590e-01 + 8.2336649034710085e-01 1.4281908546183346e+00 -1.1267480099349623e+00 + 9.5415470076550546e-01 1.5664397840489477e+00 -1.3295987397706233e+00 + 1.1040470500392447e+00 1.6713411915004110e+00 -1.5482859188217624e+00 + 1.2688292266645331e+00 1.7427103827624961e+00 -1.7640864351570567e+00 + 1.4395037730531897e+00 1.7806344556306839e+00 -1.9598365728195417e+00 + 1.6046346656215262e+00 1.7845123642684209e+00 -2.1236212592404811e+00 + 1.7558353761685364e+00 1.7551949062356864e+00 -2.2504396783309550e+00 + 1.8837706628329409e+00 1.6900150297112257e+00 -2.3417057068189759e+00 + 1.9809773613555428e+00 1.5789175840990928e+00 -2.4015371629594124e+00 + 2.0539960824263677e+00 1.4170242618461377e+00 -2.4322725028170513e+00 + 2.1185345993091169e+00 1.2070799085528385e+00 -2.4378317658284456e+00 + 2.1636103434987222e+00 9.5271333530508495e-01 -2.4210340106628379e+00 + 2.0443729827762476e+00 6.2280009953717774e-01 -2.3588746072969546e+00 + id 11602 + loc 5.2569133043289185e-01 1.8410436809062958e-01 1077 + blend 0.0000000000000000e+00 + interp 3.8433204443871094e-01:3.8432820111826654e-01:4.2856432714898862e-01:2.8432123993418407e-01:1.0154279719698600e+00:2.6113722681640855e-01:1.9657530756490869e+00:3.0982356967644509e-01:2.4383983063681649e+00:2.9914855619055358e-01:3.0060596047455634e+00:2.9526094379995477e-01:3.9388564044978698e+00 + CVs 20 + 2.0760459047381136e-02 3.8089738439905618e-01 1.9198177027664509e-01 + 3.8570685721562303e-02 7.5198562042580130e-01 3.7847899948283154e-01 + 3.3603129875709847e-02 1.1021941182192172e+00 5.8525398884509272e-01 + -9.7291008644674326e-03 1.4199438838604992e+00 8.2363043464230745e-01 + -1.0250294929046022e-01 1.6943401802438713e+00 1.0928109014285503e+00 + -2.5062939173595533e-01 1.9140091625552831e+00 1.3811040645507004e+00 + -4.5356843193657537e-01 2.0708141690115331e+00 1.6691357715684427e+00 + -7.0440551372163385e-01 2.1626249624143314e+00 1.9352147584092274e+00 + -9.9328238833429605e-01 2.1937692382800122e+00 2.1617525605941141e+00 + -1.3137451898680210e+00 2.1700180845893122e+00 2.3408706891990696e+00 + -1.6651227184157580e+00 2.0924554771316419e+00 2.4778772216314588e+00 + -2.0474842454880720e+00 1.9548761781378878e+00 2.5897496986826454e+00 + -2.4546182954250502e+00 1.7406699498151901e+00 2.6982513316816203e+00 + -2.8711752918067472e+00 1.4168992072052595e+00 2.8250875568057103e+00 + -3.2626280364905282e+00 9.3259152127021050e-01 3.0024208602197975e+00 + -3.5280053657574397e+00 2.6868575004769046e-01 3.2625797315340086e+00 + -3.5454304594847148e+00 -4.9136858610700651e-01 3.6111631974181870e+00 + -3.3050465976795893e+00 -1.1746169520140541e+00 4.0464389776664742e+00 + -3.1251723046313300e+00 -1.4368268363006169e+00 4.2890709172396679e+00 + id 11603 + loc 9.4966727495193481e-01 5.5122756958007813e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6321774790710274e-01:2.8456728711746881e-01:2.8261118658219542e-01:3.0560812698273609e-01:1.0717541866813247e+00:4.6321311572962370e-01:1.9928311093863753e+00:3.1749092023477504e-01:2.8381242811659497e+00:3.9175777473663242e-01:3.2397817722198177e+00 + CVs 20 + -2.5198976165390569e-01 2.1941588451693048e-01 1.4380770593486680e-01 + -4.9064881390770521e-01 4.5788897293453334e-01 2.8957643292482826e-01 + -7.1380920541954240e-01 7.2133136828055322e-01 4.4374052881391968e-01 + -9.3337912401808831e-01 1.0114512090813930e+00 5.9934299762158139e-01 + -1.1769037084767262e+00 1.3229669903231362e+00 7.3195077273732023e-01 + -1.4697635422352477e+00 1.6402115109457325e+00 8.1156218744957087e-01 + -1.8231336951446397e+00 1.9368585370974625e+00 8.0935291843227619e-01 + -2.2255774021178647e+00 2.1767538479988762e+00 6.9611416860399355e-01 + -2.6290540637631836e+00 2.3136865926866181e+00 4.5088303250917272e-01 + -2.9647232951514479e+00 2.3171908897530678e+00 9.5701905091834405e-02 + -3.1953665201403170e+00 2.1967722234809566e+00 -3.0208476656380534e-01 + -3.3292493645787138e+00 1.9810203518642475e+00 -6.5884603801389552e-01 + -3.4034211195084914e+00 1.6919665560246133e+00 -9.1627842590857111e-01 + -3.4456400148063175e+00 1.3115176526698487e+00 -1.0917838497175025e+00 + -3.4369969939672744e+00 8.1940503462251202e-01 -1.2561342826008302e+00 + -3.3388817708163261e+00 2.7954280664159153e-01 -1.5002294900800417e+00 + -3.1583946605308038e+00 -1.8777068415065201e-01 -1.8948164805671521e+00 + -2.9509016418568548e+00 -4.9554407919269738e-01 -2.4102343134225226e+00 + -2.7960848756816272e+00 -7.8645882771951758e-01 -2.7620892239331374e+00 + id 11604 + loc 3.5768839716911316e-01 4.8687008023262024e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5618921368702264e-01:3.9222092357350613e-01:7.3378211990863229e-01:4.5618465179488582e-01:1.1942826602775245e+00:3.9958281790388472e-01:1.9877985910386340e+00:3.8371787314190275e-01:2.8057812299831353e+00:2.8330613746345307e-01:3.0944968679831968e+00:4.1190286962813943e-01:3.9982207521151611e+00 + CVs 20 + -2.4929533731692050e-01 4.4041897674508412e-01 -2.8104964982227870e-01 + -4.7822632033937362e-01 8.6702863777755756e-01 -5.2826231446118033e-01 + -6.9637068478262298e-01 1.2751348934090307e+00 -7.5284302300654027e-01 + -8.9314507153998290e-01 1.6695431147193751e+00 -9.5041004358153292e-01 + -1.0787795793107158e+00 2.0485063995780974e+00 -1.1216994642880738e+00 + -1.2995011240292325e+00 2.3668788368665883e+00 -1.2793013480597848e+00 + -1.5724167050041795e+00 2.5505627195614275e+00 -1.4258643459639724e+00 + -1.8573155662061145e+00 2.5955966329324029e+00 -1.5522955687536046e+00 + -2.1095618247955574e+00 2.5445110875852581e+00 -1.6539129978802039e+00 + -2.3107646309319896e+00 2.4445117376656005e+00 -1.7355294102690668e+00 + -2.4738804357320654e+00 2.3253772724988209e+00 -1.8109817629072205e+00 + -2.6215102434921018e+00 2.1933849263189229e+00 -1.9083800494685992e+00 + -2.7602189705734612e+00 2.0467481679807875e+00 -2.0672990594537310e+00 + -2.8778289445573626e+00 1.9008192354029703e+00 -2.2930851459833352e+00 + -2.9662650894487887e+00 1.7534808770737329e+00 -2.5614358204216430e+00 + -3.0213149418739533e+00 1.5828126751482383e+00 -2.8239514248278885e+00 + -3.0643440522028018e+00 1.4221946263664855e+00 -3.0331525600280007e+00 + -3.0044007881747743e+00 1.2424440340472231e+00 -3.1532602773669387e+00 + -2.5991758057767353e+00 1.0401872961130141e+00 -3.0141952980761864e+00 + id 11605 + loc 5.7036942243576050e-01 5.4049426317214966e-01 1085 + blend 0.0000000000000000e+00 + interp 4.8925917188075396e-01:4.8925427928903520e-01:3.3426756690304404e-01:3.7144492937475876e-01:9.9585251693901156e-01:4.2335788431792121e-01:1.6040309049548844e+00:3.0674967087991489e-01:2.0861367602264274e+00:2.7157492743510209e-01:2.9741851936483332e+00:3.4306644963696747e-01:3.9061327282474148e+00 + CVs 20 + -2.1195527596557251e-01 2.5892392881769549e-01 2.2913283806656462e-01 + -4.1773275511725766e-01 4.6869002762592060e-01 3.7393216273779029e-01 + -6.1858586246474889e-01 6.5659316571213244e-01 4.6715835810267559e-01 + -8.0661645599239518e-01 8.3285595010033853e-01 5.2703804647264774e-01 + -9.7321986484686396e-01 9.9655495525538251e-01 5.5556503969413418e-01 + -1.1102503227832228e+00 1.1504178251761350e+00 5.6065414251306445e-01 + -1.2178938988731989e+00 1.3029565813542885e+00 5.5200816656403506e-01 + -1.3066376445281174e+00 1.4640913234419135e+00 5.3213446750775362e-01 + -1.3890205000944560e+00 1.6404202679762887e+00 4.8696702353297378e-01 + -1.4737357815036112e+00 1.8238124082013227e+00 3.7859095947101518e-01 + -1.5666954678803111e+00 1.9908071665313782e+00 1.7517368025516966e-01 + -1.6795967511604402e+00 2.1144288758205398e+00 -1.2950099246392144e-01 + -1.8270336790527775e+00 2.1551203306744009e+00 -5.3360126174181000e-01 + -2.0213686566962328e+00 2.0410909858423096e+00 -1.0324410080972948e+00 + -2.2744886213496756e+00 1.6900883746299877e+00 -1.5557624735849001e+00 + -2.5713085913930942e+00 1.0931891397683291e+00 -1.9350216868113181e+00 + -2.8984873286569086e+00 3.4445452143854771e-01 -2.0536844727030124e+00 + -3.3000152224750998e+00 -3.5439328725002150e-01 -1.9203838076823365e+00 + -3.6965959191743174e+00 -5.7449218493543308e-01 -1.7388229834083928e+00 + id 11606 + loc 6.0328727960586548e-01 7.7289748191833496e-01 1053 + blend 0.0000000000000000e+00 + interp 5.1313212906507422e-01:2.8837980078703335e-01:1.0000049179535437e+00:3.3842020530051065e-01:1.9413648867250961e+00:5.1312699774378356e-01:2.2038179258502444e+00:4.3419260896270423e-01:2.8853017692834992e+00:4.7665493795737074e-01:3.2552392030108415e+00:3.9887613207391065e-01:3.9999743931280030e+00 + CVs 20 + -7.0715768581392724e-02 3.3776289372159057e-01 3.0984575057736985e-01 + -1.8734342859780456e-01 6.2898003790997048e-01 5.5775188468687809e-01 + -3.1674737901703492e-01 9.0848224846814274e-01 7.7704954596590592e-01 + -4.3775168043496382e-01 1.1777246685872622e+00 9.7454339180688532e-01 + -5.4848179257246499e-01 1.4277388699727611e+00 1.1458356494632362e+00 + -6.4494076379920751e-01 1.6564546014837029e+00 1.2902476796552196e+00 + -7.2781655706616033e-01 1.8685826695383243e+00 1.4201873613015432e+00 + -8.1265821089144596e-01 2.0722530590571311e+00 1.5560646124429296e+00 + -9.3793898277654097e-01 2.2704707654586862e+00 1.7083367980703270e+00 + -1.1516607903885252e+00 2.4436205742839499e+00 1.8673519082792180e+00 + -1.4732798176888895e+00 2.5093667219376581e+00 1.9845491665461936e+00 + -1.8191360452041487e+00 2.3822405097080859e+00 1.9941915009009885e+00 + -2.0516861013361289e+00 2.0776148432255868e+00 1.9037850020134777e+00 + -2.0993812874458024e+00 1.6793460956946937e+00 1.7652622393891095e+00 + -2.0064034388184364e+00 1.2677410633466399e+00 1.5971181718954619e+00 + -1.8588543602481786e+00 8.9877488365416647e-01 1.3856015349623185e+00 + -1.7056601867227956e+00 6.2901299414294432e-01 1.1098006687105484e+00 + -1.5606377358235162e+00 5.4995949455573423e-01 7.4083689461333424e-01 + -1.4291470653048528e+00 7.0638498238936509e-01 2.8891387721785672e-01 + id 11607 + loc 4.4272679835557938e-02 2.3732298612594604e-01 410 + blend 0.0000000000000000e+00 + interp 3.6351069354135179e-01:3.6350705843441639e-01:3.5756592446074387e-01:3.0593111777888155e-01:1.0825459109727409e+00:2.3777481930561134e-01:2.1351419550897961e+00:2.7559501304288692e-01:3.3434310380571337e+00 + CVs 20 + -1.2190144170617381e-01 1.2152583437188057e-01 -1.5920719768547176e-01 + -2.5680532501126696e-01 2.3280252748867442e-01 -3.1298767673683348e-01 + -3.9710055904353425e-01 3.5011469665802730e-01 -4.8420527157873638e-01 + -5.3349482812305249e-01 4.8078284251993114e-01 -6.8447280232371210e-01 + -6.5862551483496412e-01 6.2428328107407971e-01 -9.1932121568289282e-01 + -7.6028432465684415e-01 7.8081092429401555e-01 -1.1937792673808261e+00 + -8.2150256363854846e-01 9.4851243080256542e-01 -1.5049490556126872e+00 + -8.2983613053019067e-01 1.1222436055665930e+00 -1.8411418602784702e+00 + -7.8085413322136377e-01 1.2973880489129666e+00 -2.1889853400009223e+00 + -6.7598769657178714e-01 1.4711874029066676e+00 -2.5339833446023938e+00 + -5.4086943363361240e-01 1.6337003025809680e+00 -2.8527463340809573e+00 + -4.4863573762573816e-01 1.7621938235964132e+00 -3.1197467009340838e+00 + -4.6731556473039704e-01 1.8452482343641301e+00 -3.3143851177696679e+00 + -5.6410979033831121e-01 1.9072655338604434e+00 -3.4453531128912593e+00 + -6.7222371590557128e-01 1.9688304573681328e+00 -3.5649106847428946e+00 + -7.8071830929010178e-01 2.0329208543678767e+00 -3.6783070956829542e+00 + -8.8584900200337957e-01 2.1080812412929371e+00 -3.7585599440049386e+00 + -9.7320994040121178e-01 2.1956474432402655e+00 -3.8178863471372431e+00 + -1.0553045471033180e+00 2.2432082558970725e+00 -4.0140614029633426e+00 + id 11608 + loc 3.7068712711334229e-01 9.1698497533798218e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0642073375515462e-01:2.6982162087613271e-01:1.0132899870094814e-01:3.8123105099135457e-01:8.8773912022494161e-01:4.0000723804189164e-01:1.3328427612336644e+00:5.0641566954781714e-01:1.9595973101354258e+00:4.2238917105330998e-01:2.1347729983016612e+00:2.7046792950781368e-01:2.7185731299988860e+00:3.2784328924268463e-01:3.5961041791847439e+00 + CVs 20 + 4.5661396977411178e-01 4.8640509612697641e-01 -1.0148952192414992e-01 + 8.5740981548391271e-01 9.8420031624798354e-01 -8.9043844758921908e-02 + 1.1808125343031679e+00 1.4886452588013213e+00 2.8482378033325984e-02 + 1.4324070629722594e+00 1.9700091006732410e+00 2.4217918905700908e-01 + 1.6269385329311132e+00 2.3831126099674553e+00 5.3783101971661695e-01 + 1.7809357394131271e+00 2.7001656768195965e+00 8.8914499869513330e-01 + 1.9070843964285453e+00 2.9061607243532777e+00 1.2523326009258204e+00 + 2.0152798991329481e+00 3.0082198233458586e+00 1.5177290002631150e+00 + 2.0747387690797159e+00 2.9979545505784841e+00 1.8320270315894176e+00 + 2.0769952879305311e+00 2.8686403061096195e+00 2.2317463405575859e+00 + 2.0733984475472704e+00 2.6483595117531529e+00 2.6660846898228625e+00 + 2.0534032284156396e+00 2.3153155138322878e+00 3.1228707744578226e+00 + 1.9601663459487724e+00 1.8292793925256783e+00 3.5786516161584538e+00 + 1.6666800781121585e+00 1.1943204246170582e+00 3.9411502934260563e+00 + 1.0601654059717869e+00 5.6148192857730839e-01 4.0785519383951350e+00 + 1.7820210696700944e-01 1.3700922676448646e-01 3.9441546437849220e+00 + -8.8987898377272956e-01 2.8480685582647380e-02 3.5584296893136260e+00 + -2.0093143385353383e+00 4.6996096681632538e-01 2.8535027407766433e+00 + -2.1984078741951669e+00 1.0627771490121458e+00 2.4542897478741161e+00 + id 11609 + loc 1.0775756835937500e-01 6.2651735544204712e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5682778565892296e-01:4.5682321738106640e-01:9.2170892024678319e-02:4.5120069143752273e-01:9.3641677149930225e-01:4.5499787836174005e-01:1.2980864773809493e+00:3.0793856772788636e-01:1.9485603397682736e+00:4.0233709142646751e-01:2.8462943750401415e+00:3.7472912560943122e-01:3.4431122522947719e+00 + CVs 20 + 1.5286959105734022e-01 5.3034821601347082e-01 -1.6331484633101204e-01 + 2.9919478768134339e-01 1.0596278132951162e+00 -2.5604560855305886e-01 + 4.4483492155826698e-01 1.5890444980050948e+00 -2.6293389349418173e-01 + 6.1521821816466482e-01 2.1359295122836164e+00 -1.8859394016336628e-01 + 8.6983326558698115e-01 2.7130470425372515e+00 -5.5090543248350277e-02 + 1.2730322955084072e+00 3.2875776574269655e+00 8.4398070434847483e-02 + 1.8544484665632726e+00 3.7836003054560625e+00 1.6758028740137609e-01 + 2.6046363352866431e+00 4.1029006581410004e+00 1.6503869232254065e-01 + 3.4517716292041838e+00 4.1410220268060325e+00 6.2953572534562019e-02 + 4.2656803746931757e+00 3.8400375390392498e+00 -1.4577152597184884e-01 + 4.8994288995919604e+00 3.1886378389980408e+00 -3.9809065481064987e-01 + 5.2048515021947912e+00 2.2585269426933845e+00 -5.5422634322640163e-01 + 5.1161244451528951e+00 1.2373549908910428e+00 -5.2197109439912881e-01 + 4.7136140348787343e+00 3.2615395397257341e-01 -3.1394850740732455e-01 + 4.1731857582302734e+00 -3.8342570432435619e-01 -3.8007393490134100e-02 + 3.7068910616452593e+00 -9.5448391931809595e-01 2.6219452030893720e-01 + 3.9454777914419741e+00 -9.6913552606452469e-01 1.3762097757648255e+00 + 3.9390663620314514e+00 -5.7696334288201379e-01 1.5430105037341511e+00 + 3.8704259703900421e+00 -4.6133576428801781e-03 1.7799853820620675e+00 + id 11610 + loc 7.8645753860473633e-01 3.6015486717224121e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8291097062145250e-01:4.8290614151174632e-01:2.5834915393748425e-01:4.5344218075186987e-01:8.7404997609204715e-01:2.8668051662196531e-01:1.0507914279538042e+00:3.1668485557101589e-01:1.9007756961486471e+00:2.5421011027974244e-01:2.4362422204070855e+00:2.9506028863747596e-01:3.6525542653591843e+00 + CVs 20 + 2.3683794714132170e-01 3.6413145188384777e-01 -1.1003833707712704e-01 + 4.2727666339608539e-01 7.3023061578758663e-01 -2.2262967015248347e-01 + 5.8720130283974448e-01 1.1101939567480272e+00 -3.6288211747393456e-01 + 7.5334241454735429e-01 1.5108842464274310e+00 -5.2045792364567345e-01 + 9.7305481711133446e-01 1.9300627479005747e+00 -6.5747636083240701e-01 + 1.2728081923002184e+00 2.3501122322365928e+00 -7.3940707330211308e-01 + 1.6522701066429832e+00 2.7438614725678558e+00 -7.4124754812802518e-01 + 2.0982798743239206e+00 3.0843572815362310e+00 -6.3245652513188300e-01 + 2.5787877504457146e+00 3.3357174883502934e+00 -3.7275281702792351e-01 + 3.0356468559814269e+00 3.4571574071746123e+00 4.1678669209086472e-02 + 3.4395797269533643e+00 3.4202963922092415e+00 5.7830856641970163e-01 + 3.7946453693492428e+00 3.1812090711391940e+00 1.1842026753619175e+00 + 4.1000581245688794e+00 2.7470703174999027e+00 1.7158980307966658e+00 + 4.3453391681114431e+00 2.2736515071113383e+00 2.0532840806919519e+00 + 4.5304613149051844e+00 1.8922149477210564e+00 2.2248805006445478e+00 + 4.6674404460774319e+00 1.6426235057777132e+00 2.2657333305765568e+00 + 4.7766053227969216e+00 1.4686332288948161e+00 2.1828376012930670e+00 + 4.8349347373479388e+00 1.2440453895807277e+00 2.1313589908518704e+00 + 4.7747801166785457e+00 1.0359057582058240e+00 2.3464730466920871e+00 + id 11611 + loc 4.7912627458572388e-01 1.8488523364067078e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7820369089402665e-01:4.0742731749071504e-01:1.6802867837046687e-01:2.9625236700526286e-01:9.7556763096586219e-01:2.5513851979978253e-01:1.8604270480217899e+00:4.3562433619436330e-01:2.0208674930839794e+00:4.1894783311967215e-01:2.8972937299276786e+00:4.4946197335762161e-01:3.3858349524330738e+00:4.7819890885711774e-01:3.9202367838949113e+00 + CVs 20 + -2.3904889954967212e-01 2.9653813740727397e-01 -5.2536080086582476e-02 + -4.6133997899358459e-01 6.3934081740392235e-01 -6.7719860142620214e-02 + -6.7292468545462714e-01 1.0174851837025913e+00 -6.1085558158164244e-02 + -8.9462202587456763e-01 1.4208959889571635e+00 -5.5634731367905976e-02 + -1.1539202206318593e+00 1.8383508122925520e+00 -7.7717403213007574e-02 + -1.4741721160975274e+00 2.2473002080743187e+00 -1.5458727431674735e-01 + -1.8688822929430899e+00 2.6075016071880759e+00 -3.1948050947855444e-01 + -2.3233014491119257e+00 2.8567462988521388e+00 -6.1486352181142778e-01 + -2.7756689761613234e+00 2.9295311024679536e+00 -1.0552378785585252e+00 + -3.1583402650012924e+00 2.8113705449025996e+00 -1.5852506635341261e+00 + -3.4634848243201519e+00 2.5201620064998136e+00 -2.1284147453973912e+00 + -3.7224816746119811e+00 2.0462235439782055e+00 -2.6057158841028412e+00 + -3.9516110214968956e+00 1.4128450570502900e+00 -2.9293456030359630e+00 + -4.1168324831649858e+00 7.4739298790729669e-01 -3.1295613605412704e+00 + -4.1716081572516890e+00 1.6366471350603962e-01 -3.3778343381878795e+00 + -4.1229566286709671e+00 -2.3618135114108640e-01 -3.7838058190882013e+00 + -4.0598703890858010e+00 -3.3203564562258858e-01 -4.3123772098405677e+00 + -4.0522029491216864e+00 -2.2011644578233991e-01 -4.8240034763043873e+00 + -4.0441555842739971e+00 -5.0657747594112279e-01 -5.2711832797633091e+00 + id 11612 + loc 2.5181829929351807e-01 3.4872731566429138e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4284773141663281e-01:4.3535390047290240e-01:2.9175966390755137e-01:2.5600899226234669e-01:1.1777368037294158e+00:2.9056952880960368e-01:2.0206110489293367e+00:4.4284330293931867e-01:2.9888211074812210e+00:2.7880726733692446e-01:3.4449216616275820e+00 + CVs 20 + 3.1730775802378458e-01 3.7783593995818521e-01 2.3749434830563224e-01 + 5.0249281207691410e-01 6.8172996524487317e-01 4.5520370113555431e-01 + 6.2606416184990521e-01 9.4948271465449530e-01 6.6860259192071569e-01 + 7.1928417940534572e-01 1.1948579883088000e+00 8.7730546834537759e-01 + 7.8681868779132036e-01 1.4184197058147843e+00 1.0777012487059088e+00 + 8.3693502677284215e-01 1.6246941949507616e+00 1.2701661128153476e+00 + 8.7618315022407089e-01 1.8200152894474106e+00 1.4623481615053591e+00 + 9.0224103370503983e-01 2.0085076320210753e+00 1.6695425455207065e+00 + 8.9737639013803538e-01 2.1881770048619824e+00 1.9083302087100866e+00 + 8.2661177364254046e-01 2.3416884378525560e+00 2.1850604530266113e+00 + 6.6844833819675897e-01 2.4378941641265035e+00 2.4909470796198190e+00 + 4.3411645592151837e-01 2.4477553138129307e+00 2.8182502368566946e+00 + 1.5001618712671860e-01 2.3450506829293705e+00 3.1628052334220169e+00 + -1.5064756685554459e-01 2.1021816564651545e+00 3.5155781444843028e+00 + -4.0021156863176344e-01 1.7097023404121001e+00 3.8679408151330241e+00 + -4.9467831091470105e-01 1.2185361955360792e+00 4.2056912406624107e+00 + -3.9509543097196476e-01 7.3582274858205821e-01 4.5263449665902504e+00 + -1.3506365899924030e-01 3.6167218441290305e-01 4.8725717576865142e+00 + 2.8613359738441146e-01 5.4501366191445383e-02 5.3405551277288668e+00 + id 11613 + loc 8.7367311120033264e-02 4.8508264124393463e-02 410 + blend 0.0000000000000000e+00 + interp 3.4054552267215127e-01:3.4054211721692457e-01:1.3631642138663669e-01:2.7730461425303859e-01:7.5804193149563570e-01:2.5795501271987975e-01:1.4815814088720740e+00:2.6813652504073421e-01:1.9506283931905375e+00:3.3044649961738354e-01:2.3510164094680750e+00:2.9669158934003048e-01:3.1435254260569296e+00 + CVs 20 + -1.2507232987411007e-01 9.9635822494831397e-02 -9.4208748030627398e-02 + -2.4941599782368293e-01 2.0381358775852626e-01 -1.8633379887347751e-01 + -3.7064064359218701e-01 3.1440212646064436e-01 -2.8326583098333524e-01 + -4.8610210493545691e-01 4.3209591868991348e-01 -3.9016880272827814e-01 + -5.9340272272877270e-01 5.5603440487851319e-01 -5.1046032239872097e-01 + -6.9087195452387107e-01 6.8567075500862629e-01 -6.4905424874795059e-01 + -7.7246596150907876e-01 8.2088867799125564e-01 -8.0989771062217264e-01 + -8.2658647181492662e-01 9.5966501886557420e-01 -9.9153594899915609e-01 + -8.4285157097943153e-01 1.0969398981809182e+00 -1.1878845372474665e+00 + -8.1684868633489882e-01 1.2257278010289117e+00 -1.3934914303925239e+00 + -7.4717935434597682e-01 1.3360497690994122e+00 -1.5974814144167342e+00 + -6.3488674463290462e-01 1.4212560952444717e+00 -1.7686365830050848e+00 + -4.8933873282387630e-01 1.4835530514883797e+00 -1.8757705442583403e+00 + -3.1732815018026961e-01 1.5320499179048848e+00 -1.9254793009757332e+00 + -1.2576063339181442e-01 1.5690268159311482e+00 -1.9751475377077563e+00 + 5.9831945237682760e-02 1.5823916461623351e+00 -2.0756418575042046e+00 + 2.2487956195520953e-01 1.5651827494221875e+00 -2.2239026178613939e+00 + 3.6897153029801988e-01 1.5186692953804348e+00 -2.4047785715269523e+00 + 4.1744694657014003e-01 1.4249342794793056e+00 -2.5815890139208859e+00 + id 11614 + loc 8.9828723669052124e-01 6.1656528711318970e-01 1053 + blend 0.0000000000000000e+00 + interp 4.1967714201929224e-01:2.9106708854849245e-01:3.7590799914827611e-02:3.1852361026215026e-01:9.2056430892727281e-01:3.4366103610289628e-01:1.7206178513785253e+00:3.7546794902727204e-01:2.1177677073227787e+00:4.1967294524787208e-01:2.7451357412659743e+00:3.5997629573580026e-01:3.0842900513957137e+00:4.1938490919355220e-01:3.6826453422024379e+00 + CVs 20 + -7.4471118662558677e-02 2.9843386081066259e-01 2.2243249335063767e-01 + -1.8181779587086683e-01 5.7624704397824777e-01 4.3463055563755637e-01 + -3.0318817751105165e-01 8.5157280900629684e-01 6.4143388832730697e-01 + -4.3263420084516774e-01 1.1282333994349310e+00 8.4183170499067139e-01 + -5.7715701438565159e-01 1.3997466733388553e+00 1.0310388299434494e+00 + -7.3573070861394696e-01 1.6545299837657537e+00 1.2051517179544518e+00 + -9.0317409317244945e-01 1.8806466758647788e+00 1.3657466732300048e+00 + -1.0952878443834499e+00 2.0645420871981006e+00 1.5198172989026351e+00 + -1.3503595726804574e+00 2.1607582778686529e+00 1.6624582221495947e+00 + -1.6633713183547307e+00 2.1091431176220716e+00 1.7658117880557522e+00 + -1.9878646653984449e+00 1.8893285525658701e+00 1.8065715831049882e+00 + -2.2557453104939915e+00 1.5002079182435708e+00 1.7685778546694482e+00 + -2.3731690355841248e+00 9.7593165333763343e-01 1.6281841636452028e+00 + -2.3043628354585479e+00 4.0569743924686125e-01 1.3486958791910693e+00 + -2.1187491425057594e+00 -1.0842550556954444e-01 8.8054090445785527e-01 + -1.9177118161650535e+00 -4.4036172357905284e-01 1.9791179738224512e-01 + -1.7757713805979842e+00 -4.5153499883670634e-01 -6.1310321034991433e-01 + -1.7042966459762201e+00 -1.7987925671597382e-01 -1.3641935059066468e+00 + -1.6062833781247630e+00 7.3586137643588678e-04 -1.9725264625571497e+00 + id 11615 + loc 7.8480988740921021e-01 1.1120109260082245e-01 1070 + blend 0.0000000000000000e+00 + interp 4.3952318621588854e-01:2.7423845415462023e-01:7.2158517989922666e-01:3.0490079980054730e-01:1.7612110596505732e+00:4.3951879098402641e-01:2.2356784290118230e+00:2.7343799107682804e-01:2.9794524185976363e+00:2.8334135147576894e-01:3.9921821673741436e+00 + CVs 20 + 3.4827870656511184e-01 3.0667751066602728e-01 -1.6828710874525130e-01 + 6.6059270248684610e-01 5.5275108482612889e-01 -2.4517666081299316e-01 + 9.4767366296624467e-01 7.7588006463909820e-01 -2.6743920501342355e-01 + 1.2090679942170204e+00 9.9733973551307220e-01 -2.5052756015342559e-01 + 1.4261341137372483e+00 1.2088974657308178e+00 -2.0663880901478437e-01 + 1.5870240101405251e+00 1.3882057055741077e+00 -1.6636800657808437e-01 + 1.7011891278768130e+00 1.5285518814853165e+00 -1.4374699261892787e-01 + 1.7854462795065711e+00 1.6546445697880614e+00 -1.3906217706806490e-01 + 1.8412110535520299e+00 1.7780853322659134e+00 -1.4476802899179853e-01 + 1.8555241282145225e+00 1.9088514585239500e+00 -1.3794782386775251e-01 + 1.8375326057282533e+00 2.0813329125510038e+00 -1.2487257843243316e-01 + 1.8537759576430100e+00 2.2898262482994136e+00 -1.5307678099002797e-01 + 1.9470029148518728e+00 2.4803783653071725e+00 -2.3270798979317919e-01 + 2.0983051334285525e+00 2.6178936869350569e+00 -3.4825152366440659e-01 + 2.2705880533438862e+00 2.6828004456668362e+00 -4.8278523341273449e-01 + 2.4556483255153534e+00 2.7052928401782794e+00 -6.2681012632248345e-01 + 2.6939496501242575e+00 2.7333046205537612e+00 -7.9886485903987259e-01 + 2.9944113426263117e+00 2.7278776249118719e+00 -9.9144140131474146e-01 + 2.9471802618678411e+00 2.5186014315390071e+00 -7.9072610436318569e-01 + id 11616 + loc 6.0542255640029907e-01 1.1864195764064789e-01 1090 + blend 0.0000000000000000e+00 + interp 4.1833316791404257e-01:3.8269052900628370e-01:3.9263438142940932e-01:3.9556726908075396e-01:9.9893513225363095e-01:4.1832898458236345e-01:1.7965358828907600e+00:4.1656035549404374e-01:2.0188886189302995e+00:3.4136113606273044e-01:2.5175626236375739e+00:3.7402849143482370e-01:3.4394551383261769e+00 + CVs 20 + 4.4342809065812089e-02 4.6961706250715285e-01 -2.7834255771981636e-01 + 1.4710617642588891e-01 8.6962810397792523e-01 -4.5447933037926436e-01 + 2.7885321357097220e-01 1.2357131433575801e+00 -5.7411616691070588e-01 + 4.3634909507555797e-01 1.5713006218042938e+00 -6.4276977338194130e-01 + 6.2219296417592063e-01 1.8553033357173208e+00 -6.4902894864569072e-01 + 8.2546733459175725e-01 2.0605833008744141e+00 -5.8754909321623583e-01 + 1.0186331957215236e+00 2.1617371621900796e+00 -4.6581182821115802e-01 + 1.1662433105313526e+00 2.1540863736436298e+00 -3.1007421900450099e-01 + 1.2508091531966212e+00 2.0631313708280130e+00 -1.5573829700030606e-01 + 1.2910836932264675e+00 1.9238484088183399e+00 -2.0014039771273029e-02 + 1.3125291287939387e+00 1.7497853676345339e+00 9.9282201609207810e-02 + 1.3250155077001213e+00 1.5417655132191375e+00 1.9940969090973326e-01 + 1.3354391386744298e+00 1.3003702315594972e+00 2.7024461850183296e-01 + 1.3560716718059906e+00 1.0248025056173173e+00 2.9425414006978662e-01 + 1.4026184869058338e+00 7.1996946902945003e-01 2.4394365706486501e-01 + 1.5099460332478434e+00 3.8986084629667728e-01 9.5074540550647818e-02 + 1.7341563562075288e+00 6.6987231560455440e-02 -1.8738642217994728e-01 + 2.0850233628493542e+00 -1.5260933775719110e-01 -5.7870010206838329e-01 + 2.3877084767587955e+00 -3.5745769760006801e-01 -8.2157002697781012e-01 + id 11617 + loc 7.1917158365249634e-01 1.5060803294181824e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8937648341579976e-01:3.4674924950629521e-01:7.7273934705401892e-04:3.8108512075480372e-01:5.5382941535783070e-01:4.8937158965096561e-01:1.0026338630333178e+00:3.1511932789040537e-01:1.5639702282550267e+00:3.2201201529115403e-01:2.2666889224188420e+00:2.6068160697109699e-01:3.0744729487790980e+00 + CVs 20 + -1.9546129410042512e-01 3.7811308149082956e-01 1.8964613318303264e-01 + -3.8231347320470399e-01 7.3980519385707921e-01 4.1037910010330736e-01 + -5.5499534335695899e-01 1.0709393681880204e+00 6.7699058731809603e-01 + -6.9823241936889002e-01 1.3576198765636438e+00 9.9346181619669727e-01 + -8.0224394849239733e-01 1.5894554707643231e+00 1.3583180127833880e+00 + -8.8234675851082667e-01 1.7602069291219058e+00 1.7746099548240308e+00 + -9.6979627501908960e-01 1.8642776220688382e+00 2.2464976055183965e+00 + -1.0888349292134598e+00 1.8938674454701623e+00 2.7665214598265515e+00 + -1.2477415647835031e+00 1.8386460476432136e+00 3.3126414225359442e+00 + -1.4341656745166231e+00 1.6862611440422586e+00 3.8489129740866446e+00 + -1.5945536523291493e+00 1.4339531853862135e+00 4.3217064802479443e+00 + -1.6142284863990566e+00 1.1248096539596637e+00 4.6585606520776919e+00 + -1.3986331330226940e+00 8.9472405962774859e-01 4.8059224176931812e+00 + -1.0639772837589809e+00 8.3517101947636907e-01 4.8389186945011531e+00 + -7.5639279493101597e-01 8.3518041238618568e-01 4.8751566075728023e+00 + -4.9529174875086374e-01 9.9995503543774233e-01 4.9166711878167400e+00 + -5.7063559802833774e-01 1.7675374312051813e+00 4.9809713791740933e+00 + -1.4420924044606971e+00 2.6836501772195600e+00 5.1046607338345344e+00 + -1.0268455481968572e+00 2.6872496371948644e+00 5.2071842625358231e+00 + id 11618 + loc 5.9381645917892456e-01 9.7329556941986084e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6211743473432459e-01:3.5121288147441349e-01:3.3187089433364014e-01:4.6211281355997730e-01:9.9774663971080546e-01:3.7619909529175627e-01:1.8744919516352416e+00:2.8602586422389048e-01:2.9510175824920335e+00:4.1322325098508672e-01:3.8175468319207098e+00 + CVs 20 + -9.4702433742031217e-02 4.7965209677260567e-01 1.9929665361794152e-01 + -2.3303426378246897e-01 9.3830816522634308e-01 3.4104851395579233e-01 + -3.9151585436243846e-01 1.3903930787888350e+00 4.5839704785355034e-01 + -5.7819465197549769e-01 1.8327037697936599e+00 5.4515039966814005e-01 + -8.0440974250465647e-01 2.2421355196350961e+00 5.7344952770444424e-01 + -1.0622738984356064e+00 2.5835764271301107e+00 5.1439413028263581e-01 + -1.3107679007606556e+00 2.8072264237900058e+00 3.4313048785655331e-01 + -1.4547695735160073e+00 2.8457536775257264e+00 6.2062922989303271e-02 + -1.3827214406149917e+00 2.6781156095904621e+00 -2.2208303512108540e-01 + -1.1643087976399893e+00 2.4359594904511930e+00 -3.8186213167050775e-01 + -9.5652326438617286e-01 2.1900545039431112e+00 -4.7452858833351552e-01 + -7.9769232807122470e-01 1.8749576023694869e+00 -5.4184525688648411e-01 + -6.7834598306465621e-01 1.4748822445328595e+00 -5.4313492870579783e-01 + -5.6247914499084428e-01 1.0951047623096342e+00 -5.2290439946139100e-01 + -4.0541535162063164e-01 8.0994652082363827e-01 -6.1823232233305525e-01 + -2.0828609299033354e-01 6.5766839790148890e-01 -8.8961171653776328e-01 + -2.6408832729994461e-02 7.0870422030852365e-01 -1.3125479380557987e+00 + 6.9913353848386983e-02 9.7044672031351675e-01 -1.7637506073942326e+00 + 2.0379706881142945e-01 9.1563919197216359e-01 -2.1806344720423811e+00 + id 11619 + loc 4.4272679835557938e-02 2.5379067659378052e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1419570529171823e-01:3.9976980857111005e-01:3.3922845661303169e-01:2.7206112525556952e-01:9.2993401760543049e-01:2.1568427055721465e-01:1.9906197060417297e+00:3.5101808865311679e-01:2.6930722996223091e+00:4.0002065920080243e-01:3.3732638278386400e+00:4.1419156333466534e-01:3.9810796340793893e+00 + CVs 20 + -1.7526276144853481e-01 3.1690002085455699e-01 -1.7558570238583399e-02 + -3.5265288092184494e-01 6.1472219969926856e-01 -2.3020433838214602e-02 + -5.3354148358942455e-01 8.9432548865482708e-01 -2.2031378632534709e-02 + -7.0940434985521039e-01 1.1628003288673765e+00 -1.7847837871480282e-02 + -8.2010316097366143e-01 1.4201768150714329e+00 4.0794525497608314e-03 + -7.7181735223247272e-01 1.6490859213136975e+00 6.7052652936378521e-02 + -5.8099116549785823e-01 1.9329748148562964e+00 1.9141402374121652e-01 + -5.1679057200936618e-01 2.3288131842336890e+00 3.3454021525447925e-01 + -7.0527908344118917e-01 2.7024085973136387e+00 4.3054823429594635e-01 + -1.0740544038955937e+00 2.9417215516948998e+00 4.4281988803810179e-01 + -1.4938673850969793e+00 3.0011222636439627e+00 3.4421120861163235e-01 + -1.8370796703601668e+00 2.9373375994739530e+00 1.2891964216401963e-01 + -2.0381704685002515e+00 2.8462723515826904e+00 -1.8447772748456404e-01 + -2.1249402709150291e+00 2.8019135702204987e+00 -5.7331481719898125e-01 + -2.1583286882648873e+00 2.8192915984867795e+00 -1.0400796383747879e+00 + -2.1819960836055725e+00 2.8109793566130383e+00 -1.5748273922624181e+00 + -2.2672133127858363e+00 2.6916349470192054e+00 -2.1491254090112548e+00 + -2.3674702129899763e+00 2.3751897412267824e+00 -2.7334052275287068e+00 + -2.0133084921449118e+00 2.2062201107766746e+00 -2.6972771930514572e+00 + id 11620 + loc 4.3550559878349304e-01 2.0207504928112030e-01 1077 + blend 0.0000000000000000e+00 + interp 3.5069762335929372e-01:2.9914855619055358e-01:8.2463321341177398e-03:2.7187330284002370e-01:8.9116712503464235e-01:2.8086590374772819e-01:2.0188291150331121e+00:3.5069411638306014e-01:2.9505969159485366e+00:3.4605810995639896e-01:3.4361009510261509e+00 + CVs 20 + -2.1469766387697814e-01 2.2657444750017972e-01 4.9955352313374987e-02 + -4.4362411456872103e-01 4.5479631187622971e-01 1.1226707017266091e-01 + -6.9116039544599062e-01 6.7241437809395221e-01 1.7892649585937842e-01 + -9.6108476231880546e-01 8.6936591541662256e-01 2.4167381997561693e-01 + -1.2560870607544230e+00 1.0409901324934663e+00 2.9350543130775902e-01 + -1.5789612811384188e+00 1.1845112398474655e+00 3.2505017987198759e-01 + -1.9289323988112514e+00 1.2955840057150514e+00 3.2459598959150171e-01 + -2.2992365966779262e+00 1.3677012765050112e+00 2.8096642150556805e-01 + -2.6711808278737506e+00 1.3962757695372967e+00 1.9103046869346876e-01 + -3.0139374816527833e+00 1.3873025732758317e+00 6.7484890597064640e-02 + -3.3016905360308177e+00 1.3631392655234522e+00 -6.6864691052967773e-02 + -3.5275540316840504e+00 1.3536287730453589e+00 -1.9721174487464085e-01 + -3.6957484161742182e+00 1.3833357424408608e+00 -3.2545104950490966e-01 + -3.8089323992512054e+00 1.4659027550732597e+00 -4.6906036974682763e-01 + -3.8534911068488245e+00 1.6135019756803648e+00 -6.6291093728605954e-01 + -3.8194108653829804e+00 1.7962699652008927e+00 -9.5535134920080400e-01 + -3.7117532263153614e+00 1.9052724211250396e+00 -1.3382243252233190e+00 + -3.5533056989037934e+00 1.8553943036543115e+00 -1.7381070404586332e+00 + -3.8175036601552490e+00 1.7783030098810195e+00 -1.6899233754656942e+00 + id 11621 + loc 1.7085453495383263e-02 4.4143732637166977e-02 1075 + blend 0.0000000000000000e+00 + interp 4.2306311323217705e-01:3.6562483975619692e-01:3.0657614686896206e-02:1.5574611911613681e-01:8.9791964395615720e-01:4.1434782197238412e-01:1.4505183891213058e+00:3.3397114229119285e-01:2.1135107082633722e+00:4.2305888260104474e-01:2.9971093606421717e+00:3.0873528234434333e-01:3.3949174823957171e+00 + CVs 20 + -1.5802275816329650e-01 1.9019954006021131e-01 9.2809558408684364e-02 + -3.4512461894874602e-01 4.0100470162211210e-01 1.9649058978768583e-01 + -5.3145772354460408e-01 6.3463501455656779e-01 3.1372429911083655e-01 + -6.9824183358067993e-01 8.8572695425965975e-01 4.3905529567847157e-01 + -8.5866368174331364e-01 1.1545178304951651e+00 5.5934285033790598e-01 + -1.0302416822067717e+00 1.4417089512945092e+00 6.6082318010559815e-01 + -1.2340497136734292e+00 1.7520893858624249e+00 7.3248408527890252e-01 + -1.5052272757080913e+00 2.0930507824944948e+00 7.4529539890746510e-01 + -1.8579691934609994e+00 2.4233768480074556e+00 6.2269341696461822e-01 + -2.2021019460142162e+00 2.6351778155799699e+00 3.3413136820362854e-01 + -2.4414298798615626e+00 2.7114481137566138e+00 -3.8504470942757552e-02 + -2.5665820722385790e+00 2.7170194443016316e+00 -4.3418386404126319e-01 + -2.6111259361257941e+00 2.6680377100705259e+00 -8.3871038522627439e-01 + -2.6257978928526646e+00 2.4977338145075008e+00 -1.1915024082256926e+00 + -2.6418006185900151e+00 2.2045556106475970e+00 -1.3933058222814569e+00 + -2.6481503928054142e+00 1.8627436860352025e+00 -1.4381959858125239e+00 + -2.6181576550552563e+00 1.5107654844068061e+00 -1.3697378994014320e+00 + -2.5310252755161051e+00 1.1797524622341398e+00 -1.2865232605863353e+00 + -2.3846863036318364e+00 1.2371716039149534e+00 -1.5080765170369324e+00 + id 11622 + loc 3.7316390872001648e-01 4.5017051696777344e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0345980757528452e-01:4.1145888713269951e-01:2.9547794522989768e-01:4.3533736461991024e-01:9.9902532173136527e-01:3.8411227572307599e-01:1.4127592033299063e+00:5.0345477297720875e-01:1.9499435781878742e+00:3.1516023297402967e-01:2.6418926824166280e+00:2.9131819436323964e-01:3.1358649618846410e+00:3.9392414174441254e-01:3.6990483162390659e+00 + CVs 20 + -1.2011352966826960e-01 3.8228804818852774e-01 -1.6989807900050841e-01 + -2.0063473092013168e-01 7.8108003164641959e-01 -3.2996927488392214e-01 + -2.1879324340242801e-01 1.2177885079654129e+00 -4.5761629062765036e-01 + -1.6601499259389407e-01 1.6963552013570191e+00 -5.8706390393299335e-01 + -6.5411058390724919e-02 2.1717654831646058e+00 -8.1834546647637607e-01 + 3.4068720004704289e-02 2.5524853292581420e+00 -1.2246467905784439e+00 + 8.5885023835919450e-02 2.7380833546506613e+00 -1.7880289559141227e+00 + 7.8264907638841308e-02 2.6590464703052787e+00 -2.4158144290194876e+00 + 5.7315537452041099e-02 2.3194208283757423e+00 -2.9944297717783361e+00 + 1.0193644980688465e-01 1.8162822159336138e+00 -3.4518203352766603e+00 + 2.7360693049166429e-01 1.3110314963397780e+00 -3.8130562996607802e+00 + 5.1418043379920197e-01 9.7671289229702674e-01 -4.1579938120705711e+00 + 5.8975036598991937e-01 9.3179301152725724e-01 -4.5254497274640499e+00 + 3.7507758731248375e-01 1.0966864978507207e+00 -4.7975184663531190e+00 + 7.3806484631795843e-02 1.2293160328600399e+00 -5.0497769657533897e+00 + -2.3202579940542067e-01 1.2337966660749040e+00 -5.4818920354006249e+00 + -4.1702867384961473e-01 9.4229259583311098e-01 -6.1615664783234765e+00 + -2.6708425347174236e-01 3.0451226095973749e-01 -6.8406855095970620e+00 + -3.2678473407118036e-01 1.0152568475629686e-01 -7.3000838165266115e+00 + id 11623 + loc 4.3294202536344528e-02 1.9523522257804871e-01 1048 + blend 0.0000000000000000e+00 + interp 5.6955389943048162e-01:5.1024471710000252e-01:6.0416625288185033e-01:5.6954820389148730e-01:1.0710842456733944e+00:5.4929001025019020e-01:1.4506593265345924e+00:3.5925397203232201e-01:2.0008920118024198e+00:4.9685653198302798e-01:2.4189983012180001e+00:5.0206020375667848e-01:2.8938552984166459e+00:3.7030022295530607e-01:3.1216158107581191e+00:5.0581169591128061e-01:3.9988269602626065e+00 + CVs 20 + -2.4615819992558402e-01 4.2428716680724021e-01 -8.6553735167878967e-02 + -4.7869075329390487e-01 8.4862737918518294e-01 -2.0745953100360603e-01 + -6.9209595543337232e-01 1.2691329880181605e+00 -3.7527605563333594e-01 + -8.8331992945075910e-01 1.6608194034145951e+00 -6.0705855801244124e-01 + -1.0547665027356516e+00 1.9763976413123623e+00 -9.1373411325039033e-01 + -1.2224917289653499e+00 2.1756531013386762e+00 -1.2759954030104579e+00 + -1.4083831761462200e+00 2.2468968337070012e+00 -1.6459747651368026e+00 + -1.6256290059509069e+00 2.2082647985076291e+00 -1.9683813256472336e+00 + -1.8710180249371837e+00 2.0906138734345951e+00 -2.1920676074259147e+00 + -2.1000115968504094e+00 1.9056724491355803e+00 -2.2513147816298131e+00 + -2.2088416324953815e+00 1.6881860200137857e+00 -2.1149949768298524e+00 + -2.1932691619312257e+00 1.5162268702703554e+00 -1.9018423309542460e+00 + -2.1512635082751004e+00 1.3817679713852877e+00 -1.6910300532812039e+00 + -2.1004821964511655e+00 1.2682624142093442e+00 -1.4780546831623287e+00 + -2.0458009229497129e+00 1.1489604585240110e+00 -1.2678054903873270e+00 + -1.9978234192698925e+00 9.7663287096074458e-01 -1.0501855636084394e+00 + -1.9614693260882079e+00 7.3932648515910215e-01 -8.2745264501818827e-01 + -1.9829482678769792e+00 4.1112846369359324e-01 -6.0459307080474378e-01 + -1.9672718709289629e+00 2.6442614444796370e-01 -4.8523762966543404e-01 + id 11624 + loc 6.7757374048233032e-01 8.9868181943893433e-01 1070 + blend 0.0000000000000000e+00 + interp 3.5621034066957297e-01:2.9244384941875967e-01:4.6405181739999635e-02:3.4937434294254149e-01:1.0809866553957175e+00:3.2539160129037442e-01:2.0000236285459940e+00:3.5620677856616628e-01:2.6397364955745379e+00:3.2119964589892303e-01:3.0982676319845543e+00 + CVs 20 + -2.4330366226092509e-01 3.6227197118116683e-01 1.3259749738478763e-01 + -4.2539513511573351e-01 6.8797760005979713e-01 2.8416563797668642e-01 + -5.5097396398233311e-01 9.9878317140792849e-01 4.7857773961636840e-01 + -6.8102278201040722e-01 1.3245310066204283e+00 6.8134720506200563e-01 + -8.9058416050874201e-01 1.6717022695687933e+00 8.1262242138424612e-01 + -1.1988743221289317e+00 1.9991981723875236e+00 8.1041299250401366e-01 + -1.5664351825036127e+00 2.2554779392247082e+00 6.5329600967699086e-01 + -1.9176946327494717e+00 2.4058619012772695e+00 3.3015353072629128e-01 + -2.1492608943462126e+00 2.4338515983840523e+00 -1.4034521869654126e-01 + -2.2019144228669734e+00 2.3577094249685846e+00 -6.6522749751600219e-01 + -2.0963418950467778e+00 2.1988627087805637e+00 -1.1797648952040354e+00 + -1.8358791045015961e+00 1.9362658028982871e+00 -1.6579296698618937e+00 + -1.4665083897706959e+00 1.5860061580687788e+00 -2.0240853837964270e+00 + -1.1702657515186436e+00 1.2863830533657530e+00 -2.2635586570378461e+00 + -1.0904551931530639e+00 1.1850668634888128e+00 -2.4507809120050488e+00 + -1.2369634755023671e+00 1.3663335379075949e+00 -2.5267495932199604e+00 + -1.5414680292255436e+00 1.8323082094004099e+00 -2.1726636010225913e+00 + -1.7076824550761611e+00 2.1063159784501329e+00 -1.3669080899435828e+00 + -1.7997678156048924e+00 2.2460882303095460e+00 -1.6065695279882011e+00 + id 11625 + loc 7.7217513322830200e-01 8.7406285107135773e-02 1085 + blend 0.0000000000000000e+00 + interp 4.9874974968232466e-01:3.2635777882864964e-01:1.5367633683138759e-04:2.8960819964552553e-01:7.1581306209368678e-01:4.5604797453010243e-01:1.0784704973998247e+00:4.9874476218482788e-01:1.6514195487215964e+00:3.3325862122129635e-01:2.2554589802063982e+00:3.3348765409587916e-01:3.2157653114417668e+00 + CVs 20 + 2.5376889594398194e-01 3.4139770449734946e-01 -1.0168811149511320e-01 + 4.7222056799009943e-01 6.7128613010573257e-01 -1.7891051945990474e-01 + 7.0387372401897186e-01 9.9982024583355689e-01 -2.4228899118546599e-01 + 9.8065758254514035e-01 1.3203663754109434e+00 -2.8286973434940937e-01 + 1.3170023816547345e+00 1.6163751189919815e+00 -2.7261675089911008e-01 + 1.7128199232036743e+00 1.8637889096060367e+00 -1.8475288379011634e-01 + 2.1488414928203960e+00 2.0373422609661107e+00 -2.3383764783855288e-03 + 2.5919677082311874e+00 2.1186609411419033e+00 2.7708646556495153e-01 + 3.0086736141879427e+00 2.1001156849832565e+00 6.4069702068223511e-01 + 3.3820576689491086e+00 1.9811112328446918e+00 1.0626497388569129e+00 + 3.7167190481966661e+00 1.7573039496742813e+00 1.5076410953767945e+00 + 4.0260253468632934e+00 1.4175445411337295e+00 1.9330671809968796e+00 + 4.3190621892350913e+00 9.5624555783081833e-01 2.2925182084477687e+00 + 4.6070068153313022e+00 3.8193850113324612e-01 2.5407004396600561e+00 + 4.9201192058492316e+00 -2.8210457850965898e-01 2.6174216563459680e+00 + 5.2915566341508500e+00 -9.5499207080495041e-01 2.4625255772352177e+00 + 5.7540190679007504e+00 -1.4948412609646424e+00 2.1007107456140366e+00 + 6.2980038160598051e+00 -1.8117224945532318e+00 1.6315959011177643e+00 + 6.6062635353063817e+00 -2.1331610620404526e+00 1.3890244730468120e+00 + id 11626 + loc 6.6187715530395508e-01 1.9867996871471405e-01 410 + blend 0.0000000000000000e+00 + interp 4.3989619172204258e-01:4.2537196946071704e-01:2.8254377316576407e-01:3.7154647363767385e-01:1.0072954267677370e+00:3.1126502796150191e-01:1.9439333559608281e+00:4.3989179276012541e-01:2.2139608277700349e+00:3.5395802157777145e-01:2.9660573657402756e+00:3.1017934731252200e-01:3.9723609104107771e+00 + CVs 20 + -3.5274810543203772e-01 2.5859805121021184e-01 1.4952569926129966e-01 + -6.7874945520317398e-01 5.1329076298679088e-01 3.3006256630393271e-01 + -1.0145845145937644e+00 7.8993522733307764e-01 5.2361564185678933e-01 + -1.3604873980565704e+00 1.0709836307396046e+00 7.3204530572275905e-01 + -1.6955879205067332e+00 1.3097802803093901e+00 9.7292154412096199e-01 + -1.9978415266913183e+00 1.4709024565691273e+00 1.2652257501008699e+00 + -2.2671251254672145e+00 1.5523108916473372e+00 1.6194936462330722e+00 + -2.5365578542956890e+00 1.5506099757089107e+00 2.0339570041258059e+00 + -2.8409453261300768e+00 1.4344078769959485e+00 2.4823338031320952e+00 + -3.1866247415098741e+00 1.1644989379999175e+00 2.9078661692949166e+00 + -3.5441158171207494e+00 7.5990873725798447e-01 3.2543322331055675e+00 + -3.8851608354607485e+00 3.2768727814243781e-01 3.5362281609320552e+00 + -4.2128132825774527e+00 -4.2182952683174735e-02 3.8119477540485427e+00 + -4.5388822673590212e+00 -3.2126774515631773e-01 4.1078179852573689e+00 + -4.8857409972793704e+00 -5.3286367861367401e-01 4.4210018155631392e+00 + -5.2963072348082356e+00 -7.4482118251280238e-01 4.7471991390744419e+00 + -5.7832192681617336e+00 -9.9463366033355882e-01 5.0642689472599693e+00 + -6.2949776742662289e+00 -1.2775375835370875e+00 5.3449348965721812e+00 + -6.7549780442821241e+00 -1.6062488734710203e+00 5.6290064039790826e+00 + id 11627 + loc 9.0043884515762329e-01 7.0867860317230225e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0579114474232625e-01:3.8742894723670307e-01:4.8028943426285198e-01:3.1424157686934140e-01:1.4585730109628261e+00:3.8269909951956521e-01:2.0337644597984776e+00:2.5675088632012150e-01:2.6369470236030441e+00:4.0578708683087883e-01:3.0492242320493639e+00:2.9978294330529698e-01:3.7967820449494183e+00 + CVs 20 + 2.7266461896587380e-01 3.5088185901354912e-01 -1.0159133051665015e-01 + 4.7765342140006101e-01 7.1013906971015484e-01 -2.4320477386654188e-01 + 6.4019846530127655e-01 1.0733666213736810e+00 -4.0749561537971124e-01 + 7.6824023118610851e-01 1.4343100109567928e+00 -5.7679773605001494e-01 + 8.5421459172159675e-01 1.7774737778511360e+00 -7.3073186816158309e-01 + 8.8656196866255310e-01 2.0633846421676787e+00 -8.4721271218531347e-01 + 8.6356537218531904e-01 2.2812311459547443e+00 -9.1148884866036717e-01 + 8.1500847755077777e-01 2.4959333423972394e+00 -9.8080147410621876e-01 + 7.8385137964704743e-01 2.7129684399256910e+00 -1.1751969000632803e+00 + 8.0809522448326909e-01 2.8313796295352689e+00 -1.5354663765452194e+00 + 9.1798769978165717e-01 2.7703644864322357e+00 -1.9803853908888813e+00 + 1.1178903080899678e+00 2.5682680414307812e+00 -2.3720250426078291e+00 + 1.3754108664794449e+00 2.3370907231737785e+00 -2.6234947566891749e+00 + 1.6693157581024796e+00 2.1765461545599045e+00 -2.7472361624185266e+00 + 2.0209809987241880e+00 2.1266717749528543e+00 -2.8005249140806470e+00 + 2.4710651553482847e+00 2.0938584683141794e+00 -2.8444729618271345e+00 + 3.0450179809470805e+00 1.8960195027274951e+00 -2.9472551680007038e+00 + 3.6438146006623180e+00 1.4192121391072428e+00 -2.9785571046242456e+00 + 3.5593272872915227e+00 1.3594025512464165e+00 -2.5586892640585917e+00 + id 11628 + loc 9.4953663647174835e-02 2.2207500040531158e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7824594122214636e-01:3.0215454312871576e-01:9.5210040735368451e-01:3.1846435421605057e-01:1.6559642789607292e+00:4.7824115876273415e-01:2.4602666023693192e+00:2.9567674673970712e-01:2.9785915255004736e+00:4.0109956103085137e-01:3.3891997466244108e+00:2.8079357648953185e-01:3.9920511616378054e+00 + CVs 20 + -4.6843633185533931e-02 3.5264159471714496e-01 -3.9147160796927552e-02 + -1.2083418596165391e-01 6.7666781154169020e-01 -9.3466953933234537e-02 + -2.0925285053016524e-01 9.7120534595565311e-01 -1.6634485912081765e-01 + -3.0584187441518995e-01 1.2348413257321460e+00 -2.5738842242415966e-01 + -4.0929273112468351e-01 1.4670151209328923e+00 -3.6434168664332051e-01 + -5.1864656993855696e-01 1.6697697376564462e+00 -4.8549923275574941e-01 + -6.3525906914050323e-01 1.8447018491736966e+00 -6.2209303578932207e-01 + -7.5981918951441885e-01 1.9903289474048667e+00 -7.7817913316715959e-01 + -8.8812132651818332e-01 2.1033657894810149e+00 -9.6126928164193570e-01 + -1.0118425209214079e+00 2.1773622646833033e+00 -1.1834088817731536e+00 + -1.1253536523268808e+00 2.2067888450616175e+00 -1.4524928659824830e+00 + -1.2318958249588001e+00 2.1883072869269444e+00 -1.7717035202865157e+00 + -1.3422799534482903e+00 2.1050303132214392e+00 -2.1509315800241824e+00 + -1.4755718111396268e+00 1.9032921430010916e+00 -2.6021612135147598e+00 + -1.6628934838378764e+00 1.4936231388950967e+00 -3.0879952185145818e+00 + -1.9076102787839968e+00 8.2762074723549017e-01 -3.4460608312380243e+00 + -2.1908075232022184e+00 -2.0072105701551823e-02 -3.5047962678738869e+00 + -2.5326167361146910e+00 -7.9284834073207255e-01 -3.2658725604397674e+00 + -2.7447069139947189e+00 -9.8027044802146857e-01 -3.1726127241152957e+00 + id 11629 + loc 3.4244266152381897e-01 6.0759651660919189e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3463883206072446e-01:2.5450285161960401e-01:8.4200744014480156e-01:4.0747416393335983e-01:1.1098194874089797e+00:4.3114030350429344e-01:1.8909118075250297e+00:4.3463448567240387e-01:2.2272391356661712e+00:4.3366328223081452e-01:2.9580430206658841e+00:4.2256212106462548e-01:3.5313618949539824e+00:2.9257956694758969e-01:3.9865190189554021e+00 + CVs 20 + -2.3307175716271006e-01 4.3328759036122738e-01 3.5164018855300716e-01 + -4.5394223850747811e-01 7.8837483988372603e-01 6.5227229191672542e-01 + -6.6575165600847086e-01 1.1053999075356491e+00 9.5278516463351481e-01 + -8.8577848601108111e-01 1.4068364581608037e+00 1.2650605356807065e+00 + -1.1369369821181425e+00 1.6981235589032806e+00 1.5670238580332316e+00 + -1.4411174910276525e+00 1.9818541061338790e+00 1.8308306598576016e+00 + -1.8150624379195111e+00 2.2543516093607967e+00 2.0199839992292961e+00 + -2.2660027450476834e+00 2.5005260610883280e+00 2.0799493428337525e+00 + -2.7623607016706440e+00 2.6772270738849220e+00 1.9410473559513788e+00 + -3.2042162062282040e+00 2.7263069213040940e+00 1.6016753103330337e+00 + -3.5215994858214819e+00 2.6318576071910389e+00 1.1633002139833266e+00 + -3.7253074293141024e+00 2.4009504480361210e+00 7.3881079791088777e-01 + -3.8548739277338919e+00 2.0552625445245116e+00 4.0650630744888283e-01 + -3.9291650664128119e+00 1.6256718317518053e+00 1.4567102683650757e-01 + -3.9232175424707152e+00 1.1398951338018830e+00 -1.2585217446053742e-01 + -3.8125383764228844e+00 6.9970009427383351e-01 -4.6563553272517183e-01 + -3.6396102424930343e+00 4.5049354565648020e-01 -8.6941797269385501e-01 + -3.4844567366129522e+00 4.3636659033636876e-01 -1.2602851953968255e+00 + -3.3151528112829496e+00 3.5963860908846612e-01 -1.6112850333842395e+00 + id 11630 + loc 9.7960793972015381e-01 5.3314083814620972e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4539122347196414e-01:3.0389487879802546e-01:1.0801337762773033e-02:4.4538676955972945e-01:6.9566970744605605e-01:4.3208418662376141e-01:1.2153348176123877e+00:2.8011259399393951e-01:1.9427432447011173e+00:3.9359427167850874e-01:2.1604591032426175e+00:3.0563332897901041e-01:2.9873531405654181e+00 + CVs 20 + 1.8927198050608490e-01 1.9265694365479191e-01 -1.8671345980445608e-01 + 3.4108188485384078e-01 4.3615970452134334e-01 -3.7060289107782540e-01 + 4.8437386612429739e-01 7.0735005568029941e-01 -5.4763733137300152e-01 + 6.4055806869575282e-01 9.8578921211708026e-01 -7.2233254339007580e-01 + 8.2843361578646146e-01 1.2450146357249126e+00 -9.0737703162923056e-01 + 1.0556528892748427e+00 1.4470502328938593e+00 -1.1057648245455511e+00 + 1.3077645440870496e+00 1.5567776911787536e+00 -1.2996563311044007e+00 + 1.5578379088357766e+00 1.5633859149309468e+00 -1.4550810022351621e+00 + 1.7918859914393328e+00 1.4886456061214859e+00 -1.5508716625416457e+00 + 2.0165455448726597e+00 1.3591698814041187e+00 -1.5879135313474242e+00 + 2.2353655531539989e+00 1.2013886898314117e+00 -1.5765233118817130e+00 + 2.4450718690625353e+00 1.0392753857469399e+00 -1.5315234100224060e+00 + 2.6432789714709477e+00 8.7961636409304655e-01 -1.4547263783470366e+00 + 2.8157595161342241e+00 7.1765118987680254e-01 -1.3267383882246602e+00 + 2.9385481642683211e+00 5.6145734547142290e-01 -1.1667441932900400e+00 + 2.9827537804339270e+00 4.0899578613697796e-01 -1.0357121102103559e+00 + 2.9185338407232875e+00 2.0914610883767826e-01 -9.3630407507806268e-01 + 2.8974457103346221e+00 -5.0419172746107854e-04 -8.3337095155407359e-01 + 3.1001914523121563e+00 9.5388792101242292e-02 -9.2002297574133651e-01 + id 11631 + loc 9.7734558582305908e-01 6.9639521837234497e-01 1054 + blend 0.0000000000000000e+00 + interp 3.6619369404648100e-01:3.6619003210954054e-01:3.2472468084039752e-01:2.7067952878468360e-01:1.0065099655794554e+00:2.0446314437470872e-01:1.9424460532858523e+00:1.0113799330841389e-01:2.3694982543927892e+00:2.2408772120476719e-01:3.5007793642876122e+00 + CVs 20 + 2.1843724165795356e-01 4.2267814103718176e-01 -2.8708266029026208e-01 + 4.1730973091103740e-01 8.1525604629945614e-01 -4.8643648785617544e-01 + 5.8666579191952506e-01 1.2314187490880180e+00 -6.1869368669265545e-01 + 7.6664280276392383e-01 1.6883634845294406e+00 -7.0998949682794743e-01 + 1.0511308321848527e+00 2.1370118131455507e+00 -7.9869351721910642e-01 + 1.4974473296363662e+00 2.4788485360995294e+00 -9.2509426729146582e-01 + 2.0710752364496061e+00 2.6226139275146578e+00 -1.1028877580845911e+00 + 2.6885960319653268e+00 2.5265577406380375e+00 -1.3072160555587684e+00 + 3.2764660170089908e+00 2.2146664948935850e+00 -1.4780463305427514e+00 + 3.7930156705435727e+00 1.7876732666196662e+00 -1.5459130286124059e+00 + 4.2483214103976161e+00 1.4131488056279302e+00 -1.4881061187478986e+00 + 4.6560860624678417e+00 1.2379847851079289e+00 -1.4050655450886678e+00 + 4.9567107886077206e+00 1.2911444075475924e+00 -1.4912357329625399e+00 + 5.0832849186838409e+00 1.4493712964207555e+00 -1.7514702479887432e+00 + 5.2400188405543666e+00 1.5520467074907780e+00 -2.0505538329404804e+00 + 5.6155217757152345e+00 1.5320967545226873e+00 -2.4095021599744468e+00 + 6.2965100468741539e+00 1.2597351246529638e+00 -2.7510464512480466e+00 + 7.1228447836192554e+00 6.8492115459423775e-01 -2.7660763995009603e+00 + 7.4612420772474843e+00 4.8135349178139264e-01 -2.7658319974581493e+00 + id 11632 + loc 8.2126581668853760e-01 8.0544054508209229e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3764509248379202e-01:2.9981036883257389e-01:1.4292236927654978e-01:3.6220305916882500e-01:9.1480920608212501e-01:2.3620354041518235e-01:1.1732751046696488e+00:2.6452128380687712e-01:1.9866640350627542e+00:3.7342400442128360e-01:2.4856200243634357e+00:3.9138701219301614e-01:2.9599600329630880e+00:3.4396658215208342e-01:3.1474178399792940e+00:4.3764071603286719e-01:3.8733223172486104e+00 + CVs 20 + 1.3981543827207685e-01 8.2944118662273902e-01 -5.0716712413613474e-01 + 2.5906239832180766e-01 1.6446130402649666e+00 -9.2041409695397691e-01 + 3.7868492811998078e-01 2.4357612534938085e+00 -1.2391623225363906e+00 + 5.9833483413218047e-01 3.2230847557970059e+00 -1.4441058078679139e+00 + 1.0022984051525448e+00 3.9779190173660184e+00 -1.3942005900590564e+00 + 1.5265744522390270e+00 4.5804251537340379e+00 -1.0033656256372767e+00 + 2.0665753897422601e+00 4.8859163896922535e+00 -3.1520848684690628e-01 + 2.5397772345031879e+00 4.8131232703746099e+00 5.4059632095894683e-01 + 2.9031976311136765e+00 4.3628263570588341e+00 1.4475177238908721e+00 + 3.0771735970775467e+00 3.5828630073681618e+00 2.3278904914212313e+00 + 2.9229360108343578e+00 2.6077890757131983e+00 3.1034926161950285e+00 + 2.3994548239614439e+00 1.6525794056199086e+00 3.6530285236971598e+00 + 1.6663569327342651e+00 8.6997836024324449e-01 3.9145603791453905e+00 + 9.3601395164474654e-01 2.8657273101103509e-01 3.9517761757488854e+00 + 3.0425645117200673e-01 -1.8523740469851591e-01 3.8967890835017887e+00 + -2.5138199333338973e-01 -8.0273521449073448e-01 3.9499413681065718e+00 + -4.6893862685857285e-01 -1.6537227905926009e+00 4.3610249595321635e+00 + -1.7700868773104544e-01 -2.3652831337156162e+00 5.0392016398116759e+00 + 2.4123123318029305e-01 -2.5844890888403693e+00 5.6275294708053298e+00 + id 11633 + loc 9.9799734354019165e-01 3.0255588889122009e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3139559369774358e-01:3.3154389086801156e-01:1.7126506316401668e-03:3.6016679464949980e-01:7.8958803012458678e-01:1.4776050321498921e-01:1.2761094558036905e+00:4.3520486760854610e-01:2.3450965960004897e+00:3.6873164480910214e-01:2.9884628825147010e+00:5.3139027974180664e-01:3.2726312699975102e+00 + CVs 20 + 1.7685225148005029e-01 3.2945279795966170e-01 -1.3745325121585325e-01 + 3.9644736549533094e-01 6.6656640111672716e-01 -2.7122640256987030e-01 + 6.5805726940057740e-01 9.9788875973451563e-01 -3.9135070941051875e-01 + 9.6092198414568308e-01 1.3032937077205768e+00 -4.9089082233042952e-01 + 1.3012265709231243e+00 1.5606216223067291e+00 -5.6514619326387716e-01 + 1.6675253387624234e+00 1.7467395621283710e+00 -6.0967721908759054e-01 + 2.0382295391885061e+00 1.8351048851292957e+00 -6.1645210470971468e-01 + 2.3842972962168103e+00 1.8076545209212473e+00 -5.7666400480428259e-01 + 2.6835299170802487e+00 1.6666990843770186e+00 -4.8782577931052973e-01 + 2.8990010517332023e+00 1.4280662176692658e+00 -3.4427930064949841e-01 + 2.9895841272809562e+00 1.1353842095758058e+00 -1.3825245979260695e-01 + 2.9633902606210274e+00 8.3132266589233506e-01 1.3057874086598364e-01 + 2.8572954675286963e+00 5.6171707868033682e-01 4.6601562021115139e-01 + 2.7646690284313937e+00 3.8343139865495179e-01 8.8209258704880078e-01 + 2.7897445311369036e+00 3.6950089860841950e-01 1.3615300464299702e+00 + 2.9698356727934270e+00 6.0438518295623245e-01 1.7867217780839411e+00 + 3.2563443976590518e+00 1.0264012262333508e+00 2.0198284572452252e+00 + 3.5437980117116195e+00 1.3803258431859797e+00 2.2038958875565426e+00 + 3.7348210545720022e+00 1.4541535728037709e+00 2.7413390841889962e+00 + id 11634 + loc 8.7367311120033264e-02 5.1874220371246338e-02 1074 + blend 0.0000000000000000e+00 + interp 5.0724854994961477e-01:3.7461697243749731e-01:8.2430967041845382e-02:4.0832918942986651e-01:2.3034640625439617e-01:5.0724347746411524e-01:1.0010946000206948e+00:3.7477592256748016e-01:1.3187858042027496e+00:3.4497022221346085e-01:1.8806375360040248e+00:3.5533935769615566e-01:2.3142967365271878e+00:3.3700412814146491e-01:2.9581989801457462e+00:4.0483953672481215e-01:3.2063890737976353e+00:4.7700474649738966e-01:3.8018587943953621e+00 + CVs 20 + -1.7191361060903071e-01 3.8797088106699507e-01 -9.4784785222343085e-02 + -3.4173878079487258e-01 7.6947634072820459e-01 -1.9758314232243587e-01 + -5.0626929671560728e-01 1.1495098964076351e+00 -2.8308691794546992e-01 + -6.5473081057576743e-01 1.5272749975364512e+00 -3.3360247592926623e-01 + -7.7756340757125597e-01 1.9019783429653452e+00 -3.3986318756404582e-01 + -8.8500322871139414e-01 2.2617060510323101e+00 -3.0626735569327690e-01 + -1.0128016254197716e+00 2.5759865358884695e+00 -2.5574739396009283e-01 + -1.1909123629868696e+00 2.8122192808236921e+00 -2.1286932744904774e-01 + -1.4085412361340759e+00 2.9541473556402340e+00 -1.8414989371662727e-01 + -1.6413074667217764e+00 2.9983168704392789e+00 -1.6827626390746564e-01 + -1.8737574310172429e+00 2.9419771896229490e+00 -1.7780362690208218e-01 + -2.0830382292345466e+00 2.7990835262206182e+00 -2.3723462436071474e-01 + -2.2428117359047621e+00 2.6041028081019473e+00 -3.5271342252160920e-01 + -2.3546937400998718e+00 2.4088858250154832e+00 -4.9732766636043957e-01 + -2.4458938175429910e+00 2.2592855523352497e+00 -6.4075757820732515e-01 + -2.5571252798333575e+00 2.1481521752961905e+00 -7.7873134570161473e-01 + -2.7617477501751408e+00 2.0373120260631179e+00 -9.5715768425903669e-01 + -2.9981780836880234e+00 1.8102428045578183e+00 -1.2034482369949968e+00 + -2.8286506836395020e+00 1.6016497366591094e+00 -1.0028770023610134e+00 + id 11635 + loc 9.9745559692382813e-01 6.0660064220428467e-01 1090 + blend 0.0000000000000000e+00 + interp 5.7026536438836006e-01:4.6948327542910823e-01:4.0309322822050120e-01:5.1249654750976714e-01:9.6327166901977168e-01:5.7025966173471621e-01:1.3959586974819540e+00:3.0099435680838671e-01:2.1145451464428242e+00:5.0063859191231866e-02:2.6124315902150741e+00:2.7502631326399479e-01:3.5430320344543422e+00:4.8937591748843928e-01:3.9986144613506625e+00 + CVs 20 + 1.5881322911099838e-01 4.0996157096192165e-01 9.9272949760371487e-02 + 2.0778318510948657e-01 7.5147978914134705e-01 1.4434546817615224e-01 + 2.1211749486609394e-01 1.0682905004097811e+00 1.5596257208569597e-01 + 2.0463309936281759e-01 1.3610467340686729e+00 1.4877181734483808e-01 + 1.8520653680083154e-01 1.6100704824145629e+00 1.3014671998609317e-01 + 1.6363420204529378e-01 1.7964376653469580e+00 1.1930563061971378e-01 + 1.5606769063370751e-01 1.9291232093874109e+00 1.3954117073221106e-01 + 1.5653380570608333e-01 2.0526053381333149e+00 1.8617161217705169e-01 + 1.2756727896234898e-01 2.1778590541478797e+00 2.1566175392921494e-01 + 6.0866034475010711e-02 2.2565351464865211e+00 2.0307897500761818e-01 + -1.2323096054861260e-02 2.2649709213229450e+00 1.6428166803199462e-01 + -6.3397233659428842e-02 2.2231716821720631e+00 1.2071231132110027e-01 + -7.0935377592057036e-02 2.1681398344341165e+00 8.1584281243842427e-02 + -1.7613898776221437e-02 2.1465292127437485e+00 3.3572244825486042e-02 + 1.0257933996520630e-01 2.2002137942659914e+00 -7.3776015201310274e-02 + 2.6886389297613222e-01 2.2656121681334707e+00 -2.7954295140833529e-01 + 4.6443018663159297e-01 2.2033567511788803e+00 -5.1553515742491740e-01 + 6.4404761110891928e-01 1.9872314253030965e+00 -6.1303734277325717e-01 + 6.1998389819505995e-01 1.9426116596538128e+00 -2.9927092491810925e-01 + id 11636 + loc 2.2475700080394745e-01 9.3404030799865723e-01 1070 + blend 0.0000000000000000e+00 + interp 3.0486623740334490e-01:2.8502654741602745e-01:1.7176279385687221e-02:2.9537760109964972e-01:9.6243911383161407e-01:2.6945474723051310e-01:1.9949315633865563e+00:3.0486318874097090e-01:3.1300467635909071e+00 + CVs 20 + -2.4972452274972784e-01 4.6270177478038466e-01 2.9317821097130037e-01 + -4.4703162015867898e-01 8.4809267070104200e-01 5.1028434605749839e-01 + -5.9603086494690283e-01 1.1991352405530100e+00 7.1884675982821045e-01 + -7.3057023817168232e-01 1.5255656230346135e+00 8.9253837193111563e-01 + -8.7189541482601363e-01 1.8040615525888253e+00 9.7334673582301501e-01 + -1.0151008924712690e+00 2.0194654956819065e+00 9.5569715624497920e-01 + -1.1241317073077319e+00 2.1575902441144543e+00 8.6724526504431898e-01 + -1.1219640655277274e+00 2.2092344562595301e+00 7.8036005720749591e-01 + -9.9780749357138054e-01 2.2255999134002753e+00 8.3092594551433474e-01 + -9.1201132431718657e-01 2.2767499458038776e+00 9.6778238638010050e-01 + -8.6520676877928648e-01 2.3186975354245352e+00 1.0094087711011910e+00 + -7.9033651349909118e-01 2.3199617040482261e+00 9.7542037080436295e-01 + -6.6613616700262746e-01 2.2671743644857223e+00 9.0992529702770353e-01 + -4.6260925242616496e-01 2.1229197924233194e+00 8.3794789448792151e-01 + -1.8145446727963838e-01 1.8673312267078601e+00 7.6272022831412134e-01 + 1.2027061176252790e-01 1.5423356066750815e+00 6.3283158729335998e-01 + 3.7020802339310627e-01 1.2422722924699907e+00 3.9973874697893214e-01 + 5.2283825732960798e-01 1.0757723841766449e+00 6.9748926749916729e-02 + 5.4666369992252639e-01 1.1057575029716795e+00 -1.0225494993268242e-01 + id 11637 + loc 9.0519732236862183e-01 5.5122756958007813e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2202199001339652e-01:2.5330241600939774e-01:2.8361889977861166e-01:2.8780587972222121e-01:1.0855769682872514e+00:4.2201776979349642e-01:1.9864192484742418e+00:2.9649725278891981e-01:2.9307829922146826e+00:3.3022362143100120e-01:3.5417050174762594e+00 + CVs 20 + -2.1954731920072398e-01 2.3705445411579545e-01 1.5322631371717721e-01 + -4.4725308714465628e-01 4.5960455535776523e-01 2.8540690646177791e-01 + -6.8651869410409894e-01 6.7092216152596162e-01 4.0238882640868623e-01 + -9.4140522413326999e-01 8.7244221903396801e-01 5.0270806867765716e-01 + -1.2165738793266208e+00 1.0609264777822069e+00 5.7476895219365520e-01 + -1.5159342943853800e+00 1.2308979224949095e+00 6.0592355807718223e-01 + -1.8395368768865072e+00 1.3723642692879854e+00 5.8282628425713900e-01 + -2.1781174140628741e+00 1.4718064180547019e+00 4.9489866538866945e-01 + -2.5062971029845142e+00 1.5183161488058203e+00 3.4325147647117871e-01 + -2.7942051340005563e+00 1.5119541951209894e+00 1.4557230002646937e-01 + -3.0318714380692624e+00 1.4635216594476514e+00 -7.3783124605267036e-02 + -3.2276334697729427e+00 1.3828180229037101e+00 -2.9618312698298477e-01 + -3.3916598149184352e+00 1.2740182557405044e+00 -5.0838440711106847e-01 + -3.5300689617586860e+00 1.1412580204007461e+00 -6.9919705202321725e-01 + -3.6538649493876321e+00 9.8620023704471416e-01 -8.5455496076822723e-01 + -3.7882126034190255e+00 7.9752727992548555e-01 -9.5226100346076425e-01 + -3.9597556289818456e+00 5.9363401102951607e-01 -9.7689955241923321e-01 + -4.2058445113074372e+00 4.0239622518525631e-01 -9.2178444702609519e-01 + -4.5758750858170281e+00 1.9649768119946320e-01 -7.6140401313684358e-01 + id 11638 + loc 3.9604330062866211e-01 4.1774019598960876e-02 1076 + blend 0.0000000000000000e+00 + interp 4.4459850908633025e-01:2.0865915269737745e-01:3.1667472574101285e-01:3.0374963448756764e-01:1.3081540416051578e+00:3.6922700676051590e-01:2.0145818016439825e+00:4.4459406310123939e-01:2.7527445635664267e+00:3.1888289028831229e-01:3.0453922497214840e+00:3.9515536798930184e-01:3.7428581494218038e+00 + CVs 20 + -3.7308004812330584e-02 4.1808430063079388e-01 -2.2339252727755016e-01 + -1.2780886887221785e-01 8.1260415404421249e-01 -4.6368269877439983e-01 + -2.6809014733760639e-01 1.1860406578415092e+00 -7.1233853664439351e-01 + -4.6892540698503432e-01 1.5333747748567661e+00 -9.5928869375470061e-01 + -7.3137253558671000e-01 1.8351762189488801e+00 -1.1943107881787298e+00 + -1.0343804786302879e+00 2.0684405535473154e+00 -1.4186955786832016e+00 + -1.3545358181537659e+00 2.2239377424612128e+00 -1.6427841196777586e+00 + -1.6786688476038705e+00 2.3029223615947196e+00 -1.8729546081452595e+00 + -1.9950638421964126e+00 2.3023452577935091e+00 -2.1062886266849032e+00 + -2.2811450420291983e+00 2.2098199147422077e+00 -2.3272719445189676e+00 + -2.4997069899600723e+00 2.0144320264591284e+00 -2.4995129480030891e+00 + -2.6294792986602205e+00 1.7307024127760933e+00 -2.5675629720661535e+00 + -2.6891361008888097e+00 1.4113925167758468e+00 -2.4983967133403677e+00 + -2.7136430369870315e+00 1.1006461655318827e+00 -2.3204012626129118e+00 + -2.7176253765951355e+00 8.2167500000316585e-01 -2.0468665941870512e+00 + -2.6993995447066923e+00 7.1740900959822884e-01 -1.6562724719932134e+00 + -2.7030347727446138e+00 1.0853315473290868e+00 -1.3295486115253483e+00 + -2.7790492743932522e+00 1.5692682489334939e+00 -1.3002502089610197e+00 + -2.8194954274340800e+00 1.7643719890077212e+00 -9.0872942727330130e-01 + id 11639 + loc 5.9092384576797485e-01 4.2106144130229950e-02 410 + blend 0.0000000000000000e+00 + interp 4.6093188095191318e-01:4.3989179276012541e-01:2.0174478974390320e-01:2.9062879989832041e-01:9.0039175740713295e-01:4.6092727163310365e-01:1.4750569967130311e+00:2.2787633613647010e-01:2.0349078842170667e+00:4.2090647643192924e-01:2.4240690428904434e+00:4.2413991162240078e-01:3.1626799324662866e+00:3.5539110736760504e-01:3.8233163471156977e+00 + CVs 20 + -2.9748339550826586e-01 2.6702829810925760e-01 1.0893830619658898e-01 + -5.6921002859785108e-01 5.2346116481609106e-01 2.3053240555601678e-01 + -8.3487701003744186e-01 7.8446167113132448e-01 3.5011189015674227e-01 + -1.0946369014338329e+00 1.0433633520014494e+00 4.6529118805713443e-01 + -1.3385746980841366e+00 1.2807177114911192e+00 5.7502589720916486e-01 + -1.5841886567703427e+00 1.4711698460539848e+00 6.7863509263313171e-01 + -1.8423433098706239e+00 1.5937900409589691e+00 8.2298099561972382e-01 + -2.0776434456410930e+00 1.6520928804311141e+00 1.0418370827051480e+00 + -2.2688445772858894e+00 1.6551996654888379e+00 1.3170462869644335e+00 + -2.4292061361293076e+00 1.5974283857995888e+00 1.6162523696833659e+00 + -2.5738804174389887e+00 1.4463739310235546e+00 1.8992396283385751e+00 + -2.7002942142126267e+00 1.1502527849144295e+00 2.1059582623105944e+00 + -2.8061578599079278e+00 6.8995798298854882e-01 2.2257173358325519e+00 + -2.9177234036150321e+00 7.9708423387894412e-02 2.3423660940850821e+00 + -3.0743419916844439e+00 -6.3534703668622938e-01 2.5762272584007619e+00 + -3.3050425781752217e+00 -1.3714175125403638e+00 3.0013334466578923e+00 + -3.6323672947628176e+00 -2.0633342804978452e+00 3.5791032892321395e+00 + -4.0718092059188749e+00 -2.7125336188900078e+00 4.1854457311091640e+00 + -4.5303430424017224e+00 -3.3221451886959463e+00 4.6853519473196963e+00 + id 11640 + loc 7.2356933355331421e-01 8.9485359191894531e-01 1054 + blend 0.0000000000000000e+00 + interp 2.7333231759722260e-01:2.3649555021584481e-01:2.1251465848556828e-01:2.6128364690700967e-01:1.3575616396692292e+00:2.4187922432654743e-01:2.4704636911468345e+00:2.3691564720858430e-01:3.0014043337974630e+00:2.7332958427404663e-01:3.8718059511135889e+00 + CVs 20 + 4.8206868915184387e-01 4.0997881436209527e-01 -2.1437468708473123e-01 + 9.0002062308998632e-01 8.4113483838355274e-01 -3.5722649098471093e-01 + 1.2562471648118201e+00 1.2921416614873549e+00 -4.2879519322117621e-01 + 1.5995457710735996e+00 1.6803077694525652e+00 -4.4427317974541847e-01 + 1.9697660878736436e+00 1.9228957880439344e+00 -4.3255427505531319e-01 + 2.3642039350084545e+00 2.0051225982885383e+00 -4.1310980938800457e-01 + 2.7663445697094025e+00 1.9363737324337995e+00 -3.8284118670561340e-01 + 3.1633812581447693e+00 1.7184419091151197e+00 -3.1636337128028291e-01 + 3.5231478851174822e+00 1.3636598370954327e+00 -1.7288553810164142e-01 + 3.8188771221808775e+00 9.4558244074236564e-01 9.5707769686310673e-02 + 4.0605709904207306e+00 6.0523845248202834e-01 5.0243369079156475e-01 + 4.2961793828852723e+00 4.5516367685931602e-01 9.4566359227611707e-01 + 4.5986558634689372e+00 4.6601948818662797e-01 1.2930436759908492e+00 + 4.9831617075741086e+00 5.5533767229196784e-01 1.5105924992987805e+00 + 5.4287387258522415e+00 6.6201111416210456e-01 1.6628553696590724e+00 + 5.9181811324325100e+00 7.4568205317271152e-01 1.7906740150981260e+00 + 6.3539990553274839e+00 7.6744717844225452e-01 1.9164347347668056e+00 + 6.6260077841810272e+00 7.6348067239472717e-01 2.0270461733908416e+00 + 6.8479362032336599e+00 6.5594688989347083e-01 2.1561629431928537e+00 + id 11641 + loc 1.6374287009239197e-01 3.3213704824447632e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0110357206657204e-01:3.9467767083464800e-01:2.3870686941806618e-01:2.8990592057323150e-01:9.8856368607464407e-01:4.0109956103085137e-01:1.3840861872337218e+00:2.9418815784837726e-01:1.9941643063511227e+00:2.9544940253400498e-01:2.9954597173636044e+00:2.9374784437577861e-01:3.9455542579453207e+00 + CVs 20 + -4.1885003063345375e-02 3.8312958007822440e-01 -1.4759244492672122e-01 + -1.2295385735904221e-01 7.4254609469625454e-01 -3.0024523291638372e-01 + -2.3839914090219722e-01 1.0570563827789332e+00 -4.7306435149797826e-01 + -3.8388550383937670e-01 1.3107343893485937e+00 -6.6902370743678841e-01 + -5.4865193540242840e-01 1.4879394205157999e+00 -8.8199142151933341e-01 + -7.1399879184729631e-01 1.5792882048677903e+00 -1.0998815046768233e+00 + -8.6074334792622209e-01 1.5886091142980443e+00 -1.3065781359691391e+00 + -9.7773656210105819e-01 1.5318148337256892e+00 -1.4888110646976598e+00 + -1.0655378782078020e+00 1.4285980687190101e+00 -1.6415924444770849e+00 + -1.1360170452786147e+00 1.2922761551063502e+00 -1.7722847364724272e+00 + -1.2011806538248719e+00 1.1262651531783709e+00 -1.8898986328905194e+00 + -1.2633224278567128e+00 9.3574792884969837e-01 -1.9894048830925977e+00 + -1.3197439560325688e+00 7.3241369548323243e-01 -2.0587629524412114e+00 + -1.3699494833315748e+00 5.2445283528832498e-01 -2.0915417727307712e+00 + -1.4147314929787675e+00 3.1583111174245637e-01 -2.0867465039133459e+00 + -1.4644201601345657e+00 9.0715126363871468e-02 -2.0346363753438830e+00 + -1.5633946770588756e+00 -2.0059483956496726e-01 -1.8644814656974504e+00 + -1.7555530765110037e+00 -4.9468201941719081e-01 -1.4958058648433354e+00 + -1.8478587526007071e+00 -5.1121176946157754e-01 -1.1978637224795552e+00 + id 11642 + loc 1.5483318269252777e-01 7.8100138902664185e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8134093068649891e-01:3.5543654895932902e-01:4.6715626802572385e-01:3.5033451171826657e-01:1.3996899330862949e+00:2.6207922801677397e-01:2.0416833275448525e+00:3.0944777432983128e-01:2.8968962190252885e+00:4.4223944611179106e-01:3.1923846324942549e+00:4.8133611727719205e-01:3.9065884751699942e+00 + CVs 20 + -2.4258341558449653e-01 2.4665751038507303e-01 4.4429160884317959e-01 + -4.8094672093624141e-01 4.0939211033661904e-01 8.0047156268840103e-01 + -7.1065924037636685e-01 5.4739727735329657e-01 1.1385735127912395e+00 + -9.2428273835723485e-01 6.8912298441507902e-01 1.4835611809432105e+00 + -1.1307262629264265e+00 8.4151641966601831e-01 1.8143821371585589e+00 + -1.3405920296982794e+00 1.0062505224171163e+00 2.1118104748050901e+00 + -1.5631820116831954e+00 1.1797436730379349e+00 2.3665825417548643e+00 + -1.8094700032948858e+00 1.3594985234814190e+00 2.5813296342309213e+00 + -2.0971778635814733e+00 1.5440832917243530e+00 2.7341898729026832e+00 + -2.3907521476053724e+00 1.7021612952575731e+00 2.7515190263485456e+00 + -2.5885240393458742e+00 1.8244974327835402e+00 2.6522498479799057e+00 + -2.6654493244844679e+00 1.9637179235856466e+00 2.5079248070243110e+00 + -2.6638457484024656e+00 2.0670347451270481e+00 2.2944899270303285e+00 + -2.6179632107271855e+00 1.9507517226178184e+00 2.0188582400473174e+00 + -2.5236955332959612e+00 1.6038935065509057e+00 1.7418735925843578e+00 + -2.3582266360661150e+00 1.1823509894012592e+00 1.4563674514448985e+00 + -2.1258283153220914e+00 8.2746050068074706e-01 1.1405273846634940e+00 + -1.8686425384049270e+00 6.3166007021859549e-01 8.0621887790629110e-01 + -1.6488507214772961e+00 6.9666756557960485e-01 4.9369435840163234e-01 + id 11643 + loc 7.0489722490310669e-01 9.4605892896652222e-02 1075 + blend 0.0000000000000000e+00 + interp 4.9172787177697541e-01:4.9172295449825765e-01:2.0525702045528349e-01:4.3030521689627921e-01:7.2103632733702727e-01:2.9667041789083237e-01:1.0642013727088018e+00:3.1521231485793411e-01:2.0687182125187231e+00:3.1743607205352092e-01:2.6596299040023021e+00:2.4455173421758164e-01:3.4013924407391336e+00:4.1279406303784405e-01:3.9732269337020831e+00 + CVs 20 + -2.0384567064626338e-02 2.5295984261507365e-01 1.7658121920427355e-01 + -1.9754772447725000e-02 5.2582015728342901e-01 3.7716003440975421e-01 + -1.1630376369953621e-02 8.0931481473998623e-01 5.7262109577507259e-01 + -2.8538513844013957e-02 1.0751393146221995e+00 7.6258744606630113e-01 + -1.0423368970958435e-01 1.2791935007712216e+00 9.5752328070518078e-01 + -2.3954866795252305e-01 1.3826027155551299e+00 1.1456797203216733e+00 + -4.0816901632989200e-01 1.3733235833142383e+00 1.2991129312384433e+00 + -5.9586812843231463e-01 1.2688091216236708e+00 1.3968109594650586e+00 + -8.0049532859146222e-01 1.0873846841748436e+00 1.4214463600475524e+00 + -1.0033519005528493e+00 8.4635951262050568e-01 1.3615612725060793e+00 + -1.1648902686070712e+00 5.7406701485262779e-01 1.2233109271661138e+00 + -1.2447594782712004e+00 3.0907820214252590e-01 1.0369786004241075e+00 + -1.2571318076123643e+00 6.9879743212229395e-02 8.3396338396769532e-01 + -1.2744854183148449e+00 -1.7488784604373880e-01 5.9532648309948444e-01 + -1.3748456846431956e+00 -4.5843288671703897e-01 2.9034597459954814e-01 + -1.6673233348270533e+00 -7.7371776503885792e-01 -8.9201433101691124e-02 + -2.2880711570171504e+00 -9.8567257204430014e-01 -4.7807945730088491e-01 + -2.9477396395369437e+00 -9.0583945134977562e-01 -6.4990730810173636e-01 + -3.1624916271677406e+00 -7.8670769299409837e-01 -6.4038287057141030e-01 + id 11644 + loc 7.8958028554916382e-01 9.6317869424819946e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4310319225512351e-01:3.5620677856616628e-01:6.4287967464782936e-01:3.0452164598649795e-01:1.1366696092596758e+00:3.5921411711099588e-01:1.7174859564512051e+00:4.4309876122320097e-01:2.0037907051662818e+00:3.7931139998420355e-01:2.9316094345401620e+00:3.3290329453977829e-01:3.2566051891591452e+00:3.1506085929094702e-01:3.9963302662163489e+00 + CVs 20 + -2.2071287651818794e-01 4.2295133734181500e-01 4.2899429645669590e-02 + -3.9214883741653495e-01 8.3282341419492678e-01 1.1151154786325129e-01 + -5.1984085449951312e-01 1.2339767589053738e+00 2.0520118623236205e-01 + -6.6687065422030722e-01 1.6092013345565674e+00 2.4002051526073509e-01 + -8.6749006999779932e-01 1.9059340424319404e+00 1.3718673783459612e-01 + -1.0882343680980735e+00 2.0814094559726728e+00 -9.2025272026479366e-02 + -1.2578107480968352e+00 2.1217747842222980e+00 -3.9776671843413469e-01 + -1.2812176227416399e+00 2.0437718846354294e+00 -7.0968154371414294e-01 + -1.1309056918677116e+00 1.9070895555418084e+00 -9.3959873808406846e-01 + -9.0719864848289822e-01 1.7586165505493758e+00 -1.0791770517327846e+00 + -6.7293242689610855e-01 1.5785098856901574e+00 -1.1770831396839792e+00 + -4.2252261329863294e-01 1.3443635762364405e+00 -1.2006577624535928e+00 + -1.8167044087580941e-01 1.0654950152235119e+00 -1.1264312228595463e+00 + 2.2217855208414003e-02 7.3617678845084988e-01 -1.0761650061825334e+00 + 1.9015128319799315e-01 3.3265356890143349e-01 -1.2102810994673117e+00 + 2.7821281486314747e-01 -5.3465010208869290e-02 -1.6148557595061392e+00 + 2.0876097896537968e-01 -1.6082850849386321e-01 -2.3196024540464562e+00 + -7.7691881011142161e-02 2.3875792520931882e-01 -3.0248800114230239e+00 + -9.0319192679549243e-02 1.5331362937542847e-01 -3.3482518395574985e+00 + id 11645 + loc 9.9444830417633057e-01 2.4822390079498291e-01 1087 + blend 0.0000000000000000e+00 + interp 7.3763085316947230e-01:3.0185866162017022e-01:9.6076316390207206e-01:2.4769340904277895e-01:1.5820867584050013e+00:4.1333397701121738e-01:1.9782494802252730e+00:7.3762347686094065e-01:3.8374163018184477e+00:3.7242214744263363e-01:3.8981287506417592e+00 + CVs 20 + 3.7015895783263342e-01 3.6183848778317218e-01 -5.3728978604799216e-01 + 7.2971413999960921e-01 6.4227219544512093e-01 -8.9001909414053204e-01 + 1.0957302092594985e+00 8.8309068818158631e-01 -1.1592129319248434e+00 + 1.4784656310680835e+00 1.0999530433685800e+00 -1.3700038156090331e+00 + 1.8724371204927466e+00 1.2825919273098947e+00 -1.5098452580684076e+00 + 2.2661458641293319e+00 1.4200196916171413e+00 -1.5705136706644651e+00 + 2.6417743001621088e+00 1.5023519376177723e+00 -1.5484159043316668e+00 + 2.9765589756224111e+00 1.5239999432448683e+00 -1.4482178969164659e+00 + 3.2478792334300626e+00 1.4850509185886387e+00 -1.2891882700716717e+00 + 3.4510527522036227e+00 1.3961074107536087e+00 -1.1049732845192495e+00 + 3.6079243159410899e+00 1.2729419113056082e+00 -9.2056853865652777e-01 + 3.7424025970505808e+00 1.1237603634704372e+00 -7.4221582008209541e-01 + 3.8705942135972591e+00 9.4899710866111664e-01 -5.7090667742474499e-01 + 4.0099308612415587e+00 7.4212494709351129e-01 -4.1133968092477241e-01 + 4.1746564716147407e+00 4.9410604091893917e-01 -2.7187139947317773e-01 + 4.3713625488553589e+00 2.0931243763315360e-01 -1.6112466725394070e-01 + 4.5956625887101579e+00 -8.8896002126709769e-02 -8.9433207192595759e-02 + 4.8316033835550218e+00 -3.7027260951574448e-01 -5.9084608419532114e-02 + 5.0515510137240645e+00 -5.3413029619486874e-01 -6.1123434355743800e-02 + id 11646 + loc 5.6852674484252930e-01 1.7024780809879303e-01 1048 + blend 0.0000000000000000e+00 + interp 3.1383858731963793e-01:2.2508909056305271e-01:8.4544655004295310e-02:2.9635290497483219e-01:9.1374054154624917e-01:3.1383544893376475e-01:1.3448297188410865e+00:2.7119502538580442e-01:2.5332462719319011e+00:2.6600504112132356e-01:3.0293417519377419e+00 + CVs 20 + -1.1952852082042936e-01 3.7221746536900163e-01 3.3815607959900496e-01 + -2.3996101268530740e-01 7.4487881234026243e-01 6.5331024501773838e-01 + -3.9264950292549433e-01 1.1126602392730034e+00 9.1939134259817601e-01 + -6.0063188304604731e-01 1.4573748697536153e+00 1.1242878743317055e+00 + -8.6020424179672239e-01 1.7470462241412175e+00 1.2644806208120953e+00 + -1.1021126104550276e+00 1.9469838282135901e+00 1.3072754574155203e+00 + -1.3259706019475122e+00 2.0788270918086438e+00 1.3516264122755290e+00 + -1.5269171449535563e+00 2.1279308287542795e+00 1.4799484733391290e+00 + -1.7084089814486929e+00 2.0142406069276295e+00 1.7097255909300970e+00 + -1.8592498591362845e+00 1.7120312666608644e+00 1.9897578305757357e+00 + -1.9996993028405237e+00 1.2691843643991514e+00 2.2718425970643601e+00 + -2.1663855594635555e+00 8.2133518947651019e-01 2.5197546693099220e+00 + -2.3297162013671278e+00 5.2331194390405744e-01 2.7136017522328717e+00 + -2.4624745249227034e+00 3.7626760836689488e-01 2.8872041986657146e+00 + -2.6022690683283334e+00 3.2561152930728832e-01 3.1691393250463302e+00 + -2.7511655194338038e+00 3.3677403286961283e-01 3.5973494633606071e+00 + -2.9092940377346199e+00 3.2021069827044557e-01 4.1354192283197904e+00 + -3.0970598836180434e+00 1.6482564095846852e-01 4.6574981223867997e+00 + -3.3301941467017895e+00 -1.6325885027727360e-01 5.0221439653404110e+00 + id 11647 + loc 7.4963021278381348e-01 3.6015486717224121e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0011167764302433e-01:4.3108612991181450e-01:2.5066312748928643e-01:4.1433131232539355e-01:8.9003783672143610e-01:2.9661716096715562e-01:1.8843808084289093e+00:4.4669789151445100e-01:2.0788456524049184e+00:4.0751767060159133e-01:2.9906834010435963e+00:5.0010667652624796e-01:3.3281265936284932e+00:4.4668554288468137e-01:3.9857629364003082e+00 + CVs 20 + 1.7434317325520776e-01 3.3105554973046136e-01 -1.0474137698047577e-01 + 3.3029444615410386e-01 6.1256571808945359e-01 -1.7682956403266220e-01 + 4.8277467540948804e-01 8.6180003574514807e-01 -2.3651958457712999e-01 + 6.3652032958174787e-01 1.0880402250374326e+00 -2.9638324453310649e-01 + 7.9527870027359049e-01 1.3003845948551451e+00 -3.5467033100355494e-01 + 9.6767054956744492e-01 1.5080952648458683e+00 -4.0709149728173671e-01 + 1.1642591525243002e+00 1.7161982881605731e+00 -4.4522775200767190e-01 + 1.3930427366216354e+00 1.9238868147490695e+00 -4.5571149354848584e-01 + 1.6533571353126588e+00 2.1275220092925951e+00 -4.1842605386116671e-01 + 1.9323004596919542e+00 2.3200654944125909e+00 -3.0630852262227959e-01 + 2.2156339578715207e+00 2.4929007653630464e+00 -9.9990079546572352e-02 + 2.5063113097181522e+00 2.6356252126114774e+00 2.0404139927290110e-01 + 2.8201386016751631e+00 2.7254984164429810e+00 5.9930318637019975e-01 + 3.1626844079123986e+00 2.7229314511253575e+00 1.0733012959326353e+00 + 3.5227892127449580e+00 2.5841248822794283e+00 1.6115022338058897e+00 + 3.8701223307084476e+00 2.2881069686579441e+00 2.1357535069711875e+00 + 4.1305131311104137e+00 1.8900433575504558e+00 2.5399160956589255e+00 + 4.2950083850423582e+00 1.4752048089834129e+00 2.8062573611701049e+00 + 4.6929000780534000e+00 1.4567483177684801e+00 2.7018623478675377e+00 + id 11648 + loc 6.6187715530395508e-01 2.1246625483036041e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9358354859124917e-01:2.9629539034564417e-01:6.0913658090982259e-01:3.9357961275576325e-01:1.4134905563793940e+00:3.5532587941917848e-01:1.9828869028510721e+00:2.8363618984478861e-01:2.4236405230446603e+00:3.0032987995866584e-01:3.2453991249748233e+00:3.6595879670901599e-01:3.9967059321148111e+00 + CVs 20 + -8.4558104449695845e-02 3.1094128568701956e-01 1.5226006651171989e-01 + -2.0185643377409768e-01 6.3688535654860834e-01 3.2497845770099792e-01 + -3.5184428138655216e-01 9.6959961820206553e-01 4.8988218998563404e-01 + -5.3033061431372186e-01 1.3018444185734264e+00 6.3992095763934786e-01 + -7.3261764945928642e-01 1.6282721107013967e+00 7.8960006807304706e-01 + -9.5285232968319322e-01 1.9415551573596859e+00 9.6827925474289800e-01 + -1.1800213206864052e+00 2.2290640954384879e+00 1.2037859218510161e+00 + -1.3977119117623837e+00 2.4730444265434781e+00 1.5110082618727729e+00 + -1.5891127824068534e+00 2.6505644196686506e+00 1.8915924232627770e+00 + -1.7430041702662580e+00 2.7345032820785100e+00 2.3314087202301406e+00 + -1.8590282068679533e+00 2.7043601599212939e+00 2.7954812288585407e+00 + -1.9529278204372535e+00 2.5667739461001555e+00 3.2331574514899888e+00 + -2.0505033590192765e+00 2.3571686492857515e+00 3.6059990916664928e+00 + -2.1712172370550493e+00 2.1168677321555784e+00 3.9019964281034460e+00 + -2.3195022115982691e+00 1.8743579039905383e+00 4.1293481771982341e+00 + -2.4871409601933276e+00 1.6322222017549850e+00 4.3093243324022703e+00 + -2.6646989515774666e+00 1.3809860461551751e+00 4.4612075144164818e+00 + -2.8424511914590127e+00 1.1384332303477580e+00 4.5967784123603508e+00 + -2.9995405666385833e+00 9.3953391114954088e-01 4.7393017648040816e+00 + id 11649 + loc 8.9000052213668823e-01 1.6077151894569397e-01 1090 + blend 0.0000000000000000e+00 + interp 4.5359968047763621e-01:3.9836287352137562e-01:9.5960576443156365e-02:4.2224249024485139e-01:9.9514659086137192e-01:3.5518716548497953e-01:1.8347945969357904e+00:4.5359514448083144e-01:2.4291094063259981e+00:2.9116832686196248e-01:2.9763261671878012e+00:3.8655410844511934e-01:3.8054184132430948e+00 + CVs 20 + -4.7104413810814733e-02 4.0655414267259571e-01 -7.6314675673792978e-02 + -3.5624842262299422e-02 7.6511251383689971e-01 -8.3350182712127824e-02 + 4.7910612818950482e-03 1.0937094273225907e+00 -4.2996438315227925e-02 + 5.7453792548740223e-02 1.3912365129268358e+00 3.4159771323805543e-02 + 1.1857611255980649e-01 1.6407115527829501e+00 1.4565343103047523e-01 + 1.7689927868107908e-01 1.8264299945101958e+00 2.8239800539057824e-01 + 2.1580936246319904e-01 1.9424483214119674e+00 4.2867968892815789e-01 + 2.2315248318526149e-01 2.0006534064866397e+00 5.6911151731721887e-01 + 2.0315762985178598e-01 2.0235544683635003e+00 7.0341235101062127e-01 + 1.7761689058886976e-01 2.0193371312504720e+00 8.5672830598683403e-01 + 1.6509900407698985e-01 1.9706448062268098e+00 1.0543817633466397e+00 + 1.7076830920615327e-01 1.8577784539295275e+00 1.2930213368796251e+00 + 1.9915398933845962e-01 1.6644688140931745e+00 1.5543777499786930e+00 + 2.6398922730146845e-01 1.3605655022278487e+00 1.8163826757460675e+00 + 3.8576783287446170e-01 9.0477775602142918e-01 2.0290685937716026e+00 + 5.7614716406582012e-01 2.8958025646100050e-01 2.0898493906271565e+00 + 8.5256701510941735e-01 -4.3271271615462514e-01 1.8855203964482656e+00 + 1.2585919220246395e+00 -1.1295094984942067e+00 1.3562254568348222e+00 + 1.4053238770573848e+00 -1.3895043342011728e+00 1.1873924682630852e+00 + id 11650 + loc 9.9429346621036530e-02 3.8210308551788330e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5215883608640917e-01:2.6106846237994386e-01:1.7279916959237474e-03:4.5215431449804833e-01:4.9864393767799686e-01:3.5997750597807909e-01:1.0701575807081911e+00:4.5053252129686233e-01:1.9075453756632130e+00:2.4655357804323133e-01:2.2951205208541783e+00:2.6976008754198111e-01:3.0412814325106003e+00 + CVs 20 + -2.0880569473708005e-02 3.6798073985541191e-01 -7.9715827344993481e-02 + -8.7839085018036528e-02 6.9321058404412117e-01 -2.1065551979183750e-01 + -1.8106002709995300e-01 9.7971702023376406e-01 -3.5660828198551914e-01 + -2.9174166298670778e-01 1.2242846301482704e+00 -4.9976005286425440e-01 + -4.1612086764405387e-01 1.4183697142840588e+00 -6.3490029623190436e-01 + -5.4284808538982776e-01 1.5551621609576629e+00 -7.5568522220397738e-01 + -6.5467529689016501e-01 1.6338820279734492e+00 -8.5708945674408088e-01 + -7.3161623279074894e-01 1.6638694715737810e+00 -9.3586494019936795e-01 + -7.5577628221751625e-01 1.6672281724249984e+00 -9.9112296430374425e-01 + -7.2707016831513482e-01 1.6730295700980882e+00 -1.0286226365173918e+00 + -6.6752625579041802e-01 1.6973296617117550e+00 -1.0601277534470537e+00 + -6.0450982454113933e-01 1.7273665185318772e+00 -1.0975328402852618e+00 + -5.5187431108580265e-01 1.7211014122187402e+00 -1.1513887693584184e+00 + -5.0675081470226147e-01 1.6227100991769117e+00 -1.2359976283604124e+00 + -4.6812057096586124e-01 1.4072861811557169e+00 -1.3526907201001979e+00 + -4.4868935535636378e-01 1.0874905428432211e+00 -1.4678330478217536e+00 + -4.5700117773986115e-01 6.7547919886402141e-01 -1.5155740295153273e+00 + -4.6662779172660562e-01 2.2582807995909371e-01 -1.3983661285887299e+00 + -3.8675096965027411e-01 -4.0567195086133490e-02 -1.1118663450149731e+00 + id 11651 + loc 6.6215109825134277e-01 4.1597354412078857e-01 1054 + blend 0.0000000000000000e+00 + interp 3.5123911762540017e-01:2.5986416384054806e-01:2.3869472863377095e-01:3.3180786713279292e-01:9.9999991015431333e-01:2.9063099911861995e-01:1.6801119338566148e+00:3.5123560523422392e-01:2.5622960972059001e+00:2.7764497698866186e-01:3.5272624540032478e+00 + CVs 20 + -2.1834192822442258e-01 3.7884350167857117e-01 2.3544230564588753e-01 + -4.4163792905744065e-01 7.6834244575096267e-01 4.0794243888960069e-01 + -6.4522904862195229e-01 1.1792068509099800e+00 5.0539292685990622e-01 + -8.4151948356606221e-01 1.5559765233161960e+00 5.4385216466212516e-01 + -1.0681491506728849e+00 1.8248462803404613e+00 5.6730268202819933e-01 + -1.3321937418351331e+00 1.9495820065458220e+00 6.1015758469096693e-01 + -1.6002078590497970e+00 1.9214059180073697e+00 6.7937611373507978e-01 + -1.8419706225512580e+00 1.7464840156571346e+00 7.5803126085827666e-01 + -2.0429621134554434e+00 1.4397664559594086e+00 8.0569796141148153e-01 + -2.2322963185212252e+00 1.0200598924560935e+00 7.6804051170239884e-01 + -2.4872324149700571e+00 5.2973893266043459e-01 5.8178974975707642e-01 + -2.9119214617697775e+00 6.1558390908645400e-02 2.5633096655917853e-01 + -3.6415148681358676e+00 -2.8170325950902914e-01 -2.3698952306706045e-02 + -4.5446001955742972e+00 -3.9194121965428524e-01 1.5624088502546894e-02 + -5.2415439156444830e+00 -3.8520141330866620e-01 2.5342883521328741e-01 + -5.7006419837116482e+00 -4.4362865847406663e-01 3.8576987108981581e-01 + -5.8348543885249002e+00 -6.1074570100639858e-01 1.7088779727845771e-01 + -5.5181780221715186e+00 -6.5807396742275770e-01 -3.1915792432974549e-01 + -5.8830976562367576e+00 -8.4738525243097773e-01 -4.8540257153419752e-01 + id 11652 + loc 8.2265788316726685e-01 6.2580847740173340e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0523684082229416e-01:2.9712923236188377e-01:1.8107837477626676e-03:3.1554519283304483e-01:7.5074753465015387e-01:3.6833085688913492e-01:1.1742365467705536e+00:3.0120036317977100e-01:2.0000277736230854e+00:4.0523278845388594e-01:2.7592544626132400e+00:3.3518644596568814e-01:3.2076034168308185e+00 + CVs 20 + -6.7653249485649741e-02 3.5657237943860348e-01 -1.4131508190617043e-01 + -7.4964234774984734e-02 7.0460887014739937e-01 -2.7535514685211365e-01 + -4.4761443836048131e-02 1.0512230830694547e+00 -4.1616563425816133e-01 + 1.0646396569310435e-02 1.4006292024281095e+00 -5.8379480974021924e-01 + 8.6797665013511160e-02 1.7415901508665383e+00 -7.9373716069539224e-01 + 1.7652598055259228e-01 2.0558684920955863e+00 -1.0446125599166820e+00 + 2.7862429462014304e-01 2.3293000719103825e+00 -1.3179527627913141e+00 + 3.9353725016405294e-01 2.5596598449328267e+00 -1.5939648994887143e+00 + 5.2262037696684416e-01 2.7591346486291082e+00 -1.8660235211789840e+00 + 6.8686711497036990e-01 2.9450775597637291e+00 -2.1424280959539543e+00 + 9.4411917042419424e-01 3.1234840386222840e+00 -2.4364170989489295e+00 + 1.3744745349127503e+00 3.2659018644751181e+00 -2.7744605287287238e+00 + 1.9493143992270694e+00 3.2510184536902367e+00 -3.1664051248425844e+00 + 2.4626615448181370e+00 2.9975306959192256e+00 -3.5161765593902214e+00 + 2.8414050885986057e+00 2.5531183260044248e+00 -3.7424486141392856e+00 + 3.2121257330201161e+00 1.8109277397176859e+00 -3.8315979080906084e+00 + 3.4136078020011058e+00 5.0123186285749921e-01 -3.7865662762893191e+00 + 2.9880220049678536e+00 -5.8999029259050517e-01 -3.6694009882190084e+00 + 2.6170339013051782e+00 -5.1873847904109049e-01 -3.5348307600202959e+00 + id 11653 + loc 4.7539860010147095e-01 9.4424903392791748e-02 410 + blend 0.0000000000000000e+00 + interp 5.0344426518217400e-01:4.2413991162240078e-01:1.5132278404682253e-01:5.0343923073952224e-01:9.4182161726189051e-01:4.9812126353071062e-01:1.6428269471069625e+00:3.0455045158326549e-01:2.0015359761239231e+00:3.4128069118347432e-01:2.8586301963005991e+00:2.8263876370366331e-01:3.6987444930265299e+00 + CVs 20 + -4.7415514100044076e-02 2.8018816005728636e-01 -3.7649117393333886e-01 + -1.3623026901941582e-01 5.6879455176862148e-01 -7.2538651724978020e-01 + -2.4073197013821909e-01 8.8607737990024993e-01 -1.0747884417532672e+00 + -3.6638217965762221e-01 1.2249669616514776e+00 -1.4285541454778881e+00 + -5.1838043178876347e-01 1.5422672868386134e+00 -1.7797339791716211e+00 + -7.0368411912876216e-01 1.7565362990064075e+00 -2.1459956740712780e+00 + -9.6969811271793815e-01 1.8174269666570564e+00 -2.5056617373609180e+00 + -1.3149292294287713e+00 1.7700085124537550e+00 -2.8282835927189014e+00 + -1.6844817471931828e+00 1.6212052416247220e+00 -3.1368062530504637e+00 + -2.0050231217585353e+00 1.3448521474336090e+00 -3.4380612170881726e+00 + -2.2363490460117226e+00 9.6951843256927450e-01 -3.7132767841623551e+00 + -2.4224909977890179e+00 5.8207156119640735e-01 -3.9624659972593852e+00 + -2.6225422541981187e+00 2.4737062105630248e-01 -4.2083610058423453e+00 + -2.8397478691327147e+00 -1.0784913377991812e-02 -4.4670597486246084e+00 + -3.0453324082508697e+00 -2.0091390190366165e-01 -4.7496278481871954e+00 + -3.2058206278712755e+00 -3.5634509881632281e-01 -5.0671404323720362e+00 + -3.3018671678890770e+00 -5.0683823214004597e-01 -5.4220076524688432e+00 + -3.3259616154523792e+00 -6.5248025862296766e-01 -5.7904092424130980e+00 + -3.3251409136424845e+00 -8.0919186088047734e-01 -6.1986491117334488e+00 + id 11654 + loc 7.1631664037704468e-01 2.8313028812408447e-01 1053 + blend 0.0000000000000000e+00 + interp 3.0882236547949898e-01:3.0881927725584418e-01:2.7178562234492742e-01:2.8309315700407101e-01:1.0011405876625545e+00:2.9558046142873123e-01:2.0194134267510107e+00:2.6658489426622212e-01:3.2047544430170172e+00 + CVs 20 + 2.1158787304541421e-01 3.8998129469090936e-01 -2.0256903497107484e-01 + 4.5417563430374946e-01 7.7011674722250134e-01 -3.6907482797365576e-01 + 7.3111118008903564e-01 1.1466419480128098e+00 -5.1479137263780705e-01 + 1.0536089269078213e+00 1.5092885407186438e+00 -6.4171477277741606e-01 + 1.4346443480763780e+00 1.8324348324489548e+00 -7.4390397415914622e-01 + 1.8780387940258501e+00 2.0811058379590452e+00 -8.1164056354346703e-01 + 2.3671533408598320e+00 2.2182377433900626e+00 -8.2588679464244574e-01 + 2.8586320230853781e+00 2.2211277961606459e+00 -7.5879132542809313e-01 + 3.2947363346939995e+00 2.0879003456566507e+00 -5.9221509026863617e-01 + 3.6065088108808911e+00 1.8279748610214370e+00 -3.2805379560977682e-01 + 3.7292109123917454e+00 1.4806137662496699e+00 5.5102000798604306e-03 + 3.6590711890350498e+00 1.1168507134639214e+00 3.5992376658195147e-01 + 3.4617156629652626e+00 8.4019996163965494e-01 6.9800812560792869e-01 + 3.2862814957737099e+00 7.4977163517056578e-01 1.0025180660189965e+00 + 3.2477759961938832e+00 8.7942131777544408e-01 1.2266821617892874e+00 + 3.3564424983075263e+00 1.2056260646140895e+00 1.2425801852596114e+00 + 3.5336825010760808e+00 1.5490234094925521e+00 9.6061138243588562e-01 + 3.6203824959018434e+00 1.6777526955550897e+00 6.9535059345605266e-01 + 3.5370005374075726e+00 1.7015063745779013e+00 9.6676829570592859e-01 + id 11655 + loc 3.8274374604225159e-01 6.1413817107677460e-02 1084 + blend 0.0000000000000000e+00 + interp 5.3780020082156865e-01:2.9764137678844071e-01:1.4268059500615571e-01:3.3728993604477658e-01:6.9879876355696979e-01:5.3779482281956048e-01:1.0524503511010126e+00:4.4689538145652158e-01:1.8985655460030753e+00:3.2570076528393926e-01:2.1684837503103189e+00:3.8324156859953734e-01:3.0371231317499205e+00:4.3767837777026730e-01:3.6458713615193803e+00 + CVs 20 + 2.5580111391196186e-01 3.2597033663119207e-01 2.2006278954684899e-01 + 4.7584587458218497e-01 5.8293641046405487e-01 4.0041659208925007e-01 + 7.0995678668539475e-01 8.0358361207659601e-01 5.3490417785266531e-01 + 9.6563355595417821e-01 1.0135587177876950e+00 6.4504823580412274e-01 + 1.2032521778667888e+00 1.2244304283183447e+00 7.6991831855112192e-01 + 1.3832233631884581e+00 1.4384125780615487e+00 9.4227091782597472e-01 + 1.4834563535049985e+00 1.6432995626674254e+00 1.1742847530883911e+00 + 1.4800542781523269e+00 1.8239751191618949e+00 1.4773878091196362e+00 + 1.3108151651863584e+00 1.9474260308432210e+00 1.8290755626061230e+00 + 9.8182265875542929e-01 1.9713231894948788e+00 2.0935523927349817e+00 + 6.1433172135293901e-01 1.9183768742141383e+00 2.1997942463280560e+00 + 2.4788886525296960e-01 1.8240077354092059e+00 2.1863278339306733e+00 + -1.0540806348152021e-01 1.6953397183079231e+00 2.0748685948895931e+00 + -3.6737692509416942e-01 1.5463985266293174e+00 1.8979295709169102e+00 + -4.6437597598881009e-01 1.4237060736167635e+00 1.7222554333623517e+00 + -3.9105993214345913e-01 1.3392146429595000e+00 1.5770207608938152e+00 + -1.6215879146639067e-01 1.2164500629873998e+00 1.4438319098954708e+00 + 2.0019478022792103e-01 8.6726078606183410e-01 1.2506033808168913e+00 + 3.2730619750454881e-02 8.5220957862119617e-01 1.2294106295007130e+00 + id 11656 + loc 5.4908597469329834e-01 5.0244277715682983e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5377542566130974e-01:2.6693156437300197e-01:8.8561489820695527e-01:2.5590086132744011e-01:1.3665451969926330e+00:3.1576310825041359e-01:2.3202120594686018e+00:4.5377088790705317e-01:3.0168544196065121e+00:4.1991122870514797e-01:3.4857783976380627e+00:2.5956788750897919e-01:3.9898288505546482e+00 + CVs 20 + 6.2259184008596244e-02 7.4174940394236721e-01 -3.3096771275384196e-01 + 2.1855384662553370e-01 1.5050937659934449e+00 -6.3166422839896919e-01 + 4.6881243628575575e-01 2.2630559724310055e+00 -8.5819661345346065e-01 + 7.9563087932503995e-01 2.9756197051951077e+00 -9.7211730129783813e-01 + 1.1881742459878950e+00 3.6205955963206149e+00 -9.3018549791029681e-01 + 1.6497058364933288e+00 4.1654344119115816e+00 -6.7026446624048375e-01 + 2.1513262387160430e+00 4.4878221875005293e+00 -1.3295127878671043e-01 + 2.5926153198161832e+00 4.4607772835521482e+00 6.4732420895159448e-01 + 2.8618239863413812e+00 4.0571158324716752e+00 1.5750471187035679e+00 + 2.8448463307065532e+00 3.3462993702487394e+00 2.5226090012352369e+00 + 2.4538004558781696e+00 2.5083503853473879e+00 3.3409018196244964e+00 + 1.6417729846576286e+00 1.6893204109605180e+00 3.8912580366384555e+00 + 5.2507255740763092e-01 9.5373039445106134e-01 4.1336038091611789e+00 + -6.6424815762306499e-01 2.2387038934980308e-01 4.2799487894164505e+00 + -1.6139098307781614e+00 -8.2170863110410330e-01 4.7598965947830560e+00 + -1.7004406322467658e+00 -2.0489518803265061e+00 5.8738239802396173e+00 + -1.0427368366018088e+00 -2.4268421982461064e+00 6.9818127055367638e+00 + -5.4844946517825965e-01 -2.2216984894403575e+00 7.4632003225070616e+00 + 2.1125143603977214e-03 -1.9313981884168716e+00 7.6288102395013748e+00 + id 11657 + loc 7.8198510408401489e-01 1.9700953364372253e-01 1070 + blend 0.0000000000000000e+00 + interp 4.0446620885016793e-01:3.0294924091416775e-01:1.3717637506409641e-03:3.0438092549403134e-01:8.0817024894998424e-01:2.9236560389228139e-01:1.2352291963673760e+00:2.8334135147576894e-01:1.9948453292206536e+00:4.0446216418807945e-01:2.3846911732867908e+00:2.8492635079767675e-01:3.0545321072942695e+00 + CVs 20 + 2.5436495284745719e-01 3.2508170351751864e-01 -1.1951100717430549e-01 + 4.7017075686544285e-01 6.1081825194400463e-01 -1.5398503574054717e-01 + 6.5180085849140934e-01 8.7781276956004128e-01 -1.3483931208035149e-01 + 7.9096371546007371e-01 1.1302451027550493e+00 -7.7358538815829325e-02 + 8.8120287107391326e-01 1.3664456109382492e+00 1.6441543133876912e-02 + 9.3488124075041079e-01 1.6125364276526810e+00 1.2502227102549268e-01 + 9.7320110017955463e-01 1.9101619293406564e+00 2.0121184587947016e-01 + 1.0168684183116623e+00 2.2748882256626066e+00 1.9188156546805768e-01 + 1.0961057790928599e+00 2.6903831627430321e+00 6.2598929249534141e-02 + 1.2618211074320755e+00 3.1122258396600162e+00 -2.1625259723839707e-01 + 1.5651384673499156e+00 3.4357170656160925e+00 -6.4756529848270872e-01 + 1.9830668048390665e+00 3.5415506784198549e+00 -1.1407886604919306e+00 + 2.4390436343424637e+00 3.4143806779951276e+00 -1.5904840726326510e+00 + 2.8768617803764451e+00 3.0989248301232193e+00 -1.9427386349447013e+00 + 3.2616809304182941e+00 2.6603778015208133e+00 -2.1637267058861136e+00 + 3.5844294054127772e+00 2.1399126426233313e+00 -2.2459628745799236e+00 + 3.8241862040554526e+00 1.5360979767449805e+00 -2.1803307516058230e+00 + 3.9210986022109360e+00 9.0012727313017837e-01 -1.9464422308711282e+00 + 3.9639754834468599e+00 6.2096506073117697e-01 -1.7520087102064683e+00 + id 11658 + loc 5.7595348358154297e-01 4.7643333673477173e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6033543810319166e-01:4.2228545184480154e-01:8.0331442205308079e-03:4.6033083474881065e-01:3.8755060127718255e-01:3.8458096890881360e-01:1.0709643035139862e+00:3.9073475980514866e-01:1.7937280839843401e+00:3.5034538360287509e-01:2.5666036846581939e+00:3.9775804504001278e-01:2.9999983159593149e+00:3.7254676894355171e-01:3.7009827957531982e+00 + CVs 20 + 1.6821717223961169e-02 3.4615017288218813e-01 2.6054092473581125e-01 + -1.1380398124477165e-02 6.6475181236521164e-01 5.2065482151530784e-01 + -6.8964650401756811e-02 9.5861779759900723e-01 7.8701868274211850e-01 + -1.5408984224091427e-01 1.2262160630655046e+00 1.0710309941424483e+00 + -2.6142129475806952e-01 1.4631702986300361e+00 1.3758568694141324e+00 + -3.7742741951827152e-01 1.6718443206570617e+00 1.6989642333488886e+00 + -4.9373825450604969e-01 1.8558189005394659e+00 2.0360597167614931e+00 + -6.1380159616841445e-01 2.0108216947128312e+00 2.3835541279902919e+00 + -7.4429804707687119e-01 2.1193255181453798e+00 2.7399163698311670e+00 + -8.8463994927745582e-01 2.1505451122707719e+00 3.1021044993484517e+00 + -1.0281775062973189e+00 2.0723491464567596e+00 3.4510100371065962e+00 + -1.1702814649893125e+00 1.8799109934868277e+00 3.7493835047511124e+00 + -1.3159003310528745e+00 1.6051066984081064e+00 3.9692685566352499e+00 + -1.4790227006965959e+00 1.2921789986669605e+00 4.1078802048905274e+00 + -1.6627431641981154e+00 9.6799389569019800e-01 4.1870897001343739e+00 + -1.8454288175402958e+00 6.2503215894034936e-01 4.2461015025313804e+00 + -1.9861004440229606e+00 2.2489414217867087e-01 4.3291515101411315e+00 + -2.0448733641153791e+00 -2.4285189112757732e-01 4.4407407196127773e+00 + -2.1194495379743370e+00 -6.0858875524448930e-01 4.5558711248114454e+00 + id 11659 + loc 5.6600987911224365e-01 9.7329556941986084e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1656452113925513e-01:2.9615615549639523e-01:3.2485037766408464e-01:2.5733707169160230e-01:1.4316553303050621e+00:4.1656035549404374e-01:2.0109224005325652e+00:2.4901241576773958e-01:2.9639921609474316e+00:3.7843865014608596e-01:3.7930621986591246e+00 + CVs 20 + -1.6295393598933644e-02 5.3302919917057534e-01 2.0766374418359992e-01 + -1.1291150878871903e-01 1.0117346907137852e+00 3.2795538341551345e-01 + -2.7077099418602690e-01 1.4571997396623249e+00 4.0305265101039744e-01 + -4.9166894660675015e-01 1.8583663770540266e+00 4.2960655444506080e-01 + -7.6991457719019507e-01 2.1789949207780590e+00 3.8680303404018634e-01 + -1.0789422017080628e+00 2.3785615635045274e+00 2.6188430081484571e-01 + -1.3690837358710881e+00 2.4237627183344248e+00 6.2037958899063272e-02 + -1.5840780189915495e+00 2.3132735351677960e+00 -1.7353025707519065e-01 + -1.7058461091117048e+00 2.0881011220301779e+00 -3.8500254463076078e-01 + -1.7773446200224414e+00 1.8034089646765794e+00 -5.2997302238874566e-01 + -1.8416007096415845e+00 1.4886354244127078e+00 -5.9572339097741223e-01 + -1.9046067678068483e+00 1.1620403022063328e+00 -5.7221944502872824e-01 + -1.9634967785100204e+00 8.5256053880562122e-01 -4.4833522279650478e-01 + -2.0184850749166090e+00 6.0220772151789648e-01 -2.1732745940859574e-01 + -2.0656591264877249e+00 4.6537255071293560e-01 9.2123696272571942e-02 + -2.1247203505530017e+00 4.4715151404847775e-01 4.0171100264719078e-01 + -2.2142661207433858e+00 5.1231824237346368e-01 6.6768879037959827e-01 + -2.3065397699551360e+00 6.1790501117329100e-01 8.6542497589724821e-01 + -2.4223102832129051e+00 6.5566299202567946e-01 1.0492165377544294e+00 + id 11660 + loc 9.8551690578460693e-01 8.2311427593231201e-01 1087 + blend 0.0000000000000000e+00 + interp 9.3135375438309531e-01:3.0725105903910832e-01:1.8830697518653072e-02:7.0057259843731134e-01:9.9585819186275737e-02:9.3134444084555157e-01:2.0970346710853738e+00:4.0258252092602292e-01:2.5223330583943726e+00:1.8446659868124873e-01:2.9435680802849920e+00 + CVs 20 + -1.2948442210156752e-01 4.4915509253483110e-01 4.9532963439530714e-01 + -2.8775693564655286e-01 7.9336052079069685e-01 8.3926795455767311e-01 + -4.6637982322394206e-01 1.0938617627806360e+00 1.1355020359540444e+00 + -6.6648498376215448e-01 1.3710413487605444e+00 1.4141511969692957e+00 + -8.9367432466637475e-01 1.6179389014060634e+00 1.6580810384746303e+00 + -1.1508140666516478e+00 1.8275920800182663e+00 1.8517724613715514e+00 + -1.4382352234333842e+00 1.9915768266605176e+00 1.9803584332045023e+00 + -1.7496871398088303e+00 2.0965659823572960e+00 2.0296424499653609e+00 + -2.0577941906365069e+00 2.1235211307367470e+00 1.9975419928154170e+00 + -2.3173539178974982e+00 2.0704773079387953e+00 1.9194938719685211e+00 + -2.5168843063272082e+00 1.9642430904042134e+00 1.8414824316193086e+00 + -2.6718086306218161e+00 1.8280862436615739e+00 1.7820218186292660e+00 + -2.7909036328490910e+00 1.6788611211541069e+00 1.7463076266531226e+00 + -2.8723772939696177e+00 1.5418426032102275e+00 1.7336839309766421e+00 + -2.9183350962349293e+00 1.4279159948285101e+00 1.7300418409911467e+00 + -2.9356977895445659e+00 1.3123015241663938e+00 1.7262322619327941e+00 + -2.9243136160735070e+00 1.1816000409237764e+00 1.7192159054461875e+00 + -2.9279030737590106e+00 1.0097099046103706e+00 1.7358616289770423e+00 + -3.1075117339240794e+00 7.7870157324026623e-01 1.9171922059482855e+00 + id 11661 + loc 3.4824651479721069e-01 6.8425607681274414e-01 1054 + blend 0.0000000000000000e+00 + interp 3.8900972064369016e-01:3.8900583054648374e-01:2.4774260764394795e-01:2.5488336085763202e-01:1.2832418141295601e+00:3.0152059511826751e-01:1.9945764843688609e+00:3.6835554973174839e-01:2.5297208297230593e+00:2.3631870866320256e-01:3.0156067468805086e+00:2.7932804577905773e-01:3.8879210411010625e+00 + CVs 20 + 3.3878070020241902e-01 4.0965417281855648e-01 -3.2019844174603629e-02 + 6.1097301012233496e-01 7.9539742830540827e-01 5.3072290523423771e-03 + 8.0700587047417560e-01 1.1614386395411496e+00 1.1123005278928266e-01 + 9.4966812183355276e-01 1.4968176955986896e+00 2.7642687907639529e-01 + 1.0935371280140478e+00 1.7885384474541912e+00 4.8991441169769856e-01 + 1.2958602427329124e+00 2.0198711025931915e+00 7.3798066760758263e-01 + 1.5727665425413635e+00 2.1617258005563680e+00 9.9089718216312628e-01 + 1.8900531882469145e+00 2.1877921277687626e+00 1.2061891901678132e+00 + 2.1864438044253092e+00 2.1065986361737377e+00 1.3589776961412046e+00 + 2.4052906646338288e+00 1.9401659887761338e+00 1.4389503172268874e+00 + 2.5270345790713549e+00 1.6957461833851910e+00 1.4685157023663464e+00 + 2.5870512354185742e+00 1.3283540450087239e+00 1.5962242144895740e+00 + 2.7269680368342071e+00 8.4467733334799089e-01 1.9922471884271138e+00 + 3.1699022759510393e+00 4.5570225622942517e-01 2.4933880056792632e+00 + 3.7841935596961922e+00 3.3401156946985139e-01 2.7533523707293748e+00 + 4.3381679327427882e+00 4.1191709399199572e-01 2.7238003972561602e+00 + 4.7570281080837820e+00 6.0968315249258165e-01 2.4690791256567408e+00 + 5.1864318224654840e+00 7.3671126125044872e-01 2.1404920456717740e+00 + 5.5847410754154607e+00 4.8124905983505539e-01 2.0310401636011175e+00 + id 11662 + loc 5.9092384576797485e-01 4.5027863234281540e-02 1074 + blend 0.0000000000000000e+00 + interp 4.6596645778408952e-01:3.0398709679298591e-01:1.3815925942322405e-01:3.7329999485963439e-01:8.4900389060461912e-01:2.9012406363407428e-01:1.9940223065993596e+00:3.5930407968975492e-01:2.5912884828122884e+00:4.6596179811951172e-01:3.0935879876033616e+00:3.8882065840709285e-01:3.8800922335063914e+00 + CVs 20 + -1.6895570793061201e-01 2.7548283053152545e-01 2.6569325811591954e-01 + -3.1848397412754742e-01 5.3661419069747041e-01 5.2452511831791293e-01 + -4.7327327523575735e-01 7.7268241581580399e-01 7.8481092451347567e-01 + -6.3764712244431299e-01 9.8113986455402524e-01 1.0439368950858441e+00 + -8.0906190639049913e-01 1.1657448951635985e+00 1.3016933202367351e+00 + -9.8804293339416760e-01 1.3291737443916423e+00 1.5654783121174536e+00 + -1.1782265295445389e+00 1.4728219379735905e+00 1.8450020879294742e+00 + -1.3837877862566466e+00 1.5960624643834773e+00 2.1431322490675240e+00 + -1.6057926639711841e+00 1.6948439468681193e+00 2.4511865723599380e+00 + -1.8406772236055260e+00 1.7636561897471446e+00 2.7536467958880588e+00 + -2.0818570693394340e+00 1.7997406198103914e+00 3.0374825803158259e+00 + -2.3236280044289570e+00 1.8052049468305507e+00 3.2990601286079748e+00 + -2.5634097861954275e+00 1.7843445878968163e+00 3.5455968140606089e+00 + -2.7992940873010332e+00 1.7387173471637751e+00 3.7883345174294818e+00 + -3.0309551098065786e+00 1.6636057758054292e+00 4.0399207880349479e+00 + -3.2648907734716994e+00 1.5363732557485767e+00 4.3213665218474162e+00 + -3.5015249119076484e+00 1.3071594313812067e+00 4.6538294496594439e+00 + -3.6951199444096021e+00 9.6239207931421134e-01 5.0188824512761654e+00 + -3.7571088093303961e+00 8.0899919617474114e-01 5.2137363585245824e+00 + id 11663 + loc 1.5975388884544373e-01 4.4416093826293945e-01 410 + blend 0.0000000000000000e+00 + interp 3.7036243956197390e-01:2.8938929666170926e-01:8.2406691115802788e-03:3.7035873593757829e-01:7.8000888983743510e-01:2.9083784476222951e-01:1.2128430272379405e+00:2.9891460560235500e-01:1.9998773906337315e+00:3.1069153489925855e-01:2.5914469719042290e+00:2.9756520443954165e-01:3.1639735612327446e+00 + CVs 20 + -6.0330771982798015e-02 1.1274382698596962e-01 -3.5901648253162310e-01 + -1.0923219263797393e-01 1.8859003596741947e-01 -6.7283852696222990e-01 + -1.4064321621471332e-01 2.4547894119664748e-01 -9.6444070160513462e-01 + -1.5951121712605421e-01 2.9298880900150526e-01 -1.2484575963893265e+00 + -1.6741750276623141e-01 3.3045262356772620e-01 -1.5205536800112234e+00 + -1.6186620325418105e-01 3.5697839389995212e-01 -1.7740045630051255e+00 + -1.3965449021922299e-01 3.7247920097932308e-01 -2.0033787762230704e+00 + -1.0096909882871863e-01 3.7804629718984895e-01 -2.2082354466205221e+00 + -4.8256579212409889e-02 3.7612607311241097e-01 -2.3929092301834789e+00 + 1.7362359329028965e-02 3.7039681914266986e-01 -2.5636727720245380e+00 + 9.5235668299386234e-02 3.6336532814878164e-01 -2.7281505757278435e+00 + 1.7638360371681261e-01 3.5053796716672991e-01 -2.8995354277591465e+00 + 2.3570076287901937e-01 3.1840671500396645e-01 -3.0914985776688022e+00 + 2.4450260521543093e-01 2.5676618432313814e-01 -3.2965955181287758e+00 + 1.9970310424403986e-01 1.7087430560333039e-01 -3.4941970277835588e+00 + 1.1386371444695265e-01 6.8551251461744567e-02 -3.6756621677486709e+00 + -8.1371682757245267e-03 -4.6284093829288553e-02 -3.8338634330313477e+00 + -1.6289139421471888e-01 -1.6742466431788872e-01 -3.9592682321714845e+00 + -2.9507938730487493e-01 -3.0580470857414443e-01 -4.1490530975706221e+00 + id 11664 + loc 3.6569789052009583e-01 6.6408485174179077e-02 1090 + blend 0.0000000000000000e+00 + interp 4.6634316147389260e-01:3.5811953809219998e-01:1.7946799306649608e-01:3.3910864615305697e-01:8.8335399163692663e-01:4.6633849804227789e-01:1.1634004224488641e+00:3.6824893425932614e-01:1.9144199746415718e+00:3.3503942664030956e-01:2.5876950593259740e+00:4.2433364924448064e-01:3.3913606715412090e+00 + CVs 20 + 2.5656275534687395e-01 4.3747170046503892e-01 7.3082654548897785e-02 + 4.0262975262142014e-01 7.8252662109333315e-01 2.0358914058079755e-01 + 5.0388327978696434e-01 1.0886296438548029e+00 3.6577857280654646e-01 + 5.7794016678329863e-01 1.3576489050418232e+00 5.3965075220217318e-01 + 6.1421864367895718e-01 1.5708278103582689e+00 7.1487454792697269e-01 + 6.1035453972361065e-01 1.7081478761070326e+00 8.6926870366130449e-01 + 5.8031107386054126e-01 1.7576497318469881e+00 9.6917268853878225e-01 + 5.5611554669308871e-01 1.7361389715312483e+00 9.8900444241125973e-01 + 5.5668299691763445e-01 1.6896090118304250e+00 9.4715388472270656e-01 + 5.4669528852733151e-01 1.6388926957571948e+00 9.0464911684397298e-01 + 4.9157633060869016e-01 1.5545064852561659e+00 8.9262047582897464e-01 + 4.0402584213562331e-01 1.4093806817623209e+00 9.0654990029651605e-01 + 3.1400972059412768e-01 1.1905485723163920e+00 9.4136973617552844e-01 + 2.6035783337364177e-01 8.8999489519241159e-01 9.9951445368229230e-01 + 2.9594777879366330e-01 5.1406499537848604e-01 1.0868071795467025e+00 + 4.6363948889948631e-01 7.3457285637282210e-02 1.2329288372853906e+00 + 8.0713960774176863e-01 -3.8855848495364959e-01 1.5030440403294474e+00 + 1.2983831965673323e+00 -7.5363723396035853e-01 1.9095101031596724e+00 + 1.5672423385649665e+00 -1.1030519076819045e+00 2.1677413729740427e+00 + id 11665 + loc 8.3325779438018799e-01 8.4110099077224731e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5846466126961988e-01:3.1795715164726107e-01:4.5717710850176729e-02:4.2036493051788404e-01:9.9718446672343841e-01:4.5846007662300720e-01:1.3765716079615198e+00:3.0438084623197820e-01:1.9683801115676156e+00:2.8653676950656409e-01:2.5527270891800060e+00:3.0750613076744887e-01:3.0568077695968947e+00 + CVs 20 + 1.1500016271873939e-01 3.4212017742615047e-01 -2.6722304007300629e-01 + 2.5765086045768093e-01 6.5996821925380567e-01 -5.2435620699065233e-01 + 4.0312658615892005e-01 9.4735663904064826e-01 -7.9234409944102524e-01 + 5.3397510364846634e-01 1.1943547383619806e+00 -1.0817194978437834e+00 + 6.4053765802578544e-01 1.3897819389398447e+00 -1.3906799714360019e+00 + 7.1995145582363018e-01 1.5270486396491583e+00 -1.7095009694302288e+00 + 7.7674512787579919e-01 1.6093297417830188e+00 -2.0310721842857218e+00 + 8.1809242927733317e-01 1.6461184336207140e+00 -2.3545112504416270e+00 + 8.4978900879580865e-01 1.6486484330282181e+00 -2.6789722807954721e+00 + 8.7701313362768896e-01 1.6287895918406681e+00 -2.9992890095224922e+00 + 9.0304353029063100e-01 1.6011048136743113e+00 -3.2982368700577496e+00 + 9.2150004099126714e-01 1.5991453940276419e+00 -3.5411701983025412e+00 + 9.3855464049243964e-01 1.6703249917695366e+00 -3.7181978155183599e+00 + 9.8878712374464195e-01 1.7558331697821679e+00 -3.8915004374842628e+00 + 1.0532957441070538e+00 1.7302675136926076e+00 -4.0856165879079116e+00 + 1.1492516670934401e+00 1.6478647530407726e+00 -4.2470508935659605e+00 + 1.4606161047759034e+00 1.6473018265069026e+00 -4.3393970432349294e+00 + 1.9793650429705310e+00 1.5134761633561458e+00 -4.3779860028615767e+00 + 1.6477682883989588e+00 1.3923036783253886e+00 -4.4402574583689924e+00 + id 11666 + loc 2.6887810230255127e-01 5.9994304180145264e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7002501697965260e-01:4.5131378203648825e-01:2.1185016353283159e-01:4.7002031672948280e-01:8.4047754734412294e-01:2.7513115170877850e-01:1.2071607190624434e+00:4.5861910688321289e-01:1.8169151810247572e+00:4.4165086939199133e-01:2.1814640954801021e+00:4.0485335082550217e-01:2.9178923539435013e+00:4.5759303537590651e-01:3.2526069301732576e+00:4.5553025412323805e-01:3.9315014522184941e+00 + CVs 20 + 1.2002012081822994e-01 3.3305949222548192e-01 -2.7698248195307806e-02 + 2.6971553774565027e-01 6.7197714777423789e-01 -7.4700934826321563e-02 + 4.3098969267879089e-01 1.0135225245479107e+00 -1.4040978065849874e-01 + 5.9792871163627104e-01 1.3547784433177734e+00 -2.3359455961446035e-01 + 7.7394356022853783e-01 1.6858533396833231e+00 -3.6841370134593260e-01 + 9.6442290059264812e-01 1.9910950796542775e+00 -5.5621852510978442e-01 + 1.1707165253042167e+00 2.2480441406440046e+00 -8.0229979180111066e-01 + 1.3833699457868032e+00 2.4330502343697438e+00 -1.1041605327380486e+00 + 1.5858048414842842e+00 2.5268477006119197e+00 -1.4511550298672022e+00 + 1.7628866620098038e+00 2.5175277608252982e+00 -1.8224280184526276e+00 + 1.9044642042507800e+00 2.4033291920369173e+00 -2.1910754205491645e+00 + 2.0018327184359661e+00 2.1926010357613368e+00 -2.5318125419985651e+00 + 2.0437854173113523e+00 1.9079962967930015e+00 -2.8254580503097060e+00 + 2.0132625660685060e+00 1.5882460777430050e+00 -3.0690495240459286e+00 + 1.8880553722721742e+00 1.2708569334764310e+00 -3.2722398983633267e+00 + 1.6571419735828432e+00 9.8739279054613749e-01 -3.4343050218409021e+00 + 1.3330058152134066e+00 7.6770566919595318e-01 -3.5456960895669734e+00 + 9.5779380680810888e-01 6.0829852024663500e-01 -3.6149402484901185e+00 + 6.2478848524197250e-01 3.8002444568813620e-01 -3.7051305419894547e+00 + id 11667 + loc 3.2640713453292847e-01 6.0759651660919189e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0402273289606566e-01:3.7226370871863995e-01:2.0131883468489598e-01:3.8418560534945650e-01:1.1410590506886749e+00:4.0025362120057117e-01:1.8624714726912261e+00:3.7262452561732601e-01:2.2041795341042820e+00:3.8718867422949127e-01:2.9738341461760198e+00:4.0401869266873675e-01:3.5188891948650070e+00 + CVs 20 + -1.3506429422200922e-01 5.4705255492174887e-01 2.8845151491768162e-01 + -3.1196223273862383e-01 1.0475808788653156e+00 4.6259936000824398e-01 + -5.3366290494495960e-01 1.5256163907055229e+00 5.7575643919983122e-01 + -8.0908439265494425e-01 1.9783245434683627e+00 6.2777069627929938e-01 + -1.1339876182787356e+00 2.3765869802070423e+00 5.9533992413291037e-01 + -1.4887150883659759e+00 2.6886193530051665e+00 4.6250007517273928e-01 + -1.8371664478490710e+00 2.8861500417220478e+00 2.2616334466819255e-01 + -2.1347816278604199e+00 2.9557660647233868e+00 -9.5513879027581128e-02 + -2.3561259831407328e+00 2.9046856083457602e+00 -4.6349772331043826e-01 + -2.5238162692582469e+00 2.7526260809764587e+00 -8.3433427750903333e-01 + -2.6824065518083415e+00 2.5097630565264910e+00 -1.1816549134667089e+00 + -2.8495419232082884e+00 2.1737235786988514e+00 -1.4868239316869512e+00 + -3.0275612467838084e+00 1.7417555262679030e+00 -1.7248072358681945e+00 + -3.2291524604988724e+00 1.2113345845651162e+00 -1.8606101765269716e+00 + -3.4676846477471615e+00 5.9344148856002987e-01 -1.8436566375535015e+00 + -3.7316224501688020e+00 -1.1735501074054966e-02 -1.6498942162690347e+00 + -4.0201814362519457e+00 -4.8953044961394376e-01 -1.3251808109615606e+00 + -4.3313085749420424e+00 -7.9887876145972891e-01 -9.3326111201271666e-01 + -4.4639578425312871e+00 -8.9876573187168007e-01 -7.0322212368580184e-01 + id 11668 + loc 9.9721574783325195e-01 4.3528237938880920e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2053948778897706e-01:3.2053628239409920e-01:9.8692169375172978e-01:2.1562822636684686e-01:2.0489866602547053e+00:2.5578540083305212e-01:3.0628611074335117e+00:2.5465716887351875e-01:3.9320634983634131e+00 + CVs 20 + -7.0212441376329912e-02 5.6719141775299275e-01 4.9721903152658564e-01 + -1.9933818916669649e-01 1.1244217604822511e+00 9.6522738837170219e-01 + -4.3845495432990794e-01 1.6854030373988160e+00 1.3793544941853444e+00 + -8.3530161534959801e-01 2.2270074774825837e+00 1.7000352602111719e+00 + -1.4015824276581927e+00 2.6762463815592965e+00 1.8960691424636682e+00 + -2.0901295990296953e+00 2.9489432865366747e+00 1.9839938700705166e+00 + -2.8117175679251094e+00 2.9844894454188280e+00 2.0156020695896451e+00 + -3.4810921433998296e+00 2.7847184383063097e+00 2.0468568422835411e+00 + -4.0783411999892856e+00 2.3951908637161803e+00 2.0795478696923104e+00 + -4.6117050984233039e+00 1.8362553598092093e+00 2.0487854743637430e+00 + -5.0390155832049475e+00 1.1277522002106288e+00 1.8655826432782314e+00 + -5.2826069734534382e+00 3.4368706808172589e-01 1.4584408026508204e+00 + -5.2694062273806228e+00 -3.8497921057341922e-01 7.9855933152532743e-01 + -4.9884649640713379e+00 -8.6614250894289013e-01 -4.3595745575102263e-02 + -4.5583639593222571e+00 -9.6597560905579494e-01 -8.8806205707415353e-01 + -4.1155195770971851e+00 -7.2596352906005124e-01 -1.6018365811070898e+00 + -3.6662390086780658e+00 -2.0646874166234563e-01 -2.1884333173039385e+00 + -3.2084874818370248e+00 6.7221322208989553e-01 -2.5291958157036007e+00 + -3.1849334226885375e+00 1.2373356188161275e+00 -2.4423801409814896e+00 + id 11669 + loc 8.9194607734680176e-01 2.4190187454223633e-01 1070 + blend 0.0000000000000000e+00 + interp 5.1277793465871413e-01:2.7664121808204695e-01:8.2904667404787857e-01:5.1277280687936755e-01:1.1293556390408239e+00:2.7564566074774077e-01:2.0036963716300762e+00:3.0438092549403134e-01:2.8048247599968636e+00:3.1234688954951290e-01:3.2905758119133934e+00:2.7657483487227758e-01:3.9845955324905753e+00 + CVs 20 + 2.3302370168032582e-01 3.0492351442921645e-01 -5.9052521374055700e-02 + 4.4311790004584528e-01 5.4329335205968854e-01 -3.6835130023992690e-02 + 6.3031327159572403e-01 7.3808560952952962e-01 3.0920363968533426e-02 + 7.8928428678878770e-01 8.9523090021124185e-01 1.3193623891672512e-01 + 9.3285590326109746e-01 1.0426774592431669e+00 2.9318546714758331e-01 + 1.0812353264647392e+00 1.2554425125752240e+00 5.2940586514807697e-01 + 1.2370941697222786e+00 1.6015256602862560e+00 7.6122585942623477e-01 + 1.3963940769273955e+00 2.0589134890257443e+00 8.8746224106689686e-01 + 1.5777082924607460e+00 2.5765509322626481e+00 8.7101984049299763e-01 + 1.8314707739173657e+00 3.0988727214449225e+00 6.8654206245521676e-01 + 2.2166574376463259e+00 3.5029774348431468e+00 3.3023966331353694e-01 + 2.7182076171336336e+00 3.6608922035415885e+00 -1.1952335984893603e-01 + 3.2590920783019834e+00 3.5542412182249263e+00 -5.6659776916971705e-01 + 3.7654131575271839e+00 3.2456742466767095e+00 -9.3292107520678136e-01 + 4.2195302672236563e+00 2.7990871072163390e+00 -1.1845403042885159e+00 + 4.6306327442993744e+00 2.1812337987056081e+00 -1.3101170370994901e+00 + 4.9279416771170688e+00 1.3502831037101659e+00 -1.2417623252692049e+00 + 5.0198639799888545e+00 5.2045565328742849e-01 -9.7118177650732096e-01 + 5.1213338936570665e+00 1.4263527776499640e-01 -8.3329958592702780e-01 + id 11670 + loc 2.1825484931468964e-01 2.3095023632049561e-01 1053 + blend 0.0000000000000000e+00 + interp 4.2010166300000568e-01:2.9290618387231271e-01:2.0767972281442892e-02:2.1506286038831263e-01:1.0076019571985944e+00:4.2009746198337572e-01:1.1084871512308647e+00:3.7675456910188571e-01:2.9856613618735786e+00:3.4761037344682977e-01:3.5564265777191317e+00 + CVs 20 + 3.1727749090054325e-01 4.0350653207166853e-01 1.8729917925593498e-01 + 5.7168533167597313e-01 7.6597193266783270e-01 3.8447493333074750e-01 + 8.1871659477287884e-01 1.1220227611634424e+00 5.9744947501035617e-01 + 1.0775061049995929e+00 1.4777402208186903e+00 8.3394928323402673e-01 + 1.3423515328800983e+00 1.8219838346308586e+00 1.1135833500468104e+00 + 1.6058284598184924e+00 2.1355595909997218e+00 1.4586085506394886e+00 + 1.8514292420284426e+00 2.3851848310097878e+00 1.8886589053408063e+00 + 2.0482180230939830e+00 2.5313053760067561e+00 2.4057209605454792e+00 + 2.1560513654124400e+00 2.5345406892386260e+00 2.9887451629022159e+00 + 2.1357756587041385e+00 2.3485535663172956e+00 3.5864008852676283e+00 + 1.9565216270841650e+00 1.9373799675209675e+00 4.0922211806717623e+00 + 1.6330281715048169e+00 1.3473604936403234e+00 4.3719804559907285e+00 + 1.2223858764245692e+00 7.2698966431307843e-01 4.3765504383959897e+00 + 7.6082540616941063e-01 2.7241131059587959e-01 4.2145043482013138e+00 + 2.6617331732402549e-01 1.2260721295939248e-01 4.0712942179184122e+00 + -1.6541774901162309e-01 3.4967100044497246e-01 4.0619205041042035e+00 + -3.0257386066722536e-01 9.2381035798308808e-01 4.2264866756897401e+00 + -1.0613824372330088e-01 1.4975455067172148e+00 4.4662544076790951e+00 + -4.5439114573067374e-01 1.7878082663716242e+00 4.4469689265467238e+00 + id 11671 + loc 9.2510499060153961e-02 7.6026558876037598e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5786791849914971e-01:4.2674125564027920e-01:1.1994202153633049e-01:4.1355263572483253e-01:6.9827066762685508e-01:4.2591669279160355e-01:1.4183201059989963e+00:3.3028624293269598e-01:2.0000389372999594e+00:4.1510681203992739e-01:2.5736638103797302e+00:3.1446236430966334e-01:3.2280564166186929e+00:4.5786333981996474e-01:3.9292401957760137e+00 + CVs 20 + 9.2369789723474233e-02 2.7336022715050046e-01 -7.8137064109791710e-02 + 1.9163278106623194e-01 5.5142220024327127e-01 -1.7323999691035166e-01 + 2.9686281351103039e-01 8.2461315109649735e-01 -2.6396150570681076e-01 + 4.0773359593041814e-01 1.0920349670137126e+00 -3.4538053045287564e-01 + 5.2127561663874311e-01 1.3526599178669518e+00 -4.2364348776283856e-01 + 6.3626201212133981e-01 1.6046138775327607e+00 -5.0111528606931566e-01 + 7.5501674532219154e-01 1.8477897054702384e+00 -5.7852194910716392e-01 + 8.8139832381569427e-01 2.0886480655678525e+00 -6.5927694424703509e-01 + 1.0234636254501073e+00 2.3422451337858603e+00 -7.5556340474807759e-01 + 1.1984967676046474e+00 2.6261501423261486e+00 -8.9709283196945067e-01 + 1.4284316584990582e+00 2.9370635134440612e+00 -1.1382903104576156e+00 + 1.7189707954662334e+00 3.2124177187953218e+00 -1.5412840917222004e+00 + 2.0249827083391985e+00 3.3329221126746194e+00 -2.0983863053349028e+00 + 2.2707216408128681e+00 3.2416557716374808e+00 -2.6732270322116736e+00 + 2.4433504287058030e+00 2.9950528088752852e+00 -3.1590687511694093e+00 + 2.5744969448802686e+00 2.6236775381461941e+00 -3.5701795652333495e+00 + 2.6611905389963302e+00 2.1174763774127716e+00 -3.9341529755745608e+00 + 2.6621155828735028e+00 1.5425258893493408e+00 -4.2298117236016477e+00 + 2.6370001655777400e+00 1.1996773787573167e+00 -4.3653368823605776e+00 + id 11672 + loc 9.8719924688339233e-01 9.6561902761459351e-01 1084 + blend 0.0000000000000000e+00 + interp 3.6462206616059656e-01:3.2505763788380521e-01:3.6680261800768887e-01:3.0320733662090454e-01:1.0274575902472578e+00:3.6461841993993499e-01:1.8063834918956387e+00:1.5574611911613681e-01:2.8964723739811369e+00:3.2125618134124556e-01:3.9312766990322738e+00 + CVs 20 + -9.5790282648969050e-02 3.9855287994415500e-01 5.4956981112621039e-03 + -2.1261800370637715e-01 8.1272945941250874e-01 2.1362852870194182e-02 + -3.2941599654965170e-01 1.2373760285315027e+00 4.7317858869222906e-02 + -4.5891796242175925e-01 1.6684355686308840e+00 7.2969202195244831e-02 + -6.2629107610444867e-01 2.0953490544582558e+00 7.5933318929623628e-02 + -8.4757259832641851e-01 2.4942594694224614e+00 2.2303792747269346e-02 + -1.1171550957544343e+00 2.8206806326826785e+00 -1.2983380355624807e-01 + -1.3876762792713788e+00 3.0035263586943306e+00 -4.1881241630563548e-01 + -1.5754437345484726e+00 2.9873202884778602e+00 -8.1478486025978536e-01 + -1.6647978338692910e+00 2.8110784094193431e+00 -1.2282823995236942e+00 + -1.7114852669897316e+00 2.5011439013152228e+00 -1.6256906301460510e+00 + -1.7512635506562642e+00 2.0152139451363351e+00 -1.9559373354877962e+00 + -1.7889509768084400e+00 1.3836462188225462e+00 -2.1119546633436292e+00 + -1.7926539236915124e+00 7.8271138760774173e-01 -2.1304943399002889e+00 + -1.7267427848975532e+00 3.0586373049946480e-01 -2.2095323238046789e+00 + -1.6042081379998421e+00 -3.3820016494124250e-02 -2.4575516404259345e+00 + -1.4860872684774946e+00 -1.9641239771352281e-01 -2.8681266686248374e+00 + -1.4221440144072226e+00 -2.3282647219442953e-01 -3.3242655142234505e+00 + -1.3556937345317153e+00 -5.5422773555631388e-01 -3.6112260218885748e+00 + id 11673 + loc 4.7539860010147095e-01 1.0097698867321014e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6596645778408952e-01:4.6596179811951172e-01:9.7784723998335044e-02:4.0809424618825213e-01:8.3733771088838505e-01:2.9884817234223748e-01:1.4090900572899416e+00:3.6780607502556195e-01:1.9909849616362902e+00:3.8280926487239031e-01:2.9178620275607345e+00:4.6564051723341088e-01:3.1322387822839013e+00:3.8053004451950290e-01:3.6656980832493811e+00 + CVs 20 + -2.5106202471395828e-01 1.5957109395464858e-01 -7.4043434787576620e-02 + -5.1385010399309672e-01 3.3822647973345721e-01 -1.2607790729986290e-01 + -7.9082088489424507e-01 5.2779526648319863e-01 -1.7898175830602886e-01 + -1.0713790946048292e+00 7.2109068817508404e-01 -2.4221170060067465e-01 + -1.3402489911591926e+00 9.1810161830963311e-01 -3.0899804556663202e-01 + -1.5998174325865413e+00 1.1151284657417544e+00 -3.7648732840214189e-01 + -1.8824796216690454e+00 1.3134202782391209e+00 -4.5353660922981698e-01 + -2.2161875792682832e+00 1.5166787707085678e+00 -5.5191765531811110e-01 + -2.5972950471769107e+00 1.7196628855207818e+00 -6.7607975630464834e-01 + -3.0054860481090317e+00 1.9049074488253854e+00 -8.2176929359277462e-01 + -3.4262657475300071e+00 2.0450868031770488e+00 -9.8117904407279388e-01 + -3.8536872304022167e+00 2.1089950812232052e+00 -1.1441500628928640e+00 + -4.2803104017492153e+00 2.0692640780389180e+00 -1.2974526136021609e+00 + -4.6916445939122200e+00 1.9117059035705215e+00 -1.4294127377433881e+00 + -5.0661217141019321e+00 1.6440646836295629e+00 -1.5331810933112267e+00 + -5.3750532393594579e+00 1.3025773519383197e+00 -1.5927479139141132e+00 + -5.5980571126219951e+00 9.4520142113378358e-01 -1.5786888215858046e+00 + -5.7496702035122773e+00 6.0272866904911182e-01 -1.4908864281569756e+00 + -5.9569707485430730e+00 1.9604615670091649e-01 -1.5013161584986239e+00 + id 11674 + loc 8.2881516218185425e-01 1.1884504556655884e-01 1054 + blend 0.0000000000000000e+00 + interp 4.5044459682611349e-01:4.5044009238014526e-01:1.5474486781793195e-02:4.5001173197631622e-01:4.6911567994851089e-01:2.4288529840235049e-01:2.0007586799930919e+00:4.0727974907254705e-01:2.8600572964575535e+00:3.0728686243113895e-01:3.7045735093296877e+00 + CVs 20 + -7.2490904042548154e-02 4.3907522490799444e-01 3.2330110775850412e-01 + -1.7295903614432764e-01 8.7125166587154146e-01 5.6127228555802045e-01 + -2.6754191655881149e-01 1.3146407747032840e+00 7.1441324044693399e-01 + -3.7507169244189342e-01 1.7356648221301265e+00 8.1548243588045510e-01 + -5.3851232378286595e-01 2.0766958759400134e+00 9.1762293632405378e-01 + -7.6590542626625058e-01 2.2996684103784903e+00 1.0556234525202119e+00 + -1.0296342368172280e+00 2.3890750195331067e+00 1.2315406763548631e+00 + -1.3014572242276601e+00 2.3459521275054209e+00 1.4296913727991314e+00 + -1.5653391110405381e+00 2.1835063462343864e+00 1.6219537819961589e+00 + -1.8198672949542805e+00 1.9256073857810312e+00 1.7756516906682904e+00 + -2.0784922286075345e+00 1.6160061656923776e+00 1.8644687391470882e+00 + -2.3503231732995991e+00 1.3281536559203464e+00 1.8860677474073164e+00 + -2.5942162380809028e+00 1.1287602528146381e+00 1.8749975949622453e+00 + -2.7733715088701048e+00 1.0172631163793591e+00 1.8629466202733536e+00 + -2.9336010257720280e+00 9.8032105466956776e-01 1.9236687669155061e+00 + -3.0606134801890681e+00 1.0224956469269100e+00 2.1202107170018336e+00 + -3.1514382124466822e+00 1.1353286929322417e+00 2.5009453133617976e+00 + -3.3359569247540377e+00 1.1985487683187548e+00 3.0734527316064386e+00 + -3.5251367691818709e+00 1.0568456739958469e+00 3.2806616071834482e+00 + id 11675 + loc 4.5273903012275696e-01 9.4220302999019623e-02 1053 + blend 0.0000000000000000e+00 + interp 5.6794111127305125e-01:5.6793543186193851e-01:4.6048591516181780e-01:3.3393452598957851e-01:9.8496763486745964e-01:4.7341170395352683e-01:1.6315461915064000e+00:4.2464663701546179e-01:1.9792273760146133e+00:4.1155902548825923e-01:2.2614164493491478e+00:3.7454664834655826e-01:2.9455353518286977e+00:3.0324625185121651e-01:3.7547742335246714e+00 + CVs 20 + 3.9744618994596836e-01 4.7577818822939855e-01 1.7309810889379640e-01 + 7.3116953710180610e-01 9.2695071970442910e-01 3.6337396842509739e-01 + 1.0366623398446464e+00 1.3499039762511611e+00 5.9102794347284804e-01 + 1.3390264448654685e+00 1.7186359279821479e+00 8.8702307211502951e-01 + 1.6427448355671326e+00 1.9884258865139919e+00 1.2604867179436750e+00 + 1.9370263632644400e+00 2.1281387657652195e+00 1.6952312834622358e+00 + 2.1993275348477805e+00 2.1260582518019771e+00 2.1634418261779618e+00 + 2.4022161500723658e+00 1.9867699232332869e+00 2.6379568293461664e+00 + 2.5208338546325475e+00 1.7238218284108859e+00 3.0802387889443690e+00 + 2.5458136525982629e+00 1.3649937993426973e+00 3.4298552221732090e+00 + 2.4967570291855807e+00 9.6615232025366815e-01 3.6202108390186494e+00 + 2.4242848448736369e+00 6.1623156279874958e-01 3.6213418208519719e+00 + 2.3653466677098933e+00 3.7252274289560006e-01 3.4856210905821441e+00 + 2.2883605628647321e+00 1.6014498634442498e-01 3.2753120624152392e+00 + 2.1211713509952306e+00 -1.1687304345030203e-01 2.9574945357175455e+00 + 1.8028514500238693e+00 -4.0556757294913659e-01 2.5193327498801645e+00 + 1.3343099903747657e+00 -5.6302212122351003e-01 2.0324981652928873e+00 + 8.6232519119737561e-01 -4.8206110131594831e-01 1.6026383291223449e+00 + 6.9326625692109056e-01 -2.2410868038234596e-01 1.3293070196447045e+00 + id 11676 + loc 2.7160179615020752e-01 8.6805289983749390e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5108253742569654e-01:2.7231526056669825e-01:3.0356162252191954e-03:3.7477109028520111e-01:7.5366884278935298e-01:3.2672805721163922e-01:1.0587979844691935e+00:4.5107802660032231e-01:1.7765276392671590e+00:2.6330518816458909e-01:2.1769331493871467e+00:3.8916348582708732e-01:3.1136591458757259e+00 + CVs 20 + 1.7389852260010574e-01 2.8356743605821066e-01 2.4568894970805680e-02 + 3.6328630168207721e-01 5.7035774721966870e-01 5.2709942073599539e-02 + 5.6901601029493398e-01 8.6401426915332247e-01 8.6368386348718851e-02 + 7.9810873473975064e-01 1.1701393847123838e+00 1.1788091162109052e-01 + 1.0607213294983662e+00 1.4894563977201254e+00 1.2800084990632293e-01 + 1.3663706888076121e+00 1.8171781642742015e+00 9.1301296321937675e-02 + 1.7181654082363174e+00 2.1378405631827904e+00 -2.0560276982117598e-02 + 2.1072111675573755e+00 2.4252582719157476e+00 -2.3079026327554175e-01 + 2.5122218319835632e+00 2.6482744430706529e+00 -5.4836950911422722e-01 + 2.9056649154953802e+00 2.7777781909834851e+00 -9.5970254490596119e-01 + 3.2679719527695270e+00 2.7943748438027116e+00 -1.4362559198237839e+00 + 3.5902652755029276e+00 2.6837127436344046e+00 -1.9544542323082634e+00 + 3.8579965553040600e+00 2.4320405267782084e+00 -2.4974868740503204e+00 + 4.0333749241190304e+00 2.0426793312076796e+00 -3.0552632188783218e+00 + 4.0453622163440492e+00 1.5496727338801188e+00 -3.6366520067788879e+00 + 3.8051909845418717e+00 1.0314433226977615e+00 -4.2326780197933154e+00 + 3.2628646561224066e+00 6.0871576795097515e-01 -4.7837182181022078e+00 + 2.5010433905252203e+00 4.0799506239192374e-01 -5.1921699527899623e+00 + 2.0816245461425966e+00 2.9384617462421891e-01 -5.4422382703937942e+00 + id 11677 + loc 3.5127013921737671e-01 2.1409505605697632e-01 410 + blend 0.0000000000000000e+00 + interp 3.8556006752592009e-01:2.9591186700710870e-01:8.6880750655139449e-03:3.5606207843751964e-01:8.8113933880599593e-01:3.8555621192524486e-01:1.3251325164247345e+00:2.9853847392786897e-01:2.0024015737653453e+00:3.4826966554648953e-01:2.7838624216581085e+00:3.6621388703647151e-01:3.1821360232012745e+00 + CVs 20 + -1.5903465459962948e-01 9.6101537635669698e-02 -1.8222222236870833e-01 + -2.8856751777037193e-01 1.7701371733028912e-01 -3.6229259256516128e-01 + -3.9967719658034506e-01 2.4483455708864693e-01 -5.4933159640508955e-01 + -4.9931507288361260e-01 3.0111290706703070e-01 -7.4894645769316204e-01 + -5.8705021151123560e-01 3.4646186853313621e-01 -9.5916359777428917e-01 + -6.6327642154614441e-01 3.8131148921849234e-01 -1.1765837112505286e+00 + -7.2495955787745425e-01 4.0672502939097210e-01 -1.3962167050944185e+00 + -7.6577085841030279e-01 4.2364797952751626e-01 -1.6111885296716886e+00 + -7.7968166088076996e-01 4.3226298410477226e-01 -1.8135970422259908e+00 + -7.6376153290426152e-01 4.3250787175017003e-01 -1.9966308581553749e+00 + -7.1813264106062569e-01 4.2509933985824155e-01 -2.1555425973164981e+00 + -6.4623332817974277e-01 4.1113292159718784e-01 -2.2879388164484724e+00 + -5.5618902537222747e-01 3.9121522689544752e-01 -2.4021677368821659e+00 + -4.5894362612292749e-01 3.6414366785430641e-01 -2.5211544323198982e+00 + -3.6916222522648062e-01 3.2544785379200936e-01 -2.6645307437262229e+00 + -3.0165781509990158e-01 2.7108120341100417e-01 -2.8382824077011928e+00 + -2.7081306255061605e-01 1.9873373403766648e-01 -3.0417158162974083e+00 + -2.9182425964262709e-01 1.0863210983596128e-01 -3.2693643830389343e+00 + -3.1739596942785903e-01 3.1932574303518813e-02 -3.5132719149518348e+00 + id 11678 + loc 4.5413380861282349e-01 8.5729551315307617e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4765271495378423e-01:4.3571907478185229e-01:6.3365697705337620e-03:3.0410765117452759e-01:9.3848287391337648e-01:4.4764823842663470e-01:1.3840568676803746e+00:4.1588687000966612e-01:1.9992505087228427e+00:3.1724026042715259e-01:2.6253045302376394e+00:2.7880770494061025e-01:3.5946362941434105e+00 + CVs 20 + 2.7229279095884851e-02 3.6146120214432376e-01 -3.7591700417052232e-02 + 9.4634697322546674e-02 7.0802063439950746e-01 -1.1825651396678682e-01 + 1.8981186200047728e-01 1.0386770669015608e+00 -2.3131670028225926e-01 + 3.0185720598261612e-01 1.3554256143278809e+00 -3.7329681484307498e-01 + 4.2061557107843323e-01 1.6556470314428893e+00 -5.4941982852472737e-01 + 5.3915770089876047e-01 1.9362516106809953e+00 -7.5959894631475067e-01 + 6.6548692692554623e-01 2.1935754844170607e+00 -9.9412404073847738e-01 + 8.1513398276652738e-01 2.4274729932430268e+00 -1.2388743652202321e+00 + 1.0010493451919800e+00 2.6441360509645579e+00 -1.4842767228849232e+00 + 1.2408254443636353e+00 2.8493557956208413e+00 -1.7300167810138343e+00 + 1.5674643290664014e+00 3.0349982609413502e+00 -1.9866626384066057e+00 + 2.0310349052780579e+00 3.1544683436112151e+00 -2.2884397732640238e+00 + 2.6214810675579874e+00 3.0641811338269873e+00 -2.6707675556928350e+00 + 3.1468511374709367e+00 2.6665603214568936e+00 -3.0430759389298725e+00 + 3.4989543604258544e+00 2.0693510144128560e+00 -3.3085403466504157e+00 + 3.7025281273991557e+00 1.2560683026617863e+00 -3.4739982073122064e+00 + 3.5464104388709434e+00 4.1966305807419335e-02 -3.5179249194998441e+00 + 2.6720112848327320e+00 -1.1131823503090388e+00 -3.4138937172476727e+00 + 2.3520692237298948e+00 -1.3866296785536383e+00 -3.3776311992451022e+00 + id 11679 + loc 1.4758282899856567e-01 7.8100138902664185e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4637119657755087e-01:2.9740100841537404e-01:4.7346855595488591e-01:3.3047123886641522e-01:1.4155380863237503e+00:2.2497030327614312e-01:2.0218175052957985e+00:2.6569562445015227e-01:2.9242613688784846e+00:4.1489357056929205e-01:3.2105946607724918e+00:4.4636673286558509e-01:3.8717656257530995e+00 + CVs 20 + -6.7447640995951602e-02 5.8304061105840610e-01 3.9349264398472361e-01 + -1.7655731653506934e-01 1.0689445711461709e+00 6.5315203955570622e-01 + -3.2095240932678831e-01 1.5053023975518371e+00 8.6753191327239532e-01 + -5.1144650376288214e-01 1.9095507572075698e+00 1.0566335056099092e+00 + -7.5579791715636890e-01 2.2734552911457198e+00 1.2025358263103838e+00 + -1.0577717489655736e+00 2.5859279659495478e+00 1.2844457937084728e+00 + -1.4151693574340212e+00 2.8263075722189921e+00 1.2767596604393963e+00 + -1.8074427926702852e+00 2.9644109457340888e+00 1.1585624184593752e+00 + -2.1949099001193271e+00 2.9693751001882838e+00 9.3565012489896171e-01 + -2.5389803558887563e+00 2.8331211468970432e+00 6.6232600459294755e-01 + -2.8289731703486609e+00 2.5767823035220752e+00 4.0791349304635860e-01 + -3.0695406899173912e+00 2.2239701252059785e+00 2.1712035966233539e-01 + -3.2627207382096652e+00 1.7966937740827507e+00 1.2338557935545991e-01 + -3.4084961142726864e+00 1.3250329410762192e+00 1.6437772868049294e-01 + -3.4988764269115298e+00 8.6840746592489992e-01 3.6654444308051282e-01 + -3.5345051668742506e+00 5.0449407535222934e-01 7.0161715521797108e-01 + -3.5441211905998351e+00 2.6585842489789169e-01 1.1125800250648417e+00 + -3.5554720784798302e+00 1.1752937064330399e-01 1.5619300239304450e+00 + -3.5635824055027499e+00 -1.9648961702031426e-01 2.0253143758209489e+00 + id 11680 + loc 2.3140700161457062e-01 3.5170234739780426e-02 1048 + blend 0.0000000000000000e+00 + interp 6.5748711357528011e-01:4.5701475563473931e-01:5.6047465041925082e-01:5.1626601541873773e-01:9.9582268842142618e-01:6.5748053870414436e-01:1.9590056482509699e+00:4.7045547776976959e-01:2.0290189230216527e+00:4.8242171839256920e-01:2.8421209958395268e+00:3.8870450245757099e-01:3.6094911984451321e+00 + CVs 20 + -3.1452584070672629e-01 4.6692813830086893e-01 1.3981958851028581e-01 + -6.3318367625568939e-01 9.7564950223915048e-01 2.3721282469518420e-01 + -9.2375166390849306e-01 1.5537032098048100e+00 2.8230576528191054e-01 + -1.1710641948825797e+00 2.1874579545092812e+00 2.5096131238159669e-01 + -1.3869992605176822e+00 2.8254236988825325e+00 1.0589491677441998e-01 + -1.6051666732362695e+00 3.4116535348726478e+00 -1.7627022855720154e-01 + -1.8683895025005923e+00 3.8870699627470353e+00 -6.3022545470036917e-01 + -2.1854653925007437e+00 4.1172819046585776e+00 -1.2710006304809585e+00 + -2.4901860105123390e+00 3.9704804544048287e+00 -1.9793848599679433e+00 + -2.7017372048797119e+00 3.4419954521450800e+00 -2.6317860518815150e+00 + -2.7212800235009840e+00 2.5755817848648004e+00 -3.1405795650881165e+00 + -2.4588383339632820e+00 1.5110030174187847e+00 -3.3918715382577389e+00 + -1.9623488668971989e+00 4.6297858877330622e-01 -3.3328699438325340e+00 + -1.4170115474391169e+00 -4.5579468236036114e-01 -3.0419746122213747e+00 + -1.0291990285593677e+00 -1.2332720986408048e+00 -2.6961537965896922e+00 + -9.0474260126885320e-01 -1.8316185335792723e+00 -2.6761379734102175e+00 + -3.0819391414103675e-01 1.0654123363391110e+00 -3.8085940263764089e+00 + 3.8810054375742850e-02 1.5885159923379590e+00 -3.4357062310264403e+00 + 2.3211097922992929e-01 2.2376061787439898e+00 -3.4257507850931104e+00 + id 11681 + loc 9.1022682189941406e-01 4.6413293480873108e-01 1087 + blend 0.0000000000000000e+00 + interp 3.0589485713320608e+00:7.2454156136076764e-01:3.1984209693166621e-03:2.7083179065324525e-01:9.2482684942017235e-01:3.6829986313462049e-01:1.7843924212040072e+00:7.3762347686094065e-01:1.8543457521163229e+00:1.1413539245734374e+00:1.9150822677157862e+00:2.1118995733388748e+00:1.9899666552998174e+00:3.0589385713320607e+00:1.9997482693776707e+00:3.7607747170888106e-01:3.8940077002941509e+00 + CVs 20 + 2.5710865102131647e-01 4.0731683732834706e-01 -5.4113965990360346e-01 + 5.3092480475085901e-01 7.0044535555560572e-01 -9.1605877338363340e-01 + 8.2482530728790016e-01 9.3560106164179979e-01 -1.2286430521078167e+00 + 1.1409587563616610e+00 1.1329030938008797e+00 -1.5089129332323450e+00 + 1.4729711705671134e+00 1.2864617138135648e+00 -1.7409628207184744e+00 + 1.8100633971667339e+00 1.3912899010432462e+00 -1.9144889393618829e+00 + 2.1384092633243070e+00 1.4435280411918117e+00 -2.0253429212257501e+00 + 2.4420216074872236e+00 1.4415202881662594e+00 -2.0771603427589267e+00 + 2.7011610367591588e+00 1.3877417811861394e+00 -2.0850992704383113e+00 + 2.9009248606034830e+00 1.2960595979395406e+00 -2.0790431383762322e+00 + 3.0510662344968646e+00 1.1890552595234616e+00 -2.0853148037485219e+00 + 3.1737723808526304e+00 1.0822484184575802e+00 -2.1119497528652986e+00 + 3.2824407779173637e+00 9.8702382690756474e-01 -2.1578149355484078e+00 + 3.3764400652540307e+00 9.2680674587141187e-01 -2.2196515638129233e+00 + 3.4553006342853338e+00 9.1726603910757754e-01 -2.2783792942890568e+00 + 3.5306995288696514e+00 9.1256757817126555e-01 -2.3140289216669157e+00 + 3.6012330916704207e+00 8.7512116500862069e-01 -2.3329493229781204e+00 + 3.6818925285141040e+00 7.9464932657782172e-01 -2.3537719354711752e+00 + 3.9670457725804220e+00 5.7169647468052232e-01 -2.5358000347596299e+00 + id 11682 + loc 4.9169635772705078e-01 6.6430860757827759e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4336191535582153e-01:2.7262746855376718e-01:5.2986869834038774e-02:3.5522846947590991e-01:7.9612747429404995e-01:3.2266600734595435e-01:1.1231988821754282e+00:3.1478906443189958e-01:2.0136960513965088e+00:2.9697629580713503e-01:2.9317153569529153e+00:4.4335748173666800e-01:3.3949884196454203e+00 + CVs 20 + -3.1105495541528938e-01 4.5367803161942238e-01 1.9881086718830238e-01 + -5.5475723764173690e-01 8.4520905117936262e-01 3.8501691616515454e-01 + -7.5293842405025202e-01 1.2030093770431125e+00 5.9765329341337603e-01 + -9.7201161051956231e-01 1.5404781885725045e+00 7.8654400684021542e-01 + -1.2592254547426371e+00 1.8395451506974365e+00 8.7245078555237709e-01 + -1.6075959867757219e+00 2.0656436347658191e+00 8.2872409986614781e-01 + -1.9681519113276646e+00 2.1887385605455609e+00 6.6440039798517181e-01 + -2.2627308127075576e+00 2.1986036794241959e+00 3.9340090146603846e-01 + -2.4089310208576662e+00 2.1041781840384930e+00 4.6921473517693713e-02 + -2.3903216152745097e+00 1.9292423088009785e+00 -2.9887211331951735e-01 + -2.2718620324416712e+00 1.6897326177528047e+00 -5.8724297688365723e-01 + -2.0883333070137402e+00 1.3742207842127672e+00 -7.8611159201867709e-01 + -1.8852787154002859e+00 1.0019607964166479e+00 -8.5898621508477357e-01 + -1.7525945850216345e+00 6.4423320318633648e-01 -8.8096455940661023e-01 + -1.7340309479667273e+00 3.4749556161801398e-01 -9.8787472328856751e-01 + -1.8370541113921945e+00 1.6759037814950392e-01 -1.2125480565895721e+00 + -2.0677072134029761e+00 2.1540527102188028e-01 -1.4950358341651264e+00 + -2.3914113206708754e+00 5.4168775901350774e-01 -1.6277171497875886e+00 + -2.5225462656341788e+00 4.9351113594309926e-01 -1.8690439385547457e+00 + id 11683 + loc 8.7794613838195801e-01 6.1556744575500488e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4630397611097633e-01:3.3272772698920156e-01:3.3852418646261173e-01:4.2132851430527840e-01:9.3870834215972032e-01:3.1820928299388523e-01:1.4196719113672487e+00:4.1104217803968290e-01:2.1112539260919818e+00:3.2366779278469948e-01:2.9560590501150186e+00:4.3208418662376141e-01:3.2248019274334316e+00:4.4629951307121524e-01:3.9998182135508715e+00 + CVs 20 + 1.1093280027371499e-01 2.6732567730072043e-01 -3.3622556941547554e-01 + 2.2552524138504690e-01 5.3644827124949901e-01 -6.2447294909987860e-01 + 3.3565993305277281e-01 8.1350834055165322e-01 -9.0295343958606133e-01 + 4.3931464140989473e-01 1.1018936324440134e+00 -1.1940470106449348e+00 + 5.3333539662711882e-01 1.4004430964947374e+00 -1.5046448605539684e+00 + 6.0734986264369550e-01 1.7064322487818533e+00 -1.8328348490564357e+00 + 6.5381175832375427e-01 2.0150554691435767e+00 -2.1757937651487551e+00 + 6.7798330194395329e-01 2.3181973163448144e+00 -2.5416454153961521e+00 + 6.9468860410408850e-01 2.6010089356749928e+00 -2.9505311348122247e+00 + 7.2005693616263966e-01 2.8375490781442996e+00 -3.4262868561684243e+00 + 7.6708267579946354e-01 2.9893433494445505e+00 -3.9777334662295458e+00 + 8.4376027165504164e-01 3.0172531688931348e+00 -4.5817688876920037e+00 + 9.5322408457396368e-01 2.9015033057575712e+00 -5.1889652043340453e+00 + 1.0962064612475142e+00 2.6540997070320218e+00 -5.7410030918982056e+00 + 1.2705776054625237e+00 2.3105570475231860e+00 -6.1976747037812521e+00 + 1.4656126208593103e+00 1.9056096073564150e+00 -6.5526526199036876e+00 + 1.6595811415562158e+00 1.4544227749933141e+00 -6.8296505159142207e+00 + 1.8227939213930462e+00 9.6713190449051478e-01 -7.0506220637449752e+00 + 1.9670536437395365e+00 6.4695442976969264e-01 -7.1228576527261325e+00 + id 11684 + loc 6.0555869340896606e-01 7.3531579971313477e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7379466603998888e-01:4.0379256482808940e-01:4.1628892834755438e-01:4.7378992809332848e-01:9.9934072068420687e-01:3.2233286857186499e-01:1.4351775798550754e+00:4.4630206034030312e-01:2.0473157976630145e+00:3.5055981953988458e-01:2.9831759950847601e+00:3.6389453866873256e-01:3.8761678578578804e+00 + CVs 20 + -2.2306425491886928e-01 2.8164599607131591e-01 2.5770192193948166e-01 + -4.4570318136820242e-01 5.4950634157970379e-01 4.7636888339403277e-01 + -6.5945027440413795e-01 8.2554792381611464e-01 6.8250103157086217e-01 + -8.6618565193545460e-01 1.1132426637558208e+00 8.7884534863255614e-01 + -1.0811548719702169e+00 1.4025744409190786e+00 1.0465118961483428e+00 + -1.3146091654044754e+00 1.6788132508382489e+00 1.1653707150502108e+00 + -1.5654608551892188e+00 1.9236794140312732e+00 1.2224422326485445e+00 + -1.8195818008310212e+00 2.1203208079374352e+00 1.2149365988451271e+00 + -2.0553426407939499e+00 2.2552047969844908e+00 1.1375821909740140e+00 + -2.2427482047919245e+00 2.3160848072610145e+00 9.8444899455180479e-01 + -2.3521107817238178e+00 2.3138401172720249e+00 7.8602672584688427e-01 + -2.3821731937290322e+00 2.2806577827802625e+00 5.8592259338181640e-01 + -2.3651049149111820e+00 2.1998249436928456e+00 4.0849412448213385e-01 + -2.3392943720431250e+00 1.9986230722791536e+00 3.0355212679819776e-01 + -2.3104881554632719e+00 1.6565422295113730e+00 2.9912887269334265e-01 + -2.2387360393649720e+00 1.1751196197297038e+00 3.2755815943454492e-01 + -2.0690538244532668e+00 5.8142895833537322e-01 2.5536558166768275e-01 + -1.8232736183500799e+00 3.7286645848941320e-02 4.0299790395229851e-03 + -1.6824690613886280e+00 -1.9048761503101136e-01 -2.0638131774292634e-01 + id 11685 + loc 6.7077177762985229e-01 7.7967125177383423e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8395423924188880e-01:3.0466351505058670e-01:6.4573966460877463e-01:4.3107009867665363e-01:1.0758367252218137e+00:4.6865525331540708e-01:1.6877810015881987e+00:4.8394939969949641e-01:2.0048798495773466e+00:3.2803950325913916e-01:2.6179388771726835e+00:4.2593360456698792e-01:3.2861729659408683e+00:3.9752989107155390e-01:3.9849716392280965e+00 + CVs 20 + 1.8859376063157507e-01 2.8385066488131128e-01 -1.5758926992336278e-01 + 3.9755229836177175e-01 5.6565581828151679e-01 -2.7468306487212013e-01 + 6.1909607158690194e-01 8.3778136057318009e-01 -3.7695086625526031e-01 + 8.4757151679242770e-01 1.0968357873254448e+00 -4.7905807933613415e-01 + 1.0844026051437916e+00 1.3443104083994770e+00 -5.9186365039540834e-01 + 1.3354140722036589e+00 1.5775719190910569e+00 -7.4138894080203233e-01 + 1.6010848377364959e+00 1.7803862859883826e+00 -9.5776998870362529e-01 + 1.8716792740481167e+00 1.9323095247141659e+00 -1.2527026484108894e+00 + 2.1325056628507477e+00 2.0203939957598278e+00 -1.6182762580727128e+00 + 2.3691911673787920e+00 2.0393892488238077e+00 -2.0362795942248826e+00 + 2.5729819074625047e+00 1.9887033813486665e+00 -2.4880528013311780e+00 + 2.7390617505900856e+00 1.8651556723370071e+00 -2.9596643150687920e+00 + 2.8573691825797716e+00 1.6612575881851712e+00 -3.4382324710502434e+00 + 2.9038124520320379e+00 1.3790051996662067e+00 -3.9070599077359849e+00 + 2.8394048076625835e+00 1.0515752197387767e+00 -4.3472215992288579e+00 + 2.6340186455586836e+00 7.4709574856896532e-01 -4.7321460833869704e+00 + 2.3025326728955693e+00 5.3521220271294490e-01 -5.0304105365032923e+00 + 1.9058819731927452e+00 4.4612946798939623e-01 -5.2238758005096111e+00 + 1.5414112937785238e+00 3.4910140050006999e-01 -5.3971174542343290e+00 + id 11686 + loc 3.6482104659080505e-01 6.1413817107677460e-02 1085 + blend 0.0000000000000000e+00 + interp 5.3079360366116490e-01:3.8593724330376300e-01:8.2045799605554293e-01:5.3078829572512831e-01:1.1303893294206251e+00:4.2060322827877789e-01:1.9128749561127349e+00:3.1553650802769539e-01:2.1824050002787558e+00:3.5719872041289519e-01:3.0275267071906780e+00:4.9718632240001487e-01:3.9984233711853294e+00 + CVs 20 + 4.3936724326167798e-01 4.1284287739388292e-01 3.0235213622943852e-01 + 7.8089373890736102e-01 7.7854788039177480e-01 5.9441825710859464e-01 + 1.0698554248416206e+00 1.1046464353092080e+00 9.2674115145465985e-01 + 1.3001892876677632e+00 1.3906058166579858e+00 1.3357294291256354e+00 + 1.4370095408805010e+00 1.6127811703611306e+00 1.8181740915077245e+00 + 1.4592319828147446e+00 1.7474834934984580e+00 2.3433641960995431e+00 + 1.3673199144225323e+00 1.7812664164113250e+00 2.8646226748407488e+00 + 1.1821853855415159e+00 1.7154226472831655e+00 3.3351306112828265e+00 + 9.4236868903585447e-01 1.5639437330030195e+00 3.7186969599731428e+00 + 6.9790816686287727e-01 1.3511358782078891e+00 3.9989802254848712e+00 + 4.9132012009442461e-01 1.1068869524882159e+00 4.1825775537743608e+00 + 3.4171031561579501e-01 8.6046010034803899e-01 4.2890572683069195e+00 + 2.4199069975038090e-01 6.3359586004828206e-01 4.3433284909329632e+00 + 1.7194545650027204e-01 4.3536385625381679e-01 4.3712189983079677e+00 + 1.1303962551589750e-01 2.6509415039562972e-01 4.3937893852089580e+00 + 5.2613206869597105e-02 9.2982261719421158e-02 4.4370816307556495e+00 + 8.8544158433271902e-03 -1.3090327334212215e-01 4.5339077947557982e+00 + 1.5798974797737564e-02 -3.9958595653363060e-01 4.7092884742444765e+00 + 8.9536725182850274e-02 -6.2567381666401634e-01 4.9737132090578386e+00 + id 11687 + loc 5.6474059820175171e-01 2.7273714542388916e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9840486200710815e-01:4.2194051466246618e-01:1.0831803346080682e-01:2.7835898217094723e-01:6.5763099383725132e-01:4.9839987795848811e-01:1.2405517544756541e+00:4.2317599982434478e-01:1.8525434643251975e+00:2.8082720689577934e-01:2.0894739888372023e+00:4.1151410566419760e-01:2.9978461074958167e+00:3.8196240879045867e-01:3.6029305911605620e+00 + CVs 20 + 2.4813787742641585e-01 4.0798981833510639e-01 -3.0033514248801907e-01 + 5.2338566525967756e-01 7.9891831260593960e-01 -5.4758953199227145e-01 + 8.2436758091111617e-01 1.1804646907043308e+00 -7.7035099101379356e-01 + 1.1635563646702893e+00 1.5388884385341934e+00 -9.7838657444403188e-01 + 1.5570260868173806e+00 1.8456358148434382e+00 -1.1712972028117195e+00 + 2.0126963596083609e+00 2.0657336630764012e+00 -1.3423718815044032e+00 + 2.5228454153053628e+00 2.1640973317554022e+00 -1.4716902409841792e+00 + 3.0588875074246817e+00 2.1149302527706331e+00 -1.5259092944874078e+00 + 3.5685867719290179e+00 1.9001169175523918e+00 -1.4753102923242787e+00 + 3.9660729224494529e+00 1.5038957470816245e+00 -1.3038535130446165e+00 + 4.1441457899885386e+00 9.5680448666786677e-01 -1.0265966941299580e+00 + 4.0663077088877859e+00 3.6023932015069099e-01 -7.0294883123374285e-01 + 3.8107111375595930e+00 -1.6318640444281152e-01 -3.5380549792405036e-01 + 3.5567365538572417e+00 -5.1123807005839184e-01 7.9272806338745450e-02 + 3.4454983249069442e+00 -6.0800124742726103e-01 6.3209199890610823e-01 + 3.5122294126654796e+00 -3.5939553868684015e-01 1.2084886227085143e+00 + 3.7435742112595265e+00 2.0671225496686385e-01 1.5871714338557479e+00 + 4.0158735930242235e+00 7.1584416791757843e-01 1.7417483538088991e+00 + 4.1089385661966453e+00 8.0257378177747096e-01 2.1088431255854583e+00 + id 11688 + loc 1.5975388884544373e-01 4.7498098015785217e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3162675162229147e-01:4.3162243535477529e-01:8.4647454741605432e-01:4.2028386870368428e-01:1.2546725351171206e+00:3.9375246315610024e-01:1.9771629359784186e+00:3.5892944313052572e-01:2.6233784177872397e+00:4.2907695165806636e-01:3.2285022454456103e+00:3.6710687710586315e-01:3.9993527725037441e+00 + CVs 20 + -2.2562813873782078e-01 3.5105500616702812e-01 -1.2068612184869151e-01 + -4.6994620092180045e-01 7.2005434652570410e-01 -2.3253854817250877e-01 + -7.2876160880876439e-01 1.1130852594965144e+00 -3.4613285918091191e-01 + -9.7471213214374752e-01 1.5382894509869955e+00 -4.5616134934400354e-01 + -1.1816955065338679e+00 1.9584470295358805e+00 -5.4363619220581594e-01 + -1.3824908655581782e+00 2.2584502386053114e+00 -6.0608250207139447e-01 + -1.5988790339767687e+00 2.3580838590591613e+00 -6.5701373817663966e-01 + -1.8417852488450819e+00 2.3157031394281309e+00 -7.2425445572357194e-01 + -2.1089161725509684e+00 2.1553383878331149e+00 -8.4313551182211377e-01 + -2.3504402168701328e+00 1.8836264150219379e+00 -1.0467772573045593e+00 + -2.5125466185587255e+00 1.5389398843950763e+00 -1.3585886843355972e+00 + -2.5667079235115220e+00 1.1762665802012113e+00 -1.7477989444334172e+00 + -2.5326325668193834e+00 8.2443626755026678e-01 -2.1372179990570110e+00 + -2.4283710382795181e+00 4.8632365596924404e-01 -2.4109897890458982e+00 + -2.2654366245160293e+00 1.8998741661536450e-01 -2.4567205209114711e+00 + -2.0536254600268635e+00 3.1603801682778210e-02 -2.2577864999776924e+00 + -1.8472225754623834e+00 2.3074029823570241e-01 -1.8191291066974040e+00 + -1.8555600489033457e+00 7.2316240887263195e-01 -1.4443555905666126e+00 + -1.5719027646422115e+00 5.5726722241026017e-01 -1.3351730906399961e+00 + id 11689 + loc 5.6147783994674683e-01 3.0502748489379883e-01 1090 + blend 0.0000000000000000e+00 + interp 4.7519862233032661e-01:2.6247465955662219e-01:4.2078030045341863e-01:4.7519387034410332e-01:1.2837427461457305e+00:3.0945627926376418e-01:2.1480434523907261e+00:4.6482465209093105e-01:2.9512012354510038e+00 + CVs 20 + -6.6202666065725252e-02 4.8270287815933316e-01 -2.6761998426735473e-01 + -5.6838861770310223e-02 8.9472578552306947e-01 -4.3040354066475489e-01 + -1.2766524647795485e-02 1.2756020875760414e+00 -5.3485671079837438e-01 + 5.5522070316478045e-02 1.6332169279780802e+00 -5.9164128253668036e-01 + 1.5303972666963050e-01 1.9460707986697243e+00 -5.9028388719310265e-01 + 2.7224664073036708e-01 2.1859924763903331e+00 -5.2675561957132011e-01 + 3.8738395334655595e-01 2.3224984753628841e+00 -4.1010756639961055e-01 + 4.5806130895687913e-01 2.3452883436352288e+00 -2.7256852801282916e-01 + 4.6695361070694275e-01 2.2903153207189293e+00 -1.5172350215171460e-01 + 4.4501022840173499e-01 2.1989137572335729e+00 -4.2891115198857577e-02 + 4.1778314773015895e-01 2.0686951733072139e+00 7.3673221571512904e-02 + 3.8476843924254150e-01 1.8892675026207795e+00 1.8921940456147124e-01 + 3.4255713016502143e-01 1.6607527925771168e+00 2.8363472978515336e-01 + 2.9288863128632853e-01 1.3851889659747907e+00 3.3731067819486993e-01 + 2.3808005178888453e-01 1.0737104991547479e+00 3.2683883540803221e-01 + 1.9002643389453633e-01 7.3003258200863430e-01 2.2817417523200975e-01 + 1.8089747990166671e-01 3.3774564251568295e-01 -7.2981641669678937e-03 + 2.3964219850857532e-01 -4.5985724315813784e-02 -4.2090275925199128e-01 + 2.0138194040611940e-01 -1.7226237671185496e-01 -7.0913615944104191e-01 + id 11690 + loc 4.7062194347381592e-01 4.0300995111465454e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8129244304304408e-01:4.8128763011861370e-01:2.6984918844660954e-01:3.3286085963078282e-01:8.6367422030716789e-01:4.3390680579636898e-01:1.1493016612875404e+00:3.4561250719886494e-01:2.0460462935002224e+00:4.1434685417465317e-01:2.9544958369386158e+00:2.9138822015123644e-01:3.3003367115603446e+00:4.3462331139989990e-01:3.9404674528496750e+00 + CVs 20 + 3.4145441098850082e-01 4.0047638312554473e-01 2.7149767177108747e-01 + 6.4874532845772015e-01 7.4323879751742516e-01 5.3314726876588225e-01 + 9.5619013419021726e-01 1.0635257948012315e+00 8.0360896844066632e-01 + 1.2458619417461454e+00 1.3789214043899749e+00 1.1228926331848386e+00 + 1.4634194325738765e+00 1.6745626055432212e+00 1.5135381833357471e+00 + 1.5662557248622471e+00 1.9224839995686422e+00 1.9637965740417316e+00 + 1.5308734077687178e+00 2.0948197093320715e+00 2.4333119641365206e+00 + 1.3486676677400304e+00 2.1650917428888388e+00 2.8583432713402313e+00 + 1.0523938972130464e+00 2.1120999990726488e+00 3.1537981492656715e+00 + 7.3870042463869279e-01 1.9565618047924265e+00 3.2760869024448707e+00 + 4.9690427363821321e-01 1.7477003687489379e+00 3.2644891459295198e+00 + 3.7326757833412383e-01 1.5259164637500231e+00 3.1793334212997957e+00 + 3.3005132035909757e-01 1.3202044308633374e+00 3.0680910620596205e+00 + 2.4975549309611367e-01 1.0985457386276547e+00 2.9405599500444537e+00 + 7.8453033798102645e-02 8.4456095861792768e-01 2.7731098063258353e+00 + -1.7560294883086441e-01 6.3281527753729883e-01 2.5568549615300129e+00 + -4.8169694672605379e-01 5.4008001943948880e-01 2.3171181461524948e+00 + -7.7325604311754714e-01 5.9009614877203620e-01 2.0894332482725559e+00 + -1.0654990178194328e+00 6.4622314365540245e-01 1.8616310519425510e+00 + id 11691 + loc 6.0716462135314941e-01 7.9631483554840088e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3912737361310239e-01:3.5833646313156309e-01:3.3887551202298472e-03:4.0660355486829797e-01:6.0929491320943141e-01:4.3161181287427303e-01:1.1077076293398835e+00:3.8311484211162894e-01:1.9075519103715917e+00:4.3912298233936625e-01:2.5144086549872866e+00:3.5317510023226717e-01:3.0506833914222864e+00 + CVs 20 + 1.2811058822579041e-01 9.3839798475017677e-01 -3.8008196017227219e-01 + 3.1791733220447743e-01 1.9227946651721550e+00 -6.2384359625078301e-01 + 6.2289445305935931e-01 2.9046162149004342e+00 -6.3328335417515558e-01 + 1.0451979330228258e+00 3.7405104121056514e+00 -3.4060211005762819e-01 + 1.5378692693002383e+00 4.2553553183890127e+00 2.1262540493259574e-01 + 2.0123437586958137e+00 4.3585604823756690e+00 8.6219946844589090e-01 + 2.4151612125855926e+00 4.1251412443986828e+00 1.4569400208984833e+00 + 2.7477272371294066e+00 3.6906803784212334e+00 1.9649462179405535e+00 + 2.9870887864232700e+00 3.1459129284147966e+00 2.4298823997078385e+00 + 3.0572419831784297e+00 2.5232921748770911e+00 2.9098403550359522e+00 + 2.8736114706573170e+00 1.8940567323294455e+00 3.3881110472830929e+00 + 2.4563464982137098e+00 1.3724367411675806e+00 3.8208126151996686e+00 + 1.8469809179200531e+00 9.5099570656858701e-01 4.1905575018247632e+00 + 1.0415105764151127e+00 5.7130648592887168e-01 4.4244691414670347e+00 + 3.1271701441505956e-02 1.1549117382639906e-01 4.5355930318963695e+00 + -9.2231272105803896e-01 -7.5843966403478302e-01 4.8668564199939954e+00 + -1.1611126394284506e+00 -1.7156623261170691e+00 5.6507375725169915e+00 + -8.8896736174223845e-01 -2.1828956315745920e+00 6.6070430134071767e+00 + -4.3131733107485776e-01 -2.1865899698597189e+00 7.6778893283471774e+00 + id 11692 + loc 1.1374016106128693e-01 2.3089180886745453e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6293806222163697e-01:4.6293343284101479e-01:1.5345410865970510e-01:3.5290240853148064e-01:9.3196707562505243e-01:3.3207792729327568e-01:1.2831734050471384e+00:4.0849509996913957e-01:1.9382692806769202e+00:2.7741205497309279e-01:2.3898219895502737e+00:3.8299031747854811e-01:3.0090627395845186e+00:2.8932061956807570e-01:3.4798020220506398e+00 + CVs 20 + -1.5974065780498098e-01 2.5538143336603886e-01 -4.3035557254941695e-02 + -3.3468606226602904e-01 5.4826833653657947e-01 -6.5224511791027590e-02 + -5.0405778514497790e-01 8.6297351978405912e-01 -8.3046961045673495e-02 + -6.6643326362253952e-01 1.1839021791572040e+00 -1.1103186372658164e-01 + -8.3409425603403486e-01 1.4990933826882920e+00 -1.6043949644629696e-01 + -1.0113073963085208e+00 1.7931377672932558e+00 -2.3909391525250179e-01 + -1.1907375438876211e+00 2.0487438750163687e+00 -3.4811660496469166e-01 + -1.3587095348692604e+00 2.2528200594956229e+00 -4.8371034579129102e-01 + -1.5068226976207353e+00 2.4009601247879200e+00 -6.5208151367036749e-01 + -1.6283685592731243e+00 2.4856300686810253e+00 -8.7502771826351367e-01 + -1.7123237426600078e+00 2.5057061475636901e+00 -1.1564850106463109e+00 + -1.7579729823165149e+00 2.4662418797971624e+00 -1.4909717807194416e+00 + -1.7780479479832341e+00 2.3478793919395424e+00 -1.8536031818118790e+00 + -1.7974255577724074e+00 2.1489030549075183e+00 -2.1492002345140273e+00 + -1.8338156637013014e+00 1.9280684988629777e+00 -2.2993519676207503e+00 + -1.8737018912216077e+00 1.7053292645080149e+00 -2.3119359857611004e+00 + -1.8754412077740739e+00 1.4480790645918520e+00 -2.2528996312672143e+00 + -1.7952378728081853e+00 1.1650463514654972e+00 -2.2874690697984685e+00 + -1.6030909614856417e+00 9.9135621185195721e-01 -2.6767802341113422e+00 + id 11693 + loc 2.4253176152706146e-01 7.8304010629653931e-01 410 + blend 0.0000000000000000e+00 + interp 4.2817474196502209e-01:4.0601904316504145e-01:4.6464088133266335e-01:2.9896725780441774e-01:1.0009255314694541e+00:3.0535149778952364e-01:1.9516037804934778e+00:2.6321921974950274e-01:2.7744515728004604e+00:4.2817046021760247e-01:3.2442009235633291e+00:2.9117735744304751e-01:3.9777075411820908e+00 + CVs 20 + 3.3224450176523601e-01 1.7925305507459877e-01 -8.0048616910654263e-02 + 5.9252981581699959e-01 3.1265484164674440e-01 -1.5778714427326318e-01 + 8.3926562067530175e-01 4.2981781941030350e-01 -2.3538158153591260e-01 + 1.1053158486186703e+00 5.4816593876414832e-01 -3.1338753055858554e-01 + 1.3891154150252303e+00 6.6499458538644562e-01 -3.9221278532312398e-01 + 1.6877747794764075e+00 7.7724748162318580e-01 -4.6905850137759780e-01 + 2.0004801923526769e+00 8.8305802996539240e-01 -5.3616344615109535e-01 + 2.3272025451746856e+00 9.8046756605758978e-01 -5.8426085572816766e-01 + 2.6643243123162348e+00 1.0667368242158097e+00 -6.0646061280915387e-01 + 3.0049230284776978e+00 1.1406038126376867e+00 -5.9840327378305036e-01 + 3.3494281065176463e+00 1.2016502753540850e+00 -5.5760112404789486e-01 + 3.7114508365716419e+00 1.2395436223833656e+00 -4.9442903941837835e-01 + 4.0949483783390965e+00 1.2307951723839121e+00 -4.4901725002660353e-01 + 4.4754448523906580e+00 1.1645425782802625e+00 -4.6386076781326335e-01 + 4.8274483126663945e+00 1.0512638595714845e+00 -5.4511345785543797e-01 + 5.1308753668344593e+00 9.0880160759758932e-01 -6.7996429199470598e-01 + 5.3659770855204059e+00 7.6076883972537690e-01 -8.5146507158449425e-01 + 5.5300064934544331e+00 6.2691862813131749e-01 -1.0368689484668954e+00 + 5.6657721554075238e+00 5.0394327426562846e-01 -1.2041402388991509e+00 + id 11694 + loc 3.5127013921737671e-01 2.2895097732543945e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0361480360621558e-01:4.0455551852368782e-01:9.4060427422187376e-01:2.6381272456960764e-01:1.3587306200619564e+00:3.6810210807819671e-01:1.9923080612291564e+00:3.9442092171154708e-01:2.8467544635663042e+00:5.0360976745817954e-01:3.2440609513212522e+00:3.5825286322233191e-01:3.9995861582759327e+00 + CVs 20 + -2.9877085204590503e-01 2.7302178940031696e-01 -1.4452521190637127e-02 + -6.0067161900531363e-01 5.6995909037657388e-01 -4.6211005541950470e-02 + -9.1574322536081543e-01 9.0455740470290324e-01 -9.1740032426512741e-02 + -1.2262972077168508e+00 1.2931379360395705e+00 -1.4105419193954696e-01 + -1.4932990828680228e+00 1.7016847565456135e+00 -1.8393400115998387e-01 + -1.7281858144429723e+00 2.0161253340915808e+00 -2.2487751332578959e-01 + -1.9566029099701874e+00 2.1553259920609236e+00 -2.7131256325071285e-01 + -2.1930503530083594e+00 2.1604439665602717e+00 -3.3660664831001752e-01 + -2.4392533575568387e+00 2.0725216625069511e+00 -4.4334254056859357e-01 + -2.6677091072427452e+00 1.9132489943938740e+00 -6.1207788769771443e-01 + -2.8470814922585705e+00 1.7153267660556708e+00 -8.5508567586553930e-01 + -2.9495242589906443e+00 1.5166261967412324e+00 -1.1526115772895578e+00 + -2.9800981298283462e+00 1.3382007538338947e+00 -1.4531116288742676e+00 + -2.9566076346847394e+00 1.1827706222524674e+00 -1.7005245620445613e+00 + -2.8911698051925545e+00 1.0579952709320706e+00 -1.8475042769431913e+00 + -2.8083332263527501e+00 9.9259704049090258e-01 -1.8825550303323801e+00 + -2.7531883971010589e+00 1.0522315016328223e+00 -1.8263250356005887e+00 + -2.8043831097491889e+00 1.2142608034166984e+00 -1.7902690104853651e+00 + -2.6048039842024999e+00 1.0450554822077009e+00 -1.7676787841399937e+00 + id 11695 + loc 4.7732022404670715e-01 6.0699170827865601e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4880568776819380e-01:3.3805330761364244e-01:1.5777718644188865e-02:4.4880119971131616e-01:6.5422546363389467e-01:3.8175902737256123e-01:1.0461593428365956e+00:4.3345303209996405e-01:1.8032196869239188e+00:3.7404322008739294e-01:2.2205084908709325e+00:2.5018760884278413e-01:3.1651856488981855e+00 + CVs 20 + 1.4302368196361886e-01 2.8175964129701547e-01 -1.0824237632237851e-01 + 2.9936733793220299e-01 5.4535733710572842e-01 -2.1156957229486312e-01 + 4.5160168455786381e-01 7.8675731992405629e-01 -3.2057935923956227e-01 + 5.9073664314626373e-01 1.0050698951978361e+00 -4.4136219506147184e-01 + 7.1696840291261010e-01 1.1999382063566131e+00 -5.7573516552174198e-01 + 8.3219813522731689e-01 1.3708483059687313e+00 -7.2453162173304198e-01 + 9.4256243635418802e-01 1.5143682350149277e+00 -8.8696508995076229e-01 + 1.0552324153229873e+00 1.6244763102896780e+00 -1.0598836952056110e+00 + 1.1721258848247982e+00 1.6967865892038971e+00 -1.2390482184604736e+00 + 1.2898382841475400e+00 1.7288861883776780e+00 -1.4218483397326116e+00 + 1.4055085881842515e+00 1.7206189198466033e+00 -1.6042154797164214e+00 + 1.5209151239011420e+00 1.6753715941008513e+00 -1.7791613304110201e+00 + 1.6402832294411647e+00 1.5909101806458257e+00 -1.9422308499048790e+00 + 1.7675564149579186e+00 1.4430588667585653e+00 -2.0937345206649205e+00 + 1.8979438954480967e+00 1.1986834911390529e+00 -2.2423016508044382e+00 + 1.9908569487562195e+00 8.5491724046838968e-01 -2.4119227752481587e+00 + 1.9828962266502892e+00 4.4772595588743003e-01 -2.6217788712450472e+00 + 1.8234413901540107e+00 3.9664420881588947e-02 -2.8635621096736892e+00 + 1.5184461993967733e+00 -2.4380364842173552e-01 -3.0635683003904943e+00 + id 11696 + loc 9.4097179174423218e-01 9.6561902761459351e-01 1085 + blend 0.0000000000000000e+00 + interp 5.4864453789397916e-01:2.8576582135522272e-01:3.7027769114858355e-01:2.7832664422502928e-01:1.0384156087279159e+00:2.9385322530747987e-01:1.9814888036029847e+00:2.2829024852596355e-01:2.9999308541003820e+00:5.4863905144860026e-01:3.8686599270072386e+00 + CVs 20 + 5.2404041623481945e-03 4.6630127324284026e-01 2.8242088589875258e-02 + -4.4460540107998020e-02 9.1248465489541297e-01 6.8875350508826316e-03 + -1.3466768855440403e-01 1.3403082082213726e+00 -5.5606813002234246e-02 + -2.6701662414813215e-01 1.7368625007049927e+00 -1.6638714639229291e-01 + -4.4238975986660856e-01 2.0732895299500891e+00 -3.3686415844058903e-01 + -6.4788920015777385e-01 2.3172028714864279e+00 -5.7069993958202803e-01 + -8.5357109757192218e-01 2.4434361075433300e+00 -8.5776661276459243e-01 + -1.0220048952472434e+00 2.4507326930070299e+00 -1.1731741058740437e+00 + -1.1357956328583558e+00 2.3638204867155972e+00 -1.4883199922533490e+00 + -1.2165529635834298e+00 2.2126873312213595e+00 -1.7884149951976167e+00 + -1.3002993199525024e+00 2.0068900414116233e+00 -2.0721559666510680e+00 + -1.4049542359678866e+00 1.7388175333196934e+00 -2.3307708295885012e+00 + -1.5397115288791021e+00 1.3963442606762548e+00 -2.5432531733568942e+00 + -1.7216334223217724e+00 9.6317955374760711e-01 -2.6764415177585246e+00 + -1.9682040342229601e+00 4.3024703256678709e-01 -2.6694378714046194e+00 + -2.2728751523771851e+00 -1.3439070790479413e-01 -2.4596029159958936e+00 + -2.6311736620656028e+00 -6.0254748708199246e-01 -2.0571875090282545e+00 + -3.0352805709976720e+00 -8.7099431439477693e-01 -1.5371605400407971e+00 + -3.1693420068896812e+00 -8.8147507637925204e-01 -1.3499513973648229e+00 + id 11697 + loc 7.2994083166122437e-01 9.4491326808929443e-01 1077 + blend 0.0000000000000000e+00 + interp 4.5846466126961988e-01:3.0903253062898822e-01:3.8734344796978126e-02:3.9587324654258443e-01:9.9341088589201221e-01:3.7582803666834746e-01:1.7654792214877051e+00:4.1657841373890253e-01:2.2129267658958907e+00:3.0836052413171505e-01:2.9975731072050129e+00:4.5846007662300720e-01:3.3860774389388526e+00 + CVs 20 + 2.3204524872874910e-01 3.4890713566567044e-01 -3.1356348164285663e-01 + 4.7090942324704160e-01 6.7035283341900587e-01 -6.3286013997910451e-01 + 6.9160530944406606e-01 9.5569021000551768e-01 -9.6907280461201506e-01 + 8.7612031854468730e-01 1.1969283432977305e+00 -1.3222430180120233e+00 + 1.0243283903096077e+00 1.3904299769898867e+00 -1.6776283026899990e+00 + 1.1548097238764767e+00 1.5407781592097896e+00 -2.0113704796841203e+00 + 1.2858732659625427e+00 1.6606885941556377e+00 -2.3075509917006416e+00 + 1.4244631783727240e+00 1.7640911176233309e+00 -2.5642440565197728e+00 + 1.5713586036463705e+00 1.8604024191840476e+00 -2.7875709730241818e+00 + 1.7291427368838996e+00 1.9540117683235847e+00 -2.9899936500460944e+00 + 1.9088095330178709e+00 2.0407323071952455e+00 -3.1887968804114424e+00 + 2.1296451867004214e+00 2.1010585523014744e+00 -3.3998728700695957e+00 + 2.4056585724803163e+00 2.0876230934015800e+00 -3.6382808483069562e+00 + 2.6978174081730275e+00 1.9363863194844066e+00 -3.8961283556051325e+00 + 2.9404574320716859e+00 1.6393128841122666e+00 -4.1303076875058826e+00 + 3.1285953641731017e+00 1.1857807316104789e+00 -4.3018804029042172e+00 + 3.2043974518031093e+00 4.5881153641842976e-01 -4.3767367261059240e+00 + 2.8673547394738939e+00 -3.6686291809924776e-01 -4.3532524213700441e+00 + 2.5873564102828461e+00 -5.3065774596361615e-01 -4.3242615284639072e+00 + id 11698 + loc 7.4037760496139526e-01 4.9938169121742249e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7331248888253225e-01:4.2295723116351164e-01:1.0885389677361967e-04:3.0832064223615413e-01:4.5803303776186655e-01:4.7330775575764344e-01:9.8932430674090466e-01:4.2587166438378998e-01:1.2529694741741251e+00:3.1015096904353473e-01:1.9584442159798359e+00:4.3040308772680796e-01:2.8699694292894606e+00:4.6276068920084634e-01:3.2716136226372257e+00 + CVs 20 + 1.1477278610922537e-01 3.8891791898817196e-01 -2.2789359027958334e-01 + 2.5665621810482625e-01 7.3407195745599341e-01 -4.2975267107198678e-01 + 4.1069616263647224e-01 1.0488887901475494e+00 -6.2497052436529210e-01 + 5.7116795667927212e-01 1.3339035652565685e+00 -8.2003390874060877e-01 + 7.4178367217884500e-01 1.5842634965226445e+00 -1.0134471618861833e+00 + 9.2621981784264751e-01 1.7967316552287080e+00 -1.2031474213152518e+00 + 1.1297215355478705e+00 1.9673112454750084e+00 -1.3895997553763504e+00 + 1.3624993304845971e+00 2.0874944523073200e+00 -1.5717021716255040e+00 + 1.6338790615067085e+00 2.1429827133428034e+00 -1.7348024046172830e+00 + 1.9373173363644742e+00 2.1197033820295568e+00 -1.8545160707322523e+00 + 2.2414826110754253e+00 1.9947034194907771e+00 -1.9024440248627217e+00 + 2.4817384649116496e+00 1.7472415727211354e+00 -1.8523770885524600e+00 + 2.5855877787600572e+00 1.3926457268690382e+00 -1.7040518556621542e+00 + 2.5212652176303134e+00 9.7596609940997570e-01 -1.4576962955517621e+00 + 2.3496266271022286e+00 5.7466574761455314e-01 -1.0841293894452155e+00 + 2.1894305892394197e+00 3.1125095091900767e-01 -5.7817479663227045e-01 + 2.1268346601702022e+00 3.0721088908051503e-01 -3.3074538423688793e-02 + 2.1718128772470515e+00 5.3965171226456654e-01 4.4471698999434617e-01 + 2.2491714738191337e+00 8.0371894315631454e-01 9.9355452084055595e-01 + id 11699 + loc 3.7436714768409729e-01 8.1133238971233368e-02 1054 + blend 0.0000000000000000e+00 + interp 5.6794111127305125e-01:5.6793543186193851e-01:2.8574055830502165e-01:5.5713318483700158e-01:8.0219506202337176e-01:4.5053078181041800e-01:1.0026437724824691e+00:5.6620835250803769e-01:1.7999957495233994e+00:5.4059576944438903e-01:2.2702939448114421e+00:4.5221146699780618e-01:3.0944575726505597e+00:3.8011734625226917e-01:3.9984481993527421e+00 + CVs 20 + -2.3578503789490396e-01 3.5527434913297362e-01 -1.7242002556530511e-01 + -4.1403269154138933e-01 6.9333434171717712e-01 -3.2364273019147882e-01 + -5.3650229718526743e-01 1.0431258374125965e+00 -4.6850413241456790e-01 + -6.0703791790455885e-01 1.4235774177458791e+00 -6.3158877544816738e-01 + -6.4146946424884810e-01 1.8229083410692046e+00 -8.6044468741195312e-01 + -6.6432100583798892e-01 2.2049832927008439e+00 -1.1926339309043270e+00 + -6.9603013122151891e-01 2.5287138226017514e+00 -1.6304318066116330e+00 + -7.4498045208144892e-01 2.7616354287012754e+00 -2.1518210156474193e+00 + -7.9082834300463289e-01 2.8904376501357065e+00 -2.7406747331019594e+00 + -7.8783250054585952e-01 2.9052768216682807e+00 -3.3918923304484867e+00 + -6.7683985924652146e-01 2.7790856670994115e+00 -4.0842618291938164e+00 + -4.1832612135166558e-01 2.4724132749022631e+00 -4.7468230713269985e+00 + -8.7678645040870862e-02 1.9809232087370048e+00 -5.2625907387307134e+00 + 1.2931987652807475e-01 1.4396571260137496e+00 -5.5149109465282091e+00 + 1.7605891845165056e-01 9.9500589585159682e-01 -5.5438496834168660e+00 + 1.8424802599537154e-01 5.3428539407938280e-01 -5.5243394837262860e+00 + 1.9493311542260192e-01 -2.7799048950449129e-02 -5.4591885036785248e+00 + 3.4118874007277250e-01 -3.6235015596757680e-01 -5.2510307037644797e+00 + 7.1156072879260690e-01 -1.7789859729976465e-01 -5.0545844561834343e+00 + id 11700 + loc 8.8600069284439087e-01 3.2224339246749878e-01 1070 + blend 0.0000000000000000e+00 + interp 4.4645569696152509e-01:2.8808070499282545e-01:1.3493127283515705e-02:4.4645123240455548e-01:8.2148273123877125e-01:3.2791442572090135e-01:1.2517523227927876e+00:2.7657483487227758e-01:1.9882345168390869e+00:2.5214805262929818e-01:2.8349556188327267e+00:4.1574967585937217e-01:3.3970644431746049e+00 + CVs 20 + 1.9249463227032426e-01 3.0488732603532498e-01 -7.1922984476864266e-02 + 3.6316690182396277e-01 5.6380771569132460e-01 -8.6385930105491116e-02 + 5.0874293372820834e-01 7.9155777972416719e-01 -7.3945393396057546e-02 + 6.2678182934017079e-01 9.9132206276822465e-01 -4.1913160550824502e-02 + 7.2655471543118966e-01 1.1723377909049497e+00 3.5962378166891296e-02 + 8.1908381164632216e-01 1.3657926841737820e+00 1.6975667825939178e-01 + 9.1068323026551834e-01 1.6192628407882075e+00 3.1305994761707778e-01 + 1.0054200366774810e+00 1.9519859470786836e+00 3.9243924980871170e-01 + 1.1171227598592481e+00 2.3446454032257664e+00 3.6532213870464658e-01 + 1.2797205947500889e+00 2.7557543723549225e+00 2.0713226322226519e-01 + 1.5387076097005727e+00 3.0880301028005688e+00 -9.3532804200428421e-02 + 1.8891361580479531e+00 3.2160097446602216e+00 -4.7426472111516849e-01 + 2.2707926035894612e+00 3.1147928529866591e+00 -8.3789079342381867e-01 + 2.6342168901150966e+00 2.8398384102280527e+00 -1.1238739816034229e+00 + 2.9611203822647965e+00 2.4580880876435334e+00 -1.3069399239029824e+00 + 3.2456875304077615e+00 1.9910724003276361e+00 -1.3867292089857441e+00 + 3.4463897191558837e+00 1.4251620431246796e+00 -1.3448526838863311e+00 + 3.4992827139192739e+00 8.2827598366445743e-01 -1.1630310293931243e+00 + 3.5482877270963602e+00 4.6034416937080302e-01 -1.0577896197449372e+00 + id 11701 + loc 6.7153406143188477e-01 9.3083000183105469e-01 410 + blend 0.0000000000000000e+00 + interp 4.1799570972777489e-01:4.1799152977067761e-01:7.3627132879351365e-01:3.6675349282548647e-01:1.6740403989926025e+00:2.9183089413501173e-01:2.8697523795751554e+00:3.1509471249651144e-01:3.9999982365113387e+00 + CVs 20 + 4.1553084686784875e-01 1.1663566186695927e-01 -2.1471863571564245e-01 + 7.3680285223265507e-01 1.8281487790057677e-01 -3.8303017978271892e-01 + 1.0314217980529907e+00 2.2079296941023313e-01 -5.3184383267061752e-01 + 1.3339734360356796e+00 2.4258363818777884e-01 -6.7200287579607487e-01 + 1.6389786322731679e+00 2.4586731757659919e-01 -7.9976278541325607e-01 + 1.9395975154590417e+00 2.2991453228804770e-01 -9.1044458690278074e-01 + 2.2273647385152242e+00 1.9522762836706575e-01 -9.9935511781209518e-01 + 2.4930810305870867e+00 1.4342139480926419e-01 -1.0631426965948179e+00 + 2.7278625063307675e+00 7.6820248368537625e-02 -1.1014918292116844e+00 + 2.9244526173792948e+00 -1.9316299459344322e-03 -1.1179458779143832e+00 + 3.0807672220081326e+00 -8.8392691506752996e-02 -1.1173868774032023e+00 + 3.2056723864830543e+00 -1.7342213304168830e-01 -1.0975408458578735e+00 + 3.3177737878556761e+00 -2.5002113201652443e-01 -1.0470754800191062e+00 + 3.4321292973010129e+00 -3.3155023972725561e-01 -9.6829498812566295e-01 + 3.5486723927859329e+00 -4.4032330826095900e-01 -8.8108175600116279e-01 + 3.6612183856841716e+00 -5.8500712523092036e-01 -7.9711647472457781e-01 + 3.7661173136855077e+00 -7.6685078730659484e-01 -7.1948090439906653e-01 + 3.8545686179374030e+00 -9.8394942831472543e-01 -6.5705986320836984e-01 + 3.8443672173064023e+00 -1.2532227891162815e+00 -7.0225932191080997e-01 + id 11702 + loc 6.0992670059204102e-01 6.0355240106582642e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9382884255569176e-01:3.9640346048678321e-01:6.5056166152110961e-04:3.9215646790476266e-01:8.3103026244606237e-01:4.3625404891950487e-01:1.0691875179443071e+00:4.9382390426726624e-01:1.6049345352568110e+00:3.9887613207391065e-01:1.9968865558852587e+00:4.3860668135172681e-01:2.8346787535443196e+00:4.6276068920084634e-01:3.2793670653204812e+00 + CVs 20 + -8.3445415810001922e-02 3.8624371281127090e-01 2.8349433711915017e-01 + -1.9470498511341028e-01 7.2077026265423549e-01 5.2532993072043266e-01 + -3.1493282309473858e-01 1.0375724056742150e+00 7.5819541287401959e-01 + -4.4260400787316490e-01 1.3465065651720827e+00 9.9599413563684558e-01 + -5.9323826906841959e-01 1.6396669182092889e+00 1.2400740035830227e+00 + -7.8350577418363054e-01 1.9012746105978069e+00 1.4891151389142703e+00 + -1.0286868604308337e+00 2.1065992766646664e+00 1.7376198761298993e+00 + -1.3353586238010360e+00 2.2264499284787553e+00 1.9681656826725842e+00 + -1.6914071525591461e+00 2.2353829196997288e+00 2.1489114929897881e+00 + -2.0556636962144648e+00 2.1171696804167963e+00 2.2473990776638431e+00 + -2.3601245627455714e+00 1.8698696914451882e+00 2.2438443531945924e+00 + -2.5385841341103221e+00 1.5195889065619357e+00 2.1433636172994150e+00 + -2.5603464877103996e+00 1.1141491631656859e+00 1.9698437798576687e+00 + -2.4448386618614322e+00 7.0199993959845153e-01 1.7305918205284025e+00 + -2.2552029698733103e+00 3.3442852612323382e-01 1.4074021275078357e+00 + -2.0603784914696046e+00 7.9189783623799526e-02 9.9390569606863211e-01 + -1.9032457649979602e+00 -7.0609456117975977e-04 5.3366452239489748e-01 + -1.7916582033399180e+00 7.4702384603972050e-02 1.0784593214824006e-01 + -1.7011576500730001e+00 1.8663719921225824e-01 -2.3117051723592327e-01 + id 11703 + loc 2.3347002267837524e-01 8.4425967931747437e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4901188727055580e-01:3.9957358206028032e-01:5.0178296333963757e-02:4.2902989448457057e-01:1.0052742201523985e+00:3.4704277954272766e-01:1.9756124618930748e+00:4.4900739715168314e-01:2.8392400786614216e+00:3.5416094995549879e-01:3.4828279894317253e+00 + CVs 20 + 2.0752008722889770e-01 6.0361781595002129e-01 -2.8361293818052979e-01 + 4.0353185657233737e-01 1.2227318354733467e+00 -4.9281319051394917e-01 + 6.3604290442376188e-01 1.8661048064250727e+00 -5.9449598179660590e-01 + 9.5871561557640417e-01 2.5212793426148616e+00 -5.7423552216217189e-01 + 1.4284265879066425e+00 3.1280999356523247e+00 -4.5202290590524596e-01 + 2.0675738506164874e+00 3.5896364554294977e+00 -3.0011907587043396e-01 + 2.8316685719857193e+00 3.8145810494551067e+00 -1.9053231159323469e-01 + 3.6272713176878209e+00 3.7570494859477694e+00 -1.5908748416817065e-01 + 4.3439183748779824e+00 3.4129118231881050e+00 -2.1294059874045168e-01 + 4.8745288976639571e+00 2.8209058766980220e+00 -3.2496502874915389e-01 + 5.1288618912516952e+00 2.0630801964770651e+00 -4.2321160929410440e-01 + 5.0723295653665721e+00 1.2668607231155673e+00 -4.3206319314414954e-01 + 4.7633916621113270e+00 5.4616735935567495e-01 -3.2770827274655645e-01 + 4.3131914397352480e+00 -5.4268739547193495e-02 -1.3782462813666457e-01 + 3.8370561674281518e+00 -5.7867146848152407e-01 8.7924383486525426e-02 + 3.5479501840269281e+00 -1.3200738594204706e+00 4.5677947256351570e-01 + 4.5644743550882154e+00 -1.0689124625751365e+00 1.6337969304990274e+00 + 4.5263468042920065e+00 -7.0726670543960646e-01 1.8266308966129419e+00 + 4.5271334806268868e+00 -1.5031100696189503e-01 2.1214632973297785e+00 + id 11704 + loc 1.8320348858833313e-01 4.8029834032058716e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4758300129382361e-01:3.5328393619719745e-01:3.7368135452486739e-02:2.8053346782521110e-01:9.1738784637077719e-01:4.0223608454903376e-01:1.3992372073659258e+00:4.4757852546381072e-01:2.0147327884659005e+00:3.6071992782454981e-01:2.7832440109345802e+00:2.7368826642274047e-01:3.0880818139468209e+00 + CVs 20 + -1.6242065628982497e-01 2.0808016939742144e-01 6.5590734179841695e-02 + -3.4558621153755886e-01 4.0869740550660716e-01 1.2995090741232002e-01 + -5.3179095951590316e-01 6.0129917599535221e-01 2.0232239320022477e-01 + -7.1538794867999189e-01 7.8927180992091883e-01 2.8553576290533328e-01 + -9.0828416105870224e-01 9.6875050776009652e-01 3.7068442179500710e-01 + -1.1124196906320485e+00 1.1335634550714424e+00 4.5326432845726333e-01 + -1.3210256079281109e+00 1.2849762584598952e+00 5.3548109788579923e-01 + -1.5294215437778564e+00 1.4335762640327467e+00 6.2140971499070863e-01 + -1.7335466200228153e+00 1.5861120683388406e+00 7.1025802885885814e-01 + -1.9218687098835341e+00 1.7344116213411180e+00 7.9589423095714507e-01 + -2.0741195366881140e+00 1.8631891924738992e+00 8.7325620776860091e-01 + -2.1689956096008012e+00 1.9682022664442134e+00 9.3966848574700979e-01 + -2.2246533733002334e+00 2.0576506153203260e+00 9.9135140521137288e-01 + -2.3162018917694591e+00 2.0943339238588550e+00 1.0310186834922916e+00 + -2.4498034083910398e+00 2.0252512123708351e+00 1.0593330101818303e+00 + -2.5602094833559970e+00 1.8828609872246653e+00 1.0593073841081022e+00 + -2.6144969248860201e+00 1.7271035137715671e+00 1.0186287647852872e+00 + -2.6417769292338242e+00 1.5434441882437961e+00 9.5409546877506723e-01 + -2.7381788159293663e+00 1.1200024528277026e+00 9.6512942677083247e-01 + id 11705 + loc 9.8719507455825806e-01 4.3089714646339417e-01 1090 + blend 0.0000000000000000e+00 + interp 5.5098749853726703e-01:3.3189167797347402e-01:2.6466019672821983e-01:1.9242977590604010e-01:9.9257603622616308e-01:2.5449627350137588e-01:1.8053065937537314e+00:4.2500371893871131e-01:2.0104043212186613e+00:5.5098198866228165e-01:2.3779328701747806e+00:5.0312750600180733e-01:2.9587475497337969e+00:3.4027796920530928e-01:3.1442486155562515e+00:4.8937591748843928e-01:3.9992763626929970e+00 + CVs 20 + -9.1606496988686337e-02 5.1022537311878779e-01 -1.2917809715841591e-01 + -5.9580039315515587e-02 9.4176197247448712e-01 -2.0787936678404831e-01 + 2.4295681632663158e-02 1.3279491742573315e+00 -2.5641673915950669e-01 + 1.3969163825738573e-01 1.6661790980382309e+00 -2.7666509653675458e-01 + 2.8447143328994229e-01 1.9372442316526679e+00 -2.6643454917263870e-01 + 4.4981870655163714e-01 2.1212766169492436e+00 -2.3142266350183305e-01 + 6.1893360140993325e-01 2.2138400031465073e+00 -1.8417659298815697e-01 + 7.7819780694047425e-01 2.2355240451357967e+00 -1.3250549741883616e-01 + 9.2255484712270852e-01 2.2093405551537062e+00 -7.6506928433200005e-02 + 1.0443687090053400e+00 2.1503428022635798e+00 -2.0343265480529282e-02 + 1.1354410157200769e+00 2.0736424899693446e+00 3.1525887209817027e-02 + 1.1917619525832288e+00 1.9936465289135863e+00 7.9733110869815493e-02 + 1.2096638069921188e+00 1.9260808821674773e+00 1.2754988155852592e-01 + 1.1854457086598256e+00 1.8880776883521737e+00 1.8677523922285666e-01 + 1.1221846823856969e+00 1.8856678320573770e+00 2.8388497957242381e-01 + 1.0409770665702196e+00 1.8654455091072712e+00 4.3098627403394230e-01 + 9.5701966628843693e-01 1.7516094891776448e+00 5.7896441836706769e-01 + 9.0146755390917610e-01 1.5260601767358333e+00 6.2191161348765223e-01 + 9.8729573571983043e-01 1.3157652838863969e+00 3.7067534320817525e-01 + id 11706 + loc 7.7344030141830444e-01 6.3694548606872559e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6934258321648326e-01:2.9575231155308701e-01:2.7802671862723960e-01:3.3501349900810479e-01:1.0038941545810258e+00:4.2811207321781625e-01:1.9197856140182141e+00:2.8898952602654870e-01:2.3314307882640257e+00:4.6933788979065111e-01:2.9223618308114228e+00:3.1028263881451706e-01:3.6245555220957422e+00 + CVs 20 + -2.2736308118323173e-01 2.9440688690511024e-01 1.9863776760927510e-01 + -4.3867198031996080e-01 5.9182347997628326e-01 3.9241118227515392e-01 + -6.3633776473207526e-01 9.0507811745334099e-01 5.9292671703609556e-01 + -8.3811731336184614e-01 1.2410507484474207e+00 7.9256332988235045e-01 + -1.0738212001961336e+00 1.5959847212063358e+00 9.6267975472309475e-01 + -1.3659182743381730e+00 1.9561371569006301e+00 1.0676224623552386e+00 + -1.7190870246075818e+00 2.2968351599707511e+00 1.0689633813790658e+00 + -2.1117356532049354e+00 2.5805388161577834e+00 9.2741561900756464e-01 + -2.4813963252227804e+00 2.7589296686198730e+00 6.2375801267685049e-01 + -2.7556673180111786e+00 2.8084991614626551e+00 1.9600862462979340e-01 + -2.9154062287125218e+00 2.7357013323048260e+00 -2.9439175529958872e-01 + -2.9866951510318041e+00 2.5245964432127654e+00 -7.9581287151299684e-01 + -3.0005953302959822e+00 2.1566262649595243e+00 -1.2395493834415281e+00 + -2.9608158263445130e+00 1.7224145714349515e+00 -1.5796594424460773e+00 + -2.8627976970444160e+00 1.3748221007106700e+00 -1.8609941510787018e+00 + -2.7420166865976947e+00 1.2192135352098599e+00 -2.1157704678053304e+00 + -2.6641982133434565e+00 1.2669139954161686e+00 -2.3066026625233507e+00 + -2.6329633621161559e+00 1.3861974447275835e+00 -2.4378613153691129e+00 + -2.4901964359269502e+00 1.3168008826561375e+00 -2.8246828456577373e+00 + id 11707 + loc 2.4253176152706146e-01 8.3737474679946899e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3754906695856066e-01:3.2805532153551353e-01:4.4927510514090163e-01:4.0492410529998246e-01:9.9102882818062588e-01:4.3754469146789110e-01:1.4335256362776736e+00:3.7945915120960172e-01:1.9876091452760427e+00:3.8283301427267469e-01:2.7461864350221390e+00:2.5728745708105938e-01:3.1263483726724126e+00:3.6885506857803185e-01:3.9984412024211693e+00 + CVs 20 + 2.6959751064387261e-01 3.6092559129900403e-01 -2.8852684621497449e-01 + 5.4275156869009733e-01 7.0605127909452958e-01 -6.0402937268738166e-01 + 8.2121277721892572e-01 1.0320002661598715e+00 -9.3506866980257641e-01 + 1.1025306189438309e+00 1.3323100790174585e+00 -1.2733737956650226e+00 + 1.3630681271011911e+00 1.5803335861918437e+00 -1.6196398346154857e+00 + 1.5572004378128246e+00 1.7301075247750273e+00 -1.9751911714120305e+00 + 1.6482382217593692e+00 1.7434497846866193e+00 -2.3077857427740969e+00 + 1.6241958660413063e+00 1.6128848369944202e+00 -2.5259909341371336e+00 + 1.5276242200015457e+00 1.4179156078442132e+00 -2.5806578491132006e+00 + 1.4212113848282111e+00 1.2232303197534595e+00 -2.5700248622040487e+00 + 1.3282599290883712e+00 9.8902985717977676e-01 -2.5864131100057102e+00 + 1.2648477038419441e+00 6.3685288149983676e-01 -2.6747186517796240e+00 + 1.2704127573849160e+00 1.1385356237581853e-01 -2.8695415243090214e+00 + 1.4018453051397362e+00 -5.5722607533426738e-01 -3.2496429114702292e+00 + 1.7033750491281747e+00 -1.2280257005961919e+00 -3.9447934958432622e+00 + 2.1782388456460366e+00 -1.5813262776041239e+00 -5.0596408955064307e+00 + 2.6844663905781112e+00 -1.1822269614614189e+00 -6.3881122978829055e+00 + 2.9350210903705189e+00 -4.2451077634668305e-01 -7.2332694541525226e+00 + 3.0002297168069965e+00 -1.9236143534052008e-01 -7.6023429692767559e+00 + id 11708 + loc 4.5075935125350952e-01 7.0627093315124512e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4308282416350986e-01:2.8877199425728761e-01:9.5134232356976900e-01:4.4307839333526822e-01:1.6528750545904050e+00:4.3571907478185229e-01:2.0058733177041033e+00:3.0514946638851365e-01:2.4805274494407534e+00:3.3081089493887861e-01:3.0900857522922962e+00:3.0633597295697484e-01:3.9984715439444662e+00 + CVs 20 + 2.4118251701080121e-01 2.4411569953335843e-01 -2.2467868832315813e-01 + 4.4818654615363074e-01 5.1353837989252082e-01 -4.6222892041355768e-01 + 6.5549443277457442e-01 7.5600576657575880e-01 -7.2794948799410830e-01 + 8.7583741636849799e-01 9.4561604789446885e-01 -1.0259737051449560e+00 + 1.1082137925585951e+00 1.0683405656302367e+00 -1.3456246054177639e+00 + 1.3565225446093001e+00 1.1151091703509894e+00 -1.6685130653640110e+00 + 1.6263313651971765e+00 1.0853838931901356e+00 -1.9750461913018329e+00 + 1.9196390644094787e+00 9.8686245481822299e-01 -2.2506547457960178e+00 + 2.2330106475312070e+00 8.3178088998805966e-01 -2.4872254389637325e+00 + 2.5592981092471909e+00 6.3400068123864584e-01 -2.6871587228085287e+00 + 2.8872779954210182e+00 4.0433710904130060e-01 -2.8633205066430700e+00 + 3.1972908350439728e+00 1.4670559650702675e-01 -3.0307316382689597e+00 + 3.4602967834210738e+00 -1.4184774226756969e-01 -3.2040304917605971e+00 + 3.6405244203903302e+00 -4.6682220316026179e-01 -3.4053663668449197e+00 + 3.6842311094494535e+00 -8.2313918592736046e-01 -3.6685582207505685e+00 + 3.5238989479277389e+00 -1.1543799577605489e+00 -4.0264772997549763e+00 + 3.1862573780089161e+00 -1.3212464456109441e+00 -4.5030251359205566e+00 + 2.8411024756146066e+00 -1.2281533451095292e+00 -5.0372916885440162e+00 + 2.7560745341370980e+00 -1.2961408753732964e+00 -5.3683963036700160e+00 + id 11709 + loc 8.6952173709869385e-01 5.1481044292449951e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9395361497715820e-01:2.1803397548115719e-01:1.1051994470552273e-01:2.7256751022546649e-01:1.0092516520907227e+00:3.2822351021600610e-01:1.9759725172256153e+00:3.6619003210954054e-01:2.3553785523744826e+00:3.9394967544100845e-01:2.8899968742023661e+00:3.3021059256878504e-01:3.6314657087506657e+00 + CVs 20 + 2.2246792641502428e-01 4.4197640691826906e-01 -3.1726590036649754e-01 + 4.2662551111034464e-01 8.9252528872064474e-01 -5.5189301823313119e-01 + 6.0054313126334602e-01 1.3683586157976639e+00 -7.0586729942924009e-01 + 7.9731370280119518e-01 1.8306064159007807e+00 -8.1028437957867527e-01 + 1.0851791529173334e+00 2.2050519371212101e+00 -9.1181673740486491e-01 + 1.4686413323488439e+00 2.4338232664442017e+00 -1.0395001494689535e+00 + 1.9045292765109643e+00 2.4966802342450398e+00 -1.1899029389326616e+00 + 2.3517682034245229e+00 2.4057345559830257e+00 -1.3356075776080449e+00 + 2.7810069275553202e+00 2.1977209674155969e+00 -1.4388826643722414e+00 + 3.1653226691550143e+00 1.9456117476636741e+00 -1.4713330171614576e+00 + 3.4752707114152681e+00 1.7460913794655719e+00 -1.4450917702942863e+00 + 3.6617082446313223e+00 1.6592695900776238e+00 -1.4063885094753019e+00 + 3.6531474402771011e+00 1.6619739770374524e+00 -1.3398059716137087e+00 + 3.5646751535084973e+00 1.6606104602782767e+00 -1.1501080432702526e+00 + 3.6423987515862613e+00 1.6841462864225138e+00 -9.6829862481861251e-01 + 3.8502597681526565e+00 1.8151668829247050e+00 -9.8864276873538925e-01 + 4.1313912363378602e+00 2.0820835978402341e+00 -1.3747830856460310e+00 + 4.5764616737319725e+00 2.3021710143517646e+00 -2.1114727954784493e+00 + 4.6748410283520370e+00 2.2453624589215284e+00 -2.2086286593827729e+00 + id 11710 + loc 5.7720226049423218e-01 7.3531579971313477e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2751295205640727e-01:3.4661357440953133e-01:4.2074825497743906e-01:4.2750867692688671e-01:1.0011635192564303e+00:3.0283411809002236e-01:1.4397469000366658e+00:3.9013267898485837e-01:2.0314261436236531e+00:3.1491574973060732e-01:2.9916459863980078e+00:3.3708814586224123e-01:3.8506207046475156e+00 + CVs 20 + -1.0863271263934829e-01 4.4746960800149216e-01 1.8602903220087380e-01 + -2.5456750718850596e-01 8.4466673798061154e-01 2.8873702677944113e-01 + -4.3719332778495634e-01 1.2083796275873318e+00 3.4323776459783084e-01 + -6.5664631443074617e-01 1.5344385487960515e+00 3.5675276495172553e-01 + -9.0692586773627037e-01 1.8014213629441629e+00 3.2033578694499565e-01 + -1.1706453271237702e+00 1.9887150603822505e+00 2.3059068510597569e-01 + -1.4207331160355996e+00 2.0817252282974881e+00 9.2811474781589576e-02 + -1.6289680549146661e+00 2.0793486425575076e+00 -7.7273393785495692e-02 + -1.7801909388781962e+00 1.9940429754239224e+00 -2.5818074808718494e-01 + -1.8841554845761930e+00 1.8410892940224566e+00 -4.3288585717526701e-01 + -1.9622144372089669e+00 1.6260335034944882e+00 -5.9121563952846334e-01 + -2.0205982942543455e+00 1.3488113044929271e+00 -7.1717560111967382e-01 + -2.0547983583813609e+00 1.0148627577509435e+00 -7.8671174295680402e-01 + -2.0658474210063362e+00 6.3313292885239303e-01 -7.7415164279011250e-01 + -2.0592733895192863e+00 2.1970191648500625e-01 -6.4683130579173431e-01 + -2.0492507689501993e+00 -1.9577203715171748e-01 -3.8744572277176093e-01 + -2.0949630013969873e+00 -6.1396649312725993e-01 1.1016217561819253e-02 + -2.2686919107355039e+00 -1.0024178044553775e+00 5.7687113100225829e-01 + -2.2895173677296308e+00 -1.3313445379992062e+00 9.6624310441177141e-01 + id 11711 + loc 9.0704536437988281e-01 2.5811207294464111e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3563326434652988e-01:4.3562890801388643e-01:5.4225158685296027e-01:2.9921842273678317e-01:1.0037245710675007e+00:2.5594849427793348e-01:1.8376137300808320e+00:4.2600615059371583e-01:2.2512997545276323e+00:4.3063242167713267e-01:2.9556940185848846e+00:2.3198076379693541e-01:3.5305371661911606e+00:4.3260855746067334e-01:3.9940157411125954e+00 + CVs 20 + -1.0122326495835685e-01 4.6663943496589921e-01 6.6115985013464620e-02 + -1.7264497471754653e-01 9.3627435667523473e-01 1.5120165963529716e-01 + -2.0161529361629857e-01 1.3923766676461882e+00 2.2192814435026900e-01 + -1.8155940669485576e-01 1.8165570814479295e+00 2.5052497835748111e-01 + -1.2584270373440531e-01 2.2300184280025870e+00 2.4823877720412496e-01 + -6.6469131799444081e-02 2.7021210625454199e+00 2.9349437450713445e-01 + -6.1173683396707368e-02 3.2283138264610107e+00 5.2473027794722016e-01 + -1.7620166665305215e-01 3.6532701699893262e+00 9.8369351361255009e-01 + -4.4127404943356296e-01 3.8572135140072170e+00 1.5521101083968927e+00 + -8.2663719149344539e-01 3.8451646735492049e+00 2.0539620080577321e+00 + -1.2594656477021626e+00 3.7221069914212137e+00 2.3899156314791528e+00 + -1.6951547951664063e+00 3.5700676154560571e+00 2.5791940613828861e+00 + -2.1359407160757100e+00 3.4025425148029527e+00 2.6677489172413500e+00 + -2.6244389264088035e+00 3.1740362123554999e+00 2.6751983481256922e+00 + -3.1721211846112363e+00 2.8089541654436108e+00 2.5813591390278514e+00 + -3.6941180728250185e+00 2.2595263997880535e+00 2.3431081218709529e+00 + -4.0605779842182939e+00 1.5109937870717594e+00 1.8662399478767953e+00 + -4.0846219553469707e+00 8.1475082488853434e-01 1.1338882833361714e+00 + -4.0373672303668116e+00 6.6851043911126784e-01 7.5115407689504421e-01 + id 11712 + loc 8.9470070600509644e-01 9.2113333940505981e-01 1070 + blend 0.0000000000000000e+00 + interp 3.9878613076842168e-01:3.0506737365974607e-01:7.6171766784631645e-01:3.3290329453977829e-01:1.2468148407780264e+00:2.7921271628338307e-01:2.0742762921416373e+00:3.9878214290711400e-01:2.8265436383808842e+00:3.8278375096991346e-01:3.1397348444321014e+00:3.0289342488555721e-01:3.8933826102504492e+00 + CVs 20 + -2.3702641679429476e-01 2.5939892042797164e-01 6.5574986903219640e-02 + -4.2330887771469838e-01 5.0265736365626223e-01 1.4347957397097233e-01 + -5.5637124550148265e-01 7.3990447904145207e-01 2.5109557511724445e-01 + -6.5554062250876743e-01 9.8413731817034833e-01 3.8200111877578735e-01 + -7.6694068125896386e-01 1.2464724227644284e+00 4.9282939120192726e-01 + -9.2680732627340412e-01 1.5115173450683910e+00 5.3475360645218395e-01 + -1.1399177141778654e+00 1.7457375261601800e+00 5.0099343083092662e-01 + -1.4043176730460001e+00 1.9223439785034382e+00 4.0579832749195299e-01 + -1.6950818331859465e+00 2.0237914335197873e+00 2.4309283786987068e-01 + -1.9321277245568149e+00 2.0418763826617239e+00 1.3101910952448392e-02 + -2.0727207550874374e+00 2.0020302870251721e+00 -2.4793649922816607e-01 + -2.1443333448455522e+00 1.9421650543872329e+00 -5.2738198913169698e-01 + -2.1444460338480198e+00 1.8717416835246645e+00 -7.8996080988352835e-01 + -2.0284120204542253e+00 1.7769142920304781e+00 -8.8247162854983463e-01 + -1.7684089465950095e+00 1.6125044509347766e+00 -6.9521293791186223e-01 + -1.3445549727302455e+00 1.2213248427890782e+00 -3.3970775415676424e-01 + -7.5295649049697877e-01 3.8823146120700680e-01 -1.4243516450248708e-01 + -2.0218888384580497e-01 -5.6752789948900384e-01 -5.6696891727786869e-01 + -1.2720518620687365e-01 -6.5570000576921339e-01 -7.7329387666294702e-01 + id 11713 + loc 2.4262498319149017e-01 7.5395870208740234e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5699880807323778e-01:3.2020631876568745e-01:7.4981597778939291e-01:3.5794468754709902e-01:1.5336791556848004e+00:4.5699423808515705e-01:2.1438571185878330e+00:3.8327963281312111e-01:2.9890860776191168e+00:4.4576190572754731e-01:3.3751781136709331e+00:3.6779042408386892e-01:3.9779633973244115e+00 + CVs 20 + 6.3698322330992402e-02 2.5911886332911926e-01 -9.8892079157665680e-02 + 1.3341734715578607e-01 5.1072187764711463e-01 -2.0976022933713193e-01 + 2.0836006539145582e-01 7.4603828989167953e-01 -3.1836717143348020e-01 + 2.8788820241668039e-01 9.6446722732809453e-01 -4.2026559395253621e-01 + 3.6752022708495868e-01 1.1682449063594837e+00 -5.2050443486256326e-01 + 4.4408779878194554e-01 1.3602839872075514e+00 -6.2448525919080444e-01 + 5.1947831768561947e-01 1.5444376612106936e+00 -7.3673831085628450e-01 + 5.9659227004979365e-01 1.7321777448138440e+00 -8.5965393865455653e-01 + 6.7953278633726211e-01 1.9439656632741678e+00 -9.9553733305053793e-01 + 7.7897031342503609e-01 2.1998569070112803e+00 -1.1556510968828921e+00 + 9.1009713433859429e-01 2.4991975037984338e+00 -1.3698403447407570e+00 + 1.0840431507737689e+00 2.7996454116862743e+00 -1.6769216493626671e+00 + 1.2876043294318427e+00 3.0222542951570146e+00 -2.0910474383619970e+00 + 1.4729024433772011e+00 3.0906871841929635e+00 -2.5659195907996262e+00 + 1.6123986397110146e+00 2.9864203240804854e+00 -3.0266610964986724e+00 + 1.7264251918559488e+00 2.7301958279919591e+00 -3.4337432418267024e+00 + 1.8119842091607123e+00 2.3483729122059493e+00 -3.7689796292494910e+00 + 1.7989518480547844e+00 1.8984026282621649e+00 -4.0179079705421019e+00 + 1.6126453414759498e+00 1.4972306026108790e+00 -4.1465395934404983e+00 + id 11714 + loc 8.3697342872619629e-01 7.1778959035873413e-01 1090 + blend 0.0000000000000000e+00 + interp 1.8722037176890052e+00:4.6072571240672927e-01:3.0658505323573726e-02:1.5027767010072439e+00:4.7298904479367898e-01:1.8721937176890051e+00:6.3408849047324667e-01:5.0658241792799141e-01:2.0198090759660485e+00:4.6824869884928855e-01:2.8627495476996545e+00:5.5027208490817525e-01:3.0330394235477138e+00:5.7025966173471621e-01:3.4405008560026995e+00 + CVs 20 + 2.7251398250654235e-01 4.6191987300039289e-01 1.2697842468048307e-01 + 4.1065037356262690e-01 8.2906698721166716e-01 2.1721060270353645e-01 + 4.9788823988469105e-01 1.1579104703831251e+00 2.9945842131402289e-01 + 5.6931269593652822e-01 1.4659737098555845e+00 3.8447904293802876e-01 + 6.2555897293335239e-01 1.7502671034256752e+00 4.6695126747068283e-01 + 6.7352029160885019e-01 2.0194339493154887e+00 5.4640030777835391e-01 + 7.1056688344578556e-01 2.3148338716170205e+00 6.1547873456055791e-01 + 6.8041169327926132e-01 2.6807281665375022e+00 6.2485771840038540e-01 + 5.1513952658424333e-01 3.0251142835151672e+00 5.2006476488200581e-01 + 2.7745641194610271e-01 3.2232974406007071e+00 3.5189846847935669e-01 + 4.5297640290608010e-02 3.2928042746249782e+00 1.7636983001422268e-01 + -1.5915935659575875e-01 3.2818781235353778e+00 1.3686492055858812e-03 + -3.2604238139122610e-01 3.2212462588400772e+00 -1.8290539613231604e-01 + -4.5302813908209305e-01 3.1257889153053702e+00 -4.0325747867646833e-01 + -5.4778074980286484e-01 2.9819143499753027e+00 -6.8386318017939063e-01 + -5.8696279151195374e-01 2.7506415664048860e+00 -9.8933433594213960e-01 + -5.1587014312174895e-01 2.3908084490946018e+00 -1.2739887234943443e+00 + -3.8343136025710062e-01 1.9227365272518941e+00 -1.3844275295245625e+00 + -3.8752510534304735e-01 1.7821738708434913e+00 -1.0863431144427065e+00 + id 11715 + loc 4.4858416914939880e-01 4.0300995111465454e-01 1085 + blend 0.0000000000000000e+00 + interp 4.8925917188075396e-01:3.1518415876293732e-01:8.4088708316719474e-01:3.8900494565263372e-01:1.1337892259672120e+00:3.2654363613486664e-01:2.0656249998300575e+00:3.8521544225755655e-01:2.9352182314311248e+00:4.8925427928903520e-01:3.3087021557080578e+00:3.9469314714360110e-01:3.9557441845699941e+00 + CVs 20 + 2.9904139447578471e-01 4.0527128894207853e-01 1.9917764270580629e-01 + 5.0569722396031003e-01 7.7799145581612050e-01 3.8952651804247612e-01 + 6.6389389128193588e-01 1.1399546053155745e+00 5.9317174328213784e-01 + 7.8225312662894364e-01 1.4993692074663194e+00 8.2836975120595069e-01 + 8.4552071280378738e-01 1.8443281380630137e+00 1.1034809411547069e+00 + 8.4095179468025127e-01 2.1589114553716202e+00 1.4182671796904680e+00 + 7.6071236327447289e-01 2.4254629639701859e+00 1.7623840619198825e+00 + 6.0460744260954002e-01 2.6289094099467567e+00 2.1174348215319903e+00 + 3.7999428323127726e-01 2.7598996461332419e+00 2.4654199142467590e+00 + 9.9088243300091472e-02 2.8125875320943701e+00 2.7953761527418033e+00 + -2.2157114727364713e-01 2.7813412768360584e+00 3.1047009964656862e+00 + -5.6129669445393626e-01 2.6592977924804404e+00 3.3967920422206164e+00 + -8.9568800747720134e-01 2.4394427740776328e+00 3.6745801249000554e+00 + -1.1975966321953808e+00 2.1168061926716244e+00 3.9370203173703335e+00 + -1.4331266389255857e+00 1.6952020637603429e+00 4.1818473519832473e+00 + -1.5543382631430815e+00 1.2281197393795140e+00 4.3891351769967182e+00 + -1.5535164442493050e+00 7.9181417555999822e-01 4.5305432789911171e+00 + -1.4534146222372788e+00 4.1123907140434113e-01 4.6263959747411745e+00 + -1.2119115164794176e+00 2.3053358288099524e-01 4.7737927776724858e+00 + id 11716 + loc 6.5591180324554443e-01 4.2240482568740845e-01 410 + blend 0.0000000000000000e+00 + interp 4.5616226695122974e-01:2.7253223215495348e-01:9.0945519218335413e-01:3.7069481629687906e-01:1.3739643014755252e+00:2.8011087362544329e-01:1.9969836936759835e+00:4.5615770532856026e-01:2.6869465698080672e+00:3.2095402132545608e-01:3.2229575724658051e+00:3.5162784834212640e-01:3.9939774260718157e+00 + CVs 20 + -4.5396253881856796e-01 4.1009794785014214e-01 7.6864363843496861e-02 + -8.3954004400594984e-01 7.6690159076869402e-01 1.5915009601217575e-01 + -1.2264546396774516e+00 1.1032584080077574e+00 2.3925733095025006e-01 + -1.6508244425025573e+00 1.4164345787622112e+00 3.4348722967370471e-01 + -2.1162310879507666e+00 1.6725192206583859e+00 5.0616336827791009e-01 + -2.6044829818262434e+00 1.8260234073905299e+00 7.5433404155282302e-01 + -3.0687216648713038e+00 1.8420969076360072e+00 1.0828650115272158e+00 + -3.4701895366577862e+00 1.7169164789762463e+00 1.4492556728322898e+00 + -3.7994653311411106e+00 1.4624376228273450e+00 1.8035119397730630e+00 + -4.0511331554064514e+00 1.0959890279322964e+00 2.0967471305303347e+00 + -4.2145833204718173e+00 6.5265530998216414e-01 2.2912198130812582e+00 + -4.2997775169067571e+00 1.5918957516665566e-01 2.3964301639815648e+00 + -4.3415173182089948e+00 -4.0129773906597399e-01 2.4581805919156747e+00 + -4.3847272031152134e+00 -1.0519756823762381e+00 2.5459589929315150e+00 + -4.4718265163550965e+00 -1.7809587884441427e+00 2.7387109620295531e+00 + -4.6238624491653262e+00 -2.5270296823627247e+00 3.0662933059885971e+00 + -4.8399738428734089e+00 -3.2329558533726188e+00 3.4850098404780332e+00 + -5.1071186082755595e+00 -3.8812138117380512e+00 3.9462230820304298e+00 + -5.3733619218012523e+00 -4.4605677279981641e+00 4.4241725702677677e+00 + id 11717 + loc 9.8856520652770996e-01 9.3562316894531250e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3254268218808531e-01:5.3253735676126346e-01:1.5517064270412839e-01:4.3583833358227736e-01:7.8476067756835988e-01:3.6110742302161586e-01:1.8173409272201888e+00:3.4402509777199797e-01:2.6805370382481550e+00:2.9919857272235206e-01:3.1017519546826700e+00:4.1781878825763813e-01:3.8341595303156808e+00 + CVs 20 + -4.8905453780661412e-02 1.8417384670354231e-01 3.0964920674923169e-01 + -1.3326322383090891e-01 3.2679215200243017e-01 5.6604557898891639e-01 + -2.3997973030958281e-01 4.5945912171155839e-01 7.9855550847609158e-01 + -3.6406890553601967e-01 5.9818557699380481e-01 1.0148416609993467e+00 + -5.3727744233229724e-01 7.5996784915774185e-01 1.2148391190301988e+00 + -7.6864155027961956e-01 9.8049839864300625e-01 1.3973962826223438e+00 + -9.8126662902101702e-01 1.2909367311227418e+00 1.5589359866290073e+00 + -1.0811005689156201e+00 1.6655859085536648e+00 1.6944463898204287e+00 + -1.0493850274212604e+00 2.0600007355133014e+00 1.8140399254024420e+00 + -9.0009485228702890e-01 2.4434860250775250e+00 1.9522995063930559e+00 + -6.4466566389441016e-01 2.7622977805646221e+00 2.1598461443095780e+00 + -3.1416165329866552e-01 2.9378155863963178e+00 2.4522601100666792e+00 + 4.0025905943660511e-02 2.9379366547841288e+00 2.7876012107032038e+00 + 3.6940706051970218e-01 2.7817264581824448e+00 3.1111824770446788e+00 + 6.3809960180088465e-01 2.5099327087276588e+00 3.3896798928966145e+00 + 8.2759756501149329e-01 2.1630642543679306e+00 3.6210101578622700e+00 + 9.2645978221264458e-01 1.7686726996993090e+00 3.8054026785147155e+00 + 9.2712967929574064e-01 1.3663353932147175e+00 3.9158836431618465e+00 + 8.4497552821707056e-01 1.1440560955842156e+00 3.8809328303794977e+00 + id 11718 + loc 7.4685651063919067e-01 1.3958963751792908e-01 1048 + blend 0.0000000000000000e+00 + interp 5.8179394879211299e-01:2.8389903028149849e-01:4.7795112599941014e-01:2.4023642612292515e-01:1.1282687195678116e+00:5.8178813085262515e-01:1.9985478663701572e+00:4.8749897423377941e-01:2.2868475964811656e+00:3.1820080241557930e-01:2.8309436314057863e+00:3.0698362672578827e-01:3.2124972882595664e+00:2.8169221858541738e-01:3.9691988685197281e+00 + CVs 20 + -2.7089554251298331e-03 5.8805433236626914e-01 3.9228372758069141e-01 + -8.1873282764898747e-02 1.1824774906336359e+00 7.0217285422307774e-01 + -3.0523795904962464e-01 1.7575013599407863e+00 9.0414712313949153e-01 + -7.1287240865543611e-01 2.2504147075549703e+00 1.0040684271742810e+00 + -1.3012829038518268e+00 2.5807694219173802e+00 1.0814218188123239e+00 + -1.9953737176202926e+00 2.6589461644203238e+00 1.2627520868670850e+00 + -2.6030785610827754e+00 2.3997306652606558e+00 1.5785632310684798e+00 + -2.9522928370770374e+00 1.8861951744375243e+00 1.8962063276339669e+00 + -3.1007390592465596e+00 1.3134222922407692e+00 2.1076304171328757e+00 + -3.1942452941564206e+00 7.8154521183530967e-01 2.2343046706663277e+00 + -3.3393843102943155e+00 3.3383792284957436e-01 2.3433002141318529e+00 + -3.5727160110549709e+00 3.5464607577984086e-04 2.5426559744035462e+00 + -3.8392478570305291e+00 -1.7186580070112895e-01 2.9520213959517068e+00 + -4.0210378137800191e+00 -1.6271296963128690e-01 3.4772070864309454e+00 + -4.1348838930882623e+00 -1.1033498206280257e-01 3.9421135673895642e+00 + -4.2639241061985373e+00 -9.0465554022533201e-02 4.3451029577413784e+00 + -4.4486239931359908e+00 -1.0896982410471567e-01 4.6626029016222557e+00 + -4.6780387275421962e+00 -1.2359016492229591e-01 4.8891802335183359e+00 + -4.9748600274496564e+00 -1.6183195876331413e-01 5.1712716681063720e+00 + id 11719 + loc 7.4692428112030029e-01 5.7217967510223389e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3972218570477073e-01:4.3803082140017424e-01:1.2747481447472619e-03:4.3971778848291371e-01:3.6183849498688081e-01:3.1189975387709257e-01:9.6746909364564460e-01:3.3386240691117480e-01:1.5439729613542001e+00:4.2336038931635439e-01:2.0399708174221129e+00:3.4784002898130667e-01:2.8092155640058727e+00:3.8253827130625268e-01:3.7027552935172423e+00 + CVs 20 + 3.7106240580146677e-01 3.0605832978155945e-01 -2.3206651791835031e-01 + 6.9857869334062861e-01 6.0935790533011414e-01 -4.6372294733728436e-01 + 1.0074904736361092e+00 8.8672390683807323e-01 -7.0322009794708729e-01 + 1.2998503569410238e+00 1.1292584712186673e+00 -9.5296701466807932e-01 + 1.5654274258665268e+00 1.3216596631506659e+00 -1.2107505819741753e+00 + 1.8110782151238576e+00 1.4598466142378161e+00 -1.4775400966163916e+00 + 2.0639757769828377e+00 1.5641881923458882e+00 -1.7633628846562852e+00 + 2.3433660636344524e+00 1.6508413730616343e+00 -2.0689049800169332e+00 + 2.6491090415578249e+00 1.7241300608491552e+00 -2.3774375429427397e+00 + 2.9774748648990927e+00 1.7834720680066427e+00 -2.6770945907754999e+00 + 3.3338570078042076e+00 1.8166768786101282e+00 -2.9735090437233369e+00 + 3.7303053535007029e+00 1.7869168323644156e+00 -3.2832960153175210e+00 + 4.1551033687743448e+00 1.6259791800208840e+00 -3.6173977645732727e+00 + 4.5312672008273989e+00 1.2756706011106498e+00 -3.9526820940974021e+00 + 4.7674848951628350e+00 7.5434959897590137e-01 -4.2386494450235652e+00 + 4.8063082097750707e+00 8.7207659096434353e-02 -4.4481190674609206e+00 + 4.4291027622435442e+00 -7.0255168919954181e-01 -4.5872942352315995e+00 + 3.6293526966768090e+00 -1.0517733094648198e+00 -4.6643181425348148e+00 + 3.2377953794445822e+00 -1.0341111573372199e+00 -4.7023689660399661e+00 + id 11720 + loc 6.7153406143188477e-01 9.9541968107223511e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8343530223831823e-01:3.8343146788529586e-01:7.9726262458994501e-03:3.4646446534607195e-01:9.8829591270527928e-01:3.5469520145870309e-01:1.6788173713996923e+00:2.0372001077132601e-01:2.1326431918949074e+00:3.3814191521667442e-01:3.2559829123808997e+00 + CVs 20 + -2.2385003341004333e-02 2.8592252702148563e-01 -9.0462693048201870e-02 + 4.1730980655151724e-03 5.7424972145447784e-01 -1.9954128126361981e-01 + 7.4142206425227050e-02 8.4978578853721820e-01 -3.1060645320416247e-01 + 1.8569480498628502e-01 1.1063980090908028e+00 -4.1391336146845092e-01 + 3.3667910492592679e-01 1.3433261349311656e+00 -5.0811839020868477e-01 + 5.1803149643398239e-01 1.5655002475741497e+00 -6.0002947372118709e-01 + 7.1964564886232707e-01 1.7788165316919218e+00 -7.0007254057428248e-01 + 9.3359999453331444e-01 1.9877718081530031e+00 -8.1930293260164122e-01 + 1.1542862875469491e+00 2.1866317252955332e+00 -9.7161213654475820e-01 + 1.3797652028890719e+00 2.3539740962670077e+00 -1.1695794116107945e+00 + 1.6020731748096735e+00 2.4389088261580025e+00 -1.4077635739560344e+00 + 1.7915843314433237e+00 2.3807772134040195e+00 -1.6454157702123604e+00 + 1.9261212538645647e+00 2.1751299412047320e+00 -1.8465957314175081e+00 + 2.0129376394743361e+00 1.8489607805777104e+00 -2.0168575735208369e+00 + 2.1022162521825947e+00 1.4346636813782963e+00 -2.1967650494510274e+00 + 2.2897440659993444e+00 9.9584729566354668e-01 -2.4192442961409171e+00 + 2.6656427985886877e+00 6.4250110806951510e-01 -2.6219761749081245e+00 + 3.1893268012455351e+00 4.6840380261115333e-01 -2.6667921037603097e+00 + 3.7251172447228456e+00 3.7708473742642268e-01 -2.6087156477709081e+00 + id 11721 + loc 9.1834878921508789e-01 2.3332792520523071e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2146826524437808e-01:3.2012185379032948e-01:2.3021079655194887e-01:3.9367972981391125e-01:1.0500990638023222e+00:3.4194375198189242e-01:1.9999809091944916e+00:2.9315719810515373e-01:2.7139072969890541e+00:3.2260284549145374e-01:3.2769604416200058e+00:4.2146405056172564e-01:3.9439321802801062e+00 + CVs 20 + 1.8301221264928336e-01 2.6385100644841353e-01 -7.8224954666314961e-02 + 3.7459986313993932e-01 5.2828396633716102e-01 -1.6352445044649633e-01 + 5.5160990816512456e-01 7.9896466552435486e-01 -2.6244046513769037e-01 + 7.1913580239318986e-01 1.0557748195739294e+00 -3.4258607245878381e-01 + 8.9151434725689027e-01 1.2530340526903574e+00 -3.5638296140131975e-01 + 1.0581045819404511e+00 1.3538538968028688e+00 -2.9774823836620434e-01 + 1.2028918632798169e+00 1.3615648229994195e+00 -1.9292279865428463e-01 + 1.3198264210865964e+00 1.2927653896900897e+00 -5.2979638259101014e-02 + 1.3901744719338229e+00 1.1519555720017303e+00 1.2082616782219713e-01 + 1.3846143413125613e+00 9.4400921795129000e-01 3.0928038560508370e-01 + 1.2938039566724080e+00 6.8291660528834941e-01 4.7324546612280816e-01 + 1.1428619948097751e+00 3.9509395743457065e-01 5.5743143977443677e-01 + 9.8488098905612664e-01 1.1452151275122002e-01 5.2000944000702409e-01 + 8.2961261690931254e-01 -1.6929431405055420e-01 4.0243109803292365e-01 + 5.8790813194518388e-01 -5.4798668771279102e-01 3.1046236019448858e-01 + 1.8620854401573572e-01 -1.0989894070117547e+00 4.0759759536219609e-01 + -3.9708394279270864e-01 -1.7667409854922249e+00 1.0321306339615284e+00 + -9.1199417102097435e-01 -2.0484758879358189e+00 2.5241129763287402e+00 + -1.0471464906435539e+00 -2.2064797255157571e+00 2.8696107081119262e+00 + id 11722 + loc 2.7862310409545898e-01 6.7789143323898315e-01 1070 + blend 0.0000000000000000e+00 + interp 3.3786061947687207e-01:2.6340931230607462e-01:3.0941235157094793e-03:2.7790119055452994e-01:9.8014530825122737e-01:2.8648918184150668e-01:1.8629058353516146e+00:2.6648262073727347e-01:2.9779393194165493e+00:3.3785724087067731e-01:3.4786010440506114e+00 + CVs 20 + -3.1776426753857190e-01 2.9697389681475667e-01 3.2895501082931144e-01 + -5.6448550068098013e-01 5.3998930249028143e-01 6.0698626660836807e-01 + -7.5053436495420611e-01 7.8219856407782606e-01 9.1857972632177742e-01 + -9.3157169344036683e-01 1.0680337007309149e+00 1.2677167808697798e+00 + -1.1969170680523105e+00 1.4050212791373236e+00 1.5629454497230433e+00 + -1.5825871443807662e+00 1.7497621859838883e+00 1.7101762567803647e+00 + -2.0543338688771042e+00 2.0378134403513437e+00 1.6602141856186996e+00 + -2.5304418467825007e+00 2.2168598921309743e+00 1.3714674411479411e+00 + -2.8512569412876863e+00 2.2381773835561045e+00 8.3147440407498863e-01 + -2.8779844553522445e+00 2.1022511547133140e+00 2.1335134559983215e-01 + -2.6754396591489296e+00 1.8561778516187131e+00 -3.1208045231704973e-01 + -2.3187457816327637e+00 1.4959615815557012e+00 -6.9360349931342469e-01 + -1.9226162229607822e+00 1.0829135053279735e+00 -8.9977900950240086e-01 + -1.6470342096799420e+00 7.6457195645738685e-01 -1.0592264148932788e+00 + -1.5675411216289388e+00 6.5654818503783008e-01 -1.3132648605607424e+00 + -1.7083962240400106e+00 8.8301813307478372e-01 -1.5924500511074278e+00 + -2.0616123654789060e+00 1.6003908477773698e+00 -1.4859771621948457e+00 + -2.2543848505269164e+00 2.2324225193503819e+00 -7.5814554866405104e-01 + -2.2863359764611304e+00 2.4510946268649612e+00 -9.7437006618728250e-01 + id 11723 + loc 1.3756205141544342e-01 4.1726109385490417e-01 1054 + blend 0.0000000000000000e+00 + interp 5.0345980757528452e-01:3.0414888577702504e-01:2.3471512140083794e-01:3.6872353289886695e-01:1.0699657859016538e+00:5.0140946963626820e-01:2.0023659191867509e+00:3.3105813915583332e-01:2.4644130459955624e+00:4.7368211261839493e-01:3.2785891944725587e+00:5.0345477297720875e-01:3.8755487643423225e+00 + CVs 20 + -4.8900038107037719e-02 4.4348429236961084e-01 -2.2751412442570207e-01 + -7.3263704412679043e-02 9.0996426906199990e-01 -4.3673626047422059e-01 + -3.1259173305519972e-02 1.4055520448713121e+00 -6.0302151638891099e-01 + 1.1209037227242735e-01 1.9172261477945498e+00 -7.5113490619596512e-01 + 3.6649776168117620e-01 2.3916264758323948e+00 -9.5259481161139581e-01 + 7.0016401301244624e-01 2.7506208415265387e+00 -1.2674280678891634e+00 + 1.0474046490595430e+00 2.9101556011838934e+00 -1.7078012644287284e+00 + 1.3137534518898142e+00 2.8124236556535509e+00 -2.1979243855795829e+00 + 1.4723116653045598e+00 2.5082798730708511e+00 -2.6190662995772311e+00 + 1.5618488784788913e+00 2.0997079638916474e+00 -2.9067852575640329e+00 + 1.6194573766709583e+00 1.6886937871723502e+00 -3.0543621497222873e+00 + 1.6642542257501269e+00 1.3395166112621275e+00 -3.0927402441000060e+00 + 1.7188389462080171e+00 1.0386616642793514e+00 -3.0600652433048201e+00 + 1.8380017692859689e+00 7.3424168610057516e-01 -3.0917705963231770e+00 + 1.9412512989587221e+00 4.9603712318117604e-01 -3.3065084222284060e+00 + 1.9393631471804860e+00 3.3434904963325957e-01 -3.5825488001859069e+00 + 1.8189327788750989e+00 2.6817002278215413e-01 -3.7640452055794467e+00 + 1.5923425852601580e+00 2.9289539894359773e-01 -3.8746755664723773e+00 + 1.5857335337337313e+00 -6.8794866639591501e-02 -4.0528992511278767e+00 + id 11724 + loc 1.7380362749099731e-01 9.7494715452194214e-01 1077 + blend 0.0000000000000000e+00 + interp 3.1764448090329322e-01:2.8552870398057723e-01:2.1767473821570404e-02:3.1764130445848421e-01:7.8587749322098666e-01:3.0624098933747201e-01:1.6425911047541599e+00:1.4893448934789119e-01:2.4184122883477488e+00:2.7897856490173245e-01:3.3816148316418895e+00 + CVs 20 + 7.7569952032557149e-02 2.6043227603458952e-01 -1.3211389639066320e-01 + 1.6537514566582093e-01 5.6323335164795418e-01 -2.3961908983357189e-01 + 2.8269702336657837e-01 8.9360069198735115e-01 -3.6700148066345406e-01 + 4.3793812676518012e-01 1.2229984820813404e+00 -5.4209390639326072e-01 + 6.3536813279564264e-01 1.5368718110282358e+00 -7.7441031490924850e-01 + 8.7937423139457360e-01 1.8145166537955038e+00 -1.0694160186719377e+00 + 1.1716399157658317e+00 2.0259969064837771e+00 -1.4234329569454118e+00 + 1.5048509708332942e+00 2.1430349383411245e+00 -1.8219826744021461e+00 + 1.8618597046980967e+00 2.1505769201831493e+00 -2.2463412589177807e+00 + 2.2200193013654581e+00 2.0462964661768202e+00 -2.6782264120865187e+00 + 2.5558679856250905e+00 1.8367529472429316e+00 -3.1010128576065132e+00 + 2.8478051947198231e+00 1.5349443984555768e+00 -3.4997947911599141e+00 + 3.0792356853916574e+00 1.1596589473040413e+00 -3.8587825872482893e+00 + 3.2443911054835066e+00 7.3586051247487205e-01 -4.1587245365319827e+00 + 3.3516027889782229e+00 2.9235015399946218e-01 -4.3767250801289146e+00 + 3.4120613164315778e+00 -1.4915809134409308e-01 -4.4762523927862334e+00 + 3.4180490574367353e+00 -5.5443681607609796e-01 -4.3547606531006275e+00 + 3.3525125704744418e+00 -7.5002471571830220e-01 -3.9168405690545001e+00 + 3.3443577703024445e+00 -1.0179845153612903e+00 -3.8366506224831287e+00 + id 11725 + loc 7.3722249269485474e-01 6.3694548606872559e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2430529332371808e-01:2.5920036882298753e-01:2.7289469082266526e-01:3.0874541850328219e-01:1.0114737890013685e+00:3.9385997103163212e-01:1.8992354689379312e+00:2.5297798778362818e-01:2.3262697751589796e+00:4.2430105027078485e-01:2.9377012793107484e+00:2.9266794076574321e-01:3.6072395480035793e+00 + CVs 20 + -1.3837153458692575e-01 4.4995326253841750e-01 1.1488687002305617e-01 + -3.1503767006228012e-01 8.7604127798465792e-01 1.7559236016428897e-01 + -5.3884064982073354e-01 1.2837865510150150e+00 1.9786768749128991e-01 + -8.1687865803081983e-01 1.6602827970805789e+00 1.7454996192183447e-01 + -1.1462316596147566e+00 1.9779414750988493e+00 8.9295768686953325e-02 + -1.5104932937162843e+00 2.2073930462990510e+00 -6.7877869158364801e-02 + -1.8802121133048539e+00 2.3241875516380603e+00 -2.9609448934152427e-01 + -2.2209034595247177e+00 2.3185095187901510e+00 -5.7967020615592280e-01 + -2.5106231230020661e+00 2.1965860192762614e+00 -8.8872793030030506e-01 + -2.7570892789530879e+00 1.9755136487539262e+00 -1.1835908664329482e+00 + -2.9860610391381526e+00 1.6726794806264944e+00 -1.4271735869001851e+00 + -3.2092605310303659e+00 1.3004005096179800e+00 -1.5893027869864031e+00 + -3.4250630320101934e+00 8.7463354084778799e-01 -1.6382256408920672e+00 + -3.6363050202795595e+00 4.2918711030671353e-01 -1.5356535683986303e+00 + -3.8448401538594217e+00 2.8881761927941341e-02 -1.2448970928080814e+00 + -4.0459613653491751e+00 -2.2403162167171020e-01 -8.0464979446332485e-01 + -4.2637933387534259e+00 -2.6442528314873170e-01 -3.3279854079875520e-01 + -4.4933578148589355e+00 -9.8816881077205210e-02 7.8920153441908725e-02 + -4.6624522536755597e+00 -1.5499500205710126e-01 3.6734944065704767e-01 + id 11726 + loc 8.7867331504821777e-01 5.8101850748062134e-01 1087 + blend 0.0000000000000000e+00 + interp 3.4166353116333217e+00:7.0057259843731134e-01:2.0804602235252565e+00:4.0251746433797470e-01:2.1720537875361234e+00:5.3512525825747526e-01:2.6949823454214643e+00:5.3641176003946667e-01:3.0064970053782485e+00:4.7507751527256947e-01:3.3600339850271443e+00:7.4219210572099348e-01:3.8508582863555745e+00:3.7607747170888106e-01:3.9000584185223528e+00:2.4785114797816714e+00:3.9845149834294968e+00:3.4166253116333216e+00:3.9984500204394657e+00 + CVs 20 + -2.0493575974926148e-01 3.7811005091148298e-01 5.1837597826932214e-01 + -4.1533742580191846e-01 6.4565000567311470e-01 8.5909136797902952e-01 + -6.4406672689441558e-01 8.7753325307110563e-01 1.1414804414817776e+00 + -8.9506825205819363e-01 1.0989285545039822e+00 1.4032812489455013e+00 + -1.1713614933413532e+00 1.3031120849160620e+00 1.6271054129730136e+00 + -1.4686514187486515e+00 1.4782498779721054e+00 1.7953877867444981e+00 + -1.7737959998413273e+00 1.6089582401288320e+00 1.8932391458073725e+00 + -2.0645913038104498e+00 1.6803932383309814e+00 1.9131672739601833e+00 + -2.3124814340698205e+00 1.6836015868477203e+00 1.8619280456122602e+00 + -2.5042361833542270e+00 1.6200593783222925e+00 1.7612062481631481e+00 + -2.6551153729355530e+00 1.4933442815229865e+00 1.6327898509136953e+00 + -2.7828921909616184e+00 1.3006693068155899e+00 1.4938970338935476e+00 + -2.8978693599929874e+00 1.0382882447193880e+00 1.3658816960565070e+00 + -3.0103204272895878e+00 7.0887421260471217e-01 1.2836849400838506e+00 + -3.1344724127819039e+00 3.2924744402954498e-01 1.2848867750855173e+00 + -3.2993986980705321e+00 -7.0864992498388790e-02 1.3823906979028953e+00 + -3.5367354552847714e+00 -4.3385943048112602e-01 1.5730227565367532e+00 + -3.8214300418761389e+00 -7.1159225754318900e-01 1.8133015244522301e+00 + -4.0367044447069453e+00 -9.7760134940040766e-01 1.9899091513439799e+00 + id 11727 + loc 6.5591180324554443e-01 4.5171523094177246e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3023853092431247e-01:4.3023422853900323e-01:8.2468499337329249e-04:3.6123262346580504e-01:8.6664946899620798e-01:4.1132185819911599e-01:1.3464064724956872e+00:3.4223791986579322e-01:2.0028762267270945e+00:3.2029280545957628e-01:2.6906093424769839e+00:3.6726723600215799e-01:3.1607576250218448e+00 + CVs 20 + -4.0908568994399500e-03 3.7521016321123452e-01 2.0315051162255632e-01 + -2.8198564966540482e-02 7.3923377301046234e-01 4.1411629559397722e-01 + -7.5302290558484752e-02 1.0869232146678471e+00 6.2217030544367669e-01 + -1.4983422707419872e-01 1.4135400730836536e+00 8.2514556698446473e-01 + -2.5448636781792000e-01 1.7133801411304699e+00 1.0302064282856644e+00 + -3.8516900103597868e-01 1.9772785502611356e+00 1.2489794656667803e+00 + -5.2572515804287767e-01 2.1930864529387208e+00 1.4856950423632185e+00 + -6.5379519370071359e-01 2.3544837669966103e+00 1.7335647609679685e+00 + -7.5468584644248193e-01 2.4660398250186035e+00 1.9827851962482850e+00 + -8.2552600089779471e-01 2.5381859837391971e+00 2.2285131798096680e+00 + -8.7043303216519918e-01 2.5792388609799164e+00 2.4678228638777511e+00 + -8.9612993249095640e-01 2.5924297872049027e+00 2.6990417763105512e+00 + -9.0898447753296718e-01 2.5773156515321332e+00 2.9249230694280457e+00 + -9.1402829426866916e-01 2.5306620185391102e+00 3.1497820362627582e+00 + -9.1581697550157171e-01 2.4465095295941883e+00 3.3694145830574667e+00 + -9.2440399035267640e-01 2.3208863857702386e+00 3.5661572350854462e+00 + -9.4304184197220930e-01 2.1494885698771968e+00 3.7166048862270187e+00 + -9.4523360815516155e-01 1.9274322212557797e+00 3.7745794754007633e+00 + -8.5530381451712001e-01 1.6547796376197847e+00 3.6073446721493023e+00 + id 11728 + loc 3.5784560441970825e-01 2.4240434169769287e-01 1090 + blend 0.0000000000000000e+00 + interp 1.5027867010072440e+00:3.8091362469224882e-01:1.8266351485176613e-01:2.6182402758450524e-01:1.2788860618158195e+00:4.6382926931997953e-01:1.9103275203253540e+00:1.5027767010072439e+00:3.2796573890367924e+00:1.1496309434844012e+00:3.4978011100593749e+00:6.9258605695079156e-01:3.7605110814832416e+00:4.6482465209093105e-01:3.9224906832076956e+00 + CVs 20 + 3.2899012786061005e-01 4.7102312815493924e-01 -2.5928209163701560e-02 + 5.4101615828211014e-01 8.5788394614533692e-01 3.1671103688060642e-02 + 6.9636769001500809e-01 1.2047380345685670e+00 1.3138646976545720e-01 + 8.1481284975656920e-01 1.5226084363941417e+00 2.5392895002618943e-01 + 8.8453084141376581e-01 1.7937692151193998e+00 3.9474844663959763e-01 + 9.0041972755682176e-01 1.9984444319164609e+00 5.4057428769815674e-01 + 8.6887035948941738e-01 2.1173256934443403e+00 6.6618793649169317e-01 + 8.1644705471542656e-01 2.1475360679091233e+00 7.3860191357781935e-01 + 7.7797959513041648e-01 2.1247729780567948e+00 7.4844441546793095e-01 + 7.4575203091139142e-01 2.0912538718532270e+00 7.3560750970557576e-01 + 6.8647849528857974e-01 2.0416318326395100e+00 7.3228800094530710e-01 + 5.9744035692618791e-01 1.9583659701712677e+00 7.3849262503080348e-01 + 4.9159400319876317e-01 1.8353221618835538e+00 7.5053847070440249e-01 + 3.8049921775964696e-01 1.6670099343225955e+00 7.7059278320504265e-01 + 2.7948102632006211e-01 1.4485606510452904e+00 8.0371806476518259e-01 + 2.1575317033939673e-01 1.1681073676409568e+00 8.5856705095840691e-01 + 2.3173703356130354e-01 8.1534650610469983e-01 9.4731613073584586e-01 + 3.6458381590326006e-01 4.1988880863441036e-01 1.0867897481697324e+00 + 4.9435899755085833e-01 2.2086696217157953e-01 1.2106652226312247e+00 + id 11729 + loc 2.8066661953926086e-01 5.7309222221374512e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1598871729310344e-01:3.7406883465690366e-01:3.6751280543056986e-02:3.7569397030979368e-01:8.9978444981767847e-01:3.8423227099290075e-01:1.5542731862444239e+00:4.1598455740593054e-01:2.0543863728127847e+00:3.6030771879154694e-01:2.7510613321359143e+00:2.9032889258889244e-01:3.5053322029610596e+00 + CVs 20 + 1.5423779616621219e-01 6.4885475287720507e-01 -2.4733649949968001e-01 + 3.3557747655498960e-01 1.2821067326539748e+00 -4.2304178276429938e-01 + 5.6807435692991293e-01 1.8977235549038722e+00 -5.0678934693793687e-01 + 8.7944454798534588e-01 2.4776613814107868e+00 -4.8695937991763161e-01 + 1.2946314331585065e+00 2.9712868355965081e+00 -3.7600220337697998e-01 + 1.8094717350542258e+00 3.3259574679902886e+00 -2.2786024028714813e-01 + 2.3921277436649291e+00 3.5073555154358713e+00 -9.9178194710843215e-02 + 3.0053819545807019e+00 3.4876748458097189e+00 -1.7309186510195085e-02 + 3.6072763377968897e+00 3.2400311362908996e+00 1.1087681417906170e-02 + 4.1272540072285233e+00 2.7612713968054763e+00 1.2682401546949218e-02 + 4.4739580047995275e+00 2.0881590993399124e+00 7.8248957719603607e-02 + 4.5798570841307447e+00 1.3047225369929856e+00 3.0617092797947554e-01 + 4.4512155058315788e+00 4.9699961524059311e-01 6.9914849337863894e-01 + 4.1472817856040098e+00 -3.1547931330578771e-01 1.1445592292388000e+00 + 3.7823290240289054e+00 -1.1466131051121435e+00 1.4629769873255363e+00 + 3.7015156681200638e+00 -2.0309346304819496e+00 1.4284258601358577e+00 + 5.6808319128602669e+00 1.4556379263258190e-01 7.9467322378698091e-01 + 5.1655223908909056e+00 8.9523106825823340e-01 1.3127782416780065e+00 + 5.3287614825995639e+00 1.3925124880725754e+00 1.3947422301446166e+00 + id 11730 + loc 9.9931299686431885e-02 4.2969009280204773e-01 1084 + blend 0.0000000000000000e+00 + interp 3.5386121990923841e-01:3.0262349019916751e-01:8.2813231600832315e-03:2.9723389483695428e-01:7.4487150586860373e-01:3.5385768129703932e-01:1.9537769101885449e+00:3.4520328893921520e-01:2.4365087797688139e+00:2.7945894389967502e-01:3.2021386552988251e+00 + CVs 20 + 3.0202454380620519e-01 3.6272932920102063e-01 3.5343296529301010e-01 + 5.1974154024667818e-01 6.2834503319018908e-01 6.8386273858518620e-01 + 7.3810269516274962e-01 8.5464047491634254e-01 1.0028865446909780e+00 + 9.7932511363232999e-01 1.0525839138712783e+00 1.3000410896652250e+00 + 1.2182366066671624e+00 1.2142011866018521e+00 1.5800269735353338e+00 + 1.4323366525969035e+00 1.3365175455556018e+00 1.8458147965754623e+00 + 1.6088395795477506e+00 1.4183354618148016e+00 2.0870730366920895e+00 + 1.7536927193123126e+00 1.4597423782626369e+00 2.2756410314974564e+00 + 1.8965744660757764e+00 1.4766643750193806e+00 2.3914358024485201e+00 + 2.0396756171084638e+00 1.5017351812219191e+00 2.4756696603967643e+00 + 2.1404734867804374e+00 1.5507173062839514e+00 2.5591284556644611e+00 + 2.1856925901804258e+00 1.6334106418972452e+00 2.6253024683906445e+00 + 2.1548032364801442e+00 1.7039891568547194e+00 2.6820997997286184e+00 + 2.0530308906395041e+00 1.6195686947705206e+00 2.7557306120181324e+00 + 1.9235766938983951e+00 1.3173874094493139e+00 2.8404120119159972e+00 + 1.7418600515978588e+00 8.5785721361541389e-01 2.8852153580578865e+00 + 1.4318394897883686e+00 3.3786901097240107e-01 2.8375729499462654e+00 + 9.5612601301394462e-01 -9.5452933004299911e-02 2.7060513882198931e+00 + 6.4479901456826338e-01 -2.5890371042430643e-01 2.6780960992166616e+00 + id 11731 + loc 3.6778295040130615e-01 5.1898318529129028e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9966041086736237e-01:3.9682369114047661e-01:7.1348388465106849e-01:2.5590756334263393e-01:1.0297278476637179e+00:3.6544089129617069e-01:1.9528521812315678e+00:3.9965641426325371e-01:2.3269739373083409e+00:3.7979076380369420e-01:3.0372034025188190e+00:2.6980038726063232e-01:3.7746416396545688e+00 + CVs 20 + 3.3613222145546823e-02 2.6994530735264166e-01 -2.0222137609839191e-01 + 7.5184630191645868e-02 5.3583654884932741e-01 -4.1676031136246316e-01 + 1.1499391309771384e-01 8.0030054424099872e-01 -6.3751318684904845e-01 + 1.5330757283844415e-01 1.0644245453537824e+00 -8.6993869897075915e-01 + 1.9097983840990718e-01 1.3274988733869799e+00 -1.1200373823173702e+00 + 2.1967879515506716e-01 1.5902779135188085e+00 -1.3827078985766177e+00 + 2.3321585656644106e-01 1.8550169809698991e+00 -1.6507700733265771e+00 + 2.3918739723327498e-01 2.1225614468792298e+00 -1.9274876150616091e+00 + 2.5353153870782286e-01 2.3850236036830745e+00 -2.2267210837526221e+00 + 2.8569285005343126e-01 2.6177900321724810e+00 -2.5676178379455017e+00 + 3.2987307480066974e-01 2.7747896992280170e+00 -2.9695291228832619e+00 + 3.6355035676568148e-01 2.7953030694615530e+00 -3.4292704839616341e+00 + 3.6477481520980981e-01 2.6496704313322805e+00 -3.8963386495228058e+00 + 3.4870968979580053e-01 2.3843725090099457e+00 -4.3183540942759233e+00 + 3.4387058831981765e-01 2.0633399924380251e+00 -4.6937946463522433e+00 + 3.4450428714062453e-01 1.7177298421739879e+00 -5.0324671537026964e+00 + 3.1404089127661172e-01 1.3644472600815720e+00 -5.3327244563813512e+00 + 2.3452810459543899e-01 1.0081572231956772e+00 -5.5934529400493380e+00 + 2.5530701341825507e-01 7.3740851862731427e-01 -5.8582397367999279e+00 + id 11732 + loc 1.2384966760873795e-01 6.4120745658874512e-01 1076 + blend 0.0000000000000000e+00 + interp 4.6779921043616302e-01:4.2088148240930712e-01:3.2006209730845037e-01:4.5105633867343559e-01:9.3803200053917069e-01:4.6779453244405866e-01:1.2251758756785449e+00:3.4192896258983752e-01:1.9995602267423125e+00:2.7899777862408504e-01:2.9997907266356325e+00:3.2109296422737882e-01:3.9192193107180020e+00 + CVs 20 + 1.2031448827486949e-01 3.3924145639190384e-01 1.3676545677347260e-02 + 2.5677533917464096e-01 6.6878268360991211e-01 -6.9863975247920207e-03 + 3.9361713146845095e-01 9.9358386452374692e-01 -4.6813683015440255e-02 + 5.2627169985578237e-01 1.3191396469683718e+00 -1.0331866693460090e-01 + 6.5847674595983174e-01 1.6432127196936770e+00 -1.8559951230207172e-01 + 7.9621857070082447e-01 1.9609020179185479e+00 -3.0331303611825233e-01 + 9.4449437103499012e-01 2.2609611106984078e+00 -4.6555426212130846e-01 + 1.1020277599911816e+00 2.5274782171192993e+00 -6.7930869488212509e-01 + 1.2624663362790607e+00 2.7438459301682956e+00 -9.5144667384558324e-01 + 1.4176676566534427e+00 2.8902906937966373e+00 -1.2855631633002524e+00 + 1.5590378967127454e+00 2.9464289016693872e+00 -1.6710244641138499e+00 + 1.6774023904835071e+00 2.9031487930853679e+00 -2.0799699989853662e+00 + 1.7625509830056985e+00 2.7770921504668626e+00 -2.4736667410962703e+00 + 1.8076442260834400e+00 2.6168057408242000e+00 -2.8159393549377292e+00 + 1.8170093760696608e+00 2.4696337373265838e+00 -3.0978907278255132e+00 + 1.7983849606630906e+00 2.3479821355464665e+00 -3.3351438438921339e+00 + 1.7576184933844561e+00 2.2481302499434408e+00 -3.5403044520638467e+00 + 1.6864713077127371e+00 2.1577396832736611e+00 -3.7253304317118476e+00 + 1.4811814121413736e+00 2.0598722928527446e+00 -3.9233588624905416e+00 + id 11733 + loc 8.7534540891647339e-01 2.3332792520523071e-01 1085 + blend 0.0000000000000000e+00 + interp 3.1666111760915827e-01:2.9044238459655880e-01:2.2704337237758432e-01:2.9010360893113085e-01:1.0285910070755853e+00:3.1665795099798222e-01:1.9995058823056322e+00:2.6870967360189502e-01:2.7319956631060300e+00:3.0742769296835926e-01:3.2824361100187840e+00 + CVs 20 + 3.2931843302737734e-01 3.3380466948778231e-01 -1.3762500500315750e-01 + 6.5689704853312381e-01 6.4527118853937093e-01 -2.4168973238851754e-01 + 1.0136460132194871e+00 9.1914506558194597e-01 -3.1148571134409497e-01 + 1.4099603002774681e+00 1.1384626604863479e+00 -3.3197035817327747e-01 + 1.8368932805587419e+00 1.2852162545167991e+00 -2.8696308071303150e-01 + 2.2767525265210478e+00 1.3483957838217930e+00 -1.7045694946671708e-01 + 2.7075499277974284e+00 1.3259774586249211e+00 1.4730210838395319e-02 + 3.1071273475812653e+00 1.2237947873540684e+00 2.5755245096899965e-01 + 3.4583245638752436e+00 1.0531597107564479e+00 5.3339857481110697e-01 + 3.7592643293594312e+00 8.2990815867302237e-01 8.0323034971423046e-01 + 4.0193336279930056e+00 5.7004249375683458e-01 1.0250249988669908e+00 + 4.2469936315677064e+00 2.8942586340233212e-01 1.1661299393497517e+00 + 4.4492809660077111e+00 8.7198340801112328e-03 1.2116552221261525e+00 + 4.6404989466033069e+00 -2.3857015230042733e-01 1.1507479102717431e+00 + 4.8343024561981194e+00 -3.9684672446092129e-01 9.8456264808062444e-01 + 5.0578748004348792e+00 -4.2512473151957741e-01 7.7656422264311253e-01 + 5.3259538007952312e+00 -3.1946700514415238e-01 6.0623985071108821e-01 + 5.6100541647834445e+00 -1.5960920411411705e-01 5.1814169667119603e-01 + 5.9681903378730423e+00 -1.5517785746886514e-01 4.5891743824042730e-01 + id 11734 + loc 1.7345614731311798e-01 1.7171530053019524e-02 1053 + blend 0.0000000000000000e+00 + interp 7.7620427152859428e-01:3.8184796368452356e-01:8.5263753621668714e-02:2.4288529840235049e-01:1.0072245400820032e+00:6.5169205976282252e-01:1.2840186731818319e+00:7.7619650948587904e-01:3.0020123882574801e+00:4.2009746198337572e-01:3.0661560824773155e+00:2.1814084351430479e-01:3.2339548703888275e+00:3.4698478996411186e-01:3.8887082267553210e+00 + CVs 20 + 3.1576296003614696e-01 4.4045300097556295e-01 3.1188285255730239e-02 + 5.4397960470898887e-01 8.4165754591782216e-01 1.0793453681668783e-01 + 6.9215660001293611e-01 1.2257158215454200e+00 1.9082879870480324e-01 + 7.7562993838420513e-01 1.5719848587634133e+00 2.7211238140150934e-01 + 8.1637712612542335e-01 1.8553641645320247e+00 3.6238619463465610e-01 + 8.4024351998556956e-01 2.0892128475951730e+00 4.7585654664898225e-01 + 8.7588716768366870e-01 2.2874637772935893e+00 6.2558087503353854e-01 + 9.5168427083819940e-01 2.4281505877513609e+00 8.0757186083282406e-01 + 1.0671650465539557e+00 2.4821133740011865e+00 9.9074078343675098e-01 + 1.1974971531871481e+00 2.4176303011454126e+00 1.1272022855733868e+00 + 1.3001017787275073e+00 2.2045082338896065e+00 1.1847423295467419e+00 + 1.2488398945584192e+00 1.8145223539994759e+00 1.2475616483815812e+00 + 9.0502961345284794e-01 1.2683216614360908e+00 1.5660590369367222e+00 + 5.8291293010242351e-01 7.9633138872209575e-01 2.3464033598219505e+00 + 6.3821725217938419e-01 6.1782568563495766e-01 3.1144336715275198e+00 + 8.6614548851905870e-01 6.0374540848864200e-01 3.5694113576686526e+00 + 1.0491844611700756e+00 7.0105896926937383e-01 3.6094470001606478e+00 + 1.2321706225917084e+00 9.2416175891365904e-01 3.2775593449394766e+00 + 1.3188217084563654e+00 5.7701781282070685e-01 3.5762484393858092e+00 + id 11735 + loc 1.3086505234241486e-01 8.6272203922271729e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9884498404591012e-01:3.7117876326525073e-01:9.3487492367236735e-01:3.9884099559606967e-01:1.3887767350625908e+00:3.5980834233006537e-01:2.0011974120228171e+00:3.8123105099135457e-01:2.8507888465156181e+00:3.0171660470153089e-01:3.1399704924859657e+00:3.4171216838594848e-01:3.8599910297250442e+00 + CVs 20 + 5.7232199037664966e-01 4.7925984996004917e-01 -1.4175160621087918e-01 + 1.1162530041750949e+00 9.8372627395040801e-01 -1.9050288104015572e-01 + 1.6024818240628813e+00 1.5260477844299085e+00 -1.1220345906347240e-01 + 2.0141780414497124e+00 2.0697456912560428e+00 1.1965653524142683e-01 + 2.3337766719505249e+00 2.5421519248546822e+00 4.9814455890577969e-01 + 2.5593191757685116e+00 2.8901095315617509e+00 9.8483971748112620e-01 + 2.6984995020475031e+00 3.0841509567611718e+00 1.5663506800812188e+00 + 2.6913435330369846e+00 3.1024242327614640e+00 2.1523833053005861e+00 + 2.5286623407996012e+00 2.9660560848998805e+00 2.7452168974219293e+00 + 2.2320819730048354e+00 2.6853149178356484e+00 3.3216909859823152e+00 + 1.8199269350032492e+00 2.3254512048694482e+00 3.7998045157234848e+00 + 1.3375786598387662e+00 1.9680594186484792e+00 4.1371050561171048e+00 + 8.6400280927496431e-01 1.6642187518382581e+00 4.3412677387062528e+00 + 4.1935940924528692e-01 1.4114501420332941e+00 4.4308294221009117e+00 + -7.2004113515202944e-02 1.2082175249827984e+00 4.3815880361412827e+00 + -6.4778367921218138e-01 1.1276306810883812e+00 4.1752797675769369e+00 + -1.2044001226966123e+00 1.2099009654623032e+00 3.9100448077384851e+00 + -1.5853638416775235e+00 1.3927371356595946e+00 3.6936353536121627e+00 + -1.6077931020911476e+00 2.0235421685720691e+00 3.4166868152308512e+00 + id 11736 + loc 8.4732890129089355e-01 9.7369736433029175e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2721601885488975e-01:3.6001923859153651e-01:2.2731172565769719e-01:4.2721174669470119e-01:9.3868505149326154e-01:4.1038973743663409e-01:1.3425486847762824e+00:2.2301579670921390e-01:1.9034700674957059e+00:2.3726601441484088e-01:2.8379241274954765e+00:3.6778696608788120e-01:3.0182565824253471e+00:4.2338354212021645e-01:3.5142411640415041e+00 + CVs 20 + 1.6736335676920766e-01 2.7427869275104272e-01 -3.5382110392375088e-01 + 3.9230306519160274e-01 5.1668288469447532e-01 -6.5722011995083518e-01 + 6.4538056764751739e-01 7.2019470399266028e-01 -9.1754888581014049e-01 + 9.0682292867025083e-01 8.8000553402838977e-01 -1.1457214372652293e+00 + 1.1640808211372853e+00 9.9734705174327454e-01 -1.3535717653120640e+00 + 1.4064194608426916e+00 1.0676344233384849e+00 -1.5424165606851743e+00 + 1.6209224326539167e+00 1.0794472368079595e+00 -1.7002982842214549e+00 + 1.7890759382230108e+00 1.0239458426353443e+00 -1.8007915297209438e+00 + 1.8919537374459676e+00 9.1601920853158647e-01 -1.8099975170012488e+00 + 1.9197426363117300e+00 8.0608458958320450e-01 -1.7047030586394920e+00 + 1.9011071785780180e+00 7.5881673517165282e-01 -1.5176393691224312e+00 + 1.9074539419194700e+00 7.6468698173495486e-01 -1.3487490791553141e+00 + 1.9697515956920455e+00 7.3936098852937859e-01 -1.2574303892032479e+00 + 2.0689871767189021e+00 6.1116120517781269e-01 -1.2473884459103521e+00 + 2.1876788666502680e+00 3.5201623460315856e-01 -1.3113127946002681e+00 + 2.3170244434955714e+00 2.3023413839217105e-02 -1.4265386559338575e+00 + 2.4205970409872948e+00 -2.8728397377836623e-01 -1.5615640358243494e+00 + 2.5456042338884446e+00 -5.2787704527089074e-01 -1.6828460510512169e+00 + 2.8616638184551348e+00 -5.4372457148306375e-01 -1.6220070715489805e+00 + id 11737 + loc 8.4732890129089355e-01 9.1051715612411499e-01 410 + blend 0.0000000000000000e+00 + interp 4.8846850164485167e-01:2.8055266272444468e-01:1.6739568888584289e-01:3.4297615159984540e-01:1.3521050935091825e+00:4.8846361695983526e-01:1.8739717878579516e+00:2.6649626805222676e-01:2.6356877178306211e+00:3.7080698335008122e-01:3.5406179680082421e+00 + CVs 20 + 6.1780025600488697e-01 2.3740476446828757e-01 -2.1098423841681152e-01 + 1.0955816975888655e+00 3.8860162246646290e-01 -4.3396772552311719e-01 + 1.5460178874663615e+00 5.1537549255051118e-01 -6.6375074457834493e-01 + 1.9873887289477172e+00 6.2562486502985815e-01 -8.9825539915486641e-01 + 2.3897203870554677e+00 7.0373737474554199e-01 -1.1326447201118304e+00 + 2.7397847969252669e+00 7.4640452563952098e-01 -1.3623027235348590e+00 + 3.0555930395781239e+00 7.5803966483921992e-01 -1.5953008164138027e+00 + 3.3758699150201039e+00 7.3140077986423813e-01 -1.8601462340390671e+00 + 3.7309600260991131e+00 6.4012193655386995e-01 -2.1804873368602564e+00 + 4.1296430434787688e+00 4.4516094527514061e-01 -2.5500521632538682e+00 + 4.5552519019285640e+00 1.0352426960693117e-01 -2.9301018016134046e+00 + 4.9768478419690414e+00 -3.8434598742985315e-01 -3.2785727432719884e+00 + 5.3811648711768658e+00 -9.5287070663921147e-01 -3.6161228646848276e+00 + 5.7728158133747680e+00 -1.5176704609598635e+00 -4.0020256410880437e+00 + 6.1680107952054239e+00 -2.0214587785974039e+00 -4.4506278229579763e+00 + 6.6004231983275012e+00 -2.4793652787911227e+00 -4.9375736132279258e+00 + 7.0964218362768481e+00 -2.9608322379128089e+00 -5.4221644107463067e+00 + 7.6416487259422388e+00 -3.5047957076110250e+00 -5.8581203437933196e+00 + 8.1534746626421324e+00 -4.1449202955136490e+00 -6.2875410351112553e+00 + id 11738 + loc 7.8455001115798950e-01 5.5263686180114746e-01 1090 + blend 0.0000000000000000e+00 + interp 1.1496409434844013e+00:5.2006417799691051e-01:2.8907952188484465e-01:1.1496309434844012e+00:6.4923399142765370e-01:4.6072571240672927e-01:2.0178713712502949e+00:5.1249654750976714e-01:2.9653341286543498e+00:3.3424227028236791e-01:3.6307881305819087e+00:4.9758844541731334e-01:3.9974248017883420e+00 + CVs 20 + 1.8105701373169297e-01 4.3999436504365441e-01 1.3929964702284764e-01 + 2.4983073373431425e-01 7.9340007850104532e-01 2.2644566665671159e-01 + 2.7530276250694657e-01 1.1075987606854949e+00 2.9204339323563111e-01 + 2.9368226788940227e-01 1.3956748195681510e+00 3.5097479907986706e-01 + 3.0898786819429563e-01 1.6498072050552905e+00 4.0134966298642721e-01 + 3.2936622151811490e-01 1.8685511571269422e+00 4.4847398881238887e-01 + 3.5867536636403108e-01 2.0746667184141874e+00 5.0036998517240261e-01 + 3.6875622925729723e-01 2.3096164082549624e+00 5.4437817447128722e-01 + 3.0589360079130390e-01 2.5578699416567541e+00 5.3714497019739538e-01 + 1.7767430137344142e-01 2.7404759514020478e+00 4.6059609260203915e-01 + 3.8098623852963698e-02 2.8301635748489140e+00 3.3406903621129991e-01 + -8.2707972094241855e-02 2.8473471327860413e+00 1.7165158737353037e-01 + -1.7455164367901088e-01 2.8125192971754780e+00 -2.7077442051062106e-02 + -2.3511850197528172e-01 2.7315324293784879e+00 -2.7588921742095351e-01 + -2.7675117727204213e-01 2.5850371823167961e+00 -5.9287493107218714e-01 + -3.0850073727883576e-01 2.3123015114241690e+00 -9.3587216270986340e-01 + -3.0273563389229574e-01 1.8606365799133364e+00 -1.1913904359516163e+00 + -2.6177374712805801e-01 1.2561386987959846e+00 -1.2330780621920905e+00 + -2.7243057280276872e-01 1.0175496302625118e+00 -1.0351517977196023e+00 + id 11739 + loc 8.8691473007202148e-01 2.4442943930625916e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8159162748464562e-01:2.8577418726979187e-01:2.7024984357822857e-02:3.9265411280606966e-01:7.3554372643984445e-01:2.5528367341281505e-01:1.2357229934839324e+00:4.2113724308056938e-01:1.9447571254541587e+00:4.0971188340934050e-01:2.1328262381808223e+00:3.9607963797050921e-01:2.7084172915409903e+00:4.8158681156837080e-01:2.9998127627672506e+00:4.3865263518582909e-01:3.3174115215940834e+00 + CVs 20 + -1.1747342052684755e-01 1.4933662683709209e-01 2.1741018382081603e-01 + -1.9822765299658640e-01 3.3876856141632594e-01 4.4662354584868158e-01 + -2.4528715886378025e-01 5.4753465045613470e-01 6.6241247634053346e-01 + -2.6518022156097376e-01 7.5269965366192515e-01 8.4983269012711005e-01 + -2.7171858837828022e-01 9.4287558501548108e-01 1.0188816881615339e+00 + -2.8279608056588090e-01 1.1164964827058268e+00 1.1883115872481502e+00 + -3.1336235418650760e-01 1.2719031001944936e+00 1.3784986969696842e+00 + -4.0192240282391001e-01 1.3866947483923280e+00 1.6198783104143717e+00 + -5.9770348797965178e-01 1.4000135084163980e+00 1.8924098502809767e+00 + -8.9138003214176431e-01 1.2824432553391893e+00 2.1101459553438140e+00 + -1.2364020855774751e+00 1.0671125687967729e+00 2.2231721743000619e+00 + -1.5931186868653606e+00 7.9124797418907711e-01 2.2225843834709935e+00 + -1.9003009964098532e+00 4.8689957526037386e-01 2.1073934891468298e+00 + -2.0828852087476730e+00 1.9891772529663410e-01 1.9106367725826778e+00 + -2.1404576993565492e+00 -6.5065019653515854e-02 1.6764262129313934e+00 + -2.1643203790235330e+00 -3.7504863571706670e-01 1.3953791976172472e+00 + -2.3323247818010189e+00 -7.7521800246715089e-01 1.0387220703355688e+00 + -2.7596577904012669e+00 -1.0649987940650949e+00 7.0946962509930001e-01 + -3.0799122971063770e+00 -1.0803520662158657e+00 5.9874949625900498e-01 + id 11740 + loc 1.8572178483009338e-01 6.9742214679718018e-01 1077 + blend 0.0000000000000000e+00 + interp 4.0889145073526290e-01:2.9724775326039443e-01:3.2776851995561385e-01:4.0888736182075558e-01:9.9261918246220571e-01:2.9794376613931056e-01:1.6808573762592545e+00:3.2440232860098372e-01:2.5539782669025666e+00:3.4780187087076614e-01:3.3230310341283782e+00 + CVs 20 + 1.3781357368261932e-01 2.7050230676967463e-01 -5.2348892271036271e-02 + 2.3128382716584339e-01 5.5151045293921985e-01 -1.1691065780462229e-01 + 3.0957908565201708e-01 8.3826905690230613e-01 -1.9706236671331323e-01 + 3.9302130890169873e-01 1.1247296995887099e+00 -2.9504379386346768e-01 + 4.8752244054486660e-01 1.4164359527897585e+00 -4.2079239150688924e-01 + 6.0379461385979871e-01 1.7124856740071865e+00 -5.9048985506202700e-01 + 7.5685399814466514e-01 1.9966674273367893e+00 -8.1897862505084751e-01 + 9.5863272884133077e-01 2.2403188840346169e+00 -1.1105053222896060e+00 + 1.2129139488446361e+00 2.4132040660238516e+00 -1.4557590486100165e+00 + 1.5141239321361160e+00 2.4902567865431093e+00 -1.8319210166226696e+00 + 1.8455738227621123e+00 2.4592190445267517e+00 -2.2121263912868434e+00 + 2.1824662756704409e+00 2.3239585474418165e+00 -2.5800543966497029e+00 + 2.4952209778636676e+00 2.0982971280515157e+00 -2.9265822749061305e+00 + 2.7472398525033443e+00 1.8072939297051502e+00 -3.2363477067403759e+00 + 2.9034639487614564e+00 1.5013844213931244e+00 -3.4870988301196819e+00 + 2.9552512524293846e+00 1.2668963855949966e+00 -3.6477667238953453e+00 + 2.9471663665755909e+00 1.1727912512868310e+00 -3.6821088551120473e+00 + 2.9480247624075155e+00 1.1853997247406562e+00 -3.6000003087159560e+00 + 2.5795569433928409e+00 1.1537673605717911e+00 -3.8289356610029741e+00 + id 11741 + loc 9.5251828432083130e-02 4.2969009280204773e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2392762822453850e-01:2.8839882549266688e-01:7.1813880866385260e-01:3.8609519031556289e-01:1.7945413160561781e+00:3.3804707784063187e-01:2.4427603775360640e+00:2.4582921385668532e-01:3.1785556207393864e+00:4.2392338894825626e-01:3.8690001394371172e+00 + CVs 20 + 4.5968375864146560e-01 4.2235266860864962e-01 1.8040906087634723e-01 + 7.8261162419656494e-01 7.7401404124235673e-01 3.5217913525608557e-01 + 1.0507710106484336e+00 1.0973967927616788e+00 5.3366961867508189e-01 + 1.2976752846043313e+00 1.4169706371269422e+00 7.4478237330659802e-01 + 1.5132565199249026e+00 1.7287672294595082e+00 9.9979982725200400e-01 + 1.6848253188838964e+00 2.0254660369133393e+00 1.3109105584831697e+00 + 1.7951363990207367e+00 2.2943978208677818e+00 1.6861877724604106e+00 + 1.8231001183050799e+00 2.5156587540483812e+00 2.1237788284534984e+00 + 1.7511953494623389e+00 2.6636721766936038e+00 2.6049992963126125e+00 + 1.5834639946313054e+00 2.7150153831317718e+00 3.0873132361132396e+00 + 1.3554507899221364e+00 2.6650876191540616e+00 3.5290864544782345e+00 + 1.1069709575169964e+00 2.5231935290725858e+00 3.9205917252030047e+00 + 8.6751734609605036e-01 2.2994037746961067e+00 4.2669690263810907e+00 + 6.6486188145708902e-01 2.0117645745098147e+00 4.5689062995163061e+00 + 5.2529590477620403e-01 1.6900427891832317e+00 4.8285050968750962e+00 + 4.6719969659994159e-01 1.3806701749931820e+00 5.0471635557945902e+00 + 4.7301658240288985e-01 1.1401377036964759e+00 5.2232764971015548e+00 + 5.0858280249267762e-01 9.7842664014284075e-01 5.3787530565522861e+00 + 7.0945999888393219e-01 6.6390860685159880e-01 5.7269168426309580e+00 + id 11742 + loc 4.8438122868537903e-01 4.0890079736709595e-01 1053 + blend 0.0000000000000000e+00 + interp 3.9292250658181471e-01:3.8196240879045867e-01:6.6384336082364503e-01:3.5864098969375430e-01:1.2807975040357440e+00:3.7698454118344388e-01:2.1968610176217647e+00:2.8099781480568836e-01:3.0040620078428883e+00:3.9291857735674890e-01:3.9608206881497514e+00 + CVs 20 + 3.6970915946787875e-01 4.3199400690328743e-01 9.8580625068508870e-02 + 7.2168802585758529e-01 8.2243318332222004e-01 2.1854835634273378e-01 + 1.0823182276369254e+00 1.1870935308017063e+00 3.4981920006160611e-01 + 1.4606303945975276e+00 1.5317941942449138e+00 5.0556796087375011e-01 + 1.8469829411673915e+00 1.8434489257110325e+00 7.0740983256342793e-01 + 2.2308622364351889e+00 2.1045853560228167e+00 9.7509855041075810e-01 + 2.6005436869449454e+00 2.2956334960456810e+00 1.3256992411238997e+00 + 2.9387577436294690e+00 2.3939295359824087e+00 1.7727163594233173e+00 + 3.2157475329392637e+00 2.3656612067500280e+00 2.3118772141382080e+00 + 3.3943741975883399e+00 2.1657269278429725e+00 2.9081885111801147e+00 + 3.4403233432907525e+00 1.7568000648606144e+00 3.4797864381683032e+00 + 3.3545708397882006e+00 1.1776899331410522e+00 3.9077442780186535e+00 + 3.1700660213952174e+00 5.1302006185203275e-01 4.1419516831792969e+00 + 2.8957558464929543e+00 -1.8133718219799394e-01 4.2008955540595494e+00 + 2.5010042656831755e+00 -8.6155126043626651e-01 4.1282090355735512e+00 + 1.9055125010672742e+00 -1.4830257134159490e+00 3.9687438355755362e+00 + 1.0060402069093701e+00 -1.9258186132101076e+00 3.7694958800730016e+00 + -4.5794689624336415e-02 -1.9720006771917886e+00 3.6402834344785209e+00 + -4.5009409848908932e-01 -1.8707122926154716e+00 3.7049095040597027e+00 + id 11743 + loc 1.2089736014604568e-01 9.3468528985977173e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6593990690815856e-01:3.1498476410581344e-01:2.3621948311823104e-01:4.5194083241330463e-01:1.5060214368226879e+00:3.3497271567539727e-01:2.4778922028653132e+00:4.6593524750908949e-01:3.0714584336751165e+00:3.0245837073708970e-01:3.6742018210392571e+00 + CVs 20 + -1.6800840075356147e-01 3.6102873587414680e-01 4.6652854548069977e-01 + -3.3075798084921532e-01 6.5321508096002479e-01 8.3616748873571922e-01 + -4.7609675334475582e-01 9.2668161410376637e-01 1.1901345237037788e+00 + -6.0990757054291389e-01 1.2066620446366776e+00 1.5533088555534780e+00 + -7.5881885876068089e-01 1.4994215569664955e+00 1.9055290003232532e+00 + -9.5079043889540704e-01 1.8059758477190559e+00 2.2216726167785033e+00 + -1.2095426405895431e+00 2.1199411551058147e+00 2.4691455570177920e+00 + -1.5562274813666048e+00 2.4286981905871627e+00 2.5941062587699277e+00 + -1.9724312424310029e+00 2.6798104026331080e+00 2.4919391501715942e+00 + -2.3036937457652007e+00 2.7674207028403615e+00 2.1520836038181064e+00 + -2.4681310169936594e+00 2.6826315648887311e+00 1.7342280201498328e+00 + -2.5118289480755438e+00 2.4469280197110668e+00 1.3432035508105906e+00 + -2.4812005199451925e+00 2.0747439576712421e+00 1.0382315660286081e+00 + -2.3801389178064749e+00 1.6084845672728396e+00 8.0554206612504009e-01 + -2.1738504174494340e+00 1.1245768256668238e+00 5.7013370285503640e-01 + -1.8565222099737029e+00 7.5431811542957550e-01 2.6159065915265184e-01 + -1.4953193979031643e+00 6.2967289765812418e-01 -1.3105627640841563e-01 + -1.1706130853483536e+00 7.3934485569323394e-01 -5.3699233198578644e-01 + -7.9125009155844594e-01 6.8101702146278265e-01 -9.3192428243639469e-01 + id 11744 + loc 5.7882308959960938e-02 4.5852756500244141e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2092990077308501e-01:3.5122865895338284e-01:7.4842691372292758e-01:4.1950072336713806e-01:1.3923412165378712e+00:2.7805014800894901e-01:2.0097848518774208e+00:4.2092569147407732e-01:2.9644126451779869e+00:3.8221966220173398e-01:3.1975378869534845e+00:3.9375246315610024e-01:3.9780229680387884e+00 + CVs 20 + -8.6418060898394308e-02 4.5324601984137025e-01 -2.8469633382812476e-01 + -1.5826244609221179e-01 9.2246897119309579e-01 -5.2941244843511737e-01 + -1.9647280725612251e-01 1.3930846906075038e+00 -7.2705723976979808e-01 + -1.8331414454686423e-01 1.8498993905666177e+00 -8.6403728501738275e-01 + -1.5186783339289270e-01 2.3179697812187987e+00 -9.5104912547055864e-01 + -2.2692973067475397e-01 2.8660834454297639e+00 -1.0335932389220819e+00 + -5.6859940913564799e-01 3.4137794300054551e+00 -1.1673806921088474e+00 + -1.1060570607917914e+00 3.7477023794522024e+00 -1.3583592019602020e+00 + -1.6628493523914472e+00 3.8405882721929756e+00 -1.5934828613429572e+00 + -2.1282870094974511e+00 3.7690510637071468e+00 -1.8647329661908116e+00 + -2.4719803359610037e+00 3.6183117589750626e+00 -2.1623905825979723e+00 + -2.7263797241325687e+00 3.4194545156908891e+00 -2.4942611299816089e+00 + -2.9193971667451759e+00 3.1524233866354749e+00 -2.8835257059992241e+00 + -3.0408321059091157e+00 2.7609574131838102e+00 -3.3515453776955777e+00 + -3.0393274189805379e+00 2.1829554377534448e+00 -3.8497327995618269e+00 + -2.8271102318796042e+00 1.4126486861750751e+00 -4.2390275373819444e+00 + -2.2302795241091133e+00 5.2782063400292045e-01 -4.3156750575247314e+00 + -1.3765024678064819e+00 -3.3234989067416509e-02 -3.9201310361182164e+00 + -1.0052856100010923e+00 -2.3445002101699874e-01 -3.6968928135954426e+00 + id 11745 + loc 9.6260952949523926e-01 3.6093911528587341e-01 1087 + blend 0.0000000000000000e+00 + interp 1.0574203015251937e+00:4.1026165307732831e-01:4.3545686411045836e-02:3.8609519031556289e-01:7.8217554970936565e-01:5.0200380502197395e-01:1.0152818650504496e+00:5.0781830810116291e-01:1.3460304973045192e+00:3.7242214744263363e-01:1.9062613262988082e+00:3.6829986313462049e-01:3.7764007368799430e+00:7.4219210572099348e-01:3.8367038255785486e+00:1.0574103015251937e+00:3.9825290952281107e+00 + CVs 20 + 1.7137138108958141e-01 4.3131277411960689e-01 -4.0899034451869343e-01 + 3.1762929693546504e-01 7.8473706960776757e-01 -6.6643126925093865e-01 + 4.6487181619921003e-01 1.1130919196395415e+00 -8.6940196663715574e-01 + 6.2300726286338248e-01 1.4395303232983847e+00 -1.0636681422526992e+00 + 8.0290507969722358e-01 1.7623271505653233e+00 -1.2438820373100032e+00 + 1.0167871468670600e+00 2.0797102874401454e+00 -1.4039057937299928e+00 + 1.2778051966601793e+00 2.3879005319597573e+00 -1.5339092896097664e+00 + 1.5983251323798255e+00 2.6783519362235948e+00 -1.6160744591937171e+00 + 1.9850479479029131e+00 2.9354072869780010e+00 -1.6211409698163568e+00 + 2.4216573722567598e+00 3.1282041981127886e+00 -1.5105812932244167e+00 + 2.8638569968659504e+00 3.2192073852655509e+00 -1.2724805520356051e+00 + 3.2776522575733629e+00 3.1852492910846779e+00 -9.3452471642534674e-01 + 3.6488316161033629e+00 3.0125180906167799e+00 -5.3244567293140266e-01 + 3.9677808404187238e+00 2.6832682874352534e+00 -9.4761726179302563e-02 + 4.2348138322671680e+00 2.1765028893165779e+00 3.3284341279016227e-01 + 4.4446466814114336e+00 1.5226765825107944e+00 6.5593448530877763e-01 + 4.6027830349790806e+00 7.9781401590822554e-01 8.2066882012673426e-01 + 4.7778652707302705e+00 5.6187726955934658e-02 8.2307092614882482e-01 + 4.9887956312528532e+00 -4.9129926048386885e-01 7.0463696021525446e-01 + id 11746 + loc 1.8962908536195755e-02 6.0001313686370850e-02 1054 + blend 0.0000000000000000e+00 + interp 7.7719930244597690e-01:4.8435095170634035e-01:6.6460251206031251e-01:3.5699567440567759e-01:1.4069362736872995e+00:2.7931389161549020e-01:2.6138389318455548e+00:6.5748053870414436e-01:2.9999735001552148e+00:7.7719153045295253e-01:3.4277803727523635e+00:6.2113843362715238e-01:3.9896707115744632e+00 + CVs 20 + 6.7772605799546054e-02 3.9964386520309958e-01 -3.9118648760802349e-01 + 1.7316847602588537e-01 7.6909030073788665e-01 -7.5048365417444551e-01 + 3.3658970480171380e-01 1.0693155244899484e+00 -1.0801785696990076e+00 + 5.4797348838451831e-01 1.2681944510499639e+00 -1.3882054437313618e+00 + 7.7961388701638468e-01 1.3647427388637787e+00 -1.6929388340295541e+00 + 1.0020063575792240e+00 1.3696782830608276e+00 -2.0060009498170421e+00 + 1.1923928225373990e+00 1.2894447526565975e+00 -2.3158107896720708e+00 + 1.3450300201133736e+00 1.1368176358464390e+00 -2.6077589137489614e+00 + 1.4669065687285630e+00 9.2210548777557733e-01 -2.8717014679935779e+00 + 1.5616204246157941e+00 6.4817843578851320e-01 -3.0867219185707291e+00 + 1.6278888914678837e+00 3.1690090036909685e-01 -3.2242069650421183e+00 + 1.6620194188278006e+00 -6.6213304476383739e-02 -3.2647974624285450e+00 + 1.6815574818706900e+00 -4.8950635238001605e-01 -3.1926090314045039e+00 + 1.7806969972593567e+00 -9.5542786909110711e-01 -3.0001377491502614e+00 + 2.1076207572922669e+00 -1.4166912359892123e+00 -2.6823863010447035e+00 + 2.7562951999424006e+00 -1.6775377283772048e+00 -2.2798506032369303e+00 + 3.5944403753529004e+00 -1.5520953662216042e+00 -1.9410382719874844e+00 + 4.3388733212999071e+00 -1.2548857331316476e+00 -1.7450257785429861e+00 + 4.9055098827500760e+00 -1.2630713099918784e+00 -1.5666567569144372e+00 + id 11747 + loc 1.5684138238430023e-01 3.8548383116722107e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9735760591285938e-01:4.7224538284715090e-01:4.1588928027117456e-01:4.9735263233680027e-01:9.7048237345036514e-01:3.5744619347802647e-01:1.7434520495930430e+00:3.8725812809308346e-01:2.2962984452679756e+00:3.7918307558676606e-01:3.0788901328398239e+00:3.9016064676747397e-01:3.9338049096584422e+00 + CVs 20 + -1.9942899156844426e-01 6.2048626664099693e-01 -2.2012416984144340e-01 + -3.1384601999872186e-01 1.2147084559570762e+00 -4.9224867123414190e-01 + -3.0997562573518112e-01 1.7462968880738781e+00 -7.9941589454259510e-01 + -2.0214106030694573e-01 2.1787186578723716e+00 -1.1228851980439436e+00 + -3.3418016546104545e-02 2.5148337652451622e+00 -1.4591477147866281e+00 + 1.4950417430126395e-01 2.7681072351453997e+00 -1.8031566672422406e+00 + 3.1340079237049434e-01 2.9480410075456258e+00 -2.1358335424284087e+00 + 4.4714590289154410e-01 3.0695069071065317e+00 -2.4721033668380930e+00 + 5.3871414401949758e-01 3.1188782986286125e+00 -2.8428993750721445e+00 + 5.6510206876174363e-01 3.0887503661039570e+00 -3.2277352858632247e+00 + 5.2174165196204447e-01 2.9574350069799951e+00 -3.6078594338114316e+00 + 4.7487627633839968e-01 2.6509897707800079e+00 -3.9448771562085163e+00 + 5.3957378468498063e-01 2.1571628002355605e+00 -4.1691203297729729e+00 + 7.7192301108310613e-01 1.5612563187348141e+00 -4.2444919211242009e+00 + 1.0880721474786770e+00 1.0108581119716078e+00 -4.1800364019106526e+00 + 1.1598120101630385e+00 8.7081618701828223e-01 -3.8724854840146974e+00 + -5.9331537881593199e-01 -8.6971959818290334e-01 -2.1494638122192389e+00 + -7.8368299034175004e-01 -1.0722199356788169e+00 -2.4874988775105322e+00 + -8.2059166320416643e-01 -6.6269026220613936e-01 -2.5621701261154022e+00 + id 11748 + loc 2.1238605678081512e-01 1.4639571309089661e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3501071543700970e-01:3.6651531885377653e-01:4.4157448325383175e-01:4.0853345951314446e-01:1.0217464537033019e+00:4.3473878908868308e-01:1.6096747685937736e+00:3.0744233872707810e-01:2.2548253733299912e+00:3.9480349270303011e-01:2.9750511541551932e+00:4.0287535480198067e-01:3.3349081466031905e+00:4.3500636532985537e-01:3.9519202431418305e+00 + CVs 20 + 4.2849138238946025e-02 4.3274774551952866e-01 -2.4972887260130328e-01 + 5.3615108317897897e-03 8.7175130144894486e-01 -5.0384806538758853e-01 + -9.2649957139475880e-02 1.3170911572701929e+00 -7.6006351440336073e-01 + -2.6424065438289418e-01 1.7613297112130106e+00 -1.0096553224360749e+00 + -5.1963600585069725e-01 2.1793614333951208e+00 -1.2445443919342307e+00 + -8.4586850558136173e-01 2.5411631923383862e+00 -1.4767438350897484e+00 + -1.2178953509845223e+00 2.8268912991414643e+00 -1.7287275365809593e+00 + -1.6115555228713612e+00 3.0234417371097320e+00 -2.0154746557531396e+00 + -2.0037881230156911e+00 3.1059034145706637e+00 -2.3497122140662672e+00 + -2.3635977774327195e+00 3.0288320472082120e+00 -2.7357811083017971e+00 + -2.6589236701969723e+00 2.7447662628311447e+00 -3.1294142112712651e+00 + -2.8812761140788314e+00 2.2352761326344441e+00 -3.4179135940250633e+00 + -3.0113874511464669e+00 1.5807285349412672e+00 -3.4901240392817843e+00 + -3.0316202166466453e+00 9.4990842146285670e-01 -3.3852731022687692e+00 + -2.9561580640383567e+00 3.9018938558647753e-01 -3.1823955530804233e+00 + -2.7828097863265238e+00 -1.0118093540847872e-01 -2.7751931647113435e+00 + -2.5001574236406046e+00 -2.8217078553575559e-01 -1.9536775281897605e+00 + -2.2515967147619427e+00 -9.3729660069674647e-04 -1.2078988526474019e+00 + -2.0666388591567735e+00 -7.0009223520990926e-02 -9.1896807482451304e-01 + id 11749 + loc 5.7882308959960938e-02 4.2877513170242310e-01 410 + blend 0.0000000000000000e+00 + interp 4.3559660638816788e-01:3.0328596100910882e-01:6.8772504149375591e-01:4.3559225042210403e-01:1.2467518105740256e+00:3.5369379492965380e-01:1.9575635281076640e+00:3.8596124278970018e-01:2.3181887684992653e+00:2.6216028477569869e-01:3.1328133145448360e+00:2.9891460560235500e-01:3.9990830634482579e+00 + CVs 20 + -7.7604320818838973e-02 1.3168620263900693e-01 -2.7052801799391196e-01 + -1.5579161613349402e-01 2.5507296700786447e-01 -4.9724677949243240e-01 + -2.2163008415818963e-01 3.9087992131829785e-01 -7.1100802593242340e-01 + -2.6837433363997076e-01 5.4866390158938672e-01 -9.2785510985094488e-01 + -2.9182419272233662e-01 7.2447075475172962e-01 -1.1484046251534399e+00 + -2.8646153050029233e-01 9.1345783007772474e-01 -1.3710780458573675e+00 + -2.4670521439571969e-01 1.1108976919142504e+00 -1.5929755947096131e+00 + -1.6979469745924969e-01 1.3120990485632711e+00 -1.8110074900168469e+00 + -5.6789317055266353e-02 1.5120350512836969e+00 -2.0200867072264614e+00 + 8.8613838734586170e-02 1.7062877103644036e+00 -2.2140052303705913e+00 + 2.6651614992433714e-01 1.8927415301860930e+00 -2.4040459463098935e+00 + 4.8689359719489506e-01 2.0661876301645812e+00 -2.6436808134040461e+00 + 7.3450990161324703e-01 2.2008967398187713e+00 -3.0014593978165784e+00 + 9.3971905187509230e-01 2.2628363655442412e+00 -3.4697849701237358e+00 + 1.0611232247976996e+00 2.2494100364824456e+00 -3.9792995892440799e+00 + 1.0983078283804344e+00 2.1686137904780569e+00 -4.4972743060933000e+00 + 1.0461907797935486e+00 2.0279908941971492e+00 -5.0061595473267015e+00 + 9.1059077288466717e-01 1.8489451745613790e+00 -5.4741420244929131e+00 + 8.6484941158960360e-01 1.7548709420932007e+00 -5.7749165272933300e+00 + id 11750 + loc 3.6771318316459656e-01 6.1187750101089478e-01 1070 + blend 0.0000000000000000e+00 + interp 3.5572812039864721e-01:3.5572456311744322e-01:2.9223583898154715e-03:2.6026216291938808e-01:9.8344109338990815e-01:3.3785724087067731e-01:1.4623730626340734e+00:2.7398948164229525e-01:2.0030482866632329e+00:3.5522846947590991e-01:2.7970650649404538e+00:2.7501558491905514e-01:3.1464611345069269e+00 + CVs 20 + -3.2071824163765711e-01 2.4044017213848587e-01 2.8263021393210519e-01 + -5.7478398745603143e-01 4.0632032017963682e-01 5.0277202271032617e-01 + -7.7297374177171863e-01 5.4685278350542210e-01 7.4181362216740809e-01 + -9.2998746579207825e-01 6.9797588817039546e-01 1.0443527031419790e+00 + -1.1035395935016905e+00 8.8845663553550858e-01 1.3718840528791509e+00 + -1.3561220522026809e+00 1.1229910270757184e+00 1.6481767506278786e+00 + -1.7107478805271192e+00 1.3704485416575660e+00 1.8227668177056928e+00 + -2.1803226524146391e+00 1.5921704606395006e+00 1.8591452762416094e+00 + -2.7350608767830900e+00 1.7442798796642796e+00 1.6836397304540696e+00 + -3.2080918907392468e+00 1.7781480238021550e+00 1.2699524582822164e+00 + -3.4604983853827407e+00 1.7068161449235024e+00 7.5469163317779997e-01 + -3.5182777009193118e+00 1.5631785547309227e+00 2.3254048599933097e-01 + -3.4228915792877457e+00 1.3495899177731245e+00 -2.2418608494835945e-01 + -3.2588931978859810e+00 1.1163534783815723e+00 -5.1107923451037751e-01 + -3.1298091989122150e+00 9.5631083318874699e-01 -6.3200033381274501e-01 + -3.0692546488998049e+00 9.0331781690389346e-01 -6.4097230629870927e-01 + -3.0602256979770033e+00 9.3653864696159494e-01 -4.9652602114547162e-01 + -3.0187647509501301e+00 9.1984033712267632e-01 -1.6006668992935913e-01 + -3.1070214792875683e+00 1.0247139962877858e+00 -4.3529563302072738e-01 + id 11751 + loc 1.1523611098527908e-01 9.3468528985977173e-01 1085 + blend 0.0000000000000000e+00 + interp 6.0680638349253035e-01:2.5971474888608759e-01:2.1093743318243630e-01:4.0258252092602292e-01:5.5431166440222068e-01:6.0680031542869550e-01:2.0010906470128971e+00:2.8345844852745439e-01:2.5931642744713912e+00:2.8006594478410035e-01:3.6457048084261481e+00 + CVs 20 + -3.7390072660355156e-03 6.3765464085873025e-01 4.1639964549513292e-01 + -6.4941330982483170e-02 1.1703808357999965e+00 6.8179065534506811e-01 + -1.5734678613528991e-01 1.6463136300463890e+00 8.9629200978462964e-01 + -2.8685518038780089e-01 2.0857743204427091e+00 1.0846278196054668e+00 + -4.6260986005092175e-01 2.4840249499506042e+00 1.2328684703121233e+00 + -6.9502491932469779e-01 2.8373085863947280e+00 1.3236062852707822e+00 + -9.9519220207943693e-01 3.1357483594117554e+00 1.3304935873306902e+00 + -1.3632728830178888e+00 3.3523903858085253e+00 1.2201314331893369e+00 + -1.7720118417425283e+00 3.4426534921534726e+00 9.7833833820687288e-01 + -2.1711636527266993e+00 3.3819956911133140e+00 6.5696270624804565e-01 + -2.5372099276544779e+00 3.1938796783627135e+00 3.3816678632549335e-01 + -2.8779803714377410e+00 2.9087557006412958e+00 6.8622984527450748e-02 + -3.2034555346624951e+00 2.5475692447030447e+00 -1.2676086978722795e-01 + -3.5209851634205833e+00 2.1266105150938452e+00 -2.2457161937351600e-01 + -3.8253405897795179e+00 1.6869891768390397e+00 -1.9924681958276225e-01 + -4.0925468217431709e+00 1.3354247620415967e+00 -5.4913738892536784e-02 + -4.2942760487823612e+00 1.1698370214551266e+00 1.4246254572465780e-01 + -4.4208775228603487e+00 1.1661541592014091e+00 3.2742000655751596e-01 + -4.6607778255841126e+00 1.0638864475427394e+00 6.8306571654830950e-01 + id 11752 + loc 5.9478715062141418e-02 5.1047354936599731e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4758300129382361e-01:3.0303020822582510e-01:3.4103457585517138e-02:2.4011010495958901e-01:9.6102975312045791e-01:3.0289589851340576e-01:2.0011346000391748e+00:3.8272723237653539e-01:2.5340156349102072e+00:4.4757852546381072e-01:3.0180689822459885e+00:4.1244877339013353e-01:3.7985076704292475e+00 + CVs 20 + 1.4807455082346591e-01 2.3546999508959113e-01 -1.4158821052954743e-01 + 2.2860403050277450e-01 5.0096333171135332e-01 -3.1374551375783433e-01 + 2.7235087836268845e-01 7.6737928179742276e-01 -4.9830321572757813e-01 + 2.9361508221227789e-01 1.0206760156511629e+00 -6.9043417098287652e-01 + 2.9343073115172663e-01 1.2614279556891463e+00 -8.9833513354539540e-01 + 2.7591613132166487e-01 1.4972436657359616e+00 -1.1315842289424953e+00 + 2.5687252578390896e-01 1.7445793953262143e+00 -1.4079904060814283e+00 + 2.8480355741717933e-01 2.0103200811630257e+00 -1.7583700257884849e+00 + 4.3346805543436362e-01 2.2370375347075515e+00 -2.1825099248978095e+00 + 7.0995299634383213e-01 2.3451769096966375e+00 -2.6179478108166427e+00 + 1.0528497894084312e+00 2.3442764114653754e+00 -3.0069163217576738e+00 + 1.4056831246234016e+00 2.3056659450366839e+00 -3.3287725940618547e+00 + 1.7555640995634345e+00 2.2309019373326131e+00 -3.6058354588174777e+00 + 2.0338873246446334e+00 1.9584296554017229e+00 -3.8827290037679192e+00 + 2.1559373678431215e+00 1.4183267964164630e+00 -4.1335201604431759e+00 + 2.1803646118300830e+00 7.1102565210058466e-01 -4.2687650813102653e+00 + 2.2248973073971365e+00 -1.2435425692286173e-02 -4.2473477249402425e+00 + 2.3862733373019562e+00 -5.3143622181698247e-01 -4.1244214549796077e+00 + 2.7033462423127479e+00 -5.6327496193625648e-01 -4.0137042613165539e+00 + id 11753 + loc 9.9799007177352905e-01 5.1227658987045288e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0092571390561047e-01:4.0182419356688287e-01:6.3725778130189537e-02:5.0092070464847138e-01:6.7850105058305465e-01:3.9639566464454301e-01:1.0106461352265734e+00:3.9142829165753201e-01:1.6956616599721817e+00:4.4370040531734256e-01:2.4874306754616198e+00:2.0174709891187931e-01:3.0544449639214570e+00 + CVs 20 + 1.3650679486718117e-01 2.8604880182036196e-01 -1.8647343844027070e-01 + 2.7741061028355912e-01 5.8510991190074824e-01 -3.6697218536501847e-01 + 4.4317094329294249e-01 8.9529194603179429e-01 -5.5522115277213480e-01 + 6.4004910131903892e-01 1.2112089275277278e+00 -7.6283198315121803e-01 + 8.6166026550285846e-01 1.5284361262372459e+00 -1.0018058999559647e+00 + 1.0962311902883628e+00 1.8412278778661884e+00 -1.2865074569240393e+00 + 1.3263785113025988e+00 2.1369911129323431e+00 -1.6369582660084880e+00 + 1.5297512961444246e+00 2.3937133876682593e+00 -2.0707536338605670e+00 + 1.6812884089000000e+00 2.5798426869676296e+00 -2.5917032445577406e+00 + 1.7618981050977482e+00 2.6600005230294950e+00 -3.1839762692369526e+00 + 1.7654792892736240e+00 2.6020529684012192e+00 -3.8119420929395678e+00 + 1.7031460209604208e+00 2.3896551788448486e+00 -4.4264754793805112e+00 + 1.6033599664365212e+00 2.0283489090776614e+00 -4.9829328823820793e+00 + 1.5009349237149194e+00 1.5359554893913656e+00 -5.4480930620756247e+00 + 1.4242385439582184e+00 9.3599240542466877e-01 -5.7924724899720070e+00 + 1.3820978912992232e+00 2.6096849186964510e-01 -5.9805047821445694e+00 + 1.3595243686729406e+00 -4.2993016326376110e-01 -5.9820624719795950e+00 + 1.3380697358426445e+00 -1.0529403941794415e+00 -5.8336303371896232e+00 + 1.2861880356590953e+00 -1.4974226382677545e+00 -5.8123693901951397e+00 + id 11754 + loc 7.3812282085418701e-01 8.2687026262283325e-01 1053 + blend 0.0000000000000000e+00 + interp 5.2282997555314226e-01:3.8784093435016254e-01:9.7885025618571486e-04:4.3419260896270423e-01:9.0886094612764312e-01:5.2282474725338679e-01:1.1466587949346778e+00:3.5759313707479157e-01:1.7882342164600582e+00:2.9271551821845326e-01:2.2178849245749506e+00:4.3325552419688451e-01:2.9434355074246232e+00:3.7934069723277508e-01:3.3483733046506159e+00 + CVs 20 + 9.0714582375556185e-05 3.8490680000764621e-01 2.7839440778692409e-01 + -8.1791432134028175e-02 7.2238464833486837e-01 5.3262255689893556e-01 + -2.0754733613498455e-01 1.0420978729764365e+00 7.7902501200683805e-01 + -3.6523053213587620e-01 1.3450165890270072e+00 1.0158712403064574e+00 + -5.5830979780668721e-01 1.6123831579664638e+00 1.2306661758705855e+00 + -7.7774659230060139e-01 1.8167374414209332e+00 1.4092110912374449e+00 + -9.9527438864169948e-01 1.9243593884908750e+00 1.5301286802871887e+00 + -1.1582703724639172e+00 1.9223453647720281e+00 1.5661604900324926e+00 + -1.2256912791935590e+00 1.8578153167931202e+00 1.5206610292602987e+00 + -1.2230976041473469e+00 1.7887420698508456e+00 1.4329362189677519e+00 + -1.2006348834633627e+00 1.7159911533227317e+00 1.3222286660485145e+00 + -1.1709826451442975e+00 1.6144858217581222e+00 1.1783619856839840e+00 + -1.1161030196842614e+00 1.4907836712112044e+00 9.9497299174825415e-01 + -1.0377205938550531e+00 1.3685181896793361e+00 7.7310957890010190e-01 + -9.6141587787808480e-01 1.2928499966143443e+00 5.3156512063367711e-01 + -9.1705350051983769e-01 1.3223075630519536e+00 3.4962324595410899e-01 + -9.0508994043048907e-01 1.4256798270985058e+00 3.2466231804512352e-01 + -8.9151154820102163e-01 1.4874688839035251e+00 3.5373594600991903e-01 + -8.5794069475472301e-01 1.5947583522582320e+00 5.8879580851903868e-02 + id 11755 + loc 8.0149954557418823e-01 6.5008252859115601e-02 1077 + blend 0.0000000000000000e+00 + interp 5.4813044462263438e-01:2.8130450818495695e-01:7.1129774132205004e-02:4.3839270802113750e-01:9.4149565664178381e-01:5.4812496331818816e-01:1.3292649244823389e+00:5.2812532727243644e-01:1.9044838194543596e+00:2.4771655571686368e-01:2.1801222000320939e+00:2.8252309210478066e-01:3.0638687343800228e+00:3.8918359058686935e-01:3.7298665041894843e+00 + CVs 20 + 3.1633324892657425e-02 3.4527262629840977e-01 2.9418463707438175e-01 + 5.2543084315894606e-02 7.0253868465849822e-01 5.6275414122669765e-01 + 4.7017954983792964e-02 1.0512220395609533e+00 8.5587692945803406e-01 + -9.0871957215703514e-03 1.3662350512773598e+00 1.2015203005681077e+00 + -1.3679547669505321e-01 1.6197463441962796e+00 1.6038763864060366e+00 + -3.4523571925453467e-01 1.7848248674540446e+00 2.0460553107576347e+00 + -6.3050246190203074e-01 1.8411631913732134e+00 2.4909242905652671e+00 + -9.7461799153577933e-01 1.7852897566977735e+00 2.8954876602982673e+00 + -1.3453060129383858e+00 1.6323682691834513e+00 3.2316187321687817e+00 + -1.7045262536248926e+00 1.4081435226540175e+00 3.5009768683204152e+00 + -2.0220889809674407e+00 1.1355348583499021e+00 3.7225149640692337e+00 + -2.2786341594805668e+00 8.3126456446277641e-01 3.9124413167627901e+00 + -2.4651671862726765e+00 5.1127937639737087e-01 4.0830580316383029e+00 + -2.5788371314365053e+00 1.8656704605512031e-01 4.2557042248846235e+00 + -2.6165102577513304e+00 -1.3569542738432316e-01 4.4536468921480097e+00 + -2.5875720188136491e+00 -4.3470105005746662e-01 4.6894375101405377e+00 + -2.5125621256926687e+00 -6.8701220450180189e-01 4.9593117103603790e+00 + -2.4235732196738344e+00 -8.7490025613222500e-01 5.2344742056263973e+00 + -2.3839100718339932e+00 -9.3152277521121074e-01 5.4428012348093970e+00 + id 11756 + loc 9.1934326337650418e-04 8.8845711946487427e-01 1048 + blend 0.0000000000000000e+00 + interp 5.5111533578376348e-01:2.1021367289659060e-01:5.4850545377405924e-01:3.2309390855857556e-01:1.2155783707877899e+00:3.8682281818754954e-01:1.9362759435352808e+00:5.5110982463040570e-01:2.0177984830554734e+00:4.4177277555616207e-01:3.0317210280598492e+00:5.0279041441228922e-01:3.5682120031302951e+00:4.4877888734354171e-01:3.9975002755467717e+00 + CVs 20 + 1.4039491535632945e-01 4.7369669233635825e-01 -3.2247382333717434e-01 + 2.9474346364541149e-01 9.6478267869873258e-01 -6.0372842284501582e-01 + 4.5098892520957329e-01 1.4679341167468132e+00 -8.1632278627614396e-01 + 6.2155430639260156e-01 1.9675999404066742e+00 -9.6977555805593174e-01 + 8.2874435697665194e-01 2.4399374376045779e+00 -1.0925271190531678e+00 + 1.0859562509641807e+00 2.8645872448043943e+00 -1.2136541562480545e+00 + 1.3939493984039257e+00 3.2277762921215056e+00 -1.3499901817014490e+00 + 1.7397380590649683e+00 3.5188893975488176e+00 -1.5076035920102355e+00 + 2.1019532224977926e+00 3.7357331220675554e+00 -1.6872343156112879e+00 + 2.4599664116072071e+00 3.8882127866434155e+00 -1.8909310893141267e+00 + 2.8051436780153658e+00 3.9915041971049603e+00 -2.1273184253678759e+00 + 3.1425907531857509e+00 4.0518489076430493e+00 -2.4171467323709139e+00 + 3.4728429797996316e+00 4.0580711321370968e+00 -2.7735537742962668e+00 + 3.7785017598156441e+00 3.9947267409894365e+00 -3.1811536115109296e+00 + 4.0344024022048313e+00 3.8615941727120218e+00 -3.6234402081746464e+00 + 4.2286416477775361e+00 3.6601664264648335e+00 -4.1238978774253532e+00 + 4.3489267642474561e+00 3.3438687934347282e+00 -4.7401827267945542e+00 + 4.3164742627045802e+00 2.8255964891212844e+00 -5.4087979880046140e+00 + 4.1857273106104724e+00 2.4567269968981913e+00 -5.6606637887642695e+00 + id 11757 + loc 3.9306053519248962e-01 2.6407280564308167e-01 1054 + blend 0.0000000000000000e+00 + interp 6.1880278751036388e-01:4.6393114809147118e-01:5.3415961490326902e-02:4.8001385960274068e-01:6.1716415047317974e-01:4.5221146699780618e-01:1.0289734591261868e+00:6.1879659948248877e-01:1.8595558774983210e+00:2.9594475931952224e-01:2.3647827189775996e+00:4.3533736461991024e-01:3.0148403219850475e+00:3.9318697082579562e-01:3.8385639294627523e+00 + CVs 20 + -9.2901714881480413e-02 3.9410236580438107e-01 -1.9976551493042560e-01 + -1.6055830580941399e-01 7.8073542156953879e-01 -3.9357559064310538e-01 + -1.9310976896665033e-01 1.1624753197689450e+00 -5.5845119642611651e-01 + -1.9765123803367735e-01 1.5243498003373370e+00 -7.0530185750390273e-01 + -1.9368610786165852e-01 1.8445624943057324e+00 -8.6758860106725100e-01 + -1.9966564626347394e-01 2.1086322499142467e+00 -1.0716857467277268e+00 + -2.2924963104722873e-01 2.3040970393191094e+00 -1.3289008817057149e+00 + -2.9628099415262699e-01 2.3994516190247515e+00 -1.6477758987300222e+00 + -3.9585846731455732e-01 2.3450807171775137e+00 -2.0109004776367452e+00 + -4.8993788312048547e-01 2.1134318298507244e+00 -2.3687598602727857e+00 + -5.1936797508946320e-01 1.7435193801579016e+00 -2.6879217267774509e+00 + -4.3739665177575993e-01 1.3609316048595197e+00 -2.9617091581464585e+00 + -2.9384596480809833e-01 1.1059765868340978e+00 -3.1635069709333816e+00 + -1.7778797977253824e-01 1.0029458850193973e+00 -3.3007722007038676e+00 + -1.6585387090888060e-01 1.0478399929553894e+00 -3.5247063372437717e+00 + -3.3053311936424157e-01 1.2356096725594261e+00 -3.8875498991646826e+00 + -6.7022153438177923e-01 1.4231437623484047e+00 -4.4663298443959691e+00 + -9.5857106458305386e-01 1.3272081117248642e+00 -5.3151223005190564e+00 + -1.1319573068545357e+00 1.2646011229164293e+00 -5.9767900603219193e+00 + id 11758 + loc 2.7981212735176086e-01 1.9032630324363708e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8043044818775296e-01:3.8042664388327108e-01:4.2873761581190717e-02:3.1285261084827160e-01:1.0001590776532832e+00:3.1090539890187568e-01:2.0106365254067802e+00:3.3530164235927346e-01:2.6815460144308103e+00:2.4062584706939197e-01:3.1028495475616520e+00 + CVs 20 + 3.2435356246320157e-01 3.2973520385322308e-01 1.9429718459652806e-01 + 6.0466807730357064e-01 6.0669695520931977e-01 3.5915739198860175e-01 + 8.9559171642539048e-01 8.6067497220135425e-01 4.7930428743262748e-01 + 1.2108975835184712e+00 1.1237271840884486e+00 5.7800876112843980e-01 + 1.5030344559755957e+00 1.4107299424179494e+00 7.0891453907600566e-01 + 1.7054956566247585e+00 1.7168646781979582e+00 9.2432796857738841e-01 + 1.7408533299005930e+00 2.0037023948606150e+00 1.2407783276648394e+00 + 1.5263729318235431e+00 2.2014232691199029e+00 1.5924116605834882e+00 + 1.0872278454755193e+00 2.2508845335752303e+00 1.7947699593134072e+00 + 6.2317504911095534e-01 2.1957872990385972e+00 1.7636435827541777e+00 + 2.2314810054101875e-01 2.0996473339133264e+00 1.5897930127418221e+00 + -1.2465809318292642e-01 1.9584176158675106e+00 1.3098115406733599e+00 + -3.9536542171556188e-01 1.7528058825403723e+00 9.3000323831687559e-01 + -5.5907682418231375e-01 1.5073454072131867e+00 5.2166846603210171e-01 + -6.6322888113660761e-01 1.2865448348159505e+00 1.8973738175498828e-01 + -7.6989489859878069e-01 1.1448010525072250e+00 -1.4738977306857083e-02 + -8.7013693708362827e-01 1.1377408284736559e+00 -6.9644024044191483e-02 + -8.1388008678228352e-01 1.3286107521226480e+00 8.1030753742806994e-02 + -9.7116005682659046e-01 1.2940852608899014e+00 -2.3787535744212281e-02 + id 11759 + loc 7.0518290996551514e-01 7.5261503458023071e-01 1070 + blend 0.0000000000000000e+00 + interp 4.6890479663028573e-01:3.2652262316936859e-01:6.3282780032594887e-01:2.8273265749167609e-01:1.6656419629975940e+00:4.6890010758231943e-01:2.1821452254947347e+00:2.5894685977040788e-01:2.9807473695499080e+00:2.7415892130968605e-01:3.9500730509787725e+00 + CVs 20 + -2.8485356576130749e-01 2.3843182478414066e-01 1.5054203988977452e-01 + -5.1580772794379459e-01 4.4804984831003358e-01 2.8623332608644059e-01 + -6.9460042588251047e-01 6.5494632238289674e-01 4.4831271951953339e-01 + -8.4140517596476461e-01 8.8317730596309663e-01 6.4708853151869672e-01 + -1.0079028992316941e+00 1.1470274854977673e+00 8.3286187398661360e-01 + -1.2379166236164929e+00 1.4310666648995691e+00 9.3967429223804755e-01 + -1.5398145485808268e+00 1.6960577085423709e+00 9.3747151246540494e-01 + -1.9031934126773880e+00 1.9005572604607412e+00 8.1162127764376613e-01 + -2.2724262589017310e+00 2.0062424937320937e+00 5.4040656846265223e-01 + -2.5315766459136926e+00 1.9960774627135736e+00 1.5042230657530298e-01 + -2.6215558372549292e+00 1.8972627454021713e+00 -2.7652673365935287e-01 + -2.5613345048045080e+00 1.7327846189649567e+00 -6.9420536575330627e-01 + -2.3724847469899282e+00 1.5086014366356451e+00 -1.0438345887375753e+00 + -2.1145401654901419e+00 1.2659198633365969e+00 -1.2479833076684319e+00 + -1.8648072129488951e+00 1.0543661562492677e+00 -1.3352253874696873e+00 + -1.6613113118185137e+00 8.8202518401040864e-01 -1.4038985264561545e+00 + -1.5343512304191804e+00 7.8263002928121161e-01 -1.4978516844326866e+00 + -1.4844370498444095e+00 7.9440911724504337e-01 -1.5895219475082407e+00 + -1.4532376153337505e+00 8.4382853634461863e-01 -1.9458165949730126e+00 + id 11760 + loc 4.9401050806045532e-01 9.2626291513442993e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3298621507433749e-01:3.3603573754815264e-01:7.3627404145313435e-02:4.2516444077659948e-01:1.0073600252759449e+00:2.5236626793194522e-01:1.8069200122051703e+00:2.6159423810734272e-01:2.0174151480361013e+00:4.3298188521218678e-01:2.7175863506522018e+00:3.9589392277724550e-01:3.0287026442758296e+00:4.1086907994338140e-01:3.6695449645991562e+00 + CVs 20 + 2.0589929619845479e-01 2.7752781364247775e-01 -5.2574844123279889e-02 + 4.2487874735425163e-01 5.6865856565976147e-01 -1.0396170212730804e-01 + 6.6173435838112549e-01 8.6823666376177888e-01 -1.6718180944362840e-01 + 9.2079518616382705e-01 1.1680239951453788e+00 -2.5561383553572131e-01 + 1.2042464204819892e+00 1.4554084504840874e+00 -3.8413405250602423e-01 + 1.5078796612443366e+00 1.7118688230647525e+00 -5.7145689552002499e-01 + 1.8191123958386910e+00 1.9161457511262130e+00 -8.2901219999704656e-01 + 2.1212953714120601e+00 2.0521017509289239e+00 -1.1513565318709347e+00 + 2.3996709767660587e+00 2.1146386719305235e+00 -1.5191683028200083e+00 + 2.6464014845327606e+00 2.1089309144225385e+00 -1.9071621975163202e+00 + 2.8604285559968923e+00 2.0451939756831026e+00 -2.2935198821497362e+00 + 3.0413008948503535e+00 1.9320446715992639e+00 -2.6664490150410156e+00 + 3.1841319633306835e+00 1.7754412686121102e+00 -3.0225446956602591e+00 + 3.2782466425350192e+00 1.5859375313416284e+00 -3.3611392420050472e+00 + 3.3121081133804511e+00 1.3827398418911621e+00 -3.6792957438770562e+00 + 3.2848498167378497e+00 1.1889010764768324e+00 -3.9673825925461879e+00 + 3.2098538796412392e+00 1.0193551521773192e+00 -4.2172313771258638e+00 + 3.1043283358405032e+00 8.7801462708765843e-01 -4.4253162026076946e+00 + 2.9542772126565415e+00 8.6228647138701919e-01 -4.5160550335433571e+00 + id 11761 + loc 2.6670938730239868e-01 1.9032630324363708e-01 1085 + blend 0.0000000000000000e+00 + interp 3.9624633868387527e-01:3.6369556945468873e-01:5.3507808051824202e-02:2.9508266198612459e-01:9.9968876946247232e-01:2.9698515154589494e-01:2.0199340009352982e+00:3.2596037162134922e-01:2.6669525415404030e+00:3.9624237622048847e-01:3.5215343866803890e+00 + CVs 20 + 3.3912053813219334e-01 3.7282613948683052e-01 2.8310298924639282e-01 + 5.6896273719346269e-01 6.9851398190300484e-01 5.3834442954193218e-01 + 7.4845563216657340e-01 1.0053743826772872e+00 7.9701458733101571e-01 + 8.9304791733725664e-01 1.3014487301459827e+00 1.0743544827306537e+00 + 9.8713026243419844e-01 1.5776615544059847e+00 1.3730270763051444e+00 + 1.0186756568771165e+00 1.8258413847666495e+00 1.6885593038081141e+00 + 9.8160297881112790e-01 2.0393483440568256e+00 2.0087891329564105e+00 + 8.7748608817612206e-01 2.2148379913938152e+00 2.3176013223517815e+00 + 7.1208362626382637e-01 2.3535222826051774e+00 2.6030769457707374e+00 + 4.8592651321894431e-01 2.4566866921336379e+00 2.8641278192138899e+00 + 1.9375344490492719e-01 2.5189262438153328e+00 3.1070519013842333e+00 + -1.6595585401148727e-01 2.5265033197067401e+00 3.3408087166636218e+00 + -5.8607105475669108e-01 2.4588655984282402e+00 3.5734166305010886e+00 + -1.0596537286954590e+00 2.2854342568461701e+00 3.8108095177699619e+00 + -1.5754475599748006e+00 1.9562879262223827e+00 4.0609369501103494e+00 + -2.0590105479684979e+00 1.4522702560958307e+00 4.3061064394938908e+00 + -2.4254952430096326e+00 8.2125442629799972e-01 4.5033565631276664e+00 + -2.6415034366995869e+00 1.2943010019862156e-01 4.6709383350065803e+00 + -2.6837942077044126e+00 -1.3207401348182946e-01 4.8158416641532371e+00 + id 11762 + loc 3.1406819820404053e-01 3.4402158856391907e-01 1053 + blend 0.0000000000000000e+00 + interp 3.6199817814967339e-01:3.4362100108284349e-01:2.1248264857029819e-01:2.7539382815849639e-01:9.9457182110906861e-01:3.4761037344682977e-01:1.5935299439138322e+00:3.3608668195318259e-01:2.2097188185968943e+00:3.6199455816789189e-01:2.8681231990320812e+00:3.3926856782380033e-01:3.1755238484453545e+00 + CVs 20 + 3.2738292010231979e-01 4.2017018029545750e-01 1.5416589438596445e-01 + 5.9960282270425602e-01 7.8905571631000970e-01 3.3553011976191899e-01 + 8.7120568501887008e-01 1.1314469203616651e+00 5.4008724271262043e-01 + 1.1590842263759549e+00 1.4425203556832267e+00 7.7306931373036614e-01 + 1.4519542767993787e+00 1.6977445002834568e+00 1.0450705100939448e+00 + 1.7314857964851598e+00 1.8707374777053154e+00 1.3560476635658918e+00 + 1.9753036385262166e+00 1.9408542228918930e+00 1.6914048509784405e+00 + 2.1609371207430268e+00 1.9031379117151468e+00 2.0222026197871887e+00 + 2.2719032713457685e+00 1.7738117216017093e+00 2.3054189826119802e+00 + 2.3100745441939834e+00 1.5976731279363665e+00 2.4861702112767565e+00 + 2.3039342693024545e+00 1.4414856256771462e+00 2.5389621580385326e+00 + 2.2823194368653397e+00 1.3341345586685385e+00 2.5063572600312369e+00 + 2.2464672737215743e+00 1.2397195261004175e+00 2.4285159597089150e+00 + 2.1792213082984593e+00 1.1000065741877068e+00 2.2918822452720118e+00 + 2.0650489898291826e+00 9.1556215740039093e-01 2.0866437364603030e+00 + 1.9195415773462368e+00 7.4251968926397516e-01 1.8609163588125890e+00 + 1.7815150342390054e+00 6.0711651182779502e-01 1.6580994462140330e+00 + 1.6138281266314101e+00 5.3777213313539318e-01 1.4755982745079419e+00 + 1.3929026833396214e+00 6.6456593173113887e-01 1.3357830323533633e+00 + id 11763 + loc 9.9799007177352905e-01 4.7903653979301453e-01 410 + blend 0.0000000000000000e+00 + interp 4.0160440488621035e-01:4.0160038884216148e-01:3.7961606109404711e-01:2.6623969729966634e-01:1.1552305587196721e+00:3.2448449367045834e-01:2.0279392765637150e+00:3.2883385783229019e-01:3.0393987255975232e+00:3.4973680743158603e-01:3.6860565831240946e+00 + CVs 20 + -4.3155612724258330e-01 1.7139532731263030e-01 2.1855067440508760e-01 + -8.1751811376285011e-01 3.1745059536247439e-01 4.1315620191969915e-01 + -1.2178265965760060e+00 4.7361807571160214e-01 5.8843868229793084e-01 + -1.6467528306213537e+00 6.3782364040706940e-01 7.5379888117544014e-01 + -2.0919054239137016e+00 7.8372194193026790e-01 9.3286867036648269e-01 + -2.5432797820040602e+00 8.8733887886383123e-01 1.1493042561087854e+00 + -2.9892426804934837e+00 9.2900430168012260e-01 1.4113082939653594e+00 + -3.4189698898877925e+00 8.9548689600601694e-01 1.7007765313034797e+00 + -3.8279028064744240e+00 7.8466831349659860e-01 1.9817257378210409e+00 + -4.2097375646549740e+00 6.0468113586171990e-01 2.2205590377174542e+00 + -4.5567461923738897e+00 3.5768391343165984e-01 2.4046678045859609e+00 + -4.8695665423593688e+00 1.4550741227886466e-02 2.5466784462464678e+00 + -5.1406379354426637e+00 -4.4643335887650837e-01 2.6747393171334717e+00 + -5.3511849984388737e+00 -9.9879276514464754e-01 2.8368808161978629e+00 + -5.4855701715828449e+00 -1.5869211761874444e+00 3.0790534475980977e+00 + -5.5354580282381693e+00 -2.1453802533547179e+00 3.4166767641915650e+00 + -5.5162484310250077e+00 -2.6493653229027068e+00 3.8388910904788802e+00 + -5.4904989007583476e+00 -3.1351806108873741e+00 4.3329233859560334e+00 + -5.5381802822569171e+00 -3.6397906046727853e+00 4.8758813577339044e+00 + id 11764 + loc 6.7147839069366455e-01 7.5013923645019531e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6388986579576788e-01:2.5799357830899960e-01:2.9983572946644932e-01:3.2459478625618354e-01:1.2351003475148874e+00:3.6388622689710992e-01:1.9933599579547812e+00:3.2609173321021723e-01:2.6412282226655446e+00:3.4341827949585729e-01:3.3790474485732580e+00 + CVs 20 + 9.9592476645641276e-02 2.8009039855642742e-01 -1.7795124627626074e-01 + 1.8666140995183000e-01 5.5915473833801232e-01 -3.5589042736959431e-01 + 2.8852776760122822e-01 8.3472191836328069e-01 -5.3125433188409643e-01 + 4.2227979691030870e-01 1.1027132458515991e+00 -7.0300574054313547e-01 + 5.9439764589318822e-01 1.3570170208600598e+00 -8.7214122398305671e-01 + 8.0615799074353911e-01 1.5883005486319117e+00 -1.0416239732026784e+00 + 1.0541602287257295e+00 1.7854854234485900e+00 -1.2174336703162236e+00 + 1.3303509519539147e+00 1.9369311886302212e+00 -1.4063683234257853e+00 + 1.6205155622522025e+00 2.0324606169167385e+00 -1.6187962154038875e+00 + 1.9052115421000564e+00 2.0649642794277701e+00 -1.8659343247135973e+00 + 2.1626575482230121e+00 2.0283242893902100e+00 -2.1492355607061602e+00 + 2.3713506517773797e+00 1.9162756494266497e+00 -2.4574627436062233e+00 + 2.5164565245309878e+00 1.7277067260184125e+00 -2.7687582576125709e+00 + 2.5930467720435519e+00 1.4709340918189109e+00 -3.0523681965978935e+00 + 2.6055850856643410e+00 1.1638206402039226e+00 -3.2729432564299494e+00 + 2.5654930466940593e+00 8.3208292288916252e-01 -3.4013783146648207e+00 + 2.4832080343945204e+00 5.0275810930427667e-01 -3.4272497932449539e+00 + 2.3658044202032671e+00 1.9071496049634476e-01 -3.3623038344256737e+00 + 2.1931716322356127e+00 -1.4453538454625256e-01 -3.2400094367027932e+00 + id 11765 + loc 5.4369497299194336e-01 3.7546929717063904e-01 1077 + blend 0.0000000000000000e+00 + interp 2.9124679706063705e-01:2.8797530080046957e-01:8.5471450347362687e-01:2.7811272360553224e-01:1.6953337279338461e+00:2.9124388459266648e-01:2.3451057725145770e+00:2.6690595046343280e-01:3.4454999920948604e+00 + CVs 20 + -4.4684432882920871e-02 4.0174826490189830e-01 1.9386499741505489e-01 + -6.8113395672744714e-02 8.1589978850965283e-01 3.8277781084228291e-01 + -1.0670760676806929e-01 1.2232271998547612e+00 6.1144914086392832e-01 + -1.8182115832438350e-01 1.6004121428348208e+00 9.0236165316409622e-01 + -3.1045096111982895e-01 1.9250373199593962e+00 1.2624204078932064e+00 + -5.0775191868356073e-01 2.1707463690122486e+00 1.6796654270316349e+00 + -7.7981889607795152e-01 2.3138944628245683e+00 2.1243143578850074e+00 + -1.1193902756569205e+00 2.3423738711692481e+00 2.5580865146254212e+00 + -1.5064461875636705e+00 2.2591142444326553e+00 2.9464681106143651e+00 + -1.9123813439122614e+00 2.0799482789210959e+00 3.2706215819857727e+00 + -2.3114191063580884e+00 1.8230603800430394e+00 3.5336938349447009e+00 + -2.6846613759348918e+00 1.4972132027643399e+00 3.7534203822677301e+00 + -3.0115863245581185e+00 1.1019181264121207e+00 3.9513934646364111e+00 + -3.2607623162613191e+00 6.3796448560138885e-01 4.1520331622606150e+00 + -3.3776651103477273e+00 1.1660865021828881e-01 4.3916506152923347e+00 + -3.2991177376861724e+00 -3.9637756452911188e-01 4.7050118935114043e+00 + -3.0486188348529071e+00 -7.6915135344018104e-01 5.1037002382578418e+00 + -2.7383248581140034e+00 -9.4978443694456560e-01 5.5612358786589944e+00 + -2.5599151170576135e+00 -1.2187755614990419e+00 5.9033070355598705e+00 + id 11766 + loc 6.5967768430709839e-01 7.3081672191619873e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3833662356432529e-01:3.6484684864903982e-01:3.7967346361050702e-02:4.3833224019808964e-01:5.3370704766072863e-01:4.1772294296314205e-01:9.8026766893023343e-01:3.5310403348133990e-01:1.8962491765223093e+00:3.8318982589425954e-01:2.7867508142850155e+00:2.8683012892513415e-01:3.1921116566049190e+00 + CVs 20 + 1.1390675844703166e-01 2.3498633170684047e-01 -2.5187614146512288e-01 + 2.1464917319294335e-01 4.6022938592751073e-01 -4.8168602231114144e-01 + 3.0688122879299506e-01 6.7786348487115777e-01 -7.0463060088938190e-01 + 3.9378508713401889e-01 8.8864979711994596e-01 -9.2787669348460278e-01 + 4.7759071528272107e-01 1.0924677570128372e+00 -1.1520688124169203e+00 + 5.5755182137408310e-01 1.2913262893821451e+00 -1.3772469632274693e+00 + 6.2850762637763347e-01 1.4943432542213639e+00 -1.6078337671538945e+00 + 6.8613274756532650e-01 1.7120997051011113e+00 -1.8531468644768783e+00 + 7.3540704499567655e-01 1.9463982377199960e+00 -2.1242386380217622e+00 + 7.8841852933522227e-01 2.1881470519012458e+00 -2.4347439756007967e+00 + 8.5704588524840397e-01 2.4137426292439086e+00 -2.7987584426335705e+00 + 9.5102804646430417e-01 2.5871501494302471e+00 -3.2220633399259908e+00 + 1.0712165617722245e+00 2.6725630597642014e+00 -3.6948328562557946e+00 + 1.2099344680401547e+00 2.6454214702496901e+00 -4.1896571523354424e+00 + 1.3677440298782066e+00 2.5026391058314124e+00 -4.6762148626940956e+00 + 1.5535459056407790e+00 2.2513111161869492e+00 -5.1373647279561867e+00 + 1.7438928158402227e+00 1.8921598007522524e+00 -5.5673599514624241e+00 + 1.8552972833611023e+00 1.4501992417003771e+00 -5.9461860198454035e+00 + 1.8130084132311062e+00 1.0919317232133996e+00 -6.1755082736353630e+00 + id 11767 + loc 7.5775331258773804e-01 3.4948080778121948e-02 1090 + blend 0.0000000000000000e+00 + interp 4.5359968047763621e-01:4.5359514448083144e-01:3.9091906362793494e-01:4.4177510191501962e-01:9.9373280546425624e-01:2.9068820396563072e-01:1.4855592886829290e+00:3.4586859635541362e-01:1.9986877989035059e+00:2.2747602725899238e-01:2.8517318135906526e+00:2.9799799167121521e-01:3.9999504872980993e+00 + CVs 20 + -4.5066879493914552e-02 4.0540455679273479e-01 -9.2668023728035287e-02 + -5.0283763340053994e-02 7.8061034986011424e-01 -1.2753076219616638e-01 + -2.8010749876711039e-02 1.1463582983272995e+00 -1.2981578231540236e-01 + 1.8534622953051638e-02 1.5072954717268252e+00 -1.0825540145596602e-01 + 9.6993456250670795e-02 1.8498235159639136e+00 -5.3725415885306771e-02 + 2.0940741363100135e-01 2.1564554159681588e+00 4.2524481873690956e-02 + 3.5085957000989121e-01 2.4052873139713675e+00 1.8702396695900203e-01 + 5.0773265603716777e-01 2.5767905697557589e+00 3.8035205265730498e-01 + 6.6942295772910265e-01 2.6610274181479157e+00 6.2070009885670174e-01 + 8.4036070311190358e-01 2.6477464435093125e+00 9.0953383394954967e-01 + 1.0282934236949397e+00 2.5197844288007145e+00 1.2344506696416346e+00 + 1.2349907129406144e+00 2.2633154451640425e+00 1.5597957481836604e+00 + 1.4615797368978705e+00 1.8682901602520001e+00 1.8375107243170918e+00 + 1.7145430268605102e+00 1.3265676800914155e+00 2.0036706413939487e+00 + 1.9936491802800891e+00 6.6701168353013640e-01 1.9652819111539912e+00 + 2.2866341653607503e+00 1.5134261532174342e-02 1.6627566702906722e+00 + 2.6195380092354315e+00 -4.8730889174395275e-01 1.1285612987827374e+00 + 2.9980664388267293e+00 -7.3976823063052155e-01 4.7152813598112775e-01 + 3.1533027469942922e+00 -8.9437050692557707e-01 8.7280535915515212e-02 + id 11768 + loc 8.7063121795654297e-01 5.8873331546783447e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3764509248379202e-01:2.3327635846850014e-01:1.6502493986991029e-01:3.1679115635209437e-01:8.5563167353494030e-01:2.9945569599955585e-01:1.2204488531336630e+00:4.3764071603286719e-01:1.8954176078247560e+00:3.2067599794417462e-01:2.2854438465975835e+00:3.0718823809652568e-01:3.0005649642484182e+00:2.3238603194840710e-01:3.6882468649639852e+00 + CVs 20 + 1.3665483247975355e-01 5.9722801017594185e-01 -4.1676014200599898e-01 + 3.1110921165211736e-01 1.1534195016107429e+00 -7.8914331471859378e-01 + 5.5637647677236290e-01 1.6504493262164424e+00 -1.0816664592817096e+00 + 8.7284929024473579e-01 2.0637205843698414e+00 -1.2675460585094522e+00 + 1.2344242263895429e+00 2.3701461478950345e+00 -1.3362698650093414e+00 + 1.5982773956386667e+00 2.5667086085624682e+00 -1.3062343673834331e+00 + 1.9401325225208028e+00 2.6693432659343288e+00 -1.2035057342048825e+00 + 2.2885271301441636e+00 2.6802035730416303e+00 -1.0489610841194876e+00 + 2.6870307229369974e+00 2.5579548967528400e+00 -8.7105999063392769e-01 + 3.1239998240944433e+00 2.2721855868397589e+00 -6.8990749730705780e-01 + 3.5378480469203186e+00 1.8398445728224118e+00 -4.9094790374776409e-01 + 3.8570377663475379e+00 1.3199222251795888e+00 -2.4793446548377090e-01 + 4.0441242702469555e+00 8.1827962313885205e-01 4.0503906464409017e-02 + 4.1057881806540193e+00 4.1669744302563194e-01 3.6784309487245626e-01 + 4.0603047758827557e+00 1.4002639252285232e-01 7.6040930838972876e-01 + 3.9270376599543124e+00 1.4399943737650078e-02 1.2394350701400298e+00 + 3.7160076256453651e+00 4.3427013863094555e-02 1.7726174692284107e+00 + 3.3969215795408978e+00 3.4338098952012031e-01 2.2665494384308489e+00 + 3.2519577132392516e+00 8.7765834043427249e-01 2.3064053860191072e+00 + id 11769 + loc 5.1281982660293579e-01 7.8885829448699951e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9698154362903387e-01:2.8404300295281365e-01:1.5894203095454307e-02:3.6835554973174839e-01:5.3777123621909229e-01:2.9414845297477266e-01:1.0296002935945527e+00:3.2784328924268463e-01:1.7650294751101820e+00:3.9697757381359761e-01:2.0547323197332261e+00:2.0443607663691341e-01:2.9876092425849263e+00:2.8697127547716100e-01:3.5599306309746135e+00 + CVs 20 + 4.1738233877777808e-01 4.1811802774570395e-01 -1.3085458627984292e-01 + 7.7337886333057160e-01 8.4584024974022765e-01 -1.9940427342797068e-01 + 1.0674964922683172e+00 1.2905729184957802e+00 -2.0047464621172362e-01 + 1.3457919434939509e+00 1.7091116272959410e+00 -1.4781291712394895e-01 + 1.6671108241036561e+00 2.0386246276154201e+00 -6.9507123221973055e-02 + 2.0526768628393519e+00 2.2370059379816420e+00 3.3023577481749999e-03 + 2.4853836352482226e+00 2.2829412342298356e+00 5.1150478477585803e-02 + 2.9417274332815442e+00 2.1632855875615382e+00 7.7425884399472178e-02 + 3.3877785611212321e+00 1.8726206441340534e+00 1.0949101421581231e-01 + 3.7807498204187509e+00 1.4461028095984811e+00 1.9655751363205010e-01 + 4.0990696796946304e+00 9.8472722620593456e-01 3.8630092170003838e-01 + 4.3471496972451638e+00 6.4632445061665245e-01 6.4165268042152646e-01 + 4.5223795267135642e+00 5.1694001498118980e-01 8.2268756357818662e-01 + 4.6218434350781319e+00 4.9843034423288812e-01 9.0841731557413619e-01 + 4.8032658022359085e+00 4.6340947295059731e-01 1.0122006753351738e+00 + 5.1603212090137340e+00 3.9604076879927308e-01 1.1320200315158204e+00 + 5.6029848797906512e+00 2.6575915707368281e-01 1.2668672520309712e+00 + 5.9286609085909845e+00 7.7547580839828711e-02 1.4500343973398149e+00 + 6.1530683617385682e+00 -1.7975784199738620e-01 1.7082741380058122e+00 + id 11770 + loc 7.4111986160278320e-01 3.6742806434631348e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9478965611118059e-01:3.7399300678665193e-01:4.6767357056443082e-05:4.9478470821461951e-01:4.5476552738562259e-01:3.5014303221551862e-01:1.0003605912814870e+00:4.2042022738577639e-01:1.4150998066366389e+00:2.9766328220517324e-01:2.1089437662763717e+00:3.6472188512797304e-01:2.9235236144632761e+00:4.1132185819911599e-01:3.3432083836357203e+00 + CVs 20 + -5.9961447934282763e-03 3.8477238804474101e-01 2.2874904881954156e-01 + -5.4676972507313792e-02 7.5696292514761465e-01 4.5198514039375054e-01 + -1.4077087149800901e-01 1.1130138217432288e+00 6.6775853570592214e-01 + -2.6553605342653980e-01 1.4468909457600783e+00 8.7605367130279133e-01 + -4.2765732494844394e-01 1.7507489499304629e+00 1.0800262883343521e+00 + -6.2129526912785493e-01 2.0187073996543328e+00 1.2894762011964014e+00 + -8.3730633071790905e-01 2.2468275904906330e+00 1.5201312285178379e+00 + -1.0629708558086675e+00 2.4307017146971694e+00 1.7900606673536159e+00 + -1.2829466926893476e+00 2.5633536208443153e+00 2.1110277334318219e+00 + -1.4823626459252579e+00 2.6362255254514797e+00 2.4849754570812905e+00 + -1.6477007492967644e+00 2.6402287660436343e+00 2.9055405059964143e+00 + -1.7675334362203265e+00 2.5663016697058674e+00 3.3599125582452554e+00 + -1.8329586797594608e+00 2.4019388679447018e+00 3.8337161839220748e+00 + -1.8329650650324867e+00 2.1297298879983950e+00 4.3067140567021296e+00 + -1.7510748385949739e+00 1.7386371540537116e+00 4.7420960547720190e+00 + -1.5736782210816589e+00 1.2413380379170464e+00 5.0861186283750808e+00 + -1.3046238912954575e+00 6.9227600855608473e-01 5.2882254108570752e+00 + -9.9028700695525684e-01 1.8293658315683392e-01 5.3416961723169001e+00 + -7.4386108202279821e-01 -1.7196740018106288e-01 5.3215272034644778e+00 + id 11771 + loc 6.7147839069366455e-01 7.0146501064300537e-01 410 + blend 0.0000000000000000e+00 + interp 4.7650882868466060e-01:3.7883401488195639e-01:1.7099650814985656e-03:3.0764334640711882e-01:9.1709963867477429e-01:2.7865741476441469e-01:1.2950018512311234e+00:3.0472181656721092e-01:1.9720592122145719e+00:4.7650406359637376e-01:2.6819958967926225e+00:4.3190988915591882e-01:3.0005903700841867e+00:3.0102203730016946e-01:3.4108755260275716e+00 + CVs 20 + 6.7643911627588982e-01 1.9205314434858001e-01 -2.6474329549200715e-01 + 1.2706404636805386e+00 3.2961976318928987e-01 -5.2279648923334276e-01 + 1.8635592213428784e+00 4.5889003370342440e-01 -7.5318388563823868e-01 + 2.4455046608538549e+00 5.5571116080903205e-01 -9.7219813329448623e-01 + 2.9694943518314258e+00 5.6819530441116251e-01 -1.2029872020228507e+00 + 3.3942249364975199e+00 4.6075937187538929e-01 -1.4568129350526844e+00 + 3.7045381560966675e+00 2.3986357089219834e-01 -1.7216158462468982e+00 + 3.9347803603182756e+00 -6.2397409584596719e-02 -1.9673617336654734e+00 + 4.1200445221205975e+00 -4.2952778876552000e-01 -2.1547762804735444e+00 + 4.2574152414695297e+00 -8.4413335965183611e-01 -2.2381052039876463e+00 + 4.3554343683782930e+00 -1.2693624373059014e+00 -2.2436085256539249e+00 + 4.4690933365902712e+00 -1.7148665247410875e+00 -2.2951143617567240e+00 + 4.6233829481217885e+00 -2.2128613570422955e+00 -2.4780940042328163e+00 + 4.8024896112096407e+00 -2.7396014092697270e+00 -2.8044072078524316e+00 + 4.9893895394651473e+00 -3.2488813832105414e+00 -3.2448664812820573e+00 + 5.1750913150964530e+00 -3.7239118214097560e+00 -3.7292752656316996e+00 + 5.3587381179957347e+00 -4.1854210352301484e+00 -4.2052029749181736e+00 + 5.5368462765343640e+00 -4.6485427799257213e+00 -4.6754226760637883e+00 + 5.6613405307184994e+00 -5.0973216401357391e+00 -5.1496394586583598e+00 + id 11772 + loc 2.7319943904876709e-01 2.5174328684806824e-01 1077 + blend 0.0000000000000000e+00 + interp 3.9468161765082449e-01:2.5630139945730285e-01:4.2735979036816807e-02:2.7581196285844023e-01:1.0313114927760472e+00:3.2749159388305887e-01:1.9044376390931748e+00:3.9467767083464800e-01:2.2230691255785504e+00:2.6786708557718719e-01:2.9437932907061897e+00:2.9724575479616977e-01:3.4310319806675107e+00 + CVs 20 + -1.1331707523233159e-01 3.1597983858789047e-01 -4.8757971477920783e-02 + -2.3664960346423203e-01 6.1555662997646143e-01 -9.1270943149455969e-02 + -3.7177286559292255e-01 8.9376286735160282e-01 -1.3907442054412111e-01 + -5.1842289175606071e-01 1.1472443417024567e+00 -1.9855251211152097e-01 + -6.7480246004793032e-01 1.3741456549074345e+00 -2.7122774289134927e-01 + -8.3742416120113705e-01 1.5744883062863604e+00 -3.5700270451102478e-01 + -1.0032874983518183e+00 1.7503592755935573e+00 -4.5560745902181349e-01 + -1.1705422475659941e+00 1.9044944546824505e+00 -5.6751692789852204e-01 + -1.3360461961541785e+00 2.0400246600093430e+00 -6.9563914314622322e-01 + -1.4918850320826467e+00 2.1583054472924386e+00 -8.4881952403218008e-01 + -1.6281280174440287e+00 2.2598443353405422e+00 -1.0384890538831599e+00 + -1.7441142811263357e+00 2.3480049237369198e+00 -1.2757132310177310e+00 + -1.8479338094503868e+00 2.4205698402348306e+00 -1.5805201139864788e+00 + -1.9447233511564324e+00 2.4487844136814516e+00 -1.9870084391833425e+00 + -2.0396120433024683e+00 2.3594570991242145e+00 -2.5310257741316584e+00 + -2.1391343246840782e+00 2.0406817591211839e+00 -3.1582942770449245e+00 + -2.1995832790596439e+00 1.4312752751221998e+00 -3.6704095215597081e+00 + -2.2243393501372113e+00 5.9724618458730938e-01 -3.9034092847202189e+00 + -2.3380562441349859e+00 4.9681902923326859e-01 -3.8163376755538896e+00 + id 11773 + loc 2.8684651851654053e-01 8.8130861520767212e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5303074407712082e-01:3.2503766970169468e-01:9.9008547642351119e-02:3.5302721376968005e-01:1.0282416221717805e+00:3.3334743784915460e-01:2.1502611758944781e+00:3.4486259279943204e-01:2.9814819712273861e+00:3.4232813265951412e-01:3.5635141992319825e+00 + CVs 20 + -2.0349451832931752e-02 3.4590523940499829e-01 -1.9586301782539159e-01 + -3.4737461261104510e-02 6.8307310299066692e-01 -3.9908766099487741e-01 + -5.5070206369944127e-02 1.0163193638767059e+00 -6.2279342953155625e-01 + -8.7713486493604442e-02 1.3473354762865046e+00 -8.7930747945727772e-01 + -1.3325885592060874e-01 1.6657830631536652e+00 -1.1775079201612528e+00 + -1.9324265151407360e-01 1.9534343910062484e+00 -1.5226099608336723e+00 + -2.6769330848123896e-01 2.1904448534088816e+00 -1.9132339254478157e+00 + -3.5322397239548847e-01 2.3582884333174308e+00 -2.3426448631893644e+00 + -4.4086161939965712e-01 2.4404588314063060e+00 -2.8148918884551613e+00 + -5.0917075778473131e-01 2.4309017074645589e+00 -3.3496309556721959e+00 + -5.2147854795526061e-01 2.3424833503204097e+00 -3.9275815631842406e+00 + -4.5950613337964252e-01 2.1988117505535136e+00 -4.4660714842438720e+00 + -3.4070359681432139e-01 2.0140548215625902e+00 -4.9119001920242056e+00 + -1.7412990760258212e-01 1.7786215963845649e+00 -5.2947263400444369e+00 + 4.0949067371675710e-02 1.4856466162560260e+00 -5.6337733810159731e+00 + 2.6079201684068776e-01 1.1783132360228663e+00 -5.9114278816700230e+00 + 4.1434415569296368e-01 9.0028373594349032e-01 -6.1622082855125635e+00 + 4.9128568612207502e-01 6.1859061392184911e-01 -6.4665180182090136e+00 + 6.0094005813578566e-01 1.9932835309462082e-01 -6.9223745506619174e+00 + id 11774 + loc 5.8043092489242554e-01 7.7647037804126740e-02 1084 + blend 0.0000000000000000e+00 + interp 5.3900728273881049e-01:3.3734573265736079e-01:6.0822601543981336e-02:3.4170292313954548e-01:7.7355175871347648e-01:4.1014860061955716e-01:1.1025849774124850e+00:4.3343367457696474e-01:1.5472403877113901e+00:5.3900189266598308e-01:2.0090980476294336e+00:2.8805829385260939e-01:2.7486970268530801e+00:2.8865926808867975e-01:3.6292363552607694e+00 + CVs 20 + 2.5131390454593350e-01 3.0013473609528052e-01 -2.0800648400151561e-01 + 4.6609019547301656e-01 5.5716067148795512e-01 -3.8944236508685881e-01 + 6.3722361428580099e-01 7.9628462247590637e-01 -5.7622122417814037e-01 + 7.8192933622913274e-01 1.0234774069455916e+00 -7.5115067232127641e-01 + 9.2151165097172627e-01 1.2253377173156892e+00 -8.7385128247325661e-01 + 1.0654745114179616e+00 1.3940819640351578e+00 -9.3014276079616565e-01 + 1.2170748746291027e+00 1.5297118892786747e+00 -9.2802494225293708e-01 + 1.3825377567104264e+00 1.6301225295127653e+00 -8.7310959956146761e-01 + 1.5488500318701783e+00 1.6853488485867638e+00 -7.5459443453645914e-01 + 1.6584131048717861e+00 1.6890989496530164e+00 -5.7343261245481525e-01 + 1.6734804703750181e+00 1.6586485832772861e+00 -3.6505772217626520e-01 + 1.6125661758645269e+00 1.6189030486930673e+00 -1.5535017950093288e-01 + 1.4897111729131491e+00 1.5738292483731127e+00 4.1263937823443286e-02 + 1.2831770981835617e+00 1.4945173878467291e+00 1.7685141053762621e-01 + 9.8508630779568052e-01 1.3493148015062881e+00 2.1131711700724398e-01 + 6.2796370475550112e-01 1.1135933861378420e+00 2.0404874722597099e-01 + 2.6102871872388922e-01 7.7545506519019880e-01 2.6674477411401043e-01 + -7.1447885628107138e-02 4.0743645890397862e-01 5.3744992420373172e-01 + -1.2385896125515083e-01 4.2882222008801174e-01 7.7009986782625783e-01 + id 11775 + loc 5.5325114727020264e-01 7.7647037804126740e-02 1085 + blend 0.0000000000000000e+00 + interp 5.4941399370155330e-01:3.1555806139710124e-01:7.8298149685646823e-01:5.0305954137529041e-01:1.3441998905536743e+00:3.7619909529175627e-01:1.8851679992496315e+00:4.9737526381326863e-01:2.4522192052063758e+00:4.9718632240001487e-01:2.9987271197443626e+00:5.4940849956161630e-01:3.3704521571768362e+00:4.9213633054452577e-01:3.9283038809388371e+00 + CVs 20 + 4.1089922717610766e-01 3.4298612514586779e-01 -3.0983264645653608e-01 + 7.9834239588100486e-01 6.5841562473156312e-01 -5.2933958179410801e-01 + 1.2041891273544947e+00 9.3841008753854960e-01 -6.8126291845802900e-01 + 1.6432973767518588e+00 1.1676517866365430e+00 -7.4899200757598550e-01 + 2.0968145644839020e+00 1.3213609339505499e+00 -7.1030589744626083e-01 + 2.5305464877242372e+00 1.3850972649096345e+00 -5.6603629998990723e-01 + 2.9086357452124676e+00 1.3590002419492215e+00 -3.3777026239520791e-01 + 3.2052822408708841e+00 1.2548236881646830e+00 -6.0660356614700039e-02 + 3.4144676763218254e+00 1.0898243147789008e+00 2.2260810075335863e-01 + 3.5554520060963544e+00 8.8059154405295181e-01 4.7347545712879635e-01 + 3.6547311890042877e+00 6.3834054995477052e-01 6.6648148873744606e-01 + 3.7278412399612257e+00 3.7187110909799881e-01 7.8744004022722225e-01 + 3.7819292018580537e+00 9.1941809618607040e-02 8.3424941984371226e-01 + 3.8303877236729318e+00 -1.9741806496685915e-01 8.1001105654686179e-01 + 3.8846684183395173e+00 -4.9311457886015309e-01 7.1133839656799802e-01 + 3.9722466290845482e+00 -8.0881201474479880e-01 5.4004486668595375e-01 + 4.1409639970714158e+00 -1.1608212068520682e+00 2.7686840232612464e-01 + 4.3765036350594588e+00 -1.4896002499068484e+00 -7.2006438369823011e-02 + 4.5179311403526743e+00 -1.7284656482947280e+00 -3.6995990592314354e-01 + id 11776 + loc 7.4394953250885010e-01 2.6698666810989380e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6108718561998008e-01:2.9229409749555524e-01:4.6621160270690087e-01:3.0728686243113895e-01:1.5948023015563204e+00:4.6108257474812392e-01:2.1239196074756661e+00:4.3538633623744544e-01:2.7662579485083767e+00:4.2766856384168656e-01:3.0245788559993261e+00:2.9063099911861995e-01:3.8030122454355659e+00 + CVs 20 + -1.7375816816247361e-01 3.2421244668794602e-01 3.1129773538831473e-01 + -3.4434725867100735e-01 6.8113539055638528e-01 5.7048515929336019e-01 + -4.6622954424428731e-01 1.0787848561283129e+00 7.4451910124228249e-01 + -5.2869194140298503e-01 1.4711124206718214e+00 8.3076997709988132e-01 + -5.9353838886949872e-01 1.8423185593176608e+00 8.7273132716380908e-01 + -7.5610831368117204e-01 2.1926508816654509e+00 9.3406165911268524e-01 + -1.0712645549643454e+00 2.4654027212320813e+00 1.0671980830085712e+00 + -1.5292394350089320e+00 2.5665123148189650e+00 1.2835504799992221e+00 + -2.0710910623273553e+00 2.4397825691089841e+00 1.5240478240950428e+00 + -2.6299060724283678e+00 2.1299600022340992e+00 1.6872296540864833e+00 + -3.1678592190634522e+00 1.8084015830686662e+00 1.7077219669826762e+00 + -3.6307128054067617e+00 1.6847840304875166e+00 1.6597284774202370e+00 + -3.8726378177868179e+00 1.8375737656802784e+00 1.7306648599099885e+00 + -3.8223520803561870e+00 2.1071661612061208e+00 1.8984104538078861e+00 + -3.8394721749242300e+00 2.3422369222199722e+00 2.0789588786722684e+00 + -4.1569717186881503e+00 2.5535917625913593e+00 2.4104606914988640e+00 + -4.9092063519575717e+00 2.5951087417099457e+00 2.9088631241117278e+00 + -6.0113749154772798e+00 2.2542998720893275e+00 3.1972927197518475e+00 + -6.5126835418812146e+00 2.2344585902792287e+00 3.2893503651336884e+00 + id 11777 + loc 2.3219443857669830e-02 3.1316671520471573e-02 1076 + blend 0.0000000000000000e+00 + interp 4.4867876478411622e-01:3.7645025395487453e-01:6.0238190783182333e-01:4.3155998270849316e-01:1.0001602241198699e+00:4.4867427799646842e-01:1.6987688909448480e+00:3.3763693711788861e-01:2.0339315778101903e+00:2.4793876579621368e-01:2.9392621258177378e+00:4.0095667544512309e-01:3.1418679810499892e+00:3.5536892172628176e-01:3.9225200035360546e+00 + CVs 20 + -1.0986261789202414e-01 3.4191519353251465e-01 -2.5912916463339619e-01 + -2.0104669149660956e-01 7.0455677140430617e-01 -5.1991027454228245e-01 + -3.2037417319865963e-01 1.0593695111576804e+00 -7.9652292439772365e-01 + -4.8353107198747391e-01 1.3867487512593752e+00 -1.0893225778176223e+00 + -6.9133551907615987e-01 1.6732709300493269e+00 -1.3958310319325693e+00 + -9.4001444268189571e-01 1.9039976802865883e+00 -1.7143749094909082e+00 + -1.2220738323772746e+00 2.0691851331501998e+00 -2.0416154756841753e+00 + -1.5285952294569527e+00 2.1678318392143918e+00 -2.3717414544222710e+00 + -1.8528452503039521e+00 2.1998249642022731e+00 -2.6963190484648516e+00 + -2.1887500846952155e+00 2.1644516882714915e+00 -3.0059955796331668e+00 + -2.5302332263595035e+00 2.0615491174711353e+00 -3.2913149409423852e+00 + -2.8676086010764208e+00 1.8926043068369574e+00 -3.5436661398503224e+00 + -3.1846884160948132e+00 1.6648238067523733e+00 -3.7563314690274976e+00 + -3.4609447034947443e+00 1.3942031899752045e+00 -3.9266937665456623e+00 + -3.6778379581143708e+00 1.0994272520466777e+00 -4.0581551612122277e+00 + -3.8182183624838841e+00 7.8988036579139664e-01 -4.1572319973127660e+00 + -3.8436471718103054e+00 4.8336080930871073e-01 -4.2265013017138351e+00 + -3.7290589401290251e+00 2.5332664470680988e-01 -4.2642300847200501e+00 + -3.5878412335906349e+00 2.9146590849133514e-02 -4.2897153555985863e+00 + id 11778 + loc 7.2196501493453979e-01 2.2977578639984131e-01 1090 + blend 0.0000000000000000e+00 + interp 5.2206904288274691e-01:4.2825228003840077e-01:3.5443503976691826e-02:2.7812825976690891e-01:8.6804922711555155e-01:3.2476541253429914e-01:1.8040592772982338e+00:3.8269052900628370e-01:2.4332006022064276e+00:5.2206382219231806e-01:2.9970666957855583e+00:4.7519387034410332e-01:3.2913632250603913e+00:5.0863688465179679e-01:3.7993047522860679e+00 + CVs 20 + -1.9560261353956832e-02 4.6120147341801981e-01 -2.2813626224043787e-01 + 2.5458851671291804e-02 8.5616215640979543e-01 -3.8900386666447884e-01 + 9.7640712481438741e-02 1.2193592756569402e+00 -5.1203564820029812e-01 + 1.8651809519083973e-01 1.5647288618214077e+00 -6.0168819809857932e-01 + 2.9953569986227091e-01 1.8857745523477498e+00 -6.4520141602437686e-01 + 4.4278306648428611e-01 2.1723037797296993e+00 -6.3045994188056853e-01 + 6.1809746110314789e-01 2.4075552831279392e+00 -5.4601407764636911e-01 + 8.1487452067709187e-01 2.5690618074404612e+00 -3.8694965868748143e-01 + 1.0077198181924207e+00 2.6406780674569168e+00 -1.6578232777438706e-01 + 1.1750311591323039e+00 2.6284400884324306e+00 9.0189744154553164e-02 + 1.3169658760213423e+00 2.5491274540162321e+00 3.6273539099416785e-01 + 1.4451009655008951e+00 2.4057425277997435e+00 6.4676186597601293e-01 + 1.5710510662840191e+00 2.1859702942572037e+00 9.3420205222103159e-01 + 1.7081290762312804e+00 1.8679102076280001e+00 1.2035209701327949e+00 + 1.8734977493643679e+00 1.4208601820040068e+00 1.4066754626035294e+00 + 2.0746539028803483e+00 8.5923170352052158e-01 1.4660334839507818e+00 + 2.3207856869930041e+00 2.6957927598546338e-01 1.3355162527116642e+00 + 2.6452454062155835e+00 -2.4892608894640533e-01 1.0079320488233274e+00 + 2.8360335547598283e+00 -6.0465057068017103e-01 8.7509823098173001e-01 + id 11779 + loc 6.9369578361511230e-01 6.0122209787368774e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2020627063887352e-01:2.6149599265221735e-01:6.3363109041656429e-03:3.0882753063368668e-01:1.0230329070030819e+00:3.1717516707647719e-01:2.0506691579021945e+00:3.2020306857616715e-01:2.8479630549258523e+00:2.9387787189607451e-01:3.2124450907571127e+00 + CVs 20 + 4.7795824183371804e-02 7.9583752268687469e-01 -4.1479512706287103e-01 + 1.2670650217691981e-01 1.6161711529601375e+00 -7.7498572647504727e-01 + 2.7513849626404135e-01 2.4786067186423160e+00 -1.0542953660676722e+00 + 5.5602671096631107e-01 3.3697853504204218e+00 -1.1752592704381368e+00 + 1.0348584804950789e+00 4.1973447963312172e+00 -1.0053673505415066e+00 + 1.6888396218520381e+00 4.7561949897019318e+00 -4.7671981887616410e-01 + 2.3835276058229495e+00 4.8412381655366952e+00 3.0172269718306488e-01 + 2.9863599680106763e+00 4.4220461850430679e+00 1.1310199332829380e+00 + 3.3998695257360803e+00 3.5658862937536533e+00 1.9230456991612466e+00 + 3.4631030092330679e+00 2.3847064902105313e+00 2.6635973014966208e+00 + 3.0266003277144389e+00 1.1194226739200235e+00 3.2841662661374986e+00 + 2.2377947167815542e+00 2.7390759092270178e-02 3.6328721355493627e+00 + 1.4430332704672395e+00 -8.2498084901823820e-01 3.7302696982040713e+00 + 8.7712641600563379e-01 -1.4709005046852304e+00 3.8439535211231437e+00 + 7.3077144265730931e-01 -1.8833285912342026e+00 4.1745792494191258e+00 + 9.2124321100586037e-01 -1.8690493399931705e+00 4.5509219801999290e+00 + 1.0182580457319450e+00 -1.6388273078557545e+00 4.8515097000172549e+00 + 1.0535962786990942e+00 -1.3630589968863216e+00 5.2222306037703081e+00 + 1.1365903103434023e+00 -8.1542232141593107e-01 5.7515115575557161e+00 + id 11780 + loc 1.8531019985675812e-01 9.7979742288589478e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8707585029203693e-01:3.7646423364199005e-01:2.5337001369950873e-02:4.8707097953353401e-01:5.8497357848502207e-01:4.0832918942986651e-01:1.2242951605259735e+00:8.8418615951885479e-02:1.9999999448800443e+00:2.9561300830335374e-01:2.9400432162750372e+00:4.1730987147927784e-01:3.2605248933603468e+00 + CVs 20 + 5.6618674160856933e-02 3.6763044756944940e-01 -2.1990840778216442e-01 + 1.3258554525299221e-01 7.6730214995630475e-01 -4.2699895905670515e-01 + 1.9142142365744869e-01 1.2049400050807373e+00 -6.2118375605555931e-01 + 2.0341255051430873e-01 1.6751617727537511e+00 -7.8511737234061962e-01 + 1.5732870075843153e-01 2.1678679947541353e+00 -9.2091389699109372e-01 + 7.0975127782124225e-02 2.6671956551108349e+00 -1.1049489480868393e+00 + -4.0306080974295000e-04 3.1032089509408234e+00 -1.4489601822083116e+00 + 1.5614177498588067e-02 3.3562604166610481e+00 -1.9533316480147134e+00 + 1.6398832212737058e-01 3.3699804753551375e+00 -2.4892482284822264e+00 + 4.4369831187287856e-01 3.1986227457497707e+00 -2.9039576967678782e+00 + 8.0411527498156654e-01 2.9688108496077592e+00 -3.1305595058273648e+00 + 1.1855677355753138e+00 2.7505588576226665e+00 -3.2091605938025256e+00 + 1.5521483418693656e+00 2.5287880238325702e+00 -3.2088869755170100e+00 + 1.8908932585573748e+00 2.2426526245420835e+00 -3.1550952032737780e+00 + 2.1612757538255152e+00 1.8374540206765975e+00 -3.0276311842911552e+00 + 2.2871996126020111e+00 1.3439176154866410e+00 -2.7995450929256087e+00 + 2.1849769778641290e+00 8.6509239641777891e-01 -2.4193833099838460e+00 + 1.8024277055074287e+00 5.9716115583408258e-01 -1.9430993754517927e+00 + 1.6325878776179039e+00 3.9822873712007023e-01 -1.7503205465602569e+00 + id 11781 + loc 9.7563242912292480e-01 4.7805947065353394e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5655645141839046e-01:2.6508734907554027e-01:1.6477239297176216e-01:4.1666247061394301e-01:9.2275102003493381e-01:1.7103762931814481e-01:1.8920931887705803e+00:4.5655188585387629e-01:2.8164595075247010e+00:2.9893322265418310e-01:3.0405185843468656e+00:4.1938490919355220e-01:3.6802108515001208e+00 + CVs 20 + 9.3119877947843335e-02 3.2591875443891249e-01 -1.7905139153423005e-01 + 2.1577808395313750e-01 6.4043791039057807e-01 -3.6610179404450416e-01 + 3.5829774434081313e-01 9.4865009332721095e-01 -5.5444016307885469e-01 + 5.2117116941022812e-01 1.2484372382782842e+00 -7.3748918975865430e-01 + 7.0904079617882287e-01 1.5310953107638750e+00 -9.0811713261077243e-01 + 9.1975194262166948e-01 1.7864696011151613e+00 -1.0613247910292967e+00 + 1.1526652841545466e+00 2.0056976938081332e+00 -1.1971942867109044e+00 + 1.4224582506257257e+00 2.1725300971178472e+00 -1.3165926627671005e+00 + 1.7404561912358527e+00 2.2479180840008306e+00 -1.4088803807995094e+00 + 2.0926701956410252e+00 2.1998190556086579e+00 -1.4620735151878135e+00 + 2.4547788154760135e+00 2.0082658941967120e+00 -1.4737203236988472e+00 + 2.7591212613612979e+00 1.6729084555760592e+00 -1.4227407238091585e+00 + 2.9376436743751393e+00 1.2593913908364256e+00 -1.2872737300784762e+00 + 2.9819053837539067e+00 8.5892176577695079e-01 -1.0790847136553783e+00 + 2.9381981699598114e+00 5.2417173982041176e-01 -8.2575868618301440e-01 + 2.8690629109165786e+00 2.6842551466765219e-01 -5.4319479162907447e-01 + 2.8165006877204708e+00 1.0605030798269066e-01 -2.3950323500049048e-01 + 2.8040710209741291e+00 9.1413648603599240e-02 9.1348848637239688e-02 + 2.8628590229990856e+00 3.2847220153313605e-01 4.8729981899586522e-01 + id 11782 + loc 1.6547732055187225e-01 8.7938249111175537e-01 1077 + blend 0.0000000000000000e+00 + interp 4.1836587975275763e-01:3.0253330240372889e-01:1.7232146785842950e-01:2.7507363461807127e-01:1.2405812698168552e+00:2.8552870398057723e-01:2.0212404394901884e+00:2.8369731603844461e-01:2.8483287739901755e+00:4.1836169609396012e-01:3.5392590127188983e+00 + CVs 20 + 1.3973219768003217e-01 2.4592194119380972e-01 -2.2655651272608873e-01 + 2.6964773097037908e-01 4.9970808752067064e-01 -4.1970712083054873e-01 + 3.9059480310775635e-01 7.3194371693266180e-01 -6.1200748689061901e-01 + 5.0380571129103058e-01 9.3300800840664766e-01 -8.1793317850050651e-01 + 6.0864555299073408e-01 1.1031413640856997e+00 -1.0347421311693692e+00 + 7.0525814643099305e-01 1.2430785464227168e+00 -1.2588808102080982e+00 + 7.9716054510849421e-01 1.3532644999659977e+00 -1.4897274653593897e+00 + 8.9068912589672300e-01 1.4318449679930119e+00 -1.7296868586404710e+00 + 9.9023858655853414e-01 1.4751333144175902e+00 -1.9791126226196012e+00 + 1.0961328292895574e+00 1.4799547912540940e+00 -2.2346621350955762e+00 + 1.2059701966460543e+00 1.4442094118838811e+00 -2.4908085204274122e+00 + 1.3148361078922461e+00 1.3679305619154820e+00 -2.7403364583732448e+00 + 1.4150443829205832e+00 1.2539410640488504e+00 -2.9755082168499531e+00 + 1.4958501379282156e+00 1.1069935761655509e+00 -3.1884279910600926e+00 + 1.5457724114784124e+00 9.3599720251833640e-01 -3.3704735934728709e+00 + 1.5607090817106504e+00 7.7519014504927497e-01 -3.5124521382737917e+00 + 1.5465434940280509e+00 7.3010259941916278e-01 -3.6270834879172282e+00 + 1.5284693016190156e+00 9.0085039757066110e-01 -3.8429832950922811e+00 + 1.4635584314036436e+00 7.2002122251321099e-01 -3.6944453768086172e+00 + id 11783 + loc 7.4111986160278320e-01 3.4358680248260498e-01 410 + blend 0.0000000000000000e+00 + interp 4.2537622322294927e-01:3.6603863240366197e-01:4.2627410010633204e-01:2.8966272294788348e-01:1.0131887687768255e+00:4.1759984292855562e-01:1.8907495664730725e+00:4.2537196946071704e-01:2.2969675003204792e+00:2.8288462482486471e-01:2.9687467923297426e+00:3.7069481629687906e-01:3.3844745339896432e+00:3.1046619940156961e-01:3.9906607811500407e+00 + CVs 20 + -4.0443572248368576e-01 3.0861242481516798e-01 1.2841757242881555e-01 + -7.5566016563482830e-01 5.6702073484856086e-01 2.5376173853233885e-01 + -1.1051884738577118e+00 8.0656170109399716e-01 3.7478097186203041e-01 + -1.4670268090770664e+00 1.0258442201667215e+00 5.0481524909942244e-01 + -1.8274186420758782e+00 1.2038270143160124e+00 6.6148805982275893e-01 + -2.1701910940154416e+00 1.3219128198372434e+00 8.5767369100859414e-01 + -2.4793403321590088e+00 1.3710827759611137e+00 1.1000924961147207e+00 + -2.7436246510156947e+00 1.3510406094806269e+00 1.3872475679634597e+00 + -2.9659437248616314e+00 1.2634007840960075e+00 1.7059233365121023e+00 + -3.1578945286954108e+00 1.1048439575485918e+00 2.0316239766569328e+00 + -3.3260699360934582e+00 8.5314827978797370e-01 2.3282705183528214e+00 + -3.4671503901856995e+00 4.8087666361677450e-01 2.5627042547915888e+00 + -3.5888108647200845e+00 5.2306731301170473e-03 2.7540297458245959e+00 + -3.7157663163588626e+00 -5.2079470019369700e-01 2.9712759914136457e+00 + -3.8761805667042335e+00 -1.0336271631496381e+00 3.2796261053700215e+00 + -4.0932461429910267e+00 -1.4693401098440562e+00 3.7056956537796952e+00 + -4.3914983845655806e+00 -1.7984549081175287e+00 4.2180181094596767e+00 + -4.7866135963442051e+00 -2.0289704296262814e+00 4.7410810741142528e+00 + -5.2644902559598323e+00 -2.1754118598283378e+00 5.2063907279954442e+00 + id 11784 + loc 5.2244842052459717e-01 6.0485321283340454e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2703809062273435e-01:4.2703382024182812e-01:3.1789908590567795e-01:3.5969251743085423e-01:1.0285492570087027e+00:2.4985464017226355e-01:1.7429858957689111e+00:3.6547447839151459e-01:2.3268457737510158e+00:2.6765109136558612e-01:3.0003486258314611e+00:3.5220221520115425e-01:3.7333315368106854e+00 + CVs 20 + -9.2474134575452303e-03 3.5296217296681603e-01 -2.3435290079201374e-01 + 1.8108046440448791e-02 7.1542605323022612e-01 -4.5592177383193405e-01 + 8.0085883783674441e-02 1.0829559774884856e+00 -6.8063028301109918e-01 + 1.7974704830907945e-01 1.4491286406050705e+00 -9.1105657763399372e-01 + 3.2635048850408760e-01 1.8117542511638398e+00 -1.1469565382857485e+00 + 5.2256754921530879e-01 2.1634038576387389e+00 -1.4125736497866836e+00 + 7.5641756127293369e-01 2.4792343860229797e+00 -1.7565190651736096e+00 + 9.9775154061977278e-01 2.7031723564364003e+00 -2.2142976689928089e+00 + 1.2011826244238835e+00 2.7449275410704441e+00 -2.7596853987014351e+00 + 1.3405480687118703e+00 2.5532923105913357e+00 -3.3038637507371966e+00 + 1.4264660435084657e+00 2.1587240878210814e+00 -3.7612261165128706e+00 + 1.5011335320435277e+00 1.6341918500300752e+00 -4.0887220566440572e+00 + 1.6227807462520629e+00 1.0567632650620802e+00 -4.3094818052434292e+00 + 1.8300415735632802e+00 4.8232748168616335e-01 -4.5163555477652482e+00 + 2.1279184602563674e+00 -2.5617422896224498e-02 -4.8395635505976262e+00 + 2.4875491335118398e+00 -3.3707174518818028e-01 -5.3606469426663717e+00 + 2.8315021827917164e+00 -2.8548830277499782e-01 -6.0044272320742973e+00 + 3.0733128203965858e+00 4.5643964059548209e-02 -6.5101064702653630e+00 + 3.2228877546275077e+00 3.3208211705497342e-01 -6.8084261360822085e+00 + id 11785 + loc 3.9182651042938232e-01 7.7652698755264282e-01 1053 + blend 0.0000000000000000e+00 + interp 2.6715293022916344e+00:3.3634034013193242e-01:1.5453388437808324e-01:6.5845673208793232e-01:3.0862829503069988e-01:2.6715193022916344e+00:3.7169945563339590e-01:8.9842703223054343e-01:3.8648505103413855e-01:2.0694729822996161e+00:2.4231299156443291e+00:6.1908958738000874e-01:2.7101652751444392e+00:3.2587329545780108e-01:3.0000061121741948e+00:3.4020786333426239e-01:3.6195200890197521e+00 + CVs 20 + 7.4926311491811004e-02 5.7356833313175826e-01 3.5395616861857410e-01 + 5.3967896586729180e-02 1.0688916089277811e+00 6.6048404144528228e-01 + -1.8789759967898667e-02 1.5120428538019413e+00 9.6415959270404106e-01 + -1.4390801028433486e-01 1.9103105887143608e+00 1.2838272457618545e+00 + -3.3382802945070855e-01 2.2454156304899104e+00 1.6106884156457872e+00 + -5.9366645338672419e-01 2.4963148858368704e+00 1.9291658452461897e+00 + -9.1684177800762479e-01 2.6424863372202512e+00 2.2141974810124951e+00 + -1.2816561524001202e+00 2.6716179754284215e+00 2.4336496394355880e+00 + -1.6519043273929337e+00 2.5832050918449680e+00 2.5597721150339545e+00 + -1.9791008555589396e+00 2.3867606029242472e+00 2.5768918222031720e+00 + -2.2069157317493806e+00 2.1139044928763604e+00 2.4877134667220244e+00 + -2.3091319738064771e+00 1.8136535574383812e+00 2.3170321395701494e+00 + -2.2948306964977156e+00 1.5239087501539386e+00 2.0865034680509140e+00 + -2.1906069069397525e+00 1.2833676854203124e+00 1.8119294025756787e+00 + -2.0444249219229476e+00 1.1333705771852116e+00 1.5127219650819701e+00 + -1.9149846101605712e+00 1.1185875051846905e+00 1.2405341578016436e+00 + -1.8467094927273728e+00 1.2521339975956980e+00 1.1048722969265774e+00 + -1.8243563113640602e+00 1.4398301895540493e+00 1.1173102265647747e+00 + -1.7347935941775370e+00 1.6962425257016025e+00 7.4343223008439807e-01 + id 11786 + loc 7.8722560405731201e-01 9.2029982805252075e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8095803407527323e-01:2.8007351130238556e-01:7.5699858283553301e-03:3.8095422449493249e-01:8.1663101051900533e-01:3.6845529746574557e-01:1.5558095735439248e+00:2.7893752854642889e-01:2.6224526444325837e+00:3.5180508811050332e-01:3.1513946220536266e+00 + CVs 20 + -9.8696859607187062e-02 4.3178823326630955e-01 1.3414137284479402e-01 + -2.0875490213839798e-01 8.4668839528698914e-01 2.6724170146955206e-01 + -3.1156967647605149e-01 1.2506403061431695e+00 4.1023022135841802e-01 + -4.2148329746284763e-01 1.6511035428022194e+00 5.5522997983607847e-01 + -5.6501460548787175e-01 2.0497293864391857e+00 6.8098041414298494e-01 + -7.6259216641323913e-01 2.4411447344984425e+00 7.6044334697335414e-01 + -1.0234554114249110e+00 2.8096334907123124e+00 7.5836954270807810e-01 + -1.3397162368759246e+00 3.1245747855938242e+00 6.2807372333910583e-01 + -1.6662772207485161e+00 3.3328099484254969e+00 3.3668868688348241e-01 + -1.9340979288656865e+00 3.3964530105510709e+00 -7.3857774658973252e-02 + -2.1260228679168245e+00 3.3167335808761607e+00 -5.4466217586468235e-01 + -2.2556186502369773e+00 3.0722530033741400e+00 -1.0463224705034662e+00 + -2.3329616966456679e+00 2.6514645723480923e+00 -1.4996520213976043e+00 + -2.3715239745301817e+00 2.1767567076261525e+00 -1.8053677626186979e+00 + -2.3890825819768908e+00 1.8018176098956893e+00 -1.9842970047458293e+00 + -2.4082469107041438e+00 1.5702711298825003e+00 -2.0926758617709353e+00 + -2.4547184937046529e+00 1.4636745249114378e+00 -2.1341915144876467e+00 + -2.5143640773030222e+00 1.3907835998142697e+00 -2.1343692808631052e+00 + -2.4382224059153503e+00 1.2187314689305784e+00 -2.4363662151256511e+00 + id 11787 + loc 3.4098890423774719e-01 3.4579542279243469e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7598058230361595e-01:3.4763255370477902e-01:7.3227302151246398e-04:3.4182911215635131e-01:9.8214090577609814e-01:3.9753827168470973e-01:1.2493138518371194e+00:4.3935996128046184e-01:1.7924026305671295e+00:4.7597582249779291e-01:2.0165505798197949e+00:3.3884638790938876e-01:2.6174728893287442e+00:3.4906620177579240e-01:3.5279709223498994e+00 + CVs 20 + -2.3326016115713175e-01 2.2797983595273041e-01 -7.8923414971218825e-02 + -4.8169668693232859e-01 5.1583479847254432e-01 -1.3068802360525325e-01 + -7.3779907621632224e-01 8.4319052120654825e-01 -1.8000213113435276e-01 + -1.0088273507881345e+00 1.1872979537080002e+00 -2.4879763921652115e-01 + -1.3101355441939169e+00 1.5255117187120850e+00 -3.5697746070094971e-01 + -1.6432166719998691e+00 1.8259731831893145e+00 -5.2580873640852432e-01 + -1.9833835689265646e+00 2.0414459045198603e+00 -7.8027109705540554e-01 + -2.2744438883447780e+00 2.1130384543951122e+00 -1.1306225986108260e+00 + -2.4618741797315464e+00 2.0178734948915626e+00 -1.5370008868570295e+00 + -2.5445742729358760e+00 1.7890317603175143e+00 -1.9446063195844090e+00 + -2.5491479198617633e+00 1.4491475982216664e+00 -2.3044851855962447e+00 + -2.5077827405060473e+00 1.0025951701833007e+00 -2.5417258116375492e+00 + -2.4309498992347454e+00 5.0253548550781801e-01 -2.6170507152600817e+00 + -2.2811579149501933e+00 3.9831725737178303e-02 -2.6571504979417346e+00 + -2.0308185144611071e+00 -3.3723014070032753e-01 -2.8285714091557033e+00 + -1.7187423361365215e+00 -5.6812301006989840e-01 -3.1942736887758389e+00 + -1.4232963566716892e+00 -6.0865314760708356e-01 -3.7012405796523451e+00 + -1.1790804816001619e+00 -5.7854989456663453e-01 -4.2032677923100517e+00 + -9.5987862840526317e-01 -7.8446778070934320e-01 -4.6014837121003822e+00 + id 11788 + loc 7.5036227703094482e-01 9.2029982805252075e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4587205507596436e-01:2.4886019882988625e-01:2.8405679436118714e-03:3.3133148610127339e-01:8.4497567463407997e-01:3.4064208069571078e-01:1.5517498998985826e+00:3.4586859635541362e-01:1.9966230083128202e+00:2.4261345949149074e-01:2.6314885834926045e+00:3.2625869147886410e-01:3.1626585858250187e+00 + CVs 20 + -4.0489245547548375e-02 4.6187206588490259e-01 1.3783023924067295e-01 + -1.3246303508453150e-01 8.7213448072461097e-01 2.2441072428033695e-01 + -2.6017194238078850e-01 1.2478505361241785e+00 2.8243689486844836e-01 + -4.2066283051555708e-01 1.5881891555868843e+00 3.1153531601788698e-01 + -6.1154894334272902e-01 1.8794269771928409e+00 3.0125433629663156e-01 + -8.2313591692890764e-01 2.1095287149846689e+00 2.4667563157602446e-01 + -1.0404543625382492e+00 2.2713182676809636e+00 1.4968845453501944e-01 + -1.2484195345448794e+00 2.3662208627634760e+00 1.8597917799330954e-02 + -1.4386397555148969e+00 2.4031057733141208e+00 -1.3628053144766350e-01 + -1.6107914582591465e+00 2.3920044864948036e+00 -3.0782447954591086e-01 + -1.7670815823779229e+00 2.3400265436581460e+00 -4.9162531888152194e-01 + -1.9107226921938081e+00 2.2516653962324069e+00 -6.8485941945641582e-01 + -2.0462495529514309e+00 2.1251591825117004e+00 -8.8895596979994973e-01 + -2.1795658567002407e+00 1.9448440767695754e+00 -1.1091231029144266e+00 + -2.3183316723899212e+00 1.6810484143100475e+00 -1.3360134423678067e+00 + -2.4568338852937397e+00 1.3172393615826479e+00 -1.5170177053332405e+00 + -2.5820555610870928e+00 8.6312228843079342e-01 -1.5963630946221319e+00 + -2.7280875843729437e+00 3.7373708928820371e-01 -1.5378565546146987e+00 + -2.9033685675190211e+00 1.7131954412457495e-01 -1.4156734354969607e+00 + id 11789 + loc 9.5693922042846680e-01 2.8958436846733093e-01 1090 + blend 0.0000000000000000e+00 + interp 4.5882951604215794e-01:4.2500371893871131e-01:4.6999336419700777e-03:2.4905595534746283e-01:3.5830743713497948e-01:3.7524156824380311e-01:1.0813792796522141e+00:4.5882492774699751e-01:1.6109039411615276e+00:3.9836287352137562e-01:2.1163331256969728e+00:2.9558119574941771e-01:2.9944897678101885e+00 + CVs 20 + -9.6392766017171005e-02 4.3350235983650687e-01 -7.8140918999089343e-02 + -1.2039228944150901e-01 8.3501545557145018e-01 -1.1674123377284812e-01 + -1.0799577054368564e-01 1.2246155572891164e+00 -1.3092599018405876e-01 + -6.6833909454920071e-02 1.6060693702064839e+00 -1.2018680777547497e-01 + 1.7275275952573277e-02 1.9632328412611404e+00 -7.1115054630829677e-02 + 1.5541852575362236e-01 2.2722242538498731e+00 3.0324930073317158e-02 + 3.4729093874659678e-01 2.5009771584668550e+00 1.9341274011572129e-01 + 5.7211579352017594e-01 2.6213454890104382e+00 4.1285713148179071e-01 + 7.9971980079133098e-01 2.6279660671711844e+00 6.6654875397469071e-01 + 1.0156034916744809e+00 2.5404683443939997e+00 9.2618250964831450e-01 + 1.2251591019626589e+00 2.3818905005005160e+00 1.1706269217527945e+00 + 1.4360611887058283e+00 2.1628810198849928e+00 1.3839025571958112e+00 + 1.6521402129209217e+00 1.8874943178362176e+00 1.5456277994723977e+00 + 1.8755796075049076e+00 1.5630516273032464e+00 1.6262247769188605e+00 + 2.1028938198485791e+00 1.2078951431941354e+00 1.5854908295987462e+00 + 2.3199419464860993e+00 8.8615580541278927e-01 1.4060889996476735e+00 + 2.5227891607918496e+00 6.8612027285790866e-01 1.1444053028098555e+00 + 2.7102510563174693e+00 6.3500773500629959e-01 8.8583044406653988e-01 + 2.8457854167111667e+00 5.2664975039823714e-01 6.9229130540574535e-01 + id 11790 + loc 2.1096757054328918e-01 8.7109291926026344e-03 1054 + blend 0.0000000000000000e+00 + interp 6.2114464507360312e-01:5.2166551799157079e-01:1.5968317785498976e-01:2.1551162925632586e-01:9.1343636315083832e-01:5.6848056831893390e-01:1.6584077214821393e+00:6.2113843362715238e-01:2.0434777722094832e+00:5.3597469475119874e-01:3.0114405732992457e+00:5.6620835250803769e-01:3.8190346370586141e+00 + CVs 20 + -9.6032546079971220e-02 3.8928695810216585e-01 -3.0764129017104203e-01 + -1.4347443831249818e-01 7.5754576977227406e-01 -6.0651432692117258e-01 + -1.4311159573236404e-01 1.0924228227832109e+00 -9.1164832340593682e-01 + -1.0624875384653465e-01 1.3689019738475248e+00 -1.2375791321231071e+00 + -4.8589596256692902e-02 1.5586314235288170e+00 -1.5914973239799819e+00 + 1.9354957165451325e-02 1.6428756155567419e+00 -1.9609169060911902e+00 + 9.5378853923492435e-02 1.6197665759675459e+00 -2.3089109929790834e+00 + 1.8057183443315084e-01 1.5110813012303055e+00 -2.5896388248490188e+00 + 2.7243114878905744e-01 1.3617259433575553e+00 -2.7686128211183503e+00 + 3.5585821694354092e-01 1.2388126042580720e+00 -2.8279760993546854e+00 + 4.0737856612110224e-01 1.2173984698366478e+00 -2.7931466253713517e+00 + 4.2873489524838965e-01 1.3149532266503088e+00 -2.7492304113800938e+00 + 4.3671485855991860e-01 1.4727267769106280e+00 -2.7606778827432339e+00 + 4.1995081940245327e-01 1.5813081313441466e+00 -2.7931532441883147e+00 + 3.7049345082053908e-01 1.5753351859223930e+00 -2.7454011374422258e+00 + 1.9557804053513961e-01 1.5538805273292775e+00 -2.7397904298349980e+00 + -2.1516680292534629e-01 1.4167976696338025e+00 -2.8604255676785928e+00 + -4.4357931443122400e-01 1.1686504197502925e+00 -2.7734048525955970e+00 + -2.0370457216816784e-01 1.3272231446890004e+00 -2.6169001008382167e+00 + id 11791 + loc 3.2684367895126343e-01 3.2982084155082703e-01 1077 + blend 0.0000000000000000e+00 + interp 3.0697359116450373e-01:2.8269060852355188e-01:9.5942058785617601e-01:2.9724575479616977e-01:1.4264261072906037e+00:2.6111847367670465e-01:2.0178153124602920e+00:3.0697052142859210e-01:3.1249228226357122e+00:2.6384637066121613e-01:3.9926308187752548e+00 + CVs 20 + -1.3670385313150990e-01 3.2061517941934448e-01 -7.8240229663595770e-02 + -2.8217346158293982e-01 6.5392189731499695e-01 -1.4846234160665381e-01 + -4.5166016656919772e-01 9.8402428600037406e-01 -2.3026542962321112e-01 + -6.5642243502655329e-01 1.2956819003420132e+00 -3.3606463050681779e-01 + -9.0184719644141953e-01 1.5737400358626852e+00 -4.7244737846714246e-01 + -1.1858549552923381e+00 1.8007073497656507e+00 -6.4543312229786443e-01 + -1.4987556538272946e+00 1.9598963557172859e+00 -8.5794185388167543e-01 + -1.8256612395098191e+00 2.0395863868620809e+00 -1.1066404179613338e+00 + -2.1509084299981294e+00 2.0352837023525505e+00 -1.3811653088577331e+00 + -2.4638141258610124e+00 1.9501098402639192e+00 -1.6641402215606644e+00 + -2.7615111528887986e+00 1.7936065458424260e+00 -1.9329749257115403e+00 + -3.0446758945885111e+00 1.5783283217709325e+00 -2.1642747886434988e+00 + -3.3130402814913995e+00 1.3191168994374816e+00 -2.3357929522049536e+00 + -3.5651995892181865e+00 1.0394531581294355e+00 -2.4247895710137710e+00 + -3.7975477524859262e+00 7.8061874627805627e-01 -2.4113784158228841e+00 + -3.9976873916949365e+00 6.0611789282523132e-01 -2.3036659185795036e+00 + -4.1528076334138548e+00 5.6746100216077999e-01 -2.1697468314209805e+00 + -4.2515488696641643e+00 6.4691710988838369e-01 -2.0915979709559953e+00 + -4.4658544352751584e+00 6.3471138657917869e-01 -1.9124682484431497e+00 + id 11792 + loc 4.8907402157783508e-01 1.0509593784809113e-01 1076 + blend 0.0000000000000000e+00 + interp 5.4910777413051171e-01:3.8614720272609060e-01:1.5231993063044014e-02:5.4910228305277042e-01:9.6991785648722262e-01:3.5949410647413560e-01:1.2144252123258839e+00:3.9515536798930184e-01:1.7384778751516898e+00:2.9440635153935835e-01:2.1392128084731281e+00:3.9437106546389272e-01:3.0015558334943249e+00:4.2422355308641924e-01:3.5692874127945262e+00 + CVs 20 + -7.5535524686129854e-02 3.9125406774085736e-01 -2.5023186759324034e-01 + -1.8925878501469159e-01 7.6457542173672399e-01 -5.2254645329345051e-01 + -3.4440335609671069e-01 1.1156261771360532e+00 -8.1108436735088096e-01 + -5.5130196504504347e-01 1.4396185751289381e+00 -1.1038811927912067e+00 + -8.0751307330466604e-01 1.7204510164715214e+00 -1.3877903568191721e+00 + -1.0849541922223964e+00 1.9371749450042755e+00 -1.6601660199476449e+00 + -1.3533002956542468e+00 2.0834289217474788e+00 -1.9276587687311788e+00 + -1.5988349248670353e+00 2.1666534210710013e+00 -2.1961810268880178e+00 + -1.8088254332179634e+00 2.1912488374380166e+00 -2.4642859969085147e+00 + -1.9497536926485901e+00 2.1595906660108226e+00 -2.7096832990788022e+00 + -2.0063235338651886e+00 2.0904615175300529e+00 -2.9099380942686106e+00 + -2.0415994369064880e+00 1.9817207863480277e+00 -3.1077295496931461e+00 + -2.0987101478415111e+00 1.7754356244548166e+00 -3.3309081216753880e+00 + -2.1477643455289557e+00 1.4691028303161466e+00 -3.5140909627091390e+00 + -2.1674249874441514e+00 1.1081657921446233e+00 -3.6215042641199098e+00 + -2.1612152813131154e+00 6.5958493431379528e-01 -3.6370378818533058e+00 + -2.1053422801507744e+00 2.9389064382959518e-02 -3.3981095969121293e+00 + -1.9728742712312695e+00 -4.8356816821511539e-01 -2.7104339289406023e+00 + -1.8990653798058861e+00 -5.9356866302973676e-01 -2.4375170013252347e+00 + id 11793 + loc 5.2244842052459717e-01 5.6560617685317993e-01 410 + blend 0.0000000000000000e+00 + interp 4.2857810442555361e-01:3.0667650438333760e-01:2.7707216190863349e-01:2.9564996449930675e-01:1.0764923481756092e+00:4.2857381864450939e-01:1.8156755630189592e+00:2.6422147930183854e-01:2.2719020764281228e+00:4.2844182084672067e-01:3.0174316013988083e+00:3.1110574723155687e-01:3.6944901064126783e+00 + CVs 20 + 3.3010589427481052e-01 7.6314376739817641e-02 -2.2666641176392419e-01 + 5.9696649915055966e-01 1.2752095736947300e-01 -4.0753621004099100e-01 + 8.4184452554140932e-01 1.6881266975592779e-01 -5.6843941155726885e-01 + 1.0813134835050664e+00 2.0893069624167104e-01 -7.2010088940941763e-01 + 1.3139313390915808e+00 2.4936231928279134e-01 -8.6341959834724857e-01 + 1.5393007227515896e+00 2.9144972492917376e-01 -9.9944776370055743e-01 + 1.7579526755770312e+00 3.3633349420121605e-01 -1.1272773835857577e+00 + 1.9711435703205780e+00 3.8458318049284912e-01 -1.2441810151321591e+00 + 2.1812508276916645e+00 4.3599136001822358e-01 -1.3469697977501915e+00 + 2.3911527077416341e+00 4.9005326298190133e-01 -1.4317125718384212e+00 + 2.6001953900665322e+00 5.4813007493263566e-01 -1.4908264376168723e+00 + 2.8014537100953589e+00 6.1412627743936965e-01 -1.5142869825501704e+00 + 2.9957836558685877e+00 6.8672103351844005e-01 -1.5022843714125229e+00 + 3.2028370236791148e+00 7.5158911299068265e-01 -1.4725777165933815e+00 + 3.4362699767456704e+00 7.9259165852896762e-01 -1.4464575154548038e+00 + 3.6899684855646240e+00 8.0414144810556332e-01 -1.4340759478589074e+00 + 3.9505707732300532e+00 7.8689700409180574e-01 -1.4418676040157603e+00 + 4.2065303156777398e+00 7.4331908133204472e-01 -1.4804820986818783e+00 + 4.4282679766911333e+00 6.7618078531894366e-01 -1.5784233685135713e+00 + id 11794 + loc 9.5683151483535767e-01 7.1361953020095825e-01 1087 + blend 0.0000000000000000e+00 + interp 1.0574203015251937e+00:7.2454156136076764e-01:7.2916760176270357e-03:4.0251746433797470e-01:1.8702608988462521e-01:3.0725105903910832e-01:2.0152761172952842e+00:4.1252779373198417e-01:2.2754814487526516e+00:2.8798439001019677e-01:3.0696857383826290e+00:1.0574103015251937e+00:3.9910532570669703e+00 + CVs 20 + -1.4008569371045576e-01 4.2521810209414374e-01 4.9027774820326925e-01 + -2.7466488913816478e-01 7.5904277309144363e-01 8.2218687562471870e-01 + -4.1496691789702744e-01 1.0640550712200465e+00 1.0961093387338143e+00 + -5.6964947454197024e-01 1.3646640091655979e+00 1.3479428365063384e+00 + -7.4993356711887427e-01 1.6536493487505139e+00 1.5647226988200174e+00 + -9.6226333955933663e-01 1.9228157379914657e+00 1.7365001416374901e+00 + -1.2100116608994076e+00 2.1642606559351729e+00 1.8552002750070196e+00 + -1.4947817723481789e+00 2.3690916689234882e+00 1.9104719142495550e+00 + -1.8087384791436190e+00 2.5224896192089954e+00 1.8856011236648489e+00 + -2.1149383099738133e+00 2.6019686969171469e+00 1.7690627982396780e+00 + -2.3711095146625971e+00 2.5981868896965912e+00 1.5798288236561593e+00 + -2.5666158699166592e+00 2.5167540088145870e+00 1.3454529291237214e+00 + -2.7040574367603778e+00 2.3604303151336925e+00 1.0806433653814329e+00 + -2.7873623718636029e+00 2.1186525500218201e+00 7.8498284575302635e-01 + -2.8289427579192212e+00 1.7636857768746508e+00 4.7313189722490867e-01 + -2.8380421810621463e+00 1.2746637212724161e+00 2.0185572043889716e-01 + -2.8382135202484600e+00 6.4310617514146418e-01 2.6567057675640771e-02 + -2.9056933304676775e+00 -8.8936629439602455e-02 -1.6417004491001141e-03 + -3.0070489242121665e+00 -5.7317876135507095e-01 4.4427746437756155e-02 + id 11795 + loc 1.4619548618793488e-01 1.8353952467441559e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4183020884791102e-01:2.5871883984865818e-01:7.6879420009602772e-01:4.0952854628423424e-01:1.1199406260718463e+00:3.2296451051825042e-01:1.8501065926862352e+00:4.4182579054582255e-01:2.1392990392395861e+00:3.2391161057718354e-01:2.8949772741728235e+00:2.6473324439142726e-01:3.5502764967382427e+00 + CVs 20 + -2.2853623199279149e-01 3.3315817645458312e-01 -2.5410585667669555e-01 + -4.3891288768725750e-01 6.6400484534792903e-01 -5.1432920715720964e-01 + -6.6921822575586176e-01 1.0033879262191980e+00 -7.6733991933596779e-01 + -9.3903568086775513e-01 1.3522659724627379e+00 -1.0008013940126244e+00 + -1.2616114306787001e+00 1.7040521245550584e+00 -1.2033241376143948e+00 + -1.6482543055460837e+00 2.0449262522690330e+00 -1.3636006690849523e+00 + -2.1043790621242500e+00 2.3547421207921917e+00 -1.4726565496376547e+00 + -2.6283938349651139e+00 2.6090963068567468e+00 -1.5257311233391784e+00 + -3.2105390657448218e+00 2.7816354744985370e+00 -1.5219091824974886e+00 + -3.8313441149425449e+00 2.8468734951100321e+00 -1.4664300340101732e+00 + -4.4604653229387914e+00 2.7872454866534819e+00 -1.3759130550535770e+00 + -5.0642225811418822e+00 2.6032814279039815e+00 -1.2787147443105296e+00 + -5.6179723257378846e+00 2.3077901928602076e+00 -1.2036480226177999e+00 + -6.1035127491365140e+00 1.9153367436398643e+00 -1.1711207537079615e+00 + -6.5034949524177250e+00 1.4367065136666763e+00 -1.1908585848173507e+00 + -6.7954798942975536e+00 8.8018144307513313e-01 -1.2567049860426422e+00 + -6.9595514663502582e+00 2.8075003361488315e-01 -1.3427691936702613e+00 + -7.0261012918298125e+00 -2.7531735352327413e-01 -1.4090326166251552e+00 + -7.1357354055469102e+00 -6.0924431112869548e-01 -1.3984906851480716e+00 + id 11796 + loc 3.4771755337715149e-01 6.3200235366821289e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6368829716090115e-01:3.3367919547584796e-01:4.4300962750123307e-01:3.3634034013193242e-01:2.1223332204762198e+00:3.4450238911482706e-01:2.9723315125730552e+00:4.6368366027792957e-01:3.2190326111627900e+00:3.0944308789339481e-01:3.9767947709290756e+00 + CVs 20 + -8.4197811898496761e-02 3.5372764177965094e-01 3.8545128090420877e-01 + -2.0700943009972472e-01 6.3803992778357577e-01 7.1876150039744457e-01 + -3.4428927984988233e-01 8.9547310706506433e-01 1.0423049387402545e+00 + -4.8519398592102159e-01 1.1327659850644907e+00 1.3632721318009997e+00 + -6.3522309431158208e-01 1.3371799256054824e+00 1.6662027344814763e+00 + -7.9308525851702616e-01 1.4969838443372994e+00 1.9369266768489346e+00 + -9.5357624172952604e-01 1.6070759988005081e+00 2.1703054682898570e+00 + -1.1101536366685063e+00 1.6709855373814122e+00 2.3681549564008892e+00 + -1.2517653326838243e+00 1.7056103174012587e+00 2.5295846242961249e+00 + -1.3702780357645628e+00 1.7467368871087472e+00 2.6606370718371135e+00 + -1.4999409000159099e+00 1.8026635457799918e+00 2.7726452567791773e+00 + -1.6722874362750426e+00 1.8059185478265185e+00 2.8396447581370881e+00 + -1.8343330532895523e+00 1.6806760143731763e+00 2.8328698354505040e+00 + -1.8951823494627202e+00 1.4081860190357987e+00 2.7510605831137394e+00 + -1.8432303999112776e+00 1.0484396444754291e+00 2.6005089569244335e+00 + -1.7460987279228122e+00 6.7538031181294800e-01 2.3907410850511694e+00 + -1.6531032508479133e+00 3.4176366599064389e-01 2.1202764651810164e+00 + -1.5954777702237664e+00 1.8394699124383324e-01 1.7856144833342720e+00 + -1.6372926957605989e+00 3.8096502303124036e-01 1.4816829306760071e+00 + id 11797 + loc 2.1408559381961823e-01 9.4336206093430519e-03 1090 + blend 0.0000000000000000e+00 + interp 4.6948743235451279e-01:3.5813160803661293e-01:7.6173300002029409e-01:4.0905104547744175e-01:1.0232430886229633e+00:2.8345844852745439e-01:1.6195171929253558e+00:4.6948273748018926e-01:2.8427042482667857e+00:3.8937801817337364e-01:3.1002616474246949e+00:3.6824893425932614e-01:3.8928005823590190e+00 + CVs 20 + 3.8875039342520290e-01 4.6443153039903567e-01 3.7266087255009267e-02 + 6.5209330064910576e-01 8.6352085259130307e-01 1.1018846398941162e-01 + 8.5927164843014403e-01 1.2423001141799979e+00 2.0681776954986292e-01 + 1.0340230674732607e+00 1.6204042107588732e+00 3.2859510893441107e-01 + 1.1581467467679754e+00 1.9854860191766059e+00 4.8520826527648242e-01 + 1.2125232680858216e+00 2.3214882268440409e+00 6.8063648272223265e-01 + 1.1774204443999974e+00 2.6053194548271472e+00 9.1229146413798123e-01 + 1.0376374980276524e+00 2.8066216451720205e+00 1.1628656773985653e+00 + 7.9942629111260843e-01 2.8988177697470912e+00 1.3994152354752138e+00 + 4.9898748285019812e-01 2.8806062316917131e+00 1.6011009683524509e+00 + 1.7079747791435318e-01 2.7667420299387717e+00 1.7781523907162229e+00 + -1.6629879567378358e-01 2.5612358600528995e+00 1.9448266920544037e+00 + -4.9421787146136076e-01 2.2571162511979104e+00 2.1100742798427823e+00 + -7.8608561648183672e-01 1.8382603988149304e+00 2.2866697612536200e+00 + -9.9281690310565140e-01 1.2830535561410441e+00 2.4906368113939252e+00 + -1.0550188525321231e+00 6.4416666727575045e-01 2.7234327146763100e+00 + -9.6242081037187566e-01 2.6559889226453692e-02 2.9918704565716512e+00 + -7.3551626675637594e-01 -4.9871543030176713e-01 3.3132314703206922e+00 + -6.6134349587628338e-01 -7.5771682002986140e-01 3.4708885312577213e+00 + id 11798 + loc 6.9011807441711426e-01 2.2476291656494141e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7953976326164660e-01:4.4669789151445100e-01:6.7281477381840205e-02:2.7137222260635502e-01:6.7486687176990068e-01:2.9454769742105918e-01:1.2511243854090943e+00:3.1667321007108579e-01:2.0228114819627510e+00:4.5102067337989604e-01:3.0029563452448111e+00:4.7953496786401401e-01:3.6372068805393676e+00 + CVs 20 + 2.0439496879854252e-01 3.6311430464286470e-01 -1.2621600051821952e-01 + 3.7769704721685587e-01 7.1783071029776846e-01 -2.1422881247382164e-01 + 5.6082934372913085e-01 1.0747000824534125e+00 -2.8551695247049408e-01 + 7.7969131171838790e-01 1.4279584836385073e+00 -3.4104248494078027e-01 + 1.0481680158275977e+00 1.7625710268637873e+00 -3.6288951998600394e-01 + 1.3688508524656033e+00 2.0589615645318293e+00 -3.3574755588345750e-01 + 1.7306417722978009e+00 2.2970655203657042e+00 -2.5230815484128843e-01 + 2.1139271262415078e+00 2.4625260479138635e+00 -1.1484277355647410e-01 + 2.4993395357458970e+00 2.5498599543611347e+00 6.8861737098900866e-02 + 2.8718982341198163e+00 2.5595752296449419e+00 2.8908940629523694e-01 + 3.2222430438509577e+00 2.4967910096400727e+00 5.3119594402842107e-01 + 3.5476853690396717e+00 2.3708527992179826e+00 7.7576536838800259e-01 + 3.8480479879245153e+00 2.1930397612505739e+00 1.0025410304316158e+00 + 4.1169540187423026e+00 1.9755442268948826e+00 1.1988729428290990e+00 + 4.3397641253105137e+00 1.7342346683019800e+00 1.3695672262700527e+00 + 4.4913680860883805e+00 1.4870181778403648e+00 1.5089046857927286e+00 + 4.5392704634915564e+00 1.2401083637794001e+00 1.5980268087097085e+00 + 4.5246748337190752e+00 9.8776911595058825e-01 1.6131159643600497e+00 + 4.7300559634630748e+00 9.1887300122097426e-01 1.3419330071194344e+00 + id 11799 + loc 9.0919238328933716e-01 8.4974861145019531e-01 1054 + blend 0.0000000000000000e+00 + interp 2.8260955695052037e-01:2.8260673085495086e-01:4.1422616476949037e-01:2.3691564720858430e-01:1.0496472163890984e+00:1.9788942507728377e-01:1.9686527611091369e+00:2.0642416851611070e-01:2.0075366573195668e+00:1.6235653536247760e-01:3.3413264401099587e+00:2.0446314437470872e-01:3.8186721237535677e+00 + CVs 20 + 3.8737698417833744e-01 4.0914787656694207e-01 -2.8584176880338941e-01 + 7.4195225070061688e-01 8.0910327328353493e-01 -4.8288763242824506e-01 + 1.0609496133521261e+00 1.2251463663635509e+00 -6.0633995952318664e-01 + 1.3776377069613133e+00 1.5965269772572850e+00 -6.7683023407886289e-01 + 1.7277910142457111e+00 1.8433040008925434e+00 -7.2555345198149657e-01 + 2.1123832267158233e+00 1.9401685367188590e+00 -7.7840159153656974e-01 + 2.5086714941017831e+00 1.8919294929188444e+00 -8.4173320150824715e-01 + 2.9023334562129186e+00 1.7094988336997954e+00 -8.9894775002688077e-01 + 3.2814552077243029e+00 1.4096051907236935e+00 -9.1186764146022004e-01 + 3.6455599261835157e+00 1.0394416463823914e+00 -8.3221755345172366e-01 + 4.0073407889777668e+00 7.0244300443612673e-01 -6.4201879555095365e-01 + 4.3671152835366129e+00 5.1196576092882862e-01 -4.3526338597567071e-01 + 4.6781663091094092e+00 4.8797698509511989e-01 -3.5127344677791306e-01 + 4.9033509877548020e+00 5.4248385128441101e-01 -3.6448314026738182e-01 + 5.1538436146041793e+00 6.0324675000840466e-01 -4.0192223235619950e-01 + 5.5009231181182416e+00 6.5332744408609433e-01 -4.8903693978633389e-01 + 5.9462349690282323e+00 6.5196841148186913e-01 -6.4232395107737350e-01 + 6.4043094302414083e+00 5.4802263352495340e-01 -7.7349743919352831e-01 + 6.6243719367428344e+00 4.0747267685996258e-01 -7.1632884257129481e-01 + id 11800 + loc 7.2402179241180420e-01 2.2476291656494141e-01 1084 + blend 0.0000000000000000e+00 + interp 3.4326811900398552e-01:2.9874478707948321e-01:6.6230938723401489e-01:3.0858508307504584e-01:1.2462064376210500e+00:3.4326468632279550e-01:2.0291451867972623e+00:3.2259631575298303e-01:2.7194241191990489e+00:2.6731320407236370e-01:3.2269779517623220e+00:2.8014783656949444e-01:3.9912022538981509e+00 + CVs 20 + 1.1253552945373727e-01 2.9074494285125396e-01 -8.5067414845872102e-02 + 2.1893271435387818e-01 5.6196787278750748e-01 -1.4845707015783471e-01 + 2.9224973152758582e-01 8.2182823433117158e-01 -2.2402661910228333e-01 + 3.1542883155151247e-01 1.0662834016434570e+00 -3.2602695292679940e-01 + 3.0457714138715430e-01 1.3015849345052124e+00 -4.4658271846799080e-01 + 3.0604051810377153e-01 1.5600296301471304e+00 -5.6782994554870814e-01 + 3.7112355150547743e-01 1.8446999336380916e+00 -6.5156024753538244e-01 + 5.1313126694119948e-01 2.1097363900146582e+00 -6.7378087351766180e-01 + 7.1039219637177298e-01 2.3235864301692013e+00 -6.2062892808850700e-01 + 8.9922960645142858e-01 2.4733948964043848e+00 -4.5601905670114595e-01 + 1.0079743859243804e+00 2.5634097249008310e+00 -1.7686311444828928e-01 + 1.0087659164933498e+00 2.6056822713192718e+00 1.9582225864351765e-01 + 8.6612714241361177e-01 2.5849012995687217e+00 6.1427558088824785e-01 + 5.6155329849409197e-01 2.4829247087748847e+00 9.4808309869840179e-01 + 1.8315222338486928e-01 2.3267498577240628e+00 1.1080250494369548e+00 + -1.3846312412688647e-01 2.1599057843387275e+00 1.1193548226291017e+00 + -3.0778984496250666e-01 1.9942425324493338e+00 9.1981322724007442e-01 + -4.5610461308937228e-01 1.6784992798196616e+00 5.2581886717517434e-01 + -5.0716281166414567e-01 1.7766620360067922e+00 7.7732284228578208e-01 + id 11801 + loc 5.1738160848617554e-01 5.9477144479751587e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8054266463578174e-01:3.6774736618017539e-01:2.8404603289644870e-01:3.5698459541782929e-01:1.0604711725231550e+00:3.7442176321787196e-01:1.8099187532244576e+00:3.8053885920913538e-01:2.1588977427735694e+00:2.6480321733482853e-01:2.8359203177551162e+00:3.7254676894355171e-01:3.7064658355932152e+00 + CVs 20 + 3.2526285165942054e-03 2.6145846993160066e-01 -1.6382902809704128e-01 + 3.0249252771509749e-02 5.1937397708268696e-01 -3.2868043576114631e-01 + 7.6155466793838056e-02 7.7232462211735642e-01 -4.9725360244919953e-01 + 1.3955974611414795e-01 1.0193400730949156e+00 -6.7608248397208714e-01 + 2.2119293751742702e-01 1.2515588524739569e+00 -8.6877028616766905e-01 + 3.1490282251643198e-01 1.4615643904589675e+00 -1.0746062046141114e+00 + 4.0787030665565172e-01 1.6524704831503723e+00 -1.2929768450914227e+00 + 4.9001863191222006e-01 1.8352378826789275e+00 -1.5244953710923936e+00 + 5.6341135265271935e-01 2.0193511698172024e+00 -1.7698731583366258e+00 + 6.3723231017846627e-01 2.2072121782320551e+00 -2.0337238089324252e+00 + 7.1579209529661258e-01 2.3858335951994092e+00 -2.3262030185801263e+00 + 7.9552787008289017e-01 2.5214768633413258e+00 -2.6515600155404808e+00 + 8.6445342383812973e-01 2.5776686580143329e+00 -2.9937537277731860e+00 + 9.0575789413179064e-01 2.5376166140137233e+00 -3.3203611581467660e+00 + 9.1861936137529243e-01 2.4093913421656250e+00 -3.6043457529640124e+00 + 9.2697659867000570e-01 2.2155795640976303e+00 -3.8309441815111738e+00 + 9.5882964336636800e-01 1.9842722201365279e+00 -3.9907557997275531e+00 + 9.9643305596310194e-01 1.7368918473892991e+00 -4.0802182408362997e+00 + 8.3749049179494439e-01 1.4241410046463470e+00 -4.0239494426297231e+00 + id 11802 + loc 5.8732483536005020e-02 7.1461522579193115e-01 410 + blend 0.0000000000000000e+00 + interp 3.0374208019638993e-01:2.2150797417870163e-01:3.4530064060878818e-01:2.7725364723190454e-01:1.6147351778452648e+00:2.4061433476892008e-01:2.7500578905385940e+00:3.0373904277558800e-01:3.3709002491572377e+00 + CVs 20 + 2.9510329333841023e-01 1.7691309162464913e-01 -2.5648611967263812e-02 + 5.3485966601519286e-01 3.0726136048816488e-01 -5.1527856032570180e-02 + 7.5539929655782356e-01 4.1605253410854071e-01 -6.9541620444844299e-02 + 9.8689446778463397e-01 5.2305353673094523e-01 -7.2644470515153214e-02 + 1.2237490235828048e+00 6.2438148870565202e-01 -6.0996824762577839e-02 + 1.4578417767573681e+00 7.1616897733123208e-01 -3.6110707468310355e-02 + 1.6835929346044745e+00 7.9722382293444627e-01 4.2948206969689595e-04 + 1.8997073230445158e+00 8.6833275726822379e-01 4.6552004184906848e-02 + 2.1052737208758785e+00 9.3017277797403930e-01 9.7471899530630401e-02 + 2.2994195480162989e+00 9.8364363008310995e-01 1.4691607126044404e-01 + 2.4890887622220883e+00 1.0337502692212008e+00 1.9880708046935380e-01 + 2.6928346894968924e+00 1.0913089536309335e+00 2.8062393323608403e-01 + 2.9293367793369689e+00 1.1573188644989112e+00 4.1352920609046950e-01 + 3.2008281497509019e+00 1.2093064028604914e+00 5.5694666398175596e-01 + 3.4871385867257443e+00 1.2307705272487861e+00 6.4933028735229892e-01 + 3.7703871724771720e+00 1.2254850450299000e+00 6.7856938345357332e-01 + 4.0413401493115817e+00 1.2000702659464204e+00 6.6374932669671149e-01 + 4.2882358992938983e+00 1.1595268226449906e+00 6.1651917585986338e-01 + 4.4167154946463549e+00 1.0991563342055968e+00 4.2967713622166914e-01 + id 11803 + loc 8.7168258428573608e-01 3.3842769265174866e-01 1077 + blend 0.0000000000000000e+00 + interp 4.7132573098949176e-01:3.0763827845177205e-01:2.4520793219506498e-01:4.7132101773218188e-01:9.0776601545659508e-01:4.3882664034578545e-01:1.0978118848552472e+00:2.5201471583554780e-01:1.6527949049143049e+00:3.1001204885712708e-01:2.6998230339658349e+00:2.5105301465512042e-01:3.4926231096435227e+00 + CVs 20 + -8.5804451896123513e-02 2.8633574795972472e-01 3.1980808383191628e-01 + -1.5258519355635550e-01 5.8273749076925108e-01 6.1418069903040495e-01 + -2.3124643939212775e-01 8.5732108547977770e-01 9.2566462772217462e-01 + -3.4353536213250235e-01 1.0820476482612025e+00 1.2717376199637727e+00 + -5.0181334231216934e-01 1.2364716764901831e+00 1.6474120196474653e+00 + -7.1224611823519046e-01 1.3047389383380845e+00 2.0340439590554964e+00 + -9.7216038066196886e-01 1.2793763347046829e+00 2.4025333645569118e+00 + -1.2701215089908084e+00 1.1645725971711458e+00 2.7239729769503196e+00 + -1.5877419042832523e+00 9.7454532187113507e-01 2.9814054670092576e+00 + -1.9032765577703825e+00 7.2570013767171282e-01 3.1784504568344336e+00 + -2.1943473975216743e+00 4.3184547013212182e-01 3.3331459012707763e+00 + -2.4442170184548742e+00 1.1544029640097553e-01 3.4644888302245751e+00 + -2.6428160909912561e+00 -2.0243606166096817e-01 3.5898074079527396e+00 + -2.7913788795371119e+00 -5.1438857709971808e-01 3.7348844277406443e+00 + -2.8850937464630002e+00 -8.2979563070236750e-01 3.9364185787954473e+00 + -2.8982368130831406e+00 -1.1517828947939717e+00 4.2267950461938062e+00 + -2.8083905281970920e+00 -1.4510681766699214e+00 4.6311119378305117e+00 + -2.6428313439979627e+00 -1.6467337032821225e+00 5.1166090682443555e+00 + -2.6012622999601867e+00 -1.6862975865250089e+00 5.4408907713750168e+00 + id 11804 + loc 5.3967660665512085e-01 5.2719789743423462e-01 1054 + blend 0.0000000000000000e+00 + interp 4.3982306707344976e-01:4.3981866884277904e-01:5.8510053030591536e-05:3.9392414174441254e-01:7.3945167168911219e-01:2.2859070968413264e-01:1.0800990702149440e+00:2.5970342131957536e-01:1.9892719597896107e+00:3.4182197739943609e-01:2.3725958202264685e+00:3.1873560162273007e-01:2.9440967721783684e+00:2.7764497698866186e-01:3.3698320544554177e+00 + CVs 20 + 2.9105321787637212e-01 4.3589352940233467e-01 -1.5437495615435171e-01 + 5.6491837286880475e-01 8.9380928489325195e-01 -2.2032711950318312e-01 + 8.0988298182205187e-01 1.3630813880379014e+00 -1.8968438116456665e-01 + 1.0846850027464519e+00 1.7769894514339963e+00 -9.8470177627505873e-02 + 1.4472105480775910e+00 2.0406825254564041e+00 -1.1485857649655706e-02 + 1.8654732710653161e+00 2.0984507799867367e+00 2.4964385096392316e-02 + 2.2519572667376040e+00 1.9564409124041311e+00 8.4699012807394336e-03 + 2.5438427893171074e+00 1.6723398344565474e+00 -2.4081475426394716e-02 + 2.7375649102447399e+00 1.3171233401627027e+00 -2.7594730379392418e-02 + 2.8918604011829760e+00 9.4611385636388490e-01 3.3438107420103336e-02 + 3.0950142180377220e+00 5.9227982521133782e-01 1.8614414626973663e-01 + 3.4249054064866740e+00 2.9223817342270342e-01 3.9845881558213847e-01 + 3.9335322934006562e+00 1.0567855159085443e-01 5.3959953003179284e-01 + 4.4800215843342528e+00 8.9766884289877114e-02 4.5939150804012291e-01 + 4.8470717363954536e+00 1.4746828460858352e-01 2.4669375881566802e-01 + 5.0759137065050268e+00 1.9556723631717887e-01 4.0067409373479190e-02 + 5.2410294428285500e+00 2.3095285295529222e-01 -1.2138157352715062e-01 + 5.4251126568738615e+00 2.5598227820987729e-01 -2.5394010378364684e-01 + 5.7183869585815179e+00 2.1748193072077848e-01 -3.5400424289241672e-01 + id 11805 + loc 3.1923905014991760e-01 7.2675329446792603e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4165528594485076e-01:4.4165086939199133e-01:1.8317055339263943e-01:3.8460397170420368e-01:1.0017099948719714e+00:2.5145642360703963e-01:1.4595475419458339e+00:3.6912174276885534e-01:2.2816579463113094e+00:3.8233265518854803e-01:2.9968934988930425e+00:3.4679403020825711e-01:3.6702739954869044e+00 + CVs 20 + 1.6160758528773755e-01 2.9046062367737258e-01 -2.5827459481392867e-02 + 3.3160868082987344e-01 5.5552936833150901e-01 -4.8299326163719070e-02 + 4.9871853419198919e-01 7.9798677086209857e-01 -6.4991318391138003e-02 + 6.5870304245555267e-01 1.0264895923406641e+00 -7.6182117715489106e-02 + 8.1320202596921320e-01 1.2506407382961999e+00 -8.6630813852434152e-02 + 9.6614724072046176e-01 1.4807604696785197e+00 -1.0337158995482254e-01 + 1.1266795722313472e+00 1.7224170186912167e+00 -1.3635470762495172e-01 + 1.3051447180019111e+00 1.9738264458392856e+00 -1.9834089283519252e-01 + 1.5031779520307302e+00 2.2283752972226312e+00 -3.0478797452654705e-01 + 1.7099604546073190e+00 2.4734246945466030e+00 -4.7062416741857716e-01 + 1.9155204818297047e+00 2.6936368438816323e+00 -7.0343318927545673e-01 + 2.1229010743517476e+00 2.8719431749089983e+00 -1.0044613109951990e+00 + 2.3416989116039000e+00 2.9783945011322017e+00 -1.3619616806433168e+00 + 2.5854125849837368e+00 2.9702451182605696e+00 -1.7338046500038340e+00 + 2.8672438843671810e+00 2.8219517708241613e+00 -2.0857516914251075e+00 + 3.1478996892101132e+00 2.5382252107383509e+00 -2.4349469020638042e+00 + 3.3446212770301100e+00 2.1487983830457136e+00 -2.8017159366110049e+00 + 3.3607333947468643e+00 1.7388045293478975e+00 -3.1506904246828622e+00 + 3.0070456263044409e+00 1.6579017608723841e+00 -3.3084288178111136e+00 + id 11806 + loc 1.0495513677597046e-01 2.7491888403892517e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0782338633502622e-01:2.7204461000133251e-01:1.5497993292604484e-02:3.0403448084116624e-01:7.1572288871321321e-01:2.8337837290574025e-01:1.2350364055759293e+00:3.0185866162017022e-01:1.9633487838324677e+00:5.0781830810116291e-01:2.3399720620100366e+00:2.5224653773677513e-01:3.1162846679204974e+00 + CVs 20 + 3.2838875107113830e-01 3.5865158291542532e-01 2.8739852004325905e-01 + 5.2383162590776833e-01 6.3054564979522354e-01 5.5491536256568297e-01 + 6.7457977341931108e-01 8.6695520203822984e-01 8.2673920639831688e-01 + 8.1624455650798255e-01 1.0841558013459052e+00 1.1052451967525128e+00 + 9.4266807823679422e-01 1.2817896935177000e+00 1.3919485307573203e+00 + 1.0457343386788662e+00 1.4584610601607368e+00 1.6900937823730173e+00 + 1.1142031912407642e+00 1.6095862148938784e+00 2.0032541144409635e+00 + 1.1342004434590125e+00 1.7266318822770255e+00 2.3332922204087940e+00 + 1.0928020868979804e+00 1.7969459520970350e+00 2.6763042620267505e+00 + 9.8510426453304190e-01 1.8039590267834014e+00 3.0247847749727925e+00 + 8.2452212688189919e-01 1.7319349075992116e+00 3.3725089552043990e+00 + 6.3904822745584799e-01 1.5712184383143564e+00 3.7159751865501125e+00 + 4.6199350212074686e-01 1.3186750565960050e+00 4.0512118124269385e+00 + 3.3472083872355712e-01 9.8262869581199186e-01 4.3758060364565168e+00 + 3.0415650705942321e-01 5.9518455826662908e-01 4.6891732353407827e+00 + 3.8306815796127963e-01 2.1811958231089623e-01 4.9952154000637572e+00 + 5.3334233842523948e-01 -7.7488697710212662e-02 5.3074757483848964e+00 + 7.0072857251384801e-01 -2.7204613434061314e-01 5.6250111894854662e+00 + 8.2845817909346076e-01 -6.1337950742766056e-01 5.9276606327102357e+00 + id 11807 + loc 7.6558077335357666e-01 7.1197301149368286e-02 1053 + blend 0.0000000000000000e+00 + interp 5.3963980479606033e-01:4.3479925552408288e-01:4.1093518244669192e-01:5.3963440839801236e-01:9.8342230329188751e-01:2.1551162925632586e-01:1.9639103481773765e+00:4.1480661529392387e-01:3.0129212357935353e+00:2.8486099069040460e-01:3.6641731679116241e+00 + CVs 20 + 3.0158792393550193e-01 3.7354289332329865e-01 -1.5455147710958567e-01 + 6.1702695983883094e-01 7.3344902095523046e-01 -2.6199708380880216e-01 + 9.5612165401871629e-01 1.0688300863795699e+00 -3.2956722602060318e-01 + 1.3288098086790605e+00 1.3540560423707890e+00 -3.6970249396201549e-01 + 1.7385319359414166e+00 1.5601881502277144e+00 -3.9367721702239056e-01 + 2.1731032916075068e+00 1.6667702308323764e+00 -4.0314799041862970e-01 + 2.6029559364464938e+00 1.6655750464581276e+00 -3.8660212723597298e-01 + 2.9898497254651613e+00 1.5645379318208172e+00 -3.2813886513223989e-01 + 3.2963158897138385e+00 1.3853277155014192e+00 -2.1997307957940671e-01 + 3.4840208749184916e+00 1.1572185449401937e+00 -7.1160368225576809e-02 + 3.5272161150826591e+00 9.1861227792962130e-01 9.0947970961436697e-02 + 3.4425972255654362e+00 7.0360636589517433e-01 2.3368760239018949e-01 + 3.2726958943373909e+00 5.3908436214258226e-01 3.4582607406314281e-01 + 3.0776697036376834e+00 4.2034018628638459e-01 4.5963304158742002e-01 + 2.8857259210755082e+00 3.2814146182163656e-01 6.1156870085726300e-01 + 2.7119910914627168e+00 3.3372731177519993e-01 7.7282953126452525e-01 + 2.5852852139526510e+00 4.7019684391266131e-01 8.7417244170360120e-01 + 2.4487432866522467e+00 6.1142060911199658e-01 9.9253650235479207e-01 + 2.1728932165296602e+00 6.6411092639742808e-01 1.2944599926366833e+00 + id 11808 + loc 1.1011131107807159e-01 2.7491888403892517e-01 1084 + blend 0.0000000000000000e+00 + interp 5.8353130153780863e-01:2.8578608235637826e-01:7.6069367821522960e-03:3.1142152666412370e-01:7.3648520812567164e-01:5.3736104408631624e-01:9.9886611535365144e-01:5.8352546622479329e-01:2.5389373616355910e+00:2.7891262813363260e-01:3.1373397677536881e+00 + CVs 20 + 5.1615422400376199e-01 4.4453506317838226e-01 2.9927349399258685e-01 + 9.1893012876766211e-01 8.2119385789426957e-01 5.4848343572838587e-01 + 1.2897757417496574e+00 1.1777116897172557e+00 7.7928511698770109e-01 + 1.6522261553276887e+00 1.5390797098061613e+00 1.0308934616777117e+00 + 1.9799166838936599e+00 1.8989846229215330e+00 1.3324391389208934e+00 + 2.2428982470183021e+00 2.2476472793223556e+00 1.6991750101220662e+00 + 2.4134105524880924e+00 2.5733279894602754e+00 2.1302058283363601e+00 + 2.4583390043862972e+00 2.8589303091123695e+00 2.6177613460561289e+00 + 2.3340229340851901e+00 3.0734684814982831e+00 3.1346861699564714e+00 + 2.0243772785497161e+00 3.1766063198424250e+00 3.6130439641791039e+00 + 1.5698378133029631e+00 3.1355542296054617e+00 3.9964849140141099e+00 + 1.0446933158250999e+00 2.9120889414771778e+00 4.2732624932994936e+00 + 5.7718734061408394e-01 2.5066070977356425e+00 4.4461987181260554e+00 + 2.5159704839201469e-01 2.0191722916006585e+00 4.5273595250405290e+00 + 2.4540238067532583e-02 1.5484308819311761e+00 4.5265704820113370e+00 + -1.7363788023043558e-01 1.1758933053644944e+00 4.4539571437303751e+00 + -3.6305352484393572e-01 9.7409789285114423e-01 4.3514434839769409e+00 + -5.4377966299774361e-01 9.1797358807070428e-01 4.2582088175385984e+00 + -9.0160867139155865e-01 7.9166869774882076e-01 4.0932227418292113e+00 + id 11809 + loc 5.8732483536005020e-02 7.6420187950134277e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9858472138864731e-01:3.3898046224571760e-01:3.7188190069469917e-01:3.9858073554143342e-01:9.9631634132524582e-01:3.3233338531253381e-01:1.6435838884481839e+00:3.6480854914334909e-01:2.0416294953324998e+00:3.6226450066231064e-01:2.7133281545802617e+00:3.6041524895459365e-01:3.3349609950111474e+00:3.1089115774791648e-01:3.9745055844216610e+00 + CVs 20 + 2.0817955357592546e-01 3.7521456898382433e-01 -1.5063762468985731e-01 + 4.2249515441319557e-01 7.5609290079818336e-01 -3.3190577198358490e-01 + 6.3359890982031664e-01 1.1437753886334365e+00 -5.2051543348708207e-01 + 8.3649371702259256e-01 1.5321067888972442e+00 -7.0563730614207065e-01 + 1.0240378051050634e+00 1.9046674164971278e+00 -8.9953325658035133e-01 + 1.1787411400817276e+00 2.2314055628483107e+00 -1.1348482475070878e+00 + 1.2832716050904698e+00 2.4803890686862515e+00 -1.4342341600733348e+00 + 1.3273645393715612e+00 2.6158160112945792e+00 -1.7870325126946458e+00 + 1.3074119736703222e+00 2.6149022572248977e+00 -2.1518832413362636e+00 + 1.2372932166299133e+00 2.4957422251954196e+00 -2.5039020507208316e+00 + 1.1414562651404119e+00 2.2716227945302627e+00 -2.8499579104226789e+00 + 1.0539959970210577e+00 1.9419455430759283e+00 -3.1965326236895106e+00 + 1.0190070818389554e+00 1.5406927883720625e+00 -3.5385127096621098e+00 + 1.0631444073167775e+00 1.1680381429426514e+00 -3.8660370718670616e+00 + 1.1642856821937220e+00 9.3702778417443755e-01 -4.1589155952304049e+00 + 1.2705565721618404e+00 8.8329644062836654e-01 -4.3699645090955466e+00 + 1.3428607347010884e+00 9.3702476716928451e-01 -4.4455848377477380e+00 + 1.4271222094613276e+00 1.0375094020992996e+00 -4.4812052151511956e+00 + 1.6107754320303460e+00 1.3932664439623099e+00 -4.6435603532897787e+00 + id 11810 + loc 7.5766551494598389e-01 5.7492130994796753e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6578083017870486e-01:4.6577617237040309e-01:4.8053502032701090e-01:4.0838947679489246e-01:9.7144390730663555e-01:2.7085621220993933e-01:1.1936420062151274e+00:3.9745397837545143e-01:1.8067684908869750e+00:4.2454437824983343e-01:2.2131344896975960e+00:2.7400642264432690e-01:2.8868023437468038e+00:3.5619374196507625e-01:3.3227401270350723e+00:2.4397741092102190e-01:3.9689219085933374e+00 + CVs 20 + 1.0738794409475695e-01 3.7843094079381007e-01 -2.7717701654011506e-01 + 2.3569935462985789e-01 7.0253558060355803e-01 -5.2018143579084364e-01 + 3.7688043198509225e-01 9.7205334527545117e-01 -7.4040741848380454e-01 + 5.2599163231123758e-01 1.1876353821586274e+00 -9.4232848016876625e-01 + 6.8150520097417189e-01 1.3531325176470601e+00 -1.1223952072368251e+00 + 8.4096815575088002e-01 1.4759637717580150e+00 -1.2796018390813573e+00 + 1.0024220011714362e+00 1.5607395769615948e+00 -1.4247701724940742e+00 + 1.1585109309045483e+00 1.6121111472510155e+00 -1.5614222972374003e+00 + 1.2988380944017706e+00 1.6472687228253238e+00 -1.6745462079954372e+00 + 1.4224656425272955e+00 1.6787548436681679e+00 -1.7606958462525384e+00 + 1.5349039091965564e+00 1.6797837625951826e+00 -1.8404814596927417e+00 + 1.6399759488834329e+00 1.5997916805118033e+00 -1.9309512290406854e+00 + 1.7561967151526461e+00 1.4311906147959672e+00 -2.0288163055438488e+00 + 1.9251962086480596e+00 1.2199570665508659e+00 -2.1248551631807233e+00 + 2.1816726370641684e+00 9.7600957990806436e-01 -2.2325143216028267e+00 + 2.5312475183018455e+00 6.2585763566493424e-01 -2.4043216464485746e+00 + 2.9291071385560392e+00 1.1455677642970075e-01 -2.7111073044078955e+00 + 3.2420074214243448e+00 -4.2298752438719095e-01 -3.1529992326802545e+00 + 3.2004916357483641e+00 -5.3600588799624749e-01 -3.4134491681686900e+00 + id 11811 + loc 9.9842399358749390e-01 9.2594093084335327e-01 410 + blend 0.0000000000000000e+00 + interp 3.6556722567224925e-01:3.6556356999999257e-01:3.9839867985471300e-01:2.9998279505852776e-01:1.2525214960439097e+00:2.5967820226015970e-01:1.9996468851849680e+00:1.4669186264161704e-01:2.9996761196095978e+00:3.5637107363430909e-01:3.9603838886945817e+00 + CVs 20 + 6.6130627981219581e-01 2.0240999201938875e-01 -2.6254598214623881e-01 + 1.1901676226596789e+00 3.0177644143670884e-01 -5.2111974394299254e-01 + 1.7007238976950911e+00 3.6563349327070449e-01 -7.7656563004250700e-01 + 2.1987479191282726e+00 3.9862869599186679e-01 -1.0287898029296263e+00 + 2.6422467912257344e+00 3.8701637574298420e-01 -1.2747608792803720e+00 + 3.0100621305995325e+00 3.3379869061509981e-01 -1.5124564557639131e+00 + 3.3097904165200456e+00 2.5166131021292348e-01 -1.7479857211881171e+00 + 3.5624864547708963e+00 1.4738996939452842e-01 -1.9976278770558256e+00 + 3.7831287176740283e+00 1.8544428915825639e-02 -2.2722952544801678e+00 + 3.9745531074905420e+00 -1.4555994252305315e-01 -2.5714804562016038e+00 + 4.1358356111118288e+00 -3.7911071660628237e-01 -2.8878469528531965e+00 + 4.2570629777449334e+00 -7.2558715667560558e-01 -3.1997105697761832e+00 + 4.3233642794662401e+00 -1.1738205535770012e+00 -3.4994112268679762e+00 + 4.3356143014888060e+00 -1.6652619568295333e+00 -3.8238703263989167e+00 + 4.3111590696153179e+00 -2.1263352594574445e+00 -4.2221443588078627e+00 + 4.2743933507326659e+00 -2.5098746369164919e+00 -4.7262632122914221e+00 + 4.2574579477733812e+00 -2.8176608896975335e+00 -5.3325825984001591e+00 + 4.2909122945314913e+00 -3.0653656024240008e+00 -5.9704570056732642e+00 + 4.3851271928566025e+00 -3.2298866014633898e+00 -6.5136850072331001e+00 + id 11812 + loc 4.7556835412979126e-01 3.2296255230903625e-01 416 + blend 0.0000000000000000e+00 + interp 4.4194334362252879e-01:3.4740403914118267e-01:1.5319025996336444e-01:2.9994175097934384e-01:8.1484514210617143e-01:2.4811014885913268e-01:1.3922106244791874e+00:4.4193892418909259e-01:1.9825386507336589e+00:4.1163642784642723e-01:2.3967850673077873e+00:3.9491907827845119e-01:3.0437177620130003e+00:2.7511729204996671e-01:3.7702626434223747e+00 + CVs 20 + -4.2696041270546936e-02 1.8100650723677775e-01 -6.4294278082282619e-01 + -1.2194869157574240e-01 2.4129423946390016e-01 -1.0924029144984948e+00 + -2.0008922202357021e-01 2.5590052090056281e-01 -1.4899453458835490e+00 + -2.6848981006731970e-01 2.5533984743834548e-01 -1.9074696652573169e+00 + -3.2035380037616801e-01 2.3476220708925666e-01 -2.3445176642683769e+00 + -3.4510043799788509e-01 1.9229841616800303e-01 -2.7994008040596112e+00 + -3.3140541192113193e-01 1.2934147369288818e-01 -3.2679849895092117e+00 + -2.7204450349962084e-01 4.9198737712279339e-02 -3.7424706955871461e+00 + -1.6447808761049720e-01 -4.3103532681771028e-02 -4.2137243472242414e+00 + -1.0638847746833990e-02 -1.4144392031623854e-01 -4.6728887691942607e+00 + 1.7147647892043250e-01 -2.4296694091319049e-01 -5.1110511092484101e+00 + 3.3258080675482860e-01 -3.5496448893706556e-01 -5.5227677442150025e+00 + 4.1833715640661345e-01 -4.8692382128100142e-01 -5.9058423603431818e+00 + 4.2197961769766990e-01 -6.3396042815030329e-01 -6.2614443665069093e+00 + 3.7898767213357321e-01 -7.8667577386296017e-01 -6.5972474351531059e+00 + 3.0790226659494913e-01 -9.3976694951672179e-01 -6.9134549311671298e+00 + 2.0597063801695670e-01 -1.0831338825951584e+00 -7.1994167800328785e+00 + 7.5528583711520270e-02 -1.2036683274884239e+00 -7.4486534109853579e+00 + 3.5705618702102537e-02 -1.2888080642721604e+00 -7.7287622968398058e+00 + id 11813 + loc 3.7606012821197510e-01 8.8987630605697632e-01 1075 + blend 0.0000000000000000e+00 + interp 5.9122182727111916e-01:3.9289740085778191e-01:1.2431742092711173e-01:3.5008349043595155e-01:1.0014309152779597e+00:5.1969785269645519e-01:1.3278265745024203e+00:5.9121591505284643e-01:2.0051117143238688e+00:4.5007365968975399e-01:2.2319049396776904e+00:3.4559434177115866e-01:2.5290763051722909e+00:3.4762239451152449e-01:3.2604416403581644e+00 + CVs 20 + 1.4854355793655380e-01 2.2070565040477225e-01 -2.2449174105930586e-01 + 2.8358416058907782e-01 4.5457126613871796e-01 -4.7483031944742576e-01 + 4.1030690425580940e-01 6.9118798719229746e-01 -7.4324094807733543e-01 + 5.2504797767721045e-01 9.2793244810214326e-01 -1.0187347534800841e+00 + 6.2114560688254317e-01 1.1617779720883328e+00 -1.2971125315999159e+00 + 7.0185659811461276e-01 1.3804850026153774e+00 -1.5925428118485228e+00 + 7.7796246472804764e-01 1.5758772252548230e+00 -1.9268222254083323e+00 + 8.6078013003605047e-01 1.7462175667861317e+00 -2.3092811099228343e+00 + 9.5538852772216032e-01 1.8775670418177246e+00 -2.7320310135504249e+00 + 1.0523028191947574e+00 1.9360030381985420e+00 -3.1757388773208888e+00 + 1.1268615558000792e+00 1.8806538379643301e+00 -3.6120832795803426e+00 + 1.1467776090953585e+00 1.6913174229036299e+00 -3.9995691646048370e+00 + 1.0851327057598861e+00 1.3905852486557124e+00 -4.2919616120883894e+00 + 9.4637684849471482e-01 1.0390568308249590e+00 -4.4704327428523207e+00 + 7.5789041066097818e-01 6.9481121040010319e-01 -4.5596253588882769e+00 + 5.1772871103740603e-01 4.0497939659411347e-01 -4.5787787538255529e+00 + 2.0662660650428455e-01 2.4173664776818321e-01 -4.5224134189379068e+00 + -1.1696594690509818e-01 2.2521536082597723e-01 -4.4213786814415057e+00 + -2.9210458686851482e-01 -4.4036860453312565e-03 -4.5399977240943254e+00 + id 11814 + loc 4.3569347262382507e-01 3.4869366884231567e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8273353604607760e-01:4.3682279221844583e-01:6.5228144337853955e-02:3.8544498873500410e-01:7.6844400597345386e-01:3.4216401004421920e-01:1.1592658599823416e+00:3.9069903924344418e-01:2.0002942806801873e+00:2.8905921925803874e-01:2.6211876404171663e+00:4.8272870871071716e-01:3.0679015281868915e+00:4.0292891446161239e-01:3.7066194578510565e+00 + CVs 20 + -1.0819025561430816e-01 3.1050944592185648e-01 -1.9710371557061881e-01 + -2.5223728078394869e-01 5.9445889786270700e-01 -3.7060727069869315e-01 + -4.1702671113727957e-01 8.4956102552337653e-01 -5.3120593643424263e-01 + -5.8845756959435946e-01 1.0724836846325179e+00 -6.7813493056224150e-01 + -7.6670628305429311e-01 1.2716147500094956e+00 -8.0377329211160220e-01 + -9.6173328946497150e-01 1.4626047722772118e+00 -9.0511362216209623e-01 + -1.1836448581723782e+00 1.6555691073674579e+00 -9.9060262990374837e-01 + -1.4347420695414268e+00 1.8535977944764896e+00 -1.0757564894050518e+00 + -1.7164881686587317e+00 2.0620236596635246e+00 -1.1737882745364780e+00 + -2.0316657147283941e+00 2.2846584906548437e+00 -1.3023800016227594e+00 + -2.3663233926932614e+00 2.5163414994761721e+00 -1.4898207471264504e+00 + -2.6914552381339019e+00 2.7631134845656407e+00 -1.7759814406515602e+00 + -3.0226706990170609e+00 2.9984321867771841e+00 -2.2114756596114575e+00 + -3.4008686057976032e+00 3.0716555913351309e+00 -2.7583885216369666e+00 + -3.7923011730322114e+00 2.8941468593777566e+00 -3.2739754814659419e+00 + -4.1502691431311520e+00 2.5011937862572955e+00 -3.7888326286403555e+00 + -4.4589422650008768e+00 1.6924797869805457e+00 -4.4540763767212779e+00 + -4.6108008457734462e+00 3.2803858025623756e-01 -4.7048674550811134e+00 + -4.6448915050045620e+00 1.5370766628145560e-01 -4.4943105177383762e+00 + id 11815 + loc 4.2050588130950928e-01 1.0389082133769989e-01 1048 + blend 0.0000000000000000e+00 + interp 5.5398489343795110e-01:2.7923533483247359e-01:4.5585048627054037e-02:3.2752532943976498e-01:4.3853846703381949e-01:5.0140946963626820e-01:9.8134551888144572e-01:5.5397935358901673e-01:1.2915434132104051e+00:3.8390785420448659e-01:2.0895802711163758e+00:2.8073029056289039e-01:2.9843685550434236e+00:2.8744967073486555e-01:3.6266805944146601e+00 + CVs 20 + -2.3496746437906113e-01 4.7445102025937680e-01 -1.4456181739654994e-01 + -4.2991958157625348e-01 9.0773077565953297e-01 -3.1539976651592405e-01 + -5.6266653004572098e-01 1.2763173241049082e+00 -5.2935764875207125e-01 + -6.5074304853734388e-01 1.5712214526336623e+00 -7.9157497356497508e-01 + -7.3049200972448070e-01 1.7848473646132121e+00 -1.0983315758447005e+00 + -8.3290654176961043e-01 1.8966373419059979e+00 -1.4145828666573541e+00 + -9.6297087391235670e-01 1.9042770018826791e+00 -1.6946360731275005e+00 + -9.9736882005423011e-01 1.8665919662814825e+00 -1.9215671229411293e+00 + -1.0825180068747713e+00 1.7075640981981444e+00 -2.0658519168690068e+00 + -1.2281222814650190e+00 1.4382423195673493e+00 -2.1395222918512005e+00 + -1.3826895178424223e+00 1.0499495957637714e+00 -2.2210409451421933e+00 + -1.5654456702960964e+00 5.6002474025558113e-01 -2.3839052044502980e+00 + -1.8931833231054742e+00 3.4980255673296476e-02 -2.7081958472227963e+00 + -2.4524102549706175e+00 -2.7406261127102066e-01 -3.0783630349030005e+00 + -2.9986937833971674e+00 -2.8685636444167140e-01 -3.3070376639245000e+00 + -3.4669463399791565e+00 -1.5907928127989290e-01 -3.4631374952268401e+00 + -3.8669012860064660e+00 3.5789461970829328e-03 -3.6218032184625772e+00 + -4.2429504267144580e+00 1.0431883618102716e-01 -3.8378352949315260e+00 + -4.8245060210555719e+00 5.1866765169389872e-02 -4.1815174400315458e+00 + id 11816 + loc 5.3816783428192139e-01 9.7712808847427368e-01 1054 + blend 0.0000000000000000e+00 + interp 3.9698154362903387e-01:3.9697757381359761e-01:5.3332157931221813e-03:2.7046792950781368e-01:7.3771024377331829e-01:2.6014287589261453e-01:1.9307357708089685e+00:3.7564127895901950e-01:2.9410299509807221e+00:2.6128364690700967e-01:3.1886462140956113e+00:3.7943866795206049e-01:3.8042169290782648e+00 + CVs 20 + 5.9217401066168684e-01 4.4972235230993185e-01 -2.3622776567290665e-01 + 1.1407397989064223e+00 9.3593400048136055e-01 -3.5773871920895772e-01 + 1.6272504923138404e+00 1.4676779238911728e+00 -3.6099303009222905e-01 + 2.0606255613712126e+00 1.9984763912996681e+00 -2.3106236058487262e-01 + 2.4474776825986919e+00 2.4478618761091293e+00 3.1379422505536381e-02 + 2.7832141782969839e+00 2.7444241689709012e+00 3.8025327333123871e-01 + 3.0565736449840584e+00 2.8613857088562531e+00 7.2950145435892688e-01 + 3.3245927484056779e+00 2.7956682677245137e+00 1.1496088101494366e+00 + 3.4463391527565213e+00 2.5603843639947264e+00 1.5798007670234988e+00 + 3.3961574620112689e+00 2.2907173666377734e+00 2.0101129694177233e+00 + 3.2092715537527843e+00 1.9592878991500795e+00 2.4886328462336782e+00 + 2.8646753859460445e+00 1.5547326005881072e+00 2.9427048995518592e+00 + 2.3566610455774577e+00 1.1182165774748833e+00 3.2797040569537437e+00 + 1.7124322550474771e+00 7.4644877411684196e-01 3.4179310630394402e+00 + 9.8338787279417972e-01 5.5472026504832972e-01 3.3300356940113098e+00 + 2.3780546840070199e-01 5.7793690942350839e-01 3.0431454325818463e+00 + -4.4738994178587699e-01 7.5034669949449806e-01 2.6177256344159345e+00 + -9.4377973682950900e-01 1.0500955718184879e+00 2.1200973728157275e+00 + -9.3566333695105308e-01 1.5477897538564327e+00 1.6244524157428106e+00 + id 11817 + loc 9.4919604063034058e-01 4.1154092550277710e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5344671521902202e-01:4.4395155411776543e-01:5.0070456727485935e-01:4.4292091709973536e-01:1.0005640435785028e+00:2.9424969306778520e-01:1.4023363140707297e+00:3.7457825869901890e-01:1.9211991495559562e+00:2.6790709503544446e-01:2.2938542926760888e+00:4.5344218075186987e-01:2.8757366540894562e+00:3.1113146620792032e-01:3.6738011260890433e+00 + CVs 20 + 2.8456619522958426e-01 3.1791314740662868e-01 -9.2179604687156316e-02 + 5.4824144691163479e-01 6.4032851367603683e-01 -2.1476819884152298e-01 + 8.0549515035222063e-01 9.7137137785739236e-01 -3.6534430201787155e-01 + 1.0875893722707910e+00 1.3106114686432699e+00 -5.1573085559839016e-01 + 1.4249529470501345e+00 1.6472637193069266e+00 -6.2387011113321389e-01 + 1.8287414105877426e+00 1.9599269810423143e+00 -6.5422621896631783e-01 + 2.2876107997283577e+00 2.2200417800985650e+00 -5.7637751490308597e-01 + 2.7655293244547963e+00 2.3897346291037178e+00 -3.5732763457730488e-01 + 3.1931488381065942e+00 2.4258109082101291e+00 1.1953058928762195e-02 + 3.5028837467387328e+00 2.3186735288789384e+00 4.7428405374758875e-01 + 3.6868932457472368e+00 2.0931881494321454e+00 9.4271756996091549e-01 + 3.7810853193644571e+00 1.7611801939209735e+00 1.3344401473937766e+00 + 3.8253044027708576e+00 1.3420099279245616e+00 1.5905604218991187e+00 + 3.8181928456425855e+00 8.9365802073482781e-01 1.7705623940281920e+00 + 3.7224402778145356e+00 4.7504384261839278e-01 2.0117675800134345e+00 + 3.5318921885391847e+00 1.8492483362936907e-01 2.3672262382588904e+00 + 3.3106215316607956e+00 1.3631094127553389e-01 2.7865166160191017e+00 + 3.1256407529169161e+00 3.0706584691180661e-01 3.1485921863374591e+00 + 2.9390295034544631e+00 2.6822029038316120e-01 3.4681408111582370e+00 + id 11818 + loc 4.9808913469314575e-01 1.9573166966438293e-01 1090 + blend 0.0000000000000000e+00 + interp 5.2206904288274691e-01:3.7402849143482370e-01:4.3747136177466683e-01:4.8610861372348790e-01:9.9476351275981123e-01:4.2433364924448064e-01:1.4403316352113114e+00:4.8614644601918000e-01:1.9895283764521228e+00:3.8091362469224882e-01:2.1987028275512146e+00:3.0945627926376418e-01:3.1223038990643639e+00:5.2206382219231806e-01:3.9902690058211832e+00 + CVs 20 + 3.1766604545838711e-01 4.6977146925764129e-01 -7.7388660429693640e-02 + 5.3495074970510414e-01 8.7130615569351433e-01 -9.7535784984530194e-02 + 7.0150948471110963e-01 1.2401057898099332e+00 -9.1348675964180948e-02 + 8.3741378423393809e-01 1.6015367905417404e+00 -6.3046495765457178e-02 + 9.3446126374968452e-01 1.9516922290283587e+00 -1.1637802455373158e-03 + 9.8422408840440934e-01 2.2864477853749037e+00 1.0382944391874682e-01 + 9.7419642588616573e-01 2.5992534016692055e+00 2.6133031656403061e-01 + 8.8651543395350452e-01 2.8709928194645173e+00 4.7419304603545054e-01 + 7.1227740342964818e-01 3.0679678433504138e+00 7.2264752438831770e-01 + 4.7166098920878008e-01 3.1667570756311942e+00 9.6573047913171428e-01 + 1.9763413482927272e-01 3.1744187124020078e+00 1.1783750189289557e+00 + -9.0901819056250832e-02 3.1060343222090641e+00 1.3642316264596999e+00 + -3.8606438174583901e-01 2.9658759920653455e+00 1.5354996385653759e+00 + -6.8228780201343153e-01 2.7456057097413140e+00 1.7022397543152299e+00 + -9.6863022483911299e-01 2.4219621367110427e+00 1.8783830797351848e+00 + -1.1930267757322905e+00 2.0022133551936623e+00 2.0571366907202520e+00 + -1.3132104900476551e+00 1.5391845345447139e+00 2.2024713683720289e+00 + -1.3302604557588622e+00 1.0599706390224113e+00 2.3062940398341736e+00 + -1.1935005832090009e+00 9.4415713599333362e-01 2.4520957468147189e+00 + id 11819 + loc 4.8248606920242310e-01 2.5887882709503174e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7752031197351597e-01:4.2992431502994150e-01:7.7165449598969316e-02:4.1154304077725845e-01:8.1801473428558480e-01:4.7751553677039626e-01:1.1285131459700974e+00:4.2782337947297588e-01:1.9520739056806973e+00:3.8018170381331834e-01:2.3883126932923382e+00:3.5517474940236282e-01:3.0104480620604166e+00:3.8403897248546109e-01:3.7815950473142532e+00 + CVs 20 + -1.6333909296832899e-01 3.4525248855719742e-01 -4.7713120640285170e-02 + -3.5509730263003214e-01 7.0231611988258302e-01 -1.0334126976769212e-01 + -5.6433854249602278e-01 1.0684007523360284e+00 -1.3108515189082320e-01 + -7.8992189936215285e-01 1.4338388768912698e+00 -1.1848587044577463e-01 + -1.0380880711418188e+00 1.7854610378213402e+00 -6.8194776069666729e-02 + -1.3190314519206172e+00 2.1065624795594577e+00 1.0226425116042659e-02 + -1.6444149259127094e+00 2.3784159917041778e+00 1.0024794737058595e-01 + -2.0228800112331125e+00 2.5819426752142070e+00 1.8066707744607063e-01 + -2.4555431266643652e+00 2.6918539797246530e+00 2.2806595440549671e-01 + -2.9190277873195529e+00 2.6830873941418778e+00 2.2528247647208749e-01 + -3.3704166094445847e+00 2.5656938513271261e+00 1.7125123251599317e-01 + -3.7850090237242551e+00 2.3865150257834018e+00 7.7001007804374577e-02 + -4.1536834262217903e+00 2.1960663243849416e+00 -3.1139904570447241e-02 + -4.4612335644287979e+00 2.0324521007265863e+00 -1.1076678218961566e-01 + -4.6904286218914928e+00 1.9221168117001008e+00 -1.3036977836690178e-01 + -4.8195038445947471e+00 1.8881087792711231e+00 -9.3381317528853702e-02 + -4.8383498268415721e+00 1.9242983366374016e+00 -4.4019025019682023e-02 + -4.8629719625744530e+00 1.9440815627437731e+00 -1.7104849718402537e-02 + -5.2116214342086469e+00 1.8172335963149515e+00 8.1026363647773270e-02 + id 11820 + loc 9.0474814176559448e-01 4.1154092550277710e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0730742896330983e-01:2.8639976743183065e-01:4.2668971698505742e-01:3.8262786020559814e-01:1.0948930600336664e+00:3.4837475268724793e-01:1.9070694790789327e+00:5.0730235588902017e-01:2.3380498965120098e+00:4.1433131232539355e-01:2.8977689299066380e+00:2.9351979473204476e-01:3.6570279831789256e+00 + CVs 20 + 1.2136861585515923e-01 3.1765817487498937e-01 -2.4124943450260700e-02 + 2.2189473452073460e-01 6.0920979087138305e-01 -4.4571944304636152e-02 + 3.2270040822270196e-01 8.9160741381738906e-01 -7.0805724530916547e-02 + 4.4025461126483306e-01 1.1734221673197638e+00 -1.0651060315940947e-01 + 5.9143671641724826e-01 1.4593979715490037e+00 -1.4131128013029026e-01 + 7.9332479625909846e-01 1.7458156603630326e+00 -1.5958169608269646e-01 + 1.0564968940521569e+00 2.0186470980576119e+00 -1.4341274563338169e-01 + 1.3807356154570234e+00 2.2571515948889043e+00 -7.6049989391340334e-02 + 1.7519459105840958e+00 2.4407426910923053e+00 5.9580510550040655e-02 + 2.1419691290735656e+00 2.5507478199325408e+00 2.7778027769751212e-01 + 2.5247372585613377e+00 2.5753308228670795e+00 5.7462743099932945e-01 + 2.8924646769842868e+00 2.5088930817220625e+00 9.2795195365592142e-01 + 3.2479174469677461e+00 2.3434080851167902e+00 1.3074534481499416e+00 + 3.5888332006130446e+00 2.0678624591438277e+00 1.6784589200130939e+00 + 3.9112415563826857e+00 1.6802311076380547e+00 2.0010014829709633e+00 + 4.2096905682820367e+00 1.2125703575187492e+00 2.2077314465464730e+00 + 4.4722622054364116e+00 7.4512177356569143e-01 2.2571445106162700e+00 + 4.7336583542295969e+00 3.4490447784553169e-01 2.1731183324480341e+00 + 5.0914144990527319e+00 8.5978529693267580e-02 1.9506537889038551e+00 + id 11821 + loc 9.9347311258316040e-01 2.7886429429054260e-01 1077 + blend 0.0000000000000000e+00 + interp 4.3883102865607199e-01:2.8218042797717602e-01:9.9039819794538575e-03:2.1449400814440520e-01:8.9179574313362764e-01:2.0232787691713139e-01:1.9907664616630742e+00:2.7637744045354123e-01:2.9350635582447895e+00:4.3882664034578545e-01:3.0889441282484671e+00 + CVs 20 + -1.1329411033904421e-01 2.2372117334518488e-01 1.3185899642033999e-01 + -1.9980159734976383e-01 4.7604096587595357e-01 2.8884894372765058e-01 + -2.7225257599614838e-01 7.3504960668041686e-01 4.4234412236553422e-01 + -3.3881235990199648e-01 9.8544303851114146e-01 5.8067548685547743e-01 + -4.0082188442145011e-01 1.2198483363279280e+00 7.1065260704070998e-01 + -4.5663495438610091e-01 1.4310581767754558e+00 8.3588415061745824e-01 + -4.9484897440281705e-01 1.6131150231765350e+00 9.5199188382260536e-01 + -5.0006923769974643e-01 1.7736662114520190e+00 1.0573106809694317e+00 + -5.0873726936092856e-01 1.9255561461089847e+00 1.1737373023049158e+00 + -6.0767797764674614e-01 2.0274168682368883e+00 1.3069684070097203e+00 + -8.0477607090341829e-01 2.0399036102141745e+00 1.4185561900480816e+00 + -1.0442307332996044e+00 1.9803126271116676e+00 1.4834518893230040e+00 + -1.2710398210217642e+00 1.8551458752481580e+00 1.5122465495682706e+00 + -1.4392236819273614e+00 1.6034240426577138e+00 1.5287906161716551e+00 + -1.5420981535118832e+00 1.1811265216047389e+00 1.5177538491740847e+00 + -1.6744271311500580e+00 6.2209481687771817e-01 1.4214532484399143e+00 + -1.9741570745997890e+00 3.0496198438871525e-02 1.2083492017184956e+00 + -2.4792981987001137e+00 -4.4189714428350002e-01 9.2809169017020232e-01 + -2.9457285920070095e+00 -7.8841374987172941e-01 6.8530286997520984e-01 + id 11822 + loc 8.9715236425399780e-01 1.6528950631618500e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6033038066964124e-01:3.6032677736583457e-01:5.2193306821030849e-01:3.1161624416676964e-01:1.0008849298091149e+00:2.0208327660250766e-01:1.5545970995682765e+00:2.5265647035976480e-01:2.7007427654334188e+00:2.9750022203905158e-01:3.2570536858842272e+00:3.1102998986814773e-01:3.9996622099244670e+00 + CVs 20 + 8.7265453696469444e-02 5.4553262919345713e-01 5.6277437019168275e-01 + 1.1013669723971647e-01 1.0880907652124647e+00 1.0585310945681887e+00 + 3.1591931162160525e-02 1.6295207160712761e+00 1.4857370860998866e+00 + -1.8177754518362355e-01 2.1698396710399153e+00 1.8502954398041522e+00 + -5.5044636786660894e-01 2.6803785485257334e+00 2.1405820771127999e+00 + -1.0666039633841193e+00 3.1109363824618264e+00 2.3517784649093998e+00 + -1.7007080073020540e+00 3.3987912146395334e+00 2.4778004563669680e+00 + -2.3959873378943870e+00 3.4954133722488931e+00 2.5214966045322607e+00 + -3.1010461307041219e+00 3.3625782026628892e+00 2.4998108912099477e+00 + -3.7595291980068355e+00 2.9774929410853117e+00 2.4095073059552288e+00 + -4.2746605945708858e+00 2.3797538014768942e+00 2.2087332083207922e+00 + -4.5492496962586486e+00 1.6901877947742279e+00 1.8678442404083320e+00 + -4.5713662595516009e+00 1.0492057964054355e+00 1.4193544563048084e+00 + -4.4035780690806847e+00 5.6412137971823928e-01 9.2531007072748350e-01 + -4.1374580361986313e+00 2.9341231014036045e-01 4.3053050898656553e-01 + -3.8657806878214305e+00 2.2122248895300289e-01 -4.1256666958202126e-02 + -3.6688859883296296e+00 2.0437196566041982e-01 -4.9808918277646280e-01 + -3.5109635107010542e+00 -6.9021864792380150e-03 -1.1267153481422145e+00 + -3.3822411286615641e+00 3.7064651813461091e-01 -1.2279005305466137e+00 + id 11823 + loc 8.0132418870925903e-01 9.2133820056915283e-01 416 + blend 0.0000000000000000e+00 + interp 6.6942243859944934e+00:2.9975344468498749e-01:5.1758303341194933e-01:5.9005148059166492e+00:9.2284620864871425e-01:6.6942143859944938e+00:9.5545889536100659e-01:6.5539710150153863e-01:2.8528440036420362e+00:1.0519252411812130e+00:2.9344741953844489e+00:4.2021272051374914e-01:2.9743195101238036e+00:5.2262442207783655e-01:3.8794332600887853e+00 + CVs 20 + 8.6725577776905016e-01 2.1765665366076181e-01 -1.3640566004181998e-01 + 1.4187465907153378e+00 2.5929039579388924e-01 -2.7395660754840490e-01 + 1.8992329972939641e+00 2.3232931367606113e-01 -3.9937684708839716e-01 + 2.4000337625681971e+00 1.7317879376494366e-01 -5.0424170923552580e-01 + 2.9036953037937572e+00 7.3600358683474032e-02 -5.7750729324589678e-01 + 3.3914487085480198e+00 -7.0998295865704497e-02 -6.0779510299046735e-01 + 3.8444509592895959e+00 -2.5906663136984653e-01 -5.8706981349096932e-01 + 4.2462752329624651e+00 -4.8311955552175878e-01 -5.1443193263879827e-01 + 4.5866555262385926e+00 -7.3138465991643264e-01 -3.9540615458419009e-01 + 4.8621172638791661e+00 -9.8942557287918664e-01 -2.3847863824866383e-01 + 5.0735411036029987e+00 -1.2406131661999440e+00 -5.1509504014293384e-02 + 5.2322846312032105e+00 -1.4740395884361730e+00 1.6124389229373715e-01 + 5.3682055353013887e+00 -1.7026885533171088e+00 3.9312565902612551e-01 + 5.5100634613298940e+00 -1.9559333767978719e+00 6.2415035993040013e-01 + 5.6663777541382228e+00 -2.2465516595568458e+00 8.3515345468443702e-01 + 5.8365500760321378e+00 -2.5758646467298152e+00 1.0157586978350448e+00 + 6.0149412761707115e+00 -2.9477616960914315e+00 1.1507774263413699e+00 + 6.1873765195486401e+00 -3.3582036487939506e+00 1.2188885927274633e+00 + 6.3231875995348696e+00 -3.7542222294683816e+00 1.2124106345728145e+00 + id 11824 + loc 8.2203459739685059e-01 4.5615318417549133e-01 410 + blend 0.0000000000000000e+00 + interp 3.6604229282659023e-01:2.6267468426037915e-01:8.9640261634605034e-01:3.1430643333263614e-01:1.9801934250024031e+00:3.6603863240366197e-01:2.4410154559144988e+00:2.7076987405761810e-01:3.0174557389029650e+00:2.7831277915758756e-01:3.9859597591595373e+00 + CVs 20 + -4.2453602448680566e-01 2.7230858565006566e-01 1.6228572261851187e-01 + -7.7435294484237760e-01 4.9290183139986343e-01 3.2872555900033523e-01 + -1.1110850553636284e+00 6.9362718348188368e-01 4.9804914541799450e-01 + -1.4488836834894701e+00 8.7189245704858342e-01 6.7264618004503129e-01 + -1.7703562923725085e+00 1.0073269817306816e+00 8.5448283144262327e-01 + -2.0627202748792492e+00 1.0887643845621329e+00 1.0440799022058036e+00 + -2.3232191036350520e+00 1.1158940598654514e+00 1.2485749763161667e+00 + -2.5531827000575960e+00 1.0900415183131502e+00 1.4818249652915643e+00 + -2.7572576199535259e+00 1.0103259223120356e+00 1.7440175163667520e+00 + -2.9442837700964306e+00 8.7701735509256529e-01 2.0131080636369578e+00 + -3.1231684502665518e+00 6.6799216621385682e-01 2.2501787027263096e+00 + -3.2988350046343768e+00 3.2226312065606266e-01 2.4007056792910086e+00 + -3.4768063225634660e+00 -1.9927589603085072e-01 2.4549779686918449e+00 + -3.6718571323803149e+00 -8.8557501889050427e-01 2.4937644796780347e+00 + -3.8982848796599816e+00 -1.6784314359890136e+00 2.6270934375294774e+00 + -4.1555003809011577e+00 -2.4680733688837639e+00 2.9045591925701073e+00 + -4.4346976043832473e+00 -3.1587560194554154e+00 3.2759275817193658e+00 + -4.7371716819328986e+00 -3.7311088078135390e+00 3.6671633615901205e+00 + -5.0493149264948922e+00 -4.1826659929727965e+00 4.0226072653476654e+00 + id 11825 + loc 8.3889722824096680e-01 7.3244673013687134e-01 1053 + blend 0.0000000000000000e+00 + interp 4.0110810810478476e-01:4.0110409702370370e-01:1.0849378601829474e-01:3.5786996069132410e-01:7.8765939691294162e-01:3.7934069723277508e-01:1.3450250104287418e+00:3.4641438875158576e-01:2.1075187168387117e+00:3.1634586809264886e-01:2.9704039737962429e+00:3.4366103610289628e-01:3.7393970467510749e+00 + CVs 20 + -3.9247389379249709e-03 3.8596485030665256e-01 2.5010870842500910e-01 + -7.7164761366276313e-02 7.5324434121401929e-01 5.0713449439995550e-01 + -1.9328880242378976e-01 1.1168842601912703e+00 7.7287319755165429e-01 + -3.5055271665100096e-01 1.4774769316871685e+00 1.0425112793286826e+00 + -5.5810801357622075e-01 1.8189529650026346e+00 1.3068347035577859e+00 + -8.1880042377281115e-01 2.1100804378403790e+00 1.5604741343122288e+00 + -1.1406591527323402e+00 2.2915579669396333e+00 1.7942435439615476e+00 + -1.5199103595008765e+00 2.2670078503885556e+00 1.9700515611845661e+00 + -1.8647700689506030e+00 1.9919265750290154e+00 2.0262983574182831e+00 + -2.0856956318439690e+00 1.5768253964223820e+00 1.9687180770471695e+00 + -2.1968356405576923e+00 1.1006408974244373e+00 1.8402238673551934e+00 + -2.1866123939314366e+00 5.7303630284400564e-01 1.6514917883698650e+00 + -2.0226637233856160e+00 3.8491661315754988e-02 1.3821721623091743e+00 + -1.7762537134026299e+00 -4.2938030650959769e-01 9.7481143690348926e-01 + -1.5836506019654553e+00 -7.6759848297137601e-01 3.5364299008597377e-01 + -1.5154449273406851e+00 -8.4071480584382430e-01 -4.7898685230986882e-01 + -1.5837398818923458e+00 -4.9629024769703745e-01 -1.3524833216338743e+00 + -1.7604981003751772e+00 1.4967173875236162e-01 -1.9983943116893745e+00 + -1.8685663521296842e+00 3.2862101675429600e-01 -2.4765669409643225e+00 + id 11826 + loc 2.3734554648399353e-01 1.5455850958824158e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6293806222163697e-01:3.8977281109778089e-01:4.0059738864391070e-02:3.0773529663570814e-01:7.7554409106810507e-01:4.4972525434350080e-01:1.1355365768913319e+00:3.6985793521506533e-01:1.8023956223025235e+00:4.6293343284101479e-01:2.1426234956963706e+00:4.5047933550918401e-01:2.7362647772998989e+00:3.4000434509385069e-01:3.0018260242675243e+00:2.8165590434543414e-01:3.5308277382841640e+00 + CVs 20 + -1.6861861070543493e-01 3.3820593947070876e-01 -6.3104028470488960e-02 + -3.4438881407705602e-01 7.0646136085219713e-01 -7.8638693301349205e-02 + -5.2576874337259971e-01 1.0913630330426569e+00 -6.3194074173958226e-02 + -7.3570090047849468e-01 1.4832957839696526e+00 -3.8945437509805170e-02 + -1.0027585817714280e+00 1.8706225516981432e+00 -3.0573078231879602e-02 + -1.3403212409532665e+00 2.2320083604806378e+00 -6.4905498797413586e-02 + -1.7430098971490799e+00 2.5337338268855101e+00 -1.8078755494824605e-01 + -2.1752248869267974e+00 2.7182530608246775e+00 -4.4149368058219540e-01 + -2.5460484562053303e+00 2.7114103683124702e+00 -8.7082706214146244e-01 + -2.8001174433321148e+00 2.5228653658845555e+00 -1.3484372314061690e+00 + -2.9917039393773637e+00 2.2004909631376908e+00 -1.7716262649518055e+00 + -3.1534929755645136e+00 1.7486819796049984e+00 -2.0674510654856992e+00 + -3.2833347290124784e+00 1.2346046798841381e+00 -2.1741064065734843e+00 + -3.3573600148835006e+00 7.5589525984749995e-01 -2.1913567978337753e+00 + -3.3537768492729674e+00 3.1964543709881754e-01 -2.2761060349104025e+00 + -3.2893652647643234e+00 -4.7781017042340057e-02 -2.4781309193940184e+00 + -3.2159794483649091e+00 -2.9267123322287869e-01 -2.7547361831264245e+00 + -3.1633099153969586e+00 -4.4230949510643058e-01 -2.9991350996427557e+00 + -3.1421915525917057e+00 -5.5016752339647645e-01 -3.0886519518069990e+00 + id 11827 + loc 2.4628339707851410e-01 5.5571579933166504e-01 1054 + blend 0.0000000000000000e+00 + interp 5.2293322644749141e-01:4.7368211261839493e-01:2.6160865830035651e-01:5.2292799711522697e-01:8.7363172740306327e-01:3.5576563956657875e-01:1.5022727673269083e+00:4.7342969007106911e-01:1.9998491709193975e+00:3.8900583054648374e-01:2.2784450370246523e+00:2.9647744525416192e-01:2.9533483908129430e+00:3.1516023297402967e-01:3.4884045964218373e+00 + CVs 20 + 2.2407481033176224e-01 3.7847603799775126e-01 4.1926005312378195e-02 + 4.2973649453382662e-01 7.4378100265854108e-01 1.0969841096397059e-01 + 5.9816708277941710e-01 1.1170186684012262e+00 2.1839803963706778e-01 + 7.5715045978266393e-01 1.4963789960649210e+00 3.7132867281343918e-01 + 9.7923860038898725e-01 1.8366009726525441e+00 5.4761076564112254e-01 + 1.3083109052698005e+00 2.0755271369540829e+00 7.0790955387252530e-01 + 1.7176787917252243e+00 2.1680249148125350e+00 8.1390159974049114e-01 + 2.1512710356042426e+00 2.0988112819896103e+00 8.5032634746346047e-01 + 2.5631153067354076e+00 1.8765482664935971e+00 8.4139757364662304e-01 + 2.9303903010713364e+00 1.5262940798710978e+00 8.4360555323347175e-01 + 3.2630799100345000e+00 1.1140824795296123e+00 9.3055034237870149e-01 + 3.5905556097777493e+00 7.6684560189010131e-01 1.1188209315515250e+00 + 3.9184545871484326e+00 6.1091594412448691e-01 1.2822063248344460e+00 + 4.1808811680016857e+00 6.4003257218813103e-01 1.3046126748054552e+00 + 4.4251586458034637e+00 7.4977104957215701e-01 1.2497764030380698e+00 + 4.7817652979568575e+00 9.0238948346363157e-01 1.1548481179325427e+00 + 5.3648750331686017e+00 9.9994642686159885e-01 1.0529970458088351e+00 + 6.0958447866516705e+00 8.6510255656624246e-01 1.0693882617592243e+00 + 6.5059093021490844e+00 8.0453481537465299e-01 1.1307125399647682e+00 + id 11828 + loc 7.8195232152938843e-01 4.9738806486129761e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3422307788785069e-01:2.8535175425248627e-01:2.4536202839914112e-01:2.9528735554870417e-01:1.0635613791687639e+00:2.7982954118019898e-01:2.2394327178863800e+00:4.3421873565707186e-01:2.8254778781021512e+00:3.1155590026222391e-01:3.5690239901799785e+00 + CVs 20 + 2.4194379315466116e-01 3.4292594687129307e-01 -1.3806224419728030e-01 + 4.7125110772078682e-01 6.5602809737207324e-01 -2.4427633036667135e-01 + 6.9044814949498612e-01 9.4428691018173061e-01 -3.3845857310483496e-01 + 9.0011275612923836e-01 1.1974274034668928e+00 -4.2249618619383245e-01 + 1.1011084365712251e+00 1.4042180736837819e+00 -4.9174175251058466e-01 + 1.2933141669345192e+00 1.5646220583153707e+00 -5.5294433665797227e-01 + 1.4769297369549153e+00 1.6880291120803350e+00 -6.2553969362881978e-01 + 1.6621588894964121e+00 1.7968375504672087e+00 -7.3439935892298869e-01 + 1.8838810617881552e+00 1.9188120592866389e+00 -8.6718187800596291e-01 + 2.1623390386315697e+00 2.0440708745755232e+00 -9.4487590118476561e-01 + 2.4509670642943293e+00 2.1546320935604450e+00 -9.1640758506913989e-01 + 2.6903030452262575e+00 2.2836951739104974e+00 -7.8965195022024459e-01 + 2.8786572250260338e+00 2.4150626479302990e+00 -5.7607112894410828e-01 + 3.0877761069550731e+00 2.3717094233934168e+00 -3.5626214568052128e-01 + 3.3503400937067953e+00 2.0210399671028032e+00 -2.3983061866570821e-01 + 3.5773127879217022e+00 1.3826857513613118e+00 -1.6259314214265064e-01 + 3.6526237992527824e+00 5.8088226458568237e-01 3.9464681947127378e-02 + 3.5757565513541634e+00 -1.3140076106699272e-01 4.7038872272262972e-01 + 3.5167307836009356e+00 -3.0905704350512941e-01 8.9977424381341553e-01 + id 11829 + loc 9.9842399358749390e-01 9.9019140005111694e-01 1074 + blend 0.0000000000000000e+00 + interp 5.4750552195584257e-01:2.6707265180877560e-01:8.6070647296117608e-01:8.2797707966089221e-02:1.1942821815913895e+00:3.4942025086393919e-01:2.0373161427428719e+00:5.4750004690062304e-01:2.4303942869905604e+00:4.9907736813313169e-01:3.3013348434787000e+00:3.9700244458477768e-01:3.9802599352211860e+00 + CVs 20 + -1.9318352228463006e-02 3.0501326046693983e-01 -6.1644733960145082e-02 + -2.5613240987655800e-02 6.2539026413905141e-01 -1.3931038461230646e-01 + -1.9659622183484306e-02 9.6409864183162441e-01 -2.1369032042868391e-01 + 3.4811940311182928e-03 1.3352009228133772e+00 -2.8095151833905679e-01 + 4.6280693981624751e-02 1.7439246934502359e+00 -3.5779988165405707e-01 + 1.0549103857577355e-01 2.1891197687587187e+00 -4.6861079556751517e-01 + 1.7472801628085508e-01 2.6699328656146761e+00 -6.4401683464705917e-01 + 2.4383855291479969e-01 3.1747529519863944e+00 -9.2701278606522486e-01 + 2.9983904292319513e-01 3.6474536770103652e+00 -1.3542298255962018e+00 + 3.4794468822235725e-01 4.0144789188702985e+00 -1.9098647807343632e+00 + 4.3062656655583315e-01 4.2576846048685617e+00 -2.5501253069227561e+00 + 6.0281446831207142e-01 4.3842761543293660e+00 -3.2551554851104330e+00 + 8.8579687461858758e-01 4.3579125380627426e+00 -4.0028834725539149e+00 + 1.2583546938700085e+00 4.1272268281979061e+00 -4.7245723375234743e+00 + 1.6892621666387826e+00 3.7042477441953476e+00 -5.3278722471351765e+00 + 2.1174184225644637e+00 3.1573546167978863e+00 -5.7800484478508842e+00 + 2.4291803209993432e+00 2.5463972731838842e+00 -6.1627128276389902e+00 + 2.5637860476314427e+00 1.9076361908090484e+00 -6.5743738531057954e+00 + 2.7238434713720601e+00 1.2208617726543638e+00 -6.9892890994371548e+00 + id 11830 + loc 7.4533593654632568e-01 4.9738806486129761e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4669000978477919e-01:2.5234625389285242e-01:2.3635872759681331e-01:2.7811993111567146e-01:1.0744322944102809e+00:4.4668554288468137e-01:1.9903128000593069e+00:3.8958576958275704e-01:2.8532220480959207e+00:2.9527090976273501e-01:3.5584062948375257e+00 + CVs 20 + 2.9851229248850480e-01 3.5741694494448056e-01 -2.3267271069103912e-01 + 6.0692720193236205e-01 6.6927854817625576e-01 -3.9552845920783131e-01 + 9.3100445875477267e-01 9.3211387421002445e-01 -5.0147042673029452e-01 + 1.2683468065370445e+00 1.1371092181280864e+00 -5.4567849461865392e-01 + 1.6018534703206784e+00 1.2696398895973577e+00 -5.2266623981438842e-01 + 1.9067063434383611e+00 1.3230810495813905e+00 -4.3926401522440972e-01 + 2.1580237932219983e+00 1.3023373566966079e+00 -3.1279759520900496e-01 + 2.3389797230894884e+00 1.2234438716144804e+00 -1.6645125840556446e-01 + 2.4428533766706284e+00 1.1085953724773769e+00 -2.5316573850558466e-02 + 2.4763485677330124e+00 9.8212596653990036e-01 9.2316633275748516e-02 + 2.4549772177317895e+00 8.6364226034525193e-01 1.8354167210412814e-01 + 2.3920053104623884e+00 7.6730328574346063e-01 2.5446378508669232e-01 + 2.2983436442855858e+00 7.0303811674897543e-01 3.1761393328064547e-01 + 2.1877214665568694e+00 6.6236954236549828e-01 3.9939753483548063e-01 + 2.0744620525065272e+00 6.0718059222543430e-01 5.2906795856621414e-01 + 1.9855640661403828e+00 4.4496060873644305e-01 6.8875821241819146e-01 + 1.9582063433629568e+00 7.4708489964379510e-02 7.6225824984979940e-01 + 2.0314703853095493e+00 -4.4373031650034955e-01 6.3575707046617824e-01 + 2.0888848057688247e+00 -6.0520078499993102e-01 4.3024139119431604e-01 + id 11831 + loc 7.3546230792999268e-01 1.9585900008678436e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4542217445170779e-01:3.4366573856770727e-01:4.8334203335807846e-01:2.8395975697548242e-01:1.0512671830045681e+00:3.8918359058686935e-01:1.7392897132745109e+00:2.7057432707838364e-01:2.0745835287796655e+00:4.4541772022996329e-01:2.9266687308088399e+00:2.4421160956806826e-01:3.8416363628325092e+00 + CVs 20 + -2.4290589849243510e-02 2.9833118468920394e-01 2.6745684281211890e-01 + -2.1911570509338008e-02 5.9862196415980851e-01 5.0592413720332441e-01 + -1.0469848377367530e-02 8.8555197946816877e-01 7.5095528861255190e-01 + -6.3503136980095909e-03 1.1482746749280635e+00 1.0262655752874783e+00 + -2.4011045705220280e-02 1.3781164031260240e+00 1.3433824849131728e+00 + -7.6654107027902874e-02 1.5628790141497406e+00 1.7056215136121078e+00 + -1.7515227937285494e-01 1.6877895846664184e+00 2.1062479327491936e+00 + -3.2616528403083411e-01 1.7373485670529982e+00 2.5293671834637048e+00 + -5.2576791646535770e-01 1.6978471027226991e+00 2.9505442296527922e+00 + -7.5297050960125067e-01 1.5651008786024501e+00 3.3427019695106019e+00 + -9.7319356901981569e-01 1.3490254791541856e+00 3.6907356061726966e+00 + -1.1516031403347793e+00 1.0673349250403485e+00 3.9889571039709728e+00 + -1.2615617821540723e+00 7.4228828594045249e-01 4.2261860632032304e+00 + -1.2834172815375580e+00 4.0729638488177988e-01 4.3904431665111758e+00 + -1.2066532260034730e+00 1.1829298222282958e-01 4.4706144960391718e+00 + -1.0500446921895281e+00 -7.8154588228623423e-02 4.4763572891737011e+00 + -8.4802674211787843e-01 -2.1446431488124151e-01 4.4787900268416667e+00 + -5.9145858958204334e-01 -3.4305094575006445e-01 4.5724972881074333e+00 + -2.6605426782016728e-01 -6.6920582550040719e-01 4.8306782201460763e+00 + id 11832 + loc 4.9343892931938171e-01 2.4663029238581657e-02 1090 + blend 0.0000000000000000e+00 + interp 4.8611347485823647e-01:2.5733707169160230e-01:4.3063406317872910e-01:4.1311250994695098e-01:9.9619114628926531e-01:2.6716755110000273e-01:1.6225349690521944e+00:3.5811953809219998e-01:2.1903403485542059e+00:4.8610861372348790e-01:2.9886653571467301e+00:3.4136113606273044e-01:3.4825262960717938e+00 + CVs 20 + 3.4870246549527834e-01 4.8851957620152808e-01 -6.1502117614793406e-03 + 6.2309213843484801e-01 9.4207082667465503e-01 5.7028401685874308e-02 + 8.6650324643936139e-01 1.3891456223729177e+00 1.6738014189279005e-01 + 1.0784062057521260e+00 1.8479255409512834e+00 3.4073309232943538e-01 + 1.2240366323921716e+00 2.3024448745479402e+00 6.0216818008444317e-01 + 1.2583455370887970e+00 2.7212771057649565e+00 9.7214770662408156e-01 + 1.1300829750787345e+00 3.0471212980653624e+00 1.4506706059620724e+00 + 8.1331778701773982e-01 3.2013790121586263e+00 1.9879201762070220e+00 + 3.6344663203075966e-01 3.1303689955270331e+00 2.4916855468918517e+00 + -8.2528415371475483e-02 2.8678902124197161e+00 2.9053172636779983e+00 + -4.2714886052421808e-01 2.4933630785043479e+00 3.2494427416524565e+00 + -6.4641004234208310e-01 2.0523175676366470e+00 3.5543700327568475e+00 + -7.2518704296258818e-01 1.5740451770595527e+00 3.8313043413154939e+00 + -6.3323724228818656e-01 1.1029973532918425e+00 4.0848977199617531e+00 + -3.6046257666406539e-01 7.1384765536409323e-01 4.3085765319970726e+00 + -3.3375404464438541e-03 5.2221136198361828e-01 4.5007774243714840e+00 + 2.8238641370642448e-01 5.9921203100230325e-01 4.6678235472921559e+00 + 4.0108970419579260e-01 8.3174409543267558e-01 4.7713865994504649e+00 + 5.1277127026062042e-01 6.6703497799105937e-01 4.8597980249560262e+00 + id 11833 + loc 5.9761238098144531e-01 9.5491558313369751e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1685978356263653e-01:3.1576989462895860e-01:6.0626366854074654e-01:3.2141899922108508e-01:1.5579521628044644e+00:4.0038459839406232e-01:2.3877190702649149e+00:3.9466829957009431e-01:3.0122177579075520e+00:4.1685561496480095e-01:3.8616495348533793e+00 + CVs 20 + 2.0303241606030223e-01 3.5156601852160213e-01 -3.3658561834874801e-01 + 4.0564072220071651e-01 7.0519248468947682e-01 -6.6185125125393995e-01 + 6.1956202348870104e-01 1.0391915722128220e+00 -9.7172749271194570e-01 + 8.4707787698289894e-01 1.3322149563824288e+00 -1.2692505550700421e+00 + 1.0832279893961525e+00 1.5653187910954984e+00 -1.5568165124072499e+00 + 1.3184662310053294e+00 1.7225940378687727e+00 -1.8293887594841243e+00 + 1.5426751456620895e+00 1.8014972394377817e+00 -2.0758094041836626e+00 + 1.7526689204057189e+00 1.8191882036285458e+00 -2.2897599898247458e+00 + 1.9570186868849790e+00 1.8020900145573939e+00 -2.4792634762253734e+00 + 2.1736009366835414e+00 1.7692085303722098e+00 -2.6633602334274031e+00 + 2.4213864598103449e+00 1.7264253333315194e+00 -2.8594070471122270e+00 + 2.7129827850883799e+00 1.6733214687472109e+00 -3.0765824771320505e+00 + 3.0476476411935316e+00 1.6105670842355697e+00 -3.3151580627994139e+00 + 3.4154258411397374e+00 1.5333895812991369e+00 -3.5773019831781587e+00 + 3.8047413539850785e+00 1.4166378600326341e+00 -3.8847470546076117e+00 + 4.1817483042990045e+00 1.2323826888920801e+00 -4.2726226756490933e+00 + 4.4816927853437738e+00 9.9568195207738408e-01 -4.7622674321523668e+00 + 4.6524514752855879e+00 7.7201116059758257e-01 -5.3323098935454531e+00 + 4.7629710414927819e+00 6.4799270445923263e-01 -5.7743180248391681e+00 + id 11834 + loc 1.5625925734639168e-03 1.4706868678331375e-02 410 + blend 0.0000000000000000e+00 + interp 4.9969340271861773e-01:1.5066349323234637e-01:6.8494564468596453e-01:2.2189547141116020e-01:1.4844406767921579e+00:4.1798746745907500e-01:1.9620336569503467e+00:4.9968840578459056e-01:2.3893816987270671e+00:2.5536860410779760e-01:2.9986731144186667e+00:2.6813652504073421e-01:3.9428441962976613e+00 + CVs 20 + -4.1678696680904334e-02 9.3823636260577117e-02 -2.1636337910573517e-01 + -7.1584721738853427e-02 1.7135058870250136e-01 -4.3585022468895657e-01 + -8.1248631633420637e-02 2.3582295241394011e-01 -6.5735911877852238e-01 + -6.8112290941132719e-02 2.8602209039954485e-01 -8.7926624042601054e-01 + -3.2523001656203976e-02 3.1822561321182968e-01 -1.0972476379698679e+00 + 2.4362401288944402e-02 3.3055852304283451e-01 -1.3063096956043085e+00 + 9.9885699621525381e-02 3.2420409829657232e-01 -1.5032385101802723e+00 + 1.8964465601317787e-01 3.0361051227416336e-01 -1.6891536552872597e+00 + 2.9010974204277717e-01 2.7493107402263361e-01 -1.8672557513334707e+00 + 4.0100592673169116e-01 2.4496995934621069e-01 -2.0402187874144175e+00 + 5.2026856540046951e-01 2.1796833646121072e-01 -2.2090537696193300e+00 + 6.2307733537599375e-01 1.8702656492990921e-01 -2.3715136484399886e+00 + 6.5398388789357298e-01 1.3502817136554612e-01 -2.5171284786255779e+00 + 5.7468161157751152e-01 5.5616923780439809e-02 -2.6115862864242847e+00 + 4.3095136681552698e-01 -2.6739467331299727e-02 -2.6340612221667143e+00 + 2.8480251937245971e-01 -8.9122519313811432e-02 -2.6199122827566645e+00 + 1.4363623584439367e-01 -1.3007022664087364e-01 -2.5856104718398796e+00 + 6.5609171004356037e-03 -1.5126555742015979e-01 -2.5257755709062044e+00 + -1.2960439739862423e-01 -1.9278714831040666e-01 -2.6780286365994312e+00 + id 11835 + loc 8.9505028724670410e-01 4.0105339884757996e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3261288358950922e-01:4.0471000844339799e-01:7.1240534362770846e-01:3.7960661505733934e-01:1.1313200904202114e+00:4.3260855746067334e-01:1.9944864933548518e+00:2.9080172356647749e-01:2.1886235652458232e+00:3.9901428556345619e-01:2.7958204081967817e+00:3.8411560824808749e-01:3.2506476154720660e+00:4.1945930932864672e-01:3.9991001848224608e+00 + CVs 20 + -2.0217306694225629e-01 3.1129867057137334e-01 1.2163968166762722e-01 + -3.8642551407773507e-01 6.3438589463038408e-01 2.7015994945400712e-01 + -5.5701558320077194e-01 9.7790746897949676e-01 4.2676414835530030e-01 + -7.0802092815217277e-01 1.3479737356167187e+00 5.6663964800557187e-01 + -8.2116820744099273e-01 1.7269515326879445e+00 6.5711456371974308e-01 + -8.9096045205491814e-01 2.0690944617464728e+00 6.9032934142747537e-01 + -9.3398899701066462e-01 2.3540449025467796e+00 7.0885165857441601e-01 + -9.7762162767036354e-01 2.5930338235476071e+00 7.8475455228120627e-01 + -1.0459318862391118e+00 2.7678658994204675e+00 9.4527012357893647e-01 + -1.1617734659844812e+00 2.8478929189076716e+00 1.1606423410697120e+00 + -1.3468853117296340e+00 2.8285367514360096e+00 1.3792472137708862e+00 + -1.6134360098459262e+00 2.7367675504511833e+00 1.5557367985024237e+00 + -1.9580036967093426e+00 2.5976799461241633e+00 1.6726364969925107e+00 + -2.3593697663433115e+00 2.4087717525732177e+00 1.7328052910682401e+00 + -2.7770867837627184e+00 2.1293326646755961e+00 1.7317529931486833e+00 + -3.1348766244848072e+00 1.7255562606314052e+00 1.6434049796887293e+00 + -3.3242615589352420e+00 1.2355714490225398e+00 1.4029684992680773e+00 + -3.2446276616396896e+00 8.0985466165180098e-01 9.7955371217125942e-01 + -3.1645500012611647e+00 4.4940200208130299e-01 6.5576246049201747e-01 + id 11836 + loc 9.1933083534240723e-01 7.3748126626014709e-02 1053 + blend 0.0000000000000000e+00 + interp 7.0205389698025922e-01:3.8188229821757314e-01:3.6898555421099877e-02:7.0204687644128949e-01:9.3609257410407676e-01:5.2212935848813802e-01:1.4298499426644304e+00:4.8435095170634035e-01:1.9821823047172100e+00:5.6848056831893390e-01:2.8099165893990419e+00:5.3963440839801236e-01:2.9960253764430265e+00:3.6818646379944375e-01:3.5809475417306125e+00 + CVs 20 + 2.1719487577854266e-01 3.7733967214016506e-01 -1.4610762506846192e-01 + 4.4184160689194796e-01 7.3912330769319035e-01 -2.4400292085887915e-01 + 6.8275936613585753e-01 1.0711469472526671e+00 -2.8238123377515956e-01 + 9.4429289857339183e-01 1.3598818123941254e+00 -2.5931688651015966e-01 + 1.2320490235114527e+00 1.5958962096349882e+00 -1.8064651778655005e-01 + 1.5465336256035651e+00 1.7708708222399401e+00 -6.5864431239268328e-02 + 1.8722608477386207e+00 1.8762501859851834e+00 5.8428004241943832e-02 + 2.1854725675799247e+00 1.9100385613950155e+00 1.7350421713709829e-01 + 2.4672233119127034e+00 1.8809310028613540e+00 2.7352959816425171e-01 + 2.7052473302924813e+00 1.8091692649333919e+00 3.5923907120950860e-01 + 2.8981997209547745e+00 1.7163958417547354e+00 4.3291579874772851e-01 + 3.0534473069627017e+00 1.6018068189870363e+00 5.0150910141499438e-01 + 3.1639221816633047e+00 1.4624770778931233e+00 5.6587564890969966e-01 + 3.2080570128728905e+00 1.3149350924289169e+00 6.0366361063127971e-01 + 3.1734502619700078e+00 1.1768056972227030e+00 5.8421468888239469e-01 + 3.0854916508708841e+00 1.0470253653831916e+00 4.8224032526959920e-01 + 2.9719668348135646e+00 8.7790236311019332e-01 3.1270746722471732e-01 + 2.8386380921687171e+00 6.8405016103563665e-01 2.5402788391880704e-01 + 2.7430614664208579e+00 7.8812543669845170e-01 6.0433993645234740e-01 + id 11837 + loc 8.3352190256118774e-01 8.2343971729278564e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3912035531182148e-01:3.7469514646514857e-01:7.2554902700575741e-02:3.7075790381822743e-01:8.9995716089823752e-01:3.9956303400153353e-01:1.3192078037903654e+00:3.8059733070507185e-01:2.1445153604626870e+00:4.3911596410826836e-01:2.8673040454516077e+00:3.3377082804604025e-01:3.2973897450961580e+00 + CVs 20 + 1.9158622815462173e-01 2.2126744290547182e-01 -2.9988621556654360e-01 + 3.7934023783556070e-01 4.3410997941552842e-01 -5.5174192154662571e-01 + 5.6737178948033640e-01 6.3777378709904187e-01 -7.8589876297120542e-01 + 7.5623939728963485e-01 8.3279544855615217e-01 -1.0179141163199943e+00 + 9.4433126209853646e-01 1.0193644080279325e+00 -1.2526006922045778e+00 + 1.1299423284265115e+00 1.1974404570663997e+00 -1.4950149340742276e+00 + 1.3078118738157185e+00 1.3679264106533824e+00 -1.7491106991026801e+00 + 1.4711846845379752e+00 1.5306066780959804e+00 -2.0156596815499763e+00 + 1.6189036869659805e+00 1.6814436202326684e+00 -2.2938808097692966e+00 + 1.7559362015928912e+00 1.8134812861404415e+00 -2.5844383885916908e+00 + 1.8877407249641989e+00 1.9155610615874252e+00 -2.8883752917803305e+00 + 2.0196708625667559e+00 1.9707642893534167e+00 -3.2047311464591095e+00 + 2.1548563064444739e+00 1.9631486246422796e+00 -3.5258583764518154e+00 + 2.2883968788262155e+00 1.8843343220057878e+00 -3.8337394671398561e+00 + 2.4177728056490047e+00 1.7363453094506780e+00 -4.1111035861501248e+00 + 2.5601377494961248e+00 1.5218547948143364e+00 -4.3610492284267774e+00 + 2.7353545860387136e+00 1.2271705409319209e+00 -4.5993826778569220e+00 + 2.9013720842824418e+00 8.5136816423199169e-01 -4.8206409495061937e+00 + 2.8347723187194607e+00 5.2338870871273580e-01 -4.8613054911268181e+00 + id 11838 + loc 2.5073707103729248e-01 4.9137151241302490e-01 1085 + blend 0.0000000000000000e+00 + interp 5.1292494872135208e-01:3.2907449464351268e-01:5.1985483323004522e-01:4.4284330293931867e-01:9.9268061063178392e-01:4.6562519333957531e-01:1.2854599795999015e+00:4.2392338894825626e-01:1.8805275276327200e+00:2.9946470765870098e-01:2.0618368182747120e+00:5.1291981947186494e-01:2.8486187975827524e+00:3.7226370871863995e-01:3.1840838173505626e+00:4.4910478937791026e-01:3.9870221422308241e+00 + CVs 20 + 5.0879754555161505e-01 4.6781481758852200e-01 1.3984500661852567e-01 + 9.1328231493844081e-01 8.8941470962261127e-01 3.2078911192934800e-01 + 1.2682058223514094e+00 1.2866128471527907e+00 5.4986152780871977e-01 + 1.5826444434903344e+00 1.6802595822385087e+00 8.5789802488071443e-01 + 1.8293135453494260e+00 2.0561070426164143e+00 1.2598877507908111e+00 + 1.9783800664104798e+00 2.3912112446180434e+00 1.7617624240263077e+00 + 1.9992371655285499e+00 2.6529252784545601e+00 2.3545865285917187e+00 + 1.8712557645601116e+00 2.8018474228480823e+00 3.0049511778724289e+00 + 1.6056128054111323e+00 2.8014539179706848e+00 3.6548524251492376e+00 + 1.2745207339720648e+00 2.6440087270661454e+00 4.2358925050321208e+00 + 9.7571955192480386e-01 2.3682533055482584e+00 4.7180191801016642e+00 + 7.6150037422730166e-01 2.0205441332867977e+00 5.1169244669989009e+00 + 6.5381797687284582e-01 1.6372674738397923e+00 5.4523711152336602e+00 + 6.8002300162284102e-01 1.2750855107107766e+00 5.7335017230246388e+00 + 8.4782043175695843e-01 1.0147852374768309e+00 5.9635397015262877e+00 + 1.0850600317602896e+00 9.3005888893458688e-01 6.1501545523897674e+00 + 1.2761762835193906e+00 1.0681882588563658e+00 6.2963147187172472e+00 + 1.3448488112248489e+00 1.3668856417092026e+00 6.3811199208848253e+00 + 1.5381008271411911e+00 1.1115308570996310e+00 6.6754360306972123e+00 + id 11839 + loc 2.6632341742515564e-01 3.2279450446367264e-02 1077 + blend 0.0000000000000000e+00 + interp 3.5251015114238726e-01:3.5250662604087585e-01:8.5183957250173237e-01:2.4535068975795959e-01:1.2564935474532379e+00:2.6756515830885108e-01:1.8630813010752940e+00:2.6177400386551486e-01:2.4024339640330612e+00:3.1351328113353744e-01:3.0045557125739260e+00:2.6524851822444617e-01:3.8615288378810915e+00 + CVs 20 + -1.2997626074105229e-01 3.4419276806958266e-01 4.1933443519688460e-02 + -2.8600641025125195e-01 6.7785098229994245e-01 5.3379353175670885e-02 + -4.6831078831741058e-01 9.9514166958376726e-01 3.3236443054596665e-02 + -6.7506052738400069e-01 1.2835929769079852e+00 -2.1724169560314477e-02 + -9.0150354085189288e-01 1.5273814029759953e+00 -1.1466389778762082e-01 + -1.1375805273055264e+00 1.7139714135503108e+00 -2.4366304885752760e-01 + -1.3706070512662363e+00 1.8369019860313431e+00 -4.0219602475451666e-01 + -1.5896839814152393e+00 1.8972901336105128e+00 -5.8092624458106923e-01 + -1.7889962711606608e+00 1.9015437637014156e+00 -7.6971965075067705e-01 + -1.9702551872539522e+00 1.8572314904457630e+00 -9.6008053544821381e-01 + -2.1386408010844171e+00 1.7694568079581152e+00 -1.1441928160751267e+00 + -2.2958113813254144e+00 1.6421022387993716e+00 -1.3120085700584023e+00 + -2.4397880792355680e+00 1.4789271512286641e+00 -1.4539624740253696e+00 + -2.5671449222674920e+00 1.2820439974496920e+00 -1.5626798309535439e+00 + -2.6734698922421467e+00 1.0533775260573828e+00 -1.6298027615994959e+00 + -2.7559403181575393e+00 7.9574024358101381e-01 -1.6369609113057617e+00 + -2.8223900576506571e+00 5.0517051355899423e-01 -1.5495404964626882e+00 + -2.9025711904031382e+00 2.0095019136866332e-01 -1.3328447520143465e+00 + -2.9898027104137910e+00 1.9877150881650651e-02 -1.0257313823628658e+00 + id 11840 + loc 9.4348776340484619e-01 5.8329701423645020e-01 410 + blend 0.0000000000000000e+00 + interp 4.4408110099104736e-01:2.5750818145944648e-01:2.3380740808077261e-01:4.0303139206567995e-01:9.9527569541644934e-01:2.9515817286157514e-01:1.5045452525883150e+00:3.4377737531816183e-01:2.0016757426901002e+00:3.2056333218340655e-01:2.3704765199974744e+00:4.4407666018003750e-01:2.9952835842839107e+00:3.4973680743158603e-01:3.6783229901390539e+00 + CVs 20 + 6.1576108989613820e-01 1.6879836459714351e-01 -3.0664842645459756e-01 + 1.1633616182957360e+00 2.9521068548992924e-01 -5.8221360217524332e-01 + 1.7076185023008330e+00 4.2410895506941593e-01 -8.3062252123622704e-01 + 2.2422973478955708e+00 5.4494487967489214e-01 -1.0727736644648171e+00 + 2.7418950220149561e+00 6.3065755061149320e-01 -1.3359731052062023e+00 + 3.2009278407753978e+00 6.6492197365270611e-01 -1.6397749029854465e+00 + 3.6344563746985967e+00 6.3616100315948421e-01 -1.9831293347917740e+00 + 4.0708511144091011e+00 5.2943867329162364e-01 -2.3421273229649398e+00 + 4.5269794107630101e+00 3.2267036444201969e-01 -2.6817681979635992e+00 + 4.9901277196139695e+00 -6.1027323007372125e-03 -2.9653481020110228e+00 + 5.4389843844706007e+00 -4.3876481867437045e-01 -3.1959594033810701e+00 + 5.8726041380358511e+00 -9.1743625364547920e-01 -3.4539365016051673e+00 + 6.2830518929452088e+00 -1.3851206583852580e+00 -3.7968954315539900e+00 + 6.6474004138376479e+00 -1.7876081168111040e+00 -4.2110174205697382e+00 + 6.9541393462223056e+00 -2.1157798079913657e+00 -4.6363707171266721e+00 + 7.2173230006593005e+00 -2.4343938862367449e+00 -5.0050129853579355e+00 + 7.4573605047142255e+00 -2.8096932844272797e+00 -5.2835132456871552e+00 + 7.6700702974562658e+00 -3.2440877681571387e+00 -5.4765747573224957e+00 + 7.8427355569673116e+00 -3.7412728486027005e+00 -5.6603102522103308e+00 + id 11841 + loc 7.9968917369842529e-01 7.2425603866577148e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7042919214261671e-01:3.7042548785069529e-01:1.9522547507592170e-01:2.9548275040555366e-01:7.8903798570759687e-01:2.1171641345401063e-01:1.1855243690738391e+00:2.7332958427404663e-01:1.9816286644061480e+00:2.8260673085495086e-01:2.4590682995966824e+00:2.7067952878468360e-01:2.9951123875831565e+00:3.2822351021600610e-01:3.8913960745468739e+00 + CVs 20 + 4.0203123807858865e-01 4.2789876398053472e-01 -3.0699298383938700e-01 + 7.7802150817977234e-01 8.7368365596421826e-01 -5.1541560061315805e-01 + 1.1246764073422544e+00 1.3213840940020498e+00 -6.2935104208149695e-01 + 1.4787113285236355e+00 1.6555050133744220e+00 -6.8283406024620041e-01 + 1.8345199974148592e+00 1.7772926949635017e+00 -7.2203844562113806e-01 + 2.1376568616350529e+00 1.7051803054852344e+00 -7.6442041529159455e-01 + 2.3531895704219972e+00 1.5056637169629228e+00 -7.9842104558420357e-01 + 2.4961021007682520e+00 1.2311182101996554e+00 -8.0243420061076820e-01 + 2.5926752821162240e+00 9.0451004409840396e-01 -7.5499720349902455e-01 + 2.6991668854185518e+00 5.2346949366024864e-01 -6.2981226986658490e-01 + 2.8865212129241353e+00 8.8994314377516814e-02 -3.9010079954182197e-01 + 3.2415015976703669e+00 -3.5870281231410922e-01 -5.4998980825872290e-02 + 3.8575207895536772e+00 -7.4982663270107663e-01 2.4156384194805974e-01 + 4.5531015340901995e+00 -9.9161333578862565e-01 3.2196714025519824e-01 + 5.0421679534175388e+00 -1.1339016718058592e+00 2.7741438707642646e-01 + 5.2239921102247813e+00 -1.2236703587215183e+00 2.8119525362034115e-01 + 4.9740117866949713e+00 -1.1308995199775143e+00 3.5495096657832936e-01 + 4.6146974359609363e+00 -8.4215535192897695e-01 2.6825037809665303e-01 + 4.7645628470172658e+00 -1.0256388003889769e+00 3.5299060349383526e-01 + id 11842 + loc 4.1419118642807007e-01 2.1792010962963104e-01 384 + blend 0.0000000000000000e+00 + interp 5.0561151865229348e-01:4.6097610166633657e-01:6.9704472946800866e-01:3.0507294136789564e-01:1.0219531628928797e+00:4.9177467927666613e-01:1.8312697911105231e+00:2.9293155986127217e-01:2.5156657958062896e+00:5.0560646253710695e-01:2.9225241988236599e+00:3.8113551130510293e-01:3.9988918474491091e+00 + CVs 20 + -5.0710653348107915e-01 1.7980953878378372e-01 -1.1977462503213772e+00 + -9.0435766630600112e-01 1.9569170757793503e-01 -1.9071885002405706e+00 + -1.2866047686822446e+00 1.6685757037449045e-01 -2.4897173632551342e+00 + -1.6790791028244658e+00 1.4004428564102775e-01 -3.0793273028297627e+00 + -2.0646436080445740e+00 1.0657279945898412e-01 -3.6771284324164299e+00 + -2.4298841922996619e+00 5.4425879958700629e-02 -4.2831172519151366e+00 + -2.7711746783821378e+00 -2.7652611811845418e-02 -4.8948689118335214e+00 + -3.0926853621225208e+00 -1.4707975687362373e-01 -5.5051716318357444e+00 + -3.3981487522882823e+00 -3.0269162363997992e-01 -6.1032922406786820e+00 + -3.6882001076781714e+00 -4.9775121175825376e-01 -6.6881137949900333e+00 + -3.9613173915782496e+00 -7.4507434119727656e-01 -7.2608841927046868e+00 + -4.2253669973230412e+00 -1.0545616866105427e+00 -7.8108622971007771e+00 + -4.4913719351309833e+00 -1.4292627973257592e+00 -8.3195922615106781e+00 + -4.7670596299423051e+00 -1.8681015061398929e+00 -8.7692708895183706e+00 + -5.0614486845415172e+00 -2.3645689000781118e+00 -9.1426314382757781e+00 + -5.3898234226770319e+00 -2.9007831442615015e+00 -9.4220485398389808e+00 + -5.7566544518254297e+00 -3.4477219412571216e+00 -9.5910843837178366e+00 + -6.1294812559328236e+00 -3.9629909143325301e+00 -9.6361101220365555e+00 + -6.3206342007912708e+00 -4.3063404562573524e+00 -9.5063217102167599e+00 + id 11843 + loc 2.6305511593818665e-01 4.9137151241302490e-01 1084 + blend 0.0000000000000000e+00 + interp 3.4083017567319884e-01:3.4082676737144213e-01:5.3078641034416973e-01:2.5446802505892763e-01:1.2855747065568681e+00:3.1720456292121446e-01:2.0388721369783966e+00:2.7926823420469210e-01:2.9826398415259363e+00:2.5067683469205826e-01:3.8672726724586242e+00 + CVs 20 + 4.4629991543824565e-01 4.4087990570237157e-01 2.5901883347955518e-01 + 8.0368310598716697e-01 8.2827582316764459e-01 5.0713642412627402e-01 + 1.1327878766256954e+00 1.2062013921932733e+00 7.6079164588278680e-01 + 1.4360647207559407e+00 1.5915431019840356e+00 1.0516329999873466e+00 + 1.6744781032470311e+00 1.9671961025742712e+00 1.4004347569304307e+00 + 1.8081908114630847e+00 2.3057433575164845e+00 1.8061890431479211e+00 + 1.8035433673923555e+00 2.5750117017530449e+00 2.2400609906067852e+00 + 1.6372985613471429e+00 2.7402835563626047e+00 2.6421913667945525e+00 + 1.3304319643125697e+00 2.7743681328465568e+00 2.9300577114428425e+00 + 9.7034149594299346e-01 2.6890420691852785e+00 3.0753176654093490e+00 + 6.2283741967404604e-01 2.4958509705803760e+00 3.1346604358818486e+00 + 3.2991255679846909e-01 2.1700995168636181e+00 3.1643260246208573e+00 + 1.4009512738318675e-01 1.7495379942912623e+00 3.1808894603091709e+00 + 1.2269186017693556e-02 1.3427754753254764e+00 3.1735082878011385e+00 + -1.3734477078919993e-01 1.0076132777838231e+00 3.1319803714418750e+00 + -3.4404447679646849e-01 7.8399093957830623e-01 3.0676061263555785e+00 + -5.8540743716051968e-01 7.0012014213421825e-01 3.0210801147619861e+00 + -8.1803570335519249e-01 6.9564123586827231e-01 3.0130073416212912e+00 + -1.0997897129216474e+00 5.7585319413338920e-01 2.9845166531462777e+00 + id 11844 + loc 4.7562196850776672e-01 3.2152980566024780e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7558816730245431e-01:3.7558441142078131e-01:4.9172489629181970e-02:2.7478665312567307e-01:9.6905565771640023e-01:3.0389868926144759e-01:1.5514814561601382e+00:3.1564744742378176e-01:2.3875192574485578e+00:3.0881969191053327e-01:3.0011090469715209e+00:2.9898105047083012e-01:3.8393786490262083e+00 + CVs 20 + -4.2523214725332475e-01 4.9799989398575262e-01 6.4198779514419477e-02 + -8.1550840838956307e-01 1.0298888036013623e+00 8.5824039768934490e-02 + -1.1519096348886066e+00 1.6482661698258390e+00 3.8332438074795083e-02 + -1.3951689517780708e+00 2.3544000526758033e+00 -1.2849306957256879e-01 + -1.5149703286785698e+00 3.0621274943776480e+00 -4.6741090105350869e-01 + -1.5480593968181700e+00 3.6623881412076233e+00 -9.8036853001968649e-01 + -1.5771489942926871e+00 4.0544105489660813e+00 -1.6368190633701256e+00 + -1.6712100434028336e+00 4.1352375704442315e+00 -2.3619975249597456e+00 + -1.8452090168506530e+00 3.8634367551355941e+00 -3.0388892630492741e+00 + -2.0577569634682296e+00 3.2600803961414879e+00 -3.5723483343135030e+00 + -2.2138181797303824e+00 2.3859807679181633e+00 -3.8720960031202454e+00 + -2.2101498625643439e+00 1.3791120981982126e+00 -3.8713470623851158e+00 + -2.0326155460912401e+00 4.2737460382490911e-01 -3.5903892818600753e+00 + -1.7881414227771057e+00 -3.4680234616188577e-01 -3.1513756110768854e+00 + -1.6278281760649724e+00 -9.4032217070816349e-01 -2.7300134951675705e+00 + -1.7344721215674519e+00 -1.3731541388346713e+00 -2.6021383713941444e+00 + -2.1161329168435077e+00 4.7838854174287970e-01 -3.1965762342322321e+00 + -1.6283691786369123e+00 9.6185662427979834e-01 -2.5169976448236722e+00 + -1.7513699800795652e+00 1.3801849221615834e+00 -2.6471402834016571e+00 + id 11845 + loc 5.9326750040054321e-01 9.9924504756927490e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3298621507433749e-01:4.3298188521218678e-01:7.1911840480007361e-01:3.3352960868450615e-01:1.0079848189327199e+00:2.8213422438356628e-01:1.9263463489022619e+00:2.9572505366544322e-01:2.6534477937272873e+00:3.7919168650436741e-01:3.2917350610058316e+00:2.9803641667997594e-01:3.9940841713817594e+00 + CVs 20 + 2.5193415722777701e-01 2.7526752290315304e-01 -1.1484314967362652e-01 + 5.1061571876083989e-01 5.6158271274372040e-01 -2.0429608169609439e-01 + 7.8672392972839567e-01 8.5131904915184375e-01 -2.9495837539091296e-01 + 1.0873385580124630e+00 1.1370629581634470e+00 -4.0628727095529943e-01 + 1.4164306271910256e+00 1.4094469402185721e+00 -5.5699410625554102e-01 + 1.7712460062465170e+00 1.6529622371133448e+00 -7.7133097315006971e-01 + 2.1385091805186853e+00 1.8455767062746826e+00 -1.0699520203392288e+00 + 2.4974026046818953e+00 1.9646976811616255e+00 -1.4576869305733082e+00 + 2.8275828697496745e+00 1.9946206531339525e+00 -1.9197580827402916e+00 + 3.1168710902242132e+00 1.9326088631174287e+00 -2.4287397798381893e+00 + 3.3624051394778198e+00 1.7819014253966774e+00 -2.9583114610723062e+00 + 3.5590206164502596e+00 1.5413781085520237e+00 -3.4904267652321885e+00 + 3.6844072293369190e+00 1.2124840665329040e+00 -4.0150879933467936e+00 + 3.6855665903628938e+00 8.2609407500298104e-01 -4.5357242005283416e+00 + 3.4900718413504919e+00 4.5461396216526906e-01 -5.0520000840516950e+00 + 3.0672042253300180e+00 1.9959148114183534e-01 -5.5233334115026658e+00 + 2.4687414886162182e+00 1.4582088102413526e-01 -5.8821424721107638e+00 + 1.8613277426746979e+00 2.5715282176041054e-01 -6.1149935499573242e+00 + 1.5143689545705024e+00 2.1635167520314091e-01 -6.4214003845388508e+00 + id 11846 + loc 9.3482571840286255e-01 8.7351304292678833e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3912035531182148e-01:3.6553103117994429e-01:1.2035296955260388e-01:4.3911596410826836e-01:8.6266713285014562e-01:3.2665928639165903e-01:1.3393140805357830e+00:3.0166139357001248e-01:2.0445085651403407e+00:2.9503422934207946e-01:2.8689719922734191e+00:3.8655914552108950e-01:3.5722110942136895e+00 + CVs 20 + 7.1767188008942759e-02 2.7484699879389868e-01 -1.9019553014741059e-01 + 1.6548188727742572e-01 5.4514123594612518e-01 -3.7461671873671609e-01 + 2.5633752604520865e-01 8.1779178761066151e-01 -5.5611211283590389e-01 + 3.3283196124747527e-01 1.0955528749212966e+00 -7.3886576785866453e-01 + 3.9436903822422376e-01 1.3757383841585029e+00 -9.2639632383093506e-01 + 4.3878503468150964e-01 1.6565390556125505e+00 -1.1232399581190926e+00 + 4.6257561056567786e-01 1.9379213790083589e+00 -1.3388933809333863e+00 + 4.6337847923255160e-01 2.2170662695553309e+00 -1.5887632377522056e+00 + 4.4129606184618653e-01 2.4821016605003283e+00 -1.8901401227453307e+00 + 3.9784061946902660e-01 2.7119517641851005e+00 -2.2556776223199004e+00 + 3.3669488336121356e-01 2.8809530638189549e+00 -2.6863668853534506e+00 + 2.6759505315278109e-01 2.9678764766756642e+00 -3.1673749431441047e+00 + 2.0621936922658879e-01 2.9652607948857996e+00 -3.6751248628658892e+00 + 1.6891077744623906e-01 2.8771201846251331e+00 -4.1869532366637179e+00 + 1.6918492118598993e-01 2.7104815532465989e+00 -4.6862253898825497e+00 + 2.2118972232395095e-01 2.4667906702258211e+00 -5.1643511228318300e+00 + 3.3715617655737296e-01 2.1455903066078799e+00 -5.6040582314693008e+00 + 5.0833222246631260e-01 1.7811754579047507e+00 -5.9576662427872531e+00 + 6.7543299456203343e-01 1.5951232215949414e+00 -6.0741360357842797e+00 + id 11847 + loc 8.0857580900192261e-01 7.0873034000396729e-01 410 + blend 0.0000000000000000e+00 + interp 4.3191420829800181e-01:2.7124668500864163e-01:5.6820694845420538e-01:4.3190988915591882e-01:1.0020384306091481e+00:2.8180223357139933e-01:1.9868203954247798e+00:4.2719947793997137e-01:2.6109393747172311e+00:2.9437957444639329e-01:3.2790727566334898e+00:4.0108246664236324e-01:3.9774450106705497e+00 + CVs 20 + 4.5876889536586096e-01 3.0116188263932581e-01 -9.1765740995141371e-02 + 8.2042045440003530e-01 5.3211854183523410e-01 -1.7162027665762702e-01 + 1.1736560135997620e+00 7.4459269669526562e-01 -2.4540881445281465e-01 + 1.5571720965312079e+00 9.5616534143768672e-01 -3.2063946784630748e-01 + 1.9681210467566483e+00 1.1536051914292154e+00 -4.1614307381313576e-01 + 2.3991397494899598e+00 1.3151850018911835e+00 -5.5602369003955898e-01 + 2.8284644523746789e+00 1.4131237035805562e+00 -7.6609872494102149e-01 + 3.2200237234819040e+00 1.4252837587189791e+00 -1.0630795989256570e+00 + 3.5536724360329739e+00 1.3422738940286443e+00 -1.4430058344127425e+00 + 3.8240497453425206e+00 1.1526711697452061e+00 -1.8854599454278218e+00 + 4.0207306598559516e+00 8.2502922969036807e-01 -2.3335888152057422e+00 + 4.1232729778005508e+00 3.3773200084801069e-01 -2.7105326808304731e+00 + 4.1357243173913121e+00 -2.7224482064384259e-01 -3.0188604069676765e+00 + 4.1009850778848600e+00 -9.3898245403074365e-01 -3.3397678256613310e+00 + 4.0796874178258555e+00 -1.6009180072423861e+00 -3.7494783829405258e+00 + 4.1383365281216191e+00 -2.2239571192635879e+00 -4.2842565590423796e+00 + 4.3403861981157146e+00 -2.8100862231445527e+00 -4.9065746884230119e+00 + 4.6939043268132146e+00 -3.3409014937868298e+00 -5.4859955283095356e+00 + 5.1154234878352458e+00 -3.7647869687238562e+00 -5.8996388914330629e+00 + id 11848 + loc 9.0341162681579590e-01 3.0825379490852356e-01 416 + blend 0.0000000000000000e+00 + interp 5.4556240185746085e-01:5.4555694623344231e-01:4.8560683784285052e-01:5.0783490882699400e-01:9.4856094501461674e-01:3.2792726588640936e-01:1.4489741230876338e+00:4.6319913300560833e-01:2.0045980159405952e+00:3.4910508991992339e-01:2.9957975735624860e+00:3.4190947615384049e-01:3.4242422523034941e+00:4.1590964183805940e-01:3.9640430469384031e+00 + CVs 20 + -4.9038291082940755e-01 1.0541657925438215e-01 1.2739865854410901e-01 + -7.9427377982261627e-01 1.1450537146152318e-01 2.6539859032110907e-01 + -1.0528076128034241e+00 8.5566076783025025e-02 4.1218055190517267e-01 + -1.3195760376917782e+00 6.0609168956534842e-02 5.5141194306831287e-01 + -1.5915885705443829e+00 4.2384033072565885e-02 6.7930734769141754e-01 + -1.8680292254971280e+00 3.3458021923678194e-02 7.9325912708416635e-01 + -2.1470514261399867e+00 3.7211717510745923e-02 8.8853155153447227e-01 + -2.4243162953538193e+00 5.7322794503708918e-02 9.5957475848573459e-01 + -2.6984758728175433e+00 9.5093221967508801e-02 1.0048061145292102e+00 + -2.9719906074416547e+00 1.4863615382458950e-01 1.0252937185519844e+00 + -3.2381212810705629e+00 2.2344841016320094e-01 1.0125021710628845e+00 + -3.4733121351445346e+00 3.4701941779759871e-01 9.3217363575093226e-01 + -3.6767333730815270e+00 5.3896289060731495e-01 7.4074590470227908e-01 + -3.9100890670900785e+00 7.4932354654347955e-01 4.5189556065078140e-01 + -4.2240931474830443e+00 9.0133799779503687e-01 1.4232682078478531e-01 + -4.6110909420892954e+00 9.6771785165417423e-01 -1.4347323107116583e-01 + -5.0447049021594115e+00 9.4849526085205649e-01 -4.0974503729159301e-01 + -5.4993439893230240e+00 8.4246871098827936e-01 -6.5396573874510666e-01 + -5.7824000269755835e+00 6.6921607632383684e-01 -6.6540072733925593e-01 + id 11849 + loc 2.1196497976779938e-01 1.4151073060929775e-02 1085 + blend 0.0000000000000000e+00 + interp 5.5482005493995812e-01:4.2610099904369231e-01:7.5033507008151834e-01:3.3497271567539727e-01:1.4905031572285403e+00:5.5481450673940880e-01:2.0243998716106271e+00:4.5478287087985120e-01:2.5327681907539961e+00:2.8388758275435966e-01:3.1623590052286779e+00:4.2060322827877789e-01:3.9081850828404976e+00 + CVs 20 + 3.3430422182317837e-01 3.7333384228332767e-01 1.6554664611811915e-01 + 5.7157185832444912e-01 6.5746660294623194e-01 3.4673151049770434e-01 + 7.8590613873040704e-01 8.9868172998547091e-01 5.2596962817285187e-01 + 9.9655369668086458e-01 1.1031518479578892e+00 6.8560397099232329e-01 + 1.1941905618266437e+00 1.2659125346328342e+00 8.2331557638195974e-01 + 1.3834018504818373e+00 1.3831644725026426e+00 9.3065925120233728e-01 + 1.5999888352414926e+00 1.4560347557310525e+00 9.9155983501745848e-01 + 1.9486689677532012e+00 1.5245778262071825e+00 1.0012879616070405e+00 + 2.5036069446169171e+00 1.7456734290631797e+00 1.1014970234255685e+00 + 2.9131344542556770e+00 2.1277894433015661e+00 1.4427298435103530e+00 + 3.0068734004062341e+00 2.4934781385143570e+00 1.7911477969159324e+00 + 2.8944819068696419e+00 2.8550300393001615e+00 2.0186244834620863e+00 + 2.6714697798835720e+00 3.0767785990016190e+00 2.1566898109891746e+00 + 2.5457670249434576e+00 2.9294305592949819e+00 2.2904413117969167e+00 + 2.5919777893923710e+00 2.3604003250027388e+00 2.4158136869936029e+00 + 2.6538521338474323e+00 1.4113064734117078e+00 2.3972149787552857e+00 + 2.4628487456897123e+00 2.4695335246169559e-01 2.0975027259069572e+00 + 1.9143586630223055e+00 -6.5947791474584549e-01 1.6062659378357882e+00 + 1.4953825374787741e+00 -8.4131522171121509e-01 1.3587500998998014e+00 + id 11850 + loc 3.2551038265228271e-01 2.0895895361900330e-01 1053 + blend 0.0000000000000000e+00 + interp 4.1156314111967041e-01:4.1155902548825923e-01:3.3313025685296671e-01:2.7956206634136477e-01:1.0983700701258565e+00:3.5328036041177069e-01:1.7449199361856154e+00:2.9290618387231271e-01:2.0152658771705196e+00:2.7539382815849639e-01:2.9827797170942159e+00:3.0742555952983547e-01:3.8144455586507138e+00 + CVs 20 + 4.7190052438396718e-01 4.6561314381134478e-01 1.4296534023267793e-01 + 8.8915028744089419e-01 8.9053414352122140e-01 3.2625109299202443e-01 + 1.2929874382217301e+00 1.2795756385741923e+00 5.4663236671950899e-01 + 1.6937012499678112e+00 1.6296413858578549e+00 8.2561996747569488e-01 + 2.0759683911894529e+00 1.9153472650505523e+00 1.1791827521153297e+00 + 2.4211096112648587e+00 2.1081283695497519e+00 1.6133195735027370e+00 + 2.7050029469224386e+00 2.1822292976905446e+00 2.1204813158293532e+00 + 2.8973739663733435e+00 2.1190089389049112e+00 2.6762774186632119e+00 + 2.9702579430535154e+00 1.9045369726039518e+00 3.2294118106859671e+00 + 2.9089999635940238e+00 1.5299364937285882e+00 3.6959375411616469e+00 + 2.7270713580256380e+00 1.0248597422161692e+00 3.9670595580412269e+00 + 2.4846354713921732e+00 4.9324681383661784e-01 3.9878752438331171e+00 + 2.2191561520361343e+00 2.0484365619830192e-02 3.8230429521146201e+00 + 1.8847046528422784e+00 -3.8019473265441500e-01 3.5799909377277772e+00 + 1.4103820077330349e+00 -6.8936994219148251e-01 3.3328703201504490e+00 + 7.8134511048026223e-01 -8.0982340256683738e-01 3.1257452495060356e+00 + 9.4700957387874096e-02 -6.0513451097252491e-01 3.0064001696903193e+00 + -4.1925270528139791e-01 -1.5353985626457378e-01 3.0075763308975256e+00 + -7.6102731729889128e-01 5.0868869799459704e-03 2.9831169819118113e+00 + id 11851 + loc 1.2397557497024536e-02 8.5868650674819946e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2214588010634874e-01:4.1973595740081415e-01:3.2525811807817551e-03:3.7396747636453614e-01:3.9634308525120765e-01:3.7484777234844296e-01:1.0110581545352282e+00:4.2214165864754771e-01:1.4829450339228050e+00:3.9700244458477768e-01:1.9802798969286766e+00:3.8045724283875948e-01:2.9022018310930058e+00:3.4891931581167057e-01:3.4627275410738116e+00 + CVs 20 + -4.6748666050913046e-02 2.9713491364571726e-01 -6.6440823780287206e-02 + -4.8908946904992229e-02 6.0743238913199882e-01 -1.6380921029457191e-01 + -1.5245344998944928e-02 9.2517538039736591e-01 -2.7580015589027446e-01 + 4.8244428426603522e-02 1.2574401323737008e+00 -4.0119479692166793e-01 + 1.3700831887784681e-01 1.6029292382656501e+00 -5.5323798742739316e-01 + 2.3928453549729300e-01 1.9542339991624982e+00 -7.4687022841932005e-01 + 3.3961015475134759e-01 2.3010288565138306e+00 -9.9387229078118799e-01 + 4.2306095605971628e-01 2.6246221178949010e+00 -1.3022520106396516e+00 + 4.8104726455609825e-01 2.8868074904703240e+00 -1.6752377369769342e+00 + 5.2163765231258230e-01 3.0498777805763604e+00 -2.1018266681258875e+00 + 5.7743955721212947e-01 3.1176060909424295e+00 -2.5519808093565231e+00 + 6.8598676892799304e-01 3.1226214306942310e+00 -2.9846157325760618e+00 + 8.5687419520459918e-01 3.0821700491688384e+00 -3.3668265255995662e+00 + 1.0752069192980018e+00 2.9922956218647734e+00 -3.6854310572620448e+00 + 1.3364841379719437e+00 2.8554901033992479e+00 -3.9359984059686086e+00 + 1.6670730939556142e+00 2.6689821707755907e+00 -4.1360549612398625e+00 + 2.0835739413651830e+00 2.3873970129636861e+00 -4.3469210228159172e+00 + 2.5060056703489422e+00 1.9977058350932466e+00 -4.6320882218820634e+00 + 2.8090552100982134e+00 1.6946790092147181e+00 -4.8939713497957680e+00 + id 11852 + loc 5.9979903697967529e-01 7.5091320276260376e-01 410 + blend 0.0000000000000000e+00 + interp 3.8361187227312221e-01:2.4745525162235110e-01:5.6233672098000342e-02:3.8360803615439948e-01:9.6495125626256151e-01:3.0306317550593365e-01:1.6510053580943360e+00:2.3605690957175166e-01:2.5928382175585174e+00:2.7865741476441469e-01:3.2874197358256909e+00 + CVs 20 + 3.7458436845177767e-01 8.7593887201195347e-02 -2.3443853555106342e-01 + 6.6028105380992463e-01 1.2971986868507834e-01 -4.3052262342705916e-01 + 9.1962478106802914e-01 1.5073703075721245e-01 -6.1713930234795933e-01 + 1.1772240040300939e+00 1.6197737754741720e-01 -8.0586465354122983e-01 + 1.4320607324178718e+00 1.6471755337818328e-01 -9.9649897073669402e-01 + 1.6853039971370403e+00 1.6083651675099020e-01 -1.1883716257433468e+00 + 1.9404639121482830e+00 1.5282019603918784e-01 -1.3776952227642563e+00 + 2.2018429246414470e+00 1.4279458790706046e-01 -1.5574566284833178e+00 + 2.4739848944630261e+00 1.3185244627733528e-01 -1.7191504643626738e+00 + 2.7597107253470630e+00 1.2050070390843670e-01 -1.8529743043745193e+00 + 3.0481551197720016e+00 1.0948452438647971e-01 -1.9479231548983424e+00 + 3.3047421581959000e+00 9.8652269694927464e-02 -2.0033026428278875e+00 + 3.5071235720534801e+00 8.6581825751445685e-02 -2.0364547712494137e+00 + 3.6799422333049163e+00 6.8106929044686515e-02 -2.0643257182030639e+00 + 3.8508118188091238e+00 3.5714760232062659e-02 -2.0958904473846012e+00 + 4.0184241906942955e+00 -9.2155110622385017e-03 -2.1340991477464808e+00 + 4.1775007706337766e+00 -6.2489281069122882e-02 -2.1805745991034566e+00 + 4.3357110239536363e+00 -1.2923854640587495e-01 -2.2429639018884209e+00 + 4.5427757790613974e+00 -2.5831998465989425e-01 -2.3590432054828168e+00 + id 11853 + loc 5.9191823005676270e-01 3.3697551488876343e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7953976326164660e-01:4.0751767060159133e-01:9.8895407517316947e-01:4.7953496786401401e-01:1.6512967306815924e+00:3.9288885668457479e-01:2.1803779761758997e+00:2.7006376107993607e-01:2.9689621312033427e+00:3.2569979190552334e-01:3.9994909740802158e+00 + CVs 20 + 2.7886613167252289e-01 3.6461836261859287e-01 -2.5746061577883039e-01 + 5.3477676211890346e-01 7.0027908199414202e-01 -4.4429226183395421e-01 + 7.9877295055877906e-01 1.0215126038775206e+00 -5.9011580350415116e-01 + 1.0938007725850236e+00 1.3314821920785020e+00 -6.9399024362144202e-01 + 1.4326330463059784e+00 1.6163300882691263e+00 -7.3692203724218719e-01 + 1.8157191498330780e+00 1.8551626321144117e+00 -7.0153788015753737e-01 + 2.2270854905631232e+00 2.0239615001378528e+00 -5.7735095483196708e-01 + 2.6381861631655008e+00 2.1024878178312871e+00 -3.6605487754760924e-01 + 3.0183671439061182e+00 2.0782370504087799e+00 -8.5942730474545037e-02 + 3.3486120409605649e+00 1.9478822447671482e+00 2.2708058641376672e-01 + 3.6262935291435943e+00 1.7141513776000288e+00 5.3025969084630531e-01 + 3.8532562244069535e+00 1.3837062166013359e+00 7.8311458517667532e-01 + 4.0284288022131838e+00 9.7318664426135271e-01 9.4952499307276872e-01 + 4.1566278837681594e+00 5.1225238812580054e-01 9.9523864948855523e-01 + 4.2505158550394979e+00 4.9221002951710280e-02 8.9187814718203007e-01 + 4.3433532640943930e+00 -3.6179901132729553e-01 6.5568349132767556e-01 + 4.4942580586240028e+00 -6.9962144890111544e-01 3.2397515318803760e-01 + 4.7087914705006018e+00 -9.7531273995065904e-01 -6.3641632968839845e-02 + 4.8317665029051904e+00 -1.3198305561555688e+00 -3.5496699769693307e-01 + id 11854 + loc 5.4014205932617188e-02 9.8665022850036621e-01 1076 + blend 0.0000000000000000e+00 + interp 5.5623411304547210e-01:3.3680124894067209e-01:3.8592880805611596e-01:2.4771280563846257e-01:1.0963280809274187e+00:3.5241895033547210e-01:1.9812872175740361e+00:3.8600065462975686e-01:2.7224289617948272e+00:5.5622855070434163e-01:3.2773185048464439e+00:4.2885556146861925e-01:3.8575951361141856e+00 + CVs 20 + 2.3115734973057625e-01 2.9920034972798937e-01 4.3336337708965861e-02 + 4.6832586462517595e-01 5.7657028673902266e-01 6.8419034655987504e-02 + 7.1528399642796614e-01 8.4251702068370404e-01 9.4636346868285037e-02 + 9.7667481860031391e-01 1.1018728968740024e+00 1.2350924753842901e-01 + 1.2561827453137966e+00 1.3521393886456465e+00 1.3883319899909152e-01 + 1.5552918031900098e+00 1.5890181719054393e+00 1.1968687532552486e-01 + 1.8688704929206914e+00 1.8024014613084143e+00 4.3981307451698481e-02 + 2.1835274705150738e+00 1.9754025091063878e+00 -1.0262621248565196e-01 + 2.4800474419400453e+00 2.0885887964989949e+00 -3.1921202017384831e-01 + 2.7396229927075764e+00 2.1266027315255269e+00 -5.8667597703067598e-01 + 2.9532257439229723e+00 2.0840770213118152e+00 -8.7550163421598726e-01 + 3.1219755525951465e+00 1.9630673867833663e+00 -1.1618561367228133e+00 + 3.2464446299296386e+00 1.7669445347504902e+00 -1.4363520471446054e+00 + 3.3142581481225166e+00 1.5001231582630787e+00 -1.7047512917438683e+00 + 3.2899753863244046e+00 1.1783211512117386e+00 -1.9772485390239678e+00 + 3.1256425933825160e+00 8.4935355751884722e-01 -2.2412458595136928e+00 + 2.8008484873798225e+00 5.8780118343512511e-01 -2.4532282433296237e+00 + 2.3660267482007353e+00 4.5596463707421164e-01 -2.5603479302661976e+00 + 2.0513081236405410e+00 3.0836572620401592e-01 -2.6260552175006060e+00 + id 11855 + loc 5.4636424779891968e-01 8.5920415818691254e-02 1077 + blend 0.0000000000000000e+00 + interp 3.2188654497498365e-01:3.2188332610953391e-01:5.2219653545239164e-01:2.4390219988503162e-01:1.1828109739208457e+00:3.0081068376395154e-01:2.1490592298822557e+00:2.5460612467830013e-01:3.0081434228434238e+00:2.6113722681640855e-01:3.9637274513752914e+00 + CVs 20 + 5.0896226774594100e-02 3.7124222510213872e-01 1.9094923132815378e-01 + 9.0946870527877643e-02 7.4463042160156578e-01 3.5804589684699523e-01 + 1.1212885481590806e-01 1.1196039020720707e+00 5.3208284497531033e-01 + 1.0318715103872467e-01 1.4941916741502432e+00 7.3605224475579822e-01 + 5.0024714588873032e-02 1.8615356620651533e+00 9.8553905593469016e-01 + -6.1907490664655840e-02 2.2070077784886357e+00 1.2881707332587979e+00 + -2.4427429203391915e-01 2.5095607971936218e+00 1.6401830923024114e+00 + -5.0074314620009686e-01 2.7467574974355093e+00 2.0256886424658456e+00 + -8.2546489839808379e-01 2.9012433255382897e+00 2.4237807182290716e+00 + -1.2030087592351730e+00 2.9622809504895331e+00 2.8156915370291480e+00 + -1.6118185575254493e+00 2.9233701036487103e+00 3.1933131752589716e+00 + -2.0288440065870956e+00 2.7759067475450543e+00 3.5610182059092055e+00 + -2.4247057787619908e+00 2.5093287839240017e+00 3.9240925341574164e+00 + -2.7562681083873506e+00 2.1254517385883780e+00 4.2768045523664693e+00 + -2.9762944415995856e+00 1.6475011855304289e+00 4.6105385353099662e+00 + -3.0406390522004232e+00 1.1478975575484256e+00 4.9072129136434359e+00 + -2.9661994348427765e+00 7.4665847192107404e-01 5.1213492111101715e+00 + -2.8227204356638600e+00 4.6961559037812051e-01 5.2507666817108589e+00 + -2.5459773011939690e+00 2.6285415834525239e-01 5.4357114054862130e+00 + id 11856 + loc 6.7947947978973389e-01 4.3583475053310394e-02 1054 + blend 0.0000000000000000e+00 + interp 4.7341643811790801e-01:4.6108257474812392e-01:1.9363744956342588e-01:4.0727974907254705e-01:8.4704372943189576e-01:3.8184796368452356e-01:1.0480143375720610e+00:2.3037617141783398e-01:1.9428782632801502e+00:4.7341170395352683e-01:2.5836301167140343e+00:4.1942899180852905e-01:3.0031648827501423e+00:3.1095279792322122e-01:3.5999905831860155e+00 + CVs 20 + -9.2737918261894328e-02 4.1081349016433955e-01 2.3070542846418701e-01 + -2.1753708646798489e-01 7.9676008051952185e-01 3.8736399013543410e-01 + -3.4622382871767243e-01 1.1708553656145004e+00 4.8052281843434186e-01 + -4.8267976537571000e-01 1.5270310824690398e+00 5.2877290961917101e-01 + -6.5487455192007415e-01 1.8395680227062914e+00 5.5994750113397473e-01 + -8.7489557046620936e-01 2.0759445402600498e+00 5.9868636606329828e-01 + -1.1166328685676394e+00 2.2083357167747435e+00 6.5050081924542269e-01 + -1.3340258491767463e+00 2.2264164802426483e+00 7.0795409083264227e-01 + -1.4945216339966918e+00 2.1373196459152970e+00 7.5804776062520962e-01 + -1.5922793362988021e+00 1.9363090254993383e+00 7.8578495227230238e-01 + -1.6606251557626639e+00 1.6085908169474665e+00 7.6328489678397049e-01 + -1.8269012595784786e+00 1.1397864747516346e+00 6.3227657442159180e-01 + -2.3745365365758442e+00 5.7552134955756951e-01 4.1273295277396910e-01 + -3.3513002239525478e+00 2.3083409301640251e-01 4.8133383304371802e-01 + -4.0938503347936930e+00 1.5830039845961585e-01 8.7887001751940219e-01 + -4.5144690911795395e+00 7.1004105372722420e-02 1.2798575701178543e+00 + -4.6570320096244000e+00 -1.3257810548299431e-01 1.4253196025587442e+00 + -4.5250321500635184e+00 -3.3160378824040221e-01 1.2493816621147493e+00 + -4.9303655128645918e+00 -6.5530577840620641e-01 1.5237874565981420e+00 + id 11857 + loc 7.6180648803710938e-01 4.6406745910644531e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7433703706374358e-01:3.4480322542258779e-01:3.4738641656867353e-02:3.2487331579460094e-01:7.2642635018762103e-01:4.7433229369337299e-01:1.0003025787281072e+00:3.2620245249004043e-01:1.9475490844439727e+00:3.9632585869960529e-01:2.2929538376122758e+00:3.4599522415038336e-01:2.9015907301685626e+00:2.7629075801353414e-01:3.5071233741599848e+00 + CVs 20 + 1.9084786683080390e-03 3.1506603017542956e-01 3.0073821083672320e-01 + -1.6349272780428969e-02 5.8779044683684467e-01 5.6605692887652470e-01 + -3.9142316976357561e-02 8.2775695122041859e-01 8.1789521690002842e-01 + -6.3758753144909142e-02 1.0405631064992460e+00 1.0708889534259514e+00 + -9.2347089369509416e-02 1.2241111959103084e+00 1.3273463295990575e+00 + -1.2193383135137981e-01 1.3772014992857233e+00 1.5845385984665865e+00 + -1.4525968510586162e-01 1.5044090154927621e+00 1.8411857129349483e+00 + -1.5447307273244004e-01 1.6152797165172070e+00 2.0988816089926541e+00 + -1.4724629735845951e-01 1.7197183059122039e+00 2.3567166327532596e+00 + -1.2759572158490584e-01 1.8243231119587349e+00 2.6130079313552237e+00 + -1.0099936032363521e-01 1.9239694003300096e+00 2.8746906380565020e+00 + -7.3368236446148760e-02 1.9939688177986514e+00 3.1550433433869927e+00 + -4.5803994851010277e-02 1.9979391259734984e+00 3.4611855548205646e+00 + -1.6474683582331950e-02 1.9018695939360961e+00 3.7868127734656354e+00 + 1.4844846714097137e-03 1.6973015581973259e+00 4.1064231336524335e+00 + -1.5126361488737694e-02 1.4166046473197322e+00 4.3797125440347848e+00 + -6.7463308491828577e-02 1.1112968219723820e+00 4.5746156950193795e+00 + -1.1503212192510237e-01 7.9504726760734123e-01 4.6963678451075266e+00 + -3.5072538338693560e-02 2.9361196873722217e-01 4.8100181757468556e+00 + id 11858 + loc 8.6131370067596436e-01 4.6469748020172119e-01 1090 + blend 0.0000000000000000e+00 + interp 4.6948797030881129e-01:4.6948327542910823e-01:4.0908454272543093e-01:3.4027796920530928e-01:1.1424935029908589e+00:2.9191268380678687e-01:2.3695171772801311e+00:3.3424227028236791e-01:3.6297578356804006e+00 + CVs 20 + -1.5319838610397843e-01 4.6501483612331163e-01 -1.3174668086214641e-01 + -1.9024990012031887e-01 8.5394500227055403e-01 -2.2857736009588225e-01 + -1.7050498185794222e-01 1.2031093020030987e+00 -3.1831679625736159e-01 + -1.1719165880269866e-01 1.5224567150330754e+00 -4.1078429331035460e-01 + -3.0667413936903198e-02 1.8044508589130437e+00 -5.0074373820799845e-01 + 8.4684191239579820e-02 2.0474647711650831e+00 -5.8444837584289022e-01 + 2.2928994447818263e-01 2.2631629038421091e+00 -6.5536912732503727e-01 + 4.2071063095922767e-01 2.4641856172940511e+00 -6.9402979547679911e-01 + 6.7152692306867146e-01 2.6281897182220075e+00 -6.8169489526732541e-01 + 9.5191026455807626e-01 2.7238113655237361e+00 -6.3781010558239781e-01 + 1.2247106157331740e+00 2.7643774858298036e+00 -5.9725160843093361e-01 + 1.4763319741825625e+00 2.7840896540415301e+00 -5.7214023011307824e-01 + 1.6971120714114722e+00 2.8174396239874935e+00 -5.5668023026994273e-01 + 1.8698377842810419e+00 2.9041674392359864e+00 -5.2605107827806474e-01 + 1.9818485635717296e+00 3.0739888900721848e+00 -4.1854927994750346e-01 + 2.0250713235826163e+00 3.2911457179566304e+00 -1.7244620052729887e-01 + 1.9547406503664044e+00 3.4796568618185200e+00 2.4713447469509531e-01 + 1.7535656944734717e+00 3.5126279083652587e+00 8.0839994600452547e-01 + 1.9108538478103960e+00 3.4550552257701597e+00 5.7643902868473484e-01 + id 11859 + loc 2.2237826883792877e-01 1.4151073060929775e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8532253021298094e-01:4.8531767698767886e-01:6.1925804284275587e-01:2.6945474723051310e-01:9.9633698892366584e-01:4.2366519271997843e-01:1.4183822896413627e+00:2.9019938364436709e-01:2.0831943323059980e+00:3.0364058445933323e-01:3.1756651868152863e+00:4.4689538145652158e-01:3.8999326877106308e+00 + CVs 20 + 2.2825337541860080e-01 3.1224831267717740e-01 2.6388581899240732e-01 + 3.9277028927881352e-01 5.4955522741452456e-01 4.9765910650857914e-01 + 5.6447743843604004e-01 7.4741183392429100e-01 6.9127942903672457e-01 + 7.5632613725446318e-01 8.9598480206577114e-01 8.2042466359069310e-01 + 9.4665466254569097e-01 9.8838511511207339e-01 8.8517643298971693e-01 + 1.1383759422747206e+00 1.0585934128050956e+00 9.1621363236309883e-01 + 1.3457970821536391e+00 1.1363079957616258e+00 9.5312384965192298e-01 + 1.5980460663924569e+00 1.2349066845609735e+00 1.0530208783031314e+00 + 1.8574072088738962e+00 1.3693434006737546e+00 1.3251701788868169e+00 + 1.9167743485151778e+00 1.4899598906777571e+00 1.7260764567406994e+00 + 1.7623527816852405e+00 1.5322034664272428e+00 2.0177466090172036e+00 + 1.5145046457630900e+00 1.5283426779539357e+00 2.1765838528112300e+00 + 1.2203302943570979e+00 1.4963972674287176e+00 2.2336385709130608e+00 + 9.5814635846783258e-01 1.3999242552369711e+00 2.1678650191648821e+00 + 8.1794455193746129e-01 1.2188451447370987e+00 1.9879262470673238e+00 + 7.8330966454452944e-01 9.6317281208376770e-01 1.7437872070555387e+00 + 7.5816388992765393e-01 6.2513910488218238e-01 1.4787607279901702e+00 + 6.1176781812702608e-01 1.6773272126528338e-01 1.1971874448837556e+00 + 3.5320129393793265e-01 1.1955429965488165e-01 1.1991795850774605e+00 + id 11860 + loc 7.0079416036605835e-01 9.4542855024337769e-01 1048 + blend 0.0000000000000000e+00 + interp 4.3912737361310239e-01:4.3912298233936625e-01:4.7928966695199848e-01:4.3536061510058893e-01:1.0101791792220869e+00:3.2389457904782187e-01:1.9598516871469258e+00:4.1145952765507793e-01:2.3892729056595483e+00:3.4889477218872811e-01:3.0004564566944993e+00:2.4463134936280242e-01:3.5222265775219253e+00:3.8654322219858989e-01:3.9877564528107121e+00 + CVs 20 + 1.6488584371237991e-01 9.8091015683291860e-01 -4.5116538225847014e-01 + 3.6050117731564318e-01 1.9622575426146320e+00 -8.0988718877369892e-01 + 6.4321299079227467e-01 2.9421556243012930e+00 -9.9267888669755977e-01 + 1.0369732126136586e+00 3.8719470365645456e+00 -9.1360594589573685e-01 + 1.5406842801292564e+00 4.6394397142628634e+00 -5.1617844607624641e-01 + 2.0798348727611140e+00 5.0790293786942460e+00 1.7416314141232192e-01 + 2.5236576751549005e+00 5.0802390750605886e+00 9.8580399110838957e-01 + 2.7957411446277844e+00 4.7005699348970778e+00 1.7200338826491561e+00 + 2.9116217513637053e+00 4.0806759368035266e+00 2.2974599400489462e+00 + 2.9057954972723197e+00 3.3407703917483227e+00 2.7347479785869124e+00 + 2.7604744830991788e+00 2.5781168019843448e+00 3.0948661724408120e+00 + 2.4130886609776332e+00 1.8574607331962487e+00 3.4222548470860685e+00 + 1.8504630697479467e+00 1.1720024101622746e+00 3.7228136394241407e+00 + 1.1534747793654794e+00 4.7695416519315614e-01 3.9739133728085552e+00 + 4.8793875647478080e-01 -1.9490134056330710e-01 4.1939254407469830e+00 + 3.2242647711592638e-02 -7.6615557485155805e-01 4.4724633241275775e+00 + -1.2203537980665738e-01 -1.2161580058959507e+00 4.8384101996986955e+00 + 1.7319867763437968e-02 -1.4526617587610857e+00 5.2618108047552381e+00 + 3.4575068700430134e-01 -1.2013451800787491e+00 5.8677327624513040e+00 + id 11861 + loc 8.2203459739685059e-01 4.8780533671379089e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9478965611118059e-01:3.4507846388385099e-01:8.6048882734121412e-01:3.5924785961696443e-01:1.2976505591235497e+00:3.7234262690757103e-01:1.9980494088527190e+00:4.9478470821461951e-01:2.4548131068596604e+00:3.3117541671375339e-01:3.0006844908214152e+00:3.3259252464107808e-01:3.9993042272502750e+00 + CVs 20 + -1.0739156952449641e-01 1.9342968766618249e-01 2.5007531701131558e-01 + -2.1703149540043598e-01 3.8895084647243638e-01 4.9073398849630256e-01 + -3.3313157213182276e-01 5.8759279795134856e-01 7.2587738990314032e-01 + -4.6082367997991625e-01 7.8603532371090590e-01 9.5573252551512711e-01 + -6.0582667128636702e-01 9.7767150339944331e-01 1.1781855979723990e+00 + -7.7111400832308219e-01 1.1551312126271256e+00 1.3938135060742740e+00 + -9.5658303808329437e-01 1.3113518040604797e+00 1.6072073110416958e+00 + -1.1579780890274092e+00 1.4390603456812794e+00 1.8285863056254443e+00 + -1.3644997631498037e+00 1.5298992073253683e+00 2.0739749615573251e+00 + -1.5602999175688910e+00 1.5738153245113591e+00 2.3545109924529086e+00 + -1.7300619805659745e+00 1.5599361271037846e+00 2.6691293729551786e+00 + -1.8634984898130373e+00 1.4795171897945698e+00 3.0072169768228463e+00 + -1.9549414316047777e+00 1.3278894247416755e+00 3.3484676816559431e+00 + -1.9998082797247501e+00 1.1057097939189635e+00 3.6651780173965669e+00 + -1.9889672109969605e+00 8.1698934189327477e-01 3.9305063596458458e+00 + -1.9061670077070505e+00 4.7426987374256807e-01 4.1162586017823788e+00 + -1.7460543764836098e+00 1.1059812387543899e-01 4.1928757564435628e+00 + -1.5279160873447311e+00 -2.4053538568501232e-01 4.1645103416597431e+00 + -1.2834458799915172e+00 -5.9723914993741789e-01 4.1186197561697693e+00 + id 11862 + loc 2.1663044393062592e-01 5.3501391410827637e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2744748878124184e-01:3.4129965394904999e-01:2.5660964713697476e-01:3.6297564812924843e-01:9.8302768409442665e-01:2.6722156541053221e-01:1.5198575514447574e+00:3.0104503584904746e-01:2.5302977164176395e+00:4.2744321430635407e-01:3.0000687660510716e+00:3.4619230241723636e-01:3.6145119036771534e+00 + CVs 20 + 3.6413692163024466e-03 2.8349735558392264e-01 3.4854329053947419e-03 + 2.8097472138331581e-02 5.8486045478288173e-01 -3.4831591289513894e-02 + 6.1447567459416388e-02 8.8657105128437341e-01 -8.2840073241194370e-02 + 1.0230007999840560e-01 1.1929236295313330e+00 -1.3163477690796871e-01 + 1.5049275500486539e-01 1.5135027635588616e+00 -1.9035294024895033e-01 + 2.0311165635010853e-01 1.8618496968259097e+00 -2.7218415083839054e-01 + 2.5893170800020515e-01 2.2420435887970775e+00 -4.0137596793536917e-01 + 3.2705840836751987e-01 2.6367240346623455e+00 -6.1163585055891634e-01 + 4.3483265775631724e-01 2.9880832806977651e+00 -9.1870333773834889e-01 + 6.0413175853947088e-01 3.2141844765968677e+00 -1.2771432519547319e+00 + 8.2019475103832085e-01 3.2747280979890219e+00 -1.6034004173493150e+00 + 1.0574109498737045e+00 3.1867399603929281e+00 -1.8475472130386172e+00 + 1.3319226535992734e+00 2.9984565903789480e+00 -2.0196138787620268e+00 + 1.6845519145275785e+00 2.7492317411523404e+00 -2.1603280719776912e+00 + 2.1045714774970157e+00 2.4280734796842536e+00 -2.3206152698121953e+00 + 2.5114353343427402e+00 2.0036006829836648e+00 -2.5651070160408320e+00 + 2.7758173265558317e+00 1.5234840301468100e+00 -2.9682266305552303e+00 + 2.7917618703756739e+00 1.1370564915099373e+00 -3.5019835055299602e+00 + 2.6402568852954351e+00 9.0775467656454134e-01 -4.0199477482802006e+00 + id 11863 + loc 5.7539188861846924e-01 9.1526454687118530e-01 1053 + blend 0.0000000000000000e+00 + interp 1.4895547812138490e+00:3.8725321034874205e-01:3.1250648829765182e-01:6.1908958738000874e-01:7.6558167975796909e-01:1.4895447812138489e+00:2.3670407922638570e+00:5.3289265921169238e-01:2.7326792422424364e+00:3.3920139605421717e-01:2.8748839998092719e+00:5.2282474725338679e-01:3.1404914617615187e+00:3.3842020530051065e-01:3.9549887790175502e+00 + CVs 20 + 5.8967175071689054e-02 4.6028421348774234e-01 3.0556859136737879e-01 + 3.3075171290919192e-02 8.3659979619347835e-01 5.5348184819495172e-01 + -2.5851176108152019e-02 1.1642261346901432e+00 7.8184588711700120e-01 + -9.4082455520302810e-02 1.4539089607892326e+00 1.0058781198344604e+00 + -1.6817668577707523e-01 1.7006729970559105e+00 1.2234958453422931e+00 + -2.4141428250831021e-01 1.9046841799175567e+00 1.4315769015953623e+00 + -3.0790052448297334e-01 2.0723953053278423e+00 1.6327701095053451e+00 + -3.7127310126240332e-01 2.2152709205075274e+00 1.8395517958159133e+00 + -4.5519512750152180e-01 2.3449340057207815e+00 2.0641675547405214e+00 + -5.9846814128711601e-01 2.4609575211627641e+00 2.3047451210768672e+00 + -8.2744983121044258e-01 2.5156539483009035e+00 2.5298341256334771e+00 + -1.0928536339567549e+00 2.4341885111340353e+00 2.6827259827152936e+00 + -1.2929271892103527e+00 2.1908592836257688e+00 2.7551819868010572e+00 + -1.3359620538531953e+00 1.7849769712876480e+00 2.7712140788118269e+00 + -1.2070427451402228e+00 1.2318447045435326e+00 2.7156009414672413e+00 + -9.8010249749034550e-01 5.7585633190898489e-01 2.5122097355090891e+00 + -7.2872214353251530e-01 -7.9584248140036618e-02 2.0627437988022135e+00 + -4.9806629621371701e-01 -5.0950011585355925e-01 1.3790091292688822e+00 + -3.8388056118906388e-01 -5.3800523048911464e-01 9.6211998904177765e-01 + id 11864 + loc 9.5504641532897949e-01 7.1259766817092896e-01 410 + blend 0.0000000000000000e+00 + interp 3.4378081312629305e-01:3.4377737531816183e-01:1.8934131017964706e-03:2.5905176627239418e-01:7.3558188816692660e-01:3.1415071987200233e-01:1.8329336572214454e+00:2.8284665984254115e-01:2.3771597313403667e+00:2.0174171460266524e-01:3.1971129195382018e+00 + CVs 20 + 4.6230996819776538e-01 3.0880268449486065e-01 -1.3322972682996287e-01 + 8.2905315113409550e-01 5.6748099112699735e-01 -2.5805230506543786e-01 + 1.2068226251725962e+00 8.3100360044928334e-01 -3.8447384051841804e-01 + 1.6485386749086341e+00 1.1114968850019760e+00 -5.2713862779271647e-01 + 2.1618042347309765e+00 1.3764162735811309e+00 -7.1772299912813176e-01 + 2.7360563139260692e+00 1.5762467308877850e+00 -9.9505518372591217e-01 + 3.3381231878116004e+00 1.6578129127736490e+00 -1.3814362623487559e+00 + 3.9307232502756744e+00 1.5786644365711830e+00 -1.8567928260332609e+00 + 4.4944966487943239e+00 1.3123477775414076e+00 -2.3611773537767937e+00 + 5.0102114506256852e+00 8.5214617994155684e-01 -2.8134705423293895e+00 + 5.4425437534607930e+00 2.4284713050766626e-01 -3.1367030755270267e+00 + 5.7780362442279003e+00 -4.2374569851203603e-01 -3.3351962705332090e+00 + 6.0368111985102662e+00 -1.0879039674775046e+00 -3.4966998464808468e+00 + 6.2362847724431099e+00 -1.7220623152906351e+00 -3.6954309073755063e+00 + 6.3846070570319622e+00 -2.3115797221999803e+00 -3.9508355469597154e+00 + 6.4878186055711691e+00 -2.8620867088741027e+00 -4.2373958457078817e+00 + 6.5549218470965371e+00 -3.3974781866854231e+00 -4.5273796121414112e+00 + 6.6067472556702569e+00 -3.9503024607614043e+00 -4.8313601044103107e+00 + 6.6632708436129606e+00 -4.5531130050421496e+00 -5.1890895940494453e+00 + id 11865 + loc 9.0099520981311798e-02 1.3496644794940948e-01 416 + blend 0.0000000000000000e+00 + interp 3.2181012268549886e-01:2.2606852864298488e-01:3.0630051179797113e-02:3.1547490457278671e-01:6.8722757021119452e-01:1.5590867418602500e-01:1.1749306419744834e+00:2.3631871981235539e-01:1.9486708208679182e+00:2.6003026335527119e-01:2.3013166496046544e+00:2.9268198345896662e-01:2.9763407503013779e+00:3.2180690458427202e-01:3.5975684295227222e+00 + CVs 20 + -1.8629530228215208e-01 1.1568066582370219e-01 -2.9957962030530499e-01 + -3.4625013689191242e-01 1.9516906525719410e-01 -4.4679989837869433e-01 + -5.0928958770688726e-01 2.6214598390734767e-01 -5.4446159843944253e-01 + -6.8313263177028327e-01 3.3184428504455460e-01 -6.4091191821863991e-01 + -8.6563804814705259e-01 4.0367398983872227e-01 -7.3921010033500112e-01 + -1.0546565792413682e+00 4.7706218511970805e-01 -8.4463908567118273e-01 + -1.2473548899837086e+00 5.5082491850304471e-01 -9.6334396627598573e-01 + -1.4400954445295351e+00 6.2286373596504507e-01 -1.1010956562999601e+00 + -1.6296036712490229e+00 6.9127430011132185e-01 -1.2641366514711267e+00 + -1.8121786028931006e+00 7.5468129747901969e-01 -1.4602953071231166e+00 + -1.9803083850006304e+00 8.0796214491021767e-01 -1.6946871627958844e+00 + -2.1232749620267217e+00 8.3942553314644341e-01 -1.9632185399826438e+00 + -2.2314924561381115e+00 8.3855983923409094e-01 -2.2532017620581311e+00 + -2.2982204476247339e+00 8.0454505903784979e-01 -2.5468394452997694e+00 + -2.3212449814242513e+00 7.4394373456252061e-01 -2.8237523360223218e+00 + -2.3047749029797373e+00 6.6224863286821645e-01 -3.0729009886082590e+00 + -2.2554385288092798e+00 5.5963214895438007e-01 -3.2973269288343827e+00 + -2.1787747571810154e+00 4.3494942078214616e-01 -3.4992208744665723e+00 + -2.0855809749516139e+00 3.1528586147972204e-01 -3.6051090995122950e+00 + id 11866 + loc 9.0199273824691772e-01 6.8142455816268921e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7818081534463069e-01:4.0401312489683538e-01:3.3207433963858601e-01:4.2430105027078485e-01:9.4551796528696486e-01:2.8512266805631287e-01:1.1386162005532836e+00:2.8373080071115969e-01:2.1499313648823692e+00:3.5250662604087585e-01:2.8411491597073106e+00:4.3813942740521339e-01:3.0567612169620357e+00:4.7817603353647725e-01:3.5287393351929222e+00:4.2201776979349642e-01:3.9907162124687385e+00 + CVs 20 + -1.8249672806750367e-01 1.9973519698088193e-01 1.6312154946294000e-01 + -3.5205955793266630e-01 3.7975949539787979e-01 3.0123527143472817e-01 + -5.0789222431964598e-01 5.5488891496770543e-01 4.2485091987873846e-01 + -6.5095029446155073e-01 7.4009067814379859e-01 5.4488815345610864e-01 + -7.9250702326964240e-01 9.4471319727892156e-01 6.5985442850490161e-01 + -9.5032121592222574e-01 1.1756785315959046e+00 7.6362537140826969e-01 + -1.1455171702464626e+00 1.4312035032008383e+00 8.4271312343412308e-01 + -1.3936648970866379e+00 1.6952702710496097e+00 8.7663652252812518e-01 + -1.6877756331616298e+00 1.9425195444839365e+00 8.4554303259666252e-01 + -1.9910740079564901e+00 2.1495772701615179e+00 7.4019123455532299e-01 + -2.2640284709664074e+00 2.3086317185935625e+00 5.6898640520024535e-01 + -2.4965336029579688e+00 2.4264084455699706e+00 3.4694611945671694e-01 + -2.6918449765881243e+00 2.5107647527898593e+00 8.0801013305813130e-02 + -2.8408069875568218e+00 2.5625556518970880e+00 -2.3499258803429801e-01 + -2.9269822358784485e+00 2.5706155393644652e+00 -6.2029651675497888e-01 + -2.9430611854764033e+00 2.4828011056474626e+00 -1.0511462528023021e+00 + -2.8585912997799463e+00 2.2399373010928243e+00 -1.4301345286404969e+00 + -2.6826184512072415e+00 1.8246873213212376e+00 -1.6763668512225569e+00 + -2.7886796668330187e+00 1.6361592322510310e+00 -1.4353774630626523e+00 + id 11867 + loc 5.4740071296691895e-01 3.1065782904624939e-01 1054 + blend 0.0000000000000000e+00 + interp 4.3982306707344976e-01:4.3981866884277904e-01:2.8339945258368138e-02:3.5123560523422392e-01:5.6638526594061678e-01:4.2766856384168656e-01:1.0004648652654953e+00:2.8047319312656627e-01:1.9222185783580554e+00:3.9318697082579562e-01:2.8732839455653796e+00:4.1145888713269951e-01:3.4938035289057154e+00 + CVs 20 + -1.8783107179308522e-01 3.8475403146181719e-01 1.8671334433300557e-01 + -3.7098219136058092e-01 7.8095549531872255e-01 3.4116973806556011e-01 + -5.2762692405584632e-01 1.2045643211045687e+00 4.4959688060280162e-01 + -6.8009222369763955e-01 1.6335602157265365e+00 5.2126678823925410e-01 + -8.9060635477363947e-01 2.0197356149280559e+00 5.9237329978438991e-01 + -1.1966308010032858e+00 2.3062945308706748e+00 7.0294233863399824e-01 + -1.5835897355463724e+00 2.4370358319311531e+00 8.7279940187807681e-01 + -2.0199436684562495e+00 2.3675543076436667e+00 1.0915724724317533e+00 + -2.4737396168034600e+00 2.0729016640703479e+00 1.3105452765704295e+00 + -2.9313085442530280e+00 1.5807319038270515e+00 1.4475297433692007e+00 + -3.4287923412122576e+00 1.0083325108229841e+00 1.4198566273790048e+00 + -3.9832132612882791e+00 6.0009523149750521e-01 1.2915850975275927e+00 + -4.4567802543203463e+00 5.9847189882711538e-01 1.3978899320784601e+00 + -4.5003201143762412e+00 8.8590375734480931e-01 1.8527340629777629e+00 + -4.3671720133133203e+00 1.0687169069740163e+00 2.2781944740495845e+00 + -4.5029864780666893e+00 1.1136637215208562e+00 2.6724528392178928e+00 + -5.1076744724284850e+00 9.0977574885679680e-01 3.0377932808538040e+00 + -6.0919432186942419e+00 2.6327368649403571e-01 3.0534434196447391e+00 + -6.6516388304897465e+00 1.3497928492476197e-01 3.1889696293629752e+00 + id 11868 + loc 1.3379634916782379e-01 4.3393203616142273e-01 384 + blend 0.0000000000000000e+00 + interp 4.8539270582153199e-01:4.8538785189447381e-01:4.0815364532606035e-02:2.8465109558153062e-01:4.4132483439228742e-01:3.2738489454125580e-01:1.0969514338248532e+00:3.4169449173078509e-01:2.3004370509186720e+00 + CVs 20 + -4.2426645644570316e-01 2.7606220776057155e-01 -1.2133009551135183e+00 + -7.5871984717713215e-01 3.6730529105879117e-01 -1.9259009785219106e+00 + -1.0760446661365435e+00 3.8227431251853738e-01 -2.5325818962495923e+00 + -1.3913853712064754e+00 3.6233913460178668e-01 -3.1925880641733784e+00 + -1.6945176350569078e+00 2.8022722975831216e-01 -3.8974881540765560e+00 + -1.9812136368718676e+00 1.1702438196237414e-01 -4.6249854639545491e+00 + -2.2597049772245539e+00 -1.3287368316353676e-01 -5.3475571417079735e+00 + -2.5420162453977562e+00 -4.6576724170321543e-01 -6.0332345459186500e+00 + -2.8248944635663280e+00 -8.6348037369269415e-01 -6.6361493048326388e+00 + -3.1026314286599677e+00 -1.2968582675278584e+00 -7.1254142648648644e+00 + -3.3779474283837443e+00 -1.7318041261453896e+00 -7.4958184169667224e+00 + -3.6594695081675210e+00 -2.1411211595845256e+00 -7.7668357917583410e+00 + -3.9543868755938281e+00 -2.5159075874812746e+00 -7.9736495303132999e+00 + -4.2630480507644180e+00 -2.8678066353587162e+00 -8.1514566779007520e+00 + -4.5801786136225804e+00 -3.2214925621371240e+00 -8.3179261935985398e+00 + -4.8989582997751970e+00 -3.6049788567484500e+00 -8.4679803068342352e+00 + -5.2134697127680507e+00 -4.0389252832762983e+00 -8.5798799553375122e+00 + -5.5041617958852989e+00 -4.5237258474973441e+00 -8.6231962937844280e+00 + -5.6920299652856183e+00 -4.9884756393817247e+00 -8.5487114487820293e+00 + id 11869 + loc 1.9719980657100677e-01 1.4140279963612556e-03 1075 + blend 0.0000000000000000e+00 + interp 4.4972975164101719e-01:4.3547237583763726e-01:8.1916992932627219e-02:3.3561556947827292e-01:9.9799155668395523e-01:4.0808676612645567e-01:1.5595030508307945e+00:2.6056640892978622e-01:2.0018892126914967e+00:3.0306021779356601e-01:2.7064897627853139e+00:4.4972525434350080e-01:3.1399516963531600e+00:3.4428922825862779e-01:3.8223795990920078e+00 + CVs 20 + -1.6620450252772359e-01 3.2086088386258560e-01 4.2869847000919115e-02 + -3.4705509947282026e-01 6.5455390875866304e-01 1.1558814831589290e-01 + -5.3009159372779435e-01 9.9795112495932092e-01 2.1605803311677019e-01 + -7.3148992011481428e-01 1.3472984852351404e+00 3.2509287809654380e-01 + -9.8016982331864611e-01 1.6951934037021219e+00 4.1636602194231864e-01 + -1.2938012390635365e+00 2.0272016787136646e+00 4.6728879812454671e-01 + -1.6810440113678335e+00 2.3246804342933873e+00 4.4775363071890573e-01 + -2.1389860655837434e+00 2.5520844225922872e+00 3.0024171608724370e-01 + -2.6159998763533263e+00 2.6352430711993828e+00 -2.8626329834884556e-02 + -3.0203630898218172e+00 2.5205141760442653e+00 -4.8781485702546923e-01 + -3.3247356989437136e+00 2.2262199704370591e+00 -9.5668701283171365e-01 + -3.5663208229217047e+00 1.7897772897210387e+00 -1.3104818702971872e+00 + -3.7820547139182756e+00 1.2644236646527278e+00 -1.4833686957516634e+00 + -3.9513812118714031e+00 6.5675039633063947e-01 -1.5912057537673217e+00 + -4.0038962152337190e+00 -6.1280905177970135e-02 -1.8180419177640430e+00 + -3.8988941828007575e+00 -7.5878573910214664e-01 -2.2971831268644181e+00 + -3.6958331179370472e+00 -1.2044145063832232e+00 -3.0380994212842243e+00 + -3.4918005260143077e+00 -1.3643224093465982e+00 -3.8204750075558453e+00 + -3.3244677060504069e+00 -1.6583369061875997e+00 -4.2512642576033564e+00 + id 11870 + loc 8.0483841896057129e-01 4.6679833531379700e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8394750346382231e-01:4.8394266398878771e-01:4.4898842008668560e-02:3.9220180318979331e-01:6.6923221924591081e-01:3.8411560824808749e-01:1.2545838701227194e+00:3.7329364796007353e-01:2.0045635852265664e+00:2.5289082388918543e-01:2.7822876647649601e+00:3.8253827130625268e-01:3.6990948735645803e+00 + CVs 20 + -2.7055745148591803e-01 2.5331425382424300e-01 1.9225838546066265e-01 + -5.1608844516978081e-01 5.0151469562727680e-01 3.6162641295364850e-01 + -7.5027251234650172e-01 7.3553673134910158e-01 5.1727936840597644e-01 + -9.7745963674940151e-01 9.5587845147772832e-01 6.6065609172544359e-01 + -1.1886403983387099e+00 1.1727188240505164e+00 7.8745556374851811e-01 + -1.3855071476510261e+00 1.3966144817709500e+00 9.2010414898840320e-01 + -1.5855479107969572e+00 1.6204011713422894e+00 1.1026802837654159e+00 + -1.8016988401306868e+00 1.8373053643079649e+00 1.3523607936281588e+00 + -2.0393368891459884e+00 2.0554803163301774e+00 1.6611498335880164e+00 + -2.3142499435658248e+00 2.2817258317911970e+00 2.0242433039437984e+00 + -2.6656715632551329e+00 2.5005978413488852e+00 2.4443414699513020e+00 + -3.1475243318750787e+00 2.6635237450536358e+00 2.9270036979002452e+00 + -3.7703121078342510e+00 2.6662555702029618e+00 3.4805882741565326e+00 + -4.4037581307051497e+00 2.3893482110059283e+00 4.0690697041274602e+00 + -4.8730295374935073e+00 1.8494580336654995e+00 4.5961449731971653e+00 + -5.1733017515458393e+00 1.0894221042027061e+00 4.9970783682724207e+00 + -5.2561088719393849e+00 -7.8260080016304245e-02 5.2631354274212798e+00 + -4.6805667559471624e+00 -1.1976811699983461e+00 5.4269533799812288e+00 + -4.4115505739616196e+00 -1.1653510182569506e+00 5.5008973655127651e+00 + id 11871 + loc 6.2099760770797729e-01 3.3697551488876343e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8129244304304408e-01:3.5607649370604488e-01:2.1786112773691801e-04:3.9810180578359744e-01:4.3957211049635259e-01:2.9950167831866409e-01:1.1920544505760418e+00:2.8473402842126422e-01:1.9590230254922765e+00:2.9444123637001457e-01:2.9535354603429327e+00:4.8128763011861370e-01:3.2574180820161978e+00 + CVs 20 + 2.4815161874557226e-01 3.8202244557055270e-01 -1.7615134036455263e-01 + 4.4174018848745739e-01 7.4566892600395107e-01 -3.1200858479415550e-01 + 5.9921218361848405e-01 1.1170032187254118e+00 -4.4599697918697323e-01 + 7.4744376706765248e-01 1.5033766490558975e+00 -5.7531450015234509e-01 + 9.2252377052382450e-01 1.8985583483820698e+00 -6.6777783620816999e-01 + 1.1429827287023433e+00 2.2838504732713418e+00 -6.9852135157101902e-01 + 1.3966610925491125e+00 2.6294969125749916e+00 -6.6359823356215930e-01 + 1.6544047572467866e+00 2.9142276421856996e+00 -5.7693567224442988e-01 + 1.9004323059319954e+00 3.1335274075463690e+00 -4.3870129976639327e-01 + 2.1312193525094294e+00 3.2723556180882145e+00 -2.0828195682247630e-01 + 2.3363593321849341e+00 3.2954290706807225e+00 1.6272171303201244e-01 + 2.5034970184110645e+00 3.1343549048668038e+00 6.7592989608213494e-01 + 2.6179990203342607e+00 2.7708456372420889e+00 1.1520324251198388e+00 + 2.6787731903323762e+00 2.3795585135984969e+00 1.3881652027863662e+00 + 2.7108590904473644e+00 2.0927211802737280e+00 1.3967061675122392e+00 + 2.7324652920375030e+00 1.8801316930368059e+00 1.2638445514235048e+00 + 2.7359311074144816e+00 1.6502985213986552e+00 1.0978091126602645e+00 + 2.6904030189498940e+00 1.3820145663396028e+00 1.0959108527928567e+00 + 2.5443462896832822e+00 1.1682877489008441e+00 1.4613646031046366e+00 + id 11872 + loc 1.5625925734639168e-03 1.5727369114756584e-02 1074 + blend 0.0000000000000000e+00 + interp 3.4497367195018036e-01:2.2071899225352862e-01:7.4636840332125853e-01:2.6599237106600909e-01:1.2887129806435049e+00:2.9642291442193375e-01:2.4292542512968995e+00:3.1972389539418244e-01:3.0093794410045089e+00:3.4497022221346085e-01:3.8837676090783297e+00 + CVs 20 + -1.6043143591723710e-01 3.9710494196202162e-01 -9.9042255306064808e-02 + -3.5572562756532078e-01 7.8216102934973364e-01 -1.9785846392997716e-01 + -5.7496961163356897e-01 1.1651782987869188e+00 -2.6271564301253719e-01 + -8.0080702919445446e-01 1.5506950669661570e+00 -2.7021490890208566e-01 + -1.0177212951514074e+00 1.9250376287627180e+00 -2.1293982190477639e-01 + -1.2309110856997469e+00 2.2337045390093713e+00 -1.1452590208442504e-01 + -1.4451309729867505e+00 2.4072966932260633e+00 -1.9710436621712790e-02 + -1.6344556135103920e+00 2.4384431633568595e+00 5.2664175904450938e-02 + -1.7809864119140300e+00 2.3766575872947553e+00 1.1121688860358048e-01 + -1.9265348216034395e+00 2.2571126094789520e+00 1.4308219890411272e-01 + -2.0959138077494432e+00 2.0603512643792019e+00 1.0032780131228430e-01 + -2.2378499313876548e+00 1.7942747237960313e+00 -2.1255162267104721e-02 + -2.3191208700877630e+00 1.5075254564281064e+00 -1.6587018183773311e-01 + -2.3509701520134292e+00 1.2630630267987915e+00 -2.4667525675934959e-01 + -2.3737702996273140e+00 1.1171544814571814e+00 -2.1988076603424611e-01 + -2.4155861455881347e+00 1.0641969424048625e+00 -1.4800091931593493e-01 + -2.5040001334505209e+00 1.0913003944585520e+00 -9.5379924458386889e-02 + -2.5903070506498604e+00 1.1044707066630750e+00 -1.0230078349281990e-01 + -2.3011655824774664e+00 9.5085534003914529e-01 4.7453795000101273e-02 + id 11873 + loc 4.1266456246376038e-01 5.4408389329910278e-01 1048 + blend 0.0000000000000000e+00 + interp 3.0963388420257831e-01:3.0963078786373632e-01:1.2585609293622846e-02:2.9888402836945688e-01:7.6934344731511106e-01:2.8443713692125638e-01:1.7209618024832676e+00:2.6783752274115785e-01:2.9298509293779964e+00:2.7493934959134431e-01:3.4032128723251178e+00 + CVs 20 + 1.0173832612179284e-01 6.6417350588955704e-01 -3.1191764936990457e-01 + 1.9061050764974771e-01 1.2794165394940846e+00 -5.3321918318167849e-01 + 2.7636243453410297e-01 1.8754552272192970e+00 -6.8575086555470510e-01 + 3.9202835683909382e-01 2.4987314797378390e+00 -7.7443930458550936e-01 + 6.0462440584947708e-01 3.1618690837603136e+00 -7.7663094568833457e-01 + 9.7663811649568832e-01 3.8353126731176568e+00 -6.9918819599893023e-01 + 1.5688434706001408e+00 4.4607337084220147e+00 -5.8134438602887806e-01 + 2.4138123473827422e+00 4.9094450224921333e+00 -4.8963730618012269e-01 + 3.4361702652974273e+00 5.0327291051555196e+00 -5.2540311172623144e-01 + 4.4991294216850379e+00 4.7510516390122017e+00 -7.6466407577980111e-01 + 5.4358406435535400e+00 4.0309939411492932e+00 -1.1535076329586067e+00 + 6.0514565688229123e+00 2.9698063419141505e+00 -1.5015190091070569e+00 + 6.2604345603082985e+00 1.8558231710053541e+00 -1.6565407415152926e+00 + 6.1598309845005295e+00 1.0043215272958874e+00 -1.6068484309284927e+00 + 5.9000008032094859e+00 6.5405990550272253e-01 -1.4165942450625075e+00 + 5.2486488878214459e+00 1.3346496182210597e+00 -8.1736157221052652e-01 + 1.6735195098174895e+00 -7.1845510211170172e-01 1.4255917505023132e+00 + 2.0626708973492924e+00 -2.1183902360893412e+00 9.7802059245406037e-01 + 2.1669790270647664e+00 -1.7748928303261133e+00 8.2360209436640708e-01 + id 11874 + loc 4.7501921653747559e-01 6.2900501489639282e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3751054408469314e-01:2.7610057514304903e-01:1.3653773959835735e-01:3.5748438303840668e-01:9.5579110623199315e-01:3.8762774901765534e-01:1.5544100599335213e+00:2.8546719409869925e-01:2.0059223132830266e+00:2.9130048850711404e-01:2.7768535361640234e+00:3.8945928344947933e-01:3.0891824234247247e+00:4.3750616897925232e-01:3.8308068432962648e+00 + CVs 20 + 1.0245153710989049e-01 3.3050536525712970e-01 -1.8625590954711418e-01 + 2.1692941973178848e-01 6.7291719337458178e-01 -3.7756793047294057e-01 + 3.3663340476114439e-01 1.0228944320451197e+00 -5.6560218140564422e-01 + 4.5887483339106250e-01 1.3757314374108074e+00 -7.5458925598736959e-01 + 5.8475420845059323e-01 1.7262488977027919e+00 -9.5866181403917450e-01 + 7.1795169517963942e-01 2.0615700272200304e+00 -1.1957897589976494e+00 + 8.6602386028310652e-01 2.3572001442312844e+00 -1.4815971114501094e+00 + 1.0381180433946635e+00 2.5823806041265773e+00 -1.8178889805322944e+00 + 1.2414497623858700e+00 2.7093773472409186e+00 -2.1906570622358350e+00 + 1.4743326595420392e+00 2.7219086160308730e+00 -2.5773797720733200e+00 + 1.7229054758879174e+00 2.6248113783006644e+00 -2.9581922127606703e+00 + 1.9707915896283361e+00 2.4443385611650825e+00 -3.3280972889208442e+00 + 2.2061564756533696e+00 2.2090870093993296e+00 -3.7011527974763223e+00 + 2.4039805725451231e+00 1.9314940136674243e+00 -4.0996821281021596e+00 + 2.5042249928968658e+00 1.6269076337354609e+00 -4.5352398214360710e+00 + 2.4304599954906982e+00 1.3564519636641943e+00 -4.9911020873488399e+00 + 2.1538885361579756e+00 1.2195842699648691e+00 -5.4107718160433427e+00 + 1.7529924014875946e+00 1.2180784801337836e+00 -5.7462779044861918e+00 + 1.4278661779753048e+00 1.0530945289167921e+00 -6.2060341448465230e+00 + id 11875 + loc 8.9383697509765625e-01 2.9480475187301636e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3117180300190947e-01:5.3116649128387949e-01:4.5137367276718932e-01:3.6873164480910214e-01:9.7178487816208803e-01:3.3166819454568985e-01:1.8469401724677064e+00:3.9255589192170698e-01:2.2437694803041750e+00:3.1349368435832442e-01:2.9483937774896960e+00:3.2872479183017794e-01:3.8962588609533730e+00 + CVs 20 + 1.9824278463599992e-01 3.5099094147315957e-01 -1.7525034201345269e-01 + 4.0447052909856740e-01 7.0276487086158235e-01 -3.4486762068547688e-01 + 6.1808983254822203e-01 1.0550489825504363e+00 -5.1595259661791459e-01 + 8.4537626600698745e-01 1.4006642777168676e+00 -6.9335938148169440e-01 + 1.0986372896314274e+00 1.7271811947842952e+00 -8.7969913889497042e-01 + 1.3942275281292642e+00 2.0181484748048417e+00 -1.0759870260136644e+00 + 1.7538311969946530e+00 2.2493958686340751e+00 -1.2790150395731896e+00 + 2.1956272764770626e+00 2.3845987942427662e+00 -1.4749351864633851e+00 + 2.7144575440173444e+00 2.3792771595029869e+00 -1.6386211552169569e+00 + 3.2762660045579750e+00 2.1875118459791443e+00 -1.7414759645542262e+00 + 3.8038528502975768e+00 1.7746361530782147e+00 -1.7562341538911528e+00 + 4.1861612302123969e+00 1.1645861433507716e+00 -1.6756266025741640e+00 + 4.3510947570778189e+00 4.4943313882104396e-01 -1.5178509048606883e+00 + 4.3185331780871206e+00 -2.5827644272547279e-01 -1.3021520283986756e+00 + 4.1652644084920558e+00 -9.1554632538451908e-01 -9.9284137248442594e-01 + 3.9540696013431660e+00 -1.5100248459291423e+00 -4.7604123036166346e-01 + 3.7596636967259753e+00 -1.9256314284993987e+00 3.2231832077017808e-01 + 3.6518291157924421e+00 -2.0540281789696890e+00 1.1873047593975641e+00 + 3.5962612133753025e+00 -2.1073602818943642e+00 1.6694633537306915e+00 + id 11876 + loc 8.3392262458801270e-01 9.9230200052261353e-01 1054 + blend 0.0000000000000000e+00 + interp 4.6112167224180617e-01:2.4187922432654743e-01:4.1652447534666293e-01:3.7564127895901950e-01:9.8876902604429073e-01:4.6111706102508376e-01:1.2252141848590341e+00:5.4317612279370570e-02:2.8166616145233396e+00:1.9788942507728377e-01:3.8331174516509341e+00 + CVs 20 + 4.9813119781819803e-01 3.9617262650676577e-01 -1.9827408408409125e-01 + 9.3089140990341757e-01 7.8914598642369516e-01 -3.0094081382194743e-01 + 1.2972873127170703e+00 1.1820829110091586e+00 -3.2444273374585053e-01 + 1.6232033258198544e+00 1.5031734938618422e+00 -2.9144042007051452e-01 + 1.9248731472895035e+00 1.6926486059863466e+00 -2.3285119169079338e-01 + 2.2070652916618476e+00 1.7674170671811895e+00 -1.6891877731759330e-01 + 2.4772301592964876e+00 1.7608864647938540e+00 -1.0340063294430668e-01 + 2.7495006352850693e+00 1.6836468209414859e+00 -3.1909679421499693e-02 + 3.0224018266308907e+00 1.5284562919944307e+00 5.4323458238538125e-02 + 3.2752532420046299e+00 1.2875513375668577e+00 1.7165276735500412e-01 + 3.4836381053810772e+00 9.8238723700981356e-01 3.4809731034225355e-01 + 3.6521411049165868e+00 6.6902103165440119e-01 6.2629895468919505e-01 + 3.8548014086324249e+00 3.8817004562973878e-01 1.0324350387892489e+00 + 4.2317651853613585e+00 1.7718260664005814e-01 1.4748206197302038e+00 + 4.7925821789150849e+00 7.1992824927798460e-02 1.7877542706818152e+00 + 5.4297200583191660e+00 2.5143359372716612e-02 1.9557422968211529e+00 + 5.9812831381217659e+00 -4.9216384352067877e-02 2.0775889673230958e+00 + 6.2491116653540111e+00 -1.6187557952319498e-01 2.2664211219133366e+00 + 6.6580961495862505e+00 -5.0399842290719932e-01 2.5757906677015217e+00 + id 11877 + loc 5.5697351694107056e-01 6.7745864391326904e-01 416 + blend 0.0000000000000000e+00 + interp 5.4896479744712645e-01:2.6637070377811345e-01:3.8812198158101863e-01:4.8182232976200495e-01:8.4266769242097239e-01:5.4895930779915203e-01:2.4152825469845656e+00:4.1766457219826597e-01:2.9307531885106046e+00:4.5477331015260952e-01:3.5300279559614638e+00 + CVs 20 + 8.1536276818731201e-01 1.5703364787717555e-01 -1.8706935982219608e-01 + 1.3532523115011279e+00 1.7124460754522969e-01 -3.5757896574963666e-01 + 1.8388074933422878e+00 1.4178288581894277e-01 -4.9534919894424984e-01 + 2.3415083922587154e+00 9.7616766985537562e-02 -5.9670109792202952e-01 + 2.8498783521681506e+00 3.3565515152099046e-02 -6.5730135424838720e-01 + 3.3532421059768458e+00 -5.2780788907228704e-02 -6.6920649754662087e-01 + 3.8397706116558341e+00 -1.6193578408057152e-01 -6.2578628090833788e-01 + 4.2976395014565787e+00 -2.9362905202724132e-01 -5.2522899229383258e-01 + 4.7179244379690131e+00 -4.4732670233774363e-01 -3.6831660969907848e-01 + 5.0937324325432156e+00 -6.2306195779937257e-01 -1.5882540937026263e-01 + 5.4186701158824393e+00 -8.2516738514530874e-01 8.6823968453121014e-02 + 5.6971571589994685e+00 -1.0690878125373897e+00 3.3767445474279817e-01 + 5.9425674223162410e+00 -1.3752719918763583e+00 5.6541149901542498e-01 + 6.1575867319354689e+00 -1.7504430422958139e+00 7.5887162745626069e-01 + 6.3307562782222551e+00 -2.1833092501746023e+00 9.1624387874453750e-01 + 6.4514190387232286e+00 -2.6560796581067478e+00 1.0283031664966562e+00 + 6.5174560548474352e+00 -3.1508609646563990e+00 1.0797049971746158e+00 + 6.5363995699910484e+00 -3.6469748894106138e+00 1.0669056876278797e+00 + 6.5575735979566749e+00 -4.0839341350148359e+00 1.1102652583838166e+00 + id 11878 + loc 5.3755909204483032e-02 1.3522182404994965e-01 384 + blend 0.0000000000000000e+00 + interp 5.1168491228278468e-01:3.4444512367034047e-01:6.1178340340805903e-01:3.3866304037955364e-01:1.1243013277519001e+00:3.5595416370808519e-01:1.6933957566497972e+00:1.8756631212281294e-01:2.3149206898902790e+00:4.0108724799146067e-01:2.8594499820829498e+00:5.1167979543366182e-01:3.0180043204786142e+00:4.7694282664280602e-01:3.4506498084985253e+00:3.8140322252938602e-01:3.9999935383771419e+00 + CVs 20 + -4.2016103514506753e-01 2.2752345629701973e-01 -1.0950674935251208e+00 + -7.5469067042567939e-01 2.8197782582377817e-01 -1.8062358191367511e+00 + -1.0707634613679780e+00 2.7297037771431643e-01 -2.4323693483612687e+00 + -1.3876901150586567e+00 2.4717579878386639e-01 -3.0998256186973117e+00 + -1.6939531337734524e+00 1.9517480078176119e-01 -3.7930072298451654e+00 + -1.9830447573338819e+00 1.1078109305310346e-01 -4.4920443278328532e+00 + -2.2564404062695380e+00 -9.5328264274207042e-03 -5.1788698159804145e+00 + -2.5205097697343350e+00 -1.7276366863033410e-01 -5.8428183087071268e+00 + -2.7839311836239569e+00 -3.9253735601463868e-01 -6.4815753273159977e+00 + -3.0482238732451599e+00 -6.7180644302023718e-01 -7.0797013446008910e+00 + -3.3105049268975160e+00 -9.9802827800325722e-01 -7.6167416700297670e+00 + -3.5684947471904325e+00 -1.3515091239677433e+00 -8.0845279600686411e+00 + -3.8189788769020345e+00 -1.7136720488887311e+00 -8.4886222964676605e+00 + -4.0589818005842826e+00 -2.0785186361053949e+00 -8.8451979902402194e+00 + -4.2908403361376992e+00 -2.4535561442586848e+00 -9.1646177805677347e+00 + -4.5274139857496216e+00 -2.8485272192807347e+00 -9.4407146114789526e+00 + -4.7830693395933235e+00 -3.2645244357714782e+00 -9.6589129709454102e+00 + -5.0521529335822795e+00 -3.6842774596684791e+00 -9.7978462799987174e+00 + -5.1716845298029765e+00 -3.9358752695373096e+00 -9.7623510153698270e+00 + id 11879 + loc 8.1263649463653564e-01 6.9564849138259888e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2055322903092673e-01:3.5192990764903082e-01:2.2808881593138608e-01:3.3418781092649402e-01:9.6746027076667629e-01:3.4959007995151242e-01:1.4851341545484262e+00:3.7469514646514857e-01:2.0725520131370998e+00:4.2054902349863643e-01:2.8193543581614997e+00:3.1820928299388523e-01:3.4266763764245454e+00 + CVs 20 + 2.0745506538560182e-01 2.1508724917394026e-01 -3.8787420351515051e-01 + 4.0877974420907398e-01 4.1141697833730673e-01 -7.2251964620579023e-01 + 5.9884787779984361e-01 5.8904013275991418e-01 -1.0328673001301689e+00 + 7.7659166421729531e-01 7.5353714017847528e-01 -1.3337289330785849e+00 + 9.4014239744491590e-01 9.1247400281129376e-01 -1.6339974603990424e+00 + 1.0844374591078236e+00 1.0711530932383266e+00 -1.9387274306405804e+00 + 1.2034851628764087e+00 1.2275295653495033e+00 -2.2430511544431528e+00 + 1.2961306873102991e+00 1.3755124129913787e+00 -2.5374920775181495e+00 + 1.3676621072886816e+00 1.5116411552217999e+00 -2.8184133324714651e+00 + 1.4263748674385073e+00 1.6370462155166852e+00 -3.0920738213370935e+00 + 1.4807962356954927e+00 1.7503783903331642e+00 -3.3762787217392543e+00 + 1.5397380705285739e+00 1.8371113714715663e+00 -3.6950943931610554e+00 + 1.6088789658125724e+00 1.8711810171553560e+00 -4.0608586247745846e+00 + 1.6901328069221262e+00 1.8254203332268295e+00 -4.4669427384757743e+00 + 1.7891442822675914e+00 1.6815961019950709e+00 -4.8975301821833179e+00 + 1.9081532929208724e+00 1.4275694279967492e+00 -5.3372214438911731e+00 + 2.0146132194985986e+00 1.0597429418701587e+00 -5.7671899044782720e+00 + 2.0425386390232396e+00 6.1329304249671901e-01 -6.1547967205065124e+00 + 1.9943649340464260e+00 2.5558314232085311e-01 -6.4282957466754089e+00 + id 11880 + loc 9.1819691658020020e-01 8.2953262329101563e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8848293234650766e-01:3.8269909951956521e-01:3.4623721975622579e-02:3.4293463033019705e-01:7.7513073859446457e-01:3.8847904751718421e-01:1.1602069505320354e+00:2.9518522730538987e-01:1.8915452777016544e+00:3.7449905402886657e-01:2.2612681503861052e+00:2.6486125233824809e-01:2.9177842471855175e+00:2.5915628963905851e-01:3.7323757362634158e+00 + CVs 20 + 1.4661304603414668e-01 3.5726187140771160e-01 -4.5734532484053014e-03 + 3.0750835577259755e-01 7.1471661115817609e-01 -6.2846493430134751e-02 + 4.8372770789856667e-01 1.0666208303989724e+00 -1.4702867327113017e-01 + 6.8030719874528367e-01 1.4126100106743937e+00 -2.4331208292728851e-01 + 9.0140123803278671e-01 1.7527132769670364e+00 -3.5225355086696813e-01 + 1.1432007559402015e+00 2.0767750001632415e+00 -4.9483872326205092e-01 + 1.3862987861955536e+00 2.3583372969515204e+00 -7.0953475302943469e-01 + 1.5992058149313280e+00 2.5486687986634151e+00 -1.0058366222318365e+00 + 1.7477308841577734e+00 2.5865073747896234e+00 -1.3409063961453032e+00 + 1.8166120246608763e+00 2.4461848461788009e+00 -1.6524810007547510e+00 + 1.8179710731658802e+00 2.1443334388423616e+00 -1.8992406621487938e+00 + 1.7888296705322770e+00 1.7023140574767779e+00 -2.0769818833497955e+00 + 1.7921798312612627e+00 1.1385090571446048e+00 -2.2278497553728038e+00 + 1.8967463440225689e+00 4.8842124085818417e-01 -2.4586834708029297e+00 + 2.1582199023224131e+00 -1.3059105067464882e-01 -2.9421798907769521e+00 + 2.5911389838200214e+00 -4.0441260420894998e-01 -3.7998723042702407e+00 + 3.0404260457529557e+00 5.3601993618602295e-02 -4.7573558404634326e+00 + 3.2959081687500307e+00 8.3515427299517442e-01 -5.3188867525770016e+00 + 3.4666916910255234e+00 1.2242913703001603e+00 -5.6754884491891175e+00 + id 11881 + loc 9.4348776340484619e-01 6.2377160787582397e-01 1074 + blend 0.0000000000000000e+00 + interp 5.2572903476958222e-01:3.3666563265649752e-01:2.8225436617942101e-01:5.1413724110901216e-01:9.7488548090034344e-01:3.3330851583238963e-01:1.4771353006287173e+00:4.1650431264344911e-01:2.0155760541629997e+00:3.8823245178491728e-01:2.4611063164874842e+00:5.2572377747923449e-01:3.0003328191673977e+00:3.9142829165753201e-01:3.6972294973755977e+00 + CVs 20 + 1.6993132395535698e-01 2.5444566873856328e-01 -3.3052360972559891e-01 + 3.4473944792285854e-01 4.8557250783727685e-01 -6.2156050911320870e-01 + 5.3027694568828398e-01 6.8872612727416871e-01 -8.8745268782881592e-01 + 7.2641320573753931e-01 8.5803028668166181e-01 -1.1318991614470963e+00 + 9.2795556479865182e-01 9.8845513630033277e-01 -1.3530007509718349e+00 + 1.1296553054440510e+00 1.0804573753288496e+00 -1.5515847955167645e+00 + 1.3295568845493639e+00 1.1392985213675477e+00 -1.7322140354002693e+00 + 1.5300857644890320e+00 1.1712504626910929e+00 -1.9044538381075204e+00 + 1.7320097213611694e+00 1.1783863699069737e+00 -2.0826842557395864e+00 + 1.9284747695712294e+00 1.1579867712978511e+00 -2.2781133152425372e+00 + 2.1102630534226323e+00 1.1063231260537485e+00 -2.4923278296116882e+00 + 2.2701114443517798e+00 1.0199499956674651e+00 -2.7199873796425704e+00 + 2.4017783950748108e+00 8.9890689863905449e-01 -2.9496900548538152e+00 + 2.5018709071010394e+00 7.5075966470033628e-01 -3.1643063441836801e+00 + 2.5718489000829106e+00 5.8391588951490969e-01 -3.3495331300768747e+00 + 2.6127364375944082e+00 3.9369745565478309e-01 -3.5001901517161471e+00 + 2.6127843223755152e+00 1.6340677801835130e-01 -3.6089847295274597e+00 + 2.5386859930258465e+00 -1.1005032819243130e-01 -3.6532849091305195e+00 + 2.2994931284962270e+00 -4.6727421602492691e-01 -3.5901632877201517e+00 + id 11882 + loc 9.4630527496337891e-01 6.8142455816268921e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6934258321648326e-01:4.5744296649843358e-01:3.2767297636424841e-01:4.6933788979065111e-01:9.2427797915166110e-01:3.0334256815604965e-01:1.1234025598632906e+00:4.5393224139962762e-01:1.7714089407270452e+00:4.3547237583763726e-01:2.0734255831337918e+00:2.8945063816120237e-01:2.8575530198397532e+00:4.6925030074707286e-01:3.5233811205844203e+00:4.6321311572962370e-01:3.9954928797944360e+00 + CVs 20 + -2.0222145711148734e-01 3.8752741495122983e-01 7.8238809757809974e-02 + -4.1482237585682313e-01 7.7449112153425148e-01 1.5519657725128444e-01 + -6.3545831327042157e-01 1.1570534383155602e+00 2.2807513595043782e-01 + -8.7523377882082509e-01 1.5214853246039672e+00 2.7916984809024281e-01 + -1.1445695719636273e+00 1.8464624380928254e+00 2.8510862046502794e-01 + -1.4372835873993868e+00 2.1070183845404045e+00 2.2833806403043955e-01 + -1.7269755193229688e+00 2.2793031683693670e+00 1.0257054488321105e-01 + -1.9715219923924461e+00 2.3478478318701339e+00 -8.1594130977767021e-02 + -2.1459348491764132e+00 2.3218012829404553e+00 -2.9853442598310154e-01 + -2.2665905156628940e+00 2.2235629640629098e+00 -5.3526422905615223e-01 + -2.3517967582515671e+00 2.0575226783956779e+00 -7.7794169230485244e-01 + -2.4134633343557077e+00 1.8229441116918139e+00 -9.8191386997140240e-01 + -2.4624386501702351e+00 1.5400583627196305e+00 -1.1083811044557215e+00 + -2.4975765333601210e+00 1.2209621553850689e+00 -1.1929951089988418e+00 + -2.5018032813823257e+00 8.5670797551291278e-01 -1.3042512997747338e+00 + -2.4570560584730310e+00 4.7951935125472683e-01 -1.5081309675961025e+00 + -2.3757817970079183e+00 1.6745990949262024e-01 -1.8379484066598364e+00 + -2.3059795483039909e+00 -2.6769931319085449e-02 -2.2456995437266150e+00 + -2.2841193867065352e+00 -1.6520794166976516e-01 -2.6304804548994403e+00 + id 11883 + loc 6.4071124792098999e-01 3.5407099127769470e-01 1048 + blend 0.0000000000000000e+00 + interp 4.1991542785942654e-01:2.7705873816775745e-01:3.2578001570382875e-01:2.9446966820646658e-01:1.1520176969992919e+00:2.6749621264411827e-01:1.9572178584632325e+00:2.3195143546457533e-01:2.5589788970804346e+00:2.7707198587989990e-01:3.0268999117800170e+00:4.1991122870514797e-01:3.5260217158071550e+00 + CVs 20 + -8.5045139964292082e-02 4.7528482751444251e-01 2.6127610055652850e-01 + -1.7562460295798529e-01 9.7329840096332154e-01 4.7447585265076586e-01 + -3.2274908679734454e-01 1.4803463110053148e+00 6.2033945822069958e-01 + -5.6630195696602836e-01 1.9769603295497353e+00 7.0496226468301770e-01 + -9.4731413621342275e-01 2.4179278225275191e+00 7.5664865492025046e-01 + -1.4867504589898113e+00 2.7168465794186574e+00 8.2059271824286828e-01 + -2.1352926483582175e+00 2.7547235406034227e+00 9.4806583942486400e-01 + -2.7343742918543357e+00 2.4748530664418098e+00 1.1476377527911690e+00 + -3.1623358123944740e+00 1.9865914636230813e+00 1.3705848501241684e+00 + -3.4559980698525106e+00 1.4328267575467140e+00 1.6000255557751162e+00 + -3.7021652510786573e+00 8.9103067913024336e-01 1.8722031672257997e+00 + -3.9366190648436374e+00 4.3015020675395532e-01 2.2739274066253139e+00 + -4.0914336376452649e+00 1.5794574232983927e-01 2.8677309383669871e+00 + -4.0808411008639833e+00 6.7463622427539893e-02 3.5501799826432312e+00 + -3.9568504207471507e+00 -4.8318398413829122e-03 4.2255118357283541e+00 + -3.8559308554749609e+00 -2.2169641194614131e-01 4.8852952982701749e+00 + -3.9493146766128473e+00 -7.0715522486274618e-01 5.4605406201314279e+00 + -4.2329188578252666e+00 -1.3184061210855251e+00 5.8666506242078853e+00 + -4.5250666051842003e+00 -1.7111961853185025e+00 6.3800054217177760e+00 + id 11884 + loc 9.3683546781539917e-01 5.9023279696702957e-02 1090 + blend 0.0000000000000000e+00 + interp 4.4924728294880606e-01:4.4924279047597659e-01:3.6472840943903118e-01:3.0944983009156657e-01:9.9803521687950825e-01:3.9442576306726468e-01:1.5539389098613143e+00:2.9385322530747987e-01:1.9857164396840874e+00:3.3195643187785978e-01:2.5092256976571266e+00:4.4177510191501962e-01:2.9966834082282610e+00:3.5518716548497953e-01:3.8228496197692379e+00 + CVs 20 + -3.1042594677516078e-02 3.7592262289580247e-01 -5.7539485607521951e-02 + -2.7742861135428398e-02 7.0332240025609249e-01 -8.4035898411239818e-02 + -1.1463601991733796e-02 1.0029269879117582e+00 -9.6916436241900661e-02 + 6.6285746872840612e-03 1.2889762177723192e+00 -1.0615265197590551e-01 + 3.1678829056938751e-02 1.5695011659155620e+00 -1.1065907521554996e-01 + 7.4208601782641548e-02 1.8558386446186677e+00 -1.0619252182654892e-01 + 1.5293875911765342e-01 2.1531242696753994e+00 -8.0537518042155365e-02 + 2.8631737796731405e-01 2.4483120640672507e+00 -1.4147556438956932e-02 + 4.7646622876360412e-01 2.7125461037275498e+00 1.1421794560260767e-01 + 7.0322406655488734e-01 2.9111286038885855e+00 3.1952989448621982e-01 + 9.4261604447647751e-01 3.0207304170750264e+00 5.9845562435260258e-01 + 1.1883232934859702e+00 3.0313655731371703e+00 9.3546547178317041e-01 + 1.4434473947395190e+00 2.9285027822179934e+00 1.3146918154999980e+00 + 1.7095636440761470e+00 2.6824931345797314e+00 1.7143364808784212e+00 + 1.9915654449740323e+00 2.2586247112298081e+00 2.0820075880010984e+00 + 2.2692671391465500e+00 1.6794072849385264e+00 2.2976109243296952e+00 + 2.5032387521330297e+00 1.0513400103907302e+00 2.2760708359030373e+00 + 2.7247298669663151e+00 4.9294438218533920e-01 2.0220959392373365e+00 + 2.9560323285456311e+00 2.6850868051370025e-01 1.6564412945518079e+00 + id 11885 + loc 4.9164029955863953e-01 5.3326666355133057e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6368829716090115e-01:2.8099781480568836e-01:1.2872697668469768e-02:3.7325965905136288e-01:9.3503324455918613e-01:4.6368366027792957e-01:1.2047408023626911e+00:2.8313157380692094e-01:1.9302174518696789e+00:3.9215646790476266e-01:2.7989882939485824e+00:4.1939563128236446e-01:3.2766110085342701e+00 + CVs 20 + -6.6885267353076594e-02 4.9029056081849298e-01 3.1045552828249795e-01 + -1.7937948580716495e-01 9.2339589579375392e-01 5.9612116436096041e-01 + -3.2044416744017890e-01 1.3253104085200840e+00 9.0213281274654245e-01 + -5.0234843030947451e-01 1.6970024568823914e+00 1.2456925611442444e+00 + -7.5012620047692224e-01 2.0145041722716237e+00 1.6201384744744713e+00 + -1.0841705462063684e+00 2.2405621125541262e+00 2.0068699852031213e+00 + -1.5096060000209832e+00 2.3300999519679051e+00 2.3708751276849505e+00 + -2.0045155069898528e+00 2.2420686311485643e+00 2.6600255896921516e+00 + -2.4986003670635366e+00 1.9465385036852205e+00 2.8177928532102419e+00 + -2.8559104068045924e+00 1.4437543448049801e+00 2.8071850183787728e+00 + -2.9195711739232029e+00 8.2875233857938924e-01 2.6567487376049739e+00 + -2.6692368319155122e+00 2.6272509384109693e-01 2.4678232460249623e+00 + -2.2267019924035871e+00 -1.8861117906737590e-01 2.2729844640346788e+00 + -1.7159386280295919e+00 -5.7297848973643561e-01 1.9700450585579294e+00 + -1.1911657468247292e+00 -8.8737261654723865e-01 1.4161853403085094e+00 + -6.9770898971842232e-01 -9.4290199281896658e-01 5.6001799388589280e-01 + -3.1669932779385712e-01 -4.9487711618730434e-01 -4.1017573748387337e-01 + -6.5340256669848884e-02 2.3912435614458399e-01 -1.1078201325235071e+00 + 2.5335676728757506e-01 4.8951205865078418e-01 -1.5205703333607155e+00 + id 11886 + loc 7.0590680837631226e-01 1.1791530251502991e-01 384 + blend 0.0000000000000000e+00 + interp 4.6222194703233849e-01:4.6221732481286820e-01:1.0100144675456759e+00:2.7544023973475601e-01:1.3884997064808771e+00:3.6826643413289178e-01:1.9951707463318467e+00:4.1149172368091569e-01:2.9315376259666008e+00:3.6999243561568468e-01:3.5720762004305096e+00 + CVs 20 + -1.1680666453150415e+00 1.7799280110504540e-01 6.2328152738521325e-01 + -1.8365422677605523e+00 1.4244739387785435e-01 1.0710318025599859e+00 + -2.3449719840900078e+00 9.3702497185580713e-03 1.4616189683536733e+00 + -2.8232298802733400e+00 -1.7732883170030372e-01 1.8340801435319669e+00 + -3.2709711391040690e+00 -4.0643430688025262e-01 2.1849677977669346e+00 + -3.6870325026701729e+00 -6.6646263121366922e-01 2.5266445183972004e+00 + -4.0742909985606248e+00 -9.3756819218747922e-01 2.8714597832850979e+00 + -4.4336652473915708e+00 -1.1968520440078412e+00 3.2269840767709197e+00 + -4.7691111190501871e+00 -1.4316197657167349e+00 3.5901830245438715e+00 + -5.0908193551899412e+00 -1.6489822979627760e+00 3.9486729293395104e+00 + -5.4041171114590778e+00 -1.8731342898267642e+00 4.2923996052810693e+00 + -5.7031448479541957e+00 -2.1280028953782626e+00 4.6253761513532181e+00 + -5.9787890475323158e+00 -2.4220240265968331e+00 4.9608837387700468e+00 + -6.2223364722766856e+00 -2.7524575444183830e+00 5.2981585384733707e+00 + -6.4259634316384888e+00 -3.1066442158595806e+00 5.6294094599661726e+00 + -6.5823460654682924e+00 -3.4629604933025693e+00 5.9489865821254089e+00 + -6.6852091222036218e+00 -3.8005825642401727e+00 6.2522765545732364e+00 + -6.7246902657324910e+00 -4.1095505136155897e+00 6.5274610843729430e+00 + -6.6186598391548692e+00 -4.4218288236782559e+00 6.6717547286607868e+00 + id 11887 + loc 2.7033734321594238e-01 3.4531745314598083e-01 1054 + blend 0.0000000000000000e+00 + interp 5.3159222711825871e-01:2.9594475931952224e-01:2.3685250196031538e-01:5.3158691119598755e-01:1.2726724443959405e+00:4.1892470635347645e-01:1.8661696302898152e+00:3.0414888577702504e-01:2.3680766284425143e+00:3.8411227572307599e-01:3.4247527338344854e+00 + CVs 20 + 4.4369243093242694e-03 4.2680357834838817e-01 -2.4953412485699952e-01 + 5.9746791499931173e-02 8.7192627083677765e-01 -4.6270511100109291e-01 + 1.8178133887481773e-01 1.3191144037430087e+00 -6.1102912667803821e-01 + 3.6042582583183957e-01 1.7511272299086944e+00 -7.4583801885215195e-01 + 5.6959964076297054e-01 2.1417050083976688e+00 -9.6693092284643867e-01 + 7.7323741905934684e-01 2.4305633280645607e+00 -1.3361591999960942e+00 + 9.3886717449537405e-01 2.5428536586814783e+00 -1.8282480977800202e+00 + 1.0627025439113544e+00 2.4451797682857550e+00 -2.3469536553258585e+00 + 1.1749668717819151e+00 2.1770646791757517e+00 -2.7998990066872169e+00 + 1.3156503112324676e+00 1.8362819587713199e+00 -3.1439727773257453e+00 + 1.5068034627907829e+00 1.5448561742870064e+00 -3.3950415840664157e+00 + 1.7119307625057965e+00 1.3832724943427426e+00 -3.6290439643035239e+00 + 1.8093539343826106e+00 1.4080926278638133e+00 -3.9421431905574029e+00 + 1.6974677096000672e+00 1.6014645246285704e+00 -4.2914333774874782e+00 + 1.4852813612950895e+00 1.7747439594617127e+00 -4.6991152603158399e+00 + 1.2054188212362489e+00 1.8284063838179332e+00 -5.2840613316903067e+00 + 1.0093113380756060e+00 1.5726575364576658e+00 -6.0328732243679948e+00 + 1.1587251842135415e+00 9.5844526990790557e-01 -6.6566566968552801e+00 + 1.1543599852910975e+00 6.3021287230030509e-01 -7.1567744974032328e+00 + id 11888 + loc 8.0857580900192261e-01 7.5790870189666748e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7635093443192883e-01:3.6867631402741680e-01:5.7285317014269255e-01:3.3306069967520407e-01:1.2477861118220797e+00:3.3498465628813673e-01:1.9987823241344835e+00:2.8364570857177240e-01:2.6809506716330649e+00:3.4127861980827595e-01:3.2315445496051347e+00:4.7634617092258452e-01:3.9955479481533880e+00 + CVs 20 + 1.2006937859110244e-01 2.8095391255158875e-01 -2.1465909564977392e-01 + 2.2275885658136957e-01 5.6378459388468727e-01 -4.0885217756089887e-01 + 3.3060461710718519e-01 8.4931067023951301e-01 -5.9283081862790798e-01 + 4.5573453107639311e-01 1.1361428782308751e+00 -7.7571608400098335e-01 + 6.0183910296928544e-01 1.4213469438051414e+00 -9.6658075570549040e-01 + 7.7134345407550198e-01 1.6994704058546959e+00 -1.1746941350808444e+00 + 9.6435489950556375e-01 1.9622067915595813e+00 -1.4088312348105381e+00 + 1.1738411242867537e+00 2.1974486034785614e+00 -1.6780296457972521e+00 + 1.3831709456297567e+00 2.3920909998129014e+00 -1.9938653095245518e+00 + 1.5735187657815879e+00 2.5354496052872455e+00 -2.3643893437033459e+00 + 1.7295043529715155e+00 2.6177638392902840e+00 -2.7833347792206049e+00 + 1.8387500204599614e+00 2.6309296971858580e+00 -3.2322261777364854e+00 + 1.8942194333933027e+00 2.5702066601206277e+00 -3.6923263341093833e+00 + 1.8928849555903968e+00 2.4313861529432508e+00 -4.1467810131015819e+00 + 1.8316776704721587e+00 2.2118920463767022e+00 -4.5698235516624415e+00 + 1.7100159670898938e+00 1.9236193330615952e+00 -4.9211326685288910e+00 + 1.5369419391547383e+00 1.6053544367293986e+00 -5.1562560508730613e+00 + 1.3529041182549695e+00 1.3177009755070797e+00 -5.2577461298619497e+00 + 1.1162872205840522e+00 1.0622219886018036e+00 -5.2089605342886154e+00 + id 11889 + loc 7.6264518499374390e-01 2.0541729032993317e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7572800804890997e-01:3.4120282941880348e-01:7.8786783230089030e-02:4.0026331307789526e-01:8.9464831104337850e-01:3.7744248546856424e-01:1.1543741871100888e+00:3.8933512241823265e-01:1.8212567933561821e+00:3.9712011984039286e-01:2.3769595494961493e+00:4.7572325076882949e-01:2.9414145021960190e+00:2.9407867365036378e-01:3.6585661231643347e+00 + CVs 20 + -8.1685934370037960e-02 4.1183923972938652e-01 1.2658230501424084e-01 + -1.9115770995250128e-01 8.2308216531121725e-01 2.6145393442187065e-01 + -3.4305388327058883e-01 1.2249946853777240e+00 3.8828339371305443e-01 + -5.5261064239565316e-01 1.6010692598096050e+00 4.9877077884074683e-01 + -8.2956366586473829e-01 1.9253724101023177e+00 5.9318747045773723e-01 + -1.1667244843124021e+00 2.1682317926187871e+00 6.7910817217805974e-01 + -1.5368679691308995e+00 2.3075239317076237e+00 7.7328774442067894e-01 + -1.8972704656649926e+00 2.3391726503936736e+00 8.9108924554266866e-01 + -2.2079046933435333e+00 2.2789641498557427e+00 1.0394981711793774e+00 + -2.4221402425154630e+00 2.1206838685453522e+00 1.2158658956600559e+00 + -2.4476229596661550e+00 1.8511322817370057e+00 1.3571536041032730e+00 + -2.3099038068758975e+00 1.5869397784635917e+00 1.3801181370651825e+00 + -2.1241843052652456e+00 1.3584187393930931e+00 1.3419652352692908e+00 + -1.8860845027242406e+00 1.1552275095518703e+00 1.2529814905721715e+00 + -1.6219536515344832e+00 1.0092551517203971e+00 1.1052775113460798e+00 + -1.3741801548400645e+00 8.9123278702083841e-01 9.2289976649026062e-01 + -1.1618731634580890e+00 7.5942727695644952e-01 7.2295861181261445e-01 + -1.0027320600986183e+00 5.8463008139097350e-01 5.2309212325081744e-01 + -8.4979610991525301e-01 4.6432209128416224e-01 3.7768210889272469e-01 + id 11890 + loc 2.9236048460006714e-01 6.2076508998870850e-02 1076 + blend 0.0000000000000000e+00 + interp 4.9395014142041177e-01:3.6922700676051590e-01:1.6561934766768815e-02:3.5705275616042015e-01:7.0040104103672252e-01:4.9394520191899760e-01:1.1766354270745998e+00:3.7062635052443438e-01:1.8061669309224908e+00:3.6651531885377653e-01:2.4339245972159045e+00:3.7078472900881071e-01:3.1593510939199971e+00 + CVs 20 + -5.4557381432273025e-02 3.6410832059410236e-01 -1.1832658023198099e-01 + -1.6425350901072025e-01 6.8926697888201560e-01 -2.3901150972679197e-01 + -3.0396367894500470e-01 9.7629953623841703e-01 -3.5983164701017734e-01 + -4.5904216656095259e-01 1.2205959407933342e+00 -4.7576578263825053e-01 + -6.2955030604500850e-01 1.4210729062994052e+00 -5.8002630979839576e-01 + -8.1902632405277243e-01 1.5822044869603455e+00 -6.6645853832843860e-01 + -1.0285185091561542e+00 1.7059380177818579e+00 -7.3842637333592642e-01 + -1.2500318263315622e+00 1.7928132449106591e+00 -8.0383571600244630e-01 + -1.4675555551714456e+00 1.8529217822117183e+00 -8.6019741741494349e-01 + -1.6614623171331295e+00 1.9123818113438420e+00 -8.9420622970700436e-01 + -1.8067084375033762e+00 2.0177542522237930e+00 -8.9886840480081220e-01 + -1.8804947370986396e+00 2.2341588598934488e+00 -9.0948886550875108e-01 + -1.9209246176500119e+00 2.5364171326733338e+00 -1.0135630504613808e+00 + -1.9863143988725187e+00 2.7332652389168048e+00 -1.2062066563053260e+00 + -2.0606409294250678e+00 2.7708005809051359e+00 -1.4190373781224832e+00 + -2.1347851278229384e+00 2.7885603512542207e+00 -1.7871821123132525e+00 + -2.2605249135529109e+00 2.7030345407836220e+00 -2.6200229965949609e+00 + -2.3135406010409976e+00 2.2053584503454777e+00 -3.2472518809951576e+00 + -2.2047089962762767e+00 2.1574486048900758e+00 -2.8687064260646005e+00 + id 11891 + loc 8.8938289880752563e-01 9.0455043315887451e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4140146616613246e-01:2.8653676950656409e-01:5.4925974540827471e-01:2.8809093786225526e-01:1.1379469761346044e+00:4.4139705215147079e-01:1.9922994143063519e+00:3.0630712692744372e-01:2.8576795584132935e+00:4.1519096391155796e-01:3.0600888675328539e+00:2.7839105763855138e-01:3.9032814527973194e+00 + CVs 20 + 1.3099260791054390e-01 3.3195423063729756e-01 -3.0013409336493813e-01 + 2.8095545363599750e-01 6.3885895985151397e-01 -6.1477128037148376e-01 + 4.3158668725983473e-01 9.0502659923265349e-01 -9.6642772072935013e-01 + 5.6826256269807751e-01 1.1122960412253515e+00 -1.3589007298244018e+00 + 6.8657250352153176e-01 1.2407164952515628e+00 -1.7767942690761123e+00 + 7.9992506916987094e-01 1.2806671270402765e+00 -2.1985072120797344e+00 + 9.2990006301371131e-01 1.2423131817305266e+00 -2.6095671460051393e+00 + 1.0891832310449099e+00 1.1449862455418063e+00 -2.9969513040107247e+00 + 1.2742228417133288e+00 1.0063614750016392e+00 -3.3358899004059226e+00 + 1.4629331568241191e+00 8.4379315946710032e-01 -3.5982375554984398e+00 + 1.6158830875535819e+00 6.7912397431091831e-01 -3.7681784803898046e+00 + 1.6804893135064820e+00 5.4522966727034117e-01 -3.8402897566316914e+00 + 1.6398854872974233e+00 4.9247008878879672e-01 -3.8323526552241565e+00 + 1.5873379852791616e+00 5.0518641366224681e-01 -3.8325840532351862e+00 + 1.5860083964569878e+00 4.6314719505156832e-01 -3.9151003085767355e+00 + 1.5753808006469237e+00 3.5785126567095182e-01 -4.0577085304604816e+00 + 1.5035567737333746e+00 3.3635937933242738e-01 -4.2202992443117964e+00 + 1.4358791235153343e+00 4.2117190802401794e-01 -4.3855336063186314e+00 + 1.1467034886905203e+00 2.8269890225601568e-01 -4.5900768809137453e+00 + id 11892 + loc 3.8379418849945068e-01 2.8350847959518433e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7811550842540779e-01:4.3447994389397382e-01:2.7605922086938095e-01:3.6441982267090772e-01:9.7141364745528269e-01:3.9624237622048847e-01:1.5386152926647250e+00:4.7425415290859363e-01:2.0000009667559975e+00:4.3535390047290240e-01:2.2870836561837806e+00:4.7811072727032355e-01:2.8541932359866999e+00:3.8900494565263372e-01:3.1201247184875704e+00:2.7776279881717353e-01:3.9202505750036232e+00 + CVs 20 + 2.9997306364155552e-01 3.7727629790155154e-01 2.4631043331326274e-01 + 4.9924630437880324e-01 7.0498802846293485e-01 4.6667779602612941e-01 + 6.5020645645106612e-01 1.0083351572793842e+00 6.8842113437436125e-01 + 7.6952236934054208e-01 1.2960358025767045e+00 9.2684437737994108e-01 + 8.4794346158482437e-01 1.5620194124645557e+00 1.1888180531344201e+00 + 8.7775718838224481e-01 1.7985707194149956e+00 1.4769448611680907e+00 + 8.5258722969599099e-01 1.9959253353460893e+00 1.7882218787574762e+00 + 7.6766698537767719e-01 2.1437444781612318e+00 2.1140079788521247e+00 + 6.1938252723372933e-01 2.2330334796770170e+00 2.4422498496828542e+00 + 4.0570296861534216e-01 2.2534496510172870e+00 2.7614204117207706e+00 + 1.3567061787170209e-01 2.1913553737166724e+00 3.0651286580396713e+00 + -1.6561335577632685e-01 2.0315752743886470e+00 3.3538915958776898e+00 + -4.6139245993202593e-01 1.7604902836569283e+00 3.6293966192724558e+00 + -7.0892852171951459e-01 1.3697935178341736e+00 3.8934176111082497e+00 + -8.5080243468732597e-01 8.7040519287911722e-01 4.1526060185336373e+00 + -8.2480612842006140e-01 3.2411520465088761e-01 4.4163824814302020e+00 + -6.2250344579850114e-01 -1.7309310807819811e-01 4.7124295781022756e+00 + -2.9269807106654022e-01 -5.4253383130269817e-01 5.0673416964366886e+00 + 2.6556054252769190e-02 -8.6305724220924018e-01 5.4001549339916135e+00 + id 11893 + loc 1.7301966249942780e-01 4.4820398092269897e-01 416 + blend 0.0000000000000000e+00 + interp 2.3542879426242429e+00:3.8469521269797347e-01:1.0991975669158127e-01:4.5847167354795787e-01:8.3158186755586039e-01:3.3176344500380628e-01:1.0912862349517833e+00:5.5003994939248380e-01:1.6852280507444963e+00:2.3542779426242428e+00:1.9103458097482131e+00:4.4572274035164183e-01:3.6504554606576067e+00:2.1622235216466201e-01:3.7870927968203834e+00 + CVs 20 + -1.7742909227580125e-01 9.4665907603597152e-02 -4.2467844150385120e-01 + -3.3241047193532547e-01 1.3976140547067878e-01 -6.7691582338782641e-01 + -4.8082684115412122e-01 1.6103004886488506e-01 -8.5650404552867521e-01 + -6.3807028899191831e-01 1.7863461057574098e-01 -1.0330617400802218e+00 + -8.0067615856272223e-01 1.9295720694879587e-01 -1.2068480549878904e+00 + -9.6472965049403181e-01 2.0391735138310274e-01 -1.3781682879792627e+00 + -1.1263263461450777e+00 2.1113310263141505e-01 -1.5477794824505200e+00 + -1.2816555909579648e+00 2.1404288996778625e-01 -1.7164539643713019e+00 + -1.4274092588225513e+00 2.1216927195643076e-01 -1.8848949079857147e+00 + -1.5611584830027445e+00 2.0544772895901631e-01 -2.0541907637419317e+00 + -1.6810490586476996e+00 1.9365857252461760e-01 -2.2260294874293067e+00 + -1.7850515608102853e+00 1.7511816329656982e-01 -2.4019504825769977e+00 + -1.8706117736877528e+00 1.4704431818880459e-01 -2.5818682918947560e+00 + -1.9350669402893419e+00 1.0828609607630513e-01 -2.7629091948881781e+00 + -1.9761876858545115e+00 6.1596167408777824e-02 -2.9390837292729022e+00 + -1.9929562117483273e+00 1.2102848430013302e-02 -3.1034524078029690e+00 + -1.9867962227859894e+00 -3.6996120167235635e-02 -3.2533238570742111e+00 + -1.9613708569834212e+00 -8.5995103680549523e-02 -3.3909388808425884e+00 + -1.9038245735115995e+00 -1.3292163047431016e-01 -3.4713001460326911e+00 + id 11894 + loc 2.8732466697692871e-01 2.4359248578548431e-02 384 + blend 0.0000000000000000e+00 + interp 5.5056006465501039e-01:5.5055455905436390e-01:1.2690645667652001e-01:3.8662256921849714e-01:9.3680840695732670e-01:3.2841952764472804e-01:1.2363587012974215e+00:3.5749071218499034e-01:2.0191981698463133e+00:3.5422290036313703e-01:2.7647206408469769e+00:3.1076363539474128e-01:3.5518240879885332e+00 + CVs 20 + -4.4153972919411150e-01 1.5325204490465386e-01 -1.1256476831243754e+00 + -7.8277689170236286e-01 1.4646545394428995e-01 -1.8440343285022356e+00 + -1.1158880211831619e+00 8.5736701215497313e-02 -2.4379909821080172e+00 + -1.4832353709914659e+00 1.5126976973952710e-02 -3.0302949738540423e+00 + -1.8789276493910563e+00 -6.7760698346684523e-02 -3.6181327345471623e+00 + -2.2953471506900507e+00 -1.6506474015791628e-01 -4.1995747187176127e+00 + -2.7279647127134519e+00 -2.8143653680458447e-01 -4.7687607520008273e+00 + -3.1809160857642977e+00 -4.3293468886114705e-01 -5.3141855390663704e+00 + -3.6607265848913881e+00 -6.4717095092297128e-01 -5.8172066924408208e+00 + -4.1618960657611899e+00 -9.4626690683856651e-01 -6.2520086031807311e+00 + -4.6686722705657111e+00 -1.3310576380450043e+00 -6.5866838423176715e+00 + -5.1620585005352027e+00 -1.7782419093786395e+00 -6.7984234169184017e+00 + -5.6271255440375541e+00 -2.2538198326104526e+00 -6.8880796374836919e+00 + -6.0567756200419325e+00 -2.7241675813698683e+00 -6.8763643956953207e+00 + -6.4473680018388020e+00 -3.1640327876307994e+00 -6.7922733160538460e+00 + -6.7957938621622898e+00 -3.5659629492147387e+00 -6.6651980519111147e+00 + -7.1017080640548427e+00 -3.9416797108956865e+00 -6.5188142264989839e+00 + -7.3649572472825486e+00 -4.3078348636091510e+00 -6.3674857984684090e+00 + -7.5818126905406880e+00 -4.6317639960224692e+00 -6.2409578084296946e+00 + id 11895 + loc 9.3538796901702881e-01 7.4661946296691895e-01 1053 + blend 0.0000000000000000e+00 + interp 5.3254268218808531e-01:3.7546794902727204e-01:1.4917027472137911e-01:3.1634586809264886e-01:9.7843442531696856e-01:3.3711419058217879e-01:1.6791021580989678e+00:5.3253735676126346e-01:2.1198826543858709e+00:3.9473776388474330e-01:2.8962237991916817e+00:2.7259604411583443e-01:3.3084374725144339e+00 + CVs 20 + -4.7830078049055091e-02 3.7788156623336222e-01 3.3037519834809798e-01 + -1.6192075970597913e-01 7.0313646408351527e-01 6.3298396417474634e-01 + -3.3369691377988153e-01 9.8476009487519711e-01 9.2581116639142402e-01 + -5.5706678856544756e-01 1.2254686850014131e+00 1.2008170264234195e+00 + -8.0580317866778506e-01 1.4354445917561205e+00 1.4447236372355077e+00 + -1.0294527816297361e+00 1.6463417832699516e+00 1.6663404700532476e+00 + -1.1815678366900968e+00 1.8786013528081207e+00 1.8822791741701712e+00 + -1.2474311145341188e+00 2.1150161870939019e+00 2.1046856162643528e+00 + -1.2348431909589344e+00 2.3102868277737532e+00 2.3404059107763366e+00 + -1.1650671825680528e+00 2.4005872515258631e+00 2.5727552169313337e+00 + -1.0874527809937147e+00 2.3653174643784927e+00 2.7512451262565749e+00 + -1.0337388798927711e+00 2.2725953405800183e+00 2.8672194023777058e+00 + -9.9276395305708887e-01 2.1665778429436591e+00 2.9542935613829191e+00 + -9.5266376010103171e-01 2.0566760692964903e+00 3.0242185836166580e+00 + -9.0554952342240758e-01 1.9528909134620078e+00 3.0779057486501098e+00 + -8.4492960803358774e-01 1.8834674121698778e+00 3.1232615786111548e+00 + -7.5431369442291074e-01 1.8748380550679278e+00 3.1935377927209601e+00 + -6.3956213328183042e-01 1.8649533926842987e+00 3.3117095797721472e+00 + -6.8522196795664647e-01 1.6735746955989588e+00 3.2862786304356675e+00 + id 11896 + loc 7.4688929319381714e-01 9.1001135110855103e-01 1075 + blend 0.0000000000000000e+00 + interp 6.0588706177850982e-01:3.4370223252529919e-01:5.2359060093271070e-03:5.1448988013764874e-01:8.6734789289107572e-01:5.7414217350001306e-01:1.0131874060844890e+00:5.6454324948393542e-01:1.7974965280775161e+00:6.0588100290789204e-01:2.0000000000025748e+00:5.5065864733948267e-01:2.1840590680867522e+00:4.9079917989231997e-01:2.9376464815556727e+00:3.9956303400153353e-01:3.3267058997927306e+00 + CVs 20 + 2.8801063563515661e-01 1.5769728930577720e-01 -3.7812747677458275e-01 + 5.5807526745618508e-01 3.0620869102084453e-01 -7.2227363088333940e-01 + 8.2031610185483661e-01 4.3926070443101045e-01 -1.0502194251809960e+00 + 1.0764625160622143e+00 5.6688694893000147e-01 -1.3712218514210988e+00 + 1.3211688129503660e+00 6.9871509898211825e-01 -1.6869201980737563e+00 + 1.5497231315904401e+00 8.4047355570322690e-01 -1.9987616998550555e+00 + 1.7594803010524660e+00 9.8849060364406349e-01 -2.3011602459562717e+00 + 1.9529859964108218e+00 1.1324935536747935e+00 -2.5830584050285585e+00 + 2.1369431367639664e+00 1.2660656658341818e+00 -2.8403934820360321e+00 + 2.3174454531897011e+00 1.3880279547266112e+00 -3.0803138709165112e+00 + 2.4990394528811501e+00 1.4964965101903454e+00 -3.3192500533725964e+00 + 2.6874002591508654e+00 1.5815788667407218e+00 -3.5815258117588109e+00 + 2.8879446594871125e+00 1.6215525897345804e+00 -3.8861642990728575e+00 + 3.1029708502396671e+00 1.5892333439278497e+00 -4.2367657374315657e+00 + 3.3356021741230411e+00 1.4550725491575038e+00 -4.6347856640575191e+00 + 3.5814832733639390e+00 1.1643558716614093e+00 -5.0955715176093790e+00 + 3.7825972179783549e+00 6.4722011285665193e-01 -5.6211742758620247e+00 + 3.8331721041138178e+00 -4.7064011739403389e-02 -6.1449535452475930e+00 + 3.8834290050428772e+00 -4.5754868968386997e-01 -6.5111263155314099e+00 + id 11897 + loc 3.6189978709444404e-04 4.9258846044540405e-01 1054 + blend 0.0000000000000000e+00 + interp 5.2293322644749141e-01:3.3105813915583332e-01:3.2788741648632147e-01:3.2752532943976498e-01:1.4845927528242655e+00:1.5963063545844658e-01:2.0470367386261579e+00:4.9316899682504983e-01:2.9595374592091144e+00:4.9821645610514559e-01:3.1342015171171047e+00:5.2292799711522697e-01:3.7823429289466719e+00 + CVs 20 + -5.3893453235953431e-02 4.3057307114613996e-01 -1.9389182559283372e-01 + -6.6029939963464207e-02 8.6510422820860000e-01 -3.6728224358344352e-01 + -4.2455011945113919e-03 1.3135423091764196e+00 -5.0305150148927891e-01 + 1.7841530090957569e-01 1.7852239578130376e+00 -6.0217999535195110e-01 + 5.1554795615453863e-01 2.2332911083660418e+00 -7.0936316814695877e-01 + 9.6095876163945659e-01 2.5614802075713241e+00 -8.7433027473431102e-01 + 1.6488097482430002e+00 2.7894918157043360e+00 -1.0893928737114618e+00 + 2.2018823337933933e+00 2.6978927269995352e+00 -1.4679414849487500e+00 + 2.4843665961852128e+00 2.3691458597195130e+00 -1.8353544026804585e+00 + 2.6288132869277643e+00 1.9081136336125208e+00 -2.1180014349042713e+00 + 2.7065479480010448e+00 1.4125312974821345e+00 -2.3099188871814089e+00 + 2.8139957039481693e+00 9.4327945066175389e-01 -2.4879145508370897e+00 + 2.9840425336114262e+00 5.7777257378762359e-01 -2.8050329781780312e+00 + 3.0919261168999288e+00 4.3701688407486555e-01 -3.3073254095033153e+00 + 3.0741466159683100e+00 4.2879832529100448e-01 -3.8666899148688834e+00 + 2.9943773296954648e+00 4.0392597623975424e-01 -4.4583590834788218e+00 + 2.9696401317374179e+00 2.3886761443981686e-01 -5.0051588360194250e+00 + 3.0628452794045855e+00 -5.8906307595271934e-02 -5.4457564791214903e+00 + 3.1727968581025237e+00 -3.0721964705743099e-01 -5.9830508388162125e+00 + id 11898 + loc 1.7325323820114136e-01 1.9800195097923279e-01 1048 + blend 0.0000000000000000e+00 + interp 5.3382138723153538e-01:5.3381604901766311e-01:4.3366600154929213e-02:4.8242171839256920e-01:6.9773743965253976e-01:4.5311472356701299e-01:1.2053675310265914e+00:5.0581169591128061e-01:2.0002922890155928e+00:5.0031155327720722e-01:2.4855470597684572e+00:4.9735263233680027e-01:2.9955319724768463e+00:3.3200851538413945e-01:3.7815091900775877e+00 + CVs 20 + -2.6987958129987749e-01 5.2827053513975153e-01 -4.5560895952597630e-02 + -5.3149163859700987e-01 1.0747872794292326e+00 -1.7098028009485666e-01 + -7.4161981538540245e-01 1.6382871337562341e+00 -3.8196077851275212e-01 + -8.7770645701313976e-01 2.1698737406105679e+00 -6.9332250123197603e-01 + -9.5609527209837653e-01 2.5904162141239295e+00 -1.1093347505852491e+00 + -1.0095127889256958e+00 2.8239906069064569e+00 -1.5853809868782931e+00 + -1.0484942117502698e+00 2.8188078850409788e+00 -2.0168574122887284e+00 + -1.0589007327322468e+00 2.6027538519504256e+00 -2.2909510149950276e+00 + -1.0296465624672240e+00 2.2707994406600283e+00 -2.4049560785773720e+00 + -9.3885304860280827e-01 1.8739930401338738e+00 -2.4094823543878339e+00 + -7.4940916426301163e-01 1.4498952558475571e+00 -2.3194023184059627e+00 + -4.5527668326630233e-01 1.0415319135751901e+00 -2.1551871402682155e+00 + -9.6566223361314790e-02 6.3733115416632891e-01 -1.9589992624156634e+00 + 2.6165898607896110e-01 1.7727252775838331e-01 -1.7553416456330888e+00 + 5.5585413193438149e-01 -3.8239325483614200e-01 -1.5674272322865219e+00 + 8.4338527165916588e-01 -1.1056695071910287e+00 -1.5771804135872833e+00 + 1.2503268113664765e+00 1.1535977706449703e+00 -2.7204701554455606e+00 + 1.2626130593332170e+00 1.0892747537788967e+00 -2.0779173909540813e+00 + 1.3612545334130082e+00 1.5286046175228654e+00 -2.1382230651677179e+00 + id 11899 + loc 4.0264898538589478e-01 2.8350847959518433e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0379896883030428e-01:4.5127689996065562e-01:2.6817758386502522e-01:3.8702048751308882e-01:9.8150338945426807e-01:2.5151442249345740e-01:1.9119090527088352e+00:4.4992578782625647e-01:2.2700213127094910e+00:5.0379393084061597e-01:2.8770706471078373e+00:4.3390680579636898e-01:3.1393617297909051e+00:3.0443150738344171e-01:3.9027695795474360e+00 + CVs 20 + 2.2454335628477273e-01 3.4057112748374391e-01 3.2908137536074866e-01 + 3.9479180505436984e-01 6.2489455252986137e-01 6.3151064658545553e-01 + 5.7097802633550099e-01 8.8644990026348824e-01 9.1072903024433338e-01 + 7.5805784462754422e-01 1.1255221815702510e+00 1.1686241126837205e+00 + 9.2840206649182466e-01 1.3391066910655485e+00 1.4284795465453732e+00 + 1.0631661737726796e+00 1.5279059164265894e+00 1.7115537774817009e+00 + 1.1555827590785763e+00 1.6859881455770909e+00 2.0102556664057429e+00 + 1.2086285006931052e+00 1.8067679158893082e+00 2.2959879462195771e+00 + 1.2274070448246488e+00 1.8938317154772326e+00 2.5449760735513025e+00 + 1.1981287417507818e+00 1.9552557207777017e+00 2.7651517486030732e+00 + 1.1015794105667043e+00 1.9902102883890933e+00 2.9637621162018379e+00 + 9.4823446218053908e-01 1.9994949939460929e+00 3.1345684149608544e+00 + 7.4883684961535790e-01 1.9583355687429678e+00 3.2927647079415712e+00 + 5.1856576336184346e-01 1.8043098682477834e+00 3.4692144782808918e+00 + 2.7434516590990765e-01 1.5350998056100056e+00 3.6648690945424400e+00 + 6.4612228609166600e-03 1.2287561797054245e+00 3.8422918716999748e+00 + -2.7441158854097403e-01 9.8108046487425615e-01 3.9753067524121337e+00 + -5.3410199940750203e-01 8.4705099580335497e-01 4.0805322738534331e+00 + -9.0439146052474517e-01 8.9045370258597056e-01 4.1497020317539111e+00 + id 11900 + loc 3.9934566617012024e-01 9.5766067504882813e-01 1085 + blend 0.0000000000000000e+00 + interp 3.6504168878011234e-01:3.6503803836322457e-01:1.2084184944849419e-04:3.2286312712158083e-01:8.8032800160265523e-01:3.3910864615305697e-01:1.8753617438310808e+00:2.6716755110000273e-01:2.5976532893720408e+00:3.4260319772957520e-01:3.4996961403519466e+00 + CVs 20 + 9.5510330000596610e-03 5.7687346026595421e-01 2.6425230827851770e-01 + -4.8483545501490755e-02 1.0672497074455642e+00 4.1830648111259927e-01 + -1.5069555778983185e-01 1.5047372924692546e+00 5.1703003728200148e-01 + -2.9609848031393887e-01 1.8982338183926271e+00 5.6903762710877326e-01 + -4.7967196433585030e-01 2.2301112769352649e+00 5.6038066945268139e-01 + -6.8368223577412834e-01 2.4804550306880904e+00 4.8421175786789405e-01 + -8.7696306875346564e-01 2.6316709845483910e+00 3.4541929492143497e-01 + -1.0222871265831399e+00 2.6811313265711139e+00 1.6740907495524271e-01 + -1.1051442989048497e+00 2.6522400111684701e+00 -1.5422874682010201e-02 + -1.1561035895125049e+00 2.5743705050962897e+00 -1.9035246532123029e-01 + -1.2095390776580870e+00 2.4477427282805597e+00 -3.6804343308884979e-01 + -1.2693332037258125e+00 2.2610391488127353e+00 -5.4382542246369026e-01 + -1.3315173029644745e+00 2.0110093212754871e+00 -7.0040566323489095e-01 + -1.3991134347797416e+00 1.6927806711478457e+00 -8.2159946636213210e-01 + -1.4777241792097848e+00 1.3027274297138982e+00 -8.8549439512955685e-01 + -1.5654234199979535e+00 8.6511434304351098e-01 -8.5968434168732211e-01 + -1.6675685225945553e+00 3.9894847459173172e-01 -7.1521158191087086e-01 + -1.8114084538120891e+00 -7.1946850875348689e-02 -4.3153011759735244e-01 + -1.8933297189203955e+00 -1.9826187851009180e-01 -1.8376073339835264e-01 + id 11901 + loc 7.5497493147850037e-02 2.6987892389297485e-01 1076 + blend 0.0000000000000000e+00 + interp 5.3664081440273126e-01:2.9245193389112972e-01:4.8580838428134276e-01:3.6160078605750090e-01:1.0270076176243528e+00:5.3663544799458729e-01:1.8715313523677426e+00:3.9442521930920310e-01:2.2817504843338634e+00:3.5997750597807909e-01:3.0691942274626078e+00:4.1637886734926105e-01:3.9953226733542211e+00 + CVs 20 + -1.5599500229570867e-01 2.7907653874531246e-01 -3.0400240573332254e-01 + -2.8617308623284199e-01 5.8017732414118628e-01 -6.0260986403117578e-01 + -4.3460825872609321e-01 8.6546120357834710e-01 -9.1855086406632713e-01 + -6.1826968191450149e-01 1.1167565717698671e+00 -1.2549274819621614e+00 + -8.3685035437389355e-01 1.3253142363278954e+00 -1.6040961712250090e+00 + -1.0858013543888825e+00 1.4810183629670515e+00 -1.9574727104080223e+00 + -1.3602990410618288e+00 1.5776466314218121e+00 -2.3064324872837152e+00 + -1.6567015752170149e+00 1.6160349275584789e+00 -2.6420913409084790e+00 + -1.9691129484667045e+00 1.6013886653728173e+00 -2.9553021922974851e+00 + -2.2899305766595401e+00 1.5383678743834386e+00 -3.2372170902141923e+00 + -2.6133762525834041e+00 1.4273465205117881e+00 -3.4786032681409074e+00 + -2.9333025949894456e+00 1.2694740150016646e+00 -3.6727761190724149e+00 + -3.2410611262177298e+00 1.0695891491100846e+00 -3.8154481241548686e+00 + -3.5249311946984858e+00 8.3751725901889174e-01 -3.9057410133170527e+00 + -3.7692395712970974e+00 5.8616139971188019e-01 -3.9473129434956844e+00 + -3.9469560307019975e+00 3.3000912000022731e-01 -3.9471883048586367e+00 + -4.0123583879302736e+00 1.0159123042057239e-01 -3.9128346668688052e+00 + -3.9669741474341889e+00 -5.4483915240976399e-02 -3.8544161957129104e+00 + -3.8805805442869064e+00 -2.9604524187107861e-01 -3.7954800861736322e+00 + id 11902 + loc 2.7380509302020073e-02 8.8532269001007080e-01 1077 + blend 0.0000000000000000e+00 + interp 4.4349794525485220e-01:2.8707738319745113e-01:1.2093064239116513e-01:2.4073718881219539e-01:8.3618161528965207e-01:4.1334389605503330e-01:1.1968398738917663e+00:4.3155998270849316e-01:2.0000655338411573e+00:2.7992852970078241e-01:2.7484898921762371e+00:4.4349351027539968e-01:3.3740978649431033e+00 + CVs 20 + -9.7888520583567576e-03 2.7622166326403241e-01 -3.7959550909214074e-02 + -1.4424199598245091e-02 5.8034820876072124e-01 -6.4807589427906404e-02 + -2.6411289192826148e-03 9.1509546202946979e-01 -1.1478790215032741e-01 + 3.0461772475005200e-02 1.2679928291510409e+00 -2.1490431662690807e-01 + 9.1090026049904516e-02 1.6354890421683375e+00 -3.8167214246339398e-01 + 1.8999615107326889e-01 2.0037835835549984e+00 -6.3124788738852633e-01 + 3.3602537849264064e-01 2.3350980639700598e+00 -9.6904793882271401e-01 + 5.2532190601928752e-01 2.5857022005748824e+00 -1.3815825137597053e+00 + 7.4250920262206810e-01 2.7280430394481696e+00 -1.8441649602121668e+00 + 9.6677124768625555e-01 2.7500113790359046e+00 -2.3292347573111898e+00 + 1.1759834868915142e+00 2.6502592989359903e+00 -2.8102559025670453e+00 + 1.3507456685841523e+00 2.4346728956384904e+00 -3.2631547234384666e+00 + 1.4790387534536016e+00 2.1128075711944945e+00 -3.6666208050559135e+00 + 1.5614681989797510e+00 1.6952035180315737e+00 -4.0018624460022290e+00 + 1.6112979084340360e+00 1.1924306844611126e+00 -4.2472172221860909e+00 + 1.6388802518482382e+00 6.2652390778508127e-01 -4.3487614519794704e+00 + 1.6283836663378148e+00 1.1185657171400853e-01 -4.1820076800426031e+00 + 1.5764774408329849e+00 -1.4836540294737333e-01 -3.7803993203967301e+00 + 1.5325853205800117e+00 -3.9072346837424643e-01 -3.3709246324331139e+00 + id 11903 + loc 5.9979903697967529e-01 8.0301856994628906e-01 1074 + blend 0.0000000000000000e+00 + interp 3.9956689547550434e-01:3.2375321005473917e-01:1.0630353736830467e-01:2.7433669701529717e-01:1.0034020836824427e+00:3.4605453299679251e-01:1.6560356613260028e+00:3.2674632864321695e-01:2.6064114679156472e+00:3.2459478625618354e-01:3.2361573218276685e+00:3.9956289980654958e-01:3.8734959472677741e+00 + CVs 20 + 1.5695438519954291e-01 3.1383986764200850e-01 -3.6135396614058612e-01 + 3.3469911647949918e-01 6.2115408783308768e-01 -7.0530600745693683e-01 + 5.3896929153992801e-01 9.2183354501795634e-01 -1.0529448552737373e+00 + 7.6976360155522983e-01 1.2189475057669132e+00 -1.4142529359967071e+00 + 1.0158768617790503e+00 1.5085757405356590e+00 -1.7938935495313784e+00 + 1.2517108476180812e+00 1.7722163526789672e+00 -2.2015676722155808e+00 + 1.4460282853304365e+00 1.9707271805534359e+00 -2.6452997034574111e+00 + 1.5711886288139574e+00 2.0443046821847526e+00 -3.1138632095496823e+00 + 1.6219324435489570e+00 1.9587605135118611e+00 -3.5807275855366223e+00 + 1.6265941092450418e+00 1.7276481686381779e+00 -4.0410074904039952e+00 + 1.6271825348751856e+00 1.3660544697627610e+00 -4.4934983785325198e+00 + 1.6831335231772673e+00 9.0222826070280304e-01 -4.9273849818081263e+00 + 1.8521273320752496e+00 4.1715211836327820e-01 -5.3433611894224935e+00 + 2.1345721228170773e+00 4.7524439240649252e-02 -5.7641914990800549e+00 + 2.4633736274239584e+00 -8.0840651798340546e-02 -6.1952696447114040e+00 + 2.7520565267235684e+00 8.1812957516521179e-02 -6.5643204295094710e+00 + 2.9239817992788177e+00 4.9295611401111844e-01 -6.7231444372902551e+00 + 3.0002415706997914e+00 8.9514436758149851e-01 -6.6574379453390513e+00 + 3.1755208971591777e+00 1.1853225927686402e+00 -6.8205910570436874e+00 + id 11904 + loc 9.9629479646682739e-01 4.5885759592056274e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7723528056483507e-01:2.7960876908868243e-01:9.9795194200375681e-01:2.8077498763031039e-01:1.9984837570955847e+00:3.7723150821202944e-01:2.6592219632401584e+00:3.1889083805864993e-01:3.0049643133774797e+00:3.4221419283243432e-01:3.9991860947819871e+00 + CVs 20 + -1.3373942552994084e-01 4.4515105872876759e-01 1.8575631531768316e-01 + -2.7359271597038720e-01 8.8019978682359934e-01 3.3787191071617523e-01 + -4.4923532561196422e-01 1.2989492055174430e+00 4.5138003173346875e-01 + -6.8140673209430869e-01 1.6855589981276637e+00 5.2485856970507683e-01 + -9.8090870512738793e-01 2.0146154629825004e+00 5.6025425715481525e-01 + -1.3474847538158621e+00 2.2602532234666430e+00 5.6874566690511763e-01 + -1.7676572151321703e+00 2.4043682090041876e+00 5.7116481346004777e-01 + -2.2178094895697567e+00 2.4422888415487627e+00 5.9241685193468696e-01 + -2.6709542305081402e+00 2.3799070444306554e+00 6.5518847370080968e-01 + -3.0834450458452234e+00 2.2140577899611751e+00 7.6791605927756235e-01 + -3.3854472696815558e+00 1.9392525537411660e+00 8.9995788655622255e-01 + -3.5518395378874428e+00 1.5675866542976773e+00 1.0195835586729876e+00 + -3.5808091063981982e+00 1.0948001095212940e+00 1.1420690121805335e+00 + -3.4436398862922220e+00 5.9181977995565616e-01 1.2494898645162531e+00 + -3.1993040893898455e+00 1.6296744270549085e-01 1.2907602132818703e+00 + -2.9382823261870317e+00 -2.0257348331429742e-01 1.2806250980512348e+00 + -2.6948464764351954e+00 -5.7276933919276130e-01 1.2949310074332234e+00 + -2.5210929317809874e+00 -1.0378883414020015e+00 1.5394675975509535e+00 + -2.4519082984965896e+00 -1.2670116174962960e+00 1.6181009586919335e+00 + id 11905 + loc 5.0536066293716431e-01 7.7406960725784302e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9382884255569176e-01:2.9105124007835842e-01:1.7021948194392700e-01:3.2587329545780108e-01:1.0003242221411253e+00:3.8725321034874205e-01:2.2698981391728976e+00:2.8837980078703335e-01:2.9998209016268311e+00:4.9382390426726624e-01:3.6395728445935061e+00 + CVs 20 + 2.2933110031223169e-02 4.9566926700393454e-01 3.2816018327580426e-01 + -2.3411861439390225e-02 9.4332526832035668e-01 6.1825642459026542e-01 + -1.1092146605338582e-01 1.3679096642369744e+00 9.1448467914635456e-01 + -2.4864590552742361e-01 1.7671226348439637e+00 1.2342726262026067e+00 + -4.6113305981343555e-01 2.1110680354999927e+00 1.5690798670111850e+00 + -7.6297514535369415e-01 2.3602237620740194e+00 1.8965648975190885e+00 + -1.1472951209374407e+00 2.4708771687747584e+00 2.1775692453381055e+00 + -1.5739644674807478e+00 2.4132011451963269e+00 2.3580957300984284e+00 + -1.9634473137786017e+00 2.1851376903039372e+00 2.3928869235690033e+00 + -2.2037751595037185e+00 1.8220997695015388e+00 2.2708380291812542e+00 + -2.2109726132161698e+00 1.4209920159654865e+00 2.0417904458343985e+00 + -2.0230569166457562e+00 1.0719159399675404e+00 1.7887282906275850e+00 + -1.7330533134203343e+00 7.9803868476726758e-01 1.5330651588708120e+00 + -1.4328821546865989e+00 5.8988285698150400e-01 1.2321450759524704e+00 + -1.1844973732204123e+00 4.6818710997080726e-01 8.4321434587563593e-01 + -1.0231219611628830e+00 5.3204086999197364e-01 4.0416218818662819e-01 + -9.6322154323848097e-01 8.4761477109492001e-01 5.6901815637919975e-02 + -9.6745758733554887e-01 1.2273613305108702e+00 -1.5453576045361478e-01 + -9.1420857511807707e-01 1.3290404845370600e+00 -5.7031898653751234e-01 + id 11906 + loc 9.0293729305267334e-01 9.4755536317825317e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7342773869867057e-01:3.7342400442128360e-01:4.5567238826551426e-01:2.9078934589631888e-01:9.9776667670127706e-01:2.4666589561017013e-01:1.7792935623040294e+00:2.6069575393475458e-01:2.8612541726378620e+00:2.2600509109889827e-01:3.6747078915029814e+00 + CVs 20 + 1.6686063321868311e-01 8.0446329120668347e-01 -5.4853152330575927e-01 + 4.0044742185165694e-01 1.6367353410273413e+00 -1.0237569759849907e+00 + 7.0590343288690960e-01 2.5105887285802480e+00 -1.3396058819459709e+00 + 1.0722618466874250e+00 3.3534807044954911e+00 -1.3377270815805624e+00 + 1.4554464569559553e+00 3.9481172291938833e+00 -9.3633836804705983e-01 + 1.7723973115888383e+00 4.1569291249517661e+00 -2.8787000624342429e-01 + 1.9569966874756162e+00 4.0268582903292733e+00 4.1232822133044866e-01 + 1.9902124704750850e+00 3.6570564329595001e+00 1.0663550834236284e+00 + 1.8487223113165099e+00 3.1064634141450345e+00 1.6078193488979240e+00 + 1.5316664756674376e+00 2.4385153547070506e+00 1.9729975940790387e+00 + 1.0939793824875201e+00 1.7212371338059218e+00 2.1411899958414073e+00 + 6.2181405679560953e-01 9.6514404386116248e-01 2.1878144314870394e+00 + 1.6907126521298738e-01 1.1036800903404642e-01 2.2786101507827503e+00 + -2.4297341272822215e-01 -8.8096165750023880e-01 2.6514878832875235e+00 + -4.7135486598763138e-01 -1.8941614160869309e+00 3.6544918117915950e+00 + -6.3284474014866379e-02 -2.3771190643575215e+00 5.1250708228118302e+00 + 9.5073741084874375e-01 -2.2650786303701640e+00 6.0874721695569205e+00 + 1.9760534911352468e+00 -2.0010332407621605e+00 6.2775508497368975e+00 + 2.6098076143917446e+00 -1.7542817739117362e+00 6.2212713539652098e+00 + id 11907 + loc 2.0441569387912750e-01 7.3865729570388794e-01 1054 + blend 0.0000000000000000e+00 + interp 5.8179394879211299e-01:3.3010652655612283e-01:4.0296130432784871e-01:5.8178813085262515e-01:1.0121042531280848e+00:5.3492895887293079e-01:1.2608303396191811e+00:3.4171216838594848e-01:1.9262219098990336e+00:2.5431880435510495e-01:2.4635406998159084e+00:2.5488336085763202e-01:3.1859385673470486e+00:4.7342969007106911e-01:3.9741671691637848e+00 + CVs 20 + 3.5120398150985266e-01 4.1023838693739217e-01 1.3955206248410734e-02 + 6.3899130450552877e-01 7.8743205938401639e-01 8.0283590444577224e-02 + 8.5610859940111683e-01 1.1491098140121661e+00 2.1298982467798511e-01 + 1.0221528051946314e+00 1.4947970899160323e+00 4.1913642613520563e-01 + 1.1843800715583188e+00 1.7927418408748181e+00 6.9284848019817391e-01 + 1.3845658473233329e+00 2.0059191884567724e+00 1.0044002981776516e+00 + 1.6303969340552968e+00 2.1091637492288187e+00 1.3161847365922292e+00 + 1.9047219317702719e+00 2.0844681169185906e+00 1.5932238453028706e+00 + 2.1690892274376212e+00 1.9375506373227536e+00 1.8188651462042100e+00 + 2.3797712185404758e+00 1.6986328903014636e+00 2.0000029567310680e+00 + 2.5100602647638910e+00 1.4130812315682979e+00 2.1610642713739701e+00 + 2.5700772995133931e+00 1.0830003898042269e+00 2.3777844353416424e+00 + 2.6696990914419430e+00 6.6467151257168922e-01 2.7807608694700874e+00 + 3.0582845882280836e+00 2.8362254230482292e-01 3.3266751273139903e+00 + 3.6649984788938750e+00 1.3364006359532399e-01 3.7329350347224639e+00 + 4.2628668109866048e+00 1.2971666488738365e-01 3.9550923469072563e+00 + 4.6744307949143913e+00 1.6259112708900736e-01 4.0500878135443648e+00 + 4.8476217297763338e+00 1.9849498521608033e-01 4.0594388778735091e+00 + 5.1962893601501143e+00 -1.5942925052844970e-01 4.2111692446757232e+00 + id 11908 + loc 6.4706778526306152e-01 3.8302716612815857e-01 1090 + blend 0.0000000000000000e+00 + interp 6.9259298288062032e-01:5.2006417799691051e-01:2.4141580321075340e-01:3.1027459723673068e-01:1.0184566219248734e+00:5.0863688465179679e-01:1.8200362072673348e+00:2.6247465955662219e-01:2.4566704032616191e+00:6.9258605695079156e-01:2.8375360308310551e+00 + CVs 20 + -5.0084081901448974e-02 5.1123379687106918e-01 -2.9613642279793712e-01 + 1.1471054825591354e-02 9.4198116821483957e-01 -5.1259368497088942e-01 + 1.2254604595723395e-01 1.3318165530350035e+00 -6.9293402637697743e-01 + 2.6965734713383538e-01 1.6870746241915970e+00 -8.4187795694471901e-01 + 4.5761884775695727e-01 1.9921256192691494e+00 -9.4429974910603898e-01 + 6.8632346133579014e-01 2.2296042103551486e+00 -9.8588037940707540e-01 + 9.4863265153645004e-01 2.3778310442480857e+00 -9.5480907880538424e-01 + 1.2228971412478309e+00 2.4150978984936606e+00 -8.5360240450128611e-01 + 1.4723318314915022e+00 2.3398533553440339e+00 -7.2409352301643526e-01 + 1.6769153830900960e+00 2.2000755808720962e+00 -6.3416705450148869e-01 + 1.8497066472595054e+00 2.0553858571579204e+00 -6.1174513884408743e-01 + 2.0051234717757005e+00 1.9355447844829925e+00 -6.4661843488410065e-01 + 2.1462753619108055e+00 1.8605167891789236e+00 -7.2631840502341494e-01 + 2.2681448193136742e+00 1.8608462517320818e+00 -8.3759279535404085e-01 + 2.3623182369525439e+00 1.9683188603302773e+00 -9.4507870921503878e-01 + 2.4322141157140962e+00 2.1762795739331855e+00 -9.8079349325692267e-01 + 2.4648903348873294e+00 2.4627260997436604e+00 -8.6627617035789917e-01 + 2.4309273768980408e+00 2.7414206031932653e+00 -5.5150537950984113e-01 + 2.6670509910547340e+00 2.6867178453618865e+00 -6.7887080002751321e-01 + id 11909 + loc 4.1896447539329529e-01 9.5766067504882813e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9738023761564476e-01:4.1826960903097987e-01:3.9222237425775575e-03:3.8376842347259310e-01:8.4417897213024329e-01:3.8593724330376300e-01:1.8073982915895670e+00:4.9737526381326863e-01:2.4325314291351248e+00:4.6211281355997730e-01:2.9975061845463218e+00:3.7073640095900212e-01:3.5088914528629518e+00 + CVs 20 + -1.4401811167904277e-01 3.7209099264216783e-01 3.0438489268567198e-01 + -3.0851867384139603e-01 6.9115174279009928e-01 5.3354093961059224e-01 + -4.6744293602718084e-01 9.8513234082306644e-01 7.3490527523249194e-01 + -6.0900532540969232e-01 1.2617721057019737e+00 9.2192094830736304e-01 + -7.3309239881613120e-01 1.5175107137846395e+00 1.0877873601052555e+00 + -8.3806420875510323e-01 1.7521853143948549e+00 1.2355098372374231e+00 + -9.2500993656870889e-01 1.9725141773798467e+00 1.3830031279890251e+00 + -1.0142368736166152e+00 2.2064556503004589e+00 1.5667512579124403e+00 + -1.1834324124702831e+00 2.5091046039360729e+00 1.7707563575157457e+00 + -1.4598580976251325e+00 2.8438757604319584e+00 1.8288264168306867e+00 + -1.7216936085108423e+00 3.1283423409053532e+00 1.6640825727454081e+00 + -1.8887274923755681e+00 3.3516341678106594e+00 1.2939941352144257e+00 + -1.9601552963060147e+00 3.4415821737544681e+00 7.9064194216667438e-01 + -2.0105733619659034e+00 3.3534111004484126e+00 3.7811207920357170e-01 + -2.1148377931973301e+00 3.1768529532719167e+00 2.1091043685559074e-01 + -2.2736358616387493e+00 2.9524103321845701e+00 3.0047637192073973e-01 + -2.4295139933285959e+00 2.6176822127049491e+00 6.1021687289105797e-01 + -2.4857927866261376e+00 2.1707792808754220e+00 9.3140195409732940e-01 + -2.4109555703611285e+00 2.2306719972907492e+00 6.9260725227358055e-01 + id 11910 + loc 8.8845409452915192e-02 8.7662595510482788e-01 1075 + blend 0.0000000000000000e+00 + interp 5.0724854994961477e-01:3.3028624293269598e-01:6.0946042756637731e-05:3.3139454199870405e-01:9.7328664154249667e-01:2.7750649401989730e-01:1.5046250071608824e+00:5.0724347746411524e-01:2.0009370304302627e+00:4.8707097953353401e-01:2.5903760318671019e+00:3.1786451275149041e-01:3.0351784410217832e+00 + CVs 20 + 4.5971021333871279e-02 3.7973673022867532e-01 -2.1831032612017812e-01 + 1.2609743202584592e-01 7.7364024877152793e-01 -4.6121342013650318e-01 + 1.9294514916161198e-01 1.1952361381844292e+00 -7.2324446107091855e-01 + 2.1188751249955051e-01 1.6472208779286417e+00 -9.8788760930514474e-01 + 1.7239438775877702e-01 2.1050697561385618e+00 -1.2461238922428577e+00 + 1.0599761780599215e-01 2.4979395769496624e+00 -1.5292599556248718e+00 + 7.3936814441075693e-02 2.7254024193374469e+00 -1.8663814079649896e+00 + 1.1925891576341041e-01 2.7251620379531687e+00 -2.1995166528071231e+00 + 2.4290366698226196e-01 2.5226130659062953e+00 -2.4015221673623617e+00 + 4.0316771689168895e-01 2.2483510858957692e+00 -2.4130314063450364e+00 + 5.6949236742175302e-01 2.0018528247506313e+00 -2.3141043393903531e+00 + 7.2888209440212304e-01 1.7766489889416246e+00 -2.1786417611619417e+00 + 8.5555683675764571e-01 1.5377846414767802e+00 -2.0345839290559704e+00 + 8.7305199967312264e-01 1.2747634687393257e+00 -1.8765815724509107e+00 + 7.0809443728078081e-01 1.0355428635776271e+00 -1.7228011643812784e+00 + 3.7829653746470837e-01 9.2571237506559678e-01 -1.6068393534407677e+00 + -6.2041127141223812e-02 1.1003331929502225e+00 -1.6133461171963515e+00 + -3.6854522554317226e-01 1.4105110028205157e+00 -1.8223113002648097e+00 + -5.9181709050969289e-01 1.2523874833518198e+00 -1.7130957401735385e+00 + id 11911 + loc 1.6969923675060272e-01 1.2690742313861847e-01 397 + blend 0.0000000000000000e+00 + interp 4.5360099386868097e-01:3.9171620081433783e-01:7.1208944647240879e-01:2.8013101442176630e-01:1.1102220422273934e+00:3.5119781072093353e-01:2.1477973095592793e+00:4.5359645785874231e-01:2.8504117503394255e+00:3.3886876234925933e-01:3.2037651607831421e+00:3.3974924435281856e-01:3.9838656260030012e+00 + CVs 20 + -2.6235124543272709e-01 2.5409641934921534e-01 -1.0632554339972400e+00 + -4.9146330896842888e-01 3.0253919046576416e-01 -1.7422386515421193e+00 + -7.1903631707791382e-01 2.7973216548211072e-01 -2.3176383572063637e+00 + -9.5485714320536552e-01 2.4593321474594210e-01 -2.9056531277861377e+00 + -1.1843231268983507e+00 1.9867280304707446e-01 -3.5034767127885877e+00 + -1.3957124332311239e+00 1.3233203847305830e-01 -4.1039374438905396e+00 + -1.5879514066774227e+00 3.8135323218498551e-02 -4.6960881977188942e+00 + -1.7690708261514838e+00 -9.6802050801570783e-02 -5.2669348553560296e+00 + -1.9372502340561533e+00 -2.8333284247107715e-01 -5.8021468635703144e+00 + -2.0861444392187432e+00 -5.2471605237968089e-01 -6.2829470503932328e+00 + -2.2136836704013891e+00 -8.1728530416113565e-01 -6.6930236689418683e+00 + -2.3240244026819643e+00 -1.1563831594886054e+00 -7.0240592051473225e+00 + -2.4197113549525393e+00 -1.5358091259010962e+00 -7.2744012369724258e+00 + -2.4943904914749804e+00 -1.9396568174789965e+00 -7.4461512263773564e+00 + -2.5408006501422520e+00 -2.3454975118589072e+00 -7.5471178476049374e+00 + -2.5624228879980557e+00 -2.7361395416662013e+00 -7.5907861777673302e+00 + -2.5694097155247184e+00 -3.1011683911042764e+00 -7.5913977259833025e+00 + -2.5651915170915465e+00 -3.4354190677040171e+00 -7.5592308332937268e+00 + -2.5410131388867554e+00 -3.8031582447481309e+00 -7.4156884229866247e+00 + id 11912 + loc 2.8808298707008362e-01 7.7951598167419434e-01 411 + blend 0.0000000000000000e+00 + interp 5.1838135069085467e-01:5.1837616687734778e-01:4.0214306850507520e-01:3.8769811336795923e-01:9.5190521613765977e-01:4.1087682888759597e-01:1.7790345689888651e+00:2.8662368373223784e-01:2.5483223978824219e+00:3.3608755899337572e-01:3.2023699311787013e+00:3.2460029410380442e-01:3.8909494581846813e+00 + CVs 20 + 8.2712471274480315e-01 1.9875826716538592e-01 -1.2861484705248595e-02 + 1.3801644459661659e+00 2.7241901555435910e-01 -3.4796534793698396e-02 + 1.8607216493439138e+00 2.8524009296382374e-01 -5.2923717509119735e-02 + 2.3739555666222594e+00 2.7066349217742974e-01 -5.7049467692512637e-02 + 2.9180581717124019e+00 2.2281729036904507e-01 -4.2458061017386563e-02 + 3.4819247879857431e+00 1.3926155476801771e-01 -7.5669883067416566e-03 + 4.0523903926548961e+00 2.1295097469647972e-02 4.4956273569909555e-02 + 4.6169157031841994e+00 -1.3006484169230004e-01 1.1174934205330397e-01 + 5.1611667779237473e+00 -3.1638391570555502e-01 1.8995781082086086e-01 + 5.6689274163391739e+00 -5.3889757409597583e-01 2.7392234360899737e-01 + 6.1235106876393024e+00 -7.9509659315275849e-01 3.5396041824700170e-01 + 6.5149648498951391e+00 -1.0795955159619190e+00 4.2285385985261004e-01 + 6.8441815038730187e+00 -1.3855089051222191e+00 4.8111273703967983e-01 + 7.1173060142222093e+00 -1.7033872857909320e+00 5.3329772601948300e-01 + 7.3402057408450316e+00 -2.0216626915662972e+00 5.8238173579465646e-01 + 7.5182808048877625e+00 -2.3294427734547494e+00 6.2827218449788591e-01 + 7.6571427733160853e+00 -2.6198821229231335e+00 6.6929639331861324e-01 + 7.7594634067282051e+00 -2.8913715578488972e+00 7.0717166999932779e-01 + 7.7635509382391135e+00 -3.1474356615030974e+00 7.3444229708597519e-01 + id 11913 + loc 8.3221632242202759e-01 6.0623818635940552e-01 416 + blend 0.0000000000000000e+00 + interp 5.1804338785915194e-01:2.9604437752314483e-01:2.1769002583113539e-01:4.0658270598679291e-01:9.8182344886647654e-01:5.1368583466759676e-01:1.5769447701568842e+00:4.2671562704308774e-01:2.0002711821714989e+00:4.4660671777040095e-01:2.9506390210263023e+00:5.1803820742527340e-01:3.1621296899041389e+00:4.7003939331840749e-01:3.8081600986745361e+00 + CVs 20 + 6.4058609494616281e-01 2.4846102644355397e-01 -4.4497949915134380e-02 + 1.0424108317596015e+00 3.6710429656295107e-01 -7.0220749342921218e-02 + 1.3670001522414419e+00 4.2504395942359346e-01 -8.1513522303144487e-02 + 1.6972591166275413e+00 4.6142863001641554e-01 -7.4516242306134212e-02 + 2.0246624563940072e+00 4.7139588946518329e-01 -5.3695740259725927e-02 + 2.3410776550212193e+00 4.5281250918977911e-01 -2.2254413399685924e-02 + 2.6431288138101601e+00 4.0733058489597518e-01 2.3174757280699121e-02 + 2.9299554618151267e+00 3.3711045588359112e-01 8.3415293909481159e-02 + 3.1998503529878697e+00 2.4225634320244094e-01 1.4992069701082700e-01 + 3.4525861517737813e+00 1.2326963037414829e-01 2.1633694260317562e-01 + 3.6969339018494609e+00 -1.2502162504511860e-02 3.0064165104236124e-01 + 3.9481485010067994e+00 -1.5152510999223101e-01 4.4183179288358576e-01 + 4.2125512916321446e+00 -3.0091827380572145e-01 6.3599329226250489e-01 + 4.4761679573846109e+00 -4.8221818854678022e-01 8.1076086562635963e-01 + 4.7188965160329497e+00 -6.8889884943268020e-01 9.1450555975317083e-01 + 4.9375290115802386e+00 -8.9725762519675878e-01 9.6345438174802744e-01 + 5.1369188743818581e+00 -1.0937508381613295e+00 9.8998503456859366e-01 + 5.3144276695117911e+00 -1.2762589489519294e+00 9.9991837690390994e-01 + 5.3734728294174356e+00 -1.4642588208909957e+00 8.3346629383767357e-01 + id 11914 + loc 9.8457789421081543e-01 4.6972322463989258e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9297925139115573e-01:4.3333613563182638e-01:2.0913275414797916e-01:2.7805014800894901e-01:1.0102968047330876e+00:3.5476540700077880e-01:1.9986706542756290e+00:4.0471000844339799e-01:2.7107271541206668e+00:4.0778973212246011e-01:3.2444900663144196e+00:4.9297432159864185e-01:3.8805917487125607e+00 + CVs 20 + -1.6134478097649080e-01 4.7507819795144057e-01 7.8474564759006660e-02 + -2.8366307968490939e-01 9.6369948498733804e-01 1.6068374219793491e-01 + -3.6827368528036630e-01 1.4440626803391434e+00 2.2321233103695756e-01 + -4.0948085755355051e-01 1.8931208303346205e+00 2.4434058191135299e-01 + -4.2317302361225395e-01 2.3281843239557474e+00 2.4485541982991674e-01 + -4.5245704840678991e-01 2.8127324994751413e+00 3.1375224070072671e-01 + -5.4816352512422561e-01 3.3275483180386902e+00 5.8703535079756830e-01 + -7.3468949636223457e-01 3.7015937233956420e+00 1.0793726566132680e+00 + -1.0101182655366809e+00 3.8369742093790187e+00 1.6495374731723935e+00 + -1.3555355587837297e+00 3.7621111163033358e+00 2.1473773543761103e+00 + -1.7273087386972814e+00 3.5706738997351417e+00 2.4852070233725012e+00 + -2.0882551903234203e+00 3.3344215563390622e+00 2.6703684767131177e+00 + -2.4297024365671738e+00 3.0650610191689021e+00 2.7462179763810473e+00 + -2.7683359342765770e+00 2.7343568523000861e+00 2.7423869070868090e+00 + -3.0928161382171786e+00 2.3138329285824089e+00 2.6634667238541034e+00 + -3.3270399200827967e+00 1.8120095363384574e+00 2.5040426919467627e+00 + -3.3941377666258910e+00 1.2797058820775664e+00 2.2521323188322340e+00 + -3.2354845710135858e+00 8.6018023277578459e-01 1.9159942951642193e+00 + -2.9237890363976469e+00 6.7083372172695532e-01 1.6319651040320520e+00 + id 11915 + loc 3.3038738369941711e-01 1.0209311544895172e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3798443876284332e-01:3.4645988770782288e-01:4.0239385404224159e-01:4.3798005891845571e-01:8.8702956516150278e-01:4.1100417162508890e-01:1.1610636275729227e+00:3.6494747703406255e-01:1.3981937192657734e+00:2.9615446228173142e-01:1.9996352424110433e+00:4.2246566455890128e-01:2.4610887470024307e+00:3.7596461798744552e-01:2.9880447834493298e+00:2.7121454656140870e-01:3.8146385792838933e+00 + CVs 20 + -1.9038400479929840e-01 2.1552868341582215e-01 -2.2977068584917062e-01 + -3.8860535025868098e-01 4.3832900451690193e-01 -4.4014738404709458e-01 + -6.0130529098441754e-01 6.5668817848715832e-01 -6.5460353757264822e-01 + -8.3492985748237636e-01 8.6269195477949945e-01 -8.7723169589088157e-01 + -1.0967245212389694e+00 1.0534464668456891e+00 -1.0951996132684927e+00 + -1.3912971921933268e+00 1.2190694309605554e+00 -1.2909684933376344e+00 + -1.7175211479044030e+00 1.3400518438954789e+00 -1.4457317635319922e+00 + -2.0606973290236721e+00 1.3907078560427226e+00 -1.5468010462485677e+00 + -2.3889501226473526e+00 1.3476902884637307e+00 -1.5933831854720251e+00 + -2.6661470641069656e+00 1.2053413149992260e+00 -1.5948099327218352e+00 + -2.8759612090764120e+00 9.7958327392362632e-01 -1.5660708216190180e+00 + -3.0363368657139920e+00 6.8955738380277465e-01 -1.5253697778766211e+00 + -3.1812395735365389e+00 3.4367455172384798e-01 -1.4922626902409926e+00 + -3.3347524619037618e+00 -4.9458288326531763e-02 -1.4901790341670045e+00 + -3.5109951639630750e+00 -4.7247211003866296e-01 -1.5541558858806674e+00 + -3.6963277515357555e+00 -8.8850838352660677e-01 -1.7477718678014653e+00 + -3.8125982487686754e+00 -1.2101885967459927e+00 -2.1471518072209319e+00 + -3.7840704569281725e+00 -1.3487349111419169e+00 -2.6707141390981857e+00 + -3.9064460044106797e+00 -1.5905514837208590e+00 -2.9694790006975120e+00 + id 11916 + loc 9.5504641532897949e-01 7.6204437017440796e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1650847772822636e-01:4.1650431264344911e-01:1.5839205498010656e-02:3.4542455086724699e-01:7.2036171934775750e-01:3.8544407986125895e-01:1.1352367699512536e+00:3.5739161659515423e-01:1.8520111114633275e+00:3.7396747636453614e-01:2.3960151052326224e+00:2.4744994537294590e-01:3.2694316669286714e+00 + CVs 20 + 1.0521846908929969e-01 2.9236844310979893e-01 -2.5655941585839542e-01 + 1.9566238257107388e-01 5.8736033460399406e-01 -5.2020328539301541e-01 + 3.0070862863421260e-01 8.8669958646031577e-01 -8.1115854694788558e-01 + 4.3927513683354052e-01 1.1794826725042333e+00 -1.1374157097624085e+00 + 6.1897355922077624e-01 1.4457115350230521e+00 -1.4979314364919702e+00 + 8.3761478068453765e-01 1.6613330821772874e+00 -1.8885334933108353e+00 + 1.0786287826130756e+00 1.8031444334781641e+00 -2.3029336166189167e+00 + 1.3103429929881547e+00 1.8538312923405404e+00 -2.7347086411417285e+00 + 1.4997686374941894e+00 1.8083049614356637e+00 -3.1773807158538179e+00 + 1.6251831579485405e+00 1.6716397248114905e+00 -3.6181281391328892e+00 + 1.6709725456172748e+00 1.4541741039123874e+00 -4.0298064778504870e+00 + 1.6262825929872975e+00 1.1767025354191629e+00 -4.3756087341018786e+00 + 1.4917455930250740e+00 8.7062927653587585e-01 -4.6189073729036494e+00 + 1.2821171409688517e+00 5.7606727606002039e-01 -4.7279858004624877e+00 + 1.0264851188917878e+00 3.4634792049823471e-01 -4.6850451876712667e+00 + 7.6846834133058428e-01 2.4694779478998152e-01 -4.5035112747677690e+00 + 5.6254142824204389e-01 3.1435946827581251e-01 -4.2485734792685586e+00 + 4.2380358783317540e-01 4.7034387895444785e-01 -4.0214003734683885e+00 + 1.5456771517104045e-01 3.2011624962410856e-01 -3.9175184916950716e+00 + id 11917 + loc 8.2841533422470093e-01 3.8429361581802368e-01 1054 + blend 0.0000000000000000e+00 + interp 4.5044459682611349e-01:2.1803397548115719e-01:1.8202242218712306e-01:2.7877574857438220e-01:1.0917940738717651e+00:4.5044009238014526e-01:1.9999400358568451e+00:2.9229409749555524e-01:2.4502329493687283e+00:3.3180786713279292e-01:3.0158466615603787e+00:3.0539808449452505e-01:3.6739526189065632e+00 + CVs 20 + -1.0696520711817797e-01 5.4734731033721551e-01 2.7055269445392865e-01 + -1.9267373597030615e-01 1.0725927377631872e+00 4.3332232512942981e-01 + -2.6443175941899000e-01 1.6061110895481210e+00 5.1874319633209676e-01 + -4.1977751043575928e-01 2.1687696680353330e+00 5.9681294662791884e-01 + -7.7094108542137241e-01 2.6816246224874587e+00 7.4592042441610118e-01 + -1.3055355949767709e+00 2.9944107633687902e+00 1.0051502141673025e+00 + -1.9042641006618739e+00 3.0220825091774839e+00 1.3458357509389456e+00 + -2.4584144133626906e+00 2.7883594840437356e+00 1.6933368880868440e+00 + -2.9346246852112809e+00 2.3750737099812245e+00 1.9750330172573736e+00 + -3.3554010931611393e+00 1.8989214080540640e+00 2.1393308951677112e+00 + -3.7693159757887438e+00 1.5039362143364687e+00 2.1821031966842042e+00 + -4.1464068877121418e+00 1.3350753770136228e+00 2.2177142997400772e+00 + -4.2734934441497607e+00 1.4578316004053311e+00 2.4455504624263051e+00 + -3.9424363497987840e+00 1.6946401726290690e+00 2.7544263497609949e+00 + -3.5750810445506422e+00 1.8113677362964240e+00 2.9206379426377662e+00 + -3.5046716052495404e+00 1.8594609149284755e+00 3.1599654922290434e+00 + -3.8378751018278541e+00 1.8287912369838413e+00 3.6763015583304663e+00 + -4.7043619296605064e+00 1.4919128026411728e+00 4.3551851896745433e+00 + -4.9029704467241313e+00 1.3710747111111881e+00 4.6197904648803396e+00 + id 11918 + loc 8.9024358987808228e-01 3.4591194987297058e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6817694511349253e-01:2.4467772283708861e-01:1.0575883733773639e-01:2.7310399719428052e-01:1.0346098517106703e+00:3.1102998986814773e-01:1.9964736031362755e+00:2.9746449293255089e-01:2.6724684238597378e+00:3.6817326334404143e-01:3.0423727574688653e+00:2.6768304880193439e-01:3.7034513434895056e+00 + CVs 20 + -8.4117363999919259e-02 4.9834033828553137e-01 4.3640056615463896e-01 + -2.0406280605836108e-01 1.0008774487054615e+00 8.3984685361811762e-01 + -3.8665186985539179e-01 1.5123398709059359e+00 1.1925047753712381e+00 + -6.6467075330362546e-01 2.0220165394056235e+00 1.4721729469988314e+00 + -1.0676676851676439e+00 2.4872367086729406e+00 1.6541291908475579e+00 + -1.5875215106393537e+00 2.8431291442644238e+00 1.7426240539754634e+00 + -2.1829191491828404e+00 3.0266927050748715e+00 1.7677371604198677e+00 + -2.8056660658201733e+00 3.0055446448063621e+00 1.7687212134762516e+00 + -3.4177124309618829e+00 2.7757934604301093e+00 1.7656869076415855e+00 + -3.9701651021606903e+00 2.3524658534162395e+00 1.7428717528538262e+00 + -4.3982785199561887e+00 1.7791072701057484e+00 1.6654872200984772e+00 + -4.6538068086695459e+00 1.1119448665400165e+00 1.5052291069262740e+00 + -4.7134328200323843e+00 3.9370717283725565e-01 1.2376513039841823e+00 + -4.5545599315890861e+00 -2.8937913299841267e-01 8.4522108914049510e-01 + -4.1837727734201691e+00 -7.9621633763298050e-01 3.5236541476178551e-01 + -3.6821680555713652e+00 -1.0323313615718104e+00 -1.6926450701882867e-01 + -3.1049572529134988e+00 -1.0894422980170253e+00 -7.6650063283608516e-01 + -2.3686861466673466e+00 -9.2248990910518280e-01 -1.5181804283827476e+00 + -2.1498190616980599e+00 -4.4791192634493338e-01 -1.1449672458433500e+00 + id 11919 + loc 2.8425100445747375e-01 7.2841411828994751e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1489771954648752e-01:3.0790466074163464e-01:4.6807071226327357e-01:4.1489357056929205e-01:1.2179748574430833e+00:2.8673357748338252e-01:1.8506556999509454e+00:3.4942995762446261e-01:2.3751093438947315e+00:3.1919242677086052e-01:3.0184984506623529e+00:4.0025362120057117e-01:3.8714788668586566e+00 + CVs 20 + -1.6434719946842022e-01 3.7410253804642835e-01 3.4838531127187272e-01 + -3.6529206772874606e-01 6.7082818592765037e-01 5.9188952038025877e-01 + -5.9945233857593694e-01 9.3020983190762585e-01 7.9605515434806295e-01 + -8.6252801055443451e-01 1.1583398248052807e+00 9.7885254720503123e-01 + -1.1488693251655395e+00 1.3406538683243436e+00 1.1261340682840442e+00 + -1.4447548461523203e+00 1.4637285171755434e+00 1.2277318809580400e+00 + -1.7306273550830731e+00 1.5184202192531000e+00 1.2807293709757921e+00 + -1.9859550768930923e+00 1.5037715370276636e+00 1.2922138845670208e+00 + -2.1910849374585788e+00 1.4284279213264996e+00 1.2818666195761579e+00 + -2.3388084699818954e+00 1.3132935397665315e+00 1.2783854851416401e+00 + -2.4411736805343791e+00 1.1844698692604030e+00 1.3019698695254576e+00 + -2.5116221803675005e+00 1.0656136377938565e+00 1.3595760457186388e+00 + -2.5563956534752266e+00 9.8244141308277433e-01 1.4495418631425903e+00 + -2.5732714278680371e+00 9.7266558469412268e-01 1.5595642821390094e+00 + -2.5665448456954043e+00 1.0477808389942014e+00 1.6475954072388495e+00 + -2.5593276393274231e+00 1.1308480317729697e+00 1.6798112772529237e+00 + -2.5565676517810019e+00 1.1602497613781693e+00 1.6698908196489015e+00 + -2.5840732994569451e+00 1.1109177667847154e+00 1.6617679029623948e+00 + -2.8030750045312054e+00 9.7169475008230566e-01 1.8197149979057157e+00 + id 11920 + loc 9.2732852697372437e-01 9.6681147813796997e-02 384 + blend 0.0000000000000000e+00 + interp 1.4680955635465107e+00:1.0601658855424050e+00:1.5629463910855714e+00:1.4680855635465107e+00:1.5766423412541686e+00:6.3493984908272227e-01:1.6191399058645879e+00:5.3501941042517009e-01:1.9979070644121359e+00:2.8538500875193651e-01:2.2737986030044959e+00:2.7479771572561834e-01:2.8287548150010227e+00:4.6221732481286820e-01:3.0216207263264425e+00:7.7395701579864329e-01:3.2151049915883454e+00:1.4523357074244414e+00:3.3757117779065284e+00 + CVs 20 + -1.3430530399495821e+00 3.1255372717623831e-01 6.2368023281627671e-01 + -2.1945503403599407e+00 4.0672058141372164e-01 1.0706416766563764e+00 + -2.9101907652725529e+00 4.2111887376148038e-01 1.4582025052304826e+00 + -3.6315616124451333e+00 3.8095108799875110e-01 1.8261984936313513e+00 + -4.3442283338177674e+00 2.7661564564812835e-01 2.1429805547077705e+00 + -5.0275081753810102e+00 1.1280772033762171e-01 2.3829379486174012e+00 + -5.6659330740051335e+00 -8.8822127118768690e-02 2.5378399749177256e+00 + -6.2590158774106417e+00 -2.9715072578557411e-01 2.6210494660287327e+00 + -6.8307822404222112e+00 -4.9476465650806090e-01 2.6650528278702317e+00 + -7.4194243632282353e+00 -6.9737623679969318e-01 2.7094383650994538e+00 + -8.0480508312216088e+00 -9.4862884891205601e-01 2.7883918179613927e+00 + -8.7066294147480807e+00 -1.3065716885605387e+00 2.9150345447633699e+00 + -9.3408818039143000e+00 -1.8261082882588413e+00 3.0601674792056102e+00 + -9.8487177001201811e+00 -2.4981900130069086e+00 3.1746140891263450e+00 + -1.0151636740846163e+01 -3.2257665170047991e+00 3.2678387619440712e+00 + -1.0287073035458743e+01 -3.9280330907493521e+00 3.3737800586500994e+00 + -1.0347101306637120e+01 -4.5887454364787574e+00 3.5167182007271585e+00 + -1.0391541756371765e+01 -5.2021665051851684e+00 3.7376645317503576e+00 + -1.0402573469082061e+01 -5.7007780576040084e+00 4.1581764618435866e+00 + id 11921 + loc 6.7743104696273804e-01 1.5931004285812378e-01 416 + blend 0.0000000000000000e+00 + interp 4.2598964017852747e-01:3.1464622649905366e-01:2.7659205282358779e-01:3.4439773415442693e-01:1.4928894753086728e+00:2.8819105208689932e-01:2.0154743879425863e+00:3.5328561782584478e-01:2.9357463615504189e+00:4.2598538028212568e-01:3.1683491355956295e+00:3.8820636884191739e-01:3.7055364707169041e+00 + CVs 20 + -5.5995094917561405e-01 2.4222294897252672e-01 2.4536429746376709e-02 + -9.9669305915873097e-01 3.7238159929886722e-01 7.5346758051139939e-02 + -1.4064229941766848e+00 4.5855767936547559e-01 1.0930049181421314e-01 + -1.8469076665744870e+00 5.2518709258189222e-01 1.1388975914760124e-01 + -2.3092791805844306e+00 5.6566532270600800e-01 8.1787370480409904e-02 + -2.7805388925762391e+00 5.7648286643259972e-01 4.3301710420429185e-03 + -3.2467185274723578e+00 5.5723363548470228e-01 -1.2345890720893216e-01 + -3.6951461541423738e+00 5.0957144729672210e-01 -2.9922600898561780e-01 + -4.1139403107125236e+00 4.3778411327873679e-01 -5.1695339708148813e-01 + -4.4932047916270994e+00 3.4780433811624611e-01 -7.6874564222380748e-01 + -4.8364049811371590e+00 2.3621441235527696e-01 -1.0333322679611801e+00 + -5.1719862000572547e+00 7.7014320402064573e-02 -1.2642218724303431e+00 + -5.5234876214394291e+00 -1.5772362243623705e-01 -1.4080962375526342e+00 + -5.8675536159089532e+00 -4.5439264473561902e-01 -1.4542204363283473e+00 + -6.1724409896179049e+00 -7.7878432205631620e-01 -1.4368835906457091e+00 + -6.4317313086848102e+00 -1.1160988914968262e+00 -1.3704795615208041e+00 + -6.6425308964052858e+00 -1.4538291481660610e+00 -1.2441193182514569e+00 + -6.8013528539394086e+00 -1.7692769331470872e+00 -1.0611125430630177e+00 + -6.9643310921048762e+00 -1.9863226321914693e+00 -1.0246539493957716e+00 + id 11922 + loc 9.0094625949859619e-01 7.8257727622985840e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2154516009981341e-01:2.7562656311641726e-01:1.5321893158082034e-01:4.2154094464821246e-01:7.6706192192994427e-01:4.0203288289667616e-01:1.0199997860634911e+00:2.5690605042074427e-01:1.9511474791295171e+00:2.6954623116596454e-01:2.7142335313718871e+00:3.1365369621898676e-01:3.7566824504513470e+00 + CVs 20 + 1.3471821288756719e-01 4.4078734846134809e-01 -2.9677845363294331e-01 + 2.8258485327028526e-01 8.7488175900297549e-01 -5.2327572351806884e-01 + 4.4526518444592800e-01 1.2998107327819466e+00 -7.0265034078780853e-01 + 6.2910839648156947e-01 1.7119232509937363e+00 -8.6553223759098108e-01 + 8.4660058076054689e-01 2.1022198793906215e+00 -1.0489737158147279e+00 + 1.1048873500992076e+00 2.4474882220462129e+00 -1.2925261984818848e+00 + 1.3929695172834067e+00 2.7113624167649593e+00 -1.6129400339018942e+00 + 1.6861914564144567e+00 2.8681616453669370e+00 -1.9964300118956106e+00 + 1.9606377864642717e+00 2.9136209752684348e+00 -2.4153757068743236e+00 + 2.1990529710808717e+00 2.8580484912562540e+00 -2.8432304927221792e+00 + 2.3895467929366125e+00 2.7193861519910403e+00 -3.2583771570677529e+00 + 2.5266906068535908e+00 2.5184692216454265e+00 -3.6454296115649734e+00 + 2.6166965381983034e+00 2.2744538920202069e+00 -4.0013421868437700e+00 + 2.6712348292893293e+00 1.9992815182195458e+00 -4.3331550446099625e+00 + 2.6950034903831517e+00 1.6982101437927197e+00 -4.6410077937446124e+00 + 2.6758228891383284e+00 1.3669650858043207e+00 -4.9102517891403785e+00 + 2.6044318035606526e+00 1.0065203403875096e+00 -5.1351785338820299e+00 + 2.4744873503918403e+00 6.4478952083013619e-01 -5.3409381482670009e+00 + 2.1713542411395594e+00 3.5473292388931399e-01 -5.6157797834561531e+00 + id 11923 + loc 4.1720896959304810e-01 5.0048428773880005e-01 1077 + blend 0.0000000000000000e+00 + interp 3.2307969734123354e-01:3.0712426246778413e-01:5.6231831592041659e-01:2.4444984428027475e-01:1.4036136709754945e+00:3.2307646654426014e-01:2.2529606111459120e+00:2.5252886480337194e-01:3.2965479627014291e+00 + CVs 20 + 1.5681194648352356e-01 2.8389134300357666e-01 -2.0412803572146071e-01 + 2.7512059348897067e-01 5.7770024895141459e-01 -4.1129866019757277e-01 + 3.7801478103355923e-01 8.5048070071112614e-01 -6.3607812051275270e-01 + 4.7477860247535542e-01 1.0891021154261677e+00 -8.8477169029204228e-01 + 5.6769778645867641e-01 1.2919588471480281e+00 -1.1580423255892645e+00 + 6.6557810660611572e-01 1.4604632295094384e+00 -1.4574850507345460e+00 + 7.8256881424520031e-01 1.5944160991586991e+00 -1.7845674676140608e+00 + 9.3236045252442468e-01 1.6895549087716872e+00 -2.1364315314904592e+00 + 1.1225244339817371e+00 1.7398967849346663e+00 -2.5023857699850089e+00 + 1.3500667109822975e+00 1.7431372359823127e+00 -2.8638265441182966e+00 + 1.6015331604199001e+00 1.7062109623415662e+00 -3.2011485531088755e+00 + 1.8625234753524142e+00 1.6420886305478279e+00 -3.5031385731168414e+00 + 2.1252253584010901e+00 1.5619398521092172e+00 -3.7665967087756060e+00 + 2.3879955108274125e+00 1.4742641759333768e+00 -3.9882786601523539e+00 + 2.6590788608017992e+00 1.3865722019873896e+00 -4.1603130916203916e+00 + 2.9509106970668997e+00 1.2908136217731985e+00 -4.2718301713174478e+00 + 3.2596906967657908e+00 1.1595067565870263e+00 -4.2957259158062051e+00 + 3.5491171272786586e+00 9.4186399508974672e-01 -4.2588867653505025e+00 + 3.5576168216354063e+00 8.3706412813084019e-01 -4.5075414481605529e+00 + id 11924 + loc 2.9821550846099854e-01 7.2841411828994751e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4224386855047654e-01:3.6401954075885556e-01:4.6135718105851620e-01:4.4223944611179106e-01:1.1837651238476559e+00:3.1127640296978842e-01:1.8805333094196870e+00:4.1602607993814722e-01:2.3868848887345058e+00:3.5044636641710819e-01:3.0080896702701638e+00:4.3114030350429344e-01:3.9026026638145348e+00 + CVs 20 + -2.3655596658928224e-01 3.4394086550790259e-01 3.8304501717319356e-01 + -4.8020312962833628e-01 6.1062964769893135e-01 6.8117098267223541e-01 + -7.2562852645759202e-01 8.4290008681518436e-01 9.4835864465277275e-01 + -9.6749622337269803e-01 1.0507966849541344e+00 1.1899181341975393e+00 + -1.1986556216683617e+00 1.2256033071644470e+00 1.3846257824498438e+00 + -1.4006306703009976e+00 1.3597011303884139e+00 1.5282739880253930e+00 + -1.5494637233015840e+00 1.4521601576335921e+00 1.6456218579543691e+00 + -1.6305503403171957e+00 1.5217725117822509e+00 1.8000022969873684e+00 + -1.6954997677320072e+00 1.6234882884482567e+00 2.0297963323406769e+00 + -1.8099639199424282e+00 1.7802271887799062e+00 2.2273967524409444e+00 + -1.9170318168207832e+00 1.9908126576293903e+00 2.3080219425516684e+00 + -1.9612059774399353e+00 2.2764041404765334e+00 2.2481383658008052e+00 + -1.9626907815338401e+00 2.4919657027468252e+00 2.0347803806480842e+00 + -1.9759133239672522e+00 2.4293983041839260e+00 1.8109921418727057e+00 + -2.0064430430201345e+00 2.0980744004841809e+00 1.6737251555401345e+00 + -1.9878250708129179e+00 1.5859426699496768e+00 1.5545683185919743e+00 + -1.8598195074930368e+00 1.0081260310025995e+00 1.3293214251288230e+00 + -1.6639306302518877e+00 5.8163153376652610e-01 9.2740891034319195e-01 + -1.5482769783080472e+00 5.2489422583583900e-01 4.5192228091600661e-01 + id 11925 + loc 5.1218688488006592e-01 6.8217664957046509e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0627824314678815e-01:2.5221447794853502e-01:1.0940766171111171e-01:5.0627318036435676e-01:9.7151312296400416e-01:4.1687057730042892e-01:1.2083025320961358e+00:4.0589897231397204e-01:1.9633181366870331e+00:4.0660355486829797e-01:2.6402738893279327e+00:3.1404306546741528e-01:3.1295779801228325e+00 + CVs 20 + 8.4753749119135302e-02 8.1579898149619645e-01 -2.9803434047460037e-01 + 2.4328902112221665e-01 1.7069957743780459e+00 -5.2175536990480276e-01 + 5.1131553260657459e-01 2.6356147883352383e+00 -5.6578043449622417e-01 + 8.9945599836581325e-01 3.4709571884364476e+00 -3.4158193517664248e-01 + 1.3605445769026525e+00 4.0332217714653558e+00 1.5756445006574471e-01 + 1.7839178730837175e+00 4.1945192008031107e+00 8.2399998928618978e-01 + 2.0752612853268628e+00 3.9702143583326661e+00 1.5220445765585191e+00 + 2.1922951409449669e+00 3.4764060420283176e+00 2.1714808100933625e+00 + 2.1063565924070669e+00 2.8775176568245859e+00 2.7145635936924251e+00 + 1.8494209950882234e+00 2.3743288077907261e+00 3.1097355618038898e+00 + 1.5660899318916244e+00 2.0668871455782507e+00 3.3661633426754918e+00 + 1.3608545379668395e+00 1.8464438557913454e+00 3.5884272859133475e+00 + 1.1381552229968328e+00 1.5771060114753594e+00 3.8589572418202045e+00 + 7.2794254046842854e-01 1.1741175293643278e+00 4.0619341015358312e+00 + -5.5310372139103198e-02 5.4397761866249605e-01 4.0415057658177957e+00 + -1.0480506879369975e+00 -6.4236080600745082e-01 4.0651003747567263e+00 + -1.3237680667329550e+00 -2.2050655597604125e+00 4.5171611943566878e+00 + -7.0488876134746448e-01 -3.3452175732179548e+00 5.2108703321964409e+00 + 8.1983626193968540e-02 -3.6406268170784046e+00 5.8657485326394099e+00 + id 11926 + loc 7.1361422538757324e-01 5.4016453027725220e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7042919214261671e-01:2.5986416384054806e-01:1.8533509319674091e-01:3.1873560162273007e-01:9.7950010885817695e-01:2.1987928995154901e-01:1.8615420694796825e+00:3.7042548785069529e-01:2.2665677892008049e+00:2.7256751022546649e-01:3.0000125929357293e+00:3.0539808449452505e-01:3.4843050059296021e+00 + CVs 20 + 2.1111623362544024e-01 4.2569681456987191e-01 -2.0503154463998374e-01 + 3.8602274964651007e-01 8.1790439204755661e-01 -3.5059937113714512e-01 + 5.1471424712872471e-01 1.2124286998445009e+00 -4.4141845511107769e-01 + 6.1920904444813929e-01 1.6208266253526866e+00 -4.8616357747127448e-01 + 7.6534679890147550e-01 2.0244242388852101e+00 -5.0631042791015823e-01 + 1.0128764213271331e+00 2.3795214387848098e+00 -5.3538599270338094e-01 + 1.3626253013977496e+00 2.6335791755967453e+00 -6.0594127354907967e-01 + 1.7699052447697081e+00 2.7380889237560013e+00 -7.4038884608341204e-01 + 2.1680148928422471e+00 2.6695461563293845e+00 -9.3101273210785851e-01 + 2.4772389883469272e+00 2.4163734932772347e+00 -1.1464686429135404e+00 + 2.6543299299583309e+00 1.9891965138486456e+00 -1.3228109038699429e+00 + 2.6879052788677655e+00 1.4675535083661337e+00 -1.3057813275607084e+00 + 2.6221958052909695e+00 9.2601926079220476e-01 -9.5458567104855319e-01 + 2.7557479989671916e+00 4.4645770249124228e-01 -4.0404928394226025e-01 + 3.1395789609830991e+00 1.8297925853605679e-01 -4.4264765638688419e-02 + 3.5216670682243434e+00 1.5943675406668129e-01 2.2824093110985655e-02 + 3.7089572316580646e+00 3.8822559295877590e-01 -2.1224514669472638e-01 + 3.8535509843197810e+00 6.3058875742018550e-01 -6.1510229731561417e-01 + 4.1230828584298207e+00 2.8178348185474800e-01 -4.4353313057686616e-01 + id 11927 + loc 4.7881552577018738e-01 6.3993662595748901e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2336211793910056e-01:3.6794364596912704e-01:8.5526558262409846e-02:3.8718867422949127e-01:9.7896602751323525e-01:3.4404367832447025e-01:1.6311992983634234e+00:3.4661357440953133e-01:2.3978798294927968e+00:3.5816942606465807e-01:3.0118576740127376e+00:4.2335788431792121e-01:3.6130500109000998e+00 + CVs 20 + -1.3520851968895581e-01 4.7149521915790960e-01 2.2724879615154492e-01 + -2.9718677612461886e-01 8.7407097579718318e-01 3.6385571213550949e-01 + -4.8761172371196193e-01 1.2320358196926269e+00 4.5833638284051575e-01 + -7.0717921777476944e-01 1.5470619214624033e+00 5.2262199811038546e-01 + -9.5111563241420094e-01 1.8081937993087229e+00 5.5133074518227732e-01 + -1.2093571514018691e+00 2.0084107412564602e+00 5.4315120440516140e-01 + -1.4703483520076726e+00 2.1447587501930419e+00 5.0010314498975572e-01 + -1.7250195571240787e+00 2.2186859697733343e+00 4.2652683019474658e-01 + -1.9695467327462821e+00 2.2335929255469420e+00 3.2659567350925900e-01 + -2.2041312260813979e+00 2.1899254270484683e+00 2.0408307983910379e-01 + -2.4285167047927336e+00 2.0862784510198633e+00 6.9650733456236402e-02 + -2.6425655238051515e+00 1.9247320749359349e+00 -5.8965318898242303e-02 + -2.8462144560003186e+00 1.7104197604226570e+00 -1.6362635683023158e-01 + -3.0392549130353146e+00 1.4513754972770294e+00 -2.2592189082212105e-01 + -3.2224026610467900e+00 1.1658295075339797e+00 -2.2244866023911600e-01 + -3.4039353430749686e+00 8.7827527469559807e-01 -1.3230880692944186e-01 + -3.6068713610934653e+00 6.2388549573372953e-01 4.3930078237591014e-02 + -3.8658002174848445e+00 4.3983830171661398e-01 2.8490121261374535e-01 + -4.2367838823973285e+00 2.0760390088945610e-01 6.0086253513445587e-01 + id 11928 + loc 5.4322886466979980e-01 1.5541422367095947e-01 1053 + blend 0.0000000000000000e+00 + interp 5.5713875622456377e-01:2.8082720689577934e-01:5.2071182923070003e-02:2.7540084406293108e-01:1.1435953804703198e+00:5.5713318483700158e-01:1.9382486227967681e+00:5.3045312817290291e-01:2.1981686350142606e+00:3.0324625185121651e-01:2.7790504577312385e+00:4.1095474307200963e-01:3.2972678353987770e+00 + CVs 20 + 2.5796855553134712e-01 3.8283954265654790e-01 -3.0096276709963699e-01 + 5.1080881175137649e-01 7.1372013970710246e-01 -5.6372772711986208e-01 + 7.5895480794611381e-01 9.9859987473653300e-01 -8.0703433685907866e-01 + 1.0021568467325097e+00 1.2284565706804567e+00 -1.0376670788342999e+00 + 1.2387489566903336e+00 1.3958664453755680e+00 -1.2543805324152353e+00 + 1.4666024951897625e+00 1.5064611197911080e+00 -1.4580654784177460e+00 + 1.6870675667870834e+00 1.5706324271747278e+00 -1.6540094143829092e+00 + 1.9096340382681591e+00 1.5948952261068059e+00 -1.8522636834764263e+00 + 2.1416100891079277e+00 1.5837692614147629e+00 -2.0512032571474035e+00 + 2.3789304326576022e+00 1.5528486434553874e+00 -2.2401709658022435e+00 + 2.6223705904607262e+00 1.5267905121323360e+00 -2.4110662716325590e+00 + 2.8866587736617713e+00 1.5134803493489679e+00 -2.5507568366485165e+00 + 3.1813541084143955e+00 1.4602180546885581e+00 -2.6496626354778350e+00 + 3.4172955224962864e+00 1.2306082966102205e+00 -2.7188780293092147e+00 + 3.4512875021475247e+00 7.6202509895990400e-01 -2.7652966976413262e+00 + 3.2739598478642731e+00 9.0003417898227078e-02 -2.7208557426039923e+00 + 2.9533946835100449e+00 -7.0687740008564037e-01 -2.4479414689374552e+00 + 2.6193659135143510e+00 -1.3271189815760835e+00 -1.9330165989369472e+00 + 2.6582515802194262e+00 -1.2159753014222920e+00 -1.7623702369928804e+00 + id 11929 + loc 4.3291869759559631e-01 1.6614224016666412e-01 411 + blend 0.0000000000000000e+00 + interp 4.6091872054717520e-01:3.5669108143211414e-01:4.0803499234612484e-01:3.4439723124691862e-01:1.0515391823217135e+00:3.3672280627267848e-01:1.9345231001603886e+00:3.6930548130119140e-01:2.2803585196022857e+00:2.6789725933420466e-01:2.9981238850825558e+00:4.6091411135996974e-01:3.9905537175058523e+00 + CVs 20 + -1.2540290863295059e-01 1.9154577550507224e-01 -5.4207601084651547e-01 + -2.5829454565849663e-01 3.1948303640595666e-01 -9.6155386877805871e-01 + -3.7909864966827539e-01 4.2240438540908304e-01 -1.3795838531026601e+00 + -4.7044512578567232e-01 5.1352671355134338e-01 -1.8469480806490173e+00 + -5.2630993143437399e-01 5.7891812154342948e-01 -2.3584154870508174e+00 + -5.4458519980218423e-01 6.0564469645352348e-01 -2.9038602372029958e+00 + -5.2690185733461736e-01 5.8225618540606794e-01 -3.4710637143016290e+00 + -4.7694442626653305e-01 4.9527701595265317e-01 -4.0441175645039475e+00 + -4.0247988542463614e-01 3.3123788187043535e-01 -4.6004585401217559e+00 + -3.1869707359042904e-01 8.1633154031041766e-02 -5.1102555960897886e+00 + -2.4290491752025947e-01 -2.5006925721805029e-01 -5.5395793557762385e+00 + -1.8298032241471340e-01 -6.4111633857934569e-01 -5.8654345446897755e+00 + -1.3636340464274388e-01 -1.0585306652723374e+00 -6.0884502126799127e+00 + -9.9109021880865122e-02 -1.4730742137824944e+00 -6.2238937106189720e+00 + -6.7522886467615284e-02 -1.8617864118671013e+00 -6.2890162492701887e+00 + -3.4414917543411860e-02 -2.2073429369579194e+00 -6.3011654319678971e+00 + 6.2030744343518629e-03 -2.5022021282497553e+00 -6.2822438397922165e+00 + 4.9690489831700324e-02 -2.7586295970941679e+00 -6.2605451347342402e+00 + 9.1905121697227421e-02 -3.0302955022502127e+00 -6.2939222917584345e+00 + id 11930 + loc 8.7947481870651245e-01 3.9752626419067383e-01 397 + blend 0.0000000000000000e+00 + interp 5.3507263556244744e-01:2.8824799317968425e-01:1.9715599883727919e-01:4.0094862282732197e-01:5.1766440937512848e-01:5.3506728483609189e-01:1.1579606469891579e+00:4.5818337703647544e-01:1.6234018742599008e+00:3.3411532573453301e-01:2.0255251145213391e+00:2.7795619661100435e-01:2.9783347795301101e+00:4.2859693478377253e-01:3.2349453331463649e+00 + CVs 20 + -1.2609632365509666e+00 2.3490527677034467e-01 3.1620355816545564e-01 + -2.0599975373286097e+00 2.5435734806320121e-01 5.4263414838186430e-01 + -2.7603230581627942e+00 1.9937147087828497e-01 7.6512409342140653e-01 + -3.4859360723469752e+00 1.1780572856401716e-01 1.0165514602331067e+00 + -4.2108392579784528e+00 -4.3575906116469776e-03 1.3060003575603474e+00 + -4.9090015546612378e+00 -1.6367611879813565e-01 1.6388654560113078e+00 + -5.5590511752795040e+00 -3.5010442156026922e-01 2.0089449317535952e+00 + -6.1511444598985303e+00 -5.5844228031559973e-01 2.3941534505268169e+00 + -6.6891715564822780e+00 -7.9359553263732585e-01 2.7666204936561454e+00 + -7.1835005845092539e+00 -1.0671679859983114e+00 3.1027120263572749e+00 + -7.6430896625203895e+00 -1.3948301593298171e+00 3.3884144688741449e+00 + -8.0680491383637083e+00 -1.7902068811753145e+00 3.6172977733688190e+00 + -8.4522534049409277e+00 -2.2610780397889965e+00 3.7872030041643345e+00 + -8.7852943392654748e+00 -2.8055435295902731e+00 3.8983265276777468e+00 + -9.0545567744600408e+00 -3.4124081640451340e+00 3.9581112969347414e+00 + -9.2464430547283047e+00 -4.0606251049563262e+00 3.9823065674508618e+00 + -9.3504155387520864e+00 -4.7136744014831224e+00 3.9828396236848054e+00 + -9.3675279050404381e+00 -5.3236603779702936e+00 3.9599718459107032e+00 + -9.3063096297332013e+00 -5.8168253734070694e+00 3.8932589744164887e+00 + id 11931 + loc 1.1668191850185394e-01 8.5709416866302490e-01 1048 + blend 0.0000000000000000e+00 + interp 7.3939304608105583e-01:3.1789757977871341e-01:1.1239636522283758e-01:4.4177277555616207e-01:1.0345039494520614e+00:7.2160712107440605e-01:1.7565232210287016e+00:7.3938565215059504e-01:1.9906410588274093e+00:6.6226161436874287e-01:2.1746325160897366e+00:4.8652390832470116e-01:2.5854306800454943e+00:4.2902989448457057e-01:3.0046682719917399e+00:5.3973137938210525e-01:3.6030273954966212e+00 + CVs 20 + 8.3411545595772962e-02 5.0581447337573049e-01 -2.9941432392205658e-01 + 1.8910935701475273e-01 1.0064325371747092e+00 -5.4082671085401679e-01 + 3.0653691724968041e-01 1.5097590797046918e+00 -7.1478456801742374e-01 + 4.5510438626133976e-01 2.0273066732555964e+00 -8.3892443925375848e-01 + 6.7313928321071126e-01 2.5414003161481400e+00 -9.4538964616768018e-01 + 9.8261609551032070e-01 3.0086194331049980e+00 -1.0748897040614656e+00 + 1.3763033371859810e+00 3.3841667111201996e+00 -1.2511058662651195e+00 + 1.8240247988298544e+00 3.6374364805915422e+00 -1.4766192499388069e+00 + 2.2836152232620415e+00 3.7546212079380825e+00 -1.7500359156018928e+00 + 2.7142563037858327e+00 3.7486723006012310e+00 -2.0714410826485175e+00 + 3.0833548629082324e+00 3.6462954332729627e+00 -2.4364819767780892e+00 + 3.3584548034339181e+00 3.4611058112622022e+00 -2.8261239865662811e+00 + 3.5104600090562821e+00 3.1937512046428269e+00 -3.2097652163644392e+00 + 3.5783075209272281e+00 2.8473984279151958e+00 -3.6044022640903801e+00 + 3.6407591558069567e+00 2.4069207731998890e+00 -4.0635256146810086e+00 + 3.7086905860993560e+00 1.8875326399999679e+00 -4.5568681893991165e+00 + 3.6867196769284418e+00 1.3313634443889981e+00 -4.9335084628849000e+00 + 3.5067027314511452e+00 8.0291340110203469e-01 -5.0420364845709527e+00 + 3.3757864710755254e+00 3.0371942640487837e-01 -5.3696038304714886e+00 + id 11932 + loc 5.3740161657333374e-01 8.5506343841552734e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7624626499822287e-01:3.3019813058351549e-01:8.9367413052877431e-01:4.7624150253557290e-01:1.4135847534073589e+00:3.2528145579936663e-01:1.9814847624565282e+00:3.6556439828616388e-01:2.4843895928476494e+00:3.4213160817607946e-01:2.9994623762224641e+00:3.8349558493725533e-01:3.9902892203863720e+00 + CVs 20 + 2.1871731730943489e-01 1.7690704915758138e-01 -3.2433514919434187e-01 + 4.2686259563380152e-01 3.4723935003356265e-01 -6.4059308798155246e-01 + 6.2792752012314512e-01 5.0349574732432134e-01 -9.5302740603117353e-01 + 8.1563537668411046e-01 6.4834899841489924e-01 -1.2641408799164315e+00 + 9.7821697626516357e-01 7.8153493608253688e-01 -1.5726197782015343e+00 + 1.1065251444341189e+00 8.9721382281009054e-01 -1.8771193001704998e+00 + 1.1967847870041677e+00 9.8611134461314487e-01 -2.1725034372929644e+00 + 1.2490765438903597e+00 1.0383263367918154e+00 -2.4458786720131243e+00 + 1.2643292558203276e+00 1.0496929097848386e+00 -2.6785459047444866e+00 + 1.2425026037788263e+00 1.0282955036957513e+00 -2.8486918405851949e+00 + 1.1850191479160328e+00 9.9950288696779654e-01 -2.9423048697149388e+00 + 1.1006298310301494e+00 9.9865527993801217e-01 -2.9678985044507180e+00 + 1.0049603241603975e+00 1.0519536072359770e+00 -2.9557788310068425e+00 + 9.1402807314138601e-01 1.1544914215512871e+00 -2.9510183770660152e+00 + 8.4625672875512081e-01 1.2819387583288866e+00 -2.9776593414931032e+00 + 8.4344309421022845e-01 1.4323078790288370e+00 -3.0229813855057301e+00 + 9.5466459628298805e-01 1.6036040428640230e+00 -3.0791823889633974e+00 + 1.1200623520410211e+00 1.7192067374081974e+00 -3.1641784930506622e+00 + 9.7723303446855314e-01 1.5944504655410323e+00 -3.2349198707267610e+00 + id 11933 + loc 8.9791721105575562e-01 4.1926571726799011e-01 1074 + blend 0.0000000000000000e+00 + interp 5.0092571390561047e-01:3.2542590282362693e-01:3.1666957005017649e-03:5.0092070464847138e-01:6.7854836490552017e-01:3.2830931101754840e-01:1.1019152507713375e+00:4.6490660225028252e-01:1.9978729509021873e+00:3.3460363439738666e-01:2.7212168494381110e+00:3.5924785961696443e-01:3.2955072630302191e+00 + CVs 20 + -1.4184478112718402e-01 3.2377036923687291e-01 1.9694632033832010e-01 + -2.8117453434503564e-01 6.4097030635253716e-01 3.7708775466966643e-01 + -4.3204070221275814e-01 9.4649194772801704e-01 5.4163873562833320e-01 + -5.9740322499807608e-01 1.2362445069592747e+00 6.9458358887187333e-01 + -7.7572266719070881e-01 1.5087111321515330e+00 8.4262985276817348e-01 + -9.6619531248436186e-01 1.7642987760348028e+00 9.9459808908261660e-01 + -1.1693142684617661e+00 2.0057823380310129e+00 1.1630514800683351e+00 + -1.3845697052369290e+00 2.2359336526212283e+00 1.3654657694929888e+00 + -1.6048231438297846e+00 2.4514812373795358e+00 1.6220744842697570e+00 + -1.8145123067135742e+00 2.6394709039142108e+00 1.9479827132857026e+00 + -1.9959307301946336e+00 2.7791192167795638e+00 2.3440609685255418e+00 + -2.1356187291706870e+00 2.8464587399087944e+00 2.7911946087839472e+00 + -2.2304141360359098e+00 2.8265718785036453e+00 3.2575421061024810e+00 + -2.2900386397705295e+00 2.7191346900221567e+00 3.7160852722305466e+00 + -2.3315690269573608e+00 2.5297829975185246e+00 4.1508204757418810e+00 + -2.3757270114504876e+00 2.2605907080877365e+00 4.5553110087597419e+00 + -2.4403414134817361e+00 1.9095019322044631e+00 4.9174313856035710e+00 + -2.5244930806866868e+00 1.4912951326923738e+00 5.2038387718575594e+00 + -2.6014297715208134e+00 1.1103802755004570e+00 5.3323808300319593e+00 + id 11934 + loc 2.8760433197021484e-01 1.5144883096218109e-01 1090 + blend 0.0000000000000000e+00 + interp 4.8615130753225533e-01:3.3503942664030956e-01:5.8611326038916500e-01:3.8937801817337364e-01:1.1229596708266341e+00:3.1550105743466267e-01:2.0535409923666128e+00:2.6182402758450524e-01:3.2495812141210045e+00:4.8614644601918000e-01:3.9761048641578181e+00 + CVs 20 + 4.3642328676983316e-01 5.0692286629625072e-01 -5.0973581714614663e-02 + 7.3310202458989548e-01 9.5783882477165705e-01 -2.9829176652437395e-02 + 9.6189859812020018e-01 1.3872927618130446e+00 2.7993366306550527e-02 + 1.1424282011901137e+00 1.8170036159371274e+00 1.2503723747204787e-01 + 1.2567858449738687e+00 2.2320891549809394e+00 2.7454525146683095e-01 + 1.2827133248852323e+00 2.6116472723436219e+00 4.8712977351847020e-01 + 1.1892381800182261e+00 2.9209706767465731e+00 7.6529891652180737e-01 + 9.5018973011893781e-01 3.1036525335507745e+00 1.0808629464457811e+00 + 5.9585141813079301e-01 3.1116061474074810e+00 1.3660999408886774e+00 + 2.2152353627169197e-01 2.9702368338264620e+00 1.5841686322123096e+00 + -1.1686122105201235e-01 2.7325600373675933e+00 1.7657213747195333e+00 + -4.0867212059334040e-01 2.4134283322537122e+00 1.9398841264686257e+00 + -6.3855441396005586e-01 2.0098348255666574e+00 2.1209513035613634e+00 + -7.7115408022818488e-01 1.5154084153252314e+00 2.3228648111565708e+00 + -7.5234518253070504e-01 9.4974939593827834e-01 2.5508279885850245e+00 + -5.6999112744867264e-01 4.1616837971292442e-01 2.8002228312529525e+00 + -2.7953255663978316e-01 2.2050365174906994e-02 3.0803902434543877e+00 + 3.8245944207614402e-02 -1.9935369566028432e-01 3.3762329892482748e+00 + 1.7595090482176079e-01 -3.7646149237266679e-01 3.5277096841154059e+00 + id 11935 + loc 1.9918054342269897e-01 1.0311085730791092e-01 1077 + blend 0.0000000000000000e+00 + interp 3.1714498410580805e-01:2.6177400386551486e-01:4.1608707859942107e-01:2.6903925534976803e-01:1.0344862289261065e+00:2.4319398112615026e-01:1.9985162527020295e+00:3.1714181265596703e-01:2.9867892187176119e+00:2.6731965041221600e-01:3.7111814543208288e+00 + CVs 20 + -1.1608717637971964e-01 3.0621092036466568e-01 5.5978405190188624e-02 + -2.4589159845870370e-01 6.1718757659032397e-01 9.5799192177622533e-02 + -3.9450242973525962e-01 9.3399830724941380e-01 1.1313136373084381e-01 + -5.6853248139144164e-01 1.2508301832496258e+00 9.8608731858132570e-02 + -7.7673705402901017e-01 1.5542513942374852e+00 3.9784361345910124e-02 + -1.0224707159392867e+00 1.8255943575723732e+00 -7.4500756229843201e-02 + -1.3006634358554079e+00 2.0428607448788858e+00 -2.5150427249988538e-01 + -1.5969514685870216e+00 2.1873095336899615e+00 -4.9037950067650571e-01 + -1.8921904163106724e+00 2.2492632859234876e+00 -7.8011571937754676e-01 + -2.1735999564129367e+00 2.2303041287568344e+00 -1.0995525035972633e+00 + -2.4429260549421277e+00 2.1393567949481662e+00 -1.4234715605740023e+00 + -2.7101559675613451e+00 1.9834432328653637e+00 -1.7286279644591598e+00 + -2.9846864086405027e+00 1.7654596046033317e+00 -1.9912479061383319e+00 + -3.2735049395864273e+00 1.4927183087238738e+00 -2.1815474634595859e+00 + -3.5775269027877461e+00 1.1904969808892814e+00 -2.2646335044590526e+00 + -3.8759595853462501e+00 9.3190419515380185e-01 -2.2316492899711564e+00 + -4.1264147191606790e+00 8.1023916538513285e-01 -2.1564755673508467e+00 + -4.2924868122006021e+00 8.1586062817306360e-01 -2.1380804147475461e+00 + -4.5141683190347761e+00 8.4832198888766341e-01 -2.0364567306665102e+00 + id 11936 + loc 7.9407465457916260e-01 2.3263546824455261e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3063672804441311e-01:3.4185283687656481e-01:9.7449497813153485e-03:3.6884589935606366e-01:5.0967413515146109e-01:4.3063242167713267e-01:9.5777018298511019e-01:3.4677854113361478e-01:1.6474486566873603e+00:3.8108512075480372e-01:2.5513041081240129e+00:2.8898328599032169e-01:3.1000366851743255e+00 + CVs 20 + -2.0392122802168886e-01 3.7838068131803093e-01 1.8598740490589577e-01 + -4.0747430866106732e-01 7.5751924409471316e-01 3.7537960643816287e-01 + -6.0818503658704204e-01 1.1207050980964350e+00 5.9340060938699002e-01 + -7.9234455814551485e-01 1.4525940115989848e+00 8.5210594882977309e-01 + -9.5007806241068105e-01 1.7366816268605598e+00 1.1571963744952640e+00 + -1.0912518459751401e+00 1.9552114116596218e+00 1.5125832725316204e+00 + -1.2343794778404042e+00 2.0989786123595344e+00 1.9192809699024052e+00 + -1.3906639923826887e+00 2.1651979882088739e+00 2.3736798961054597e+00 + -1.5633459442007021e+00 2.1506470069282093e+00 2.8632220908911399e+00 + -1.7499073457598102e+00 2.0500900122182957e+00 3.3672602111028258e+00 + -1.9291515930046570e+00 1.8614618157775102e+00 3.8516586356101690e+00 + -2.0403731099877760e+00 1.6095364085163855e+00 4.2623079439443616e+00 + -2.0165936442745127e+00 1.3730617626073651e+00 4.5518022202274899e+00 + -1.8798064654130355e+00 1.2136410764312808e+00 4.7433749411884776e+00 + -1.6881140463424715e+00 1.0991893389707397e+00 4.8936996585150414e+00 + -1.4991529927743570e+00 1.1433026144044032e+00 4.9974796850564358e+00 + -1.6692590220878942e+00 1.6821224448804803e+00 5.0385704532765017e+00 + -2.5023481604139692e+00 2.2229326518148405e+00 5.0503650126776360e+00 + -2.0887017777144297e+00 2.3649348548679687e+00 5.1444212013820136e+00 + id 11937 + loc 5.6005501747131348e-01 1.7900037765502930e-01 397 + blend 0.0000000000000000e+00 + interp 5.0743461133044310e-01:4.6448102911042471e-01:4.8753294235320044e-02:5.0510503175475951e-01:5.8760026652655706e-01:5.0498283105859054e-01:9.9971744433312182e-01:5.0742953698432980e-01:1.4019580055766545e+00:3.1783830187068618e-01:2.1074130607807011e+00:3.0449474855595793e-01:2.9747889948379167e+00:4.5865426215262656e-01:3.7911565189764769e+00 + CVs 20 + -1.0258659712083038e+00 1.7550219266935274e-01 2.9664412874752488e-01 + -1.6435722730120013e+00 1.8079273929160000e-01 4.8442605404246064e-01 + -2.1654586000934337e+00 1.3345032926285705e-01 6.3255399693989067e-01 + -2.7090065632709908e+00 1.0123546238479936e-01 7.5462079992988440e-01 + -3.2752652519155010e+00 7.2540499219038823e-02 8.5947651963481686e-01 + -3.8660404399665027e+00 3.0318546946309255e-02 9.6218243368118506e-01 + -4.4791613272419966e+00 -3.5824241011475522e-02 1.0847976017178573e+00 + -5.1107647434457260e+00 -1.2626313057436789e-01 1.2501864087114822e+00 + -5.7602641844408673e+00 -2.5273844187434791e-01 1.4636563814484500e+00 + -6.4252181804006812e+00 -4.4113295228899441e-01 1.7128889939909482e+00 + -7.0723250363012156e+00 -7.2203359513588417e-01 2.0048087437000439e+00 + -7.6467258921810535e+00 -1.1052221441330963e+00 2.3475902770539139e+00 + -8.1038145206107224e+00 -1.5741349603848405e+00 2.7311787015044229e+00 + -8.4232171547916934e+00 -2.0983382395767216e+00 3.1288780451846199e+00 + -8.6032058953363411e+00 -2.6411193169458134e+00 3.5108283973385914e+00 + -8.6567275560321342e+00 -3.1700235433748705e+00 3.8550760860431010e+00 + -8.6066053984194255e+00 -3.6658721731374388e+00 4.1472698040730434e+00 + -8.4786180021319417e+00 -4.1135572654333128e+00 4.3749302310813025e+00 + -8.2729663377535161e+00 -4.4571343772700489e+00 4.5087766549256187e+00 + id 11938 + loc 1.1139305680990219e-01 5.3607959300279617e-02 1048 + blend 0.0000000000000000e+00 + interp 5.1024981959819848e-01:4.7045547776976959e-01:2.3206488304032158e-02:2.7931389161549020e-01:1.3990855010726182e+00:4.9666783404367887e-01:1.9886178050323271e+00:5.1024471710000252e-01:2.7906172549309556e+00:4.5311472356701299e-01:3.3422335550542748e+00 + CVs 20 + -2.8020497464891869e-01 4.5326976614473624e-01 2.7454306420848368e-02 + -5.4216623954468468e-01 8.5735636800985748e-01 2.3945151460058045e-02 + -7.8805738847385975e-01 1.2247736059032475e+00 -4.0387300523404557e-03 + -1.0175315174446014e+00 1.5539076008229851e+00 -5.2798937491327802e-02 + -1.2249981104527246e+00 1.8346111234656084e+00 -1.2376282823452778e-01 + -1.4041707568057009e+00 2.0621169993087269e+00 -2.1226981597044947e-01 + -1.5469380998829450e+00 2.2389248764248628e+00 -3.0759861865368110e-01 + -1.6411938566224125e+00 2.3744632332977185e+00 -4.0161109110166826e-01 + -1.6650343789031137e+00 2.5121318094907830e+00 -4.9899011215292677e-01 + -1.6417930582941502e+00 2.7509528047995504e+00 -6.4919197289840436e-01 + -1.7277973017050083e+00 3.0643706631743077e+00 -8.8300480405606940e-01 + -1.9612718737349901e+00 3.2665523661294991e+00 -1.1030729970918689e+00 + -2.2595089716188825e+00 3.3290284349851849e+00 -1.2738403230980861e+00 + -2.5814852246378392e+00 3.2898085416876457e+00 -1.3432479386354561e+00 + -2.8464998066423881e+00 3.2061661248303190e+00 -1.2007705956174997e+00 + -2.9820014763000717e+00 3.1292547408316569e+00 -8.5399362373016086e-01 + -2.8454511587255329e+00 3.0654218382516758e+00 -4.0560398032742140e-01 + -2.0491888066718831e+00 2.8279472160711601e+00 2.1758300162866862e-01 + -2.1566328749663866e+00 2.8836378920062318e+00 2.9549455366550736e-01 + id 11939 + loc 7.8502249717712402e-01 9.5346283912658691e-01 411 + blend 0.0000000000000000e+00 + interp 5.3404335313593854e-01:4.2042743720064557e-01:5.0609539547969984e-03:4.7229720895100680e-01:7.8124584478864612e-01:2.9133249797451827e-01:1.1032447553175915e+00:3.8829327626010668e-01:1.4149680773828464e+00:5.3403801270240725e-01:2.0127223220694006e+00:3.1259040326264709e-01:2.8282541075220098e+00:3.4515544694480454e-01:3.3465555121060451e+00 + CVs 20 + 9.8718079703294226e-01 2.1936603719079437e-01 -2.0167020090518317e-01 + 1.6554296260806096e+00 2.6097251610111505e-01 -3.6093158662369818e-01 + 2.2380764410896234e+00 2.2801252664015309e-01 -5.0296548315408096e-01 + 2.8291233142303835e+00 1.5963338598407467e-01 -6.3955821768273102e-01 + 3.4186409231053529e+00 4.9442853176056789e-02 -7.6979544957524715e-01 + 3.9970915234849422e+00 -1.0563657496220102e-01 -8.9539089139848682e-01 + 4.5539908663472284e+00 -3.0569362146839285e-01 -1.0202534840333908e+00 + 5.0756495109311626e+00 -5.5017804360833966e-01 -1.1496156548381311e+00 + 5.5440140614111062e+00 -8.3748830693007825e-01 -1.2906081505554043e+00 + 5.9414447422692680e+00 -1.1609825041691282e+00 -1.4470768839512980e+00 + 6.2556519764696894e+00 -1.5095267615632562e+00 -1.6197734263442345e+00 + 6.4937879391911322e+00 -1.8815263968220846e+00 -1.8041932468597741e+00 + 6.6730916112727829e+00 -2.2873352054908089e+00 -1.9885579368417692e+00 + 6.7993903788880292e+00 -2.7269893093923283e+00 -2.1562706314822910e+00 + 6.8696191826671544e+00 -3.1853131482231491e+00 -2.2934876851141253e+00 + 6.8816434376924693e+00 -3.6502313625864824e+00 -2.3913357947580756e+00 + 6.8341423420194758e+00 -4.1158505654870705e+00 -2.4429272634409642e+00 + 6.7320869131285264e+00 -4.5708691876609713e+00 -2.4498838667657288e+00 + 6.6589712141947022e+00 -5.1365715527632902e+00 -2.4307260509410091e+00 + id 11940 + loc 4.1755533218383789e-01 1.7912652343511581e-02 1077 + blend 0.0000000000000000e+00 + interp 4.7818081534463069e-01:3.2702153934066602e-01:3.9885709056653118e-02:2.9649725278891981e-01:9.3538020370708286e-01:4.7817603353647725e-01:1.5185476946314780e+00:2.6196705556277594e-01:2.1310011117841454e+00:3.0290606984427965e-01:3.3855683355342183e+00 + CVs 20 + -1.7516038657118765e-01 2.8547036975631684e-01 8.0564051428524006e-02 + -3.3551498613417707e-01 5.6442206833881770e-01 1.4916719133897838e-01 + -4.9185777743423426e-01 8.4339312222725227e-01 2.0602096339237691e-01 + -6.5690485442323210e-01 1.1290857462533619e+00 2.4777785041750261e-01 + -8.4518508417187166e-01 1.4235507053521008e+00 2.6420331676510123e-01 + -1.0710784098155637e+00 1.7225335061140972e+00 2.4241826870761451e-01 + -1.3440839005445990e+00 2.0128544674944688e+00 1.6821785199258543e-01 + -1.6636882486214160e+00 2.2740871143703076e+00 2.9637658984798643e-02 + -2.0164118644981510e+00 2.4853759481252311e+00 -1.7904118367587951e-01 + -2.3794147672332748e+00 2.6308551041088970e+00 -4.5359315042040627e-01 + -2.7367341495336905e+00 2.7031712099405865e+00 -7.7839534599905813e-01 + -3.0904307156761144e+00 2.6987440244057184e+00 -1.1332933073381044e+00 + -3.4483583726935256e+00 2.6107614179853313e+00 -1.4979476948477652e+00 + -3.8070890911268411e+00 2.4346152687195373e+00 -1.8464138599405509e+00 + -4.1517801996368027e+00 2.1818222760121326e+00 -2.1481769115529534e+00 + -4.4455365502751425e+00 1.9059110743149621e+00 -2.3637804453138185e+00 + -4.6129817398927537e+00 1.6972185338589569e+00 -2.5047849460457745e+00 + -4.6330584361854656e+00 1.5577800231565746e+00 -2.6315292944206559e+00 + -4.8798943755605508e+00 1.5597314521307479e+00 -2.4406180401886939e+00 + id 11941 + loc 6.2256187200546265e-01 8.6544340848922729e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3102797197053638e-01:3.9013267898485837e-01:4.1154713643198559e-02:3.4787523002013176e-01:7.4627227771419569e-01:3.5351860495864762e-01:1.0639193947022885e+00:3.7843865014608596e-01:1.7829955750887185e+00:3.9094776968475775e-01:2.0299419473589473e+00:3.3133148610127339e-01:2.8283989849414519e+00:3.1426953437800870e-01:3.1260090538898124e+00:4.3102366169081668e-01:3.7023640895823533e+00 + CVs 20 + -1.6096482544260390e-01 2.1479889544062841e-01 2.5677027690787702e-01 + -3.2167713697210176e-01 3.7022246475701942e-01 4.4684333142939564e-01 + -4.7164598297534233e-01 5.0060094301883162e-01 6.0194614718598594e-01 + -5.9153072137282414e-01 6.2485939372505583e-01 7.5186969107784440e-01 + -6.8090780978984711e-01 7.5431806268058077e-01 9.0637897906122200e-01 + -7.4947779818247973e-01 9.0804468867874633e-01 1.0755745694158858e+00 + -8.2366689579569696e-01 1.1075202126760264e+00 1.2596036773831027e+00 + -9.4230464654130075e-01 1.3596666941451316e+00 1.4341857169304137e+00 + -1.1201941080872597e+00 1.6436204619915786e+00 1.5521839601962908e+00 + -1.3214364874038367e+00 1.9201293929269523e+00 1.5684095166004286e+00 + -1.5022264754185839e+00 2.1639305559777582e+00 1.4704939414538041e+00 + -1.6581935662976441e+00 2.3681866038480637e+00 1.2669191520989560e+00 + -1.8009609714160157e+00 2.5217415165664967e+00 9.6304690468843202e-01 + -1.9331921511878758e+00 2.5970027049798254e+00 5.5712827116921049e-01 + -2.0624660712577469e+00 2.5455756397889493e+00 6.1995516448004273e-02 + -2.1955649699542445e+00 2.2972073774801571e+00 -4.2082558683485405e-01 + -2.3137352368354684e+00 1.8535562038870803e+00 -7.6319780906660284e-01 + -2.4513636632129185e+00 1.3036559758408064e+00 -9.0897640350726561e-01 + -2.7864240104887190e+00 9.9319197429874984e-01 -7.4791287081326885e-01 + id 11942 + loc 3.4848749637603760e-01 3.9692929387092590e-01 384 + blend 0.0000000000000000e+00 + interp 1.4523457074244415e+00:1.4523357074244414e+00:2.2995339339762866e-01:7.0409407109238653e-01:4.1083741507333316e-01:5.0560646253710695e-01:8.9945383182275540e-01:2.8242853080602787e-01:1.0337911193279739e+00:2.7794772527948591e-01:1.9167365434044332e+00:4.8538785189447381e-01:2.0585539888465689e+00:9.6134166305659452e-01:2.1031703428444706e+00:8.1288661756966774e-01:2.1513957105088406e+00 + CVs 20 + -4.4230520315008048e-01 1.9537996981065020e-01 -1.2932277780442494e+00 + -7.8751843976130642e-01 1.9727407179180306e-01 -2.0669142484651779e+00 + -1.1262902650807627e+00 1.3298717875903199e-01 -2.7194751097702392e+00 + -1.4899952035626085e+00 4.5935230507733432e-02 -3.3979926192842851e+00 + -1.8699462163248419e+00 -7.7594886011945446e-02 -4.0925806385252086e+00 + -2.2590510320896735e+00 -2.4430156542638876e-01 -4.7878859256343720e+00 + -2.6546291969815003e+00 -4.5899546766917348e-01 -5.4683414777397488e+00 + -3.0485032819172755e+00 -7.3128454299144152e-01 -6.1132773133675622e+00 + -3.4244367628336323e+00 -1.0709043836645340e+00 -6.6984360505397058e+00 + -3.7650281644836374e+00 -1.4774175906989271e+00 -7.1983002355669701e+00 + -4.0595423433923212e+00 -1.9336925298067236e+00 -7.5936155177114264e+00 + -4.3039062898921516e+00 -2.4121984289445115e+00 -7.8813298486829773e+00 + -4.4988944239120716e+00 -2.8870084152686486e+00 -8.0743528740883708e+00 + -4.6501080072517329e+00 -3.3411325879447347e+00 -8.1931706796588006e+00 + -4.7678888481596768e+00 -3.7671742205218428e+00 -8.2587812189864938e+00 + -4.8669981622509262e+00 -4.1619098378825985e+00 -8.2890025514246197e+00 + -4.9623144179485088e+00 -4.5227724665653177e+00 -8.2961147248130054e+00 + -5.0567085387152320e+00 -4.8530279668893854e+00 -8.2835267389844720e+00 + -5.0888147481783390e+00 -5.1792737215086424e+00 -8.1868011117472186e+00 + id 11943 + loc 7.4449586868286133e-01 9.3894320726394653e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2721601885488975e-01:3.8066594192848485e-01:8.5784619882357527e-03:3.8811857992105347e-01:7.0421188086328801e-01:3.3814191521667442e-01:1.2553472686830671e+00:4.2126716447654045e-01:1.7329153023070172e+00:3.5534008453816457e-01:2.0519812447325183e+00:4.2721174669470119e-01:2.9385700675088149e+00:3.2103160021170674e-01:3.4304617439574110e+00 + CVs 20 + 1.4687314942243786e-02 2.7678081514743685e-01 -1.6942721718341255e-01 + 8.0990133385710483e-02 5.4252886406167988e-01 -3.2466505415646674e-01 + 1.8279071146037351e-01 7.8881614638510378e-01 -4.6046245948472264e-01 + 3.1057614418402929e-01 1.0142590219366905e+00 -5.7805871388715679e-01 + 4.6149958358934473e-01 1.2213630221466241e+00 -6.8266469897250004e-01 + 6.2811262294964432e-01 1.4138582596363256e+00 -7.8165242783395117e-01 + 8.0211110041347644e-01 1.5947903982708203e+00 -8.8059110626025783e-01 + 9.7536359436737829e-01 1.7665504686368778e+00 -9.8183475925314145e-01 + 1.1412028720349159e+00 1.9304215079718698e+00 -1.0883496079572132e+00 + 1.2985607859523456e+00 2.0873137838258788e+00 -1.2060932938786133e+00 + 1.4550579005775122e+00 2.2244638116621611e+00 -1.3447937545856794e+00 + 1.6110766784847510e+00 2.2909510479084028e+00 -1.5039374210379313e+00 + 1.7441712172062056e+00 2.2470090881934017e+00 -1.6572557062647828e+00 + 1.8248039270268810e+00 2.0963959005246786e+00 -1.7820909499714066e+00 + 1.8310019168300264e+00 1.8482753534576424e+00 -1.8824557088439089e+00 + 1.7672826309679717e+00 1.5160301788525441e+00 -2.0081494882887525e+00 + 1.6697561234997236e+00 1.1117245593492309e+00 -2.2486829058060076e+00 + 1.7013483907143174e+00 7.1167771717332895e-01 -2.5826766681613780e+00 + 1.9205233736303131e+00 6.9454786214510855e-01 -2.5534135164243685e+00 + id 11944 + loc 4.3904951214790344e-01 9.6918433904647827e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7624626499822287e-01:3.4559434177115866e-01:5.2576751000338429e-01:1.6107263995241780e-01:1.9523978309448833e+00:3.2077600672229956e-01:2.9982742567936809e+00:4.7624150253557290e-01:3.4217352502308955e+00:4.1724029365318654e-01:3.9861972847384428e+00 + CVs 20 + 1.1165746040568013e-01 2.1545143633986627e-01 -1.7562537287604404e-01 + 2.1049133386872002e-01 4.2046227455559543e-01 -3.4439238750729545e-01 + 3.0836654095573773e-01 6.0523268731148749e-01 -5.0683260150295495e-01 + 4.1063088258513702e-01 7.6396539743779290e-01 -6.5951895883309519e-01 + 5.1629920971240351e-01 9.0906051385992981e-01 -7.9986986194384802e-01 + 6.2846891569497676e-01 1.0578191062395541e+00 -9.3373970102223391e-01 + 7.4912662523511442e-01 1.2087544193493682e+00 -1.0844347698270969e+00 + 8.7548557066630783e-01 1.3476200365619755e+00 -1.2732354447213436e+00 + 1.0059833447200217e+00 1.4682308830228363e+00 -1.4986838982363446e+00 + 1.1431478414088381e+00 1.5731200117421054e+00 -1.7428621854341704e+00 + 1.2865575008613030e+00 1.6641953166189571e+00 -1.9867247801491983e+00 + 1.4307467120904962e+00 1.7368281892568622e+00 -2.2183421856880590e+00 + 1.5693296014899552e+00 1.7815400532448911e+00 -2.4330248852186638e+00 + 1.6911160446105356e+00 1.7842954587891744e+00 -2.6311424471290525e+00 + 1.7858664166717737e+00 1.7288765664337025e+00 -2.8100536595072891e+00 + 1.8630570660404460e+00 1.6155328034304688e+00 -2.9593892450020167e+00 + 1.9462202632828731e+00 1.4586423389506262e+00 -3.0695029064856736e+00 + 2.0233947452282512e+00 1.2680341449539192e+00 -3.1402749247011661e+00 + 1.8700071329101799e+00 9.5608572474741893e-01 -3.1483018932893461e+00 + id 11945 + loc 5.0233846902847290e-01 6.3993662595748901e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4674259003733091e-01:4.1916624313839174e-01:1.0448349086178710e-01:4.3366328223081452e-01:9.5849066403636130e-01:3.6488155143065887e-01:1.6469208990417505e+00:4.0379256482808940e-01:2.4041148037963938e+00:3.8987684076205203e-01:3.0049568476399133e+00:4.4673812261143053e-01:3.6328485008212437e+00 + CVs 20 + -2.6564464947663874e-01 3.1093052880209071e-01 3.0227521490273712e-01 + -5.5077475023558020e-01 5.8288035754239720e-01 5.6196804204267869e-01 + -8.5164565627825273e-01 8.4723926789782933e-01 8.1706102319759610e-01 + -1.1707868307970311e+00 1.1063246553329760e+00 1.0615344100934958e+00 + -1.5143317002424639e+00 1.3437616546643658e+00 1.2608206072377772e+00 + -1.8766741777755460e+00 1.5397940947882234e+00 1.3839157680943379e+00 + -2.2362552531013327e+00 1.6749821035170285e+00 1.4098186343626848e+00 + -2.5502385087149051e+00 1.7292797076384872e+00 1.3308179432789669e+00 + -2.7726536969294955e+00 1.6954535056673536e+00 1.1698975835560663e+00 + -2.9009911863243198e+00 1.5961939375750895e+00 9.7740065164729217e-01 + -2.9565743013919330e+00 1.4638887706561046e+00 8.2580522683594459e-01 + -2.9800591190731378e+00 1.3460469281206802e+00 7.7962458012520219e-01 + -3.0126323775405610e+00 1.2354807801461778e+00 7.5466684177385968e-01 + -3.0458200789982945e+00 1.0005609184685840e+00 6.1601269135613901e-01 + -3.0371828844418514e+00 6.2632724558881048e-01 3.4296895648271786e-01 + -2.9698015460621372e+00 2.4467999142106800e-01 -5.5073291006711322e-02 + -2.8818385715180179e+00 -1.2352038645563251e-02 -5.2721426885975231e-01 + -2.8419189728232426e+00 -1.0769607652266966e-01 -9.4869860217197444e-01 + -2.8939634181008467e+00 -7.9757701195438679e-02 -1.2188398058965546e+00 + id 11946 + loc 3.5104086995124817e-01 9.8290756344795227e-02 416 + blend 0.0000000000000000e+00 + interp 3.6887309091197434e-01:3.6346610110735428e-01:3.5230727038685350e-02:3.3149908589754723e-01:8.9527008391170027e-01:3.5720845143245722e-01:1.3591642730505886e+00:2.6377011581077403e-01:1.8210385868800096e+00:2.6935975923122601e-01:2.1824852894914657e+00:2.5031686901873429e-01:3.0078261333456613e+00:3.6886940218106523e-01:3.7162514876841248e+00 + CVs 20 + -5.8022626464448529e-02 2.3760259456844007e-01 -4.7649537121590974e-01 + -1.7167767763885716e-01 3.4919950369899255e-01 -7.9940137846735104e-01 + -3.0228040692391023e-01 4.0967026043825339e-01 -1.1083489096870001e+00 + -4.2588226037860238e-01 4.4938831543695618e-01 -1.4534695446125523e+00 + -5.3706564048489613e-01 4.6649920266638539e-01 -1.8334895529208466e+00 + -6.2763093512257828e-01 4.6060408789025775e-01 -2.2470361588935628e+00 + -6.8660037098815596e-01 4.3272072101685977e-01 -2.6872578135169078e+00 + -7.0662984226808401e-01 3.8486332376273924e-01 -3.1426017440069645e+00 + -6.8606370282266094e-01 3.1842513748583046e-01 -3.6040524656501001e+00 + -6.2743425769191918e-01 2.3422010822968642e-01 -4.0589574239271169e+00 + -5.4929236986660113e-01 1.4169468927435958e-01 -4.4641451972275528e+00 + -4.9429459677017218e-01 7.2278885658783931e-02 -4.7534556869319564e+00 + -4.8003146312908451e-01 5.4268324111854449e-02 -4.9074435599041291e+00 + -4.8036781671704731e-01 7.1925607880993336e-02 -4.9932732568002933e+00 + -4.7911051741734689e-01 9.6447950982725628e-02 -5.0718041603460042e+00 + -4.6340045488363590e-01 1.3739090853859559e-01 -5.1329302277697595e+00 + -4.1002832298860703e-01 2.1259959806342588e-01 -5.1579074379934298e+00 + -3.1709104321530557e-01 2.9988716874711763e-01 -5.1653169087506061e+00 + -4.1350479181111877e-01 1.8407991273326085e-01 -5.2947372906147407e+00 + id 11947 + loc 6.1718314886093140e-01 4.2752549052238464e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8964871490391834e-01:2.6602399385009495e-01:8.9646723427873765e-01:2.8950024293347348e-01:1.4503318366969005e+00:3.8964481841676929e-01:2.3479927224946548e+00:2.8256663805370286e-01:2.9585785990094373e+00:2.5551846318592797e-01:3.9478413760236108e+00 + CVs 20 + -1.2811688595453799e-01 2.0291932645933911e-01 2.4118952477224409e-01 + -2.7508044312946994e-01 3.9400542740921651e-01 4.8118522730087032e-01 + -4.2697424649363058e-01 5.8386900863781421e-01 7.1748622530144857e-01 + -5.7195476840709591e-01 7.7610676687934776e-01 9.4516537192320249e-01 + -7.0307661402582822e-01 9.7118081472908147e-01 1.1584050186080312e+00 + -8.1163260052759489e-01 1.1653334732635132e+00 1.3553561991481677e+00 + -8.9551531473783230e-01 1.3512054358296770e+00 1.5528270605070373e+00 + -9.5582269684409094e-01 1.5170973804647370e+00 1.7621975979332198e+00 + -9.9611684727808925e-01 1.6536360886308044e+00 1.9738652768807459e+00 + -1.0335610480385278e+00 1.7438953329898932e+00 2.1972494160211067e+00 + -1.0974730837776900e+00 1.7448216112851103e+00 2.4656999540241893e+00 + -1.2118495014191868e+00 1.6258151810874439e+00 2.7890933292156737e+00 + -1.3842758976175125e+00 1.4128014649911929e+00 3.1485003650551793e+00 + -1.5946259499746425e+00 1.1502530884973197e+00 3.5265513668674027e+00 + -1.7985733918286442e+00 8.4977885945439879e-01 3.9364736459323395e+00 + -1.9414024819461160e+00 5.1647111368617626e-01 4.4207099935084218e+00 + -1.9620244507813476e+00 2.0413618537297429e-01 4.9979530339101688e+00 + -1.8617928425319530e+00 -2.0813395973368065e-02 5.6012646014504686e+00 + -1.8344068023691253e+00 -1.9548330751861465e-01 6.0950371624390600e+00 + id 11948 + loc 7.1195262670516968e-01 1.6808150708675385e-01 1053 + blend 0.0000000000000000e+00 + interp 4.9840486200710815e-01:2.9558046142873123e-01:2.9069254870234262e-03:4.3033270820848024e-01:4.8167621828135032e-01:4.5523422417953813e-01:9.8232340817349306e-01:2.8486099069040460e-01:1.7477838703073494e+00:3.0857473727667778e-01:2.7263949313071780e+00:4.9839987795848811e-01:3.1938061781242992e+00:4.5762680988862203e-01:3.7446447899372055e+00 + CVs 20 + 2.2748892824269468e-01 3.7497166735132226e-01 -1.9981232482570216e-01 + 4.5091174456000610e-01 7.4028402876325949e-01 -3.8866322227378169e-01 + 6.8200793146045691e-01 1.0993180903748847e+00 -5.8007922629829611e-01 + 9.3854584375183503e-01 1.4432096634496423e+00 -7.8416920012198765e-01 + 1.2396020943761330e+00 1.7533189642808671e+00 -1.0026502330368685e+00 + 1.6006698815997862e+00 2.0064760083613735e+00 -1.2295544540282952e+00 + 2.0301732541773516e+00 2.1747303524210770e+00 -1.4477920922436489e+00 + 2.5247768441138505e+00 2.2295242556786556e+00 -1.6285785031200972e+00 + 3.0576960365140731e+00 2.1456506066683181e+00 -1.7350411054621047e+00 + 3.5717073144187261e+00 1.9074581881744486e+00 -1.7358828257829371e+00 + 3.9827393839828167e+00 1.5221410505037132e+00 -1.6207894991543297e+00 + 4.2078549629845732e+00 1.0443229773932408e+00 -1.4133336030799810e+00 + 4.2208834967600657e+00 5.5870710660765843e-01 -1.1535125655645286e+00 + 4.0657444131332792e+00 1.4163320975142804e-01 -8.5940621626940950e-01 + 3.8220934216391318e+00 -1.6154105712475164e-01 -5.1824654163894868e-01 + 3.5607303767244805e+00 -3.2056339087613561e-01 -1.2212478401850074e-01 + 3.3377855859028922e+00 -3.0128374010713965e-01 2.8903614857423021e-01 + 3.1812978526481466e+00 -1.2289959947235696e-01 6.3529463695317345e-01 + 3.0279296060195460e+00 8.3446859981977428e-02 9.6882101786063535e-01 + id 11949 + loc 3.4790346026420593e-01 9.1941046714782715e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9420158350563304e-01:4.5394359811932233e-01:1.0883972432056810e-01:4.4900739715168314e-01:8.2743088694167777e-01:4.9309001310366168e-01:1.0993670147435386e+00:3.8100085666288053e-01:1.7267843225449164e+00:2.3182062824667354e-01:2.3201256647386463e+00:4.9419664148979803e-01:3.0653291562646765e+00:4.0243666026451719e-01:3.7603306666773353e+00 + CVs 20 + 2.6298556627894482e-01 6.6536872802341751e-01 -3.5036303079324271e-01 + 5.2119382690311777e-01 1.2892563424745762e+00 -5.6465587118566196e-01 + 7.8795369353310851e-01 1.8538228700471888e+00 -6.4323837965819441e-01 + 1.0672191826709221e+00 2.3485917274030084e+00 -6.0847521834458340e-01 + 1.3698466859595042e+00 2.7685462239198046e+00 -4.7180043056210186e-01 + 1.7042971178310626e+00 3.0997979923543388e+00 -2.5014894415306366e-01 + 2.0785633665669661e+00 3.3193627967649668e+00 1.7925731126955835e-02 + 2.4956695042417767e+00 3.3879106745915988e+00 2.8785595553473198e-01 + 2.9226308473719564e+00 3.2722172316854534e+00 5.0185229650798391e-01 + 3.2893353264105309e+00 3.0104399154366650e+00 6.0406579096787127e-01 + 3.5486901919487530e+00 2.6916560312562257e+00 5.9004913153986993e-01 + 3.6985656799162889e+00 2.3597152893144284e+00 5.1608179561548573e-01 + 3.7208159096909244e+00 1.9799736271778154e+00 4.6672705228355793e-01 + 3.5555172484300175e+00 1.5014236293278893e+00 5.2049649113098218e-01 + 3.1397878182960044e+00 8.5932759118985647e-01 6.6981651161254885e-01 + 2.4272216345091411e+00 -6.3895769441830552e-01 7.1873277750891584e-01 + 4.7984437507751121e+00 -2.7629310114984049e+00 -7.0885553746606411e-01 + 6.0148739725172877e+00 -1.7977864166892636e+00 -1.0201224962202797e+00 + 6.2339102046675894e+00 -1.2376778489148521e+00 -1.0263619907478065e+00 + id 11950 + loc 4.9657356739044189e-01 6.5570145845413208e-01 1054 + blend 0.0000000000000000e+00 + interp 2.8404584341124772e-01:2.7281781488082135e-01:3.6988022434932399e-01:2.3631870866320256e-01:1.0550799768784498e+00:2.8404300295281365e-01:2.0525662922548427e+00:2.3580416741715182e-01:2.9670391997491965e+00:2.5970342131957536e-01:3.9468823646992464e+00 + CVs 20 + 4.8609779634450440e-01 4.4149347510207182e-01 -2.1360651164422778e-01 + 9.3975465606823583e-01 9.3085513728225933e-01 -3.2553518366125300e-01 + 1.3451854690951617e+00 1.4132057112988858e+00 -3.2961128876251378e-01 + 1.7397307316049082e+00 1.7276798586836617e+00 -2.8563657016544752e-01 + 2.1003622779350004e+00 1.7773902598758085e+00 -2.7077307816672547e-01 + 2.3530320644904532e+00 1.6328473355362396e+00 -2.9648687982659117e-01 + 2.4863432820215863e+00 1.4070326959120600e+00 -3.2136882194664040e-01 + 2.5672821816625877e+00 1.1577692421390824e+00 -2.9588177182626851e-01 + 2.6531303124129186e+00 8.7777583118942282e-01 -1.8945894186818490e-01 + 2.7834594166034234e+00 5.4640923286381859e-01 2.9095196881757990e-02 + 2.9779299564852173e+00 1.9150275713024045e-01 3.9291855199790460e-01 + 3.2757234810769900e+00 -1.0691016892493455e-01 8.6108725622673099e-01 + 3.7926394952916973e+00 -3.0473438213261006e-01 1.3188982214107585e+00 + 4.5030741674753267e+00 -3.3834310264232675e-01 1.5876702291921740e+00 + 5.1602132293465033e+00 -2.5046406480322636e-01 1.6574345150180239e+00 + 5.6757633054668846e+00 -1.6705242533696563e-01 1.6734270183829603e+00 + 5.9556102587377548e+00 -1.7967377361013714e-01 1.7633921579611305e+00 + 5.9665951503245314e+00 -2.2915722943282901e-01 1.9316263268529388e+00 + 6.3739910850482353e+00 -4.5095292287985544e-01 2.0318644193906623e+00 + id 11951 + loc 2.9504176974296570e-01 8.5149639844894409e-01 1077 + blend 0.0000000000000000e+00 + interp 5.1076912109395189e-01:2.9488246258104889e-01:2.9912559642258474e-01:2.5475658459452272e-01:1.4478846641706056e+00:3.8605554071727960e-01:2.3041081701104091e+00:2.6671255178044384e-01:3.0139737317736204e+00:5.1076401340274102e-01:3.7857802643910561e+00 + CVs 20 + 2.4509536781015342e-01 2.5065500948503189e-01 -1.3467960139860199e-01 + 4.3083381455546021e-01 5.2176394228276268e-01 -2.5452201983115430e-01 + 5.9925908546535656e-01 7.8837695768935490e-01 -3.7228294119779104e-01 + 7.7133875539166352e-01 1.0421984472711152e+00 -4.9738419339611495e-01 + 9.4869165708546943e-01 1.2890676178728810e+00 -6.3967716315285350e-01 + 1.1380021618710869e+00 1.5312706767609598e+00 -8.1203494971046575e-01 + 1.3547409559839139e+00 1.7620170011586089e+00 -1.0260552591529311e+00 + 1.6169356322760131e+00 1.9654376317003674e+00 -1.2867016447820239e+00 + 1.9359886690063624e+00 2.1182994372871118e+00 -1.5916968160923761e+00 + 2.3134639423081693e+00 2.1935742412046100e+00 -1.9301555927989718e+00 + 2.7384589121970548e+00 2.1697232182920656e+00 -2.2874509229100228e+00 + 3.1869763877637012e+00 2.0342400850141313e+00 -2.6538589209126040e+00 + 3.6237506826062229e+00 1.7801089754810266e+00 -3.0224377894917862e+00 + 3.9982579097420183e+00 1.4102130657867296e+00 -3.3827618358421461e+00 + 4.2497303275634586e+00 9.5575435046526236e-01 -3.7256529320148162e+00 + 4.3194425649838930e+00 5.0472712611946235e-01 -4.0374436759380066e+00 + 4.2265843549251008e+00 2.0517644239198374e-01 -4.2770146053264106e+00 + 4.0753914481882365e+00 9.4730992771532740e-02 -4.4439188381116939e+00 + 3.7623914287751585e+00 6.3229648103996450e-02 -4.7364780299759506e+00 + id 11952 + loc 5.8532649278640747e-01 5.1489615440368652e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3651105627003589e-01:3.7607464687125913e-01:3.4004269168060297e-01:4.3650669115947321e-01:9.8230108140653649e-01:2.4071959724731401e-01:1.5418161929434759e+00:3.5545589194304966e-01:2.0078156328842947e+00:3.2250049589488561e-01:2.8326748084343976e+00:3.7301912852612562e-01:3.1915736781025092e+00:4.1508135339383206e-01:3.9434302630837617e+00 + CVs 20 + 4.2339822725261982e-02 2.8519947156208508e-01 -8.0943279090631551e-02 + 1.0704667977595647e-01 5.6606658279089239e-01 -1.4321117074031120e-01 + 1.7882605836061383e-01 8.3572970915059575e-01 -1.9920797708455315e-01 + 2.4823218029282246e-01 1.0962903458135962e+00 -2.5947574409147434e-01 + 3.1750711016232669e-01 1.3599567575161000e+00 -3.2882450539943026e-01 + 3.9087067042831303e-01 1.6408328195822794e+00 -4.2159241139222453e-01 + 4.7878279179855632e-01 1.9311089414844831e+00 -5.5761156958484492e-01 + 5.9213291672371937e-01 2.2028999435957792e+00 -7.4498546661075427e-01 + 7.3468082041352556e-01 2.4351934398938191e+00 -9.7803837895807422e-01 + 9.0556826460802242e-01 2.6160192375258267e+00 -1.2467077497161683e+00 + 1.1033509833154360e+00 2.7388455256924749e+00 -1.5412346906326289e+00 + 1.3339507146502299e+00 2.8015883688193890e+00 -1.8545389509735890e+00 + 1.6071196529076088e+00 2.7938357679809052e+00 -2.1795346353300800e+00 + 1.9271159220954035e+00 2.6823068627108642e+00 -2.4942639469878425e+00 + 2.2913506914740984e+00 2.4197816205360341e+00 -2.7739125023059543e+00 + 2.6515555216714306e+00 1.9763176336002972e+00 -3.0398109136547440e+00 + 2.9105133194752959e+00 1.3622890652941158e+00 -3.3392587413329551e+00 + 2.9646874800148395e+00 6.4925729746834238e-01 -3.6850522573509532e+00 + 2.7588072108887944e+00 2.3558463223692550e-01 -3.8279541900494074e+00 + id 11953 + loc 1.9474087655544281e-01 2.6698985695838928e-01 384 + blend 0.0000000000000000e+00 + interp 4.7694759611876719e-01:3.5780550733015987e-01:9.7307120894715105e-01:4.7694282664280602e-01:1.4578260524158768e+00:2.9464345934931430e-01:2.2780526087527302e+00:2.7504937689485059e-01:3.0618098960885320e+00:2.9238342892932651e-01:3.9421549066876977e+00 + CVs 20 + -4.0139785027650693e-01 2.2665484707188749e-01 -1.1860903424587812e+00 + -6.8499143527669859e-01 2.9464117598643380e-01 -1.8972081104204968e+00 + -9.3982598161961106e-01 3.0918302582800605e-01 -2.4772099675225605e+00 + -1.1969637314761674e+00 3.1907341758548180e-01 -3.0734117954389326e+00 + -1.4529739438750622e+00 3.1348409528833576e-01 -3.6905011597401089e+00 + -1.7020330465382203e+00 2.8484355352080448e-01 -4.3222936413345190e+00 + -1.9463644575616772e+00 2.3174403817659833e-01 -4.9588080870395634e+00 + -2.2018272890573805e+00 1.5063449496341785e-01 -5.5988515214278243e+00 + -2.4824399704155198e+00 2.1782120483680778e-02 -6.2442102365338528e+00 + -2.7870404805433666e+00 -1.9693042235416613e-01 -6.8899419966437501e+00 + -3.1056447269785883e+00 -5.4619949380714827e-01 -7.5086178067023059e+00 + -3.4256655684331090e+00 -1.0420934841200835e+00 -8.0498458918647948e+00 + -3.7310095708364375e+00 -1.6718304408692406e+00 -8.4674773954352460e+00 + -4.0023699041744933e+00 -2.4070998054358026e+00 -8.7386124196339203e+00 + -4.2248661095392031e+00 -3.2111785570949136e+00 -8.8603140571071375e+00 + -4.3907124564249589e+00 -4.0375186946973480e+00 -8.8428414165052054e+00 + -4.4890681595643942e+00 -4.8325067352442197e+00 -8.7084104554305721e+00 + -4.5066654982706416e+00 -5.5500465197628701e+00 -8.4920717802038350e+00 + -4.4586513242483914e+00 -6.1962266945018225e+00 -8.2339804474900351e+00 + id 11954 + loc 6.5314674377441406e-01 8.6544340848922729e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6355722091824891e-01:4.4630206034030312e-01:5.5746896075384966e-02:4.0598746641526634e-01:7.1594089114282200e-01:3.8854098849582364e-01:1.0424687892380116e+00:4.1322325098508672e-01:1.8043398811410154e+00:4.4870930308956264e-01:2.0449150507445699e+00:3.8095422449493249e-01:2.8105798122642196e+00:3.4021424853040055e-01:3.1112421784826445e+00:4.6355258534603977e-01:3.7250577680602501e+00 + CVs 20 + -2.0203000153605227e-01 2.2101284874965743e-01 2.5188040577385229e-01 + -4.2634154806051378e-01 4.2509164528755705e-01 4.7959733217327999e-01 + -6.5254207281299415e-01 6.3679661457824965e-01 7.0728535284391614e-01 + -8.6819660947688260e-01 8.6622442859614068e-01 9.3830895769267053e-01 + -1.0832883073677604e+00 1.1155988670269785e+00 1.1532694965387853e+00 + -1.3125224710009591e+00 1.3845607079258810e+00 1.3309392633638224e+00 + -1.5741649736164465e+00 1.6693876488192740e+00 1.4488616421035452e+00 + -1.8844841293293340e+00 1.9565008733947640e+00 1.4708016221156426e+00 + -2.2182164328546721e+00 2.1949893152577578e+00 1.3364085740021892e+00 + -2.4809068270297994e+00 2.3246166363710219e+00 1.0405863822127441e+00 + -2.6094967818831716e+00 2.3561504894505259e+00 6.5945622286551364e-01 + -2.6174298111967937e+00 2.3109825356591260e+00 2.5151270711142759e-01 + -2.5467966911531543e+00 2.1305740715520338e+00 -1.6712047398533336e-01 + -2.4085090571593639e+00 1.7764459421882257e+00 -5.7355431749394559e-01 + -2.1834110009283094e+00 1.3830773155735652e+00 -9.8912584130402703e-01 + -1.8997727605420223e+00 1.1661424662477686e+00 -1.4511249219751776e+00 + -1.6610491593715593e+00 1.2646323422154178e+00 -1.9096371935585639e+00 + -1.5094505241146621e+00 1.5716099978242952e+00 -2.3182395666263051e+00 + -1.2396543319881503e+00 1.6822461610537927e+00 -2.9651482440590056e+00 + id 11955 + loc 1.9860538840293884e-01 1.1921715736389160e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7700951659255558e-01:2.9192995398755289e-01:8.2472936238758954e-02:4.0212119292016790e-01:7.0024911151386138e-01:3.2705506054742806e-01:1.0413440276410484e+00:4.7700474649738966e-01:1.7975039106635933e+00:2.8483763951890140e-01:2.2663580024542473e+00:4.6639062031502360e-01:2.8802307084715362e+00:3.8750474711157906e-01:3.3499912220906580e+00 + CVs 20 + -2.0418736244920985e-01 3.9366421672986823e-01 -8.8227302730372326e-02 + -3.9563529335285497e-01 7.9182063297167482e-01 -1.8120636833471099e-01 + -5.7252839184805826e-01 1.1979378676212686e+00 -2.5988619857508893e-01 + -7.1754468463040266e-01 1.6107854570940003e+00 -3.1066176236450121e-01 + -8.2557470716285375e-01 2.0306155785578652e+00 -3.2967695689644694e-01 + -9.4151078340116345e-01 2.4459817730875510e+00 -3.3090473774196882e-01 + -1.1375850530819656e+00 2.8047059993410235e+00 -3.5038063993443236e-01 + -1.4171303536363622e+00 3.0420368488858958e+00 -4.2264490755902762e-01 + -1.7081602046252393e+00 3.1459802326632307e+00 -5.5266299589289514e-01 + -1.9342486970008952e+00 3.1504475229503273e+00 -7.1938100567434171e-01 + -2.0698823878457349e+00 3.1052682933414828e+00 -8.9763621106931102e-01 + -2.1338666588555997e+00 3.0366736907322682e+00 -1.0917620265453718e+00 + -2.1425055526330206e+00 2.9471597811126449e+00 -1.3275695538238619e+00 + -2.1057755255595856e+00 2.8360441613985339e+00 -1.6141337711246051e+00 + -2.0333354515564701e+00 2.6924287058294309e+00 -1.9302881399881091e+00 + -1.9440571239319238e+00 2.5256840321149547e+00 -2.2102163388470895e+00 + -1.9163064664456773e+00 2.4052923283836272e+00 -2.4280926179356674e+00 + -1.9356121991167230e+00 2.2752677148460352e+00 -2.6256959879436677e+00 + -1.6886929925105965e+00 2.1295925525914292e+00 -2.5086283931699640e+00 + id 11956 + loc 6.9800049066543579e-01 4.0591442584991455e-01 416 + blend 0.0000000000000000e+00 + interp 4.4909006098689186e-01:2.6823970511022011e-01:2.6819394631783555e-01:3.1673970417623870e-01:1.1045987912178674e+00:3.9920741709089458e-01:1.7441462363377322e+00:3.1095112459058799e-01:2.2968162233038987e+00:2.5284893231944378e-01:3.0004723273504634e+00:4.4908557008628203e-01:3.9147105770677721e+00 + CVs 20 + -6.1830534030309336e-01 1.7137714472256821e-01 9.7521586574043695e-02 + -1.0537826937133943e+00 2.0629615849525468e-01 2.1142325674815035e-01 + -1.4600681784989511e+00 1.8527192459365144e-01 3.1976143070642959e-01 + -1.9006008204766927e+00 1.4084522711946945e-01 4.0882902814284972e-01 + -2.3658927269010919e+00 7.2356650642034670e-02 4.6897291642234767e-01 + -2.8444970284945565e+00 -1.6870733532731386e-02 4.8805490579392174e-01 + -3.3221734676157486e+00 -1.1996668576418901e-01 4.5556060895915373e-01 + -3.7833728971018363e+00 -2.2807934618259873e-01 3.6786241348556403e-01 + -4.2150505101351126e+00 -3.3136385108410238e-01 2.2692461919062434e-01 + -4.6067363020489065e+00 -4.2056297233451989e-01 3.9009378388669358e-02 + -4.9498259017857684e+00 -4.9279731591744302e-01 -1.7582095870509351e-01 + -5.2490975995985236e+00 -5.5810678539998881e-01 -3.8278420167902560e-01 + -5.5290428917428533e+00 -6.3310496444300912e-01 -5.6237276860553020e-01 + -5.8153744735273003e+00 -7.2849869008725743e-01 -7.2589455543890447e-01 + -6.1168350025365967e+00 -8.4905065019502790e-01 -8.8587292794142802e-01 + -6.4301922407977541e+00 -1.0004953374754653e+00 -1.0368488121502781e+00 + -6.7517243344225406e+00 -1.1912597998194334e+00 -1.1644636104544377e+00 + -7.0733445911419226e+00 -1.4200559962608126e+00 -1.2565586559985178e+00 + -7.3133735542947873e+00 -1.5500310599675085e+00 -1.3654859507238677e+00 + id 11957 + loc 6.5549236536026001e-01 7.8515273332595825e-01 1054 + blend 0.0000000000000000e+00 + interp 3.7944246237668422e-01:2.3774234256945112e-01:2.1420649611604503e-02:2.0443607663691341e-01:9.9969384602403943e-01:3.7943866795206049e-01:1.9608612841127795e+00:2.3649555021584481e-01:2.2718940626067408e+00:2.1171641345401063e-01:3.0796286866404206e+00 + CVs 20 + 3.7584310542428079e-01 4.2897610210286696e-01 -1.7065137980564590e-01 + 6.9286111904795455e-01 8.8036138787132223e-01 -2.8196412940153764e-01 + 9.6079354766339709e-01 1.3674191166215552e+00 -3.2848055556815414e-01 + 1.2566551403925323e+00 1.8446578048516133e+00 -3.2216481712192779e-01 + 1.6702855398276268e+00 2.2172500465683096e+00 -2.9594936328522659e-01 + 2.2097300917160085e+00 2.3967942894315919e+00 -2.9054853200417585e-01 + 2.8095685838663442e+00 2.3355948831970421e+00 -3.2339403931472721e-01 + 3.3917262177076566e+00 2.0300540046465390e+00 -3.6540017867353480e-01 + 3.8924613838744166e+00 1.5192964119830830e+00 -3.4806692340401657e-01 + 4.2960862323430815e+00 9.1837369497000143e-01 -1.8448216842279952e-01 + 4.6592660185389256e+00 4.0928972793598550e-01 1.6778355734473371e-01 + 5.0669107781658900e+00 1.6358091821988574e-01 5.4093162191734023e-01 + 5.5491199585217510e+00 2.1926620332792712e-01 6.0995772021443528e-01 + 5.9397383038415974e+00 4.2412491294913734e-01 3.1954477907652956e-01 + 6.2639593388011958e+00 5.2300674139821979e-01 -1.0917472536323247e-02 + 6.7166221768643428e+00 3.9693568769751453e-01 -2.2797677418012219e-01 + 7.2956534845703347e+00 -8.9759710120086655e-02 -1.6424611231493058e-01 + 7.6681647327115856e+00 -8.2322134507730649e-01 3.1313772778864579e-01 + 8.0112971016760692e+00 -1.0984012520508497e+00 4.5425620080364082e-01 + id 11958 + loc 2.5145795941352844e-01 3.6993253231048584e-01 397 + blend 0.0000000000000000e+00 + interp 4.9293012931429581e-01:3.1182497767523609e-01:8.0038510851354605e-04:4.9292520001300266e-01:6.3837486337721461e-01:4.0716507723601858e-01:1.0177561678090474e+00:4.8254736176601037e-01:1.6338210425630764e+00:4.7084190676450050e-01:2.1449505606825783e+00:3.0045550908204166e-01:2.9999963924027817e+00:4.1462520046483076e-01:3.4994974539712023e+00 + CVs 20 + -3.3157490877607243e-01 3.4486863068243423e-01 -1.1261818916139084e+00 + -5.6542806310146210e-01 4.4309381267208647e-01 -1.8611600517146598e+00 + -7.4773650498632849e-01 4.2029964817178167e-01 -2.5375519966093627e+00 + -8.8357712675770661e-01 3.2262458167094121e-01 -3.2812546722645397e+00 + -9.7157263799098015e-01 1.3782658122787117e-01 -4.0644694748093393e+00 + -1.0227508743887279e+00 -1.3260968597178502e-01 -4.8536707382117017e+00 + -1.0545467722811084e+00 -4.7821045194585576e-01 -5.6149778152888645e+00 + -1.0721615513903395e+00 -8.9058744580432392e-01 -6.3137073559472858e+00 + -1.0610299066226005e+00 -1.3705482350753391e+00 -6.9162429103368934e+00 + -1.0276173019770258e+00 -1.9256500271876664e+00 -7.3822815073530501e+00 + -9.9460621025799312e-01 -2.5398179957755671e+00 -7.6814058068084368e+00 + -9.8019182871171073e-01 -3.1773055350330326e+00 -7.8088623065682166e+00 + -9.9542978480459365e-01 -3.8040025718346997e+00 -7.7857504795390167e+00 + -1.0480560132675483e+00 -4.3903705255625427e+00 -7.6425279527146808e+00 + -1.1383050171465765e+00 -4.8966082109130538e+00 -7.4097407719837767e+00 + -1.2523451133815509e+00 -5.2868646587013846e+00 -7.1251134802764406e+00 + -1.3729237280643543e+00 -5.5544095832368008e+00 -6.8343121968702807e+00 + -1.5003833923982381e+00 -5.7496307846934984e+00 -6.5799602150250935e+00 + -1.6637256690125795e+00 -6.0992685103857944e+00 -6.4084519396553539e+00 + id 11959 + loc 1.6980069875717163e-01 7.0210081338882446e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2288778839202334e-01:3.2960755617462162e-01:2.1341567365614023e-01:3.1446236430966334e-01:1.2220368024769370e+00:4.2288355951413942e-01:2.0069396973821299e+00:3.2020631876568745e-01:2.7548762245791734e+00:3.8927872156981475e-01:3.2787918365945088e+00:3.6396884758532516e-01:3.9293394709268332e+00 + CVs 20 + -3.6478771281724942e-03 2.6863577135614819e-01 -3.8383960884022753e-02 + -1.9030253248294077e-02 5.3358719104641994e-01 -1.0475541472598467e-01 + -4.4307276256560196e-02 7.8589433490068239e-01 -1.7879914121158502e-01 + -7.3251802218469275e-02 1.0284552981692485e+00 -2.5308071887208694e-01 + -1.0343093502749717e-01 1.2573384903363056e+00 -3.3350087533134087e-01 + -1.3282390323936999e-01 1.4666205674205326e+00 -4.2228992391012937e-01 + -1.5741203849921981e-01 1.6576226502404801e+00 -5.1712444454573614e-01 + -1.7403974156518004e-01 1.8494067656422131e+00 -6.1555828623429265e-01 + -1.7692596190135834e-01 2.0766573929724244e+00 -7.1741021877129241e-01 + -1.5096493065881944e-01 2.3763488659193035e+00 -8.3069075849063878e-01 + -7.2009641660771950e-02 2.7679812367210470e+00 -9.8751997724832963e-01 + 8.5258100135981785e-02 3.2224128174742863e+00 -1.2444896655811066e+00 + 3.1212991194529471e-01 3.6419367731666856e+00 -1.6471982852469234e+00 + 5.3734114489435369e-01 3.8986986401783379e+00 -2.1532243880839070e+00 + 7.2650916566989765e-01 3.9607409764175165e+00 -2.6461222898373062e+00 + 9.4769698841120453e-01 3.8833241753943248e+00 -3.0551932814968650e+00 + 1.2593656454052244e+00 3.6989412767518544e+00 -3.3625185003553435e+00 + 1.5650615677472306e+00 3.4093206084877488e+00 -3.5646959108780765e+00 + 1.5484686425869387e+00 3.1175048894091288e+00 -3.5547753495991770e+00 + id 11960 + loc 2.7073460817337036e-01 9.0445381402969360e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6634316147389260e-01:2.5038125257203159e-01:6.0736370303337006e-03:2.5425756143651673e-01:8.6633232771396551e-01:3.5813160803661293e-01:1.7574876344279489e+00:4.6633849804227789e-01:2.1345885398076314e+00:3.2286312712158083e-01:2.8620459336989330e+00:3.9171659883905435e-01:3.3917828191959347e+00 + CVs 20 + -1.6757262303880122e-01 2.5537269721760564e-01 3.7210214736827196e-01 + -3.4770096596966305e-01 4.2903218103029872e-01 6.2468685558494186e-01 + -5.2746383447118772e-01 5.7653366474092571e-01 8.2481163087454035e-01 + -6.8534014051643788e-01 7.1494074726224488e-01 1.0084053467630019e+00 + -8.1605926425647368e-01 8.4190624497029332e-01 1.1781813536141281e+00 + -9.1541428911691336e-01 9.6063001951163984e-01 1.3446630426650437e+00 + -9.8837493187786818e-01 1.0853012738152585e+00 1.5237544202367348e+00 + -1.0609118920937550e+00 1.2383940948621710e+00 1.7195062203749867e+00 + -1.1609775764349342e+00 1.4282896780480634e+00 1.8995293767067682e+00 + -1.2786492220189039e+00 1.6283253360013381e+00 2.0048258812717066e+00 + -1.3855158301243897e+00 1.8070081975421266e+00 2.0115249787853187e+00 + -1.4766680227878410e+00 1.9519477164046242e+00 1.9315310150566094e+00 + -1.5551171329304059e+00 2.0557361258613609e+00 1.7785154805259911e+00 + -1.6172002563296517e+00 2.1143934323777884e+00 1.5551787547101805e+00 + -1.6684614920173584e+00 2.1039787103389971e+00 1.2743567443770982e+00 + -1.7132316871109401e+00 1.9628247853133294e+00 1.0076260582966756e+00 + -1.7371067114383836e+00 1.6838635703344011e+00 8.2978103871880537e-01 + -1.7800874754365299e+00 1.3388872693963267e+00 7.8739288921120476e-01 + -2.0197843557012667e+00 1.1625648484255509e+00 1.0206677776535609e+00 + id 11961 + loc 7.6696175336837769e-01 4.6908414363861084e-01 411 + blend 0.0000000000000000e+00 + interp 4.2823185943645486e-01:3.6561375255551931e-01:2.1762494803400378e-01:2.5619813465625557e-01:8.8440210943500419e-01:3.7856445941240952e-01:1.1544418897456412e+00:4.2822757711786053e-01:1.9059658868209368e+00:3.2371923326816071e-01:2.5729036831932270e+00:2.9292774033516294e-01:3.0316406271056904e+00:3.1357302932050590e-01:3.8895411555467234e+00 + CVs 20 + -6.8683255711776903e-01 1.4782298373019032e-01 2.0212180272302283e-01 + -1.1524760977655901e+00 2.0797652847853060e-01 3.4941043702287350e-01 + -1.5752180042556796e+00 2.5382819632112302e-01 4.6402810859639243e-01 + -2.0167966962907271e+00 3.2112568505008010e-01 5.4539757780562947e-01 + -2.4793372565726721e+00 4.0202480353068376e-01 5.9059351931252291e-01 + -2.9654389362012070e+00 4.8479711847160700e-01 6.0242235092787189e-01 + -3.4777330632410299e+00 5.5546787396576947e-01 5.9039143381795900e-01 + -4.0184968890789428e+00 5.9420647857045872e-01 5.6432802367654589e-01 + -4.5867882488564842e+00 5.7311857723237181e-01 5.2981234993308357e-01 + -5.1695114287676427e+00 4.6261449988633352e-01 4.9639471419443720e-01 + -5.7301136770542147e+00 2.4321159215768207e-01 4.8275145876480230e-01 + -6.2204576072396209e+00 -8.2648325406271095e-02 4.9938290794964640e-01 + -6.6113727351860483e+00 -4.9489773184742702e-01 5.3714845944657252e-01 + -6.8963331416635363e+00 -9.6769849014585541e-01 5.8119590302862445e-01 + -7.0790029033284299e+00 -1.4702610129723084e+00 6.2278068243730222e-01 + -7.1698229394722430e+00 -1.9688768957027185e+00 6.5430113162371584e-01 + -7.1851821978822965e+00 -2.4389411939312318e+00 6.6481405497030499e-01 + -7.1440210426112465e+00 -2.8762439652097718e+00 6.4566765856019082e-01 + -7.0554704771485630e+00 -3.2933763492820338e+00 6.0082990545326043e-01 + id 11962 + loc 7.8124082088470459e-01 9.3059772253036499e-01 1053 + blend 0.0000000000000000e+00 + interp 6.1401000312798049e-01:2.9271551821845326e-01:2.4449596062633017e-01:3.0679041487599090e-01:1.0493688822020846e+00:2.6668628664943356e-01:1.6670942374852999e+00:5.6604706977208352e-01:2.1412947845835988e+00:6.1400386302794918e-01:2.6291885315481016e+00:3.2408163297813353e-01:3.2579431730204425e+00 + CVs 20 + 1.4441014135780042e-01 4.5596110613229601e-01 2.7480237404835489e-01 + 1.8307003286119750e-01 8.7036975959162843e-01 5.1481165911428528e-01 + 1.7054316654894530e-01 1.2619639923385575e+00 7.2609201160128767e-01 + 1.2246628198675302e-01 1.6348341031440623e+00 9.1218854783178815e-01 + 4.7676770842275396e-02 1.9764313232211825e+00 1.0720687985331712e+00 + -4.3243857447870848e-02 2.2819456960648008e+00 1.2154240889697667e+00 + -1.6374862129206358e-01 2.5662099455588394e+00 1.3678507127821957e+00 + -4.0580308490670758e-01 2.8388732789831677e+00 1.5877250564306729e+00 + -8.2499607749626191e-01 2.9313642032903227e+00 1.8454960575581183e+00 + -1.1796563079782976e+00 2.8210740325732311e+00 1.9979385669719860e+00 + -1.4572338320201053e+00 2.6299893642435195e+00 2.0830966417438410e+00 + -1.7401041511365516e+00 2.3564385176202594e+00 2.1215634105033652e+00 + -2.0340160911724734e+00 1.9739744076155525e+00 2.1309054082982755e+00 + -2.2305017772281706e+00 1.5006856604261603e+00 2.1507670887139643e+00 + -2.2729400434699558e+00 9.6583238219548673e-01 2.1757324773630651e+00 + -2.2110009245476263e+00 3.3822365435706159e-01 2.1023488004144189e+00 + -2.1148616003380951e+00 -3.2113014037090037e-01 1.7885939163375977e+00 + -2.0403417377273714e+00 -7.5729410941610376e-01 1.2777132455377294e+00 + -2.0498088074182106e+00 -6.9091486892728149e-01 9.3804097233252104e-01 + id 11963 + loc 3.7498953938484192e-01 6.3533014059066772e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0485739939949617e-01:4.0485335082550217e-01:9.1678427165760756e-01:3.4679403020825711e-01:1.6667648966905055e+00:3.5563484003958318e-01:2.2604845670266633e+00:3.8175902737256123e-01:3.0476249788904290e+00:3.4600455284578996e-01:3.9993925921792024e+00 + CVs 20 + 1.0306634744165985e-01 3.1040507809270773e-01 -2.3996424643409148e-02 + 2.4803781462735788e-01 6.1919521575778147e-01 -5.9419217234395666e-02 + 4.2007220483981628e-01 9.2330356979239947e-01 -1.1372111406794402e-01 + 6.1210484554697131e-01 1.2235306712657537e+00 -1.9938385789297358e-01 + 8.2265428930709261e-01 1.5138594638256198e+00 -3.3090647629767345e-01 + 1.0512013966089999e+00 1.7798942859884805e+00 -5.1903613488438394e-01 + 1.2964968494987654e+00 1.9993203414573553e+00 -7.6784372599588280e-01 + 1.5489723149666554e+00 2.1493237637447500e+00 -1.0750105861056962e+00 + 1.7896417277877099e+00 2.2117167607624770e+00 -1.4308902148157379e+00 + 1.9989858095932709e+00 2.1750173314215573e+00 -1.8164107707874317e+00 + 2.1635675009184077e+00 2.0359804160122539e+00 -2.2083194083804965e+00 + 2.2709741783572293e+00 1.7966424872011313e+00 -2.5855989192628019e+00 + 2.3027748308277167e+00 1.4693820327699034e+00 -2.9330932037664490e+00 + 2.2261895502376907e+00 1.0870291439224387e+00 -3.2554181752367493e+00 + 1.9947940161165634e+00 7.0582748128067041e-01 -3.5584482284054051e+00 + 1.5916743204587678e+00 3.9744217191230768e-01 -3.8174031892299949e+00 + 1.0561898744199627e+00 2.2013461106822751e-01 -3.9979186826386366e+00 + 4.8362499637216416e-01 1.4444042569521676e-01 -4.1110497863383415e+00 + 2.3126938599366029e-02 -7.2308847683283828e-02 -4.2785242646976549e+00 + id 11964 + loc 8.3504110574722290e-01 2.7220633625984192e-01 1090 + blend 0.0000000000000000e+00 + interp 5.5098749853726703e-01:5.5098198866228165e-01:3.2972680829905110e-01:2.9558119574941771e-01:9.9192779079227633e-01:3.8655410844511934e-01:1.8197776754912898e+00:4.0877502775157282e-01:2.0926791753155536e+00:2.7812825976690891e-01:2.8838140348535641e+00:3.6590672156701709e-01:3.7829494636733028e+00 + CVs 20 + -1.1925383212235693e-01 4.1693357290766286e-01 -8.3837757204186972e-02 + -1.7060853408801407e-01 7.9056212914878476e-01 -1.1557611711381394e-01 + -1.8648494770286556e-01 1.1463713619859826e+00 -1.2157818706946966e-01 + -1.7974492962761390e-01 1.4926271749701301e+00 -1.1193267746276969e-01 + -1.4180847283129860e-01 1.8178394699634728e+00 -7.9118460300924731e-02 + -6.7345642623396262e-02 2.1078021627876180e+00 -1.4847682114789817e-02 + 4.3987224917625301e-02 2.3449892047779182e+00 8.8595170147936386e-02 + 1.8448134577483832e-01 2.5121218562681702e+00 2.3439594066653158e-01 + 3.4308551278197796e-01 2.6000302787483829e+00 4.2088608682315232e-01 + 5.1630118441420891e-01 2.6055333260764395e+00 6.4494990165426491e-01 + 7.0641958827080076e-01 2.5257771761719594e+00 8.9586410193935317e-01 + 9.1573754535957352e-01 2.3591650588921853e+00 1.1525552106427628e+00 + 1.1471185747407373e+00 2.1023700306310804e+00 1.3888395864062009e+00 + 1.4072217700889789e+00 1.7487421447120577e+00 1.5693109447930536e+00 + 1.7009201881725255e+00 1.3014129534418593e+00 1.6365932063204292e+00 + 2.0179801931198966e+00 8.2551356604057757e-01 1.5351292081127299e+00 + 2.3563951973314010e+00 4.3376070215145490e-01 1.2797379022432214e+00 + 2.7191703582911382e+00 2.0679335540935706e-01 9.5219640157255270e-01 + 3.0044277803838297e+00 7.7704921435911789e-02 7.7575198425076308e-01 + id 11965 + loc 5.4522776044905186e-03 7.1944642066955566e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5500242838602389e-01:3.6636520462397604e-01:1.5677126121869889e-02:2.6860509538897703e-01:8.5116885357069860e-01:3.5490468297061684e-01:1.7739087524191777e+00:4.4877888734354171e-01:1.9996116906952168e+00:3.1555785066008757e-01:2.9641541332310926e+00:4.5499787836174005e-01:3.2741065622351200e+00 + CVs 20 + 2.1504205394108022e-01 4.8261967114080850e-01 -2.0188362575074961e-01 + 4.4365916481431134e-01 9.8042742424678642e-01 -3.9985670667012346e-01 + 7.0149840941249197e-01 1.4857835144672800e+00 -5.4463488216607825e-01 + 9.9331577611805066e-01 1.9764436874562936e+00 -6.1718014637602447e-01 + 1.3202708018072833e+00 2.4234368275673117e+00 -6.2893309064020508e-01 + 1.6872931739488544e+00 2.8058302208069130e+00 -6.1274960428653835e-01 + 2.1073554227172928e+00 3.1110288946261582e+00 -6.0410705256768715e-01 + 2.5953572849817732e+00 3.3198719001771240e+00 -6.1570460280064621e-01 + 3.1597389773735585e+00 3.3817334150696490e+00 -6.5558144570480581e-01 + 3.7757732687862009e+00 3.2207428987770350e+00 -7.4251957785240263e-01 + 4.3498303512827654e+00 2.7667610368902542e+00 -8.5238301439136532e-01 + 4.7320799275625651e+00 2.0542345992798858e+00 -8.8411059027034467e-01 + 4.8320392069914302e+00 1.2573463336055337e+00 -7.5576425755938503e-01 + 4.6663498439563433e+00 5.2878780547367743e-01 -4.7113460697041509e-01 + 4.3002702492728897e+00 -7.5642544417905688e-02 -1.2085565841136212e-01 + 3.7991971014830375e+00 -6.6637960538845942e-01 2.0717301773788999e-01 + 3.5626723634423536e+00 -1.5094561766544616e+00 1.2893286888804754e+00 + 3.7385995112576098e+00 -1.3696636639432489e+00 1.7345513515286783e+00 + 3.6875929333744391e+00 -8.2741418267270395e-01 2.0662788920014470e+00 + id 11966 + loc 7.3629206418991089e-01 8.1380850076675415e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0684251655063297e-01:3.2609173321021723e-01:6.4160319514170006e-01:3.3547310874275810e-01:1.2492719440021078e+00:3.8066594192848485e-01:2.0083286334700281e+00:3.2460471294523185e-01:2.7297616426512770e+00:3.3306069967520407e-01:3.2486005523241173e+00:4.0683844812546749e-01:3.9994680992659779e+00 + CVs 20 + 2.2417078893697390e-01 2.5412001917366089e-01 -2.7748993568211361e-01 + 4.4746474880476816e-01 4.9610399873810240e-01 -5.3133821653672542e-01 + 6.8942947018756551e-01 7.1243797313854740e-01 -7.5523638320405395e-01 + 9.5142180793787290e-01 8.9947091458259232e-01 -9.5192976373478622e-01 + 1.2233396371056602e+00 1.0563899737036488e+00 -1.1267147960413171e+00 + 1.4948683174011714e+00 1.1852615328787972e+00 -1.2876786282847332e+00 + 1.7588998689266941e+00 1.2911613979554537e+00 -1.4459851102035204e+00 + 2.0122562304657423e+00 1.3803577365305459e+00 -1.6154446914588627e+00 + 2.2529912908931786e+00 1.4574985167124817e+00 -1.8093178780751136e+00 + 2.4761568008321500e+00 1.5237311402228662e+00 -2.0346370712513515e+00 + 2.6751790104015294e+00 1.5768217739785786e+00 -2.2921806881611015e+00 + 2.8448610880979008e+00 1.6114934934868064e+00 -2.5808796844084916e+00 + 2.9805430323103437e+00 1.6206480805914822e+00 -2.8990472139475565e+00 + 3.0777084524547611e+00 1.5949020566758871e+00 -3.2450532232225249e+00 + 3.1300526910608730e+00 1.5196511377710309e+00 -3.6169594747561624e+00 + 3.1260506645250574e+00 1.3772875745761954e+00 -4.0012767320753326e+00 + 3.0510925543948599e+00 1.1718698443752524e+00 -4.3581345480128633e+00 + 2.8963360497157238e+00 8.9205214336223737e-01 -4.6930361998564853e+00 + 2.7209000677822650e+00 7.7081227810945885e-01 -4.7674882318552294e+00 + id 11967 + loc 2.8403508663177490e-01 9.0445381402969360e-01 1084 + blend 0.0000000000000000e+00 + interp 5.3079360366116490e-01:2.8962206614324981e-01:1.7964454590065237e-02:3.0283502358443748e-01:8.2798416757541871e-01:4.6593524750908949e-01:1.0682662525920259e+00:4.2610099904369231e-01:1.7344027865171481e+00:5.3078829572512831e-01:2.1136889490538620e+00:3.8376842347259310e-01:2.8383507804254693e+00:4.2097059106908302e-01:3.3916760096491028e+00 + CVs 20 + -1.9274318663016488e-01 3.0480576212886373e-01 3.8163489421856989e-01 + -3.9575081884186131e-01 5.5172383075587261e-01 6.8093091343554968e-01 + -5.9447534374645561e-01 7.8460495895013249e-01 9.6226257392015158e-01 + -7.8263059167089255e-01 1.0185369454326740e+00 1.2442925724897436e+00 + -9.6998886813880858e-01 1.2517897369523723e+00 1.5109501872603268e+00 + -1.1652758194054194e+00 1.4803527328423376e+00 1.7488105126034368e+00 + -1.3763615496482124e+00 1.7005423895365754e+00 1.9520538456986387e+00 + -1.6191179213194482e+00 1.9173902370877938e+00 2.1193464134146360e+00 + -1.9206611518337833e+00 2.1317272512859660e+00 2.2027068033027888e+00 + -2.2281910830133449e+00 2.2858431482275305e+00 2.1198968722774967e+00 + -2.4457179531501994e+00 2.3585312648167549e+00 1.9186736088204266e+00 + -2.5662378468193623e+00 2.3845596667522204e+00 1.6732021746542420e+00 + -2.6314820478433396e+00 2.3065802200748369e+00 1.4052952803523950e+00 + -2.6758443650298949e+00 2.0186466640244118e+00 1.1609406337358146e+00 + -2.6904370751580080e+00 1.5467787051544784e+00 9.4741682060815591e-01 + -2.6412714303825688e+00 1.0062097583358669e+00 7.0077893225046939e-01 + -2.5270461318645947e+00 5.2412855002407444e-01 3.6408550654880639e-01 + -2.4047941283932874e+00 2.1857427501256643e-01 -5.2095193679921006e-02 + -2.3629877977036120e+00 1.4663615630161866e-01 -4.5557864564630945e-01 + id 11968 + loc 5.5138772726058960e-01 4.3492218852043152e-01 397 + blend 0.0000000000000000e+00 + interp 4.8692333100212343e-01:4.2160866360909266e-01:9.5660705196311901e-01:3.0836097222407338e-01:1.8056537240575334e+00:3.7450273943693024e-01:2.2176009509209540e+00:4.8691846176881343e-01:2.8570092093047794e+00:2.7528848695471575e-01:3.5516847126485200e+00 + CVs 20 + -1.2468272532930111e+00 3.1572620693364883e-01 2.6633941894612179e-01 + -2.0392825118375013e+00 4.1905870926649580e-01 4.7030545314494010e-01 + -2.7014980976111000e+00 4.4753098042862149e-01 6.6614590825237885e-01 + -3.3772716805820084e+00 4.6070329319876402e-01 8.8063815674724555e-01 + -4.0533935235652097e+00 4.4475102789751270e-01 1.1160681598698972e+00 + -4.7102066919403001e+00 3.9053878264491232e-01 1.3681977311928308e+00 + -5.3319221044710519e+00 2.9696572854065301e-01 1.6297113612556919e+00 + -5.9116910826108384e+00 1.6634212865069220e-01 1.8998516761855639e+00 + -6.4510253415399799e+00 5.0914045592481694e-04 2.1826670685890468e+00 + -6.9482366482337694e+00 -2.1131079105824990e-01 2.4702735715914388e+00 + -7.3896034011761644e+00 -4.7986978962260851e-01 2.7463038155812098e+00 + -7.7568407545129272e+00 -8.0437762562416604e-01 2.9996797142946408e+00 + -8.0367164186028095e+00 -1.1779635886939883e+00 3.2270862924150698e+00 + -8.2260200019396841e+00 -1.5886121620952545e+00 3.4253209396231901e+00 + -8.3316276288236253e+00 -2.0192233483637994e+00 3.5910846799478175e+00 + -8.3684419141810196e+00 -2.4540459368837730e+00 3.7330088874601652e+00 + -8.3503473452693076e+00 -2.8830357308455108e+00 3.8708586595643757e+00 + -8.2803105909922774e+00 -3.2963265680394409e+00 4.0112528778269416e+00 + -8.0283888760482451e+00 -3.7026010704672689e+00 4.1014138563188709e+00 + id 11969 + loc 4.2491400241851807e-01 5.2083373069763184e-01 1085 + blend 0.0000000000000000e+00 + interp 4.4910928047071497e-01:3.6161179213834377e-01:3.7815649672821738e-01:4.4910478937791026e-01:9.9021842898067836e-01:4.0401869266873675e-01:1.5130391217087233e+00:3.6794364596912704e-01:2.0736836511381527e+00:3.7144492937475876e-01:2.9942024773523066e+00:3.8521544225755655e-01:3.9431227510501019e+00 + CVs 20 + -1.9340753018864748e-01 4.0443499447850040e-01 2.6102880009303742e-01 + -4.1059083737716295e-01 7.6604403238858620e-01 4.2931549873955749e-01 + -6.6559504307712092e-01 1.1086342223387182e+00 5.4818180993800691e-01 + -9.6569254463854304e-01 1.4293852130149416e+00 6.2219026884202711e-01 + -1.3067144865985945e+00 1.7037232923543719e+00 6.3238033443934316e-01 + -1.6709672483936335e+00 1.9045202021615268e+00 5.6534157509873040e-01 + -2.0273248055321389e+00 2.0081145978324852e+00 4.1843949172234784e-01 + -2.3390373518260583e+00 2.0033092405282327e+00 2.0522890043130748e-01 + -2.5798846419154109e+00 1.8943518066197684e+00 -4.3707219556593957e-02 + -2.7547087914849362e+00 1.6972143340085308e+00 -2.8884449222047320e-01 + -2.8887092661076292e+00 1.4274686146405686e+00 -4.9815242332375120e-01 + -2.9954534751637385e+00 1.0968042439119445e+00 -6.4688276258454358e-01 + -3.0786797962470231e+00 7.2111567248547237e-01 -7.0972026080657580e-01 + -3.1499538327490901e+00 3.2292037787097588e-01 -6.5891044650360198e-01 + -3.2191062680778830e+00 -5.7901775881234685e-02 -4.7358564839357087e-01 + -3.3035098255969215e+00 -3.7382958345133488e-01 -1.8432221304276564e-01 + -3.4469788403574886e+00 -6.1254941381702244e-01 1.6380124778687355e-01 + -3.6470690727473705e+00 -7.6208114937720151e-01 5.3494407671253696e-01 + -3.7336231323130353e+00 -8.7502596799586163e-01 7.6342836947970394e-01 + id 11970 + loc 6.0803240537643433e-01 9.5120280981063843e-02 1068 + blend 0.0000000000000000e+00 + interp 5.1986734536172496e-01:2.9361654470236831e-01:4.9307598440033029e-01:2.9318323020919673e-01:1.4805662679026346e+00:4.5922922075601974e-01:2.0050537974892122e+00:5.1986214668827135e-01:2.9179114158362749e+00:3.5150060999254445e-01:3.0543258350486004e+00:3.5610077873185259e-01:3.9062564041285288e+00 + CVs 20 + -9.6070400736697370e-02 3.1663961724643330e-01 7.4609319079496195e-02 + -2.2340540492457617e-01 6.5458216710453609e-01 1.6699197663376580e-01 + -3.8437707823516476e-01 1.0041873250052622e+00 2.4786585052861768e-01 + -5.8097783701936423e-01 1.3449618757394899e+00 2.9481791617679787e-01 + -8.1530606622071711e-01 1.6506781171339231e+00 3.0355949058976039e-01 + -1.0816379575286610e+00 1.8960017299467182e+00 2.7824845793260672e-01 + -1.3693075588537942e+00 2.0672616868505447e+00 2.3415776256470591e-01 + -1.6647860994128725e+00 2.1623455098918734e+00 1.9050235545199395e-01 + -1.9568878374699288e+00 2.1892729522347203e+00 1.6397205365708167e-01 + -2.2368887682914655e+00 2.1381519586000541e+00 1.7284624350507682e-01 + -2.4468220380373316e+00 1.9437293151005077e+00 2.2139125327458054e-01 + -2.4829280518382051e+00 1.6729698855119066e+00 2.1762044517377724e-01 + -2.4646161101799686e+00 1.4440882746736985e+00 1.5457275871661780e-01 + -2.4243012541383688e+00 1.2057982159908121e+00 6.2603013123049028e-02 + -2.3554207598621528e+00 9.7750623854465168e-01 -6.4604597741971401e-02 + -2.2867802698407123e+00 7.9567468515721584e-01 -2.1842962973484381e-01 + -2.2508028127544910e+00 6.7588202346005100e-01 -3.7690361245505188e-01 + -2.2657253210099428e+00 6.3307792883452518e-01 -5.1556327591882312e-01 + -2.1889308445239384e+00 4.6560691647150765e-01 -6.9463151189749150e-01 + id 11971 + loc 3.5643786191940308e-01 5.8480817079544067e-01 416 + blend 0.0000000000000000e+00 + interp 4.9057421726949588e+00:2.3448635380653157e-01:4.4841847429457071e-01:4.4572274035164183e-01:5.8857538244449104e-01:2.7555773483961343e+00:8.3685916550087369e-01:4.9057321726949592e+00:9.7909587369562900e-01:1.0026363722349960e+00:2.6699055271311654e+00:4.8182232976200495e-01:2.8729368070522545e+00:2.7692331348365307e-01:3.0111279194597755e+00:3.9068485995196045e-01:3.9945907053269982e+00 + CVs 20 + 6.7316897424812105e-01 2.3946987767872369e-01 -7.9159767597975050e-02 + 1.1121128094435759e+00 3.4857694820972879e-01 -1.4276798766908944e-01 + 1.4919461431153886e+00 3.9942841944756269e-01 -1.8520448835315578e-01 + 1.9051801666045316e+00 4.2828105520863430e-01 -1.9550283401364377e-01 + 2.3452216868883351e+00 4.2715403254754053e-01 -1.6780389563691861e-01 + 2.8002689999349579e+00 3.8855453119539490e-01 -9.5967512569263363e-02 + 3.2570086401654086e+00 3.0819166099387929e-01 2.4695203193917936e-02 + 3.7022589250881928e+00 1.8550304500785775e-01 1.9267907502044468e-01 + 4.1219348764185781e+00 2.4616728515520325e-02 3.9862172471643614e-01 + 4.5053058932622436e+00 -1.6589174654871375e-01 6.2858284303701728e-01 + 4.8602375008978784e+00 -3.8245332184654734e-01 8.6653855687491566e-01 + 5.2173784381196331e+00 -6.3973560561373577e-01 1.0888801942178183e+00 + 5.5918517246897341e+00 -9.5504652872037554e-01 1.2542467421881520e+00 + 5.9501590421713821e+00 -1.3074711281705680e+00 1.3238417350961162e+00 + 6.2542273257728898e+00 -1.6493958523743364e+00 1.2982788977715014e+00 + 6.5007108936004938e+00 -1.9539413601872317e+00 1.1992269298204876e+00 + 6.7000596742301788e+00 -2.2135465709600872e+00 1.0461192579150911e+00 + 6.8598556138853191e+00 -2.4220075092460505e+00 8.5970359936280039e-01 + 6.9754706433207883e+00 -2.5294603814670742e+00 6.9830435426244997e-01 + id 11972 + loc 3.1172555685043335e-01 8.1077343225479126e-01 1054 + blend 0.0000000000000000e+00 + interp 3.0171962189774987e-01:2.5431880435510495e-01:4.6342253947989798e-01:3.0171660470153089e-01:1.2236245647720070e+00:2.6982162087613271e-01:2.1370228846417332e+00:2.9414845297477266e-01:3.0022034214151043e+00:3.0152059511826751e-01:3.9643120971347479e+00 + CVs 20 + 4.4692369646009888e-01 4.2875396713244368e-01 -7.1636129551878230e-02 + 8.0816742099721073e-01 8.4244176815381866e-01 -7.6896699900582455e-02 + 1.0892704503681001e+00 1.2601293946713754e+00 -3.3029956014564155e-03 + 1.3226918312727702e+00 1.6708089921474110e+00 1.5288986734238352e-01 + 1.5600055105370685e+00 2.0320995624875389e+00 3.8313908765509042e-01 + 1.8449981984776893e+00 2.2978955878978153e+00 6.5954850423437283e-01 + 2.1930237138111819e+00 2.4278219684636819e+00 9.4815095043513808e-01 + 2.5878774978485861e+00 2.3838969028214039e+00 1.2116660648057105e+00 + 2.9763027471404362e+00 2.1614799482824769e+00 1.4270158183137145e+00 + 3.2914355667315522e+00 1.8083589315636068e+00 1.6000362943947635e+00 + 3.4963244860003093e+00 1.4140803749441360e+00 1.7587365300301507e+00 + 3.5917407511881403e+00 1.0626466907507561e+00 1.9332551343852029e+00 + 3.6285319904037112e+00 7.7137419066830393e-01 2.1445235935289437e+00 + 3.7779630490204954e+00 5.2357871960460345e-01 2.3938147615373317e+00 + 4.1437267246080065e+00 3.4957082595889133e-01 2.5899466152228845e+00 + 4.6295245707477530e+00 2.0432171687498435e-01 2.6856918703364023e+00 + 5.0495209054974657e+00 2.5263507121536133e-02 2.7091503403915116e+00 + 5.2796108888899393e+00 -1.9660589024912123e-01 2.7119912322011208e+00 + 5.4789050659717455e+00 -6.5956604056487211e-01 2.8335828185440213e+00 + id 11973 + loc 5.2211785316467285e-01 7.1955800056457520e-02 384 + blend 0.0000000000000000e+00 + interp 4.9612910639521091e-01:4.1739431162175983e-01:1.1949281547751411e-01:4.1149172368091569e-01:9.1687083756199417e-01:4.9612414510414699e-01:1.2496761783930870e+00:3.1970043268392839e-01:2.0070666654682316e+00:3.1026534622566682e-01:3.0957202014428420e+00:4.6097610166633657e-01:3.7359680155914714e+00 + CVs 20 + -1.1649088849759013e+00 2.0239052628106602e-01 5.5362825919873970e-01 + -1.8834738774996538e+00 2.0254042011419693e-01 9.5060871399766611e-01 + -2.4653252910807719e+00 1.1657027470071757e-01 1.2991872797112438e+00 + -3.0261660339941332e+00 -1.8153839369191960e-02 1.6368998297435859e+00 + -3.5604035620564058e+00 -1.9641221095351497e-01 1.9585676270628232e+00 + -4.0739501663987161e+00 -4.0708144771076243e-01 2.2696749388615336e+00 + -4.5777412459375419e+00 -6.3626360795765835e-01 2.5850271191883682e+00 + -5.0791613239148736e+00 -8.7419108934437728e-01 2.9214891435450849e+00 + -5.5823291947577118e+00 -1.1273037965797348e+00 3.2897918277992355e+00 + -6.0856695351146044e+00 -1.4233527381128965e+00 3.6934294579277767e+00 + -6.5680561757466016e+00 -1.7966956249282604e+00 4.1317452044769096e+00 + -6.9913513539527035e+00 -2.2650766310102219e+00 4.5959764057445742e+00 + -7.3361186102158298e+00 -2.8224277997239966e+00 5.0613202957481187e+00 + -7.6106268804673558e+00 -3.4552573480541864e+00 5.4979653753466406e+00 + -7.8174695202032938e+00 -4.1546802613833673e+00 5.8883016837659001e+00 + -7.9470677929349218e+00 -4.9124509753361334e+00 6.2218644138516010e+00 + -7.9898188777378474e+00 -5.6973048515220297e+00 6.4817203982782576e+00 + -7.9612837990375906e+00 -6.4566587827280522e+00 6.6623053843018107e+00 + -7.9652478904602608e+00 -7.0961622359376104e+00 6.8384335119894564e+00 + id 11974 + loc 1.7726247012615204e-01 4.0407299995422363e-01 411 + blend 0.0000000000000000e+00 + interp 4.4807199487264304e-01:3.4396457012808390e-01:6.1977555892958236e-01:4.4806751415269436e-01:1.2211329966799973e+00:3.3373924698113094e-01:1.9714863122846322e+00:3.1406867518098441e-01:2.3309574115085079e+00:2.9172608434178615e-01:3.1909570439390973e+00:4.1937704489472621e-01:3.9010131149232072e+00 + CVs 20 + -7.7796296755329817e-03 1.3614029589561288e-01 -6.9428689749379136e-01 + -4.8505192124656510e-02 1.7778230485843988e-01 -1.1998908689641905e+00 + -8.3972183477286369e-02 1.8232198041029929e-01 -1.6632112083584936e+00 + -9.5684321347290338e-02 1.7470984123101474e-01 -2.1482206864311242e+00 + -8.4025132242482786e-02 1.5425931232884249e-01 -2.6485683088028615e+00 + -5.2972180204982497e-02 1.2150126992209476e-01 -3.1574838616170795e+00 + -8.1275628944141726e-03 7.7074548529988185e-02 -3.6681725959210314e+00 + 4.6064406868843943e-02 1.8106351837066548e-02 -4.1744460613731125e+00 + 1.0672930970080424e-01 -6.3548587093760878e-02 -4.6701373782349771e+00 + 1.6974237142396842e-01 -1.7914804892504899e-01 -5.1455671694701444e+00 + 2.2932031006626877e-01 -3.3570769746575779e-01 -5.5897418166954340e+00 + 2.8318796779341149e-01 -5.3206032952282456e-01 -6.0021656827036107e+00 + 3.3453204335056830e-01 -7.6991193162140847e-01 -6.3911519603123388e+00 + 3.8855659749642468e-01 -1.0503354578687669e+00 -6.7639697305334376e+00 + 4.4864612947552707e-01 -1.3725233529322960e+00 -7.1212360398996992e+00 + 5.1569270441605408e-01 -1.7372149808453750e+00 -7.4572018325962039e+00 + 5.8997965231584959e-01 -2.1452115912368743e+00 -7.7609579253069061e+00 + 6.7147914159234723e-01 -2.5854219400204790e+00 -8.0197239541816163e+00 + 7.6533996537501980e-01 -2.9381833736144234e+00 -8.2345670454610786e+00 + id 11975 + loc 2.2947789728641510e-01 1.7543345689773560e-01 406 + blend 0.0000000000000000e+00 + interp 4.6642869429336353e-01:2.4639364212576118e-01:8.3849881151945649e-01:4.6642403000642063e-01:1.3587109426910198e+00:4.1408637650616936e-01:1.9815181662429624e+00:4.4434176951783921e-01:2.4318356658495639e+00:2.7573046383575112e-01:2.9510756119023416e+00:3.8695688471805789e-01:3.3196863365317739e+00:4.4045804337474626e-01:3.9609834921025593e+00 + CVs 20 + 5.3434947454843229e-02 1.2207153621031541e-01 -4.8169901044790409e-02 + 1.0297007796402445e-01 2.1607666748689403e-01 -5.8575998837665191e-02 + 1.5725428766673369e-01 2.9921118091454191e-01 -5.4936888995219382e-02 + 2.2041116161837848e-01 3.8079587127604747e-01 -5.6527233761957923e-02 + 2.9259702550718764e-01 4.6004094317048255e-01 -6.3867571368971837e-02 + 3.7328439637875815e-01 5.3568070795538036e-01 -7.6860862295355353e-02 + 4.6148183418439742e-01 6.0557395592416963e-01 -9.4783136784051453e-02 + 5.5531777542557104e-01 6.6658105054652128e-01 -1.1603216537688177e-01 + 6.5330522980454209e-01 7.1542391674774153e-01 -1.3787471966094195e-01 + 7.5836702841740489e-01 7.5000588844035976e-01 -1.5710918868313500e-01 + 8.7693253243738800e-01 7.6895557795562175e-01 -1.7177499656186432e-01 + 1.0114296822572997e+00 7.6982779630364195e-01 -1.8206216004715051e-01 + 1.1554191964977762e+00 7.4863279572312502e-01 -1.8863702879903438e-01 + 1.3006796366821227e+00 7.0195045777791609e-01 -1.9077965444139833e-01 + 1.4494194952002497e+00 6.2888419320836075e-01 -1.8879681156667799e-01 + 1.6116523810707200e+00 5.3036462193449319e-01 -1.8672498428723178e-01 + 1.7899541151574931e+00 4.0904675207374136e-01 -1.8975481404052577e-01 + 1.9743379038397424e+00 2.6916632097887438e-01 -1.9961410508251892e-01 + 2.0547226846750273e+00 5.3239458156266836e-02 -1.9694163932777572e-01 + id 11976 + loc 7.3793864250183105e-01 8.2942241430282593e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1193227128050097e-01:3.7548547021944889e-01:6.5273365780567860e-02:4.0866082539197057e-01:9.9413880351553652e-01:3.5056104352508888e-01:1.7763881228029237e+00:4.1192815195778820e-01:2.1086203376963937e+00:3.7952631308444246e-01:2.8265103444302291e+00:2.5299882546564856e-01:3.0848052377949764e+00 + CVs 20 + 8.4626408541552803e-02 4.0871373830095986e-01 -2.4874457706849723e-01 + 1.8822463915278195e-01 8.1137601161395456e-01 -4.8892092200263315e-01 + 3.2327194119275093e-01 1.2049960117295140e+00 -7.3807866211078232e-01 + 5.0147173617311225e-01 1.5761234341790318e+00 -1.0134325127502688e+00 + 7.3044425552012948e-01 1.8948100130406638e+00 -1.3305522488978410e+00 + 1.0052579247642019e+00 2.1160859363764000e+00 -1.6974309789234805e+00 + 1.3064457250840706e+00 2.2011254206773270e+00 -2.1016790723959513e+00 + 1.6077469992316713e+00 2.1388080861139680e+00 -2.5133988670362335e+00 + 1.8834804172237427e+00 1.9459011989740076e+00 -2.9021790872143991e+00 + 2.1144920021213265e+00 1.6583727339227421e+00 -3.2516591909447965e+00 + 2.3001773742782667e+00 1.3215896827352025e+00 -3.5670288907674466e+00 + 2.4603980965496173e+00 9.7681070075714460e-01 -3.8757066643879288e+00 + 2.5975618715463580e+00 6.5416927026928806e-01 -4.1966957629221140e+00 + 2.6802142463730965e+00 3.7612850785035024e-01 -4.5245974018678599e+00 + 2.6935299505333421e+00 1.5541756092525305e-01 -4.8701381451295447e+00 + 2.6436684638520309e+00 9.6396519188757246e-03 -5.2594948897934382e+00 + 2.5407596595705928e+00 -3.5813042602658163e-02 -5.6711865595058750e+00 + 2.4304545488939393e+00 -2.4897686504361527e-03 -6.0662917537488585e+00 + 2.3605385290928713e+00 4.0011249965002049e-02 -6.4729515660106847e+00 + id 11977 + loc 8.4378093481063843e-01 3.8336271047592163e-01 403 + blend 0.0000000000000000e+00 + interp 3.7920845122421371e-01:3.7920465913970147e-01:3.9180850020831814e-01:2.5246853846904860e-01:1.0937609324657449e+00:3.0773905133389229e-01:1.9433925370285188e+00:3.2598561080611244e-01:2.4215436302570774e+00:3.7592573315364497e-01:2.9991344253280898e+00:3.7535902342144811e-01:3.6154293528809647e+00 + CVs 20 + -7.1672966273146427e-02 -2.8921361816776233e-02 6.1888168972557306e-02 + -1.4410580418337737e-01 -6.3785211044541767e-02 1.2612674172945101e-01 + -2.1819258950005033e-01 -1.0237287848679019e-01 1.9315965131071836e-01 + -2.9725632155464998e-01 -1.4150658346541684e-01 2.5264124241851005e-01 + -3.8765942258485014e-01 -1.7387815081516861e-01 3.0411756430580122e-01 + -4.9517967230416471e-01 -1.9056116759032593e-01 3.5060162838312303e-01 + -6.2401186516067830e-01 -1.8024771255425445e-01 4.0028558293817207e-01 + -7.7481500643899803e-01 -1.2837128070027437e-01 4.6574805134373709e-01 + -9.3730954864439797e-01 -2.1152060071493284e-02 5.6059575801532791e-01 + -1.0848274420974531e+00 1.4250011655093864e-01 6.9134460197374281e-01 + -1.1877678034057952e+00 3.4831494035772481e-01 8.5229728693591467e-01 + -1.2287623010615751e+00 5.7897630344278628e-01 1.0294225992512720e+00 + -1.2017295071567395e+00 8.2175367822959233e-01 1.2079351784906300e+00 + -1.1058663376915077e+00 1.0649616103299164e+00 1.3756056144899251e+00 + -9.4438061398734541e-01 1.2960340706573452e+00 1.5225771493233062e+00 + -7.2353598651707041e-01 1.5075088548480595e+00 1.6399631450996730e+00 + -4.4802035499784187e-01 1.7014599946707325e+00 1.7175996407529495e+00 + -1.2595842399642265e-01 1.8787267839187360e+00 1.7390242394559301e+00 + 9.7857792833968560e-03 1.9707488151294990e+00 1.6046061647138914e+00 + id 11978 + loc 9.3554663658142090e-01 5.8673758059740067e-02 1085 + blend 0.0000000000000000e+00 + interp 5.4813044462263438e-01:5.4812496331818816e-01:3.0986191077102321e-01:4.2116395996276579e-01:9.9421709715774764e-01:4.1434782197238412e-01:1.4609993169013800e+00:3.6461841993993499e-01:1.8167278406462342e+00:3.0985472364706884e-01:2.2107757444225782e+00:4.5604797453010243e-01:3.0767380912821887e+00:3.4161701810009382e-01:3.6787053795417695e+00 + CVs 20 + 1.8267763728294589e-01 3.5744838190908379e-01 -1.5401114884957606e-01 + 4.0559683938634439e-01 7.0388600964867953e-01 -3.0910792961649003e-01 + 6.3646338061470398e-01 1.0411946959383511e+00 -4.6080291017316954e-01 + 8.7517284940038265e-01 1.3560079691518496e+00 -5.9147269028829752e-01 + 1.1315323797709702e+00 1.6357426905694652e+00 -6.8184080405690395e-01 + 1.4058477743099864e+00 1.8665515597857369e+00 -7.1624296409889410e-01 + 1.6902299785255122e+00 2.0369836959567196e+00 -6.8291560346854308e-01 + 1.9704716571555374e+00 2.1351740469840315e+00 -5.7154927627361074e-01 + 2.2168987013098311e+00 2.1430286519208925e+00 -3.9092859380085077e-01 + 2.4000031745942305e+00 2.0636777287286368e+00 -1.8586047545988760e-01 + 2.5125576459344048e+00 1.9372940175495663e+00 -1.6056020126670956e-02 + 2.5687802551523928e+00 1.8410644715090332e+00 6.9763025671688350e-02 + 2.5963765408149131e+00 1.7984248126379467e+00 1.1657348980790472e-01 + 2.6063444423722433e+00 1.6345095882870200e+00 1.9435695122282104e-01 + 2.5672294684440935e+00 1.2168521654838149e+00 2.8564813398394684e-01 + 2.4202166467673640e+00 6.1481346046822283e-01 4.3602915882718341e-01 + 2.1438426582737575e+00 -8.9472062642260708e-03 7.3892936377090312e-01 + 1.8179415743273857e+00 -4.4166532913872592e-01 1.1903122116530696e+00 + 1.6062931130273257e+00 -5.1044108814750733e-01 1.5744672967154663e+00 + id 11979 + loc 4.4578889012336731e-01 5.2083373069763184e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2256634672809273e-01:4.1399816554216778e-01:3.7916247178602980e-01:2.5590509094271241e-01:1.0027621400900364e+00:4.2256212106462548e-01:1.5159416802375087e+00:4.1916624313839174e-01:2.0949058020958686e+00:4.0822569279501336e-01:2.9863846541943841e+00:2.9577178094803658e-01:3.3126359869414719e+00:4.1434685417465317e-01:3.9615111322909184e+00 + CVs 20 + -2.8946637740130093e-01 2.0517509717602364e-01 3.2556637690427287e-01 + -5.5668314930265428e-01 3.4755884178645796e-01 5.9666889005078394e-01 + -7.9996017888379256e-01 4.7043385008175181e-01 8.6663653437839483e-01 + -1.0124279459296950e+00 5.9442017099373867e-01 1.1631052985831238e+00 + -1.2086905765844127e+00 7.3160752823439279e-01 1.4851039653396478e+00 + -1.4208269830936948e+00 8.9777517980120769e-01 1.8271840022066281e+00 + -1.6979638034331650e+00 1.1075161042772694e+00 2.1764831603194339e+00 + -2.1026772335849269e+00 1.3699268604285246e+00 2.4961276715818062e+00 + -2.6559628418206609e+00 1.6518005431224445e+00 2.6780826549666155e+00 + -3.2342785921537307e+00 1.8750276981663319e+00 2.6356314108815138e+00 + -3.6779910345322246e+00 2.0544874732158096e+00 2.4475823788172200e+00 + -3.9427736361714634e+00 2.2890427087953467e+00 2.2108827107039293e+00 + -4.1076575949860281e+00 2.4742751162080197e+00 1.9048583903118130e+00 + -4.2538166291326984e+00 2.3073545774513375e+00 1.6060674075301393e+00 + -4.3445612533941826e+00 1.7484733395506560e+00 1.3993735208679956e+00 + -4.2739628570384216e+00 9.5879675929307528e-01 1.2041897591718278e+00 + -3.9931235918586983e+00 1.4207040167863560e-01 8.8353192593519037e-01 + -3.5934619064130198e+00 -4.0551935987845306e-01 4.0962911304235627e-01 + -3.2741118243358311e+00 -3.9860002874704137e-01 4.3229526660024761e-02 + id 11980 + loc 5.6937700510025024e-01 9.6655142307281494e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5856306694052346e-01:3.6692356481002425e-01:5.9270835086841278e-01:2.4573897029745331e-01:1.1378943037470586e+00:4.0795348001742543e-01:1.9998929734792730e+00:4.5855848130985405e-01:2.6406254287448778e+00:4.3536061510058893e-01:3.0094057356195409e+00:3.8311484211162894e-01:3.8841885503972775e+00 + CVs 20 + 1.5805508626705550e-01 9.2617967394867906e-01 -3.4053007091128529e-01 + 4.0773152267878943e-01 1.8761384771608671e+00 -6.0127791324714375e-01 + 7.6883263111583922e-01 2.8135682174413494e+00 -6.7352521370812479e-01 + 1.2246666343369030e+00 3.6488738665865386e+00 -4.6954940774510678e-01 + 1.7372861845055856e+00 4.2551569356057257e+00 2.9544145217522688e-02 + 2.2160964122107232e+00 4.5297969444544366e+00 7.5654606810563729e-01 + 2.5726821261946369e+00 4.4410227903475281e+00 1.6098441832102752e+00 + 2.7639067143213625e+00 4.0331910123625541e+00 2.4997877299548090e+00 + 2.7663048052001389e+00 3.3797172293648741e+00 3.3596775173427966e+00 + 2.5318121995787393e+00 2.5903108212574582e+00 4.1108481479558421e+00 + 2.0338359670042436e+00 1.8077085046059642e+00 4.6643830876769021e+00 + 1.3686275435704180e+00 1.0827192066700813e+00 4.9958881907173662e+00 + 6.8445963867405613e-01 3.4795765412695823e-01 5.1714767712243557e+00 + 1.4201020411086177e-01 -4.4140787795137815e-01 5.3297355874145769e+00 + 4.4601964748700457e-03 -1.1727681667575225e+00 5.6615729948805367e+00 + 3.9496763773913413e-01 -1.4095814274386766e+00 6.0546945767908644e+00 + 7.9353418985848112e-01 -1.1630345340955435e+00 6.2037148639400730e+00 + 1.1562870296567656e+00 -8.8946983986503492e-01 6.3539753851506031e+00 + 1.8764777197281342e+00 -6.3616407134536823e-01 6.9335694705153816e+00 + id 11981 + loc 1.0650997608900070e-01 3.0368733406066895e-01 1054 + blend 0.0000000000000000e+00 + interp 5.8494170550660418e-01:3.2036843767024742e-01:8.0893550064309694e-01:4.5701475563473931e-01:1.6753742584410058e+00:5.8493585608954912e-01:2.0142280165012374e+00:5.5397935358901673e-01:2.5202417555194083e+00:3.6872353289886695e-01:3.0978393726746161e+00:4.1892470635347645e-01:3.7953473573183132e+00 + CVs 20 + -6.4410857368828220e-02 4.0108498601241888e-01 -1.7292076806200496e-01 + -6.6099872475430699e-02 7.9382459974201836e-01 -3.6533385359972737e-01 + 1.6455881927382232e-02 1.1690769112856971e+00 -5.3657426026077704e-01 + 1.9234801349431119e-01 1.5101347952193664e+00 -6.6662617064900598e-01 + 4.5090120605717798e-01 1.7881811334984437e+00 -7.7048461687057834e-01 + 7.4908760394354690e-01 1.9798902430374223e+00 -8.7504904527345095e-01 + 1.0281355319599088e+00 2.0864743510875909e+00 -9.7730644841023229e-01 + 1.2496506673791572e+00 2.1230634124757808e+00 -1.0671399079444908e+00 + 1.3826124743892700e+00 2.0542964349799235e+00 -1.1570777545109259e+00 + 1.4039670690608737e+00 1.8421250456386331e+00 -1.2293800099233727e+00 + 1.3366811559365959e+00 1.4671859190424947e+00 -1.2734768622930868e+00 + 1.2935501380700221e+00 8.5907225876712201e-01 -1.3326448233570867e+00 + 1.4603658274296756e+00 -4.3165886541826487e-02 -1.6242953663884245e+00 + 1.7310022714347246e+00 -8.0322841326978678e-01 -2.3814874077642321e+00 + 1.7520572632949729e+00 -1.0919993245911557e+00 -3.0159495141795238e+00 + 1.5938843206812059e+00 -1.1962427087856713e+00 -3.2926272829097929e+00 + 1.3394094572169559e+00 -1.1624311906314015e+00 -3.2284350350804289e+00 + 9.8165905551669708e-01 -9.7138122299087359e-01 -3.0743605748516019e+00 + 8.0349365478915213e-01 -1.1890365628165289e+00 -3.3743196424880706e+00 + id 11982 + loc 3.1436389684677124e-01 1.5061360597610474e-01 1048 + blend 0.0000000000000000e+00 + interp 5.8494170550660418e-01:3.8390785420448659e-01:8.1900308348156647e-02:5.8493585608954912e-01:9.8362083736573569e-01:3.8870450245757099e-01:1.4817638722616135e+00:5.3381604901766311e-01:2.0638111472661382e+00:3.5097945978966888e-01:2.6205530064144411e+00:3.8877366157031112e-01:3.0505330938229434e+00:3.6939114167154385e-01:3.7927127299722425e+00 + CVs 20 + -3.4886389423377789e-01 4.8920103782580032e-01 7.1411288039581688e-02 + -6.7549759818944843e-01 1.0279069222834392e+00 6.3893957859319894e-02 + -9.5191542011125407e-01 1.6249880126078005e+00 -5.4235331727428227e-02 + -1.1644778301253280e+00 2.2203323497451919e+00 -3.1889027731434538e-01 + -1.3315923971736423e+00 2.7044620561635266e+00 -7.3268273534249595e-01 + -1.4791033305764718e+00 2.9857510825288829e+00 -1.2224485653297756e+00 + -1.5930314268152896e+00 3.0206211323959411e+00 -1.6566367514342488e+00 + -1.6248296551632300e+00 2.8532101649311805e+00 -1.9174816724603907e+00 + -1.5739423684467408e+00 2.5650897985784127e+00 -2.0650640884336262e+00 + -1.4390995425431967e+00 2.1691466692227972e+00 -2.1594281895052294e+00 + -1.1970740840382559e+00 1.7440669494827796e+00 -2.1633322291101118e+00 + -8.5891126077871616e-01 1.3832990527596096e+00 -2.0783937835763826e+00 + -4.7959906699016330e-01 1.0814452430947323e+00 -1.9528410314930260e+00 + -1.1241156723160195e-01 7.3554559655980023e-01 -1.8133620576519527e+00 + 1.9519318447462036e-01 2.8366918659726970e-01 -1.6515262625991973e+00 + 4.3910300723941920e-01 -4.8042226953374123e-01 -1.5490954838959006e+00 + 1.0400353236805489e+00 3.6835997656305441e-01 -2.4956251454248544e+00 + 1.1510453073914160e+00 5.5450754714806982e-02 -2.2834722456367640e+00 + 1.1854622131171872e+00 3.3678574840434661e-01 -2.2820661497930250e+00 + id 11983 + loc 2.0681378245353699e-01 7.7198743820190430e-01 406 + blend 0.0000000000000000e+00 + interp 4.1501612291777901e-01:3.9464760479930028e-01:5.3177731602301848e-01:3.9891348645128333e-01:1.1117269670826422e+00:3.9890137427451167e-01:2.0518585235583910e+00:4.1501197275654983e-01:2.8446150700673769e+00:3.8426747070198763e-01:3.3435818512884339e+00:3.5224064606192812e-01:3.9987573111629557e+00 + CVs 20 + 2.9974299476437488e-01 2.6560942003358123e-01 -2.0789431843101402e-01 + 4.6192661168101612e-01 4.7725065711463843e-01 -4.0042032653343651e-01 + 5.9071750828642366e-01 6.0898253386379597e-01 -5.5130896291221931e-01 + 7.2596452611144358e-01 7.2415986400859278e-01 -6.8130068693155843e-01 + 8.6162806548225790e-01 8.2636230261537369e-01 -7.9014947533772273e-01 + 9.9428316807497885e-01 9.1448943333976096e-01 -8.7694403526305820e-01 + 1.1233707954749272e+00 9.8520272028859723e-01 -9.4038295020320672e-01 + 1.2517461859679575e+00 1.0279684140215499e+00 -9.7456158102642099e-01 + 1.3844129292292318e+00 1.0111543943834309e+00 -9.5735708473212422e-01 + 1.4936824450592951e+00 8.1107883390614044e-01 -8.0446140760237106e-01 + 1.0670276628027702e+00 1.2113284087605036e-01 -4.3452188991403740e-01 + 2.4003572380324242e-01 -1.5785135662154598e-01 -5.1242539249409280e-01 + -7.7250065388539971e-02 -1.8353124014087230e-01 -6.2679835418483754e-01 + -2.4487636229446905e-01 -2.0898424199595197e-01 -6.7336675944581015e-01 + -3.4825688647944697e-01 -2.4877935512816796e-01 -6.5465349071986900e-01 + -3.8849176405604974e-01 -3.1891093611379528e-01 -5.5344545950209945e-01 + -3.5521819954119715e-01 -4.2226085354581000e-01 -3.6326967842900804e-01 + -2.5844596892478255e-01 -5.2990255016944809e-01 -1.1063343805956322e-01 + -3.4310730458520594e-01 -5.1244253181836763e-01 -1.0652443842311801e-02 + id 11984 + loc 4.9660342931747437e-01 7.4321269989013672e-02 1075 + blend 0.0000000000000000e+00 + interp 4.9523557507777327e-01:4.4395155411776543e-01:5.1005641249407885e-01:4.9523062272202251e-01:9.8831727437333683e-01:3.9175777473663242e-01:1.2324430143876073e+00:3.2352510945771762e-01:1.9725165620108691e+00:3.4493765855399378e-01:2.3263965207672004e+00:2.9625236700526286e-01:2.9753994506958485e+00:3.4866312335470440e-01:3.8701225842492271e+00 + CVs 20 + -2.4674919873815249e-01 3.4976108860551514e-01 -2.7853434478967043e-02 + -4.7535373520753010e-01 7.0134178296257110e-01 -1.8865059710470367e-02 + -6.9471770702275037e-01 1.0470591900316597e+00 1.4883353834537760e-02 + -9.2268137485745028e-01 1.3787699657342514e+00 5.2489716782178397e-02 + -1.1774016449270168e+00 1.6889039071971674e+00 7.3966533754723729e-02 + -1.4669655989523291e+00 1.9661034423103987e+00 6.6775531729366455e-02 + -1.7889464032329796e+00 2.1954393881723941e+00 2.2042131640806151e-02 + -2.1354730865738847e+00 2.3620229251328730e+00 -7.4236652155498239e-02 + -2.4905416298808074e+00 2.4481346778864204e+00 -2.3906869394405028e-01 + -2.8252372215919026e+00 2.4396430458753340e+00 -4.7071660500399237e-01 + -3.1113557036157813e+00 2.3438294268983046e+00 -7.4056232401959443e-01 + -3.3333243981190854e+00 2.1884831061320913e+00 -1.0066952564975034e+00 + -3.5015894694601690e+00 1.9879268013114735e+00 -1.2385028426187656e+00 + -3.6469811263448348e+00 1.7015558085774511e+00 -1.4172832822609065e+00 + -3.7739369753788310e+00 1.3000395504695383e+00 -1.5401175628181059e+00 + -3.8492477204064017e+00 8.1602917555392018e-01 -1.6559637676204286e+00 + -3.8406646776587849e+00 3.2364030959513573e-01 -1.8348052283303220e+00 + -3.7620430020013482e+00 -6.7827209523165899e-02 -2.1175098210816330e+00 + -3.6617780216047882e+00 -2.1533293753037575e-01 -2.4394078323455068e+00 + id 11985 + loc 9.8150759935379028e-01 5.8673758059740067e-02 1084 + blend 0.0000000000000000e+00 + interp 4.8011908950061544e-01:4.3803302353898138e-01:5.0351282835970901e-01:2.8938256609175511e-01:9.5645638465407290e-01:3.6182630213178063e-01:1.8071201582186733e+00:2.5193834884853833e-01:2.2501142339714444e+00:4.8011428830972047e-01:3.0695127069144967e+00:3.6079189211964391e-01:3.6876721938550689e+00 + CVs 20 + 1.8154215918918210e-01 2.6401039634388479e-01 -1.0953268527478827e-02 + 3.3554404046057024e-01 5.3754377931128838e-01 -5.5960824995053893e-02 + 4.4889681964714251e-01 8.1923550684108126e-01 -1.4482171066213312e-01 + 5.5178556409352097e-01 1.1172276164922197e+00 -2.5076393246054524e-01 + 7.0377407100576383e-01 1.4307300390353492e+00 -3.0810326070307392e-01 + 9.3544904672069396e-01 1.7215226289032866e+00 -2.5919403002396235e-01 + 1.2274766225000127e+00 1.9378016229267618e+00 -8.8361632436338544e-02 + 1.5264335992619000e+00 2.0421443913838910e+00 2.0242023934897335e-01 + 1.7563370049206861e+00 2.0192074836783398e+00 6.0006944013808983e-01 + 1.8576751667422851e+00 1.8797427270129523e+00 1.0554344487052947e+00 + 1.8273182156640453e+00 1.6454327591650990e+00 1.5111622812714096e+00 + 1.6724733014069153e+00 1.3190761532888988e+00 1.9271141761805908e+00 + 1.4088381946139528e+00 9.0909935414017862e-01 2.2412917585047771e+00 + 1.1454787254774721e+00 4.8757079300714645e-01 2.4208808084251987e+00 + 1.0237306010036529e+00 1.4973798097372482e-01 2.5513938781404053e+00 + 1.0764599585552612e+00 -4.2904465769727285e-02 2.7026658152010552e+00 + 1.2552570129826792e+00 -4.5746345747809780e-02 2.8508284936355106e+00 + 1.5010771206786475e+00 1.3252568996300673e-01 2.8948620819032591e+00 + 1.5354266760039057e+00 3.7421381871979520e-02 3.1623606942034890e+00 + id 11986 + loc 5.2399259805679321e-01 7.1205508708953857e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3512544852855145e-01:3.7404322008739294e-01:2.2177307458079187e-01:3.7245934251654783e-01:1.0249950491239506e+00:3.9846107677972364e-01:1.7562569216762838e+00:3.6022083964300822e-01:2.1316940563581177e+00:3.0223646479014904e-01:2.9861829353986034e+00:3.5652717370413373e-01:3.5168188897320469e+00:4.3512109727406617e-01:3.9855326488881762e+00 + CVs 20 + 1.7148672613513585e-01 2.8745389403213972e-01 -1.1612436417947566e-01 + 3.4579175884855701e-01 5.5757501864599834e-01 -2.2846351171294016e-01 + 5.1015949324472221e-01 8.0324650817479892e-01 -3.5335535175866117e-01 + 6.5724648739233327e-01 1.0201181610680405e+00 -4.9657955224516293e-01 + 7.8359645809045719e-01 1.2051532248239369e+00 -6.5410924704212592e-01 + 8.8775317047674940e-01 1.3557728498009907e+00 -8.2350181241955656e-01 + 9.7266601754854343e-01 1.4675994124465044e+00 -1.0117361420125381e+00 + 1.0387616025279633e+00 1.5346400337206021e+00 -1.2227887407894962e+00 + 1.0797347322168629e+00 1.5569964695705101e+00 -1.4457366619164880e+00 + 1.0899314334607193e+00 1.5427803489909362e+00 -1.6664070354487848e+00 + 1.0716495539891608e+00 1.5051226543053093e+00 -1.8775145568735589e+00 + 1.0330919867574138e+00 1.4597776749791578e+00 -2.0709375988794929e+00 + 9.8665981755510268e-01 1.4171132825614121e+00 -2.2379006809545818e+00 + 9.4988196781716638e-01 1.3761446314398917e+00 -2.3632579138334058e+00 + 9.4171398432884401e-01 1.3429871836520597e+00 -2.4311673051961851e+00 + 9.6539500618145191e-01 1.3234320764874130e+00 -2.4563554336716615e+00 + 1.0071189282306983e+00 1.3160375790893373e+00 -2.4688042804628538e+00 + 9.8167583535493330e-01 1.3077123077315189e+00 -2.5186813360791556e+00 + 5.0254864364874441e-01 1.2481037378494317e+00 -2.7619455287174692e+00 + id 11987 + loc 9.7476083040237427e-01 8.0102568864822388e-01 416 + blend 0.0000000000000000e+00 + interp 4.8407558761506808e-01:3.3317742268953821e-01:9.2822218097697762e-01:4.8407074685919194e-01:1.9565927184491962e+00:4.7670285174299892e-01:2.4300896715993736e+00:2.5398981198530513e-01:2.9967954163021231e+00:4.3064519977339971e-01:3.9382762479451401e+00 + CVs 20 + 8.2464167166597202e-01 1.6748508302711135e-01 -1.5938465315515268e-01 + 1.3617101905466522e+00 1.9016882666613247e-01 -2.9255206239986287e-01 + 1.8296123904017039e+00 1.6974433559652152e-01 -3.9404764350485533e-01 + 2.3084858465299485e+00 1.4625241681154105e-01 -4.6284342263329692e-01 + 2.7864764928847898e+00 1.1938883686186119e-01 -5.0299706066128946e-01 + 3.2550306573832408e+00 9.0602942623922655e-02 -5.2059570156454715e-01 + 3.7106325445667085e+00 6.1635649548144600e-02 -5.2350625166581932e-01 + 4.1547064773898716e+00 3.2642654896999135e-02 -5.2077063540496216e-01 + 4.5910793803587922e+00 1.8486589334663073e-03 -5.2011009786549467e-01 + 5.0234771296520018e+00 -3.3666897459497802e-02 -5.2561729552409997e-01 + 5.4538318234252898e+00 -7.6618476337287689e-02 -5.3717219694612983e-01 + 5.8778127171598511e+00 -1.2688894722333277e-01 -5.5469745922067271e-01 + 6.2865190155038828e+00 -1.8351288484090511e-01 -5.8647589141116352e-01 + 6.6778392547532945e+00 -2.5242865419473515e-01 -6.4919676948308269e-01 + 7.0531500429170908e+00 -3.4030673028079228e-01 -7.5159296684490695e-01 + 7.4057108777559151e+00 -4.4022833594339006e-01 -8.7940354073307270e-01 + 7.7258304288885826e+00 -5.3762969596459054e-01 -1.0084968517957895e+00 + 8.0086420389700219e+00 -6.2589497926182069e-01 -1.1281349549453217e+00 + 8.2035851270017233e+00 -7.3845304228265807e-01 -1.3364815129245682e+00 + id 11988 + loc 1.9342826306819916e-01 6.4360088109970093e-01 1085 + blend 0.0000000000000000e+00 + interp 5.1292494872135208e-01:4.0813551020944233e-01:5.6454679321272572e-02:3.2462093654356028e-01:8.0003658366882879e-01:4.1614739553544999e-01:1.2226503495216290e+00:4.4636673286558509e-01:1.8633938901898883e+00:3.0790466074163464e-01:2.4476234294934627e+00:3.8418560534945650e-01:3.1365519209914647e+00:5.1291981947186494e-01:3.8600717357313981e+00 + CVs 20 + -1.1867448460303738e-01 5.5301565693976640e-01 3.6749488418976561e-01 + -2.6065917559163854e-01 1.0234556372938823e+00 6.0242564238871688e-01 + -4.2992455581655403e-01 1.4541725216781347e+00 7.8243240360230271e-01 + -6.3591077742082547e-01 1.8547573029930939e+00 9.2043302645368630e-01 + -8.7994274172587805e-01 2.2112329382930516e+00 1.0009539534094625e+00 + -1.1544712513114228e+00 2.5099349995810885e+00 1.0136392416044528e+00 + -1.4441334776316945e+00 2.7394032468127687e+00 9.5444391432901310e-01 + -1.7303661227807570e+00 2.8935015271239659e+00 8.2778170277450891e-01 + -2.0028024229630379e+00 2.9719435979595192e+00 6.4392196370447219e-01 + -2.2599579776946368e+00 2.9737460474946715e+00 4.1365572796821715e-01 + -2.4974120294356683e+00 2.8965572372477544e+00 1.5261470070379235e-01 + -2.7119907669085075e+00 2.7416916401453202e+00 -1.2024713799787223e-01 + -2.9041329114405623e+00 2.5098073842361655e+00 -3.9104900288526068e-01 + -3.0785966367978812e+00 2.1878152665862052e+00 -6.5602291342445362e-01 + -3.2331197004383259e+00 1.7733130200012572e+00 -8.9012548268938008e-01 + -3.3426037231809032e+00 1.3061132382558291e+00 -1.0477026696746286e+00 + -3.3926205389604855e+00 8.0268122813759646e-01 -1.1174347415280412e+00 + -3.4343349769561979e+00 3.0587739554186288e-01 -1.0833728087113856e+00 + -3.5239224700441780e+00 1.4358575839276166e-01 -9.4098807668485440e-01 + id 11989 + loc 8.2353442907333374e-02 6.8623781204223633e-02 411 + blend 0.0000000000000000e+00 + interp 3.9220317187631748e-01:3.4796524941106560e-01:3.1849084430896379e-01:3.9219924984459875e-01:1.0641726393810902e+00:2.7563335458826366e-01:1.8084696378410756e+00:3.3945981399895575e-01:2.7563500372945233e+00:3.2988009361847487e-01:3.2267947811513351e+00:3.5230448765996975e-01:3.9606835632929971e+00 + CVs 20 + -2.0591610198282059e-01 2.4767576323965096e-01 -6.4189226372731278e-01 + -3.5875355519906338e-01 3.9047058108622751e-01 -1.1326163498117130e+00 + -4.8833654880297933e-01 4.8897148348115649e-01 -1.6184189970618961e+00 + -6.1418635252772336e-01 5.4855572407742259e-01 -2.1532407351041649e+00 + -7.6468871221931600e-01 5.3605542992791277e-01 -2.7196482797171853e+00 + -9.7034740929956687e-01 4.1851165999667628e-01 -3.2785903449393583e+00 + -1.2426110257980307e+00 1.7603762858851879e-01 -3.7714074668782134e+00 + -1.5579990506182040e+00 -1.8773371711126940e-01 -4.1416214381768546e+00 + -1.8660891839307456e+00 -6.4449891807280557e-01 -4.3615469518657726e+00 + -2.1116079265971197e+00 -1.1457003918925091e+00 -4.4293744066195702e+00 + -2.2841670146892903e+00 -1.6620884054658214e+00 -4.3768215748876491e+00 + -2.4584091851039753e+00 -2.2584039829359863e+00 -4.2765828311834939e+00 + -2.7305970365169321e+00 -3.0018731169918009e+00 -4.1894607837949627e+00 + -3.1674776162300629e+00 -3.8442961754829916e+00 -4.1582459346011493e+00 + -3.7686223843671645e+00 -4.6706064889457233e+00 -4.2201738975245098e+00 + -4.4268579166329172e+00 -5.3872001088807338e+00 -4.3948224767304227e+00 + -5.0043508981215066e+00 -5.9775105583202555e+00 -4.6724227854597835e+00 + -5.4450291527729133e+00 -6.4578058466598138e+00 -5.0001494921631995e+00 + -5.7746321715824447e+00 -6.8303736869705158e+00 -5.2729406254872391e+00 + id 11990 + loc 8.8525509834289551e-01 1.4203469455242157e-01 397 + blend 0.0000000000000000e+00 + interp 4.2507608685039444e-01:4.2507183608952598e-01:3.4715005402341192e-01:2.6525218546899770e-01:9.1604555739337690e-01:2.6019457136472551e-01:1.7795805317747084e+00:2.5323712553301519e-01:2.3626479295172254e+00:3.4447832733879435e-01:3.1389474187121227e+00:3.9528313861442421e-01:3.9560383346143437e+00 + CVs 20 + -1.2501229759299488e+00 3.4225101978868239e-01 3.4964816661278630e-01 + -2.0905233253041433e+00 4.0659441842857685e-01 6.4808383149338877e-01 + -2.8106368921288456e+00 3.4895137743815552e-01 9.2818668440898211e-01 + -3.5214007587487894e+00 2.0661096470386356e-01 1.2115209578831601e+00 + -4.2055413453449937e+00 -9.4629634634576520e-03 1.4905997343275692e+00 + -4.8511526883274758e+00 -2.8139514280350253e-01 1.7637740612082404e+00 + -5.4490254869884360e+00 -6.0329532845087253e-01 2.0269538994235150e+00 + -5.9892161379305344e+00 -9.8459387448255342e-01 2.2687622518150685e+00 + -6.4641358054217450e+00 -1.4181328166328901e+00 2.4874439649030911e+00 + -6.8708392094629183e+00 -1.8940296348570544e+00 2.6946609292661652e+00 + -7.2100532200804821e+00 -2.4049085307696045e+00 2.9115079701928996e+00 + -7.4863662225162013e+00 -2.9455359490617243e+00 3.1567857962653942e+00 + -7.7119900449510226e+00 -3.5133670820073646e+00 3.4375988169099889e+00 + -7.8967237217194359e+00 -4.1093941887673138e+00 3.7564053009340879e+00 + -8.0366822104918114e+00 -4.7316646554508441e+00 4.1096188967377536e+00 + -8.1187375147820084e+00 -5.3735919851232392e+00 4.4745995433897860e+00 + -8.1337268188584737e+00 -6.0275134653907338e+00 4.8154824608036400e+00 + -8.0978976419691087e+00 -6.6768306330029095e+00 5.1117107768251717e+00 + -8.1627487808858206e+00 -7.2492659944113420e+00 5.4329712900678651e+00 + id 11991 + loc 5.9055227041244507e-01 2.2269469499588013e-01 384 + blend 0.0000000000000000e+00 + interp 7.7396475544619769e-01:7.7395701579864329e-01:1.1478264487776559e+00:3.6999243561568468e-01:1.5321357398279236e+00:4.1739431162175983e-01:2.1116472726960085e+00:3.8113551130510293e-01:2.9999951908886944e+00:7.0409407109238653e-01:3.4822351603886905e+00 + CVs 20 + -1.2295453699544543e+00 1.5995527452200520e-01 5.4173930617690846e-01 + -1.9949771702425187e+00 1.3293892977719982e-01 9.1007368844386649e-01 + -2.6499519800485141e+00 4.2451956058883966e-02 1.2284932572382128e+00 + -3.3249013902953952e+00 -5.6632623755177802e-02 1.5419912692797046e+00 + -4.0156360784462271e+00 -1.5177002540061013e-01 1.8602975275556737e+00 + -4.7211687738074923e+00 -2.3700745555975211e-01 2.2051557948395262e+00 + -5.4321516692800289e+00 -3.1864954358675923e-01 2.6046564874132319e+00 + -6.1262729251811567e+00 -4.1845495399105370e-01 3.0786971302996493e+00 + -6.7857966300242234e+00 -5.8178684234695899e-01 3.6399550803915299e+00 + -7.3853991991268941e+00 -8.6558574599919313e-01 4.2871995750753271e+00 + -7.8719140669382623e+00 -1.2995350471804978e+00 4.9920417476090382e+00 + -8.1904816220794689e+00 -1.8659325432374576e+00 5.7044640990223634e+00 + -8.3199031917511945e+00 -2.5176143215862705e+00 6.3709397235050762e+00 + -8.2758823529621335e+00 -3.1993699362168173e+00 6.9502292147815510e+00 + -8.0999393899737200e+00 -3.8616456227075515e+00 7.4244672277688757e+00 + -7.8460625081812090e+00 -4.4751042807012551e+00 7.8038524573828996e+00 + -7.5603998754230499e+00 -5.0343337859982951e+00 8.1021720948702658e+00 + -7.2761497055041042e+00 -5.5357864025563321e+00 8.3242451069108760e+00 + -7.0680470692400892e+00 -5.8816762336068047e+00 8.4901784690575468e+00 + id 11992 + loc 8.0504286289215088e-01 5.8522099256515503e-01 1053 + blend 0.0000000000000000e+00 + interp 4.6904677723443666e-01:3.0832064223615413e-01:4.9602589814281672e-01:2.8305631301704659e-01:1.5174644708000273e+00:4.0110409702370370e-01:2.0777434673878794e+00:3.1852361026215026e-01:2.9027184796897343e+00:3.1686497403792618e-01:3.3514218742550117e+00:4.6904208676666431e-01:3.9075872255556634e+00 + CVs 20 + -1.0880428174994003e-01 2.9191245429296764e-01 2.4542397546966177e-01 + -2.4464452397254854e-01 5.6158109071015594e-01 4.6954957022996580e-01 + -3.9393755468241082e-01 8.3146156075956590e-01 6.8561574182410756e-01 + -5.5265889389788625e-01 1.1039400930333010e+00 8.9516120107891517e-01 + -7.2853993921539795e-01 1.3681752324825180e+00 1.0929717026169921e+00 + -9.2223294731959460e-01 1.6063006780457054e+00 1.2741323894482535e+00 + -1.1298265936326526e+00 1.7959254007878960e+00 1.4364295590495133e+00 + -1.3547530182218033e+00 1.9142267457391200e+00 1.5763750274250339e+00 + -1.6064579834492532e+00 1.9350934380014337e+00 1.6804577065687099e+00 + -1.8707756781825962e+00 1.8336442646440538e+00 1.7259515574618223e+00 + -2.1027228118165677e+00 1.5980287075975743e+00 1.6920327254902698e+00 + -2.2430303640006661e+00 1.2433593073560167e+00 1.5705370758435835e+00 + -2.2480775518594731e+00 8.1973929845161142e-01 1.3653420838030572e+00 + -2.1378891432303950e+00 3.8814724672567436e-01 1.0607667402916205e+00 + -1.9856299827072568e+00 2.5128114997614082e-02 6.2386300516707915e-01 + -1.8613639300425999e+00 -1.5778951055518892e-01 6.6511067464331330e-02 + -1.8003414579655144e+00 -9.0024316303358942e-02 -5.0994424648405068e-01 + -1.7847274245147928e+00 1.0954084138438913e-01 -9.9679846198374755e-01 + -1.7444732128389404e+00 1.7700134560478853e-01 -1.3997133508292561e+00 + id 11993 + loc 9.8286741971969604e-01 2.7714034914970398e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1518967402542974e-01:3.0691376743669196e-01:6.9799668634060030e-01:2.6150174905551848e-01:1.0998673694976080e+00:2.8599874979532353e-01:2.1894613694465224e+00:3.1518652212868953e-01:2.9658188959758238e+00:3.0347098667483313e-01:3.9948519484227996e+00 + CVs 20 + -1.8437716452352293e-01 1.7707265009486278e-01 2.0854144725622703e-01 + -3.5794891847927007e-01 3.4575555292117499e-01 4.0143117399360678e-01 + -5.2404378515502159e-01 5.0641689900780384e-01 5.8542044936358251e-01 + -6.8573803012406598e-01 6.5919031406841544e-01 7.6507153319278443e-01 + -8.4594394131212935e-01 8.0464111275078931e-01 9.4131314897041651e-01 + -1.0068269921133599e+00 9.4488653374310050e-01 1.1153199236852589e+00 + -1.1674452295080817e+00 1.0833492978494319e+00 1.2911449356609097e+00 + -1.3242785059582782e+00 1.2225846053756373e+00 1.4747027093901541e+00 + -1.4743044303643822e+00 1.3608363514987836e+00 1.6732378009662965e+00 + -1.6117484274994152e+00 1.4918965418162213e+00 1.8934296431341093e+00 + -1.7294912182611348e+00 1.6055114142613851e+00 2.1369358705971093e+00 + -1.8217977785580191e+00 1.6859170371479768e+00 2.4004580916685034e+00 + -1.8897196303734880e+00 1.7200118346187034e+00 2.6739565692937415e+00 + -1.9450634195105083e+00 1.7088448979427475e+00 2.9430131292854842e+00 + -2.0025759203015761e+00 1.6645112236672983e+00 3.1961945037971917e+00 + -2.0760609005111412e+00 1.6052171927519576e+00 3.4303153290907584e+00 + -2.1786673622081651e+00 1.5396952786259508e+00 3.6498918312194193e+00 + -2.3178626108211970e+00 1.4422559925737801e+00 3.8490197322140047e+00 + -2.5415235526485933e+00 1.1108530572215556e+00 3.9303763019930100e+00 + id 11994 + loc 5.1681381464004517e-01 6.3608758151531219e-02 1054 + blend 0.0000000000000000e+00 + interp 5.3045843275723048e-01:3.1059429413742873e-01:4.4245464706170989e-01:4.1942899180852905e-01:9.9984691025137440e-01:3.3393452598957851e-01:1.9435196912942621e+00:5.3045312817290291e-01:2.0965782361414380e+00:3.8011734625226917e-01:3.0006708077093824e+00:4.8001385960274068e-01:3.8033881919839021e+00 + CVs 20 + -9.8094731109479708e-02 4.7233232306185324e-01 1.4088849775036855e-01 + -2.2857583340053689e-01 9.4241798555763601e-01 2.2873402485090444e-01 + -3.6524364700913292e-01 1.4144292504527520e+00 2.6534234905901000e-01 + -5.4800355494436537e-01 1.8813496105560410e+00 2.8286029940778801e-01 + -8.3651932462416045e-01 2.2959731247248731e+00 3.2837491226967708e-01 + -1.2413686107548749e+00 2.5755088831632538e+00 4.3371418193903821e-01 + -1.7050576406053977e+00 2.6377638356077258e+00 5.9145775358228991e-01 + -2.1232181338515712e+00 2.4691208728831748e+00 7.4442797082156242e-01 + -2.4327827703861411e+00 2.1585036166895391e+00 8.3420268338504633e-01 + -2.6566751672746745e+00 1.8199936176642746e+00 8.4892666011916607e-01 + -2.8548169099112299e+00 1.5295907671664657e+00 8.0770889062829954e-01 + -3.0651013426072939e+00 1.3383438701934323e+00 7.6853081973735438e-01 + -3.2475588822100021e+00 1.3027538079094261e+00 8.3749001991521599e-01 + -3.2479518869388997e+00 1.3681829643515935e+00 1.0046515808575642e+00 + -3.2089722436378390e+00 1.3727331545939818e+00 1.1355122962531534e+00 + -3.2351197176307296e+00 1.3652750283009034e+00 1.3012364913637444e+00 + -3.3135095072270935e+00 1.3974551195559008e+00 1.5770679204185964e+00 + -3.5127221429550488e+00 1.4212639133276825e+00 2.0268728195271430e+00 + -3.5984908085780121e+00 1.3309067099667820e+00 2.2670404854796331e+00 + id 11995 + loc 9.3915581703186035e-01 8.5185475647449493e-02 1076 + blend 0.0000000000000000e+00 + interp 4.2627694892686929e-01:2.7698221537598816e-01:2.1490614337316138e-05:2.8343711755373879e-01:8.1238511667453994e-01:2.9642291442193375e-01:1.4341963213397060e+00:4.2627268615738007e-01:1.9657829716275570e+00:2.6158962826371140e-01:2.8681809309849378e+00:3.4489188716170827e-01:3.1671899463918725e+00 + CVs 20 + -6.0600612802332615e-02 4.6618692278449947e-01 1.1526631084120795e-01 + -1.2658053235201777e-01 9.2404738630471150e-01 2.5713431594598718e-01 + -1.7243704747052591e-01 1.3722933169376659e+00 4.0017372307970323e-01 + -1.8340815590774628e-01 1.8125702397113095e+00 5.2471606033348550e-01 + -1.6260007697269357e-01 2.2587323029196171e+00 6.4367100938333432e-01 + -1.3933145530166480e-01 2.7068278676762505e+00 8.2928847084014778e-01 + -1.7227922323096478e-01 3.0647422870997563e+00 1.1611170267396540e+00 + -3.1545913683865856e-01 3.1982047429389895e+00 1.5895280496359867e+00 + -5.7234821621170084e-01 3.0690025311140054e+00 1.9404233730196609e+00 + -8.8109459407585256e-01 2.7930363098423152e+00 2.0762062453773034e+00 + -1.1860163352345405e+00 2.5021494899126089e+00 2.0267405528474773e+00 + -1.4659913640458302e+00 2.2166458507009046e+00 1.8733416181808273e+00 + -1.7029333199643575e+00 1.9049496585088426e+00 1.6625916139825423e+00 + -1.8313534483321989e+00 1.5375011836605910e+00 1.4033730364314738e+00 + -1.7555990326547921e+00 1.1444708072613956e+00 1.1074346370891732e+00 + -1.4273346078215381e+00 8.7002890354985851e-01 7.8659489530972271e-01 + -8.4252934838071281e-01 9.8166688959475445e-01 5.2109790097355213e-01 + -2.9995686535622279e-01 1.4133316849781585e+00 4.8941558712395516e-01 + 4.7186375311196571e-02 1.3025414525696093e+00 1.9857888396168472e-01 + id 11996 + loc 3.2390230894088745e-01 7.9214864969253540e-01 1050 + blend 0.0000000000000000e+00 + interp 4.2952567448327023e-01:3.4551642565930896e-01:4.0977964371054387e-01:3.6979836095379670e-01:1.4540786236265619e+00:3.0512824610351080e-01:2.1006260666569578e+00:4.2952137922652539e-01:2.7828336367083981e+00 + CVs 20 + -4.9370984697856196e-02 4.6990666709033196e-01 -8.7806467667079546e-01 + 3.1613203445820637e-02 9.3697919121660234e-01 -1.5679527667772584e+00 + 2.2870282324307667e-01 1.4066290151521978e+00 -2.0702111834242021e+00 + 5.1022762006000233e-01 1.8527416423276513e+00 -2.3998736825050506e+00 + 8.5137147293662851e-01 2.2455208862133405e+00 -2.5874666967947992e+00 + 1.2365829309333831e+00 2.5754633688971595e+00 -2.6849495387036426e+00 + 1.6718091981001102e+00 2.8541978078286143e+00 -2.7415383507577027e+00 + 2.1929290471427834e+00 3.0690491237810429e+00 -2.7894010480203453e+00 + 2.8375551377868238e+00 3.1404871665438074e+00 -2.8666180799225183e+00 + 3.6139979875666572e+00 2.9449562188297795e+00 -2.9656418755126115e+00 + 4.4190881978936751e+00 2.3514386545328123e+00 -2.9533606752440820e+00 + 4.9994440300276297e+00 1.3626524780652098e+00 -2.6582377621930720e+00 + 5.1222578022774821e+00 1.9752298538596580e-01 -1.9958973063977743e+00 + 4.6927916283079805e+00 -7.8369903325062273e-01 -1.0253860760740521e+00 + 3.7855393412191738e+00 -1.2843999244733977e+00 7.5794353327712338e-02 + 2.5792224876382019e+00 -1.1668252262326293e+00 1.0736128381542680e+00 + 1.1343907801302768e+00 -3.2541180792641144e-01 1.6915666280980508e+00 + -8.8444787734696106e-02 1.2701309483144616e+00 1.1351057417526855e+00 + -4.6698224551859469e-01 1.9646113198346937e+00 6.4653542154016108e-01 + id 11997 + loc 7.1257334947586060e-01 7.5524586439132690e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5885623681654536e-01:3.1717516707647719e-01:3.5366281003920363e-02:4.5885164825417724e-01:6.3786920414741233e-01:3.5317510023226717e-01:1.0533152538956672e+00:3.8654322219858989e-01:1.9952232012261231e+00:2.4281600550114377e-01:2.3084581449393435e+00:3.6220305916882500e-01:2.9234320690729394e+00:2.8954887345034408e-01:3.3674807316958617e+00 + CVs 20 + 7.0780081186958846e-02 8.9913570948922528e-01 -3.0565143961324726e-01 + 2.3296939441167466e-01 1.8015730326043968e+00 -5.0867055290856578e-01 + 4.8726131918023774e-01 2.6330806139922616e+00 -6.2504949458180370e-01 + 8.1235090984026326e-01 3.3693762309747819e+00 -5.7278800637844385e-01 + 1.2309605139902340e+00 3.9789905191357260e+00 -3.2518557383816971e-01 + 1.7219348158805612e+00 4.3967357640816935e+00 1.4261123231850958e-01 + 2.2268096710757170e+00 4.5070935513747461e+00 8.3891288800860475e-01 + 2.6711178135418772e+00 4.2251976324086655e+00 1.6721659023782582e+00 + 2.9949332222261660e+00 3.5657550402691047e+00 2.5048482891293489e+00 + 3.0725917920745491e+00 2.6000295387460355e+00 3.2284582354919245e+00 + 2.7621871655203210e+00 1.4975944514776058e+00 3.7316022548995642e+00 + 2.1152474910819365e+00 4.8592699811910522e-01 3.9244579388654888e+00 + 1.3263672614928652e+00 -3.5538644794292229e-01 3.8601677066873528e+00 + 5.6212609628813959e-01 -1.1102915143904071e+00 3.7491602910484731e+00 + 9.9889363516089680e-02 -1.9249500580397036e+00 3.9305067106399481e+00 + 3.6830978585989615e-01 -2.5989442836247116e+00 4.5748702141467543e+00 + 1.0790256626574120e+00 -2.6491103771740248e+00 5.3475887009036178e+00 + 1.6372738555572797e+00 -2.2811164757105340e+00 6.0544502100650854e+00 + 1.9712894562063215e+00 -2.0110179991642676e+00 6.5255320216750734e+00 + id 11998 + loc 2.0293089747428894e-01 6.4360088109970093e-01 1084 + blend 0.0000000000000000e+00 + interp 4.8134093068649891e-01:4.6378167649311236e-01:7.9283286253444829e-02:3.7530141829958702e-01:7.6215898556592143e-01:4.3776501938238149e-01:1.1885360368163813e+00:4.8133611727719205e-01:1.8932596786100961e+00:3.6401954075885556e-01:2.4507945305497221e+00:4.0747416393335983e-01:3.1155875526573134e+00:2.8025135431121906e-01:3.7182286085389933e+00 + CVs 20 + -2.5476572498230565e-01 2.6755241651696393e-01 3.8949429305919858e-01 + -4.8160963326288614e-01 4.7427509525824224e-01 6.7124812810364787e-01 + -6.8623961626499119e-01 6.7005956746465312e-01 9.1772805857916251e-01 + -8.6224507049285404e-01 8.7694127933968602e-01 1.1650739856358840e+00 + -1.0166062276033652e+00 1.0937799175657634e+00 1.4093364304918983e+00 + -1.1626992288986031e+00 1.3189010883514491e+00 1.6468753231380475e+00 + -1.3155218623628637e+00 1.5495208225094064e+00 1.8788608635458253e+00 + -1.4926500765832413e+00 1.7873543038037556e+00 2.1151707880766999e+00 + -1.7328291832127671e+00 2.0460548141525932e+00 2.3435543528906519e+00 + -2.0572996062509108e+00 2.3106316286105075e+00 2.4569705201449774e+00 + -2.3798345220044475e+00 2.5357077809452577e+00 2.3675782747463439e+00 + -2.6156961823809035e+00 2.7090646313445301e+00 2.0938784981897367e+00 + -2.7558540677056480e+00 2.7708161129789146e+00 1.6928438817506173e+00 + -2.8512841380268559e+00 2.6182904707313677e+00 1.3070192635720279e+00 + -2.9433320446763998e+00 2.2741917043116162e+00 1.0474349629645234e+00 + -3.0120263604363053e+00 1.8364136113815377e+00 8.7478534446930789e-01 + -3.0196555263073579e+00 1.3909008092674777e+00 7.1668110269727203e-01 + -2.9630796539468021e+00 1.0100590236189035e+00 5.1655615025497648e-01 + -2.8559859546100057e+00 8.8351651792828045e-01 1.4039229462175651e-01 + id 11999 + loc 5.9540811926126480e-02 6.9722980260848999e-01 1085 + blend 0.0000000000000000e+00 + interp 5.3513060956357084e-01:5.3512525825747526e-01:7.2114363707760987e-01:2.8798439001019677e-01:1.0748110510941671e+00:4.3142630652398345e-01:1.9826731494181715e+00:2.9740100841537404e-01:2.4533535303473877e+00:4.1614739553544999e-01:3.2168089300243619e+00:3.4988483243847951e-01:3.9491748800733872e+00 + CVs 20 + -1.4247110867720139e-01 4.0573837954734421e-01 4.3391030308534290e-01 + -2.8538227326773047e-01 7.2083825951144176e-01 7.4187271931488841e-01 + -4.3304185437641696e-01 1.0022983760565409e+00 1.0086386501447147e+00 + -5.9122576087084799e-01 1.2814773851313530e+00 1.2727986749687741e+00 + -7.7515151231463708e-01 1.5619400020996788e+00 1.5235781868332343e+00 + -1.0038056824431609e+00 1.8441993829836987e+00 1.7464601885544948e+00 + -1.2989149539150955e+00 2.1216105711147266e+00 1.9195055634313547e+00 + -1.6768982332504341e+00 2.3735390159727983e+00 2.0096638828684812e+00 + -2.1281132978614097e+00 2.5607409777965930e+00 1.9807300608599645e+00 + -2.5959370235056656e+00 2.6407342985562656e+00 1.8293148893908109e+00 + -3.0207914031196963e+00 2.6074414086299083e+00 1.6052241762369437e+00 + -3.3939204526983953e+00 2.4796290551839419e+00 1.3580501598870156e+00 + -3.7269773795561063e+00 2.2698940328352419e+00 1.1153802815207265e+00 + -4.0254117039770145e+00 1.9911295694487297e+00 9.0175407681731734e-01 + -4.2934540649309900e+00 1.6599430829307409e+00 7.4396258903091839e-01 + -4.5329145383299618e+00 1.3111255409601341e+00 6.6415572830216574e-01 + -4.7434248652401774e+00 1.0122199485470984e+00 6.4823913044943282e-01 + -4.9335558199752558e+00 7.9662888031535928e-01 6.5763623732461685e-01 + -5.2136031406920367e+00 3.8344669953423244e-01 7.5981147769335378e-01 + id 12000 + loc 3.1024920940399170e-01 3.3924424648284912e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2662954241216272e-01:4.2662527611673862e-01:5.2201012509782285e-01:3.0569312177837638e-01:9.9476170927573915e-01:2.6079974481317508e-01:1.7409213960352081e+00:3.3103007826145736e-01:2.7670001838883280e+00:3.0672743824216725e-01:3.1447807008901405e+00:4.1570432918684291e-01:3.9971194985591518e+00 + CVs 20 + -2.2828949730300185e-01 1.7358804432390657e-01 -1.6613242744097373e-01 + -4.5828632020777293e-01 3.5690429901133347e-01 -3.2299120023952466e-01 + -6.9280258613747836e-01 5.3998331122911114e-01 -5.0830837473921830e-01 + -9.2855180832912987e-01 7.0944821538800107e-01 -7.3618375228097377e-01 + -1.1696375313374909e+00 8.6958081047339586e-01 -9.9642731018311681e-01 + -1.4240215208361706e+00 1.0216304632076731e+00 -1.2722174864303550e+00 + -1.7017560346302212e+00 1.1570540121079080e+00 -1.5428801213640781e+00 + -2.0065258788219373e+00 1.2546223271405745e+00 -1.7894151692275588e+00 + -2.3274939989628374e+00 1.2825524522740579e+00 -2.0013286446064225e+00 + -2.6433325963906160e+00 1.2140863589364350e+00 -2.1764970891578637e+00 + -2.9331678577552243e+00 1.0419051151934466e+00 -2.3201111591342940e+00 + -3.1882199373976774e+00 7.7758743904395011e-01 -2.4515417962858015e+00 + -3.4106863555275035e+00 4.4439813577174986e-01 -2.6038336036045107e+00 + -3.5969859175061218e+00 7.6647034754926124e-02 -2.8104229830227445e+00 + -3.7283615618338710e+00 -2.7395808878789574e-01 -3.1005760816005248e+00 + -3.7427559965303496e+00 -5.1580481798063726e-01 -3.4969097845456174e+00 + -3.5193121558465372e+00 -4.9648623331972624e-01 -3.9405148831296199e+00 + -3.0827673047377941e+00 -2.1013921317047810e-01 -4.2083912904596277e+00 + -2.9883457383332050e+00 -3.2918065381101347e-01 -4.5969197744472838e+00 + id 12001 + loc 1.2087194621562958e-01 7.5009590387344360e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4267928579481947e-01:4.2194292967184627e-01:9.2122034541106168e-01:4.2621089081488850e-01:1.2466546030657155e+00:3.5669680453211555e-01:1.9537755178295400e+00:2.9472493904453534e-01:2.5863278755151162e+00:3.3969141171471579e-01:3.0214448853457587e+00:4.4267485900196152e-01:3.5853339767030046e+00:3.4192896258983752e-01:3.9996856407056338e+00 + CVs 20 + 2.2112878617702689e-01 3.2423637394407789e-01 -2.8538086694848336e-02 + 4.6052423884692900e-01 6.2345598893582355e-01 -7.5815871956839170e-02 + 7.0768538231569200e-01 9.0471343979486973e-01 -1.2793724317048738e-01 + 9.5625711002997593e-01 1.1655916261039381e+00 -1.8720172096269405e-01 + 1.2040708535459501e+00 1.3989867279591364e+00 -2.6481796738436536e-01 + 1.4474797307373051e+00 1.5963021830055590e+00 -3.6924753691858464e-01 + 1.6807505429001264e+00 1.7488864457875808e+00 -5.0551618827896372e-01 + 1.8951245401606673e+00 1.8492600557883634e+00 -6.7396966746331644e-01 + 2.0791310183986278e+00 1.8910060390335270e+00 -8.6656228781451605e-01 + 2.2237358006967360e+00 1.8725716262480923e+00 -1.0653886752266362e+00 + 2.3275403718015681e+00 1.8009176479946629e+00 -1.2519773059970525e+00 + 2.3942868648483939e+00 1.6865227088202310e+00 -1.4196215112616668e+00 + 2.4260289684494114e+00 1.5345918642548400e+00 -1.5768408173809860e+00 + 2.4152146230855411e+00 1.3420975318263997e+00 -1.7421205098279220e+00 + 2.3368172459344456e+00 1.1153405547245101e+00 -1.9238500293822069e+00 + 2.1622634951770432e+00 8.9662265563348575e-01 -2.1002124856004643e+00 + 1.8931623448163548e+00 7.4808743910873354e-01 -2.2302408049428215e+00 + 1.5726728586599585e+00 7.0560915294854498e-01 -2.2896177001055364e+00 + 1.2073610832744366e+00 6.7527223012924620e-01 -2.3522150576425331e+00 + id 12002 + loc 7.7048689126968384e-01 1.3548448681831360e-01 1090 + blend 0.0000000000000000e+00 + interp 4.3794935086956777e-01:4.0877502775157282e-01:7.2136439956918763e-02:2.9116832686196248e-01:9.7054306973603699e-01:2.9799799167121521e-01:2.0002113674894879e+00:4.3794497137605909e-01:2.2434619947957182e+00:3.9556726908075396e-01:2.9999520179807959e+00:3.2476541253429914e-01:3.7925369770681403e+00 + CVs 20 + -3.1370430320575515e-02 4.3561739838680202e-01 -1.4942693998302714e-01 + -3.5344531031028525e-03 8.3366827429918811e-01 -2.4474975663797272e-01 + 6.1310426543614793e-02 1.2178577140736011e+00 -3.1026463866046916e-01 + 1.6182222980882199e-01 1.5908206166730343e+00 -3.4709279325625131e-01 + 3.0870354734763494e-01 1.9325292329897572e+00 -3.3913698304258560e-01 + 5.0362717633742471e-01 2.2156163013862740e+00 -2.7208477496046823e-01 + 7.3334051721175053e-01 2.4085411876172422e+00 -1.3901599644382867e-01 + 9.6851263880409189e-01 2.4892404603103997e+00 5.1017819605374437e-02 + 1.1806896058669385e+00 2.4588270823692042e+00 2.7178955351491330e-01 + 1.3644875336162627e+00 2.3379755457884839e+00 4.9164458714784942e-01 + 1.5309912322385257e+00 2.1468606826286938e+00 6.8633920510799284e-01 + 1.6863271272040752e+00 1.8978889627561255e+00 8.3504478337986443e-01 + 1.8304356213826003e+00 1.6051904331062110e+00 9.1419013187450782e-01 + 1.9628518266444281e+00 1.2925167867308964e+00 8.9757622302393192e-01 + 2.0778499097528016e+00 1.0028734613113484e+00 7.6466035834990842e-01 + 2.1738909279985386e+00 7.9366312914170167e-01 5.3836639395409858e-01 + 2.2666928416152179e+00 6.9534117685826824e-01 2.7256115805537851e-01 + 2.3558094084268371e+00 7.0142941674984471e-01 1.4929905087527506e-02 + 2.4396154797316374e+00 6.6288546771490253e-01 -2.4422768839682008e-01 + id 12003 + loc 6.2465894967317581e-02 6.9722980260848999e-01 1084 + blend 0.0000000000000000e+00 + interp 7.2720990949549313e-01:7.2720263739639823e-01:2.1133665213725572e-01:4.3042898292833981e-01:1.5747956860179293e+00:4.8170563705323188e-01:1.9951063300456968e+00:3.5543654895932902e-01:2.4565972465080881e+00:4.3776501938238149e-01:3.1981506008592406e+00:3.7891085722137396e-01:3.9731515290666568e+00 + CVs 20 + -2.6000368047364014e-01 3.1677602789330628e-01 4.8673671192433837e-01 + -4.9720528742122777e-01 5.5682644343474896e-01 8.6986365071394767e-01 + -7.1282722768964035e-01 7.7589795761016001e-01 1.2490724797407404e+00 + -9.1574711629538874e-01 9.9508546436495959e-01 1.6584279077788389e+00 + -1.1360031844882676e+00 1.2156521275581438e+00 2.0808954754807991e+00 + -1.4101016796123311e+00 1.4394705778270316e+00 2.4904812807393126e+00 + -1.7773402459919321e+00 1.6659539357519886e+00 2.8471532254964185e+00 + -2.2789068676639679e+00 1.8873012038433259e+00 3.0753910780596532e+00 + -2.8938017445758843e+00 2.0459166765218368e+00 3.0387511013352868e+00 + -3.4310656017946672e+00 2.0351035436728551e+00 2.7253728658548271e+00 + -3.7685171149971550e+00 1.8544345587171329e+00 2.3705453813117270e+00 + -3.9718635188619955e+00 1.5986789781416724e+00 2.1764568533118376e+00 + -4.1345794216321314e+00 1.2937615536726854e+00 2.1012080188712510e+00 + -4.2531785715070525e+00 7.7776314553477466e-01 1.9825105151456874e+00 + -4.2343590321894000e+00 -8.6123180082737782e-03 1.7120562784575299e+00 + -3.9954885718013067e+00 -8.8166698849110614e-01 1.1656595767043851e+00 + -3.5706983694087420e+00 -1.5376713408606208e+00 2.6838850355028587e-01 + -3.1538833909908948e+00 -1.7800318785410925e+00 -7.3941394120327653e-01 + -2.9639217428407596e+00 -1.9995507463399456e+00 -1.1820272583241072e+00 + id 12004 + loc 4.4584321975708008e-01 8.5959506034851074e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6587161203696642e-01:4.0571532974374036e-01:1.2467492074302344e-01:4.6586695332084604e-01:8.2414623902503337e-01:3.2529458970998992e-01:1.1107978157609453e+00:4.4319956003377081e-01:2.0441151896049639e+00:3.8681111427445769e-01:2.2192681709609685e+00:3.7627207381205924e-01:2.9580574936332829e+00:4.4439651780184980e-01:3.2965461388501938e+00:4.0527099296764307e-01:3.8848747545931208e+00 + CVs 20 + 1.2832680695900472e-01 3.2318837337025746e-01 -2.0437693221481079e-01 + 2.4911784997503367e-01 6.2951643879646191e-01 -4.3543521849321687e-01 + 3.6702153917347324e-01 9.0539092800075138e-01 -6.7862874694051478e-01 + 4.8044162433594861e-01 1.1385495010077218e+00 -9.2443673507575608e-01 + 5.8123405722495636e-01 1.3209437071458345e+00 -1.1632869219124635e+00 + 6.5705096916833095e-01 1.4505374801069881e+00 -1.3773154343543357e+00 + 6.9758273178482411e-01 1.5403498089809013e+00 -1.5547900494364297e+00 + 7.0382393502890206e-01 1.6153665652018858e+00 -1.7062946634478582e+00 + 6.9434502171202750e-01 1.6917330753430107e+00 -1.8586080869085992e+00 + 7.0078237227202966e-01 1.7626219707881166e+00 -2.0322343346705503e+00 + 7.5228444992098031e-01 1.8049506043156005e+00 -2.2292211996319762e+00 + 8.6626730113243766e-01 1.7926596911266874e+00 -2.4386109109978338e+00 + 1.0472421965668088e+00 1.7293615780808693e+00 -2.6385140295245231e+00 + 1.2951786795581062e+00 1.6703409037749946e+00 -2.7980987553084740e+00 + 1.6200448604487798e+00 1.6538346909378721e+00 -2.8978785351166598e+00 + 2.0302611515156337e+00 1.6208672579957759e+00 -2.9583404913876827e+00 + 2.4873298899470750e+00 1.4810562319827361e+00 -3.0424002058200745e+00 + 2.8685983486560129e+00 1.2655596901124793e+00 -3.2569359315039437e+00 + 2.8681860024585504e+00 1.2333650206145343e+00 -3.7251237566282351e+00 + id 12005 + loc 3.7217912077903748e-01 8.2576388120651245e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4974596519641674e-01:3.6912174276885534e-01:2.8332713262085241e-01:4.0647966023885257e-01:8.7860267182310525e-01:3.8916348582708732e-01:1.1122152680939219e+00:4.4974146773676482e-01:1.6750151411165530e+00:3.5508256795941173e-01:2.0049047335463825e+00:3.5795373458468149e-01:3.0002031576002093e+00:3.4568784882454950e-01:3.7125649006387098e+00 + CVs 20 + 1.3376893983343918e-01 2.7724527830371876e-01 2.3878366428348535e-02 + 2.7313926726192533e-01 5.5644299479086423e-01 5.2631176116636536e-02 + 4.2067019033942649e-01 8.4333336472780429e-01 8.1787008822382046e-02 + 5.8432856211528239e-01 1.1465991980022248e+00 1.0151552385417059e-01 + 7.7532034665173100e-01 1.4698720582102558e+00 9.4340713528887510e-02 + 1.0034828068197197e+00 1.8078908526687902e+00 3.8160160460906201e-02 + 1.2731648813724334e+00 2.1415798567188573e+00 -8.8522774799891790e-02 + 1.5780123433873772e+00 2.4416208022045609e+00 -2.9970679215749796e-01 + 1.9001503002454305e+00 2.6786666674703450e+00 -5.9821531002869965e-01 + 2.2149635095437241e+00 2.8280530297031166e+00 -9.7297282486079062e-01 + 2.5043128948815636e+00 2.8740582389828848e+00 -1.4016193038178248e+00 + 2.7617043458247759e+00 2.8077395963854532e+00 -1.8606384452043403e+00 + 2.9801218873844415e+00 2.6211947564352327e+00 -2.3224588255265881e+00 + 3.1437749766539502e+00 2.3155295687218400e+00 -2.7490791804212633e+00 + 3.2282405787932849e+00 1.9119957753255297e+00 -3.1195748061175506e+00 + 3.1929744758518335e+00 1.4545044007833290e+00 -3.4397951863978053e+00 + 3.0030647556278587e+00 1.0008712197761209e+00 -3.7109872239004082e+00 + 2.6588293346210485e+00 6.1288258146303154e-01 -3.9120725341562492e+00 + 2.2758306953629761e+00 3.4765066782543397e-01 -3.9826505280794362e+00 + id 12006 + loc 7.2539836168289185e-02 6.1785203218460083e-01 1068 + blend 0.0000000000000000e+00 + interp 5.2572903476958222e-01:3.8201345728405189e-01:8.8843479938929937e-02:4.4370040531734256e-01:4.8822431979892345e-01:5.2572377747923449e-01:1.0003139732394288e+00:3.9421831207020902e-01:1.5579077461093205e+00:4.7672956040731557e-01:2.0013363974006770e+00:3.3147421220779077e-01:2.6440205987362368e+00:4.0398283330802109e-01:3.0105750680587993e+00:3.6169241477647879e-01:3.6057277507299506e+00 + CVs 20 + 1.0610795480644018e-01 2.9744302062243005e-01 -1.7365030832023420e-01 + 1.7897390147331030e-01 5.8140393216914810e-01 -3.4483828347893575e-01 + 2.4884253799458886e-01 8.5825742579424902e-01 -5.2818423835128570e-01 + 3.3089859442624103e-01 1.1232459167640445e+00 -7.2462681401780538e-01 + 4.2872957354429647e-01 1.3740642203813445e+00 -9.2995509110136787e-01 + 5.4546035801377801e-01 1.6093362314362742e+00 -1.1411810050922269e+00 + 6.8443940913566792e-01 1.8306575096476814e+00 -1.3603662428554113e+00 + 8.4813370933690169e-01 2.0399639076964271e+00 -1.5963174160383145e+00 + 1.0331073469946634e+00 2.2324238925170716e+00 -1.8659198856942971e+00 + 1.2259506269974114e+00 2.3932832492565739e+00 -2.1881279100410271e+00 + 1.4069823540808792e+00 2.4989513949657649e+00 -2.5695432024573677e+00 + 1.5540278838602066e+00 2.5178930362866954e+00 -2.9984147803910473e+00 + 1.6512797477068835e+00 2.4240807523626025e+00 -3.4464328322034739e+00 + 1.6995061631269284e+00 2.2113518552831919e+00 -3.8777015477490808e+00 + 1.7136757094281956e+00 1.8931378796651266e+00 -4.2589703947394364e+00 + 1.7145155447550078e+00 1.4997975811210704e+00 -4.5607080626616874e+00 + 1.7132942207257233e+00 1.0704304933428852e+00 -4.7542494026369297e+00 + 1.7084818831020239e+00 6.2466441948641704e-01 -4.8172005928181987e+00 + 1.7204515771710618e+00 7.4453323002381500e-02 -4.7220956578626003e+00 + id 12007 + loc 5.7499271631240845e-01 1.9454570114612579e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2422779536437288e-01:3.6429800566886317e-01:4.5129755634205415e-01:2.7353758316342086e-01:1.0247423312043373e+00:3.3206372377018789e-01:1.9625500666009901e+00:4.2422355308641924e-01:2.5659842068444094e+00:3.2569418100099334e-01:3.1239974050207815e+00:3.5061657050788364e-01:3.9597031408947450e+00 + CVs 20 + -2.0463398039847391e-01 3.7906870473972670e-01 1.3552023407614169e-01 + -3.9196314021137385e-01 7.5583858957439887e-01 3.0127568734381338e-01 + -5.6406007622193988e-01 1.1157568559042346e+00 4.9971274061736537e-01 + -7.1503814678496391e-01 1.4449044584504809e+00 7.3132034762530262e-01 + -8.4285187855986687e-01 1.7358319388726899e+00 9.9549346296024599e-01 + -9.5950364803795096e-01 1.9865304906969614e+00 1.2898419250307278e+00 + -1.0844576916287259e+00 2.1929531986568263e+00 1.6058526581166273e+00 + -1.2327234613087112e+00 2.3496438105760813e+00 1.9287944753420494e+00 + -1.4112103858259846e+00 2.4553297382119017e+00 2.2453184825291319e+00 + -1.6234691137536326e+00 2.5108492275567782e+00 2.5411301998345817e+00 + -1.8715096380138063e+00 2.5205888761159434e+00 2.7941627536172913e+00 + -2.1610361760845267e+00 2.5041065055597898e+00 2.9870795480927796e+00 + -2.4951103841878730e+00 2.4596309183572922e+00 3.1330318872876166e+00 + -2.8082109633605690e+00 2.3147226780070849e+00 3.2446308251209204e+00 + -3.0238076694184546e+00 2.0507532537631650e+00 3.2920927584494892e+00 + -3.2171119775391848e+00 1.7109690545634761e+00 3.2628403554439878e+00 + -3.5080137268928993e+00 1.2226578573527980e+00 3.1766487216702077e+00 + -3.5430308130733401e+00 6.5148251759339637e-01 3.0245642577911580e+00 + -3.1475527967184291e+00 7.1711207904151930e-01 2.8349904926543248e+00 + id 12008 + loc 1.6919715562835336e-03 1.1402048170566559e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3080591202695817e-01:3.1019743703253766e-01:9.8786469977614377e-01:3.2188881319579521e-01:1.5032426699360317e+00:4.1054215062404126e-01:1.9970951113522133e+00:2.7984740012545700e-01:2.5685171200512671e+00:4.3080160396783790e-01:3.1903233700728104e+00:3.1464358249597524e-01:3.9042146471327714e+00 + CVs 20 + -2.0985076441649189e-01 2.7345168653627139e-01 -1.9652628776970174e-01 + -4.0660418561787431e-01 5.3398655951087037e-01 -4.1499601444896306e-01 + -6.0640319668071641e-01 7.9086266681803963e-01 -6.4044416850798092e-01 + -8.2210693941968993e-01 1.0466117229346645e+00 -8.6179690890946503e-01 + -1.0646474024481556e+00 1.2986928231522730e+00 -1.0698777445053897e+00 + -1.3430203546109536e+00 1.5394498799898917e+00 -1.2539721701295332e+00 + -1.6608680618840066e+00 1.7558501779647901e+00 -1.4032549115187727e+00 + -2.0142126116023062e+00 1.9315189880607788e+00 -1.5095804101450874e+00 + -2.3919483946247659e+00 2.0504231532514621e+00 -1.5687413510266810e+00 + -2.7756370338723317e+00 2.1008279053431629e+00 -1.5802200046882962e+00 + -3.1413701551662707e+00 2.0787546337133800e+00 -1.5477381613208205e+00 + -3.4694994008452387e+00 1.9896257192484994e+00 -1.4789753821453173e+00 + -3.7531048659721797e+00 1.8453159979663072e+00 -1.3843663556179813e+00 + -3.9949928682110407e+00 1.6580686522598966e+00 -1.2760938421438741e+00 + -4.2009562443872479e+00 1.4372906654705004e+00 -1.1669909909491047e+00 + -4.3731647084904557e+00 1.1922576822427073e+00 -1.0697387076286293e+00 + -4.5081519673285637e+00 9.3130909939238582e-01 -9.9366101643510851e-01 + -4.6013477341339613e+00 6.4512988231895552e-01 -9.4561687518669046e-01 + -4.6430461090245698e+00 2.7207220894889683e-01 -9.4656240560771965e-01 + id 12009 + loc 1.2054771929979324e-01 5.1752430200576782e-01 403 + blend 0.0000000000000000e+00 + interp 3.9128072889818860e-01:3.7476241939418814e-01:8.0640630659144885e-01:3.9127681609089965e-01:1.2652302094308001e+00:3.8195735332586417e-01:2.0001300531319219e+00:3.8647667857316736e-01:2.6013327859687729e+00:2.8589313570902802e-01:3.0158646920149024e+00:2.6056403190379596e-01:3.9577640772075693e+00 + CVs 20 + -5.8810792347394170e-02 1.3391153679078158e-01 -6.8084204460195807e-02 + -1.1127505731189835e-01 2.6488483378068406e-01 -1.4468958907692026e-01 + -1.6810060266929952e-01 3.8494561932675242e-01 -2.2338168240738859e-01 + -2.3460597120375493e-01 4.8705515986857606e-01 -2.9985974198531995e-01 + -3.0928234202394561e-01 5.6866521931237657e-01 -3.7420146467003007e-01 + -3.8929607927743343e-01 6.2818401183933203e-01 -4.4750880677873200e-01 + -4.7189315740770077e-01 6.6521597394041998e-01 -5.2197812821385914e-01 + -5.5596625753281159e-01 6.8040584511423652e-01 -6.0069402946391615e-01 + -6.4220934535076701e-01 6.7514497324572087e-01 -6.8693793219336741e-01 + -7.3044015368640047e-01 6.5208642673233863e-01 -7.8324831500403891e-01 + -8.1946222253614598e-01 6.1521696199463560e-01 -8.9140680467501432e-01 + -9.1054335508853934e-01 5.6826573928178159e-01 -1.0122639857213602e+00 + -1.0085335408004645e+00 5.1371354774986921e-01 -1.1452609530923790e+00 + -1.1206701973944437e+00 4.5280264853817309e-01 -1.2879835125494157e+00 + -1.2567571680995329e+00 3.8394390151130620e-01 -1.4349081785453868e+00 + -1.4233957795526502e+00 3.0362302913644962e-01 -1.5755445806692692e+00 + -1.6117263999022708e+00 2.1313159954504124e-01 -1.6964980561599592e+00 + -1.8008733449860208e+00 1.1773596085391624e-01 -1.7873820714844622e+00 + -1.9619516734432432e+00 -5.4637434946096408e-02 -1.7873729862838383e+00 + id 12010 + loc 6.2187612056732178e-01 6.7430382966995239e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4398922835372251e-01:3.3851810220852618e-01:4.5185084685963395e-01:3.4120377134472268e-01:1.0001287951734841e+00:4.4398478846143902e-01:1.4206773200911573e+00:4.1472158947651844e-01:2.0206822092879642e+00:3.7646119285373419e-01:2.9589007412786499e+00:3.4518969659551613e-01:3.2221570769023198e+00:3.8358815251713613e-01:3.8501580739195127e+00 + CVs 20 + 1.6248451637785843e-01 3.7118453908054549e-01 -3.1379134039899625e-01 + 3.4900516768778256e-01 7.4335940397450417e-01 -6.3914869847112266e-01 + 5.5074382245433640e-01 1.1037722857433956e+00 -9.7533657278976860e-01 + 7.5884178227282928e-01 1.4381761012965431e+00 -1.3219207677906506e+00 + 9.6633525035057533e-01 1.7239871226207406e+00 -1.6791877586778454e+00 + 1.1704711630212699e+00 1.9320387118004563e+00 -2.0451566007794804e+00 + 1.3735722181471377e+00 2.0486055814082027e+00 -2.4130186810783258e+00 + 1.5809987330822806e+00 2.0755755245204703e+00 -2.7696433488439722e+00 + 1.7928676977692979e+00 2.0183045723589550e+00 -3.0986136074621449e+00 + 2.0063658200136678e+00 1.8953710429070947e+00 -3.4004476117061020e+00 + 2.2288117773053915e+00 1.7406874148013742e+00 -3.6978754873374799e+00 + 2.4719452442921224e+00 1.5876058373851665e+00 -4.0178343521124598e+00 + 2.7217921021631448e+00 1.4476506033410887e+00 -4.3736515933997708e+00 + 2.9336925768975219e+00 1.3046484989378826e+00 -4.7742761387229109e+00 + 3.0610886831983506e+00 1.1557725769598246e+00 -5.2331899433820910e+00 + 3.0695490470266091e+00 1.0573066473087251e+00 -5.7488171351169761e+00 + 2.9584046690391519e+00 1.0819898198007960e+00 -6.2702216311841497e+00 + 2.8138733011046639e+00 1.1950308699716667e+00 -6.7405131415954802e+00 + 2.8008411575014156e+00 1.2099804489262029e+00 -7.2121045974644886e+00 + id 12011 + loc 6.8530207872390747e-01 6.5290504693984985e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9753386641021798e-01:3.1320639801929379e-01:6.9170141999789325e-02:3.5425221695705733e-01:9.4912024694053232e-01:3.6277305163881096e-01:1.3421128727461007e+00:3.9752989107155390e-01:1.9841725816475995e+00:3.5291907593111949e-01:2.7744878465747052e+00:3.3386240691117480e-01:3.5473090399734821e+00 + CVs 20 + 8.5259110763460932e-02 3.0708440657298502e-01 -1.2850215588239650e-01 + 1.9228499824205694e-01 6.2946707882367581e-01 -2.4192026624763149e-01 + 3.1180378397986308e-01 9.5510365042646261e-01 -3.6304135437978124e-01 + 4.3874506738828117e-01 1.2749826283033012e+00 -5.0379121810726102e-01 + 5.8042829069396729e-01 1.5873688498083016e+00 -6.7148532589773047e-01 + 7.4770417919580989e-01 1.8797455786682655e+00 -8.9176127573984920e-01 + 9.4232059949025671e-01 2.1162201082364818e+00 -1.1871773243598982e+00 + 1.1566386148816361e+00 2.2664437320013571e+00 -1.5504755324489530e+00 + 1.3807442148889912e+00 2.3220230484346072e+00 -1.9550583947483298e+00 + 1.6038037271131464e+00 2.2886310178656393e+00 -2.3706379221272043e+00 + 1.8173462102461388e+00 2.1794325579086760e+00 -2.7730288036585029e+00 + 2.0150535782178514e+00 2.0081792512389969e+00 -3.1463073063359870e+00 + 2.1908091349479801e+00 1.7856632037270099e+00 -3.4800024560012575e+00 + 2.3391929967133254e+00 1.5214012906474894e+00 -3.7681669521941528e+00 + 2.4550564603542679e+00 1.2214279728859325e+00 -4.0183462359443318e+00 + 2.5249390146216504e+00 8.8593338399866894e-01 -4.2521255456537972e+00 + 2.5237951152657705e+00 5.1752697092072553e-01 -4.4898874745887731e+00 + 2.4277930241621735e+00 1.3861089521911152e-01 -4.7309124610172519e+00 + 2.3007585526758794e+00 -1.0031247781623009e-01 -4.8481904138523824e+00 + id 12012 + loc 7.4218648672103882e-01 4.3607962131500244e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8783109378500280e-01:3.8254725092647707e-01:4.0208844554414769e-01:2.6420752091973848e-01:1.0954024470968007e+00:3.1018261136791170e-01:1.9375083772625872e+00:3.2786086333763875e-01:2.4370770000288307e+00:3.8782721547406496e-01:2.9993402843058696e+00:3.8601118776802429e-01:3.5906547088429273e+00 + CVs 20 + -1.4520432676149475e-01 2.6496327272468195e-01 1.1424425365437761e-01 + -3.1212493216244241e-01 5.2643194119462711e-01 2.1939667556376322e-01 + -4.9859131479650542e-01 7.7675770452185489e-01 3.2833437456967807e-01 + -7.0245502988914277e-01 1.0101471641034123e+00 4.5297435888996090e-01 + -9.2471733141714429e-01 1.2231895332961393e+00 6.0162193160438482e-01 + -1.1656147088888884e+00 1.4113366232765454e+00 7.8415250568862815e-01 + -1.4233824056620386e+00 1.5669898450958066e+00 1.0122455880213892e+00 + -1.6923769153465749e+00 1.6775849557369071e+00 1.2989106583227263e+00 + -1.9589070170877318e+00 1.7237688531913762e+00 1.6537774891732477e+00 + -2.1998571433306302e+00 1.6814485768932110e+00 2.0720378131765869e+00 + -2.3900237853737782e+00 1.5317340507635180e+00 2.5301078310900555e+00 + -2.5126177297129919e+00 1.2722781607894917e+00 2.9855413124819212e+00 + -2.5753724574353334e+00 9.3049651433598024e-01 3.3888631062746146e+00 + -2.6099059659363619e+00 5.5666778100721959e-01 3.7174452877443223e+00 + -2.6452392251524821e+00 2.0350778255801472e-01 3.9902479256993386e+00 + -2.6991627819234507e+00 -5.9087074989058408e-02 4.2410152338674107e+00 + -2.7922840392407613e+00 -1.5601443580360774e-01 4.4599378756657142e+00 + -2.9316744981453264e+00 -1.1181530684039132e-01 4.5884341110872642e+00 + -3.0271827865132566e+00 -9.6460019401762853e-02 4.8225488167991344e+00 + id 12013 + loc 8.5926872491836548e-01 9.6390587091445923e-01 403 + blend 0.0000000000000000e+00 + interp 3.8697211766714157e-01:2.7900666199591745e-01:1.0511904373962888e-01:3.6586115753511778e-01:9.9858718435584060e-01:3.0111878951611992e-01:1.9564889415177436e+00:3.0918259387338815e-01:2.8804876564050765e+00:3.8696824794596490e-01:3.3305888782417146e+00 + CVs 20 + -1.0737447443348216e-01 2.8899614448406698e-02 -3.0630830279990952e-02 + -2.1066350530297873e-01 6.7667499464528685e-02 -5.6299342531853452e-02 + -3.1934817337413263e-01 1.1019391165331383e-01 -8.2648299060807340e-02 + -4.3993975705365440e-01 1.5165742617351116e-01 -1.1304706441704483e-01 + -5.7273300521453518e-01 1.9027917133007205e-01 -1.4582239355915003e-01 + -7.1751973589424767e-01 2.2435494904996070e-01 -1.7844128580042920e-01 + -8.7345775907486067e-01 2.5233408254706380e-01 -2.0772731578959480e-01 + -1.0389280984532336e+00 2.7288657550188244e-01 -2.3044109843470409e-01 + -1.2116660064514837e+00 2.8507350363118072e-01 -2.4359622514788384e-01 + -1.3891254409022082e+00 2.8847514253246864e-01 -2.4451847950387368e-01 + -1.5688067460777773e+00 2.8301945484627467e-01 -2.3094274394691153e-01 + -1.7479352450413312e+00 2.6836545908900156e-01 -2.0153660578858706e-01 + -1.9235059167111528e+00 2.4382249576305326e-01 -1.5660893751338142e-01 + -2.0951393731668775e+00 2.0935699390948737e-01 -9.5873961611619901e-02 + -2.2683881886257407e+00 1.6574445602212595e-01 -1.1772303837959186e-02 + -2.4496249999686337e+00 1.1622892700297949e-01 1.1291778599905383e-01 + -2.6321705178868173e+00 7.3199084804034253e-02 2.9083656077791187e-01 + -2.7988622188902790e+00 5.2239033792082390e-02 5.1349669201611747e-01 + -2.8927921547715991e+00 2.0573673270491311e-02 5.8346479234400195e-01 + id 12014 + loc 1.3279782608151436e-02 3.0836619436740875e-02 1085 + blend 0.0000000000000000e+00 + interp 7.4673538791667027e-01:5.5481450673940880e-01:2.5299754248231721e-02:4.5194083241330463e-01:5.2224630997050125e-01:6.1895117518585208e-01:9.3754986396533868e-01:7.4672792056279114e-01:1.0180260855861281e+00:2.7830621799501010e-01:2.9820479252648791e+00:3.4116074526329671e-01:3.4856974736417570e+00 + CVs 20 + 5.0036292416962158e-01 3.9371556472163544e-01 3.3656827543181062e-01 + 8.3310729497532354e-01 7.1630929988205239e-01 6.7022177932853300e-01 + 1.0906590755691794e+00 9.9809956038672654e-01 1.0329974649524378e+00 + 1.2997759994027633e+00 1.2487366965599804e+00 1.4396427071460656e+00 + 1.4459946009135951e+00 1.4544054856249680e+00 1.8781124307944468e+00 + 1.5212701984979264e+00 1.6023869411859526e+00 2.3300554897331862e+00 + 1.5246039028489575e+00 1.6824532374744829e+00 2.7733330309959388e+00 + 1.4639166193067581e+00 1.6897579006875474e+00 3.1847799208678600e+00 + 1.3578281699666759e+00 1.6269047568867414e+00 3.5439698798351857e+00 + 1.2350011171335524e+00 1.5039224422019462e+00 3.8393124888238996e+00 + 1.1241898051216930e+00 1.3371992805715882e+00 4.0731207874251805e+00 + 1.0434643596335083e+00 1.1445397874906114e+00 4.2551396840757816e+00 + 1.0012737272642820e+00 9.4452025631374781e-01 4.3938122923662162e+00 + 9.9766244400727433e-01 7.5834755952546273e-01 4.4939303500735361e+00 + 1.0191442513329609e+00 5.9979190590934317e-01 4.5603630606514018e+00 + 1.0527306262755012e+00 4.4301150775596693e-01 4.6076973109159090e+00 + 1.1098961055379026e+00 2.4552406755152756e-01 4.6528116747729600e+00 + 1.2116771274829197e+00 3.6625383493499308e-03 4.7288725711189814e+00 + 1.4409170940306506e+00 -2.5140949939151447e-01 4.9676950770248833e+00 + id 12015 + loc 6.4923834800720215e-01 7.2504423558712006e-02 1048 + blend 0.0000000000000000e+00 + interp 4.9317392856433545e-01:2.7287285282434631e-01:1.6239191554687449e-02:3.1820080241557930e-01:8.7561280091687044e-01:2.8230605123452396e-01:1.9984807251402212e+00:4.9316899682504983e-01:2.9067456212804448e+00:4.5201864141837184e-01:3.0003203276625081e+00:3.1383544893376475e-01:3.3641823464141809e+00 + CVs 20 + 4.0535209779173631e-03 5.4276447075113377e-01 3.5955425767891025e-01 + -5.3358569199329742e-02 1.0871047212599469e+00 6.6883871092993075e-01 + -2.3254059643116304e-01 1.6156130164022262e+00 9.0072949512375045e-01 + -5.6281864446216801e-01 2.0785140740879018e+00 1.0457330317031912e+00 + -1.0362423939338128e+00 2.4074875252134342e+00 1.1434203810109635e+00 + -1.5941283833070652e+00 2.5431797621638879e+00 1.3225508482354029e+00 + -2.0684104911654297e+00 2.4316610669506318e+00 1.6050656545546071e+00 + -2.3706024280132194e+00 2.1424686208308898e+00 1.8725790565926794e+00 + -2.5579640172317477e+00 1.7922449350246696e+00 2.0666070334493689e+00 + -2.7025309819080108e+00 1.4462490264570182e+00 2.1986739628982561e+00 + -2.8367536276700975e+00 1.1484740219762408e+00 2.2887264211144087e+00 + -2.9685146558272586e+00 9.0270374351705596e-01 2.3549277116023695e+00 + -3.1336915661578004e+00 6.5619679775788720e-01 2.4172164931824036e+00 + -3.3628279181806553e+00 4.2882233137837406e-01 2.5572498740254437e+00 + -3.5849530691773608e+00 3.3748007074437325e-01 2.7978901925593895e+00 + -3.7348503970212414e+00 4.3476352908985538e-01 3.0942003692814373e+00 + -3.7524120907850564e+00 7.3724692228517175e-01 3.4621083701394237e+00 + -3.7103914304870766e+00 1.0488261966185113e+00 3.9646454945160454e+00 + -3.8337964012712238e+00 9.8345418411142760e-01 4.2748921342033368e+00 + id 12016 + loc 7.8470814228057861e-01 6.0803074389696121e-02 1075 + blend 0.0000000000000000e+00 + interp 4.5877783963576207e-01:3.1242736069266730e-01:5.8495319158525017e-02:2.8867881169988302e-01:7.9014397056606178e-01:4.5877325185736573e-01:1.6871016633527909e+00:3.9367972981391125e-01:2.0470898704563183e+00:4.3477729530010029e-01:2.7138245840347617e+00:2.9667041789083237e-01:3.0595791228111269e+00 + CVs 20 + 3.7078911679803400e-02 3.0658431617182069e-01 1.6613279579334195e-01 + 1.0242609875350936e-01 6.1230275765832121e-01 2.9751438520549295e-01 + 1.8529110641853186e-01 9.1848626800873112e-01 3.8405508314412717e-01 + 2.6161190037913523e-01 1.2530204440087229e+00 4.5913771645518675e-01 + 2.8331761295329871e-01 1.6301481712708055e+00 5.7127374980708356e-01 + 1.9538673143199303e-01 2.0213692098683795e+00 7.4880119383566424e-01 + -3.2670693468884737e-02 2.3660945080095512e+00 9.8004836417412666e-01 + -3.7982823161951296e-01 2.6062262866851738e+00 1.2062216078553045e+00 + -7.8985701435086120e-01 2.7348147785581309e+00 1.3599437775880654e+00 + -1.2218468319704507e+00 2.7804855113156979e+00 1.4055967706231698e+00 + -1.6715792197812467e+00 2.7634655391577390e+00 1.3365455189432205e+00 + -2.1376065581430055e+00 2.6808119264404677e+00 1.1407838678943980e+00 + -2.5428538153398010e+00 2.5461240332880428e+00 8.1671792767088125e-01 + -2.7757096094216043e+00 2.4328089050123300e+00 4.4739857001965810e-01 + -2.8126372852995973e+00 2.4063334434028043e+00 1.5154695823407627e-01 + -2.6008646121495724e+00 2.4854258853846369e+00 3.9044734796211879e-02 + -1.8956985402187230e+00 2.5220324453287146e+00 1.1205834972630555e-01 + -1.1282077815304423e+00 2.2533193401918310e+00 1.8182381077488513e-02 + -1.3500811893794473e+00 2.4502487256932675e+00 -5.4758665368656340e-02 + id 12017 + loc 5.8529067039489746e-01 7.2587686777114868e-01 411 + blend 0.0000000000000000e+00 + interp 3.5943236668164102e-01:2.5317252143036756e-01:1.6141048782307188e-01:2.8565324367547529e-01:9.9179440389288720e-01:3.5942877235797421e-01:1.8541906073186465e+00:2.9502699735896698e-01:2.7656964498723275e+00:3.4133024978185383e-01:3.3325484323492476e+00 + CVs 20 + 7.8259209353763459e-01 2.9094619699540641e-01 -4.7914478953502010e-02 + 1.2953709705985776e+00 4.5587196282588777e-01 -6.6000999528260954e-02 + 1.7292197625005852e+00 5.5970995070374785e-01 -7.2979338143967162e-02 + 2.1783500162815863e+00 6.3883794549755646e-01 -7.4280362346777609e-02 + 2.6470881744240753e+00 6.8713263918782352e-01 -6.7880340339124656e-02 + 3.1381508284572042e+00 6.9693708069963300e-01 -5.0969294448371449e-02 + 3.6478941338950888e+00 6.5378443548922571e-01 -2.2201106371418977e-02 + 4.1649065449051754e+00 5.4461800681570760e-01 2.0494672998880081e-02 + 4.6701786719069620e+00 3.5834769292107094e-01 8.3355511111443570e-02 + 5.1354666196251095e+00 9.3364619280995376e-02 1.6608709413537581e-01 + 5.5221140493558405e+00 -2.3551079611507086e-01 2.4960122687653702e-01 + 5.7973042303301821e+00 -6.0025469197773074e-01 3.1618002138428591e-01 + 5.9571151523306654e+00 -9.7204852985599044e-01 3.6886395712448256e-01 + 6.0225894012901762e+00 -1.3287771403976785e+00 4.2132417605207717e-01 + 6.0222708499499529e+00 -1.6517091733596767e+00 4.7864501729701192e-01 + 5.9835923119433136e+00 -1.9247625455382880e+00 5.3371910645854204e-01 + 5.9265418076198415e+00 -2.1485875633193716e+00 5.8235652155717843e-01 + 5.8505947430568082e+00 -2.3659467824086846e+00 6.3595218079125237e-01 + 5.6456362007487506e+00 -2.7612553944240554e+00 6.7868738112569837e-01 + id 12018 + loc 7.6618027687072754e-01 3.8027906417846680e-01 1053 + blend 0.0000000000000000e+00 + interp 4.8775253636911958e-01:3.1764178842859292e-01:8.9579116666901859e-01:2.9906233135945981e-01:1.8814874070627008e+00:3.0881927725584418e-01:2.3347512735489548e+00:4.2353003761079633e-01:2.9260238796035223e+00:4.8774765884375593e-01:3.0686381165393928e+00:3.1015096904353473e-01:3.9392811165550490e+00 + CVs 20 + 1.5299802099011256e-01 3.9152580732741948e-01 -2.0133767764047944e-01 + 3.2377289263914655e-01 7.8004751114364623e-01 -3.9715924570303751e-01 + 5.0906804541592909e-01 1.1684380210596108e+00 -6.0476606596356342e-01 + 7.1824479774884220e-01 1.5476384403075274e+00 -8.3258671424110042e-01 + 9.6915023661050614e-01 1.8978245089579020e+00 -1.0806263361668313e+00 + 1.2809379301808876e+00 2.1938567836962699e+00 -1.3444559854923113e+00 + 1.6708273253174779e+00 2.4030886123786868e+00 -1.6103732598281173e+00 + 2.1436590658492531e+00 2.4887610830715770e+00 -1.8509515830870231e+00 + 2.6787678958381620e+00 2.4128419858782850e+00 -2.0284325586169412e+00 + 3.2202806402584105e+00 2.1374781993350735e+00 -2.1037285530722682e+00 + 3.6591237624815833e+00 1.6559128979727731e+00 -2.0515590541512827e+00 + 3.8815104147150636e+00 1.0467407969348332e+00 -1.8928819142638433e+00 + 3.8641813558095599e+00 4.2731109824177294e-01 -1.6700653681210875e+00 + 3.6709724629323786e+00 -1.1524566804930492e-01 -1.3951284210593322e+00 + 3.3820425578476732e+00 -5.5202252331391732e-01 -1.0343912635973569e+00 + 3.0497485211292492e+00 -8.5845806499979771e-01 -5.3158314080128188e-01 + 2.7270232369433662e+00 -9.4872655719003218e-01 1.1972718313532804e-01 + 2.4577268240558183e+00 -7.8404727912189931e-01 7.5548101946451873e-01 + 2.1894298558144896e+00 -6.2042381305809224e-01 1.1043174815371366e+00 + id 12019 + loc 3.8350352644920349e-01 7.0591740310192108e-02 397 + blend 0.0000000000000000e+00 + interp 4.1423482384898702e-01:3.5914428005723331e-01:7.7760196370846302e-07:3.9736487592190878e-01:3.6902141223798968e-01:3.4102495728285664e-01:9.5990829494228780e-01:3.6238607470536560e-01:1.2601383563302444e+00:4.1423068150074854e-01:1.8643991288478290e+00:3.2584679916996273e-01:2.4394111398001757e+00:2.9483655677917175e-01:3.2897763008450083e+00 + CVs 20 + -2.5918405001649258e-01 2.2392527467986917e-01 -1.1300274616051174e+00 + -4.6839815976221943e-01 2.0712826885831848e-01 -1.8875269146404894e+00 + -6.5722704618714534e-01 1.0812851340460122e-01 -2.5544638209771802e+00 + -8.3133516120771955e-01 -2.3590614172986024e-02 -3.2231779434979861e+00 + -9.8149738445149359e-01 -1.8887096217211452e-01 -3.8803931870889143e+00 + -1.1071460912946145e+00 -3.8977415479448152e-01 -4.5166444516105866e+00 + -1.2128856347168928e+00 -6.3161856595515453e-01 -5.1223437378617689e+00 + -1.3035298342363286e+00 -9.2300009041411990e-01 -5.6857258732628058e+00 + -1.3874638275941169e+00 -1.2685761592084464e+00 -6.1979511420722622e+00 + -1.4830790889121563e+00 -1.6607752965883347e+00 -6.6580382717106232e+00 + -1.6053300825026084e+00 -2.0911681048436215e+00 -7.0653658013314828e+00 + -1.7563186766306105e+00 -2.5452842989190381e+00 -7.4176405927139815e+00 + -1.9290867740403623e+00 -3.0035645129108430e+00 -7.7177792617931358e+00 + -2.1200647654366902e+00 -3.4519135274540691e+00 -7.9726413373016189e+00 + -2.3260965332278536e+00 -3.8787995927055174e+00 -8.1836237721940677e+00 + -2.5360572515497690e+00 -4.2740374902084621e+00 -8.3493458276555277e+00 + -2.7388309347883588e+00 -4.6340391133194476e+00 -8.4724556142230067e+00 + -2.9308690441712693e+00 -4.9559864420248632e+00 -8.5616507057398454e+00 + -3.1045745582480198e+00 -5.1872687869878789e+00 -8.6416703183104726e+00 + id 12020 + loc 4.1731834411621094e-01 1.7220325767993927e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4299338179130582e-01:3.0102790687195219e-01:1.5698237739025800e-01:3.8324156859953734e-01:1.0422811720828167e+00:4.4298895185748793e-01:1.7126850057263641e+00:3.8042664388327108e-01:2.0393925981204948e+00:4.2551853351113739e-01:2.5107038272182103e+00:3.8702048751308882e-01:2.9770023739850870e+00:3.6550530556197036e-01:3.8202313223105882e+00 + CVs 20 + 4.3287192944725067e-01 4.0637518155334462e-01 1.4183201424980774e-01 + 8.0969203942684864e-01 7.4728615698697820e-01 2.2938229145545580e-01 + 1.1843915420423812e+00 1.0713211644161247e+00 2.7441189455327408e-01 + 1.5558041803456986e+00 1.4684513668422099e+00 3.8286559705381673e-01 + 1.8233602950241377e+00 1.9629572959858539e+00 6.6774953380521229e-01 + 1.8233500481571148e+00 2.4685701892796179e+00 1.1723843565601761e+00 + 1.4043990467512772e+00 2.8159113177088697e+00 1.7755675521623520e+00 + 5.9404252979261218e-01 2.8706880557455250e+00 2.1359623635052847e+00 + -2.4792793137531022e-01 2.7004852433890241e+00 2.0213338863281440e+00 + -8.6000487936003434e-01 2.4662346532411075e+00 1.6269191704023294e+00 + -1.2869342137256221e+00 2.1783528397355703e+00 1.1083824900281356e+00 + -1.5340577446287336e+00 1.7897324047184902e+00 4.7621349523178236e-01 + -1.5858258526018851e+00 1.3432705489602068e+00 -1.5410492936607934e-01 + -1.6220884436265508e+00 9.6274792554107169e-01 -5.9463967747307134e-01 + -1.8386616038981862e+00 7.5407008414369925e-01 -7.8050078692749381e-01 + -2.2111945093879766e+00 8.9465499535669812e-01 -6.7486084575383387e-01 + -2.3305736156293508e+00 1.6670948313911107e+00 -1.1024200625815843e-01 + -1.7008787659698643e+00 2.3994199364311917e+00 5.7682892213017500e-01 + -1.9252135547109666e+00 2.5284878781043201e+00 5.9490554793612160e-01 + id 12021 + loc 4.0926057100296021e-01 5.6438410282135010e-01 1054 + blend 0.0000000000000000e+00 + interp 2.9648041005826248e-01:2.9131819436323964e-01:9.5731104893601926e-02:2.9647744525416192e-01:9.8463861491877547e-01:2.7932804577905773e-01:1.9557678936145484e+00:2.7281781488082135e-01:2.3881500665015194e+00:2.2859070968413264e-01:3.0313500613231446e+00 + CVs 20 + 2.0186848158862647e-01 4.1373720128258712e-01 -6.6176520943098116e-03 + 3.5555717191854774e-01 8.1904429447350524e-01 4.7335526138372885e-02 + 4.5278046612279876e-01 1.2411842744342105e+00 1.7079734635682597e-01 + 5.6348609535114269e-01 1.7130558138374918e+00 3.7031144461775956e-01 + 8.2898988484338487e-01 2.1920489786808135e+00 6.2565278598964802e-01 + 1.3227693602050481e+00 2.5494695736268063e+00 8.7556098568794227e-01 + 1.9730702984349322e+00 2.6710961451927133e+00 1.0636279388407668e+00 + 2.6247028800247865e+00 2.5329903864950234e+00 1.1867386041980772e+00 + 3.1526289409006871e+00 2.2158251902078430e+00 1.2973271440852878e+00 + 3.5046367904169413e+00 1.8784129150042819e+00 1.4538466740858393e+00 + 3.7230267465207807e+00 1.6750389498513520e+00 1.6634811908073246e+00 + 3.9316218374298648e+00 1.6102697669728490e+00 1.8808642590175810e+00 + 4.2661906411752026e+00 1.6486705428598731e+00 2.0290526332751315e+00 + 4.7281537515786924e+00 1.7923975224180735e+00 2.0062835733799980e+00 + 5.2561240716048054e+00 1.9584149257952292e+00 1.8427257172304190e+00 + 5.8844656785414591e+00 2.0355163502924385e+00 1.6137151858270251e+00 + 6.6175640826372444e+00 1.8534102443111262e+00 1.4772700324874055e+00 + 7.2190226458460360e+00 1.4322823310636419e+00 1.5740534926383216e+00 + 7.5687899482141434e+00 1.2902921715049100e+00 1.5296101750653865e+00 + id 12022 + loc 4.6746248006820679e-01 4.9914652109146118e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8273353604607760e-01:3.2666002605841776e-01:5.7743345838564508e-01:4.8272870871071716e-01:1.0690741721133077e+00:3.8595347690987297e-01:1.6214262651457760e+00:3.2838876303823605e-01:2.0462539449963355e+00:3.3805330761364244e-01:3.0151987929043242e+00:3.5786088499598478e-01:3.5714039253030121e+00:4.3650669115947321e-01:3.9832512080429603e+00 + CVs 20 + -1.2743823225119685e-01 3.0259014163227743e-01 -1.2820196573470988e-01 + -2.6441395785543231e-01 5.9700460630900731e-01 -2.7897282457520284e-01 + -4.2110048920475202e-01 8.7588085159385121e-01 -4.2607556617931430e-01 + -6.0207281847292127e-01 1.1312636276738606e+00 -5.5798394106032578e-01 + -8.0769184762995627e-01 1.3552596153600578e+00 -6.7610506475034615e-01 + -1.0356651296785175e+00 1.5400620709493720e+00 -7.8562570150169064e-01 + -1.2803110121263719e+00 1.6773436231813248e+00 -8.9275739882852290e-01 + -1.5327848310181911e+00 1.7603852883474718e+00 -9.9877243225796652e-01 + -1.7833718022723977e+00 1.7872993171514371e+00 -1.0988517171908900e+00 + -2.0245888529977254e+00 1.7610203445290615e+00 -1.1867996191580681e+00 + -2.2496410512240619e+00 1.6874257442382432e+00 -1.2575903726412467e+00 + -2.4501274509772748e+00 1.5747751081479344e+00 -1.3067369479659192e+00 + -2.6208158034877411e+00 1.4314625893850774e+00 -1.3308164131942297e+00 + -2.7652415883329136e+00 1.2620105650873703e+00 -1.3270133702740039e+00 + -2.8917423382010026e+00 1.0733194885215736e+00 -1.2903553347299590e+00 + -3.0076535940523597e+00 8.8177113901365167e-01 -1.2124905580374079e+00 + -3.1161908523021999e+00 7.0793117158161512e-01 -1.0888816470626812e+00 + -3.2214119701623676e+00 5.6374122402743221e-01 -9.1583364329288763e-01 + -3.3633912517294116e+00 4.2468020171748355e-01 -6.2698459765582437e-01 + id 12023 + loc 3.9777663350105286e-01 1.7220325767993927e-01 1085 + blend 0.0000000000000000e+00 + interp 5.4941399370155330e-01:5.4940849956161630e-01:3.8300363779748425e-01:3.5719872041289519e-01:1.0337084389297031e+00:4.0741188383410309e-01:1.7313485731608242e+00:3.6369556945468873e-01:2.0533173331645127e+00:3.6441982267090772e-01:2.9655327938897247e+00:3.3468889931820500e-01:3.8349852730108522e+00 + CVs 20 + 3.8643137426855145e-01 4.0804013157847935e-01 2.7363976541670576e-01 + 6.6442820792900115e-01 7.6844632863855411e-01 5.4287348783257805e-01 + 8.7896665860856160e-01 1.0964482357395788e+00 8.4286573623000471e-01 + 1.0290005640744915e+00 1.3954648064728583e+00 1.1952583538413386e+00 + 1.0903157725830608e+00 1.6495961574009650e+00 1.5939059449157740e+00 + 1.0494498474255198e+00 1.8437017650702412e+00 2.0165976367726008e+00 + 9.0685548059951393e-01 1.9688976600392769e+00 2.4323539752819330e+00 + 6.7556247611310016e-01 2.0242930777290740e+00 2.8109100147527952e+00 + 3.7793316340182859e-01 2.0139883616213154e+00 3.1327159590937907e+00 + 3.8917767797528757e-02 1.9409003456249381e+00 3.3988597466732986e+00 + -3.2094502909933231e-01 1.7985379533548440e+00 3.6272174094047624e+00 + -6.8125398700514461e-01 1.5695386631776402e+00 3.8350059445822771e+00 + -1.0143991921043585e+00 1.2375350519107380e+00 4.0294185900155988e+00 + -1.2851325354623322e+00 7.9130227860710600e-01 4.2197210974408588e+00 + -1.4396711282562409e+00 2.2869849057175295e-01 4.4255742360227295e+00 + -1.4228220931328828e+00 -3.9906138759578591e-01 4.6696188698999652e+00 + -1.2259308535660258e+00 -1.0035811711892486e+00 4.9891615012659676e+00 + -8.9375320349871601e-01 -1.5112630298740053e+00 5.3867283013664187e+00 + -6.7400735986588578e-01 -1.9269759629714103e+00 5.6098917033448199e+00 + id 12024 + loc 2.7008208632469177e-01 5.1066398620605469e-01 1053 + blend 0.0000000000000000e+00 + interp 6.5846331672109948e-01:2.4815917154105202e-01:5.1274488125427287e-01:6.5845673208793232e-01:2.2285598448518877e+00:3.3367919547584796e-01:2.3999688266660479e+00:2.7513136653494430e-01:3.0268108769929922e+00:3.6199455816789189e-01:3.9050055082989297e+00 + CVs 20 + -7.5699975921144663e-02 4.7278511164258680e-01 3.8032848310622325e-01 + -2.1640931907713989e-01 8.6738305924879955e-01 6.9114038585154902e-01 + -3.9492242628301660e-01 1.2180663442193318e+00 9.9754955756882535e-01 + -6.0730866348494905e-01 1.5264481679533213e+00 1.3222652240423618e+00 + -8.5957351879744837e-01 1.7715565489587100e+00 1.6578020760029686e+00 + -1.1514802032702480e+00 1.9290880189913850e+00 1.9880295659887590e+00 + -1.4737244696711913e+00 1.9773711286608879e+00 2.2895439390639583e+00 + -1.8053872423352186e+00 1.9048672738670427e+00 2.5334027409200117e+00 + -2.1030285322437612e+00 1.7128033073324958e+00 2.6894031638251841e+00 + -2.2873935874007834e+00 1.4293112934180372e+00 2.7430921443297258e+00 + -2.2938532959708473e+00 1.1257273041831350e+00 2.7246454591483902e+00 + -2.1552013108954502e+00 8.5712773704589384e-01 2.6923162703848473e+00 + -1.9440050300541669e+00 5.9675999905442878e-01 2.6487278922890378e+00 + -1.6937132095358260e+00 2.7344808800076059e-01 2.5143169299347505e+00 + -1.4163830986642432e+00 -9.2027398196424137e-02 2.1873931317555817e+00 + -1.1506181973410432e+00 -3.3192606895529159e-01 1.6263604637163003e+00 + -9.5205623964408848e-01 -2.4949920750134166e-01 9.3384963435185764e-01 + -8.5345470804799639e-01 5.5135475354598673e-02 3.5856510532460961e-01 + -7.8677333472431443e-01 1.1892049452027789e-01 -4.3602043644758726e-03 + id 12025 + loc 1.5698434412479401e-01 9.3128985166549683e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3754906695856066e-01:3.3464270825682824e-01:4.9724820595939523e-02:3.4619608383652989e-01:7.7984039383062131e-01:3.1606829027685424e-01:1.2492253568184977e+00:4.0436370636493058e-01:1.8428872390287760e+00:3.0052612555542052e-01:2.9136063826052059e+00:4.3754469146789110e-01:3.4359350179014578e+00 + CVs 20 + 2.7736950804825511e-01 3.5735985409833765e-01 -2.1120125096611383e-01 + 5.6130397290925560e-01 7.2567733009407931e-01 -4.5333509436833586e-01 + 8.6159815232309334e-01 1.0941552888037789e+00 -7.0958904089646779e-01 + 1.1798117591484583e+00 1.4494108977429208e+00 -9.7169994408325699e-01 + 1.5018838055497044e+00 1.7716360215344034e+00 -1.2489936349055093e+00 + 1.7952346118464284e+00 2.0286419857043931e+00 -1.5647862307257825e+00 + 2.0243625839188422e+00 2.1756384439176730e+00 -1.9257178975394238e+00 + 2.1581571658841190e+00 2.1604131409703955e+00 -2.2872867824385326e+00 + 2.1906559009501891e+00 1.9885199299969369e+00 -2.5619961908077737e+00 + 2.1732365122132351e+00 1.7472364733792882e+00 -2.7298208082727133e+00 + 2.1566376773994724e+00 1.4837210196484869e+00 -2.8479601601185340e+00 + 2.1696414881238550e+00 1.1925440042443598e+00 -2.9684320668810775e+00 + 2.2279997841697576e+00 8.7374660020053463e-01 -3.1169833000042644e+00 + 2.3317322995315379e+00 5.5045101253914686e-01 -3.3102396661437297e+00 + 2.4740883731683647e+00 2.5259887943584003e-01 -3.5646193518832745e+00 + 2.6448738448409066e+00 1.5236475729057952e-02 -3.8816747257788546e+00 + 2.8360619649619574e+00 -1.3418113918537217e-01 -4.2660141046651390e+00 + 3.0123491283793160e+00 -1.4412277817631336e-01 -4.6554944347153091e+00 + 3.0098063368918999e+00 1.5288492718310565e-03 -4.7291425768473498e+00 + id 12026 + loc 2.1511852741241455e-01 1.3713808357715607e-01 384 + blend 0.0000000000000000e+00 + interp 4.9177959707263685e-01:4.1529391810036614e-01:4.6872019624765948e-02:3.5422290036313703e-01:7.3956138403731631e-01:3.1767823157309699e-01:1.3020194896355466e+00:3.8140322252938602e-01:2.0007084999519336e+00:3.5780550733015987e-01:2.9797671909239076e+00:4.7938615666454365e-01:3.2391245367953347e+00:4.9177467927666613e-01:3.8127475745167727e+00 + CVs 20 + -4.8172180685989907e-01 1.9575148806190573e-01 -1.0970223245303763e+00 + -8.4946359687136985e-01 1.9729157521633323e-01 -1.7661778198290723e+00 + -1.1903384925440972e+00 1.2811990718260360e-01 -2.3321025053711324e+00 + -1.5227137215573792e+00 4.6011713698078716e-02 -2.9064749679312114e+00 + -1.8354686271691867e+00 -3.7714442086964173e-02 -3.4726812854945219e+00 + -2.1237964684596662e+00 -1.1360892471638012e-01 -4.0192256202975862e+00 + -2.3902830227231804e+00 -1.8063584197277494e-01 -4.5426813906719685e+00 + -2.6494519032694832e+00 -2.3791949540600399e-01 -5.0484258731888447e+00 + -2.9168506829245828e+00 -2.8382439735621501e-01 -5.5458304597735726e+00 + -3.2005745205326024e+00 -3.3709515944538482e-01 -6.0557087860416230e+00 + -3.5061243392079202e+00 -4.3758483262269521e-01 -6.5932356797158942e+00 + -3.8494857425381137e+00 -6.3307674280159798e-01 -7.1342599619997857e+00 + -4.2409308351137476e+00 -9.5666874730502149e-01 -7.6304091407342147e+00 + -4.6730457281962732e+00 -1.4201571725295472e+00 -8.0350452128436167e+00 + -5.1325692902706717e+00 -2.0133549987640311e+00 -8.3097643337773857e+00 + -5.6101696486408414e+00 -2.7070742614496570e+00 -8.4257458669724095e+00 + -6.0817442949989893e+00 -3.4600628167015897e+00 -8.3668519249919751e+00 + -6.4972608919082111e+00 -4.2190454703931337e+00 -8.1398522860252900e+00 + -6.7778172305297737e+00 -4.8682137934902157e+00 -7.7898687192456988e+00 + id 12027 + loc 9.2415177822113037e-01 7.3308360576629639e-01 1048 + blend 0.0000000000000000e+00 + interp 5.2661754908710623e-01:3.2067599794417462e-01:2.6004453712955677e-01:3.4396658215208342e-01:1.1521860795516756e+00:2.2040378432756882e-01:2.0933111752391214e+00:3.4567096557988991e-01:2.5276836608685289e+00:5.2661228291161544e-01:3.0001325212154897e+00:3.0967428301831534e-01:3.7846825581380279e+00 + CVs 20 + 9.7940658351668736e-02 6.3249405043888063e-01 -3.6355214009814313e-01 + 2.4671097702320277e-01 1.2678040820627077e+00 -7.1029334161362234e-01 + 5.0955595575064261e-01 1.8736916001028758e+00 -9.9223201418192541e-01 + 9.1837851094435174e-01 2.3923334010174906e+00 -1.1503787998232651e+00 + 1.4507977517482644e+00 2.7470876780540210e+00 -1.1592909600378771e+00 + 2.0337430457263537e+00 2.8792907799305794e+00 -1.0598925001554651e+00 + 2.5783699628087193e+00 2.7759365938962235e+00 -9.2610017819868240e-01 + 3.0187229344826476e+00 2.4763456195500093e+00 -8.2387821877929757e-01 + 3.3302454540540904e+00 2.0472617591609303e+00 -7.7731171862194159e-01 + 3.5109619450191767e+00 1.5539209745300024e+00 -7.6989705998857216e-01 + 3.5564114805772715e+00 1.0609654673644702e+00 -7.7980467927378971e-01 + 3.5100639736010257e+00 6.1731797863737159e-01 -7.9369905724471468e-01 + 3.4506594771068135e+00 2.1881976286338864e-01 -7.9191803994289245e-01 + 3.4016910943404608e+00 -2.0370647905294387e-01 -7.2302124598604278e-01 + 3.2931377873607994e+00 -6.7059263065578334e-01 -4.8233260834649822e-01 + 3.1085888914721052e+00 -1.0599666997235653e+00 -3.7745402599101641e-02 + 2.8635149302829377e+00 -1.3350627424559249e+00 6.5570016316647539e-01 + 2.2836215696741373e+00 -1.2001908906785044e+00 1.7793439747217765e+00 + 2.2815527994150004e+00 -8.6421078219029790e-01 2.0834479226131899e+00 + id 12028 + loc 8.5488057136535645e-01 3.8777419924736023e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0453145632288412e-01:3.2374914268682431e-01:5.3918460802241763e-01:2.5432560573936075e-01:1.0079619179864381e+00:4.0452741100832090e-01:2.0000481463002115e+00:3.4365637134160648e-01:2.6640737091018005e+00:2.4586115642453008e-01:3.0894884752763225e+00:3.3790210835821072e-01:3.9222138917259195e+00 + CVs 20 + -1.6118647317131080e-01 3.3950718748686115e-01 1.8652620933225431e-01 + -3.3060206143634324e-01 7.0033903892629312e-01 3.6047376456487823e-01 + -5.2570104083285518e-01 1.0711313512519549e+00 4.9777221281256223e-01 + -7.6033039097614397e-01 1.4307692900864639e+00 5.8468690884969454e-01 + -1.0441774950417018e+00 1.7528956228212955e+00 6.2292550241921019e-01 + -1.3828053734371726e+00 2.0142935031156339e+00 6.2860567607294837e-01 + -1.7727016838874845e+00 2.1988099768666554e+00 6.2986212313645740e-01 + -2.1972854038512799e+00 2.2982102556869881e+00 6.5903070380148032e-01 + -2.6310469972850683e+00 2.3125066857955230e+00 7.4473015503472462e-01 + -3.0437616288369451e+00 2.2239882243939375e+00 9.1700326187520576e-01 + -3.3628920862073826e+00 2.0032382517031735e+00 1.1598390421173190e+00 + -3.5587387846829932e+00 1.7059846523574649e+00 1.3742328165744810e+00 + -3.6680601069780310e+00 1.3207422873025192e+00 1.5469992956572571e+00 + -3.6039332204233858e+00 7.9317828127409240e-01 1.6503032552649564e+00 + -3.3881190547909812e+00 3.2098746659660726e-01 1.6320935674153663e+00 + -3.1770577154573796e+00 -2.7775664400455383e-02 1.5594031071592271e+00 + -3.0339559973370092e+00 -2.8266557833709721e-01 1.4792685978038387e+00 + -3.0261338004329281e+00 -4.1150544790859522e-01 1.4377516986677199e+00 + -2.9758854037262621e+00 -6.0012669475315950e-01 1.3905880119025167e+00 + id 12029 + loc 7.2650426626205444e-01 2.3186263442039490e-01 406 + blend 0.0000000000000000e+00 + interp 4.1302161107354179e-01:3.9995780787316321e-01:5.9855471872466426e-02:2.5287838555499065e-01:9.9198321870871287e-01:3.1628962791472559e-01:1.9849400124684153e+00:4.1301748085743106e-01:2.3653179084367726e+00:4.0599529252404071e-01:3.0000164988367986e+00:2.6578276138552875e-01:3.5832596768040803e+00 + CVs 20 + -1.4453903966453310e-01 1.2978264219736482e-01 3.0805848623007663e-02 + -2.4261769950194906e-01 2.1846682984058102e-01 5.7106199163978723e-02 + -3.0502483710339168e-01 2.7696991506634966e-01 8.0684593183525416e-02 + -3.6228206978495042e-01 3.3318525168681490e-01 1.1236859577818489e-01 + -4.1544065769402827e-01 3.9035529255527912e-01 1.5216986078214897e-01 + -4.6661415382578258e-01 4.5146433252540863e-01 2.0003360966615741e-01 + -5.2001099948701168e-01 5.1920393021007538e-01 2.5644267710550561e-01 + -5.8256153941248512e-01 5.9518711095986310e-01 3.2264501239386423e-01 + -6.5943237310738678e-01 6.7943751581484757e-01 3.9838106479165258e-01 + -7.4739917416900192e-01 7.7098341695604711e-01 4.7865560987944977e-01 + -8.3864163725748786e-01 8.6888580227115475e-01 5.5701606549778115e-01 + -9.3355401624728995e-01 9.7166016660501398e-01 6.3259062421756851e-01 + -1.0452942720042353e+00 1.0752077029827432e+00 7.1200134384567670e-01 + -1.1848290340085881e+00 1.1742018069059812e+00 8.0053958579495577e-01 + -1.3471755140876225e+00 1.2668095690613486e+00 8.9364746911923287e-01 + -1.5198357072802304e+00 1.3544418960718285e+00 9.8359412843657146e-01 + -1.6989170833728773e+00 1.4374381514124150e+00 1.0689669690302868e+00 + -1.8923728633141050e+00 1.5119942917383420e+00 1.1545066385639680e+00 + -2.1050925689530700e+00 1.5620262872857102e+00 1.2498148305580576e+00 + id 12030 + loc 4.2389890551567078e-01 1.1802761256694794e-01 403 + blend 0.0000000000000000e+00 + interp 5.0500270111735945e-01:4.0482101090278777e-01:2.7187506444139398e-01:3.6852801024120224e-01:9.5711709647379883e-01:3.2834401256821105e-01:1.4531904503744348e+00:5.0499765109034833e-01:2.0923368094544204e+00:2.8523168208858868e-01:2.7942651259921041e+00:3.2562719995148931e-01:3.2524663597877348e+00 + CVs 20 + -2.0993712212167770e-01 1.8509791216385163e-01 5.2370062504704065e-02 + -4.2716784149070719e-01 3.5836973127433080e-01 1.3426520097660374e-01 + -6.4504633958948931e-01 5.4101861468097046e-01 2.2770811975385699e-01 + -8.4408139458333864e-01 7.2714366903036065e-01 3.1670006950323754e-01 + -1.0175761176699551e+00 8.9994656632366454e-01 3.8550943224888462e-01 + -1.1612172750983416e+00 1.0432361345273058e+00 4.1347686070276712e-01 + -1.2708034058552218e+00 1.1617385166827217e+00 3.9392851285859892e-01 + -1.3485244269100920e+00 1.2780998304213165e+00 3.3032233807736433e-01 + -1.4172636541754888e+00 1.4138574664173282e+00 2.3863289813460964e-01 + -1.5122379497435143e+00 1.5702051736249676e+00 1.7020104046534867e-01 + -1.6375861767946605e+00 1.7261301838777354e+00 1.8903928299280492e-01 + -1.7701206309498967e+00 1.8501373561601453e+00 3.3692408682463604e-01 + -1.9027886679696222e+00 1.9002137458996049e+00 6.0778489687657256e-01 + -2.0467789258260498e+00 1.8422016498038669e+00 9.4817385518674979e-01 + -2.1883261883731624e+00 1.6527701113580346e+00 1.3327437491187906e+00 + -2.3104889278668783e+00 1.2908094314348892e+00 1.8152445129254702e+00 + -2.5082620529408164e+00 7.5500324245784300e-01 2.4480263319907358e+00 + -2.9141135730717940e+00 1.9382694474604167e-01 3.1247302182804542e+00 + -3.2606600470193623e+00 -1.9999866737923555e-01 3.6044361222088028e+00 + id 12031 + loc 7.0313411951065063e-01 7.5427037477493286e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3102797197053638e-01:3.8591894635169161e-01:2.3652332521071040e-01:3.1491574973060732e-01:9.9393552839344423e-01:4.3102366169081668e-01:1.6917513863762066e+00:2.5642623670412479e-01:2.0473229448835539e+00:3.3236060407896068e-01:2.9263638477700513e+00:3.1642184117449396e-01:3.2896765314171637e+00:3.9385997103163212e-01:3.9091415785056176e+00 + CVs 20 + -1.5435364352569919e-01 2.9968528839831321e-01 2.0378807735989118e-01 + -3.2504714119921707e-01 5.6704778187121474e-01 3.5746010061206523e-01 + -5.1014265425535221e-01 8.1954304778460230e-01 4.7546455784031422e-01 + -7.0710458408198329e-01 1.0608196906386214e+00 5.6106418107355105e-01 + -9.1724968648918104e-01 1.2812407931750338e+00 6.0341163816840393e-01 + -1.1374928409788208e+00 1.4691476781959358e+00 5.9518617863162870e-01 + -1.3592129980472070e+00 1.6109395946927632e+00 5.3254334558910366e-01 + -1.5680941221943301e+00 1.6937346937105278e+00 4.1529380196174392e-01 + -1.7433805608274817e+00 1.7092612064858335e+00 2.4871802851609698e-01 + -1.8693742811538971e+00 1.6548711720836184e+00 4.1301077217739790e-02 + -1.9476163649978122e+00 1.5284807702148355e+00 -1.9593642594637029e-01 + -1.9886537539892031e+00 1.3248395562738071e+00 -4.4425355204927774e-01 + -2.0030652618246454e+00 1.0351180091762435e+00 -6.7598586675347883e-01 + -2.0083473985640397e+00 6.4270199560924413e-01 -8.5189062284735062e-01 + -2.0312612968426480e+00 1.3792226638903604e-01 -9.0243188675944341e-01 + -2.1181603177554238e+00 -4.5876322123530311e-01 -7.4886235196363948e-01 + -2.3634990370448450e+00 -1.0856868428228392e+00 -3.2769727645883273e-01 + -2.8161687718238819e+00 -1.5847072380789975e+00 3.4896935318016231e-01 + -3.0247868912246645e+00 -2.0175198143750732e+00 7.4409800066354914e-01 + id 12032 + loc 2.0762620866298676e-01 6.8816471099853516e-01 1048 + blend 0.0000000000000000e+00 + interp 5.3973677674987275e-01:4.1707279866012492e-01:4.2505880262522999e-02:4.0233709142646751e-01:8.3841634089834982e-01:4.6232223066485750e-01:1.0884060505426503e+00:5.3973137938210525e-01:1.6420701355700356e+00:3.9957358206028032e-01:2.0673208070127433e+00:3.7279664679759011e-01:2.8773272203353164e+00:3.8423227099290075e-01:3.5200804076251280e+00 + CVs 20 + 1.6960103733386817e-01 5.8707731899801496e-01 -2.5203741320252937e-01 + 3.3110990608469743e-01 1.1618614245025227e+00 -4.5047911382690864e-01 + 5.1217938658101847e-01 1.7393881147139398e+00 -5.5907761310779636e-01 + 7.4193192064107893e-01 2.3249539865501778e+00 -5.5788597998052225e-01 + 1.0625339023840379e+00 2.8981247222535718e+00 -4.5129172290151298e-01 + 1.5131893585183418e+00 3.4155258170558627e+00 -2.8032723312072205e-01 + 2.1104775933423325e+00 3.8184258907510111e+00 -1.0314029071789932e-01 + 2.8348636611552243e+00 4.0397200239180258e+00 4.2783040966848596e-02 + 3.6282731315909484e+00 4.0230789599185028e+00 1.3177008592756367e-01 + 4.4060444589925032e+00 3.7525569424515441e+00 1.4131461602030448e-01 + 5.0757052927223789e+00 3.2434926918640805e+00 9.5797555280091040e-02 + 5.5482299639742543e+00 2.5319947884588103e+00 8.9924071915028603e-02 + 5.7627702050645651e+00 1.7025258462981105e+00 2.1784357941482768e-01 + 5.7283351551322310e+00 8.5792464482567055e-01 4.9179870481039573e-01 + 5.5149137090496163e+00 1.0130851194868362e-01 8.1361391294214380e-01 + 5.2844525576114956e+00 -3.5431684201646374e-01 1.0012161586069328e+00 + 3.8933107696535143e+00 -4.4097539144026582e-01 -6.2883374222229471e-01 + 3.9587323809393702e+00 -8.1526884318955128e-01 -7.1347406531922331e-01 + 4.1207707795791721e+00 -3.4286457303460194e-01 -6.3025817041031185e-01 + id 12033 + loc 8.3005720376968384e-01 6.1969071626663208e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9346864041470734e-01:4.8394266398878771e-01:4.5909503880093960e-02:3.4784002898130667e-01:8.0833329426473188e-01:3.4811468636090931e-01:1.5692598320554563e+00:4.9346370572830323e-01:2.0056172110115673e+00:3.8742894723670307e-01:2.4798706672108906e+00:4.0377705187648960e-01:2.9991432150257515e+00:3.2989246205877892e-01:3.5644895229361726e+00 + CVs 20 + 2.7474559074773364e-01 3.5731307206592983e-01 -7.4032784548258609e-02 + 5.1057434813901692e-01 7.2277258957086743e-01 -1.6815663906283612e-01 + 7.2534229134056905e-01 1.0996916646644053e+00 -2.5875957918748804e-01 + 9.1933827777950716e-01 1.4912372126230262e+00 -3.2714131776918276e-01 + 1.0849900679954534e+00 1.8966299362305286e+00 -3.6586487274316420e-01 + 1.2312758189835098e+00 2.3041273735714700e+00 -4.0736207132654678e-01 + 1.3851125149452024e+00 2.6733190215489504e+00 -5.3119392784847896e-01 + 1.5705917072007183e+00 2.9268512363146542e+00 -7.7728113109375552e-01 + 1.7997664500079977e+00 3.0089317225394039e+00 -1.0834939326085722e+00 + 2.0775964641124465e+00 2.9358014527770147e+00 -1.3505407870060684e+00 + 2.4063637350977807e+00 2.7737346088748822e+00 -1.5214559239187861e+00 + 2.7833961861692247e+00 2.5715108692488471e+00 -1.5954256064818781e+00 + 3.1991014265962470e+00 2.3311823686564264e+00 -1.5973345963820023e+00 + 3.6213825169955491e+00 2.0143010113318862e+00 -1.5368401952201300e+00 + 3.9737666121162123e+00 1.5781917202446285e+00 -1.3992785015374061e+00 + 4.1536275252160042e+00 1.0644008345068636e+00 -1.1486350319636394e+00 + 4.0567476456880120e+00 6.3360610393021755e-01 -7.2229592813985655e-01 + 3.6994154168646944e+00 4.9382726702970114e-01 -2.3080320114616698e-01 + 3.5930601142930758e+00 2.5728618221862071e-01 2.4990983420708233e-02 + id 12034 + loc 7.3767721652984619e-01 7.5427037477493286e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6355722091824891e-01:4.4409155301549674e-01:2.4501298245260306e-01:3.5055981953988458e-01:9.8347925392162783e-01:4.6355258534603977e-01:1.7095599371435815e+00:2.9173565053455996e-01:2.0623187339139832e+00:3.7240121367374274e-01:2.9093412920127841e+00:3.3628295098285055e-01:3.2839389935641119e+00:4.2811207321781625e-01:3.9289076282659510e+00 + CVs 20 + -2.1542715468333731e-01 2.5190231693054344e-01 1.9915159470782723e-01 + -4.5119072898770674e-01 4.8664956559615064e-01 3.6286631680189857e-01 + -6.9517405009387445e-01 7.1819096850602326e-01 5.0913769472109760e-01 + -9.3718814002396877e-01 9.4449922049126533e-01 6.4109673816403268e-01 + -1.1776480150929673e+00 1.1538463759441633e+00 7.4692405125068007e-01 + -1.4152488518599395e+00 1.3343080266558549e+00 8.1877257949369309e-01 + -1.6446835628436374e+00 1.4762746544643366e+00 8.5768666122057746e-01 + -1.8556725900907187e+00 1.5749445709310022e+00 8.7340702253601532e-01 + -2.0432979309018848e+00 1.6317981066446108e+00 8.6317051323754579e-01 + -2.2054955698217054e+00 1.6392510781720218e+00 7.9278200094783036e-01 + -2.3148883292654880e+00 1.5928131097511891e+00 6.6905694999486576e-01 + -2.3580271811269822e+00 1.5251770820687691e+00 5.6368584307455716e-01 + -2.3645073335704829e+00 1.4486150140769505e+00 5.0673075192304329e-01 + -2.3590058655375681e+00 1.2409068961299230e+00 4.4089659800771464e-01 + -2.2983312081608451e+00 7.8512661758171498e-01 3.1208911761260982e-01 + -2.1014247689074104e+00 1.6301162610367192e-01 2.8453098610558614e-02 + -1.7506233411337901e+00 -4.1892519968909214e-01 -5.1883696284752578e-01 + -1.3434719325579330e+00 -7.3810509627952547e-01 -1.2761812051638466e+00 + -1.0688318107298878e+00 -9.1020852615685799e-01 -1.6939492408887455e+00 + id 12035 + loc 5.8503854274749756e-01 9.8315912485122681e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7224369173131603e-01:3.0559079645326109e-01:2.3149815003678409e-01:3.2520977453489625e-01:1.1075725667235299e+00:4.7223896929439874e-01:1.8462257023446540e+00:3.5953480100645185e-01:2.1589029717333013e+00:3.4646446534607195e-01:2.9882644926521698e+00:4.6347874102875541e-01:3.5521294744706240e+00 + CVs 20 + 1.8624119548378701e-01 3.3827325158407728e-01 -2.8268619228150466e-01 + 4.0311809136490784e-01 6.8798651307245717e-01 -5.4279538215009204e-01 + 6.6947975976854568e-01 1.0480290192966457e+00 -8.0026785966791025e-01 + 9.8861418662095057e-01 1.4174193897350589e+00 -1.0673906063094627e+00 + 1.3531363411772075e+00 1.7933475610022183e+00 -1.3625599506807931e+00 + 1.7507097786999946e+00 2.1585821983573075e+00 -1.7253471740179611e+00 + 2.1600667230548254e+00 2.4583618281187269e+00 -2.2053093423494206e+00 + 2.5399894919079036e+00 2.5866848240773743e+00 -2.8229441881047470e+00 + 2.8380752303650199e+00 2.4579264400120282e+00 -3.5047705944379897e+00 + 3.0519545686330023e+00 2.1080398461211862e+00 -4.1248408238033187e+00 + 3.2329773855578856e+00 1.6454083339073966e+00 -4.6017644655586674e+00 + 3.4405437269679884e+00 1.2075896712165997e+00 -4.9054871706038163e+00 + 3.6796254823269421e+00 9.0843023154741309e-01 -5.0552192522161912e+00 + 3.8932026005787792e+00 7.5601375163115814e-01 -5.0848044390804565e+00 + 4.0392771886481684e+00 6.3825599094713503e-01 -5.0167708119780654e+00 + 4.1341218788459608e+00 4.1008876877858685e-01 -4.9067710748468025e+00 + 4.2496863181969138e+00 -4.0532963980849379e-04 -4.9133196039243296e+00 + 4.4219707347529038e+00 -3.2849149683194717e-01 -5.1820744198890942e+00 + 4.4943822130580333e+00 -2.5845920439600922e-01 -5.4406140043651181e+00 + id 12036 + loc 4.9613043665885925e-01 5.3668153285980225e-01 406 + blend 0.0000000000000000e+00 + interp 3.9430537246135200e-01:3.9105098996235332e-01:5.2645406270872774e-02:3.0110412926540303e-01:1.0000875385260386e+00:3.6512722425235972e-01:1.6037328437180218e+00:3.9430142940762741e-01:2.9869330895400203e+00:3.3409146969502596e-01:3.4674292532830360e+00 + CVs 20 + 1.8738888580680296e-01 2.2217468820114178e-01 5.4086230234916918e-02 + 2.7513881430549098e-01 3.6181964400844957e-01 1.0611899382600373e-01 + 3.3304013383714587e-01 4.7619329643173647e-01 1.6677754218506380e-01 + 4.0416462819766102e-01 5.9389940592757751e-01 2.2403999217620257e-01 + 4.9156001350969641e-01 7.1375694388713784e-01 2.7775265000596694e-01 + 5.9809132888052730e-01 8.3302399866621224e-01 3.2737243093652857e-01 + 7.2592718303734260e-01 9.4731669606013602e-01 3.7128100311141210e-01 + 8.7579265417603103e-01 1.0510930149087905e+00 4.0742474136970674e-01 + 1.0472026616334817e+00 1.1399348564616838e+00 4.3693372225836530e-01 + 1.2393459857322302e+00 1.2111879681340600e+00 4.6688064789858896e-01 + 1.4508925661177994e+00 1.2607583052980320e+00 5.0197871212623013e-01 + 1.6793313919684965e+00 1.2819949367382619e+00 5.3565282670522052e-01 + 1.9206674351724924e+00 1.2697119825477956e+00 5.5754658160678960e-01 + 2.1698859905042203e+00 1.2234789035228619e+00 5.6581385249874194e-01 + 2.4212044262486407e+00 1.1466763474197306e+00 5.6585737107307832e-01 + 2.6688494532450577e+00 1.0442149334977822e+00 5.5987432094466083e-01 + 2.9086929111176034e+00 9.2116099730506651e-01 5.4357056011469551e-01 + 3.1383419858604751e+00 7.8177852260619018e-01 5.1315703775078414e-01 + 3.3546668709780350e+00 6.2450691071972486e-01 4.6631650020674420e-01 + id 12037 + loc 2.5379613041877747e-01 2.7032399177551270e-01 416 + blend 0.0000000000000000e+00 + interp 4.5847625831054095e-01:3.1318713419903738e-01:2.4310377385318216e-01:2.4501025500120416e-01:1.0020860659633726e+00:3.2180690458427202e-01:1.5371213281759153e+00:3.0568107058975985e-01:2.0483808043709089e+00:4.5847167354795787e-01:2.7356442647055754e+00:3.3883475743326846e-01:3.1702537947485894e+00:4.4193892418909259e-01:3.9960929408263137e+00 + CVs 20 + -1.2079383327467848e-01 2.4644222323111581e-01 -5.0328388152671655e-01 + -2.6801840569740099e-01 3.9682792289263263e-01 -8.1792424982770351e-01 + -4.2558228791298869e-01 5.1011101498815714e-01 -1.0885534004128621e+00 + -5.7264339434537714e-01 6.2666274944103117e-01 -1.3873191929848194e+00 + -7.0212742243860493e-01 7.4555466613800547e-01 -1.7172532796445348e+00 + -8.0558560216796748e-01 8.6534997673718328e-01 -2.0828655007481847e+00 + -8.7026142152921504e-01 9.8379759279141799e-01 -2.4863762168821926e+00 + -8.8206694318025658e-01 1.0975797630229376e+00 -2.9252554553379131e+00 + -8.3139374623755402e-01 1.2016762227177633e+00 -3.3947166895494498e+00 + -7.1299358882392327e-01 1.2898496500298502e+00 -3.8880389772488106e+00 + -5.2040669801516359e-01 1.3585623474548907e+00 -4.3929030916889644e+00 + -2.4717265990746451e-01 1.4052341716770334e+00 -4.8987214052822363e+00 + 9.0677764802804761e-02 1.4083005946263738e+00 -5.4203065565435615e+00 + 4.3369141856260068e-01 1.3217275662402124e+00 -5.9902734005839751e+00 + 7.1498609830972448e-01 1.1140719045912655e+00 -6.6106014803680448e+00 + 9.0925245944773703e-01 7.8595548762608480e-01 -7.2498542675548139e+00 + 1.0073906182777947e+00 3.5148752821085427e-01 -7.8728304549850909e+00 + 9.8955354915734950e-01 -1.6368960693333046e-01 -8.4478180666353158e+00 + 1.0352139290220281e+00 -5.2112858477955593e-01 -8.8720839794954820e+00 + id 12038 + loc 1.3831031322479248e-01 3.7129398435354233e-02 384 + blend 0.0000000000000000e+00 + interp 3.8861909739264450e-01:3.5749071218499034e-01:1.1921524559042052e-02:3.8861521120167059e-01:7.2382114153770105e-01:2.2687257443926886e-01:1.2945503359491459e+00:3.3735507740767362e-01:1.9873014797570148e+00:3.4444512367034047e-01:2.6392827933652629e+00:3.1767823157309699e-01:3.3014663836835911e+00 + CVs 20 + -3.7493869804820629e-01 1.6076485912369221e-01 -1.2008232462187414e+00 + -7.0022975338517657e-01 1.6672433455830266e-01 -1.9901600550664416e+00 + -1.0365331465857619e+00 1.2909232280991378e-01 -2.6507044318527266e+00 + -1.4186876978443581e+00 7.7269622005093630e-02 -3.3061778854452508e+00 + -1.8321493628976677e+00 -9.8586698830408492e-03 -3.9559530479606408e+00 + -2.2634400098164735e+00 -1.5384176765496116e-01 -4.5938715008219573e+00 + -2.7062212670094143e+00 -3.7689755356264920e-01 -5.2011958034164909e+00 + -3.1492359467867361e+00 -6.9777913999529328e-01 -5.7533335699476238e+00 + -3.5739183414833322e+00 -1.1232745480017621e+00 -6.2234307111831333e+00 + -3.9662582293679409e+00 -1.6366970547937112e+00 -6.5828712776417149e+00 + -4.3148220749589807e+00 -2.2075993878540809e+00 -6.8087769001322940e+00 + -4.6081095325992800e+00 -2.8006565422849303e+00 -6.8991957258325023e+00 + -4.8438584419199611e+00 -3.3821677035159161e+00 -6.8772557660867761e+00 + -5.0310461828783462e+00 -3.9280023801432615e+00 -6.7742068484966884e+00 + -5.1859130222614365e+00 -4.4222106831139207e+00 -6.6180607809614589e+00 + -5.3212256923702350e+00 -4.8568074751244756e+00 -6.4310695487924114e+00 + -5.4418555387071921e+00 -5.2324072939210815e+00 -6.2311028818920278e+00 + -5.5531916714243330e+00 -5.5522144435903735e+00 -6.0365939331126466e+00 + -5.7587001683702450e+00 -5.9096161685848578e+00 -5.9158534278157022e+00 + id 12039 + loc 2.1399641036987305e-01 1.1840227991342545e-01 1053 + blend 0.0000000000000000e+00 + interp 3.5328389325070320e-01:2.3400370078129346e-01:1.2324661731265951e-01:2.1814084351430479e-01:1.2614122459498138e+00:2.1506286038831263e-01:3.0019120754204440e+00:3.5328036041177069e-01:3.7250717703883396e+00 + CVs 20 + 4.1861907729929726e-01 4.5170800347602424e-01 2.9479102263923057e-02 + 7.9504595011374513e-01 8.8664304495570800e-01 1.2884113732638736e-01 + 1.1462083066472397e+00 1.3174845899615022e+00 2.5173722423138578e-01 + 1.4800550858079577e+00 1.7350908327991226e+00 4.1385448560643573e-01 + 1.8027619855611134e+00 2.0917744574113950e+00 6.4582923287690419e-01 + 2.1177534782085332e+00 2.3119892731229985e+00 9.5638987117111229e-01 + 2.4036329360660429e+00 2.3012818804632760e+00 1.3092141992047752e+00 + 2.5952615173137552e+00 2.0236941978051672e+00 1.6102071198545858e+00 + 2.6551193298870555e+00 1.6018728881248343e+00 1.8015741613917537e+00 + 2.6181749337872677e+00 1.1494471298209901e+00 1.9762883822252171e+00 + 2.5041869410422297e+00 7.0281148314861797e-01 2.2382792575695456e+00 + 2.4409216889901173e+00 4.0733230270338561e-01 2.6472171579764812e+00 + 2.7799748792393810e+00 5.8628361794594519e-01 3.0290899622712351e+00 + 3.2342466541494899e+00 9.2048042799773655e-01 2.6984357085780415e+00 + 3.4287211523010797e+00 8.6848553527995975e-01 2.4132536084047969e+00 + 3.7354172114395991e+00 7.0823369624580024e-01 2.5119984542231464e+00 + 4.1136106091149269e+00 3.8864955778722265e-01 2.9364718089303641e+00 + 4.3736831487343135e+00 -5.5834086992446075e-02 3.5051149726681796e+00 + 4.7459473736344684e+00 -3.3618030830225409e-01 3.8869025023053521e+00 + id 12040 + loc 3.4133762121200562e-01 6.5011113882064819e-01 1075 + blend 0.0000000000000000e+00 + interp 4.4576636339118120e-01:3.5711760671961817e-01:2.3654686067819308e-01:3.1117867013521228e-01:9.0978357348325323e-01:4.4576190572754731e-01:1.3661348004165097e+00:3.1437886700537615e-01:2.0068262795127425e+00:3.0916285345863870e-01:3.0092085878541881e+00:3.6544089129617069e-01:3.9540975052944187e+00 + CVs 20 + 1.0738020750204731e-01 2.4229160809901884e-01 -2.0864119998894493e-01 + 2.1983994355619577e-01 4.7214903078245102e-01 -4.1062496088341544e-01 + 3.3099617135826492e-01 6.9077263861473492e-01 -5.9790754748318886e-01 + 4.3893804195973296e-01 9.0124238251187483e-01 -7.7302500668138785e-01 + 5.4416676730052049e-01 1.1065104150463294e+00 -9.4295152858119990e-01 + 6.4523803250928413e-01 1.3088181291787102e+00 -1.1092463146892280e+00 + 7.3790266648975145e-01 1.5121834575395101e+00 -1.2701013957974028e+00 + 8.1696226813342632e-01 1.7227972657852972e+00 -1.4257409481624272e+00 + 8.8246873584007146e-01 1.9464408340110040e+00 -1.5834563915614106e+00 + 9.4323149969190923e-01 2.1854565830071753e+00 -1.7598507167618700e+00 + 1.0149406763635775e+00 2.4348709661116876e+00 -1.9813944539590709e+00 + 1.1154603509415326e+00 2.6729036344507819e+00 -2.2810579415777381e+00 + 1.2449066146603314e+00 2.8475560026340698e+00 -2.6772441524730382e+00 + 1.3680957215803322e+00 2.8960180574941736e+00 -3.1308067326599933e+00 + 1.4568941448958834e+00 2.8059793469903664e+00 -3.5705341102642842e+00 + 1.5204907485115191e+00 2.5999325840835459e+00 -3.9685261066217077e+00 + 1.5675152805807897e+00 2.2926352093138140e+00 -4.3339691320531584e+00 + 1.5638021531726065e+00 1.9075031678722176e+00 -4.6661432637547202e+00 + 1.4498553554373372e+00 1.5817284354830126e+00 -4.8637086358308901e+00 + id 12041 + loc 4.8542326688766479e-01 8.6195462942123413e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9420158350563304e-01:3.5948058931264854e-01:6.2194802605754140e-01:4.9419664148979803e-01:1.0717441884009684e+00:4.6999448921944098e-01:1.4689596230155200e+00:3.2989723456813613e-01:2.0353408544125857e+00:3.6692356481002425e-01:2.6160334397114209e+00:4.3161181287427303e-01:3.0992771933425987e+00:4.0589897231397204e-01:3.9444674763005185e+00 + CVs 20 + 1.1873645794743866e-01 8.3311020848271078e-01 -2.8875187611308595e-01 + 3.0433376773929244e-01 1.7100342059144014e+00 -5.3949687045244632e-01 + 5.7651073148117427e-01 2.6291068234820387e+00 -6.5260080608241167e-01 + 9.4140151403797911e-01 3.5248010482565721e+00 -5.2500111610425826e-01 + 1.3801352602561694e+00 4.2687235697695289e+00 -1.0395717397240034e-01 + 1.8300873866355922e+00 4.7199636332835606e+00 5.6489869618622235e-01 + 2.2072278666218157e+00 4.8010733475303278e+00 1.3545911969043618e+00 + 2.4648101481416402e+00 4.5435366847924019e+00 2.1240818462019471e+00 + 2.6187054587155716e+00 4.0531741755006445e+00 2.7534588377721847e+00 + 2.7371742599007862e+00 3.4405559826622669e+00 3.1912176414410718e+00 + 2.8424256948961490e+00 2.7275450659134988e+00 3.5159715056585643e+00 + 2.7981548843012094e+00 1.8976372094162468e+00 3.7979404300714510e+00 + 2.5128495584622086e+00 9.8460489792809824e-01 3.9520111949614849e+00 + 2.0311044131995177e+00 5.1822415113174980e-02 3.9292942053550055e+00 + 1.4325707799673788e+00 -7.9473132121328471e-01 3.7961758647606363e+00 + 8.9566290078148025e-01 -1.6134602198441435e+00 3.7934452396862910e+00 + 8.4194045772512771e-01 -2.4799388007585015e+00 4.2667008199266840e+00 + 1.3330488980325590e+00 -2.8919274533545871e+00 5.2309998067708676e+00 + 1.7115805105545097e+00 -2.7157166935148855e+00 6.3193157553184287e+00 + id 12042 + loc 1.0603331774473190e-01 5.8868998289108276e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8853111130224777e-01:3.7710346639075082e-01:7.9903115339514597e-01:3.8515749627146845e-01:1.2541031373540221e+00:3.7938382407182847e-01:2.0003644564263765e+00:3.8852722599113476e-01:2.6042170346824376e+00:2.8466056197112366e-01:3.0138490702647420e+00:2.5627275153573831e-01:3.9626817580424216e+00 + CVs 20 + 1.2310511418365885e-01 3.4126896553237884e-01 1.1565119150590231e-01 + 2.3362273982250842e-01 6.3367220186614825e-01 1.6353780284641289e-01 + 3.3459813098673319e-01 9.1278123574478021e-01 1.8762961228527081e-01 + 4.2802633723129468e-01 1.1925891651628147e+00 2.0780957586286397e-01 + 5.1951935655524673e-01 1.4687493238153921e+00 2.1517060999972115e-01 + 6.1755221016000084e-01 1.7385127607710373e+00 1.9683727636462411e-01 + 7.3324278154071432e-01 1.9984579461050953e+00 1.3284780920533046e-01 + 8.7472062291961150e-01 2.2353206840417164e+00 -3.1070144629063989e-03 + 1.0348255898434817e+00 2.4192229480999989e+00 -2.3005234253978957e-01 + 1.1890785967389617e+00 2.5175142531044905e+00 -5.4237406921163245e-01 + 1.3125960324358064e+00 2.5111111298934783e+00 -9.1696864573226855e-01 + 1.3878566832875376e+00 2.3949723007434240e+00 -1.3196141272879254e+00 + 1.4106268775978905e+00 2.1946201534995611e+00 -1.7026421537261971e+00 + 1.3984945767567873e+00 1.9801867993588083e+00 -2.0216553952010545e+00 + 1.3841349904167202e+00 1.8667180494055606e+00 -2.2276235699883511e+00 + 1.4071885947125768e+00 1.9817091442221315e+00 -2.1845497374628855e+00 + 1.4594545057142374e+00 2.1930373429687728e+00 -1.6204425200692718e+00 + 1.3183512114264444e+00 1.8223178872355410e+00 -5.8691052510287578e-01 + 1.3377734817004980e+00 1.9548301551930005e+00 -6.1381755340044608e-01 + id 12043 + loc 7.8501230478286743e-01 1.7910695075988770e-01 411 + blend 0.0000000000000000e+00 + interp 4.4878253309558769e-01:4.1064137439485998e-01:1.4185183401491885e-02:3.8120888864628794e-01:8.7791021496951060e-01:4.4877804527025678e-01:1.2432080619739727e+00:3.1864754613447410e-01:1.9989225266243231e+00:3.3398914663782392e-01:2.9938206312760349e+00:3.4312550008218301e-01:3.5289022750815846e+00 + CVs 20 + -6.4135255140758674e-01 2.4194010958553602e-01 1.5530944666006904e-01 + -1.1584672082721672e+00 3.7826637934613550e-01 2.7981725558922865e-01 + -1.6427040697566799e+00 4.6613098806396014e-01 3.6878227229606775e-01 + -2.1407467216293505e+00 5.2266029034809303e-01 4.2311158544217387e-01 + -2.6440682066197367e+00 5.3981374215238986e-01 4.4249658204640030e-01 + -3.1447751682406699e+00 5.1317346859591950e-01 4.3377002519404040e-01 + -3.6353133409457463e+00 4.4007504708067446e-01 4.0703722935020314e-01 + -4.1068471095630494e+00 3.1735763978850406e-01 3.7203810858823660e-01 + -4.5515931190878227e+00 1.4182922770679007e-01 3.3940245239387212e-01 + -4.9612775634749440e+00 -8.7939059896447125e-02 3.2215618718165728e-01 + -5.3189597870792422e+00 -3.6565983382896139e-01 3.2998933053914015e-01 + -5.6084523663639638e+00 -6.7241930917693660e-01 3.6231264638446836e-01 + -5.8333803641264517e+00 -9.8814425255333838e-01 4.1438001550757403e-01 + -6.0114085080545365e+00 -1.3045411862870284e+00 4.8652240188783691e-01 + -6.1561140589192727e+00 -1.6188545416225342e+00 5.8067796890560819e-01 + -6.2722177923793243e+00 -1.9248766489872993e+00 6.9394530578110680e-01 + -6.3624279940181694e+00 -2.2178149652388099e+00 8.1953427792346112e-01 + -6.4321181305353221e+00 -2.5058366437141353e+00 9.5339652347637194e-01 + -6.5044092336023827e+00 -2.8186690646179131e+00 1.1006026994550404e+00 + id 12044 + loc 5.1434516906738281e-01 7.1128737926483154e-01 403 + blend 0.0000000000000000e+00 + interp 5.1700038393198178e-01:4.4015406660392759e-01:5.4165682433397278e-01:3.6661901278697290e-01:1.0928468968293032e+00:5.1699521392814252e-01:1.6738633592928100e+00:4.5601156998378733e-01:2.0012022604683155e+00:3.1569424031794774e-01:2.4740512233532437e+00:2.8284168347805089e-01:3.0075830246224262e+00:2.8940647285871335e-01:3.7595616541946999e+00 + CVs 20 + -6.9192954529735798e-02 3.1964888228149066e-02 -6.2672199223470837e-02 + -1.2042243234828293e-01 7.7889443418743876e-02 -1.2013686098535738e-01 + -1.7680220761589252e-01 1.2517763181659108e-01 -1.7533922422859549e-01 + -2.4058324774894810e-01 1.6583859440942589e-01 -2.2657830629643949e-01 + -3.0860094506217700e-01 2.0057311970508787e-01 -2.7433659299652541e-01 + -3.7797555553840634e-01 2.3124157904250353e-01 -3.1951935953864086e-01 + -4.4659127247658881e-01 2.6032104896728409e-01 -3.6310455454071605e-01 + -5.1295177962521943e-01 2.9025678773606156e-01 -4.0606195884376828e-01 + -5.7598416012553300e-01 3.2323597231681789e-01 -4.4919905039088792e-01 + -6.3499330842272994e-01 3.6111879095854033e-01 -4.9315724567661318e-01 + -6.8978332577284129e-01 4.0508985593029917e-01 -5.3898507267791651e-01 + -7.4107633669601092e-01 4.5547087854248658e-01 -5.8826778528443857e-01 + -7.9073797943170598e-01 5.1155674821384922e-01 -6.4313931925143086e-01 + -8.4226389064168450e-01 5.7178599822626563e-01 -7.0613870165852877e-01 + -9.0129972548478698e-01 6.3480876617340176e-01 -7.7930175772740562e-01 + -9.7455415066309625e-01 7.0084818907348423e-01 -8.6217341644239831e-01 + -1.0660606607241381e+00 7.7113755522104055e-01 -9.5160509049998165e-01 + -1.1797178873593437e+00 8.4562697123959329e-01 -1.0445971293580150e+00 + -1.1407048018569155e+00 8.9321053949960749e-01 -1.1018473067098582e+00 + id 12045 + loc 9.0870082378387451e-02 3.8786929845809937e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5232806052446678e-01:4.5232353724386154e-01:9.9411169601775540e-02:2.9784067178685841e-01:8.7814659923998539e-01:2.5579950015874370e-01:1.5730758568878012e+00:3.5585494628638858e-01:2.7574871284299527e+00:4.2728656898073158e-01:3.1499803467849103e+00:3.8262385220797523e-01:3.8515352257963547e+00 + CVs 20 + -2.5057525499570832e-01 3.1347331602932893e-01 -2.4009847678564106e-01 + -5.0764747728988269e-01 6.2767186004428355e-01 -4.5945038534228055e-01 + -7.9389156202992117e-01 9.3939631982851479e-01 -6.6233032619646448e-01 + -1.1200782407366994e+00 1.2420268606152323e+00 -8.4208459157356064e-01 + -1.4873444794028727e+00 1.5234777866202158e+00 -9.8629114794715189e-01 + -1.8907696073061429e+00 1.7685317367278908e+00 -1.0825414943374481e+00 + -2.3186941362134386e+00 1.9626663882181130e+00 -1.1226154420540828e+00 + -2.7538156803860221e+00 2.0945322249795986e+00 -1.1050146466125133e+00 + -3.1767651870757492e+00 2.1581701153089314e+00 -1.0357208709294048e+00 + -3.5717807223866824e+00 2.1525030341913149e+00 -9.2765599589683290e-01 + -3.9306838365678676e+00 2.0827455213909412e+00 -7.9921284366886280e-01 + -4.2606858708027335e+00 1.9637691015560668e+00 -6.7377593903731103e-01 + -4.5787467649983657e+00 1.8048227311822731e+00 -5.7120519814471060e-01 + -4.8960505224091087e+00 1.6081238952897476e+00 -5.0606939766789161e-01 + -5.2151671927637011e+00 1.3731686884842595e+00 -4.8877033379916413e-01 + -5.5297116693826087e+00 1.1015842394751276e+00 -5.2469937424851465e-01 + -5.8290366553549813e+00 7.9625138487223024e-01 -6.1245210412051343e-01 + -6.0984303792437187e+00 4.6356184334348649e-01 -7.4435932803344629e-01 + -6.2940580543648341e+00 2.0659338944952665e-01 -8.9553493958310415e-01 + id 12046 + loc 6.3030409812927246e-01 4.3946552276611328e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5765039005537961e-01:4.5764581355147910e-01:1.6897500273642552e-01:4.3421873565707186e-01:8.2226533018120518e-01:2.6512862902159429e-01:1.0539677595893906e+00:3.5607649370604488e-01:2.0008224943656097e+00:4.3462331139989990e-01:2.9406002285163626e+00:2.9580622083034691e-01:3.2169515069908581e+00:3.6863911044771586e-01:3.9188507796217111e+00 + CVs 20 + 1.6103470265557601e-01 3.8735454997666352e-01 -1.0915083158774014e-01 + 3.1489160664338345e-01 7.3502250681954351e-01 -1.9277369678320233e-01 + 4.6730989106628351e-01 1.0664151210294985e+00 -2.9454587065963900e-01 + 6.2432566245172660e-01 1.3870724452612635e+00 -4.2641348457124539e-01 + 8.1030910308080428e-01 1.6978258962540642e+00 -5.6494258324899460e-01 + 1.0465522394410245e+00 1.9949740063125021e+00 -6.8283278839848249e-01 + 1.3329140267586832e+00 2.2653577225505459e+00 -7.6154087811002391e-01 + 1.6527332200702998e+00 2.4976628515199177e+00 -7.8819587429428428e-01 + 1.9884008865312093e+00 2.6792319474783084e+00 -7.2679609243068843e-01 + 2.3092930040983983e+00 2.7766866031101678e+00 -5.2527357445908951e-01 + 2.5752139198322528e+00 2.7565874435656816e+00 -1.7573486766414437e-01 + 2.7724414246080484e+00 2.5760391616853351e+00 2.7225438621886044e-01 + 2.9176641754028889e+00 2.2043282070584649e+00 6.8736161404040552e-01 + 3.0255456576811310e+00 1.7257009305139657e+00 9.7952577806898733e-01 + 3.0867389987878653e+00 1.2597920658837105e+00 1.2238701660060225e+00 + 3.0956471625616744e+00 9.1001603379245921e-01 1.5225842187146332e+00 + 3.0914015297887323e+00 7.6181507039686913e-01 1.8955274056076656e+00 + 3.1087012498810083e+00 7.5644206689519489e-01 2.3140324040087576e+00 + 3.1112843532118011e+00 5.7820254915238822e-01 2.8591981515980116e+00 + id 12047 + loc 4.0037351846694946e-01 2.4698771536350250e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5102386395332505e-01:3.2289529355541285e-01:5.5353844914375339e-03:3.0734714553558373e-01:9.8988304811224681e-01:3.4556625600593310e-01:1.5562586058045302e+00:4.5101935371468554e-01:2.0000081660579769e+00:4.0889897491307903e-01:2.6130995157384218e+00:3.4216401004421920e-01:3.1588124467761580e+00 + CVs 20 + -6.0555993936306840e-02 3.7313640520383839e-01 -2.6944243016719538e-01 + -1.8281047088214306e-01 7.3295943360539595e-01 -5.5380416771396324e-01 + -3.6056168099547214e-01 1.0720541848099077e+00 -8.5452538787871857e-01 + -6.0213173781235318e-01 1.3817345989958199e+00 -1.1578655786390877e+00 + -9.0912042533387116e-01 1.6456495180831441e+00 -1.4465125342422804e+00 + -1.2621790777827124e+00 1.8456134620013782e+00 -1.7202350825612445e+00 + -1.6340058724750615e+00 1.9729196121071417e+00 -1.9907291832450982e+00 + -1.9987696490509002e+00 2.0258806949297310e+00 -2.2644702618172241e+00 + -2.3244959754648917e+00 1.9963769437761476e+00 -2.5382669751692934e+00 + -2.5820301719714740e+00 1.8748607261965837e+00 -2.7951545161625631e+00 + -2.7749360267478349e+00 1.6647675204403900e+00 -2.9949691670176386e+00 + -2.9214850561249155e+00 1.3805478480773152e+00 -3.0721438515798098e+00 + -3.0194525470162166e+00 1.0845957654269347e+00 -2.9889166195910541e+00 + -3.0949277067002514e+00 8.4269923914573996e-01 -2.8275710734004678e+00 + -3.1805484369467734e+00 6.4918326796827719e-01 -2.6451912237142294e+00 + -3.2696015908092146e+00 5.7701240558088762e-01 -2.4110687053046429e+00 + -3.3736424564142640e+00 7.8969438452971974e-01 -2.2399394089431595e+00 + -3.5285842057670793e+00 9.8214997958142736e-01 -2.2568822251841558e+00 + -3.7061886538455040e+00 1.0350629855559568e+00 -2.0481339024153034e+00 + id 12048 + loc 1.0603331774473190e-01 6.2546497583389282e-01 1055 + blend 0.0000000000000000e+00 + interp 2.0694829822996161e+00:7.9118663662153399e-01:6.5009470362240451e-01:3.2737177784030536e-01:7.8794874470012966e-01:3.2018232824867104e-01:1.2241899155777709e+00:5.1478178158114396e-01:1.8624127590557111e+00:5.9624132544254282e-01:2.0849366969384571e+00:1.0140674052803116e+00:2.3144473093697728e+00:1.4895447812138489e+00:2.5060524534394002e+00:2.0694729822996161e+00:2.6274753594417044e+00 + CVs 20 + -2.0150089123321802e-01 3.5191862043270594e-01 -3.7939442684483471e-01 + -2.8895469304266114e-01 6.2583043543458161e-01 -7.0331645144385679e-01 + -3.1800164793152030e-01 8.7125975751521656e-01 -1.0019154426519024e+00 + -3.1226481525519689e-01 1.1112632287700881e+00 -1.2783377090607457e+00 + -2.8250556601393007e-01 1.3462413754396274e+00 -1.5183003008609743e+00 + -2.6648098643814833e-01 1.5743348603836547e+00 -1.7187941509745612e+00 + -3.0295549136068001e-01 1.7924980472469063e+00 -1.8932515591384078e+00 + -4.0513396892898590e-01 1.9957105254824690e+00 -2.0630166612194878e+00 + -5.5874975358157974e-01 2.1642544322597290e+00 -2.2408796891760563e+00 + -7.2837988188027913e-01 2.2730614181750739e+00 -2.4258535952928724e+00 + -8.8208118428340687e-01 2.3140806399928948e+00 -2.6137128814313804e+00 + -1.0094682457758744e+00 2.2938268250453739e+00 -2.8093104012307930e+00 + -1.1051313751676477e+00 2.2283402787667175e+00 -3.0070330797032350e+00 + -1.1706262380748784e+00 2.1449611981907468e+00 -3.1902286391044354e+00 + -1.2200903468037116e+00 2.0679673156610430e+00 -3.3517757331457867e+00 + -1.2803126975339973e+00 2.0279881415193075e+00 -3.5061822099339466e+00 + -1.3939446382808893e+00 2.0347708049511910e+00 -3.7031268463374962e+00 + -1.5552611780441021e+00 2.0108960637118751e+00 -3.9649440935551321e+00 + -1.4669362069394545e+00 1.9115532046171546e+00 -3.9801436883892007e+00 + id 12049 + loc 7.8326493501663208e-02 4.7137963771820068e-01 406 + blend 0.0000000000000000e+00 + interp 4.5697756032675219e-01:3.4169949347866285e-01:9.3204242233788470e-01:2.9511362509562744e-01:1.7863541329094335e+00:3.8813246800297763e-01:2.0926844012486168e+00:3.4847890467645365e-01:2.6405254991996179e+00:4.5697299055114893e-01:3.0977333489467926e+00:3.9504568187837202e-01:3.9834881536467259e+00 + CVs 20 + -2.8429058668497893e-02 2.8093057795704934e-01 -1.5254851741127845e-01 + -5.4506173911594388e-02 5.4205208392786064e-01 -1.8177492875028309e-01 + -7.1279742811508243e-02 7.5223277360156904e-01 -1.9074578002151926e-01 + -9.4685299202986781e-02 9.4911799676487107e-01 -1.8368011104276610e-01 + -1.2235995634236849e-01 1.1307234301586295e+00 -1.5428179973170691e-01 + -1.4815973383118275e-01 1.2935624372089274e+00 -9.8291248636702799e-02 + -1.6046315233405084e-01 1.4329167995594183e+00 -1.2375212550795212e-02 + -1.3958174090751987e-01 1.5399704733436410e+00 1.0296680425864857e-01 + -5.6679917923922948e-02 1.5969230480857772e+00 2.3515777837991514e-01 + 1.1028431844735676e-01 1.5764614085498132e+00 3.3994568379733298e-01 + 3.2577118393575083e-01 1.4717078059898041e+00 3.4212411618551253e-01 + 4.9569248985885628e-01 1.3349561650527275e+00 2.3267446207288789e-01 + 5.8613644667604858e-01 1.2146633720146354e+00 9.7843767116067626e-02 + 6.2274986063346516e-01 1.1141049553961002e+00 -8.4930845397279131e-03 + 6.1395422230474272e-01 1.0447753485175049e+00 -9.0389185585965592e-02 + 5.5580570812203356e-01 1.0200111239575631e+00 -1.5557105832472151e-01 + 4.5730418162428316e-01 1.0148367856862091e+00 -1.9567729544983603e-01 + 3.5706713341644108e-01 9.7136821803737861e-01 -2.0232630375338623e-01 + 3.7403306358016147e-01 7.7985860784031924e-01 -1.5537302924106711e-01 + id 12050 + loc 4.5191520452499390e-01 4.7346633672714233e-01 411 + blend 0.0000000000000000e+00 + interp 4.2065226179575527e-01:4.2064805527313731e-01:8.5859931262542544e-02:4.1408514823434861e-01:9.1026448468934362e-01:2.5334412458814198e-01:1.5687787712621293e+00:3.3043885758827557e-01:2.4616087307422685e+00:3.1487819589486238e-01:3.2483038890210714e+00 + CVs 20 + -7.0863166452641388e-02 1.4914738571301869e-01 -7.8522273175334623e-01 + -1.4795029997976927e-01 2.0293790277955931e-01 -1.3393549597357768e+00 + -2.1610014872345076e-01 2.2975866148349799e-01 -1.8356455502573936e+00 + -2.7088500100246071e-01 2.5139578312806665e-01 -2.3413050324045712e+00 + -3.0877998441258414e-01 2.5955082040406219e-01 -2.8570296814721878e+00 + -3.2967543422208379e-01 2.4612824210925244e-01 -3.3816024072413282e+00 + -3.3927413668561801e-01 2.0257573709554610e-01 -3.9117400469299706e+00 + -3.5023441337136346e-01 1.1715443366232869e-01 -4.4425951631328893e+00 + -3.7611526485499369e-01 -2.3627170308878398e-02 -4.9651503823650724e+00 + -4.3053120845350379e-01 -2.2902426871035697e-01 -5.4607788524212406e+00 + -5.2399277225598406e-01 -4.9896224186645211e-01 -5.9051085860607921e+00 + -6.5675923161222993e-01 -8.2536733791285521e-01 -6.2838665592705034e+00 + -8.2022650525706431e-01 -1.1954067057756079e+00 -6.5967926076097285e+00 + -1.0033057051679171e+00 -1.5905673280811072e+00 -6.8477323540291408e+00 + -1.1936452762727874e+00 -1.9916536460480918e+00 -7.0421848003218654e+00 + -1.3765712101227170e+00 -2.3902219853643154e+00 -7.1890620505865082e+00 + -1.5384139040284326e+00 -2.7831728607759740e+00 -7.2971230081576346e+00 + -1.6722310687503545e+00 -3.1512974210124645e+00 -7.3766358000038457e+00 + -1.7724998791714657e+00 -3.4910171850174132e+00 -7.4650007482646323e+00 + id 12051 + loc 6.0078889131546021e-01 4.3946552276611328e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0011167764302433e-01:4.0441292063852141e-01:1.5210489380557868e-01:3.8958576958275704e-01:8.4207692583649707e-01:5.0010667652624796e-01:1.3344091065603567e+00:3.2569979190552334e-01:1.9999589839045928e+00:4.5390335134754289e-01:2.3395070971165319e+00:3.9469314714360110e-01:2.9606845556179939e+00:3.4306644963696747e-01:3.8977314075778531e+00 + CVs 20 + 9.7001328272645279e-02 3.7464831367623447e-01 -1.1608702046985371e-01 + 1.6364224726206239e-01 7.1066082538516140e-01 -1.7864879042728127e-01 + 2.2387120273119482e-01 1.0426086039231497e+00 -2.2324172221376953e-01 + 2.9224883513511724e-01 1.3852631499131027e+00 -2.6753662358260089e-01 + 3.8814947108610287e-01 1.7421262547465548e+00 -3.0510899904555233e-01 + 5.3083719009837338e-01 2.1085510483817553e+00 -3.2385606691566138e-01 + 7.3234639781025213e-01 2.4685696483474349e+00 -3.0652882098912304e-01 + 9.9235128153278818e-01 2.7989259205806953e+00 -2.3260223019282145e-01 + 1.2997694290864408e+00 3.0762716419052860e+00 -7.3370840652279501e-02 + 1.6329147656539496e+00 3.2702016533775069e+00 2.0564040520381544e-01 + 1.9720038204967227e+00 3.3475411958192041e+00 6.1015897880217196e-01 + 2.3137450048210004e+00 3.2787867271813540e+00 1.1110402207903594e+00 + 2.6592240797761169e+00 3.0324452445419321e+00 1.6611170033556690e+00 + 3.0082636394143005e+00 2.5662687808836511e+00 2.2108006106289166e+00 + 3.3607437917155072e+00 1.8655863463785551e+00 2.6627899230680763e+00 + 3.6823584129085463e+00 1.0305887407986896e+00 2.8782375682945229e+00 + 3.9657990432672872e+00 1.9986605607312291e-01 2.8247099493242658e+00 + 4.2672660586711766e+00 -4.6974111921863404e-01 2.5576877145787846e+00 + 4.5130699114844166e+00 -6.8206476863490662e-01 2.2519206622723589e+00 + id 12052 + loc 7.1640723943710327e-01 2.9561021924018860e-01 397 + blend 0.0000000000000000e+00 + interp 5.0511008285558801e-01:2.6266102898891985e-01:1.8304271585569376e-01:3.4156245596914814e-01:1.0199288297900850e+00:3.3710792117084815e-01:1.8858167772110850e+00:5.0510503175475951e-01:2.5995224275771336e+00:3.1231658668867418e-01:3.1788625065165115e+00 + CVs 20 + -1.2092484757294526e+00 2.5720076497278582e-01 3.1692454461320485e-01 + -1.9738200289208849e+00 2.8313108679132626e-01 5.6317385089193184e-01 + -2.6135840174903739e+00 2.2727106379492781e-01 7.9153982157836744e-01 + -3.2471401258839898e+00 1.4247910707097960e-01 1.0254504846696415e+00 + -3.8699370342111110e+00 1.8872138765032964e-02 1.2734106022086948e+00 + -4.4822749902030949e+00 -1.5681727788682631e-01 1.5452630956297417e+00 + -5.0810359987948566e+00 -3.9885292975826786e-01 1.8473501465444970e+00 + -5.6548261861093359e+00 -7.2288224978358984e-01 2.1747215502139206e+00 + -6.1794467100974222e+00 -1.1465832333809951e+00 2.5119496189268569e+00 + -6.6143083446841962e+00 -1.6782693048431572e+00 2.8404566085073739e+00 + -6.9158001880334519e+00 -2.3020567346758494e+00 3.1430842180685863e+00 + -7.0615908606383231e+00 -2.9830663760343938e+00 3.4076457485531235e+00 + -7.0584821274010849e+00 -3.6817832386919456e+00 3.6224684173905572e+00 + -6.9286312682280009e+00 -4.3585029981848908e+00 3.7774076908564513e+00 + -6.6982394703998551e+00 -4.9748873630891621e+00 3.8648049040517787e+00 + -6.3954901154490971e+00 -5.5009644387483769e+00 3.8721753682782714e+00 + -6.0591609597623926e+00 -5.9219710871132900e+00 3.7935073602471006e+00 + -5.7374502608113422e+00 -6.2598414468399834e+00 3.6560896274909189e+00 + -5.5259854166442324e+00 -6.7539439690859773e+00 3.6057876784891532e+00 + id 12053 + loc 1.5235534310340881e-01 2.6890236139297485e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6639528426786625e-01:4.1014537347450258e-01:9.5587761821972150e-02:4.6639062031502360e-01:8.8314140813698339e-01:3.0206145412538726e-01:1.0771144056264528e+00:4.1419156333466534e-01:1.9797936816637893e+00:3.0811700644122197e-01:2.7062434866595071e+00:3.1131898906250516e-01:3.4738167944872109e+00 + CVs 20 + -1.8913706907643063e-01 3.9097683935215805e-01 -5.1334312653507796e-02 + -3.9427196879393939e-01 7.9214929245984089e-01 -7.2781427844395979e-02 + -6.0578970564632184e-01 1.2039283984938134e+00 -5.1911745095900685e-02 + -7.8984960425858775e-01 1.6284879116096336e+00 2.2477353590647342e-02 + -9.2793289267232482e-01 2.0450269323185388e+00 1.4541063621755754e-01 + -1.0742951271386822e+00 2.3637832044068752e+00 2.7646721691179915e-01 + -1.2774964148631518e+00 2.5281648466656308e+00 3.8275721145518726e-01 + -1.5744810176692408e+00 2.5930890496975416e+00 4.4125917915836504e-01 + -1.9719160332279440e+00 2.5602483704867622e+00 4.1636349590836480e-01 + -2.4080866586633776e+00 2.4158705539393135e+00 2.7191468991681361e-01 + -2.8039232298928245e+00 2.1843854037285979e+00 -6.0785257774411128e-03 + -3.0897274325084640e+00 1.9288964306968037e+00 -3.7468497859665673e-01 + -3.2459062913875116e+00 1.7217639168947856e+00 -7.4280557339579478e-01 + -3.3053920912823620e+00 1.6042598391002316e+00 -1.0542896297146125e+00 + -3.3165455432638753e+00 1.5891005618752778e+00 -1.3209654415885554e+00 + -3.3246589729149116e+00 1.6217039465594667e+00 -1.6267657074167823e+00 + -3.3629374924557451e+00 1.5503394664926027e+00 -2.0578308728171777e+00 + -3.3236069697083623e+00 1.2103470117571646e+00 -2.5472307699168670e+00 + -3.0953729932810137e+00 1.1823326918951667e+00 -2.6408446539158077e+00 + id 12054 + loc 3.1679368019104004e-01 6.8135386705398560e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3772302127258805e-01:3.0152741649304288e-01:4.3103930247423972e-01:4.0947259027599853e-01:1.0000120550563059e+00:3.5472081791040483e-01:1.6109402700703743e+00:3.4475446487012301e-01:2.0970088652139740e+00:4.1219350971706764e-01:2.8799555657308202e+00:3.7127628474168806e-01:3.3558682319214914e+00:4.3771864404237537e-01:3.9994853117090208e+00 + CVs 20 + 1.2419711173461905e-01 3.1536826521078348e-01 -1.5628760078892898e-01 + 2.5688386521491885e-01 6.4513162835167703e-01 -3.4467736741991950e-01 + 3.8713693936938143e-01 9.8178440751906004e-01 -5.3782030901664180e-01 + 5.0682733836655014e-01 1.3175791052887342e+00 -7.3050992175440843e-01 + 6.1208979780667350e-01 1.6449891410403186e+00 -9.3044938352032114e-01 + 7.0598387103155613e-01 1.9512452075779358e+00 -1.1468236667465863e+00 + 8.0133540080587407e-01 2.2204083565115291e+00 -1.3917881975713680e+00 + 9.1853738167324950e-01 2.4350963618062336e+00 -1.6760248179045869e+00 + 1.0779714071212263e+00 2.5762128253752103e+00 -2.0002487520599939e+00 + 1.2880915455995472e+00 2.6304460390418374e+00 -2.3506141188091578e+00 + 1.5404179484939617e+00 2.6022887890674680e+00 -2.7070143402202462e+00 + 1.8161636950854692e+00 2.5159943657202692e+00 -3.0549084547066077e+00 + 2.0944074928703285e+00 2.3992726597488048e+00 -3.3920056768220253e+00 + 2.3467833286540603e+00 2.2637244463483381e+00 -3.7252583346997001e+00 + 2.5234391253095438e+00 2.1221752718913209e+00 -4.0539768910582215e+00 + 2.5740075906064712e+00 2.0272256375462359e+00 -4.3427183606811246e+00 + 2.5192665981151365e+00 2.0189614797358191e+00 -4.5454926139539227e+00 + 2.4176932318219251e+00 2.0243361269432874e+00 -4.7382753973655642e+00 + 2.2594953928540598e+00 1.9240807197818699e+00 -5.1207709690051360e+00 + id 12055 + loc 7.1746982634067535e-02 7.4796460568904877e-02 403 + blend 0.0000000000000000e+00 + interp 4.8624282785833373e-01:3.0198586603825206e-01:4.2682130632902116e-01:3.0169590965791226e-01:1.4074531483772850e+00:4.8623796543005515e-01:2.0026668914866912e+00:3.8075018889211359e-01:2.6837303642784303e+00:4.7840355591075234e-01:3.0587704792624186e+00:3.5885603155572149e-01:3.9183143415690367e+00 + CVs 20 + -2.0285641875406601e-01 2.0784401084375650e-01 1.2811201515946941e-01 + -3.9894985500630881e-01 4.2096843439577475e-01 2.6011684032203763e-01 + -5.8871255828299773e-01 6.2048548487021815e-01 4.1425958432296850e-01 + -7.7073741101510818e-01 7.9064935464032593e-01 5.9797126172305670e-01 + -9.3977088291762301e-01 9.1969541547229450e-01 8.0741888981153298e-01 + -1.0881375680822412e+00 9.9787435751174569e-01 1.0350549081522114e+00 + -1.2098654840908361e+00 1.0210518614276500e+00 1.2710647823675363e+00 + -1.3037403471919167e+00 9.9044685862642257e-01 1.5034585808619434e+00 + -1.3734744745927037e+00 9.1149857530787126e-01 1.7198539268536008e+00 + -1.4265668925774171e+00 7.9269943158273193e-01 1.9151655235877763e+00 + -1.4700164765822343e+00 6.4282844992576971e-01 2.0911907285913451e+00 + -1.5072630968481302e+00 4.6872289961944347e-01 2.2534906004080977e+00 + -1.5399714789817929e+00 2.7343675513888732e-01 2.4096223547158448e+00 + -1.5759413597649363e+00 6.4052692561914704e-02 2.5567886348009217e+00 + -1.6237042457582684e+00 -1.4954467333395360e-01 2.6894766999617898e+00 + -1.6730522314015392e+00 -3.8238168588815968e-01 2.8263444786922123e+00 + -1.6969584657790600e+00 -6.8908764165769809e-01 3.0210600769305018e+00 + -1.7075305644886472e+00 -1.0741736135818716e+00 3.3228542475174354e+00 + -1.7807816753289216e+00 -1.3502509485328822e+00 3.5694419974826461e+00 + id 12056 + loc 6.7697777412831783e-03 4.9829560518264771e-01 384 + blend 0.0000000000000000e+00 + interp 1.8221649633901098e+00:8.1288661756966774e-01:1.0419331133101473e-01:3.4169449173078509e-01:2.7334563401476164e-01:5.3121524657712427e-01:8.6010461744809297e-01:4.0094862282732197e-01:1.5255436702909964e+00:1.6175098488169287e-01:1.9863096867158534e+00:1.5301258460914522e+00:2.0002161829254774e+00:1.8221549633901097e+00:2.0010969465267552e+00:1.2548213021246355e+00:2.0051700877770529e+00 + CVs 20 + -3.8830571213378617e-01 3.0566493858847432e-01 -1.2536979736460125e+00 + -6.8231360072221281e-01 3.8447809594883886e-01 -2.0069375318570195e+00 + -9.5681293568794779e-01 3.6554116624466454e-01 -2.6505896664407418e+00 + -1.2314693299226234e+00 3.0517111016898102e-01 -3.3249445390998402e+00 + -1.5085178962201500e+00 1.9621389404940948e-01 -4.0137463781774096e+00 + -1.7888636881741229e+00 2.8800006608490081e-02 -4.6980869698643337e+00 + -2.0683157430477350e+00 -2.1537340861171478e-01 -5.3530865145405881e+00 + -2.3386035793741460e+00 -5.4444622529665532e-01 -5.9490641778696354e+00 + -2.5850546026929893e+00 -9.4853405149434011e-01 -6.4571383915268292e+00 + -2.7926861524506013e+00 -1.4007124723121878e+00 -6.8573975232105573e+00 + -2.9603294602038330e+00 -1.8663566373068186e+00 -7.1469811114480821e+00 + -3.1022009876170129e+00 -2.3183889304552991e+00 -7.3432406434949442e+00 + -3.2372420754399558e+00 -2.7441104731191790e+00 -7.4759291064586808e+00 + -3.3805192936198312e+00 -3.1427678879878300e+00 -7.5751211232900761e+00 + -3.5424886457724858e+00 -3.5178830439618309e+00 -7.6625082199932564e+00 + -3.7311247694476091e+00 -3.8712141528971125e+00 -7.7478186540671006e+00 + -3.9476174739431773e+00 -4.2079170353576281e+00 -7.8274499062366489e+00 + -4.1786919793212380e+00 -4.5425088946730376e+00 -7.8813906312621498e+00 + -4.3768760293380291e+00 -4.9300932091644940e+00 -7.8232284340615834e+00 + id 12057 + loc 1.8263366818428040e-01 5.2732473611831665e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5768340381925526e-01:3.7918307558676606e-01:5.6025769476832132e-02:4.5767882698521711e-01:8.5784588056472610e-01:3.7472912560943122e-01:1.4746906428953641e+00:4.1707279866012492e-01:2.0614931529276248e+00:3.7569397030979368e-01:2.9051769953751529e+00:3.7762132750196808e-01:3.4410887551015943e+00 + CVs 20 + 2.1071016983376267e-01 5.9743667820683133e-01 -2.7560880902239077e-01 + 4.3848262785442349e-01 1.2020178032106290e+00 -5.1258618708396309e-01 + 6.9820061012303425e-01 1.8305645065406249e+00 -6.7747380241749011e-01 + 1.0239911865319997e+00 2.4718771584563157e+00 -7.5949275524282100e-01 + 1.4661459456011454e+00 3.0773772859566826e+00 -7.8954283341056097e-01 + 2.0572841614807977e+00 3.5700838963653960e+00 -8.3652186216622126e-01 + 2.7882039466997535e+00 3.8549811411925656e+00 -9.5343857610219018e-01 + 3.5906553043764418e+00 3.8401998853792136e+00 -1.1529033641483584e+00 + 4.3576563672268831e+00 3.4757540196596963e+00 -1.4123956535737998e+00 + 4.9884448658521663e+00 2.7380729250865534e+00 -1.6528443421755616e+00 + 5.3591080944892013e+00 1.6688274201658966e+00 -1.7308982789687131e+00 + 5.3928474637745545e+00 4.9780114901794659e-01 -1.5478555904410749e+00 + 5.1645178409394834e+00 -4.9423454049375287e-01 -1.1786588000976328e+00 + 4.8216988932412850e+00 -1.1791022246561367e+00 -7.9773325686241547e-01 + 4.5004896186397012e+00 -1.5751778720360818e+00 -5.2562686604423525e-01 + 4.3641184570544969e+00 -1.7447405854595555e+00 -3.9443301038527800e-01 + 5.2785802392804371e+00 -1.0010623125204900e+00 3.0261302011137142e-01 + 5.3408017234897276e+00 -1.6849868482815045e-01 4.6617042082909987e-01 + 5.2503024533168450e+00 1.3478409323535223e-01 6.3277565872495944e-01 + id 12058 + loc 8.0437231063842773e-01 2.7299460768699646e-01 1053 + blend 0.0000000000000000e+00 + interp 4.3125927991557234e-01:4.3125496732277319e-01:1.7243146044721824e-01:3.1349368435832442e-01:9.2283564685339359e-01:2.9224026370171619e-01:1.8158663410241911e+00:4.3033270820848024e-01:2.5869745497845598e+00:2.8309315700407101e-01:3.0029091020420875e+00:2.9906233135945981e-01:3.8486561398922432e+00 + CVs 20 + 1.5435054404250825e-01 3.6753196985654013e-01 -1.2932005815644362e-01 + 3.2003231684472733e-01 7.2395521723602663e-01 -2.4530036207384021e-01 + 5.0255873755061886e-01 1.0702034259965734e+00 -3.5859655376637312e-01 + 7.0838926381267009e-01 1.4002635957765508e+00 -4.7565139561799208e-01 + 9.4413363817685347e-01 1.7015740493914104e+00 -5.9773757389476934e-01 + 1.2115616720509428e+00 1.9608112921703389e+00 -7.2530777900487453e-01 + 1.5064814112784877e+00 2.1638421079254693e+00 -8.5915355373184288e-01 + 1.8221609785666373e+00 2.2999446242061246e+00 -9.9855825758132999e-01 + 2.1578802053341173e+00 2.3653525887677516e+00 -1.1362228404289088e+00 + 2.5195395704856360e+00 2.3613329527913320e+00 -1.2615345453148792e+00 + 2.9049600568183478e+00 2.2727667494933463e+00 -1.3593373115090834e+00 + 3.2680830634253821e+00 2.0642387992657234e+00 -1.4104807331624412e+00 + 3.5286370992482943e+00 1.7273132305553525e+00 -1.4289937757250317e+00 + 3.6100773325287356e+00 1.2787215392313014e+00 -1.4553711663940641e+00 + 3.4967113820116915e+00 7.2277946048694841e-01 -1.4791657786848671e+00 + 3.2465204462345683e+00 5.0179250216572505e-02 -1.3883315888301677e+00 + 2.9361268786342527e+00 -6.6776829114411063e-01 -1.0159948719676823e+00 + 2.6726119395301087e+00 -1.1831063963324335e+00 -3.4383446009469643e-01 + 2.6185461226163333e+00 -1.3012343678549625e+00 1.2661296383951681e-01 + id 12059 + loc 4.9353206157684326e-01 9.9686361849308014e-02 406 + blend 0.0000000000000000e+00 + interp 4.2657775062920528e-01:3.0330070913203944e-01:2.0111226029998319e-01:2.8902832877777451e-01:1.1148106152333725e+00:3.7775046836307818e-01:1.9693175298986838e+00:4.2657348485169899e-01:2.4926318474700784e+00:3.1086799617457828e-01:2.9995831652235143e+00:4.2228969052812154e-01:3.9006268329817222e+00 + CVs 20 + 6.9728985627573820e-02 1.3389131664385007e-01 -8.9431808657604597e-02 + 1.4285417221792907e-01 2.4333459903340379e-01 -1.4658463265908189e-01 + 2.1077572859969076e-01 3.4264054178146952e-01 -1.9853186152278951e-01 + 2.7115771123460319e-01 4.4388932854838153e-01 -2.5958665499822198e-01 + 3.2311151728889914e-01 5.4685707426746410e-01 -3.3217697264065071e-01 + 3.6576298421310766e-01 6.5054669494525386e-01 -4.1760727636763273e-01 + 3.9874914404149486e-01 7.5358168631866773e-01 -5.1584833051901047e-01 + 4.2295031754835549e-01 8.5475955905735101e-01 -6.2529181321820637e-01 + 4.3974641823217958e-01 9.5295861765989520e-01 -7.4371291476398682e-01 + 4.4819630014803219e-01 1.0461756625612799e+00 -8.6935667416245754e-01 + 4.4466412825055368e-01 1.1316227686224283e+00 -9.9949773206721571e-01 + 4.2674977893660582e-01 1.2075416482976347e+00 -1.1287895850289003e+00 + 3.9656076754552116e-01 1.2742296740062500e+00 -1.2514515994652371e+00 + 3.5823321655364943e-01 1.3322977326768961e+00 -1.3635526288419488e+00 + 3.1512865792989841e-01 1.3816251424493184e+00 -1.4601789828036402e+00 + 2.7163980500722024e-01 1.4226560185717831e+00 -1.5346416416585058e+00 + 2.3384678508745388e-01 1.4564523825934246e+00 -1.5841525845688056e+00 + 2.0603810441314624e-01 1.4835608015729980e+00 -1.6129302209792011e+00 + 1.6980716909707366e-01 1.4873931201797150e+00 -1.6146558297211671e+00 + id 12060 + loc 7.7865928411483765e-01 6.8470537662506104e-02 1076 + blend 0.0000000000000000e+00 + interp 4.1658257956469819e-01:3.5139735281801476e-01:6.3311588987556711e-01:3.4918058587921952e-01:1.0046568888197909e+00:3.7277155762307856e-01:1.9027665066389745e+00:4.1657841373890253e-01:2.2119451421131107e+00:3.7636971180623613e-01:2.9880705868033264e+00:3.1511932789040537e-01:3.5588560844543893e+00 + CVs 20 + -1.8386853359485145e-01 3.2634659196381932e-01 2.1977595741519484e-01 + -3.8869433567193679e-01 6.3846970980877749e-01 4.4339242594304368e-01 + -6.0498200484378573e-01 9.3053809264554510e-01 6.8578654884390600e-01 + -8.1807102864093284e-01 1.1977212449658603e+00 9.5660695857774058e-01 + -1.0124068235371095e+00 1.4299049562089656e+00 1.2546250483563515e+00 + -1.1878773088980794e+00 1.6162980849181896e+00 1.5659129465464359e+00 + -1.3619127649595177e+00 1.7578808870664040e+00 1.8782087303447617e+00 + -1.5519206084663932e+00 1.8651097011026747e+00 2.1849446886352690e+00 + -1.7649145609044243e+00 1.9490670225165025e+00 2.4779484235006439e+00 + -2.0049000466918661e+00 2.0170256253799108e+00 2.7533140668945140e+00 + -2.2831957878763682e+00 2.0653198048580874e+00 3.0173377722721861e+00 + -2.6163719700338448e+00 2.0673124511419934e+00 3.2840772826329880e+00 + -2.9994762583860903e+00 1.9579067070510601e+00 3.5717318976528563e+00 + -3.3601244495375542e+00 1.6673619543897618e+00 3.8751361492741938e+00 + -3.6155156173854492e+00 1.2095988692072672e+00 4.1609912182530611e+00 + -3.7325668280479167e+00 5.9099444427862768e-01 4.4192791165148719e+00 + -3.5536188093404140e+00 -2.5701159798278117e-01 4.6372031961827451e+00 + -2.8282652718186814e+00 -1.0140656715657281e+00 4.8154376355110360e+00 + -2.5284444041061906e+00 -1.1970243388697552e+00 5.0266241978295652e+00 + id 12061 + loc 5.1140743494033813e-01 8.8279795646667480e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8854487394456305e-01:3.2430767734220167e-01:7.6694213301578107e-01:3.7073640095900212e-01:1.4966239360625266e+00:3.5121288147441349e-01:2.3186991410628144e+00:3.8854098849582364e-01:3.0438803670051970e+00:2.9858600363910115e-01:3.9858307160465674e+00 + CVs 20 + -1.7411210605845423e-01 3.1455692297380994e-01 2.8293409882237991e-01 + -3.4865942994674071e-01 6.1878298992781799e-01 5.1536557756545631e-01 + -5.0856890344640915e-01 9.3963886869786750e-01 7.3935750006525358e-01 + -6.5741930581170649e-01 1.2878267573608313e+00 9.6442551107279284e-01 + -8.2061962447528825e-01 1.6603625260123083e+00 1.1707134436326634e+00 + -1.0242491136779599e+00 2.0474325651719045e+00 1.3309864283943886e+00 + -1.2866163580440870e+00 2.4292737879767250e+00 1.4078943597813416e+00 + -1.6070899682237894e+00 2.7696890451773060e+00 1.3450304579196020e+00 + -1.9318908113945361e+00 3.0006506531001671e+00 1.0865305274102870e+00 + -2.1674869007065651e+00 3.0696699294194008e+00 6.7006501683079445e-01 + -2.2941860414553914e+00 2.9725419970752585e+00 1.7525716355962961e-01 + -2.3410615532408694e+00 2.6757259805768343e+00 -3.3035718136530678e-01 + -2.3349990199335844e+00 2.1966226718364830e+00 -7.3914637937195604e-01 + -2.2834218080120148e+00 1.7000596186168253e+00 -1.0274087371009397e+00 + -2.1874364513359450e+00 1.3359865526770829e+00 -1.2812789885077245e+00 + -2.0879731680406137e+00 1.1908797045921653e+00 -1.5328756979763556e+00 + -2.0556053778459087e+00 1.2691731992415543e+00 -1.7224081126230963e+00 + -2.0759182048131444e+00 1.3995898006116061e+00 -1.8329938265794568e+00 + -1.9598133886665634e+00 1.3237766874451504e+00 -2.1406520272903404e+00 + id 12062 + loc 9.7628754377365112e-01 4.2265143990516663e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7507292425256342e-01:3.0389487879802546e-01:1.0878028131819262e-02:4.7506817352332092e-01:4.9860335571243342e-01:3.8284630435679423e-01:1.0610666480402466e+00:3.0060689411165858e-01:2.0111781893010590e+00:3.9207705656969366e-01:2.6770070929343008e+00:3.4453644957810481e-01:3.0269599362948494e+00 + CVs 20 + -1.8237505883480346e-01 1.3544862884783032e-01 2.2715760881837027e-01 + -3.3543805015484218e-01 3.2625483851746678e-01 4.7244514374583546e-01 + -4.7388663059853575e-01 5.4626074773082589e-01 7.1787611516474770e-01 + -6.1247165693058259e-01 7.6187945856740091e-01 9.5398625337339216e-01 + -7.6213812048269147e-01 9.3604310680080927e-01 1.1818499053217564e+00 + -9.2181355538037801e-01 1.0340719804307272e+00 1.3972888875328455e+00 + -1.0701058845250646e+00 1.0343697137954977e+00 1.5786008057886751e+00 + -1.1966466701617038e+00 9.4635796992242871e-01 1.7087233886489608e+00 + -1.3340815796100323e+00 7.8718737695422525e-01 1.7948069827882069e+00 + -1.5193965536314191e+00 5.5580113231934403e-01 1.8367321797219676e+00 + -1.7414277650065102e+00 2.6426353037993838e-01 1.8145694149236349e+00 + -1.9503867301891336e+00 -5.7929708791511159e-02 1.7113080631982223e+00 + -2.1073179894894603e+00 -3.8895231216254628e-01 1.5323518961088940e+00 + -2.2561967536927758e+00 -7.3926459595314908e-01 1.3136363004472553e+00 + -2.5106207525100865e+00 -1.1266772244205951e+00 1.0949332730690791e+00 + -2.9851830145423515e+00 -1.4980042295486879e+00 9.0062927423000261e-01 + -3.7615432472179604e+00 -1.6707105379856508e+00 7.8919173067557213e-01 + -4.5836948248742289e+00 -1.5039073448060385e+00 9.0429790325892623e-01 + -5.0298471713986519e+00 -1.5227719084001126e+00 9.8429287073875027e-01 + id 12063 + loc 4.2412492632865906e-01 2.4839623272418976e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3810811267657729e-01:2.6012339907152859e-01:4.0679894235387426e-01:2.9144987942037576e-01:1.0698815329278584e+00:3.9926488719775610e-01:1.7896695665609590e+00:4.3810373159545052e-01:2.2228590735678049e+00:3.3630165146464219e-01:2.9445849737550844e+00:2.9828048315162931e-01:3.7930609442485386e+00 + CVs 20 + 5.7897898320997077e-01 4.3773277793288778e-01 -1.4427277970904795e-01 + 9.3927021545325751e-01 7.5087230389197113e-01 -2.7606990334702058e-01 + 1.2555857024991046e+00 1.0196628705341408e+00 -4.0056382800092466e-01 + 1.5835400456678710e+00 1.2839038228116491e+00 -5.2756605601404616e-01 + 1.9100933805525551e+00 1.5380298589024544e+00 -6.6725798313514173e-01 + 2.2187092449612886e+00 1.7734525744586589e+00 -8.3398795050033558e-01 + 2.4886444030276467e+00 1.9733386016260543e+00 -1.0446098902128356e+00 + 2.6965106569749882e+00 2.1087554716365817e+00 -1.3143676316895712e+00 + 2.8161764113249164e+00 2.1416107765452117e+00 -1.6419498493971521e+00 + 2.8343702760021889e+00 2.0508780127232309e+00 -1.9850399741816649e+00 + 2.7771795278692863e+00 1.8697362907883568e+00 -2.2938497164035336e+00 + 2.6796769173719190e+00 1.6453004551742134e+00 -2.5700248509022332e+00 + 2.5562703468440393e+00 1.3947595587973369e+00 -2.8341728841765099e+00 + 2.4187300541136367e+00 1.1207734605644502e+00 -3.0933051849044384e+00 + 2.3128997302066829e+00 8.2927493947947450e-01 -3.3345174828302753e+00 + 2.3420295726651910e+00 5.4513669051882552e-01 -3.5216847638152555e+00 + 2.5461808833213455e+00 3.1068281632308270e-01 -3.6299908259931875e+00 + 2.7723530307388526e+00 4.1841057721987096e-02 -3.7229477519513159e+00 + 2.8137596945009320e+00 -4.4385590239328643e-01 -3.9506414929030593e+00 + id 12064 + loc 3.7285986542701721e-01 1.3425779342651367e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9120866780687724e-01:3.9120475572019919e-01:2.5789741561222479e-01:3.4958678909390317e-01:9.6366100350037420e-01:3.2517864723944051e-01:1.4674158355703479e+00:2.6233432892675412e-01:2.0009705697413298e+00:2.7261281198229037e-01:2.7897007680093120e+00:3.2117072115439493e-01:3.2690608880488186e+00:2.5730239730536852e-01:3.9719198217310319e+00 + CVs 20 + -1.0342797911018053e-02 3.1258174342258904e-01 -2.4742404078710013e-02 + -5.8328362294187752e-02 6.0479913085113890e-01 -4.3841834088667070e-02 + -1.2724103023780842e-01 9.0158656827287653e-01 -7.7053227223375861e-02 + -2.0371053616383133e-01 1.2033582906038949e+00 -1.3233071431932891e-01 + -2.9053252556828502e-01 1.4989790834744134e+00 -2.1288658482616507e-01 + -3.8869333764311853e-01 1.7731082898123809e+00 -3.1554604909961897e-01 + -5.0269662194613163e-01 2.0105024595217449e+00 -4.3451135612239278e-01 + -6.3815068260213426e-01 2.1998053207921742e+00 -5.6399741318657137e-01 + -7.9783539868411890e-01 2.3350103860394960e+00 -6.9871575796833540e-01 + -9.8324703575700967e-01 2.4104883717010370e+00 -8.3559541395201575e-01 + -1.1901542881221701e+00 2.4157055760684178e+00 -9.7182993837680176e-01 + -1.4048950521767212e+00 2.3407606556545955e+00 -1.1035096248500609e+00 + -1.6124579870165379e+00 2.1830584895551737e+00 -1.2290162732305658e+00 + -1.8040229067765559e+00 1.9454148209840150e+00 -1.3502210547970550e+00 + -1.9756866070957950e+00 1.6294477824348594e+00 -1.4704469282756936e+00 + -2.1037794611355523e+00 1.2367001919981113e+00 -1.5872156671078825e+00 + -2.0974056319596475e+00 8.0007464931770178e-01 -1.6752826224194242e+00 + -1.8756986748936373e+00 4.3721301710554827e-01 -1.6957007239935979e+00 + -1.6193708556209045e+00 2.7079298959920006e-02 -1.7251630613642408e+00 + id 12065 + loc 8.6989980936050415e-01 1.2247485667467117e-01 416 + blend 0.0000000000000000e+00 + interp 5.4169534803409847e-01:4.6319913300560833e-01:8.3761174789231951e-04:3.6642073694591132e-01:5.2415386814886722e-01:3.9923024911473554e-01:1.1555598243400931e+00:4.3269548332797025e-01:2.0255179556107863e+00:2.6115922711194461e-01:2.9017792125802777e+00:5.4168993108061814e-01:3.6198656335712851e+00 + CVs 20 + -5.4026306251902290e-01 2.3190971846028238e-01 5.3553392811613962e-02 + -9.5812684403285009e-01 3.5680768085502423e-01 1.2926124223239602e-01 + -1.3581900577288211e+00 4.4040416166458857e-01 1.9067449763325173e-01 + -1.7910000151147658e+00 4.9821509134047570e-01 2.2782979765991118e-01 + -2.2496854674819668e+00 5.1845387909175045e-01 2.3197183044377523e-01 + -2.7224934280687876e+00 4.9251372044935104e-01 1.9259446013904857e-01 + -3.1950803924504307e+00 4.1522792468435699e-01 1.0350142013153962e-01 + -3.6521811555328747e+00 2.8476790925922368e-01 -3.3470608499353127e-02 + -4.0788297198228589e+00 1.0459170928144279e-01 -2.1261005655765675e-01 + -4.4631704296535455e+00 -1.1877903752097385e-01 -4.2311162414024572e-01 + -4.8015642323319820e+00 -3.9075189216545825e-01 -6.2537082179780934e-01 + -5.0937976943643468e+00 -7.3135664549616330e-01 -7.3873001124200166e-01 + -5.3192208379038171e+00 -1.1326934636995856e+00 -7.0815439574062800e-01 + -5.4569118920290229e+00 -1.5485408738003297e+00 -5.7451351575496257e-01 + -5.5123261666903201e+00 -1.9465407423258403e+00 -3.9951769168255619e-01 + -5.4901251858995153e+00 -2.3060833011035622e+00 -1.9699131192999364e-01 + -5.3987979152498351e+00 -2.6073997486625400e+00 2.7005211031054799e-02 + -5.2761664405244426e+00 -2.8535632989625555e+00 2.4393144310056136e-01 + -5.3187414507290640e+00 -3.1595885454277601e+00 3.4706359001856213e-01 + id 12066 + loc 7.0578533411026001e-01 6.5770410001277924e-02 397 + blend 0.0000000000000000e+00 + interp 5.4814982232541565e-01:3.4882962464122702e-01:1.2800154799165986e-01:2.9911762134960646e-01:1.0000138983656639e+00:3.2762307635836330e-01:1.6088726448270587e+00:4.2784082097783205e-01:2.0091370650799045e+00:5.4814434082719243e-01:2.4119693190350384e+00:4.9701598672307684e-01:3.0064662793194112e+00:5.0742953698432980e-01:3.4388771506446769e+00 + CVs 20 + -1.1187882382208352e+00 3.1999072882575058e-01 3.0708362367876796e-01 + -1.8781372459717856e+00 4.2501385297662775e-01 5.6075053612617731e-01 + -2.5176948831749746e+00 4.4332366440544835e-01 7.9029327190588849e-01 + -3.1543631706677147e+00 4.1827913471352329e-01 1.0174054097355263e+00 + -3.7770458960464879e+00 3.4416384410089507e-01 1.2394670563154224e+00 + -4.3766654742230200e+00 2.2010349466425250e-01 1.4584155700181449e+00 + -4.9423169747865829e+00 4.9883518177811781e-02 1.6774178468482168e+00 + -5.4543721032752437e+00 -1.5640490722560174e-01 1.8939209010624616e+00 + -5.8992355074830565e+00 -3.8449380066153094e-01 2.1028112192745874e+00 + -6.2787241956598709e+00 -6.2048731560415993e-01 2.3010195612389168e+00 + -6.6053117870222158e+00 -8.5548770714579392e-01 2.4887021056502387e+00 + -6.8928292253376071e+00 -1.0909109172704325e+00 2.6720280971334516e+00 + -7.1496349236338066e+00 -1.3394652376611307e+00 2.8611891364045379e+00 + -7.3785272697984023e+00 -1.6198431689590997e+00 3.0594337629665587e+00 + -7.5786138088651587e+00 -1.9472742696784731e+00 3.2632911140859751e+00 + -7.7443560457674439e+00 -2.3263922307197502e+00 3.4758097565623323e+00 + -7.8641498309939317e+00 -2.7518381882428979e+00 3.7061551601433962e+00 + -7.9217661316351569e+00 -3.2135376130615998e+00 3.9471178450292168e+00 + -7.8196233544269207e+00 -3.6891550172507088e+00 4.1244407610954426e+00 + id 12067 + loc 6.7338384687900543e-02 6.5232354402542114e-01 411 + blend 0.0000000000000000e+00 + interp 5.5183284032517654e-01:2.5753926065873456e-01:2.7407973725428769e-01:5.5182732199677331e-01:1.1035127220532819e+00:5.5021576210952705e-01:1.6724985414792892e+00:3.9582958329932405e-01:1.9999398087167117e+00:3.8338493312258320e-01:2.4978033261287971e+00:3.2963877368693406e-01:3.0170037511717553e+00:4.1144896533045006e-01:3.7088377966836057e+00 + CVs 20 + 9.6267939635281385e-01 2.5856192270639311e-01 -2.3617941040117091e-01 + 1.6398914923522154e+00 3.9038996455126573e-01 -4.8446413409160488e-01 + 2.2719465457329107e+00 4.9086810827681826e-01 -7.5633485729557293e-01 + 2.9290446997197996e+00 5.7924952467482194e-01 -1.0622848463482499e+00 + 3.5720427211404222e+00 6.2443481133536227e-01 -1.4012886653571253e+00 + 4.1599080851547168e+00 6.0180834301282049e-01 -1.7696518711733653e+00 + 4.6761868323640474e+00 4.9833990040666909e-01 -2.1594784345634301e+00 + 5.1426790750627234e+00 2.9640702729621426e-01 -2.5628175570495726e+00 + 5.5876389404991480e+00 -3.9360386633557676e-02 -2.9676993432180332e+00 + 6.0059100616066736e+00 -5.4382395569940978e-01 -3.3414304801713364e+00 + 6.3590849201337791e+00 -1.2055093864519271e+00 -3.6306284884370847e+00 + 6.6213748167132955e+00 -1.9487085272636691e+00 -3.8077327712439097e+00 + 6.8067149427049936e+00 -2.7139377311558546e+00 -3.9186913425340020e+00 + 6.9463674583454917e+00 -3.4909439226521144e+00 -4.0499308567231926e+00 + 7.0951929029697087e+00 -4.2732616307429332e+00 -4.2637652293578006e+00 + 7.3311349706508677e+00 -5.0488614756795949e+00 -4.5477943748442362e+00 + 7.6829978352298678e+00 -5.7898530023446213e+00 -4.8194766115172740e+00 + 8.0957127320627809e+00 -6.4759037869792326e+00 -5.0004357802162396e+00 + 8.4688588635377720e+00 -7.1432218893894284e+00 -5.1272937196348183e+00 + id 12068 + loc 4.8745983839035034e-01 8.8279795646667480e-01 1085 + blend 0.0000000000000000e+00 + interp 4.1311664111336210e-01:2.7522561745240132e-01:8.0026812971413896e-01:3.4260319772957520e-01:1.4993286577212577e+00:4.1311250994695098e-01:1.9924814920941383e+00:2.9615615549639523e-01:2.3012596124869047e+00:3.5351860495864762e-01:3.0580503946506519e+00:2.6772703274884835e-01:3.9721860489207228e+00 + CVs 20 + -1.1039129535246756e-01 3.7359873329091003e-01 2.8053121339211973e-01 + -2.5841124382554137e-01 6.7441795200563992e-01 4.9132426624992409e-01 + -4.2855269880569868e-01 9.4276945860173555e-01 6.7969614872326989e-01 + -6.1416319455292645e-01 1.1947157879203552e+00 8.6220196832948459e-01 + -8.2066213185829096e-01 1.4309341370238466e+00 1.0287070166440242e+00 + -1.0568843271060133e+00 1.6520662366359793e+00 1.1667215107187623e+00 + -1.3350892074038101e+00 1.8535963464899496e+00 1.2578180674645847e+00 + -1.6618572434597383e+00 2.0183793840812689e+00 1.2779074343035481e+00 + -2.0172238120415309e+00 2.1175549979167103e+00 1.2146161622645320e+00 + -2.3592211192270423e+00 2.1361412642364819e+00 1.0926403143696877e+00 + -2.6699240952288483e+00 2.0880268141393952e+00 9.5295929357771825e-01 + -2.9580307124141099e+00 1.9895155105561613e+00 8.2049301152621279e-01 + -3.2292976573639729e+00 1.8534193904025602e+00 7.1467474927195473e-01 + -3.4794396794954077e+00 1.7070058501647243e+00 6.5894089332790462e-01 + -3.7025854763691903e+00 1.5867254003088687e+00 6.6669358610682550e-01 + -3.8984038169600717e+00 1.5262590049271101e+00 7.2211750222084625e-01 + -4.0554035292239154e+00 1.5790086662668164e+00 7.6967355010970517e-01 + -4.1836268787141861e+00 1.6868172483712027e+00 7.8785590003493255e-01 + -4.5117193412323218e+00 1.4776339763310362e+00 1.0734669589900334e+00 + id 12069 + loc 7.5159478187561035e-01 4.6518689393997192e-01 406 + blend 0.0000000000000000e+00 + interp 4.1342081673181114e-01:3.9254329048589082e-01:3.9946686274013654e-02:4.1341668252364383e-01:8.8482595239824013e-01:3.2035561897259296e-01:1.2765553535191241e+00:3.5527251212144700e-01:2.0007585322593893e+00:2.5931047701418264e-01:2.7247423344742070e+00:3.7765016179223437e-01:3.4171271309551692e+00 + CVs 20 + -2.4061600517845241e-01 1.8699707640385055e-01 3.9657586530915570e-02 + -3.8634596644254815e-01 2.9774266810458705e-01 6.3554473898502439e-02 + -4.9297482473563486e-01 3.7406805889613959e-01 8.0204182581736977e-02 + -6.0452244488305296e-01 4.4827461931533286e-01 1.0012702355909495e-01 + -7.2314222139067119e-01 5.1972910961963481e-01 1.2304267339102890e-01 + -8.5131390149890485e-01 5.8719759398888793e-01 1.4909110435418788e-01 + -9.9231172657221023e-01 6.4880909393279351e-01 1.7904368247929101e-01 + -1.1484054934142971e+00 7.0219210583125879e-01 2.1329330472840846e-01 + -1.3161903005423603e+00 7.4541842652148427e-01 2.4984745054361543e-01 + -1.4868679620618455e+00 7.7776200298575082e-01 2.8553300417890681e-01 + -1.6563483322851158e+00 7.9853977059948955e-01 3.2109916313344244e-01 + -1.8307982418324267e+00 8.0524099808541660e-01 3.6219051065640379e-01 + -2.0152942640308811e+00 7.9570031725666945e-01 4.1256662592451249e-01 + -2.2040956073260403e+00 7.7213873545335754e-01 4.6956353989491106e-01 + -2.3872083543834361e+00 7.3975618444888780e-01 5.2893451457577212e-01 + -2.5614253781083351e+00 7.0193979668791817e-01 5.9023891322499156e-01 + -2.7308370832050781e+00 6.5829013775686784e-01 6.5525357978882415e-01 + -2.8988661951933068e+00 6.0695395763689797e-01 7.2376940204476103e-01 + -3.0675514049636732e+00 5.4301645597523773e-01 7.9431992783058525e-01 + id 12070 + loc 1.5204529464244843e-01 8.3017259836196899e-01 403 + blend 0.0000000000000000e+00 + interp 4.3582347922906028e-01:3.3416470604412396e-01:5.7403434319791646e-01:3.3204959603300377e-01:1.2073941312513754e+00:3.1225488214830971e-01:2.0507729980597773e+00:2.7337056732253817e-01:2.8613081157518243e+00:2.9042694679251613e-01:3.4077670340772186e+00:4.3581912099426801e-01:3.9800006847415648e+00 + CVs 20 + 3.4451335569373687e-02 1.9444109531089906e-01 -8.2286619337666123e-02 + 4.8097919116633775e-02 3.6339938901631375e-01 -1.7347182687089724e-01 + 5.9074144889944086e-02 5.2211762133169648e-01 -2.6929900898194092e-01 + 7.5112262317590051e-02 6.8134245628499501e-01 -3.6877019721927146e-01 + 9.2635645704960579e-02 8.4404146330050711e-01 -4.7173828139569662e-01 + 1.0632783514981414e-01 1.0149067679596395e+00 -5.7715558635678865e-01 + 1.0895888817877553e-01 1.1986317374210409e+00 -6.8225243734779073e-01 + 9.2751349974011799e-02 1.3980418866622000e+00 -7.8217780569838469e-01 + 5.0325418791162257e-02 1.6142932736002242e+00 -8.7028073035669795e-01 + -2.7676587335971781e-02 1.8485649446928094e+00 -9.3839166823998144e-01 + -1.5499105056149898e-01 2.0990672972150284e+00 -9.7597667870019544e-01 + -3.4306343229798553e-01 2.3520142621854290e+00 -9.7102288704244311e-01 + -5.9035627188544981e-01 2.5818865506124773e+00 -9.1639251656504916e-01 + -8.8114743221672309e-01 2.7645739314957938e+00 -8.1362737222654713e-01 + -1.1893798223126963e+00 2.8880104334776653e+00 -6.7042921540267941e-01 + -1.4907830145403707e+00 2.9543081277986012e+00 -4.9432607554654617e-01 + -1.7631557800437072e+00 2.9741128247652360e+00 -2.9660434319517853e-01 + -1.9807174045592042e+00 2.9690823122278225e+00 -1.0130815266711722e-01 + -2.0919535554021333e+00 2.9861051194235273e+00 4.0123827771976150e-02 + id 12071 + loc 1.1908535659313202e-01 6.0297515243291855e-02 1076 + blend 0.0000000000000000e+00 + interp 4.3474313652004826e-01:3.0897954017564083e-01:1.8731634389223395e-01:3.0624098933747201e-01:6.4891890645876660e-01:4.0459224263384586e-01:1.0625463076409725e+00:3.5536892172628176e-01:1.9189151935940298e+00:3.3232804534032268e-01:2.6662280066718589e+00:4.3311576172806793e-01:3.0306421710288607e+00:4.3473878908868308e-01:3.6139153622997160e+00 + CVs 20 + -1.6777697072427469e-01 2.8040031776991081e-01 -2.2209190339655821e-01 + -3.1670998134736206e-01 5.7596559775466072e-01 -4.2885321268490462e-01 + -4.8520552967278707e-01 8.5994558114406794e-01 -6.3205023318475406e-01 + -6.8621131360935894e-01 1.1184657000046299e+00 -8.3343102134668023e-01 + -9.1645222391641190e-01 1.3492313526350623e+00 -1.0309924235191255e+00 + -1.1709019972205186e+00 1.5494792008615033e+00 -1.2253668453758986e+00 + -1.4455664938806678e+00 1.7169396715626317e+00 -1.4200707272625057e+00 + -1.7380281897379581e+00 1.8517516134948582e+00 -1.6178209292237848e+00 + -2.0463210798496960e+00 1.9562948814259764e+00 -1.8181849096743703e+00 + -2.3689930732922502e+00 2.0328151542507906e+00 -2.0191886474936349e+00 + -2.7061171830309805e+00 2.0812694963679719e+00 -2.2186734850760090e+00 + -3.0583413275303308e+00 2.0982127199995801e+00 -2.4134951621075120e+00 + -3.4251830388557765e+00 2.0785002133398702e+00 -2.5985644074856928e+00 + -3.8045522238917924e+00 2.0176715812332513e+00 -2.7670471867526429e+00 + -4.1950268817862888e+00 1.9115465689793798e+00 -2.9123318046854640e+00 + -4.6117375253358848e+00 1.7437308246462808e+00 -3.0370066421003252e+00 + -5.1083735247141338e+00 1.4312133841972490e+00 -3.1639493271051231e+00 + -5.6399943107454176e+00 7.5437849042783345e-01 -3.3167659504252862e+00 + -5.7229271978103222e+00 5.8191459944354706e-01 -3.3367742832577520e+00 + id 12072 + loc 4.2754530906677246e-01 7.2433918714523315e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7379466603998888e-01:4.3463448567240387e-01:2.4050996992798179e-01:3.5044636641710819e-01:1.0075610189009965e+00:3.6839437124938262e-01:1.9387491912828285e+00:3.2261984692924234e-01:2.5153045693011618e+00:4.7378992809332848e-01:2.9993927039628412e+00:3.6488155143065887e-01:3.6602475090680477e+00 + CVs 20 + -2.4419081575937532e-01 2.6095080052235919e-01 3.1839211941571821e-01 + -5.0385468521174148e-01 4.6415406367809436e-01 5.7499983953403100e-01 + -7.6779401364267019e-01 6.4595254847482575e-01 8.1193508418293481e-01 + -1.0213413727498379e+00 8.1849720399930437e-01 1.0399417724108040e+00 + -1.2585560071167443e+00 9.7908304190410256e-01 1.2414729467454655e+00 + -1.4737439163528716e+00 1.1260049029826127e+00 1.4065307601296135e+00 + -1.6619286162799509e+00 1.2596741586639657e+00 1.5399974235198157e+00 + -1.8215203892164087e+00 1.3860019799719159e+00 1.6634171984453370e+00 + -1.9702156915204478e+00 1.5211710442757311e+00 1.7841152378878529e+00 + -2.1245269879906497e+00 1.6648299014503356e+00 1.8399689825097660e+00 + -2.2367549433978260e+00 1.8096364373689249e+00 1.7932638188461496e+00 + -2.2687298224144858e+00 1.9837078056221196e+00 1.6656549572418817e+00 + -2.2384048146029683e+00 2.1364570170545658e+00 1.4367971219609676e+00 + -2.1803542307670458e+00 2.0935029338940678e+00 1.1335036964069434e+00 + -2.0967580030656943e+00 1.8332480535623419e+00 8.4425812964006486e-01 + -1.9632672159494053e+00 1.5005964652510553e+00 5.7270489427904514e-01 + -1.7787826638388555e+00 1.2239932799225866e+00 2.9093200158286003e-01 + -1.5814637477514530e+00 1.0810617410395646e+00 -8.8930632758791317e-03 + -1.3796872687681108e+00 1.1091342391181074e+00 -4.1481379987913752e-01 + id 12073 + loc 8.4703838825225830e-01 1.8641239404678345e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3333882116114314e-01:3.3440006745441869e-01:5.4950538801592275e-01:4.3333448777293154e-01:9.9674010781857725e-01:2.9071406462278260e-01:1.5046902991571338e+00:3.6868686613166834e-01:2.2810832997031945e+00:2.9562834350980977e-01:3.0379638099639941e+00:2.6129859404861883e-01:3.8930526213293883e+00 + CVs 20 + -1.3740835330042067e-01 2.1460373339333011e-01 1.8676901120659559e-01 + -2.8919203389933212e-01 4.2369804670301131e-01 3.6941028186616059e-01 + -4.5326174847892509e-01 6.2991220734526010e-01 5.4508398208490183e-01 + -6.2743005871129887e-01 8.3583027899484330e-01 7.1459288137318755e-01 + -8.1034470149972759e-01 1.0445600303058995e+00 8.8312403393749994e-01 + -9.9860546526063465e-01 1.2590895791907917e+00 1.0592771917094799e+00 + -1.1856972039508844e+00 1.4806646525965863e+00 1.2562400737458241e+00 + -1.3616743158173623e+00 1.7051600471938528e+00 1.4904691272830415e+00 + -1.5130362361362084e+00 1.9187905976077613e+00 1.7780608544645131e+00 + -1.6254872063872401e+00 2.0985406280329322e+00 2.1259840254464146e+00 + -1.6901378485916638e+00 2.2171364873233461e+00 2.5261735340570088e+00 + -1.7088257153336874e+00 2.2509979690194095e+00 2.9575103394197026e+00 + -1.6967712367236527e+00 2.1898212020744903e+00 3.3946489983996986e+00 + -1.6784453528718213e+00 2.0346528808615973e+00 3.8154892246606891e+00 + -1.6796577699459729e+00 1.7897864427765495e+00 4.2014933219698651e+00 + -1.7160388505911552e+00 1.4572914351266215e+00 4.5350336136893601e+00 + -1.7867712947297074e+00 1.0415901920372477e+00 4.7936903286188173e+00 + -1.8764014224719392e+00 5.7176668841212597e-01 4.9672460493845216e+00 + -1.9403802437978404e+00 1.3295477968942848e-01 5.1426250859865563e+00 + id 12074 + loc 4.9615859985351563e-02 3.0061644315719604e-01 1075 + blend 0.0000000000000000e+00 + interp 3.2783552688025086e-01:2.7741205497309279e-01:3.9756136982885149e-01:3.2783224852498205e-01:1.3056432590028351e+00:2.1449400814440520e-01:1.8875541788973966e+00:2.7318107342349540e-01:2.5855922102004700e+00:2.7735621627228763e-01:3.0024188656021980e+00:3.2761783573335101e-01:3.6042863463025574e+00 + CVs 20 + -1.2647717936601624e-01 2.7601811845871405e-01 -9.3821198822987797e-02 + -2.5637914848137555e-01 6.0091793854864606e-01 -1.6049750033039953e-01 + -3.7125357662760727e-01 9.5381619698853748e-01 -2.2130399183765437e-01 + -4.8026105032628963e-01 1.3219067072787742e+00 -2.9249027903988034e-01 + -6.0671672524528475e-01 1.6943796027080273e+00 -3.8736340377588385e-01 + -7.6417327440009364e-01 2.0492412911686841e+00 -5.2064110243777340e-01 + -9.4868462473134152e-01 2.3521231680582821e+00 -7.0720346687270486e-01 + -1.1343509319533822e+00 2.5593395532027796e+00 -9.5803560229253382e-01 + -1.2855953442992036e+00 2.6404797917545539e+00 -1.2668979884712936e+00 + -1.3936017618825167e+00 2.5988434930119615e+00 -1.6201034025325309e+00 + -1.4712675873229526e+00 2.4327814132238075e+00 -2.0099425420801680e+00 + -1.5301239307181018e+00 2.1136237476894317e+00 -2.4029803272344075e+00 + -1.5721746798481109e+00 1.6401406170891835e+00 -2.7156189895135556e+00 + -1.5792771249460942e+00 1.1254389421295841e+00 -2.9100860604141321e+00 + -1.5289469182352886e+00 6.9376105173412439e-01 -3.0887786546799374e+00 + -1.4334583014034812e+00 4.0415240730954261e-01 -3.3545756530709721e+00 + -1.3462262790770736e+00 3.0030243381931587e-01 -3.7229101491147358e+00 + -1.3004505886430331e+00 3.1887352526074175e-01 -4.1427350248965222e+00 + -1.1918816368615850e+00 7.3128351365585598e-02 -4.6451882235553672e+00 + id 12075 + loc 9.7199231386184692e-01 5.8459186553955078e-01 1048 + blend 0.0000000000000000e+00 + interp 4.6743162228972873e-01:2.5662103049883445e-01:4.6004026211836357e-01:3.0718823809652568e-01:1.0000388290924764e+00:3.0967428301831534e-01:1.7940528141983794e+00:4.6742694797350587e-01:2.6820504884825320e+00:4.3792419571506946e-01:3.1963484199868772e+00:2.5465716887351875e-01:3.9112736651450946e+00 + CVs 20 + 1.9316702398707611e-01 5.9020065427270729e-01 -5.5982882574031545e-01 + 3.9418828725267874e-01 1.1763075810639723e+00 -1.0671033360766837e+00 + 6.6955236292551135e-01 1.7644850323883818e+00 -1.4823093518766446e+00 + 1.0762094093706975e+00 2.3284816282718563e+00 -1.7631627065705309e+00 + 1.6165396072119580e+00 2.7964350950514292e+00 -1.8934443529192000e+00 + 2.2394270082396908e+00 3.1068212314054011e+00 -1.9114108145884912e+00 + 2.8821122382775601e+00 3.2249074333059822e+00 -1.8778677300643953e+00 + 3.4966773273306972e+00 3.1543606573589278e+00 -1.8417494662121565e+00 + 4.0746309255210829e+00 2.9070544442406461e+00 -1.8137089719067276e+00 + 4.6050123336851563e+00 2.4647894399732455e+00 -1.7785099358638687e+00 + 5.0325215050992052e+00 1.8188289436842453e+00 -1.7065339446706476e+00 + 5.2841415649947017e+00 9.9804017433194314e-01 -1.5507246037101292e+00 + 5.2966195905132016e+00 5.5198404915124566e-02 -1.2360703009775007e+00 + 4.9998235815666678e+00 -8.5693934532896077e-01 -6.8191951924381566e-01 + 4.4065572604497110e+00 -1.4613645925336551e+00 6.5820009874864804e-02 + 3.6821919587385601e+00 -1.6122736885143478e+00 8.3536627148967879e-01 + 2.8949113835044225e+00 -1.3469884825316845e+00 1.6059973227072031e+00 + 1.9937248541298578e+00 -4.4095573538881871e-01 2.2680900523752494e+00 + 1.8728793691659640e+00 8.0207448137287862e-02 2.1724467671846428e+00 + id 12076 + loc 4.5241606235504150e-01 8.0909776687622070e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5933754082989137e-01:4.4104767987046944e-01:5.4872818007726165e-01:3.7382609410970130e-01:1.0934736958018103e+00:4.5933294745448311e-01:2.0002514173024819e+00:3.1584649096336198e-01:2.4779763294127815e+00:2.8953412048415533e-01:3.0100776297184328e+00:2.9469511594919828e-01:3.7533045530462328e+00 + CVs 20 + 4.8301329708039603e-02 2.3424369598630601e-01 9.1829630505103538e-02 + 9.4550954010345786e-02 4.7015641994332519e-01 1.5215901025971873e-01 + 1.5429616863294493e-01 7.2300124485241224e-01 1.8357381380715962e-01 + 2.4622547370168951e-01 1.0019480306341051e+00 1.8888844236969876e-01 + 3.8021448902979094e-01 1.2990949614064193e+00 1.5538769659292173e-01 + 5.6188649863416051e-01 1.5954468397348851e+00 6.9363041325371411e-02 + 7.8799630003022969e-01 1.8641979707487888e+00 -8.1136578887651134e-02 + 1.0453457742059045e+00 2.0779486805879435e+00 -3.0266429059840516e-01 + 1.3101900505421527e+00 2.2140698696993564e+00 -5.9460671682938271e-01 + 1.5497779398257459e+00 2.2556143900765453e+00 -9.4740078445432985e-01 + 1.7309539298044689e+00 2.1930474198693677e+00 -1.3371622782699104e+00 + 1.8247735680806665e+00 2.0239789379548165e+00 -1.7189996393986424e+00 + 1.8212568523171184e+00 1.7589654927888014e+00 -2.0323884744948866e+00 + 1.7481475626001364e+00 1.4251664188521620e+00 -2.2333002743859227e+00 + 1.6444406350985858e+00 1.0564609355949588e+00 -2.3285206909631069e+00 + 1.5314167043625000e+00 6.8225173218462820e-01 -2.4133255925192323e+00 + 1.4321407928184344e+00 3.8220382083820370e-01 -2.6476346585670116e+00 + 1.4196539340686005e+00 3.1148344739101419e-01 -3.0447217377811810e+00 + 1.4970919034139185e+00 4.6525577375594929e-01 -3.2231796130884351e+00 + id 12077 + loc 1.1940239369869232e-01 7.3423916101455688e-01 1050 + blend 0.0000000000000000e+00 + interp 5.0642073375515462e-01:2.7658308931520420e-01:4.3865158388131542e-02:5.0641566954781714e-01:8.6715267287951947e-01:3.4767013278212783e-01:1.2583420018078204e+00:4.4771488320036845e-01:2.1939305701822933e+00:4.3961559572786135e-01:2.3744908786666068e+00:3.1845073368926508e-01:3.2836141218602815e+00 + CVs 20 + -1.8979060346723853e-01 4.8336855176216192e-01 -7.3278636682361209e-01 + -2.7980181848992602e-01 9.6293337451057459e-01 -1.3686952708400160e+00 + -2.3027131196630368e-01 1.4863422560455930e+00 -1.9392704327041761e+00 + 2.9442762908913123e-02 2.0646919216799144e+00 -2.4321083783448558e+00 + 5.4940872678454244e-01 2.6241461261792254e+00 -2.7773230038922310e+00 + 1.2912566723369818e+00 3.0345052419149887e+00 -2.9385647621312381e+00 + 2.1373438149621435e+00 3.1676446844785575e+00 -2.9411042252193367e+00 + 2.9228617234976983e+00 2.9658213287966633e+00 -2.8499141282669225e+00 + 3.5074948851294065e+00 2.4873812206521029e+00 -2.6969449115649411e+00 + 3.8186441960361392e+00 1.8658240315237471e+00 -2.4516409721756247e+00 + 3.8388687511906805e+00 1.2693438973749693e+00 -2.0948481851678054e+00 + 3.6400179641110042e+00 8.3769031026701857e-01 -1.6587418223326533e+00 + 3.3354120951362805e+00 6.3492794322610835e-01 -1.1979233164773038e+00 + 3.0334382991696072e+00 6.4645515592398883e-01 -7.6948620319729033e-01 + 2.7995419913889283e+00 8.0061406068635788e-01 -3.9898665975543146e-01 + 2.6483798325649093e+00 1.0172194091781961e+00 -1.0069698016177892e-01 + 2.6259942507612375e+00 1.1700453339810473e+00 9.1299421803079955e-02 + 2.7903367329777815e+00 9.8156317015950367e-01 3.4169500963726690e-01 + 2.6463139958188013e+00 1.3752465110127055e+00 2.4201061755672695e-01 + id 12078 + loc 3.6012774705886841e-01 2.3456862568855286e-01 397 + blend 0.0000000000000000e+00 + interp 4.9293012931429581e-01:3.1876864097206292e-01:4.7637633610639796e-01:3.1235420722624552e-01:1.3004513691310522e+00:3.5079032853386327e-01:2.0000094898328826e+00:4.9292520001300266e-01:2.6676251194997738e+00:3.8532279462269597e-01:3.0049536115011239e+00:3.8723338323086837e-01:3.6177342795817076e+00 + CVs 20 + -2.2827119185322872e-01 2.3110943401220557e-01 -1.2476023451611093e+00 + -4.1972192982720258e-01 2.2787254805015406e-01 -2.0938959775586858e+00 + -5.9430199943844875e-01 1.5177716670371050e-01 -2.8198160881769394e+00 + -7.6276370216611378e-01 5.6747005900405434e-02 -3.5287273802900074e+00 + -9.1789839902479753e-01 -5.6694629289153142e-02 -4.2010656767175885e+00 + -1.0607308260561512e+00 -1.8747452687726562e-01 -4.8280541944525881e+00 + -1.1959728643392658e+00 -3.3875136037592624e-01 -5.4098775327528301e+00 + -1.3277626657639883e+00 -5.2053976691166015e-01 -5.9515612346331768e+00 + -1.4598280342322538e+00 -7.4781537282409583e-01 -6.4574308289386781e+00 + -1.5957239198201663e+00 -1.0328803819047923e+00 -6.9207936880359835e+00 + -1.7375966097483446e+00 -1.3719307094011639e+00 -7.3194124108922374e+00 + -1.8901285097185863e+00 -1.7569889342493132e+00 -7.6428009605968317e+00 + -2.0590350221418570e+00 -2.1827376232211639e+00 -7.8929114990155576e+00 + -2.2428759504655105e+00 -2.6479361151063951e+00 -8.0692024858220748e+00 + -2.4298849115024894e+00 -3.1496265270597883e+00 -8.1597145101852142e+00 + -2.6088915564959381e+00 -3.6715513973197522e+00 -8.1569813653414780e+00 + -2.7688598451193114e+00 -4.1916728850407825e+00 -8.0625849514808934e+00 + -2.8997258341178913e+00 -4.6901863438466496e+00 -7.8875413339033686e+00 + -3.0133521919337274e+00 -5.2070704902193752e+00 -7.6634519907644947e+00 + id 12079 + loc 5.4040962457656860e-01 4.9079671502113342e-01 416 + blend 0.0000000000000000e+00 + interp 4.2158932784855674e-01:3.3268058397731298e-01:7.7410344275114162e-01:2.9976060292192463e-01:1.7488282906912818e+00:3.9491907827845119e-01:2.0585097810102182e+00:4.2158511195527826e-01:2.9284711655101874e+00:3.2602210059541598e-01:3.6652716938198200e+00 + CVs 20 + -6.3011922507411144e-01 1.6038064758070675e-01 1.0908768411288822e-01 + -1.0320446341223151e+00 1.9385130804540490e-01 2.1233361431788256e-01 + -1.3841955179125791e+00 1.7695499943532328e-01 3.0329914326434582e-01 + -1.7569329598947139e+00 1.4721842472927660e-01 3.7020408191126108e-01 + -2.1447692061349062e+00 1.0229598386565342e-01 4.1267527593556413e-01 + -2.5430511847809347e+00 4.0624518907418250e-02 4.3003091507350932e-01 + -2.9476246185827328e+00 -3.8275549201393422e-02 4.1982283832354250e-01 + -3.3541106427469529e+00 -1.3484194234312585e-01 3.8090133848545499e-01 + -3.7580391692946735e+00 -2.5048009358333867e-01 3.1531772172018058e-01 + -4.1537250575359312e+00 -3.8685384098568498e-01 2.2566403269313012e-01 + -4.5292371536637255e+00 -5.4325926910992672e-01 1.1550826024957173e-01 + -4.8665190241244893e+00 -7.1677202882165214e-01 4.5512391789981343e-04 + -5.1555437153089443e+00 -9.0937647992908466e-01 -8.9438544187777191e-02 + -5.4051855587416950e+00 -1.1317891510972331e+00 -1.2971265531129733e-01 + -5.6234918506761273e+00 -1.3904033681877228e+00 -1.1315071179095837e-01 + -5.7999130527281348e+00 -1.6715836551728249e+00 -4.4595495688927622e-02 + -5.9195854830908221e+00 -1.9497054318426923e+00 6.8845208710294314e-02 + -5.9822489901410227e+00 -2.2069628131802821e+00 2.2058653439264220e-01 + -6.1006277534164601e+00 -2.5631840956233312e+00 4.0547210711204573e-01 + id 12080 + loc 9.0440857410430908e-01 1.3136936724185944e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1919839304708278e-01:2.8181492953457038e-01:5.4379798846145511e-01:3.2889342999004567e-01:1.4743785966635217e+00:2.7523017147906015e-01:2.3850042725307272e+00:2.7792005672596160e-01:3.0800565343358262e+00:4.1919420106315231e-01:3.7177719851394091e+00 + CVs 20 + -1.2378269128711339e-01 3.1518674067597940e-01 2.3999679007750790e-01 + -2.6878669432659080e-01 6.0954914465928722e-01 4.6798119141417460e-01 + -4.2478511655339973e-01 8.8533640528526691e-01 6.7872867351132737e-01 + -5.7945345638942802e-01 1.1319671886448985e+00 8.6608676846714938e-01 + -7.3391735394464419e-01 1.3361619012436632e+00 1.0223717263052852e+00 + -8.8112626400319649e-01 1.4886507780312108e+00 1.1388964237609409e+00 + -1.0027005314564943e+00 1.5892655009951753e+00 1.2120401157671332e+00 + -1.0865618200902700e+00 1.6476333475169631e+00 1.2361849307813948e+00 + -1.0935603102216973e+00 1.7331332043305190e+00 1.1573910411522044e+00 + -1.0625603563376251e+00 2.0721487266402123e+00 8.7095008649950678e-01 + -1.2430986534090960e+00 2.5714330345234484e+00 6.5044246599694500e-01 + -1.4389194997678385e+00 2.8035960693905548e+00 6.6918933117112633e-01 + -1.5480202560254981e+00 2.8409171113068661e+00 7.7442214883757476e-01 + -1.5447461958639725e+00 2.7669890791543974e+00 9.0128404690771924e-01 + -1.3523275195224782e+00 2.6023260631014695e+00 9.9259157937632858e-01 + -9.9333746464921302e-01 2.3539135336100001e+00 1.0042273033662663e+00 + -4.8323626508151640e-01 1.9322765292668409e+00 8.8258169210569948e-01 + 2.8958714629740268e-01 7.3946811978891414e-01 7.6435932599429135e-01 + 3.2899606848923102e-01 6.3347159680274823e-01 7.8808537103972620e-01 + id 12081 + loc 4.3114525079727173e-01 3.1069543957710266e-01 406 + blend 0.0000000000000000e+00 + interp 4.3754446970878391e-01:4.3754009426408685e-01:2.2955025834446685e-01:3.9611199742762393e-01:8.9164875823882317e-01:4.2788171686785287e-01:1.1517438964904696e+00:4.1730744275160891e-01:1.8432714717295711e+00:2.9002466144980105e-01:2.4204785250279630e+00:3.9951477652977196e-01:3.1053025444652045e+00:2.7234441297905954e-01:3.9012093259607110e+00 + CVs 20 + -4.7646414934204365e-02 1.6714569162734758e-01 -3.8885987781398929e-02 + -9.0624545724675015e-02 2.9351971733266674e-01 -2.6957166026861351e-02 + -1.1123568010321364e-01 4.2164981526165801e-01 1.2080405837839314e-02 + -1.1673320990402533e-01 5.7127955854764356e-01 3.9538240835191057e-02 + -1.0501684962888015e-01 7.4224399883637782e-01 4.8050481510255538e-02 + -7.4631847010746696e-02 9.3194493940833278e-01 3.0048369329410296e-02 + -2.5776664186302312e-02 1.1351380259101829e+00 -2.1820098088014439e-02 + 3.9933873989544760e-02 1.3441204425418676e+00 -1.1293539550652099e-01 + 1.2412177270880154e-01 1.5514856007745328e+00 -2.4473353124051234e-01 + 2.3558325752923592e-01 1.7517915352589166e+00 -4.1622744948000145e-01 + 3.7967335559395593e-01 1.9380627685931358e+00 -6.2921782874838850e-01 + 5.4595693529924960e-01 2.0993417674196770e+00 -8.8690392300941345e-01 + 7.1657263247320890e-01 2.2257748859853157e+00 -1.1858557533981995e+00 + 8.8297111800128658e-01 2.3137493537960467e+00 -1.5166830088336249e+00 + 1.0460040412739497e+00 2.3635704068609718e+00 -1.8721095065411080e+00 + 1.2031475013739539e+00 2.3755555653449072e+00 -2.2491987866857479e+00 + 1.3441995431594094e+00 2.3502787590269345e+00 -2.6441053160586763e+00 + 1.4603109425654082e+00 2.2906899138825714e+00 -3.0465018923118214e+00 + 1.5515088494076030e+00 2.2502140702053253e+00 -3.3448701129836240e+00 + id 12082 + loc 6.8209391832351685e-01 8.8946366310119629e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4450122851568924e-01:3.2088768841131532e-01:8.7164264170838002e-02:4.0956133093512259e-01:8.8289576023645389e-01:3.2921153020616950e-01:1.2406975503732534e+00:3.4994691847421122e-01:2.0688151498072092e+00:3.6777752751306114e-01:3.0607294578033497e+00:4.4449678350340410e-01:3.8016016735329119e+00 + CVs 20 + -1.0669954493855768e-01 7.4501231100372420e-02 1.4599359052124705e-01 + -1.6911869051641543e-01 1.0926586154954361e-01 2.2971028541623165e-01 + -2.0534741858742647e-01 1.2118676075529913e-01 2.7743620769251504e-01 + -2.3962592705533389e-01 1.3379337166671373e-01 3.2717897006323154e-01 + -2.7372375980766933e-01 1.4838138346082613e-01 3.7838253697238816e-01 + -3.1067216039619217e-01 1.6589274625596684e-01 4.3049042817252753e-01 + -3.5508987602753461e-01 1.8686491996819510e-01 4.8246070162981208e-01 + -4.1178559686826544e-01 2.1108198530579625e-01 5.3193125864584290e-01 + -4.8478132584108780e-01 2.3750462148588872e-01 5.7518949382106344e-01 + -5.7683413404097816e-01 2.6492501025957121e-01 6.0796895002511742e-01 + -6.8953002031854449e-01 2.9308056240829178e-01 6.2686215524817168e-01 + -8.2410367760541481e-01 3.2305181533430966e-01 6.3045661037337042e-01 + -9.8214140077005230e-01 3.5691778496799192e-01 6.1999946158741315e-01 + -1.1657254312314749e+00 3.9687508409324063e-01 5.9923179710797414e-01 + -1.3736906502763226e+00 4.4455861689564996e-01 5.7235086927420076e-01 + -1.5986742449074498e+00 5.0137392815934778e-01 5.4244652370203505e-01 + -1.8315489349881677e+00 5.6830159649405887e-01 5.1297548009059424e-01 + -2.0630855339123491e+00 6.4587828613889109e-01 4.8793754905985409e-01 + -2.2751720259382733e+00 7.3586948737574387e-01 4.6847966240503630e-01 + id 12083 + loc 4.0752470493316650e-01 7.2433918714523315e-01 1085 + blend 0.0000000000000000e+00 + interp 4.2751295205640727e-01:3.7262452561732601e-01:2.2423779881878314e-01:3.1919242677086052e-01:1.0218625243529182e+00:3.3546402306571782e-01:1.9142932275824420e+00:2.7373500832475262e-01:2.5193908342315998e+00:4.2750867692688671e-01:3.0002791691374275e+00:3.4404367832447025e-01:3.6376651719527016e+00 + CVs 20 + -1.3586286345967527e-01 3.9783672237423484e-01 2.8006175365164804e-01 + -2.8922502432762665e-01 7.1459313886101616e-01 4.5931662687658814e-01 + -4.5196478886453229e-01 9.8900337659373128e-01 5.9072548155621307e-01 + -6.1582441806983168e-01 1.2343753414214778e+00 6.9544418788516327e-01 + -7.7595949852850465e-01 1.4495035279958053e+00 7.7367854542661663e-01 + -9.2797375462382692e-01 1.6377017874281208e+00 8.3103912446431061e-01 + -1.0729813300199953e+00 1.8068888765154492e+00 8.7467738240715542e-01 + -1.2208911385425312e+00 1.9660647316047413e+00 9.0496603806302056e-01 + -1.3824277522663924e+00 2.1192760389642036e+00 9.0609020075787305e-01 + -1.5554107279342080e+00 2.2543640837445209e+00 8.4607732514319822e-01 + -1.7288979155978326e+00 2.3511266643521767e+00 7.0803427874430980e-01 + -1.9032826885625767e+00 2.3950032731831725e+00 4.9778062548822810e-01 + -2.0855527426473781e+00 2.3678421729488064e+00 2.2405100114597121e-01 + -2.2810915574444897e+00 2.2373337132918039e+00 -1.0712056114355639e-01 + -2.4986200442111541e+00 1.9625500362091184e+00 -4.5468252836129380e-01 + -2.7328707914976369e+00 1.5349392384003857e+00 -7.1457232332783127e-01 + -2.9779572045621268e+00 1.0100882273214571e+00 -8.1805983864734855e-01 + -3.2847618796064659e+00 4.9889381971293090e-01 -7.5702278732148476e-01 + -3.7063409940250320e+00 2.2597108094097962e-01 -5.6540812632575421e-01 + id 12084 + loc 3.9032745361328125e-01 1.0431646555662155e-01 384 + blend 0.0000000000000000e+00 + interp 4.9372210704702857e-01:3.1026534622566682e-01:7.8840720243275375e-02:4.9371716982595815e-01:6.7736944116830744e-01:3.1076363539474128e-01:1.5597036880124464e+00:4.1529391810036614e-01:2.0638478029704661e+00:3.0507294136789564e-01:3.0259732880048511e+00 + CVs 20 + -5.6040390877636093e-01 2.1428067104023163e-01 -1.0580170771134787e+00 + -1.0262566607309822e+00 2.8503344699280753e-01 -1.7149274839183617e+00 + -1.4856577383170957e+00 2.8999781230724031e-01 -2.2776030646718497e+00 + -1.9633927371894266e+00 2.5841098872065155e-01 -2.8724381236084930e+00 + -2.4345729581712954e+00 1.7121454563900040e-01 -3.4784033902612630e+00 + -2.8780918286482731e+00 2.2636367229979082e-02 -4.0673702790287320e+00 + -3.2845577874392475e+00 -1.7871638957328240e-01 -4.6143328074215813e+00 + -3.6552653288290116e+00 -4.1716953541892143e-01 -5.1044241260280385e+00 + -3.9956539420599402e+00 -6.7551809958224140e-01 -5.5313666753399309e+00 + -4.3109425306152289e+00 -9.3955295832267405e-01 -5.8953468906350119e+00 + -4.6034582810821201e+00 -1.2070892956845591e+00 -6.2016500877374483e+00 + -4.8641714808982739e+00 -1.4905335567899969e+00 -6.4518913427356921e+00 + -5.0788773169449026e+00 -1.8029177826779541e+00 -6.6476906109085068e+00 + -5.2379627707487604e+00 -2.1501962209505079e+00 -6.7997786778087441e+00 + -5.3434962961764665e+00 -2.5352912763466069e+00 -6.9194800258678386e+00 + -5.4154013166589019e+00 -2.9557354565639216e+00 -7.0107482578449991e+00 + -5.4804234320701317e+00 -3.3989212616389612e+00 -7.0674592155028444e+00 + -5.5491220009303337e+00 -3.8487943059427474e+00 -7.0733632982297721e+00 + -5.5498146315152184e+00 -4.3459651398653554e+00 -6.9251022804763256e+00 + id 12085 + loc 4.6458232402801514e-01 4.1847473382949829e-01 403 + blend 0.0000000000000000e+00 + interp 4.4200737168881010e-01:4.2984307538291971e-01:1.3282959084858215e-03:4.0599704833836825e-01:7.8218226512550171e-01:2.8342463675248070e-01:1.3242504492104779e+00:2.7692085766360225e-01:2.0867873130572705e+00:3.6020288825141095e-01:2.8923182714281594e+00:4.4200295161509323e-01:3.5928988934109789e+00 + CVs 20 + -1.3029299511800199e-01 2.4513986298305972e-02 9.9698911224736161e-02 + -2.4781292596201090e-01 7.3586189746024683e-02 1.8728686677651843e-01 + -3.4363984251715285e-01 1.3264766108061665e-01 2.6418836314097710e-01 + -4.2604331040386662e-01 1.9582340965890677e-01 3.4422120580240217e-01 + -4.9499293954947826e-01 2.6299959368283266e-01 4.2814487397041601e-01 + -5.5248626378856125e-01 3.3432546999433244e-01 5.1768647220577746e-01 + -5.9995433101068818e-01 4.1022520065490709e-01 6.1691938599430696e-01 + -6.3566813514999454e-01 4.9183277750344678e-01 7.3239709271632392e-01 + -6.5478718790802382e-01 5.8050007760705402e-01 8.6924336637305610e-01 + -6.5136506304389985e-01 6.7687237005097822e-01 1.0264172726014069e+00 + -6.2075579118146262e-01 7.8024331154259341e-01 1.1989882926252782e+00 + -5.6065109893767651e-01 8.8820868129103103e-01 1.3815623163338877e+00 + -4.7079503139043838e-01 9.9730214138953055e-01 1.5682627020268751e+00 + -3.5265623708137500e-01 1.1039668106513423e+00 1.7515410208259501e+00 + -2.0938236545655925e-01 1.2054017681139073e+00 1.9216056711913099e+00 + -4.6005769198468924e-02 1.3008790574307225e+00 2.0665384916527123e+00 + 1.3109382636080227e-01 1.3917652782678100e+00 2.1788367005113205e+00 + 3.1774910682984836e-01 1.4776939308860897e+00 2.2658091398763829e+00 + 5.4845745551950775e-01 1.5359089362281888e+00 2.4519797915125388e+00 + id 12086 + loc 9.3928617238998413e-01 1.8778951466083527e-01 1053 + blend 0.0000000000000000e+00 + interp 6.3714298273578207e-01:4.3520486760854610e-01:2.5909727540498140e-01:4.6994516433768430e-01:5.6724962211904928e-01:5.3113501763857496e-01:9.4357491499151835e-01:6.3713661130595478e-01:1.1993705980728613e+00:3.8188229821757314e-01:2.1124142597300883e+00:3.2555105338718004e-01:2.9792539375578659e+00:3.3166819454568985e-01:3.8223746451150098e+00 + CVs 20 + 2.3244162248457473e-01 3.5080389738953621e-01 -1.8415033266818681e-01 + 4.7133030057319281e-01 6.9735799777608731e-01 -3.4628614482927778e-01 + 7.2564323927939967e-01 1.0245315292482955e+00 -4.7809590164035493e-01 + 9.9839739017567974e-01 1.3143114817521566e+00 -5.7393939874309052e-01 + 1.2852063707574448e+00 1.5499516751378675e+00 -6.3319851358933099e-01 + 1.5745298507078844e+00 1.7216498984347410e+00 -6.6171955173841146e-01 + 1.8512627585783912e+00 1.8289002219548720e+00 -6.6757231084404578e-01 + 2.1023137206213947e+00 1.8811601511271860e+00 -6.5728913647673837e-01 + 2.3224881532993509e+00 1.8955332626611017e+00 -6.3499294587659394e-01 + 2.5161049980322203e+00 1.8941125726001000e+00 -6.0488788135555438e-01 + 2.6979791765935057e+00 1.8848202848122038e+00 -5.7069111383205029e-01 + 2.8701259081785002e+00 1.8471492845226520e+00 -5.3028940970653837e-01 + 3.0054235959305480e+00 1.7713462196287582e+00 -5.0052416418037726e-01 + 3.0484629867815518e+00 1.6570090984314176e+00 -5.2842759284947638e-01 + 2.9583495051232496e+00 1.4912101010446126e+00 -6.5215607431719547e-01 + 2.7581051369332994e+00 1.2236597231747437e+00 -8.5651627305311306e-01 + 2.4905113420668665e+00 8.1408440843371666e-01 -1.0403839005800746e+00 + 2.2222373294076077e+00 4.3587233159941263e-01 -1.0407271359181562e+00 + 2.1176763039313471e+00 6.2469623536933905e-01 -8.3545339442140620e-01 + id 12087 + loc 7.0674800872802734e-01 3.5926443338394165e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5032660710099400e-01:2.6471187061231349e-01:3.1179123728096125e-01:3.4759000422711722e-01:1.0102603739568419e+00:2.8432611265990942e-01:1.9836906570491091e+00:3.5032310383492299e-01:2.5174970319034573e+00:3.4195105337101528e-01:3.0344494844467520e+00:3.2164879452869577e-01:3.9007951815311914e+00 + CVs 20 + -2.6299372573351720e-01 3.2314736593832410e-01 1.7632616128551165e-01 + -5.1146443585998702e-01 6.4662407561149027e-01 3.8523983163807196e-01 + -7.4741067436581476e-01 9.4903776759964797e-01 6.3841081781327247e-01 + -9.5751214703669252e-01 1.2114976373821353e+00 9.3503324953372591e-01 + -1.1299442015653731e+00 1.4164952262766621e+00 1.2643315129856707e+00 + -1.2792086167576076e+00 1.5578033130639426e+00 1.6197067128561440e+00 + -1.4356228864695444e+00 1.6453643006224576e+00 2.0038144503698012e+00 + -1.6222053860678993e+00 1.6905542256663464e+00 2.4078813930691161e+00 + -1.8462792320472845e+00 1.7019191293056353e+00 2.8058541253698381e+00 + -2.1037723127823771e+00 1.6857604711293157e+00 3.1708596807570317e+00 + -2.3795944974901948e+00 1.6463660895245220e+00 3.4828116887788254e+00 + -2.6506472593661372e+00 1.5883854050140851e+00 3.7324897752603214e+00 + -2.9097141247871501e+00 1.4953133387992228e+00 3.9391958273178038e+00 + -3.1503251749135726e+00 1.2969297129803148e+00 4.1344563747618404e+00 + -3.3317139740249626e+00 9.6007768410484529e-01 4.3046463703111604e+00 + -3.4196423501989441e+00 5.4254641687616023e-01 4.4203776879159147e+00 + -3.3376611142149799e+00 1.2983289077789761e-01 4.4838580116466193e+00 + -2.9962955083270439e+00 -1.2235114244932954e-01 4.5237039336614178e+00 + -2.5410878322426016e+00 -2.3481804555239205e-01 4.5641169375606152e+00 + id 12088 + loc 3.0401709675788879e-01 7.4111849069595337e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5394813760069830e-01:4.1598455740593054e-01:3.5269217372295381e-02:3.7279664679759011e-01:8.6954445393213575e-01:3.5416094995549879e-01:1.5080981271145439e+00:4.5394359811932233e-01:2.1361155786452732e+00:3.5528264298811391e-01:2.9685368964183714e+00:3.1114899024536752e-01:3.4749805647568754e+00 + CVs 20 + 1.1861880827163129e-01 6.5993310502706393e-01 -2.3811945983112962e-01 + 2.3669372373429304e-01 1.3418429312061420e+00 -4.0116013237515058e-01 + 4.0147832890765234e-01 2.0624606092643090e+00 -4.4847379764991380e-01 + 6.7711741881317289e-01 2.8207979440521775e+00 -3.5122758536808574e-01 + 1.1529909900557000e+00 3.5637883235447858e+00 -1.1658676451153771e-01 + 1.8973849172560673e+00 4.1709880646327218e+00 1.8480270501056717e-01 + 2.8947500683622240e+00 4.4844894061150624e+00 4.5508901671690150e-01 + 4.0151768514579249e+00 4.3754205591169253e+00 6.1550308617750815e-01 + 5.0507634853561978e+00 3.8152162144249502e+00 6.3995894604072023e-01 + 5.7944289549657650e+00 2.8801347594676048e+00 5.9062240910011166e-01 + 6.0919317523519956e+00 1.7398807708764097e+00 6.0174072497251097e-01 + 5.9335124094938978e+00 6.3924067245865412e-01 7.6013088637776738e-01 + 5.4808855641247867e+00 -2.6173194956191248e-01 1.0152148242788013e+00 + 4.9306435773482837e+00 -9.7649958570653139e-01 1.2536499578470957e+00 + 4.4702416116816091e+00 -1.5873350413909666e+00 1.3830865568700172e+00 + 4.4477397937667158e+00 -2.1397163003335966e+00 1.3203800222513655e+00 + 5.6591179292227700e+00 -3.5380446755334694e-02 1.1281716176448553e+00 + 4.5348210152348409e+00 6.5874281739660212e-01 1.6002537548829809e+00 + 4.7125866256480533e+00 9.6916912315401105e-01 1.6871915352347762e+00 + id 12089 + loc 6.3108369708061218e-02 8.5081852972507477e-02 1078 + blend 0.0000000000000000e+00 + interp 5.0957687748589342e-01:2.8097588005007629e-01:4.1461056832032206e-01:2.9970074968997451e-01:1.4215726934271435e+00:5.0957178171711859e-01:1.9795317887654051e+00:3.5571477951715846e-01:2.6824453910741690e+00:4.6682352606992245e-01:3.0736702752207661e+00:3.5551038641667310e-01:3.9097950732857933e+00 + CVs 20 + 2.8471397458467729e-01 3.8356017782113899e-01 -1.5763451691415789e-01 + 4.8117336173196001e-01 7.0475519405170561e-01 -3.1741290716463233e-01 + 6.5636455194375942e-01 1.0063161069577808e+00 -4.8198462115812030e-01 + 8.2703709662074487e-01 1.3091731081410303e+00 -6.6020700850268443e-01 + 9.7834589790743065e-01 1.6132519827728085e+00 -8.6251368210992596e-01 + 1.0863275756916144e+00 1.9153381674714167e+00 -1.1033569018045419e+00 + 1.1199607672240619e+00 2.1979638430564123e+00 -1.3939493154866684e+00 + 1.0555701676713971e+00 2.4267827441877361e+00 -1.7307593804815531e+00 + 8.8976833114652498e-01 2.5618953451192938e+00 -2.0913458005962675e+00 + 6.4633300366382629e-01 2.5771884025918954e+00 -2.4386970726373414e+00 + 3.6436804437736858e-01 2.4767532622273025e+00 -2.7405362830087574e+00 + 7.4480326286672338e-02 2.2839815027651311e+00 -2.9834739237851204e+00 + -2.0562670279101536e-01 2.0212209080981958e+00 -3.1670993306299584e+00 + -4.6004444949717238e-01 1.7027352449649811e+00 -3.2956094226220602e+00 + -6.5360978447291829e-01 1.3287806119674095e+00 -3.3730399260458204e+00 + -6.9031707782930796e-01 8.9493984855454012e-01 -3.3937330769618517e+00 + -4.7078934373570752e-01 4.7383985386795979e-01 -3.3381169434411007e+00 + -1.4902583671848635e-01 1.2416649213505632e-01 -3.2185238727363159e+00 + -2.2925025780347830e-02 -3.2817234720378935e-01 -3.1181770000816829e+00 + id 12090 + loc 9.4600850716233253e-03 4.9695843458175659e-01 1084 + blend 0.0000000000000000e+00 + interp 3.8535516972968303e-01:3.4520328893921520e-01:4.5006484635743516e-01:3.1615607158476838e-01:1.0821662951600828e+00:2.0472085074354476e-01:1.9986506723720372e+00:3.3136068540253444e-01:3.3089535094569271e+00:3.8535131617798574e-01:3.9982023571395073e+00 + CVs 20 + 5.2908668417373250e-01 4.2031148793377970e-01 2.7960593197441352e-01 + 9.8573982214424838e-01 7.3820709285858821e-01 5.2599468312830999e-01 + 1.4506664754873637e+00 1.0160732362829745e+00 7.5755732437106649e-01 + 1.9422940347210140e+00 1.2894344882861173e+00 1.0093205510107834e+00 + 2.4186273503783489e+00 1.5648854241205952e+00 1.3205095949699057e+00 + 2.8288463127079750e+00 1.8400970183308449e+00 1.7205174561560708e+00 + 3.1166496915856339e+00 2.1022746801244852e+00 2.2221599867592370e+00 + 3.2100168517482519e+00 2.3261711215364045e+00 2.8247810442448502e+00 + 3.0200784191299914e+00 2.4506278769523377e+00 3.4739121576356800e+00 + 2.5778641681467112e+00 2.3959694875033475e+00 4.0036041478030358e+00 + 2.1062008139741946e+00 2.1605821160710796e+00 4.3141094614417783e+00 + 1.8084456695510489e+00 1.8218426565153776e+00 4.4708127556267181e+00 + 1.6853816026929649e+00 1.4820649935109438e+00 4.5719280951885750e+00 + 1.5646623544785894e+00 1.1097859526173877e+00 4.6457183815819709e+00 + 1.3493131903709239e+00 6.3286354517573373e-01 4.6583626282507238e+00 + 1.0128033051091980e+00 1.2031757297724932e-01 4.5780641925405652e+00 + 5.5863243627736214e-01 -2.9360142506530973e-01 4.4180707768926677e+00 + 6.1146163425753325e-02 -5.2229916926456954e-01 4.2392229622623070e+00 + -1.6421286846359640e-01 -6.1438982575013257e-01 4.1727014814528678e+00 + id 12091 + loc 5.8984947204589844e-01 3.9431190490722656e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7919444167151939e-01:3.2029280545957628e-01:6.9140365509933766e-01:2.9692343615603783e-01:1.3043994466844209e+00:3.7919064972710270e-01:1.9996950155145017e+00:3.0745514329878898e-01:2.5961823342775796e+00:2.8507376269022472e-01:3.0947929409376789e+00:3.3289360695227399e-01:3.9557268525644211e+00 + CVs 20 + -3.9640005610287347e-02 3.0227969315895298e-01 1.8327239772209050e-01 + -1.0711293157622157e-01 6.0914615520217930e-01 3.7615584654508993e-01 + -1.9861316857297964e-01 9.1390154436350401e-01 5.6098974193864570e-01 + -3.1478482655060108e-01 1.2073565288723074e+00 7.2695529781526946e-01 + -4.5951095160826783e-01 1.4789056117829409e+00 8.7694000748204504e-01 + -6.3567851168164313e-01 1.7172711576265232e+00 1.0289546513627912e+00 + -8.3921936417269638e-01 1.9104012486954189e+00 1.2026042915866424e+00 + -1.0568084199998016e+00 2.0499588504040283e+00 1.4061043700892339e+00 + -1.2717925945118302e+00 2.1325621964454582e+00 1.6387763198232066e+00 + -1.4687516599069368e+00 2.1563235897773430e+00 1.8949160917478203e+00 + -1.6348067484427817e+00 2.1200532329661073e+00 2.1641775615511976e+00 + -1.7603156404137823e+00 2.0257107762425353e+00 2.4312509348819646e+00 + -1.8408518183706497e+00 1.8805397608432539e+00 2.6784254399927159e+00 + -1.8780759056673495e+00 1.6968489136512854e+00 2.8895955203156074e+00 + -1.8789655755476298e+00 1.4902322324261936e+00 3.0529645386124487e+00 + -1.8542875266149790e+00 1.2743603411468649e+00 3.1633597900593529e+00 + -1.8149353942641502e+00 1.0587296386699734e+00 3.2192526501459255e+00 + -1.7644205561992059e+00 8.5492676819046354e-01 3.2128445078749381e+00 + -1.6566166146327082e+00 6.7270493038387036e-01 3.0539226420733083e+00 + id 12092 + loc 6.2826938927173615e-02 6.5461808443069458e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8750044397884862e-01:3.7550240795540368e-01:2.9842352422378915e-01:3.8732429500062165e-01:1.0015718672597798e+00:2.8108759640692793e-01:1.4915758796200427e+00:4.1340358601485616e-01:1.9876498707287207e+00:4.1153668034602320e-01:2.7073485136188173e+00:4.8749556897440888e-01:3.0028832570313990e+00:3.3187224400907750e-01:3.6764188718929125e+00 + CVs 20 + -1.8548732663789844e-01 2.0894785715492228e-01 3.0379387664842938e-01 + -2.9138825988155959e-01 3.2259354529637740e-01 4.4571784154765959e-01 + -3.6589515132394257e-01 3.9671782791754662e-01 5.2063897250525315e-01 + -4.4053482656928028e-01 4.6911302071161909e-01 6.0676389700612321e-01 + -5.2067868407005369e-01 5.4397404794163962e-01 7.0409611588093690e-01 + -6.1378493204120987e-01 6.2339374063739073e-01 8.1200907686020318e-01 + -7.2759317717094518e-01 7.0677309054697690e-01 9.2881845296564336e-01 + -8.6815996779788573e-01 7.9161507361253558e-01 1.0520090860641576e+00 + -1.0395503136181912e+00 8.7460787317907840e-01 1.1793036052769641e+00 + -1.2442619516162581e+00 9.5238896360575309e-01 1.3088082968576757e+00 + -1.4843192662526354e+00 1.0220568876507661e+00 1.4394006721873098e+00 + -1.7621877781887474e+00 1.0795746058874334e+00 1.5706678726911694e+00 + -2.0757705124294947e+00 1.1156370010032148e+00 1.6988404791320368e+00 + -2.4090613786977984e+00 1.1164380893859729e+00 1.8137177340141410e+00 + -2.7382386047075391e+00 1.0770821397390538e+00 1.9060058586348387e+00 + -3.0534652784986931e+00 1.0095048722452034e+00 1.9775655806898915e+00 + -3.3581655445979313e+00 9.2947726690730859e-01 2.0387312083703337e+00 + -3.6546440720934426e+00 8.4516915662473224e-01 2.1022253123246819e+00 + -4.0130858567293535e+00 7.6171120387889624e-01 2.2361813609122967e+00 + id 12093 + loc 3.1638105865567923e-03 7.9222694039344788e-02 406 + blend 0.0000000000000000e+00 + interp 4.1012760957580957e-01:4.0536248040065886e-01:1.2768938479300607e-03:2.6587803008909866e-01:9.6497066354953709e-01:3.4912112029382825e-01:1.2104495882796260e+00:2.5958228846848591e-01:1.9930146623620264e+00:3.5633833959649619e-01:2.8478658592563022e+00:4.1012350829971383e-01:3.4526183860330137e+00 + CVs 20 + -2.2597830057816272e-02 1.5826669038369867e-01 5.5010690031478481e-02 + -2.3777122484083327e-02 3.1082289811117075e-01 1.3912686541230823e-01 + -3.3520223972017066e-02 4.6100241831113226e-01 2.4744407733298571e-01 + -5.0020060141079736e-02 6.0354551245967403e-01 3.8074800730077918e-01 + -6.5375387261738999e-02 7.3187613201784474e-01 5.3938834525022039e-01 + -7.0526739346343056e-02 8.3992234507332475e-01 7.2032201735514045e-01 + -5.6466392795851889e-02 9.2340841654300720e-01 9.1634703708703036e-01 + -1.6355970404172256e-02 9.8082582886160263e-01 1.1170846484037351e+00 + 5.2387666155283973e-02 1.0130737323153427e+00 1.3117793071290156e+00 + 1.4863040540318911e-01 1.0220637211065526e+00 1.4917764465147265e+00 + 2.7132692878538789e-01 1.0080491028525049e+00 1.6514322155149208e+00 + 4.2009621716416518e-01 9.6784818419224539e-01 1.7877189081017435e+00 + 5.9066634745180946e-01 9.0585345529539762e-01 1.8937197698593495e+00 + 7.7350382117795846e-01 8.6034730441034657e-01 1.9494095465621011e+00 + 9.5442759468922334e-01 8.9489620270790016e-01 1.9299071035686755e+00 + 1.1072903193625494e+00 1.0257922674703306e+00 1.8318191855449166e+00 + 1.2243892958983813e+00 1.1950013258862142e+00 1.6970379817235561e+00 + 1.3480314756151752e+00 1.3492079869776188e+00 1.5753156126984358e+00 + 1.5845311032254037e+00 1.3963571913162089e+00 1.6636560023114224e+00 + id 12094 + loc 1.5385052561759949e-01 7.9684954881668091e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4676803630491563e-01:3.4353457954940225e-01:4.4450169873870071e-02:3.2578696209889091e-01:9.6943947778119477e-01:3.6847057002570655e-01:1.6598034825793277e+00:3.6857580739655488e-01:2.2869846523511823e+00:4.4676356862455258e-01:3.0160791095275448e+00:4.1988074348914994e-01:3.6290727988053977e+00 + CVs 20 + 3.4959353929214197e-03 3.2566679810410049e-01 -1.7303098816250054e-01 + 4.2254096267847679e-02 6.5855308161659309e-01 -3.3819533442329541e-01 + 9.5421078567830886e-02 1.0040091273352136e+00 -4.9664222594347607e-01 + 1.5122816480541346e-01 1.3709054220194139e+00 -6.6062997662599565e-01 + 2.0444029479241155e-01 1.7608481982158832e+00 -8.5141449235766853e-01 + 2.4586031196369151e-01 2.1660219931689513e+00 -1.0928131074047591e+00 + 2.6540698133647667e-01 2.5696588267948681e+00 -1.4061393894993954e+00 + 2.5701883121374569e-01 2.9436955054844982e+00 -1.8053870719813057e+00 + 2.2462430953917473e-01 3.2480285888133889e+00 -2.2905925567892824e+00 + 1.9163941876655199e-01 3.4581879517364866e+00 -2.8491829028641282e+00 + 2.0241857508566927e-01 3.5825317463933271e+00 -3.4633956720284185e+00 + 2.9850800077964001e-01 3.6245113864994263e+00 -4.1162692218796781e+00 + 4.9216635950473825e-01 3.5513739769379953e+00 -4.7821248349642973e+00 + 7.7741233468068582e-01 3.3332309714535415e+00 -5.4148809094908339e+00 + 1.1385712106387780e+00 2.9901157031028243e+00 -5.9624135552385820e+00 + 1.5081306141188271e+00 2.5775100075233501e+00 -6.4226052186356970e+00 + 1.7838955399091994e+00 2.1410745064554959e+00 -6.8651659398482705e+00 + 1.9540674580463833e+00 1.7064678246877889e+00 -7.3341936610854503e+00 + 2.2096118061950705e+00 1.2805342543574871e+00 -7.7765613291779569e+00 + id 12095 + loc 6.0221332311630249e-01 2.2681358456611633e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7820369089402665e-01:3.4374350659280656e-01:1.1901285562473451e-01:3.0104899359077014e-01:9.4115521212418851e-01:2.4466925330632039e-01:1.5294805587364264e+00:3.1434566557740939e-01:2.0685363854304040e+00:4.7819890885711774e-01:2.9115003537519861e+00:2.8177225325756083e-01:3.5786684530262409e+00 + CVs 20 + -1.2307561899917317e-01 1.7580711093809534e-01 2.9869801758862657e-01 + -2.2843419493643227e-01 3.7274863229330013e-01 6.0120543400057769e-01 + -3.2605573897906315e-01 5.7025793502362854e-01 9.0116070499656742e-01 + -4.2626719665885132e-01 7.4596738640005966e-01 1.1914219374072517e+00 + -5.3586851486661358e-01 8.8627210858116434e-01 1.4675352152623835e+00 + -6.4931254322448728e-01 9.8247391284004659e-01 1.7172750236284364e+00 + -7.4070293495506800e-01 1.0296247131353353e+00 1.9137630880092251e+00 + -7.7760651094430344e-01 1.0426774107793078e+00 2.0364682621870727e+00 + -7.7326613550989554e-01 1.0552119168377665e+00 2.1161266157807272e+00 + -8.0468066360922297e-01 1.0673503336464421e+00 2.2098815596905186e+00 + -9.1041358652100635e-01 1.0593930799177094e+00 2.3202661276334844e+00 + -1.0659749056306913e+00 1.0280788274902659e+00 2.4314201509588615e+00 + -1.2470069069366370e+00 9.3457793932296451e-01 2.5598829842891373e+00 + -1.4589158934868984e+00 6.9388241996593025e-01 2.7222474362183626e+00 + -1.7466178888579877e+00 2.9406573182296530e-01 2.8743904084327507e+00 + -2.1928282140214908e+00 -1.5614915486981396e-01 2.9510261079358462e+00 + -2.8131971348412406e+00 -4.6612501371704596e-01 2.9589466144546650e+00 + -3.4744252661756443e+00 -5.6297002048482714e-01 2.9685027974931582e+00 + -4.0695085330244414e+00 -6.5059013502506602e-01 3.0161978184166980e+00 + id 12096 + loc 4.9334818124771118e-01 9.4640845060348511e-01 411 + blend 0.0000000000000000e+00 + interp 6.2184430300294413e-01:4.6635818468450152e-01:9.4388009326715427e-02:4.8227263635695561e-01:6.3207719817402619e-01:4.6741747176327897e-01:9.9823620036325733e-01:6.2183808455991418e-01:1.5008764026106789e+00:4.7225948455588068e-01:1.9712425316980160e+00:3.7283919056390563e-01:2.2852499167819440e+00:3.0152986217384831e-01:2.9606425456698293e+00:3.6177605619047737e-01:3.8283116166563431e+00 + CVs 20 + 9.9890568136942703e-01 1.6759878785267349e-01 -1.6060856008541041e-01 + 1.6605546275852496e+00 1.5649163580449180e-01 -3.2773307146912717e-01 + 2.2380561901326876e+00 6.8379298525556131e-02 -4.8694001509821727e-01 + 2.8218617790996388e+00 -5.5691859024986634e-02 -6.2656559524907851e-01 + 3.3965587545865494e+00 -2.0916453882673747e-01 -7.2918973374029949e-01 + 3.9458876161261647e+00 -3.8194940144431699e-01 -7.8666376757079537e-01 + 4.4575650866037542e+00 -5.6333481748880743e-01 -8.0499338952717536e-01 + 4.9249354612944662e+00 -7.4558820785163160e-01 -7.9892630062403569e-01 + 5.3442663737661373e+00 -9.2157035745241545e-01 -7.6007550094289200e-01 + 5.7150468380077459e+00 -1.0863783249958414e+00 -6.7513438188840769e-01 + 6.0466975422778670e+00 -1.2453308689233265e+00 -5.4155211566665074e-01 + 6.3546812316367269e+00 -1.4195466967074675e+00 -3.6824609478537290e-01 + 6.6449087348734661e+00 -1.6267546350967852e+00 -1.6617983586026075e-01 + 6.9176805986161423e+00 -1.8654352197124693e+00 5.9054191320418226e-02 + 7.1749274084794274e+00 -2.1278558453955760e+00 2.9949264373909157e-01 + 7.4206973579755289e+00 -2.4133635477651580e+00 5.3777530642440996e-01 + 7.6523974152365879e+00 -2.7259759773558487e+00 7.5782810289740843e-01 + 7.8540233213383797e+00 -3.0789587655647477e+00 9.5946663088255479e-01 + 7.9360078144597512e+00 -3.4702438172780745e+00 1.1258383825241540e+00 + id 12097 + loc 7.2195893526077271e-01 7.3640143871307373e-01 416 + blend 0.0000000000000000e+00 + interp 5.1369097157731247e-01:4.5012422611912373e-01:3.1926303619401297e-02:4.1766457219826597e-01:9.1840645612732075e-01:3.1361358767167835e-01:1.9680059378380235e+00:3.4294837296086461e-01:2.9934456387286472e+00:5.1368583466759676e-01:3.6023419260735197e+00 + CVs 20 + 7.7601233060807695e-01 2.2541088365896783e-01 -1.2897617075723783e-01 + 1.2874073016200480e+00 3.2633565596330183e-01 -2.5676898805830750e-01 + 1.7392192737347809e+00 3.8691010455858243e-01 -3.7146886257289125e-01 + 2.2187529488596085e+00 4.4152995957802554e-01 -4.7020613015311841e-01 + 2.7176830066037909e+00 4.8054784044905569e-01 -5.5009077853830357e-01 + 3.2282820902517497e+00 4.9623643542281848e-01 -6.0639457674128794e-01 + 3.7448744374909593e+00 4.8372453872884846e-01 -6.3399354523161855e-01 + 4.2641234261020813e+00 4.4106510945743072e-01 -6.2980391284672332e-01 + 4.7841118310383486e+00 3.6944170427320988e-01 -5.9439491277483958e-01 + 5.3026843944353299e+00 2.6476388754633162e-01 -5.3252498862611686e-01 + 5.8151079607936680e+00 1.1686235500845776e-01 -4.5199665798272770e-01 + 6.3106485499817238e+00 -8.8289073526327977e-02 -3.7759022733386627e-01 + 6.7699485364226888e+00 -3.6259849117639753e-01 -3.5263878759990963e-01 + 7.1758429942025295e+00 -7.0778279412600131e-01 -4.0684984965032778e-01 + 7.5162175319157107e+00 -1.1159839772184712e+00 -5.4128840859299432e-01 + 7.7701586923730579e+00 -1.5596185455619374e+00 -7.4834628846821216e-01 + 7.9175865489191750e+00 -1.9921324015524502e+00 -1.0200700767452162e+00 + 7.9632424656760570e+00 -2.3741211801812443e+00 -1.3384378231324723e+00 + 8.0495060633377449e+00 -2.8035743375497768e+00 -1.6179602546322998e+00 + id 12098 + loc 1.3373845815658569e-01 9.4433104991912842e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3591646053082589e-01:3.3458191295709283e-01:5.7400377499750166e-01:3.3260432134566958e-01:1.2066215019359308e+00:3.6529050828070775e-01:1.9965312492922622e+00:2.7330117279353688e-01:2.8640138937881936e+00:2.9175947507842270e-01:3.4097524028357591e+00:4.3591210136622061e-01:3.9807924888683242e+00 + CVs 20 + -2.2825783029554673e-02 1.6929353519904994e-01 7.7801043862992664e-02 + -2.6615619858465878e-02 3.1945502008341653e-01 1.1746267203366605e-01 + -2.2795777749486341e-02 4.4714124929343579e-01 1.3073216139521993e-01 + -2.0641574107453195e-02 5.6517532694956385e-01 1.3388881210681641e-01 + -1.8507556392926835e-02 6.6953264817849356e-01 1.2849103835577519e-01 + -1.2971748015704295e-02 7.5637054328827569e-01 1.1885842223421389e-01 + 4.5713169519901679e-04 8.2373939923770612e-01 1.0924126772084591e-01 + 2.6639692742452387e-02 8.7251213688206974e-01 1.0107783060358572e-01 + 6.8512589390840470e-02 9.0808490746028969e-01 9.4626180854308850e-02 + 1.2516255585939068e-01 9.4094946038558724e-01 9.2877275462556474e-02 + 1.9396237466792257e-01 9.8411951216657823e-01 1.0150752831557125e-01 + 2.6836633457065712e-01 1.0481416738946456e+00 1.2212327742353551e-01 + 3.4102002524397840e-01 1.1337641976101476e+00 1.4666086340615653e-01 + 4.1146880486737530e-01 1.2272717502443591e+00 1.5806713221650270e-01 + 4.8413049397852498e-01 1.3022641611792123e+00 1.3897178863507609e-01 + 5.6004886961325950e-01 1.3464254583957214e+00 8.7595368376407134e-02 + 6.3102805596161260e-01 1.3703000210209237e+00 1.8832248111066874e-02 + 6.8283160567429346e-01 1.3736153600489662e+00 -4.3461165707160743e-02 + 7.1740617616827351e-01 1.2751543696792305e+00 -9.9792061897687190e-02 + id 12099 + loc 8.9249521493911743e-01 5.9105950593948364e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8218888639406201e-01:3.4805879350345653e-01:5.0967250999335301e-01:2.8415159884258012e-01:1.0325690848601199e+00:2.8946349572715235e-01:1.9279667686316619e+00:3.1207852847033235e-01:2.3485122863875132e+00:3.8218506450519807e-01:3.0008497217108516e+00:3.5230015464075004e-01:3.9410708381772803e+00 + CVs 20 + 2.0145538611907460e-01 3.3264176476547391e-01 -1.8730854205331743e-01 + 3.9044447541591970e-01 6.8131680992574761e-01 -3.4674950577794028e-01 + 5.8400419290049044e-01 1.0341714339810975e+00 -4.6383722558935669e-01 + 7.9414697305538584e-01 1.3776709252989923e+00 -5.3596936373719373e-01 + 1.0297261698518549e+00 1.7019687306973545e+00 -5.7227245815824157e-01 + 1.3076086452353195e+00 1.9994167132183702e+00 -5.8985300655300577e-01 + 1.6421008402013491e+00 2.2578420556939767e+00 -6.1266119368293115e-01 + 2.0259408499590252e+00 2.4590766502379644e+00 -6.6715956623431261e-01 + 2.4308353956972231e+00 2.5948193075658432e+00 -7.7304154629991695e-01 + 2.8461599683107583e+00 2.6676023880030297e+00 -9.4682841387982120e-01 + 3.2836980741882806e+00 2.6396790394096392e+00 -1.2231255485495423e+00 + 3.6517492276338492e+00 2.4319632743577628e+00 -1.6085994929700813e+00 + 3.7959445586944636e+00 2.1478374988031361e+00 -1.9777481100703649e+00 + 3.7023189169148312e+00 1.9786556625759735e+00 -2.2896427504292509e+00 + 3.6089279340087583e+00 1.6287654662852107e+00 -2.7464635157114854e+00 + 3.6747502889413544e+00 6.9637208635960723e-01 -3.1127212485158315e+00 + 3.4029645633372025e+00 4.1781543743915617e-01 -3.2190513310342497e+00 + 3.1209250860153293e+00 3.3562428206835315e-01 -3.3133368923312991e+00 + 2.8876797891596944e+00 2.1831311552974730e-01 -3.4133003475705506e+00 + id 12100 + loc 6.3872313499450684e-01 3.3621326088905334e-01 1053 + blend 0.0000000000000000e+00 + interp 4.5763138620248406e-01:4.2353003761079633e-01:8.9567534038359231e-01:2.6658489426622212e-01:1.2173469176779812e+00:4.5762680988862203e-01:1.8275650704688498e+00:2.7835898217094723e-01:2.6998760218229498e+00:2.5106631451392830e-01:3.9081737231325167e+00 + CVs 20 + 3.0925370520419981e-01 3.6810098851939110e-01 -3.5886858916614855e-01 + 6.4093110365433403e-01 6.7283982440850054e-01 -6.7317464899736179e-01 + 9.7920337964473259e-01 9.2323184061361496e-01 -9.5969857026584426e-01 + 1.3161277871740720e+00 1.1105459511960372e+00 -1.2111264954251220e+00 + 1.6405400510736867e+00 1.2222547736410956e+00 -1.4115115644804441e+00 + 1.9339874341278724e+00 1.2549781394615005e+00 -1.5475565308207582e+00 + 2.1795111659446116e+00 1.2228278239677151e+00 -1.6131877761099287e+00 + 2.3668247510829414e+00 1.1526875345784853e+00 -1.6099287390732329e+00 + 2.4825998194679881e+00 1.0751949636651041e+00 -1.5462520259429895e+00 + 2.5085733009469666e+00 1.0298424828441481e+00 -1.4417829424416653e+00 + 2.4720287982438092e+00 1.0558078825396406e+00 -1.3282438585604104e+00 + 2.4628746235876764e+00 1.1228370535402230e+00 -1.2093814325352672e+00 + 2.5131261848185251e+00 1.1465928594352572e+00 -1.0473081402751878e+00 + 2.5845224629038470e+00 1.0889150119433588e+00 -8.1662912775692664e-01 + 2.6631570775567650e+00 1.0117034016273001e+00 -5.4707266863324611e-01 + 2.7900458694699419e+00 1.0025443057540921e+00 -3.3790365620026719e-01 + 2.9822084985579322e+00 1.0418035540340205e+00 -3.0484835347760808e-01 + 3.1865973017553828e+00 1.0259237287882808e+00 -3.6079183630496919e-01 + 3.3679219234852429e+00 1.1340742478812953e+00 -4.1182989733826975e-02 + id 12101 + loc 5.9449654817581177e-01 2.6628756523132324e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7919444167151939e-01:3.2316129769000673e-01:5.5420156281508248e-01:3.0032987995866584e-01:1.2483795055177642e+00:3.7198963902737786e-01:1.9593821765838642e+00:3.2961232284484421e-01:2.2734867484567727e+00:3.2128708046766752e-01:2.9557536754931104e+00:3.0544761431941037e-01:3.3597821070478018e+00:3.7919064972710270e-01:3.9996189070504453e+00 + CVs 20 + 4.7912991184458686e-02 4.0371041630376969e-01 1.7656732693833585e-01 + 6.6590236577773881e-02 8.1022242557308288e-01 3.5680635613334355e-01 + 7.3222341618752157e-02 1.2138969125069867e+00 5.1862448845810594e-01 + 6.3398744086976155e-02 1.6133236155324671e+00 6.6142903545074216e-01 + 1.9598533675802388e-02 2.0109153602175862e+00 8.1154187350801488e-01 + -8.0381353834559466e-02 2.4034895369292228e+00 1.0162002327837900e+00 + -2.3599709699157800e-01 2.7600980024139035e+00 1.3006114538970295e+00 + -4.1514503556339910e-01 3.0460671101361347e+00 1.6555734711809003e+00 + -5.8358592116391084e-01 3.2457639955423359e+00 2.0669052517576256e+00 + -7.1830476543541788e-01 3.3500232760375352e+00 2.5259571456053269e+00 + -7.9863063600465456e-01 3.3486160414188961e+00 3.0170663515621721e+00 + -8.0502583510458392e-01 3.2387335469336032e+00 3.5084157283883011e+00 + -7.2788692052084802e-01 3.0273112241370894e+00 3.9648478858888629e+00 + -5.6672562219695455e-01 2.7246221864501297e+00 4.3556944645888267e+00 + -3.2820676439104080e-01 2.3545917690175151e+00 4.6450550727452633e+00 + -3.3477368754578407e-02 1.9675954701154064e+00 4.7998372771684652e+00 + 2.8192795246983904e-01 1.6199427466957252e+00 4.8162999424107076e+00 + 5.8288532450750830e-01 1.3422199321595554e+00 4.7225170097106988e+00 + 8.3313719966953537e-01 1.1538342314613852e+00 4.5602994991524133e+00 + id 12102 + loc 8.3404695987701416e-01 6.7223888635635376e-01 403 + blend 0.0000000000000000e+00 + interp 4.9671136867620841e-01:3.6456878045911922e-01:4.5543771507441067e-01:2.7915917786298278e-01:1.0018757943562147e+00:3.0659828028895603e-01:1.7722299791175393e+00:4.4205921685471750e-01:2.5566777562939240e+00:2.7096721757348480e-01:2.9783517077672883e+00:3.5248439110067126e-01:3.4247984840624888e+00:4.9670640156252166e-01:3.9993092616450054e+00 + CVs 20 + 3.1707785403949973e-02 1.0891215593829781e-01 3.3218713010730629e-02 + 4.2251852712885951e-02 2.1257237360355122e-01 6.0507409005040376e-02 + 4.8319469390284725e-02 3.2885850728995325e-01 7.8151101764005235e-02 + 6.8606482144968228e-02 4.6512198745869249e-01 8.8989321681163469e-02 + 1.0056216540886015e-01 6.1855779910851427e-01 8.9894855847903285e-02 + 1.3999312745512671e-01 7.8418619299734371e-01 7.8055091633186066e-02 + 1.8331460675987210e-01 9.5498375203240349e-01 5.1686433826163697e-02 + 2.2668557648424953e-01 1.1227420425165029e+00 9.3961842342935586e-03 + 2.6452363347135999e-01 1.2787435551424062e+00 -5.0012553643266788e-02 + 2.8936806427612993e-01 1.4149763252008718e+00 -1.2655919721539624e-01 + 2.9303764158156864e-01 1.5250031377013276e+00 -2.1779041410687999e-01 + 2.6695806411199619e-01 1.6030739374625784e+00 -3.1783740284844947e-01 + 2.0387883087323988e-01 1.6424191187864592e+00 -4.1363808693808701e-01 + 1.0834957469084117e-01 1.6392996701536986e+00 -4.7872071262667443e-01 + 1.0216528720205620e-02 1.6066009918108868e+00 -4.8601531600501385e-01 + -5.3348945222340682e-02 1.5701855414668735e+00 -4.4154144806922130e-01 + -7.1458326788529147e-02 1.5420230320619592e+00 -3.8037393747786952e-01 + -5.4972596294325604e-02 1.5193553292700481e+00 -3.3465529084802315e-01 + -5.7361971332790085e-02 1.5081246238965340e+00 -3.9047199794576276e-01 + id 12103 + loc 6.4789414405822754e-01 6.3791143894195557e-01 1084 + blend 0.0000000000000000e+00 + interp 4.4409599397543648e-01:3.4854765707946006e-01:1.1283616330966084e-01:3.8987684076205203e-01:1.0045364679884810e+00:3.6389453866873256e-01:1.8661838387423773e+00:4.4409155301549674e-01:2.2317639827839795e+00:3.3501349900810479e-01:3.0041841206223823e+00:3.2541105870880410e-01:3.7017039157951332e+00 + CVs 20 + -1.9422212124325161e-01 5.3705302690805590e-01 1.9253295315197189e-01 + -3.7865906722907083e-01 1.0391734147408707e+00 3.6230728269678159e-01 + -5.6819368217270272e-01 1.5212059270107468e+00 5.3027321926113757e-01 + -7.9905112782067578e-01 1.9823056538256618e+00 6.7771753144510838e-01 + -1.0986196343796197e+00 2.4019680172384219e+00 7.6488341509665281e-01 + -1.4648406327668151e+00 2.7460799333071670e+00 7.5086926368166518e-01 + -1.8546784767330562e+00 2.9714330842517498e+00 6.0316365476872313e-01 + -2.1824859859876513e+00 3.0353896787280208e+00 3.1577287412346111e-01 + -2.3628099989269580e+00 2.9303057231628880e+00 -4.8433568472000754e-02 + -2.4081134161202251e+00 2.7041033619392127e+00 -3.9509784602592046e-01 + -2.3898824555487015e+00 2.3744495040492883e+00 -6.8594507662991744e-01 + -2.3526052715102459e+00 1.9196709871442024e+00 -8.7489221935209482e-01 + -2.3037673939022736e+00 1.4068190427492338e+00 -8.9770615894706918e-01 + -2.2161074663289164e+00 9.7593414256715261e-01 -8.3835061087203533e-01 + -2.0638387839698247e+00 6.4865096459156313e-01 -8.4845210184988762e-01 + -1.8541375628087804e+00 4.1219276023064505e-01 -9.9555158985141812e-01 + -1.6201182007269073e+00 2.9225778694210169e-01 -1.2860239916869882e+00 + -1.3964250252279891e+00 2.8533147055849140e-01 -1.6413285160359075e+00 + -1.1724009869656671e+00 1.6450326239433744e-01 -1.9049221514146111e+00 + id 12104 + loc 6.1489325761795044e-01 3.8310918211936951e-01 1076 + blend 0.0000000000000000e+00 + interp 4.1508550424887453e-01:3.3694484046824830e-01:4.8931905040211598e-01:3.4195105337101528e-01:1.0360759900507683e+00:3.1806532400965326e-01:1.9326024319340327e+00:3.2898748264555544e-01:2.4989219001033316e+00:3.3263956820341917e-01:3.0837867484103132e+00:4.1508135339383206e-01:3.9415351472768525e+00 + CVs 20 + -2.6922235645403325e-01 2.5417602727503685e-01 1.5771180876079993e-01 + -5.1518464762724958e-01 5.0882270168636645e-01 3.4883744184611254e-01 + -7.4425963564574915e-01 7.4765344792083688e-01 5.7733329160569824e-01 + -9.5161012523567790e-01 9.5517243144107833e-01 8.4241554633496263e-01 + -1.1231322140470283e+00 1.1197368048525582e+00 1.1390269666071362e+00 + -1.2619436705907157e+00 1.2370176920133935e+00 1.4634385392325862e+00 + -1.3925647412453421e+00 1.3086812875561211e+00 1.8161093705050662e+00 + -1.5397776082357344e+00 1.3359155693407976e+00 2.1876423043371442e+00 + -1.7098909928760104e+00 1.3211754095042902e+00 2.5512878540782578e+00 + -1.8926548612937200e+00 1.2695653755157723e+00 2.8703858050567068e+00 + -2.0624411514493568e+00 1.1952798004818548e+00 3.1039823218726301e+00 + -2.1786199834965592e+00 1.1459349988931780e+00 3.2130680851829005e+00 + -2.2380361602702097e+00 1.2090801485641647e+00 3.1932616581310969e+00 + -2.3362142429511983e+00 1.3849143947021756e+00 3.1305659161532384e+00 + -2.5200800181526342e+00 1.5251341550047643e+00 3.1057034323785540e+00 + -2.7915204575760462e+00 1.6058140639033534e+00 3.0980466174868826e+00 + -3.3445601247569123e+00 1.6360678511241940e+00 3.0878793114589524e+00 + -4.1286475962783395e+00 1.2158306885950791e+00 3.0665866713213212e+00 + -4.0095747372890402e+00 1.1312577970062281e+00 2.9867999256592039e+00 + id 12105 + loc 6.2903046607971191e-01 3.4436696767807007e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5647902506452320e-01:3.1251733381446251e-01:3.7735712051576709e-01:3.0307114708703525e-01:9.9560785031096155e-01:3.0396573097461310e-01:1.6698445437340039e+00:3.4374350659280656e-01:2.1160848378839257e+00:3.2028826875536642e-01:2.8828625121151994e+00:4.5647446027427258e-01:3.0635003582709368e+00:3.9073475980514866e-01:3.7894731671874058e+00 + CVs 20 + 4.7541732229495731e-02 3.0550431892099383e-01 2.6681526517315945e-01 + 5.3538363214217594e-02 5.6321909632289613e-01 5.1549277332370591e-01 + 3.8972475087721947e-02 7.8741604498039264e-01 7.5502432371371453e-01 + 7.5965290770542704e-03 9.8484155931708739e-01 9.9476450980705522e-01 + -4.6858622049915311e-02 1.1559586613185120e+00 1.2408721939147827e+00 + -1.2468442243142408e-01 1.3048062634711475e+00 1.4962375120079978e+00 + -2.1877623067723329e-01 1.4385330439647395e+00 1.7589262520055007e+00 + -3.2126205534171237e-01 1.5638093498406871e+00 2.0218565494007756e+00 + -4.3025935624024902e-01 1.6842684610617746e+00 2.2743559187924163e+00 + -5.4821793788309625e-01 1.8010386666508058e+00 2.5108081105952529e+00 + -6.7701921408240606e-01 1.9084735457742705e+00 2.7422692846738865e+00 + -8.1778838652878993e-01 1.9848008665033920e+00 2.9946559654220843e+00 + -9.6813305694517260e-01 1.9954297812098900e+00 3.2807313145262640e+00 + -1.1258605002336386e+00 1.9175474309299954e+00 3.5867819804348535e+00 + -1.2981902205496902e+00 1.7458352433735782e+00 3.9029279590668149e+00 + -1.4892544218526833e+00 1.4625346152783845e+00 4.2421801173048763e+00 + -1.6653587381279711e+00 1.0312322600819721e+00 4.6156937260316147e+00 + -1.7484589098918530e+00 4.6926808626180833e-01 4.9838984580186709e+00 + -1.7503823748923553e+00 3.8407389277016757e-03 5.2365270218638216e+00 + id 12106 + loc 9.5176553726196289e-01 7.9732507467269897e-01 411 + blend 0.0000000000000000e+00 + interp 4.6568811074636701e-01:3.4555656380380240e-01:1.2302925972157330e-01:2.7764904603536900e-01:9.7429855079690297e-01:3.3777460079069582e-01:1.5957958664431522e+00:4.5474742534311258e-01:2.0317703509321574e+00:4.6568345386525956e-01:2.8293227410019921e+00:3.7379564211893135e-01:3.2204292736083016e+00 + CVs 20 + 9.0380618812129210e-01 2.3441822049973277e-01 -2.0322895577960443e-01 + 1.5582662805805241e+00 2.9035069486369230e-01 -3.4168516872873200e-01 + 2.1544411447811300e+00 2.7080801058792558e-01 -4.4572998221328175e-01 + 2.7776428092675673e+00 2.1897476760797213e-01 -5.2090229436637236e-01 + 3.4155080403767775e+00 1.3339961195942074e-01 -5.6225318090947818e-01 + 4.0525379955394314e+00 1.5495619378290915e-02 -5.7385261895620421e-01 + 4.6714082237379140e+00 -1.3258202242066819e-01 -5.6709522133350432e-01 + 5.2540257708000535e+00 -3.1083969398437294e-01 -5.5467189473395861e-01 + 5.7876195606737975e+00 -5.2133406790243630e-01 -5.5004994775343241e-01 + 6.2657670338653215e+00 -7.6645563968755615e-01 -5.6938526808755929e-01 + 6.6807271185957342e+00 -1.0433730695654821e+00 -6.2509371116620682e-01 + 7.0241021426366377e+00 -1.3379534480884305e+00 -7.1766877958562347e-01 + 7.2965318008722262e+00 -1.6334719668094382e+00 -8.4052660985754746e-01 + 7.5069161497729207e+00 -1.9237540924847785e+00 -9.8824067714131469e-01 + 7.6636872522238617e+00 -2.2090633883560518e+00 -1.1545481051043229e+00 + 7.7737191121408191e+00 -2.4875903268738524e+00 -1.3318915101561632e+00 + 7.8459746994133548e+00 -2.7589342734496816e+00 -1.5152408045601018e+00 + 7.8877923665520466e+00 -3.0271330811985626e+00 -1.6974758889279693e+00 + 7.8398719070192264e+00 -3.2796091904907421e+00 -1.8587424463786020e+00 + id 12107 + loc 6.0491519980132580e-04 2.5952117517590523e-02 1048 + blend 0.0000000000000000e+00 + interp 5.9271097362573022e-01:3.5699567440567759e-01:1.0073353023945442e-01:5.2212935848813802e-01:9.8137794357699459e-01:5.9270504651599398e-01:1.8825810211118124e+00:2.5903693657684135e-01:2.3475575928962695e+00:5.6954820389148730e-01:3.0998387603840412e+00:4.9666783404367887e-01:3.9340644964113247e+00 + CVs 20 + -2.4357055564703861e-01 3.5202501252552032e-01 -8.9629069711448586e-02 + -4.5101558390428742e-01 7.0944041297763571e-01 -1.6946706662501954e-01 + -6.2313124763240890e-01 1.0679566718738207e+00 -2.6769828768532616e-01 + -7.6683488726533677e-01 1.4284116379310878e+00 -4.1456568332424026e-01 + -8.9292624075805138e-01 1.7818352566060365e+00 -6.4218191225877586e-01 + -1.0258626150807557e+00 2.1104622593977922e+00 -9.6469592797412673e-01 + -1.2043756103471825e+00 2.3894647984293318e+00 -1.3787640410802218e+00 + -1.4583957820442732e+00 2.5780819074655867e+00 -1.8723406727292011e+00 + -1.7866672537654495e+00 2.6247203164654449e+00 -2.4298099828349988e+00 + -2.1551435162784327e+00 2.4732564074982086e+00 -3.0293667938616844e+00 + -2.4918410915839568e+00 2.0764827041077307e+00 -3.6241855745640326e+00 + -2.6928388667314112e+00 1.4452380046933322e+00 -4.1348881724512045e+00 + -2.6824088731431743e+00 7.0016259607996378e-01 -4.4834762754238566e+00 + -2.4833472063897766e+00 6.7182507545309078e-02 -4.6697825147054157e+00 + -2.2215068789689161e+00 -2.8648950854997635e-01 -4.7928324020473996e+00 + -2.0177822150240128e+00 -3.5714631551971510e-01 -4.9147295405572917e+00 + -1.9003421306178052e+00 -2.4161757378701498e-01 -5.0214670739604736e+00 + -1.7352115805223216e+00 -4.9750704942939539e-02 -5.1483362809106277e+00 + -1.2522752529918662e+00 1.4113503355978274e-01 -5.4391127552194565e+00 + id 12108 + loc 9.0170986950397491e-03 4.9695843458175659e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7508226609523041e-01:3.5619587545503079e-01:8.0301657404246995e-05:3.3804707784063187e-01:4.4584602586426769e-01:4.1026165307732831e-01:1.0515658852020897e+00:2.7083179065324525e-01:1.9298575245759848e+00:4.7507751527256947e-01:2.3602729761434831e+00:2.8699109695299174e-01:3.2907996596433375e+00 + CVs 20 + 5.1269610699401558e-01 4.4303140500820637e-01 1.7308171364911312e-01 + 8.6334731173292112e-01 8.1236183957932462e-01 3.5906284038416819e-01 + 1.1414387486309139e+00 1.1573136122034393e+00 5.6512087359867880e-01 + 1.3748543768157715e+00 1.5016826144547970e+00 8.0384970272242728e-01 + 1.5473161302237077e+00 1.8346307104915600e+00 1.0810442177108697e+00 + 1.6447434027585173e+00 2.1406018120391170e+00 1.3972854603637805e+00 + 1.6555911491281163e+00 2.4014015669032163e+00 1.7455031254572757e+00 + 1.5734729261903939e+00 2.5984438330802710e+00 2.1099111067571883e+00 + 1.4010880999098609e+00 2.7155829443887569e+00 2.4695084040405533e+00 + 1.1543358015597975e+00 2.7425136910042287e+00 2.8023332075962464e+00 + 8.6040127385016762e-01 2.6778117788960385e+00 3.0953477934860141e+00 + 5.4581773703125014e-01 2.5224533257059250e+00 3.3490980460075574e+00 + 2.3436540969224828e-01 2.2740678766389566e+00 3.5684453125206934e+00 + -4.9352394984926884e-02 1.9241215834533503e+00 3.7600754004888155e+00 + -2.6540532929539573e-01 1.4730201433718184e+00 3.9293119832692005e+00 + -3.6394383451424273e-01 9.7509659048371233e-01 4.0680440557650730e+00 + -3.3506539527199519e-01 4.9622919686140560e-01 4.1730689135586605e+00 + -1.9232355148790370e-01 7.0922610931237529e-02 4.2699387115915375e+00 + 5.3238177098076378e-02 -1.6874805665280965e-01 4.3854224009433098e+00 + id 12109 + loc 8.4202006459236145e-02 4.2721047997474670e-01 397 + blend 0.0000000000000000e+00 + interp 1.0201695091563103e+00:4.7084190676450050e-01:1.2466038885277886e-01:4.7403239674332742e-01:9.8108738013611652e-01:4.9283796943940716e-01:1.3830134455975025e+00:3.2536550690636029e-01:1.9721812346526888e+00:4.5137962485566269e-01:3.9117823086036605e+00:1.0201595091563103e+00:3.9445835233248125e+00:7.3727783461955021e-01:3.9661291115043968e+00 + CVs 20 + -3.1491956156078982e-01 3.2504567168456067e-01 -1.1805328630544205e+00 + -5.8928727064733655e-01 4.4312035697518393e-01 -1.9667671262113435e+00 + -8.5178774562150994e-01 4.7881533025920298e-01 -2.6574929986054343e+00 + -1.1109382550712170e+00 4.8581816974378406e-01 -3.4022698443243562e+00 + -1.3364203407146937e+00 4.4365857822078941e-01 -4.1848005710710563e+00 + -1.4969141951197100e+00 3.3540222076590320e-01 -4.9740885856586576e+00 + -1.5723746661896030e+00 1.4989072886011601e-01 -5.7355270287590558e+00 + -1.5550964194253467e+00 -1.1890348708234300e-01 -6.4365523313409829e+00 + -1.4486710456072616e+00 -4.6619232553065693e-01 -7.0457937159813699e+00 + -1.2691778542090075e+00 -8.7182194180942130e-01 -7.5393391312873694e+00 + -1.0426166236107195e+00 -1.3073527473656137e+00 -7.9118984945633741e+00 + -7.9715109010511664e-01 -1.7485284236548102e+00 -8.1767810703295307e+00 + -5.5704004621502079e-01 -2.1838277019398129e+00 -8.3545162577114755e+00 + -3.4033424477132285e-01 -2.6162186217725498e+00 -8.4610737748952314e+00 + -1.5750791971536249e-01 -3.0559656979687539e+00 -8.4984070131274247e+00 + -1.8681685488800559e-02 -3.4979261143852800e+00 -8.4703249037721218e+00 + 6.5917518307471501e-02 -3.9204528280213324e+00 -8.3967593177699946e+00 + 1.0177507901829097e-01 -4.3186484515767969e+00 -8.2938336823963041e+00 + 1.0764548096115756e-01 -4.7972509697440548e+00 -8.1095040151668396e+00 + id 12110 + loc 5.2042108774185181e-01 4.2621308565139771e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6032216113793484e-01:3.1136652973881440e-01:4.1967814438579265e-01:2.8507376269022472e-01:1.0962081898880673e+00:2.8514727382279814e-01:1.9865119996095535e+00:4.0274829086160124e-01:2.3114707102390017e+00:4.6031755791632351e-01:2.8644318380958858e+00:2.8804672602981074e-01:3.4125120441965553e+00 + CVs 20 + -5.3592911759078765e-02 2.9889153491546244e-01 1.7073039001444992e-01 + -1.2479933160403300e-01 5.9982385915986136e-01 3.5608991553974900e-01 + -2.1310984204431355e-01 8.9716325614628045e-01 5.3272144636149710e-01 + -3.2179598303520840e-01 1.1847365915000572e+00 6.8582161278028220e-01 + -4.5788084856282718e-01 1.4561302891904255e+00 8.1639293219226516e-01 + -6.3006991012561553e-01 1.7026138774549553e+00 9.4673556922000979e-01 + -8.4095075188918678e-01 1.9106781264451378e+00 1.1050169609256717e+00 + -1.0821341819829635e+00 2.0696557381970075e+00 1.3032316644380653e+00 + -1.3400053214510272e+00 2.1747182618695602e+00 1.5434451514963541e+00 + -1.5983390660929837e+00 2.2188456980899387e+00 1.8294097868460790e+00 + -1.8358000631269662e+00 2.1871334169512022e+00 2.1648015257487678e+00 + -2.0244836355398999e+00 2.0608028493813610e+00 2.5426722619905999e+00 + -2.1362792090524692e+00 1.8263433046229491e+00 2.9390966773796521e+00 + -2.1496135915344512e+00 1.4788789853199344e+00 3.3153494055933472e+00 + -2.0520893254267554e+00 1.0270255949880904e+00 3.6228669391961663e+00 + -1.8402608581779782e+00 4.9892259875772771e-01 3.8153525077597163e+00 + -1.5287696194284115e+00 -5.3943356159895053e-02 3.8645474334112717e+00 + -1.1713074486745949e+00 -5.7172153721977670e-01 3.7956966597880832e+00 + -8.8932530259703890e-01 -1.0103815465405925e+00 3.7748105902194675e+00 + id 12111 + loc 4.1313010454177856e-01 4.6128219366073608e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4914526582046221e-01:3.8786025796174406e-01:3.3908662445803073e-01:3.4099867121662608e-01:1.0030858346513911e+00:3.2508899295947136e-01:1.9434103036020751e+00:4.2705910234441508e-01:2.2142293033285565e+00:4.2245516882287021e-01:2.9548402982702031e+00:2.8050467901618975e-01:3.3171735073035884e+00:4.4914077436780403e-01:3.9600153011051140e+00 + CVs 20 + -1.5386218414363761e-01 3.0859768253089953e-01 -6.9451167929482360e-02 + -3.3120208090087011e-01 6.2848023500154215e-01 -1.7556125072947121e-01 + -5.2126839680273740e-01 9.5585475201185721e-01 -2.9726712678459261e-01 + -7.2759721898125496e-01 1.2846072105604516e+00 -4.2146038211704651e-01 + -9.6179660387699406e-01 1.6033650158500228e+00 -5.4095397757462949e-01 + -1.2313414727347751e+00 1.8878225051992545e+00 -6.5080511440207678e-01 + -1.5337643012884907e+00 2.1049260315041196e+00 -7.5153802116618651e-01 + -1.8512190114206728e+00 2.2276191972461414e+00 -8.4814321403033754e-01 + -2.1580079413238602e+00 2.2443721205170863e+00 -9.4648156963310082e-01 + -2.4400548968519722e+00 2.1607501164926997e+00 -1.0498554468209462e+00 + -2.7104520670112455e+00 1.9917805571432372e+00 -1.1637400593300600e+00 + -2.9975893398239837e+00 1.7523598500634872e+00 -1.2982401569503874e+00 + -3.3190924762338128e+00 1.4609111283486149e+00 -1.4467086118344885e+00 + -3.6737574951894678e+00 1.1376190812609051e+00 -1.5580094203557759e+00 + -4.0558986582746872e+00 8.0834645740194844e-01 -1.5559550844810217e+00 + -4.4647050769476042e+00 5.3240717644682367e-01 -1.3865032410383584e+00 + -4.8703542198483643e+00 3.9052802319436097e-01 -1.0434038245832904e+00 + -5.2408933934558979e+00 3.5294266732775648e-01 -6.2471678179527212e-01 + -5.7427918832694029e+00 1.4705838538879301e-01 -3.5942047804674671e-01 + id 12112 + loc 2.7178797125816345e-01 5.8949196338653564e-01 406 + blend 0.0000000000000000e+00 + interp 4.6767366482496975e-01:4.2545385476235448e-01:2.1145354171119479e-01:4.4796369441454437e-01:1.0000537599477726e+00:3.0812854504036313e-01:1.7533283091448273e+00:4.1681484650596756e-01:2.1256176976015988e+00:4.2391811231264376e-01:2.8983006281784456e+00:3.6206804328518694e-01:3.1624020661308130e+00:4.6766898808832152e-01:3.8296390269011380e+00 + CVs 20 + 2.1843002444112922e-01 2.4106726373622511e-01 -3.9306514828875427e-02 + 3.2685403082802289e-01 3.9498664814518769e-01 -7.1592179997564426e-02 + 4.1470287684675122e-01 5.1466365414403514e-01 -9.6521698242371362e-02 + 5.2025773607593162e-01 6.3003423270875625e-01 -1.1626763942302917e-01 + 6.4230484153044409e-01 7.4081208306381063e-01 -1.3082912742959452e-01 + 7.7964771301155256e-01 8.4644656706560195e-01 -1.4046500746444196e-01 + 9.3151972848019060e-01 9.4641688924708700e-01 -1.4531065941895971e-01 + 1.0973716824394599e+00 1.0399964658878618e+00 -1.4493857227767587e-01 + 1.2741937192061645e+00 1.1257603188566101e+00 -1.3824686225850585e-01 + 1.4552293140272810e+00 1.2024727008843783e+00 -1.2378413223541956e-01 + 1.6351672602104419e+00 1.2699401133821659e+00 -1.0011972941715463e-01 + 1.8150834510271603e+00 1.3271373880645241e+00 -6.6254920513961535e-02 + 1.9970754679827829e+00 1.3713690720843175e+00 -2.1097618538774399e-02 + 2.1770208955397683e+00 1.4013055669997858e+00 3.8575282303660030e-02 + 2.3493384763723961e+00 1.4177297820814605e+00 1.1689731636871475e-01 + 2.5159495484992718e+00 1.4202309080701967e+00 2.1349358864445050e-01 + 2.6827791552638711e+00 1.4057416896812627e+00 3.2159504415301876e-01 + 2.8472062306364130e+00 1.3702241619908864e+00 4.3299257513906175e-01 + 3.0105956406920309e+00 1.2659869629056564e+00 4.7274645865769677e-01 + id 12113 + loc 8.5806578397750854e-01 3.7986087799072266e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4999435640509949e-01:3.1422722518702345e-01:1.1669449444665569e-01:3.0385024329592764e-01:1.0666583924839339e+00:3.5153214269291777e-01:1.8885189845360861e+00:4.4998985646153544e-01:2.1998085784575867e+00:3.4282144427763023e-01:2.9197358067902566e+00:2.5575829620252188e-01:3.6749925870082976e+00 + CVs 20 + -2.5402571869546399e-02 3.6342456146176294e-01 -2.6670801483491313e-01 + -7.8023457546228470e-02 6.6576612743043984e-01 -4.1935121910147261e-01 + -1.4830458888441278e-01 9.4796046297689252e-01 -5.2795063778069740e-01 + -2.3697225811311745e-01 1.2392114794439333e+00 -6.3067387590524737e-01 + -3.4829746552044422e-01 1.5312162997047460e+00 -7.1648974277756805e-01 + -4.8535165465156571e-01 1.8148665756302358e+00 -7.6755146795031470e-01 + -6.5155220170295469e-01 2.0780793723678483e+00 -7.5421526120682436e-01 + -8.4862741067553404e-01 2.2894946034021872e+00 -6.3173780505447985e-01 + -1.0534233942347060e+00 2.3713540988308601e+00 -3.7630922743053641e-01 + -1.2122652015449504e+00 2.2715205539268606e+00 -7.2379375613490726e-02 + -1.3155993715010939e+00 2.0420433048345030e+00 1.9362583637191255e-01 + -1.3845782120735008e+00 1.7316903086693629e+00 4.0998217292197126e-01 + -1.4455808883843024e+00 1.3760845724537862e+00 5.8688959211605374e-01 + -1.5178930039474443e+00 1.0064191935336213e+00 7.5545038319956503e-01 + -1.5956648170964443e+00 6.6481274377219912e-01 9.6852551387641350e-01 + -1.6588960717865187e+00 4.5569559151798045e-01 1.2915440086189887e+00 + -1.7396803771544700e+00 5.9774901758720966e-01 1.6852533016583986e+00 + -2.0009143780135874e+00 1.1802017913680598e+00 1.6623026176276889e+00 + -2.1126019662169400e+00 1.2576559608709492e+00 1.7891566573612128e+00 + id 12114 + loc 3.6711864173412323e-02 8.2309466600418091e-01 1055 + blend 0.0000000000000000e+00 + interp 5.1478692945043847e-01:3.3896929257909147e-01:6.4362674574346856e-02:2.1886739107923361e-01:1.0189886839796893e+00:2.8823534242679272e-01:2.1232850953992548e+00:3.7588819639406118e-01:2.9317109135587822e+00:5.1478178158114396e-01:3.8514234526607742e+00 + CVs 20 + -7.5635591800177149e-02 3.2413129504011423e-01 -3.8996758804792675e-01 + -6.5948435489976476e-02 5.8483992725475098e-01 -7.1401546390477622e-01 + -9.0156915656871561e-03 8.2519056511284106e-01 -9.9906198736823770e-01 + 7.8905650117467085e-02 1.0672497837546076e+00 -1.2461759716553207e+00 + 1.8335926981111739e-01 1.3233007921657600e+00 -1.4512689320159344e+00 + 2.5694415184177766e-01 1.6092416082898695e+00 -1.6229347272226047e+00 + 2.4422688071193654e-01 1.9141647609484314e+00 -1.7719611067552903e+00 + 1.3402498046898925e-01 2.2066746372993054e+00 -1.9139143941838159e+00 + -5.7511065626622671e-02 2.4622958932205856e+00 -2.0733110370885957e+00 + -3.0927058816294251e-01 2.6446291787841947e+00 -2.2738400372471927e+00 + -5.8680324241639936e-01 2.7086437379849344e+00 -2.5210413444686663e+00 + -8.5111412196695002e-01 2.6384703482196992e+00 -2.7913234400343869e+00 + -1.0763609737363784e+00 2.4475425377820330e+00 -3.0524705374413199e+00 + -1.2379321805775065e+00 2.1628117924275565e+00 -3.2757605060679422e+00 + -1.3189971483216911e+00 1.8240385096718774e+00 -3.4471880063011655e+00 + -1.3130635174694869e+00 1.4699068329132150e+00 -3.5591120149130733e+00 + -1.2203006658262106e+00 1.1470435516229831e+00 -3.5911276512811359e+00 + -1.0640253005305134e+00 9.1329780942474947e-01 -3.5342699782413871e+00 + -9.1088099079422680e-01 6.5808633278918738e-01 -3.5013337933707471e+00 + id 12115 + loc 9.5606172084808350e-01 3.3773326873779297e-01 411 + blend 0.0000000000000000e+00 + interp 4.7620465580814919e-01:2.3613899667064717e-01:2.9671035665774115e-02:3.8617403016810781e-01:9.9951056533630767e-01:2.6902464152544270e-01:1.8131275717922035e+00:3.3795671376073966e-01:2.2558762093954816e+00:4.7619989376159111e-01:2.9991998419817998e+00:3.4446450636098924e-01:3.4741279734286912e+00 + CVs 20 + -6.8920120397854800e-01 1.9303183442329822e-01 2.3468188485224706e-01 + -1.2235107822193021e+00 2.5418663729599605e-01 4.4425487337722758e-01 + -1.7460769417415676e+00 2.6937515225854280e-01 6.4734267651240851e-01 + -2.3113629158855473e+00 2.6251495172230432e-01 8.4631561156375423e-01 + -2.9126230354049896e+00 2.2558200925643235e-01 1.0353620476167642e+00 + -3.5362629332185431e+00 1.5543154389679370e-01 1.2159135688759126e+00 + -4.1642133664655265e+00 4.6908809002762064e-02 1.3914687729848709e+00 + -4.7757322027780864e+00 -1.1103294219934678e-01 1.5628944610501347e+00 + -5.3460452771779199e+00 -3.2958336843606850e-01 1.7352919991509335e+00 + -5.8459370012952219e+00 -6.1228533888406345e-01 1.9195012523002180e+00 + -6.2587298060172811e+00 -9.5049614975318830e-01 2.1123535170634211e+00 + -6.5951818146748726e+00 -1.3264401573003362e+00 2.2917135995751510e+00 + -6.8721040068892805e+00 -1.7212468103602454e+00 2.4424949820142485e+00 + -7.0944244310164928e+00 -2.1180154263359432e+00 2.5665027085081085e+00 + -7.2625407063323406e+00 -2.5088085739063715e+00 2.6654056078864405e+00 + -7.3781497684446578e+00 -2.8966435548544114e+00 2.7317677348098308e+00 + -7.4460290380288754e+00 -3.2795779424992575e+00 2.7621081463841515e+00 + -7.4824084977723544e+00 -3.6379086042654705e+00 2.7667948928115536e+00 + -7.5585703317776289e+00 -3.9103964975636161e+00 2.7563198660933388e+00 + id 12116 + loc 8.8634157180786133e-01 5.1163572072982788e-01 1053 + blend 0.0000000000000000e+00 + interp 4.7331248888253225e-01:2.8238450896406142e-01:1.5189157994392122e-01:4.7330775575764344e-01:9.9435864348195502e-01:3.1686497403792618e-01:1.3425177335744944e+00:2.9106708854849245e-01:2.0237104698379365e+00:2.9893322265418310e-01:3.0270047961994409e+00:4.1345747020627449e-01:3.2541200712933311e+00 + CVs 20 + -9.4754800395188243e-02 3.7506630519459183e-01 1.9891992273918518e-01 + -2.2093275939907842e-01 7.2921182662783812e-01 3.8614706801672544e-01 + -3.5897087962211288e-01 1.0697984832982579e+00 5.6377424026142631e-01 + -5.0345677857894344e-01 1.3970971160754224e+00 7.3126967902539497e-01 + -6.5802232778209824e-01 1.7077404364738875e+00 8.8677685165929432e-01 + -8.2897921047164047e-01 2.0029593908719798e+00 1.0327453515670211e+00 + -1.0360955723738774e+00 2.2903527927860092e+00 1.1806595809715934e+00 + -1.3289500153923621e+00 2.5588386187264867e+00 1.3429953587131473e+00 + -1.7474680708644166e+00 2.7438596525510048e+00 1.5036633531281669e+00 + -2.2707560418364139e+00 2.7749067645158170e+00 1.6224360635131005e+00 + -2.8565506245073573e+00 2.6116733962702861e+00 1.6667326267689468e+00 + -3.4409304399325391e+00 2.2192375847058470e+00 1.6119674161324757e+00 + -3.8952351645991712e+00 1.6319847753020640e+00 1.4565208764175614e+00 + -4.1344892958654773e+00 1.0160068914359695e+00 1.2471610581316828e+00 + -4.2171205115751516e+00 4.8743379479949156e-01 1.0265876019416273e+00 + -4.2272358070577507e+00 4.1984911800800773e-02 7.6929178482744864e-01 + -4.2165748812274542e+00 -2.9203040915009326e-01 4.1757419936812423e-01 + -4.2239813462812474e+00 -3.9123125047769669e-01 -2.7657588696449298e-02 + -4.2679142584773881e+00 -1.5496095225323114e-01 -5.4514901846144548e-01 + id 12117 + loc 1.9639886450022459e-03 7.8838855028152466e-02 397 + blend 0.0000000000000000e+00 + interp 3.9904702616074439e-01:3.9475869356867671e-01:1.0712779513016557e-01:3.6771025067469626e-01:6.9359880719883615e-01:3.7038905399097632e-01:1.0161154119388291e+00:3.9904303569048277e-01:1.6728545724142845e+00:2.9931850042571934e-01:1.9978576791591220e+00:3.2528416386885189e-01:2.8813592738976159e+00:2.9762456709906493e-01:3.2036028574489022e+00 + CVs 20 + -2.2302776603312510e-01 2.7608531963811489e-01 -1.0449337102526444e+00 + -3.9158941327014729e-01 3.8842717941963678e-01 -1.7562155523030185e+00 + -5.4118774672699710e-01 4.3700194474791221e-01 -2.3828992424303554e+00 + -6.8867925236386185e-01 4.6168357058274007e-01 -3.0377056107367171e+00 + -8.3238168119367428e-01 4.4358383825466324e-01 -3.7081554329748103e+00 + -9.7301519233384337e-01 3.6931882274666750e-01 -4.3767957342362243e+00 + -1.1135716287368791e+00 2.3298414591930894e-01 -5.0247798759856659e+00 + -1.2561923968767950e+00 3.4477289768779396e-02 -5.6350940033820418e+00 + -1.4027808295883883e+00 -2.2055651231058127e-01 -6.1930783775590026e+00 + -1.5565842818468403e+00 -5.1830247904853954e-01 -6.6867311066279651e+00 + -1.7181898689098922e+00 -8.3861291107285885e-01 -7.1126468643549980e+00 + -1.8865907692893089e+00 -1.1678516337631246e+00 -7.4827803953260021e+00 + -2.0584665241795665e+00 -1.5066576537402079e+00 -7.8175566041975060e+00 + -2.2251938203999839e+00 -1.8599891853946124e+00 -8.1291100497060000e+00 + -2.3735407873899343e+00 -2.2293416286937728e+00 -8.4140108639750650e+00 + -2.4929903810692684e+00 -2.6179774276785679e+00 -8.6571511260914331e+00 + -2.5809708602851744e+00 -3.0320819817375764e+00 -8.8436777522099490e+00 + -2.6312781461019030e+00 -3.4566242768286353e+00 -8.9575461937051628e+00 + -2.6225596988673061e+00 -3.7850773474153829e+00 -8.9262713858832790e+00 + id 12118 + loc 7.1862953901290894e-01 2.7306368947029114e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4387688927221625e-01:2.9766328220517324e-01:1.0842784494336466e-01:4.1986049822891519e-01:9.9939034055158404e-01:2.7821086990256078e-01:1.4079793834153151e+00:4.4387245050332352e-01:1.9746113184894547e+00:2.9629539034564417e-01:2.6080479017016698e+00:3.0993789029850333e-01:3.3367484482018526e+00 + CVs 20 + -9.1639375171433973e-02 3.1518228382511132e-01 1.6084777040908815e-01 + -1.9667002219838653e-01 6.5019265445433749e-01 3.3167119676872214e-01 + -3.2193865381418574e-01 1.0000223217465674e+00 4.9205957162979502e-01 + -4.6751773070256497e-01 1.3591889699383235e+00 6.3809192393678493e-01 + -6.3051650627500766e-01 1.7234487581535129e+00 7.8146276754084032e-01 + -8.0666895218686241e-01 2.0875668472175040e+00 9.4539216792076131e-01 + -9.8884427528477059e-01 2.4422956624112682e+00 1.1587712713967835e+00 + -1.1656363678069623e+00 2.7707346242643918e+00 1.4492127965613166e+00 + -1.3228292484187039e+00 3.0455503114471476e+00 1.8356807786665605e+00 + -1.4483199711634673e+00 3.2295624393148921e+00 2.3199533940205490e+00 + -1.5372522755462117e+00 3.2829585865516457e+00 2.8775215918134203e+00 + -1.5995725454862320e+00 3.1836486966940023e+00 3.4523911736241484e+00 + -1.6613625307923185e+00 2.9415448211373856e+00 3.9816247789493731e+00 + -1.7508389637935462e+00 2.5867386357091657e+00 4.4194230042606604e+00 + -1.8855346969450788e+00 2.1553004464729484e+00 4.7370711613581529e+00 + -2.0658777114150007e+00 1.6780215046583691e+00 4.9191269209006094e+00 + -2.2770376096182741e+00 1.1901377424955975e+00 4.9578328634422792e+00 + -2.4956500714746941e+00 7.5370635415146570e-01 4.8680393473674934e+00 + -2.6793303517319718e+00 4.3281657672153234e-01 4.7463043982771804e+00 + id 12119 + loc 2.0855458080768585e-01 1.8976995721459389e-02 1068 + blend 0.0000000000000000e+00 + interp 4.8330995598714799e-01:2.8463142817454706e-01:7.6073483270462372e-03:4.2147191115523802e-01:8.6371919365219796e-01:4.8330512288758815e-01:1.4515156003797827e+00:3.8396285538802544e-01:2.0358849107912342e+00:2.5877208084927988e-01:2.8108285507018418e+00:3.3363526940230109e-01:3.4264722690648695e+00 + CVs 20 + -1.6523334182386398e-01 1.9492403829728464e-01 -1.8313920179388382e-01 + -3.3547504304573739e-01 3.9539351671001477e-01 -3.4063984909339973e-01 + -5.0639792546362272e-01 5.9169386596333529e-01 -4.8920823385094625e-01 + -6.7208440849837914e-01 7.7375007582624444e-01 -6.3387170860729447e-01 + -8.3167824994385642e-01 9.4263512108739622e-01 -7.7091841596532484e-01 + -9.8346398450551331e-01 1.1007400350994581e+00 -8.9674208414504353e-01 + -1.1303583184842692e+00 1.2523543223935556e+00 -1.0066291920174884e+00 + -1.2823962231288815e+00 1.4015378941551992e+00 -1.0942000769984745e+00 + -1.4519640000303133e+00 1.5408653500734242e+00 -1.1585931685259345e+00 + -1.6495607475376204e+00 1.6480995137479846e+00 -1.2049487001817991e+00 + -1.8802657199659929e+00 1.6934580133623978e+00 -1.2317531492165585e+00 + -2.1391861196710247e+00 1.6454215982263043e+00 -1.2320485283951399e+00 + -2.4099430768041077e+00 1.4905941963649889e+00 -1.2154998389204688e+00 + -2.6772196416410639e+00 1.2454096919804301e+00 -1.2093832479888578e+00 + -2.9349022796462423e+00 9.4055372213302668e-01 -1.2383059850976890e+00 + -3.1755201953111540e+00 6.1702281840320672e-01 -1.3201884422203749e+00 + -3.3679142667625830e+00 3.3517344829900891e-01 -1.4734547235107676e+00 + -3.4730808411827954e+00 1.5128316793733765e-01 -1.7163102467972879e+00 + -3.5208854437735693e+00 3.0436829535258419e-02 -2.1202884012283816e+00 + id 12120 + loc 1.6459600999951363e-02 1.0558213293552399e-01 1050 + blend 0.0000000000000000e+00 + interp 1.4143128926139485e+00:5.7496549099723371e-01:1.4827751733972132e+00:3.2127969638390314e-01:1.5808037525968197e+00:2.0642416851611070e-01:1.9366547509681289e+00:5.4317612279370570e-02:2.7348199072907207e+00:4.9534446479015748e-01:3.0911882868660499e+00:6.9553230784640874e-01:3.5004387054761166e+00:1.4143028926139485e+00:3.7385708368089743e+00 + CVs 20 + -4.4751740512749666e-01 3.4675425819180888e-01 1.4152842340321736e-01 + -8.4050341466932021e-01 6.9095450052973129e-01 2.2506384230126691e-01 + -1.1690547256220141e+00 1.0638631261517961e+00 2.5893488338447057e-01 + -1.4480514358102017e+00 1.4338719679513374e+00 2.5120727466922488e-01 + -1.7282726733205434e+00 1.7482661046191696e+00 2.0725041466565253e-01 + -2.0623763948057787e+00 1.9752854714322738e+00 1.3535555563099910e-01 + -2.4667767613105194e+00 2.0881745027995944e+00 4.9237620339293020e-02 + -2.9300416905952540e+00 2.0564884709582119e+00 -4.0593021881147884e-02 + -3.4114515597270012e+00 1.8627465802371210e+00 -1.4054882126783208e-01 + -3.8516058953480075e+00 1.5298577872715042e+00 -2.7491322134973095e-01 + -4.2085338574433537e+00 1.1498197586719332e+00 -4.7050339431640165e-01 + -4.4712140006430356e+00 8.6674308577944448e-01 -7.0703945072376295e-01 + -4.6291512427841024e+00 7.6352893777685515e-01 -8.9386791401836962e-01 + -4.7055165338704565e+00 7.7505554991273262e-01 -1.0175873603766521e+00 + -4.8868107317262792e+00 8.1387396444120252e-01 -1.1320278800936132e+00 + -5.2977753845511248e+00 8.5724351537030152e-01 -1.1882630898370239e+00 + -5.9623408310948625e+00 8.2230840908736313e-01 -1.1690465649257049e+00 + -6.7672144262768974e+00 5.4847306784797256e-01 -1.2064035887103852e+00 + -7.1182514678699516e+00 3.0368370891313501e-01 -1.3068145204808248e+00 + id 12121 + loc 6.1755532026290894e-01 6.3791143894195557e-01 1085 + blend 0.0000000000000000e+00 + interp 3.8592280557974740e-01:3.0674967087991489e-01:9.6725401487777640e-02:3.5816942606465807e-01:1.0141000596357521e+00:3.3708814586224123e-01:1.8415583108138531e+00:3.8591894635169161e-01:2.2153236879915394e+00:3.0874541850328219e-01:3.0098982808759738e+00:3.0652290545760869e-01:3.6799101547902819e+00 + CVs 20 + -1.7258278073119382e-01 3.2272258017271921e-01 2.1350656853260253e-01 + -3.5296770904554553e-01 6.1428442640166392e-01 3.6655955288838954e-01 + -5.4653287194704769e-01 8.9792162553270605e-01 4.8441950320468052e-01 + -7.5760868523824154e-01 1.1811552762237916e+00 5.7232424980678154e-01 + -9.9146658982905000e-01 1.4554590758038748e+00 6.1609359987937107e-01 + -1.2489608633592622e+00 1.7082745566365927e+00 6.0238573890158498e-01 + -1.5244975164833101e+00 1.9234052602818270e+00 5.1990156872039683e-01 + -1.8047999976523188e+00 2.0842982870468938e+00 3.6196778441332900e-01 + -2.0715551929154303e+00 2.1784320974185651e+00 1.2999235966521872e-01 + -2.3141380442499528e+00 2.1985379510677494e+00 -1.6674763002047122e-01 + -2.5386978388201262e+00 2.1375043383654160e+00 -5.1455028052355178e-01 + -2.7590679300135830e+00 1.9813073946989077e+00 -8.9543318926283888e-01 + -2.9890705104152668e+00 1.7073479974618513e+00 -1.2825179679804175e+00 + -3.2495441789037538e+00 1.2848001222279559e+00 -1.6309200360346208e+00 + -3.5649323040104393e+00 6.9934577021800859e-01 -1.8588143800376948e+00 + -3.9463260098625290e+00 3.1347020236640155e-02 -1.8897420484549108e+00 + -4.4159392270233369e+00 -5.7561961521838856e-01 -1.7328441234586474e+00 + -4.9703561433682850e+00 -1.0204976227060316e+00 -1.4686864896290914e+00 + -5.3370998732251982e+00 -1.3761242664961282e+00 -1.4153320652012908e+00 + id 12122 + loc 7.0873689651489258e-01 1.0875094681978226e-01 403 + blend 0.0000000000000000e+00 + interp 4.6080544997303702e-01:3.2514201839596985e-01:7.3123014227492367e-01:3.9395620871324055e-01:1.0447425991293353e+00:3.1402883544972887e-01:1.9719453021313673e+00:3.0503692033146701e-01:2.5810327623013016e+00:4.6080084191853732e-01:3.2544938913482340e+00:3.5616680203675460e-01:3.9899409494440379e+00 + CVs 20 + -5.4954476519066209e-02 3.2799325271168667e-01 2.3136545983926016e-01 + -8.5669697312124204e-02 6.3957749220896476e-01 4.5864775180988326e-01 + -1.2001682155758414e-01 9.4781388109301790e-01 7.0674486469781383e-01 + -1.6603326575166899e-01 1.2410456572527413e+00 9.9344486824975764e-01 + -2.1355497673234403e-01 1.4952817790706827e+00 1.3223870500143653e+00 + -2.4093127686284854e-01 1.6960901366032659e+00 1.6831582720398082e+00 + -2.2505455561265986e-01 1.8407831648056956e+00 2.0579236543399473e+00 + -1.5332741374282655e-01 1.9289175596464254e+00 2.4256418255953607e+00 + -2.7112700153369085e-02 1.9620432967258572e+00 2.7673309535613599e+00 + 1.4514577189468314e-01 1.9486837285628480e+00 3.0764704009397210e+00 + 3.5499354414154527e-01 1.9008087665937059e+00 3.3569454098606428e+00 + 5.9391218292098602e-01 1.8292959309875103e+00 3.6170402539122666e+00 + 8.5623389157658303e-01 1.7418999980447718e+00 3.8708640591644885e+00 + 1.1443560022961363e+00 1.6407335121868778e+00 4.1357564922857097e+00 + 1.4654765530367526e+00 1.5227425119564755e+00 4.4206400995888009e+00 + 1.8062332896583979e+00 1.3958841938346964e+00 4.7181432541381536e+00 + 2.1092093451238823e+00 1.3000243217600183e+00 5.0172424987788009e+00 + 2.3439296355730419e+00 1.2819908548150898e+00 5.3342439435982500e+00 + 2.6125916407870320e+00 1.2994654472403464e+00 5.8152126191008247e+00 + id 12123 + loc 6.9644278287887573e-01 1.2807700037956238e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7532125304829511e-01:3.4326468632279550e-01:2.5223529129240196e-02:3.7531749983576462e-01:7.4635589077618636e-01:3.4916612001200481e-01:1.2150370015838370e+00:3.0677407113739158e-01:1.9185405810278955e+00:3.4170292313954548e-01:2.7749916880326562e+00:2.7246876369199857e-01:3.3655200764875213e+00 + CVs 20 + 2.0285666363690291e-01 2.9538264834628214e-01 -1.4728130882388185e-01 + 3.9056075046435346e-01 5.6790201755559055e-01 -2.9939544606530427e-01 + 5.4809054000646307e-01 8.3355603642911313e-01 -4.8289741773877426e-01 + 6.9962389200529962e-01 1.1002026605163333e+00 -6.7399352709298110e-01 + 8.8933228521239760e-01 1.3571763839291231e+00 -8.0686064743563746e-01 + 1.1325893990840386e+00 1.5717995551771993e+00 -8.3111155873587705e-01 + 1.4058890291865940e+00 1.7091429880675770e+00 -7.3350820081663215e-01 + 1.6641134966498370e+00 1.7499051191029806e+00 -5.1149851635313448e-01 + 1.8392401529349727e+00 1.6866768728471240e+00 -1.8145835140332012e-01 + 1.8852827034574506e+00 1.5364204765035461e+00 1.8671692084857194e-01 + 1.8190696991615805e+00 1.3269109665587431e+00 5.2809176447920803e-01 + 1.6716339425044990e+00 1.0721186106050524e+00 8.0721241338180194e-01 + 1.4846905070155600e+00 7.8949894910331953e-01 9.9184915844286792e-01 + 1.3250784169879481e+00 5.1540613323718620e-01 1.0820489025792759e+00 + 1.2344055647500936e+00 2.7727909791188027e-01 1.1160416773823523e+00 + 1.1925097353731393e+00 6.3559192129492736e-02 1.1231900345616843e+00 + 1.1289279777293380e+00 -1.9378259528106673e-01 1.1611234171530609e+00 + 1.0183892462243458e+00 -4.8906043731555027e-01 1.3921060291027896e+00 + 1.0511914927232191e+00 -5.9095232238910489e-01 1.5474259061101594e+00 + id 12124 + loc 5.2073043584823608e-01 9.5125325024127960e-02 416 + blend 0.0000000000000000e+00 + interp 3.6346973580471231e-01:3.5328561782584478e-01:9.2762193094644585e-01:3.6337093622742994e-01:1.2777717584345054e+00:3.3107485642100598e-01:1.9999516624646179e+00:3.4999910543976614e-01:2.4829118944939639e+00:3.6346610110735428e-01:3.0266033052121966e+00:2.6834687595675966e-01:3.9635747513501398e+00 + CVs 20 + -5.0989694713057943e-01 2.4221987609971810e-01 2.2486418814492426e-03 + -8.7426589194598303e-01 4.0008289165015554e-01 3.7948532210379721e-02 + -1.1964404491201206e+00 5.3189872248230818e-01 7.0764790347140893e-02 + -1.5371893519604904e+00 6.6866834373882322e-01 8.4331660448615842e-02 + -1.8978225903309225e+00 8.0323995948002247e-01 7.3345493835145548e-02 + -2.2763519916248471e+00 9.2715258161571679e-01 2.9683826843096672e-02 + -2.6675479501894142e+00 1.0317901893843273e+00 -5.5966370673754540e-02 + -3.0629228398955362e+00 1.1086891532933190e+00 -1.9000020659588868e-01 + -3.4505146862916818e+00 1.1505101538387768e+00 -3.7335130940094818e-01 + -3.8167587714891855e+00 1.1526572758391640e+00 -6.0231346870917279e-01 + -4.1564033166438765e+00 1.1113604151381813e+00 -8.7058145827493416e-01 + -4.4866882477766596e+00 1.0147201699045705e+00 -1.1677230483020202e+00 + -4.8366206915315804e+00 8.3958292096950338e-01 -1.4658254367830990e+00 + -5.2047385527553427e+00 5.7405829322793944e-01 -1.7169015941775423e+00 + -5.5566566204558532e+00 2.3419254416045154e-01 -1.8920944426691346e+00 + -5.8681120293909004e+00 -1.5640534276852947e-01 -1.9897885105674060e+00 + -6.1321066980912047e+00 -5.7689147127267137e-01 -2.0089419547733200e+00 + -6.3444542011054406e+00 -1.0023789882217007e+00 -1.9489263612542422e+00 + -6.4642739897288504e+00 -1.3179335173220852e+00 -1.9315545307368449e+00 + id 12125 + loc 3.1327867507934570e-01 9.3188679218292236e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7216827162101777e-01:4.7216354993830156e-01:3.8512759167596811e-01:3.8840603484560299e-01:9.8038683723050546e-01:4.0471287822359231e-01:1.8826075323840967e+00:3.5335054005937083e-01:2.4157259801983244e+00:3.6221867405765146e-01:2.7240858349062798e+00:3.5299059634393909e-01:3.1306382784094842e+00:3.8926824866138016e-01:3.9680401054195178e+00 + CVs 20 + -1.0591774115852078e-01 2.9431166227713657e-01 1.1009814821225131e-01 + -1.7861043888428346e-01 5.1173229706905377e-01 7.3172637555254327e-02 + -2.8796358966929836e-01 7.1269365175060762e-01 7.0569396841207999e-03 + -4.4748740263884385e-01 8.9662142887025087e-01 -6.2717629550449738e-02 + -6.5566035910869958e-01 1.0514578817726767e+00 -1.3999022669721445e-01 + -9.0811493546953770e-01 1.1682173599166814e+00 -2.2600389054739423e-01 + -1.1995696722317997e+00 1.2418298367719229e+00 -3.1931624648237500e-01 + -1.5259005526842691e+00 1.2703311735200145e+00 -4.1599853905218642e-01 + -1.8837279264166753e+00 1.2531612806632924e+00 -5.1059709144559684e-01 + -2.2692302049460675e+00 1.1904004729658284e+00 -5.9675743539705151e-01 + -2.6768821355012351e+00 1.0816131692984692e+00 -6.6786580053859435e-01 + -3.0967983296130650e+00 9.2510525601912552e-01 -7.1928337033783551e-01 + -3.5162496705352591e+00 7.2305348901440092e-01 -7.4648146262935577e-01 + -3.9287915406163765e+00 4.9499017256711253e-01 -7.3743456128112872e-01 + -4.3394240983897623e+00 2.7719553481256642e-01 -6.7183146743048816e-01 + -4.7500326165117617e+00 9.8138737316347813e-02 -5.3310773237981246e-01 + -5.1462134162332296e+00 -3.6332236361116169e-02 -3.1894802142524875e-01 + -5.5055821165379859e+00 -1.3206977596001043e-01 -4.3058172510794392e-02 + -5.7684686582178255e+00 -2.9210577533245313e-01 1.1856407822587026e-01 + id 12126 + loc 6.8246304988861084e-02 1.3006657361984253e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4646637684647108e-01:2.7522292866337150e-01:4.9389338504699287e-02:3.4646291218270264e-01:7.6447560855762808e-01:3.0873528234434333e-01:1.3881640478738198e+00:2.8321461800772602e-01:2.4077566178439440e+00:3.3207792729327568e-01:3.2884902555128828e+00 + CVs 20 + -1.3263075738482163e-01 2.9524068866192460e-01 -1.2437498203324820e-02 + -2.8581102632663735e-01 6.1707612523223621e-01 1.5719544275262398e-02 + -4.3706540234242841e-01 9.5642089742764136e-01 6.8588129614146232e-02 + -5.9098809836623123e-01 1.3083021866013573e+00 1.2596053669969692e-01 + -7.6824669165483406e-01 1.6690331191808505e+00 1.6611183504635119e-01 + -9.8355541974875860e-01 2.0287469062640988e+00 1.6675761651975884e-01 + -1.2461472960217559e+00 2.3718437859463553e+00 1.0002000607157024e-01 + -1.5583759625969840e+00 2.6665756691228926e+00 -8.1675360231189043e-02 + -1.8800954462742629e+00 2.8428485365412057e+00 -4.1785508399455629e-01 + -2.1365965519727532e+00 2.8560549306546896e+00 -8.5623244348462468e-01 + -2.3143120604000398e+00 2.7270533348675672e+00 -1.3278477440013445e+00 + -2.4367003427093126e+00 2.4562376781321373e+00 -1.7930753029034401e+00 + -2.5206754470210950e+00 2.0400731229543130e+00 -2.1907637709967522e+00 + -2.5602533221933457e+00 1.5539199816866607e+00 -2.4876274220221375e+00 + -2.5366350180176340e+00 1.1135512165247810e+00 -2.7424988217934447e+00 + -2.4586207805846718e+00 8.2337734706596666e-01 -3.0150022249573474e+00 + -2.3766484793571099e+00 7.4268962180410647e-01 -3.2912071405146786e+00 + -2.3038139060195499e+00 7.8130650162689674e-01 -3.5618156630040470e+00 + -2.1202962659378746e+00 6.7082380831392152e-01 -4.0247497206317702e+00 + id 12127 + loc 4.0864485502243042e-01 4.7601994872093201e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4412444984824812e-01:4.3522742627068328e-01:1.5858427618200555e-03:4.0105977493567507e-01:7.8165799609076259e-01:2.8282712808032751e-01:1.3345634734874707e+00:2.7760030142170383e-01:2.0798543873938442e+00:3.5757645270648064e-01:2.8867418876417972e+00:4.4412000860374967e-01:3.6024698857512205e+00 + CVs 20 + -3.8449700539574472e-02 2.7788743789266646e-01 -2.7543511486768122e-02 + -1.0192999157295335e-01 5.2877494596490782e-01 -5.3006048836157102e-02 + -1.7774447920549508e-01 7.6779276684775466e-01 -7.8354892663452538e-02 + -2.5085967586036118e-01 1.0006764378379482e+00 -1.0176472115512553e-01 + -3.1737452674449190e-01 1.2257086291408674e+00 -1.2635369409288216e-01 + -3.7291905523613900e-01 1.4455361957067949e+00 -1.5698018590684684e-01 + -4.2072698586732005e-01 1.6688716092943647e+00 -2.0223218839559481e-01 + -4.7819812620499802e-01 1.9052702680140774e+00 -2.7339674859458774e-01 + -5.7926940721862974e-01 2.1524520986174922e+00 -3.7702864453699814e-01 + -7.5675165801632593e-01 2.3874145951281167e+00 -5.0951937823963522e-01 + -1.0204231403183393e+00 2.5727138090551507e+00 -6.5930063888891166e-01 + -1.3409790373405586e+00 2.6502174284129012e+00 -7.7729269407683810e-01 + -1.6383851245821135e+00 2.5958164442758882e+00 -8.0379708507682535e-01 + -1.8138139367639576e+00 2.4476486250929064e+00 -7.7825165367947391e-01 + -1.7260395097896735e+00 2.2124762469655423e+00 -7.7865912246576363e-01 + -1.3232787989470616e+00 1.7316229658261988e+00 -7.8598382155425472e-01 + -9.9046384683167987e-01 7.8173946983970388e-01 -6.4266818706294837e-01 + -1.5208689192909985e+00 -5.5726259956896551e-01 -1.8713939298235582e-01 + -1.5247918145416501e+00 -5.0012900979130848e-01 -2.2527022778018285e-01 + id 12128 + loc 6.9190800189971924e-02 4.6288475394248962e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5768340381925526e-01:3.8725812809308346e-01:2.6173886147711245e-01:3.9216388092110210e-01:9.9347537737303160e-01:3.9747970078710854e-01:1.4662470710628537e+00:2.7960876908868243e-01:1.9987896922758450e+00:4.3825070981404879e-01:2.5754240717678636e+00:4.5682321738106640e-01:3.1152972071846685e+00:4.5767882698521711e-01:3.8625405925414116e+00 + CVs 20 + -2.3565643888565641e-01 5.3975541002086302e-01 -1.5496998392362318e-01 + -4.4754537455756210e-01 1.1202825523411903e+00 -3.5969362162800045e-01 + -5.7870526413389412e-01 1.7317228474214548e+00 -6.2917604060870613e-01 + -6.0788338032135991e-01 2.3303267436095991e+00 -9.8386240988393159e-01 + -5.6657746487262250e-01 2.8533280210819294e+00 -1.4482567564607423e+00 + -5.1761486933074030e-01 3.2303774990299909e+00 -2.0234176647453910e+00 + -5.0589270157854205e-01 3.3895173780938479e+00 -2.6679829665294656e+00 + -5.3890137012230277e-01 3.2838450415103213e+00 -3.2995817881185112e+00 + -5.9660348912017014e-01 2.9222585900074662e+00 -3.8286118823037918e+00 + -6.2271329560914546e-01 2.3556828905802716e+00 -4.1924393902940107e+00 + -5.4507811206462975e-01 1.6694024815739188e+00 -4.3546017339078249e+00 + -3.4525356924577927e-01 9.8764307773633497e-01 -4.3176624893247926e+00 + -8.2287923757121045e-02 4.0968132034886529e-01 -4.1368952524954139e+00 + 1.6880108890269380e-01 -3.4681737392239564e-02 -3.8809781668830654e+00 + 3.7694064609564470e-01 -3.5871725216773309e-01 -3.6105600036696779e+00 + 5.6570681164169234e-01 -6.2452805305859271e-01 -3.3889085836618467e+00 + 1.0635468063659201e+00 -7.1343716167903115e-01 -3.4781334556325914e+00 + 1.1467555593270795e+00 -6.3526796771186544e-01 -3.4874248455451093e+00 + 1.2847044194409420e+00 -3.7497476435851507e-01 -3.3911139198868101e+00 + id 12129 + loc 6.1174660921096802e-01 3.0575439333915710e-01 411 + blend 0.0000000000000000e+00 + interp 4.6557650788161647e-01:3.2805335461902085e-01:4.7300991414144289e-01:3.4692652036077171e-01:1.1241346197992670e+00:4.6557185211653768e-01:1.7421089173761630e+00:3.4869842719337962e-01:2.0791633400198353e+00:4.0912368675939864e-01:3.0676515777341775e+00:3.8365792312713159e-01:3.9214574558680484e+00 + CVs 20 + -7.2965283149503357e-01 2.5301122432626383e-01 1.0245511631198553e-01 + -1.3032879935502903e+00 3.9113932328960310e-01 1.8491523926818126e-01 + -1.8349306366844325e+00 4.8149610071355409e-01 2.3690572416400171e-01 + -2.3757108977418016e+00 5.4227543245639942e-01 2.6290583659304578e-01 + -2.9160348212449922e+00 5.6980350342912978e-01 2.7014837823793819e-01 + -3.4489725792407393e+00 5.6437594225645993e-01 2.7130631931235627e-01 + -3.9708465326039804e+00 5.2628723408422284e-01 2.7885737571260794e-01 + -4.4811025929793855e+00 4.5186328611997228e-01 3.0188442755128420e-01 + -4.9797153215167658e+00 3.3279849986486054e-01 3.4830697797391486e-01 + -5.4594654285576247e+00 1.5741794753016825e-01 4.2575101805546633e-01 + -5.9012763927636946e+00 -8.1640583817398582e-02 5.3634979179973019e-01 + -6.2906541439730832e+00 -3.7548167369050223e-01 6.7467664255767301e-01 + -6.6273556196943826e+00 -7.1160629415401555e-01 8.3221766023643329e-01 + -6.9156490244908060e+00 -1.0807630029675601e+00 1.0021876963056171e+00 + -7.1568552667249321e+00 -1.4757366884113456e+00 1.1776893015194490e+00 + -7.3503117141948433e+00 -1.8937431389087473e+00 1.3491554020710947e+00 + -7.4939966847811039e+00 -2.3318687004814813e+00 1.5060368035931693e+00 + -7.5885719777780078e+00 -2.7696010834870322e+00 1.6423101748882289e+00 + -7.6717543083846609e+00 -3.1265354306265145e+00 1.7518192599790479e+00 + id 12130 + loc 8.0612170696258545e-01 5.0217274576425552e-02 384 + blend 0.0000000000000000e+00 + interp 2.7544299416469764e-01:2.7479771572561834e-01:8.1677103793477124e-01:1.6411117021285379e-01:1.6072359455297893e+00:2.7261349135688939e-01:2.5162132691885519e+00:2.7544023973475601e-01:3.4194727818350752e+00 + CVs 20 + -1.1935222044115843e+00 2.0285917008292562e-01 6.9164022703895101e-01 + -1.9939442902439632e+00 2.1587788736444030e-01 1.2304964699611960e+00 + -2.6961681263795882e+00 1.4246283299341389e-01 1.7336396637635505e+00 + -3.4147636380500419e+00 4.3686904379802716e-03 2.2511593588236045e+00 + -4.1152332349210967e+00 -2.0124076254015871e-01 2.7635811212263270e+00 + -4.7630560118286303e+00 -4.6846993252232305e-01 3.2554305665963410e+00 + -5.3314530328832133e+00 -7.7996468557332610e-01 3.7202692987178514e+00 + -5.8063225063606234e+00 -1.1075550080794538e+00 4.1618435439795736e+00 + -6.1908492343249639e+00 -1.4337632504371736e+00 4.5890483467525724e+00 + -6.5007538369545337e+00 -1.7565894332020335e+00 5.0213183730936981e+00 + -6.7525433815539735e+00 -2.0891082014378757e+00 5.4777877323166759e+00 + -6.9522645812226607e+00 -2.4512971207248451e+00 5.9640876409108872e+00 + -7.0928784929921651e+00 -2.8576941554652087e+00 6.4687635632923506e+00 + -7.1624836543924300e+00 -3.3008810952355909e+00 6.9611326146586103e+00 + -7.1599168057942322e+00 -3.7565048466823567e+00 7.4033073736543065e+00 + -7.0940713831314284e+00 -4.2109907003962217e+00 7.7690113684611370e+00 + -6.9771605778689851e+00 -4.6585743458044817e+00 8.0423797394858791e+00 + -6.8241216601262948e+00 -5.0877203057857709e+00 8.2155062927570981e+00 + -6.6665474224709911e+00 -5.4264390304203047e+00 8.2613423455980417e+00 + id 12131 + loc 7.7567055821418762e-02 8.7925744056701660e-01 1074 + blend 0.0000000000000000e+00 + interp 4.4698686845111540e-01:3.6480854914334909e-01:4.2508692006132942e-02:2.8743883567845985e-01:9.0220383918149327e-01:4.4698239858243094e-01:1.1339369820502934e+00:3.2178606082502181e-01:2.0096435929922394e+00:3.4619608383652989e-01:2.7792756784179442e+00:2.8322627772574421e-01:3.3337928053624806e+00 + CVs 20 + 2.8612146099530583e-01 3.5637509546649437e-01 -2.0129117468968358e-01 + 5.6338954239785644e-01 7.0719205924283823e-01 -4.2827730393323649e-01 + 8.3912565806078632e-01 1.0518632554075078e+00 -6.5207868950810921e-01 + 1.1162017309061854e+00 1.3846468531035261e+00 -8.5906030577769232e-01 + 1.3884005082779818e+00 1.6932324766034574e+00 -1.0546761953384691e+00 + 1.6407923472949533e+00 1.9584490865072370e+00 -1.2596408999076758e+00 + 1.8634041413744111e+00 2.1594914638574081e+00 -1.4928344839595018e+00 + 2.0493564554457047e+00 2.2659722675197704e+00 -1.7515440079863580e+00 + 2.1979363200671651e+00 2.2604480271739824e+00 -2.0147744145294784e+00 + 2.3264722981105264e+00 2.1552246139684024e+00 -2.2779131566031170e+00 + 2.4546293261299477e+00 1.9621362948689438e+00 -2.5384922509241483e+00 + 2.6035460334328100e+00 1.7098834366577438e+00 -2.7769152464218680e+00 + 2.7922375884313162e+00 1.4506435771266988e+00 -2.9793749894813257e+00 + 3.0189389950430336e+00 1.2252938934919153e+00 -3.1462628653565257e+00 + 3.2648230386524704e+00 1.0538165039056639e+00 -3.2807425057836945e+00 + 3.4956417368350565e+00 9.4802867194951046e-01 -3.3702644541082809e+00 + 3.6785413291562805e+00 8.7046526129596768e-01 -3.3870679135102000e+00 + 3.8587687838252629e+00 8.3487708033383345e-01 -3.4321589201709530e+00 + 4.0534017435637537e+00 1.1385423028323967e+00 -3.5685229126670550e+00 + id 12132 + loc 1.8447770178318024e-01 8.9375370740890503e-01 1076 + blend 0.0000000000000000e+00 + interp 5.5623411304547210e-01:2.6532447640347018e-01:1.1071732758685116e-03:3.2799744926564922e-01:8.9689504175716983e-01:5.5622855070434163e-01:1.2743241444720117e+00:5.1684943310299780e-01:1.9198850390756386e+00:3.3470478163679623e-01:2.0967368264517523e+00:3.2672805721163922e-01:3.0595038684178406e+00 + CVs 20 + 3.3724390814432031e-01 2.9823527925491944e-01 -8.5599466197346596e-02 + 6.8802908509548444e-01 5.6534655980011650e-01 -1.9029998915428539e-01 + 1.0470805336575015e+00 8.0477511943965685e-01 -3.0436242772838562e-01 + 1.4037337671673786e+00 1.0030926085740273e+00 -4.3618915407249342e-01 + 1.7453377552519040e+00 1.1453684444862353e+00 -5.9845945181358218e-01 + 2.0540223030227640e+00 1.2175907919131959e+00 -7.9764416699290641e-01 + 2.3105223988029522e+00 1.2105790752068522e+00 -1.0286895790001112e+00 + 2.4995678810546198e+00 1.1233839117079925e+00 -1.2738623066890284e+00 + 2.6149754627121098e+00 9.6254797643539702e-01 -1.5041744568459721e+00 + 2.6673587391256386e+00 7.4436910189160455e-01 -1.6890141590724266e+00 + 2.6738600867127640e+00 4.8894325385987070e-01 -1.8099170753274927e+00 + 2.6429582206919733e+00 2.1496197779662340e-01 -1.8681765734340798e+00 + 2.5692002660729001e+00 -6.3532864087860852e-02 -1.9005009252596041e+00 + 2.4212087230150199e+00 -3.4366698795357342e-01 -1.9768100511303499e+00 + 2.1349410882035191e+00 -6.0273091127687639e-01 -2.1151104630849091e+00 + 1.6736797165388908e+00 -7.6523091033140012e-01 -2.2454009795089469e+00 + 1.0831952368832438e+00 -7.4483660762609760e-01 -2.2757124016062664e+00 + 5.1998181361170459e-01 -5.9941477828034018e-01 -2.2241337312682892e+00 + 1.2172127429065827e-01 -7.1876588290711152e-01 -2.3695609797056365e+00 + id 12133 + loc 4.6674731373786926e-01 6.0652333498001099e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4102073882072429e-01:2.9602360622563739e-01:3.7698601679378840e-01:4.3518699800629945e-01:9.6781103365259413e-01:4.4101632861333612e-01:1.6399079019277685e+00:3.7967460211467458e-01:2.1424190040703674e+00:3.2424587895980178e-01:2.9365727067923078e+00:3.6868113994609369e-01:3.9504609225691425e+00 + CVs 20 + -1.5847663568947656e-01 1.9887020061435731e-01 2.2863710213291616e-01 + -2.5751214091270014e-01 3.2094443922056648e-01 3.1869625096723297e-01 + -3.5032068211489126e-01 4.1540656769044193e-01 3.6863945670081721e-01 + -4.5664022395697468e-01 5.0176756792266197e-01 4.1579842402630163e-01 + -5.7242985851969030e-01 5.7914917837685209e-01 4.5714280218878334e-01 + -6.9364015149060365e-01 6.4752790680840022e-01 4.9103528754703657e-01 + -8.1698820020972207e-01 7.0793377743238861e-01 5.1730963209697756e-01 + -9.4033270575026351e-01 7.6213836083760111e-01 5.3714349296075203e-01 + -1.0628474852919310e+00 8.1195325886143244e-01 5.5276422900481881e-01 + -1.1850347064305322e+00 8.5867425139998466e-01 5.6707099301697106e-01 + -1.3080693732355828e+00 9.0287869588649095e-01 5.8334157755369731e-01 + -1.4326124617192182e+00 9.4459378066353883e-01 6.0514219375056211e-01 + -1.5572604842939897e+00 9.8386590221591597e-01 6.3689033516423144e-01 + -1.6778380057901994e+00 1.0210709301745706e+00 6.8438936085223889e-01 + -1.7892702569350698e+00 1.0561330945079670e+00 7.5238032411884492e-01 + -1.8873996090746827e+00 1.0876670747776718e+00 8.4028874180837276e-01 + -1.9673962705170887e+00 1.1131735998901360e+00 9.4311130229745321e-01 + -2.0211527020356721e+00 1.1285660433593081e+00 1.0595745400320520e+00 + -2.0272178676348225e+00 1.1135975783642273e+00 1.2122314977981143e+00 + id 12134 + loc 1.4082757115829736e-04 6.6141468286514282e-01 406 + blend 0.0000000000000000e+00 + interp 4.6431759392404692e-01:2.7092677814296723e-01:3.5011114506705354e-01:3.0763059597118603e-01:1.4566638748487080e+00:4.6431295074810769e-01:1.9398837210354543e+00:3.7162332615895854e-01:2.8638125657591957e+00:4.1155645794623291e-01:3.2681356461254523e+00:3.7358953243540416e-01:3.9999486327867926e+00 + CVs 20 + 1.8373112546402687e-01 2.7076349002489020e-01 -1.4559375818235934e-01 + 2.4543389230044008e-01 4.5713110129088919e-01 -2.8031462035935656e-01 + 2.8304691059672293e-01 5.8921986787047742e-01 -3.9892195909010886e-01 + 3.2317759280759950e-01 7.1168440035878122e-01 -5.1031376211464563e-01 + 3.6290817069884418e-01 8.3123257467278622e-01 -6.1224855488269259e-01 + 3.9997012040031438e-01 9.5811447736913113e-01 -7.0186804469414932e-01 + 4.3072579903582953e-01 1.1119031032843032e+00 -7.7053459857915541e-01 + 4.4887114670598360e-01 1.3312131382855168e+00 -7.8021500916424669e-01 + 4.5998759267054312e-01 1.6186703268088345e+00 -5.9819691730592950e-01 + 5.1891661762651264e-01 1.7422395130313295e+00 -2.5102987797115028e-01 + 6.1197506043078931e-01 1.7243539164756863e+00 -2.2648463045235434e-02 + 7.1143705431047632e-01 1.6867109347056017e+00 1.2747131281124335e-01 + 8.1970849761056730e-01 1.6405608487216270e+00 2.4985108497697731e-01 + 9.3837251411705713e-01 1.6052650305766347e+00 3.3728531236612502e-01 + 1.0629922772781235e+00 1.6123939391920081e+00 3.6878610377993154e-01 + 1.1862214334367944e+00 1.6694578965584250e+00 3.3909698423722900e-01 + 1.3087400061478491e+00 1.7551265775334073e+00 2.6609739304256885e-01 + 1.4447539613216260e+00 1.8489287228047626e+00 1.8034853017782532e-01 + 1.7218624645571097e+00 1.8618533617800312e+00 2.6775452896238749e-01 + id 12135 + loc 3.4856483340263367e-01 4.2247107625007629e-01 416 + blend 0.0000000000000000e+00 + interp 4.3657873933225572e-01:4.1163642784642723e-01:4.7650726300060653e-01:3.3883475743326846e-01:1.1800448125539746e+00:3.8469521269797347e-01:2.0547551936582567e+00:2.8442407644907702e-01:2.5383544923764623e+00:3.9068485995196045e-01:2.9881602334950412e+00:4.3657437354486239e-01:3.2869448870142910e+00:4.2158511195527826e-01:3.9497502111682361e+00 + CVs 20 + -1.1075438163856613e-01 2.1703457308523313e-01 -6.4095166460755904e-01 + -2.4449140011108644e-01 3.0916507882105815e-01 -1.0653947788316216e+00 + -3.7691512534794258e-01 3.5355715175451652e-01 -1.4475801178789665e+00 + -4.9674141759549417e-01 3.8174811154249916e-01 -1.8623748013310628e+00 + -5.9540230702744279e-01 3.8760880912527462e-01 -2.3075886430540846e+00 + -6.6097477461485132e-01 3.6614928562962945e-01 -2.7792770802694347e+00 + -6.8043657027858295e-01 3.1442550966692762e-01 -3.2692587563452098e+00 + -6.4502866002145320e-01 2.3187357200812586e-01 -3.7647781631868331e+00 + -5.5165390206557485e-01 1.2043480010960250e-01 -4.2519809700787237e+00 + -4.0259043400031458e-01 -1.5222247618730922e-02 -4.7168984558709930e+00 + -2.1460301077940525e-01 -1.6885736439279486e-01 -5.1439441005634867e+00 + -2.8344986963473540e-02 -3.3959765730733604e-01 -5.5237887374177248e+00 + 1.1266420552580214e-01 -5.3319634597108401e-01 -5.8629120860840329e+00 + 1.9653733855919264e-01 -7.5395092699386401e-01 -6.1768221924887383e+00 + 2.3103581174374477e-01 -1.0005915342243021e+00 -6.4744803219226084e+00 + 2.1654995402459443e-01 -1.2624204754957233e+00 -6.7490423624900258e+00 + 1.4667260752393496e-01 -1.5227727646922533e+00 -6.9892516885428577e+00 + 2.2426382882922646e-02 -1.7642959358211652e+00 -7.1910809321521318e+00 + -6.9479970705586758e-02 -1.9832942181691520e+00 -7.4120429428240797e+00 + id 12136 + loc 7.2185474634170532e-01 4.6624380350112915e-01 397 + blend 0.0000000000000000e+00 + interp 6.0797624346405454e-01:5.0539207629973082e-01:9.8203950720445221e-01:4.2859693478377253e-01:1.2065453793925416e+00:2.6799421540643442e-01:1.8363668506390858e+00:4.5753238391260864e-01:2.3876726697405921e+00:4.2160866360909266e-01:2.9656475972420617e+00:6.0797016370161994e-01:3.0461467395384032e+00 + CVs 20 + -1.2442703145222991e+00 1.8173884390466932e-01 3.3624760857557512e-01 + -2.0584423640888065e+00 1.3258698407831143e-01 6.0483672658664156e-01 + -2.7987430980375523e+00 -1.0564995259382537e-03 8.6405873190879889e-01 + -3.5908058586380673e+00 -1.5298728877235609e-01 1.1215499352345395e+00 + -4.4007222005418702e+00 -3.2674734945179912e-01 1.3636360034326445e+00 + -5.1922074383465588e+00 -5.2464163861349211e-01 1.5832105622616168e+00 + -5.9308209025340259e+00 -7.5087076664770580e-01 1.7809163453515664e+00 + -6.5897787711331555e+00 -1.0145963469025592e+00 1.9579989395406683e+00 + -7.1567839796861241e+00 -1.3249623228851943e+00 2.1175106113506184e+00 + -7.6370402994969986e+00 -1.6861637395927256e+00 2.2728717636290656e+00 + -8.0416523511070537e+00 -2.0937172019971149e+00 2.4431290225882458e+00 + -8.3782431891306768e+00 -2.5444710997611582e+00 2.6392104232529805e+00 + -8.6501124158048857e+00 -3.0412108282002634e+00 2.8615916349265751e+00 + -8.8536869927943389e+00 -3.5885246568083673e+00 3.1031824278077256e+00 + -8.9782778218950892e+00 -4.1861052357480890e+00 3.3508570627187266e+00 + -9.0098128816793341e+00 -4.8247443697782089e+00 3.5844126008447805e+00 + -8.9379491804942806e+00 -5.4865791449304027e+00 3.7766567885096429e+00 + -8.7675571315091094e+00 -6.1440456709541387e+00 3.9040645969294907e+00 + -8.6117880949847123e+00 -6.7633556273420181e+00 4.0026347004259106e+00 + id 12137 + loc 7.3362451791763306e-01 7.6467961072921753e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0642304086281054e-01:3.6748745219096329e-01:4.6675764131492947e-01:2.9102222568477881e-01:1.0036104722643235e+00:3.2092826284315534e-01:1.7492731936869230e+00:4.4769673950909961e-01:2.5688068028591227e+00:2.8246230922929738e-01:2.9858360409090157e+00:3.7447327309772810e-01:3.4213873545305238e+00:5.0641797663240196e-01:3.9984385870231218e+00 + CVs 20 + 2.2331392539667477e-01 3.0146340505121921e-01 -1.1406861716061507e-01 + 4.3499918248105818e-01 6.0240643811422179e-01 -2.3412173563033220e-01 + 6.5114631501547937e-01 8.9080756328059263e-01 -3.7651053123235911e-01 + 8.7874989402159476e-01 1.1558492531965170e+00 -5.5166129966364197e-01 + 1.1177771155450582e+00 1.3894659361104320e+00 -7.6605689948248012e-01 + 1.3658294401478648e+00 1.5835721751257381e+00 -1.0258556306969804e+00 + 1.6170570418740537e+00 1.7293135952139860e+00 -1.3373807183831858e+00 + 1.8600659862753066e+00 1.8156155219206758e+00 -1.7062364931058434e+00 + 2.0760655868059068e+00 1.8275710698581393e+00 -2.1336311704868454e+00 + 2.2431982096420700e+00 1.7483069374094913e+00 -2.6095358508130486e+00 + 2.3448742477987641e+00 1.5653920557298258e+00 -3.1065585991355280e+00 + 2.3841853861717808e+00 1.2897183321095687e+00 -3.5803459730052949e+00 + 2.3963174622879730e+00 9.8034550820313338e-01 -3.9928326693492333e+00 + 2.4318189297981414e+00 7.6450137185941336e-01 -4.3216214607623860e+00 + 2.5275324890334465e+00 8.3218012269637187e-01 -4.4726274362685094e+00 + 2.6451829047480993e+00 1.1642006022967115e+00 -4.1819539431564507e+00 + 2.5904504469002352e+00 1.2529580200439365e+00 -3.2839210002862562e+00 + 2.1527472212177812e+00 5.4086230843516259e-01 -2.3779883948948246e+00 + 2.2496641528408308e+00 7.4767051651480743e-01 -2.2552849804116120e+00 + id 12138 + loc 8.0904340744018555e-01 2.5606378912925720e-01 1048 + blend 0.0000000000000000e+00 + interp 2.9750319707102230e-01:2.9746449293255089e-01:7.1185092591124000e-01:2.9750022203905158e-01:1.2588356107999519e+00:2.9248112791685621e-01:1.9770648814813354e+00:2.8389903028149849e-01:2.4223244760015818e+00:2.5607578652619695e-01:3.0519799856257652e+00:2.7211149162260073e-01:3.8488085631465276e+00 + CVs 20 + -1.5650689880651159e-02 5.3359905593601298e-01 3.9842645422979089e-01 + -5.1001421158464788e-02 1.0911560681475232e+00 7.8772954285640384e-01 + -1.5035108898284205e-01 1.6756546180614766e+00 1.1471302616591499e+00 + -3.6653845397157070e-01 2.2797338591067859e+00 1.4524204798182625e+00 + -7.4333800188781318e-01 2.8559132342750204e+00 1.6773330387071630e+00 + -1.2858152545029813e+00 3.3272555761569826e+00 1.8149120542795034e+00 + -1.9556901721816797e+00 3.6143196445431363e+00 1.8765379466574890e+00 + -2.6828663811721043e+00 3.6679388084227855e+00 1.8845091832676415e+00 + -3.4019655714150518e+00 3.4740218163228134e+00 1.8515789190919696e+00 + -4.0528534547901138e+00 3.0327633765670394e+00 1.7608681703198557e+00 + -4.5517842244703814e+00 2.3820908585154466e+00 1.5712744695347589e+00 + -4.8177254169383339e+00 1.6257321771537447e+00 1.2495283548088583e+00 + -4.8283084026547636e+00 8.9941027435742527e-01 7.9585588514513372e-01 + -4.6173285510780708e+00 3.4842055061319371e-01 2.4600542327579633e-01 + -4.2583376240524915e+00 9.5027312439099232e-02 -3.3715304370331067e-01 + -3.8438858331619494e+00 1.8493007415853080e-01 -8.8782728455368909e-01 + -3.4641784562927849e+00 5.5729802017966856e-01 -1.3029372964637207e+00 + -3.3029125692133539e+00 9.4226887032449169e-01 -1.3550396487187850e+00 + -3.0721958692474605e+00 1.6568182619091780e+00 -1.2737685445117293e+00 + id 12139 + loc 2.6429602503776550e-01 5.8130437135696411e-01 411 + blend 0.0000000000000000e+00 + interp 4.0789196836131231e-01:2.7550610442554047e-01:1.8835087659108996e-01:4.0703602555919627e-01:9.2938792074335663e-01:3.3745348173914519e-01:1.3226507987556420e+00:3.2293365069715302e-01:2.2432080617207313e+00:3.5906335354957941e-01:3.0921205251410706e+00:4.0788788944162874e-01:3.8631316919973600e+00 + CVs 20 + 8.3981202077116568e-01 1.3224677833395634e-01 -6.8039462871994000e-02 + 1.4430190707830870e+00 1.5707244160824785e-01 -1.3223315374778843e-01 + 2.0005729748683061e+00 1.5027671943789211e-01 -1.6136003682874583e-01 + 2.5718531220938683e+00 1.3561054350119550e-01 -1.4356967450411490e-01 + 3.1414427381989007e+00 1.0966714222221341e-01 -8.1699693283447714e-02 + 3.6954127522268445e+00 7.0533145401354025e-02 1.4819342466951185e-02 + 4.2222843330317561e+00 1.6096958934135319e-02 1.3380664065429215e-01 + 4.7145198720556367e+00 -5.7497841632570879e-02 2.6435915817189304e-01 + 5.1701995294834102e+00 -1.5480936608035711e-01 3.9851519871991348e-01 + 5.5898661993552823e+00 -2.7983462383451063e-01 5.3134502807945627e-01 + 5.9750895060573983e+00 -4.3591252433187200e-01 6.5159388352801073e-01 + 6.3287303270137496e+00 -6.2581149129603308e-01 7.4034330592161457e-01 + 6.6528407542313328e+00 -8.5091538651908727e-01 7.8499981857931400e-01 + 6.9479798437726767e+00 -1.1098463134984629e+00 7.7836826421545302e-01 + 7.2130045149167152e+00 -1.3964367197263576e+00 7.1624357320828136e-01 + 7.4465888084513665e+00 -1.7027907344080093e+00 5.9692370205567169e-01 + 7.6441009578589831e+00 -2.0232785068172263e+00 4.2725636758622282e-01 + 7.7907665089097522e+00 -2.3429756535493351e+00 2.2718859564917931e-01 + 7.8160963100385548e+00 -2.6267509957390995e+00 -1.5547828926562979e-02 + id 12140 + loc 6.6383051872253418e-01 1.2807700037956238e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2521967833742822e-01:3.1667321007108579e-01:1.8464640419767142e-02:3.4493635951828688e-01:7.5718472211636456e-01:3.3348765409587916e-01:1.2200164650658556e+00:4.6020613621556783e-01:1.9268881935379443e+00:3.1555806139710124e-01:2.7903899962032317e+00:5.2521442614064484e-01:3.3974119982294062e+00 + CVs 20 + 3.1788243588870180e-01 3.3472698307265969e-01 -2.1333241988317775e-01 + 5.8540829967885033e-01 6.3987496018007439e-01 -3.7181114847484292e-01 + 8.4327746184120833e-01 9.2412188394577033e-01 -4.9722093822818653e-01 + 1.1168523646267050e+00 1.1924220114750725e+00 -5.9106583302568105e-01 + 1.4170996785165260e+00 1.4416307014579923e+00 -6.3909936845319537e-01 + 1.7491990735386853e+00 1.6652083376579392e+00 -6.2868981252781175e-01 + 2.1105934250709635e+00 1.8532714605620035e+00 -5.5083156598742411e-01 + 2.4925743610054742e+00 1.9949218423488766e+00 -4.0266312564458007e-01 + 2.8834978500509023e+00 2.0808407881235871e+00 -1.8667000038850445e-01 + 3.2739250857057174e+00 2.1032869386773037e+00 8.9668964695440723e-02 + 3.6629087408380689e+00 2.0538949542585896e+00 4.1022360369414801e-01 + 4.0576080139047317e+00 1.9204970532285477e+00 7.4816829083024783e-01 + 4.4644379102782858e+00 1.6903947884080284e+00 1.0661321907658055e+00 + 4.8818754004230458e+00 1.3644222011399481e+00 1.3190144921530109e+00 + 5.3024536528478183e+00 9.7566663062001413e-01 1.4552163214291038e+00 + 5.7090029818855710e+00 6.1354334478701777e-01 1.4325413550336688e+00 + 6.0792880905967381e+00 4.0123377224804868e-01 1.2825331313163559e+00 + 6.4115615725125101e+00 3.6872854019946144e-01 1.0887821455394504e+00 + 6.8726205411345065e+00 2.0397250338487427e-01 8.0741404645340409e-01 + id 12141 + loc 1.0082649439573288e-01 6.4721846580505371e-01 261 + blend 0.0000000000000000e+00 + interp 5.1054679493160400e+00:1.2512264773174162e+00:9.9997208594897047e-01:2.4240573120503731e-01:1.0023571369251010e+00:7.1598527957890079e-01:1.0051011842502970e+00:4.5750211600393859e-01:1.8843506897168485e+00:3.0703717649632245e-01:2.5295109590132059e+00:8.5153450735504765e-01:2.8560686787078584e+00:4.0531828925445668e+00:2.9460473656610189e+00:4.7154563690387370e+00:2.9580282701570453e+00:5.1054579493160404e+00:2.9624194169881495e+00 + CVs 20 + -8.5444784437651700e-01 3.8735577417786299e-01 -2.5859957218858182e-01 + -1.4318847533983843e+00 6.1077640449811255e-01 -3.6600342866588453e-01 + -1.9534590572372228e+00 7.1449606538260435e-01 -3.8413970438236061e-01 + -2.4986444596777053e+00 7.3540701598758684e-01 -3.5469164788687624e-01 + -3.0556467491038863e+00 7.2916549033023104e-01 -3.1972867469198019e-01 + -3.6134227188966102e+00 7.2805361221207765e-01 -3.2367629258286856e-01 + -4.1579045260309506e+00 7.1156772467343610e-01 -4.0471222871945245e-01 + -4.6703104816622165e+00 6.5503236959914890e-01 -5.7533547832227860e-01 + -5.1370483449661233e+00 5.7824322148313123e-01 -8.3011447195386590e-01 + -5.5564020233857088e+00 5.2146468123528611e-01 -1.1618913209343027e+00 + -5.9449268520122587e+00 4.9651628909216949e-01 -1.5345892181678016e+00 + -6.3327483347197022e+00 5.0169233991980255e-01 -1.9024376802695735e+00 + -6.7481308166340108e+00 5.0525303611062711e-01 -2.2613207438173046e+00 + -7.1947722191923518e+00 4.4600255242131137e-01 -2.6403305846293410e+00 + -7.6072313422216071e+00 2.8450511993354111e-01 -3.0873815570091692e+00 + -7.8076632651689293e+00 4.9894342545040438e-03 -3.6369017597540778e+00 + -7.7375415690913387e+00 -3.9877536905705302e-01 -4.1923694688769686e+00 + -7.6486149653329445e+00 -9.4100638739134679e-01 -4.4918407630649826e+00 + -7.7983628766672419e+00 -1.4885527147461302e+00 -4.3168648548762762e+00 + id 12142 + loc 9.1275393962860107e-01 1.3851612806320190e-01 1084 + blend 0.0000000000000000e+00 + interp 5.1248862616148971e-01:4.5877325185736573e-01:6.8224753743252453e-01:5.1248350127522813e-01:9.9997599274244353e-01:3.6079189211964391e-01:1.7002312481977753e+00:3.1337899570745020e-01:2.7090379510910774e+00:3.1043112772152637e-01:3.3435952179125454e+00:3.4194375198189242e-01:3.9997116076228192e+00 + CVs 20 + 1.8394327917293268e-01 2.7750952473363122e-01 -6.1339751571942033e-02 + 3.3474202507500800e-01 5.6480187582880614e-01 -1.2930446801852452e-01 + 4.3397812526118379e-01 8.6074085612355777e-01 -2.1229396247430227e-01 + 5.0129008919946971e-01 1.1591816655061313e+00 -2.8395344284315582e-01 + 5.7684632700720706e-01 1.4459303849445118e+00 -2.9852086806904665e-01 + 6.7950974152849297e-01 1.6986150234553024e+00 -2.2766698781308292e-01 + 7.9087575230893903e-01 1.8902169070396959e+00 -8.0609489757602404e-02 + 8.7444827871461639e-01 2.0107819858426788e+00 9.5576194877320608e-02 + 9.1780933773335249e-01 2.0817247811061983e+00 2.5525189425314843e-01 + 9.2934008660894718e-01 2.1215302541098717e+00 4.0884650204399275e-01 + 9.0533657247775767e-01 2.1322384639074690e+00 5.8024869387222311e-01 + 8.5580037568984468e-01 2.1207612248255963e+00 7.7101999511067509e-01 + 7.7925271548346919e-01 2.0815295620841336e+00 9.8111215809220698e-01 + 6.3655055640024349e-01 1.9856204654770222e+00 1.1619280939055692e+00 + 4.3139506335399652e-01 1.8238503846392520e+00 1.2351215408374774e+00 + 2.2432854652031842e-01 1.6014712568854472e+00 1.1894907819542371e+00 + 4.3583239411380890e-02 1.2639275966920722e+00 1.0188225172504157e+00 + -1.8263805047334236e-01 7.1794674376806844e-01 8.7746842484783250e-01 + -6.8085110049434280e-02 6.9884805960084295e-01 1.0295790911090197e+00 + id 12143 + loc 9.5433092117309570e-01 1.8983225524425507e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3333882116114314e-01:2.8599874979532353e-01:1.8856477918936643e-01:4.1155279765167396e-01:8.1872147182482657e-01:2.7984740012545700e-01:1.5724631388401313e+00:3.2476179603185179e-01:2.4889160529120220e+00:4.3333448777293154e-01:2.9962706975685744e+00:2.7203515357914404e-01:3.5349542395102813e+00 + CVs 20 + -1.7907868110214495e-01 1.9890470566145096e-01 2.1298012591135909e-01 + -3.5788899681328346e-01 3.9128988970354167e-01 4.2798744042700876e-01 + -5.3054980138597418e-01 5.7944332546171462e-01 6.4765755854448581e-01 + -6.9249036779194229e-01 7.6292935433649778e-01 8.7213593585105720e-01 + -8.4167164836467312e-01 9.3950499263648801e-01 1.0992600229180118e+00 + -9.7667240040744618e-01 1.1065001027412324e+00 1.3266593689263655e+00 + -1.0966637990238857e+00 1.2621207932853731e+00 1.5530180089075318e+00 + -1.2018619815040064e+00 1.4056165311541031e+00 1.7779387981718031e+00 + -1.2928652139000896e+00 1.5365380539825395e+00 2.0037330559505055e+00 + -1.3683450273009521e+00 1.6539065038548333e+00 2.2342741372078021e+00 + -1.4224131053415501e+00 1.7553028185295445e+00 2.4725868398335837e+00 + -1.4447197219604315e+00 1.8343009897914411e+00 2.7215810794531672e+00 + -1.4280636605552348e+00 1.8837202791999728e+00 2.9815683094920282e+00 + -1.3722823121071661e+00 1.9002750695453656e+00 3.2519853690757259e+00 + -1.2830786811316546e+00 1.8804101322441444e+00 3.5362005465905186e+00 + -1.1735309810459815e+00 1.8181018987036888e+00 3.8405124325133677e+00 + -1.0621150229907035e+00 1.7000506628252854e+00 4.1615142696631731e+00 + -9.5918436625304504e-01 1.5024983012940292e+00 4.4612036785003575e+00 + -8.7870924829849906e-01 1.1864821295623764e+00 4.5740889990053679e+00 + id 12144 + loc 2.0606911182403564e-01 3.9132934808731079e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5216084553619875e-01:3.3980491819796399e-01:8.6449676444101664e-01:3.1515277648261830e-01:1.2134703505252689e+00:3.1319227588176318e-01:2.0012837613398231e+00:3.0560216912749344e-01:2.7733559612545919e+00:3.5215732392774340e-01:3.4456844338048662e+00:2.7673685849601759e-01:3.9994336332794740e+00 + CVs 20 + 4.3412324239386996e-01 2.3901215150781693e-01 1.8054460754380483e-01 + 6.9083423000222755e-01 3.9675819021238778e-01 3.2005406749496890e-01 + 8.8362401664397583e-01 5.0464190806263431e-01 4.4632397186808631e-01 + 1.0807604406251490e+00 6.0360256916906496e-01 6.0135234947185301e-01 + 1.2770107595623224e+00 6.9159019553308732e-01 7.8565323247320662e-01 + 1.4668167745070928e+00 7.6602601929735137e-01 9.9910848697098675e-01 + 1.6450111146527628e+00 8.2489323343023824e-01 1.2410951612536867e+00 + 1.8068977327717113e+00 8.6662079304084938e-01 1.5101271116921688e+00 + 1.9481791643538158e+00 8.9088361140951478e-01 1.8035914636930821e+00 + 2.0659725308517718e+00 8.9916103963544913e-01 2.1175301099593340e+00 + 2.1599491392339081e+00 8.9478778753013133e-01 2.4472547366569843e+00 + 2.2327696062691325e+00 8.8256299685174089e-01 2.7880985149026660e+00 + 2.2895868807947197e+00 8.6759504524038422e-01 3.1359687059805728e+00 + 2.3359136131730351e+00 8.5383173732673368e-01 3.4878097926801863e+00 + 2.3759395159698737e+00 8.4353594797827858e-01 3.8406763896102118e+00 + 2.4135808185370844e+00 8.3774589042132730e-01 4.1900500136957941e+00 + 2.4542106706289450e+00 8.3687979265221313e-01 4.5295878382143879e+00 + 2.5026170948825266e+00 8.4146938497550572e-01 4.8525364081314404e+00 + 2.5425322135782431e+00 8.8693986208622833e-01 5.1369133746786781e+00 + id 12145 + loc 6.2340229749679565e-01 1.2370547652244568e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5617736442140472e-01:3.2793488999453418e-01:7.4617282256108275e-01:3.9817847613541490e-01:1.0413842701349889e+00:3.0209733245903675e-01:1.9737700366105257e+00:3.0446463838264071e-01:2.5964687300363032e+00:4.5617280264776050e-01:3.2282969604020320e+00:3.4680978681972963e-01:3.9889035668996846e+00 + CVs 20 + -1.4593337699831363e-01 3.9279723063219568e-01 -4.5647459726443435e-02 + -2.9483729546909221e-01 7.7783237749083012e-01 -6.8104578288123663e-02 + -4.6514953407796855e-01 1.1536176824614566e+00 -6.8054413020340598e-02 + -6.6487826986944898e-01 1.5158626162460842e+00 -4.1775446160667862e-02 + -8.9804132465487796e-01 1.8592831077548051e+00 1.8995197519685370e-02 + -1.1684228271126949e+00 2.1764790190229037e+00 1.2764116669175729e-01 + -1.4728580402560625e+00 2.4527876660912771e+00 2.9430280001211861e-01 + -1.8012303883249112e+00 2.6724257380413681e+00 5.1798975821352355e-01 + -2.1433117291905104e+00 2.8243116930185366e+00 7.9005764060051675e-01 + -2.4907189940420800e+00 2.9015221909480666e+00 1.0963252793893175e+00 + -2.8368616963479574e+00 2.9025680531244928e+00 1.4180787904667609e+00 + -3.1776757905477062e+00 2.8331075062089273e+00 1.7361319616916919e+00 + -3.5134326713051238e+00 2.7026488787152214e+00 2.0380614201628506e+00 + -3.8475802679518680e+00 2.5178043934599263e+00 2.3209787994094464e+00 + -4.1863087270101920e+00 2.2712540766682592e+00 2.5924961801018487e+00 + -4.5376726013461006e+00 1.9187191039495002e+00 2.8584983282368643e+00 + -4.8921044523824788e+00 1.3877244505659188e+00 3.0363551260230843e+00 + -5.1906143539798126e+00 8.1786547325055636e-01 2.9525923643275727e+00 + -5.4144752112647394e+00 5.7777942043438690e-01 2.7752195219464051e+00 + id 12146 + loc 1.0998366773128510e-01 8.7259286642074585e-01 411 + blend 0.0000000000000000e+00 + interp 4.9975023706752503e-01:2.8687506849573718e-01:1.3263068095053943e-01:4.6884199665406917e-01:7.9017576888465246e-01:4.9974523956515438e-01:1.2359857692780873e+00:3.2736116338121690e-01:1.9467119019306325e+00:3.4685767216685953e-01:2.9647802408856903e+00:4.2413314501529153e-01:3.8386553284026506e+00 + CVs 20 + 9.0220818974425876e-01 1.6273242688965558e-01 1.0881230454550462e-02 + 1.4769685358155453e+00 2.0995275592296103e-01 1.4683763209187241e-02 + 1.9515560897035977e+00 2.0651473323137209e-01 3.9480983960742594e-02 + 2.4248997444139868e+00 1.8404019539471511e-01 1.0247541679305844e-01 + 2.8921336551537364e+00 1.3816920217989892e-01 2.0487450582066230e-01 + 3.3502748693212046e+00 6.6706499016946141e-02 3.4569523544059799e-01 + 3.7970185352681498e+00 -2.8788157439776474e-02 5.2140831283209066e-01 + 4.2309045761350736e+00 -1.4529338933683045e-01 7.2183151129465017e-01 + 4.6518980628006732e+00 -2.8338513064161375e-01 9.3504932692146758e-01 + 5.0578923455429274e+00 -4.4808707066511522e-01 1.1489247409741006e+00 + 5.4423324182111656e+00 -6.4144456704920061e-01 1.3459725714306958e+00 + 5.8032232467889866e+00 -8.5986388473090547e-01 1.5082555610317914e+00 + 6.1448556742206684e+00 -1.1078505736973039e+00 1.6267362387989752e+00 + 6.4756443353780995e+00 -1.3888826072410057e+00 1.7027305929916583e+00 + 6.8031651784686220e+00 -1.6984025250144579e+00 1.7415584216130007e+00 + 7.1312444403147506e+00 -2.0273263224222706e+00 1.7479173262128058e+00 + 7.4581652026225562e+00 -2.3730609329629493e+00 1.7280207080566643e+00 + 7.7711920446987941e+00 -2.7444499097385249e+00 1.6973482903629038e+00 + 7.9687515452297859e+00 -3.1314585253205540e+00 1.6419510227853149e+00 + id 12147 + loc 7.2068983316421509e-01 3.4924149513244629e-02 406 + blend 0.0000000000000000e+00 + interp 3.6089678476221382e-01:3.2133925346860109e-01:8.3852558201913285e-02:2.7755163966012292e-01:9.2300462567003771e-01:3.4355771091620729e-01:1.2320473241013463e+00:2.1375254927008666e-01:2.0132484899423759e+00:3.3066449845130730e-01:3.0116182052627161e+00:3.6089317579436619e-01:3.7057476200015667e+00 + CVs 20 + -1.2269565396011561e-01 5.7122864342177733e-02 6.6430567969623489e-02 + -2.3503776498822998e-01 9.7978541323111290e-02 1.1571699491221346e-01 + -3.1972961397005906e-01 1.0237699381093324e-01 1.5227070475453003e-01 + -3.9585168751963823e-01 9.2708392667301465e-02 1.8475451256021969e-01 + -4.6244346625329624e-01 7.1944542981383308e-02 2.1192459315806578e-01 + -5.2173632505163592e-01 4.4501274810670732e-02 2.3252678810049054e-01 + -5.8055714307897666e-01 1.5688467642294812e-02 2.4640718021504626e-01 + -6.4967460231843155e-01 -1.0007253630122448e-02 2.5445580361693076e-01 + -7.3265875878388087e-01 -3.2387327805785959e-02 2.5556893221369925e-01 + -8.1677731557222866e-01 -5.5464104841212725e-02 2.4515080882017140e-01 + -8.9179304866218267e-01 -8.0864035064815099e-02 2.2161110221913066e-01 + -9.7165234932408007e-01 -1.0573990678953282e-01 1.9007954015745498e-01 + -1.0798648124837293e+00 -1.2844247704179340e-01 1.5750590883532486e-01 + -1.2227206224845499e+00 -1.4968542368955318e-01 1.2630167423711819e-01 + -1.3893402639102566e+00 -1.7001506551197165e-01 9.7022588951726496e-02 + -1.5691527154971849e+00 -1.8981937511781333e-01 7.4179205536319570e-02 + -1.7584836686496406e+00 -2.1026209924650408e-01 6.1510624895429689e-02 + -1.9550448972938510e+00 -2.3313446950535455e-01 5.5770428227896351e-02 + -2.2055795540203134e+00 -2.3991345297016953e-01 5.2673216281989454e-02 + id 12148 + loc 2.2143541276454926e-01 2.8618922829627991e-01 403 + blend 0.0000000000000000e+00 + interp 4.1266134498695445e-01:3.3792241878004819e-01:2.1476284448768590e-01:2.8871581765457943e-01:1.0727121586466990e+00:4.1265721837350461e-01:2.0051443544962710e+00:2.7646989020278012e-01:2.8927063116703060e+00:2.6187169320013631e-01:3.8591945206412177e+00 + CVs 20 + -2.1657201722143882e-01 1.9282304422386720e-01 7.6674059206474507e-02 + -4.2022430680404099e-01 3.9078459218722261e-01 1.5350043178109357e-01 + -6.2493875107810093e-01 5.9314976934726871e-01 2.3274740718188683e-01 + -8.3853282668201956e-01 7.9616049633537900e-01 3.1754492951565882e-01 + -1.0632663297049809e+00 9.9535116884347452e-01 4.1526996580315750e-01 + -1.2981255275271084e+00 1.1875613176694508e+00 5.4060053131109731e-01 + -1.5363367235841703e+00 1.3678145365779479e+00 7.1291351786166324e-01 + -1.7656271533205441e+00 1.5251584722049407e+00 9.4730999105807356e-01 + -1.9693807290799972e+00 1.6431873968615207e+00 1.2495632098886942e+00 + -2.1297918116388477e+00 1.7055910291855638e+00 1.6126827953196723e+00 + -2.2343832962493968e+00 1.7024138711928993e+00 2.0138321739621485e+00 + -2.2868794352678963e+00 1.6355931304330040e+00 2.4192520742563368e+00 + -2.3069477582843896e+00 1.5168185252934085e+00 2.8052889182234266e+00 + -2.3104351010709805e+00 1.3538352243827996e+00 3.1677320316193049e+00 + -2.3063175293071803e+00 1.1566474412827250e+00 3.5020178632614898e+00 + -2.3142818654447108e+00 9.7022630464977866e-01 3.7913199823840742e+00 + -2.3566962943379135e+00 8.6151384158486488e-01 4.0226789263247884e+00 + -2.4216943733142622e+00 8.1512054951620083e-01 4.2308617790682543e+00 + -2.4722293587177662e+00 6.8200355126814860e-01 4.5701785706299223e+00 + id 12149 + loc 2.2676566243171692e-01 3.6523026227951050e-01 384 + blend 0.0000000000000000e+00 + interp 3.3751896261971770e-01:2.9129722234924560e-01:4.4414988493305763e-01:2.7504937689485059e-01:1.0575500496078118e+00:3.3751558743009152e-01:1.8861357168677340e+00:2.8465109558153062e-01:2.4669208809363439e+00:2.7794772527948591e-01:3.9081389744514348e+00 + CVs 20 + -3.9717008805654197e-01 1.5890285987568620e-01 -1.2485974131245376e+00 + -6.9537917624205570e-01 8.2538389154646383e-02 -1.9651756013392931e+00 + -9.6816833342788566e-01 -8.4588590238163813e-02 -2.5210011455912618e+00 + -1.2380506023170095e+00 -2.7089681217093831e-01 -3.0722327565498149e+00 + -1.5021667815825810e+00 -4.6026577470181229e-01 -3.6355139627664155e+00 + -1.7654399352334178e+00 -6.4557796585047911e-01 -4.2295056548751182e+00 + -2.0398291076151973e+00 -8.3043099627806560e-01 -4.8611340897701849e+00 + -2.3381083243891667e+00 -1.0308900256192706e+00 -5.5177703245268335e+00 + -2.6653028956981171e+00 -1.2770856070460856e+00 -6.1720619049546555e+00 + -3.0206914629185162e+00 -1.6041031464099262e+00 -6.7884168506691678e+00 + -3.4099835730422048e+00 -2.0331988281559399e+00 -7.3262609836862778e+00 + -3.8508508137102302e+00 -2.5525394681656079e+00 -7.7514681540643098e+00 + -4.3452093566461221e+00 -3.1092989725429274e+00 -8.0380654568391279e+00 + -4.8782706433143339e+00 -3.6480356808617760e+00 -8.1846016853609669e+00 + -5.4248556439411040e+00 -4.1271357580213834e+00 -8.2109238606867017e+00 + -5.9515177861932163e+00 -4.5279790209376243e+00 -8.1478914212912485e+00 + -6.4348955291905963e+00 -4.8563351737938065e+00 -8.0108473777604647e+00 + -6.8594388754406914e+00 -5.1303977043014664e+00 -7.8169956402977769e+00 + -7.2107295999492189e+00 -5.2997065007157476e+00 -7.6252685831182898e+00 + id 12150 + loc 4.6979391574859619e-01 8.2339876890182495e-01 1076 + blend 0.0000000000000000e+00 + interp 4.8987677642230143e-01:3.3460188418047893e-01:2.6469914885409362e-01:3.5795373458468149e-01:1.0001688509259690e+00:4.8987187765453721e-01:1.5368780162179725e+00:3.3603573754815264e-01:2.0723141110441365e+00:3.2759080352366837e-01:3.0013442910730017e+00:3.9846107677972364e-01:3.7594489361651666e+00 + CVs 20 + 1.8891361373458482e-01 2.8636194483780880e-01 -5.8297837578533199e-02 + 3.9320215653235641e-01 5.6720708215720250e-01 -1.1282247556227314e-01 + 6.1041266280976758e-01 8.3699137812017099e-01 -1.7404804098360668e-01 + 8.4030980538897770e-01 1.0904743179962562e+00 -2.4909013925651444e-01 + 1.0853711219292108e+00 1.3218866572259600e+00 -3.4418276058540148e-01 + 1.3477264063108800e+00 1.5219397184654124e+00 -4.7079669950924308e-01 + 1.6259553807888174e+00 1.6756923199273581e+00 -6.4165959981034604e-01 + 1.9131199124185734e+00 1.7687861435105730e+00 -8.5923884585865928e-01 + 2.1965778358171399e+00 1.7942814227882369e+00 -1.1135473780326270e+00 + 2.4604998933646316e+00 1.7537877945167764e+00 -1.3855793097245361e+00 + 2.6948492281306264e+00 1.6567985212634906e+00 -1.6532690814541477e+00 + 2.9002341918030252e+00 1.5136210171179982e+00 -1.9036791343901016e+00 + 3.0837092317949657e+00 1.3233657092470934e+00 -2.1401355257422181e+00 + 3.2503665248493370e+00 1.0593194443942922e+00 -2.3857854937883625e+00 + 3.3741320672063884e+00 6.9254732038423028e-01 -2.6681646999174315e+00 + 3.3906608323954393e+00 2.3766357536155602e-01 -2.9936356702857920e+00 + 3.2442779867316442e+00 -2.5116807324823365e-01 -3.3434945628422104e+00 + 2.9515797163576938e+00 -6.7364379040011202e-01 -3.6473670964697984e+00 + 2.7337322341558079e+00 -8.7370654132816650e-01 -3.7358366243725531e+00 + id 12151 + loc 4.3954586982727051e-01 9.1698497533798218e-01 261 + blend 0.0000000000000000e+00 + interp 5.1097253328760206e-01:5.1096742356226921e-01:3.6688899113005846e-01:4.5720612450163245e-01:9.0241786984286176e-01:2.1704540699646635e-01:1.6921097587970655e+00:3.2530507435205486e-01:2.0892268334123534e+00:3.4123789926437609e-01:2.8456761054912030e+00:3.6947765354680046e-01:3.5402910166132080e+00 + CVs 20 + -7.9823362269948850e-01 4.4779361929737616e-01 -4.5034900583478937e-01 + -1.4212642319481372e+00 7.2672598795307852e-01 -6.7358539867380884e-01 + -2.0080860121961752e+00 8.7646842699410310e-01 -7.4099902560869413e-01 + -2.5841182243803593e+00 9.6304150485476447e-01 -7.1222111554616263e-01 + -3.1429779524796384e+00 1.0462480098848468e+00 -6.3837206668840052e-01 + -3.7171078294446693e+00 1.1503207167990162e+00 -5.7106823881762547e-01 + -4.3345667837662676e+00 1.2588936881157544e+00 -5.6748289949052455e-01 + -4.9849135542821106e+00 1.3454307150773928e+00 -6.7697466881613133e-01 + -5.6273418859755786e+00 1.3967779245734078e+00 -9.2838172354541726e-01 + -6.2162116366789020e+00 1.4054560347080725e+00 -1.3285251426870346e+00 + -6.7255242002653501e+00 1.3575586160401720e+00 -1.8577593041078049e+00 + -7.1498018911689751e+00 1.2304319601206508e+00 -2.4807343218110240e+00 + -7.4813399774440930e+00 9.7378765480775309e-01 -3.1403875995491073e+00 + -7.7013594677182295e+00 5.5146723204399617e-01 -3.7570877247584447e+00 + -7.7833778675637451e+00 -3.6595325054697980e-03 -4.2626201464392466e+00 + -7.7059829489126042e+00 -6.0165581993937112e-01 -4.6000683519194645e+00 + -7.5537840286600533e+00 -1.1368051016835232e+00 -4.7240418676124909e+00 + -7.4746419115330109e+00 -1.6059759123063344e+00 -4.6117018828828291e+00 + -7.5344349996024720e+00 -2.2300499344523299e+00 -4.2369845139916933e+00 + id 12152 + loc 7.2779279947280884e-01 5.8451479673385620e-01 1074 + blend 0.0000000000000000e+00 + interp 3.6757184292697459e-01:2.8410774604859718e-01:1.0086129660121379e+00:2.8985301039221795e-01:2.0333606584568704e+00:3.6756816720854535e-01:2.9807529337567309e+00:2.7500849698105062e-01:3.9779186349919264e+00 + CVs 20 + 4.3575103401227847e-02 2.6186189883363870e-01 -2.3539846215753107e-01 + 1.0738194861510927e-01 5.1832735094499982e-01 -4.6944380166670263e-01 + 2.0882536144973168e-01 7.6212957431290440e-01 -6.9487460617406249e-01 + 3.5364617207592547e-01 9.8420619617727423e-01 -9.0523532067275714e-01 + 5.3729673435346093e-01 1.1756914179152020e+00 -1.0963501418997890e+00 + 7.4907124018384508e-01 1.3307420290711272e+00 -1.2681670194981749e+00 + 9.7644405091696274e-01 1.4476636169092589e+00 -1.4234758759885251e+00 + 1.2085077990026749e+00 1.5285999401210546e+00 -1.5661811289307035e+00 + 1.4377299914702903e+00 1.5785596594629174e+00 -1.7037448073035324e+00 + 1.6583937850827635e+00 1.6030317865904697e+00 -1.8454414219357396e+00 + 1.8666691829226905e+00 1.6064113807630997e+00 -1.9960716162235497e+00 + 2.0608783464533849e+00 1.5909369174509798e+00 -2.1572572407748489e+00 + 2.2410045256200566e+00 1.5590737365061917e+00 -2.3290988458747086e+00 + 2.4115061557485351e+00 1.5154746949746702e+00 -2.5123456072652015e+00 + 2.5782240493995960e+00 1.4587642499270252e+00 -2.7134367901754586e+00 + 2.7440674084027488e+00 1.3673545704513468e+00 -2.9399270390228516e+00 + 2.8980163578512861e+00 1.2048190549916427e+00 -3.1813465693735177e+00 + 3.0029260734487764e+00 9.5829944066641604e-01 -3.3811190645129994e+00 + 2.9582559748233668e+00 6.8341666477043983e-01 -3.3114088781429447e+00 + id 12153 + loc 2.3780207335948944e-01 2.0414896309375763e-01 411 + blend 0.0000000000000000e+00 + interp 4.6898440879071668e-01:3.7353031531733333e-01:3.4244307395099138e-01:3.2011825522977888e-01:1.1648801927518453e+00:3.2128626946527467e-01:1.9542812756393277e+00:4.6897971894662877e-01:2.1730297112203547e+00:3.1195624949524636e-01:2.9999772790053427e+00:3.1291725607646609e-01:3.9589975881314787e+00 + CVs 20 + 2.2874433563246088e-03 1.3428498120555984e-01 -6.3300760070526307e-01 + -6.0543050146282182e-03 2.0202196050506216e-01 -1.1263523176441075e+00 + 1.4714001807739241e-02 2.5116155420528014e-01 -1.5840101438337881e+00 + 8.0203185210050765e-02 3.0371659988473199e-01 -2.0553820891712111e+00 + 1.8539769601485895e-01 3.5842665635650939e-01 -2.5328588019823162e+00 + 3.2110690586368063e-01 4.1381456270523687e-01 -3.0109721391158142e+00 + 4.7614795748895711e-01 4.6621609854522794e-01 -3.4874141835426120e+00 + 6.3975524765942493e-01 5.0646615418368812e-01 -3.9641631340010801e+00 + 8.0223467443558760e-01 5.1914158961572099e-01 -4.4482092747500941e+00 + 9.5349952874839528e-01 4.8322141596767776e-01 -4.9463635687299590e+00 + 1.0825288621742559e+00 3.7520711155197173e-01 -5.4549692302682002e+00 + 1.1796021859783201e+00 1.8054225119805789e-01 -5.9547921002269506e+00 + 1.2398493166091602e+00 -9.7034490793787231e-02 -6.4210215958626513e+00 + 1.2649935213947536e+00 -4.4392170966295108e-01 -6.8363032868019253e+00 + 1.2621653405626676e+00 -8.4627012261709567e-01 -7.1895403614391604e+00 + 1.2419721769290639e+00 -1.2896379832564255e+00 -7.4718307727853279e+00 + 1.2175183042371129e+00 -1.7572958249029664e+00 -7.6785678316541954e+00 + 1.1993107991131033e+00 -2.2323325538461001e+00 -7.8152081316484310e+00 + 1.2032823683533262e+00 -2.5818112902936385e+00 -7.9101886975577624e+00 + id 12154 + loc 1.9477374851703644e-01 3.2554361224174500e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0705789587166907e-01:3.2889083246063244e-01:2.0441975079017960e-01:2.8386537640447140e-01:1.0848681560297893e+00:4.0705382529271039e-01:2.0019724420627245e+00:2.6778866524866107e-01:2.8963410375325633e+00:2.6230631995435272e-01:3.8566897206375454e+00 + CVs 20 + 1.6920817157613904e-01 3.7310130181343071e-01 -1.2921388619075047e-01 + 2.5473886474807694e-01 6.9933219512100764e-01 -2.7588315062730073e-01 + 2.9628230987625076e-01 1.0069245296465130e+00 -4.2406160824269451e-01 + 3.0259918676828179e-01 1.3077334671304839e+00 -5.7045297416312446e-01 + 2.6183924221416255e-01 1.5941154262663457e+00 -7.1652284885883610e-01 + 1.6014755156058158e-01 1.8559964846225516e+00 -8.6197929520693239e-01 + -1.6582941624665337e-02 2.0765964815050655e+00 -1.0011673059401902e+00 + -2.7439695713414680e-01 2.2299655359795776e+00 -1.1181082561795066e+00 + -5.9501029659861893e-01 2.2874779896548718e+00 -1.1858146830640737e+00 + -9.3173679313893010e-01 2.2408201245817589e+00 -1.1816137521301635e+00 + -1.2418819926485296e+00 2.1083987372260511e+00 -1.1032816268145818e+00 + -1.5053326706975860e+00 1.9143655339539138e+00 -9.6365574447610025e-01 + -1.7195756491739391e+00 1.6778036240315948e+00 -7.8213443317881193e-01 + -1.8898367396641618e+00 1.4294477494432407e+00 -5.8498635472447824e-01 + -2.0211736797008810e+00 1.2450360824715017e+00 -4.0832846433760683e-01 + -2.0827096029659180e+00 1.2172106744877711e+00 -2.9739722370679372e-01 + -1.9645496273181129e+00 1.2996016851897094e+00 -2.8466595376370624e-01 + -1.5872840194951767e+00 1.1482480285070316e+00 -3.3736366108428439e-01 + -1.6008555516135159e+00 1.3120079547971206e+00 -3.0615792075605253e-01 + id 12155 + loc 7.2845011949539185e-01 6.8080556392669678e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0371033428416092e-01:4.0370629718081807e-01:6.1527192526889651e-02:4.0252376464748746e-01:6.6108186177487926e-01:2.8683012892513415e-01:1.1869541959473098e+00:3.1358374433970670e-01:2.0653211983418807e+00:3.3418781092649402e-01:2.9701189907116508e+00:2.9623385242602618e-01:3.7130413166139000e+00 + CVs 20 + 8.3158088649248965e-02 2.5591749151020893e-01 -2.3896828339476334e-01 + 1.7576488719295136e-01 5.0972523015480520e-01 -4.4490015861126497e-01 + 2.7979148179657887e-01 7.6273481400061649e-01 -6.4086425068080088e-01 + 3.9674469291984954e-01 1.0132390798019300e+00 -8.4224776267349633e-01 + 5.2759863499467063e-01 1.2562243751513951e+00 -1.0547883301173622e+00 + 6.6784398191844241e-01 1.4882626318991101e+00 -1.2815573989004019e+00 + 8.0694068829203081e-01 1.7116203557613789e+00 -1.5263673039890684e+00 + 9.3396736201958674e-01 1.9307313058834819e+00 -1.7941274455016611e+00 + 1.0456699389146795e+00 2.1461530405807663e+00 -2.0899466487230205e+00 + 1.1466712545904278e+00 2.3527486252940779e+00 -2.4220588922466160e+00 + 1.2429414343303167e+00 2.5349538851558502e+00 -2.8001573150641703e+00 + 1.3387186948841450e+00 2.6650424253017344e+00 -3.2260600918437246e+00 + 1.4324894427737926e+00 2.7136789232171927e+00 -3.6876233957942941e+00 + 1.5127119744184299e+00 2.6607524872324757e+00 -4.1568362782919968e+00 + 1.5721934392397889e+00 2.5033108923910703e+00 -4.6049749000010696e+00 + 1.6191513051645756e+00 2.2480909101097053e+00 -5.0179393012697018e+00 + 1.6582349079554104e+00 1.9069308291603186e+00 -5.3843056946744250e+00 + 1.6525903945572500e+00 1.5117261571655529e+00 -5.6837405723783032e+00 + 1.4707485114256551e+00 1.1648988947659424e+00 -5.8094195905929116e+00 + id 12156 + loc 2.7110281586647034e-01 9.7672951221466064e-01 1055 + blend 0.0000000000000000e+00 + interp 1.0140774052803117e+00:1.0140674052803116e+00:2.3501682890017006e-01:4.7792157737945840e-01:5.9529856761185107e-01:2.6668628664943356e-01:1.6745700228584015e+00:2.0852979249363077e-01:2.4932394134456666e+00:5.3289265921169238e-01:2.7756179414541169e+00 + CVs 20 + -1.8154251321180800e-01 3.3127677399404232e-01 -2.3469250377394274e-01 + -2.6986452260439348e-01 6.3964917042108671e-01 -4.4390996984931985e-01 + -3.0324616662957438e-01 9.5093842060262490e-01 -6.3638716196434542e-01 + -3.0285883027799243e-01 1.2778092272477752e+00 -8.0929025654496556e-01 + -2.6828222781094457e-01 1.6088295500488954e+00 -9.4282729511618180e-01 + -2.1598784455182107e-01 1.9337300079741186e+00 -1.0317463216458058e+00 + -1.6779904540509549e-01 2.2745041170432030e+00 -1.0980651502067276e+00 + -6.5796933216704989e-02 2.7696096811918753e+00 -1.2848917105926938e+00 + 3.8127461647401550e-01 3.1178049413304980e+00 -1.8598490646235903e+00 + 7.2952742036093388e-01 3.0136901346536944e+00 -2.1709102852623356e+00 + 1.0298200628589527e+00 2.8070766000925897e+00 -2.3110340820712905e+00 + 1.4073555303711249e+00 2.5247365941554420e+00 -2.2831343590652891e+00 + 1.8590788709185984e+00 1.8558299898536044e+00 -2.3289580939853098e+00 + 1.9877392198331092e+00 9.2593378138968596e-01 -2.2974416341762254e+00 + 1.8883166650778800e+00 2.6694749026164777e-01 -2.0067745193376330e+00 + 1.7881451142672922e+00 -2.0618372321777961e-01 -1.4767046831416293e+00 + 1.6825088626164308e+00 -4.6541020300649810e-01 -7.7340295379322310e-01 + 1.5747180057425880e+00 -4.6877846258716260e-01 -2.8020790012017738e-02 + 1.4539147954163254e+00 -3.8590067103690939e-01 5.2218820368012242e-01 + id 12157 + loc 9.9231910705566406e-01 2.6812440156936646e-01 397 + blend 0.0000000000000000e+00 + interp 4.5818795891606456e-01:2.5739326706078053e-01:6.9815990688739094e-01:4.0108724799146067e-01:1.8391185661192184e+00:2.6662778144468030e-01:1.9998982049391345e+00:4.2507183608952598e-01:2.3498095471165148e+00:3.3606148687256526e-01:3.0171314080841753e+00:4.5818337703647544e-01:3.6580307501917688e+00 + CVs 20 + -1.1490223646721531e+00 2.0586864855376177e-01 4.0033555257905717e-01 + -1.8088775611227987e+00 2.2603633181775440e-01 7.1979235361400140e-01 + -2.3514505283545599e+00 1.7936953966218250e-01 1.0207317279490957e+00 + -2.9104181705252370e+00 1.1325893687046609e-01 1.3117847854971161e+00 + -3.4891437879527958e+00 1.2294657651020446e-02 1.5819381266593071e+00 + -4.0852526171557120e+00 -1.3764309064880187e-01 1.8289042830094748e+00 + -4.6868821104526859e+00 -3.4420156186969292e-01 2.0630420670974212e+00 + -5.2704587256242172e+00 -6.1100675124414883e-01 2.3000352714177721e+00 + -5.8048840975902003e+00 -9.4136367006204402e-01 2.5457088096471621e+00 + -6.2645619948166100e+00 -1.3280162622867433e+00 2.7981613404552377e+00 + -6.6396920032164726e+00 -1.7568688748585337e+00 3.0567402447739407e+00 + -6.9418418816284442e+00 -2.2195347342758120e+00 3.3241926642127635e+00 + -7.1897718649079909e+00 -2.7159703527677164e+00 3.6055609716907804e+00 + -7.3982072663655698e+00 -3.2427196589679310e+00 3.8989119914134212e+00 + -7.5754486826340344e+00 -3.7879785255010958e+00 4.1968658698615338e+00 + -7.7240877357273687e+00 -4.3359253865264815e+00 4.4868837117650973e+00 + -7.8443057248879251e+00 -4.8750251987722644e+00 4.7503008518417928e+00 + -7.9406093935233306e+00 -5.3951059848001606e+00 4.9702605120219054e+00 + -8.0442481415619511e+00 -5.8608742326281220e+00 5.1452394983859069e+00 + id 12158 + loc 2.0881573855876923e-01 1.3039981946349144e-02 416 + blend 0.0000000000000000e+00 + interp 3.1547805935338025e-01:1.7609806319403751e-01:9.5933894985179768e-01:1.5893693549811450e-01:1.8382201453444709e+00:2.6970623369271401e-01:2.0293731150961842e+00:3.1547490457278671e-01:2.4042897073939145e+00:2.2663107146898198e-01:2.9931384844415758e+00:2.6377011581077403e-01:3.7710132024371861e+00 + CVs 20 + 2.6938868441355734e-02 2.4343167060275692e-01 -4.8276734158758505e-01 + -2.8927413182526229e-03 3.8567379340652885e-01 -8.3341482961353364e-01 + -3.5218485560280233e-02 4.9065863518606845e-01 -1.1583967645100370e+00 + -3.7259825532858115e-02 5.9202271592317635e-01 -1.5098206334540187e+00 + -1.8032557589242604e-03 6.8629756449963153e-01 -1.8816184670741101e+00 + 7.8333834045377637e-02 7.7037878604470889e-01 -2.2642189841444123e+00 + 2.0883197153539779e-01 8.4269914150705416e-01 -2.6446954930916071e+00 + 3.9010686365420866e-01 9.0345406022433006e-01 -3.0090369343233023e+00 + 6.1652311980415786e-01 9.5427287634288183e-01 -3.3451589588759281e+00 + 8.7867795856675102e-01 9.9768633316103450e-01 -3.6438222793557169e+00 + 1.1674885005916527e+00 1.0357294814448543e+00 -3.9021562139010513e+00 + 1.4824472338985037e+00 1.0649588781923744e+00 -4.1340323696803267e+00 + 1.8284729170512430e+00 1.0698468665608192e+00 -4.3729853726603860e+00 + 2.1867822124946565e+00 1.0288223113704913e+00 -4.6492577234921111e+00 + 2.5184858583324665e+00 9.3448072720240360e-01 -4.9627516758979491e+00 + 2.8052348109863683e+00 7.9004578499963563e-01 -5.3000228801319889e+00 + 3.0460783800846247e+00 5.9328588553497719e-01 -5.6563398638757310e+00 + 3.2343246943143593e+00 3.4315688691753765e-01 -6.0259875210732563e+00 + 3.3267456907731545e+00 2.1637212855167709e-01 -6.1904378708949608e+00 + id 12159 + loc 8.7001252174377441e-01 1.3851612806320190e-01 1085 + blend 0.0000000000000000e+00 + interp 5.2813060857852223e-01:3.8640481058601900e-01:5.0684704228107735e-01:5.2812532727243644e-01:8.9812183757707009e-01:3.4161701810009382e-01:1.6891199123435761e+00:2.8960819964552553e-01:2.7235089332862334e+00:2.9599786643517123e-01:3.3457921065559586e+00:3.1665795099798222e-01:3.9986811586562365e+00 + CVs 20 + 3.5254793567903747e-01 3.2961558095532090e-01 -1.5205681692180661e-01 + 6.7727428045012539e-01 6.5504958498796639e-01 -2.8536969462386341e-01 + 1.0200275850017828e+00 9.5896014191902124e-01 -3.9861697803858331e-01 + 1.4074782991707924e+00 1.2260368178526742e+00 -4.7510440209712890e-01 + 1.8424282430578962e+00 1.4367162103176476e+00 -4.9371059686753782e-01 + 2.3128442130258966e+00 1.5751641352612711e+00 -4.4277800249313060e-01 + 2.7956224446366971e+00 1.6363871950915130e+00 -3.2068221056182983e-01 + 3.2647029681255861e+00 1.6272597482618414e+00 -1.3382407312921785e-01 + 3.6965339390270255e+00 1.5621346201616757e+00 1.0116280337318451e-01 + 4.0767125376173734e+00 1.4606382895213184e+00 3.5658241338264812e-01 + 4.4047674889460771e+00 1.3417205088642483e+00 6.0589400042998598e-01 + 4.6910211192511984e+00 1.2153087723434728e+00 8.3698632546749929e-01 + 4.9509841004746873e+00 1.0789416076482710e+00 1.0523993299948446e+00 + 5.1970296758976255e+00 9.2820282806254606e-01 1.2523277739253729e+00 + 5.4325778987327498e+00 7.6993954651551810e-01 1.4242059026379783e+00 + 5.6574058470491302e+00 6.2080459324194959e-01 1.5578780785352531e+00 + 5.8660401675816551e+00 5.0464375342567491e-01 1.6637379794066323e+00 + 6.0859743087945244e+00 3.9516240435868022e-01 1.7447446693036390e+00 + 6.4894049446436153e+00 1.5649654055509665e-01 1.6874622667194665e+00 + id 12160 + loc 4.0097817778587341e-01 9.1571557521820068e-01 403 + blend 0.0000000000000000e+00 + interp 4.9140629559748789e-01:4.9140138153453194e-01:3.6725033944469476e-01:4.2231410476734682e-01:1.0077676587955178e+00:2.8236051961757347e-01:1.9267728379818081e+00:4.1201949456607956e-01:2.7842867147171964e+00:4.4882589205879614e-01:3.3607408440759965e+00:3.0853452354537164e-01:3.9755394558600723e+00 + CVs 20 + -2.5510545344778604e-02 7.7904168734186957e-02 -4.0613538335558218e-02 + -5.9244862114579924e-02 1.5108027243262667e-01 -9.5813692916067478e-02 + -1.0060301638194594e-01 2.2291586535923097e-01 -1.5771567792901717e-01 + -1.4828921930378963e-01 2.9180344442838824e-01 -2.2203351784355396e-01 + -2.0205676827017033e-01 3.5582374541093303e-01 -2.8789315577805785e-01 + -2.6107685899174782e-01 4.1466687309519179e-01 -3.5481057212092676e-01 + -3.2518540864569501e-01 4.7016919885607356e-01 -4.2184635277633276e-01 + -3.9534087872677404e-01 5.2511863483184595e-01 -4.8722981281230326e-01 + -4.7314050443778422e-01 5.8210066006488370e-01 -5.4906477743544613e-01 + -5.6029529505476539e-01 6.4331189772192432e-01 -6.0533551452711465e-01 + -6.5847192187420844e-01 7.1066536706307737e-01 -6.5374577898122332e-01 + -7.6884742430730491e-01 7.8539733877915130e-01 -6.9182612300783020e-01 + -8.9080313204453920e-01 8.6756488173388324e-01 -7.1763281598528150e-01 + -1.0220236676296393e+00 9.5623514224005013e-01 -7.3029188428410119e-01 + -1.1585489862291607e+00 1.0499452690920930e+00 -7.3028462130749039e-01 + -1.2939491796662339e+00 1.1472018045375147e+00 -7.1982062406432890e-01 + -1.4205095029197203e+00 1.2464734614809732e+00 -7.0227052411050961e-01 + -1.5362514715214570e+00 1.3457480572898060e+00 -6.7692158742728947e-01 + -1.5188689191671600e+00 1.4091535602962781e+00 -7.4551165371361328e-01 + id 12161 + loc 9.8037946224212646e-01 3.4158492088317871e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5053702666712897e-01:3.4781713000081721e-01:1.7214769790211415e-03:3.5037193302974173e-01:4.0692835936034999e-01:4.5053252129686233e-01:9.1037493469424480e-01:3.9442521930920310e-01:1.2884422992675244e+00:4.3481356343040867e-01:2.1526012087461606e+00:2.7333448697274010e-01:3.0364737883336193e+00 + CVs 20 + -2.6620098636906164e-01 1.7484075515175179e-01 1.9321903760965942e-01 + -5.0476562114370149e-01 3.7822331176492996e-01 3.6247062018260645e-01 + -7.2889880934650975e-01 5.8277173080688405e-01 5.2928607109970804e-01 + -9.5083895264494922e-01 7.8389212265498642e-01 7.1197210253488352e-01 + -1.1693364951687024e+00 9.8568441566284437e-01 9.1524811803053741e-01 + -1.3856652693835712e+00 1.1891051510846875e+00 1.1436665548596490e+00 + -1.6059224001343677e+00 1.3892198623498664e+00 1.4062916873986091e+00 + -1.8340118724289112e+00 1.5759350781295844e+00 1.7117166993182780e+00 + -2.0675591105111804e+00 1.7370820042975883e+00 2.0625813993976427e+00 + -2.3030295212347309e+00 1.8590595569830661e+00 2.4570332553416026e+00 + -2.5385078154234573e+00 1.9272876453071772e+00 2.8895273101257102e+00 + -2.7743353066389025e+00 1.9307676889069318e+00 3.3514304169788849e+00 + -3.0111487629711000e+00 1.8632993682499770e+00 3.8334714253058708e+00 + -3.2517410283309274e+00 1.7198057117350847e+00 4.3277783381021377e+00 + -3.5096483459346475e+00 1.4682486640861971e+00 4.8355792749251894e+00 + -3.8146004367042647e+00 9.6663702249456418e-01 5.3468757868385293e+00 + -4.1712683611075505e+00 -4.4421273759120528e-02 5.6336518490267027e+00 + -4.4486753060450015e+00 -1.1647919254854080e+00 5.3401745013540083e+00 + -4.6471656385640561e+00 -1.5253231499593713e+00 5.2854588370635707e+00 + id 12162 + loc 7.8461855649948120e-01 6.6555356979370117e-01 411 + blend 0.0000000000000000e+00 + interp 4.7470553443320268e-01:3.0354283513373786e-01:2.2175810482552716e-01:3.2764394116360235e-01:9.9970983962998128e-01:4.7470078737785837e-01:1.4966997837991503e+00:4.2421666948030445e-01:1.9875985173631951e+00:3.8613292629917301e-01:2.3008084414766774e+00:3.7030564984332304e-01:2.9849781467835150e+00:2.7003187126327755e-01:3.7633421458855261e+00 + CVs 20 + 7.8778998787869114e-01 2.8311178460125130e-01 -1.2529463418942308e-01 + 1.3520357754352847e+00 4.1917318884095128e-01 -2.2327503724925868e-01 + 1.8642155208441846e+00 4.8624754886358312e-01 -3.1896107391354783e-01 + 2.4028443409800020e+00 5.1962253218545196e-01 -4.2369561919079923e-01 + 2.9574961853976869e+00 5.1393652098826870e-01 -5.3516598528236359e-01 + 3.5151463514206647e+00 4.6920511971107703e-01 -6.5147950002664368e-01 + 4.0625262718065702e+00 3.9083819434608613e-01 -7.7181548995162008e-01 + 4.5897209050559686e+00 2.8516152646921999e-01 -8.9363660057241034e-01 + 5.0908283024387462e+00 1.5627128667538748e-01 -1.0129997088402787e+00 + 5.5608588930263334e+00 7.1785155071384388e-03 -1.1311021591300046e+00 + 5.9950999591208998e+00 -1.6226239000571763e-01 -1.2629359218782286e+00 + 6.3906341608527129e+00 -3.5816598373470798e-01 -1.4313308496524795e+00 + 6.7462225081780449e+00 -5.8609175217417220e-01 -1.6468740592828075e+00 + 7.0605712250855568e+00 -8.4270953192209141e-01 -1.9026245032347964e+00 + 7.3346826399914731e+00 -1.1184294106285970e+00 -2.1857586768806829e+00 + 7.5748725027368726e+00 -1.4102681659408316e+00 -2.4891147544673204e+00 + 7.7844615437497922e+00 -1.7172944101458167e+00 -2.8031993908422694e+00 + 7.9548847637985487e+00 -2.0129294267134328e+00 -3.1008540263676223e+00 + 7.9752664521235452e+00 -2.2253767876801955e+00 -3.3561050058634470e+00 + id 12163 + loc 2.3425799608230591e-01 3.5388472676277161e-01 406 + blend 0.0000000000000000e+00 + interp 5.0429600429614496e-01:3.3331538996443982e-01:7.2150809495272505e-01:3.5404853426394400e-01:1.0844149959014941e+00:3.6111645054106239e-01:2.0228446860323963e+00:4.3426896835018425e-01:2.9869829579742300e+00:5.0429096133610207e-01:3.4490275811406033e+00:3.4392956036173011e-01:3.9574188826653169e+00 + CVs 20 + 4.4421215640186709e-02 1.7866952366300609e-01 -1.2047262982851478e-01 + 9.7566655151764270e-02 3.0379373105634944e-01 -1.8082166191618812e-01 + 1.6092024277366729e-01 4.0215941270909950e-01 -2.3314020753473497e-01 + 2.3637617619928919e-01 4.8833142969765919e-01 -3.0415824232892053e-01 + 3.2296558458123265e-01 5.5887856194436392e-01 -3.9300277413043772e-01 + 4.1892094623255116e-01 6.1070243103498190e-01 -4.9809047859543021e-01 + 5.2192794253337405e-01 6.4138796626291983e-01 -6.1710827906962884e-01 + 6.2965827030789367e-01 6.4979066765293059e-01 -7.4719423005408403e-01 + 7.4032145088520829e-01 6.3651490723149218e-01 -8.8601363106986220e-01 + 8.5203220812822145e-01 6.0356138051264507e-01 -1.0330477860654816e+00 + 9.6135831360935342e-01 5.5355921999317204e-01 -1.1898223104239189e+00 + 1.0639667191635138e+00 4.8953638202711292e-01 -1.3590446989992215e+00 + 1.1572773221195021e+00 4.1510654831001109e-01 -1.5435502186154137e+00 + 1.2404624900702999e+00 3.3424208089793150e-01 -1.7456703489230885e+00 + 1.3112266621690984e+00 2.5061040346211860e-01 -1.9667655013305430e+00 + 1.3646327447431266e+00 1.6720292828743044e-01 -2.2061112636867239e+00 + 1.3965320342438998e+00 8.6112059279014330e-02 -2.4606858134408460e+00 + 1.4066281286362528e+00 8.7659725188908855e-03 -2.7277105751807480e+00 + 1.4275892990304830e+00 -5.4592799200075648e-02 -3.0232376706675890e+00 + id 12164 + loc 7.5108819874003530e-04 1.7974689602851868e-02 384 + blend 0.0000000000000000e+00 + interp 3.3866642704382405e-01:2.6122907130157852e-01:3.1947628529187422e-01:2.4888797348725947e-01:1.0397267163082695e+00:3.1013176419368832e-01:1.8710127681894406e+00:2.1373096872775268e-01:2.3192181766859368e+00:3.3866304037955364e-01:3.1279001850252368e+00:3.3735507740767362e-01:3.9816792395432472e+00 + CVs 20 + -4.5080972389535723e-01 2.3885495498366019e-01 -9.6614968580759109e-01 + -8.0022679767671834e-01 3.0738567758651986e-01 -1.5261120897146185e+00 + -1.1282399108422583e+00 3.1273788415195264e-01 -1.9910416037193550e+00 + -1.4580040173247792e+00 3.0647882151799299e-01 -2.4848737733796571e+00 + -1.7917300746182998e+00 2.7840580026364292e-01 -3.0179612231505288e+00 + -2.1319062148101375e+00 2.0082082939330670e-01 -3.5950594985597055e+00 + -2.4840735122856903e+00 3.7934136139290864e-02 -4.2091428602458976e+00 + -2.8522630555654080e+00 -2.4065672484304990e-01 -4.8381986003173036e+00 + -3.2219775041436103e+00 -6.5577137104764205e-01 -5.4443894038442098e+00 + -3.5713831575610619e+00 -1.2084120835577239e+00 -5.9724186272198452e+00 + -3.8983321583487172e+00 -1.8733387056818049e+00 -6.3561713538962907e+00 + -4.2035072461908705e+00 -2.5994401750293217e+00 -6.5602251180645128e+00 + -4.4827393031120746e+00 -3.3265879807019401e+00 -6.5916659414698326e+00 + -4.7354904616991575e+00 -3.9989859330053119e+00 -6.4834300966486431e+00 + -4.9659583484989591e+00 -4.5760427140786675e+00 -6.2784158712735767e+00 + -5.1718920637469985e+00 -5.0459455895811178e+00 -6.0217181544649634e+00 + -5.3515506910721129e+00 -5.4349528131145455e+00 -5.7536282165992532e+00 + -5.5207430944878624e+00 -5.7948507540852576e+00 -5.5070304204960232e+00 + -5.7871676155824918e+00 -6.2193110931169286e+00 -5.3695193194007249e+00 + id 12165 + loc 1.0547919571399689e-01 2.6819017529487610e-01 397 + blend 0.0000000000000000e+00 + interp 4.8255218728788324e-01:3.4823122851529759e-01:9.6083620953670401e-02:4.5359645785874231e-01:8.3276299849467372e-01:3.1998324680145546e-01:1.1966731633425420e+00:3.7922090403900433e-01:2.0554713899818049e+00:4.7403239674332742e-01:2.9858600293221924e+00:4.8254736176601037e-01:3.6233418132754158e+00 + CVs 20 + -2.5101145370215971e-01 3.0549812009248423e-01 -1.1260377239045813e+00 + -4.0943310673748956e-01 4.2087175747902972e-01 -1.8765562143093100e+00 + -5.1845520626769770e-01 4.7220553367947526e-01 -2.5297071689548618e+00 + -5.9632943144165362e-01 5.1875301284034614e-01 -3.2071991533266120e+00 + -6.5459822442020976e-01 5.5055338755104954e-01 -3.8968333824022823e+00 + -7.1310889753960949e-01 5.5449939216701161e-01 -4.5927773043238096e+00 + -7.9349197712333164e-01 5.1587378718108612e-01 -5.2901819764169487e+00 + -9.0977281921786868e-01 4.1759484667004887e-01 -5.9847703092911209e+00 + -1.0602693837159443e+00 2.4125336579849055e-01 -6.6713246434075320e+00 + -1.2269711232621379e+00 -2.6700655467438827e-02 -7.3398569207088000e+00 + -1.3909945147797469e+00 -3.8955911675817168e-01 -7.9710678894836695e+00 + -1.5425049886459394e+00 -8.3912586848358717e-01 -8.5417107144074844e+00 + -1.6729862928672119e+00 -1.3601274171971791e+00 -9.0385771517575719e+00 + -1.7717294322865309e+00 -1.9363882986829659e+00 -9.4611935282489394e+00 + -1.8336171238537036e+00 -2.5538254173140609e+00 -9.8140154357920721e+00 + -1.8645420212101946e+00 -3.2029122002354500e+00 -1.0099551835652207e+01 + -1.8690204645708763e+00 -3.8724146406812281e+00 -1.0305079649815276e+01 + -1.8430839812919997e+00 -4.5294743181499557e+00 -1.0413830373003840e+01 + -1.7716394297025424e+00 -4.9709113306311190e+00 -1.0425836293751358e+01 + id 12166 + loc 8.5797935724258423e-01 8.9485359191894531e-01 261 + blend 0.0000000000000000e+00 + interp 2.8106885227460010e+00:4.5945723365294294e-01:7.3013645693845053e-01:3.8958551936062530e-01:1.1898839179533018e+00:3.1229529973197101e-01:2.0104951197907606e+00:2.9424658614158161e-01:2.5301333335791965e+00:2.4434854948824123e+00:2.9089552941329604e+00:2.8106785227460009e+00:2.9384390346862306e+00 + CVs 20 + -7.7077739534462786e-01 3.8611379669165447e-01 -5.2459177743085772e-01 + -1.3006988632091094e+00 6.2388269730219248e-01 -8.4956771033777889e-01 + -1.7842313199879734e+00 7.5556621590700379e-01 -1.0622736683683693e+00 + -2.2713227169355474e+00 8.1348610345748296e-01 -1.2048714693042692e+00 + -2.7383357509218800e+00 8.4368550244830054e-01 -1.2939360581522588e+00 + -3.2009524646205540e+00 8.8206959478838476e-01 -1.3572504873572977e+00 + -3.7000099648339804e+00 9.1265409475206893e-01 -1.4416277046205206e+00 + -4.2600138146654469e+00 8.9698210936285694e-01 -1.6052212796545122e+00 + -4.8681332073358501e+00 8.1635809313726126e-01 -1.9058875221177547e+00 + -5.4776026822728161e+00 6.6055864263232489e-01 -2.3767881260881247e+00 + -6.0314317842851315e+00 4.0691734044684358e-01 -2.9788129684751996e+00 + -6.4767726521447297e+00 2.5246528988578376e-02 -3.6133955617041957e+00 + -6.7694874929794517e+00 -5.2276903095305460e-01 -4.1680643872111016e+00 + -6.8732537542305838e+00 -1.2329219027065861e+00 -4.5590822125665600e+00 + -6.7724215471034483e+00 -2.0132799816304319e+00 -4.7126277953881575e+00 + -6.5740138327465667e+00 -2.7291184752318784e+00 -4.5670246991445378e+00 + -6.5536556640722958e+00 -3.2366266124239562e+00 -4.0933565385651738e+00 + -6.8210152687691066e+00 -3.4218260804708649e+00 -3.4576841717232218e+00 + -6.9321399535288677e+00 -4.1354841934579429e+00 -3.1410147511883983e+00 + id 12167 + loc 4.6843352913856506e-01 9.2769098281860352e-01 1050 + blend 0.0000000000000000e+00 + interp 1.9679181232879532e+00:1.9679081232879532e+00:2.8700398930491122e-01:1.4143028926139485e+00:3.5783290374809973e-01:7.6026870872861241e-01:5.8079838794889693e-01:4.2952137922652539e-01:7.4469033772724225e-01:2.9692339038999715e-01:1.0662941988967702e+00:3.4354473952858738e-01:1.6048324717494140e+00:4.9217148711214692e-01:2.2352629869844316e+00:9.0007242836140400e-01:2.3270781459437253e+00:1.5475168832927018e+00:2.3856314984463074e+00:1.7958349828893798e+00:2.3990523275443620e+00 + CVs 20 + -8.3690671338672515e-02 4.7787277689364338e-01 -8.2738620324217682e-01 + -5.5629274139020107e-02 9.3514690233321895e-01 -1.4880820039342035e+00 + 1.1221408665687832e-01 1.3947127184936057e+00 -2.0178786870201453e+00 + 4.2728229491693476e-01 1.8418136679590424e+00 -2.4116085959359594e+00 + 8.6824178014821762e-01 2.2336201104839986e+00 -2.6353703472782777e+00 + 1.3738001012073369e+00 2.5319023761354877e+00 -2.6949552624530533e+00 + 1.8800663929441246e+00 2.7272984237408298e+00 -2.6263968593568014e+00 + 2.3546643944500096e+00 2.8345832740579930e+00 -2.4792311206381381e+00 + 2.7920422572867780e+00 2.8658241785361147e+00 -2.3155766198124894e+00 + 3.2036815658206210e+00 2.8466254299062137e+00 -2.1899135981926423e+00 + 3.6223962447049742e+00 2.7639693195347537e+00 -2.1090450228149349e+00 + 4.0308563205169721e+00 2.5383585100954731e+00 -2.0277797320840589e+00 + 4.3598824660806397e+00 2.1350755737057749e+00 -1.9044316233037604e+00 + 4.5105271152058410e+00 1.5915730656668834e+00 -1.6822972208196494e+00 + 4.3962505596326995e+00 1.0242833027951970e+00 -1.3416214311662529e+00 + 4.0347289828072448e+00 5.6089105685705176e-01 -9.2641656771216241e-01 + 3.5652626689156208e+00 1.6924483222174053e-01 -4.0149028175542090e-01 + 2.8665156480765313e+00 -9.3008892904130613e-02 3.9721036284769284e-01 + 2.5463466430943451e+00 2.0750320003382758e-01 3.5777639851830717e-02 + id 12168 + loc 6.0430150479078293e-02 8.4595417976379395e-01 1084 + blend 0.0000000000000000e+00 + interp 6.1895736475949970e-01:2.9113335604958174e-01:7.4018383651598685e-01:6.1895117518585208e-01:1.9221616448164007e+00:3.1498476410581344e-01:2.2249794564705767e+00:3.2681435191500369e-01:2.9908822836753872e+00:3.5033451171826657e-01:3.4115160846907893e+00:4.8170563705323188e-01:3.9978013321117740e+00 + CVs 20 + -2.1792937961491621e-01 2.9727099751533803e-01 4.7148554076757904e-01 + -4.2959792369173733e-01 5.0204837563933069e-01 8.0971598162026304e-01 + -6.2788281518778999e-01 6.7109231802190805e-01 1.1132839200878597e+00 + -7.9881788906425988e-01 8.2420743988959067e-01 1.4223577124024265e+00 + -9.4430926575487051e-01 9.6303714770268312e-01 1.7317269662108177e+00 + -1.0710214862263352e+00 1.0929294906309288e+00 2.0414050986852628e+00 + -1.1925060925266746e+00 1.2235254358938590e+00 2.3647419968044279e+00 + -1.3444403665878371e+00 1.3814365190238411e+00 2.7365168104285029e+00 + -1.6298602793364367e+00 1.6198036799115525e+00 3.1348649705975791e+00 + -2.0708282652150198e+00 1.8998348679151138e+00 3.3441263459514712e+00 + -2.4668167668480896e+00 2.1434278875080408e+00 3.3021537135571779e+00 + -2.7262904340477983e+00 2.3891422146972934e+00 3.1130544856062543e+00 + -2.8868918701659636e+00 2.5536500880821329e+00 2.8106724299586165e+00 + -3.0162169102663157e+00 2.4216956309803708e+00 2.4923878601196892e+00 + -3.1252335308504735e+00 1.9655077639953404e+00 2.2375491773754907e+00 + -3.1484470507389086e+00 1.3238275863111995e+00 1.9872877306201022e+00 + -3.0402162434500979e+00 6.6717316644281610e-01 1.6585974035309710e+00 + -2.8464781078614063e+00 1.8658919124120410e-01 1.2216949156517001e+00 + -2.7458648103765899e+00 1.9241498642295229e-01 7.9257034681691696e-01 + id 12169 + loc 7.3957329988479614e-01 8.4389907121658325e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4248736300840924e-01:3.2803950325913916e-01:6.1862153501187622e-01:3.5858411230047688e-01:1.6105879596148216e+00:2.8793253374597799e-01:2.0820682770959196e+00:3.3577038984983715e-01:2.8819320165553552e+00:4.2082229315523562e-01:3.2323795532450257e+00:4.4248293813477918e-01:3.9470802180412483e+00 + CVs 20 + 2.5589061733646312e-01 2.7142811118929244e-01 -2.4538325802412697e-01 + 5.0929613581220279e-01 5.4869189036080790e-01 -4.5235168054328034e-01 + 7.5348329881781073e-01 8.1876035705019856e-01 -6.5128905662685443e-01 + 9.8678176400876105e-01 1.0767771289590529e+00 -8.5546055231520424e-01 + 1.2066288801079617e+00 1.3132348256551380e+00 -1.0741915086603548e+00 + 1.4110321897012748e+00 1.5167907421671178e+00 -1.3279081624545899e+00 + 1.6025248542890158e+00 1.6834559646871792e+00 -1.6389711073007258e+00 + 1.7844999398778254e+00 1.8126615972858744e+00 -2.0200902059240171e+00 + 1.9571337419981762e+00 1.9005072814273465e+00 -2.4692450421263938e+00 + 2.1217313482163322e+00 1.9422381735240775e+00 -2.9724844836285516e+00 + 2.2813375900150072e+00 1.9315017164905699e+00 -3.5109039231401824e+00 + 2.4292281691555502e+00 1.8539222927331069e+00 -4.0657516283359483e+00 + 2.5418093772964632e+00 1.6986432545017740e+00 -4.6167568142626187e+00 + 2.5743534468314033e+00 1.4895635251637089e+00 -5.1353786156048171e+00 + 2.4801149207713684e+00 1.3004182315391035e+00 -5.5828351072412268e+00 + 2.2657768055110230e+00 1.2106153343687120e+00 -5.9181175197326956e+00 + 2.0044415205661319e+00 1.2536884919109894e+00 -6.1157013040206039e+00 + 1.7837967348129093e+00 1.3843562290182230e+00 -6.1983308512496516e+00 + 1.5394476049022030e+00 1.3784173536763706e+00 -6.3599475898655164e+00 + id 12170 + loc 6.3188987970352173e-01 9.8084218800067902e-02 1080 + blend 0.0000000000000000e+00 + interp 3.4483846057731060e-01:3.4483501219270485e-01:1.6311499183565559e-02:3.4232772435468850e-01:7.0659253246758191e-01:2.3982940192912730e-01:1.4336041336052130e+00:2.8204980959251491e-01:2.7173105945585236e+00:3.3341560510034068e-01:3.1495280439356748e+00 + CVs 20 + -5.9849296856365891e-02 4.5920781279110684e-01 -4.7750709814618458e-01 + -1.2027193159603072e-01 8.2119649897360980e-01 -7.7713033729698500e-01 + -1.7882940990611920e-01 1.1456431332183434e+00 -1.0130608908991561e+00 + -2.4139243425319806e-01 1.4714332915954917e+00 -1.2367351003902498e+00 + -3.1503629405362532e-01 1.7958451762459067e+00 -1.4421814076929662e+00 + -4.0962535838139269e-01 2.1168341922482705e+00 -1.6248174871202181e+00 + -5.3938723299523506e-01 2.4333123076088796e+00 -1.7794301898762670e+00 + -7.2628757003748712e-01 2.7451579609344519e+00 -1.8979880909258691e+00 + -1.0042260515235399e+00 3.0456055243094355e+00 -1.9622223099605549e+00 + -1.3945562559957247e+00 3.2938346187606262e+00 -1.9352981272949861e+00 + -1.8395403207278807e+00 3.4214449224404837e+00 -1.7987065733638141e+00 + -2.2404640208409168e+00 3.4180418182704178e+00 -1.5948412582798355e+00 + -2.5606455629769038e+00 3.3272125011242233e+00 -1.3737064402379544e+00 + -2.8091921296165907e+00 3.1827296868905384e+00 -1.1565829592846568e+00 + -3.0016000713004400e+00 2.9960580836323309e+00 -9.4463166026404211e-01 + -3.1556652258156568e+00 2.7552158546456749e+00 -7.1765310628662338e-01 + -3.2875380939546881e+00 2.4249549413192271e+00 -4.6480503791953209e-01 + -3.3845042068200746e+00 2.0114493747644593e+00 -2.8475076618277323e-01 + -3.3540510123015808e+00 1.7517072244146648e+00 -3.9527618016328026e-01 + id 12171 + loc 5.7600397616624832e-02 8.4595417976379395e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3143062083019174e-01:4.1252779373198417e-01:2.9930813568459291e-01:1.8446659868124873e-01:9.4938311148218513e-01:2.5971474888608759e-01:2.1957292486132074e+00:2.8601092101900016e-01:2.9985300159906476e+00:3.3047123886641522e-01:3.4105340024313575e+00:4.3142630652398345e-01:3.9865379567318504e+00 + CVs 20 + -1.2380084307463399e-01 4.3506169819305229e-01 4.5491200855692993e-01 + -2.8705354054348486e-01 8.0115040916360658e-01 7.7583624474842849e-01 + -4.8521754664271322e-01 1.1468935081166647e+00 1.0425277152351304e+00 + -7.2223591039198975e-01 1.4884887407319340e+00 1.2758951610331746e+00 + -1.0031643112850368e+00 1.8063539345167139e+00 1.4479912519526026e+00 + -1.3231227176437499e+00 2.0742419876903724e+00 1.5314161932473562e+00 + -1.6622163865387773e+00 2.2590364260957316e+00 1.5018769819480764e+00 + -1.9782784199533969e+00 2.3257651161410644e+00 1.3498420647121876e+00 + -2.2145376551850049e+00 2.2551782009031460e+00 1.1057202167197784e+00 + -2.3546072003333971e+00 2.0736112179838369e+00 8.4595474726658049e-01 + -2.4461651079764706e+00 1.8260858721133255e+00 6.2244942523753088e-01 + -2.5273307598741446e+00 1.5279826938255412e+00 4.4238310161413524e-01 + -2.6116896282304873e+00 1.1800854779877132e+00 3.1256638150973953e-01 + -2.7149316871110312e+00 7.8310103573629719e-01 2.5647751265608004e-01 + -2.8523688215198320e+00 3.5045591803285797e-01 3.0986901619188806e-01 + -3.0451620845549465e+00 -6.8430575981529074e-02 4.7198518850828397e-01 + -3.3352443439184607e+00 -4.1591212234490893e-01 7.1537369871993106e-01 + -3.7308428486965997e+00 -6.3687210767072844e-01 1.0074449413235729e+00 + -4.0347306668215301e+00 -9.0006768155980044e-01 1.1317577768466640e+00 + id 12172 + loc 6.2761414051055908e-01 6.8191811442375183e-02 411 + blend 0.0000000000000000e+00 + interp 5.6095675202334949e-01:3.0980031387165408e-01:2.7454202830260022e-01:5.1060594606184884e-01:1.0020586890091658e+00:4.5867660355818440e-01:1.2447451131765119e+00:2.9345529799385550e-01:1.7834979790082053e+00:4.8928481525284212e-01:2.0153902443857823e+00:5.6095114245582933e-01:2.7589752301266128e+00:3.7096533229932321e-01:3.0354611253290309e+00:3.7714119030229942e-01:3.7944304967539844e+00 + CVs 20 + -5.1916847872663974e-01 8.9492283427368258e-02 1.7288128548104326e-01 + -9.2959686287215249e-01 1.0612307562890716e-01 3.5564923618062133e-01 + -1.3388822749132039e+00 9.6135000233554369e-02 5.3707582109974850e-01 + -1.7861881642237596e+00 7.9870771589821477e-02 7.0222602260761635e-01 + -2.2646762094278610e+00 5.2471491558262806e-02 8.4084986063763278e-01 + -2.7641485068392377e+00 9.6044732205486927e-03 9.4707618683694372e-01 + -3.2712503305247203e+00 -5.3485738946299488e-02 1.0190518182267343e+00 + -3.7701063077261638e+00 -1.4552585118982053e-01 1.0572773193959988e+00 + -4.2435225260248099e+00 -2.7772153843957814e-01 1.0662482000081133e+00 + -4.6721026332170439e+00 -4.5854850393125246e-01 1.0575874671904204e+00 + -5.0383215491875797e+00 -6.9035202109066129e-01 1.0450908956329206e+00 + -5.3390706585675920e+00 -9.6787318204062389e-01 1.0343330720637134e+00 + -5.5863288602963124e+00 -1.2811883952585501e+00 1.0215745548646307e+00 + -5.7911559475838841e+00 -1.6202879066009919e+00 1.0034675832075695e+00 + -5.9562941467075952e+00 -1.9763127649205661e+00 9.7896698685326766e-01 + -6.0788953677711905e+00 -2.3411408113148786e+00 9.4227246184603297e-01 + -6.1579775179928316e+00 -2.7067525351701227e+00 8.8434484332580698e-01 + -6.2049401188128757e+00 -3.0689405424895635e+00 8.0950890838805112e-01 + -6.3369430060976786e+00 -3.4468902096366931e+00 7.4043670740590328e-01 + id 12173 + loc 9.1868990659713745e-01 9.1826999187469482e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0187865874786619e-01:5.0187363996127876e-01:6.2328768574841042e-02:3.8960634909862218e-01:7.4701800236290539e-01:3.9697459229317533e-01:1.4624775075229510e+00:4.8623796543005515e-01:2.0021890935826998e+00:3.8994245130198169e-01:2.4307510899784273e+00:2.8657556763759962e-01:3.0264051988974554e+00:3.4177885338510477e-01:3.7632192153356008e+00 + CVs 20 + 9.1204874307926398e-02 2.4460624626209790e-01 -6.0240363958514204e-02 + 1.9793892917069392e-01 5.0769237985271709e-01 -1.2083509613596136e-01 + 3.2299670571894828e-01 7.8229508311417184e-01 -2.0503936310306958e-01 + 4.6404766385053609e-01 1.0529082996576982e+00 -3.3274166521379556e-01 + 6.1889811201265266e-01 1.3068706434575539e+00 -5.1365598472788987e-01 + 7.8009198600511176e-01 1.5274838833299444e+00 -7.5347915898967988e-01 + 9.3496973369904890e-01 1.6963569829599017e+00 -1.0518130460146016e+00 + 1.0683595992598021e+00 1.7961878534889855e+00 -1.3994333059335704e+00 + 1.1656470687048424e+00 1.8135909431123629e+00 -1.7771619068108095e+00 + 1.2173311507158560e+00 1.7425827399301230e+00 -2.1592923851193091e+00 + 1.2231154235512720e+00 1.5877791428084997e+00 -2.5202844147438421e+00 + 1.1924489633364848e+00 1.3622280347443010e+00 -2.8413366031282581e+00 + 1.1446664442719892e+00 1.0824057653598613e+00 -3.1153462830443517e+00 + 1.1018597145433768e+00 7.6705349665801981e-01 -3.3411440335690221e+00 + 1.0755193935980301e+00 4.3418979289078274e-01 -3.5167039032605709e+00 + 1.0645829053804943e+00 9.4851989151497840e-02 -3.6474457332710459e+00 + 1.0638513887469094e+00 -2.4918843340241925e-01 -3.7769058945298504e+00 + 1.0772639829166022e+00 -5.9429038189133809e-01 -3.9721259296429210e+00 + 1.0895652811265024e+00 -8.8883947269629049e-01 -4.1349998326493020e+00 + id 12174 + loc 8.9474213123321533e-01 3.4822189807891846e-01 1075 + blend 0.0000000000000000e+00 + interp 4.1079500209333702e-01:3.9207705656969366e-01:6.8684966222405741e-01:3.0058539166921311e-01:1.0693793969178387e+00:2.8577418726979187e-01:2.0262255904016060e+00:4.1079089414331610e-01:2.9924797553842417e+00:2.7991687185377634e-01:3.9973753780330168e+00 + CVs 20 + -1.3532088270937140e-01 1.7096767302606336e-01 2.0207499665977055e-01 + -2.4315314374697375e-01 3.7333793412048677e-01 4.0724998581299959e-01 + -3.3874447261765894e-01 5.8679963690920256e-01 6.0228272000511585e-01 + -4.3483857712233082e-01 7.8877887239011435e-01 7.7975006695094318e-01 + -5.3833603013660358e-01 9.5670281264493129e-01 9.4066595999842240e-01 + -6.4831553187934310e-01 1.0717530790561467e+00 1.0840889436592271e+00 + -7.4488997066336160e-01 1.1272867816584164e+00 1.2026967265705661e+00 + -8.1062978209080205e-01 1.1319749357536883e+00 1.3018777479200818e+00 + -8.6783773394543440e-01 1.0829867744252997e+00 1.3980830598920262e+00 + -9.5268013521857930e-01 9.5534700315043330e-01 1.4746473721609099e+00 + -1.0583938562470925e+00 7.5246549365042248e-01 1.5003815229645321e+00 + -1.1460695241331851e+00 5.1646239761298940e-01 1.4784329619700889e+00 + -1.1871606042880354e+00 2.8417339489243987e-01 1.4293889691158168e+00 + -1.1894141169797277e+00 3.2286408134738598e-02 1.3231525584940493e+00 + -1.1860697519557744e+00 -3.1231166614257361e-01 1.0815903416565684e+00 + -1.2815664635858246e+00 -8.0698938777492679e-01 6.7670614289521791e-01 + -1.7107523491297882e+00 -1.4353515811676114e+00 1.1548161025616960e-01 + -2.6625492375125184e+00 -1.9098919314462739e+00 -4.3829131164790563e-01 + -2.9452415607872586e+00 -2.0489907305628647e+00 -5.2978768777799812e-01 + id 12175 + loc 2.1377135813236237e-01 9.7787284851074219e-01 1050 + blend 0.0000000000000000e+00 + interp 5.1712012286278741e-01:4.3961559572786135e-01:3.0485317593712380e-01:9.0035513752998036e-02:1.2943395200997889e+00:2.6388057356006062e-01:2.4085874711708843e+00:3.7212775290544792e-01:2.9930642754637669e+00:3.6979836095379670e-01:3.4792582083971166e+00:5.1711495166155885e-01:3.9943976764780458e+00 + CVs 20 + 5.4828616040669131e-02 4.5623901932731870e-01 -9.3500451459698963e-01 + 2.4573888817392558e-01 9.2045308625499866e-01 -1.6912272441852010e+00 + 5.8455198665125863e-01 1.4006506708004465e+00 -2.2478293370243705e+00 + 1.0569930570622714e+00 1.8538995222848751e+00 -2.5828854240953882e+00 + 1.6106705402939738e+00 2.2127910868975600e+00 -2.7068719284667853e+00 + 2.1801022170182645e+00 2.4245975815237317e+00 -2.6867256672911166e+00 + 2.7080710153336107e+00 2.4670063323587192e+00 -2.6080001732505287e+00 + 3.1559293005792624e+00 2.3620148678869826e+00 -2.5435525719284815e+00 + 3.5302586957807223e+00 2.1543971170937191e+00 -2.5166061019413251e+00 + 3.8653040905216680e+00 1.8519718671317720e+00 -2.5068607335078736e+00 + 4.1676052917004318e+00 1.4121438952174923e+00 -2.4607757694029111e+00 + 4.3730781166815564e+00 7.9569496148433816e-01 -2.2923130558742320e+00 + 4.3630379099215029e+00 5.6668194171438813e-02 -1.9209913793419562e+00 + 4.0484177951738216e+00 -6.2967765481205262e-01 -1.3296690820610548e+00 + 3.4483793872008954e+00 -1.0587681354038048e+00 -5.9880582236581670e-01 + 2.6881991779031331e+00 -1.1148737217055973e+00 1.3030280604718925e-01 + 1.8700528837848296e+00 -7.8255996871730626e-01 7.4694288983114610e-01 + 1.0266411670105453e+00 2.2630243488089841e-02 1.0315489822013126e+00 + 8.2986426455161011e-01 5.0000525006007179e-01 8.9163520558879039e-01 + id 12176 + loc 3.6798921227455139e-01 6.7107272148132324e-01 1074 + blend 0.0000000000000000e+00 + interp 4.9946130692927465e-01:3.0792245667082585e-01:5.0882433622980572e-01:4.8633544251021343e-01:1.0775164494654763e+00:2.8598728975303750e-01:1.9945052693119831e+00:4.9945631231620541e-01:2.7063530852813669e+00:2.8034269633797260e-01:3.2164738811818578e+00:2.9366283681783112e-01:3.9846967891763949e+00 + CVs 20 + 3.8070923594493128e-02 3.7099096420607913e-01 -1.7877412193250189e-01 + 1.0043779902943190e-01 7.5902735727891246e-01 -3.4564314256239087e-01 + 1.9006175438737594e-01 1.1640131180847757e+00 -5.0369006110415704e-01 + 3.1673388561439614e-01 1.5864497060088634e+00 -6.5181353358770011e-01 + 5.0201094161862403e-01 2.0377155771242479e+00 -8.0150835831329903e-01 + 7.6440667761570258e-01 2.5216514326331136e+00 -1.0151345015288669e+00 + 1.0962014416031698e+00 2.9940100074521725e+00 -1.3976265326761221e+00 + 1.4561600664268037e+00 3.3352033049718925e+00 -2.0284046207607513e+00 + 1.7642294169162076e+00 3.3740335723815695e+00 -2.8441140721761440e+00 + 1.9659753064921452e+00 3.0622279553580976e+00 -3.6379048577494921e+00 + 2.0834213400433894e+00 2.5114224266804470e+00 -4.2480945820742413e+00 + 2.1805182942987789e+00 1.8981739688074997e+00 -4.6193535895583882e+00 + 2.2989548829888644e+00 1.3724406404753045e+00 -4.8058510270262857e+00 + 2.4202220002605128e+00 9.9883419624799552e-01 -4.9150482143573617e+00 + 2.5088365551240694e+00 7.7076126891095031e-01 -5.0292554556409170e+00 + 2.5479748190273743e+00 6.6342328355740909e-01 -5.1644514785414888e+00 + 2.5402184840769944e+00 6.3634810464222191e-01 -5.3084175060515335e+00 + 2.5198703065141186e+00 6.4795848122050070e-01 -5.5496866859223770e+00 + 2.4568538665621587e+00 7.1381983225661616e-01 -5.8900302654965655e+00 + id 12177 + loc 4.4711515307426453e-01 3.9815816283226013e-01 372 + blend 0.0000000000000000e+00 + interp 4.5428211829449744e-01:3.6889029648732341e-01:3.9854416606187582e-01:3.1084985753756017e-01:1.0072413924542214e+00:2.5275842255738229e-01:1.7838962529020552e+00:4.5427757547331449e-01:2.1405836244767773e+00:4.1768364326205587e-01:2.8680008085686608e+00:2.6986963591120150e-01:3.2405955137730604e+00:4.2122276570726924e-01:3.8443943972002250e+00 + CVs 20 + -1.5888417143975406e-01 5.6639349690434626e-01 4.7238699492733882e-01 + -2.8306722924609862e-01 1.0637749858322649e+00 8.8851190016232628e-01 + -3.9025268692870380e-01 1.4980765105302793e+00 1.2771407450476682e+00 + -4.8760439429957875e-01 1.8732224153016694e+00 1.6337563666385377e+00 + -6.2318904144580478e-01 2.2390957696764957e+00 1.9397969213749273e+00 + -8.9190236825068059e-01 2.6378060955408693e+00 2.0802562027403892e+00 + -1.2599578037141255e+00 2.9768412497394858e+00 1.9466194094150904e+00 + -1.6242571388610554e+00 3.1638707291705996e+00 1.5603150880512076e+00 + -1.9251953118202922e+00 3.1763934440852744e+00 9.8752427355248473e-01 + -2.1398930514825247e+00 3.0056064475544915e+00 2.9912561835487894e-01 + -2.2650828584469149e+00 2.6474345509300012e+00 -3.9707410543989741e-01 + -2.3155837518786799e+00 2.1541109242814143e+00 -9.7398522943191090e-01 + -2.2991558826237903e+00 1.6341867754634580e+00 -1.3724723609795688e+00 + -2.2050764245555050e+00 1.1796916645364823e+00 -1.5619354519927717e+00 + -2.0136590071370590e+00 7.7051124363016443e-01 -1.5982719648748633e+00 + -1.8434188712499338e+00 5.0215795269192398e-01 -1.8104285485540288e+00 + -1.8247122662514035e+00 5.0004331499794097e-01 -2.1863293944889972e+00 + -1.9824477625466579e+00 7.7633129921659805e-01 -2.5972391658659890e+00 + -2.4719972094390155e+00 1.4781105072929017e+00 -3.0346464685676056e+00 + id 12178 + loc 3.6772435903549194e-01 4.7111847996711731e-01 397 + blend 0.0000000000000000e+00 + interp 1.5301358460914523e+00:3.0273435842543245e-01:9.9699535058029976e-01:4.1462520046483076e-01:1.5063866843538054e+00:7.3727783461955021e-01:1.9781440671270345e+00:1.0625938805807260e+00:1.9796976058560691e+00:2.9368095760536711e-01:2.0009687707379347e+00:2.8654943172046066e-01:3.8909063857325257e+00:1.5301258460914522e+00:3.9931130666782879e+00 + CVs 20 + -3.2888003365225649e-01 3.4655714286567646e-01 -1.1846447116247936e+00 + -6.1925809922219921e-01 4.7561186362305852e-01 -1.9353560198419077e+00 + -9.1437997895360279e-01 5.1745444727129830e-01 -2.5920181869463361e+00 + -1.2275680599549936e+00 5.3717400147433347e-01 -3.3061585971472573e+00 + -1.5434115498426269e+00 5.2027489760754997e-01 -4.0626457847603072e+00 + -1.8442011947749810e+00 4.5186233679134336e-01 -4.8382902516217188e+00 + -2.1177284387231161e+00 3.1487191768448264e-01 -5.6158742547680482e+00 + -2.3571303666901531e+00 8.1062755194121316e-02 -6.3924257948508085e+00 + -2.5532442197889038e+00 -2.8105992750539166e-01 -7.1508071991675202e+00 + -2.6981267815595102e+00 -7.8608613491888768e-01 -7.8465185630713838e+00 + -2.7945236596739362e+00 -1.4188263134647676e+00 -8.4240477536593694e+00 + -2.8539120033592926e+00 -2.1376072452928998e+00 -8.8446833168481636e+00 + -2.8879878822118421e+00 -2.8899971053235984e+00 -9.1012034463223408e+00 + -2.9083385273533668e+00 -3.6264667382962061e+00 -9.2098910528229005e+00 + -2.9272902538211163e+00 -4.3080111900743034e+00 -9.1977646957788668e+00 + -2.9485237274217937e+00 -4.9122061566553779e+00 -9.0941244338180116e+00 + -2.9608081148129468e+00 -5.4314805466971947e+00 -8.9258592372424541e+00 + -2.9491116190293436e+00 -5.8656374299004712e+00 -8.7205422969905495e+00 + -2.9320298674701410e+00 -6.2438709659330964e+00 -8.5857785691442974e+00 + id 12179 + loc 7.4074518680572510e-01 6.1856788396835327e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6546440695443558e-01:3.0905656211538557e-01:3.2554374761227933e-01:3.1067460770982464e-01:1.0399125258079687e+00:4.6545975231036607e-01:1.9999116229162242e+00:4.0357394394649387e-01:2.7745091936867849e+00:3.3102112551915513e-01:3.5343535802061248e+00 + CVs 20 + -2.6827498217469326e-03 3.5595945801183759e-01 1.7229704690384220e-01 + 4.4088541355793875e-02 6.3048290528153883e-01 2.0760515942116234e-01 + 9.0806791328343933e-02 8.9689900311479231e-01 2.1889987275929085e-01 + 1.2560650033928161e-01 1.1639042331792973e+00 2.2895953915149347e-01 + 1.4563802873554663e-01 1.4278407601642709e+00 2.3512509047767027e-01 + 1.4548019063564344e-01 1.6859968248211303e+00 2.3485821820436348e-01 + 1.1753828401561683e-01 1.9377744316054351e+00 2.2694402321662399e-01 + 5.2159924281480363e-02 2.1837263477308708e+00 2.1180825031685158e-01 + -6.0313430152435801e-02 2.4202749118061542e+00 1.8817930187014653e-01 + -2.2665763199480982e-01 2.6368267261587279e+00 1.5092698057027643e-01 + -4.4535347646570567e-01 2.8166491827828959e+00 9.2684543871339953e-02 + -6.9972063758774672e-01 2.9436985414928225e+00 9.9689480734552749e-03 + -9.6482296918439492e-01 3.0138753699732934e+00 -9.1013514822557262e-02 + -1.2209049780339436e+00 3.0363360726489361e+00 -1.9611545564348698e-01 + -1.4608789721742930e+00 3.0240832933508419e+00 -2.9058137450856591e-01 + -1.6861620130532797e+00 2.9844968666997320e+00 -3.6573062838550263e-01 + -1.8897219775880847e+00 2.9251488925715736e+00 -4.1551547711410608e-01 + -2.0515391870123314e+00 2.8627393092803697e+00 -4.3130805947889228e-01 + -2.2074749950935306e+00 2.7843049391696799e+00 -4.3051209707399907e-01 + id 12180 + loc 9.4945991039276123e-01 1.3126407563686371e-01 403 + blend 0.0000000000000000e+00 + interp 4.8514924121795006e-01:4.8514438972553792e-01:1.0662396660234053e-02:2.1860773343298689e-01:9.9999972924022995e-01:2.9473440304022586e-01:2.0530316080742619e+00:3.9632057816008892e-01:2.7761698947364195e+00:2.8014025025168787e-01:3.6437614394276370e+00 + CVs 20 + 1.7504108755043432e-01 1.0259974152082060e-01 6.2960457362946823e-02 + 3.2136581911076967e-01 2.4167191074617789e-01 1.3376223391110706e-01 + 4.7558743498399375e-01 3.6669654005685587e-01 1.8645289303657561e-01 + 6.3842335189035737e-01 4.7714980711760296e-01 2.2321839819717620e-01 + 8.0866489645465689e-01 5.6736549866824515e-01 2.4134848393612970e-01 + 9.8387837566066594e-01 6.3135420051548652e-01 2.3861599371923314e-01 + 1.1594227178503769e+00 6.6376227182833081e-01 2.1262781776759587e-01 + 1.3276898353767985e+00 6.5902425096356776e-01 1.5913823366776572e-01 + 1.4768701803724631e+00 6.1472854438108826e-01 7.3772115779299402e-02 + 1.5931674238855464e+00 5.3599393307513243e-01 -4.3466428427629641e-02 + 1.6672514554118636e+00 4.3305116397744020e-01 -1.8440501877102741e-01 + 1.6959224848729162e+00 3.1347804873235374e-01 -3.3667392286088876e-01 + 1.6789907277455549e+00 1.7970959499361316e-01 -4.8787148505883138e-01 + 1.6180020938705673e+00 3.1602901705557795e-02 -6.2582263044303743e-01 + 1.5168057286725689e+00 -1.3190744415069378e-01 -7.3792643050356421e-01 + 1.3809866854219157e+00 -3.1255428521615425e-01 -8.1096812352109482e-01 + 1.2134404807887709e+00 -5.1053403736877234e-01 -8.3135082832451102e-01 + 1.0145171661902286e+00 -7.2044224171914839e-01 -7.8411904793051102e-01 + 1.0601987629300873e+00 -9.3962893048922280e-01 -7.4740345640185324e-01 + id 12181 + loc 8.6448627710342407e-01 8.8648861646652222e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6884385079299012e-01:2.9014087143248080e-01:3.4462464445239815e-02:3.3296756319000476e-01:8.7905558327026911e-01:3.2625869147886410e-01:1.1655007771345269e+00:2.9817320593184066e-01:1.8769094520916050e+00:2.8576582135522272e-01:2.3513719602303000e+00:4.6883916235448220e-01:3.3502871524944342e+00 + CVs 20 + -1.1606989199409778e-01 3.0544639912884669e-01 1.6207584407645004e-01 + -2.6141079428896208e-01 5.8864991019960466e-01 2.9804589805473419e-01 + -4.3249683712584208e-01 8.6556161689701883e-01 4.1802152987165209e-01 + -6.2972063939127798e-01 1.1381673818584344e+00 5.2244261396565694e-01 + -8.6174590443081200e-01 1.3949832168151830e+00 5.9839846076876413e-01 + -1.1336630818131854e+00 1.6202587152220100e+00 6.3298369075979954e-01 + -1.4448169654770453e+00 1.7938318429697375e+00 6.1424354300087192e-01 + -1.7846481898013253e+00 1.8934599263863592e+00 5.3523752501060140e-01 + -2.1266601932921594e+00 1.9012895504469638e+00 4.0513915938638589e-01 + -2.4375526842444839e+00 1.8178392740354492e+00 2.5786062896482542e-01 + -2.7016116822868250e+00 1.6656818163420797e+00 1.3479913793774251e-01 + -2.9194676457186319e+00 1.4725671267295761e+00 6.4974749900029327e-02 + -3.0891256263496287e+00 1.2696204329829250e+00 7.1056874860678326e-02 + -3.2003758322354621e+00 1.1079902785688893e+00 1.7328887085651043e-01 + -3.2389565177805073e+00 1.0614729404668850e+00 3.6652456107603670e-01 + -3.2207628374000281e+00 1.1556121554079615e+00 5.8596725679260675e-01 + -3.1899270403572584e+00 1.3575597358676528e+00 7.6462965096927782e-01 + -3.1732973060982319e+00 1.6039819594433466e+00 8.8788126136713319e-01 + -3.3850607097744012e+00 1.4438310417304163e+00 1.2685036524619953e+00 + id 12182 + loc 9.0695619583129883e-01 8.8648861646652222e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0809084703492599e-01:3.2664914581608423e-01:4.3821491565012471e-02:3.7628337964935027e-01:8.5342881631484335e-01:3.5180508811050332e-01:1.1476152883119177e+00:3.2528146363695470e-01:1.8946448028393819e+00:3.2505763788380521e-01:2.3562240463553659e+00:2.8571761872345991e-01:3.0286262487636368e+00:4.0808676612645567e-01:3.5716226156674935e+00 + CVs 20 + -1.5804944750869859e-01 2.9232223633318138e-01 1.1742311522189086e-01 + -3.3603155822191655e-01 5.8875605465406744e-01 2.2583497048357090e-01 + -5.1778683174218143e-01 8.9362373104309489e-01 3.3222396736023896e-01 + -7.0474975433414078e-01 1.2035974824946623e+00 4.3231393664867634e-01 + -9.1415172884836760e-01 1.5082671953212556e+00 5.1001533426834378e-01 + -1.1571999570921059e+00 1.7889718798497511e+00 5.4507774350207427e-01 + -1.4311819560971029e+00 2.0190146404640745e+00 5.1827884962838300e-01 + -1.7121756815178630e+00 2.1660710568627688e+00 4.1514050849192308e-01 + -1.9585106950528997e+00 2.1994174399719943e+00 2.3201293827258895e-01 + -2.1365084856135819e+00 2.1069279240305203e+00 -1.1329329492856033e-02 + -2.2332846596757769e+00 1.9022075668187384e+00 -2.5462395447902419e-01 + -2.2645825139457880e+00 1.6286316596869437e+00 -4.0161670300400010e-01 + -2.2657757793324222e+00 1.3312396940235616e+00 -4.1752741396833015e-01 + -2.2392639126826772e+00 9.4781768876468742e-01 -4.0349184604998439e-01 + -2.1358408025928797e+00 4.0208872164967568e-01 -4.8083326123981651e-01 + -1.9130669260906630e+00 -2.3169985163068840e-01 -7.7439403793593631e-01 + -1.6062081077977175e+00 -7.6556881395436571e-01 -1.3544550620782536e+00 + -1.3404197413037255e+00 -1.0591857839879002e+00 -2.0503007432915750e+00 + -1.2363099773174042e+00 -1.2624736308194080e+00 -2.4301923481458578e+00 + id 12183 + loc 6.5283381938934326e-01 2.6539912819862366e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0421544439875123e-01:2.8087133421611798e-01:5.9913176945656343e-02:2.9779136532227846e-01:9.4797695990250341e-01:2.8965894244433504e-01:1.9997213254771919e+00:3.4071184141134975e-01:2.8069540372605308e+00:4.0421140224430724e-01:3.1381210474725911e+00 + CVs 20 + -1.4056977869139509e-01 3.2436379370844115e-01 1.0808699532946313e-01 + -3.0559041065696946e-01 6.7713018660919500e-01 2.3424087152201500e-01 + -5.0750791542165907e-01 1.0438688286388125e+00 3.4738456527631784e-01 + -7.5440506256744533e-01 1.3994144752066200e+00 4.2763597874212622e-01 + -1.0491816083460119e+00 1.7123000933333206e+00 4.7155658923520144e-01 + -1.3872880199836759e+00 1.9520695135098522e+00 4.8923728563065511e-01 + -1.7547610381570848e+00 2.1001929346636588e+00 5.0307050834891764e-01 + -2.1277558838271737e+00 2.1562580951159003e+00 5.3272353779961024e-01 + -2.4813860778400558e+00 2.1253765990546576e+00 5.8984121754687968e-01 + -2.7740363169181634e+00 1.9648003909814649e+00 6.7965003082299758e-01 + -2.8998219408254018e+00 1.6541878462614674e+00 7.4274051875539482e-01 + -2.8924614368823933e+00 1.3403388546447550e+00 7.2428916586220338e-01 + -2.8319524691927804e+00 1.0356987703520948e+00 6.5393240275454168e-01 + -2.7270778015468111e+00 7.5850153397808917e-01 5.2757914067193157e-01 + -2.6321440793410775e+00 5.4305646000803187e-01 3.6239724585101152e-01 + -2.6019999738659463e+00 3.8803477031661970e-01 1.9504399492749222e-01 + -2.6627141108566286e+00 3.0692071687244593e-01 6.3462033274563776e-02 + -2.8468399723732185e+00 3.8951714341193255e-01 4.3390661095684249e-02 + -2.8933981976881373e+00 2.6745546379223145e-01 -8.0718954453588787e-02 + id 12184 + loc 8.9541840553283691e-01 4.6134608983993530e-01 416 + blend 0.0000000000000000e+00 + interp 4.7004409375934508e-01:3.4305906092074140e-01:5.8106720160788461e-01:4.5911675009234798e-01:1.0038479066957982e+00:4.1590964183805940e-01:1.9730466268958402e+00:2.5896059657470688e-01:2.5122005687812448e+00:3.7960488415786642e-01:3.1555298511601650e+00:4.7003939331840749e-01:3.7827617303019214e+00 + CVs 20 + -5.6006613319035736e-01 1.0324350066200830e-01 1.4801523875393813e-01 + -9.0512995157306031e-01 1.0151041799723984e-01 3.0244656929626657e-01 + -1.2249140451423095e+00 6.3408427185246807e-02 4.6614749727119370e-01 + -1.5845794460445684e+00 2.6214026371649934e-02 6.2408036450915438e-01 + -1.9867194075138936e+00 -1.7352986937938741e-02 7.6997648957527864e-01 + -2.4321747814216481e+00 -7.6026909411702759e-02 8.9347096639638779e-01 + -2.9140941272943159e+00 -1.5743109931776256e-01 9.7981091967496581e-01 + -3.4174993538240548e+00 -2.6724225075071106e-01 1.0176762018890915e+00 + -3.9256634604494827e+00 -4.0856408559984625e-01 1.0032032705777993e+00 + -4.4190719045651363e+00 -5.7887467954964600e-01 9.3842403231396032e-01 + -4.8603142306723992e+00 -7.6633218955684335e-01 8.4273260338160649e-01 + -5.1996375212111872e+00 -9.5570683527982592e-01 7.6630538522950675e-01 + -5.4241796036005816e+00 -1.1372368026877975e+00 7.4813722891791079e-01 + -5.5779891909644075e+00 -1.3166144603374497e+00 7.7512593740532776e-01 + -5.6957171909429860e+00 -1.5007380421861900e+00 8.2527156064550855e-01 + -5.7695584072468939e+00 -1.6684795028451460e+00 8.9055545378883660e-01 + -5.7930458513332868e+00 -1.7929978107301026e+00 9.6147754244066119e-01 + -5.7870094963674763e+00 -1.8777292945662643e+00 1.0273063280531436e+00 + -5.8665561182198047e+00 -2.0811978853411746e+00 1.1270366023707907e+00 + id 12185 + loc 1.1474786698818207e-01 9.2993885278701782e-01 406 + blend 0.0000000000000000e+00 + interp 4.9745885981692578e-01:4.2527077049741918e-01:8.1130619053123576e-02:4.9745388522832762e-01:1.0911509115670939e+00:4.5213397769670455e-01:1.5802628221081354e+00:3.7280151716463295e-01:2.0024470340549558e+00:4.6263974666093227e-01:2.9474917961519713e+00:3.7364351058832340e-01:3.1567603471456547e+00 + CVs 20 + 2.5987162487534365e-01 3.1397280354369250e-01 -9.6103962781278029e-02 + 3.7489949231631958e-01 5.1893867673690863e-01 -1.7380429011076409e-01 + 4.2745566425301817e-01 6.6637225814606693e-01 -2.4081608210829530e-01 + 4.8696220517507016e-01 8.0166429168525766e-01 -3.0375984241835796e-01 + 5.5020009498855083e-01 9.2167945497470027e-01 -3.5939053826738265e-01 + 6.1303656081734248e-01 1.0228556486209832e+00 -4.0502872330758721e-01 + 6.7162863405224027e-01 1.1021757082471151e+00 -4.3793481518887634e-01 + 7.2068709017943600e-01 1.1564367924273364e+00 -4.5620008589294814e-01 + 7.4936151833133624e-01 1.1831422024470766e+00 -4.6112010774485113e-01 + 7.4338035467758568e-01 1.1921342537547635e+00 -4.6450234496658271e-01 + 7.2564191261832178e-01 1.2068215148600883e+00 -4.7478751562365112e-01 + 7.2582026685834866e-01 1.2165459094912940e+00 -4.7257981907864566e-01 + 7.3510749491376171e-01 1.2101687280862217e+00 -4.5143834623823209e-01 + 7.4410033060056868e-01 1.1890772833046872e+00 -4.1494135994472808e-01 + 7.4730262639738998e-01 1.1528318410152065e+00 -3.6602829119694974e-01 + 7.4015000840887146e-01 1.0989318375531414e+00 -3.0688508111450347e-01 + 7.2124026095433280e-01 1.0279949170248230e+00 -2.3806469160648497e-01 + 6.9353140324526386e-01 9.4521534310914290e-01 -1.5799269145005163e-01 + 6.7185487560493129e-01 9.3264484074011289e-01 -9.3870335168423732e-02 + id 12186 + loc 2.7961289882659912e-01 3.2156806439161301e-02 411 + blend 0.0000000000000000e+00 + interp 5.0680105190003155e-01:5.0679598388951252e-01:6.6554650457008413e-01:1.3753599752595305e-01:1.1769701711886280e+00:3.5670039644231233e-01:1.9687332945624758e+00:3.4859285868308998e-01:2.3331150024635514e+00:3.0803815606569440e-01:3.2343759674607138e+00:4.0137737784517891e-01:3.9962734169493221e+00 + CVs 20 + -3.6530643494005748e-02 1.3553088289348700e-01 -5.5757965574646473e-01 + -9.6323363255970809e-02 1.8946852896764516e-01 -1.0166317638315452e+00 + -1.3259197767240188e-01 2.0225317502598461e-01 -1.4688876031167324e+00 + -1.2588298992882924e-01 1.8646797362214507e-01 -1.9446712344718864e+00 + -7.7401118887846912e-02 1.3996560698221960e-01 -2.4286028438406637e+00 + 8.7571316782278641e-03 6.3977156052747786e-02 -2.9052633024422727e+00 + 1.2622285763817448e-01 -3.9550787083858285e-02 -3.3584863034977608e+00 + 2.6606618122163994e-01 -1.7059152794841559e-01 -3.7721049461296814e+00 + 4.1645459614807995e-01 -3.2905499395846993e-01 -4.1355640997492955e+00 + 5.6264401653317708e-01 -5.1297573268448327e-01 -4.4417635799923634e+00 + 6.9022908199007016e-01 -7.1785227714746358e-01 -4.6838137921359078e+00 + 7.9161417120148081e-01 -9.3788532853112816e-01 -4.8636318333115707e+00 + 8.6651464879211915e-01 -1.1684858781434260e+00 -4.9932863514891626e+00 + 9.1655654810854836e-01 -1.4046517589097032e+00 -5.0829357448837911e+00 + 9.4405425980086854e-01 -1.6367498522956263e+00 -5.1338688639677379e+00 + 9.5469526958851214e-01 -1.8486954463009353e+00 -5.1443566713141369e+00 + 9.5651953264503198e-01 -2.0323005324229384e+00 -5.1207809301226490e+00 + 9.5352524397495297e-01 -2.2108525918052000e+00 -5.0784094451370878e+00 + 9.3807594006531825e-01 -2.5116156729899455e+00 -5.0408641815801207e+00 + id 12187 + loc 8.5910215973854065e-02 3.2059851288795471e-01 384 + blend 0.0000000000000000e+00 + interp 5.3507263556244744e-01:2.9464345934931430e-01:2.5455476507264130e-01:5.1167979543366182e-01:1.0132515769383754e+00:2.5739326706078053e-01:1.7066916350878716e+00:5.3506728483609189e-01:2.1925529757564828e+00:5.3121524657712427e-01:2.8852899346493199e+00:3.2738489454125580e-01:3.1017133444115172e+00:3.3751558743009152e-01:3.8746723718542206e+00 + CVs 20 + -4.3657929912022264e-01 2.7112826007904733e-01 -1.1655997493102117e+00 + -7.7298275559081397e-01 3.3974413879097104e-01 -1.8738067723626466e+00 + -1.0829310334619942e+00 3.1115937292679596e-01 -2.4922250901517038e+00 + -1.3853128842115248e+00 2.2196746644475424e-01 -3.1569454576489600e+00 + -1.6803310264765401e+00 5.6681982421137700e-02 -3.8504848646073837e+00 + -1.9777143847273548e+00 -1.8623458917539770e-01 -4.5469182368096028e+00 + -2.2937990616440018e+00 -4.9346022073340634e-01 -5.2169562701394678e+00 + -2.6364514379809116e+00 -8.4460177170264739e-01 -5.8339972467135084e+00 + -2.9966935384421429e+00 -1.2207202002822071e+00 -6.3844129638641816e+00 + -3.3730381387240529e+00 -1.6119455338759046e+00 -6.8596604669545549e+00 + -3.7714654604838098e+00 -2.0144557541321597e+00 -7.2559859094696506e+00 + -4.1924497440846604e+00 -2.4316830057220491e+00 -7.5766542900362523e+00 + -4.6238647872608283e+00 -2.8771013922416260e+00 -7.8246921453965070e+00 + -5.0492005171930092e+00 -3.3655983242974443e+00 -7.9991814799948733e+00 + -5.4478052460452693e+00 -3.9048285715157247e+00 -8.0907637295094528e+00 + -5.7932410479987286e+00 -4.4925129602033529e+00 -8.0858842891388765e+00 + -6.0551264326802858e+00 -5.1133887913937457e+00 -7.9777071349000552e+00 + -6.2106819957214601e+00 -5.7307164897393505e+00 -7.7838113042822350e+00 + -6.2917954826559441e+00 -6.2771620567695905e+00 -7.5987307666607684e+00 + id 12188 + loc 8.3514130115509033e-01 1.4931443333625793e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8116615341969665e-01:4.8116134175816250e-01:8.2860040700788451e-03:4.1741165209619724e-01:7.6289561449276200e-01:4.1410637039816767e-01:1.4181715359418892e+00:2.8906978578851311e-01:2.0589865890592849e+00:4.0330605687255688e-01:2.7897658311480069e+00:2.8263696667596677e-01:3.6118091234128080e+00 + CVs 20 + -1.9953700841631733e-01 9.7773271262283745e-02 1.6812626700022823e-01 + -3.7599532202324759e-01 2.0311441351248219e-01 3.2066446988145975e-01 + -5.2880166757745406e-01 3.0384698868281501e-01 4.5815172261205239e-01 + -6.6827901994711947e-01 4.0267510722904115e-01 5.8804541030416613e-01 + -7.9591429259865754e-01 5.0489883959510196e-01 7.0671073577870291e-01 + -9.1334070087062180e-01 6.1503096234587951e-01 8.0765583160071175e-01 + -1.0286064092634146e+00 7.3807174216196769e-01 8.9547332478011432e-01 + -1.1549374598807169e+00 8.7461946648335787e-01 9.8643389083960942e-01 + -1.3001934117208820e+00 1.0203703473256502e+00 1.0956993520553391e+00 + -1.4667567658591532e+00 1.1679688353908897e+00 1.2347607578255591e+00 + -1.6560148385930298e+00 1.3059929118450768e+00 1.4137491447263966e+00 + -1.8682760754504415e+00 1.4190709143292937e+00 1.6406830574347790e+00 + -2.1013203353596821e+00 1.4911115903840428e+00 1.9195671236615706e+00 + -2.3501103779408492e+00 1.5103776795946988e+00 2.2491185510904841e+00 + -2.6084321319526884e+00 1.4730331704699733e+00 2.6248130428730789e+00 + -2.8742900630092141e+00 1.3736723059662179e+00 3.0427339531723776e+00 + -3.1530172746218206e+00 1.1547853911674668e+00 3.4850116884474533e+00 + -3.4394630469943293e+00 7.0025844501873435e-01 3.7958823676187077e+00 + -3.6613621880628253e+00 3.3901939368384459e-01 3.8364032671531163e+00 + id 12189 + loc 4.6964827179908752e-01 7.1978914737701416e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7839426323316292e-01:3.0899552376419265e-01:3.5479049891736048e-01:4.7838947929053061e-01:1.0367341566244115e+00:2.8799862490919842e-01:1.9861918968388972e+00:3.1508469583541099e-01:2.9988812119916295e+00:3.7442176321787196e-01:3.8138007457350516e+00 + CVs 20 + 1.1162828062037786e-01 2.2147239788370293e-01 -2.2607690661213845e-01 + 2.2182826854951601e-01 4.5765357878555812e-01 -4.5355911743862115e-01 + 3.2685881641404768e-01 7.0610398201786839e-01 -6.8347572613349616e-01 + 4.2051359461336424e-01 9.6516618637093199e-01 -9.1515916581872481e-01 + 4.9576350643933270e-01 1.2347993368834711e+00 -1.1479436277455544e+00 + 5.4794844622045691e-01 1.5162981736143641e+00 -1.3844772363908546e+00 + 5.7730443492450023e-01 1.8123313409509101e+00 -1.6354610555919364e+00 + 5.9124088766949501e-01 2.1221321117088578e+00 -1.9221982840926155e+00 + 6.0395753058854007e-01 2.4310225686433009e+00 -2.2738678702445960e+00 + 6.3090758054672458e-01 2.7015809259639392e+00 -2.7193958919797518e+00 + 6.8214702412045392e-01 2.8739448317355261e+00 -3.2685843257160889e+00 + 7.5472352834536505e-01 2.8862817115953425e+00 -3.8910475931422419e+00 + 8.2536671625525870e-01 2.6985275132501076e+00 -4.5247465753530705e+00 + 8.6102477380503672e-01 2.3167300421540178e+00 -5.0905485510783839e+00 + 8.4868609747740420e-01 1.8060685029847907e+00 -5.5366097108558003e+00 + 7.6863270572282960e-01 1.2327246691050546e+00 -5.8548400482836236e+00 + 5.6389838863302244e-01 6.6705814665870500e-01 -6.0397481515868492e+00 + 2.2781706448341277e-01 1.7967563398820574e-01 -6.1030090831992636e+00 + 6.6491425244400965e-02 -2.7723649393465583e-01 -6.2537336482869721e+00 + id 12190 + loc 2.5937148928642273e-01 4.2437246441841125e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0520969586957623e-01:3.7194119971194584e-01:4.7299658950139112e-01:4.0520564377261753e-01:1.0011138408604765e+00:3.9016064676747397e-01:1.9307548320729251e+00:3.7762132750196808e-01:2.4810373367832472e+00:3.7406883465690366e-01:3.0576488889060061e+00:3.1929134185378905e-01:3.7885266257655115e+00 + CVs 20 + -2.8603795599019111e-01 6.0703408188593677e-01 -1.7593371149659368e-01 + -5.2758682040420990e-01 1.1939633797063687e+00 -4.0354798610719345e-01 + -7.0007469323532456e-01 1.7599740847444580e+00 -6.9260098401759707e-01 + -7.9566173155811770e-01 2.2713185066152000e+00 -1.0490020735297105e+00 + -8.3584058408905171e-01 2.6693554994304582e+00 -1.4741759315377623e+00 + -8.7375131207940893e-01 2.9018846321670528e+00 -1.9357675860449453e+00 + -9.4847316146416583e-01 2.9608117592918761e+00 -2.3625275039579421e+00 + -1.0626305339459428e+00 2.8803257389259125e+00 -2.7118881556006116e+00 + -1.2101300318634740e+00 2.6882332841846734e+00 -3.0108661125716321e+00 + -1.3712286493020662e+00 2.3638090345919549e+00 -3.3008077958998481e+00 + -1.4783668528557796e+00 1.8598542416184605e+00 -3.5812580061281682e+00 + -1.4428681644423145e+00 1.1903698594706358e+00 -3.8107975482546057e+00 + -1.2461005558484863e+00 4.6156393710182814e-01 -3.9811891895516021e+00 + -9.6075692968426907e-01 -2.0574455339064951e-01 -4.1392469266006149e+00 + -6.9033170481197448e-01 -7.0745124505949097e-01 -4.3260653515034395e+00 + -5.5772265166086532e-01 -7.9332666928440720e-01 -4.5764617436749981e+00 + -1.1823723999782936e+00 -6.3416103185468209e-01 -3.4315241899762419e+00 + -1.3085378561375032e+00 -3.7335476435947129e-01 -3.4730005963536494e+00 + -1.4193914002341188e+00 -9.6347651079114083e-02 -3.2284376328564397e+00 + id 12191 + loc 8.6624550819396973e-01 8.1042397022247314e-01 1074 + blend 0.0000000000000000e+00 + interp 3.8544793434060232e-01:2.8364570857177240e-01:6.8119846636849068e-01:3.0142707466928370e-01:1.3356981532163459e+00:2.9017868644520256e-01:2.5801070535275277e+00:3.8544407986125895e-01:3.1355914587954072e+00:3.3088944510808976e-01:3.9613478505041679e+00 + CVs 20 + 2.5626677588522373e-01 2.4691763686410492e-01 -3.5444835723706375e-01 + 5.1201942302651404e-01 4.8850986774271143e-01 -6.8978891587311975e-01 + 7.8648979045013179e-01 7.0262490167193459e-01 -1.0063485875122107e+00 + 1.0808878450436386e+00 8.7371103819862306e-01 -1.3085945547467519e+00 + 1.3836988838385547e+00 9.8576513110978325e-01 -1.5966259814478481e+00 + 1.6799400637956274e+00 1.0288279192668879e+00 -1.8696952079724340e+00 + 1.9519608307909138e+00 1.0006908640400622e+00 -2.1282389886448381e+00 + 2.1833505456473983e+00 9.0752407562096726e-01 -2.3744397151334176e+00 + 2.3677396131563526e+00 7.6242295695089657e-01 -2.6076387759909108e+00 + 2.5083777543613297e+00 5.7853770769063084e-01 -2.8195057106208874e+00 + 2.6079511572210281e+00 3.6695976686808118e-01 -2.9964099897534280e+00 + 2.6687213995598671e+00 1.4085690843868354e-01 -3.1272273923270753e+00 + 2.6959656612717477e+00 -8.4473785197536982e-02 -3.2039320948452636e+00 + 2.6964395288661533e+00 -2.8995844053849529e-01 -3.2152823209005952e+00 + 2.6817715828180213e+00 -4.4953825540051912e-01 -3.1522079336225577e+00 + 2.6695142239423895e+00 -5.4151802968366758e-01 -3.0293653544883341e+00 + 2.6716647380968275e+00 -5.7239061357500032e-01 -2.8889409531732326e+00 + 2.6730055343952968e+00 -5.9703980140846225e-01 -2.7781073688437044e+00 + 2.5456782387562247e+00 -8.6457993875499695e-01 -2.7740374839398569e+00 + id 12192 + loc 1.5128922462463379e-01 8.5906916856765747e-01 1055 + blend 0.0000000000000000e+00 + interp 5.9624728791542192e-01:5.9624132544254282e-01:6.1682820938417149e-02:3.7588819639406118e-01:9.1681329264273626e-01:3.1288967391469313e-01:1.2754754486276090e+00:5.6604706977208352e-01:2.1785421479075673e+00:4.7792157737945840e-01:2.6376680450924814e+00 + CVs 20 + -6.4830930144167298e-02 3.2409566570148551e-01 -4.0692249200732977e-01 + -1.7329216998196451e-02 5.8348283205558071e-01 -7.4820706695166983e-01 + 1.0025274911036075e-01 8.1883335216227171e-01 -1.0500139041078531e+00 + 2.6690068162057123e-01 1.0501231523921954e+00 -1.3104904850024850e+00 + 4.6279863136777954e-01 1.3008251848425374e+00 -1.5324555969258578e+00 + 6.3426984115175666e-01 1.6210887257015849e+00 -1.7485125505929289e+00 + 6.9958481627952396e-01 2.0200325527342518e+00 -1.9809934741812421e+00 + 6.2510231564817209e-01 2.4315266240223972e+00 -2.2324931031911239e+00 + 4.3224865776971466e-01 2.7888485801151881e+00 -2.5184575123184363e+00 + 1.5105954872156224e-01 3.0304576354947530e+00 -2.8599063992859524e+00 + -1.7288952058567153e-01 3.0999571125639824e+00 -3.2468707937663028e+00 + -4.9259002854827028e-01 2.9975576708151244e+00 -3.6286030700727299e+00 + -7.8757644306704311e-01 2.7621208883238269e+00 -3.9626865022811790e+00 + -1.0403395308398449e+00 2.4357625487488201e+00 -4.2263723384456453e+00 + -1.2398030759078691e+00 2.0643926429196178e+00 -4.4185471608127651e+00 + -1.3851942078870385e+00 1.6606702262865551e+00 -4.5536465210668933e+00 + -1.4626079017192857e+00 1.2099054975584480e+00 -4.6321031946291473e+00 + -1.4512468849663827e+00 7.2758095128306932e-01 -4.6308354273916539e+00 + -1.4930604713847999e+00 4.6283584887265938e-01 -4.6109111939028855e+00 + id 12193 + loc 6.7093068361282349e-01 5.6852984428405762e-01 416 + blend 0.0000000000000000e+00 + interp 4.9310272436444591e-01:4.4102974861179395e-01:9.8271542789393207e-02:3.3268058397731298e-01:7.6616113217201265e-01:4.9309779333720227e-01:1.0440743458794164e+00:4.5477331015260952e-01:1.4904788322342757e+00:4.5012422611912373e-01:2.0269838715450206e+00:4.0658270598679291e-01:2.9850401512465963e+00:3.3600646490600355e-01:3.3919958608803484e+00:4.4908557008628203e-01:3.9352743116269031e+00 + CVs 20 + 6.6496690949550086e-01 2.3244233297704509e-01 -7.0906683026003295e-02 + 1.0929607264904049e+00 3.2165028451992811e-01 -1.4834812064739161e-01 + 1.4630787380000718e+00 3.4525761202195315e-01 -2.2483745694148721e-01 + 1.8523526108214019e+00 3.3258098656411922e-01 -2.9621961493993976e-01 + 2.2536519450184040e+00 2.7439604149206559e-01 -3.6262411430579750e-01 + 2.6607040352686391e+00 1.6570717317190098e-01 -4.2127792413269161e-01 + 3.0688575343352524e+00 6.9063337105745859e-03 -4.6530765337006458e-01 + 3.4728379729043981e+00 -1.9698899663710412e-01 -4.8759480845511605e-01 + 3.8674600179114380e+00 -4.3750417111162254e-01 -4.8311819933325645e-01 + 4.2463699439410814e+00 -7.0200734338539261e-01 -4.4654084861946980e-01 + 4.5889506950628931e+00 -9.6921406400274446e-01 -3.7741651183462782e-01 + 4.8635998555507092e+00 -1.2139247318094049e+00 -2.9487308275910196e-01 + 5.0716906521638663e+00 -1.4301662779621973e+00 -2.2320147043909655e-01 + 5.2565051835961301e+00 -1.6413931504503176e+00 -1.6886269162367207e-01 + 5.4455803979531758e+00 -1.8655459779189694e+00 -1.2974905597299813e-01 + 5.6336300576511622e+00 -2.0960583552551220e+00 -1.0493718927834694e-01 + 5.8121020005695776e+00 -2.3254918308781374e+00 -1.0097797592891600e-01 + 5.9850325792448356e+00 -2.5618677251796864e+00 -1.3022994318777958e-01 + 6.2175045013556831e+00 -2.8837262203692751e+00 -1.9159886487366529e-01 + id 12194 + loc 9.5468330383300781e-01 7.6690638065338135e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0539785934133737e-01:2.8373080071115969e-01:1.6204042688146281e-01:4.0539380536274400e-01:8.6487877605573560e-01:3.3749390827456671e-01:1.1070785626401425e+00:1.6768382302204488e-01:2.4515961876966448e+00:2.4535068975795959e-01:3.2576622142351077e+00 + CVs 20 + -1.1714445019789185e-01 3.6353752115551496e-01 6.5531868612111896e-02 + -2.7241340547375015e-01 6.9956113516973883e-01 1.0042245208233530e-01 + -4.6281287103586388e-01 1.0090083326843144e+00 1.0927748273348531e-01 + -6.8435845903301429e-01 1.2834070000990427e+00 9.0695607374858156e-02 + -9.3104162941830271e-01 1.5085303446544693e+00 3.9804544305201195e-02 + -1.1916713413367086e+00 1.6733075447962289e+00 -4.4046054956132341e-02 + -1.4528687597199261e+00 1.7726865594791623e+00 -1.5785337126998467e-01 + -1.7035977960768516e+00 1.8092321351917717e+00 -2.9685256929578341e-01 + -1.9370978975721505e+00 1.7903245379528219e+00 -4.5491482478513623e-01 + -2.1533627548434606e+00 1.7255626531860273e+00 -6.2322940946463157e-01 + -2.3593873315235974e+00 1.6250730554328285e+00 -7.9061638700776338e-01 + -2.5630478029933257e+00 1.4973489566155884e+00 -9.4496131320557653e-01 + -2.7697780810000618e+00 1.3487954317637589e+00 -1.0735422923377302e+00 + -2.9839478422212502e+00 1.1870592322795981e+00 -1.1614977148866412e+00 + -3.2064810950020561e+00 1.0289632118718792e+00 -1.1907133562921022e+00 + -3.4320193582694372e+00 9.0336195498731986e-01 -1.1550202022165157e+00 + -3.6531456127495199e+00 8.4680393176945223e-01 -1.0800322164190301e+00 + -3.8477993576502665e+00 8.8483987667075592e-01 -1.0178001686474023e+00 + -4.1338504705208443e+00 8.4917259897045017e-01 -8.4656959082359151e-01 + id 12195 + loc 1.5517449378967285e-01 8.6272203922271729e-01 261 + blend 0.0000000000000000e+00 + interp 4.5721069660859853e-01:2.6856790742744352e-01:9.6460549616910685e-01:4.4084220072398966e-01:1.5977111604806555e+00:4.0245198202298410e-01:1.9987636296738627e+00:4.5061942610295713e-01:2.5136670115603810e+00:4.5720612450163245e-01:2.9188484139699176e+00:2.9164011422186692e-01:3.8392968182017846e+00 + CVs 20 + -8.5338048989181758e-01 4.4088645303357293e-01 -3.8053550918934559e-01 + -1.5667579126211242e+00 6.5621110107798541e-01 -5.6440659614351374e-01 + -2.2496044818618577e+00 6.9342009987750908e-01 -6.0292994865451544e-01 + -2.9332343918428880e+00 6.5464865566032193e-01 -5.7227045863406079e-01 + -3.5879667151624743e+00 6.1453967872174187e-01 -5.4492603825438235e-01 + -4.1873473427369454e+00 5.9228142257218142e-01 -5.6739285531825079e-01 + -4.7283824139146073e+00 5.8365322061378366e-01 -6.4364382388645935e-01 + -5.2274972061758795e+00 5.9127974295350838e-01 -7.5751538799220153e-01 + -5.7085439280825341e+00 6.2565891414804531e-01 -9.0073519778748423e-01 + -6.1936687698307011e+00 7.0038346033924204e-01 -1.0886405030493822e+00 + -6.7026768854491321e+00 8.1840148098280330e-01 -1.3526402715861425e+00 + -7.2595498990803389e+00 9.5014079393208983e-01 -1.7394473897057143e+00 + -7.8706560755286761e+00 1.0035569460413836e+00 -2.2981249058265361e+00 + -8.4787940342373069e+00 8.4905938980703999e-01 -3.0312695823136862e+00 + -8.9513612390220949e+00 4.3606676553576840e-01 -3.8595037680485742e+00 + -9.1672055497341027e+00 -1.2431355190873905e-01 -4.6138287992719125e+00 + -9.1876577898982497e+00 -6.7362957328329021e-01 -5.1535499841358181e+00 + -9.2118971927209774e+00 -1.2393078160131092e+00 -5.3930110073341453e+00 + -9.3796617161826177e+00 -1.9208478117671790e+00 -5.2598887504250760e+00 + id 12196 + loc 2.3464994132518768e-01 6.0764253139495850e-01 1050 + blend 0.0000000000000000e+00 + interp 7.6027631149172725e-01:6.9553230784640874e-01:2.2945002881558263e-01:3.4254359833678222e-01:8.8661355778599893e-01:3.1845073368926508e-01:1.2446720052450397e+00:5.1711495166155885e-01:1.9980545621178036e+00:3.4551642565930896e-01:2.4664224357684179e+00:7.6026870872861241e-01:2.6796286388355606e+00 + CVs 20 + -2.0046412933171132e-01 4.6622546994294167e-01 -7.2746697561544360e-01 + -2.4486237444524123e-01 8.9376668831132400e-01 -1.3431362561039419e+00 + -1.4993761720353627e-01 1.3093056548216584e+00 -1.8598056467365658e+00 + 6.8441625505591963e-02 1.7167782201819364e+00 -2.2781704226533286e+00 + 4.0008542824306714e-01 2.0982587891474598e+00 -2.5707050559186140e+00 + 8.1112419089268906e-01 2.4177133608777961e+00 -2.7259494543870169e+00 + 1.2458135444529601e+00 2.6470160588800664e+00 -2.7573190072265104e+00 + 1.6618179324600897e+00 2.7890730616970214e+00 -2.7106817711127786e+00 + 2.0595862192041028e+00 2.8406257008599081e+00 -2.6583313183372299e+00 + 2.4599970519765426e+00 2.7956062677734836e+00 -2.6589057750077201e+00 + 2.8815864613539386e+00 2.6197484067448453e+00 -2.6952427870640165e+00 + 3.2799738858852465e+00 2.2461747129503595e+00 -2.6764744670058014e+00 + 3.5687468180204545e+00 1.6807730251580817e+00 -2.5201427868843593e+00 + 3.6530732156850227e+00 1.0313623732339310e+00 -2.1618696787486824e+00 + 3.4823676417039366e+00 4.7549875053368235e-01 -1.6062401670409143e+00 + 3.1095641404613708e+00 1.5792246816478858e-01 -9.4749311455010476e-01 + 2.6826977317812171e+00 4.0611878077779384e-02 -2.5522479993668296e-01 + 2.1948606587963657e+00 4.0164657132698234e-02 5.2974194885665971e-01 + 1.9760161103454563e+00 5.8350261069771037e-01 3.0446893273499992e-01 + id 12197 + loc 5.5292576551437378e-01 3.0882784724235535e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3682716049005071e-01:3.2898748264555544e-01:5.0009426455443640e-01:3.2356159856680283e-01:1.0532939484358368e+00:3.5061657050788364e-01:1.9611229240011974e+00:3.2754492981108047e-01:2.5160295206885914e+00:4.3682279221844583e-01:3.0620469575902303e+00:3.4018324807108147e-01:3.9365559570285984e+00 + CVs 20 + -2.6202725601334903e-01 2.2435593366294415e-01 1.5326254053101909e-01 + -5.0747644085786647e-01 4.4360293720841532e-01 3.0831829601582467e-01 + -7.5255220329002970e-01 6.5611950187615564e-01 4.6647980166633829e-01 + -1.0044613556192543e+00 8.6263300807552334e-01 6.3782782745087607e-01 + -1.2508242204877573e+00 1.0611212008112438e+00 8.4001033489725241e-01 + -1.4816037319226316e+00 1.2417294255233728e+00 1.0791658537349982e+00 + -1.7098911511049000e+00 1.3930013282628704e+00 1.3465333930166314e+00 + -1.9541349693441195e+00 1.5047970619090045e+00 1.6256008578568300e+00 + -2.2148685120192400e+00 1.5675631726302361e+00 1.8960645525042112e+00 + -2.4824620309167593e+00 1.5730541729897261e+00 2.1401894932572341e+00 + -2.7404897313178647e+00 1.5140069566706198e+00 2.3453695354144211e+00 + -2.9495965461716573e+00 1.3954265744537597e+00 2.4985399452219870e+00 + -3.0617605847366902e+00 1.2417892319553705e+00 2.5937365252265749e+00 + -3.0713945206736142e+00 1.0591236622700122e+00 2.6524700536213275e+00 + -2.9849787531382885e+00 8.5189226434849452e-01 2.6899667050493652e+00 + -2.8255396730638660e+00 7.2477395804134115e-01 2.7003973319259864e+00 + -2.7561050016680162e+00 8.4883752800023615e-01 2.7003588482357626e+00 + -2.8094117081585215e+00 1.0185134279669972e+00 2.7153148510508647e+00 + -2.4820708401032192e+00 1.2047191609338919e+00 2.7227758141331875e+00 + id 12198 + loc 5.9206372499465942e-01 5.8715856075286865e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9105556177616333e-01:4.4237725758701979e-01:2.7234854982426215e-01:3.3216915621485132e-01:9.4137727999040199e-01:2.8797364905067713e-01:1.5750275579069988e+00:4.0058048946352615e-01:2.4480137680435892e+00:3.2941714219080087e-01:3.2522768083960543e+00:4.9105065122054559e-01:3.9179080645930995e+00 + CVs 20 + 1.3293023400428022e-01 2.7942683632061460e-01 -4.7581750526977523e-02 + 2.7574803014326488e-01 5.5125278789250998e-01 -9.8750217208075974e-02 + 4.3526446794154050e-01 8.1625919130299307e-01 -1.5550598328436710e-01 + 6.1898581684527054e-01 1.0722523136044073e+00 -2.2358455409380534e-01 + 8.3355625882422357e-01 1.3154672934170060e+00 -3.1517265802583355e-01 + 1.0822081600171611e+00 1.5409201100227641e+00 -4.4610106841298480e-01 + 1.3622744797013471e+00 1.7396320065675628e+00 -6.3412561466967576e-01 + 1.6635087852210393e+00 1.8972529530853568e+00 -8.9681397631581194e-01 + 1.9639127204058568e+00 1.9928852919894768e+00 -1.2451963498997864e+00 + 2.2314637916487281e+00 2.0039212368369541e+00 -1.6727377584092815e+00 + 2.4344779794776148e+00 1.9168347544597517e+00 -2.1487210867406228e+00 + 2.5536355812431486e+00 1.7454963499291565e+00 -2.6113464725407929e+00 + 2.5999552007557627e+00 1.5419053770100621e+00 -2.9880062960634697e+00 + 2.6128866731687741e+00 1.3732610569525927e+00 -3.2073429080077167e+00 + 2.6330642045007662e+00 1.2812311895041708e+00 -3.1467168501995917e+00 + 2.6337914622991865e+00 1.1183560400185373e+00 -2.7273165044949073e+00 + 2.4846067398038585e+00 5.9352413901997170e-01 -2.1741340303967585e+00 + 2.0566355853852514e+00 -4.7390582553936111e-01 -2.0123613589867406e+00 + 2.1016630899728921e+00 -3.6468743433103468e-01 -1.9760373715509780e+00 + id 12199 + loc 6.0620540380477905e-01 3.7124863266944885e-01 406 + blend 0.0000000000000000e+00 + interp 3.9753429815552310e-01:2.6160200788776472e-01:4.8879709611647537e-01:3.9105296112237842e-01:1.0086110397784536e+00:2.5837343046512290e-01:1.7700736591209583e+00:2.7327487051639471e-01:2.7418603633161505e+00:3.9753032281254158e-01:3.1464201953675444e+00:2.9942430520958557e-01:3.9893794670264997e+00 + CVs 20 + -2.0559850139044450e-01 1.2824396624845452e-01 5.3760624062411631e-02 + -3.5388406337853523e-01 2.0281464140540692e-01 1.0063157103214407e-01 + -4.5896617667903111e-01 2.3768956860606172e-01 1.4158609234328531e-01 + -5.6069219652833935e-01 2.6503784171548633e-01 1.8465415347602615e-01 + -6.5810555273132554e-01 2.8488402086978959e-01 2.2846227279913489e-01 + -7.5095032009638896e-01 2.9764060058882497e-01 2.7152849122415967e-01 + -8.4140154727800620e-01 3.0421912639906412e-01 3.1284999998940155e-01 + -9.3359013237659805e-01 3.0516034486784682e-01 3.5199419371635943e-01 + -1.0255059629586605e+00 3.0030226798038245e-01 3.8739624287636287e-01 + -1.1025272138654700e+00 2.9082160472673074e-01 4.1433383505553023e-01 + -1.1528391234613826e+00 2.8019941801324805e-01 4.2823750891528323e-01 + -1.1860339197580207e+00 2.6932548120110811e-01 4.3094876300687301e-01 + -1.2199188504784131e+00 2.5414272704869006e-01 4.2993200063646037e-01 + -1.2576266435728245e+00 2.3231282466325465e-01 4.2835479775952173e-01 + -1.2888384530768118e+00 2.0705256824835433e-01 4.2088797050865079e-01 + -1.3063560284700368e+00 1.8255308836169049e-01 4.0193827584323349e-01 + -1.3141662298409456e+00 1.5958027738927083e-01 3.7518898873440476e-01 + -1.3199943907549621e+00 1.3563412180540058e-01 3.5093448588923137e-01 + -1.3612793862245067e+00 4.3198999050059195e-02 3.6596879076462552e-01 + id 12200 + loc 9.8227614164352417e-01 3.1338831782341003e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3478164311653145e-01:2.1177315153342174e-01:3.2062675217852599e-01:3.1521231485793411e-01:1.0714836933409850e+00:4.3477729530010029e-01:1.7275681220762578e+00:3.2012185379032948e-01:2.2375916376538090e+00:2.8415211234704524e-01:3.2121272140781487e+00:3.7457825869901890e-01:3.9135291890907737e+00 + CVs 20 + 3.0380278312541420e-01 2.8652062892147917e-01 -1.5803256926984011e-01 + 5.9500020379443841e-01 5.8112566216854644e-01 -3.4105764540943967e-01 + 8.5593979106478857e-01 8.9065643851692577e-01 -5.3035008179959986e-01 + 1.1271706747077401e+00 1.2001774590896477e+00 -6.6013964763657262e-01 + 1.4445255308396945e+00 1.4712565767925390e+00 -6.6497112143217785e-01 + 1.7934194183909375e+00 1.6512126514023340e+00 -5.2281558613547963e-01 + 2.1326568850438061e+00 1.7158189233371210e+00 -2.2791631589558070e-01 + 2.3983593687131330e+00 1.6535208751554200e+00 2.3584003590379576e-01 + 2.4996841483475389e+00 1.4600291634580320e+00 8.0767542576320428e-01 + 2.4182224466304771e+00 1.1861981244292084e+00 1.3457085349981202e+00 + 2.2039176509239011e+00 8.7945750952517543e-01 1.7821489443417513e+00 + 1.8834068807895610e+00 5.4767841416093277e-01 2.1062739668492441e+00 + 1.5055331021111398e+00 2.1697155892352316e-01 2.2907389480466862e+00 + 1.1887547709876252e+00 -4.0649560302291721e-02 2.3393947666746704e+00 + 9.9800296680651113e-01 -1.8527978322304728e-01 2.3090252637568063e+00 + 8.7137122403340561e-01 -2.6501732323947058e-01 2.2337620808075416e+00 + 7.1096548257646730e-01 -3.8603596140936303e-01 2.1658673504967272e+00 + 4.8104356208087390e-01 -5.7959575314864642e-01 2.2307778171775743e+00 + 3.5010992421521414e-01 -6.1628906456391974e-01 2.3318639978955158e+00 + id 12201 + loc 3.2204657793045044e-01 2.9392454028129578e-01 384 + blend 0.0000000000000000e+00 + interp 4.7939095057404935e-01:2.9293155986127217e-01:4.8730464809227603e-01:4.7938615666454365e-01:1.2357291749870214e+00:2.9238342892932651e-01:1.9503790181218195e+00:2.9129722234924560e-01:2.4713608222798271e+00:2.8242853080602787e-01:3.0383233095876183e+00 + CVs 20 + -3.9843207164552247e-01 1.7318212859456045e-01 -1.2966747100112839e+00 + -6.7147526570601479e-01 1.5831728085383093e-01 -2.1283296266120950e+00 + -9.1937865233159011e-01 8.2647123902269470e-02 -2.8429741114944584e+00 + -1.1847925590280575e+00 -1.4847488181315815e-02 -3.5760151163743461e+00 + -1.4730731592133355e+00 -1.5134337279773497e-01 -4.3139151941543972e+00 + -1.7880816589159543e+00 -3.3984821045776359e-01 -5.0413036077269098e+00 + -2.1345511900297049e+00 -5.9158056295723094e-01 -5.7491652289491064e+00 + -2.5087390948737913e+00 -9.2026783595371930e-01 -6.4264650097582123e+00 + -2.8972803967361975e+00 -1.3436731172240024e+00 -7.0559396535047743e+00 + -3.2906442100782956e+00 -1.8784247451658422e+00 -7.6113666515587539e+00 + -3.6851052589545774e+00 -2.5242271296367007e+00 -8.0569788150146096e+00 + -4.0723573187939479e+00 -3.2547520209661198e+00 -8.3646160996626158e+00 + -4.4413209008064234e+00 -4.0311971725700593e+00 -8.5273258100323535e+00 + -4.7866688769061678e+00 -4.8174336295630464e+00 -8.5534954689192197e+00 + -5.1052633523066824e+00 -5.5821081125051295e+00 -8.4557977318224999e+00 + -5.3806474452118858e+00 -6.2979253770420280e+00 -8.2500685619524816e+00 + -5.5853344935357825e+00 -6.9448568106820714e+00 -7.9627851265984129e+00 + -5.7108793732415979e+00 -7.5155081291380652e+00 -7.6406749046853086e+00 + -5.9047514811762447e+00 -8.0361560514869250e+00 -7.4515883129251019e+00 + id 12202 + loc 4.2892172932624817e-01 6.4553362131118774e-01 411 + blend 0.0000000000000000e+00 + interp 3.6550747765391189e-01:3.2466483031527588e-01:2.3194827533631801e-01:3.4932215653516607e-01:1.0968219806579560e+00:2.9067173313538613e-01:1.7866271355611303e+00:2.6692810554625279e-01:2.4527501567367551e+00:3.6550382257913538e-01:3.0002451104985273e+00:3.3346843545450922e-01:3.4728046684734615e+00 + CVs 20 + 8.7971981811928335e-01 1.3979670850948278e-01 -1.3971968496185658e-01 + 1.5015086447611501e+00 1.6924617432700373e-01 -2.6205812687188312e-01 + 2.0674819965971203e+00 1.7337811537150327e-01 -3.5879079745595088e-01 + 2.6415915180009089e+00 1.7846446488142442e-01 -4.3011859142903763e-01 + 3.2115898382072454e+00 1.7611968548078760e-01 -4.8121301248229514e-01 + 3.7661304002258196e+00 1.5628219589070114e-01 -5.1955901800815840e-01 + 4.2953135452762172e+00 1.0760130754061970e-01 -5.4940821864831291e-01 + 4.7893850357715513e+00 1.8435001013517027e-02 -5.6845887540890094e-01 + 5.2350621812337357e+00 -1.1931492271820976e-01 -5.7190734984024405e-01 + 5.6156563662729200e+00 -3.0481829896314427e-01 -5.5662432229150383e-01 + 5.9205039472271981e+00 -5.2938369869527402e-01 -5.2341510344179243e-01 + 6.1502717700319316e+00 -7.8447751610012917e-01 -4.7517131749963559e-01 + 6.3127007500447085e+00 -1.0611664410612751e+00 -4.1095435028220373e-01 + 6.4155632332351837e+00 -1.3497577270143866e+00 -3.2623045615603469e-01 + 6.4621680084391171e+00 -1.6409732242322699e+00 -2.2165249451877914e-01 + 6.4593163455661875e+00 -1.9208534825343997e+00 -1.0649817005887313e-01 + 6.4130039352906936e+00 -2.1777916118325127e+00 1.3307698850230143e-02 + 6.3199242016547803e+00 -2.4211542030047370e+00 1.4449388015921344e-01 + 6.1038834669481687e+00 -2.7681259996806240e+00 2.6043914203773322e-01 + id 12203 + loc 6.1344081163406372e-01 4.0415292978286743e-01 1080 + blend 0.0000000000000000e+00 + interp 3.0201098458671033e-01:2.6391370975397832e-01:3.9955217660401166e-01:2.9051530040608631e-01:1.0215901608743632e+00:3.0200796447686445e-01:1.9260592798376144e+00:2.7892577697167642e-01:2.4623695693375716e+00:2.8058962576690299e-01:3.6613274825694058e+00 + CVs 20 + 4.8665730568434235e-02 4.4549522750253234e-01 -4.9243547037476271e-01 + 6.6222854826833211e-02 8.0996452798216678e-01 -8.1908481463681349e-01 + 7.3831263036677822e-02 1.1286034570800589e+00 -1.0936066556963904e+00 + 6.1766511042161937e-02 1.4511540675918115e+00 -1.3617889662777556e+00 + 1.9630580047823976e-02 1.7785350107906959e+00 -1.6101148483841818e+00 + -6.9161595220818717e-02 2.1267817533208380e+00 -1.8203281263427886e+00 + -2.4687897002675646e-01 2.5400528835113789e+00 -1.9487778616903872e+00 + -6.4079448864224453e-01 3.0766579606404694e+00 -1.8182735838770547e+00 + -1.3151753106186481e+00 3.3793963810675853e+00 -1.0276700112953447e+00 + -1.7036712552445417e+00 2.9985481242245937e+00 -1.8957163938170662e-01 + -1.8424493680704586e+00 2.5069583038754781e+00 2.6289174573015905e-01 + -1.9297929191659631e+00 2.0688660778648487e+00 5.1417060552740601e-01 + -2.0263141676503982e+00 1.7084070275860752e+00 6.5221060761767402e-01 + -2.1431617786081794e+00 1.4381501278923063e+00 7.1875833142369083e-01 + -2.2783767682256828e+00 1.2921558829950628e+00 7.2950381238588369e-01 + -2.4586748877904654e+00 1.3426106966544320e+00 5.9260421219571280e-01 + -2.7022272149769946e+00 1.2135136939196958e+00 -3.3130290666828555e-01 + -2.4641819028763874e+00 -8.1677394625800953e-02 -6.9457629562117340e-01 + -2.6275610522526480e+00 -3.9019569220957978e-02 -6.8262239352767518e-01 + id 12204 + loc 4.2818215489387512e-01 2.4373186752200127e-02 1074 + blend 0.0000000000000000e+00 + interp 4.5007816047135868e-01:3.8362362180668269e-01:1.4153391750395505e-01:1.6107263995241780e-01:9.5301297686333408e-01:4.5007365968975399e-01:1.2304778232186644e+00:2.6184946113415952e-01:2.5547461030141929e+00:2.9884817234223748e-01:3.4106065410883466e+00 + CVs 20 + -2.2708333125744257e-01 2.1444999235592438e-01 -1.7216760314462887e-01 + -4.6909952770191288e-01 4.1675454127254929e-01 -3.2118918143432940e-01 + -7.1766868035921394e-01 5.9651266527842284e-01 -4.6327723872445092e-01 + -9.6372886253541834e-01 7.5620333893536806e-01 -6.0252963521819192e-01 + -1.1984705338730168e+00 8.9997081305722493e-01 -7.3382679208119694e-01 + -1.4256141223395440e+00 1.0256578016055418e+00 -8.5598678744205159e-01 + -1.6684790076691094e+00 1.1358992246935329e+00 -9.7621559486045140e-01 + -1.9456946014548455e+00 1.2373921850005531e+00 -1.1032688336936689e+00 + -2.2500396608789641e+00 1.3325691162539575e+00 -1.2405108621780587e+00 + -2.5604650686624915e+00 1.4162931079256258e+00 -1.3846221469476074e+00 + -2.8614496207778908e+00 1.4764156442087579e+00 -1.5265680454096338e+00 + -3.1499545055697848e+00 1.4976103045670712e+00 -1.6566492988815185e+00 + -3.4311557918790685e+00 1.4645635801637473e+00 -1.7671453177553553e+00 + -3.7134048649586009e+00 1.3630103124004003e+00 -1.8533492681421322e+00 + -4.0008117350714940e+00 1.1828336574365088e+00 -1.9100893011660296e+00 + -4.2826077810129073e+00 9.2923997198159625e-01 -1.9169440168026353e+00 + -4.5393142890321192e+00 6.3246884216222621e-01 -1.8361623598185932e+00 + -4.7639646480534807e+00 3.3014053476801591e-01 -1.6538193583812262e+00 + -5.0475688256524576e+00 -2.2426637765293828e-02 -1.4995913058372634e+00 + id 12205 + loc 7.8506624698638916e-01 6.6395413875579834e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2020627063887352e-01:2.6249167547804581e-01:1.1343046969266912e-02:3.2020306857616715e-01:8.3090005321052574e-01:2.8954887345034408e-01:1.3820315435780568e+00:2.9981036883257389e-01:2.1655042015505419e+00:2.9945569599955585e-01:3.2181272497093159e+00 + CVs 20 + 2.4762268649684338e-02 7.5295045150871931e-01 -3.2417934156467720e-01 + 1.5626977256387434e-01 1.5034741726889955e+00 -6.1632437884004054e-01 + 4.3331267238905891e-01 2.2104692990942905e+00 -9.1629121313235296e-01 + 5.9792321415437510e-01 2.8521380664698075e+00 -1.2761814711187054e+00 + 9.0520179599314510e-01 3.5212307211151344e+00 -1.3421877915458769e+00 + 1.3818634832708225e+00 4.1066544457485508e+00 -1.0960533150955534e+00 + 1.9292254390016399e+00 4.4541568278690722e+00 -5.5720442168726758e-01 + 2.4457899779005339e+00 4.4570661135066700e+00 1.9757559229369615e-01 + 2.8594647713644541e+00 4.1149235457855777e+00 1.0484261343152050e+00 + 3.1010694509330987e+00 3.4728354933700292e+00 1.8928579369558869e+00 + 3.0782791174453643e+00 2.6314421556473304e+00 2.6460089627415964e+00 + 2.7540104256177420e+00 1.7661912387240468e+00 3.2142194528552794e+00 + 2.2423381234673601e+00 9.7955119270223889e-01 3.5200785970761745e+00 + 1.6822901898178066e+00 2.7339452010740795e-01 3.5666443711342244e+00 + 1.1537922977560822e+00 -3.6190909107587599e-01 3.4407079641494880e+00 + 7.3295049007577528e-01 -1.0431780627614331e+00 3.3627253908816712e+00 + 7.7160853125924223e-01 -1.8550096244306746e+00 3.6866493841531769e+00 + 1.5010402167076333e+00 -2.3031442695895974e+00 4.5233908727732466e+00 + 2.3677091950171980e+00 -2.2440404264876719e+00 5.5084236146109191e+00 + id 12206 + loc 2.0988522469997406e-01 3.7988916039466858e-01 1075 + blend 0.0000000000000000e+00 + interp 4.7598058230361595e-01:4.7597582249779291e-01:2.0538995381037206e-02:2.7362433197608821e-01:9.2088652890923628e-01:2.7328219149930111e-01:1.3812026411338896e+00:3.3749165300080758e-01:1.9828425585326459e+00:2.8053346782521110e-01:2.9156997018962469e+00:3.3299074690082664e-01:3.6352307078552579e+00 + CVs 20 + -1.8535174583431757e-01 2.5752844233756261e-01 -1.3035237896033275e-01 + -3.8659932474181546e-01 5.5028735993857403e-01 -2.1565323766976854e-01 + -5.9356663241458918e-01 8.4904608166053608e-01 -2.8372842218046473e-01 + -8.0864720753904384e-01 1.1306613152494540e+00 -3.5141135454628691e-01 + -1.0373501228845581e+00 1.3763265667286970e+00 -4.2634430441512272e-01 + -1.2725567129363968e+00 1.5679403045440772e+00 -5.0957351083172930e-01 + -1.4949501638650080e+00 1.6959663394838245e+00 -5.9007100360105103e-01 + -1.6878329989391452e+00 1.7714430125617915e+00 -6.4730350031465145e-01 + -1.8583828145149741e+00 1.8196988203977096e+00 -6.8480448804688243e-01 + -2.0155822773211272e+00 1.8426538624355933e+00 -7.3859065902946108e-01 + -2.1404615522380275e+00 1.8529460673661311e+00 -8.1456250048141032e-01 + -2.2115586706800183e+00 1.9124555189605614e+00 -9.0820897549667889e-01 + -2.2448279427315518e+00 2.0291759675703753e+00 -1.0513785398163438e+00 + -2.3009848060296965e+00 2.0411903660364290e+00 -1.2027956212801034e+00 + -2.3949395014047208e+00 1.8197889055563512e+00 -1.2390117225266239e+00 + -2.4438957790963731e+00 1.3581657853060185e+00 -1.1683007714220806e+00 + -2.3502610969259434e+00 7.3382445092282544e-01 -1.1296598123284132e+00 + -2.1324891582108125e+00 2.0600223918313576e-01 -1.2689434376740429e+00 + -1.9328606732708935e+00 2.0912789008505506e-01 -1.6079452187223704e+00 + id 12207 + loc 5.1911956071853638e-01 8.1723439693450928e-01 372 + blend 0.0000000000000000e+00 + interp 4.7436380436623077e-01:3.4937026944435789e-01:6.0866326779656865e-02:3.2608006311511911e-01:9.0487274034685206e-01:3.5195684365554175e-01:1.5916046364956342e+00:4.7435906072818712e-01:2.3283311172653196e+00:4.1429463194965205e-01:2.9534873249972482e+00:3.2803417999655227e-01:3.6142478051247826e+00 + CVs 20 + -3.1829689202415068e-01 4.8611010726289855e-01 -1.0242268190749690e-01 + -6.3113515832774059e-01 9.5124525493983281e-01 -1.9511393243350061e-01 + -9.6369525909460263e-01 1.4017499464011369e+00 -3.0383559353716522e-01 + -1.3142770035907656e+00 1.8762071550955266e+00 -4.6683933679821887e-01 + -1.5456666877213225e+00 2.4181081385615304e+00 -7.7361903500106566e-01 + -1.4489622354027962e+00 2.9000339242796827e+00 -1.2342599410441979e+00 + -1.0262654026104356e+00 3.1324149340688372e+00 -1.7228116533412767e+00 + -4.1082517596344803e-01 3.0407335958774682e+00 -2.1257351261886126e+00 + 2.6042993106950951e-01 2.6482697212675985e+00 -2.3917629092921988e+00 + 8.6003640690587002e-01 2.0207432442261060e+00 -2.5080443747994230e+00 + 1.3011316228292742e+00 1.2367020848018899e+00 -2.4881212839078963e+00 + 1.6006190267666940e+00 3.5060835879858676e-01 -2.3452178955748795e+00 + 1.8876335297335896e+00 -5.7389148735129225e-01 -2.0816784087299172e+00 + 2.3858441928961249e+00 -1.4711489714690824e+00 -1.7393061146123416e+00 + 3.2828678651241145e+00 -2.1950969328661190e+00 -1.4664653474192935e+00 + 4.4399829279094511e+00 -2.5926856904533544e+00 -1.4426515060501601e+00 + 5.6476224536686033e+00 -2.7049539672316172e+00 -1.7104511115775312e+00 + 6.7221255770250172e+00 -2.6013715818317582e+00 -2.2213721860413371e+00 + 7.3386034983222554e+00 -2.4496841293609970e+00 -2.7753532728737582e+00 + id 12208 + loc 9.8376959562301636e-01 4.8228111863136292e-01 1085 + blend 0.0000000000000000e+00 + interp 3.7851919774953052e-01:3.2702153934066602e-01:3.3797454495248846e-02:3.3036357229165580e-01:8.2773220438385353e-01:3.0081068376395154e-01:1.1499454231556197e+00:3.7851541255755305e-01:1.7918528200460977e+00:2.8639976743183065e-01:2.4395826932348967e+00:3.5954726920277214e-01:3.0051761186664847e+00:3.3022362143100120e-01:3.5341294539217398e+00 + CVs 20 + 8.2761347670590416e-02 3.0773604558628431e-01 3.7912179224087239e-02 + 1.4562128911490063e-01 5.9639835176073541e-01 1.0389078144430475e-01 + 2.0028081153420185e-01 8.7597590120550084e-01 1.8346605799294324e-01 + 2.5372082724890910e-01 1.1499932752280593e+00 2.6384716685609938e-01 + 3.1558873668068305e-01 1.4236570281967373e+00 3.4084627666806111e-01 + 4.0031361653886244e-01 1.6999939734822127e+00 4.1487599634423078e-01 + 5.2343707947503160e-01 1.9759017433248109e+00 4.9195555651734646e-01 + 6.9702630572833935e-01 2.2411296646193430e+00 5.8439778115468766e-01 + 9.2582320945175789e-01 2.4815476549345616e+00 7.1517930792505280e-01 + 1.2030667062292473e+00 2.6758579462722434e+00 9.1716307348292259e-01 + 1.5148904855946752e+00 2.8016065472959792e+00 1.2080623265097759e+00 + 1.8556437401064376e+00 2.8434573301739854e+00 1.5797849975015616e+00 + 2.2266286181676196e+00 2.7838447068933743e+00 2.0136139426067272e+00 + 2.6233820033403719e+00 2.5896297417975056e+00 2.4889454899900838e+00 + 3.0366325230258036e+00 2.2209227723966745e+00 2.9726590349320534e+00 + 3.4308559671404635e+00 1.6915187940117677e+00 3.3627799674565262e+00 + 3.7286244921278175e+00 1.1026417381413034e+00 3.5684673187893168e+00 + 3.9333063319363357e+00 5.6287319138182079e-01 3.6020026341605820e+00 + 4.2038513909468156e+00 5.8154352559472233e-01 3.4262200357986030e+00 + id 12209 + loc 6.7310857772827148e-01 5.1617801189422607e-01 403 + blend 0.0000000000000000e+00 + interp 4.8760157967468554e-01:4.4228661974472278e-01:2.6397965062338058e-01:3.2640261190074943e-01:9.3741765572134672e-01:2.8164903984547507e-01:1.5914488850215482e+00:3.9829533349411972e-01:2.4405244247009561e+00:3.1895696273077778e-01:3.2530318376173715e+00:4.8759670365888880e-01:3.9210097839002684e+00 + CVs 20 + 1.1111307902023146e-01 1.4598698199950064e-01 -9.6572425226904540e-02 + 2.1225213550152922e-01 2.9411932727267120e-01 -2.1839207537836061e-01 + 3.3016036275979260e-01 4.5529770127231656e-01 -3.2498202744162774e-01 + 4.6022307065666451e-01 6.2141472977258638e-01 -4.1500527939998177e-01 + 5.9256012353521659e-01 7.9215053347935382e-01 -4.9344413941506193e-01 + 7.1519253120213799e-01 9.7268618657327910e-01 -5.6450103986531053e-01 + 8.1313535542487680e-01 1.1726129226260396e+00 -6.3049514968182196e-01 + 8.6521516233882967e-01 1.4020748308155397e+00 -6.9390860553460065e-01 + 8.4365377541173281e-01 1.6647414147723683e+00 -7.5649765576767702e-01 + 7.1915138342496332e-01 1.9500656809367796e+00 -8.1389514398298790e-01 + 4.7662878879482851e-01 2.2274891075060528e+00 -8.5175491300052364e-01 + 1.2674769812342035e-01 2.4555462974583353e+00 -8.5173812859843923e-01 + -2.9147139160057534e-01 2.6004991678954701e+00 -8.0002294482266523e-01 + -7.1392979156877656e-01 2.6575102225589289e+00 -6.9223591278963004e-01 + -1.0778297348272747e+00 2.6584963710056471e+00 -5.3423502163781755e-01 + -1.3576180746504425e+00 2.6415126466084082e+00 -3.3527389387807116e-01 + -1.5624668168177638e+00 2.6174006348413168e+00 -1.0329901108366463e-01 + -1.7046545654057257e+00 2.5826245489588611e+00 1.4027580086960553e-01 + -1.7330086617782023e+00 2.6522245397966167e+00 1.5775101076089915e-01 + id 12210 + loc 3.1412515090778470e-04 8.6678999662399292e-01 1050 + blend 0.0000000000000000e+00 + interp 5.4509209691682503e-01:4.0000723804189164e-01:2.1528892760227836e-01:3.5980834233006537e-01:9.9827696514814301e-01:3.4261775850976067e-01:1.8446640714454041e+00:4.5363931442490496e-01:2.0099669173546317e+00:5.4508664599585588e-01:2.8552385563728437e+00:3.4767013278212783e-01:3.2909517032946547e+00 + CVs 20 + -7.9744436787763467e-02 4.7608737274883567e-01 -6.9516828881331016e-01 + -6.3737346403731521e-02 9.4468142564412894e-01 -1.3062841474749765e+00 + 7.1096150417651716e-02 1.4303420355359349e+00 -1.8218428083732463e+00 + 3.4323243334630427e-01 1.9205059942487637e+00 -2.2353022138024023e+00 + 7.5210985727730661e-01 2.3671226770892577e+00 -2.5355972809449026e+00 + 1.2669698321563216e+00 2.7198703749770239e+00 -2.7345058629819197e+00 + 1.8502560055442689e+00 2.9336530010905024e+00 -2.8601476509621664e+00 + 2.4706627196912163e+00 2.9689219795197261e+00 -2.9442207351478045e+00 + 3.1119312071416498e+00 2.7775123740470917e+00 -2.9990250499993465e+00 + 3.7255498521159285e+00 2.3122294488666277e+00 -2.9822023652751195e+00 + 4.1988741940545751e+00 1.5963395458987026e+00 -2.8085625325414139e+00 + 4.4073295708759472e+00 7.4350363106742234e-01 -2.4164234531625821e+00 + 4.2730732551839905e+00 -6.9070204363024204e-02 -1.7969098923948525e+00 + 3.8152076166142748e+00 -6.1585025315440556e-01 -1.0410275515360494e+00 + 3.1788685892927191e+00 -7.7207539581967610e-01 -3.2165265810985066e-01 + 2.5449479834967947e+00 -5.8714592491315343e-01 2.2483608366027152e-01 + 2.0441838280832094e+00 -2.1283546923666607e-01 5.5796510579640313e-01 + 1.7560907670829240e+00 1.1389936733658845e-01 7.3704994272412505e-01 + 1.7112379272944731e+00 4.9414915524210196e-01 5.3603571830650798e-01 + id 12211 + loc 2.6112499833106995e-01 7.5453704595565796e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4784173287045209e-01:3.9048096734063548e-01:4.5809672168570370e-01:4.2992260223718304e-01:1.1514681464107557e+00:2.6329630874780063e-01:2.0001008731301821e+00:4.4783725445312339e-01:2.5713361289384986e+00:3.8528761840671732e-01:3.0928791053915026e+00:3.0630836462152511e-01:3.8437709021844961e+00 + CVs 20 + 7.4833705438005854e-02 2.6461751218271523e-01 1.2386227740205455e-01 + 1.4529924957702084e-01 5.1383015829259093e-01 2.0601270817664660e-01 + 2.2227497604880564e-01 7.6908017847852184e-01 2.6690347273572301e-01 + 3.2022047404628562e-01 1.0506100144825754e+00 3.2037082112512477e-01 + 4.5308847634000726e-01 1.3599968989143962e+00 3.5243942833836434e-01 + 6.3942684903359259e-01 1.6919447614862126e+00 3.3928240453857639e-01 + 8.9261387087122357e-01 2.0240760900322678e+00 2.4640506643332738e-01 + 1.2059626283747567e+00 2.3153705990052726e+00 4.0288576015951483e-02 + 1.5471101221441141e+00 2.5184506002441585e+00 -2.9728268075366104e-01 + 1.8665709919287539e+00 2.5907810355894698e+00 -7.5914076453760460e-01 + 2.1160212415876143e+00 2.5013806057329959e+00 -1.3077924099912872e+00 + 2.2627380119306175e+00 2.2490031580734371e+00 -1.8670546533083994e+00 + 2.3152967509161999e+00 1.8987206125385432e+00 -2.3499744278395025e+00 + 2.3220599544104306e+00 1.5810056604223770e+00 -2.7188967158482829e+00 + 2.3354140890053556e+00 1.4952316935954109e+00 -2.9413397255188083e+00 + 2.3817168681580863e+00 1.7959994619177901e+00 -2.8122585116695653e+00 + 2.3578949893911458e+00 2.1271883074874038e+00 -2.0394230369157387e+00 + 1.9650911767494050e+00 1.7231307350058311e+00 -8.6772323401325635e-01 + 2.0465261250266171e+00 1.9626143368235969e+00 -8.6028091927257733e-01 + id 12212 + loc 2.6098051667213440e-01 2.4175388738512993e-02 406 + blend 0.0000000000000000e+00 + interp 5.2888999922611202e-01:3.8114485102389445e-01:1.2831630033399499e-01:3.7184931200578164e-01:1.0071127208850366e+00:5.2888471032611983e-01:1.8201598532043932e+00:3.7461895441856369e-01:2.1382745355066302e+00:2.8239269462250949e-01:3.0138226097256933e+00:3.7408581417729081e-01:3.6491973332656320e+00 + CVs 20 + 1.5635693565961846e-02 9.2449266754007567e-02 1.7736530119025616e-02 + 3.0295639337835037e-02 1.8498349829167871e-01 4.8133299824314794e-02 + 6.0221241957459884e-02 2.9384829853201738e-01 7.7811989683331390e-02 + 1.0854563237107873e-01 4.1867168559766355e-01 8.9580877416051807e-02 + 1.7465144052754777e-01 5.5692022954913867e-01 7.6194595980502461e-02 + 2.5703806247480815e-01 7.0443444932930765e-01 3.0867140622479972e-02 + 3.5345325669014149e-01 8.5489135955452222e-01 -5.1374482901577812e-02 + 4.6239856496914489e-01 1.0006607747462648e+00 -1.7194191852920199e-01 + 5.8320086270086358e-01 1.1341042025241856e+00 -3.2841822454058456e-01 + 7.1149063233925280e-01 1.2483480778842577e+00 -5.1751912410825363e-01 + 8.3684311694642677e-01 1.3377630208818352e+00 -7.3639933234894572e-01 + 9.4990170801050788e-01 1.3994225939809677e+00 -9.7902452336793511e-01 + 1.0486871792742634e+00 1.4345197710537718e+00 -1.2352225744080312e+00 + 1.1323691761173709e+00 1.4469924729510306e+00 -1.4950086442293198e+00 + 1.1953985569072254e+00 1.4409729164485574e+00 -1.7511210817541409e+00 + 1.2339691474367600e+00 1.4190125528499922e+00 -1.9985794798215299e+00 + 1.2522156386582717e+00 1.3826693977189435e+00 -2.2330458276300273e+00 + 1.2574447960654771e+00 1.3381404009476898e+00 -2.4478555252779106e+00 + 1.2983582579608592e+00 1.3298964135999085e+00 -2.6144045367910760e+00 + id 12213 + loc 7.3535984754562378e-01 4.0444222092628479e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4173402752480248e-01:2.7770453495729153e-01:2.3461033999296999e-01:2.5168756222229338e-01:9.9084088419637828e-01:3.2708079434650789e-01:1.5824027763611166e+00:3.4173061018452722e-01:2.0275534330557834e+00:3.0255057028218424e-01:2.8199429810712404e+00:2.7695631448763153e-01:3.2967134538821519e+00 + CVs 20 + -1.4703217171386501e-01 3.3767046677676960e-01 1.3196658569235911e-01 + -3.1668943173951625e-01 6.9877259230472677e-01 2.6849022121548616e-01 + -5.2780114594568772e-01 1.0678664628050116e+00 3.8833313774007439e-01 + -7.9097007592365809e-01 1.4177447812273452e+00 4.7748002861285760e-01 + -1.1064949118685752e+00 1.7161800192440106e+00 5.3569438128997793e-01 + -1.4642983119006043e+00 1.9333029093403507e+00 5.7383147565847537e-01 + -1.8433319595840039e+00 2.0534490518418989e+00 6.1163317325063393e-01 + -2.2141228855442163e+00 2.0804131368248955e+00 6.6403335661622553e-01 + -2.5501582983185007e+00 2.0327354470155292e+00 7.3509378311500462e-01 + -2.8256232780900801e+00 1.9160953613733400e+00 8.2109022384643915e-01 + -2.9921402174378189e+00 1.7291378745605710e+00 8.9542175731152629e-01 + -3.0352791816205400e+00 1.5336687965472815e+00 9.1523619893482722e-01 + -3.0183319751221349e+00 1.3693718856692261e+00 8.9502379983667824e-01 + -2.9713773462723472e+00 1.2440657376981654e+00 8.5368866824742184e-01 + -2.9227021208735509e+00 1.1819207848927771e+00 8.0885417345035704e-01 + -2.8676807898685661e+00 1.1727077319945991e+00 7.7814474918275467e-01 + -2.7796717823892290e+00 1.2062584085065593e+00 7.6595609478762960e-01 + -2.6424534893411913e+00 1.2730304014717968e+00 7.6885454786848606e-01 + -2.5427375375778296e+00 1.2501873089621915e+00 6.8326043909823453e-01 + id 12214 + loc 4.7954875230789185e-01 3.1895112991333008e-01 397 + blend 0.0000000000000000e+00 + interp 4.6529403454848539e-01:4.5865426215262656e-01:7.6741287755849408e-01:4.6528938160813993e-01:1.0280691695606810e+00:3.8723338323086837e-01:1.6268129619243838e+00:3.1281770359407957e-01:2.2224560667918487e+00:3.7450273943693024e-01:3.2188896164025409e+00:3.1536734266184863e-01:3.9706904956334985e+00 + CVs 20 + -2.7728348799939140e-01 2.2867804576727102e-01 -1.2450331555275949e+00 + -5.4283223746622999e-01 1.9532926733064238e-01 -2.0208087122228164e+00 + -8.2032542965315214e-01 6.2323027899302552e-02 -2.6542285541986339e+00 + -1.1136285292128347e+00 -1.1411452728554072e-01 -3.2602341021278098e+00 + -1.3973459679615146e+00 -3.3097352802378199e-01 -3.8290876877754503e+00 + -1.6514554311901462e+00 -5.8365337455331823e-01 -4.3549651001684202e+00 + -1.8744680992316760e+00 -8.6625700141602602e-01 -4.8297660553541180e+00 + -2.0796236680075988e+00 -1.1710429542929122e+00 -5.2437707492549768e+00 + -2.2622673979244379e+00 -1.4848739531327739e+00 -5.5990689334480104e+00 + -2.4153827980990301e+00 -1.7964912855869759e+00 -5.9038391555786172e+00 + -2.5392431681819891e+00 -2.1029404434250933e+00 -6.1709804575644336e+00 + -2.6444996359371244e+00 -2.4172082413035971e+00 -6.4175452245663109e+00 + -2.7438198871023118e+00 -2.7592456920325539e+00 -6.6545375180032611e+00 + -2.8430629799515907e+00 -3.1369262877702742e+00 -6.8803345665491609e+00 + -2.9455638440477490e+00 -3.5501321682092000e+00 -7.0860591404677411e+00 + -3.0539940517601480e+00 -3.9933276323581977e+00 -7.2560978557715003e+00 + -3.1652533601389861e+00 -4.4567822100398011e+00 -7.3720308876625102e+00 + -3.2713986857633204e+00 -4.9311111393936109e+00 -7.4210389160144121e+00 + -3.3886180124669751e+00 -5.4757847425577841e+00 -7.4158081621719045e+00 + id 12215 + loc 9.4738429784774780e-01 3.8088299334049225e-02 1074 + blend 0.0000000000000000e+00 + interp 4.3760762566117534e-01:3.2188881319579521e-01:5.0359830441672770e-01:2.7483680782241504e-01:1.0880437505392537e+00:1.7462358210409354e-01:2.0025002171152457e+00:4.3760324958491875e-01:2.5976667029294358e+00:2.7366119213568718e-01:3.5598626037604992e+00 + CVs 20 + -1.7344211746835131e-01 1.0867920802934450e-01 2.0868747066239746e-01 + -3.5949804231086446e-01 2.1164580551077616e-01 4.0064682946644681e-01 + -5.5173600308190840e-01 3.2090224954778385e-01 5.8077352947942906e-01 + -7.4226131121782990e-01 4.4372853765390841e-01 7.5112888646133202e-01 + -9.2865855617832971e-01 5.8555139109318299e-01 9.1355844046944434e-01 + -1.1061249233101860e+00 7.5091351845646859e-01 1.0717466695430795e+00 + -1.2667663835114076e+00 9.4317834967403369e-01 1.2321947151242558e+00 + -1.4035829784111467e+00 1.1639920052426849e+00 1.4047513008102548e+00 + -1.5134006682384187e+00 1.4092953168524447e+00 1.6074464879893267e+00 + -1.5923902425739831e+00 1.6655780420582758e+00 1.8605211022231032e+00 + -1.6330766575063924e+00 1.9070129380585137e+00 2.1762265925047442e+00 + -1.6302545942526772e+00 2.0970736420236871e+00 2.5539650638930480e+00 + -1.5922070558073491e+00 2.2066429784213684e+00 2.9799408682968096e+00 + -1.5408541005715350e+00 2.2226038668478569e+00 3.4351819732155722e+00 + -1.5038117756075540e+00 2.1395036185516521e+00 3.9022684325780426e+00 + -1.5094386511408209e+00 1.9489566562326033e+00 4.3640439931773845e+00 + -1.5765408451721272e+00 1.6373567378853293e+00 4.7853392372650028e+00 + -1.6999557797447946e+00 1.2151256292701200e+00 5.1120338917538968e+00 + -1.8498611327487320e+00 7.5448240302370040e-01 5.3242007789301820e+00 + id 12216 + loc 3.0437532067298889e-01 4.5783570408821106e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5553480947133274e-01:3.0604796702393355e-01:1.0093692952123146e-01:3.2538738519037569e-01:9.4609769280730793e-01:3.8751791467661950e-01:1.3521469485487247e+00:3.2921394971788370e-01:2.0128007612810004e+00:4.5553025412323805e-01:2.9289402365365111e+00:3.4684095318631353e-01:3.6301229309561793e+00 + CVs 20 + -1.4499621382300346e-01 2.5564862267019167e-01 1.1061429168568507e-02 + -2.8283635112636418e-01 4.8262757123567357e-01 -1.1315391137683761e-02 + -3.9887002504299013e-01 6.7247324685088861e-01 -4.4535657025438623e-02 + -4.8318028877047292e-01 8.3661680503281755e-01 -7.2124284558225671e-02 + -5.3488238645976638e-01 9.9099849572448884e-01 -9.0422235219994471e-02 + -5.5781671083152129e-01 1.1569806715035265e+00 -9.6499494943996511e-02 + -5.5510284455709513e-01 1.3501687428738283e+00 -9.8592713069716204e-02 + -5.2967077484157710e-01 1.5801085850029153e+00 -1.1581357138383661e-01 + -4.9672146625745567e-01 1.8571957982692222e+00 -1.6575214145196596e-01 + -4.9129910448021319e-01 2.1824215423063480e+00 -2.5728647574078001e-01 + -5.4781576292894318e-01 2.5382929162967955e+00 -3.9440544104914416e-01 + -6.8338126687196399e-01 2.8951554949769029e+00 -5.8314680259258722e-01 + -8.9054130953483412e-01 3.2075189343636263e+00 -8.2938098694854567e-01 + -1.1148049901949941e+00 3.4157891146595785e+00 -1.1511222960486187e+00 + -1.3002049653280714e+00 3.4765894353386413e+00 -1.6025007168526346e+00 + -1.4838297275606576e+00 3.3555070360243580e+00 -2.1888512162104732e+00 + -1.7390611133185057e+00 3.0228061466436724e+00 -2.8193509568050592e+00 + -2.0702342133043685e+00 2.5042945178530616e+00 -3.3373257908341918e+00 + -2.2177815234769329e+00 2.3698455485592582e+00 -3.3035663868784142e+00 + id 12217 + loc 3.5371917486190796e-01 3.2997569441795349e-01 411 + blend 0.0000000000000000e+00 + interp 4.1651321794464741e-01:3.2781057930180224e-01:3.9439021136663033e-01:2.8779058810482433e-01:1.0244633709493320e+00:3.5175112890708166e-01:1.9915230947617650e+00:3.9503308125031728e-01:2.8515679522291242e+00:2.5836028145921774e-01:3.1507636483324486e+00:4.1650905281246797e-01:3.9993387976412729e+00 + CVs 20 + 2.4013104568126421e-02 1.0700959643588923e-01 -7.8647908094724439e-01 + 5.0939864312793862e-02 1.4093040121877348e-01 -1.3913025055145534e+00 + 1.1583361259503808e-01 1.6539310779878025e-01 -1.9417112294315002e+00 + 2.2187663626388510e-01 1.9888161087862777e-01 -2.4863010045314984e+00 + 3.5913605809633320e-01 2.3671845306275707e-01 -3.0178955536219885e+00 + 5.1249414626712675e-01 2.7397231039274161e-01 -3.5345487647954608e+00 + 6.6735571657453829e-01 3.0161048159746140e-01 -4.0365002471342626e+00 + 8.1246872323644692e-01 3.0507021283575853e-01 -4.5277526904280521e+00 + 9.3847463236493556e-01 2.6575591884559624e-01 -5.0184477794416633e+00 + 1.0365957825911376e+00 1.6226622561169046e-01 -5.5147063984314082e+00 + 1.1007503561085064e+00 -1.9698585267506896e-02 -6.0034672458886602e+00 + 1.1306405951248930e+00 -2.7154512600328973e-01 -6.4583063399023972e+00 + 1.1308871107873326e+00 -5.7006253487058967e-01 -6.8666270627925226e+00 + 1.1070517561145887e+00 -8.9800894413094978e-01 -7.2348843373717413e+00 + 1.0650877413798934e+00 -1.2480422507246218e+00 -7.5710945326774963e+00 + 1.0110094150263891e+00 -1.6173800528587390e+00 -7.8769763428168869e+00 + 9.4811064406209855e-01 -2.0056156663173170e+00 -8.1511736935473529e+00 + 8.7636796576280407e-01 -2.4070733313368988e+00 -8.3895000609308923e+00 + 8.0368913455836577e-01 -2.6709670123457836e+00 -8.5705017297560708e+00 + id 12218 + loc 5.9999257326126099e-01 6.2659060955047607e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5885623681654536e-01:3.1576310825041359e-01:2.8302316788190784e-01:3.9658609231017811e-01:9.0729336240191238e-01:3.1404306546741528e-01:1.1372717612972447e+00:3.5833646313156309e-01:2.0103732272205317e+00:4.5885164825417724e-01:2.6743842868888068e+00:3.0882753063368668e-01:3.0233457661932093e+00:4.1886845804293482e-01:3.5401735081697976e+00 + CVs 20 + 6.3405403520154044e-02 7.9361169220549355e-01 -3.4980085007310269e-01 + 1.8134987351923498e-01 1.5985327953826356e+00 -6.3618845418271097e-01 + 3.7134405282290117e-01 2.3962990288262178e+00 -8.1476798058521416e-01 + 6.3787823399934607e-01 3.1429512284520156e+00 -8.4594381733233326e-01 + 9.7510597813406952e-01 3.7896718660855360e+00 -6.9722361040108605e-01 + 1.3590808411070445e+00 4.2822965101188872e+00 -3.5383791551402277e-01 + 1.7399204170312745e+00 4.5313946793961559e+00 1.8485330350653162e-01 + 2.0445879611213607e+00 4.4762177648220938e+00 8.5709991737903990e-01 + 2.1905871408689399e+00 4.1587418438577339e+00 1.5506912778715589e+00 + 2.1351715253580017e+00 3.7045147055843715e+00 2.1637178115979863e+00 + 1.8959377701096152e+00 3.2617109330513054e+00 2.6706580879344122e+00 + 1.4711431562337056e+00 2.8637154444561919e+00 3.1375028229412436e+00 + 8.1974591344339487e-01 2.4109453947350086e+00 3.6174454355270980e+00 + -5.5230029299847813e-02 1.7519838265563754e+00 4.0774062370304947e+00 + -1.0256224003124428e+00 7.4659229351848788e-01 4.5523181155822536e+00 + -1.5551748828158625e+00 -4.9572543616768794e-01 5.2441799125722737e+00 + -1.3181726712434252e+00 -1.2640554702585645e+00 5.8873232898330352e+00 + -7.0623428217274387e-01 -1.4748723342636376e+00 6.2370149834265263e+00 + 2.8260873213854609e-01 -1.2191596815024961e+00 6.6946134747089516e+00 + id 12219 + loc 6.0808110237121582e-01 7.8885829448699951e-01 261 + blend 0.0000000000000000e+00 + interp 4.3163445966840657e+00:8.5153450735504765e-01:8.1596304223610239e-01:5.7585460594837823e-01:9.3844089414752263e-01:3.6947765354680046e-01:1.5269804509757052e+00:4.1043026596326088e-01:2.0199880230729903e+00:4.5945723365294294e-01:2.7648620266718784e+00:3.2428039238457189e+00:2.9385214868664211e+00:4.3163345966840660e+00:2.9542473815866535e+00 + CVs 20 + -8.7535113106618201e-01 4.5473047528146471e-01 -5.5076870284058743e-01 + -1.6023537547075011e+00 6.9793473148835794e-01 -8.3798919349559164e-01 + -2.2952658675235265e+00 7.7246405043254363e-01 -9.3202816448855841e-01 + -2.9792421903210533e+00 7.6633510938262905e-01 -9.1696283443995719e-01 + -3.6496208460145292e+00 7.4231959762912436e-01 -8.7035513377366680e-01 + -4.3241243184038041e+00 7.1524777586600030e-01 -8.6084858606837578e-01 + -5.0165644324167546e+00 6.7784713954621933e-01 -9.4088391910003843e-01 + -5.7173831292656736e+00 6.3252537966274214e-01 -1.1455481543106598e+00 + -6.4047749751733987e+00 5.9289503468891502e-01 -1.4882401908207195e+00 + -7.0633810299414943e+00 5.6556446371598423e-01 -1.9613731636717531e+00 + -7.6854241142862811e+00 5.2919556868308071e-01 -2.5548050941833460e+00 + -8.2564063209535821e+00 4.2212829064807966e-01 -3.2692376657712723e+00 + -8.7308134463905436e+00 1.5356260549164880e-01 -4.0958860650935236e+00 + -9.0274034770290843e+00 -3.4392458803353643e-01 -4.9814171206438473e+00 + -9.0704929175454545e+00 -1.0640294640807380e+00 -5.8057239596441166e+00 + -8.9246944183919759e+00 -1.9013698727660224e+00 -6.3840879268147619e+00 + -8.8262926164087254e+00 -2.7248909500308054e+00 -6.5986024313786675e+00 + -8.8803345123205819e+00 -3.4452630035311707e+00 -6.5494368149056470e+00 + -8.8249047639788305e+00 -4.0592884064396504e+00 -6.6730314030648419e+00 + id 12220 + loc 5.6483244895935059e-01 3.3963593840599060e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3026483652767461e-01:3.9786342834125293e-01:4.1195132185505812e-01:4.3026053387930935e-01:9.7501521888163767e-01:3.4590767977545606e-01:1.8092774318373945e+00:2.7326001739755190e-01:2.6233972348433334e+00:3.6447104144519710e-01:3.0233486981072488e+00:4.1272909553170434e-01:3.9199637034748180e+00 + CVs 20 + -5.3204018255166248e-02 3.6430912127259601e-01 -8.8746579820475069e-03 + -1.2937355315764867e-01 7.1501224973648136e-01 2.5101654596274392e-02 + -2.1674802801502796e-01 1.0500796588989743e+00 1.0258405825666378e-01 + -3.1168920407901057e-01 1.3651587081399095e+00 2.2893649584139031e-01 + -4.1068437149569148e-01 1.6464083774048885e+00 4.0999784580334875e-01 + -5.0449875969311098e-01 1.8773776936187891e+00 6.4629501279200985e-01 + -5.7963336461669235e-01 2.0431626703920669e+00 9.2941576947491011e-01 + -6.2262693358194288e-01 2.1360984571567747e+00 1.2423803737202583e+00 + -6.2401239242479467e-01 2.1567566038507113e+00 1.5651089631868609e+00 + -5.7956875755275261e-01 2.1106596815997927e+00 1.8786932441631354e+00 + -4.9076174209146323e-01 2.0056453369519232e+00 2.1649139939571289e+00 + -3.6557597453494306e-01 1.8493003317996402e+00 2.4094178416279894e+00 + -2.1553215493031483e-01 1.6473195457840810e+00 2.6046402385521596e+00 + -6.1713535134284785e-02 1.4206553628150649e+00 2.7380826456714615e+00 + 6.6057135679348331e-02 1.2117870931921400e+00 2.7943147904404775e+00 + 1.5375827258426766e-01 1.0329851502755873e+00 2.7669744155408567e+00 + 2.2733275272374981e-01 8.2816163295775458e-01 2.7039502335191603e+00 + 3.2898346496837266e-01 5.3829229515959309e-01 2.7063720913104330e+00 + 3.9336624032111978e-01 5.6659200957290679e-01 2.8056966171213347e+00 + id 12221 + loc 1.2876478955149651e-02 6.9260579347610474e-01 1055 + blend 0.0000000000000000e+00 + interp 4.3952318621588854e-01:3.0245848591820068e-01:1.3575758312632802e-03:3.7473748536237905e-01:1.6665300494804436e-01:3.4970190850228006e-01:9.6927265373763272e-01:4.3951879098402641e-01:1.2256853090786366e+00:3.8114993321353569e-01:1.8968227613356379e+00:3.3896929257909147e-01:2.0763429269434628e+00:3.2018232824867104e-01:3.2310817988417435e+00 + CVs 20 + -1.7535555990619817e-01 3.3934583682906666e-01 -3.3792934243394857e-01 + -2.6083976525791031e-01 6.2172540835036239e-01 -6.3045254897090930e-01 + -2.9794781263804904e-01 8.8964506401873500e-01 -8.9961655969508980e-01 + -3.0454984015210307e-01 1.1665411276417872e+00 -1.1449494919709235e+00 + -2.9205321520148608e-01 1.4457917791475399e+00 -1.3424167861597929e+00 + -3.0934317733381278e-01 1.7085857524367398e+00 -1.4768982304512690e+00 + -3.9644824466376560e-01 1.9421954698914150e+00 -1.5626717921851723e+00 + -5.6132123911575049e-01 2.1608336034847069e+00 -1.6365542675158722e+00 + -8.0450376984356042e-01 2.3609189313620229e+00 -1.7313076899086091e+00 + -1.1100625449230412e+00 2.5014953193772405e+00 -1.8715458876452038e+00 + -1.4403635764454079e+00 2.5349100145410048e+00 -2.0638362483334625e+00 + -1.7514791338585443e+00 2.4514391250689842e+00 -2.2839027609830538e+00 + -2.0179795670284086e+00 2.2771138879502582e+00 -2.5035900004756333e+00 + -2.2303440390696014e+00 2.0389649036575666e+00 -2.7132281743325035e+00 + -2.3864445257577072e+00 1.7556516021102520e+00 -2.9153507076535252e+00 + -2.4821706674026003e+00 1.4440284068925375e+00 -3.1035672845050746e+00 + -2.5147004786098774e+00 1.1189871281331354e+00 -3.2611612454556389e+00 + -2.4849498631593914e+00 7.8518566704508830e-01 -3.3734291568298711e+00 + -2.4421828506148269e+00 5.7434154618279765e-01 -3.4379919167420621e+00 + id 12222 + loc 8.8658100366592407e-01 3.0205124616622925e-01 406 + blend 0.0000000000000000e+00 + interp 4.9362806533776726e-01:2.5008777714719660e-01:3.6564221557194510e-01:4.9362312905711392e-01:1.0219829895486594e+00:2.8530116984037690e-01:1.9585488833889859e+00:2.7788152472283950e-01:2.3707220503435065e+00:3.5923011892222589e-01:3.1557489025041514e+00:3.2451295507008571e-01:3.9821231555996852e+00 + CVs 20 + -1.6406808641517567e-01 2.7428202972882121e-01 -4.4997379452935124e-02 + -2.5153484967847800e-01 4.7495577669971933e-01 -1.2166235659672982e-01 + -3.4348923670702380e-01 6.5261364550815593e-01 -2.0026779625330710e-01 + -4.6247040255197219e-01 8.1837202519372143e-01 -2.7434928896660910e-01 + -6.0677095367594691e-01 9.6610649362110834e-01 -3.4503778070215563e-01 + -7.7147234506281015e-01 1.0906015675541072e+00 -4.1374152792925173e-01 + -9.4767302623383498e-01 1.1885342394766227e+00 -4.8262076069700549e-01 + -1.1241098890238927e+00 1.2600727108123384e+00 -5.5469661064225240e-01 + -1.2951768164980171e+00 1.3088172368905251e+00 -6.3224494800423603e-01 + -1.4675351128634551e+00 1.3387371808811772e+00 -7.1473620130917581e-01 + -1.6491563904076214e+00 1.3512114942020692e+00 -8.0108501096233731e-01 + -1.8321705908050041e+00 1.3460794920329593e+00 -8.9213494011760497e-01 + -2.0018844332318766e+00 1.3261661280871566e+00 -9.9002447138113092e-01 + -2.1571671460772186e+00 1.2953158287492550e+00 -1.0956864307400542e+00 + -2.3103743131802141e+00 1.2540782693705717e+00 -1.2083485772599234e+00 + -2.4697563253628756e+00 1.2019334472672458e+00 -1.3260441757283201e+00 + -2.6279069123457468e+00 1.1432813257076457e+00 -1.4459166942543884e+00 + -2.7690316121278915e+00 1.0867667046315856e+00 -1.5659324047343730e+00 + -2.8589269634561028e+00 1.0245557722076688e+00 -1.6901965438842872e+00 + id 12223 + loc 9.3627923727035522e-01 3.1338831782341003e-01 1085 + blend 0.0000000000000000e+00 + interp 4.6398149606193534e-01:3.3497231203974359e-01:5.7897623136263243e-01:4.6397685624697477e-01:1.0939095151699942e+00:3.3820780872473455e-01:1.8196563807534942e+00:2.9044238459655880e-01:2.2379922613535070e+00:4.0921451093573175e-01:2.9551647226604989e+00:3.4837475268724793e-01:3.8989214522197919e+00 + CVs 20 + 2.1781080848240664e-01 3.3237721019384847e-01 -6.1423063570016700e-02 + 4.0927054853331984e-01 6.6669661158573579e-01 -1.1967130189741432e-01 + 6.0933249982221971e-01 1.0033593999548527e+00 -1.7514506281803610e-01 + 8.4404076587806043e-01 1.3381016323007506e+00 -2.1855784840199938e-01 + 1.1293065824458803e+00 1.6615658845780501e+00 -2.3161139850399692e-01 + 1.4720110515667568e+00 1.9584564528872721e+00 -1.9630923981180992e-01 + 1.8663373017038816e+00 2.2100035886078944e+00 -9.9142880438399361e-02 + 2.2953072403262444e+00 2.3993160464791075e+00 6.4917794129204176e-02 + 2.7365636168067540e+00 2.5163026115377782e+00 2.9035820826679193e-01 + 3.1697852187280833e+00 2.5595128288203783e+00 5.5989605293708433e-01 + 3.5857157953365233e+00 2.5350843032939014e+00 8.4875084233841613e-01 + 3.9867403317331713e+00 2.4509251412728967e+00 1.1343688083895320e+00 + 4.3764328608061156e+00 2.3141441675700021e+00 1.3979950895908482e+00 + 4.7446221492880287e+00 2.1412558041751093e+00 1.6221569058125822e+00 + 5.0642584292428738e+00 1.9696787120543782e+00 1.8038018238588081e+00 + 5.2918657981031503e+00 1.8492593678677498e+00 1.9564319668086492e+00 + 5.3626341743359323e+00 1.8101644424164989e+00 2.1179815851331392e+00 + 5.2997203800326211e+00 1.7885118971744702e+00 2.3036203440482996e+00 + 5.5912803144753180e+00 1.7858481689417254e+00 2.1371770938773023e+00 + id 12224 + loc 3.4625688195228577e-01 4.2083868384361267e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0379896883030428e-01:3.4561250719886494e-01:4.8911516465127480e-02:5.0379393084061597e-01:8.9071303683907566e-01:3.1595248930942404e-01:1.4537242382076838e+00:3.7091555300704532e-01:2.0058621301307391e+00:3.4082676737144213e-01:2.5178140792558144e+00:3.3960077672672800e-01:2.9998318320968078e+00:4.1399816554216778e-01:3.3683533513112924e+00 + CVs 20 + 4.0460539097766551e-01 4.2496034553150364e-01 2.6301908431270515e-01 + 7.5654418727101480e-01 7.9785990185070976e-01 4.9376189274325527e-01 + 1.1060818065587406e+00 1.1633148833887412e+00 7.1529603176321910e-01 + 1.4513406876676491e+00 1.5484918765760876e+00 9.7480320836647150e-01 + 1.7458069438945143e+00 1.9464316764098324e+00 1.3135666131102242e+00 + 1.9381259572748677e+00 2.3313713758470453e+00 1.7473281074801494e+00 + 1.9794751026888109e+00 2.6660680431718591e+00 2.2606374914122283e+00 + 1.8216054796692893e+00 2.9047797008164977e+00 2.8070745501871439e+00 + 1.4488372275376966e+00 2.9919610174933347e+00 3.2934726313071585e+00 + 9.5177802045739290e-01 2.9034581740399559e+00 3.6244587642152020e+00 + 4.6282452759157122e-01 2.6511976046685906e+00 3.8066032891361168e+00 + 8.6118033742074163e-02 2.2408951282105085e+00 3.9021980788274919e+00 + -1.1902545793960284e-01 1.7479311751868660e+00 3.9489925628768683e+00 + -2.3225355583887686e-01 1.2832850510788467e+00 3.9465222325330336e+00 + -3.6291208452588930e-01 8.7789539300582975e-01 3.8872294147225275e+00 + -5.5694971695997997e-01 5.6241971816018133e-01 3.7866595794800708e+00 + -8.1406313915673501e-01 3.7527894286005198e-01 3.6823149848851675e+00 + -1.0948899506724425e+00 2.8618384043870115e-01 3.5983673911358056e+00 + -1.3405449050424991e+00 1.2802090268173971e-01 3.5320049558454025e+00 + id 12225 + loc 6.3655000925064087e-01 3.1110422685742378e-02 1075 + blend 0.0000000000000000e+00 + interp 3.4696442870335853e-01:3.4696095905907154e-01:4.3243796989402172e-02:3.1743607205352092e-01:6.6952703329308083e-01:2.1177315153342174e-01:1.3255708143429712e+00:2.9424969306778520e-01:2.3940816772169731e+00:2.7820053615795876e-01:3.5910257756845523e+00 + CVs 20 + -1.5829335809623007e-02 2.6214212658269692e-01 2.8555850687697126e-01 + -2.5805092637612548e-02 5.3621871078912098e-01 5.2719037940243751e-01 + -2.6134861482822735e-02 8.1514952282977704e-01 7.3124194463716619e-01 + -2.1141911472133512e-02 1.0891205143052962e+00 9.0787803124679300e-01 + -1.9825975949179675e-02 1.3559088973823012e+00 1.0757194650663613e+00 + -2.6696570651105644e-02 1.6147118376636700e+00 1.2536657284258874e+00 + -3.4321006555028122e-02 1.8608687003631244e+00 1.4513749176273136e+00 + -3.3367060036131546e-02 2.0928474014336977e+00 1.6785265019355742e+00 + -4.7092430711516586e-02 2.3053590242513557e+00 1.9546756539674774e+00 + -1.3634128834878889e-01 2.4612726833728300e+00 2.2804233925638338e+00 + -3.3248353915371487e-01 2.5236510653921949e+00 2.6145019603613204e+00 + -6.1896204596769588e-01 2.4913712781139283e+00 2.9110533175423794e+00 + -9.3258111793431375e-01 2.3569389706821822e+00 3.1574195113827126e+00 + -1.1566975743521042e+00 2.0816797382987700e+00 3.3862758766064442e+00 + -1.2342864934150808e+00 1.6382079303496191e+00 3.6138847721135012e+00 + -1.2626758423902456e+00 1.0250261508923457e+00 3.7856708498308511e+00 + -1.4141608044680778e+00 3.0056608430828002e-01 3.8270246648219848e+00 + -1.8031110819537455e+00 -3.6500531970162164e-01 3.7339224990351072e+00 + -2.1878813029048025e+00 -7.4728168958577124e-01 3.6250768209318247e+00 + id 12226 + loc 1.9637279212474823e-01 3.3508488535881042e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5232806052446678e-01:2.6940636141853341e-01:1.6218194874035241e-01:2.6845714665138054e-01:1.0081072879639521e+00:3.5273134942387324e-01:1.8487558618303557e+00:4.5232353724386154e-01:2.0981500763113070e+00:2.9986492697987022e-01:2.9344936021085886e+00:4.4209055506195671e-01:3.4948709116060854e+00 + CVs 20 + -2.8909098298485852e-01 2.8534137295169398e-01 -1.7972989164774344e-01 + -5.6370263888869276e-01 5.6956234390043647e-01 -3.6378216776789141e-01 + -8.5486746978215256e-01 8.5595428443449517e-01 -5.5250555836687676e-01 + -1.1785541478496402e+00 1.1430345549224536e+00 -7.4026854039212364e-01 + -1.5401037378237041e+00 1.4227440169593166e+00 -9.1748447491732121e-01 + -1.9429700416135089e+00 1.6823389678653888e+00 -1.0746068500684867e+00 + -2.3867210533951768e+00 1.9068257600453336e+00 -1.2048573031369374e+00 + -2.8641314990910014e+00 2.0791552329986676e+00 -1.3077795927500730e+00 + -3.3614777388935826e+00 2.1829847099423891e+00 -1.3875814792890950e+00 + -3.8601645652716643e+00 2.2057199619388479e+00 -1.4532587993221748e+00 + -4.3384706537824549e+00 2.1429888108057646e+00 -1.5202597450002622e+00 + -4.7744652582449625e+00 2.0014641884746101e+00 -1.6080536568789452e+00 + -5.1453939160364763e+00 1.7956770621168705e+00 -1.7312084352264279e+00 + -5.4299874507354797e+00 1.5478455012545589e+00 -1.8945415015890419e+00 + -5.6141023621144734e+00 1.2848466680459913e+00 -2.0926770954294440e+00 + -5.6965235846232130e+00 1.0353595699732971e+00 -2.3118464915250838e+00 + -5.6926217810586852e+00 8.2627529475254879e-01 -2.5367620330709428e+00 + -5.6223869851432866e+00 6.6118377076310464e-01 -2.7608250085348072e+00 + -5.4605663983611219e+00 4.5912856203974317e-01 -3.0009524684516431e+00 + id 12227 + loc 2.9686918854713440e-01 6.6332238912582397e-01 403 + blend 0.0000000000000000e+00 + interp 4.4727662767327342e-01:3.8956223557126479e-01:4.5402712617429297e-01:4.2873762456516357e-01:1.1563372709294530e+00:2.6337000954271339e-01:2.0002080575538939e+00:4.4727215490699673e-01:2.5671693913087159e+00:3.8182963765286121e-01:3.0912178927302736e+00:3.0673417566548639e-01:3.8436464897768428e+00 + CVs 20 + 7.9974665562209127e-02 2.1316252388595108e-01 -2.1951762476980510e-01 + 1.2692039922025308e-01 4.2649977135816097e-01 -4.4408713843933567e-01 + 1.4201512744586675e-01 6.3577686100834585e-01 -6.7233861745481094e-01 + 1.2133695179449955e-01 8.4001601522162472e-01 -9.0350064472608482e-01 + 6.3161019428202736e-02 1.0341484442932136e+00 -1.1333969140436202e+00 + -3.4627547562285699e-02 1.2147521427027219e+00 -1.3566155202423327e+00 + -1.7290556839935323e-01 1.3783470347078839e+00 -1.5667106916469828e+00 + -3.4873348684872585e-01 1.5212503808753852e+00 -1.7568036587046896e+00 + -5.5755769842921976e-01 1.6403811417968228e+00 -1.9206852394854474e+00 + -7.9716665339415282e-01 1.7304554352238104e+00 -2.0535632874512375e+00 + -1.0653961945250443e+00 1.7835159063343269e+00 -2.1508653846513024e+00 + -1.3549505361388650e+00 1.7929663097086559e+00 -2.2074248023852454e+00 + -1.6535371009013331e+00 1.7575439821621808e+00 -2.2180649873048837e+00 + -1.9490084867031048e+00 1.6806839796859963e+00 -2.1781968569224914e+00 + -2.2310852452939169e+00 1.5682334753676548e+00 -2.0841704011488997e+00 + -2.4880094225918139e+00 1.4273066120203759e+00 -1.9352128624758020e+00 + -2.7015128064395655e+00 1.2633201736594417e+00 -1.7405752031418060e+00 + -2.8531839607575211e+00 1.0855863909687176e+00 -1.5223180641645306e+00 + -2.9234096971572026e+00 9.7728822484529410e-01 -1.3681325175067589e+00 + id 12228 + loc 9.5788963139057159e-02 2.9304137825965881e-01 416 + blend 0.0000000000000000e+00 + interp 3.5526574116778770e-01:3.0568107058975985e-01:1.2715004185760448e-01:2.9268198345896662e-01:9.9501482380766570e-01:2.2608079116753804e-01:1.6623455268960234e+00:3.5526218851037605e-01:2.0018421056890787e+00:3.3176344500380628e-01:3.1052012632783477e+00 + CVs 20 + -1.5311230681035165e-01 9.9796397243130566e-02 -4.3864791418111004e-01 + -2.7662139665582158e-01 1.6042960870965350e-01 -7.2832154429138829e-01 + -3.8045017745871634e-01 2.0615497470159558e-01 -9.5287645411609234e-01 + -4.8313397099582578e-01 2.5631618323463989e-01 -1.1686370067061622e+00 + -5.8317666707245286e-01 3.1108725052044295e-01 -1.3717575007552902e+00 + -6.8009200301446271e-01 3.7006004657853742e-01 -1.5596765237442902e+00 + -7.7436589085115881e-01 4.3258054690888287e-01 -1.7317851384402083e+00 + -8.6698363062646555e-01 4.9800218772456789e-01 -1.8892990465859165e+00 + -9.5888216513459645e-01 5.6563200274360503e-01 -2.0350200196010531e+00 + -1.0511343560381827e+00 6.3460239425072751e-01 -2.1743864253681169e+00 + -1.1450582173060435e+00 7.0370869105831224e-01 -2.3160970502675364e+00 + -1.2409735213584867e+00 7.7072863790960655e-01 -2.4681449681566852e+00 + -1.3375153369716717e+00 8.3253324105316040e-01 -2.6335932927159620e+00 + -1.4320022814766697e+00 8.8653035504071831e-01 -2.8119110207204812e+00 + -1.5204343323896323e+00 9.3168199272008101e-01 -3.0008972736884929e+00 + -1.5990180623540324e+00 9.6836465919470549e-01 -3.1965716356358684e+00 + -1.6669738703448136e+00 9.9662953979903512e-01 -3.3955526911218463e+00 + -1.7261280023005201e+00 1.0147883954051236e+00 -3.5962171469292716e+00 + -1.7712216710838986e+00 1.0394767160189387e+00 -3.7203218775921068e+00 + id 12229 + loc 9.2449523508548737e-02 5.3438752889633179e-01 1050 + blend 0.0000000000000000e+00 + interp 4.9534941828434031e-01:4.9534446479015748e-01:1.7991100716618025e-02:4.6111706102508376e-01:4.8872393723942920e-02:2.6014287589261453e-01:8.5131445152667240e-01:4.2238917105330998e-01:1.0707368460429851e+00:2.7658308931520420e-01:2.0746729245357960e+00:3.4254359833678222e-01:2.9469513293744223e+00 + CVs 20 + -2.3584227856015594e-01 4.7618641140360701e-01 -6.7245358043503389e-01 + -3.3731597295127491e-01 9.4270437851318400e-01 -1.2178713479565590e+00 + -3.1184877000842071e-01 1.4175703958194770e+00 -1.6531763882840140e+00 + -1.5932685284460590e-01 1.9036249767584559e+00 -1.9851556257748550e+00 + 1.3362910240074066e-01 2.3782722664142546e+00 -2.1977794989469470e+00 + 5.6296052254296969e-01 2.8022792174034001e+00 -2.2863166319186981e+00 + 1.1173768410035301e+00 3.1217766898929757e+00 -2.2603923384352047e+00 + 1.7716321573740565e+00 3.2638335611527758e+00 -2.1471401145742748e+00 + 2.4405989160254062e+00 3.1708525203466635e+00 -1.9836337689834775e+00 + 3.0086751516998960e+00 2.8809794969690716e+00 -1.7747361822613517e+00 + 3.4086787464208852e+00 2.4952824912249598e+00 -1.4930843770368996e+00 + 3.6348452748704454e+00 2.1088445628277310e+00 -1.1237301199805281e+00 + 3.7124813331997912e+00 1.8055311868053934e+00 -6.9166256934508186e-01 + 3.6793065952006847e+00 1.6296370775088163e+00 -2.4018641122363002e-01 + 3.5631767513674566e+00 1.5837070524165249e+00 1.9763279488877306e-01 + 3.3832263505694224e+00 1.6634599522340612e+00 5.8779316456453978e-01 + 3.1947105072534590e+00 1.8381758413212974e+00 8.8201936577441098e-01 + 3.1232770185182668e+00 1.9528512730730407e+00 1.0794778528810502e+00 + 2.8896643326153115e+00 2.4072275165789425e+00 1.0379081315026091e+00 + id 12230 + loc 2.4208375811576843e-01 1.3121542520821095e-02 397 + blend 0.0000000000000000e+00 + interp 4.1423482384898702e-01:2.5583253223504016e-01:3.7229939430213999e-01:2.8544961754358966e-01:1.0092928816746300e+00:3.1033533451290612e-01:2.0558539833334883e+00:3.9171620081433783e-01:2.7329142118803951e+00:3.9463197342275208e-01:3.1178976265910765e+00:4.1423068150074854e-01:3.8537889937719347e+00 + CVs 20 + -3.0609626886919072e-01 2.8495859295445147e-01 -9.4049567339007856e-01 + -5.5313581841407877e-01 3.6914448906992031e-01 -1.5475583483427160e+00 + -7.8350582997418017e-01 3.6970171982684541e-01 -2.0820389186413166e+00 + -1.0058029588028106e+00 3.3866446169752723e-01 -2.6444871980080178e+00 + -1.2126776025614809e+00 2.6694018523822061e-01 -3.2254302625062783e+00 + -1.4017080290186730e+00 1.4790397729625038e-01 -3.8160212596146268e+00 + -1.5758632176612868e+00 -2.1051214336673452e-02 -4.4081100132307105e+00 + -1.7394324398416914e+00 -2.4310261665805610e-01 -4.9932046343024812e+00 + -1.8944427153914765e+00 -5.2493327683610391e-01 -5.5587100983051627e+00 + -2.0447854783269008e+00 -8.7218668274237832e-01 -6.0849988852204211e+00 + -2.2018116828292600e+00 -1.2870119287634953e+00 -6.5500944394314944e+00 + -2.3758504797359725e+00 -1.7701387312928090e+00 -6.9404081083705140e+00 + -2.5644949683555058e+00 -2.3177000665583902e+00 -7.2518046970996943e+00 + -2.7580670297049776e+00 -2.9146815921680234e+00 -7.4808039661056736e+00 + -2.9501089218811769e+00 -3.5376089022084489e+00 -7.6214396622443559e+00 + -3.1325268334056435e+00 -4.1650906347690384e+00 -7.6681495981047192e+00 + -3.2917118864094057e+00 -4.7798265885221527e+00 -7.6203270443691355e+00 + -3.4251498788400738e+00 -5.3626572539979342e+00 -7.4942476630217953e+00 + -3.5762724682683373e+00 -5.9290290358782816e+00 -7.4275715602018000e+00 + id 12231 + loc 1.3843622058629990e-02 4.9252393841743469e-01 411 + blend 0.0000000000000000e+00 + interp 3.9174302010635348e-01:2.7672201531073948e-01:1.3781184600506713e-01:3.9173910267615242e-01:7.6077044185537701e-01:2.8005400414092868e-01:1.1544966876907061e+00:2.3925695178200590e-01:2.0033999019207691e+00:2.4922444064819196e-01:3.0004322760104469e+00:3.8171813285219197e-01:3.8984697820528948e+00 + CVs 20 + -1.5131260220269485e-01 2.5194666306385627e-01 -8.9007185462222882e-01 + -3.0236837487883717e-01 3.8620266467610970e-01 -1.5198191455636001e+00 + -4.6320599213923508e-01 4.9337028420528672e-01 -2.1108772326834959e+00 + -6.4047052778871671e-01 5.9208367097651393e-01 -2.7457625534885555e+00 + -8.3818080098761483e-01 6.4128934684660288e-01 -3.4152616398894189e+00 + -1.0725878281238828e+00 5.9184520035532928e-01 -4.0957549320390703e+00 + -1.3614899921089223e+00 4.0441111578330746e-01 -4.7508421513955676e+00 + -1.6985505150388309e+00 5.9396256100602729e-02 -5.3432776636979016e+00 + -2.0405627899565979e+00 -4.4262635332933087e-01 -5.8440558577648805e+00 + -2.3197082442702346e+00 -1.0741594021399035e+00 -6.2246622622347365e+00 + -2.4889076290479082e+00 -1.7671304153375711e+00 -6.4710581585155911e+00 + -2.5900226777133168e+00 -2.4555917091562041e+00 -6.6138728111506691e+00 + -2.7207630629516721e+00 -3.1220512159412594e+00 -6.6952319643782507e+00 + -2.9525610062112753e+00 -3.7505814471956054e+00 -6.7358650140514502e+00 + -3.3072886377012343e+00 -4.3024154107910162e+00 -6.7465086397310543e+00 + -3.7363869693973220e+00 -4.7080148001363940e+00 -6.7332614202046397e+00 + -4.1866132969501173e+00 -4.9544370962337716e+00 -6.7047400073439007e+00 + -4.6407653712364336e+00 -5.1049513226946654e+00 -6.6907065520501643e+00 + -5.0653630094642166e+00 -5.2456534421863790e+00 -6.7372859301468235e+00 + id 12232 + loc 2.9577979445457458e-01 9.8909503221511841e-01 1074 + blend 0.0000000000000000e+00 + interp 3.0222612570177765e-01:2.6661147581158140e-01:8.8274948169699652e-01:1.5017615668210843e-01:1.9836344636530820e+00:2.2629554903544968e-01:2.9732030619061409e+00:3.0222310344052067e-01:3.8372617863774039e+00 + CVs 20 + 2.5471503793669298e-01 3.6037160600180906e-01 -2.2627038517380968e-01 + 4.9055541261510105e-01 7.3089985641710076e-01 -4.3909284576318264e-01 + 7.2261349359517391e-01 1.1133071262603629e+00 -6.4072758584007550e-01 + 9.6134072035966545e-01 1.5098745909176527e+00 -8.3702182648039103e-01 + 1.2126362027062496e+00 1.9207969175145807e+00 -1.0407910461565553e+00 + 1.4750681590048629e+00 2.3395303841421380e+00 -1.2834142494236143e+00 + 1.7419167532251292e+00 2.7481450284569520e+00 -1.6250946543811045e+00 + 1.9954927834953209e+00 3.0817938710901052e+00 -2.1428485695049999e+00 + 2.1733591597893471e+00 3.2049759193052374e+00 -2.8390950113827658e+00 + 2.2156766480258976e+00 3.0483292259387196e+00 -3.5861125675113272e+00 + 2.1386329840759104e+00 2.6561171544250044e+00 -4.2714838852231800e+00 + 2.0200153820601949e+00 2.1163007687520610e+00 -4.8495741232201111e+00 + 1.9554695774258481e+00 1.5590870530180474e+00 -5.3336223425108580e+00 + 1.9754841855683134e+00 1.1628628230258620e+00 -5.7638222934773280e+00 + 2.0186140187202382e+00 1.0768065129132638e+00 -6.1401108848832395e+00 + 1.9800566015959977e+00 1.3539377974033546e+00 -6.3365547814446552e+00 + 1.7472197120794042e+00 1.8328030945083054e+00 -6.1139064239156546e+00 + 1.5260503803386576e+00 2.1946238075963320e+00 -5.8607510191588563e+00 + 1.6514527966610983e+00 2.7393142196294158e+00 -6.2837217346285001e+00 + id 12233 + loc 2.6710698008537292e-01 6.8182313442230225e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8870676602059587e-01:2.7789344693694407e-01:7.9953495744994074e-01:4.0880597775312849e-01:1.0922579397453660e+00:4.5065946074809476e-01:1.9292663820449520e+00:4.8870187895293571e-01:2.2469150736637236e+00:4.6603363003422205e-01:2.9312767686533436e+00:4.1886015659859505e-01:3.5401666750908714e+00:3.0974646253906502e-01:3.9964264766694284e+00 + CVs 20 + -1.4381101198068869e-01 1.6411984134020730e-01 2.9480069815560633e-01 + -2.1514459759125770e-01 2.3371178834740122e-01 4.1049103635517553e-01 + -2.6592112524274808e-01 2.8049168178533990e-01 4.6254106562780084e-01 + -3.1057188712482264e-01 3.3655203164641412e-01 5.1205595025472972e-01 + -3.4826743000173915e-01 4.0505252983439982e-01 5.5987277193725082e-01 + -3.7979445687605390e-01 4.8883027286519937e-01 6.0924806759061190e-01 + -4.0834737430207807e-01 5.9006178143028176e-01 6.6511461298546648e-01 + -4.3996758317999585e-01 7.0974276107900747e-01 7.3247754829943867e-01 + -4.8348980291469768e-01 8.4620165170073236e-01 8.1468374720258896e-01 + -5.4914837786389770e-01 9.9412487204590527e-01 9.1162390886777578e-01 + -6.4604402261588489e-01 1.1456119727043725e+00 1.0189502969477648e+00 + -7.8001038233621500e-01 1.2926088324698943e+00 1.1295129033354061e+00 + -9.5273605369763659e-01 1.4290703931948303e+00 1.2377309748722889e+00 + -1.1623732208977224e+00 1.5509794169348790e+00 1.3430151830339350e+00 + -1.4048565001450233e+00 1.6546223561156992e+00 1.4462023918584541e+00 + -1.6741414658945164e+00 1.7360159038325145e+00 1.5445340351444217e+00 + -1.9605389639586490e+00 1.7920982663705014e+00 1.6351077468332078e+00 + -2.2469179960845436e+00 1.8219954083614467e+00 1.7221836545519680e+00 + -2.4958817633429722e+00 1.8248708189222391e+00 1.8099974895575284e+00 + id 12234 + loc 8.3847630023956299e-01 7.7807295322418213e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9346864041470734e-01:4.9346370572830323e-01:6.1186199333327362e-03:3.5082399475514969e-01:5.7575965404486640e-01:4.2082229315523562e-01:1.2301043444481721e+00:3.2264410985075942e-01:1.9717900897140948e+00:3.4293463033019705e-01:2.7749734939783015e+00:3.1424157686934140e-01:3.4610530479623334e+00 + CVs 20 + 1.6686489284767464e-01 2.8878708456636409e-01 -2.2449660052815251e-01 + 3.3323771296972565e-01 5.7573498631364106e-01 -3.9341281577045289e-01 + 4.9271578802800281e-01 8.5049892206008382e-01 -5.4899070064249578e-01 + 6.4306366493035860e-01 1.1099847502555189e+00 -7.0904659073593090e-01 + 7.9008422428021363e-01 1.3592588962656476e+00 -8.7768105023500276e-01 + 9.4220356445042097e-01 1.5964998170404343e+00 -1.0757548376244754e+00 + 1.0983217329602386e+00 1.7982308254544406e+00 -1.3397775775103353e+00 + 1.2460144606640060e+00 1.9338429187305066e+00 -1.6888200791029520e+00 + 1.3695499121228563e+00 1.9847941369195159e+00 -2.1158841825845554e+00 + 1.4573263601030653e+00 1.9466540395610596e+00 -2.6030508768117198e+00 + 1.5082391482816548e+00 1.8258293173323870e+00 -3.1280962711885718e+00 + 1.5247472129416013e+00 1.6327768059935774e+00 -3.6616850816376378e+00 + 1.4981037360156182e+00 1.3853582434184859e+00 -4.1627976820795425e+00 + 1.4034283394763882e+00 1.1313189242618991e+00 -4.5808704232706594e+00 + 1.2210197866526173e+00 9.5474132363287390e-01 -4.8759617375298649e+00 + 9.7477866939634294e-01 9.2542453844442663e-01 -5.0329494400636134e+00 + 7.2970996841703195e-01 1.0551902232802226e+00 -5.0624277940368883e+00 + 4.7021455540245510e-01 1.2409779902825533e+00 -5.0741685415548439e+00 + -8.3082699030774365e-02 1.2230930618436355e+00 -5.3638588516114849e+00 + id 12235 + loc 1.3431132771074772e-02 6.1825078725814819e-01 372 + blend 0.0000000000000000e+00 + interp 3.6299002815245174e-01:2.6260093399437423e-01:8.4655602345489966e-02:8.5387742905902023e-02:1.4160243003429203e+00:3.6298639825217022e-01:2.1650699571553846e+00:2.8103522184678770e-01:3.1067132325439917e+00 + CVs 20 + -3.3319167553601592e-01 7.6168309453681871e-01 -3.1589131024161249e-01 + -6.4939905086045613e-01 1.4876054396467659e+00 -6.4508489744600750e-01 + -8.8371885973293041e-01 2.1373488525368813e+00 -9.8140786723918549e-01 + -9.2752400033569504e-01 2.6238668671377638e+00 -1.3047067257613187e+00 + -7.8088537956693127e-01 2.9184664635161637e+00 -1.5772665490975080e+00 + -5.1023374174820879e-01 3.0928201011380940e+00 -1.7973312855961820e+00 + -1.5535409857871407e-01 3.1836049953490244e+00 -1.9602831129009137e+00 + 2.6184442194694180e-01 3.1990207899570029e+00 -2.0598880262612154e+00 + 7.2149198553368854e-01 3.1428103014731241e+00 -2.0918458436224299e+00 + 1.2173645448386354e+00 3.0133160649316491e+00 -2.0544473850295186e+00 + 1.7289190667073859e+00 2.7970042358607241e+00 -1.9483100801375186e+00 + 2.1683587504171378e+00 2.5033783631138973e+00 -1.7939176700695714e+00 + 2.4557948585514220e+00 2.1849089476701979e+00 -1.5992116625092068e+00 + 2.5091507943492140e+00 1.8601714135989311e+00 -1.3140693434125119e+00 + 2.3484447407857667e+00 1.4036553490542190e+00 -8.3524376872822492e-01 + 2.5041412237110170e+00 8.7701993459136207e-01 -2.9877602882756310e-01 + 3.0594111854819599e+00 5.8437143781956546e-01 -9.5404207824410253e-02 + 3.7234446436427842e+00 6.3929888322866035e-01 -4.0743448664819443e-01 + 4.2953485731021424e+00 1.0843278448036942e+00 -1.2934923991843763e+00 + id 12236 + loc 3.3004274964332581e-01 4.2083868384361267e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7811550842540779e-01:3.2654363613486664e-01:6.4218323245379128e-02:4.7811072727032355e-01:8.6696774360086692e-01:2.7880726733692446e-01:1.4588537281780631e+00:3.2907449464351268e-01:2.5141226819046931e+00:3.6161179213834377e-01:3.3587706595989495e+00 + CVs 20 + 3.0921899789003693e-01 4.0011346050418850e-01 2.2290194590264678e-01 + 5.3192718451067234e-01 7.5749370467300814e-01 4.4622647675567051e-01 + 7.2458751552998757e-01 1.1032502033493055e+00 6.9395387863422786e-01 + 8.9719969914853226e-01 1.4446645586174460e+00 9.8370090707271463e-01 + 1.0288906415916432e+00 1.7683720257433273e+00 1.3271376379821700e+00 + 1.0969141062670336e+00 2.0554267891670897e+00 1.7295269741224226e+00 + 1.0789384907640827e+00 2.2810908145445188e+00 2.1851464101513907e+00 + 9.6072729162412396e-01 2.4183584253615589e+00 2.6737196938564947e+00 + 7.4891865524709744e-01 2.4431456604630251e+00 3.1636871798323121e+00 + 4.8519752261685767e-01 2.3459686090894882e+00 3.6248624563282541e+00 + 2.2591712460763846e-01 2.1365953794406685e+00 4.0464968516669266e+00 + 1.4897904377100535e-02 1.8295800560959528e+00 4.4302959250152973e+00 + -1.0691087160186144e-01 1.4470711537546088e+00 4.7757872787942413e+00 + -8.8663880033723566e-02 1.0392302017063952e+00 5.0815548977156482e+00 + 8.9745233185845152e-02 6.9227610981387944e-01 5.3439213670717338e+00 + 3.6490108495899792e-01 5.0343268039862621e-01 5.5691298817971564e+00 + 6.3831174469492669e-01 5.2733651109485102e-01 5.7628253414781518e+00 + 8.6820986116033527e-01 6.5523447521592804e-01 5.9275945826185339e+00 + 1.1968293243512744e+00 4.6425477942829585e-01 6.2107693019470265e+00 + id 12237 + loc 6.5734529495239258e-01 2.1799936890602112e-01 1048 + blend 0.0000000000000000e+00 + interp 3.0698669659275418e-01:2.6106501432716650e-01:7.2692696721864647e-01:3.0698362672578827e-01:1.2103329990843421e+00:2.7287285282434631e-01:2.0038660558983326e+00:2.9635290497483219e-01:2.8868241093673959e+00:2.5280587320943620e-01:3.2193684642472902e+00:2.6749621264411827e-01:3.9743798203221230e+00 + CVs 20 + -6.9521548764582136e-02 4.7074109712726103e-01 3.3946951536701064e-01 + -1.4669293180837339e-01 9.4877744493465765e-01 6.3852608301551195e-01 + -2.8390405567206295e-01 1.4398222499877782e+00 8.7282830716834237e-01 + -5.2925379783118864e-01 1.9274614826489951e+00 1.0323010637065708e+00 + -9.1429956585077732e-01 2.3576205317983865e+00 1.1346456679032537e+00 + -1.4288999118763899e+00 2.6528339621353481e+00 1.2468310456290235e+00 + -2.0050999301106502e+00 2.7243440960043159e+00 1.4493674952063531e+00 + -2.5234682651944444e+00 2.5267107875204675e+00 1.7413070940208435e+00 + -2.9245670257228182e+00 2.1319847968391112e+00 2.0421831501640928e+00 + -3.2473274211295893e+00 1.6588589140390995e+00 2.2941039093147584e+00 + -3.5538928779134071e+00 1.2288912260430582e+00 2.4802577371056214e+00 + -3.8601212395742173e+00 9.5353068642492822e-01 2.6308919137340210e+00 + -4.1303407739471520e+00 8.5899831061434395e-01 2.8097022456845999e+00 + -4.3893281989515929e+00 8.3135152324800576e-01 3.0790802523418597e+00 + -4.6981485050417167e+00 7.7747481951733344e-01 3.4889012832092150e+00 + -5.0656571498110363e+00 6.4226781178679548e-01 3.9737636920880335e+00 + -5.4592302263474091e+00 3.9701402176222123e-01 4.3017019748678127e+00 + -5.8179390743721582e+00 1.2990155781201862e-01 4.4030971485234662e+00 + -6.2266207961758910e+00 -2.5844922537833842e-01 4.5782912544523953e+00 + id 12238 + loc 8.8026523590087891e-01 5.9744650125503540e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0151535085868693e-01:4.5772135672073966e-01:1.2192260434491509e-03:3.4248250012787385e-01:5.9550643291382555e-01:5.0151033570517833e-01:1.0005076634863945e+00:3.6576575987602344e-01:1.5726650626611289e+00:3.4482357139092373e-01:2.4932903576276044e+00:4.4680257450042904e-01:2.9926851196166426e+00:2.9049850313489822e-01:3.5012961365542301e+00 + CVs 20 + 1.5470714365549998e-01 2.8166422460519902e-01 -1.1085038621685675e-01 + 3.0525778769672518e-01 5.7816916666798246e-01 -2.1388796433082355e-01 + 4.6046988596151628e-01 8.7774779671463521e-01 -3.3951117499302663e-01 + 6.2414993304526156e-01 1.1670675308279104e+00 -5.0894334236053007e-01 + 7.9684150258024711e-01 1.4355533558541600e+00 -7.3438510394359935e-01 + 9.7565303701988304e-01 1.6669437152939470e+00 -1.0243931696811923e+00 + 1.1530492066145821e+00 1.8411580013062894e+00 -1.3798151168836839e+00 + 1.3152627853429337e+00 1.9393531079831026e+00 -1.7914870160918570e+00 + 1.4416044716377983e+00 1.9480043076383740e+00 -2.2417184171472178e+00 + 1.5105458541150070e+00 1.8612163508458150e+00 -2.7059360444392930e+00 + 1.5079730379085627e+00 1.6816499359826642e+00 -3.1534601903686985e+00 + 1.4303824184318064e+00 1.4195456757012348e+00 -3.5499001055374837e+00 + 1.2933691816918158e+00 1.1046936100910094e+00 -3.8613219514607642e+00 + 1.1369844324362932e+00 8.0982370016739069e-01 -4.0687053314259831e+00 + 1.0066767056798072e+00 6.2465539434184159e-01 -4.1764908248990071e+00 + 9.1652201618187745e-01 5.5342894804032827e-01 -4.2097050791155546e+00 + 8.5961493634456287e-01 5.3314904305228539e-01 -4.1655034628195651e+00 + 8.0422538924738718e-01 4.1836384582881836e-01 -3.9889338197624875e+00 + 7.9908970528714185e-01 6.3328595511331631e-01 -4.0856755897064332e+00 + id 12239 + loc 9.5371317863464355e-01 9.5616680383682251e-01 416 + blend 0.0000000000000000e+00 + interp 6.3539068956753730e-01:6.0410715700034168e-01:1.3729392297289522e-01:4.2021272051374914e-01:9.6898324317916817e-01:2.6493825848128083e-01:2.5014636003848061e+00:6.3538433566064167e-01:2.8891230986445291e+00:4.2864587564802814e-01:3.0731340379226575e+00:4.8407074685919194e-01:3.9591117502404414e+00 + CVs 20 + 9.1961319003032360e-01 1.6504641054720567e-01 -1.8628255631337942e-01 + 1.5138741145383128e+00 1.7440911458262065e-01 -3.5386709312488751e-01 + 2.0350632901531998e+00 1.3893875158251290e-01 -4.8904325357968559e-01 + 2.5785630167882916e+00 9.9829780334117268e-02 -5.8504490401090492e-01 + 3.1336527374572114e+00 5.2765811015819730e-02 -6.3515792663423443e-01 + 3.6898297552402655e+00 -6.7013600400924744e-03 -6.3286063674937398e-01 + 4.2361551794203560e+00 -8.3545853936031644e-02 -5.7472009567981719e-01 + 4.7622519489273545e+00 -1.8378379170415438e-01 -4.6270808281632209e-01 + 5.2585455647666830e+00 -3.1303957384819348e-01 -3.0196157493626463e-01 + 5.7158042604090360e+00 -4.7519041347861157e-01 -9.9610629495716085e-02 + 6.1306467602548196e+00 -6.7919495906954119e-01 1.2881750761082827e-01 + 6.5122541774915002e+00 -9.4969597682321960e-01 3.5245984011972337e-01 + 6.8655495156393380e+00 -1.3100869492176104e+00 5.3328491319322546e-01 + 7.1731690958540977e+00 -1.7461183225052495e+00 6.5255396734351834e-01 + 7.4194909799592059e+00 -2.2195236789980921e+00 7.1827800149505405e-01 + 7.6024233925259805e+00 -2.7037342155076560e+00 7.3840694759352865e-01 + 7.7258381149121576e+00 -3.1828791818078450e+00 7.1211913042724972e-01 + 7.7973426121999836e+00 -3.6370896592646735e+00 6.3599123000434721e-01 + 7.8598849391840853e+00 -3.9790820376314926e+00 6.1206663928308858e-01 + id 12240 + loc 2.7435263991355896e-01 9.7575426101684570e-02 1084 + blend 0.0000000000000000e+00 + interp 4.6058527661927329e-01:3.2570076528393926e-01:1.7627358514531799e-01:3.0364058445933323e-01:1.1819764906138670e+00:4.4827739961216334e-01:1.8229138026254925e+00:4.4741740426753590e-01:2.0223202465830612e+00:4.6058067076650711e-01:2.5485116435625166e+00:3.1285261084827160e-01:3.0000001837929946e+00:4.4298895185748793e-01:3.7098187922928294e+00 + CVs 20 + 3.8395026791888692e-01 4.0220947835564896e-01 2.0050075145631263e-01 + 7.0374733567585690e-01 7.4711460742899427e-01 3.3342945439224680e-01 + 1.0292815176401926e+00 1.0831817150567984e+00 4.0770297521065080e-01 + 1.3441131087811788e+00 1.4649490242296412e+00 5.0778416485291678e-01 + 1.5528057501169008e+00 1.8863379926156112e+00 7.1865058273510107e-01 + 1.5697272104850306e+00 2.2792694044335273e+00 1.0486286849173905e+00 + 1.3476623500346201e+00 2.5610733076508465e+00 1.4122060370822556e+00 + 8.9655929506528720e-01 2.6722990207885369e+00 1.6203335656404414e+00 + 4.2002264036293524e-01 2.6360632918914240e+00 1.5227491440164584e+00 + 8.0670188080856020e-02 2.5575115938272859e+00 1.2767032031432892e+00 + -1.8960128056482839e-01 2.4411866445415331e+00 9.8063774417668503e-01 + -4.0687324521824098e-01 2.2539271612615401e+00 6.2593607542113927e-01 + -5.6307559555363451e-01 2.0201849833460876e+00 2.7016158902585369e-01 + -7.0758102885479834e-01 1.8198572070102776e+00 2.1036207046164518e-02 + -8.5661354759413499e-01 1.7389898029122763e+00 -5.1578150763231807e-02 + -8.8214526107832891e-01 1.8560020932854129e+00 8.1858448828998204e-02 + -3.8877933505695006e-01 2.1086876205263292e+00 4.0169147528174143e-01 + 4.4706347556032022e-01 1.9402944247903320e+00 5.2161780844837347e-01 + 3.7897771453005102e-01 2.0232558961659590e+00 6.1972506070642530e-01 + id 12241 + loc 6.1182463169097900e-01 5.5967384576797485e-01 411 + blend 0.0000000000000000e+00 + interp 3.7614138309154616e-01:3.7161463676957673e-01:5.3815196078583760e-02:3.2748048357065856e-01:1.0138942758989276e+00:3.2304103863327299e-01:1.6375467796115113e+00:3.4139381493485549e-01:2.2990522930907060e+00:3.7613762167771525e-01:2.9950783663554938e+00:2.9825943441597857e-01:3.5571177685328248e+00 + CVs 20 + 8.0524212747609059e-01 1.8798774440593830e-01 -1.4950776363020413e-01 + 1.4071602654157365e+00 2.6058697507741163e-01 -2.6198823437028473e-01 + 1.9710579912567556e+00 2.9797623625893632e-01 -3.3533402946664320e-01 + 2.5592384855926325e+00 3.2779060499226476e-01 -3.6487507246484663e-01 + 3.1565065832138770e+00 3.4083409700739575e-01 -3.4866689813609275e-01 + 3.7487249429288951e+00 3.2864377875360118e-01 -2.9372002898126343e-01 + 4.3249162472227498e+00 2.8194681657071330e-01 -2.1141023054940589e-01 + 4.8788921366870515e+00 1.8846200213155817e-01 -1.1293381778351502e-01 + 5.4106130466998623e+00 3.2833738836357762e-02 -1.0068085673213267e-02 + 5.9112525386775889e+00 -1.9781854078361927e-01 8.3162432305289524e-02 + 6.3569859419683237e+00 -5.0276683076468220e-01 1.5601956882331436e-01 + 6.7244555211393600e+00 -8.6267118405229737e-01 2.0865875636322462e-01 + 7.0092567880462102e+00 -1.2542851567305067e+00 2.4825288594593709e-01 + 7.2217121095914667e+00 -1.6647629866117564e+00 2.8128978418957395e-01 + 7.3702217752302639e+00 -2.0854398180704234e+00 3.0635214394480326e-01 + 7.4575223517790015e+00 -2.5027500904591879e+00 3.1690924731313830e-01 + 7.4882056957455001e+00 -2.9050222807890318e+00 3.0947969822702159e-01 + 7.4710837374114440e+00 -3.2966515748844385e+00 2.8089247319567900e-01 + 7.4254297183130920e+00 -3.6758419786525742e+00 2.2802539127684396e-01 + id 12242 + loc 1.2077065557241440e-01 8.7641185522079468e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4392382019037152e-01:4.0239839268594757e-01:4.2436744847926711e-01:4.4391938095216965e-01:9.8291165223541366e-01:3.5235885980514980e-01:1.4399815181078159e+00:2.9831047863811205e-01:2.0564879100394453e+00:3.3398666664735227e-01:2.8528553602437996e+00:2.6159115176327880e-01:3.7100123027962995e+00 + CVs 20 + -1.6839467055880586e-01 1.6407545939121793e-01 2.7325320617301141e-01 + -2.8077169920465256e-01 2.2971401395419133e-01 3.8926217758270654e-01 + -3.6032720895465592e-01 2.4581828093200786e-01 4.2944135796766025e-01 + -4.2848968236264684e-01 2.5033547085905022e-01 4.6490866729568603e-01 + -4.8777967729053723e-01 2.4768176063696751e-01 4.9492385750863588e-01 + -5.4626754705232250e-01 2.4047868194451022e-01 5.1836518255254693e-01 + -6.1572498736889336e-01 2.2712255371216797e-01 5.3297103327606166e-01 + -7.0713186819392226e-01 2.0195176594331193e-01 5.3638263512199080e-01 + -8.2795404068246470e-01 1.5736558180876800e-01 5.2799976369433632e-01 + -9.8044266584315487e-01 8.6709938866117664e-02 5.0949617156594951e-01 + -1.1601127031059624e+00 -1.3138214515925811e-02 4.8512848903965278e-01 + -1.3585731491455948e+00 -1.4342924167171378e-01 4.5960125234807209e-01 + -1.5762705364156979e+00 -3.1292365410540479e-01 4.3543599222378537e-01 + -1.8301137096046398e+00 -5.3914405618389738e-01 4.1655980420275895e-01 + -2.1358052947150261e+00 -8.2344701253433616e-01 4.1412002867213360e-01 + -2.4862776432223201e+00 -1.1360309764589376e+00 4.4193936097561853e-01 + -2.8588903154005521e+00 -1.4427073442161138e+00 5.0656025337582400e-01 + -3.2299968478851104e+00 -1.7234167130983495e+00 6.0730793509326197e-01 + -3.4674526367040612e+00 -1.9282676865798867e+00 6.9295337657018985e-01 + id 12243 + loc 8.5304397344589233e-01 1.3297057151794434e-01 406 + blend 0.0000000000000000e+00 + interp 4.0204431734416346e-01:2.9838179506737322e-01:3.3989355008369382e-01:4.0204029690099002e-01:8.6103190171521737e-01:2.7705242440239902e-01:1.3755557752654870e+00:2.6583359802734147e-01:2.1177806011810301e+00:2.7074766060223288e-01:2.9928223735624213e+00:3.1403571937421043e-01:3.9736922402478889e+00 + CVs 20 + -1.0282947450125474e-01 1.7596286454046917e-01 3.4238621950458889e-03 + -1.6203878513720102e-01 3.0902423393458300e-01 2.4242306556256921e-03 + -2.1031081922988859e-01 4.2213017362273897e-01 8.7467615678639005e-03 + -2.6662847940208578e-01 5.2931228189420376e-01 3.2431077465931435e-02 + -3.3051835734536994e-01 6.2976932389707929e-01 7.1479731237681615e-02 + -4.0128056561330028e-01 7.2309013103833075e-01 1.2352529085373319e-01 + -4.7879569625904728e-01 8.0952107078085356e-01 1.8602672993714181e-01 + -5.6413664274018016e-01 8.8981891652270195e-01 2.5635241901105854e-01 + -6.5839679580548727e-01 9.6465064547770363e-01 3.3136805917475470e-01 + -7.5925317284210281e-01 1.0337383213008695e+00 4.0706142097943787e-01 + -8.6185028582250744e-01 1.0962845294552759e+00 4.8061702184010535e-01 + -9.6574864406247607e-01 1.1518054364639567e+00 5.5338263737661275e-01 + -1.0774150294093054e+00 1.1993889486048583e+00 6.3103646700698257e-01 + -1.2018122185632649e+00 1.2376807744182796e+00 7.1866039554790517e-01 + -1.3358394532293882e+00 1.2670308609271845e+00 8.1288661322718592e-01 + -1.4731096525561302e+00 1.2892589813785704e+00 9.0771480462265375e-01 + -1.6140922228682333e+00 1.3049157193436265e+00 1.0017157645665633e+00 + -1.7669359350669886e+00 1.3115784214759771e+00 1.0967945553943090e+00 + -1.9302891172799250e+00 1.3090977784664530e+00 1.1894836164250577e+00 + id 12244 + loc 6.4214968681335449e-01 2.9857796430587769e-01 403 + blend 0.0000000000000000e+00 + interp 4.2172346893373891e-01:3.9732834125422917e-01:4.0001264116518354e-01:4.2171925169904961e-01:9.7159590508334248e-01:3.5041018977026811e-01:1.8136124572222307e+00:2.7212631365757622e-01:2.6122059005065443e+00:3.6099635407458164e-01:3.0276153691705705e+00:4.1588270739838495e-01:3.9276122795288755e+00 + CVs 20 + -5.5792659107234362e-02 -3.3830732158553131e-03 4.4523704810467551e-02 + -1.1857345163362719e-01 1.9324930816272401e-05 1.0851363928742276e-01 + -1.8985510116663812e-01 3.6855150414882909e-02 2.0709736948988494e-01 + -2.6100534114305990e-01 9.3577280242963468e-02 3.1377507996910597e-01 + -3.3099320657661224e-01 1.7301285685605183e-01 4.2547345469273540e-01 + -3.9618396272058259e-01 2.7718505271541910e-01 5.4070680526027937e-01 + -4.4969902567769066e-01 4.0787762603031136e-01 6.5988788983336299e-01 + -4.7972857303949973e-01 5.6853527523791891e-01 7.8560991000949665e-01 + -4.6651810721929954e-01 7.6052452876092613e-01 9.2127635915255190e-01 + -3.8778203257705390e-01 9.7192419246641859e-01 1.0659876897187432e+00 + -2.3410304262540144e-01 1.1778318881564855e+00 1.2112799736280702e+00 + -1.2379150924211935e-02 1.3565002864291529e+00 1.3453713486130296e+00 + 2.6512334671560789e-01 1.4964679817138051e+00 1.4583713841809689e+00 + 5.8779829675665685e-01 1.5923490144692298e+00 1.5429847655887492e+00 + 9.4755548180964033e-01 1.6419979609195141e+00 1.5908469393824023e+00 + 1.3398713522484766e+00 1.6450411034273422e+00 1.5896892901673030e+00 + 1.7642333217549890e+00 1.5981007999943571e+00 1.5225453742545074e+00 + 2.2063746267222912e+00 1.4910694304693712e+00 1.3730665975193073e+00 + 2.4884846591543472e+00 1.3608405636538108e+00 1.3170131800795268e+00 + id 12245 + loc 6.3813769817352295e-01 9.7712808847427368e-01 261 + blend 0.0000000000000000e+00 + interp 4.1043437030696395e-01:4.1043026596326088e-01:1.6185065780041419e-02:3.4123789926437609e-01:8.2589875749407282e-01:2.7931140368183877e-01:1.3730352395651135e+00:3.3801008109616715e-01:2.1897044107088193e+00:4.0768347379523434e-01:2.8958063511711081e+00:3.8958551936062530e-01:3.2094887247054018e+00 + CVs 20 + -8.1084408368350758e-01 4.8997593498888170e-01 -6.5605616721066029e-01 + -1.5442459225917144e+00 7.8791733290960553e-01 -1.0581123378303405e+00 + -2.2861212266802484e+00 9.3043793475071990e-01 -1.2619046141537900e+00 + -2.9977546988343273e+00 1.0149306474186743e+00 -1.3576915226866135e+00 + -3.6449920284296278e+00 1.0933782433457142e+00 -1.4281383931204781e+00 + -4.2558517214125455e+00 1.1502023553866372e+00 -1.5328830569762157e+00 + -4.8687678470272866e+00 1.1545548569591391e+00 -1.7140679115231479e+00 + -5.4927475963117871e+00 1.0885054833406769e+00 -2.0070866498311029e+00 + -6.1174515605137225e+00 9.4199656998249837e-01 -2.4304223726698271e+00 + -6.7403280959134912e+00 7.0784969648321061e-01 -2.9600909678758720e+00 + -7.3508832471239298e+00 3.7461825688350991e-01 -3.5447641715972491e+00 + -7.9074418173955614e+00 -7.7978752715769595e-02 -4.1369836080872400e+00 + -8.3498030845531854e+00 -6.6167270325650485e-01 -4.7087046943783761e+00 + -8.6123813903419730e+00 -1.3698574868479123e+00 -5.2492750658280487e+00 + -8.6637270678402185e+00 -2.1706214670058355e+00 -5.6756012921628791e+00 + -8.6792785698714265e+00 -2.9206894638807950e+00 -5.7835055934484902e+00 + -8.9306267923413571e+00 -3.3538724288391091e+00 -5.4819086152991812e+00 + -9.2766887222721977e+00 -3.4840861295401715e+00 -5.1192146960873117e+00 + -9.3530704827646112e+00 -4.0594910120862746e+00 -5.0449842252973038e+00 + id 12246 + loc 5.0845336914062500e-01 3.9738589525222778e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5647902506452320e-01:3.5034538360287509e-01:5.7418182879145196e-01:4.5647446027427258e-01:1.0701901832357503e+00:2.6512365254886017e-01:1.7300497432691797e+00:3.3164626501144340e-01:2.6918256048833999e+00:3.7975267627086307e-01:3.0277762827641146e+00:2.6629844760776467e-01:3.7530985728710373e+00 + CVs 20 + 1.2826309705634004e-03 2.5068513625111322e-01 2.2932489432291628e-01 + -3.3398190859954546e-03 4.8319576432761746e-01 4.3997514189783871e-01 + 1.0498665972707988e-04 7.0708102643825532e-01 6.3544311129814401e-01 + 1.2042220575386731e-02 9.2989786909094641e-01 8.2629366190895803e-01 + 2.1762751583685347e-02 1.1510765881144100e+00 1.0247409764367075e+00 + 2.8644863696341671e-02 1.3657229619492561e+00 1.2308954516058117e+00 + 4.0782194994668952e-02 1.5727744356042690e+00 1.4375273709915253e+00 + 6.3591573500517140e-02 1.7785589337741419e+00 1.6408344844850595e+00 + 9.2783438315580669e-02 1.9932392281583229e+00 1.8425025312674106e+00 + 1.1876085443271256e-01 2.2264359827181459e+00 2.0540534838344886e+00 + 1.3671699238197954e-01 2.4738786827534507e+00 2.3063347723979364e+00 + 1.5170694167659038e-01 2.6955269908989536e+00 2.6337979518697656e+00 + 1.7915900742188096e-01 2.8294645832586842e+00 3.0383826191352834e+00 + 2.2827206543357925e-01 2.8362782873731343e+00 3.4888037328300383e+00 + 2.7895546534739024e-01 2.7205836429840393e+00 3.9483600958062106e+00 + 2.9313993003974093e-01 2.5195056875207098e+00 4.3866343418413383e+00 + 2.5085967607944459e-01 2.2742971783635135e+00 4.7876126356244209e+00 + 1.8360172887983173e-01 1.9867755407536378e+00 5.1642738022649715e+00 + 1.9044651239721133e-01 1.6543907668611251e+00 5.4743016228632797e+00 + id 12247 + loc 9.4645875692367554e-01 2.9791033267974854e-01 1068 + blend 0.0000000000000000e+00 + interp 4.9686150059803397e-01:2.6400519077397755e-01:5.8818634338111009e-01:4.9685653198302798e-01:1.3430702486450334e+00:3.1149281816045143e-01:1.9801912927068575e+00:4.0657619908663067e-01:2.8892615264183439e+00:2.6250114085721654e-01:3.8136483781467390e+00 + CVs 20 + -9.1373282658375021e-02 4.5029744183145232e-01 1.8576203926042628e-01 + -2.0550919451485694e-01 8.8651618265639398e-01 3.2820939904603219e-01 + -3.5773203255557223e-01 1.3041527301725884e+00 4.2543008073671618e-01 + -5.6179067483239364e-01 1.6928982065873956e+00 4.8383346486945517e-01 + -8.2864662190957084e-01 2.0339909031631729e+00 5.1381294541592537e-01 + -1.1594943176539410e+00 2.3061773901044584e+00 5.3152717107811354e-01 + -1.5392511483818594e+00 2.4927724948417502e+00 5.5931692777418096e-01 + -1.9338288512920458e+00 2.5857256471868197e+00 6.1782275685166432e-01 + -2.3075400383090492e+00 2.5951115556325419e+00 7.1720501626332744e-01 + -2.6475055905520883e+00 2.5459766079119124e+00 8.6377080123105876e-01 + -2.9397048182923871e+00 2.4473738370597640e+00 1.0638067382304341e+00 + -3.1253486927004950e+00 2.2842034229999779e+00 1.2848687399957972e+00 + -3.1735601332926837e+00 2.0680607924634069e+00 1.4775531261171668e+00 + -3.1049644397640961e+00 1.8429921994738774e+00 1.6278496294044924e+00 + -2.9422272906525380e+00 1.6709582279420589e+00 1.7296381873994255e+00 + -2.6879391465846121e+00 1.5872833114409173e+00 1.7730163199489335e+00 + -2.3455666298601088e+00 1.5642382675935780e+00 1.7521606145880375e+00 + -1.9086070428383970e+00 1.5221716826155387e+00 1.6293965003192110e+00 + -1.7079818443866035e+00 1.4665227218676851e+00 1.5650342709831162e+00 + id 12248 + loc 1.8623629212379456e-01 7.5902831554412842e-01 1074 + blend 0.0000000000000000e+00 + interp 3.2805860212153476e-01:2.7748075569326591e-01:4.9251691157648270e-01:2.7499541714523046e-01:1.5551258436521120e+00:3.2805532153551353e-01:2.4483839882580889e+00:2.6572602545746188e-01:3.2210259372381076e+00 + CVs 20 + 5.4701804191241724e-02 3.7298435076165126e-01 -5.5548084223070525e-02 + 1.3091374426393718e-01 7.5882142019392274e-01 -1.2604786748731051e-01 + 2.2611964629087672e-01 1.1440624830468646e+00 -2.0243807879169703e-01 + 3.4566966939805149e-01 1.5286359057089804e+00 -2.7640631738217480e-01 + 5.1229047057843302e-01 1.9347762336727790e+00 -3.4525880574865309e-01 + 7.5291209774824619e-01 2.3893588087371542e+00 -4.4582389998048938e-01 + 1.0672910617644848e+00 2.8795673973152787e+00 -6.7449314705762775e-01 + 1.4258034722797324e+00 3.3316151025390361e+00 -1.1311884342284404e+00 + 1.7663812657830882e+00 3.5906301560390324e+00 -1.8272843056136276e+00 + 2.0159872907521192e+00 3.5314916126904836e+00 -2.6067057345851326e+00 + 2.1656725521321838e+00 3.1972475022861180e+00 -3.2916386965396227e+00 + 2.2612870899832775e+00 2.7231334088612225e+00 -3.7896906965525785e+00 + 2.3641306390273655e+00 2.2547236462624789e+00 -4.0906800275467097e+00 + 2.4995216946122443e+00 1.8965990783054900e+00 -4.2425031286223893e+00 + 2.6394443777125778e+00 1.6958605494954875e+00 -4.2869216012520450e+00 + 2.7307334559178011e+00 1.6301950689780897e+00 -4.2125641936296683e+00 + 2.7356684933235962e+00 1.5656596913316938e+00 -3.9591798750200273e+00 + 2.7492241378100211e+00 1.4143849531673467e+00 -3.7439402248136981e+00 + 2.8683203375327411e+00 1.7427695406679955e+00 -3.9346887373629977e+00 + id 12249 + loc 1.5064124763011932e-01 5.4227370023727417e-01 1076 + blend 0.0000000000000000e+00 + interp 4.7002501697965260e-01:2.7512916189253317e-01:2.5988898987793740e-01:3.3166649762366773e-01:9.8509524520699454e-01:3.2109296422737882e-01:1.9172089566546215e+00:3.6398284563651545e-01:2.2627858006129573e+00:4.7002031672948280e-01:2.8421048047660049e+00:3.0840979948589931e-01:3.4790290832443924e+00 + CVs 20 + 1.4946677791835408e-01 3.4118468763105803e-01 -3.5886736702706409e-02 + 3.2671057816020554e-01 6.4250052935343294e-01 -8.8340463047563655e-02 + 5.0624338212237607e-01 9.1266118755269532e-01 -1.4017307683927110e-01 + 6.7484939660440812e-01 1.1569776142411252e+00 -1.8388698192709635e-01 + 8.3161707937615015e-01 1.3794235558584507e+00 -2.2076741082959617e-01 + 9.7826490582970760e-01 1.5868236288282445e+00 -2.5212808112954871e-01 + 1.1223672900479824e+00 1.7884845144708514e+00 -2.8208783046384156e-01 + 1.2765930946162849e+00 1.9933414946532384e+00 -3.2062698307743609e-01 + 1.4510142121497467e+00 2.2059242284527856e+00 -3.8501590941988051e-01 + 1.6456340763227553e+00 2.4198727929354655e+00 -4.9662431330848822e-01 + 1.8537597597051705e+00 2.6163568480600867e+00 -6.7028051638256880e-01 + 2.0708144049357320e+00 2.7688257714965041e+00 -9.0759061006006492e-01 + 2.2961152925362396e+00 2.8465985442872443e+00 -1.1944238325673042e+00 + 2.5362803958170934e+00 2.8170604514310047e+00 -1.5026681625259526e+00 + 2.8021143592156950e+00 2.6492282415323016e+00 -1.8229351101287250e+00 + 3.0570587783419771e+00 2.3311573797200791e+00 -2.1823112021845961e+00 + 3.2147898506343555e+00 1.8826120209429034e+00 -2.5952198377990516e+00 + 3.1966267947938944e+00 1.3788882340838928e+00 -3.0041935889185623e+00 + 3.0103961295040720e+00 1.2548334286954688e+00 -3.1433877191031536e+00 + id 12250 + loc 9.1050499677658081e-01 5.6368011236190796e-01 372 + blend 0.0000000000000000e+00 + interp 4.2348970291024612e-01:2.7477146903910471e-01:6.3324533493344104e-03:4.2348546801321701e-01:5.4835999117402900e-01:2.8133606771431202e-01:1.2595643953337659e+00:2.9645820516197374e-01:2.2415420928322591e+00:4.0137520914323221e-01:2.9400694723459990e+00:3.6177694834250829e-01:3.3689545941855421e+00 + CVs 20 + -4.8251794056080494e-01 5.2643544788827301e-01 -8.4586556950136324e-02 + -9.8242537952678055e-01 9.3495436942065580e-01 -1.1874713044790096e-01 + -1.5399777717793042e+00 1.1838141751179365e+00 -8.0062526556505698e-02 + -2.0923783584549289e+00 1.3389301360480095e+00 2.3303388382742929e-02 + -2.5888911683093729e+00 1.4881912267445698e+00 1.5333247429419206e-01 + -3.0424541895445305e+00 1.6638546509842240e+00 2.6286889699574678e-01 + -3.4829461511742754e+00 1.8650501115821059e+00 3.2029818411365940e-01 + -3.9214577535796091e+00 2.0869187198308392e+00 3.0951366585737172e-01 + -4.3659534323495830e+00 2.3223294928917033e+00 2.1610582840175696e-01 + -4.8224278486223620e+00 2.5482139680287696e+00 2.4198847754897668e-02 + -5.2755738265190564e+00 2.7180212294530630e+00 -2.7597583049285745e-01 + -5.6792541760982873e+00 2.7688362315698667e+00 -6.7654391557299831e-01 + -5.9689524691209517e+00 2.6499861526206345e+00 -1.1212002389806790e+00 + -6.1070597047727473e+00 2.3779697758659202e+00 -1.5073098214390526e+00 + -6.1278053066237126e+00 2.0304753002543237e+00 -1.7457118117042487e+00 + -6.1241109216798950e+00 1.7151345922415335e+00 -1.7880305578993161e+00 + -6.1263435798082835e+00 1.5381250610670478e+00 -1.6774346388755816e+00 + -6.1076404036173892e+00 1.4103205220808870e+00 -1.5352866844304640e+00 + -6.1975476144048125e+00 1.0967853171560598e+00 -1.3168505749526482e+00 + id 12251 + loc 2.6150554418563843e-01 9.7575426101684570e-02 1085 + blend 0.0000000000000000e+00 + interp 4.5059152261973578e-01:3.1553650802769539e-01:1.8628766500669003e-01:2.8388758275435966e-01:1.1725828651814774e+00:4.3127826633462413e-01:2.0328164636050543e+00:4.5058701670450962e-01:2.5444960253884004e+00:2.9508266198612459e-01:2.9989638895518036e+00:4.0741188383410309e-01:3.7192440405866147e+00 + CVs 20 + 5.4200361714947420e-01 4.2534661842398741e-01 2.6285820938828880e-01 + 9.7466120349567009e-01 7.9397278319895803e-01 5.1938401224170028e-01 + 1.3517501439121471e+00 1.1320205910015173e+00 8.1527894404572354e-01 + 1.6730043280400235e+00 1.4604389352510567e+00 1.2010291527322974e+00 + 1.8954399535019388e+00 1.7630938834834147e+00 1.6881417437280559e+00 + 1.9812986620869444e+00 2.0117398668546520e+00 2.2531704985669569e+00 + 1.9142057427970456e+00 2.1806338285653277e+00 2.8450031915836673e+00 + 1.7064063080857763e+00 2.2564940148661385e+00 3.4024184498380974e+00 + 1.3989942532768509e+00 2.2400854404786044e+00 3.8725467294151850e+00 + 1.0534826040091736e+00 2.1460816948891388e+00 4.2261826649745409e+00 + 7.2195763261015411e-01 1.9975560981866050e+00 4.4669382825108972e+00 + 4.2492149936125223e-01 1.8144878312310069e+00 4.6172357224203040e+00 + 1.5923554409969731e-01 1.6086493150016519e+00 4.6988637557377979e+00 + -8.6353812738402813e-02 1.3836173539259013e+00 4.7251835106251949e+00 + -3.2986042018940664e-01 1.1282376709178390e+00 4.7064774369180880e+00 + -5.7888049649339812e-01 8.0666072682222401e-01 4.6568163920808407e+00 + -8.0040374528766622e-01 3.6533973934773595e-01 4.5958167807928429e+00 + -9.3151440751182957e-01 -2.1939339995169710e-01 4.5812834782110103e+00 + -9.3341837578651599e-01 -6.5967740551491871e-01 4.6163260946439166e+00 + id 12252 + loc 4.0180790424346924e-01 4.0974664688110352e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0055568414733861e-01:3.1564744742378176e-01:3.5502162227339362e-01:4.0055167859049717e-01:9.9248467991349310e-01:3.2769803489205723e-01:1.5182018861934092e+00:2.8043684906853616e-01:2.3896031779487346e+00:3.0963078786373632e-01:3.0258535355160117e+00:2.8067040998234777e-01:3.8148528795603194e+00 + CVs 20 + -3.3046398148643918e-01 6.1369004325611809e-01 -1.0198623421906758e-01 + -5.6634389321519862e-01 1.2000084588039071e+00 -2.6699351275920713e-01 + -6.9688815150111050e-01 1.7563985652871343e+00 -4.9992102712514330e-01 + -7.1734279465060746e-01 2.2588683293425449e+00 -8.0174861410583764e-01 + -6.4415860557736415e-01 2.6736661273172042e+00 -1.1787835286382276e+00 + -5.2730523895693837e-01 2.9680246773720311e+00 -1.6177339306225753e+00 + -4.2567257234693678e-01 3.1127963504322427e+00 -2.0755251047377081e+00 + -3.7377641402221617e-01 3.0950594009990313e+00 -2.5148395964489789e+00 + -3.8357688388940625e-01 2.9126534413989607e+00 -2.9206102690213971e+00 + -4.4103619238089731e-01 2.5823088756927532e+00 -3.2636084336910747e+00 + -4.9738272836448127e-01 2.1392853128344593e+00 -3.5119429949832073e+00 + -4.9838470866972939e-01 1.6196925779438818e+00 -3.6490017599287956e+00 + -4.2483548597131565e-01 1.0643572522423932e+00 -3.6749765893357318e+00 + -3.0355860882678060e-01 5.2105341693905094e-01 -3.6141971673141726e+00 + -1.8104045776055000e-01 3.7544240720821909e-02 -3.5174352022609692e+00 + -9.5112550790279471e-02 -3.5242831324243762e-01 -3.4454314285225141e+00 + -1.8406291252656115e-01 -7.1996072102792508e-01 -3.5766643059981496e+00 + -2.6555131539728050e-01 -6.3142087534280344e-01 -3.7373881548833672e+00 + -2.1421676633890957e-01 -4.4792582013692173e-01 -3.7868345380896047e+00 + id 12253 + loc 3.5523381829261780e-01 9.9312621355056763e-01 1050 + blend 0.0000000000000000e+00 + interp 3.7213147422019011e-01:3.0512824610351080e-01:8.9862379668086745e-02:3.7212775290544792e-01:9.8417490039463629e-01:2.6538941988771070e-01:1.3780988119442663e+00:2.0344055706532357e-01:2.1387709190772428e+00:2.9692339038999715e-01:3.0797684051054315e+00 + CVs 20 + -1.0822839035084869e-01 4.9059694477353749e-01 -7.3884304566799330e-01 + -1.2893400530461721e-01 9.5703365237388649e-01 -1.3809676760183043e+00 + -1.4113909546157988e-02 1.4528703320242076e+00 -1.9490311702239305e+00 + 2.8299139176185983e-01 1.9857453222087316e+00 -2.4129379466032237e+00 + 7.7005588132902747e-01 2.4969605195400688e+00 -2.6977621835812391e+00 + 1.3889448880388549e+00 2.9037059695625365e+00 -2.7891277775959757e+00 + 2.0593841224555036e+00 3.1467282052510486e+00 -2.7350964359655450e+00 + 2.7195893616101197e+00 3.2072275444793390e+00 -2.6075888687968258e+00 + 3.3380910818874314e+00 3.0884402626095744e+00 -2.4710995344012665e+00 + 3.9043040132557700e+00 2.8009292726054671e+00 -2.3515807462294425e+00 + 4.4005349831543628e+00 2.3446890443777786e+00 -2.2126303003223899e+00 + 4.7649620250735500e+00 1.7210384001308610e+00 -1.9762696617016102e+00 + 4.9145144962190095e+00 9.9015663572099388e-01 -1.5768914525566595e+00 + 4.7837730023392506e+00 2.8738661891478362e-01 -9.8934346951446339e-01 + 4.3734704575243981e+00 -2.2907307825121170e-01 -2.5759983433667982e-01 + 3.7558239917918881e+00 -4.6196293312417736e-01 5.3300399170660850e-01 + 2.9405543034315182e+00 -3.5069410558525071e-01 1.3287000562554174e+00 + 1.7496650458464409e+00 4.2792457171036302e-01 1.9133892743434280e+00 + 1.4320086931850016e+00 7.9098731529510402e-01 1.9488183702130264e+00 + id 12254 + loc 6.4068377017974854e-01 8.7506532669067383e-01 411 + blend 0.0000000000000000e+00 + interp 4.7230193197032649e-01:3.1088131337689839e-01:8.8463954840765013e-01:3.1057440874488978e-01:1.8084783721284392e+00:3.4490566426593017e-01:2.1592009613917766e+00:4.7229720895100680e-01:2.7708415064595426e+00:4.3536312509415032e-01:3.1977984514315114e+00:3.1042661757213219e-01:3.8872825567129587e+00 + CVs 20 + 9.0858209976569038e-01 2.3434842390135011e-01 -1.0601831170186710e-01 + 1.5289944682358987e+00 2.9604683551824551e-01 -1.5797415262153261e-01 + 2.0680381318081600e+00 2.7564778261518691e-01 -1.7249074667448194e-01 + 2.6136765519091560e+00 2.1775355922994027e-01 -1.5451237891342018e-01 + 3.1514828385033851e+00 1.2669790905151768e-01 -1.0774567459971629e-01 + 3.6719911889986037e+00 8.2025867127363261e-03 -4.2583730886076365e-02 + 4.1674935175720353e+00 -1.3524393625506204e-01 2.6776410436700870e-02 + 4.6292749854758348e+00 -3.0564070976676505e-01 8.8255550508767100e-02 + 5.0600925403881334e+00 -4.8992081032884283e-01 1.3367741995389487e-01 + 5.4741151192188653e+00 -6.7699445979094008e-01 1.6230477347099626e-01 + 5.8842895098977719e+00 -8.6689496024162072e-01 1.7455273094351115e-01 + 6.2957232073655032e+00 -1.0719663439381999e+00 1.6001323906020082e-01 + 6.7095358670797793e+00 -1.3099615751623701e+00 1.1244156204733746e-01 + 7.1251880583116538e+00 -1.5975995838283192e+00 3.9840604828765502e-02 + 7.5342485708361533e+00 -1.9451592603484729e+00 -4.5455126786187017e-02 + 7.9191016869191806e+00 -2.3530318109142279e+00 -1.3727023288970980e-01 + 8.2572810047083500e+00 -2.8167143872183429e+00 -2.3002264918729942e-01 + 8.5244942235448189e+00 -3.3248120332556876e+00 -3.1087590944415222e-01 + 8.6784567185941377e+00 -3.7845659853900724e+00 -3.7286034056467343e-01 + id 12255 + loc 7.6394444704055786e-01 2.8027021884918213e-01 416 + blend 0.0000000000000000e+00 + interp 5.4169534803409847e-01:2.6090798447497859e-01:1.1602588846685835e-01:3.4910508991992339e-01:9.9581954067786516e-01:5.4168993108061814e-01:1.6586916974295605e+00:5.1545247179736275e-01:1.9840046752130900e+00:3.1464622649905366e-01:2.3031900553663407e+00:3.8050161934764037e-01:3.0335770005133424e+00:3.9920741709089458e-01:3.7113600305647756e+00 + CVs 20 + -5.2418636025066823e-01 1.4245338303647373e-01 9.0105968666318537e-02 + -8.7743222113453401e-01 1.8655175929837625e-01 1.7927004893939408e-01 + -1.1986171185181091e+00 1.9517532759088430e-01 2.5788531263235986e-01 + -1.5423228500214288e+00 2.0106052468781183e-01 3.1019889272068962e-01 + -1.9030038764599668e+00 1.9822700748863586e-01 3.3388082702166166e-01 + -2.2737396527195783e+00 1.8116882813088497e-01 3.2651909323856820e-01 + -2.6462366832600255e+00 1.4644114868976077e-01 2.8487872728748559e-01 + -3.0119064577562882e+00 9.2306521945275888e-02 2.0825744972881310e-01 + -3.3633327412094327e+00 1.8202301734423498e-02 1.0035639782015815e-01 + -3.6945711871731719e+00 -7.4459795525765538e-02 -3.3785020504462637e-02 + -4.0004266789774183e+00 -1.8149777328420313e-01 -1.9081107028941313e-01 + -4.2778731637883372e+00 -3.0012612111055970e-01 -3.6347038101823320e-01 + -4.5329814346929549e+00 -4.3703553476311896e-01 -5.3267075524735663e-01 + -4.7780335481218561e+00 -6.0540441614609897e-01 -6.7299804416083353e-01 + -5.0155716913842330e+00 -8.0798262928539621e-01 -7.6526790261983602e-01 + -5.2364628590607571e+00 -1.0328447758198314e+00 -8.0504280430845865e-01 + -5.4313784840774124e+00 -1.2653812386544039e+00 -7.9373048806765978e-01 + -5.5950137175562435e+00 -1.4934799814794630e+00 -7.3249409032891788e-01 + -5.7434130918403872e+00 -1.7319808014924800e+00 -6.1448566610106869e-01 + id 12256 + loc 3.6711864173412323e-02 7.7469980716705322e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5738344622159310e-01:4.0120836707947721e-01:5.1250689354545687e-02:4.5737887238713093e-01:6.4719035478649722e-01:2.8274392902158380e-01:1.0090248237178674e+00:3.3439746368772627e-01:1.7350850943478728e+00:3.3839845343759511e-01:2.0878329393822579e+00:4.2942255166057763e-01:2.9333492405497643e+00:3.2543291939817504e-01:3.4083740174827915e+00 + CVs 20 + -2.5534165312728948e-03 2.3165454439946190e-01 7.6722737046345649e-02 + 2.0864196652905301e-02 4.1673612454409703e-01 1.0104510248937484e-01 + 4.6002065359140830e-02 5.8222088635967506e-01 1.0982676259403829e-01 + 6.1290194019522327e-02 7.3946028107095774e-01 1.2104011944723553e-01 + 6.8268498475291164e-02 8.8950557717713630e-01 1.3297933805985168e-01 + 6.7141363728695544e-02 1.0346018720373158e+00 1.4351511822892915e-01 + 5.5867668841915033e-02 1.1773269882696547e+00 1.4913312805930079e-01 + 3.0336418455744800e-02 1.3186069883798162e+00 1.4622451375496837e-01 + -1.4785545273356709e-02 1.4576055947094448e+00 1.3352400496453565e-01 + -8.5199936413345168e-02 1.5930776811939924e+00 1.1138017237787978e-01 + -1.8662281418410920e-01 1.7220055182298273e+00 7.8783339254937412e-02 + -3.2330523174520981e-01 1.8368987230721396e+00 3.2481408014337076e-02 + -4.9407615491140572e-01 1.9274653209403438e+00 -3.1022427944036646e-02 + -6.9172193917890235e-01 1.9861663849549203e+00 -1.1198484006115017e-01 + -9.0943534749205179e-01 2.0130180634583792e+00 -2.0767123202834381e-01 + -1.1498256844700729e+00 2.0114497389184880e+00 -3.1789776432565242e-01 + -1.4169057979836710e+00 1.9787106561327250e+00 -4.4589199935127888e-01 + -1.7012913401906269e+00 1.9135087060972082e+00 -5.9785575898222798e-01 + -1.9698027394962530e+00 1.8462652971538072e+00 -7.5165321532396656e-01 + id 12257 + loc 7.5778943300247192e-01 1.8350879848003387e-01 397 + blend 0.0000000000000000e+00 + interp 5.0498788093739988e-01:3.5024159120776788e-01:4.3003496231654892e-01:3.4447832733879435e-01:1.1207356558798824e+00:3.7042506262087022e-01:1.7741413669831934e+00:3.4882962464122702e-01:2.1245271192280013e+00:5.0498283105859054e-01:3.0002414907161783e+00:3.3710792117084815e-01:3.8984419973249844e+00 + CVs 20 + -1.2318820633199863e+00 3.1800367549676567e-01 3.1281438536980150e-01 + -2.0778784444137628e+00 3.7598566967414349e-01 5.6704989766862723e-01 + -2.8279090410165639e+00 3.3147501407984931e-01 7.9407086239449931e-01 + -3.5951489775936945e+00 2.2500198651336589e-01 1.0063855376372997e+00 + -4.3554837776342819e+00 5.0015638324776401e-02 1.1920680187109134e+00 + -5.0848798597616192e+00 -1.9487970546026401e-01 1.3495594046886141e+00 + -5.7624028000312206e+00 -5.0165115513347303e-01 1.4840740482428960e+00 + -6.3687349362953567e+00 -8.5729718305026237e-01 1.6027624058132006e+00 + -6.8923626245873990e+00 -1.2465077582057722e+00 1.7189622871903434e+00 + -7.3351340392767934e+00 -1.6571360807770574e+00 1.8576848595651003e+00 + -7.7034899043136891e+00 -2.0804246878347299e+00 2.0452742311331260e+00 + -8.0032118380276192e+00 -2.5084524311461389e+00 2.2973347325294249e+00 + -8.2405942538925316e+00 -2.9398667734351949e+00 2.6202429608157094e+00 + -8.4186459871957009e+00 -3.3841182402230432e+00 3.0145555888890563e+00 + -8.5310884586687248e+00 -3.8504311065946837e+00 3.4688337987180820e+00 + -8.5662300140040841e+00 -4.3410364998829074e+00 3.9553394817356864e+00 + -8.5154390681345227e+00 -4.8571805957441585e+00 4.4359167552935670e+00 + -8.3835514721152702e+00 -5.3896476108156159e+00 4.8747287925050546e+00 + -8.2521714933865642e+00 -5.8601523094305286e+00 5.2681142300916246e+00 + id 12258 + loc 3.4440049529075623e-01 4.6068355441093445e-01 406 + blend 0.0000000000000000e+00 + interp 5.0429600429614496e-01:3.6519339117570054e-01:8.6509605385269417e-02:3.0334886053771981e-01:9.9995700338968529e-01:5.0429096133610207e-01:1.4380432486284562e+00:3.9156201550421998e-01:2.0182460290579840e+00:4.6766898808832152e-01:2.8388700064742656e+00:3.1234026276055388e-01:3.2061964090895954e+00 + CVs 20 + -2.4261124851069949e-02 1.9710838742564823e-01 -1.2242306766331583e-01 + -4.6353678911920645e-02 3.2963864481066796e-01 -1.7999070184920835e-01 + -5.8628066046183439e-02 4.4485995311853388e-01 -2.1587088272502913e-01 + -6.4648289261233893e-02 5.6248527038721119e-01 -2.7414891605432046e-01 + -6.2533504756265429e-02 6.7827922987051803e-01 -3.5734957972538267e-01 + -5.0743842666943192e-02 7.8696120056405039e-01 -4.6693864595867940e-01 + -2.8286653817366558e-02 8.8261020939787760e-01 -6.0377263461118214e-01 + 5.6775323361685781e-03 9.5903135825784247e-01 -7.6772660535742743e-01 + 5.2726581758669927e-02 1.0103153485762368e+00 -9.5543847836899587e-01 + 1.1451775917210932e-01 1.0316890017730596e+00 -1.1579565645423671e+00 + 1.8940296755043456e-01 1.0204339006987471e+00 -1.3652195291145628e+00 + 2.7235150218354576e-01 9.7571093181855206e-01 -1.5727146132715437e+00 + 3.6022632029776092e-01 8.9785471827338115e-01 -1.7821787129010676e+00 + 4.5332604386236297e-01 7.8894551929606338e-01 -1.9941075420631846e+00 + 5.5252938131738250e-01 6.5350684980023954e-01 -2.2054949221980222e+00 + 6.5586806485320437e-01 4.9660638566240523e-01 -2.4147884240330111e+00 + 7.5854052572285491e-01 3.2160332124842284e-01 -2.6242239968035879e+00 + 8.5609662005920828e-01 1.3056612321009498e-01 -2.8364556247924222e+00 + 9.6461230148258936e-01 -7.7214759470262351e-02 -3.0822290189440653e+00 + id 12259 + loc 2.1816702187061310e-01 7.1572703123092651e-01 409 + blend 0.0000000000000000e+00 + interp 5.1321490339176412e-01:3.8304003315924212e-01:5.0616826958566730e-02:2.6462684397211972e-01:7.4389899842204099e-01:3.7077492080303581e-01:1.0959468763995361e+00:5.1320977124273026e-01:1.8266697408605166e+00:3.9298633477079609e-01:2.0910513482461832e+00:3.4960066179782523e-01:2.9357925988526441e+00:4.1276489549012557e-01:3.1988790738097741e+00 + CVs 20 + 4.8670499738895290e-01 2.9689038165991022e-01 -2.0441395616818819e-01 + 8.8469185636227421e-01 5.5922641692040342e-01 -3.7704013189313745e-01 + 1.2934804076677437e+00 8.3313632836580431e-01 -5.5018812141113915e-01 + 1.7606043385692445e+00 1.1256563308522058e+00 -7.5230890442732201e-01 + 2.2816182977840223e+00 1.3992885754673305e+00 -1.0173937297263107e+00 + 2.8335252894791028e+00 1.6045199258494005e+00 -1.3756165837769836e+00 + 3.3823392453806829e+00 1.6944249367204565e+00 -1.8302722412117269e+00 + 3.8984627593315722e+00 1.6344548060580308e+00 -2.3467700374713840e+00 + 4.3705348766972643e+00 1.4084444383824373e+00 -2.8650629521784015e+00 + 4.7967538177171667e+00 1.0188977165363378e+00 -3.3223189120158234e+00 + 5.1661708202096008e+00 4.9468471919258583e-01 -3.6541881227236770e+00 + 5.4727008393796588e+00 -1.1603334092661699e-01 -3.8234941166665299e+00 + 5.7409828403442154e+00 -8.0088626891131787e-01 -3.8798719007020415e+00 + 6.0086967334470973e+00 -1.5682417897781606e+00 -3.9391590591937873e+00 + 6.3060805192819611e+00 -2.3818687599207502e+00 -4.1060954736457322e+00 + 6.6490768530425672e+00 -3.1616740801580745e+00 -4.3865664558776558e+00 + 7.0371390683067219e+00 -3.8718202151737851e+00 -4.6706286947371680e+00 + 7.4539708819580106e+00 -4.5493022335982083e+00 -4.8729252757760433e+00 + 7.8852250555940149e+00 -5.3055258487841375e+00 -5.0800374982748631e+00 + id 12260 + loc 4.4564431905746460e-01 1.0457164049148560e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7752031197351597e-01:2.4172992489459427e-01:3.9268860787490822e-01:3.5864605184273241e-01:9.9782162480839687e-01:3.2527721803655690e-01:1.4311422582636513e+00:2.5467958756927589e-01:2.1280295722590883e+00:4.2966643155991141e-01:2.6568733223608412e+00:4.7751553677039626e-01:3.1184815299651989e+00:3.5438136259015424e-01:3.9505606683712076e+00 + CVs 20 + -2.0239777432255907e-01 2.7104492119198875e-01 -3.3944401125889767e-01 + -3.9425169532672111e-01 5.4028402712861157e-01 -6.6875926663983820e-01 + -5.9623386429578018e-01 7.9593873547921090e-01 -1.0087686344229490e+00 + -8.3021772064959687e-01 1.0412659497494792e+00 -1.3524614864226674e+00 + -1.1147790263188218e+00 1.2762963834033836e+00 -1.6743587091745655e+00 + -1.4597950552954984e+00 1.4875657645181759e+00 -1.9434033859189486e+00 + -1.8535166454490324e+00 1.6482825159959673e+00 -2.1328153666273724e+00 + -2.2614696391080180e+00 1.7299948402597158e+00 -2.2335123039762665e+00 + -2.6416955653246297e+00 1.7200533856273457e+00 -2.2552103074792877e+00 + -2.9637285821690527e+00 1.6315575395569495e+00 -2.2171645327822289e+00 + -3.2212349019529767e+00 1.4931802910891823e+00 -2.1388085619084074e+00 + -3.4307447796828856e+00 1.3271055967396350e+00 -2.0326709311325075e+00 + -3.6149831264510803e+00 1.1408651400797534e+00 -1.9053067240382315e+00 + -3.7953711852613288e+00 9.3248105287872651e-01 -1.7634987351822518e+00 + -3.9934197530372293e+00 6.9477273967437170e-01 -1.6166899996226738e+00 + -4.2359373524174675e+00 4.1385392648856412e-01 -1.4825638149911931e+00 + -4.5500706548232976e+00 6.8792287775572669e-02 -1.4227281252670212e+00 + -4.8877373151966186e+00 -2.8635599968928960e-01 -1.5364180549391533e+00 + -5.1040435857858890e+00 -4.7948772484463886e-01 -1.7266579748664053e+00 + id 12261 + loc 6.1695617437362671e-01 1.4097051322460175e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7199335896096747e-01:2.8363618984478861e-01:4.2442744217166317e-01:2.6860465705305969e-01:1.2607136636445306e+00:3.0398709679298591e-01:2.1383138791942295e+00:2.6100152911222779e-01:3.1002926419100056e+00:3.7198963902737786e-01:3.9582255773399204e+00 + CVs 20 + -1.8866170204424743e-01 2.7776265041528714e-01 2.7738206264391108e-01 + -3.6008089656516779e-01 5.6858786886086032e-01 5.5691421891060577e-01 + -5.4641712882510673e-01 8.5547626244402797e-01 8.4892519934621757e-01 + -7.4875748644745088e-01 1.1324228543494828e+00 1.1503298517955085e+00 + -9.5580932502244809e-01 1.3980348351464280e+00 1.4624969531613745e+00 + -1.1580241256433339e+00 1.6480120204397859e+00 1.7967851617335351e+00 + -1.3521359287462258e+00 1.8775588582311717e+00 2.1631187674294563e+00 + -1.5423687170783662e+00 2.0786147774689332e+00 2.5638042456381371e+00 + -1.7347973629247411e+00 2.2352012236991037e+00 2.9957803570256734e+00 + -1.9319379052459940e+00 2.3239668354706815e+00 3.4527837142774529e+00 + -2.1303999058747465e+00 2.3188963131487310e+00 3.9232393038755435e+00 + -2.3196321419465851e+00 2.2015135117821734e+00 4.3855213174493208e+00 + -2.4856218086267705e+00 1.9705006463105952e+00 4.8099904738860682e+00 + -2.6201930835236258e+00 1.6467315141061776e+00 5.1676815892125720e+00 + -2.7211389566830282e+00 1.2653832297795202e+00 5.4451646397030649e+00 + -2.7748626858033592e+00 8.5570866657238065e-01 5.6494272900550309e+00 + -2.7525243307155938e+00 4.3840014595124838e-01 5.7963457308336812e+00 + -2.6524708662136747e+00 3.7539904207428990e-02 5.8978904640434466e+00 + -2.6586032700933462e+00 -2.7617804956424319e-01 5.9952009183961863e+00 + id 12262 + loc 5.7656969875097275e-02 6.1992400884628296e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2763405491651529e-01:3.0289589851340576e-01:1.1984405626740413e-03:4.2762977857596612e-01:3.3083840151275579e-01:2.6284426104695774e-01:1.4355709506534577e+00:4.2674125564027920e-01:2.1211916876709029e+00:2.7261437837695646e-01:3.0233178191161629e+00 + CVs 20 + 9.3599823404088262e-02 2.7929930487813276e-01 -1.5066316177731534e-01 + 1.8235037774962926e-01 5.2533473178711931e-01 -3.6102444341138029e-01 + 2.5891874898235429e-01 7.3455008714722714e-01 -5.9847181836829388e-01 + 3.1964554262302336e-01 9.0018823835021067e-01 -8.4711563292693626e-01 + 3.6689139472514276e-01 1.0286564629947264e+00 -1.1087859565434448e+00 + 4.0452267203755793e-01 1.1346620852499494e+00 -1.3843115794905552e+00 + 4.3430924341099936e-01 1.2287637645357012e+00 -1.6678356788589177e+00 + 4.5368522552771257e-01 1.3067546226949658e+00 -1.9437271886238880e+00 + 4.5558246071892639e-01 1.3467142529655232e+00 -2.1865958185631795e+00 + 4.2688299248775119e-01 1.3179042371526859e+00 -2.3559303792628885e+00 + 3.4996247294274618e-01 1.2093539490533658e+00 -2.3852928000515283e+00 + 2.2327158613868664e-01 1.0822207329202647e+00 -2.2048125221564492e+00 + 8.9672398429707256e-02 1.0633633815784802e+00 -1.8568436776362001e+00 + -1.2007898677294015e-02 1.1665184705595140e+00 -1.5434934800288436e+00 + -1.0064154331630154e-01 1.2792749736387665e+00 -1.3663975536488060e+00 + -1.8335857094339242e-01 1.3757009223391674e+00 -1.2705918975650765e+00 + -2.3604289636245640e-01 1.4896020553318243e+00 -1.2038815127696469e+00 + -2.6082445180113073e-01 1.5899490664947111e+00 -1.1654023495628514e+00 + -4.6316383199873618e-01 1.4054554570435358e+00 -1.2042836080106853e+00 + id 12263 + loc 8.0980950593948364e-01 9.4104897975921631e-01 1048 + blend 0.0000000000000000e+00 + interp 3.4889826117133982e-01:2.4690676859759522e-01:5.2960100115158815e-01:3.4889477218872811e-01:1.0004537895807113e+00:3.4158560966465218e-01:1.9275125384547902e+00:2.8991074368786984e-01:2.3646031267485785e+00:2.9078934589631888e-01:2.9979800939558676e+00:2.6452128380687712e-01:3.9797022109888647e+00 + CVs 20 + 1.1633571400437950e-01 8.8031590392856451e-01 -4.0985716109478770e-01 + 3.1683765672510028e-01 1.8109195911205460e+00 -7.1344833822404086e-01 + 6.2192398570503471e-01 2.7409275993131770e+00 -7.9538208385011222e-01 + 1.0148061297223872e+00 3.5248748016848870e+00 -5.8018670181022247e-01 + 1.4262640807924944e+00 4.0248942361786639e+00 -1.1679155673791364e-01 + 1.7725959369547721e+00 4.1985110350811823e+00 4.5819489353469800e-01 + 2.0383976300594866e+00 4.1050317970542531e+00 1.0617583333283176e+00 + 2.2458841854015805e+00 3.7973944153817945e+00 1.6857724563396412e+00 + 2.3689841180493953e+00 3.3087491461917331e+00 2.3337340433807761e+00 + 2.3665820052948696e+00 2.6773577686880166e+00 3.0342969832013447e+00 + 2.2070949403901343e+00 1.9167593309467330e+00 3.7882731065822721e+00 + 1.8798570430220460e+00 1.0716057080141357e+00 4.5341021587032433e+00 + 1.4558260184303700e+00 2.8491339545843397e-01 5.2129806032187576e+00 + 1.0883295293047015e+00 -2.6163368315935687e-01 5.8061536094576081e+00 + 1.0549926690692832e+00 -2.5547183617421121e-01 6.1832974393556031e+00 + 1.2444305535336124e+00 1.6046096820929368e-01 6.0625708323741927e+00 + 1.4886037065930759e+00 3.1490623390557548e-01 6.0441937622954320e+00 + 2.1492044319556789e+00 3.0270048975913921e-01 6.2303404117994106e+00 + 3.0048564522115790e+00 2.0531339936954218e-01 6.6020692951513809e+00 + id 12264 + loc 2.6459965109825134e-01 8.1583261489868164e-01 1084 + blend 0.0000000000000000e+00 + interp 3.6788964703277455e-01:3.0944777432983128e-01:8.9902483609863948e-01:2.8651074182721392e-01:1.3043770139936188e+00:2.8962206614324981e-01:2.0144658660584014e+00:3.6788596813630425e-01:2.9939809247960274e+00:3.1127640296978842e-01:3.8895606562083960e+00 + CVs 20 + -1.5010062503020946e-01 5.2181323728460172e-01 3.9670238723637258e-01 + -2.9838123158460061e-01 9.8654110628771985e-01 7.2886829120887398e-01 + -4.4112473032283461e-01 1.4259867634972154e+00 1.0557607412585570e+00 + -6.0608839905567025e-01 1.8611954123034091e+00 1.3830205441964671e+00 + -8.2425557167001695e-01 2.2918903181660077e+00 1.6753147113348295e+00 + -1.1165806524075903e+00 2.7095984682117655e+00 1.8890568776988408e+00 + -1.4858437852059765e+00 3.0939605183055541e+00 1.9682805796501599e+00 + -1.9045156820681053e+00 3.4029730113569263e+00 1.8338381659571787e+00 + -2.2733200278292425e+00 3.5562632324876127e+00 1.4267324367676670e+00 + -2.4689487480141712e+00 3.5106813359853697e+00 8.6368121644871798e-01 + -2.5353171582876479e+00 3.2944489160361958e+00 2.9300789292440244e-01 + -2.5600073386576461e+00 2.8606993992916747e+00 -2.4446539658119626e-01 + -2.5727049079247357e+00 2.2183686181555959e+00 -6.5063911900325555e-01 + -2.5655282825098609e+00 1.6003553508322337e+00 -8.9915116325846822e-01 + -2.5246988580013530e+00 1.1846434962568018e+00 -1.1208165809847066e+00 + -2.4764812626353474e+00 1.0034267179692125e+00 -1.3776694452980012e+00 + -2.4885139325538783e+00 1.0619408677232189e+00 -1.6300987547097538e+00 + -2.5962015944710162e+00 1.2580655931338105e+00 -1.8062975426735999e+00 + -2.5534996917848751e+00 1.0227841528158566e+00 -2.1513008080849918e+00 + id 12265 + loc 7.7677577733993530e-01 1.5603269636631012e-01 372 + blend 0.0000000000000000e+00 + interp 4.0869994700151729e-01:2.6018815168562759e-01:8.3892856512768454e-02:3.6232340502594101e-01:1.2353811835609141e+00:2.9578892466779050e-01:1.4993737627624024e+00:3.1954432701943436e-01:2.2126316718430576e+00:4.0407701587714240e-01:3.0033165458584730e+00:4.0869586000204727e-01:3.8053634641903917e+00 + CVs 20 + 6.7294482880936268e-01 4.3029622836361897e-01 2.0589033452683703e-04 + 1.2999139983712626e+00 7.1876555859253810e-01 -8.9121667403968818e-03 + 1.9509035498627390e+00 8.9029019208088689e-01 1.9773551507978937e-02 + 2.5902981249793040e+00 1.0085425701352677e+00 1.6547426827942513e-01 + 3.0395742264511676e+00 1.1132226303725459e+00 4.7907701965092431e-01 + 3.1429586664569902e+00 1.1282675742089001e+00 8.2785328817556603e-01 + 3.0428889075276211e+00 1.0187774005716093e+00 1.0604851182034658e+00 + 2.8270208607617722e+00 8.1588451904946857e-01 1.2207253653171224e+00 + 2.5266836680356928e+00 5.3169075895620765e-01 1.2853701748185957e+00 + 2.1941974895242580e+00 2.1437091942769815e-01 1.2425018605377283e+00 + 1.8116344624270466e+00 -1.1674055434127928e-01 1.1318465296568254e+00 + 1.2909278723266588e+00 -5.1242010527925663e-01 9.8808104334652880e-01 + 5.2074677885782406e-01 -9.9568106709659965e-01 8.1927628961388110e-01 + -6.0221502209926114e-01 -1.4070831391073977e+00 6.7841346464627506e-01 + -1.9353698756203632e+00 -1.3985333264495776e+00 7.0342547888991691e-01 + -3.1605783363954112e+00 -8.9015774716271490e-01 9.6138332214976518e-01 + -4.1294022279910187e+00 -2.4059200262136038e-02 1.4462699402539467e+00 + -4.6834606345771075e+00 9.7078357275416871e-01 2.1151571441338137e+00 + -4.8913827752346251e+00 1.8244413781314206e+00 2.8318552361837925e+00 + id 12266 + loc 9.0013521909713745e-01 5.0462681055068970e-01 406 + blend 0.0000000000000000e+00 + interp 4.3378628806541120e-01:3.2992992595241327e-01:1.1402089236933577e-01:4.1341668252364383e-01:8.7452885013404646e-01:3.9494227731072301e-01:1.3675752408776995e+00:2.4052392721789528e-01:3.0153767757627232e+00:4.3378195020253058e-01:3.9586968499261763e+00 + CVs 20 + 3.3530374235561178e-01 2.5540567886148319e-01 -5.3607748555571606e-02 + 5.6234573290102663e-01 4.1885061464934992e-01 -6.8467275828368354e-02 + 7.5934293121716190e-01 5.2846851904024406e-01 -7.9844509779181505e-02 + 9.6898395104369761e-01 6.1617189516415904e-01 -9.1454179973642663e-02 + 1.1899583923074262e+00 6.7915177689836814e-01 -1.0170301547925895e-01 + 1.4197045198389702e+00 7.1592765798842939e-01 -1.0918684741630597e-01 + 1.6547034141266606e+00 7.2730568646792793e-01 -1.1175424237944820e-01 + 1.8903138158940369e+00 7.1581995874616045e-01 -1.0690883205829682e-01 + 2.1191626146823710e+00 6.8323439120140506e-01 -9.5641546774906883e-02 + 2.3339635814907718e+00 6.3117700746489402e-01 -8.4719857738727145e-02 + 2.5336008859855674e+00 5.6476833437205176e-01 -7.9927863692818790e-02 + 2.7222198311180716e+00 4.9230382656607796e-01 -7.9557850727021484e-02 + 2.9016975579008593e+00 4.2102077348083455e-01 -8.0741974483794166e-02 + 3.0697425531520928e+00 3.5539539171275858e-01 -8.6959526908964579e-02 + 3.2244490756367532e+00 2.9820397927041808e-01 -1.0428901942314395e-01 + 3.3652769244308711e+00 2.5141879828812552e-01 -1.3380738037579509e-01 + 3.4917684076385465e+00 2.1652215239696160e-01 -1.7227518726338209e-01 + 3.6045786192669671e+00 1.9515213705330803e-01 -2.1750137867001229e-01 + 3.7079455294883861e+00 1.9377298949449417e-01 -2.7048014899889322e-01 + id 12267 + loc 5.3770929574966431e-01 7.7488446235656738e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4440096181146788e-01:2.8411013083469944e-01:6.5900131356322333e-06:2.7330394274476605e-01:7.4556662299453902e-01:4.4439651780184980e-01:1.3018876046888916e+00:3.1907676859632422e-01:1.9999372850844512e+00:4.1593616150861218e-01:2.9081599592760625e+00:4.4398478846143902e-01:3.4118279534081055e+00 + CVs 20 + 4.4732385827907957e-02 3.5725589408272085e-01 -1.5359307414762610e-01 + 9.6391455627685974e-02 7.3236509396153937e-01 -3.1767770998425721e-01 + 1.5889193283560565e-01 1.1176746966560924e+00 -4.9420559959167332e-01 + 2.3531824677718416e-01 1.5063924171701164e+00 -6.9137674100367841e-01 + 3.2969705795649207e-01 1.8930935223863852e+00 -9.2367750305791974e-01 + 4.5155035359172202e-01 2.2632920833335959e+00 -1.2090551037488730e+00 + 6.1256201744297878e-01 2.5839871360915549e+00 -1.5582544138268184e+00 + 8.1789831650764755e-01 2.8177372689856885e+00 -1.9616051470965923e+00 + 1.0621196102229673e+00 2.9403900251945032e+00 -2.3904401001291529e+00 + 1.3276837132699872e+00 2.9487906908035710e+00 -2.8108829634643109e+00 + 1.5889334292787729e+00 2.8601746371389711e+00 -3.1968045639303382e+00 + 1.8250474788751030e+00 2.7061779332268991e+00 -3.5359763299743459e+00 + 2.0355310431136435e+00 2.5258804316628023e+00 -3.8317915911394413e+00 + 2.2293723138961798e+00 2.3561367324059828e+00 -4.0887818011955774e+00 + 2.4025736515473262e+00 2.2169119495872462e+00 -4.2972172637216239e+00 + 2.5498961029478195e+00 2.1079928955357521e+00 -4.4320401206640554e+00 + 2.6798267073776851e+00 2.0101465280560875e+00 -4.5078431091991469e+00 + 2.7400754136068830e+00 1.9182209002728039e+00 -4.6385080355563026e+00 + 2.5853166638900440e+00 1.8847843494630072e+00 -4.9607005432779543e+00 + id 12268 + loc 8.7246984243392944e-01 7.9475724697113037e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9471509841613198e-01:3.9541347467588200e-01:1.0025555024532962e-01:4.9471015126514783e-01:9.5852860888905478e-01:3.8750110010753214e-01:1.2863272827578638e+00:3.2540857152451175e-01:2.1266283812623148e+00:3.1173755383189283e-01:3.0104372934686614e+00:3.9802182075053161e-01:3.6876227616107582e+00 + CVs 20 + -2.3752467597202051e-02 2.2096706043270081e-01 1.3369029909803809e-01 + -2.9675150303037863e-02 3.8509299936649000e-01 2.0191071493391102e-01 + -3.0795785096658920e-02 5.1884884267842513e-01 2.4288048428928208e-01 + -3.7334910140405138e-02 6.4031552964853433e-01 2.8725122818945614e-01 + -4.5035769371342668e-02 7.4753121936905398e-01 3.3254277606157645e-01 + -4.8732391858753596e-02 8.3988539609476631e-01 3.7781117343995568e-01 + -4.3287594362430862e-02 9.1917954501696175e-01 4.2378239168898568e-01 + -2.4261991480307860e-02 9.9020543005961925e-01 4.7126796974951890e-01 + 1.1461485757435216e-02 1.0611022999753663e+00 5.2145266388311140e-01 + 6.4509187087942427e-02 1.1445868301273805e+00 5.7754965001604264e-01 + 1.2958916277623525e-01 1.2592955151699219e+00 6.4331713523864065e-01 + 1.8875017260918028e-01 1.4235078506633054e+00 7.1611630712106500e-01 + 2.1499248444511004e-01 1.6366353344517091e+00 7.8051332359134962e-01 + 1.9344981053406451e-01 1.8715705169889507e+00 8.1555264049622989e-01 + 1.3354722448973863e-01 2.0941815961567389e+00 8.0931420812509214e-01 + 5.4741440543371864e-02 2.2855455438919887e+00 7.6181044379366625e-01 + -3.7873061615151395e-02 2.4475602232533875e+00 6.8068986948326449e-01 + -1.5353843479290233e-01 2.5844182855039595e+00 5.7912306898248755e-01 + -2.4045591471534519e-01 2.6550543198135261e+00 4.6576835780502668e-01 + id 12269 + loc 5.3066504001617432e-01 8.0910521745681763e-01 1074 + blend 0.0000000000000000e+00 + interp 4.7024093042818293e-01:2.7478213354688424e-01:6.6772926953507616e-01:4.3408129377339910e-01:1.0000667048781633e+00:4.7023622801887865e-01:1.3308382128120002e+00:2.7362670435264558e-01:2.0673995893517496e+00:2.7433669701529717e-01:3.0034700155751666e+00:3.6337437532832789e-01:3.7860324216596761e+00 + CVs 20 + 2.4805620600056583e-01 3.1444944569073935e-01 -4.0552673320075239e-01 + 5.3679684320887378e-01 6.1163784589994175e-01 -7.8463971817981648e-01 + 8.5966699072986685e-01 8.8709539366508505e-01 -1.1527986905410259e+00 + 1.2023716813738234e+00 1.1406104947543076e+00 -1.5184020616950595e+00 + 1.5348998501021367e+00 1.3623461833632757e+00 -1.8934285432893139e+00 + 1.8122456275434511e+00 1.5232866237774305e+00 -2.2891940640935480e+00 + 1.9872321293323478e+00 1.5731314076781238e+00 -2.6822754686369059e+00 + 2.0312337170849646e+00 1.4795594158833847e+00 -2.9909049096150619e+00 + 1.9787623623847796e+00 1.3109180570716383e+00 -3.1605115418008332e+00 + 1.8930056057278370e+00 1.1506328082375334e+00 -3.2605783708159577e+00 + 1.7960672233354302e+00 9.9866624587112296e-01 -3.3684372828501088e+00 + 1.6904420264899267e+00 8.0998685058668118e-01 -3.5327666980000818e+00 + 1.5912878013402958e+00 5.2440810935266313e-01 -3.7867945941933203e+00 + 1.5483862414053584e+00 1.1953265009557168e-01 -4.1481020790137970e+00 + 1.6134420765574626e+00 -3.2552670940324913e-01 -4.6325941895590956e+00 + 1.7894782765582302e+00 -6.6222310668060458e-01 -5.2489427760330374e+00 + 2.0230593756158357e+00 -7.3414259732600895e-01 -5.9375995621203348e+00 + 2.1969311628242756e+00 -4.7132425576977677e-01 -6.4596323451402844e+00 + 2.2735909282093405e+00 1.3933570084431468e-02 -6.6868183774587058e+00 + id 12270 + loc 2.2248829901218414e-01 3.0085485428571701e-02 1078 + blend 0.0000000000000000e+00 + interp 4.7549499905964504e-01:2.7029573135053808e-01:6.5243027089459504e-01:3.5311330795049151e-01:1.7934822855657577e+00:3.3638408639435308e-01:1.9883484952493160e+00:3.3197559349316136e-01:2.5818904344028590e+00:4.7549024410965446e-01:3.0208576812686707e+00:4.4210000072514033e-01:3.3969725649295195e+00:3.3083397428604661e-01:3.9132157507016188e+00 + CVs 20 + 1.6784849702870686e-01 3.6599408600425054e-01 -1.1758074443685704e-01 + 2.6914073388879733e-01 6.8683135423236119e-01 -2.4169380498830834e-01 + 3.4551745628113273e-01 9.9070747533036330e-01 -3.7413852216425986e-01 + 4.1477277614640051e-01 1.2894429185384486e+00 -5.1759414065341691e-01 + 4.7177296516285971e-01 1.5788523048563303e+00 -6.7560306503099676e-01 + 5.0744574772972406e-01 1.8549798142378839e+00 -8.5258274316827487e-01 + 5.0767019609139397e-01 2.1118713640389388e+00 -1.0532435978786949e+00 + 4.5932787233961070e-01 2.3396134913079596e+00 -1.2792217599397344e+00 + 3.5611308673462294e-01 2.5257231804754037e+00 -1.5272940875937548e+00 + 2.0010737434600556e-01 2.6574599817602342e+00 -1.7898646297315592e+00 + 2.0853699476177656e-03 2.7258255505123952e+00 -2.0568078320766148e+00 + -2.2226843452247091e-01 2.7294941850757022e+00 -2.3196273266850369e+00 + -4.5779351918244682e-01 2.6741806176626213e+00 -2.5737162562574012e+00 + -6.9284569466162660e-01 2.5697014180679694e+00 -2.8180823695923634e+00 + -9.2178351281546489e-01 2.4262162437810062e+00 -3.0548440565714046e+00 + -1.1533052907149053e+00 2.2433060488185892e+00 -3.2912199482137203e+00 + -1.3979165380081435e+00 1.9885094821514484e+00 -3.5358946747641453e+00 + -1.5769409021659997e+00 1.6317734411727665e+00 -3.7806392765886003e+00 + -1.5257861748147654e+00 1.4213134877013989e+00 -3.9707334493811817e+00 + id 12271 + loc 1.2890697456896305e-02 5.7058393955230713e-01 1055 + blend 0.0000000000000000e+00 + interp 4.7048269288145772e-01:4.7047798805452895e-01:5.6988191285011436e-01:1.4729359813540135e-01:9.3504501139207508e-01:3.0245848591820068e-01:2.0028389505368822e+00:3.2737177784030536e-01:2.8080399536319298e+00 + CVs 20 + -3.0066790718842185e-01 3.2513973080192637e-01 -2.0837546280491670e-01 + -5.1644392964813546e-01 5.9651245013498544e-01 -3.7780640678172628e-01 + -6.8432640094717723e-01 8.3811232944910552e-01 -5.3245363337657092e-01 + -8.3245260823839917e-01 1.0649373886268922e+00 -6.8292942359923103e-01 + -9.2783479134294811e-01 1.2328361936965166e+00 -7.9001278571189870e-01 + -9.2729301835541178e-01 1.2960975823829815e+00 -8.1555361132348048e-01 + -8.3516793489698093e-01 1.3344424890316871e+00 -7.8902557236283377e-01 + -7.5937061598893152e-01 1.4753440895145795e+00 -7.5736612660066782e-01 + -7.8506137419777855e-01 1.7398659179250160e+00 -7.3886278477258716e-01 + -9.4002925042933039e-01 2.0991967990959925e+00 -7.5803132864712353e-01 + -1.2304845527732624e+00 2.4769591809116847e+00 -8.6868464751066354e-01 + -1.5996100529339463e+00 2.7513003550538215e+00 -1.1081463431311462e+00 + -1.9696821425405064e+00 2.8688206201113213e+00 -1.4516816964850963e+00 + -2.3128643525209762e+00 2.8277625631876724e+00 -1.8507128255123186e+00 + -2.6102890381005270e+00 2.6348390180879164e+00 -2.2583953387298892e+00 + -2.8481532359847805e+00 2.3326317416935018e+00 -2.6591927332954839e+00 + -3.0251007645414845e+00 1.9531932586194500e+00 -3.0603766180365861e+00 + -3.1079843766306863e+00 1.4865634684372964e+00 -3.4186080422233682e+00 + -2.9627978429624657e+00 1.1781269870227704e+00 -3.4938151271372417e+00 + id 12272 + loc 7.2530907392501831e-01 4.6880605816841125e-01 409 + blend 0.0000000000000000e+00 + interp 4.5896425705308008e-01:3.7185175728233905e-01:1.9228782363500485e-01:3.3120179059179339e-01:1.0000059495304512e+00:3.1512993770640807e-01:1.8414200267990906e+00:4.5895966741050959e-01:2.0410648233527167e+00:3.4302951489907391e-01:3.0052961362595876e+00:3.5524145220427028e-01:3.7073727838633284e+00 + CVs 20 + -3.6604397063657235e-01 1.6136594850641961e-01 1.4053427705201349e-01 + -7.1668252885306893e-01 3.0721055526634244e-01 2.8170557039237354e-01 + -1.0772881107189969e+00 4.4807156822469679e-01 4.0161075601151364e-01 + -1.4540204112559538e+00 5.8372866779639843e-01 4.9295599055818395e-01 + -1.8375619194778277e+00 7.0792505921743620e-01 5.5537671614393347e-01 + -2.2187395451040413e+00 8.1766802896684354e-01 5.8984498307479183e-01 + -2.5915345434313415e+00 9.1043628148108813e-01 5.9810614047469501e-01 + -2.9540633955419873e+00 9.8148656275362545e-01 5.8307684774385482e-01 + -3.3099811416717850e+00 1.0264336053924252e+00 5.5181893271402371e-01 + -3.6675999848579508e+00 1.0406327438948149e+00 5.1602415705153981e-01 + -4.0315085979686618e+00 1.0174151932311142e+00 4.8714309075368439e-01 + -4.3966090694344340e+00 9.5368002849085864e-01 4.7186547781056326e-01 + -4.7558309698505221e+00 8.5281535327754798e-01 4.7307193078837417e-01 + -5.1077423260191122e+00 7.1794612403026203e-01 4.9364548044081658e-01 + -5.4507004327143243e+00 5.5025530442954906e-01 5.3677766064113741e-01 + -5.7776467303117887e+00 3.5434511309322492e-01 6.0441856866961718e-01 + -6.0795885021818190e+00 1.3634108701033387e-01 6.9539836249711695e-01 + -6.3452779215174271e+00 -9.8775661038302154e-02 8.0009063715836337e-01 + -6.5096575652572728e+00 -2.6601279239250530e-01 8.7971616564721467e-01 + id 12273 + loc 6.3310110569000244e-01 9.2615705728530884e-01 403 + blend 0.0000000000000000e+00 + interp 4.9073315316124599e-01:4.9072824582971442e-01:5.7321942156234029e-01:3.8910835049201409e-01:1.1300127801979987e+00:2.6027924596401475e-01:1.8769556306836681e+00:3.6351972621584344e-01:2.8533663512298864e+00:3.7872513331411295e-01:3.2477052385350484e+00:2.9933926203239769e-01:3.9991136168184065e+00 + CVs 20 + -5.0367703479906906e-02 2.8853243906340267e-02 -7.3896763649687908e-03 + -1.1305872202990037e-01 4.7400278632072780e-02 -2.5752504803352713e-02 + -1.9363051020943203e-01 6.0632501141910378e-02 -6.0390521107345808e-02 + -2.8252476325837039e-01 6.7969092180198226e-02 -1.1776393153717904e-01 + -3.7543989431384805e-01 6.5973616018156850e-02 -1.9811144559994442e-01 + -4.6917702202093275e-01 5.1786178470254435e-02 -3.0012542765723260e-01 + -5.6247252571884387e-01 2.5324187242584062e-02 -4.2116142480586138e-01 + -6.5703192706153313e-01 -1.0120424189075383e-02 -5.5739314191657785e-01 + -7.5595007774772327e-01 -5.0571918134653393e-02 -7.0363891087994201e-01 + -8.6225447692157753e-01 -9.3245511893193800e-02 -8.5379082837258657e-01 + -9.8005026289310582e-01 -1.3533091604797304e-01 -1.0013685547615339e+00 + -1.1162791015139220e+00 -1.7257051172101873e-01 -1.1390386144828069e+00 + -1.2818034684740383e+00 -1.9889178191753215e-01 -1.2566982311354831e+00 + -1.4888435646899991e+00 -2.0806883014250277e-01 -1.3388347349490846e+00 + -1.7464418985344956e+00 -1.9524055460540723e-01 -1.3618713230010357e+00 + -2.0506716588394127e+00 -1.6020548620331510e-01 -1.2953126232109855e+00 + -2.3710827256104876e+00 -1.1309841050450808e-01 -1.1184578117045862e+00 + -2.6590055627231322e+00 -7.1288438521287301e-02 -8.4816944755077184e-01 + -2.7904892284732576e+00 -8.1612104886324310e-02 -8.9292202602270421e-01 + id 12274 + loc 4.7894690185785294e-02 1.9127058982849121e-01 1085 + blend 0.0000000000000000e+00 + interp 3.1298307058395175e-01:2.9960941509856354e-01:3.2980931037795980e-04:3.1297994075324592e-01:6.8154385497208836e-01:2.4116179629265710e-01:1.1637736517671646e+00:2.4769340904277895e-01:2.5752807517132617e+00:2.8337837290574025e-01:3.2238205973782570e+00 + CVs 20 + 3.9465993806906507e-01 3.6564475275197300e-01 3.0590235394148119e-01 + 6.4677370765427322e-01 6.3717818242303381e-01 6.0059590255695605e-01 + 8.4397858762551137e-01 8.5864722074529320e-01 9.1308565793203345e-01 + 1.0149973395589658e+00 1.0405374465537536e+00 1.2483845537776681e+00 + 1.1466277079452718e+00 1.1746217946242132e+00 1.5972153892434564e+00 + 1.2306504036578645e+00 1.2540702974292435e+00 1.9435704275379435e+00 + 1.2661619339682981e+00 1.2750306558725231e+00 2.2668314206976707e+00 + 1.2610247802676180e+00 1.2389585832956500e+00 2.5466423758859928e+00 + 1.2317319361115882e+00 1.1534685326257170e+00 2.7660505212275446e+00 + 1.1966363796373867e+00 1.0309657241736274e+00 2.9206429064034962e+00 + 1.1693509089437872e+00 8.8223283364973515e-01 3.0207269579811946e+00 + 1.1617536660581429e+00 7.1669568602224742e-01 3.0778003882041776e+00 + 1.1832372996254485e+00 5.4689486048237002e-01 3.0991349058297080e+00 + 1.2342060007109230e+00 3.8503283438241492e-01 3.0911485087457313e+00 + 1.3086494213379902e+00 2.3635440639411648e-01 3.0637715416425335e+00 + 1.4076571393044506e+00 5.7133463384122174e-02 3.0475784724246351e+00 + 1.5623179847701119e+00 -2.0618112749016337e-01 3.0843620934456490e+00 + 1.7937409819473551e+00 -5.0568443885294356e-01 3.2043672869648701e+00 + 2.0839887942223045e+00 -6.7588611580279456e-01 3.4103355082289091e+00 + id 12275 + loc 1.8462140113115311e-02 8.1851041316986084e-01 1076 + blend 0.0000000000000000e+00 + interp 4.2621515296641815e-01:3.3187853995239253e-01:1.2001568592535983e-02:1.9396029960594696e-01:1.0056698937697863e+00:2.7823636965581716e-01:1.9214364063945939e+00:3.2350112450918711e-01:2.8242325070771499e+00:4.2621089081488850e-01:3.2498940050849825e+00 + CVs 20 + 1.3188723941292410e-01 3.0486186625677858e-01 6.3409731135082914e-02 + 2.7615851954861298e-01 5.7378417017684769e-01 8.3985337764451634e-02 + 4.2769582885649521e-01 8.1582285128986598e-01 8.5644093445238184e-02 + 5.8466475475351376e-01 1.0417753342442222e+00 8.3495297174241367e-02 + 7.4518777812536430e-01 1.2520857821226112e+00 7.7568144656318894e-02 + 9.0633745471633465e-01 1.4482585815427109e+00 6.9990392572882254e-02 + 1.0680753359319417e+00 1.6351235154870938e+00 6.2486121966914832e-02 + 1.2336239071915014e+00 1.8201974882809351e+00 5.3275036335831749e-02 + 1.4050072161135561e+00 2.0135454568187261e+00 3.2270122595439044e-02 + 1.5758032928382952e+00 2.2185629388975969e+00 -2.2881220120626100e-02 + 1.7343870201936240e+00 2.4223892274210641e+00 -1.3362303780113360e-01 + 1.8775913310676333e+00 2.5949056902810916e+00 -3.0269087107766335e-01 + 2.0186048648682839e+00 2.6970759541925764e+00 -5.0437222017413752e-01 + 2.1877717546889404e+00 2.6980174033262840e+00 -6.9176818331157253e-01 + 2.4217097442485795e+00 2.5904051232520278e+00 -8.4212507251175772e-01 + 2.7288097192337895e+00 2.3771190032713898e+00 -9.9336556056738501e-01 + 3.0613516504983296e+00 2.0435084787337532e+00 -1.2084437033090190e+00 + 3.2596583137431585e+00 1.6177386769760953e+00 -1.4834283838886166e+00 + 3.0039319456109497e+00 1.5259884587065935e+00 -1.5600775802049536e+00 + id 12276 + loc 6.1144101619720459e-01 2.8803077340126038e-01 416 + blend 0.0000000000000000e+00 + interp 3.8821025094442679e-01:3.1095112459058799e-01:2.7906194566510856e-01:3.8050161934764037e-01:1.0405200329871727e+00:3.8820636884191739e-01:1.7490898794917875e+00:2.3339782193618616e-01:2.6285917706088378e+00:3.4740403914118267e-01:3.1258079674597643e+00:2.7894524681670602e-01:3.8989829131121794e+00 + CVs 20 + -5.8293731936592141e-01 2.2563194078455373e-01 6.9054694853790358e-02 + -9.8235864022031327e-01 3.4359559003873719e-01 1.7208810341472033e-01 + -1.3458937494292627e+00 4.2882938001192383e-01 2.7879333409242352e-01 + -1.7399896465265132e+00 5.1328578265461411e-01 3.7961713355767146e-01 + -2.1683132455237866e+00 5.9263608126780853e-01 4.7196518413249899e-01 + -2.6349191075549330e+00 6.6179437800337393e-01 5.5076770560581734e-01 + -3.1416103605734711e+00 7.1486920176430313e-01 6.0780006378867490e-01 + -3.6852094119918020e+00 7.4492447316646393e-01 6.3535248508698339e-01 + -4.2582364502757120e+00 7.4498895605730064e-01 6.2669004613587964e-01 + -4.8474476668924051e+00 7.0969210897438217e-01 5.7644509694641355e-01 + -5.4252091135291982e+00 6.3462470230122481e-01 4.9838398279148888e-01 + -5.9490605842394979e+00 5.1550307628388947e-01 4.4771704311832550e-01 + -6.3861647807244877e+00 3.5568133822262205e-01 4.8078084280768940e-01 + -6.7433748175435850e+00 1.6045932204174207e-01 5.8874270895940484e-01 + -7.0401764809026730e+00 -7.2732796343366157e-02 7.3520395301617136e-01 + -7.2603952129029317e+00 -3.2443224341984278e-01 9.0777358865467872e-01 + -7.3812720628037303e+00 -5.5395456760643524e-01 1.0997835544276899e+00 + -7.4172179246643735e+00 -7.3968756622040166e-01 1.2900798748504141e+00 + -7.5562087869770007e+00 -1.0241139561688395e+00 1.4110396848651130e+00 + id 12277 + loc 2.1683807671070099e-01 9.8280274868011475e-01 1048 + blend 0.0000000000000000e+00 + interp 4.9309494405310217e-01:4.8652390832470116e-01:5.6210725752066448e-01:3.0381562771782766e-01:1.8869312000354417e+00:3.1766596014208759e-01:2.7038102187491591e+00:4.9309001310366168e-01:3.0916625471654982e+00:3.4704277954272766e-01:3.9660919257397285e+00 + CVs 20 + 1.0832069372179474e-01 5.6224053903410542e-01 -3.1873285140797974e-01 + 2.5352816404216305e-01 1.0796659188502273e+00 -5.2462556875887634e-01 + 4.1409594440397363e-01 1.5535279974313991e+00 -6.1912855422701707e-01 + 5.8048390056202392e-01 1.9990097162729870e+00 -6.2159722820298791e-01 + 7.6466555840123862e-01 2.4313884296955051e+00 -5.5233730159730454e-01 + 9.9241026783677766e-01 2.8592003877370158e+00 -4.4760057157121935e-01 + 1.2967375487894033e+00 3.2751533247498115e+00 -3.5111242748789540e-01 + 1.7028888373991560e+00 3.6547766495368155e+00 -3.0175573004692957e-01 + 2.2119674620686389e+00 3.9560498231907517e+00 -3.3209628698961557e-01 + 2.7976603398384894e+00 4.1541744927347937e+00 -4.6384711629566167e-01 + 3.4299545520541934e+00 4.2631492083629299e+00 -7.2159891979679203e-01 + 4.0311898475806673e+00 4.3005100675804648e+00 -1.1409871714040256e+00 + 4.4875175187483967e+00 4.2509617618702595e+00 -1.6995483496716253e+00 + 4.7695570318218889e+00 4.0851220576825220e+00 -2.3314538286548316e+00 + 4.9120040938508289e+00 3.8010533587464299e+00 -3.0012073384042139e+00 + 4.9703054925935977e+00 3.4251737754852405e+00 -3.7062373069660213e+00 + 5.0045531795590446e+00 2.9890210603840064e+00 -4.4650507047536525e+00 + 4.9643087188478789e+00 2.4830785649332507e+00 -5.2270214401447834e+00 + 4.6186058882684566e+00 2.0573699112760764e+00 -5.5008766744564586e+00 + id 12278 + loc 5.1919907331466675e-01 7.9475444555282593e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0599152633052965e-01:3.2261984692924234e-01:5.2472448793918169e-01:3.4881058324288577e-01:1.1508290562822836e+00:2.9858600363910115e-01:1.9824163036076659e+00:4.0598746641526634e-01:2.7071758788281550e+00:3.2233286857186499e-01:3.4451144425781726e+00 + CVs 20 + -2.0922886026179263e-01 2.9686051139269881e-01 2.9100695802798582e-01 + -4.3501909242641296e-01 5.3844152233018094e-01 5.4802721339082927e-01 + -6.7047146150966241e-01 7.5630029169633062e-01 8.0852029858886942e-01 + -9.1625140901613289e-01 9.6202034001263215e-01 1.0796388093237850e+00 + -1.1840641104655221e+00 1.1538406731035502e+00 1.3418443151628836e+00 + -1.4829757793335610e+00 1.3272452793569574e+00 1.5767574559696422e+00 + -1.8223269014259929e+00 1.4800473881515939e+00 1.7685741844095684e+00 + -2.2144138733345713e+00 1.6120383363964741e+00 1.8877074393682847e+00 + -2.6430701618083137e+00 1.6938418530807140e+00 1.8772140697138178e+00 + -3.0219303681186007e+00 1.6732934499269083e+00 1.7347254376413228e+00 + -3.2786842309716975e+00 1.5772721114149575e+00 1.5839589640422453e+00 + -3.4267719827402474e+00 1.5225158936622831e+00 1.5517196445182360e+00 + -3.5286069834957026e+00 1.5101588936060442e+00 1.5697632288217451e+00 + -3.5991996271767195e+00 1.2542333573245170e+00 1.5111351378050826e+00 + -3.5634941769824806e+00 6.1160309447024463e-01 1.3480496913237494e+00 + -3.3255325807299161e+00 -2.5220844332462089e-01 9.8032823623714038e-01 + -2.8884487613576502e+00 -1.0387587118018964e+00 3.0795823328583521e-01 + -2.4216606743444089e+00 -1.4595372662256483e+00 -5.0177339826050971e-01 + -2.1843396908107411e+00 -1.5181075711141905e+00 -8.5105154871605304e-01 + id 12279 + loc 9.8883181810379028e-01 9.9230200052261353e-01 261 + blend 0.0000000000000000e+00 + interp 2.1854899484606545e+00:2.9424658614158161e-01:5.0358263198019859e-01:2.1230436256014779e-01:1.2404638907798677e+00:1.3365171357357880e-01:2.0376279945620257e+00:4.4158350087986803e-01:2.3679100700846818e+00:1.4807930952352950e+00:2.8038638245897829e+00:2.1854799484606544e+00:2.9258851379523980e+00 + CVs 20 + -8.8030095224049376e-01 3.7857526433677385e-01 -4.2494116621513400e-01 + -1.5373991123601736e+00 5.7629827443148929e-01 -6.3412082839092132e-01 + -2.1823114216261783e+00 6.8284596405575870e-01 -7.2746547122735383e-01 + -2.9049569075202588e+00 7.6214758899599910e-01 -7.6739664597073953e-01 + -3.6963540090818654e+00 8.4707726372404513e-01 -8.0675944613908745e-01 + -4.5279090162708799e+00 9.3076414343153502e-01 -9.0773812241834584e-01 + -5.3637505148064424e+00 9.5837228836177235e-01 -1.1142629681038776e+00 + -6.1510077058150801e+00 8.6877831260984184e-01 -1.4360458945694412e+00 + -6.8277034415353519e+00 6.3095935099910117e-01 -1.8412088203450232e+00 + -7.3493310761991424e+00 2.4930469378005249e-01 -2.2683686110778165e+00 + -7.7043408881887734e+00 -2.4325346455980412e-01 -2.6544017804465021e+00 + -7.9136464676905458e+00 -7.9013860798232871e-01 -2.9648121932481692e+00 + -8.0117970725448266e+00 -1.3518516366299327e+00 -3.1919839771949459e+00 + -8.0264503062164483e+00 -1.9505485592933685e+00 -3.3473438435257465e+00 + -7.9925887624953145e+00 -2.6274382980304600e+00 -3.4541017038609461e+00 + -7.9836541418385263e+00 -3.3938794650102548e+00 -3.5377705603563796e+00 + -8.0770471320693815e+00 -4.2034190039888344e+00 -3.6101870831403216e+00 + -8.3029302212032938e+00 -4.9774022438083687e+00 -3.6527053107552345e+00 + -8.5904784745437919e+00 -5.6709602980946023e+00 -3.6846393026738697e+00 + id 12280 + loc 9.5822507143020630e-01 6.3397890329360962e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2030867779187903e-01:3.2366779278469948e-01:9.5270932025410837e-01:3.6653733091788460e-01:1.7537287666701453e+00:4.2030447470510113e-01:2.2206485182335904e+00:2.4151194988369692e-01:2.8671860402273648e+00:2.8011259399393951e-01:3.9441801257518003e+00 + CVs 20 + 1.7570998839541296e-01 2.3215867642020283e-01 -1.7465433338761699e-01 + 3.7431372976896404e-01 4.6560091472683018e-01 -3.8096528045564926e-01 + 5.8750292471094923e-01 7.0259724377687383e-01 -5.8371539126618266e-01 + 8.0329656984439601e-01 9.3975072098359913e-01 -7.8126627234113677e-01 + 1.0074673846375202e+00 1.1821721483913321e+00 -9.9013119562925189e-01 + 1.1754452218711859e+00 1.4251759982617227e+00 -1.2243267160197244e+00 + 1.2819747844250111e+00 1.6353132819919363e+00 -1.4873303498449226e+00 + 1.3204805841352873e+00 1.7510446000450919e+00 -1.7631126289878523e+00 + 1.3081623761782843e+00 1.7189058154878218e+00 -2.0081761634703095e+00 + 1.2796025077966693e+00 1.5650619332819968e+00 -2.1767396208645295e+00 + 1.2587573978129241e+00 1.3767183678266490e+00 -2.2988099604985162e+00 + 1.2466094562092485e+00 1.1870813205961912e+00 -2.4346360686748985e+00 + 1.2516809041159498e+00 9.9824375493000472e-01 -2.5997661916418795e+00 + 1.2936053820246691e+00 8.2885004701863463e-01 -2.7800826567821830e+00 + 1.3962615990949225e+00 7.1843909758266933e-01 -2.9395438889028402e+00 + 1.5738064287718192e+00 7.4829584398290727e-01 -2.9944432393031799e+00 + 1.7226107244378981e+00 9.8957217363027994e-01 -2.8611299645732657e+00 + 1.7649043440890286e+00 1.2040507879636531e+00 -2.7231119543408284e+00 + 2.0457184033272915e+00 1.0783073075542198e+00 -2.8447396188241196e+00 + id 12281 + loc 9.1680151224136353e-01 5.4804790019989014e-01 411 + blend 0.0000000000000000e+00 + interp 4.0266782344246294e-01:3.7742996515270943e-01:8.2738190046210747e-02:2.4611210325382207e-01:7.4545588664925799e-01:3.0158547474652708e-01:1.1406072417338970e+00:3.8888933531351294e-01:1.9917929332930688e+00:3.3078062229039490e-01:2.6645835583266528e+00:3.2222787623920329e-01:3.1239070225117906e+00:4.0266379676422853e-01:3.7957809115659704e+00 + CVs 20 + 8.1426310500428667e-01 1.8209019752830433e-01 -2.6744290169368512e-01 + 1.4160946361346487e+00 2.2133073499392852e-01 -5.0256046370317753e-01 + 1.9753098939914813e+00 2.1155559209429020e-01 -7.1927933598489591e-01 + 2.5532958401890649e+00 1.8237215849199595e-01 -9.2155211001196058e-01 + 3.1383254559691593e+00 1.2485195361328760e-01 -1.1052710403068680e+00 + 3.7180704500039301e+00 3.1813505327228375e-02 -1.2698869932660708e+00 + 4.2826947964154352e+00 -1.0296902009280440e-01 -1.4094384130745907e+00 + 4.8234827836178971e+00 -2.8921002227274384e-01 -1.5155205528654236e+00 + 5.3289738650885123e+00 -5.3809877539487716e-01 -1.5829592065802145e+00 + 5.7826250889905122e+00 -8.5828954203285912e-01 -1.6154153309746837e+00 + 6.1702040821932691e+00 -1.2542556200796051e+00 -1.6196644452301814e+00 + 6.4882311405294457e+00 -1.7247427963910789e+00 -1.5930961935364443e+00 + 6.7366767170503472e+00 -2.2594584226332404e+00 -1.5259937614998833e+00 + 6.9091498184497508e+00 -2.8379316137524269e+00 -1.4178942984728935e+00 + 6.9965806652116882e+00 -3.4355717181726853e+00 -1.2792102040356164e+00 + 6.9908121778042176e+00 -4.0234746880444128e+00 -1.1138453998084126e+00 + 6.8936953025011425e+00 -4.5678494301572634e+00 -9.1882092117738001e-01 + 6.7339985581854647e+00 -5.0533997177409367e+00 -7.1282709536746003e-01 + 6.7034937935816385e+00 -5.5619584098920898e+00 -5.5998824861079766e-01 + id 12282 + loc 9.4582247734069824e-01 9.1078263521194458e-01 372 + blend 0.0000000000000000e+00 + interp 5.1980634273194548e-01:5.1487392567050239e-01:8.6967702287443549e-02:3.3921646946168649e-01:6.8515195807278628e-01:4.4687333527105172e-01:1.0481444281075925e+00:5.1980114466851823e-01:1.5781614995268716e+00:3.8239850451313462e-01:2.0005573190379904e+00:3.4411067905371107e-01:2.9743211729720640e+00:3.4678816126388395e-01:3.4901286959149078e+00 + CVs 20 + -3.2088308270915988e-01 3.3962817880045010e-01 4.3639766786734369e-02 + -6.1302574362141127e-01 6.1246652183894668e-01 1.1686788373039594e-01 + -9.4929214169735965e-01 7.9621111407249079e-01 2.2998654133945726e-01 + -1.3521276963555939e+00 9.1114850353234300e-01 3.9769589157796759e-01 + -1.7905403503573445e+00 1.0378301438180704e+00 6.1963663333642782e-01 + -2.2555611807353646e+00 1.2508931248387900e+00 8.6245179079875189e-01 + -2.7371187389834470e+00 1.5828518582142266e+00 1.0528984774376777e+00 + -3.1878539079734027e+00 2.0237013581997876e+00 1.1260758519473435e+00 + -3.5582165410266056e+00 2.5446294966129446e+00 1.0579125311003212e+00 + -3.8367479697827296e+00 3.1164966334903408e+00 8.3510105299957826e-01 + -4.0453452536144967e+00 3.7005867853820487e+00 4.2813259616784993e-01 + -4.2039756795436478e+00 4.2256576801533727e+00 -2.0959868696362371e-01 + -4.2889628910260473e+00 4.5569497584095862e+00 -1.0868896385373581e+00 + -4.2343475672650115e+00 4.5484447911028623e+00 -2.0763666877577953e+00 + -4.0043477771060747e+00 4.1593247114090239e+00 -2.9823655759588270e+00 + -3.6921257765369289e+00 3.3974268056594550e+00 -3.6976674729948327e+00 + -3.5996713966144598e+00 2.2106062035031790e+00 -4.1651707817581469e+00 + -3.9750817528006914e+00 9.2440907113372939e-01 -4.2072152751811860e+00 + -4.0450418658309886e+00 2.0817458877115858e-01 -4.2241594905489048e+00 + id 12283 + loc 7.2823017835617065e-02 6.6462701559066772e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1089426669058340e-01:2.6421189494443942e-01:3.1308136092673811e-01:2.5917545179695461e-01:1.0211020470972418e+00:3.1089115774791648e-01:1.9738096888005483e+00:2.6329800395165504e-01:2.8591886108455040e+00:3.0790189872788964e-01:3.8919966364498375e+00 + CVs 20 + 2.1463999972760830e-01 4.0366988612490912e-01 -1.9498182967376970e-01 + 4.6629463703175550e-01 8.1667370708872367e-01 -4.2498276985845573e-01 + 7.4108956171839824e-01 1.2432422066567079e+00 -6.5338026280236938e-01 + 1.0310334075140049e+00 1.6687850228616801e+00 -8.6032044710980782e-01 + 1.3204895563086392e+00 2.0542400069412943e+00 -1.0782149245761548e+00 + 1.5814765858751507e+00 2.3433295268237559e+00 -1.3790732698878843e+00 + 1.7910822821613983e+00 2.4842208913964825e+00 -1.7819234079205317e+00 + 1.9299275464906787e+00 2.4194831137932269e+00 -2.2319212105471942e+00 + 1.9876537349317154e+00 2.1518498105516888e+00 -2.6316661068710649e+00 + 2.0015755651700902e+00 1.7887920955454284e+00 -2.9476919988996233e+00 + 2.0274824642945193e+00 1.4103269458439205e+00 -3.2180821359666520e+00 + 2.1100740907372986e+00 1.0699017649354663e+00 -3.4947959557172497e+00 + 2.2484009309897730e+00 8.2599687869027150e-01 -3.8286853826276261e+00 + 2.3890859160815761e+00 7.6584794054763516e-01 -4.2381898883493605e+00 + 2.4529039334986895e+00 1.0000579613360485e+00 -4.6268497986410502e+00 + 2.3490543225130431e+00 1.5219709047012204e+00 -4.7342991788500246e+00 + 2.0604678569254480e+00 1.9766508811608210e+00 -4.3838569032955776e+00 + 1.8044585086342226e+00 2.1492665268234283e+00 -4.1173464453351274e+00 + 1.6611035507871437e+00 2.4808911940741423e+00 -4.3281371741558425e+00 + id 12284 + loc 6.0329145193099976e-01 8.7576597929000854e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0284857563499860e-01:3.5680330241755004e-01:5.3286701020360561e-01:3.3040145165720963e-01:1.0016505481506894e+00:3.0048431016973548e-01:1.7431589324271495e+00:4.0284454714924228e-01:2.1886102014344786e+00:3.1787332795452788e-01:3.0493783031354464e+00:3.7549983663211112e-01:3.7734806819594917e+00 + CVs 20 + 1.5912107934017275e-01 2.9447205192593040e-01 -6.7912601860070906e-02 + 3.2341152351257701e-01 5.7535615262661999e-01 -1.6331861731052696e-01 + 4.8557740010737777e-01 8.4824754434798133e-01 -2.8308672719025707e-01 + 6.3999903123697843e-01 1.1109958248035501e+00 -4.2919983032964476e-01 + 7.8204143678663252e-01 1.3569176229339042e+00 -6.0802196507703865e-01 + 9.0283894399856435e-01 1.5762547796002453e+00 -8.2421532043454104e-01 + 9.8897738653797473e-01 1.7556039522310998e+00 -1.0785322799196539e+00 + 1.0233998645172304e+00 1.8781399987319407e+00 -1.3634848302969718e+00 + 9.9049181405589937e-01 1.9275837920015897e+00 -1.6586202294041263e+00 + 8.8645893686620314e-01 1.8997545513831438e+00 -1.9342940790023724e+00 + 7.2398978212751719e-01 1.8067166565699726e+00 -2.1680751438916115e+00 + 5.2838552323854471e-01 1.6666883678096522e+00 -2.3644927618561886e+00 + 3.2138550757196610e-01 1.4901753124634012e+00 -2.5519077465833342e+00 + 1.0945344737700018e-01 1.2809533127237718e+00 -2.7435474243145812e+00 + -1.0753243119734955e-01 1.0443285557933926e+00 -2.9321734604646341e+00 + -3.2077877634102098e-01 7.8241487200910476e-01 -3.1243800996275173e+00 + -5.0495057665528587e-01 5.1061284312052635e-01 -3.3821754645511213e+00 + -6.2281336518826924e-01 2.8027862973670126e-01 -3.7788623145919216e+00 + -8.0493175749447310e-01 8.1898581031352169e-02 -4.0026996764625942e+00 + id 12285 + loc 8.5358309745788574e-01 2.7964940667152405e-01 397 + blend 0.0000000000000000e+00 + interp 3.9528709148533903e-01:3.3411532573453301e-01:2.8918391419046174e-02:3.3606148687256526e-01:1.0111318286648190e+00:3.9528313861442421e-01:1.9462980537895147e+00:3.5024159120776788e-01:2.4345917157979162e+00:3.4156245596914814e-01:3.0275321716982546e+00:3.6407216217672184e-01:3.6397091699726323e+00 + CVs 20 + -1.0882084393122453e+00 1.1792962540354379e-01 3.8227661301234989e-01 + -1.7395443298591255e+00 5.0619800145436572e-02 6.8432712229311587e-01 + -2.3275970592045501e+00 -9.0190454540049952e-02 9.7395820858405546e-01 + -2.9749104271351463e+00 -2.4705874254980442e-01 1.2403410535091608e+00 + -3.6669746268006418e+00 -4.2497856199338846e-01 1.4547137115441731e+00 + -4.3873608723842130e+00 -6.1220965364130375e-01 1.6039792258898604e+00 + -5.1295306441009609e+00 -7.9297306436388115e-01 1.6985359478906299e+00 + -5.8989530332154496e+00 -9.7295780773930707e-01 1.7638274534733771e+00 + -6.6923365456499457e+00 -1.1815636204169107e+00 1.8231299876832838e+00 + -7.4980272189299768e+00 -1.4668510930562775e+00 1.9002388459189672e+00 + -8.2864280245945885e+00 -1.8769167793895394e+00 2.0192140105250731e+00 + -9.0069987926125634e+00 -2.4287841002220882e+00 2.1894556878615128e+00 + -9.6109102395818979e+00 -3.1017748443362012e+00 2.4004258768509206e+00 + -1.0069218756949478e+01 -3.8604707719264786e+00 2.6326192540230000e+00 + -1.0373315025960890e+01 -4.6687959039607847e+00 2.8604080069461153e+00 + -1.0534690552450634e+01 -5.4899112516982678e+00 3.0439312407440537e+00 + -1.0567733935153848e+01 -6.2795497281247616e+00 3.1522705725178657e+00 + -1.0500613030214973e+01 -6.9839402749160682e+00 3.1817898016540145e+00 + -1.0465465909512291e+01 -7.4795575103382728e+00 3.1742071121922022e+00 + id 12286 + loc 9.2583113908767700e-01 9.4430726766586304e-01 1068 + blend 0.0000000000000000e+00 + interp 3.2309713952997082e-01:2.4498384353911229e-01:3.9484646715519445e-01:2.3735526040470176e-01:1.4637560117942341e+00:2.9296188694538683e-01:2.4046250201208208e+00:3.2309390855857556e-01:3.2079225826461770e+00:3.1913773372783394e-01:3.8258714673526373e+00 + CVs 20 + 1.2552836481074628e-01 3.9781140882743471e-01 -3.5100143592871069e-01 + 2.2261061297488999e-01 7.6004499104889922e-01 -6.5599924530731724e-01 + 3.0495409290040493e-01 1.1039741367952738e+00 -9.3995734899454542e-01 + 3.8411484865408335e-01 1.4357780063972581e+00 -1.2180541143794827e+00 + 4.7370226069290478e-01 1.7509111459290720e+00 -1.4936113249661227e+00 + 5.8833036332870803e-01 2.0376580122524217e+00 -1.7729492287214885e+00 + 7.4272765902645532e-01 2.2780338998368901e+00 -2.0691296248927409e+00 + 9.4808453818187532e-01 2.4464771161561352e+00 -2.3921825279924338e+00 + 1.2049995497872108e+00 2.5117939432223739e+00 -2.7363757211251252e+00 + 1.5070835171124914e+00 2.4508521586487881e+00 -3.0811548182556332e+00 + 1.8472949447686680e+00 2.2551278274344466e+00 -3.4094106800889770e+00 + 2.2200656956450073e+00 1.9292443441629494e+00 -3.7191583019737475e+00 + 2.6214580546881616e+00 1.5010980097953561e+00 -4.0225805233868952e+00 + 3.0367109924090645e+00 1.0072869126104473e+00 -4.3412034564313933e+00 + 3.4286072550666122e+00 4.5608631568598468e-01 -4.7199787239258777e+00 + 3.7337252691614760e+00 -1.4843680990833907e-01 -5.2412523634001023e+00 + 3.8701772718594261e+00 -7.3200726272896266e-01 -5.9604943037288427e+00 + 3.8237204666377025e+00 -1.1845495421725376e+00 -6.7936153464913254e+00 + 3.8075958190150576e+00 -1.5091194642673746e+00 -7.4990038189388937e+00 + id 12287 + loc 4.1737180203199387e-02 6.8104773759841919e-01 403 + blend 0.0000000000000000e+00 + interp 4.6698111786766971e-01:4.0099323825602667e-01:4.6324824788231411e-02:3.5387140385548121e-01:7.5708398598032767e-01:4.2653985942205547e-01:1.1677485524886697e+00:4.6697644805649108e-01:1.7990299489726462e+00:3.3766070731917996e-01:2.0856550723926834e+00:4.2824370219792973e-01:2.9341141398852963e+00:3.2857576850563153e-01:3.4081825188166359e+00 + CVs 20 + -6.8026366166045321e-02 1.2990803823911401e-01 3.1370129440466694e-02 + -1.3960534808283584e-01 2.7302242613748562e-01 5.9582122980811975e-02 + -2.1353899779016006e-01 4.2430644668144379e-01 8.9907216289081188e-02 + -2.8900983023170657e-01 5.8539560346562514e-01 1.2915517863719794e-01 + -3.6902987807158699e-01 7.5209350999367308e-01 1.7645531835755840e-01 + -4.5450444541333213e-01 9.1802173552270872e-01 2.3253391645187207e-01 + -5.4465014316798999e-01 1.0768556643003575e+00 2.9985193890695300e-01 + -6.3720464364348661e-01 1.2241545442060009e+00 3.8126254498932927e-01 + -7.2871329458137124e-01 1.3577731504603432e+00 4.7878372413978687e-01 + -8.1858632196869374e-01 1.4773932281224407e+00 5.9277000605694030e-01 + -9.1059806518563335e-01 1.5808367365843414e+00 7.2275618237507988e-01 + -1.0111950815274307e+00 1.6629837414094624e+00 8.6859853204893289e-01 + -1.1228934094417469e+00 1.7171312278656368e+00 1.0307365017736556e+00 + -1.2348386115958596e+00 1.7396451519978753e+00 1.2097395605271124e+00 + -1.3298301793381579e+00 1.7418064783366720e+00 1.4041581732470496e+00 + -1.4144506111405672e+00 1.7470500921537055e+00 1.6133108559380589e+00 + -1.5210808708043004e+00 1.7546118924061807e+00 1.8417234845812338e+00 + -1.6710140843226449e+00 1.7422089691437417e+00 2.0885287945692714e+00 + -1.9064245221321294e+00 1.7769733196334414e+00 2.3275573607530218e+00 + id 12288 + loc 5.7400298118591309e-01 2.3983910679817200e-01 406 + blend 0.0000000000000000e+00 + interp 4.3754446970878391e-01:3.0897361585683958e-01:5.7643486740689664e-01:4.0599529252404071e-01:1.0000262081360205e+00:3.6571390506034757e-01:1.8183701335333102e+00:3.0222187556556479e-01:2.7121632020531901e+00:4.3754009426408685e-01:3.2371344004595866e+00:3.2078645726625510e-01:3.8534165537136928e+00 + CVs 20 + -1.7474566573882047e-01 7.1731596547575660e-02 8.3911342214748108e-02 + -3.0827435669939096e-01 9.5607433856749177e-02 1.7179574733655836e-01 + -3.9107131647497306e-01 7.4057967069960678e-02 2.6062573118565568e-01 + -4.5377747757900289e-01 3.8183525181811784e-02 3.5760606851751453e-01 + -4.9501753942516641e-01 -7.6159788519437055e-03 4.6097172101838468e-01 + -5.1744889518232040e-01 -5.8328007179303309e-02 5.6931721431331350e-01 + -5.3140214539670050e-01 -1.0922812817386646e-01 6.8326843586545860e-01 + -5.5136979726464586e-01 -1.5830887076613220e-01 8.0493635594079971e-01 + -5.7526488914700735e-01 -2.0664934903611676e-01 9.3099535266897460e-01 + -5.7375918352691746e-01 -2.5376239048551569e-01 1.0485504363888585e+00 + -5.2767143138643058e-01 -2.9542024006229323e-01 1.1466851538590963e+00 + -4.6646568469426736e-01 -3.3285205999021394e-01 1.2315945202855503e+00 + -4.2911525525930005e-01 -3.7512483293937982e-01 1.3182335331395301e+00 + -4.1229030910264641e-01 -4.2389549299678775e-01 1.4057385572200427e+00 + -3.8736798470805839e-01 -4.7001075920616076e-01 1.4800661133088169e+00 + -3.4407827927637064e-01 -5.0543543584315176e-01 1.5356737011870332e+00 + -2.9979917781213344e-01 -5.3126269700121609e-01 1.5824860586708027e+00 + -2.7682485531076806e-01 -5.5864627241787901e-01 1.6338409049687588e+00 + -3.7532255172610041e-01 -6.8634253373942222e-01 1.7355704772915184e+00 + id 12289 + loc 7.7622824907302856e-01 5.2985018491744995e-01 1048 + blend 0.0000000000000000e+00 + interp 3.1679432429533733e-01:2.5404487008470361e-01:2.9331792819942137e-03:3.0817171141788363e-01:8.3860551519453286e-01:2.9387787189607451e-01:1.2166571986413013e+00:2.6249167547804581e-01:2.0182290757078332e+00:3.1679115635209437e-01:2.8736216039458906e+00:2.1890747598859797e-01:3.2003594212133843e+00 + CVs 20 + 8.2472191806304607e-02 7.4433323298337983e-01 -4.6659985562380046e-01 + 2.4772815867431780e-01 1.5197227907415303e+00 -9.0001499063266788e-01 + 4.7539339111893009e-01 2.3274469950326675e+00 -1.2691672637734437e+00 + 7.2134579105610441e-01 3.1241721900305603e+00 -1.4379914539267620e+00 + 1.0021852994462903e+00 3.7862701320596672e+00 -1.2700858068660796e+00 + 1.2903408080607974e+00 4.2025875195314759e+00 -8.2913405409656615e-01 + 1.5168629707803123e+00 4.3416660234296813e+00 -2.5427828398394259e-01 + 1.6294119441046211e+00 4.2283926759535504e+00 3.4649226163494795e-01 + 1.6100867120164502e+00 3.9105822532894585e+00 8.8027655883749922e-01 + 1.4983148330693228e+00 3.4612738637276879e+00 1.2727052352293622e+00 + 1.3625949701153099e+00 2.9517604591893010e+00 1.5338793474590140e+00 + 1.1986476882139023e+00 2.3945953839037704e+00 1.7602867411221312e+00 + 9.4665999454063676e-01 1.7546659127944739e+00 2.0096640122133360e+00 + 5.5999675666037330e-01 9.4366744420831283e-01 2.2582081955464339e+00 + 5.8394983737946854e-02 -9.9680294154865789e-02 2.4870962653634310e+00 + -2.8366028032263679e-01 -1.3209101710673790e+00 2.8613196541335695e+00 + -4.7906977741762891e-04 -2.4528719355552018e+00 3.5520975188554189e+00 + 9.7051560720705232e-01 -2.9828924895332669e+00 4.4415185647722177e+00 + 1.9713346714983133e+00 -2.7929943015518193e+00 5.0806608912078604e+00 + id 12290 + loc 2.0515289902687073e-01 1.3621869683265686e-01 409 + blend 0.0000000000000000e+00 + interp 4.9607476435000958e-01:4.2937032228881339e-01:7.4918446787437021e-01:3.2797281755119406e-01:1.0644063939640469e+00:4.0794257321826116e-01:1.7772010791309383e+00:4.1246423414728051e-01:2.0409059318309275e+00:4.9606980360236608e-01:2.4930382165512790e+00:4.0306613869433139e-01:3.0010460939504973e+00:3.2223111482918343e-01:3.9222671836196192e+00 + CVs 20 + -8.8303537819940520e-02 1.8165428900231603e-01 -3.9989336178464574e-01 + -1.7629787585354620e-01 3.2425374924117351e-01 -7.6603408315892052e-01 + -2.4362139653194168e-01 4.4137372677281522e-01 -1.1282621358819811e+00 + -2.9368509601540371e-01 5.3640207659893946e-01 -1.4972429948524668e+00 + -3.3495075348132608e-01 6.0712525256587446e-01 -1.8683794055953067e+00 + -3.7050720033574108e-01 6.5526253703475845e-01 -2.2391179564548471e+00 + -4.0037288257932024e-01 6.8182435702555710e-01 -2.6084270103377722e+00 + -4.2530835155173230e-01 6.8266158623264195e-01 -2.9751472134694295e+00 + -4.4786246255121276e-01 6.5197326797336697e-01 -3.3395630564925494e+00 + -4.7040353353142433e-01 5.8691860458019063e-01 -3.7023511900494230e+00 + -4.9369535742820481e-01 4.8762060812533292e-01 -4.0602103739518256e+00 + -5.1877488183992548e-01 3.5554210814123000e-01 -4.4068256576705442e+00 + -5.4522252381501546e-01 1.9214696353998706e-01 -4.7394769112432380e+00 + -5.6587125857795462e-01 -3.1072288495237466e-03 -5.0615526461254383e+00 + -5.6849652168333276e-01 -2.3317965873147672e-01 -5.3739147013719206e+00 + -5.4331454184993822e-01 -5.0025447337149753e-01 -5.6673942601585328e+00 + -4.8731852066380099e-01 -8.0468605356450906e-01 -5.9295279479269105e+00 + -4.0173652402781102e-01 -1.1457401564155116e+00 -6.1611871453678013e+00 + -2.8528579060927189e-01 -1.5101217811073457e+00 -6.4251693792608737e+00 + id 12291 + loc 2.5220927596092224e-01 8.1583261489868164e-01 1085 + blend 0.0000000000000000e+00 + interp 3.2501065859543293e-01:2.6569562445015227e-01:9.3345100289023353e-01:2.6772251860311264e-01:1.3281204904232220e+00:2.5038125257203159e-01:2.0039821616284277e+00:3.2500740848884702e-01:2.9992113105748062e+00:2.8673357748338252e-01:3.8565613236008502e+00 + CVs 20 + -1.0331177243691286e-01 4.7497877326817040e-01 3.6806581963548701e-01 + -2.6300409649656487e-01 8.7765527278598821e-01 6.4771522153972083e-01 + -4.7000775067403822e-01 1.2468778408538586e+00 8.9533676197518897e-01 + -7.3172580352465633e-01 1.5951160913997415e+00 1.1181398892946552e+00 + -1.0546019121259036e+00 1.9045438309972107e+00 1.2853321960115653e+00 + -1.4353930671396133e+00 2.1493886484639910e+00 1.3657729480890657e+00 + -1.8544406854028501e+00 2.2945210596145680e+00 1.3319158914299578e+00 + -2.2666949720175325e+00 2.3025131007924724e+00 1.1751146911192170e+00 + -2.6100649581320914e+00 2.1517972218237378e+00 9.3190411892604552e-01 + -2.8511256528429447e+00 1.8658038657279445e+00 6.9344930754743461e-01 + -3.0155480219338595e+00 1.4982626527374729e+00 5.3824039835101001e-01 + -3.1351591339017268e+00 1.0845490938249107e+00 4.9314117755747000e-01 + -3.2209462853551307e+00 6.4884173054332828e-01 5.7486945607630258e-01 + -3.2789847335355704e+00 2.3155431465262699e-01 8.1575266375270272e-01 + -3.3083352838262323e+00 -9.4109681172541051e-02 1.2452368841902488e+00 + -3.3314637791962594e+00 -2.5996303994274689e-01 1.8061203530589331e+00 + -3.4139650596002147e+00 -2.4386978476345111e-01 2.4125768502780880e+00 + -3.5716791565244064e+00 -3.1998475627144529e-02 3.0077924315740838e+00 + -3.7208076147729638e+00 -2.9480579303965149e-01 3.5154367245361828e+00 + id 12292 + loc 8.4877383708953857e-01 1.6290681064128876e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8356024032196870e-01:3.8363013271884583e-01:1.9548419597870637e-01:3.2249371772055507e-01:9.8255299688908304e-01:3.6783792776163943e-01:1.5880117114374048e+00:2.7306188945916254e-01:2.0139407658438397e+00:4.3125222254975865e-01:2.4888078469487200e+00:4.8355540471956548e-01:2.9927253399137452e+00:3.0957647726294640e-01:3.7696030448056277e+00 + CVs 20 + -1.3812800513187615e-01 3.6726833665949954e-01 -2.4660154083071173e-01 + -2.7898343773030132e-01 6.5678341978344057e-01 -3.6359906171982015e-01 + -4.3407263438298160e-01 9.3000099672822367e-01 -4.3918263688037312e-01 + -6.0270629449752899e-01 1.2003914936831479e+00 -5.1371064729428806e-01 + -7.8306195828458558e-01 1.4540377529008284e+00 -5.8107082023652890e-01 + -9.6721161932033195e-01 1.6710573401380218e+00 -6.3167275506221610e-01 + -1.1409637750557187e+00 1.8310581829327186e+00 -6.5542267725502856e-01 + -1.2865914094403539e+00 1.9223921087232356e+00 -6.5112615758720882e-01 + -1.3876955982813302e+00 1.9485662829751123e+00 -6.3113747705981438e-01 + -1.4435552442093518e+00 1.9300543223195552e+00 -6.1287067438047049e-01 + -1.4793241360095410e+00 1.8887121798468414e+00 -6.0055218443586178e-01 + -1.5227924766132948e+00 1.8258237371838417e+00 -5.8460593319566168e-01 + -1.5828122836506604e+00 1.7296507386213613e+00 -5.5936315971079875e-01 + -1.6543860343917607e+00 1.5925221951191952e+00 -5.3002182591752911e-01 + -1.7271850112116445e+00 1.4185932018894105e+00 -5.1108441013094463e-01 + -1.7825119042339954e+00 1.2405741168077129e+00 -5.3105080194140664e-01 + -1.7927110015584578e+00 1.1455312513947935e+00 -6.1493162257985556e-01 + -1.7628260705435435e+00 1.1754258368773556e+00 -7.1556041308002871e-01 + -1.7710038523398957e+00 9.3359160877807668e-01 -9.1459048488768857e-01 + id 12293 + loc 2.7470114827156067e-01 2.5245732069015503e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5102386395332505e-01:4.5101935371468554e-01:1.0092910518422205e-04:3.0153339328158479e-01:5.9640430020069424e-01:4.0287535480198067e-01:1.3338626217279221e+00:3.0175272296362171e-01:2.0408984204222711e+00:3.3810516054900702e-01:2.9004271825242380e+00:3.7457503097549055e-01:3.2817822291427348e+00 + CVs 20 + -7.1574435243406523e-02 3.5453129424953100e-01 -1.3672540484580417e-01 + -1.8647633549275341e-01 7.1460550748376184e-01 -2.7590628397891709e-01 + -3.2853111291556036e-01 1.0789303483844208e+00 -4.2821349496176531e-01 + -4.9676183615226710e-01 1.4363543577242215e+00 -5.8921547466070057e-01 + -7.0786711712939443e-01 1.7810497594872139e+00 -7.5303591153381755e-01 + -9.7769607718418428e-01 2.1087881998885774e+00 -9.2892499534009498e-01 + -1.3109652454079064e+00 2.4057405524878188e+00 -1.1387634133282007e+00 + -1.6969439727331186e+00 2.6482946303030239e+00 -1.4006942840916918e+00 + -2.1176064483963604e+00 2.8051098383550785e+00 -1.7285122872628955e+00 + -2.5430662418667058e+00 2.8282720308627218e+00 -2.1274065681513514e+00 + -2.9268394509924835e+00 2.6668918040343925e+00 -2.5516795714030533e+00 + -3.2369455537500404e+00 2.3033379480555585e+00 -2.8888280853555366e+00 + -3.4489909212332885e+00 1.7944643997243583e+00 -3.0247806680498672e+00 + -3.5473596192961745e+00 1.2602959965423952e+00 -2.9590486042369637e+00 + -3.5331560937538580e+00 7.8180066710947327e-01 -2.7351593242059629e+00 + -3.4051872082751204e+00 5.1508108317323764e-01 -2.3307166206317791e+00 + -3.2358800380734833e+00 7.8430294001889855e-01 -1.9149492609886136e+00 + -3.1373421372930510e+00 1.2208930549877131e+00 -1.8369361225297198e+00 + -2.9479607742246534e+00 1.4451079437105592e+00 -1.5944913732346528e+00 + id 12294 + loc 4.2045867443084717e-01 8.1157881021499634e-01 1074 + blend 0.0000000000000000e+00 + interp 4.5020942899348881e-01:2.7421571681815787e-01:7.1307930273117226e-01:4.5020492689919889e-01:1.3504821731571051e+00:2.7143486427678210e-01:2.0333891631465311e+00:4.3408129377339910e-01:3.0000824564305599e+00:2.6480723255907662e-01:3.3748579738274271e+00 + CVs 20 + 2.0971248508508919e-01 3.5695092569240028e-01 -3.1571674094127516e-01 + 4.5483297001771200e-01 7.2755682820341072e-01 -6.1628265676942340e-01 + 7.4480367372765321e-01 1.1041843696940665e+00 -9.0729827039131639e-01 + 1.0818209594710395e+00 1.4792755453862754e+00 -1.1908372408336159e+00 + 1.4539167949683387e+00 1.8404620374273328e+00 -1.4893179557928744e+00 + 1.8314441398345025e+00 2.1591021776088923e+00 -1.8573033729121604e+00 + 2.1719722823471312e+00 2.3698048924504778e+00 -2.3413829346811497e+00 + 2.4210259088611692e+00 2.3664475919412427e+00 -2.9226283641974677e+00 + 2.5408742780256186e+00 2.1048326134759474e+00 -3.4829715620172408e+00 + 2.5599545392300058e+00 1.6750457890264314e+00 -3.9157946597944395e+00 + 2.5405190359061351e+00 1.1886029314181457e+00 -4.1988126388889038e+00 + 2.5428849929003641e+00 7.3474031084617164e-01 -4.3714080140122649e+00 + 2.5803215244855511e+00 3.5336323486721849e-01 -4.5238425855920994e+00 + 2.6272726683323091e+00 3.8045379206912325e-02 -4.7578528989512723e+00 + 2.6718476174345325e+00 -1.9436077940700283e-01 -5.1305486455614862e+00 + 2.7103613981472447e+00 -2.6057735405003457e-01 -5.6293054910393572e+00 + 2.7110788718569019e+00 -6.3037450953196225e-02 -6.1535457628319428e+00 + 2.6319066220522327e+00 2.4849309170897224e-01 -6.5707433262398034e+00 + 2.4927392767681007e+00 4.0484576226959756e-01 -6.9280883563891944e+00 + id 12295 + loc 9.4722062349319458e-01 9.7689938545227051e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4533840700293900e-01:3.0166139357001248e-01:4.5352910670544699e-02:3.4533495361886896e-01:9.0955593698940496e-01:1.7462358210409354e-01:2.0023132039336793e+00:2.8663624481218980e-01:2.8939545530518620e+00:2.8293164629050277e-01:3.4437274150671140e+00 + CVs 20 + 1.3817620234333033e-01 2.5796410955601623e-01 -2.1189431604907030e-01 + 2.8564506898521269e-01 5.1208032100259437e-01 -4.1951258427846422e-01 + 4.2097273759377873e-01 7.6949984236190394e-01 -6.2968458503230085e-01 + 5.3198496707740928e-01 1.0311118544254563e+00 -8.4760174906826524e-01 + 6.1522618192411960e-01 1.2929705038435033e+00 -1.0777234383912724e+00 + 6.6869441609876790e-01 1.5488739198033890e+00 -1.3252770644432412e+00 + 6.9225095769238076e-01 1.7908198761258893e+00 -1.5966343459055921e+00 + 6.8812369792447758e-01 2.0085780806847486e+00 -1.8980901066429690e+00 + 6.6053938401031909e-01 2.1888318681818362e+00 -2.2332894380966835e+00 + 6.1421680409911472e-01 2.3166496470111566e+00 -2.6008508120626881e+00 + 5.5358613659033729e-01 2.3757055631233004e+00 -2.9969994042069543e+00 + 4.8533467005557163e-01 2.3473912426391514e+00 -3.4131575035290731e+00 + 4.2197661786702489e-01 2.2181718940680488e+00 -3.8331859902946177e+00 + 3.8064403021116333e-01 1.9831409906617317e+00 -4.2341025705728121e+00 + 3.7886246662871670e-01 1.6455171933315258e+00 -4.5872281898042377e+00 + 4.3217208774935201e-01 1.2161768688994119e+00 -4.8561210443282317e+00 + 5.4107416360282623e-01 7.2121304883991100e-01 -4.9959269124318268e+00 + 6.8748622222536226e-01 2.0609301457688389e-01 -4.9837247317777900e+00 + 8.3308450371269616e-01 -2.9948952826343811e-01 -4.9680295048653234e+00 + id 12296 + loc 8.1887060403823853e-01 2.7707365155220032e-01 1084 + blend 0.0000000000000000e+00 + interp 3.2761168134525237e-01:2.9649305466229886e-01:3.5495717897877777e-01:3.2260284549145374e-01:1.2852177623104082e+00:3.2760840522843893e-01:1.9948199388727987e+00:2.9874478707948321e-01:2.6659267511565972e+00:2.8925306670851991e-01:3.1352839643760300e+00:3.1668485557101589e-01:3.8933152829777642e+00 + CVs 20 + 6.7938522084413228e-02 2.6918836204980384e-01 -3.1173806581175953e-02 + 1.5309059260219110e-01 5.2174422695501776e-01 -5.5161364008531805e-02 + 2.2689374830094486e-01 7.5670790445247960e-01 -9.7202838673675018e-02 + 2.6213530519040873e-01 9.6239626075992257e-01 -1.7540406510195306e-01 + 2.5693926738508555e-01 1.1368464517880115e+00 -2.9491513547667048e-01 + 2.4381765593694432e-01 1.3228047167986798e+00 -4.5740867519671458e-01 + 2.9419244228440494e-01 1.5511324624444776e+00 -6.2969724947625494e-01 + 4.6849639566371959e-01 1.7816931716247439e+00 -7.6647632187154846e-01 + 7.7873813623251875e-01 1.9600112525208910e+00 -8.2234550126339778e-01 + 1.1559315641004599e+00 2.0465275731604837e+00 -7.3841301561622430e-01 + 1.5059699187391411e+00 2.0422141883553673e+00 -5.1117294393185264e-01 + 1.8026585378721549e+00 1.9828187905155570e+00 -1.5663546974845510e-01 + 2.0118020107170267e+00 1.8832940741870861e+00 3.0318050078259318e-01 + 2.0692814964529394e+00 1.7421294989145863e+00 7.0133481130641162e-01 + 2.0100188924188873e+00 1.5739605425759102e+00 8.0918074089510073e-01 + 1.8882383670907439e+00 1.3035140826831082e+00 5.6649169104943486e-01 + 1.6225308638795282e+00 6.2987491426279874e-01 4.6999132070486505e-02 + 9.7540154974783078e-01 -6.3233209975052551e-01 -2.0798997477799128e-01 + 1.0594100391401837e+00 -7.0713338452695806e-01 -3.6534104708685344e-02 + id 12297 + loc 1.6603429615497589e-01 8.6697173118591309e-01 372 + blend 0.0000000000000000e+00 + interp 5.3741738043937048e-01:3.8571376399921914e-01:7.4450409466834566e-02:5.3741200626556607e-01:6.0784720031291450e-01:4.8021405635926567e-01:9.9827432332941979e-01:3.2538334586729889e-01:1.9373771338109074e+00:3.9549718055393601e-01:2.8849343222764312e+00:3.5743396804443484e-01:3.4254536693551305e+00 + CVs 20 + -3.3674271560901436e-01 6.1137987961784401e-01 -1.5309483618968744e-01 + -6.2717020597246453e-01 1.2392339720613594e+00 -3.2933606890358497e-01 + -8.2512744862924459e-01 1.8523676876389596e+00 -5.5477977370426057e-01 + -8.6629444620094931e-01 2.3886273822872321e+00 -8.3082758377941313e-01 + -7.0906096990038847e-01 2.7872717053128122e+00 -1.1392796112511940e+00 + -3.6301113405361085e-01 3.0124225279896049e+00 -1.4559881818878753e+00 + 1.2991272588742642e-01 3.0313124238044686e+00 -1.7488534239968798e+00 + 7.1252323352303093e-01 2.8263388980625823e+00 -1.9929801434703109e+00 + 1.3197347722731492e+00 2.4048677381597408e+00 -2.1769821507002911e+00 + 1.8854907956179121e+00 1.7938848696667753e+00 -2.2919361826931808e+00 + 2.3622957909241724e+00 1.0507876472384821e+00 -2.3279111352385482e+00 + 2.7695623946529322e+00 2.6636859110827005e-01 -2.2813017766587431e+00 + 3.2018971272025620e+00 -4.6295562427523573e-01 -2.1768088515205957e+00 + 3.7414417592461429e+00 -1.0244083744452919e+00 -2.1016982159171458e+00 + 4.3274589739230542e+00 -1.2989343663314854e+00 -2.1863006577478923e+00 + 4.8362066701207338e+00 -1.3463421895077061e+00 -2.4149196750081052e+00 + 5.3220646853255555e+00 -1.2499570037881340e+00 -2.6940878423415220e+00 + 5.8399198896550146e+00 -9.9204995979576793e-01 -2.9710818125836140e+00 + 6.4498720645621468e+00 -5.8923732812692853e-01 -3.1906335058203754e+00 + id 12298 + loc 2.7781876921653748e-01 5.7438945770263672e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4800414385615955e-01:4.0592815233357377e-01:5.7615900180689605e-01:3.3470187339916407e-01:1.0000173176262970e+00:4.2265577957414535e-01:1.4371390754167452e+00:2.9575080418344624e-01:2.0532058887739320e+00:3.4775864481003455e-01:2.9894348221944607e+00:2.9692257017496004e-01:3.5557622836066223e+00:4.4799966381472101e-01:3.9936969422681949e+00 + CVs 20 + 4.5420980007203016e-02 2.8463391567947410e-01 1.2595998010128118e-01 + 1.1049305433020454e-01 5.5145838653072454e-01 1.9739922941955071e-01 + 1.9683943960487044e-01 8.1752889396956885e-01 2.3244486127404540e-01 + 3.0886571864250545e-01 1.0971433493210643e+00 2.4296691064305614e-01 + 4.5009701996142476e-01 1.3828836085403093e+00 2.1949466207644208e-01 + 6.2340822396779116e-01 1.6633980476272909e+00 1.4963205734150220e-01 + 8.2915457932073244e-01 1.9177993244326084e+00 1.6240247689325971e-02 + 1.0591740979465349e+00 2.1115361440844147e+00 -1.9468086878604729e-01 + 1.2894203694290496e+00 2.2056305776884817e+00 -4.8055094290651945e-01 + 1.4871977982641311e+00 2.1752386872139691e+00 -8.1609740155156529e-01 + 1.6271265299444493e+00 2.0173316956988940e+00 -1.1582751735258465e+00 + 1.7003146260548272e+00 1.7498528394959059e+00 -1.4530083208224440e+00 + 1.7238432197978673e+00 1.4075582993378910e+00 -1.6658050252011987e+00 + 1.7262369809697018e+00 1.0244067173481091e+00 -1.8155392675885054e+00 + 1.7218181131406813e+00 6.4655829701878009e-01 -1.9789124355567349e+00 + 1.7240316407980381e+00 3.9067055218273417e-01 -2.2468551755516799e+00 + 1.7854800411745828e+00 4.0318459582704969e-01 -2.5328032386278991e+00 + 1.9263813025774499e+00 5.8690279821732894e-01 -2.5702911978933316e+00 + 2.0630535611133558e+00 7.6154813859950021e-01 -2.6431229537741974e+00 + id 12299 + loc 5.2797484397888184e-01 1.4863504469394684e-01 409 + blend 0.0000000000000000e+00 + interp 4.8903066351345825e-01:2.9821622932453379e-01:7.8660613243006772e-02:3.6785019049720097e-01:9.2887952676045404e-01:4.8902577320682317e-01:1.3163200475373680e+00:4.0597093299333153e-01:2.0347174041697360e+00:3.0268956310889972e-01:2.4229303012371890e+00:3.5271455004669072e-01:3.0309577272027903e+00:4.2940726475315372e-01:3.7594619051278504e+00 + CVs 20 + -3.6281051856307217e-01 2.4558486394289680e-01 1.8657977131848061e-01 + -7.0770800405461476e-01 4.6055529052971106e-01 3.4833662553657746e-01 + -1.0618334936029250e+00 6.5954565533243814e-01 4.8526049827376638e-01 + -1.4367312936036987e+00 8.4704200874013602e-01 6.0396676971714824e-01 + -1.8259219672432005e+00 1.0190319054567145e+00 7.0812755622822521e-01 + -2.2229862720426232e+00 1.1753864101113476e+00 7.9856376635500914e-01 + -2.6286516875047794e+00 1.3155602560190314e+00 8.7575201518294055e-01 + -3.0516951457574040e+00 1.4320232495490228e+00 9.4154627052469597e-01 + -3.4994414284810982e+00 1.5113824024638061e+00 9.9774601379544148e-01 + -3.9708254423292075e+00 1.5407262688231638e+00 1.0451800399489675e+00 + -4.4597715337383184e+00 1.5091676559249911e+00 1.0833348964427130e+00 + -4.9585682969822678e+00 1.4053152407349581e+00 1.1092983123270421e+00 + -5.4552457180628480e+00 1.2185420040058537e+00 1.1158266385961995e+00 + -5.9315250630615362e+00 9.4398322677496393e-01 1.0898520215189507e+00 + -6.3656057759099181e+00 5.8250407351256284e-01 1.0151524736295672e+00 + -6.7318757528342896e+00 1.3540204839158454e-01 8.8017130707963021e-01 + -6.9988593643490757e+00 -3.9207088159502890e-01 6.8748975220584163e-01 + -7.1489277210643198e+00 -9.7202940498829227e-01 4.5660986901019357e-01 + -7.3830847402503199e+00 -1.4046332673927053e+00 3.0481482546725430e-01 + id 12300 + loc 7.5072363018989563e-02 3.1880247592926025e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0031655644277162e-01:5.0031155327720722e-01:3.9230652273393474e-01:3.7030022295530607e-01:1.0954106188255710e+00:3.1925649842847337e-01:2.1302935989910563e+00:3.9216388092110210e-01:2.9990055331875540e+00:3.5744619347802647e-01:3.7531449985703542e+00 + CVs 20 + -2.1787427821237609e-01 4.3839870903267841e-01 -1.4296724940046102e-01 + -4.0199113374383866e-01 8.8598292567578629e-01 -2.8523774833938365e-01 + -5.5529823297472758e-01 1.3364406031310703e+00 -4.4492554564855230e-01 + -6.8269268041301212e-01 1.7705867327231628e+00 -6.4791872044209153e-01 + -7.9041362581769969e-01 2.1565736499865631e+00 -9.2243561683119724e-01 + -8.9471106313526283e-01 2.4627447279084009e+00 -1.2779319833819034e+00 + -1.0197425972179133e+00 2.6683406446783433e+00 -1.6910828259571207e+00 + -1.1879022467584439e+00 2.7713206677952082e+00 -2.1132886489902591e+00 + -1.4124199834111866e+00 2.7777933766903034e+00 -2.5001843443466401e+00 + -1.7006544897227562e+00 2.6686673324989343e+00 -2.8247602239674636e+00 + -2.0265071620333792e+00 2.4223565528613378e+00 -3.0381071067468293e+00 + -2.3184780380180152e+00 2.0964600541746865e+00 -3.0978430292005905e+00 + -2.5415771339200903e+00 1.7571657925762372e+00 -3.0219374140366293e+00 + -2.6825655227643779e+00 1.4471199553763827e+00 -2.8443386727522983e+00 + -2.7336172973011630e+00 1.2050630703403140e+00 -2.6034419603137691e+00 + -2.7012989717451124e+00 1.0379435357050277e+00 -2.3266284779511421e+00 + -2.5916605042994623e+00 9.2323988988119632e-01 -2.0341419759727679e+00 + -2.3870165700140715e+00 7.8027456609829882e-01 -1.6864910105868334e+00 + -2.3676766652163264e+00 6.8867024465304927e-01 -1.5354526380109284e+00 + id 12301 + loc 5.1955980062484741e-01 4.9002921581268311e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4914526582046221e-01:3.4137752489720691e-01:3.2023651461236380e-01:3.4910345765689144e-01:9.5623390135484942e-01:2.6673710635051234e-01:1.7774361163943784e+00:3.3940280864258443e-01:2.1390604238292221e+00:4.4914077436780403e-01:2.9622834113389183e+00:3.1579675078119479e-01:3.2068736369140067e+00:4.3750616897925232e-01:3.8345717812823534e+00 + CVs 20 + -1.5537510693308870e-01 1.4555544057616590e-01 2.2476333825146755e-01 + -3.1849051049838506e-01 2.9290046406834064e-01 4.6239111872665661e-01 + -4.7331571513773996e-01 4.4374466884274205e-01 7.0053431014431355e-01 + -6.0552547444739480e-01 5.9222606927460619e-01 9.2359715136445897e-01 + -7.0405360813432127e-01 7.3097721003257399e-01 1.1124071412482506e+00 + -7.5693546882695650e-01 8.5619429227436294e-01 1.2457497759430947e+00 + -7.5960052966673874e-01 9.7606401773218510e-01 1.3272869223645998e+00 + -7.1041579892350837e-01 1.1077607522259973e+00 1.3723627298702878e+00 + -6.1606845304042579e-01 1.2735427792679779e+00 1.4008121487199630e+00 + -5.1261543813666322e-01 1.4588413726595562e+00 1.4683434934392707e+00 + -4.5098704930431460e-01 1.5740617111808755e+00 1.6315981487805162e+00 + -4.6119296786790548e-01 1.5395275627016409e+00 1.8865429374907281e+00 + -5.5583078471087244e-01 1.3875022139743094e+00 2.1813823541756787e+00 + -7.3182428301756774e-01 1.2059858814510553e+00 2.4642938729784882e+00 + -9.6786783891304329e-01 1.0049773510577082e+00 2.7358761202042357e+00 + -1.2176806515640652e+00 7.2510439203112376e-01 3.0517865687018717e+00 + -1.3854620409063296e+00 3.8205281324880769e-01 3.4724415444255299e+00 + -1.3780748348780414e+00 8.7829815936277811e-02 3.9959893706877474e+00 + -1.2054372019392923e+00 -1.1870337379413332e-01 4.5825855894683283e+00 + id 12302 + loc 9.8227196931838989e-01 9.5278185606002808e-01 411 + blend 0.0000000000000000e+00 + interp 4.5475197286284119e-01:4.5474742534311258e-01:2.7675059017927772e-02:3.4980883091267811e-01:7.0408121402328805e-01:3.1292618639982445e-01:1.2063750504852471e+00:3.7038905399097632e-01:2.0189576133671543e+00:2.5789916688318393e-01:2.9486784953635028e+00:4.2744991327314419e-01:3.3444727801283003e+00 + CVs 20 + 1.0435252871944973e+00 2.1255104017212781e-01 -2.9376455095403514e-01 + 1.7714852870714439e+00 2.4267854157670130e-01 -5.4356935575938059e-01 + 2.4409847758680026e+00 2.1716837412456386e-01 -7.7212841590571013e-01 + 3.1388933843785578e+00 1.7266220430854484e-01 -9.8351283673238521e-01 + 3.8524517675932328e+00 1.0097520277811256e-01 -1.1691566920065108e+00 + 4.5683824916269389e+00 -4.6875349601401828e-03 -1.3292095726266973e+00 + 5.2754472943945219e+00 -1.5683102414997419e-01 -1.4689805872831743e+00 + 5.9621485230486204e+00 -3.7715141831505949e-01 -1.5945860233433804e+00 + 6.6074873417217006e+00 -6.8745228060517705e-01 -1.7120418137796156e+00 + 7.1720571951494660e+00 -1.0945837760763548e+00 -1.8318927128566593e+00 + 7.6210687113764601e+00 -1.5859449539937784e+00 -1.9599695171213773e+00 + 7.9458199121317286e+00 -2.1354494989071031e+00 -2.0837487418986607e+00 + 8.1552597335209356e+00 -2.7150822748930681e+00 -2.1865467680657216e+00 + 8.2579493964989759e+00 -3.2970953283521158e+00 -2.2663087072109107e+00 + 8.2624847976458042e+00 -3.8593835609612777e+00 -2.3281477036522027e+00 + 8.1809421001212232e+00 -4.3911464832100577e+00 -2.3701439455797502e+00 + 8.0308546997097459e+00 -4.8839599444877351e+00 -2.3909388835562124e+00 + 7.8446808868877618e+00 -5.3281406359188050e+00 -2.4054657370521610e+00 + 7.7434161161122779e+00 -5.7488814186836175e+00 -2.4351095835784524e+00 + id 12303 + loc 2.2794349491596222e-01 2.3169265687465668e-01 397 + blend 0.0000000000000000e+00 + interp 4.0716914892750783e-01:3.1790652953866000e-01:6.6241260645140321e-01:3.3886876234925933e-01:1.2016955003831928e+00:3.4823122851529759e-01:2.1092412603728157e+00:4.0716507723601858e-01:3.0207567065801504e+00:3.5079032853386327e-01:3.9997232434789973e+00 + CVs 20 + -2.4668337848348848e-01 2.7744712879292577e-01 -1.1321558335290685e+00 + -4.3911899848432823e-01 3.6346748628352016e-01 -1.8500000566339323e+00 + -6.0315352458350846e-01 3.8183449377468998e-01 -2.4510539868968002e+00 + -7.4298936057931142e-01 3.8482897618870193e-01 -3.0659680672384093e+00 + -8.4311072766170558e-01 3.5708152969086471e-01 -3.6943423991320348e+00 + -8.9371523234333949e-01 2.8549066865895556e-01 -4.3290645737654936e+00 + -8.9479738258234476e-01 1.6491307426773472e-01 -4.9544192163746024e+00 + -8.5591138311205883e-01 -1.7965710353911035e-03 -5.5553390189565910e+00 + -7.9054487555869779e-01 -2.0917345725422942e-01 -6.1221236811262560e+00 + -7.1199335172571410e-01 -4.5796524229613012e-01 -6.6506967174420160e+00 + -6.3638857288647044e-01 -7.4941178093144012e-01 -7.1368700438157182e+00 + -5.8120882748306091e-01 -1.0761473157056443e+00 -7.5675040721215652e+00 + -5.5604795912640737e-01 -1.4205415316033774e+00 -7.9310172425565915e+00 + -5.5388709552520565e-01 -1.7702908672919540e+00 -8.2347561334072026e+00 + -5.5795993249268250e-01 -2.1244494566700860e+00 -8.4977444249000840e+00 + -5.7354495620402679e-01 -2.4770443487041138e+00 -8.7278125931839394e+00 + -6.1579451679497643e-01 -2.8142496883356731e+00 -8.9254968335693867e+00 + -6.8360119845071388e-01 -3.1339738086393090e+00 -9.0815456324596617e+00 + -7.2124512513513728e-01 -3.4113008643972398e+00 -9.0219057814624062e+00 + id 12304 + loc 4.7233879566192627e-01 8.2514512538909912e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0155718668327520e-01:4.5365144611738939e-01:4.1774184771634792e-01:5.0155217111140837e-01:9.9233680872343111e-01:3.2138217667041402e-01:1.4372229779267918e+00:4.8894959533639332e-01:2.0762317016391694e+00:3.7791391698319537e-01:2.9647862044494597e+00:3.6782757307215802e-01:3.9027498671802898e+00 + CVs 20 + -1.1576599363857228e-01 1.9701984187416699e-01 2.0934257058347194e-01 + -2.1936344628873750e-01 3.2394812087992558e-01 3.1078924311572304e-01 + -3.2881051293890423e-01 4.0893093707473982e-01 3.7817355019750182e-01 + -4.6381587098841054e-01 4.7282450150629474e-01 4.4943541754917871e-01 + -6.2081859883570578e-01 5.0993101580105171e-01 5.1754837364953654e-01 + -7.9459623276657176e-01 5.1570064184350384e-01 5.7504993703627649e-01 + -9.7927496707878159e-01 4.8770804611813517e-01 6.1503636586860666e-01 + -1.1683901890278656e+00 4.2531900698858000e-01 6.3187137552613892e-01 + -1.3549240284179738e+00 3.2963857399007396e-01 6.2206721015649391e-01 + -1.5336823512788020e+00 2.0419805837587640e-01 5.8608833553765194e-01 + -1.7035767592503845e+00 5.4053710494470886e-02 5.2870043811471612e-01 + -1.8680194922416815e+00 -1.1587185508261946e-01 4.5780843861645870e-01 + -2.0323339083604046e+00 -3.0186335959627697e-01 3.8230037361550373e-01 + -2.1989498624096897e+00 -5.0090289046006531e-01 3.0893151416563719e-01 + -2.3648745886745308e+00 -7.0914295440002029e-01 2.4095723719456785e-01 + -2.5246843022605612e+00 -9.2154762883402863e-01 1.8060446630073018e-01 + -2.6755939689586774e+00 -1.1334460517640812e+00 1.3228007950054571e-01 + -2.8173799135071698e+00 -1.3415505217060470e+00 9.9717563070438275e-02 + -2.9639778043904936e+00 -1.5268783036146041e+00 6.1689863698442871e-02 + id 12305 + loc 9.8295021057128906e-01 2.2497509419918060e-01 1085 + blend 0.0000000000000000e+00 + interp 3.8640867467276568e-01:3.4016361974545933e-01:7.5762226626109530e-01:2.4771655571686368e-01:1.1822324968235480e+00:3.8640481058601900e-01:2.5207941245095253e+00:2.9010360893113085e-01:3.0287296074826546e+00:3.3820780872473455e-01:3.8103145584046576e+00 + CVs 20 + 3.4919799316984884e-01 3.2191458220803709e-01 -1.0062536447125042e-01 + 6.7210616838027715e-01 6.3548785806134644e-01 -1.8803147531226438e-01 + 1.0035974803594905e+00 9.2036165717779772e-01 -2.5774862487525269e-01 + 1.3598073423293102e+00 1.1642952354445764e+00 -2.9951246197387876e-01 + 1.7397551287415933e+00 1.3573667948132071e+00 -3.0221332140840951e-01 + 2.1359543721374319e+00 1.4945689582516772e+00 -2.5890000954451492e-01 + 2.5361605575965469e+00 1.5756356466195172e+00 -1.6758269292304628e-01 + 2.9259441158069182e+00 1.6049683956907108e+00 -3.1759736763091628e-02 + 3.2892025295800082e+00 1.5915992486273955e+00 1.3770912150035675e-01 + 3.6104874878846109e+00 1.5506924795870889e+00 3.2284764745005734e-01 + 3.8811059690269922e+00 1.5017771916607106e+00 5.0813229369794977e-01 + 4.1028196795314331e+00 1.4611742611976908e+00 6.9191504747651544e-01 + 4.2856759509480042e+00 1.4330486507234343e+00 8.8711002468615152e-01 + 4.4340306583241249e+00 1.4097699415836853e+00 1.1117095746401713e+00 + 4.5395948559619104e+00 1.3773369674070919e+00 1.3876652432220116e+00 + 4.5962052370190793e+00 1.2914882197630608e+00 1.7147548659678467e+00 + 4.5945601710248889e+00 1.0976326225231370e+00 2.0416543160759377e+00 + 4.5896027284090479e+00 7.8730523636668959e-01 2.2912020589988846e+00 + 4.8177156873950855e+00 6.2166695869499367e-01 2.2774440469448605e+00 + id 12306 + loc 3.8732370734214783e-01 2.2309830784797668e-01 416 + blend 0.0000000000000000e+00 + interp 3.1319026610169837e-01:2.9467815281101056e-01:6.0311759102543050e-02:2.5031686901873429e-01:1.0246253527482236e+00:2.9760282321334530e-01:1.8496663200896521e+00:3.1318713419903738e-01:2.1709226954387226e+00:2.4811014885913268e-01:3.3746824389394474e+00 + CVs 20 + 6.5430759877969730e-02 1.3476450899718900e-01 -7.2155302440732039e-01 + 1.0311408791894799e-01 1.3427985586258778e-01 -1.2560921919005668e+00 + 1.6903138881819207e-01 8.2001203089952956e-02 -1.7072510207084297e+00 + 2.6185792880933539e-01 6.6885170476003175e-03 -2.1338979444202972e+00 + 3.7732325112389592e-01 -9.0212540217169734e-02 -2.5235539234276079e+00 + 5.1124095178073015e-01 -2.0242485603845783e-01 -2.8659719040264129e+00 + 6.5658959162474329e-01 -3.2070481588109079e-01 -3.1591326195567651e+00 + 8.0464564579187436e-01 -4.3581000402939596e-01 -3.4101240894600382e+00 + 9.4949279771720974e-01 -5.4003520254521020e-01 -3.6289714598749088e+00 + 1.0880487952859121e+00 -6.2833933194847380e-01 -3.8263425029535152e+00 + 1.2154346599829795e+00 -7.0254448612409859e-01 -4.0197285437041739e+00 + 1.3252788030926741e+00 -7.7538766641147161e-01 -4.2356219922531970e+00 + 1.4070136128464497e+00 -8.6357950509662018e-01 -4.4918161484475689e+00 + 1.4443645587809288e+00 -9.7126890311076330e-01 -4.7765551566907609e+00 + 1.4286888352078551e+00 -1.0887688188911266e+00 -5.0647394079723682e+00 + 1.3627322849530530e+00 -1.2077923053740731e+00 -5.3398780404927404e+00 + 1.2530816815083807e+00 -1.3228651671518645e+00 -5.5893030996915405e+00 + 1.1092405538375465e+00 -1.4267511850294685e+00 -5.8021559480422571e+00 + 9.5601034937301554e-01 -1.5305667464754835e+00 -6.0008905509616106e+00 + id 12307 + loc 2.4238789081573486e-01 7.3865729570388794e-01 261 + blend 0.0000000000000000e+00 + interp 9.5059434737677873e-01:3.0703717649632245e-01:5.1658779698237822e-01:5.0614203072762254e-01:8.3638532163418278e-01:9.5058484143330502e-01:9.6770848133592102e-01:4.3794730073530996e-01:1.2408448904329705e+00:2.9164011422186692e-01:1.8362046724893282e+00:5.1096742356226921e-01:2.3918343133963988e+00:5.7585460594837823e-01:2.9564682133205791e+00 + CVs 20 + -8.3728359762240800e-01 3.7356938272449836e-01 -2.4883161435375739e-01 + -1.4033419986646123e+00 5.6362852082392967e-01 -2.9265001899266385e-01 + -1.8943872250558378e+00 6.1266733301367071e-01 -2.0949750965392611e-01 + -2.4219079701298973e+00 5.5933916518702520e-01 -4.0366391025333015e-02 + -3.0158101337823542e+00 4.6741157919180704e-01 1.6705763247132399e-01 + -3.6859048333551199e+00 3.8583231067202051e-01 3.4244601081604276e-01 + -4.4165941461554130e+00 3.1119352548437851e-01 4.1305508334527974e-01 + -5.1720825328438016e+00 2.2922297804330971e-01 3.3447374415416586e-01 + -5.9001982446981378e+00 1.4879828050084720e-01 9.8793672159367407e-02 + -6.5481977575805423e+00 8.4365647825106471e-02 -2.7420492209103986e-01 + -7.0974415714340111e+00 2.7368908535398973e-02 -7.5211356026384246e-01 + -7.5507169169223811e+00 -4.2219650445426637e-02 -1.3067640841784498e+00 + -7.9034278944456107e+00 -1.5036489096671346e-01 -1.9309319998687702e+00 + -8.1294585422751897e+00 -3.4597110200880099e-01 -2.6142549689075549e+00 + -8.1758533442404122e+00 -6.2409821010396138e-01 -3.3032402031253953e+00 + -8.0120538117309490e+00 -9.4909229942075024e-01 -3.9254249207167633e+00 + -7.7322699008219908e+00 -1.3891765980558564e+00 -4.4099084915298263e+00 + -7.5122795037185011e+00 -2.0509749104965156e+00 -4.6446417441649217e+00 + -7.3817201853805390e+00 -2.7968260343839391e+00 -4.6923584165443364e+00 + id 12308 + loc 2.4265234172344208e-01 3.5843756794929504e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8752178989451841e-01:3.0551002497569951e-01:2.3408327504859106e-04:3.3810516054900702e-01:9.0307627416521852e-01:3.2114037234729159e-01:1.3500398896066557e+00:2.5654868248025203e-01:2.0365457485392158e+00:3.6236899433792241e-01:2.9281379289108145e+00:3.8751791467661950e-01:3.3522715626960959e+00 + CVs 20 + -8.5785779569148984e-02 3.2582195547425685e-01 -3.2475287536154342e-02 + -1.8733542762548777e-01 6.3639296330487993e-01 -9.9083925859463337e-02 + -2.9537716682887399e-01 9.2680471567782330e-01 -1.7175621107998831e-01 + -4.0545095287709604e-01 1.1979930804588772e+00 -2.3747750707718812e-01 + -5.1944820031305017e-01 1.4496658010942269e+00 -3.0008863596996516e-01 + -6.3972196103724666e-01 1.6834859746858970e+00 -3.6534447655970542e-01 + -7.6707149737450875e-01 1.8976858996932009e+00 -4.4089371369501323e-01 + -9.0068027276065388e-01 2.0885733949962209e+00 -5.3249205200197425e-01 + -1.0442956491230615e+00 2.2553625696189625e+00 -6.4179436320582806e-01 + -1.2089750377755832e+00 2.3950807533091441e+00 -7.6740995425266845e-01 + -1.4031714359779413e+00 2.4976188903251328e+00 -9.0665059183822494e-01 + -1.6259664373210607e+00 2.5494179736073224e+00 -1.0574874715569664e+00 + -1.8666742664426348e+00 2.5363921998853685e+00 -1.2189157156359309e+00 + -2.1056106531628256e+00 2.4464896009214545e+00 -1.3945354956000859e+00 + -2.3391723972904734e+00 2.2682338541150324e+00 -1.5910378554505031e+00 + -2.5960606384043556e+00 1.9898565891604143e+00 -1.7802150839744311e+00 + -2.8988620824362425e+00 1.6165771911384708e+00 -1.8960624457405051e+00 + -3.2251621507094677e+00 1.1931098089817838e+00 -1.8768392547514710e+00 + -3.4306810396185163e+00 9.6108642054936300e-01 -1.7386840726445876e+00 + id 12309 + loc 5.5296158790588379e-01 6.0042464733123779e-01 372 + blend 0.0000000000000000e+00 + interp 4.2425308331592260e-01:3.0438599551660522e-01:1.6011076843173266e-02:3.6151580922167886e-01:8.1556657508375685e-01:2.8926874761726162e-01:1.8101100126469314e+00:3.7304885989935999e-01:2.1978350219725571e+00:3.0136237738871202e-01:2.9561946457847412e+00:4.2424884078508945e-01:3.7359685567010743e+00 + CVs 20 + -3.7172721899176447e-01 6.2461763806403470e-01 -2.7962278809715690e-01 + -7.6031533983401078e-01 1.1933440718981077e+00 -5.2418816313148697e-01 + -1.1417262532340440e+00 1.6847554563471596e+00 -7.5719836315853617e-01 + -1.4070981727083822e+00 2.0914786363682838e+00 -1.0066021356988621e+00 + -1.4619633383298885e+00 2.3983390995660145e+00 -1.2852210357232150e+00 + -1.3229062416216373e+00 2.6124273014689421e+00 -1.5965515719838861e+00 + -1.0146482138438373e+00 2.7377016651458117e+00 -1.9451642677473269e+00 + -5.6141641120549490e-01 2.7552436218763137e+00 -2.3117999889133776e+00 + -1.2154179866183501e-02 2.6496806613988362e+00 -2.6753832392869916e+00 + 5.6831525740817179e-01 2.4093548766732522e+00 -3.0360221373812322e+00 + 1.1010528018363659e+00 2.0309076324667124e+00 -3.3976137941500819e+00 + 1.4884363952609230e+00 1.5275955720644638e+00 -3.7501368535796078e+00 + 1.6422316883149402e+00 9.2449549784445118e-01 -4.0403262440634986e+00 + 1.4928953910456904e+00 2.2547867769257157e-01 -4.1382827118052461e+00 + 1.2273815279611908e+00 -6.6882084732338143e-01 -3.8847518227830302e+00 + 1.4363056150859541e+00 -1.5651520902505491e+00 -3.4129354820636006e+00 + 2.1772171063201782e+00 -2.0806334341642900e+00 -2.9858460155674305e+00 + 3.0768146534455862e+00 -2.0377864381468789e+00 -2.7220817664084462e+00 + 3.6265016866761082e+00 -1.3154658439945135e+00 -2.8054001065923968e+00 + id 12310 + loc 3.4590893983840942e-01 1.1776760965585709e-01 1075 + blend 0.0000000000000000e+00 + interp 3.8977670886486954e-01:2.5517350383583148e-01:2.9059839244400687e-01:3.0489394073838150e-01:1.5860742860017181e+00:3.8977281109778089e-01:2.0349360146312563e+00:3.2342795605266150e-01:2.6893336335936540e+00:2.8138105650208284e-01:3.0515758854867494e+00:2.7918325612961026e-01:3.8378018792697377e+00 + CVs 20 + -2.1139046150348559e-01 2.7434832808795723e-01 -9.2844034779758222e-03 + -4.3212836134257199e-01 5.5330013113994325e-01 6.5615978108365391e-03 + -6.5917614544101599e-01 8.2385035654605621e-01 3.9795841289195388e-02 + -8.9658282665986022e-01 1.0686809782455120e+00 7.9193885697465494e-02 + -1.1538986469781067e+00 1.2739052518544924e+00 1.1319976869094173e-01 + -1.4407301093967406e+00 1.4346535312645494e+00 1.3347302746681278e-01 + -1.7562563771260948e+00 1.5655605450733419e+00 1.5629333773457088e-01 + -1.9859972290429990e+00 1.6619576376461094e+00 1.7928532612468784e-01 + -2.1461614103912900e+00 1.7246283343948634e+00 1.8247679793496452e-01 + -2.3479220467012687e+00 1.7438297276286605e+00 1.3805918032420639e-01 + -2.5365783463089064e+00 1.7217099236558315e+00 6.6850503074114886e-02 + -2.6462911392284973e+00 1.7313501128406283e+00 9.7084743539379570e-03 + -2.6752698360533937e+00 1.8280683732963143e+00 -4.4271238219895537e-02 + -2.6903489179395419e+00 1.8598961114402197e+00 -1.2543400568862029e-01 + -2.7287818294989692e+00 1.6142483007155199e+00 -1.6130679402377157e-01 + -2.7245543234742899e+00 1.0559124951055003e+00 -1.5570521967628892e-01 + -2.5723207094586367e+00 2.6102654075563703e-01 -2.5523580911176325e-01 + -2.2619599900331182e+00 -5.1151168764408950e-01 -5.9388838436207414e-01 + -1.9976619463195258e+00 -6.7561889994456548e-01 -8.8021402990383835e-01 + id 12311 + loc 8.0406844615936279e-01 3.2575005292892456e-01 411 + blend 0.0000000000000000e+00 + interp 4.7620465580814919e-01:3.3763487956106480e-01:4.2915906936810577e-01:4.7619989376159111e-01:9.9768381660413752e-01:4.1275987597963615e-01:1.4340980845231648e+00:4.1064137439485998e-01:2.0123292738246268e+00:3.2542536895811047e-01:2.7568906526108314e+00:4.2428974268904218e-01:3.2274232396135143e+00:4.2822757711786053e-01:3.9156025186297301e+00 + CVs 20 + -7.1749337111081291e-01 2.7089623371785404e-01 1.6729779058067679e-01 + -1.2775928902132920e+00 4.2930493482593168e-01 3.0670972498780424e-01 + -1.7911832119842352e+00 5.4417032595300441e-01 4.2267679883062870e-01 + -2.3136917849507008e+00 6.3540487314869587e-01 5.2454260320537505e-01 + -2.8378595762406795e+00 6.9219466915984118e-01 6.1511965042035821e-01 + -3.3571303246751270e+00 7.0613902846458743e-01 6.9986686249364982e-01 + -3.8668784039689976e+00 6.7016258910981186e-01 7.8244597813996952e-01 + -4.3626448217545528e+00 5.7503460923675154e-01 8.6818890702510743e-01 + -4.8364834644170438e+00 4.1046932882569465e-01 9.6583927213608445e-01 + -5.2727365944355959e+00 1.7017838662034168e-01 1.0843577447226869e+00 + -5.6485110000025127e+00 -1.4334507253550433e-01 1.2291640160673747e+00 + -5.9471633694626842e+00 -5.1991224847703554e-01 1.3975133122431342e+00 + -6.1670537633158462e+00 -9.4938830424683740e-01 1.5811078891541954e+00 + -6.3114880168617429e+00 -1.4218506839953000e+00 1.7722488272376560e+00 + -6.3811392679870913e+00 -1.9241762948620682e+00 1.9649688183162790e+00 + -6.3749296683943761e+00 -2.4429720043056400e+00 2.1498775310760814e+00 + -6.2920475024384865e+00 -2.9655526020793261e+00 2.3117258242969632e+00 + -6.1406854399039492e+00 -3.4752234574835192e+00 2.4422562357353361e+00 + -6.0482398346770623e+00 -4.0278867176154689e+00 2.5731685494923235e+00 + id 12312 + loc 2.5294369459152222e-01 2.6448504999279976e-02 403 + blend 0.0000000000000000e+00 + interp 4.9408531177123910e-01:4.1431941185632060e-01:7.9559621873751463e-01:3.5132590071560527e-01:1.1559049422364822e+00:3.4418042133322269e-01:1.9947226354389689e+00:3.5530606695221367e-01:2.5951466552238092e+00:4.9408037091812140e-01:3.0143164674141900e+00:3.3431044411031452e-01:3.9190222837853921e+00 + CVs 20 + -1.8320986451738747e-01 2.5149457455322261e-01 3.6175980364189467e-02 + -3.9998088003830690e-01 4.9831862684099781e-01 9.7742714572277845e-02 + -6.3534446912974196e-01 7.4928541866642528e-01 1.7033118381045892e-01 + -8.7735628395052145e-01 9.9426582957940401e-01 2.4445223758291251e-01 + -1.1238349895406441e+00 1.2141531943163753e+00 3.1605882148635561e-01 + -1.3666194257938469e+00 1.3918151152677236e+00 3.8498597184825190e-01 + -1.5921638240672076e+00 1.5197694469139811e+00 4.5797818061409512e-01 + -1.7853757267267321e+00 1.5976268493565624e+00 5.3747412572954256e-01 + -1.9381207612712934e+00 1.6314930376103831e+00 6.1889992327906407e-01 + -2.0578438189227217e+00 1.6320066462286542e+00 7.0855978595724012e-01 + -2.1496745610736427e+00 1.6052508946570101e+00 8.1920716886903067e-01 + -2.2116923827923500e+00 1.5523382487085498e+00 9.5556814224143605e-01 + -2.2522133595409661e+00 1.4672716102324219e+00 1.1194120294445602e+00 + -2.2884824515941169e+00 1.3376641573606798e+00 1.3100244140418373e+00 + -2.3245721297456274e+00 1.1495113795200904e+00 1.5344498060826055e+00 + -2.3585777764132252e+00 8.7360218923340316e-01 1.8296321405630640e+00 + -2.4369000995005314e+00 4.8537538255311025e-01 2.2374624326110601e+00 + -2.6345901313122724e+00 6.0886550108154469e-02 2.7061209052944650e+00 + -2.7817787480204559e+00 -1.9353507361261379e-01 3.0111317148318646e+00 + id 12313 + loc 1.1053745448589325e-01 2.6514989137649536e-01 406 + blend 0.0000000000000000e+00 + interp 4.9252608794372982e-01:2.7489278100211273e-01:5.3298607222421746e-03:4.4434176951783921e-01:4.2089208271430267e-01:3.5629479618730570e-01:1.0403068935440274e+00:4.9252116268285040e-01:2.0035156561762499e+00:3.7577743601580110e-01:3.0037055721854355e+00 + CVs 20 + -9.7859982536819504e-02 9.3935691264300757e-03 4.2577342973647826e-02 + -1.5967405641733518e-01 -2.0495146619088016e-02 7.2831694178883660e-02 + -1.9631709085353230e-01 -5.3390176462586286e-02 1.2233785125221319e-01 + -2.2479722250881215e-01 -8.1032426984589331e-02 1.5216212935981144e-01 + -2.4852914926672506e-01 -1.0002950406742700e-01 1.6088654423658952e-01 + -2.7320524088741888e-01 -1.0666402601389183e-01 1.5070578103654009e-01 + -3.0665573409921787e-01 -9.7973621729003674e-02 1.2750592252408255e-01 + -3.5633875214606520e-01 -7.3047851543616843e-02 1.0175600980810640e-01 + -4.2486259212682109e-01 -3.3567886632413078e-02 8.6228005158905940e-02 + -5.0688305518223853e-01 1.7133657984949889e-02 9.1412255845663357e-02 + -5.9452708533979282e-01 7.6065242564454322e-02 1.2201530329326363e-01 + -6.8235879225820240e-01 1.4332997208989495e-01 1.7759542129940281e-01 + -7.6249455883400019e-01 2.1906395125399866e-01 2.5774136462566377e-01 + -8.1949748948622958e-01 2.8945144189018746e-01 3.6642110018153595e-01 + -8.3709169742939737e-01 3.1946722208296441e-01 5.1013261056791337e-01 + -7.9861528178476238e-01 2.8063147732908700e-01 6.8743260277323592e-01 + -6.8630054432978393e-01 2.0240386572529551e-01 8.6671753134608087e-01 + -5.2038958922150580e-01 1.5412142007931950e-01 9.9553110693876845e-01 + -4.3412730705071367e-01 2.3197560305242348e-01 9.6330842310561238e-01 + id 12314 + loc 6.3941232860088348e-02 9.3072670698165894e-01 1055 + blend 0.0000000000000000e+00 + interp 6.1401000312798049e-01:2.8823534242679272e-01:1.0916618429863667e-01:3.9819247299959654e-01:6.1643696795934966e-01:4.5751985695887115e-01:1.0887464550779740e+00:3.6110742302161586e-01:1.8251319147702898e+00:5.7712137558450738e-01:2.1693233895558350e+00:6.1400386302794918e-01:2.6821270601501799e+00:3.1288967391469313e-01:3.2806170860335166e+00 + CVs 20 + -7.1458801403328859e-02 3.0442935383679903e-01 -3.5702270721495760e-01 + -5.9750565312873316e-02 5.3444017946416944e-01 -6.7729067541863730e-01 + 8.6024790001985041e-03 7.2407765758703235e-01 -9.7950576390793298e-01 + 1.2163165037944645e-01 8.9221856900252727e-01 -1.2648695652194517e+00 + 2.7659500287917071e-01 1.0530665534298926e+00 -1.5280754440237350e+00 + 4.5130657869622359e-01 1.2360123269979144e+00 -1.7787783044750731e+00 + 5.9650902172414988e-01 1.4583895860936789e+00 -2.0276933028677391e+00 + 6.7895083893362496e-01 1.6910698371700374e+00 -2.2745423776058189e+00 + 7.1825736740602220e-01 1.8897895388376773e+00 -2.5092326187816218e+00 + 7.6142260516693727e-01 2.0331618018697881e+00 -2.7059762666618585e+00 + 8.3331384703033429e-01 2.1466991645092204e+00 -2.8549564333592223e+00 + 9.0848160879927375e-01 2.2526037887028916e+00 -3.0076446839955953e+00 + 9.7587279760795553e-01 2.3335256332197107e+00 -3.1945847827261229e+00 + 1.0409693884480276e+00 2.3953640051339087e+00 -3.3855298179693638e+00 + 1.0937621032939455e+00 2.4607606382273999e+00 -3.5527618147307987e+00 + 1.1061645511188554e+00 2.5667024826964426e+00 -3.7085788556752948e+00 + 1.0326636104823963e+00 2.7336936899565574e+00 -3.9157075660595080e+00 + 8.7493485574843688e-01 2.8722816680592951e+00 -4.2164999138219006e+00 + 1.0124780289549720e+00 2.7046384007464011e+00 -4.2430628128066896e+00 + id 12315 + loc 2.6051703095436096e-01 9.1767520643770695e-04 1074 + blend 0.0000000000000000e+00 + interp 5.5178753415278914e-01:5.1969785269645519e-01:3.3646882655603716e-01:2.9437585316866155e-01:9.3748797462744482e-01:2.9561300830335374e-01:1.9378585022799890e+00:2.8707977657755207e-01:2.0026331136763820e+00:4.0212119292016790e-01:2.6953904908236530e+00:2.5955668713299690e-01:3.0502027597943759e+00:5.5178201627744761e-01:3.7275677040897337e+00 + CVs 20 + -3.0077624772502670e-01 1.9134699448417417e-01 9.6754961982294885e-02 + -6.0596580370354403e-01 3.7240038180272655e-01 1.6960579241030743e-01 + -9.2748632636605810e-01 5.5436245000565343e-01 2.3050306460373232e-01 + -1.2574433170388897e+00 7.5597568974253948e-01 2.9517939013814026e-01 + -1.5097776539522183e+00 9.5883305710573008e-01 3.8184732965990387e-01 + -1.5737233765201324e+00 1.1086667110284514e+00 4.9633062242729986e-01 + -1.4488813694245681e+00 1.2495161715358161e+00 6.5166765882980338e-01 + -1.3279653469863204e+00 1.4756144182685125e+00 8.6355274729558662e-01 + -1.3899247290670103e+00 1.7501327898178338e+00 1.1083876864126818e+00 + -1.6992703054728495e+00 1.9328257682762393e+00 1.3096378445750911e+00 + -2.1599170869824524e+00 1.9319133357256304e+00 1.3707029416230476e+00 + -2.5899693348196484e+00 1.8167605798603890e+00 1.2655287553532424e+00 + -2.8943427385247271e+00 1.7273829675114878e+00 1.0629631486004221e+00 + -3.1135691741025577e+00 1.7934990979771204e+00 8.4191584410617915e-01 + -3.3356828026666814e+00 2.0290294582947825e+00 5.7178195798704212e-01 + -3.6436074190596535e+00 2.2759339250438484e+00 1.4759633052471444e-01 + -4.1159799651392115e+00 2.3110662766808501e+00 -5.5420426260241284e-01 + -4.3343345253671055e+00 1.9369798633460207e+00 -1.2501867304182999e+00 + -3.9617909671541010e+00 1.8054840453349688e+00 -1.1728273346179809e+00 + id 12316 + loc 2.5332927703857422e-01 2.0683889091014862e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4447212928991481e-01:4.2246566455890128e-01:4.6949490229324586e-01:2.9286715352762988e-01:9.9844888522976449e-01:4.4446768456862190e-01:1.5152930059985648e+00:2.6537145082953573e-01:2.1282982416011498e+00:2.5632988498281450e-01:3.0074650590344230e+00:2.8264515907293941e-01:3.9104630324886291e+00 + CVs 20 + -1.5931798867074279e-01 1.9449569804453087e-01 -2.7217472150631855e-01 + -3.2347940042776885e-01 3.9202740735339436e-01 -5.2108285331135507e-01 + -4.9254857986499789e-01 5.7957865517174811e-01 -7.7013617053179662e-01 + -6.7170449244696973e-01 7.5434338858333738e-01 -1.0248884247029988e+00 + -8.6917414006348714e-01 9.2106125368122560e-01 -1.2730126293130595e+00 + -1.0897044656928558e+00 1.0787320297077017e+00 -1.4976327139254502e+00 + -1.3310339081602742e+00 1.2190073396944474e+00 -1.6794923371614021e+00 + -1.5807373438133974e+00 1.3302616990409408e+00 -1.8030179192694571e+00 + -1.8214937386086916e+00 1.4040455147480879e+00 -1.8646746720918530e+00 + -2.0427269277437823e+00 1.4376334500873702e+00 -1.8710484736558839e+00 + -2.2445889542272530e+00 1.4295301310140216e+00 -1.8266321127800651e+00 + -2.4379674213255100e+00 1.3694884128202551e+00 -1.7274710133214515e+00 + -2.6368679896584966e+00 1.2385405310917574e+00 -1.5713303311200826e+00 + -2.8515558409973960e+00 1.0234044994014047e+00 -1.3725435843085396e+00 + -3.0988432309217626e+00 7.1450056164934717e-01 -1.1573238454922665e+00 + -3.4156713998222958e+00 2.8553211737137452e-01 -9.7227232900738891e-01 + -3.8382458302951075e+00 -3.0531025316483557e-01 -9.4847731114169009e-01 + -4.2707110306590081e+00 -9.5628073934775781e-01 -1.2472279055637687e+00 + -4.4730821824935791e+00 -1.3042607838732252e+00 -1.4087786118545487e+00 + id 12317 + loc 3.6405616998672485e-01 3.0927959084510803e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9706278486820545e-01:3.1925626603916907e-01:6.7784685228489616e-01:3.1366245172525109e-01:1.1243013882453725e+00:3.2728170692310027e-01:1.8776318710968583e+00:3.8361844058797445e-01:2.1201448480426990e+00:2.9190559201319488e-01:3.0007815756543872e+00:3.9705881424035677e-01:3.8194553922555254e+00 + CVs 20 + 1.4985735239954057e-03 2.8558419455120354e-01 -2.4689674989639671e-02 + -3.5063689380119750e-02 5.3864905698686549e-01 -8.0884113116752171e-02 + -1.0250087745926117e-01 7.6930754763404119e-01 -1.6262087576341300e-01 + -1.8620598591931631e-01 9.7868116898701962e-01 -2.5645218938138697e-01 + -2.8492284180459543e-01 1.1529574397049509e+00 -3.5534330873737119e-01 + -3.8950297229614289e-01 1.2787687744448690e+00 -4.4961066103493497e-01 + -4.8367471641738030e-01 1.3501848498367532e+00 -5.3041405067594538e-01 + -5.5133428407050622e-01 1.3737414059547548e+00 -5.9628257249107797e-01 + -5.8631720662237974e-01 1.3646804056997637e+00 -6.5372393020503428e-01 + -6.0232560695145154e-01 1.3330243964160700e+00 -7.0814781533340021e-01 + -6.1242486779198257e-01 1.2761586565813894e+00 -7.5652349822362219e-01 + -6.1232979732364312e-01 1.1919389682077384e+00 -7.9278799089662577e-01 + -5.9604751632183595e-01 1.0737960668139190e+00 -8.1051046854595399e-01 + -5.6613876965988796e-01 8.8964769484687445e-01 -7.9965175344789818e-01 + -5.4326647005167095e-01 5.6502290899459606e-01 -7.4336817987771775e-01 + -6.2383696199218308e-01 -1.7259133447409092e-02 -5.9463378277512680e-01 + -1.0808495513374434e+00 -8.4405196223583590e-01 -2.7237503715880607e-01 + -2.2002433702649991e+00 -1.4619790366005425e+00 2.2766912875035095e-01 + -2.3589050153699045e+00 -1.6060406187013667e+00 3.1865135608705925e-01 + id 12318 + loc 5.1729023456573486e-01 7.2305500507354736e-02 397 + blend 0.0000000000000000e+00 + interp 4.9702095693264614e-01:3.1783830187068618e-01:1.1071255607702668e-01:4.9701598672307684e-01:1.0023542473826983e+00:4.8217884882192702e-01:1.8923557795619017e+00:2.4496304609649039e-01:2.0392983313653787e+00:3.5914428005723331e-01:3.0004819116995352e+00:3.1947963143475705e-01:3.6269185293568693e+00 + CVs 20 + -1.1679410359389097e+00 3.9476372182782382e-01 2.5886043237187600e-01 + -1.9657845670641005e+00 5.5150338218324846e-01 4.7961819622140744e-01 + -2.6451684434024507e+00 6.1458168939606561e-01 6.9563481684996720e-01 + -3.3103581919478389e+00 6.1787395679515500e-01 9.2931395440373377e-01 + -3.9444629954952397e+00 5.5401020828309111e-01 1.1711137197989878e+00 + -4.5329708555236801e+00 4.2539118530991377e-01 1.4094143982311311e+00 + -5.0658838305601002e+00 2.4078872995194700e-01 1.6356253152026943e+00 + -5.5349648684152539e+00 1.0105583658301498e-02 1.8514525849447718e+00 + -5.9298515024053362e+00 -2.5646174497151175e-01 2.0695826990056476e+00 + -6.2435878537343950e+00 -5.4234496574708357e-01 2.2954529708489173e+00 + -6.4769725656158412e+00 -8.2707795372744797e-01 2.5269663936022244e+00 + -6.6414418779181323e+00 -1.0996139903567554e+00 2.7644415441656465e+00 + -6.7554837372057817e+00 -1.3624522624183628e+00 3.0054743808850919e+00 + -6.8375980656503961e+00 -1.6197062675128266e+00 3.2311501640118330e+00 + -6.9121031484487894e+00 -1.8654031891859191e+00 3.4228740912542204e+00 + -7.0179903689937451e+00 -2.0902803986047367e+00 3.5934685580688370e+00 + -7.1771475605574775e+00 -2.3092666347065700e+00 3.7632720496323948e+00 + -7.3720325574135162e+00 -2.5489237828925813e+00 3.9275003101595578e+00 + -7.4410438962426557e+00 -2.8281228257341446e+00 4.0164364604285243e+00 + id 12319 + loc 5.5340188741683960e-01 7.7368217706680298e-01 409 + blend 0.0000000000000000e+00 + interp 3.6874485537288698e-01:2.9294113138435735e-01:3.4617167016125916e-01:3.6874116792433326e-01:1.0573486179944840e+00:3.0104781643465417e-01:1.8430517005676550e+00:3.4986038514441081e-01:2.1915470900223313e+00:3.3854390555570274e-01:2.9821780775656390e+00:3.2961877456053035e-01:3.6359642890759933e+00 + CVs 20 + 3.7208870090125618e-01 2.1492869460897712e-01 -2.1423954244877266e-02 + 6.7409143831008311e-01 3.7855341327667669e-01 -6.1255896016502116e-02 + 9.5947937302093822e-01 5.0938388129755707e-01 -1.0334326634453875e-01 + 1.2615682799592416e+00 6.1650533455229584e-01 -1.3652986188513438e-01 + 1.5776705990732258e+00 6.9255798559319293e-01 -1.6152269256585508e-01 + 1.9038050515783618e+00 7.3318729279838601e-01 -1.7971164731013015e-01 + 2.2372554128724471e+00 7.4034405378343227e-01 -1.9224760083389947e-01 + 2.5751916091108176e+00 7.1702630885635943e-01 -1.9849861676173730e-01 + 2.9142096934852399e+00 6.6115189381198081e-01 -1.9387302925804750e-01 + 3.2471630452584686e+00 5.7016989162625209e-01 -1.7391878965086777e-01 + 3.5598155034057868e+00 4.4467356442566852e-01 -1.4167537232147565e-01 + 3.8374871750830928e+00 2.8265156076018849e-01 -1.0715552218629820e-01 + 4.0732990985525950e+00 7.9940856139753214e-02 -8.0185594530614135e-02 + 4.2664945414667175e+00 -1.6109210641519001e-01 -6.6531136405264590e-02 + 4.4156981806296915e+00 -4.2750925424467123e-01 -6.9608942234898774e-02 + 4.5174764794255093e+00 -6.9888230665678464e-01 -8.8253160168809575e-02 + 4.5696466142921963e+00 -9.6393650889446580e-01 -1.1455783344878528e-01 + 4.5718373119692899e+00 -1.2416683648463835e+00 -1.3413635960352299e-01 + 4.5185944913656018e+00 -1.6576563884569584e+00 -1.5598524193061283e-01 + id 12320 + loc 2.5193077325820923e-01 2.6098191738128662e-01 1048 + blend 0.0000000000000000e+00 + interp 4.7225010534820433e-01:3.5097945978966888e-01:5.4402689706021812e-01:3.3200851538413945e-01:1.7547759720659228e+00:4.7224538284715090e-01:2.4900875108373164e+00:4.0520564377261753e-01:3.0130615768978886e+00:3.2034661150898980e-01:3.8462045756986236e+00 + CVs 20 + -2.9183528202855435e-01 5.7612669467720579e-01 -8.7733009868613238e-02 + -5.5532228932794148e-01 1.1758094196160085e+00 -2.5643846726221198e-01 + -7.5405365076869546e-01 1.7905955468111061e+00 -5.2298523470288905e-01 + -8.7483355484317094e-01 2.3548913171679002e+00 -9.0496550765332862e-01 + -9.3890587575790652e-01 2.7747666856775601e+00 -1.3930676490933194e+00 + -9.8169404145097816e-01 2.9720469916247541e+00 -1.9216680242093183e+00 + -1.0114444298453751e+00 2.9123867807913228e+00 -2.3719572335306562e+00 + -1.0152910187050697e+00 2.6631465010002060e+00 -2.6446006980583574e+00 + -9.9020744115752413e-01 2.3442376956382240e+00 -2.7729091072631196e+00 + -9.2513445856813958e-01 2.0122033329482356e+00 -2.8257292301035823e+00 + -8.1179561879253459e-01 1.6972418907698421e+00 -2.8404913697768941e+00 + -6.6759724865776549e-01 1.3862498546914250e+00 -2.8588670443882469e+00 + -5.0271997577691252e-01 1.0052254553076252e+00 -2.8955525034948129e+00 + -3.2200138153461560e-01 5.1258302563291425e-01 -2.9166888228185806e+00 + -1.6767824185795743e-01 -4.1237263019434311e-02 -2.8985793856755926e+00 + -8.8355078835723522e-02 -5.4749809835094376e-01 -2.9069030737296826e+00 + 1.2502615974057907e-01 -2.2024160341772236e-01 -3.3418941543983842e+00 + 1.3165927870017868e-01 -7.6039117109269028e-02 -3.3387297679207601e+00 + 8.7710410496430469e-02 3.0021196725560373e-01 -3.4984031289429862e+00 + id 12321 + loc 1.4975798130035400e-01 5.0670343637466431e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6378631435625589e-01:2.7945894389967502e-01:2.0950762432651504e-01:3.8535131617798574e-01:9.9782257655458750e-01:3.2778759605275037e-01:1.6207039905867773e+00:4.6378167649311236e-01:2.0695673314520047e+00:3.4797862934937890e-01:2.6266574564766128e+00:3.1720456292121446e-01:3.0413372735052726e+00:3.2814236262159424e-01:3.7213759042607508e+00 + CVs 20 + -2.8448472013103038e-01 2.7971436848831310e-01 4.2067185671972629e-01 + -5.3609762053323162e-01 4.9206065721533437e-01 7.3484263485462986e-01 + -7.6864187402544837e-01 6.9114910849157940e-01 1.0104591588065359e+00 + -9.8233438356590286e-01 9.0197499698720751e-01 1.2755418806674479e+00 + -1.1822929655349861e+00 1.1219303281229966e+00 1.5174091374568650e+00 + -1.3727294516418127e+00 1.3460119020200025e+00 1.7280060705554972e+00 + -1.5537625027522453e+00 1.5682142200387850e+00 1.9101858574818671e+00 + -1.7233684179767477e+00 1.7880066692522236e+00 2.0842078176710688e+00 + -1.9010045754437752e+00 2.0223519531174583e+00 2.2682201295008522e+00 + -2.1247099544852674e+00 2.2836213910195022e+00 2.3982597871915416e+00 + -2.3590422203607266e+00 2.5590059853765577e+00 2.3676555257387513e+00 + -2.5330776642414419e+00 2.8339209877725633e+00 2.1204272137086768e+00 + -2.6188393440813393e+00 3.0094444687522355e+00 1.6648131469316663e+00 + -2.6479201732334148e+00 2.9806076371449501e+00 1.1867798761545896e+00 + -2.6727756138433616e+00 2.8446473411354454e+00 8.7128120259437458e-01 + -2.7203864819573953e+00 2.7316882452048570e+00 7.5925213739329878e-01 + -2.7952829632066463e+00 2.6513005458554355e+00 8.7564428567490604e-01 + -2.8745265507963134e+00 2.5156396319462084e+00 1.1776741970923230e+00 + -2.7423798150699268e+00 2.6622002279524986e+00 8.9955251428560201e-01 + id 12322 + loc 8.9709001779556274e-01 3.5243198275566101e-01 372 + blend 0.0000000000000000e+00 + interp 4.5327927462561246e-01:2.6847582847266493e-01:4.8452720543881167e-03:4.5327474183286620e-01:5.2880412399972343e-01:4.2152293877213126e-01:1.2228191330882785e+00:2.7085598246410603e-01:2.1741465687075867e+00:3.9401266629582837e-01:2.8858130582677717e+00:3.8186086069211544e-01:3.4879657832132480e+00 + CVs 20 + 5.9921694459783159e-01 4.4982036542656756e-01 3.3873703893200796e-02 + 1.1868249004401901e+00 8.2071028981884009e-01 3.7457878489153051e-02 + 1.8161644946840656e+00 1.1356046402741546e+00 6.4127950127020245e-02 + 2.4148846346140878e+00 1.4606828833002532e+00 1.9695560071915622e-01 + 2.7784567562753790e+00 1.8085652145455533e+00 5.2281644737245758e-01 + 2.7353304755500623e+00 2.0508565345519645e+00 9.7219762263208742e-01 + 2.4167491441851676e+00 2.1272406171639986e+00 1.3629635933634099e+00 + 1.9479434259657498e+00 2.0930294870067319e+00 1.7014628797599127e+00 + 1.3688382871222577e+00 1.9500822677913388e+00 2.0101230682317786e+00 + 7.3694218581743332e-01 1.6871224375955480e+00 2.2945024506294218e+00 + 1.1445935099836890e-01 1.3181854640550745e+00 2.5494877126606283e+00 + -4.4505147132645384e-01 9.0324594484723342e-01 2.7564708897842509e+00 + -8.5251729978093971e-01 4.8831290245480913e-01 2.9258222389650919e+00 + -1.0564624071098121e+00 5.6628010503190052e-02 3.0584183013299739e+00 + -1.2772733624720283e+00 -4.5613175650765309e-01 3.1492422193006369e+00 + -1.8032028364427810e+00 -9.3850897399916267e-01 3.2743941016226144e+00 + -2.5866487929087465e+00 -1.2200243081001956e+00 3.4705101843683965e+00 + -3.4321570818408871e+00 -1.1174348593322820e+00 3.7631901671812340e+00 + -4.1251850775877896e+00 -5.1625446510874995e-01 4.2087882471154137e+00 + id 12323 + loc 3.6708745360374451e-01 4.5224338769912720e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7063147964959534e-01:4.7062677333479885e-01:2.3021148639421773e-01:3.2857578416694461e-01:8.9204606486826155e-01:3.6354681279433337e-01:1.6974456492926526e+00:3.5044216474341822e-01:2.0250879901957459e+00:4.2418551227933615e-01:2.9787643429137445e+00:3.2246763262351935e-01:3.3281221638671825e+00:4.6947004463351899e-01:3.9128478656278163e+00 + CVs 20 + 3.7562781223422514e-01 3.3068908103208972e-01 9.9781640568685603e-02 + 5.8316355974101630e-01 5.5735202561985187e-01 1.5287194897930159e-01 + 7.3722603089060468e-01 7.2714974196998661e-01 1.8984710583054820e-01 + 9.0758363598609137e-01 8.8286660053702659e-01 2.3148089905921396e-01 + 1.0896943276700803e+00 1.0221281079472226e+00 2.7571888247980847e-01 + 1.2796592266176845e+00 1.1433512755436777e+00 3.2067416025744905e-01 + 1.4744900143842319e+00 1.2461313357727268e+00 3.6504814203823988e-01 + 1.6716534662037970e+00 1.3309887264619329e+00 4.0798454438473802e-01 + 1.8698408032680631e+00 1.3995951114371958e+00 4.4932339655432946e-01 + 2.0700967383901117e+00 1.4552207076737258e+00 4.9043994096870669e-01 + 2.2758378435289135e+00 1.5018326172056646e+00 5.3557182214327181e-01 + 2.4916888907439541e+00 1.5406753110066134e+00 5.9358661190220707e-01 + 2.7198082685223102e+00 1.5656790987072053e+00 6.7692188253211549e-01 + 2.9542612472216683e+00 1.5605432578392771e+00 7.9451361436526158e-01 + 3.1782155950053745e+00 1.5065294821979047e+00 9.3859034409405973e-01 + 3.3778150407001721e+00 1.3998985760683254e+00 1.0892789029185783e+00 + 3.5539072173579083e+00 1.2482167445977195e+00 1.2385293728678530e+00 + 3.7124421873949305e+00 1.0491864067823464e+00 1.3966149924019984e+00 + 3.8176091347313044e+00 8.8474218842474417e-01 1.4392134099380796e+00 + id 12324 + loc 2.3052716255187988e-01 1.4339105784893036e-01 416 + blend 0.0000000000000000e+00 + interp 2.9760579927133801e-01:2.6935975923122601e-01:2.5191172030171172e-01:2.2663107146898198e-01:1.0042043522687576e+00:2.2606852864298488e-01:2.0013559776789833e+00:2.4501025500120416e-01:2.9990411660239609e+00:2.9760282321334530e-01:3.8596476722707971e+00 + CVs 20 + -5.2206912018205223e-02 2.5149158649387165e-01 -4.9806902317874990e-01 + -1.2534156884649381e-01 3.9835637125601087e-01 -8.1458327844937639e-01 + -1.9021099726815016e-01 5.0974213686743963e-01 -1.0947894025184142e+00 + -2.2137157206122293e-01 6.1946200122626538e-01 -1.3972591127155156e+00 + -2.1341908061500287e-01 7.2363387897861065e-01 -1.7205697622421821e+00 + -1.6083084085180327e-01 8.1825601145112481e-01 -2.0600006042662917e+00 + -5.6844371463143140e-02 9.0028907419561066e-01 -2.4064219305908288e+00 + 1.0052988898199411e-01 9.6809760856117211e-01 -2.7467986880635609e+00 + 3.0462361096169144e-01 1.0209961795270575e+00 -3.0701891587112540e+00 + 5.4750712881253349e-01 1.0591753813983356e+00 -3.3713047657401827e+00 + 8.3932788995562313e-01 1.0829829171773950e+00 -3.6589583008649562e+00 + 1.2089138976526015e+00 1.0805659307275088e+00 -3.9693760957919872e+00 + 1.6435407552153740e+00 1.0158477931002881e+00 -4.3504613864507711e+00 + 2.0553173034128509e+00 8.5899365815880779e-01 -4.8063608772671849e+00 + 2.3737347009811112e+00 6.1774585439939522e-01 -5.2947239760976617e+00 + 2.5931731935362254e+00 3.0306821563530617e-01 -5.7888873758826040e+00 + 2.7172953010973364e+00 -8.3303700483499554e-02 -6.2771017473038517e+00 + 2.7392546977919503e+00 -5.1773819359970119e-01 -6.7289137396407916e+00 + 2.7176108529159508e+00 -7.6348625850023666e-01 -6.9308508854988560e+00 + id 12325 + loc 3.3399617671966553e-01 9.3468880653381348e-01 411 + blend 0.0000000000000000e+00 + interp 6.2041801807846242e-01:3.3379275920746038e-01:9.0295434963442245e-01:3.8316042264681677e-01:1.5427100676083809e+00:4.6053909500959994e-01:2.0014728892854392e+00:6.2041181389828171e-01:2.3678857667840596e+00:4.6741747176327897e-01:2.9959653719316561e+00:2.8540840917914889e-01:3.9018470636079470e+00 + CVs 20 + 1.0448447039591655e+00 9.8015824250179406e-02 -1.2312836333123187e-01 + 1.7183752021114251e+00 1.6771156636412043e-02 -2.2657402638359747e-01 + 2.2852602022122510e+00 -1.3507747826930200e-01 -3.0590933502797835e-01 + 2.8300903960819879e+00 -3.1465273231454149e-01 -3.6342177384844360e-01 + 3.3492411360139691e+00 -5.0792159482203358e-01 -4.0340041858475861e-01 + 3.8460927328655865e+00 -7.0109611380931913e-01 -4.2854434040390921e-01 + 4.3264692764316433e+00 -8.8469736503742313e-01 -4.3949987733420803e-01 + 4.7950493610019604e+00 -1.0582476145476398e+00 -4.3356267355542188e-01 + 5.2518500921974614e+00 -1.2325161501100552e+00 -4.0446086652175106e-01 + 5.6867551944284189e+00 -1.4245667059622111e+00 -3.4934905741405875e-01 + 6.0848844445261658e+00 -1.6542709280799510e+00 -2.7526291915761342e-01 + 6.4346767859453129e+00 -1.9389232210066072e+00 -1.9151442367822608e-01 + 6.7263764676200362e+00 -2.2747814674351581e+00 -9.9180527030838211e-02 + 6.9557973091915386e+00 -2.6358511814387935e+00 4.8175153498175027e-03 + 7.1168199953143336e+00 -2.9957963170898352e+00 1.1812435049678194e-01 + 7.2086028073438069e+00 -3.3328517782549154e+00 2.3545420882965656e-01 + 7.2382138059977690e+00 -3.6321599811443246e+00 3.5386933614413829e-01 + 7.2174160599311037e+00 -3.8945805292316695e+00 4.7323356351504986e-01 + 7.1404327972578772e+00 -4.2072866377268392e+00 5.9190236342301461e-01 + id 12326 + loc 7.0792418718338013e-01 5.4055762290954590e-01 1075 + blend 0.0000000000000000e+00 + interp 4.0371033428416092e-01:3.3361291274984556e-01:1.6710297732765489e-01:2.7596149120918384e-01:1.3237143023855931e+00:4.0370629718081807e-01:2.0622042992671465e+00:2.9466305401471460e-01:2.7724546343957615e+00:2.7629075801353414e-01:3.5128589816004059e+00 + CVs 20 + 7.6368122356450643e-02 2.4953383811551974e-01 -3.1332524699317787e-01 + 1.5632835926926972e-01 4.7435386927106626e-01 -5.9697294558565517e-01 + 2.3082750407637892e-01 6.7967211160988006e-01 -8.7096106156067177e-01 + 2.9952931823865964e-01 8.6794921344216314e-01 -1.1498029996075454e+00 + 3.6600300202115899e-01 1.0395173733499876e+00 -1.4426289318897947e+00 + 4.2824295233397908e-01 1.1952218620622395e+00 -1.7533786139977003e+00 + 4.8082003182374644e-01 1.3355577661277829e+00 -2.0798808756453324e+00 + 5.2220052418945628e-01 1.4579515611327665e+00 -2.4164715771734766e+00 + 5.5769168680598191e-01 1.5527527405253740e+00 -2.7537702676729547e+00 + 5.9404570611109719e-01 1.6033353624991160e+00 -3.0776125383290354e+00 + 6.3404300761982491e-01 1.5939953759990961e+00 -3.3727944145777431e+00 + 6.7703322138479782e-01 1.5190989306522049e+00 -3.6330892756664444e+00 + 7.2089157031235895e-01 1.3802165871402701e+00 -3.8612417177128795e+00 + 7.6578334212438504e-01 1.1795049356487883e+00 -4.0632366424036910e+00 + 8.1230215591287513e-01 9.2167679201969088e-01 -4.2409591124169284e+00 + 8.5241199147043889e-01 6.2161510927255414e-01 -4.3883884644852751e+00 + 8.6144850997658151e-01 3.0186964995310067e-01 -4.5000831119957141e+00 + 8.1290919329169065e-01 -1.3317186982290424e-02 -4.5755806008832982e+00 + 7.2967504683688866e-01 -4.0539626488510988e-01 -4.7087219826615012e+00 + id 12327 + loc 3.7827295064926147e-01 1.9493657350540161e-01 406 + blend 0.0000000000000000e+00 + interp 4.5654406576200923e-01:4.2657348485169899e-01:4.7871231669613845e-01:3.7179837561485979e-01:1.0287669850156471e+00:4.5653950032135165e-01:1.5301676229694021e+00:4.4045804337474626e-01:1.9606364096016080e+00:3.1502067724807381e-01:2.5422701894927222e+00:4.2788171686785287e-01:3.1625799673373280e+00:2.9767188820333296e-01:3.9972677883478824e+00 + CVs 20 + 2.7656352141706992e-02 1.4558074691291129e-01 -7.6224816444969756e-02 + 5.4997579351712525e-02 2.5208371708803790e-01 -1.1886300878360481e-01 + 8.3770399268360662e-02 3.4221240464642477e-01 -1.5620139787928031e-01 + 1.1211516202710280e-01 4.2683996607332259e-01 -2.0693087679325808e-01 + 1.4003190471632887e-01 5.0408667389479367e-01 -2.7052690661077683e-01 + 1.6750479304941615e-01 5.7227715754697994e-01 -3.4628399608217852e-01 + 1.9454892167611557e-01 6.3003082696528001e-01 -4.3412341339862964e-01 + 2.2176938004669269e-01 6.7606330768905654e-01 -5.3414809575171052e-01 + 2.5158909986434030e-01 7.0898974251176339e-01 -6.4305449148231086e-01 + 2.8755237567355307e-01 7.2787781525195827e-01 -7.5320626068268159e-01 + 3.3072227606982152e-01 7.3249042352385141e-01 -8.6069803424434665e-01 + 3.7770155461041482e-01 7.2163349807349908e-01 -9.7167200221422512e-01 + 4.2452040562416937e-01 6.9313602465908442e-01 -1.0934875628746248e+00 + 4.7160084088667570e-01 6.4697347717219189e-01 -1.2247436786909618e+00 + 5.2029338173399531e-01 5.8549605494558221e-01 -1.3600295315323438e+00 + 5.6660016253495082e-01 5.1091066066993784e-01 -1.4982632156967439e+00 + 6.0256833954140521e-01 4.2381069631036816e-01 -1.6417376298501423e+00 + 6.2258273877898240e-01 3.2280267189079026e-01 -1.7918112737861032e+00 + 6.1669980825599957e-01 1.8877762695957789e-01 -1.9788185503679636e+00 + id 12328 + loc 4.9488660693168640e-01 7.9475444555282593e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4787870880721983e-01:2.7373500832475262e-01:5.3919235591213099e-01:3.2318027106196517e-01:1.1795714061736642e+00:2.6772703274884835e-01:1.9675644674108301e+00:3.4787523002013176e-01:2.7241274162778470e+00:3.0283411809002236e-01:3.4415337899628917e+00 + CVs 20 + -7.3584882806743648e-02 4.7893138800909052e-01 2.3055668802563761e-01 + -1.7139213344781110e-01 9.0027675906542903e-01 3.7571813008916138e-01 + -2.9239541990837103e-01 1.2946676297441966e+00 4.7848905298666156e-01 + -4.4457728345410169e-01 1.6714192753646802e+00 5.4798530712589133e-01 + -6.3668324874089688e-01 2.0185494083281195e+00 5.7143960914951974e-01 + -8.6982530492435051e-01 2.3193781696637434e+00 5.3670887392508659e-01 + -1.1343455242982290e+00 2.5529931351537805e+00 4.3412346153415882e-01 + -1.4093032301002411e+00 2.6994326608988182e+00 2.6204948502921532e-01 + -1.6732929497704503e+00 2.7466533498343146e+00 3.0593747417873907e-02 + -1.9193561082605222e+00 2.6898287162620687e+00 -2.4073309141964949e-01 + -2.1521709789808314e+00 2.5248481669994098e+00 -5.2574844118415853e-01 + -2.3747106016575934e+00 2.2480590797074940e+00 -7.9122068098023723e-01 + -2.5870283651209283e+00 1.8599571055175770e+00 -9.9730540843344184e-01 + -2.7926564632404705e+00 1.3690121785128579e+00 -1.0939973633610778e+00 + -2.9942602405215704e+00 8.1128535415380154e-01 -1.0172327952584863e+00 + -3.1894811164840005e+00 2.8871692829466555e-01 -7.3621158166878597e-01 + -3.4045346249528783e+00 -9.3863341108022635e-02 -2.9236966873000148e-01 + -3.6607392384096826e+00 -2.7595695391147906e-01 2.4321013269361558e-01 + -3.8239370812106666e+00 -4.6592918732953614e-01 6.8152590085614784e-01 + id 12329 + loc 9.3735069036483765e-01 6.2160259485244751e-01 1076 + blend 0.0000000000000000e+00 + interp 4.9297925139115573e-01:3.1932430517014271e-01:3.3639083557997829e-01:4.0377705187648960e-01:9.9899255074747839e-01:2.9978294330529698e-01:1.7947291133270640e+00:3.1526301947571256e-01:2.6806392713597820e+00:3.7646443051218165e-01:3.0437078915648650e+00:4.9297432159864185e-01:3.8833167118143406e+00 + CVs 20 + 2.3282213437404176e-01 3.7314860024937690e-01 -8.8150214272042005e-02 + 4.1131989672587427e-01 7.6203317751541988e-01 -1.8739891315978491e-01 + 5.5268579964785869e-01 1.1539091593984441e+00 -2.8279331286631854e-01 + 6.5831872335825836e-01 1.5363203258541014e+00 -3.5949378770202578e-01 + 7.2871270773745467e-01 1.9169392553964006e+00 -4.0628719127528923e-01 + 7.7945120601369078e-01 2.3214530643496456e+00 -4.3817667718399023e-01 + 8.4068271689374630e-01 2.7569663512124034e+00 -5.3822272883627964e-01 + 9.3579314762157739e-01 3.1523071805470257e+00 -8.0588914720972327e-01 + 1.0727318755402193e+00 3.4065959623911204e+00 -1.2351658390365954e+00 + 1.2534027684014251e+00 3.4669480963180597e+00 -1.7282529308144268e+00 + 1.4805724415281825e+00 3.3608770980176139e+00 -2.1853469431027688e+00 + 1.7569629546872687e+00 3.1614674767461368e+00 -2.5436617411048998e+00 + 2.0814039443953329e+00 2.9339249432967480e+00 -2.7930769313807082e+00 + 2.4727242976271557e+00 2.7089724127800259e+00 -2.9571398737683054e+00 + 2.9392091627145716e+00 2.4599970832013458e+00 -3.0542667533343022e+00 + 3.4577467144308196e+00 2.0777368002094416e+00 -3.0999695513691403e+00 + 3.9952662788401239e+00 1.4102009348145534e+00 -3.0411315929216003e+00 + 4.2536652347824049e+00 6.9381633205877169e-01 -2.7191737365899611e+00 + 4.0502750303325135e+00 6.6328047360379716e-01 -2.4393824700640341e+00 + id 12330 + loc 7.4057179689407349e-01 1.2188393622636795e-01 1074 + blend 0.0000000000000000e+00 + interp 6.0588706177850982e-01:2.9732449267896482e-01:2.2941261968626692e-01:2.5988131797754976e-01:1.1775894505389941e+00:6.0588100290789204e-01:2.0000214082425334e+00:2.7350926856575036e-01:2.8650466685443212e+00:3.9357961275576325e-01:3.4085432324411800e+00:4.4387245050332352e-01:3.9734746761460591e+00 + CVs 20 + -6.0260971536159266e-02 4.1040929276788163e-01 1.6098708383360888e-01 + -1.4299112493555885e-01 8.2153655068492060e-01 3.5127792500780675e-01 + -2.3373478691384220e-01 1.2296683103989121e+00 5.5643849160893710e-01 + -3.2305429055291451e-01 1.6300982959582437e+00 7.8243145685194759e-01 + -3.9999684544265518e-01 2.0134662652984403e+00 1.0444592285105141e+00 + -4.4991249623436358e-01 2.3625406073588899e+00 1.3597725429794760e+00 + -4.5668359802245850e-01 2.6511845868678012e+00 1.7393331574729365e+00 + -4.0592237833709133e-01 2.8460075984520854e+00 2.1792553587508912e+00 + -2.9134731031451011e-01 2.9156776083752378e+00 2.6549958482369176e+00 + -1.2127330374207013e-01 2.8418591385417038e+00 3.1290011001026783e+00 + 8.1313320342774276e-02 2.6261035123575081e+00 3.5635150284525707e+00 + 2.8347102790471801e-01 2.2925404052045590e+00 3.9378624985320441e+00 + 4.5564909513321183e-01 1.8641858755268406e+00 4.2510007931449545e+00 + 5.7760048428484367e-01 1.3508896888195596e+00 4.4974224660447266e+00 + 6.4180726012735012e-01 7.6387136102259234e-01 4.6501294254887044e+00 + 6.6555641659312459e-01 1.3988166126430712e-01 4.6621797671925949e+00 + 6.8679634221334518e-01 -4.5129856324346701e-01 4.5185646680664853e+00 + 7.3447742983921449e-01 -9.5818631041570546e-01 4.2950596082312194e+00 + 8.6419399242942474e-01 -1.3464541630916123e+00 4.1710912368872943e+00 + id 12331 + loc 6.8708026409149170e-01 4.6983841061592102e-01 1048 + blend 0.0000000000000000e+00 + interp 4.5377542566130974e-01:2.6149599265221735e-01:1.4085217787459969e-02:3.0817171141788363e-01:8.6315942176277227e-01:2.9819400282568864e-01:1.2175291199641218e+00:3.6045035472910314e-01:1.8738783982112661e+00:2.7705873816775745e-01:2.2853059846502521e+00:4.5377088790705317e-01:3.0160366181095908e+00:4.1886845804293482e-01:3.5777829041553275e+00 + CVs 20 + -3.0597081890204686e-02 7.2863090807359221e-01 4.1998851462054315e-01 + -1.0653489059763221e-01 1.5226033885610195e+00 8.0130827730325571e-01 + -2.4384510258461994e-01 2.4009592471132857e+00 1.0790836286513454e+00 + -4.6372193119403304e-01 3.3072538501586721e+00 1.1424295495115755e+00 + -7.8172224015015868e-01 4.1018866412569048e+00 8.8586795107052407e-01 + -1.1480266002677744e+00 4.6139766912792552e+00 3.2072943966010858e-01 + -1.4662605917176044e+00 4.7577048313231298e+00 -4.1060131540335587e-01 + -1.6843176631297481e+00 4.5864592439706549e+00 -1.1435789219926236e+00 + -1.8195247187678905e+00 4.2197016116860642e+00 -1.7710859573550333e+00 + -1.9275497179586405e+00 3.7600660932726768e+00 -2.2764457065346306e+00 + -2.0168729791049458e+00 3.2287929558754471e+00 -2.7523791111479108e+00 + -1.9518687198419522e+00 2.5932678152802509e+00 -3.2988380147745984e+00 + -1.5976411373552359e+00 1.8526892316180825e+00 -3.8484601773538580e+00 + -1.0079051007624742e+00 1.0369754348975775e+00 -4.2113693703166115e+00 + -3.6402811307577748e-01 2.2120753676533567e-01 -4.3552599997934003e+00 + 8.3935379970819901e-02 -5.9206364115842858e-01 -4.4799509206125556e+00 + 5.8504699202074129e-02 -1.3413256177584436e+00 -4.7719806864760139e+00 + -4.7100113916275532e-01 -1.7801046732815813e+00 -5.3050772911518465e+00 + -1.1480247325782171e+00 -1.7716782104668316e+00 -5.9915098340428949e+00 + id 12332 + loc 6.0308903455734253e-01 3.3882808685302734e-01 397 + blend 0.0000000000000000e+00 + interp 4.6448567396716439e-01:4.5753238391260864e-01:3.8350529380973475e-01:4.0916685406898007e-01:9.2153247869977795e-01:3.1231658668867418e-01:1.1611614074778100e+00:4.6448102911042471e-01:2.0439977227152095e+00:3.1536734266184863e-01:2.9762848646012099e+00:3.0836097222407338e-01:3.8205092492549642e+00 + CVs 20 + -1.1756280760771274e+00 2.4154255207115180e-01 2.8118561719075047e-01 + -1.9492088596956840e+00 2.8722270420498203e-01 4.6469184081532433e-01 + -2.6308627441672607e+00 2.7072188768252498e-01 6.1016804426619065e-01 + -3.3558682612023518e+00 2.5620086606494263e-01 7.3860934561625347e-01 + -4.1100773888222175e+00 2.2990249338156163e-01 8.6112046047776891e-01 + -4.8656499661402055e+00 1.7619030122713203e-01 9.8986037067471355e-01 + -5.5883544260140061e+00 8.2003680534850631e-02 1.1359872560791746e+00 + -6.2496913008015680e+00 -6.4168829566766394e-02 1.3046263524893906e+00 + -6.8323889006717584e+00 -2.7048175983555711e-01 1.4921072428612492e+00 + -7.3320056119957986e+00 -5.3879597057914685e-01 1.6898615374453159e+00 + -7.7515135712612855e+00 -8.6234113815747671e-01 1.8882729429766010e+00 + -8.0974195380226668e+00 -1.2263249646558034e+00 2.0831944869431336e+00 + -8.3796666943531903e+00 -1.6189306373212091e+00 2.2832017172276835e+00 + -8.6084506997005086e+00 -2.0424279042243501e+00 2.4964076128317845e+00 + -8.7901598894227142e+00 -2.5056805032748262e+00 2.7260145284535251e+00 + -8.9237290945374355e+00 -3.0137462799240589e+00 2.9752484848086795e+00 + -8.9994608766205371e+00 -3.5647494554376102e+00 3.2459712040499396e+00 + -9.0010662532032608e+00 -4.1490929900777207e+00 3.5238312742275815e+00 + -8.8774601590069828e+00 -4.6989380633144764e+00 3.7516433174763852e+00 + id 12333 + loc 6.0328727960586548e-01 7.1475750207901001e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3151111836795703e-01:3.2595542061124733e-01:3.0914986940444977e-01:3.5182031947240278e-01:9.9999140497730377e-01:4.3150680325677337e-01:1.9493776922468999e+00:3.2018518356219883e-01:2.3655705677872692e+00:3.0076275187742496e-01:3.6235705183047453e+00 + CVs 20 + -7.5329585950651090e-02 2.2322985382070418e-01 2.7086958640977854e-01 + -1.1012394446702889e-01 3.7456577934822355e-01 4.4107248932893822e-01 + -1.2364146770190051e-01 4.9066968905762426e-01 5.6449234080355037e-01 + -1.3063729185213530e-01 6.0928740220739408e-01 7.0016833548286062e-01 + -1.3177215964059405e-01 7.2968658915536833e-01 8.4440430969275593e-01 + -1.2895658785652697e-01 8.5124919332711202e-01 9.9375487608115232e-01 + -1.2629334984176482e-01 9.7440791403034965e-01 1.1453137943418992e+00 + -1.2930819979807259e-01 1.0991225948278631e+00 1.2962033757126303e+00 + -1.4453965069756700e-01 1.2251084071075402e+00 1.4453576540177397e+00 + -1.8127225489716070e-01 1.3529550933129106e+00 1.5941998982391417e+00 + -2.5484658694480289e-01 1.4814851040889778e+00 1.7436307295377871e+00 + -3.8565256527067693e-01 1.5995199078457731e+00 1.8878801324113486e+00 + -5.8118318789491308e-01 1.6815537454781058e+00 2.0104983770828317e+00 + -8.2025611525677933e-01 1.7057291751316277e+00 2.0958546784792627e+00 + -1.0727419571879020e+00 1.6741074876236428e+00 2.1434086871585483e+00 + -1.3306800634937719e+00 1.6008827042373190e+00 2.1614635068122001e+00 + -1.6049404578369011e+00 1.4918443310813843e+00 2.1515236726826168e+00 + -1.9072345106922222e+00 1.3456145063175673e+00 2.1014442449878046e+00 + -2.1720326264139209e+00 1.2260791692028064e+00 2.0550761580693657e+00 + id 12334 + loc 4.2496579885482788e-01 4.6857646107673645e-01 409 + blend 0.0000000000000000e+00 + interp 3.3681009319663313e-01:3.2115213591102476e-01:6.6234623718954833e-03:2.9631736469711967e-01:1.0576613057338913e+00:2.9884825342567706e-01:2.0080704832204899e+00:3.3680672509570120e-01:2.7262409220537078e+00:3.0568451737957286e-01:3.1212895260262239e+00 + CVs 20 + -1.1974497781017715e-01 1.6506002930188907e-01 -2.3415197560001849e-01 + -2.8200110758620645e-01 3.3028876139933500e-01 -4.4305750874393685e-01 + -4.5560064277997048e-01 5.0958342501023335e-01 -6.7040718394675980e-01 + -6.1274138093767450e-01 7.0234514409186377e-01 -9.2602597577939838e-01 + -7.5095479555005817e-01 9.0083900413949503e-01 -1.2102029201699827e+00 + -8.6770636354455855e-01 1.0980163090202535e+00 -1.5258220659436945e+00 + -9.5765005779762524e-01 1.2893474233354369e+00 -1.8809566321241364e+00 + -1.0125973332350049e+00 1.4647726517414636e+00 -2.2861397986667784e+00 + -1.0234791068087874e+00 1.6018493668801261e+00 -2.7423273305656051e+00 + -9.8793806939985163e-01 1.6732746369182241e+00 -3.2372044041603067e+00 + -9.1593648145239659e-01 1.6540137688087391e+00 -3.7489377733985036e+00 + -8.2606560113566885e-01 1.5266139329429576e+00 -4.2467441290278138e+00 + -7.3485607263419339e-01 1.2887156931336619e+00 -4.7011840456670742e+00 + -6.5093245862131166e-01 9.4852541733840257e-01 -5.0949369942759715e+00 + -5.7769544667430350e-01 5.1658163539234581e-01 -5.4173123795483411e+00 + -5.1221371013277472e-01 6.6784626045621742e-03 -5.6554898880604672e+00 + -4.4177871328306523e-01 -5.5691220748647119e-01 -5.7955038593608421e+00 + -3.5896567377237026e-01 -1.1402198207505703e+00 -5.8401210096421270e+00 + -2.6208852719460146e-01 -1.6816220003104299e+00 -5.8732093364538551e+00 + id 12335 + loc 6.8587315082550049e-01 7.6989620923995972e-01 403 + blend 0.0000000000000000e+00 + interp 4.0198339227118995e-01:3.5570457383761572e-01:5.2308557377249199e-01:3.2131101457689509e-01:1.0006280206101947e+00:2.8968651581913574e-01:1.7613110554655482e+00:4.0197937243726728e-01:2.1989741477048836e+00:3.0436001978565302e-01:3.0414050438557343e+00:3.6225718593919998e-01:3.7840198855944371e+00 + CVs 20 + -8.6563347253513556e-02 -9.5442944756225084e-03 5.8552857241416359e-02 + -1.7229554072146885e-01 -2.7771745169327802e-02 1.2492677306913626e-01 + -2.4877903563436599e-01 -4.3583288435765893e-02 2.0440949109852297e-01 + -3.2601719425795317e-01 -6.8103015594462024e-02 2.8828670492502728e-01 + -4.0433830350896915e-01 -1.0451213605650556e-01 3.7516483889915664e-01 + -4.8113068696966821e-01 -1.5692165944320760e-01 4.6329674854452896e-01 + -5.5184086915732244e-01 -2.2859391991532954e-01 5.5072499963118271e-01 + -6.1170112631747087e-01 -3.1967956711166173e-01 6.3561204064640142e-01 + -6.5633869982548831e-01 -4.2729324480555153e-01 7.1614231726582045e-01 + -6.8131947210821142e-01 -5.4718065378083935e-01 7.8992716377343275e-01 + -6.8229086239715298e-01 -6.7523422683142453e-01 8.5317153110411248e-01 + -6.5526505483981934e-01 -8.0752117203633478e-01 9.0066398213277543e-01 + -5.9853810897870940e-01 -9.4062778393584645e-01 9.2588288524484441e-01 + -5.1416526899558401e-01 -1.0724243155624693e+00 9.2124174126010372e-01 + -4.0738966676311739e-01 -1.2026448091381006e+00 8.7800517824697444e-01 + -2.8421218087723643e-01 -1.3316869432241236e+00 7.8581690617714128e-01 + -1.5693245502660735e-01 -1.4582763941772821e+00 6.3740131540710820e-01 + -4.3462058479104448e-02 -1.5794064421838585e+00 4.3123766519422435e-01 + -3.0565441132386462e-02 -1.6326109905331765e+00 4.7702126528140532e-01 + id 12336 + loc 5.1218199729919434e-01 3.1485441327095032e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0681865789698185e-01:2.9444123637001457e-01:9.5382664156645391e-01:4.0681458971040291e-01:1.2810783649768847e+00:3.4251385114122851e-01:1.9200522130573650e+00:3.0443150738344171e-01:2.9028649917352176e+00:3.3286085963078282e-01:3.8541373597090849e+00 + CVs 20 + 4.1085731107929635e-01 3.4120288795397935e-01 -3.7615188226517560e-01 + 7.7193327589332306e-01 6.4803315276060314e-01 -7.2640283845907305e-01 + 1.1061888736392507e+00 9.4787934024418719e-01 -1.0752798433603805e+00 + 1.4668438921835545e+00 1.2571812849834481e+00 -1.3862237771044323e+00 + 1.8818374619542995e+00 1.5611832770358693e+00 -1.6049394039288407e+00 + 2.3412090087253654e+00 1.8338414058467993e+00 -1.7047583771725818e+00 + 2.8182119679895314e+00 2.0534195791493639e+00 -1.6735187515221750e+00 + 3.2773174359416575e+00 2.1976155272006381e+00 -1.4944167859925985e+00 + 3.6610669448460280e+00 2.2331407982279927e+00 -1.1718044053464693e+00 + 3.9173225137999874e+00 2.1566263614362011e+00 -7.8642561735561411e-01 + 4.0623316049809075e+00 2.0056556319799226e+00 -4.4543961093522433e-01 + 4.1491025894288249e+00 1.8148663943562411e+00 -2.1262401840256251e-01 + 4.2186355075533060e+00 1.6192464011243020e+00 -6.5496777952425589e-02 + 4.2820016412610027e+00 1.4024168287531489e+00 1.0579460767689786e-01 + 4.3229808056307419e+00 1.1334700964165287e+00 3.4141226823769733e-01 + 4.3242316213960201e+00 8.6431531806777595e-01 6.0626680001473754e-01 + 4.2916939240126890e+00 6.6064552828848511e-01 8.5466186360893581e-01 + 4.2390247001415160e+00 5.1891376476826923e-01 1.0655536944321649e+00 + 4.1571431929302038e+00 4.4316099385218544e-01 1.2863925925851754e+00 + id 12337 + loc 2.4028986692428589e-01 2.4233266711235046e-01 372 + blend 0.0000000000000000e+00 + interp 4.2599481055788119e-01:2.8643923446334713e-01:8.3103949279176870e-01:4.2599055060977564e-01:1.6240818395253505e+00:3.0454857794483636e-01:2.7298843378905913e+00:3.0086054037817639e-01:3.0892263994188327e+00:2.9777112230488284e-01:3.9063233228831695e+00 + CVs 20 + -1.9351889379763695e-01 4.8784188236828918e-01 5.3545554409394103e-01 + -3.2843274190957572e-01 9.1475102988721058e-01 9.8275435476791284e-01 + -3.9887980824991737e-01 1.3107446971613839e+00 1.4112426088150150e+00 + -4.1406246067810265e-01 1.7018131935294851e+00 1.8713259384604788e+00 + -5.3118055473225956e-01 2.1775496139596080e+00 2.3430981211368040e+00 + -9.1933268165717996e-01 2.7241683054328241e+00 2.5486648732619321e+00 + -1.4369819352835178e+00 3.1534762241796983e+00 2.3216513037102557e+00 + -1.8925755927132701e+00 3.3383170403477131e+00 1.7431273449673341e+00 + -2.1854259324487479e+00 3.2389113647480556e+00 9.6905756408530741e-01 + -2.2761455420384062e+00 2.8582503013870473e+00 1.7896582535192951e-01 + -2.1754286780797978e+00 2.2592706854177229e+00 -4.5582378122601686e-01 + -1.9244319873111269e+00 1.5473728051785325e+00 -8.8055962633697393e-01 + -1.5509844401574109e+00 8.0674392785264604e-01 -1.2282552472114276e+00 + -1.1155632910899760e+00 1.4307186620335544e-01 -1.7517163899571933e+00 + -8.2560195883607868e-01 -1.8296124572889205e-01 -2.6478090431312196e+00 + -8.6587238803607069e-01 2.7906206542495537e-02 -3.6922388083476845e+00 + -1.1891346404511745e+00 6.7133388227623425e-01 -4.5393000212085894e+00 + -1.6137930497912774e+00 1.4892382803016808e+00 -5.0022318248989306e+00 + -1.9417150721116034e+00 2.2312693885734589e+00 -5.1766613373439316e+00 + id 12338 + loc 3.2051709294319153e-01 5.3126978874206543e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3772302127258805e-01:3.4186766907576160e-01:3.8799602734801275e-01:4.2744321430635407e-01:1.0001027382344598e+00:2.9560948845138663e-01:1.5058646400997411e+00:4.3771864404237537e-01:1.9995066919109656e+00:3.6007491638206091e-01:2.6403766712364458e+00:4.2705910234441508e-01:3.2120318127271519e+00:2.8207258722070033e-01:3.9492943477352460e+00 + CVs 20 + 1.1777780929202136e-01 3.1718584615362588e-01 -1.5944041073580878e-01 + 2.5183839158172722e-01 6.5757310694930349e-01 -3.4910091106379315e-01 + 3.8478613068986661e-01 1.0120870965135449e+00 -5.4776921257536160e-01 + 5.0971501116934270e-01 1.3670515993448029e+00 -7.5516515300811626e-01 + 6.2814555225940227e-01 1.7073117732109098e+00 -9.8045719179717317e-01 + 7.4704084871524867e-01 2.0061380762349255e+00 -1.2310204733869885e+00 + 8.7791444301562971e-01 2.2289179258811429e+00 -1.5057040884958690e+00 + 1.0310472039838134e+00 2.3466453962138392e+00 -1.7851915513282952e+00 + 1.2075250490511567e+00 2.3528722320772819e+00 -2.0402434405914511e+00 + 1.4010447351079489e+00 2.2681538808396247e+00 -2.2583194632374308e+00 + 1.6104400819124447e+00 2.1197603254553203e+00 -2.4529746788543556e+00 + 1.8407160783632925e+00 1.9266640917900042e+00 -2.6481716310761869e+00 + 2.0847904345835966e+00 1.6952897717194162e+00 -2.8653083373687389e+00 + 2.3062741858087987e+00 1.4184692981156761e+00 -3.1256216277365110e+00 + 2.4446459618758345e+00 1.0979181321396612e+00 -3.4535460293138076e+00 + 2.4351164138865631e+00 7.8097556264399592e-01 -3.8703622295241531e+00 + 2.2416848441598747e+00 5.5465241592458225e-01 -4.3441584000208024e+00 + 1.9459259475284942e+00 4.3122583876314502e-01 -4.7788128328596695e+00 + 1.7476301192549961e+00 2.6456042247751099e-01 -5.1509924151975124e+00 + id 12339 + loc 7.7303552627563477e-01 5.8494645357131958e-01 406 + blend 0.0000000000000000e+00 + interp 1.8058518270069450e+00:3.9254329048589082e-01:3.2358739975679174e-02:3.9276609232245913e-01:8.5802445657441473e-01:1.3773390519139410e+00:1.2739043350504642e+00:1.8058418270069450e+00:1.4412911321278026e+00:6.1475159129260248e-01:3.1875285495369967e+00:3.9494227731072301e-01:3.3624225207061142e+00 + CVs 20 + 2.4037246164763201e-01 2.6273052468228381e-01 2.8648297862693795e-02 + 3.5099829553553935e-01 4.2814187458501241e-01 7.9590273468499007e-02 + 4.2926401918249368e-01 5.6608316449532348e-01 1.4418339008506514e-01 + 5.2058988409138429e-01 7.0584666907477756e-01 2.0995192015629713e-01 + 6.2707165666719911e-01 8.4465585827098044e-01 2.7636385495734139e-01 + 7.4950909152314793e-01 9.7857905721939120e-01 3.4232353525645753e-01 + 8.8601202386598255e-01 1.1023563665328711e+00 4.0560331656888154e-01 + 1.0318643601296249e+00 1.2111610351273745e+00 4.6392295735755484e-01 + 1.1839851439202995e+00 1.3038356238752307e+00 5.1910502605495457e-01 + 1.3447071603914813e+00 1.3812568660521776e+00 5.7852876144950138e-01 + 1.5151441475485226e+00 1.4403504545605188e+00 6.4560310751278704e-01 + 1.6863755301832830e+00 1.4751340763400420e+00 7.1153022578084335e-01 + 1.8459829173336579e+00 1.4842014149914409e+00 7.6720120767485944e-01 + 1.9903400533981079e+00 1.4708805337369792e+00 8.1711047757906996e-01 + 2.1222965598010681e+00 1.4383108610080761e+00 8.7245211759385199e-01 + 2.2417153163087948e+00 1.3905287897118426e+00 9.3501521485273431e-01 + 2.3433206677313425e+00 1.3350009950443569e+00 9.9555316526089932e-01 + 2.4191473036593094e+00 1.2764895119863269e+00 1.0459561298149420e+00 + 2.4294235494005760e+00 1.1785688681180018e+00 1.0768944898399486e+00 + id 12340 + loc 1.0373686999082565e-01 2.6382964849472046e-01 411 + blend 0.0000000000000000e+00 + interp 4.6898440879071668e-01:4.6897971894662877e-01:1.5622484242737511e-01:2.8680433517589260e-01:8.2913983461856255e-01:3.2920324748049451e-01:1.3919557406008396e+00:3.8892293182454740e-01:2.0719358491796229e+00:3.5909837186886501e-01:2.8885884015562624e+00:4.4806751415269436e-01:3.2173437624061823e+00:4.4072498523436832e-01:3.9176149037401222e+00 + CVs 20 + -2.1761283319180577e-01 2.4848863925848899e-01 -7.3560367598536813e-01 + -4.1854994989822325e-01 3.8201356541871251e-01 -1.2799573729459996e+00 + -6.2097214861769978e-01 4.8364327876741137e-01 -1.8042249752906863e+00 + -8.3467919437588045e-01 5.7203324748451934e-01 -2.3584116157814523e+00 + -1.0710726874054128e+00 6.2515570028426937e-01 -2.9120715083674349e+00 + -1.3402652363829395e+00 6.2815860495743969e-01 -3.4349856682360707e+00 + -1.6473011086335170e+00 5.7778439818621941e-01 -3.9130431750676520e+00 + -1.9950425891946635e+00 4.7327970626220850e-01 -4.3521789551118228e+00 + -2.3796204536203276e+00 3.0931301244467835e-01 -4.7675521203095288e+00 + -2.7891845350060982e+00 7.4053662450223046e-02 -5.1687531869088081e+00 + -3.2021613590624480e+00 -2.4995917181717697e-01 -5.5486901958328279e+00 + -3.5826272822116909e+00 -6.6336549888638530e-01 -5.8852428055865555e+00 + -3.9148540424118932e+00 -1.1322082427291513e+00 -6.1610255957594902e+00 + -4.2124812172771584e+00 -1.6254091101402510e+00 -6.3589828189800226e+00 + -4.5102663148616386e+00 -2.1340622216854355e+00 -6.4638284911435164e+00 + -4.8655235567226347e+00 -2.6752442851968068e+00 -6.4766061779495319e+00 + -5.3027790543771127e+00 -3.2779375355958216e+00 -6.4192244775472140e+00 + -5.7689139363944868e+00 -3.9553270079697169e+00 -6.3244271223508886e+00 + -6.1863737798087950e+00 -4.6746303866075900e+00 -6.2117248315941413e+00 + id 12341 + loc 8.5315042734146118e-01 7.5982880592346191e-01 416 + blend 0.0000000000000000e+00 + interp 6.0411319813232300e-01:4.2671562704308774e-01:7.1752987420847791e-04:3.4294837296086461e-01:9.9091544022606037e-01:4.8691934968152806e-01:1.3192420661532491e+00:5.2262442207783655e-01:1.8684201937173217e+00:6.0410715700034168e-01:2.1378594979527756e+00:3.3317742268953821e-01:2.9323074548823875e+00:5.3903277557600315e-01:3.3780664688042963e+00 + CVs 20 + 7.5717661067802156e-01 2.1063218773828141e-01 -1.2665481917059146e-01 + 1.2426843970247103e+00 2.7984954228245623e-01 -2.5816121636800049e-01 + 1.6602776503635486e+00 2.9117156881226519e-01 -3.8416350511272401e-01 + 2.0999596194621075e+00 2.7862760793225350e-01 -4.9816056877886500e-01 + 2.5518074103286081e+00 2.3100764508170646e-01 -5.9322778050747904e-01 + 3.0031532616061769e+00 1.4049065602056643e-01 -6.6115244232000148e-01 + 3.4390024042959606e+00 5.1686629676095386e-03 -6.9432401984766878e-01 + 3.8432886993182942e+00 -1.7072716571169066e-01 -6.8984267636408525e-01 + 4.2027848003347925e+00 -3.7798663238768082e-01 -6.5094237740101590e-01 + 4.5092342623362613e+00 -6.0342477090545454e-01 -5.8425455032355367e-01 + 4.7538959799349065e+00 -8.2712385552024359e-01 -4.9596251593191609e-01 + 4.9260746375464857e+00 -1.0211903408456311e+00 -3.8863558880740362e-01 + 5.0368484222942254e+00 -1.1706128983669228e+00 -2.5976714259676814e-01 + 5.1305713955897208e+00 -1.3008346391977983e+00 -1.1564181184725730e-01 + 5.2409431867936673e+00 -1.4446147696743137e+00 2.3420633298160576e-02 + 5.3751779439241458e+00 -1.6081967834520066e+00 1.5043945234830625e-01 + 5.5314548936539456e+00 -1.7926809696831933e+00 2.6655742833457952e-01 + 5.7024409948567483e+00 -2.0065815778669647e+00 3.5858582000034595e-01 + 5.8421498755484214e+00 -2.3093303906342442e+00 3.0875211072213499e-01 + id 12342 + loc 7.8052544593811035e-01 2.7707365155220032e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0730742896330983e-01:5.0730235588902017e-01:3.1594423861471510e-01:4.0921451093573175e-01:9.5143108575372315e-01:3.0742769296835926e-01:1.2866719079832563e+00:3.0396980363760179e-01:1.9908727881044788e+00:2.7137222260635502e-01:2.6841121018935050e+00:2.9661716096715562e-01:3.8767102461807350e+00 + CVs 20 + 3.3247650754998426e-01 3.4429608902053110e-01 -2.0669881804801502e-01 + 6.3942046411939768e-01 6.7994183479448245e-01 -3.6357545699246874e-01 + 9.5341572465364344e-01 9.9977226517635975e-01 -4.7939495283396671e-01 + 1.2954682187733195e+00 1.2982293747085842e+00 -5.4353522590022374e-01 + 1.6697846292843970e+00 1.5624670972993155e+00 -5.3910885752438498e-01 + 2.0705029928588661e+00 1.7808063272235128e+00 -4.5692517965923618e-01 + 2.4840185238544956e+00 1.9445823921187124e+00 -2.9571831804628645e-01 + 2.8932340865143820e+00 2.0489829841318996e+00 -6.2035783594398097e-02 + 3.2829232790764848e+00 2.0920639963644128e+00 2.2778217767798714e-01 + 3.6467812378513398e+00 2.0750991969687549e+00 5.4770600021462346e-01 + 3.9888463289962597e+00 1.9995466356179823e+00 8.7211694660155903e-01 + 4.3171270535668977e+00 1.8626729612359934e+00 1.1832438770359923e+00 + 4.6377198170118374e+00 1.6605054957490026e+00 1.4675592314290691e+00 + 4.9541329349844654e+00 1.3981494704912105e+00 1.7072271036817643e+00 + 5.2699374664227951e+00 1.0950221085699670e+00 1.8785638079259903e+00 + 5.5789983313908431e+00 8.0674461305864142e-01 1.9703294493350101e+00 + 5.8567205935531925e+00 6.1136917086843701e-01 2.0225335527564838e+00 + 6.1012329921549462e+00 4.9192439799260645e-01 2.0810952934885036e+00 + 6.4585481949387500e+00 3.0463801396054579e-01 2.0503627244242684e+00 + id 12343 + loc 9.4882947206497192e-01 1.9336642324924469e-01 1075 + blend 0.0000000000000000e+00 + interp 4.8545161463591180e-01:3.4507646148073257e-01:1.0411799530342758e-01:2.6239213721146698e-01:1.0030279217107583e+00:4.8544676011976545e-01:1.7033424493882463e+00:3.1126230477702016e-01:2.1539725439210970e+00:2.5528367341281505e-01:3.2297552945903356e+00 + CVs 20 + -3.3678526808597287e-02 3.2373662763640187e-01 2.1305161305700943e-01 + -5.2092055604296694e-02 6.6404170331245749e-01 3.9832722388538827e-01 + -8.5302393872514426e-02 1.0130466936633657e+00 5.5932361270665165e-01 + -1.7292883852529228e-01 1.3592413570565109e+00 7.2182765980690733e-01 + -3.5099113451942676e-01 1.6647016058712647e+00 9.0630638290606491e-01 + -6.2527730387687597e-01 1.8731148091673462e+00 1.1012016429341855e+00 + -9.5963474033554441e-01 1.9375197975851508e+00 1.2546374923257233e+00 + -1.2681179375585954e+00 1.8679113367066211e+00 1.2840365370709925e+00 + -1.4731333668610298e+00 1.7508807332194223e+00 1.1741426032898179e+00 + -1.5840399132979335e+00 1.6409096276373414e+00 9.8636776731137765e-01 + -1.6172462153833813e+00 1.5486977781627935e+00 7.6038783269749655e-01 + -1.5632217465498799e+00 1.4981387994663482e+00 5.3700279633348535e-01 + -1.4630367265263147e+00 1.4773814801113152e+00 3.3449503129738650e-01 + -1.3897837481799136e+00 1.3846836165754006e+00 5.5028735821445358e-02 + -1.3938769645933162e+00 1.1485479552414462e+00 -3.6680420338520930e-01 + -1.5581443021382746e+00 8.2561523521171709e-01 -8.4660651331795700e-01 + -1.9473299024308675e+00 5.6187506688794908e-01 -1.2730175896935148e+00 + -2.4444781245798337e+00 4.9346052435465126e-01 -1.5416394014972612e+00 + -2.7022096835029528e+00 5.2078515506278489e-01 -1.6280893809537256e+00 + id 12344 + loc 4.5360985398292542e-01 6.4017766714096069e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0170863506125010e-01:3.4267445441262023e-01:7.2079109569394717e-01:4.0170461797489948e-01:1.3451770572479036e+00:3.1576263950736028e-01:2.2190917342094454e+00:3.1584538752462321e-01:2.9654279812441926e+00:2.9578207446977922e-01:3.6541780185606418e+00 + CVs 20 + 1.8918463146140763e-01 2.9760850899286251e-01 -6.2613181157350623e-02 + 3.6360808443647530e-01 5.5423937012883129e-01 -1.7330178297323701e-01 + 5.2681351101283247e-01 7.7352688239084710e-01 -3.1308801154928223e-01 + 6.7466007620001822e-01 9.4090472915052548e-01 -4.6840309830749394e-01 + 7.9878722278305603e-01 1.0432954797660243e+00 -6.2457692767484663e-01 + 8.9107567512580699e-01 1.0826368251534864e+00 -7.6126228686372188e-01 + 9.5318438911076575e-01 1.0784980832516078e+00 -8.6170913225461254e-01 + 9.9808761872137786e-01 1.0567836237509718e+00 -9.1820659912408686e-01 + 1.0436927775988396e+00 1.0409093745017883e+00 -9.3315282041618386e-01 + 1.1063991281150525e+00 1.0482200332923610e+00 -9.2150173886987763e-01 + 1.1940606936936757e+00 1.0844729031791984e+00 -9.0935150504827311e-01 + 1.2938150894708453e+00 1.1195306149589013e+00 -9.3096275594679445e-01 + 1.3726375879352442e+00 1.0695891721762385e+00 -9.9228893872359070e-01 + 1.4062715454535843e+00 8.1818284632119953e-01 -1.0594449642537846e+00 + 1.3691295215116890e+00 2.3647239624960542e-01 -1.1733142613549672e+00 + 1.2420844424057795e+00 -6.1727655393542613e-01 -1.6400038359444467e+00 + 1.1364981301504329e+00 -1.2054939070890160e+00 -2.7465666857245283e+00 + 1.3306784782430137e+00 -8.8752269680672491e-01 -4.1237027813249076e+00 + 1.4611905362144380e+00 -8.0532460880020662e-01 -4.2238988164918476e+00 + id 12345 + loc 2.9405683279037476e-01 1.4301764965057373e-01 397 + blend 0.0000000000000000e+00 + interp 4.0398040409029218e-01:3.2584679916996273e-01:4.1779648161663874e-01:3.9463197342275208e-01:1.1137444949164412e+00:3.3974924435281856e-01:1.9878406692702097e+00:3.1790652953866000e-01:2.6807376564729024e+00:3.1235420722624552e-01:3.3003259293171738e+00:4.0397636428625128e-01:3.9895608606575248e+00 + CVs 20 + -2.6156837255742438e-01 2.6842088387038271e-01 -1.1045079624146279e+00 + -4.5346859988528382e-01 3.1451063072808899e-01 -1.8624964926163792e+00 + -6.1008441525402568e-01 2.7378420128787695e-01 -2.5268042955880987e+00 + -7.4417565854269419e-01 2.0039615782381154e-01 -3.1968462119467427e+00 + -8.5690988316843919e-01 9.4800948274355645e-02 -3.8485598291500231e+00 + -9.5718127264310171e-01 -3.8454920432106521e-02 -4.4660152341355026e+00 + -1.0551230746247140e+00 -1.9499118455717901e-01 -5.0428233280699128e+00 + -1.1530217805695122e+00 -3.7521111296881637e-01 -5.5790493347444423e+00 + -1.2427923331244561e+00 -5.8164613275385224e-01 -6.0737781464568448e+00 + -1.3181030178759454e+00 -8.1505527422104562e-01 -6.5321663193668069e+00 + -1.3778554299756032e+00 -1.0800103107449490e+00 -6.9605833885248662e+00 + -1.4262326418777429e+00 -1.3840901101046950e+00 -7.3596698152116868e+00 + -1.4670952408642441e+00 -1.7337544369041651e+00 -7.7250260866253724e+00 + -1.4982993734195791e+00 -2.1340824088380890e+00 -8.0521978129224152e+00 + -1.5162744545283382e+00 -2.5874421240928962e+00 -8.3353184877132360e+00 + -1.5231892603320787e+00 -3.0852319761283455e+00 -8.5643762486435726e+00 + -1.5220989717072264e+00 -3.6070447550547726e+00 -8.7281779674652089e+00 + -1.5079377152192668e+00 -4.1328992345875646e+00 -8.8177650506464786e+00 + -1.4610257753891567e+00 -4.6237087274948170e+00 -8.7943043416302817e+00 + id 12346 + loc 5.9016406536102295e-01 6.0165226459503174e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1043761373071938e-01:3.0873692209480841e-01:7.6408334318932347e-02:2.6765109136558612e-01:1.0003061691511395e+00:3.1043450935458206e-01:1.9639040919765751e+00:3.0388176890512941e-01:2.3862757315475784e+00:2.6483289389175452e-01:3.0032528696454888e+00 + CVs 20 + 1.3237318511996152e-01 2.9325652564529703e-01 -2.5648328728088177e-01 + 2.7905172884785961e-01 5.8617532111283976e-01 -5.2558484605371181e-01 + 4.5816684618368775e-01 8.6964884651288554e-01 -7.8338089167703628e-01 + 6.7647333105114482e-01 1.1326816973512790e+00 -1.0161711177503356e+00 + 9.2852175515248370e-01 1.3599513781189765e+00 -1.2279995160802994e+00 + 1.2001152958460226e+00 1.5372005277609699e+00 -1.4406183219528204e+00 + 1.4754639386956354e+00 1.6595833241757569e+00 -1.6767951519413808e+00 + 1.7358709219678263e+00 1.7271497084479186e+00 -1.9497422251159930e+00 + 1.9575329089711380e+00 1.7380754781276258e+00 -2.2627526218420697e+00 + 2.1183283727201330e+00 1.6869429744980842e+00 -2.6066612329421672e+00 + 2.2020753742903287e+00 1.5668431643999201e+00 -2.9606007200269717e+00 + 2.2036233957753368e+00 1.3777827469150066e+00 -3.2976653902332478e+00 + 2.1269390529347212e+00 1.1254940340936002e+00 -3.5915739572073511e+00 + 1.9743015682113978e+00 8.1615827569982458e-01 -3.8126805680685720e+00 + 1.7493260398162771e+00 4.6754795182427555e-01 -3.9281984930289444e+00 + 1.4645613267510640e+00 1.1862764600970466e-01 -3.9204656997115248e+00 + 1.1510425897865781e+00 -1.8924617348870856e-01 -3.8104791357210641e+00 + 8.5526717421365317e-01 -4.5523504666670789e-01 -3.6710968495942842e+00 + 6.5583209847043378e-01 -7.4870576373483511e-01 -3.6980403799421144e+00 + id 12347 + loc 4.4081130623817444e-01 7.9714202880859375e-01 411 + blend 0.0000000000000000e+00 + interp 4.6636284831298463e-01:2.4924769223896806e-01:4.0240187344797196e-01:2.8378106817951704e-01:1.2900572261318497e+00:4.6635818468450152e-01:2.0983702292250395e+00:3.1472881062432506e-01:2.8721108364724017e+00:2.9438678294280535e-01:3.7176071821082752e+00 + CVs 20 + 9.9745810637310950e-01 1.2987510928861182e-01 -1.5723209931581875e-01 + 1.7074259095656472e+00 1.3684421404714159e-01 -2.6196146277145593e-01 + 2.3581599119380834e+00 1.1840284321397665e-01 -3.1088603460533126e-01 + 3.0223378189901839e+00 1.0936123266315467e-01 -3.0234218444441624e-01 + 3.6863531084999570e+00 1.0999294343562127e-01 -2.3921227070427487e-01 + 4.3412697002708081e+00 1.1704471548004258e-01 -1.3319480061455347e-01 + 4.9839057645258098e+00 1.1859400934493802e-01 -3.9844937288501803e-03 + 5.6166853698395212e+00 9.2933949223811263e-02 1.3037641659461496e-01 + 6.2453172904687539e+00 1.1560137178323382e-02 2.5263584680052525e-01 + 6.8685260945945643e+00 -1.5603032257676630e-01 3.4572850315374642e-01 + 7.4662300562041874e+00 -4.2889851411731006e-01 3.9857219827995782e-01 + 8.0076687431253433e+00 -8.0169956299357303e-01 4.1069554705039574e-01 + 8.4723028978251538e+00 -1.2563152431109552e+00 3.8748998490160752e-01 + 8.8514083269528996e+00 -1.7770058801430122e+00 3.3416771857879118e-01 + 9.1395567031328451e+00 -2.3498961389468200e+00 2.5715374562934806e-01 + 9.3326793690460548e+00 -2.9610616724094729e+00 1.6747129811927819e-01 + 9.4299313739108417e+00 -3.5906935977089276e+00 7.7942154002961117e-02 + 9.4431137567221253e+00 -4.1994121907826329e+00 -5.7725899651066004e-03 + 9.4483879613034425e+00 -4.6397071805976839e+00 -7.0465530159515233e-02 + id 12348 + loc 3.1584808230400085e-01 5.0495254993438721e-01 403 + blend 0.0000000000000000e+00 + interp 4.5413159635389133e-01:4.0436739640445507e-01:5.7289513930317337e-01:3.3425180962145651e-01:1.0002262731289711e+00:4.2569776736226078e-01:1.4480562916341440e+00:2.9700219739602773e-01:2.0517146632744421e+00:3.4541104727404670e-01:2.9891349844885715e+00:2.9961209522247945e-01:3.5581348640274060e+00:4.5412705503792783e-01:3.9919278085104466e+00 + CVs 20 + -9.0170796729053371e-02 1.0598563112188984e-01 -2.2825873544695046e-02 + -1.6078374631689421e-01 2.2448253196210707e-01 -3.9787794098243436e-02 + -2.1693604180544190e-01 3.4930386896297627e-01 -5.0688866831590726e-02 + -2.6828441865717728e-01 4.7600189967939210e-01 -5.9409887291936705e-02 + -3.1730168571166040e-01 6.0381800366900928e-01 -6.8305033616337343e-02 + -3.6535141648907599e-01 7.3048662918820673e-01 -7.9997977417713542e-02 + -4.1441073625119751e-01 8.5380988803752356e-01 -9.6638418505844287e-02 + -4.6814650103983196e-01 9.7286958500278697e-01 -1.1943334782406716e-01 + -5.2927642249328721e-01 1.0879142988336015e+00 -1.4879776569659273e-01 + -5.9870129290875129e-01 1.1998220552042911e+00 -1.8445015841627213e-01 + -6.7720108356924258e-01 1.3093021452223796e+00 -2.2576705186711502e-01 + -7.6583959851633887e-01 1.4148643762965840e+00 -2.7195123733090898e-01 + -8.6487762880492136e-01 1.5134482480340536e+00 -3.2228498935921801e-01 + -9.7335071984442223e-01 1.6018599909050506e+00 -3.7664914479335609e-01 + -1.0888514963620994e+00 1.6764196026489540e+00 -4.3667329056618159e-01 + -1.2101156567830880e+00 1.7352846260166905e+00 -5.0348124609814682e-01 + -1.3374287000166696e+00 1.7800112686787752e+00 -5.7093741940449572e-01 + -1.4678484427488079e+00 1.8110032892450478e+00 -6.2544386551282838e-01 + -1.5532748602997177e+00 1.7610158846418025e+00 -5.9664157953673591e-01 + id 12349 + loc 3.8332721590995789e-01 2.2966738045215607e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2967072826719405e-01:4.2966643155991141e-01:6.6780470473270559e-01:2.5750178358165154e-01:9.9821707145632332e-01:2.7281944829569948e-01:2.0000600676842852e+00:4.2662527611673862e-01:2.5174662702073132e+00:3.5169069107594908e-01:3.1139314532510407e+00:4.2782337947297588e-01:3.9503040990980338e+00 + CVs 20 + -1.4143590564179226e-01 2.6680208287392743e-01 -4.3824613534306123e-01 + -2.7275411252727233e-01 5.3365306414476033e-01 -8.5570227610736593e-01 + -4.1212789678825124e-01 7.8652212157512147e-01 -1.2774456887550436e+00 + -5.9148891176004970e-01 1.0408566645045929e+00 -1.7040370832700811e+00 + -8.4204340395269606e-01 1.3043769864793315e+00 -2.1149634803818338e+00 + -1.1894968026125827e+00 1.5655924762202467e+00 -2.4808470969065368e+00 + -1.6378156041554961e+00 1.7914145430439012e+00 -2.7675704126685425e+00 + -2.1610618297781237e+00 1.9349128900014199e+00 -2.9502603750052416e+00 + -2.7132356897535508e+00 1.9535615995357711e+00 -3.0209757653801628e+00 + -3.2355564043888769e+00 1.8313036964892098e+00 -2.9843485694895002e+00 + -3.6686349002384895e+00 1.5948552021274320e+00 -2.8605415256371098e+00 + -3.9858615033413516e+00 1.3019467063949450e+00 -2.6871245720992896e+00 + -4.2084537379448044e+00 9.9706268928152297e-01 -2.4998969680715604e+00 + -4.3766821180966069e+00 6.9059414920350792e-01 -2.3209420254124518e+00 + -4.5262686400543979e+00 3.7263902817391004e-01 -2.1707355532118258e+00 + -4.6800785349957632e+00 2.6476735726324918e-02 -2.0926144444006627e+00 + -4.8409594133833256e+00 -3.5002927072738932e-01 -2.1707962347971375e+00 + -4.9811595719372219e+00 -7.2269359159834190e-01 -2.4394953840710127e+00 + -5.1503542682275620e+00 -1.1033290899186836e+00 -2.5422387556627535e+00 + id 12350 + loc 8.9828723669052124e-01 5.7018518447875977e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9285430889666521e-01:3.1094544478639813e-01:2.4629270739424780e-02:3.4957333822771619e-01:9.2132983791461864e-01:3.9590971897990351e-01:1.7217042218645129e+00:4.0768758932891624e-01:2.1154519745138431e+00:4.9284938035357628e-01:2.7117053094744969e+00:4.2054743747794848e-01:3.0549313887908309e+00:4.8065327887636911e-01:3.6897147929452352e+00 + CVs 20 + 2.8732161564695977e-02 3.2040719329448081e-01 2.3960053748141358e-01 + 5.8404288189948243e-02 5.8315969340937546e-01 3.7161664183402299e-01 + 9.3410940502743733e-02 8.4063423623893385e-01 4.6240969506310031e-01 + 1.3877151739583868e-01 1.1181047475028385e+00 5.4350720901433780e-01 + 2.0194968149471942e-01 1.4070116221715456e+00 6.0310811976532674e-01 + 2.9067678826443283e-01 1.6965702358059627e+00 6.2788740931548193e-01 + 4.1532568834110795e-01 1.9723233150190889e+00 5.9745913708099774e-01 + 5.8091909021712840e-01 2.1967219353520582e+00 4.8181664316439565e-01 + 7.5289278897797318e-01 2.3031709770229964e+00 2.7876751992707094e-01 + 8.7882286897712636e-01 2.2665462311502367e+00 3.7385253939696383e-02 + 9.3583718852771913e-01 2.1063814475207430e+00 -1.9240418486916777e-01 + 9.2008484895532183e-01 1.8515800397659610e+00 -3.6915540499992427e-01 + 8.4354783270406508e-01 1.5346350715945229e+00 -4.7330335368264842e-01 + 7.2718270440339139e-01 1.1888876362514753e+00 -5.2923517147743249e-01 + 5.9376971253418476e-01 8.5601920671945975e-01 -6.2809121274798141e-01 + 4.8225498853174198e-01 6.3559081410605567e-01 -9.3614753015494268e-01 + 5.4779707283073809e-01 8.5950789813540207e-01 -1.4730642497305435e+00 + 8.2179572782684951e-01 1.4412658640320761e+00 -1.6048138607749938e+00 + 8.9148297732902282e-01 1.6382442912806616e+00 -1.7124932794982322e+00 + id 12351 + loc 1.6591082513332367e-01 1.9657792150974274e-01 1084 + blend 0.0000000000000000e+00 + interp 4.6058527661927329e-01:3.1090539890187568e-01:1.1987005868631551e-02:4.6058067076650711e-01:5.6716098741960774e-01:3.0477402358108513e-01:1.2052291067302885e+00:3.1142152666412370e-01:2.7245076362420417e+00:2.7258905123650545e-01:3.1988652327968428e+00 + CVs 20 + 3.0231919457427808e-01 3.4157766489027652e-01 2.3265235469788678e-01 + 5.1935656127207108e-01 6.2900076643428959e-01 4.2946842544848857e-01 + 7.3331538394798745e-01 9.0058161004461745e-01 5.7794459916326590e-01 + 9.4868047404072042e-01 1.1536704732079477e+00 6.6779392413748406e-01 + 1.1295416533993801e+00 1.3741854262685802e+00 7.1274338429334572e-01 + 1.2723970445930872e+00 1.5626226469795479e+00 7.2456424785860074e-01 + 1.4201867577349936e+00 1.7274301944248518e+00 7.0826924814258885e-01 + 1.6436173020361362e+00 1.8944654309346112e+00 7.2007594644733419e-01 + 1.8460361200975701e+00 2.0805918166844291e+00 8.7106260879909247e-01 + 1.8472756449324994e+00 2.2282872751942118e+00 1.0411502293625059e+00 + 1.6962438217860796e+00 2.3376931512954897e+00 1.1053525794851109e+00 + 1.4554552576001483e+00 2.4298294291845828e+00 1.0581120756693154e+00 + 1.1802734456500410e+00 2.4800301889172807e+00 8.7669442796905206e-01 + 9.7475270243326317e-01 2.4452285866314316e+00 5.4708619668215452e-01 + 8.8736293129475463e-01 2.3257473769852011e+00 1.4011029532913283e-01 + 8.9367343721077364e-01 2.1578435722375926e+00 -2.2397321861566655e-01 + 1.0880642685442623e+00 1.9154410203741472e+00 -4.5147198451505072e-01 + 1.3685630084125628e+00 1.4426854894770691e+00 -7.0616952763601759e-01 + 1.2361714661983016e+00 1.6020957476929572e+00 -7.3153911304271058e-01 + id 12352 + loc 1.6886264085769653e-01 4.6593025326728821e-01 372 + blend 0.0000000000000000e+00 + interp 4.5428211829449744e-01:4.5427757547331449e-01:1.5088067317981435e-01:3.4896239372349208e-01:6.9390878085244290e-01:3.2306756170268286e-01:1.0290049514854647e+00:4.3360377941793404e-01:1.9342690438701937e+00:3.5354249008067840e-01:2.1964335704063602e+00:3.2103129747599890e-01:3.0052286526020913e+00:3.4692562877650851e-01:3.6163229883684616e+00 + CVs 20 + -1.5222056329542705e-01 7.3365947492449746e-01 4.3376493686748518e-01 + -3.0734904560141463e-01 1.4211507461351371e+00 8.3892444466835681e-01 + -4.9555994939915782e-01 2.0462724585936289e+00 1.1998228043738748e+00 + -7.5204619798351724e-01 2.5856434960134331e+00 1.4253856051552529e+00 + -1.0786341305785561e+00 3.0047211606606790e+00 1.4248879284203673e+00 + -1.4422873109379319e+00 3.2828312601123208e+00 1.2019000801358464e+00 + -1.8020678056775041e+00 3.4007438829513372e+00 8.0264176824987854e-01 + -2.1200109881540961e+00 3.3434122416738710e+00 2.8149976555403411e-01 + -2.3752456654307039e+00 3.1092739342546079e+00 -3.1167183384492070e-01 + -2.5549087363983962e+00 2.6965106422378851e+00 -9.2870168302427114e-01 + -2.6487264491741143e+00 2.1132701308339281e+00 -1.5124573191619963e+00 + -2.6497749366179395e+00 1.4132876179302247e+00 -2.0299209062574510e+00 + -2.5598787358362105e+00 7.1931808517846874e-01 -2.5207833030533093e+00 + -2.4654715090357602e+00 2.3652739166828263e-01 -3.0099011415165715e+00 + -2.5239528814711951e+00 1.1105279407457536e-01 -3.3863879224586011e+00 + -2.7385722641954819e+00 2.2425550119908078e-01 -3.6850338526395472e+00 + -3.1018052244590200e+00 5.2461564632193425e-01 -3.9802484601596415e+00 + -3.5988661220315370e+00 9.8680454735146483e-01 -4.2496325113746707e+00 + -4.2527383834454344e+00 1.6321505470020001e+00 -4.7335680565432092e+00 + id 12353 + loc 9.8949080705642700e-01 3.9130276441574097e-01 409 + blend 0.0000000000000000e+00 + interp 5.1569317378146906e-01:5.1568801684973131e-01:3.0559864673003900e-01:4.6950108065397805e-01:8.7906146640662397e-01:3.5971747326942743e-01:1.0860464601683515e+00:4.3519405927934685e-01:1.7932408295537203e+00:3.7759054420617416e-01:2.2189977127993301e+00:3.2942425169105038e-01:3.2162981886799709e+00:3.5097792825034241e-01:3.9728243938455687e+00 + CVs 20 + -3.3671926863325308e-01 2.2493621701225544e-01 1.9641738352817426e-01 + -6.5166911371942704e-01 4.2152160516522197e-01 3.7369681947295608e-01 + -9.5805334362633277e-01 6.0547651518870171e-01 5.3023890053293066e-01 + -1.2627007408349598e+00 7.8257714739036977e-01 6.6913719397742344e-01 + -1.5618350613313403e+00 9.5108969100088370e-01 7.9205337417882005e-01 + -1.8528635996919047e+00 1.1109536306884089e+00 9.0196276793397623e-01 + -2.1380345160738221e+00 1.2633654521268110e+00 1.0031344750293005e+00 + -2.4259597181940884e+00 1.4090153377066903e+00 1.1009255166696668e+00 + -2.7300571610674487e+00 1.5460131692002719e+00 1.2012262256822379e+00 + -3.0658581077266036e+00 1.6675854754481541e+00 1.3105603570648845e+00 + -3.4428366324051316e+00 1.7601082138208732e+00 1.4369165090653078e+00 + -3.8507398870577294e+00 1.8063733466796410e+00 1.5869501916186008e+00 + -4.2653226587750739e+00 1.7959803547833391e+00 1.7609308416511276e+00 + -4.6702111247024476e+00 1.7274339230738280e+00 1.9544007091172821e+00 + -5.0566299615442256e+00 1.6025317176887446e+00 2.1640520441113651e+00 + -5.4159643667894333e+00 1.4252576452311128e+00 2.3919529249591616e+00 + -5.7370918718853963e+00 1.2021488924813610e+00 2.6413568570407953e+00 + -6.0043633335011748e+00 9.4472876257444716e-01 2.9016779349778843e+00 + -6.0901007012191846e+00 7.9623628536760505e-01 3.0545868826534912e+00 + id 12354 + loc 1.3635186851024628e-01 2.0097930729389191e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3312009292899722e-01:3.0744233872707810e-01:2.6042502340805418e-01:4.3311576172806793e-01:1.0315559382266137e+00:3.0947601821867338e-01:1.7510623565539893e+00:2.9245193389112972e-01:2.4801903557967000e+00:3.1025526748904392e-01:3.4341856921629583e+00 + CVs 20 + -1.9850978734468044e-01 2.2327308794515732e-01 -1.8878062303125270e-01 + -3.6294918713127533e-01 4.6219040205096229e-01 -3.5661469083076558e-01 + -5.1915825320073139e-01 6.9178289077411792e-01 -5.1799404382699443e-01 + -6.8285357616369913e-01 8.9931600513986909e-01 -6.8239820030983389e-01 + -8.5393251314175878e-01 1.0886755113459667e+00 -8.5017349021629007e-01 + -1.0333123501612453e+00 1.2639175415066992e+00 -1.0227929651767149e+00 + -1.2238029631824281e+00 1.4231636796565543e+00 -1.2069002565142359e+00 + -1.4280205050579309e+00 1.5558136747144939e+00 -1.4123248470190715e+00 + -1.6455789663324913e+00 1.6486538356701090e+00 -1.6440042402323138e+00 + -1.8733599812553838e+00 1.6908681197765763e+00 -1.8989160793603881e+00 + -2.1060420374833364e+00 1.6744880664688955e+00 -2.1689757131465108e+00 + -2.3360176439435145e+00 1.5946030282668462e+00 -2.4438885363569280e+00 + -2.5548365619914986e+00 1.4495886930855579e+00 -2.7103558551398979e+00 + -2.7532733917959420e+00 1.2433849584171768e+00 -2.9513641725944826e+00 + -2.9198275735731913e+00 9.9065076967537891e-01 -3.1486705308852909e+00 + -3.0414304464264914e+00 7.3407169057966393e-01 -3.2878660530585759e+00 + -3.1126300468241679e+00 5.9266696678035946e-01 -3.3571471546867002e+00 + -3.2228103018670513e+00 7.6104421938669442e-01 -3.3594761456220272e+00 + -3.0364294328123309e+00 4.7121473739175990e-01 -3.3612920181134420e+00 + id 12355 + loc 1.4274528622627258e-01 5.0670343637466431e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0813959160535834e-01:2.4582921385668532e-01:1.8855412643475489e-01:3.5619587545503079e-01:1.0003688820041297e+00:3.1701094375764660e-01:1.6066375849376309e+00:4.0813551020944233e-01:2.0467853814795678e+00:2.9946470765870098e-01:3.0594947241107793e+00 + CVs 20 + -1.7619093920317239e-01 4.7474253785562442e-01 3.7580859255307947e-01 + -3.4889864828428041e-01 8.7341543747254868e-01 6.0296256091011924e-01 + -5.2951397004664136e-01 1.2439838393725693e+00 7.7100066749768059e-01 + -7.2627099609444801e-01 1.6031898897655175e+00 9.0946787193174838e-01 + -9.4705520704585655e-01 1.9455741136273637e+00 1.0134929267024722e+00 + -1.1999240488571516e+00 2.2646914639644633e+00 1.0771972907474647e+00 + -1.4921714285057299e+00 2.5511153039542811e+00 1.0905893346397340e+00 + -1.8277975541398166e+00 2.7905605554357402e+00 1.0385866218122057e+00 + -2.2056181401280055e+00 2.9620359684744022e+00 9.0307190469440057e-01 + -2.6128141398121127e+00 3.0363166706389615e+00 6.7471583173423644e-01 + -3.0279601818596618e+00 2.9884907268337599e+00 3.7442708111007250e-01 + -3.4389525193058170e+00 2.8065665317673885e+00 4.3851194396747784e-02 + -3.8409169210043221e+00 2.4875559967586538e+00 -2.7070634593769327e-01 + -4.2342811465149666e+00 2.0379098512239642e+00 -5.1783952638416253e-01 + -4.6181484356706672e+00 1.5010739869644654e+00 -6.3340597522302788e-01 + -4.9778704969760659e+00 9.9960110405239400e-01 -5.8367213601123347e-01 + -5.3043324527128251e+00 6.5656291325341176e-01 -4.2082496132952846e-01 + -5.6121692347887562e+00 4.8178984592760415e-01 -2.1117991747044157e-01 + -6.0026169731146837e+00 2.6664979330306054e-01 9.4447251739048443e-02 + id 12356 + loc 4.0621078014373779e-01 4.2933806777000427e-01 1075 + blend 0.0000000000000000e+00 + interp 4.6389626827879538e-01:3.7975267627086307e-01:3.1553460546876133e-02:2.6630182192506308e-01:8.7062189864847539e-01:3.4906620177579240e-01:1.5204451303008744e+00:4.6389162931611261e-01:2.0024694171097828e+00:2.6980038726063232e-01:2.7712976639072062e+00:2.9455944312581067e-01:3.6858457355716494e+00 + CVs 20 + -2.1137749733360575e-01 2.6038788848849276e-01 2.6903639173599753e-02 + -4.2422852844921793e-01 5.0863326614447013e-01 3.4260233823753761e-02 + -6.3414981481916610e-01 7.5195960140225426e-01 3.7579456288643009e-02 + -8.4957292925620098e-01 9.9537914272383754e-01 3.7746709685090973e-02 + -1.0797326042689062e+00 1.2368068910984589e+00 3.0557635604834821e-02 + -1.3224396259498361e+00 1.4751851499153137e+00 2.4037804090498494e-02 + -1.5714332940916658e+00 1.7144629553975490e+00 2.9461777102669173e-02 + -1.8260130524544580e+00 1.9594817183792270e+00 4.8454377884667554e-02 + -2.0922964233837185e+00 2.2068184841039087e+00 7.3574876314020599e-02 + -2.3848363744426599e+00 2.4388095175576128e+00 9.8960153609329526e-02 + -2.7243454454586318e+00 2.6210383487074194e+00 1.2753997065932277e-01 + -3.1144959847475002e+00 2.7089508430572304e+00 1.7093219093346113e-01 + -3.5323588687012708e+00 2.6791892464362830e+00 2.3806524058779621e-01 + -3.9549174135312701e+00 2.5430457362549514e+00 3.2436383411313485e-01 + -4.3611830970784986e+00 2.3306875541072904e+00 4.2172353139005825e-01 + -4.7172619949765977e+00 2.0910415476550908e+00 5.3336399527753098e-01 + -4.9928703303422983e+00 1.8794840957344185e+00 6.6650378651732856e-01 + -5.1947787255884172e+00 1.7056325082447890e+00 8.1112059609677323e-01 + -5.3542861775787864e+00 1.5098773121183668e+00 9.7203593295511992e-01 + id 12357 + loc 1.1967377364635468e-01 5.9582918882369995e-01 406 + blend 0.0000000000000000e+00 + interp 4.5698183247983937e-01:4.5697299055114893e-01:9.2257347511504162e-02:3.8444917757430236e-01:8.3027410369132648e-01:4.1155645794623291e-01:1.2735165524436016e+00:3.5028879881401537e-01:1.9998338174248915e+00:3.9588637538142113e-01:2.5538213614229912e+00:4.4796369441454437e-01:3.0000409300133950e+00:4.5697726266151462e-01:3.6945858700857666e+00 + CVs 20 + 7.9460378908908572e-02 2.1308263981990672e-01 -4.8115658195391417e-02 + 8.6877413870695558e-02 3.5424536637745774e-01 -5.8631049191179049e-02 + 4.3026524024601526e-02 4.6358669300804101e-01 -5.8725899030870492e-02 + -8.5605651905878988e-05 5.6145226741695486e-01 -5.6588654722161458e-02 + -4.0616817191729104e-02 6.4226949864464888e-01 -5.1898966149572838e-02 + -7.6777479371846591e-02 7.0037061841133741e-01 -4.3899470684204654e-02 + -1.0393208292266873e-01 7.2886520633266416e-01 -3.2373737964332017e-02 + -1.1307646516588801e-01 7.1720920785265141e-01 -2.0923615227836014e-02 + -8.2987015895810395e-02 6.4262572596628786e-01 -3.0522054870663722e-02 + 3.6896764985305919e-02 4.6905146140236620e-01 -1.7053580712296779e-01 + 1.8445963322883258e-01 3.8759344497792531e-01 -6.9491225264997458e-01 + 1.1255149292681044e-01 5.8394824995087979e-01 -1.0990914962264264e+00 + 1.1981548672362341e-02 7.2195870926018513e-01 -1.2418140158567716e+00 + -7.0893051249489802e-02 7.9284003122428914e-01 -1.2983692344675666e+00 + -1.5442857657405940e-01 7.9997676102306703e-01 -1.3114851044228113e+00 + -2.5155278191625152e-01 7.2414746439386324e-01 -1.2861250002118558e+00 + -3.5588499411652608e-01 5.5922945032696403e-01 -1.2116749202872283e+00 + -4.4301704542318510e-01 3.3549687251319577e-01 -1.0768848001336986e+00 + -4.8309277489157665e-01 2.6456539739505369e-01 -1.0124645170152560e+00 + id 12358 + loc 7.1028482913970947e-01 2.6721873879432678e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7347259251502002e-01:3.0476044038062849e-01:4.5374343121803584e-01:2.8469782204167599e-01:1.1928981403946159e+00:2.8541951203830862e-01:2.0184481530648286e+00:3.7346885778909489e-01:2.9230971284144820e+00:2.9249649417134926e-01:3.9070124357174922e+00 + CVs 20 + -1.6320367543850925e-01 3.3621680140048210e-01 3.5275203489598339e-02 + -3.1450948862867806e-01 6.7206809014964852e-01 8.8672917694694403e-02 + -4.8514968348005266e-01 1.0007429372193131e+00 1.7164281012870142e-01 + -6.8420666189666535e-01 1.3116567688918872e+00 2.9111266610099645e-01 + -9.1230665745645623e-01 1.5941723628490805e+00 4.5256212077232438e-01 + -1.1672587437743094e+00 1.8326767081669100e+00 6.6137072417030507e-01 + -1.4402746025220305e+00 2.0070211581310673e+00 9.1797355049800011e-01 + -1.7167788806328472e+00 2.1003587447101255e+00 1.2138013123891751e+00 + -1.9814933349715353e+00 2.1036990373014204e+00 1.5332328805782611e+00 + -2.2217547029526923e+00 2.0160090933723245e+00 1.8569336036590243e+00 + -2.4287550702326874e+00 1.8444313285290370e+00 2.1656889514822599e+00 + -2.5982599454238704e+00 1.6030645582913088e+00 2.4443682073612618e+00 + -2.7307725231571705e+00 1.3084317168135953e+00 2.6839954345614405e+00 + -2.8305773815943844e+00 9.7454748347691023e-01 2.8768868090176243e+00 + -2.9038805264524954e+00 6.1094607486781571e-01 3.0010030148968521e+00 + -2.9465377556804904e+00 2.4074908722501931e-01 2.9896541854057608e+00 + -2.9191585152447797e+00 -1.8776766355860675e-02 2.7432103070886109e+00 + -2.8097851932084210e+00 -2.5028580104262899e-02 2.4014333034283997e+00 + -2.7927810746426811e+00 -2.2284858378292483e-01 2.1890518204991847e+00 + id 12359 + loc 2.0166849717497826e-02 2.5921169668436050e-02 416 + blend 0.0000000000000000e+00 + interp 2.6970893078202185e-01:2.6970623369271401e-01:1.8394764299185895e-01:1.6301641854503471e-01:7.1956487476573039e-01:1.1453163919457514e-01:1.4563630823371037e+00:1.8696059273551729e-01:2.2061835652057940e+00:1.5590867418602500e-01:3.1612038638472955e+00 + CVs 20 + -1.6592864029429247e-01 1.0784696884463356e-01 -3.2010654524721588e-01 + -3.1061399366810799e-01 1.6812163953396125e-01 -5.2165598205024488e-01 + -4.5614662557010927e-01 2.1145516476197532e-01 -6.9385321120907573e-01 + -6.1002467501138402e-01 2.5399812136556998e-01 -8.8144905837137477e-01 + -7.6873355724287928e-01 2.9724916733247286e-01 -1.0828939195380294e+00 + -9.2812838104348583e-01 3.4134417733636102e-01 -1.2969752996451234e+00 + -1.0837594327725173e+00 3.8480928338953907e-01 -1.5227823985933391e+00 + -1.2310317510456033e+00 4.2504387814786382e-01 -1.7596311791053922e+00 + -1.3648319010784293e+00 4.5832319396819021e-01 -2.0079851426770068e+00 + -1.4791182400443721e+00 4.7860663871542553e-01 -2.2699753831648248e+00 + -1.5685173912186132e+00 4.7867262458354964e-01 -2.5471008286685843e+00 + -1.6296210197803731e+00 4.5543852443458333e-01 -2.8385109030090021e+00 + -1.6605517649052606e+00 4.1110295988114931e-01 -3.1410749576784340e+00 + -1.6633105180169825e+00 3.4921297483201741e-01 -3.4475706790661342e+00 + -1.6466816840916074e+00 2.7386323990062644e-01 -3.7487876931342976e+00 + -1.6179884955443611e+00 1.8845125265138307e-01 -4.0429042871047978e+00 + -1.5740604666511144e+00 9.3393550519725643e-02 -4.3357989382491331e+00 + -1.5083209712391212e+00 -7.5121883260480526e-03 -4.6307330730320340e+00 + -1.4888817119940874e+00 -5.6379059676637366e-02 -4.8930862022825874e+00 + id 12360 + loc 4.0790584683418274e-01 2.3135331273078918e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0055568414733861e-01:2.8206121456663813e-01:8.4248853524470313e-02:2.8073029056289039e-01:9.5891939826160488e-01:3.6939114167154385e-01:1.7380010936747996e+00:3.2039067317344294e-01:2.3690149235849578e+00:4.0055167859049717e-01:3.0000012531556406e+00:3.0389868926144759e-01:3.6054249152587663e+00 + CVs 20 + -3.3464548572054043e-01 6.1919847764335589e-01 -4.8688972101418315e-02 + -5.8279982403198249e-01 1.2583447183191894e+00 -1.7433315810509192e-01 + -7.2199789294163452e-01 1.9088133673521455e+00 -3.9532403860962562e-01 + -7.5438317308129821e-01 2.5182602764303565e+00 -7.4517487573991315e-01 + -7.0945654452977480e-01 3.0180408183323983e+00 -1.2388843769863807e+00 + -6.0159863879879039e-01 3.3490311473867864e+00 -1.8088149115563081e+00 + -6.5900100927405703e-01 3.3629100135683982e+00 -2.4269386412646501e+00 + -7.0739935351506966e-01 3.1028000528797488e+00 -2.7389585245275869e+00 + -7.1793261446381307e-01 2.7043744934775842e+00 -3.0856745001149326e+00 + -6.6723162338765329e-01 2.1381867960081369e+00 -3.3207941391020417e+00 + -5.0223669903587531e-01 1.5532095902747876e+00 -3.3415316558817851e+00 + -2.5039787788121509e-01 1.0295306478795319e+00 -3.1879066595024690e+00 + 2.2657959104485537e-02 5.1659236241614370e-01 -2.9302692618578283e+00 + 2.4899449145165786e-01 -8.4543789665444846e-02 -2.6089598452179961e+00 + 3.3055596873872584e-01 -7.8772628137014034e-01 -2.3212500445052635e+00 + 6.9141811249796903e-02 -1.7152937543104185e+00 -2.4743313787027863e+00 + -7.7663477468876851e-01 5.9690237930164436e-01 -4.4738970877191377e+00 + -4.9903620393514320e-01 1.2263258025615338e+00 -4.0770978769079003e+00 + -5.4436076675907452e-01 1.6310157228121076e+00 -3.9559101075240539e+00 + id 12361 + loc 1.3420416973531246e-02 3.0836619436740875e-02 408 + blend 0.0000000000000000e+00 + interp 4.5213849908169534e-01:4.5213397769670455e-01:5.7465076026002371e-01:2.6567401725728162e-01:1.4601939025461599e+00:3.4631129715000025e-01:2.1517948107243026e+00:3.0127216383901467e-01:2.8468924215966567e+00:3.0733618428014658e-01:2.9992134612613510e+00:3.1257989190220331e-01:3.9909581422087612e+00 + CVs 20 + -9.5145880827587209e-02 3.6755230723635068e-01 -2.9345270067485058e-01 + -1.6476353962960974e-01 6.0042535827236643e-01 -4.0211410613644738e-01 + -2.2988575511144346e-01 7.8810961522193956e-01 -4.5866982868695627e-01 + -2.9375793786050886e-01 9.6924538955157113e-01 -5.3235369776212293e-01 + -3.5283561966305937e-01 1.1368696584408378e+00 -6.2180644368848781e-01 + -4.0133100017976087e-01 1.2844383724084192e+00 -7.2695144045110349e-01 + -4.2921582659965007e-01 1.4040983037363708e+00 -8.5094187869992544e-01 + -4.1924344816094528e-01 1.4795930846281027e+00 -9.9854789162727431e-01 + -3.5587707189723000e-01 1.4811711430075487e+00 -1.1547650583637208e+00 + -2.6184559762624121e-01 1.4076239256002201e+00 -1.2771189390643625e+00 + -1.7092770784959566e-01 1.2954389532343478e+00 -1.3649925635403910e+00 + -8.7505187747647178e-02 1.1533833932502342e+00 -1.4410427592648769e+00 + -1.1389303633201481e-02 9.7654343576569680e-01 -1.5145905317906145e+00 + 5.7956790335796066e-02 7.6937428809361230e-01 -1.5963557373920017e+00 + 1.2713572913455909e-01 5.4337155063473053e-01 -1.7067833044726322e+00 + 2.0082950218924120e-01 3.1097686062914409e-01 -1.8636969884822265e+00 + 2.7493757635392468e-01 8.2217677271580247e-02 -2.0698475237178697e+00 + 3.5022661020084001e-01 -1.3750037508759139e-01 -2.3147224979291203e+00 + 3.9483521052563531e-01 -4.1479108955537192e-01 -2.4822524772584851e+00 + id 12362 + loc 8.2367640733718872e-01 2.7221065759658813e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2042443163009269e-01:2.6574940907895866e-01:1.0724122107826140e-02:3.3407141423051190e-01:1.0048523848867270e+00:2.6129859404861883e-01:1.8945989852671343e+00:2.7867919546261499e-01:2.5411079161912800e+00:4.1986049822891519e-01:2.9992062278633416e+00:4.2042022738577639e-01:3.4111600295049982e+00 + CVs 20 + -1.2237279611536168e-01 2.8660858466723027e-01 1.8695916638566448e-01 + -2.6109946742521078e-01 5.7921720083961281e-01 3.7008372537267831e-01 + -4.1862781303175706e-01 8.7401325203740654e-01 5.3845098629251642e-01 + -5.9165467929411819e-01 1.1685775172438910e+00 6.9031141772134763e-01 + -7.7469141737680469e-01 1.4630340100330332e+00 8.3189076332827094e-01 + -9.6272744846062941e-01 1.7594767693440230e+00 9.7563766583816647e-01 + -1.1527003297779159e+00 2.0609856723448350e+00 1.1409329527961010e+00 + -1.3418825531284717e+00 2.3673022194628404e+00 1.3534458081035601e+00 + -1.5235929778802704e+00 2.6674469405683090e+00 1.6389958698462599e+00 + -1.6873364442690448e+00 2.9382297565612565e+00 2.0140651554359081e+00 + -1.8235697419769534e+00 3.1479044532850398e+00 2.4770699117854584e+00 + -1.9289548065250213e+00 3.2663248437495787e+00 2.9990012125088508e+00 + -2.0125119366238380e+00 3.2816915954779056e+00 3.5385121961652115e+00 + -2.0929219452965122e+00 3.1990795675253478e+00 4.0651877281801800e+00 + -2.1934089107702608e+00 3.0261396118200050e+00 4.5665036620249531e+00 + -2.3406189401803270e+00 2.7562122105299247e+00 5.0403586782671033e+00 + -2.5502207298402864e+00 2.3838632434117315e+00 5.4507703432007277e+00 + -2.8073280974898607e+00 1.9731563894855397e+00 5.7216458766364857e+00 + -3.0785715411720038e+00 1.6836986045414681e+00 5.7626229933561044e+00 + id 12363 + loc 9.9799734354019165e-01 2.7979660034179688e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9867488738819862e-01:3.4734364067664264e-01:7.3254474845150641e-01:3.6761487637752671e-01:1.1530594597615851e+00:2.9633753030083693e-01:1.9989239869399711e+00:3.9867090063932475e-01:2.2966245053836127e+00:3.7099549639309864e-01:2.9916125639028373e+00:2.9523687170121521e-01:3.5593620192029385e+00 + CVs 20 + -1.3522407566803085e-01 3.6743559529168957e-01 -2.6043229554362368e-01 + -2.7542949019817431e-01 6.6603472633771021e-01 -4.0369235207671039e-01 + -4.3262012933544935e-01 9.3760831592932459e-01 -5.1219849315632260e-01 + -6.1371613907738765e-01 1.1948599984154291e+00 -6.1307501164770017e-01 + -8.1689349366796782e-01 1.4283448363216986e+00 -7.0187676150139144e-01 + -1.0364075168137554e+00 1.6269432283232867e+00 -7.7255255684816682e-01 + -1.2624167641610546e+00 1.7795033882542777e+00 -8.1859476124164687e-01 + -1.4832155674723064e+00 1.8797070546232728e+00 -8.3870206531958447e-01 + -1.6891696119842023e+00 1.9288893679994450e+00 -8.3810909645627207e-01 + -1.8772619641923760e+00 1.9333988550058747e+00 -8.2299570847559600e-01 + -2.0513272272991863e+00 1.8981652691529294e+00 -7.9543755194783117e-01 + -2.2149303373422446e+00 1.8239186643842760e+00 -7.5450252412382912e-01 + -2.3656421646622774e+00 1.7123217473321073e+00 -7.0010462340194790e-01 + -2.4944635678442730e+00 1.5730565430950247e+00 -6.3506216084639733e-01 + -2.5825014029037008e+00 1.4404951100106542e+00 -5.6831907094760092e-01 + -2.6026750126992217e+00 1.3999294361427341e+00 -5.0373316456935713e-01 + -2.5686257745811267e+00 1.4972479677745665e+00 -3.8492991460402237e-01 + -2.5505010008947662e+00 1.5087266257593652e+00 -2.4300949650836406e-01 + -2.5253295991750138e+00 1.1851506630128839e+00 -3.5653559696380677e-01 + id 12364 + loc 7.7096778154373169e-01 8.1032145023345947e-01 411 + blend 0.0000000000000000e+00 + interp 4.3536747876893800e-01:3.0230155799466363e-01:9.0813089930078705e-01:4.3536312509415032e-01:1.2180422239000364e+00:4.2042743720064557e-01:2.0070216223122710e+00:3.7703608625288448e-01:2.6832240581156728e+00:2.7714184741043152e-01:3.1162741102135900e+00:4.2421666948030445e-01:3.9837850578577134e+00 + CVs 20 + 8.8011286914743825e-01 2.2490406763042958e-01 -1.7001116943952740e-01 + 1.4587217464489970e+00 2.9033173993438677e-01 -2.8268857410030013e-01 + 1.9499651468590902e+00 2.9178447086891734e-01 -3.6312362989050567e-01 + 2.4413194976264605e+00 2.7551526869695286e-01 -4.1900286919565255e-01 + 2.9304239444059328e+00 2.4329758672041119e-01 -4.5119913290251507e-01 + 3.4179184992160820e+00 1.9793826503335055e-01 -4.6458046864768804e-01 + 3.9056805348512067e+00 1.4371407203996511e-01 -4.6824735731429434e-01 + 4.3962557913850651e+00 8.2858669447210320e-02 -4.7149248059391635e-01 + 4.8940259392829866e+00 1.0045387651764770e-02 -4.7733338497049999e-01 + 5.4007755397549166e+00 -8.7122396246406941e-02 -4.8408200047521216e-01 + 5.9094876161799270e+00 -2.2627952827962505e-01 -4.9641143659421122e-01 + 6.4070575878005211e+00 -4.2121818769689656e-01 -5.2943697423390457e-01 + 6.8906188232701835e+00 -6.6972047147834801e-01 -5.9435937969937669e-01 + 7.3656654016478225e+00 -9.6901100630366743e-01 -6.8380639697457413e-01 + 7.8363717932541919e+00 -1.3179079521922836e+00 -7.8549905636711592e-01 + 8.2992885311349607e+00 -1.7165527545525054e+00 -8.9646939993608488e-01 + 8.7409041930992455e+00 -2.1661773549115826e+00 -1.0142886224350878e+00 + 9.1358076381893607e+00 -2.6532745314933348e+00 -1.1213108386529447e+00 + 9.3835296610851788e+00 -3.0051430344603665e+00 -1.1939234748434790e+00 + id 12365 + loc 4.1389012336730957e-01 2.7189132571220398e-01 403 + blend 0.0000000000000000e+00 + interp 3.9501928535171388e-01:3.2913088198574653e-01:6.8000694395505124e-01:3.1885430372568757e-01:1.1118636832496842e+00:3.2674312976760261e-01:1.8825779629850579e+00:3.8932045136514432e-01:2.1354330449345600e+00:2.9774748654032102e-01:3.0004377848880588e+00:3.9501533515886039e-01:3.8146863145958712e+00 + CVs 20 + -1.2550188450767780e-01 4.0490631338251698e-01 -2.1034709012374214e-01 + -2.8244701097985947e-01 7.9282713926561577e-01 -3.7760014228999939e-01 + -4.6489535710865632e-01 1.1684122813726436e+00 -5.4822543195657480e-01 + -6.9386349563879035e-01 1.5293027855077725e+00 -7.3340989886987773e-01 + -9.8640412581695958e-01 1.8619181726868226e+00 -9.2018026544148901e-01 + -1.3563285449604439e+00 2.1689632524011513e+00 -1.0755874004798593e+00 + -1.8085371936289805e+00 2.4484958816343858e+00 -1.1545832958723430e+00 + -2.3311457811468315e+00 2.6748147654966941e+00 -1.1129188925306717e+00 + -2.8845444434035485e+00 2.8052382259370021e+00 -9.2361250060266042e-01 + -3.4017655193615823e+00 2.8073983441302710e+00 -6.0976638422989127e-01 + -3.8331139754577683e+00 2.6837798363775822e+00 -2.4754600753803158e-01 + -4.1747705519328635e+00 2.4672338610617786e+00 7.5863518216820358e-02 + -4.4549897806423306e+00 2.2018101798506882e+00 3.3046220306117124e-01 + -4.7028956907061188e+00 1.9079752160027801e+00 5.6454914864819516e-01 + -4.9272285377260641e+00 1.6026698024307404e+00 8.0865911851607930e-01 + -5.1297555732451929e+00 1.3610828566410644e+00 1.0005193019957903e+00 + -5.3017286546416393e+00 1.2540707499567152e+00 1.0679036761060101e+00 + -5.4407064015231184e+00 1.1950683238350002e+00 1.0968260939223480e+00 + -5.7029144169981132e+00 9.6238207239485452e-01 1.3480978922547930e+00 + id 12366 + loc 8.4748351573944092e-01 7.6988923549652100e-01 409 + blend 0.0000000000000000e+00 + interp 4.3966758592481087e-01:3.0945562129881138e-01:1.0313455417993842e+00:4.3966318924895165e-01:1.9554471591076625e+00:3.2447877337509901e-01:2.7439058667671494e+00:3.8628205994529724e-01:3.4172872897685949e+00:3.1705061885229174e-01:3.9925711802967725e+00 + CVs 20 + 5.1668072678597188e-01 9.1466739819428627e-02 -2.5908145857759929e-01 + 9.5989123037853052e-01 1.2649013743565746e-01 -4.9558011647969191e-01 + 1.3979781420590580e+00 1.5422524268022675e-01 -7.0992307571146263e-01 + 1.8466724562641366e+00 1.8619631464981812e-01 -9.0374708847778407e-01 + 2.3007168740627311e+00 2.1798847590181047e-01 -1.0800257344645559e+00 + 2.7563307843991307e+00 2.4367355763131737e-01 -1.2435378145860072e+00 + 3.2100907299899104e+00 2.5124756485702360e-01 -1.3974481766219766e+00 + 3.6581285259150871e+00 2.2252306860716686e-01 -1.5438692898595407e+00 + 4.0919931413919244e+00 1.3829272657787861e-01 -1.6897650124793016e+00 + 4.4929057760686169e+00 -1.7938010967748053e-02 -1.8467629167692978e+00 + 4.8408753993545135e+00 -2.5336507348483694e-01 -2.0191643913147543e+00 + 5.1312442534445175e+00 -5.6174432964742316e-01 -2.2007470632242434e+00 + 5.3672853995184262e+00 -9.3146605506235591e-01 -2.3866556115632682e+00 + 5.5444317670031804e+00 -1.3509081577061379e+00 -2.5766170427884836e+00 + 5.6519342032798612e+00 -1.8104886623807950e+00 -2.7639372419513610e+00 + 5.6810126867261825e+00 -2.3019684173059702e+00 -2.9260250493753812e+00 + 5.6351164104372486e+00 -2.8085853838835861e+00 -3.0428962431753632e+00 + 5.5481970092632773e+00 -3.2987499346311617e+00 -3.1283827118390763e+00 + 5.5861249228450163e+00 -3.7546551844408009e+00 -3.2366738692726185e+00 + id 12367 + loc 3.7204638123512268e-01 3.6734366416931152e-01 397 + blend 0.0000000000000000e+00 + interp 4.8692333100212343e-01:3.1281770359407957e-01:2.0452504969445540e-01:3.8532279462269597e-01:1.0033597449709200e+00:3.1182497767523609e-01:2.0021756378100020e+00:3.0273435842543245e-01:2.9981250545443565e+00:4.7115951576347687e-01:3.3008948980070292e+00:4.8691846176881343e-01:3.8424340075402927e+00 + CVs 20 + -3.2774043199693959e-01 3.2626272619514973e-01 -1.1599390506630700e+00 + -6.0277336695574180e-01 4.3894835534849908e-01 -1.8999986427243232e+00 + -8.6047491754532401e-01 4.7421785042715109e-01 -2.5525192858657952e+00 + -1.1107473918948250e+00 4.9028203366946166e-01 -3.2560672866651812e+00 + -1.3457906087266576e+00 4.6815414572781966e-01 -4.0017712002009231e+00 + -1.5592052926687350e+00 3.7759997827596686e-01 -4.7722482384338241e+00 + -1.7462321538643408e+00 1.9216382227665008e-01 -5.5460711795511273e+00 + -1.8864817522248958e+00 -1.0571638936240069e-01 -6.3031390947381913e+00 + -1.9508675563529250e+00 -5.2298728323849675e-01 -7.0182572635633802e+00 + -1.9277672725837824e+00 -1.0531297882035786e+00 -7.6586030804560989e+00 + -1.8293881969545831e+00 -1.6767958193930761e+00 -8.1970972332502292e+00 + -1.6818869352937855e+00 -2.3687200860544846e+00 -8.6237340327123757e+00 + -1.5134613907865466e+00 -3.1056389638923765e+00 -8.9446754489577991e+00 + -1.3524418495286861e+00 -3.8619014333012105e+00 -9.1688633926396683e+00 + -1.2256466680774054e+00 -4.6055679024315310e+00 -9.3033094288388174e+00 + -1.1461520863827785e+00 -5.3031697239874358e+00 -9.3559054578006933e+00 + -1.1090229134464442e+00 -5.9230564272448607e+00 -9.3415596910146892e+00 + -1.1120785808208562e+00 -6.4571061641920355e+00 -9.2892370417062775e+00 + -1.1809078934229063e+00 -6.8997732225101576e+00 -9.3202815744245182e+00 + id 12368 + loc 8.4818452596664429e-01 7.3265391588211060e-01 372 + blend 0.0000000000000000e+00 + interp 5.1487907446124692e-01:3.4706144583371112e-01:2.2486261096579363e-01:3.0786262139387294e-01:9.8271507159018534e-01:3.2806851224526612e-01:1.8877484691529069e+00:5.1487392567050239e-01:2.1254001620920837e+00:4.7064235975415619e-01:2.7744145851632172e+00:2.8194567473218268e-01:3.3963039398420660e+00 + CVs 20 + -4.0321985808062283e-01 4.2467779668662597e-01 -2.9778800284107912e-02 + -7.6831178110697318e-01 6.9809458488179643e-01 -1.7305498544236492e-02 + -1.1184549918701185e+00 8.1357164042024954e-01 3.6106483958990659e-02 + -1.4798994087498778e+00 8.0629857193341015e-01 1.3155272088440872e-01 + -1.8630561921642932e+00 7.4639300478687243e-01 2.7605111443270580e-01 + -2.2857522571755520e+00 7.0583326695385762e-01 4.6315593393432669e-01 + -2.7721718883865258e+00 7.2936833772202492e-01 6.4966709889616392e-01 + -3.3218060411265879e+00 8.4541213224517664e-01 7.7757223344843662e-01 + -3.8829919058667617e+00 1.0720339123909723e+00 8.0470661511785413e-01 + -4.3795651959394775e+00 1.3955419829797306e+00 7.1629045650225065e-01 + -4.7808018958198613e+00 1.7772978900687106e+00 5.2053934216612407e-01 + -5.0990056897606735e+00 2.1730591187145283e+00 2.2794699118704553e-01 + -5.3439196868209979e+00 2.5164406316789432e+00 -1.6584696424995926e-01 + -5.4970109370586266e+00 2.7158008503130597e+00 -6.5940061359578173e-01 + -5.4981942626981386e+00 2.7229204019743660e+00 -1.1812070646844353e+00 + -5.3275128829829379e+00 2.5592782577882613e+00 -1.6438916481529249e+00 + -5.1294617930099644e+00 2.1840517857833115e+00 -2.0272325451826685e+00 + -5.0940790531619982e+00 1.5664317144583670e+00 -2.2871639439799072e+00 + -5.1628070122823209e+00 8.6067208454493516e-01 -2.4730706553163886e+00 + id 12369 + loc 6.7619460821151733e-01 5.9801630675792694e-02 1076 + blend 0.0000000000000000e+00 + interp 4.1882076588072253e-01:3.2201201529115403e-01:2.6752488216214687e-01:3.7636971180623613e-01:9.8944235695757110e-01:3.7582803666834746e-01:1.7704594839874810e+00:4.1881657767306374e-01:2.2629722755995934e+00:2.9422833067895915e-01:3.0448839862807908e+00:3.5700217810929014e-01:3.9443616651511513e+00 + CVs 20 + -2.0090058217883902e-01 3.1161388316627980e-01 2.0524935186135010e-01 + -4.0336307180707653e-01 5.9138992799638346e-01 4.2639079941704999e-01 + -5.9714584930702519e-01 8.3701507023896438e-01 6.6464419763830218e-01 + -7.6879767950057754e-01 1.0496029973166998e+00 9.1942690533999527e-01 + -8.9920162079069743e-01 1.2317177659017435e+00 1.1915195975803727e+00 + -9.7791872647351274e-01 1.3856865430815191e+00 1.4798707723694000e+00 + -1.0193979255310706e+00 1.5170121879412903e+00 1.7827428726223982e+00 + -1.0512099215984039e+00 1.6381470744318325e+00 2.0960186822904223e+00 + -1.0937266420716245e+00 1.7638715086882346e+00 2.4145638042055975e+00 + -1.1666532495237316e+00 1.9080283782090344e+00 2.7334350712879294e+00 + -1.2953247021958667e+00 2.0828468682004235e+00 3.0366366723678930e+00 + -1.5158695978676133e+00 2.3075959739447289e+00 3.3139723288419844e+00 + -1.8687885290893089e+00 2.5077044039224887e+00 3.6180950191494512e+00 + -2.2584385072192350e+00 2.4786780821999033e+00 3.9755842169441502e+00 + -2.5732108958476765e+00 2.1991587228601737e+00 4.3141599500534094e+00 + -2.8952567884820390e+00 1.7523881328496755e+00 4.5792237974585710e+00 + -3.2447174875476046e+00 1.0627507261921789e+00 4.7503295359433109e+00 + -3.1633921686327220e+00 3.6920277859706530e-01 4.8489072283875840e+00 + -2.7291074174403187e+00 2.8215944790247560e-01 5.0004858941854096e+00 + id 12370 + loc 8.0656605958938599e-01 7.0916068553924561e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2454862373607077e-01:4.2454437824983343e-01:2.0494737671739405e-01:3.7116422149503286e-01:9.9606860601532521e-01:2.6187780709203684e-01:1.9888127285588262e+00:4.2154094464821246e-01:2.7707289371612509e+00:2.6606392869830725e-01:3.0371973769293743e+00:2.9109616449367376e-01:3.9502603758438504e+00 + CVs 20 + 4.5952497379836484e-02 4.2204603000704577e-01 -2.1284954211918827e-01 + 9.1523495662406182e-02 8.2046432777303091e-01 -4.1133929786365730e-01 + 1.4728728178269951e-01 1.2003475784558546e+00 -6.0159529725879102e-01 + 2.2452221768257616e-01 1.5666069222352204e+00 -7.9323349706032742e-01 + 3.3661749735402169e-01 1.9140849148569232e+00 -9.9833458632964189e-01 + 4.9031267746793278e-01 2.2224492592161709e+00 -1.2349662862000121e+00 + 6.8199155836335046e-01 2.4638857798780660e+00 -1.5122486391356931e+00 + 9.0152422925310893e-01 2.6251424675149551e+00 -1.8196048281413040e+00 + 1.1399556027721716e+00 2.7118968835372486e+00 -2.1348006200405845e+00 + 1.3885403682489099e+00 2.7364976010920019e+00 -2.4362416142535408e+00 + 1.6352561384545821e+00 2.7060397561070997e+00 -2.7113062394119165e+00 + 1.8668385230508930e+00 2.6192696291698128e+00 -2.9483844994670001e+00 + 2.0919070281515828e+00 2.4842032789729704e+00 -3.1369017866831759e+00 + 2.3591804004231318e+00 2.3261876310991276e+00 -3.2851183374752502e+00 + 2.7169088478440919e+00 2.1458428695303038e+00 -3.4239122017898671e+00 + 3.1716192732137483e+00 1.8833803203437420e+00 -3.5881606097366330e+00 + 3.6958435579108757e+00 1.4689667324383480e+00 -3.8294855594789841e+00 + 4.1794509215851274e+00 9.4970604703687223e-01 -4.2127539386234867e+00 + 4.3021259079346255e+00 7.4396895285054276e-01 -4.5146272383659545e+00 + id 12371 + loc 7.0132565498352051e-01 9.9756634235382080e-01 1084 + blend 0.0000000000000000e+00 + interp 5.0306457202101063e-01:4.4870930308956264e-01:5.3670703174035106e-02:2.8602586422389048e-01:9.5273344206768196e-01:5.0305954137529041e-01:1.3330310888042392e+00:4.6020613621556783e-01:1.9161396927659098e+00:3.3325862122129635e-01:2.2431844270592136e+00:4.7688037166354807e-01:3.0519604532831237e+00:3.6845529746574557e-01:3.5674667281564210e+00 + CVs 20 + -1.3919303193373506e-01 3.0310688687917070e-01 2.0080645631572142e-01 + -3.1861479180109165e-01 5.9096839355135067e-01 3.6610476157081856e-01 + -5.0944706188587496e-01 8.7888258440154021e-01 5.1825931321405205e-01 + -6.9843088608897985e-01 1.1655132225874247e+00 6.5896265674962307e-01 + -8.8981883065751410e-01 1.4418973195174594e+00 7.7284577775181607e-01 + -1.0838404189008382e+00 1.6969453394938918e+00 8.4660069923756209e-01 + -1.2745584278552793e+00 1.9183856525955687e+00 8.7414506896606770e-01 + -1.4498212121907887e+00 2.0959042198521511e+00 8.5826019990400571e-01 + -1.6008041140781657e+00 2.2249803601231060e+00 7.9152672142595459e-01 + -1.7131969062560779e+00 2.2944064036109011e+00 6.4463291493947628e-01 + -1.7559588857237738e+00 2.3016024050984676e+00 4.2731840793545794e-01 + -1.7222889644959172e+00 2.2561433356682676e+00 1.7506293262809547e-01 + -1.6311339968851510e+00 2.1225739439017883e+00 -9.2063767638122851e-02 + -1.4913508602569676e+00 1.8615346139740170e+00 -3.5012521026258603e-01 + -1.2910590480426298e+00 1.5483393581107991e+00 -6.0725325104577665e-01 + -1.0396130425776260e+00 1.3228423723985172e+00 -8.9943945360797917e-01 + -7.9295207285457692e-01 1.2882016579566486e+00 -1.2142788081893603e+00 + -5.8732781401644962e-01 1.4223920867138347e+00 -1.5240355547461868e+00 + -3.1233816411714332e-01 1.5287275931543185e+00 -2.0048366072882553e+00 + id 12372 + loc 6.8777555227279663e-01 2.3186263442039490e-01 413 + blend 0.0000000000000000e+00 + interp 5.0357522108053931e-01:4.6524627912818445e-01:7.9549729165145555e-01:5.0357018532832853e-01:1.0168920984151251e+00:4.5220302882371410e-01:1.4262933430925504e+00:3.0871595292412435e-01:1.9599651215646805e+00:3.7358925476206145e-01:2.3871675377002539e+00:4.0532632615510822e-01:3.0064808023895360e+00 + CVs 20 + -1.2754898201814238e+00 3.2917291749996530e-01 1.4176306773251190e-01 + -2.1744482449456046e+00 4.1702270134687014e-01 2.5819743300256970e-01 + -2.9671981693501150e+00 3.9544489091105106e-01 3.6038571682915010e-01 + -3.7631915329751373e+00 2.8949095297397209e-01 4.6161523641156599e-01 + -4.5466872460674237e+00 9.4700541490021273e-02 5.5979900244055425e-01 + -5.2893661999403285e+00 -1.8019062180660039e-01 6.5440715697147622e-01 + -5.9554429930865371e+00 -5.1993129829033180e-01 7.4327455062833492e-01 + -6.5114458211491852e+00 -9.1223655676704440e-01 8.2110592400952975e-01 + -6.9313826741978577e+00 -1.3366317418919809e+00 8.8933365441215906e-01 + -7.2112076391969380e+00 -1.7481738493828880e+00 9.6257809843300490e-01 + -7.3775004405790154e+00 -2.1038050968403752e+00 1.0568925232383493e+00 + -7.4874938461628364e+00 -2.3880350333103415e+00 1.1727114473894398e+00 + -7.5986329785432396e+00 -2.6178773240438211e+00 1.3031466028667471e+00 + -7.7443446070326134e+00 -2.8191696340845764e+00 1.4395325188266326e+00 + -7.9384875815208149e+00 -3.0177782554336448e+00 1.5684828649196596e+00 + -8.1812446891128285e+00 -3.2472540413172881e+00 1.6791328419706431e+00 + -8.4541745811038336e+00 -3.5366581618787172e+00 1.7623771514881708e+00 + -8.7206591389121275e+00 -3.8821085832810933e+00 1.8020081334905029e+00 + -8.8861230487800782e+00 -4.2550997513609516e+00 1.8042757935418705e+00 + id 12373 + loc 8.3279532194137573e-01 9.9308669567108154e-01 1081 + blend 0.0000000000000000e+00 + interp 3.9206118890336089e-01:3.6073266249903857e-01:2.1678715829106521e-01:3.0962983873122479e-01:1.4649077896240075e+00:2.5265833916763292e-01:2.0285427840411767e+00:3.9205726829147186e-01:2.6294190126769355e+00:2.9010458752625978e-01:3.5006343083148503e+00 + CVs 20 + 1.0323652435147569e-01 4.4859992018956119e-01 3.6157751879673783e-01 + 2.3033987547517779e-01 8.1186067863739453e-01 5.8899405931391036e-01 + 3.7392986655545357e-01 1.1472304354268188e+00 7.7160881869864850e-01 + 5.3310583431688863e-01 1.4753615606375270e+00 9.3893893869367195e-01 + 7.0858546727443084e-01 1.7859665315723610e+00 1.0769175453221227e+00 + 8.9914549907135177e-01 2.0662692199916655e+00 1.1690959864970250e+00 + 1.0993092918883378e+00 2.3004823589176739e+00 1.2004752170153199e+00 + 1.2985692218242346e+00 2.4724420033650603e+00 1.1664676274636645e+00 + 1.4818722830726179e+00 2.5702367301816640e+00 1.0759363711355538e+00 + 1.6332301691368072e+00 2.5940552094363261e+00 9.4986237152998321e-01 + 1.7468650994330241e+00 2.5610949369408909e+00 8.1046932632416124e-01 + 1.8287754802176064e+00 2.4906831606419564e+00 6.6672586016957747e-01 + 1.8850997135609671e+00 2.3930078481600217e+00 5.1871299226086998e-01 + 1.9183514725610715e+00 2.2729507163578671e+00 3.6575779384057439e-01 + 1.9302574457397621e+00 2.1326777040984393e+00 2.0551763818572810e-01 + 1.9258750343894213e+00 1.9672876326410917e+00 2.6990394138489249e-02 + 1.9131560799242913e+00 1.7497605407965171e+00 -1.7167298866450842e-01 + 1.8853660356620321e+00 1.4717154706400066e+00 -3.2084884304971761e-01 + 1.8095305444394820e+00 1.2519563257685815e+00 -3.1114613385160328e-01 + id 12374 + loc 4.4495445489883423e-01 1.5880228579044342e-01 397 + blend 0.0000000000000000e+00 + interp 4.6529403454848539e-01:3.1947963143475705e-01:6.0612033094203888e-01:2.9483655677917175e-01:1.2895617300075186e+00:4.0397636428625128e-01:1.9935073802069232e+00:3.1876864097206292e-01:2.4979918335757656e+00:4.6528938160813993e-01:3.0322940201887993e+00:3.0449474855595793e-01:3.9694692998837788e+00 + CVs 20 + -3.2937242019401330e-01 3.0856401418178109e-01 -1.0096124233866970e+00 + -5.6841840833957091e-01 3.9877055046917642e-01 -1.6591292813084624e+00 + -7.6622590199617047e-01 3.9042852702253483e-01 -2.2364933897348571e+00 + -9.2773409413281127e-01 3.3965055976989778e-01 -2.8601083188303704e+00 + -1.0445148784869107e+00 2.3676149716859149e-01 -3.5161134032535659e+00 + -1.1155937923779122e+00 7.4474518164905523e-02 -4.1859962952455225e+00 + -1.1501326709874973e+00 -1.4718594066015744e-01 -4.8486626032555336e+00 + -1.1602522648312488e+00 -4.2359169249794026e-01 -5.4810565790447923e+00 + -1.1549242837830338e+00 -7.4987399476379979e-01 -6.0653330219706207e+00 + -1.1430424978516989e+00 -1.1249028912988253e+00 -6.5967546153905019e+00 + -1.1342702874466291e+00 -1.5502992248482754e+00 -7.0757551184425971e+00 + -1.1327072600788504e+00 -2.0065059224639636e+00 -7.4844190952996090e+00 + -1.1489004527161817e+00 -2.4603495396193495e+00 -7.8038208815210170e+00 + -1.1896409276468511e+00 -2.8855445331510090e+00 -8.0344983386846316e+00 + -1.2587343399860720e+00 -3.2655738199575413e+00 -8.1852016852009815e+00 + -1.3547484269446708e+00 -3.5806461577968438e+00 -8.2660735480973297e+00 + -1.4733800785856475e+00 -3.8168426719653485e+00 -8.2919511507808341e+00 + -1.6053683155466303e+00 -3.9879524925571510e+00 -8.2729097222532886e+00 + -1.7097744762133160e+00 -4.1534078509103614e+00 -8.1147908997988587e+00 + id 12375 + loc 7.6822990179061890e-01 1.7264769971370697e-01 409 + blend 0.0000000000000000e+00 + interp 5.1200546689420601e-01:3.0996249242497526e-01:8.3684694200319276e-01:2.8597013196693166e-01:1.5405786126844734e+00:2.9771515689956429e-01:2.0506816274409374e+00:2.6515988064583201e-01:2.9299776982498540e+00:4.5146234693071885e-01:3.6057255598753359e+00:5.1200034683953710e-01:3.9851320086764441e+00 + CVs 20 + -2.1339338970587418e-01 -4.2115517489261511e-03 1.4929942123424128e-01 + -4.3707482732423303e-01 -2.5729713799189369e-03 2.9934789354577507e-01 + -6.6795257596840707e-01 4.4381627577864124e-03 4.3437236868945189e-01 + -9.0047154706778088e-01 1.4753870543072423e-02 5.4396329003673172e-01 + -1.1295078886098566e+00 2.6006566819527399e-02 6.2872259719508083e-01 + -1.3499429156290961e+00 3.7471885647639258e-02 6.9149936340255225e-01 + -1.5501422461465297e+00 5.2695271092777496e-02 7.3390319404787685e-01 + -1.7169409876496136e+00 7.8186706622472624e-02 7.5542868680328312e-01 + -1.8506925119428614e+00 1.2092146438549212e-01 7.5066205693208465e-01 + -1.9630621292633788e+00 1.8881599193045995e-01 7.1121210837430671e-01 + -2.0720575706259092e+00 2.8509109104139885e-01 6.3851555064678944e-01 + -2.2026927964330265e+00 3.9165847600159021e-01 5.4958553711883418e-01 + -2.3706595086842750e+00 4.7553182298878871e-01 4.6229980047375940e-01 + -2.5750067550719891e+00 5.1548781458567605e-01 3.8315647371498845e-01 + -2.8026903080463992e+00 5.1076114539101214e-01 3.1676200118886122e-01 + -3.0329481467141597e+00 4.7846136059434619e-01 2.7359061709058208e-01 + -3.2485458463207206e+00 4.2880419122071078e-01 2.5953578327273041e-01 + -3.4368557735045187e+00 3.3185545698183172e-01 2.6381256936659259e-01 + -3.5426739095967354e+00 7.0865078040948992e-02 2.6248831502706516e-01 + id 12376 + loc 2.8498807549476624e-01 6.7320495843887329e-01 372 + blend 0.0000000000000000e+00 + interp 3.5540032911303393e-01:2.9446816743558130e-01:3.1066265326270714e-01:3.4323099313366046e-01:1.2605093137248757e+00:3.2478839149267441e-01:2.0613101476115463e+00:3.0213995885745287e-01:2.9498098522097709e+00:3.5539677510974282e-01:3.9398512749596586e+00 + CVs 20 + -3.7133984084825333e-01 5.2540050829615481e-01 -1.1271566242865994e-01 + -7.2115015557466078e-01 1.0400416888222330e+00 -2.6529698621915609e-01 + -1.0587188052708127e+00 1.5330521104462038e+00 -4.8000038984015986e-01 + -1.3456507675743550e+00 1.9897900522746375e+00 -7.6376676640833052e-01 + -1.4718163837368243e+00 2.3842002535701452e+00 -1.1234416864062449e+00 + -1.3561344437021581e+00 2.6447393877065384e+00 -1.5256267667346992e+00 + -1.0412316536449020e+00 2.7058822007267538e+00 -1.8901873186935214e+00 + -6.0884955452881107e-01 2.5607960037086475e+00 -2.1592964774471319e+00 + -1.2279190624230241e-01 2.2592283947183578e+00 -2.3224301522530344e+00 + 3.8515626713797935e-01 1.8484003898205188e+00 -2.3993820906967644e+00 + 9.0521207944133386e-01 1.3252772393301584e+00 -2.4115539021357715e+00 + 1.4300619141912496e+00 6.7752284936625118e-01 -2.3579077163555668e+00 + 2.0023282913597193e+00 -4.0171824864044803e-03 -2.2268087769651834e+00 + 2.6724434179686525e+00 -5.1593124747195052e-01 -2.0655093078444926e+00 + 3.3297664647501568e+00 -6.7867794132627290e-01 -2.0017995098628907e+00 + 3.8533683052609931e+00 -5.1651936631441830e-01 -2.0753727777767574e+00 + 4.2638087550482950e+00 -1.3139144177653561e-01 -2.2273125843783688e+00 + 4.6111290503016154e+00 3.9011435624805557e-01 -2.3909632958897542e+00 + 5.0805079493895988e+00 1.0606081066301469e+00 -2.6072205492253002e+00 + id 12377 + loc 8.4158796072006226e-01 7.0743459463119507e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3628631384598900e-01:2.8898952602654870e-01:3.3985369942741850e-01:3.3628295098285055e-01:1.2768303485029762e+00:2.9968034374430297e-01:2.0519627372037625e+00:3.0334256815604965e-01:3.1266802037043129e+00 + CVs 20 + -2.0707111410180815e-01 3.0518260987203105e-01 1.5375040243549437e-01 + -4.2323119664881542e-01 6.1879343315469804e-01 2.9327743382835059e-01 + -6.4292311935615420e-01 9.4385303922466068e-01 4.2849986035509635e-01 + -8.7293356152575585e-01 1.2727124964334318e+00 5.5328752502520817e-01 + -1.1295650486896438e+00 1.5893566809059667e+00 6.4749601142010449e-01 + -1.4224443164704696e+00 1.8743717433246236e+00 6.8994303397892009e-01 + -1.7485145210486575e+00 2.1063287344947201e+00 6.6055975578371506e-01 + -2.0867724325052532e+00 2.2600891452515581e+00 5.3934947441542991e-01 + -2.3978736995592254e+00 2.3094825582830580e+00 3.1691709288757708e-01 + -2.6487749732159229e+00 2.2449247930692344e+00 1.3812589538537701e-02 + -2.8320285082482917e+00 2.0710987591460155e+00 -3.2003671355666818e-01 + -2.9611290383217597e+00 1.7948765914520239e+00 -6.0228831250236003e-01 + -3.0631500820686051e+00 1.4433528078059998e+00 -7.5988091657519619e-01 + -3.1427722075637030e+00 1.0333909245797253e+00 -8.5015965030484675e-01 + -3.1592842599873650e+00 5.3374389178014747e-01 -1.0125448598833209e+00 + -3.0701199218486619e+00 6.0106326512208152e-03 -1.3448552032080554e+00 + -2.9035932379420424e+00 -3.8356355802469511e-01 -1.8813058646156613e+00 + -2.7482168387104977e+00 -5.2130547903385804e-01 -2.5197484898128817e+00 + -2.6609995903679944e+00 -6.9490159651943584e-01 -2.9234388556919590e+00 + id 12378 + loc 7.5781494379043579e-01 2.5412985682487488e-01 1075 + blend 0.0000000000000000e+00 + interp 4.9172787177697541e-01:2.8029560546184529e-01:1.9317931290364754e-01:4.8158681156837080e-01:1.0000063245054513e+00:2.5478443388648769e-01:1.6771532308415005e+00:4.9172295449825765e-01:2.1973053040788217e+00:2.9187039816055294e-01:2.9864292956633234e+00:2.8911421749951216e-01:3.6701757328627647e+00 + CVs 20 + -1.4932057746918126e-01 9.2294070185241175e-02 2.0576665269563757e-01 + -2.7572443012479997e-01 2.4916394688803106e-01 4.4579120458726085e-01 + -3.7892674036093649e-01 4.3905426355134569e-01 6.7604460700006674e-01 + -4.6292389393278527e-01 6.1155874328002002e-01 8.6275943443747516e-01 + -5.3318185694941866e-01 7.3009005039876507e-01 1.0044518020727742e+00 + -5.8625411259165983e-01 7.8523612385843544e-01 1.1071724278935655e+00 + -6.0421499134739731e-01 7.8792037324316166e-01 1.1770306484749637e+00 + -6.0591549573379855e-01 7.5643750392659204e-01 1.2425986080576290e+00 + -6.5407686349752758e-01 6.7127710083100078e-01 1.3094697294322506e+00 + -7.7152476900916234e-01 5.0223429049806723e-01 1.3269115796198467e+00 + -9.0954235624835555e-01 2.6424256891529496e-01 1.2565121938897890e+00 + -9.9351581060810157e-01 2.5924081961611889e-03 1.1085182912415164e+00 + -9.9269976751217748e-01 -2.6254888709453073e-01 9.0550098192464135e-01 + -9.7036465903018754e-01 -5.9025281852192801e-01 6.1304070856869664e-01 + -1.0602911973757039e+00 -1.0629348802490572e+00 1.7485945895836405e-01 + -1.4887184643156421e+00 -1.6642344346292883e+00 -4.2057743193291586e-01 + -2.5913623295795207e+00 -2.1194616988674619e+00 -1.0942816288303969e+00 + -4.0682993933378846e+00 -1.9742570170699172e+00 -1.4365532691118164e+00 + -4.5292221231677976e+00 -2.0256402279891468e+00 -1.5845519154689218e+00 + id 12379 + loc 4.1189220547676086e-01 1.4533185958862305e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0508060459809614e-01:2.9440635153935835e-01:1.4331412107532215e-01:3.1888289028831229e-01:1.0459393586910473e+00:2.9835099828947859e-01:2.0625807076593929e+00:3.0734714553558373e-01:2.9892583412417171e+00:4.0507655379205015e-01:3.5134027435800932e+00 + CVs 20 + -4.2707750237949718e-02 3.8971180515989529e-01 -2.5503813852884583e-01 + -1.2814300876408444e-01 7.6545419335979503e-01 -5.2972079793835969e-01 + -2.5362206264607057e-01 1.1287375236353470e+00 -8.2066748919716648e-01 + -4.3192787917491154e-01 1.4802247642388133e+00 -1.1179987375443459e+00 + -6.6925280693429734e-01 1.8065747158001393e+00 -1.4089728468323606e+00 + -9.4714024006993935e-01 2.0862461145335955e+00 -1.6925872214214552e+00 + -1.2400632928690574e+00 2.3078943386693718e+00 -1.9795123245951691e+00 + -1.5325878678083806e+00 2.4696490743922173e+00 -2.2780372722153572e+00 + -1.8088432692323049e+00 2.5628548525978441e+00 -2.5886318484242716e+00 + -2.0423185267490762e+00 2.5680355676245359e+00 -2.9038330267381189e+00 + -2.2271412669852091e+00 2.4672316552108682e+00 -3.2124804998521337e+00 + -2.4065249203908534e+00 2.2259621148544739e+00 -3.5060421333172114e+00 + -2.5894367162565839e+00 1.8019849262278347e+00 -3.7272373045343108e+00 + -2.7183232162206221e+00 1.2754779769329279e+00 -3.7931947732721811e+00 + -2.7755000493726554e+00 7.6256842888981391e-01 -3.7088236071987537e+00 + -2.7775439137576474e+00 2.6752710461365337e-01 -3.4520479352257789e+00 + -2.7136063952217340e+00 -1.5193305336529561e-01 -2.8780164293392603e+00 + -2.6170589716627410e+00 -1.7391981021742953e-01 -2.1370129379526128e+00 + -2.5928027486633249e+00 -8.4377010921402040e-02 -1.8609492622269890e+00 + id 12380 + loc 5.1570242643356323e-01 5.6278777122497559e-01 403 + blend 0.0000000000000000e+00 + interp 3.9656842077594584e-01:3.4051933594696432e-01:7.1470981027581204e-01:3.9656445509173810e-01:1.3555331826043873e+00:3.1576768094330737e-01:2.2190771217512166e+00:3.1079356036630523e-01:2.9610090001208738e+00:2.9292170499312731e-01:3.6595826384210381e+00 + CVs 20 + 2.8876436128099148e-02 1.3537087034198181e-01 -2.3520894144419477e-01 + 3.9340597354483253e-02 2.8886874049314037e-01 -4.5435946747612038e-01 + 2.0454014114528574e-02 4.4213239299377982e-01 -6.7168651969502713e-01 + -3.7323055000881011e-02 5.9253937234330412e-01 -8.9282417994431018e-01 + -1.3965442056356747e-01 7.3408026982392149e-01 -1.1129978892211021e+00 + -2.9068537902765962e-01 8.6228337827211443e-01 -1.3243928891725467e+00 + -4.8986842267927799e-01 9.7234367533009181e-01 -1.5170497198590582e+00 + -7.2930821819533964e-01 1.0596307401658178e+00 -1.6820323837979325e+00 + -9.9726533534604234e-01 1.1216728049533842e+00 -1.8135381841530671e+00 + -1.2824596034201889e+00 1.1554656024861136e+00 -1.9084720345810309e+00 + -1.5741789725309123e+00 1.1569045042045978e+00 -1.9652726205428714e+00 + -1.8612445154680943e+00 1.1244400015525529e+00 -1.9840567372752171e+00 + -2.1334607250953641e+00 1.0620092006883100e+00 -1.9664472093301724e+00 + -2.3840028967664288e+00 9.7775843104352012e-01 -1.9136289759085994e+00 + -2.6096888660444071e+00 8.8156146467680507e-01 -1.8258002546456220e+00 + -2.8093251160552963e+00 7.8422900350808344e-01 -1.7043889698352772e+00 + -2.9794368008822874e+00 6.9155229465656698e-01 -1.5576614770953974e+00 + -3.1185991426573709e+00 6.0715459635128077e-01 -1.4028189156295685e+00 + -3.2805959417716499e+00 6.1043215162069631e-01 -1.3408590451600841e+00 + id 12381 + loc 7.1631664037704468e-01 2.6183226704597473e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0012729185502588e-01:3.3977681270852222e-01:2.9531856519547894e-01:3.1130482288407402e-01:1.0044914295068090e+00:3.3108834086290251e-01:2.0061406888490025e+00:3.2122424274159311e-01:2.7065076750778441e+00:3.0738985374805922e-01:3.2218757319686255e+00:4.0012329058210733e-01:3.9712468149803009e+00 + CVs 20 + -1.3177915506242299e-01 3.7355096596976589e-01 -3.2652793254377077e-01 + -2.4886060066200055e-01 6.4730592586313729e-01 -5.1606713969248674e-01 + -3.6820888510400296e-01 8.9771878191065668e-01 -6.7730553296272578e-01 + -4.9305335146116325e-01 1.1465750364312957e+00 -8.5344135190204784e-01 + -6.2598647711544342e-01 1.3876822645221898e+00 -1.0345563861115323e+00 + -7.6886234806660436e-01 1.6132387898603926e+00 -1.2105039772337451e+00 + -9.2401104070170170e-01 1.8157939986844003e+00 -1.3709158159697821e+00 + -1.0959247614242333e+00 1.9907055873452673e+00 -1.5078610350052470e+00 + -1.2922978455614291e+00 2.1344429731849401e+00 -1.6155966577615839e+00 + -1.5198194702476922e+00 2.2366563527683834e+00 -1.6865273644131640e+00 + -1.7727750137504095e+00 2.2800251169016388e+00 -1.7156500524504268e+00 + -2.0350024009817838e+00 2.2541584845059650e+00 -1.7090406856205538e+00 + -2.2911273031041621e+00 2.1613354214339551e+00 -1.6806824656984269e+00 + -2.5281901318208879e+00 2.0140361726424798e+00 -1.6471526696381154e+00 + -2.7284079874990823e+00 1.8454146457824163e+00 -1.6273752627350071e+00 + -2.8626438890794761e+00 1.7403916249045115e+00 -1.6359792061134224e+00 + -2.9222635918313680e+00 1.7937059113267266e+00 -1.6378820545148627e+00 + -2.9658480272990801e+00 1.8785200511255558e+00 -1.6262543171084911e+00 + -2.9994384013020792e+00 1.6572209687935739e+00 -1.8928458847921874e+00 + id 12382 + loc 4.8819813132286072e-01 3.1485441327095032e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5390789042644714e-01:3.2354953170733652e-01:9.0275078949056531e-01:2.7776279881717353e-01:1.9245569735353785e+00:3.1518415876293732e-01:2.8320471059183556e+00:4.5390335134754289e-01:3.3174248338531580e+00:2.7006376107993607e-01:3.9665645184279805e+00 + CVs 20 + 3.8619602778328643e-01 4.3813373625351815e-01 2.1738571317301386e-01 + 6.9520002240462686e-01 8.3269277607153458e-01 4.4345309574612352e-01 + 9.6546267097943483e-01 1.1995654221900205e+00 7.1283506261622331e-01 + 1.1909554445031920e+00 1.5457473498531733e+00 1.0586382765620765e+00 + 1.3414666393899000e+00 1.8540262285938638e+00 1.4912941039147014e+00 + 1.3899506823981060e+00 2.0996472466844818e+00 2.0010010355424979e+00 + 1.3193654114028850e+00 2.2571490037005635e+00 2.5578103157941934e+00 + 1.1294408753027623e+00 2.3075578196446078e+00 3.1178122086657858e+00 + 8.4588037003199334e-01 2.2423534871371347e+00 3.6324804773397772e+00 + 5.2433445351007457e-01 2.0694192856211089e+00 4.0656687706669237e+00 + 2.2107131301417376e-01 1.8076877866178287e+00 4.4131007831843547e+00 + -2.8413632954989054e-02 1.4730379856518911e+00 4.6893808935170815e+00 + -2.0000388997184737e-01 1.0810394469974374e+00 4.9096159303905660e+00 + -2.5973209534653663e-01 6.6357637248249124e-01 5.0886575795946900e+00 + -1.7724180088375416e-01 2.7723352734066081e-01 5.2470480230193148e+00 + 1.9303371308409534e-02 -1.0538162221424785e-02 5.4256873276943400e+00 + 2.7065042952130702e-01 -1.5870181073764805e-01 5.6748027201207885e+00 + 5.4250131941868962e-01 -2.4318983070092237e-01 6.0042028076339262e+00 + 8.1779212971473947e-01 -6.2596915367447692e-01 6.4055578052163842e+00 + id 12383 + loc 9.1347289085388184e-01 4.7603818774223328e-01 1048 + blend 0.0000000000000000e+00 + interp 3.3947399761505370e-01:2.5662103049883445e-01:5.0510250489529929e-01:2.5578540083305212e-01:1.0661415057423862e+00:3.3947060287507758e-01:1.6598396346616431e+00:2.4467772283708861e-01:2.0863511872992269e+00:2.2543169580007230e-01:2.9959985151010109e+00:2.3238603194840710e-01:3.7132652915557292e+00 + CVs 20 + -1.2024876133640117e-01 4.8845956273561847e-01 4.2797366566369566e-01 + -2.4873910639636154e-01 1.0091344862002238e+00 8.3797786019195697e-01 + -4.3153911531448186e-01 1.5594572507106115e+00 1.1983510489039584e+00 + -7.1575796785727885e-01 2.1198146650657810e+00 1.4701359766901074e+00 + -1.1300296606838729e+00 2.6431583115072943e+00 1.6207765579866400e+00 + -1.6684866377620071e+00 3.0709112451044343e+00 1.6534529851627080e+00 + -2.3041778708356229e+00 3.3470786155305121e+00 1.5934036933168179e+00 + -3.0068054338962802e+00 3.4311919589927129e+00 1.4729204342131119e+00 + -3.7424682516199597e+00 3.3009615348671559e+00 1.3115668675757952e+00 + -4.4542529787111720e+00 2.9492718446016064e+00 1.1057519830783831e+00 + -5.0526543008136375e+00 2.3977153744740907e+00 8.4240383513575690e-01 + -5.4442651515166354e+00 1.7347494812597168e+00 5.2870764122623259e-01 + -5.6081739935010093e+00 1.0647617141891301e+00 1.9777852410744190e-01 + -5.5808423863476264e+00 4.3575084237721290e-01 -1.3616931090821177e-01 + -5.3777591159779989e+00 -1.2048818854526910e-01 -5.0671606174330597e-01 + -4.9993267173140588e+00 -5.3727113283492567e-01 -9.5362929875370683e-01 + -4.4487377386463516e+00 -7.8921096253191092e-01 -1.5414182481320369e+00 + -3.5788297649588245e+00 -7.1713627534603930e-01 -2.4457852829662432e+00 + -3.2045240783195208e+00 -4.3897123566119833e-01 -2.4248889451813413e+00 + id 12384 + loc 9.0335297584533691e-01 1.0226732492446899e-01 411 + blend 0.0000000000000000e+00 + interp 5.2973292308968090e-01:3.3830835178225832e-01:9.2573836625021966e-01:4.5809816801006142e-01:1.2557506328216057e+00:3.8138518717836278e-01:1.8983057787426776e+00:5.2972762576045007e-01:2.2098293596408278e+00:3.9215188116657002e-01:2.9484190408822819e+00:4.4877804527025678e-01:3.2616867327930170e+00:3.5605793708919575e-01:3.9948079328774728e+00 + CVs 20 + -4.8062742353491267e-01 3.4573980583774006e-02 2.3746735833064919e-01 + -8.3237004348742127e-01 -1.7461684321321280e-02 4.4446373837162134e-01 + -1.1828585901367610e+00 -9.8900685778284869e-02 6.3841804787031109e-01 + -1.5714596044618578e+00 -1.8158641518212038e-01 8.0549702833003467e-01 + -1.9965054713871595e+00 -2.7179093212671346e-01 9.2969877164379877e-01 + -2.4511546212195507e+00 -3.7598597865946004e-01 1.0037180714057392e+00 + -2.9210271461424639e+00 -4.9895464660197186e-01 1.0311803546545890e+00 + -3.3860669600439679e+00 -6.4755670438141344e-01 1.0204338228113854e+00 + -3.8278429460966614e+00 -8.3204518586030263e-01 9.8202485009103668e-01 + -4.2290025380463945e+00 -1.0617722414100568e+00 9.3345736618366859e-01 + -4.5729392531455559e+00 -1.3406237601128406e+00 8.9326282249348921e-01 + -4.8564040533788244e+00 -1.6638866104585703e+00 8.6479128411242712e-01 + -5.0928544921259631e+00 -2.0208016609594219e+00 8.3878626221941155e-01 + -5.2957313217887769e+00 -2.4006852865969019e+00 8.1261063312528892e-01 + -5.4642054751793072e+00 -2.7904048185438137e+00 7.9110452634178463e-01 + -5.5897811290239225e+00 -3.1684570353564987e+00 7.6770063411871603e-01 + -5.6739403931684453e+00 -3.5183186720545261e+00 7.3348367234446310e-01 + -5.7411128744639850e+00 -3.8536275878728765e+00 7.0382175424582383e-01 + -5.9181396202653254e+00 -4.2589925402546065e+00 7.3717567498433367e-01 + id 12385 + loc 3.3994612749665976e-03 6.0764050483703613e-01 1076 + blend 0.0000000000000000e+00 + interp 4.5106084928192841e-01:3.4215766981199253e-01:4.8828267179603813e-01:4.4680257450042904e-01:9.9205442993059234e-01:2.9005810719521780e-01:1.5068777243354217e+00:3.3510558058687373e-01:2.0059397987951368e+00:4.5105633867343559e-01:2.9392565607379311e+00:3.0754626035053823e-01:3.5852688210051786e+00 + CVs 20 + 1.6169824304711974e-01 2.5652938893024529e-01 -1.4667789307436757e-01 + 3.0205235213214610e-01 5.3258787429930254e-01 -2.7187446751645605e-01 + 4.3285841050027141e-01 8.1278887752597084e-01 -4.0380223265700776e-01 + 5.6239455841004471e-01 1.0840682289553238e+00 -5.5892154713239850e-01 + 6.9867205021945866e-01 1.3466094889913141e+00 -7.4215343119296429e-01 + 8.5085624163713813e-01 1.5981919637055233e+00 -9.6032802362280290e-01 + 1.0293653131070313e+00 1.8320990041451430e+00 -1.2195688257865958e+00 + 1.2440636314412505e+00 2.0385706869984022e+00 -1.5258135438087579e+00 + 1.4964815908121401e+00 2.2039792599650272e+00 -1.8903833834484129e+00 + 1.7727160002313083e+00 2.3079630473891672e+00 -2.3276557795849726e+00 + 2.0462208736676257e+00 2.3260362232801213e+00 -2.8436106418126115e+00 + 2.2773073223393703e+00 2.2344743303850176e+00 -3.4137369516019529e+00 + 2.4347726986024512e+00 2.0356737738488153e+00 -3.9516892279898554e+00 + 2.5478526203115526e+00 1.7874286214833206e+00 -4.3051701419921118e+00 + 2.6866857369821564e+00 1.5549169086020171e+00 -4.2912077359240817e+00 + 2.8350917283612995e+00 1.2456299887186080e+00 -3.8816993216350260e+00 + 2.8890326409579763e+00 6.7404268144157864e-01 -3.3305806285354342e+00 + 2.6947356539837157e+00 -5.2461509524547512e-01 -2.8639066646234284e+00 + 2.8250888193144230e+00 -3.9290077644347954e-01 -2.9256599201590525e+00 + id 12386 + loc 1.5814173221588135e-01 1.9657792150974274e-01 1085 + blend 0.0000000000000000e+00 + interp 4.5059152261973578e-01:2.9698515154589494e-01:1.9613876189194412e-02:4.5058701670450962e-01:5.5828317171222219e-01:2.8120916187354200e-01:1.1931424705111642e+00:2.9960941509856354e-01:2.0004411505840825e+00:3.0403448084116624e-01:2.7065504973316501e+00:2.4799240812951193e-01:3.1812337129118924e+00 + CVs 20 + 3.9761584187243110e-01 3.9889730900486764e-01 2.6305452352782638e-01 + 6.5974390282405670e-01 7.6021686087689100e-01 4.9790899160203950e-01 + 8.6101242266540057e-01 1.1136752796089417e+00 7.4330144981706503e-01 + 1.0253097075912869e+00 1.4702904458639479e+00 1.0247918112750727e+00 + 1.1356712489405842e+00 1.8145277249710956e+00 1.3526233287622866e+00 + 1.1752282845001738e+00 2.1264369621043504e+00 1.7271972712082100e+00 + 1.1302245723751754e+00 2.3841651886730979e+00 2.1364672285185802e+00 + 9.9447957281360422e-01 2.5685235012641741e+00 2.5575095686365330e+00 + 7.7239597987262520e-01 2.6661124783405219e+00 2.9657519882887211e+00 + 4.7903507913121723e-01 2.6675210305135924e+00 3.3454448226470967e+00 + 1.3896665827093047e-01 2.5650404706315615e+00 3.6916272646624848e+00 + -2.1773970763099171e-01 2.3530754147319799e+00 4.0037906901524076e+00 + -5.5936995447836879e-01 2.0298635237975438e+00 4.2813746580988887e+00 + -8.5284742277069059e-01 1.5975901373005614e+00 4.5276766259303418e+00 + -1.0598180147624683e+00 1.0637905870675244e+00 4.7537400793112754e+00 + -1.1433555026454463e+00 4.8529826696571210e-01 4.9608367443399697e+00 + -1.1119229769064267e+00 -5.8311729650108779e-02 5.1524451671000753e+00 + -1.0025168671542122e+00 -5.4382275511183842e-01 5.3493349123065910e+00 + -9.2407814324058268e-01 -8.8835594625613823e-01 5.4636886682267809e+00 + id 12387 + loc 5.0390630960464478e-01 7.9066105186939240e-02 1048 + blend 0.0000000000000000e+00 + interp 4.5202316164998829e-01:2.7119502538580442e-01:6.0302160924314641e-01:4.5201864141837184e-01:1.0046918518425791e+00:1.5963063545844658e-01:2.0259664537148474e+00:2.7923533483247359e-01:3.0413592792959578e+00:2.3953954312161499e-01:3.9604391956538683e+00 + CVs 20 + -5.4295850773445814e-02 4.1459689893359392e-01 2.9361791604964904e-01 + -1.1357062810416790e-01 8.1054272148262374e-01 5.5656750047034820e-01 + -1.9715289913197648e-01 1.1964867564555679e+00 7.7694838362599128e-01 + -3.2461412310511217e-01 1.5780191608956970e+00 9.5175959657721909e-01 + -5.0617562218111445e-01 1.9419498739193877e+00 1.1004321950481382e+00 + -7.6355839877749176e-01 2.2834713496150147e+00 1.3209557962026843e+00 + -1.1345980056293086e+00 2.6303946563222071e+00 1.3204224341578255e+00 + -1.6041766878714292e+00 2.8585861935728549e+00 1.4629229145629628e+00 + -1.9622564809066785e+00 2.7965930978319351e+00 1.8942133938412804e+00 + -2.2448750800354191e+00 2.5451992847990552e+00 2.3100302491120011e+00 + -2.4492502899568875e+00 2.2059497501028114e+00 2.6330022536012399e+00 + -2.5939916325462677e+00 1.9205828358891814e+00 2.7904043385548229e+00 + -2.6814332318258063e+00 1.7651585141103725e+00 2.6905698813123919e+00 + -2.8200194676596366e+00 1.6059112852905553e+00 2.4611858497896244e+00 + -3.0747721269970962e+00 1.4944056322488943e+00 2.5484206962772991e+00 + -3.3281731610939431e+00 1.5249706927847102e+00 2.9953395259728643e+00 + -3.5322761000922407e+00 1.5907090015608385e+00 3.6780045219632509e+00 + -3.7120879324396339e+00 1.5267673875105383e+00 4.3778664012804054e+00 + -3.9337486934411863e+00 1.2362818409750451e+00 4.6981403693740758e+00 + id 12388 + loc 1.7517688870429993e-01 4.2778322100639343e-01 409 + blend 0.0000000000000000e+00 + interp 4.7925660696109873e-01:4.3309306958989446e-01:8.2730571066498171e-02:4.0929116345374383e-01:8.4561466404233676e-01:4.7925181439502912e-01:1.1832137576414774e+00:4.3605783280164617e-01:1.7637669180490196e+00:3.6229027925861418e-01:2.0359056555944277e+00:2.9389483993668514e-01:2.6506459661891508e+00:3.9111132976704011e-01:3.0015399550641835e+00:2.4839555685852605e-01:3.8065985963436466e+00 + CVs 20 + -2.4398321596579614e-01 2.3916167863529761e-01 -4.9354155030851460e-01 + -4.7174735216789243e-01 4.6022820728410851e-01 -9.2989921335115455e-01 + -7.1617493591945625e-01 6.8751474952824299e-01 -1.3656794678363746e+00 + -1.0138963554242895e+00 9.1045343668105239e-01 -1.8104519108403776e+00 + -1.3916402514175215e+00 1.0936434078585366e+00 -2.2335443767702126e+00 + -1.8548115956054521e+00 1.2053551521592678e+00 -2.6024536364615845e+00 + -2.3861653484510015e+00 1.2246782833817655e+00 -2.9044688218327344e+00 + -2.9555509107790376e+00 1.1381481048174933e+00 -3.1527859528733679e+00 + -3.5246109594435922e+00 9.3744766606635266e-01 -3.3695097598999340e+00 + -4.0515362273301170e+00 6.2051263863455031e-01 -3.5679837367066605e+00 + -4.5003594673320766e+00 2.1816193430488728e-01 -3.7465474035348403e+00 + -4.8729593490916967e+00 -1.7854130996179607e-01 -3.8969129147749486e+00 + -5.1923764215067152e+00 -4.7863927763967107e-01 -4.0147089095499506e+00 + -5.4526813084303569e+00 -6.5815953409852179e-01 -4.1088210039628148e+00 + -5.6437780366840089e+00 -7.6036139176356188e-01 -4.2054730118008443e+00 + -5.8175312672703594e+00 -8.6217113802207357e-01 -4.3296198046535093e+00 + -6.0669519712886020e+00 -1.0013938145910992e+00 -4.4991038285527596e+00 + -6.4181602821646075e+00 -1.1715151182684642e+00 -4.7281104034798886e+00 + -6.8213497167947557e+00 -1.3629591343248908e+00 -5.0642591316964864e+00 + id 12389 + loc 7.7946908771991730e-02 4.8218289017677307e-01 1080 + blend 0.0000000000000000e+00 + interp 3.4274683032627928e-01:3.0791700106382214e-01:1.0474891305376488e-03:3.0075831574315987e-01:7.8630531314835350e-01:3.4274340285797605e-01:2.4731761599692854e+00:3.1458286934745860e-01:3.2122632039113737e+00 + CVs 20 + 2.5052917292337262e-01 2.3873132590642809e-01 2.4616698530775563e-01 + 3.1045819922921436e-01 3.6454905289341066e-01 3.8874791191393410e-01 + 3.1051699989640547e-01 4.5738661809326003e-01 5.1935629576954212e-01 + 3.1557055704551074e-01 5.3361168053904728e-01 6.6138299398206113e-01 + 3.2430340982493622e-01 5.9154873493469928e-01 8.1457424783597876e-01 + 3.3655623502569154e-01 6.2945841176498085e-01 9.8063794013455940e-01 + 3.5296179646398429e-01 6.4471166174256456e-01 1.1626669414021873e+00 + 3.7522581180756631e-01 6.3392240833982361e-01 1.3636005453141571e+00 + 4.0665191414747137e-01 5.9373466931501562e-01 1.5851205327949514e+00 + 4.5191114860619158e-01 5.2234560417730802e-01 1.8272284210476375e+00 + 5.1682151067602899e-01 4.2120701467523736e-01 2.0875533352878302e+00 + 6.0637063324152041e-01 2.9384602301025564e-01 2.3625166597438310e+00 + 7.2095730975689098e-01 1.3927913095284117e-01 2.6517446307497718e+00 + 8.5737591202737073e-01 -4.8451797196525426e-02 2.9596439307180145e+00 + 1.0152272695579294e+00 -2.6308569143845034e-01 3.2888633323101129e+00 + 1.1972177267711128e+00 -4.7753997017938232e-01 3.6322840639191054e+00 + 1.4023190431499857e+00 -6.6473594508445843e-01 3.9742488531878792e+00 + 1.6256251172509013e+00 -8.1368170896371383e-01 4.3004309715840376e+00 + 1.8689337802237458e+00 -9.1172768785572522e-01 4.5990489698405392e+00 + id 12390 + loc 4.9579057097434998e-01 1.6963320970535278e-01 372 + blend 0.0000000000000000e+00 + interp 4.0946583459454250e-01:4.0407701587714240e-01:4.0655068201870259e-03:3.9954058207880405e-01:5.9586145057831286e-01:3.3523357206752502e-01:1.0201139404537145e+00:2.6518213039236682e-01:1.8994307354659488e+00:2.8363857204294385e-01:2.9025280686019723e+00:4.0946173993619656e-01:3.3018655450228325e+00 + CVs 20 + -4.8372325997340419e-02 3.8527491019777316e-01 5.7659412961185130e-01 + -8.6907450155968291e-02 6.8046383677251188e-01 1.1125200931821264e+00 + -1.2467008638395029e-01 8.8460801649596188e-01 1.6788888729635281e+00 + -1.9276640942733198e-01 1.0216821324642078e+00 2.2298240410242096e+00 + -2.8761095713194518e-01 1.1140700785588855e+00 2.6208299240630129e+00 + -3.4241255607526860e-01 1.1636076732963829e+00 2.8360611531397897e+00 + -4.7292461929700091e-01 1.2337578397408961e+00 2.9338910471856465e+00 + -7.6156217902239864e-01 1.2782297635195856e+00 2.7984268954140727e+00 + -1.1427721272706255e+00 1.2137025801498733e+00 2.4173314035699005e+00 + -1.5676737894025239e+00 9.8284008920318078e-01 1.8559018144338399e+00 + -1.9953261286210624e+00 5.5423093092474196e-01 1.1847451411258718e+00 + -2.3708946841344227e+00 -1.3993533974803463e-02 4.2547361531525169e-01 + -2.6531944940227370e+00 -5.1865212089057955e-01 -4.3625593784014977e-01 + -2.8636861822540283e+00 -6.5897755386980639e-01 -1.3007192108876338e+00 + -3.0219755298544939e+00 -3.7516855140510996e-01 -1.9136517948590237e+00 + -3.0547879284199642e+00 1.0121418574355767e-01 -2.3091313342987165e+00 + -2.9354592219936468e+00 7.0120228921369776e-01 -2.6536630429674437e+00 + -2.8047655408109877e+00 1.4351548153745504e+00 -3.0116032443836325e+00 + -2.8237680985854903e+00 2.3294665470420184e+00 -3.5220221589186105e+00 + id 12391 + loc 9.1891449689865112e-01 9.0416342020034790e-01 1082 + blend 0.0000000000000000e+00 + interp 4.7460784073926721e-01:4.7460309466085981e-01:1.6271628489050727e-10:4.3570325749585193e-01:1.5252700413619791e+00:3.9160069121545465e-01:1.5867233968451271e+00:3.0023951074228955e-01:2.0046252939965994e+00:2.6000541130097610e-01:2.7276187193803030e+00:3.1833386614872911e-01:3.2015637810753619e+00 + CVs 20 + -1.0551810403188409e-01 2.9989287816935783e-01 3.7015086086715876e-01 + -1.7293296083451096e-01 4.8470714949635274e-01 5.4619286017084179e-01 + -2.3701754844395082e-01 6.1905562139555426e-01 6.6105450738063698e-01 + -3.1722475552737250e-01 7.4230853072542802e-01 7.9281883884941151e-01 + -4.1962690183552237e-01 8.5226215178822229e-01 9.3928406770062733e-01 + -5.5062569141468531e-01 9.4494930613778094e-01 1.0986627316449245e+00 + -7.1468410875259458e-01 1.0146824289012628e+00 1.2695124802080775e+00 + -9.1258469652819552e-01 1.0555592370862676e+00 1.4513240616114809e+00 + -1.1420677064344500e+00 1.0630531978613456e+00 1.6452113093186502e+00 + -1.3990586020080200e+00 1.0343183183455655e+00 1.8533580585459242e+00 + -1.6788813829535585e+00 9.6717974902375436e-01 2.0778373300775246e+00 + -1.9766470261140807e+00 8.5854691353449020e-01 2.3190303067572455e+00 + -2.2835533526298204e+00 7.0690518118726642e-01 2.5750360199824964e+00 + -2.5850039366777176e+00 5.2251351577161276e-01 2.8442499047306189e+00 + -2.8679750948226217e+00 3.3113045078561154e-01 3.1277851787942303e+00 + -3.1249317828254535e+00 1.5745239378506870e-01 3.4273412652355422e+00 + -3.3507338275512186e+00 1.4022054719726285e-02 3.7407212032405694e+00 + -3.5493115865045324e+00 -9.5491030635653784e-02 4.0626227107755266e+00 + -3.8277447059532950e+00 -2.5465604537212339e-01 4.3794960180910270e+00 + id 12392 + loc 8.7517148256301880e-01 9.7464197874069214e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9874974968232466e-01:2.7893752854642889e-01:6.3017588379790046e-01:4.7688037166354807e-01:1.0505531757303501e+00:4.9874476218482788e-01:1.6356342739419789e+00:3.0985472364706884e-01:2.2007289173110207e+00:3.0320733662090454e-01:3.0278915302013161e+00:3.2528146363695470e-01:3.9023787725278765e+00 + CVs 20 + -1.6021489741580805e-01 2.1077216236960522e-01 1.6966297091977345e-01 + -3.4408864907852699e-01 4.1914973620977453e-01 3.3515513819861542e-01 + -5.2486127250526782e-01 6.3457332088127438e-01 5.0755697619362761e-01 + -6.8753089599586892e-01 8.6043534379996234e-01 6.9127307507861246e-01 + -8.4497841352015357e-01 1.1020904184161757e+00 8.8147248947244294e-01 + -1.0198989800934284e+00 1.3689563359690153e+00 1.0714439230519450e+00 + -1.2520321204871618e+00 1.6774308805400995e+00 1.2476179137770520e+00 + -1.6010956611185208e+00 2.0390839057381904e+00 1.3572863265052191e+00 + -2.0679177172398551e+00 2.3796385941851601e+00 1.2819020743782255e+00 + -2.5178860139712729e+00 2.5718258394006965e+00 1.0002940315280906e+00 + -2.8496092774920201e+00 2.6253294476897180e+00 6.2501579396884377e-01 + -3.0577947893200177e+00 2.6229445072921456e+00 2.4289572827163486e-01 + -3.1906305831677524e+00 2.5317456979021866e+00 -1.1510258104339055e-01 + -3.2931935397487795e+00 2.1925030683185067e+00 -3.6780737654679185e-01 + -3.3288296585145529e+00 1.5855420573106636e+00 -4.8610466942154518e-01 + -3.2139733154664598e+00 8.3201301218777468e-01 -5.9489981491927224e-01 + -2.9284862024903995e+00 1.0660199979104401e-01 -8.4424462524972177e-01 + -2.5583177115851727e+00 -3.7691148679550146e-01 -1.2553519832737978e+00 + -2.2346349794862821e+00 -4.9327864375815655e-01 -1.6474779004953470e+00 + id 12393 + loc 5.9999543428421021e-01 9.4366759061813354e-01 1075 + blend 0.0000000000000000e+00 + interp 5.7414791497916284e-01:3.6556439828616388e-01:4.8116830100877084e-01:3.0456732186685170e-01:1.0373026274670407e+00:2.9012406363407428e-01:1.9936770350052777e+00:5.4033034637643462e-01:2.3522008655558628e+00:5.7414217350001306e-01:3.0156917673594426e+00:2.6920282450742239e-01:3.8919987369175884e+00 + CVs 20 + 1.5850013657512302e-01 2.0985350025076391e-01 -2.4813956951030169e-01 + 2.9019496712118520e-01 4.1598215400796085e-01 -4.8505882927769139e-01 + 4.1305885719369662e-01 6.1147538137141222e-01 -7.2002080155643577e-01 + 5.3307832683903911e-01 7.9371612042437611e-01 -9.5339141422588636e-01 + 6.4889799063334697e-01 9.6583159768922178e-01 -1.1821301870631169e+00 + 7.5953108449216988e-01 1.1321777548089564e+00 -1.4095502819252492e+00 + 8.6264019508967671e-01 1.2972200130757541e+00 -1.6464295365414132e+00 + 9.5613199162155293e-01 1.4639104589454881e+00 -1.9013056858369350e+00 + 1.0425333657457327e+00 1.6312592665421140e+00 -2.1744622299540612e+00 + 1.1280338425017860e+00 1.7957403325261381e+00 -2.4623347381495808e+00 + 1.2202990852782705e+00 1.9518045671931921e+00 -2.7691868410321376e+00 + 1.3272753730061106e+00 2.0852941981546183e+00 -3.1054524056893440e+00 + 1.4522694247985677e+00 2.1733703752022926e+00 -3.4793424459161666e+00 + 1.5898133817457671e+00 2.1876108212127336e+00 -3.8895081508111229e+00 + 1.7350483846388389e+00 2.1085290990025380e+00 -4.3213068291031718e+00 + 1.8899947549218998e+00 1.9342661216678012e+00 -4.7551544629005607e+00 + 2.0358852039069317e+00 1.6692818583397999e+00 -5.1772595507345791e+00 + 2.1033156187480557e+00 1.3304552882045355e+00 -5.5738890428416692e+00 + 2.0118666180570224e+00 1.0171042978162728e+00 -5.8893838370088885e+00 + id 12394 + loc 7.6661658287048340e-01 5.0151622295379639e-01 416 + blend 0.0000000000000000e+00 + interp 3.7960868024466887e-01:2.6823970511022011e-01:2.8392786320586860e-01:3.3600646490600355e-01:1.3719316746937567e+00:2.9604437752314483e-01:2.2117826718204983e+00:3.7960488415786642e-01:3.1741717053779528e+00:3.6873542348856336e-01:3.8231777602658958e+00 + CVs 20 + 6.0174928290202245e-01 2.2430595526789779e-01 -6.8700757864356504e-02 + 9.9050407561617859e-01 3.4711576777289604e-01 -1.3091178502003861e-01 + 1.3049022664354319e+00 4.2740905862403317e-01 -1.8431428206104217e-01 + 1.6274393099072573e+00 5.0698349519208774e-01 -2.2394637163170120e-01 + 1.9558716911558143e+00 5.8134830085891387e-01 -2.5263465841763733e-01 + 2.2883247358579899e+00 6.4591430658718663e-01 -2.7231591674280209e-01 + 2.6252682715170135e+00 6.9748792289514516e-01 -2.8012165478140433e-01 + 2.9681170937582393e+00 7.3347237287521161e-01 -2.7091766561708258e-01 + 3.3172509149362357e+00 7.4976917018830236e-01 -2.4777323591412836e-01 + 3.6725152070879008e+00 7.4253953979725873e-01 -2.1615676767460312e-01 + 4.0370293418530281e+00 7.1268201263418907e-01 -1.7052200908759707e-01 + 4.4177320235196751e+00 6.6712838820003972e-01 -8.6383772804729309e-02 + 4.8179580360848941e+00 6.0311385106849491e-01 4.4901702659339904e-02 + 5.2305892415621749e+00 4.9734476440819853e-01 1.7187384553586960e-01 + 5.6370761538846477e+00 3.3644239214858351e-01 2.2925967335473785e-01 + 6.0172806862252335e+00 1.3385172010735213e-01 2.0343313696903897e-01 + 6.3521422344622493e+00 -8.5494667600548580e-02 1.1652887428461955e-01 + 6.6240585209460727e+00 -2.9665413100415394e-01 -9.8484484944479922e-03 + 6.7772224264517069e+00 -5.1701644903351873e-01 -2.6414123035812154e-01 + id 12395 + loc 9.8198616504669189e-01 3.1319552659988403e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4556557862697893e-01:2.1562822636684686e-01:6.0719407262115777e-02:4.4159864117105840e-01:7.1114671411365105e-01:4.4556112297119266e-01:1.1057363339699691e+00:2.6337478857992075e-01:1.9380298805576883e+00:3.6032677736583457e-01:2.4659792679917745e+00:2.7310399719428052e-01:3.0295006131424858e+00:3.3947060287507758e-01:3.6775593903381081e+00 + CVs 20 + 4.9498711847447169e-02 5.7870960575340391e-01 5.7721966865240137e-01 + 5.6400735795270246e-02 1.1447478550592272e+00 1.0774646623666819e+00 + -4.1160025515972753e-02 1.7177750606580051e+00 1.5150573349127197e+00 + -3.0413262894689103e-01 2.2965069971820222e+00 1.8839005114509504e+00 + -7.5793215005455594e-01 2.8273421115622890e+00 2.1471811769404114e+00 + -1.3711250868148475e+00 3.2480712473936673e+00 2.2947510510400995e+00 + -2.0935541379062172e+00 3.4961415643164919e+00 2.3335651627584220e+00 + -2.8567649085244549e+00 3.5102758768164719e+00 2.2862116604434473e+00 + -3.5867870971948372e+00 3.2493189471736903e+00 2.1893404921714490e+00 + -4.2056151676142477e+00 2.7120527753391195e+00 2.0460383307976207e+00 + -4.6160428482113529e+00 1.9659057610560886e+00 1.8113389675855551e+00 + -4.7413758413883924e+00 1.1449984046810566e+00 1.4455805025985624e+00 + -4.5784090193371112e+00 4.1552890314897006e-01 9.3681877104664035e-01 + -4.1910798840673298e+00 -5.2536032731791527e-02 3.1412374250583958e-01 + -3.6995790848133887e+00 -1.8228949592169441e-01 -3.3774108902174138e-01 + -3.2272312574496596e+00 -1.7533201706060431e-02 -9.3276108020735515e-01 + -2.8506702806749931e+00 3.5946272063077411e-01 -1.3853743424335814e+00 + -2.6351892170701738e+00 8.7882419360078168e-01 -1.5492413871408555e+00 + -2.5213113652942170e+00 1.3332220496534486e+00 -1.6367680170345116e+00 + id 12396 + loc 6.6848474740982056e-01 9.9756634235382080e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3794935086956777e-01:3.9094776968475775e-01:4.0482309637981717e-02:2.4901241576773958e-01:9.7011170700222105e-01:4.1832898458236345e-01:1.7842443787459010e+00:4.3794497137605909e-01:2.2104564443129724e+00:2.2747602725899238e-01:2.8392622541963695e+00:3.4064208069571078e-01:3.5570472879104291e+00 + CVs 20 + -3.6497479534111643e-03 4.8514502239079449e-01 1.7473203949086044e-01 + -6.1717499912790685e-02 9.0602346879229256e-01 2.8543755540842841e-01 + -1.5285361858604535e-01 1.2887968242921763e+00 3.6475661305054541e-01 + -2.7416234789440563e-01 1.6398145850643238e+00 4.1711530219833359e-01 + -4.2791558756693165e-01 1.9486108284793184e+00 4.3234517553840701e-01 + -6.1021491552101670e-01 2.2045391599164508e+00 4.0403310292537675e-01 + -8.1138030395032334e-01 2.3982501930205595e+00 3.3054536428107806e-01 + -1.0185722505974191e+00 2.5247915227574294e+00 2.1632403046980553e-01 + -1.2219137854384174e+00 2.5849563880523121e+00 6.9712938508864730e-02 + -1.4165737343813445e+00 2.5812261417531457e+00 -9.9831772081551917e-02 + -1.6002250112825793e+00 2.5168497276657997e+00 -2.7938764173210184e-01 + -1.7732800792985710e+00 2.3975501792772307e+00 -4.5431273231941283e-01 + -1.9365164030568303e+00 2.2288110662144232e+00 -6.1302428185395275e-01 + -2.0895166450573508e+00 2.0132287349721474e+00 -7.4777986608344693e-01 + -2.2299003869041720e+00 1.7558152462762679e+00 -8.4596242496296015e-01 + -2.3448013616690648e+00 1.4734919635175123e+00 -8.8003311342686574e-01 + -2.4192950126171189e+00 1.1857273849725027e+00 -8.3880208850229221e-01 + -2.4801610106017438e+00 9.1883895020417494e-01 -7.1778366586090980e-01 + -2.6263233003963578e+00 8.4202539273264154e-01 -4.5905257387744697e-01 + id 12397 + loc 8.0751240253448486e-01 2.3491515219211578e-01 403 + blend 0.0000000000000000e+00 + interp 3.6678112565854831e-01:3.0329791994111488e-01:4.3695274177203092e-01:2.7767342126347538e-01:1.2010022610519830e+00:2.9007104842691722e-01:2.0165083265605741e+00:3.6677745784729177e-01:2.9205675943703642e+00:2.9350156202950001e-01:3.9183235673069383e+00 + CVs 20 + 1.2841458769508152e-01 1.2745778509373110e-01 2.7825176887932835e-02 + 2.2683896227376271e-01 2.8790993174719071e-01 7.2747800348127764e-02 + 3.2277105001099848e-01 4.4958182440972755e-01 1.0889797570990017e-01 + 4.1956452191628130e-01 6.0892058333842858e-01 1.3746077766314060e-01 + 5.2174301344496687e-01 7.6041413022255788e-01 1.6012246762832083e-01 + 6.3457993145705771e-01 8.9769401429530360e-01 1.7878366970259579e-01 + 7.6276846968018130e-01 1.0132780385055526e+00 1.9390303579259133e-01 + 9.0969674100921982e-01 1.0971741460105422e+00 2.0229675140103331e-01 + 1.0728578514776907e+00 1.1400806407281867e+00 1.9576803368380286e-01 + 1.2397696937077940e+00 1.1436941537274343e+00 1.6787569944619571e-01 + 1.3953753201364669e+00 1.1218824977129862e+00 1.1978089532209651e-01 + 1.5315682927737460e+00 1.0894655470655292e+00 5.9126080752068232e-02 + 1.6462364295920782e+00 1.0546993562224352e+00 -6.3498780072450984e-03 + 1.7376129737934336e+00 1.0221284551970053e+00 -7.2671132174631434e-02 + 1.8020958351195928e+00 9.9653024549251024e-01 -1.3901737329823491e-01 + 1.8355149588665065e+00 9.8082889251080774e-01 -2.0518772401013799e-01 + 1.8349231425401147e+00 9.7215158539172719e-01 -2.6933801136755198e-01 + 1.8004350599834382e+00 9.6620908910043446e-01 -3.2628623985222782e-01 + 1.8529522221293637e+00 1.0035335030632520e+00 -2.9609924516621206e-01 + id 12398 + loc 6.6445320844650269e-01 5.5585086345672607e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4412697055902047e-01:3.2250049589488561e-01:8.3152534993486871e-01:3.4412352928931489e-01:1.4153176809772714e+00:3.1320639801929379e-01:2.0683322806895368e+00:3.1189975387709257e-01:2.9681722636769452e+00:2.9800166422313296e-01:3.9804995305689457e+00 + CVs 20 + 1.8832492405495527e-01 2.9895573305881246e-01 -2.3899260612498224e-01 + 3.9789897660643903e-01 5.8896710955256060e-01 -4.4812198618911553e-01 + 5.9739537844591495e-01 8.5783712505848497e-01 -6.5743151506624686e-01 + 7.7466963140428680e-01 1.0943859679900003e+00 -8.7365060489317337e-01 + 9.2657080805274028e-01 1.2806331224264564e+00 -1.0923399765769135e+00 + 1.0544838965882199e+00 1.4037344325622680e+00 -1.3107609527557029e+00 + 1.1678641407379446e+00 1.4744109871934397e+00 -1.5376205886055609e+00 + 1.2761784305589385e+00 1.5066619109421733e+00 -1.7862678538217303e+00 + 1.3801703230492752e+00 1.5039078938600952e+00 -2.0554461033178142e+00 + 1.4768361746712682e+00 1.4681315368872769e+00 -2.3337235076477638e+00 + 1.5636577015281448e+00 1.4042319603725186e+00 -2.6078875744889887e+00 + 1.6393842800510690e+00 1.3192717399655898e+00 -2.8684583599730917e+00 + 1.7040562014228871e+00 1.2175220482357885e+00 -3.1162464282098568e+00 + 1.7598619823754262e+00 1.0934246391996010e+00 -3.3591663681420920e+00 + 1.8053179472901930e+00 9.4083942299787859e-01 -3.6014805020834055e+00 + 1.8282778548152245e+00 7.6174192322774470e-01 -3.8494789115449675e+00 + 1.8105742744004347e+00 5.6314578474540278e-01 -4.1125337401997104e+00 + 1.7233656278444511e+00 3.6610918180168617e-01 -4.3933741062477285e+00 + 1.5481219820328114e+00 2.5544252463784223e-01 -4.6430207283385654e+00 + id 12399 + loc 4.6539273858070374e-01 3.1629040837287903e-01 1074 + blend 0.0000000000000000e+00 + interp 4.0275231838478509e-01:2.7328486999704216e-01:5.3278766873848293e-01:2.8116502800510679e-01:1.1080733231045612e+00:2.6154632031703212e-01:2.3964121006383827e+00:4.0274829086160124e-01:3.3116034310226583e+00:2.6285669168571157e-01:3.9624612736927696e+00 + CVs 20 + -3.1620297038211725e-01 2.8436560026023155e-01 -4.4637793099073966e-02 + -5.8555335930158880e-01 5.9704927381140993e-01 -7.9641845883010431e-02 + -8.2760021318336741e-01 9.4034190752311397e-01 -1.0870956423037323e-01 + -1.0355210956025060e+00 1.3106921229924720e+00 -1.2751843990303113e-01 + -1.1874698678796598e+00 1.7139347607741067e+00 -1.2997703716945086e-01 + -1.3148776512247593e+00 2.1662135693882303e+00 -1.2812179467575746e-01 + -1.5433923131718383e+00 2.6404258642188805e+00 -1.4959975309710927e-01 + -1.9683106406931528e+00 3.0307376675918749e+00 -2.1276009523162054e-01 + -2.5530033804983310e+00 3.2456891544399356e+00 -3.3910651313637963e-01 + -3.1848599375691569e+00 3.2572467351019281e+00 -5.5735960272017426e-01 + -3.7494150712511587e+00 3.1058701362060175e+00 -8.8509357710254932e-01 + -4.1709609357923663e+00 2.8670025025337482e+00 -1.3131467492964748e+00 + -4.4302700052297936e+00 2.6004887791447975e+00 -1.8021647220389796e+00 + -4.5517321927792436e+00 2.3031369367270589e+00 -2.3265635392003809e+00 + -4.5372142205217170e+00 1.9206946397686051e+00 -2.8525755035395930e+00 + -4.3555958121045029e+00 1.4261519285529525e+00 -3.2940610036426432e+00 + -3.9377554187077077e+00 8.4291500839951827e-01 -3.5372168995216433e+00 + -3.3317933921949998e+00 4.1407946789602379e-01 -3.4472231784548084e+00 + -3.0799212453992384e+00 3.8966748506364235e-01 -3.3426657699308318e+00 + id 12400 + loc 7.4744164943695068e-01 9.2788785696029663e-01 1078 + blend 0.0000000000000000e+00 + interp 5.3990207240117283e-01:3.2007147208860626e-01:4.4704885025904495e-01:3.9975696496574697e-01:1.2394402925632775e+00:5.3989667338044889e-01:1.9183075164189924e+00:4.0952474387242116e-01:2.6518885977539122e+00:3.6218228903909933e-01:3.3833384754006133e+00 + CVs 20 + 2.0904346220205672e-01 2.6559895394983546e-01 -1.3743326486826629e-01 + 4.2281589342561010e-01 5.3592669019540184e-01 -2.6589026128934012e-01 + 6.3458759743313164e-01 8.0513535842804274e-01 -3.9560828116303814e-01 + 8.4070574823375566e-01 1.0681101899516987e+00 -5.3627338994263329e-01 + 1.0392280420416906e+00 1.3208690874249507e+00 -6.9803355046917703e-01 + 1.2264853392116604e+00 1.5587072408440537e+00 -8.9186921820926202e-01 + 1.3963753831507248e+00 1.7750730888675363e+00 -1.1287649385968948e+00 + 1.5395664844679686e+00 1.9601215627828841e+00 -1.4178958083840061e+00 + 1.6436190135629225e+00 2.1001156079251704e+00 -1.7619000223111270e+00 + 1.6970550327035729e+00 2.1816469951258579e+00 -2.1505504881814810e+00 + 1.6968459350884970e+00 2.1979439742259639e+00 -2.5601687288362549e+00 + 1.6571240032570533e+00 2.1555032993106220e+00 -2.9572997831343031e+00 + 1.6042011234453288e+00 2.0734199257298958e+00 -3.3163801675358271e+00 + 1.5537370327162088e+00 1.9644046955589720e+00 -3.6369534147044327e+00 + 1.5091292776352319e+00 1.8304679141282933e+00 -3.9270485996092277e+00 + 1.4800754131421083e+00 1.6930959101744696e+00 -4.1678792089183476e+00 + 1.4851477073409860e+00 1.6163282994301551e+00 -4.2956624979599969e+00 + 1.5109374402191214e+00 1.6221439951777776e+00 -4.2622149537426743e+00 + 1.5502748323361166e+00 1.5150042092958775e+00 -4.4170998103783390e+00 + id 12401 + loc 4.5273903012275696e-01 8.7132729589939117e-02 1080 + blend 0.0000000000000000e+00 + interp 4.0192327251815041e-01:4.0191925328542527e-01:5.6113713622835570e-02:3.8946968563724849e-01:5.4984211538414329e-01:3.1874878634734810e-01:1.1397888750459568e+00:3.1532705241318004e-01:1.7268877327088732e+00:2.6962988382269693e-01:2.6377698193270316e+00:3.5088389889078836e-01:3.1067514874910711e+00:3.7369794799594191e-01:3.7563819553486528e+00 + CVs 20 + 3.8811469695159129e-01 4.8922596859629902e-01 2.1165954046155483e-02 + 5.7648508300568957e-01 8.4390388875941758e-01 4.0015194662975748e-02 + 6.9997927336526899e-01 1.1651622719404462e+00 4.0090050269783573e-02 + 8.3193546759822934e-01 1.4868983700014851e+00 2.8501012247311691e-02 + 9.6937756687073562e-01 1.8043446649865711e+00 7.9903505148777587e-03 + 1.1116724945578120e+00 2.1125206400456351e+00 -1.3106133638025819e-02 + 1.2613761593674420e+00 2.4176425693038492e+00 -2.7614954452728768e-02 + 1.4282468598987472e+00 2.7480881741033096e+00 -4.4820984255967422e-02 + 1.6266043766599223e+00 3.1536498588910540e+00 -1.1655295685521261e-01 + 1.8268212325057438e+00 3.6500153825912456e+00 -3.6454322462353389e-01 + 1.9078162790968041e+00 4.0982121179173294e+00 -8.4759810850709283e-01 + 1.8149833025056661e+00 4.3440450979395990e+00 -1.3982990947305305e+00 + 1.6128625781874435e+00 4.4047153562529520e+00 -1.8714643196696497e+00 + 1.3527424507447883e+00 4.3414461894702718e+00 -2.2486201725133950e+00 + 1.0322935996910438e+00 4.1796361311403851e+00 -2.5554225340272252e+00 + 5.8891217595282042e-01 3.8830911970766953e+00 -2.8369058856851419e+00 + 1.3167826391838888e-02 3.3434940174394505e+00 -3.1314968234482521e+00 + -4.3457608075229359e-01 2.6050191745685658e+00 -3.4031075999535383e+00 + -4.0546017880523039e-01 2.3153417563693344e+00 -3.4818681782954393e+00 + id 12402 + loc 7.1006762981414795e-01 5.6199401617050171e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5765039005537961e-01:4.5764581355147910e-01:1.8054883497441587e-01:3.0000532948457087e-01:9.6094523487727912e-01:3.2541105870880410e-01:1.6906575250773552e+00:2.9575231155308701e-01:2.2696654491437127e+00:3.4609134644665523e-01:2.9992858769938846e+00:3.1155590026222391e-01:3.5794664886413967e+00 + CVs 20 + -2.3505110858576528e-01 4.4547097358580073e-01 1.7911279642810154e-01 + -4.6557998087742281e-01 8.5731748476074743e-01 3.4141677271292475e-01 + -7.0549612746780366e-01 1.2520897444844699e+00 4.9929419041452472e-01 + -9.7893576914612046e-01 1.6260642210090599e+00 6.3016131031913458e-01 + -1.2991792166993581e+00 1.9562171870724305e+00 6.9530325729818143e-01 + -1.6507482321604132e+00 2.2101024832391274e+00 6.6518372026674033e-01 + -1.9859984410722964e+00 2.3551063993838914e+00 5.3068817120907741e-01 + -2.2319214089079278e+00 2.3701319419126077e+00 3.1636702328113908e-01 + -2.3414365952540814e+00 2.2735831033157545e+00 8.8241620127187170e-02 + -2.3495577449978886e+00 2.1136596115528326e+00 -1.0528760119384084e-01 + -2.3066882107642317e+00 1.9132366142864319e+00 -2.5070833854679930e-01 + -2.2419757795174671e+00 1.6852880779881314e+00 -3.2496170233803379e-01 + -2.1729505825963220e+00 1.4564477900338169e+00 -3.2807764338546619e-01 + -2.1055319306779121e+00 1.2164319804273254e+00 -3.1529923837167573e-01 + -2.0335560080163546e+00 9.2682354160943792e-01 -3.3835479470896501e-01 + -1.9336542308142717e+00 5.7355373563345724e-01 -4.6371675560808601e-01 + -1.7859682072903036e+00 2.1211772853598743e-01 -7.6548038726214929e-01 + -1.6296870897650875e+00 -4.8522133690318214e-02 -1.2025242929311539e+00 + -1.5422974035870800e+00 -2.2813742718506469e-01 -1.5721722528697450e+00 + id 12403 + loc 8.0217897891998291e-01 7.0743459463119507e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0539785934133737e-01:2.5297798778362818e-01:3.4092827800707792e-01:3.1642184117449396e-01:1.2890610049338620e+00:2.6581488313392077e-01:2.0399045372872071e+00:4.0539380536274400e-01:2.8516359600690473e+00:2.8512266805631287e-01:3.1374734353018821e+00 + CVs 20 + -1.1726296706024977e-01 4.0962169895205480e-01 1.2043170860583417e-01 + -2.4631497773446701e-01 7.9347002032612435e-01 2.0658932183436179e-01 + -4.0080268492944660e-01 1.1691353682989072e+00 2.7327334270495618e-01 + -5.9878384048656830e-01 1.5380839085544631e+00 3.1550530901079238e-01 + -8.5648655853537403e-01 1.8850320387565958e+00 3.1485149033137250e-01 + -1.1798531120488918e+00 2.1848968676811773e+00 2.5174309532540595e-01 + -1.5586649816942848e+00 2.4049370419645655e+00 1.1068942545579807e-01 + -1.9656059228644034e+00 2.5138384089909254e+00 -1.1102647429973256e-01 + -2.3666190073366220e+00 2.4914064605675552e+00 -3.9505376419451232e-01 + -2.7379575507135914e+00 2.3355774628164152e+00 -6.9799916331283396e-01 + -3.0734986534616358e+00 2.0584599733289624e+00 -9.6861740766746718e-01 + -3.3708673458019862e+00 1.6761210453924438e+00 -1.1612943264841786e+00 + -3.6233261734325861e+00 1.2162290678769869e+00 -1.2277363134725001e+00 + -3.8254109475062248e+00 7.3582174303408598e-01 -1.1128066117450128e+00 + -3.9708411685995979e+00 3.3493135632188864e-01 -7.9181343227542900e-01 + -4.0834493125579518e+00 1.1095301751112718e-01 -3.4096846734920555e-01 + -4.2217919476557686e+00 9.6097863284056118e-02 1.3731121267396451e-01 + -4.3914948170543786e+00 2.0142399447541498e-01 5.9113916879447048e-01 + -4.5651946378479735e+00 -3.1265196047048416e-02 1.0515115140043088e+00 + id 12404 + loc 6.3820940256118774e-01 5.4505777359008789e-01 406 + blend 0.0000000000000000e+00 + interp 1.1877208435502067e+00:3.1088191411616151e-01:2.2164951352406959e-01:3.9430142940762741e-01:9.8568151081840749e-01:6.6570533262876208e-01:1.1250455202281737e+00:1.1877108435502066e+00:1.5457594850901062e+00:3.9276609232245913e-01:2.8666011295739455e+00:3.7765016179223437e-01:3.4100266431592168e+00:3.8587109481154819e-01:3.9668756860232675e+00 + CVs 20 + 3.1341656366109732e-01 2.4578564694214627e-01 -1.2441289958430857e-02 + 5.1032094285930907e-01 3.8158838147594243e-01 -4.6151140730729401e-03 + 6.6474348566631170e-01 4.6355527075808484e-01 2.6646490102216758e-03 + 8.1248088693144738e-01 5.2598218783062611e-01 7.1576605752992073e-03 + 9.4957654721446505e-01 5.7245405373271563e-01 1.1045180623723894e-02 + 1.0739820450547308e+00 6.0754226069708417e-01 1.6398552986310627e-02 + 1.1864425931410190e+00 6.3547430311810083e-01 2.4551167154791331e-02 + 1.2882893130732298e+00 6.5910868272647372e-01 3.5814611570404331e-02 + 1.3771681444885582e+00 6.8190252102069804e-01 5.2067611377034362e-02 + 1.4498042709046706e+00 7.0852931264540220e-01 7.9022704793052900e-02 + 1.5100800931451797e+00 7.4091237573402280e-01 1.2042173837503350e-01 + 1.5670831934515146e+00 7.7501480879331541e-01 1.7033928437301560e-01 + 1.6242926379921319e+00 8.0636317454585305e-01 2.2116252350357329e-01 + 1.6791005388214510e+00 8.3478790716961249e-01 2.7703684063823447e-01 + 1.7300232351819675e+00 8.6097934754313066e-01 3.4795995049954831e-01 + 1.7785439090329891e+00 8.8461110615651328e-01 4.3277347369778546e-01 + 1.8247975588554379e+00 9.0542454103149383e-01 5.1902581633814360e-01 + 1.8634461622254690e+00 9.1676062826291527e-01 5.9739616950501651e-01 + 1.8694585862721793e+00 8.7110278895398896e-01 6.4573113634431845e-01 + id 12405 + loc 8.3164459466934204e-01 5.2096402645111084e-01 1075 + blend 0.0000000000000000e+00 + interp 3.3273105429974453e-01:3.2487331579460094e-01:7.1948527831511511e-01:2.7149838250066832e-01:1.3792708693217741e+00:3.3272772698920156e-01:2.3427684910877100e+00:2.6588535413129222e-01:3.4410866908815918e+00 + CVs 20 + 7.6119527377239135e-02 2.5986219998675958e-01 -3.4404909795355954e-01 + 1.7429868863072170e-01 4.7942168986602784e-01 -6.6020358226624243e-01 + 2.7737780515198890e-01 6.6622070775786479e-01 -9.7396140804567488e-01 + 3.7955710792820624e-01 8.2332473265958139e-01 -1.2990690232283300e+00 + 4.7826858023732954e-01 9.5481691511939548e-01 -1.6429445286304341e+00 + 5.6309622411263915e-01 1.0675552742644090e+00 -2.0085122158777460e+00 + 6.2009630005862926e-01 1.1644863003409220e+00 -2.3878091045206884e+00 + 6.4281433444957159e-01 1.2400739497221682e+00 -2.7650945295098901e+00 + 6.3522248951773819e-01 1.2815785571717164e+00 -3.1217525567743603e+00 + 6.0514911612813471e-01 1.2774444967622132e+00 -3.4382820209947962e+00 + 5.5869324580819402e-01 1.2249780555055292e+00 -3.7042940821010677e+00 + 4.9849446304569667e-01 1.1305460952693727e+00 -3.9286196362909482e+00 + 4.2586222411430064e-01 9.9693733771292203e-01 -4.1343528906248750e+00 + 3.4437459532401771e-01 8.1554592839544948e-01 -4.3452876354340644e+00 + 2.5938667012258682e-01 5.8027146981880950e-01 -4.5643660778140562e+00 + 1.6684329097260031e-01 3.1321337170276553e-01 -4.7638681583860620e+00 + 4.6962226208265456e-02 6.3117604437085029e-02 -4.9091495792504549e+00 + -1.1111885882751640e-01 -1.5376921431851609e-01 -5.0051498841399313e+00 + -2.9518880651919466e-01 -5.7720926823737151e-01 -5.2297152183974109e+00 + id 12406 + loc 6.7225003242492676e-01 9.5332324504852295e-01 372 + blend 0.0000000000000000e+00 + interp 6.1033254578055818e-01:4.7435906072818712e-01:2.8544845526338869e-01:5.1041457473228247e-01:9.2388944961496933e-01:6.1032644245510037e-01:1.0884278380599819e+00:3.5789955862285844e-01:1.9244730232228355e+00:3.1301190807704021e-01:2.1166219955853425e+00:4.4687333527105172e-01:3.0614502656773155e+00:3.2746512220144897e-01:3.7995570555231044e+00 + CVs 20 + -3.3698762427630946e-01 5.1059374680695402e-01 -4.9784839795229213e-02 + -6.7266781891915484e-01 9.1829975616031323e-01 -8.9507740901895658e-02 + -1.0144699548024203e+00 1.1875554276916045e+00 -1.1461778824527045e-01 + -1.3446484959667364e+00 1.3473672440673288e+00 -1.1806163363182179e-01 + -1.6526096594947655e+00 1.4607253131701541e+00 -9.5569564317453642e-02 + -1.9573620778208793e+00 1.5742992950218113e+00 -5.8925528548118444e-02 + -2.2863250565966080e+00 1.7105983043570236e+00 -4.0885711353635890e-02 + -2.6474672101141867e+00 1.8829717519449867e+00 -7.6796070741082911e-02 + -3.0214264161736502e+00 2.0933796211734799e+00 -1.8813010454325030e-01 + -3.3813903527749876e+00 2.3197924855222296e+00 -3.7609425244008610e-01 + -3.7125476551763392e+00 2.5203395644483755e+00 -6.2329069754686928e-01 + -3.9933875059395438e+00 2.6354838908898368e+00 -8.9293966327743657e-01 + -4.1897508930091183e+00 2.6103160152600982e+00 -1.1169117752859978e+00 + -4.3006510606961390e+00 2.4611508104885105e+00 -1.2296661147946981e+00 + -4.3848338491462124e+00 2.2448957911207339e+00 -1.2595478376702327e+00 + -4.5362960290155865e+00 1.9861462524285234e+00 -1.2250619420806090e+00 + -4.8265990739934566e+00 1.7665705003415553e+00 -1.0802625355892981e+00 + -5.2682602269217762e+00 1.5018845296158774e+00 -9.2352500273803728e-01 + -5.9049807596460955e+00 9.0350078680868906e-01 -9.3299748389198589e-01 + id 12407 + loc 3.6761048436164856e-01 6.4848744869232178e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0627824314678815e-01:4.0095768099122991e-01:6.1869807620975492e-02:3.6030771879154694e-01:7.3240179937820893e-01:3.1114899024536752e-01:1.5005081310394890e+00:3.0396118532413891e-01:2.1865410717825169e+00:5.0627318036435676e-01:2.9753215100417147e+00:4.4267340801427452e-01:3.1265982812604638e+00:2.8443713692125638e-01:3.6921748464010609e+00 + CVs 20 + 2.8572579007172294e-01 6.9706939804266344e-01 -4.4651161724227417e-01 + 6.2001591606210782e-01 1.3824754337089606e+00 -7.7689046462950517e-01 + 1.0161518235078775e+00 2.0256286365802749e+00 -9.4104616727276447e-01 + 1.4609864592798516e+00 2.5501409946995790e+00 -9.4162117665240208e-01 + 1.9201568293948523e+00 2.8948916997648269e+00 -8.3810805184150639e-01 + 2.3474674781298370e+00 3.0621734334777928e+00 -7.0485138983991336e-01 + 2.7160594044254189e+00 3.0958134330103184e+00 -5.8357581260298608e-01 + 3.0516840412534942e+00 3.0344751833475816e+00 -4.7687997211875199e-01 + 3.4098268602811856e+00 2.8606210918679604e+00 -3.8530262106716606e-01 + 3.7877702729151950e+00 2.5247003106714172e+00 -3.1145765026449379e-01 + 4.1097456815798248e+00 2.0053658660022657e+00 -2.1990345733366157e-01 + 4.2788263614195428e+00 1.3352883197821477e+00 -4.5488901799283776e-02 + 4.2472042618846952e+00 5.8013327763187117e-01 2.3389403126819952e-01 + 4.0420484714429463e+00 -2.2039645117713602e-01 5.4632724099309882e-01 + 3.7837371052269835e+00 -1.0519165902074012e+00 7.3071144731902549e-01 + 3.9749972004107463e+00 -1.8854390383238646e+00 4.2121314399406029e-01 + 5.2186810173338918e+00 -9.1100152020826886e-02 4.6247300336805797e-03 + 5.0057548980881394e+00 6.4225440630948571e-01 3.4337100164596412e-01 + 5.1984220799692924e+00 1.2378934403866007e+00 4.4251544599319592e-01 + id 12408 + loc 9.6260321140289307e-01 4.0754392743110657e-01 413 + blend 0.0000000000000000e+00 + interp 5.5526729947501074e+00:7.7504012384774668e-01:9.3375213293514847e-01:1.0625938805807260e+00:9.6261463073925313e-01:3.2536550690636029e-01:9.6707514828056151e-01:3.3323747296431921e-01:1.9961209077046056e+00:4.5507976960699359e-01:2.5305783944621307e+00:1.2465711141269358e+00:2.8573633986624665e+00:1.7776008241399375e+00:2.8970642433170610e+00:4.0786384446979120e+00:2.9807646179411065e+00:4.7391253771189579e+00:2.9867576941303926e+00:5.1515097131977212e+00:2.9931668056244138e+00:5.5526629947501078e+00:2.9950956076376922e+00 + CVs 20 + -1.1402384787475834e+00 2.1091720508346734e-01 2.7678447699244835e-01 + -1.8260684298655898e+00 2.5094906926840194e-01 4.9745821137591423e-01 + -2.4009192759371074e+00 2.3209193414996598e-01 6.9497587702202912e-01 + -3.0085283086987245e+00 2.2157954163445126e-01 8.7048941761526355e-01 + -3.6487915079266839e+00 2.0570457247042173e-01 1.0062344533714302e+00 + -4.3146095416329953e+00 1.6543665910343497e-01 1.0886817902956190e+00 + -4.9922636946439454e+00 8.1783009536131046e-02 1.1148204961836621e+00 + -5.6623689885971125e+00 -6.3017428074797488e-02 1.0911591445558240e+00 + -6.2986449111458844e+00 -2.8364663575702886e-01 1.0270035548968319e+00 + -6.8710822859490870e+00 -5.8433462053912200e-01 9.3125685757375698e-01 + -7.3547956620691171e+00 -9.5339133942079646e-01 8.1257825371748327e-01 + -7.7394431156134980e+00 -1.3673482033563085e+00 6.7482353635566827e-01 + -8.0312834421386388e+00 -1.8055521346127379e+00 5.2754870927987563e-01 + -8.2424056795347340e+00 -2.2495799170775204e+00 3.9368021350349347e-01 + -8.3886227366042725e+00 -2.6706939927095728e+00 2.8923317687347017e-01 + -8.4920064787103833e+00 -3.0460955941278147e+00 2.2591843344628271e-01 + -8.5703924391301260e+00 -3.3627779519464944e+00 2.1040577986966202e-01 + -8.6245964804899344e+00 -3.6280809639001843e+00 2.3350804242122208e-01 + -8.5170073150967376e+00 -3.8934417450854628e+00 2.7144904891387528e-01 + id 12409 + loc 4.4574059545993805e-02 2.4599547684192657e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4183020884791102e-01:4.4182579054582255e-01:1.4272742879139277e-01:3.1085536501677641e-01:8.7327204582838591e-01:4.3080160396783790e-01:1.1920329579921392e+00:4.1155279765167396e-01:1.8175534817742387e+00:2.6150174905551848e-01:2.0983913524418765e+00:2.5143232140803373e-01:3.0009420767144426e+00:3.3613885588997255e-01:3.8264657747496869e+00 + CVs 20 + -2.1058528574508911e-01 2.7581646490499839e-01 -1.9587660053866002e-01 + -4.0671221105816097e-01 5.4409757128383629e-01 -3.8266151336614995e-01 + -6.0498817724997400e-01 8.1073967371891886e-01 -5.5555174084807524e-01 + -8.1521215767851674e-01 1.0789941655348587e+00 -7.0954076338887084e-01 + -1.0426969315123511e+00 1.3495632466785314e+00 -8.4032884804456087e-01 + -1.2936230997466278e+00 1.6209259969305869e+00 -9.4386460040587894e-01 + -1.5757369334942957e+00 1.8892259957285253e+00 -1.0162696310370709e+00 + -1.8977443616210459e+00 2.1475857898102051e+00 -1.0542311006765135e+00 + -2.2682566993677811e+00 2.3845388376260117e+00 -1.0544380467752195e+00 + -2.6944636641116335e+00 2.5833837806552542e+00 -1.0136167235519582e+00 + -3.1798729438019961e+00 2.7214557663252661e+00 -9.3164133147525285e-01 + -3.7208014704890782e+00 2.7723535793282332e+00 -8.1563770293376592e-01 + -4.3057066328878113e+00 2.7132544418851530e+00 -6.8394640181412392e-01 + -4.9150140155412432e+00 2.5283165505722520e+00 -5.6417006249478385e-01 + -5.5213128349979446e+00 2.2074874467483903e+00 -4.8552448635476797e-01 + -6.0877159907121632e+00 1.7444582689546377e+00 -4.7181344850085549e-01 + -6.5589522268430267e+00 1.1495703382832485e+00 -5.3070144308519962e-01 + -6.8810033164703359e+00 4.8726108929699574e-01 -6.4170167054879013e-01 + -7.0815696128661108e+00 9.8150123051634619e-02 -7.0606293644241358e-01 + id 12410 + loc 8.2138365507125854e-01 9.4981825351715088e-01 262 + blend 0.0000000000000000e+00 + interp 1.3731560938938692e+00:1.3731460938938691e+00:1.0725161694029766e+00:5.3308866141118716e-01:1.1256244521881649e+00:2.8955532289774732e-01:1.5370256464130039e+00:3.2560807832108551e-01:2.2423110023835560e+00:4.5635861792253052e-01:3.0059524081295743e+00:1.1327975303363851e+00:3.0794995720264109e+00:7.5510081245470995e-01:3.0907757971593099e+00 + CVs 20 + -6.7084086194534920e-01 4.1204786166466967e-01 2.3022212370663722e-02 + -1.2788865731846886e+00 7.4680677288494812e-01 8.5118621794459060e-02 + -1.9450583771117862e+00 1.0141446398707565e+00 1.6134042884611338e-01 + -2.6668380885308078e+00 1.2554113903378079e+00 1.6446930579814484e-01 + -3.2939777574704650e+00 1.5266893516823008e+00 -4.6820324572324268e-02 + -3.5804108661053666e+00 1.8089403298343008e+00 -5.4003697238002402e-01 + -3.4044772662424196e+00 1.9691136015617297e+00 -1.1227924186104981e+00 + -2.8904809475670667e+00 1.9418621040818078e+00 -1.6284067623714664e+00 + -2.1463372366777982e+00 1.6833282526956979e+00 -2.0016658997023264e+00 + -1.3063008914287351e+00 1.1567190972968064e+00 -2.1803728322031888e+00 + -5.2500056674081930e-01 4.2241063799904643e-01 -2.1296241584586526e+00 + 1.6288846999658674e-01 -3.3222816148957801e-01 -1.8882899370119599e+00 + 8.9895596381816034e-01 -8.7247660616898093e-01 -1.5780810029349024e+00 + 1.8139915210076740e+00 -9.5272634639039311e-01 -1.3848773555959646e+00 + 2.7157926957152911e+00 -4.9045278073900500e-01 -1.4124927786857455e+00 + 3.4091861297002732e+00 2.1302883062564337e-01 -1.5413548794185812e+00 + 3.9585154893337187e+00 1.0341822854939680e+00 -1.7189078003585487e+00 + 4.3306381481469041e+00 1.8980777093225729e+00 -2.0393299305509340e+00 + 4.5291027810556113e+00 2.5445881143331155e+00 -2.4470890682479149e+00 + id 12411 + loc 1.3847558759152889e-02 7.9929214715957642e-01 409 + blend 0.0000000000000000e+00 + interp 3.5993345094348811e-01:2.8284665984254115e-01:3.8659969444901732e-01:3.0864957857267106e-01:1.0463915677522424e+00:3.5637107363430909e-01:1.9615152327052514e+00:3.5992985160897867e-01:2.0455423739966601e+00:2.5866596692835830e-01:2.8484400009580977e+00:3.5874857217996348e-01:3.1722599229608770e+00:3.1285275623487840e-01:3.9998297723091971e+00 + CVs 20 + 5.2983967916200925e-01 2.6658897089879419e-01 -1.8961867321190121e-01 + 9.5574876159628508e-01 4.5664613986983571e-01 -3.8125036275710855e-01 + 1.3756878174301299e+00 6.2075674732278363e-01 -5.8168024394872275e-01 + 1.8167705681201789e+00 7.6580567586868842e-01 -7.9446179630418978e-01 + 2.2543668573972635e+00 8.7082017971232717e-01 -1.0216748848255917e+00 + 2.6680272188475818e+00 9.2330100547211558e-01 -1.2655708189032122e+00 + 3.0513369043042955e+00 9.2241155781686690e-01 -1.5291642875627844e+00 + 3.4102484625686960e+00 8.7150426271254866e-01 -1.8164492417873350e+00 + 3.7581235300135640e+00 7.7381985226504346e-01 -2.1242634920009325e+00 + 4.1099604718489635e+00 6.3022070419956444e-01 -2.4419375499075828e+00 + 4.4717390425410990e+00 4.2224160813463940e-01 -2.7490644461640659e+00 + 4.8318644627280039e+00 1.1736146083267762e-01 -2.9997524674359646e+00 + 5.1748846476469854e+00 -2.7834845786143880e-01 -3.1777959837329526e+00 + 5.4886587952307213e+00 -7.2454616056266730e-01 -3.3346930472477609e+00 + 5.7553717279634053e+00 -1.1671945446571299e+00 -3.5374780367980763e+00 + 5.9585825395829266e+00 -1.5475803757401057e+00 -3.8393448079436312e+00 + 6.1030841386496011e+00 -1.8418316157797823e+00 -4.2562178913223558e+00 + 6.2414186945521308e+00 -2.0865515556145300e+00 -4.7382575430804206e+00 + 6.4872531028515006e+00 -2.3456344571318231e+00 -5.2100465120883381e+00 + id 12412 + loc 5.9971743822097778e-01 9.0453404188156128e-01 1076 + blend 0.0000000000000000e+00 + interp 4.6865993991480620e-01:3.1001606324179154e-01:2.4543795976449523e-01:3.9589392277724550e-01:1.0283141137752736e+00:2.9803641667997594e-01:1.9936963474932998e+00:3.1023821485003805e-01:2.9100951449147443e+00:4.6865525331540708e-01:3.6913356492996221e+00 + CVs 20 + 1.8930305955107782e-01 2.8277495875556391e-01 -1.0738847506898015e-01 + 3.7536255066954133e-01 5.5947469245805503e-01 -2.1120477006868560e-01 + 5.5827790964862345e-01 8.2305975008183496e-01 -3.2705906834766030e-01 + 7.3677543901036890e-01 1.0694265126834748e+00 -4.5976015584909802e-01 + 9.1074347261945554e-01 1.2975984522394897e+00 -6.0634407629230958e-01 + 1.0806584621772033e+00 1.5056467894453656e+00 -7.7163005459102951e-01 + 1.2457013989284096e+00 1.6875236164758736e+00 -9.7291952506329960e-01 + 1.3994928358777972e+00 1.8317703002408137e+00 -1.2265896973998363e+00 + 1.5295567623371702e+00 1.9256753908470652e+00 -1.5377227619123730e+00 + 1.6237502586667598e+00 1.9596283807673873e+00 -1.9021276081579193e+00 + 1.6774718111716400e+00 1.9302804498682176e+00 -2.3059500453398960e+00 + 1.6914948050237064e+00 1.8403195204266973e+00 -2.7248020775449948e+00 + 1.6630301576180535e+00 1.6999635400734403e+00 -3.1202521122644020e+00 + 1.5844922741600374e+00 1.5431918382762175e+00 -3.4329225781012345e+00 + 1.4613117927942878e+00 1.4389338355617318e+00 -3.6079979789319201e+00 + 1.3321133975912443e+00 1.4401052006760615e+00 -3.6340902067993905e+00 + 1.2574304763613771e+00 1.5455012844676697e+00 -3.5355380443360485e+00 + 1.1879931085251458e+00 1.6753568049565417e+00 -3.4136149601815755e+00 + 6.6890708604779325e-01 1.6683766692193511e+00 -3.5400995495999075e+00 + id 12413 + loc 8.4975540637969971e-01 8.1571710109710693e-01 403 + blend 0.0000000000000000e+00 + interp 4.6737242717763322e-01:3.1834622516562572e-01:4.3845110227725970e-01:3.7642189371043921e-01:1.2372685433893802e+00:2.6149744907919109e-01:1.9711928846164521e+00:4.6736775345336146e-01:2.6037616595169819e+00:3.3718495974177243e-01:3.3821542408522314e+00 + CVs 20 + -3.1252028225810663e-02 8.8056312130133541e-02 6.3678211475710941e-02 + -5.1007626714036795e-02 1.8844593210851782e-01 1.0031561922556853e-01 + -6.2134523115751003e-02 2.9517451483920676e-01 1.4770328858636567e-01 + -6.2256462982575256e-02 4.0596304427771446e-01 2.0657351998012788e-01 + -4.9555211430715534e-02 5.2068638266291212e-01 2.7078886059616158e-01 + -2.3545322637834876e-02 6.3877493080502235e-01 3.3570319900670598e-01 + 1.5242790023803132e-02 7.5883929975125963e-01 3.9721116453746846e-01 + 6.5323807648010823e-02 8.7855376601365398e-01 4.5169011312910201e-01 + 1.2434333842437645e-01 9.9445131101784767e-01 4.9597255796659523e-01 + 1.8911433411979550e-01 1.1020350261953964e+00 5.2706229565632590e-01 + 2.5543792601246429e-01 1.1963119389205268e+00 5.4250291897301284e-01 + 3.1804158003856758e-01 1.2725380932686412e+00 5.4098560879462521e-01 + 3.7085313154413618e-01 1.3269945260578406e+00 5.2300331452733795e-01 + 4.0759416967512796e-01 1.3575918509705933e+00 4.9099255088962557e-01 + 4.2213202226703589e-01 1.3643968925134653e+00 4.4920634811900761e-01 + 4.0855745298367574e-01 1.3498322587241840e+00 4.0333992440588051e-01 + 3.6093905868093740e-01 1.3176476797107335e+00 3.5955587397814132e-01 + 2.7653011843580677e-01 1.2704638360506950e+00 3.2519182261639967e-01 + 1.9680815947107927e-01 1.2170873919065981e+00 3.1231937231143531e-01 + id 12414 + loc 5.6474059820175171e-01 2.5222092866897583e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5442979457900664e-01:3.2857028580142461e-01:6.6428658312915290e-01:2.9571312999575344e-01:1.1886371371488118e+00:3.4999479049809795e-01:2.0612192805515837e+00:3.5442625028106084e-01:2.7044611906375637e+00:2.5855238158521937e-01:3.1789288419466732e+00:2.7638323239231150e-01:3.9997874600352721e+00 + CVs 20 + -1.0960025330768167e-01 4.1105644428069121e-01 -3.9173192001533247e-01 + -2.0352572517397471e-01 7.1015271888651932e-01 -5.9022000383807516e-01 + -2.9326101113324782e-01 9.8134053252812437e-01 -7.2713317006697320e-01 + -3.7608178220807897e-01 1.2553595457085183e+00 -8.6148749718608109e-01 + -4.4931285191061276e-01 1.5270453432393087e+00 -9.8917047797518132e-01 + -5.1048270147771124e-01 1.7913036652655474e+00 -1.1085303069569359e+00 + -5.5944158604060523e-01 2.0487844376766260e+00 -1.2210605451510166e+00 + -6.0584432842649449e-01 2.3125732446077283e+00 -1.3334425328194597e+00 + -6.8145981091436991e-01 2.6029016941066390e+00 -1.4527750653601479e+00 + -8.4076289867956921e-01 2.9189319091639021e+00 -1.5662348653165936e+00 + -1.1115800459865757e+00 3.2104173616556588e+00 -1.6311472048742044e+00 + -1.4554426854268665e+00 3.4227754123705383e+00 -1.6179920338393277e+00 + -1.8222985087759709e+00 3.5451201340772442e+00 -1.5306197220275055e+00 + -2.1887919089838799e+00 3.5890597747748290e+00 -1.3796412915966272e+00 + -2.5510603871908830e+00 3.5625692544796621e+00 -1.1590236604304964e+00 + -2.9267825170490700e+00 3.4486584165626208e+00 -8.2101095478016672e-01 + -3.3515758072970212e+00 3.1609716806388706e+00 -3.2103546320294796e-01 + -3.8022411984004809e+00 2.6321581773623355e+00 1.5587918404631484e-01 + -3.9906805824925482e+00 2.3814761309281516e+00 1.7001602232963364e-01 + id 12415 + loc 9.3623709678649902e-01 4.9034535884857178e-01 397 + blend 0.0000000000000000e+00 + interp 1.6624468921936408e+00:1.6175098488169287e-01:9.8375974579900327e-01:9.6134166305659452e-01:1.0590985024391535e+00:2.8824799317968425e-01:2.1950968883371038e+00:5.0539207629973082e-01:2.9894951033128576e+00:1.6624368921936408e+00:3.0013794142171020e+00:1.0963926019144663e+00:3.0079315306711654e+00 + CVs 20 + -1.2141614474018747e+00 1.7882022371405928e-01 3.6065610730613262e-01 + -1.9546073902622707e+00 1.8488210072454070e-01 6.4741454684323529e-01 + -2.6009635049738913e+00 1.3711828310765795e-01 9.3734943592238062e-01 + -3.3065265428016053e+00 1.0095698357458632e-01 1.2512166890696845e+00 + -4.0534990861474158e+00 4.9776313495689173e-02 1.5856228171879854e+00 + -4.8108562627406330e+00 -4.7853193728166321e-02 1.9291735251149795e+00 + -5.5422554930256780e+00 -2.1583630121617992e-01 2.2605069527008750e+00 + -6.2156566716376407e+00 -4.6988019131331410e-01 2.5542302089495044e+00 + -6.8063881974760294e+00 -8.1787361775984957e-01 2.7913038050633161e+00 + -7.3000115244022785e+00 -1.2585378962874612e+00 2.9665288297495715e+00 + -7.6815023819647514e+00 -1.7750524618779111e+00 3.0858034170371429e+00 + -7.9375356939324000e+00 -2.3326355862342041e+00 3.1593919338433203e+00 + -8.0709011509001627e+00 -2.8976164643583622e+00 3.2004858819376629e+00 + -8.0909531051795458e+00 -3.4439671208387996e+00 3.2182536733599827e+00 + -8.0153522348028439e+00 -3.9472888734597125e+00 3.2236097585657468e+00 + -7.8859349548966433e+00 -4.3774244165882932e+00 3.2450617656664429e+00 + -7.7443575302986112e+00 -4.7163853490244163e+00 3.3060866579533927e+00 + -7.6196346152472527e+00 -4.9751821145613135e+00 3.4213337072581411e+00 + -7.4609664731704033e+00 -5.3031202723761606e+00 3.6063805885080820e+00 + id 12416 + loc 5.1950627565383911e-01 2.1320864558219910e-01 416 + blend 0.0000000000000000e+00 + interp 4.2598964017852747e-01:2.3339782193618616e-01:6.1596081963596594e-01:4.2598538028212568e-01:1.1969714182314621e+00:2.6834687595675966e-01:1.9812043814673617e+00:3.6886940218106523e-01:2.7438024500983400e+00:2.9467815281101056e-01:3.0440622645653064e+00:2.9994175097934384e-01:3.7715049944809191e+00 + CVs 20 + -5.1926580089052987e-01 1.5314828412508402e-01 7.2102830361115200e-02 + -8.6650799010070956e-01 1.9423677104206899e-01 1.6912912560119078e-01 + -1.1827773956106251e+00 1.9227195392664026e-01 2.7148594450992969e-01 + -1.5250985711505365e+00 1.8324368950535719e-01 3.6076147469991804e-01 + -1.8934302250551620e+00 1.6700154323080285e-01 4.3320102785888204e-01 + -2.2884875625018095e+00 1.4400299029973840e-01 4.8217362292467864e-01 + -2.7082561521898603e+00 1.1566231853250797e-01 4.9729223182896859e-01 + -3.1466160091934414e+00 8.3819875892556128e-02 4.6931684598198631e-01 + -3.5964064500672612e+00 5.0093573854284035e-02 3.9341384997864570e-01 + -4.0487699859424913e+00 1.6322637973327891e-02 2.6811430506241540e-01 + -4.4854950650025067e+00 -1.4049329098373198e-02 1.0172139005401692e-01 + -4.8841356519544501e+00 -3.9263925342681638e-02 -7.4048929090203885e-02 + -5.2431923746107714e+00 -6.6100972714707051e-02 -2.1701078611231850e-01 + -5.5882026018971924e+00 -1.0961764289049958e-01 -3.1429340194116473e-01 + -5.9405688817308899e+00 -1.8399589417196616e-01 -3.7994321889994620e-01 + -6.2921929644918411e+00 -2.8976240218604987e-01 -4.2202053770336057e-01 + -6.6235995472998681e+00 -4.1671871973435737e-01 -4.4036164724731885e-01 + -6.9267021936890343e+00 -5.5510600437203417e-01 -4.3515026609660290e-01 + -7.2297341235482051e+00 -6.9306887636267378e-01 -4.6331004119242225e-01 + id 12417 + loc 6.5834105014801025e-02 1.6489504277706146e-01 1074 + blend 0.0000000000000000e+00 + interp 3.7480968007060145e-01:3.3700412814146491e-01:9.5936181480719074e-01:2.6045411273952029e-01:1.7510467712169646e+00:3.7480593197380074e-01:2.4124555310403717e+00:2.7206112525556952e-01:2.9286636912766277e+00:2.5464735907413466e-01:3.9860429975057166e+00 + CVs 20 + -1.8258205007811545e-01 3.6587832682793825e-01 -5.7849959228015918e-02 + -3.7829598619656657e-01 7.4451700038326174e-01 -1.0117966341074008e-01 + -5.7720726453326798e-01 1.1373751855463223e+00 -1.1462469950680990e-01 + -7.5430870304791053e-01 1.5441745965924105e+00 -8.4301884493736101e-02 + -8.9262115606171899e-01 1.9577002716171354e+00 -6.6777536836741258e-03 + -1.0389247400241126e+00 2.3478853664771200e+00 9.1050781227637989e-02 + -1.2805217250831658e+00 2.6507397949664311e+00 1.5407710985530099e-01 + -1.6346323393256048e+00 2.8100395081956324e+00 1.3615452561897601e-01 + -2.0408747921967705e+00 2.8034715731972226e+00 6.4665550442201125e-03 + -2.4051451194121545e+00 2.6436977452690651e+00 -2.5076324464029498e-01 + -2.6529306574874192e+00 2.3896050307006123e+00 -6.2240019454082374e-01 + -2.7588101358812720e+00 2.1055036209089626e+00 -1.0553392483847306e+00 + -2.7471294513985161e+00 1.8168164440458661e+00 -1.4856742028666023e+00 + -2.6410232337831747e+00 1.5021460761537375e+00 -1.8516735786673642e+00 + -2.4452845098213234e+00 1.1363508125368615e+00 -2.0840666638380347e+00 + -2.1395684314333367e+00 7.5001487120228205e-01 -2.1350397972182638e+00 + -1.6759575054515783e+00 4.9115408653515980e-01 -1.9113363073177025e+00 + -1.2031165768334766e+00 5.4885020135670959e-01 -1.4736679347118213e+00 + -7.8581835430934421e-01 3.2998427607654657e-01 -1.3268541451072169e+00 + id 12418 + loc 9.5922118052840233e-03 1.3956414163112640e-01 372 + blend 0.0000000000000000e+00 + interp 7.0144338566827413e-01:4.5416697664917383e-01:2.1287293307625799e-04:7.0143637123441749e-01:1.3670513075164881e-01:1.7760292423224050e-01:1.8982602619289439e+00:3.7101848033132517e-01:2.6631710880079242e+00:5.5086060999363040e-01:3.1133803708720094e+00:4.2599055060977564e-01:3.6379793385938317e+00 + CVs 20 + -2.3025502036909579e-01 8.3442932511150913e-01 6.0207706812263140e-01 + -5.1242830922412952e-01 1.5620075775977740e+00 1.1046470963549517e+00 + -8.6098457369241099e-01 2.1820059761969648e+00 1.5119588834576041e+00 + -1.2587982181183934e+00 2.6645149088002791e+00 1.7633321024594459e+00 + -1.6820223465152786e+00 3.0089508135059333e+00 1.8294702468097668e+00 + -2.1294425548579548e+00 3.2422359881976890e+00 1.7218030483841282e+00 + -2.5751417675936632e+00 3.3541620148341558e+00 1.4482109306760917e+00 + -2.9705551991319070e+00 3.3098243690564395e+00 1.0235123735907226e+00 + -3.2695638347343432e+00 3.0999797486217102e+00 5.0267197785694195e-01 + -3.4468868848475105e+00 2.7482928480336635e+00 -4.2738261657504051e-02 + -3.5000971246022834e+00 2.2739367909002781e+00 -5.5876102763144186e-01 + -3.4391165446816578e+00 1.6965224466623245e+00 -9.9845122046025769e-01 + -3.2836629374029225e+00 1.0940731421378569e+00 -1.3465011682864958e+00 + -3.0282000992597142e+00 5.4767478357510724e-01 -1.5584039384711812e+00 + -2.5666574327142082e+00 -2.7724215836627653e-02 -1.6060984972670991e+00 + -1.9819509217038107e+00 -5.7098017755955421e-01 -1.9530810635807829e+00 + -1.6543533046409251e+00 -6.7690610913543792e-01 -2.6525174878082995e+00 + -1.6283138370244046e+00 -2.7328584652607768e-01 -3.2936988309648800e+00 + -1.8174838745314637e+00 5.5184268046232043e-01 -3.6032034565485991e+00 + id 12419 + loc 5.5659317970275879e-01 3.7888899445533752e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2425142944192448e-01:2.7707198587989990e-01:1.0279096672030772e+00:2.2308133295251262e-01:1.8020126275388626e+00:2.9898105047083012e-01:2.8133971473784900e+00:3.2424818692763008e-01:3.3071361331322007e+00:2.5956788750897919e-01:3.9966421751958254e+00 + CVs 20 + -1.1175342972983170e-01 4.1834855083784528e-01 2.3296841214423541e-01 + -2.1531272600831328e-01 8.4849453685062626e-01 4.3583442701399339e-01 + -3.4813381311120778e-01 1.2780785457865753e+00 5.8528018983943775e-01 + -5.3146790478198447e-01 1.6972246554396739e+00 6.8013115687114523e-01 + -7.8343716351669179e-01 2.0887763233304537e+00 7.3681118765865050e-01 + -1.1238284554785061e+00 2.4207327184097327e+00 7.8122026207798845e-01 + -1.5615145861402657e+00 2.6411785387891458e+00 8.4411677640801186e-01 + -2.0615342529861387e+00 2.6850788254434863e+00 9.5969870946426772e-01 + -2.5397919636489044e+00 2.5309067992521692e+00 1.1408262568964078e+00 + -2.9353017239243995e+00 2.2282147729345096e+00 1.3677430134489601e+00 + -3.2508441345533714e+00 1.8564503838000850e+00 1.6207630502725698e+00 + -3.5162229381868677e+00 1.5030175259111906e+00 1.8920966273266360e+00 + -3.7288787060838473e+00 1.2581684724991837e+00 2.1905035501836432e+00 + -3.8773688091963434e+00 1.1481912892137847e+00 2.5663951702471723e+00 + -3.9632941834664015e+00 1.1389343907639471e+00 3.1136527663851554e+00 + -3.9983502203429229e+00 1.1401111963958277e+00 3.9125664420364443e+00 + -4.0959228878592970e+00 9.1019799691708458e-01 4.9656762638397955e+00 + -4.3669284101580912e+00 2.9549525760208883e-01 5.9789358632970551e+00 + -4.4859184482969710e+00 -9.6482941379490317e-02 6.7602314967239954e+00 + id 12420 + loc 4.6722272038459778e-01 9.9686361849308014e-02 413 + blend 0.0000000000000000e+00 + interp 6.2041801807846242e-01:3.1701395765048906e-01:2.0872414088940605e-01:4.7225948455588068e-01:9.6451687449685108e-01:6.2041181389828171e-01:1.3706156029820769e+00:3.6007174213654203e-01:1.9920667296835965e+00:4.3418088692082102e-01:2.4779933674228740e+00:2.9137260033908546e-01:2.9904045931528129e+00:4.0163334968424391e-01:3.9372357742783097e+00 + CVs 20 + -1.3555796538282155e-01 2.0638429614859510e-01 -1.0731225154093194e+00 + -2.8277735287395606e-01 2.8189395839794518e-01 -1.7865911763819307e+00 + -4.2556548785397286e-01 3.1170645446300094e-01 -2.4015505133185191e+00 + -5.5486111648367709e-01 3.4135226312735806e-01 -3.0384346956091894e+00 + -6.5059153431196759e-01 3.6551787836853533e-01 -3.6894715497496517e+00 + -6.9723484955526394e-01 3.7578426236658841e-01 -4.3428341759673197e+00 + -6.8688246038739953e-01 3.6022086146254817e-01 -4.9881240623838714e+00 + -6.1805419642289594e-01 3.0258955884149097e-01 -5.6184123224996450e+00 + -4.9462873717398426e-01 1.8478334453776968e-01 -6.2248558961332110e+00 + -3.2751154534765842e-01 -8.0197568138584696e-03 -6.7939240265834160e+00 + -1.3256864256508866e-01 -2.8305209946746168e-01 -7.3094054858316415e+00 + 7.4080595576946601e-02 -6.3535904218005168e-01 -7.7519050543332950e+00 + 2.7700423079037556e-01 -1.0453159551190023e+00 -8.1043898602082862e+00 + 4.6965840570590422e-01 -1.4864370061671361e+00 -8.3643091187672738e+00 + 6.4781001697076523e-01 -1.9372607745570609e+00 -8.5442879510330485e+00 + 8.0019109848521897e-01 -2.3814777131793781e+00 -8.6635922974262751e+00 + 9.1352050262885309e-01 -2.8046397740163256e+00 -8.7401550049753745e+00 + 9.8751775809893272e-01 -3.2004351101544160e+00 -8.7830818953905041e+00 + 1.0151012215528559e+00 -3.5269732977943042e+00 -8.7000595965884884e+00 + id 12421 + loc 8.8649797439575195e-01 3.9298442006111145e-01 1081 + blend 0.0000000000000000e+00 + interp 4.6263553328226248e-01:3.7939244384700055e-01:6.9714272147890632e-01:2.9056517039183805e-01:1.0330097071439839e+00:2.3994593229574490e-01:1.9977147559045547e+00:4.3033433669132759e-01:2.6030271825901057e+00:4.0334088499778470e-01:3.0000020171753867e+00:4.6263090692692965e-01:3.4149265157708211e+00:3.9035596817823953e-01:3.9998283250607183e+00 + CVs 20 + 3.7553531475092716e-03 4.9959794074903063e-01 -3.5319225371831137e-01 + -3.4103414926925535e-02 8.8611574308357255e-01 -5.7227227986404539e-01 + -7.7501273372021506e-02 1.2388070468751295e+00 -7.5787636397174896e-01 + -1.1268510444527374e-01 1.5828629743158151e+00 -9.4502924940244704e-01 + -1.4623363232886183e-01 1.9170722864841709e+00 -1.1220363555941959e+00 + -1.8641208634092543e-01 2.2434972296124975e+00 -1.2686613836228349e+00 + -2.4369709866896883e-01 2.5677056938071594e+00 -1.3508638320307249e+00 + -3.2724382047484024e-01 2.8870837756788186e+00 -1.3162168698325287e+00 + -4.2952420008350467e-01 3.1493906071406323e+00 -1.1047857861775046e+00 + -5.0907549200086943e-01 3.2577516834336597e+00 -7.5835460776277586e-01 + -5.4620685984315898e-01 3.2224440747066772e+00 -3.9293261871261520e-01 + -5.5547725668227821e-01 3.0993724586343570e+00 -3.5076708394980782e-02 + -5.5052010080604008e-01 2.9054614504179734e+00 3.2591562241150762e-01 + -5.4189313345216572e-01 2.6326231608219417e+00 6.9211813223170793e-01 + -5.3546326227751573e-01 2.2337026940664360e+00 1.0486680783148836e+00 + -5.2727524621554356e-01 1.6044396676748480e+00 1.3160973547714157e+00 + -5.1640937008461252e-01 7.7695394250535132e-01 1.3236636621526330e+00 + -5.2266883553296128e-01 4.0241496161616652e-02 1.1193440084889723e+00 + -5.5446032989908522e-01 -4.1306633906890089e-01 1.0307859408208315e+00 + id 12422 + loc 3.0812528729438782e-01 4.5360836386680603e-01 411 + blend 0.0000000000000000e+00 + interp 4.4357012217048414e-01:2.8237410217706838e-01:1.8908425227683334e-01:3.9503308125031728e-01:8.4115159002618090e-01:4.4356568646926248e-01:1.1881332788174412e+00:4.1937704489472621e-01:1.9104326670707510e+00:3.0037981414781745e-01:2.2013762821508314e+00:4.0788788944162874e-01:2.8733311617556492e+00:3.3082367166679172e-01:3.3485634697216224e+00 + CVs 20 + -7.0605473080784187e-02 1.5439730020878528e-01 -7.0967567516244945e-01 + -1.5750034433378252e-01 1.9528060374669484e-01 -1.2211149959279282e+00 + -2.3512218953841374e-01 1.8471986201600499e-01 -1.6908779099359525e+00 + -2.8916011889736326e-01 1.4773456393135775e-01 -2.1793449505592735e+00 + -3.1605773201691578e-01 8.4839245563746335e-02 -2.6756224858978910e+00 + -3.1568614937734885e-01 1.1934049833430826e-03 -3.1695626484670769e+00 + -2.9059406363313878e-01 -9.4533605576698765e-02 -3.6531820028427591e+00 + -2.4345116570498021e-01 -1.9486310514878746e-01 -4.1216225245591618e+00 + -1.7583188598849112e-01 -2.9769311622388273e-01 -4.5747405440359810e+00 + -9.1006273957058792e-02 -4.0771799386054108e-01 -5.0158354159319298e+00 + 3.6898582879485442e-03 -5.3943789670321585e-01 -5.4508062519725717e+00 + 1.0059087516849413e-01 -7.1832638100446533e-01 -5.8871180532651293e+00 + 1.9601306743845021e-01 -9.6960258132518451e-01 -6.3267891790201674e+00 + 2.8780702299946437e-01 -1.3065768019627404e+00 -6.7614082708984071e+00 + 3.7016532887740805e-01 -1.7313386227251342e+00 -7.1725346776171550e+00 + 4.2998155567209095e-01 -2.2379660164661126e+00 -7.5343597095673864e+00 + 4.5903428657927398e-01 -2.8119101052705116e+00 -7.8197365882856893e+00 + 4.5190234914352168e-01 -3.4260963614127333e+00 -8.0144182730034501e+00 + 4.2055473034599433e-01 -3.9670703627282382e+00 -8.2014197555753263e+00 + id 12423 + loc 8.2213944196701050e-01 1.8583215773105621e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7532125304829511e-01:2.9315719810515373e-01:7.1115622270431911e-01:3.1043112772152637e-01:1.3529586050631814e+00:3.5117010757923706e-01:2.0020415996547851e+00:3.7531749983576462e-01:2.7488739574055105e+00:3.0858508307504584e-01:3.2385823945269063e+00:3.2760840522843893e-01:3.9928745133970684e+00 + CVs 20 + 2.0718796670909523e-01 2.8511489510246285e-01 -1.2879968037976869e-01 + 3.9177481850307405e-01 5.7077684320939248e-01 -2.5767914094572930e-01 + 5.3649670087834356e-01 8.6671658461132217e-01 -3.9868927120123421e-01 + 6.6696124982565164e-01 1.1710685512509105e+00 -5.1520167376944226e-01 + 8.2285837068007894e-01 1.4554745411180134e+00 -5.4170945656227654e-01 + 1.0050734513311976e+00 1.6713133111354024e+00 -4.4276819354249908e-01 + 1.1708705725022646e+00 1.7841009613421213e+00 -2.3146725181177663e-01 + 1.2571473060041332e+00 1.7914480434255746e+00 5.2055495223798931e-02 + 1.2128796809718680e+00 1.7210063188398395e+00 3.4751460202828766e-01 + 1.0396829029033501e+00 1.6107720950895135e+00 6.0620896227525212e-01 + 7.6106114454751905e-01 1.4779657166364624e+00 8.0603230261924741e-01 + 4.0186356051002348e-01 1.3302243417558699e+00 9.0345959917082652e-01 + 5.7422037806269116e-03 1.1762271772248731e+00 8.7106860269323083e-01 + -4.2181663031709321e-01 9.8463889876722943e-01 7.9747519644460496e-01 + -9.2327023216487802e-01 6.9077733298664801e-01 8.4600770729702168e-01 + -1.4555790410450560e+00 3.4864243466114553e-01 1.1949436714573076e+00 + -1.8505795834564336e+00 2.8441383299521661e-01 1.9862670241711244e+00 + -1.8682056128750513e+00 8.4193253330411122e-01 2.8520700076783561e+00 + -2.0806004379024721e+00 9.4907217128694876e-01 3.2153789041887704e+00 + id 12424 + loc 1.2648067786358297e-04 1.4280132949352264e-01 409 + blend 0.0000000000000000e+00 + interp 4.4035775719818049e-01:3.1957761495209053e-01:9.6552661342047419e-01:3.4132808715228047e-01:1.9529027638954712e+00:4.4035335362060851e-01:2.4338857242696230e+00:2.5595020630252308e-01:3.1341818414802205e+00:3.0110485963695333e-01:3.9954548322676202e+00 + CVs 20 + -2.3442182987762039e-01 2.2547783508798444e-01 -3.1597823672962344e-01 + -4.4664598586493076e-01 4.2869242269786900e-01 -6.2509279045162069e-01 + -6.4241435110149947e-01 6.2643789027422647e-01 -9.5254145197473861e-01 + -8.2790919957659226e-01 8.1213816111643278e-01 -1.2922646666656152e+00 + -1.0164184712435853e+00 9.7395541870215752e-01 -1.6250278364446171e+00 + -1.2206771205579499e+00 1.1100921985875247e+00 -1.9384548297172453e+00 + -1.4469508095565637e+00 1.2267051892107852e+00 -2.2250249125422181e+00 + -1.6993998949609774e+00 1.3325248393677933e+00 -2.4828824045074587e+00 + -1.9864126718332518e+00 1.4355040668989090e+00 -2.7248081167858769e+00 + -2.3249189372076438e+00 1.5294505996242860e+00 -2.9777247046724491e+00 + -2.7014830794485323e+00 1.5569240176411645e+00 -3.2666942680196769e+00 + -3.0184305712328570e+00 1.4563693122581207e+00 -3.5847539917589635e+00 + -3.2155166732160931e+00 1.2549398983886280e+00 -3.9056134636501745e+00 + -3.3328692064600767e+00 1.0051484626714668e+00 -4.2121882849566692e+00 + -3.4578228601310297e+00 7.5250469466152414e-01 -4.4857986873057598e+00 + -3.6952187191060326e+00 5.5318487521902115e-01 -4.6991073257516884e+00 + -4.0815747757274377e+00 4.2115429165213669e-01 -4.8474778742610010e+00 + -4.5599283596131697e+00 3.0401617273251347e-01 -4.9821106288289556e+00 + -5.0403946796809382e+00 1.4482442264223705e-01 -5.2123526039250541e+00 + id 12425 + loc 9.4248950481414795e-02 9.6596407890319824e-01 403 + blend 0.0000000000000000e+00 + interp 3.6712560349137152e-01:3.5798975362790814e-01:1.0027831878152127e-01:3.3208178566556634e-01:9.6278826472560941e-01:3.2370573205539843e-01:1.3583836863139764e+00:2.7975720523151393e-01:2.0323799325170060e+00:3.6712193223533662e-01:2.7972161045451007e+00:3.1290097575936554e-01:3.3508407838278425e+00 + CVs 20 + 6.3220332694553447e-02 2.0026196761177578e-01 -3.0925341041638989e-02 + 8.8929464511167899e-02 3.8445850466727638e-01 -4.8874826078644906e-02 + 1.0017741297733218e-01 5.6292045330956442e-01 -5.0650512184643406e-02 + 1.1577706275083677e-01 7.4995738599371697e-01 -3.3565910721081241e-02 + 1.3319816591886940e-01 9.4129201996167544e-01 6.3493802431704646e-04 + 1.4916381080184432e-01 1.1306698960809063e+00 5.0800593332609209e-02 + 1.6040968460691751e-01 1.3107075353380473e+00 1.1688354046216715e-01 + 1.6575560502793663e-01 1.4735529759701724e+00 1.9927065348406425e-01 + 1.6695493003960082e-01 1.6118053074970269e+00 2.9779995596613973e-01 + 1.6664365334264042e-01 1.7209070391031256e+00 4.1080485598245636e-01 + 1.6608934199284175e-01 1.7986691264068004e+00 5.3539915130077043e-01 + 1.6456048390531863e-01 1.8446330971682263e+00 6.6836472629182875e-01 + 1.6015197734018927e-01 1.8614219952073456e+00 8.0688462824023965e-01 + 1.5348128684866880e-01 1.8540072405516423e+00 9.4858878959927873e-01 + 1.5304392602598560e-01 1.8292852272734721e+00 1.0897520947336237e+00 + 1.7015138119413931e-01 1.7996852572195627e+00 1.2265435826938942e+00 + 2.0567661131021076e-01 1.7767423049402855e+00 1.3592488870496420e+00 + 2.4734685089988429e-01 1.7626598153822659e+00 1.4929458038430650e+00 + 2.5547463855322816e-01 1.7601802946808371e+00 1.6488614753721327e+00 + id 12426 + loc 9.6231174468994141e-01 1.8168401718139648e-01 413 + blend 0.0000000000000000e+00 + interp 3.6994944178390538e-01:3.3815143145274085e-01:2.2498827151798961e-03:2.4951116582760205e-01:1.0205272387454154e+00:3.2528416386885189e-01:1.8706114027169058e+00:3.6994574228948757e-01:2.2413577335011796e+00:2.7757467103864197e-01:3.0982498587216911e+00 + CVs 20 + -1.0850257170303641e+00 2.5450570969229797e-01 2.4160710582434994e-01 + -1.7893670917191662e+00 3.2367074983663957e-01 4.3705112684969705e-01 + -2.3960796460531726e+00 3.2093468797046698e-01 6.2246815632945673e-01 + -3.0209302554465043e+00 2.9493041949348486e-01 8.1121122087540476e-01 + -3.6530128452247204e+00 2.3561580915428137e-01 9.9293445302751060e-01 + -4.2782175202899095e+00 1.3758967282029699e-01 1.1551291765005209e+00 + -4.8831775973135354e+00 1.0080313455598233e-03 1.2866184351369954e+00 + -5.4590997014547105e+00 -1.7174974211516758e-01 1.3775508219027537e+00 + -6.0018052084552131e+00 -3.7892014848201416e-01 1.4192393768165084e+00 + -6.5167499162365434e+00 -6.2466342011124965e-01 1.4080933075760917e+00 + -7.0157248025527164e+00 -9.2739563343319209e-01 1.3523512239097433e+00 + -7.4979830295694843e+00 -1.3128043047106126e+00 1.2706343976498855e+00 + -7.9477498146999395e+00 -1.7959533918151993e+00 1.1765262602545556e+00 + -8.3433504924429549e+00 -2.3721613061687106e+00 1.0712130974837661e+00 + -8.6641359461096492e+00 -3.0237263707077737e+00 9.5488570589099320e-01 + -8.9021699254198410e+00 -3.7215086753311404e+00 8.3254641486769287e-01 + -9.0591648847738071e+00 -4.4322427056505322e+00 6.9982371428439327e-01 + -9.1480888986436995e+00 -5.1292574891572205e+00 5.4620066970802239e-01 + -9.2640218918284454e+00 -5.7331537214760218e+00 3.7518179687990316e-01 + id 12427 + loc 8.2375317811965942e-01 8.8997602462768555e-02 1048 + blend 0.0000000000000000e+00 + interp 5.3493430821601295e-01:2.5265647035976480e-01:7.4321351155810766e-01:3.4655578757092942e-01:1.0068723821398791e+00:3.7117876326525073e-01:1.9064042499329434e+00:5.3492895887293079e-01:2.1346044040453798e+00:2.4023642612292515e-01:3.1208690630058067e+00:2.9248112791685621e-01:3.9885976958576799e+00 + CVs 20 + 7.5039622558849273e-03 4.3481304723357411e-01 4.6585698079385868e-01 + -3.4636325659764433e-02 8.4198329044096487e-01 8.8684496954036507e-01 + -1.3470322959261954e-01 1.2385240527369790e+00 1.2580292197250131e+00 + -3.0991093601632691e-01 1.6336096044143098e+00 1.5754709719748476e+00 + -5.7472554763177675e-01 2.0012631248271409e+00 1.8130399040216783e+00 + -8.5481010638070221e-01 2.2955882685215681e+00 1.9577243675327183e+00 + -1.2038729748001575e+00 2.4804054969290656e+00 2.0619791166690549e+00 + -1.6120782301902339e+00 2.5223663559612959e+00 2.1127909186474216e+00 + -2.0365045402416326e+00 2.3873933342772808e+00 2.1259927331120911e+00 + -2.4390983578200798e+00 2.0376342972035464e+00 2.1205932050934400e+00 + -2.7397286603791406e+00 1.4992178179081086e+00 2.0618854225344370e+00 + -2.8655470513561503e+00 8.5225567870683605e-01 1.8999466594235104e+00 + -2.7878543621741425e+00 2.0847936522851584e-01 1.6056697709092056e+00 + -2.5181776628938390e+00 -3.1243411945945510e-01 1.1641928404344710e+00 + -2.1120588733409411e+00 -6.0284027808665142e-01 6.1166559109872543e-01 + -1.6754355849469915e+00 -6.4287507465213656e-01 6.0741134254655937e-02 + -1.2993922958611945e+00 -5.0586959373563722e-01 -3.9340613310027833e-01 + -1.0193875341204757e+00 -2.9522139241284651e-01 -7.1973109476966368e-01 + -8.6466849988388383e-01 5.6440958123893381e-04 -7.9491572678297051e-01 + id 12428 + loc 8.4351003170013428e-01 3.0576601624488831e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8116615341969665e-01:2.8514310780161656e-01:6.1895474304653075e-01:4.2303938166551502e-01:1.4291470638723889e+00:4.8116134175816250e-01:2.0090723817273068e+00:3.3903891099275563e-01:2.4248499164195936e+00:2.8917238192647354e-01:3.1030162570587687e+00:3.2940500884714630e-01:3.9037937883548750e+00 + CVs 20 + -2.3099741496703069e-01 1.7970795059879527e-01 1.5326400508101765e-01 + -4.1447522560608691e-01 3.5840616773599465e-01 2.8297666815377726e-01 + -5.6231815435125099e-01 5.2591689442486000e-01 3.9698658659362590e-01 + -6.9136121487521818e-01 6.8634249217812782e-01 5.0710743651613444e-01 + -8.0586534617311945e-01 8.5036257931536996e-01 6.1732261813548472e-01 + -9.1177644329751417e-01 1.0273322261452598e+00 7.3019890454333125e-01 + -1.0201424315745629e+00 1.2195758845714806e+00 8.5327330897796250e-01 + -1.1422543965898393e+00 1.4190579848056775e+00 9.9843042838284723e-01 + -1.2816424090220806e+00 1.6134621404404612e+00 1.1751592828950910e+00 + -1.4353070650511874e+00 1.7895142211140809e+00 1.3904251536882759e+00 + -1.5989043559932898e+00 1.9295465249106214e+00 1.6479013481371423e+00 + -1.7671303816343225e+00 2.0100880754033095e+00 1.9445578795985621e+00 + -1.9329106075641267e+00 2.0089769929477450e+00 2.2697621240882802e+00 + -2.0899380921503781e+00 1.9162654802664605e+00 2.6098883210831474e+00 + -2.2347487013578538e+00 1.7372609936123253e+00 2.9625292301221773e+00 + -2.3721883062107474e+00 1.4842563241100597e+00 3.3416713010626728e+00 + -2.5148606372079509e+00 1.1417133630687690e+00 3.7466043508759035e+00 + -2.6595683712525573e+00 6.5968742877915965e-01 4.0415623459804193e+00 + -2.7052656646058733e+00 2.9805546571509112e-01 3.9241509417873668e+00 + id 12429 + loc 7.0271700620651245e-01 4.5993289351463318e-01 372 + blend 0.0000000000000000e+00 + interp 4.3379603287971358e-01:4.3379169491938480e-01:3.4996397989531691e-02:4.2348546801321701e-01:5.7105056668179000e-01:2.9188446273422047e-01:9.9981163742661205e-01:3.8186086069211544e-01:1.4780515384659187e+00:4.1151492921637550e-01:2.0519893934738977e+00:4.2122276570726924e-01:2.8315583205399664e+00:2.6384907379073397e-01:3.0598987709059577e+00:4.2424884078508945e-01:3.7448015530323295e+00 + CVs 20 + 4.2325030980513367e-01 5.1371515988943661e-01 1.9712291645077509e-01 + 8.3869330839205625e-01 9.5787489755751876e-01 3.7128733888339871e-01 + 1.2589358884726480e+00 1.3042565676891442e+00 5.4135483829634423e-01 + 1.6395266127533756e+00 1.5434479952315920e+00 7.0438187282902653e-01 + 1.9574145829395135e+00 1.7141056468563043e+00 8.5463274601955119e-01 + 2.1892290707512068e+00 1.8966706901917445e+00 1.0700842312643728e+00 + 2.2376059553140100e+00 2.0537661982127799e+00 1.3938787943216369e+00 + 2.0853750035409844e+00 2.1036268900926363e+00 1.7508905141978224e+00 + 1.7797123615609061e+00 2.0430506547144125e+00 2.0588632719070472e+00 + 1.3579152710358378e+00 1.8941739468200907e+00 2.2647546307519999e+00 + 8.5452803192663296e-01 1.6290461440923529e+00 2.3371866483797961e+00 + 3.3401122131250094e-01 1.1877509214870052e+00 2.2566939191313082e+00 + -1.7161407375004384e-01 5.7826303948881863e-01 1.9949788099783150e+00 + -7.6134992686433955e-01 -9.4711060232937239e-02 1.5016342131561069e+00 + -1.6501966656994209e+00 -5.9448490266915799e-01 9.0553136870515205e-01 + -2.8491277751550195e+00 -5.7557512326600280e-01 4.9118879557111556e-01 + -4.1285176803479340e+00 -2.5020612818617893e-02 4.0502641532670514e-01 + -5.2278574488590568e+00 8.1705751827057238e-01 6.9068132351477218e-01 + -5.9895895839137729e+00 1.5477715566478949e+00 1.2037750140681189e+00 + id 12430 + loc 4.8714287579059601e-02 4.0265482664108276e-01 1075 + blend 0.0000000000000000e+00 + interp 3.0804501629335773e-01:2.5122861822844561e-01:7.9814393228083147e-02:2.7735621627228763e-01:1.0024644380559538e+00:2.0128608538275164e-01:1.8863843224355561e+00:3.0804193584319484e-01:2.6611811361219129e+00:3.0303020822582510e-01:3.0343302761016746e+00 + CVs 20 + -1.5587988337139999e-01 2.2140169918324010e-01 -7.1958513428958412e-02 + -3.2024011862799850e-01 5.0747229154955997e-01 -1.0718283040961385e-01 + -4.7137035539383715e-01 8.4042580015862389e-01 -1.2849412148376804e-01 + -6.1009394963674835e-01 1.2039963884467464e+00 -1.5564315653024519e-01 + -7.5989605031734309e-01 1.5922586257204232e+00 -2.0583236656361625e-01 + -9.4186524741108901e-01 1.9902920074073491e+00 -3.0373709765575108e-01 + -1.1677306293746867e+00 2.3696553144678294e+00 -4.8279530676901405e-01 + -1.4298417570923596e+00 2.6788821877813236e+00 -7.8383399508904406e-01 + -1.6801215363068962e+00 2.8478271080905881e+00 -1.2167563573872835e+00 + -1.8620785572000500e+00 2.8492147191055111e+00 -1.7300477400169358e+00 + -1.9675764683228538e+00 2.6944900900809952e+00 -2.2739124546297877e+00 + -2.0180529274242174e+00 2.3671180330411206e+00 -2.8071490753173651e+00 + -2.0324154426038503e+00 1.8584004557930691e+00 -3.2458195786295434e+00 + -2.0064081572975749e+00 1.3000175032287968e+00 -3.5214835568577256e+00 + -1.9371264930729000e+00 8.7545213568505797e-01 -3.7065816201454926e+00 + -1.8613840463368683e+00 6.4754198888305980e-01 -3.8839408800072204e+00 + -1.8323250650451370e+00 5.8998083660812450e-01 -4.0519536172992421e+00 + -1.8471909483376820e+00 5.7247349331505526e-01 -4.2075703828200002e+00 + -1.7818132282317973e+00 3.1766516838571057e-01 -4.5263693295495973e+00 + id 12431 + loc 6.4666157960891724e-01 3.1822785735130310e-02 416 + blend 0.0000000000000000e+00 + interp 3.9341326405726224e-01:2.8819105208689932e-01:6.1653091629551016e-03:2.8447994595394632e-01:9.6001634096262434e-01:3.9340932992462169e-01:1.8916933853397810e+00:3.3666920730946714e-01:2.8037501374230200e+00:3.6337093622742994e-01:3.2502619573635352e+00 + CVs 20 + -4.5124264648819784e-01 1.8507958841918593e-01 2.7774611060084636e-02 + -7.6739847814405504e-01 3.0421621353146622e-01 6.5781752405338262e-02 + -1.0447274206404433e+00 4.1018540030092437e-01 9.1934958123584709e-02 + -1.3283570685043395e+00 5.3677430887392341e-01 8.8905907336942314e-02 + -1.6146374895445745e+00 6.8065617389425137e-01 5.7358460346153883e-02 + -1.8990086009648186e+00 8.3709032008377471e-01 -1.9590019514353907e-03 + -2.1769901085072756e+00 1.0012028279534837e+00 -9.0685803343871441e-02 + -2.4444193653575272e+00 1.1676325450801115e+00 -2.1158618159910791e-01 + -2.6957225684375987e+00 1.3298090500690938e+00 -3.6337988639056562e-01 + -2.9245273001738998e+00 1.4812251366542064e+00 -5.4113201084118367e-01 + -3.1347556479539005e+00 1.6185479080379288e+00 -7.5297226876968437e-01 + -3.3565665716313342e+00 1.7383663662429953e+00 -1.0430073688337433e+00 + -3.6414832993239119e+00 1.8171360473034199e+00 -1.4520918084922565e+00 + -4.0148592616415018e+00 1.8105802766772665e+00 -1.9247182074274443e+00 + -4.4424898118752250e+00 1.7030063880845561e+00 -2.3586600684574326e+00 + -4.8907838600809654e+00 1.5043191397720699e+00 -2.7192782402614641e+00 + -5.3527322960482833e+00 1.2171542236691892e+00 -3.0106392812223266e+00 + -5.8123223159362061e+00 8.5086368916035138e-01 -3.2225575594982439e+00 + -5.9449237386360618e+00 6.4798379025864383e-01 -3.2714983165000699e+00 + id 12432 + loc 5.8014243841171265e-01 4.3347063660621643e-01 411 + blend 0.0000000000000000e+00 + interp 4.6600703176199698e-01:3.7161463676957673e-01:5.6477221364312546e-02:3.1673609826865740e-01:8.1244431000363226e-01:3.5760925935441074e-01:1.1229926233477436e+00:3.8365792312713159e-01:1.9137451036974662e+00:3.8888932784484870e-01:2.5328219752206920e+00:4.2064805527313731e-01:3.0982319008290173e+00:4.6600237169167941e-01:3.7419529499220974e+00 + CVs 20 + -7.6160740078373457e-01 2.4367482110305883e-01 1.0039754186919848e-01 + -1.3411298049791749e+00 3.8029395997812165e-01 1.7549546020936610e-01 + -1.8752215597773643e+00 4.7250120880806279e-01 2.2038595355926799e-01 + -2.4318075555100869e+00 5.4006255263651970e-01 2.3694365919041277e-01 + -3.0062001651711991e+00 5.7609299052448326e-01 2.2708817703655571e-01 + -3.5932605904805377e+00 5.7528834440238164e-01 1.9653546840381134e-01 + -4.1873430310514124e+00 5.3111439736789889e-01 1.5177131105261060e-01 + -4.7817939622719496e+00 4.3284652733826490e-01 9.7904482336817700e-02 + -5.3691696436647609e+00 2.6605474827649678e-01 4.2554078505595561e-02 + -5.9372783274579346e+00 1.6062360985874324e-02 -2.0291935689221718e-03 + -6.4627541627051661e+00 -3.2298584919018847e-01 -2.8546882371124016e-02 + -6.9205803526703518e+00 -7.3768293468959545e-01 -4.1998181042273042e-02 + -7.3032166240741159e+00 -1.2039400465444641e+00 -5.3458137801222883e-02 + -7.6170992217067717e+00 -1.7052487116907651e+00 -6.6838096599509234e-02 + -7.8664763217087188e+00 -2.2322109235590903e+00 -8.1419475338830316e-02 + -8.0484989053390326e+00 -2.7745770013454072e+00 -1.0166872195322174e-01 + -8.1608608189028384e+00 -3.3186693394669873e+00 -1.3568797113108677e-01 + -8.2150517548533308e+00 -3.8510003705435296e+00 -1.7916414478882048e-01 + -8.3298275068120642e+00 -4.2617051649215920e+00 -2.3074857045240216e-01 + id 12433 + loc 6.3587641716003418e-01 8.1850326061248779e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5504987553678861e-01:4.1472158947651844e-01:1.8122384338782438e-02:4.1593616150861218e-01:9.0819758851520305e-01:4.4311348695969022e-01:1.1898335242362157e+00:4.1685561496480095e-01:1.8690286830206801e+00:4.1726276535713841e-01:2.3334554475557741e+00:4.0866082539197057e-01:2.9938258435658387e+00:4.5504532503803324e-01:3.5294758261299375e+00 + CVs 20 + -4.9101314266517884e-03 3.5887575410389960e-01 -1.5796933528606541e-01 + -1.7644341704790036e-02 7.2484942555435050e-01 -3.4137189662995437e-01 + -2.0764511698764129e-02 1.0983799426581140e+00 -5.6143331392760620e-01 + 3.1422071690076075e-03 1.4753346170942254e+00 -8.2612872306181029e-01 + 7.1559100654638746e-02 1.8484015711783779e+00 -1.1421153484655164e+00 + 2.0386739372536394e-01 2.1950858039117449e+00 -1.5167376998987763e+00 + 4.1491508815088785e-01 2.4699182062153660e+00 -1.9477584599629836e+00 + 7.0448357108445814e-01 2.6258709219308711e+00 -2.4106101801561426e+00 + 1.0537366856765205e+00 2.6378419329986453e+00 -2.8624176989616177e+00 + 1.4288907884890847e+00 2.5097689272149064e+00 -3.2620970483515301e+00 + 1.7955996749454386e+00 2.2702384997922307e+00 -3.5893906267213267e+00 + 2.1352010480655084e+00 1.9602556000692832e+00 -3.8488783675353755e+00 + 2.4415226129000986e+00 1.6162684250089248e+00 -4.0606435008265400e+00 + 2.6981531551463065e+00 1.2586260548935613e+00 -4.2419617831079535e+00 + 2.8827250366948656e+00 8.9422489938554650e-01 -4.4009954350107519e+00 + 2.9976045386513275e+00 5.2070592930301185e-01 -4.5589623726185255e+00 + 3.0535607164754706e+00 1.2668899874931960e-01 -4.7654131202564844e+00 + 3.0470557749610361e+00 -2.8574236728995628e-01 -5.0434487194038775e+00 + 3.0583763631546352e+00 -6.7362923825553878e-01 -5.2218592937635888e+00 + id 12434 + loc 7.2714334726333618e-01 2.9144579172134399e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6045395926869583e-01:2.3994822318309422e-01:3.6646846215692919e-01:2.5607578652619695e-01:1.0561652280249143e+00:2.8169221858541738e-01:1.9511808398118216e+00:2.6106501432716650e-01:2.6874374548336686e+00:2.9446966820646658e-01:3.1552423778378169e+00:3.6045035472910314e-01:3.9044400109956827e+00 + CVs 20 + -8.4779968275119813e-02 4.7105710196012640e-01 3.4485531213013615e-01 + -2.0361324927214969e-01 9.4622667866989418e-01 6.4194329165438146e-01 + -3.5002335616612934e-01 1.3961885607037763e+00 8.6989610813324303e-01 + -5.0991264548663229e-01 1.8108586272485874e+00 1.0241980618854472e+00 + -6.8849415832496830e-01 2.1978657337894147e+00 1.1255820289644802e+00 + -9.1938790407446902e-01 2.5721020219995343e+00 1.1854042429644776e+00 + -1.2469537754887852e+00 2.9191492591618213e+00 1.2021215268463747e+00 + -1.7089895579804517e+00 3.1736319407920619e+00 1.1863441048724939e+00 + -2.2985583492179442e+00 3.2447806962134318e+00 1.1860822065533037e+00 + -2.9677449268986300e+00 3.0766881066014209e+00 1.2368160192148796e+00 + -3.6570186005496201e+00 2.6472845613924090e+00 1.3007597395631723e+00 + -4.2851530586704625e+00 1.9648899251057137e+00 1.2730940001154365e+00 + -4.7605620469550587e+00 1.0909978428984914e+00 1.0487547710139593e+00 + -4.9833747516381868e+00 1.8276561378838962e-01 5.4315155429647533e-01 + -4.9283876908772672e+00 -4.9809970558257399e-01 -2.3492844455304640e-01 + -4.6898622319120635e+00 -7.6882634746140099e-01 -1.1627748752035758e+00 + -4.3060066215972768e+00 -6.5770011299512809e-01 -2.1849365474936184e+00 + -3.7329081020642851e+00 -2.5267649442887175e-02 -3.1617868636202617e+00 + -3.6277642679242113e+00 6.6016434521555345e-01 -3.1158718675805468e+00 + id 12435 + loc 4.0466198325157166e-01 9.7990196943283081e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2130808282330201e-01:3.9218988554148859e-01:5.9824471603643059e-01:2.1235929206109613e-01:1.0937924547792253e+00:1.5798296319243374e-01:2.2137623415653458e+00:4.2130386974247380e-01:2.9225511517475891e+00:2.7242938409625228e-01:3.8396682567793152e+00 + CVs 20 + 2.1818000979382629e-01 3.3628223895006848e-01 -2.3642309169216336e-01 + 4.4270537635431129e-01 6.5056599245995284e-01 -4.5390556175435615e-01 + 6.8074922222241208e-01 9.3744432344429196e-01 -6.6273182696510891e-01 + 9.3396043465746126e-01 1.1959843007395108e+00 -8.7049730602781117e-01 + 1.2024671591464453e+00 1.4293446920221393e+00 -1.0801234133697677e+00 + 1.4818747645929107e+00 1.6394357872342917e+00 -1.2943990345907319e+00 + 1.7524002900371842e+00 1.8308722103035375e+00 -1.5171185145569530e+00 + 1.9894115077781356e+00 2.0128428875372983e+00 -1.7418944948057129e+00 + 2.1800353414357097e+00 2.1747056716407078e+00 -1.9817556510678664e+00 + 2.3007583459294567e+00 2.2564891087809538e+00 -2.2712138093404244e+00 + 2.3119713940503503e+00 2.2094278879259819e+00 -2.5941116373847701e+00 + 2.1884667282807451e+00 2.0062703954450698e+00 -2.9127414898104016e+00 + 1.9650693580281122e+00 1.6028790184819701e+00 -3.2098902651758534e+00 + 1.7568859330526556e+00 9.7296186666540374e-01 -3.5123983998979131e+00 + 1.6828244839868720e+00 1.8735607117128183e-01 -3.9205685938744637e+00 + 1.7876608985018598e+00 -5.5707234110887538e-01 -4.5765253102008607e+00 + 2.0427617035994579e+00 -9.6751838844888616e-01 -5.5361878156511546e+00 + 2.2689668285472453e+00 -7.7003740468683968e-01 -6.5005810540942566e+00 + 2.2649366196692440e+00 -3.7777460961030784e-01 -7.0192212093677817e+00 + id 12436 + loc 8.4056591987609863e-01 5.7000380754470825e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5744754097384327e-01:2.8535175425248627e-01:2.5295169554929353e-01:3.4609134644665523e-01:9.9920540577071926e-01:3.1028263881451706e-01:1.6143619348526945e+00:4.5744296649843358e-01:2.3150353836991107e+00:3.0560812698273609e-01:3.0741526041866702e+00:3.5315207341289850e-01:3.8392209322273336e+00 + CVs 20 + -2.1677447747184939e-01 5.2252098532412861e-01 9.5893267203388949e-02 + -4.3069751320997796e-01 1.0325765802130675e+00 2.0076791962727364e-01 + -6.5952474870330846e-01 1.5295513649669834e+00 3.1311239771646693e-01 + -9.4111223982401393e-01 2.0002710130276933e+00 3.9660649546337123e-01 + -1.2999557197823735e+00 2.4166865412305114e+00 4.0615136055780088e-01 + -1.7247225224104916e+00 2.7386320077192394e+00 3.0737209699842394e-01 + -2.1637304306269938e+00 2.9228279889479181e+00 7.8993048632120422e-02 + -2.5326116458076844e+00 2.9325605128148324e+00 -2.7752152497412430e-01 + -2.7617692293581220e+00 2.7697925465552382e+00 -6.9967991963141030e-01 + -2.8769825956014459e+00 2.4856280729738587e+00 -1.0978548002706632e+00 + -2.9536907721178927e+00 2.0917257298196175e+00 -1.4186451068954700e+00 + -3.0418860550333342e+00 1.5693134402455224e+00 -1.5832814940075308e+00 + -3.1379870389120779e+00 1.0164028990107874e+00 -1.5326939782441404e+00 + -3.1990248832060497e+00 5.6572961044135783e-01 -1.4183788390458176e+00 + -3.2022798609971286e+00 1.7602167617352654e-01 -1.4054167401968678e+00 + -3.1556144938724011e+00 -2.0499663130511137e-01 -1.5382700316222777e+00 + -3.0758110235737575e+00 -5.7097650277962297e-01 -1.8225286545136363e+00 + -2.9845160314091164e+00 -9.1827452101477824e-01 -2.1726468796494220e+00 + -2.9691959644481121e+00 -1.3006597581937267e+00 -2.2480359731540482e+00 + id 12437 + loc 6.3814663887023926e-01 1.3383752107620239e-01 406 + blend 0.0000000000000000e+00 + interp 4.4412892072777915e-01:4.1301748085743106e-01:3.8344424427870205e-01:2.8879397358285291e-01:9.9887245166636462e-01:3.6089317579436619e-01:1.6890469414891558e+00:2.9871292757724427e-01:2.1839976421264935e+00:4.2228969052812154e-01:2.8973019576294012e+00:4.4412447943857192e-01:3.1561452475060330e+00:3.6571390506034757e-01:3.8312508897873765e+00 + CVs 20 + -8.7321476619125565e-02 1.8311966709538874e-01 -5.7477725798927404e-02 + -1.4412452465895270e-01 3.2212067768622454e-01 -1.1442669758184247e-01 + -2.0978499297724332e-01 4.4552791449521334e-01 -1.5979343182164107e-01 + -2.9726775623069535e-01 5.5937801779671203e-01 -1.8751042152171654e-01 + -4.0429041301455865e-01 6.5847213917788427e-01 -1.9685875564433691e-01 + -5.2661788005698140e-01 7.3851681072221864e-01 -1.8807300308896024e-01 + -6.5934454304541779e-01 7.9719952745973099e-01 -1.6309042636700266e-01 + -7.9872712350905795e-01 8.3444971711120686e-01 -1.2562194659585085e-01 + -9.4079960746442026e-01 8.5033751265467661e-01 -7.9248382946582097e-02 + -1.0768737233329260e+00 8.4356268142286162e-01 -2.5071708864574827e-02 + -1.1975216652823246e+00 8.1410347226514401e-01 3.6673658505938511e-02 + -1.3046778251393691e+00 7.6458449315228783e-01 1.0303733172969914e-01 + -1.4075009996223227e+00 6.9696423016502762e-01 1.6963187220802359e-01 + -1.5058749307957005e+00 6.1298298002543072e-01 2.3223834446138739e-01 + -1.5919104739304717e+00 5.1629187405898769e-01 2.8740858866407315e-01 + -1.6645044228729895e+00 4.1015842801834601e-01 3.3332617349015486e-01 + -1.7320920762132856e+00 2.9521195001661737e-01 3.6969761524297973e-01 + -1.8043413568250619e+00 1.7097448165801887e-01 3.9693542479354788e-01 + -1.9215195282968192e+00 3.0269835460350225e-02 4.2146240527583240e-01 + id 12438 + loc 3.6354568600654602e-01 8.8615685701370239e-01 409 + blend 0.0000000000000000e+00 + interp 5.0680105190003155e-01:3.7601359535128720e-01:1.0229222270340066e-01:3.4113086212371174e-01:9.6228302533089449e-01:4.5441243594491837e-01:1.4207023761280368e+00:5.0679598388951252e-01:1.6818152451418262e+00:4.5093325487231517e-01:2.0653442533487998e+00:4.0408044597258552e-01:2.7697915834878382e+00:3.7635711329636423e-01:3.4267155274833527e+00 + CVs 20 + 4.9880976305951530e-01 1.2053358575122078e-01 -6.7605025915477276e-02 + 9.0276534725279345e-01 1.7630377154857768e-01 -1.6615033237031923e-01 + 1.2873163834718973e+00 1.9998725829606445e-01 -2.6086966728990468e-01 + 1.6796434729980991e+00 2.0372752663378202e-01 -3.3879932232350041e-01 + 2.0728944937756739e+00 1.8686807162961550e-01 -4.0245696985760226e-01 + 2.4618399164696427e+00 1.5156349217563170e-01 -4.5327554300375472e-01 + 2.8411020516910366e+00 1.0185411490141805e-01 -4.9112944467025232e-01 + 3.2044118580653471e+00 4.1089474008927818e-02 -5.1515371323102899e-01 + 3.5471827995805736e+00 -2.9147273097330562e-02 -5.2425043218334577e-01 + 3.8647585033662613e+00 -1.0717093866343630e-01 -5.1850127438810822e-01 + 4.1522925092870402e+00 -1.9053448214266844e-01 -5.0059822619537253e-01 + 4.4143792593030771e+00 -2.8128977510940700e-01 -4.7404050074032883e-01 + 4.6659837884031266e+00 -3.8958504816462103e-01 -4.4116357685908481e-01 + 4.9186745815253126e+00 -5.2675290191797686e-01 -4.0390558325358328e-01 + 5.1736640654627317e+00 -6.9903970369911894e-01 -3.6473615044448199e-01 + 5.4248420445490968e+00 -9.0880513091651594e-01 -3.2650651794835372e-01 + 5.6623154509313967e+00 -1.1563657090138086e+00 -2.8971976619251838e-01 + 5.8756406274616815e+00 -1.4376397346117358e+00 -2.5093126825195811e-01 + 6.0623558661433670e+00 -1.7520882532660189e+00 -2.0939530093500497e-01 + id 12439 + loc 8.3536547422409058e-01 9.4843780994415283e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8365695385191426e-01:3.4324596017111564e-01:3.2777682759931348e-01:4.8365211728237578e-01:1.0926094569865423e+00:2.8991277930396964e-01:1.9435404526797420e+00:2.5370836157775611e-01:2.5738501397931963e+00:3.0954670210694685e-01:3.3630920821867916e+00 + CVs 20 + -7.4698709081211664e-02 1.2951220567180394e-01 5.1261191631891745e-02 + -1.1367236839964198e-01 2.3156631760199098e-01 4.7392722270433396e-02 + -1.5677645430674567e-01 3.2575414415183740e-01 2.6619404713848938e-02 + -2.1676487415265899e-01 4.1590595493692828e-01 1.2088321939490443e-03 + -2.9217200196462695e-01 4.9857864301714550e-01 -3.1105703110783228e-02 + -3.8116485498044900e-01 5.7120522509727101e-01 -7.1678505559050643e-02 + -4.8215684257062602e-01 6.3273939053879547e-01 -1.2084868072677640e-01 + -5.9457082157553598e-01 6.8339764900255717e-01 -1.7816075788528424e-01 + -7.1905048871675215e-01 7.2400640817093143e-01 -2.4232478568609669e-01 + -8.5755217804200734e-01 7.5589730054456028e-01 -3.1074382565686759e-01 + -1.0131111724076332e+00 7.8052568555422219e-01 -3.7934689606370942e-01 + -1.1887032045143484e+00 7.9915618932253030e-01 -4.4260968143836515e-01 + -1.3857704481480575e+00 8.1276482500761338e-01 -4.9379192825048307e-01 + -1.6024785467936320e+00 8.2187505491043300e-01 -5.2641319704363498e-01 + -1.8335080121074965e+00 8.2674255473820191e-01 -5.3616650512331543e-01 + -2.0726401558942782e+00 8.2769095967791029e-01 -5.2067165156736273e-01 + -2.3150006518720283e+00 8.2515556688137826e-01 -4.7750355565848079e-01 + -2.5554144320593735e+00 8.1994542972356310e-01 -4.0593439665490100e-01 + -2.7634584619654192e+00 8.3522214286672780e-01 -3.5798425103147374e-01 + id 12440 + loc 8.8531845808029175e-01 7.6464784145355225e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0187865874786619e-01:3.6235739788056609e-01:5.3093595960842954e-01:2.7083212159669945e-01:1.0110835538126584e+00:3.5885917925943228e-01:1.6486154909759640e+00:5.0187363996127876e-01:2.0602177705948552e+00:3.4659880809951515e-01:2.7038170053261172e+00:4.7395155577605569e-01:3.1083933386874105e+00:3.5584285184058012e-01:3.6278064038089246e+00 + CVs 20 + 1.5956245052432191e-01 2.4917377974670424e-01 -1.5913670327887242e-01 + 3.2527778680607367e-01 5.0440255090181774e-01 -3.0730243937516111e-01 + 4.8100608634261421e-01 7.5278199142121038e-01 -4.6501970631225131e-01 + 6.2053118310333766e-01 9.8912246705446072e-01 -6.4137377751399571e-01 + 7.4343587135718814e-01 1.2125448826285745e+00 -8.3888954462867127e-01 + 8.4848333138398024e-01 1.4215850382616040e+00 -1.0600762198627851e+00 + 9.3321263738574067e-01 1.6136254334548632e+00 -1.3080144651892189e+00 + 9.9345343220779081e-01 1.7843473740149709e+00 -1.5861927459249787e+00 + 1.0227178407791253e+00 1.9272105133206134e+00 -1.8973022753308941e+00 + 1.0132330085250738e+00 2.0345960556399363e+00 -2.2408024852329884e+00 + 9.5909043061249022e-01 2.1001856282173121e+00 -2.6111196446779474e+00 + 8.6041494304585409e-01 2.1203840978878112e+00 -2.9982530535106959e+00 + 7.2827259208112394e-01 2.0964214834144932e+00 -3.3903796089080829e+00 + 5.8152616762031695e-01 2.0334885168248378e+00 -3.7793313711850556e+00 + 4.3772934675054004e-01 1.9401394485816237e+00 -4.1555447289001890e+00 + 3.1497945356642809e-01 1.8438016087622973e+00 -4.4875353119651633e+00 + 2.3404377085761013e-01 1.7994604433643966e+00 -4.7120767956806819e+00 + 1.8549037690010042e-01 1.8229181480400427e+00 -4.7991911738206978e+00 + 1.8642197603918614e-01 1.8052940114359770e+00 -5.0488966066510912e+00 + id 12441 + loc 6.4392608404159546e-01 3.0497097969055176e-01 372 + blend 0.0000000000000000e+00 + interp 4.1151904440681958e-01:4.1151492921637550e-01:6.0387656956909397e-02:3.9401266629582837e-01:8.9170521845814132e-01:2.8144723531414767e-01:1.1682134680070426e+00:4.0869586000204727e-01:1.7982962784076353e+00:4.0946173993619656e-01:2.2891464188341537e+00:3.2176709578074703e-01:2.9427914098081240e+00:3.6889029648732341e-01:3.3983714344704228e+00 + CVs 20 + 4.8979382919247122e-01 4.9447158734734065e-01 1.4964600969196207e-01 + 9.4456839077186838e-01 8.9129621186481534e-01 2.7827200867927138e-01 + 1.4031626164480180e+00 1.1917263896947257e+00 3.9197340148348969e-01 + 1.8381301575886493e+00 1.4020899327296432e+00 4.8659408394057613e-01 + 2.2200441862772720e+00 1.5678208126032505e+00 5.6851992989556788e-01 + 2.5093445871064284e+00 1.7792697472317267e+00 7.4618110698995332e-01 + 2.5461615746218889e+00 1.9881560060212555e+00 1.0883335470051609e+00 + 2.2746258535777617e+00 2.0771392742056367e+00 1.4984775949070028e+00 + 1.7449642648892980e+00 1.9986915623858235e+00 1.8797301339043062e+00 + 1.0378123145193305e+00 1.7226635011400502e+00 2.1704800739339367e+00 + 2.5380849173719100e-01 1.2304885790018256e+00 2.3317122973466975e+00 + -5.4007695985697302e-01 5.8281981959519003e-01 2.3513947706900034e+00 + -1.3870784712430109e+00 -4.9352904839499390e-02 2.2758206767953082e+00 + -2.3295872834440297e+00 -3.5818282557772896e-01 2.2781263964807454e+00 + -3.1895544996907743e+00 -1.3751108987659233e-01 2.5521082216044699e+00 + -3.8422930811919018e+00 4.1976894614661675e-01 3.0807854636144900e+00 + -4.2326105205388265e+00 1.1202817650672903e+00 3.7602457572464205e+00 + -4.4123733738891140e+00 1.7798434809579509e+00 4.4138902968643414e+00 + -4.8024069567632246e+00 2.3713512341390794e+00 4.9189305233256437e+00 + id 12442 + loc 4.7647735476493835e-01 5.8925259113311768e-01 416 + blend 0.0000000000000000e+00 + interp 4.9310272436444591e-01:4.3657437354486239e-01:2.8260222025968618e-01:2.7692331348365307e-01:1.0044813839244717e+00:2.6637070377811345e-01:2.3934280247530868e+00:4.9309779333720227e-01:3.0649973141382767e+00:3.2602210059541598e-01:3.7006465034737515e+00 + CVs 20 + 6.7843556080782064e-01 2.5318763257778171e-01 -8.1509526825525674e-02 + 1.1270771370652912e+00 3.9632772101805713e-01 -1.5769182140923407e-01 + 1.5193738120183800e+00 4.9506108194046644e-01 -2.1470763334212792e-01 + 1.9445195890451203e+00 5.8301030505832963e-01 -2.3972169855182748e-01 + 2.3944105862282394e+00 6.4855609166612704e-01 -2.2434773319032864e-01 + 2.8558324348519588e+00 6.8158760474329960e-01 -1.6040423705912465e-01 + 3.3141332488266553e+00 6.7532094884202321e-01 -4.1911602424402061e-02 + 3.7552611963501441e+00 6.2628159801472216e-01 1.3085755441899960e-01 + 4.1649371592724220e+00 5.3501287808774434e-01 3.5002106834399693e-01 + 4.5333050835681181e+00 4.0602798197090051e-01 6.0366094644250456e-01 + 4.8736531646201957e+00 2.3859243658049434e-01 8.8352383561729275e-01 + 5.2292547059630827e+00 1.1393088178256239e-02 1.1836121672347470e+00 + 5.6287743690660310e+00 -3.0698394537928064e-01 1.4716396053396101e+00 + 6.0400470823065886e+00 -7.1190199923541297e-01 1.6883954950512203e+00 + 6.4152828895280560e+00 -1.1614991433848174e+00 1.8060316686293185e+00 + 6.7445384437990183e+00 -1.6293660225982838e+00 1.8303302316110983e+00 + 7.0323133425753612e+00 -2.1065384802891498e+00 1.7657465621920720e+00 + 7.2735319748158291e+00 -2.5727141150655077e+00 1.6168513358725869e+00 + 7.4264163092698947e+00 -2.8599931689196096e+00 1.5061605550187305e+00 + id 12443 + loc 8.3418995141983032e-01 9.7464197874069214e-01 1085 + blend 0.0000000000000000e+00 + interp 3.3195975147537454e-01:2.4261345949149074e-01:6.4842565778776362e-01:2.9068820396563072e-01:1.4818954003538218e+00:3.3195643187785978e-01:2.4847766047054396e+00:2.7832664422502928e-01:3.0357389132085872e+00:2.9817320593184066e-01:3.8854483546143914e+00 + CVs 20 + -7.4299792546902124e-02 3.4688805670560230e-01 1.5508153456899187e-01 + -1.9665821874149614e-01 6.4584867226914144e-01 2.7646366350047880e-01 + -3.5028981513272678e-01 9.1616721557418135e-01 3.7907124848189749e-01 + -5.2355245786031268e-01 1.1607209169952051e+00 4.6818818843884069e-01 + -7.1402575220013653e-01 1.3714846535651324e+00 5.3798072017258636e-01 + -9.1717589966812629e-01 1.5428050617577023e+00 5.8616420959629822e-01 + -1.1301371093916974e+00 1.6723516532571361e+00 6.1157294180515875e-01 + -1.3521289626889135e+00 1.7577116895116907e+00 6.1111599780384696e-01 + -1.5726747748640253e+00 1.7932918348479983e+00 5.8459604181813363e-01 + -1.7674951655610955e+00 1.7786759744403029e+00 5.4330743829087158e-01 + -1.9177329683785649e+00 1.7295618119209979e+00 5.0655510674525139e-01 + -2.0199264373707972e+00 1.6728594819348737e+00 4.8876816569579468e-01 + -2.0702667145201583e+00 1.6402498175014433e+00 4.9262502633841265e-01 + -2.0560916407132090e+00 1.6675466696732939e+00 5.0152767335336312e-01 + -1.9642601213096877e+00 1.7828024884110292e+00 4.6721891508238184e-01 + -1.8063379312397365e+00 1.9220361984437289e+00 3.4471348135835322e-01 + -1.5955452562951895e+00 1.9558256470555579e+00 1.7391978730551949e-01 + -1.3617442062988685e+00 1.8248497730894395e+00 5.1711198912866685e-02 + -1.3713603166828356e+00 1.7064401743006461e+00 3.0837250221584561e-01 + id 12444 + loc 9.5897418260574341e-01 2.6880249381065369e-01 403 + blend 0.0000000000000000e+00 + interp 5.2989265484371739e-01:4.7100736859298908e-01:8.7405140541445436e-02:5.2713454285450856e-01:4.1977595208982499e-01:3.8573091439199059e-01:9.9865215322363576e-01:5.2988735591716896e-01:1.3005467567568703e+00:5.1097672949051409e-01:1.8841553134312048e+00:4.8514438972553792e-01:2.0085129523332297e+00:3.3712721103653143e-01:2.4045607158255629e+00:2.7704647768053542e-01:3.1103818683250357e+00:3.2457864264112840e-01:3.9208259889717620e+00 + CVs 20 + -2.8027328232379807e-02 7.1569570319603149e-03 6.5096252751262962e-02 + -6.3921427392006791e-02 3.0772486203866904e-02 1.4051529434642523e-01 + -1.0614857980875946e-01 7.0096574039917481e-02 2.2571485930903121e-01 + -1.4793850189683794e-01 1.1954800007005355e-01 3.1929384200712996e-01 + -1.8751429945998038e-01 1.7952102856706781e-01 4.2292314672459957e-01 + -2.2077610436138931e-01 2.5001675962950642e-01 5.3893564456589438e-01 + -2.4134933832705369e-01 3.3021272623680475e-01 6.6989753208764746e-01 + -2.4061174283976708e-01 4.1786736938958535e-01 8.1777577137569701e-01 + -2.0830557475414574e-01 5.0798010604254973e-01 9.8196362107612434e-01 + -1.3581645741389031e-01 5.9310529631776010e-01 1.1578292781338848e+00 + -2.0515906312421228e-02 6.6613817528883235e-01 1.3375563207771468e+00 + 1.3440508422635927e-01 7.2299585221013807e-01 1.5135244641666405e+00 + 3.2349513716982481e-01 7.6228879604234256e-01 1.6798590530854205e+00 + 5.4095755185819205e-01 7.8470382043762132e-01 1.8315243223916111e+00 + 7.8101306235283019e-01 7.9365485813753356e-01 1.9637307034681144e+00 + 1.0391553819808950e+00 7.9379287585799152e-01 2.0723529777227205e+00 + 1.3129477027818068e+00 7.8788410932303976e-01 2.1524457199268681e+00 + 1.6005432804409629e+00 7.7495851812594174e-01 2.1977627797210144e+00 + 1.7338747716410183e+00 7.6972708755643549e-01 2.3074596190214853e+00 + id 12445 + loc 5.2216970920562744e-01 8.4287863969802856e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4637587559495870e-01:2.8765698037231768e-01:9.9786930611652536e-01:5.4637041183620283e-01:1.6280402122454520e+00:4.4538184495147382e-01:2.0112386435407390e+00:3.5445804453188234e-01:2.6276246360815798e+00:4.4509073574333863e-01:3.4114732848481522e+00:2.9372676468136544e-01:3.9822358422469630e+00 + CVs 20 + 9.1794529966962884e-02 5.2459137759648677e-01 5.3303548236823650e-01 + 2.1502082543370057e-01 8.9676624324050613e-01 8.2664215014128239e-01 + 3.5390952287015276e-01 1.2067196404190530e+00 1.0365556720092646e+00 + 4.9774699290366103e-01 1.4840684274182214e+00 1.2230541656328657e+00 + 6.4003625624395588e-01 1.7207962850558476e+00 1.3865577832750371e+00 + 7.6807754542587681e-01 1.9080155688995477e+00 1.5279204817444012e+00 + 8.6387604940724072e-01 2.0421402378221751e+00 1.6503232011243636e+00 + 9.0506779321012831e-01 2.1338446363195591e+00 1.7711091501062213e+00 + 8.7476141220138626e-01 2.2299685534660583e+00 1.9374906367416778e+00 + 8.4195294354890882e-01 2.4239854172886401e+00 2.1683384339808920e+00 + 9.2458717031333715e-01 2.6657962507950570e+00 2.3262765758466966e+00 + 1.0620047256545713e+00 2.8054709710056991e+00 2.3502122971887771e+00 + 1.1851779604700590e+00 2.8237661629510664e+00 2.2969186305371885e+00 + 1.2819673316086226e+00 2.7470397070418620e+00 2.2044607049283784e+00 + 1.3609253585247920e+00 2.6140983615044995e+00 2.0802516721412379e+00 + 1.4374951891569394e+00 2.4745065140433256e+00 1.9094178195764335e+00 + 1.5208156591583375e+00 2.3077535706000836e+00 1.7154733955303567e+00 + 1.6082211005390277e+00 2.0200358837272190e+00 1.6475351582035231e+00 + 1.6904821699369474e+00 1.5601135117748781e+00 1.8599899937375393e+00 + id 12446 + loc 4.8676991462707520e-01 3.3731275796890259e-01 411 + blend 0.0000000000000000e+00 + interp 5.3163360938873261e-01:4.0912368675939864e-01:5.7900935322240055e-02:5.3162829305263870e-01:6.6930743214399147e-01:2.7001193730028972e-01:1.3748070217040933e+00:4.1650905281246797e-01:1.9999530051037837e+00:3.8932850441223898e-01:2.3590856636288784e+00:4.1408514823434861e-01:2.9185111518390601e+00:3.8888932784484870e-01:3.5264693601924875e+00 + CVs 20 + -8.1298059506752215e-02 1.4249276975919109e-01 -7.2855928368626666e-01 + -1.6107701030473981e-01 1.8157116329644007e-01 -1.2943248444288893e+00 + -2.1793503821628493e-01 1.8180661285797273e-01 -1.8281986656279632e+00 + -2.4535495886457442e-01 1.6212498989415669e-01 -2.3765219822186965e+00 + -2.4439857219200301e-01 1.1855831119788351e-01 -2.9232204508605015e+00 + -2.2273341522036083e-01 5.0919264167213818e-02 -3.4524335249093099e+00 + -1.8993479763140786e-01 -3.9644305819606540e-02 -3.9487007265593865e+00 + -1.5422843864906852e-01 -1.5213493891631114e-01 -4.3993232689030775e+00 + -1.2227399770279468e-01 -2.8391879996335967e-01 -4.7989178318899164e+00 + -9.8951100081327237e-02 -4.3037112278984035e-01 -5.1479493955758002e+00 + -8.4960104285974059e-02 -5.8638424355137286e-01 -5.4520379352541202e+00 + -7.7358989332869554e-02 -7.4859754182267180e-01 -5.7228074555486232e+00 + -7.3296086611302436e-02 -9.1726465407407387e-01 -5.9734851080037892e+00 + -7.0868905552848804e-02 -1.0952319770727552e+00 -6.2128920663288021e+00 + -6.9369852575087321e-02 -1.2841570878493025e+00 -6.4431130042096800e+00 + -7.1197939267187871e-02 -1.4844920209262775e+00 -6.6626548892482456e+00 + -7.9554753584657356e-02 -1.6985472619279318e+00 -6.8674640377254637e+00 + -8.9647758388393783e-02 -1.9309087434956638e+00 -7.0456331512965686e+00 + -1.0197216558452610e-01 -2.1648165875158214e+00 -7.1202264149206034e+00 + id 12447 + loc 2.1695657074451447e-01 6.8316739797592163e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1988494233857332e-01:3.0921881467057932e-01:3.8774996532380157e-01:3.2812524183454689e-01:9.9994235072077231e-01:4.1988074348914994e-01:1.6300026848257265e+00:3.3391367001466665e-01:2.3161062322153132e+00:4.0947259027599853e-01:3.0000034612126294e+00:3.1161592929769860e-01:3.5377953647728959e+00 + CVs 20 + 6.1977547503880896e-02 3.3295550006281682e-01 -2.6700997004896809e-01 + 1.7249890669545154e-01 6.7979315986568911e-01 -5.3614791061356837e-01 + 2.9410876413933290e-01 1.0488561133280403e+00 -8.0956774296041278e-01 + 4.0696581017204891e-01 1.4382571833690170e+00 -1.0910900321752550e+00 + 5.0169642476978382e-01 1.8405651236958742e+00 -1.3896642931491985e+00 + 5.6958400880648652e-01 2.2443588242064099e+00 -1.7157125330564380e+00 + 6.0575876022297603e-01 2.6350082200522751e+00 -2.0795958281994524e+00 + 6.1256881641945582e-01 2.9933900901257040e+00 -2.4902437299245759e+00 + 6.0387434970308873e-01 3.3008780670220723e+00 -2.9457208341909240e+00 + 6.0581724127973791e-01 3.5538195839371016e+00 -3.4246985261378446e+00 + 6.4566744559886968e-01 3.7592114664445755e+00 -3.9116775191237432e+00 + 7.4343578864593440e-01 3.9070191933986624e+00 -4.4259995769654408e+00 + 9.1270573810376610e-01 3.9625014720084195e+00 -4.9838769326097774e+00 + 1.1546436494998136e+00 3.9022004913611394e+00 -5.5444274292165545e+00 + 1.4547989138010877e+00 3.7373416057653670e+00 -6.0550246203287568e+00 + 1.7850290637813999e+00 3.4799249811036246e+00 -6.5129243793378313e+00 + 2.0944998772006964e+00 3.1367797588705466e+00 -6.9448323397654832e+00 + 2.3270676126275460e+00 2.7545628274190377e+00 -7.3485510483366756e+00 + 2.4821662159708811e+00 2.4554491335258986e+00 -7.6354452071353265e+00 + id 12448 + loc 9.4592410326004028e-01 7.1581654250621796e-02 1048 + blend 0.0000000000000000e+00 + interp 3.9884498404591012e-01:2.2612106214892161e-01:6.1460528232551925e-01:3.4261775850976067e-01:1.8288184571118806e+00:3.9884099559606967e-01:2.2971358713759837e+00:3.4655578757092942e-01:3.0015849475336465e+00:2.0208327660250766e-01:3.5591099998356057e+00 + CVs 20 + -2.6917489825530383e-02 3.5305228131999017e-01 6.1625218767496470e-01 + -8.7992194780218080e-02 6.9639522149264799e-01 1.1676915944413198e+00 + -1.9546073344586129e-01 1.0638827591224675e+00 1.6467076129008338e+00 + -3.7316832444956860e-01 1.4759313154229181e+00 2.0526056863947630e+00 + -6.6578518499880601e-01 1.9187046586553360e+00 2.3647214577977342e+00 + -1.0955740730891974e+00 2.3383003442923860e+00 2.5696080153900485e+00 + -1.6590358494384860e+00 2.6496172828998001e+00 2.6843763183366578e+00 + -2.3152096463417626e+00 2.7477161745051952e+00 2.7215590000547105e+00 + -3.0090049475389513e+00 2.5648923562602834e+00 2.6603636977759209e+00 + -3.6613664396128041e+00 2.0762278844153861e+00 2.4885740681772646e+00 + -4.1013304183223447e+00 1.3462495838116830e+00 2.1221446433427547e+00 + -4.1787074642097259e+00 5.8553845335048460e-01 1.5094725618819598e+00 + -3.8763559868532256e+00 7.2813557013017449e-02 7.1844134716269781e-01 + -3.3275400037221221e+00 7.8967198847309517e-03 -6.6217149869549297e-02 + -2.7354648158962180e+00 3.7348132207990692e-01 -6.5423173326070305e-01 + -2.2515156621003203e+00 1.0080044638563503e+00 -9.3067319534088866e-01 + -2.0594082753184804e+00 1.7080920698950353e+00 -7.0599023347556944e-01 + -2.5553501002613439e+00 1.8019288011999861e+00 1.3009590000106919e-01 + -2.4896395091173260e+00 2.3195234928554669e+00 4.8786102486344951e-01 + id 12449 + loc 3.7863934040069580e-01 5.7520961761474609e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1092317118360883e-01:2.8330613746345307e-01:9.5014248824692782e-02:2.6688888658813947e-01:1.0792244708662613e+00:2.9366283681783112e-01:1.9842628243194298e+00:2.6603181157783751e-01:2.6323043144217513e+00:4.1091906195189704e-01:3.3773320192321092e+00 + CVs 20 + 1.1684255550038856e-01 3.7703043023517435e-01 -3.2490737083937582e-01 + 2.6595843890682791e-01 7.5869753612417867e-01 -6.6080910183557118e-01 + 4.2845307451206954e-01 1.1459856094136256e+00 -1.0045061613890591e+00 + 5.9597877296572266e-01 1.5304102484738775e+00 -1.3462118794552671e+00 + 7.5011847496805562e-01 1.8727524347367364e+00 -1.6965007671423524e+00 + 8.5434852367702552e-01 2.1107681101266005e+00 -2.0826633349249954e+00 + 8.7897837025386871e-01 2.2019306614006631e+00 -2.4963625128265141e+00 + 8.0998167905816276e-01 2.1279814098305501e+00 -2.8739696366071321e+00 + 6.6018129129098413e-01 1.9334698549497666e+00 -3.1457029968063668e+00 + 4.7275482775277555e-01 1.6969589013978323e+00 -3.3314746603565424e+00 + 2.8732829451492276e-01 1.4312539282871299e+00 -3.4945984801044321e+00 + 1.3684447746297063e-01 1.0953259129137389e+00 -3.6922393798565811e+00 + 5.1253045751578283e-02 6.6317505058000303e-01 -3.9543110442743568e+00 + 5.3370359670374318e-02 1.8609571424758328e-01 -4.2950345657681392e+00 + 1.4094491331933079e-01 -2.3588568107493357e-01 -4.7259447662305716e+00 + 2.8879102126315931e-01 -5.1604116883459716e-01 -5.2477161354070745e+00 + 4.5944143533673876e-01 -5.8772359857630674e-01 -5.8311806641488504e+00 + 5.8987642380480920e-01 -4.6372780386063128e-01 -6.3048019433475400e+00 + 6.3248773763667221e-01 -2.9438092877772010e-01 -6.4336298382498027e+00 + id 12450 + loc 9.8722016811370850e-01 2.4914339184761047e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7572180730749299e-01:3.1375285154851373e-01:4.4648144344131557e-03:2.1568427055721465e-01:9.9111255857057146e-01:3.7480593197380074e-01:1.4176615657204843e+00:3.7571805008941994e-01:1.9748691831193208e+00:2.9131756390241154e-01:2.4463544866925813e+00:2.9921842273678317e-01:3.0032581002520304e+00 + CVs 20 + -1.1852087831906929e-01 3.7956188010640679e-01 1.3092915810105230e-01 + -2.2268958379405837e-01 7.7147422303848001e-01 2.8310049003224647e-01 + -2.9832156327958670e-01 1.1770515169020808e+00 4.4051154464949843e-01 + -3.3052484123484893e-01 1.5943145025417980e+00 5.7677441312697220e-01 + -3.1405110064187591e-01 2.0113640486016635e+00 6.7777979900350593e-01 + -2.7203644634147522e-01 2.3956025038234627e+00 7.8572376691382884e-01 + -2.4966247538523872e-01 2.6886091572479165e+00 9.7310496424625992e-01 + -2.7936694092025582e-01 2.8500411317969156e+00 1.2513141736938505e+00 + -3.7800986924696645e-01 2.8743595860228659e+00 1.5771663812335230e+00 + -5.5607675635556941e-01 2.7700385876796725e+00 1.8866912897849908e+00 + -8.1308392740591517e-01 2.5700679138776872e+00 2.1291763218434769e+00 + -1.1265378233841568e+00 2.3154510839289726e+00 2.2787242490284148e+00 + -1.4536502356824150e+00 2.0325145566689402e+00 2.3385767488230780e+00 + -1.7385797028557464e+00 1.7233123954257370e+00 2.3214239109163461e+00 + -1.9104411401435746e+00 1.3912084734891412e+00 2.2376091518823289e+00 + -1.9270518852825091e+00 1.0668091913839302e+00 2.0966280911724082e+00 + -1.7660716309690301e+00 8.3015761164481694e-01 1.8992685091207855e+00 + -1.4581880467749928e+00 8.0288345038568354e-01 1.7184141996462685e+00 + -1.1964802831713539e+00 5.8881548174474418e-01 1.4510944300916684e+00 + id 12451 + loc 5.1740199327468872e-02 1.7009226977825165e-01 397 + blend 0.0000000000000000e+00 + interp 4.6136514872185569e-01:3.5119781072093353e-01:1.3278164658046376e-01:4.6136053507036850e-01:7.2986340450560627e-01:2.9762456709906493e-01:1.2014970049238745e+00:2.4951116582760205e-01:2.0246038074502399e+00:4.3911765224854993e-01:2.7357184056702151e+00:3.1998324680145546e-01:3.1986498284677358e+00 + CVs 20 + -2.7341526268861083e-01 2.8581967138173103e-01 -1.0462894976764630e+00 + -4.5721402600609673e-01 3.5071551880296054e-01 -1.7343467674456718e+00 + -5.8681981334992361e-01 3.1825319968026794e-01 -2.3424629594401254e+00 + -6.6628465060978670e-01 2.4525249226470791e-01 -2.9765442794406121e+00 + -6.9349034539203624e-01 1.3643548385216253e-01 -3.6162077779506436e+00 + -6.7866176355215158e-01 2.7826478419212819e-03 -4.2450001270103215e+00 + -6.4184149997969875e-01 -1.4305792206876722e-01 -4.8541720768879904e+00 + -6.0427789839761747e-01 -2.9614498925279031e-01 -5.4438454827640221e+00 + -5.8085063390535296e-01 -4.6857382652471324e-01 -6.0217715404859637e+00 + -5.7908259489459746e-01 -6.8918040669630032e-01 -6.5886227729624451e+00 + -6.0589978576653725e-01 -9.8424720522770448e-01 -7.1269859291979554e+00 + -6.6671644882439274e-01 -1.3580947884962629e+00 -7.6073470216655670e+00 + -7.5411847168541768e-01 -1.7996789068603611e+00 -8.0068660498697888e+00 + -8.4894963972299109e-01 -2.2954034564484465e+00 -8.3186721249775513e+00 + -9.3657747573818417e-01 -2.8290679459645931e+00 -8.5410747360130017e+00 + -1.0106129999568316e+00 -3.3769483629142840e+00 -8.6736406034485665e+00 + -1.0656216912829963e+00 -3.9142936440462428e+00 -8.7198774505762380e+00 + -1.0950137305942800e+00 -4.4245726034671939e+00 -8.6879157408933612e+00 + -1.0980310700752609e+00 -4.8856448756095947e+00 -8.5827275480103786e+00 + id 12452 + loc 7.0972889661788940e-01 3.4584674239158630e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9632982199782524e-01:3.9632585869960529e-01:2.9909769937450137e-01:2.8958630814979752e-01:9.9774300894326762e-01:2.8911421749951216e-01:1.6745973047257594e+00:2.9765818861037280e-01:2.1768264887368631e+00:3.0307114708703525e-01:2.9942640163301810e+00:2.5198955224948999e-01:3.8005160745530362e+00 + CVs 20 + -2.5148886512140547e-02 2.1795041274708027e-01 2.8626547997088136e-01 + -7.1443277023772483e-02 4.0297541220565014e-01 5.3880794576080804e-01 + -1.1573259259532237e-01 5.7106274208476215e-01 7.7348806916519552e-01 + -1.4931698335755111e-01 7.2954392516258126e-01 1.0017806921323056e+00 + -1.8251905866557055e-01 8.8188240392084205e-01 1.2410831261138180e+00 + -2.1611270695263018e-01 1.0287311048024637e+00 1.4993054734565885e+00 + -2.3610930350126125e-01 1.1699133235801367e+00 1.7665463904464398e+00 + -2.2892435631773567e-01 1.3072303272489929e+00 2.0237836782759286e+00 + -1.9445289067814775e-01 1.4465315024559662e+00 2.2524366346213878e+00 + -1.4095672174577145e-01 1.5990473301007555e+00 2.4450439857219792e+00 + -7.4960346203966743e-02 1.7712875644769288e+00 2.6213000562698014e+00 + 4.7868464029732216e-04 1.9458316220721688e+00 2.8209253882422476e+00 + 9.2468824937945504e-02 2.0820427996274518e+00 3.0711085319908067e+00 + 2.1243978366284755e-01 2.1404329437362652e+00 3.3701354104352239e+00 + 3.4847898981902348e-01 2.1157288243237731e+00 3.6919121216897670e+00 + 4.5792999801409850e-01 2.0478523895978396e+00 3.9966972019105045e+00 + 5.0223879775750180e-01 1.9943058527498205e+00 4.2540568615815761e+00 + 5.1275330351374970e-01 1.9579745025894697e+00 4.4709165280752270e+00 + 7.5657592953781583e-01 1.7412584969364699e+00 4.5930001374298994e+00 + id 12453 + loc 4.0939375758171082e-01 6.2453347444534302e-01 406 + blend 0.0000000000000000e+00 + interp 6.6628318230862293e-01:2.8975710527628440e-01:5.6756043052919147e-02:4.2391811231264376e-01:8.9540238094828317e-01:3.5959438422327195e-01:1.4964671733066710e+00:6.6627651947679989e-01:1.9264658619920392e+00:6.6570533262876208e-01:3.1229883594947485e+00:3.6512722425235972e-01:3.5959080016851201e+00 + CVs 20 + 3.3511415454173810e-01 2.7303105616469003e-01 -1.3040824396196593e-01 + 5.7269546951502059e-01 4.7048556880175219e-01 -2.2759483953445420e-01 + 8.0406560292485707e-01 5.8971076998132477e-01 -2.9162686880773475e-01 + 1.0643158092578635e+00 6.7889273333708344e-01 -3.2526593243035995e-01 + 1.3460470793844335e+00 7.3294472619020135e-01 -3.2786583872054076e-01 + 1.6407577892446430e+00 7.4707069580651231e-01 -3.0104681617849716e-01 + 1.9398327083605960e+00 7.1893047799119780e-01 -2.4722821437248585e-01 + 2.2354240448362410e+00 6.4981942639373969e-01 -1.6832477812651930e-01 + 2.5200286766816173e+00 5.4356253271661492e-01 -6.8765109146274039e-02 + 2.7874579183397481e+00 4.0659731581257497e-01 4.0110144354630506e-02 + 3.0367864752148082e+00 2.4912368039969879e-01 1.4557725359427748e-01 + 3.2738959609907221e+00 8.3727070929151770e-02 2.4538194309611860e-01 + 3.5076006585155413e+00 -7.7858679517927465e-02 3.4543644254056899e-01 + 3.7448123413655261e+00 -2.2641656364704388e-01 4.4500443757664365e-01 + 3.9901371379680994e+00 -3.5515388544548032e-01 5.3439042989910990e-01 + 4.2462891461425549e+00 -4.6102691100195359e-01 6.0702533077250098e-01 + 4.5135042071741243e+00 -5.4550263029777279e-01 6.6729984305918488e-01 + 4.7913512107106095e+00 -6.1079715886724628e-01 7.2463025800727199e-01 + 5.1205857418670000e+00 -6.0469762472204369e-01 8.7452159704227084e-01 + id 12454 + loc 7.4128413200378418e-01 6.0397225618362427e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0642304086281054e-01:3.4019088764198541e-01:5.5552503996286529e-01:3.6047256219589868e-01:1.4293105854962382e+00:5.0641797663240196e-01:1.9979986012691127e+00:3.7314536860401692e-01:2.4985128628702276e+00:5.0151033570517833e-01:3.0007439524795942e+00:3.2968159334702263e-01:3.4877157028139929e+00 + CVs 20 + 1.3992130384507223e-01 2.9682385236676179e-01 -5.4376601126035859e-02 + 2.9451891318750784e-01 5.9610719785707678e-01 -1.0055585764595582e-01 + 4.7310806387978360e-01 8.9367520138698908e-01 -1.5964167653993139e-01 + 6.8120973195993972e-01 1.1811898294777008e+00 -2.5054813843945523e-01 + 9.1994111598808292e-01 1.4475030221621057e+00 -3.8921233469691668e-01 + 1.1848413738501129e+00 1.6750321107747626e+00 -5.8902653489784418e-01 + 1.4641240585936373e+00 1.8414550796357583e+00 -8.5713028535394331e-01 + 1.7375465078844929e+00 1.9239859166700861e+00 -1.1912084236845049e+00 + 1.9751191292021402e+00 1.9046685262153935e+00 -1.5751631618891377e+00 + 2.1435327036093121e+00 1.7786192014857107e+00 -1.9765906675709330e+00 + 2.2220884474794049e+00 1.5589711956642909e+00 -2.3563049619482848e+00 + 2.2066092178370655e+00 1.2701568139417514e+00 -2.6832774697020692e+00 + 2.1011571654392678e+00 9.3837343887233227e-01 -2.9386388695957084e+00 + 1.9150326480874593e+00 5.8149062533900886e-01 -3.1140124567569716e+00 + 1.6581082516291055e+00 2.0855914586589130e-01 -3.2427296596082793e+00 + 1.3421513473740458e+00 -1.2397365491838919e-01 -3.4588556055074671e+00 + 1.0394725894466026e+00 -2.4693085571969875e-01 -3.8643791140111592e+00 + 8.7950513226062366e-01 -1.2999580593789917e-02 -4.2905643952200148e+00 + 8.0912636088646894e-01 2.2184727700691131e-01 -4.3524132146824668e+00 + id 12455 + loc 3.5918968915939331e-01 2.5720959901809692e-01 409 + blend 0.0000000000000000e+00 + interp 5.1150422134049722e-01:3.6985140919883475e-01:4.9326225090624165e-01:2.9021866532379520e-01:1.5145271281839983e+00:5.1149910629828388e-01:2.0522389960946010e+00:4.3192878842343219e-01:2.6994723076211731e+00:2.9319018794267898e-01:3.1863442126464356e+00:3.9580687659330205e-01:3.9801039332529315e+00 + CVs 20 + -1.9519226077791918e-01 1.8956693806942304e-01 -3.1471842131590222e-01 + -3.9462113153920342e-01 3.2841985490259384e-01 -5.7211923986108149e-01 + -5.9248564197559805e-01 4.3956481180788143e-01 -8.1989680824288269e-01 + -7.8250199111037999e-01 5.2886831332707196e-01 -1.0686929068305131e+00 + -9.6614723790518564e-01 5.9214355759428439e-01 -1.3158359098178447e+00 + -1.1456934689370077e+00 6.3009775897600440e-01 -1.5650173350071610e+00 + -1.3191974232425170e+00 6.5360034027765723e-01 -1.8216562372429912e+00 + -1.4800781370634561e+00 6.7629652299666720e-01 -2.0895026089182291e+00 + -1.6190999606818099e+00 6.9950309940919664e-01 -2.3729346623811338e+00 + -1.7283207525217654e+00 7.1632051911378269e-01 -2.6770296640419082e+00 + -1.8024925641128207e+00 7.2388062407158826e-01 -3.0054518961588936e+00 + -1.8403962461114785e+00 7.1924753309703071e-01 -3.3636563175614462e+00 + -1.8462615875109789e+00 6.8720577105152381e-01 -3.7606761694992259e+00 + -1.8217381908552348e+00 6.0304117055705508e-01 -4.1993317907956218e+00 + -1.7557041195344167e+00 4.5150629552168065e-01 -4.6649356919550602e+00 + -1.6290677378901544e+00 2.3309321774313529e-01 -5.1253774731970987e+00 + -1.4315996377597933e+00 -5.2438483086434839e-02 -5.5350280484657421e+00 + -1.1667410903601607e+00 -4.1505296489445431e-01 -5.8382272739157797e+00 + -8.3156943735618361e-01 -8.9057359664029034e-01 -5.9744003463937343e+00 + id 12456 + loc 7.4037760496139526e-01 4.6181651949882507e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5414590026204418e-01:3.4784919616283216e-01:4.6129883887186585e-01:2.7120422188475291e-01:1.0199890474171691e+00:3.5414235880304157e-01:1.9447689415059588e+00:2.8892977545980131e-01:2.3418968173159844e+00:2.9077507582008955e-01:3.0017886942193197e+00:2.9353045511759579e-01:3.6804796368397668e+00 + CVs 20 + -1.0083062291466251e-02 4.0619987202346464e-01 -3.5338280859423304e-01 + -3.8206183754683348e-02 7.4525478591128780e-01 -5.6623860232992018e-01 + -7.5302379592315186e-02 1.0712336748396767e+00 -7.3768084964516989e-01 + -1.2868633049582878e-01 1.4174134606342572e+00 -8.9798556621346326e-01 + -2.0887440832999038e-01 1.7742730271781206e+00 -1.0252440980841115e+00 + -3.3087815094326378e-01 2.1314170279998255e+00 -1.0883809350418878e+00 + -5.2197717818555578e-01 2.4699176401295682e+00 -1.0308919099846747e+00 + -8.0559609863906001e-01 2.6995260433648376e+00 -7.4854730594104579e-01 + -1.0609612900414154e+00 2.6108974648785805e+00 -2.7647032438806973e-01 + -1.1504019646020760e+00 2.2860742089664319e+00 9.4834375435302820e-02 + -1.1414994870942727e+00 1.9040114508099366e+00 3.2465218928128559e-01 + -1.0910666681201473e+00 1.5120947936821389e+00 4.6166503247653812e-01 + -1.0266459667253729e+00 1.1402947375035739e+00 5.5186616630751972e-01 + -9.5398158550931611e-01 8.3186506042693598e-01 6.5772673281637395e-01 + -8.8136631794207687e-01 6.9938075247459652e-01 8.5993743838864123e-01 + -8.8602544574272624e-01 9.8971014208825070e-01 1.1048270817612291e+00 + -1.1431154189046711e+00 1.6628190668922931e+00 6.5325027443857087e-01 + -1.2646237973813013e+00 1.5621517326409395e+00 -6.2940801473336472e-02 + -1.3458956946224654e+00 1.7213537297464483e+00 -6.2860805074977821e-02 + id 12457 + loc 1.5197548270225525e-01 3.5411635041236877e-01 1084 + blend 0.0000000000000000e+00 + interp 5.2748611881382879e-01:3.0725159093895538e-01:9.9822374249951551e-03:3.3691197668607570e-01:7.1847599865706169e-01:2.7891262813363260e-01:1.1436506649252134e+00:5.2748084395264072e-01:2.1088227697725825e+00:2.9723389483695428e-01:2.7334544448737828e+00:2.7441839899430509e-01:3.2918745234774569e+00 + CVs 20 + 4.2857413166728342e-01 4.0753164420402443e-01 3.0760097435113964e-01 + 7.6653814281281984e-01 7.3415526168273737e-01 5.8359525346877161e-01 + 1.0940243306321586e+00 1.0364888819711831e+00 8.5447705213630043e-01 + 1.4321910009058749e+00 1.3408822605766559e+00 1.1477895945864796e+00 + 1.7478779509968678e+00 1.6444426466188613e+00 1.4910407815171380e+00 + 1.9961149104139020e+00 1.9347940913536439e+00 1.9002224669412706e+00 + 2.1271967016549800e+00 2.1892758207647218e+00 2.3664719268535048e+00 + 2.0930629264485514e+00 2.3764172328537434e+00 2.8482631355306589e+00 + 1.8709156742258273e+00 2.4575495744386089e+00 3.2650682815595178e+00 + 1.5169650196384035e+00 2.4131982340755753e+00 3.5393721105296794e+00 + 1.1358494694601706e+00 2.2480511130276124e+00 3.6716373211153548e+00 + 8.1615876282345368e-01 1.9583637131346043e+00 3.7157478462577807e+00 + 5.9868438206869301e-01 1.5774647737831000e+00 3.7158559861950571e+00 + 4.1499184652886367e-01 1.1881963423773798e+00 3.6706084853558223e+00 + 1.7830026610753691e-01 8.6739850505980987e-01 3.5587173543676545e+00 + -1.1498097146063224e-01 7.0953262867714639e-01 3.4017875724612985e+00 + -3.8985874352804856e-01 7.7553345265144813e-01 3.2750246076508955e+00 + -5.4296608932207446e-01 9.8356337633551383e-01 3.2303272674371155e+00 + -7.6425775339682356e-01 1.0338548576093254e+00 3.1488036079439250e+00 + id 12458 + loc 8.1416958570480347e-01 3.8264006376266479e-01 416 + blend 0.0000000000000000e+00 + interp 3.6873911087967215e-01:2.5896059657470688e-01:5.0402283964196226e-01:3.4190947615384049e-01:1.4424301603287968e+00:2.6090798447497859e-01:2.1284037701402481e+00:3.1673970417623870e-01:3.0943289761916342e+00:3.6873542348856336e-01:3.7964700300412177e+00 + CVs 20 + -5.0372080728331325e-01 7.7885512021184947e-02 1.4212164365475585e-01 + -8.0150802267381549e-01 7.3358234612016154e-02 2.7875220788050920e-01 + -1.0668955286965942e+00 4.4046729711628929e-02 4.1822773218995402e-01 + -1.3553869586437106e+00 3.2180214287086117e-02 5.4148262300324823e-01 + -1.6658667764445916e+00 3.3712663149272015e-02 6.4744927578780964e-01 + -1.9981269387656400e+00 4.3034112526306845e-02 7.3548585684357159e-01 + -2.3493211715370563e+00 5.6095135755221737e-02 8.0144152722237905e-01 + -2.7142140636382006e+00 7.1431504229817033e-02 8.4167247493041675e-01 + -3.0892586423202935e+00 8.8219676105122380e-02 8.5812236051523683e-01 + -3.4708423910516961e+00 1.0641821768771731e-01 8.5382741775754423e-01 + -3.8431958415924834e+00 1.3741796565514619e-01 8.2165073030078462e-01 + -4.1785443356423499e+00 2.0673843407622816e-01 7.4397967273053167e-01 + -4.4770727622758120e+00 3.2057672236703816e-01 6.1355432634102103e-01 + -4.7841427734369271e+00 4.3662771082441076e-01 4.5934279077161477e-01 + -5.1277109467784374e+00 5.1397385622655789e-01 3.2023514854945334e-01 + -5.4952873171371053e+00 5.5139187591549987e-01 1.9332883605015527e-01 + -5.8676010817712489e+00 5.5663772262426559e-01 5.5617595448045232e-02 + -6.2312306172978404e+00 5.2658542126018393e-01 -9.2727955390638495e-02 + -6.4716045133085007e+00 4.4632981354411472e-01 -7.0873205258616956e-02 + id 12459 + loc 8.7522909045219421e-02 7.4166095256805420e-01 1048 + blend 0.0000000000000000e+00 + interp 5.0279544236671292e-01:3.1555785066008757e-01:9.6397399332402833e-01:5.0279041441228922e-01:1.5980383336547597e+00:3.1789757977871341e-01:2.1272671991109489e+00:4.6232223066485750e-01:3.0790488283632058e+00:3.0793856772788636e-01:3.9358316123629562e+00 + CVs 20 + 2.8724242707185954e-01 5.2911098381012278e-01 -3.1449915088345537e-01 + 5.5152082835637672e-01 1.0906716023294334e+00 -5.7986016624030046e-01 + 8.1687929242937329e-01 1.6727193926795023e+00 -7.5707031374212519e-01 + 1.1067048783948350e+00 2.2499276078345209e+00 -8.4544450201350574e-01 + 1.4508619363998034e+00 2.7932509431509627e+00 -8.6718354155468114e-01 + 1.8850311304052998e+00 3.2737913161742478e+00 -8.5258897197274464e-01 + 2.4383927727632648e+00 3.6504094927488007e+00 -8.2736347595207471e-01 + 3.1088681634484319e+00 3.8645990218737052e+00 -8.0334585929414670e-01 + 3.8630181165853452e+00 3.8520036154265669e+00 -7.9104945793088088e-01 + 4.6366605809480577e+00 3.5564995722193444e+00 -8.0715267929839662e-01 + 5.3151963251785777e+00 2.9610670828527974e+00 -8.2927228671806896e-01 + 5.7704655066706554e+00 2.1458963492607754e+00 -7.7592414190571479e-01 + 5.9552913802681005e+00 1.2625330657783103e+00 -5.8387843217110413e-01 + 5.9112664174607970e+00 4.3999133113539124e-01 -2.7183138555259612e-01 + 5.7151418600452892e+00 -2.1913960461961757e-01 2.3694046717673140e-02 + 5.3960895526245105e+00 -6.0469911204749072e-01 -3.6294513017932462e-02 + 4.8784838998941948e+00 -1.9828008949072646e+00 8.2365501524397589e-02 + 5.3917463052684473e+00 -1.7543965883526258e+00 5.6907242016476278e-01 + 5.5451909981537515e+00 -1.2801588578533387e+00 8.5953496494852755e-01 + id 12460 + loc 3.1200411915779114e-01 1.5919840335845947e-01 1074 + blend 0.0000000000000000e+00 + interp 3.1405986335798247e-01:3.1405672275934893e-01:3.3347461343683960e-01:2.6719115709498120e-01:1.3411903174118585e+00:2.7489896606830766e-01:2.4244989878029006e+00:2.6381272456960764e-01:3.3595479987115606e+00 + CVs 20 + -2.7303625586331953e-01 3.1303874107668822e-01 -3.3433148787605366e-02 + -5.4281726089383064e-01 6.4580922450762657e-01 -8.2680974290522874e-02 + -8.1138550894523376e-01 1.0109894019850827e+00 -1.3370080309754695e-01 + -1.0567224904956840e+00 1.4175509654395682e+00 -1.7085340213057998e-01 + -1.2549374407357539e+00 1.8416487367221850e+00 -1.8471403636620809e-01 + -1.4405248230438068e+00 2.2169841810622524e+00 -1.8481369336974762e-01 + -1.6698917568593077e+00 2.4792993047113341e+00 -1.9585983707407495e-01 + -1.9596233879696083e+00 2.6210572430308146e+00 -2.4349251580525810e-01 + -2.2863045660063337e+00 2.6552376270319100e+00 -3.5228908492675726e-01 + -2.5976127072741213e+00 2.5994184055768756e+00 -5.4073514725955274e-01 + -2.8421978651660780e+00 2.4925271576835888e+00 -8.0938534438887966e-01 + -2.9962341860469457e+00 2.3785685513041726e+00 -1.1339288280816142e+00 + -3.0738879017795573e+00 2.2747895110843790e+00 -1.4860036668499794e+00 + -3.0909681586435025e+00 2.1630721874724319e+00 -1.8501639025058294e+00 + -3.0446364493672444e+00 2.0092755284322452e+00 -2.2123073946894012e+00 + -2.9218447059247303e+00 1.7968477146619182e+00 -2.5478717636125308e+00 + -2.6892665979612107e+00 1.5369427571642253e+00 -2.8006891233561033e+00 + -2.3505214269554902e+00 1.3123993103899279e+00 -2.9041780609841776e+00 + -2.0492581047936356e+00 1.1962406363361731e+00 -2.9751567930376881e+00 + id 12461 + loc 8.2533168792724609e-01 8.8639616966247559e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8708096793841656e-01:2.5361137807735834e-01:1.6175976584245877e-01:3.7952631308444246e-01:8.2326675523383086e-01:3.1155541237830614e-01:1.5447535596266579e+00:3.8707709712873722e-01:2.3175921867966811e+00:2.3800448332457105e-01:3.0187278218548799e+00 + CVs 20 + 2.6664401546768312e-02 3.9820208137423385e-01 -2.1606930950333345e-01 + 3.0812751859415528e-02 7.7217950375530731e-01 -3.9307492103130481e-01 + 3.0216331612607152e-02 1.1463798300627408e+00 -5.5113110864506132e-01 + 4.3512664474364790e-02 1.5449408021353930e+00 -7.0934007282443534e-01 + 9.9036110976650937e-02 1.9854446910540358e+00 -8.8655486111539372e-01 + 2.3084968632057803e-01 2.4596041199114311e+00 -1.1151609135083520e+00 + 4.6087952851041386e-01 2.9196232973312126e+00 -1.4299860279584129e+00 + 7.8610150843021342e-01 3.3016566426577834e+00 -1.8428214734036685e+00 + 1.1843001678282190e+00 3.5576587076020001e+00 -2.3349721421732155e+00 + 1.6237738608867285e+00 3.6663454325467812e+00 -2.8697241693608637e+00 + 2.0656663214796227e+00 3.6345488861737598e+00 -3.4077922768358846e+00 + 2.4729768452761189e+00 3.4955787677167436e+00 -3.9125372590135061e+00 + 2.8384958776400429e+00 3.2980953988153257e+00 -4.3703911322784261e+00 + 3.1895208503366517e+00 3.0757783058929391e+00 -4.8032623619976658e+00 + 3.5347790487013926e+00 2.8312244177875026e+00 -5.2362847828059440e+00 + 3.8434319030634008e+00 2.5676857228854777e+00 -5.6686097210109310e+00 + 4.0830449373015005e+00 2.3084755130701446e+00 -6.1097693610576211e+00 + 4.2187268612171378e+00 2.0791655381419316e+00 -6.6196279420488873e+00 + 4.2131808342374750e+00 1.8965085759767333e+00 -7.2469814617286303e+00 + id 12462 + loc 7.4497342109680176e-01 6.8561804294586182e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2073709326975217e-01:2.7972140779020771e-01:6.1087305141483750e-02:3.3502487520998026e-01:7.7147640001688589e-01:4.2073288589881952e-01:1.1100058196771738e+00:3.0954091851273413e-01:2.0048498615651265e+00:3.2112309495217922e-01:2.8993801618806980e+00:3.0746205325335374e-01:3.5132128444123079e+00 + CVs 20 + 7.6714995232427752e-02 5.3813205021806898e-01 4.0884333960375041e-01 + 1.8345721232902665e-01 9.5305353004159554e-01 6.2241656934402301e-01 + 2.9994306424304434e-01 1.3206349727290070e+00 7.6668404006097002e-01 + 4.1752085208561718e-01 1.6611323326050318e+00 8.8529785646231551e-01 + 5.3522328145747577e-01 1.9615870350463289e+00 9.7523434917213503e-01 + 6.4639990661122704e-01 2.2052086087652927e+00 1.0304990023940350e+00 + 7.3758442285889969e-01 2.3744738916324213e+00 1.0472916573844797e+00 + 7.8771650068566945e-01 2.4573649145236480e+00 1.0389016263941131e+00 + 7.7294417403245519e-01 2.4631446792875682e+00 1.0496270529228695e+00 + 7.1553182781166647e-01 2.4577993018263991e+00 1.1139053853357443e+00 + 6.8682835724275149e-01 2.4791177442413082e+00 1.1634008051973983e+00 + 6.9745336479156395e-01 2.4734214986908807e+00 1.1404928979353235e+00 + 7.2628736790612702e-01 2.4013989590684934e+00 1.0566220675521141e+00 + 7.6266981313057158e-01 2.2525834236133786e+00 9.3627680875147801e-01 + 8.0574062116703393e-01 2.0318775645312765e+00 8.0711364687248732e-01 + 8.5759031585586831e-01 1.7600171195607368e+00 7.1420191029294955e-01 + 9.1713029022100390e-01 1.4615629371855023e+00 7.1594432900309424e-01 + 9.8649711131334250e-01 1.1153282371961470e+00 8.4222503195776011e-01 + 1.0719881535586591e+00 6.1280570438609572e-01 1.0469514005921010e+00 + id 12463 + loc 1.6108088195323944e-01 7.4607723951339722e-01 411 + blend 0.0000000000000000e+00 + interp 4.8440805297084610e-01:3.8338493312258320e-01:5.0441281339551913e-01:3.0036490486970169e-01:1.1758460196399456e+00:4.2413314501529153e-01:1.8511482292731261e+00:4.8440320889031641e-01:2.1353553497830688e+00:3.8769811336795923e-01:2.9451841674675010e+00:3.1966229247186195e-01:3.9711566056586625e+00 + CVs 20 + 8.2899338562880653e-01 2.0171195965456873e-01 2.1071894094951651e-02 + 1.3917560709211616e+00 3.2336758976868729e-01 3.1969371698808507e-02 + 1.8777751272489065e+00 4.1639098986983403e-01 5.3295464110238069e-02 + 2.3857694559040930e+00 5.0841035465398443e-01 9.5612457488842617e-02 + 2.9147911057824638e+00 5.8621757927915463e-01 1.5521572497343003e-01 + 3.4625147241233418e+00 6.3677660031076255e-01 2.2743857601354417e-01 + 4.0256262266003811e+00 6.5002741448600077e-01 3.0835949381374328e-01 + 4.5994594697999736e+00 6.1801016309320800e-01 3.9870950572228481e-01 + 5.1762589233774836e+00 5.3339769459123554e-01 5.0328091176860557e-01 + 5.7450130981392826e+00 3.9123957826130784e-01 6.2386554462933907e-01 + 6.2925074147805908e+00 1.9052591776507621e-01 7.5506534493420285e-01 + 6.8044648994904273e+00 -6.6301812445375363e-02 8.8618987656098924e-01 + 7.2704038778819484e+00 -3.7204691276225255e-01 1.0094476777223529e+00 + 7.6896844981928263e+00 -7.1577808885771255e-01 1.1243103108527559e+00 + 8.0678827906413275e+00 -1.0875359086083214e+00 1.2320361138939309e+00 + 8.4089213314608529e+00 -1.4815179897137347e+00 1.3293327167864746e+00 + 8.7049315113685957e+00 -1.8941158757072225e+00 1.4085303884106550e+00 + 8.9323960412144210e+00 -2.3132305399884086e+00 1.4684268371442157e+00 + 8.9723563854611950e+00 -2.5852119790603494e+00 1.4863233497476434e+00 + id 12464 + loc 8.8607120513916016e-01 5.5761945247650146e-01 409 + blend 0.0000000000000000e+00 + interp 4.5952646917191048e-01:3.0452743084676470e-01:5.0160970137084882e-01:3.9723329528148960e-01:1.0959219944349448e+00:2.9101491648812305e-01:1.8057962236079388e+00:3.5251045018750993e-01:2.1584713780718428e+00:4.5952187390721877e-01:2.7724061048725623e+00:3.3849752211397022e-01:3.1087799975905526e+00:3.2252900751190672e-01:3.9220058642817577e+00 + CVs 20 + 3.6978114947292678e-01 1.3901173145328652e-01 -1.9491143334002925e-01 + 6.9668563778748482e-01 2.4968743562700821e-01 -3.7490256240650111e-01 + 1.0130613962245714e+00 3.5346070945340058e-01 -5.4119271611013653e-01 + 1.3316798002580477e+00 4.5797441016459367e-01 -6.9667500069147525e-01 + 1.6495181957491172e+00 5.5816285420228473e-01 -8.4516530171546034e-01 + 1.9658079132443849e+00 6.5014975059181612e-01 -9.9210069675307100e-01 + 2.2826514097544344e+00 7.3085036650137747e-01 -1.1431359649195230e+00 + 2.6049449501442812e+00 7.9495216109548128e-01 -1.3026003501615004e+00 + 2.9374774645639694e+00 8.3235040344649280e-01 -1.4723714783667012e+00 + 3.2777916126316686e+00 8.2952827980828281e-01 -1.6531612302699976e+00 + 3.6136649921088528e+00 7.7353131488108451e-01 -1.8468010771837720e+00 + 3.9312436896302900e+00 6.5493214610460226e-01 -2.0551909086431923e+00 + 4.2224010919093242e+00 4.7008852836445825e-01 -2.2773643070100253e+00 + 4.4820086361376559e+00 2.2254958322444507e-01 -2.5091722501877665e+00 + 4.7049476694963772e+00 -7.9731749224348114e-02 -2.7457628247787311e+00 + 4.8887132623558047e+00 -4.3230761669299822e-01 -2.9809351895792693e+00 + 5.0334836284898756e+00 -8.3738916121893103e-01 -3.2029881966035458e+00 + 5.1405110451563090e+00 -1.2871692596776705e+00 -3.3978140761602162e+00 + 5.2856133746765490e+00 -1.7106843118552986e+00 -3.5834292822679403e+00 + id 12465 + loc 3.3819034695625305e-02 9.4844818115234375e-01 1075 + blend 0.0000000000000000e+00 + interp 3.7477967036418380e-01:2.8365445147257778e-01:2.1951342433604148e-01:2.5628154097127387e-01:9.8189789143540140e-01:2.2071899225352862e-01:1.7436191566021833e+00:3.7477592256748016e-01:2.3206648808492853e+00:2.7750649401989730e-01:3.5095492961642156e+00 + CVs 20 + 1.2284211637212863e-01 3.9464649577287614e-01 -2.5998824228041822e-01 + 2.5808379100682416e-01 7.9653657699444136e-01 -5.3079869987967998e-01 + 3.6600492676783569e-01 1.2291533426767054e+00 -7.9893334131330929e-01 + 4.2216011006367354e-01 1.6965789794557182e+00 -1.0415168300827902e+00 + 4.3025465823066922e-01 2.1612993084407197e+00 -1.2493411520166726e+00 + 4.3557844327711182e-01 2.5430517392388747e+00 -1.4566171609221403e+00 + 4.9282125336782234e-01 2.7613793366878632e+00 -1.6862663788894874e+00 + 6.2013389223916260e-01 2.7937840275848815e+00 -1.8780515300157339e+00 + 7.9001847640699963e-01 2.6955071763518412e+00 -1.9228177977681782e+00 + 9.4251159982208821e-01 2.5986064969788112e+00 -1.8008582039511567e+00 + 1.0567449345863407e+00 2.5721739364935821e+00 -1.6163688445793161e+00 + 1.1640545524602888e+00 2.5789115227771875e+00 -1.4457396754101537e+00 + 1.3013081386830305e+00 2.5681260401560415e+00 -1.2926477380698298e+00 + 1.4636270101755187e+00 2.5107502232402865e+00 -1.1263093336316836e+00 + 1.6189042280392387e+00 2.3992763744560004e+00 -9.2262834097351443e-01 + 1.6998797749562140e+00 2.3113696802229797e+00 -6.8309984018665115e-01 + 1.6703552826597008e+00 2.4144319008360053e+00 -4.9363772773140713e-01 + 1.6681378126939514e+00 2.6056487250840723e+00 -3.8169918640987377e-01 + 1.6159625449856994e+00 2.5067554063421360e+00 4.9258496313271075e-02 + id 12466 + loc 2.7110281586647034e-01 9.1930156946182251e-01 1078 + blend 0.0000000000000000e+00 + interp 4.2654412486330406e-01:2.6270194372498901e-01:1.9795374291347811e-02:2.9376353739260436e-01:8.6292766799197462e-01:3.0201334431457910e-01:1.3505979818194351e+00:4.2653985942205547e-01:2.1650786488048657e+00:3.5839570961777850e-01:2.9471379685896526e+00:3.7822640912118738e-01:3.3749121932121007e+00 + CVs 20 + 4.4919399448432547e-02 2.0845098453007049e-01 -2.2225815055082448e-02 + 1.1028589396183651e-01 4.0632966272109117e-01 -5.9176538468887596e-02 + 1.7429049862839904e-01 6.0369170845095954e-01 -1.0384871020789194e-01 + 2.2759518903402334e-01 8.0210127890740246e-01 -1.5654727483542968e-01 + 2.6816403020374308e-01 1.0009142700047087e+00 -2.2290488785264967e-01 + 2.9113613583575548e-01 1.1990903135469928e+00 -3.0726258308815441e-01 + 2.8971949869007790e-01 1.3945370414912786e+00 -4.1104487387107136e-01 + 2.5751977569323192e-01 1.5842683854575008e+00 -5.3092610299659526e-01 + 1.9128844282323243e-01 1.7649478417503872e+00 -6.6202549408710221e-01 + 9.0985691113259312e-02 1.9324785249070437e+00 -8.0419851556671229e-01 + -4.2110368277675878e-02 2.0804546970750653e+00 -9.6252022630518008e-01 + -2.0430483115812528e-01 2.2011241499261649e+00 -1.1412190246310892e+00 + -3.8969148155459926e-01 2.2900283336803491e+00 -1.3375688359779709e+00 + -5.9163212101927265e-01 2.3521824208773205e+00 -1.5393461388368239e+00 + -8.0636271177055008e-01 2.4003632117200775e+00 -1.7350085927242178e+00 + -1.0393764350339738e+00 2.4346537781279203e+00 -1.9297780435061940e+00 + -1.2898254110680212e+00 2.4450392783046504e+00 -2.1329065767409192e+00 + -1.5313888438356680e+00 2.4403105091348172e+00 -2.3423306297090334e+00 + -1.7215767035633467e+00 2.4799862877628547e+00 -2.5141256426651384e+00 + id 12467 + loc 6.0992670059204102e-01 5.5815112590789795e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2990162372855836e-01:3.0441240651493690e-01:2.7916009938569253e-01:3.0114085100106691e-01:1.5695060342309395e+00:3.1126258897982706e-01:2.2915120770692790e+00:3.0026771292975385e-01:3.0325887741507076e+00:3.2989832471232111e-01:3.7369519262732305e+00 + CVs 20 + -6.6577457063931700e-02 3.1398452975303859e-01 2.6111344186660457e-01 + -1.0593008710962092e-01 5.5728316730851346e-01 4.0570219695481591e-01 + -1.5114079890133975e-01 7.7017200480358672e-01 5.1817912179203329e-01 + -2.2287380259851997e-01 9.7973173203341934e-01 6.4620081959023734e-01 + -3.2240099249808052e-01 1.1795752697462796e+00 7.8471118915290705e-01 + -4.5174028709381153e-01 1.3619165073353108e+00 9.2649329604179020e-01 + -6.1310028654082493e-01 1.5175988703615362e+00 1.0627843264186363e+00 + -8.0657995760777979e-01 1.6353657458146862e+00 1.1859908444098000e+00 + -1.0282954173524730e+00 1.7029349824649336e+00 1.2906113301903233e+00 + -1.2703353385585228e+00 1.7084597422977401e+00 1.3706102158620626e+00 + -1.5192802373490188e+00 1.6408045209111033e+00 1.4179112072696158e+00 + -1.7552307205732773e+00 1.4963955751377809e+00 1.4273476797196434e+00 + -1.9595803447341698e+00 1.2867723263472763e+00 1.4044029503307973e+00 + -2.1292472385662808e+00 1.0357056497832311e+00 1.3652420573120518e+00 + -2.2817507498836971e+00 7.6686992861715808e-01 1.3285734651264320e+00 + -2.4405098740279767e+00 4.9132916513715519e-01 1.3054655369246819e+00 + -2.6140529928729368e+00 2.0633110165284241e-01 1.2916103409309705e+00 + -2.8009612889885487e+00 -9.0138365767029160e-02 1.2646139243518588e+00 + -3.0556583729376046e+00 -3.4105120653339460e-01 1.2949173515643932e+00 + id 12468 + loc 7.8827105462551117e-02 8.1437671184539795e-01 406 + blend 0.0000000000000000e+00 + interp 6.6012262778870801e-01:3.8413176452636583e-01:9.4016720354294736e-01:6.6011602656243018e-01:1.7193323514917065e+00:4.2527077049741918e-01:2.0846266436268266e+00:5.3189416172387549e-01:2.7672045763182309e+00:3.9891348645128333e-01:3.1097196301048231e+00:4.1286719655254350e-01:3.9531244944538160e+00 + CVs 20 + 1.5927542652674864e-01 2.9756966204708046e-01 -2.0057692010206220e-02 + 1.9365506221001655e-01 4.8332520649939825e-01 -4.7840634453774761e-03 + 1.7509571317571421e-01 6.4253229142000612e-01 1.1077767113221469e-02 + 1.6252288009358751e-01 7.9691714885530274e-01 2.5304911290159555e-02 + 1.5030200444853764e-01 9.3874617590137421e-01 3.9330805856192350e-02 + 1.3170902204304891e-01 1.0595820342890794e+00 5.5096844683067692e-02 + 9.6478109001647272e-02 1.1498580157107348e+00 7.2262102284894630e-02 + 2.0350088742839778e-02 1.2021132716540230e+00 7.5164018338041302e-02 + -1.3308310628571363e-01 1.2646862798693244e+00 -1.3907334193187376e-03 + -2.3092817673966803e-01 1.4435095593842546e+00 -9.1444352319359129e-02 + -2.3530447112349046e-01 1.5679112604594840e+00 -4.8785113277794237e-02 + -2.1784302351379586e-01 1.6164671863270008e+00 5.8520688864173165e-02 + -1.8421362446083445e-01 1.6151131369827831e+00 1.9878987040382548e-01 + -1.3484201368153187e-01 1.5748465701105465e+00 3.5791358738613044e-01 + -6.6977460472240624e-02 1.5158033337457260e+00 5.2616395058340748e-01 + 2.8396990329226102e-02 1.4709668006555312e+00 6.9906286310617005e-01 + 1.5597017468082047e-01 1.4710387707856096e+00 8.6882938689697353e-01 + 2.9886048587270642e-01 1.5347224493132898e+00 1.0130885205983251e+00 + 4.8492848054598192e-01 1.6530424459355908e+00 1.1588229327738251e+00 + id 12469 + loc 6.7681741714477539e-01 5.6199401617050171e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0441696480816947e-01:4.0441292063852141e-01:1.6895572097467437e-01:2.7157492743510209e-01:9.7710541721277244e-01:3.0652290545760869e-01:1.6720811661416290e+00:2.5920036882298753e-01:2.2591986637279424e+00:3.1886072714078539e-01:3.0000482615810142e+00:2.9527090976273501e-01:3.5650536385799709e+00 + CVs 20 + -1.4404532927076108e-01 4.7328914942998063e-01 1.2669194785102983e-01 + -2.9734668129888187e-01 9.1609849396005194e-01 1.7862926778240790e-01 + -4.7548431569620697e-01 1.3387283860888941e+00 1.7894740008317767e-01 + -6.8683363679964660e-01 1.7324141066056020e+00 1.2544064359390328e-01 + -9.2891339891034119e-01 2.0754470873715283e+00 8.1357068447601710e-03 + -1.1875600594763891e+00 2.3462980521534282e+00 -1.7494370276003846e-01 + -1.4392777440400357e+00 2.5292439777540361e+00 -4.1559686699739584e-01 + -1.6603965146922979e+00 2.6207251761169554e+00 -6.9570478815182735e-01 + -1.8444995036144716e+00 2.6281320426771875e+00 -9.9548405623095293e-01 + -2.0120537987656348e+00 2.5566022001994986e+00 -1.3058095930026610e+00 + -2.1884323220138162e+00 2.3971888332857683e+00 -1.6223550400470734e+00 + -2.3827752391313823e+00 2.1359307491784070e+00 -1.9267913423954999e+00 + -2.5973547862316626e+00 1.7619942728746929e+00 -2.1877445484815596e+00 + -2.8408621898615274e+00 1.2646310952383444e+00 -2.3635831951014472e+00 + -3.1234467136286641e+00 6.5056368007995125e-01 -2.3896343789278252e+00 + -3.4331374021207521e+00 1.4141250806434913e-02 -2.2039429921514602e+00 + -3.7706351348681251e+00 -5.1561237453040776e-01 -1.8201385840487210e+00 + -4.1475291050649030e+00 -8.5187003314207088e-01 -1.3088268216216272e+00 + -4.3635027239137241e+00 -9.6397067582493345e-01 -9.3365679323821005e-01 + id 12470 + loc 4.6560031175613403e-01 3.4320205450057983e-02 372 + blend 0.0000000000000000e+00 + interp 1.2867187917233178e+00:1.2867087917233178e+00:1.0849859242951621e-01:5.3308866141118716e-01:1.3006388448998252e-01:8.4457222646007879e-01:2.0491566016297362e+00:7.0143637123441749e-01:2.1242388713097355e+00:3.2085089446186038e-01:2.6025034366750681e+00:3.3523357206752502e-01:3.0220768524782180e+00:3.0236599444331469e-01:3.9950764261867602e+00 + CVs 20 + -4.0596468392379091e-02 3.7143347391784381e-01 6.2029695418466213e-01 + -4.5616073955301234e-02 6.2865615980527267e-01 1.1638323328599141e+00 + -3.9873199534099374e-03 7.8071863186480017e-01 1.7265829806158319e+00 + 4.8746787768313427e-02 8.5709359983041078e-01 2.3382392858364560e+00 + 2.3640340956993466e-02 9.3423406584046231e-01 2.9301859152258767e+00 + -1.7761449973204757e-01 1.0802941785436602e+00 3.3827264809342292e+00 + -5.8068191764970412e-01 1.2423744513964405e+00 3.5276852993968673e+00 + -1.0800663706400617e+00 1.2993521237434156e+00 3.3070527668858527e+00 + -1.5645172655213293e+00 1.1704087796683469e+00 2.7880244339316498e+00 + -1.9513572261143777e+00 7.9637596770827301e-01 2.1011590810339396e+00 + -2.1941362472996602e+00 1.7679860112646950e-01 1.3874433668435231e+00 + -2.3046515522995761e+00 -5.8522095997820722e-01 6.8196684508965544e-01 + -2.3589249952641369e+00 -1.2960553206958565e+00 -1.2951050793284630e-01 + -2.4596363624010897e+00 -1.6804676054344247e+00 -1.1561322389298754e+00 + -2.6785041966443881e+00 -1.5697659654660439e+00 -2.1932405578546712e+00 + -2.9406824703547239e+00 -1.1862721079923335e+00 -2.9864668088538284e+00 + -3.1382986700655420e+00 -6.6929588303611665e-01 -3.5877059427046647e+00 + -3.2173626023094486e+00 -4.2279436246826618e-02 -4.0756130355698446e+00 + -3.1742211009538743e+00 6.3826686195895155e-01 -4.4638165345417562e+00 + id 12471 + loc 8.4275507926940918e-01 5.3095912933349609e-01 403 + blend 0.0000000000000000e+00 + interp 4.9671136867620841e-01:3.3645342919631710e-01:5.4036271081926901e-01:3.4475142249692164e-01:1.4462636475889208e+00:4.9670640156252166e-01:1.9997695074637085e+00:3.6851609353938369e-01:2.4872167785658608e+00:3.1419338265948227e-01:3.4974189216119989e+00 + CVs 20 + -1.1356952252370971e-02 7.2722206506788484e-02 2.7976229564158225e-02 + -3.0712561191326919e-02 1.4885702090776648e-01 5.6995852845013219e-02 + -6.1692171471701321e-02 2.3122293186254306e-01 7.9242006076965549e-02 + -9.1542706847944785e-02 3.2411691368531315e-01 1.0054390734955049e-01 + -1.1915970285938712e-01 4.2622219820352369e-01 1.2043882251676108e-01 + -1.4664321501759348e-01 5.3606556694648255e-01 1.3673295555030052e-01 + -1.7669995916229705e-01 6.5204136774357302e-01 1.4700861925318542e-01 + -2.1199039221269833e-01 7.7168082320476783e-01 1.4931961593818438e-01 + -2.5514714283866313e-01 8.9059751495112516e-01 1.4297126594284248e-01 + -3.0910445744614806e-01 1.0021905087720548e+00 1.2899914867542944e-01 + -3.7667474041704779e-01 1.0985894489637911e+00 1.1026213268392797e-01 + -4.5914835626684508e-01 1.1713760492217271e+00 9.1978498923078647e-02 + -5.5460643904868046e-01 1.2130870974643753e+00 8.1488059230802060e-02 + -6.5693771015526448e-01 1.2176797691157437e+00 8.7883025683793678e-02 + -7.5547774097851217e-01 1.1819771656635178e+00 1.2045874680253808e-01 + -8.3591969448432524e-01 1.1084158602535865e+00 1.8584202216444737e-01 + -8.8457046224356739e-01 1.0069723083630868e+00 2.8439492965395352e-01 + -8.9382388523626399e-01 8.9130538926483427e-01 4.0974078394675012e-01 + -1.0454802645682708e+00 8.4090853567041057e-01 4.1723037500280968e-01 + id 12472 + loc 2.5183650851249695e-01 4.7237247228622437e-01 397 + blend 0.0000000000000000e+00 + interp 6.3096876385943190e+00:2.9368095760536711e-01:1.9342891507501125e-04:3.0045550908204166e-01:9.9985162201864464e-01:4.5137962485566269e-01:1.9225341910695888e+00:7.7504012384774668e-01:1.9498295189476964e+00:5.5033910983335099e+00:1.9900708556348465e+00:5.9112880255519240e+00:1.9951288834374181e+00:6.3096776385943194e+00:1.9967492293107041e+00:5.7044746816696601e-01:3.9721486986780237e+00:1.8221549633901097e+00:3.9933075908246942e+00:1.6624368921936408e+00:3.9954701957715049e+00 + CVs 20 + -2.5103852068393956e-01 2.9221844334843716e-01 -1.3209335371820079e+00 + -4.3373869228659800e-01 3.3135703978513947e-01 -2.1997432558335732e+00 + -5.8526074304984377e-01 2.8100303086202333e-01 -2.9655189685980878e+00 + -7.1832120970972591e-01 1.9589232001747192e-01 -3.7340572065863373e+00 + -8.3063983564418331e-01 7.1962145233768260e-02 -4.4742984899524121e+00 + -9.2627055479763643e-01 -8.5313052491964803e-02 -5.1660758455568230e+00 + -1.0081010005463051e+00 -2.6695146610432879e-01 -5.8028650317442061e+00 + -1.0738573942237686e+00 -4.6696793286177934e-01 -6.3887502383890080e+00 + -1.1260990833483566e+00 -6.9007428288142381e-01 -6.9385643621491324e+00 + -1.1742366596866043e+00 -9.6041492046043531e-01 -7.4757815758249242e+00 + -1.2310596378067680e+00 -1.3137143340880681e+00 -8.0064139925841644e+00 + -1.3119887269377299e+00 -1.7813144978271158e+00 -8.5099196440243556e+00 + -1.4309764501681832e+00 -2.3767609891339081e+00 -8.9504107186476762e+00 + -1.5967045534150899e+00 -3.0933270105507322e+00 -9.2912679119627395e+00 + -1.8129837357866183e+00 -3.9038131294776184e+00 -9.5003924927647354e+00 + -2.0732295877732576e+00 -4.7639760280544214e+00 -9.5541595121833396e+00 + -2.3531224711404368e+00 -5.6240394410119086e+00 -9.4456588607403411e+00 + -2.6284760126213875e+00 -6.4350884192480313e+00 -9.2001776910725184e+00 + -2.9153398572008311e+00 -7.1490215264316399e+00 -9.0039633366425313e+00 + id 12473 + loc 7.6640421152114868e-01 7.3166146874427795e-02 416 + blend 0.0000000000000000e+00 + interp 5.1545762637362647e-01:2.6115922711194461e-01:8.9249240422122011e-01:3.8882157032904541e-01:1.7765037871363174e+00:4.5348658737764608e-01:2.1182451895567627e+00:2.8447994595394632e-01:2.9662197291880674e+00:3.4439773415442693e-01:3.4641771503108036e+00:5.1545247179736275e-01:3.9665826820585885e+00 + CVs 20 + -4.5353591289164519e-01 1.3188278017827390e-01 7.2804249382682221e-02 + -7.6611385318945846e-01 1.6432807711281927e-01 1.5879446015291671e-01 + -1.0528016499756134e+00 1.5965775109388836e-01 2.4112091882541675e-01 + -1.3526202692126970e+00 1.4769328309498020e-01 3.0282589117041292e-01 + -1.6609288075671105e+00 1.2695312275786252e-01 3.4237814430221541e-01 + -1.9740434205068254e+00 9.6727234637024373e-02 3.5830231303107646e-01 + -2.2874694535756355e+00 5.7663011593576119e-02 3.4708660923003087e-01 + -2.5961126056751294e+00 1.0845693508398702e-02 3.0628622771806946e-01 + -2.8968732799183274e+00 -4.3442594689196978e-02 2.3743612158109983e-01 + -3.1864725891021930e+00 -1.0449839242713077e-01 1.4311548092437454e-01 + -3.4504389005875642e+00 -1.6527284934245334e-01 2.2844874881107424e-02 + -3.6656381277188554e+00 -2.1263249191856604e-01 -1.2302602666482576e-01 + -3.8358889074311064e+00 -2.4655595103088190e-01 -2.8659171111288906e-01 + -4.0028837874306715e+00 -2.9394418909621223e-01 -4.4509637206944874e-01 + -4.1900668191801191e+00 -3.7680058265070304e-01 -5.7139139572383368e-01 + -4.3836672474832392e+00 -4.8948117976181171e-01 -6.6204436845812531e-01 + -4.5668401985610689e+00 -6.2063102448544938e-01 -7.2571036909749775e-01 + -4.7339913523715165e+00 -7.6753841517191268e-01 -7.6010087117543890e-01 + -4.8971112147466469e+00 -9.8039099282361408e-01 -6.7920326866507819e-01 + id 12474 + loc 6.8227106332778931e-01 3.4924149513244629e-02 413 + blend 0.0000000000000000e+00 + interp 4.5418875511111784e-01:2.9529408878019431e-01:5.5822544840832933e-02:4.5418421322356672e-01:5.9590155968321468e-01:3.8829327626010668e-01:1.3922791187893748e+00:1.5794365899758914e-01:1.9755040816353193e+00:3.1631160746847120e-01:2.6166920541898611e+00:3.4565686460330802e-01:3.0314069892012037e+00:3.7655214117014763e-01:3.6454442795732955e+00 + CVs 20 + -1.0962858023717805e+00 2.5308804854663447e-01 1.6376105073163111e-01 + -1.8526651001805698e+00 2.9967241979748216e-01 2.8536269492483979e-01 + -2.5269232951704259e+00 2.6138048306735917e-01 3.6821478548011738e-01 + -3.2092942001577844e+00 1.7495982406399846e-01 4.0892402477852346e-01 + -3.8765787175003004e+00 4.0523098882795039e-02 4.0136379858714705e-01 + -4.5075338775863543e+00 -1.4059811380360032e-01 3.5634762180427659e-01 + -5.0832516250720499e+00 -3.7112043994201460e-01 2.9471482882428796e-01 + -5.5862227480944240e+00 -6.5291151495640309e-01 2.3556358163920230e-01 + -6.0056948065734597e+00 -9.7884579033993324e-01 1.9477018988828074e-01 + -6.3388930708775737e+00 -1.3322300540644330e+00 1.8492563309911686e-01 + -6.5911777679401427e+00 -1.6899425516010436e+00 2.1259943017766542e-01 + -6.7828231992709398e+00 -2.0362022293995299e+00 2.7686586534832647e-01 + -6.9443317748478099e+00 -2.3729439457084820e+00 3.7132103199446198e-01 + -7.1008375526543155e+00 -2.7112829367958486e+00 4.8589141584208212e-01 + -7.2643514031419016e+00 -3.0601593083448568e+00 6.1012781411582884e-01 + -7.4352795611355615e+00 -3.4274515804552923e+00 7.3519292536069991e-01 + -7.6045288570331131e+00 -3.8242628580108784e+00 8.5122705588739600e-01 + -7.7582744658941838e+00 -4.2568800431055891e+00 9.4947800847705788e-01 + -7.8955154157685827e+00 -4.7449890866055711e+00 1.0292148931924787e+00 + id 12475 + loc 7.3887887410819530e-03 7.1826511621475220e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1974015480236215e-01:3.8823245178491728e-01:4.6162615031103316e-01:2.4744994537294590e-01:1.2691373717464600e+00:4.1973595740081415e-01:2.0031997724456070e+00:3.3350283003892994e-01:2.7028594171155307e+00:3.9421831207020902e-01:3.5586115538937824e+00 + CVs 20 + 1.6509532069518981e-01 2.6652247876769175e-01 -3.1894233848165765e-01 + 3.1636662463293763e-01 5.3649683785470625e-01 -5.9809087454043597e-01 + 4.6558238186848183e-01 8.0910651375332043e-01 -8.5916281764540914e-01 + 6.2114685421194782e-01 1.0825956235594170e+00 -1.1146451395596664e+00 + 7.8843059776755153e-01 1.3507461174693811e+00 -1.3698451340139151e+00 + 9.6987465184386235e-01 1.6082736096014085e+00 -1.6335387287758170e+00 + 1.1636741306342238e+00 1.8510148717604333e+00 -1.9185053429976111e+00 + 1.3635630998800348e+00 2.0731723212787379e+00 -2.2401629621927444e+00 + 1.5572043006840193e+00 2.2663246736472926e+00 -2.6124630376652060e+00 + 1.7287230019467215e+00 2.4198082204186475e+00 -3.0429684803549453e+00 + 1.8627009627770159e+00 2.5200590919216208e+00 -3.5296720160377402e+00 + 1.9452590141801840e+00 2.5515179164183710e+00 -4.0588343444489299e+00 + 1.9649885480635099e+00 2.5000444862176705e+00 -4.6075044561745848e+00 + 1.9137149750055906e+00 2.3542004648538435e+00 -5.1482502965684782e+00 + 1.7850709610671294e+00 2.1078213757724980e+00 -5.6478299229588353e+00 + 1.5755860530738679e+00 1.7755241354110036e+00 -6.0590369931787302e+00 + 1.2957767281210817e+00 1.4111308553327933e+00 -6.3305466651602096e+00 + 9.8076485414392356e-01 1.0913636445220245e+00 -6.4423854746579376e+00 + 6.9439332985530799e-01 8.6464722729342935e-01 -6.4360114724907520e+00 + id 12476 + loc 8.8810324668884277e-01 4.8079273104667664e-01 1084 + blend 0.0000000000000000e+00 + interp 4.9523557507777327e-01:2.8456728711746881e-01:2.7525770169772001e-01:4.9523062272202251e-01:9.8850417335157659e-01:3.1113146620792032e-01:1.6838183671207210e+00:4.8290614151174632e-01:2.2704829669749409e+00:4.5537051984313826e-01:2.8579179603334910e+00:2.9528735554870417e-01:3.0613029270493346e+00:3.5315207341289850e-01:3.8294582398541221e+00 + CVs 20 + 2.8955753224642850e-01 3.3162318710410393e-01 -1.6027544050058912e-01 + 5.4229318680507022e-01 6.5232141346518802e-01 -3.3257705984472652e-01 + 7.6767580530361323e-01 9.6524296032161416e-01 -5.1866127323365763e-01 + 9.8942545014498018e-01 1.2759306668381010e+00 -7.0272347613181296e-01 + 1.2331578942213504e+00 1.5879061081645296e+00 -8.6095799809147922e-01 + 1.5167195816193915e+00 1.9009273104774236e+00 -9.7255309863712847e-01 + 1.8546873801055210e+00 2.2116181694442165e+00 -1.0162288006211688e+00 + 2.2593978839483189e+00 2.5067251433275080e+00 -9.5783735585758223e-01 + 2.7103749329694948e+00 2.7463906513694143e+00 -7.5309746688870582e-01 + 3.1333896394453808e+00 2.8809277255945158e+00 -3.9675369495648849e-01 + 3.4646423384332019e+00 2.8960563249101936e+00 6.5653755536789093e-02 + 3.6897189484481214e+00 2.7908648665171301e+00 5.8312710682420010e-01 + 3.8293433808179533e+00 2.5368247477937089e+00 1.0903131612135346e+00 + 3.9090661188653089e+00 2.1259277012559474e+00 1.4927545753302420e+00 + 3.9184299255366675e+00 1.6391159572153617e+00 1.7691119156126760e+00 + 3.8328580817088409e+00 1.1974033896409042e+00 1.9893392577967255e+00 + 3.6696495948281176e+00 8.9618568971868029e-01 2.2073036767753935e+00 + 3.4639680280925846e+00 7.3467323068180845e-01 2.4589404362993066e+00 + 3.1795314152524363e+00 5.4121223317933220e-01 2.8742979793147514e+00 + id 12477 + loc 3.8517594337463379e-01 4.2442589998245239e-01 1076 + blend 0.0000000000000000e+00 + interp 3.8595733648323777e-01:2.8905921925803874e-01:6.2515441930170013e-01:3.0680700714716258e-01:1.4850066700313662e+00:3.0604796702393355e-01:2.0984413841139054e+00:3.0849443178277636e-01:2.9972813511819631e+00:3.8595347690987297e-01:3.6227140298513842e+00 + CVs 20 + -9.6823960903959713e-02 3.4469682309355409e-01 -1.2732885225041835e-01 + -2.1122143634403401e-01 6.8750281371486888e-01 -2.8971547487448546e-01 + -3.5584623393878584e-01 1.0268546278164623e+00 -4.5463684864045739e-01 + -5.4118273971260544e-01 1.3527987364397094e+00 -6.0901863205751261e-01 + -7.7430800127243349e-01 1.6496707186516530e+00 -7.5608914049834086e-01 + -1.0562876245191011e+00 1.8970627366015735e+00 -9.0535904680993762e-01 + -1.3826534472918461e+00 2.0725645859143680e+00 -1.0630927440989699e+00 + -1.7431185373187308e+00 2.1565442691513859e+00 -1.2211492409010809e+00 + -2.1201260070304584e+00 2.1361040825440036e+00 -1.3616131097862902e+00 + -2.4893442866362001e+00 2.0096479876218010e+00 -1.4689482771373921e+00 + -2.8263996769298272e+00 1.7863565909291648e+00 -1.5322101574034865e+00 + -3.1118673691218155e+00 1.4822534614448513e+00 -1.5398164681124638e+00 + -3.3387857631204820e+00 1.1261862974835328e+00 -1.4808749444945368e+00 + -3.5298936342626406e+00 7.6424202136661545e-01 -1.3407126875618993e+00 + -3.7150232886935197e+00 4.4337030688117429e-01 -1.0920451803442126e+00 + -3.8871476293186151e+00 2.0002248379565868e-01 -7.2838528326250751e-01 + -4.0179996972076912e+00 5.1953970024723795e-02 -2.8034130641248040e-01 + -4.1076241975591712e+00 -2.8859435449119841e-02 1.8539223262088084e-01 + -4.2775822839225492e+00 -3.0420420366470413e-01 4.5481003820264393e-01 + id 12478 + loc 9.4482702016830444e-01 8.4638649225234985e-01 1048 + blend 0.0000000000000000e+00 + interp 3.9139092610227716e-01:2.2040378432756882e-01:8.1903248152906838e-02:3.9138701219301614e-01:9.5468824204787661e-01:2.2600509109889827e-01:1.6909839557032913e+00:3.0447306748992259e-01:2.1502192381954259e+00:1.8585286735180512e-01:2.9713934057772158e+00 + CVs 20 + -7.1983182170677562e-02 7.1147038711374322e-01 -3.1083083883604190e-01 + -6.9158222012210682e-02 1.4232552900236883e+00 -6.2988460640926625e-01 + 3.4075425160467437e-02 2.1294779650403988e+00 -9.6382861098397044e-01 + 2.4322015290078028e-01 2.8208493807119717e+00 -1.2839938989784074e+00 + 5.7617441443438844e-01 3.5469453123961805e+00 -1.4704722310090950e+00 + 1.0761940294157264e+00 4.2473292497947792e+00 -1.3038947241057863e+00 + 1.6829149223809738e+00 4.6464237232716936e+00 -7.4339278318055246e-01 + 2.2728261690803810e+00 4.5934305539390072e+00 1.3766117991505400e-02 + 2.7459269807758226e+00 4.1084758663164953e+00 7.7474010493631984e-01 + 3.0192914371766220e+00 3.2815503439041498e+00 1.4137485355523713e+00 + 3.0551901910102162e+00 2.2541987411940485e+00 1.8872467199983971e+00 + 2.8628187200149773e+00 1.1669718761918897e+00 2.2168470417737334e+00 + 2.4301144867035758e+00 1.2536437284841107e-01 2.4808160912759831e+00 + 1.8046719513072387e+00 -7.9676482578481123e-01 2.8137978351887831e+00 + 1.1470577663852868e+00 -1.5464802557975244e+00 3.3935755476786378e+00 + 8.1053535340384120e-01 -1.9697327637849147e+00 4.3545690171289682e+00 + 1.0554224658220330e+00 -1.9598139734444791e+00 5.3894899887306291e+00 + 1.8340216298576961e+00 -1.7070478920319463e+00 6.1340899377083904e+00 + 2.5854459353190067e+00 -1.3675710899403044e+00 6.6823841761785179e+00 + id 12479 + loc 1.3451279699802399e-01 5.3852999210357666e-01 411 + blend 0.0000000000000000e+00 + interp 4.1145307986124863e-01:2.4765254669650696e-01:1.9088686369625807e-01:3.8171813285219197e-01:9.0732681249158476e-01:3.7873025968997542e-01:1.1230896000364421e+00:4.1144896533045006e-01:1.7238331144938477e+00:3.2100666981298898e-01:2.1171763683394595e+00:4.0703602555919627e-01:2.9210779291122106e+00:3.0665860889136082e-01:3.1958680982237224e+00 + CVs 20 + 8.3812205811712415e-01 9.3198468014005081e-02 -4.9441983123355709e-02 + 1.4587643801128203e+00 6.5466756664879167e-02 -1.2357141681040715e-01 + 2.0435505248690222e+00 -8.7573205706213963e-03 -1.7013716383048430e-01 + 2.6457578331769294e+00 -1.1028110254913226e-01 -1.7276426993120456e-01 + 3.2462963291858205e+00 -2.4091791151611019e-01 -1.3441445190160042e-01 + 3.8299620671559182e+00 -3.9993950345432738e-01 -6.4199102622122792e-02 + 4.3855185381231347e+00 -5.8870898881887856e-01 2.6701365072612351e-02 + 4.9001950942017647e+00 -8.1347277844363686e-01 1.2638510726525998e-01 + 5.3585003241479781e+00 -1.0824439657926583e+00 2.2030341770555656e-01 + 5.7396894854655081e+00 -1.4007540077860374e+00 2.9078595241625182e-01 + 6.0225360534669834e+00 -1.7646752520172178e+00 3.2284988023749739e-01 + 6.2065969164956769e+00 -2.1632308559176141e+00 3.0962554878155468e-01 + 6.3105153901035402e+00 -2.5878503094878953e+00 2.5413096127394541e-01 + 6.3481081825978078e+00 -3.0300855534749784e+00 1.5846451841222098e-01 + 6.3200398111728440e+00 -3.4741682746487594e+00 2.4761753303889814e-02 + 6.2189025404601601e+00 -3.9038783776129158e+00 -1.3693642747502430e-01 + 6.0460875056303545e+00 -4.3071166506025715e+00 -3.1368962085730678e-01 + 5.8272760941127348e+00 -4.6783863487975719e+00 -5.0964882025017644e-01 + 5.7356339204934690e+00 -5.2171750294379917e+00 -6.8317700225999700e-01 + id 12480 + loc 2.0518429577350616e-01 5.5139958858489990e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3646306521589198e-01:2.8502691192645330e-01:2.8929271123254285e-01:3.2004245030753437e-01:1.0232348075650377e+00:2.9747434530145045e-01:1.9957574606670236e+00:2.7240740339565062e-01:2.8289811509500025e+00:3.3645970058523983e-01:3.5437868298687678e+00 + CVs 20 + -1.9138840837979995e-01 4.8036866140913126e-02 3.0985932445791237e-01 + -2.9641143902210842e-01 6.8665516474195054e-04 4.5348672223352360e-01 + -3.6585224072412170e-01 -7.9654891598288952e-02 5.0549612786123632e-01 + -4.2093227389000265e-01 -1.5518028447746379e-01 5.5279381295700825e-01 + -4.5892586732679930e-01 -2.2180411123537405e-01 5.9659605700934593e-01 + -4.7831949256484146e-01 -2.7528134290833761e-01 6.3913720311713451e-01 + -4.8016939097367273e-01 -3.1151296996073885e-01 6.8481163723571292e-01 + -4.6843601480622138e-01 -3.2685340669563367e-01 7.3865140392289241e-01 + -4.5032202094877727e-01 -3.1907584979176279e-01 8.0523239695007920e-01 + -4.3667817580449181e-01 -2.8890098807866854e-01 8.8772542518367747e-01 + -4.4043983719411711e-01 -2.4028179143811140e-01 9.8664617296676860e-01 + -4.7388629658078585e-01 -1.7924840084950899e-01 1.0990011257367975e+00 + -5.4548827391228627e-01 -1.1157199122276412e-01 1.2191930705347143e+00 + -6.5783083183288926e-01 -4.0760044521280792e-02 1.3425997088524513e+00 + -8.0854530965133242e-01 3.1616772077231459e-02 1.4674379601075758e+00 + -9.9264102942477572e-01 1.0411157280710315e-01 1.5919626962622326e+00 + -1.2036327816546180e+00 1.7441868037735386e-01 1.7115541493227839e+00 + -1.4330252373262653e+00 2.3967157361140290e-01 1.8222303526241648e+00 + -1.6643718556301705e+00 2.6483896797910100e-01 1.9391304004828738e+00 + id 12481 + loc 5.7403200864791870e-01 3.6674484610557556e-01 409 + blend 0.0000000000000000e+00 + interp 4.6939779102549167e-01:3.1962481604647119e-01:2.7691460287029113e-01:4.6939309704758142e-01:1.1783898629829270e+00:2.9112666146459448e-01:2.0278099393207185e+00:3.9608194831141513e-01:2.7484054175878061e+00:3.3848449128891323e-01:3.6341723653829656e+00 + CVs 20 + -3.1357798778903584e-01 1.2282857246921193e-01 9.0446610171966341e-02 + -6.2890752708057662e-01 2.4562873789842996e-01 1.9264093319747566e-01 + -9.6124170389968022e-01 3.7074540945130230e-01 2.7717725992797426e-01 + -1.3149284837114765e+00 4.9518324976974276e-01 3.3501602296183708e-01 + -1.6844044113638441e+00 6.1208113533042718e-01 3.7137610385411468e-01 + -2.0642869128731669e+00 7.1586591045381398e-01 3.8998836087594602e-01 + -2.4509946798259383e+00 7.9958227556314665e-01 3.9204415393384595e-01 + -2.8428978422950379e+00 8.5093552175336484e-01 3.7741390696775290e-01 + -3.2396498149277209e+00 8.5520123654481628e-01 3.4847736385299977e-01 + -3.6382671880424242e+00 7.9806066437685996e-01 3.1314404730597301e-01 + -4.0267915505689347e+00 6.6608858004631921e-01 2.8271345603712739e-01 + -4.3875965001056425e+00 4.5665065727786835e-01 2.6550671029418332e-01 + -4.7111736723423885e+00 1.8277271506220938e-01 2.6273196354662970e-01 + -4.9980683214518820e+00 -1.4063356966207996e-01 2.7184964899689168e-01 + -5.2484505664984251e+00 -5.0417950785957766e-01 2.8844363460343020e-01 + -5.4564672234026208e+00 -8.9869595383975431e-01 2.9892617443263508e-01 + -5.6194061900340735e+00 -1.3102877715989010e+00 2.8217613625623372e-01 + -5.7552021617056770e+00 -1.7265754223814098e+00 2.3764104791082055e-01 + -5.9972588042253658e+00 -2.0789438657150479e+00 1.9413106548006676e-01 + id 12482 + loc 3.4286212921142578e-01 5.4632252454757690e-01 372 + blend 0.0000000000000000e+00 + interp 4.6133940103887278e-01:3.4692562877650851e-01:5.9893550726010691e-01:2.7042177616305069e-01:1.1391785959650835e+00:3.5539677510974282e-01:1.9415423176628446e+00:4.6133478764486241e-01:2.2050637746376340e+00:3.6151580922167886e-01:2.8314663571289995e+00:3.2311278593900256e-01:3.2233321167007865e+00:4.1768364326205587e-01:3.8651091095536478e+00 + CVs 20 + -4.0518961563869976e-01 6.2675824131315405e-01 -1.8571709625561394e-01 + -7.9202523414322146e-01 1.2580154445846312e+00 -3.4192970051366217e-01 + -1.1552564495646760e+00 1.8917231383724880e+00 -5.1537660003322272e-01 + -1.3692152991706505e+00 2.4971869365694128e+00 -7.7149109836039775e-01 + -1.2677511605414491e+00 2.9791531488304015e+00 -1.1194062638489557e+00 + -8.5632128716320310e-01 3.2444136576323883e+00 -1.4765746942496625e+00 + -2.4577521221493681e-01 3.2554385662859726e+00 -1.7695098887322640e+00 + 4.4575274998550274e-01 3.0124108411902482e+00 -1.9692580378366120e+00 + 1.1057020059043063e+00 2.5353816537682947e+00 -2.0777977819394127e+00 + 1.6322985113544062e+00 1.8867998431259501e+00 -2.1119096535475474e+00 + 1.9945279558795430e+00 1.1895453532916922e+00 -2.1000772526207632e+00 + 2.2708453931965340e+00 5.6113085016707065e-01 -2.0736980860919738e+00 + 2.5692205869096054e+00 5.1778473746210807e-02 -2.0612095370882848e+00 + 2.9040539770590730e+00 -2.8154072390782314e-01 -2.0791879038407570e+00 + 3.1898007956818240e+00 -4.5754322137054770e-01 -2.1104894119041466e+00 + 3.5458752986933897e+00 -5.6501888760765095e-01 -2.1091899501559030e+00 + 4.0820857734839961e+00 -5.0748540097872397e-01 -2.1272379976512501e+00 + 4.7195963546764546e+00 -1.6066509427216635e-01 -2.2332484920489568e+00 + 5.3114903424994306e+00 5.0500335226670900e-01 -2.4654285141658874e+00 + id 12483 + loc 2.9885679483413696e-01 5.4049432277679443e-01 1075 + blend 0.0000000000000000e+00 + interp 3.6118371841357660e-01:2.6964932910954603e-01:9.9285166703954486e-02:3.6118010657639249e-01:1.0382011534498790e+00:2.5084982493854235e-01:1.7621167956099970e+00:3.5711760671961817e-01:2.2396914112751896e+00:2.5590756334263393e-01:3.0321565247965707e+00 + CVs 20 + 6.0159701833521970e-02 2.6765179359801256e-01 -1.8854540003054321e-01 + 1.3617973699548819e-01 5.2382033446147636e-01 -3.8040471436240397e-01 + 2.1610570460224726e-01 7.7126408234572008e-01 -5.6709455479742166e-01 + 2.9699906640329349e-01 1.0117136945027465e+00 -7.5370755890316121e-01 + 3.7983959106615101e-01 1.2465919192685539e+00 -9.5099390019836272e-01 + 4.5943535329111390e-01 1.4772701510726971e+00 -1.1608170848382040e+00 + 5.2777564945920652e-01 1.7045521196501152e+00 -1.3797856654334049e+00 + 5.8239962653183541e-01 1.9269545246892834e+00 -1.6082247721100400e+00 + 6.2948332805075879e-01 2.1378541098758030e+00 -1.8544774297841151e+00 + 6.7784223737250204e-01 2.3218788127005943e+00 -2.1323163440087671e+00 + 7.3005266708642924e-01 2.4502120002989178e+00 -2.4528582004980359e+00 + 7.7564143492746829e-01 2.4815870184396029e+00 -2.8099265581675872e+00 + 7.9387547126313540e-01 2.3846249574596876e+00 -3.1647048515624103e+00 + 7.7597242645434850e-01 2.1732044783520879e+00 -3.4660080884652977e+00 + 7.2944900454119144e-01 1.8859686312477755e+00 -3.7000574824652870e+00 + 6.5466288782829773e-01 1.5498733448634725e+00 -3.8756121623670703e+00 + 5.3928569043230290e-01 1.1910309957865657e+00 -3.9957180662222274e+00 + 3.8015558243677977e-01 8.3724467943036374e-01 -4.0573444716482125e+00 + 2.4132973266717631e-01 4.7257431294619134e-01 -4.1235201058493605e+00 + id 12484 + loc 3.0467665195465088e-01 8.0708646774291992e-01 1074 + blend 0.0000000000000000e+00 + interp 3.5752094016730562e-01:3.5751736495790398e-01:3.9802604616469994e-01:2.5728745708105938e-01:1.1255940365940467e+00:2.9828131819035603e-01:2.0908939035759611e+00:2.5582587521524214e-01:3.2547341423919973e+00 + CVs 20 + 6.9974315415392924e-02 3.6320864650143236e-01 -1.2979734061724332e-01 + 1.4892695344236712e-01 7.1527355731970954e-01 -2.6864725943345824e-01 + 2.4211933828486742e-01 1.0484897610208186e+00 -4.1441477761751960e-01 + 3.5713368650466715e-01 1.3608216839359673e+00 -5.5947577861108622e-01 + 5.1160378203372969e-01 1.6628982427882721e+00 -6.8416968778087417e-01 + 7.2591922768080253e-01 1.9772825119714652e+00 -7.7964291856948609e-01 + 1.0079858194303264e+00 2.3354674594913019e+00 -8.8879053111835038e-01 + 1.3534176492503265e+00 2.7549877627701012e+00 -1.0992536984655930e+00 + 1.7297647597488943e+00 3.1533822145347528e+00 -1.5052870762658315e+00 + 2.0605202252297752e+00 3.3625346203107713e+00 -2.0867837941889587e+00 + 2.2933269661213509e+00 3.3240219386692735e+00 -2.7118830005210284e+00 + 2.4278981210001822e+00 3.0933466866908681e+00 -3.2438109578586820e+00 + 2.5223948098391196e+00 2.7639963132525307e+00 -3.5856365745952159e+00 + 2.6576085918637391e+00 2.4087992806810417e+00 -3.7001893936423222e+00 + 2.8698850991455198e+00 2.0391086635922187e+00 -3.6079727610533925e+00 + 3.1420072769117713e+00 1.6151994109058136e+00 -3.3987820316874529e+00 + 3.4567191451417512e+00 1.0591320608565937e+00 -3.1819263757660972e+00 + 3.8677878518542848e+00 5.5373946945623642e-01 -3.1838631041890304e+00 + 4.2760430947437564e+00 9.2562738519134991e-01 -3.3183263412423183e+00 + id 12485 + loc 9.1774120926856995e-02 9.7426509857177734e-01 1092 + blend 0.0000000000000000e+00 + interp 2.5156975084031892e+00:6.2320959273996901e-01:2.2234326856589670e-01:4.1638094875871928e-01:8.9464553988622264e-01:2.8359472733828112e-01:1.1928015703913957e+00:4.0213544495916620e-01:1.9999972668393489e+00:2.5156875084031891e+00:2.4850220502273550e+00 + CVs 20 + -4.7054698563482339e-01 3.9198449053419071e-01 2.3534572235970969e-02 + -7.7808735600816614e-01 6.8099458694388870e-01 8.2875251642476611e-02 + -1.0161770330015651e+00 9.2740351253806441e-01 1.5066819310753005e-01 + -1.2402285917985889e+00 1.1568234855634767e+00 2.0650524986389451e-01 + -1.4460342774674300e+00 1.3647862308942473e+00 2.4705281077871688e-01 + -1.6407453383155490e+00 1.5507154264616083e+00 2.6600128239834486e-01 + -1.8439318868510299e+00 1.7319061949145635e+00 2.4980244230295889e-01 + -2.0763280591988060e+00 1.9786862454350336e+00 1.9426906735101102e-01 + -2.2735296247942429e+00 2.3586190967759841e+00 1.9515582775404394e-01 + -2.3265720525072822e+00 2.7007092710008611e+00 3.3827962369661457e-01 + -2.2741691994467166e+00 2.8909594937580589e+00 5.5132192849374007e-01 + -2.1595526434405503e+00 2.9614839118345264e+00 7.9254340760692399e-01 + -1.9931817449082185e+00 2.9385995400126941e+00 1.0573632127992572e+00 + -1.7726546185202072e+00 2.8214871470402896e+00 1.3494013545339834e+00 + -1.4842808149221969e+00 2.5882915962354831e+00 1.6640203738254482e+00 + -1.1490971713116704e+00 2.2011714179796695e+00 1.9314804925005613e+00 + -8.4721019074931170e-01 1.6656263273899492e+00 2.0432693848396246e+00 + -6.3122675741571355e-01 1.0527130998426744e+00 1.9405988278405508e+00 + -4.7471949331391722e-01 1.0248564183830826e+00 1.6879858969626744e+00 + id 12486 + loc 3.3516356348991394e-01 8.1550872325897217e-01 406 + blend 0.0000000000000000e+00 + interp 1.3773490519139411e+00:3.9505623402408607e-01:2.9885711129699510e-02:4.1501197275654983e-01:8.4145205523721989e-01:3.6734100731095265e-01:1.3704687472716328e+00:5.1050267869702148e-01:1.8722315096067430e+00:1.3773390519139410e+00:3.2649177635905939e+00:1.1877108435502066e+00:3.5252647010576741e+00:6.6627651947679989e-01:3.9178859512310527e+00 + CVs 20 + 2.1806512863772226e-01 2.9950510725048951e-01 2.8945279447704426e-02 + 2.8179295541875204e-01 4.7501359250327357e-01 6.8348968280019615e-02 + 3.1985642657422508e-01 6.3293976276486341e-01 1.0958482405516042e-01 + 3.9226316936434957e-01 7.9561210832477958e-01 1.5259981865375166e-01 + 5.0257274593960788e-01 9.5791766912469944e-01 2.0141388392104648e-01 + 6.5406407740985495e-01 1.1134220550694249e+00 2.5984051953298148e-01 + 8.4821683219940325e-01 1.2536162321640134e+00 3.3043358424748537e-01 + 1.0837484834594886e+00 1.3686273237855540e+00 4.1456407234003323e-01 + 1.3583061889916515e+00 1.4492471506820979e+00 5.1453232471751242e-01 + 1.6700167606588743e+00 1.4872101426843396e+00 6.3158770413306953e-01 + 2.0146322431901478e+00 1.4755322325973561e+00 7.5928577706696010e-01 + 2.3843483342561482e+00 1.4113445570079470e+00 8.8535691783396664e-01 + 2.7706439287419169e+00 1.2970600669567742e+00 1.0004976017392140e+00 + 3.1657599157799234e+00 1.1386726688584656e+00 1.0988213975348460e+00 + 3.5605747864401658e+00 9.4484384654522713e-01 1.1721896391386202e+00 + 3.9430993655560478e+00 7.2628538003556820e-01 1.2112684975297898e+00 + 4.3002841818445328e+00 4.9561450830983578e-01 1.2117179430845360e+00 + 4.6240083950967410e+00 2.7263813922375868e-01 1.1777155787448672e+00 + 4.9105046204646721e+00 8.3967203735017426e-02 1.1289981441492873e+00 + id 12487 + loc 1.1545869708061218e-01 5.1088944077491760e-02 1068 + blend 0.0000000000000000e+00 + interp 4.4465559670947669e-01:3.8396285538802544e-01:3.8556904513214030e-02:4.3379694199295521e-01:9.8718091910770045e-01:3.7656828787126895e-01:1.2637316066709221e+00:4.4465115015350959e-01:1.8872728541161947e+00:3.0244822330874072e-01:2.7304169478323077e+00:4.0952854628423424e-01:3.1173159753373678e+00:3.0922161008846960e-01:3.7375650635017825e+00 + CVs 20 + -1.5612305331599302e-01 1.8903643425897593e-01 -1.9609977566502731e-01 + -3.3740010808522458e-01 3.9244573743991729e-01 -3.4645078823694941e-01 + -5.3055317835631510e-01 5.9507734433085291e-01 -4.6665090991454239e-01 + -7.2182959065776497e-01 7.7931631123253342e-01 -5.5573728468101358e-01 + -8.9994857671932849e-01 9.3626257691261594e-01 -6.0513252174816001e-01 + -1.0439432143306231e+00 1.0583770924397153e+00 -6.1157605007752469e-01 + -1.1315248780507678e+00 1.1516000005879528e+00 -5.7947942530432783e-01 + -1.1540002127462259e+00 1.2442224621036093e+00 -5.1781899702293077e-01 + -1.1257439730444554e+00 1.3666388087371564e+00 -4.3956194290191458e-01 + -1.0845864614076499e+00 1.5244377153459578e+00 -3.5571707777364620e-01 + -1.0841184241075092e+00 1.6816470966378168e+00 -2.5284131671963728e-01 + -1.1617058274580092e+00 1.7532507924046081e+00 -9.2853455289000741e-02 + -1.3071880414940180e+00 1.6651416753709949e+00 1.3631967089914909e-01 + -1.5053437406225880e+00 1.3880188898784045e+00 4.0890303427074803e-01 + -1.7873360585262397e+00 8.9084244269805013e-01 6.9044729894498613e-01 + -2.2486859644081112e+00 9.0066874716951073e-02 8.9640624429380755e-01 + -2.8969435656345728e+00 -1.0189941643318938e+00 7.3002020587462713e-01 + -3.3640587575398504e+00 -1.9509436751294982e+00 9.7738320471729312e-02 + -3.3797022184858307e+00 -2.2347530557303612e+00 -2.4155521218003162e-01 + id 12488 + loc 5.7724452018737793e-01 1.8608336150646210e-01 411 + blend 0.0000000000000000e+00 + interp 5.3163360938873261e-01:3.4869842719337962e-01:8.0813591426705411e-02:3.4101203198827157e-01:1.0392456608934089e+00:3.7714119030229942e-01:1.7829406549408486e+00:3.2907169392589791e-01:2.3320425778220168e+00:4.6091411135996974e-01:2.9939919682827996e+00:5.2042131486361132e-01:3.1989201831770049e+00:5.3162829305263870e-01:3.6906098875693649e+00 + CVs 20 + -5.8099177583098749e-01 1.3818520776529081e-01 1.4794903689030914e-01 + -9.9594418209649738e-01 2.1061167862411725e-01 3.0285516116576555e-01 + -1.3767193173242667e+00 2.7116187882366116e-01 4.6071936662353197e-01 + -1.7683710752264978e+00 3.4299376979736290e-01 6.1581701881658524e-01 + -2.1715382991009466e+00 4.2310466814815995e-01 7.6384491776255203e-01 + -2.5873070934627500e+00 5.0828720538280114e-01 9.0112496975522971e-01 + -3.0199886870000592e+00 5.9521710682229800e-01 1.0254947338334284e+00 + -3.4771906361711915e+00 6.7538447216690456e-01 1.1335366021641273e+00 + -3.9621592441872644e+00 7.3138537004077353e-01 1.2186624902122458e+00 + -4.4693215334829395e+00 7.4035723959855937e-01 1.2782718406323337e+00 + -4.9866425417935467e+00 6.7414207657248437e-01 1.3219620823329570e+00 + -5.4916592789855114e+00 5.0541461524448517e-01 1.3629417992322868e+00 + -5.9535506700186005e+00 2.2632901188807564e-01 1.4030614838031299e+00 + -6.3457101211071745e+00 -1.4900161053188521e-01 1.4368808420039261e+00 + -6.6519616211549497e+00 -5.9876229853904750e-01 1.4639575208551634e+00 + -6.8628957356809428e+00 -1.1015939044490568e+00 1.4872336956305285e+00 + -6.9703093101472540e+00 -1.6279763190595258e+00 1.5027373324140818e+00 + -6.9752505208467799e+00 -2.1354563936647661e+00 1.5030915604091135e+00 + -6.9005636613704997e+00 -2.5929878124226202e+00 1.4921860039679016e+00 + id 12489 + loc 2.7290377020835876e-01 5.0438344478607178e-01 416 + blend 0.0000000000000000e+00 + interp 2.8442692071828418e-01:2.1622235216466201e-01:7.4980265727279494e-01:2.3448635380653157e-01:2.4681769526980162e+00:2.8442407644907702e-01:3.5941572035320344e+00 + CVs 20 + 7.5186685237378792e-01 1.3326675707050134e-01 -2.0308304450284648e-01 + 1.2534464676497588e+00 1.1768759919286470e-01 -3.8458281170254316e-01 + 1.7002378410490022e+00 5.1259778765503861e-02 -5.2523720415561459e-01 + 2.1524543195300132e+00 -3.3966055603821932e-02 -6.2071228678333945e-01 + 2.5982490708886021e+00 -1.3611380203907342e-01 -6.7017650830685904e-01 + 3.0294554370557454e+00 -2.5211185500965805e-01 -6.7346179648807381e-01 + 3.4400059299858370e+00 -3.8051657500907132e-01 -6.3312046685886525e-01 + 3.8267530832298728e+00 -5.1870729409281480e-01 -5.5571009103741709e-01 + 4.1927415678072801e+00 -6.5789600479271115e-01 -4.4972114414374181e-01 + 4.5442142748196295e+00 -7.9043190389475515e-01 -3.2256348222611669e-01 + 4.8835858019406135e+00 -9.1185316384218051e-01 -1.8668305658719114e-01 + 5.2088556510808548e+00 -1.0222460471290307e+00 -6.6764798574177886e-02 + 5.5208165456860385e+00 -1.1257998970334218e+00 1.0640808947664282e-02 + 5.8275757783010258e+00 -1.2282481641371035e+00 3.7322189318176990e-02 + 6.1368051029966617e+00 -1.3349179736589640e+00 1.9131851992359117e-02 + 6.4409391042973976e+00 -1.4441447034643471e+00 -3.9308849331741669e-02 + 6.7244696178916996e+00 -1.5479426606439226e+00 -1.3364963064398183e-01 + 6.9770857580845185e+00 -1.6377185975172335e+00 -2.5596765769082397e-01 + 7.2285835599257986e+00 -1.7405515571662045e+00 -3.9110530913132446e-01 + id 12490 + loc 7.7210980653762817e-01 8.3792817592620850e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7628714252077544e-01:2.9173565053455996e-01:6.8197632758338012e-02:3.4021424853040055e-01:1.1082269085169094e+00:2.8007351130238556e-01:2.0056153714949536e+00:3.7628337964935027e-01:2.8489255998705145e+00:3.2969183780644379e-01:3.2773845446877647e+00 + CVs 20 + -1.5805416907693154e-01 4.1376698031255210e-01 1.5515797405125781e-01 + -3.4960720072345070e-01 8.2542244548832944e-01 3.0033419583411336e-01 + -5.6012678177953068e-01 1.2421475313327548e+00 4.4821240417056796e-01 + -8.0380990010136588e-01 1.6563728316534765e+00 5.7968190430805111e-01 + -1.1013826491755678e+00 2.0452224770015541e+00 6.5700220087312766e-01 + -1.4551831845006147e+00 2.3718750695997617e+00 6.3990628080134382e-01 + -1.8341451439722969e+00 2.5866331018138755e+00 4.9149549855617702e-01 + -2.1604187092372680e+00 2.6303344489508422e+00 1.9621563275223664e-01 + -2.3425291281294029e+00 2.4803496376528154e+00 -1.7821454483943322e-01 + -2.3899367841189694e+00 2.1984265419105857e+00 -5.1617966853628028e-01 + -2.3758686811629337e+00 1.8251565036196700e+00 -7.4980890434922698e-01 + -2.3537877591990974e+00 1.3818699285579792e+00 -7.9771154304194691e-01 + -2.3430695533522776e+00 9.6713717276558531e-01 -6.5352951693181438e-01 + -2.3123465597996113e+00 6.1123966955490339e-01 -5.1426875332149868e-01 + -2.2206853671821167e+00 2.2539601283606822e-01 -5.2750467654060984e-01 + -2.0580644176013507e+00 -1.9124574611265768e-01 -7.3873248215507381e-01 + -1.8493771896496163e+00 -5.5120136495036864e-01 -1.1524337732064867e+00 + -1.6636635028936704e+00 -7.8206519129010688e-01 -1.6268579596788595e+00 + -1.6048896034700117e+00 -9.4595935569864742e-01 -1.8005318536040580e+00 + id 12491 + loc 8.0501623451709747e-02 4.3998789787292480e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8197052071376048e-01:3.2769888659571617e-01:8.3471533732608849e-02:3.2720288122852587e-01:1.0007456624317925e+00:3.7461074750844586e-01:1.9999543198060983e+00:3.8196670100855334e-01:2.6153561316292100e+00:2.6490695589655761e-01:3.3203869402694171e+00 + CVs 20 + 2.4315993570285610e-01 3.7565021163044410e-01 -1.8785222643785146e-01 + 3.7029326517557104e-01 7.0798510349780419e-01 -3.9453627043987466e-01 + 4.3746910640557696e-01 1.0188869769454985e+00 -6.0491241102067739e-01 + 4.5456154973219487e-01 1.3218287766422225e+00 -8.2176326685966816e-01 + 4.0880231667699207e-01 1.5987822710974866e+00 -1.0457719916085186e+00 + 2.8777344015850148e-01 1.8250908549213032e+00 -1.2728995128134184e+00 + 8.5242939695560072e-02 1.9657554459218924e+00 -1.4901290001135563e+00 + -1.8298113150636564e-01 1.9804919588557097e+00 -1.6713959579825846e+00 + -4.6408329003652637e-01 1.8489236849712589e+00 -1.7842312215295155e+00 + -6.8633840507244448e-01 1.6027858025330686e+00 -1.8170097734069626e+00 + -8.1504838225653609e-01 1.3028368039594327e+00 -1.7883064012990586e+00 + -8.5864989153342575e-01 9.9700588235039667e-01 -1.7275718802870510e+00 + -8.5582033993030404e-01 7.0680432374073265e-01 -1.6631114017409065e+00 + -8.6510043943583426e-01 4.1517310128756457e-01 -1.5986019923970476e+00 + -9.6730959696532159e-01 8.5822998705469722e-02 -1.5128196621063330e+00 + -1.3063375008224252e+00 -2.6696418209097550e-01 -1.3799694288605202e+00 + -2.0328516566530928e+00 -3.9998647206235394e-01 -1.2234656977556413e+00 + -2.8957678259645143e+00 2.0920286331135696e-01 -1.2320550644868504e+00 + -3.0473309426838862e+00 2.2423433314413388e-01 -1.2447469266703612e+00 + id 12492 + loc 4.8795858025550842e-01 1.9298036396503448e-01 1048 + blend 0.0000000000000000e+00 + interp 3.6890010269376927e-01:2.6600504112132356e-01:3.2352988462941434e-02:2.3953954312161499e-01:9.3302976475962929e-01:2.8744967073486555e-01:1.5563144182958268e+00:2.8206121456663813e-01:2.0884018129249409e+00:2.7478665312567307e-01:2.9869431185251614e+00:3.6889641369274234e-01:3.7951486068301841e+00 + CVs 20 + -3.0798913748409867e-01 3.9739731871032785e-01 -3.1146787239345289e-02 + -6.0714985430210611e-01 8.1088552890659893e-01 -9.4542467542568343e-02 + -8.5939242147760153e-01 1.2352810748325473e+00 -2.2370989943038583e-01 + -1.0406290482576708e+00 1.6377590703637590e+00 -4.3858755876455813e-01 + -1.1629080032436498e+00 1.9808505416625253e+00 -7.3862235647102981e-01 + -1.1904593801168373e+00 2.2248372261039906e+00 -1.0562181733170308e+00 + -1.1288797384241069e+00 2.3616375087266572e+00 -1.4000609061859752e+00 + -1.1794176179825537e+00 2.3658481042007153e+00 -1.7555901244081145e+00 + -1.3548397365801872e+00 2.1653844319287394e+00 -2.0351677300110187e+00 + -1.5191595709994499e+00 1.7911178407193886e+00 -2.2295540326835992e+00 + -1.6409639480894000e+00 1.2931418719276813e+00 -2.3852227029855482e+00 + -1.7434655445191607e+00 7.3753017320312952e-01 -2.5795100076443402e+00 + -1.9463628618300763e+00 1.9638106577153935e-01 -2.8807511997014075e+00 + -2.3738463772696772e+00 -1.7044546211246436e-01 -3.2308650273289841e+00 + -2.9075449013986567e+00 -3.1095054684443163e-01 -3.5002243351239661e+00 + -3.4422949827618154e+00 -3.4830389327714900e-01 -3.6819206390290984e+00 + -3.8889404842501545e+00 -3.8446439599683663e-01 -3.7923579230184168e+00 + -4.2592983902306152e+00 -4.7428665673821296e-01 -3.8713791000617923e+00 + -4.8744917609431395e+00 -6.6660409237331486e-01 -3.9944131429033711e+00 + id 12493 + loc 7.8364121913909912e-01 1.8583215773105621e-01 1085 + blend 0.0000000000000000e+00 + interp 3.4493980891637605e-01:2.6870967360189502e-01:7.2436079635503015e-01:2.9599786643517123e-01:1.3514908384543498e+00:3.2635777882864964e-01:2.0007519597990959e+00:3.4493635951828688e-01:2.7661151674740978e+00:2.9454769742105918e-01:3.2474067771389148e+00:3.0396980363760179e-01:3.9880747946040267e+00 + CVs 20 + 3.8132083314390303e-01 3.3071824719268356e-01 -2.1896973371767442e-01 + 7.3758233089713332e-01 6.4876309977059354e-01 -3.8368159381119371e-01 + 1.1062920925741928e+00 9.3978498899445595e-01 -4.9783104402537348e-01 + 1.5082354837632714e+00 1.1922483631627596e+00 -5.4599313027300389e-01 + 1.9407764787061959e+00 1.3868205594376870e+00 -5.0914454488361249e-01 + 2.3875059433913637e+00 1.5070257079561449e+00 -3.8015895601429917e-01 + 2.8228253905353982e+00 1.5432324585379547e+00 -1.6421236161851049e-01 + 3.2186703276538973e+00 1.4940145207011697e+00 1.2227281235676257e-01 + 3.5513580753500897e+00 1.3646341119999186e+00 4.4978456139187473e-01 + 3.8123323331039578e+00 1.1665089943154949e+00 7.7770628665654429e-01 + 4.0084896256065328e+00 9.1275689387965842e-01 1.0661536955738176e+00 + 4.1490499742693148e+00 6.1643647403955903e-01 1.2871243141484192e+00 + 4.2407256157426900e+00 2.9495929778667773e-01 1.4296392850205921e+00 + 4.2988231964867891e+00 -3.1950776091067556e-02 1.4951895784652558e+00 + 4.3501730763627826e+00 -3.5038468092307995e-01 1.4819533218061109e+00 + 4.4309088239088936e+00 -6.5456492992931747e-01 1.4016594043230108e+00 + 4.5876927619082126e+00 -9.5502642057710685e-01 1.2699607282943168e+00 + 4.8208701951007900e+00 -1.2462605581521151e+00 1.0897300142579633e+00 + 4.9214259372192029e+00 -1.4920712659326518e+00 1.0155185791181240e+00 + id 12494 + loc 6.7633688449859619e-01 3.7539827823638916e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2230536927777190e-01:2.9697798094916950e-01:9.0788109504841052e-01:3.8874211934571723e-01:1.2235527036152869e+00:4.2230114622407916e-01:2.0006386039121060e+00:2.6823404812985885e-01:2.3699400149244680e+00:3.3423102724788317e-01:3.0665415763469719e+00:4.1202745730899620e-01:3.9645530387189050e+00 + CVs 20 + 6.3469734661266902e-02 5.5384235032015072e-01 -5.4878669237641065e-01 + 7.3194367303697827e-02 1.0025474031777555e+00 -9.0874209665709060e-01 + 7.0551341781408483e-02 1.4073446548155062e+00 -1.2039225249395984e+00 + 6.3616655381432630e-02 1.8034455791403992e+00 -1.4806387348021552e+00 + 4.6473188074200422e-02 2.1856793259121376e+00 -1.7243088296579616e+00 + 1.4035089483383723e-02 2.5553148913327330e+00 -1.9125566527315871e+00 + -3.9439454431093202e-02 2.9179242035087403e+00 -2.0114461367090675e+00 + -1.2221195549855590e-01 3.2772029623078609e+00 -1.9605162494675501e+00 + -2.3516233955054533e-01 3.5727801699616792e+00 -1.6208390984810448e+00 + -2.8089737570714290e-01 3.5340803742562352e+00 -1.0325099348977129e+00 + -2.2467504916694503e-01 3.2752569451971327e+00 -6.2978801991699451e-01 + -1.5472016811862843e-01 3.0324581934669679e+00 -3.6720894799269366e-01 + -8.9632360973392222e-02 2.7978537318556498e+00 -1.4000637949632577e-01 + -3.0450399988267041e-02 2.5418027894420225e+00 7.7257116798076897e-02 + 2.5073648542355914e-02 2.2254343297106147e+00 2.8014343761587934e-01 + 8.3450989883508409e-02 1.7793446259005974e+00 4.3184841880213976e-01 + 1.4443416321338559e-01 1.1942065515394864e+00 4.5165936240513849e-01 + 1.9636581233909425e-01 6.4243407962555499e-01 3.4348263248821403e-01 + 2.3409040969301800e-01 3.7311642368076658e-01 3.1339757748500480e-01 + id 12495 + loc 9.8856520652770996e-01 8.6524242162704468e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7109538915352461e-01:2.8188852968509948e-01:1.5269791070070104e-01:3.1383228230579913e-01:1.0594767242945418e+00:4.7109067819963307e-01:1.9961899250618405e+00:4.6552203693443556e-01:2.2423752628744200e+00:2.7481627086983068e-01:2.9831173936400903e+00:3.3439746368772627e-01:3.7377549738630891e+00 + CVs 20 + 3.9772157596608730e-02 2.6089219195023322e-01 5.8670144525363233e-02 + 9.9281883185435876e-02 4.7598264227195608e-01 3.9005583346037209e-02 + 1.5190604793195081e-01 6.8531581109009010e-01 -5.3509501129907489e-03 + 1.8584612578594734e-01 8.8917688631869363e-01 -5.9972222274983999e-02 + 1.9819676688382459e-01 1.0785795733041907e+00 -1.2703979316917491e-01 + 1.8616868282835056e-01 1.2434432501885826e+00 -2.0777871089161071e-01 + 1.4911438082523998e-01 1.3748129260000475e+00 -3.0064288976901143e-01 + 8.9318197752612891e-02 1.4680385315560924e+00 -4.0029502019189211e-01 + 1.1635609799850597e-02 1.5197219971770921e+00 -4.9975992758648163e-01 + -7.3359889995763913e-02 1.5235531674746066e+00 -5.9169214781279411e-01 + -1.4843685998333803e-01 1.4746639937382389e+00 -6.6696124006689128e-01 + -1.9653102222635674e-01 1.3815952905204518e+00 -7.1581466682079031e-01 + -2.1772157830305502e-01 1.2675004637792917e+00 -7.3504657992303657e-01 + -2.3464755151708505e-01 1.1517569187278760e+00 -7.3282716398649872e-01 + -2.7519830904756104e-01 1.0352919111931578e+00 -7.2090818851084815e-01 + -3.4508572264253623e-01 9.0813511190009810e-01 -6.9751311998198140e-01 + -4.3374511274985306e-01 7.6642626070658959e-01 -6.5463527156872225e-01 + -5.4128153448412053e-01 6.0936293011678200e-01 -5.9936991186525101e-01 + -6.9655444298065705e-01 4.2843143666081118e-01 -5.5077860337546314e-01 + id 12496 + loc 3.0821284651756287e-01 8.0816882848739624e-01 403 + blend 0.0000000000000000e+00 + interp 4.9140629559748789e-01:2.6256765522484615e-01:2.0492016760762288e-02:2.9325098551250478e-01:8.5999623990042084e-01:2.9870949389093704e-01:1.3526521623723973e+00:4.4533529738620475e-01:1.9243279166256295e+00:4.9140138153453194e-01:2.3683454791696699e+00:3.5657102116934719e-01:2.9421792061651395e+00:3.7278327191019084e-01:3.3724074615373798e+00 + CVs 20 + -2.3036563501761059e-02 1.4483647008763911e-01 -3.3357099862995697e-02 + -6.4210780504370416e-02 2.6374266321331097e-01 -6.5310371552513735e-02 + -1.1471297278336420e-01 3.7195122097276440e-01 -9.9765670982073090e-02 + -1.5833183418433791e-01 4.7595796864602291e-01 -1.3623951897672787e-01 + -1.9182675160867402e-01 5.7511364140889509e-01 -1.7355298507703390e-01 + -2.1210697845558737e-01 6.6960137532582720e-01 -2.1115108840376087e-01 + -2.1709486775778508e-01 7.6100274396919509e-01 -2.4893386379758931e-01 + -2.0701603628955395e-01 8.5199281027253448e-01 -2.8722507519137663e-01 + -1.8319494871526981e-01 9.4570074892442268e-01 -3.2653182737700753e-01 + -1.4591822004612459e-01 1.0479405994843169e+00 -3.6629454592186900e-01 + -9.5726767767665089e-02 1.1707509988489428e+00 -4.0456852104479002e-01 + -4.0923945837676112e-02 1.3341682938247330e+00 -4.3604628176757176e-01 + -9.1737807535946514e-03 1.5539382955667400e+00 -4.4967199326138185e-01 + -3.7478419854943157e-02 1.8077611846116011e+00 -4.3771566910568083e-01 + -1.2468490129610710e-01 2.0387524700234856e+00 -4.1323775871008356e-01 + -2.3441959873558060e-01 2.2235702997677684e+00 -3.9992457608542170e-01 + -3.5646152725281555e-01 2.3878439920864558e+00 -4.0667409655530518e-01 + -5.0332460321561601e-01 2.5526436217243340e+00 -4.2114535705925943e-01 + -6.1429311406512244e-01 2.6760626580697560e+00 -3.6355953087666182e-01 + id 12497 + loc 6.0523837804794312e-01 7.2238874435424805e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6277667940560498e-01:2.9645558903624614e-01:3.0620807857592913e-02:3.0223646479014904e-01:9.8587857095383080e-01:3.4462035963318050e-01:1.7574281060158625e+00:3.0466351505058670e-01:2.6454470264385561e+00:3.6277305163881096e-01:3.3452391043417178e+00 + CVs 20 + 1.3785576917865489e-01 2.9637034541620111e-01 -1.0877310859278494e-01 + 3.0340248748303361e-01 5.9415576522022284e-01 -2.0095769880052256e-01 + 4.8637586678337158e-01 8.8805437401731080e-01 -2.9706425306244777e-01 + 6.7999882200727302e-01 1.1740313950952048e+00 -4.0827597700938006e-01 + 8.8652152080518942e-01 1.4502375643227396e+00 -5.4267369795480636e-01 + 1.1114924824068413e+00 1.7057933652472790e+00 -7.2368908578402902e-01 + 1.3546006602345098e+00 1.9148624034905644e+00 -9.7615360702603016e-01 + 1.6075620758678590e+00 2.0551412446333823e+00 -1.3026589536622357e+00 + 1.8583432393606620e+00 2.1184694680691716e+00 -1.6869331588609096e+00 + 2.0945488462875463e+00 2.1068336846951476e+00 -2.1057339046326260e+00 + 2.3073640276216882e+00 2.0272661028127397e+00 -2.5372202649734126e+00 + 2.4899376044990595e+00 1.8849106793922576e+00 -2.9647702498537218e+00 + 2.6322922232020733e+00 1.6829529788189044e+00 -3.3768725043165944e+00 + 2.7175565606918499e+00 1.4331209371172764e+00 -3.7674039488385609e+00 + 2.7244671849207114e+00 1.1628576501271886e+00 -4.1348343031893409e+00 + 2.6426118403380103e+00 9.0940985981651101e-01 -4.4733815510244801e+00 + 2.4835719908159097e+00 7.0121580750356327e-01 -4.7750360558466474e+00 + 2.2768750831621900e+00 5.4949947095103391e-01 -5.0332546327219942e+00 + 2.0928777264294962e+00 4.7928806475028507e-01 -5.2134130954732036e+00 + id 12498 + loc 3.4935932606458664e-02 5.9421545267105103e-01 1074 + blend 0.0000000000000000e+00 + interp 4.3334046903651674e-01:4.3333613563182638e-01:2.0987067283273597e-01:3.7646443051218165e-01:1.0425610794411504e+00:2.7864470777029088e-01:1.8477053091014648e+00:2.6421189494443942e-01:2.3126003678347677e+00:2.5915935428139764e-01:3.0765737667548203e+00:4.2092569147407732e-01:3.9655599844743916e+00 + CVs 20 + 2.7873807655674171e-01 3.5307593409339638e-01 -1.8777548500319147e-01 + 5.1478108743643736e-01 6.9235024860009353e-01 -3.7772332533483954e-01 + 7.2602926710300997e-01 1.0140438662061373e+00 -5.6006212216884643e-01 + 9.1809554990298159e-01 1.3203497767643446e+00 -7.2499597436195662e-01 + 1.0789599983792106e+00 1.5941128354750687e+00 -8.5271266512135824e-01 + 1.1868952246794982e+00 1.7915905904139799e+00 -9.0309973250253484e-01 + 1.2281795861825511e+00 1.9276236594814178e+00 -8.3363963304183708e-01 + 1.2173398758224763e+00 2.1022007372296958e+00 -7.1530621175132514e-01 + 1.1622250129405258e+00 2.3311113641896961e+00 -6.7438560032866746e-01 + 1.0640580590022979e+00 2.5491752056437460e+00 -7.7088409119109436e-01 + 9.5198391461394172e-01 2.6713596001208679e+00 -1.0054614278334406e+00 + 8.9614693534896983e-01 2.6668697743278043e+00 -1.3100130668348626e+00 + 9.5937340619695932e-01 2.5886272318902721e+00 -1.5828444306183163e+00 + 1.1435261067531723e+00 2.5452640542675984e+00 -1.7934891779689894e+00 + 1.4450523047608519e+00 2.6212484444402913e+00 -1.9890377669466035e+00 + 1.8849575088395736e+00 2.7697434378129353e+00 -2.2437296577380823e+00 + 2.5169965899703786e+00 2.8234718836487431e+00 -2.6796804108289640e+00 + 3.3950377236307672e+00 2.4804862156769785e+00 -3.2115381627790827e+00 + 3.4215769347972063e+00 2.2881423675616901e+00 -2.9345838042827923e+00 + id 12499 + loc 6.7748266458511353e-01 4.1120257228612900e-02 372 + blend 0.0000000000000000e+00 + interp 3.9954457752457928e-01:3.1954432701943436e-01:2.1933512293195268e-01:3.6426651649537306e-01:9.6148683330254026e-01:2.8955532289774732e-01:1.5366572200585895e+00:3.0236599444331469e-01:2.9941236898979282e+00:3.9954058207880405e-01:3.5969252938996470e+00 + CVs 20 + 6.9834643186188761e-01 4.3273813603075489e-01 -4.7617889478141245e-02 + 1.3249138774498235e+00 7.0750993213014168e-01 -1.4923993958987145e-01 + 1.9712578089900621e+00 8.6497250088919242e-01 -2.6019739546463200e-01 + 2.6692173273422490e+00 9.8691871469525083e-01 -3.0614307115637562e-01 + 3.3587992765667347e+00 1.1738434527847275e+00 -1.5726391860920613e-01 + 3.8367092806954797e+00 1.4559942170283666e+00 3.2692032376560648e-01 + 3.8811365116768517e+00 1.6771060857252216e+00 9.7010124032118894e-01 + 3.5976490527233898e+00 1.7569082865837489e+00 1.5322135930021532e+00 + 3.1096410278042059e+00 1.7123013005006127e+00 1.9478211196864019e+00 + 2.4980153939617438e+00 1.5522125618981650e+00 2.1823650912336170e+00 + 1.8453968724477914e+00 1.2681155830450528e+00 2.2161006639976106e+00 + 1.2351013889320481e+00 8.6273882488528464e-01 2.0477376990827905e+00 + 6.9557810944834764e-01 3.7015447744643909e-01 1.6981876855805673e+00 + 1.2345826127116229e-01 -1.7015455188968132e-01 1.2321793897631341e+00 + -7.1409513458632412e-01 -5.7074988351475131e-01 7.8677768767241807e-01 + -1.8287467273446898e+00 -5.4477206637158526e-01 5.2919771093911661e-01 + -2.9760071334259139e+00 -1.0660523438932445e-01 5.7268803144963243e-01 + -3.8936910822662849e+00 5.4018475888111883e-01 9.0538244390423595e-01 + -4.4127533870050994e+00 1.1455786278875406e+00 1.3384342175593629e+00 + id 12500 + loc 4.0580567717552185e-01 6.7239624261856079e-01 409 + blend 0.0000000000000000e+00 + interp 3.7014539679223118e-01:2.7836738853724363e-01:9.4897215033070359e-02:2.6595402524052830e-01:9.7863066194616144e-01:3.7014169533826330e-01:1.4016257797313212e+00:3.6055951329359098e-01:2.1112175181901871e+00:3.1236120803886364e-01:2.9966042755001676e+00:3.2861309819750040e-01:3.6409237921134752e+00 + CVs 20 + 4.7839989844354236e-01 9.4982198009891800e-02 -1.1882933486614125e-01 + 8.9888838716657160e-01 1.5626563429067697e-01 -2.6912058178472004e-01 + 1.3161040956807593e+00 2.0622789488612958e-01 -4.0547436054272062e-01 + 1.7349514933643815e+00 2.4664499552927632e-01 -5.1979273536115722e-01 + 2.1441242558508544e+00 2.7328631043030382e-01 -6.1742086086771564e-01 + 2.5361845544929165e+00 2.8472264098943922e-01 -7.0160623493637952e-01 + 2.9044865177389974e+00 2.7869693552847852e-01 -7.7665850854208840e-01 + 3.2427524616348338e+00 2.5222433178810788e-01 -8.4929954249941575e-01 + 3.5451888730643901e+00 2.0565516400679185e-01 -9.2785709198807698e-01 + 3.8022261273121774e+00 1.4493803736376876e-01 -1.0205095859091098e+00 + 4.0047063391154101e+00 8.2857223973384464e-02 -1.1316112498601465e+00 + 4.1566022777437137e+00 3.4240726184099124e-02 -1.2596279770682681e+00 + 4.2751959448473862e+00 7.0392934660672424e-03 -1.3999204003346026e+00 + 4.3780964812254322e+00 3.0724643121176065e-03 -1.5477263773148318e+00 + 4.4805287031921068e+00 2.0813378339861632e-02 -1.6994973996462019e+00 + 4.6007663465649795e+00 4.6554893090148042e-02 -1.8580552962673849e+00 + 4.7455575138475696e+00 5.9725641969135435e-02 -2.0268562500056246e+00 + 4.8909374869948747e+00 5.9216456845605947e-02 -2.1885130134082829e+00 + 4.9383456707097038e+00 -2.2614509963404306e-02 -2.3508671513671220e+00 + id 12501 + loc 8.5240638256072998e-01 1.0534773766994476e-01 1075 + blend 0.0000000000000000e+00 + interp 5.1248862616148971e-01:4.0971188340934050e-01:1.3815395885636994e-01:2.4976985843146246e-01:1.0142126708062009e+00:4.3803302353898138e-01:1.5112285510779673e+00:5.1248350127522813e-01:1.9998925685644504e+00:2.8867881169988302e-01:2.7817208556657946e+00:2.4897263801519526e-01:3.4610434419721567e+00 + CVs 20 + -2.2370383807060440e-02 2.5667341795315979e-01 2.1487968224483972e-01 + -1.6551092368426057e-02 5.3507380365152013e-01 4.3679202636212233e-01 + 5.5273949363639496e-03 8.2793421668560208e-01 6.4904714365426774e-01 + 7.9723621621662355e-03 1.1150318912736492e+00 8.6262693586707773e-01 + -5.4933617357608044e-02 1.3604968534053303e+00 1.0979592560804161e+00 + -2.0406449238672297e-01 1.5214856438909852e+00 1.3505403165512164e+00 + -4.3392833548722054e-01 1.5649748102906904e+00 1.5869872973831147e+00 + -7.3185570457975657e-01 1.4836834312811789e+00 1.7557364198134400e+00 + -1.0691793071992677e+00 1.2962721569426550e+00 1.8046086971596640e+00 + -1.3998670184863768e+00 1.0389613635123740e+00 1.7174684065611145e+00 + -1.6773865308299902e+00 7.4153381791088346e-01 1.5023060163564375e+00 + -1.8425360775036759e+00 4.3168867119053012e-01 1.1785778835267504e+00 + -1.8853991028155044e+00 1.4190128984967387e-01 8.0748963795983930e-01 + -1.9283858208621780e+00 -1.3183275887144008e-01 4.4448059201058532e-01 + -2.1210296704162865e+00 -3.9737224172621854e-01 9.7655572763870491e-02 + -2.5662610668161010e+00 -5.5510069487037184e-01 -2.0939087989820246e-01 + -3.2415787424894567e+00 -3.5872901220569853e-01 -3.5072403666433577e-01 + -3.7393090012776380e+00 1.0930111373863927e-01 -2.7781883989040002e-01 + -4.0312195515314606e+00 2.8129554277602331e-01 -3.8891039377389702e-01 + id 12502 + loc 1.3402090966701508e-01 3.5325177013874054e-02 397 + blend 0.0000000000000000e+00 + interp 4.6136514872185569e-01:3.1033533451290612e-01:4.7679197323289291e-02:4.5040098682086843e-01:6.1192915990435170e-01:2.4508228323156755e-01:1.5017607828054218e+00:3.9475869356867671e-01:2.1221446394487589e+00:4.6136053507036850e-01:2.7528718383869197e+00:2.8013101442176630e-01:3.1132013790606710e+00 + CVs 20 + -2.4448903310907022e-01 2.5097512530019617e-01 -1.0081046073994016e+00 + -4.3792262084817779e-01 3.1223057581244762e-01 -1.6393269831757977e+00 + -6.2416688916809981e-01 3.1028742396300169e-01 -2.1666529080113461e+00 + -8.2126134991601663e-01 3.0142080978362124e-01 -2.7044239653107569e+00 + -1.0251437519631983e+00 2.7912584462164020e-01 -3.2637779347880129e+00 + -1.2291781459663094e+00 2.3142568987822926e-01 -3.8536375853101523e+00 + -1.4284610093596375e+00 1.4222778157671812e-01 -4.4764691439175488e+00 + -1.6185868567555886e+00 -1.0498613230963239e-02 -5.1255328488476941e+00 + -1.7926107795197364e+00 -2.5198018123856736e-01 -5.7786259214022007e+00 + -1.9470001827289778e+00 -5.9722363446724769e-01 -6.3944356618915066e+00 + -2.0884542051357475e+00 -1.0423058419264011e+00 -6.9274858298728699e+00 + -2.2246178305588957e+00 -1.5667895192095345e+00 -7.3517055776747773e+00 + -2.3520492751578495e+00 -2.1424938020388229e+00 -7.6636092959963147e+00 + -2.4610275731619993e+00 -2.7386056427682592e+00 -7.8642478988924065e+00 + -2.5492005150225054e+00 -3.3220371864940894e+00 -7.9607211701116745e+00 + -2.6162884466998726e+00 -3.8693776573542236e+00 -7.9677378000721237e+00 + -2.6576962891215667e+00 -4.3681650081853380e+00 -7.9067298290833969e+00 + -2.6726750999227993e+00 -4.8126594344548206e+00 -7.8070684023955597e+00 + -2.6819203366340680e+00 -5.2304297970398341e+00 -7.7466681076125239e+00 + id 12503 + loc 8.0028069019317627e-01 1.5027277171611786e-01 1081 + blend 0.0000000000000000e+00 + interp 3.9455105292954296e-01:3.3160905259392298e-01:7.2595164351254304e-01:3.9089222010911867e-01:1.1725632433503028e+00:2.5405931201463366e-01:2.0600841888282804e+00:3.9454710741901367e-01:3.1289401703273194e+00:3.8625014863858370e-01:3.9975941716935117e+00 + CVs 20 + 2.1739855218564308e-02 4.9588439682279278e-01 -3.5555773860738676e-01 + -2.9819134508015155e-02 8.4541999854708771e-01 -5.4375182246457121e-01 + -1.1169203680682038e-01 1.1477101967596637e+00 -6.7748062510205154e-01 + -1.9739918501222398e-01 1.4246188396659734e+00 -8.0705380422004402e-01 + -2.8679215352064963e-01 1.6671844454129352e+00 -9.2936573636380171e-01 + -3.7836258227771924e-01 1.8609831879406800e+00 -1.0461089817974498e+00 + -4.7131646804379534e-01 1.9961980639890009e+00 -1.1696424107496739e+00 + -5.7155331466146031e-01 2.0929342520814886e+00 -1.3377179150797589e+00 + -6.9454720190255481e-01 2.2562410148432139e+00 -1.5837677686257510e+00 + -8.3234084124976326e-01 2.5789752872437366e+00 -1.7417918639790095e+00 + -9.4358517787676466e-01 2.8587183338131128e+00 -1.6756006700553938e+00 + -1.0229929517873497e+00 2.9962074892882402e+00 -1.4977435588618602e+00 + -1.0762097959244361e+00 3.0224769750449552e+00 -1.2782139688521199e+00 + -1.1049597316631441e+00 2.9692028027108179e+00 -1.0391958513464792e+00 + -1.1117777149396078e+00 2.8558867314615930e+00 -7.7949154442420898e-01 + -1.1028215689856857e+00 2.6806278180310037e+00 -4.7370486055646710e-01 + -1.0816435068141583e+00 2.3963124067727550e+00 -1.2919041956570987e-01 + -1.0454605798509844e+00 1.9799322534531218e+00 1.0661457038772737e-01 + -1.0037338858141456e+00 1.5763144160013367e+00 3.9750400503497818e-02 + id 12504 + loc 8.0120480060577393e-01 5.7000380754470825e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0401716506848606e-01:2.5234625389285242e-01:2.4838834606178029e-01:3.1886072714078539e-01:1.0002188096859361e+00:2.9266794076574321e-01:1.6002683333905838e+00:4.0401312489683538e-01:2.3106382586841336e+00:2.8780587972222121e-01:3.0845658375669016e+00:3.2985572109207612e-01:3.8178762182420085e+00 + CVs 20 + -1.8988785692209328e-01 2.9862809150598263e-01 1.5415536460649057e-01 + -3.7723274923545957e-01 5.7387449082119979e-01 2.6847454311087171e-01 + -5.6662362917910047e-01 8.3705339209101726e-01 3.5698741581613769e-01 + -7.6208870600252987e-01 1.0935044954508137e+00 4.2435290831432360e-01 + -9.6898914695175953e-01 1.3422881537999705e+00 4.6196818187236810e-01 + -1.1920214711505730e+00 1.5807051541435355e+00 4.5996903352212376e-01 + -1.4327867016755627e+00 1.8017018455715375e+00 4.0807678105292577e-01 + -1.6860774658073672e+00 1.9944319880552803e+00 2.9729003678593380e-01 + -1.9368465872554768e+00 2.1489095384375956e+00 1.2175503877569005e-01 + -2.1660949159703824e+00 2.2577579922647422e+00 -1.2182459314966987e-01 + -2.3667562374390303e+00 2.3149591278867980e+00 -4.3160028017048835e-01 + -2.5486099233724717e+00 2.3098970365967428e+00 -8.0183208274076567e-01 + -2.7263342626433906e+00 2.2185824766606306e+00 -1.2251252978860987e+00 + -2.9123692749864345e+00 1.9958567649877397e+00 -1.6888078707676311e+00 + -3.1211368221114677e+00 1.5877674786179790e+00 -2.1406869854787605e+00 + -3.3432760039292444e+00 1.0005806379786077e+00 -2.4619843050794925e+00 + -3.5624064764542438e+00 3.1230133267819982e-01 -2.5699202959537217e+00 + -3.8147671293451668e+00 -3.4893494576117612e-01 -2.4589645876451520e+00 + -4.0069281702535617e+00 -6.2741883055722458e-01 -2.3025119699461989e+00 + id 12505 + loc 3.3785769343376160e-01 4.8495072126388550e-01 1048 + blend 0.0000000000000000e+00 + interp 4.0282621273436953e-01:2.8043684906853616e-01:3.6184559335120270e-01:4.0282218447224222e-01:1.0001744920172715e+00:3.1929134185378905e-01:1.7718597422810594e+00:2.9032889258889244e-01:2.5350613365531687e+00:4.0095768099122991e-01:3.0889252470721096e+00:2.9888402836945688e-01:3.7860846505567993e+00 + CVs 20 + -3.8327240617453229e-01 5.9127465119803990e-01 -5.2746583050744006e-02 + -7.2293271788536795e-01 1.2537621110105679e+00 -1.4692405288504493e-01 + -9.5463402578187195e-01 2.0155249525192391e+00 -3.3085395617079910e-01 + -1.0241055280049816e+00 2.8272261432801780e+00 -6.7278735103373855e-01 + -9.4894469154110972e-01 3.5607480814137391e+00 -1.2316410724509659e+00 + -8.2154131580486045e-01 4.0764046241157708e+00 -2.0093058101138919e+00 + -7.3260109616683622e-01 4.2496161954742657e+00 -2.9313201886062981e+00 + -7.2249777111645486e-01 4.0176003446773176e+00 -3.8438483566773600e+00 + -7.6022323514275092e-01 3.4287919676657315e+00 -4.5913058573007079e+00 + -7.4415168487989980e-01 2.5873807062739660e+00 -5.0809718389120286e+00 + -5.5906560098774127e-01 1.6405448037854482e+00 -5.2653122735707942e+00 + -1.8402662499583172e-01 7.6080962086911574e-01 -5.1684925279959701e+00 + 2.8295785903527904e-01 5.5361465565707091e-02 -4.8708383360040761e+00 + 7.0235743566920061e-01 -4.9895319627359658e-01 -4.4619405842543349e+00 + 9.5784580787471629e-01 -9.7500792582023355e-01 -4.0556739076272956e+00 + 9.0326976519328384e-01 -1.4662614298392487e+00 -3.9658147053289339e+00 + 5.9441182907479573e-01 -1.5121872060022779e-01 -4.8287175656529566e+00 + 7.4722821782592908e-01 2.4412460691230875e-01 -4.6835322541949935e+00 + 5.8852561202289422e-01 5.4677402136796271e-01 -4.8462267107474535e+00 + id 12506 + loc 5.0806391239166260e-01 2.0050506293773651e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5617736442140472e-01:3.8563576943344668e-01:8.9819864553590989e-01:4.5617280264776050e-01:1.2374406465486780e+00:4.4338664390395999e-01:1.8680949816944645e+00:4.4047009127152892e-01:2.1079171165761474e+00:2.8909150634194708e-01:2.6336694514540664e+00:3.2384351676191281e-01:3.0297060866731012e+00:2.6636499182385243e-01:3.9999724179861964e+00 + CVs 20 + -1.4981178705762482e-01 4.1909687748142704e-01 -1.1289638232224805e-01 + -3.1214555622040496e-01 8.1018354318073482e-01 -1.8140957922593148e-01 + -5.0307537882311815e-01 1.1706005156515178e+00 -2.1977429328726705e-01 + -7.2774348374065889e-01 1.4968353260511833e+00 -2.2869572542454747e-01 + -9.8227148303760048e-01 1.7810847962012002e+00 -2.0400929034306481e-01 + -1.2612585332412538e+00 2.0174807278519520e+00 -1.4124155034175867e-01 + -1.5538012726830646e+00 2.1988406293947356e+00 -4.0921362416707630e-02 + -1.8445951727691206e+00 2.3204976657545586e+00 8.7386035856959809e-02 + -2.1197266484462913e+00 2.3854395000148174e+00 2.2852240685201619e-01 + -2.3682143649629124e+00 2.4041098491408350e+00 3.6588278337272795e-01 + -2.5838798494291719e+00 2.3914335376922762e+00 4.8643140841563526e-01 + -2.7672429207381173e+00 2.3598834037050054e+00 5.8513279067219248e-01 + -2.9232770885504573e+00 2.3147408254960999e+00 6.6433721833638681e-01 + -3.0575699504898473e+00 2.2596816071321206e+00 7.3161590501998985e-01 + -3.1691606319801369e+00 2.2159019836288842e+00 8.0341016247898067e-01 + -3.2510850705684886e+00 2.2541029915180015e+00 9.3282228675200907e-01 + -3.3187883444443766e+00 2.4598837322340392e+00 1.2746076745682720e+00 + -3.4507641333763961e+00 2.6259704822106631e+00 1.9053368926853238e+00 + -3.4650270132691912e+00 2.5040021675801545e+00 1.8185428557064520e+00 + id 12507 + loc 9.8626124858856201e-01 2.3593679070472717e-01 416 + blend 0.0000000000000000e+00 + interp 4.2251777705430471e-01:4.1856760978170149e-01:3.4854096142220947e-01:2.8581493157779952e-01:9.7832946002941412e-01:3.4855048896523544e-01:1.4006092511951478e+00:4.2251355187653417e-01:1.9531666101203431e+00:3.6642073694591132e-01:2.5493916356508031e+00:3.2792726588640936e-01:3.4364323954156237e+00 + CVs 20 + -5.0776065533544545e-01 1.3964013887506208e-01 9.1479317506823477e-02 + -8.5392962282138196e-01 1.7918691716186963e-01 1.6263029260010203e-01 + -1.1673274479797893e+00 1.8018606547020810e-01 2.1105158318825581e-01 + -1.4950294487465314e+00 1.6946403376489716e-01 2.2709949032153068e-01 + -1.8301956491278997e+00 1.4101510482264923e-01 2.1216503606201820e-01 + -2.1651954584833697e+00 9.0560122840454005e-02 1.6781615521442539e-01 + -2.4938178772204571e+00 1.6752884890856024e-02 9.3658943725956456e-02 + -2.8113936445420871e+00 -8.0129322454830509e-02 -1.0429263976021064e-02 + -3.1126118364100126e+00 -1.9901706248414186e-01 -1.4263591144593357e-01 + -3.3911937287638163e+00 -3.3650565575387370e-01 -3.0283122698579124e-01 + -3.6460098808300678e+00 -4.8836890834594460e-01 -4.9328219923624639e-01 + -3.8905501080395606e+00 -6.6228564125129319e-01 -7.0738466788146370e-01 + -4.1413205735841458e+00 -8.8356364921177666e-01 -9.1446075776114599e-01 + -4.3919690086285232e+00 -1.1665117454887313e+00 -1.0734251287214747e+00 + -4.6224877574608580e+00 -1.4982639308257966e+00 -1.1685662449076850e+00 + -4.8226810571215886e+00 -1.8599126711771243e+00 -1.2010266132425595e+00 + -4.9904718191140454e+00 -2.2363465082430505e+00 -1.1694049904663315e+00 + -5.1258820152950317e+00 -2.6102031327585857e+00 -1.0772184970030101e+00 + -5.2550556769401080e+00 -2.9543130850101291e+00 -9.8316024986917205e-01 + id 12508 + loc 4.0451991558074951e-01 4.5491553843021393e-02 411 + blend 0.0000000000000000e+00 + interp 4.5093776424995763e-01:3.4031936635559873e-01:5.0598824560990785e-01:4.5093325487231517e-01:1.0655039535819939e+00:4.0137737784517891e-01:1.9981653147641800e+00:3.5110626372578968e-01:2.5052791507030472e+00:3.4439723124691862e-01:3.0522499897524531e+00:3.6862091543234066e-01:3.9158640980972672e+00 + CVs 20 + -1.3712606860630111e-03 9.2641302354658894e-02 -6.6659939305816729e-01 + -8.8974343390014893e-03 1.0672579061542736e-01 -1.2009272715709554e+00 + 1.3425258462705786e-02 9.5147496396332909e-02 -1.6918873540251671e+00 + 6.6488790276853088e-02 7.5734850401680931e-02 -2.1712050318133893e+00 + 1.4272723152221389e-01 5.1166619086873144e-02 -2.6300546817539829e+00 + 2.3527082000517321e-01 2.4231711592975325e-02 -3.0629065738884718e+00 + 3.3916207931175635e-01 -6.3917416597474297e-03 -3.4650270000553167e+00 + 4.5112882439843355e-01 -4.7609808673063858e-02 -3.8348227942859969e+00 + 5.6813512909467045e-01 -1.0583448080736746e-01 -4.1797099002547178e+00 + 6.8693130400475089e-01 -1.8690387259085273e-01 -4.5100059698001731e+00 + 8.0449209117776710e-01 -2.9919973048391402e-01 -4.8302327633510078e+00 + 9.1866312867562339e-01 -4.5103034133509690e-01 -5.1425910097085925e+00 + 1.0280290701001777e+00 -6.4952556324505784e-01 -5.4492228660551030e+00 + 1.1306133909980904e+00 -8.9923698523132378e-01 -5.7476085600308586e+00 + 1.2236732652630817e+00 -1.1959396581716004e+00 -6.0257004799713503e+00 + 1.3044492746389325e+00 -1.5207975151359578e+00 -6.2652151196141688e+00 + 1.3708441950837227e+00 -1.8550766419838918e+00 -6.4564814060183844e+00 + 1.4185669939239260e+00 -2.2032195303376283e+00 -6.6045042780401690e+00 + 1.4476475355672886e+00 -2.5171084424461196e+00 -6.7182057394880434e+00 + id 12509 + loc 2.1454292535781860e-01 2.7089127898216248e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3691534583953409e-01:2.7082907443477161e-01:3.7749571281459393e-02:3.3530164235927346e-01:6.9455139915913100e-01:2.7258905123650545e-01:1.2051512088748355e+00:2.8578608235637826e-01:2.0066800448378830e+00:3.3691197668607570e-01:2.7054316663898899e+00:2.8473612524730829e-01:3.1874564689116198e+00 + CVs 20 + 5.0931242204281091e-01 4.4930029538348676e-01 2.7693470968509692e-01 + 9.5457226673464368e-01 8.3124548763496664e-01 4.9839142457538310e-01 + 1.4026382827183124e+00 1.1951818012263444e+00 7.0075784423205922e-01 + 1.8558872256470960e+00 1.5810316727181433e+00 9.6135816378648276e-01 + 2.2603523374226024e+00 1.9792501841843717e+00 1.3323502179028626e+00 + 2.5691743372502338e+00 2.3553366585021429e+00 1.8216687092721306e+00 + 2.7474434324753751e+00 2.6759991476522424e+00 2.4158200555467793e+00 + 2.7448779348353933e+00 2.9136719187117937e+00 3.1049400567843715e+00 + 2.4950872328901150e+00 3.0156501050283522e+00 3.8446360641111843e+00 + 2.0385463596190641e+00 2.9165180496181593e+00 4.4977286602803748e+00 + 1.5726868688944056e+00 2.6202960962737696e+00 4.9705293548701768e+00 + 1.2953182102240044e+00 2.2144540222518083e+00 5.2885205132993836e+00 + 1.2368578229715110e+00 1.8295717141403798e+00 5.5191405619199871e+00 + 1.2450368391228177e+00 1.4241324442607368e+00 5.7191256535269179e+00 + 1.2138748900464482e+00 8.4993899712872167e-01 5.8887324173691304e+00 + 1.0559085188017781e+00 9.0598604641491831e-02 5.9775445959026916e+00 + 6.5700686131518249e-01 -7.4661631033129794e-01 5.9388444458334702e+00 + 1.7047870960726727e-02 -1.4623761221324116e+00 5.7837613382716322e+00 + -7.8103483279419100e-02 -1.7843509098723698e+00 5.7406983629303268e+00 + id 12510 + loc 9.3743783235549927e-01 9.5701724290847778e-01 1074 + blend 0.0000000000000000e+00 + interp 4.2214588010634874e-01:2.6320004745072140e-01:6.9278448248825009e-02:3.6778696608788120e-01:1.0182332858089478e+00:2.0678831537930598e-01:1.4930501750148941e+00:2.2052040114959320e-01:2.6186628380495183e+00:2.6707265180877560e-01:2.8606933937617351e+00:4.2214165864754771e-01:3.4830755108878666e+00 + CVs 20 + 1.0812500541668134e-01 3.0747293882469290e-01 -1.8787495377940766e-01 + 2.4215856182347134e-01 6.5266150580874449e-01 -3.9713241014298156e-01 + 3.9052492886761192e-01 1.0348955263839452e+00 -5.9948045728772370e-01 + 5.3979000061470150e-01 1.4437211964897596e+00 -7.9592045750515861e-01 + 6.7696772779887682e-01 1.8651324802722837e+00 -1.0056470552167811e+00 + 7.9013517280943046e-01 2.2792287313800963e+00 -1.2455183579024660e+00 + 8.7257315313743944e-01 2.6604483505291157e+00 -1.5286602557634756e+00 + 9.2662405619515931e-01 2.9788374316268369e+00 -1.8634579551006976e+00 + 9.6893936428211680e-01 3.2151108929690198e+00 -2.2417149559831886e+00 + 1.0284038887432390e+00 3.3772855250626703e+00 -2.6376621837775005e+00 + 1.1254218429509175e+00 3.4790000314091531e+00 -3.0272532162251711e+00 + 1.2601841675047674e+00 3.5192129545633017e+00 -3.3997142158207954e+00 + 1.4247648160934798e+00 3.4941565105281995e+00 -3.7486779827277208e+00 + 1.6088205105831208e+00 3.4124225409732132e+00 -4.0578910200966725e+00 + 1.7996154626525034e+00 3.2915507986923767e+00 -4.3144559412825148e+00 + 2.0001396668431219e+00 3.1420914552929462e+00 -4.5147588593721810e+00 + 2.2288500503666677e+00 2.9582120127775249e+00 -4.6562701792372110e+00 + 2.4522989013322274e+00 2.7340642376428006e+00 -4.7560637934514558e+00 + 2.5164713739762163e+00 2.5396938685839912e+00 -4.8449669022217421e+00 + id 12511 + loc 7.1885770559310913e-01 2.6596966385841370e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9580839774828280e-01:3.9580443966430534e-01:6.0911843279692501e-01:2.8898328599032169e-01:1.1027056777204740e+00:3.4674924950629521e-01:2.0009034519229640e+00:3.7905484713739807e-01:2.4743366080224787e+00:2.9087907775661581e-01:3.0169690789617931e+00:2.8432611265990942e-01:3.9830658323724593e+00 + CVs 20 + -2.1425165441522989e-01 4.5947749676980570e-01 1.4319626541026298e-01 + -4.2592789983496349e-01 9.2723083623613145e-01 3.0325478221217173e-01 + -6.3772451295135524e-01 1.3842210469692766e+00 5.0647477618835834e-01 + -8.3745031368262524e-01 1.8106266243081961e+00 7.6831411283913909e-01 + -1.0277377485895294e+00 2.1860804006146335e+00 1.0999476406278583e+00 + -1.2358599913336943e+00 2.4866026884070607e+00 1.4969099925081986e+00 + -1.4840988502246724e+00 2.6941166181696330e+00 1.9286293065793794e+00 + -1.7751081608743375e+00 2.8021340635059366e+00 2.3591156025178708e+00 + -2.1008170994614050e+00 2.8085097066185973e+00 2.7626624728476639e+00 + -2.4469310371254678e+00 2.7129973180370066e+00 3.1228847191903677e+00 + -2.7935407056579207e+00 2.5188144514861186e+00 3.4304266560405163e+00 + -3.1169371794893816e+00 2.2302947259125294e+00 3.6819834815515526e+00 + -3.3780273025100631e+00 1.8589346478995563e+00 3.8682365976364648e+00 + -3.5303737006223157e+00 1.4400511827997657e+00 3.9714873366359797e+00 + -3.5654114867647091e+00 1.0053767728353313e+00 3.9888419128148112e+00 + -3.4966537128496680e+00 5.5823432675199014e-01 3.9351917484659533e+00 + -3.2827856704326983e+00 1.2756417820682886e-01 3.8357395109490495e+00 + -2.8852408496877495e+00 -9.2083436775126870e-02 3.7196825765670316e+00 + -2.4681758532972315e+00 -4.0594260252447389e-02 3.5857272059539875e+00 + id 12512 + loc 9.1521114110946655e-02 3.8679853081703186e-01 403 + blend 0.0000000000000000e+00 + interp 4.6446059593009126e-01:3.3379580499095662e-01:9.1072965760168545e-02:3.3410327992534372e-01:1.0000212760952141e+00:3.5079057758633625e-01:1.8445708007543029e+00:4.6445595132413198e-01:2.1667237382206297e+00:3.9354423546431533e-01:2.6190054095564239e+00:2.6422003581957315e-01:3.3102022812673835e+00 + CVs 20 + -1.7046443362192867e-01 2.2019033515066663e-01 6.1366468630723425e-02 + -3.3098898105469460e-01 4.3710590391433102e-01 1.5239952039208920e-01 + -4.8434374406456121e-01 6.5544630516386593e-01 2.6700715016006926e-01 + -6.2791519685356867e-01 8.6933857105275947e-01 4.0330444247697000e-01 + -7.5582555121641060e-01 1.0662775276746799e+00 5.6257911190410381e-01 + -8.5914383001694872e-01 1.2319875303043630e+00 7.4208134997135522e-01 + -9.2830805671122452e-01 1.3549848217522849e+00 9.3344735515423705e-01 + -9.5672734661103109e-01 1.4296572500438285e+00 1.1207156798020741e+00 + -9.4472249019377463e-01 1.4600415307771266e+00 1.2861721155864614e+00 + -9.0021944079018967e-01 1.4591970851429907e+00 1.4227752051826699e+00 + -8.3224514667714389e-01 1.4401451642563718e+00 1.5385029370907506e+00 + -7.4366225308754452e-01 1.4047104721934369e+00 1.6593370095522051e+00 + -6.3498050124011129e-01 1.3460845736209843e+00 1.8019896999564875e+00 + -5.1629178048328239e-01 1.2672208110326573e+00 1.9563729815958755e+00 + -3.9460806967795364e-01 1.1667004402117225e+00 2.1204978343952119e+00 + -2.6148437032252914e-01 1.0072429136074976e+00 2.3233028858874585e+00 + -1.2081662527795241e-01 7.5922487196782640e-01 2.6001330060536327e+00 + -1.5153673779953719e-02 5.0311416246215712e-01 2.9374787016991162e+00 + 2.1134005357511344e-02 4.3163871589645897e-01 3.1545428733544920e+00 + id 12513 + loc 1.3941536843776703e-01 6.9760143756866455e-02 406 + blend 0.0000000000000000e+00 + interp 4.6642869429336353e-01:3.7461895441856369e-01:1.3303805120590140e-01:3.8649884680908386e-01:1.1106465970796529e+00:4.3254280586543514e-01:1.6785549144176186e+00:4.0536248040065886e-01:2.0015906025789327e+00:3.4312180334728293e-01:2.8613094561930934e+00:4.6642403000642063e-01:3.3683054278782345e+00:4.0621298149154172e-01:3.8741990782146889e+00 + CVs 20 + 1.1394886048007871e-01 1.0893949332242285e-01 -1.4318632277700039e-01 + 2.5879161852691279e-01 1.7610141159675630e-01 -2.5734160007746698e-01 + 3.9546229649383985e-01 1.8843508467097497e-01 -3.8268201510504884e-01 + 5.2696429432293157e-01 1.6509512892913816e-01 -5.1916493766791949e-01 + 6.5272543596507016e-01 1.1196270270823858e-01 -6.5911788346774514e-01 + 7.7175561435062345e-01 3.5785955124846502e-02 -7.9742431043636464e-01 + 8.8377197980386413e-01 -5.6733559734449712e-02 -9.3034506831880459e-01 + 9.8913236552458872e-01 -1.5988769662673924e-01 -1.0546966235615824e+00 + 1.0893511967258873e+00 -2.6909957687703334e-01 -1.1672996341080863e+00 + 1.1874070560640770e+00 -3.8048509763502014e-01 -1.2651756889255092e+00 + 1.2854808628396526e+00 -4.8966024732381219e-01 -1.3465658631048816e+00 + 1.3849082355737941e+00 -5.9208353145615100e-01 -1.4114374160100953e+00 + 1.4861213448838082e+00 -6.8366089151774290e-01 -1.4617516615956809e+00 + 1.5883467839199885e+00 -7.6112398742512122e-01 -1.5015514965744390e+00 + 1.6905486036294035e+00 -8.2120008051771221e-01 -1.5370191687321826e+00 + 1.7910725916482706e+00 -8.5939601100574670e-01 -1.5794689482236410e+00 + 1.8856163443688085e+00 -8.7253064341271547e-01 -1.6437145738383903e+00 + 1.9658180241441221e+00 -8.6123106682511097e-01 -1.7433532623120409e+00 + 2.0700129067839153e+00 -8.1719650956769352e-01 -1.7876028318080193e+00 + id 12514 + loc 4.8438122868537903e-01 3.7814190983772278e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7063147964959534e-01:2.9367334309750248e-01:1.4463694153208329e-01:2.8022645753817899e-01:9.7925179437955667e-01:3.1644139352405076e-01:1.9257689468555987e+00:4.7062677333479885e-01:2.2256291190357569e+00:3.6606391026806367e-01:3.0084838753101901e+00:4.3927816414893989e-01:3.4663380492750351e+00 + CVs 20 + 4.4370860512158994e-01 4.4648778407441869e-01 -6.1417384797918355e-02 + 6.7697631279883352e-01 7.9555896423668637e-01 -1.4208601133061236e-01 + 8.3600377644901136e-01 1.1123708176881939e+00 -2.2667893182598409e-01 + 9.7643103514393736e-01 1.4341795880758090e+00 -3.1119527023299748e-01 + 1.0865442394570408e+00 1.7438490041087116e+00 -3.9715632177505389e-01 + 1.1540410892745800e+00 2.0200158367351522e+00 -4.8611579987214965e-01 + 1.1642008831593638e+00 2.2344464898626621e+00 -5.7855345305702421e-01 + 1.0955714726479562e+00 2.3302688937397118e+00 -6.6492568201228397e-01 + 9.9458030718581025e-01 2.1378522241345319e+00 -6.2807182267261008e-01 + 1.1477376545189579e+00 1.9397089038628983e+00 -4.1301816124743929e-01 + 1.2273654891338872e+00 1.8788665445860042e+00 -3.1977987213586950e-01 + 1.2291916249248627e+00 1.7687434846648027e+00 -2.5058959581863671e-01 + 1.1913754704960393e+00 1.5885924072470434e+00 -1.7097372648138795e-01 + 1.1234395533899681e+00 1.3471607309076981e+00 -7.6518412963408056e-02 + 1.0146742848368497e+00 1.0794729532129055e+00 3.0380177534244684e-02 + 8.2657113389613746e-01 8.5131704318734591e-01 1.4658118929468006e-01 + 4.2944087246623242e-01 8.0114921093621561e-01 2.4179625330644544e-01 + 1.7830687989132621e-01 1.5530651949785905e+00 -4.5881977336290763e-02 + 1.7736498597334882e-01 1.6475978279299341e+00 -4.7973823193985424e-02 + id 12515 + loc 3.8124442100524902e-01 9.1354680061340332e-01 372 + blend 0.0000000000000000e+00 + interp 5.1041967892907170e-01:3.8088754034444849e-01:5.3165211872306384e-02:3.9549718055393601e-01:8.6123142311421375e-01:4.8810802259418468e-01:1.1138695862626420e+00:3.3514037196477525e-01:1.9493889587011228e+00:5.1041457473228247e-01:2.9491737216153022e+00:3.5195684365554175e-01:3.5980472561462182e+00 + CVs 20 + -3.1085695372233590e-01 5.7729232068938896e-01 -1.8993003291736382e-01 + -6.0118437624594279e-01 1.1144915648863336e+00 -3.8226230614059731e-01 + -8.5131199523081591e-01 1.6012014330927715e+00 -5.8382301168300987e-01 + -1.0418694051134434e+00 2.0514472622833417e+00 -7.9953126739418878e-01 + -1.1083275357370330e+00 2.4968594945833464e+00 -1.0743210145960214e+00 + -9.4983111803155229e-01 2.8976559115523832e+00 -1.4412410177299584e+00 + -5.3269489141697401e-01 3.1417637071860218e+00 -1.8594285703896496e+00 + 9.0557482480909002e-02 3.1441387164652577e+00 -2.2621128113462139e+00 + 8.3340128410895553e-01 2.8861621617819688e+00 -2.6116501443752447e+00 + 1.6046911070002836e+00 2.3864516987380355e+00 -2.8900241652639767e+00 + 2.3311528730216167e+00 1.6910628053624699e+00 -3.0852063066112660e+00 + 2.9633775818847496e+00 8.9519717311846392e-01 -3.1873634279054071e+00 + 3.5021896205111820e+00 1.7346320815130190e-01 -3.2080765310412942e+00 + 3.8970436305174685e+00 -2.7912052722442371e-01 -3.2226775114276802e+00 + 4.0177707319967446e+00 -4.6810768526207647e-01 -3.2848345486441377e+00 + 4.0924281091730634e+00 -6.1340285669731553e-01 -3.3255777520839334e+00 + 4.3602492912782731e+00 -7.2420466456077848e-01 -3.3774575516537828e+00 + 4.8414719674195137e+00 -7.0693099497867129e-01 -3.5149597234295267e+00 + 5.5111821743414025e+00 -4.3887446782024142e-01 -3.8397354026651205e+00 + id 12516 + loc 1.4485894143581390e-01 3.5411635041236877e-01 1085 + blend 0.0000000000000000e+00 + interp 5.0200882511022504e-01:2.9056952880960368e-01:1.9606809469550956e-02:3.2747008660143395e-01:6.9606633423128672e-01:2.5224653773677513e-01:1.1244235430874012e+00:5.0200380502197395e-01:2.0169840486607238e+00:2.8839882549266688e-01:2.7110793261155193e+00:4.6562519333957531e-01:3.2635498487970800e+00 + CVs 20 + 4.8161997389690314e-01 4.2431896452032919e-01 2.1070363124242275e-01 + 8.6496813962060026e-01 7.9292629247013013e-01 4.3813489287077878e-01 + 1.2141788601194614e+00 1.1385349808098524e+00 7.0564820627973357e-01 + 1.5411103000226412e+00 1.4797091866118484e+00 1.0457263844576485e+00 + 1.8113565394912556e+00 1.8009791483487627e+00 1.4743170410195094e+00 + 1.9875645619401912e+00 2.0770094838116830e+00 1.9942330553175638e+00 + 2.0350346940969599e+00 2.2739832420922799e+00 2.5884967122834968e+00 + 1.9342383404961996e+00 2.3556460870401863e+00 3.2145357204459843e+00 + 1.6997385224018384e+00 2.2929078694008029e+00 3.8083080118577359e+00 + 1.4022050755489968e+00 2.0849047364350977e+00 4.3023310771834682e+00 + 1.1331374496102664e+00 1.7716455151132235e+00 4.6694263962231117e+00 + 9.4120429614687950e-01 1.4007604272922600e+00 4.9233612086174974e+00 + 8.4388550769593373e-01 1.0114684644849818e+00 5.0825866922312590e+00 + 8.5729799151182529e-01 6.5248028651045187e-01 5.1629587090331706e+00 + 9.7484636909372735e-01 3.7451922916755803e-01 5.1834513378785596e+00 + 1.1311939265056064e+00 1.9657009191110042e-01 5.1772186577058594e+00 + 1.2605436495849256e+00 1.1145323773977250e-01 5.1776795282920300e+00 + 1.3383723401104888e+00 7.0640314815933192e-02 5.1855802741314534e+00 + 1.3965221728886155e+00 -2.1759189334476436e-01 5.2343173235482592e+00 + id 12517 + loc 4.7464993596076965e-01 4.6351668238639832e-01 1048 + blend 0.0000000000000000e+00 + interp 3.2425142944192448e-01:3.2424818692763008e-01:2.8511818510627462e-01:3.0881969191053327e-01:9.9938564039624600e-01:2.8067040998234777e-01:1.7957177173115286e+00:2.7493934959134431e-01:2.4280264981548747e+00:2.4975552890315647e-01:3.0434585809725681e+00:2.6693156437300197e-01:3.8972230722295067e+00 + CVs 20 + -4.0399156323043878e-01 6.3096722885784040e-01 -9.5426541361368328e-02 + -7.4350840167086218e-01 1.2218877885205726e+00 -2.5746351679772389e-01 + -1.0066871716716119e+00 1.7843995834055999e+00 -4.8959971438750755e-01 + -1.1832997866715576e+00 2.3019426872618252e+00 -7.8789259090757646e-01 + -1.2667484756166436e+00 2.7312591537842459e+00 -1.1441974914669326e+00 + -1.2786317244050989e+00 3.0361630230615724e+00 -1.5212685422787011e+00 + -1.2491738661717948e+00 3.2197414289521777e+00 -1.8674751859623702e+00 + -1.1982542098730566e+00 3.2986443215414116e+00 -2.1821323327407183e+00 + -1.1530942818682803e+00 3.2339960629953550e+00 -2.5112298892728564e+00 + -1.1309712310741267e+00 2.9682467458038881e+00 -2.8456251449877463e+00 + -1.0810422975726908e+00 2.5008556190758657e+00 -3.1175103580072339e+00 + -9.1130942108838031e-01 1.9007945920301323e+00 -3.2666359630130053e+00 + -5.8352586388399397e-01 1.2370629305267167e+00 -3.2860277334581758e+00 + -1.5189853328757111e-01 5.1041326314863367e-01 -3.2028633525722991e+00 + 2.2912200025109802e-01 -3.1566942430300982e-01 -3.0784514756198775e+00 + 2.5046727054466411e-01 -1.3056511276233456e+00 -3.1829117338901805e+00 + -7.6441651645378617e-01 -6.4028211952985703e-01 -4.7554565191323093e+00 + -5.4215659067038935e-01 3.2182553418596188e-01 -4.7414971379674089e+00 + -3.4907412945518379e-01 8.5547854893200526e-01 -4.9223666647402622e+00 + id 12518 + loc 8.2227742671966553e-01 6.7440927028656006e-02 397 + blend 0.0000000000000000e+00 + interp 3.7042876690853926e-01:2.5323712553301519e-01:3.6086864795920748e-01:2.7602763331300356e-01:1.0096155667859408e+00:3.1369886421482168e-01:1.7046342109355899e+00:2.7140600737610093e-01:2.1336816128464728e+00:2.9911762134960646e-01:3.0005539213593768e+00:3.7042506262087022e-01:3.7948195596747514e+00 + CVs 20 + -1.0028494635977556e+00 1.2327504331637526e-01 3.8230640813102285e-01 + -1.6377066903145974e+00 7.9433339817119530e-02 6.9427193139642873e-01 + -2.2048985388499389e+00 -2.4935021832099891e-02 1.0031405310854593e+00 + -2.8153186990050183e+00 -1.3843192934606258e-01 1.3204443052887793e+00 + -3.4634647711576227e+00 -2.7569490986622847e-01 1.6396402913981785e+00 + -4.1359778951895647e+00 -4.5266544699386224e-01 1.9581674207141291e+00 + -4.8083220841225343e+00 -6.8257686090670444e-01 2.2771003499129292e+00 + -5.4480611305508804e+00 -9.7603099091374346e-01 2.5949089402053396e+00 + -6.0213913433769495e+00 -1.3351325843218560e+00 2.9078222088703343e+00 + -6.4980004684222648e+00 -1.7484441423777708e+00 3.2175522417027942e+00 + -6.8603733841422283e+00 -2.1950794293606637e+00 3.5284676608580048e+00 + -7.1174956618646723e+00 -2.6535736525724873e+00 3.8372516894307025e+00 + -7.2979022899757986e+00 -3.1125668842961169e+00 4.1334647768690669e+00 + -7.4258681761651131e+00 -3.5699363983399879e+00 4.4103510618445272e+00 + -7.5126971193723726e+00 -4.0287697111742320e+00 4.6643070042030272e+00 + -7.5598288810430141e+00 -4.4990647601867337e+00 4.8869311498690786e+00 + -7.5635362751636128e+00 -4.9914658673036998e+00 5.0652857869250241e+00 + -7.5261594285490219e+00 -5.5018859016590209e+00 5.1923214220349569e+00 + -7.5428992918575810e+00 -5.9888383868682311e+00 5.3168292436066560e+00 + id 12519 + loc 7.0839005708694458e-01 9.7536258399486542e-02 1068 + blend 0.0000000000000000e+00 + interp 4.1025178441550569e-01:3.9712011984039286e-01:3.4000421702768191e-01:4.1024768189766153e-01:1.0033273523202595e+00:3.9942128672623201e-01:1.9997890011945703e+00:3.1461870778332734e-01:2.4993982875114908e+00:2.9450946785061294e-01:3.4149486327982084e+00 + CVs 20 + -2.7182524557468446e-02 4.8322827614279962e-01 6.1578144009530433e-02 + -9.2654773601002410e-02 9.7542745152162835e-01 1.3106189241846966e-01 + -2.0591419204759642e-01 1.4618797496598959e+00 1.7743301395894726e-01 + -3.8756531003712286e-01 1.9249600500840174e+00 1.9078070330708652e-01 + -6.5376423469656497e-01 2.3361187007525999e+00 1.7333041011379069e-01 + -1.0018439874745890e+00 2.6674327266701185e+00 1.3945841046946517e-01 + -1.4180206793120353e+00 2.9032536292073994e+00 1.1758388439749634e-01 + -1.8708344285145713e+00 3.0373084551237679e+00 1.3319260942297639e-01 + -2.3288637840218751e+00 3.0772435287511564e+00 2.0775064591749876e-01 + -2.8214603337206134e+00 2.9792030656060886e+00 3.9954856475047745e-01 + -3.3050432894650430e+00 2.5295772781734804e+00 7.8658598302910598e-01 + -3.4557171236770574e+00 1.8163673308244037e+00 1.1154362592084874e+00 + -3.3874151519957767e+00 1.2411922486825100e+00 1.2324403870445682e+00 + -3.2313989361035595e+00 7.4471101189122002e-01 1.2454338599338364e+00 + -3.0223523375515504e+00 3.1102346875885678e-01 1.1775885675039834e+00 + -2.8549731657212347e+00 -2.3885267260682630e-03 1.0491109554589340e+00 + -2.7970034571049336e+00 -1.7545793417479411e-01 9.0091556219655455e-01 + -2.8497746843716358e+00 -2.0808417802938317e-01 7.7053992815639860e-01 + -2.8316157438703873e+00 -3.5124213085014383e-01 6.1833467266648590e-01 + id 12520 + loc 2.0140999555587769e-01 5.7388013601303101e-01 1075 + blend 0.0000000000000000e+00 + interp 4.2316268514526190e-01:2.7368826642274047e-01:8.7223720338700739e-02:2.5576770230308182e-01:1.0506582821238588e+00:3.6396884758532516e-01:1.9274048896788751e+00:2.7526178331723472e-01:2.7182277936987296e+00:3.6118010657639249e-01:3.0420479387104722e+00:4.2315845351841047e-01:3.6049469328822581e+00 + CVs 20 + 8.2478202811955975e-02 2.7333975614749972e-01 -1.6508099040472232e-01 + 1.9555581381033729e-01 5.3321591471994734e-01 -3.4857897963038370e-01 + 3.2564435763796140e-01 7.7822535427488349e-01 -5.3193516714971012e-01 + 4.6640843151612238e-01 1.0067434842573879e+00 -7.1366020107649453e-01 + 6.1664862437523715e-01 1.2220521994572919e+00 -9.0132664613719404e-01 + 7.7202317178728963e-01 1.4307262811043007e+00 -1.0948713250023738e+00 + 9.2645191095524693e-01 1.6371109631822067e+00 -1.2880918619922401e+00 + 1.0774344548696999e+00 1.8383334793913757e+00 -1.4741836388651863e+00 + 1.2290325536002629e+00 2.0260390446532934e+00 -1.6530041694178803e+00 + 1.3879134412925409e+00 2.1916909969667167e+00 -1.8361703218648255e+00 + 1.5590972782945047e+00 2.3244280004537585e+00 -2.0456245332522691e+00 + 1.7429433684761824e+00 2.4020798069013352e+00 -2.3076229037608793e+00 + 1.9303430099182524e+00 2.3882248050562489e+00 -2.6243120731010547e+00 + 2.1109075564678923e+00 2.2724335147496815e+00 -2.9439949781741896e+00 + 2.2903907067239775e+00 2.0766451289986616e+00 -3.2389637411111920e+00 + 2.4699281420218582e+00 1.7779482074202977e+00 -3.5412599074978917e+00 + 2.6197546596590828e+00 1.3257851250765686e+00 -3.8751357029234867e+00 + 2.6996689601219059e+00 7.5349854426416718e-01 -4.2117798867721481e+00 + 2.8303686738658698e+00 3.9328039219284228e-01 -4.4317970862299711e+00 + id 12521 + loc 2.3748600482940674e-01 1.8410281836986542e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7549499905964504e-01:2.4537308140051250e-01:2.7123215866841588e-01:4.7549024410965446e-01:1.0217525215411627e+00:3.5700736595596821e-01:1.6328131196457361e+00:2.7248474048514709e-01:2.3420718559719593e+00:3.2380082764805573e-01:3.2267966093604992e+00:3.6468271038627476e-01:3.9175562353685849e+00 + CVs 20 + 6.0574977737034533e-02 3.3642784426643924e-01 -6.7489555494022607e-02 + 5.2111551364927455e-02 6.3166658570576462e-01 -1.3527092632465551e-01 + 1.1095721655616009e-02 9.1886758885823494e-01 -2.2165535587706481e-01 + -4.1663212308956865e-02 1.2005952565741018e+00 -3.3101172427468284e-01 + -1.0776766112285052e-01 1.4652732252498426e+00 -4.6182115584108707e-01 + -1.8732677117847252e-01 1.6971440097959931e+00 -6.0521525365994888e-01 + -2.8178894943302413e-01 1.8821281147116236e+00 -7.4929884830439164e-01 + -3.9158669734326679e-01 2.0134035112467550e+00 -8.8416754611822845e-01 + -5.1429218852843850e-01 2.0913588279352444e+00 -1.0033604361296655e+00 + -6.4890341840562760e-01 2.1177173381237338e+00 -1.1066692899607609e+00 + -7.9576155017905348e-01 2.0883365036042760e+00 -1.1983416021332127e+00 + -9.5255860306390083e-01 1.9952975729253764e+00 -1.2820103570518602e+00 + -1.1147913187143523e+00 1.8344146737721296e+00 -1.3592742612840230e+00 + -1.2775308636633125e+00 1.6078242389416830e+00 -1.4302784114305180e+00 + -1.4317898411557908e+00 1.3207168645912963e+00 -1.4934784219016723e+00 + -1.5406314734053876e+00 9.8457802720358978e-01 -1.5392316984997159e+00 + -1.5210925595098987e+00 6.4495943281155255e-01 -1.5415542551795143e+00 + -1.3570549643321241e+00 3.7410489278369952e-01 -1.4839290917520334e+00 + -1.1879083543422855e+00 -8.3251538582124196e-03 -1.4454970197905439e+00 + id 12522 + loc 2.4706809222698212e-01 2.4175388738512993e-02 413 + blend 0.0000000000000000e+00 + interp 4.8311748321739384e-01:3.8316042264681677e-01:5.2181393387115238e-01:3.9057568114595792e-01:1.0164022893846758e+00:4.8311265204256171e-01:1.9258413387526656e+00:3.7210350355341909e-01:2.1705782528158255e+00:3.2901274207025732e-01:3.6882029148948359e+00 + CVs 20 + -5.1386468951309841e-02 1.8925029642197566e-01 -1.0608499701619285e+00 + -1.2236105828090663e-01 2.6529928764600108e-01 -1.7539106811901126e+00 + -1.8663990589095975e-01 3.0865897135572962e-01 -2.3552237188664282e+00 + -2.3078583564240338e-01 3.5186488605572680e-01 -2.9727803961267218e+00 + -2.4220390920449777e-01 3.8157226278420259e-01 -3.6000599832030242e+00 + -2.1196993569145950e-01 3.8060524803930712e-01 -4.2264747092248518e+00 + -1.3724689792742373e-01 3.3085048726740474e-01 -4.8405560237387162e+00 + -1.9772768972539913e-02 2.1534997035773651e-01 -5.4299714309120040e+00 + 1.3476782236362980e-01 2.1904691861082348e-02 -5.9775576013403331e+00 + 3.1243337568499807e-01 -2.5131753710381499e-01 -6.4619890566806086e+00 + 4.9000098278445992e-01 -5.9287303739219688e-01 -6.8620540035927853e+00 + 6.4428458114578546e-01 -9.7944063686172456e-01 -7.1618665554532832e+00 + 7.6487645580683283e-01 -1.3832307955520420e+00 -7.3616449890256961e+00 + 8.5531158538395347e-01 -1.7805376686806329e+00 -7.4792472170253195e+00 + 9.1854868542846557e-01 -2.1556876349531153e+00 -7.5418327211744858e+00 + 9.4971667235176560e-01 -2.5007671927297359e+00 -7.5761261786555707e+00 + 9.4708708743452452e-01 -2.8187215761547471e+00 -7.5975719612504191e+00 + 9.2312687791096715e-01 -3.1252910325367766e+00 -7.5982647676440429e+00 + 8.4981164096884632e-01 -3.4941022223078395e+00 -7.4714795765353736e+00 + id 12523 + loc 7.9836517572402954e-02 6.0342377424240112e-01 409 + blend 0.0000000000000000e+00 + interp 4.4408110099104736e-01:4.2118435205140481e-01:3.6930345706120971e-04:4.0160038884216148e-01:3.9235047566113945e-01:4.4407666018003750e-01:9.9782813605916432e-01:3.3396607234570430e-01:1.4712705313103698e+00:3.9783297906986614e-01:2.0418397593188287e+00:2.5502316147241566e-01:2.6840194074284942e+00:3.6967436548836957e-01:3.0633516291958029e+00:3.0297138488183289e-01:3.6804056789029405e+00 + CVs 20 + 5.2059819925623096e-01 2.1780920762353817e-01 -2.7470877848420178e-01 + 9.5952306675977916e-01 3.9105464717788568e-01 -5.5536641367975514e-01 + 1.3885949526850552e+00 5.5989479759448157e-01 -8.5463221322665073e-01 + 1.8091727804864908e+00 7.1594846458208616e-01 -1.1854925137675350e+00 + 2.1838865562219456e+00 8.2715353108794376e-01 -1.5535066807208309e+00 + 2.4867302911646618e+00 8.7395596405391196e-01 -1.9547624534778461e+00 + 2.7156108932269603e+00 8.5057149454876402e-01 -2.3812451276194393e+00 + 2.8902421958098601e+00 7.5366679584540353e-01 -2.8305494956474200e+00 + 3.0358831252439935e+00 5.7503532084312781e-01 -3.2951941920036720e+00 + 3.1646798119405997e+00 3.0273150987424180e-01 -3.7522637556288156e+00 + 3.2767632304560750e+00 -6.1120558725669127e-02 -4.1714695327306250e+00 + 3.3677558818625855e+00 -4.7616646796997109e-01 -4.5384617446237190e+00 + 3.4418507785758798e+00 -8.8792504636300817e-01 -4.8667437350621832e+00 + 3.5136567325908725e+00 -1.2772879710258791e+00 -5.1819539095143599e+00 + 3.6036326064933886e+00 -1.6675074610438638e+00 -5.5186881262142284e+00 + 3.7435618652083140e+00 -2.1114007140950148e+00 -5.9314563070582214e+00 + 3.9694689053957664e+00 -2.6445568138822675e+00 -6.4468242945439833e+00 + 4.2839131850909888e+00 -3.2480162510246364e+00 -7.0078710392091628e+00 + 4.5871759205913474e+00 -3.8454088538512541e+00 -7.5216618880310797e+00 + id 12524 + loc 5.9185254573822021e-01 3.9447265863418579e-01 416 + blend 0.0000000000000000e+00 + interp 4.4103415895338344e-01:4.4102974861179395e-01:8.3611010708489419e-02:2.5284893231944378e-01:1.0013283527124319e+00:2.7894524681670602e-01:1.9191302470668972e+00:2.7511729204996671e-01:2.7673250745714055e+00:2.9976060292192463e-01:3.7169423773563053e+00 + CVs 20 + -5.3342224032629737e-01 7.6880567870124747e-02 1.4908076118994285e-01 + -8.5716462875067534e-01 4.2241489561261086e-02 3.1327886053654325e-01 + -1.1577059944029695e+00 -3.8239805061123233e-02 4.9025037050338793e-01 + -1.4953093271997173e+00 -1.2559783736794972e-01 6.5582352367170194e-01 + -1.8685604088827126e+00 -2.2309565215029536e-01 8.0069759868396251e-01 + -2.2754262331965802e+00 -3.3388174639235102e-01 9.1314869007217625e-01 + -2.7069491361260960e+00 -4.5917572153597397e-01 9.7812162878912379e-01 + -3.1474153958202971e+00 -5.9800503123629078e-01 9.8426849576861175e-01 + -3.5826321225410425e+00 -7.4855825340810234e-01 9.2825154375463170e-01 + -3.9995031188958996e+00 -9.0756181923824708e-01 8.1201854772607973e-01 + -4.3699098990479586e+00 -1.0646923077979789e+00 6.4747089305401184e-01 + -4.6559945042412227e+00 -1.2043311963030021e+00 4.6689524464882060e-01 + -4.8593830722062679e+00 -1.3264087193411966e+00 3.0253390278380543e-01 + -5.0378268616782034e+00 -1.4637727991574752e+00 1.6172441499768830e-01 + -5.2349427284046488e+00 -1.6527717039944685e+00 4.8900552837913169e-02 + -5.4376202414813450e+00 -1.8940701908090898e+00 -2.2112784715706657e-02 + -5.6162913761053961e+00 -2.1674643543983070e+00 -3.5418671392272061e-02 + -5.7573451837033414e+00 -2.4553931355682024e+00 1.8650460706491567e-02 + -5.9885270239980679e+00 -2.8482618744200492e+00 8.1806871989897778e-02 + id 12525 + loc 8.9866763353347778e-01 2.3065330088138580e-01 411 + blend 0.0000000000000000e+00 + interp 4.3866915270307527e-01:3.3795671376073966e-01:2.5638181299909590e-01:2.9136028007566261e-01:9.7197874047441590e-01:4.3866476601154825e-01:1.3499428556739839e+00:3.5605793708919575e-01:1.9933327703531034e+00:3.8120888864628794e-01:2.8855761347069522e+00:4.1275987597963615e-01:3.4541907757413437e+00 + CVs 20 + -6.3561294908057031e-01 2.0276423946688993e-01 2.0868034132240643e-01 + -1.1347549235511334e+00 2.7990072807422556e-01 3.9624920126958851e-01 + -1.6072838714586857e+00 2.9977540342901782e-01 5.7030506219280852e-01 + -2.1003496597725282e+00 2.8793036846932984e-01 7.3216450028903601e-01 + -2.6043955759776685e+00 2.4202042391286083e-01 8.7563248978537023e-01 + -3.1078092446772074e+00 1.6395174883653629e-01 9.9972337440596237e-01 + -3.5986118402374299e+00 5.7710800779857241e-02 1.1060965176449273e+00 + -4.0660490695096971e+00 -7.4075720375200937e-02 1.1956100835385000e+00 + -4.5028705426500091e+00 -2.3038954367943609e-01 1.2705758598752332e+00 + -4.9053084934662063e+00 -4.1106211158748929e-01 1.3377652868555971e+00 + -5.2750809491786077e+00 -6.1790042439152337e-01 1.4040318812942352e+00 + -5.6231538593866812e+00 -8.5582256228145681e-01 1.4702635377525219e+00 + -5.9619929784235062e+00 -1.1311623733091145e+00 1.5346108604592454e+00 + -6.2944740366263519e+00 -1.4494264143723838e+00 1.6000352166202914e+00 + -6.6133780958257962e+00 -1.8148152297289402e+00 1.6722356864562602e+00 + -6.9051387330684619e+00 -2.2290856995298483e+00 1.7506152251737974e+00 + -7.1551321741171874e+00 -2.6898967361299584e+00 1.8280149696650230e+00 + -7.3583586937291390e+00 -3.1861052943604764e+00 1.9024472131988310e+00 + -7.6035265284125888e+00 -3.6240325625884648e+00 1.9915198539192256e+00 + id 12526 + loc 5.1493078470230103e-01 2.4700300395488739e-01 1074 + blend 0.0000000000000000e+00 + interp 4.6564517368514768e-01:2.6028611927633211e-01:7.3100254605547699e-02:3.2128708046766752e-01:9.5689588544581938e-01:2.5613196455994186e-01:1.6965309254435668e+00:4.6564051723341088e-01:2.1324502084493622e+00:2.8691624019236778e-01:2.9456400180512086e+00:2.7328486999704216e-01:3.5298912779188609e+00 + CVs 20 + -1.8052046236817054e-01 2.8243208830639799e-01 2.5483464884767937e-01 + -3.1381250456341137e-01 5.7282262633767234e-01 5.2620564194513653e-01 + -4.4512456661277111e-01 8.5081215570890323e-01 8.1416291028727328e-01 + -5.8178799401836201e-01 1.1092234498540923e+00 1.1072794332313565e+00 + -7.1770610162509396e-01 1.3446821266055768e+00 1.4042338347207215e+00 + -8.4619157083862528e-01 1.5492979069180646e+00 1.7167122104386978e+00 + -9.6875142994815278e-01 1.7216457457653822e+00 2.0584003606206602e+00 + -1.0938813654356006e+00 1.8623395806662819e+00 2.4370074879702113e+00 + -1.2225721541017129e+00 1.9632665719806577e+00 2.8484278647943051e+00 + -1.3446307879667452e+00 2.0116166901404262e+00 3.2785618693924845e+00 + -1.4494514241104559e+00 1.9897517390638462e+00 3.7053812966304798e+00 + -1.5260551681488481e+00 1.8851491979003887e+00 4.0996229519899465e+00 + -1.5662889918525815e+00 1.7019491223085321e+00 4.4334909241299085e+00 + -1.5738098196452190e+00 1.4569231636474775e+00 4.6938293280645880e+00 + -1.5550268225188923e+00 1.1768672308847443e+00 4.8716222886363463e+00 + -1.5087466464485277e+00 9.1734352548698539e-01 4.9472810896456334e+00 + -1.4464499418229488e+00 7.3246965180382118e-01 4.9252885435360954e+00 + -1.3898469466844319e+00 5.6508563282787627e-01 4.8745994570501114e+00 + -1.3127951883404367e+00 1.7634917827152460e-01 4.9340682531369353e+00 + id 12527 + loc 8.9216274023056030e-01 9.1921669244766235e-01 1076 + blend 0.0000000000000000e+00 + interp 2.9518817918718171e-01:2.8661262058018311e-01:8.1703281014227391e-01:2.6854318293124285e-01:1.2793893798684515e+00:2.8078206130813738e-01:2.1531158230009750e+00:2.9182424851455696e-01:2.9787287509762930e+00:2.9518522730538987e-01:3.8929270531411024e+00 + CVs 20 + 1.8399846204606043e-01 3.5643376949178734e-01 1.3666902520607958e-02 + 3.8724446067260676e-01 7.3305123280583939e-01 -1.8593683039084999e-02 + 6.1331403462283129e-01 1.1247318953207430e+00 -7.2530203490891565e-02 + 8.6840358833847442e-01 1.5285299050157457e+00 -1.4204080491904678e-01 + 1.1561427725543778e+00 1.9412077417327909e+00 -2.4456476543607841e-01 + 1.4679570594358289e+00 2.3506874311596189e+00 -4.2144380985573610e-01 + 1.7792018394659210e+00 2.7187034742129637e+00 -7.2628076708730283e-01 + 2.0535362205865284e+00 2.9581591073447453e+00 -1.1944718582125287e+00 + 2.2245879707189307e+00 2.9428620659948130e+00 -1.7748759412846371e+00 + 2.2503442254272872e+00 2.6668179836304455e+00 -2.3048549702307355e+00 + 2.1745962575289850e+00 2.2461794655042033e+00 -2.7031267260653444e+00 + 2.0701505619908804e+00 1.7709169594608596e+00 -2.9995299190135043e+00 + 1.9911048501239501e+00 1.2950151477497527e+00 -3.2601145794872961e+00 + 1.9577775451210180e+00 8.8908532120776584e-01 -3.5539411706214135e+00 + 1.9650434652567541e+00 6.5305001295351961e-01 -3.9260750677199683e+00 + 1.9864581765481892e+00 6.9552444120964396e-01 -4.3396369667662196e+00 + 1.9514442898451987e+00 1.0401616191552394e+00 -4.6371223775266026e+00 + 1.8717024212493019e+00 1.4485125078277019e+00 -4.8328387089059310e+00 + 1.8638183537384856e+00 1.7653217564044037e+00 -5.2027028678886813e+00 + id 12528 + loc 5.5238622426986694e-01 6.2451738119125366e-01 1081 + blend 0.0000000000000000e+00 + interp 4.3974543146644268e-01:3.3728814642703403e-01:1.5188690677277406e-01:3.9833250944551479e-01:1.3824016477990471e+00:3.4464736274747471e-01:1.9897682208153369e+00:4.3974103401212805e-01:2.3699089638935273e+00:3.6667707759146079e-01:2.9834228884906571e+00:4.0274844823533767e-01:3.4508333815430503e+00 + CVs 20 + 2.1104454825432856e-02 5.2983051276617987e-01 5.4736722436307161e-01 + 8.4038213277550927e-02 9.2941541371275660e-01 8.8112839292514011e-01 + 1.6936405806913030e-01 1.2805449881008149e+00 1.1387238037411711e+00 + 2.7100354007037153e-01 1.6160594784188587e+00 1.3737529541919897e+00 + 3.9053684054755455e-01 1.9261167579302831e+00 1.5758327047176830e+00 + 5.2348678068267440e-01 2.1987035892818039e+00 1.7326700269726061e+00 + 6.5936322955218563e-01 2.4199882352084749e+00 1.8317541236409527e+00 + 7.8171048731863824e-01 2.5748401506064731e+00 1.8696824814256141e+00 + 8.6293363470144002e-01 2.6469355944649036e+00 1.8641362204811880e+00 + 8.8085471479354216e-01 2.6541161410609080e+00 1.8671140170537206e+00 + 8.8774216396534111e-01 2.6455161135110981e+00 1.8670009850146174e+00 + 8.9778786652827192e-01 2.5889933807908396e+00 1.8256869967846241e+00 + 8.9376320535283127e-01 2.4671933106119592e+00 1.7608379732618262e+00 + 8.7102066268796907e-01 2.2832395443354376e+00 1.6918441403943638e+00 + 8.3208114215812579e-01 2.0522350268567164e+00 1.6388872660815448e+00 + 7.8239375261183075e-01 1.8156273843434976e+00 1.6330267209550140e+00 + 7.2592677972368391e-01 1.6172204774359975e+00 1.6971790048252695e+00 + 6.6092257749286976e-01 1.4029492636060372e+00 1.8440618782964016e+00 + 5.8208245844982931e-01 9.9945002804472249e-01 2.1144060964232700e+00 + id 12529 + loc 7.5377786159515381e-01 3.5336518287658691e-01 406 + blend 0.0000000000000000e+00 + interp 3.9996180749123811e-01:3.5527251212144700e-01:2.1748383419466499e-03:3.3835005145400165e-01:7.1340346774634378e-01:3.5923011892222589e-01:1.1525656489989711e+00:3.9626491619599680e-01:1.8321336724774535e+00:3.9995780787316321e-01:2.0494982584554648e+00:3.2668646377016819e-01:2.6586883896733950e+00:3.9105296112237842e-01:3.0083369790086110e+00:3.0411985917429274e-01:3.5377957628704388e+00 + CVs 20 + -1.8652553851557394e-01 2.6111273053087708e-01 -4.6875775870549578e-02 + -2.9709518068176127e-01 4.5403716516354253e-01 -1.2112611130493896e-01 + -4.0964681684062881e-01 6.2697591319495216e-01 -1.9803502203675580e-01 + -5.5012082167676879e-01 7.9577822382405961e-01 -2.7164361422069017e-01 + -7.1798115635514426e-01 9.5520274024607177e-01 -3.4131728360129859e-01 + -9.0979622341567334e-01 1.1008271562913650e+00 -4.0604898434569564e-01 + -1.1179747791565586e+00 1.2299446435309083e+00 -4.6547767896277426e-01 + -1.3330691936949759e+00 1.3425062171116546e+00 -5.1993242471064516e-01 + -1.5521539454086055e+00 1.4399872399407827e+00 -5.6667481385864482e-01 + -1.7804627961844850e+00 1.5229259534689170e+00 -5.9819160623635603e-01 + -2.0168567659647900e+00 1.5919870523529036e+00 -6.0777793116869516e-01 + -2.2468227819885427e+00 1.6518678072791575e+00 -5.9477073691837490e-01 + -2.4584927324038781e+00 1.7088902331194185e+00 -5.6080934771032898e-01 + -2.6524264965941340e+00 1.7653599379050162e+00 -5.0520325734475724e-01 + -2.8319670839567208e+00 1.8208651902590800e+00 -4.2752522327672060e-01 + -2.9957287588488759e+00 1.8757941338632667e+00 -3.2926121628690208e-01 + -3.1404659162313968e+00 1.9312871155827906e+00 -2.1182944796866798e-01 + -3.2597511967014339e+00 1.9889846487650500e+00 -7.7788974354730644e-02 + -3.3084354099856488e+00 2.0590303050944865e+00 6.0726193009881579e-02 + id 12530 + loc 1.7979545891284943e-01 8.6085271835327148e-01 1084 + blend 0.0000000000000000e+00 + interp 3.2681762009120457e-01:2.6207922801677397e-01:4.6674618445815996e-02:3.2681435191500369e-01:9.9096590872667367e-01:3.0245837073708970e-01:1.6623986397259956e+00:3.0283502358443748e-01:2.8235370533912150e+00:2.8651074182721392e-01:3.3120798568238641e+00 + CVs 20 + -1.3181527337044882e-01 4.9278651935575757e-01 4.2050756553946350e-01 + -2.3830509960153162e-01 9.1605365509562953e-01 7.2293954701617169e-01 + -3.1544790487128815e-01 1.3126118823737276e+00 9.8416895412514616e-01 + -3.7889798687961640e-01 1.7077373767191326e+00 1.2317896312991437e+00 + -4.5264316115800923e-01 2.1026873351342252e+00 1.4573826645036854e+00 + -5.5589518634069601e-01 2.4909475791972246e+00 1.6531050192607672e+00 + -6.9770927287754581e-01 2.8603679145579104e+00 1.8080794615434415e+00 + -8.7770666129562436e-01 3.2009071307566357e+00 1.9119245438489640e+00 + -1.1077436005753762e+00 3.5150282377761197e+00 1.9392126798075850e+00 + -1.3845481346796997e+00 3.7771425223988984e+00 1.8069875907733395e+00 + -1.6447825091611132e+00 3.9195024039385817e+00 1.4503319520839117e+00 + -1.8321155170431900e+00 3.8552470889216330e+00 8.7263582120096417e-01 + -1.9308348025588309e+00 3.5268822538521505e+00 2.4535044459580702e-01 + -2.0059104463623907e+00 3.0987333487145423e+00 -1.5929229890135677e-01 + -2.1348106567178013e+00 2.7569763279831379e+00 -2.9040455134831356e-01 + -2.3272986690406348e+00 2.4810563214635990e+00 -2.3650170219440292e-01 + -2.5393993907888150e+00 2.1872657141457337e+00 -8.4986220390717682e-02 + -2.7006900437891601e+00 1.8217396707770215e+00 2.8344348325185398e-02 + -2.6586165710419718e+00 1.4868940950012099e+00 -3.4120060471661495e-01 + id 12531 + loc 5.7761043310165405e-01 1.7626637220382690e-01 403 + blend 0.0000000000000000e+00 + interp 4.6080544997303702e-01:3.8204286684303262e-01:8.9331356691002661e-01:4.6080084191853732e-01:1.2476770528534407e+00:4.6055474950251335e-01:1.8659479566050012e+00:4.5156210618839265e-01:2.0941041802489830e+00:3.2545747447667717e-01:3.0377388237056113e+00:2.7308056709593814e-01:3.9999203914328922e+00 + CVs 20 + -6.4288463712462246e-02 3.2069888021365434e-01 1.9578067236893676e-01 + -8.6755213207914961e-02 6.2319218880847704e-01 3.8881325903225261e-01 + -1.0248887702113252e-01 9.2789561960141287e-01 5.9511651022764445e-01 + -1.2669579750434151e-01 1.2303271230216497e+00 8.3002439678022899e-01 + -1.5839206190272725e-01 1.5090210567840847e+00 1.1033504689022626e+00 + -1.8315765776116066e-01 1.7458702808099351e+00 1.4126046490206483e+00 + -1.7638544227505126e-01 1.9339186169791169e+00 1.7468627685104088e+00 + -1.1620560764474608e-01 2.0663941832249262e+00 2.0901352171107170e+00 + 8.4268990529485777e-03 2.1321682813295175e+00 2.4230613348573251e+00 + 1.9786950923806934e-01 2.1239432528695295e+00 2.7314842996057314e+00 + 4.4280752373792120e-01 2.0378738964828469e+00 3.0086541687039059e+00 + 7.2186673727760930e-01 1.8660097388436550e+00 3.2545494493999900e+00 + 1.0084831517554211e+00 1.6006364986207784e+00 3.4733405688031289e+00 + 1.2900950444581591e+00 1.2411237250712945e+00 3.6622856628118261e+00 + 1.5754929703115339e+00 7.9624203775371027e-01 3.8236863601665974e+00 + 1.8899783465067472e+00 2.8238642670095626e-01 4.0240128408557849e+00 + 2.2334149526509059e+00 -2.5426868456908136e-01 4.3868322127362562e+00 + 2.5567376790604825e+00 -7.4717199784667754e-01 4.9062574127408975e+00 + 2.8817542296943355e+00 -1.2359632123146671e+00 5.2898286734264328e+00 + id 12532 + loc 9.2883515357971191e-01 6.7098423838615417e-02 372 + blend 0.0000000000000000e+00 + interp 4.3393912967595866e-01:1.1254761848718059e-01:9.1509460151149402e-01:4.3393479028466192e-01:1.5321727432362335e+00:3.2560807832108551e-01:2.2370739390025633e+00:3.6426651649537306e-01:2.9595017445300216e+00:2.9578892466779050e-01:3.5031148076002192e+00 + CVs 20 + 7.3061407067497552e-01 4.2186686548783942e-01 -1.4409036441659695e-02 + 1.3686726578732469e+00 6.9793616885691812e-01 -6.2434523185541685e-02 + 2.0087752763630800e+00 8.7837089216194608e-01 -9.3809504490237866e-02 + 2.6556067417206384e+00 1.0372379797907014e+00 -3.1100590125598016e-02 + 3.1917854058217880e+00 1.2213092180370493e+00 2.0111539736651196e-01 + 3.4653786772874362e+00 1.4025086160093734e+00 5.8643788307162614e-01 + 3.4403186970929531e+00 1.5103342809511697e+00 9.8643541400441503e-01 + 3.1809302200744303e+00 1.5248084585932844e+00 1.3147476907861795e+00 + 2.7421901873063050e+00 1.4461823051891600e+00 1.5393760860993313e+00 + 2.1793662161032987e+00 1.2635173327911833e+00 1.6581012927143433e+00 + 1.5523537134903092e+00 9.4370961476150228e-01 1.6921935427014727e+00 + 9.0782555267034604e-01 4.6957935830854430e-01 1.6686277952132733e+00 + 2.2098795813720395e-01 -1.0421053335556826e-01 1.6215745483897053e+00 + -5.9851998973461940e-01 -6.1288978533476990e-01 1.6262026291013787e+00 + -1.5390773493350149e+00 -8.1950898208990286e-01 1.8052842985969173e+00 + -2.4288723802017342e+00 -6.8836108372020088e-01 2.2206628527357326e+00 + -3.1099702949846129e+00 -3.9180633238033757e-01 2.8101734512526209e+00 + -3.5470649357169819e+00 -1.3925088361809812e-01 3.4298553416349122e+00 + -3.8156916261396625e+00 6.8467014778005097e-02 4.0152388487900197e+00 + id 12533 + loc 4.8748162388801575e-01 5.7481026649475098e-01 1048 + blend 0.0000000000000000e+00 + interp 4.4267783479262240e-01:2.4975552890315647e-01:2.9487306648806499e-02:2.6783752274115785e-01:9.2358528839963983e-01:4.4267340801427452e-01:1.1401142057608649e+00:2.5221447794853502e-01:2.1302807453118682e+00:3.9658609231017811e-01:2.9192161541907926e+00:2.5590086132744011e-01:3.3483270831962013e+00 + CVs 20 + 1.1890060906058975e-01 6.9187808399946249e-01 -3.9991182489836313e-01 + 2.7022027798170056e-01 1.3827535663125556e+00 -7.3987436764391312e-01 + 5.0269605202124179e-01 2.0854818139185070e+00 -9.8924186003142200e-01 + 8.6103384376724534e-01 2.7712216458658077e+00 -1.1157098982370546e+00 + 1.3552728713325799e+00 3.3548530013950795e+00 -1.1159977728502928e+00 + 1.9415411561581599e+00 3.7606905487406541e+00 -1.0387573821172200e+00 + 2.5547512339615226e+00 3.9533507390823392e+00 -9.3971381444100643e-01 + 3.1396156033842058e+00 3.9368011593057011e+00 -8.5101642364936025e-01 + 3.6682996323422570e+00 3.7337424389738834e+00 -7.7749129288686736e-01 + 4.1192512065183484e+00 3.3659128280078625e+00 -7.0875310337219799e-01 + 4.4513046640950238e+00 2.8834914955794888e+00 -6.2611176338655405e-01 + 4.6350722278193777e+00 2.3728593938656344e+00 -5.1068213891132086e-01 + 4.6737004663269417e+00 1.9016808595137913e+00 -3.5166528993992574e-01 + 4.5758683179891024e+00 1.4902122149876802e+00 -1.2732315444810249e-01 + 4.3265674271731163e+00 1.1302524495799207e+00 1.9825778910702144e-01 + 3.8026312557435529e+00 7.2887043167960219e-01 6.6814689343769806e-01 + 2.9748452555709046e+00 -1.5882868546745565e+00 7.7984754922361721e-01 + 4.2256001588907868e+00 -2.3017931637131035e+00 -3.3365366754460357e-01 + 4.4208756332418870e+00 -2.1330934927751670e+00 -4.6820077861591325e-01 + id 12534 + loc 8.4651613235473633e-01 4.8079273104667664e-01 1085 + blend 0.0000000000000000e+00 + interp 4.3109044081622266e-01:2.5330241600939774e-01:2.7179053950232057e-01:3.5954726920277214e-01:1.0044787712905321e+00:2.9351979473204476e-01:1.6651108033571913e+00:4.3108612991181450e-01:2.2698643864388313e+00:2.7811993111567146e-01:3.0753011576430254e+00:3.2985572109207612e-01:3.8086061378396900e+00 + CVs 20 + 3.4585098415230642e-01 3.5691044086940210e-01 -2.3200921077959724e-01 + 7.0719610282100698e-01 6.8130532899360796e-01 -4.1552077136683996e-01 + 1.0933242638544971e+00 9.5689687052503469e-01 -5.5452860599318909e-01 + 1.5052698379128238e+00 1.1710083558186102e+00 -6.3680451890909984e-01 + 1.9279889311111524e+00 1.3090390439024182e+00 -6.5164348238151248e-01 + 2.3384625367332421e+00 1.3656028367563662e+00 -5.9923482706466269e-01 + 2.7127415152982244e+00 1.3462862978530463e+00 -4.8839363398023028e-01 + 3.0318323778594491e+00 1.2656985022883365e+00 -3.3395247858052640e-01 + 3.2813560883494892e+00 1.1424012937420418e+00 -1.6011158668437570e-01 + 3.4559980152763852e+00 1.0015662775968455e+00 -2.3686975579173541e-04 + 3.5642384135039253e+00 8.7078011426218427e-01 1.2391620137347752e-01 + 3.6204646962100511e+00 7.6856014841901499e-01 2.1438492480087953e-01 + 3.6387970867806749e+00 7.0265333614755465e-01 2.8725169631681913e-01 + 3.6328906495769946e+00 6.7239131525977158e-01 3.6335252418370506e-01 + 3.6131826616584113e+00 6.6686910601313543e-01 4.6322853756326876e-01 + 3.6020606219008715e+00 6.3434004412155409e-01 5.9904739063169521e-01 + 3.6255577099423761e+00 5.0804179881129596e-01 7.3577245091889698e-01 + 3.7005396956187839e+00 2.8177524097941620e-01 8.1386167612635685e-01 + 3.8668169152506242e+00 6.8072288915767554e-02 7.7790689374903921e-01 + id 12535 + loc 1.2230474501848221e-01 1.2249286286532879e-02 1075 + blend 0.0000000000000000e+00 + interp 3.6562849604115732e-01:2.6056640892978622e-01:2.8712437287476966e-03:2.8571761872345991e-01:1.0280563807722418e+00:3.2125618134124556e-01:1.9249362214868393e+00:3.6562483975619692e-01:2.0258928546794062e+00:3.4646291218270264e-01:2.7585634095830827e+00:2.6168924022152862e-01:3.1418376045146923e+00 + CVs 20 + -1.3925376523560121e-01 3.1629303679416931e-01 2.6895433360692361e-02 + -2.9088092021119072e-01 6.6028896549912863e-01 5.9674307418737915e-02 + -4.3666244369105378e-01 1.0265209690339889e+00 9.4761055893783253e-02 + -5.8606425240984650e-01 1.4039731844418557e+00 1.1346156013251174e-01 + -7.6084942431484526e-01 1.7754931827466556e+00 9.0318458924194878e-02 + -9.6618144319469723e-01 2.1141788598297788e+00 6.1047571280705704e-03 + -1.1824132522013455e+00 2.3835241988041638e+00 -1.4869516187992748e-01 + -1.3617993012682614e+00 2.5433603630288606e+00 -3.6669874845713002e-01 + -1.4515430281624619e+00 2.5817442662100891e+00 -6.0570072888417315e-01 + -1.4580681595195346e+00 2.5412068176904263e+00 -8.2705756683274090e-01 + -1.4216521995447127e+00 2.4492908789451011e+00 -1.0435397083231392e+00 + -1.3601861997151821e+00 2.2955676461558343e+00 -1.2646429918226518e+00 + -1.2804303832088182e+00 2.0796119725750462e+00 -1.4654067034804923e+00 + -1.1901011623631879e+00 1.8611319416341354e+00 -1.6026871844613491e+00 + -1.1091570779156583e+00 1.7147403464901620e+00 -1.6579672130249987e+00 + -1.0624036009978339e+00 1.6325062790441331e+00 -1.6244197918608534e+00 + -1.0427083522814065e+00 1.5303118042402664e+00 -1.5071429692881735e+00 + -1.0082914778516745e+00 1.3474386335639794e+00 -1.3918025565989014e+00 + -9.1534661747491797e-01 1.2710434541896278e+00 -1.5534380244219601e+00 + id 12536 + loc 7.0999739691615105e-03 1.1810320615768433e-01 408 + blend 0.0000000000000000e+00 + interp 7.2123586508444602e+00:7.2123486508444605e+00:8.8069049389608245e-02:6.6942143859944938e+00:9.2345845259336312e-02:9.2732674598872400e-01:3.3675348093271085e-01:4.2336892179728519e-01:4.2594662534372385e-01:3.0733618428014658e-01:9.9900465867068966e-01:1.1329186254255671e-01:1.9282748592980750e+00:5.7990978774890600e-01:2.0038350628909600e+00:1.2299005619435586e+00:2.0505627532455177e+00 + CVs 20 + -5.9990621748491013e-02 4.3032881277268736e-01 -4.4917871992834957e-01 + -1.2803195972988529e-01 7.2111879741106910e-01 -6.6478085128443509e-01 + -1.9063554316280698e-01 9.3547083656775665e-01 -8.2051160490501851e-01 + -2.5638608123140727e-01 1.1335989538924265e+00 -9.8152017162293159e-01 + -3.1415096331200920e-01 1.3083237880529270e+00 -1.1486491089480717e+00 + -3.4768779072359540e-01 1.4462660606575066e+00 -1.3261775175791088e+00 + -3.3334250566648738e-01 1.5217189031738514e+00 -1.5182214418773523e+00 + -2.4456769514902446e-01 1.4922512564888830e+00 -1.7108517259206200e+00 + -8.9268018916948383e-02 1.3386471360897314e+00 -1.8496338868891575e+00 + 7.0262169828849558e-02 1.1304015603728002e+00 -1.9126645446737200e+00 + 2.0476290630094299e-01 9.3076696826019956e-01 -1.9596713884141685e+00 + 3.2656719454568539e-01 7.3566795135217045e-01 -2.0307262497124468e+00 + 4.4867386416412353e-01 5.3871580039227440e-01 -2.1400156291952670e+00 + 5.8252889138280761e-01 3.6037691428738278e-01 -2.3089995242600327e+00 + 7.2961723441563886e-01 2.3443815971206849e-01 -2.5551929166656224e+00 + 8.6997748797840146e-01 1.7932039970229008e-01 -2.8664312748498766e+00 + 9.8194261810434535e-01 1.8744866388904180e-01 -3.2086936115825662e+00 + 1.0774933841366814e+00 2.4464577417755629e-01 -3.5437473500837786e+00 + 1.1737995084546966e+00 1.4531126781313142e-01 -3.8024295622699942e+00 + id 12537 + loc 7.3812282085418701e-01 7.6467031240463257e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0267419797682777e-01:5.0266917123484800e-01:3.5957307928200888e-01:3.0663706064040608e-01:1.0867179522624448e+00:4.4449678350340410e-01:1.7987369815429095e+00:3.4572517752659121e-01:2.2071852163976460e+00:4.9471015126514783e-01:2.9591004388494131e+00:4.5186326989534636e-01:3.3701026009092128e+00:4.6545975231036607e-01:3.9999637188878401e+00 + CVs 20 + 1.4658325570678825e-02 3.3017599883758347e-01 1.7381064964531284e-01 + 5.3040994309899461e-02 5.8233545873449744e-01 2.4432954023873701e-01 + 8.3932010949773539e-02 8.1667168413173530e-01 3.0770129901057663e-01 + 9.7940764866027819e-02 1.0464276046710912e+00 3.8800705963181586e-01 + 9.3460322514484176e-02 1.2683982974883268e+00 4.7841209393438866e-01 + 6.6435030840900078e-02 1.4809843354787526e+00 5.7108314204028976e-01 + 1.1161645182354019e-02 1.6827196466923420e+00 6.5845258861168832e-01 + -7.8595218994514979e-02 1.8702726371789882e+00 7.3488425940300428e-01 + -2.0932985596499215e-01 2.0370726684922942e+00 7.9510249483923567e-01 + -3.8808853635006491e-01 2.1714774500723362e+00 8.3060354570162065e-01 + -6.1655248297091869e-01 2.2529566806103563e+00 8.2901617949742268e-01 + -8.7395115943934920e-01 2.2582386312873570e+00 7.8344732076220147e-01 + -1.1192497381655258e+00 2.1878463881055144e+00 7.0760052103371207e-01 + -1.3280649925664478e+00 2.0746451577929084e+00 6.2874143819286377e-01 + -1.5073509001328347e+00 1.9525660473590261e+00 5.6498104602793009e-01 + -1.6722291794203124e+00 1.8323417101280290e+00 5.1534331680802692e-01 + -1.8283142203782372e+00 1.7135576640504071e+00 4.6847032560365309e-01 + -1.9746286881696591e+00 1.6023490832176592e+00 4.1306847257499990e-01 + -2.1103862454703437e+00 1.5193541659852685e+00 3.9724804190549756e-01 + id 12538 + loc 8.3931887149810791e-01 3.0205124616622925e-01 413 + blend 0.0000000000000000e+00 + interp 8.3801968571716412e-01:4.5507976960699359e-01:5.2324519613626208e-01:3.5283215497415171e-01:1.0026621712383745e+00:2.8844376635288199e-01:1.9226689501380270e+00:4.6524627912818445e-01:2.8074785828519286e+00:8.3801130552030700e-01:2.9610614081562563e+00 + CVs 20 + -1.2433360070214836e+00 3.5331803464148276e-01 1.4644152908332392e-01 + -2.0805884810398192e+00 4.9603528479887349e-01 2.2351063883890079e-01 + -2.7718741113053778e+00 5.6227644133561250e-01 2.6362828323984411e-01 + -3.4525962658154432e+00 5.9858309747420579e-01 2.9172104362946250e-01 + -4.1174670168954597e+00 5.9559234074202394e-01 3.1511119748419714e-01 + -4.7608849224619476e+00 5.4337487111049410e-01 3.3923415997801487e-01 + -5.3846205507775498e+00 4.3009707202507597e-01 3.6617260667154677e-01 + -5.9970932622115720e+00 2.3885164037676787e-01 3.9217675369948052e-01 + -6.5954070161274405e+00 -4.9382201875303067e-02 4.0732716046347400e-01 + -7.1605255853292533e+00 -4.4960340014170486e-01 4.0081855703287922e-01 + -7.6576396192270861e+00 -9.6274750587558600e-01 3.6888657792377300e-01 + -8.0473721481667209e+00 -1.5686949247982516e+00 3.1429344978810225e-01 + -8.3066719358832408e+00 -2.2314404967778234e+00 2.3588505538266086e-01 + -8.4365794341788707e+00 -2.9124775679392418e+00 1.2801224248719356e-01 + -8.4516586378572658e+00 -3.5768324049674596e+00 -7.7833703524523568e-03 + -8.3690872580263722e+00 -4.1885634086192711e+00 -1.6081092152119936e-01 + -8.2103842129385658e+00 -4.7113812787347502e+00 -3.3034486922175399e-01 + -8.0068894107828754e+00 -5.1330389423824698e+00 -5.2782282262145741e-01 + -7.8307150719174876e+00 -5.5612427320757805e+00 -7.4865388454512805e-01 + id 12539 + loc 7.6421481370925903e-01 3.8031405210494995e-01 397 + blend 0.0000000000000000e+00 + interp 4.0917094577843782e-01:2.7795619661100435e-01:9.7310556836375384e-01:3.6407216217672184e-01:1.6132357484142039e+00:2.6266102898891985e-01:2.1813150043144574e+00:4.0916685406898007e-01:2.9326491482231254e+00:2.6799421540643442e-01:3.8488828451366102e+00 + CVs 20 + -1.2368403188263628e+00 2.9285934248005119e-01 3.0830806142364753e-01 + -2.0364832651155713e+00 3.9089648381221698e-01 5.6829986768866947e-01 + -2.7079312512591405e+00 4.2412637584208845e-01 8.4020342234165712e-01 + -3.3879824452842402e+00 4.4716442211661755e-01 1.1559168153729684e+00 + -4.0615444358006370e+00 4.4032348784342257e-01 1.5124758166363454e+00 + -4.7151354633269333e+00 3.8173470753988442e-01 1.8956384036459752e+00 + -5.3384680121960120e+00 2.5156748744951984e-01 2.2836767691844528e+00 + -5.9266699077224496e+00 3.2370762636194705e-02 2.6506204090448011e+00 + -6.4730941638708162e+00 -2.8697635255346376e-01 2.9670260699776048e+00 + -6.9602610349962131e+00 -7.0046630824611533e-01 3.2031901870805282e+00 + -7.3731126067329056e+00 -1.1861237138678242e+00 3.3423574171746706e+00 + -7.7160592974568400e+00 -1.7275138848075562e+00 3.3912008344515092e+00 + -7.9994849589321859e+00 -2.3174376009557691e+00 3.3711790442787724e+00 + -8.2259643251969372e+00 -2.9508030705829604e+00 3.3098154782791904e+00 + -8.3827357947301628e+00 -3.6180568167410931e+00 3.2353647337148361e+00 + -8.4437743661863376e+00 -4.2992444370074496e+00 3.1622471010427682e+00 + -8.3939198326806377e+00 -4.9542650718556143e+00 3.0925004139093231e+00 + -8.2508475591669832e+00 -5.5411950193914583e+00 3.0297072252397692e+00 + -8.0663447352029181e+00 -6.1104266422167255e+00 3.0108183656868195e+00 + id 12540 + loc 6.9960671663284302e-01 6.9363939762115479e-01 409 + blend 0.0000000000000000e+00 + interp 3.8728969086142440e-01:3.2061814005197647e-01:5.9381657611707106e-02:3.0582797994414990e-01:9.9330778176806589e-01:3.2267482618771881e-01:1.7513873328456073e+00:3.0222522274258823e-01:2.3691869795620133e+00:3.8728581796451578e-01:3.4899163108607967e+00 + CVs 20 + 4.5735104805040483e-01 1.0448445638808387e-01 -1.9510252108694723e-01 + 8.6110322605016021e-01 1.7111178717465836e-01 -4.0189965337416500e-01 + 1.2635092171328215e+00 2.2601084035882518e-01 -6.0517496977763785e-01 + 1.6785683788878432e+00 2.7404826432790863e-01 -8.0252930931392763e-01 + 2.0970112590805767e+00 3.0829103294857685e-01 -9.9563845571344278e-01 + 2.5105721549528583e+00 3.2409682413209140e-01 -1.1857323188515965e+00 + 2.9118455577183502e+00 3.1607550918649641e-01 -1.3721736127407504e+00 + 3.2929954287484136e+00 2.7603226823860050e-01 -1.5528818070890207e+00 + 3.6421078160246974e+00 1.9744150290383877e-01 -1.7277949228871659e+00 + 3.9393044587996706e+00 8.0899925650303350e-02 -1.9002667276607246e+00 + 4.1651470403870192e+00 -6.3023832794941281e-02 -2.0723648462322193e+00 + 4.3218695698812919e+00 -2.1670251498606241e-01 -2.2416404383118782e+00 + 4.4340528434795363e+00 -3.6724203027351399e-01 -2.4048939808327767e+00 + 4.5241259544355632e+00 -5.0995559989732397e-01 -2.5603138159558116e+00 + 4.6052152037857903e+00 -6.4444607396193687e-01 -2.7057054820644226e+00 + 4.6892050574273725e+00 -7.7954532439345980e-01 -2.8389435602854345e+00 + 4.7862858853280281e+00 -9.3392869618082042e-01 -2.9600916333888243e+00 + 4.8962108325789835e+00 -1.1140434157800021e+00 -3.0689085500688309e+00 + 5.0324685280274677e+00 -1.3302757402617500e+00 -3.1703914120924614e+00 + id 12541 + loc 9.4962403178215027e-02 2.3047357797622681e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6682819435186595e-01:4.0297250799333734e-01:7.2328596923584376e-01:4.6682352606992245e-01:1.0743370182943965e+00:3.6216805516413136e-01:1.8169339294698139e+00:3.6761487637752671e-01:2.1474965913288360e+00:3.2599490428877276e-01:2.9822109164118222e+00:2.8122259471006561e-01:3.9868705759784495e+00 + CVs 20 + 1.9800267413092851e-01 3.4482129566466030e-01 -1.4694111159221077e-01 + 2.9890967852507511e-01 6.3187265598681563e-01 -2.7799208519721863e-01 + 3.5857594184367547e-01 8.9878876927359763e-01 -4.0456001107393441e-01 + 4.0116708866334599e-01 1.1628380920366190e+00 -5.3180394974146727e-01 + 4.2274662728195472e-01 1.4214985689249420e+00 -6.6097406236179213e-01 + 4.2021474283038729e-01 1.6692473042130460e+00 -7.9245065128753400e-01 + 3.8947868878953362e-01 1.8981298180616153e+00 -9.2594581810663734e-01 + 3.2617006933747772e-01 2.1005386568349049e+00 -1.0614026470758988e+00 + 2.2694743744425927e-01 2.2702597620673401e+00 -1.1990019025721412e+00 + 8.7930406044280263e-02 2.3992262585191027e+00 -1.3390863830591657e+00 + -9.3629338344913160e-02 2.4737203842920445e+00 -1.4791745794046798e+00 + -3.1388107572841162e-01 2.4793566988963365e+00 -1.6112813474911956e+00 + -5.6463917449634882e-01 2.4082178216415286e+00 -1.7263307189047510e+00 + -8.3852896514664232e-01 2.2569235589910512e+00 -1.8191469255010153e+00 + -1.1309399710375925e+00 2.0173475823735418e+00 -1.8909511069380511e+00 + -1.4302043774787265e+00 1.6604083698820675e+00 -1.9519256765002921e+00 + -1.6599878153957808e+00 1.1327384124344340e+00 -2.0086546716760303e+00 + -1.6512027146920523e+00 4.9507126432175541e-01 -2.0154858699874914e+00 + -1.5622415895670154e+00 2.9068446121970459e-02 -1.9426920017554747e+00 + id 12542 + loc 6.5836924314498901e-01 5.5002820491790771e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0839356073049976e-01:2.5082139889153221e-01:8.3109823341203704e-01:3.8986064721940450e-01:1.0748367464227810e+00:3.8358815251713613e-01:1.8570347970588958e+00:2.4655928198891167e-01:2.4097000078050335e+00:4.0838947679489246e-01:2.9687974408553712e+00:2.7831911941478249e-01:3.9138940333528116e+00 + CVs 20 + 5.4666083159984759e-02 3.4511880323274174e-01 -2.0657344679610715e-01 + 1.2136639257138696e-01 6.6095519820234128e-01 -3.9221923733433062e-01 + 1.9412349415953822e-01 9.5111798535411907e-01 -5.6161104457176814e-01 + 2.7222408229495620e-01 1.2224339528801005e+00 -7.1861467690466319e-01 + 3.5829106567795277e-01 1.4876963632726579e+00 -8.6626197783250936e-01 + 4.5300245482515844e-01 1.7610865597871006e+00 -1.0146849923882111e+00 + 5.5629681259325570e-01 2.0403814993931708e+00 -1.1872605000255203e+00 + 6.6531457043454489e-01 2.3126789502856799e+00 -1.4028865787093667e+00 + 7.8001390622806532e-01 2.5687717378493327e+00 -1.6678913207487993e+00 + 9.1153438843282708e-01 2.7779884482654413e+00 -1.9802060518883513e+00 + 1.0654027458219946e+00 2.8813128314706176e+00 -2.3118238333603460e+00 + 1.2329918779916045e+00 2.8506959075276961e+00 -2.6149730916647069e+00 + 1.4270799309676849e+00 2.7200370170662724e+00 -2.8695033286184644e+00 + 1.6897485762209408e+00 2.5408413898268520e+00 -3.0905327546046872e+00 + 2.0385946626347131e+00 2.3129302246771144e+00 -3.3040837246857047e+00 + 2.4374035228527258e+00 1.9809864319893951e+00 -3.5373377937133390e+00 + 2.8094203446380037e+00 1.5288242657952982e+00 -3.8385635443291117e+00 + 3.0298744912509017e+00 1.0731902872010661e+00 -4.2371452166001218e+00 + 2.9315293122270889e+00 8.7380310434866504e-01 -4.5899410611163098e+00 + id 12543 + loc 7.6135462522506714e-01 9.3198955059051514e-01 1076 + blend 0.0000000000000000e+00 + interp 5.6003592145222814e-01:2.8793253374597799e-01:8.3154037167982087e-02:3.0626292980275988e-01:1.0002650126289214e+00:5.4497382368240332e-01:1.4957880447217171e+00:5.6003032109301365e-01:1.9599124170077979e+00:4.5677803202232981e-01:2.3161282966896293e+00:2.8349232630783799e-01:2.8664312239538470e+00:2.8277399760677530e-01:3.3237959621806734e+00 + CVs 20 + 1.6990578566747591e-01 2.9032947430069167e-01 -1.5815332232924526e-01 + 3.2496718939870911e-01 5.9942069761856043e-01 -2.8276413323651445e-01 + 4.7902471532257068e-01 9.2048088736616351e-01 -4.1082054896374320e-01 + 6.4271725278457226e-01 1.2470284340179723e+00 -5.6266962294533973e-01 + 8.2854329643990665e-01 1.5742801104840229e+00 -7.4912755347997373e-01 + 1.0433618775444040e+00 1.8873712557481981e+00 -9.9087923651486265e-01 + 1.2794559680405397e+00 2.1583716153786567e+00 -1.3140089219751374e+00 + 1.5179019332137580e+00 2.3570604357203817e+00 -1.7300563610089887e+00 + 1.7391146946870684e+00 2.4641136832558135e+00 -2.2297434423935489e+00 + 1.9309695711797812e+00 2.4747817963193572e+00 -2.7935611936730291e+00 + 2.0929549893392934e+00 2.3922193480965959e+00 -3.3998500459771814e+00 + 2.2257509549776744e+00 2.2190134714654488e+00 -4.0236404986046503e+00 + 2.3131375376383074e+00 1.9654929843222420e+00 -4.6284980661131421e+00 + 2.3118688276197532e+00 1.6848312220067054e+00 -5.1599810620099715e+00 + 2.1831153169790602e+00 1.4766642633230731e+00 -5.5655909648456836e+00 + 1.9532061099682609e+00 1.4262931630436069e+00 -5.8102337098062007e+00 + 1.7160300068035312e+00 1.5484647692726679e+00 -5.8858748182276193e+00 + 1.5150885601633921e+00 1.7293844860629290e+00 -5.8866993203680229e+00 + 1.1250861238737528e+00 1.7268424666029074e+00 -6.0787036516316286e+00 + id 12544 + loc 9.0776121616363525e-01 6.8363106250762939e-01 411 + blend 0.0000000000000000e+00 + interp 4.7491136964519320e-01:3.6728279284114618e-01:4.2872029027950387e-01:3.7030564984332304e-01:9.8851930397826060e-01:3.1820947972638303e-01:1.7736074454212201e+00:3.4555656380380240e-01:2.1265036143683562e+00:4.7490662053149679e-01:2.9058891713844646e+00:3.6227396787999355e-01:3.2790375436758787e+00:3.8888933531351294e-01:3.9890467715697926e+00 + CVs 20 + 8.4871892729035947e-01 2.1884396466748199e-01 -2.4796594417185952e-01 + 1.4433540033311780e+00 3.3017119863046940e-01 -4.4802945669194627e-01 + 1.9691358171124711e+00 4.1842944993109488e-01 -6.2029182839689234e-01 + 2.5083980781196149e+00 5.1984179953681686e-01 -7.7193543009312737e-01 + 3.0592078870657162e+00 6.1900121352878268e-01 -8.9800240166289258e-01 + 3.6189556976735990e+00 6.9876152355920451e-01 -9.9709438958325847e-01 + 4.1871216182159801e+00 7.4190970727451755e-01 -1.0713915842606341e+00 + 4.7656382353794280e+00 7.3078726928711446e-01 -1.1238291906805162e+00 + 5.3531948933730540e+00 6.4769629438423981e-01 -1.1583157744388632e+00 + 5.9402962873287075e+00 4.7806613592836822e-01 -1.1868850029590223e+00 + 6.5083124807389314e+00 2.1596494847931935e-01 -1.2289565076277329e+00 + 7.0197740393351085e+00 -1.4136706545112809e-01 -1.2990845792115782e+00 + 7.4331844083388017e+00 -5.7947474254792475e-01 -1.3980523683116060e+00 + 7.7257930080074386e+00 -1.0706531827279759e+00 -1.5171078229009831e+00 + 7.8911148202763641e+00 -1.5842933914324058e+00 -1.6480875708608393e+00 + 7.9335684821762822e+00 -2.0903750506600183e+00 -1.7879085021466561e+00 + 7.8660482028220500e+00 -2.5626112997586135e+00 -1.9343152121490721e+00 + 7.7065235325136401e+00 -2.9778628058607279e+00 -2.0807463994108701e+00 + 7.4487966207526553e+00 -3.3206282127931264e+00 -2.2164025937115968e+00 + id 12545 + loc 4.8945212364196777e-01 6.7654734849929810e-01 1074 + blend 0.0000000000000000e+00 + interp 3.4606605473867930e-01:2.7533249355283668e-01:6.8639599004372776e-01:2.5369676228208421e-01:1.9492523148389171e+00:3.4606259407813195e-01:2.9410850135190287e+00:2.4985464017226355e-01:3.7443840535053186e+00 + CVs 20 + 4.4229964524566741e-02 3.5672676410902388e-01 -2.4799445909826140e-01 + 1.4462539521540799e-01 7.2391216081194132e-01 -5.1163704763147355e-01 + 3.0396020742181884e-01 1.0948663562181415e+00 -8.0079248967451155e-01 + 5.2391254016163513e-01 1.4595139191972490e+00 -1.1126229214489534e+00 + 7.9719788734409625e-01 1.8008219370874858e+00 -1.4498019424013093e+00 + 1.0947093954181970e+00 2.0832727685935803e+00 -1.8401876305526934e+00 + 1.3717779818423221e+00 2.2487897139230317e+00 -2.3055922451963529e+00 + 1.5782372997567635e+00 2.2254334373846829e+00 -2.8073950318146301e+00 + 1.6872049930633999e+00 1.9988433643035370e+00 -3.2486036529483613e+00 + 1.7227999848156408e+00 1.6412367666209904e+00 -3.5720222758630866e+00 + 1.7272183847519795e+00 1.2285285882825707e+00 -3.7778584761882077e+00 + 1.7402827210767073e+00 8.0822537959775498e-01 -3.9072086128021026e+00 + 1.7849213797695695e+00 3.7867569729074707e-01 -4.0406296049619908e+00 + 1.8799771869501736e+00 -8.1553288362290602e-02 -4.2753583796460504e+00 + 2.0521899126800185e+00 -5.2690598609901063e-01 -4.7014161648222483e+00 + 2.3035249981261470e+00 -8.0119559909681781e-01 -5.3600091093556248e+00 + 2.5721218076668935e+00 -6.9484820020272720e-01 -6.1531437571647452e+00 + 2.7385685050445705e+00 -2.8533898944639580e-01 -6.7319610427260885e+00 + 2.8000023814633654e+00 3.5952292981866335e-02 -6.9595114103330262e+00 + id 12546 + loc 4.6957844495773315e-01 4.2324760556221008e-01 406 + blend 0.0000000000000000e+00 + interp 4.3778924744154057e-01:3.9753032281254158e-01:1.4317317440563404e-01:3.1943211467592836e-01:8.2613130162811022e-01:3.9951477652977196e-01:1.0964776805807503e+00:3.9849566067818187e-01:1.7608862542075261e+00:3.6519339117570054e-01:2.0883046011423123e+00:4.3778486954906620e-01:2.7788114121689271e+00:3.9105098996235332e-01:3.0592543662516611e+00:3.6657144436885497e-01:3.8385327167630878e+00 + CVs 20 + -6.9369177759311215e-02 2.1495155576167790e-01 -7.0745940944439353e-02 + -1.3672559320721472e-01 3.8736061556660450e-01 -7.0273720507128462e-02 + -1.8432521465144985e-01 5.6317167040131721e-01 -4.3082726685673089e-02 + -2.2232187081796503e-01 7.6668423199125180e-01 -3.6361909203001641e-02 + -2.4925102447039849e-01 9.9398186919179898e-01 -5.8489479656336774e-02 + -2.6468828172157377e-01 1.2379366327189225e+00 -1.1661006411488728e-01 + -2.7027964009879180e-01 1.4884060186085692e+00 -2.1600659414466616e-01 + -2.6887902570230399e-01 1.7334446961735046e+00 -3.5846413479664019e-01 + -2.5946505471316578e-01 1.9626668401897760e+00 -5.3994423369805455e-01 + -2.3466352252373474e-01 2.1687835577778287e+00 -7.4970738330213960e-01 + -1.9161899569262869e-01 2.3448456969395206e+00 -9.7603419235835809e-01 + -1.4268538011477178e-01 2.4818871038853536e+00 -1.2125126639443153e+00 + -1.0446142202077807e-01 2.5729969111056219e+00 -1.4534306211075552e+00 + -8.0250924756043174e-02 2.6188883593050649e+00 -1.6878711795907106e+00 + -6.1625407746111638e-02 2.6268814518686066e+00 -1.9021986482547395e+00 + -4.3399066314243062e-02 2.6056192907561471e+00 -2.0892001998387215e+00 + -3.1471884561474428e-02 2.5607190381999798e+00 -2.2531273995393244e+00 + -3.5809265005700475e-02 2.4948965518506414e+00 -2.3983558838418335e+00 + -1.0980544213813503e-01 2.3771454461069355e+00 -2.4788590012435128e+00 + id 12547 + loc 2.6999434828758240e-01 1.6184696555137634e-01 403 + blend 0.0000000000000000e+00 + interp 5.0500270111735945e-01:5.0499765109034833e-01:8.8787441249622012e-02:4.7392307847615728e-01:6.9337849141942187e-01:4.9408037091812140e-01:1.0137315518874872e+00:3.5796483229357123e-01:1.6322635825722434e+00:2.8469842010971141e-01:2.3625698001772273e+00:3.2780384681156965e-01:3.2108503459156252e+00:3.6585696945045726e-01:3.9208523079499153e+00 + CVs 20 + -2.3019353283047359e-01 2.8650454048921098e-01 7.4431400116631241e-02 + -4.3362248087554067e-01 5.7654037096336408e-01 1.5853974776918456e-01 + -6.3321571950485511e-01 8.6190758777956600e-01 2.6886764602815028e-01 + -8.3774760239643720e-01 1.1322176227724108e+00 4.1467069909730658e-01 + -1.0422125338349839e+00 1.3765187659403253e+00 6.0344996375722504e-01 + -1.2298416343816490e+00 1.5821520260820905e+00 8.4260155657447811e-01 + -1.3801452455755314e+00 1.7379752536401458e+00 1.1323515602689778e+00 + -1.4768991085266769e+00 1.8349360146320182e+00 1.4622524052357102e+00 + -1.5091922036800782e+00 1.8671679724310923e+00 1.8108316292329554e+00 + -1.4743200473804072e+00 1.8365149631398188e+00 2.1511719241080427e+00 + -1.3799041182483778e+00 1.7526052876065756e+00 2.4612970943094155e+00 + -1.2426681328360323e+00 1.6268927044960890e+00 2.7354256525845506e+00 + -1.0815971803245656e+00 1.4658595344006915e+00 2.9864421496064262e+00 + -9.0989210668812304e-01 1.2751533066520668e+00 3.2192376491846608e+00 + -7.3619163583260250e-01 1.0671949104624403e+00 3.4253502668965132e+00 + -5.6707890485126378e-01 8.4930881444750717e-01 3.6203335226428806e+00 + -4.1014831597966411e-01 6.1822990767539876e-01 3.8597161519910017e+00 + -2.8327584090830993e-01 3.9298389176368742e-01 4.1865588336897170e+00 + -1.7439343496004595e-01 2.4812282277129283e-01 4.4261025575230422e+00 + id 12548 + loc 7.6771593093872070e-01 8.4735798835754395e-01 372 + blend 0.0000000000000000e+00 + interp 4.1429877493740142e-01:4.0036180882473671e-01:2.2105317377341949e-01:4.1429463194965205e-01:9.3735492237813611e-01:3.2746512220144897e-01:1.8088654969044953e+00:3.3921646946168649e-01:2.7231426360019912e+00:3.2806851224526612e-01:3.8745943356905417e+00 + CVs 20 + -3.5164223905895525e-01 4.1460438759595925e-01 -2.1655493081835731e-02 + -6.8028845280428951e-01 7.0458738314531233e-01 -2.8496795822091928e-02 + -1.0123964082294212e+00 8.5393767742958904e-01 -1.4178472200660708e-02 + -1.3727799307229174e+00 8.8995633051876211e-01 2.9817562428620242e-02 + -1.7591811311341106e+00 8.7887247882327013e-01 1.1789676515380437e-01 + -2.1737477289424962e+00 8.8999865467465544e-01 2.4778623873640504e-01 + -2.6326246018804325e+00 9.6707566172854265e-01 3.8218779797228120e-01 + -3.1357466135513148e+00 1.1404530722692381e+00 4.7511356737369709e-01 + -3.6398123146629864e+00 1.4293270566729086e+00 4.9721005440382315e-01 + -4.0890810770740149e+00 1.8232977410836628e+00 4.3991636127781963e-01 + -4.4708665413241055e+00 2.2919455692031083e+00 3.0207155468246882e-01 + -4.8095633682051044e+00 2.8010861627245056e+00 5.5835065831203901e-02 + -5.1269285347251436e+00 3.2834654993191830e+00 -3.7938665634747637e-01 + -5.3936316660994867e+00 3.5978148875213316e+00 -1.0674411921007925e+00 + -5.5344587047661609e+00 3.6133014359394906e+00 -1.9192245134427524e+00 + -5.5807639095423545e+00 3.3438272798355895e+00 -2.7256047586327363e+00 + -5.7231723554780869e+00 2.8810866827201536e+00 -3.3516045420638685e+00 + -6.0569183579557659e+00 2.3236752500416786e+00 -3.7939524971507477e+00 + -6.4259911606075111e+00 1.7519587433564374e+00 -4.2001294989685096e+00 + id 12549 + loc 7.3595428466796875e-01 8.3792817592620850e-01 1085 + blend 0.0000000000000000e+00 + interp 3.3297089289893372e-01:2.5642623670412479e-01:5.4757892296059096e-02:3.1426953437800870e-01:1.1300221560108881e+00:2.4886019882988625e-01:2.0014088520817421e+00:3.3296756319000476e-01:2.8664007313100042e+00:3.0878732419599125e-01:3.2834924599794943e+00 + CVs 20 + -1.1819919692330680e-01 3.5267176194233657e-01 1.8021614283118775e-01 + -2.7463666180035834e-01 6.7518582007616623e-01 3.1250859346333898e-01 + -4.6488804425272684e-01 9.8320975113879405e-01 4.1165436422573032e-01 + -6.8790636787461867e-01 1.2746307596390614e+00 4.7616860058061122e-01 + -9.4422058079502846e-01 1.5300573703761589e+00 4.9022970271698341e-01 + -1.2243729163245023e+00 1.7262111472352826e+00 4.4265041483159162e-01 + -1.5079704304920523e+00 1.8409131502861058e+00 3.3047673483984835e-01 + -1.7678381215779968e+00 1.8616418562994637e+00 1.6203991840568438e-01 + -1.9788181356220886e+00 1.7902542969714788e+00 -4.1339809258945870e-02 + -2.1340585467419051e+00 1.6427569314529440e+00 -2.5033216167455985e-01 + -2.2472720943175895e+00 1.4381815858366374e+00 -4.4121410373884407e-01 + -2.3323085186595920e+00 1.1892514898977740e+00 -5.9680160229561185e-01 + -2.3977824512703529e+00 9.0677566364025386e-01 -6.9881274530692727e-01 + -2.4576951298133634e+00 6.0338461835167734e-01 -7.2579441465190286e-01 + -2.5292554756225729e+00 2.9905176179451365e-01 -6.5180081558128988e-01 + -2.6427646316989080e+00 1.7176440608922983e-02 -4.7801522305872102e-01 + -2.8541923457307634e+00 -2.2086812207049877e-01 -2.2014673883365515e-01 + -3.1775187564898144e+00 -3.6246433632499803e-01 9.7079699783669482e-02 + -3.4117668259012652e+00 -5.6793883362623254e-01 2.4385823382755500e-01 + id 12550 + loc 7.5310492515563965e-01 8.5629308223724365e-01 1048 + blend 0.0000000000000000e+00 + interp 2.4690923768997211e-01:2.4281600550114377e-01:2.8674309603060266e-01:2.4463134936280242e-01:1.5404525965676030e+00:2.4690676859759522e-01:2.5482086425769634e+00:2.3620354041518235e-01:3.1670783211955502e+00 + CVs 20 + 1.0756627229743394e-01 8.8317025397772975e-01 -3.6602990387968470e-01 + 2.5974547968018691e-01 1.7482139696984089e+00 -5.9787356183389218e-01 + 4.7803003070428018e-01 2.5700887114440443e+00 -6.7582589398032111e-01 + 7.5885081718490577e-01 3.2958020299728430e+00 -6.0111251575131108e-01 + 1.1020600055595409e+00 3.8838712707156295e+00 -3.8502543552539614e-01 + 1.5179148070874411e+00 4.3061708005234234e+00 -6.4859117143682976e-03 + 1.9657772397548527e+00 4.4974841918362589e+00 5.8991582841028900e-01 + 2.3574084128135682e+00 4.3886797691387933e+00 1.3604435288408514e+00 + 2.6075715949729843e+00 3.9947865465268872e+00 2.1694156008491596e+00 + 2.6541927022707945e+00 3.4156364846136045e+00 2.8754025953759563e+00 + 2.4879620944519827e+00 2.7965335850531137e+00 3.3828665159311555e+00 + 2.1516769227638490e+00 2.2230326758032519e+00 3.6649773934315686e+00 + 1.6609707032617089e+00 1.6650388397602505e+00 3.7257780768155402e+00 + 1.0037385014888831e+00 1.0207094886804695e+00 3.5578290365802023e+00 + 1.7500005518696074e-01 9.8907142551634797e-02 3.2938730685741073e+00 + -4.4527331043773599e-01 -1.2987910900079029e+00 3.4322609839779159e+00 + -9.7289718517799662e-02 -2.6082135248900729e+00 4.2259403276346106e+00 + 9.9839561698376778e-01 -3.0767474919128883e+00 5.2444873825215401e+00 + 1.9625214430797335e+00 -2.9649951709426263e+00 5.9174150258149361e+00 + id 12551 + loc 7.1325814723968506e-01 8.4371960163116455e-01 416 + blend 0.0000000000000000e+00 + interp 5.6796800352198398e+00:5.4895930779915203e-01:4.0472046708026632e-01:1.0026363722349960e+00:6.1940538432422976e-01:5.6796700352198402e+00:9.3626723554718772e-01:2.9975344468498749e-01:2.5252269959014000e+00:4.8691934968152806e-01:3.3429700125428345e+00:3.1361358767167835e-01:3.9719495901878856e+00 + CVs 20 + 8.5301971757037565e-01 1.9975241878396957e-01 -1.6386971470003103e-01 + 1.4203237958887203e+00 2.3250109279360537e-01 -3.3680861540950718e-01 + 1.9453805454033248e+00 2.0286364525745476e-01 -4.9852180704142179e-01 + 2.5192470120673054e+00 1.4641828451772543e-01 -6.4031224837942968e-01 + 3.1299602150829613e+00 6.1555512937318202e-02 -7.4785486379497468e-01 + 3.7623361535133819e+00 -4.9257712981214286e-02 -8.0420380241001321e-01 + 4.3969974519762518e+00 -1.8061264820699308e-01 -7.9704800655042596e-01 + 5.0129843758854022e+00 -3.2575854498567869e-01 -7.2427727618980531e-01 + 5.5926297206705531e+00 -4.7703824059538658e-01 -5.9038513996959308e-01 + 6.1219280271247580e+00 -6.2876320295127952e-01 -4.0810553295352148e-01 + 6.5912363468320176e+00 -7.8881853371866972e-01 -2.1651009245811104e-01 + 7.0021543229033689e+00 -9.8018170744718303e-01 -7.5457536337521502e-02 + 7.3618543871009932e+00 -1.2110931720207563e+00 -9.1583779740272986e-03 + 7.6772826376025840e+00 -1.4688805654874506e+00 9.5678278646378345e-03 + 7.9502889986651741e+00 -1.7446185663924665e+00 4.6590892896241076e-03 + 8.1739810920498162e+00 -2.0299930427706196e+00 -2.6064212962203182e-02 + 8.3429099974801098e+00 -2.3093210422289445e+00 -8.6243540057603596e-02 + 8.4601553990511782e+00 -2.5610060114353770e+00 -1.6458109878084159e-01 + 8.5429907347407799e+00 -2.7374791735943571e+00 -1.9926916172204712e-01 + id 12552 + loc 4.8432394862174988e-01 3.2619405537843704e-02 1084 + blend 0.0000000000000000e+00 + interp 4.3920483439552604e-01:4.3920044234718209e-01:7.9617520411941622e-01:1.9216579791496530e-01:1.2142445587400452e+00:2.9764137678844071e-01:2.1364783453699774e+00:3.8051474191823431e-01:3.0367209235141699e+00:2.8805829385260939e-01:3.7474686330370215e+00 + CVs 20 + 1.5163423608138643e-01 3.1526741959989873e-01 2.5765554856228179e-01 + 2.7599140746059569e-01 6.1429528455805182e-01 4.9945153593253000e-01 + 4.1803152176860381e-01 9.1389041643581836e-01 7.0408303423524887e-01 + 5.2658792928075193e-01 1.1768296029705547e+00 8.7277538660380460e-01 + 5.3526791372935345e-01 1.3505531531424659e+00 1.0117514411594599e+00 + 4.5729889165627935e-01 1.4205375998274941e+00 1.1053479984709074e+00 + 3.5444228276601353e-01 1.3920598306823557e+00 1.1181724211265927e+00 + 3.2931111620916875e-01 1.2899951014461233e+00 1.0100791097385560e+00 + 4.6758215802486364e-01 1.1872427418597109e+00 8.3275469203229369e-01 + 6.6114767026927868e-01 1.1157913996651558e+00 6.9210026917048184e-01 + 8.2952493090366697e-01 1.0411491557062145e+00 5.6567455748664619e-01 + 1.0387538134022050e+00 9.7604921033753078e-01 4.5789915373990209e-01 + 1.2798498062042698e+00 9.1589938221970724e-01 3.7166234592716807e-01 + 1.4481983447199840e+00 7.1927442235427386e-01 1.5990460707515475e-01 + 1.4195965685168077e+00 2.2267766367006014e-01 -2.9560869668956347e-01 + 9.4733541399014498e-01 -5.3874656219139583e-01 -9.0464943027060107e-01 + -3.8822874634433846e-01 -1.2061496995448464e+00 -1.4633894718666216e+00 + -2.3944854376129840e+00 -8.9343640019054416e-01 -1.5060044505171368e+00 + -2.7698060953686632e+00 -9.1519516798185951e-01 -1.5702675485776836e+00 + id 12553 + loc 3.4834215044975281e-01 8.4099817276000977e-01 263 + blend 0.0000000000000000e+00 + interp 2.1239702038152886e+00:2.1239602038152885e+00:1.0768756732396780e+00:7.5510081245470995e-01:1.0889982000491070e+00:1.2867087917233178e+00:1.1026819942566970e+00:3.2760038928804974e-01:1.3418418821904816e+00:4.3652176032224893e-01:2.0306701539390692e+00:4.3565732643523158e-01:2.5331564737427859e+00:3.7892077660694912e-01:3.0578422170056774e+00 + CVs 20 + -7.9014313650171930e-01 5.1637245264120524e-01 -1.8525512718395812e-01 + -1.5232603997125218e+00 8.7857512584033359e-01 -3.1142158079185644e-01 + -2.2645746804371596e+00 1.1038265902309436e+00 -4.3557015616674100e-01 + -2.9258241440036539e+00 1.2507572954274992e+00 -6.4915460575585604e-01 + -3.2864412425203557e+00 1.3510848615365294e+00 -9.9992405387617711e-01 + -3.2300485886004293e+00 1.3568262873125256e+00 -1.3244232836877792e+00 + -2.9802531801013434e+00 1.2704981497993595e+00 -1.5111184723462499e+00 + -2.6378732638545528e+00 1.1187033164209161e+00 -1.6666169849778685e+00 + -2.1976879417266306e+00 8.8093999191284555e-01 -1.7719107815888291e+00 + -1.7209694654941532e+00 5.5489539941780652e-01 -1.7672058189616164e+00 + -1.2761986239011183e+00 1.6036427647587015e-01 -1.6401228533380072e+00 + -8.5669691372553369e-01 -2.8271654505275973e-01 -1.4274371665763308e+00 + -3.2210006719741990e-01 -7.8600117716202977e-01 -1.1930860627523789e+00 + 6.0379825668873011e-01 -1.2789587025160007e+00 -1.0495359071183481e+00 + 1.9378118103894670e+00 -1.4427355268437794e+00 -1.2209490921311350e+00 + 3.2462376315446737e+00 -1.1638258457359956e+00 -1.8313217580949994e+00 + 4.2382316624848198e+00 -5.7307044013258523e-01 -2.8635480976349079e+00 + 4.7413728799785755e+00 1.1011652004922379e-01 -4.1033300733009002e+00 + 4.9220919227762181e+00 6.7865301069363304e-01 -5.2256457260969986e+00 + id 12554 + loc 3.1406819820404053e-01 3.1814309954643250e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3810811267657729e-01:4.3810373159545052e-01:2.2764754618198635e-01:3.9113211193632874e-01:9.9446416977795471e-01:2.7109897031735547e-01:1.8774985240005324e+00:2.5091182940384216e-01:2.8283870025932250e+00:3.2965124242558597e-01:3.8712186811662632e+00 + CVs 20 + 5.4694361034733130e-01 4.1058514368368471e-01 -1.0256355152487368e-01 + 8.6238601282625582e-01 7.0166701750448479e-01 -2.1572904882654753e-01 + 1.1271320395709616e+00 9.4263316688742327e-01 -3.4154394315498343e-01 + 1.4035229987349160e+00 1.1771497015790211e+00 -4.8600003640448780e-01 + 1.6680365263109433e+00 1.3905732053471112e+00 -6.4867984984762328e-01 + 1.8920730064844029e+00 1.5638617230506844e+00 -8.2657110951812296e-01 + 2.0439076899660358e+00 1.6767502696411465e+00 -1.0084830842222861e+00 + 2.0977019980831635e+00 1.7187005448207515e+00 -1.1661858028029133e+00 + 2.0525208463919191e+00 1.7069338911924083e+00 -1.2546206402859421e+00 + 1.9541399635000216e+00 1.6925532011731976e+00 -1.2505284575160183e+00 + 1.8650163248066889e+00 1.7185490445601095e+00 -1.1999493021979608e+00 + 1.8020761454593390e+00 1.7846870086123876e+00 -1.1689338161310749e+00 + 1.7483352732136539e+00 1.8765976436739102e+00 -1.1846150214763964e+00 + 1.6840161315949673e+00 1.9862584043546057e+00 -1.2499297324680532e+00 + 1.5823328582159164e+00 2.1051652958852971e+00 -1.3717692704704560e+00 + 1.3826030179673161e+00 2.2091562469911272e+00 -1.5841114034003549e+00 + 1.0026673615094182e+00 2.2204540197228191e+00 -1.9498491710427373e+00 + 5.4651952578638840e-01 2.0432607347738649e+00 -2.4665399949584734e+00 + 4.9505508221430694e-01 2.0159452281376851e+00 -2.7071068089932080e+00 + id 12555 + loc 6.9253802299499512e-01 8.7527859210968018e-01 1081 + blend 0.0000000000000000e+00 + interp 5.0920466332060887e-01:4.7507832412887419e-01:2.6630819667872974e-01:3.2710421766217906e-01:1.0824142056587143e+00:5.0919957127397564e-01:1.9998889567755680e+00:3.3544970237513305e-01:2.9739309838616248e+00:2.9727798341285927e-01:3.6554525239248359e+00 + CVs 20 + 1.0048108250515933e-01 4.9742282128805704e-01 4.6898262632715620e-01 + 2.3906578454293975e-01 8.7366831546645862e-01 7.7378598838477275e-01 + 4.0147539643736563e-01 1.2053939827062896e+00 1.0280121203749359e+00 + 5.8403385334255420e-01 1.5216097644303601e+00 1.2724001513076160e+00 + 7.8723524046697624e-01 1.8170934980057352e+00 1.4949338259010825e+00 + 1.0117761899668387e+00 2.0859932255390330e+00 1.6780730913830195e+00 + 1.2586983551177848e+00 2.3183761964909060e+00 1.7974044375434592e+00 + 1.5258545463646855e+00 2.4944135806817740e+00 1.8291373598483500e+00 + 1.7979696371334126e+00 2.5777605569761191e+00 1.7583466661956804e+00 + 2.0313488950709524e+00 2.5324135245339434e+00 1.6098994972378264e+00 + 2.1969490475977445e+00 2.3846376388789738e+00 1.4538054911710230e+00 + 2.3230505256749843e+00 2.1882018045590117e+00 1.3204795365557072e+00 + 2.4418843545268905e+00 1.9615540161466123e+00 1.2030987305870857e+00 + 2.5699931926679538e+00 1.7089514673007618e+00 1.1017374967789220e+00 + 2.7140762865533437e+00 1.4410355793124565e+00 1.0419872320620924e+00 + 2.8713840732034446e+00 1.1911557538070543e+00 1.0800061489911235e+00 + 3.0398638536500191e+00 9.9887292815380146e-01 1.2214936934562612e+00 + 3.2307350873094287e+00 7.9360124814045074e-01 1.3832654101988511e+00 + 3.4526674978694292e+00 4.4087921439563915e-01 1.5063371600305000e+00 + id 12556 + loc 6.5085738897323608e-01 1.5685616433620453e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4696442870335853e-01:2.8010476784507304e-01:1.9291855364986654e-01:2.4455173421758164e-01:1.4069180019190357e+00:3.4696095905907154e-01:2.0413950621089265e+00:2.7973723414638207e-01:2.7951306048898132e+00:2.4466925330632039e-01:3.5245409076489498e+00 + CVs 20 + -3.6250309916814327e-02 2.8791430556528008e-01 2.9607090247939866e-01 + -3.5705367812858546e-02 6.2051178084341385e-01 5.6196267419270440e-01 + -1.6933049990299986e-02 9.8841648861232423e-01 8.1693789959717167e-01 + -9.3752683888204125e-03 1.3790868863823307e+00 1.0880988077082590e+00 + -4.3079620808147201e-02 1.7738176653382816e+00 1.4006025401266911e+00 + -1.4011834019278524e-01 2.1429318047377706e+00 1.7665519417399735e+00 + -3.2135381013397590e-01 2.4464142102645061e+00 2.1795977533580109e+00 + -6.1106076937562848e-01 2.6365668711760475e+00 2.6069697962211777e+00 + -1.0065000711474310e+00 2.6735077405454466e+00 2.9885765199717396e+00 + -1.4563511109281611e+00 2.5627982599803723e+00 3.2775789755025722e+00 + -1.9044723955275022e+00 2.3295973799099547e+00 3.4793062953417686e+00 + -2.3017196011432084e+00 1.9737111076984024e+00 3.6248396457797445e+00 + -2.5987992049551760e+00 1.5151997494660849e+00 3.7275151402376396e+00 + -2.8084588272640936e+00 1.0519405100060610e+00 3.7621617874678348e+00 + -3.0068476224985812e+00 6.8969300252561916e-01 3.7077356621606747e+00 + -3.2256287195672968e+00 5.0200931775482649e-01 3.5919172377323956e+00 + -3.4257662271335185e+00 5.0308012476318398e-01 3.4771927890552461e+00 + -3.5934030793907450e+00 5.7138713554644094e-01 3.3830262218074889e+00 + -3.9238891056794198e+00 4.6525758147863239e-01 3.2368449419644607e+00 + id 12557 + loc 8.7852579355239868e-01 4.5100861787796021e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5772593398007944e-01:4.5772135672073966e-01:9.3011435288625766e-04:3.3505921175884690e-01:4.3118633038847143e-01:3.7305121238643030e-01:9.9813574192429622e-01:2.9042668212876971e-01:1.9090665024450186e+00:2.7604399020787662e-01:2.7468303009951693e+00:3.4503549090696378e-01:3.4776563617460665e+00 + CVs 20 + -1.3999516554816685e-01 3.7869887867745344e-01 1.2030545048688795e-01 + -2.9624336728048206e-01 7.5427834133616667e-01 2.4136819046570157e-01 + -4.7329171467263820e-01 1.1071413344301124e+00 4.0249199207153119e-01 + -6.7032030277389709e-01 1.4173340288593146e+00 6.1996978703655459e-01 + -8.8449274702750269e-01 1.6693445082023017e+00 8.9736009731429611e-01 + -1.1085130829322569e+00 1.8474035417497905e+00 1.2318897150748132e+00 + -1.3304462900869047e+00 1.9382667199528516e+00 1.6157907000259590e+00 + -1.5331026191607771e+00 1.9327678352932605e+00 2.0391231887837229e+00 + -1.6937073822093682e+00 1.8252876668354432e+00 2.4889522310296321e+00 + -1.7872736457018337e+00 1.6143894574966196e+00 2.9450015539506893e+00 + -1.7934015135837154e+00 1.3043252663569951e+00 3.3767609115909010e+00 + -1.7073395990711673e+00 9.0982862124853203e-01 3.7451420459079401e+00 + -1.5516294099566297e+00 4.6242915184906597e-01 4.0269779806693364e+00 + -1.3585107607549278e+00 1.7732403572967348e-02 4.2586780094319350e+00 + -1.1500153202937291e+00 -3.1565085847105756e-01 4.5530875430071251e+00 + -9.8239084118332765e-01 -3.6414307314671213e-01 4.9818590838903267e+00 + -9.3643190627533768e-01 -2.8525200161954256e-02 5.3871858917944841e+00 + -1.1162868860790804e+00 7.0955191244406679e-01 5.3572105081734280e+00 + -1.0872131335745605e+00 9.1518826406571319e-01 5.5802024817338012e+00 + id 12558 + loc 2.0978195965290070e-01 4.8137682676315308e-01 406 + blend 0.0000000000000000e+00 + interp 4.8628404151591259e-01:3.9156201550421998e-01:1.7701691824654864e-02:4.3426896835018425e-01:9.8399214365887144e-01:4.8627917867549747e-01:1.3875968223127604e+00:3.9504568187837202e-01:1.9835817463254664e+00:4.5697726266151462e-01:2.7039516642229100e+00:4.2545385476235448e-01:3.2195345969073634e+00 + CVs 20 + 7.4879013289661678e-02 2.3256879991125903e-01 -2.1351589955356434e-01 + 1.6645339257537664e-01 3.8652010525902936e-01 -3.3097523356806940e-01 + 2.6742893767764186e-01 4.8308360760263802e-01 -4.3801846458394628e-01 + 3.7984639210217586e-01 5.5306207415115072e-01 -5.5660368696281948e-01 + 5.0186375167793529e-01 5.9875113186186790e-01 -6.8290444361037406e-01 + 6.3181515182267789e-01 6.2226361031379240e-01 -8.1383232591319721e-01 + 7.6849579518796085e-01 6.2542041261383230e-01 -9.4589247174945479e-01 + 9.1099415387159455e-01 6.1032292787562836e-01 -1.0752385571970202e+00 + 1.0579294359971172e+00 5.7977445426456697e-01 -1.2003673202249601e+00 + 1.2073925041233677e+00 5.3645147659477921e-01 -1.3235503259103951e+00 + 1.3576136872093973e+00 4.8220992206557961e-01 -1.4470631206480447e+00 + 1.5070268826638591e+00 4.1900802525046249e-01 -1.5697990493875140e+00 + 1.6539942756183446e+00 3.4914794355843265e-01 -1.6900735047833537e+00 + 1.7970534997437422e+00 2.7364739798748122e-01 -1.8097155451944325e+00 + 1.9346278292708834e+00 1.9190587093949374e-01 -1.9321819422263400e+00 + 2.0635786291432385e+00 1.0413382545913574e-01 -2.0574739306941701e+00 + 2.1800989846916399e+00 1.0767581341040833e-02 -2.1846173523657586e+00 + 2.2810977116748536e+00 -9.0954076584057297e-02 -2.3147472790125079e+00 + 2.3415325266710751e+00 -1.9475674067963766e-01 -2.4189662161286942e+00 + id 12559 + loc 9.3596613407135010e-01 9.7127109766006470e-01 409 + blend 0.0000000000000000e+00 + interp 4.2432425935628620e-01:3.8026239746209478e-01:9.2374982872688161e-01:3.8138518717836278e-01:1.9056854889483739e+00:3.0281370297983584e-01:2.8258764775100467e+00:4.2432001611369263e-01:3.1987035353022879e+00:3.7098990851428898e-01:3.9996540677939372e+00 + CVs 20 + 5.7838496151038798e-01 1.1079608231033422e-01 -2.6732383386959591e-01 + 1.0623298653274027e+00 1.3305243144107604e-01 -4.9819509930180839e-01 + 1.5415354984862051e+00 1.3129143890416017e-01 -6.9249458834300825e-01 + 2.0425782529364680e+00 1.2415294512589370e-01 -8.4319207261560147e-01 + 2.5551346727119491e+00 1.0804762929282785e-01 -9.4414470255992922e-01 + 3.0683345084060885e+00 8.0226262797580938e-02 -9.9823642195156248e-01 + 3.5710870062889732e+00 3.5095354383754218e-02 -1.0122145274105661e+00 + 4.0523203104115471e+00 -3.7558731556868619e-02 -9.9353743688392426e-01 + 4.5053091837989623e+00 -1.4876537002696488e-01 -9.5580624049647367e-01 + 4.9270152170451089e+00 -3.0922012038979974e-01 -9.2018238741821312e-01 + 5.3099654602657740e+00 -5.2538675411837987e-01 -9.0120365195641128e-01 + 5.6443616319963867e+00 -7.8934877300048356e-01 -8.9641217394092654e-01 + 5.9284158732476202e+00 -1.0857207726761935e+00 -9.0176128252598475e-01 + 6.1645926863756495e+00 -1.4077965324299559e+00 -9.2581992289068560e-01 + 6.3490564106876839e+00 -1.7525841874682344e+00 -9.7772900252430328e-01 + 6.4719317638628180e+00 -2.1078278866803335e+00 -1.0528982713428017e+00 + 6.5317897400400255e+00 -2.4550471588014422e+00 -1.1393987416038440e+00 + 6.5510361146011338e+00 -2.7863769309564379e+00 -1.2405154401486231e+00 + 6.6214548841461482e+00 -3.0973715701483715e+00 -1.3858302104949571e+00 + id 12560 + loc 2.0085744559764862e-01 6.4131164550781250e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4267928579481947e-01:3.6398284563651545e-01:2.6386956154942987e-01:2.7899777862408504e-01:9.9972560741234484e-01:4.4267485900196152e-01:1.5804285887898102e+00:2.9334840018752645e-01:2.0285247651162761e+00:2.7513115170877850e-01:3.2096556905513194e+00 + CVs 20 + 9.1973020950373421e-02 3.1222728276164269e-01 2.2894775444211021e-02 + 2.1198348622215873e-01 6.1147025465651483e-01 1.8127306309195179e-02 + 3.4756645663767072e-01 8.9431295568579849e-01 -8.5127063568292693e-03 + 4.9295316582246451e-01 1.1645847035567862e+00 -5.5499723552498992e-02 + 6.4782971514057475e-01 1.4181920234782979e+00 -1.2852896722638796e-01 + 8.1105554487366094e-01 1.6488662463033310e+00 -2.3034140479546844e-01 + 9.8181478061825711e-01 1.8467491791013040e+00 -3.5880641393579582e-01 + 1.1573432528421437e+00 2.0020402038844884e+00 -5.0719768204160243e-01 + 1.3303388566342682e+00 2.1108574560192364e+00 -6.6750313245102788e-01 + 1.4903774145713942e+00 2.1735534172495794e+00 -8.3294102762074140e-01 + 1.6306702401918902e+00 2.1919265946325224e+00 -9.9514334080852318e-01 + 1.7534903599305369e+00 2.1687042419079616e+00 -1.1437067569093946e+00 + 1.8684748212399891e+00 2.1018683533838383e+00 -1.2688809111026704e+00 + 1.9914198471933382e+00 1.9763698587410583e+00 -1.3613567539281486e+00 + 2.1421218577665386e+00 1.7693531058185705e+00 -1.4228265138636762e+00 + 2.3148690627886608e+00 1.4704533312113957e+00 -1.4805566591606572e+00 + 2.4674483356580819e+00 1.0781987454659303e+00 -1.5682560711957179e+00 + 2.5259452823208655e+00 6.0363433256815779e-01 -1.6933309173155437e+00 + 2.4029593075159057e+00 3.4406930647391293e-01 -1.6818045345882042e+00 + id 12561 + loc 9.2057019472122192e-01 7.5726789236068726e-01 1082 + blend 0.0000000000000000e+00 + interp 8.4534331847789557e-01:8.4533486504471078e-01:1.8698845353674141e+00:8.1432799741499762e-01:1.9008930002000795e+00:4.7460309466085981e-01:1.9999653805388231e+00:4.3690808465559866e-01:2.4180944078471640e+00:4.6955766473025623e-01:2.9658815251556763e+00:3.3134531494591490e-01:3.1457501143415438e+00:3.2961733871685372e-01:3.8699194299127044e+00 + CVs 20 + -1.4918689711048605e-01 3.0318716947503205e-01 3.7370941234099042e-01 + -2.5076536302235630e-01 4.9098542902102377e-01 5.3144068868578065e-01 + -3.5083954099856252e-01 6.3157853800435282e-01 6.2099343186044376e-01 + -4.7158970537113620e-01 7.5993706467597200e-01 7.1314601663527455e-01 + -6.1478012449272468e-01 8.7471288163980820e-01 8.0227344923384969e-01 + -7.8234120512830396e-01 9.7500548907818341e-01 8.8392992235792966e-01 + -9.7617403020826998e-01 1.0603015362070400e+00 9.5457454451518964e-01 + -1.1977217432483402e+00 1.1305919394866424e+00 1.0114788593871187e+00 + -1.4476854625653102e+00 1.1863710563000123e+00 1.0528699077099677e+00 + -1.7258190600372143e+00 1.2284230588870373e+00 1.0780890367130340e+00 + -2.0306886130934987e+00 1.2571368498656572e+00 1.0882281192643899e+00 + -2.3590086372598162e+00 1.2713862087371819e+00 1.0861016809315212e+00 + -2.7039034872256607e+00 1.2684158105706156e+00 1.0737459827567895e+00 + -3.0524185326157935e+00 1.2457080852922537e+00 1.0517217395221294e+00 + -3.3901962076857135e+00 1.2054441822031281e+00 1.0220336937903882e+00 + -3.7116294548115882e+00 1.1544135011475538e+00 9.9152509704331471e-01 + -4.0164186779784936e+00 1.0992341717242242e+00 9.6891424203681220e-01 + -4.2975494595927914e+00 1.0445865352820629e+00 9.6008340358198541e-01 + -4.5477233167319024e+00 1.0185565550974254e+00 9.9394358049405063e-01 + id 12562 + loc 1.0796137154102325e-01 2.0261202752590179e-01 403 + blend 0.0000000000000000e+00 + interp 4.7840833999415228e-01:4.2735687251338444e-01:7.1550412067831448e-01:4.7840355591075234e-01:1.0588102124628880e+00:3.6222447437300070e-01:1.8303552011193989e+00:3.3801825814279712e-01:2.9768485485759224e+00:2.8440608856232963e-01:3.9907723261027042e+00 + CVs 20 + -1.8817676178407880e-01 1.9403664236359700e-01 1.1489528609987945e-01 + -3.6229421296330261e-01 3.9316764657501557e-01 2.4382288666876051e-01 + -5.2355493077537152e-01 5.8657576273357881e-01 3.9392896289991985e-01 + -6.7035169199803135e-01 7.6291657481677821e-01 5.6703771457154639e-01 + -7.9632289439756854e-01 9.1067578378723413e-01 7.5749700747607629e-01 + -8.9323048812430184e-01 1.0201589789379015e+00 9.5475980128623195e-01 + -9.5553923106711236e-01 1.0887180556103868e+00 1.1451937298733357e+00 + -9.8430020756118031e-01 1.1216868930997816e+00 1.3129145670348368e+00 + -9.8832076867027874e-01 1.1312010076259760e+00 1.4453956542988673e+00 + -9.8120309689618179e-01 1.1322544656492408e+00 1.5441596911942006e+00 + -9.7265876203192914e-01 1.1363292466130359e+00 1.6242200193579905e+00 + -9.5910924808248066e-01 1.1441923163695513e+00 1.7122471819744614e+00 + -9.2913733221793149e-01 1.1456072122953498e+00 1.8299397900967622e+00 + -8.8865968129443595e-01 1.1391945058154067e+00 1.9746028717488553e+00 + -8.5054215999782146e-01 1.1258212253591535e+00 2.1398097159138381e+00 + -7.9871224687500919e-01 1.0647516317176566e+00 2.3293431659412831e+00 + -7.0152272944257621e-01 8.8060730077933280e-01 2.5385999759600630e+00 + -5.8043023668040816e-01 5.8944180815974845e-01 2.7747385701537692e+00 + -6.0399746820844702e-01 5.1530603514594431e-01 2.9978316019363787e+00 + id 12563 + loc 7.0255720056593418e-03 1.1810320615768433e-01 1085 + blend 0.0000000000000000e+00 + interp 1.1413639245734375e+00:2.7679910036821254e-01:1.5805901152828761e-02:2.7830621799501010e-01:9.8545238295739901e-01:1.0176002314473342e+00:1.0056768552140194e+00:1.1413539245734374e+00:2.8900688905970853e+00:4.1333397701121738e-01:2.9725375543693682e+00:2.4116179629265710e-01:3.1554808636835587e+00 + CVs 20 + 5.4339962867306579e-01 4.2683087305328954e-01 2.7945038098046249e-01 + 9.3549520809249487e-01 8.1426285621232042e-01 5.5877556636138070e-01 + 1.2645970964084179e+00 1.1857706070039689e+00 8.7300973379294522e-01 + 1.5541656680223315e+00 1.5514430103034820e+00 1.2549999625154602e+00 + 1.7768570589992874e+00 1.8878652159346387e+00 1.7102875440394121e+00 + 1.9049062969582800e+00 2.1689904642178428e+00 2.2309832041413986e+00 + 1.9183247505683467e+00 2.3678581480176271e+00 2.7936568690409542e+00 + 1.8138044580795112e+00 2.4613368507862825e+00 3.3610991772083509e+00 + 1.6090515705177237e+00 2.4351791284107804e+00 3.8907308835424139e+00 + 1.3516607872769433e+00 2.2906518983177784e+00 4.3430681799461945e+00 + 1.1042384853659202e+00 2.0517596871148429e+00 4.6982499839667513e+00 + 9.0852626824787142e-01 1.7521726812088343e+00 4.9592614520371683e+00 + 7.8410101573865587e-01 1.4255680551882137e+00 5.1351209549003922e+00 + 7.4136606219688184e-01 1.1139358846603580e+00 5.2330058082083371e+00 + 7.6735450610136813e-01 8.6181376918841390e-01 5.2595377251110067e+00 + 8.1497210116778351e-01 6.8350830137441343e-01 5.2262314124248066e+00 + 8.4682354134402260e-01 5.4438336338583959e-01 5.1426190697024650e+00 + 8.6131936333022563e-01 3.7904182584200063e-01 5.0269117083100978e+00 + 9.9228363541430853e-01 1.4364889841549050e-01 5.0492225931040560e+00 + id 12564 + loc 8.2957911491394043e-01 9.0174883604049683e-01 263 + blend 0.0000000000000000e+00 + interp 6.9409648463449602e-01:4.0231509503108687e-01:5.7210191571744839e-01:3.7549644719366071e-01:1.1119919787502963e+00:4.7053953267385695e-01:1.9505720355493912e+00:4.5867385242004088e-01:2.4876980932840898e+00:4.5465548978344938e-01:2.8813918382636361e+00:5.3861715962437717e-01:3.0140711332483936e+00:6.9408954366964970e-01:3.4036551162873976e+00 + CVs 20 + -7.7284650447262981e-01 4.9012890690458927e-01 -1.2903258194366510e-01 + -1.4545337016396696e+00 7.8555040283027644e-01 -1.5768947082403015e-01 + -2.1347752945100114e+00 8.9827049742552900e-01 -8.5737177921436314e-02 + -2.8161828496886963e+00 9.3003190705197314e-01 5.1027229731758994e-02 + -3.4718957913293518e+00 9.7454936103945733e-01 1.9918624733700152e-01 + -4.0973454685755009e+00 1.0643751991408097e+00 3.0573190700750252e-01 + -4.6961809037815767e+00 1.1835933580024414e+00 3.3855296776722177e-01 + -5.2693357343479823e+00 1.3103057213266016e+00 2.8833970051411351e-01 + -5.8261829214350396e+00 1.4268134398820171e+00 1.5235065384441726e-01 + -6.3864264315773660e+00 1.5138016031005548e+00 -7.8885240643903343e-02 + -6.9516734385964529e+00 1.5402604420168238e+00 -4.1018554645362570e-01 + -7.4951515068193926e+00 1.4650213566215307e+00 -8.2426414105261181e-01 + -7.9672400926430047e+00 1.2583125629463687e+00 -1.2750906722351174e+00 + -8.3306201668473676e+00 9.2943739440044215e-01 -1.7059790621465183e+00 + -8.5788708713548552e+00 5.2484261834643853e-01 -2.0687929853469025e+00 + -8.7354784866911892e+00 1.6401306582491681e-01 -2.2853367853249176e+00 + -8.8327975050715448e+00 5.2174929240795365e-02 -2.3498557254146593e+00 + -8.8585572078646759e+00 1.0186424836077590e-01 -2.4145488265107495e+00 + -8.9975359924264460e+00 -1.7330744762716721e-01 -2.3136738853358798e+00 + id 12565 + loc 6.5103423595428467e-01 7.2267127037048340e-01 372 + blend 0.0000000000000000e+00 + interp 4.0036581248286152e-01:3.7304885989935999e-01:1.7778944489498172e-01:3.0108430932226249e-01:9.2732561959338677e-01:3.2803417999655227e-01:1.6155413513241346e+00:4.0036180882473671e-01:2.2530884333284460e+00:3.0786262139387294e-01:2.9870926090419960e+00:3.0003604978703224e-01:3.7953392452390959e+00 + CVs 20 + -3.9883713809961041e-01 3.8726363536783198e-01 2.3415400379207918e-02 + -7.2859674203051372e-01 6.6739617012980312e-01 5.8429331624596945e-02 + -1.0194460228668727e+00 8.3109497677937560e-01 1.0469580724186037e-01 + -1.3149559575456906e+00 8.9645634264338769e-01 1.6387469033472582e-01 + -1.6307783893150058e+00 9.1384975202756358e-01 2.5404632864852861e-01 + -1.9875385334731406e+00 9.5187312872328422e-01 3.9171373766942114e-01 + -2.4136349934322814e+00 1.0554488010965182e+00 5.4937774777559167e-01 + -2.9146907741777559e+00 1.2501026992929340e+00 6.7375509660018895e-01 + -3.4530531197910088e+00 1.5474524520063342e+00 7.1494756155797834e-01 + -3.9701211696624368e+00 1.9295987781182409e+00 6.3878896646695238e-01 + -4.4305098337722137e+00 2.3476392293258730e+00 4.3111284117609472e-01 + -4.8224758671670589e+00 2.7341227944991080e+00 8.8516087058819859e-02 + -5.1259779267495382e+00 2.9987629032562295e+00 -3.8182273328625693e-01 + -5.2986810443880730e+00 3.0523548414296773e+00 -9.3194660436358034e-01 + -5.3095593347580685e+00 2.8876246570731698e+00 -1.4610216028004603e+00 + -5.2300304720323174e+00 2.5554604012143258e+00 -1.9099637629357249e+00 + -5.2197986377796832e+00 2.0333195590002875e+00 -2.2727750886695421e+00 + -5.3686283635026868e+00 1.3535275996639582e+00 -2.5215892482417264e+00 + -5.5031667614631710e+00 6.9501291759773753e-01 -2.7851830989118049e+00 + id 12566 + loc 8.0756968259811401e-01 1.3297057151794434e-01 413 + blend 0.0000000000000000e+00 + interp 5.3404335313593854e-01:2.7818472667758959e-01:3.4320336287209607e-01:3.1081186086166945e-01:1.3441934173915500e+00:4.5951839297873392e-01:1.7484447408528672e+00:5.3403801270240725e-01:2.0094758968835951e+00:4.5418421322356672e-01:2.6035360645378747e+00:2.8082611190358198e-01:3.0000019014634782e+00:4.5220302882371410e-01:3.4531860045791922e+00 + CVs 20 + -1.0084327639298778e+00 1.5166022894639483e-01 2.4272024947625553e-01 + -1.6345418877119668e+00 1.6054872518114349e-01 4.2005087549552667e-01 + -2.1739428235951732e+00 1.3285401428847168e-01 5.7287420044769088e-01 + -2.7280450929334186e+00 1.2478520307958352e-01 7.0943986594171538e-01 + -3.2887844624913387e+00 1.2472287984050867e-01 8.2588567656167577e-01 + -3.8491634825489802e+00 1.1716804590661223e-01 9.1992527099685029e-01 + -4.4053606287930069e+00 9.1263976379205469e-02 9.9405338494886064e-01 + -4.9612116463822593e+00 4.6298456315066128e-02 1.0537128068671946e+00 + -5.5268479327813660e+00 -1.7280298083588441e-02 1.0999162103661098e+00 + -6.1066781666037331e+00 -1.1399134597884764e-01 1.1279477587815288e+00 + -6.6946338218671162e+00 -2.6866342869025894e-01 1.1420990159367681e+00 + -7.2699913899547433e+00 -5.1019112778901166e-01 1.1598167208971750e+00 + -7.8024659048728298e+00 -8.5198379370900224e-01 1.1900463212329422e+00 + -8.2652756185537140e+00 -1.2837887374883739e+00 1.2215151127387933e+00 + -8.6414200239901113e+00 -1.7827898556004391e+00 1.2428358505777761e+00 + -8.9225822854670795e+00 -2.3252317338798378e+00 1.2572241898607674e+00 + -9.1027099317128215e+00 -2.8864174957310538e+00 1.2674739904597840e+00 + -9.1728402276210037e+00 -3.4415767327185289e+00 1.2615446574892428e+00 + -9.0634629372558209e+00 -3.9127485347324136e+00 1.2396465354292654e+00 + id 12567 + loc 9.9006795883178711e-01 1.7161427438259125e-01 397 + blend 0.0000000000000000e+00 + interp 3.3368384124637529e-01:2.6662778144468030e-01:4.2492945870886700e-06:1.8756631212281294e-01:1.2999465650224598e+00:3.3368050440796282e-01:2.1667180016114815e+00:2.6525218546899770e-01:2.9241043622188929e+00 + CVs 20 + -1.0318551745424138e+00 6.4167794930178879e-02 4.0280245250553987e-01 + -1.6208769750656598e+00 -3.9038328907185754e-02 6.9170133055312721e-01 + -2.1160210008913016e+00 -1.9704911648693760e-01 9.6590815697189070e-01 + -2.6268539549348451e+00 -3.4964984328943466e-01 1.2377383854463602e+00 + -3.1604350077567114e+00 -5.0899079115491919e-01 1.5059624323437961e+00 + -3.7266066962375097e+00 -6.9639973722745840e-01 1.7730302004692364e+00 + -4.3224289979711799e+00 -9.3174307285369906e-01 2.0467268429197780e+00 + -4.9275527389334552e+00 -1.2291249117185656e+00 2.3363438929481397e+00 + -5.5089372939805257e+00 -1.6090930442833300e+00 2.6384487306705742e+00 + -6.0228182739526597e+00 -2.0949332313922140e+00 2.9385657583322358e+00 + -6.4229509084496383e+00 -2.6872021155451060e+00 3.2313811574645630e+00 + -6.6800752092408944e+00 -3.3599372826415519e+00 3.5186193162854669e+00 + -6.7924169713526936e+00 -4.0709799040861965e+00 3.7994778695182823e+00 + -6.7769479269040733e+00 -4.7744964981029128e+00 4.0737787106015668e+00 + -6.6576971270014473e+00 -5.4281927738231781e+00 4.3398570640018850e+00 + -6.4628290699219093e+00 -6.0029196148654158e+00 4.5806715639338282e+00 + -6.2273781076940899e+00 -6.4965401879066995e+00 4.7741400328292052e+00 + -5.9957553935115504e+00 -6.9435256826028571e+00 4.9305989673416581e+00 + -5.9036223466697377e+00 -7.4786744520847828e+00 5.2151588296492566e+00 + id 12568 + loc 8.5294121503829956e-01 2.4819667637348175e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6093774698570639e-01:4.0452741100832090e-01:1.9269740236471655e-04:4.5974158771952045e-01:3.1691542299255970e-01:4.0657619908663067e-01:8.6982652143782346e-01:4.6093313760823656e-01:1.1209256891362993e+00:4.1919420106315231e-01:1.7084274659290606e+00:2.7997913290441157e-01:2.0214841872743090e+00:4.0026331307789526e-01:2.9148554123655686e+00:3.4496883637189091e-01:3.3607794012346464e+00 + CVs 20 + -8.5798109902441133e-02 4.4583669419448513e-01 1.5324715373651093e-01 + -1.9719719530275148e-01 8.8777498463507221e-01 2.6168174862769622e-01 + -3.4382165710955648e-01 1.3168182150173486e+00 3.1829880954992990e-01 + -5.3477507820208559e-01 1.7229996554707112e+00 3.2816572435092672e-01 + -7.8261568668270054e-01 2.0968473271617389e+00 3.0522966267181467e-01 + -1.1033934126618119e+00 2.4305222692510196e+00 2.7040666613900421e-01 + -1.5052304512202594e+00 2.7098472389862467e+00 2.5236381489450266e-01 + -1.9696994257399398e+00 2.9141105657454913e+00 2.8047545735714896e-01 + -2.4794282602383659e+00 3.0348490203853280e+00 3.8482918583891162e-01 + -3.0760254030967551e+00 3.0368216158412058e+00 6.5202654594043363e-01 + -3.6666556467314106e+00 2.7691629048035677e+00 1.1592004703271932e+00 + -3.9823590888132987e+00 2.2716049117790851e+00 1.6672195816200410e+00 + -4.0589041947970577e+00 1.6922509650568718e+00 2.0566162228556930e+00 + -3.9512836588256315e+00 1.0479550587507278e+00 2.3522916806762404e+00 + -3.7093516195729048e+00 4.4509105021588857e-01 2.5275821784127621e+00 + -3.4594278153125386e+00 8.4535709909648628e-03 2.5879510246118347e+00 + -3.2948548420722443e+00 -2.3829134189353798e-01 2.5873044429567309e+00 + -3.2820727590333116e+00 -2.2310653275904033e-01 2.5807052793623084e+00 + -3.2158728553155167e+00 -4.5496974921752853e-01 2.5467584125182370e+00 + id 12569 + loc 2.2571580111980438e-01 8.9691716432571411e-01 411 + blend 0.0000000000000000e+00 + interp 4.8731049755240535e-01:4.8440320889031641e-01:1.3301503199958264e-01:3.4685767216685953e-01:9.6981553734448045e-01:4.8730562444742986e-01:1.2831836265275969e+00:3.9057568114595792e-01:2.0187239499085399e+00:3.3379275920746038e-01:2.8958210010107091e+00:4.3955689188268310e-01:3.1362446204050327e+00:4.1087682888759597e-01:3.7630737216997963e+00 + CVs 20 + 9.2797456280138335e-01 1.8326329246943901e-01 1.0913490831352943e-02 + 1.5403591362655313e+00 2.1526410477801869e-01 3.4425179737580122e-02 + 2.0690047200635888e+00 1.7502639224816546e-01 8.6327517765270284e-02 + 2.6118769966454622e+00 9.9956687623703133e-02 1.7926875700938383e-01 + 3.1598538995331853e+00 -4.6823230580740338e-03 3.1405982176713032e-01 + 3.7042561674680736e+00 -1.2980600059456515e-01 4.8608188750648407e-01 + 4.2351997530616439e+00 -2.6490749428207128e-01 6.8612277079151507e-01 + 4.7422730339221371e+00 -4.0448649027503358e-01 9.0569647019127719e-01 + 5.2185002915224938e+00 -5.5464782699142212e-01 1.1400736128110560e+00 + 5.6564938279833870e+00 -7.3115252225968486e-01 1.3779428265979268e+00 + 6.0434157796168417e+00 -9.3960180747548661e-01 1.5998833521805012e+00 + 6.3667442181514655e+00 -1.1713434205331708e+00 1.7876857765028353e+00 + 6.6272924206954142e+00 -1.4146762368785648e+00 1.9330692204894977e+00 + 6.8381886887594270e+00 -1.6644984525349813e+00 2.0358291723207045e+00 + 7.0134082986179411e+00 -1.9168639668782192e+00 2.0959451037473418e+00 + 7.1636791778241342e+00 -2.1582451244845258e+00 2.1100002780959088e+00 + 7.2993604135744219e+00 -2.3821770861247700e+00 2.0785155793691015e+00 + 7.4179500598333483e+00 -2.6097959748836552e+00 2.0177974135035521e+00 + 7.3934552942790663e+00 -2.8782390731371570e+00 1.9045836694118690e+00 + id 12570 + loc 4.5406734943389893e-01 9.5384162664413452e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0086802250973095e-01:4.5933294745448311e-01:4.0992618266144643e-04:5.0086301382950582e-01:5.3030000081359518e-01:3.1641461672342514e-01:9.9143690258324946e-01:2.1652561732834391e-01:1.7932825584240757e+00:3.3056880380615222e-01:2.6569737243666167e+00:3.8892629067116863e-01:2.9988693659306978e+00:3.1294368644311232e-01:3.5494208857055636e+00 + CVs 20 + 1.2534424679679967e-01 2.7164057409913472e-01 -8.0176220929273345e-04 + 2.5530377375171909e-01 5.2288068984686886e-01 -4.2177732131188417e-02 + 3.8685682958471623e-01 7.7070847922057495e-01 -1.0762106539639926e-01 + 5.1580132804895462e-01 1.0186572863601642e+00 -1.9257777607441701e-01 + 6.3735476946892144e-01 1.2598491981092506e+00 -3.0284874670955803e-01 + 7.4406277186209280e-01 1.4844569251002262e+00 -4.4220278624218090e-01 + 8.2624631124245418e-01 1.6795812746801826e+00 -6.1058733894623829e-01 + 8.7350675269150635e-01 1.8300644624207760e+00 -8.0094144684971691e-01 + 8.7801842377010830e-01 1.9217354970220657e+00 -9.9595347585699534e-01 + 8.4071099470582544e-01 1.9510073611308694e+00 -1.1711139242794308e+00 + 7.7288175142171744e-01 1.9308545816567850e+00 -1.3094361154159893e+00 + 6.8705196514995293e-01 1.8792463027534805e+00 -1.4148823213473520e+00 + 5.8768094239549429e-01 1.8022963851966387e+00 -1.5042823556289160e+00 + 4.7424850640652821e-01 1.6906359345101214e+00 -1.5957510972495703e+00 + 3.4959388223375115e-01 1.5230393716771378e+00 -1.7115419587164189e+00 + 2.3731215173760484e-01 1.3266021661631571e+00 -1.8376104370511059e+00 + 1.3891378050520872e-01 1.1222213463274000e+00 -1.9683398083204113e+00 + 4.6697157782907027e-02 8.7755631675824730e-01 -2.1342340038655925e+00 + -1.4711338552458295e-02 7.1714762758183681e-01 -2.2569675218845804e+00 + id 12571 + loc 3.6227089166641235e-01 8.8259750604629517e-01 1081 + blend 0.0000000000000000e+00 + interp 1.4299694850812308e+00:1.4299594850812307e+00:1.7897566755029095e+00:4.7463170991555503e-01:2.0228665528967000e+00:4.0370867248442793e-01:2.2997112492768741e+00:2.8325473395674222e-01:3.1479738094985610e+00:3.2378717943875790e-01:3.9887136380166526e+00 + CVs 20 + 3.3156616689866220e-02 5.0025157028128153e-01 6.5268502400833650e-01 + 9.2595143351124454e-02 8.6141817747703375e-01 1.0497762209722767e+00 + 1.6939193368441149e-01 1.1848663892438664e+00 1.3612229367569555e+00 + 2.5878565584756086e-01 1.5116281836617695e+00 1.6550533877907923e+00 + 3.6180049201953857e-01 1.8337600328558783e+00 1.9244214592177806e+00 + 4.7667200249308272e-01 2.1416238916342900e+00 2.1623428863994465e+00 + 6.0224391529308696e-01 2.4294178616259727e+00 2.3615720276742347e+00 + 7.4810367413779844e-01 2.7039929790435453e+00 2.5231736864625312e+00 + 9.6628623422998106e-01 2.9892063050545259e+00 2.6483975573027818e+00 + 1.3480314134124711e+00 3.2415698317734818e+00 2.6635835339231244e+00 + 1.7536437980771664e+00 3.3039883997493709e+00 2.5052045461465293e+00 + 2.0222471193785951e+00 3.2202707227735123e+00 2.2845020838409313e+00 + 2.1919995120065492e+00 3.0676392972814610e+00 2.0501948859206571e+00 + 2.3080897919502807e+00 2.8620466051572464e+00 1.8007155887524435e+00 + 2.4006062714423053e+00 2.5848999479612704e+00 1.5212260021701391e+00 + 2.4906691074382739e+00 2.1782702625830983e+00 1.2170138315512322e+00 + 2.5849938930085710e+00 1.6245063673148419e+00 9.9173747352344643e-01 + 2.6875650418059283e+00 1.0424713179350142e+00 9.3102023237112430e-01 + 2.8074734016014204e+00 5.8287809907496402e-01 9.6901617912328519e-01 + id 12572 + loc 6.3675171136856079e-01 6.7939633131027222e-01 1074 + blend 0.0000000000000000e+00 + interp 4.1189163966080267e-01:3.0388176890512941e-01:3.8671536195531142e-01:2.5665021305085756e-01:1.0678385330850739e+00:3.9956289980654958e-01:1.8721233864071460e+00:2.5799357830899960e-01:2.2992714450541345e+00:4.1188752074440610e-01:2.9998726190800071e+00:2.6418542931461370e-01:3.9184607050781524e+00 + CVs 20 + 8.3293840621344012e-02 2.8247490264451103e-01 -1.7883105299611141e-01 + 1.5881641604351082e-01 5.6781110766023546e-01 -3.5733461485621154e-01 + 2.4544916028567360e-01 8.5136240752059877e-01 -5.2968376656786176e-01 + 3.5432855645757788e-01 1.1298505639898844e+00 -6.9445474927920681e-01 + 4.8922251685642015e-01 1.4000061129021031e+00 -8.5392989885326998e-01 + 6.4954361092903223e-01 1.6561980244491190e+00 -1.0123512310204719e+00 + 8.2975519819556776e-01 1.8910671449088814e+00 -1.1755920393269956e+00 + 1.0209794416457276e+00 2.0979121540765573e+00 -1.3462414143537715e+00 + 1.2127315892992390e+00 2.2735938072037358e+00 -1.5262861952956772e+00 + 1.3953192774412997e+00 2.4201156678057618e+00 -1.7232878971951291e+00 + 1.5611636313437258e+00 2.5408115676329173e+00 -1.9466922737593308e+00 + 1.7008469271307325e+00 2.6333855543330893e+00 -2.2034383929491579e+00 + 1.8056292685659470e+00 2.6910750843656475e+00 -2.4964382185948661e+00 + 1.8735160607176149e+00 2.7085717441638968e+00 -2.8264971229345743e+00 + 1.9064693550766258e+00 2.6773166308704788e+00 -3.1892296912832214e+00 + 1.9096724037659010e+00 2.5857019681685314e+00 -3.5607307756835653e+00 + 1.8819177122797730e+00 2.4308565792260577e+00 -3.8942366443988350e+00 + 1.8034226270873919e+00 2.2321570775112094e+00 -4.1255449862828026e+00 + 1.5850707957889505e+00 2.0598813923035091e+00 -4.0407242030755928e+00 + id 12573 + loc 5.3486192226409912e-01 4.7605961561203003e-01 1084 + blend 0.0000000000000000e+00 + interp 2.9580917892213610e-01:2.6653670900510074e-01:3.5305422227671690e-01:2.9580622083034691e-01:1.2234159234234723e+00:2.9138822015123644e-01:2.3080244697525223e+00:2.9577178094803658e-01:3.3044434058619321e+00 + CVs 20 + 1.9911224829429677e-01 4.0175902155985926e-01 -1.9160236360807129e-01 + 3.9648764890499250e-01 7.7169743477527386e-01 -3.5327905230209888e-01 + 5.9849360566534004e-01 1.1348835125966847e+00 -5.2600733736163485e-01 + 8.2055222631653324e-01 1.4960237193190151e+00 -7.1222463731007579e-01 + 1.0876371687824331e+00 1.8450420985413265e+00 -8.8092922810725116e-01 + 1.4140218466255337e+00 2.1662440776760201e+00 -9.9995772503329217e-01 + 1.7913361996893880e+00 2.4373966198443604e+00 -1.0407121187005886e+00 + 2.1877334095286134e+00 2.6334672503186276e+00 -9.7591825743687011e-01 + 2.5570224604341654e+00 2.7294541323143968e+00 -7.8592012631429675e-01 + 2.8646200051916284e+00 2.7089629958121213e+00 -4.8302842347158337e-01 + 3.1082046801935843e+00 2.5582751075727819e+00 -1.1209416452811372e-01 + 3.3061612878935041e+00 2.2519005491698563e+00 2.4913714763804284e-01 + 3.4765471972583457e+00 1.8145654282916075e+00 5.0688147567742758e-01 + 3.6174698573333406e+00 1.3389921573184593e+00 6.8216273107784298e-01 + 3.7060389822532520e+00 8.8223810906101752e-01 8.8738811995188682e-01 + 3.7334906003342057e+00 5.2070169969421787e-01 1.1981058686350790e+00 + 3.7439291085241364e+00 3.5824731257043102e-01 1.5968761504878120e+00 + 3.7906446765762363e+00 3.7603010235816126e-01 1.9832325199631118e+00 + 3.8484272230948009e+00 2.9678465558948797e-01 2.3475664991879346e+00 + id 12574 + loc 9.7563242912292480e-01 4.4209823012351990e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8887425677484231e-01:3.3201509203433655e-01:1.7581332936164118e-01:3.7461074750844586e-01:9.9999780421245577e-01:4.8886936803227460e-01:1.4461330031216486e+00:3.1100570853684290e-01:2.1726450158581936e+00:3.2964840752454511e-01:3.0746188098259259e+00:4.8065327887636911e-01:3.6838592283463178e+00 + CVs 20 + -4.3007967689502297e-02 3.8797414456248958e-01 -2.4832357697360491e-01 + -1.1230952879831506e-01 7.3266237023632397e-01 -3.9358194134557278e-01 + -1.9564136305568025e-01 1.0684891506783143e+00 -4.9553426751795016e-01 + -2.9793234839839811e-01 1.4208116182482655e+00 -5.6881419353309570e-01 + -4.2522265282245630e-01 1.7785785981781674e+00 -5.8964948361738112e-01 + -5.8260203223042539e-01 2.1221442047632317e+00 -5.2554861756514959e-01 + -7.6918200925864899e-01 2.4103684056862349e+00 -3.3508651092801878e-01 + -9.5895618062619714e-01 2.5622318946424807e+00 6.8061536984855842e-03 + -1.0865028667068233e+00 2.4946650856540034e+00 4.3540203624228424e-01 + -1.1089592908100050e+00 2.2334752044535930e+00 8.1676552887661624e-01 + -1.0429245032562320e+00 1.8635709021908016e+00 1.0876705924943404e+00 + -9.2630265428907088e-01 1.4497564443979045e+00 1.2510033852977118e+00 + -7.9806756456892225e-01 1.0346893305483049e+00 1.3505579171936928e+00 + -6.7160030293157913e-01 6.5683909726528633e-01 1.4595388356188639e+00 + -5.4169018527651025e-01 4.1725797004876630e-01 1.6887326645559719e+00 + -4.4609180124345282e-01 5.6293575455908706e-01 2.1010843307726876e+00 + -5.5162920292753448e-01 1.3445926908353345e+00 2.3134469365082886e+00 + -9.5167442469136976e-01 2.1689343923752107e+00 1.4605065997034781e+00 + -9.7343870442237790e-01 2.3546558967168911e+00 1.5478065738571536e+00 + id 12575 + loc 1.1621838063001633e-01 3.6273073405027390e-02 408 + blend 0.0000000000000000e+00 + interp 6.8725781898706764e+00:6.8725681898706767e+00:7.9533179726319014e-02:5.0734320355823270e-01:2.7050507895547848e-01:3.7280151716463295e-01:1.0019478831938009e+00:3.1257989190220331e-01:1.9910792590023432e+00:4.2336892179728519e-01:2.4302910998865603e+00 + CVs 20 + -5.2827332024184478e-02 3.9137058751072173e-01 -3.8365499682255300e-01 + -9.2269677940202299e-02 6.8159938858249935e-01 -5.6116079292432586e-01 + -1.1699884894355435e-01 9.0161411433869254e-01 -6.6834243399247573e-01 + -1.4139450488167121e-01 1.1143781166724780e+00 -7.7345846074662239e-01 + -1.6248775273923211e-01 1.3157059827017443e+00 -8.7660267553443338e-01 + -1.7416708926403429e-01 1.4986091295072799e+00 -9.8065750389266193e-01 + -1.6583221829209541e-01 1.6516506415602596e+00 -1.0927524398411261e+00 + -1.1934866348892922e-01 1.7531433516829140e+00 -1.2225059366083257e+00 + -8.6654744772633185e-03 1.7658913680418067e+00 -1.3635413765266515e+00 + 1.6504291199823670e-01 1.6778674871823158e+00 -1.4639886156282793e+00 + 3.4523268554838465e-01 1.5619192806849829e+00 -1.5065181216536558e+00 + 5.0928363175945268e-01 1.4609243456591483e+00 -1.5501904157696476e+00 + 6.7016074199347320e-01 1.3610985280945163e+00 -1.6236388847907666e+00 + 8.3408488168111550e-01 1.2642819852351810e+00 -1.7294589113752263e+00 + 9.9789211811513800e-01 1.1990981544000425e+00 -1.8696056329285904e+00 + 1.1514993651881940e+00 1.1959997948487939e+00 -2.0420327406363699e+00 + 1.2827147130012539e+00 1.2562340710192763e+00 -2.2345343207178185e+00 + 1.3872898913113421e+00 1.3558207219182155e+00 -2.4312044917556257e+00 + 1.5380588299600624e+00 1.3020394562690418e+00 -2.6262727363481670e+00 + id 12576 + loc 3.1632599234580994e-01 7.0239984989166260e-01 406 + blend 0.0000000000000000e+00 + interp 4.1681901469611449e-01:4.1681484650596756e-01:1.1886526740328873e-01:3.2465468640116496e-01:8.5087609895170346e-01:3.8426747070198763e-01:1.3481542221308507e+00:3.9505623402408607e-01:2.0332398876989948e+00:3.5959438422327195e-01:3.4904511162942882e+00 + CVs 20 + 2.4538699309547399e-01 2.6104727229998703e-01 -2.2330134376139506e-02 + 3.6775030669946529e-01 4.1939744390544609e-01 -1.8390284457479783e-02 + 4.6186823168254004e-01 5.3775240504407984e-01 4.3001559098407166e-03 + 5.7581815097717048e-01 6.4558643506895164e-01 4.5067667786079665e-02 + 7.0623607491857265e-01 7.3876209783789515e-01 1.0436758702965984e-01 + 8.4954072817051562e-01 8.1341599967127509e-01 1.8126589461332862e-01 + 1.0016879074576825e+00 8.6605838497346643e-01 2.7328862148559879e-01 + 1.1581694945102370e+00 8.9399447932746801e-01 3.7656515789511447e-01 + 1.3153668010040975e+00 8.9609648449459267e-01 4.8685578977150046e-01 + 1.4722904109265045e+00 8.7264477539695362e-01 6.0046071565982972e-01 + 1.6294124811773700e+00 8.2423653042581702e-01 7.1262751005946223e-01 + 1.7860471735293613e+00 7.5186408910424951e-01 8.1556031278831376e-01 + 1.9408783670298773e+00 6.5763641427936825e-01 9.0118642130201065e-01 + 2.0935682985835373e+00 5.4434142738964852e-01 9.6564016231021654e-01 + 2.2414332217803166e+00 4.1623236843316425e-01 1.0076765506618501e+00 + 2.3770592920725653e+00 2.8114901847930285e-01 1.0249397397792432e+00 + 2.4927175189153234e+00 1.4819921229986310e-01 1.0162680009365550e+00 + 2.5835590035741762e+00 2.1678920346486774e-02 9.8625644318151862e-01 + 2.6683897255731557e+00 -1.5208737188844590e-01 9.0626608864787506e-01 + id 12577 + loc 5.8667272329330444e-01 2.7941960096359253e-01 1048 + blend 0.0000000000000000e+00 + interp 3.7558816730245431e-01:2.3195143546457533e-01:5.9690693828038488e-01:2.5280587320943620e-01:1.2120053942436682e+00:2.2508909056305271e-01:2.0571096761010557e+00:3.6889641369274234e-01:2.7427983220599188e+00:3.7558441142078131e-01:3.0493982330835054e+00:2.2308133295251262e-01:3.8292217926788963e+00 + CVs 20 + -7.6082088044508750e-02 5.0989225270372696e-01 2.5459141682064518e-01 + -1.9478634141091461e-01 1.0464939583555277e+00 4.6536730458278758e-01 + -4.0890311364870385e-01 1.5831719929591210e+00 5.9602566431847026e-01 + -7.5421730634734518e-01 2.0722209658927802e+00 6.4379532192149702e-01 + -1.2490729465186239e+00 2.4393661340325496e+00 6.4641698177885321e-01 + -1.8728930466269327e+00 2.5915373618510631e+00 6.8139788726584460e-01 + -2.5192287182916102e+00 2.4321084417934435e+00 8.3168304647268199e-01 + -2.9889600770313409e+00 1.9694391117443357e+00 1.0645805583093815e+00 + -3.2340401038099653e+00 1.3951676414798344e+00 1.2641570492013106e+00 + -3.4014220961180994e+00 8.5804366890367634e-01 1.4276560363744402e+00 + -3.6048887009409807e+00 4.0512239127590444e-01 1.6228605927773061e+00 + -3.8624481944914746e+00 7.2605573540476975e-02 1.9429780322002721e+00 + -4.1054740273740036e+00 -7.5074572313086285e-02 2.4433106847911410e+00 + -4.2344689040472501e+00 -3.4654105549574044e-02 2.9837005541648698e+00 + -4.2801992329981058e+00 5.8860484816810388e-02 3.4189303669104136e+00 + -4.3321925852546839e+00 1.3467246270796451e-01 3.7653109098258515e+00 + -4.4269828189674527e+00 2.0549740349175505e-01 4.0677317366061896e+00 + -4.5599444989043105e+00 2.7529315666020915e-01 4.3860987499689132e+00 + -4.7681398538076136e+00 2.6475444990817254e-01 4.6780643690118460e+00 + id 12578 + loc 2.0449654757976532e-01 2.7089127898216248e-01 1085 + blend 0.0000000000000000e+00 + interp 4.7425889549754857e-01:3.2596037162134922e-01:6.7692026943110528e-01:2.4799240812951193e-01:1.1906780993717703e+00:2.7204461000133251e-01:2.0160847026122570e+00:3.2747008660143395e-01:2.6870108664889290e+00:2.5600899226234669e-01:3.1679154599894441e+00:4.7425415290859363e-01:3.9999611415331753e+00 + CVs 20 + 2.7037649040870582e-01 3.3402065934134562e-01 2.8115862319645801e-01 + 4.4637376521351424e-01 5.8767159197335106e-01 5.1208411091871087e-01 + 5.9976049743375992e-01 8.1143718031995671e-01 7.2033119613734031e-01 + 7.6503588780229337e-01 1.0268120230774078e+00 9.1135926658214905e-01 + 9.4018359048314293e-01 1.2441938886460604e+00 1.0963866163018987e+00 + 1.1211729782540114e+00 1.4734033158834245e+00 1.2945020557698395e+00 + 1.2975871050480028e+00 1.7183858751078160e+00 1.5309024224293590e+00 + 1.4487387340205800e+00 1.9726483641293520e+00 1.8304767120337955e+00 + 1.5440405408217934e+00 2.2192779226716941e+00 2.2049826153413918e+00 + 1.5498265749775353e+00 2.4315593544306204e+00 2.6366084153945577e+00 + 1.4582375568875612e+00 2.5840591923704528e+00 3.0875587980770236e+00 + 1.2903116576771396e+00 2.6626109245271286e+00 3.5343457056886036e+00 + 1.0718843443655008e+00 2.6605958324927146e+00 3.9621515521215258e+00 + 8.2260915749787966e-01 2.5838133977703146e+00 4.3397933962436710e+00 + 5.6403046004547108e-01 2.4494200551279621e+00 4.6332898148652468e+00 + 3.4684700870334484e-01 2.2729183220902756e+00 4.8079756135858576e+00 + 1.9200497160013874e-01 2.0781900393347361e+00 4.8197945710691030e+00 + 1.0171860912176067e-01 1.8454165427177656e+00 4.7194940498190006e+00 + 3.7284054807606404e-01 1.5927809025153099e+00 4.9254081165694314e+00 + id 12579 + loc 9.9878305196762085e-01 3.9648696780204773e-01 403 + blend 0.0000000000000000e+00 + interp 5.0045055161491925e-01:2.5465482129783368e-01:6.4695995576258714e-02:2.0793469761303790e-01:1.0497137462365191e+00:5.0044554710940314e-01:1.7493183919742790e+00:4.7100736859298908e-01:2.0820027276230455e+00:2.6893856026506124e-01:2.7262606899377788e+00:3.2731713581979410e-01:3.5038676515162037e+00 + CVs 20 + -5.2544370401708423e-02 7.0103378308563127e-03 6.9491369482024154e-02 + -1.0087633846293488e-01 1.5898057106178184e-02 1.3219191165537983e-01 + -1.4809533037928596e-01 2.9124318734840601e-02 1.8901796077389987e-01 + -2.0045177627165864e-01 5.0980115700210077e-02 2.4221854179711494e-01 + -2.5951627388189796e-01 8.3922594990745558e-02 2.9329882862141410e-01 + -3.2306194982946157e-01 1.2891666294871046e-01 3.4237930410174577e-01 + -3.8968053228092653e-01 1.8664582214941111e-01 3.9018024458813932e-01 + -4.6024219520444842e-01 2.5887721184817913e-01 4.4013303019385841e-01 + -5.3458400522729055e-01 3.4747079509703638e-01 4.9791253308788891e-01 + -6.0841692635424138e-01 4.5130079120815864e-01 5.6904669074057479e-01 + -6.7590786184511487e-01 5.6609517973757972e-01 6.5690373094750565e-01 + -7.3333850878373075e-01 6.8833942311771645e-01 7.6387072257689526e-01 + -7.7783115733440555e-01 8.1690711943160133e-01 8.9351739905506455e-01 + -8.0454132740249884e-01 9.4986719430257249e-01 1.0505249279099105e+00 + -8.0639114243774723e-01 1.0813501393906249e+00 1.2391125167764327e+00 + -7.7421000961754327e-01 1.2047655469884744e+00 1.4622058723160867e+00 + -6.9319065908635324e-01 1.3207504049056062e+00 1.7204471531486132e+00 + -5.4124600192784922e-01 1.4341646153251031e+00 2.0071919223883179e+00 + -5.1663188051642117e-01 1.4680283092019066e+00 2.1155904298020518e+00 + id 12580 + loc 4.7704860568046570e-01 5.0416880846023560e-01 397 + blend 0.0000000000000000e+00 + interp 1.2548313021246356e+00:4.7115951576347687e-01:3.0221548412904087e-01:2.8654943172046066e-01:8.9888960300432164e-01:1.0201595091563103e+00:9.6511157362640243e-01:5.7044746816696601e-01:9.8123520393622310e-01:1.2548213021246355e+00:2.9998340372633328e+00:1.0963926019144663e+00:3.0002206619632501e+00:6.0797016370161994e-01:3.0299677302846626e+00:2.7528848695471575e-01:3.5327214424833571e+00 + CVs 20 + 1.2688681599912701e+00 4.0569536177754989e-01 -1.9181220804337684e-01 + 2.1238376095398630e+00 5.6729258989698073e-01 -3.2799974414979960e-01 + 2.8981031244004227e+00 6.2360693402634271e-01 -4.5475469667334195e-01 + 3.7289664963609370e+00 6.2268607374302498e-01 -5.8882128212062224e-01 + 4.5850785170635788e+00 5.4373182623151561e-01 -7.2598906111371864e-01 + 5.4474887811814812e+00 3.7246560164213410e-01 -8.6646621618562381e-01 + 6.3019516158611504e+00 9.8976656815503272e-02 -1.0091751100433810e+00 + 7.1116069780028397e+00 -2.8607184839318411e-01 -1.1573336693931684e+00 + 7.8281730817134365e+00 -7.8774499894192607e-01 -1.3152634928685267e+00 + 8.4051609895910104e+00 -1.3944955874461598e+00 -1.4863656283694244e+00 + 8.8115165680337579e+00 -2.0644515739771441e+00 -1.6777919437775317e+00 + 9.0470260697451064e+00 -2.7369445749994736e+00 -1.8924465434773532e+00 + 9.1445301728903097e+00 -3.3623054919119642e+00 -2.1287142635365530e+00 + 9.1512346134250997e+00 -3.9177431914085408e+00 -2.3858280241468135e+00 + 9.1097364539707666e+00 -4.4026051012127283e+00 -2.6603824945932226e+00 + 9.0505320627088217e+00 -4.8332490868385403e+00 -2.9421626294055567e+00 + 8.9895370291053869e+00 -5.2391957620085696e+00 -3.2199565900166234e+00 + 8.9304912034975157e+00 -5.6450449708666142e+00 -3.4859018280754626e+00 + 8.8989819086534840e+00 -6.0358101667585604e+00 -3.7381715474380504e+00 + id 12581 + loc 4.1097626090049744e-01 7.2915279865264893e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1219763169338458e-01:3.7491393157427666e-01:5.6519783536534973e-02:4.1219350971706764e-01:8.8083131118146218e-01:3.3486241994377108e-01:1.3058015813068584e+00:4.0571532974374036e-01:2.1271181630175957e+00:2.8072270034634578e-01:3.0000934431719921e+00:3.8762774901765534e-01:3.5498613827994934e+00 + CVs 20 + 5.2241867578084959e-02 3.1843931959646643e-01 -1.1555133660689743e-01 + 1.2384388305777763e-01 6.3526657397389408e-01 -2.6935665335499603e-01 + 2.1913315639930819e-01 9.3812797484212196e-01 -4.4844267700484031e-01 + 3.4082608613301407e-01 1.2174515284190102e+00 -6.4884524891641293e-01 + 4.8603631209839349e-01 1.4615599782870783e+00 -8.6951954579400514e-01 + 6.4499055370109137e-01 1.6513075889796527e+00 -1.0977321815016114e+00 + 8.0223525995841904e-01 1.7655104671032309e+00 -1.3106271121538082e+00 + 9.3987764721836642e-01 1.7980845197670767e+00 -1.4832487976437629e+00 + 1.0488369664524149e+00 1.7613031922620626e+00 -1.6025207036685560e+00 + 1.1372409302415383e+00 1.6683415410427695e+00 -1.6734285255759596e+00 + 1.2248541304308529e+00 1.5173572908495574e+00 -1.7107000593516253e+00 + 1.3366482315850730e+00 1.2939192073314261e+00 -1.7312935907201739e+00 + 1.4904176407249001e+00 1.0119556778742922e+00 -1.7404281565289463e+00 + 1.6923886949937115e+00 7.2605025375778953e-01 -1.7292536047390010e+00 + 1.9618968607869240e+00 4.4557625561270464e-01 -1.7123038314146568e+00 + 2.3171794744710352e+00 6.7939420510004456e-02 -1.7802450221797272e+00 + 2.6593083835652287e+00 -4.7223224448845302e-01 -2.0668725260067595e+00 + 2.7968615079558994e+00 -9.8097239423135085e-01 -2.5262225060739056e+00 + 2.6598250817583118e+00 -1.1359049168180126e+00 -2.8054413201515835e+00 + id 12582 + loc 7.1272712945938110e-01 8.9064449071884155e-01 409 + blend 0.0000000000000000e+00 + interp 3.7363203878459872e-01:3.1448491484100033e-01:3.4322526532417719e-01:3.6233736640175612e-01:1.0023743182293754e+00:2.8790886352430817e-01:1.6909987181128061e+00:2.8568644710755536e-01:2.1291959102699867e+00:3.7362830246421092e-01:2.9445754912930120e+00:3.3331281634371174e-01:3.7679665976434382e+00 + CVs 20 + 5.1407173797841899e-01 1.5383733686680590e-01 -1.7425138482051522e-01 + 9.4108926727042230e-01 2.5783826700726131e-01 -3.4116171014148888e-01 + 1.3600689028341895e+00 3.5281016760306416e-01 -4.9403257018035829e-01 + 1.7979515515421500e+00 4.4958652465940607e-01 -6.3204138143571642e-01 + 2.2497273238648945e+00 5.3984038083654251e-01 -7.5630151827442815e-01 + 2.7109736951840580e+00 6.1595729269073929e-01 -8.6835504208936931e-01 + 3.1798327992967468e+00 6.6889333700669806e-01 -9.6856245054688550e-01 + 3.6561396541800129e+00 6.8479985404984034e-01 -1.0564117279166949e+00 + 4.1364237630702299e+00 6.4700965769439844e-01 -1.1337947749947408e+00 + 4.6093363794938824e+00 5.3994920799854107e-01 -1.2077858782011208e+00 + 5.0558198731750652e+00 3.5503739693693070e-01 -1.2860603678862896e+00 + 5.4580734861505649e+00 9.7755325301844387e-02 -1.3700669613813397e+00 + 5.8057998047253969e+00 -2.2089034876874791e-01 -1.4551169099229457e+00 + 6.0920484328287952e+00 -5.8895476640686972e-01 -1.5365870482267106e+00 + 6.3101451214040702e+00 -9.9589449890491233e-01 -1.6086960126277043e+00 + 6.4545967932228763e+00 -1.4320040900821249e+00 -1.6604402354565435e+00 + 6.5245756471369116e+00 -1.8807240672812959e+00 -1.6812765860439864e+00 + 6.5336790770295199e+00 -2.3161897869931685e+00 -1.6735542439650606e+00 + 6.5495099766696736e+00 -2.6991080528308267e+00 -1.6450747157385728e+00 + id 12583 + loc 8.7757194042205811e-01 4.1889542341232300e-01 411 + blend 0.0000000000000000e+00 + interp 3.7856824509486042e-01:3.7742996515270943e-01:8.6089719123099040e-02:2.9049190493853483e-01:9.9999705890565260e-01:3.4446450636098924e-01:1.4566988111112900e+00:3.3763487956106480e-01:2.4316880739241897e+00:3.7856445941240952e-01:3.1689103329164832e+00:2.5908016997767147e-01:3.8434452813192728e+00 + CVs 20 + -6.6295652615612288e-01 1.2762154382919022e-01 2.2253580599006112e-01 + -1.1527828772223203e+00 1.4824682622259144e-01 3.9412637866739353e-01 + -1.6169732590752841e+00 1.3323163940086385e-01 5.4016943860748767e-01 + -2.1065922152878787e+00 1.1848336021103045e-01 6.6223807600093432e-01 + -2.6082160172840494e+00 9.8467007221630931e-02 7.5833887328775229e-01 + -3.1075366560849451e+00 6.8515783449033529e-02 8.3274836307040756e-01 + -3.5906114470317529e+00 2.5807902179376452e-02 8.9338276479186918e-01 + -4.0475701212468937e+00 -3.2409981696002621e-02 9.4556742956001050e-01 + -4.4774742844736730e+00 -1.1047510961044593e-01 9.8910206557358937e-01 + -4.8861493976472827e+00 -2.1644714468556647e-01 1.0244276968584245e+00 + -5.2758944563955890e+00 -3.6239606838612648e-01 1.0577387026313647e+00 + -5.6419305271715068e+00 -5.6162698858477111e-01 1.0968086152475864e+00 + -5.9762354247773839e+00 -8.2320132392243983e-01 1.1418128500519249e+00 + -6.2708521966180930e+00 -1.1488020532973844e+00 1.1856086570311999e+00 + -6.5164220197617864e+00 -1.5326745039712728e+00 1.2238134290155138e+00 + -6.7020078289300233e+00 -1.9605649445487092e+00 1.2569363397548599e+00 + -6.8190864952885519e+00 -2.4137290046819162e+00 1.2835684716220881e+00 + -6.8666707052911553e+00 -2.8790271736440358e+00 1.2999554172560299e+00 + -6.8627873445005676e+00 -3.3717459608876448e+00 1.3117285933403844e+00 + id 12584 + loc 5.7574081420898438e-01 7.3370647430419922e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6108961314642285e-01:2.7700333624630824e-01:2.3742741202082662e-01:2.9836526982526274e-01:9.9473983921244147e-01:2.5876140498529382e-01:1.6321245089215752e+00:3.0740334764717453e-01:2.8448480776756688e+00:3.6108600225029142e-01:3.2084503341789610e+00 + CVs 20 + 1.9093098820098675e-01 2.7574577449680976e-01 -7.2292456112561798e-02 + 3.7231826471129914e-01 5.3962624313126750e-01 -1.7031272523145904e-01 + 5.5397242384492051e-01 7.8445091856168825e-01 -2.9593236608919554e-01 + 7.3897158683113429e-01 9.9907225591735793e-01 -4.5074489070704499e-01 + 9.2291978827221632e-01 1.1710378208103382e+00 -6.3556630138963155e-01 + 1.0987004679425953e+00 1.2903942689560273e+00 -8.4619819688383924e-01 + 1.2573814278968998e+00 1.3514744394362372e+00 -1.0737346205545957e+00 + 1.3898074957420889e+00 1.3538267552973151e+00 -1.3052445287015884e+00 + 1.4884568827335798e+00 1.3025940476555651e+00 -1.5244132234726864e+00 + 1.5513912796083786e+00 1.2083756449280212e+00 -1.7156969084752767e+00 + 1.5839009249794158e+00 1.0851266535811468e+00 -1.8677160898693617e+00 + 1.5962425859720393e+00 9.4304738001767696e-01 -1.9806897049869152e+00 + 1.5968058157609633e+00 7.7316170421516284e-01 -2.0715691615496543e+00 + 1.5886355869785291e+00 5.4382230880751103e-01 -2.1625967756200857e+00 + 1.5717754695581290e+00 2.1452296389905801e-01 -2.2910055016171755e+00 + 1.5493260092430474e+00 -2.1312872401409133e-01 -2.5570980178804765e+00 + 1.5621750979492091e+00 -5.6742195567964004e-01 -3.0723904833712115e+00 + 1.7011379378017977e+00 -5.8677884171934380e-01 -3.7508940561497131e+00 + 1.7892168568076194e+00 -5.6181954101682652e-01 -3.8737798342204979e+00 + id 12585 + loc 9.3689447641372681e-01 1.7871206998825073e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4399890028835733e-01:2.9131756390241154e-01:4.4768614701777310e-01:2.9728341522040824e-01:1.2703891532628364e+00:2.7698221537598816e-01:2.0000397647339954e+00:3.4399546029935446e-01:2.8451919809466037e+00:2.5594849427793348e-01:3.8354905605552094e+00 + CVs 20 + -1.6686127449426302e-01 2.9602368792307127e-01 1.7124714819995912e-01 + -3.4817109352435638e-01 6.0776960310826444e-01 3.8081628312417348e-01 + -5.2448053769730707e-01 9.5582739266201555e-01 6.2165304515357178e-01 + -6.6730548381348664e-01 1.3535362252995711e+00 8.7039729540550537e-01 + -7.5002785167686836e-01 1.7483713247158041e+00 1.0795594125826484e+00 + -7.8485601540224548e-01 2.0059669491264116e+00 1.2130895003222590e+00 + -7.8724333646149347e-01 2.0633023397906305e+00 1.2311112483180779e+00 + -7.3147355679023107e-01 2.0383708984796494e+00 1.1375658487378080e+00 + -5.9801437408081193e-01 2.0443518615298939e+00 1.0129360382809525e+00 + -4.4200721502893148e-01 2.0741960093772054e+00 9.8613248599787207e-01 + -3.5909318413801877e-01 2.0435556162198893e+00 1.0846347198636095e+00 + -3.8806691198860233e-01 1.9354712681668489e+00 1.2300537065773025e+00 + -4.9539430108065319e-01 1.7981205846146660e+00 1.3663039401155244e+00 + -6.0930457726956599e-01 1.7054219984683234e+00 1.4960707424509390e+00 + -7.1817456275878211e-01 1.6820486871612323e+00 1.6491172282818010e+00 + -8.7134090688606625e-01 1.6673566195585932e+00 1.8465510734503754e+00 + -1.1043468246383050e+00 1.5830203186916001e+00 2.0842250031019409e+00 + -1.3159429387106700e+00 1.2853379032525800e+00 2.1347074876634555e+00 + -1.2738493681373628e+00 8.8527167984318966e-01 1.8128491575313366e+00 + id 12586 + loc 2.9136684536933899e-01 2.2236686944961548e-01 1075 + blend 0.0000000000000000e+00 + interp 3.9754224710718078e-01:3.2342795605266150e-01:6.9481207021559754e-01:2.8165590434543414e-01:1.5236854740332628e+00:2.4061555235290344e-01:2.3653021370466516e+00:3.9753827168470973e-01:3.2549590784010021e+00:2.4418653097207438e-01:3.9997224226167827e+00 + CVs 20 + -1.9382990091882607e-01 2.7391671189007982e-01 -6.7093131717877799e-02 + -3.7833250899580489e-01 5.7314946665241306e-01 -1.1787256551632036e-01 + -5.4469820122315771e-01 8.7903609817942852e-01 -1.6610974127934391e-01 + -6.9722929398308964e-01 1.1793768687797241e+00 -2.2015748564438120e-01 + -8.4778002063831914e-01 1.4682111762330829e+00 -2.8293255551514818e-01 + -1.0022825046530164e+00 1.7384425666503001e+00 -3.5068330966739392e-01 + -1.1570086070617649e+00 1.9843123090577837e+00 -4.0733027257667875e-01 + -1.3161423650324338e+00 2.2172676059222485e+00 -4.3852719016586506e-01 + -1.5094819562341535e+00 2.4492419901818092e+00 -5.0274858894388696e-01 + -1.7371822260526959e+00 2.6372997751430027e+00 -6.8554471533080208e-01 + -1.9783549507743161e+00 2.7443495088319221e+00 -9.9465440051530962e-01 + -2.2147261282854909e+00 2.7452655869564566e+00 -1.4142736750415672e+00 + -2.4398327801163608e+00 2.5960546526597987e+00 -1.8727232066350012e+00 + -2.6785875015113318e+00 2.2991460523515332e+00 -2.2084541637533035e+00 + -2.9495376976136316e+00 1.9126813012534534e+00 -2.3505738692499123e+00 + -3.2170370693098698e+00 1.4514366326759314e+00 -2.3756725540767816e+00 + -3.4275678030058110e+00 9.2640554787458407e-01 -2.4183781472433603e+00 + -3.5683987092654870e+00 4.1198093256107859e-01 -2.6366638763600747e+00 + -3.6755493903041838e+00 4.8027222783800783e-02 -3.1114910051430402e+00 + id 12587 + loc 5.1896661520004272e-01 1.4148496091365814e-01 1084 + blend 0.0000000000000000e+00 + interp 4.3768275459781325e-01:2.7958111330925789e-01:3.4998374059630355e-02:2.7685785719614642e-01:8.8220952919993911e-01:2.8865926808867975e-01:1.6402155109105894e+00:3.8051474191823431e-01:2.0417675811389970e+00:4.3767837777026730e-01:2.6499747752940088e+00:3.0102790687195219e-01:3.1507287340245451e+00 + CVs 20 + 1.5196009812280428e-01 3.2298708199319481e-01 -1.5301014278965785e-01 + 2.9078812288718053e-01 6.0403628494587769e-01 -2.6369877796995933e-01 + 4.0087715478940339e-01 8.6413334756728777e-01 -3.8175217070014950e-01 + 4.7049710952705764e-01 1.0997732048956261e+00 -5.1947808618660996e-01 + 5.0947209064827303e-01 1.3043770167855484e+00 -6.5657704378450132e-01 + 5.4286509706488362e-01 1.4946835589077572e+00 -7.8453994880166156e-01 + 6.0095826677561548e-01 1.6826107494146743e+00 -9.0665584425499479e-01 + 7.1912734225813058e-01 1.8601751606751722e+00 -1.0305179580762887e+00 + 9.2394665545835408e-01 2.0109229008795411e+00 -1.1140286683551666e+00 + 1.1461564960851092e+00 2.1024347392794089e+00 -1.0719229191374557e+00 + 1.2914930391750081e+00 2.1303657345647320e+00 -9.1311825931236490e-01 + 1.3566816526062839e+00 2.1230828939597663e+00 -6.8471995452080803e-01 + 1.3406472561723297e+00 2.0838712380351834e+00 -4.2217477920730984e-01 + 1.2011237445817406e+00 1.9718667412486359e+00 -2.2393627129971927e-01 + 9.4070986147366087e-01 1.7560975994566466e+00 -1.8548729223706995e-01 + 6.0672996048417405e-01 1.4180278598622764e+00 -2.5839154090892813e-01 + 2.1967770861412261e-01 9.0497835267846261e-01 -3.1465116768505869e-01 + -2.4933938256605970e-01 2.3991838587631054e-01 -7.7818191495800798e-02 + -2.7150880038704078e-01 2.0498818776110159e-01 1.3354745967412571e-01 + id 12588 + loc 1.3298669457435608e-01 3.4454014897346497e-01 372 + blend 0.0000000000000000e+00 + interp 5.5086611865481694e-01:3.0454857794483636e-01:7.3307523513603345e-01:5.5086060999363040e-01:1.1072445385758423e+00:4.5542418576432703e-01:1.7661091133780673e+00:4.1880393305278912e-01:2.2491129465152229e+00:3.2306756170268286e-01:3.0310125857777956e+00:2.4955732648618836e-01:3.9890594095389682e+00 + CVs 20 + -2.0913420751394665e-01 5.7678169862441953e-01 4.9702281495213174e-01 + -3.9089473656200102e-01 1.1090856275062917e+00 9.2762809201690200e-01 + -5.4387282518643532e-01 1.6075849118244752e+00 1.3176920758360104e+00 + -6.6924162813083166e-01 2.0675813287530840e+00 1.6670445939674954e+00 + -8.4220395813836224e-01 2.5361718961267425e+00 1.9520333058733592e+00 + -1.1728269684436021e+00 3.0245772693538742e+00 2.0385677196784471e+00 + -1.6193147928133658e+00 3.4380058210425917e+00 1.8408104835389287e+00 + -2.0877388334765081e+00 3.6997727927555100e+00 1.3881305977692824e+00 + -2.5228863658873002e+00 3.7744868734119628e+00 7.4481088210603752e-01 + -2.8842890546101816e+00 3.6226723403041401e+00 -6.2479550556424623e-03 + -3.1378139142056392e+00 3.2159850188148553e+00 -7.1511771324564188e-01 + -3.2676972968897884e+00 2.5919864863490765e+00 -1.2045594821863324e+00 + -3.2287825355685924e+00 1.8466463937049358e+00 -1.4084974972235536e+00 + -2.9359580700888963e+00 1.0447763362348974e+00 -1.3453641339134368e+00 + -2.3236953398281881e+00 1.0894564778666305e-01 -1.2856760368697120e+00 + -1.6686558140893968e+00 -6.6119218196714469e-01 -1.8529202668680655e+00 + -1.3059651164299491e+00 -8.5958654355904585e-01 -2.8987244236073115e+00 + -1.2565933607532256e+00 -4.7688856361687226e-01 -3.9476327790495866e+00 + -1.4220870691793499e+00 2.9948424237239868e-01 -4.6333439641082936e+00 + id 12589 + loc 9.0737766027450562e-01 6.5494376420974731e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2286841182896251e-01:3.6366073308995917e-01:1.0240809466524436e-01:3.6236207016862576e-01:8.0084327788755250e-01:2.9027158032566719e-01:1.3120975895458038e+00:3.2621241528395234e-01:2.1113392126172483e+00:3.6800601440878522e-01:2.9515390870633067e+00:4.2286418314484425e-01:3.3717716794647212e+00 + CVs 20 + 1.1845639999010849e-01 5.7508191675050324e-01 3.2669446727652807e-01 + 2.5729946348459687e-01 1.0366355357055705e+00 5.1473949533032348e-01 + 3.9348216601425984e-01 1.4546705194130620e+00 6.6475028888115228e-01 + 5.2591972368093098e-01 1.8471620744686750e+00 7.9887436322851468e-01 + 6.6319144305067712e-01 2.2080683113120285e+00 9.0020729279389067e-01 + 8.1236894398173742e-01 2.5263990356510515e+00 9.3912228587985525e-01 + 9.7431397538078990e-01 2.7798464476889579e+00 8.8099765585737910e-01 + 1.1343132294782041e+00 2.9285536111220747e+00 7.0581451327328459e-01 + 1.2555142375992796e+00 2.9213685756183221e+00 4.3518053623048969e-01 + 1.3045226468111375e+00 2.7590473835799054e+00 1.5421993563634762e-01 + 1.3034474658417439e+00 2.5251021129813678e+00 -7.4869330639745546e-02 + 1.2960082859297448e+00 2.2762840860599161e+00 -2.7240245505707872e-01 + 1.3029134718831663e+00 2.0119424550028793e+00 -4.7018505149506828e-01 + 1.3302859150320447e+00 1.7130099409993140e+00 -6.7666735172474612e-01 + 1.3750922859466996e+00 1.3444147170220777e+00 -8.6721176275632561e-01 + 1.4197015896658385e+00 8.4234383116814904e-01 -9.4805850736297215e-01 + 1.4430643705558688e+00 2.1287215631805456e-01 -7.8126263276783559e-01 + 1.4525207043591288e+00 -3.9660458072235472e-01 -4.7160416488095119e-01 + 1.4739942292533348e+00 -9.2905202189588643e-01 -5.3060876218713826e-01 + id 12590 + loc 8.4861403703689575e-01 9.9735039472579956e-01 1082 + blend 0.0000000000000000e+00 + interp 8.1433614077640537e-01:5.0977804735403538e-02:1.0988183835517145e+00:2.9460285753639759e-01:1.9742754130737035e+00:2.5966186479533471e-01:2.9947320073755832e+00:2.7214879451218682e-01:3.0000304407080245e+00:3.9160069121545465e-01:3.5907414710214547e+00:8.1432799741499762e-01:3.9069915086140590e+00 + CVs 20 + -2.9699895832736824e-02 4.5113879175856253e-01 3.9336174012864772e-01 + -6.2651571701498987e-02 7.7296871966411651e-01 5.4465470269441796e-01 + -1.3593475095018900e-01 1.0497776248351955e+00 6.6176117227000764e-01 + -2.6996826389632728e-01 1.3075139963580245e+00 7.9714558321262308e-01 + -4.7247532989826185e-01 1.5307006346144796e+00 9.3971208238166826e-01 + -7.4273022759599994e-01 1.7025619816753323e+00 1.0771916687604315e+00 + -1.0688083371947756e+00 1.8108635000948357e+00 1.1989969442842920e+00 + -1.4328616213957255e+00 1.8526176950773343e+00 1.3000537638071439e+00 + -1.8195230437286616e+00 1.8324480409276696e+00 1.3807498330445669e+00 + -2.2198907271455588e+00 1.7567840529580097e+00 1.4442076451388333e+00 + -2.6300937387057504e+00 1.6289916776785631e+00 1.4924847031266053e+00 + -3.0462754339008322e+00 1.4505991675355498e+00 1.5251136339282070e+00 + -3.4608954426099747e+00 1.2332160987756859e+00 1.5443974563933596e+00 + -3.8692419569277168e+00 1.0070193464780410e+00 1.5627286370533711e+00 + -4.2760411519128843e+00 8.0264518384569528e-01 1.5986945253735123e+00 + -4.6868130826175820e+00 6.2920246531671797e-01 1.6658842847945068e+00 + -5.0982666786586419e+00 4.8519466617505730e-01 1.7688833948017162e+00 + -5.4972929794004024e+00 3.7541597157927603e-01 1.8946718327482648e+00 + -5.8663392086167141e+00 2.1965553058348647e-01 1.9484700718315227e+00 + id 12591 + loc 8.3957010507583618e-01 4.7193977236747742e-01 1048 + blend 0.0000000000000000e+00 + interp 2.6768572565919097e-01:2.3327635846850014e-01:1.9546229143930394e-01:2.2543169580007230e-01:9.9742704200813648e-01:2.6768304880193439e-01:1.6848782767207471e+00:2.6101082059866398e-01:2.6565984644664389e+00:2.1890747598859797e-01:3.2109472940277861e+00 + CVs 20 + -7.0430135340988478e-02 5.8006451394171898e-01 3.7806202036605585e-01 + -1.8333934968918539e-01 1.1507678531895251e+00 7.6152951483188924e-01 + -3.8046595381775761e-01 1.7062524995904969e+00 1.1139369370243255e+00 + -6.9823966496562750e-01 2.2274198824222591e+00 1.3926764896251085e+00 + -1.1434244777486628e+00 2.6638758640162186e+00 1.5632137346791426e+00 + -1.6737147239142609e+00 2.9605649414895310e+00 1.6291307922151548e+00 + -2.2238856489441678e+00 3.0899518861230031e+00 1.6213870739951977e+00 + -2.7569988533067327e+00 3.0590190274497786e+00 1.5705230019113938e+00 + -3.2823854016613354e+00 2.8688309153915426e+00 1.4845447855818892e+00 + -3.7947803781434706e+00 2.5033893660367834e+00 1.3499775740842619e+00 + -4.2383066670300895e+00 1.9754132280924490e+00 1.1421173990533258e+00 + -4.5435077770429055e+00 1.3443957209204289e+00 8.4512684862430720e-01 + -4.6749273037178201e+00 6.9357158772565264e-01 4.6231195745403314e-01 + -4.6284050392072151e+00 1.1349419607914346e-01 -4.6167100788466198e-03 + -4.4191666928955220e+00 -2.9776682696098400e-01 -5.5736981170550903e-01 + -4.0926990987204785e+00 -4.7074021317394832e-01 -1.1704057795897063e+00 + -3.6847355051900053e+00 -4.0009417268679859e-01 -1.8173023165843918e+00 + -3.1767352814416090e+00 1.6026884347466908e-02 -2.4427527069934789e+00 + -2.9998952952141562e+00 4.4123069231642975e-01 -2.5095739486142654e+00 + id 12592 + loc 1.9454224407672882e-01 2.2706601023674011e-01 417 + blend 0.0000000000000000e+00 + interp 1.1624065885988961e+00:2.9815068050414073e-01:4.7836966256607150e-01:3.0177658564060383e-01:9.9861660097284488e-01:2.4738725211007256e-01:1.3848872105395895e+00:2.4159812072663783e-01:1.9870471841095734e+00:3.0140443169309178e-01:2.3465362141684567e+00:5.1651391739264363e-01:2.6681050333950269e+00:7.2388014882963336e-01:2.9584737956425089e+00:1.1623965885988961e+00:3.0447799060795502e+00 + CVs 20 + -2.4720730555978115e-01 1.4012858139959344e-01 2.7334160145805453e-01 + -3.8248099147997999e-01 2.3572384310162375e-01 4.8036268721118525e-01 + -4.7925811773226679e-01 3.1679413742859852e-01 6.6717694574965958e-01 + -5.7942204875108927e-01 4.0385508564560474e-01 8.6243428152854962e-01 + -6.8534815306331132e-01 4.9574455115509486e-01 1.0635574194514252e+00 + -8.0012295008560375e-01 5.8990881105656312e-01 1.2680586393539663e+00 + -9.2737923685396817e-01 6.8248201532750019e-01 1.4734334022319471e+00 + -1.0707624185683575e+00 7.6871837270544674e-01 1.6765674901218741e+00 + -1.2340933598083881e+00 8.4329526819844935e-01 1.8735514961901982e+00 + -1.4215664678841362e+00 8.9972067395926991e-01 2.0600937778591919e+00 + -1.6349504900484626e+00 9.3084552654721053e-01 2.2314926109985258e+00 + -1.8702875266990966e+00 9.3305750232202767e-01 2.3822250132254688e+00 + -2.1193041048259573e+00 9.0870136505859822e-01 2.5070107172483125e+00 + -2.3714095794195682e+00 8.6333426839037064e-01 2.6031925726868361e+00 + -2.6140577226313062e+00 8.0363818909595852e-01 2.6728628853604119e+00 + -2.8382453948956328e+00 7.3580880136633076e-01 2.7213186230252235e+00 + -3.0431665210819432e+00 6.6340792231488854e-01 2.7519418660028157e+00 + -3.2308937576594809e+00 5.8935911072353364e-01 2.7650975548074497e+00 + -3.3654588473115417e+00 5.4902580211105456e-01 2.7738986375406998e+00 + id 12593 + loc 2.3210090398788452e-01 8.8361513614654541e-01 406 + blend 0.0000000000000000e+00 + interp 5.3189948071868265e-01:3.9890137427451167e-01:4.8472983659166524e-02:5.3189416172387549e-01:7.6372676806827544e-01:3.7364351058832340e-01:1.1587160784071782e+00:2.7563575423534353e-01:2.1533666141035477e+00:3.6734100731095265e-01:3.3667795428479232e+00 + CVs 20 + 3.1268255789903127e-01 3.2085764675636241e-01 -1.7450751405880860e-01 + 4.4525585455155109e-01 5.6108775112693665e-01 -3.3013806054412387e-01 + 5.2708702601106716e-01 7.4332704737120703e-01 -4.6378437627922242e-01 + 6.0948307918803024e-01 9.2039186169105069e-01 -5.9046009884648587e-01 + 6.9116740114524555e-01 1.0886674168637680e+00 -7.0689690235015268e-01 + 7.7450216908704894e-01 1.2424861229325292e+00 -8.0973751469310862e-01 + 8.6740535187323720e-01 1.3738067310018609e+00 -8.9475299017799137e-01 + 9.8849824672963749e-01 1.4662657677605528e+00 -9.5260006806963393e-01 + 1.1717925349791365e+00 1.4740970641145488e+00 -9.5143221159585512e-01 + 1.3975688057048739e+00 1.2802668620542901e+00 -7.9775806634900825e-01 + 1.4256933317453144e+00 9.3853610004426336e-01 -5.1407669925719157e-01 + 1.3415284694875205e+00 7.2392168829665127e-01 -3.2365420747944640e-01 + 1.3069601285816181e+00 5.9125694141523599e-01 -1.9825663877272290e-01 + 1.3312086036236024e+00 4.9199524902696318e-01 -8.0464790559382285e-02 + 1.4189901337524999e+00 4.3302855396834095e-01 5.5893172044802569e-02 + 1.5705842202252049e+00 4.4098717546670546e-01 2.1276298208173020e-01 + 1.7606083389282134e+00 5.2708720933370268e-01 3.6805079924455053e-01 + 1.9517154011569184e+00 6.7035082657749057e-01 5.0128053856032828e-01 + 2.0714726986336873e+00 6.6809810704112571e-01 6.4967846677824004e-01 + id 12594 + loc 8.7927961349487305e-01 8.8497078418731689e-01 411 + blend 0.0000000000000000e+00 + interp 3.7703985665145096e-01:3.1093856048245155e-01:2.9542150085388186e-02:3.7703608625288448e-01:6.9032427661878271e-01:3.4515544694480454e-01:1.3661792563259711e+00:3.3277110981912122e-01:2.0013668256818873e+00:3.4980883091267811e-01:2.6974006409040112e+00:3.3777460079069582e-01:3.5768432912688950e+00 + CVs 20 + 8.6296357029301440e-01 2.9341470798248448e-01 -1.7350865116947289e-01 + 1.4148631374371410e+00 4.3242800924471370e-01 -3.2176814885229976e-01 + 1.8890672775035136e+00 5.0746551464786172e-01 -4.6822122271345035e-01 + 2.3997285504923016e+00 5.6722243216310320e-01 -6.1928094761426744e-01 + 2.9552403725163110e+00 6.0174620970692538e-01 -7.6251137343149367e-01 + 3.5542588316895976e+00 5.9841088433039280e-01 -8.9122903431889355e-01 + 4.1857275957498246e+00 5.4574021051464960e-01 -1.0090815544532303e+00 + 4.8389202698199218e+00 4.3091117621811237e-01 -1.1198989268783783e+00 + 5.5103028516697554e+00 2.3054987377909231e-01 -1.2257643224940968e+00 + 6.1782026216969452e+00 -8.0203568699330763e-02 -1.3315599733965495e+00 + 6.8009749643834070e+00 -5.1568701730343225e-01 -1.4526030392932350e+00 + 7.3344727295159640e+00 -1.0714543469244293e+00 -1.6024742670307979e+00 + 7.7523239082374040e+00 -1.7237490497353585e+00 -1.7766778226127544e+00 + 8.0446674658862527e+00 -2.4346119494753409e+00 -1.9626102130885963e+00 + 8.2097238214342276e+00 -3.1600969979747195e+00 -2.1550931859658098e+00 + 8.2526868905585236e+00 -3.8644124393624031e+00 -2.3491678015901827e+00 + 8.1862274356360416e+00 -4.5223540474844270e+00 -2.5338078369926587e+00 + 8.0394894104987049e+00 -5.1044870681763008e+00 -2.7099041481153026e+00 + 7.9789836249647292e+00 -5.5832317230069970e+00 -2.8970854497417888e+00 + id 12595 + loc 2.3260957002639771e-01 8.1740033626556396e-01 1080 + blend 0.0000000000000000e+00 + interp 4.7216827162101777e-01:4.1099098986116511e-01:4.3441795061184474e-01:2.6159983288788491e-01:9.8371800884927463e-01:3.2879955291956564e-01:1.9206965527628033e+00:4.7216354993830156e-01:2.3820268212450704e+00:3.6278923287577797e-01:3.0010335379178619e+00:4.5065946074809476e-01:3.9312837242781891e+00 + CVs 20 + -1.2455679682152856e-01 3.4620133692417854e-01 1.5639502612619632e-01 + -2.0388229397266941e-01 6.0311020704368390e-01 1.4126371267377980e-01 + -3.2086183319526229e-01 8.4029910722055878e-01 1.0077374742125450e-01 + -4.8624521307923962e-01 1.0597698614692943e+00 6.1152007166591082e-02 + -6.9555407325255902e-01 1.2522122850688295e+00 1.8063097626156654e-02 + -9.4141976520208415e-01 1.4116384889567664e+00 -2.9830954752490424e-02 + -1.2151246821933130e+00 1.5357443658305234e+00 -8.1127129338441684e-02 + -1.5082462209404626e+00 1.6250831166130157e+00 -1.3251381039073196e-01 + -1.8125865057182480e+00 1.6818473403289309e+00 -1.8014178704111938e-01 + -2.1203516206816655e+00 1.7091685579992462e+00 -2.2047171807567179e-01 + -2.4249090972967218e+00 1.7103786864564035e+00 -2.5094432195166216e-01 + -2.7205169651342089e+00 1.6891901979957904e+00 -2.7031328311834835e-01 + -2.9994363575846443e+00 1.6493220058032985e+00 -2.7888397531586628e-01 + -3.2470561474509685e+00 1.5933237217734877e+00 -2.8027648592288917e-01 + -3.4496487129609514e+00 1.5213357896956423e+00 -2.8160054057220202e-01 + -3.6118229172290532e+00 1.4268502780475378e+00 -2.8947943413721011e-01 + -3.7531963446952386e+00 1.3039823865931730e+00 -3.0547298668924572e-01 + -3.8878528336348372e+00 1.1542585966023899e+00 -3.2662282761269246e-01 + -3.9984661623922362e+00 1.0263043137012520e+00 -3.1315794662873264e-01 + id 12596 + loc 9.3089610338211060e-01 5.9581693261861801e-02 397 + blend 0.0000000000000000e+00 + interp 3.5595772328531805e-01:3.3368050440796282e-01:1.6941049928523566e-01:3.5595416370808519e-01:6.8177215190573393e-01:2.1373096872775268e-01:1.3026873400994827e+00:2.5821913449976946e-01:2.1779877071388518e+00:2.7602763331300356e-01:3.0139445532142450e+00:2.6019457136472551e-01:3.7946203922358812e+00 + CVs 20 + -1.1727170015388892e+00 2.9991594479291783e-01 3.6868309246640107e-01 + -1.9958469526069840e+00 3.8836928422068956e-01 6.8270080560352531e-01 + -2.7163002795529207e+00 3.9572570642644384e-01 9.8590578233539616e-01 + -3.4383900120548025e+00 3.5625602047808252e-01 1.3078471945956269e+00 + -4.1350914770699747e+00 2.6402629035020458e-01 1.6444410572998016e+00 + -4.7858685577174613e+00 1.1983223889699779e-01 1.9949128782745356e+00 + -5.3817450300373153e+00 -7.6542995901129340e-02 2.3591012641761684e+00 + -5.9144481074993642e+00 -3.3137367168575249e-01 2.7284997962109081e+00 + -6.3621474603197035e+00 -6.4579498826520598e-01 3.0863927442379833e+00 + -6.7047308164240178e+00 -1.0081662284216435e+00 3.4217849869020753e+00 + -6.9349126469507745e+00 -1.3930312357900276e+00 3.7249176548568617e+00 + -7.0661210472041347e+00 -1.7751554618413736e+00 3.9883514787370604e+00 + -7.1249762693184886e+00 -2.1434792676572041e+00 4.2115289655135673e+00 + -7.1373311778337127e+00 -2.4986290394696171e+00 4.3979958813702300e+00 + -7.1233355936270417e+00 -2.8460059010369045e+00 4.5522275391691025e+00 + -7.0960756714783235e+00 -3.1928126977453384e+00 4.6829450457128354e+00 + -7.0590453972105127e+00 -3.5446363499171145e+00 4.8008282486864289e+00 + -7.0050323932847522e+00 -3.9049006352490547e+00 4.9075650865553122e+00 + -6.8754620209211517e+00 -4.3105430637050475e+00 4.9754800420958958e+00 + id 12597 + loc 5.4340386390686035e-01 2.3983910679817200e-01 413 + blend 0.0000000000000000e+00 + interp 1.2465811141269358e+00:1.2465711141269358e+00:8.2478872082224419e-01:8.3801130552030700e-01:9.4546614257853479e-01:4.0532632615510822e-01:1.0034358752485930e+00:3.6756890658133140e-01:1.7638380366394077e+00:2.7382072473352614e-01:2.7636725971739509e+00:5.3881859277971911e-01:2.9473691496100534e+00 + CVs 20 + -1.2035282028136216e+00 2.6840858190896416e-01 1.4734763576283799e-01 + -1.9988416238856008e+00 3.5101935423753805e-01 3.0184474610238676e-01 + -2.6965690178140655e+00 3.6063289541144955e-01 4.5572187557960042e-01 + -3.4231189956183119e+00 3.3551909517905704e-01 6.0184689229489408e-01 + -4.1706333963448872e+00 2.7288606529529635e-01 7.1593895393325924e-01 + -4.9252099915590062e+00 1.7174367220508113e-01 7.8047504695970860e-01 + -5.6736892097341576e+00 2.8436763522755371e-02 7.9216927109329160e-01 + -6.4067963864162927e+00 -1.6890609342364804e-01 7.6628323152463895e-01 + -7.1101643047668270e+00 -4.3435482496255462e-01 7.1835283490378010e-01 + -7.7620531969963418e+00 -7.7616580908984756e-01 6.5670479118021896e-01 + -8.3422670753270793e+00 -1.1957582974456398e+00 5.9397017423845755e-01 + -8.8389637251392159e+00 -1.6842501590736325e+00 5.3478637414969221e-01 + -9.2472405786431207e+00 -2.2215339147218955e+00 4.7709365539881499e-01 + -9.5666926206398557e+00 -2.7824573280085199e+00 4.2335443187536098e-01 + -9.8018329652287619e+00 -3.3481166490200831e+00 3.8128044677004674e-01 + -9.9596258681762198e+00 -3.9101806261544736e+00 3.5699261971866808e-01 + -1.0047208268635236e+01 -4.4587591966872555e+00 3.5372962845978273e-01 + -1.0077647587352166e+01 -4.9648691631938160e+00 3.7474845986913213e-01 + -1.0093233499199346e+01 -5.3003217996966532e+00 4.2215968595448777e-01 + id 12598 + loc 2.9040476679801941e-01 4.3178316950798035e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4800414385615955e-01:2.7564302281683789e-01:9.2099568621460737e-02:2.6226260070056501e-01:1.1650793269352528e+00:4.4430024474061791e-01:1.9624370896495877e+00:3.8899847979641711e-01:2.2156452320043707e+00:4.4799966381472101e-01:2.9929508133286866e+00:2.7761845493906073e-01:3.3375729725051917e+00 + CVs 20 + 7.6910520009574421e-02 3.3965834243136855e-01 -1.0166769202673187e-01 + 1.0925655232639667e-01 6.4763316605567867e-01 -2.2120544192527053e-01 + 1.1882685790752751e-01 9.4927718276102402e-01 -3.5287650481038585e-01 + 1.0809194582548531e-01 1.2531179275864650e+00 -4.9563976191360509e-01 + 6.0457721091669914e-02 1.5521540340995883e+00 -6.5183643639978484e-01 + -4.3893079215203579e-02 1.8357699560728422e+00 -8.2188888572336516e-01 + -2.2572248705877607e-01 2.0853315154419869e+00 -1.0009175733368041e+00 + -4.9803392718898165e-01 2.2716024466294731e+00 -1.1742869826952251e+00 + -8.5219413694767576e-01 2.3592497357606343e+00 -1.3155196054440172e+00 + -1.2493215660892474e+00 2.3244923047219350e+00 -1.3956862483375818e+00 + -1.6320813215036329e+00 2.1735122232457149e+00 -1.4001732935612488e+00 + -1.9503241365928541e+00 1.9447223255368178e+00 -1.3391466202649367e+00 + -2.1839366351573930e+00 1.6887154653498524e+00 -1.2431526122825176e+00 + -2.3272858899005673e+00 1.4620842050045735e+00 -1.1523718465148294e+00 + -2.3486851836803306e+00 1.3267987856275922e+00 -1.1083529698020731e+00 + -2.1849703747904559e+00 1.2390385949738081e+00 -1.1201625470150123e+00 + -1.8900381646329103e+00 9.5819238348308611e-01 -1.1145099345070988e+00 + -1.8640778832848262e+00 4.0314751275071692e-01 -9.7902274856543270e-01 + -1.8673155783200428e+00 5.2105218096643868e-01 -1.0114089742008243e+00 + id 12599 + loc 5.5907303094863892e-01 5.7330775260925293e-01 409 + blend 0.0000000000000000e+00 + interp 3.8801455505032845e-01:3.1443637299208022e-01:1.6434628460347511e-01:3.3718705681417471e-01:1.0072378172041074e+00:3.7423515776137894e-01:1.6729107619463979e+00:3.1939135589030127e-01:2.2416615630276513e+00:3.8801067490477797e-01:3.0001249245672454e+00:3.7389511392033520e-01:3.5691550389109201e+00 + CVs 20 + 3.8813053286783772e-01 1.2139322899271296e-01 -1.0561927256882100e-01 + 7.4730360235740612e-01 2.1324897764457218e-01 -2.3073182492326649e-01 + 1.1121917384682143e+00 2.9142181151597085e-01 -3.4829639354998665e-01 + 1.4953784816132507e+00 3.5845987040162974e-01 -4.4889320370509445e-01 + 1.8901169151351023e+00 4.0683442574271222e-01 -5.3501245867977243e-01 + 2.2903133755761571e+00 4.3004798404333078e-01 -6.0811466691182436e-01 + 2.6896869193507920e+00 4.2082084813746534e-01 -6.6787833212526948e-01 + 3.0794572207015429e+00 3.6822420496536545e-01 -7.1332677470586703e-01 + 3.4475175463417425e+00 2.6071864637783526e-01 -7.4607736509672840e-01 + 3.7758505603860302e+00 9.1364941971984859e-02 -7.7299441160741456e-01 + 4.0386363173424904e+00 -1.3798232318441306e-01 -8.0362471108667810e-01 + 4.2166925966790068e+00 -4.1249275541585062e-01 -8.4407471159232939e-01 + 4.3143107929530249e+00 -7.1170548424014890e-01 -8.9477769434631849e-01 + 4.3470857716384925e+00 -1.0212288277822850e+00 -9.5403760712827623e-01 + 4.3252656361320039e+00 -1.3310110624607909e+00 -1.0196264176394454e+00 + 4.2529119708212022e+00 -1.6309011538663654e+00 -1.0847495058925083e+00 + 4.1373488501665223e+00 -1.9141890698906299e+00 -1.1385228541147985e+00 + 3.9981305948689547e+00 -2.1860529303097112e+00 -1.1817763217568558e+00 + 4.0021316808177829e+00 -2.5973753172026020e+00 -1.2678730247950107e+00 + id 12600 + loc 8.0196481943130493e-01 8.6169868707656860e-02 1068 + blend 0.0000000000000000e+00 + interp 5.5148207888320377e-01:2.7409371173985358e-01:4.1386022452332649e-01:3.0341720127449534e-01:1.0640293332958359e+00:3.8540685521325252e-01:1.9389268432021498e+00:5.5147656406241496e-01:2.5441832652724674e+00:4.1024768189766153e-01:3.0043625746808424e+00:3.8933512241823265e-01:3.7978429465863610e+00 + CVs 20 + -4.9542082267666210e-03 5.4445567562928110e-01 1.0543488532817009e-01 + -6.0828356735129374e-02 1.0774993741714667e+00 1.9940736979774934e-01 + -1.7969636038236136e-01 1.5915389056166851e+00 2.6210401816282480e-01 + -3.8829133079568190e-01 2.0727320632424604e+00 2.9159532996969345e-01 + -7.0337172603675280e-01 2.4901200944207629e+00 2.9566707913845636e-01 + -1.1180260716500054e+00 2.8135098201650357e+00 2.9837045803677043e-01 + -1.6030971624705326e+00 3.0215085615693114e+00 3.3505332267228433e-01 + -2.1060585726698542e+00 3.1094385457692484e+00 4.3693753935012303e-01 + -2.6020350401625816e+00 3.0692182531144168e+00 6.4702268407261476e-01 + -3.0751492893836949e+00 2.7573192940374076e+00 1.0557576440615539e+00 + -3.2528980199905897e+00 2.1014426533709694e+00 1.5076260183715415e+00 + -3.1391853192027064e+00 1.4951206819948428e+00 1.7316988256216963e+00 + -2.8929196411001947e+00 9.7490633113556169e-01 1.8139635219558088e+00 + -2.5627230967348518e+00 5.3095801235206297e-01 1.7822681757526437e+00 + -2.2609512113845662e+00 2.0908528372514606e-01 1.6538224710459255e+00 + -2.0660496463584410e+00 5.1634542969870162e-03 1.4762879877705108e+00 + -1.9902264112260670e+00 -1.0138733702718133e-01 1.3065459714253627e+00 + -2.0519390653387037e+00 -8.6632721640825666e-02 1.2116340276177886e+00 + -2.0223246086133928e+00 -2.0992528514129782e-01 1.1252927573095821e+00 + id 12601 + loc 5.1622253656387329e-01 8.3853340148925781e-01 403 + blend 0.0000000000000000e+00 + interp 5.0151113606969933e-01:4.5601156998378733e-01:8.1492920893400100e-04:5.0150612095833869e-01:5.2371996361535922e-01:3.1254876746975258e-01:9.8876682738815957e-01:4.4882589205879614e-01:1.3670844424972024e+00:4.6091229875558998e-01:2.0003977811040983e+00:4.9072824582971442e-01:2.5747511830240684e+00:3.8100406736465003e-01:2.9970277602398427e+00:3.0338266487442417e-01:3.5525782002311801e+00 + CVs 20 + -4.7197261126389611e-02 6.2089476251313738e-02 -7.2375495833710071e-02 + -9.9963138842249888e-02 1.2378368000661408e-01 -1.4750706100411870e-01 + -1.6726401986428499e-01 1.7838040755139875e-01 -2.2479894392506192e-01 + -2.5023123433571487e-01 2.2025774309917506e-01 -3.0257435437927144e-01 + -3.4758999937140478e-01 2.4676618726386873e-01 -3.7922618497351746e-01 + -4.5939421131699332e-01 2.5880619087857304e-01 -4.5186538631527157e-01 + -5.8765847152505857e-01 2.5967185255279940e-01 -5.1569303862622384e-01 + -7.3388510668923190e-01 2.5082158344377831e-01 -5.6465446602195257e-01 + -8.9693313906083205e-01 2.3138130046366306e-01 -5.9257394521467266e-01 + -1.0736855883360275e+00 1.9996924286067908e-01 -5.9340454837686141e-01 + -1.2605040779994179e+00 1.5672508709595723e-01 -5.6008932841399595e-01 + -1.4529568506037465e+00 1.0340941884003862e-01 -4.8322393394025842e-01 + -1.6430497386221141e+00 4.2200795993658780e-02 -3.5132702900511459e-01 + -1.8146576392135536e+00 -2.6820942212285370e-02 -1.5412784491113846e-01 + -1.9416317610552514e+00 -1.0909943102407316e-01 1.0850010236477982e-01 + -1.9972763802069324e+00 -2.1413890446991679e-01 4.1632936633949486e-01 + -1.9712156439185291e+00 -3.4711066202300667e-01 7.3499134351757678e-01 + -1.8690604143711218e+00 -5.0230233459180085e-01 1.0389259576747714e+00 + -1.8760718812187069e+00 -6.2825501486997426e-01 1.2598988715003676e+00 + id 12602 + loc 1.7137619853019714e-01 8.6085271835327148e-01 1085 + blend 0.0000000000000000e+00 + interp 4.0905513602880200e-01:2.2497030327614312e-01:2.5795359343846358e-02:2.8601092101900016e-01:9.9960948625426371e-01:2.8006594478410035e-01:1.6458552432926976e+00:4.0905104547744175e-01:2.0160104932512293e+00:2.5425756143651673e-01:2.8520668697038545e+00:2.6772251860311264e-01:3.3232387346455599e+00 + CVs 20 + -1.2918376576578008e-01 3.4566145321709302e-01 4.0499860643129870e-01 + -2.5865974723291363e-01 5.9750847759559111e-01 6.8459300675727541e-01 + -3.7809080427522646e-01 8.1965909358209987e-01 9.1509724839814821e-01 + -4.7720597608058152e-01 1.0422620648560668e+00 1.1337882719615120e+00 + -5.6320813565971739e-01 1.2736665791557207e+00 1.3418642137124761e+00 + -6.5189884814842847e-01 1.5255920384301636e+00 1.5449474622955559e+00 + -7.7493528073149043e-01 1.8126133560425788e+00 1.7447621784015568e+00 + -9.8000758493954943e-01 2.1406463409875673e+00 1.9177628818339665e+00 + -1.2941439293270827e+00 2.4822149468994872e+00 2.0019095824559026e+00 + -1.6669982968635377e+00 2.7748380235399708e+00 1.9397244570994208e+00 + -2.0278847149185126e+00 2.9821775067784886e+00 1.7408427449349639e+00 + -2.3634182452938530e+00 3.0992770985957003e+00 1.4390362351253525e+00 + -2.6801704642458613e+00 3.1170005660840294e+00 1.0559285158730480e+00 + -2.9784748748914365e+00 3.0157620162003163e+00 6.0077743335426859e-01 + -3.2599534578676046e+00 2.7609426443496723e+00 1.1132180838643113e-01 + -3.4970810057098745e+00 2.3638250132606990e+00 -3.1433678027232925e-01 + -3.6452398531591967e+00 1.8954073988216382e+00 -6.3433500682967003e-01 + -3.7525774329015720e+00 1.3984717881538677e+00 -8.2665569195172384e-01 + -4.0413909270302844e+00 1.0776137842056865e+00 -7.2109200434149734e-01 + id 12603 + loc 6.4976608753204346e-01 1.7744356393814087e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7905863772377529e-01:3.7905484713739807e-01:4.7625057776391444e-01:2.6068160697109699e-01:1.0768719107622613e+00:3.5700217810929014e-01:1.9461520442660039e+00:3.4973155118344046e-01:2.3418551862015424e+00:2.7353758316342086e-01:3.0233261648049119e+00:3.1387924503197390e-01:3.9927239347875010e+00 + CVs 20 + -2.0464390606572525e-01 4.3510371773143852e-01 1.5635419099692693e-01 + -4.0074186835529568e-01 8.7236588371304813e-01 3.4783691668641997e-01 + -5.8614842012209523e-01 1.2969821060312756e+00 5.9200677660569845e-01 + -7.4761538629420143e-01 1.6930994441627107e+00 8.9977879969154140e-01 + -8.8811937508334760e-01 2.0487860361474644e+00 1.2758054613915528e+00 + -1.0442982208329978e+00 2.3554590497237040e+00 1.7174006627164362e+00 + -1.2589611197776618e+00 2.6019859294727832e+00 2.2079671734207187e+00 + -1.5546015797934958e+00 2.7743635046885409e+00 2.7210911947529102e+00 + -1.9368963593972786e+00 2.8517837386359739e+00 3.2343994299416168e+00 + -2.3927587714926006e+00 2.7988691706048225e+00 3.7306219987016092e+00 + -2.8693852465931924e+00 2.5652203413920698e+00 4.1966042880032273e+00 + -3.2517729729666138e+00 2.0886309275289752e+00 4.6161917002323571e+00 + -3.3823036375294606e+00 1.3932147395873169e+00 4.9263108176350752e+00 + -3.2437708306831263e+00 6.7501395938994047e-01 5.0767960959852303e+00 + -2.9191397690776606e+00 6.3833889439332214e-02 5.1127546881519192e+00 + -2.3569863228790848e+00 -3.0229500568254219e-01 5.0945443324176516e+00 + -1.6501045927721512e+00 -6.1100836333800146e-02 5.0948351121249607e+00 + -1.3117463382907268e+00 4.7387330822749740e-01 5.1599284116890454e+00 + -9.7450046684171421e-01 6.3860653647903620e-01 5.2160776395182920e+00 + id 12604 + loc 4.1511014103889465e-01 1.5474313497543335e-01 1075 + blend 0.0000000000000000e+00 + interp 3.4494110796507343e-01:3.4493765855399378e-01:3.3505182814010825e-01:2.5326072463791488e-01:1.0228724730545953e+00:2.7918325612961026e-01:1.8309789015217297e+00:2.5066310845329459e-01:2.4065998361138661e+00:2.5513851979978253e-01:3.8661656847757335e+00 + CVs 20 + -2.2267076597804353e-01 2.5312954921112701e-01 -6.5635096897754958e-03 + -4.2550554830136617e-01 5.2509789925102179e-01 1.5048031028395109e-02 + -6.0511812167198853e-01 8.0595015841406092e-01 5.3445426651725136e-02 + -7.6801239243892372e-01 1.0905940974344066e+00 9.6837664362108500e-02 + -9.2710591999873493e-01 1.3795202316706310e+00 1.3436507015819843e-01 + -1.0910004124434816e+00 1.6765994602930341e+00 1.5267048569946595e-01 + -1.2718340749780712e+00 1.9856314936953252e+00 1.3586270564469560e-01 + -1.4940453506731113e+00 2.2997411496911422e+00 7.1282711825470191e-02 + -1.7688127513678165e+00 2.5867942399404646e+00 -6.5699978349451849e-02 + -2.0579672647188145e+00 2.7973344052067173e+00 -3.0265636747012992e-01 + -2.3042802745097530e+00 2.9176423011184482e+00 -6.4530988848300552e-01 + -2.4767747402344726e+00 2.9559835578096911e+00 -1.1017166514293693e+00 + -2.5831286811382181e+00 2.8740145159205621e+00 -1.6398253787007606e+00 + -2.6541191650019549e+00 2.6539397508338878e+00 -2.0935731491794733e+00 + -2.7067801550472712e+00 2.4042724886909377e+00 -2.3217572491735039e+00 + -2.7317366262626739e+00 2.2086618411072347e+00 -2.3167762725964787e+00 + -2.7064252323007509e+00 2.0354047557897657e+00 -2.1225267822053837e+00 + -2.5922826804658863e+00 1.8359894979155071e+00 -1.9432651790036348e+00 + -2.2849980890235240e+00 1.8177676402039231e+00 -2.2882143440128031e+00 + id 12605 + loc 2.1003286540508270e-01 4.2511320114135742e-01 1084 + blend 0.0000000000000000e+00 + interp 3.7091926219966731e-01:3.7091555300704532e-01:6.7588528260353886e-03:3.0532019848757030e-01:7.4068531740109966e-01:2.7441839899430509e-01:1.2988303989490211e+00:3.0262349019916751e-01:2.0073685052029506e+00:3.2814236262159424e-01:2.7086707146929991e+00:2.5446802505892763e-01:3.2787621111231107e+00 + CVs 20 + 2.1827431745866985e-01 3.5394099384008315e-01 3.4357645082145216e-01 + 3.5623275137086524e-01 6.4538317219583718e-01 6.4891870358025716e-01 + 4.9290750759540419e-01 9.1749261570371554e-01 9.3027813416802740e-01 + 6.5778618347803808e-01 1.1739579007452048e+00 1.1771492010997187e+00 + 8.4192952885574823e-01 1.4073051335518121e+00 1.3991924802706059e+00 + 1.0327483865141489e+00 1.6167017372813339e+00 1.6166580881523713e+00 + 1.2111452445375133e+00 1.7981094663245138e+00 1.8448081857646095e+00 + 1.3554851211550409e+00 1.9412787686077060e+00 2.0764886559691891e+00 + 1.4442190472760434e+00 2.0394272024833913e+00 2.2940062791414961e+00 + 1.4371910817332416e+00 2.0858036177361070e+00 2.5021856804246818e+00 + 1.3051900561463636e+00 2.0508949773894809e+00 2.6914557756311481e+00 + 1.0977007815182369e+00 1.8882412748946926e+00 2.8351657489826887e+00 + 9.1998328871976176e-01 1.5646248927172912e+00 2.9365153510998825e+00 + 8.0778961779594805e-01 1.1006759320673207e+00 3.0057879208818772e+00 + 6.6666252174320206e-01 5.3595712336332624e-01 3.0086939969059339e+00 + 3.6479024576086932e-01 -4.3750500662526726e-02 2.8864712332697393e+00 + -2.0334184367441527e-01 -4.7354755323344044e-01 2.6406502887381946e+00 + -9.9077479702923454e-01 -5.7863988370661867e-01 2.3622602853185271e+00 + -1.4116148216687974e+00 -8.9573685547939130e-01 2.2084206540533602e+00 + id 12606 + loc 3.9182651042938232e-01 7.1811401844024658e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6603829041712619e-01:4.6076008833269272e-01:1.2861061125959716e-01:4.6603363003422205e-01:9.3089222256024018e-01:3.6594637725419643e-01:1.6800369068297556e+00:4.5365144611738939e-01:2.4160169055122465e+00:4.0788334265430809e-01:3.0000434490974146e+00:4.4101632861333612e-01:3.6436362981160606e+00 + CVs 20 + -1.4712038716650630e-01 1.3189536879272651e-01 2.4296043728872896e-01 + -2.3919390801060073e-01 1.7764048051992298e-01 3.5022360586778556e-01 + -3.1555689158685979e-01 1.9193188548136580e-01 4.0253761814685490e-01 + -3.9483028923836666e-01 1.9999265178678222e-01 4.5344817297025591e-01 + -4.7411815301124383e-01 2.0147764341661911e-01 5.0007575802520099e-01 + -5.5017682932454293e-01 1.9661788669935967e-01 5.4035951917464109e-01 + -6.2105492721781452e-01 1.8670014239184279e-01 5.7387098166521400e-01 + -6.8663545973555939e-01 1.7358707748463453e-01 6.0114534426835708e-01 + -7.4927184980678663e-01 1.5860930052943847e-01 6.2309480786024429e-01 + -8.1460039821593488e-01 1.4139144571001572e-01 6.4059467779089552e-01 + -8.9085946075547573e-01 1.1941642345799425e-01 6.5392425490154305e-01 + -9.8690176572247668e-01 8.8730836365743387e-02 6.6277616822628027e-01 + -1.1093025793064508e+00 4.5683095273639729e-02 6.6765455693397868e-01 + -1.2599723483295506e+00 -1.1531360583005468e-02 6.7159775026416380e-01 + -1.4374463504441215e+00 -8.3219034074689502e-02 6.7873002809098637e-01 + -1.6399448401469161e+00 -1.6937075048878264e-01 6.9152294274999182e-01 + -1.8652707606949954e+00 -2.6962646720753086e-01 7.1179551270264141e-01 + -2.1074454124267250e+00 -3.8131770734524861e-01 7.4248799610291061e-01 + -2.3577414818758835e+00 -5.0405002817295830e-01 7.8882945530696325e-01 + id 12607 + loc 6.8617230653762817e-01 3.9194309711456299e-01 411 + blend 0.0000000000000000e+00 + interp 4.2429398562889847e-01:3.2371923326816071e-01:5.6794662034597931e-01:4.2428974268904218e-01:1.2094915800778829e+00:3.7373188944325864e-01:1.9317233051443532e+00:3.2805335461902085e-01:2.4770693022241446e+00:3.5760925935441074e-01:3.1352644949974167e+00:2.6718593626835224e-01:3.9721633023333185e+00 + CVs 20 + -6.4710049112338841e-01 1.1030327080384802e-01 1.9022196391071453e-01 + -1.1069963254572408e+00 1.1808784734417593e-01 3.4832380514084849e-01 + -1.5361992111863059e+00 8.9534652887913346e-02 4.8174889805965948e-01 + -1.9878297121917026e+00 5.5953479716630339e-02 5.8070938271825345e-01 + -2.4533919154185688e+00 1.2772648877868886e-02 6.3534629237317630e-01 + -2.9227264474816077e+00 -4.4095805024284118e-02 6.4237787979112682e-01 + -3.3840269651720010e+00 -1.1691856664010625e-01 6.0551896352905521e-01 + -3.8251522094725132e+00 -2.0836336853450099e-01 5.3065605530444016e-01 + -4.2380018990479771e+00 -3.2320768575887771e-01 4.2196391644017950e-01 + -4.6177057225861002e+00 -4.6716182813041751e-01 2.8801979411888967e-01 + -4.9555430580932418e+00 -6.4555347111552353e-01 1.5116737637425759e-01 + -5.2390680460110577e+00 -8.5870049425704642e-01 3.2585730540577229e-02 + -5.4610988036459274e+00 -1.1012929060293026e+00 -5.7752345015354867e-02 + -5.6217470370843854e+00 -1.3649911753512209e+00 -1.1692114541141141e-01 + -5.7210099191757475e+00 -1.6340337707205346e+00 -1.4159476020702055e-01 + -5.7588624461601867e+00 -1.8816373980906507e+00 -1.2780894265101783e-01 + -5.7420696354354170e+00 -2.0887696326792087e+00 -7.5387311366517551e-02 + -5.6784624137493509e+00 -2.2721727575331423e+00 7.7289848839258157e-03 + -5.5148281525946317e+00 -2.5737401339503432e+00 1.2327638629560134e-01 + id 12608 + loc 6.1927968263626099e-01 7.9352152347564697e-01 263 + blend 0.0000000000000000e+00 + interp 1.8551839975177673e+00:3.7892077660694912e-01:1.0574097743692714e+00:1.1327975303363851e+00:1.0774840212864141e+00:3.9181236712537260e-01:1.9838803341867135e+00:4.0231509503108687e-01:2.5720885070268493e+00:1.8551739975177672e+00:3.0115321119828389e+00:8.5833086803502978e-01:3.0434809460892374e+00 + CVs 20 + -7.7583724762747786e-01 4.6187016416744248e-01 -1.5818251955857027e-01 + -1.4475617128667011e+00 8.2390239563151491e-01 -2.2623719639154843e-01 + -2.1516638752232558e+00 1.1030312672950755e+00 -2.5174123141995963e-01 + -2.8841794750532590e+00 1.3370741696757638e+00 -3.1651557031883260e-01 + -3.5364138092835313e+00 1.5682733178087385e+00 -5.6343166143687196e-01 + -3.9284592935335985e+00 1.7897109929509945e+00 -1.1125213417277833e+00 + -3.9071383414282463e+00 1.9205990706366762e+00 -1.8475912623755639e+00 + -3.5239672001097198e+00 1.9150881317863200e+00 -2.5793887654625736e+00 + -2.8792509667484603e+00 1.7494992662259761e+00 -3.2115828152401420e+00 + -2.0865818799558413e+00 1.4055499205150288e+00 -3.6554614647490289e+00 + -1.2908497810801487e+00 9.2159256436344483e-01 -3.8379964665360373e+00 + -6.1936383962363539e-01 4.1225445196695387e-01 -3.7518168697402841e+00 + -1.2617246339453658e-01 -1.2056401414258067e-02 -3.4640299790998816e+00 + 2.6425318865465086e-01 -3.4857045615878124e-01 -3.0636239422322120e+00 + 8.6350260099872633e-01 -6.1885319487389223e-01 -2.6544482879030062e+00 + 1.8675730570715714e+00 -6.4079274940681463e-01 -2.4303516716955822e+00 + 3.0515704520453637e+00 -2.9282217220457174e-01 -2.5653607825038085e+00 + 4.0486583128115976e+00 3.2122077342203625e-01 -3.0506888950380331e+00 + 4.7216391412418197e+00 9.2528965780147465e-01 -3.5739672240610072e+00 + id 12609 + loc 3.5810786485671997e-01 1.9493657350540161e-01 413 + blend 0.0000000000000000e+00 + interp 2.3589885685731127e+00:2.8532141891506385e-01:1.0508764525907210e-04:4.3418088692082102e-01:4.5252033640304690e-01:3.3526725403358593e-01:1.0118361078291547e+00:7.4332155019109269e-01:1.7606755239002223e+00:2.1024658300404622e+00:1.9880965644436954e+00:2.3589785685731126e+00:1.9951139430376772e+00:1.7776008241399375e+00:3.8523424780417201e+00:5.3881859277971911e-01:3.9366207277842107e+00 + CVs 20 + -1.2550471236198144e-01 2.2425747591493031e-01 -1.1311899441025202e+00 + -2.4159415617273250e-01 2.8324111452262657e-01 -1.9195551588063795e+00 + -3.2494999225856253e-01 2.6453787115383143e-01 -2.6327182911979077e+00 + -3.6381560669489688e-01 2.0192908648551905e-01 -3.3846538995587623e+00 + -3.5434308106077517e-01 8.6746610259495149e-02 -4.1461208520459847e+00 + -3.0713532423988199e-01 -8.5614917950406544e-02 -4.8876528649662774e+00 + -2.3924034153998530e-01 -3.1608778133092497e-01 -5.5862726233027287e+00 + -1.6380753481624485e-01 -6.0482795647294862e-01 -6.2249539497799908e+00 + -9.1358027678876325e-02 -9.5297411619193628e-01 -6.7868536357722054e+00 + -3.3639875875874622e-02 -1.3584389430400283e+00 -7.2520098586265398e+00 + 5.6006411518816843e-03 -1.8101139068374701e+00 -7.6073598975949386e+00 + 4.0675465386159342e-02 -2.2913925356368603e+00 -7.8563546893457330e+00 + 9.3474186788760669e-02 -2.7865344917959800e+00 -8.0140149131239049e+00 + 1.7585079946994234e-01 -3.2766787644250259e+00 -8.0933355881815068e+00 + 2.8923391072735716e-01 -3.7442346438181948e+00 -8.1067217440635559e+00 + 4.3218100155627548e-01 -4.1794085919521846e+00 -8.0668809679530256e+00 + 6.0185661005613500e-01 -4.5781339202816431e+00 -7.9854296063343435e+00 + 7.8921331222167668e-01 -4.9452698219714213e+00 -7.8760926531200486e+00 + 9.9859017870069211e-01 -5.3639056075429030e+00 -7.8006972289046228e+00 + id 12610 + loc 8.4446662664413452e-01 3.5763898491859436e-01 409 + blend 0.0000000000000000e+00 + interp 4.2754345547046430e-01:3.0233149506636653e-01:4.8248588240546075e-01:4.2753918003590963e-01:1.3907711472440061e+00:3.5696914141335945e-01:1.9889513863387953e+00:3.0844794976487921e-01:3.0089770488862468e+00:3.2739653748550274e-01:3.9150011282440795e+00 + CVs 20 + -3.0010844642907558e-01 8.9353913370435578e-02 1.7495408907077670e-01 + -5.9511864980794893e-01 1.6801599939892406e-01 3.4047324675361129e-01 + -9.0420230333805018e-01 2.4616140736775605e-01 4.8954789736016158e-01 + -1.2323827078773906e+00 3.2431997728305312e-01 6.1770409477256538e-01 + -1.5764163218520246e+00 3.9684673241353430e-01 7.2536854670047179e-01 + -1.9326050656503266e+00 4.5904247748976468e-01 8.1432746235415354e-01 + -2.2952081983438419e+00 5.0539783002098593e-01 8.8536006692102487e-01 + -2.6580607132098337e+00 5.2591732700081684e-01 9.3779925333003900e-01 + -3.0184518477003852e+00 5.0769850521509241e-01 9.7393944400291588e-01 + -3.3723400782117370e+00 4.3707050297642236e-01 1.0032220225869763e+00 + -3.7092154807349136e+00 3.0179514625603332e-01 1.0376505097962512e+00 + -4.0196554506693172e+00 9.7698848661363691e-02 1.0839187169067457e+00 + -4.3031642624755353e+00 -1.7256168284433437e-01 1.1457449006509353e+00 + -4.5591058544809577e+00 -5.0579766222396705e-01 1.2284328221235192e+00 + -4.7770251179751151e+00 -8.9531654817371153e-01 1.3313584958934577e+00 + -4.9424769727686950e+00 -1.3271872299323970e+00 1.4374697788271154e+00 + -5.0558391057667205e+00 -1.7871817214946106e+00 1.5283287512111932e+00 + -5.1489408815567552e+00 -2.2688033637524176e+00 1.6164501176551453e+00 + -5.3447887006265526e+00 -2.7567757190717819e+00 1.7652670842165126e+00 + id 12611 + loc 1.7532850801944733e-01 9.9919426441192627e-01 417 + blend 0.0000000000000000e+00 + interp 4.0204431734416346e-01:3.0458156320929219e-01:5.0607781290899223e-01:3.5481378420204673e-01:1.1772150134255452e+00:4.0204029690099002e-01:1.8508287531997187e+00:2.1953742752748426e-01:2.1667852473761355e+00:3.6908429722018482e-01:3.4045778631743828e+00 + CVs 20 + -8.9235406609830106e-02 1.4418282943014576e-01 -5.5966018044613423e-02 + -1.6090725856530524e-01 2.3974844708802950e-01 -6.2999548053555579e-02 + -2.0790166484317685e-01 3.1567116764538516e-01 -3.4069631045275051e-02 + -2.5345312367095651e-01 3.9337238163107435e-01 -4.2418862964236914e-03 + -2.9788493607638927e-01 4.7408820407361441e-01 2.3036434627763003e-02 + -3.4076530111469644e-01 5.5690030043631111e-01 4.5078815933471628e-02 + -3.8244584501313050e-01 6.3931570369716284e-01 5.9235665113065605e-02 + -4.2499471641130282e-01 7.1657497429136441e-01 6.2894248195380420e-02 + -4.6936741975143964e-01 7.8480639037286615e-01 5.5416222987131947e-02 + -5.0948796119997575e-01 8.4559442162723053e-01 3.9639103577481516e-02 + -5.3293294649536538e-01 9.0453727128684669e-01 1.9338528871510718e-02 + -5.3319836132179210e-01 9.6159999138566621e-01 -6.7137980518394702e-03 + -5.2189702350467138e-01 1.0044049916715891e+00 -4.5264228082488200e-02 + -5.1393321771167499e-01 1.0200814050639053e+00 -9.9662178091940556e-02 + -5.0890059868535831e-01 1.0059676762808774e+00 -1.6782355567022594e-01 + -4.9636873089602940e-01 9.6572089223273649e-01 -2.4685341939780292e-01 + -4.7166002397775525e-01 9.0267656801389884e-01 -3.3580056181148471e-01 + -4.4490607473800148e-01 8.1803269584710303e-01 -4.3439983897082335e-01 + -4.5392809783398974e-01 6.4668902889288116e-01 -5.4093917295992477e-01 + id 12612 + loc 5.2991682291030884e-01 4.6799585223197937e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4238168140383383e-01:4.4237725758701979e-01:2.7132256614876438e-01:3.8298724258846600e-01:1.0587007496559173e+00:4.1272909553170434e-01:1.9230330267369768e+00:4.1823965689097287e-01:2.3442571801106071e+00:4.3522742627068328e-01:3.0011603522125787e+00:3.1064849188732430e-01:3.9127180552286522e+00 + CVs 20 + -5.9405050569198793e-02 4.2561063264994914e-01 -4.8301074548379397e-02 + -1.4374378740636107e-01 8.6065727088273314e-01 -5.1421650049451539e-02 + -2.5247231469189879e-01 1.3036055477716828e+00 -8.4273111867805284e-04 + -3.9129215505096249e-01 1.7485739665432165e+00 1.2511384280269311e-01 + -5.5070185699499929e-01 2.1711635802279927e+00 3.4827974860312283e-01 + -7.1179582409649533e-01 2.5410413380797880e+00 6.3585362724216077e-01 + -9.5651104693070355e-01 2.7877805775373998e+00 1.0860452451654612e+00 + -1.1068914780512471e+00 2.8932446114128108e+00 1.4940474096427216e+00 + -1.2079880765133588e+00 2.9108799776685705e+00 2.0305218853619404e+00 + -1.2329454437933143e+00 2.7655851638376867e+00 2.6351605346768583e+00 + -1.1597587317821767e+00 2.4589812893945040e+00 3.2010897582791644e+00 + -1.0053221512517372e+00 2.0122418521804324e+00 3.6663728774516029e+00 + -8.2959053151021800e-01 1.4904129183103128e+00 3.9915152531334117e+00 + -6.9748093373252162e-01 1.0313560114446052e+00 4.1948988509640506e+00 + -6.3061582115766091e-01 8.0961481904684129e-01 4.3464600247543812e+00 + -6.4245729064659352e-01 9.8264826634317193e-01 4.4411518224424764e+00 + -7.7842942976147467e-01 1.5027012663459480e+00 4.2662024813391515e+00 + -1.0152194023755472e+00 1.9724762368635713e+00 3.5950192743574476e+00 + -1.0025365209347679e+00 2.0328543023389147e+00 3.7504719603755263e+00 + id 12613 + loc 3.6196857690811157e-01 8.5948988795280457e-02 406 + blend 0.0000000000000000e+00 + interp 3.7775424590553724e-01:3.4260129909633136e-01:3.6153127120337469e-01:3.6216584270825763e-01:9.7540391377729840e-01:3.7408581417729081e-01:1.6431304850436568e+00:2.7456483980824548e-01:2.0433709760835526e+00:3.7179837561485979e-01:3.0336830133556618e+00:3.7775046836307818e-01:3.9695934921394502e+00 + CVs 20 + -2.7117190443292128e-02 1.1221658856381844e-01 1.6076912894920713e-02 + -4.7634775406772079e-02 2.1391814801956083e-01 4.7838887073732045e-02 + -4.8004685417110657e-02 3.2627487941621564e-01 8.2426554713733780e-02 + -2.9511300400639554e-02 4.5302909644287115e-01 9.5828774357807261e-02 + 7.6705484364859647e-03 5.8927588816029042e-01 7.9553082635937022e-02 + 6.1768462677846192e-02 7.2775448388947850e-01 2.5759115097602703e-02 + 1.2965029455206983e-01 8.5923400429017294e-01 -7.1792955251417212e-02 + 2.0930195990200021e-01 9.7389193901486948e-01 -2.1548747771540211e-01 + 3.0198965485113682e-01 1.0629879357480589e+00 -4.0145863359226702e-01 + 4.0609751356291418e-01 1.1190543672514175e+00 -6.2255253618087814e-01 + 5.1047999319171922e-01 1.1360459630977258e+00 -8.7461963265458464e-01 + 6.0265389797901348e-01 1.1111180338714683e+00 -1.1561449419107717e+00 + 6.7947371746850704e-01 1.0462396945931265e+00 -1.4626878308881426e+00 + 7.3913905523396195e-01 9.4685690009045320e-01 -1.7852376641176728e+00 + 7.7047308555123828e-01 8.1915537814273676e-01 -2.1135238846069040e+00 + 7.6231200615546357e-01 6.6764790158073117e-01 -2.4385757480961541e+00 + 7.1663559719147674e-01 4.9490201001698408e-01 -2.7524601648461600e+00 + 6.4317812290270493e-01 3.0901221960603342e-01 -3.0498961453072200e+00 + 6.2657072217878351e-01 1.6478209552512646e-01 -3.3699701890881277e+00 + id 12614 + loc 8.6573582887649536e-01 8.2264500856399536e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2560187869293326e-01:3.4099973362761571e-01:1.3356558533511675e-01:4.2559762267414636e-01:9.2838403596611874e-01:3.1738481336436752e-01:1.3350247660712415e+00:3.2074389361200917e-01:2.1250696286759245e+00:2.8545463722169268e-01:3.3734334915789357e+00 + CVs 20 + 3.3004272605676718e-02 4.0958812548008128e-01 4.0062967027859975e-01 + 1.2460839512341895e-01 7.1749933717233860e-01 6.7098271443631297e-01 + 2.5744149639057601e-01 9.8226440044112984e-01 8.8800892823705124e-01 + 4.2240948132425643e-01 1.2307771300318895e+00 1.0884887088413926e+00 + 6.1346781084034441e-01 1.4592055896187786e+00 1.2679746387209592e+00 + 8.2195811702364296e-01 1.6654895052231251e+00 1.4247758762489586e+00 + 1.0390858999683246e+00 1.8483566677633396e+00 1.5536720648170796e+00 + 1.2590612278273017e+00 2.0082585690067978e+00 1.6493444214086650e+00 + 1.4801309459608467e+00 2.1463385594677691e+00 1.7075940697467442e+00 + 1.6974821058110479e+00 2.2499924432904082e+00 1.7195033889637821e+00 + 1.8949342849770425e+00 2.2934713822931254e+00 1.6861710086796702e+00 + 2.0564320028063938e+00 2.2646570801713759e+00 1.6256992724951234e+00 + 2.1751382758923854e+00 2.1714154933952585e+00 1.5574342728946127e+00 + 2.2513309316713341e+00 2.0350686337198640e+00 1.4946220973604867e+00 + 2.2913980286588247e+00 1.9072856353799976e+00 1.4480667562883209e+00 + 2.3074130548337406e+00 1.8900499534265178e+00 1.4160829531850716e+00 + 2.3144137311435804e+00 1.9809867033430573e+00 1.3556114744777807e+00 + 2.3096471338197420e+00 1.9215990639281251e+00 1.3430104259867079e+00 + 2.2750756036714792e+00 1.4801790893557334e+00 1.5780929545617126e+00 + id 12615 + loc 1.0303446650505066e-01 7.3770207166671753e-01 372 + blend 0.0000000000000000e+00 + interp 5.1324455579692452e-01:3.6298639825217022e-01:1.5620598603872737e-01:3.4894088135284584e-01:3.6008038102322781e-01:3.1554476383097851e-01:1.0147328956227011e+00:5.1323942335136652e-01:1.4797876427769923e+00:3.8571376399921914e-01:2.0813557670072003e+00:4.0055567274299120e-01:2.8899503734182961e+00:3.4323099313366046e-01:3.2762927040561216e+00:4.3957149537013851e-01:3.9212135389099032e+00 + CVs 20 + -3.3336333801869183e-01 6.8356750903764274e-01 -1.9186319720738346e-01 + -6.5791176358144221e-01 1.3991619729245681e+00 -3.6797961892869208e-01 + -9.1844069795697036e-01 2.1330022577047649e+00 -5.7680093696841339e-01 + -9.8725847067129491e-01 2.8349844357833742e+00 -8.7507517238461485e-01 + -7.4714353591170468e-01 3.3949999526044374e+00 -1.2573990143230815e+00 + -2.2480009466657536e-01 3.7198863707378385e+00 -1.6425713607744445e+00 + 4.6162606265403272e-01 3.7856880247361637e+00 -1.9473697203075035e+00 + 1.2001386755854495e+00 3.6314815017357720e+00 -2.1458527998911330e+00 + 1.9255358508609075e+00 3.3126088196548529e+00 -2.2612471837367316e+00 + 2.5993459637020546e+00 2.8723908426988207e+00 -2.3254193040231659e+00 + 3.1754047697785857e+00 2.3723654527869877e+00 -2.3690814058500709e+00 + 3.5904220438826151e+00 1.9114777884081573e+00 -2.4343288291054046e+00 + 3.7838554362278973e+00 1.5482796047914700e+00 -2.5366649608401310e+00 + 3.6384146340991630e+00 1.2815630394272475e+00 -2.6117068739449660e+00 + 3.1052119681709032e+00 9.3009437641987081e-01 -2.4745242480553458e+00 + 2.8437499589226940e+00 3.7309749982975404e-01 -2.1003238130679929e+00 + 3.1647251731266683e+00 -2.9366198395751164e-02 -1.8402981702160697e+00 + 3.7947309805032807e+00 1.9352000498185973e-02 -1.8918523520570538e+00 + 4.4643252636053052e+00 6.2592469264645056e-01 -2.3179799912334618e+00 + id 12616 + loc 5.7978916168212891e-01 6.2922918796539307e-01 1075 + blend 0.0000000000000000e+00 + interp 4.3833662356432529e-01:4.2228545184480154e-01:7.9887342823352636e-03:2.6480321733482853e-01:8.3154868243122571e-01:2.5809698626060340e-01:1.8734733116739011e+00:4.3833224019808964e-01:2.5403035188277010e+00:2.5588189367358638e-01:3.0553302595486889e+00 + CVs 20 + 9.9897926325012862e-02 2.3627645026083288e-01 -2.8057435936583147e-01 + 1.9347933445191018e-01 4.7127187624642675e-01 -5.4690216769483269e-01 + 2.7327252958130582e-01 7.0747971797592102e-01 -8.0592358385153717e-01 + 3.3378297764760906e-01 9.4825371824150939e-01 -1.0608877988294392e+00 + 3.6929322669526338e-01 1.1961872881985569e+00 -1.3096353787109438e+00 + 3.7161691431004085e-01 1.4526021127340218e+00 -1.5440852118650676e+00 + 3.3610239881532100e-01 1.7198455938366104e+00 -1.7585466237013905e+00 + 2.6691934255572147e-01 2.0049432513615781e+00 -1.9624347642675033e+00 + 1.7657863940823704e-01 2.3166983864948669e+00 -2.1823075919135304e+00 + 8.2339831566562216e-02 2.6569043254077505e+00 -2.4590755136407831e+00 + -1.5584602030549455e-04 3.0038899146888318e+00 -2.8384957444325645e+00 + -6.3681938404976490e-02 3.3045768151081991e+00 -3.3403201854207789e+00 + -1.1207496898630209e-01 3.5005279707440695e+00 -3.9445307525963176e+00 + -1.5343851528398389e-01 3.5557048760677938e+00 -4.6013952654504884e+00 + -1.8212127767907504e-01 3.4750286576449345e+00 -5.2450720258620134e+00 + -1.7334994674209581e-01 3.3079733043276107e+00 -5.8082813417189874e+00 + -1.0417304064280430e-01 3.1153363580409934e+00 -6.2508139583786866e+00 + -4.0892428607586240e-03 2.8952175250905006e+00 -6.5849162561585217e+00 + -5.5687004101917070e-02 2.6324529758157742e+00 -6.7344591959751918e+00 + id 12617 + loc 8.9031362533569336e-01 3.4627932310104370e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2146826524437808e-01:2.6790709503544446e-01:2.8734947712517789e-01:2.8415211234704524e-01:1.2179047921714889e+00:4.2146405056172564e-01:1.9510840288425011e+00:2.9649305466229886e-01:2.3618280613453377e+00:2.8668051662196531e-01:3.0486764548937195e+00 + CVs 20 + 3.0169933267269561e-01 3.3260988936910812e-01 -1.0985232609835394e-01 + 5.5255514328042254e-01 6.6853443014269742e-01 -2.0677944203993084e-01 + 7.7405090182697456e-01 1.0148382246839447e+00 -2.9739809086926167e-01 + 9.9356670557914706e-01 1.3630388971396485e+00 -3.5882078906314430e-01 + 1.2370275590961242e+00 1.6961387027539263e+00 -3.6004775491194074e-01 + 1.5151509150531375e+00 1.9941553161711620e+00 -2.8601101725295497e-01 + 1.8131691279595270e+00 2.2294441476962330e+00 -1.3827861473360192e-01 + 2.0921706458812532e+00 2.3745796268074311e+00 6.9037771233321221e-02 + 2.3153508258776587e+00 2.4176022274058306e+00 3.1692417426896258e-01 + 2.4819510900292259e+00 2.3591265537308610e+00 5.9848418186635199e-01 + 2.6102503215042612e+00 2.1889697158967740e+00 9.0764016966166416e-01 + 2.7173945610159000e+00 1.8833171617155813e+00 1.1992470470207985e+00 + 2.8125188294896475e+00 1.4566009143198246e+00 1.3821541670714383e+00 + 2.8875013480695109e+00 9.9144829431162962e-01 1.4405650373360435e+00 + 2.9274176703825470e+00 5.2650641030002310e-01 1.4830090036334349e+00 + 2.9180003640485133e+00 6.6727122437581499e-02 1.6392411014984607e+00 + 2.8600185852241449e+00 -3.3378469429432633e-01 2.0004164390632440e+00 + 2.7796188191046562e+00 -6.1127009636455010e-01 2.5064813341461321e+00 + 2.7656536555602411e+00 -9.4859332333897428e-01 2.8464064011143737e+00 + id 12618 + loc 5.0945770740509033e-01 9.7116971015930176e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8895448488124210e-01:4.8894959533639332e-01:7.8185316545366756e-02:4.5571692602919472e-01:6.8449943124627532e-01:1.9710720428745021e-01:1.4049475907528974e+00:3.8654425222975985e-01:2.0335159686534672e+00:3.4782300850377712e-01:3.0800258312094790e+00:4.6362530407822827e-01:3.7435502914885430e+00 + CVs 20 + -9.9082029988169701e-02 2.4209261812696187e-01 1.1086907850852451e-02 + -1.4640399174482149e-01 4.1388685800269892e-01 -8.7416177266234435e-02 + -2.2719895279423258e-01 5.7513262166921741e-01 -2.1480983389392094e-01 + -3.4442682399069308e-01 7.1666792709985994e-01 -3.5346371581334263e-01 + -4.9457870369787149e-01 8.3322120650164277e-01 -5.0253564838359788e-01 + -6.7508752121579529e-01 9.2309539620499304e-01 -6.5919553925921992e-01 + -8.8556430163702149e-01 9.8694336012804518e-01 -8.1908201822261362e-01 + -1.1271598273966135e+00 1.0258807904141025e+00 -9.7629619894562714e-01 + -1.4001500058294025e+00 1.0409277237447323e+00 -1.1234803839198173e+00 + -1.7029200265137812e+00 1.0332805580906061e+00 -1.2525453660968318e+00 + -2.0303696162703120e+00 1.0039262290671860e+00 -1.3564232264884288e+00 + -2.3742891517065270e+00 9.5444731792758097e-01 -1.4309626543278759e+00 + -2.7291458473509942e+00 8.9128282379101675e-01 -1.4742868927234465e+00 + -3.0931296427521442e+00 8.3006786031601787e-01 -1.4850350815653033e+00 + -3.4630642183764988e+00 7.9087560456967432e-01 -1.4625935095511746e+00 + -3.8314342304167521e+00 7.8661876696184230e-01 -1.4089966313529709e+00 + -4.1876888627472741e+00 8.2026112671858087e-01 -1.3312544183645496e+00 + -4.5163858041492881e+00 8.8875764889693443e-01 -1.2448637329839747e+00 + -4.7881571156676674e+00 9.5408786592531158e-01 -1.2074290962485552e+00 + id 12619 + loc 1.1305474489927292e-01 4.6704256534576416e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6358187564431027e-01:3.4358355612097696e-01:6.4206604921353061e-01:2.6976008754198111e-01:1.0419974424720415e+00:2.9237469591826054e-01:1.8032464963987296e+00:2.7235396646967724e-01:2.5180272770154417e+00:2.7512916189253317e-01:3.2592854628616688e+00:3.6357823982555382e-01:3.9958489108629101e+00 + CVs 20 + -3.0462096192407848e-02 3.3963711706157534e-01 -7.3878310477416220e-02 + -9.2299341703498350e-02 6.4464239000249002e-01 -1.5793437263620824e-01 + -1.6636426754429157e-01 9.2275374854623948e-01 -2.2894055930421436e-01 + -2.4230292168764139e-01 1.1822062160286650e+00 -2.7602909195778391e-01 + -3.2129346899389000e-01 1.4277954004499116e+00 -3.0273608856470136e-01 + -4.0500465429945398e-01 1.6671547723953193e+00 -3.1495363418693778e-01 + -4.9461356989807548e-01 1.9043543835754480e+00 -3.2214940024609873e-01 + -5.8933575086719348e-01 2.1388190346349791e+00 -3.3392114071331463e-01 + -6.9472051563136750e-01 2.3732794187569679e+00 -3.5699965277810330e-01 + -8.3464907853038395e-01 2.6065397772501173e+00 -3.9437885543080164e-01 + -1.0344231199252274e+00 2.8173491135941289e+00 -4.4227993806617555e-01 + -1.2911871245902540e+00 2.9730640450718049e+00 -4.9176896353805333e-01 + -1.5683979091307245e+00 3.0542380201337989e+00 -5.3626759417509917e-01 + -1.8066239388073042e+00 3.0731527092512998e+00 -5.8410814869515004e-01 + -1.9653900137985554e+00 3.0682007836895782e+00 -6.6964492986503521e-01 + -2.0710574394134995e+00 3.0504107980901498e+00 -8.1302207649042790e-01 + -2.1713400120483213e+00 2.9985359991320033e+00 -9.8937501746119771e-01 + -2.2819102720298785e+00 2.8989218579306657e+00 -1.1276298049552627e+00 + -2.4594954732930856e+00 2.7983687518721450e+00 -7.9144172363316190e-01 + id 12620 + loc 6.9929644465446472e-02 3.7869533896446228e-01 411 + blend 0.0000000000000000e+00 + interp 3.9174302010635348e-01:3.5909837186886501e-01:8.8243183266694591e-01:3.4605796974740066e-01:1.5327116418995759e+00:3.1316499637911760e-01:2.0792667024488711e+00:3.9173910267615242e-01:2.7720694869138445e+00:2.4773358331345766e-01:3.0765787241531628e+00:3.3373924698113094e-01:3.9664195023683115e+00 + CVs 20 + -2.8240265043591012e-01 2.9628393044067008e-01 -6.9566328645355113e-01 + -5.7640924624410650e-01 4.7747702902731365e-01 -1.1855034012142529e+00 + -8.9344118393180583e-01 6.2164078369591191e-01 -1.6566600121854771e+00 + -1.2273034683930244e+00 7.4257296508434645e-01 -2.1607139373205282e+00 + -1.5630829495881819e+00 8.0772423187791087e-01 -2.6579090221989148e+00 + -1.8883220035190822e+00 7.9530014254429793e-01 -3.1019328665830126e+00 + -2.2013634434411524e+00 7.0034803671609414e-01 -3.4742244888624878e+00 + -2.5170871337049787e+00 5.1568696595316232e-01 -3.7901936605546331e+00 + -2.8427237254972022e+00 2.2769671686543291e-01 -4.0631678224018897e+00 + -3.1541898754156135e+00 -1.6211346629610079e-01 -4.2837600486235061e+00 + -3.4062839324983378e+00 -6.3255552010588922e-01 -4.4296037842329561e+00 + -3.5590653431537125e+00 -1.1634649375818309e+00 -4.4862283405899506e+00 + -3.6147528814717562e+00 -1.7580384340578419e+00 -4.4637600890422462e+00 + -3.6244075580278010e+00 -2.4422175141845264e+00 -4.4086610723914861e+00 + -3.6625810969476085e+00 -3.2346533396218806e+00 -4.3974523574467339e+00 + -3.7945232248421390e+00 -4.0933226876703444e+00 -4.4937869962015773e+00 + -4.0073723252046909e+00 -4.9265143079029343e+00 -4.7299738948650587e+00 + -4.2385849363705788e+00 -5.6688243214188594e+00 -5.0995463468712252e+00 + -4.4577648070854847e+00 -6.3070755754113552e+00 -5.5697639891906050e+00 + id 12621 + loc 4.9009627103805542e-01 9.7780340909957886e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8681498242428192e-01:3.8681111427445769e-01:2.1476265344447387e-01:1.2699533390445453e-01:1.5141182423741979e+00:2.8087386441813356e-01:2.6134327258299082e+00:3.2419012248815099e-01:3.6614090202666651e+00 + CVs 20 + 1.3008308528975004e-01 3.4119655353511874e-01 -2.2756084516207442e-01 + 2.3254983242278898e-01 6.7277035205284208e-01 -4.7733975257317718e-01 + 3.1855969026535180e-01 9.8425569075750086e-01 -7.3567096339497096e-01 + 3.9224563323573219e-01 1.2652841358008493e+00 -9.9762952963270901e-01 + 4.5193318419795520e-01 1.5093597278548763e+00 -1.2606985599004881e+00 + 4.9424967529792413e-01 1.7159750974287804e+00 -1.5180082661301211e+00 + 5.1985938902638618e-01 1.8931768586668176e+00 -1.7696991390951391e+00 + 5.3966886439990858e-01 2.0482078500814067e+00 -2.0307812212952912e+00 + 5.7065761959663730e-01 2.1699810065991589e+00 -2.3140075285965396e+00 + 6.2116796290966370e-01 2.2344686350202201e+00 -2.6101159476512015e+00 + 6.8936913590430604e-01 2.2255166001783273e+00 -2.8950664118946454e+00 + 7.7085174799805378e-01 2.1393981791624173e+00 -3.1438683548964725e+00 + 8.6810763031242033e-01 2.0217931208643609e+00 -3.3222858970453437e+00 + 1.0048017001056047e+00 1.9663861452205831e+00 -3.3693150504919722e+00 + 1.2386389303044318e+00 2.0018168939927925e+00 -3.2304320484692064e+00 + 1.6442277807289365e+00 2.0042725977927534e+00 -2.9088137578554187e+00 + 2.2264167330623912e+00 1.8074449132733010e+00 -2.5513270120297817e+00 + 2.7620255510155665e+00 1.4724047875283515e+00 -2.4471519929395793e+00 + 2.8195939685610991e+00 1.3742765174330573e+00 -2.7381812724143089e+00 + id 12622 + loc 6.5455132722854614e-01 6.4500999450683594e-01 403 + blend 0.0000000000000000e+00 + interp 3.4711546629577911e-01:2.7656254608531888e-01:2.3471919987186951e-01:2.9188718629216126e-01:9.9308332140683475e-01:2.5133481801879048e-01:1.6473746150339623e+00:3.0248187490873146e-01:2.8314269269819015e+00:3.4711199514111618e-01:3.2041023357616210e+00 + CVs 20 + -7.8127147601391167e-02 3.7604051787393664e-02 -1.3172589040703789e-01 + -1.2951411255439474e-01 9.9650284905459227e-02 -2.5166474644588382e-01 + -1.9974892805119129e-01 1.5770015150436675e-01 -3.7104860758427000e-01 + -2.9192774491912016e-01 2.0364617531576273e-01 -4.8663427352303706e-01 + -4.0288310948510714e-01 2.3677261719363307e-01 -5.9530263162545671e-01 + -5.3074118111863244e-01 2.5767536813237862e-01 -6.9424539633280324e-01 + -6.7482053538552345e-01 2.6784882386665104e-01 -7.8020396089961297e-01 + -8.3478130664737349e-01 2.6859499528203168e-01 -8.4949340045345179e-01 + -1.0093834154268799e+00 2.6020590513624520e-01 -8.9854741306091590e-01 + -1.1960572515834285e+00 2.4221621945758032e-01 -9.2444054493629635e-01 + -1.3914597665601944e+00 2.1479337196103243e-01 -9.2484983748040950e-01 + -1.5919840307385795e+00 1.7912805485024341e-01 -8.9787736848518751e-01 + -1.7939057795257543e+00 1.3758606593798894e-01 -8.4178785953865176e-01 + -1.9930003069129996e+00 9.3695233995061189e-02 -7.5497203342518437e-01 + -2.1830806191208021e+00 5.1584403045200400e-02 -6.3583424873130789e-01 + -2.3560673561729728e+00 1.4221440279026387e-02 -4.8319126534403950e-01 + -2.5022702375626884e+00 -1.8113028399826092e-02 -2.9803729314781408e-01 + -2.6116823974916872e+00 -4.8220353453426457e-02 -8.5482225936300144e-02 + -2.7248078421517250e+00 -1.0683276044594336e-01 3.1913226517833460e-03 + id 12623 + loc 2.9176449775695801e-01 5.5658417940139771e-01 409 + blend 0.0000000000000000e+00 + interp 3.6190329212470851e-01:2.6258252941602594e-01:3.3441406115929329e-01:3.6189967309178728e-01:1.0381890420904965e+00:2.7373036062236106e-01:2.1422939521158719e+00:2.8543280230282675e-01:2.9888564044120014e+00:2.8694052193579189e-01:3.6570968330455109e+00 + CVs 20 + 3.9966637018961537e-01 2.6303988018286428e-01 -5.4539758127693662e-02 + 7.2899947964843648e-01 4.5984176597879151e-01 -9.7193756463370057e-02 + 1.0439830916376656e+00 6.1482052622175587e-01 -1.2265480768814424e-01 + 1.3757950162835175e+00 7.4154221247714380e-01 -1.2851812980563462e-01 + 1.7133356227512171e+00 8.3182529595181465e-01 -1.2195398889197832e-01 + 2.0453157572475509e+00 8.8220448197222057e-01 -1.1192441357632320e-01 + 2.3683405386133565e+00 8.9916524120453512e-01 -1.0606538277361362e-01 + 2.6850620830726855e+00 8.9376794891733935e-01 -1.0981714002685365e-01 + 2.9979487516499805e+00 8.6957101783218904e-01 -1.2613258239228731e-01 + 3.3068878653507543e+00 8.2325172172141814e-01 -1.5687213618507442e-01 + 3.6107284483780155e+00 7.5461676938367517e-01 -2.0299991141296256e-01 + 3.9082808959849964e+00 6.6592251723392382e-01 -2.6401998152360850e-01 + 4.1949718073411972e+00 5.5283461288058788e-01 -3.4076357914363203e-01 + 4.4616846883953984e+00 4.0583398353843725e-01 -4.3631590109395380e-01 + 4.7010797858864697e+00 2.2401330772605554e-01 -5.4962030714929588e-01 + 4.9107637845607091e+00 2.2260693273179477e-02 -6.7062976774777405e-01 + 5.0904510526469728e+00 -1.7792090800826976e-01 -7.8787065321795768e-01 + 5.2269242812526553e+00 -3.8260810520640298e-01 -8.9072864639263394e-01 + 5.1059890042866209e+00 -8.6243980565535949e-01 -8.3872274252757373e-01 + id 12624 + loc 7.7347195148468018e-01 5.1035547256469727e-01 1081 + blend 0.0000000000000000e+00 + interp 4.6263553328226248e-01:3.0142901401413985e-01:3.2688660401506309e-02:4.2028366612632501e-01:1.0008359175674695e+00:2.6085226225588320e-01:1.7205408384131751e+00:3.0948064288552757e-01:2.2213257930275581e+00:3.6069193834897162e-01:2.9424293996385220e+00:4.6263090692692965e-01:3.4314978317338634e+00 + CVs 20 + 2.6625959009459188e-03 5.1549865640997083e-01 4.3589341376981172e-01 + 5.5313088193593207e-02 9.1816618018446450e-01 6.9960142394448199e-01 + 1.2759606838600712e-01 1.2789203194333782e+00 9.0315479589027670e-01 + 2.1007950871656333e-01 1.6234240282059069e+00 1.0878886460605381e+00 + 3.0506635177575497e-01 1.9428773525237004e+00 1.2454793538300009e+00 + 4.1168709935136266e-01 2.2279059100122272e+00 1.3633045660422276e+00 + 5.2634175409088590e-01 2.4688625670769300e+00 1.4252653807172893e+00 + 6.4296265215733472e-01 2.6545631596047148e+00 1.4185412270224371e+00 + 7.5054098938450953e-01 2.7656328962207448e+00 1.3396465239365454e+00 + 8.3297300295404264e-01 2.7858521937515555e+00 1.2162709800404885e+00 + 8.9327253137784768e-01 2.7373555379535199e+00 1.0838034696119627e+00 + 9.4514371438938838e-01 2.6367452214393245e+00 9.4371256510595480e-01 + 9.9543451480191869e-01 2.4840912410497094e+00 7.9616701094609743e-01 + 1.0493557292259492e+00 2.2796921920753199e+00 6.4863717217989936e-01 + 1.1117906403906286e+00 2.0253582659032596e+00 5.1702714498565272e-01 + 1.1841799883568938e+00 1.7266488440035745e+00 4.3716831646906773e-01 + 1.2650396587588300e+00 1.4026708611878953e+00 4.5695729735847568e-01 + 1.3570653878415526e+00 1.0571816900381565e+00 5.8652593598045155e-01 + 1.4608329037037937e+00 6.3326815232387212e-01 7.7980490390053769e-01 + id 12625 + loc 4.3175774812698364e-01 2.7765870094299316e-01 372 + blend 0.0000000000000000e+00 + interp 3.8924502511131970e-01:2.8363857204294385e-01:9.0039945146093259e-01:3.8924113266106858e-01:1.1727175408519361e+00:2.9777112230488284e-01:1.8998716766486412e+00:2.7544843079627424e-01:2.4954535110865415e+00:3.1084985753756017e-01:3.0088085793222206e+00:3.2176709578074703e-01:3.9472095600287220e+00 + CVs 20 + -1.5402480567055205e-01 5.2010409979494066e-01 5.2589692255574283e-01 + -2.6770718282891504e-01 9.9803465320361795e-01 9.7241012994603138e-01 + -3.5133329669391672e-01 1.4443811503832629e+00 1.3877919428996641e+00 + -4.1417874772486929e-01 1.8414909713247885e+00 1.7512970529700906e+00 + -4.8737846276099939e-01 2.1986422980550100e+00 2.0302407718728901e+00 + -6.6928483794809845e-01 2.5788884183544578e+00 2.1536760256123220e+00 + -9.6113238930578337e-01 2.9270026507900484e+00 2.0024026699811590e+00 + -1.2710276013109294e+00 3.1505259224775299e+00 1.5789193379890238e+00 + -1.5450704999858167e+00 3.2052611377665943e+00 9.5732187268191815e-01 + -1.7578385044988087e+00 3.0620505320181870e+00 2.4749307347008909e-01 + -1.8973776048365476e+00 2.7317186536395948e+00 -3.8575881335319395e-01 + -1.9696881597155820e+00 2.2818819851399672e+00 -7.7146089447231625e-01 + -1.9454933943324542e+00 1.7292929280555400e+00 -8.4286418447851386e-01 + -1.7052243187311382e+00 9.4621817491385152e-01 -7.1422435898241632e-01 + -1.2289612403302330e+00 -9.8085179197728356e-02 -9.5168390266149916e-01 + -8.9016780360042436e-01 -9.0869884223067321e-01 -1.9673327652892660e+00 + -9.6881875418530727e-01 -1.1921487569627074e+00 -3.4457164404045093e+00 + -1.4788735034926581e+00 -9.5604179942690104e-01 -4.8521293720569441e+00 + -2.1528978548014375e+00 -5.1975568808065020e-01 -5.7400930916326551e+00 + id 12626 + loc 3.5056790709495544e-01 2.5700640678405762e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1887775409740657e-01:3.1526376056199945e-01:2.5510484445474657e-02:2.9475685525649331e-01:8.5336432895127146e-01:4.1887356531986564e-01:1.6345856933841916e+00:2.9202406805451270e-01:2.0410413680651107e+00:3.2354994257143227e-01:2.9576703687579498e+00:4.1329500765159349e-01:3.3139293167488253e+00 + CVs 20 + -2.0124051419706102e-01 3.4965063019668224e-01 -4.7736640481240156e-03 + -3.8327720114496633e-01 6.4737467162171636e-01 -6.8955644141372285e-02 + -5.4967725439586135e-01 9.1442040312595529e-01 -1.5956287905854377e-01 + -7.0958369087670692e-01 1.1530910847872695e+00 -2.6999113515676942e-01 + -8.7882472614411111e-01 1.3687011374464371e+00 -4.0550813053981749e-01 + -1.0731530068355166e+00 1.5726568895140662e+00 -5.6012620405421598e-01 + -1.2994737030244732e+00 1.7669419954741747e+00 -7.1296118712175638e-01 + -1.5524174571636993e+00 1.9406240583144390e+00 -8.4059787592534529e-01 + -1.8181308304247290e+00 2.0793359129911995e+00 -9.3209301334666772e-01 + -2.0855406455586194e+00 2.1706247400060201e+00 -9.8804947229971218e-01 + -2.3462205911780325e+00 2.2009591517414977e+00 -1.0121157189630758e+00 + -2.5832949540081600e+00 2.1672095958504345e+00 -1.0079062095736449e+00 + -2.7728220945013233e+00 2.0835419531993278e+00 -9.7404722163761892e-01 + -2.8958015734814340e+00 1.9697423310237085e+00 -9.0027390448984368e-01 + -2.9507897405384975e+00 1.8339707898812287e+00 -7.6965116564797631e-01 + -2.9521706797687610e+00 1.6738362094696144e+00 -5.5830346373805295e-01 + -2.9219418768386958e+00 1.4802373254144139e+00 -2.1747157168796771e-01 + -2.9525731471714614e+00 1.1890114279431503e+00 2.3088947429490858e-01 + -3.0956417034888171e+00 9.3596998585770108e-01 7.8196675660509252e-02 + id 12627 + loc 1.1314123868942261e-01 6.9726216793060303e-01 406 + blend 0.0000000000000000e+00 + interp 5.5569493717088880e-01:3.7162332615895854e-01:8.6307388645731553e-01:5.5568938022151715e-01:1.3164169773297805e+00:4.1286719655254350e-01:1.9563795450181849e+00:3.9464760479930028e-01:2.5368027638090904e+00:3.1115830173874370e-01:3.0720350750866117e+00:3.5028879881401537e-01:3.9995852272787653e+00 + CVs 20 + 1.0543469079041225e-01 2.3608067765346680e-01 -2.5004388516707155e-02 + 1.3550407641739690e-01 3.7964714047137604e-01 -5.0141688578398333e-03 + 1.1067789192061966e-01 4.8926327014673915e-01 2.3618062359678345e-02 + 9.7724020533678124e-02 5.8625663325236310e-01 5.5264385128048918e-02 + 9.8202834463728045e-02 6.6443561993133449e-01 8.8875272717973491e-02 + 1.1018032155571642e-01 7.1756295987880658e-01 1.2323116988815508e-01 + 1.3019798033944213e-01 7.3686491514661434e-01 1.5586174382434453e-01 + 1.5033499778671006e-01 7.0486373360666676e-01 1.7789068839620747e-01 + 1.4769225754243198e-01 5.7197550322160673e-01 1.4456898138966651e-01 + 1.4037399459118749e-02 2.6596744654496640e-01 -2.3159194180020753e-01 + -2.9161787420992108e-01 4.8674470140316300e-01 -1.0792628860020184e+00 + -4.0521318817794877e-01 8.3169179260659709e-01 -1.3179758971121964e+00 + -4.4965990193783867e-01 9.9378051018735802e-01 -1.3883363180896218e+00 + -4.6009711008685916e-01 1.0812529462160436e+00 -1.4249305489222679e+00 + -4.5091753340681323e-01 1.0955799862866418e+00 -1.4445553709216707e+00 + -4.3553356207122906e-01 1.0146532191516313e+00 -1.4508411488815951e+00 + -4.1411012640308265e-01 8.4953639027085470e-01 -1.4400559942377997e+00 + -3.7441540161325809e-01 6.5114071050151057e-01 -1.4097363452455924e+00 + -2.2865983808000589e-01 6.8312283404184293e-01 -1.4518370936841418e+00 + id 12628 + loc 3.4771755337715149e-01 5.8446097373962402e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6188220422702508e-01:4.6187758540498286e-01:3.8184843550112380e-01:2.6550728348502356e-01:9.9992294524588565e-01:4.1886015659859505e-01:1.5365475787947589e+00:4.6076008833269272e-01:2.1270576384101907e+00:4.3518699800629945e-01:2.9685510477574093e+00:2.9136598498478472e-01:3.2870435955912063e+00:4.2418551227933615e-01:3.9796895518345989e+00 + CVs 20 + -1.8093464641056881e-01 8.1410620242344689e-02 2.6481163961440080e-01 + -2.8272858480422125e-01 6.6216738722549351e-02 3.7660515140944384e-01 + -3.5829882007221886e-01 1.8531449031031461e-02 4.2040979201497952e-01 + -4.2854332479186691e-01 -3.5865707039944489e-02 4.5813569232870527e-01 + -4.8989949071132122e-01 -9.5328889668722216e-02 4.8835014428438328e-01 + -5.3933719258906954e-01 -1.5759925567395258e-01 5.1125259279511404e-01 + -5.7530169784436380e-01 -2.1998560929988564e-01 5.2839821854965185e-01 + -5.9785188024849401e-01 -2.7960355959369565e-01 5.4142467572584108e-01 + -6.0957083913776100e-01 -3.3443182679895533e-01 5.5146012161466951e-01 + -6.1615363450206673e-01 -3.8456773578412062e-01 5.5861065403385646e-01 + -6.2593020980857206e-01 -4.3246766626455924e-01 5.6168012854763327e-01 + -6.4776265110038833e-01 -4.8202536900488757e-01 5.5826964529084044e-01 + -6.8678015354244493e-01 -5.3624551361429085e-01 5.4669047224447020e-01 + -7.4211123192297768e-01 -5.9552976023220694e-01 5.2892560628593988e-01 + -8.0986261299155027e-01 -6.5893790549712794e-01 5.0839874323870293e-01 + -8.8779025394806577e-01 -7.2657888884269151e-01 4.8488475854606611e-01 + -9.7475118084624757e-01 -8.0041840253776131e-01 4.5667630083907734e-01 + -1.0648026843447731e+00 -8.8423984631863273e-01 4.3019469059628190e-01 + -1.1498345850436580e+00 -1.0104201900472072e+00 4.3748308945661235e-01 + id 12629 + loc 1.2065017968416214e-01 3.6273073405027390e-02 1084 + blend 0.0000000000000000e+00 + interp 6.8984420487185794e-01:2.9019938364436709e-01:8.8010063995907273e-02:4.0676477011100781e-01:9.9999965798177237e-01:6.8983730642980923e-01:1.0170593385010323e+00:2.5786109823243586e-01:2.9808334460210180e+00:4.4827739961216334e-01:3.8230746367712718e+00 + CVs 20 + 4.3586260360196771e-01 3.8882299054082659e-01 2.0482268243843121e-01 + 7.7775726588348659e-01 6.9045235291501372e-01 3.4645993908662615e-01 + 1.1032541244605008e+00 9.5901350599215507e-01 4.3648326269773408e-01 + 1.4327861429844297e+00 1.2554761819906433e+00 5.4050633065874321e-01 + 1.6997238941367885e+00 1.5851163543915479e+00 7.2285036509617817e-01 + 1.8309706445095837e+00 1.9066138827881374e+00 1.0009836825174427e+00 + 1.7907008469375976e+00 2.1621127545717576e+00 1.3326984249826754e+00 + 1.5641622887213180e+00 2.3070505505151297e+00 1.6266654989358389e+00 + 1.1943589072811480e+00 2.3134024469482166e+00 1.7295477229095109e+00 + 8.7859643085360628e-01 2.2216269722644202e+00 1.6002730544313324e+00 + 6.7099244129856206e-01 2.0902327312185971e+00 1.3833361024967776e+00 + 5.3757420931528488e-01 1.9069453896444126e+00 1.1143385322620580e+00 + 4.9552076274869905e-01 1.6660194330186862e+00 8.1400480915776230e-01 + 5.2355065991045291e-01 1.3863771435698684e+00 5.2759360096390728e-01 + 5.3959640046742297e-01 1.0711696815816767e+00 2.7091297883066234e-01 + 4.5328725710214490e-01 7.3161085027956874e-01 4.9687902870012665e-02 + 1.8466218204518436e-01 4.5097344205489076e-01 -1.1127473367121979e-01 + -3.1957520713357834e-01 4.6460974323379683e-01 -1.3042839548189231e-01 + -5.2819383077199444e-01 3.4667069378003740e-01 -2.0982244531422822e-01 + id 12630 + loc 1.5128922462463379e-01 8.0855917930603027e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7339099763069165e-01:3.5874120975976487e-01:2.0937335520147815e-01:4.2942255166057763e-01:9.3281676161432980e-01:3.7949298964717404e-01:1.3121944662338652e+00:4.3591210136622061e-01:1.9797092147185269e+00:2.9461029886368695e-01:2.3052993704489722e+00:4.1003381156869168e-01:2.9467411906816587e+00:4.2992260223718304e-01:3.1539824613554215e+00:4.7338626372071535e-01:3.9245782820272583e+00 + CVs 20 + -6.5343095456850797e-02 1.6088847820183819e-01 9.5174180642375400e-02 + -1.0268696319299964e-01 3.0509336477539334e-01 1.5604788722140495e-01 + -1.2491108739433200e-01 4.2240757854398137e-01 1.9590734425872716e-01 + -1.4591654404790652e-01 5.3201480291784420e-01 2.3385254521969720e-01 + -1.6131650653471119e-01 6.3434073382525802e-01 2.7286682542113427e-01 + -1.6539805772724206e-01 7.3090138978501462e-01 3.1609801385186898e-01 + -1.5404709569532912e-01 8.2412133019258027e-01 3.6221932992673511e-01 + -1.2698054636000317e-01 9.1598673540627351e-01 4.0510387618769933e-01 + -9.1162222099914744e-02 1.0114933110542785e+00 4.3946426292114898e-01 + -6.0997139647750498e-02 1.1201042390541485e+00 4.6492302075167263e-01 + -5.3384194717989428e-02 1.2498466756064757e+00 4.8361328458386194e-01 + -8.6471496087747901e-02 1.3982780605610652e+00 4.9477861882587665e-01 + -1.6898937206878828e-01 1.5494422096796963e+00 4.9349026945384322e-01 + -2.9245442676250827e-01 1.6795539612171293e+00 4.7432449525929732e-01 + -4.3957983408676160e-01 1.7704876576492408e+00 4.3662054624132407e-01 + -6.0341739038109155e-01 1.8287663510433525e+00 3.8363562028382592e-01 + -7.9673254639910107e-01 1.8620319515973334e+00 3.2103758126206194e-01 + -1.0391700641576980e+00 1.8521839848912303e+00 2.5854718961185352e-01 + -1.2817744478225526e+00 1.7719450699040169e+00 2.0831541305365542e-01 + id 12631 + loc 1.6631765663623810e-01 3.0422022938728333e-01 1075 + blend 0.0000000000000000e+00 + interp 4.5048384034758748e-01:2.5023326261609397e-01:3.8149896414671147e-02:4.5047933550918401e-01:7.4347276479013180e-01:2.8932061956807570e-01:1.4733867644512215e+00:2.3803699255674182e-01:2.5194282545555917e+00:2.7328219149930111e-01:3.3861285141883313e+00 + CVs 20 + -1.5247935016262509e-01 2.9941076611468875e-01 -1.2679682854045649e-01 + -3.0055513584468191e-01 6.4408861849902943e-01 -2.2399772052729819e-01 + -4.3374192971183351e-01 1.0071054888125175e+00 -3.1347026124152461e-01 + -5.6489037363319938e-01 1.3706404191272969e+00 -4.0978272158225959e-01 + -7.1175510416933130e-01 1.7180679080359140e+00 -5.2315620273012353e-01 + -8.7726925406654688e-01 2.0250474370414486e+00 -6.6137238749594507e-01 + -1.0447952410942651e+00 2.2631518229391436e+00 -8.2398254944803284e-01 + -1.1876412676672714e+00 2.4175529971911121e+00 -9.9145593910237995e-01 + -1.3048405704068051e+00 2.5051825676905031e+00 -1.1509431403201109e+00 + -1.4230394329294558e+00 2.5383118880367972e+00 -1.3281968978115879e+00 + -1.5532590079048874e+00 2.5088174932917040e+00 -1.5423568779174457e+00 + -1.6931487772698097e+00 2.4162011064084403e+00 -1.7917397723067734e+00 + -1.8430900632605800e+00 2.2671112093196091e+00 -2.0412336288313750e+00 + -2.0290437529037302e+00 2.0748742482413718e+00 -2.2001826003612894e+00 + -2.2780263069545428e+00 1.8282294989737073e+00 -2.2052633682186609e+00 + -2.5509292575781863e+00 1.4580890397555910e+00 -2.0880902610954188e+00 + -2.7584256416983997e+00 9.2195891803701446e-01 -1.9644274070529630e+00 + -2.8642273259649298e+00 3.3521630805001934e-01 -2.0046319172821789e+00 + -2.9527581346383709e+00 5.1830114725277876e-02 -2.2902591936542085e+00 + id 12632 + loc 5.1538836956024170e-01 8.7604515254497528e-02 411 + blend 0.0000000000000000e+00 + interp 3.7096904198974312e-01:3.2907169392589791e-01:3.2892609319787047e-01:3.7096533229932321e-01:1.0294002974185956e+00:3.6699214147720188e-01:2.1042540507857517e+00:3.6862091543234066e-01:2.9236060588878443e+00:3.5669108143211414e-01:3.4239543659762472e+00 + CVs 20 + -6.7104051696333744e-01 2.8087286356741603e-01 4.2488845162042294e-02 + -1.2193638797941047e+00 4.7415550385249006e-01 6.8563888448029214e-02 + -1.7315332973908117e+00 6.2871315291967733e-01 4.8970553499225744e-02 + -2.2493099950838973e+00 7.5412774562538976e-01 -1.3837313427857878e-02 + -2.7653121241789771e+00 8.4474250567436815e-01 -1.1136053403483531e-01 + -3.2745718987465664e+00 8.9848691774805911e-01 -2.3207915787877392e-01 + -3.7722215176303719e+00 9.1253046639227042e-01 -3.6453516494996263e-01 + -4.2540820257233332e+00 8.8185203928079292e-01 -4.9786657016006941e-01 + -4.7222158424102982e+00 8.0118661424184157e-01 -6.1960352951616138e-01 + -5.1802445389292835e+00 6.6412635100511741e-01 -7.1708250766257475e-01 + -5.6182056779452250e+00 4.6815593614343842e-01 -7.8281319612785383e-01 + -6.0145056720321364e+00 2.2369334364241444e-01 -8.1662085501887249e-01 + -6.3589106089342824e+00 -5.1123973409297196e-02 -8.2178832813458413e-01 + -6.6590995676227163e+00 -3.4350699517307692e-01 -8.0182851966909774e-01 + -6.9243609952365297e+00 -6.4683736225445276e-01 -7.6158884944011696e-01 + -7.1599711035541391e+00 -9.5322004778493996e-01 -7.0621831068042240e-01 + -7.3699029841546055e+00 -1.2608330403815664e+00 -6.4107671637616703e-01 + -7.5507539583372818e+00 -1.5745596751963107e+00 -5.7606947841764344e-01 + -7.6472779896604273e+00 -1.7990606767165405e+00 -5.2012418298788854e-01 + id 12633 + loc 1.5894860029220581e-01 8.8287454843521118e-01 409 + blend 0.0000000000000000e+00 + interp 5.1321490339176412e-01:3.7820355547708900e-01:1.2692791661204450e-01:2.4004086712499523e-01:8.1969645580736761e-01:4.0298470766327810e-01:1.1434950439011360e+00:2.8803253725249367e-01:2.0243670615278351e+00:4.1319700819639926e-01:2.5649175072548913e+00:3.4459958793206308e-01:3.0650686943177412e+00:5.1320977124273026e-01:3.8174225631020193e+00 + CVs 20 + 6.4152286969054828e-01 2.0708255903924427e-01 -2.7999033393605949e-01 + 1.1626245757773030e+00 3.4306364908897641e-01 -5.3120503813860021e-01 + 1.6686241901802468e+00 4.6151168663604014e-01 -7.7643893800888197e-01 + 2.1796008016786610e+00 5.6171002512101764e-01 -1.0352639241113499e+00 + 2.6636475561891002e+00 6.1958788133284515e-01 -1.3240900116855605e+00 + 3.0930998672727390e+00 6.2792414512180739e-01 -1.6553563235329827e+00 + 3.4576450539352512e+00 5.9069571166775825e-01 -2.0330526195909382e+00 + 3.7679058861565000e+00 5.1126253826192536e-01 -2.4593741612744311e+00 + 4.0452042284932066e+00 3.8026878079054560e-01 -2.9381161161917095e+00 + 4.3098967804923127e+00 1.6879730947508897e-01 -3.4653805258059860e+00 + 4.5819756487705092e+00 -1.5666659194122001e-01 -4.0136357023090019e+00 + 4.8656119694756992e+00 -5.7840089610780776e-01 -4.5427732282089419e+00 + 5.1643586619427087e+00 -1.0101396538934635e+00 -5.0381262450555875e+00 + 5.4868172072442603e+00 -1.3753674871750690e+00 -5.5058435793417697e+00 + 5.8346733541850728e+00 -1.6579421140082884e+00 -5.9481371814717825e+00 + 6.2091323011880633e+00 -1.9177251793028653e+00 -6.3840348381183887e+00 + 6.6128150784420141e+00 -2.2326950419994596e+00 -6.8353575314245214e+00 + 7.0278493230114103e+00 -2.6271679961244856e+00 -7.2815915675045320e+00 + 7.4028715278216390e+00 -3.1093801545646573e+00 -7.7341322689050171e+00 + id 12634 + loc 5.6291347742080688e-01 3.1865438818931580e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6046281918946647e-01:3.8964481841676929e-01:3.3890585438142362e-01:4.6045821456127461e-01:9.2683753412513714e-01:4.0421140224430724e-01:1.1343845463633795e+00:3.0778659761622651e-01:1.9470925876014691e+00:3.8403897248546109e-01:2.7890869802864580e+00:3.4948870444584440e-01:3.2553765641674310e+00:2.6134359933926249e-01:3.9644451381011478e+00 + CVs 20 + -6.4765896341861348e-02 3.0022115074520933e-01 2.0130092816228035e-01 + -1.4826389377077587e-01 6.0346085817105688e-01 4.1160556807135207e-01 + -2.2490897684653607e-01 9.1027856119666961e-01 6.2890892603503312e-01 + -2.8070414376635144e-01 1.2142342219879949e+00 8.5408416269640064e-01 + -3.1265933064067736e-01 1.5052268437718483e+00 1.0903733467179004e+00 + -3.2023143329920040e-01 1.7699278313930815e+00 1.3414184883319074e+00 + -3.0798784106737248e-01 1.9936671616941610e+00 1.6134771020879466e+00 + -2.8380999431520088e-01 2.1641222204192365e+00 1.9074071134040320e+00 + -2.5748741387992813e-01 2.2728638353274384e+00 2.2152552953735416e+00 + -2.4138115395872273e-01 2.3088947106039135e+00 2.5311084834047364e+00 + -2.4855306287272416e-01 2.2550952081119569e+00 2.8532365384563496e+00 + -2.8884701036671689e-01 2.1066270434145529e+00 3.1750696605930058e+00 + -3.6373024901635265e-01 1.8920278007277840e+00 3.4814605982130082e+00 + -4.5605798323295416e-01 1.6598744846254538e+00 3.7520849484268499e+00 + -5.4033785752039332e-01 1.4369384523394388e+00 3.9767610079944560e+00 + -6.0504887165626842e-01 1.2183794492706703e+00 4.1633291244906010e+00 + -6.4444771111557109e-01 9.9922760011745426e-01 4.3314447304661323e+00 + -6.4020362114858576e-01 7.7643781107660725e-01 4.5324360732906754e+00 + -5.3828029628018881e-01 5.2715661424991445e-01 4.8792028457829444e+00 + id 12635 + loc 6.0412812232971191e-01 1.3383752107620239e-01 413 + blend 0.0000000000000000e+00 + interp 4.5829421931646608e-01:3.7358925476206145e-01:3.8485131361237168e-01:2.9437814101590282e-01:1.0010021184144213e+00:3.7655214117014763e-01:1.6249494621360139e+00:2.6768671668671568e-01:2.1714028080433678e+00:4.0163334968424391e-01:2.9449478100770361e+00:4.5828963637427295e-01:3.1832359756509869e+00:3.6756890658133140e-01:3.7801167810918876e+00 + CVs 20 + -9.9391473188406465e-01 1.1409115669959356e-01 2.0741753188248377e-01 + -1.6300456114384725e+00 9.9543389848412461e-02 3.4998640560071204e-01 + -2.1859879700944282e+00 3.6131682284999966e-02 4.4649450631898085e-01 + -2.7712866601844026e+00 -2.3557111624268989e-02 4.9232234128544095e-01 + -3.3767867305404549e+00 -8.6714329735413931e-02 4.8235821154587333e-01 + -3.9949132307067852e+00 -1.6296913706998661e-01 4.2017919898027523e-01 + -4.6189602749587673e+00 -2.6330246057814477e-01 3.1809279537974711e-01 + -5.2415930161959139e+00 -4.0020799754230230e-01 1.9056467689349610e-01 + -5.8549751748898098e+00 -5.8943205852457436e-01 4.6608891408731701e-02 + -6.4495729186981210e+00 -8.4770555468704600e-01 -1.1050625819147830e-01 + -7.0097560759442823e+00 -1.1879725219128203e+00 -2.7550880790941873e-01 + -7.5137556143786046e+00 -1.6125954949203587e+00 -4.3198928883290300e-01 + -7.9446390815890213e+00 -2.1078790498736453e+00 -5.6997849208871210e-01 + -8.2987919080312746e+00 -2.6563440077601532e+00 -6.8568290466933490e-01 + -8.5779698847224513e+00 -3.2452525619952723e+00 -7.7068983610872932e-01 + -8.7800719543509302e+00 -3.8589145341420092e+00 -8.1507085902314824e-01 + -8.9021966512837203e+00 -4.4783882494199272e+00 -8.1631714998204674e-01 + -8.9504946020746363e+00 -5.0935020858464739e+00 -7.7281564448117390e-01 + -9.0411184677351724e+00 -5.6382192315235509e+00 -6.8520265242094647e-01 + id 12636 + loc 3.3015692234039307e-01 3.7958565354347229e-01 403 + blend 0.0000000000000000e+00 + interp 4.5413159635389133e-01:2.7729501626992631e-01:9.7262206821309705e-02:2.6436691131339396e-01:1.1541382655228825e+00:4.4407906348580062e-01:1.9677704725642644e+00:3.9447395680463598e-01:2.2303870123825438e+00:4.5412705503792783e-01:2.9926527746384308e+00:2.7796765038980675e-01:3.3284745797120516e+00 + CVs 20 + -1.0524115563713740e-01 1.7537133986883169e-01 7.3992888316748745e-02 + -1.9931632192358584e-01 3.8046594697679437e-01 1.2224820238191686e-01 + -2.9555144993521665e-01 6.0174689495407607e-01 1.8287694771414303e-01 + -3.9548460839315525e-01 8.2670140345837129e-01 2.6937425355065575e-01 + -5.0168556112364993e-01 1.0507949648178279e+00 3.8897697214196636e-01 + -6.1360926761873003e-01 1.2680272076149532e+00 5.4740878986614327e-01 + -7.2646319856764285e-01 1.4729100747169137e+00 7.4662201946493001e-01 + -8.3437779268797130e-01 1.6630137146487498e+00 9.8407570913033071e-01 + -9.3471946112599125e-01 1.8384926205289984e+00 1.2572480827829620e+00 + -1.0275818944089512e+00 1.9979326610879409e+00 1.5679969498674671e+00 + -1.1118040564276825e+00 2.1365721010613172e+00 1.9190198140744337e+00 + -1.1838420393232318e+00 2.2485506301823488e+00 2.3094798900169167e+00 + -1.2376679003839395e+00 2.3280919565293128e+00 2.7361013485717560e+00 + -1.2637453275707822e+00 2.3698786496945372e+00 3.1936385054180016e+00 + -1.2504535019669938e+00 2.3712448510663271e+00 3.6726182889380019e+00 + -1.1905463541118866e+00 2.3280060736441470e+00 4.1628396562078471e+00 + -1.0902263871937465e+00 2.2356237997093515e+00 4.6502949729335787e+00 + -9.6759097347585032e-01 2.1003601270295937e+00 5.1156544028595343e+00 + -1.0078422761389199e+00 2.0600569681304224e+00 5.4702215774556073e+00 + id 12637 + loc 8.6084753274917603e-01 4.0690246224403381e-01 406 + blend 0.0000000000000000e+00 + interp 3.3835343498835152e-01:3.2992992595241327e-01:1.2788605222557736e-01:2.2988411029344180e-01:1.2655637588878914e+00:3.2451295507008571e-01:1.9764483802206154e+00:3.3835005145400165e-01:2.6998225155159963e+00:3.2035561897259296e-01:3.2808471442039182e+00 + CVs 20 + -2.0864997452805556e-01 1.7118518206574046e-01 4.6540828729970431e-02 + -3.3154364502075867e-01 2.8426596351332695e-01 7.5978937348585934e-02 + -4.0518757935339289e-01 3.6613278311758157e-01 9.2783509864191524e-02 + -4.7525453203594042e-01 4.5305721681187766e-01 1.0975311826533228e-01 + -5.4538889430331916e-01 5.4761023728209723e-01 1.2547626887761193e-01 + -6.1968272358826870e-01 6.5109284333573580e-01 1.3862303248653790e-01 + -7.0241775484658242e-01 7.6446126587005925e-01 1.4859409145872476e-01 + -7.9730125777134098e-01 8.8737304993673516e-01 1.5564071854432682e-01 + -9.0568512429301040e-01 1.0192120871816448e+00 1.5904355965137290e-01 + -1.0271439164569327e+00 1.1607290179406762e+00 1.5455990810843123e-01 + -1.1637149720137066e+00 1.3125147196975004e+00 1.3725569944864097e-01 + -1.3203607886443329e+00 1.4717477712235163e+00 1.0793361262540790e-01 + -1.4992445855190044e+00 1.6328608665028341e+00 7.4145230259338835e-02 + -1.6968591204442567e+00 1.7920328662778866e+00 4.1815656901373011e-02 + -1.9089413149106640e+00 1.9482902331548608e+00 8.4613509698530098e-03 + -2.1338427359033680e+00 2.1004226518770786e+00 -3.1124681065552884e-02 + -2.3711288970054620e+00 2.2462514954707342e+00 -7.5320531198032947e-02 + -2.6187711129420657e+00 2.3838589554157874e+00 -1.1531407708113561e-01 + -2.7880237227926234e+00 2.5066301890540892e+00 -1.4566270522076075e-01 + id 12638 + loc 5.6912469863891602e-01 9.6343749761581421e-01 263 + blend 0.0000000000000000e+00 + interp 4.3566168305206210e-01:4.3565732643523158e-01:5.3171446844460801e-01:2.7531071053212980e-01:1.2293290641047110e+00:4.1584410740546163e-01:2.3550895197852242e+00:3.7549644719366071e-01:3.1100830798989709e+00:3.9181236712537260e-01:3.9834350745398703e+00 + CVs 20 + -7.1806421563671241e-01 4.2757357410558294e-01 -1.4839033740052776e-01 + -1.3692948032392345e+00 7.2730501959428695e-01 -2.1214171950389538e-01 + -2.0506110832609541e+00 9.2430586497317513e-01 -2.5055339487028289e-01 + -2.7570092139183986e+00 1.0757946293113023e+00 -3.5035410871976036e-01 + -3.3662881880296709e+00 1.2298569998063225e+00 -6.3291681377279752e-01 + -3.6891432832962865e+00 1.3573034190297015e+00 -1.1474930583854723e+00 + -3.6463414176312439e+00 1.3784959481334518e+00 -1.7426646119722928e+00 + -3.3267865807614636e+00 1.2674579776160559e+00 -2.2900100703271806e+00 + -2.8242585452831754e+00 1.0149886749513350e+00 -2.7325176650901857e+00 + -2.2394628839278270e+00 6.1618818765974548e-01 -3.0231458373041318e+00 + -1.6613345227756626e+00 8.7934061619021953e-02 -3.1401671495362531e+00 + -1.1031669430337356e+00 -5.2751762686779191e-01 -3.0933998006168810e+00 + -4.6818848913839994e-01 -1.1637984402550736e+00 -2.9186959135740294e+00 + 4.4840118912210669e-01 -1.7041557708693011e+00 -2.7187729768934439e+00 + 1.7048542568069718e+00 -1.8681372934358795e+00 -2.7224473323851077e+00 + 3.0145291079891838e+00 -1.4896217335658433e+00 -3.0693538167499259e+00 + 4.1299318698466818e+00 -6.3794929262009670e-01 -3.7562564054420413e+00 + 4.8823078560372890e+00 4.4714891832846537e-01 -4.6317403914699327e+00 + 5.4843828121818161e+00 1.3745085927648197e+00 -5.3246207492964288e+00 + id 12639 + loc 1.7222234606742859e-01 3.7662309408187866e-01 1076 + blend 0.0000000000000000e+00 + interp 3.4358699199089687e-01:2.5654868248025203e-01:3.8024483047886193e-02:3.1406282475305575e-01:9.6283328720312056e-01:2.6106846237994386e-01:2.0014358951786075e+00:3.4358355612097696e-01:2.6370908110048763e+00:3.3755127708865101e-01:3.2129268385379381e+00 + CVs 20 + -5.4695422566377716e-02 3.4809378824146298e-01 -6.4424351961870630e-02 + -1.4762165460658244e-01 6.7179871803843927e-01 -1.6980784804320165e-01 + -2.6472298956496448e-01 9.7505368558761596e-01 -2.8082714705626960e-01 + -4.0024328552213367e-01 1.2577864917127983e+00 -3.7938451771088011e-01 + -5.5593338466942255e-01 1.5143364420236449e+00 -4.6455045916378057e-01 + -7.3177309960813974e-01 1.7380746652358703e+00 -5.3861162147003705e-01 + -9.2498635809072594e-01 1.9197346210449049e+00 -6.0403847827688972e-01 + -1.1280713852277904e+00 2.0497369158839183e+00 -6.5737951644280646e-01 + -1.3308595439637214e+00 2.1240398325347951e+00 -6.9099792537690929e-01 + -1.5271987319554086e+00 2.1455796900921480e+00 -7.0121287730747983e-01 + -1.7154690457414978e+00 2.1192280695374652e+00 -6.8910850497582765e-01 + -1.8944664972406966e+00 2.0492925136025644e+00 -6.5579530582197609e-01 + -2.0620582465190709e+00 1.9424952616836766e+00 -5.9969970353164115e-01 + -2.2119942967662771e+00 1.8181223046100934e+00 -5.1532343723236740e-01 + -2.3324045771953705e+00 1.7129261231400221e+00 -3.9787455447450165e-01 + -2.4167358543912045e+00 1.6528660143502667e+00 -2.5254712716253652e-01 + -2.4673827051105643e+00 1.6402058605710259e+00 -8.9839308662049533e-02 + -2.5059858049739758e+00 1.6524047050628528e+00 9.8615916844386337e-02 + -2.6592570746653470e+00 1.5272312637702421e+00 4.7910861886983691e-01 + id 12640 + loc 3.3049967885017395e-01 7.8541111946105957e-01 372 + blend 0.0000000000000000e+00 + interp 4.0055967833977457e-01:3.2478839149267441e-01:5.4907984834662971e-02:4.0055567274299120e-01:8.6998543640375936e-01:3.5743396804443484e-01:1.4087084988339165e+00:3.8088754034444849e-01:2.0622450864823785e+00:3.2608006311511911e-01:2.9199706727686614e+00:3.2677666372255920e-01:3.5572023818678864e+00 + CVs 20 + -3.0017516401458377e-01 6.7885733867468256e-01 -2.7126037573782413e-01 + -5.9708793640177760e-01 1.3436579621063229e+00 -5.5226778398184539e-01 + -8.2822984758893070e-01 1.9421006308310718e+00 -8.7075781737068314e-01 + -8.7843343460819401e-01 2.3981448284860365e+00 -1.2211964973337179e+00 + -7.1846560140183646e-01 2.6537605819280019e+00 -1.5561352715927377e+00 + -4.2024154289048932e-01 2.7360242217814470e+00 -1.8566881260205876e+00 + -3.0923003567384200e-02 2.6716008783317289e+00 -2.1222934317176279e+00 + 4.2114993578505810e-01 2.4647822644683233e+00 -2.3406444910990714e+00 + 8.8861877635564912e-01 2.1246498572435408e+00 -2.4853682679580520e+00 + 1.3172950148968607e+00 1.6797216032726783e+00 -2.5362485899769274e+00 + 1.6801510443564975e+00 1.1553417403994175e+00 -2.4872791213469894e+00 + 1.9845813830424357e+00 5.5835186325716379e-01 -2.3349086183164651e+00 + 2.2900652888631430e+00 -1.0169303556341591e-01 -2.0698003112558228e+00 + 2.7431273477293248e+00 -7.7521153994105585e-01 -1.7060913043224772e+00 + 3.5375496510619922e+00 -1.2995192289847215e+00 -1.3852532121625267e+00 + 4.6235520053051493e+00 -1.4279592261983329e+00 -1.3641264688165304e+00 + 5.7277290742238289e+00 -1.1086946197866641e+00 -1.7414316878878953e+00 + 6.6108518648182422e+00 -4.7669041717722171e-01 -2.4336865018145408e+00 + 7.3314689776143753e+00 1.2590392130505856e-01 -3.1812386317768828e+00 + id 12641 + loc 7.6558077335357666e-01 6.5841600298881531e-02 1080 + blend 0.0000000000000000e+00 + interp 5.3354056621044077e-01:4.3125222254975865e-01:4.9293585576944365e-01:2.7182239849270107e-01:9.8240962784475716e-01:3.0962983873122479e-01:1.4718870700358182e+00:5.3353523080477872e-01:1.9894870013037980e+00:2.9321678081454078e-01:2.9315827406138872e+00:3.2218287477265123e-01:3.6905551940319667e+00 + CVs 20 + -1.3116902809422229e-01 4.1547911984037644e-01 -3.2291168679001231e-01 + -2.6759583247559010e-01 7.1473630261968668e-01 -4.9809524507478842e-01 + -4.1773088975529782e-01 9.7788390613852683e-01 -6.3019442182399099e-01 + -5.7940530446616378e-01 1.2247992458651493e+00 -7.5834323326857256e-01 + -7.5004062086405776e-01 1.4468205426859475e+00 -8.7437677057784247e-01 + -9.1855766823196972e-01 1.6307919795514483e+00 -9.7007206686295389e-01 + -1.0659482228064452e+00 1.7644761436105172e+00 -1.0395115300328714e+00 + -1.1688603371170041e+00 1.8454765747867174e+00 -1.0889865060128252e+00 + -1.2094671337950218e+00 1.8911586927951578e+00 -1.1407368836528113e+00 + -1.2040679597828117e+00 1.9359583520671064e+00 -1.2080165476646261e+00 + -1.2000307461470345e+00 1.9868199191908049e+00 -1.2647057094363316e+00 + -1.2172952830500525e+00 2.0090980020805760e+00 -1.2772778679490422e+00 + -1.2412228341781870e+00 1.9743543376854262e+00 -1.2392480562592474e+00 + -1.2529835153110676e+00 1.8787733363169523e+00 -1.1593773157914895e+00 + -1.2395124296559603e+00 1.7468966080151997e+00 -1.0501793713193126e+00 + -1.1949271697859136e+00 1.6353698560038596e+00 -9.2197848468285881e-01 + -1.1318762828705595e+00 1.5503289537923663e+00 -7.7533946483434202e-01 + -1.0689247946336897e+00 1.3685501369164745e+00 -6.7575420510252315e-01 + -9.9973833095391307e-01 9.7887993280556818e-01 -7.5297423900750016e-01 + id 12642 + loc 9.8494541645050049e-01 9.3070179224014282e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4969976948443244e-01:5.4969427248673763e-01:1.2585325704117079e-01:3.1515750336749071e-01:9.8334405248518708e-01:4.5754334794576662e-01:1.7828454280779498e+00:2.6684392138844809e-01:2.1297127264360478e+00:2.7464033498527862e-01:3.0334140638302962e+00:3.9830074973816160e-01:3.8400037188952991e+00 + CVs 20 + 1.6573317110323960e-01 4.7331165429041910e-01 2.5085840013562027e-01 + 3.6566799190898680e-01 8.4991887671252475e-01 3.6517509531576575e-01 + 5.8897730692658357e-01 1.1865352330948851e+00 4.2487241443451235e-01 + 8.2925224020501132e-01 1.4930182661902114e+00 4.5193013973556584e-01 + 1.0783254850773609e+00 1.7523259602440346e+00 4.3607602983626637e-01 + 1.3171322525642282e+00 1.9351177378767976e+00 3.6399044588987883e-01 + 1.5136194773749703e+00 2.0068584959263740e+00 2.3345602993915693e-01 + 1.6287094861012728e+00 1.9477461483004048e+00 7.2431862565907390e-02 + 1.6290190980024124e+00 1.7699088528632685e+00 -6.1981784268815954e-02 + 1.5152909501138074e+00 1.5303594406429615e+00 -1.1370147020861915e-01 + 1.3378989284341598e+00 1.3011389108687168e+00 -7.9645193759742772e-02 + 1.1523853407841285e+00 1.1092140324533251e+00 -7.0065401899869761e-03 + 9.8220168551183185e-01 9.3756026827693528e-01 6.1089671432007941e-02 + 8.2673595811967837e-01 7.6181503944055362e-01 1.1130483572095326e-01 + 6.7468247095541189e-01 5.7736949314758623e-01 1.6844081123841406e-01 + 5.0395417967733502e-01 4.3961999450128342e-01 3.1454994419879767e-01 + 2.9734416370797734e-01 4.8169179599476147e-01 5.9984631375013442e-01 + 8.0444382434333911e-02 6.4844699886703117e-01 8.5191665819651663e-01 + -9.6238833600156865e-02 3.3103699240668988e-01 9.4526051810365530e-01 + id 12643 + loc 7.3515820503234863e-01 9.2780977487564087e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4499922007660275e-01:4.4499477008440202e-01:1.7199099804869322e-01:4.0330605687255688e-01:7.9443188168058032e-01:3.0359370096698657e-01:1.1024732153360084e+00:3.8468929872711033e-01:1.9952793322954636e+00:4.0413758703779878e-01:2.7025371503880069e+00:3.9817847613541490e-01:3.0376474957846216e+00:2.6825918923746939e-01:3.8352325472134279e+00 + CVs 20 + -1.2256057296483075e-01 2.8710470693692325e-01 5.4742830140967549e-02 + -2.4985571461518752e-01 5.8723460211448142e-01 1.2550310036162468e-01 + -3.9862632590327873e-01 8.9070148034967822e-01 2.2475908415299656e-01 + -5.7709057791156626e-01 1.1828272779440463e+00 3.6177703294358765e-01 + -7.8613676254289899e-01 1.4451342986035640e+00 5.4294106063437786e-01 + -1.0204479578444103e+00 1.6519032973751981e+00 7.7211109449777005e-01 + -1.2656540345359379e+00 1.7753264909853863e+00 1.0451032881993667e+00 + -1.5007309553419343e+00 1.7986449560157953e+00 1.3461840025941409e+00 + -1.7046549827375030e+00 1.7203343988138802e+00 1.6525763453616722e+00 + -1.8616722495843443e+00 1.5501892343352277e+00 1.9402041647702850e+00 + -1.9633739693002665e+00 1.3063368375436182e+00 2.1892622360075271e+00 + -2.0084218755996295e+00 1.0103638266098256e+00 2.3869663279402826e+00 + -2.0012873027833571e+00 6.8284567392206275e-01 2.5275206484581378e+00 + -1.9503749083066255e+00 3.4037191722293314e-01 2.6094186283318299e+00 + -1.8644682061318860e+00 -2.3887484264704106e-03 2.6240148283401563e+00 + -1.7387154336254760e+00 -3.0648208727253667e-01 2.5225300253483702e+00 + -1.5365502194966048e+00 -4.2492336809212539e-01 2.2055708143955135e+00 + -1.2316938053574655e+00 -1.0580616281089950e-01 1.7793775927549376e+00 + -1.1093514435121399e+00 -3.5062711703544458e-01 1.6154393311674895e+00 + id 12644 + loc 7.1991384029388428e-01 3.0354019999504089e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2924103950400544e-01:2.5421011027974244e-01:4.3062935793288548e-01:2.8925306670851991e-01:1.1399912297891306e+00:2.8014783656949444e-01:1.9931168797790813e+00:2.5796247306997727e-01:2.6651485514155069e+00:2.9950167831866409e-01:3.1859251862439186e+00:4.2923674709361043e-01:3.9996072477386444e+00 + CVs 20 + 3.0672180059125287e-01 3.3673011804697384e-01 -1.7977666027604272e-01 + 5.8078897710887512e-01 6.3729480820617768e-01 -3.6207663146939761e-01 + 8.3800155190877978e-01 9.2089182693079652e-01 -5.6876079649981870e-01 + 1.1080705970905789e+00 1.1966878432824444e+00 -7.8289418209812767e-01 + 1.4199040707397941e+00 1.4632895253542102e+00 -9.6403433396745386e-01 + 1.7840177266522113e+00 1.7108838371189352e+00 -1.0818601797616796e+00 + 2.1922407351441247e+00 1.9239049941420532e+00 -1.1176023904037593e+00 + 2.6232504172678262e+00 2.0807632136326255e+00 -1.0523644941380363e+00 + 3.0320808267519328e+00 2.1511171169889320e+00 -8.7421479368390331e-01 + 3.3600872862395268e+00 2.1145268363878373e+00 -6.0833896731167436e-01 + 3.5719693057784547e+00 1.9814668100497896e+00 -3.2110818669354568e-01 + 3.6677947996916216e+00 1.7869145052174109e+00 -9.0761825978250998e-02 + 3.6803653724610572e+00 1.5495094096185564e+00 5.6268371249701188e-02 + 3.6459323423258065e+00 1.2050269024527291e+00 1.6926816677404233e-01 + 3.5503308468287900e+00 7.0460088297497969e-01 3.0715366920313558e-01 + 3.3517605436465709e+00 1.1820747790098182e-01 5.5794113354317565e-01 + 3.0428650578782119e+00 -4.1408198396499152e-01 1.0203567128357309e+00 + 2.6635952925305828e+00 -7.3696243455987409e-01 1.6509039284876548e+00 + 2.3322668676750813e+00 -9.9392393576092908e-01 2.0460277795339739e+00 + id 12645 + loc 6.6402092576026917e-02 6.1011338233947754e-01 417 + blend 0.0000000000000000e+00 + interp 4.9807009139204350e-01:3.3939571498971716e-01:7.5407276332402096e-01:4.3301737616193942e-01:1.1640548221919316e+00:4.9806511069112963e-01:1.6548535096139152e+00:3.3934651367558227e-01:2.0447419182009403e+00:2.9271518633713567e-01:3.0000061093538699e+00:2.6442880196294882e-01:3.8931855733091192e+00 + CVs 20 + -1.6269192476389141e-01 1.9761855349037169e-01 -1.6563065981655728e-01 + -2.6335516292535399e-01 3.5433121480577184e-01 -2.6491906116468394e-01 + -3.4621870393389598e-01 4.8873833591390065e-01 -3.4701969265011279e-01 + -4.3853526742640192e-01 6.1934948745245755e-01 -4.3752055606656515e-01 + -5.4162078898029520e-01 7.4431061261509779e-01 -5.4075953619604866e-01 + -6.5595601805147230e-01 8.6043324808715682e-01 -6.6127939011921222e-01 + -7.8064236077481663e-01 9.6378535331245929e-01 -8.0283697702073331e-01 + -9.1300910528794232e-01 1.0507925801729656e+00 -9.6685108560978428e-01 + -1.0492703360903781e+00 1.1182281401079597e+00 -1.1526226010427538e+00 + -1.1876505273562230e+00 1.1610666478908771e+00 -1.3587453614220930e+00 + -1.3307336563635150e+00 1.1727471063835624e+00 -1.5820392363132265e+00 + -1.4821524475055026e+00 1.1507500915634155e+00 -1.8161279883271761e+00 + -1.6421140892077035e+00 1.0985544329202197e+00 -2.0543248216807743e+00 + -1.8067760611725405e+00 1.0202371606081666e+00 -2.2925707458763100e+00 + -1.9700175219449103e+00 9.1648570656685990e-01 -2.5292330074449159e+00 + -2.1251672284677365e+00 7.8404974058657428e-01 -2.7642426867100696e+00 + -2.2627729598062394e+00 6.1817407705047445e-01 -2.9995454308770113e+00 + -2.3688044371153349e+00 4.1692648183629699e-01 -3.2376822483130199e+00 + -2.4947027573938549e+00 2.5618564662289822e-01 -3.4586745609521063e+00 + id 12646 + loc 3.6029842495918274e-01 7.2643823921680450e-02 409 + blend 0.0000000000000000e+00 + interp 4.9843644323665415e-01:3.9291480536857648e-01:2.1922707005298081e-02:4.9843145887222179e-01:6.6158259973083111e-01:4.5728908248223471e-01:1.0455131953286925e+00:3.8345543548936223e-01:1.8040881813503753e+00:3.7562000589889838e-01:2.5942934410217973e+00:3.2711497470811185e-01:3.5031984885585477e+00 + CVs 20 + -1.8626034110533612e-01 1.8411266027656506e-01 -2.5563267863326666e-01 + -3.7535458385038623e-01 3.5778762063481356e-01 -4.9231087211561542e-01 + -5.5978491445827372e-01 5.3591005276218162e-01 -7.4070843047879409e-01 + -7.3489996152071835e-01 7.2291030306195014e-01 -1.0107890637055525e+00 + -9.0306867336418128e-01 9.1552512729697422e-01 -1.3017714207579221e+00 + -1.0643118149875663e+00 1.1141502152557801e+00 -1.6153994561440612e+00 + -1.2141368787015989e+00 1.3232001813646623e+00 -1.9590566554279234e+00 + -1.3457316368841381e+00 1.5420621896261286e+00 -2.3472426194609444e+00 + -1.4507417093607489e+00 1.7567498620624988e+00 -2.7920776583531963e+00 + -1.5213226415781800e+00 1.9456229579330269e+00 -3.2943284239173343e+00 + -1.5524965386112541e+00 2.0876629383081466e+00 -3.8478577693322498e+00 + -1.5434494319280048e+00 2.1610930388307552e+00 -4.4454106142839214e+00 + -1.4958209202560955e+00 2.1419113620262915e+00 -5.0753954503388838e+00 + -1.4083965706120418e+00 2.0101333024698200e+00 -5.7156818372328626e+00 + -1.2770543883723300e+00 1.7547059270525653e+00 -6.3359090777089317e+00 + -1.0998129800912719e+00 1.3718497534492253e+00 -6.9028175004038594e+00 + -8.8608771557916788e-01 8.7074721218142503e-01 -7.3778095890595541e+00 + -6.7259533707793606e-01 3.0567904390672229e-01 -7.7197525865152379e+00 + -6.2257066819546836e-01 -1.2342489967509529e-02 -7.8739152870876943e+00 + id 12647 + loc 3.3643476665019989e-02 1.6981753706932068e-01 411 + blend 0.0000000000000000e+00 + interp 4.3814770578333556e-01:3.2464078931982354e-01:3.4854076689572189e-05:3.3945981399895575e-01:7.4789200393774835e-01:4.2348463903987549e-01:1.0324338601604912e+00:4.3814332430627773e-01:1.6611149846289446e+00:2.7749983552862534e-01:2.1751251898216459e+00:3.9839816531162331e-01:2.8146367323177155e+00:3.2920324748049451e-01:3.3842328557698922e+00 + CVs 20 + -2.3479894717850380e-01 2.7991307778230934e-01 -6.4167939048314626e-01 + -4.5035188431766965e-01 4.7532910135095852e-01 -1.1239558894945676e+00 + -6.6847580536665796e-01 6.6133568962106404e-01 -1.6087301021847673e+00 + -9.0251627813747659e-01 8.5078216769148296e-01 -2.1524716050812214e+00 + -1.1726461632794918e+00 9.9972784507719270e-01 -2.7365988784082549e+00 + -1.5051119024688835e+00 1.0563938664759771e+00 -3.3303231140633933e+00 + -1.9208308482797498e+00 9.7484024036202466e-01 -3.9018128535575611e+00 + -2.4135308511993530e+00 7.1717157589950453e-01 -4.4233880644034418e+00 + -2.9345077234339469e+00 2.5462964947156896e-01 -4.8749963295488632e+00 + -3.3931536619411267e+00 -4.1610779485853566e-01 -5.2299868925305368e+00 + -3.6995091795913830e+00 -1.2280214276524284e+00 -5.4635825129834936e+00 + -3.8707725346170174e+00 -2.0557143177237398e+00 -5.6021367244840832e+00 + -4.0190345322901839e+00 -2.8203999082268725e+00 -5.7131994105578965e+00 + -4.2229130390196588e+00 -3.4903527510981283e+00 -5.8507241210673291e+00 + -4.4833151928892159e+00 -4.0438861844363778e+00 -6.0421234442951040e+00 + -4.7395601690078957e+00 -4.4809084761457649e+00 -6.2915395825167941e+00 + -4.9456230328771458e+00 -4.8129567593602918e+00 -6.5876646585837655e+00 + -5.1210096976055874e+00 -5.0623519841621523e+00 -6.9145790038133779e+00 + -5.3277576083162081e+00 -5.3009236478918460e+00 -7.2626275003127940e+00 + id 12648 + loc 1.1223603039979935e-01 3.7432956695556641e-01 406 + blend 0.0000000000000000e+00 + interp 6.1989180640520525e-01:3.6111645054106239e-01:2.1885957818094437e-02:4.6824080398875140e-01:7.0276255266244658e-01:3.7577743601580110e-01:1.0025884498689621e+00:6.1988560748714128e-01:1.6798398477626035e+00:5.8191237171968480e-01:1.9954379229952779e+00:4.0056069340411138e-01:2.2405418557889294e+00:3.4169949347866285e-01:2.9363586442588741e+00:4.8627917867549747e-01:3.3961591346826805e+00 + CVs 20 + -8.3888988052785954e-02 9.0554509814617379e-02 -6.2536376539751998e-04 + -1.2040429173543535e-01 1.1714390302418907e-01 2.4456130159460521e-02 + -1.3491156914260569e-01 1.3203433425536149e-01 8.1811112428116145e-02 + -1.3771521450922247e-01 1.4383049100621545e-01 1.2631355513306633e-01 + -1.3107847888993088e-01 1.5277431144042516e-01 1.5145651889083989e-01 + -1.1979380435488407e-01 1.5980701794514518e-01 1.5128869098753847e-01 + -1.1267371530292623e-01 1.6705461953714046e-01 1.2034193743038703e-01 + -1.2358387198496129e-01 1.7852451028710581e-01 5.7084398557574079e-02 + -1.6961180956765309e-01 2.0032042150497656e-01 -3.1486614888879050e-02 + -2.6309976144016284e-01 2.3943498730890966e-01 -1.2528210208614735e-01 + -4.0483439201603316e-01 3.0031315397738229e-01 -1.9573126564005977e-01 + -5.8000851611713344e-01 3.8467906522905670e-01 -2.1617664130218728e-01 + -7.5241872227893902e-01 4.8363757655728523e-01 -1.7121999262164739e-01 + -8.8507651932225107e-01 5.6354269902027632e-01 -6.5134803704812838e-02 + -9.6858595848732310e-01 5.7503335740229189e-01 9.3923827853000352e-02 + -9.9098869577747495e-01 4.8434953194275238e-01 3.0234435430901740e-01 + -9.1253669811551219e-01 3.2372367633523291e-01 5.2696549483516031e-01 + -7.2988294379957952e-01 1.7679269767806693e-01 7.1131748480415435e-01 + -6.0527671962105023e-01 1.7592895020596422e-01 7.5494575792097041e-01 + id 12649 + loc 7.1348869800567627e-01 7.0058155059814453e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5504987553678861e-01:2.4748073366809525e-01:6.8930240290182243e-02:3.7646119285373419e-01:9.6021060846691630e-01:4.5504532503803324e-01:1.5424030060480960e+00:3.7548547021944889e-01:2.0709651800294777e+00:4.4488127402841704e-01:2.5882982318415384e+00:3.7116422149503286e-01:2.9953945578726757e+00:3.9745397837545143e-01:3.7948688169588549e+00 + CVs 20 + 1.6067091238483591e-01 3.8432131830062416e-01 -3.2058315562258249e-01 + 3.4531679050290548e-01 7.3985543256734321e-01 -6.3733489098203566e-01 + 5.5028340372722351e-01 1.0568084076521089e+00 -9.5050815550587264e-01 + 7.7146789517252845e-01 1.3211543347444765e+00 -1.2594414771272873e+00 + 1.0025568420400743e+00 1.5166106999902367e+00 -1.5613465362864150e+00 + 1.2340632263190447e+00 1.6347743704560651e+00 -1.8511426018431516e+00 + 1.4604835471970932e+00 1.6855248928097311e+00 -2.1256813149449254e+00 + 1.6773745522021002e+00 1.6858114164649760e+00 -2.3804595457293094e+00 + 1.8781236522818421e+00 1.6511254053578548e+00 -2.6107683462894924e+00 + 2.0617415503759227e+00 1.5954446488961758e+00 -2.8274705663262818e+00 + 2.2382385222527428e+00 1.5259113160034508e+00 -3.0597988741808000e+00 + 2.4198085429391343e+00 1.4429459923008090e+00 -3.3374616555489331e+00 + 2.6046236078721985e+00 1.3514677495129392e+00 -3.6722010579074609e+00 + 2.7736713304450116e+00 1.2594451273430702e+00 -4.0636577356785191e+00 + 2.8976457455786111e+00 1.1655121121516847e+00 -4.5141959006151158e+00 + 2.9403117040466116e+00 1.0788508637984233e+00 -5.0157875694836545e+00 + 2.8712047765581983e+00 1.0396677421781244e+00 -5.5194796098875782e+00 + 2.7003004848804770e+00 1.0789054488271779e+00 -5.9612429648840797e+00 + 2.4584651419515793e+00 1.1262732424021917e+00 -6.4078096547942529e+00 + id 12650 + loc 6.0245466232299805e-01 4.1142067313194275e-01 403 + blend 0.0000000000000000e+00 + interp 4.4229104265514929e-01:4.4228661974472278e-01:2.6725454781294877e-01:3.7477637416227211e-01:1.0576134789234848e+00:4.1588270739838495e-01:1.9236941835721630e+00:4.1894090791399913e-01:2.3325676665321269e+00:4.2984307538291971e-01:3.0016982247442439e+00:3.1072609017013014e-01:3.9203096435275722e+00 + CVs 20 + -4.3926148561108339e-02 1.7198460814474962e-02 2.4785927311219730e-02 + -8.0214590182550033e-02 2.6540235355556031e-02 5.6747471167246294e-02 + -1.0739415440570670e-01 3.7003731725935143e-02 1.0052914872352942e-01 + -1.2632310812813952e-01 4.4084661132145000e-02 1.3407303326626036e-01 + -1.3953639373394155e-01 4.9047564191700796e-02 1.5600576150273174e-01 + -1.5099650124392500e-01 5.2814190234677691e-02 1.6563718140518394e-01 + -1.6766162317609001e-01 5.7018798013071040e-02 1.6212411682468147e-01 + -2.0204144961225912e-01 6.5778365417089896e-02 1.4732106068788056e-01 + -2.6770385462953794e-01 8.7238307539143800e-02 1.2618051453862580e-01 + -3.6340808451926010e-01 1.3128185701202749e-01 1.0550209798804358e-01 + -4.6440676591617702e-01 1.9663908749827597e-01 8.9504554568646116e-02 + -5.4441975320071667e-01 2.6560551883707501e-01 7.5177600822009916e-02 + -5.9493572687165508e-01 3.1865445674437187e-01 5.5892181049998456e-02 + -6.1859287789281181e-01 3.4208043142465250e-01 2.6994684818341656e-02 + -6.2025075746386804e-01 3.2656208041592755e-01 -1.2874975059727525e-02 + -6.0617653140286554e-01 2.7017080460850262e-01 -6.3012309745827499e-02 + -5.8717401316739748e-01 1.8293361791116947e-01 -1.2045688716433972e-01 + -5.7559049440950272e-01 8.0096707019249591e-02 -1.8183708922148506e-01 + -4.7876535870501113e-01 -8.9548037197802757e-02 -4.1190400935654958e-01 + id 12651 + loc 1.5828710794448853e-01 7.2222596406936646e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3484923295480815e-01:4.1153668034602320e-01:7.0836696996765669e-01:4.3484488446247860e-01:1.1883634546171820e+00:2.7592725067390445e-01:2.0015313782561868e+00:4.1099098986116511e-01:2.4321915586211453e+00:4.0880597775312849e-01:3.0935375033016701e+00:2.8578239271962858e-01:3.7585044036025161e+00 + CVs 20 + -2.0472822388464909e-01 8.4510582234226056e-02 2.7313357223054446e-01 + -3.3060881731226682e-01 8.4047415485049820e-02 4.1946679373758528e-01 + -3.9364263869642946e-01 3.3377742591928189e-02 4.7997380686519686e-01 + -4.3127561743785281e-01 -2.2467253137144705e-02 5.3802432514063869e-01 + -4.4828544998086989e-01 -7.6130591449608737e-02 5.9262077094255039e-01 + -4.5324096593620977e-01 -1.2323612857311517e-01 6.4069277512657863e-01 + -4.5672988095795108e-01 -1.6333470667516600e-01 6.7690530338079313e-01 + -4.6854116260630896e-01 -1.9882961948286593e-01 6.9483841969447835e-01 + -4.9689666960449780e-01 -2.3320560505781127e-01 6.8948533583809368e-01 + -5.4789866705874168e-01 -2.6895647904662789e-01 6.5840741046434748e-01 + -6.2443115861539944e-01 -3.0473778873089286e-01 6.0350943324177164e-01 + -7.2761342066415313e-01 -3.3671853354857773e-01 5.3102709363097522e-01 + -8.6466316712765390e-01 -3.7274275225089953e-01 4.4521356460847816e-01 + -1.0542311049286226e+00 -4.4604449568956306e-01 3.4470370474763312e-01 + -1.3137312546986391e+00 -5.8735551504577288e-01 2.3228032168024104e-01 + -1.6420990929369956e+00 -7.7968803145268273e-01 1.2348925213961220e-01 + -2.0217945608852514e+00 -9.7942949551363401e-01 3.6988435153713473e-02 + -2.4281372881978052e+00 -1.1577429772697592e+00 -1.1073906822795410e-02 + -2.7286737077655898e+00 -1.1942849240624429e+00 2.8586906852108351e-02 + id 12652 + loc 1.4959368109703064e-01 9.2859178781509399e-01 263 + blend 0.0000000000000000e+00 + interp 4.5636318155434602e-01:4.5635861792253052e-01:1.0054629988827348e+00:4.3393479028466192e-01:1.5360866692527284e+00:3.9726569340317019e-01:1.7766759038748607e+00:4.1686361988605136e-01:2.6722691432209214e+00:3.2760038928804974e-01:3.3411738215351390e+00 + CVs 20 + -6.9763182066909302e-01 4.7230663092166902e-01 -1.1329195325007201e-01 + -1.2947185857287178e+00 8.2637135870619072e-01 -1.9367993173167170e-01 + -1.8890831053807140e+00 1.0829821588601967e+00 -2.7343482307287037e-01 + -2.4358463628356906e+00 1.2638557702773683e+00 -3.8596836895796793e-01 + -2.8013127270560996e+00 1.3823851533042963e+00 -5.1435024204891455e-01 + -2.9865577725140420e+00 1.4589611224905172e+00 -5.9552259595823454e-01 + -3.0479771637199535e+00 1.5285241649347887e+00 -7.5025170665702734e-01 + -2.8792101421711700e+00 1.5300429644006643e+00 -1.0384021917199635e+00 + -2.4685062656854506e+00 1.3894793181139129e+00 -1.3701194791588283e+00 + -1.9017704162325773e+00 1.0703576923633789e+00 -1.6712867185814702e+00 + -1.2800887809354351e+00 5.8437132428788630e-01 -1.9037407089025373e+00 + -6.3829171751227354e-01 1.2698983572978884e-02 -2.0621845102221830e+00 + 6.3547247745591937e-02 -5.0262027682081156e-01 -2.1794686842792714e+00 + 8.1603543401916101e-01 -7.8813492891463421e-01 -2.3383343464010555e+00 + 1.4849685785592097e+00 -8.0486683699297212e-01 -2.5923155729739138e+00 + 2.0475530609644261e+00 -6.7988996289464632e-01 -2.9229843026113125e+00 + 2.5353891844731793e+00 -4.4242688549650577e-01 -3.3372563575950909e+00 + 2.9307171468778570e+00 -6.8212169225830621e-02 -3.8074211913265277e+00 + 3.2293016428024650e+00 5.2353949330858529e-01 -4.3644529178888716e+00 + id 12653 + loc 4.7118988633155823e-01 6.5144374966621399e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4047449601648908e-01:3.6473254587590159e-01:2.9872007490143504e-01:2.3521657293582107e-01:1.0856727363337930e+00:3.0652503819970034e-01:1.7692676519729433e+00:3.9120475572019919e-01:2.2492076094028590e+00:2.5572555446097806e-01:2.8875801964071171e+00:4.4047009127152892e-01:3.1071093613717431e+00:3.0569744428576034e-01:3.9998881189825264e+00 + CVs 20 + 8.3010677146788198e-02 3.4669057839159168e-01 -1.8631000622049998e-01 + 1.2084302447850773e-01 6.6463867956998468e-01 -3.8799780566660030e-01 + 1.3022836403544308e-01 9.6085573407744751e-01 -6.0716930352458798e-01 + 1.1521718218847421e-01 1.2349021442869823e+00 -8.4291490457589291e-01 + 7.1866369053028678e-02 1.4789960810583405e+00 -1.0900407844283366e+00 + -4.4562423228787784e-03 1.6841921076083763e+00 -1.3409107377726790e+00 + -1.1558043314361877e-01 1.8422084618980810e+00 -1.5858427410759739e+00 + -2.5619970843135353e-01 1.9503468371823913e+00 -1.8153177978855015e+00 + -4.1502016906701800e-01 2.0120858761151572e+00 -2.0220983354335273e+00 + -5.7999857714143599e-01 2.0359629144302729e+00 -2.2031422070937334e+00 + -7.4504222236627315e-01 2.0337099096605522e+00 -2.3610672403478579e+00 + -9.1231614144973960e-01 2.0154929771630989e+00 -2.5020221287968454e+00 + -1.0878553191649085e+00 1.9873586815058668e+00 -2.6316094659044880e+00 + -1.2767387271148081e+00 1.9536423404574517e+00 -2.7526087525659975e+00 + -1.4850677005843660e+00 1.9215838341353741e+00 -2.8654362122157662e+00 + -1.7389787016197520e+00 1.8979986136471103e+00 -2.9745771160828927e+00 + -2.0991114192100904e+00 1.8352186999137061e+00 -3.1009241665282277e+00 + -2.4870558778342251e+00 1.5926535925373579e+00 -3.2540043429488383e+00 + -2.5556058551811618e+00 1.4196204276546236e+00 -3.3175932182736676e+00 + id 12654 + loc 1.8258093297481537e-01 8.0964553356170654e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7477483803358141e-01:2.9472493904453534e-01:5.8703222662500987e-01:3.4149970159201459e-01:1.2169586333594153e+00:2.6532447640347018e-01:2.0009509784176469e+00:3.7477109028520111e-01:2.7531256067497152e+00:3.2199953263371967e-01:3.0709001183579137e+00:2.6349352763814149e-01:3.8250512435728847e+00 + CVs 20 + 2.4904077390663454e-01 2.9871866343844977e-01 -6.2420142246167487e-02 + 5.1072587378981527e-01 5.7536925058867094e-01 -1.6730490622375233e-01 + 7.7471252890923448e-01 8.3028439072461735e-01 -3.0278130945037179e-01 + 1.0292380840760138e+00 1.0503533018264011e+00 -4.6633632188584989e-01 + 1.2638881727212194e+00 1.2184754488069052e+00 -6.5821714899475847e-01 + 1.4649991229978991e+00 1.3197357250687860e+00 -8.7083773247455709e-01 + 1.6177871851131744e+00 1.3464883263452230e+00 -1.0881668534001436e+00 + 1.7105618193871595e+00 1.3030317736433341e+00 -1.2881507442793483e+00 + 1.7390485677114160e+00 1.2048780198608757e+00 -1.4466874552539344e+00 + 1.7115825966718226e+00 1.0765306065476781e+00 -1.5473226374771780e+00 + 1.6445998681717673e+00 9.4375339007301773e-01 -1.5895548997873534e+00 + 1.5505852504515987e+00 8.2672209639923500e-01 -1.5820481579277017e+00 + 1.4378628816517842e+00 7.3904196156004454e-01 -1.5396972461147664e+00 + 1.3147680611250132e+00 6.8253899424966269e-01 -1.4840056860214137e+00 + 1.1881538739182382e+00 6.5724437508814759e-01 -1.4198708143070384e+00 + 1.0760722353326480e+00 6.8570564407920276e-01 -1.3199224660663498e+00 + 1.0275935614455334e+00 7.8479596918007521e-01 -1.1609040837885556e+00 + 1.0872017126644404e+00 9.1511538619270771e-01 -9.6619109325522312e-01 + 8.1652855531595425e-01 8.7737039379654691e-01 -9.8162075451232167e-01 + id 12655 + loc 2.5442096590995789e-01 5.7406854629516602e-01 1084 + blend 0.0000000000000000e+00 + interp 4.7946560825293189e-01:3.4797862934937890e-01:6.3278006463329428e-01:4.7946081359684939e-01:1.0103577453184680e+00:2.8025135431121906e-01:1.7074950677020457e+00:2.5450285161960401e-01:2.8401822800343335e+00:3.2777467163674068e-01:3.3318454837658313e+00:2.7926823420469210e-01:3.9857208216355073e+00 + CVs 20 + -2.2443420111579659e-01 5.7797767870133354e-01 3.9275916703088237e-01 + -4.2926340649130595e-01 1.0703510121228117e+00 7.0530032987571012e-01 + -6.2901682705013029e-01 1.5146665258441612e+00 9.9559986835926884e-01 + -8.5642675742797225e-01 1.9226390635481669e+00 1.2647679070102269e+00 + -1.1307390597919142e+00 2.2819220980050798e+00 1.4834415060901529e+00 + -1.4501060398452463e+00 2.5771126742834043e+00 1.6265943338239870e+00 + -1.7903704550479591e+00 2.7929484053512725e+00 1.6765674630035130e+00 + -2.1096183355465423e+00 2.9181452744058531e+00 1.6274984796167562e+00 + -2.3673437799770967e+00 2.9531085061917919e+00 1.4984855632861194e+00 + -2.5632546191921977e+00 2.9113241279674318e+00 1.3229394047402350e+00 + -2.7195149962374408e+00 2.7935722780158523e+00 1.1134777654381123e+00 + -2.8386285321837237e+00 2.5923157319865489e+00 8.9479257842951010e-01 + -2.9229846592126441e+00 2.3316539335573498e+00 7.3607092051859224e-01 + -3.0014321942022342e+00 2.0431041770712337e+00 6.8720104056065889e-01 + -3.0968463075262060e+00 1.6958165809343186e+00 7.2830464081029700e-01 + -3.1769160935317302e+00 1.2349574704509936e+00 7.7644904109548485e-01 + -3.1735974807428931e+00 6.6324104679793239e-01 7.1089377003305632e-01 + -3.0725971340510920e+00 1.1406611714456061e-01 4.3838060761766451e-01 + -3.0301203569044186e+00 -1.3759433544537730e-01 1.4203650908897855e-01 + id 12656 + loc 7.2937846183776855e-01 3.7814387679100037e-01 377 + blend 0.0000000000000000e+00 + interp 1.4808030952352951e+00:2.2465877577419469e-01:4.1387539660549655e-01:3.9142341862468694e-01:9.5747281490081848e-01:7.8230958556356811e-01:9.9484279022485156e-01:1.4807930952352950e+00:2.6766986095606082e+00:1.1040943410515598e+00:2.8300212118040626e+00:6.9768492720277264e-01:3.0209386152850546e+00:4.2029867729330644e-01:3.3273228223451992e+00:3.7263271097037837e-01:3.9999267468821325e+00 + CVs 20 + 6.2437234098457572e-01 2.0012071449697352e-01 7.1571400731351620e-01 + 1.0725289183290312e+00 2.8209419199281116e-01 1.2032545011788685e+00 + 1.5026834529522075e+00 3.2545434026802322e-01 1.6327003107325140e+00 + 1.9841915861442245e+00 3.6853846955005815e-01 2.0849581949503166e+00 + 2.5161902756135177e+00 3.9906192152894837e-01 2.5676853591847748e+00 + 3.0980312151237923e+00 3.9984355850854625e-01 3.0756336768803685e+00 + 3.7266186986993852e+00 3.4720937866260659e-01 3.5863136154132804e+00 + 4.3747274532529499e+00 2.1051812542540027e-01 4.0769281002355200e+00 + 4.9982362691924038e+00 -2.9034162515516382e-02 4.5282532809090545e+00 + 5.5577500408274787e+00 -3.6453926963239325e-01 4.9176855488805096e+00 + 6.0299800025541597e+00 -7.6479150578626398e-01 5.2226452986555794e+00 + 6.4092374748624552e+00 -1.1872750407470392e+00 5.4341383548515081e+00 + 6.7051194742844409e+00 -1.5932149982255641e+00 5.5600403374863898e+00 + 6.9301181881815381e+00 -1.9606901146417881e+00 5.6046188286018612e+00 + 7.0892219954877387e+00 -2.2863053906693342e+00 5.5561826378192380e+00 + 7.1852101017916796e+00 -2.5841821001747038e+00 5.4220566639644261e+00 + 7.2227672389182551e+00 -2.8735994535372829e+00 5.2521579993962906e+00 + 7.2488633908321072e+00 -3.1566628573615398e+00 5.0922618678157843e+00 + 7.4391505363617796e+00 -3.4098975171990973e+00 4.9051085876284137e+00 + id 12657 + loc 1.3318803906440735e-01 8.9775294065475464e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8330995598714799e-01:4.1959424577466697e-01:4.5102956529780824e-01:2.6538252771418069e-01:1.1591631166636458e+00:4.3379694199295521e-01:1.9852778148879038e+00:4.8330512288758815e-01:2.4508457920336308e+00:4.8143059019630358e-01:3.0048497345110925e+00:3.3663286215842986e-01:3.6646701112658162e+00 + CVs 20 + 2.6948576500280019e-01 2.1224578275059963e-01 -1.3408950097668323e-01 + 5.3421399788852775e-01 4.4565067920669904e-01 -2.9710961562804861e-01 + 7.9291924879985154e-01 6.9629479795302884e-01 -4.8234771112462016e-01 + 1.0273645926316790e+00 9.6520748369122422e-01 -6.9656148356993008e-01 + 1.2082658098402530e+00 1.2473407205114362e+00 -9.5165425300447593e-01 + 1.3075828762917874e+00 1.5179907672970230e+00 -1.2527011190616779e+00 + 1.3121244809342247e+00 1.7352668053635787e+00 -1.5934353879763365e+00 + 1.2344194118113507e+00 1.8541738729563590e+00 -1.9564126895695322e+00 + 1.0998859076443621e+00 1.8440502793929936e+00 -2.3124010708203677e+00 + 9.2969313870502890e-01 1.7052689500652949e+00 -2.6234916781340782e+00 + 7.4533085719113734e-01 1.4683696777057103e+00 -2.8726930099809422e+00 + 5.7181971482868765e-01 1.1660418516535649e+00 -3.0875106292952066e+00 + 4.3298251338786237e-01 8.1166294578740683e-01 -3.3057085312084791e+00 + 3.6041447686603367e-01 4.1119283186540412e-01 -3.5497108327713085e+00 + 4.1951459180668693e-01 -3.5121486879084896e-02 -3.8304672166184135e+00 + 7.5904961919740521e-01 -5.1194943220357492e-01 -4.1238360602056110e+00 + 1.4817610770040865e+00 -8.6850537200497802e-01 -4.3013904857157321e+00 + 2.2215422009447345e+00 -9.9811194057981312e-01 -4.3103941441791163e+00 + 2.5430681576023848e+00 -1.1919300691853549e+00 -4.3825068713703956e+00 + id 12658 + loc 7.4399942159652710e-01 6.2157750129699707e-01 372 + blend 0.0000000000000000e+00 + interp 4.3379603287971358e-01:4.3379169491938480e-01:2.6029390411211994e-02:3.0136237738871202e-01:9.4974493666819237e-01:3.0003604978703224e-01:1.8041746701033472e+00:3.4706144583371112e-01:2.2500360630127005e+00:4.0437355785500850e-01:2.9169472461902242e+00:2.8133606771431202e-01:3.2559809398112707e+00 + CVs 20 + -3.7510338480309646e-01 5.1516027053456437e-01 -2.0664806437760702e-01 + -7.3013014366029827e-01 9.7478622309158625e-01 -4.0217600513132201e-01 + -1.0608439124927056e+00 1.3628048502874639e+00 -6.0300347472596960e-01 + -1.3114699884009053e+00 1.6496671865039292e+00 -7.8011435175929700e-01 + -1.4796297345875060e+00 1.8298766734296701e+00 -8.7092072739651683e-01 + -1.5972848485937301e+00 2.0074435408943927e+00 -9.4346546764926020e-01 + -1.5621904051884914e+00 2.1857122695388096e+00 -1.0884536516661583e+00 + -1.3311611401539407e+00 2.2829996296852340e+00 -1.2626478889465531e+00 + -9.4527721034907231e-01 2.2753734357316748e+00 -1.4153450406325658e+00 + -4.6684280059154237e-01 2.1548133689808262e+00 -1.5315948503052279e+00 + 2.1574760354443168e-02 1.9076901454660349e+00 -1.6197324880711423e+00 + 4.3699556107730964e-01 1.5040483363745110e+00 -1.6871340380678679e+00 + 7.6389788282462545e-01 9.1362936059230937e-01 -1.6848495700306816e+00 + 1.1134381411804961e+00 1.5305433827540937e-01 -1.5201301816098440e+00 + 1.7513629029633802e+00 -5.7705753803252602e-01 -1.2588291600985904e+00 + 2.7428227850718785e+00 -9.0941957969883247e-01 -1.2095791539269367e+00 + 3.8110338867704829e+00 -7.8677210740296633e-01 -1.5041348519912903e+00 + 4.6828346416435007e+00 -3.4947233617291396e-01 -2.0576159780073477e+00 + 5.2705258205333632e+00 2.6089988307587619e-01 -2.7336844614681968e+00 + id 12659 + loc 1.3198336958885193e-01 6.9760143756866455e-02 413 + blend 0.0000000000000000e+00 + interp 1.4482525237828237e+00:3.7210350355341909e-01:1.5513208451106031e-01:3.1180829343998168e-01:1.1481545824971326e+00:6.0531886942786106e-01:1.6291676314854937e+00:8.8632024806203857e-01:1.9584879360198379e+00:1.1528739294460484e+00:1.9970173260859492e+00:1.4482425237828236e+00:2.0050076502924612e+00:7.4332155019109269e-01:3.7429870225636765e+00:6.1253411803846169e-01:3.9950994007802754e+00 + CVs 20 + -2.1177929966290306e-02 1.9201629410939716e-01 -1.0481656133550112e+00 + -4.7485238903243021e-02 2.4391198398883038e-01 -1.7420206137496950e+00 + -5.3814378258075321e-02 2.2986819460753902e-01 -2.3303173033274036e+00 + -2.8017801081967823e-02 1.8911145923700068e-01 -2.9215126113516057e+00 + 2.9317152694919503e-02 1.2615151075319275e-01 -3.4988645509276233e+00 + 1.1433331741972276e-01 4.8970016803873917e-02 -4.0495322403839191e+00 + 2.2144798083265049e-01 -3.4363906798894450e-02 -4.5677494093265958e+00 + 3.4702039365941595e-01 -1.2086106363802140e-01 -5.0538211000408610e+00 + 4.9316368749038303e-01 -2.1000655986340955e-01 -5.5119649941403983e+00 + 6.6718187328440404e-01 -2.9043900907512077e-01 -5.9568903414586041e+00 + 8.6801971072338113e-01 -3.6539220437928721e-01 -6.4082922153924002e+00 + 1.0766150392427916e+00 -4.5696120204047719e-01 -6.8767264154503671e+00 + 1.2758138801089594e+00 -5.8890947629809332e-01 -7.3580268942783142e+00 + 1.4717524493983865e+00 -7.7489734748965078e-01 -7.8421830011318638e+00 + 1.6777493332923541e+00 -1.0246448722084209e+00 -8.3191203750139202e+00 + 1.8922928918265212e+00 -1.3454857324008191e+00 -8.7781592428984769e+00 + 2.1051643037007204e+00 -1.7394985897800859e+00 -9.2031373249054447e+00 + 2.3227707149465968e+00 -2.2000808030245809e+00 -9.5618729117975878e+00 + 2.4875949258438528e+00 -2.5402517467723973e+00 -9.6499728141182786e+00 + id 12660 + loc 6.7577838897705078e-01 6.5993940830230713e-01 411 + blend 0.0000000000000000e+00 + interp 3.8216603435076668e-01:3.4139381493485549e-01:2.9916218085561130e-01:3.8216221269042316e-01:9.9470452904268780e-01:3.4133024978185383e-01:1.3505059026751565e+00:3.4026141945154448e-01:1.9982467720700643e+00:3.2764394116360235e-01:2.9989844454190968e+00:3.2069133937053307e-01:3.6544382899322874e+00 + CVs 20 + 9.2598280996630045e-01 1.0247256819713688e-01 -2.7050051660573315e-01 + 1.5745503692987275e+00 6.8462623443476200e-02 -4.8954930377115463e-01 + 2.1606851345664815e+00 7.0509403282940086e-03 -6.5875332749629845e-01 + 2.7429668918980119e+00 -4.8879625412672101e-02 -7.7565694044105127e-01 + 3.3104277520542231e+00 -1.0249393107216764e-01 -8.4234102176651748e-01 + 3.8560800809259144e+00 -1.5816880049975812e-01 -8.6101736458722522e-01 + 4.3743710705036811e+00 -2.2244417414335760e-01 -8.2880411505685414e-01 + 4.8585544348981351e+00 -3.0512861895068299e-01 -7.4559370722364848e-01 + 5.3054194136440289e+00 -4.1777107918321565e-01 -6.1677470025707726e-01 + 5.7154173948940539e+00 -5.7325513651980065e-01 -4.5418308221083908e-01 + 6.0858424981042081e+00 -7.8310117052985895e-01 -2.7457261263195260e-01 + 6.4047218166083120e+00 -1.0498839063041945e+00 -9.3666571683755584e-02 + 6.6593313922214685e+00 -1.3675481995862497e+00 7.9047836365588098e-02 + 6.8438797920438548e+00 -1.7296918040675626e+00 2.3683533432137205e-01 + 6.9540168439276453e+00 -2.1241465894883254e+00 3.7052205605567234e-01 + 6.9858385677962431e+00 -2.5246513208457717e+00 4.7125241755368774e-01 + 6.9424870045565283e+00 -2.9095319095722845e+00 5.3755920227228537e-01 + 6.8319594018986063e+00 -3.2914101780335585e+00 5.7391570826443161e-01 + 6.6530476998540689e+00 -3.7395838827772030e+00 5.7565780325316074e-01 + id 12661 + loc 6.8014174699783325e-01 2.1591985225677490e-01 1081 + blend 0.0000000000000000e+00 + interp 4.9402417331589665e-01:4.2230114622407916e-01:8.9122843162325882e-04:4.2601899741101390e-01:6.9171365319057543e-01:3.9454710741901367e-01:1.1439011508236772e+00:4.9401923307416351e-01:1.6379439315563884e+00:2.5889752779872299e-01:3.6574889223340588e+00 + CVs 20 + 5.0442078130115836e-02 5.3595844694901773e-01 -4.5533813568388176e-01 + 6.2027371919709390e-02 9.3996632838485972e-01 -7.1024435706804601e-01 + 7.3263453577750659e-02 1.3003930474087588e+00 -8.9975261054071631e-01 + 1.0285603618822947e-01 1.6443698517069105e+00 -1.0772231413493323e+00 + 1.4422573601746980e-01 1.9617048839185949e+00 -1.2352603928460855e+00 + 1.9214428039467846e-01 2.2373628328102200e+00 -1.3631385650672754e+00 + 2.4367479366809475e-01 2.4527858208614672e+00 -1.4503073614354336e+00 + 2.9898789746582211e-01 2.5830398714228320e+00 -1.5040760543097798e+00 + 3.5704196923492382e-01 2.6119488913161755e+00 -1.5899609795579392e+00 + 4.0256294075185778e-01 2.6565374249694034e+00 -1.7399655124300319e+00 + 4.5500868068752959e-01 2.7344003050852947e+00 -1.7768494737195799e+00 + 5.3731905729369156e-01 2.7499544821991293e+00 -1.7083245101256781e+00 + 6.5001530999445278e-01 2.6932562910531859e+00 -1.5806048188683883e+00 + 7.8778933883003888e-01 2.5694524274362722e+00 -1.4128088246833550e+00 + 9.3989106477577600e-01 2.3884340178620880e+00 -1.2187912880505010e+00 + 1.0925817655917691e+00 2.1646678832195496e+00 -1.0185289089477481e+00 + 1.2375909463678241e+00 1.8884131865858707e+00 -8.4452004061247310e-01 + 1.3729432749664749e+00 1.5281588587747876e+00 -7.5160134005367796e-01 + 1.4899553296908414e+00 1.1443819524949235e+00 -7.6142783428076144e-01 + id 12662 + loc 8.9589190483093262e-01 1.0757833719253540e-01 409 + blend 0.0000000000000000e+00 + interp 5.1090268285217499e-01:4.2122648182930877e-01:7.7685659270081087e-02:4.0245167561179696e-01:9.3467878883901512e-01:4.7358275309418635e-01:1.1773386677500277e+00:4.5011287867918170e-01:1.7803009751788259e+00:5.1089757382534651e-01:2.0002429640919650e+00:2.7689412199394281e-01:2.9982418896973133e+00:3.6904052354995370e-01:3.7612643619100057e+00 + CVs 20 + -2.1059109000816301e-01 4.1333163237788947e-02 1.8014313948135216e-01 + -4.2235635907561647e-01 8.4875392878958067e-02 3.5978411696704538e-01 + -6.3237451275556134e-01 1.2914938762628003e-01 5.3240823147141370e-01 + -8.3880224134100922e-01 1.7359456998533529e-01 6.9376974558878435e-01 + -1.0413182948075941e+00 2.1841170416360633e-01 8.4241827816430259e-01 + -1.2393753400129668e+00 2.6516476038076064e-01 9.7840696689857887e-01 + -1.4284711310692191e+00 3.1889896096911530e-01 1.1017385108683913e+00 + -1.6046300218925860e+00 3.8514561786036783e-01 1.2107822061784588e+00 + -1.7727813934558541e+00 4.6557813303022588e-01 1.2986545279873845e+00 + -1.9427838510403492e+00 5.5876518309114498e-01 1.3584113831628737e+00 + -2.1275102495371438e+00 6.5566210380195677e-01 1.3988251282521631e+00 + -2.3414017370228750e+00 7.3062527764697149e-01 1.4424256562080764e+00 + -2.5894618450245956e+00 7.5518084415980646e-01 1.5031646940964440e+00 + -2.8665728491139921e+00 7.1532154279054661e-01 1.5816565821241413e+00 + -3.1607314204565080e+00 6.0982927068840520e-01 1.6781880850215003e+00 + -3.4553642733292969e+00 4.4338543924869911e-01 1.7939837915946979e+00 + -3.7354764752996896e+00 2.1761288380691268e-01 1.9202033610062101e+00 + -3.9907933626081418e+00 -7.0630833486681421e-02 2.0395772354553321e+00 + -4.2178480886113334e+00 -4.2260627470276013e-01 2.1426118247811106e+00 + id 12663 + loc 4.8723708838224411e-02 7.8240638971328735e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6956236035385973e-01:2.6372898007679929e-01:3.4696144829887010e-01:4.6955766473025623e-01:9.6609924536757696e-01:3.0461920839106571e-01:1.6556509630733831e+00:4.0239839268594757e-01:2.4213664587164665e+00:4.1181707776327126e-01:2.9563380166182851e+00:4.3484488446247860e-01:3.1902819224736696e+00:4.1340358601485616e-01:3.9885275100446114e+00 + CVs 20 + -1.2562947941108646e-01 3.1707539165297310e-01 2.8700244940283143e-01 + -2.0037635053244518e-01 5.3908434538070549e-01 3.9137703038268751e-01 + -2.8149118373956805e-01 7.2820022226161574e-01 4.4774174756313856e-01 + -3.9291070787812765e-01 9.1209702044173757e-01 5.1499743984652979e-01 + -5.3951062224569035e-01 1.0866010780431918e+00 5.8955165928239794e-01 + -7.2436808379071416e-01 1.2460840751044935e+00 6.6853918709217219e-01 + -9.4760308762100132e-01 1.3841958978982714e+00 7.5015633034367013e-01 + -1.2064587049842190e+00 1.4949226398477968e+00 8.3404249853973222e-01 + -1.4961650429975673e+00 1.5729673869335159e+00 9.2139315128908073e-01 + -1.8108130541060539e+00 1.6135437104960786e+00 1.0144689926002708e+00 + -2.1443328182415224e+00 1.6118228988367194e+00 1.1158997888570577e+00 + -2.4904514778672873e+00 1.5624449825798394e+00 1.2276136383130463e+00 + -2.8381013552920571e+00 1.4618118291954674e+00 1.3493374492068595e+00 + -3.1663211482883993e+00 1.3154710246921582e+00 1.4787481033626508e+00 + -3.4551854375750231e+00 1.1402247918190449e+00 1.6147291878190688e+00 + -3.7021836001666153e+00 9.5253597151969360e-01 1.7591484082909861e+00 + -3.9158287923071198e+00 7.6201803727485740e-01 1.9141224616683723e+00 + -4.1030228598963889e+00 5.7541523058579247e-01 2.0786628488912671e+00 + -4.3228990495914923e+00 3.6716492017546942e-01 2.2542534872010735e+00 + id 12664 + loc 9.8949307203292847e-01 5.8848035335540771e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5120520348955762e-01:4.4406255772981029e-01:4.6018549178452772e-01:3.8218506450519807e-01:1.0019138987368643e+00:3.2908045005322362e-01:1.6528512357104437e+00:3.6636520462397604e-01:2.0242018176277168e+00:4.5120069143752273e-01:2.9386334754285244e+00:4.3825070981404879e-01:3.5427778339659759e+00:3.4221419283243432e-01:3.9974368732449070e+00 + CVs 20 + 1.3050999474216357e-01 3.3128288102120640e-01 -1.5806293288356621e-01 + 2.5521161595372310e-01 6.6312966511079563e-01 -3.1390545206204701e-01 + 3.9563066489320253e-01 9.9927875374527775e-01 -4.6513950223831702e-01 + 5.7316976457115465e-01 1.3351843247481030e+00 -6.0957127192904903e-01 + 8.0251800907098891e-01 1.6579051456809890e+00 -7.4299804394461799e-01 + 1.0937685454359789e+00 1.9398150919550210e+00 -8.6358816515660020e-01 + 1.4382254472408802e+00 2.1478053690888861e+00 -9.7949495786359519e-01 + 1.8056928729121957e+00 2.2599145055055798e+00 -1.1073034889558422e+00 + 2.1576517231311878e+00 2.2802244711506829e+00 -1.2616145588929211e+00 + 2.4574977653307641e+00 2.2352361245807093e+00 -1.4450773782766122e+00 + 2.6712500807492709e+00 2.1457384109660533e+00 -1.6447183295020329e+00 + 2.7839009998269968e+00 2.0036223084802893e+00 -1.8458561863448351e+00 + 2.7986013734945230e+00 1.7834329517913963e+00 -2.0409008457443321e+00 + 2.7231485833886113e+00 1.5425218590847556e+00 -2.2123206182208230e+00 + 2.5796469642734619e+00 1.4058185904921923e+00 -2.3539140792367115e+00 + 2.3660496758140384e+00 1.3261548588729473e+00 -2.4854375140252514e+00 + 2.0172359160202418e+00 1.1505058441522600e+00 -2.6330023871728323e+00 + 1.6177537053569604e+00 9.0886721806347581e-01 -2.7801034020360382e+00 + 1.2971207169416399e+00 7.2727697174374173e-01 -2.9054009874151139e+00 + id 12665 + loc 9.0954937040805817e-02 1.6431647539138794e-01 406 + blend 0.0000000000000000e+00 + interp 5.6523445669034111e-01:3.4312180334728293e-01:8.5384033067265674e-01:4.1012350829971383e-01:1.4465789283358390e+00:4.1557281950486435e-01:2.0028640038619754e+00:5.6522880434577427e-01:2.4565737337848783e+00:3.5629479618730570e-01:3.0440616220408332e+00:4.7716450022809875e-01:3.5342862719921619e+00:4.1408637650616936e-01:3.9811869683081191e+00 + CVs 20 + -7.9345866014159730e-02 8.8777228944716735e-02 2.0522076288996702e-02 + -1.7107485560733757e-01 1.5199765953922498e-01 5.9146031233199704e-02 + -2.4782837432714824e-01 2.3535923131574565e-01 1.2386374370666479e-01 + -3.1668685294305315e-01 3.3852159006707716e-01 1.7473805926578062e-01 + -3.7713144509599772e-01 4.5224206977582615e-01 2.0758331504496205e-01 + -4.2851716768161852e-01 5.6808316593432429e-01 2.2242919689822802e-01 + -4.7027473894153266e-01 6.7943092058591659e-01 2.2112765460042036e-01 + -5.0143156004928990e-01 7.8201033701784017e-01 2.0607957378057440e-01 + -5.2029959210047161e-01 8.7347531075078233e-01 1.7923984642154395e-01 + -5.2473591003507969e-01 9.5248203119807506e-01 1.4226810855811972e-01 + -5.1263080639404968e-01 1.0175921107677974e+00 9.6272264746992686e-02 + -4.8272499743348279e-01 1.0656995675235843e+00 4.1545002135922382e-02 + -4.3447076835583820e-01 1.0933723887843358e+00 -2.1418276196202179e-02 + -3.6815982182688933e-01 1.0964788360855089e+00 -9.1256062249279957e-02 + -2.8460772397231371e-01 1.0682539317158348e+00 -1.6462272949592577e-01 + -1.8486879504971648e-01 1.0012308905673049e+00 -2.3759872980905994e-01 + -6.9724130439083251e-02 8.9234003255658778e-01 -3.0841787137318510e-01 + 6.0847740863076080e-02 7.4676734976739945e-01 -3.7876247571769128e-01 + 1.2122686573634989e-01 5.4793668627102221e-01 -4.7245187693164520e-01 + id 12666 + loc 1.6942995786666870e-01 3.9662271738052368e-02 414 + blend 0.0000000000000000e+00 + interp 5.9112980255519236e+00:4.4590762960642466e-01:1.1673693498269633e-02:5.6506561786484977e-01:4.5742782237870394e-01:5.0859053856782366e-01:9.4828565627787076e-01:3.7679273652481687e-01:1.2317696056032736e+00:6.3538433566064167e-01:1.8794114813692429e+00:1.0519252411812130e+00:1.9182883314030295e+00:4.1227573521976957e-01:1.9944321010644517e+00:5.9112880255519240e+00:3.9330301290607101e+00:5.1515097131977212e+00:3.9440521719482171e+00:1.1113698374232035e+00:3.9987828992618555e+00 + CVs 20 + -1.0692774093497477e-01 1.7490604650935337e-01 -9.7418082186566834e-01 + -2.3314073324880130e-01 1.6930058657629493e-01 -1.5932039988532356e+00 + -3.5595748883660072e-01 1.0287070022675487e-01 -2.1192469256856232e+00 + -4.7303134839545197e-01 1.6538203639224147e-02 -2.6556875335076051e+00 + -5.7631774638681588e-01 -9.1842630378295875e-02 -3.1936337527169694e+00 + -6.5590157118011039e-01 -2.2358510032029877e-01 -3.7279305540646104e+00 + -7.0278162933788368e-01 -3.8000696221030672e-01 -4.2533297925947817e+00 + -7.1268009631854046e-01 -5.6250667896569950e-01 -4.7621745723683233e+00 + -6.8635044517836064e-01 -7.7144617132685478e-01 -5.2464217065334990e+00 + -6.2995067238337132e-01 -1.0051857793498045e+00 -5.6982323564455317e+00 + -5.6422551682682864e-01 -1.2621566853992359e+00 -6.1059994130688953e+00 + -5.2885063632471385e-01 -1.5439705279479372e+00 -6.4531830017329881e+00 + -5.5686513952950911e-01 -1.8527825529146298e+00 -6.7280084806406499e+00 + -6.4906130782929028e-01 -2.1865171545003359e+00 -6.9372053837315057e+00 + -7.9244803700426403e-01 -2.5397955727156112e+00 -7.0859575866414293e+00 + -9.7728088150987069e-01 -2.8897708357493914e+00 -7.1642037042398830e+00 + -1.1909699670177982e+00 -3.2050093998894376e+00 -7.1668751863695963e+00 + -1.4147605460829649e+00 -3.4730375315146622e+00 -7.1098281043468017e+00 + -1.6266254237323245e+00 -3.8245874152419370e+00 -7.0996329749580607e+00 + id 12667 + loc 9.3605840206146240e-01 2.1249361336231232e-01 1078 + blend 0.0000000000000000e+00 + interp 5.3664081440273126e-01:4.3481356343040867e-01:1.5173990934689996e-01:5.3663544799458729e-01:8.7615218683939711e-01:4.7108302446491962e-01:1.1264634469806212e+00:3.7314788076212035e-01:1.6307932635899103e+00:4.7344116368510025e-01:2.0095114740332436e+00:4.1741165209619724e-01:2.7586271369315796e+00:4.2303938166551502e-01:3.4207280984129493e+00:4.6299766047764224e-01:3.9542356107353904e+00 + CVs 20 + -1.9701883008211588e-01 3.1573761869382300e-01 1.3816214094707169e-01 + -3.7485470853173791e-01 6.4099294757284386e-01 2.7552531678178083e-01 + -5.5674080788902425e-01 9.5111938934345652e-01 4.4055996873913461e-01 + -7.5261478868931220e-01 1.2276913089177781e+00 6.4488616676767851e-01 + -9.6418825234872330e-01 1.4596144799263167e+00 8.8762263749518877e-01 + -1.1908270175777542e+00 1.6330700988078415e+00 1.1631956750292705e+00 + -1.4271031748404550e+00 1.7332638156165767e+00 1.4609336739701235e+00 + -1.6622475269303794e+00 1.7510785611072617e+00 1.7654436239781113e+00 + -1.8824759257211403e+00 1.6870332865281001e+00 2.0584000167934997e+00 + -2.0749724837588541e+00 1.5503783705526908e+00 2.3213655475546240e+00 + -2.2313916579957778e+00 1.3565444423311557e+00 2.5391061308260250e+00 + -2.3502703977216521e+00 1.1236253631200541e+00 2.7036622277969511e+00 + -2.4374244051516865e+00 8.6717442115258214e-01 2.8165684391959211e+00 + -2.5020601779956251e+00 5.9829796035696869e-01 2.8843551465167896e+00 + -2.5499662452298582e+00 3.3371896771614185e-01 2.9055254880808543e+00 + -2.5730467370641144e+00 1.3453099355474452e-01 2.8495821418789875e+00 + -2.5436938144319590e+00 1.7558544946404475e-01 2.6894472107006919e+00 + -2.4759525632385100e+00 5.7049071734908685e-01 2.6086141487957439e+00 + -2.4871483921193986e+00 3.8386517856356861e-01 2.4121978492809655e+00 + id 12668 + loc 7.2610396146774292e-01 4.2563849687576294e-01 1084 + blend 0.0000000000000000e+00 + interp 4.5537507359387419e-01:2.7982954118019898e-01:2.3221447975777154e-01:4.5537051984313826e-01:8.5542749187517597e-01:2.9506028863747596e-01:1.6626675544326051e+00:4.2923674709361043e-01:1.9999893394915831e+00:3.9810180578359744e-01:2.4486049678984809e+00:2.6512862902159429e-01:3.0519356165268325e+00 + CVs 20 + 3.2003309343856945e-01 3.4261415249436372e-01 -2.2364999550476405e-01 + 6.0207663280356671e-01 6.6074236369889816e-01 -4.1727906476977827e-01 + 8.6118890277312388e-01 9.6593800063083601e-01 -5.9185296364566109e-01 + 1.1188124764077541e+00 1.2552708843815887e+00 -7.2780631118678396e-01 + 1.3849428631008180e+00 1.5131638587260101e+00 -7.9886042640172383e-01 + 1.6524690348434072e+00 1.7249286292266344e+00 -7.9712031471816458e-01 + 1.9002236990301660e+00 1.8793821155224757e+00 -7.3349998619988477e-01 + 2.0975347660813100e+00 1.9729057803050236e+00 -6.3718994205004020e-01 + 2.2253956352473705e+00 2.0199381438755517e+00 -5.4355483225417367e-01 + 2.2954372945605575e+00 2.0417870184330971e+00 -4.5155422463180506e-01 + 2.3121821463302532e+00 2.0517977326713948e+00 -3.3694331977282332e-01 + 2.2698048130763673e+00 2.0660046839671704e+00 -1.8336507373855482e-01 + 2.1850368159551299e+00 2.0511009451881859e+00 1.4520100891204146e-02 + 2.0963397180436751e+00 1.9298696878214971e+00 1.8166150550006588e-01 + 2.0239185961147417e+00 1.7037243650307063e+00 2.3817894702374032e-01 + 1.9509958809011421e+00 1.3864237241307671e+00 2.1908269924824364e-01 + 1.8308861998125618e+00 9.6668917800820231e-01 2.4288978259500738e-01 + 1.6477236787745848e+00 5.4849985911126531e-01 4.2815955853968146e-01 + 1.4533577845338532e+00 3.8728462070131731e-01 7.5096033652498873e-01 + id 12669 + loc 4.6818754076957703e-01 6.9698649644851685e-01 372 + blend 0.0000000000000000e+00 + interp 4.6133940103887278e-01:4.6133478764486241e-01:1.8546311054383835e-01:3.0213995885745287e-01:9.4052278347608076e-01:3.2677666372255920e-01:1.5511072837805733e+00:3.4937026944435789e-01:2.0714094217590029e+00:3.0108430932226249e-01:2.9376048603763651e+00:2.8926874761726162e-01:3.8064758833661934e+00 + CVs 20 + -3.2381788423682117e-01 6.1252297575375259e-01 -2.3633842366587557e-01 + -6.6326931882817486e-01 1.2311862285461115e+00 -4.6322794027302289e-01 + -9.8097843607238300e-01 1.8226912608321213e+00 -7.2278044730088664e-01 + -1.1195390051981429e+00 2.3304996005082930e+00 -1.0505029122312812e+00 + -9.3916859673473718e-01 2.6302399029712893e+00 -1.3970586371258202e+00 + -5.3761195355151981e-01 2.6741931258366423e+00 -1.6727455417754795e+00 + -3.1739109946091304e-02 2.5108658351490543e+00 -1.8692057913592293e+00 + 5.2524392876164949e-01 2.1670116684045926e+00 -1.9980669663956054e+00 + 1.0561803786531359e+00 1.6464261265682714e+00 -2.0542872997179100e+00 + 1.4578716460561676e+00 9.9259601757643989e-01 -2.0330913897195377e+00 + 1.6919797113523081e+00 3.0683753818754400e-01 -1.9442977652924232e+00 + 1.8435089341139785e+00 -3.2658518225931521e-01 -1.8057790156312070e+00 + 2.0574820379455123e+00 -9.1967584561407678e-01 -1.6416729965397348e+00 + 2.5052344975648060e+00 -1.5032387553274353e+00 -1.4586480211674691e+00 + 3.3240499263907832e+00 -1.9740336587886946e+00 -1.3172196277828876e+00 + 4.3774258984833487e+00 -2.1500634899296927e+00 -1.3352702912162642e+00 + 5.4711832277319203e+00 -1.9630485775147080e+00 -1.5706610044637275e+00 + 6.3616597727149600e+00 -1.4757571347571861e+00 -1.9918554274754763e+00 + 6.7574973491448391e+00 -1.0033751860309890e+00 -2.3916441910241688e+00 + id 12670 + loc 2.6788866519927979e-01 9.2720645666122437e-01 403 + blend 0.0000000000000000e+00 + interp 4.4533975078371257e-01:2.7706736143826488e-01:1.7745363015985671e-01:3.0373703405643876e-01:9.7435027218957893e-01:3.7459361094892962e-01:1.6481809672160825e+00:2.7492488461470205e-01:2.0791707098173773e+00:4.1656491360055792e-01:2.6790650009829422e+00:4.2231410476734682e-01:3.0070850221291723e+00:4.4533529738620475e-01:3.9219252702771490e+00 + CVs 20 + -5.9284968955106640e-03 1.2908819928050802e-01 -3.1764322170637488e-02 + -2.6339220135678257e-02 2.4822585363404615e-01 -7.8594973928745926e-02 + -6.3134108163014624e-02 3.6917719977596153e-01 -1.1195175607374175e-01 + -1.1518709409650579e-01 4.8657598171530969e-01 -1.2892665446492238e-01 + -1.8165241306735516e-01 5.9770638045011615e-01 -1.2887863413564793e-01 + -2.5874427359755714e-01 7.0096794354520842e-01 -1.0978979438009003e-01 + -3.4080257667236047e-01 7.9577145890227730e-01 -6.8933304593793002e-02 + -4.2194224026214056e-01 8.8185654423654003e-01 -4.1732862177365337e-03 + -4.9572121273128944e-01 9.5903271472528706e-01 8.5480323472043873e-02 + -5.5381827841151499e-01 1.0275506049491769e+00 1.9915929828079693e-01 + -5.8706688645779870e-01 1.0884221927162070e+00 3.3345504495841710e-01 + -5.8737510529739501e-01 1.1435291959636786e+00 4.8185053871544992e-01 + -5.4982697548757353e-01 1.1954841477099416e+00 6.3554510360811767e-01 + -4.7540575973595223e-01 1.2470614248729284e+00 7.8621053371695948e-01 + -3.7133001822609074e-01 1.3006434446132566e+00 9.2942230697654837e-01 + -2.4636638914422015e-01 1.3575674320223166e+00 1.0634328610100461e+00 + -1.0651045261309688e-01 1.4175898845558983e+00 1.1824760636604803e+00 + 4.2173136960046764e-02 1.4789515965078577e+00 1.2790675693112852e+00 + 1.4683866559017766e-01 1.5467086045535474e+00 1.4342419593685514e+00 + id 12671 + loc 3.0175936222076416e-01 9.4368970394134521e-01 1076 + blend 0.0000000000000000e+00 + interp 4.4974596519641674e-01:2.6330518816458909e-01:1.7843157231521589e-01:3.6071843723989022e-01:1.1950801871997181e+00:2.4624516987689801e-01:2.0017950994233571e+00:2.8164849783365875e-01:3.0033686393938233e+00:4.4974146773676482e-01:3.6786388435929780e+00 + CVs 20 + 3.0152742540317629e-01 2.8738911893884728e-01 -5.0229027298196033e-02 + 6.0849760519601093e-01 5.8402352994068052e-01 -9.9046450068367070e-02 + 9.2334795462915464e-01 8.8623445038356985e-01 -1.4895684002752316e-01 + 1.2496455039421137e+00 1.1838821089283369e+00 -2.1522398801411108e-01 + 1.5904874099742263e+00 1.4642397608672177e+00 -3.2160470602491575e-01 + 1.9441222913783645e+00 1.7121496741358762e+00 -4.9420381397782676e-01 + 2.2995428623488312e+00 1.9078194390498091e+00 -7.5087531411145703e-01 + 2.6376831901197355e+00 2.0313989050407328e+00 -1.0906413691942831e+00 + 2.9413426645763541e+00 2.0693264759803940e+00 -1.4933202849041356e+00 + 3.2053582266313061e+00 2.0187391201320528e+00 -1.9249225884393177e+00 + 3.4347502967546126e+00 1.8831428426291543e+00 -2.3546669173686725e+00 + 3.6305581234975404e+00 1.6649089202964649e+00 -2.7664579494730690e+00 + 3.7755045076159353e+00 1.3741077256052741e+00 -3.1638086777177095e+00 + 3.8259855176870099e+00 1.0433015117513151e+00 -3.5781129056612655e+00 + 3.7264348535294283e+00 7.1649441842189199e-01 -4.0342604273595084e+00 + 3.4521395462256126e+00 4.4746256343599644e-01 -4.5092052611427373e+00 + 3.0195373463461133e+00 2.8543484695514110e-01 -4.9577582230865227e+00 + 2.5690107758288172e+00 2.3413867165040969e-01 -5.3393095062758418e+00 + 2.5113230852932809e+00 1.7027402767109256e-01 -5.6456609072871187e+00 + id 12672 + loc 6.9564598798751831e-01 9.3927091360092163e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1726693802651865e-01:4.1726276535713841e-01:3.2483028549958437e-01:3.9466829957009431e-01:1.0126561311417550e+00:3.8445300938146515e-01:1.8632254707545330e+00:3.4453177346019098e-01:2.1045883130769658e+00:3.1192790237412132e-01:2.9282765604543597e+00:3.5056104352508888e-01:3.7667147994763512e+00 + CVs 20 + 2.0746736423240253e-01 3.6330460810341031e-01 -4.0837777720814056e-01 + 4.0882382970894265e-01 7.2386219206610902e-01 -7.9102778980594046e-01 + 6.1681119320460609e-01 1.0641757029103782e+00 -1.1462049146349584e+00 + 8.3713121988778205e-01 1.3668835454179475e+00 -1.4747266470440616e+00 + 1.0679768056573642e+00 1.6111733272168443e+00 -1.7759356610014185e+00 + 1.3016714100267612e+00 1.7781624556768771e+00 -2.0479324051324852e+00 + 1.5284902604018671e+00 1.8639315572729849e+00 -2.2866239249346085e+00 + 1.7439738997153513e+00 1.8844678125217942e+00 -2.4906367919072214e+00 + 1.9517902525141886e+00 1.8623823076895802e+00 -2.6667833362409006e+00 + 2.1606397022889197e+00 1.8115084331868485e+00 -2.8270586683787284e+00 + 2.3791897783173201e+00 1.7327797563936866e+00 -2.9809024718002761e+00 + 2.6119880327103946e+00 1.6184279338755525e+00 -3.1328036334051959e+00 + 2.8547510352314265e+00 1.4610550521961398e+00 -3.2805430813305931e+00 + 3.0988380115020315e+00 1.2650250584854452e+00 -3.4167716453740580e+00 + 3.3468139651496176e+00 1.0328350171406835e+00 -3.5431894453213593e+00 + 3.6074513624140963e+00 7.2693582605057716e-01 -3.6964191891825995e+00 + 3.8470731990324292e+00 3.0348551413089586e-01 -3.9392441682273320e+00 + 3.9810232428560139e+00 -1.8326414647651501e-01 -4.3063896001921771e+00 + 3.9062050244766398e+00 -4.6777666650550853e-01 -4.5912354772220327e+00 + id 12673 + loc 9.4590878486633301e-01 7.1818053722381592e-02 406 + blend 0.0000000000000000e+00 + interp 5.3880283601883827e-01:3.5481378420204673e-01:1.9910127411067968e-01:3.7824560717152150e-01:9.3719150172918209e-01:3.4180693180051280e-01:1.3596676147459474e+00:5.3879744799047813e-01:1.9964193812725228e+00:4.1995300351702108e-01:2.4260024329723100e+00:3.2024517627719351e-01:2.9436459517713489e+00:2.7705242440239902e-01:3.3879176287591246e+00 + CVs 20 + -8.8865332628944055e-02 1.8667077168260732e-01 7.2731102651837909e-05 + -1.3339472047960238e-01 3.2901260552297440e-01 -3.6972867163888257e-02 + -1.7927829450528004e-01 4.6285557694114432e-01 -7.9727851296569091e-02 + -2.4201151193711121e-01 5.9631224983431497e-01 -1.1670685289291224e-01 + -3.2232018351976111e-01 7.2782649553968026e-01 -1.4719174770219665e-01 + -4.1918560584616826e-01 8.5582045883410296e-01 -1.7063823998355779e-01 + -5.2910807274954075e-01 9.7883686210998733e-01 -1.8728872779956224e-01 + -6.4669805142793424e-01 1.0965110934761051e+00 -1.9838241902666032e-01 + -7.7003089021050708e-01 1.2109420072204218e+00 -2.0425701732164880e-01 + -9.0578419284274347e-01 1.3254532028801189e+00 -2.0202730290756088e-01 + -1.0603768534486189e+00 1.4402822478750772e+00 -1.8722968605857659e-01 + -1.2264006922058566e+00 1.5532255128279395e+00 -1.5841774612416770e-01 + -1.3916611978042615e+00 1.6649519995326481e+00 -1.1777577334863976e-01 + -1.5539498012837123e+00 1.7774856634227985e+00 -6.7327138641104844e-02 + -1.7180751743867075e+00 1.8908112691386791e+00 -7.8117936174356695e-03 + -1.8860868441638616e+00 2.0037962329151897e+00 6.0499449816437512e-02 + -2.0554008685448206e+00 2.1156030903806951e+00 1.3763872000997734e-01 + -2.2203431314691486e+00 2.2253023242534957e+00 2.2174646063618653e-01 + -2.3210258795868857e+00 2.3389197916871973e+00 2.8023498643084332e-01 + id 12674 + loc 1.9268105924129486e-01 9.8639123141765594e-02 411 + blend 0.0000000000000000e+00 + interp 4.3910632560275259e-01:3.4859285868308998e-01:3.1862843674258323e-01:2.7246674499017898e-01:1.0523768387950583e+00:3.5230448765996975e-01:1.9667979692211603e+00:2.8966184577162174e-01:2.5941157233300167e+00:3.2011825522977888e-01:3.1627535647852714e+00:4.3910193453949659e-01:3.9707568917791720e+00 + CVs 20 + -2.5604581447671426e-01 2.4849725500195952e-01 -6.6212955257089690e-01 + -4.6950848294205511e-01 4.0671071667128644e-01 -1.1687513742112114e+00 + -6.6292062835121845e-01 5.4759443403927033e-01 -1.6660950165812780e+00 + -8.4853869876651644e-01 6.8749537739293065e-01 -2.2023805915793337e+00 + -1.0486571231094346e+00 8.0154237519092419e-01 -2.7658333325185960e+00 + -1.2975695385128510e+00 8.5964053826085673e-01 -3.3408237289209439e+00 + -1.6235373816273564e+00 8.3238017462370562e-01 -3.9008584018639945e+00 + -2.0297392456043872e+00 6.9730622508017182e-01 -4.4111454202882321e+00 + -2.4924470199718183e+00 4.4314828878366530e-01 -4.8457015004825346e+00 + -2.9702224240716766e+00 6.6941405159598677e-02 -5.1928543139234176e+00 + -3.4070054469295377e+00 -4.2250477793015540e-01 -5.4529642118413113e+00 + -3.7696989613873804e+00 -9.9707814490778546e-01 -5.6234437804766468e+00 + -4.0825117489424274e+00 -1.6149086225506983e+00 -5.7055941711867932e+00 + -4.3995251571368756e+00 -2.2390468120814475e+00 -5.7116182926161141e+00 + -4.7665781138129670e+00 -2.8487936379344183e+00 -5.6600019873841170e+00 + -5.2104106940481127e+00 -3.4498703957136851e+00 -5.5772039095132486e+00 + -5.7237363985527052e+00 -4.0694334023606835e+00 -5.4982425483449475e+00 + -6.2626385038596526e+00 -4.7237458986165981e+00 -5.4533285785457046e+00 + -6.7754542677488683e+00 -5.3828674454567533e+00 -5.4275423104309510e+00 + id 12675 + loc 9.7282612323760986e-01 2.7189385890960693e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2180410431172605e-01:2.5608674485222910e-01:1.1586850798497639e-02:4.2179988627068293e-01:7.2483536349039424e-01:3.8526671820538927e-01:1.0268891543640966e+00:2.1928648957441310e-01:1.8614578362600231e+00:3.2965511437785400e-01:2.7200435323192118e+00:2.5194640794896439e-01:3.0636086870887915e+00 + CVs 20 + -4.4798577224062108e-02 4.4876819257541611e-01 -1.9612097388497235e-01 + -1.3693044381264449e-01 7.7558490012784076e-01 -2.6928344491873557e-01 + -2.4552419237989473e-01 1.0724115093316433e+00 -2.9934556496865145e-01 + -3.4223123547326550e-01 1.3448424916154322e+00 -3.2440728851377520e-01 + -4.2728169250869952e-01 1.5732102435031958e+00 -3.4181455040765424e-01 + -4.9817156372097487e-01 1.7239710488724493e+00 -3.5758189751612590e-01 + -5.4866820844898923e-01 1.7635818811229949e+00 -3.9900499121820965e-01 + -5.7477039009959452e-01 1.6954118365600861e+00 -5.3262658443606292e-01 + -5.9077604516582904e-01 1.6141818097701979e+00 -8.2959146313327281e-01 + -6.3173032194247858e-01 1.6656801336447280e+00 -1.2029082366391779e+00 + -6.9967501053094594e-01 1.8212527602120168e+00 -1.4588438404599238e+00 + -7.6470313590435068e-01 1.9608812081525397e+00 -1.5619684325571888e+00 + -8.0752850905793283e-01 2.0364731141094539e+00 -1.5657304786753916e+00 + -8.2195754641507157e-01 2.0514030825323832e+00 -1.5173220920995047e+00 + -8.1127707714011799e-01 2.0370273285195100e+00 -1.4471183276331208e+00 + -7.9024522108956496e-01 2.0711488576214867e+00 -1.3675743862953791e+00 + -7.7427354724488806e-01 2.2408165491083007e+00 -1.2411507586022623e+00 + -7.5363711371390596e-01 2.4010128128003405e+00 -1.0527796980511379e+00 + -6.9462349795057210e-01 2.0346879679583005e+00 -1.2160109176612233e+00 + id 12676 + loc 8.3889722824096680e-01 6.7734962701797485e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5242873226574065e-01:4.5242420797841804e-01:8.0821630230000552e-02:4.0357394394649387e-01:7.7341302918635180e-01:4.5186326989534636e-01:1.3661280943731045e+00:3.9541347467588200e-01:2.0989947399517654e+00:3.5052172578223367e-01:2.9830232291593308e+00:3.9590971897990351e-01:3.7255591025842030e+00 + CVs 20 + -2.8498607055464233e-02 2.9612380513576286e-01 1.4492329496023931e-01 + -3.4583563382486505e-02 5.3061609451262470e-01 1.8798499508084568e-01 + -5.5507991480264612e-02 7.5311365696379484e-01 2.0801413042986783e-01 + -1.0406387945017508e-01 9.7261712352916452e-01 2.2322470522836774e-01 + -1.8038061591528037e-01 1.1807052431904355e+00 2.2579639478033670e-01 + -2.8482703240969925e-01 1.3649565931014951e+00 2.0725573007083220e-01 + -4.1575131541629895e-01 1.5107113458941837e+00 1.6178978056228988e-01 + -5.6722681781506590e-01 1.6044053992729390e+00 8.9493137537914547e-02 + -7.2722920504082289e-01 1.6334845536255167e+00 -6.0299718810843395e-03 + -8.7462961791731531e-01 1.5856367925098485e+00 -1.1991880590930915e-01 + -9.8117278403177755e-01 1.4584341295785757e+00 -2.4262281125130514e-01 + -1.0293999310861974e+00 1.2717394309014902e+00 -3.5976278145795959e-01 + -1.0305491514696059e+00 1.0559739145693334e+00 -4.6195324630076562e-01 + -1.0171790517258972e+00 8.2896590449118301e-01 -5.5142276064650897e-01 + -1.0175569508461242e+00 5.8978145283133954e-01 -6.3553243621366728e-01 + -1.0312434090324363e+00 3.3292592796073756e-01 -7.1625088485311106e-01 + -1.0422520747137023e+00 6.5670405380345021e-02 -7.9498723199993759e-01 + -1.0486416599062611e+00 -1.9373236984568798e-01 -8.8456303073341647e-01 + -1.1498367813068926e+00 -4.6697596738311914e-01 -9.7335622059071281e-01 + id 12677 + loc 1.0735584795475006e-01 2.5898438692092896e-01 409 + blend 0.0000000000000000e+00 + interp 4.9607476435000958e-01:4.9606980360236608e-01:4.7809668397744343e-01:2.6970531179438795e-01:1.0301517557041993e+00:2.5395311858845870e-01:1.9692821182859392e+00:2.8257471081122670e-01:2.6031589123606382e+00:4.7925181439502912e-01:3.1760876964045273e+00:3.7018130488970169e-01:3.9736839796230807e+00 + CVs 20 + -2.5808110031295711e-01 2.1797250439846932e-01 -3.3335141093844656e-01 + -4.9418956373826955e-01 4.0957532600177027e-01 -6.2074639624790884e-01 + -7.3221134379537178e-01 6.0212364546339237e-01 -9.0543524559622945e-01 + -9.8577999382763581e-01 7.9527786039316184e-01 -1.1942932938272754e+00 + -1.2709245634655677e+00 9.6948848410528488e-01 -1.4724261308500932e+00 + -1.6089038267665763e+00 1.1065308766296826e+00 -1.7256248127581824e+00 + -2.0189510779750526e+00 1.1890336018695296e+00 -1.9472072771501898e+00 + -2.5125712424225011e+00 1.1900819682737480e+00 -2.1464995208229700e+00 + -3.0747602515092280e+00 1.0716349356144728e+00 -2.3468994323805306e+00 + -3.6524392724449162e+00 7.9646324875628027e-01 -2.5655775398613887e+00 + -4.1701293927502734e+00 3.5585291959527976e-01 -2.7963783326423899e+00 + -4.5977758147796859e+00 -1.8190796225782413e-01 -3.0222160280270320e+00 + -4.9910278550191434e+00 -7.0380585765521486e-01 -3.2438767091588456e+00 + -5.4031163704841232e+00 -1.1246144228745012e+00 -3.4734680908287321e+00 + -5.8258406277560919e+00 -1.4169117692430535e+00 -3.7229350638738792e+00 + -6.2239181186970844e+00 -1.6297805716636582e+00 -4.0130904726176624e+00 + -6.5772557996982988e+00 -1.8269373643180258e+00 -4.3603292173845674e+00 + -6.8804887400878387e+00 -2.0342753717592430e+00 -4.7338902077971374e+00 + -7.1319404148559267e+00 -2.2535018462849439e+00 -5.0565183040524637e+00 + id 12678 + loc 1.9334864616394043e-01 4.9213379621505737e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0593221165569032e-01:3.8899847979641711e-01:2.2082715656440943e-01:2.8190801429317153e-01:1.1090405753085091e+00:2.6225276950551957e-01:2.0311657297805641e+00:2.6695143065337901e-01:2.9903052545548445e+00:4.0592815233357377e-01:3.5773093692263944e+00 + CVs 20 + 1.6129178086284124e-01 3.6431186610591171e-01 -1.6747286494997415e-01 + 2.4070709167433668e-01 7.0208479394085710e-01 -3.4762431515085568e-01 + 2.7190542687493269e-01 1.0380084533198455e+00 -5.3371466342427187e-01 + 2.5227093346857266e-01 1.3800103296289181e+00 -7.2904719711287846e-01 + 1.5807059268229762e-01 1.7076796421461191e+00 -9.3481622398217756e-01 + -3.4726442719733908e-02 1.9877235762037935e+00 -1.1453931042434187e+00 + -3.3842832649228072e-01 2.1709709502284973e+00 -1.3413426183740076e+00 + -7.3193547622290733e-01 2.2038871358736265e+00 -1.4845509993567629e+00 + -1.1470140864952973e+00 2.0615492435116494e+00 -1.5311080110311768e+00 + -1.4976602212322465e+00 1.7739653470658081e+00 -1.4632776874278637e+00 + -1.7286917619190807e+00 1.4012341536935469e+00 -1.2960157449038097e+00 + -1.8363335167569881e+00 1.0095603638415880e+00 -1.0692730038484426e+00 + -1.8811090771273755e+00 6.4280063520676611e-01 -8.2602329216388226e-01 + -1.9588891873510297e+00 3.2367778146967219e-01 -5.7333271324212387e-01 + -2.1930493445090637e+00 1.2501035055437693e-01 -3.0482108900373839e-01 + -2.6545880001925521e+00 2.4911810019851144e-01 -6.9335407157881390e-02 + -3.0685790736780243e+00 9.0815228764334299e-01 -4.4292701848003407e-03 + -2.7490063153511484e+00 1.9610550277170331e+00 -2.3703466761064190e-01 + -2.8425451933472723e+00 2.1158559167232234e+00 -1.3135707892501086e-01 + id 12679 + loc 9.6881735324859619e-01 2.9573023319244385e-01 413 + blend 0.0000000000000000e+00 + interp 4.9284289786838581e-01:4.9283796943940716e-01:3.7985284577999945e-01:3.7922090403900433e-01:1.0458616133416812e+00:4.3911765224854993e-01:1.7139836519575467e+00:3.3815143145274085e-01:2.0013609701160959e+00:3.7559512565757380e-01:2.5438061553584910e+00:3.5283215497415171e-01:3.0049565971061867e+00:3.3323747296431921e-01:3.9974267911002057e+00 + CVs 20 + -1.1641790854615750e+00 2.9800140498715388e-01 2.0364124465178673e-01 + -1.9269471361472155e+00 3.9732410328232315e-01 3.3322957764222549e-01 + -2.5653217273801578e+00 4.1225090872853476e-01 4.3009499515887162e-01 + -3.2068372597687667e+00 3.9435443288733751e-01 5.1572874228999355e-01 + -3.8421827259265195e+00 3.3893319916471709e-01 5.9645886519401092e-01 + -4.4679740944181807e+00 2.4239728832497603e-01 6.7897434537825463e-01 + -5.0844844102513260e+00 1.0092453512321398e-01 7.6816074920270250e-01 + -5.6919622104860590e+00 -9.1840130523411667e-02 8.6376680973669528e-01 + -6.2868722277164277e+00 -3.4699874868342662e-01 9.5836397142216190e-01 + -6.8571662263611834e+00 -6.7655564444488003e-01 1.0414672574889834e+00 + -7.3804884552939107e+00 -1.0866103346415157e+00 1.1079253249837262e+00 + -7.8316996467312778e+00 -1.5744139101451271e+00 1.1593600443950942e+00 + -8.1936558365063892e+00 -2.1285006196291727e+00 1.1966023192490813e+00 + -8.4580972629469500e+00 -2.7294986923978537e+00 1.2199845430946832e+00 + -8.6196982275073122e+00 -3.3527867943050156e+00 1.2414397898122365e+00 + -8.6756990659321644e+00 -3.9725380444653879e+00 1.2786188242913137e+00 + -8.6292364561256090e+00 -4.5669506164128242e+00 1.3371942722870389e+00 + -8.4924449255158265e+00 -5.1173973415897214e+00 1.4142733997484731e+00 + -8.3473364418072720e+00 -5.6322084215125487e+00 1.5151923491193875e+00 + id 12680 + loc 7.2451537847518921e-01 4.6353422105312347e-02 1084 + blend 0.0000000000000000e+00 + interp 4.1015270214657862e-01:2.5817039163884747e-01:7.2724663750825225e-01:3.5921411711099588e-01:1.7305009569745531e+00:2.1263647940444277e-01:2.1987951867452900e+00:4.1014860061955716e-01:3.0960751821601855e+00:3.0677407113739158e-01:3.9116555255267964e+00 + CVs 20 + 2.8172004270407619e-01 3.0004593582517453e-01 -1.7754844182849222e-01 + 5.1093544176545502e-01 5.7749093626253134e-01 -3.5253890594201165e-01 + 6.8937337996318315e-01 8.4657127884009409e-01 -5.4119592541467554e-01 + 8.5888780451588853e-01 1.1073782827817880e+00 -7.0231142152323600e-01 + 1.0536390734919885e+00 1.3359988262869624e+00 -7.8330057298950595e-01 + 1.2731047369912734e+00 1.5109898149725436e+00 -7.7378793789237110e-01 + 1.5069058504969082e+00 1.6282828272812577e+00 -6.8338870566515797e-01 + 1.7433375427022857e+00 1.6843136193079813e+00 -5.0550554229324418e-01 + 1.9394836320449795e+00 1.6679092230567347e+00 -2.3900344681956831e-01 + 2.0465436571415250e+00 1.5886818169045029e+00 6.5012085048551382e-02 + 2.0722473121507790e+00 1.4763708662935828e+00 3.6154868509763127e-01 + 2.0431652238574709e+00 1.3496775578404714e+00 6.4867630243010477e-01 + 1.9723444293210162e+00 1.2157129518187313e+00 9.0491829864777507e-01 + 1.8854410235653531e+00 1.0974566782919448e+00 1.0444302544362805e+00 + 1.8076382649651843e+00 1.0108800832448090e+00 9.9205619926071598e-01 + 1.7021187702202232e+00 8.5858109056596610e-01 7.4034857080361283e-01 + 1.4726654840645981e+00 3.9010278689067623e-01 4.0247226631046623e-01 + 1.1598243166467508e+00 -3.1618626436547587e-01 4.3237171375094785e-01 + 1.2407822513607234e+00 -3.5325271602467923e-01 5.7111348212809188e-01 + id 12681 + loc 1.7199850082397461e-01 7.1081387996673584e-01 403 + blend 0.0000000000000000e+00 + interp 4.7578632334961823e-01:3.5810535234609497e-01:2.0511618955222988e-01:4.2824370219792973e-01:9.3584297564729835e-01:3.8024294168104045e-01:1.3169591653302053e+00:4.3581912099426801e-01:1.9807120171898909e+00:2.9445417391292456e-01:2.3046074942019947e+00:4.0848305204765628e-01:2.9450489948342926e+00:4.2873762456516357e-01:3.1528710259650294e+00:4.7578156548638478e-01:3.9214093984368641e+00 + CVs 20 + -2.5990117537963806e-02 1.5850476986172518e-01 -5.2493325158118061e-02 + -5.7624797915681619e-02 3.0482573988950079e-01 -1.1155777272105666e-01 + -9.3609005083458319e-02 4.4609562869929942e-01 -1.7602091534410688e-01 + -1.3440929578505650e-01 5.8644053851914157e-01 -2.4485558044758282e-01 + -1.8541147761012733e-01 7.2512802623020323e-01 -3.1826172687885640e-01 + -2.5138722433789956e-01 8.6062561340605725e-01 -3.9498160566384932e-01 + -3.3660017583604612e-01 9.9068865988326882e-01 -4.7177449601198240e-01 + -4.4404745255765893e-01 1.1124614077929986e+00 -5.4382850122883541e-01 + -5.7427168897027636e-01 1.2228765859638973e+00 -6.0549313262596782e-01 + -7.2515216873823540e-01 1.3180030675723509e+00 -6.5135482532411770e-01 + -8.9249503958272758e-01 1.3913452293794846e+00 -6.7773183503156254e-01 + -1.0703381172045856e+00 1.4343133430104738e+00 -6.8340919631615360e-01 + -1.2521108527144196e+00 1.4396622435963020e+00 -6.6942481315397329e-01 + -1.4325492419711705e+00 1.4036357765181737e+00 -6.3601717357402765e-01 + -1.6059188684390917e+00 1.3247259418617836e+00 -5.7988569917734412e-01 + -1.7555032249941911e+00 1.2037822246460619e+00 -5.0759810773353631e-01 + -1.8665484822320513e+00 1.0502625818485860e+00 -4.4364060821047202e-01 + -1.9248047006571345e+00 8.7622190414732914e-01 -4.1480285832200947e-01 + -2.0290980464074848e+00 6.8715072612818873e-01 -3.4632533255552211e-01 + id 12682 + loc 3.2262212038040161e-01 1.3745422661304474e-01 372 + blend 0.0000000000000000e+00 + interp 4.5417151836435743e-01:3.2085089446186038e-01:6.0438827136814721e-01:4.5416697664917383e-01:1.9999987378348436e+00:2.8643923446334713e-01:2.8307481636702549e+00:3.8924113266106858e-01:3.1812299824815531e+00:2.6518213039236682e-01:3.9042875335094922e+00 + CVs 20 + 1.3052752449194160e-01 6.1144139649175278e-01 6.1952494352633469e-01 + 2.7847515982542304e-01 1.0680021904115313e+00 1.2352501821542603e+00 + 3.9097161201618313e-01 1.3970671264562005e+00 1.9076428278523945e+00 + 3.6370016526317889e-01 1.6845473100492911e+00 2.5760705704011553e+00 + 8.4223314095425272e-02 2.0206789141012154e+00 3.0606323920427698e+00 + -4.3947977055002979e-01 2.3432715187472359e+00 3.1390131744636434e+00 + -9.6925335700569581e-01 2.4803001659889374e+00 2.8404052304095444e+00 + -1.4096867296597246e+00 2.4159178587149732e+00 2.3502331634476272e+00 + -1.7499373034266319e+00 2.1485928728632677e+00 1.7394857644710067e+00 + -1.9376475858770699e+00 1.6664938752434786e+00 1.0783268466492455e+00 + -1.9218950835245965e+00 1.0079236996905825e+00 4.5085142295645475e-01 + -1.6988469351061461e+00 2.7585806956839043e-01 -1.3220711227733678e-01 + -1.3348189920983771e+00 -3.8381387409272738e-01 -7.9138139990811973e-01 + -9.8326106310367845e-01 -7.4564175035880553e-01 -1.7048600946156438e+00 + -8.2420438151167874e-01 -5.9185788454575883e-01 -2.8458548382260487e+00 + -9.5113114304871915e-01 3.4725595671948994e-02 -4.0177783347246718e+00 + -1.4411728250996541e+00 1.0087722477974213e+00 -4.9883163894943729e+00 + -2.1914216001267768e+00 2.0085710379919082e+00 -5.5621556063700623e+00 + -2.8125349550300243e+00 2.6224186120739210e+00 -5.9593457341125049e+00 + id 12683 + loc 4.0897168219089508e-02 4.2717233300209045e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5037543678410954e-01:2.4655357804323133e-01:2.9882768860047793e-01:3.5037193302974173e-01:1.4064396500879452e+00:2.2302176444050453e-01:2.1211149592643621e+00:3.3375208953678503e-01:3.0485702685527087e+00:2.9237469591826054e-01:3.8048356475546830e+00 + CVs 20 + -2.1939840968048593e-01 2.0005522373965975e-01 -7.8486432651896268e-02 + -4.1823342535440589e-01 4.1871485363434535e-01 -1.6784452563934835e-01 + -6.1387191902755389e-01 6.2978900490829215e-01 -2.6393383694180739e-01 + -8.3061519756799407e-01 8.1469553363355718e-01 -3.6819134300803380e-01 + -1.0721681999971591e+00 9.6447323611592273e-01 -4.8193084777322176e-01 + -1.3396888247613929e+00 1.0682817450806874e+00 -6.0555338370114209e-01 + -1.6285942561545834e+00 1.1137982293980995e+00 -7.3820770742135400e-01 + -1.9272995059419324e+00 1.0910378147101107e+00 -8.7589985700991191e-01 + -2.2222551280914473e+00 9.9633380415952955e-01 -1.0093874039192827e+00 + -2.5013411359496014e+00 8.3142577329140144e-01 -1.1240845647925257e+00 + -2.7487240792562440e+00 6.0482267288809699e-01 -1.2043788590636508e+00 + -2.9450622617991682e+00 3.3279139133058999e-01 -1.2385230098681967e+00 + -3.0830602395322075e+00 2.7840273935113125e-02 -1.2228297899585296e+00 + -3.1862939193487607e+00 -3.2102474094946776e-01 -1.1551459300727753e+00 + -3.3308316567610192e+00 -7.5224720928095268e-01 -1.0158331926926700e+00 + -3.6688149388179685e+00 -1.2661844936969402e+00 -7.6877486409299856e-01 + -4.3323057923562427e+00 -1.6798785815499353e+00 -4.3790754440389312e-01 + -5.2395763547021179e+00 -1.7137244642270890e+00 -1.3290567076763710e-01 + -5.5087862178800702e+00 -1.7508099447651582e+00 -3.2376913573614108e-02 + id 12684 + loc 2.9915043711662292e-01 2.6729410886764526e-01 406 + blend 0.0000000000000000e+00 + interp 4.1731161586776755e-01:3.1502067724807381e-01:5.3302808654857081e-01:3.8695688471805789e-01:1.3106803390008861e+00:2.8422569001774228e-01:1.9652870482608154e+00:3.3331538996443982e-01:2.7302688742265269e+00:3.8878691444914659e-01:3.1782958968392307e+00:4.1730744275160891e-01:3.8469707383877774e+00 + CVs 20 + -4.5493301229044644e-02 1.5158350915968688e-01 -1.2538034047341343e-02 + -8.8879386160624130e-02 2.8201570401358650e-01 1.7133894277634648e-02 + -1.0785461142499310e-01 4.3440395033574003e-01 6.0705441806646554e-02 + -1.0387444996586352e-01 6.1372823848322899e-01 7.9080009867811302e-02 + -7.4798439796172858e-02 8.1224490645175684e-01 6.3042352263528834e-02 + -2.0402433584121540e-02 1.0201813440636611e+00 4.7080485718496434e-03 + 5.7232791576397296e-02 1.2260578790477008e+00 -1.0207890486901894e-01 + 1.5508323030177040e-01 1.4177189408091153e+00 -2.6021467765998041e-01 + 2.7186671706277077e-01 1.5840260029873861e+00 -4.6807944573133675e-01 + 4.0502173354752685e-01 1.7151493938933400e+00 -7.2177005853713072e-01 + 5.4289890976533117e-01 1.8017596103009108e+00 -1.0184964026181134e+00 + 6.6665032304189720e-01 1.8363636257983513e+00 -1.3544116608865138e+00 + 7.6245950185296296e-01 1.8166249730664572e+00 -1.7205737635147960e+00 + 8.2367322304638901e-01 1.7459980617010926e+00 -2.1040185963109690e+00 + 8.4184456956118947e-01 1.6317383753825152e+00 -2.4903358757304570e+00 + 8.0708549017447073e-01 1.4826649434440937e+00 -2.8657582474220868e+00 + 7.1741963080542892e-01 1.3074572244422715e+00 -3.2184028201473422e+00 + 5.8049851981331368e-01 1.1181508773830107e+00 -3.5373674682663250e+00 + 4.6472026319819393e-01 9.5467408919072194e-01 -3.8428295315397265e+00 + id 12685 + loc 2.4127590656280518e-01 3.1308534741401672e-01 411 + blend 0.0000000000000000e+00 + interp 4.4357012217048414e-01:3.9571246505578778e-01:3.8985349887314114e-01:3.1195624949524636e-01:9.9991082058540648e-01:4.4072498523436832e-01:1.9274481709075397e+00:3.4396457012808390e-01:2.6335542249682065e+00:4.4356568646926248e-01:3.1869572154912853e+00:3.5175112890708166e-01:3.9884224880280872e+00 + CVs 20 + -2.0448961323027821e-02 1.5460724846976182e-01 -6.4744957466304065e-01 + -4.6155868093295083e-02 2.1597522423196797e-01 -1.1157441258622931e+00 + -4.7049773113527545e-02 2.3443966185550269e-01 -1.5427020594163936e+00 + -5.2155147755749559e-03 2.2614425392133586e-01 -1.9770467182284326e+00 + 7.5199217699899068e-02 1.8496491031440832e-01 -2.4081950761335680e+00 + 1.8076851625118665e-01 1.0886570759900771e-01 -2.8275545111108857e+00 + 2.9366293286886913e-01 7.9358749722668875e-04 -3.2309207481957336e+00 + 3.9686403478019261e-01 -1.3471356794026534e-01 -3.6152303922140909e+00 + 4.7783582374144018e-01 -2.9465425270125833e-01 -3.9776862937991138e+00 + 5.2616839666505766e-01 -4.7511056111599359e-01 -4.3109820357253144e+00 + 5.3088207934653575e-01 -6.7019736953163211e-01 -4.6029533706316439e+00 + 4.8518442340181550e-01 -8.8076189425215978e-01 -4.8506740638601427e+00 + 3.8980294543831273e-01 -1.1156057890498816e+00 -5.0623070321598043e+00 + 2.5072084727163346e-01 -1.3760903520739853e+00 -5.2426431095796371e+00 + 7.6755370069044926e-02 -1.6489359195701920e+00 -5.3891588305213851e+00 + -1.2061000827524912e-01 -1.9187552619002917e+00 -5.4992517473152223e+00 + -3.2603320755688120e-01 -2.1820853450712239e+00 -5.5728253920257869e+00 + -5.2300249245907970e-01 -2.4443897055936574e+00 -5.6090580966534072e+00 + -7.1516523950545763e-01 -2.8399850526781170e+00 -5.6099462940845832e+00 + id 12686 + loc 9.9842399358749390e-01 8.5940396785736084e-01 1082 + blend 0.0000000000000000e+00 + interp 4.4392382019037152e-01:4.3690808465559866e-01:4.2185109153791667e-01:3.1833386614872911e-01:1.2002288204150129e+00:2.8555680082497759e-01:1.9511768746221210e+00:3.4090415715868189e-01:2.2670985784899136e+00:4.4391938095216965e-01:2.9827502555399095e+00:3.0461920839106571e-01:3.6583108388160266e+00 + CVs 20 + -7.2130657667528172e-02 4.3486855665623270e-01 3.0354362376118765e-01 + -1.2709396040897761e-01 7.5703997407115442e-01 3.9512055764025672e-01 + -2.2242135126255205e-01 1.0402725607326446e+00 4.6449640664539760e-01 + -3.7530983542442503e-01 1.3005627142449927e+00 5.5010858830254628e-01 + -5.8525898832679379e-01 1.5257882375369547e+00 6.4302548372708712e-01 + -8.4487357563942334e-01 1.7054352847986383e+00 7.3640122372752703e-01 + -1.1403578012779036e+00 1.8334165639042361e+00 8.2652480573763631e-01 + -1.4557567358887127e+00 1.9091432940908795e+00 9.1310542529236105e-01 + -1.7770121765838267e+00 1.9358281741363765e+00 9.9744548157032009e-01 + -2.0939823861435944e+00 1.9177427859192779e+00 1.0806289902804149e+00 + -2.4012329272408124e+00 1.8576995533015941e+00 1.1623329464815770e+00 + -2.6963998767880830e+00 1.7565530963572189e+00 1.2404825496731129e+00 + -2.9740507247118786e+00 1.6172698430401469e+00 1.3124095998867329e+00 + -3.2219999681902838e+00 1.4501099566596538e+00 1.3764655015067078e+00 + -3.4335747015500235e+00 1.2662519951106097e+00 1.4341046330683604e+00 + -3.6214126543783194e+00 1.0681575727446484e+00 1.4905789107132006e+00 + -3.8058257559330060e+00 8.5584435062132269e-01 1.5541467924305026e+00 + -3.9983643331915681e+00 6.3506943199588661e-01 1.6325682810279036e+00 + -4.2181202557183646e+00 4.0338322772692731e-01 1.7295125691032078e+00 + id 12687 + loc 1.2920492887496948e-01 5.2105349302291870e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2729084188915045e-01:4.2728656898073158e-01:1.5141905405987577e-01:3.5092589092111498e-01:9.4337735446482518e-01:3.6169241477647879e-01:1.6048181095250116e+00:2.9681535244916080e-01:2.3457709385014178e+00:3.6297564812924843e-01:2.9828475806263128e+00:3.0976854019293609e-01:3.6350478357118634e+00 + CVs 20 + 2.0158913130502232e-01 2.7559648883833393e-01 -2.7584440629251344e-01 + 3.7573087636057290e-01 5.3309342054958098e-01 -5.1956273109255724e-01 + 5.4222522904620107e-01 7.7138910917580850e-01 -7.5190289925054143e-01 + 7.0813116243456331e-01 9.8939395041426570e-01 -9.8137582011821667e-01 + 8.7419653931075747e-01 1.1872127867180546e+00 -1.2092288207490376e+00 + 1.0425030274001510e+00 1.3662349406321097e+00 -1.4379836057054165e+00 + 1.2155799485425092e+00 1.5289195666258502e+00 -1.6731940476405733e+00 + 1.3950266530015827e+00 1.6770383429428719e+00 -1.9221807392614718e+00 + 1.5792220752575727e+00 1.8092280665693288e+00 -2.1931738716104121e+00 + 1.7615383953373061e+00 1.9217577574816322e+00 -2.4913944340335199e+00 + 1.9319937505942941e+00 2.0077443079965702e+00 -2.8149228353670446e+00 + 2.0809061411817185e+00 2.0552076464454396e+00 -3.1531386228159581e+00 + 2.2071934189530498e+00 2.0564320297723215e+00 -3.4890027392280372e+00 + 2.3155357876750693e+00 2.0181144104040336e+00 -3.8056436807506104e+00 + 2.4128528627867443e+00 1.9592593754264498e+00 -4.0955839523406077e+00 + 2.5103008591786891e+00 1.9019047950944290e+00 -4.3669189470251828e+00 + 2.6169843884232509e+00 1.8476420557684938e+00 -4.6262276652216467e+00 + 2.7352302457256603e+00 1.7596841524801023e+00 -4.8282952356745437e+00 + 2.8862954220740895e+00 1.5337498744887790e+00 -4.7702569664388728e+00 + id 12688 + loc 1.2876478955149651e-02 6.5188318490982056e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9285430889666521e-01:3.6317228909101312e-01:2.9380263624079195e-04:4.9284938035357628e-01:7.1005287862845479e-01:3.0161101706488913e-01:1.1539342046967980e+00:4.5905996363494622e-01:1.8255478436632633e+00:4.0120836707947721e-01:2.0501308903179902e+00:3.8700720186280441e-01:2.7748624975451550e+00:3.8515749627146845e-01:3.2582056535019421e+00 + CVs 20 + 7.9489368405093880e-02 3.3567433852167461e-01 1.8446399127153992e-01 + 1.5765436512838471e-01 6.4088724317835355e-01 2.7639313143474042e-01 + 2.4255742550627576e-01 9.5491547903900531e-01 3.3001842278914828e-01 + 3.4528392047595508e-01 1.2922275072452976e+00 3.6169902353925459e-01 + 4.7813416816447363e-01 1.6337520074319127e+00 3.5054458183494908e-01 + 6.5202798263471118e-01 1.9480974798961901e+00 2.6827758348988329e-01 + 8.6409193746650970e-01 2.1836308988002058e+00 8.4097342363918415e-02 + 1.0748385058654788e+00 2.2752516442443542e+00 -2.0601353975224046e-01 + 1.2211385726562676e+00 2.1936781758762169e+00 -5.4932361713375977e-01 + 1.2745794135256299e+00 1.9653046483651533e+00 -8.7430235428411562e-01 + 1.2446330340300606e+00 1.6263330369731330e+00 -1.1305077912337220e+00 + 1.1637585355074200e+00 1.2204486020943643e+00 -1.2937546097372508e+00 + 1.0736401418632771e+00 7.9986823936834717e-01 -1.3941619273147450e+00 + 9.9367392659026532e-01 4.2583803398198228e-01 -1.5231440003592769e+00 + 9.3795984552915901e-01 2.2742722662812653e-01 -1.8279111256024558e+00 + 9.9396624372437103e-01 4.9376475257284269e-01 -2.3370104811376118e+00 + 1.3589306290050789e+00 1.3787656166963678e+00 -2.4897085287508638e+00 + 1.7998835452372797e+00 2.0789862816675320e+00 -1.7701055858896380e+00 + 1.9332789165617281e+00 2.2505642832441795e+00 -1.8661662288701748e+00 + id 12689 + loc 6.4612042903900146e-01 5.2414643764495850e-01 1081 + blend 0.0000000000000000e+00 + interp 4.7838440572525659e-01:4.0192432808693507e-01:3.7410400003002631e-01:4.3172705237109271e-01:9.8932201799271102e-01:4.0274844823533767e-01:1.4408681313632068e+00:3.2419075135461606e-01:2.0366130032707281e+00:3.5130608015777520e-01:2.6614540339131425e+00:4.2028366612632501e-01:3.0021244444790813e+00:4.7837962188119937e-01:3.4333315638616329e+00:4.1202745730899620e-01:3.9650801092184631e+00 + CVs 20 + 6.9859802854665920e-02 5.8755055033513925e-01 4.9251241731410300e-01 + 1.9222475785942808e-01 1.0172204641905631e+00 7.7839955429706187e-01 + 3.2787529272727534e-01 1.3764719964748768e+00 1.0001838401586498e+00 + 4.6339079934201688e-01 1.6882313842048395e+00 1.1999129728865690e+00 + 5.9530451899010672e-01 1.9446499390964118e+00 1.3692704254021884e+00 + 7.1747983646317259e-01 2.1387256415687044e+00 1.5009639122516569e+00 + 8.2136811545272737e-01 2.2651776476092107e+00 1.5943676463890566e+00 + 8.9433987310582974e-01 2.3222208922141654e+00 1.6676974136201692e+00 + 9.2167011445184777e-01 2.3314561802712026e+00 1.7778050882543059e+00 + 9.4802717388697844e-01 2.3946055642919233e+00 1.9432047249787381e+00 + 1.0302985918077154e+00 2.4987752738839202e+00 2.0217663901347889e+00 + 1.1313802227433456e+00 2.5580950765258335e+00 2.0072888388385266e+00 + 1.2337203679446846e+00 2.5733969363237623e+00 1.9436941958778968e+00 + 1.3348862939980024e+00 2.5647896954724536e+00 1.8486885414514129e+00 + 1.4369828541482954e+00 2.5627727824696218e+00 1.7151230758529783e+00 + 1.5455390883050282e+00 2.5949321711861204e+00 1.4908318055362586e+00 + 1.6592634422656620e+00 2.5843277195480354e+00 1.1440539857357135e+00 + 1.7694290988668318e+00 2.4116633266979659e+00 8.5101502889717062e-01 + 1.8820453279097162e+00 2.1359746795146659e+00 8.8558912022925385e-01 + id 12690 + loc 6.3660007715225220e-01 5.1996968686580658e-02 409 + blend 0.0000000000000000e+00 + interp 5.4024079881352960e-01:3.0090858785926106e-01:4.3552839649830788e-01:3.9038170725290328e-01:9.9949245305215184e-01:5.4023539640554152e-01:1.3806177378336533e+00:2.6653826162265021e-01:2.0628944496210564e+00:4.9561018963101078e-01:2.9454834992530694e+00:4.8902577320682317e-01:3.3322394714722154e+00:3.7642003168675015e-01:3.9866975865049126e+00 + CVs 20 + -2.1345423309400491e-01 1.0311706913811752e-01 1.0860051153684160e-01 + -4.5167442035354693e-01 2.1635343356168887e-01 2.1772673247113611e-01 + -7.0183034266787803e-01 3.2602241904300755e-01 3.0278910643759460e-01 + -9.5596481424720403e-01 4.2492262077905868e-01 3.5758515646761213e-01 + -1.2099608448628640e+00 5.1088808382607431e-01 3.8710707451148807e-01 + -1.4594665667281221e+00 5.8349406077297117e-01 3.9566745713291052e-01 + -1.6983412320075211e+00 6.4378443624388582e-01 3.8560641509016669e-01 + -1.9209452071904671e+00 6.9229158915352962e-01 3.5812708437765683e-01 + -2.1312347741397129e+00 7.2956257522798840e-01 3.1431042340862003e-01 + -2.3403100069454585e+00 7.5561314698374804e-01 2.5635509164193870e-01 + -2.5567783803718820e+00 7.6593743067184572e-01 1.9044574883343421e-01 + -2.7868260905179012e+00 7.4806714521039064e-01 1.2736823043590281e-01 + -3.0325970098537880e+00 6.8701152209453697e-01 7.8796017320563044e-02 + -3.2895522135032560e+00 5.7549558726465788e-01 5.3522443397724162e-02 + -3.5456557775823203e+00 4.1766848546244972e-01 5.6308559378120460e-02 + -3.7834611655593391e+00 2.2931048643595942e-01 8.5314953290395790e-02 + -3.9948893689786522e+00 2.2876704564764205e-02 1.3282015312763132e-01 + -4.1890712342065228e+00 -2.1324937219070494e-01 1.9421128931084919e-01 + -4.3836798740131160e+00 -5.0172312925451101e-01 2.7396535137822736e-01 + id 12691 + loc 9.1933083534240723e-01 6.8200543522834778e-02 1080 + blend 0.0000000000000000e+00 + interp 5.0957687748589342e-01:3.3520216718709717e-01:5.8608825681901511e-02:4.7621751060271816e-01:4.1837219760870537e-01:5.0957178171711859e-01:9.8271873653361097e-01:3.4636930793572973e-01:1.2098697230016633e+00:4.5754334794576662e-01:1.7903404702461594e+00:4.5636962625781025e-01:2.0513675741705568e+00:3.9205726829147186e-01:2.6239350359636449e+00:2.6855231952239872e-01:3.0010886201635398e+00:3.6783792776163943e-01:3.5805748968329825e+00 + CVs 20 + -2.3108269328774050e-02 5.0428803970454106e-01 -4.8926825925456841e-01 + -9.3843666346941967e-02 9.6264348560418656e-01 -8.4467942665924878e-01 + -1.9893189523619445e-01 1.3997306856041982e+00 -1.1544168680733107e+00 + -3.6210598533045690e-01 1.8507366713524305e+00 -1.4341513339797465e+00 + -6.0261134855832632e-01 2.3130849886075864e+00 -1.6586995858274161e+00 + -9.4716160154326567e-01 2.7784709991902243e+00 -1.7857936340691623e+00 + -1.4146611367128070e+00 3.2077751697660895e+00 -1.7606503353498821e+00 + -1.9928457584689929e+00 3.5209157079164410e+00 -1.5379707640367135e+00 + -2.6192278255830157e+00 3.6153627789603404e+00 -1.1110303948462334e+00 + -3.1762693337548642e+00 3.4306436673076588e+00 -5.5726490844701715e-01 + -3.5712176338423509e+00 3.0243203317756917e+00 -1.0029078174522477e-02 + -3.8043920208898379e+00 2.5129733183621221e+00 4.4878571355861241e-01 + -3.9247817548245250e+00 1.9724657087527628e+00 8.0519309161327557e-01 + -3.9800260886189252e+00 1.4245918362172780e+00 1.0600620590876444e+00 + -4.0021058678961587e+00 8.3401040896792478e-01 1.1728202944813400e+00 + -3.9905586869587197e+00 1.3994330890088813e-01 9.8983064729547854e-01 + -3.9027480494765929e+00 -5.1597580597686965e-01 3.9231622254042664e-01 + -3.7531800421745443e+00 -9.3418600237839500e-01 -2.4532684647145397e-01 + -3.6851702818330097e+00 -1.3030237180472608e+00 -3.8890609365096018e-01 + id 12692 + loc 6.3825553655624390e-01 2.5799989700317383e-01 1084 + blend 0.0000000000000000e+00 + interp 4.0681865789698185e-01:2.5796247306997727e-01:6.6193391459097883e-01:2.6731320407236370e-01:1.2334211721337840e+00:3.0067653360906538e-01:2.0185241416022506e+00:2.7257273218707612e-01:2.8189673717105230e+00:4.0681458971040291e-01:3.2700334348593016e+00:2.8473402842126422e-01:3.9543728786335119e+00 + CVs 20 + 9.1823532952369100e-02 3.1012610740731872e-01 -1.0146093973027610e-01 + 1.8279351283280501e-01 6.0509457072333594e-01 -1.6212926128457916e-01 + 2.4410191812365656e-01 8.9620831369222620e-01 -2.2415859975799202e-01 + 2.5350306679951390e-01 1.1719960523809998e+00 -3.0171455971764827e-01 + 2.1747805385165930e-01 1.4192493168460818e+00 -3.8446079200721051e-01 + 1.6232295228596222e-01 1.6557676893786393e+00 -4.7477123756687933e-01 + 1.2986014857419065e-01 1.9004378430504447e+00 -5.7204531650156420e-01 + 1.5157133673920903e-01 2.1365445405345564e+00 -6.7226901736041289e-01 + 2.4272301523376616e-01 2.3536446618281537e+00 -7.5229710113892001e-01 + 3.6941904567261963e-01 2.5391638390074904e+00 -7.3645577458355593e-01 + 4.6480144318758299e-01 2.6868672030481608e+00 -5.9210273184180751e-01 + 4.9673449973364103e-01 2.8033901968856485e+00 -3.2955058652122493e-01 + 4.0700582281396053e-01 2.8593204961141563e+00 2.0529200552700466e-02 + 1.3255012898284529e-01 2.8031890769601695e+00 3.4390564227072695e-01 + -2.4284884979340762e-01 2.6474612807343703e+00 5.4836239877696913e-01 + -5.3581043916204174e-01 2.4696373832927798e+00 6.2368912458535763e-01 + -6.1804710517797834e-01 2.2881238184983208e+00 4.0799698329815881e-01 + -7.0054781171211988e-01 1.8905540355027806e+00 -5.3992083399387547e-02 + -6.3620625914721429e-01 2.0366054700393579e+00 1.6126118365590714e-01 + id 12693 + loc 8.3579057455062866e-01 8.1564851105213165e-02 403 + blend 0.0000000000000000e+00 + interp 5.2193187922355355e-01:4.5058545132841255e-01:1.6300498332431013e-01:3.9632057816008892e-01:7.7628249592088328e-01:2.9826721768656489e-01:1.1109863925234358e+00:4.4136092440907138e-01:1.8047795335209909e+00:5.2192665990476139e-01:2.0816098466739223e+00:4.0208019670608974e-01:2.6886280435145418e+00:3.9395620871324055e-01:3.0471662943053137e+00:2.7365435024973878e-01:3.8513724109610452e+00 + CVs 20 + -1.5543419647869364e-01 1.2793494567119265e-01 2.5534282199732533e-01 + -2.8387977858625391e-01 2.5191151858172756e-01 4.7216314355457600e-01 + -3.9960637000915811e-01 3.9385590852452068e-01 6.6011110676238161e-01 + -5.1461232091555420e-01 5.6858959468477743e-01 8.2763968171327051e-01 + -6.4034793321557471e-01 7.8132636266054911e-01 1.0021592988202483e+00 + -7.8247707452751358e-01 1.0294889687345385e+00 1.2228651110961049e+00 + -9.1542732616395517e-01 1.3081154032739035e+00 1.5082434248699925e+00 + -9.9623283629006443e-01 1.6098297765663390e+00 1.8530593651029814e+00 + -9.8538232496661338e-01 1.9154027126745481e+00 2.2354517738395274e+00 + -8.5223620032358804e-01 2.1998913172474106e+00 2.6205459962797533e+00 + -5.8391988783690452e-01 2.4460175487591620e+00 2.9656197587435016e+00 + -1.7919487945050361e-01 2.6442800270227247e+00 3.2381571701750946e+00 + 3.4086643837003328e-01 2.7695263686962721e+00 3.4409043362316267e+00 + 9.1435639178450323e-01 2.7904600510857032e+00 3.5969499227095127e+00 + 1.4885756622716722e+00 2.6915936546561872e+00 3.6895541940551424e+00 + 2.0865678918312227e+00 2.4450941682588390e+00 3.6673131479751597e+00 + 2.7613226935801354e+00 2.0281848719250926e+00 3.5930597150098409e+00 + 3.4376080528813504e+00 1.5430943590725776e+00 3.6586232446293976e+00 + 3.8493358148852335e+00 1.2337226982839584e+00 3.8627827818682983e+00 + id 12694 + loc 5.0372830592095852e-03 5.5404007434844971e-01 406 + blend 0.0000000000000000e+00 + interp 3.8445302210452337e-01:2.2732240594790268e-01:4.9291554587813835e-01:2.2502648699262545e-01:1.4827107462072802e+00:3.7358953243540416e-01:2.0000000119210117e+00:3.8444917757430236e-01:2.8314688206885541e+00:3.4847890467645365e-01:3.6334486334942220e+00 + CVs 20 + 9.7894374100542858e-02 2.2851594537894437e-01 -8.5334295053451178e-02 + 1.0949863665448861e-01 4.1552791007226009e-01 -1.4109004400884986e-01 + 9.4208500580820476e-02 5.7137025862716107e-01 -1.7250431582932607e-01 + 8.0823809773932664e-02 7.2762641273426243e-01 -1.8639134689756820e-01 + 6.6038889994234351e-02 8.7990576649471708e-01 -1.8001742356801670e-01 + 4.8010643791227103e-02 1.0202683134107915e+00 -1.4971267715820349e-01 + 2.8396964295486826e-02 1.1367312126585569e+00 -9.0608890684951010e-02 + 1.6440549285220207e-02 1.2089123681894520e+00 2.6738499397068599e-03 + 3.8902133299565322e-02 1.1995054626162576e+00 1.2622779960116126e-01 + 1.4548604638345219e-01 1.0691208186948589e+00 2.2299070808405785e-01 + 3.3122210734601987e-01 8.8438354913380335e-01 1.8570856118597981e-01 + 5.0216413215190658e-01 7.6336363534269380e-01 5.5618649329620462e-02 + 6.3334053137186885e-01 6.9443746473496115e-01 -7.1666228760336570e-02 + 7.4470388973245538e-01 6.4011888598177791e-01 -1.7969071962000313e-01 + 8.4841257297796380e-01 5.9011909626449399e-01 -2.8076912956928379e-01 + 9.4393870044462491e-01 5.4553748645861089e-01 -3.8634538725685552e-01 + 1.0212015764902689e+00 5.0397129908595051e-01 -5.0175105454853497e-01 + 1.0673138943272733e+00 4.5474887933096786e-01 -6.2338482519672955e-01 + 1.1327674730239683e+00 3.6992249004429245e-01 -6.5997603523156967e-01 + id 12695 + loc 2.6810503005981445e-01 7.8168809413909912e-01 1076 + blend 0.0000000000000000e+00 + interp 4.0648372507610331e-01:2.5228946537373381e-01:6.2727255513424884e-01:3.2199953263371967e-01:1.0698319477311085e+00:2.7231526056669825e-01:2.0027774137610157e+00:4.0647966023885257e-01:2.8787639825344051e+00:2.5145642360703963e-01:3.4619758585688043e+00 + CVs 20 + 2.2332448785912973e-01 2.9315360078041763e-01 -5.9025832896484748e-02 + 4.4466094130033323e-01 5.6652177803246317e-01 -1.3183655242236716e-01 + 6.5615476160991970e-01 8.2172706796095918e-01 -2.1137032772854183e-01 + 8.5462080388904993e-01 1.0573321393702853e+00 -2.9614068484780964e-01 + 1.0420721020051060e+00 1.2715480294628385e+00 -3.8883061128028695e-01 + 1.2218644033796273e+00 1.4637568396918561e+00 -4.9169969697175636e-01 + 1.3984689818635447e+00 1.6333610611953837e+00 -6.0776611141308723e-01 + 1.5753425996086927e+00 1.7786259964670350e+00 -7.4126780596243935e-01 + 1.7519597942805039e+00 1.8963800334174699e+00 -8.9686580655855841e-01 + 1.9238530283707997e+00 1.9812775286912294e+00 -1.0781754911921213e+00 + 2.0868845233557551e+00 2.0267491506833002e+00 -1.2843609830451856e+00 + 2.2409188779783427e+00 2.0257740710356194e+00 -1.5108973225300768e+00 + 2.3872231713661884e+00 1.9668271529710544e+00 -1.7514297108205976e+00 + 2.5239014451723771e+00 1.8319755358103837e+00 -1.9959496244300969e+00 + 2.6383745706671435e+00 1.6100451395507696e+00 -2.2387672065447939e+00 + 2.6933239532369555e+00 1.3142157824540477e+00 -2.4850498941183741e+00 + 2.6388794459177158e+00 9.8070558125258933e-01 -2.7337335743085123e+00 + 2.4380433709731033e+00 6.6913921057113301e-01 -2.9564872097929475e+00 + 2.1163525168994801e+00 4.9362719116197218e-01 -3.0729798914964066e+00 + id 12696 + loc 7.1293312311172485e-01 2.6503002643585205e-01 411 + blend 0.0000000000000000e+00 + interp 3.7373562679952660e-01:3.2542536895811047e-01:7.4987142327195477e-01:3.4312550008218301e-01:1.5128537840296434e+00:2.9249824384141548e-01:2.1011700248142104e+00:3.4692652036077171e-01:3.1357101013671187e+00:3.7373188944325864e-01:3.9383042559593759e+00 + CVs 20 + -6.0729872456181910e-01 1.2978122074640280e-01 1.6956708456547842e-01 + -1.0739978367273519e+00 1.7628838315729312e-01 2.9972474025221035e-01 + -1.5154022329203565e+00 1.9666328127347854e-01 3.9727858423441670e-01 + -1.9812371615927640e+00 2.1915692065446968e-01 4.5779901861170613e-01 + -2.4708455197470198e+00 2.3719542115648484e-01 4.7983961260662916e-01 + -2.9861282953918771e+00 2.4833224318135816e-01 4.7056018258313248e-01 + -3.5288531294616541e+00 2.5097723404867889e-01 4.4401071158292615e-01 + -4.0998266288372696e+00 2.3509710279343210e-01 4.1564797591861175e-01 + -4.6998373460329699e+00 1.7867414595871600e-01 4.0177433285977215e-01 + -5.3223980607245753e+00 5.0471824265936771e-02 4.2389005387598644e-01 + -5.9406802983282230e+00 -1.7877383872879982e-01 5.0287040455646093e-01 + -6.5145207625029347e+00 -5.1646439025316626e-01 6.4147556380067638e-01 + -7.0159553248729436e+00 -9.4541951069220032e-01 8.2640741002354612e-01 + -7.4310728870029266e+00 -1.4417419562402878e+00 1.0485866217232824e+00 + -7.7468036728746590e+00 -1.9806346661125542e+00 1.3023752355052465e+00 + -7.9513675865174065e+00 -2.5386510887967630e+00 1.5706647500771518e+00 + -8.0424763178753800e+00 -3.0957179944264781e+00 1.8261711023057232e+00 + -8.0359461807203534e+00 -3.6208911656812774e+00 2.0557499017071530e+00 + -8.0940878904687246e+00 -3.9571941827858534e+00 2.2656706561799660e+00 + id 12697 + loc 3.8994064927101135e-01 6.0410362482070923e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2245939341680433e-01:3.6007491638206091e-01:6.4217099427908786e-01:3.7127628474168806e-01:1.3583883563479300e+00:3.7491393157427666e-01:2.0572466666688864e+00:3.5748438303840668e-01:2.9546591684904673e+00:3.0681944763286922e-01:3.3469412970525241e+00:4.2245516882287021e-01:3.9543704573758123e+00 + CVs 20 + 8.7599691933509360e-02 3.2882605866953402e-01 -1.5567197068572738e-01 + 1.9137780481040095e-01 6.9243341482122556e-01 -3.5917872082132229e-01 + 2.9818215873543469e-01 1.0812201297237045e+00 -5.9922171364001797e-01 + 4.0140252085855505e-01 1.4784472968729643e+00 -8.8112687543218016e-01 + 5.0330156655309877e-01 1.8571513821280208e+00 -1.2201665753583122e+00 + 6.1671636030536714e-01 2.1699607807888119e+00 -1.6265561327754412e+00 + 7.6192384776919386e-01 2.3571746676244798e+00 -2.0901478598318501e+00 + 9.5549657771215368e-01 2.3702284720779874e+00 -2.5683164099866955e+00 + 1.1918811296305110e+00 2.1970276868378704e+00 -2.9979488151856417e+00 + 1.4413983573009446e+00 1.8796081558318836e+00 -3.3376531047742115e+00 + 1.6854133864100225e+00 1.4913178985749527e+00 -3.6011271633413888e+00 + 1.9319432874161993e+00 1.0930971327649868e+00 -3.8378397141549945e+00 + 2.1611058730315160e+00 7.0671138782708876e-01 -4.0846184698365953e+00 + 2.2814641834681817e+00 3.2662192453715433e-01 -4.3514866697308410e+00 + 2.1988894257843881e+00 -2.4867710926777864e-02 -4.6440721384472745e+00 + 1.8936920219433488e+00 -2.6346881453101134e-01 -4.9768563161108634e+00 + 1.4166843275026564e+00 -3.1478017428250538e-01 -5.3169191869398782e+00 + 9.4111690239514578e-01 -2.8072109300379455e-01 -5.5942021809819336e+00 + 7.7073096502852478e-01 -5.1835951047174389e-01 -5.9149272630108873e+00 + id 12698 + loc 6.5135222673416138e-01 9.8995655775070190e-01 1078 + blend 0.0000000000000000e+00 + interp 4.5487307411981115e-01:4.0284454714924228e-01:1.9126128838716261e-01:3.4328846030550575e-01:9.1053902336650272e-01:4.5486852538906997e-01:1.0293959107932336e+00:3.5079057758633625e-01:1.8423589496431014e+00:3.7582315770010205e-01:2.2688187635544530e+00:3.9975696496574697e-01:3.2413271473356735e+00:4.5397790984915443e-01:3.9134433787733753e+00 + CVs 20 + 2.0145226493706600e-01 2.6529671066152805e-01 -9.7871851664455070e-02 + 4.1526596182452058e-01 5.1838449305975931e-01 -2.0781111151028614e-01 + 6.3821349047320608e-01 7.6215830653617278e-01 -3.2956371480375229e-01 + 8.6571437465426537e-01 9.9350029838963372e-01 -4.6819027159050608e-01 + 1.0922071551700254e+00 1.2070527808857126e+00 -6.3242334673492517e-01 + 1.3095345371599345e+00 1.3961164019378232e+00 -8.3125041717681425e-01 + 1.5069300324919315e+00 1.5519540402018452e+00 -1.0724821719051800e+00 + 1.6708525820952054e+00 1.6624011723233874e+00 -1.3600723477787569e+00 + 1.7869034952459570e+00 1.7134165312170602e+00 -1.6894978476369946e+00 + 1.8466281169972811e+00 1.6972682035377864e+00 -2.0456937074281423e+00 + 1.8550520552326935e+00 1.6157125986613989e+00 -2.4052550861327053e+00 + 1.8398385149224059e+00 1.4841985148768444e+00 -2.7430983911572056e+00 + 1.8354798922093460e+00 1.3255296375119539e+00 -3.0490201769631815e+00 + 1.8407224446256789e+00 1.1423746409797442e+00 -3.3393548464074234e+00 + 1.8300503772533634e+00 9.2861823768751550e-01 -3.6401786683399080e+00 + 1.8404499864809254e+00 7.4494228736719870e-01 -3.9401412562311329e+00 + 1.9279264570342434e+00 6.9171991189089210e-01 -4.2162168780976099e+00 + 2.0750903796199567e+00 8.0776960039765378e-01 -4.4404496704251031e+00 + 2.1334433147848091e+00 7.3343251137846899e-01 -4.7939437896388206e+00 + id 12699 + loc 9.0143495798110962e-01 4.5776432752609253e-01 372 + blend 0.0000000000000000e+00 + interp 3.1389493352191639e-01:2.7477146903910471e-01:9.7073378644793040e-03:3.1389179457258121e-01:9.7650772933730878e-01:2.6847582847266493e-01:2.0029968762053261e+00:2.9188446273422047e-01:2.9996710349318247e+00 + CVs 20 + 6.1614968598072928e-01 4.7204914264053699e-01 3.6044446631679009e-02 + 1.2013168181778435e+00 8.3194934951099075e-01 2.5872499521236630e-02 + 1.7953178484294317e+00 1.1175085255298571e+00 4.4092641412453004e-02 + 2.3882722014985909e+00 1.4180366104767399e+00 1.8535735679393089e-01 + 2.8623763790087406e+00 1.7976377740586142e+00 5.7880245535760699e-01 + 2.9828977408721373e+00 2.1401809521773809e+00 1.2070860477646423e+00 + 2.7690010732652581e+00 2.2772617208953720e+00 1.7875733342160747e+00 + 2.3954981826719663e+00 2.2357950707712386e+00 2.2041830855556968e+00 + 1.9354718894670468e+00 2.0778502100975991e+00 2.4590395193135590e+00 + 1.4143393599133725e+00 1.8308492426157499e+00 2.5686427882675789e+00 + 8.7256673348785285e-01 1.4558576916648598e+00 2.5400735447696552e+00 + 3.8323977953552546e-01 8.9323086859548284e-01 2.3606857389963736e+00 + -7.2858628975736861e-02 1.4417441878211704e-01 2.0070814039931659e+00 + -7.3119600044606337e-01 -6.9005020570001097e-01 1.4840700744037252e+00 + -1.8728969709409808e+00 -1.2493537968089909e+00 9.6734035894127079e-01 + -3.3490681708906571e+00 -1.1466296268417535e+00 7.0001659476641354e-01 + -4.7755279594867739e+00 -4.0322768852155710e-01 7.8446431347265455e-01 + -5.7964093522003939e+00 6.4259727360473873e-01 1.1718828638247083e+00 + -6.3356400347612212e+00 1.4957455868237397e+00 1.6152489282750797e+00 + id 12700 + loc 3.4267267584800720e-01 8.5948988795280457e-02 413 + blend 0.0000000000000000e+00 + interp 6.2184430300294413e-01:6.2183808455991418e-01:4.6544638005561434e-01:4.6053909500959994e-01:1.0006180470854464e+00:3.2901274207025732e-01:1.6952782501679946e+00:6.1253411803846169e-01:1.9982980145059790e+00:3.3526725403358593e-01:3.0137894930530154e+00:3.6007174213654203e-01:3.9888389969830453e+00 + CVs 20 + 7.6201465564563406e-03 1.3349191216456335e-01 -1.1806138556407380e+00 + 4.4610594246050655e-02 1.0751503836803206e-01 -1.9741998156801155e+00 + 1.0797307431015496e-01 2.1237689758648037e-02 -2.6565109149525190e+00 + 1.8859178245172351e-01 -1.0001736411284268e-01 -3.3255313852482500e+00 + 2.7716861856579811e-01 -2.6566277051970533e-01 -3.9722089535448264e+00 + 3.6645701871581782e-01 -4.8226741280421914e-01 -4.5921068511388521e+00 + 4.5448602314930842e-01 -7.5431585674502311e-01 -5.1785192009444359e+00 + 5.4382088360132175e-01 -1.0862292142407801e+00 -5.7205251813876723e+00 + 6.3335461406367743e-01 -1.4822416498600175e+00 -6.2068189464040691e+00 + 7.0742580345498307e-01 -1.9424129165119104e+00 -6.6242680704376866e+00 + 7.4788293270513462e-01 -2.4594356351744486e+00 -6.9552666043714382e+00 + 7.6280043710521817e-01 -3.0181943995702345e+00 -7.1914986568570987e+00 + 7.7188464116036715e-01 -3.6037864703483526e+00 -7.3388058700140393e+00 + 7.8360308245140764e-01 -4.1958421713225240e+00 -7.4011077735528055e+00 + 7.9665002594536327e-01 -4.7633556221864488e+00 -7.3766061069981745e+00 + 8.1650298428254720e-01 -5.2718858155902391e+00 -7.2651472101783199e+00 + 8.4785907125403948e-01 -5.6979917469563945e+00 -7.0819536438808353e+00 + 8.7285259688457695e-01 -6.0504599929228240e+00 -6.8704868461101052e+00 + 9.3769216539576061e-01 -6.4757382153385041e+00 -6.8053875440737768e+00 + id 12701 + loc 2.5992527604103088e-01 9.8636883497238159e-01 409 + blend 0.0000000000000000e+00 + interp 4.5441698011471948e-01:4.1319700819639926e-01:5.7812088092194869e-01:2.6582132630900451e-01:1.0033881599518772e+00:2.9963590328142009e-01:1.0417016410675286e+00:1.3753599752595305e-01:2.1757528205084151e+00:4.5441243594491837e-01:3.4022575351481041e+00:3.6114176731723985e-01:3.9975357019096958e+00 + CVs 20 + 4.6139472458430625e-01 1.8110138972389761e-01 2.4260320902826843e-02 + 8.0216443727864595e-01 3.1555295875082207e-01 1.8195876060102534e-03 + 1.1020669100783320e+00 4.3488957721732591e-01 -3.8109266233217975e-02 + 1.4091018236154995e+00 5.5991529032922249e-01 -7.5611526059176343e-02 + 1.7259980357933369e+00 6.8870311945137241e-01 -1.1242414109388088e-01 + 2.0567009624780432e+00 8.1786753777161891e-01 -1.4944412152126341e-01 + 2.4091554690064108e+00 9.4559838300524190e-01 -1.8491134956042268e-01 + 2.7949767681743398e+00 1.0683492757825015e+00 -2.1371381863486141e-01 + 3.2233231698472324e+00 1.1737683035427320e+00 -2.2702660006395092e-01 + 3.6942302699071958e+00 1.2425775704070956e+00 -2.1596759932293014e-01 + 4.1966172822720065e+00 1.2543633127939646e+00 -1.7833340095721176e-01 + 4.7063354104183048e+00 1.1882425347545205e+00 -1.2280365300190246e-01 + 5.1905495498433716e+00 1.0301737800480895e+00 -6.5293546580112105e-02 + 5.6219321577082333e+00 7.8235768968854158e-01 -1.9116065930714965e-02 + 5.9840762601287683e+00 4.6052084550992767e-01 9.3279917942699075e-03 + 6.2696721935930739e+00 8.5608137941487250e-02 1.6363072101634790e-02 + 6.4739833570414813e+00 -3.2189760522162425e-01 1.2973529247580773e-03 + 6.5882988257790158e+00 -7.3871396665079470e-01 -2.4024917797764889e-02 + 6.5400894730460646e+00 -1.1281897234690534e+00 -5.7168854866450736e-02 + id 12702 + loc 7.8662782907485962e-01 3.0014356970787048e-01 1081 + blend 0.0000000000000000e+00 + interp 4.3033864007772837e-01:4.3033433669132759e-01:6.2127209897126012e-01:3.4705149950005731e-01:9.9483585466009383e-01:3.6859488987541295e-01:1.3296305007882756e+00:3.8625014863858370e-01:1.9974540684871429e+00:4.2601899741101390e-01:2.6709539810039238e+00:3.8874211934571723e-01:3.2097146545809188e+00:2.8030244277514849e-01:3.9476697031865071e+00 + CVs 20 + 1.0763871944505365e-01 5.3554501572896407e-01 -5.3754828763489781e-01 + 1.4547201698071729e-01 9.7339199918143637e-01 -9.1684802013602273e-01 + 1.6459015217494194e-01 1.3571731214609843e+00 -1.2345929109130043e+00 + 1.7549199110885366e-01 1.7294197271190279e+00 -1.5320528467326400e+00 + 1.7459132562603757e-01 2.0935096644342237e+00 -1.7951369316419150e+00 + 1.5769302889993486e-01 2.4656612785142187e+00 -2.0039692908701379e+00 + 1.1779399967393878e-01 2.8719703753022658e+00 -2.1226684478096187e+00 + 4.5613446460418317e-02 3.3380528863184908e+00 -2.0734442547006413e+00 + -5.6020227895894892e-02 3.8159224264618370e+00 -1.6874961281282348e+00 + -1.1211380236815061e-01 4.0070107444530603e+00 -9.5698003575854762e-01 + -7.8650459209953505e-02 3.8587374135873298e+00 -3.2375295686213268e-01 + -1.3670142760453141e-02 3.6258127442142594e+00 1.1239192537712461e-01 + 5.5224695488645226e-02 3.3806312789529027e+00 4.4992908843492074e-01 + 1.2236032147950165e-01 3.1149968662181098e+00 7.3978201177533154e-01 + 1.8848128840217349e-01 2.7958826614132617e+00 1.0004808580438502e+00 + 2.6015373518377027e-01 2.3434932615730277e+00 1.2308356666581104e+00 + 3.3947144004051244e-01 1.6851199986321734e+00 1.3658369899079426e+00 + 4.1111386170408265e-01 9.9727077302923794e-01 1.3208044144652022e+00 + 4.4913217780089892e-01 8.2688990124243789e-01 1.2817162258274371e+00 + id 12703 + loc 6.1818170547485352e-01 1.7225661873817444e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3734910614842223e-01:3.0067653360906538e-01:1.5698283469863128e-02:3.2259631575298303e-01:7.1668135873698291e-01:2.7246876369199857e-01:1.3744405405140065e+00:3.3734573265736079e-01:2.0662706796229249e+00:2.7685785719614642e-01:2.8821790372429374e+00:2.7462316110864976e-01:3.4278794070318388e+00 + CVs 20 + 1.6624253868564720e-01 3.1067254817833601e-01 -1.5826508929275845e-01 + 3.0147866766642756e-01 5.8542333554454562e-01 -2.8709975136969257e-01 + 3.9036947237666431e-01 8.4100936667368653e-01 -4.2777535801552757e-01 + 4.3572741183908303e-01 1.0847645797031216e+00 -5.9088079217534628e-01 + 4.7062683712361209e-01 1.3311621001171976e+00 -7.5938834061383542e-01 + 5.4611619316896243e-01 1.6030502568586928e+00 -9.0433256687220576e-01 + 7.0353811113267040e-01 1.8870920701217626e+00 -9.8703941889258728e-01 + 9.4656644756040786e-01 2.1312417181572343e+00 -9.7688745950245071e-01 + 1.2221446845408228e+00 2.2936216133931984e+00 -8.4452416231827998e-01 + 1.4292804247669906e+00 2.3624684586366129e+00 -5.8805204395399757e-01 + 1.5180932285062740e+00 2.3582250057380159e+00 -2.4425066700317632e-01 + 1.4826744448141074e+00 2.2944629214840040e+00 1.5873997178089416e-01 + 1.3051027194165903e+00 2.1597095301418996e+00 5.3712841083190255e-01 + 1.0190501323211107e+00 1.9620097967323131e+00 7.4754275050453589e-01 + 7.0755895204704400e-01 1.7240761580361954e+00 7.6866674402937352e-01 + 4.3052929096334569e-01 1.4401049044074705e+00 6.8241002574035625e-01 + 1.8714448421188634e-01 1.0651037009202309e+00 5.4091510225599815e-01 + -5.0574759559075137e-02 7.1027422877738466e-01 6.0324387205111341e-01 + -6.5534245725957826e-02 8.1820253472846149e-01 9.3816192194863057e-01 + id 12704 + loc 3.2551038265228271e-01 1.9324034452438354e-01 1080 + blend 0.0000000000000000e+00 + interp 6.4477614279978035e-01:2.9451304506205600e-01:1.1298850024473428e-01:5.0669498437417071e-01:8.9064694796997190e-01:6.4476969503835235e-01:2.2597770990912562e+00:4.0892233307767883e-01:2.5183064756187683e+00:3.9113211193632874e-01:2.9940818217763887e+00:3.9926488719775610e-01:3.7926146498558340e+00 + CVs 20 + 4.5486427695298448e-01 4.1833139201749736e-01 1.4367781665450358e-02 + 6.8940703134740011e-01 7.0997183174125689e-01 3.2130556548625830e-02 + 8.8553760384628399e-01 9.7593981379105577e-01 4.8407700124609376e-02 + 1.1097814291296153e+00 1.2497816999208848e+00 6.2019495924787379e-02 + 1.3473593198921774e+00 1.5233407174599405e+00 6.8876628970870726e-02 + 1.5856154413983847e+00 1.7894277946257935e+00 6.3437297140084448e-02 + 1.8185781910143521e+00 2.0441360438403526e+00 3.8268801799449553e-02 + 2.0528941826032447e+00 2.2890504717001772e+00 -2.0747807739312618e-02 + 2.3019230788689793e+00 2.5224708185505698e+00 -1.4443844609702505e-01 + 2.5509221980915715e+00 2.7176092783317145e+00 -3.6774139933791339e-01 + 2.7477319647906859e+00 2.8404635234970290e+00 -6.7469416583437769e-01 + 2.8638321000117464e+00 2.8952683466413442e+00 -1.0142987669631187e+00 + 2.9040149279306493e+00 2.9060480004159936e+00 -1.3576096842968990e+00 + 2.8770528426946500e+00 2.8918399313104093e+00 -1.6945662187324046e+00 + 2.7755770348843893e+00 2.8689751523935807e+00 -2.0196858511632705e+00 + 2.5539382254924434e+00 2.8535462780226086e+00 -2.3383650865844077e+00 + 2.1651598387568041e+00 2.8072763799213325e+00 -2.6914601812969972e+00 + 1.7623322342671481e+00 2.6195447350241636e+00 -3.0900048652652532e+00 + 1.7546408073041302e+00 2.4291903636116166e+00 -3.2318847833151274e+00 + id 12705 + loc 9.5504641532897949e-01 6.6139125823974609e-01 1082 + blend 0.0000000000000000e+00 + interp 3.0594606957871466e+00:3.2961733871685372e-01:1.8676036411722867e+00:2.6044348388432409e-01:2.5141488348085721e+00:3.8732429500062165e-01:3.0016493399032331e+00:3.7665946894305669e-01:3.7678361994529097e+00:3.0594506957871466e+00:3.7996210484063773e+00 + CVs 20 + -1.7346710395578488e-01 3.0062032739156952e-01 3.5737172260112637e-01 + -2.8834749883372851e-01 5.0350999114412320e-01 5.0584384082239542e-01 + -4.0406776360393359e-01 6.6763138676987510e-01 5.9289640606518912e-01 + -5.5001905613848656e-01 8.2510637439601076e-01 6.8865649128442175e-01 + -7.3082095362199140e-01 9.7106762135892033e-01 7.8845133404309120e-01 + -9.4953195127284418e-01 1.1001614287384931e+00 8.8829394283613194e-01 + -1.2067425592206236e+00 1.2073821118920618e+00 9.8532899714887656e-01 + -1.5004340018194335e+00 1.2891514022952570e+00 1.0779411898665188e+00 + -1.8265739404182071e+00 1.3438823606581340e+00 1.1653390645367239e+00 + -2.1798666260364499e+00 1.3716459608228324e+00 1.2470020954010357e+00 + -2.5548669651580105e+00 1.3730938761191651e+00 1.3219286947984190e+00 + -2.9462767953028943e+00 1.3483104050697490e+00 1.3879705639534670e+00 + -3.3457683353929317e+00 1.2990043517047252e+00 1.4421977006868483e+00 + -3.7391706190567819e+00 1.2344424577155784e+00 1.4829317274473914e+00 + -4.1119140633871076e+00 1.1709431786134656e+00 1.5114301547420119e+00 + -4.4578089923109721e+00 1.1205641811988407e+00 1.5311965871513040e+00 + -4.7787938299077810e+00 1.0854534243599412e+00 1.5465474957793643e+00 + -5.0733802956935961e+00 1.0654261828055835e+00 1.5592473666740245e+00 + -5.3704087437271779e+00 1.0415597092906772e+00 1.5740640437443814e+00 + id 12706 + loc 6.3412004709243774e-01 4.3599513173103333e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9105556177616333e-01:3.3731909622709033e-01:1.7772302372895454e-01:3.8782721547406496e-01:9.9957758801684704e-01:2.9139507403998799e-01:1.6609349692555859e+00:3.9786342834125293e-01:2.4112947322880469e+00:3.8298724258846600e-01:3.0559798764647996e+00:4.9105065122054559e-01:3.9143613585277399e+00 + CVs 20 + -1.1870994917618653e-01 1.8741760714935674e-01 9.2200362835155300e-02 + -2.3878039232059431e-01 3.7542405122658368e-01 1.7937321001343837e-01 + -3.5724769798023082e-01 5.6435414096327374e-01 2.6363802876381109e-01 + -4.6833961950315406e-01 7.5152175931508314e-01 3.4427347800546904e-01 + -5.7022549446989945e-01 9.3721134309611243e-01 4.2621271669429656e-01 + -6.6384484157000989e-01 1.1249701996052039e+00 5.2508815830098288e-01 + -7.5395283109298605e-01 1.3133776229329213e+00 6.5961479897473141e-01 + -8.4465269059321724e-01 1.4933427096690939e+00 8.3914806798868713e-01 + -9.3292027865793048e-01 1.6525135726074109e+00 1.0645301717754170e+00 + -1.0073187189516202e+00 1.7777540704968833e+00 1.3329346489135752e+00 + -1.0535201000894652e+00 1.8574242552798208e+00 1.6368195026019405e+00 + -1.0546678203277378e+00 1.8796470633793123e+00 1.9614612287188435e+00 + -9.9330357255111446e-01 1.8304577006135996e+00 2.2763184832814125e+00 + -8.7611014993084935e-01 1.7058779698330928e+00 2.5230535511606389e+00 + -7.4254529132117530e-01 1.5202347182394234e+00 2.6229153877262505e+00 + -6.2134897483609575e-01 1.2531507610368033e+00 2.5210620461296678e+00 + -4.7117576734219402e-01 8.1517466041421649e-01 2.3361805480783593e+00 + -2.2090905500049621e-01 1.9979293150495769e-01 2.3505476300225148e+00 + -1.4749833892578473e-01 2.6056338391777589e-01 2.4294822448658753e+00 + id 12707 + loc 1.8193246424198151e-01 5.8512818813323975e-01 372 + blend 0.0000000000000000e+00 + interp 4.3957589112904977e-01:3.2103129747599890e-01:4.4812847941264611e-03:3.7730340874766760e-01:8.0845331580423452e-01:2.8103522184678770e-01:1.0967112490382975e+00:4.3957149537013851e-01:1.9192053397142002e+00:2.9446816743558130e-01:2.3244702335744236e+00:2.7042177616305069e-01:3.1474624074862794e+00 + CVs 20 + -3.7504347538099869e-01 6.5931028698907412e-01 -2.2309542669698951e-01 + -7.5010413080107829e-01 1.2668796845015007e+00 -4.3025426999223670e-01 + -1.1161884005483933e+00 1.8088407248689817e+00 -6.5530187792993022e-01 + -1.4017523850796545e+00 2.2838756949203076e+00 -9.4126210605463534e-01 + -1.5005285835989681e+00 2.6916549355591219e+00 -1.3292387896647593e+00 + -1.3551163387375935e+00 2.9820322317858232e+00 -1.8032885688875300e+00 + -1.0013386575496694e+00 3.0854712607466452e+00 -2.2924133973555127e+00 + -5.2330179761408746e-01 2.9692756282155841e+00 -2.7276227079287985e+00 + -7.3834665118226450e-03 2.6508460753626344e+00 -3.0808267499693365e+00 + 4.7255542275908757e-01 2.1550047411845599e+00 -3.3519935181246092e+00 + 8.5959528237834171e-01 1.4837797885296420e+00 -3.5367750469910701e+00 + 1.1513922246976809e+00 6.2328465509773234e-01 -3.6023089924995375e+00 + 1.4352519726558541e+00 -3.7965500013282316e-01 -3.4806190002799435e+00 + 1.8665697426563355e+00 -1.3728380700815352e+00 -3.1517432339737721e+00 + 2.6240319613767733e+00 -2.1532350101448055e+00 -2.7439019452945623e+00 + 3.6823275656182770e+00 -2.4664431287138107e+00 -2.5055839526576298e+00 + 4.7933895379741225e+00 -2.2448104230139752e+00 -2.5030758891664000e+00 + 5.6989838694540955e+00 -1.6123538409557441e+00 -2.6353503810763041e+00 + 6.1951619389572326e+00 -8.7368767737055064e-01 -2.7175183050327263e+00 + id 12708 + loc 8.7399989366531372e-01 5.6210510432720184e-02 1076 + blend 0.0000000000000000e+00 + interp 4.5712945555386386e-01:2.6158962826371140e-01:8.7057399119869150e-01:4.5712488425930836e-01:1.5059002741106089e+00:4.4139705215147079e-01:1.9928947727475745e+00:4.0369682805974805e-01:2.3243941202115499e+00:3.4918058587921952e-01:3.0038404076344429e+00:2.4643343692595715e-01:3.9188492696579686e+00 + CVs 20 + -1.6191652613805463e-01 3.0539729771244212e-01 2.5494702910679512e-01 + -3.2991186097752584e-01 5.9020627047805085e-01 5.0684263388748629e-01 + -4.9970752634927584e-01 8.4686158312303494e-01 7.7151666664873564e-01 + -6.6336713394826208e-01 1.0711418642301358e+00 1.0504599191351400e+00 + -8.0972897311995506e-01 1.2589902427177155e+00 1.3331376356094271e+00 + -9.4078649312439089e-01 1.4077523198130091e+00 1.6169783080640707e+00 + -1.0817657594610486e+00 1.5203658718844757e+00 1.9144257306623544e+00 + -1.2601917743433233e+00 1.6012741179868919e+00 2.2255275245048747e+00 + -1.4863589681210669e+00 1.6562208448207638e+00 2.5247792554783426e+00 + -1.7623479391119710e+00 1.6886614674980440e+00 2.7800380189162786e+00 + -2.0883562697251747e+00 1.6976168800428446e+00 2.9693203405498227e+00 + -2.4634289841569932e+00 1.6772005458495158e+00 3.0936167649527713e+00 + -2.8779009735450809e+00 1.5924875056505079e+00 3.1801740800448175e+00 + -3.2803813732028333e+00 1.3799620384983795e+00 3.2430218385329130e+00 + -3.6121883304854232e+00 1.0146430116025036e+00 3.2626671922523074e+00 + -3.8406581807371287e+00 4.1066700261139055e-01 3.2363106557788974e+00 + -3.6774870180187920e+00 -6.2585144439086937e-01 3.1821524878706842e+00 + -2.8712193114216467e+00 -1.4830796383480394e+00 3.1279460492803621e+00 + -2.6062445952106410e+00 -1.6490805045843784e+00 3.0481154221751603e+00 + id 12709 + loc 2.0171719789505005e-01 9.0174788236618042e-01 1068 + blend 0.0000000000000000e+00 + interp 6.3157302751402367e-01:3.6857580739655488e-01:2.8635618480225344e-01:4.1249639107337310e-01:9.9913178636449596e-01:5.6625470857887272e-01:1.9570288623895231e+00:6.3156671178374857e-01:2.1895564830381904e+00:5.3776369309211003e-01:2.7866024810066565e+00:3.5302721376968005e-01:3.0279401095385339e+00:4.4235528596717283e-01:3.6906713924571481e+00 + CVs 20 + 1.2050943349010484e-01 3.3476328565477464e-01 -3.0691200337495356e-01 + 2.6931069361239318e-01 6.6663080377223560e-01 -6.1871872618296220e-01 + 4.2229996952776033e-01 1.0011737558175757e+00 -9.3273298211654065e-01 + 5.6599353920674855e-01 1.3298496534650972e+00 -1.2479947163489955e+00 + 6.9499815777928176e-01 1.6400698359463175e+00 -1.5656224703648134e+00 + 8.0680390783118461e-01 1.9221052714210689e+00 -1.8838919089651467e+00 + 9.0264322378600703e-01 2.1714052310888792e+00 -2.1983074621572753e+00 + 9.8658813385448063e-01 2.3883091457616969e+00 -2.5053913351554109e+00 + 1.0640883556102194e+00 2.5781762550677261e+00 -2.8121255839857597e+00 + 1.1414372632186500e+00 2.7459769581981113e+00 -3.1277463016837914e+00 + 1.2278704155414177e+00 2.8983662202597769e+00 -3.4489089345608930e+00 + 1.3360890448610214e+00 3.0406585732210036e+00 -3.7829194027733823e+00 + 1.4750796891073028e+00 3.1541415576351195e+00 -4.1521622484187333e+00 + 1.6386808292810791e+00 3.1991282916527375e+00 -4.5574999757918713e+00 + 1.8260744086891427e+00 3.1428555997906891e+00 -4.9795905656286834e+00 + 2.0546418306079439e+00 2.9573854658105168e+00 -5.4021411335433864e+00 + 2.2880612795618993e+00 2.6435939000560484e+00 -5.8173089704153975e+00 + 2.4218161606788540e+00 2.2682432180549230e+00 -6.2277373196727694e+00 + 2.3967887597955500e+00 1.9276050205769659e+00 -6.6224364005437124e+00 + id 12710 + loc 7.8454160690307617e-01 6.4092576503753662e-02 411 + blend 0.0000000000000000e+00 + interp 5.1061105217237057e-01:3.9215188116657002e-01:9.4217976520333369e-01:4.0647108069361698e-01:1.8736522911882847e+00:2.3223684031040109e-01:2.2491964541186089e+00:5.1060594606184884e-01:3.0045529726860813e+00:4.5089317915915650e-01:3.4270632263206950e+00:3.1864754613447410e-01:3.9993495806377943e+00 + CVs 20 + -5.5717432178634774e-01 1.6230872774889823e-01 1.9463359233273908e-01 + -1.0073571605492522e+00 2.5493120633723310e-01 3.8465497182808356e-01 + -1.4576155971665232e+00 3.3220309464119324e-01 5.7182773320658808e-01 + -1.9472526018395910e+00 4.0888235291901565e-01 7.5465054378238006e-01 + -2.4698381497088624e+00 4.7064281863961743e-01 9.3126556533122828e-01 + -3.0131488551228056e+00 5.0203958813279714e-01 1.1044781900221838e+00 + -3.5618414342291547e+00 4.8552922468051940e-01 1.2782662711854456e+00 + -4.0963022122071493e+00 4.0056412576139300e-01 1.4545285725358155e+00 + -4.5857465139256828e+00 2.3143137400233926e-01 1.6368718064438392e+00 + -4.9879330200434779e+00 -2.1894313601553694e-02 1.8306088129379339e+00 + -5.2711994419323460e+00 -3.3835613767403228e-01 2.0312415217460527e+00 + -5.4369884737201239e+00 -6.8572197929507972e-01 2.2241987453488461e+00 + -5.5043484982245161e+00 -1.0358020727372290e+00 2.3990417639014017e+00 + -5.4903180596555163e+00 -1.3671916033197622e+00 2.5519929379647133e+00 + -5.4131266023332110e+00 -1.6704864872984038e+00 2.6796340815450512e+00 + -5.2918882901184068e+00 -1.9491942721846738e+00 2.7776345992012041e+00 + -5.1418615161520389e+00 -2.2099236647330383e+00 2.8452833856757689e+00 + -4.9760536765615324e+00 -2.4608572204019108e+00 2.8881599378866425e+00 + -4.8316857261431192e+00 -2.8120078929443246e+00 2.9290923247178138e+00 + id 12711 + loc 4.7489327192306519e-01 9.6088266372680664e-01 409 + blend 0.0000000000000000e+00 + interp 5.6095675202334949e-01:4.4514713682722451e-01:2.8780982377250686e-02:4.0408044597258552e-01:7.8128857092401560e-01:3.4031936635559873e-01:1.5198457442575573e+00:3.6699214147720188e-01:2.1042088650895483e+00:5.6095114245582933e-01:2.7444175837454177e+00:4.7665540953664892e-01:3.1811925865417603e+00:2.9353384432756335e-01:3.7038187283016599e+00 + CVs 20 + 5.2658129823090483e-01 1.2823601530409853e-01 -9.6847780443364145e-02 + 9.4098603913599876e-01 1.9006230474420205e-01 -1.9800201475829693e-01 + 1.3250305409099834e+00 2.2576632035795441e-01 -2.8336881244296486e-01 + 1.7075306234140466e+00 2.5216318418699135e-01 -3.4703811513589766e-01 + 2.0806262868393604e+00 2.6920462352017138e-01 -3.9463349241921902e-01 + 2.4391868138447408e+00 2.7827366974294909e-01 -4.3175087485681063e-01 + 2.7804418321333548e+00 2.8216930722570854e-01 -4.6221080737749587e-01 + 3.1041319028836485e+00 2.8278975241590820e-01 -4.8638279237782384e-01 + 3.4130677603586745e+00 2.7970955986896540e-01 -4.9882620666425731e-01 + 3.7105129312712464e+00 2.7371807292732364e-01 -4.9172389308240383e-01 + 4.0001494915150619e+00 2.6434976102524765e-01 -4.6048167353798769e-01 + 4.2888722707230960e+00 2.4167220980966042e-01 -4.0645867293801230e-01 + 4.5825425722106843e+00 1.8691566138986748e-01 -3.3369363490235732e-01 + 4.8819158964270137e+00 8.5755977935458638e-02 -2.4469219923181168e-01 + 5.1839239930668306e+00 -6.6488335797333598e-02 -1.4281958065974987e-01 + 5.4822970269129723e+00 -2.6680362703270566e-01 -3.6931116344465942e-02 + 5.7660631629322667e+00 -5.0934634705596027e-01 6.5323325193050397e-02 + 6.0181175046615802e+00 -7.9465752451057226e-01 1.7207158888339713e-01 + 6.1431808829334269e+00 -1.1266434641067136e+00 2.8795200462473897e-01 + id 12712 + loc 6.8781954050064087e-01 3.2296255230903625e-01 393 + blend 0.0000000000000000e+00 + interp 4.9486811816992199e-01:3.2571028074683633e-01:2.4741572831664460e-01:3.0740180967762332e-01:9.9858506486404086e-01:4.9486316948874032e-01:1.8680797272237064e+00:3.1044591889559109e-01:2.0988583783240089e+00:4.7730273850869948e-01:2.9996532017287398e+00:3.3756426068209472e-01:3.3467441353257499e+00 + CVs 20 + 3.1236926645392249e-01 3.4445497592235375e-01 1.5418348801176537e-01 + 6.3159926649710674e-01 6.9092195584589566e-01 3.0580510834873997e-01 + 9.3688541868469011e-01 1.0521801850028978e+00 4.7010367209206128e-01 + 1.2149220250671233e+00 1.4137949498050908e+00 6.6761922725262401e-01 + 1.4594813924563845e+00 1.7516815785511242e+00 9.2286166320249263e-01 + 1.6633289303174239e+00 2.0569565296278447e+00 1.2538835295495276e+00 + 1.8143362339956879e+00 2.3321063319316080e+00 1.6623902637660171e+00 + 1.9094411872786068e+00 2.5785069287483839e+00 2.1407740380627551e+00 + 1.9659510584824114e+00 2.7894495760525131e+00 2.6877149277857093e+00 + 2.0148667781968919e+00 2.9431850622590643e+00 3.3077528949719683e+00 + 2.0914220338868157e+00 2.9995611929531156e+00 3.9977017756657798e+00 + 2.2248574198920479e+00 2.9065443183280495e+00 4.7305676568153672e+00 + 2.4327550736879173e+00 2.6152696751869220e+00 5.4474543460974347e+00 + 2.7221577989555268e+00 2.0883172951073443e+00 6.0527965521556242e+00 + 3.0928584716153029e+00 1.3412583987937221e+00 6.4174378712684490e+00 + 3.5433622542472927e+00 5.0235223026080922e-01 6.4543518634510075e+00 + 4.0665448396470261e+00 -2.5974012039679018e-01 6.1996500645771917e+00 + 4.5900959398013939e+00 -8.7200239414124292e-01 5.7979794672794549e+00 + 4.8738392108969242e+00 -1.4176188604031910e+00 5.6093343181689823e+00 + id 12713 + loc 5.8844506740570068e-01 4.6336299180984497e-01 406 + blend 0.0000000000000000e+00 + interp 3.6657511011995614e-01:3.1088191411616151e-01:2.3252352544072408e-01:2.4073477434047827e-01:1.2012639931526248e+00:2.9942430520958557e-01:1.9865870293441912e+00:3.6657144436885497e-01:2.8327944443352844e+00:3.3409146969502596e-01:3.4745490742531042e+00 + CVs 20 + -2.2484726451551570e-01 1.6406261366797001e-01 3.2625550116268255e-02 + -3.6769561645142018e-01 2.6394466575338371e-01 5.3747741415175854e-02 + -4.6476227656930658e-01 3.2746427500157704e-01 6.4951083364756051e-02 + -5.6118913549167415e-01 3.8918814603772034e-01 7.4416731798440716e-02 + -6.5826693532864244e-01 4.4877670847130219e-01 8.1292633445474230e-02 + -7.5724461464370596e-01 5.0525949134812431e-01 8.5043133590858841e-02 + -8.6002377492216342e-01 5.5716468313815359e-01 8.5995450315633548e-02 + -9.6849741168228232e-01 6.0230325464538703e-01 8.5288390822848392e-02 + -1.0802780089776749e+00 6.3878320541325961e-01 8.2713587174173236e-02 + -1.1862040914548428e+00 6.6688845383353101e-01 7.3942461963468015e-02 + -1.2791297525479284e+00 6.8795352376561503e-01 5.4393554921966736e-02 + -1.3627840028372127e+00 7.0019605536940221e-01 2.6616452308047711e-02 + -1.4444903491149423e+00 6.9903344296899783e-01 -1.3402826403572377e-03 + -1.5243546481214068e+00 6.8269212742317298e-01 -2.6628409973002143e-02 + -1.5961193239736544e+00 6.5419131894108085e-01 -5.6076258669304935e-02 + -1.6556681313367831e+00 6.1773619336563335e-01 -9.7101476336383441e-02 + -1.7052055669475283e+00 5.7600998774731726e-01 -1.4747111738855684e-01 + -1.7485327738647345e+00 5.3045434820172410e-01 -1.9810667635093188e-01 + -1.7917302833959172e+00 4.2586209714463752e-01 -2.1407752502982996e-01 + id 12714 + loc 5.3062915802001953e-01 9.8968362808227539e-01 1081 + blend 0.0000000000000000e+00 + interp 4.4538629881446196e-01:4.4538184495147382e-01:1.1425440390977815e-02:3.8051666329936545e-01:9.9938787702468923e-01:3.8946968563724849e-01:1.5432416961479962e+00:2.3269773955375489e-01:2.3020844252557895e+00:3.2538969559153069e-01:3.4855110231505266e+00 + CVs 20 + 8.0579472071608871e-02 4.9402845221279340e-01 5.3069282048019895e-01 + 1.7008648012785504e-01 8.8207002779713528e-01 8.7038986780072847e-01 + 2.6842697830927542e-01 1.2398011720956683e+00 1.1520181781958823e+00 + 3.7944655771744829e-01 1.6046613770605134e+00 1.4361752021296863e+00 + 5.1362891108933040e-01 1.9700202602058829e+00 1.7123272880180156e+00 + 6.8383163927228363e-01 2.3287882557772512e+00 1.9623837352974844e+00 + 9.0667208132689303e-01 2.6720244630791825e+00 2.1594430909225224e+00 + 1.2038086710431963e+00 2.9832431492081888e+00 2.2716193573757275e+00 + 1.6013211966670773e+00 3.2229561011918371e+00 2.2550666750030302e+00 + 2.0784446874396867e+00 3.3000201453624380e+00 2.0608867111158768e+00 + 2.4958633078710886e+00 3.1513760720409265e+00 1.7388082660272786e+00 + 2.7687557018884155e+00 2.8683493069439692e+00 1.4214839178348930e+00 + 2.9452177773393315e+00 2.5432303441632866e+00 1.1563948127712398e+00 + 3.0759962901091167e+00 2.1974353289554056e+00 9.3859933138714835e-01 + 3.1839271936814675e+00 1.8199843167371710e+00 7.7306813309228029e-01 + 3.2717843383275795e+00 1.3813812221775397e+00 7.0149333454285534e-01 + 3.3284374450616045e+00 8.9738626964954182e-01 7.9220561640730447e-01 + 3.3467667684124733e+00 4.6970889990819703e-01 1.0008963964500661e+00 + 3.3433254008307389e+00 1.5805700854168991e-01 1.0821586550879032e+00 + id 12715 + loc 9.6598970890045166e-01 8.9650046825408936e-01 403 + blend 0.0000000000000000e+00 + interp 5.1206467265686151e-01:5.1205955201013498e-01:3.5323553615129843e-02:4.6736775345336146e-01:6.0035336293485886e-01:4.0912829414489188e-01:9.9142749264656072e-01:3.8696824794596490e-01:1.3389525269286244e+00:3.3041914343724121e-01:1.9949346969330282e+00:4.1933205429953524e-01:2.1992435317391901e+00:4.8466752627613580e-01:2.7274023260449511e+00:3.4135321060407703e-01:3.4053952460701140e+00 + CVs 20 + -3.9698142409824326e-02 -5.1560991544252366e-02 3.8798893832269858e-02 + -6.8840671049811925e-02 -1.0777038899591553e-01 7.3145390438982147e-02 + -1.0824964943959706e-01 -1.6186319331354149e-01 9.5437927968064273e-02 + -1.4698936575326621e-01 -2.1476179392584754e-01 1.1647377585863322e-01 + -1.8267711463407194e-01 -2.6851165534745930e-01 1.3802633386252783e-01 + -2.1459104693039976e-01 -3.2531602243814550e-01 1.5943593095952283e-01 + -2.4263496836945986e-01 -3.8726077535201131e-01 1.7926366359079532e-01 + -2.6787727771149311e-01 -4.5586414090422922e-01 1.9594207132662303e-01 + -2.9315221179628886e-01 -5.3164684777640425e-01 2.0826807159614225e-01 + -3.2267806285091660e-01 -6.1384222151682710e-01 2.1583057963809968e-01 + -3.6107007061071145e-01 -7.0042827950790254e-01 2.1927592547231692e-01 + -4.1236449976286332e-01 -7.8838462477009719e-01 2.1994027614619246e-01 + -4.7932084928707308e-01 -8.7421788389222732e-01 2.1909316555017366e-01 + -5.6359229948826939e-01 -9.5448943245233431e-01 2.1740934728848035e-01 + -6.6616636607617297e-01 -1.0260476807621755e+00 2.1660414348048174e-01 + -7.8236313163802007e-01 -1.0895384474734897e+00 2.2037847909088670e-01 + -8.9862860203739992e-01 -1.1532915160961874e+00 2.3273125312963838e-01 + -9.9717439624003634e-01 -1.2317557392876550e+00 2.5601760744219465e-01 + -9.7579090247511791e-01 -1.3684225320267975e+00 1.4013801136842519e-01 + id 12716 + loc 3.5092729330062866e-01 5.2152770757675171e-01 1084 + blend 0.0000000000000000e+00 + interp 3.3960417276845567e-01:3.3960077672672800e-01:1.7335282090913395e-06:2.5067683469205826e-01:8.6831728659414209e-01:3.2777467163674068e-01:1.3219024885851194e+00:2.9257956694758969e-01:1.9833940748259158e+00:2.5590509094271241e-01:3.0030679617581546e+00 + CVs 20 + -2.7453317656037451e-01 3.3321765855158608e-01 3.3882687383719295e-01 + -5.2649994669695921e-01 6.3754753199532410e-01 5.9817742708191712e-01 + -7.6383020824541326e-01 9.4714463665910964e-01 8.3643062976764115e-01 + -9.9795439196601321e-01 1.2733463147113782e+00 1.0650894319393815e+00 + -1.2472906017332464e+00 1.6040160429215975e+00 1.2591148062244970e+00 + -1.5225672662803185e+00 1.9183249819715615e+00 1.3957480669985678e+00 + -1.8172191817838959e+00 2.1905311832324288e+00 1.4573460233878506e+00 + -2.1025099620014829e+00 2.3957799912756954e+00 1.4367957166388892e+00 + -2.3445480755931460e+00 2.5216068208406175e+00 1.3403431689458847e+00 + -2.5355227380955569e+00 2.5695169523945260e+00 1.1740826965820301e+00 + -2.6796117657002938e+00 2.5345392213740534e+00 9.4342872551141865e-01 + -2.7784143340782519e+00 2.3976950167756166e+00 6.7962969501505466e-01 + -2.8403557617493957e+00 2.1532920046291486e+00 4.5657031746306220e-01 + -2.8833854171020090e+00 1.8429144678160894e+00 3.3709657029972862e-01 + -2.9183959587824884e+00 1.4996220385308816e+00 3.1019672811182497e-01 + -2.9308111490240591e+00 1.1142827151096666e+00 3.1484397284889898e-01 + -2.8842978135051238e+00 6.7070367988617763e-01 2.6393515037450588e-01 + -2.7605507078156730e+00 2.1757558878546909e-01 8.0355066950268395e-02 + -2.6702778567322367e+00 -5.2493366561175731e-02 -7.1582906049812711e-02 + id 12717 + loc 5.7539188861846924e-01 8.4641528129577637e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9241562912829984e-01:4.9241070497200856e-01:2.7077782039977782e-01:3.7791391698319537e-01:9.6467677205324498e-01:4.6362530407822827e-01:1.7405912405308861e+00:3.1713514420641076e-01:2.0951469062425945e+00:4.0956133093512259e-01:2.8826912953335366e+00:3.3441926060032706e-01:3.2474860736972246e+00:4.3150680325677337e-01:3.9508796820105108e+00 + CVs 20 + -7.2291247770593522e-02 2.2518270756796571e-01 1.7013990445124763e-01 + -1.0431350713666343e-01 3.9075824454870428e-01 2.4871763247997059e-01 + -1.4202240968496843e-01 5.3485359449824277e-01 3.1642117456773877e-01 + -2.0026149006899385e-01 6.7234792703332547e-01 4.0014169297575053e-01 + -2.8143887217890412e-01 7.9989578329755751e-01 4.9652845259139228e-01 + -3.8816747441025873e-01 9.1378226256227701e-01 6.0181132473914600e-01 + -5.2251964657033501e-01 1.0101492424634713e+00 7.1178283396388797e-01 + -6.8542698429409488e-01 1.0849275813942008e+00 8.2224879012451491e-01 + -8.7554113385882970e-01 1.1339710250578945e+00 9.2943492408631267e-01 + -1.0886155945447813e+00 1.1539703840589455e+00 1.0309147124840157e+00 + -1.3191780456832782e+00 1.1429894488859391e+00 1.1265906623732822e+00 + -1.5624434175176898e+00 1.1000184564726612e+00 1.2185143443432445e+00 + -1.8155690047759960e+00 1.0241458820000684e+00 1.3094849809999456e+00 + -2.0785432260876888e+00 9.1374776860472584e-01 1.4006824662321011e+00 + -2.3518978139382622e+00 7.6725142015957037e-01 1.4908574296834671e+00 + -2.6321130769095347e+00 5.8545766015423251e-01 1.5793700721524773e+00 + -2.9112614343339445e+00 3.7301131917584185e-01 1.6689130491429713e+00 + -3.1833387699055278e+00 1.3791402236114858e-01 1.7613284496770152e+00 + -3.4841895158750527e+00 -9.1565420176049961e-02 1.8167680677872582e+00 + id 12718 + loc 6.9244647026062012e-01 2.9856467247009277e-01 409 + blend 0.0000000000000000e+00 + interp 5.3579238507662819e-01:4.5895966741050959e-01:4.1652506648508725e-02:2.7103085275584671e-01:6.5121332575009439e-01:4.5146234693071885e-01:1.5914723214626449e+00:4.2242600859111057e-01:1.9935797375374005e+00:3.4344742210922474e-01:2.3672865870216224e+00:4.8221569017351334e-01:2.9724101208468943e+00:4.6939309704758142e-01:3.1926831840999470e+00:5.3578702715277748e-01:3.7847420412572248e+00 + CVs 20 + -2.9104436104222536e-01 1.2850069048129242e-01 1.2227096430030560e-01 + -5.7783210247304351e-01 2.6284213831787057e-01 2.4821128911546925e-01 + -8.7237600050030395e-01 4.0498648972207918e-01 3.5787762465122974e-01 + -1.1785818044432930e+00 5.5235067826153761e-01 4.4605956713403921e-01 + -1.4940723579935753e+00 6.9928844522475897e-01 5.1734435787434063e-01 + -1.8170410407119622e+00 8.4122284597795005e-01 5.7601617068362621e-01 + -2.1487842295928203e+00 9.7335519335713039e-01 6.2534449628358191e-01 + -2.4949489809765484e+00 1.0860914655535838e+00 6.6776376179532648e-01 + -2.8630091260723760e+00 1.1644356676929117e+00 7.0728213095777881e-01 + -3.2553047649831801e+00 1.1890284561079860e+00 7.5282007672040496e-01 + -3.6601697673131555e+00 1.1388687835885045e+00 8.1604386683086139e-01 + -4.0521968231357874e+00 1.0034265553242234e+00 9.0425656421017164e-01 + -4.4081907468886676e+00 7.8979312487224496e-01 1.0185897881490900e+00 + -4.7158093085383666e+00 5.1158039181554704e-01 1.1586204503958433e+00 + -4.9665386741832585e+00 1.8098771309226125e-01 1.3213737033360018e+00 + -5.1532531773673176e+00 -1.9132576424984959e-01 1.4950068164597465e+00 + -5.2752277138626313e+00 -5.9437291620628185e-01 1.6620755087431140e+00 + -5.3445015472959900e+00 -1.0094817752702783e+00 1.8168199330736745e+00 + -5.4350261227190133e+00 -1.3698478161214362e+00 1.9756713498746938e+00 + id 12719 + loc 3.6298555135726929e-01 7.1644717454910278e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7477206522974458e-01:2.9551076564388878e-01:6.8902593274407153e-01:3.8528761840671732e-01:1.0909342441465795e+00:4.1153744454699415e-01:1.9947921643293063e+00:4.4104767987046944e-01:2.5477302555674091e+00:4.7476731750909229e-01:2.9925823125361202e+00:4.0170461797489948e-01:3.3496850085127150e+00:4.1841130120404496e-01:3.9941224406389075e+00 + CVs 20 + 1.9488853165623618e-01 2.9225059334334935e-01 -1.0315440247893104e-02 + 3.8925195669770596e-01 5.5108335102335693e-01 -7.4483527905147034e-02 + 5.9174832979009218e-01 7.8579960012851946e-01 -1.7150106832798068e-01 + 8.0247816959920681e-01 9.8380976525663399e-01 -2.9270188841070099e-01 + 1.0134842929360968e+00 1.1225916102772417e+00 -4.3667999133071245e-01 + 1.2098204726691335e+00 1.1856445126397399e+00 -5.9539670963997460e-01 + 1.3749910300656705e+00 1.1716438271548304e+00 -7.5513224635079179e-01 + 1.4991846682948406e+00 1.0954803437422505e+00 -9.0205302932609344e-01 + 1.5793707081417365e+00 9.7781550676537232e-01 -1.0243599826206986e+00 + 1.6186764332066803e+00 8.3988885290525328e-01 -1.1105259760995150e+00 + 1.6260877599204895e+00 7.0388139946455563e-01 -1.1514134484789842e+00 + 1.6169304576385117e+00 5.8992118091083734e-01 -1.1527023501726092e+00 + 1.6058536582212273e+00 4.9455036295617022e-01 -1.1541228129799057e+00 + 1.5887188113247031e+00 3.7156713393121299e-01 -1.2136655042637059e+00 + 1.5483454499089868e+00 1.6003471461798902e-01 -1.3800826510579025e+00 + 1.4809414904374576e+00 -1.4848483241938193e-01 -1.7203135282598767e+00 + 1.4288260718835373e+00 -3.9466764195644410e-01 -2.3036748126629689e+00 + 1.4897929365557494e+00 -3.0414685169667588e-01 -3.0002742347451834e+00 + 1.4991990537305386e+00 -2.1960641276277637e-01 -3.0993454633931226e+00 + id 12720 + loc 3.2992476224899292e-01 1.3042467832565308e-01 411 + blend 0.0000000000000000e+00 + interp 4.3910632560275259e-01:3.5110626372578968e-01:4.9048189297591804e-01:3.0803815606569440e-01:1.2375698058057287e+00:4.3910193453949659e-01:1.9769883874334848e+00:3.7353031531733333e-01:2.3587270689128714e+00:2.8195707788463736e-01:3.0008836132286207e+00:3.3672280627267848e-01:3.9276911710111757e+00 + CVs 20 + -1.2960277840402701e-01 1.9699284576525322e-01 -4.7050767496685864e-01 + -2.8745883391380506e-01 3.2239224757962603e-01 -8.0699149511994328e-01 + -4.4988356824119291e-01 4.1383260700680957e-01 -1.1306987001239139e+00 + -5.9027114920746560e-01 4.9107383685700889e-01 -1.4877430185966363e+00 + -7.0133727762863729e-01 5.5003738842862193e-01 -1.8735648262738862e+00 + -7.7949560860198241e-01 5.8842986293479194e-01 -2.2813624238404291e+00 + -8.2590217175979963e-01 6.0859812759404552e-01 -2.7048163363579723e+00 + -8.4238877378627930e-01 6.1339676797528331e-01 -3.1375248103478848e+00 + -8.2031712773585830e-01 6.0049248550919287e-01 -3.5737306532634974e+00 + -7.5134821407150809e-01 5.6322959172813980e-01 -4.0057699139963088e+00 + -6.3737713462188061e-01 4.9101177269058272e-01 -4.4246887583374432e+00 + -4.9005236819681208e-01 3.6995984087678591e-01 -4.8242762210601606e+00 + -3.2119150549702946e-01 1.8763644133653612e-01 -5.2007262072796596e+00 + -1.3784733333536137e-01 -5.8063561918884510e-02 -5.5519998430972013e+00 + 5.2414693292924086e-02 -3.5839924775796606e-01 -5.8787949145169538e+00 + 2.3777820039847208e-01 -7.0005428434300665e-01 -6.1819164614176003e+00 + 4.0964104423625664e-01 -1.0690497180605574e+00 -6.4583343161820075e+00 + 5.7111121588009539e-01 -1.4557267382832451e+00 -6.7020158648693755e+00 + 7.1793715289016280e-01 -1.8218869657119470e+00 -6.8633806281530667e+00 + id 12721 + loc 1.1817388236522675e-01 9.7426509857177734e-01 372 + blend 0.0000000000000000e+00 + interp 5.2036467840741207e-01:5.2035947476062805e-01:5.9002319797948921e-01:2.4707921503533720e-01:1.2703644645973406e+00:2.0514330028378211e-01:2.1485611290228315e+00:4.1668244423884787e-01:2.8754342817182312e+00:4.8810802259418468e-01:3.1393232118694079e+00:3.2538334586729889e-01:3.9390763780839064e+00 + CVs 20 + -4.5888848583948411e-01 6.7823194298989475e-01 -4.0122596433004060e-02 + -8.3542285153275064e-01 1.3786706963622546e+00 -1.3710828373946338e-01 + -1.1375019120269023e+00 2.0886409636721663e+00 -3.3974655209778848e-01 + -1.5911524573534734e+00 2.7268944724900894e+00 -5.2468728832815559e-01 + -1.5808614006463380e+00 3.3911320658072284e+00 -8.2122484864037315e-01 + -1.1344331812429309e+00 3.8438023870019453e+00 -1.2253873411117302e+00 + -4.7646119341413162e-01 3.9076029180590806e+00 -1.5794907799426070e+00 + 2.2678103932369131e-01 3.6008004922983039e+00 -1.7849826241746547e+00 + 8.4861876142856407e-01 3.0383723592000429e+00 -1.8261128299760996e+00 + 1.3339568562267687e+00 2.3629541698492735e+00 -1.7402869988775425e+00 + 1.6957936222368504e+00 1.6965171416299003e+00 -1.5947273849304289e+00 + 2.0105740943195989e+00 1.0665597837914875e+00 -1.4401940632723251e+00 + 2.3615657843193998e+00 4.1140718075984883e-01 -1.2593465003061417e+00 + 2.8121167657885398e+00 -2.8873046000190761e-01 -1.0107274030420497e+00 + 3.4781303839048396e+00 -9.3515691009245772e-01 -7.4620329380564776e-01 + 4.3940740657580157e+00 -1.2154504685669951e+00 -7.7156727531462965e-01 + 5.1695090128856016e+00 -1.0212089091341556e+00 -1.3312294564492428e+00 + 5.4134065151300090e+00 -5.9517447934379275e-01 -2.2934205132024186e+00 + 5.5630811164927936e+00 -1.0319160518270021e-01 -3.3749594180357767e+00 + id 12722 + loc 1.4966072142124176e-01 1.6266095638275146e-01 377 + blend 0.0000000000000000e+00 + interp 1.1041043410515599e+00:4.4158350087986803e-01:1.3305247720871305e+00:3.2699618283379639e-01:1.5083582246398610e+00:3.7303429552804857e-01:2.1804147229149962e+00:2.3496305487449234e-01:2.7578301082397814e+00:4.0535631658810928e-01:3.0045944806673686e+00:6.3908271926628846e-01:3.3388190606564008e+00:1.1040943410515598e+00:3.9008886849308508e+00 + CVs 20 + -5.1205851413795878e-01 6.0911499179160800e-01 8.7928314621245607e-01 + -7.9381785414186923e-01 1.0040606691973377e+00 1.6086434113574710e+00 + -9.4650414876299171e-01 1.2578995341823767e+00 2.3406580000397277e+00 + -1.0508573523610669e+00 1.4281586332907672e+00 3.1229629454916759e+00 + -1.1657317148023849e+00 1.5349856772894666e+00 3.9515901311641470e+00 + -1.3465908016205219e+00 1.5610541764377179e+00 4.8303119349711867e+00 + -1.6385675286712371e+00 1.4549156589151719e+00 5.7360236084985647e+00 + -2.0625092848581490e+00 1.1612330305550971e+00 6.6012753098024053e+00 + -2.5814893283941753e+00 6.3924165525796339e-01 7.3370922614698024e+00 + -3.1032123879124991e+00 -1.1271688804057156e-01 7.8662793906878878e+00 + -3.5066949916492192e+00 -1.0452020071207477e+00 8.1454398773101264e+00 + -3.6826139928511066e+00 -2.0555264857447644e+00 8.1702472079274209e+00 + -3.5965656047999293e+00 -2.9997219228524514e+00 7.9918732026187786e+00 + -3.3412556641826958e+00 -3.7836848036771205e+00 7.7364580574382060e+00 + -3.0570994968221843e+00 -4.4446840892363291e+00 7.5369824772542309e+00 + -2.8033959537548894e+00 -5.0454233800223447e+00 7.4637061270707008e+00 + -2.5641248594091750e+00 -5.5730551027058688e+00 7.5226378917383947e+00 + -2.3314472759892078e+00 -5.9895596264879813e+00 7.6464688578853366e+00 + -2.1697199343234006e+00 -6.3391341768147171e+00 7.7097166383183691e+00 + id 12723 + loc 4.6384745836257935e-01 9.9845844507217407e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6600280751327213e-01:3.6599914748519702e-01:7.3189723118157046e-01:2.1756754648126617e-01:1.0548546726398365e+00:2.8566337585883994e-01:1.9991022302553914e+00:1.4901853495160350e-01:2.9529565981314829e+00:2.5236626793194522e-01:3.8085255270468017e+00 + CVs 20 + 3.2057138351511894e-01 2.6271634506124203e-01 -1.2363380508574086e-01 + 6.2404906034533647e-01 5.2250509780435539e-01 -2.4310678781478673e-01 + 9.1311597389658417e-01 7.6400278145367684e-01 -3.6911860700879356e-01 + 1.1876870598832630e+00 9.7447076430177415e-01 -5.0714230596363541e-01 + 1.4435633730323743e+00 1.1437795101718402e+00 -6.5825165345849279e-01 + 1.6750154817315310e+00 1.2671378220279941e+00 -8.2006265040827819e-01 + 1.8795804791031927e+00 1.3469565946246906e+00 -9.8698147981763429e-01 + 2.0609964336200823e+00 1.3910995277557021e+00 -1.1534387584722983e+00 + 2.2259423669216236e+00 1.4080840442155695e+00 -1.3160439255489622e+00 + 2.3803598709675975e+00 1.4045406150244579e+00 -1.4739991623860833e+00 + 2.5277297488528236e+00 1.3859445905607066e+00 -1.6260477775828739e+00 + 2.6722289661975904e+00 1.3593789801301792e+00 -1.7690781431576892e+00 + 2.8237860433636572e+00 1.3291130897811159e+00 -1.9034451774391421e+00 + 3.0011263507364467e+00 1.2780615257260188e+00 -2.0353374231836407e+00 + 3.2241851564760324e+00 1.1622592150975479e+00 -2.1732237012642779e+00 + 3.4803856417744514e+00 9.3910750197246307e-01 -2.3363592953472536e+00 + 3.7164990148562524e+00 5.9500972474825586e-01 -2.5562062433432540e+00 + 3.8464570940491840e+00 1.7919541911820180e-01 -2.8376281265848151e+00 + 3.7293650280632074e+00 6.0122583146442587e-02 -2.9012048407196476e+00 + id 12724 + loc 8.9548403024673462e-01 7.1818053722381592e-02 413 + blend 0.0000000000000000e+00 + interp 4.1733081771072850e-01:3.6994574228948757e-01:2.4308828327602217e-01:2.9931850042571934e-01:9.9634135841755056e-01:2.1625850909131891e-01:2.0136622347758655e+00:3.1081186086166945e-01:3.3621640102355141e+00:4.1732664440255141e-01:3.9622831865714669e+00 + CVs 20 + -1.0055327996398185e+00 2.0849673664341223e-01 2.3190231017371132e-01 + -1.6704709501578685e+00 2.5809598795248684e-01 3.8682753567658462e-01 + -2.2578087118144317e+00 2.4031596469271091e-01 5.0009649191651184e-01 + -2.8693829587440098e+00 1.9317476738416184e-01 5.8064785845450828e-01 + -3.4904280139255430e+00 9.6552261971005415e-02 6.2996912177955822e-01 + -4.1040181159556024e+00 -6.4702380118142111e-02 6.5686660362021065e-01 + -4.6908034384809731e+00 -2.9721047447882498e-01 6.7422451863564348e-01 + -5.2286942937966980e+00 -5.9883055023592935e-01 6.9001775962543677e-01 + -5.6976564193498076e+00 -9.5896721517980688e-01 7.0063087747791553e-01 + -6.0836127176033363e+00 -1.3589908133149935e+00 6.9941393476872071e-01 + -6.3818521081279345e+00 -1.7761879827865417e+00 6.8665768994881027e-01 + -6.6042880760493565e+00 -2.1936260834237640e+00 6.6420424216749141e-01 + -6.7751314012330717e+00 -2.6056790015169735e+00 6.2986765831284419e-01 + -6.9164272441026888e+00 -3.0132818315858736e+00 5.8008975889173264e-01 + -7.0380196269674897e+00 -3.4183928246722504e+00 5.1513588948642730e-01 + -7.1344263593934851e+00 -3.8175482832714716e+00 4.3672730911802138e-01 + -7.1920959434860361e+00 -4.2039315817565903e+00 3.4411099263807776e-01 + -7.2107573430328822e+00 -4.5856731148260401e+00 2.4273753381394442e-01 + -7.2212238589660069e+00 -5.0719523339010060e+00 1.4970807265378511e-01 + id 12725 + loc 8.9383697509765625e-01 2.7262854576110840e-01 1080 + blend 0.0000000000000000e+00 + interp 3.8363396905853642e-01:3.0819546606450277e-01:3.2265820949245549e-01:3.7099549639309864e-01:9.9275760610532304e-01:3.3673637490570413e-01:1.8008983082017611e+00:3.8363013271884583e-01:2.1950053543500481e+00:3.2634517160399917e-01:2.9504296694015868e+00:3.5153214269291777e-01:3.8857103362503818e+00 + CVs 20 + -1.4112907378519485e-01 3.3856595992442740e-01 -2.3222528245535443e-01 + -2.6637443246461312e-01 6.1233744507844834e-01 -3.4985235707720896e-01 + -3.9459797444212535e-01 8.8143126086819934e-01 -4.3752574763681806e-01 + -5.3012375242581733e-01 1.1611299622737603e+00 -5.2940603719915547e-01 + -6.7583110856751372e-01 1.4429315836741168e+00 -6.1680170385439936e-01 + -8.3396703243550485e-01 1.7143764974165761e+00 -6.8783569911371922e-01 + -1.0065815447903543e+00 1.9605171392293599e+00 -7.2764551274187750e-01 + -1.1955278453178066e+00 2.1676668481712453e+00 -7.2412354980008931e-01 + -1.4002899878876403e+00 2.3245238972278388e+00 -6.7100635480075965e-01 + -1.6171180891724999e+00 2.4226787097882365e+00 -5.6701774848567987e-01 + -1.8399493119615122e+00 2.4577788969164254e+00 -4.1516685608237891e-01 + -2.0619732642247954e+00 2.4293494989499718e+00 -2.2181904112792039e-01 + -2.2776774861517168e+00 2.3386153763771942e+00 4.8405398392938892e-03 + -2.4845188283313275e+00 2.1853406421674038e+00 2.5502961282133141e-01 + -2.6864814451303034e+00 1.9594083761620251e+00 5.1605598796440377e-01 + -2.8956076752126005e+00 1.6204535103129003e+00 7.5960011735669941e-01 + -3.1096833280056297e+00 1.1163007189468388e+00 8.9577994120858673e-01 + -3.2758229590366335e+00 5.4957656249293085e-01 8.2954712581238299e-01 + -3.3792131309261078e+00 2.2338023653661154e-01 7.8896388314814481e-01 + id 12726 + loc 3.1991246342658997e-01 6.7784732580184937e-01 411 + blend 0.0000000000000000e+00 + interp 4.4597827743352431e-01:3.2293365069715302e-01:2.4372209517499988e-01:4.4597381765075000e-01:9.6024702039233667e-01:3.2460029410380442e-01:1.8988535257825945e+00:2.4762848921249506e-01:2.6198686457374318e+00:3.4932215653516607e-01:3.0863525945803385e+00:4.3063931587100512e-01:3.8200032481726955e+00 + CVs 20 + 8.1499017660219220e-01 1.9145373892141393e-01 -5.1536016452979352e-02 + 1.3875001331580632e+00 2.7159203593731263e-01 -1.2856529340176595e-01 + 1.9167473501141097e+00 3.0455396229031562e-01 -2.1537527496616665e-01 + 2.4959196374359904e+00 3.1466465654379255e-01 -3.0508932038596792e-01 + 3.1207071613435020e+00 2.8885069554446119e-01 -3.9202983527516055e-01 + 3.7733591560735880e+00 2.1575370080962319e-01 -4.7185719133726500e-01 + 4.4269230747045611e+00 8.7540694613415626e-02 -5.4250308419256932e-01 + 5.0501070653441369e+00 -1.0120899386110183e-01 -6.0241894540429031e-01 + 5.6078739570663174e+00 -3.4968167179411647e-01 -6.5307209350853923e-01 + 6.0652583287348776e+00 -6.4401559382086648e-01 -7.0061098791564169e-01 + 6.4027789112641971e+00 -9.5834281168145230e-01 -7.4864891994617599e-01 + 6.6304088601838904e+00 -1.2679854389651510e+00 -7.9205954888505725e-01 + 6.7742817252442951e+00 -1.5590676748322556e+00 -8.2252539350228537e-01 + 6.8559850587396598e+00 -1.8229342444211667e+00 -8.3474913576273024e-01 + 6.8918531677501917e+00 -2.0551642643445120e+00 -8.2735463079457083e-01 + 6.8964833742350953e+00 -2.2602922078115673e+00 -8.0424987159994321e-01 + 6.8801268498722603e+00 -2.4469153445490095e+00 -7.7269489145030412e-01 + 6.8416441328973683e+00 -2.6191281993581068e+00 -7.3263762049999570e-01 + 6.7043736492037809e+00 -2.8904606265484576e+00 -6.9896825854027533e-01 + id 12727 + loc 5.3568887710571289e-01 5.7269185781478882e-02 403 + blend 0.0000000000000000e+00 + interp 5.2503450132811502e-01:4.5156210618839265e-01:9.6608440937781870e-02:3.0705393954759674e-01:1.0000003595896572e+00:2.6788667897170154e-01:1.8838165075641902e+00:3.0778618782520656e-01:2.7691693307643934e+00:4.0482101090278777e-01:3.2771898595736952e+00:5.2502925098310171e-01:3.8840728358774923e+00 + CVs 20 + -5.6085201992984918e-02 2.6898016543602710e-01 2.3479102821351283e-01 + -9.3147341186556848e-02 5.3270672414244624e-01 4.8542047997375537e-01 + -1.2760055699915265e-01 7.9912887805601363e-01 7.5039046597546255e-01 + -1.6660570308835554e-01 1.0590726493870224e+00 1.0310173338025483e+00 + -2.0582561533289340e-01 1.3010769637167969e+00 1.3371491156365183e+00 + -2.2437236724741261e-01 1.5240430964552889e+00 1.6765043810056774e+00 + -1.8539996060237007e-01 1.7262432549623272e+00 2.0369464558961949e+00 + -6.0640410065112005e-02 1.8956684229797096e+00 2.3881067508401754e+00 + 1.5447339973642260e-01 2.0164779438531548e+00 2.6969406942894598e+00 + 4.4539159908449932e-01 2.0825828123025047e+00 2.9407224323211936e+00 + 7.8892998652959634e-01 2.0985723578626581e+00 3.1128176192978403e+00 + 1.1659055320824425e+00 2.0693232646402002e+00 3.2256385270852248e+00 + 1.5668528507987030e+00 1.9932340361497958e+00 3.3014712241545872e+00 + 1.9772904623697487e+00 1.8709224658234682e+00 3.3509405958732374e+00 + 2.3818176163715048e+00 1.7098443629161193e+00 3.3799987280730210e+00 + 2.7947269976080178e+00 1.4985890265878088e+00 3.4232603043396126e+00 + 3.2330996979664195e+00 1.2215644504374008e+00 3.5476679919688707e+00 + 3.6401425631846434e+00 9.2829752859262227e-01 3.7868743804922902e+00 + 3.8866970196903812e+00 7.1421783621732837e-01 4.0143492091506197e+00 + id 12728 + loc 3.1218129396438599e-01 2.5862112641334534e-01 1084 + blend 0.0000000000000000e+00 + interp 4.2552278873902477e-01:4.2551853351113739e-01:5.2708862971032222e-01:2.4062584706939197e-01:1.1076641356816272e+00:2.7082907443477161e-01:2.0354809283661339e+00:3.4045872801576571e-01:2.8205774937356733e+00:2.5151442249345740e-01:3.9121075003161367e+00 + CVs 20 + 3.1050184380347701e-01 3.1015601123969849e-01 1.7453132356489676e-01 + 5.5774741076246337e-01 5.5014863428645355e-01 3.3110560646093917e-01 + 8.0154180675212716e-01 7.5488961199882976e-01 4.5913950240476431e-01 + 1.0638284415917481e+00 9.4357147132195762e-01 5.6130009189681052e-01 + 1.3217701240907083e+00 1.1207005240294996e+00 6.5608671671207985e-01 + 1.5572694187198641e+00 1.2967760727499771e+00 7.6648036282927956e-01 + 1.7621916494135523e+00 1.4962685201196801e+00 9.3431387219193041e-01 + 1.8594074920353125e+00 1.7219781918457719e+00 1.2355556771353124e+00 + 1.7227701293094309e+00 1.8696145511453692e+00 1.6023213831480811e+00 + 1.4178797767551075e+00 1.8880604919579804e+00 1.8648643454383860e+00 + 1.0487152256430341e+00 1.8217256433971372e+00 1.9907310200587844e+00 + 6.4901516946650406e-01 1.7024159568185646e+00 2.0023847339684009e+00 + 2.5758703306071307e-01 1.5382591768855605e+00 1.9099778567143249e+00 + -1.9346015880349010e-02 1.3440690006226352e+00 1.7477878360469716e+00 + -9.3282272948426836e-02 1.1444271044038135e+00 1.5843605129552423e+00 + 2.3284296608292898e-02 9.0580516682430368e-01 1.4341200157645777e+00 + 2.5100435123411452e-01 4.8556626549173576e-01 1.2325250968582520e+00 + 3.0334387420692766e-01 -2.6646486474413078e-01 7.9026290476424876e-01 + 1.3840382170918505e-01 -3.5149404428456810e-01 7.1701117501464351e-01 + id 12729 + loc 2.7175638079643250e-01 7.5677603483200073e-01 393 + blend 0.0000000000000000e+00 + interp 3.9433890991273512e-01:3.1416523283068215e-01:7.7143623648736526e-01:3.1187302549880197e-01:1.1213907954873192e+00:3.9433496652363603e-01:1.9079684117357627e+00:3.7060422093569606e-01:2.2395382493434304e+00:2.8730630402550011e-01:3.0158788638490166e+00:3.4056045060527873e-01:3.8963839838592125e+00 + CVs 20 + -3.0245779776418280e-01 3.9632454993435096e-01 -2.5069141676692730e-01 + -5.9468974021562626e-01 8.0092805552737234e-01 -5.2138342492177880e-01 + -8.8024382020505032e-01 1.2192954153650817e+00 -8.1334683089891424e-01 + -1.1874957849917607e+00 1.6382843862360563e+00 -1.1169349063818004e+00 + -1.5474205042516953e+00 2.0323954553800014e+00 -1.4128466888880895e+00 + -1.9732006380066209e+00 2.3701328915916138e+00 -1.6787551140426642e+00 + -2.4534381333033233e+00 2.6116419469394101e+00 -1.8985150128046062e+00 + -2.9484707368733751e+00 2.7219589095650676e+00 -2.0696828991145164e+00 + -3.4055676956158756e+00 2.7115828814668519e+00 -2.2064501922842639e+00 + -3.8045913385642995e+00 2.6323801990600488e+00 -2.3297490899454054e+00 + -4.1638387188504691e+00 2.5165094548168350e+00 -2.4458246294697394e+00 + -4.5019698695497246e+00 2.3644536191704200e+00 -2.5466072700894413e+00 + -4.8196866008838439e+00 2.1771034354734269e+00 -2.6309247700087517e+00 + -5.1221752001333751e+00 1.9600706639359036e+00 -2.7167580869758408e+00 + -5.4339441140305649e+00 1.7023174297741115e+00 -2.8208108184024905e+00 + -5.7877496470081802e+00 1.3886838488037196e+00 -2.9221489730312644e+00 + -6.1987745964813286e+00 1.0428520632622622e+00 -2.9585018750490972e+00 + -6.6566110406050374e+00 6.9589478222533518e-01 -2.9178550407659261e+00 + -7.1616178499106722e+00 3.0536451680109122e-01 -2.9073459557740882e+00 + id 12730 + loc 5.3098285198211670e-01 4.8741647601127625e-01 372 + blend 0.0000000000000000e+00 + interp 3.2311601709917354e-01:3.0438599551660522e-01:1.9738130686377087e-02:2.6384907379073397e-01:1.0621004500491171e+00:2.6986963591120150e-01:2.2301522488109438e+00:3.2311278593900256e-01:3.2171713335977250e+00 + CVs 20 + 3.5180520927790870e-01 5.3134199831583828e-01 2.4151387218052822e-01 + 7.0355687744521100e-01 1.0036203201618594e+00 4.5870313460247064e-01 + 1.0797793439079753e+00 1.3973894600500949e+00 6.5179168176719160e-01 + 1.4444171577262608e+00 1.7005496863503180e+00 8.1390427454286129e-01 + 1.7381320132002889e+00 1.9738754144089945e+00 1.0003109957212293e+00 + 1.8349557890774548e+00 2.2627275509097338e+00 1.3249296825060537e+00 + 1.6253544958507584e+00 2.4675422928713155e+00 1.7759748749146307e+00 + 1.1195277270820045e+00 2.4877509479501461e+00 2.2584042937655173e+00 + 3.8909275060523352e-01 2.2834148497636750e+00 2.6915420447379006e+00 + -4.8024259879846742e-01 1.8227578919319591e+00 3.0132591002375682e+00 + -1.3908253917883389e+00 1.1176348963021063e+00 3.1696269928570135e+00 + -2.2908458829047573e+00 3.2973711094651048e-01 3.1403481952898087e+00 + -3.1836697334130770e+00 -2.2034726963488382e-01 3.0232382023210964e+00 + -3.9298166059204753e+00 -1.8345581486309248e-01 3.0987867952560486e+00 + -4.1551890542887620e+00 3.7269364853667808e-01 3.4628490180171556e+00 + -4.0017057157012665e+00 9.1970296652449068e-01 3.7811622599754053e+00 + -3.8100365943912999e+00 1.3261399928154971e+00 3.8828591600890481e+00 + -3.8740080362895930e+00 1.6740950456865937e+00 3.7845602491993304e+00 + -4.4406017665756430e+00 2.1770465972577417e+00 3.6614576296802190e+00 + id 12731 + loc 1.0087412595748901e-01 8.9806580543518066e-01 1068 + blend 0.0000000000000000e+00 + interp 6.8952298700542147e-01:3.7163143000237897e-01:8.0766134584267291e-02:3.8045724283875948e-01:9.0225959447757176e-01:4.9907736813313169e-01:1.3017718286291431e+00:6.8951609177555140e-01:1.9930575944990641e+00:6.3826625268995285e-01:2.2130222165266686e+00:4.1249639107337310e-01:2.9991104101763284e+00:3.6847057002570655e-01:3.6590561829114305e+00 + CVs 20 + 4.6772572968748448e-02 3.2370957303525955e-01 -1.9488429547234615e-01 + 1.1703064121108654e-01 6.5904530526084193e-01 -3.8969563452898626e-01 + 1.9870026033414179e-01 1.0061232269870157e+00 -5.7188648764558991e-01 + 2.8758327724950594e-01 1.3664803171858046e+00 -7.4310289311198374e-01 + 3.8379259007465710e-01 1.7407345118217519e+00 -9.1736673894632714e-01 + 4.8444624193707686e-01 2.1293058213714557e+00 -1.1142141233303857e+00 + 5.8344904256019603e-01 2.5314153036013440e+00 -1.3588556717854727e+00 + 6.7271279783898408e-01 2.9340890168815674e+00 -1.6816149698406924e+00 + 7.4779474317992367e-01 3.2965375088498003e+00 -2.1009161645334427e+00 + 8.2249835435856655e-01 3.5787656813570550e+00 -2.5983796619922335e+00 + 9.3466792399819254e-01 3.7868898588438977e+00 -3.1472928038502226e+00 + 1.1257969143864017e+00 3.9287369705497408e+00 -3.7524130315480084e+00 + 1.4138504716833280e+00 3.9630953008783973e+00 -4.4159946407890791e+00 + 1.7905417694536649e+00 3.8460383340132029e+00 -5.0886879863749295e+00 + 2.2395784916735035e+00 3.5844637563782182e+00 -5.7169843245822749e+00 + 2.7056234086401885e+00 3.1977392543546372e+00 -6.3267652229563458e+00 + 3.0635546794517312e+00 2.7171160826226175e+00 -6.9967598402573881e+00 + 3.2509461889968767e+00 2.2422626837850963e+00 -7.7215323040702959e+00 + 3.4697191235940741e+00 1.8575838848079864e+00 -8.3686818563646685e+00 + id 12732 + loc 9.2027163505554199e-01 7.7492512762546539e-02 1081 + blend 0.0000000000000000e+00 + interp 4.4186342441849835e-01:4.0987482974976663e-01:4.6488725692282573e-01:4.4185900578425419e-01:9.8727493205505412e-01:2.9451334931888418e-01:1.2319368872257637e+00:4.1638094875871928e-01:1.9013449980075823e+00:4.2611622659593085e-01:2.9505536342855891e+00:3.9089222010911867e-01:3.1535744682613247e+00:3.4374514924807181e-01:3.9437844361685190e+00 + CVs 20 + 1.1198215055421987e-01 4.9740412399897649e-01 -3.6244408994321892e-01 + 1.4844443887816383e-01 8.5876543823871720e-01 -5.4811119698461996e-01 + 1.6279275552496814e-01 1.1659000902774774e+00 -6.6286343432893402e-01 + 1.8091666246498339e-01 1.4454643387074912e+00 -7.5247317025733906e-01 + 2.0205617910127127e-01 1.6891995817172534e+00 -8.2082171296784201e-01 + 2.2498212909086979e-01 1.8800252423845158e+00 -8.7993994995072633e-01 + 2.4551182170846531e-01 2.0025015853983077e+00 -9.5697153295222015e-01 + 2.5255094256599575e-01 2.0749770618825849e+00 -1.1052514337688844e+00 + 2.3440789359861286e-01 2.1981029569818729e+00 -1.3492909808039504e+00 + 2.0871245115588066e-01 2.4328643750700207e+00 -1.5427181738310809e+00 + 2.0633719527804040e-01 2.6492557479433185e+00 -1.5831495475707422e+00 + 2.3560047218806246e-01 2.7666989099732140e+00 -1.5271289860052675e+00 + 2.9784430513828630e-01 2.7853169566523563e+00 -1.4295338193093925e+00 + 3.9408526073131711e-01 2.7232599310831085e+00 -1.3164149055679171e+00 + 5.1695985580848258e-01 2.6181486598737265e+00 -1.1957013824616687e+00 + 6.4836236621008803e-01 2.5488086694701106e+00 -1.0543737471640502e+00 + 7.8066941177458360e-01 2.5496702128545792e+00 -8.6788456601012032e-01 + 9.3218751966482016e-01 2.4705512593657106e+00 -7.4601852163207982e-01 + 1.1017650555469936e+00 2.1195297163327718e+00 -1.0174366410645126e+00 + id 12733 + loc 8.1744241714477539e-01 4.6529918909072876e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0700097727633999e-01:3.7577734488267150e-01:3.5751947082133584e-02:3.5573420667093975e-01:9.1608147594272404e-01:2.6722712105032614e-01:1.5697643040949671e+00:4.0699690726656723e-01:2.0480336856222299e+00:2.9310780441184275e-01:2.6498453340139827e+00:3.6230290963635930e-01:3.0267762433330758e+00:3.2075283003695704e-01:3.6972522449967773e+00 + CVs 20 + -1.3335979591092856e-01 2.3894014270495922e-01 2.4471051962980461e-01 + -2.8902382657312531e-01 4.5625258967232513e-01 4.5698284750766871e-01 + -4.7571759071116615e-01 6.4748963597944376e-01 6.4404715460936290e-01 + -6.9873320131124994e-01 8.0772244667490389e-01 8.0366638141155300e-01 + -9.6791519251882541e-01 9.4107983625124314e-01 9.3301499316523029e-01 + -1.2875723145858635e+00 1.0810389659699771e+00 1.0430341293435483e+00 + -1.6255688214360411e+00 1.2903153147039514e+00 1.1565019945423005e+00 + -1.9173457690803017e+00 1.5997776414648599e+00 1.2941112137770372e+00 + -2.1186815077789305e+00 1.9829592339564990e+00 1.4766460730477227e+00 + -2.2067572709526915e+00 2.3822245930637118e+00 1.7431214673987045e+00 + -2.1660117895315412e+00 2.6858946895812048e+00 2.1269648698025776e+00 + -2.0362032099802718e+00 2.7833463947190777e+00 2.5778164888622315e+00 + -1.8914130179704030e+00 2.6759874626878490e+00 3.0104700375786768e+00 + -1.7918125384065144e+00 2.4311481023169268e+00 3.3697103516787603e+00 + -1.7643737397251065e+00 2.1163498593548700e+00 3.6432193037464646e+00 + -1.8130388056581728e+00 1.7560518575577420e+00 3.8264021704058520e+00 + -1.9445335053114547e+00 1.3698661819922475e+00 3.8838251084800848e+00 + -2.1324202492872941e+00 1.0074808717512376e+00 3.8149645073374581e+00 + -2.2664371871324493e+00 6.3908456316553586e-01 3.7704039727195919e+00 + id 12734 + loc 1.8888688087463379e-01 6.6468685865402222e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7339099763069165e-01:2.7856763013889196e-01:4.7166177390297603e-03:3.8852722599113476e-01:6.0358666496570079e-01:3.2412965819063366e-01:1.1728231767247521e+00:4.7338626372071535e-01:1.9220378109075069e+00:3.9048096734063548e-01:2.4573732478244570e+00:3.8537558709084985e-01:2.9997329645519093e+00:4.2265577957414535e-01:3.4425390761615153e+00 + CVs 20 + 1.9022880640177112e-01 3.4722708573514194e-01 4.7846198577240401e-02 + 3.7897364553975543e-01 6.4261128340938078e-01 1.2688629406836738e-02 + 5.7295965834006146e-01 9.1583215221277214e-01 -5.9145302783081832e-02 + 7.7041564222310310e-01 1.1549139101578221e+00 -1.5613405929424162e-01 + 9.6323074712736956e-01 1.3313351105897784e+00 -2.8024738078305561e-01 + 1.1338309810902096e+00 1.4170380041918909e+00 -4.2414824398625944e-01 + 1.2581976087505464e+00 1.4008398430467484e+00 -5.6530736864818409e-01 + 1.3215623861639996e+00 1.3052257705095693e+00 -6.7294067856453488e-01 + 1.3327166296223993e+00 1.1745798260031159e+00 -7.2794403770748917e-01 + 1.3168043656695101e+00 1.0468270326003546e+00 -7.3017565337483570e-01 + 1.2973722448663563e+00 9.4434481377927415e-01 -6.8965288551728066e-01 + 1.2931805514781936e+00 8.7180218070286697e-01 -6.3628387485499394e-01 + 1.3070812934331713e+00 7.9531449941911547e-01 -6.1839369405061473e-01 + 1.3207954660690211e+00 6.4984885539210013e-01 -6.6723714825270553e-01 + 1.3131645506180225e+00 3.6472742949339559e-01 -8.1281971432760947e-01 + 1.2738428909272228e+00 -6.4548281079185421e-02 -1.1672895073229945e+00 + 1.2557157296996486e+00 -3.7760030069208861e-01 -1.8712980105475556e+00 + 1.4230344831348722e+00 -1.3910847590250852e-01 -2.7654689174817064e+00 + 1.4653416406716329e+00 -1.0728283937037242e-01 -2.8044841621097301e+00 + id 12735 + loc 2.1533527970314026e-01 6.6948676109313965e-01 406 + blend 0.0000000000000000e+00 + interp 3.9589033428476395e-01:3.9588637538142113e-01:5.4846729842948805e-01:3.1115830173874370e-01:1.0732853694180642e+00:3.5224064606192812e-01:1.9992438042878915e+00:3.2465468640116496e-01:2.8532119656749595e+00:3.0812854504036313e-01:3.7475382590750783e+00 + CVs 20 + 1.8488918188101072e-01 2.5511978486700909e-01 -1.7956208283091105e-01 + 2.1732387654639052e-01 4.3447837226792019e-01 -3.3230443861546322e-01 + 2.0510205030455625e-01 5.7015564039983357e-01 -4.6335030512975961e-01 + 1.8219151288840169e-01 7.0121449669230462e-01 -5.8520040476669832e-01 + 1.4840333435153463e-01 8.2690318605914914e-01 -6.9417603213958801e-01 + 1.0516918857525320e-01 9.4479838204111299e-01 -7.8741468041926443e-01 + 5.5076320579567573e-02 1.0523856222089907e+00 -8.6301062233407611e-01 + 2.3148426756000040e-03 1.1492084372393141e+00 -9.1977389762795536e-01 + -4.5609907343248102e-02 1.2442586600705701e+00 -9.5423793231999998e-01 + -5.1096289937800909e-02 1.4101973752573274e+00 -9.1665990158906041e-01 + 2.6392420542587902e-01 1.2925219330637505e+00 -2.0323508762523257e-01 + 2.8507228993796957e-01 1.0990709056239489e+00 -1.1148749576081635e-01 + 2.8904296796610729e-01 1.0135220050605696e+00 -4.5592077691902905e-02 + 2.8597518169708014e-01 9.3778529775524544e-01 2.9869036304212379e-02 + 2.8730704400358337e-01 8.7701609449182172e-01 1.1700104979470514e-01 + 3.0649203294665994e-01 8.4201759103923490e-01 2.1577707252637307e-01 + 3.4814960378413562e-01 8.2791396877084689e-01 3.2103513933016203e-01 + 4.0722834283134390e-01 8.1913984254737249e-01 4.2749030995392479e-01 + 4.1279240000499184e-01 7.4006176856078243e-01 5.2800539877275066e-01 + id 12736 + loc 2.9531475901603699e-01 3.8800352811813354e-01 409 + blend 0.0000000000000000e+00 + interp 4.3309740056390006e-01:3.7593409539545980e-01:6.0733327395320003e-02:4.3192878842343219e-01:6.8910173309695755e-01:3.5760929995932145e-01:1.5225401760055335e+00:4.3309306958989446e-01:2.0931657950703340e+00:3.0233819083845326e-01:2.6160281411913942e+00:2.5500743497677913e-01:3.2698491042898521e+00 + CVs 20 + -5.9289850649559855e-02 1.6704902703546132e-01 -5.8178923968173124e-01 + -1.1359996279672738e-01 2.7599972090875236e-01 -1.0734606771175681e+00 + -1.5085158553921141e-01 3.6540162006359889e-01 -1.5275764049139149e+00 + -1.8472284133436190e-01 4.5475994380413176e-01 -1.9709258503350293e+00 + -2.2128404432042531e-01 5.5112252983987342e-01 -2.4023714704876244e+00 + -2.5875926865939586e-01 6.6218600862774379e-01 -2.8182781096016036e+00 + -2.9358279984986935e-01 7.8977029756322303e-01 -3.2170198958038316e+00 + -3.2532921169166751e-01 9.2773105756521979e-01 -3.6041633994959055e+00 + -3.5787064551842757e-01 1.0678948445209726e+00 -3.9914902590362247e+00 + -3.9793236873570725e-01 1.2009309153444347e+00 -4.3891213616883622e+00 + -4.5083176072778647e-01 1.3137457389208675e+00 -4.8045414851072792e+00 + -5.1786623495329720e-01 1.3895664977986268e+00 -5.2450331480323023e+00 + -5.9590487269137093e-01 1.4101962211787016e+00 -5.7139761138223646e+00 + -6.7803457468225026e-01 1.3573524066019913e+00 -6.2087524148181945e+00 + -7.5107737952434550e-01 1.2119383504528143e+00 -6.7250284187734461e+00 + -7.9189063883464106e-01 9.5627088190784981e-01 -7.2555362212330721e+00 + -7.7529137941565729e-01 5.8618533252183447e-01 -7.7768083078023800e+00 + -7.0116937879350516e-01 1.4054833250690191e-01 -8.2359775383322749e+00 + -7.0446417727629163e-01 -1.0308634248523596e-01 -8.4240959209280142e+00 + id 12737 + loc 4.9164029955863953e-01 4.9315252900123596e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9822012990085196e-01:2.6978851218804051e-01:2.6692307906730051e-02:3.6606391026806367e-01:1.0088501349861747e+00:4.6947004463351899e-01:1.9111445636197124e+00:2.9224457025420303e-01:2.1827829677482988e+00:3.6868113994609369e-01:2.9491351254809244e+00:4.9821514769955300e-01:3.2139359590408052e+00 + CVs 20 + 2.4832959970201693e-01 2.9984969398358741e-01 1.2791378872746320e-01 + 3.6253933740636590e-01 4.8879189916065413e-01 2.0474141216525407e-01 + 4.2767011803902977e-01 6.3973764438388214e-01 2.6260737015086377e-01 + 5.0642624840890127e-01 7.7449227581858548e-01 3.2190606107511838e-01 + 5.9274812222590556e-01 8.8835426076183510e-01 3.7978631725075829e-01 + 6.8107983560688223e-01 9.7870763376125136e-01 4.3168333022290739e-01 + 7.6686665977144142e-01 1.0465872823135440e+00 4.7246859105865324e-01 + 8.4684738949521710e-01 1.0969388907903750e+00 4.9769787946757488e-01 + 9.2112735904405774e-01 1.1367149362252611e+00 5.0410345809699220e-01 + 9.9436045641777338e-01 1.1740184775876423e+00 4.8847937349349191e-01 + 1.0748658027028841e+00 1.2186906050950421e+00 4.4956672468891545e-01 + 1.1721191467618561e+00 1.2781438016626661e+00 3.9605598944480958e-01 + 1.2905234553134306e+00 1.3487505296623568e+00 3.4809393843304615e-01 + 1.4232046037246833e+00 1.4104690235583195e+00 3.2726721352280536e-01 + 1.5522887666443272e+00 1.4343767670612202e+00 3.4327567262001535e-01 + 1.6647775300829162e+00 1.4065719361172453e+00 3.9031321496306937e-01 + 1.7638830814470086e+00 1.3314419590384492e+00 4.6059854044961657e-01 + 1.8616629520043304e+00 1.2090450703456597e+00 5.5431189169081851e-01 + 1.8670871711407024e+00 1.0208260968584399e+00 6.4682952806153060e-01 + id 12738 + loc 3.3461237326264381e-03 1.1232371628284454e-01 1076 + blend 0.0000000000000000e+00 + interp 3.7315161227824312e-01:2.4793876579621368e-01:9.4109176675527506e-01:3.2404750219620981e-01:1.7017356801067050e+00:3.7314788076212035e-01:2.6234346550953140e+00:2.4937785854410202e-01:3.7267216944557622e+00 + CVs 20 + -1.2745419929772966e-01 3.2304465167378299e-01 -2.6396911213730367e-01 + -2.4223969828185737e-01 6.6045087700779836e-01 -5.3714227109893309e-01 + -3.8812128793589107e-01 9.8114700948709532e-01 -8.3340536693732326e-01 + -5.8219634778266371e-01 1.2670179359449274e+00 -1.1507711967898258e+00 + -8.2620956074331076e-01 1.5041611494840357e+00 -1.4806955454824222e+00 + -1.1162028208569768e+00 1.6753361011803567e+00 -1.8133028416035517e+00 + -1.4448620103004199e+00 1.7680423535760044e+00 -2.1360194562437580e+00 + -1.8016655562689761e+00 1.7784805035875040e+00 -2.4328810673556522e+00 + -2.1700883869790522e+00 1.7078533762035342e+00 -2.6869144604036133e+00 + -2.5288466134744207e+00 1.5614663509617681e+00 -2.8845219982508770e+00 + -2.8590877461426238e+00 1.3541595352718336e+00 -3.0145306955744795e+00 + -3.1499128366843876e+00 1.1123860813338287e+00 -3.0697454979858008e+00 + -3.3972920620177400e+00 8.6458804882794116e-01 -3.0543328471933444e+00 + -3.6042663586121555e+00 6.3309153959799480e-01 -2.9813408667822339e+00 + -3.7720073483500887e+00 4.2725353564938895e-01 -2.8639593658184705e+00 + -3.8845259802376173e+00 2.5084187318327067e-01 -2.7107930584081501e+00 + -3.9292450048478118e+00 1.1913638591103237e-01 -2.5357450011609464e+00 + -3.9643246786859025e+00 -9.7286397034603844e-03 -2.3617121133139038e+00 + -4.0066992588769832e+00 -2.0673084444471845e-01 -2.1703331449002716e+00 + id 12739 + loc 2.5510254502296448e-01 7.4801796674728394e-01 377 + blend 0.0000000000000000e+00 + interp 4.5400793087910363e-01:2.9626295677839665e-01:1.8196510710403435e-01:2.5378955924717544e-01:1.0960064487203252e+00:4.4209808257309763e-01:1.6022548048990775e+00:4.1276562036066083e-01:2.1038088973461750e+00:3.7330451902863782e-01:2.9809949898482753e+00:4.5400339079979485e-01:3.2132118822728768e+00:4.2658789119822471e-01:3.7448342455301122e+00 + CVs 20 + -7.0816997737094356e-01 3.0076195715831477e-01 -5.2817636852250394e-01 + -1.2721706901335723e+00 4.5541661473923434e-01 -9.1842967572020351e-01 + -1.8056401052861870e+00 5.4252263621998265e-01 -1.2621979492344051e+00 + -2.3492148723432154e+00 6.0657405439017520e-01 -1.6007692768956012e+00 + -2.8906435490543001e+00 6.5686640111787664e-01 -1.9340637385083073e+00 + -3.4263249533242357e+00 6.8735663301298855e-01 -2.2659041090374217e+00 + -3.9535449579605193e+00 6.7718404112690411e-01 -2.6064268261950385e+00 + -4.4630287797586243e+00 6.0743578073287496e-01 -2.9581007581603016e+00 + -4.9375399068152692e+00 4.6759310292034484e-01 -3.3130148968280650e+00 + -5.3600224466848356e+00 2.5544100833375838e-01 -3.6566651510517296e+00 + -5.7158359793727946e+00 -2.1688163108230185e-02 -3.9697848552683408e+00 + -5.9940002805335677e+00 -3.4882542575083475e-01 -4.2366432493201085e+00 + -6.1880117358134425e+00 -7.1232182153503310e-01 -4.4505295969691581e+00 + -6.2936466025002229e+00 -1.1118435676408156e+00 -4.6088386103348604e+00 + -6.3132551141726454e+00 -1.5563267332484294e+00 -4.7156225754388732e+00 + -6.2670394689321576e+00 -2.0534786430185354e+00 -4.7991655627211980e+00 + -6.1978740021578522e+00 -2.6044944123660931e+00 -4.8980770609661111e+00 + -6.1664821580333502e+00 -3.1779021983992428e+00 -5.0136213434324333e+00 + -6.2009804532541590e+00 -3.6265721032803473e+00 -5.0778624848368832e+00 + id 12740 + loc 6.7994689941406250e-01 9.1754728555679321e-01 264 + blend 0.0000000000000000e+00 + interp 4.5438444602661965e-01:4.3884854186155664e-01:4.9420692146300516e-01:3.8416896784511317e-01:9.9947226526148825e-01:4.4041751636432386e-01:1.8344310276864109e+00:4.4377284797933270e-01:2.1668605357159416e+00:3.4102819327214579e-01:2.8724713064786260e+00:4.5437990218215940e-01:3.0947775079626538e+00:3.3979159582600799e-01:3.9380479557061867e+00 + CVs 20 + -7.2350245911156486e-01 3.2719365329885752e-01 -1.0251510084743515e-01 + -1.2193581955671486e+00 5.1789464839131416e-01 -1.0296290901774824e-01 + -1.6770574424866045e+00 6.0049413999317025e-01 -1.8641741813114898e-02 + -2.1982918595295122e+00 6.1057346836955917e-01 1.4341447784066685e-01 + -2.7860272156324584e+00 6.1752227449733987e-01 3.5378731243721939e-01 + -3.4418120794289520e+00 6.7047132376373941e-01 5.4996292187252238e-01 + -4.1603797692739750e+00 7.6576537522524146e-01 6.5570736231598903e-01 + -4.9076092181297915e+00 8.9199753776657298e-01 6.1456615333370035e-01 + -5.6321562289211844e+00 1.0511138098326145e+00 4.0789165810135719e-01 + -6.2944186161518925e+00 1.2354441764919546e+00 4.4549363386674257e-02 + -6.8928006008045051e+00 1.4162666259697365e+00 -4.5524852844433905e-01 + -7.4498580816965712e+00 1.5399341998750915e+00 -1.0790772347716349e+00 + -7.9626266160005477e+00 1.5272541379603402e+00 -1.8157006231560961e+00 + -8.3840984762947244e+00 1.3039800921754843e+00 -2.6233525910566433e+00 + -8.6478958874327407e+00 8.4972099461834061e-01 -3.4285925039377751e+00 + -8.7158102453409843e+00 2.1880131314298534e-01 -4.1109474582202754e+00 + -8.6842149804816380e+00 -4.7513676869701538e-01 -4.5312514028955784e+00 + -8.7196708233159264e+00 -1.1215204427732557e+00 -4.6441665813972275e+00 + -8.8553673549127971e+00 -1.7383685626871288e+00 -4.5647686296997136e+00 + id 12741 + loc 8.8511162996292114e-01 9.9875032901763916e-01 411 + blend 0.0000000000000000e+00 + interp 4.5952298820861598e-01:3.3277110981912122e-01:6.6334022860803366e-04:3.1259040326264709e-01:8.3526409121785294e-01:4.5951839297873392e-01:1.7698593217277265e+00:2.1625850909131891e-01:2.0151647913554198e+00:3.9904303569048277e-01:2.6654563170938168e+00:3.1292618639982445e-01:3.1915233883933309e+00 + CVs 20 + 1.0745416384505240e+00 1.5355446244343551e-01 -2.9342412324135136e-01 + 1.7997137216264674e+00 1.1662841754950859e-01 -5.2231477684685157e-01 + 2.4503627052985304e+00 3.1150380529865795e-02 -7.1188272194094271e-01 + 3.1166400003215777e+00 -5.2336505937167543e-02 -8.6822752188095009e-01 + 3.7906444182372416e+00 -1.3188599082009422e-01 -9.9098483050992492e-01 + 4.4658789931284018e+00 -2.1164445992469039e-01 -1.0896633442940744e+00 + 5.1369066621350266e+00 -3.0571435809169967e-01 -1.1785048197531662e+00 + 5.7974968643241764e+00 -4.3969358966366023e-01 -1.2695705346021118e+00 + 6.4352557885841533e+00 -6.4426099426565830e-01 -1.3722308745399920e+00 + 7.0247292286203846e+00 -9.4338097139947985e-01 -1.4944600013339624e+00 + 7.5341597387334165e+00 -1.3435047231846873e+00 -1.6359128338260311e+00 + 7.9419871779705513e+00 -1.8338394462886456e+00 -1.7945908979585434e+00 + 8.2450965020156133e+00 -2.3907722501461572e+00 -1.9650834245079429e+00 + 8.4529757169221611e+00 -2.9830477076467199e+00 -2.1456815775436544e+00 + 8.5616914727470252e+00 -3.5903197125864739e+00 -2.3310066435873553e+00 + 8.5624395710175421e+00 -4.2098073354711705e+00 -2.5054258463369745e+00 + 8.4518135356671280e+00 -4.8344769234696541e+00 -2.6503599934870223e+00 + 8.2466415959379518e+00 -5.4310014027408213e+00 -2.7629673954619491e+00 + 8.1037434273357682e+00 -5.9790528623251920e+00 -2.8536310564686356e+00 + id 12742 + loc 8.2946509122848511e-01 5.0389873981475830e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5619730393811561e-01:2.8752685599706085e-01:2.2375644131321670e-01:2.5294825686491484e-01:9.8219624070500355e-01:3.5619374196507625e-01:1.3379599308724111e+00:2.9661725910842390e-01:1.9895609151742657e+00:3.4805879350345653e-01:2.5121304489609111e+00:3.4805851312811381e-01:3.0807325583645842e+00:3.3790210835821072e-01:3.9126706905630009e+00 + CVs 20 + 2.9171590800183272e-01 3.1661444088436685e-01 -2.9330674272486640e-01 + 5.9017294298056122e-01 6.4936261489166014e-01 -5.8743676977247650e-01 + 9.2005664116648500e-01 9.7965285704150806e-01 -8.5226342175268699e-01 + 1.2923942132357222e+00 1.2737763088771228e+00 -1.0718281628427437e+00 + 1.6994998019767162e+00 1.4861311500373680e+00 -1.2477173271292574e+00 + 2.1130232322658604e+00 1.5819559820499758e+00 -1.4010892108349093e+00 + 2.4934757392407425e+00 1.5582090625919349e+00 -1.5637253195384475e+00 + 2.8154261401550853e+00 1.4471098078634930e+00 -1.7592039063180520e+00 + 3.0711559620243065e+00 1.2883086087490994e+00 -1.9978107348023058e+00 + 3.2012161932217809e+00 1.0700935219193695e+00 -2.2717568746772860e+00 + 3.0486103853531201e+00 7.4801185080914201e-01 -2.5130080043350853e+00 + 2.5801779554259694e+00 4.0888678402908085e-01 -2.5916847220074186e+00 + 2.1249476256344124e+00 1.4007242394987929e-01 -2.5687535909489299e+00 + 1.7625370112266441e+00 -1.6017556358987572e-01 -2.4927664451492006e+00 + 1.2565264235607607e+00 -3.3801421149595345e-01 -2.1563149750363158e+00 + 7.3307686315263609e-01 -2.8082047178352942e-01 -1.7210455579612058e+00 + 3.5764905859336632e-01 -3.7473357677202573e-01 -1.4622671047558193e+00 + 1.1064670814202565e-01 -7.7028790994700946e-01 -1.3009747151031112e+00 + -1.3636513767672620e-01 -1.1174344561295717e+00 -1.2780538395123959e+00 + id 12743 + loc 8.2344645261764526e-01 2.5602564215660095e-01 372 + blend 0.0000000000000000e+00 + interp 4.8856267163773698e-01:2.7085598246410603e-01:1.8247987404420862e-01:4.8682453140419207e-01:9.9269018846897383e-01:4.8855778601102062e-01:1.7481741114866232e+00:2.6018815168562759e-01:2.0792647478740651e+00:2.8144723531414767e-01:3.1689263559550969e+00 + CVs 20 + 6.5198956219533233e-01 4.2606560380134478e-01 -2.0163954448289695e-02 + 1.2471415187161889e+00 7.2782093310440810e-01 -8.6328896293087182e-02 + 1.8606608773935585e+00 9.5578171301496984e-01 -1.5208361717103153e-01 + 2.4974870132871878e+00 1.1963062122671877e+00 -1.4271967787065726e-01 + 3.0661433829995004e+00 1.5210641865824446e+00 6.4874273229540036e-02 + 3.3535734278195077e+00 1.8965897391686419e+00 5.6525216204287387e-01 + 3.2200214050696983e+00 2.1544069125143230e+00 1.1526156614040195e+00 + 2.7849113051406840e+00 2.2605856498385677e+00 1.6461749523273383e+00 + 2.1331864669653484e+00 2.2300420258653424e+00 2.0179670635398570e+00 + 1.3458098866499904e+00 2.0512603886431524e+00 2.2594933753752691e+00 + 5.3469731876014315e-01 1.7115582712944843e+00 2.3747571462592960e+00 + -1.8879882065695752e-01 1.2404401358505468e+00 2.3815983518824253e+00 + -7.7137652696237746e-01 7.3736083678771802e-01 2.3155861602719887e+00 + -1.2687895487552294e+00 3.2816743023873024e-01 2.2378357052119937e+00 + -1.8938478771209013e+00 1.3482873470301693e-01 2.2327991183181028e+00 + -2.7973911088742041e+00 3.0894353884905290e-01 2.4151883302155710e+00 + -3.7574719876022606e+00 9.0389079996890986e-01 2.8324597105033487e+00 + -4.5456846245253848e+00 1.7705669734618255e+00 3.3812102278469371e+00 + -5.3089127090162052e+00 2.6662999815918940e+00 3.8375852330607749e+00 + id 12744 + loc 2.1981523931026459e-01 4.3264064192771912e-01 403 + blend 0.0000000000000000e+00 + interp 4.0437144011885623e-01:3.9447395680463598e-01:2.2632660779623570e-01:2.8394324957949341e-01:1.0994765709057361e+00:2.6458779445184188e-01:2.0375781532083952e+00:2.7074540016266929e-01:2.9889083604521520e+00:4.0436739640445507e-01:3.5716805311125350e+00 + CVs 20 + -8.9509392615151992e-02 1.3065342206491992e-01 7.5495748713538965e-02 + -1.9363679254340346e-01 2.7655165216294775e-01 1.3070253213701505e-01 + -3.1283841755176534e-01 4.2550476575857249e-01 1.8905583636784562e-01 + -4.4610479119695984e-01 5.6895986445304780e-01 2.6379914975281021e-01 + -5.9315026255594416e-01 7.0386821581348213e-01 3.6123540467834248e-01 + -7.5260502701534515e-01 8.2633566519342327e-01 4.8771504456189163e-01 + -9.2134349965996820e-01 9.3287911319234407e-01 6.4971389177163208e-01 + -1.0943221985796401e+00 1.0210701346928641e+00 8.5286808897112154e-01 + -1.2648867761393094e+00 1.0887495617281897e+00 1.1010609576631518e+00 + -1.4246529404000212e+00 1.1318239082975143e+00 1.3959052741206781e+00 + -1.5634009286767314e+00 1.1439158798520388e+00 1.7359843960695809e+00 + -1.6697750866911285e+00 1.1186436853448634e+00 2.1165169232113561e+00 + -1.7316840464598711e+00 1.0509778156042742e+00 2.5298469487804858e+00 + -1.7361535371748578e+00 9.3763157724971713e-01 2.9658625000739542e+00 + -1.6707500561958204e+00 7.7852465331471188e-01 3.4112753466741337e+00 + -1.5334330739833570e+00 5.7453089700695115e-01 3.8431969716399070e+00 + -1.3443943004585313e+00 3.2923224970501552e-01 4.2327588882177567e+00 + -1.1348378031559396e+00 5.4293295655365004e-02 4.5659262360450743e+00 + -1.0127693149559036e+00 -1.4520555070146424e-01 4.8779382992193678e+00 + id 12745 + loc 6.2600213289260864e-01 7.4129468202590942e-01 1081 + blend 0.0000000000000000e+00 + interp 5.0539026180203395e-01:4.3974103401212805e-01:3.6192737840048472e-01:3.0234577427409665e-01:9.9918334763254757e-01:4.4509073574333863e-01:1.4016786634354668e+00:5.0538520789941599e-01:1.9831949107077982e+00:4.7507832412887419e-01:2.2711578451792471e+00:4.5135136729388814e-01:2.8681751594918010e+00:4.2073288589881952e-01:3.1182639190195940e+00:3.1674560269102181e-01:3.9029054155353595e+00 + CVs 20 + 1.1236200759702077e-01 5.9695818889381480e-01 4.7544769407381554e-01 + 2.4376398294949694e-01 1.0838006254325925e+00 7.4483725816896318e-01 + 3.7987793900852379e-01 1.5353373778298627e+00 9.4348261437897274e-01 + 5.2081212336442917e-01 1.9760304644300473e+00 1.1108915132444233e+00 + 6.7247501311116242e-01 2.3898780429161022e+00 1.2299099245617602e+00 + 8.3427982599975081e-01 2.7537587915731572e+00 1.2731464298418855e+00 + 9.9619695076120651e-01 3.0348210849100896e+00 1.2105578100587202e+00 + 1.1321334632202715e+00 3.1851464579752342e+00 1.0242931252826002e+00 + 1.1759425435147310e+00 3.1292033660391065e+00 7.2878463076807853e-01 + 1.0218685631195226e+00 2.8478015747460876e+00 4.5421514843971422e-01 + 7.3964593018951297e-01 2.5490632482583733e+00 3.3867945990432069e-01 + 5.0089538967910041e-01 2.3382184489497604e+00 2.7518616958925401e-01 + 3.2412132956659467e-01 2.1473696716839585e+00 1.7546978163798743e-01 + 1.8469852688946645e-01 1.9221888051497584e+00 3.2607465724915796e-02 + 6.8070594198030132e-02 1.6218162217338419e+00 -1.2829560814816110e-01 + -3.7488941721883717e-02 1.1899176077480633e+00 -2.3702400970156873e-01 + -1.4151140573491988e-01 6.1184865833947832e-01 -1.8146528396068418e-01 + -2.3771693665907193e-01 2.2427463912912352e-02 1.5527795648727652e-02 + -2.9550485981077018e-01 -3.8610680786796087e-01 -3.8713129597453780e-02 + id 12746 + loc 9.2802500724792480e-01 5.7024907320737839e-02 1078 + blend 0.0000000000000000e+00 + interp 4.7344589814408167e-01:4.7344116368510025e-01:8.7406803810891054e-03:3.2404750219620981e-01:7.0549874119698008e-01:3.3763693711788861e-01:1.0370210121544157e+00:3.1139884434945875e-01:2.0217190370206115e+00:3.8624732152982905e-01:2.9981755892854700e+00:4.1410637039816767e-01:3.4085075251187105e+00 + CVs 20 + -1.6544008645068331e-01 2.3826092210437250e-01 1.5414337217661583e-01 + -3.1080301324086662e-01 4.9406920887067662e-01 3.0212136524562916e-01 + -4.4455991256169647e-01 7.4885325272592362e-01 4.6499509454582882e-01 + -5.7546247352806290e-01 9.9710400180097181e-01 6.5696636133106745e-01 + -7.0947570959336670e-01 1.2371990108603654e+00 8.8282066960990613e-01 + -8.5461402451812341e-01 1.4612454613793213e+00 1.1468413413793856e+00 + -1.0191177679615520e+00 1.6534072390827128e+00 1.4538332685932314e+00 + -1.2045131384864813e+00 1.7949408308480224e+00 1.8035215407740464e+00 + -1.4037024037899568e+00 1.8697679038808641e+00 2.1876908857783612e+00 + -1.6054540557617356e+00 1.8659986862423754e+00 2.5933997115472445e+00 + -1.7982971741434535e+00 1.7765519595759738e+00 3.0056179360182451e+00 + -1.9743839474430855e+00 1.5998249033679635e+00 3.4090727044556188e+00 + -2.1333002406413515e+00 1.3391399796452750e+00 3.7889893717069669e+00 + -2.2839701362124938e+00 9.9849647281301501e-01 4.1286472335046724e+00 + -2.4387185607260444e+00 5.6794731373703145e-01 4.3934482384314935e+00 + -2.5931533344428628e+00 1.0201405675042796e-02 4.4753106026317582e+00 + -2.6980376714037932e+00 -6.1617501551240506e-01 4.1415512000111789e+00 + -2.7305407596394575e+00 -9.8498098575945803e-01 3.5217049482383334e+00 + -2.8305963704661434e+00 -1.2663763373423296e+00 3.3160257181422708e+00 + id 12747 + loc 9.3464404344558716e-01 2.6226156949996948e-01 409 + blend 0.0000000000000000e+00 + interp 5.0024155532798609e-01:3.7759054420617416e-01:2.1785077688948284e-01:3.7833130015940591e-01:1.0199724586765868e+00:4.0595638197823458e-01:1.5506721678231912e+00:4.2122648182930877e-01:2.0770117621826709e+00:3.0888139444777518e-01:2.9279845113934080e+00:4.2753918003590963e-01:3.4067751426381951e+00:5.0023655291243285e-01:3.9464326904521125e+00 + CVs 20 + -3.0593662343641198e-01 2.3677683589517437e-01 1.9503140805228858e-01 + -6.0347454172317239e-01 4.6226933489422439e-01 3.8030849197714595e-01 + -9.0119639775946525e-01 6.7848307326495183e-01 5.5271159115482116e-01 + -1.2033955926938475e+00 8.8045436803338628e-01 7.1400052855454388e-01 + -1.5084954998490270e+00 1.0601531266398005e+00 8.6559439490239809e-01 + -1.8151989312933241e+00 1.2114995757813201e+00 1.0089741552895586e+00 + -2.1271243588797675e+00 1.3286323587175528e+00 1.1458899359829178e+00 + -2.4501117659552176e+00 1.4029495244224668e+00 1.2774077824782362e+00 + -2.7840662506263847e+00 1.4234975983624887e+00 1.4052600894782628e+00 + -3.1186498520152020e+00 1.3786975559376149e+00 1.5345639433167735e+00 + -3.4321975624076742e+00 1.2619109599016456e+00 1.6678568516225241e+00 + -3.6992781830419466e+00 1.0787899796741396e+00 1.8003510926492208e+00 + -3.9055542419204485e+00 8.4319836759189348e-01 1.9266583480740223e+00 + -4.0481295143655220e+00 5.6788924885038972e-01 2.0460101077058415e+00 + -4.1269280907254959e+00 2.6415484068072947e-01 2.1594956790363877e+00 + -4.1422717281303987e+00 -5.5624215772944297e-02 2.2665259782099652e+00 + -4.0977059279560191e+00 -3.8027825471288290e-01 2.3644326047828810e+00 + -4.0041470941219011e+00 -7.0954633338667095e-01 2.4539194472262342e+00 + -3.8978591561104006e+00 -1.0947823548265974e+00 2.5619298075578918e+00 + id 12748 + loc 9.2445164918899536e-01 9.9673736095428467e-01 1082 + blend 0.0000000000000000e+00 + interp 3.0024251316742123e-01:3.0023951074228955e-01:5.2142550242094687e-03:2.7214879451218682e-01:1.0000348875086387e+00:2.4236390831902217e-02:1.7051521968088306e+00:2.7305912465996351e-01:2.9098119406123306e+00:2.5959022558700684e-01:3.4023823830717643e+00 + CVs 20 + -1.2084556048129652e-01 2.6686643158805312e-01 3.7206314284751385e-01 + -2.1948768076696487e-01 4.0141374199140134e-01 5.3980155987865441e-01 + -3.1235064495988479e-01 4.7333271780130293e-01 6.3164519694102894e-01 + -4.0822038590360665e-01 5.2023063069217701e-01 7.1978263649990359e-01 + -5.0283915310490779e-01 5.4256106189347297e-01 7.9894820760432861e-01 + -5.9590936415314211e-01 5.4388308916076755e-01 8.6737074948487325e-01 + -6.9388967693098769e-01 5.2818610514324715e-01 9.2608523880275273e-01 + -8.0755160835440720e-01 4.9662974527751558e-01 9.7714548711983307e-01 + -9.4685481491126811e-01 4.4731645045625301e-01 1.0227476479870850e+00 + -1.1166054990232284e+00 3.7782416785264666e-01 1.0652939034849278e+00 + -1.3144199207723073e+00 2.8741090616912474e-01 1.1080690316543409e+00 + -1.5343080924187271e+00 1.7693180306430376e-01 1.1540307446044151e+00 + -1.7784120788368620e+00 4.5994854311463274e-02 1.2047399960973140e+00 + -2.0588431227670196e+00 -1.0687015225620849e-01 1.2647743501844275e+00 + -2.3798061559436610e+00 -2.7068734266738886e-01 1.3412886212246768e+00 + -2.7256714678664529e+00 -4.2102480435250544e-01 1.4379104510335861e+00 + -3.0740194303870023e+00 -5.3927444588119489e-01 1.5517628146105933e+00 + -3.4084124058183534e+00 -6.1977511892408843e-01 1.6747037334377186e+00 + -3.6747389492567559e+00 -6.5644435644001253e-01 1.7654876852226582e+00 + id 12749 + loc 3.4964084625244141e-01 3.7027084827423096e-01 406 + blend 0.0000000000000000e+00 + interp 3.9849964567463858e-01:2.9002466144980105e-01:4.1359721051762177e-01:3.8878691444914659e-01:1.1694575103730345e+00:3.4392956036173011e-01:1.9568378043508778e+00:3.0334886053771981e-01:3.0000118142150143e+00:3.9849566067818187e-01:3.7670283704371110e+00 + CVs 20 + 3.0957928865033596e-02 1.9498809229297570e-01 -1.3569161129495450e-01 + 7.1627126606036998e-02 3.3449588815346154e-01 -1.9800473717929684e-01 + 1.2154356855500062e-01 4.5586749969289636e-01 -2.4461599668896233e-01 + 1.8108268816004042e-01 5.7943557885145913e-01 -3.0364519539067197e-01 + 2.5224020988396162e-01 7.0468596364577796e-01 -3.7641670440751213e-01 + 3.3669967694259073e-01 8.3048513741786123e-01 -4.6385367028719954e-01 + 4.3569498739117707e-01 9.5495864747123260e-01 -5.6585396517721298e-01 + 5.5011865612948485e-01 1.0758757194915121e+00 -6.8065229777497338e-01 + 6.8142813419377635e-01 1.1916188822297578e+00 -8.0643844866308489e-01 + 8.3209885938720407e-01 1.3010486327675177e+00 -9.4483149509999376e-01 + 1.0024617649662799e+00 1.4017483811369031e+00 -1.0997661559104210e+00 + 1.1868140728905965e+00 1.4903366070953084e+00 -1.2704417675243818e+00 + 1.3774346344282968e+00 1.5654472366094012e+00 -1.4500909146557883e+00 + 1.5720569600934229e+00 1.6274334996861963e+00 -1.6350297972746655e+00 + 1.7728333029677532e+00 1.6754266250402627e+00 -1.8288282964681490e+00 + 1.9787814352412301e+00 1.7082430366442529e+00 -2.0355690384128478e+00 + 2.1829546898565164e+00 1.7277716285860747e+00 -2.2524885872286782e+00 + 2.3781550604415549e+00 1.7385541033101792e+00 -2.4687624549168383e+00 + 2.5188609943137159e+00 1.7744334448600438e+00 -2.5662392837687613e+00 + id 12750 + loc 4.5940113067626953e-01 6.8172216415405273e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3297735470317533e-01:3.7244924124130202e-01:2.5989024461380561e-01:4.3297302492962830e-01:8.8251823780239669e-01:4.3222553120996199e-01:1.3773262565954254e+00:3.4630509666357390e-01:1.9989035747697121e+00:4.3030381119193029e-01:2.6827008337814604e+00:2.6300824382187254e-01:3.5233269945521193e+00 + CVs 20 + 4.1500847042356348e-02 3.0373072612806207e-01 -1.0261450394736996e-01 + 8.7625818462314625e-02 5.9980156601128087e-01 -1.7100615879164011e-01 + 1.4138160723441812e-01 9.0348986495490013e-01 -2.1705317680713321e-01 + 2.1432589995184470e-01 1.2276638479246156e+00 -2.5634437282879058e-01 + 3.2197181884236870e-01 1.5629611739025577e+00 -2.9955840780150139e-01 + 4.6662211898943984e-01 1.9017246258941549e+00 -3.5730038534575403e-01 + 6.3409159895597411e-01 2.2593398302329897e+00 -4.5775065935403697e-01 + 7.9137124963394234e-01 2.6521996259031546e+00 -6.5336999187216971e-01 + 8.9907335800705757e-01 3.0530203333517583e+00 -9.8964533860415282e-01 + 9.3301626394020243e-01 3.3840952215456221e+00 -1.4571241654572571e+00 + 8.9234245609459850e-01 3.5786737638808108e+00 -1.9858878394916619e+00 + 7.8893753608353867e-01 3.6246974659528255e+00 -2.4984960725353926e+00 + 6.3434319311248544e-01 3.5452652545838075e+00 -2.9488550658631572e+00 + 4.3546316488233217e-01 3.3675952171137169e+00 -3.3292566830235266e+00 + 1.9692812008103466e-01 3.1044860444036151e+00 -3.6592550771332606e+00 + -8.7916972714039199e-02 2.7428863216680788e+00 -3.9838455206345671e+00 + -4.1367491065529793e-01 2.2428595647494221e+00 -4.3846062740976190e+00 + -6.0891458439669699e-01 1.6248182246212861e+00 -4.8953808988422747e+00 + -3.4518775564223303e-01 1.4059851040345290e+00 -5.0121289417942672e+00 + id 12751 + loc 8.3162069320678711e-01 9.6493023633956909e-01 1076 + blend 0.0000000000000000e+00 + interp 3.5732346668204967e-01:2.6634866234589183e-01:1.3963911407712581e-02:2.8349232630783799e-01:8.6682123668981348e-01:2.7421145495308374e-01:1.9993780278020270e+00:3.5731989344738285e-01:2.8945299208976540e+00:2.6854318293124285e-01:3.2805542854944534e+00 + CVs 20 + 2.9223664358172396e-01 2.3327771580624385e-01 -2.9772892181025273e-01 + 5.7029664242203781e-01 4.6881895890754216e-01 -5.5936051444341717e-01 + 8.3136394482009390e-01 6.8076570567444705e-01 -8.1830407549669304e-01 + 1.0748214350696967e+00 8.6359750343984010e-01 -1.0854605337998218e+00 + 1.2911228993183776e+00 1.0109668251686161e+00 -1.3562118665416247e+00 + 1.4679650609769486e+00 1.1194119042020376e+00 -1.6259794195584574e+00 + 1.6018768028008414e+00 1.1970637582744685e+00 -1.8930092142384889e+00 + 1.7035886574114218e+00 1.2606362657223655e+00 -2.1630474177588370e+00 + 1.7892447634297908e+00 1.3227633924402002e+00 -2.4475764744513224e+00 + 1.8733200352890929e+00 1.3858715536873003e+00 -2.7590066780954263e+00 + 1.9657978117234607e+00 1.4430912636236091e+00 -3.1047090421065393e+00 + 2.0725727924778914e+00 1.4821534711265727e+00 -3.4832957263157343e+00 + 2.1963121218780217e+00 1.4884641673220234e+00 -3.8853251297704379e+00 + 2.3344145487984251e+00 1.4536526650021431e+00 -4.2872489438456975e+00 + 2.4806631859677859e+00 1.3878405054470877e+00 -4.6543910329583325e+00 + 2.6282985005347244e+00 1.3051374776304705e+00 -4.9751216183703617e+00 + 2.7616388012308652e+00 1.2032586324236842e+00 -5.2741398564579169e+00 + 2.8207219631278981e+00 1.0740813711330994e+00 -5.5927809633599637e+00 + 2.6107426488915881e+00 9.5446190612131809e-01 -5.9609647634705460e+00 + id 12752 + loc 1.3031189143657684e-01 1.3496644794940948e-01 393 + blend 0.0000000000000000e+00 + interp 4.2347755790201291e-01:3.2224809766712181e-01:1.6684650847288218e-01:3.6668587082167925e-01:9.4480095390359498e-01:2.4994672371300894e-01:1.2344068563239614e+00:3.5013906576764942e-01:1.9666173820773634e+00:3.2452984584928801e-01:2.8201989530680782e+00:4.2347332312643393e-01:3.4344037448127915e+00 + CVs 20 + -1.4662494936342635e-01 3.2341119700475279e-01 3.6460115502653678e-01 + -2.5158901294477942e-01 6.6298709451946980e-01 6.8810187348096652e-01 + -3.4665463480078823e-01 1.0291049991491781e+00 9.9495961356854501e-01 + -4.6232265815271018e-01 1.4242507260328654e+00 1.3088577620007238e+00 + -6.2836584562922970e-01 1.8335138137238705e+00 1.6436404981720676e+00 + -8.7094083574303982e-01 2.2239707394838546e+00 2.0125552743494488e+00 + -1.2016939891263463e+00 2.5465514280829122e+00 2.4265830706261253e+00 + -1.6119435861522884e+00 2.7494432776781736e+00 2.8836750767680543e+00 + -2.0716069484634301e+00 2.7969105133765995e+00 3.3649169530703991e+00 + -2.5376454745939223e+00 2.6843106606557408e+00 3.8429498302554452e+00 + -2.9690380823179243e+00 2.4391876953439668e+00 4.2943967674218744e+00 + -3.3375017704625782e+00 2.1119408496640002e+00 4.7105252350442761e+00 + -3.6252620892452851e+00 1.7496237218547603e+00 5.1009610132304202e+00 + -3.8151918233330262e+00 1.3617241787719203e+00 5.4597283986241756e+00 + -3.8843247304691433e+00 9.5685332794673728e-01 5.7676501021727145e+00 + -3.8311106418324132e+00 5.7110853144921947e-01 6.0123206803247475e+00 + -3.6893787687742714e+00 2.2515081557614369e-01 6.2078084146396044e+00 + -3.5013180413891618e+00 -1.1427569519188552e-01 6.3964897360337947e+00 + -3.3486153899483062e+00 -5.5557057308743030e-01 6.6499324303459693e+00 + id 12753 + loc 3.9890035986900330e-01 9.9064433574676514e-01 1080 + blend 0.0000000000000000e+00 + interp 3.6222229628061425e-01:3.6221867405765146e-01:7.2576634281663632e-01:1.1328431853100697e-01:1.4984082218957071e+00:2.5361502916546325e-01:2.9374150070378846e+00:3.1849563987947788e-01:3.9959150896371201e+00 + CVs 20 + -1.3841523899962499e-01 1.4683444979961802e-01 1.3902137248514854e-01 + -2.4555823296989213e-01 2.5110099787777862e-01 1.9545252999657037e-01 + -3.3241238840235371e-01 3.1503294571430318e-01 2.1616960599110382e-01 + -4.2717245510265445e-01 3.6861496517949910e-01 2.4311879070533790e-01 + -5.3272065472308361e-01 4.1129311371807087e-01 2.7364514664165085e-01 + -6.5253782811812944e-01 4.4146069606511551e-01 3.0523974763239853e-01 + -7.9005186229534219e-01 4.5666795068277849e-01 3.3604694428801707e-01 + -9.4760871136274483e-01 4.5430649208699914e-01 3.6519885564553439e-01 + -1.1265267120765894e+00 4.3247007857413577e-01 3.9301524427464907e-01 + -1.3269553681745798e+00 3.9036967883664969e-01 4.2065966171619340e-01 + -1.5470504071133211e+00 3.2846900870103107e-01 4.4972587116040919e-01 + -1.7829729400308445e+00 2.4775892944855921e-01 4.8147226148100752e-01 + -2.0299085839656570e+00 1.4910075974307560e-01 5.1619579457853360e-01 + -2.2864458777708334e+00 3.5520591853645228e-02 5.5540263670952328e-01 + -2.5548135692826386e+00 -8.3364684813462736e-02 6.0479538594122695e-01 + -2.8301927234986759e+00 -1.9236662212573832e-01 6.7147578898027804e-01 + -3.0983156791039672e+00 -2.7903577798019968e-01 7.5778146294496063e-01 + -3.3471069491035164e+00 -3.4086764100251055e-01 8.5819538181185251e-01 + -3.5836577191777792e+00 -4.0698560759128921e-01 9.3880273536239045e-01 + id 12754 + loc 8.4601873159408569e-01 8.9399319887161255e-01 377 + blend 0.0000000000000000e+00 + interp 4.5116854559871250e-01:4.1456795300619786e-01:6.6782017299319985e-02:3.8009552048546780e-01:8.9570409288929231e-01:2.9321467670242396e-01:1.2657968766831533e+00:4.5116403391325655e-01:2.0450993557750263e+00:2.9440568842890597e-01:3.0183683025867509e+00:3.6363381145634582e-01:3.6078776241764050e+00 + CVs 20 + -6.2231926750061217e-01 2.3655117418484461e-01 -8.4305461874317100e-01 + -1.1043810866570374e+00 3.4341224586229913e-01 -1.4421431894626555e+00 + -1.5492114586027548e+00 4.0492787067517855e-01 -1.9704216398797723e+00 + -2.0034513470185402e+00 4.4162179033143933e-01 -2.4954170200612182e+00 + -2.4632440531358721e+00 4.4108303487705980e-01 -3.0220720212893766e+00 + -2.9234099738469665e+00 3.8866491165901240e-01 -3.5533116889898690e+00 + -3.3682970800094494e+00 2.6909034620720074e-01 -4.0826781904055416e+00 + -3.7769124247807575e+00 7.1211158290154009e-02 -4.5968457380393675e+00 + -4.1374494848111150e+00 -2.1039919646799077e-01 -5.0766833586217119e+00 + -4.4485010032603558e+00 -5.6095437666488612e-01 -5.5080924785194325e+00 + -4.7208240009636375e+00 -9.5464174347407837e-01 -5.8792205476845352e+00 + -4.9653526563308334e+00 -1.3750832135623301e+00 -6.1850726727685519e+00 + -5.1956229978676038e+00 -1.8216684956948677e+00 -6.4322404970232414e+00 + -5.4257937034118244e+00 -2.2952604878864484e+00 -6.6331710779062352e+00 + -5.6645810109293571e+00 -2.7724898346645275e+00 -6.8021341987041888e+00 + -5.9141299322530916e+00 -3.2216349350466325e+00 -6.9548869732175467e+00 + -6.1701324554787149e+00 -3.6236247825854058e+00 -7.0992099046334962e+00 + -6.4338128321230030e+00 -3.9719640304733197e+00 -7.2312174558489790e+00 + -6.7208724408672067e+00 -4.2673115479033878e+00 -7.3371442446422179e+00 + id 12755 + loc 2.9836773872375488e-01 3.5446795821189880e-01 372 + blend 0.0000000000000000e+00 + interp 3.4896588338232587e-01:2.7544843079627424e-01:4.9807152505501895e-01:3.0086054037817639e-01:1.0848707983157289e+00:2.4955732648618836e-01:1.9866972811665333e+00:3.4896239372349208e-01:2.6899140428493560e+00:2.5275842255738229e-01:3.7928140043881577e+00 + CVs 20 + -1.3118432090302784e-01 6.9895401594087692e-01 4.9755057314207884e-01 + -2.5593869186725166e-01 1.3512310467133402e+00 9.5204699763210865e-01 + -4.1510017666023363e-01 1.9504285914657391e+00 1.3656828373510725e+00 + -6.5254563569074409e-01 2.4652556076639001e+00 1.6371879502419122e+00 + -9.4954206081116177e-01 2.8340227848192923e+00 1.6593637256588480e+00 + -1.2535962624011794e+00 3.0424350337056469e+00 1.4718923907148080e+00 + -1.5492389417115380e+00 3.0958164117306048e+00 1.1434330504035268e+00 + -1.8287608213899234e+00 2.9860415923822616e+00 7.2582826631196529e-01 + -2.0917357155558731e+00 2.7131987640482658e+00 2.6586698078731241e-01 + -2.3376024777645097e+00 2.2850551513046300e+00 -1.9791175801996830e-01 + -2.5575711676501003e+00 1.7094682083437021e+00 -6.4093486939304245e-01 + -2.7244556669427658e+00 1.0090200734609254e+00 -1.0721813610276587e+00 + -2.8026771351475199e+00 2.8333686365368516e-01 -1.5359420500196623e+00 + -2.8119615175746726e+00 -2.9505868939000335e-01 -2.0517368524742388e+00 + -2.8618444700467296e+00 -5.7996223007768744e-01 -2.5622156378137579e+00 + -3.0587953000370494e+00 -5.4494520533656954e-01 -3.0989895463313948e+00 + -3.4719105809170259e+00 -1.9071401326573167e-01 -3.6236036452980827e+00 + -4.0199617441978130e+00 4.5997634200622861e-01 -4.0827461886166656e+00 + -4.5602456340181794e+00 1.3897798994438317e+00 -4.7157262361321513e+00 + id 12756 + loc 4.7296699881553650e-01 2.8489297628402710e-01 409 + blend 0.0000000000000000e+00 + interp 4.8805133702393622e-01:3.0704184851787375e-01:7.6327926872142071e-02:4.2940726475315372e-01:7.5029055356043806e-01:3.4073943079944341e-01:1.1532008047443407e+00:3.9580687659330205e-01:1.9841905593303579e+00:3.3746604328655044e-01:2.3973057000393236e+00:4.8804645651056600e-01:3.0733478134592627e+00:3.9608194831141513e-01:3.7379019827430886e+00 + CVs 20 + 3.7335532799324452e-02 8.4204960986114130e-02 -4.7214391905521369e-01 + 5.4620791396664606e-02 1.6215630492617883e-01 -9.3406862538641544e-01 + 1.0345174308793224e-01 2.2264640937693236e-01 -1.3774614464076529e+00 + 1.7637951292120824e-01 2.6493336821904834e-01 -1.8096782982359629e+00 + 2.6330597646491960e-01 2.8569742438532553e-01 -2.2258306549997129e+00 + 3.6086230511315120e-01 2.8196668216505461e-01 -2.6182506301333319e+00 + 4.6806335745036587e-01 2.4504250730881472e-01 -2.9768269684828610e+00 + 5.8161651287980187e-01 1.6104316506649430e-01 -3.2896952815962317e+00 + 6.9101616139198430e-01 2.4315325010899169e-02 -3.5529970596556808e+00 + 7.8050992662545093e-01 -1.6277327062406810e-01 -3.7706040325102288e+00 + 8.3667198560796974e-01 -3.9823841648973501e-01 -3.9385371209503610e+00 + 8.5433187778539699e-01 -6.7093329956212222e-01 -4.0509881604991538e+00 + 8.3778481893481471e-01 -9.6002841963682495e-01 -4.1169326831997974e+00 + 7.9534874522234700e-01 -1.2506446714454389e+00 -4.1487143958905168e+00 + 7.3561000215189998e-01 -1.5352774541596037e+00 -4.1492921191503260e+00 + 6.7469634204308138e-01 -1.8029826302555179e+00 -4.1102715042485869e+00 + 6.3338008692339143e-01 -2.0401766042535838e+00 -4.0305767657026497e+00 + 6.0483473751581118e-01 -2.2588224168283895e+00 -3.9400597106316226e+00 + 5.2640665886928184e-01 -2.5806163770882202e+00 -4.0416037477316600e+00 + id 12757 + loc 4.6355086565017700e-01 3.6097964644432068e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6685961146410498e-01:3.6447104144519710e-01:2.5304504042686582e-02:2.6599193303070756e-01:7.1102607502965820e-01:4.6685494286799034e-01:1.1425562922014847e+00:3.9705881424035677e-01:1.8161593680728902e+00:3.7218225623275841e-01:2.1068042465995793e+00:4.0105977493567507e-01:2.7765144579812144e+00:4.1823965689097287e-01:3.3443751324714404e+00 + CVs 20 + 5.5077491644783969e-02 3.4304055273503653e-01 -1.6177659000686870e-01 + 5.4803376494721112e-02 6.7145618464096990e-01 -3.3417531486984936e-01 + 4.4306357045016953e-03 9.9175909277760066e-01 -5.0717038122200331e-01 + -1.0130764273815385e-01 1.2982956704823165e+00 -6.7728696722827120e-01 + -2.7322777242136997e-01 1.5726601940318803e+00 -8.4155750569383991e-01 + -5.1728889452622329e-01 1.7910640456982789e+00 -9.8910848940334584e-01 + -8.2676586402353747e-01 1.9273234620493147e+00 -1.0986131558686274e+00 + -1.1741545663730761e+00 1.9629841640770018e+00 -1.1427149308914373e+00 + -1.5139492381673845e+00 1.8984571212430925e+00 -1.1030820515002373e+00 + -1.8034774513223750e+00 1.7534257379583833e+00 -9.8499355477569672e-01 + -2.0169768616950918e+00 1.5515924410093338e+00 -8.0751682521426882e-01 + -2.1430292990599313e+00 1.3172930491208696e+00 -5.9411922862413069e-01 + -2.1976711409768366e+00 1.0700917173970228e+00 -3.6608228372132806e-01 + -2.2219938775337469e+00 8.1857345976847939e-01 -1.2852956305885443e-01 + -2.2753764663083680e+00 5.7163225220903502e-01 1.2689237836840070e-01 + -2.4336156179649819e+00 3.6318621161352749e-01 4.0157651147948636e-01 + -2.7329856691264371e+00 2.8988792882631365e-01 6.7214489845636005e-01 + -3.0839999846651764e+00 4.8695758394372923e-01 8.8793207628536353e-01 + -3.1812019182438735e+00 5.2356473465386388e-01 1.0516927342156772e+00 + id 12758 + loc 1.4639079570770264e-02 5.7307821512222290e-01 403 + blend 0.0000000000000000e+00 + interp 4.0099724822850896e-01:2.1652561732834391e-01:7.9478312850572563e-01:3.1024619473418202e-01:1.4894093074900649e+00:4.0099323825602667e-01:2.0461716693243472e+00:3.8463331954397501e-01:2.7768092996172955e+00:3.9127681609089965e-01:3.2619927772454371e+00:3.6636569728389046e-01:3.9999998739668450e+00 + CVs 20 + -7.9939628897039761e-02 1.3766656711044048e-01 -1.3833963059003904e-02 + -1.6937074234476013e-01 2.7637875279357282e-01 -3.7129110313638657e-02 + -2.7073421999180380e-01 4.0370380395338612e-01 -5.3116070162273765e-02 + -3.8395526161036864e-01 5.1246375197289717e-01 -5.3620006850583025e-02 + -5.0355484073329204e-01 5.9712660702810805e-01 -3.8269947591139199e-02 + -6.2170886760215616e-01 6.5393106686028446e-01 -7.9265483736567048e-03 + -7.3008940387403587e-01 6.8215712203177559e-01 3.5139230384981505e-02 + -8.2197107768577626e-01 6.8456614765857215e-01 8.7227747554747451e-02 + -8.9036928439319818e-01 6.6597878147441281e-01 1.4342455986239228e-01 + -9.2695706421590918e-01 6.3328976411654714e-01 1.9754122442644417e-01 + -9.2765907742212728e-01 5.9642270555638444e-01 2.4333858806849254e-01 + -8.9604530931155091e-01 5.6636521023623021e-01 2.7645524802520144e-01 + -8.4030416832027144e-01 5.5237727690607707e-01 2.9454498468800000e-01 + -7.7230011179297764e-01 5.5930564266173755e-01 2.9787230442223589e-01 + -7.0430349641900614e-01 5.8652607298319726e-01 2.8871182361822562e-01 + -6.4358561319788099e-01 6.3322549643248283e-01 2.7342181659695608e-01 + -5.9394908892267773e-01 6.9653384432392196e-01 2.6593146052944572e-01 + -5.5650766949286024e-01 7.6534161322922367e-01 2.7880497806041549e-01 + -5.4190923154480031e-01 7.5918606481451445e-01 3.4072693456224573e-01 + id 12759 + loc 3.7473595142364502e-01 5.4712110757827759e-01 411 + blend 0.0000000000000000e+00 + interp 4.3064362230722819e-01:3.3082367166679172e-01:3.5141405759820754e-01:3.5906335354957941e-01:1.1029983880380752e+00:4.3063931587100512e-01:1.8336180514716380e+00:3.2466483031527588e-01:2.2320141526570514e+00:4.0226546628703630e-01:2.9812004646025980e+00:3.3043885758827557e-01:3.4450759037674161e+00:3.9421477012519118e-01:3.9784590834655535e+00 + CVs 20 + 8.4673096376632284e-01 1.0896447644176635e-01 -1.4118563071129378e-01 + 1.4695937262762575e+00 1.0210487621179914e-01 -2.8987167008226200e-01 + 2.0615698780074063e+00 6.6054542892833634e-02 -4.2102441278581837e-01 + 2.6854584729338091e+00 2.7906891083494645e-02 -5.2551154598599770e-01 + 3.3323898070239402e+00 -1.3732455908968655e-02 -5.9885437415805298e-01 + 3.9907288861309129e+00 -6.2899120326444402e-02 -6.4043932020567751e-01 + 4.6466739071851304e+00 -1.3072223753951473e-01 -6.5085112141794266e-01 + 5.2842049303103131e+00 -2.3712791371921771e-01 -6.3134185510922936e-01 + 5.8829674161433543e+00 -4.0420645456907356e-01 -5.8950546099938539e-01 + 6.4175721697216410e+00 -6.4835328790764657e-01 -5.4000288290237042e-01 + 6.8669969879720290e+00 -9.7223046819239967e-01 -4.9192065720821393e-01 + 7.2274794936103666e+00 -1.3589800541582164e+00 -4.4112064981687893e-01 + 7.5121395750354250e+00 -1.7803890508007472e+00 -3.8136746323672299e-01 + 7.7386315884477632e+00 -2.2137015596721143e+00 -3.1326634657683372e-01 + 7.9177098123108971e+00 -2.6510622910930146e+00 -2.3867098289573671e-01 + 8.0546871922277763e+00 -3.0934119462025875e+00 -1.5688210868746538e-01 + 8.1538657079348411e+00 -3.5380792719229808e+00 -7.4315121026212350e-02 + 8.2297033928133025e+00 -3.9704882825254897e+00 -7.6996727387131370e-03 + 8.3629301363642448e+00 -4.3160964676091584e+00 5.3053095820561114e-02 + id 12760 + loc 4.5703992247581482e-01 7.1528673171997070e-01 1081 + blend 0.0000000000000000e+00 + interp 5.8572600249630402e-01:3.1456286843707681e-01:1.2557976460822580e+00:3.7662166475206166e-01:1.9851330350322880e+00:2.9442620436440309e-01:2.8978417387641109e+00:3.9833250944551479e-01:3.3910900622432232e+00:5.8572014523627913e-01:3.9092484387694175e+00 + CVs 20 + 6.9713070002457148e-02 5.5122500354119786e-01 6.0461852983379438e-01 + 1.8428162980205995e-01 9.6082872833460509e-01 9.9077936545607559e-01 + 3.1814506108299012e-01 1.3218580475992761e+00 1.3103290293802878e+00 + 4.6503057490110672e-01 1.6723046499366130e+00 1.6195049136966406e+00 + 6.2770046275983149e-01 2.0056372366057080e+00 1.9024963639502082e+00 + 8.0900766402606350e-01 2.3138133259635794e+00 2.1370602545097483e+00 + 1.0122464755271934e+00 2.5839155907385249e+00 2.2949034589663198e+00 + 1.2414431137743054e+00 2.7907941306966797e+00 2.3449411121179722e+00 + 1.4909808306384060e+00 2.8681122453367420e+00 2.2385166549018334e+00 + 1.6426893995573577e+00 2.6854277361775005e+00 1.9802562501177543e+00 + 1.5986898560590357e+00 2.3858202104673341e+00 1.8076245034156877e+00 + 1.5442482926011827e+00 2.1422625274485227e+00 1.7169529562587129e+00 + 1.5220192952119562e+00 1.8993157602076449e+00 1.6258202339289145e+00 + 1.5193114079322458e+00 1.6210263453199900e+00 1.5289963787350245e+00 + 1.5278093626069957e+00 1.2949550333743169e+00 1.4619395483672517e+00 + 1.5384494530783162e+00 9.2819544376467378e-01 1.5075480536669299e+00 + 1.5444791449481445e+00 5.7588592056969312e-01 1.7215712383332531e+00 + 1.5474084946767090e+00 2.5314915950098649e-01 2.0039145980856725e+00 + 1.5470904678819413e+00 -1.7802241474146274e-01 2.1620127658220571e+00 + id 12761 + loc 9.3516403436660767e-01 6.6027128696441650e-01 264 + blend 0.0000000000000000e+00 + interp 1.8551839975177673e+00:1.0100438753930117e+00:9.9992433237871492e-01:1.8551739975177672e+00:1.0061390099413143e+00:4.7387703483771987e-01:1.0085482765430001e+00:3.4002698630992001e-01:1.4360175674731022e+00:4.2725456895851271e-01:2.0446050844863537e+00:5.0614203072762254e-01:2.8523291946604488e+00:2.4240573120503731e-01:3.0033654408408532e+00 + CVs 20 + -8.3710950403824802e-01 3.6706661127991069e-01 -2.4916543577963707e-01 + -1.4175204768497713e+00 5.3593959688801796e-01 -3.8291127431595512e-01 + -1.9510675202829397e+00 5.6176329096350841e-01 -4.3902994153902725e-01 + -2.5331915840219983e+00 4.9482832619600803e-01 -4.3973959532735679e-01 + -3.1469778491969866e+00 4.1586782291657420e-01 -4.1450374174467014e-01 + -3.7586407463583678e+00 3.8175604439319433e-01 -4.0661530354004438e-01 + -4.3624863464309316e+00 3.9119407273204987e-01 -4.5159018330229095e-01 + -4.9661145706444172e+00 4.2811109627147981e-01 -5.7106486810024326e-01 + -5.5710548615143685e+00 4.9151811963531866e-01 -7.8100651222321316e-01 + -6.1760200794075182e+00 5.8544201367050563e-01 -1.1041439611536248e+00 + -6.7766051744668490e+00 6.8517142273871778e-01 -1.5551495769102717e+00 + -7.3628318765400680e+00 7.2954852878145093e-01 -2.1342033263378326e+00 + -7.9216534031358332e+00 6.3208888234528349e-01 -2.8271973145960625e+00 + -8.3981494338044946e+00 3.0955230812575252e-01 -3.6044438003575396e+00 + -8.7085663107065727e+00 -2.8154486008741664e-01 -4.3983895807595266e+00 + -8.8455208583597607e+00 -1.1383014119295507e+00 -5.0526788644027585e+00 + -9.0098860134879750e+00 -2.1456783682452847e+00 -5.3243372871445178e+00 + -9.3689672901090475e+00 -3.0253421647918080e+00 -5.2015475098919453e+00 + -9.6799917239575102e+00 -3.7872900555970981e+00 -5.1851881702196767e+00 + id 12762 + loc 1.9332330673933029e-02 1.8232432007789612e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0193559794860323e-01:4.0193157859262374e-01:1.1437047717853266e-01:3.9273226467750244e-01:9.9976178646092129e-01:2.6239213721146698e-01:2.0020951321110987e+00:3.7283282954133473e-01:2.8298568861553366e+00:3.6343276754380222e-01:3.6732441663887725e+00 + CVs 20 + -2.4056888708591384e-01 2.8727542399254125e-01 -9.7591977512872172e-02 + -4.7185547363216840e-01 6.0902298996028170e-01 -1.5220226834961370e-01 + -6.9188998297948912e-01 9.5024080866483795e-01 -1.8696408976657963e-01 + -9.2331274048227230e-01 1.2869723884835462e+00 -2.4687224450391754e-01 + -1.1916354905982574e+00 1.5776389500235550e+00 -3.7945954552302097e-01 + -1.4924852708114207e+00 1.7632464389972915e+00 -6.0355870692057056e-01 + -1.7733133091161999e+00 1.7824921099202491e+00 -9.0603565541193909e-01 + -1.9424751502609707e+00 1.6247352490953386e+00 -1.2411724765595418e+00 + -1.9642083076085013e+00 1.3668780650983221e+00 -1.5546431933627711e+00 + -1.8735530437493695e+00 1.0715747823494741e+00 -1.8332626914603294e+00 + -1.6806153189278157e+00 7.4672821530809952e-01 -2.0513695477444882e+00 + -1.3977680968976900e+00 4.0968939374031332e-01 -2.1426602573529587e+00 + -1.1021364106874927e+00 9.8350360194641606e-02 -2.0994111734482455e+00 + -8.6016613597314318e-01 -2.0052446411267200e-01 -2.0601418862795771e+00 + -6.4334936604838300e-01 -5.1656897571209237e-01 -2.1592353848161268e+00 + -4.0973351909139216e-01 -7.9595592550312988e-01 -2.4985299975509534e+00 + -2.2116143593162430e-01 -8.6207409686999092e-01 -3.1493892435684145e+00 + -1.7583972499455147e-01 -7.0532505872805751e-01 -3.7814718755479606e+00 + -6.6261779482547745e-02 -7.4348327839999406e-01 -4.0575696948862925e+00 + id 12763 + loc 8.6698490381240845e-01 2.0928145945072174e-01 413 + blend 0.0000000000000000e+00 + interp 5.0357522108053931e-01:3.7559512565757380e-01:5.3809268193573967e-01:2.7757467103864197e-01:1.0888069485305434e+00:4.1732664440255141e-01:1.9550622151636374e+00:2.7818472667758959e-01:2.3438872692867672e+00:5.0357018532832853e-01:3.0248428370117728e+00:2.8844376635288199e-01:3.9294891979464186e+00 + CVs 20 + -1.0666894836508543e+00 2.0114668809540079e-01 2.8545487737012060e-01 + -1.7337442774501455e+00 2.2317044142194106e-01 5.4960239515155296e-01 + -2.3222212278540044e+00 1.7821440147619480e-01 7.9939259696933895e-01 + -2.9507063458918887e+00 1.1592147588212171e-01 1.0264833170110326e+00 + -3.6063271505449159e+00 2.1393237111034191e-02 1.2142006139288122e+00 + -4.2660456179251316e+00 -1.2103452632087297e-01 1.3647067217764817e+00 + -4.9066402698361165e+00 -3.2042696105204493e-01 1.4774160058471550e+00 + -5.5076809432689631e+00 -5.8243418280441772e-01 1.5507515656083171e+00 + -6.0523010024082886e+00 -9.1154133932398596e-01 1.5836012072384325e+00 + -6.5246081347691733e+00 -1.3088336817865247e+00 1.5797659449363526e+00 + -6.9098195901782393e+00 -1.7705636089904271e+00 1.5514200804073730e+00 + -7.2045787794747689e+00 -2.2938532644572671e+00 1.5106467922130857e+00 + -7.4123347874404972e+00 -2.8708467574829610e+00 1.4593427943906758e+00 + -7.5353537080377198e+00 -3.4790680061222901e+00 1.3956666975576066e+00 + -7.5755348218579046e+00 -4.0882777477870453e+00 1.3238202292722814e+00 + -7.5344138087583650e+00 -4.6702766087408429e+00 1.2467924510368738e+00 + -7.4151309778432610e+00 -5.2017082097011826e+00 1.1615063976308839e+00 + -7.2326993942007922e+00 -5.6744825337021689e+00 1.0748258088084497e+00 + -7.1089533118305868e+00 -6.2186249813003975e+00 1.0015692743851698e+00 + id 12764 + loc 3.3348748087882996e-01 8.1282758712768555e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0155718668327520e-01:4.8870187895293571e-01:2.4928751539779970e-01:3.6278923287577797e-01:1.0009887293148032e+00:3.8926824866138016e-01:1.9668219955135902e+00:3.6409279216132073e-01:2.5047416605538526e+00:5.0155217111140837e-01:2.9924590155226412e+00:3.6594637725419643e-01:3.6828171336880260e+00 + CVs 20 + -1.5480418809483101e-01 2.4070869268915568e-01 1.2790430805738839e-01 + -2.6446446690443171e-01 4.1705105305504619e-01 1.3047894584098735e-01 + -3.8792666632166711e-01 5.6570101570751730e-01 9.9374379421302894e-02 + -5.4733885659983972e-01 6.9698762863828700e-01 6.9126065863752084e-02 + -7.4155595454206169e-01 8.0344507380972485e-01 3.6424264257115091e-02 + -9.6822405129543776e-01 8.7912578860804691e-01 -5.7770615581642648e-04 + -1.2245960945366008e+00 9.1983357270635935e-01 -4.2157811120287936e-02 + -1.5082159661492640e+00 9.2287197509760499e-01 -8.7191236580314690e-02 + -1.8168612067902803e+00 8.8658446288165182e-01 -1.3369665926537166e-01 + -2.1480703935355199e+00 8.1023039276412778e-01 -1.7930390516844880e-01 + -2.4983782783242741e+00 6.9356567046487250e-01 -2.2159144762468647e-01 + -2.8619004308830007e+00 5.3633813843962819e-01 -2.5927438248522655e-01 + -3.2314531675520866e+00 3.4093136332504487e-01 -2.9109710995779503e-01 + -3.6068048391691430e+00 1.2059094268974858e-01 -3.1030989591643143e-01 + -4.0002338425026549e+00 -9.8253318323192951e-02 -3.0175533322216341e-01 + -4.4219982789251198e+00 -2.8801174889264108e-01 -2.4819184191767574e-01 + -4.8635458601758970e+00 -4.3225969616378523e-01 -1.3964037988832417e-01 + -5.3030354267439046e+00 -5.2545464694688448e-01 2.2193635739845202e-02 + -5.6679975311744704e+00 -6.4076603248147601e-01 9.7692221140314672e-02 + id 12765 + loc 3.6465215682983398e-01 4.1411975026130676e-01 377 + blend 0.0000000000000000e+00 + interp 6.9769190412181381e-01:6.9768492720277264e-01:3.4461540106114685e-02:6.3908271926628846e-01:1.2830481002452490e+00:3.6328578303691184e-01:1.8604469945430797e+00:3.4387276493324148e-01:2.3471899663243461e+00:4.0159323912384515e-01:2.9983075732469722e+00:3.7281097256920920e-01:3.8874514742448008e+00 + CVs 20 + -5.8758458495941079e-01 2.7192563477325543e-01 7.6393639475415820e-01 + -1.0140383447603183e+00 4.1580441388420214e-01 1.3380901124031614e+00 + -1.4183154308577282e+00 5.1303970562999912e-01 1.8503426833332659e+00 + -1.8616106839337179e+00 5.8996025653403839e-01 2.3548031569860046e+00 + -2.3424438451511915e+00 6.3716266801906629e-01 2.8502914384825861e+00 + -2.8616750919584697e+00 6.3356534211758087e-01 3.3413314611554874e+00 + -3.4100027534410242e+00 5.5413974347144035e-01 3.8311716811524565e+00 + -3.9659653479819967e+00 3.7922702500177796e-01 4.3093345493947188e+00 + -4.5046978086902110e+00 1.0095653298316543e-01 4.7630286995380473e+00 + -5.0022980601722695e+00 -2.8082906764928239e-01 5.1944743827202542e+00 + -5.4297403928103476e+00 -7.6471303871475715e-01 5.6115809357055850e+00 + -5.7523736612492407e+00 -1.3470084058853660e+00 6.0110717657716730e+00 + -5.9422750610245449e+00 -2.0134768339467302e+00 6.3826403464637176e+00 + -6.0020703884844941e+00 -2.7238962806876255e+00 6.7322899815904442e+00 + -5.9742586858188886e+00 -3.4232152382164731e+00 7.0912240399536550e+00 + -5.9006586430400629e+00 -4.0735445148403260e+00 7.4925458259430568e+00 + -5.7876182933623888e+00 -4.6502835380188206e+00 7.9523971592268374e+00 + -5.6265561279030036e+00 -5.1385623905136519e+00 8.4380262493720508e+00 + -5.4538482006674514e+00 -5.6099040735634151e+00 8.8339167201277569e+00 + id 12766 + loc 2.6821531355381012e-03 1.0253905504941940e-01 417 + blend 0.0000000000000000e+00 + interp 1.9136683427388809e-01:1.9136492060554536e-01:7.3004283272958381e-02:1.1453163919457514e-01:9.9508198075347309e-01:1.7230184646532029e-01:1.7753889128688729e+00:1.0879550486205367e-01:2.4622388473741506e+00:1.8849540911363449e-01:3.5256274626155952e+00 + CVs 20 + -1.6185253824202336e-01 1.4897897388032322e-02 2.7318811873217441e-01 + -2.7622813336691143e-01 -2.2835500131047071e-03 4.7049382666500605e-01 + -3.6426726261986536e-01 -3.6009629412284860e-02 6.3464195319763050e-01 + -4.5980345881535511e-01 -6.5646084369995750e-02 8.0816953513020096e-01 + -5.6249195284956111e-01 -8.9184221155839682e-02 9.8748765288064466e-01 + -6.7086101647998109e-01 -1.0571492074900318e-01 1.1678363359975501e+00 + -7.8331567966957127e-01 -1.1561605993050483e-01 1.3450406256383864e+00 + -8.9858374506649474e-01 -1.2057983144782525e-01 1.5159187116991886e+00 + -1.0154255467133559e+00 -1.2344272286559521e-01 1.6774624324306131e+00 + -1.1319645499896958e+00 -1.2832659103391220e-01 1.8251100573041361e+00 + -1.2462134244980381e+00 -1.4037566442464255e-01 1.9543861501910027e+00 + -1.3584595857685788e+00 -1.6369761831171536e-01 2.0658193008125774e+00 + -1.4735950240182301e+00 -1.9916501828569844e-01 2.1661894158608432e+00 + -1.5985307326938321e+00 -2.4543869237863891e-01 2.2624689038273780e+00 + -1.7358938772057548e+00 -3.0193647035613314e-01 2.3579294080304516e+00 + -1.8836326200550078e+00 -3.6917343200919039e-01 2.4563152525506649e+00 + -2.0382394988998551e+00 -4.4750370531688688e-01 2.5623064109497986e+00 + -2.1971860739401299e+00 -5.3630276469362204e-01 2.6767687482732607e+00 + -2.3802106954782336e+00 -6.0590755968586874e-01 2.8429595867518387e+00 + id 12767 + loc 7.4529516696929932e-01 4.2998066544532776e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3803520175219174e-01:4.3803082140017424e-01:1.0729080506595157e-03:2.5289082388918543e-01:7.8342286986265441e-01:3.2266595172310125e-01:1.6232785222535964e+00:2.6471187061231349e-01:2.3117106091518660e+00:2.6342328929402475e-01:3.1058073901445011e+00 + CVs 20 + -2.5463191515019734e-01 3.0161847135486980e-01 1.5935690489702403e-01 + -4.8384772164762130e-01 5.9503604121410669e-01 3.0570655442628153e-01 + -7.1047903929825651e-01 8.7157031463866608e-01 4.5064947980601711e-01 + -9.4557461378675056e-01 1.1278162446375000e+00 6.0104639770443913e-01 + -1.1869299076468141e+00 1.3665733942192850e+00 7.6312405396669136e-01 + -1.4373868888675849e+00 1.5856529143670872e+00 9.5186123626812202e-01 + -1.7143722425327976e+00 1.7703191372305138e+00 1.1836754319341980e+00 + -2.0401226382449256e+00 1.9059718514206321e+00 1.4541430227541277e+00 + -2.4247524511782084e+00 1.9887349631479279e+00 1.7348500202937234e+00 + -2.8669981192663339e+00 2.0201321136251282e+00 1.9922556609714919e+00 + -3.3639901599432203e+00 1.9962862499008351e+00 2.2084392025685808e+00 + -3.9178216820300933e+00 1.8912883670485212e+00 2.3965079796223172e+00 + -4.5081590924087038e+00 1.6344022316188018e+00 2.5869116786349782e+00 + -5.0347511006954386e+00 1.1603970136272668e+00 2.7641829572394436e+00 + -5.3931655996004944e+00 5.1366226268540294e-01 2.8676153149103714e+00 + -5.5368335252167293e+00 -3.1487804679713438e-01 2.8958461916571823e+00 + -5.1186016196276096e+00 -1.5494854957800652e+00 2.8983677887367585e+00 + -3.4814727094759723e+00 -2.5925746262991556e+00 2.8865262945948755e+00 + -3.1743692688472818e+00 -2.8404784537075001e+00 2.7988677386878793e+00 + id 12768 + loc 9.1580486297607422e-01 2.0928145945072174e-01 406 + blend 0.0000000000000000e+00 + interp 4.7683798432588542e-01:4.7683321594604217e-01:8.2852606087615255e-01:2.1953742752748426e-01:1.1630839978569389e+00:2.9838179506737322e-01:2.3219993404482691e+00:2.3475250302062722e-01:3.0725012653528885e+00:2.8530116984037690e-01:3.9659013367732801e+00 + CVs 20 + -1.5616092719846025e-01 1.6736238261987890e-01 2.9974774705891827e-02 + -2.5693709717156782e-01 2.7157116680848981e-01 3.5921719419722456e-02 + -3.3820771280103279e-01 3.4195758742634363e-01 3.4507848794260526e-02 + -4.2414157207766467e-01 3.9632992004942008e-01 3.6368397141518169e-02 + -5.1206131574878555e-01 4.3416528401175836e-01 3.8943437539376097e-02 + -5.9959521078824862e-01 4.5602899552221188e-01 3.9752689430382265e-02 + -6.8556692164886401e-01 4.6324943121784989e-01 3.7098494322323705e-02 + -7.6904581053608945e-01 4.5744693038051942e-01 2.9752521554076095e-02 + -8.4648817244838137e-01 4.4148369548252187e-01 1.4353580874287619e-02 + -9.1402265115521486e-01 4.2040943957722299e-01 -1.5668037278823155e-02 + -9.7506842245309455e-01 3.9787280676622394e-01 -6.3811753986408981e-02 + -1.0381339787969122e+00 3.7189017197751967e-01 -1.2446218066727605e-01 + -1.1060958229692719e+00 3.3955495629169330e-01 -1.9083635183185443e-01 + -1.1776507593309682e+00 3.0237247609481882e-01 -2.6437419055429850e-01 + -1.2544150747623695e+00 2.6275247291023685e-01 -3.4996973676813681e-01 + -1.3379822417995362e+00 2.2160549366134713e-01 -4.4629696085146681e-01 + -1.4228375265877282e+00 1.8096440077562020e-01 -5.4611152029298116e-01 + -1.5009661395428435e+00 1.4049442430252107e-01 -6.4264167911240888e-01 + -1.5894600293868124e+00 5.3010908669346324e-02 -7.2813313831293391e-01 + id 12769 + loc 8.2378637790679932e-01 9.2688965797424316e-01 409 + blend 0.0000000000000000e+00 + interp 5.2973292308968090e-01:4.3064141149950375e-01:2.3242532813443795e-01:3.7362830246421092e-01:9.5052323326754828e-01:3.1580042128350228e-01:1.3324831302667688e+00:4.0647108069361698e-01:1.8822093777078026e+00:5.2972762576045007e-01:2.2095472530778375e+00:3.8026239746209478e-01:2.9169834481278896e+00:4.5754105752434704e-01:3.3260672628138499e+00:4.3966318924895165e-01:3.9506582859610782e+00 + CVs 20 + 5.6772405925815228e-01 7.6279715459848019e-02 -2.5845333430923267e-01 + 1.0307905746164943e+00 7.2484941340896225e-02 -4.8261021447383001e-01 + 1.4670265832059408e+00 3.7721488477846843e-02 -6.7599981184045144e-01 + 1.8949043090426552e+00 -1.6835153379973877e-02 -8.4120546661468043e-01 + 2.3022698861605422e+00 -9.5959796194616809e-02 -9.8033528161907801e-01 + 2.6787604715898268e+00 -1.9958241787878617e-01 -1.0961651275807001e+00 + 3.0124938112272934e+00 -3.2510797526132862e-01 -1.1916856508002094e+00 + 3.2886597056990290e+00 -4.6712853571804480e-01 -1.2693009192683318e+00 + 3.4941932547167260e+00 -6.1427586592070371e-01 -1.3313950151040854e+00 + 3.6231842207115745e+00 -7.4806332347541971e-01 -1.3797761463574045e+00 + 3.6841198006454974e+00 -8.4732043039144544e-01 -1.4157501094494567e+00 + 3.7079197958182544e+00 -9.0364913453752571e-01 -1.4457961622565416e+00 + 3.7334466841984222e+00 -9.3157146611591468e-01 -1.4819985430473288e+00 + 3.7825860456604135e+00 -9.5124759391440739e-01 -1.5318401605785390e+00 + 3.8612096253402375e+00 -9.7538201962220628e-01 -1.5974965707370417e+00 + 3.9675519736983196e+00 -1.0099783140185850e+00 -1.6833705039372053e+00 + 4.0968083457109987e+00 -1.0635518969890398e+00 -1.7969910010457477e+00 + 4.2388850155736861e+00 -1.1576432872345437e+00 -1.9376136385994780e+00 + 4.3355104268608846e+00 -1.4596805968242696e+00 -2.1049300942886413e+00 + id 12770 + loc 7.4051278829574585e-01 8.7028247117996216e-01 403 + blend 0.0000000000000000e+00 + interp 4.3805037548996184e-01:4.0197937243726728e-01:1.9488745567413290e-01:3.3817484748813326e-01:8.9683906414130266e-01:3.7872513331411295e-01:1.2534511304683065e+00:3.2774497994680440e-01:2.0008502393512435e+00:2.9389648285130349e-01:2.9323859439886690e+00:3.7642189371043921e-01:3.2311160764971412e+00:4.3804599498620694e-01:3.9237853942212038e+00 + CVs 20 + -1.1269686115549854e-01 -1.8140450786550993e-02 3.2647077604077770e-03 + -1.9968974582672538e-01 -1.3393779390033375e-02 2.5333807072731931e-03 + -2.7655775950599959e-01 3.2206617424221928e-03 -1.4320673902380211e-03 + -3.5401651843946702e-01 2.2871435942288687e-02 -8.4116034085160822e-03 + -4.3251345666746510e-01 4.7206917835392492e-02 -1.9184539163170380e-02 + -5.1317049307657403e-01 7.8201769077415662e-02 -3.4664476998180128e-02 + -5.9816897495571375e-01 1.1805625461660557e-01 -5.5047808721579196e-02 + -6.9077228140693703e-01 1.6860289343678658e-01 -8.0158944193488763e-02 + -7.9468930199198096e-01 2.3077392935722302e-01 -1.0817817896628801e-01 + -9.1262933338812469e-01 3.0472816295090666e-01 -1.3405183305159135e-01 + -1.0454936528637091e+00 3.9140975879136697e-01 -1.5035898869188793e-01 + -1.1917849767745143e+00 4.9324871025870837e-01 -1.4697009501123923e-01 + -1.3458444489639412e+00 6.0594128295983607e-01 -1.1532765836975624e-01 + -1.4940791065788490e+00 7.0603562845683299e-01 -6.2026616543611704e-02 + -1.6195513559683548e+00 7.6542720430517197e-01 -1.0842536935820296e-02 + -1.7164264845100330e+00 7.8535083816937379e-01 2.7722492474929930e-02 + -1.7840355804162147e+00 7.9417327059297238e-01 6.7242896917196052e-02 + -1.8152859854515735e+00 8.1954053374438240e-01 1.2033079813714744e-01 + -1.6990700108634067e+00 9.8370634638456345e-01 3.0084106863454152e-01 + id 12771 + loc 4.2412492632865906e-01 2.8749689459800720e-01 395 + blend 0.0000000000000000e+00 + interp 5.5172980833303220e-01:4.8408385012414878e-01:5.3227048769743934e-04:5.5172429103494891e-01:3.6946403655236426e-01:2.7334149056071444e-01:1.0345250470496836e+00:3.6666921556172077e-01:1.8418027655337368e+00:4.5835959296724671e-01:2.2705493521858453e+00:3.3921941278563111e-01:2.9116614100538278e+00:4.2339056561628491e-01:3.1910025334667971e+00:5.1971317889256941e-01:3.7598412179455556e+00 + CVs 20 + -3.4413969003986045e-01 1.4625000105942496e-01 -2.0212075348980796e-01 + -6.3148086240860546e-01 2.5617356508275035e-01 -3.8008881452868165e-01 + -9.0305203295188918e-01 3.4752695095339386e-01 -5.5884601822541824e-01 + -1.1760840183046370e+00 4.2880411486951941e-01 -7.5032717292660633e-01 + -1.4461990825844062e+00 4.9838467375635687e-01 -9.5592215075214637e-01 + -1.7089298232946215e+00 5.5381393742492602e-01 -1.1744724118632028e+00 + -1.9631043857632640e+00 5.9413329373732393e-01 -1.4027384768745825e+00 + -2.2091117615758638e+00 6.1930478218334339e-01 -1.6353738746629671e+00 + -2.4418476952807953e+00 6.2696984098375963e-01 -1.8668794814925722e+00 + -2.6518107689265205e+00 6.1269175396786246e-01 -2.0910524163809128e+00 + -2.8391010733379871e+00 5.7122850863943930e-01 -2.3020585607814712e+00 + -3.0181669318779401e+00 4.9444562543036996e-01 -2.4972811014454823e+00 + -3.2001388556468751e+00 3.7807495189807261e-01 -2.6758301976218855e+00 + -3.3823915987167945e+00 2.3017823240285207e-01 -2.8386599699633726e+00 + -3.5593384367129834e+00 6.7561437377658518e-02 -2.9878371410422657e+00 + -3.7321858230303899e+00 -9.1663327739680334e-02 -3.1252876848715125e+00 + -3.9059263202207233e+00 -2.3864906923754781e-01 -3.2540345522812957e+00 + -4.0809057484787621e+00 -3.8447138121035529e-01 -3.3753654260305312e+00 + -4.2233824631889778e+00 -5.8777237507928914e-01 -3.4681233350575011e+00 + id 12772 + loc 3.5402107238769531e-01 8.4606051445007324e-01 1078 + blend 0.0000000000000000e+00 + interp 5.0086802250973095e-01:4.4783725445312339e-01:5.7245405036584507e-01:3.3718527644624807e-01:9.9234002511928388e-01:3.7822640912118738e-01:1.3721254737803292e+00:3.1785775739064326e-01:2.0236655031727504e+00:5.0086301382950582e-01:2.5278070021242733e+00:3.7382609410970130e-01:3.0949185526291139e+00:4.1153744454699415e-01:3.9953492751821011e+00 + CVs 20 + -2.3703839672661969e-02 1.5790079552845343e-01 -1.6050917953741931e-02 + -2.4679859569794120e-02 3.1787851634806175e-01 -4.7125488941500621e-02 + -2.6997504344585511e-02 4.7434438812988100e-01 -9.3206381090696511e-02 + -4.4025822746274833e-02 6.2532601533535925e-01 -1.5645370389105462e-01 + -7.5532924049614966e-02 7.6463796430325859e-01 -2.3843455589745172e-01 + -1.2064436538167092e-01 8.8485641562017781e-01 -3.3801835378635942e-01 + -1.7818427156302202e-01 9.7887817957641921e-01 -4.5166500422027994e-01 + -2.4645436330891718e-01 1.0422789258193050e+00 -5.7465484566289660e-01 + -3.2289314350378057e-01 1.0738429679030070e+00 -7.0191875989560915e-01 + -4.0375839968754124e-01 1.0739141870557132e+00 -8.2854085629471275e-01 + -4.8425909041183529e-01 1.0435650042292093e+00 -9.5161631031866267e-01 + -5.5942580012530074e-01 9.8510970569367950e-01 -1.0713704108242854e+00 + -6.2470363772775606e-01 9.0205812494178539e-01 -1.1898314574496569e+00 + -6.7733320347457437e-01 7.9914607623293699e-01 -1.3111904012791600e+00 + -7.1753397091596971e-01 6.8188940042134449e-01 -1.4419813729911495e+00 + -7.4571197142955670e-01 5.5596284632375870e-01 -1.5873625767980974e+00 + -7.6034149711055588e-01 4.2771025053987022e-01 -1.7498093341383545e+00 + -7.6013083415531213e-01 3.0467625443080160e-01 -1.9296734848720769e+00 + -7.7892881412335802e-01 1.8749767852446508e-01 -2.1563155265450891e+00 + id 12773 + loc 5.2700841426849365e-01 1.2786197662353516e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1154715624882093e-01:3.4679064612321175e-01:4.5564850418098568e-01:3.5150060999254445e-01:1.0567129271079021e+00:2.7876932718530406e-01:2.3191561159758267e+00:3.5438136259015424e-01:2.9512539275986791e+00:4.1154304077725845e-01:3.8076271757511622e+00 + CVs 20 + -2.5303718040849127e-01 1.6995457402914760e-01 2.6291171506126620e-01 + -4.7327658887549084e-01 3.1606406174270629e-01 5.1599270935770336e-01 + -6.8236230196577707e-01 4.3413890811540234e-01 7.6924371368014843e-01 + -8.8749961954851009e-01 5.2472792150553182e-01 1.0255112188867930e+00 + -1.0779902588327532e+00 5.9066945193721043e-01 1.2707068548386029e+00 + -1.2430962309115343e+00 6.3548938339291183e-01 1.4825772657679550e+00 + -1.3784965558681057e+00 6.6932283512063639e-01 1.6396709662647015e+00 + -1.4872555318622886e+00 7.1486129528560027e-01 1.7254254790359573e+00 + -1.5825131741622027e+00 8.0684498753347067e-01 1.7374283364593825e+00 + -1.6792625445229794e+00 9.6650784282404689e-01 1.7203869011057689e+00 + -1.7656448728145382e+00 1.1562796055805000e+00 1.7523496366847851e+00 + -1.8022424343691270e+00 1.2985709750808752e+00 1.8677909914003348e+00 + -1.7614424726927382e+00 1.3465138743101552e+00 2.0482011426420463e+00 + -1.6459483211008223e+00 1.2904424738653444e+00 2.2719608960446815e+00 + -1.4665768960376004e+00 1.1347397285436736e+00 2.5341850303655344e+00 + -1.2085519294806002e+00 8.9236751982100282e-01 2.8521628563767338e+00 + -8.5694353580282323e-01 5.4607114073210616e-01 3.2722686680012001e+00 + -6.0565263772671774e-01 1.1643273433400181e-01 3.7808047200159187e+00 + -9.1560697822751602e-01 7.5852173012860402e-02 3.9133140856218751e+00 + id 12774 + loc 8.0555671453475952e-01 6.7745864391326904e-01 393 + blend 0.0000000000000000e+00 + interp 4.6613882509611454e-01:2.6397005367269244e-01:2.6018057461644173e-01:3.8990703984475761e-01:1.0159854635165180e+00:3.1476216589426131e-01:1.9760647133975346e+00:4.6613416370786359e-01:2.3270561960437739e+00:4.1383798393381965e-01:3.0064718437113260e+00:3.9193664220849134e-01:3.4607534609368238e+00:4.1915024553885000e-01:3.9705988930735634e+00 + CVs 20 + -1.7403417564821810e-01 1.9744852052245421e-01 -9.2459579539377820e-02 + -3.5186471836511668e-01 4.2097361088606644e-01 -2.1848978203523334e-01 + -5.3156689153532288e-01 6.6693295357327120e-01 -3.4576846022066332e-01 + -7.1328482434497342e-01 9.2859057488063879e-01 -4.5809432526303651e-01 + -9.0055227846508845e-01 1.1974265793254841e+00 -5.5725055611652929e-01 + -1.0952502867420360e+00 1.4599569581650533e+00 -6.5138162328044225e-01 + -1.2968944972296104e+00 1.7028065410298798e+00 -7.5181093727461568e-01 + -1.5053376688676363e+00 1.9153708483714600e+00 -8.6534324089153647e-01 + -1.7192103210460230e+00 2.0852207683858519e+00 -9.9206066172840401e-01 + -1.9263740945800978e+00 2.1890353287065203e+00 -1.1325926195779452e+00 + -2.0956865692246542e+00 2.1939347954574675e+00 -1.2832697452521253e+00 + -2.1931813194357574e+00 2.0910781158914484e+00 -1.4133004497548414e+00 + -2.2259927925717147e+00 1.9273835329600399e+00 -1.4891498055922270e+00 + -2.2395977453895766e+00 1.7506737852871774e+00 -1.5353189471407505e+00 + -2.2643085220912047e+00 1.5601613481505163e+00 -1.5956892021247779e+00 + -2.3143219934049188e+00 1.3497322172076909e+00 -1.6781484845805874e+00 + -2.4212099763427970e+00 1.1347891454361956e+00 -1.7722954402569653e+00 + -2.6039595172408729e+00 9.5121955684356785e-01 -1.8584290530852579e+00 + -2.7274642698633276e+00 7.7333512391785431e-01 -1.9508655110979745e+00 + id 12775 + loc 7.0789247751235962e-01 1.3126380741596222e-01 413 + blend 0.0000000000000000e+00 + interp 3.0871904011452550e-01:2.8082611190358198e-01:9.9983878744920085e-01:2.9529408878019431e-01:2.0530128792437803e+00:2.9437814101590282e-01:3.0021950266099187e+00:3.0871595292412435e-01:3.9648801730548477e+00 + CVs 20 + -1.1444992269318741e+00 2.7591722945188568e-01 1.5743952766232089e-01 + -1.9404135218213110e+00 3.7573691468392717e-01 2.6289926909872363e-01 + -2.6604479367440352e+00 4.1371780400770497e-01 3.4539658560041464e-01 + -3.4073052118712859e+00 4.2033620759202045e-01 4.1896505140216933e-01 + -4.1584317958771280e+00 3.7761186067262453e-01 4.8490009419212232e-01 + -4.8877142635973279e+00 2.7053048011410397e-01 5.4577325852249370e-01 + -5.5687214222408201e+00 8.8554663191340532e-02 6.0099957299057949e-01 + -6.1767126181179846e+00 -1.7256512656047607e-01 6.4385679041088650e-01 + -6.6893406104420272e+00 -5.0545479808623073e-01 6.6627698715914330e-01 + -7.0895946618830727e+00 -8.8783550069136430e-01 6.6278977164531472e-01 + -7.3745843608343131e+00 -1.2870992267574943e+00 6.2904958670815558e-01 + -7.5604947401785303e+00 -1.6744387897253361e+00 5.6372389339488582e-01 + -7.6713190392785151e+00 -2.0306246405326553e+00 4.7406119307926436e-01 + -7.7312731330126239e+00 -2.3430894412835781e+00 3.7289789411447405e-01 + -7.7663445208903328e+00 -2.6099305557175723e+00 2.6210779086773456e-01 + -7.7949379365084290e+00 -2.8371574861902609e+00 1.4704609295523141e-01 + -7.8178944228466616e+00 -3.0375426774512668e+00 3.2200806942485782e-02 + -7.8057519414487029e+00 -3.2357205351913318e+00 -9.4429194681069861e-02 + -7.6202817012362978e+00 -3.4909456434571062e+00 -2.2128203149816478e-01 + id 12776 + loc 3.7596625089645386e-01 9.5794653892517090e-01 417 + blend 0.0000000000000000e+00 + interp 3.5482651821015998e-01:3.4950250400991451e-01:3.7049682196069300e-02:3.2723154587781006e-01:9.0565239035898326e-01:2.4853333160348098e-01:1.9621437009105236e+00:3.5482296994497792e-01:2.9401352021409028e+00 + CVs 20 + -1.8180997993893222e-02 2.3090206960403542e-01 -2.4908806209778500e-01 + 2.8024746130021760e-03 3.8644012108980308e-01 -3.9333936266052466e-01 + 3.1076119260125379e-02 5.1278249554955357e-01 -5.1094666818522771e-01 + 5.6173632425121245e-02 6.3536771178128548e-01 -6.3514311200132945e-01 + 7.9925243681300023e-02 7.5493942347166088e-01 -7.6607770351708571e-01 + 1.0390890451059087e-01 8.7271502447947014e-01 -9.0403108029500556e-01 + 1.2957098180812726e-01 9.8971304599697763e-01 -1.0485648537091925e+00 + 1.5832339868965173e-01 1.1067003618687656e+00 -1.1982267627308512e+00 + 1.9108712250089255e-01 1.2249524004089640e+00 -1.3544389156085768e+00 + 2.2762811038838821e-01 1.3452290857728069e+00 -1.5255960512458073e+00 + 2.6584859275623085e-01 1.4648001322424382e+00 -1.7191130530589260e+00 + 3.0219141912712977e-01 1.5791356443589066e+00 -1.9298450706807644e+00 + 3.3439308407964463e-01 1.6860784425131152e+00 -2.1478645965786165e+00 + 3.6265402471693897e-01 1.7837595271869875e+00 -2.3725205388824691e+00 + 3.8726609384496191e-01 1.8682373893393744e+00 -2.6086775655994225e+00 + 4.0478659428220531e-01 1.9370020263844252e+00 -2.8546148971774361e+00 + 4.0928184614867169e-01 1.9913377728884263e+00 -3.1004796020481771e+00 + 3.9941351594340524e-01 2.0339755636191508e+00 -3.3304506704911967e+00 + 3.9970973082153682e-01 2.0633718911201155e+00 -3.4992384016000271e+00 + id 12777 + loc 2.1351464092731476e-01 8.6032235622406006e-01 264 + blend 0.0000000000000000e+00 + interp 5.3862254584983560e-01:5.3861715962437717e-01:1.0144623242113004e+00:2.4535800938272462e-01:1.8079219800085429e+00:3.3849603042092247e-01:2.7708061766471497e+00:3.9612553646137727e-01:3.1283609336211149e+00:3.7674490834546714e-01:3.9999884339584750e+00 + CVs 20 + -7.5299648037789901e-01 3.6577379635088592e-01 -9.3353917834536226e-02 + -1.3128003584608707e+00 5.4853977462530923e-01 -9.1852133199296526e-02 + -1.8299853122052068e+00 5.9038081629123407e-01 9.5085917132764486e-04 + -2.3833722520016378e+00 5.6104630608096340e-01 1.7826226376505272e-01 + -2.9700707585745785e+00 5.5368654667692341e-01 4.1204655590607131e-01 + -3.5901830760122335e+00 6.2736774142032392e-01 6.4715251634064952e-01 + -4.2455753096321232e+00 7.8400053534340663e-01 8.0687515313025937e-01 + -4.9042821769525453e+00 1.0004155312984770e+00 8.2821180970796360e-01 + -5.5120619569070843e+00 1.2523560691568860e+00 6.8769720508960419e-01 + -6.0307470840433171e+00 1.5199555696385305e+00 3.8706465090000863e-01 + -6.4591861380596436e+00 1.7846706247278254e+00 -6.2005805269263803e-02 + -6.8204912856422988e+00 2.0335976195142056e+00 -6.4565045227138584e-01 + -7.1268788326487531e+00 2.2391252678638276e+00 -1.3525498183884483e+00 + -7.3632016181676505e+00 2.3416968164044150e+00 -2.1527189425307469e+00 + -7.4981905137058229e+00 2.2909503939414479e+00 -3.0303852969471112e+00 + -7.4323728690794697e+00 1.9647172224948353e+00 -4.0397491967170316e+00 + -7.1177052604915572e+00 1.1008199839450321e+00 -5.1009051300225048e+00 + -6.8655493428623160e+00 -1.7919929286237002e-01 -5.7572748420832900e+00 + -6.9070893848812043e+00 -7.5645829824691280e-01 -5.8561134206369143e+00 + id 12778 + loc 7.3789134621620178e-03 5.5766904354095459e-01 1080 + blend 0.0000000000000000e+00 + interp 2.6851497421700405e+00:3.7665946894305669e-01:1.7648790338708906e+00:3.7550240795540368e-01:2.2964550793988119e+00:3.9606668140624979e-01:2.9885610331232728e+00:3.4274340285797605e-01:3.4760614239441043e+00:6.3466207548264331e-01:3.6295557275558874e+00:9.6780224792712444e-01:3.6757149596569203e+00:2.6851397421700405e+00:3.8007898604066632e+00 + CVs 20 + -1.7669583145858045e-01 4.7038643884532416e-01 3.2130681616933854e-01 + -3.1602011660365092e-01 8.3854998443579187e-01 4.1694497127850894e-01 + -5.0377948959482355e-01 1.1610473677268303e+00 4.9261575600515894e-01 + -7.6203366402282813e-01 1.4501239993993857e+00 5.8346209359116763e-01 + -1.0854238633436384e+00 1.6916356870563611e+00 6.8019845016161384e-01 + -1.4631249480612911e+00 1.8742904687281703e+00 7.7707260301108028e-01 + -1.8798233809146498e+00 1.9912373888172556e+00 8.7227758294234969e-01 + -2.3183596381939537e+00 2.0403500757009865e+00 9.6747055699236495e-01 + -2.7618582967460070e+00 2.0234764862365995e+00 1.0654409590197744e+00 + -3.1952707482923448e+00 1.9452369027868275e+00 1.1682036952097152e+00 + -3.6070165516464971e+00 1.8110136340497092e+00 1.2754717879569619e+00 + -3.9888378776879820e+00 1.6263501849646986e+00 1.3837765373063236e+00 + -4.3313657475132592e+00 1.4028775757024077e+00 1.4898488899909323e+00 + -4.6214449077256807e+00 1.1672864743867915e+00 1.5958465531564632e+00 + -4.8521173058674494e+00 9.4965117046231751e-01 1.7089228332483180e+00 + -5.0312577499410382e+00 7.5973241775525402e-01 1.8345380204765274e+00 + -5.1760588123613456e+00 5.9593076519415755e-01 1.9678324743201738e+00 + -5.3007375996022956e+00 4.5892112391292794e-01 2.1007861709125968e+00 + -5.4637040590045576e+00 3.1231764894663960e-01 2.2176788431611691e+00 + id 12779 + loc 5.9877300262451172e-01 6.6370725631713867e-01 377 + blend 0.0000000000000000e+00 + interp 4.1938548653247260e-01:4.0532915643811568e-01:1.9076409016866136e-02:2.6151492056141845e-01:1.0029271966172544e+00:4.0896641307062431e-01:1.4481325631562889e+00:4.1938129267760726e-01:2.1080724705087217e+00:3.8294037248474772e-01:2.9309897091992929e+00:3.8235524201972765e-01:3.4585007330513897e+00 + CVs 20 + -6.9336265529343888e-01 2.0561121905184754e-01 -5.3172283289152200e-01 + -1.2211444817938415e+00 3.0418204799329468e-01 -8.4490876101524037e-01 + -1.7221199927100230e+00 3.7874274963514132e-01 -1.1125244286849787e+00 + -2.2396652153733769e+00 4.6541471604671919e-01 -1.4075328395370150e+00 + -2.7615274105296752e+00 5.5813809512447876e-01 -1.7450012928993739e+00 + -3.2799052232045658e+00 6.4361444954870239e-01 -2.1342988382428025e+00 + -3.7985835416027007e+00 6.9787879700464095e-01 -2.5786051030127983e+00 + -4.3138061840976452e+00 6.9617327523043993e-01 -3.0826644797253655e+00 + -4.8134216883075469e+00 6.1002053669010881e-01 -3.6488958645068013e+00 + -5.2869613291628541e+00 4.1133429715673464e-01 -4.2602222854106993e+00 + -5.7368776538669684e+00 7.4295785922317670e-02 -4.8764217407138286e+00 + -6.1615369097718791e+00 -4.2189225307829137e-01 -5.4372205099672222e+00 + -6.5377296599014585e+00 -1.0677244137055668e+00 -5.8707368694132658e+00 + -6.8454044200988395e+00 -1.7892276974345593e+00 -6.1295007150246814e+00 + -7.1062161412091287e+00 -2.4878363055031949e+00 -6.2344910140085563e+00 + -7.3574834108682312e+00 -3.1071958623510398e+00 -6.2433745062606949e+00 + -7.6214358498365833e+00 -3.6280461935222732e+00 -6.1949059084942757e+00 + -7.9241112788874748e+00 -4.0552771816462050e+00 -6.0983492295475301e+00 + -8.2726451331041204e+00 -4.4588528886431407e+00 -5.9675421330769574e+00 + id 12780 + loc 5.4089170694351196e-01 8.3682030439376831e-01 411 + blend 0.0000000000000000e+00 + interp 4.3840079941789334e-01:3.8714544833928821e-01:1.3310672060063988e-01:3.1472881062432506e-01:8.7903755645565818e-01:3.6177605619047737e-01:1.8412598265288787e+00:4.1542482059829350e-01:2.1346521559272009e+00:3.1088131337689839e-01:2.8778891240566287e+00:4.3839641540989915e-01:3.1736569610641427e+00:3.5942877235797421e-01:3.8421547420304591e+00 + CVs 20 + 9.5491383694484022e-01 1.6376564604180688e-01 -1.7440136713426138e-01 + 1.6274921290583435e+00 1.7400942564294505e-01 -3.3085183417935943e-01 + 2.2262385645935683e+00 1.1289716669129446e-01 -4.6340010114923280e-01 + 2.8330717923659092e+00 5.8827442857121159e-03 -5.7125877986676099e-01 + 3.4291529093998356e+00 -1.5525940087207557e-01 -6.4802119413314896e-01 + 3.9958970557797899e+00 -3.7013586118284292e-01 -6.9130986306120135e-01 + 4.5171959153512296e+00 -6.3080779885739302e-01 -7.0092705362371377e-01 + 4.9790370647004805e+00 -9.2502483696745696e-01 -6.7635648318566433e-01 + 5.3705034355773931e+00 -1.2380250069239325e+00 -6.1786097204614365e-01 + 5.6856714677440650e+00 -1.5530658069012930e+00 -5.2923252632922746e-01 + 5.9280723794998416e+00 -1.8544944792719831e+00 -4.1667078551893022e-01 + 6.1124547139550307e+00 -2.1306648348894268e+00 -2.8342846180048897e-01 + 6.2619847330563880e+00 -2.3757778131878569e+00 -1.2866599738304854e-01 + 6.3969383880265456e+00 -2.5864430634917825e+00 4.6370858432422946e-02 + 6.5319416282420679e+00 -2.7629595543824630e+00 2.3591396361688011e-01 + 6.6760011198893485e+00 -2.9086141859048795e+00 4.3116640220308095e-01 + 6.8343759511738833e+00 -3.0297487845571736e+00 6.2163674384604506e-01 + 7.0071073823251746e+00 -3.1508467478462019e+00 8.0117306247488218e-01 + 7.1204501451664441e+00 -3.3661151553025324e+00 9.6486595134126196e-01 + id 12781 + loc 1.5156152844429016e-01 5.0319701433181763e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7756991946006822e-01:4.7756514376087361e-01:4.3916169433942864e-01:3.6890163382492008e-01:1.0385577378462103e+00:4.0303550146392553e-01:1.6867826164394844e+00:2.6894423470754791e-01:2.0089223951643120e+00:2.5405134873227986e-01:3.0362203698476393e+00:3.3595856374566679e-01:3.9949074793852923e+00 + CVs 20 + 1.5152903535616397e-01 2.6017978098754341e-01 -2.4081966319797016e-01 + 3.4376234022331009e-01 4.9656415775251939e-01 -4.8003795960215173e-01 + 5.5758794158855696e-01 7.2027058223192952e-01 -7.0361306297548343e-01 + 7.8254658361194163e-01 9.3074275996118749e-01 -9.1575155194062441e-01 + 1.0112369104947936e+00 1.1401141530730525e+00 -1.1356528776500967e+00 + 1.2261932104340074e+00 1.3559383961610185e+00 -1.3816850154293607e+00 + 1.4042520013417596e+00 1.5594549805847993e+00 -1.6587820000688209e+00 + 1.5333847072579068e+00 1.7093760782002336e+00 -1.9538612194670999e+00 + 1.6167421620734612e+00 1.7720939169301491e+00 -2.2496025411617668e+00 + 1.6664618550585630e+00 1.7487156670430857e+00 -2.5363219413573184e+00 + 1.6986551427106706e+00 1.6716582068278771e+00 -2.8149111519671544e+00 + 1.7241058957501705e+00 1.5752353273191204e+00 -3.0905296866147824e+00 + 1.7500225613347720e+00 1.4889258865934261e+00 -3.3573071243267072e+00 + 1.7824068596183329e+00 1.4447560795283836e+00 -3.5958687182015479e+00 + 1.8203828317166604e+00 1.4827481430964813e+00 -3.7712326128284044e+00 + 1.8301872445907461e+00 1.6750854518657956e+00 -3.8068250338723288e+00 + 1.6733484572476636e+00 2.0405102222909481e+00 -3.6551950520941383e+00 + 1.4283244547103318e+00 2.2976007000409515e+00 -3.5686669341881734e+00 + 1.7352567742632745e+00 2.2263378991909812e+00 -3.8207844573657161e+00 + id 12782 + loc 5.4014933109283447e-01 5.7315510511398315e-01 1076 + blend 0.0000000000000000e+00 + interp 4.3512544852855145e-01:3.5786088499598478e-01:5.7085053166464794e-01:2.5018760884278413e-01:1.1632529017514210e+00:4.3512109727406617e-01:1.9846117593901931e+00:2.6278374548231048e-01:2.5496022118701052e+00:2.4071959724731401e-01:3.5445832037334011e+00 + CVs 20 + 1.5833976149526677e-01 2.9686825753760793e-01 -1.5931743108760726e-01 + 3.2709890144517151e-01 5.8543880670355308e-01 -3.0941632361630500e-01 + 4.8039839843517967e-01 8.5575436217659329e-01 -4.6820438699771372e-01 + 6.0760294528148917e-01 1.0994489457341086e+00 -6.4163799139337852e-01 + 7.0840118402741847e-01 1.3100414585356719e+00 -8.2832958333849183e-01 + 7.8659546053785634e-01 1.4844303175594507e+00 -1.0276801879861781e+00 + 8.4910308540233215e-01 1.6213971938799827e+00 -1.2416857102138246e+00 + 9.0002229655232824e-01 1.7191427141165039e+00 -1.4684170739263558e+00 + 9.3819367039587487e-01 1.7786383873031451e+00 -1.6988309831785289e+00 + 9.6137196823231763e-01 1.8050656258284361e+00 -1.9235815781579331e+00 + 9.7086650967313393e-01 1.8092121141139854e+00 -2.1335533530470228e+00 + 9.7419070416376530e-01 1.8079073084861252e+00 -2.3199022620715972e+00 + 9.8433729534456105e-01 1.8126191953181641e+00 -2.4777173750784831e+00 + 1.0258446191838748e+00 1.8168971276824735e+00 -2.5925795923214037e+00 + 1.1345908687468076e+00 1.8066401514120827e+00 -2.6501875457137638e+00 + 1.3263142487274113e+00 1.7543829648646287e+00 -2.6748715958215845e+00 + 1.5796189444275179e+00 1.6255035121238004e+00 -2.7155283942633197e+00 + 1.7759637323191189e+00 1.4185976903040434e+00 -2.8158013279741794e+00 + 1.6077591476632564e+00 1.3039048947460088e+00 -2.9378622317842980e+00 + id 12783 + loc 2.3041105270385742e-01 7.6298779249191284e-01 417 + blend 0.0000000000000000e+00 + interp 3.6439606960465321e-01:3.1397385601623490e-01:1.5997953919508257e-01:3.6439242564395719e-01:1.0082715989303204e+00:3.3614365304174210e-01:2.0679985613648197e+00:3.3546797017500457e-01:2.9475062903882252e+00 + CVs 20 + -6.0306492012437429e-03 2.2060977552476266e-01 -3.0566042895929740e-01 + 3.1552338148708670e-02 3.8339420021325338e-01 -5.3427913481465983e-01 + 6.0865351074003093e-02 4.9479328169528164e-01 -7.4727561781435614e-01 + 7.1099043825411601e-02 5.7614820474774797e-01 -9.6783940049654271e-01 + 6.5694271867927645e-02 6.2440023562524249e-01 -1.1904246671059131e+00 + 4.7637584835541757e-02 6.3906003994295235e-01 -1.4087889986637125e+00 + 2.0152132011244606e-02 6.2253873121246706e-01 -1.6167545613762393e+00 + -1.3147932504308457e-02 5.8042163009114589e-01 -1.8093306794661752e+00 + -4.9654459465845235e-02 5.1782221001735007e-01 -1.9831002774642719e+00 + -9.0620409242192501e-02 4.3590470104791734e-01 -2.1356435533605609e+00 + -1.4003828762054404e-01 3.3528709843409255e-01 -2.2655577429234501e+00 + -1.9917795643616037e-01 2.2128036982682664e-01 -2.3735644844019341e+00 + -2.6448393063403552e-01 1.0241786304390810e-01 -2.4630908002296690e+00 + -3.3250890346488038e-01 -1.5983271459387050e-02 -2.5384161905750577e+00 + -4.0433387732664883e-01 -1.3386498683584414e-01 -2.6025763371006057e+00 + -4.8281437439043656e-01 -2.5280860934120919e-01 -2.6574221563075042e+00 + -5.6677776691593029e-01 -3.7340484314489530e-01 -2.7030173149183998e+00 + -6.5037269998560487e-01 -4.9518710270158373e-01 -2.7380533463084573e+00 + -7.5231304064951021e-01 -6.1257749477857426e-01 -2.8067096852339111e+00 + id 12784 + loc 4.5827946066856384e-01 1.9476762413978577e-01 413 + blend 0.0000000000000000e+00 + interp 4.5829421931646608e-01:4.5828963637427295e-01:1.6254030808703412e-01:2.9137260033908546e-01:9.8817948267682720e-01:2.8532141891506385e-01:2.0006297374396338e+00:2.7382072473352614e-01:3.7567484894176140e+00 + CVs 20 + 6.0209048942070902e-02 5.6742134371993547e-02 -1.3378953362813597e+00 + 1.4877602441557786e-01 -7.6712299454486210e-02 -2.2226811539554405e+00 + 2.5299428119937112e-01 -2.5752891786836379e-01 -2.9551865677635969e+00 + 3.5440424856218733e-01 -4.4371390205079386e-01 -3.6370020981876583e+00 + 4.4507008042750351e-01 -6.2869179482540549e-01 -4.2675866608756756e+00 + 5.2266431406619529e-01 -8.1007837360955948e-01 -4.8567055000552353e+00 + 5.8995081580699071e-01 -9.9236906482315401e-01 -5.4105390138479770e+00 + 6.4486473477524719e-01 -1.1860310464707899e+00 -5.9255475827875745e+00 + 6.7721773158236953e-01 -1.3995947613552326e+00 -6.3873077789960941e+00 + 6.8808234895777642e-01 -1.6293095014212531e+00 -6.7746285479663788e+00 + 6.8715986545300500e-01 -1.8601349893401868e+00 -7.0759127853427186e+00 + 6.8959756025224950e-01 -2.0748331279345331e+00 -7.2984550713580774e+00 + 7.0524750443271333e-01 -2.2678813572169649e+00 -7.4633706826373967e+00 + 7.3938756659073701e-01 -2.4449892517408935e+00 -7.5935027287520942e+00 + 7.9644812441025548e-01 -2.6151977510138611e+00 -7.7110668060022398e+00 + 8.7347058450134574e-01 -2.7888863143878044e+00 -7.8290406819500049e+00 + 9.6240879331180695e-01 -2.9783800939854608e+00 -7.9403796046270321e+00 + 1.0668922751979208e+00 -3.2008929420769219e+00 -8.0213931573490349e+00 + 1.1604368522334187e+00 -3.4965480400650364e+00 -7.9252151729706481e+00 + id 12785 + loc 2.5024017691612244e-01 4.4820398092269897e-01 393 + blend 0.0000000000000000e+00 + interp 4.7718693362173431e-01:4.1994470354663938e-01:2.6984761884040087e-02:4.0474242081851275e-01:6.5041014936728159e-01:2.8368274156233114e-01:1.0225310612685374e+00:4.0256589870742843e-01:1.6354325210792746e+00:3.0195643079774814e-01:2.0265821886818709e+00:3.1780528233413186e-01:3.0374087147624644e+00:4.7718216175239814e-01:3.7663020046813651e+00 + CVs 20 + -1.9204559540488211e-01 3.7577117854301800e-01 2.5282246651472845e-01 + -3.6506920968990686e-01 7.8988581510934541e-01 4.9550755491071086e-01 + -5.6097770477474673e-01 1.2322630146779114e+00 7.2139285270088227e-01 + -8.1253777260235938e-01 1.6833349220466580e+00 9.4365486925945385e-01 + -1.1410607481541117e+00 2.1156935826730576e+00 1.1821962397238499e+00 + -1.5555417416482422e+00 2.4912869469067522e+00 1.4556742457673393e+00 + -2.0506630868321425e+00 2.7596711319192719e+00 1.7761205590908733e+00 + -2.6033733882083991e+00 2.8690863449147206e+00 2.1373941779409042e+00 + -3.1707206374482855e+00 2.7946297939931237e+00 2.5145542583028990e+00 + -3.7052182971791963e+00 2.5544883883578868e+00 2.8840821723666239e+00 + -4.1739861972432291e+00 2.1906442670023436e+00 3.2356398849619641e+00 + -4.5625551228865922e+00 1.7486832175504050e+00 3.5711706897563129e+00 + -4.8635662735282112e+00 1.2495593249475372e+00 3.9106349427183607e+00 + -5.0426939080309907e+00 6.7902488601886501e-01 4.2842964258287495e+00 + -5.0244328371746985e+00 5.3410605956470070e-02 4.7126008015667251e+00 + -4.7479348068772644e+00 -5.2056646156817665e-01 5.2006494479342562e+00 + -4.2174795868612618e+00 -9.0266176142243115e-01 5.7276178481218247e+00 + -3.5364959029818945e+00 -1.0776509373023790e+00 6.1840331848368617e+00 + -3.1697968526998439e+00 -1.4806479489139019e+00 6.5284777545005204e+00 + id 12786 + loc 5.0566232204437256e-01 5.6894850730895996e-01 411 + blend 0.0000000000000000e+00 + interp 4.6600703176199698e-01:3.1487819589486238e-01:2.4845629580619122e-01:4.0226546628703630e-01:9.8553855163026316e-01:3.3346843545450922e-01:1.4900802573280223e+00:2.5532867135545501e-01:2.2481916434342111e+00:3.2748048357065856e-01:3.0104203943628836e+00:4.6600237169167941e-01:3.7229300384220205e+00 + CVs 20 + 7.8100702704173330e-01 2.1224988437179682e-01 -1.0743985622656071e-01 + 1.3528294281003470e+00 3.1365880753816466e-01 -2.2333663900869327e-01 + 1.8966867154646676e+00 3.7063559113040911e-01 -3.4394614167569271e-01 + 2.4896452004774745e+00 4.0669797544582242e-01 -4.6604795150587514e-01 + 3.1240404060930373e+00 4.0810250322687636e-01 -5.7821254501460473e-01 + 3.7825324915238192e+00 3.6353982457573086e-01 -6.6773509045653523e-01 + 4.4422099888593740e+00 2.6412923149193590e-01 -7.2413422940805527e-01 + 5.0771522532856350e+00 1.0150252803134752e-01 -7.3962574568445139e-01 + 5.6587638682598387e+00 -1.2810038666451096e-01 -7.1425764152588811e-01 + 6.1609877562828554e+00 -4.1916133247072951e-01 -6.5718599207212292e-01 + 6.5715148032209436e+00 -7.5680257467169509e-01 -5.7581924981695998e-01 + 6.8975875884617901e+00 -1.1198618076685225e+00 -4.6859397867915614e-01 + 7.1577014793044880e+00 -1.4879677316641926e+00 -3.3364021294521246e-01 + 7.3714936831469142e+00 -1.8486409197578961e+00 -1.7666090014680985e-01 + 7.5548178065474554e+00 -2.1987164738955478e+00 -8.3919893411331659e-03 + 7.7173266888084795e+00 -2.5381392576443766e+00 1.5932659470094634e-01 + 7.8649522914754044e+00 -2.8658980498710145e+00 3.1409547480878963e-01 + 8.0019505725935289e+00 -3.1836304477743385e+00 4.4479319603905099e-01 + 8.1193929557561813e+00 -3.4258770706387347e+00 5.4526508246458760e-01 + id 12787 + loc 1.2890697456896305e-02 5.3703582286834717e-01 1078 + blend 0.0000000000000000e+00 + interp 4.2055164299437842e-01:3.3201509203433655e-01:1.7629494010091629e-01:4.2054743747794848e-01:1.0525831273513591e+00:3.6317228909101312e-01:2.0002037749364474e+00:3.7710346639075082e-01:2.8008387835284809e+00:3.9525048701205212e-01:3.0444385424593916e+00:3.8196670100855334e-01:3.6207107953759010e+00 + CVs 20 + 1.3196266288341160e-01 3.7232467432325966e-01 1.3442906812824001e-01 + 2.6779948484663174e-01 6.8016959915856245e-01 1.6232768503775952e-01 + 4.0693828873027854e-01 9.6797286486097600e-01 1.4200498937451334e-01 + 5.4608950455304128e-01 1.2384993298371696e+00 9.1321813123769080e-02 + 6.8027216949092906e-01 1.4672515030801172e+00 1.9134570786655258e-03 + 7.9713471466620955e-01 1.6218009811155896e+00 -1.2670010803397180e-01 + 8.7223230543678865e-01 1.6663802262197072e+00 -2.7572031012716780e-01 + 8.7198288876979890e-01 1.5876346420052121e+00 -3.9231758614154821e-01 + 7.8449069935036309e-01 1.4379702236675185e+00 -4.1005456463223344e-01 + 6.5235813004805521e-01 1.3101665160975697e+00 -3.2791408264703326e-01 + 5.2151003568185117e-01 1.2412769894527726e+00 -2.0230532589523326e-01 + 4.0617053715148749e-01 1.2167413117179131e+00 -8.0325698570458903e-02 + 3.0012996501035072e-01 1.1886422035702213e+00 -1.4989709262689388e-03 + 1.8383597620766295e-01 1.0948054853780786e+00 1.7418066138198740e-02 + 4.4150151065067512e-02 8.8875928699065110e-01 -2.8708329139931821e-02 + -1.2695247476617855e-01 5.3441015910201883e-01 -1.9661983897247065e-01 + -3.3968713046413351e-01 8.8048520725605428e-02 -7.0023018054587183e-01 + -4.8877561336413722e-01 5.9507267385756069e-02 -1.8111381045123207e+00 + -5.6481820920326342e-01 7.6920014903978928e-02 -1.8816025292486804e+00 + id 12788 + loc 7.4775397777557373e-01 1.3126380741596222e-01 406 + blend 0.0000000000000000e+00 + interp 3.9826420099829291e-01:3.9826021835628295e-01:3.0345489315516128e-01:2.7074766060223288e-01:9.9316068386124412e-01:2.8857270280602865e-01:1.6194538713832354e+00:3.2133925346860109e-01:2.0735377137964641e+00:2.8879397358285291e-01:2.9988411484195536e+00:3.1628962791472559e-01:3.9891745707751856e+00 + CVs 20 + -1.4766438574297913e-01 5.1315983939687240e-02 1.0028277043941065e-01 + -2.5287622723553749e-01 6.8430151939969180e-02 1.9820852831101171e-01 + -2.9694162864199852e-01 4.3078609786537325e-02 2.8746034368933371e-01 + -3.0532374378835814e-01 8.7706852122394763e-03 3.7658024353349057e-01 + -2.7716487334128298e-01 -2.4684490077706983e-02 4.6086120047777163e-01 + -2.1759032162271083e-01 -4.6797994744037008e-02 5.3697287549744666e-01 + -1.3992051462922248e-01 -4.9083984540855774e-02 6.0603604167546898e-01 + -6.0692972318008992e-02 -2.8631521431340706e-02 6.7311641888694884e-01 + 1.7712793774250751e-02 1.3704047936786146e-02 7.3554388996903342e-01 + 1.1228743702226764e-01 8.0241159840831078e-02 7.7260438903324757e-01 + 2.2764199980208794e-01 1.7488895064727084e-01 7.6580856200424841e-01 + 3.3434238506974290e-01 2.8996499085576660e-01 7.3099812657206287e-01 + 4.0694575437159747e-01 4.0894158615786597e-01 6.9923723816732775e-01 + 4.5002418250635295e-01 5.2482865949675161e-01 6.7217375335695673e-01 + 4.7854516736336900e-01 6.3958579785869119e-01 6.2741800562216932e-01 + 4.9594843756522694e-01 7.5515037344206126e-01 5.5763935080599203e-01 + 4.9575023862154516e-01 8.7019396397114024e-01 4.8567195466944102e-01 + 4.7598175834474410e-01 9.7624962750307609e-01 4.3974747803327885e-01 + 4.5073611197368768e-01 9.6645034994731616e-01 4.5043729670401367e-01 + id 12789 + loc 9.7960793972015381e-01 4.6363264322280884e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2390442382690308e-01:2.9669475016974611e-01:1.8017500449059176e-01:3.2932919972823271e-01:1.0000002053398251e+00:4.2390018478266484e-01:1.4835756270835587e+00:2.6337723702736049e-01:2.0104824517103488e+00:3.7939244384700055e-01:2.6828358978317670e+00:3.6948439139946571e-01:3.2284934151303970e+00 + CVs 20 + 1.2176657202447594e-02 4.9281799500745516e-01 -3.5310065741126451e-01 + -3.9671919692525787e-02 8.8206720447984632e-01 -5.7067776494950262e-01 + -1.1502732882636274e-01 1.2273628315257796e+00 -7.3258548390891609e-01 + -1.9979711138932565e-01 1.5524532822707067e+00 -8.6567184610878534e-01 + -2.9193806174326653e-01 1.8521096818961271e+00 -9.6261235019014424e-01 + -3.8751266781823657e-01 2.1183049759110175e+00 -1.0168304296432029e+00 + -4.8135940685162848e-01 2.3408758203965698e+00 -1.0242576248830377e+00 + -5.6887226777940059e-01 2.5144955043449597e+00 -9.8866305830149181e-01 + -6.4719930581404850e-01 2.6408220772367068e+00 -9.1795802185957731e-01 + -7.1346349990460800e-01 2.7202749823772709e+00 -8.1666774643055295e-01 + -7.6236848747245889e-01 2.7494100492421669e+00 -6.9130484997417907e-01 + -7.8923427518283307e-01 2.7303838684714528e+00 -5.5234824671403182e-01 + -7.9158023835192914e-01 2.6718372525515832e+00 -4.0760128420800257e-01 + -7.6863797712075099e-01 2.5853506152812287e+00 -2.5873294773499600e-01 + -7.2385608094088572e-01 2.4868300009238906e+00 -9.4871479200772990e-02 + -6.6715837750443119e-01 2.3896964067134769e+00 1.2064974533757600e-01 + -6.0437187366847556e-01 2.2455634785267433e+00 4.0594807527561672e-01 + -5.2312160809128516e-01 1.9939585625570253e+00 6.2976386585107058e-01 + -4.2381426393284183e-01 1.7509305661827268e+00 6.1477408018380675e-01 + id 12790 + loc 4.8171633481979370e-01 2.1792010962963104e-01 373 + blend 0.0000000000000000e+00 + interp 3.8406721764466312e-01:2.6163005526210559e-01:4.5111282074609305e-01:3.5700866252064994e-01:1.0242619312981818e+00:2.5643906511179598e-01:1.7641481447982768e+00:3.1278217070176412e-01:2.5661618565989945e+00:3.7620170381226253e-01:3.0035640153311887e+00:2.8603268861902753e-01:3.4714763763814278e+00:3.8406337697248671e-01:3.9989007044061955e+00 + CVs 20 + -7.1012419924089076e-02 4.7088558090111243e-01 3.0252443610771662e-01 + -1.6247223789338744e-01 9.0665062125479157e-01 5.8375667698928413e-01 + -2.7718747468379717e-01 1.2714537559822165e+00 8.1531126615906557e-01 + -3.8966691168852208e-01 1.5714288566980990e+00 9.5604954054945401e-01 + -4.5260132565446282e-01 1.8076128079297713e+00 1.0163438623037837e+00 + -4.4626900821278465e-01 1.9821936604704469e+00 1.0597767763959902e+00 + -3.8256104854165496e-01 2.1314157815921013e+00 1.1620883447068500e+00 + -3.0128309205416237e-01 2.3081866419116883e+00 1.3520727858098471e+00 + -2.4263807850017247e-01 2.5487074118561717e+00 1.6033265307524871e+00 + -2.3389649224995218e-01 2.8556874720438095e+00 1.8777900416414739e+00 + -2.9273182555071298e-01 3.2008914959923396e+00 2.1532224378057991e+00 + -4.3587679150072295e-01 3.5330967412477290e+00 2.4203055243707747e+00 + -6.7697486645929317e-01 3.7852703631384532e+00 2.6620637637265010e+00 + -9.9355974026469940e-01 3.8868650945949441e+00 2.8532246607849068e+00 + -1.3056094844603829e+00 3.8105336467085285e+00 2.9791596801768989e+00 + -1.5445830269188048e+00 3.6013425573685574e+00 3.0591481833325300e+00 + -1.6882538706324755e+00 3.3069051044543736e+00 3.1263867198875070e+00 + -1.7198518162846046e+00 2.9425170702270718e+00 3.2170417379463787e+00 + -1.5902656942120643e+00 2.5185322286789766e+00 3.3624955939487791e+00 + id 12791 + loc 6.2826938927173615e-02 7.5766313076019287e-01 395 + blend 0.0000000000000000e+00 + interp 4.9582762598438401e-01:3.4043036719824121e-01:2.6288268070747589e-01:4.7416031655987978e-01:8.4820732780280339e-01:4.9582266770812417e-01:1.2137875917516718e+00:4.0485553208425201e-01:1.9768483013519003e+00:3.6598963666147111e-01:2.7102825288969217e+00:4.5889815432570441e-01:3.0110373765948801e+00:3.3600155897057804e-01:3.6602465795760355e+00 + CVs 20 + 4.6728810199513815e-01 1.6045975452305683e-01 -2.3407473904812631e-01 + 8.7962617765209083e-01 2.5619073406055987e-01 -4.3655700292602206e-01 + 1.2933542407476910e+00 3.2956246121717420e-01 -6.1539408322614619e-01 + 1.7272798920531944e+00 3.9177718414566387e-01 -7.7116459021164119e-01 + 2.1733256346352441e+00 4.3539801395401390e-01 -9.0295942229205028e-01 + 2.6228787754796024e+00 4.5571153189772773e-01 -1.0151398246963856e+00 + 3.0668862081374022e+00 4.4855577268012059e-01 -1.1124194257268067e+00 + 3.4966966811524127e+00 4.0807702365358622e-01 -1.1967392091206137e+00 + 3.9064201036670880e+00 3.2717039133857906e-01 -1.2748545921714061e+00 + 4.2906703769750001e+00 1.9889559909147048e-01 -1.3597507807705942e+00 + 4.6388579468373141e+00 2.0365220958278751e-02 -1.4594772120682926e+00 + 4.9414347005746055e+00 -2.0223243453094275e-01 -1.5709005256442135e+00 + 5.1974640529322791e+00 -4.5945656317614159e-01 -1.6892828134487332e+00 + 5.4064679525347987e+00 -7.4380803131499196e-01 -1.8136978232128467e+00 + 5.5644032685630780e+00 -1.0439988444670174e+00 -1.9430805253807071e+00 + 5.6670703998348610e+00 -1.3408897951839789e+00 -2.0705539594963502e+00 + 5.7176112967275703e+00 -1.6161320225803255e+00 -2.1881769527533650e+00 + 5.7291119454778041e+00 -1.8630452917286160e+00 -2.2974233775180073e+00 + 5.7263606222088050e+00 -2.0951642218163586e+00 -2.4124929146086980e+00 + id 12792 + loc 1.1938803072553128e-04 8.5607838630676270e-01 417 + blend 0.0000000000000000e+00 + interp 3.7397325611228421e-01:1.4562654309255446e-01:1.9760905216924363e-01:3.7396951637972309e-01:9.2531477584837707e-01:1.8235509976913575e-01:1.9764071529786142e+00:2.8228571384251283e-01:2.9150881537227256e+00:3.6659080929075971e-01:3.3455872383513072e+00 + CVs 20 + -8.0741218566961412e-02 1.8734724577260251e-01 -1.4260839555827032e-01 + -1.1786822048693658e-01 3.4399572948557011e-01 -2.5638798035864879e-01 + -1.5260098086352519e-01 4.7345078353098313e-01 -3.7613743112798054e-01 + -1.9955623510873369e-01 5.8427242328135487e-01 -5.1709168889887125e-01 + -2.5608266757366765e-01 6.6999891234932263e-01 -6.7809134278897032e-01 + -3.1856074892552844e-01 7.2628828286156322e-01 -8.5584139535087966e-01 + -3.8363447172408138e-01 7.5264889914166866e-01 -1.0453645121067456e+00 + -4.4945851131244152e-01 7.5228218747925524e-01 -1.2409509477236400e+00 + -5.1591922019502701e-01 7.2711861322208216e-01 -1.4368159306769199e+00 + -5.8905668177672976e-01 6.7299271084591250e-01 -1.6261021300660257e+00 + -6.8016844218505002e-01 5.8650523362363116e-01 -1.8010085573841501e+00 + -7.9477807655246657e-01 4.7478053715342261e-01 -1.9560777785907757e+00 + -9.2846348275950508e-01 3.4973089540351965e-01 -2.0898448518977797e+00 + -1.0736093038592061e+00 2.1739709090052495e-01 -2.2009638211290041e+00 + -1.2257704717848219e+00 7.7940770104235835e-02 -2.2853088647697293e+00 + -1.3822712316047743e+00 -6.9006379153840447e-02 -2.3383883372206329e+00 + -1.5355847627939143e+00 -2.2245543881953167e-01 -2.3602289206702913e+00 + -1.6750730925217692e+00 -3.8021704421518310e-01 -2.3575313208757098e+00 + -1.8449644045508151e+00 -4.9639399562719233e-01 -2.3700653291270180e+00 + id 12793 + loc 2.6394288986921310e-02 5.0248521566390991e-01 377 + blend 0.0000000000000000e+00 + interp 4.5473598547745536e-01:3.1354278405917091e-01:1.2964320474948554e-02:4.5473143811760058e-01:9.1843116177661710e-01:1.4520216425994756e-01:1.4011064091258416e+00:3.9809633817350037e-01:2.4698953051609012e+00:3.3855828027415635e-01:3.0040833651401870e+00:4.4423767200648129e-01:3.6462575689774650e+00 + CVs 20 + -7.7055869353288031e-01 3.9747317620576350e-01 -6.0738294003733495e-01 + -1.4269847869948371e+00 5.9451071895245022e-01 -1.0318105857208180e+00 + -2.0513487096305090e+00 6.6140141835934041e-01 -1.3452999450284737e+00 + -2.6570320688643640e+00 6.4743819936784219e-01 -1.5993233147274546e+00 + -3.2137248551578215e+00 5.7286646716104239e-01 -1.8094034262026821e+00 + -3.7108674079991806e+00 4.5388131935623455e-01 -1.9784042400899269e+00 + -4.1566680530437585e+00 3.1292000161132716e-01 -2.1055904827672380e+00 + -4.5683706679491625e+00 1.7854512358128405e-01 -2.1975987207557499e+00 + -4.9589605510985937e+00 7.9687029371235507e-02 -2.2707187887166485e+00 + -5.3416157997673146e+00 3.5245096755317729e-02 -2.3567317322957857e+00 + -5.7282302156273897e+00 4.4926457390952468e-02 -2.4947979517940362e+00 + -6.1362383711086839e+00 7.6580989341893169e-02 -2.7197316956049007e+00 + -6.5750457458321856e+00 4.9699510626790122e-02 -3.0422860655348982e+00 + -7.0099502712108679e+00 -1.3342957875671102e-01 -3.4085941683649486e+00 + -7.3890553076980572e+00 -4.9136282735764603e-01 -3.7262057081196005e+00 + -7.6875287061937945e+00 -9.5650008221596838e-01 -3.9727176969512028e+00 + -7.9216245545875310e+00 -1.4495498727264904e+00 -4.1912313484908275e+00 + -8.1686258663963844e+00 -1.9309286033766337e+00 -4.3903658803570469e+00 + -8.5999657085106804e+00 -2.4372466704980140e+00 -4.5211100700159257e+00 + id 12794 + loc 7.3501193523406982e-01 5.7127445936203003e-01 411 + blend 0.0000000000000000e+00 + interp 3.7614138309154616e-01:3.0533825486516369e-01:3.5051328760176570e-01:3.7613762167771525e-01:9.9710771090499284e-01:3.2069133937053307e-01:1.6699970799941388e+00:3.0354283513373786e-01:2.2232076039808542e+00:2.7612925490236173e-01:2.9870962499067262e+00:3.1357302932050590e-01:3.8809700410007135e+00 + CVs 20 + 7.4432338522989516e-01 2.4366829625293471e-01 -1.4196549665502478e-01 + 1.2901707247670564e+00 3.6393359971097838e-01 -2.6217681572228113e-01 + 1.7841766084260025e+00 4.2030974170727076e-01 -3.7268233732786138e-01 + 2.3032896134432614e+00 4.3982160124651998e-01 -4.7760849565746588e-01 + 2.8360330646565020e+00 4.0890817744940755e-01 -5.7041691974037290e-01 + 3.3656485891521384e+00 3.1950745492201593e-01 -6.4676459442707324e-01 + 3.8722523115399823e+00 1.7107296228453528e-01 -7.0455190828669345e-01 + 4.3347353012179166e+00 -3.0489755296621235e-02 -7.4078810510435855e-01 + 4.7336233493946880e+00 -2.7319025883632220e-01 -7.5085224810353568e-01 + 5.0552045787403594e+00 -5.3763084577410325e-01 -7.3112713065026569e-01 + 5.2970882727812283e+00 -7.9975562473904516e-01 -6.8215659719679311e-01 + 5.4723659891283933e+00 -1.0418685974458151e+00 -6.1014478355033397e-01 + 5.6028653156768620e+00 -1.2586186591972750e+00 -5.2415652348625708e-01 + 5.7092295610146966e+00 -1.4509957093846328e+00 -4.3317963703413126e-01 + 5.8073532921787940e+00 -1.6207176159341969e+00 -3.4631362273942767e-01 + 5.9070438449964096e+00 -1.7639256236624550e+00 -2.7591229440288700e-01 + 6.0137764036275723e+00 -1.8740037082642340e+00 -2.3510909332609831e-01 + 6.1259207986586048e+00 -1.9619275511661762e+00 -2.2452804474766774e-01 + 6.1051586293683284e+00 -2.1731223333775995e+00 -2.3150633727567693e-01 + id 12795 + loc 8.2618474960327148e-01 8.5676985979080200e-01 1078 + blend 0.0000000000000000e+00 + interp 5.1334719892473757e-01:2.6655209082254394e-01:4.6689750723338364e-02:4.4769673950909961e-01:5.7030209439462998e-01:4.9855157024308511e-01:9.9905621839304148e-01:3.6218228903909933e-01:1.3805229774841175e+00:4.6807881135836527e-01:2.0092484276699185e+00:3.8960634909862218e-01:2.7460171999920235e+00:5.1334206545274830e-01:3.0396130166414523e+00:3.5885917925943228e-01:3.6522163675295731e+00 + CVs 20 + 9.1186932143536445e-02 2.5333437244036333e-01 -6.2584660566135125e-02 + 1.9236437227653064e-01 5.0693625678529064e-01 -1.1872563089032842e-01 + 3.0277139292871047e-01 7.6019615464416601e-01 -1.8071634382575757e-01 + 4.2230179417041014e-01 1.0132988376611136e+00 -2.6086719787018814e-01 + 5.5432656825902105e-01 1.2676258581416877e+00 -3.6882991277241001e-01 + 6.9927983505740710e-01 1.5215054119818339e+00 -5.1667946935629006e-01 + 8.5243862699983131e-01 1.7686059657401902e+00 -7.1899874566202737e-01 + 1.0019876250055515e+00 1.9961482529670900e+00 -9.9051471249027934e-01 + 1.1263055264881314e+00 2.1826848381454376e+00 -1.3405282405197649e+00 + 1.1963090802639818e+00 2.2995059237210249e+00 -1.7631474290296356e+00 + 1.1870556227982614e+00 2.3223739342708760e+00 -2.2329111557207346e+00 + 1.0898214392890435e+00 2.2400337607924565e+00 -2.7126989832392030e+00 + 9.2485087802750399e-01 2.0554398592632217e+00 -3.1730522503530065e+00 + 7.3248438981722608e-01 1.7803299415875899e+00 -3.6061950493224559e+00 + 5.4442730732830913e-01 1.4279073039411814e+00 -4.0111410762440753e+00 + 3.8175015453185029e-01 1.0214027952344815e+00 -4.3866029352310649e+00 + 2.8307738855618381e-01 6.2742806988783317e-01 -4.7553973337458721e+00 + 2.9808883740199232e-01 3.4726857188051152e-01 -5.1639205529308150e+00 + 2.4367972211180633e-01 2.7549951513279325e-03 -5.5510052742276610e+00 + id 12796 + loc 4.8408520221710205e-01 1.9476762413978577e-01 406 + blend 0.0000000000000000e+00 + interp 4.4412892072777915e-01:4.4412447943857192e-01:1.4954080965385708e-01:3.1086799617457828e-01:9.9881073887129779e-01:2.9767188820333296e-01:1.9972959978224072e+00:3.9611199742762393e-01:2.9011854803088637e+00:3.0222187556556479e-01:3.7186760813107247e+00 + CVs 20 + 6.4885495761423856e-02 1.6263931806161261e-01 -1.3602994296290147e-01 + 1.2933763756921518e-01 2.8577752545154933e-01 -2.3599184996739736e-01 + 1.8132021824432973e-01 3.8861734574918050e-01 -3.3812944950071666e-01 + 2.1803366682104589e-01 4.8364265392052708e-01 -4.5900285114768086e-01 + 2.3831663814209492e-01 5.6754882175378829e-01 -5.9758214045198088e-01 + 2.4187950799177213e-01 6.3768650869521348e-01 -7.5140866033967735e-01 + 2.3062073859131568e-01 6.9299880101830202e-01 -9.1745638114582673e-01 + 2.0878357718934293e-01 7.3385610884030239e-01 -1.0929944267323985e+00 + 1.7830369573853527e-01 7.5917615996985977e-01 -1.2728960604331139e+00 + 1.3373013867287364e-01 7.6581351519327778e-01 -1.4451805831274338e+00 + 6.9479915360814160e-02 7.5406964955624556e-01 -1.5957488551634718e+00 + -8.0454100687428198e-03 7.2993482527756670e-01 -1.7215704659762281e+00 + -8.7231512834955283e-02 6.9879896248965157e-01 -1.8285669548687078e+00 + -1.6346375050062595e-01 6.6378696829616024e-01 -1.9134731688703439e+00 + -2.3589796136268837e-01 6.2979041016804671e-01 -1.9630717764708527e+00 + -2.9968955887311099e-01 6.0225447244173758e-01 -1.9715875996510759e+00 + -3.4850193691733333e-01 5.8352441236048569e-01 -1.9485781629658694e+00 + -3.8162662051238594e-01 5.7347005217204483e-01 -1.9081966658925960e+00 + -4.1745643043730940e-01 5.4327925038313640e-01 -1.8981555336412725e+00 + id 12797 + loc 2.5999698042869568e-01 3.4764097654260695e-04 409 + blend 0.0000000000000000e+00 + interp 4.7097974453722746e-01:3.7061077128383840e-01:5.4640761848031039e-01:9.9835077393879090e-02:1.0152373613645056e+00:3.1315513004808171e-01:1.9791338402203773e+00:3.0310800221625489e-01:2.0353928080946351e+00:4.2937032228881339e-01:2.7568284995376544e+00:4.7097503473978214e-01:3.0438597816307214e+00:3.8345543548936223e-01:3.7939931441171719e+00 + CVs 20 + -1.4469093500021124e-01 1.7700382519012398e-01 -2.5548596046499772e-01 + -2.8432510057042043e-01 3.3674359440437629e-01 -5.1026655888670380e-01 + -4.0347307142726224e-01 4.8496387560253956e-01 -7.8272312647275555e-01 + -4.9679355514382939e-01 6.2034500092382439e-01 -1.0752326587975511e+00 + -5.7097527584699392e-01 7.3807495338227858e-01 -1.3813819402769232e+00 + -6.3007522245146319e-01 8.3704658297478785e-01 -1.6968446600870786e+00 + -6.7304399669702186e-01 9.1822069973018439e-01 -2.0194617974833826e+00 + -6.9706432264303864e-01 9.7814982223713109e-01 -2.3479148616151133e+00 + -7.0076655893862183e-01 1.0063193487983990e+00 -2.6795601076845514e+00 + -6.8522856803208843e-01 9.9079001355795526e-01 -3.0078523599584166e+00 + -6.5353767871649171e-01 9.2568242763756081e-01 -3.3211255714717423e+00 + -6.1086195289390699e-01 8.1276017238239429e-01 -3.6048467468258059e+00 + -5.6558576326605670e-01 6.5961185056360216e-01 -3.8447783710954968e+00 + -5.2874351683052545e-01 4.8032193113410848e-01 -4.0275928307157622e+00 + -5.0978995522850301e-01 2.9671551512068417e-01 -4.1479292582096319e+00 + -5.1392128333523401e-01 1.3740421318462070e-01 -4.2113581649367289e+00 + -5.3993774845734555e-01 2.7460378204346991e-02 -4.2369782354130141e+00 + -5.6941597945651001e-01 -4.4927616681070592e-02 -4.2526812927024489e+00 + -4.7142964065149545e-01 -3.4765684334609159e-01 -4.2354429979392760e+00 + id 12798 + loc 9.3538796901702881e-01 6.9045621156692505e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5738344622159310e-01:4.0768758932891624e-01:1.1655655034708101e-01:3.5052172578223367e-01:9.8246283041632165e-01:3.9802182075053161e-01:1.6840741959015186e+00:3.1078207481671094e-01:2.0775145509150237e+00:4.5737887238713093e-01:2.6473333291342080e+00:3.0161101706488913e-01:3.1561913650814084e+00 + CVs 20 + -1.3731935831259848e-01 9.9174075973964035e-02 1.8753745491238216e-01 + -2.5107650330436504e-01 1.8157218891503174e-01 3.3142438303597183e-01 + -3.3249277219234180e-01 2.1575474484855917e-01 4.2091312282988802e-01 + -4.0363638437542326e-01 2.4182538216156765e-01 5.0661055341712213e-01 + -4.5735477715190753e-01 2.5977993251709997e-01 5.9308811454228927e-01 + -4.8315052931465857e-01 2.6969221944599076e-01 6.8673746963954074e-01 + -4.7174479673969411e-01 2.7603060187602702e-01 7.9219584708369262e-01 + -4.1827084737695841e-01 2.8709853492957754e-01 9.0606760501294892e-01 + -3.2592962728361485e-01 3.1523863796054230e-01 1.0213933715559209e+00 + -2.0778720541737347e-01 3.7665499662833163e-01 1.1356950555799723e+00 + -8.3076980386060095e-02 4.8672548549486455e-01 1.2501329194887516e+00 + 2.0900871356803338e-02 6.5115666784378567e-01 1.3622156201773561e+00 + 7.7776783346003991e-02 8.5637540280868008e-01 1.4604935245193709e+00 + 7.7827066175915893e-02 1.0724528255533363e+00 1.5277828727803564e+00 + 3.2187606468411067e-02 1.2658196784616520e+00 1.5482865796009682e+00 + -3.7803399244144546e-02 1.4187026373460094e+00 1.5152205624515942e+00 + -1.2172665137230834e-01 1.5392498245910051e+00 1.4353550249063711e+00 + -2.2902704918814687e-01 1.6315611525268368e+00 1.3279021819419066e+00 + -3.1954437675030212e-01 1.6171112677132937e+00 1.1888902122706397e+00 + id 12799 + loc 9.8052191734313965e-01 9.4571018218994141e-01 1082 + blend 0.0000000000000000e+00 + interp 2.8555965642154180e-01:2.6000541130097610e-01:7.2937941353606439e-01:2.5959022558700684e-01:1.4003975538045885e+00:2.5379397116529251e-01:2.0545930415522120e+00:2.3963798363828082e-01:2.9972515590286655e+00:2.8555680082497759e-01:3.9526398142644101e+00 + CVs 20 + -5.6477334636226215e-02 4.0277989247485041e-01 2.9593801094776140e-01 + -1.0250425173915102e-01 6.8730566874677868e-01 3.7737188009084999e-01 + -1.7940949489010069e-01 9.3215016760520608e-01 4.1782583482023117e-01 + -3.0204971568636030e-01 1.1582775408487678e+00 4.6417814476064001e-01 + -4.7028904421605849e-01 1.3562288485893110e+00 5.0870857608375752e-01 + -6.7929364679974014e-01 1.5174336653346894e+00 5.4488346953400546e-01 + -9.1974148649182796e-01 1.6363254391121462e+00 5.6814319851455319e-01 + -1.1809900710441135e+00 1.7113635947638912e+00 5.7661557982079781e-01 + -1.4538406835217461e+00 1.7435882123330910e+00 5.7022521881429444e-01 + -1.7313767906923720e+00 1.7346888020413636e+00 5.4962361517105185e-01 + -2.0084914035837067e+00 1.6858697810323224e+00 5.1567690158378976e-01 + -2.2795516166362426e+00 1.5983757344578506e+00 4.6903235645430685e-01 + -2.5366606485929846e+00 1.4756863853824727e+00 4.1046818743666902e-01 + -2.7724187439771080e+00 1.3240441433056085e+00 3.4176384498980678e-01 + -2.9872890029643751e+00 1.1482580698563445e+00 2.6676276470187010e-01 + -3.1926050855432062e+00 9.5031885794829185e-01 1.9268846128672851e-01 + -3.4021217778293771e+00 7.3568135232729936e-01 1.2942705827884607e-01 + -3.6200931156726490e+00 5.1597332321092015e-01 8.5438219171077162e-02 + -3.7604857276528856e+00 3.5610172316244032e-01 5.8626576685259849e-02 + id 12800 + loc 5.6398671865463257e-01 5.2470877766609192e-02 413 + blend 0.0000000000000000e+00 + interp 3.7284291899309552e-01:2.6768671668671568e-01:1.7324689387338532e-01:3.4565686460330802e-01:1.0252031061888351e+00:2.7298157706351139e-01:1.8748347088941104e+00:3.7283919056390563e-01:2.2847196305396942e+00:3.1701395765048906e-01:3.2241254303999547e+00 + CVs 20 + -1.1224787254953821e+00 2.8106115052791036e-01 8.0614970682721609e-02 + -1.8739758927300456e+00 3.4789908507648010e-01 1.1513634886058710e-01 + -2.5004810763993501e+00 3.2395604092560537e-01 1.0822115338517505e-01 + -3.1069067236754977e+00 2.5239708706420089e-01 6.3678019149129850e-02 + -3.6858061483676345e+00 1.4232521661482489e-01 -1.8240269208845777e-02 + -4.2348086593837699e+00 -3.2796745528234084e-03 -1.2862067004890521e-01 + -4.7501262577410017e+00 -1.9173237566411083e-01 -2.5178866128825561e-01 + -5.2257776915579903e+00 -4.2330328740323431e-01 -3.7229391376159010e-01 + -5.6577969205003438e+00 -6.9507719402322055e-01 -4.8002119639061835e-01 + -6.0434195525731500e+00 -1.0022855249270788e+00 -5.6919230956640388e-01 + -6.3741251821738434e+00 -1.3335290715272237e+00 -6.3382728047321946e-01 + -6.6436934587957452e+00 -1.6736682657480495e+00 -6.6958891744585158e-01 + -6.8655010296383896e+00 -2.0245424579587548e+00 -6.8104412023672956e-01 + -7.0555435488280445e+00 -2.4002425319493099e+00 -6.8132553346914815e-01 + -7.2182138648607568e+00 -2.8112122367162291e+00 -6.8312608448150769e-01 + -7.3453008231618862e+00 -3.2537418528699105e+00 -6.9280152607951484e-01 + -7.4233574641366706e+00 -3.7193963885169414e+00 -7.1640437304703175e-01 + -7.4399567630404881e+00 -4.2136256070699964e+00 -7.6054020764639996e-01 + -7.4091525606562412e+00 -4.8032815978163743e+00 -8.2555253371094950e-01 + id 12801 + loc 5.7595348358154297e-01 4.1431838274002075e-01 1081 + blend 0.0000000000000000e+00 + interp 4.0192834737040878e-01:4.0192432808693507e-01:3.8562057213878476e-01:3.3423102724788317e-01:1.0736488124261525e+00:3.3908604047023860e-01:1.7896541909686410e+00:3.2921961776060721e-01:3.6998009358732213e+00 + CVs 20 + -4.3511982057789500e-04 5.5539935959183107e-01 -5.1545272364660899e-01 + -5.5219243665339923e-02 1.0018851186715603e+00 -8.1228361788936476e-01 + -1.3447825516115025e-01 1.4177930110083681e+00 -1.0269977285654468e+00 + -2.2712081524743893e-01 1.8315887542096281e+00 -1.2103833429920359e+00 + -3.3497561415038185e-01 2.2242605976170795e+00 -1.3461436594920191e+00 + -4.5247788467479366e-01 2.5680315471635122e+00 -1.4112174045455086e+00 + -5.6487854397947523e-01 2.8232984118816091e+00 -1.3802130767875653e+00 + -6.4189657273868828e-01 2.9229727183702123e+00 -1.2386350948738150e+00 + -5.9418894295843816e-01 2.6982347467586889e+00 -1.0377556382698763e+00 + -2.8178004388880390e-01 2.0968367978880460e+00 -1.2170127836956228e+00 + -3.1324415151448459e-02 1.8292028915355960e+00 -1.6923257338138786e+00 + 8.3913938267893506e-02 1.7302397898930399e+00 -1.9522985923034084e+00 + 1.6675093365330662e-01 1.6018689455894286e+00 -2.0866171089943601e+00 + 2.4204808026446106e-01 1.4250451308428720e+00 -2.1779853224049401e+00 + 3.0973386432093247e-01 1.2295560003020658e+00 -2.2844602261658071e+00 + 3.6389990773540848e-01 1.1114737823085741e+00 -2.4773017060585252e+00 + 4.0207657194465596e-01 1.2014955072002835e+00 -2.7559064134579119e+00 + 4.3418488465065447e-01 1.3809980050031567e+00 -2.9831614164985822e+00 + 4.8249651904738616e-01 1.0827459498697856e+00 -3.1880959237752551e+00 + id 12802 + loc 6.1612200736999512e-01 9.2272841930389404e-01 393 + blend 0.0000000000000000e+00 + interp 4.2198874940085179e-01:3.8284878014009904e-01:3.6091627975696594e-01:4.2198452951335780e-01:9.8174207929343993e-01:4.1102784714040180e-01:1.3245306115022284e+00:2.7732907965926407e-01:2.2738233689505103e+00:4.0899690438732877e-01:3.0440583349560200e+00:2.6830637852976319e-01:3.5838981069110769e+00 + CVs 20 + -1.8655033209372635e-01 3.1196957168133965e-01 -2.9290548930808108e-01 + -3.7224653847556366e-01 6.2848438248864691e-01 -5.6621541637614570e-01 + -5.4750654196001569e-01 9.5212237688081136e-01 -8.4922581528961449e-01 + -7.2348545972700951e-01 1.2829924874587737e+00 -1.1515514475710940e+00 + -9.1993366694267242e-01 1.6127523070093039e+00 -1.4669179097986187e+00 + -1.1516203768071460e+00 1.9267766607320764e+00 -1.7873002107655505e+00 + -1.4250428474723156e+00 2.2063382084745342e+00 -2.1032490731973068e+00 + -1.7352097244053621e+00 2.4279055179742874e+00 -2.4035518823312056e+00 + -2.0616066697275146e+00 2.5709825498421468e+00 -2.6784498156993761e+00 + -2.3788333507433723e+00 2.6370683830243076e+00 -2.9270989806555963e+00 + -2.6813342376019644e+00 2.6480620073635217e+00 -3.1602175050588128e+00 + -2.9848849616452111e+00 2.6221928083180774e+00 -3.3925621012153111e+00 + -3.3026015115675893e+00 2.5680226222921076e+00 -3.6334133186270781e+00 + -3.6378997547905252e+00 2.4869722533624632e+00 -3.8817585494956259e+00 + -3.9990308962207712e+00 2.3738114830002242e+00 -4.1469755676812641e+00 + -4.4080010750539369e+00 2.1991557566357445e+00 -4.4558759539212147e+00 + -4.8849120698931756e+00 1.9301665894892976e+00 -4.7977544537859762e+00 + -5.4222424216388543e+00 1.6039007124926004e+00 -5.0839917529383696e+00 + -5.8922704168748137e+00 1.4106103754172601e+00 -5.2261912940322279e+00 + id 12803 + loc 9.7943365573883057e-01 8.4659832715988159e-01 264 + blend 0.0000000000000000e+00 + interp 4.5750669107084929e-01:4.2725456895851271e-01:4.3190998863927521e-02:3.9577790298229992e-01:7.5947809582368242e-01:4.5437990218215940e-01:1.0868280313780125e+00:2.8525334618956205e-01:1.8308684184514399e+00:3.9159239355849895e-01:1.9991737055177647e+00:2.6856790742744352e-01:2.9690195191025088e+00:4.3794730073530996e-01:3.2556412940091510e+00:4.5750211600393859e-01:3.8876721881836165e+00 + CVs 20 + -8.2880774695451465e-01 4.6018292516498033e-01 -3.5803877702774661e-01 + -1.5385662851775608e+00 7.0179704320892333e-01 -5.4202205465997988e-01 + -2.2277529251146713e+00 7.4593099670567031e-01 -5.8353369772684427e-01 + -2.9262497576755293e+00 6.8210426273658487e-01 -5.4931497025648002e-01 + -3.6209535004885369e+00 5.8927877354765368e-01 -5.1370124906277304e-01 + -4.2958945910288477e+00 4.8170789420387061e-01 -5.4251049299030008e-01 + -4.9382981596049289e+00 3.3985421337088040e-01 -6.6871965241701914e-01 + -5.5400956778447483e+00 1.5798392839847231e-01 -8.9656746149497013e-01 + -6.0858121233100526e+00 -5.5715349045691198e-02 -1.2136178147117107e+00 + -6.5530766616079941e+00 -2.9262009165145653e-01 -1.5869415887934291e+00 + -6.9337441321347368e+00 -5.3644460348702472e-01 -1.9557285186467754e+00 + -7.2390749191367636e+00 -7.6065205777904277e-01 -2.2647641192504038e+00 + -7.4956476244268604e+00 -9.4565926786755705e-01 -2.5150699859869086e+00 + -7.7329875566070569e+00 -1.1064517550287616e+00 -2.7694683786382264e+00 + -7.9404606279963934e+00 -1.2855481241078279e+00 -3.0650072236269232e+00 + -8.1064362880594150e+00 -1.4996178567296381e+00 -3.3521936333529148e+00 + -8.2796696004725181e+00 -1.6825142227614056e+00 -3.5326297388075911e+00 + -8.4731166775752698e+00 -1.8143387942100966e+00 -3.6284797027114264e+00 + -8.6079126843781495e+00 -2.3425649766412295e+00 -3.7512008569050215e+00 + id 12804 + loc 5.1592439413070679e-01 9.6741503477096558e-01 403 + blend 0.0000000000000000e+00 + interp 4.6828449693632623e-01:4.6091229875558998e-01:1.8381273157652700e-04:4.1201949456607956e-01:7.8492853782121497e-01:4.4852232774286938e-01:1.0324980954103078e+00:4.6827981409135688e-01:1.4515112478968482e+00:2.8034929413045151e-01:2.0171047528395749e+00:2.9064195787541619e-01:2.8696968399968394e+00:3.8910835049201409e-01:3.1263921150750464e+00 + CVs 20 + -1.2747739154511162e-02 9.2859555354528861e-02 -5.7099856916790349e-02 + -4.5560083929675102e-02 1.9431852147092760e-01 -1.1025673219835699e-01 + -8.4915005585153497e-02 3.0447189079199360e-01 -1.5786635422505166e-01 + -1.3294203102684732e-01 4.2665855571753042e-01 -2.0224933184410249e-01 + -1.9525792156753377e-01 5.5778743784497542e-01 -2.4475951717969721e-01 + -2.7678665709867278e-01 6.9385041300816330e-01 -2.8470823948753066e-01 + -3.8104795135290115e-01 8.3105520181389592e-01 -3.1731525856237780e-01 + -5.0960633050686865e-01 9.6593572783141468e-01 -3.3318309327491386e-01 + -6.6198247264218435e-01 1.0942000036560153e+00 -3.1963891448613463e-01 + -8.3405941124181404e-01 1.2096586468207438e+00 -2.6177928678471418e-01 + -1.0135342862832886e+00 1.3050330404927020e+00 -1.4239262079238629e-01 + -1.1766764929322233e+00 1.3722280994352296e+00 5.3982678073039088e-02 + -1.2871614503488800e+00 1.4031358179649092e+00 3.3372846475903151e-01 + -1.3013494988614323e+00 1.3920730232159975e+00 6.8278604292007661e-01 + -1.1854291765598433e+00 1.3391928545909837e+00 1.0599591447055801e+00 + -9.3939383018950229e-01 1.2497495686856841e+00 1.4083672059902670e+00 + -6.0074901877927633e-01 1.1325663698707142e+00 1.6835232143208734e+00 + -2.1661300983989662e-01 9.9609593692115472e-01 1.8714154947247232e+00 + -8.9376849734801034e-02 9.4314993291215765e-01 2.0629581582459702e+00 + id 12805 + loc 1.7463584244251251e-01 6.4158505201339722e-01 411 + blend 0.0000000000000000e+00 + interp 5.1838135069085467e-01:3.2100666981298898e-01:1.1654430866178056e-01:3.2963877368693406e-01:1.0213668358754966e+00:3.1966229247186195e-01:1.9742754447178976e+00:5.1837616687734778e-01:2.3969027708859989e+00:4.4597381765075000e-01:2.9529544010485251e+00:3.3745348173914519e-01:3.3068118204201697e+00 + CVs 20 + 8.3185500472945517e-01 1.3044419832332163e-01 -2.1245063340880097e-02 + 1.4167302766634353e+00 1.3517269275444782e-01 -5.2440117942718953e-02 + 1.9447335595162358e+00 8.6560447476502544e-02 -5.8927622479457292e-02 + 2.4886835366138036e+00 1.0441833795464484e-02 -2.4317357160425143e-02 + 3.0364234896677118e+00 -9.4757641500030854e-02 5.1608846194118471e-02 + 3.5760694686120384e+00 -2.2844232015318133e-01 1.6393463358674276e-01 + 4.0945032245698645e+00 -3.8939259942586291e-01 3.0385145754555731e-01 + 4.5768074376361270e+00 -5.7869622317262848e-01 4.6103379993091242e-01 + 5.0088877923753810e+00 -8.0021310011235869e-01 6.2476568074094174e-01 + 5.3751936952762769e+00 -1.0574530245727123e+00 7.8295035015236480e-01 + 5.6577423638435045e+00 -1.3488672254511125e+00 9.2195688536111331e-01 + 5.8494783289751480e+00 -1.6653242769958871e+00 1.0315321720403385e+00 + 5.9590376214350904e+00 -1.9973094583095365e+00 1.1102048954317256e+00 + 5.9979757892604368e+00 -2.3352148248644289e+00 1.1587202087663078e+00 + 5.9733328243510266e+00 -2.6618897394933914e+00 1.1769761380855144e+00 + 5.8921194865357531e+00 -2.9529218278700018e+00 1.1668098284394275e+00 + 5.7681028850579725e+00 -3.1919675714385471e+00 1.1334570872381440e+00 + 5.6203829294588834e+00 -3.3935799087291754e+00 1.0825260507230894e+00 + 5.4702724927433435e+00 -3.7695587511439821e+00 1.0153006194450469e+00 + id 12806 + loc 6.1082065105438232e-01 1.8665294349193573e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0592530293079276e-01:2.6377604461330090e-01:4.5979284086908423e-01:4.0592124367776350e-01:1.1711078049296897e+00:3.7190339328653571e-01:2.0004093163478354e+00:3.5427973731620677e-01:2.4826226136692213e+00:3.0701074098703318e-01:3.0151330633207789e+00:3.7290971554594610e-01:3.9925857720033537e+00 + CVs 20 + -7.2241746345516611e-04 2.9580673579863370e-01 1.9913702059970373e-01 + -4.4234473737157110e-02 5.8929986562785552e-01 3.8963058442140303e-01 + -1.2619071895619433e-01 8.8193834974684382e-01 5.5794492062775070e-01 + -2.5516904165651644e-01 1.1685603826782254e+00 6.9274403676664220e-01 + -4.1449491086593715e-01 1.4460029486984183e+00 7.8280319964765321e-01 + -5.3693508136834245e-01 1.7283495692869812e+00 8.2753259098457410e-01 + -5.5615922219550784e-01 2.0195671619333644e+00 8.4037410091883746e-01 + -4.6820529198586869e-01 2.3139559914813583e+00 8.5085556869536583e-01 + -2.8330319094828837e-01 2.6083005295209838e+00 9.0137317819039420e-01 + 1.1971105360935042e-02 2.8484142328639788e+00 1.0437624405739068e+00 + 3.9927092373742457e-01 2.9028055079744388e+00 1.2955864808381947e+00 + 7.6995102383655922e-01 2.6906024078498203e+00 1.5569874858018413e+00 + 1.0336612067603190e+00 2.2973214427817981e+00 1.7251538448374997e+00 + 1.1745347823453427e+00 1.8224089668259962e+00 1.8088133751982860e+00 + 1.1967104703698013e+00 1.3153782328926127e+00 1.8480258201152506e+00 + 1.0816502007705056e+00 8.0942521980976212e-01 1.8115485102575595e+00 + 8.1174124384415625e-01 3.9378526286546700e-01 1.6135241738381612e+00 + 4.5664351512922802e-01 1.7352097356982743e-01 1.2823189069326890e+00 + 2.9278830392430677e-01 -1.3477454879219419e-01 1.1991565752699278e+00 + id 12807 + loc 5.9574490785598755e-01 5.2470877766609192e-02 406 + blend 0.0000000000000000e+00 + interp 3.9321710301652657e-01:2.9871292757724427e-01:1.9504366907092952e-01:3.3066449845130730e-01:1.0108682378459644e+00:3.9237597726382012e-01:1.3959685882477408e+00:3.3171496988174820e-01:2.0015939544283832e+00:3.9321317084549640e-01:2.8856304904782539e+00:3.0330070913203944e-01:3.2076506806390119e+00 + CVs 20 + -8.6172360237687651e-03 2.0954357606573268e-01 -1.5043528619851718e-01 + 2.8953185186993968e-03 3.8918901977355830e-01 -3.0706284312308652e-01 + -2.6296463024950090e-02 5.8318393541981073e-01 -4.5802615599007046e-01 + -1.0867385145318467e-01 7.8403305122093081e-01 -5.9620852792633272e-01 + -2.4968712023969647e-01 9.7954338071997427e-01 -7.1599950321942596e-01 + -4.4724623526068552e-01 1.1550747308569358e+00 -8.1217613410534328e-01 + -6.8975736187170289e-01 1.2967203103451426e+00 -8.8324280228554075e-01 + -9.5873837668828688e-01 1.3961611742391407e+00 -9.3392762352198522e-01 + -1.2434312449012155e+00 1.4516308838297098e+00 -9.6771785983389647e-01 + -1.5497744331567176e+00 1.4608363945011806e+00 -9.7109235894930301e-01 + -1.8774713996492496e+00 1.4180392207885977e+00 -9.2080599690986908e-01 + -2.2002604443388822e+00 1.3255751166931593e+00 -8.1635585319027804e-01 + -2.4921458572433290e+00 1.1985623491821498e+00 -6.8381636672180179e-01 + -2.7485822010538348e+00 1.0505958863290783e+00 -5.3945594904290317e-01 + -2.9710859475533007e+00 8.8697511329748480e-01 -3.7317238770134931e-01 + -3.1537625378637291e+00 7.1048923736871017e-01 -1.7403107423886510e-01 + -3.2904153335139261e+00 5.2404084147743868e-01 4.2674293738351965e-02 + -3.3848750543465340e+00 3.3102768475873567e-01 2.4720410151405109e-01 + -3.4949719834057729e+00 2.1472487374087401e-01 3.8001880053336379e-01 + id 12808 + loc 8.9357978105545044e-01 7.7974194288253784e-01 373 + blend 0.0000000000000000e+00 + interp 5.7439473781958372e-01:3.1524739899193566e-01:8.5074545191177164e-01:4.6550176644533958e-01:1.0748736555729532e+00:4.6280624040603080e-01:2.0005517169681930e+00:5.7438899387220554e-01:2.7104231508761689e+00:4.5072709815698547e-01:3.3359958636574047e+00:2.9227252261892306e-01:3.9569262467495463e+00 + CVs 20 + -1.9901030864620295e-01 3.4846785089369053e-01 -2.4975696423257188e-01 + -3.9443141324370795e-01 6.7059467671442574e-01 -4.8704496287002563e-01 + -5.7669715157234580e-01 9.6501496464560010e-01 -7.1534495033140955e-01 + -7.3287980971038169e-01 1.2339408205828120e+00 -9.3305074168564572e-01 + -8.5474432235497244e-01 1.4751226399362380e+00 -1.1366585608076223e+00 + -9.4518414562665232e-01 1.6837403295408513e+00 -1.3241360073774047e+00 + -1.0166175471205330e+00 1.8625073191021075e+00 -1.5025465049455624e+00 + -1.0808158206117033e+00 2.0179547921566110e+00 -1.6906500885159934e+00 + -1.1411290758363739e+00 2.1508385374770631e+00 -1.9079026336963973e+00 + -1.1922311331321427e+00 2.2555139938777211e+00 -2.1672817758110137e+00 + -1.2207859800744647e+00 2.3284784172560120e+00 -2.4707313840933085e+00 + -1.2075229050599203e+00 2.3705192768766570e+00 -2.8079378715123342e+00 + -1.1327597184791180e+00 2.3557795531389978e+00 -3.1644480757294788e+00 + -9.9483773760192795e-01 2.2201075733678950e+00 -3.5194853409711682e+00 + -8.4420396942971287e-01 1.9315994219728196e+00 -3.8593141423316339e+00 + -7.8360637987612514e-01 1.5344168960793998e+00 -4.1998034284960335e+00 + -9.1137896423325238e-01 1.1271479082995968e+00 -4.5503848693440130e+00 + -1.2522472189140224e+00 8.4355390463361068e-01 -4.8690004914287686e+00 + -1.6448232660994440e+00 7.2326563727498971e-01 -5.0817105014867270e+00 + id 12809 + loc 9.7925163805484772e-02 5.4049566388130188e-02 409 + blend 0.0000000000000000e+00 + interp 4.0794665268478797e-01:3.0314481921506414e-01:1.5830023045165553e-01:3.4889554728908251e-01:4.0894016534433830e-01:3.3050742073911055e-01:1.0016619501357216e+00:3.7466461935594469e-01:1.5929370375098302e+00:2.9943448277831963e-01:1.9655043564001442e+00:2.7948865766102443e-01:2.9699683553711633e+00:4.0794257321826116e-01:3.7648848424809804e+00 + CVs 20 + -2.2082642862560700e-01 2.4040401478756873e-01 -3.9147719068369574e-01 + -4.0181719461171761e-01 4.8127457147703101e-01 -7.7672619347017191e-01 + -5.8026001968701746e-01 7.3726824125119539e-01 -1.1812026189616911e+00 + -8.0208793246655796e-01 1.0015258801965916e+00 -1.6091113398772876e+00 + -1.1104091322012448e+00 1.2426769425882009e+00 -2.0399909882501790e+00 + -1.5192439012239072e+00 1.4175455516327342e+00 -2.4438613645832965e+00 + -1.9999827193940234e+00 1.4870679029188403e+00 -2.7993639385541620e+00 + -2.4977737051214097e+00 1.4311792215608035e+00 -3.1063989866176254e+00 + -2.9647239762838411e+00 1.2475241645510247e+00 -3.3769861149291982e+00 + -3.3631342003907356e+00 9.4036945918392867e-01 -3.6134912007095723e+00 + -3.6730497769051804e+00 5.4149054925549511e-01 -3.8061234838945315e+00 + -3.9369174167018808e+00 1.1137277323203287e-01 -3.9528155957497590e+00 + -4.2159045681055654e+00 -3.0006361936032189e-01 -4.0605535183207433e+00 + -4.5237414507920564e+00 -6.5750718970460231e-01 -4.1350452254485273e+00 + -4.8408743078359810e+00 -9.5520280977898220e-01 -4.1855484615303791e+00 + -5.1583993507677581e+00 -1.2257852542873422e+00 -4.2263297911600226e+00 + -5.4920583331465931e+00 -1.4991246473354172e+00 -4.2751182427632752e+00 + -5.8487972196294242e+00 -1.7783375672582689e+00 -4.3607832957291990e+00 + -6.2024748060249246e+00 -2.0478994113680411e+00 -4.5204182861567874e+00 + id 12810 + loc 9.8221063613891602e-01 4.5382848381996155e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0880422012316214e-01:3.7594181558711298e-01:5.6830515428333350e-01:2.2302176444050453e-01:1.1233569331721260e+00:3.4781713000081721e-01:2.0020003778684718e+00:4.0880013208096094e-01:2.4816160391872097e+00:3.7305121238643030e-01:2.9977239536739475e+00:2.8154906842894090e-01:3.7019806267609323e+00 + CVs 20 + -1.7954456735182980e-01 3.0298161202034912e-01 1.7039744751473157e-01 + -3.8914818954483366e-01 6.1501481366414879e-01 3.1402614373844395e-01 + -6.2995742726754256e-01 9.0869575868920149e-01 4.7684614087869559e-01 + -8.9951229889699413e-01 1.1639582586964872e+00 6.8101607373395323e-01 + -1.1933730235624798e+00 1.3668620222482386e+00 9.3315750957688937e-01 + -1.5037677409677574e+00 1.5024600428308279e+00 1.2342205775398756e+00 + -1.8201873340521697e+00 1.5574111786478793e+00 1.5834202312374515e+00 + -2.1264865064492362e+00 1.5192035968837854e+00 1.9804105318276670e+00 + -2.3976941488237835e+00 1.3761075113159189e+00 2.4161221958274286e+00 + -2.6077267055543745e+00 1.1231435190055725e+00 2.8658510945597686e+00 + -2.7419966752495668e+00 7.6762950765481275e-01 3.2907026974406879e+00 + -2.8011872863282798e+00 3.3647323535014673e-01 3.6452606024667817e+00 + -2.7968604405832371e+00 -1.3299687760212886e-01 3.9159257971147983e+00 + -2.7325473593661966e+00 -6.2575308310858135e-01 4.1587739985640431e+00 + -2.5996532897874256e+00 -1.0993834962546365e+00 4.4943401649079373e+00 + -2.4325248395752967e+00 -1.4057707778836241e+00 5.0105883813091197e+00 + -2.2944373632394526e+00 -1.3586552099756131e+00 5.6962503491186656e+00 + -2.3236445561765722e+00 -7.5302296345120512e-01 6.2716722578849726e+00 + -2.3641109521493648e+00 -5.7861094147166492e-01 6.4486445620628512e+00 + id 12811 + loc 9.3520230054855347e-01 6.0660064220428467e-01 377 + blend 0.0000000000000000e+00 + interp 4.1147920290426793e-01:3.7848035965085458e-01:3.9436731223865029e-01:4.1080057557161170e-01:9.3659839348142482e-01:4.1147508811223893e-01:1.3947337715172923e+00:3.6063757684029418e-01:2.0029803878777104e+00:2.9175877765739672e-01:2.8787998757333302e+00:2.4215417083206170e-01:3.3608144437137937e+00:3.7068458926498682e-01:3.9997287917507611e+00 + CVs 20 + -6.5746140907980144e-01 1.9575445743040037e-01 -8.3105752582147874e-01 + -1.1257004409165172e+00 2.5154809032684150e-01 -1.3881855526525217e+00 + -1.5431450297265736e+00 2.6109429218976493e-01 -1.8405723374046354e+00 + -1.9751000976469202e+00 2.6014659041832433e-01 -2.2550378733816498e+00 + -2.4248945216754105e+00 2.4696181967986486e-01 -2.6304620938983998e+00 + -2.8910271606277713e+00 2.2056240282899753e-01 -2.9734108228093663e+00 + -3.3677544237004762e+00 1.7709165917428948e-01 -3.2920155483068414e+00 + -3.8469148120822325e+00 1.0393102464021364e-01 -3.5953369612621815e+00 + -4.3119762857515225e+00 -2.2564865651224730e-02 -3.8875149558975570e+00 + -4.7289225084096058e+00 -2.0722168554240383e-01 -4.1761096693067064e+00 + -5.0693627841891109e+00 -4.3091220675647546e-01 -4.4684343892882827e+00 + -5.3269562612190056e+00 -6.6916455826711485e-01 -4.7686477999028245e+00 + -5.5037634065960308e+00 -9.1348368178261308e-01 -5.0757241155314547e+00 + -5.5944561394429311e+00 -1.1952685652863528e+00 -5.3642053383278592e+00 + -5.5857103837543276e+00 -1.5497573809420178e+00 -5.5815687381871903e+00 + -5.4640177264195531e+00 -1.9829594123039729e+00 -5.7137207671485690e+00 + -5.2341807609048816e+00 -2.5049141879089003e+00 -5.8126931703902054e+00 + -4.9686743690202784e+00 -3.1125922827116930e+00 -5.9285304668589403e+00 + -4.8676851338002614e+00 -3.5823314423054127e+00 -5.9999745870111854e+00 + id 12812 + loc 9.8497956991195679e-01 8.5340332984924316e-01 1076 + blend 0.0000000000000000e+00 + interp 3.2086551026741983e-01:3.2086230161231716e-01:1.3895177086155552e-01:2.6486125233824809e-01:9.1772538165899065e-01:2.5369498799269602e-01:1.9396901442293721e+00:8.1006255716198183e-02:3.0086482618019499e+00 + CVs 20 + 2.2899399386180375e-01 3.4621990673454994e-01 -9.2113023641864147e-02 + 4.8268812435990605e-01 6.6918939308688363e-01 -2.1754125156064363e-01 + 7.5911762178663300e-01 9.6987486149649260e-01 -3.5225286536952360e-01 + 1.0545226425662935e+00 1.2495135778798212e+00 -4.8622466784173957e-01 + 1.3639066097327908e+00 1.5105214997943228e+00 -6.2506087208145789e-01 + 1.6743448589120231e+00 1.7492192685441208e+00 -7.9198341204241762e-01 + 1.9575404657384883e+00 1.9413736677733617e+00 -1.0197062114346003e+00 + 2.1698393596103860e+00 2.0330307581504390e+00 -1.3006471127062273e+00 + 2.2777979531476857e+00 1.9817645954747865e+00 -1.5726398703022153e+00 + 2.2896228325394374e+00 1.8038884290436539e+00 -1.8001440457098268e+00 + 2.2291418070451550e+00 1.5192167360319373e+00 -1.9980873183555690e+00 + 2.1307182047518975e+00 1.1252652467164670e+00 -2.1953430441026089e+00 + 2.0547261280985301e+00 6.1326670437189934e-01 -2.4485265220553107e+00 + 2.0712269855775487e+00 2.0499514847749034e-02 -2.8564629011214411e+00 + 2.2283969943167166e+00 -4.8778538962390044e-01 -3.5502702741464209e+00 + 2.5118449805416088e+00 -5.6793362470279440e-01 -4.5564650967162326e+00 + 2.7665361307186926e+00 1.6027235166724424e-01 -5.5577072859465906e+00 + 2.7448897284114255e+00 1.2983325424391388e+00 -6.0037806421267597e+00 + 2.7013337322709270e+00 1.7243435718951536e+00 -6.3986662939022532e+00 + id 12813 + loc 2.7009010314941406e-01 4.4057950377464294e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4209497601171682e-01:2.7653983198193927e-01:6.0603303842476919e-04:3.3103007826145736e-01:7.6875108149459559e-01:4.2755756464046352e-01:1.0235628245019366e+00:4.4209055506195671e-01:1.4978689902370399e+00:3.8847018238390202e-01:1.9964508800399543e+00:3.4619230241723636e-01:2.6139805722847154e+00:3.4186766907576160e-01:3.3859253992748841e+00 + CVs 20 + -1.4899375870792989e-01 2.1188892328240688e-01 2.6974850798256671e-02 + -3.3776932203386756e-01 4.4025304029818868e-01 3.3910554365840687e-02 + -5.4409865023117976e-01 6.7583025973455269e-01 3.4733202720268405e-02 + -7.5230441801589809e-01 9.1029329867297881e-01 3.8558294450954975e-02 + -9.6208460527298989e-01 1.1365811766150014e+00 4.5827415035757463e-02 + -1.1688056950814540e+00 1.3428728467455655e+00 5.7827101921441248e-02 + -1.3674865962639906e+00 1.5154561658312731e+00 7.5038548940198513e-02 + -1.5572052709672835e+00 1.6468925058046708e+00 9.6833769103077227e-02 + -1.7428161435212823e+00 1.7339569272491284e+00 1.1639992538585286e-01 + -1.9313677460129850e+00 1.7643245826333454e+00 1.1470980315915544e-01 + -2.1210700501839406e+00 1.7134534780162529e+00 6.8039624850233904e-02 + -2.3014594176542693e+00 1.5622106644124205e+00 -4.0354311766118811e-02 + -2.4560353070346936e+00 1.3260865227893066e+00 -2.0905713449602881e-01 + -2.5601985831845409e+00 1.0628196376309440e+00 -4.0304133442122669e-01 + -2.6013276450063798e+00 8.1796631618456894e-01 -5.7805338139076268e-01 + -2.6193552767131481e+00 5.7367498416699070e-01 -7.3286844367511073e-01 + -2.7085385396642465e+00 2.8332473834029026e-01 -8.6796455808347761e-01 + -2.9456262340457924e+00 -3.6535731509028557e-02 -9.2368795713553298e-01 + -3.2969904646871186e+00 -3.3441063218414674e-01 -8.9296859070961565e-01 + id 12814 + loc 4.2175808548927307e-01 9.9180293083190918e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4637587559495870e-01:4.0370867248442793e-01:2.9692236738560029e-01:1.9878069904931853e-01:1.4336356737676439e+00:3.1874878634734810e-01:2.1401557921484655e+00:3.8051666329936545e-01:2.9997027397955836e+00:5.4637041183620283e-01:3.6366428706770724e+00:4.4858413060372593e-01:3.9912921510506538e+00 + CVs 20 + 1.8731211569232953e-01 5.8631671451911838e-01 5.8194764169375446e-01 + 4.0247938084770907e-01 1.0175917723869647e+00 9.1461816166694443e-01 + 6.2952269528523197e-01 1.3855008801195821e+00 1.1719004140721210e+00 + 8.6085350096033131e-01 1.7199002042319855e+00 1.4126156170190396e+00 + 1.0907570829395694e+00 2.0113365888848236e+00 1.6266907443079672e+00 + 1.3121007398691955e+00 2.2499758535623906e+00 1.7976459073757418e+00 + 1.5168651838856866e+00 2.4254645855583163e+00 1.9076962916212028e+00 + 1.6929406016183715e+00 2.5249883092948799e+00 1.9471358008025599e+00 + 1.8123296492416769e+00 2.5311578022059029e+00 1.9193214672605372e+00 + 1.8317037488373789e+00 2.4491986568017556e+00 1.8605496223500797e+00 + 1.7789291237526657e+00 2.3475955768107504e+00 1.8278162036348768e+00 + 1.7550268081354732e+00 2.2550357378725328e+00 1.8077837223091573e+00 + 1.7878575932583494e+00 2.1350199516198578e+00 1.7686783099052084e+00 + 1.8644040878818460e+00 1.9663565503607330e+00 1.7104105872593829e+00 + 1.9737379377695325e+00 1.7477270950852661e+00 1.6510944390675060e+00 + 2.1060877586144491e+00 1.4912127177146219e+00 1.6252526064518853e+00 + 2.2514072111979853e+00 1.2213313673572017e+00 1.6623846830481510e+00 + 2.4075394667310084e+00 9.3384610327759754e-01 1.7476688367768132e+00 + 2.5765445318089544e+00 5.7040075559329617e-01 1.8288559015616963e+00 + id 12815 + loc 5.0536066293716431e-01 7.1584147214889526e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9241562912829984e-01:3.7967460211467458e-01:1.4360451595620227e-01:4.0788334265430809e-01:1.0000236179845121e+00:3.6782757307215802e-01:1.9009573734728753e+00:4.9241070497200856e-01:2.2687785106588954e+00:3.5182031947240278e-01:2.9999984667172690e+00:3.1925111308741966e-01:3.7162191097633026e+00 + CVs 20 + -1.0738468654211832e-01 2.7442289961722027e-01 2.0047961507405798e-01 + -1.7703419871246967e-01 4.7444404926272110e-01 2.8118347478124539e-01 + -2.5701646836850300e-01 6.4160415874379573e-01 3.4289405782897087e-01 + -3.6214874464099894e-01 7.9022487078295667e-01 4.1232811675232839e-01 + -4.8913730132301597e-01 9.1593311932457544e-01 4.8470570224482201e-01 + -6.3408952386710815e-01 1.0152580241953331e+00 5.5579737861426715e-01 + -7.9265669844619058e-01 1.0859058037743168e+00 6.2218600826785408e-01 + -9.6069184385452233e-01 1.1264552337821661e+00 6.8194965340430258e-01 + -1.1341841161588884e+00 1.1359173505156632e+00 7.3467630024349306e-01 + -1.3092066531135209e+00 1.1136802282420404e+00 7.8142473828539805e-01 + -1.4828037638683520e+00 1.0592419486508566e+00 8.2467956631274353e-01 + -1.6534306622090853e+00 9.7184411019670736e-01 8.6788944414678015e-01 + -1.8205355986342002e+00 8.5054328671900448e-01 9.1471671449821490e-01 + -1.9835528436415550e+00 6.9486461024887758e-01 9.6801402193185326e-01 + -2.1409637086892253e+00 5.0584952051998577e-01 1.0292272100745796e+00 + -2.2897792812778768e+00 2.8701420503846586e-01 1.0984715544077184e+00 + -2.4253770405112980e+00 4.4597200317666452e-02 1.1747846407376770e+00 + -2.5425533873043586e+00 -2.1316789446706663e-01 1.2555877803314790e+00 + -2.6599312274214655e+00 -4.7877406779512854e-01 1.3335884319065769e+00 + id 12816 + loc 8.5806578397750854e-01 4.3965569138526917e-01 395 + blend 0.0000000000000000e+00 + interp 4.7023747438489694e-01:2.7829081057549776e-01:7.6688821747327607e-02:3.9656138883557679e-01:8.2739561675863915e-01:2.8391540193371667e-01:1.1000377838524362e+00:3.4466519944968499e-01:1.8480225847847231e+00:3.9586113149624286e-01:2.1494624914437397e+00:3.0047838438532659e-01:2.9527805558112803e+00:4.7023277201015312e-01:3.3218802025640501e+00 + CVs 20 + -3.1665694849291393e-01 1.7106243205498173e-01 4.4811361153204288e-01 + -5.9116444572245530e-01 2.9250470487397662e-01 7.7510907639516224e-01 + -8.6222295969742269e-01 3.9483545848730039e-01 1.0553206706831166e+00 + -1.1478411015062924e+00 4.9523578118131806e-01 1.3166338354340363e+00 + -1.4462562382987163e+00 5.9439193794850820e-01 1.5509986908000351e+00 + -1.7563947890974414e+00 6.9363880012069101e-01 1.7545443463560291e+00 + -2.0778402613098126e+00 7.9584414260582337e-01 1.9309254254417918e+00 + -2.4091676558832504e+00 9.0456327562968797e-01 2.0899237383685589e+00 + -2.7534810249768791e+00 1.0211033887705416e+00 2.2469036059783121e+00 + -3.1262618354362930e+00 1.1372257192368238e+00 2.4242230519116070e+00 + -3.5409155796994556e+00 1.2263045871016465e+00 2.6458752290208167e+00 + -3.9804568963706037e+00 1.2503559261998469e+00 2.9229141168060906e+00 + -4.4049790489559388e+00 1.1829771637211433e+00 3.2480718117159317e+00 + -4.7836665209832603e+00 1.0151746293258208e+00 3.6070445629220478e+00 + -5.1008171481282636e+00 7.4636196599413740e-01 3.9854786301829268e+00 + -5.3445120410728117e+00 3.8684826718541832e-01 4.3689921516287260e+00 + -5.5032999827681035e+00 -4.1084053900632078e-02 4.7386619198540743e+00 + -5.5721644383224280e+00 -5.1372841168937944e-01 5.0641017001975399e+00 + -5.5233522927308734e+00 -1.0100157446710880e+00 5.2540571896014407e+00 + id 12817 + loc 6.5659254789352417e-01 2.9856356978416443e-01 406 + blend 0.0000000000000000e+00 + interp 3.6983231684657930e-01:3.2668646377016819e-01:6.7023374770172039e-01:2.6578276138552875e-01:1.5733013915011260e+00:3.0897361585683958e-01:2.5658435838335234e+00:3.6982861852341087e-01:3.0612138368519148e+00:2.5837343046512290e-01:3.7786683468766515e+00 + CVs 20 + -1.5989445838919894e-01 1.8303717751619020e-01 -6.0866218282623410e-03 + -2.6391280114246041e-01 3.1821661937535117e-01 -2.0515503075570193e-02 + -3.4905448862282507e-01 4.2851175332239339e-01 -3.4815591937811113e-02 + -4.4503844321114461e-01 5.3625533822866456e-01 -4.1860924702501578e-02 + -5.5212667251475123e-01 6.3874714073033156e-01 -4.2104918937663272e-02 + -6.6936599670440688e-01 7.3327153779410392e-01 -3.6333750667896264e-02 + -7.9502459461939146e-01 8.1769831032945950e-01 -2.5813865854750484e-02 + -9.2676319762791615e-01 8.9069837920431094e-01 -1.2477498649632934e-02 + -1.0602448515396541e+00 9.5154486538062377e-01 1.1828694094692671e-03 + -1.1875760684392622e+00 1.0003144062541576e+00 1.2539875850010096e-02 + -1.3013239227552802e+00 1.0386859472082448e+00 1.9444181654070802e-02 + -1.4005220355358721e+00 1.0689699926480745e+00 2.1120902797206242e-02 + -1.4880524523247254e+00 1.0925440041372574e+00 1.8623607931091191e-02 + -1.5634726256711242e+00 1.1113934526555389e+00 1.1998965371572579e-02 + -1.6229361347498223e+00 1.1298820163186336e+00 -3.1020243935705460e-03 + -1.6656607161712853e+00 1.1536970462480083e+00 -3.2590473685251864e-02 + -1.6973356327869416e+00 1.1877555931727122e+00 -7.5894308542208522e-02 + -1.7249904246970538e+00 1.2347654645086410e+00 -1.2595843736122136e-01 + -1.7270913254915070e+00 1.2589196979697976e+00 -1.5728852816600769e-01 + id 12818 + loc 2.1584948897361755e-01 2.8886717557907104e-01 409 + blend 0.0000000000000000e+00 + interp 5.1150422134049722e-01:5.1149910629828388e-01:4.3268478886418715e-02:4.3102058833126949e-01:5.2714559451529552e-01:4.0306613869433139e-01:1.0010589505774399e+00:3.7018130488970169e-01:1.9785265389045577e+00:4.0929116345374383e-01:2.8508751670277164e+00:3.5760929995932145e-01:3.5120708424841460e+00 + CVs 20 + -3.0664160627243631e-01 2.0184361317953139e-01 -2.9632487742650948e-01 + -5.6824820462571035e-01 3.6813644420677860e-01 -5.6256072139045776e-01 + -8.0676591563622480e-01 5.2216775766997792e-01 -8.4690473080173212e-01 + -1.0282559402020996e+00 6.6270593341895356e-01 -1.1604890842891384e+00 + -1.2478968971904365e+00 7.7620086323921511e-01 -1.4921317532296063e+00 + -1.4939685648156611e+00 8.4969317830820135e-01 -1.8281904708257239e+00 + -1.7887120560739433e+00 8.6863113835502270e-01 -2.1490628779725616e+00 + -2.1348827423107806e+00 8.1574978935856191e-01 -2.4364183617949444e+00 + -2.5114686791851053e+00 6.7899408620135593e-01 -2.6859600518446074e+00 + -2.8844556064628515e+00 4.5724800867060322e-01 -2.8988669915935814e+00 + -3.2281320244534659e+00 1.3782774092749661e-01 -3.0768986577263067e+00 + -3.5496325134651276e+00 -3.1789296592518146e-01 -3.2316364198493996e+00 + -3.9024681336309759e+00 -9.0997419352704778e-01 -3.3732866269324315e+00 + -4.3623342541657371e+00 -1.5760369149266280e+00 -3.5096582045270206e+00 + -4.9962737905446888e+00 -2.2258474780676631e+00 -3.6494911425628409e+00 + -5.8121075885914379e+00 -2.7836492186635899e+00 -3.8083103155142162e+00 + -6.7473963526382592e+00 -3.2507704257526768e+00 -4.0229095918396078e+00 + -7.7140294120906967e+00 -3.6510732337941949e+00 -4.3187095856001596e+00 + -8.6247844259744060e+00 -3.9474096916097348e+00 -4.5757760901271816e+00 + id 12819 + loc 8.1865882873535156e-01 8.3657521009445190e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3550284220123012e-01:3.5935800396926421e-01:5.6476152392165302e-03:4.4012608498814298e-01:8.1413664875042835e-01:2.7875057763701572e-01:1.1181939845244102e+00:3.8030071177193370e-01:2.0506742607950965e+00:5.3549748717280810e-01:2.6786221437817765e+00:4.1091806442846313e-01:3.0694870492412747e+00 + CVs 20 + 2.4484582654564027e-01 3.4238663801191860e-01 -2.1732413431242764e-01 + 5.1201749432453025e-01 6.7665079936017059e-01 -4.2067846452407387e-01 + 8.1518693096523231e-01 9.5690460309435144e-01 -5.6954456776801088e-01 + 1.1415201227557725e+00 1.1350658432464100e+00 -6.5611415017048902e-01 + 1.4608633320671205e+00 1.2009767397822635e+00 -6.9836884318979642e-01 + 1.7366191580792356e+00 1.1672151913478197e+00 -7.1685604947764636e-01 + 1.9243141171609788e+00 1.0518621039300591e+00 -7.1794705180089058e-01 + 1.9958036753724724e+00 8.9546781450832103e-01 -6.9422228390421681e-01 + 1.9653477308978595e+00 7.5314059664240984e-01 -6.4154227232213079e-01 + 1.8773900026779962e+00 6.6298691650666597e-01 -5.6697488092669568e-01 + 1.7803978170273802e+00 6.3357790955022697e-01 -4.8276972561577969e-01 + 1.7089027061687745e+00 6.5205591217800585e-01 -4.0239151559690328e-01 + 1.6769972668826612e+00 6.9104621941426003e-01 -3.3964144916128386e-01 + 1.6697599217313706e+00 6.6959463660448193e-01 -2.8396275656571901e-01 + 1.6385353312646962e+00 5.2950075587959478e-01 -1.8725700095249212e-01 + 1.5776333793057127e+00 3.1447824449669326e-01 -3.2722172016684148e-02 + 1.5180640585316927e+00 7.9708562470612809e-02 1.6301698177824331e-01 + 1.4948120355356631e+00 -1.0526728183906275e-01 4.0257184639373988e-01 + 1.5611877177778888e+00 -5.4878058483011083e-03 6.5549105007706654e-01 + id 12820 + loc 4.7882962226867676e-01 7.8802770376205444e-01 264 + blend 0.0000000000000000e+00 + interp 4.3885293039086054e-01:4.3685563001018729e-01:7.0606054643189142e-01:3.9612553646137727e-01:1.1250051647596835e+00:3.1242473333075471e-01:1.9438307655791451e+00:4.3884854186155664e-01:2.4994585882865064e+00:3.9335161764526222e-01:3.0023898065075141e+00:2.6109707988921921e-01:3.5615238814471106e+00 + CVs 20 + -8.2710234927745274e-01 4.6848503649266265e-01 -2.1943494685707532e-01 + -1.5001705475307094e+00 7.5592358587268049e-01 -2.9424094059540917e-01 + -2.1577033788991038e+00 8.9233904066205616e-01 -2.4056177942848123e-01 + -2.8225406551323116e+00 9.6449080050055847e-01 -1.0269516079667140e-01 + -3.4825308138261653e+00 1.0477299462473031e+00 5.2783610477746490e-02 + -4.1521847305934827e+00 1.1576972482001684e+00 1.5105735997184855e-01 + -4.8279209078904364e+00 1.2714093832986952e+00 1.2778051127346357e-01 + -5.4714259276684301e+00 1.3650119221356336e+00 -4.8096858975450463e-02 + -6.0456949313705213e+00 1.4226467083263321e+00 -3.7279601409721663e-01 + -6.5366556612485240e+00 1.4290173102576951e+00 -8.2476939156167373e-01 + -6.9376235889621984e+00 1.3668503894162902e+00 -1.3673088061461125e+00 + -7.2372896037005550e+00 1.2244725419358340e+00 -1.9482287768741404e+00 + -7.4254237979415407e+00 1.0035814065995696e+00 -2.5109392771709018e+00 + -7.5077427313094089e+00 7.1895698537545893e-01 -3.0134606316587189e+00 + -7.5038947888018566e+00 3.6706989906181686e-01 -3.4486671467516876e+00 + -7.4259921772295820e+00 -1.3378702483829841e-01 -3.8313495641554187e+00 + -7.3456266555162646e+00 -8.3473718066681446e-01 -4.0600441669225074e+00 + -7.3944906807186577e+00 -1.5391797190095344e+00 -4.0191418803831462e+00 + -7.5565334031416711e+00 -2.0503935469393131e+00 -3.8301842220102760e+00 + id 12821 + loc 5.3550857305526733e-01 9.4171947240829468e-01 377 + blend 0.0000000000000000e+00 + interp 4.7631992759790814e-01:4.1931185597871223e-01:1.3525421876507115e-01:4.2116271642873104e-01:9.7306734956942931e-01:4.7631516439863220e-01:1.8610549777767371e+00:2.8933453893121802e-01:2.0564635412301344e+00:3.9983525081612625e-01:2.9974551133305032e+00:3.7725354869016903e-01:3.4400703345780634e+00 + CVs 20 + -6.4893513568088801e-01 2.3246803643854280e-01 -5.0527955268396985e-01 + -1.1310154087666482e+00 3.2231698092405919e-01 -8.4538407944157679e-01 + -1.5735501794470390e+00 3.4835371604459281e-01 -1.1562939433490864e+00 + -2.0276017910693724e+00 3.4294010408103892e-01 -1.4990890998031259e+00 + -2.4939926579361806e+00 3.0407536985698103e-01 -1.8812963641400684e+00 + -2.9707575794234025e+00 2.2771993158650017e-01 -2.3038801288089208e+00 + -3.4556336835407766e+00 1.0149480816012812e-01 -2.7610057393077945e+00 + -3.9371101100269765e+00 -9.1206540971063399e-02 -3.2421512976270161e+00 + -4.3946625254292400e+00 -3.6302854483264912e-01 -3.7310686058372244e+00 + -4.8094524690838147e+00 -7.1566900062971861e-01 -4.1966489874379800e+00 + -5.1626192788754137e+00 -1.1381790634821152e+00 -4.5943224392790105e+00 + -5.4302798118452849e+00 -1.6094612769073606e+00 -4.8873972347032817e+00 + -5.6083610425274504e+00 -2.1061720710204872e+00 -5.0751984229652631e+00 + -5.7379713932570091e+00 -2.6201725249451400e+00 -5.2096030993793123e+00 + -5.8693241835902592e+00 -3.1459776731409730e+00 -5.3603687492992975e+00 + -6.0326616189414333e+00 -3.6564506313161727e+00 -5.5494879602685074e+00 + -6.2473105262972703e+00 -4.1256842032365775e+00 -5.7483169525467215e+00 + -6.4932309748388546e+00 -4.5372287731145278e+00 -5.9238298451312978e+00 + -6.6216631291531165e+00 -4.8810939498656571e+00 -6.1041210042539547e+00 + id 12822 + loc 6.8082487583160400e-01 1.6493365168571472e-01 411 + blend 0.0000000000000000e+00 + interp 4.6557650788161647e-01:2.9249824384141548e-01:1.0256869436689964e-01:3.3398914663782392e-01:9.9151018100486388e-01:4.5089317915915650e-01:1.4066598481520343e+00:3.0980031387165408e-01:2.2760928476415709e+00:3.4101203198827157e-01:3.0457087447830853e+00:4.6557185211653768e-01:3.7588297680260441e+00 + CVs 20 + -6.4541165618526164e-01 2.7132887960537061e-01 1.2275866359056531e-01 + -1.1419654873373426e+00 4.5795198904985546e-01 2.4040985663924491e-01 + -1.5879099825806151e+00 6.1757547832671611e-01 3.3979892977352760e-01 + -2.0376416777664810e+00 7.7088133625512045e-01 4.2106235408517056e-01 + -2.4916549658085718e+00 9.1312055066886555e-01 4.8048437643281294e-01 + -2.9502291284962578e+00 1.0398738037069761e+00 5.1841148048219865e-01 + -3.4175574703918254e+00 1.1455488100878410e+00 5.4036160681094281e-01 + -3.9027065420499247e+00 1.2213639792062001e+00 5.5202128835589559e-01 + -4.4152704692336631e+00 1.2542540956251025e+00 5.5561421841987491e-01 + -4.9600737952726774e+00 1.2261767293274133e+00 5.5608677352652480e-01 + -5.5285871578682917e+00 1.1176755242665324e+00 5.6366531913490436e-01 + -6.0925594361254554e+00 9.1906484004065447e-01 5.8856553172208481e-01 + -6.6213888564069769e+00 6.3705247023718670e-01 6.3297614738464303e-01 + -7.1009833961286954e+00 2.8388627727828153e-01 6.9428712066189624e-01 + -7.5265437553597181e+00 -1.2984507371702358e-01 7.7277365473905646e-01 + -7.8932357639652393e+00 -5.9395120855502137e-01 8.7165541666495538e-01 + -8.1949763384494076e+00 -1.0945323632531032e+00 9.9093970732926384e-01 + -8.4258185211629382e+00 -1.6043945645295699e+00 1.1222334977322519e+00 + -8.5491007711474367e+00 -1.9201865680363053e+00 1.2321178337904095e+00 + id 12823 + loc 5.4322886466979980e-01 1.4372344315052032e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1102967462612405e-01:3.4999479049809795e-01:6.0882027382748061e-02:4.1102556432937781e-01:7.3680183390037290e-01:3.3341560510034068e-01:1.1541531818027189e+00:2.8717667292118138e-01:1.9459424321618131e+00:3.7369794799594191e-01:2.7525211056225753e+00:2.5671492541639807e-01:3.3245463307778116e+00 + CVs 20 + -7.2579202546145943e-02 4.6101176478583883e-01 -4.8230269627467215e-01 + -1.4642202164668650e-01 8.1633555701727123e-01 -7.6770783412985077e-01 + -2.2539292289226659e-01 1.1334843125488714e+00 -9.9219106452564887e-01 + -3.1631571156263383e-01 1.4474733242446856e+00 -1.2143986580152371e+00 + -4.2646768482653924e-01 1.7521464321709974e+00 -1.4268646583222702e+00 + -5.6309222645828561e-01 2.0412009288110955e+00 -1.6195259686109780e+00 + -7.3313565281380411e-01 2.3065657179878887e+00 -1.7807556535831526e+00 + -9.4412210729801027e-01 2.5386474779861121e+00 -1.8991070463214379e+00 + -1.2047249660465191e+00 2.7226796281349674e+00 -1.9624896409616175e+00 + -1.5102014510028789e+00 2.8297329433624774e+00 -1.9552203341863523e+00 + -1.8159280810826719e+00 2.8320960591521809e+00 -1.8754333544708937e+00 + -2.0724177229437433e+00 2.7394034940569441e+00 -1.7487656526190221e+00 + -2.2688538799054871e+00 2.5765072402289122e+00 -1.5996948944313751e+00 + -2.4119833814627949e+00 2.3554020346498543e+00 -1.4401262135308923e+00 + -2.5083116433001047e+00 2.0769832036880027e+00 -1.2798074633168088e+00 + -2.5624346271061906e+00 1.7356661076643674e+00 -1.1409790172224434e+00 + -2.5724513680592938e+00 1.3362900281409604e+00 -1.0792755107193233e+00 + -2.5283382458921415e+00 9.1363809621403047e-01 -1.1483889042188724e+00 + -2.4489363116411140e+00 4.3982852070064044e-01 -1.2753638683205410e+00 + id 12824 + loc 7.2092181444168091e-01 3.8328844308853149e-01 403 + blend 0.0000000000000000e+00 + interp 4.8760157967468554e-01:3.3729009074799515e-01:1.7642384090559582e-01:3.7592573315364497e-01:9.9888004649275430e-01:2.8813989932007306e-01:1.6720020090262575e+00:3.9732834125422917e-01:2.3975689579329975e+00:3.7477637416227211e-01:3.0602045849239321e+00:4.8759670365888880e-01:3.9262292977707367e+00 + CVs 20 + 5.4554396362320949e-02 1.3872822282889274e-01 -8.0922518534529506e-03 + 1.0184909110489124e-01 2.8215064068715073e-01 8.5766783985095560e-03 + 1.4206280752331482e-01 4.1909155340427839e-01 2.1881451161431680e-02 + 1.7560889545994826e-01 5.4803255182599508e-01 2.9970455397409418e-02 + 2.0476866669874139e-01 6.6690522083998960e-01 3.5254279037058849e-02 + 2.3263371722195636e-01 7.7405731744273698e-01 4.0158989120225537e-02 + 2.6274947209944838e-01 8.6782820812886552e-01 4.6270924411262036e-02 + 2.9954183303615350e-01 9.4472231862240119e-01 5.2578668268193948e-02 + 3.4597037768296235e-01 1.0008758711740233e+00 5.6387369973457384e-02 + 3.9957990923234099e-01 1.0363392639428120e+00 5.5309308393760512e-02 + 4.5390193109197585e-01 1.0593598989827067e+00 5.0954949524672694e-02 + 5.0667296210309509e-01 1.0821514597154411e+00 4.9155994786125756e-02 + 5.6283007496920745e-01 1.1128720442183022e+00 5.5622207682462649e-02 + 6.3050335372666988e-01 1.1543123127747301e+00 7.2883660765988151e-02 + 7.1725476880434536e-01 1.2064142416011570e+00 9.9668939082272132e-02 + 8.2943396146761694e-01 1.2669449899690233e+00 1.3128574287602035e-01 + 9.7333790800812903e-01 1.3293404832102631e+00 1.5953897919239840e-01 + 1.1536252869533676e+00 1.3819051548143988e+00 1.7280349240357940e-01 + 1.3659852126380201e+00 1.4525897740654534e+00 2.5341043335859315e-01 + id 12825 + loc 5.6614655256271362e-01 5.8725380897521973e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8986454586486313e-01:3.4137752489720691e-01:3.2075665314118507e-01:3.8945928344947933e-01:1.0925723525641018e+00:2.7870483471088225e-01:1.8343926599428686e+00:3.3851810220852618e-01:2.4527846454595061e+00:3.8986064721940450e-01:3.0704197531842645e+00:2.5572993569423508e-01:3.6646205624478139e+00 + CVs 20 + 1.0566117931062360e-01 3.4817794564959542e-01 -2.3224520690094688e-01 + 2.3268417244546621e-01 6.9574687963407533e-01 -4.9151841376166927e-01 + 3.7031067841877818e-01 1.0338228139501298e+00 -7.7459391785921938e-01 + 5.1103652417864431e-01 1.3494441224051352e+00 -1.0811314031241244e+00 + 6.4988838591617748e-01 1.6227381220901180e+00 -1.4109966886791461e+00 + 7.8323997434255066e-01 1.8247995976727367e+00 -1.7584910185546172e+00 + 9.1009641512706219e-01 1.9334806994913025e+00 -2.1093127165952543e+00 + 1.0299951056047056e+00 1.9443590973725251e+00 -2.4383440422165288e+00 + 1.1388327813517722e+00 1.8676964882815776e+00 -2.7180268547475737e+00 + 1.2348808823659072e+00 1.7292132515809910e+00 -2.9448892855562940e+00 + 1.3326491017879045e+00 1.5527583407439152e+00 -3.1536434072290263e+00 + 1.4531115775634655e+00 1.3470367690519143e+00 -3.3841096840521727e+00 + 1.5907954735860812e+00 1.1272302531189546e+00 -3.6439037666228415e+00 + 1.7082593370571191e+00 9.1980713263685021e-01 -3.9191570562651590e+00 + 1.7749307382320354e+00 7.4229150760354123e-01 -4.2130527614573534e+00 + 1.7769660316744809e+00 6.1003236007054806e-01 -4.5483067012113860e+00 + 1.7026940728485105e+00 5.5822436383563812e-01 -4.9167648178918970e+00 + 1.5769780567172433e+00 5.9271973799899835e-01 -5.3005922121360918e+00 + 1.4525536505853007e+00 6.3051045079812407e-01 -5.7840720633292397e+00 + id 12826 + loc 8.7794613838195801e-01 5.3531289100646973e-01 1081 + blend 0.0000000000000000e+00 + interp 4.5972124003723985e-01:3.6069193834897162e-01:9.3522563215509125e-01:2.7681857751430528e-01:1.4392739671832047e+00:3.6366073308995917e-01:2.1044877593569158e+00:4.5971664282483948e-01:2.9658170476134309e+00:3.6948439139946571e-01:3.2419295724507493e+00:3.9035596817823953e-01:3.9998542848490155e+00 + CVs 20 + -4.6358738822550427e-02 4.3214385207819717e-01 3.9995521916111787e-01 + -4.7337639315612273e-02 7.7796372367076150e-01 6.6573124206652223e-01 + -2.8854936042413348e-02 1.0977948591955071e+00 8.8090874583833001e-01 + -2.0651568284583144e-03 1.4260598482830074e+00 1.0893842620793561e+00 + 3.8306016191550329e-02 1.7630783341502567e+00 1.2861994615886281e+00 + 1.0046364593455970e-01 2.1144873436148091e+00 1.4602221771441637e+00 + 1.9861809929064045e-01 2.4907581865961932e+00 1.5822605683858759e+00 + 3.5306251939894773e-01 2.8964777463944258e+00 1.5956515526504473e+00 + 5.7334980706823035e-01 3.2883403424833393e+00 1.4129968643432689e+00 + 8.0404379143892535e-01 3.5305160324002722e+00 1.0173016149904128e+00 + 9.6884476728268176e-01 3.5595782457797172e+00 5.5075391665072315e-01 + 1.0661511409675872e+00 3.4399606379915939e+00 1.0996507687781421e-01 + 1.1214354056064302e+00 3.2220601963336213e+00 -2.9783373269330893e-01 + 1.1540161125136335e+00 2.9188987136585340e+00 -6.8168573419977541e-01 + 1.1760218544535419e+00 2.5030942871968294e+00 -1.0448085826880478e+00 + 1.1883871826564119e+00 1.8837181856569027e+00 -1.3454480262672861e+00 + 1.1837936528600288e+00 1.0394582515704145e+00 -1.4255313329412171e+00 + 1.1697132178382097e+00 2.3926574827293967e-01 -1.2499070039823943e+00 + 1.1645517859823760e+00 -2.0629113534038990e-01 -1.1985426663958136e+00 + id 12827 + loc 1.9023685157299042e-01 7.3081076145172119e-01 373 + blend 0.0000000000000000e+00 + interp 4.8867044458825781e-01:4.8866555788381194e-01:1.2214740941796642e-02:3.3853473100888032e-01:9.3989127365566794e-01:3.7092713858835574e-01:1.6121866991863938e+00:4.0636845025510665e-01:2.0080337782244690e+00:3.5576593418714469e-01:2.5247243148448923e+00:3.4349168886755332e-01:3.2776061263655998e+00 + CVs 20 + -4.1752895740573898e-01 6.0311805685631636e-01 -1.2004470695895877e-01 + -7.4702714729025477e-01 1.1770865795426655e+00 -2.6886567222759478e-01 + -9.6300421261050084e-01 1.7457340787884092e+00 -4.6213917159805856e-01 + -1.0559196474348642e+00 2.3131847145914559e+00 -7.0761087986476923e-01 + -1.0334341681165782e+00 2.8540323475097065e+00 -1.0107064982037239e+00 + -9.4384896167720578e-01 3.3402622917207658e+00 -1.3826564316809733e+00 + -8.5756917564576252e-01 3.7483962946068572e+00 -1.8433546627877220e+00 + -8.4581640756806220e-01 4.0598562052338334e+00 -2.4021358793590388e+00 + -9.6581118969757163e-01 4.2610103122466851e+00 -3.0353394061345389e+00 + -1.2583757079431299e+00 4.3493024679864369e+00 -3.6867642560100240e+00 + -1.7405111065953547e+00 4.3203453435121624e+00 -4.2874657657998423e+00 + -2.3673312932333745e+00 4.1550706807712272e+00 -4.7895536685756142e+00 + -3.0479042490021624e+00 3.8335348816987929e+00 -5.1770959068861888e+00 + -3.6885091184825969e+00 3.3704729241404738e+00 -5.4302419939568933e+00 + -4.2272540063016750e+00 2.8167821745645183e+00 -5.5323376621748537e+00 + -4.6489566628095345e+00 2.2207480769381869e+00 -5.4902577460620705e+00 + -4.9380910562148150e+00 1.6214640340552722e+00 -5.3344705248083599e+00 + -5.0283329927395322e+00 1.1245757533800713e+00 -5.1075021254012984e+00 + -5.0062465825352787e+00 7.0025478506297523e-01 -4.8837380367879257e+00 + id 12828 + loc 3.8911077380180359e-01 5.4178631305694580e-01 406 + blend 0.0000000000000000e+00 + interp 4.3778924744154057e-01:3.1234026276055388e-01:1.9892657687000714e-01:3.6206804328518694e-01:1.1651985950985941e+00:2.8975710527628440e-01:2.0609520648437805e+00:3.0110412926540303e-01:3.0001126594851475e+00:4.3778486954906620e-01:3.7682158582613403e+00 + CVs 20 + 3.1659437992612866e-01 2.7276126087014768e-01 -6.6778719066851788e-02 + 5.5191544570493256e-01 4.8178856352521748e-01 -8.8497858002840435e-02 + 7.7858301936380270e-01 6.1191390866889095e-01 -9.2589214871345665e-02 + 1.0305079874671541e+00 7.0483541162878072e-01 -7.2777011368398231e-02 + 1.3008925773335636e+00 7.5391442794973007e-01 -2.9393521743689921e-02 + 1.5812433148699268e+00 7.5360988532501194e-01 3.5724080165371208e-02 + 1.8622429079553489e+00 7.0116638799670239e-01 1.2123756111580064e-01 + 2.1341017113036784e+00 5.9650258632036901e-01 2.2668679227869637e-01 + 2.3858080509830044e+00 4.4021789382256871e-01 3.4708810451541960e-01 + 2.6060527576373356e+00 2.3376990356912053e-01 4.6697113365846399e-01 + 2.7876905292029184e+00 -1.6945741573110462e-02 5.7073250262646757e-01 + 2.9300070411904207e+00 -3.0116398123358756e-01 6.5903411779988297e-01 + 3.0359887362477553e+00 -6.0782336436986251e-01 7.4256275166806951e-01 + 3.1085803448365970e+00 -9.2825596202013383e-01 8.2352494528251163e-01 + 3.1508127354480733e+00 -1.2553856140325641e+00 8.9274038671043776e-01 + 3.1662662729960580e+00 -1.5833410449118488e+00 9.4196002598288575e-01 + 3.1577483978234766e+00 -1.9070597254029797e+00 9.7304661051657959e-01 + 3.1315182213308530e+00 -2.2217118373399547e+00 9.9447676941854757e-01 + 3.2079565944331718e+00 -2.5304819615794933e+00 1.0886226500400227e+00 + id 12829 + loc 8.1317794322967529e-01 6.8680369853973389e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9519191553026626e-01:4.9518696361111098e-01:3.1134538689544522e-03:3.7314536860401692e-01:4.9900870349101045e-01:3.7447327309772810e-01:1.4172332273774977e+00:2.7670581665227439e-01:1.9995988137984047e+00:3.6235739788056609e-01:2.5300989329704264e+00:4.8224851720950501e-01:3.0048223183818794e+00:3.6576575987602344e-01:3.5773324204171955e+00 + CVs 20 + 2.2700079948724425e-01 2.8963037231763639e-01 -1.5779676024571027e-01 + 4.3990921010201595e-01 5.9207010230757673e-01 -3.3080537481436634e-01 + 6.4535222817263271e-01 8.8019890414133750e-01 -5.4236081229462418e-01 + 8.4411936039575097e-01 1.1300562470890232e+00 -8.0525368423173893e-01 + 1.0292445288137988e+00 1.3203805224428566e+00 -1.1204971792424101e+00 + 1.1890568311871634e+00 1.4326148789097608e+00 -1.4787314746633449e+00 + 1.3081883182518053e+00 1.4550456388241084e+00 -1.8597132692456151e+00 + 1.3699512285865887e+00 1.3859416219553045e+00 -2.2329994822034438e+00 + 1.3641534375962980e+00 1.2360477562603018e+00 -2.5628339258222592e+00 + 1.2957241968086179e+00 1.0264529687912201e+00 -2.8187920428074458e+00 + 1.1835396111204042e+00 7.8215016085137679e-01 -2.9833494113059920e+00 + 1.0550943475687666e+00 5.1850379898894283e-01 -3.0692570125265490e+00 + 9.3071432268290866e-01 2.2414900563516205e-01 -3.1268171623590004e+00 + 8.1043444534408304e-01 -1.2078323946628733e-01 -3.2344387965136487e+00 + 6.8352115852080819e-01 -4.9383268059159247e-01 -3.5222341787402813e+00 + 5.7554155613731162e-01 -7.3213463936401268e-01 -4.0837210348622630e+00 + 5.7010902859901047e-01 -6.3049365684919678e-01 -4.7985450249681376e+00 + 7.9910485369756856e-01 3.8611808531018976e-02 -5.4233434247627290e+00 + 8.3605686954356440e-01 1.5755397154103923e-01 -5.5956433175451670e+00 + id 12830 + loc 4.4619068503379822e-02 9.2984789609909058e-01 409 + blend 0.0000000000000000e+00 + interp 4.3817291980445722e-01:3.5992985160897867e-01:4.7363211871221833e-02:1.4669186264161704e-01:9.9988959029477897e-01:2.9833685468947130e-01:1.7485750028615761e+00:3.9219924984459875e-01:2.0621275066322755e+00:4.2768917846816773e-01:2.8138698661298758e+00:4.3816853807525918e-01:2.8982812786368877e+00:4.0298470766327810e-01:3.1305187272749122e+00:2.9836661836395578e-01:3.7110551195679600e+00 + CVs 20 + 6.1846317301399945e-01 2.2250432551981339e-01 -2.1474020863148713e-01 + 1.0974463743607454e+00 3.4820517706172899e-01 -3.8935891176314164e-01 + 1.5478804065014782e+00 4.3883581847786368e-01 -5.3605570606543318e-01 + 1.9988870470434912e+00 5.1167225881261214e-01 -6.5671398725857477e-01 + 2.4364681258986223e+00 5.6373587996994934e-01 -7.5608940729915530e-01 + 2.8614260856587754e+00 5.9932864431841248e-01 -8.4948350330459133e-01 + 3.2799214931204745e+00 6.2233920027818757e-01 -9.6536209298190112e-01 + 3.6861558955868268e+00 6.3071217119985157e-01 -1.1379211518778507e+00 + 4.0724302761322519e+00 6.1699582186712010e-01 -1.3927113737947898e+00 + 4.4425133114078417e+00 5.5849938643294994e-01 -1.7427305900836503e+00 + 4.7963812108350350e+00 3.8536541630053489e-01 -2.1695952755037617e+00 + 5.1095455115902570e+00 6.9866539529686023e-03 -2.5992773669683538e+00 + 5.3541398802272395e+00 -5.7591165293785096e-01 -2.9864735292766440e+00 + 5.5295573443898931e+00 -1.2745800292771121e+00 -3.3786181123232693e+00 + 5.6568994125205174e+00 -1.9847423080092157e+00 -3.8402394335152987e+00 + 5.7692535110579044e+00 -2.6332369843106749e+00 -4.3954971786695287e+00 + 5.9066372718860158e+00 -3.2085981487614212e+00 -5.0228404595475764e+00 + 6.1012590924917216e+00 -3.7388250743090476e+00 -5.6921522120526582e+00 + 6.3210005193851266e+00 -4.2648759893325048e+00 -6.4100302737369050e+00 + id 12831 + loc 8.6305308341979980e-01 3.1580683588981628e-01 1076 + blend 0.0000000000000000e+00 + interp 3.6884958785194216e-01:2.9080172356647749e-01:1.8840283369397370e-01:2.3198076379693541e-01:1.5335905995444608e+00:3.6884589935606366e-01:2.5079492373171184e+00:2.4372372301526130e-01:3.1118971639058799e+00 + CVs 20 + -2.2633679524922470e-01 2.8237328824006080e-01 2.0771600883140845e-01 + -4.4557093593585617e-01 5.6670566899433172e-01 3.8993820510285487e-01 + -6.6612661663455797e-01 8.4563700416610965e-01 5.6511267533767795e-01 + -8.8758879264299539e-01 1.1179089552931201e+00 7.4405466035392098e-01 + -1.0991763723977068e+00 1.3845745255953144e+00 9.3225790807870301e-01 + -1.3023227113484377e+00 1.6407601449299278e+00 1.1535168664164455e+00 + -1.5190311191992962e+00 1.8730698982167173e+00 1.4431977384856809e+00 + -1.7724195816749981e+00 2.0688108399178122e+00 1.8140324932697693e+00 + -2.0741742811842427e+00 2.2170731576007716e+00 2.2511387140451857e+00 + -2.4332437077496758e+00 2.2980499867671034e+00 2.7325482999940185e+00 + -2.8548229677518502e+00 2.2746297084997553e+00 3.2390323333412692e+00 + -3.3164239406526388e+00 2.0905953039090210e+00 3.7540688511767328e+00 + -3.7260380933119928e+00 1.6888894998595565e+00 4.2618826623023782e+00 + -3.9413125288843136e+00 1.0831542613144709e+00 4.7106795218985464e+00 + -3.8955762816268025e+00 3.9757710983717531e-01 5.0577238399967213e+00 + -3.5800739782070874e+00 -2.4228469288621413e-01 5.3227544874622277e+00 + -2.9206069106534089e+00 -5.7510612650204340e-01 5.5458697996050041e+00 + -2.2571481818070649e+00 -2.2294152705430370e-01 5.7373889902614925e+00 + -1.8251792650800684e+00 -1.2758935925489712e-01 5.9304707559049747e+00 + id 12832 + loc 8.7059408426284790e-02 1.4682905375957489e-01 395 + blend 0.0000000000000000e+00 + interp 4.6719544037811606e-01:4.6719076842371232e-01:2.6068182199031398e-02:2.6989703933267373e-01:9.7597186999921959e-01:3.7360831380308879e-01:1.4871163367764315e+00:2.9587593329678719e-01:2.0144815325984324e+00:3.3589716613766329e-01:2.6976335455370171e+00:3.1069309719781990e-01:3.1900530086692678e+00 + CVs 20 + -2.1345142116858412e-01 1.5500791010605930e-01 -3.0338274000117160e-01 + -3.9367712638983043e-01 3.1092087054321760e-01 -6.0050810130727383e-01 + -5.5434864686908969e-01 4.7049629245413149e-01 -8.9065682089653375e-01 + -7.0098404403009529e-01 6.3229362493550045e-01 -1.1725708795026515e+00 + -8.3732969227370768e-01 7.9315908532305324e-01 -1.4463699295687842e+00 + -9.6913333214810304e-01 9.5050807750377975e-01 -1.7133410925096624e+00 + -1.1020620690008522e+00 1.1010549795271842e+00 -1.9761432912187415e+00 + -1.2413142963803323e+00 1.2390240595110256e+00 -2.2408609858132129e+00 + -1.3944897546531885e+00 1.3554916441023033e+00 -2.5196205632511823e+00 + -1.5717941326333986e+00 1.4355420873922342e+00 -2.8242093788776419e+00 + -1.7788965616045491e+00 1.4586445036712963e+00 -3.1495249646902335e+00 + -2.0099213488150220e+00 1.4111418633331110e+00 -3.4712567719768881e+00 + -2.2530106456000318e+00 1.2936383458920531e+00 -3.7680151937567095e+00 + -2.4992449150840206e+00 1.1121663368727943e+00 -4.0314284904503985e+00 + -2.7419690233095335e+00 8.7352136352506848e-01 -4.2566080985612453e+00 + -2.9733306268659572e+00 5.8587371414994571e-01 -4.4384926901090145e+00 + -3.1812377179331448e+00 2.6005336253315603e-01 -4.5736193291931553e+00 + -3.3516411630148117e+00 -8.4768873439272863e-02 -4.6589321766976290e+00 + -3.4710504642315403e+00 -3.9280602112081198e-01 -4.6916204027832382e+00 + id 12833 + loc 7.1195262670516968e-01 1.5543784201145172e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8356024032196870e-01:3.3108834086290251e-01:5.8594621329496333e-03:4.5698936249284206e-01:5.4057662994677869e-01:4.8355540471956548e-01:9.9421645398758129e-01:3.2218287477265123e-01:1.6957255394065458e+00:3.5969320079469491e-01:2.0864350318194478e+00:3.4232772435468850e-01:2.7026766468676575e+00:2.8965860164548507e-01:3.2884272219184476e+00 + CVs 20 + -6.8555908196229101e-02 4.7490704564230979e-01 -4.6424346194434329e-01 + -1.5417063870657979e-01 8.7265061939537414e-01 -7.4664201936137364e-01 + -2.5457622261320456e-01 1.2457777153481764e+00 -9.7144132880228151e-01 + -3.8070061997859395e-01 1.6234259876218116e+00 -1.1761150214301448e+00 + -5.3948353662776283e-01 1.9971345680723391e+00 -1.3511622542048223e+00 + -7.4152753894231671e-01 2.3560002362657162e+00 -1.4822343643453684e+00 + -9.9949292232935505e-01 2.6820460656011997e+00 -1.5500871092448858e+00 + -1.3235859279208333e+00 2.9468736602917884e+00 -1.5341026760567829e+00 + -1.7083073189946079e+00 3.1073406898857665e+00 -1.4147637481624546e+00 + -2.1045929271347679e+00 3.1213891541443557e+00 -1.1965322210463105e+00 + -2.4445212454749470e+00 2.9995077389515696e+00 -9.2741718577837540e-01 + -2.7095678010676836e+00 2.7931783253831357e+00 -6.5556512547323353e-01 + -2.9207818478400336e+00 2.5349029926775057e+00 -4.0008687916777197e-01 + -3.1022554538529530e+00 2.2279794386835046e+00 -1.7014172143137607e-01 + -3.2738575309544453e+00 1.8446755729213762e+00 1.1366355646077464e-02 + -3.4412451562058117e+00 1.3360036947975154e+00 7.0754233088885232e-02 + -3.5708091096517194e+00 7.5882571532093657e-01 -9.4659207537128198e-02 + -3.6381492464384215e+00 2.7490413524002272e-01 -4.0443469680209670e-01 + -3.6994015350732496e+00 -8.6833104934985611e-02 -6.2402911511642323e-01 + id 12834 + loc 2.2124892473220825e-01 3.1290546059608459e-02 417 + blend 0.0000000000000000e+00 + interp 3.0177960343663818e-01:2.2608079116753804e-01:8.0588063556037848e-01:2.6003026335527119e-01:1.5446868663452287e+00:1.9660843095567629e-01:2.0958414708267412e+00:3.0177658564060383e-01:2.9123339053014350e+00:2.2511189622418570e-01:3.5854139683703155e+00 + CVs 20 + -2.7603379022782615e-01 -2.0325505392286961e-02 2.1270153723343371e-01 + -4.2838840399892852e-01 -7.2974479310146112e-02 3.7250121444529993e-01 + -5.4065657301755909e-01 -1.3599203499397483e-01 5.3098398918514844e-01 + -6.6837992300549254e-01 -1.8814722854545107e-01 7.0334746680779603e-01 + -8.1291659948738326e-01 -2.2971198044394225e-01 8.8471902501683708e-01 + -9.7404697653960903e-01 -2.6225900977424838e-01 1.0689841178323707e+00 + -1.1505919577630186e+00 -2.8878948358831308e-01 1.2500336578781175e+00 + -1.3406857248970561e+00 -3.1326528968644585e-01 1.4224639997733834e+00 + -1.5413450579769776e+00 -3.3998677613041628e-01 1.5814079448068752e+00 + -1.7475421289604069e+00 -3.7384602508467435e-01 1.7213004244053132e+00 + -1.9547769087220981e+00 -4.2042958253523044e-01 1.8374523167038728e+00 + -2.1656665990975612e+00 -4.8442529612212781e-01 1.9289667484285704e+00 + -2.3875460793650074e+00 -5.6787066065131431e-01 1.9962522286525388e+00 + -2.6215496225146069e+00 -6.6987864690131593e-01 2.0388084000918960e+00 + -2.8602934977538075e+00 -7.8720668177761777e-01 2.0593788501258752e+00 + -3.0967279806991539e+00 -9.1611532941614060e-01 2.0657351402918431e+00 + -3.3305277692425688e+00 -1.0546459459996231e+00 2.0636846609040758e+00 + -3.5654771984348108e+00 -1.2020137749421795e+00 2.0520954771124291e+00 + -3.8244602067946021e+00 -1.3274488233849000e+00 2.0678738117651343e+00 + id 12835 + loc 3.3587887883186340e-01 2.3004770278930664e-01 411 + blend 0.0000000000000000e+00 + interp 3.9571642222000997e-01:3.6930548130119140e-01:2.6461943635411256e-01:2.8195707788463736e-01:1.0006653531205609e+00:3.1291725607646609e-01:1.9641421042763088e+00:3.9571246505578778e-01:2.4078137885605817e+00:2.8779058810482433e-01:3.0254001853606876e+00:3.1016079745622255e-01:3.9376725606317584e+00 + CVs 20 + -5.3792326507738089e-02 1.5516420044583740e-01 -6.1579451469501911e-01 + -1.1500939118263170e-01 2.3187841080567881e-01 -1.0664862679341929e+00 + -1.5630551122572262e-01 2.7859681201787806e-01 -1.4749702713965391e+00 + -1.6425568800811516e-01 3.1476929534931097e-01 -1.8864176806977373e+00 + -1.4040731191786462e-01 3.3797047511311584e-01 -2.2927622434270964e+00 + -8.9842539330683022e-02 3.4946692976901639e-01 -2.6879604405419446e+00 + -2.0161792096794973e-02 3.5439687443943502e-01 -3.0689243273699676e+00 + 6.1571900011379133e-02 3.5862970606377531e-01 -3.4363707939323116e+00 + 1.5261919075495600e-01 3.6479217356740090e-01 -3.7959196390035039e+00 + 2.5309631924434567e-01 3.7245112101284983e-01 -4.1553422791469385e+00 + 3.6015018864958509e-01 3.7557249589536768e-01 -4.5225363462792201e+00 + 4.6702855136409871e-01 3.5491335894289167e-01 -4.9034742752822735e+00 + 5.6365815593251933e-01 2.8713204454871577e-01 -5.2951285576587424e+00 + 6.3982833304186326e-01 1.5957773914348472e-01 -5.6905133552441498e+00 + 6.8614894996388087e-01 -2.7594742845889808e-02 -6.0823061017819402e+00 + 6.8936150052720602e-01 -2.6654424219432871e-01 -6.4620206220452987e+00 + 6.4382673643942767e-01 -5.5055265591519653e-01 -6.8158674189459934e+00 + 5.6782814168794760e-01 -8.7468928941001156e-01 -7.1163518603496829e+00 + 4.5558280963736802e-01 -1.1777439422505362e+00 -7.2229104312747552e+00 + id 12836 + loc 9.9712252616882324e-01 4.9139323830604553e-01 406 + blend 0.0000000000000000e+00 + interp 2.7555873483961344e+00:2.7555773483961343e+00:1.0303253998246487e+00:2.3542779426242428e+00:1.0504817853708688e+00:1.8518440607370108e+00:1.0929096116237482e+00:5.9472716606992249e-01:1.4553818560939780e+00:3.5482296994497792e-01:1.9291145254255224e+00:4.2255570456737984e-01:2.1230970454942915e+00:2.4052392721789528e-01:3.0141371561785912e+00:6.1475159129260248e-01:3.1879532458083588e+00:2.3999844952179448e+00:3.3741268507088544e+00 + CVs 20 + -2.6683453151338166e-01 1.2096059215206978e-01 9.9515636759795537e-02 + -4.3665357339666022e-01 1.5654858873028882e-01 1.7468704783278005e-01 + -5.3608266955963557e-01 1.4143129681607991e-01 2.2911142072498755e-01 + -6.2058534619015859e-01 1.1594886286860787e-01 2.8157592538943088e-01 + -6.8837873154236373e-01 8.4684578347318656e-02 3.3147668680150832e-01 + -7.3927884767161411e-01 5.2571547962530829e-02 3.7847645078366743e-01 + -7.7646069302469500e-01 2.4282322912029253e-02 4.2382217182033455e-01 + -8.0604949233860046e-01 2.7794992958554143e-03 4.7055864225215693e-01 + -8.3053833657552190e-01 -9.5822741371285880e-03 5.1959740557665257e-01 + -8.4440654455706288e-01 -7.7949888366103948e-03 5.6409630660873011e-01 + -8.4572774359473335e-01 1.2896955966330614e-02 5.9596757887117080e-01 + -8.4675187824498865e-01 4.9031101205958549e-02 6.1911468078800014e-01 + -8.6290365400115310e-01 9.0015141497196915e-02 6.4740597392716981e-01 + -8.9827196002241949e-01 1.2856082594972712e-01 6.8827351095369527e-01 + -9.4694848073637206e-01 1.6482702312860592e-01 7.3515564264147160e-01 + -1.0029963080108562e+00 2.0075912808360885e-01 7.7944104036539774e-01 + -1.0656365229430556e+00 2.3586228395573705e-01 8.2508284219831185e-01 + -1.1363276200628472e+00 2.6767215998278832e-01 8.8493769197445427e-01 + -1.2250151601286683e+00 2.1836524505305116e-01 9.8339341027718019e-01 + id 12837 + loc 9.7977578639984131e-01 1.5931004285812378e-01 393 + blend 0.0000000000000000e+00 + interp 3.9228517767589310e-01:3.7522608986593725e-01:2.1398850402268743e-02:7.6845392508005927e-02:8.5444055410380937e-01:3.7528595454887631e-01:1.9710855181417410e+00:3.9228125482411635e-01:2.7342470023291132e+00:3.6228483562879282e-01:3.2306365535328521e+00 + CVs 20 + 1.7665040150741024e-01 2.3879613599831950e-01 8.1363182888162772e-02 + 3.5594835008616665e-01 5.0950212454495802e-01 1.7454057496419828e-01 + 5.1810746635472404e-01 7.9114137207386515e-01 2.6003171968783434e-01 + 6.6168174410537106e-01 1.0739120706153038e+00 3.3200775207453209e-01 + 7.9314863046869699e-01 1.3576451703660608e+00 3.9658349063353288e-01 + 9.2197266301091574e-01 1.6458985291710375e+00 4.6298348562889513e-01 + 1.0607747967092513e+00 1.9394310111670681e+00 5.4421855962736165e-01 + 1.2206085622427776e+00 2.2326338493494564e+00 6.5220119168421897e-01 + 1.4079873007607970e+00 2.5175673350725893e+00 7.9682936419045780e-01 + 1.6255214926457644e+00 2.7852347422930888e+00 9.8958680828136603e-01 + 1.8770608300209379e+00 3.0218172784451376e+00 1.2440417008967051e+00 + 2.1697717034213824e+00 3.1941057018502734e+00 1.5693590643024378e+00 + 2.4868298663494066e+00 3.2369155855444509e+00 1.9249238271228908e+00 + 2.7704599956080846e+00 3.1293838144211827e+00 2.1958671678417225e+00 + 2.9885984632413303e+00 2.9313372023457109e+00 2.3243751573627716e+00 + 3.1399963086605922e+00 2.6996607714982757e+00 2.3541889076604621e+00 + 3.2230726713994993e+00 2.4739223676280662e+00 2.3498930286915387e+00 + 3.3074055618634839e+00 2.2663282982533701e+00 2.3560461870818248e+00 + 3.5970991589070049e+00 2.0823034540245797e+00 2.4173309771276039e+00 + id 12838 + loc 4.1013973951339722e-01 3.4353291988372803e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1570848627170559e-01:3.8018170381331834e-01:3.9062942287143754e-01:3.5169069107594908e-01:1.1182729137956153e+00:4.1570432918684291e-01:1.9973865949909675e+00:3.9663968785747039e-01:2.4366853660596477e+00:3.4099867121662608e-01:3.0027357423663088e+00:3.5332504718824403e-01:3.8928885946053295e+00 + CVs 20 + -9.9068258096981901e-02 3.7864405032232895e-01 -1.3844165299018424e-01 + -2.1427662804283554e-01 7.6009318460338671e-01 -3.0027880864364997e-01 + -3.3847209912785486e-01 1.1464282164069417e+00 -4.5554136321250804e-01 + -4.8096826357446537e-01 1.5348338169556037e+00 -5.9456773533541818e-01 + -6.6030301180869067e-01 1.9205483881942118e+00 -7.1783161645415428e-01 + -8.9453552296804073e-01 2.2881038645526885e+00 -8.2895489324669203e-01 + -1.1906660898827772e+00 2.6073260415517447e+00 -9.3581489744411084e-01 + -1.5363131815806710e+00 2.8439157151584706e+00 -1.0503833452900047e+00 + -1.9044859100127809e+00 2.9721964679531112e+00 -1.1854972382182873e+00 + -2.2580497207760928e+00 2.9838666082448340e+00 -1.3455067758173713e+00 + -2.5624969812036054e+00 2.9014970208932294e+00 -1.5202297626376859e+00 + -2.8147480328762300e+00 2.7657143350856499e+00 -1.6983536756498498e+00 + -3.0489062783487464e+00 2.5953900256339750e+00 -1.8835227919030531e+00 + -3.3144354686953128e+00 2.3768729272805098e+00 -2.0844381907520573e+00 + -3.6456384285133780e+00 2.0959752708588231e+00 -2.2772352297551199e+00 + -4.0494804884978288e+00 1.7746637307109490e+00 -2.3980253321984026e+00 + -4.5073999066206731e+00 1.4705805845282578e+00 -2.3850853175484037e+00 + -4.9593941756954276e+00 1.2300239693663544e+00 -2.2325430584977553e+00 + -5.3055572706555791e+00 1.0229438867810403e+00 -2.0579888483365476e+00 + id 12839 + loc 3.7122738361358643e-01 9.5460706949234009e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3798443876284332e-01:3.1991570989650120e-01:3.8451407059761800e-01:3.1415930102211381e-01:1.0096130264453258e+00:4.3798005891845571e-01:1.8762737048285565e+00:2.2735792429582219e-01:2.2666388844059089e+00:3.5921468463767847e-01:2.9444577910424270e+00:2.4893835835956160e-01:3.6845311090391029e+00 + CVs 20 + 1.2389259346029491e-01 2.8024975547023734e-01 -7.5847271271681602e-02 + 2.2499317494185747e-01 5.6920379417466593e-01 -1.5141581675815327e-01 + 3.2405410376288613e-01 8.6837102066287108e-01 -2.3184691878519442e-01 + 4.2953098652739213e-01 1.1716695327372022e+00 -3.1504527824602679e-01 + 5.4208335162731502e-01 1.4845065527826573e+00 -4.0171098980715769e-01 + 6.6184272119606935e-01 1.8194485957066036e+00 -5.0328684613974117e-01 + 7.8093142623977008e-01 2.1909445720202747e+00 -6.5281897348222517e-01 + 8.7898019820587114e-01 2.6010456663116881e+00 -9.0422505824099897e-01 + 9.3325667691659631e-01 3.0132041149884201e+00 -1.3069462172417003e+00 + 9.2950008069592627e-01 3.3476475143446045e+00 -1.8674945437561317e+00 + 8.6414264168275601e-01 3.5260794648625318e+00 -2.5330238143918784e+00 + 7.5033036242321960e-01 3.5212917011899365e+00 -3.2224692905706935e+00 + 6.2299856684002686e-01 3.3619128171834936e+00 -3.8758296524469169e+00 + 5.2403736790965150e-01 3.1016543621394104e+00 -4.4702655483287081e+00 + 4.8019268955826822e-01 2.7867348051878360e+00 -5.0104972821393527e+00 + 5.0367536950994696e-01 2.4310148486126097e+00 -5.5286141660592705e+00 + 6.3541166578505015e-01 2.0311290873773449e+00 -6.0553423887295450e+00 + 9.5926280463600122e-01 1.6699951478214474e+00 -6.5257434506041045e+00 + 1.3232332635172319e+00 1.6023357065859238e+00 -6.7194869452165316e+00 + id 12840 + loc 4.1267293691635132e-01 6.2983715534210205e-01 403 + blend 0.0000000000000000e+00 + interp 4.6804333558188072e-01:2.9425651433436989e-01:6.8443351743414227e-01:3.8182963765286121e-01:1.0938953517991696e+00:4.1043437933103433e-01:1.9962447189735397e+00:4.4015406660392759e-01:2.5421073655252604e+00:4.6803865514852494e-01:2.9905576677860690e+00:3.9656445509173810e-01:3.3497512104852216e+00:4.1940303689562153e-01:3.9938370196636814e+00 + CVs 20 + 8.9630681824563352e-02 1.7823595155803590e-01 -2.6029643514810002e-01 + 1.6914671050249572e-01 3.6889038320722067e-01 -5.1186228698489800e-01 + 2.3695770002170297e-01 5.5873657257488363e-01 -7.6643177884174829e-01 + 2.8351792257921360e-01 7.5210717752812539e-01 -1.0300421621417137e+00 + 3.0079716398271000e-01 9.4720819343752038e-01 -1.3025469707148192e+00 + 2.7956741943895391e-01 1.1437217483635145e+00 -1.5825159327576936e+00 + 2.1222200877242703e-01 1.3397565146306203e+00 -1.8665012633393334e+00 + 9.6010955239579920e-02 1.5310281169950355e+00 -2.1490830227102085e+00 + -7.0422797996414710e-02 1.7124181559632592e+00 -2.4249551102184865e+00 + -2.9300488231233279e-01 1.8782387436106567e+00 -2.6882381895528380e+00 + -5.7880680223408765e-01 2.0213548864312472e+00 -2.9299039875505999e+00 + -9.2785125402061408e-01 2.1341602383663383e+00 -3.1372661378732589e+00 + -1.3339328551826068e+00 2.2107158518878527e+00 -3.2958140540843170e+00 + -1.7884609183273055e+00 2.2472303530318856e+00 -3.3905603249547611e+00 + -2.2771985386571099e+00 2.2434216487615739e+00 -3.4069408199804467e+00 + -2.7740629311297140e+00 2.2018734585502266e+00 -3.3368799404169045e+00 + -3.2386137238151633e+00 2.1303810795848506e+00 -3.1899841188327476e+00 + -3.6333375238911563e+00 2.0479151906971489e+00 -2.9936995967172679e+00 + -3.7654011010390716e+00 2.0909397366595281e+00 -2.8975077808519289e+00 + id 12841 + loc 4.6674731373786926e-01 7.0199769735336304e-01 395 + blend 0.0000000000000000e+00 + interp 4.3884758121208128e-01:2.6070666115240781e-01:3.4512083446897079e-01:3.9384543832148045e-01:9.8740636119678571e-01:4.3884319273626921e-01:1.6531411617029836e+00:3.4311785924117782e-01:2.1023524054416121e+00:2.8691827245074547e-01:2.9561578256063319e+00:3.6143803228693722e-01:3.9193842752438606e+00 + CVs 20 + 4.5453159942311083e-01 1.4564417832232013e-01 -3.4150390340549386e-01 + 8.1537515758995727e-01 2.2704421552626525e-01 -6.1885677883603607e-01 + 1.1443905968915986e+00 2.8938584493566566e-01 -8.7179920060373650e-01 + 1.4645629944726342e+00 3.5209808085361172e-01 -1.1148789061399791e+00 + 1.7727326578567788e+00 4.1452838309830220e-01 -1.3468965066848959e+00 + 2.0683968956735015e+00 4.7530357783221699e-01 -1.5687470202464644e+00 + 2.3525623415360211e+00 5.3426716776514294e-01 -1.7837478154675801e+00 + 2.6274994468672288e+00 5.9414334227151566e-01 -1.9984438849538746e+00 + 2.9009725249444802e+00 6.5488343769356505e-01 -2.2190623641236638e+00 + 3.1849227805078320e+00 7.0967746005181831e-01 -2.4496232727139646e+00 + 3.4862509874694374e+00 7.4272446423604954e-01 -2.6969102045838089e+00 + 3.7989919532605501e+00 7.3139860512125643e-01 -2.9729399638327973e+00 + 4.1102617840516258e+00 6.5657337669238514e-01 -3.2834082310297830e+00 + 4.4113279579822979e+00 5.1014474723497916e-01 -3.6183674259927976e+00 + 4.6960154738216353e+00 2.9418175078880360e-01 -3.9604760418854443e+00 + 4.9566553652058793e+00 1.6863703192874446e-02 -4.2982816137688440e+00 + 5.1851546652564853e+00 -3.1522819947451142e-01 -4.6242169849201140e+00 + 5.3720216323005925e+00 -6.9209332886926811e-01 -4.9200724531172888e+00 + 5.4784713226593320e+00 -1.0303611149308418e+00 -5.1119875204535106e+00 + id 12842 + loc 7.7708345651626587e-01 5.9629750251770020e-01 409 + blend 0.0000000000000000e+00 + interp 5.1944233902660664e-01:3.7185175728233905e-01:1.9384140686631823e-01:3.5691481778016809e-01:9.9056383680416582e-01:3.8728581796451578e-01:1.5046491221166445e+00:5.1943714460321644e-01:1.9729479172690279e+00:2.8517992856796137e-01:2.7510179350582211e+00:3.9723329528148960e-01:3.0864434258874978e+00:3.7482740974604384e-01:3.8001479196706809e+00 + CVs 20 + 3.5871104676559168e-01 1.6372304884150918e-01 -1.4122351667403243e-01 + 6.6639963123301604e-01 3.0260781137596049e-01 -2.7443279699377054e-01 + 9.6243561352191920e-01 4.3903598689319473e-01 -3.9264798318255500e-01 + 1.2659430845568780e+00 5.8373038667573729e-01 -4.9227049201420947e-01 + 1.5760045898760910e+00 7.3300470576493448e-01 -5.7387152659103813e-01 + 1.8920538833175371e+00 8.8287858341047853e-01 -6.3961612519814315e-01 + 2.2168760678761803e+00 1.0307394937614027e+00 -6.9312652035529621e-01 + 2.5583452213544016e+00 1.1720868387506238e+00 -7.3823131872671199e-01 + 2.9274872030478445e+00 1.2958883841132840e+00 -7.7648568883467328e-01 + 3.3329515639155138e+00 1.3848231013969459e+00 -8.0938259427552239e-01 + 3.7715587055866187e+00 1.4178073021750883e+00 -8.4339985398879957e-01 + 4.2196184589023265e+00 1.3763141749124663e+00 -8.8739854991111877e-01 + 4.6440962916200386e+00 1.2555283676779405e+00 -9.4477900979119278e-01 + 5.0228997868392220e+00 1.0640081255717799e+00 -1.0136054649719595e+00 + 5.3443631839533303e+00 8.1657886639959809e-01 -1.0923750550216944e+00 + 5.6005206637529508e+00 5.3287407295845224e-01 -1.1828214564287727e+00 + 5.7853282710064367e+00 2.3487746887373984e-01 -1.2851257350400915e+00 + 5.8932212961432962e+00 -5.8741713971514731e-02 -1.3882046951086648e+00 + 5.8481806996198848e+00 -3.0676045249155015e-01 -1.4514378696143355e+00 + id 12843 + loc 5.8201247453689575e-01 5.3123790025711060e-01 373 + blend 0.0000000000000000e+00 + interp 4.0230205782601031e-01:3.0069131373720021e-01:1.3672734542223264e-01:3.2183863862067108e-01:9.4726104466286087e-01:4.0229803480543208e-01:1.8007926878075633e+00:3.5417891746137431e-01:2.6030337388122811e+00:3.8492438399544326e-01:3.2790338007255988e+00 + CVs 20 + -3.0705160460816822e-01 5.4110398814330785e-01 -1.9756702272078353e-01 + -5.5027956196392036e-01 1.0124375416190476e+00 -4.3575889695474590e-01 + -7.2278524546397271e-01 1.4052122117536490e+00 -6.9617344251627955e-01 + -8.2023761318804900e-01 1.7180988560641088e+00 -9.6360221909479360e-01 + -8.6363163124201625e-01 1.9523557394248134e+00 -1.2304963030662925e+00 + -8.8550270675211884e-01 2.0976378948486452e+00 -1.4852207346852460e+00 + -9.0348582533897281e-01 2.1540198030631288e+00 -1.7101605829417352e+00 + -9.2413059685206156e-01 2.1571682939652264e+00 -1.9044301233872833e+00 + -9.5372045173029452e-01 2.1399071850328997e+00 -2.0800128524941006e+00 + -9.9513052637829591e-01 2.1179878223800555e+00 -2.2384891153246977e+00 + -1.0455409701741121e+00 2.1033954013824880e+00 -2.3652923203242024e+00 + -1.1014824742250844e+00 2.1168168783344261e+00 -2.4448677743805116e+00 + -1.1687436694032238e+00 2.1601650571473194e+00 -2.5275570044468152e+00 + -1.2518762687715790e+00 2.1456950521570315e+00 -2.7093187996609864e+00 + -1.3717379728131254e+00 2.0063867764393368e+00 -2.9813630502138806e+00 + -1.5633390414021959e+00 1.8167854351494903e+00 -3.2706261343799374e+00 + -1.8143217693886999e+00 1.6750259854726268e+00 -3.5317503674939439e+00 + -2.0817032638485755e+00 1.6326430633720324e+00 -3.7344169610292250e+00 + -2.4514474164012663e+00 1.8128501989636889e+00 -3.7911034856719619e+00 + id 12844 + loc 4.7135818749666214e-02 9.4929957389831543e-01 1080 + blend 0.0000000000000000e+00 + interp 4.4729482752139482e-01:3.4090415715868189e-01:2.7026206436309241e-01:2.3963798363828082e-01:9.9729028829077282e-01:2.9537610744653503e-01:1.6291030329389684e+00:4.4729035457311961e-01:1.9883809660738889e+00:4.4717092784627011e-01:2.4878745815620449e+00:3.3921954630541140e-01:2.9734953048449699e+00:3.5235885980514980e-01:3.4425230251896326e+00 + CVs 20 + -1.2681965226284711e-01 2.1611038061798782e-01 2.9260333243985814e-01 + -2.1192445138521168e-01 3.2579137524402274e-01 4.2229101750282966e-01 + -2.7535125113797554e-01 3.8335270901764673e-01 4.7150670356984054e-01 + -3.3195774696482588e-01 4.2967713349663134e-01 5.1645273055716001e-01 + -3.8169845643021544e-01 4.6987236987067560e-01 5.5590995699721180e-01 + -4.2946194631164747e-01 5.0895803532714101e-01 5.8901844298579187e-01 + -4.8504183616403457e-01 5.4898960793801632e-01 6.1410499043088973e-01 + -5.5952949774588190e-01 5.8785162608357755e-01 6.2795149213017754e-01 + -6.6179435661750263e-01 6.2072994321603969e-01 6.2720215026848358e-01 + -7.9713739893459967e-01 6.4264785058548890e-01 6.0957841854397077e-01 + -9.6686582521477227e-01 6.5078023538264085e-01 5.7498928480468159e-01 + -1.1686012492404940e+00 6.4448130418704475e-01 5.2604471234838990e-01 + -1.3993782436350868e+00 6.2011999788419558e-01 4.6466216274533101e-01 + -1.6603809214404213e+00 5.6480018404511423e-01 3.8796200671402337e-01 + -1.9565169225761923e+00 4.6523404452876660e-01 2.9522450163274150e-01 + -2.2906744918371027e+00 3.2913924847615234e-01 1.9541028182480394e-01 + -2.6587762928594803e+00 1.7988991108078073e-01 1.0309880852735491e-01 + -3.0471294775511066e+00 3.6289097773655299e-02 3.1666563972489639e-02 + -3.3471877118372815e+00 -2.4575448444115078e-02 -7.8960578698847126e-03 + id 12845 + loc 1.5870249271392822e-01 1.1659185588359833e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0297653775871489e-01:3.3197559349316136e-01:5.8955846254675115e-01:3.1329312623828592e-01:1.1517507379670917e+00:3.5551038641667310e-01:1.9057180908030156e+00:4.0297250799333734e-01:2.7162874864684587e+00:3.8090258737877580e-01:3.0286782733349535e+00:3.5700736595596821e-01:3.6368735505391112e+00 + CVs 20 + 2.0231020218858936e-01 3.7186168046788293e-01 -1.5642397450918769e-01 + 3.2718733931729327e-01 6.9399930774275220e-01 -3.2942509453180191e-01 + 4.2982969733033816e-01 9.9567662311535599e-01 -5.1993634058398475e-01 + 5.2822780649334522e-01 1.2858192102152617e+00 -7.2977338327447028e-01 + 6.1543827954958075e-01 1.5571901676839777e+00 -9.5852813656880276e-01 + 6.7939462540972284e-01 1.8033455984095743e+00 -1.2072274085740249e+00 + 7.0491024083650689e-01 2.0161796761367787e+00 -1.4773144415678876e+00 + 6.8152449875723542e-01 2.1850329356846374e+00 -1.7674449630256226e+00 + 6.0772111638524873e-01 2.2977634984530080e+00 -2.0720016578655072e+00 + 4.9269800331558977e-01 2.3451378281341579e+00 -2.3813895917764802e+00 + 3.5342086752543656e-01 2.3282998047063224e+00 -2.6861659578122938e+00 + 2.0443906906830467e-01 2.2584710663745744e+00 -2.9830490865843724e+00 + 5.4890982040116554e-02 2.1495544933099828e+00 -3.2726285748830932e+00 + -8.6178728592211096e-02 2.0163980146546834e+00 -3.5537774057308607e+00 + -2.0315044229224705e-01 1.8806037656117471e+00 -3.8195688738937670e+00 + -2.7911752768778103e-01 1.7816340632316015e+00 -4.0559752586947120e+00 + -3.3959821466777235e-01 1.7528878665105476e+00 -4.2582325845786704e+00 + -4.0645223124509144e-01 1.6940164021646131e+00 -4.4528168056620530e+00 + -3.2703313559785396e-01 1.5274199369537889e+00 -4.6174693015218926e+00 + id 12846 + loc 9.5418953895568848e-01 7.5780606269836426e-01 1076 + blend 0.0000000000000000e+00 + interp 3.9858472138864731e-01:2.5675088632012150e-01:6.3711370320652261e-01:2.5915628963905851e-01:1.7306079852911527e+00:3.2086230161231716e-01:2.1377836037963625e+00:3.5258938567328768e-01:2.3210224904944541e+00:3.9858073554143342e-01:2.9964762591716205e+00:3.1028317496431074e-01:3.6220444383823036e+00 + CVs 20 + 2.1231057485314456e-01 3.6222028679406049e-01 -1.0355616896016218e-01 + 4.3488895688933404e-01 7.0633930846876747e-01 -2.4294891024549919e-01 + 6.5972499684111396e-01 1.0338742149625832e+00 -3.8608988430776897e-01 + 8.8061252938317358e-01 1.3397762208219044e+00 -5.1769140683451054e-01 + 1.0903168103191438e+00 1.6139007806810128e+00 -6.3783475198708173e-01 + 1.2772418412247077e+00 1.8431878706837359e+00 -7.5289989029477300e-01 + 1.4332492447565541e+00 2.0260183505715545e+00 -8.6724059577708434e-01 + 1.5549480137348664e+00 2.1766720244645636e+00 -9.6772027839029739e-01 + 1.6569635327141092e+00 2.3302803658966837e+00 -1.0543027297011061e+00 + 1.7575618785154841e+00 2.4813867208212881e+00 -1.1892414665811086e+00 + 1.8352737139788204e+00 2.5738894930111496e+00 -1.3987464778156202e+00 + 1.8497762199217549e+00 2.5783751531363537e+00 -1.6459605976422258e+00 + 1.7843821579447809e+00 2.4858663274268578e+00 -1.8781011090597470e+00 + 1.6698578222636304e+00 2.2825996056447897e+00 -2.0355081659399419e+00 + 1.5517045418179229e+00 1.9318794640613308e+00 -2.0579839814276859e+00 + 1.4610701664851788e+00 1.3412170037032562e+00 -1.9814292586459226e+00 + 1.4740296134966955e+00 4.2292114295921890e-01 -2.0628261530858216e+00 + 1.6421177837836536e+00 -3.1503446861905227e-01 -2.5145050636002781e+00 + 1.5666714352195901e+00 2.6369887654840940e-02 -2.5913814802577249e+00 + id 12847 + loc 2.3111447691917419e-01 6.9304686784744263e-01 264 + blend 0.0000000000000000e+00 + interp 1.2512364773174163e+00:8.5833086803502978e-01:1.0413866919062349e+00:6.9408954366964970e-01:1.4011280915872102e+00:3.7674490834546714e-01:1.9999676244217746e+00:4.3685563001018729e-01:2.7097084501069100e+00:5.4140887822697092e-01:2.9948625792121346e+00:1.0100438753930117e+00:3.0002842426991796e+00:1.2512264773174162e+00:3.0008885403127001e+00 + CVs 20 + -8.1680316236120154e-01 4.0776843242513294e-01 -1.0345034554131871e-01 + -1.4066406947948980e+00 6.4797534173186389e-01 -9.4636693617050849e-02 + -1.9473432505146488e+00 7.5491734274461497e-01 1.2338158057865922e-02 + -2.4922376279810647e+00 7.8516496039683947e-01 2.0186875223779066e-01 + -3.0382049258534995e+00 8.1103170668057278e-01 4.4667337473511537e-01 + -3.6126993039095141e+00 8.8228068726761766e-01 7.0627341803910215e-01 + -4.2376152166551293e+00 1.0024552242113010e+00 9.1859394995128163e-01 + -4.9008505584907232e+00 1.1560661263568366e+00 1.0234980386825148e+00 + -5.5714316696299715e+00 1.3400710576979422e+00 9.7851595998667507e-01 + -6.2151336337134113e+00 1.5566745910205055e+00 7.5203287986446221e-01 + -6.8180990445430796e+00 1.7842962769238153e+00 3.4019098775538392e-01 + -7.3829700119725175e+00 1.9755469290058805e+00 -2.3455071498910596e-01 + -7.8911889756309934e+00 2.0548272810558479e+00 -9.4233508589931092e-01 + -8.2910385946537843e+00 1.9554182917062484e+00 -1.7270728155378698e+00 + -8.5022131044119948e+00 1.6806038870579407e+00 -2.5494502602546669e+00 + -8.3693596029878137e+00 1.2432651123317320e+00 -3.4011291409624569e+00 + -7.9188485578071157e+00 5.3805000996989616e-01 -4.1633121255711814e+00 + -7.5115618468030059e+00 -3.7391248454810144e-01 -4.5090758052367637e+00 + -7.3323895400640140e+00 -1.0442342479694515e+00 -4.3908012234626845e+00 + id 12848 + loc 1.1340785771608353e-01 8.8674455881118774e-01 377 + blend 0.0000000000000000e+00 + interp 5.9317798875110528e-01:5.1821056534771304e-01:1.8422754447764222e-01:5.9317205697121778e-01:8.3141965180084187e-01:5.4461986974667620e-01:1.0155632633849876e+00:3.5541734955062682e-01:1.5638205490755033e+00:4.8432606391542066e-01:1.9744878019003460e+00:4.5395240086438560e-01:2.4519335432481775e+00:4.1444105058841146e-01:2.9882105835966994e+00:4.4209808257309763e-01:3.6092411833856959e+00:2.6708232783510566e-01:3.9821685752162366e+00 + CVs 20 + -6.6639830876778106e-01 3.5473083656593052e-01 -5.3083234174420424e-01 + -1.2298299866424629e+00 5.5038341671472435e-01 -9.1226326383384193e-01 + -1.7659913277948691e+00 6.5242909408837169e-01 -1.2307573928418489e+00 + -2.3022802696542231e+00 6.9521618538174690e-01 -1.5340709262842256e+00 + -2.8151677296927029e+00 6.8198507262506602e-01 -1.8347792395570566e+00 + -3.2862381164893750e+00 6.0496496928437438e-01 -2.1339194010307665e+00 + -3.7045607250812314e+00 4.4969115794628078e-01 -2.4184086347932046e+00 + -4.0607241577381608e+00 2.1336276504641694e-01 -2.6694863020446071e+00 + -4.3474352362780326e+00 -8.7233683036705756e-02 -2.8721597923628259e+00 + -4.5606155012831504e+00 -4.1885324039228156e-01 -3.0189355675930969e+00 + -4.6971733145358776e+00 -7.3374259224184213e-01 -3.1057916656855906e+00 + -4.7633883980873630e+00 -9.7794161108923872e-01 -3.1385556760872535e+00 + -4.7918603592783438e+00 -1.1368825022773890e+00 -3.1547788895934783e+00 + -4.8303584508250790e+00 -1.3013514373799313e+00 -3.2129624187896484e+00 + -4.8976743433793430e+00 -1.5996220381917836e+00 -3.3402443127657575e+00 + -4.9896172706940813e+00 -2.0444593374447102e+00 -3.5424603620676205e+00 + -5.1062526469679623e+00 -2.5562474704782829e+00 -3.8230253499362004e+00 + -5.2573912140213208e+00 -3.0412111963451576e+00 -4.1514135177377369e+00 + -5.4360120656082191e+00 -3.2717398447820711e+00 -4.4155532475657999e+00 + id 12849 + loc 6.7310428619384766e-01 7.7628600597381592e-01 411 + blend 0.0000000000000000e+00 + interp 4.7470553443320268e-01:2.9502699735896698e-01:7.7216130900833124e-01:4.3839641540989915e-01:1.1926895210211856e+00:3.1042661757213219e-01:1.8961819549672512e+00:3.0230155799466363e-01:2.9019792465230205e+00:4.7470078737785837e-01:3.4703097588742029e+00:3.4026141945154448e-01:3.9971624706280791e+00 + CVs 20 + 8.9475244694529243e-01 2.3686089277089331e-01 -1.3840453921356521e-01 + 1.5542101315079055e+00 3.4459728831102882e-01 -2.3522118290158081e-01 + 2.1636507913257015e+00 4.0213792417226013e-01 -3.1127861946273561e-01 + 2.8103846296604860e+00 4.4108361216833564e-01 -3.7858031235495249e-01 + 3.4812222197498994e+00 4.4871669150736809e-01 -4.4206636459220089e-01 + 4.1606767281305794e+00 4.1461679538652796e-01 -5.0903177070045236e-01 + 4.8324806404776002e+00 3.3037149163962065e-01 -5.8388677483288076e-01 + 5.4810487536179471e+00 1.8627775334246066e-01 -6.6872696971897894e-01 + 6.0903419193115997e+00 -2.8243701186434711e-02 -7.7616784857058541e-01 + 6.6404441784368728e+00 -3.1597763484215791e-01 -9.2051146041708010e-01 + 7.1098226166589180e+00 -6.6592327351652547e-01 -1.1089446169394919e+00 + 7.4909882081771197e+00 -1.0573893236408065e+00 -1.3336209575195501e+00 + 7.7957200363190724e+00 -1.4746657749756851e+00 -1.5785941566159107e+00 + 8.0354848856223775e+00 -1.9027627236237632e+00 -1.8304300286755535e+00 + 8.2151179430663923e+00 -2.3142000266598544e+00 -2.0777704401382984e+00 + 8.3486581141768816e+00 -2.6952926720073460e+00 -2.3093092896263308e+00 + 8.4538192337859144e+00 -3.0501787557492781e+00 -2.5164712286277053e+00 + 8.5428887298972889e+00 -3.3671066058457693e+00 -2.6945220865938344e+00 + 8.6061829011970108e+00 -3.5525381311492072e+00 -2.8373698806276497e+00 + id 12850 + loc 3.4235775470733643e-01 7.9317277669906616e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6587161203696642e-01:3.4475446487012301e-01:9.6246107202043518e-02:3.3243276388167059e-01:9.7671609477236754e-01:3.4232813265951412e-01:1.5660791881129792e+00:3.2509597934845141e-01:2.1279987210335221e+00:4.6586695332084604e-01:2.8245302229072236e+00:3.3486241994377108e-01:3.3031491864965212e+00 + CVs 20 + 5.1484809252967736e-03 3.0981613987667145e-01 -2.1616635379226777e-02 + 3.0331098121372212e-02 6.3239828526672659e-01 -6.4272659940902768e-02 + 8.2464829238280524e-02 9.5926527469142975e-01 -1.0721245984505320e-01 + 1.7024300588210101e-01 1.2965144106354574e+00 -1.4397966306504290e-01 + 2.9601948747839363e-01 1.6563239184830878e+00 -1.8708710565550388e-01 + 4.6024668680523362e-01 2.0496587417782273e+00 -2.5633443464142164e-01 + 6.6577414491323472e-01 2.4653105004648062e+00 -3.7738060992500633e-01 + 9.1562831016687551e-01 2.8611734358047141e+00 -5.6467689083352157e-01 + 1.2090185640966347e+00 3.1829741865445675e+00 -8.0149222739163728e-01 + 1.5399604407377596e+00 3.3927975573977212e+00 -1.0456668467734211e+00 + 1.8964490380807544e+00 3.4803697336648942e+00 -1.2550479541169310e+00 + 2.2626125404906960e+00 3.4538406751193738e+00 -1.4043386652507115e+00 + 2.6477526886275147e+00 3.3337433419555378e+00 -1.4998188339390011e+00 + 3.1163981598986759e+00 3.1350520826799939e+00 -1.5845996188087663e+00 + 3.7324300219534674e+00 2.8271147348520684e+00 -1.7247174457801373e+00 + 4.4575979007732869e+00 2.3268956968659711e+00 -1.9997729629903511e+00 + 5.1371947953005437e+00 1.5968957793084859e+00 -2.5125745335007053e+00 + 5.5476849354761546e+00 8.2718893590406639e-01 -3.2630039605936947e+00 + 5.6169651063601718e+00 5.5888394816431819e-01 -3.5617819376064794e+00 + id 12851 + loc 2.0606911182403564e-01 4.5292943716049194e-01 395 + blend 0.0000000000000000e+00 + interp 4.5673333990389392e-01:4.5672877257049488e-01:2.7471454454571675e-01:2.8733219165362939e-01:1.1769789527459336e+00:3.0620827158500219e-01:2.0137687235917197e+00:3.1340420900727700e-01:2.7489959513094200e+00:3.1442368011826516e-01:3.4328437687340232e+00 + CVs 20 + -2.3607042387810395e-01 1.5882220401952449e-01 -4.2712009500862397e-01 + -4.5478853771691630e-01 2.7155413175430210e-01 -8.1329510166376995e-01 + -6.6983101440695370e-01 3.6203815266846051e-01 -1.1900817148362408e+00 + -8.8547718801070174e-01 4.3449435292194138e-01 -1.5713120330008792e+00 + -1.0996104294241487e+00 4.8263575191367336e-01 -1.9569545757583930e+00 + -1.3140883146835245e+00 5.0087575769995762e-01 -2.3459684105632985e+00 + -1.5297902660474836e+00 4.8070055873224327e-01 -2.7343731562672358e+00 + -1.7433426436745205e+00 4.0766504400245873e-01 -3.1140511649592151e+00 + -1.9528502657067821e+00 2.6572209056145257e-01 -3.4721734236989006e+00 + -2.1625161325974847e+00 4.3709480135783796e-02 -3.7873314670576503e+00 + -2.3733908935516919e+00 -2.5664543708906518e-01 -4.0340686354317175e+00 + -2.5772847692035730e+00 -6.1831475690822257e-01 -4.2048722915480852e+00 + -2.7704428349212220e+00 -1.0222309846728925e+00 -4.3120371208431667e+00 + -2.9612105095914933e+00 -1.4557400611179019e+00 -4.3638909155333643e+00 + -3.1569792359244055e+00 -1.9075484036112966e+00 -4.3574045512064838e+00 + -3.3459837998915440e+00 -2.3649047762753161e+00 -4.2872846681806358e+00 + -3.5078508312938612e+00 -2.8171465732303815e+00 -4.1595767512529074e+00 + -3.6552799302795731e+00 -3.2635557899298564e+00 -4.0067168892156513e+00 + -3.9636337361804799e+00 -3.7474599902614631e+00 -4.0054140564697089e+00 + id 12852 + loc 1.8631654977798462e-01 5.7499396800994873e-01 409 + blend 0.0000000000000000e+00 + interp 4.9324727192893758e-01:3.9111132976704011e-01:1.5606245394856888e-03:2.4367783182903152e-01:6.0226871569053031e-01:3.6967436548836957e-01:1.0718848647637484e+00:2.7828295140968029e-01:1.7367134452425237e+00:3.8304003315924212e-01:2.0493147723060949e+00:4.9324233945621831e-01:2.8511909864669862e+00:3.6189967309178728e-01:3.0321645857550568e+00:3.4988005974516900e-01:3.6476799371960729e+00 + CVs 20 + 4.4453275592580416e-01 2.7890825743780634e-01 -2.1848117492448366e-01 + 8.1883837040976537e-01 5.1049013992845249e-01 -4.2556196814945912e-01 + 1.2010879303987410e+00 7.3552827619097816e-01 -6.4855446037130515e-01 + 1.6122700960010226e+00 9.5559413651432568e-01 -9.1028039917238446e-01 + 2.0301669381328082e+00 1.1414173039608446e+00 -1.2359369695779963e+00 + 2.4272818615945688e+00 1.2584892789292805e+00 -1.6465229460502897e+00 + 2.7832938707353678e+00 1.2675555345403549e+00 -2.1437943068736796e+00 + 3.0934944223866303e+00 1.1271125206576855e+00 -2.7049594284160334e+00 + 3.3649166911675614e+00 8.0049029282036877e-01 -3.2747038223479681e+00 + 3.5942632203647831e+00 2.7632764286853084e-01 -3.7637784203350444e+00 + 3.7642604614915678e+00 -3.9956854575164180e-01 -4.0879405362096932e+00 + 3.8829080958845577e+00 -1.1476949418346181e+00 -4.2689943818364604e+00 + 3.9921831664805905e+00 -1.9308187247183841e+00 -4.4319884245409078e+00 + 4.1318647938640982e+00 -2.7248115430863393e+00 -4.6961090808232653e+00 + 4.3248616087280434e+00 -3.4793934321499531e+00 -5.1072111883338858e+00 + 4.5790775036045890e+00 -4.1510743667240115e+00 -5.6048681295559204e+00 + 4.8802379755271827e+00 -4.7264166895758324e+00 -6.0985033372798512e+00 + 5.1789296478342628e+00 -5.2048504517483227e+00 -6.5647631981744921e+00 + 5.3846899494156988e+00 -5.5915339128217205e+00 -7.0454900066515194e+00 + id 12853 + loc 1.9087237119674683e-01 3.3780103549361229e-03 1069 + blend 0.0000000000000000e+00 + interp 3.8010010619130502e-01:2.9887784638651277e-01:2.8316228770530216e-01:2.5394568370071763e-01:1.2939779719221254e+00:2.8937214318317112e-01:2.0186122456653179e+00:3.8009630519024312e-01:2.6385461436283473e+00:3.1124724115679342e-01:3.0274310231362938e+00:3.0158945091192563e-01:3.8787829017478970e+00 + CVs 20 + -2.8071412542174179e-01 2.0572923676558547e-01 4.6943101708254997e-02 + -5.2587141276739457e-01 4.1453133563261840e-01 1.2016349179541080e-01 + -7.4027917033175639e-01 6.4581649205121217e-01 2.3728171354175431e-01 + -9.5133693899440630e-01 9.2055844020910937e-01 3.8302891333475519e-01 + -1.2086345172860793e+00 1.2313269890521157e+00 4.8995545802184942e-01 + -1.5437370297710185e+00 1.5345480678296475e+00 4.9973467718569209e-01 + -1.9667454828902899e+00 1.7789625543871197e+00 3.7719454444253642e-01 + -2.4508291438406280e+00 1.8991688916992249e+00 6.7179932065116743e-02 + -2.8651919300389457e+00 1.8273505018236018e+00 -4.4514356873980310e-01 + -3.0724784858536895e+00 1.5828760613087554e+00 -1.0290633059912624e+00 + -3.0807551318112321e+00 1.2337409920667071e+00 -1.5670289727299260e+00 + -2.9348981544917914e+00 8.0722429812217944e-01 -2.0084095337220509e+00 + -2.7165635874821108e+00 3.7027047636867028e-01 -2.2935794045953388e+00 + -2.5780412426330264e+00 5.8832107494179775e-02 -2.4485210095140673e+00 + -2.5820337389686179e+00 -6.4993878113429493e-02 -2.5525567879444018e+00 + -2.6658390081737080e+00 -5.3073356324485399e-02 -2.6141918220980491e+00 + -2.7724884974051069e+00 2.8315935856549679e-02 -2.6046759364874061e+00 + -2.8475729793875999e+00 8.3093588228741577e-02 -2.6149264094044455e+00 + -2.8839793470578448e+00 1.3567790934837864e-01 -2.9120207937946878e+00 + id 12854 + loc 5.0771415233612061e-01 9.8290756344795227e-02 393 + blend 0.0000000000000000e+00 + interp 3.3141235636068250e-01:2.6520919692397910e-01:2.5093724603675871e-02:2.5762818853152730e-01:1.0067828318553911e+00:2.5570677824327104e-01:1.9791839178306527e+00:3.3140904223711892e-01:2.4397901886640581e+00:2.6343813897932200e-01:3.2320607315681533e+00 + CVs 20 + 4.3849290690924325e-01 3.9557385209174661e-01 1.1543187504763038e-01 + 8.2575743993910111e-01 8.0579179719051819e-01 2.5697274257275604e-01 + 1.1569003881906432e+00 1.2336145027747676e+00 4.3063674309487820e-01 + 1.4331678793391731e+00 1.6479389051098277e+00 6.5722526819345306e-01 + 1.6597824065948830e+00 2.0106028826857227e+00 9.5062032439707178e-01 + 1.8461814587783383e+00 2.3122757665900511e+00 1.3036799673697299e+00 + 2.0038417783683311e+00 2.5613779954710085e+00 1.6977749844562597e+00 + 2.1500464986384094e+00 2.7640061515263072e+00 2.1150404525493220e+00 + 2.3050229067817711e+00 2.9188877355672758e+00 2.5421939074156810e+00 + 2.4834031508964793e+00 3.0196456736205652e+00 2.9679865371475298e+00 + 2.6915253732832678e+00 3.0568390316083089e+00 3.3827428159410426e+00 + 2.9284355066435888e+00 3.0179802689295827e+00 3.7785847179114613e+00 + 3.1803822168490941e+00 2.8897891091035799e+00 4.1441402836303149e+00 + 3.4190953779683397e+00 2.6693226476556395e+00 4.4590029349758078e+00 + 3.6136667166074212e+00 2.3676454183349023e+00 4.6964436932556302e+00 + 3.7478834513781534e+00 1.9874308162797323e+00 4.8302116817709839e+00 + 3.8424852054516156e+00 1.5273069400209260e+00 4.8317253049995745e+00 + 3.9541467571581572e+00 1.0272785159675863e+00 4.6622492875459072e+00 + 4.1142934596595984e+00 5.8071370514246379e-01 4.2826784518090246e+00 + id 12855 + loc 1.5560902655124664e-01 4.3393203616142273e-01 373 + blend 0.0000000000000000e+00 + interp 4.0795755959302132e-01:3.1955905400613721e-01:5.1086023780207435e-01:3.9426824727195359e-01:1.0884420838899491e+00:4.0795348001742543e-01:1.9972940053787127e+00:3.8782871435344235e-01:2.2948220138861322e+00:2.7647950868231519e-01:2.9484065995338478e+00:3.4683806246328663e-01:3.8336628952501997e+00 + CVs 20 + -1.9250202484070517e-01 8.6038163781888399e-01 3.6609941625640180e-01 + -4.2323432969949210e-01 1.7710462669900284e+00 6.5084807319644389e-01 + -7.2878245099051742e-01 2.7089212922836321e+00 7.5136374728765398e-01 + -1.1199875907954269e+00 3.5945634612028123e+00 5.7581804186414431e-01 + -1.5803561088970084e+00 4.3112801120847521e+00 9.4857503628108741e-02 + -2.0698259595643531e+00 4.7411265781941045e+00 -6.4851699540352858e-01 + -2.5324387479676402e+00 4.8029033904575922e+00 -1.5737108518146987e+00 + -2.9298720461268903e+00 4.4771111311020988e+00 -2.5774349549232420e+00 + -3.2314198700221604e+00 3.7814552646952779e+00 -3.5361272774238239e+00 + -3.3485915553842429e+00 2.7700035712537305e+00 -4.3560489630180292e+00 + -3.1429151368871748e+00 1.5512528129606586e+00 -4.9687686429423650e+00 + -2.6230693608671158e+00 3.2304323942465185e-01 -5.3122310007522238e+00 + -2.0275017059139868e+00 -7.6734300237394359e-01 -5.4469045164147643e+00 + -1.6569671078822235e+00 -1.5969225039928610e+00 -5.5537201295019534e+00 + -1.8265851461305296e+00 -1.8403231759934138e+00 -5.7152959564039101e+00 + -2.1583470606828379e+00 -1.2628795598879572e+00 -5.5031261700855829e+00 + -1.9420505942317083e+00 -8.5345043017318822e-01 -5.0251044393007342e+00 + -1.7297483295007794e+00 -1.0170266801144734e+00 -5.0219606467770861e+00 + -1.7752495865822495e+00 -1.1137058641572599e+00 -5.6654674349695746e+00 + id 12856 + loc 6.6513484716415405e-01 6.8047738075256348e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6331496314416870e-01:4.0058048946352615e-01:4.4866992183989995e-01:4.6264438960683846e-01:9.7094586413363393e-01:3.6108600225029142e-01:1.2053569695645785e+00:2.8851215919301526e-01:1.9810093083738809e+00:3.6748745219096329e-01:2.4656775999409137e+00:3.6047256219589868e-01:3.4339033024665366e+00:4.6331032999453731e-01:3.9987304298754873e+00 + CVs 20 + 1.7316163446644650e-01 3.1509852342344691e-01 -6.8248197006834016e-02 + 3.4275317936609639e-01 6.4798351971771229e-01 -1.4274390714021357e-01 + 5.2416851853450763e-01 9.9319687007012658e-01 -2.4112422393265365e-01 + 7.2862371918013935e-01 1.3404074973953048e+00 -3.8233167495305503e-01 + 9.5867602038214406e-01 1.6743506302654128e+00 -5.8506266101597548e-01 + 1.2086773841673428e+00 1.9737251489841889e+00 -8.6568381370420033e-01 + 1.4646241712144761e+00 2.2108514984778465e+00 -1.2336913251416937e+00 + 1.7033635420478475e+00 2.3546082102733443e+00 -1.6878572109544698e+00 + 1.8935776788870249e+00 2.3743141354415407e+00 -2.2127178779512384e+00 + 2.0044513857268100e+00 2.2451862251166927e+00 -2.7730326938471981e+00 + 2.0175125624357100e+00 1.9545121489460269e+00 -3.3149656353923471e+00 + 1.9399455116255042e+00 1.5149597628940228e+00 -3.7707478722107846e+00 + 1.8191155130728724e+00 9.7980291908149697e-01 -4.0906085622777226e+00 + 1.7170974928730784e+00 4.4081535811264572e-01 -4.2912477124196737e+00 + 1.6687390459592095e+00 2.4751498940691175e-02 -4.4762391926562834e+00 + 1.6944569849669897e+00 -8.2268371373401816e-02 -4.7722553525422171e+00 + 1.8459990227902836e+00 2.9678746362352548e-01 -5.0760333662423323e+00 + 2.1750710537952198e+00 1.0670689968358655e+00 -4.9388571442986118e+00 + 2.2529881521988195e+00 1.0940991301734431e+00 -5.2326109772973464e+00 + id 12857 + loc 8.8691473007202148e-01 2.1256197988986969e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6859857586117156e-01:2.4063309703262648e-01:2.7913795420741350e-02:3.2965511437785400e-01:7.3616811434172158e-01:3.6248283532530629e-01:1.0097044238176007e+00:3.4374514924807181e-01:1.9460569380666839e+00:3.3160905259392298e-01:2.7080103445091277e+00:3.6859488987541295e-01:3.3130577568043478e+00 + CVs 20 + 9.4748598738281578e-02 5.1964763255327751e-01 -4.1439742239609723e-01 + 1.2069374614079487e-01 9.2350261163725311e-01 -6.6028611707561446e-01 + 1.2666147506387199e-01 1.2801449146417818e+00 -8.4377566030131801e-01 + 1.2796675615267034e-01 1.6178249330237193e+00 -1.0041898902591924e+00 + 1.2128161782619107e-01 1.9303674660617531e+00 -1.1360369671727519e+00 + 1.0645904943319817e-01 2.2116229206165920e+00 -1.2324749455589650e+00 + 8.5596666349445294e-02 2.4584711713076759e+00 -1.2854578532173708e+00 + 6.1303935450410796e-02 2.6751030393853354e+00 -1.2872297676139417e+00 + 3.6812935818518522e-02 2.8642343341705843e+00 -1.2210124662959347e+00 + 1.9858404486691628e-02 2.9943379257214002e+00 -1.0799541592966158e+00 + 1.4591258853191680e-02 3.0421165097685554e+00 -8.9972945048869757e-01 + 1.7436419517242285e-02 3.0201156935203728e+00 -7.0488602435034076e-01 + 2.3576871518577680e-02 2.9419983362398439e+00 -5.0147823836876682e-01 + 2.7353953420635069e-02 2.8164405113584006e+00 -2.9034756680848295e-01 + 2.0441350312501660e-02 2.6464723350347250e+00 -6.3700594013700318e-02 + -6.2371518610968013e-03 2.4145719983992997e+00 1.9758081021551110e-01 + -5.6597985873002410e-02 2.0777136767272788e+00 4.6338848540791422e-01 + -1.3714146616898129e-01 1.6745065356571467e+00 6.1767134595586293e-01 + -2.7500352423636426e-01 1.3847883452340091e+00 5.9854029638550943e-01 + id 12858 + loc 5.9525859355926514e-01 9.6770000457763672e-01 411 + blend 0.0000000000000000e+00 + interp 4.1542897488804237e-01:4.1542482059829350e-01:1.3111438660998598e-01:3.0152986217384831e-01:9.6532212303427256e-01:2.7298157706351139e-01:1.8833812991214258e+00:3.1631160746847120e-01:2.6113329147510207e+00:2.7600281819340183e-01:2.9775635576547277e+00:3.1057440874488978e-01:3.7958981809323085e+00 + CVs 20 + 1.0445674688157740e+00 1.3992389964595742e-01 -2.4465405579312741e-01 + 1.7426877383402701e+00 1.4381222530681517e-01 -4.6289233503468497e-01 + 2.3473990230037898e+00 1.0845940297912515e-01 -6.5081150150586187e-01 + 2.9570131147321921e+00 6.9554163970828142e-02 -8.0212959884747370e-01 + 3.5629376226131644e+00 1.6250415008569497e-02 -9.0301259451123583e-01 + 4.1537768894521419e+00 -6.2554677695312755e-02 -9.4673354621114614e-01 + 4.7189968694736297e+00 -1.7713549319878685e-01 -9.3427818632629955e-01 + 5.2490864943012827e+00 -3.3625528225895662e-01 -8.7174786026895501e-01 + 5.7329989327924995e+00 -5.4415433436276395e-01 -7.6805111704042939e-01 + 6.1601467995263262e+00 -7.9667915725445271e-01 -6.3405882303525618e-01 + 6.5264203379760080e+00 -1.0839524404395937e+00 -4.7958358555509134e-01 + 6.8324665267998617e+00 -1.4001979744410677e+00 -3.0398593904183735e-01 + 7.0811246888121868e+00 -1.7387242609532496e+00 -1.0203587094493460e-01 + 7.2762857883424061e+00 -2.0877099977363844e+00 1.3085512372908370e-01 + 7.4247520781176783e+00 -2.4352640879068939e+00 3.9379538014822385e-01 + 7.5338931875082169e+00 -2.7686708402048303e+00 6.7646364743592446e-01 + 7.6107618665138368e+00 -3.0714770787701355e+00 9.6386194198481334e-01 + 7.6619093160930927e+00 -3.3431841068278123e+00 1.2465220879544758e+00 + 7.6258905758029432e+00 -3.6388993683698687e+00 1.5166211348773491e+00 + id 12859 + loc 6.2059760093688965e-01 7.5721013545989990e-01 382 + blend 0.0000000000000000e+00 + interp 4.8071286575528105e-01:4.1107173921283607e-01:3.8991605050610800e-01:4.3087562614813602e-01:1.1095960762365265e+00:3.1527081891131203e-01:1.9866658729693243e+00:3.0489871648955008e-01:2.5005318280877500e+00:3.0514896376984352e-01:3.4440733793886098e+00:4.8070805862662352e-01:3.9888482016970230e+00 + CVs 20 + 9.2252694105279875e-01 1.5203433130646915e-01 -6.0567060387423233e-01 + 1.5056492042941645e+00 1.4136551852142432e-01 -1.0522863152433080e+00 + 1.9937719172111805e+00 6.1361725691137181e-02 -1.4782591001467216e+00 + 2.4917573758822487e+00 -4.1508864347256758e-02 -1.9387277385195447e+00 + 2.9938088628826671e+00 -1.5737537790539258e-01 -2.4261259686786647e+00 + 3.4952646160395417e+00 -2.7877161355782210e-01 -2.9327467449500269e+00 + 3.9909965129971985e+00 -4.0357402038348378e-01 -3.4522938551917690e+00 + 4.4768587974332616e+00 -5.4176753301001279e-01 -3.9779695518393372e+00 + 4.9493564402272643e+00 -7.1818998965267999e-01 -4.4996643491765145e+00 + 5.3981381615721205e+00 -9.6352453040928521e-01 -5.0040132000481510e+00 + 5.8015195875935950e+00 -1.3000402137137810e+00 -5.4767152282027283e+00 + 6.1341320340390126e+00 -1.7332606940807194e+00 -5.9022974990985420e+00 + 6.3769666843758630e+00 -2.2526412706583336e+00 -6.2639065967012844e+00 + 6.5194804584792454e+00 -2.8362510122943076e+00 -6.5481538173443834e+00 + 6.5581075547640033e+00 -3.4544520192856885e+00 -6.7515034372966234e+00 + 6.4980923978100771e+00 -4.0671842173075188e+00 -6.8776191770389623e+00 + 6.3604979794529282e+00 -4.6355864830174607e+00 -6.9171375029568072e+00 + 6.1828926834252673e+00 -5.1314881690711296e+00 -6.8620907683196837e+00 + 5.9878255803748548e+00 -5.5877980414284085e+00 -6.7556827273683639e+00 + id 12860 + loc 4.4362075626850128e-02 6.8724775314331055e-01 377 + blend 0.0000000000000000e+00 + interp 3.6754690845487542e-01:3.6754323298579089e-01:1.2487636480867714e-01:1.1543470237409076e-01:1.0299515927566936e+00:2.6222353153518047e-01:2.3335737696095893e+00:2.8598099911284153e-01:3.2304585566384922e+00 + CVs 20 + -6.9655083895753866e-01 2.7256112568213364e-01 -3.0446617894009403e-01 + -1.2246872042348844e+00 4.1123776280253010e-01 -4.9091570903720344e-01 + -1.7267104912920497e+00 4.7599120474577672e-01 -6.4342419001438811e-01 + -2.2596861156133925e+00 5.0362192938400363e-01 -8.0934840168824018e-01 + -2.8081591255676344e+00 5.0476340447499535e-01 -1.0005038811991831e+00 + -3.3503923892842939e+00 4.7797546859914797e-01 -1.2239268271174764e+00 + -3.8726599782849132e+00 4.0390046818391978e-01 -1.4829389987849440e+00 + -4.3557391899707945e+00 2.5813138933796886e-01 -1.7807625193548919e+00 + -4.7687981873891507e+00 2.8939052609163962e-02 -2.1113082352415100e+00 + -5.0858524444185100e+00 -2.7694191420796122e-01 -2.4516040843604285e+00 + -5.2985335807320419e+00 -6.3684777523858527e-01 -2.7629263311458825e+00 + -5.4124803119078626e+00 -1.0171436055988607e+00 -3.0049684742790106e+00 + -5.4496853928681261e+00 -1.4012061094608281e+00 -3.1638326345342351e+00 + -5.4563627389991431e+00 -1.8395625623445548e+00 -3.2631249664463340e+00 + -5.4862414416645420e+00 -2.4151378173266385e+00 -3.3379857353903062e+00 + -5.5908938138800313e+00 -3.1315119685145936e+00 -3.4148707561219438e+00 + -5.8147733932250034e+00 -3.9024679755645852e+00 -3.4867689191847355e+00 + -6.1437009053920972e+00 -4.6019646571589332e+00 -3.5081232719528801e+00 + -6.3976919369824987e+00 -5.0919070523929886e+00 -3.4673356895623799e+00 + id 12861 + loc 7.0743036270141602e-01 9.9478590488433838e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0342841185190312e-01:3.4994691847421122e-01:7.0127953848627467e-02:4.1760574647506210e-01:8.2415416535284369e-01:3.3111454774379190e-01:1.6507266584480704e+00:2.4911647717235341e-01:2.1763879348269572e+00:4.1421779507188922e-01:2.8952803206961777e+00:4.8365211728237578e-01:3.0932528275807383e+00:5.0342337756778466e-01:3.7258559035848715e+00 + CVs 20 + -6.0677954599436007e-02 1.5657350708589862e-01 1.1346314999616340e-01 + -9.8484531620346455e-02 2.7050805374778175e-01 1.6863993055088070e-01 + -1.3993772395960563e-01 3.6272765765591258e-01 2.1426710218248485e-01 + -1.9748732026239454e-01 4.4633132115397089e-01 2.7186796819959880e-01 + -2.7103596883656056e-01 5.1895192057447104e-01 3.3800996254321752e-01 + -3.6077824214458576e-01 5.7860470475693193e-01 4.0931666428363117e-01 + -4.6706227407724532e-01 6.2412130338710436e-01 4.8299443594504188e-01 + -5.8985027489146924e-01 6.5506298428296372e-01 5.5738901568711252e-01 + -7.2799891703714681e-01 6.7184728368130020e-01 6.3241621956903993e-01 + -8.7892752018733356e-01 6.7642655758824421e-01 7.0999024615263107e-01 + -1.0392780028301996e+00 6.7250551713203521e-01 7.9364875227540654e-01 + -1.2055207474514427e+00 6.6522392277384845e-01 8.8694900784812158e-01 + -1.3741070384982177e+00 6.6036892695786109e-01 9.9139684866916455e-01 + -1.5433113922765511e+00 6.6312733310657679e-01 1.1038798155356300e+00 + -1.7136019378363927e+00 6.7722539361749057e-01 1.2164885088921542e+00 + -1.8836223874426721e+00 7.0505352004902866e-01 1.3199076588384853e+00 + -2.0484544971666225e+00 7.4805975547762271e-01 1.4062094865715127e+00 + -2.2061489156715623e+00 8.0595506019789953e-01 1.4678551403210118e+00 + -2.3977184466137689e+00 8.8179314104269468e-01 1.4755285607905959e+00 + id 12862 + loc 8.2381087541580200e-01 2.3436288535594940e-01 406 + blend 0.0000000000000000e+00 + interp 3.9826420099829291e-01:2.7788152472283950e-01:3.8679020385895069e-01:2.3475250302062722e-01:1.0713040651133481e+00:3.1403571937421043e-01:1.9666027391487093e+00:3.9826021835628295e-01:2.2831212440896058e+00:2.5287838555499065e-01:2.9914320376556081e+00:3.9626491619599680e-01:3.8470613981147386e+00 + CVs 20 + -1.6860706146691748e-01 1.0113913042462935e-01 7.1179563083500846e-02 + -2.8732867439457782e-01 1.5578151488563580e-01 1.2965342559957113e-01 + -3.6217144395348366e-01 1.7289777748870272e-01 1.7706813543570749e-01 + -4.2894674680053602e-01 1.8217518548187606e-01 2.2703598195767088e-01 + -4.8921580328703568e-01 1.8565425308588229e-01 2.7887725541642161e-01 + -5.4620208343976340e-01 1.8475001014581083e-01 3.3231751321339137e-01 + -6.0593905405781490e-01 1.8000318199524695e-01 3.8840450936284676e-01 + -6.7610294157462791e-01 1.7030254347173168e-01 4.4900113470681430e-01 + -7.5732980596617949e-01 1.5300234857337713e-01 5.1272367248837625e-01 + -8.3642466778883051e-01 1.2583542905213657e-01 5.7207520753240515e-01 + -9.0215987415027987e-01 8.8081314160968871e-02 6.2157795995280007e-01 + -9.6493227608630905e-01 3.7429445672645500e-02 6.6641429615977599e-01 + -1.0430379994326326e+00 -3.1512184837442558e-02 7.1594731193820804e-01 + -1.1388722375218543e+00 -1.2141582968355191e-01 7.7158078493508198e-01 + -1.2396906378155361e+00 -2.2910285557930565e-01 8.2761422427606957e-01 + -1.3349822270806297e+00 -3.4907434015514238e-01 8.8138201670804528e-01 + -1.4261069242257065e+00 -4.7843842608407183e-01 9.3624362631971358e-01 + -1.5203981573346970e+00 -6.1745778468440538e-01 9.9566771725267977e-01 + -1.6881940659188706e+00 -7.9101000340514460e-01 1.0788632601228334e+00 + id 12863 + loc 6.3572078943252563e-01 4.6200230717658997e-01 415 + blend 0.0000000000000000e+00 + interp 4.7734368927236270e-01:2.6814979717172249e-01:3.2580267336781676e-01:4.6463670399317736e-01:9.5240721603924039e-01:3.5235739367604801e-01:1.7917401514719651e+00:4.1007236814507325e-01:2.0505458895951421e+00:2.9386564478967359e-01:3.0289004080070976e+00:4.7733891583547000e-01:3.9866493016642210e+00 + CVs 20 + -2.9012955407938706e-01 1.9544014310605304e-01 -4.3595049043023179e-02 + -5.4562474141227080e-01 3.3926824405233919e-01 -5.2373175498536345e-02 + -8.0018614835082291e-01 4.6506026732131939e-01 -6.8310533696066766e-02 + -1.0758434751947863e+00 5.8835485479530425e-01 -1.1219687991922572e-01 + -1.3697240223388831e+00 7.0225888259893221e-01 -1.8834192893173152e-01 + -1.6759686273873020e+00 8.0010725990482912e-01 -3.0137824047930550e-01 + -1.9869150313723236e+00 8.7656683646520817e-01 -4.5385561044649564e-01 + -2.2952499738425254e+00 9.2791501685264854e-01 -6.4293115600330553e-01 + -2.5943403020513918e+00 9.5250632518546996e-01 -8.6227567103087255e-01 + -2.8780046121585903e+00 9.5086739281440980e-01 -1.1050005848904427e+00 + -3.1454071014278560e+00 9.2259745257338843e-01 -1.3560587319972133e+00 + -3.4103152665754140e+00 8.6052099348579736e-01 -1.5737563940261181e+00 + -3.6872024577869773e+00 7.5630787761823837e-01 -1.6946055864059029e+00 + -3.9567115722992918e+00 6.1873183160681222e-01 -1.6902069166324827e+00 + -4.1908379992337750e+00 4.6681504042572852e-01 -1.5990939468949059e+00 + -4.3825214639985157e+00 3.1092301682912105e-01 -1.4576625702315007e+00 + -4.5184712249527870e+00 1.6448875229348214e-01 -1.2683245570295483e+00 + -4.5840625557579351e+00 4.6471535194081426e-02 -1.0395953357984742e+00 + -4.7763448062332490e+00 -1.0291690588372360e-01 -9.2556898091521644e-01 + id 12864 + loc 4.8998913168907166e-01 3.8128903508186340e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8786413660311009e-01:3.4948870444584440e-01:2.5357054230098641e-01:3.5517474940236282e-01:1.0119875185799316e+00:3.5332504718824403e-01:1.8960868642784918e+00:3.8786025796174406e-01:2.3411815555032076e+00:3.3940280864258443e-01:3.1367432976552072e+00:2.6467537428957560e-01:3.9073415098056916e+00 + CVs 20 + -1.4710314854062970e-01 3.7597858796391531e-01 -1.2610211783588748e-01 + -3.1992093103505054e-01 7.5747676170198475e-01 -2.9268376154429038e-01 + -5.2050596580679076e-01 1.1436716146078532e+00 -4.6930691872346930e-01 + -7.6075711792596612e-01 1.5240342203097454e+00 -6.3906531038861969e-01 + -1.0571905121113225e+00 1.8781097374344995e+00 -7.9364073189047579e-01 + -1.4168236680998985e+00 2.1671370047341449e+00 -9.2920538542820741e-01 + -1.8219832327561218e+00 2.3451091220934339e+00 -1.0483664126950687e+00 + -2.2272888832089395e+00 2.3800162142728403e+00 -1.1584159746814089e+00 + -2.5722944188543169e+00 2.2643225817682038e+00 -1.2637046152140505e+00 + -2.8125381906891320e+00 2.0308536403543398e+00 -1.3570938953753700e+00 + -2.9674151987353299e+00 1.7409592719018696e+00 -1.4334447207203225e+00 + -3.1048894096953736e+00 1.4273151695001589e+00 -1.5027207461277545e+00 + -3.2720296168823007e+00 1.0870147991685168e+00 -1.5658436080324130e+00 + -3.4741258604521446e+00 7.1817174358682934e-01 -1.5846858309834886e+00 + -3.7027876421343433e+00 3.3958000143772271e-01 -1.5060458198125941e+00 + -3.9690701667033776e+00 -1.2493778175443060e-02 -1.3060619872765700e+00 + -4.2695599066659389e+00 -2.8930297725900600e-01 -9.7979552992919128e-01 + -4.5329413202157571e+00 -4.6003001587357562e-01 -5.6532152231982935e-01 + -4.7908720932554525e+00 -6.3887700470089015e-01 -1.9955907485554472e-01 + id 12865 + loc 3.2117676734924316e-01 3.4320205450057983e-02 414 + blend 0.0000000000000000e+00 + interp 5.5034010983335095e+00:4.2832091066522748e-01:2.0483781028202142e-04:3.7159135229706575e-01:5.9824851321335215e-01:3.3503922425497934e-01:1.0058795283243507e+00:4.4590762960642466e-01:2.0108925173117864e+00:5.5033910983335099e+00:3.9167653190937495e+00:4.7391253771189579e+00:3.9274595373970369e+00:6.7325326531480079e-01:3.9824242607474476e+00 + CVs 20 + -9.1018389315707882e-02 1.6153878797354773e-01 -9.9174884550617015e-01 + -1.9585440666612444e-01 1.4894233405217000e-01 -1.6517776571494653e+00 + -2.9065090052054188e-01 8.0389682361546699e-02 -2.2217933634608524e+00 + -3.7959158394932746e-01 -2.7049472719224421e-03 -2.8025189169807949e+00 + -4.6248589360424486e-01 -9.7353248775652435e-02 -3.3771395896037788e+00 + -5.3834685015009587e-01 -1.9794822879344065e-01 -3.9337178321114203e+00 + -6.0735354199428571e-01 -3.0018635971321117e-01 -4.4672605746093303e+00 + -6.7099434335415720e-01 -4.0360558442021310e-01 -4.9782036828406708e+00 + -7.2836186345996123e-01 -5.1080728337584524e-01 -5.4698594214474747e+00 + -7.7589392351059383e-01 -6.2708490171752351e-01 -5.9455355845036557e+00 + -8.1641847959443969e-01 -7.6332443267842232e-01 -6.4036405717337015e+00 + -8.6830503789850044e-01 -9.3448414431441162e-01 -6.8342470644141287e+00 + -9.5241060015476908e-01 -1.1479333552813398e+00 -7.2260883077779301e+00 + -1.0699767983635191e+00 -1.4046803199307867e+00 -7.5805969462948202e+00 + -1.2120272683690092e+00 -1.7073410164664149e+00 -7.8995744955890581e+00 + -1.3726250591688136e+00 -2.0419394836137172e+00 -8.1665253714374675e+00 + -1.5456356992016809e+00 -2.3766553263386365e+00 -8.3638919485325793e+00 + -1.7210499727193613e+00 -2.6882129056548374e+00 -8.4938876301927912e+00 + -1.8614700905001933e+00 -2.9934251720490650e+00 -8.6142282629118139e+00 + id 12866 + loc 2.1474273502826691e-01 5.8433401584625244e-01 403 + blend 0.0000000000000000e+00 + interp 4.7578632334961823e-01:2.8047998325863993e-01:3.4835624372963059e-03:3.8647667857316736e-01:6.0310194069238232e-01:3.2590111508654246e-01:1.1805446798161967e+00:4.7578156548638478e-01:1.9233830977271746e+00:3.8956223557126479e-01:2.4534735244224963e+00:3.8378126206057106e-01:2.9997329529309469e+00:4.2569776736226078e-01:3.4429767012751071e+00 + CVs 20 + -7.0932322976054174e-04 1.9228545918697817e-01 -1.2155859505869286e-01 + -9.0152677210270094e-04 3.9924797921238009e-01 -2.3526614094420248e-01 + -1.5443870371532220e-02 6.2197059992338888e-01 -3.4149609708975376e-01 + -5.4303267569243530e-02 8.5868095848172654e-01 -4.4121139871188153e-01 + -1.2626182835281652e-01 1.1071560681444785e+00 -5.3541278972268447e-01 + -2.4008036696013124e-01 1.3628493659127709e+00 -6.2289496416497792e-01 + -4.0152063890096845e-01 1.6183285097128746e+00 -6.9921247196073422e-01 + -6.1056093465832295e-01 1.8647570241943860e+00 -7.5733040173617083e-01 + -8.6532383660080769e-01 2.0932745234233874e+00 -7.8993278093534347e-01 + -1.1671215347483714e+00 2.2927976420197460e+00 -7.9028153373863286e-01 + -1.5151097030174752e+00 2.4485699154968819e+00 -7.5056984494155621e-01 + -1.8978110090948275e+00 2.5463317764435001e+00 -6.6179844773107221e-01 + -2.2949764594220485e+00 2.5760379829731161e+00 -5.1814536150041313e-01 + -2.6816430872912052e+00 2.5337982735832414e+00 -3.1805931559641942e-01 + -3.0301958443530870e+00 2.4246360169888530e+00 -6.3914791881047553e-02 + -3.3235277268496901e+00 2.2542133425032400e+00 2.2976262802626851e-01 + -3.5608200396176648e+00 2.0277100752254360e+00 5.3198398141609049e-01 + -3.7503768783217311e+00 1.7639187488274697e+00 8.0991028658835873e-01 + -3.9395408215532397e+00 1.5796663551404309e+00 9.8500525498841762e-01 + id 12867 + loc 6.3188987970352173e-01 1.1352389305830002e-01 395 + blend 0.0000000000000000e+00 + interp 5.5557965209024529e-01:3.3016797081529797e-01:1.7355655577147022e-03:3.0570448632609876e-01:7.3835597000703879e-01:4.8047690543484217e-01:1.0609204046039609e+00:4.7502409213763552e-01:1.6866176663095243e+00:5.5557409629372445e-01:1.9713276636708270e+00:2.5605235194842246e-01:2.7662924882284168e+00:3.5280765845842743e-01:3.2064017125140514e+00 + CVs 20 + -3.3484507693777243e-01 2.5468737997604551e-01 3.4580950098166918e-01 + -6.2449846653500152e-01 4.6783496708733058e-01 6.5443457207731792e-01 + -9.1423234191248315e-01 6.6429660609190788e-01 9.5260309131055521e-01 + -1.2297332440793081e+00 8.5322795246853500e-01 1.2522783475770964e+00 + -1.5748711694212174e+00 1.0227095455218824e+00 1.5482587586832306e+00 + -1.9491805675512297e+00 1.1612039205584082e+00 1.8388569640868817e+00 + -2.3507084493444772e+00 1.2574530699667430e+00 2.1270905542543770e+00 + -2.7739811345674634e+00 1.2938873906806609e+00 2.4120702436043091e+00 + -3.2051075785091268e+00 1.2495349742556077e+00 2.6867549431353250e+00 + -3.6196140983584817e+00 1.1134823637387041e+00 2.9448062384278866e+00 + -3.9908012611652777e+00 8.9184008951733640e-01 3.1826818445542040e+00 + -4.3026020206538380e+00 5.9996022373395608e-01 3.3893176668666385e+00 + -4.5508833685178329e+00 2.5955504046531352e-01 3.5529295746353107e+00 + -4.7372315737699671e+00 -1.0688382334900837e-01 3.6728328209571588e+00 + -4.8649053502846353e+00 -4.8015902408816569e-01 3.7577842078164432e+00 + -4.9341618262071272e+00 -8.3886088782960311e-01 3.8101007992700806e+00 + -4.9450933089579552e+00 -1.1494791445522838e+00 3.8200886783737955e+00 + -4.9189954696358456e+00 -1.3935785610170064e+00 3.7946696371287043e+00 + -4.9089169381977822e+00 -1.7288975432139115e+00 3.8348274439741559e+00 + id 12868 + loc 5.1551991701126099e-01 5.8480817079544067e-01 393 + blend 0.0000000000000000e+00 + interp 4.8646410273151014e-01:3.8998870445271894e-01:1.6809613716195937e-02:4.8645923809048286e-01:5.2826921330840748e-01:3.2422502050431673e-01:1.1091589893812646e+00:3.4419102741483554e-01:2.0806339286520514e+00:2.7696593762242239e-01:2.8255189803507061e+00:3.7132942084276388e-01:3.6345689540190453e+00 + CVs 20 + -3.6010676757026217e-01 3.2693211874270395e-01 -1.7776886868479475e-01 + -6.8368392440843573e-01 6.5536156155106773e-01 -3.3124574613526370e-01 + -9.8309019777530504e-01 1.0000433569089615e+00 -4.8562897404903876e-01 + -1.2692317324472422e+00 1.3548384346726940e+00 -6.5895633616699967e-01 + -1.5547842128820575e+00 1.7011437093163098e+00 -8.6079310571848744e-01 + -1.8499232921419257e+00 2.0237596220998832e+00 -1.0909323450962931e+00 + -2.1615764528006784e+00 2.3142787747788458e+00 -1.3402385025135126e+00 + -2.5034528689500526e+00 2.5614943482681305e+00 -1.5983498453435405e+00 + -2.8953812181872620e+00 2.7415369376545193e+00 -1.8577381446458778e+00 + -3.3400262185210075e+00 2.8319901655874924e+00 -2.1183620319541117e+00 + -3.8171736758238737e+00 2.8343683468991743e+00 -2.3956323522698391e+00 + -4.3100550565464761e+00 2.7537454285532226e+00 -2.7106687927407451e+00 + -4.8014541056089381e+00 2.5713520232821168e+00 -3.0624842669650416e+00 + -5.2607439419783351e+00 2.2662856216134855e+00 -3.4304525946009456e+00 + -5.6544270605497289e+00 1.8442191270947099e+00 -3.8027624387006433e+00 + -5.9991325915978768e+00 1.3132329242271643e+00 -4.1659219220242427e+00 + -6.3678791726681485e+00 6.7736319136787371e-01 -4.4612866000593137e+00 + -6.7803963148643200e+00 1.1153490876090189e-03 -4.6285686569055402e+00 + -7.1243054726879382e+00 -5.8057732693210817e-01 -4.7690416980087518e+00 + id 12869 + loc 6.9758526980876923e-02 4.4464796781539917e-01 409 + blend 0.0000000000000000e+00 + interp 4.2118856393704418e-01:3.6229027925861418e-01:3.0054153956425189e-02:2.8173138925890368e-01:1.0054625702105167e+00:3.6820373988203819e-01:1.6696627338357160e+00:2.6623969729966634e-01:2.1635886693022823e+00:4.2118435205140481e-01:3.0003280612315582e+00:2.4796117077759594e-01:3.5222965631030574e+00 + CVs 20 + -2.5773736852984747e-01 2.4600003203996459e-01 -3.5852777491603249e-01 + -4.7763612225394281e-01 4.7136567793913670e-01 -6.4991699532816216e-01 + -6.6951556742775886e-01 7.1271725933064078e-01 -9.4149253825560419e-01 + -8.3642437713782758e-01 9.7703444013064711e-01 -1.2572012667324350e+00 + -1.0021873993435195e+00 1.2514945640598372e+00 -1.6044345292646605e+00 + -1.2110946994815011e+00 1.5180833720590310e+00 -1.9906759875304827e+00 + -1.5084924585411332e+00 1.7503305649422682e+00 -2.4098368370130330e+00 + -1.9155754478513374e+00 1.9124291272293492e+00 -2.8434298110065188e+00 + -2.4225002920951892e+00 1.9662565114295125e+00 -3.2849742600936489e+00 + -2.9958785960760603e+00 1.8708836478601738e+00 -3.7365202711418863e+00 + -3.5377567275603430e+00 1.5933739671358722e+00 -4.1727262379404237e+00 + -3.9068626331878433e+00 1.1777348401626195e+00 -4.5448495647150713e+00 + -4.0750374103623770e+00 7.0140881172330261e-01 -4.8500332950185978e+00 + -4.1196105977238835e+00 1.8242560458713664e-01 -5.1280520920005248e+00 + -4.1470434477521909e+00 -3.8486160847578832e-01 -5.4191677496055508e+00 + -4.2385401268049172e+00 -9.6982331617336737e-01 -5.7479916044251187e+00 + -4.3712646016792984e+00 -1.5228245185134295e+00 -6.1215956682203441e+00 + -4.4869792965969051e+00 -2.0352518563593511e+00 -6.5502251196707375e+00 + -4.6129059707838413e+00 -2.5625733284853456e+00 -7.0855509394882636e+00 + id 12870 + loc 9.3709267675876617e-02 3.4318724274635315e-01 417 + blend 0.0000000000000000e+00 + interp 3.0140744576754946e-01:3.0140443169309178e-01:4.9730511653870735e-01:2.0491013949253270e-01:1.0184035855214295e+00:2.8658459302437167e-01:2.0692429085570776e+00:2.5081708985485518e-01:2.9958812552464646e+00 + CVs 20 + -1.6328754840699297e-01 2.1550776920508274e-01 2.9318943492265459e-01 + -2.5898119387764768e-01 3.8487474330576571e-01 5.2207574705546334e-01 + -3.3422166826263283e-01 5.3068835384952973e-01 7.1610944697527512e-01 + -4.2046873869703660e-01 6.7138055249480355e-01 9.1058320329531073e-01 + -5.1904841543932889e-01 8.0551772519558296e-01 1.1046882865976231e+00 + -6.3134714931429980e-01 9.3044511837982646e-01 1.2982642840553229e+00 + -7.5933949244072774e-01 1.0426024737590622e+00 1.4917698701685944e+00 + -9.0506280687672302e-01 1.1379055988996063e+00 1.6850103529108833e+00 + -1.0708411842382872e+00 1.2120357303689751e+00 1.8760911102607352e+00 + -1.2604213771370161e+00 1.2591408482042432e+00 2.0620341500137975e+00 + -1.4773044617675120e+00 1.2706273529822709e+00 2.2395137542973860e+00 + -1.7193988789773904e+00 1.2386031376102746e+00 2.4043267613485053e+00 + -1.9777891970410382e+00 1.1634640360332784e+00 2.5509544544420599e+00 + -2.2429458351056408e+00 1.0534683034573160e+00 2.6755359179985856e+00 + -2.5070022622450723e+00 9.1604263139985120e-01 2.7804979675382353e+00 + -2.7610964011315957e+00 7.5578376535956493e-01 2.8755774757796373e+00 + -2.9979378996348536e+00 5.7583358955005637e-01 2.9721574991863298e+00 + -3.2151222707261846e+00 3.7894847718805402e-01 3.0741726823533169e+00 + -3.3947779350865082e+00 2.3952545864985653e-01 3.2163295210298823e+00 + id 12871 + loc 6.1922818422317505e-01 4.6749827265739441e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3930693483778732e-01:4.3930254176843897e-01:2.2150469132733053e-01:3.9798978755371245e-01:9.1545993032275830e-01:2.3944759251541259e-01:1.3164563563392793e+00:4.1287483022855548e-01:2.0884789949040798e+00:3.2188433020702040e-01:2.8275443184065527e+00:2.6609968748221541e-01:3.3492581053719279e+00 + CVs 20 + -5.7110730758472117e-02 3.3218222098693695e-01 1.8067876345034295e-01 + -1.2059538346957821e-01 6.7256284029021751e-01 3.5041182526213355e-01 + -2.0251029352167060e-01 1.0056707205551285e+00 4.8345991486519224e-01 + -3.5392351049668813e-01 1.3246976427453139e+00 5.6756986988123692e-01 + -5.7100886999031331e-01 1.6216288648782808e+00 6.1568497608585071e-01 + -7.5710685529625332e-01 1.9087646213227525e+00 6.2045646474037008e-01 + -8.2514190774734097e-01 2.1862013756475149e+00 5.7303099569344351e-01 + -7.6218941204517066e-01 2.4404495348897224e+00 5.1608704511303005e-01 + -6.0934700383341101e-01 2.7103980207836340e+00 5.4913102316526008e-01 + -4.0132596990353320e-01 3.0343470154996908e+00 7.7089472613451149e-01 + -2.3440504704919740e-01 3.3769367586043741e+00 1.1036716009651066e+00 + -1.3101242211843722e-03 3.3386879861785559e+00 9.3409580774417089e-01 + 1.3218463864592844e-01 2.9045844753164993e+00 5.2476237645532930e-01 + 6.8489147032499376e-01 2.3597712444906378e+00 8.8754284189227040e-01 + 9.5551788194538345e-01 1.7809513806395945e+00 1.1756351016840338e+00 + 1.0138001222388158e+00 1.2144123623595164e+00 1.3393305136090612e+00 + 9.0589473721528901e-01 7.3677168143908467e-01 1.3297850580141275e+00 + 7.1510969918494316e-01 4.2943867373369676e-01 1.1786719075491192e+00 + 5.6102129325165073e-01 1.6584214327588398e-01 1.1226064850193525e+00 + id 12872 + loc 7.8124082088470459e-01 8.6059498786926270e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0342841185190312e-01:3.4572517752659121e-01:2.0858930053265334e-01:3.6777752751306114e-01:1.0600523015484276e+00:5.0342337756778466e-01:1.7226876668244158e+00:3.4324596017111564e-01:2.3260227210922135e+00:4.5354799667299284e-01:2.9555250475671704e+00:3.8750110010753214e-01:3.2887729668777865e+00 + CVs 20 + 9.0245009307218682e-02 3.6264273305600153e-01 1.0913389243327820e-01 + 2.0367675666364585e-01 6.4507441624330242e-01 1.1292354191195747e-01 + 3.0584177858925726e-01 9.2510302119473575e-01 1.2166691852112183e-01 + 3.8678017343390136e-01 1.2061959329101724e+00 1.4793932658280629e-01 + 4.3990657963623603e-01 1.4834082688438630e+00 1.8400132319539675e-01 + 4.5654940446320719e-01 1.7535798506112810e+00 2.2060786707008784e-01 + 4.2792445879915525e-01 2.0130037138705683e+00 2.4757799113970802e-01 + 3.4684806586866490e-01 2.2561905121270551e+00 2.5754419483286684e-01 + 2.0742531886459742e-01 2.4739063351723081e+00 2.4463905376141404e-01 + 4.2258419327776270e-03 2.6495868229784958e+00 1.9914255951928905e-01 + -2.6476838240178702e-01 2.7527130780210878e+00 1.0487575826923323e-01 + -5.7883702841482243e-01 2.7349638539644747e+00 -5.2613536877422096e-02 + -8.7027202229900202e-01 2.5622193176349759e+00 -2.5796176199820020e-01 + -1.0658568116702920e+00 2.2769762202956656e+00 -4.5445079468456784e-01 + -1.1673754563405343e+00 1.9686031219025968e+00 -5.9499617925831716e-01 + -1.2245774963670262e+00 1.6821137555888281e+00 -6.7423593043066965e-01 + -1.2634176098971412e+00 1.4111295890743885e+00 -7.0700616538994876e-01 + -1.2819996789713941e+00 1.1456543622211517e+00 -7.0821584301912477e-01 + -1.3413265580086973e+00 9.1214924196160996e-01 -6.7936276467780121e-01 + id 12873 + loc 6.2519676983356476e-02 1.3522182404994965e-01 373 + blend 0.0000000000000000e+00 + interp 3.7757008966623679e-01:3.5013662416916347e-01:7.4167657289928801e-01:3.7756631396534013e-01:1.0889641157799663e+00:2.4666589561017013e-01:1.7606839096981890e+00:2.8991074368786984e-01:2.3416540282903942e+00:2.8435620600322331e-01:3.1035605663489125e+00:3.5503278523052484e-01:3.9999449399818094e+00 + CVs 20 + -9.2303289829120852e-02 7.8424714946764440e-01 3.6463442082022274e-01 + -2.6754767652337208e-01 1.5752163099393355e+00 6.9191324597893189e-01 + -5.1483177398597357e-01 2.3484293129126974e+00 9.2544351205338715e-01 + -7.9160046693609876e-01 3.0141353555820620e+00 9.3832273309323322e-01 + -1.0985736328305118e+00 3.4641065716953854e+00 6.9043804341905313e-01 + -1.3890599359952553e+00 3.6242851276784327e+00 3.0155538274237426e-01 + -1.6214541489309184e+00 3.5077247848193971e+00 -1.1355016133804918e-01 + -1.7979857908887604e+00 3.1619412322667229e+00 -5.0859664741158972e-01 + -1.9252032457430559e+00 2.6413650843000234e+00 -8.5539880997883144e-01 + -2.0044940632594206e+00 1.9923128802018799e+00 -1.1673371674032746e+00 + -2.0118067014764112e+00 1.2489876662907222e+00 -1.4796819197227049e+00 + -1.8855954572353000e+00 4.0022812466495639e-01 -1.8381732867838878e+00 + -1.5578076459949570e+00 -5.1840829120804011e-01 -2.2824085884748873e+00 + -1.0432627794083069e+00 -1.4002018492775552e+00 -2.8862893760927206e+00 + -5.4248358290895438e-01 -2.1166979272830826e+00 -3.8433824432227173e+00 + -4.6868002117485769e-01 -2.4061282531806611e+00 -5.1488505395802875e+00 + -9.8801690072767767e-01 -2.3046210827865741e+00 -6.4036053162634534e+00 + -2.0363517790160244e+00 -2.0514363925856989e+00 -7.3678102016532669e+00 + -2.6774476369729947e+00 -1.8262788408886683e+00 -8.1863579043496486e+00 + id 12874 + loc 1.6915090382099152e-01 2.7010745834559202e-03 411 + blend 0.0000000000000000e+00 + interp 4.2769345540272174e-01:2.9963590328142009e-01:3.6117314903654552e-02:5.3583043086947495e-02:7.1493426582683339e-01:4.2768917846816773e-01:1.8281778270140974e+00:3.4796524941106560e-01:2.3325371961665402e+00:2.7246674499017898e-01:3.0519109349483546e+00:3.5670039644231233e-01:3.9628536920384398e+00 + CVs 20 + -2.2795520724325696e-01 2.3442866668860224e-01 -6.5553713813475012e-01 + -4.1351903560830744e-01 3.7138696486853123e-01 -1.1448057663829334e+00 + -5.8123913305268093e-01 4.7548933389916287e-01 -1.6055588453719469e+00 + -7.4098410905662393e-01 5.6064656202156526e-01 -2.0808843492071283e+00 + -9.0289607088249901e-01 6.1241600865357393e-01 -2.5606625803351633e+00 + -1.0828605698036444e+00 6.1942514370486079e-01 -3.0319795279184900e+00 + -1.2931356627258241e+00 5.7802345315196502e-01 -3.4735310529856034e+00 + -1.5356089319968695e+00 4.9612114444187361e-01 -3.8618155377258550e+00 + -1.8043798427035265e+00 3.9253913876181268e-01 -4.1901127068437560e+00 + -2.0972855055291486e+00 2.8433191113862732e-01 -4.4719527292645100e+00 + -2.4040997910804625e+00 1.3798399351477508e-01 -4.7240575582248159e+00 + -2.6640248759956471e+00 -1.3792014692361798e-01 -4.9349987532562594e+00 + -2.8385579658220044e+00 -5.8033347215668707e-01 -5.0814753107050565e+00 + -2.9838474796144605e+00 -1.1591392878204765e+00 -5.1575982946817920e+00 + -3.1999529680157268e+00 -1.8070264669730915e+00 -5.1714707453699882e+00 + -3.5743170077860396e+00 -2.4231080189288825e+00 -5.1403017981967931e+00 + -4.1086649403393620e+00 -2.9616185097153265e+00 -5.1007738472729240e+00 + -4.7162656904222207e+00 -3.4599147195064259e+00 -5.1157013623832270e+00 + -5.2805275865236663e+00 -3.9468524522310142e+00 -5.2451368258838720e+00 + id 12875 + loc 6.1003667116165161e-01 2.3730331659317017e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6763326240346209e-01:4.6762858607083807e-01:3.3736790043188514e-01:3.7346885778909489e-01:9.2600431457189658e-01:3.6677843014433037e-01:1.2435588951738499e+00:3.4680978681972963e-01:1.9898199813192239e+00:3.8563576943344668e-01:2.8946604929130180e+00:3.9384814209699209e-01:3.1286103392656348e+00:3.4590767977545606e-01:3.8046027490164454e+00 + CVs 20 + -1.7786414102484982e-01 3.1185318340235085e-01 9.2615560582773870e-03 + -3.3234700793742705e-01 6.1793869300405679e-01 3.9344801314114830e-02 + -4.8812588143999736e-01 9.1822666841468048e-01 8.7671594128632513e-02 + -6.5805883418145594e-01 1.2101311435364708e+00 1.5507314670463135e-01 + -8.4739166784984221e-01 1.4892704195926036e+00 2.4538485951104627e-01 + -1.0602046829135250e+00 1.7483366761451409e+00 3.6410850330833022e-01 + -1.2972750779736235e+00 1.9747460651491158e+00 5.1864181958820554e-01 + -1.5542057127982289e+00 2.1536134841720642e+00 7.1309615927559378e-01 + -1.8228801796553364e+00 2.2723847530517096e+00 9.4540039284831667e-01 + -2.0945296448422051e+00 2.3216357888691475e+00 1.2077645718733794e+00 + -2.3618516233365914e+00 2.2961634493367420e+00 1.4876955831642544e+00 + -2.6202785279977010e+00 2.1974113183523150e+00 1.7720687666025587e+00 + -2.8691157494126851e+00 2.0325074267914647e+00 2.0527162237935457e+00 + -3.1103974723880952e+00 1.8096360465163541e+00 2.3271621657102064e+00 + -3.3475345245025037e+00 1.5304950533459829e+00 2.5901410286696147e+00 + -3.5826688648565281e+00 1.1779129727272513e+00 2.8076837635631531e+00 + -3.8010863608730898e+00 7.3167664951963940e-01 2.8693770406286077e+00 + -3.9631331421312730e+00 2.8790049843185006e-01 2.6888185493596151e+00 + -4.1213537582434148e+00 -4.3113601877025731e-02 2.5712495889671878e+00 + id 12876 + loc 3.5056790709495544e-01 1.8135191500186920e-01 382 + blend 0.0000000000000000e+00 + interp 4.1672232139245946e-01:4.0857418981454496e-01:3.6704705345607624e-01:3.2184127093987092e-01:1.0019422654383461e+00:2.6358479481099645e-01:1.7265555089398514e+00:3.8626012693748529e-01:2.4793616050250522e+00:4.1671815416924557e-01:2.9997619168844665e+00:3.9705470469385856e-01:3.9011575808121908e+00 + CVs 20 + -3.7663842796820979e-01 1.6582608459163076e-01 -9.2861486861216413e-01 + -6.8249701685982367e-01 2.2684328803385900e-01 -1.5979681688578076e+00 + -9.5414939877760263e-01 2.5732032624563195e-01 -2.1978296602899641e+00 + -1.2064664700769570e+00 2.8081712615052001e-01 -2.7984420790465889e+00 + -1.4292437119039250e+00 2.8893168945077519e-01 -3.3907717402532089e+00 + -1.6178920946184630e+00 2.6841770433220025e-01 -3.9665614875200998e+00 + -1.7774662945191839e+00 2.0108694766005364e-01 -4.5129098597332549e+00 + -1.9222188898565422e+00 6.8696587249444496e-02 -5.0098239635698345e+00 + -2.0646146541799344e+00 -1.3664871845376836e-01 -5.4368683027437434e+00 + -2.2098911994699972e+00 -4.0347087789655611e-01 -5.7686754250045755e+00 + -2.3581781114070570e+00 -6.9183975654830765e-01 -5.9804973308790155e+00 + -2.5124164470885755e+00 -9.4813623598031316e-01 -6.0743510406351753e+00 + -2.6751065628538018e+00 -1.1545743063383787e+00 -6.0851992223909210e+00 + -2.8344769460566956e+00 -1.3786305812524704e+00 -6.0347236849429411e+00 + -2.9693110913057752e+00 -1.7160366581706450e+00 -5.9092927270190110e+00 + -3.0613562001765509e+00 -2.1953531311776899e+00 -5.7334174552571016e+00 + -3.0950431085405068e+00 -2.7603134096087785e+00 -5.5794892825658957e+00 + -3.1032260484824379e+00 -3.3167927384039562e+00 -5.4912934475535193e+00 + -3.3004525752316902e+00 -3.7745359534796643e+00 -5.4313633120083251e+00 + id 12877 + loc 4.6321287751197815e-01 1.8620461225509644e-02 406 + blend 0.0000000000000000e+00 + interp 4.0822479540152684e-01:4.0822071315357283e-01:2.4018822642235393e-01:2.6689063074716057e-01:9.7852394352036931e-01:2.6467946851487378e-01:1.6815389148569713e+00:3.4260129909633136e-01:2.3719077567018712e+00:2.8902832877777451e-01:3.1225764223270893e+00:3.9321317084549640e-01:3.8883748994092744e+00 + CVs 20 + 2.6537458395279288e-02 1.0767472289558321e-01 -2.7175592155901825e-02 + 5.7850139930451523e-02 1.9767567804339703e-01 -5.4713315786715601e-02 + 9.1884584258899976e-02 2.7737671018363741e-01 -9.1518667486349639e-02 + 1.2430017335608659e-01 3.5108985170602780e-01 -1.4774445720707749e-01 + 1.5259982370614961e-01 4.1526361214167573e-01 -2.2264565555274735e-01 + 1.7490588796362844e-01 4.6685776719917538e-01 -3.1435135355425381e-01 + 1.9023175535871215e-01 5.0474656463360268e-01 -4.2091250467063823e-01 + 1.9922910824903114e-01 5.3027124115636060e-01 -5.4131014123957333e-01 + 2.0363787039138923e-01 5.4513481553799092e-01 -6.7231734476875760e-01 + 2.0244387978644468e-01 5.4934150785128077e-01 -8.0369238233755202e-01 + 1.9145880173359481e-01 5.4429158051707771e-01 -9.2445283518899013e-01 + 1.7033106065550130e-01 5.3598228724932184e-01 -1.0364899939515104e+00 + 1.4392494659675265e-01 5.3127520770876946e-01 -1.1526879690814953e+00 + 1.1618703578932665e-01 5.3424553609752179e-01 -1.2793536674006500e+00 + 8.6751229668484364e-02 5.4747262920691964e-01 -1.4093087644947500e+00 + 5.3613808848096356e-02 5.7304485955467710e-01 -1.5349763120582167e+00 + 1.7665399649582469e-02 6.1070002642798449e-01 -1.6602120306758925e+00 + -1.7851075961987928e-02 6.5711683569288271e-01 -1.7956424297857994e+00 + -3.7830173534911693e-02 7.1565701453343677e-01 -1.9845040340358338e+00 + id 12878 + loc 3.6260864138603210e-01 5.9293919801712036e-01 377 + blend 0.0000000000000000e+00 + interp 4.5978199255712687e-01:3.2816983728805388e-01:6.1035516330020345e-01:3.5620007837999812e-01:1.0816369679994449e+00:4.2658789119822471e-01:1.7491302066255112e+00:2.4522179538804037e-01:2.5877547723660737e+00:4.5977739473720131e-01:3.3369651688254267e+00:4.0159323912384515e-01:3.9957032910033057e+00 + CVs 20 + -7.3170012779307103e-01 2.6557692626042345e-01 -5.5892805120306599e-01 + -1.3360685594761261e+00 4.2011242261820747e-01 -9.5225422149060379e-01 + -1.9318663125006645e+00 5.3319534348378239e-01 -1.2943144896683301e+00 + -2.5714140068913611e+00 6.4030467971303406e-01 -1.6464549313901760e+00 + -3.2339421698455069e+00 7.3982059449215620e-01 -2.0219364692733257e+00 + -3.8962878996651593e+00 8.1798739285455735e-01 -2.4295514995106178e+00 + -4.5347326133107186e+00 8.5125487971821179e-01 -2.8720975089628431e+00 + -5.1221474185840377e+00 8.1856305236235904e-01 -3.3439907776589837e+00 + -5.6398792430108600e+00 7.1229616376861138e-01 -3.8223003676251626e+00 + -6.0950498512344335e+00 5.3874191783591963e-01 -4.2715669687690161e+00 + -6.5101826069403348e+00 3.0079904283926640e-01 -4.6668795707207504e+00 + -6.9028263607686213e+00 -8.8082325363849634e-03 -4.9982105232871490e+00 + -7.2718992579662913e+00 -3.9171888796964405e-01 -5.2547874577512941e+00 + -7.5890223057069512e+00 -8.1534678348228917e-01 -5.4128423511151684e+00 + -7.8199390183063375e+00 -1.2233436219274445e+00 -5.4508950860725420e+00 + -7.9519269836427853e+00 -1.5911301672093927e+00 -5.3821707236174001e+00 + -7.9821600479885229e+00 -1.9166063021502486e+00 -5.2589362353604576e+00 + -7.9343171434696806e+00 -2.2088539178439124e+00 -5.1326982470754015e+00 + -8.0127478469478106e+00 -2.5424268322350403e+00 -4.9797101286887955e+00 + id 12879 + loc 5.2700418233871460e-01 3.1734147667884827e-01 403 + blend 0.0000000000000000e+00 + interp 4.7313490999240687e-01:4.1894090791399913e-01:3.3468906619762784e-01:3.6099635407458164e-01:1.0260994264920555e+00:2.7037573079009136e-01:1.7159493660122904e+00:4.7313017864330698e-01:2.1306881136945872e+00:3.9501533515886039e-01:2.8160626916863727e+00:3.7279554828535305e-01:3.1184180650763134e+00:4.0599704833836825e-01:3.7874805487732108e+00 + CVs 20 + -9.9339282163429216e-02 3.7120650764926000e-01 1.5048915613383815e-01 + -1.3794405124321318e-01 7.2667140869121871e-01 2.9617777986325416e-01 + -1.6895731964526500e-01 1.0966664233784487e+00 4.4941753045254423e-01 + -2.0850907365690940e-01 1.4816854086334224e+00 6.2737407410008816e-01 + -2.4867232814144435e-01 1.8611355886264358e+00 8.4007204935998669e-01 + -2.6633527232171572e-01 2.2127334688817566e+00 1.0786356615053356e+00 + -2.3760819668489730e-01 2.5251123736271364e+00 1.3266193481213771e+00 + -1.5015746632503979e-01 2.7924907417341274e+00 1.5698560090227573e+00 + -4.1651194054410645e-03 3.0095901202527378e+00 1.7926193734619633e+00 + 1.9306829361822220e-01 3.1789180972971991e+00 1.9868356825381523e+00 + 4.4605738636964487e-01 3.3075328123247143e+00 2.1647460586581047e+00 + 7.7563261927079163e-01 3.3905261280184562e+00 2.3438919746791336e+00 + 1.1736220852787766e+00 3.4168055054068347e+00 2.5188908384800164e+00 + 1.5899218558910664e+00 3.3923956381100706e+00 2.6679140420707430e+00 + 2.0006961502887428e+00 3.3170328357770620e+00 2.7752121442165589e+00 + 2.4485797571148908e+00 3.1479380207989331e+00 2.8392128800054999e+00 + 2.9658664716203171e+00 2.8596768819957044e+00 2.9209922733493241e+00 + 3.4647084015979388e+00 2.5340204906816517e+00 3.1124989290133480e+00 + 3.7916299504165134e+00 2.2886863946713403e+00 3.3716445399335280e+00 + id 12880 + loc 6.0064917802810669e-01 9.1163921356201172e-01 1081 + blend 0.0000000000000000e+00 + interp 5.1694331140831362e-01:3.5445804453188234e-01:6.2186144448023739e-01:3.2538969559153069e-01:1.4790627075709439e+00:4.3411487118956560e-01:1.9379208435009598e+00:5.1693814197519961e-01:2.3625197354739469e+00:3.2710421766217906e-01:3.0870915642241132e+00:5.0538520789941599e-01:3.9840758851424325e+00 + CVs 20 + 1.0589673609260000e-01 5.0516822755455049e-01 5.0294210905941339e-01 + 2.5648931641072059e-01 8.9365872757066911e-01 8.0720815937095813e-01 + 4.3447908381451900e-01 1.2368533918700662e+00 1.0365191414681796e+00 + 6.3198201682243327e-01 1.5612294838475651e+00 1.2384732663484703e+00 + 8.4227840241510488e-01 1.8538502488421986e+00 1.4023590823637591e+00 + 1.0539466449217945e+00 2.0992840918549351e+00 1.5154742360691003e+00 + 1.2502438839574599e+00 2.2802650139789047e+00 1.5666238432039554e+00 + 1.4074828642376302e+00 2.3804660147097318e+00 1.5573672301803276e+00 + 1.4906121159329904e+00 2.3908979693279422e+00 1.5127944581957751e+00 + 1.4770414701778045e+00 2.3404865724108483e+00 1.4854117060379313e+00 + 1.4211220075286075e+00 2.2915723060418793e+00 1.4926084445299486e+00 + 1.3871162902020251e+00 2.2425851742909488e+00 1.4861151662954992e+00 + 1.3759916313028855e+00 2.1570524308539700e+00 1.4416408860118402e+00 + 1.3737108732618777e+00 2.0185784234943194e+00 1.3668275853278382e+00 + 1.3735623286762535e+00 1.8302244776327630e+00 1.2829241520077963e+00 + 1.3727952341169556e+00 1.6154182672420148e+00 1.2264162116530790e+00 + 1.3700756515719390e+00 1.4021043436852394e+00 1.2294353615397133e+00 + 1.3686783506496432e+00 1.1579533129039907e+00 1.2958104218950957e+00 + 1.3744856064319033e+00 7.6894214890917212e-01 1.4234027772302604e+00 + id 12881 + loc 1.3044317066669464e-01 1.9873318076133728e-01 415 + blend 0.0000000000000000e+00 + interp 5.2844261911086365e-01:3.0439433100858249e-01:2.7464223942271437e-02:4.7369024562260215e-01:8.7729036308538300e-01:5.2843733468467258e-01:1.0023559068623222e+00:4.3557653331664109e-01:1.6233365332593783e+00:3.7396951637972309e-01:1.9470993146438276e+00:2.9634309496208000e-01:2.0195236116937680e+00:3.1093480836060283e-01:2.6964235395923124e+00:2.6071692727482293e-01:3.2877977223238668e+00 + CVs 20 + -2.2313549510925727e-02 1.2957072192715316e-01 -5.8618747676139837e-02 + -5.4784095954872269e-02 2.3263231571695286e-01 -7.2746500105187184e-02 + -9.1430553273804810e-02 3.4979293197092975e-01 -7.3522648338325058e-02 + -1.1392658931028005e-01 4.8286738400797191e-01 -8.4559763769166227e-02 + -1.1555397146641749e-01 6.3053744388290611e-01 -1.0666323023516666e-01 + -8.9919163964527871e-02 7.8949325887858279e-01 -1.3906319694665456e-01 + -3.1377159619001282e-02 9.5366981329609091e-01 -1.7896661689547852e-01 + 6.3068764155441270e-02 1.1139270467439886e+00 -2.2026188420195159e-01 + 1.9139676338589517e-01 1.2612483241675263e+00 -2.5468611762520155e-01 + 3.4902696214211443e-01 1.3912824253921956e+00 -2.7583198743477644e-01 + 5.3543425202774553e-01 1.5042726234701291e+00 -2.8301141831569454e-01 + 7.5605059317020162e-01 1.5999030524433695e+00 -2.8145379581354873e-01 + 1.0111603963854467e+00 1.6737481116418897e+00 -2.7611109415131435e-01 + 1.2925981335587982e+00 1.7234707540779373e+00 -2.6903742644851247e-01 + 1.5927317607657645e+00 1.7518361119553236e+00 -2.6296930400967655e-01 + 1.9077834755012750e+00 1.7621046157498190e+00 -2.6236110403129875e-01 + 2.2337577540382205e+00 1.7539372851604198e+00 -2.6858791022161632e-01 + 2.5626661026860309e+00 1.7252733312234889e+00 -2.7265879388322489e-01 + 2.8585671361146643e+00 1.7219187573125134e+00 -2.5430109781127408e-01 + id 12882 + loc 8.0504286289215088e-01 5.4119867086410522e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5242873226574065e-01:3.4784919616283216e-01:4.6050196386692166e-01:4.0236140742527132e-01:9.9888599002739198e-01:3.3102112551915513e-01:1.5305674310966348e+00:4.5242420797841804e-01:2.0797069980817882e+00:3.4957333822771619e-01:2.9227851431820442e+00:3.5482362356947816e-01:3.3497917921458833e+00:2.9538794764776816e-01:3.9879100625815429e+00 + CVs 20 + 1.0601831109362525e-01 4.0161336261739777e-01 2.2187389681268621e-01 + 2.0919168195931276e-01 6.9861751310235976e-01 2.9327762457916828e-01 + 3.0690551880178030e-01 9.6340060239356196e-01 3.1895153858214387e-01 + 3.9392099958649235e-01 1.2031761124645406e+00 3.2937659195121749e-01 + 4.6560461356533411e-01 1.3985450017024244e+00 3.2061235387694964e-01 + 5.0939332567665885e-01 1.5267853612388107e+00 2.9955493337292394e-01 + 4.9550282808386142e-01 1.5709903409058548e+00 2.9775979527489382e-01 + 3.8924079781919552e-01 1.5708040582458513e+00 3.8961349951797475e-01 + 2.5761311173534940e-01 1.6637378839579400e+00 5.8547045262118358e-01 + 2.1820439548852516e-01 1.8540480333058744e+00 7.2852061849592420e-01 + 2.5409909711737205e-01 2.0395936829187455e+00 7.5384619376970152e-01 + 3.1765310186350071e-01 2.1615665946462039e+00 6.7987692327206029e-01 + 3.7412814433127350e-01 2.1746922009559748e+00 5.5426238114617077e-01 + 4.1868027717344203e-01 2.0613213882373858e+00 4.5281072812186229e-01 + 4.5727147562962567e-01 1.8005609447370374e+00 4.6439130263094064e-01 + 4.2906460151383496e-01 1.2485893146536831e+00 5.8088067938306875e-01 + 1.6242552192008369e-01 3.3367746216960903e-01 1.8222433767162974e-01 + -3.4142320435198922e-03 1.9638644247062503e-01 -9.5454358677703066e-01 + 5.2316362169647711e-02 2.7626275027122293e-01 -8.7868623601087281e-01 + id 12883 + loc 7.5117045640945435e-01 7.6942288875579834e-01 264 + blend 0.0000000000000000e+00 + interp 3.9578186080090794e-01:2.8195626389700956e-01:5.9901915804429140e-01:3.9335161764526222e-01:1.0015405711201264e+00:3.3979159582600799e-01:1.9364502541082844e+00:3.9577790298229992e-01:2.7693500097310806e+00:3.4002698630992001e-01:3.4451549279393907e+00 + CVs 20 + -8.6444314825153612e-01 4.6310783724365262e-01 -3.0093366177741826e-01 + -1.5701756098973836e+00 6.8073533312317414e-01 -4.3437230865970111e-01 + -2.2296013680788098e+00 6.9549311591270979e-01 -4.4799505552823149e-01 + -2.8825495847564424e+00 5.9989530821036663e-01 -4.0746005360552034e-01 + -3.5193797364070130e+00 4.7876128096004489e-01 -3.7738168662672422e-01 + -4.1202042767678364e+00 3.7594814233505924e-01 -4.0894559364552252e-01 + -4.6745457337695324e+00 3.0667019686967745e-01 -5.2406718186531176e-01 + -5.1836974348827152e+00 2.8771200757758741e-01 -7.2251121144959396e-01 + -5.6495857694922549e+00 3.3793252940619345e-01 -9.9617518130369875e-01 + -6.0883849767466369e+00 4.5699567153566800e-01 -1.3440254158812266e+00 + -6.5255944048654975e+00 6.0459306392708334e-01 -1.7701759644343187e+00 + -6.9697721724631396e+00 7.3175059217407967e-01 -2.2882370641566050e+00 + -7.4012041275430329e+00 7.6168411747441711e-01 -2.9221270161806485e+00 + -7.7577485652949534e+00 6.0845992647119562e-01 -3.6597709001041254e+00 + -7.9687563739710567e+00 2.0890944226778396e-01 -4.4345870074741667e+00 + -8.0700144558588125e+00 -5.1558650568991959e-01 -5.1221066645743178e+00 + -8.2404463443433791e+00 -1.5181082232555951e+00 -5.4836248365243883e+00 + -8.6055686096420381e+00 -2.3967337287062911e+00 -5.4697539857495681e+00 + -9.0161599541585140e+00 -2.8853754327073640e+00 -5.4212614199563109e+00 + id 12884 + loc 8.7704509496688843e-02 9.7536170482635498e-01 411 + blend 0.0000000000000000e+00 + interp 4.8731049755240535e-01:3.6907332399622306e-01:9.5301770636776295e-01:3.1180829343998168e-01:2.1500359337514507e+00:4.8311265204256171e-01:2.9161200981420103e+00:4.8730562444742986e-01:3.2596394319078539e+00:3.2736116338121690e-01:3.9411705446236045e+00 + CVs 20 + 1.0538517082337531e+00 1.2059900752703569e-01 -4.8134147243515168e-02 + 1.7504514508467359e+00 1.1223142654079399e-01 -1.1733189850597595e-01 + 2.3714542028737049e+00 7.1679781020821620e-02 -1.5480177143364976e-01 + 3.0066799404143634e+00 3.8635725372551222e-02 -1.3557066770151077e-01 + 3.6415152202282890e+00 1.9782090673323149e-02 -4.9803251403149798e-02 + 4.2652071265842073e+00 1.8703285635775835e-02 1.0391094954312910e-01 + 4.8740919153929969e+00 3.2513965860009097e-02 3.2025699103382932e-01 + 5.4713653840156669e+00 4.8291600301130000e-02 5.9113052946136058e-01 + 6.0656279438773026e+00 4.0782488803760897e-02 9.0833827289662716e-01 + 6.6655904990997010e+00 -2.7439385896532942e-02 1.2600559508885711e+00 + 7.2658884907785186e+00 -1.9491242203470893e-01 1.6227996907225861e+00 + 7.8379493587771050e+00 -4.7624784010215637e-01 1.9672455003001723e+00 + 8.3517942944265116e+00 -8.5622905064763866e-01 2.2722739516598822e+00 + 8.7981020021393821e+00 -1.3091960139262997e+00 2.5264483190006666e+00 + 9.1892774269024553e+00 -1.8128669164803823e+00 2.7230789813103984e+00 + 9.5328753715467585e+00 -2.3553719481382762e+00 2.8554455726151264e+00 + 9.8138423205049499e+00 -2.9299117353582220e+00 2.9203233016206598e+00 + 1.0011485663775183e+01 -3.5156410180698332e+00 2.9261505305598363e+00 + 1.0085002983474759e+01 -3.8740571703072217e+00 2.8491829316908968e+00 + id 12885 + loc 5.0812818109989166e-02 6.1193495988845825e-01 393 + blend 0.0000000000000000e+00 + interp 4.5453414251420177e-01:3.4792600928970113e-01:1.2009521274634771e-01:4.5452959717277663e-01:1.0241862405090301e+00:3.4205138172948646e-01:1.6920508123434663e+00:3.0523904934158436e-01:1.8562233984454022e+00:2.5999773632064349e-01:2.3026050614571405e+00:2.8911119277420722e-01:3.0081292090324250e+00:4.3435942205809452e-01:3.4950401916793812e+00 + CVs 20 + -3.1283252005341688e-01 4.4684946363453748e-01 -1.7661686268711504e-01 + -5.7102539652647033e-01 8.8685379438378442e-01 -3.7196776592344460e-01 + -7.9950937552584034e-01 1.3217587723643587e+00 -5.7423377604535741e-01 + -1.0222896652934432e+00 1.7470736739090125e+00 -7.7959933026168893e-01 + -1.2608247605448772e+00 2.1576247179596315e+00 -9.8521972730874852e-01 + -1.5304360709342069e+00 2.5515670505082824e+00 -1.1837411185254521e+00 + -1.8441468425235372e+00 2.9278726896778728e+00 -1.3666698030740669e+00 + -2.2155455031007714e+00 3.2687820451507501e+00 -1.5229015829264922e+00 + -2.6298738557113532e+00 3.5360826862411474e+00 -1.6361055369227693e+00 + -3.0499788589605075e+00 3.6999017372738905e+00 -1.6897408805187597e+00 + -3.4749428995070732e+00 3.7697954897680166e+00 -1.6905014743376938e+00 + -3.9264310655559638e+00 3.7714279544427951e+00 -1.6702209625572848e+00 + -4.4013864451152811e+00 3.7061314224186277e+00 -1.6397846671965663e+00 + -4.8765612990215503e+00 3.5505705992978966e+00 -1.5783214426760950e+00 + -5.3198461481710524e+00 3.2869663828022730e+00 -1.5050817263922966e+00 + -5.6594410591954274e+00 2.9273758266516721e+00 -1.4898618573621365e+00 + -5.8697052862397747e+00 2.5090530743279329e+00 -1.5257066725590915e+00 + -6.0599552812607476e+00 2.0347989699465145e+00 -1.4903829635757782e+00 + -6.3715435901429274e+00 1.4485391039943778e+00 -1.2709823240194629e+00 + id 12886 + loc 1.3318803906440735e-01 6.3348311185836792e-01 382 + blend 0.0000000000000000e+00 + interp 5.1674649107386772e-01:5.1674132360895697e-01:3.3179957551647388e-01:3.4508032656428750e-01:1.0105221480852395e+00:3.2677239672425584e-01:1.8921507747172983e+00:3.6392119793512701e-01:2.4972903929463675e+00:3.1037204006948726e-01:3.0220822022223950e+00:3.6306495875045602e-01:3.9900879200599628e+00 + CVs 20 + 9.1230113735978779e-01 1.3997971023112665e-01 -5.0483662692685549e-01 + 1.5106384954977250e+00 1.4436086922295818e-01 -8.9173547621792482e-01 + 2.0292884336966219e+00 1.0948425621339436e-01 -1.2555780948514947e+00 + 2.5481342390339488e+00 6.9689242939300566e-02 -1.6195799234278931e+00 + 3.0624794037203977e+00 2.2146002683156363e-02 -1.9707491460971001e+00 + 3.5694562513752790e+00 -3.6091493315955070e-02 -2.3008864995863343e+00 + 4.0671265304542139e+00 -1.0928052361986595e-01 -2.6080492867418239e+00 + 4.5545128749027910e+00 -2.0557994875136720e-01 -2.8946536510542593e+00 + 5.0391053992632084e+00 -3.4317501780950566e-01 -3.1714302025737418e+00 + 5.5264437014290433e+00 -5.5199172164854837e-01 -3.4542425615474479e+00 + 5.9988496092762782e+00 -8.6235344070047049e-01 -3.7560427433537629e+00 + 6.4184370962089980e+00 -1.2890367565443512e+00 -4.0796327702749382e+00 + 6.7508999006898938e+00 -1.8263250071138484e+00 -4.4139257158859309e+00 + 6.9759614198624442e+00 -2.4552108616476720e+00 -4.7417891317567680e+00 + 7.0804361198269632e+00 -3.1491262297571505e+00 -5.0387594033390641e+00 + 7.0600554140383887e+00 -3.8686976724746129e+00 -5.2720406788509386e+00 + 6.9299869275893027e+00 -4.5647581623304383e+00 -5.4097909931750277e+00 + 6.7301296879229247e+00 -5.1964523601818549e+00 -5.4439501369447933e+00 + 6.5390662234613437e+00 -5.7806174130734647e+00 -5.4609845994274497e+00 + id 12887 + loc 1.1182703077793121e-01 7.5021308660507202e-01 409 + blend 0.0000000000000000e+00 + interp 3.9783695743944053e-01:3.9783297906986614e-01:4.3497791187386947e-02:3.6155928734086656e-01:8.0729374803365050e-01:3.5874857217996348e-01:1.1846604621234662e+00:2.6468223685461495e-01:1.8991557301462898e+00:3.7820355547708900e-01:2.1231347762489845e+00:3.7077492080303581e-01:3.0860456285495874e+00:2.7807610032881647e-01:3.7863241847747657e+00 + CVs 20 + 5.3299467113349763e-01 2.4420185562643454e-01 -2.3533728788040120e-01 + 9.6897567273538954e-01 4.1878335977703163e-01 -4.6951241142153616e-01 + 1.4021561619909209e+00 5.7375877718782964e-01 -7.1425394879327619e-01 + 1.8556435854587350e+00 7.1373611951803240e-01 -9.7605048185369181e-01 + 2.3035724400705906e+00 8.1495398440182121e-01 -1.2574524905688573e+00 + 2.7270185350162701e+00 8.6151862574566362e-01 -1.5607802709198488e+00 + 3.1232724294977623e+00 8.4911632007170135e-01 -1.8871841197740671e+00 + 3.5023729898017866e+00 7.7493534520697960e-01 -2.2358270623281946e+00 + 3.8734398558270353e+00 6.3260969518103338e-01 -2.5987569348569663e+00 + 4.2353773627414784e+00 4.1416517577867085e-01 -2.9607844271206321e+00 + 4.5820514279938873e+00 1.1085530100991559e-01 -3.3024902698496259e+00 + 4.9014113742078695e+00 -2.7913909378181723e-01 -3.6082719970870798e+00 + 5.1806690150669068e+00 -7.3149435082798098e-01 -3.8879105276790167e+00 + 5.4074814404055491e+00 -1.2053565259133703e+00 -4.1817615024919688e+00 + 5.5716503512242390e+00 -1.6647059227111738e+00 -4.5328672967494681e+00 + 5.6744097313532258e+00 -2.0982358260514204e+00 -4.9765390857082439e+00 + 5.7382877424867296e+00 -2.5328394005663437e+00 -5.5288817295740706e+00 + 5.8028583860109935e+00 -3.0116427721037962e+00 -6.1624572016374142e+00 + 5.8772855930969055e+00 -3.5469845596575054e+00 -6.8258204714913200e+00 + id 12888 + loc 8.1789022684097290e-01 1.8843196332454681e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1901286846570535e-01:2.4498055600010721e-01:9.3242661420389195e-01:3.9310065891964918e-01:1.2273078215672262e+00:3.1254363561939824e-01:2.0552276372873566e+00:4.1900867833702071e-01:2.7123736451641478e+00:2.9110963341948870e-01:3.0589937857448017e+00:3.5361778216971584e-01:3.9902727013112922e+00 + CVs 20 + -9.4537490923619127e-02 1.1279093870834841e-01 2.4208338801922535e-01 + -1.9694237933846029e-01 1.8766925320858274e-01 4.3298982509754363e-01 + -2.9817708381233887e-01 2.4056447213750293e-01 5.9323967480968498e-01 + -3.9611672571521339e-01 2.7931775374670642e-01 7.3990681873625530e-01 + -5.5594243658730025e-01 3.1193663223474261e-01 8.8422237699258555e-01 + -8.6640750157140678e-01 3.7051053321771821e-01 1.0178772873775830e+00 + -1.3038120750123707e+00 5.4181471691734540e-01 1.1232060699276478e+00 + -1.7130047984150580e+00 8.6755287903788048e-01 1.1800175965801023e+00 + -2.0069396132327904e+00 1.3186317913060202e+00 1.1779991755968371e+00 + -2.1739135972255990e+00 1.9086326538283611e+00 1.1376479191796669e+00 + -2.1638464692132766e+00 2.6425478561341240e+00 1.1611375871617580e+00 + -1.9359973163320796e+00 3.3482033787991994e+00 1.3852781151517783e+00 + -1.5513614668713316e+00 3.8422375816348318e+00 1.8009636761039294e+00 + -1.0818158985423580e+00 4.0792618846168462e+00 2.3056917078897179e+00 + -5.9106212808038960e-01 4.0708912127154493e+00 2.7979273893119023e+00 + -1.1337089047541227e-01 3.8543864943480250e+00 3.2746549566726832e+00 + 3.2021642376587378e-01 3.4133339109747416e+00 3.7889918926834634e+00 + 6.1061484342085315e-01 2.7259366799846365e+00 4.2569927690068283e+00 + 5.9266831031931710e-01 2.3268172864886214e+00 4.2581222559264269e+00 + id 12889 + loc 3.4033281262964010e-03 1.8373055756092072e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7622227282544638e-01:3.5571477951715846e-01:6.8912495610270286e-01:4.7621751060271816e-01:1.4145159283717379e+00:2.3003199813852807e-01:1.9715087822099000e+00:2.9633753030083693e-01:2.9987395172369027e+00:3.6216805516413136e-01:3.8211244194934064e+00 + CVs 20 + 1.4348397729863999e-01 3.4264284728137800e-01 -1.0742574910436772e-02 + 2.1627121426963131e-01 6.2148231238015783e-01 -2.0095768290408336e-02 + 2.7432165164171585e-01 8.9422952733252026e-01 -4.6994053674603173e-02 + 3.5381399521256618e-01 1.1766938839862087e+00 -9.5650887126850687e-02 + 4.4935803295573812e-01 1.4663825302076647e+00 -1.7118101439746181e-01 + 5.5281107026607956e-01 1.7607202559447588e+00 -2.7846450525789956e-01 + 6.4724868269139446e-01 2.0574107444590881e+00 -4.2610455689526827e-01 + 7.0755779094040139e-01 2.3482593669519920e+00 -6.2650211947775658e-01 + 7.0836649709033661e-01 2.6119950372368641e+00 -8.8779874863855512e-01 + 6.3329368013615150e-01 2.8137797842726604e+00 -1.2027766669410842e+00 + 4.8580382353067497e-01 2.9198154979472717e+00 -1.5460619290226014e+00 + 2.8690786461252515e-01 2.9158131983870290e+00 -1.8890218852293956e+00 + 5.9314001638080649e-02 2.8059636150960174e+00 -2.2119806228817347e+00 + -1.7910793330626940e-01 2.6024762705747642e+00 -2.5048347721609998e+00 + -4.1455780961164934e-01 2.3177008707000226e+00 -2.7645397787670869e+00 + -6.2798593943066749e-01 1.9542287488128383e+00 -2.9937858323371391e+00 + -7.5839235188708598e-01 1.5085323392680219e+00 -3.1892546874570771e+00 + -7.1944932285663055e-01 1.0381272381166031e+00 -3.3274586629386707e+00 + -6.2616082007353913e-01 6.7923759368048020e-01 -3.4085739007587041e+00 + id 12890 + loc 7.4074518680572510e-01 7.1593821048736572e-01 395 + blend 0.0000000000000000e+00 + interp 4.3631082268326626e-01:2.6743415635037249e-01:2.7931901718915531e-01:2.8452628456122003e-01:1.0767407139087750e+00:4.3630645957503944e-01:1.9962500869192703e+00:3.3783765875634281e-01:2.7759086984755532e+00:3.2160932595982478e-01:3.5425649645951260e+00 + CVs 20 + 4.1213865751321827e-01 2.1766006791947495e-01 -4.0074339938071513e-01 + 7.2076777423891270e-01 3.8875040627359758e-01 -7.3038626386104888e-01 + 1.0013086150208850e+00 5.4981048451946457e-01 -1.0526991748015067e+00 + 1.2951588932084643e+00 7.1897943354549676e-01 -1.3992516923946219e+00 + 1.6092164018499868e+00 8.8266741463357579e-01 -1.7699899041902216e+00 + 1.9463098769419709e+00 1.0220653365149899e+00 -2.1629101780435636e+00 + 2.3060194649517358e+00 1.1173609148444537e+00 -2.5764553858285195e+00 + 2.6869694198173177e+00 1.1470979918976392e+00 -3.0082093523003217e+00 + 3.0828759861308228e+00 1.0870974283320443e+00 -3.4489193595507950e+00 + 3.4725138385988670e+00 9.1622242703219148e-01 -3.8805606703979398e+00 + 3.8206532730688432e+00 6.2771103675389806e-01 -4.2817314802149635e+00 + 4.0990362348373282e+00 2.3483480654633260e-01 -4.6327854852928958e+00 + 4.3014114820560758e+00 -2.3602630617698495e-01 -4.9183818225292626e+00 + 4.4337108245348089e+00 -7.5309437157347148e-01 -5.1295837728502383e+00 + 4.5035557810184841e+00 -1.2830061240770174e+00 -5.2664683111083859e+00 + 4.5206388011837628e+00 -1.7974544464975306e+00 -5.3346153579520745e+00 + 4.4982442960042563e+00 -2.2742481302611126e+00 -5.3384289090170753e+00 + 4.4557451812928166e+00 -2.6977826853950071e+00 -5.2896081383147067e+00 + 4.4667508765487227e+00 -3.1109962506870890e+00 -5.2930856581696499e+00 + id 12891 + loc 4.6733576059341431e-01 4.1120257228612900e-02 414 + blend 0.0000000000000000e+00 + interp 5.0363992705444560e-01:5.0363489065517508e-01:3.7336373012391622e-01:4.0383626867024647e-01:9.6494698619054486e-01:3.4094276869483009e-01:1.3203693882184724e+00:4.2832091066522748e-01:2.0002365742962467e+00:2.5739994352925250e-01:3.8634893428466568e+00 + CVs 20 + -1.5723978881007672e-01 1.8369636770562281e-01 -8.9149083847011179e-01 + -3.2178579956808984e-01 1.9176487199034056e-01 -1.4386414043185489e+00 + -4.9030355803478232e-01 1.2152568749644682e-01 -1.9015406225621925e+00 + -6.5676322523305541e-01 1.3100014013873396e-02 -2.3866170327760208e+00 + -8.1259308631548244e-01 -1.3530201316373064e-01 -2.8830982788067372e+00 + -9.4761679223886475e-01 -3.2026922992687623e-01 -3.3797859449459398e+00 + -1.0530785287379072e+00 -5.3377382413288632e-01 -3.8639730500013707e+00 + -1.1277390133705656e+00 -7.6622486448588278e-01 -4.3219480123488854e+00 + -1.1761511123880981e+00 -1.0091707392706095e+00 -4.7435941615812665e+00 + -1.1938798492288298e+00 -1.2533429502564590e+00 -5.1214841330050058e+00 + -1.1786563130844683e+00 -1.4861259631643517e+00 -5.4371613994429655e+00 + -1.1364623166545265e+00 -1.6887260323708035e+00 -5.6670108255460674e+00 + -1.0709710877516783e+00 -1.8574814092865275e+00 -5.8276176639555013e+00 + -9.8213332031243183e-01 -2.0272095335528206e+00 -5.9741170193571254e+00 + -8.7587961183298202e-01 -2.2288801543834080e+00 -6.1388691508476558e+00 + -7.5869824632007543e-01 -2.4648122555438108e+00 -6.3242534281952265e+00 + -6.4236122287859032e-01 -2.7352192086127514e+00 -6.5275902498489238e+00 + -5.4799218761734547e-01 -3.0443624411612005e+00 -6.7433746398040322e+00 + -5.1380627237644738e-01 -3.4007146083425202e+00 -6.9510498556052021e+00 + id 12892 + loc 5.3935039043426514e-01 8.8969522714614868e-01 373 + blend 0.0000000000000000e+00 + interp 5.2439449363967672e-01:3.4382399702228089e-01:6.0604873853575170e-01:5.2438924969474032e-01:9.9983721256218050e-01:3.6064212371471921e-01:1.8662417842198376e+00:3.4901304860879945e-01:2.5005575400021223e+00:2.9634151414630278e-01:3.0228106478022605e+00:3.9677006346286248e-01:3.9812251558679783e+00 + CVs 20 + -3.4784511206019780e-01 4.0939287672242730e-01 -2.3495846902411927e-01 + -6.4902301580943145e-01 8.0446631434089710e-01 -4.6584831894391499e-01 + -8.9858889656808349e-01 1.1927550795090291e+00 -7.1297830293524389e-01 + -1.1031973302897322e+00 1.5750036205532705e+00 -9.8870705800015757e-01 + -1.2689523352962340e+00 1.9429134518686952e+00 -1.2980546754086351e+00 + -1.4050826437924127e+00 2.2905060031257878e+00 -1.6477265221009159e+00 + -1.5230078811413710e+00 2.6093008712479469e+00 -2.0477756766167676e+00 + -1.6342180331688945e+00 2.8802109418979045e+00 -2.5025325762765487e+00 + -1.7526541227139645e+00 3.0835327108394175e+00 -3.0024343257485371e+00 + -1.8914521237570470e+00 3.2078475023220570e+00 -3.5242649590065920e+00 + -2.0622981857781797e+00 3.2553402378957359e+00 -4.0392774871605406e+00 + -2.2804839544837519e+00 3.2266678245354425e+00 -4.5325757262070887e+00 + -2.5550279107063747e+00 3.1030230243883952e+00 -4.9966452577855334e+00 + -2.8767681746648877e+00 2.8599533819492042e+00 -5.4156572186062135e+00 + -3.2300686977993509e+00 2.4920773867720323e+00 -5.7766286662499748e+00 + -3.5993909416222194e+00 2.0133498922134589e+00 -6.0721211438761191e+00 + -3.9418458406551511e+00 1.4519272442551632e+00 -6.2686552459054070e+00 + -4.1541784578986061e+00 8.5101685334706101e-01 -6.2881919327871145e+00 + -4.3004883734873376e+00 1.6909123901173473e-01 -6.1792769178694318e+00 + id 12893 + loc 9.1483664512634277e-01 4.6580451726913452e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4406699839979424e-01:4.4406255772981029e-01:4.6688446542550854e-01:3.1889083805864993e-01:1.0030688689640932e+00:2.4296112995069830e-01:1.9959576727948967e+00:3.2374914268682431e-01:2.5398261865565916e+00:3.4805851312811381e-01:3.0909541942179253e+00:3.5230015464075004e-01:3.9505633391953063e+00 + CVs 20 + -1.4869107478375879e-01 3.5216705734773979e-01 1.6965406455801982e-01 + -2.9514481698575196e-01 7.0494377019235688e-01 3.1537855132749870e-01 + -4.5317328805103102e-01 1.0505996386493763e+00 4.2697438419201061e-01 + -6.3338794034158641e-01 1.3791114948337557e+00 5.0024893464317288e-01 + -8.4169727627100255e-01 1.6819753019905090e+00 5.3785156474639662e-01 + -1.0874920093600695e+00 1.9514971535756032e+00 5.4665539650692829e-01 + -1.3806076477332569e+00 2.1786484380729458e+00 5.3886033683952927e-01 + -1.7210361076497547e+00 2.3495040465010093e+00 5.3296549519464553e-01 + -2.0949760359111318e+00 2.4568342159330365e+00 5.4971721776591675e-01 + -2.4908906234377826e+00 2.5114930264858226e+00 6.0918219498907544e-01 + -2.9112628153807707e+00 2.5162510808412044e+00 7.4158996693204582e-01 + -3.2817277365567170e+00 2.4365401675029772e+00 9.6358889861420571e-01 + -3.4374671884678270e+00 2.3057093014694843e+00 1.1379537174856815e+00 + -3.4972077591604682e+00 2.0736210110117805e+00 1.1730124916296858e+00 + -3.8952279353571022e+00 1.4818020125749123e+00 1.5639859385035768e+00 + -3.7886701759693557e+00 9.2013117037137004e-01 1.9945623198110023e+00 + -3.4179347214125619e+00 5.6298865078804938e-01 2.2579707832284450e+00 + -3.0375294856245585e+00 2.9341811721346789e-01 2.4046944023584071e+00 + -2.7195415335295903e+00 5.8902432250949599e-02 2.5076762686099325e+00 + id 12894 + loc 8.2248395681381226e-01 5.4137308150529861e-02 406 + blend 0.0000000000000000e+00 + interp 3.2024837876098111e-01:2.6583359802734147e-01:1.2950345110168526e-01:3.2024517627719351e-01:9.4620387071811562e-01:2.4491591649794725e-01:1.9789644490485303e+00:2.7755163966012292e-01:2.9206978619841024e+00:2.8857270280602865e-01:3.6342980489218100e+00 + CVs 20 + -4.6031700973322709e-02 2.4096709109896580e-01 -9.6297813861888279e-02 + -6.7136553422519896e-02 4.3273908094949676e-01 -2.2714409987738385e-01 + -1.3177996061823433e-01 6.2998594069464064e-01 -3.5285245427042689e-01 + -2.4743259778680893e-01 8.2210318581783604e-01 -4.6627534557919237e-01 + -4.1295197695925290e-01 9.9662940754333174e-01 -5.6430766276507283e-01 + -6.2114717570187339e-01 1.1414027489906231e+00 -6.4514263486667156e-01 + -8.5843250707211716e-01 1.2466453728855846e+00 -7.1007668386648104e-01 + -1.1051601794046164e+00 1.3078083505448190e+00 -7.6516386573456052e-01 + -1.3455915406150667e+00 1.3262002674269466e+00 -8.1544514220946362e-01 + -1.5791153041566890e+00 1.3041503367240816e+00 -8.5351183989341239e-01 + -1.8113618448902253e+00 1.2423128136841197e+00 -8.6276049310099090e-01 + -2.0337340926088165e+00 1.1439226791747106e+00 -8.3644534686234429e-01 + -2.2222564301299261e+00 1.0205104888786756e+00 -7.8892038215667581e-01 + -2.3621255270446668e+00 8.8753663343145783e-01 -7.3635164653094021e-01 + -2.4578399068535082e+00 7.5426451735368882e-01 -6.7587938850949203e-01 + -2.5185261023196710e+00 6.2480680052989856e-01 -5.9697836036591601e-01 + -2.5453971298204991e+00 5.0309150138812408e-01 -4.9962700482329370e-01 + -2.5337150255363863e+00 3.9500819892557415e-01 -3.9519971832444223e-01 + -2.4951820468183290e+00 3.3278182127727329e-01 -3.0186769297526250e-01 + id 12895 + loc 1.7134279012680054e-01 3.4882247447967529e-01 377 + blend 0.0000000000000000e+00 + interp 4.4424211442762557e-01:4.0535631658810928e-01:1.0020107098882112e+00:2.4581854786336949e-01:1.3173301650191920e+00:3.0333191701561535e-01:2.0204308800358106e+00:4.4423767200648129e-01:2.6392817617867212e+00:3.4336208041779132e-01:3.0430675335404942e+00:3.6328578303691184e-01:3.8846605179394373e+00 + CVs 20 + -5.0218349355309055e-01 4.5175150788008023e-01 8.0374226222150358e-01 + -7.6420900071723930e-01 7.1423644552932930e-01 1.4557135393479519e+00 + -8.9685612879709375e-01 8.6140873652349215e-01 2.0972452990037111e+00 + -9.8193727954450161e-01 9.4531179752276506e-01 2.7871718540794688e+00 + -1.0747185592550834e+00 9.8115666865231410e-01 3.5240651524567101e+00 + -1.2204716240265479e+00 9.5514112424236397e-01 4.2977838951324872e+00 + -1.4430962094484807e+00 8.3407039616078027e-01 5.0820531832612676e+00 + -1.7462142368256190e+00 5.9309060852329565e-01 5.8372869347527541e+00 + -2.1148055310580349e+00 2.2541226547275461e-01 6.5106415491811624e+00 + -2.5008240494405234e+00 -2.4995609772715222e-01 7.0390439499887840e+00 + -2.8363749261141118e+00 -7.8514895940958773e-01 7.3917320210409079e+00 + -3.0779861998820355e+00 -1.3243657591876059e+00 7.5794311279461386e+00 + -3.2252515553577465e+00 -1.8244300076152875e+00 7.6445251084288612e+00 + -3.3123268738523191e+00 -2.2848102229546989e+00 7.6517537529990456e+00 + -3.3711141996940035e+00 -2.7390874875119633e+00 7.6594072279361862e+00 + -3.4126703194829959e+00 -3.1936449931179620e+00 7.7056855720646693e+00 + -3.4389624129008793e+00 -3.6146213703544121e+00 7.8085159210718231e+00 + -3.4521767849065719e+00 -3.9817481021168089e+00 7.9759986459578709e+00 + -3.4527815777908661e+00 -4.3331989203842669e+00 8.2431788343191847e+00 + id 12896 + loc 6.5967768430709839e-01 6.3553655147552490e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6668074439890475e-01:3.2419075135461606e-01:3.5605391029407851e-02:3.6667707759146079e-01:9.8015297000194945e-01:3.1674560269102181e-01:1.9008295396949042e+00:3.3502487520998026e-01:2.7797576101214996e+00:2.5093824950227300e-01:3.2032647892918105e+00 + CVs 20 + 7.8904879779293113e-02 5.8423212807954195e-01 4.8100636702108790e-01 + 1.8364632103408782e-01 1.0427589789427283e+00 7.6849702575148238e-01 + 2.8934485410165600e-01 1.4620987827083600e+00 9.9673674552832581e-01 + 3.9207966050157744e-01 1.8708520902955110e+00 1.2043227731813451e+00 + 4.9893471256044486e-01 2.2601945307273934e+00 1.3767949705028242e+00 + 6.1646459415819899e-01 2.6170404182366895e+00 1.4895836958285245e+00 + 7.4951695529687901e-01 2.9215683776961527e+00 1.5094341319909144e+00 + 8.9535357291483231e-01 3.1359416580852439e+00 1.3993244040209172e+00 + 1.0175282092479196e+00 3.1725271291390307e+00 1.1319539158067022e+00 + 1.0197674064437092e+00 2.9674550118550393e+00 8.1842715140701872e-01 + 9.3355425064526210e-01 2.6982183826568393e+00 6.1283470758377212e-01 + 8.6309347452803253e-01 2.4586262530484682e+00 4.4560159474457939e-01 + 8.2622220580858152e-01 2.2081147893597701e+00 2.5997398599227406e-01 + 8.2182917390200971e-01 1.9079835701336547e+00 5.4692497615951741e-02 + 8.4797962909089986e-01 1.5125254696882182e+00 -1.3287558189123894e-01 + 8.9476973432379570e-01 9.5860482318394491e-01 -1.9750903791894386e-01 + 9.5384299894904034e-01 2.9175206626065592e-01 -2.2973515902745059e-02 + 1.0377725270592351e+00 -3.2812178454889623e-01 2.6680517353285071e-01 + 1.1561571179434256e+00 -8.5003074355323771e-01 3.0750769777309239e-01 + id 12897 + loc 3.7639859318733215e-01 7.7951598167419434e-01 399 + blend 0.0000000000000000e+00 + interp 4.2719157901351723e-01:3.9208355559450597e-01:3.0985412205126905e-01:3.5238357602225895e-01:1.1453904966768031e+00:3.4860392191757933e-01:2.0064008714382138e+00:3.9422394822550511e-01:2.5683301234334337e+00:4.2718730709772712e-01:3.1757833392191022e+00:4.0928576263658278e-01:3.9131816377823005e+00 + CVs 20 + -2.3793431497906944e-01 2.9220481900254169e-01 -1.3185413795449250e-01 + -4.5147815798282193e-01 6.0316590151089200e-01 -3.0816606296815280e-01 + -6.5951793388366053e-01 9.2090098066599646e-01 -5.1395346577433598e-01 + -8.8028154697474326e-01 1.2349360397531945e+00 -7.4511899284560634e-01 + -1.1296467658502694e+00 1.5295561915620912e+00 -1.0050715719266674e+00 + -1.4249813818645809e+00 1.7799463535224316e+00 -1.2952963170029734e+00 + -1.7758477812956748e+00 1.9559253632856328e+00 -1.6118225256148337e+00 + -2.1766520534375209e+00 2.0380122381722292e+00 -1.9397834861310397e+00 + -2.6149571665084683e+00 2.0203487360003010e+00 -2.2666884338538025e+00 + -3.0695244765763401e+00 1.8805743735015028e+00 -2.5928023079983875e+00 + -3.4941713285615972e+00 1.6101636722603987e+00 -2.9051737730146208e+00 + -3.8660870313119244e+00 1.2816311869143460e+00 -3.1753626299756403e+00 + -4.2197619522644247e+00 9.6496842961392038e-01 -3.3928474464528815e+00 + -4.5822292734315839e+00 6.3827782593750626e-01 -3.5588457077154008e+00 + -4.9487798557725835e+00 2.7337623887767371e-01 -3.6645858363512200e+00 + -5.3151640347494880e+00 -1.8289607062314389e-02 -3.6973550079510895e+00 + -5.6704681461335324e+00 -1.1844023901024514e-02 -3.6625630271023257e+00 + -5.9409199303429974e+00 2.1764714992346318e-01 -3.5912312723347850e+00 + -6.3926652809500979e+00 1.1157602232785177e-01 -3.5621292529107569e+00 + id 12898 + loc 7.1391969919204712e-02 7.8350949287414551e-01 411 + blend 0.0000000000000000e+00 + interp 3.9583354163474038e-01:3.1663180749337300e-01:1.0278573149700831e+00:2.8687506849573718e-01:2.1337470874702396e+00:3.0036490486970169e-01:3.1642732775356670e+00:3.9582958329932405e-01:3.9997351829389820e+00 + CVs 20 + 1.0671965509384855e+00 1.9147657934368098e-01 -2.4669827164282448e-01 + 1.8043475033166572e+00 2.0498086879327121e-01 -4.6828695113369151e-01 + 2.4796718688077948e+00 1.6894140609425701e-01 -6.7616923700657183e-01 + 3.1584701846739542e+00 1.1725975072679340e-01 -8.7947905940940352e-01 + 3.7978691409304233e+00 3.9761308680653751e-02 -1.0910507779944765e+00 + 4.3687440578557677e+00 -6.8875489452611349e-02 -1.3196396154376686e+00 + 4.8719210132508834e+00 -2.1195005710965176e-01 -1.5687942116486049e+00 + 5.3329379548248124e+00 -4.0261968399577275e-01 -1.8434085403881093e+00 + 5.7715384662723306e+00 -6.6524753991228680e-01 -2.1437025051457632e+00 + 6.1801944558261663e+00 -1.0195976876493265e+00 -2.4567559052752399e+00 + 6.5391388244197781e+00 -1.4645302797317064e+00 -2.7679931563461011e+00 + 6.8231225461839999e+00 -1.9860164214572402e+00 -3.0612499950570604e+00 + 6.9982082483474395e+00 -2.5551101699901309e+00 -3.3143740486557816e+00 + 7.0443883504933504e+00 -3.1347946541398657e+00 -3.5279747671899266e+00 + 6.9593087387534656e+00 -3.7202243118539751e+00 -3.7289965934351921e+00 + 6.7655597501194409e+00 -4.3383802662523703e+00 -3.9777803472436366e+00 + 6.5115765432396895e+00 -5.0048091954880762e+00 -4.3209548461037484e+00 + 6.2608458097752289e+00 -5.7235100504620613e+00 -4.7469295036393566e+00 + 6.0607440040234160e+00 -6.4613797550055603e+00 -5.2105901778971377e+00 + id 12899 + loc 9.6510732173919678e-01 8.2361221313476563e-01 1078 + blend 0.0000000000000000e+00 + interp 5.1334719892473757e-01:3.4659880809951515e-01:7.0430761290299637e-01:5.1334206545274830e-01:1.0385409128227565e+00:3.4177885338510477e-01:1.7603109500446541e+00:2.7759652616118047e-01:2.1734403610427773e+00:1.9396029960594696e-01:3.0058055265863515e+00:3.7857655381771754e-01:3.8287350374310574e+00 + CVs 20 + 1.9732646130886797e-01 2.3331763294553293e-01 -1.9129325674352854e-01 + 3.9955974650266102e-01 4.8848008637995594e-01 -3.7015335929271920e-01 + 5.8966718514352434e-01 7.4219832059587909e-01 -5.6616633154674911e-01 + 7.5872940563559832e-01 9.8373611120728044e-01 -7.9255737526534165e-01 + 9.0067405248078969e-01 1.2083103990662347e+00 -1.0526408937535245e+00 + 1.0075368221018635e+00 1.4103172291363157e+00 -1.3473332228031318e+00 + 1.0698987398574646e+00 1.5829972716934739e+00 -1.6747820322426488e+00 + 1.0775077777178741e+00 1.7181289193640803e+00 -2.0294349154677889e+00 + 1.0214534665525661e+00 1.8071819409009473e+00 -2.3998402123571898e+00 + 8.9844876757805014e-01 1.8454629419333184e+00 -2.7686394883376275e+00 + 7.1415362141953076e-01 1.8327598806070902e+00 -3.1199838661933166e+00 + 4.8335090351352156e-01 1.7697266820690278e+00 -3.4500508203987681e+00 + 2.2390690187302548e-01 1.6544016008182600e+00 -3.7642111275050523e+00 + -4.7998737398570350e-02 1.4857842295018096e+00 -4.0598750123341061e+00 + -3.1891881805372985e-01 1.2694715647343056e+00 -4.3277357378714800e+00 + -5.7400007373512629e-01 1.0192896087257544e+00 -4.5732937625711862e+00 + -7.9144059902689090e-01 7.5832250159484094e-01 -4.8310881696190808e+00 + -9.5387669673532172e-01 5.1072790107961152e-01 -5.1327196344565724e+00 + -1.1150165345407737e+00 2.8147889676161619e-01 -5.3512395828023713e+00 + id 12900 + loc 6.1344081163406372e-01 4.6777161955833435e-01 395 + blend 0.0000000000000000e+00 + interp 4.5691271833437919e-01:4.5690814920719586e-01:2.7233212017714259e-01:4.3356626520482822e-01:8.7666132118254059e-01:2.7721190824177777e-01:1.0452107441806180e+00:3.0048776061389026e-01:1.8849667906630674e+00:2.4368900392208662e-01:2.4500441383842890e+00:2.8375585273520398e-01:3.6568181259233570e+00 + CVs 20 + -3.4268099592676410e-01 1.9462775230356716e-01 3.7880867895188791e-01 + -6.5281508357775553e-01 3.3841772720576146e-01 6.7250717269011329e-01 + -9.6683770484984544e-01 4.6283234613720647e-01 9.3638341622761989e-01 + -1.3027562789221325e+00 5.8355056793335747e-01 1.1966369042905591e+00 + -1.6566476964663566e+00 6.9859144881671642e-01 1.4554104917307114e+00 + -2.0230140769970917e+00 8.0435017751039029e-01 1.7183760795643430e+00 + -2.3954524824260193e+00 8.9604102585024603e-01 1.9942795735706613e+00 + -2.7673631895127424e+00 9.6526280567090739e-01 2.2907468873402692e+00 + -3.1342788045064935e+00 9.9809246418927877e-01 2.6137642758289896e+00 + -3.4912168378434565e+00 9.7544007159560264e-01 2.9705660590811540e+00 + -3.8228589132413711e+00 8.7855363337329151e-01 3.3644999110965745e+00 + -4.1044422628720536e+00 7.0166449664959263e-01 3.7854158193953436e+00 + -4.3194904110105066e+00 4.5529294952242561e-01 4.2147208469055126e+00 + -4.4655254039314745e+00 1.5435221939077870e-01 4.6368795936370280e+00 + -4.5448202155831376e+00 -1.8705203534446824e-01 5.0393309081624924e+00 + -4.5621336513415418e+00 -5.5694265033995194e-01 5.4082653302542134e+00 + -4.5272516509921044e+00 -9.4797449853629656e-01 5.7280292740662393e+00 + -4.4541093045213103e+00 -1.3481218348756534e+00 5.9857272948911486e+00 + -4.3867401963610000e+00 -1.6663293557041627e+00 6.2017786217405941e+00 + id 12901 + loc 3.6706802248954773e-01 2.7032399177551270e-01 393 + blend 0.0000000000000000e+00 + interp 4.2692812314742179e-01:2.8867842695044010e-01:1.3661515955639802e-02:3.5862424572815776e-01:6.9025945055505344e-01:2.5977612030311398e-01:1.1829363536971056e+00:3.2971711390375708e-01:2.0985452346200537e+00:4.0048685126442757e-01:2.9477424186655892e+00:4.2692385386619036e-01:3.2380863678751135e+00 + CVs 20 + -1.0208502908707368e-01 3.0214501090144041e-01 3.3573542570340997e-01 + -2.0840722761489597e-01 6.4148192184651265e-01 6.5805735551265576e-01 + -3.0993431633763679e-01 1.0214449810734676e+00 9.4322182898951668e-01 + -4.2342555669180171e-01 1.4284274279329365e+00 1.1853438608219347e+00 + -5.9145372102573091e-01 1.8440483795555500e+00 1.3977194003971016e+00 + -8.4549722326260568e-01 2.2541643830651137e+00 1.5850895451050939e+00 + -1.1894034237773203e+00 2.6510276466871119e+00 1.7383579229785244e+00 + -1.6205065161377417e+00 3.0248061831089426e+00 1.8616403965298816e+00 + -2.1410483598665278e+00 3.3518252366687404e+00 1.9818618601180558e+00 + -2.7460750135035967e+00 3.5929735445318864e+00 2.1330260202366507e+00 + -3.4122766505930402e+00 3.6991721071551074e+00 2.3379016179470633e+00 + -4.0955664443209123e+00 3.6238282797344907e+00 2.5957985077415495e+00 + -4.7361959428572629e+00 3.3358609539412409e+00 2.8888414519470587e+00 + -5.2595861337981260e+00 2.8257388092032927e+00 3.2027797972285770e+00 + -5.5774316598080675e+00 2.1300338246978816e+00 3.5294710057114114e+00 + -5.6318575247110596e+00 1.3678859967982238e+00 3.8638666642113546e+00 + -5.4513168154360718e+00 6.7399263350565963e-01 4.2065752210644494e+00 + -5.1292723583254887e+00 1.1660991740092452e-01 4.5260318535648336e+00 + -4.8956138134653031e+00 -2.6025509492988119e-01 4.6542429346723786e+00 + id 12902 + loc 4.0248137712478638e-01 7.4378180503845215e-01 403 + blend 0.0000000000000000e+00 + interp 5.0151113606969933e-01:4.4727215490699673e-01:5.6762171401549211e-01:3.3444871990753733e-01:9.9154255810941250e-01:3.7278327191019084e-01:1.3771702450056524e+00:3.1729556559402683e-01:2.0272518806970723e+00:5.0150612095833869e-01:2.5245769707535866e+00:3.6661901278697290e-01:3.0901313813113749e+00:4.1043437933103433e-01:3.9956513737306936e+00 + CVs 20 + 7.9067562567422117e-02 1.7510417423638663e-01 -1.7194662969142344e-01 + 1.2932504684784907e-01 3.4990614849754470e-01 -3.3607706992333053e-01 + 1.6816697450792692e-01 5.2111434258362821e-01 -4.9746327508353466e-01 + 1.9305280178786266e-01 6.9215614037270301e-01 -6.6191142864894670e-01 + 1.9879175903680707e-01 8.5749685200165771e-01 -8.2869817749211105e-01 + 1.8026782992887874e-01 1.0129881124603048e+00 -9.9583132593034807e-01 + 1.3409372982322598e-01 1.1544557777460049e+00 -1.1599597352661506e+00 + 6.0274410886121732e-02 1.2784173487614945e+00 -1.3164543485510862e+00 + -3.9773814190851464e-02 1.3832621653616526e+00 -1.4605816179718765e+00 + -1.6528256710773193e-01 1.4677961637735919e+00 -1.5883005297121284e+00 + -3.1366828214648668e-01 1.5308284106840606e+00 -1.6953314414494931e+00 + -4.7799895135928305e-01 1.5725332741476579e+00 -1.7770870526306002e+00 + -6.4962395954138130e-01 1.5949674398905191e+00 -1.8303179782355119e+00 + -8.2088444537159488e-01 1.6014119981127979e+00 -1.8541328696440520e+00 + -9.8396527762618824e-01 1.5954053408064286e+00 -1.8501001183488699e+00 + -1.1273708885214826e+00 1.5813401923026944e+00 -1.8221414246716310e+00 + -1.2360470828619132e+00 1.5666388987888831e+00 -1.7751909029904935e+00 + -1.3029196280426589e+00 1.5562827464157964e+00 -1.7135016793393349e+00 + -1.2670944107737763e+00 1.5307574311239995e+00 -1.6128812237039309e+00 + id 12903 + loc 8.2099002599716187e-01 1.1791530251502991e-01 373 + blend 0.0000000000000000e+00 + interp 2.6535005555156754e-01:2.2780890030759154e-01:5.4670958066946995e-02:2.3911254377618849e-01:8.4364198164351289e-01:2.6534740205101204e-01:1.5025129618421942e+00:2.4923517706989218e-01:2.4100092712287431e+00:2.0423962876422616e-01:3.0362410755907749e+00 + CVs 20 + 2.4480119010727003e-01 3.9375188899750824e-01 5.4106193938930833e-02 + 5.3353706740229845e-01 7.3365217706133679e-01 9.3348740950035217e-02 + 8.8241062884301391e-01 9.6522895017286958e-01 1.1415720115341851e-01 + 1.2611632220815951e+00 1.1024679272836735e+00 1.1575019788280322e-01 + 1.6336523917024852e+00 1.2159821618080056e+00 7.2855798432842511e-02 + 1.9996301115235096e+00 1.3516135789115178e+00 2.0481342794930191e-03 + 2.3649936447931044e+00 1.5341783006017069e+00 -4.4355427217298571e-02 + 2.7157039532616758e+00 1.7774245854372350e+00 -2.2217318263817676e-02 + 3.0168066293408700e+00 2.0827600414968535e+00 8.8261180249524895e-02 + 3.2385499847859913e+00 2.4326730097415608e+00 2.9182384022204311e-01 + 3.3769788768550901e+00 2.7853985095459652e+00 5.8327479142863514e-01 + 3.4427062677107658e+00 3.0798924080227033e+00 9.4715551821980359e-01 + 3.4412183035221120e+00 3.2518240047148574e+00 1.3515250564398906e+00 + 3.3743757155261740e+00 3.2658403256478064e+00 1.7355888866240514e+00 + 3.2508110014555434e+00 3.1344701172838336e+00 2.0374271454365802e+00 + 3.0993184680924095e+00 2.8459161657202205e+00 2.2699470057424374e+00 + 3.0488332955759745e+00 2.3582907286023338e+00 2.4148718564116169e+00 + 3.1941529654015102e+00 1.8023953287664938e+00 2.4096099469777297e+00 + 3.3904228362730926e+00 1.2786880507852669e+00 2.3333014531327345e+00 + id 12904 + loc 7.5505897402763367e-02 7.7844566106796265e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7673432775059305e-01:4.7672956040731557e-01:1.3882186910080252e-03:3.3350283003892994e-01:7.0311820065812425e-01:3.4891931581167057e-01:1.4627833626423818e+00:3.7163143000237897e-01:2.0808797269787478e+00:3.2578696209889091e-01:2.9693178666984714e+00:3.7339346763194037e-01:3.5574284154490066e+00 + CVs 20 + -1.7213124846872385e-02 3.1563446690086533e-01 -1.4875143602606583e-01 + -6.6454536508564338e-03 6.4110234767811869e-01 -3.0684655625270668e-01 + 1.2160214210360010e-02 9.7507966713281258e-01 -4.6346841643371200e-01 + 3.4464718850315518e-02 1.3217308398926533e+00 -6.2179348892291508e-01 + 6.3880557591181192e-02 1.6792045767147668e+00 -7.9465813989378709e-01 + 1.0046916938501901e-01 2.0425765397845685e+00 -9.9807444748935470e-01 + 1.3976757408413679e-01 2.4059678995500895e+00 -1.2509181581516271e+00 + 1.7365962735887222e-01 2.7527960873963839e+00 -1.5748582342177970e+00 + 1.9634765279438182e-01 3.0406921995024265e+00 -1.9856818235259674e+00 + 2.2188607153438095e-01 3.2318771833270747e+00 -2.4719844523779826e+00 + 2.9073092354497720e-01 3.3344660577132377e+00 -2.9979286237542002e+00 + 4.3834423192226324e-01 3.3662037902693083e+00 -3.5268470649191750e+00 + 6.6561882091984215e-01 3.3105934736319131e+00 -4.0307604858660060e+00 + 9.5680194348854297e-01 3.1486257688805930e+00 -4.4785839061931583e+00 + 1.3059288218649070e+00 2.8917791757317217e+00 -4.8517729993802803e+00 + 1.6950158679028080e+00 2.5378428121886771e+00 -5.1961851015348621e+00 + 2.0433017482922899e+00 2.0729589700451792e+00 -5.6050588762387203e+00 + 2.2756660803150917e+00 1.5567989361136179e+00 -6.1005690635568719e+00 + 2.4658532808978162e+00 1.0723971141622086e+00 -6.6031635991613289e+00 + id 12905 + loc 2.7293118834495544e-01 7.1010416746139526e-01 1069 + blend 0.0000000000000000e+00 + interp 5.1991532543890939e-01:4.2248771934938489e-01:8.7104167988953374e-02:3.1014660422693513e-01:7.2603466393176075e-01:3.9986384763258431e-01:1.2881715992612079e+00:4.6571009656047030e-01:1.9846680486427073e+00:5.1991012628565503e-01:2.2219247662805466e+00:4.7383112237646274e-01:2.7467545031606431e+00:3.7263283918261120e-01:3.2156509886061375e+00 + CVs 20 + 1.2937568067576785e-01 2.5021399481852230e-01 -1.1995431906649720e-01 + 2.5840471449818381e-01 4.8034788384754301e-01 -2.4415861302926944e-01 + 3.8630522050552391e-01 6.8898399593362303e-01 -3.6726085460316915e-01 + 5.1378142589006437e-01 8.7593411801217103e-01 -4.8382683150695360e-01 + 6.4331780213950129e-01 1.0443856107873266e+00 -5.8858238669609120e-01 + 7.7115133434058114e-01 1.2031006959224004e+00 -6.8277713311489940e-01 + 8.9814952650629998e-01 1.3573408368931210e+00 -7.6879330984922190e-01 + 1.0583293805877600e+00 1.5804660683038954e+00 -8.0347963471813155e-01 + 1.1604419899134499e+00 1.8974601249991070e+00 -8.5879879654960478e-01 + 1.1716165170416044e+00 2.2122598021937714e+00 -9.9747832641963141e-01 + 1.1269695926795271e+00 2.4633470293738617e+00 -1.2074840730277612e+00 + 1.0096034206437388e+00 2.6049987851344096e+00 -1.4419071102989383e+00 + 8.1264795528189304e-01 2.6237438938000701e+00 -1.6579825510290269e+00 + 5.4043906228052641e-01 2.5263000150976533e+00 -1.8430540686359667e+00 + 1.7397417742587706e-01 2.3141408954347495e+00 -2.0179784995927896e+00 + -3.5349412577404093e-01 1.9482597785814073e+00 -2.2616422287711928e+00 + -9.8559104011946275e-01 1.3138073191842172e+00 -2.7204143270897330e+00 + -1.2889934554523068e+00 5.6944949945581480e-01 -3.2828715670408166e+00 + -1.1077045794989491e+00 4.3097756814421628e-01 -3.3130618547106310e+00 + id 12906 + loc 5.2243888378143311e-01 3.3271831274032593e-01 406 + blend 0.0000000000000000e+00 + interp 3.6983231684657930e-01:2.7327487051639471e-01:7.4802648635038094e-01:3.6982861852341087e-01:1.0598489300515113e+00:3.2078645726625510e-01:1.8440312829427037e+00:2.7234441297905954e-01:2.8989700813651207e+00:3.1943211467592836e-01:3.8346060387886713e+00 + CVs 20 + -1.5773361348159615e-01 2.3566944088334274e-01 -7.6925269323350115e-02 + -2.6553741027616384e-01 4.1834661023587566e-01 -1.6501398702130757e-01 + -3.8531163725597323e-01 5.8350753669043298e-01 -2.4971362646441678e-01 + -5.4384966680705049e-01 7.4559989001979221e-01 -3.2634439565847362e-01 + -7.4285394404824112e-01 8.9777817626274015e-01 -3.9254713861911161e-01 + -9.8118108209609789e-01 1.0332912376319179e+00 -4.4593974305783035e-01 + -1.2543109427096180e+00 1.1469814396311260e+00 -4.8620251062401892e-01 + -1.5552582964394346e+00 1.2367695978255393e+00 -5.1680976086143660e-01 + -1.8783484489758508e+00 1.3016383622112997e+00 -5.4012032500306284e-01 + -2.2209027615182917e+00 1.3377600156850591e+00 -5.4606169690162787e-01 + -2.5777248368411434e+00 1.3418979273255873e+00 -5.1671074740631506e-01 + -2.9383761610579033e+00 1.3193858325294645e+00 -4.4991851460520771e-01 + -3.2952274906948329e+00 1.2815374286756458e+00 -3.6229345462162976e-01 + -3.6448996468293693e+00 1.2361983720955920e+00 -2.6391746665692162e-01 + -3.9810818999997903e+00 1.1870252973183202e+00 -1.4551809938533278e-01 + -4.2953152435106956e+00 1.1367915495501002e+00 3.6571801057911912e-03 + -4.5852990909357851e+00 1.0854033504498533e+00 1.7437580969622257e-01 + -4.8563409379706570e+00 1.0308556872367978e+00 3.4445380449898189e-01 + -5.1242530551950107e+00 1.0580809548333601e+00 4.3976683811993622e-01 + id 12907 + loc 3.2228198647499084e-01 7.5354260206222534e-01 409 + blend 0.0000000000000000e+00 + interp 4.1993140239198673e-01:3.4960066179782523e-01:9.4303265085055410e-01:3.6061918888660977e-01:1.6440113579129969e+00:3.7601359535128720e-01:2.1007689414120949e+00:4.1992720307796283e-01:2.9297278687110273e+00:3.7014169533826330e-01:3.3873890668292050e+00:2.7442735776899846e-01:3.9901917701285083e+00 + CVs 20 + 2.9146772902375678e-01 2.5219721733662770e-01 1.2590891690563460e-01 + 5.2707855992850816e-01 4.6724164970833904e-01 2.1096025575505228e-01 + 7.4330331043244158e-01 6.5446793799147773e-01 2.7707961245110269e-01 + 9.8736762260606792e-01 8.2541808548797946e-01 3.5005205299581965e-01 + 1.2586976648168409e+00 9.7201699513322937e-01 4.2800062753570678e-01 + 1.5522719169199788e+00 1.0876900422863951e+00 5.0871642108440152e-01 + 1.8670843233605072e+00 1.1730578093741446e+00 5.9313064202587840e-01 + 2.2054181989776374e+00 1.2295695417584165e+00 6.8588001084590555e-01 + 2.5682323687632027e+00 1.2503897058171047e+00 7.9534206351068126e-01 + 2.9520412741776854e+00 1.2254864778547010e+00 9.2933361113414736e-01 + 3.3463281519948191e+00 1.1476272466934807e+00 1.0882986245089019e+00 + 3.7327873744077307e+00 1.0081312570514693e+00 1.2620877376271520e+00 + 4.0909576418461704e+00 8.0008586243379409e-01 1.4330698837580227e+00 + 4.4085168842000515e+00 5.2699073615570780e-01 1.5828767866726139e+00 + 4.6807857922882468e+00 2.0272482542816705e-01 1.6953052451645396e+00 + 4.9016100700360061e+00 -1.4757817209826829e-01 1.7575157746599119e+00 + 5.0660070830639121e+00 -5.0090476654855332e-01 1.7653147283848112e+00 + 5.1786802781354542e+00 -8.7127361611380172e-01 1.7276895474780356e+00 + 5.2149894824965077e+00 -1.3193173767499624e+00 1.6391202995741707e+00 + id 12908 + loc 1.0145467519760132e-01 7.7119016647338867e-01 417 + blend 0.0000000000000000e+00 + interp 5.3637190688716119e-01:3.3934651367558227e-01:4.3782337246377923e-02:3.7113743119952630e-01:1.0365539623921949e+00:3.6659080929075971e-01:1.3092715281200051e+00:2.9887415754084590e-01:1.9838942753193818e+00:5.3636654316809229e-01:2.7461707910444022e+00:3.6439242564395719e-01:3.0188434520652154e+00:3.9897940821740008e-01:3.6908582330718600e+00 + CVs 20 + 1.5686823253147214e-02 2.3438862263154736e-01 -3.0316131833313420e-01 + 8.8937459236650473e-02 4.1494774619384811e-01 -5.4411554958766917e-01 + 1.4508648205474356e-01 5.4540641187342453e-01 -7.8750684483496469e-01 + 1.8174472898048388e-01 6.3695100544823724e-01 -1.0408900534862682e+00 + 2.0408870320643419e-01 6.8494500866401375e-01 -1.2956173747671771e+00 + 2.1616003610731616e-01 6.8920615770889815e-01 -1.5420172400565291e+00 + 2.2205586480003059e-01 6.5373504272368876e-01 -1.7702256274845936e+00 + 2.2571339460798967e-01 5.8639637420515278e-01 -1.9718237835160766e+00 + 2.2856347648752784e-01 4.9357694235272553e-01 -2.1412823749505208e+00 + 2.2616067533820117e-01 3.7648996274516577e-01 -2.2762925926095288e+00 + 2.1260344109827645e-01 2.3736416318078091e-01 -2.3760125209509231e+00 + 1.8902160144763236e-01 8.5336003338222222e-02 -2.4390430704357722e+00 + 1.6154192002277079e-01 -6.8295220065337059e-02 -2.4646647129845545e+00 + 1.3258106874061415e-01 -2.1748208571865468e-01 -2.4551929331198856e+00 + 9.8633158845980562e-02 -3.6140531935852938e-01 -2.4166164715923273e+00 + 5.6386736354864131e-02 -4.9872372753921423e-01 -2.3549968676257356e+00 + 9.0138143724066699e-03 -6.2443390416674971e-01 -2.2704695809263229e+00 + -3.7877809858480660e-02 -7.3152001577539993e-01 -2.1600660309588973e+00 + -1.2265527326947007e-01 -8.4167759307455314e-01 -2.0870943566015798e+00 + id 12909 + loc 8.1744241714477539e-01 3.2832995057106018e-01 382 + blend 0.0000000000000000e+00 + interp 4.7552833985573884e-01:3.6664340839599718e-01:3.1769579279433902e-01:4.1538107626479459e-01:1.0106561837379513e+00:3.7062708722452214e-01:1.5701489708874066e+00:4.6188944191302095e-01:1.9993263505583947e+00:3.5992042477419178e-01:2.5709678894807122e+00:4.7552358457234029e-01:3.0025408826809530e+00:3.7004554564946818e-01:3.8045463704426865e+00 + CVs 20 + -9.0194192447267185e-01 2.3665045176824606e-01 5.5351014085485517e-01 + -1.5089431725721185e+00 3.6465455712439926e-01 9.7598575238312846e-01 + -2.0431140940906980e+00 4.6615801181644018e-01 1.3684872348183710e+00 + -2.6046390392056464e+00 5.6991456764858095e-01 1.7771405533828131e+00 + -3.2027327622367978e+00 6.5971501982039815e-01 2.1990126927108209e+00 + -3.8408506082263436e+00 7.0917053833776023e-01 2.6253570695178170e+00 + -4.5136741240585945e+00 6.8259676599760810e-01 3.0395085169672496e+00 + -5.2043837539053888e+00 5.4788423434099487e-01 3.4122414953641078e+00 + -5.8850149813581041e+00 2.9363457010136340e-01 3.7100346534380111e+00 + -6.5280724992423371e+00 -6.8570951176738948e-02 3.9145224823640157e+00 + -7.1154563702126108e+00 -5.1922380608469987e-01 4.0305738952673424e+00 + -7.6320658237796968e+00 -1.0437871371539948e+00 4.0786943330241758e+00 + -8.0540700979566076e+00 -1.6296494220992355e+00 4.0829657113552713e+00 + -8.3529127944698445e+00 -2.2477195522434164e+00 4.0631780512552069e+00 + -8.5177311916339864e+00 -2.8574794363674840e+00 4.0421988018466388e+00 + -8.5673060635226026e+00 -3.4512059577055472e+00 4.0422314396879964e+00 + -8.5373345910419438e+00 -4.0618555695260126e+00 4.0783364998368938e+00 + -8.4574890377644394e+00 -4.6917509846785164e+00 4.1825410949810067e+00 + -8.3094020931224897e+00 -5.2113039973153654e+00 4.3538929699722839e+00 + id 12910 + loc 7.6618027687072754e-01 3.5167318582534790e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5758094567206472e-01:3.5757736986260802e-01:2.6534356242540336e-01:3.4282144427763023e-01:9.2197725198579006e-01:3.3096061352887246e-01:1.8544664145794991e+00:3.3977681270852222e-01:2.2945083373881117e+00:2.7503449111154782e-01:3.1568298788330451e+00:3.5414235880304157e-01:3.9431550242275666e+00 + CVs 20 + 4.3040979842246738e-03 4.0199631197846036e-01 -3.4005650771145740e-01 + -1.8681164762404945e-02 7.3442790399364299e-01 -5.2495083198617198e-01 + -5.0437204191001825e-02 1.0392175067162330e+00 -6.4312238660369636e-01 + -8.8657983662163098e-02 1.3502982236880845e+00 -7.3307478845612306e-01 + -1.3405585027044883e-01 1.6564292300790635e+00 -7.8501222928984082e-01 + -1.8637697267045147e-01 1.9430546583149788e+00 -7.8876740873518081e-01 + -2.4483752560119548e-01 2.1916882533849353e+00 -7.3208689329876198e-01 + -3.0479271264256458e-01 2.3719733386774049e+00 -6.0066973952639147e-01 + -3.4056551935748980e-01 2.4332549513240025e+00 -4.0813998686143727e-01 + -3.2150102011122550e-01 2.3817726962027517e+00 -2.3119458644681279e-01 + -2.5816263943970996e-01 2.2759790863126379e+00 -9.1142571431593877e-02 + -1.5832791510043454e-01 2.1278728339109643e+00 2.9159286277224750e-02 + -2.2535499173383003e-02 1.9347634170840893e+00 1.3850361962536251e-01 + 1.4086998324575645e-01 1.7169348242910212e+00 2.4074216305488816e-01 + 3.0706712910175904e-01 1.5445934688672422e+00 3.3545259727281118e-01 + 4.3116859457915357e-01 1.5227027017562880e+00 3.7927096203860322e-01 + 4.5289273384946643e-01 1.6361873968134966e+00 2.0029589370662926e-01 + 4.3259019358933093e-01 1.3687816323114883e+00 -2.8284753269820107e-01 + 4.8602597742309261e-01 1.4731422294169358e+00 -3.1457488738554884e-01 + id 12911 + loc 7.8799235820770264e-01 8.8904631137847900e-01 1081 + blend 0.0000000000000000e+00 + interp 5.6579855494200437e-01:3.3378878314517035e-01:2.1266289633394253e-01:3.3544970237513305e-01:9.7109584191646603e-01:5.6579289695645496e-01:1.6386541638610588e+00:5.3353523080477872e-01:1.9883943834591409e+00:3.6073266249903857e-01:2.2185636633344599e+00:3.8995770604588631e-01:2.9158582744017920e+00:3.1738481336436752e-01:3.3433183090846161e+00 + CVs 20 + 2.5859760137492790e-02 4.1296471520449063e-01 4.0441438861155876e-01 + 7.4889562106377261e-02 7.4003324526248571e-01 6.4944667546854240e-01 + 1.3817477539987830e-01 1.0419601553160844e+00 8.2406125534830243e-01 + 2.0952570953502703e-01 1.3541927589167353e+00 9.8033350225529792e-01 + 2.9054592401444662e-01 1.6743319024760799e+00 1.1188410101687516e+00 + 3.8309680543186381e-01 1.9974922732810314e+00 1.2378139575675984e+00 + 4.9156682429039633e-01 2.3186389549773381e+00 1.3266304730490579e+00 + 6.2550325033979259e-01 2.6340971971449036e+00 1.3671507170225086e+00 + 7.9966678364125665e-01 2.9357387042793297e+00 1.3338945613338402e+00 + 1.0169820221011094e+00 3.1877783749801836e+00 1.1909398830829727e+00 + 1.2368761840501117e+00 3.3295205272223054e+00 9.3136831726187097e-01 + 1.4081590577914374e+00 3.3380066160915405e+00 5.9799013122656786e-01 + 1.5149325437415455e+00 3.2290754322340449e+00 2.2983779248717928e-01 + 1.5649650686342367e+00 3.0151521474463321e+00 -1.5780267238169654e-01 + 1.5747058744795654e+00 2.6806183479784131e+00 -5.6173001283839696e-01 + 1.5617958919148860e+00 2.1499754072126223e+00 -9.5979048180555115e-01 + 1.5281994343425727e+00 1.3391019505246096e+00 -1.2146171934895549e+00 + 1.4599108396369338e+00 4.3024002778570836e-01 -1.1688787311372359e+00 + 1.3833089826166911e+00 -1.1824783250153692e-01 -1.1611733536047453e+00 + id 12912 + loc 8.0798882246017456e-01 5.2935361862182617e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9519191553026626e-01:3.8254725092647707e-01:4.0214740859281062e-01:4.8947805985092113e-01:1.0000043839614139e+00:3.2968159334702263e-01:1.4830159499227020e+00:4.9518696361111098e-01:2.0026090191787671e+00:3.4248250012787385e-01:2.5959749261574574e+00:3.4503549090696378e-01:3.4830175786175825e+00:3.7747157065871589e-01:3.9994647822408798e+00 + CVs 20 + 2.4513094818194014e-01 2.8484727021204859e-01 -1.8714526404785098e-01 + 4.9498771101045030e-01 5.6445443069815904e-01 -3.7088037734378981e-01 + 7.4158769228960497e-01 8.1066833754341405e-01 -5.7618489003933104e-01 + 9.7693946395277798e-01 1.0065644360222279e+00 -8.1336340404018737e-01 + 1.1910286837687252e+00 1.1414666232822921e+00 -1.0811568964006684e+00 + 1.3733819309431732e+00 1.2106189790195083e+00 -1.3733659234889624e+00 + 1.5140393867597099e+00 1.2158468877592135e+00 -1.6813705504872833e+00 + 1.6039146772036104e+00 1.1639571763986551e+00 -1.9951872798147865e+00 + 1.6380636032796414e+00 1.0660817301346508e+00 -2.3014144999562745e+00 + 1.6201352093565198e+00 9.3779250130798220e-01 -2.5862094147741232e+00 + 1.5603911883124530e+00 7.9544636124997670e-01 -2.8404951481963514e+00 + 1.4749805125557787e+00 6.4948434926084953e-01 -3.0657010769508979e+00 + 1.3792321178672984e+00 4.9843171899492100e-01 -3.2822972342244539e+00 + 1.2791636702424911e+00 3.4243270335618448e-01 -3.5151135144789420e+00 + 1.1881448415713021e+00 2.2108345638668192e-01 -3.7630334788377051e+00 + 1.1448801079100357e+00 1.9804665883629058e-01 -3.9662972868394384e+00 + 1.1682793714825461e+00 2.3874789723908552e-01 -4.0352459309469966e+00 + 1.2145863878609731e+00 1.6242568017490333e-01 -3.9364002909658113e+00 + 1.2779988631266119e+00 2.8521625578631515e-01 -3.9582256374289453e+00 + id 12913 + loc 8.5830372571945190e-01 7.7912777662277222e-01 411 + blend 0.0000000000000000e+00 + interp 3.8613678766704967e-01:3.8613292629917301e-01:3.0010293235818952e-01:2.7714184741043152e-01:1.1263641691858204e+00:3.1093856048245155e-01:2.0322763208005452e+00:2.7764904603536900e-01:2.9706158602314785e+00:3.1820947972638303e-01:3.7597184907200685e+00 + CVs 20 + 9.1019338997063681e-01 2.4590729002497938e-01 -2.1942532321437380e-01 + 1.5658348777991153e+00 3.2812036769699893e-01 -4.1103661595437013e-01 + 2.1710096864918795e+00 3.5089439198059069e-01 -5.8712401109065726e-01 + 2.8018660958831401e+00 3.4956388883753231e-01 -7.5083747213556129e-01 + 3.4505113928130879e+00 3.1594164971092631e-01 -8.9650430167189954e-01 + 4.1051735531416123e+00 2.4196144428590394e-01 -1.0256200843599677e+00 + 4.7479576430570534e+00 1.1905873895993935e-01 -1.1440755003178431e+00 + 5.3601019420922702e+00 -6.3291217788300491e-02 -1.2577513630591248e+00 + 5.9196272355873436e+00 -3.1270304507409685e-01 -1.3735167996150439e+00 + 6.4001021358513146e+00 -6.2606046147269323e-01 -1.5012076554280609e+00 + 6.7816468228734053e+00 -9.8684441152070446e-01 -1.6455961676255972e+00 + 7.0651526238417084e+00 -1.3749704373628713e+00 -1.8027204683060478e+00 + 7.2614487590970800e+00 -1.7756494820058473e+00 -1.9734672446350190e+00 + 7.3795314840624471e+00 -2.1723564388108456e+00 -2.1583230996751626e+00 + 7.4297648114037864e+00 -2.5497547187338396e+00 -2.3540006635934532e+00 + 7.4272133597752870e+00 -2.9051682317768108e+00 -2.5533591191842344e+00 + 7.3856063644632428e+00 -3.2422013031190806e+00 -2.7470239245015016e+00 + 7.3146278072826494e+00 -3.5538237256213483e+00 -2.9238591191036583e+00 + 7.2127738568346915e+00 -3.8747237649978263e+00 -3.0792826315479731e+00 + id 12914 + loc 8.8084882497787476e-01 8.7534785270690918e-01 393 + blend 0.0000000000000000e+00 + interp 5.1858311377955801e-01:2.9159699602798772e-01:3.3401937494866463e-01:3.6964052867262936e-01:1.0508104090392774e+00:3.5825352804105470e-01:2.0008460250981996e+00:3.9297711175863848e-01:2.7371059303538354e+00:5.1857792794842028e-01:2.9941964399025585e+00:4.4852689492116865e-01:3.5986733736723711e+00:4.4513966868456656e-01:3.9974415813229967e+00 + CVs 20 + -2.5613150913784871e-01 2.8530299836996065e-01 -1.3868075824626230e-01 + -5.0245287791074511e-01 6.0321724571083801e-01 -2.9333720467125757e-01 + -7.6303601446848868e-01 9.4781721067105340e-01 -4.3422481491466980e-01 + -1.0524712828489626e+00 1.3033632072901586e+00 -5.5682838374133747e-01 + -1.3855220778935509e+00 1.6498991724638064e+00 -6.7607503783513467e-01 + -1.7742232884653395e+00 1.9584739307418342e+00 -8.1423369403908297e-01 + -2.2228905193935700e+00 2.1941438600005259e+00 -9.9031213365214210e-01 + -2.7217210628820654e+00 2.3233674252599918e+00 -1.2107044268347640e+00 + -3.2424246514017403e+00 2.3263195523729570e+00 -1.4711698299540146e+00 + -3.7491975259501418e+00 2.2091159506961593e+00 -1.7604076187006434e+00 + -4.2190362945715405e+00 2.0007505397546019e+00 -2.0609838413049340e+00 + -4.6428285941281029e+00 1.7387429623990764e+00 -2.3595093051640879e+00 + -5.0160818962435645e+00 1.4464731383783018e+00 -2.6554088429024940e+00 + -5.3385775984383388e+00 1.1164301404265284e+00 -2.9485010876730264e+00 + -5.6153187186349323e+00 7.7126562067946303e-01 -3.2285266567354904e+00 + -5.8594026202588925e+00 5.8977976823902778e-01 -3.5010962580392309e+00 + -6.0410336937747742e+00 9.2800565899185261e-01 -3.7313092953755311e+00 + -6.0442577561336952e+00 1.7092787983983935e+00 -3.6452950268327564e+00 + -6.3368126697494649e+00 1.7055434648027727e+00 -3.8854753870795706e+00 + id 12915 + loc 2.6710698008537292e-01 7.8915059566497803e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399334262279577e-01:4.3413182525169841e-01:1.8778702466425479e-01:2.4662163667654757e-01:8.2044154397949876e-01:3.9237885908072784e-01:1.1356516599074393e+00:4.4398890268936958e-01:1.9154386581940819e+00:4.4042066551842873e-01:2.2032620448721474e+00:4.1484001465390163e-01:2.9477140195836382e+00:4.2023764690426663e-01:3.5389742510579207e+00 + CVs 20 + 4.2484077807973708e-01 2.2880318310008485e-01 -2.1850642180524324e-01 + 7.8221975700078439e-01 4.0670721938756366e-01 -4.1630976155067956e-01 + 1.1294833399283153e+00 5.6887914090184222e-01 -6.1329209852700228e-01 + 1.5017989563205882e+00 7.3288331476349700e-01 -8.2023576549271182e-01 + 1.8993974967006915e+00 8.8821563477606824e-01 -1.0356873102165438e+00 + 2.3182777588662105e+00 1.0236651993928314e+00 -1.2606759486087136e+00 + 2.7526794235836474e+00 1.1286917188428776e+00 -1.4991355225615099e+00 + 3.1984938826018787e+00 1.1905748913322340e+00 -1.7538701878954115e+00 + 3.6505070525954930e+00 1.1932561370978845e+00 -2.0236137086138131e+00 + 4.0951707573965610e+00 1.1217774701567718e+00 -2.3052320296885402e+00 + 4.5091634470703577e+00 9.6944398089833239e-01 -2.5941277725072247e+00 + 4.8711029947598137e+00 7.4352565600054232e-01 -2.8793130813115990e+00 + 5.1740879515201188e+00 4.6171952416207951e-01 -3.1457382688914377e+00 + 5.4218789351650889e+00 1.4401507834665628e-01 -3.3825477695572950e+00 + 5.6212102629618448e+00 -1.9168932029274721e-01 -3.5862658665858667e+00 + 5.7810222439637968e+00 -5.3477166136589016e-01 -3.7595934779403111e+00 + 5.9100666733824090e+00 -8.8107065540333718e-01 -3.9071581897362835e+00 + 6.0136710375865512e+00 -1.2221403175801377e+00 -4.0304351767475328e+00 + 6.0822976962846518e+00 -1.4808769483335338e+00 -4.1035753149282783e+00 + id 12916 + loc 6.4072179794311523e-01 6.7098423838615417e-02 414 + blend 0.0000000000000000e+00 + interp 2.1024758300404622e+00:2.1024658300404622e+00:9.6536269937254837e-01:1.4482425237828236e+00:1.0002194080147326e+00:3.3698844957844576e-01:1.1946967844893772e+00:3.2927888943888839e-01:1.5537920790917914e+00:3.7708448095719949e-01:2.0862766108696955e+00:2.7145887631972854e-01:3.0254360298918015e+00 + CVs 20 + -9.7594792377555473e-01 2.2667083353578402e-01 1.4908904014651858e-01 + -1.6210574063837329e+00 2.8587572727626837e-01 3.2304734795983231e-01 + -2.1732841921301032e+00 2.8688821153530419e-01 5.0211065938372990e-01 + -2.7487128757109676e+00 2.6748630562575720e-01 6.8908206382979731e-01 + -3.3356288122555462e+00 2.2719064037152181e-01 8.7220930096308180e-01 + -3.9230235142035639e+00 1.6767062567794200e-01 1.0359235460575391e+00 + -4.5006199497125543e+00 9.1065957013568344e-02 1.1658478063381068e+00 + -5.0583152918860366e+00 -1.4416312445831858e-03 1.2536153703493700e+00 + -5.5873514517973977e+00 -1.0910743326357897e-01 1.2971892231609168e+00 + -6.0811895107082172e+00 -2.3202237384100854e-01 1.3008737654873057e+00 + -6.5374140934002725e+00 -3.7717108159797386e-01 1.2796521965178203e+00 + -6.9603072679567140e+00 -5.6113264147160913e-01 1.2520584713910266e+00 + -7.3543346883139673e+00 -7.9810708971695798e-01 1.2278810630331400e+00 + -7.7195071085029952e+00 -1.0912721047903751e+00 1.2065230859981289e+00 + -8.0541059515584692e+00 -1.4393437756744083e+00 1.1817579421698348e+00 + -8.3527410328935865e+00 -1.8365661385993552e+00 1.1530099027570326e+00 + -8.6081638939030451e+00 -2.2690618799416598e+00 1.1265476913572405e+00 + -8.8154512769451898e+00 -2.7149418076425693e+00 1.1083496855029491e+00 + -8.9536936668175002e+00 -3.0651323010081830e+00 1.0557824804637903e+00 + id 12917 + loc 1.4655245468020439e-02 4.7211450338363647e-01 403 + blend 0.0000000000000000e+00 + interp 4.5487307411981115e-01:4.0032337686549385e-01:4.9414322894697382e-02:3.9354423546431533e-01:6.1616315806302813e-01:4.5486852538906997e-01:1.0295979796956836e+00:2.1717726230160900e-01:1.6924028688188919e+00:3.3056880380615222e-01:2.6587583781987059e+00:3.6636569728389046e-01:2.9999999940453392e+00:3.7476241939418814e-01:3.8040619139427188e+00 + CVs 20 + -1.5515456915047912e-01 2.1541939494304230e-01 3.8453573927817938e-02 + -3.0451715743298530e-01 4.1696733996438667e-01 8.9559521421766902e-02 + -4.5142064464409215e-01 6.1838475616800070e-01 1.4665979791078343e-01 + -5.9460345673797943e-01 8.2391813344755649e-01 2.0445068553450263e-01 + -7.3383485714584762e-01 1.0320700556742071e+00 2.6771399839235949e-01 + -8.6857107562382074e-01 1.2408828469225019e+00 3.4096241223249518e-01 + -9.9811314548642782e-01 1.4485876975519372e+00 4.2926160583169870e-01 + -1.1219206516860727e+00 1.6539844536934152e+00 5.3923243434557311e-01 + -1.2383351960712299e+00 1.8547051133808146e+00 6.8175787523572906e-01 + -1.3408634148910012e+00 2.0421663392453198e+00 8.7206873376556404e-01 + -1.4158756768483716e+00 2.2004028569897858e+00 1.1178940109788027e+00 + -1.4475844243988514e+00 2.3149119174562127e+00 1.4069607609927111e+00 + -1.4324075279991371e+00 2.3841365445179878e+00 1.7139862040225542e+00 + -1.3857298181286706e+00 2.4187494587987528e+00 2.0266366341668833e+00 + -1.3281464063932773e+00 2.4264564838675593e+00 2.3463911553007866e+00 + -1.2754938066765187e+00 2.4127512193490510e+00 2.6519754630277825e+00 + -1.2298916969305789e+00 2.4078623572894289e+00 2.8520676610429492e+00 + -1.1713896346701096e+00 2.4360904594353898e+00 2.8552165822880973e+00 + -1.1917738084193152e+00 2.4765330684482860e+00 3.0605688110407754e+00 + id 12918 + loc 5.5626416206359863e-01 4.8199236392974854e-01 377 + blend 0.0000000000000000e+00 + interp 4.6340216484207952e-01:4.0532915643811568e-01:2.9786255727965893e-02:3.6615013671369284e-01:8.7287948413021643e-01:4.2029867729330644e-01:1.3320700176706279e+00:3.7281097256920920e-01:2.8639508369605640e+00:4.5977739473720131e-01:3.3273633951631387e+00:4.6339753082043111e-01:3.8308662917322165e+00 + CVs 20 + 7.1517669695742558e-01 1.9585750338281172e-01 6.3794775612560828e-01 + 1.2644362946163268e+00 2.6193305886013352e-01 1.1070135513497235e+00 + 1.7784169915796884e+00 2.8074792270989973e-01 1.5582992225127521e+00 + 2.3097369646509973e+00 2.8045561161327326e-01 2.0575058972479114e+00 + 2.8527881351978133e+00 2.4895697859085364e-01 2.5942376145721360e+00 + 3.4062916573699900e+00 1.6824004347295873e-01 3.1414958223823084e+00 + 3.9596603602598139e+00 1.6368641527607863e-02 3.6592882414410433e+00 + 4.4843501835092647e+00 -2.1943386563267464e-01 4.1062983679371987e+00 + 4.9539169079366934e+00 -5.3042535576702488e-01 4.4493214979935178e+00 + 5.3594854952494870e+00 -8.8769067226484921e-01 4.6676220926842342e+00 + 5.7007373511989288e+00 -1.2502669454306758e+00 4.7576925869324267e+00 + 5.9835174392963220e+00 -1.5766826572927006e+00 4.7383981843774592e+00 + 6.2296491520146535e+00 -1.8498126820354988e+00 4.6496958970376641e+00 + 6.4692984544519705e+00 -2.1069702762333655e+00 4.5325721938357617e+00 + 6.7087254360115356e+00 -2.4152204345161903e+00 4.4030982161337970e+00 + 6.9280133852247747e+00 -2.7936254998590382e+00 4.2804470901183596e+00 + 7.1028125377681945e+00 -3.1909874456339069e+00 4.2035063215945847e+00 + 7.2340875550912607e+00 -3.5511896540353365e+00 4.1923835846641921e+00 + 7.4225063507961302e+00 -3.8945725012738976e+00 4.2217491967527767e+00 + id 12919 + loc 9.9648362398147583e-01 4.3606990575790405e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5997989553475557e-01:2.6508734907554027e-01:1.8784432304962884e-01:3.5997629573580026e-01:1.1004697001829047e+00:3.1686398933564974e-01:2.0071182797707556e+00:2.3184809902621792e-01:2.8669116115421298e+00:3.1878060986871942e-01:3.1798369462344733e+00 + CVs 20 + -1.2150392705744212e-01 3.1288903929007850e-01 2.8709366866349856e-01 + -2.5181941066580033e-01 5.8820905307911464e-01 5.4660306815141557e-01 + -3.9950172708414872e-01 8.3385644027117833e-01 8.0427939061322928e-01 + -5.7215609533781508e-01 1.0540689433868906e+00 1.0667837563284888e+00 + -7.6615434999108634e-01 1.2473991631803709e+00 1.3220283251721789e+00 + -9.5047231685630607e-01 1.4153389234016505e+00 1.5566960394315785e+00 + -1.0862909309911946e+00 1.5640594109124648e+00 1.7658219828945687e+00 + -1.1582357164174448e+00 1.6986843391648536e+00 1.9514262892615943e+00 + -1.1695039981983921e+00 1.8065511289454950e+00 2.1031673410878815e+00 + -1.1454007453208224e+00 1.8424963885830199e+00 2.1713262324186768e+00 + -1.1521025274411190e+00 1.8109700349721778e+00 2.0927020561431569e+00 + -1.2012154330587059e+00 1.8219808129652688e+00 1.9470336018402539e+00 + -1.2085509840920139e+00 1.8709971199639930e+00 1.8756781631164015e+00 + -1.1390499980147204e+00 1.8795537697093025e+00 1.8944714388838428e+00 + -1.0162907378483679e+00 1.8187939886883766e+00 1.9726962154992964e+00 + -8.8474569334758946e-01 1.7347152563368007e+00 2.0801805034367606e+00 + -7.5958975237897064e-01 1.7007076403874630e+00 2.2106869079669353e+00 + -6.3329495233693345e-01 1.6921667602245003e+00 2.3831525325922849e+00 + -6.6073371470262898e-01 1.4501818773223794e+00 2.4481884292931388e+00 + id 12920 + loc 7.9291623830795288e-01 3.4799680113792419e-01 373 + blend 0.0000000000000000e+00 + interp 3.7257833336488833e-01:3.0588186083561503e-01:2.3884817344687337e-01:3.7257460758155470e-01:1.0497918311215271e+00:2.6420696558987533e-01:1.9944373189028726e+00:2.2419065871243149e-01:2.8300309930926497e+00:2.3280061863522156e-01:3.4462258713711820e+00 + CVs 20 + 3.0394724232812909e-01 3.5709204755321367e-01 4.6671913511847782e-02 + 6.4357454409359516e-01 6.4823540821725123e-01 1.0251603727311309e-01 + 9.9158392992656408e-01 8.3285656981751055e-01 1.5533852619853888e-01 + 1.3416758341170532e+00 9.5587742531709086e-01 2.0587997030167832e-01 + 1.6739554221278858e+00 1.0745095054621736e+00 2.4514117183512002e-01 + 1.9746938737867019e+00 1.2006009589358015e+00 2.6563587007125755e-01 + 2.2787118834387847e+00 1.3532362154150577e+00 2.8804292396696951e-01 + 2.6006416946530093e+00 1.5515205885597647e+00 3.4300559691872834e-01 + 2.9111315094148953e+00 1.7881620654424866e+00 4.4188870363126209e-01 + 3.1749302402730475e+00 2.0349039993795826e+00 5.6493728823074041e-01 + 3.3833259952835997e+00 2.2758555276239467e+00 6.7645551695181427e-01 + 3.5497737440459440e+00 2.5406524094464040e+00 7.4671992220038974e-01 + 3.7055267101683316e+00 2.8893259037670105e+00 7.9974439255802565e-01 + 3.8870570292555979e+00 3.3415064207653202e+00 9.6008001815515498e-01 + 4.0586008532074427e+00 3.8156019114423931e+00 1.3398329732644481e+00 + 3.9882725724694166e+00 4.2499508042363807e+00 1.7775836269378578e+00 + 3.3891100516217141e+00 4.7232071642561211e+00 2.1744035677533247e+00 + 2.5675054962205661e+00 4.7733362787217484e+00 2.6041134570981734e+00 + 2.6115829995582005e+00 4.4752145159921497e+00 2.6718863730106293e+00 + id 12921 + loc 5.6563562154769897e-01 1.6614224016666412e-01 399 + blend 0.0000000000000000e+00 + interp 4.4709962165114070e-01:3.7841979664419145e-01:2.9528704800885208e-04:2.8623998771610909e-01:1.0007274560763268e+00:2.7103298120455610e-01:1.9833304994656549e+00:4.3106684338092011e-01:2.8746162423237456e+00:4.4709515065492422e-01:3.3101725948850724e+00 + CVs 20 + 1.9252008432205869e-01 2.8066581901388599e-01 2.1731116056140293e-01 + 3.5839780390920584e-01 5.5621816376622668e-01 4.1480767033877236e-01 + 5.0040642727640683e-01 8.2699098647686831e-01 6.1434187149280406e-01 + 6.2740942293657365e-01 1.0937892762054453e+00 8.2278072545197256e-01 + 7.5251255143287954e-01 1.3579092818845337e+00 1.0356061365118550e+00 + 8.8777094168650783e-01 1.6205088995266124e+00 1.2515776345655842e+00 + 1.0410248583596124e+00 1.8815133524108085e+00 1.4771211513411664e+00 + 1.2197064164938605e+00 2.1386481608315639e+00 1.7234687132615387e+00 + 1.4348765655665003e+00 2.3841004568564221e+00 2.0024649198764957e+00 + 1.6996738815781762e+00 2.6026425604340209e+00 2.3237763929831363e+00 + 2.0148023248687381e+00 2.7625352706532822e+00 2.6833773437715860e+00 + 2.3533022544061111e+00 2.8309490410579055e+00 3.0431148248368749e+00 + 2.6718531816005444e+00 2.8124516941572346e+00 3.3450440328903861e+00 + 2.9282685708624023e+00 2.7396972473021641e+00 3.5275596447327175e+00 + 3.1118774882507267e+00 2.6295937276378534e+00 3.5420845356256572e+00 + 3.3096771830358884e+00 2.4484319264412964e+00 3.3879623628118747e+00 + 3.6786014661813953e+00 2.1274365552514070e+00 3.1476147314382175e+00 + 4.1610327556790523e+00 1.7465095019094035e+00 3.0913154700898899e+00 + 4.1871336201756586e+00 1.7693897197633606e+00 3.3297610903525650e+00 + id 12922 + loc 6.2974578142166138e-01 1.9171153008937836e-01 409 + blend 0.0000000000000000e+00 + interp 3.7642379592470937e-01:3.4344742210922474e-01:3.6219936026198452e-01:2.8352117246342312e-01:1.2675164045858596e+00:3.7642003168675015e-01:1.9855797568293507e+00:3.6785019049720097e-01:2.9352714456919187e+00:3.2978345521661251e-01:3.3374693619309124e+00 + CVs 20 + -2.3291513537800462e-01 6.4350211222343384e-02 1.2385559874479965e-01 + -4.6918058485019265e-01 1.4036430670416500e-01 2.7973582355330984e-01 + -7.1276545532749158e-01 2.2714441855235012e-01 4.4307750181590577e-01 + -9.6232296946315210e-01 3.2113966369761343e-01 6.0036062851146232e-01 + -1.2158215929328207e+00 4.1899924635723895e-01 7.5178270243213952e-01 + -1.4727868363312298e+00 5.1885533389716776e-01 8.9747467588303398e-01 + -1.7331066324317237e+00 6.2006520407488974e-01 1.0359387012831669e+00 + -1.9983158061143242e+00 7.1906082763727697e-01 1.1644173237834496e+00 + -2.2693106031610286e+00 8.0680129782648435e-01 1.2791314365553776e+00 + -2.5394203069131795e+00 8.7269928899066052e-01 1.3784361256010014e+00 + -2.7986202001720608e+00 9.0888848862086125e-01 1.4661150354374979e+00 + -3.0448753314548456e+00 9.0922191212682080e-01 1.5495454757811231e+00 + -3.2824866243895325e+00 8.6900815154289668e-01 1.6352294963377811e+00 + -3.5128231812713295e+00 7.8790570168162199e-01 1.7261851541330340e+00 + -3.7344266892008759e+00 6.6784117324091219e-01 1.8236253391481489e+00 + -3.9468118903210176e+00 5.0655377100512444e-01 1.9288553459765685e+00 + -4.1462266280289608e+00 3.0153840160703949e-01 2.0385733537375255e+00 + -4.3232526946859569e+00 6.5854961296093695e-02 2.1412044977112297e+00 + -4.4680080606689909e+00 -1.6865145840678020e-01 2.2249380957635934e+00 + id 12923 + loc 9.3983078002929688e-01 6.8267595767974854e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2326479755893009e-01:3.1207852847033235e-01:3.3933434342064950e-01:2.6328338794246087e-01:1.0086143372786585e+00:3.1365369621898676e-01:1.7736429209117166e+00:4.2326056491095454e-01:2.0370407936145405e+00:2.6860509538897703e-01:2.8553546681389657e+00:3.2908045005322362e-01:3.6293276496774194e+00 + CVs 20 + 5.3444081489341884e-02 4.6318205284682196e-01 -2.7531344658861351e-01 + 9.6725300328755454e-02 9.0695331819390757e-01 -4.9897090108132558e-01 + 1.3585423124387880e-01 1.3493205857604500e+00 -6.8692757437537799e-01 + 1.8881222508551224e-01 1.8091953311509839e+00 -8.6077541382490574e-01 + 2.8757529254226244e-01 2.2929078442500859e+00 -1.0550002190960968e+00 + 4.5847143965736353e-01 2.7734303424275302e+00 -1.3242704306775077e+00 + 7.0244847524052534e-01 3.1901438074226354e+00 -1.7046653517515087e+00 + 1.0051511695702811e+00 3.4945393774933451e+00 -2.1871085037738500e+00 + 1.3540492351188680e+00 3.6642628302998737e+00 -2.7375758999616941e+00 + 1.7353807790239393e+00 3.6929791767160838e+00 -3.3163225731417345e+00 + 2.1259867350279364e+00 3.5897841535237265e+00 -3.8820176879861075e+00 + 2.4999906060279922e+00 3.3878052053231413e+00 -4.3926384284248909e+00 + 2.8489715157502649e+00 3.1278255146350675e+00 -4.8422696882390319e+00 + 3.1790692581567432e+00 2.8173423230839743e+00 -5.2754244455379844e+00 + 3.4728726926612459e+00 2.4391548050714187e+00 -5.7280105804963641e+00 + 3.6834739082061416e+00 1.9948201035173601e+00 -6.2019003311076784e+00 + 3.7678076799423708e+00 1.5069694462214720e+00 -6.7090236456740140e+00 + 3.6981885633103166e+00 1.0136215986274704e+00 -7.2502078711716855e+00 + 3.5146582781622402e+00 5.6653217167038106e-01 -7.7206383940257863e+00 + id 12924 + loc 9.3337947130203247e-01 8.8174515962600708e-01 382 + blend 0.0000000000000000e+00 + interp 5.3502476067277682e-01:3.8975328493096506e-01:4.2413957582702466e-01:2.3888089710926161e-01:1.0147945695833998e+00:3.3918324260090604e-01:1.7709790011974715e+00:5.3501941042517009e-01:1.9999539452718880e+00:3.6896801949465735e-01:2.9969341356150307e+00:3.1423878711021958e-01:3.9469000332326187e+00 + CVs 20 + 1.1532702399626338e+00 1.9981612506329227e-01 -5.9732897791326112e-01 + 1.9279075588449419e+00 2.6785156544742300e-01 -9.8977338809824122e-01 + 2.6278715904566301e+00 3.1023071766228816e-01 -1.3143516859916113e+00 + 3.3670166509443282e+00 3.6887906579407076e-01 -1.6313569207402285e+00 + 4.1289774766294842e+00 4.2436780918591138e-01 -1.9608137653879270e+00 + 4.8995375005258621e+00 4.3781854298611972e-01 -2.3286016314494100e+00 + 5.6609074711850935e+00 3.5518764073768538e-01 -2.7487020344954312e+00 + 6.3866316433776884e+00 1.2550229608363761e-01 -3.2066085295716227e+00 + 7.0436026519330035e+00 -2.7666915340359743e-01 -3.6626741282912096e+00 + 7.5972255120066503e+00 -8.4032381468472295e-01 -4.0706782831858215e+00 + 8.0169497026341983e+00 -1.5261813510925522e+00 -4.3948535851024557e+00 + 8.2734688219227888e+00 -2.2824824544560851e+00 -4.6209400318184102e+00 + 8.3401158522415777e+00 -3.0427794989767651e+00 -4.7598495437487536e+00 + 8.2583315562219184e+00 -3.7279474599990450e+00 -4.8221560345975902e+00 + 8.1174776838544744e+00 -4.3249614171555972e+00 -4.8237398665921187e+00 + 7.9879497163927375e+00 -4.8580282462820241e+00 -4.7756529712761724e+00 + 7.9093922631438449e+00 -5.3381696028249737e+00 -4.6945991853716826e+00 + 7.8926901373115070e+00 -5.7765755834320256e+00 -4.6030770699014765e+00 + 7.9255317155014566e+00 -6.1680501613270273e+00 -4.5447729608478209e+00 + id 12925 + loc 2.7008208632469177e-01 4.7225013375282288e-01 1080 + blend 0.0000000000000000e+00 + interp 4.6188220422702508e-01:3.5044216474341822e-01:2.6053544597542611e-02:2.5894147869025702e-01:9.7420777154962512e-01:3.5215732392774340e-01:1.4456275760861337e+00:3.8061657652669317e-01:2.0002996868378964e+00:3.3645970058523983e-01:2.5406809844717220e+00:3.6133524986005383e-01:3.0029656910073861e+00:4.6187758540498286e-01:3.3812548450498596e+00 + CVs 20 + 2.8872027486793589e-01 2.1589073045457013e-01 1.9839498619931176e-01 + 3.9921225545638273e-01 3.4813515053546962e-01 3.3420041712551740e-01 + 4.4889207765525940e-01 4.5040452904328621e-01 4.6312963663477236e-01 + 4.9645721679693477e-01 5.5070120388003330e-01 6.1161661899610598e-01 + 5.3837467069305434e-01 6.4627654311264138e-01 7.7722378887438770e-01 + 5.7157100291331442e-01 7.3445290375794947e-01 9.5672098022016416e-01 + 5.9372823583156020e-01 8.1316134192263889e-01 1.1467016728638588e+00 + 6.0343453770951916e-01 8.8108698063069268e-01 1.3441863343475229e+00 + 6.0034502123285804e-01 9.3726432174885921e-01 1.5470228741415857e+00 + 5.8528548378883305e-01 9.8058965849719093e-01 1.7544020582615596e+00 + 5.6022311611895526e-01 1.0095147102188360e+00 1.9671248183874406e+00 + 5.2816543633826485e-01 1.0217964255703238e+00 2.1875721155625723e+00 + 4.9312908708468806e-01 1.0145153968234493e+00 2.4190494676321128e+00 + 4.5952791973865181e-01 9.8517506991356618e-01 2.6623292355349899e+00 + 4.3146123432823097e-01 9.3264254899920473e-01 2.9147658826707499e+00 + 4.1209687830174513e-01 8.5666754941596923e-01 3.1737631521503409e+00 + 4.0357004131781798e-01 7.5730652616761174e-01 3.4389747232086618e+00 + 4.0675469827165278e-01 6.3686856008964599e-01 3.7078233048000668e+00 + 4.1348491494470668e-01 5.1290865422184728e-01 3.9432080982945195e+00 + id 12926 + loc 2.0382267236709595e-01 2.5558340549468994e-01 406 + blend 0.0000000000000000e+00 + interp 4.7716927192081793e-01:2.7573046383575112e-01:9.4711510022904788e-01:4.7716450022809875e-01:1.5269303046126439e+00:2.7489278100211273e-01:2.0056723957624114e+00:4.6824080398875140e-01:2.7142891656099444e+00:3.5404853426394400e-01:3.0899897012610680e+00:2.8422569001774228e-01:3.9654281951719992e+00 + CVs 20 + 2.3359344927764272e-02 1.5022622616482409e-01 -6.0962641799944289e-02 + 3.5821932821842921e-02 2.7907859842847521e-01 -8.1392678500243371e-02 + 5.2192540878333062e-02 4.1294934801170047e-01 -9.7667451141556810e-02 + 7.5991405753953203e-02 5.6268035443293818e-01 -1.4026969459615030e-01 + 1.0781268719395003e-01 7.2564571785175280e-01 -2.1543010690048250e-01 + 1.4735198723546908e-01 8.9814911562841049e-01 -3.2887188662184202e-01 + 1.9427888253099340e-01 1.0756034874182849e+00 -4.8566106503469852e-01 + 2.4925859260967861e-01 1.2525421007479154e+00 -6.8945183511204811e-01 + 3.1239829421654691e-01 1.4218633018808271e+00 -9.4045392654480331e-01 + 3.7783046076572741e-01 1.5745055203385361e+00 -1.2335452571468615e+00 + 4.3345915504345134e-01 1.7017068626164675e+00 -1.5604372481466537e+00 + 4.7106583471677455e-01 1.7975520793482720e+00 -1.9137101938152494e+00 + 4.9104665706544698e-01 1.8588213158271147e+00 -2.2859535542163258e+00 + 4.9354026405398099e-01 1.8845335989650271e+00 -2.6641942009504240e+00 + 4.7191129143866528e-01 1.8769851656973364e+00 -3.0290959818264209e+00 + 4.1992597833112455e-01 1.8405084722434353e+00 -3.3633610847341746e+00 + 3.4126034509312997e-01 1.7782552988221330e+00 -3.6593878644652742e+00 + 2.4639000343737172e-01 1.6951058567826713e+00 -3.9150116867821732e+00 + 2.1372101414128897e-01 1.6241599243782066e+00 -4.1662324814526661e+00 + id 12927 + loc 6.3941232860088348e-02 8.7600350379943848e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7949678461502018e-01:3.3839845343759511e-01:8.9126612045369646e-02:2.7481627086983068e-01:9.8300027113608646e-01:3.7198552809388385e-01:1.9864178484314277e+00:3.3458191295709283e-01:2.5726008432197371e+00:3.7949298964717404e-01:3.3148926872133360e+00 + CVs 20 + -1.8104699008089219e-02 2.0330932140817415e-01 9.7666552951034685e-02 + 7.1314366991891143e-05 3.9745885464468900e-01 1.4742359397787363e-01 + 3.3357515177572045e-02 5.9176355677740256e-01 1.7578925690156597e-01 + 6.9794057652019917e-02 8.0199351976087696e-01 1.9688014782881424e-01 + 1.0462900189301792e-01 1.0260753212231883e+00 2.0391987041878445e-01 + 1.2837135333383115e-01 1.2614142867220273e+00 1.8843894011944029e-01 + 1.2738358686165027e-01 1.5027898665315838e+00 1.4259286622881195e-01 + 8.7773488586637707e-02 1.7412954802070373e+00 6.4174300235907866e-02 + -9.6420327583786325e-05 1.9664764460562614e+00 -4.5068749419210352e-02 + -1.4087788767594983e-01 2.1657816688311109e+00 -1.8701080359002586e-01 + -3.3365121104649381e-01 2.3209019541170819e+00 -3.6760430209641837e-01 + -5.6592893161056024e-01 2.4128135949872362e+00 -5.8758064213567762e-01 + -8.1747163916673793e-01 2.4367574892405077e+00 -8.3424482172833747e-01 + -1.0739305969190434e+00 2.4134156893979091e+00 -1.0843588444335404e+00 + -1.3359935018014304e+00 2.3762093536406179e+00 -1.3225088345454590e+00 + -1.6125593503681792e+00 2.3333792966684692e+00 -1.5561189164983067e+00 + -1.8956230166184862e+00 2.2815487958067289e+00 -1.8023336746882199e+00 + -2.1515222645466725e+00 2.2504440259323713e+00 -2.0752280932545952e+00 + -2.4033244754141609e+00 2.2850790692649978e+00 -2.3202120242561279e+00 + id 12928 + loc 9.8996192216873169e-01 2.5133106112480164e-01 411 + blend 0.0000000000000000e+00 + interp 4.9771332196527096e-01:3.6857301979956814e-01:5.4726641525566211e-01:4.9042251655481067e-01:1.0059112808181037e+00:4.9770834483205134e-01:1.4458969021710155e+00:3.1534335883210662e-01:1.9598898824192315e+00:2.9136028007566261e-01:2.9754036984005827e+00:2.6902464152544270e-01:3.8219268861465054e+00 + CVs 20 + -5.8950302526007770e-01 1.6986803195877387e-01 2.3505047610264865e-01 + -1.0121839462956570e+00 2.4708366658785708e-01 4.3397983663696432e-01 + -1.3953130112465888e+00 2.9911286555451111e-01 6.1217906702387803e-01 + -1.7917989275937116e+00 3.6303781192804180e-01 7.6852559738022752e-01 + -2.2057358592996517e+00 4.3554232363653145e-01 8.9668687746774300e-01 + -2.6415719740991506e+00 5.0943583319471464e-01 9.9911072832343262e-01 + -3.1040443150302015e+00 5.7451563950423556e-01 1.0883458411583815e+00 + -3.5979415721553334e+00 6.1507480966520034e-01 1.1794752060485907e+00 + -4.1243900251705092e+00 6.0675514185798174e-01 1.2833970697099248e+00 + -4.6726585494889257e+00 5.2040966925676613e-01 1.4101440413170463e+00 + -5.2128327950647053e+00 3.3082781364301650e-01 1.5738736606246770e+00 + -5.7037257018437577e+00 2.7329467188455414e-02 1.7815687334314130e+00 + -6.1143516699937885e+00 -3.8178677797081306e-01 2.0217394284053047e+00 + -6.4290089109981503e+00 -8.7436492068084481e-01 2.2753909233212988e+00 + -6.6394681624984333e+00 -1.4204431634565586e+00 2.5292882200493780e+00 + -6.7445652266829184e+00 -1.9908932260145815e+00 2.7721299883904793e+00 + -6.7517145857011682e+00 -2.5618581848704221e+00 2.9879745788449137e+00 + -6.6808594536813217e+00 -3.1063475979920350e+00 3.1666709678434461e+00 + -6.6424860250473712e+00 -3.5814244085542328e+00 3.3344310365752108e+00 + id 12929 + loc 6.3450592756271362e-01 8.0479753017425537e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1696855496882251e-01:4.1696438528327284e-01:8.5021095328349383e-01:2.6269101145272306e-01:1.1795661676649827e+00:3.7565305422502548e-01:1.9418071652168427e+00:3.0285657045534770e-01:2.5269915970207131e+00:3.7407959384413580e-01:3.0059373585918943e+00:2.8733622642718326e-01:3.9074985881622206e+00 + CVs 20 + 1.2262182659347413e-01 2.6026596996549967e-01 -9.0420956204459446e-02 + 2.2539762089980994e-01 5.2843537204763824e-01 -1.8690740636953995e-01 + 3.3466978052258428e-01 7.9990515690186981e-01 -2.8885479382941548e-01 + 4.8658262815791725e-01 1.0614435210716626e+00 -3.9354127775686459e-01 + 6.9831787107377874e-01 1.2780789595407063e+00 -4.9275084290367460e-01 + 9.4497519811980113e-01 1.4250206906739042e+00 -5.8431289171490064e-01 + 1.1926701211858002e+00 1.5213060104788929e+00 -6.8224933874365057e-01 + 1.4268966245956749e+00 1.6103121055822613e+00 -7.9933030555691498e-01 + 1.6378441244410951e+00 1.7267084329327380e+00 -9.2825277111291205e-01 + 1.8029459283127540e+00 1.8720627500755769e+00 -1.0536234171964023e+00 + 1.8922639036266149e+00 2.0163250892782862e+00 -1.1903151884900125e+00 + 1.8847390467512253e+00 2.1030892427194612e+00 -1.3815341864271757e+00 + 1.8121285958934608e+00 2.0764491825186013e+00 -1.6177255257043930e+00 + 1.7482014863791668e+00 1.9282750024012336e+00 -1.8446869212577153e+00 + 1.7577279201049962e+00 1.6913856310263375e+00 -2.0312709069970540e+00 + 1.8738511671392899e+00 1.4190533306051578e+00 -2.1632514592169714e+00 + 2.0927139179055092e+00 1.1646141478441168e+00 -2.2146716162267914e+00 + 2.3750191871637778e+00 9.3426529275107473e-01 -2.1872140098063255e+00 + 2.6701008548888412e+00 5.5503671648575748e-01 -2.2521666053428846e+00 + id 12930 + loc 3.4706780314445496e-01 8.0834251642227173e-01 417 + blend 0.0000000000000000e+00 + interp 1.3399907876007688e+00:1.3399807876007688e+00:1.9612216129601179e-02:1.1623965885988961e+00:1.0647966839319067e-01:5.8065018383438316e-01:5.7471346821494429e-01:3.3546797017500457e-01:9.3264680210488871e-01:3.4398766922541069e-01:1.4871458968031108e+00:3.4950250400991451e-01:2.0337531529704842e+00:5.9472716606992249e-01:2.4697244722944953e+00 + CVs 20 + -4.8042632190218530e-02 2.2222519389311607e-01 -2.6154168586933579e-01 + -6.3656300777245350e-02 3.7423234620842238e-01 -4.2639783489009392e-01 + -8.1202819925945940e-02 4.8820805372367804e-01 -5.6397535925466680e-01 + -1.1823865556775687e-01 5.8799648705191365e-01 -7.1100019817057547e-01 + -1.7407595667574913e-01 6.7015686135249142e-01 -8.6607738170748816e-01 + -2.4747421610016285e-01 7.3171432286790583e-01 -1.0267162065813811e+00 + -3.3625155112968369e-01 7.7091468540423902e-01 -1.1897181255035099e+00 + -4.3701619657070467e-01 7.8757052079883372e-01 -1.3516394352639076e+00 + -5.4556360396891124e-01 7.8199019108581325e-01 -1.5079958639160147e+00 + -6.5817281814338868e-01 7.5428467034483848e-01 -1.6517808985972184e+00 + -7.7234166635673140e-01 7.0631002639005225e-01 -1.7765929085501706e+00 + -8.8589792920571420e-01 6.4225115387964626e-01 -1.8829939942897793e+00 + -9.9580275824524611e-01 5.6601579599674690e-01 -1.9758111172873072e+00 + -1.0973706309150424e+00 4.8134657414055804e-01 -2.0560001200993052e+00 + -1.1852084383959625e+00 3.9319976551679647e-01 -2.1204912443974258e+00 + -1.2552367039172918e+00 3.0601989169507582e-01 -2.1686577028480305e+00 + -1.3059239662602171e+00 2.2162283546300521e-01 -2.2051594919446877e+00 + -1.3381463950407722e+00 1.4009046170196826e-01 -2.2361448427463357e+00 + -1.3572052263976220e+00 4.8268928536589151e-02 -2.2755387539656002e+00 + id 12931 + loc 4.4647493958473206e-01 7.9972398281097412e-01 409 + blend 0.0000000000000000e+00 + interp 4.4515158834310792e-01:3.6055951329359098e-01:1.1259393176050059e-01:4.1992720307796283e-01:9.3825677315039591e-01:3.7635711329636423e-01:1.4416955743252786e+00:4.4514713682722451e-01:2.0293796212474717e+00:3.0394087274234866e-01:2.6009005841944925e+00:3.6874116792433326e-01:3.0499501867426577e+00:3.7442341109284649e-01:3.7399046824029698e+00 + CVs 20 + 4.9786497477983538e-01 1.0856744002591170e-01 -1.2137150244042735e-01 + 9.2087429836824453e-01 1.8108610820854298e-01 -2.6812150566430193e-01 + 1.3406570250425973e+00 2.4774381792998235e-01 -4.0215636989104708e-01 + 1.7798177142802709e+00 3.1572545540543839e-01 -5.1097334875753564e-01 + 2.2340009465307871e+00 3.7731480021660513e-01 -5.9440426773273858e-01 + 2.6999831896435471e+00 4.2436117023165609e-01 -6.5161032258720875e-01 + 3.1746428691425326e+00 4.4558474067731790e-01 -6.8099340627196758e-01 + 3.6533048638735863e+00 4.2365584214477670e-01 -6.8161903917763422e-01 + 4.1268773078754624e+00 3.3861464098740690e-01 -6.5698924515488377e-01 + 4.5774703833348216e+00 1.7253061346745335e-01 -6.1877440954653418e-01 + 4.9770644383952494e+00 -8.5955198288185652e-02 -5.8680810622216317e-01 + 5.2983883065792536e+00 -4.3149149345770432e-01 -5.7935570493398769e-01 + 5.5299110393233430e+00 -8.4268298927124263e-01 -6.0458939766630526e-01 + 5.6707475903284177e+00 -1.2966225723941633e+00 -6.6427087906689741e-01 + 5.7180779578973002e+00 -1.7728499381032381e+00 -7.5657614633410553e-01 + 5.6671899137702120e+00 -2.2515340858814783e+00 -8.6946320143018629e-01 + 5.5227925105883937e+00 -2.7150966668532677e+00 -9.8345042013603945e-01 + 5.3130221166128626e+00 -3.1503048173711878e+00 -1.1004213992191902e+00 + 5.2669510816184317e+00 -3.6295372374454034e+00 -1.2407606295291680e+00 + id 12932 + loc 4.4857445359230042e-01 7.7762258052825928e-01 377 + blend 0.0000000000000000e+00 + interp 4.5819559061148096e-01:3.7330451902863782e-01:9.7035522782319306e-01:4.1361688268867280e-01:1.6401801832220710e+00:4.1931185597871223e-01:2.1641532103989727e+00:4.5819100865557488e-01:2.9294944535472349e+00:4.0896641307062431e-01:3.4501375982920610e+00:2.6307228306517161e-01:3.9743169824363562e+00 + CVs 20 + -7.1102944623244335e-01 2.5398807414852093e-01 -5.6981315461638349e-01 + -1.2902577094346515e+00 3.7586522035843933e-01 -9.8691882094014138e-01 + -1.8424688494020869e+00 4.4530377379930342e-01 -1.3721267388878968e+00 + -2.4167698451322774e+00 4.9544998572827859e-01 -1.7775727556653536e+00 + -3.0046731781646887e+00 5.2140519732569257e-01 -2.1998298969496477e+00 + -3.6018696495895122e+00 5.0966410932772188e-01 -2.6362261161472857e+00 + -4.2022240375954674e+00 4.3870007856152848e-01 -3.0839976091916803e+00 + -4.7890298720588262e+00 2.8614370979246662e-01 -3.5370407311362531e+00 + -5.3425068142337251e+00 3.7677489761766658e-02 -3.9794660680279024e+00 + -5.8451973631795244e+00 -3.0887429025166968e-01 -4.3843842341571344e+00 + -6.2783570697136328e+00 -7.4778119232750129e-01 -4.7221430753495541e+00 + -6.6192006419603837e+00 -1.2663291390899523e+00 -4.9719155850313479e+00 + -6.8567223377113082e+00 -1.8354174065970477e+00 -5.1318394325541981e+00 + -7.0195976576730130e+00 -2.4103638755009480e+00 -5.2378763726202147e+00 + -7.1637074393493583e+00 -2.9600769618777791e+00 -5.3510508944316566e+00 + -7.3339067588518452e+00 -3.4648244366689700e+00 -5.4978157833357972e+00 + -7.5612598083157145e+00 -3.8993732740191946e+00 -5.6516058825039988e+00 + -7.8459210028885282e+00 -4.2572806148229629e+00 -5.7760465695691829e+00 + -8.0761866833514926e+00 -4.6537407963679405e+00 -5.9256462395293887e+00 + id 12933 + loc 3.3416691422462463e-01 2.4359248578548431e-02 373 + blend 0.0000000000000000e+00 + interp 6.1033254578055818e-01:6.1032644245510037e-01:1.1713137758668890e-01:3.3514037196477525e-01:9.4773976979978325e-01:4.1668244423884787e-01:1.8470213137283871e+00:3.1363409810406412e-01:2.0087969477501053e+00:3.7273368438614640e-01:2.8391947784026295e+00:3.3086000836926255e-01:3.4612569045626009e+00:5.1079110285283980e-01:3.9253441420626709e+00 + CVs 20 + -1.0556560761509898e-01 6.6090372133248354e-01 4.3740092239746370e-01 + -1.9607488302114578e-01 1.2822607144564380e+00 8.4949073905252970e-01 + -2.9590884905338910e-01 1.8827407184890372e+00 1.2895202111759143e+00 + -5.3414983412387818e-01 2.5299850169968021e+00 1.6821215353826293e+00 + -9.4731645888748195e-01 3.2356360952703680e+00 1.8049218799685991e+00 + -1.4952518715918846e+00 3.8552812365624649e+00 1.5332889662845952e+00 + -2.0650678742097588e+00 4.1523789040094083e+00 8.8561099644678398e-01 + -2.5175545821075787e+00 4.0262114353513780e+00 2.8567363472060681e-02 + -2.7713355695308901e+00 3.5281326892352300e+00 -8.5360678305939808e-01 + -2.8009587987540749e+00 2.7863191372920300e+00 -1.6057627936816277e+00 + -2.6485101811775955e+00 1.9671721942914984e+00 -2.1389889066219792e+00 + -2.4096733410083608e+00 1.2119497964650912e+00 -2.4499273266346551e+00 + -2.1741735356636762e+00 5.5837327215667787e-01 -2.6134534591704170e+00 + -1.9548225583214591e+00 -6.2737467173941797e-02 -2.6871149912604984e+00 + -1.6309487137418619e+00 -7.6228761959438684e-01 -2.6986876155359907e+00 + -1.1465057860982586e+00 -1.5395757812211281e+00 -2.9888577939569552e+00 + -8.2078891918143604e-01 -2.0334288372225195e+00 -3.8085760506768374e+00 + -1.0131728973811323e+00 -2.1548451746245854e+00 -4.8459348033684577e+00 + -1.9768437124534715e+00 -2.1291858529232970e+00 -5.4624373934579165e+00 + id 12934 + loc 5.1738160848617554e-01 5.1722818613052368e-01 1081 + blend 0.0000000000000000e+00 + interp 8.4574330785061236e-01:8.4573485041753393e-01:1.7162518524068018e+00:5.8572014523627913e-01:1.9071135346326566e+00:3.3728814642703403e-01:2.1560461091052270e+00:4.3172705237109271e-01:2.9924229259353767e+00:3.2921961776060721e-01:3.7044628917570637e+00:6.6732170419918546e-01:3.7511754690574288e+00 + CVs 20 + 5.8943411460910033e-02 6.0686531640687624e-01 5.5723938918274107e-01 + 1.3557872258450090e-01 1.0437838450244687e+00 8.8292395333751683e-01 + 1.9993738762678687e-01 1.4113225261717850e+00 1.1395438763343919e+00 + 2.4191877193753442e-01 1.7454515198693552e+00 1.3833066803121992e+00 + 2.6810211733481726e-01 2.0452094339974178e+00 1.6069755415995859e+00 + 2.8538696506850897e-01 2.3096301153210410e+00 1.8005525584827686e+00 + 3.0072026431071686e-01 2.5398046625351802e+00 1.9539578078950925e+00 + 3.2253686590741970e-01 2.7438235832471780e+00 2.0628347177511639e+00 + 3.7626671141654655e-01 2.9525516848319779e+00 2.1189474371956174e+00 + 5.1591886959359967e-01 3.1710145096535642e+00 2.0296206867642144e+00 + 6.3621782617044487e-01 3.2452982071867962e+00 1.8116470941278551e+00 + 6.9840159292128701e-01 3.2280179067726058e+00 1.5959563708568369e+00 + 7.3896597298871791e-01 3.1631726200118790e+00 1.3702300091996080e+00 + 7.6979131001883727e-01 3.0506589745049082e+00 1.1227210651212869e+00 + 7.9449065899863969e-01 2.8694195606633368e+00 8.4368882264732670e-01 + 8.1431017721020704e-01 2.5573419832539361e+00 5.2242982614705635e-01 + 8.2944986053659497e-01 2.0478782218375207e+00 2.2381683781261996e-01 + 8.4273080293614577e-01 1.4410764358179373e+00 9.8335478521029307e-02 + 8.6164685313924194e-01 1.0355010474925910e+00 1.6725377112635015e-01 + id 12935 + loc 9.3927735090255737e-01 7.5319647789001465e-01 403 + blend 0.0000000000000000e+00 + interp 5.1622470130887788e-01:2.6186725282100748e-01:5.4147652837023719e-02:4.4205921685471750e-01:5.5334624858782755e-01:4.7673569484967443e-01:9.9692975127207417e-01:3.3718495974177243e-01:1.3899043309030805e+00:5.1205955201013498e-01:2.0398972541202620e+00:4.5903376194951334e-01:2.6248923738171026e+00:5.1621953906186480e-01:2.9998387825509703e+00:4.2568373231767603e-01:3.8246250717579162e+00 + CVs 20 + -1.9168202038896347e-02 1.3263233187353646e-01 6.2436763482245361e-02 + 2.0024718566597821e-02 2.7510466560191532e-01 6.7603781042399655e-02 + 6.7685323557314520e-02 4.2016674575993473e-01 8.9331262585655852e-02 + 1.1881315871630060e-01 5.6909879969516708e-01 1.3408941272840236e-01 + 1.8084341214994679e-01 7.1848471384509960e-01 1.8168715047776773e-01 + 2.5177019034564957e-01 8.6890630002498825e-01 2.2841556305787702e-01 + 3.2999416130809922e-01 1.0201162764617646e+00 2.7305247287117235e-01 + 4.1341766798087315e-01 1.1714097718641368e+00 3.1570936132742522e-01 + 4.9952494587122265e-01 1.3217479042547460e+00 3.5781129375570775e-01 + 5.8532074933538636e-01 1.4700061647366323e+00 4.0203833232591557e-01 + 6.6851784269114012e-01 1.6146581019776942e+00 4.5105608146211362e-01 + 7.4792488394820889e-01 1.7538118461063186e+00 5.0725431431570955e-01 + 8.2414173579999717e-01 1.8850781341494338e+00 5.7194460765588018e-01 + 8.9938271561366678e-01 2.0058022991951256e+00 6.4555489467081506e-01 + 9.7711225106905775e-01 2.1132020371041151e+00 7.2781370971474302e-01 + 1.0618971442267200e+00 2.2042544121520362e+00 8.1712078877946515e-01 + 1.1588387423922248e+00 2.2756841589091783e+00 9.1023621664553989e-01 + 1.2718519672502653e+00 2.3246429541549682e+00 1.0022368872268952e+00 + 1.2694603859088143e+00 2.4156525895333223e+00 1.1902064990751828e+00 + id 12936 + loc 4.1500502824783325e-01 9.2365908622741699e-01 264 + blend 0.0000000000000000e+00 + interp 4.5917018126136278e-01:3.3849603042092247e-01:7.6931467967010203e-01:4.0884355410358492e-01:1.0200555298466483e+00:2.8310837861522770e-01:1.6555522714534590e+00:4.5916558955955017e-01:2.2034799202783382e+00:3.8416896784511317e-01:2.9997297466940105e+00:3.1242473333075471e-01:3.9448985148095645e+00 + CVs 20 + -7.4328344274168456e-01 4.3054874390471010e-01 -1.9918835813541108e-01 + -1.2977457109514505e+00 6.7005579486386146e-01 -2.9648768507505890e-01 + -1.8156214353798865e+00 7.5863029910896862e-01 -3.1502392816781233e-01 + -2.3428891796730715e+00 7.4148518179650680e-01 -2.7235348800931974e-01 + -2.8767017877567795e+00 6.9167439484133142e-01 -1.8742848846878740e-01 + -3.4311997615384722e+00 6.6309021740143670e-01 -9.3801676843045412e-02 + -4.0319538461469406e+00 6.5103562289705896e-01 -4.7980196414772802e-02 + -4.6786826231119143e+00 6.3405084044543636e-01 -1.0477124126998005e-01 + -5.3415860917197824e+00 6.0466326797602643e-01 -2.9547344381153839e-01 + -5.9956175839899704e+00 5.4923075225812878e-01 -6.3476586873949670e-01 + -6.6011421968119475e+00 4.2272452254644266e-01 -1.0930429156992278e+00 + -7.0975402991275320e+00 1.6845643013820677e-01 -1.5985252332595969e+00 + -7.4198263803307194e+00 -2.4120891639527731e-01 -2.0650531545555668e+00 + -7.5315713783761673e+00 -7.6992078126334640e-01 -2.4134245791173141e+00 + -7.4571548792693960e+00 -1.3196553118339276e+00 -2.5459715267301979e+00 + -7.3794663698055167e+00 -1.7705367253394271e+00 -2.3687179038916222e+00 + -7.4985104426869382e+00 -1.9729835092497363e+00 -1.9137644247167376e+00 + -7.7070319156748983e+00 -2.0612617070128940e+00 -1.4883927278397833e+00 + -7.8573222222355037e+00 -2.6307067166324236e+00 -1.2906491639663393e+00 + id 12937 + loc 8.0304764211177826e-02 3.3525130152702332e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9493654880768662e-01:4.0705382529271039e-01:2.6558173039304966e-03:4.3451048707220535e-01:4.5151579353147375e-01:3.2599490428877276e-01:9.8315858594268901e-01:3.4734364067664264e-01:1.7291988740725213e+00:4.9493159944219856e-01:2.0063382659750362e+00:4.8886936803227460e-01:2.4378139116419160e+00:3.2720288122852587e-01:3.0006073519829153e+00:3.9760793950378437e-01:3.6560269899408970e+00 + CVs 20 + 2.3131054783799088e-01 3.9648586349925447e-01 -1.3400365931525854e-01 + 3.5885699423116696e-01 7.4681951632040233e-01 -2.9517888144094745e-01 + 4.4115643554540063e-01 1.0872768737088494e+00 -4.6307150854355889e-01 + 4.8440720868139719e-01 1.4299790389046767e+00 -6.3628834478839402e-01 + 4.6689894041912028e-01 1.7620229338709399e+00 -8.1733393577990410e-01 + 3.5974322467873776e-01 2.0647988455300723e+00 -1.0066436144165740e+00 + 1.3236185212139617e-01 2.3036692616990448e+00 -1.1950714988698101e+00 + -2.2427632130906749e-01 2.4221651403614817e+00 -1.3514622029943997e+00 + -6.5348269440393403e-01 2.3723047710198948e+00 -1.4268940625922535e+00 + -1.0549775275853581e+00 2.1796930104097867e+00 -1.4019332725295117e+00 + -1.3794833531760125e+00 1.9203592730179642e+00 -1.3050312907367094e+00 + -1.6378676418022475e+00 1.6595107963359528e+00 -1.1783588790490516e+00 + -1.8618066483864346e+00 1.4422083555519811e+00 -1.0463538674946273e+00 + -2.0623566812696774e+00 1.3315821937945116e+00 -9.2611382734324366e-01 + -2.1619228753371798e+00 1.4346034137014008e+00 -8.7217270435952954e-01 + -1.9074491638786726e+00 1.7090939557005558e+00 -9.7306036689716513e-01 + -1.1071233552956472e+00 1.5402796163796439e+00 -1.1952771648264235e+00 + -7.4005271699200526e-01 5.7550477171334691e-01 -1.1636326442189397e+00 + -6.1854373698834819e-01 6.2759548734242743e-01 -1.1871969636706301e+00 + id 12938 + loc 4.5940113067626953e-01 4.8104491829872131e-01 382 + blend 0.0000000000000000e+00 + interp 4.7808239097704397e-01:3.1071153930551060e-01:8.4245250083023859e-02:3.1503491946924594e-01:9.5039008501678646e-01:4.1383530009917902e-01:1.3883770968679612e+00:4.7807761015313421e-01:2.0268284480923691e+00:3.0137764721899629e-01:2.4401448134106327e+00:3.8306994984841819e-01:3.0780226304889524e+00:4.6464583044269919e-01:3.7948097176504079e+00 + CVs 20 + -5.6275793741077396e-01 1.0390396887671113e-01 -9.0251071559266927e-01 + -9.7497553212479060e-01 7.0334359033985439e-02 -1.4918493586257560e+00 + -1.3553943003130491e+00 -4.6113416195793233e-03 -1.9652103745154883e+00 + -1.7560220276779832e+00 -7.8723187056947364e-02 -2.4016287347506426e+00 + -2.1746130273965081e+00 -1.4175246991800772e-01 -2.8009973016689553e+00 + -2.6120555284535740e+00 -1.8961533697482180e-01 -3.1676179878486703e+00 + -3.0725087644043270e+00 -2.2940636145399984e-01 -3.5013676701464957e+00 + -3.5597836914031795e+00 -2.7930019613910795e-01 -3.7980433884141851e+00 + -4.0678631738173969e+00 -3.6228142214664016e-01 -4.0584680286117782e+00 + -4.5748220056776638e+00 -4.9886957736735882e-01 -4.2838694617269741e+00 + -5.0491727553032879e+00 -6.9635531998815292e-01 -4.4688733431749004e+00 + -5.4681528683361540e+00 -9.4796846778071964e-01 -4.6091821909406043e+00 + -5.8285030918625154e+00 -1.2435275342238368e+00 -4.7134028969979154e+00 + -6.1406769895035680e+00 -1.5693444416435121e+00 -4.7985286276298424e+00 + -6.4227717398456718e+00 -1.9154931057479527e+00 -4.8815351129717870e+00 + -6.6844722356949724e+00 -2.2900443591179922e+00 -4.9725928914780750e+00 + -6.9335076783173717e+00 -2.7047552332583935e+00 -5.0677695141700019e+00 + -7.1623631693470635e+00 -3.1674162208410657e+00 -5.1509759582215722e+00 + -7.3053470346909535e+00 -3.6800701074577322e+00 -5.1804933135118070e+00 + id 12939 + loc 3.6524549126625061e-01 3.9815816283226013e-01 400 + blend 0.0000000000000000e+00 + interp 4.6777147291009324e-01:2.9238275457898744e-01:7.1261826182038390e-01:4.6776679519536418e-01:1.0149655716623451e+00:3.9319166057610000e-01:1.7759244123614455e+00:3.3896803782533935e-01:2.3612356893726782e+00:4.0571006406583338e-01:3.2650408276755174e+00:3.2169743637453957e-01:3.9984033186176036e+00 + CVs 20 + -1.7412022752193757e-01 2.2445936382174045e-01 2.8833112462681931e-01 + -3.6139234259939479e-01 4.2025699689645368e-01 5.4553158185641792e-01 + -5.7550646223458479e-01 5.8669171266402942e-01 7.8205748126572938e-01 + -8.1963045558314040e-01 7.1914428015498943e-01 9.9837114329169063e-01 + -1.0866741455954294e+00 8.1458567252513336e-01 1.1868568676738860e+00 + -1.3678652587812912e+00 8.7578301187605112e-01 1.3437904886817429e+00 + -1.6536425136474837e+00 9.0949030484025239e-01 1.4687804628454959e+00 + -1.9362576683665162e+00 9.2383205268272772e-01 1.5634309660690417e+00 + -2.2150841772209606e+00 9.2626447468286033e-01 1.6304311105449227e+00 + -2.4957524457661533e+00 9.2213791810398937e-01 1.6712797200818943e+00 + -2.7915072695899661e+00 9.1302517159279351e-01 1.6839235278042697e+00 + -3.1296919694193930e+00 8.9311692176036472e-01 1.6651964756236166e+00 + -3.5355783477263523e+00 8.5062010858088399e-01 1.6200161263569157e+00 + -4.0091141751654220e+00 7.6898802896022267e-01 1.5703060579793482e+00 + -4.5374418247566650e+00 6.1524884986399142e-01 1.5526429851267149e+00 + -5.1148950312509296e+00 3.4831310646472824e-01 1.6111505872804444e+00 + -5.7250454602503460e+00 -3.8853171471886938e-02 1.7900101898162246e+00 + -6.3292125420004783e+00 -4.9108712360872309e-01 2.0917466162032312e+00 + -6.9055803457544940e+00 -8.4235418473832335e-01 2.3116012472845884e+00 + id 12940 + loc 4.3203741312026978e-01 2.6045152544975281e-01 411 + blend 0.0000000000000000e+00 + interp 5.2042651912880256e-01:5.2042131486361132e-01:1.7893558911098484e-01:2.6789725933420466e-01:9.9761994063669945e-01:3.1016079745622255e-01:1.9435398529446568e+00:3.2781057930180224e-01:2.4097176054565326e+00:2.7001193730028972e-01:3.3718909633904524e+00 + CVs 20 + -1.1821063511611790e-01 1.9320146625142537e-01 -5.7342510954767101e-01 + -2.2891614431822788e-01 3.0998065765932692e-01 -9.9076966027789870e-01 + -3.1957099473991546e-01 3.9787824780343523e-01 -1.3836633159684546e+00 + -3.7305893203891993e-01 4.7861784746520863e-01 -1.8063205340168014e+00 + -3.7861465830389651e-01 5.4587143001272209e-01 -2.2555818251256592e+00 + -3.2919967819753243e-01 5.9422545282100581e-01 -2.7270868131747545e+00 + -2.2435622772002534e-01 6.1989891569698552e-01 -3.2183061861384532e+00 + -6.7845039223655423e-02 6.1554739530307401e-01 -3.7285059741914583e+00 + 1.3391668190977435e-01 5.6562715944277375e-01 -4.2579991925159826e+00 + 3.6650571373922469e-01 4.4721016405376024e-01 -4.8055942383039945e+00 + 6.0459259723850822e-01 2.3511610909917802e-01 -5.3575560673113660e+00 + 8.2471845268330313e-01 -8.3785144627834818e-02 -5.8832806386661725e+00 + 1.0169810999333955e+00 -5.0339466654040432e-01 -6.3563819527025718e+00 + 1.1766914206865451e+00 -1.0118747420705989e+00 -6.7672811815035701e+00 + 1.2966989591188325e+00 -1.5989887086883603e+00 -7.1096097604715798e+00 + 1.3758049268906491e+00 -2.2452962536085055e+00 -7.3669210512460355e+00 + 1.4236179526944910e+00 -2.9243827661045021e+00 -7.5236012278796327e+00 + 1.4414319644586797e+00 -3.6213399030868834e+00 -7.5865784355035775e+00 + 1.4439385638597060e+00 -4.2449241199574317e+00 -7.6867546065903252e+00 + id 12941 + loc 2.2234547138214111e-01 9.1390091180801392e-01 415 + blend 0.0000000000000000e+00 + interp 4.2923242537514605e-01:2.3591932164920093e-01:2.5571828018159637e-01:2.1103534473485197e-01:1.1563698445707544e+00:1.7609806319403751e-01:1.8910395884639017e+00:3.5720845143245722e-01:2.1876204379518915e+00:3.2236001427449740e-01:2.9884724027649314e+00:4.2922813305089230e-01:3.7605873831140362e+00 + CVs 20 + 5.3501516342419642e-01 2.1309465921083481e-01 5.8361703288579009e-02 + 9.3094821600290678e-01 3.1031790381118629e-01 4.5195344173970975e-02 + 1.2973667553019990e+00 3.7163860186344227e-01 3.8945598457110320e-02 + 1.6681053380655626e+00 4.2376229648507097e-01 6.5520965045444801e-02 + 2.0391675309363277e+00 4.6563926422797086e-01 1.2618809637811090e-01 + 2.4076156820743710e+00 4.9722766363184934e-01 2.2407426307679756e-01 + 2.7689649695138279e+00 5.1853335232538567e-01 3.6189078279025866e-01 + 3.1183088423545415e+00 5.2925146189899075e-01 5.3969085806604733e-01 + 3.4529191462752205e+00 5.2840980257198189e-01 7.5630166537949717e-01 + 3.7696159848341484e+00 5.1421301066701552e-01 1.0090592721870202e+00 + 4.0594532646458532e+00 4.8525120244696929e-01 1.2844809907882668e+00 + 4.3156957052357932e+00 4.4009468070211089e-01 1.5515346853081606e+00 + 4.5496324423822490e+00 3.7305160643610957e-01 1.7787965366532248e+00 + 4.7879186142457719e+00 2.7156497928116963e-01 1.9559212965863548e+00 + 5.0452932504473074e+00 1.2465815420086113e-01 2.0810385573528656e+00 + 5.3055982986100814e+00 -6.1983700194849778e-02 2.1428117201450574e+00 + 5.5408685642982158e+00 -2.6717634779639710e-01 2.1276807136886027e+00 + 5.7342958063485039e+00 -4.6747372816638322e-01 2.0352468891584317e+00 + 5.9733785976477076e+00 -7.1308788948545176e-01 1.9496819028279631e+00 + id 12942 + loc 7.8160017728805542e-01 4.9079671502113342e-01 393 + blend 0.0000000000000000e+00 + interp 4.6199811440592747e-01:4.0303338619614149e-01:1.6233051002283938e-01:4.0310165137086917e-01:1.0042402732283098e+00:4.5134321768586377e-01:1.7940314605893624e+00:4.4464000524712849e-01:2.0720751493028216e+00:4.6199349442478344e-01:2.6761370446879766e+00:2.7780163564162758e-01:3.2044333524178166e+00 + CVs 20 + 3.0095759615434065e-01 3.6913604523163968e-01 1.6764554835411694e-01 + 6.0724187907994964e-01 7.6463426084902153e-01 3.0904056897425536e-01 + 8.8123198020116400e-01 1.1914635743957933e+00 4.5820049721864953e-01 + 1.1103417053785301e+00 1.6250617033142829e+00 6.4751690327611278e-01 + 1.2890690865003573e+00 2.0347684534942538e+00 8.9996443999685560e-01 + 1.4047979407851596e+00 2.3979295114360486e+00 1.2126847475943472e+00 + 1.4481347085396292e+00 2.7076147025183923e+00 1.5627339092861767e+00 + 1.4216433895253271e+00 2.9724345540034536e+00 1.9313881221268088e+00 + 1.3387113832666011e+00 3.2077993831405101e+00 2.3205896558926531e+00 + 1.2191897996982972e+00 3.4217606956706716e+00 2.7494656392578403e+00 + 1.0887240656520649e+00 3.6083463141232119e+00 3.2432901558421081e+00 + 9.8227515095666518e-01 3.7505786618240173e+00 3.8227714950199188e+00 + 9.3330801382740147e-01 3.8143930537145732e+00 4.5030774882467473e+00 + 9.6100066180749399e-01 3.7373889689494133e+00 5.3041357671906644e+00 + 1.0701063939088986e+00 3.4063455101519833e+00 6.2199911995293453e+00 + 1.2564624903045016e+00 2.6952208485326046e+00 7.1119808650584853e+00 + 1.5443550119942298e+00 1.6459103614725759e+00 7.7405387983665888e+00 + 1.9570563025236618e+00 5.9792359714450960e-01 7.9819141947430223e+00 + 2.2417066116299988e+00 2.8099632048494616e-01 7.9450811006780571e+00 + id 12943 + loc 1.4282165095210075e-02 6.6131919622421265e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4117555956412663e-01:3.9359427167850874e-01:1.5865619687547849e-01:2.4151194988369692e-01:8.6352561568753561e-01:2.8438375441377595e-01:1.9896197059675456e+00:4.4117114780853101e-01:2.2756996406697327e+00:2.9552734506367290e-01:3.0511712499520902e+00:3.5744963750946157e-01:3.8310963696384945e+00 + CVs 20 + 9.8859756289516099e-02 2.3079051529207295e-01 -8.5846122701055572e-02 + 2.1104165175959239e-01 4.6082274688510372e-01 -1.8546831930751928e-01 + 3.3375123529790029e-01 6.8362132143893062e-01 -2.7596749088212202e-01 + 4.6898276666153788e-01 9.0081224562512041e-01 -3.5173072574669800e-01 + 6.2010420911837683e-01 1.1157663685077144e+00 -4.2155019025591700e-01 + 7.8547622599098144e-01 1.3344891872883369e+00 -4.9436502065518539e-01 + 9.5483135459128321e-01 1.5686876198292128e+00 -5.8039655770547416e-01 + 1.1115294446000834e+00 1.8331382596071806e+00 -6.9401631173398270e-01 + 1.2398612661324100e+00 2.1363543489762522e+00 -8.6643939502458545e-01 + 1.3197949159299966e+00 2.4398718502405510e+00 -1.1444569109528728e+00 + 1.3360243856449383e+00 2.6485568436682332e+00 -1.5083361880056567e+00 + 1.3031076647439246e+00 2.7264940949556813e+00 -1.8679403403826420e+00 + 1.2424742848488532e+00 2.7138861704804951e+00 -2.1681110035857030e+00 + 1.1588045207887188e+00 2.6597929943787575e+00 -2.3953196118477234e+00 + 1.0341433276331240e+00 2.5983866452446662e+00 -2.5486927867193527e+00 + 8.0785741917576093e-01 2.5463833825690152e+00 -2.6413280737575149e+00 + 3.6569998379826507e-01 2.4624934268039151e+00 -2.7330427632787995e+00 + -1.6926032031030624e-01 2.2136982123910838e+00 -2.9519875713118893e+00 + -1.6873927625252527e-02 2.1606478892129823e+00 -3.0294307457698433e+00 + id 12944 + loc 2.6711750030517578e-01 1.0702168941497803e-01 406 + blend 0.0000000000000000e+00 + interp 4.5654406576200923e-01:2.7456483980824548e-01:4.1782463221481492e-02:2.8239269462250949e-01:1.0115942335095769e+00:4.0621298149154172e-01:1.8729355008304394e+00:2.4639364212576118e-01:2.8446770842116029e+00:4.5653950032135165e-01:3.5399243016070754e+00 + CVs 20 + 1.0025899803155905e-01 1.1119437118498299e-01 -8.3722706683560341e-02 + 1.8957333809189392e-01 1.9202541536484977e-01 -1.4846277616688325e-01 + 2.6698111920963535e-01 2.4751227822241867e-01 -2.2262072384144582e-01 + 3.3446187967118091e-01 2.8444368371510176e-01 -3.1388685229604751e-01 + 3.8939009271100183e-01 3.0128984397248204e-01 -4.1830605362924977e-01 + 4.2987545682914491e-01 2.9777008813542399e-01 -5.3121727079722814e-01 + 4.5572418354288874e-01 2.7572579741917486e-01 -6.4860213615715745e-01 + 4.6863628581381384e-01 2.3880865934699522e-01 -7.6812131099917191e-01 + 4.6983823886629539e-01 1.9014385384249138e-01 -8.8574695125910097e-01 + 4.5826746619057745e-01 1.3223412835258785e-01 -9.9203357096998568e-01 + 4.3449153135968605e-01 7.0162883660681852e-02 -1.0790713075576339e+00 + 4.0513004619017917e-01 1.1066695711233143e-02 -1.1520709915845888e+00 + 3.7830960365823135e-01 -4.0345638948927620e-02 -1.2231242586983599e+00 + 3.5809827521063231e-01 -8.1203561235456467e-02 -1.2934201506540475e+00 + 3.4569069526955382e-01 -1.0749186972270119e-01 -1.3547640295375116e+00 + 3.4212385312686711e-01 -1.1569419975067918e-01 -1.4050399604340740e+00 + 3.4833540734852897e-01 -1.0634920404138770e-01 -1.4535439954431699e+00 + 3.6408216068970867e-01 -8.5426041073155656e-02 -1.5141981039554269e+00 + 3.8137250245557208e-01 -9.4843150324905978e-02 -1.6724802604122493e+00 + id 12945 + loc 2.3160459101200104e-01 4.0407299995422363e-01 399 + blend 0.0000000000000000e+00 + interp 4.3995828467830400e-01:4.3695791626270231e-01:6.7481154950161237e-01:3.1654316441941682e-01:1.0292909240040324e+00:4.3995388509545724e-01:1.9444407212738171e+00:3.9215979841381093e-01:2.3274439089329433e+00:4.0755613785990907e-01:3.2014764189028559e+00:2.7491792953929262e-01:3.8763412034888827e+00 + CVs 20 + -1.5974912892438786e-01 3.7805850018197290e-01 1.2057113012382700e-01 + -3.6723454936321481e-01 7.5657263039981748e-01 2.4127136098882282e-01 + -6.2209067323655542e-01 1.1193364924768041e+00 3.4036183388669500e-01 + -9.1258186991560697e-01 1.4617663929727600e+00 4.2262430142949015e-01 + -1.2258005960394915e+00 1.7861680857333433e+00 5.1074163947728191e-01 + -1.5545768363679777e+00 2.0880619962039333e+00 6.2887948790722936e-01 + -1.8981772489875997e+00 2.3503324168974116e+00 7.9628208398173994e-01 + -2.2582832420011680e+00 2.5403586769617736e+00 1.0262662058546210e+00 + -2.6288403327908370e+00 2.6103350691115446e+00 1.3184919063418290e+00 + -2.9842376612819264e+00 2.5097983798648937e+00 1.6458471851597194e+00 + -3.2717835677610392e+00 2.2313003031198577e+00 1.9494769262048126e+00 + -3.4568120007868877e+00 1.8704898818000955e+00 2.1790100224162625e+00 + -3.5741125930708737e+00 1.5361103209288696e+00 2.3490230868341677e+00 + -3.6786137026735535e+00 1.2780341879256212e+00 2.4917432341186134e+00 + -3.8125242556005632e+00 1.1245625279842208e+00 2.6134746991500934e+00 + -3.9891045366264839e+00 1.0756928855029462e+00 2.6823526587974085e+00 + -4.1850792895022453e+00 1.1168091037632506e+00 2.6478771122146298e+00 + -4.3515834912850071e+00 1.1822752432193688e+00 2.5555719943374036e+00 + -4.5792094783958879e+00 1.1104218878713941e+00 2.6021051019114156e+00 + id 12946 + loc 2.9854202270507813e-01 7.9764693975448608e-02 395 + blend 0.0000000000000000e+00 + interp 4.6361648310096470e-01:3.1416047332575558e-01:1.3390372731148081e-01:4.5960450623868793e-01:8.7903389149950362e-01:4.4534390603866558e-01:1.1241545715121446e+00:4.6361184693613372e-01:1.9199981492485496e+00:3.4324592855614511e-01:2.1801768145935849e+00:3.8158181279531667e-01:3.0377479546981103e+00:4.4041397549328637e-01:3.6698339958063557e+00 + CVs 20 + -3.0604373428378479e-01 1.1283266488698809e-01 -7.7753455621526829e-02 + -5.7327676179753617e-01 2.2962553824931600e-01 -1.5880982041849795e-01 + -8.2479931264193840e-01 3.5364722389875197e-01 -2.4627709410405266e-01 + -1.0794928598631000e+00 4.9004092829154744e-01 -3.4523620538829186e-01 + -1.3355909207051342e+00 6.3743379491279473e-01 -4.6082239394419888e-01 + -1.5911517702966911e+00 7.9202864584437260e-01 -5.9506209071854710e-01 + -1.8502092212526078e+00 9.5165080380994549e-01 -7.4885885761981941e-01 + -2.1225460134766001e+00 1.1143202912777457e+00 -9.2561848491551135e-01 + -2.4124966318417416e+00 1.2708735400802915e+00 -1.1311328410287518e+00 + -2.7131272318555006e+00 1.4020630434741257e+00 -1.3656492930258497e+00 + -3.0202156518505916e+00 1.4831329262487767e+00 -1.6178835790473745e+00 + -3.3413427623825149e+00 1.4889682395476180e+00 -1.8707137081561522e+00 + -3.6802927970454546e+00 1.4038359554064117e+00 -2.1088074620872224e+00 + -4.0236025174534369e+00 1.2305735740340493e+00 -2.3194106442519957e+00 + -4.3521950872810988e+00 9.8571897431359057e-01 -2.4909847631601219e+00 + -4.6568577181566511e+00 6.8434092543576330e-01 -2.6171861908960068e+00 + -4.9315875444890747e+00 3.3442185517853940e-01 -2.6968971216077797e+00 + -5.1640249310995827e+00 -5.0752131163208869e-02 -2.7308660070155253e+00 + -5.3451913696334241e+00 -4.2595141268313919e-01 -2.7251925020136634e+00 + id 12947 + loc 9.3127292394638062e-01 6.8069159984588623e-01 409 + blend 0.0000000000000000e+00 + interp 4.7416505821046184e-01:3.5251045018750993e-01:1.5845994185655321e-01:2.7562941345635517e-01:9.4917347879617586e-01:3.8628205994529724e-01:1.4328040500093171e+00:4.1397847164107454e-01:1.9995793640515713e+00:4.7416031655987978e-01:2.8386601836060397e+00:2.8332942377873183e-01:3.1349305698280894e+00 + CVs 20 + 4.7129479051730322e-01 9.7513410274298745e-02 -2.7145956828980344e-01 + 8.6741411522625200e-01 1.4975412671774602e-01 -5.2107199845916197e-01 + 1.2437526954680331e+00 2.0047034850865897e-01 -7.5420384234421967e-01 + 1.6128849217034014e+00 2.6095297716242294e-01 -9.7383943294870390e-01 + 1.9713069325878747e+00 3.2768841279109018e-01 -1.1823811121104844e+00 + 2.3179317734350171e+00 3.9698369228055508e-01 -1.3830574116078536e+00 + 2.6553657284731127e+00 4.6426011445937365e-01 -1.5755010115999650e+00 + 2.9900904874452752e+00 5.2203287520273567e-01 -1.7566373091544623e+00 + 3.3265945202655569e+00 5.5990512974066364e-01 -1.9236871634462509e+00 + 3.6635339506413427e+00 5.6640380209864505e-01 -2.0764332002970480e+00 + 4.0019954595272367e+00 5.2881921758516026e-01 -2.2191302141265408e+00 + 4.3475838855684659e+00 4.3339924274289321e-01 -2.3575037898300772e+00 + 4.7005775170896245e+00 2.7228394620393903e-01 -2.4938334443068904e+00 + 5.0553059824012738e+00 4.6911838790154814e-02 -2.6301234290716917e+00 + 5.4043828025411145e+00 -2.4245603057045306e-01 -2.7707613692459363e+00 + 5.7374806714068214e+00 -6.0258447636447254e-01 -2.9169473088982576e+00 + 6.0399638781362643e+00 -1.0336900607874435e+00 -3.0615403883077930e+00 + 6.3019750980173050e+00 -1.5075596510414591e+00 -3.1956469133247771e+00 + 6.5594045673123063e+00 -1.9061702835800078e+00 -3.3191288519792836e+00 + id 12948 + loc 3.7368786334991455e-01 5.8412927389144897e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6845153851811744e-01:2.9663178608285246e-01:2.4606222086948371e-01:3.4775864481003455e-01:9.8876911742025320e-01:3.7498260760962182e-01:1.4486504040038859e+00:4.1841130120404496e-01:1.9934629601454865e+00:3.4267445441262023e-01:2.7216756512240932e+00:4.6844685400273228e-01:3.0157031390733637e+00:3.5757645270648064e-01:3.8896403653565623e+00 + CVs 20 + 2.1292701364519007e-01 3.4523574456303652e-01 -3.3763786367202731e-02 + 4.2846791075045454e-01 6.6097043445511927e-01 -1.1823644765453140e-01 + 6.5070698914733838e-01 9.6450076201950175e-01 -2.3396292665832757e-01 + 8.8011488389701331e-01 1.2404744288265153e+00 -3.8412700690813817e-01 + 1.1139224858479342e+00 1.4594161970859765e+00 -5.7934875234103078e-01 + 1.3410674876629363e+00 1.5859514187921420e+00 -8.2451903856182196e-01 + 1.5405557577643261e+00 1.5956949436853447e+00 -1.1133075422441723e+00 + 1.6859669174358851e+00 1.4880056509087076e+00 -1.4315906443347473e+00 + 1.7568717046628797e+00 1.2728579312993760e+00 -1.7561050258040698e+00 + 1.7463107922206362e+00 9.5799188628327148e-01 -2.0462928033450676e+00 + 1.6691227157021835e+00 5.6053709169755039e-01 -2.2525373791476770e+00 + 1.5771803837517919e+00 1.2448565941095602e-01 -2.3723134645424464e+00 + 1.5167835175853615e+00 -3.0328453358767082e-01 -2.5059703016594450e+00 + 1.4843593938506014e+00 -6.5973056470410496e-01 -2.8338036816559393e+00 + 1.4887324044736305e+00 -7.1466395917204251e-01 -3.5266038930652770e+00 + 1.6657881567173511e+00 -4.7499644616898262e-02 -4.3346471226014316e+00 + 2.1931482469527777e+00 1.3322012430256271e+00 -4.3097804344743125e+00 + 2.7146196379313041e+00 2.1650746302902526e+00 -3.0490794671658299e+00 + 2.8698339845461938e+00 2.3980319216122918e+00 -3.0451399381982491e+00 + id 12949 + loc 2.5132426992058754e-02 2.1240903064608574e-02 414 + blend 0.0000000000000000e+00 + interp 7.2123586508444602e+00:3.7739003335746096e-01:6.3884685891795001e-01:2.6493825848128083e-01:1.4959903530269401e+00:6.5539710150153863e-01:1.8374994294400195e+00:6.8725681898706767e+00:1.9235245578956750e+00:7.2123486508444605e+00:1.9412183173794006e+00:6.3096776385943194e+00:3.9429004586543797e+00:5.5526629947501078e+00:3.9531713983439358e+00:4.1227573521976957e-01:3.9957393663806116e+00 + CVs 20 + -1.7384662523126998e-01 2.5809186589770156e-01 -8.6341411383812716e-01 + -3.6102050414549380e-01 3.7799973037365753e-01 -1.4009562263198050e+00 + -5.5042272226271194e-01 4.4719397567591901e-01 -1.8684914595604438e+00 + -7.3230411564531983e-01 5.0928764173292151e-01 -2.3809258665902409e+00 + -8.9466899141581413e-01 5.5191758771452182e-01 -2.9312331268948504e+00 + -1.0233991860893208e+00 5.6389957752694098e-01 -3.5076605242660914e+00 + -1.1052372188737629e+00 5.3825055454560222e-01 -4.0925750015070781e+00 + -1.1337611905715650e+00 4.7307027963407067e-01 -4.6643959732781166e+00 + -1.1113541080509575e+00 3.7128744292501403e-01 -5.2027662204501670e+00 + -1.0462080087721035e+00 2.4057241337907931e-01 -5.6920587498136204e+00 + -9.4761365796277264e-01 9.3118716513964417e-02 -6.1231284973083842e+00 + -8.1944426859619246e-01 -5.7635499939523660e-02 -6.4953960949956855e+00 + -6.5716903991093678e-01 -2.0876107409537537e-01 -6.8193152075069747e+00 + -4.6893394371098063e-01 -3.7851867092643010e-01 -7.1129891692810645e+00 + -2.6625698107704809e-01 -5.8240565624749685e-01 -7.3857492148949326e+00 + -4.4933601829958425e-02 -8.2056062608012748e-01 -7.6391721158002559e+00 + 1.9913207437077851e-01 -1.0932567664599582e+00 -7.8755082830196637e+00 + 4.4945954714337721e-01 -1.4002185005377641e+00 -8.0891575754427318e+00 + 5.9337879956935302e-01 -1.6386072712059023e+00 -8.1451148420599306e+00 + id 12950 + loc 3.7606012821197510e-01 7.7385872602462769e-01 1081 + blend 0.0000000000000000e+00 + interp 3.0594606957871466e+00:3.0594506957871466e+00:1.7747390030576287e+00:2.6851397421700405e+00:1.7790165549742309e+00:1.7353258294414418e+00:1.8409225955424020e+00:3.2378717943875790e-01:1.9884757384453087e+00:3.1130302243679142e-01:2.5309239634097711e+00:3.1456286843707681e-01:3.2617441125839877e+00:8.4573485041753393e-01:3.7260876269618173e+00:1.5118950402287947e+00:3.7416675573016018e+00 + CVs 20 + -1.5389522370642811e-02 4.9812939222051156e-01 6.3309674934956106e-01 + -2.7032512507111889e-02 8.5176380526185724e-01 9.9903808127773841e-01 + -3.4525294656881672e-02 1.1569730629678088e+00 1.2667222927014734e+00 + -4.0386588935896334e-02 1.4545645098947959e+00 1.5119865498609895e+00 + -3.8518816026633373e-02 1.7378426424687596e+00 1.7381868876002842e+00 + -3.0555949755617873e-02 2.0010638104590028e+00 1.9532587145035061e+00 + -2.3135970426325869e-02 2.2509162570583019e+00 2.1681857175140302e+00 + -1.4048085686192757e-02 2.5282955783988079e+00 2.4099646596926698e+00 + 7.8247758740509377e-02 2.9595347643381409e+00 2.7320075186010437e+00 + 5.7061128804005135e-01 3.6154654867855927e+00 2.9906691457589663e+00 + 1.2670467609630101e+00 3.9886241344847706e+00 2.8542571522577713e+00 + 1.6927741912374810e+00 4.0411354093230445e+00 2.5868609940737497e+00 + 1.9148446194898234e+00 3.9658254572314569e+00 2.3263034499468245e+00 + 2.0143881843176850e+00 3.8120678143339743e+00 2.0688064615889799e+00 + 2.0360081984583966e+00 3.5763072293758986e+00 1.7658521120517778e+00 + 2.0136102854222537e+00 3.2113227078101754e+00 1.3652611546201183e+00 + 1.9616887011462680e+00 2.6686291913127387e+00 9.9773901498377737e-01 + 1.8767923861854467e+00 2.0514259368520076e+00 9.1464459901335982e-01 + 1.7651274635696317e+00 1.5144514040723926e+00 1.1708394662719037e+00 + id 12951 + loc 2.0638903975486755e-01 9.1549825668334961e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9929440214393922e-01:3.8669940413964005e-01:1.8866571016682787e-01:3.3398666664735227e-01:8.5377256465928852e-01:2.8730054505606273e-01:1.3178418058938772e+00:4.9928940919991782e-01:2.2417984260806341e+00:3.8840603484560299e-01:2.9802342365864884e+00:3.2879955291956564e-01:3.9223458626876448e+00 + CVs 20 + -1.2951138514436994e-01 2.1728442289198466e-01 2.1157169748441568e-01 + -2.0855162019716275e-01 3.5458132789507779e-01 2.8254389982783484e-01 + -2.7448032844875087e-01 4.5985549007389714e-01 3.0065429221081119e-01 + -3.5006526626884155e-01 5.6320174630118236e-01 3.2024394213993346e-01 + -4.4078594921801162e-01 6.6558595844251389e-01 3.3922632478120762e-01 + -5.5345726877202450e-01 7.6615699443509122e-01 3.5552193314538849e-01 + -6.9473420579409251e-01 8.6200394310946249e-01 3.6715238266370021e-01 + -8.6964063927488655e-01 9.4911612964563929e-01 3.7296512954530697e-01 + -1.0811940982801624e+00 1.0234352404882434e+00 3.7343778624971868e-01 + -1.3305293423324918e+00 1.0815680103206720e+00 3.7059940193357693e-01 + -1.6171592888331525e+00 1.1209330085882550e+00 3.6783209982480997e-01 + -1.9386857341181267e+00 1.1385130852693415e+00 3.6870028230536811e-01 + -2.2882602332622217e+00 1.1299431645879876e+00 3.7476685752994254e-01 + -2.6521561967519927e+00 1.0948889085658993e+00 3.8631403816674648e-01 + -3.0154578501710199e+00 1.0449080071552854e+00 4.0634087751186571e-01 + -3.3708081276514452e+00 9.9807982995698241e-01 4.4132832512223613e-01 + -3.7142997350624141e+00 9.6679724791987498e-01 4.9655676070529392e-01 + -4.0373476585289021e+00 9.5609004973635825e-01 5.7101920837140441e-01 + -4.3533939271615143e+00 9.5346396068081674e-01 6.5809260278840220e-01 + id 12952 + loc 7.8633224964141846e-01 3.1756684184074402e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4497228609475183e-01:2.7648267140293808e-01:2.3019961820477386e-02:3.4365637134160648e-01:6.5199430295441463e-01:3.4496883637189091e-01:1.3422655412705837e+00:3.4120282941880348e-01:2.0872552347940103e+00:2.8193945709595919e-01:2.9097677025142521e+00:3.2708079434650789e-01:3.5923310654177305e+00 + CVs 20 + -1.2121578802272297e-01 3.3170525882973323e-01 1.4711047825221976e-01 + -2.5394131519320623e-01 6.6140505628762525e-01 2.8472661283215805e-01 + -4.0444478868502437e-01 9.8161234115837548e-01 4.0204633577691057e-01 + -5.7382664682872697e-01 1.2826731694231444e+00 4.9292344541407529e-01 + -7.5895798296884287e-01 1.5583732742814107e+00 5.6058607394251991e-01 + -9.5963766651981586e-01 1.8061589008818255e+00 6.0995718273220967e-01 + -1.1806124315789419e+00 2.0267200734409605e+00 6.4881571815145445e-01 + -1.4235109666494827e+00 2.2131748941685516e+00 6.8938724398378892e-01 + -1.6796254222295821e+00 2.3573795279641407e+00 7.4183133181655825e-01 + -1.9441871109300328e+00 2.4751609694409926e+00 8.1033505872692446e-01 + -2.2511433559032126e+00 2.6018112645798417e+00 9.1818655903760915e-01 + -2.6153416074487881e+00 2.6822275022930295e+00 1.1324875899459252e+00 + -2.9006580432752695e+00 2.6023660525145131e+00 1.4226162511112013e+00 + -3.0528194036380247e+00 2.3874111855677604e+00 1.7235543080944917e+00 + -3.0806112761730722e+00 2.0820060416567929e+00 2.0211700241572950e+00 + -2.9635438326638153e+00 1.7489824033584420e+00 2.2817288013135961e+00 + -2.7042701163387077e+00 1.4579753748319457e+00 2.4740059767922808e+00 + -2.3494556488637421e+00 1.2135779323720610e+00 2.6017135043640751e+00 + -2.0947805980667393e+00 1.0237346678000263e+00 2.6349401723887267e+00 + id 12953 + loc 8.9709311723709106e-01 3.8336271047592163e-01 380 + blend 0.0000000000000000e+00 + interp 4.9177277006812448e-01:3.8876512032184152e-01:9.5114051033839964e-04:2.8954882776833796e-01:4.4742109983977962e-01:4.9176785234042381e-01:1.2620470892329934e+00:3.9114829446609006e-01:2.0490813293368206e+00:2.9995632380522080e-01:2.9993701939005462e+00:2.9205475838330319e-01:3.5706106742670332e+00 + CVs 20 + 5.8936497977879887e-01 2.6801393693135012e-01 6.8641742959305263e-01 + 1.0726021109679720e+00 4.5581263829502738e-01 1.1728486954040371e+00 + 1.5108373178698313e+00 6.2677289115697965e-01 1.6191832664205441e+00 + 1.9254661212827600e+00 8.0645027677365810e-01 2.0962304300410910e+00 + 2.3032018136253942e+00 9.7926173924170345e-01 2.6044112072107186e+00 + 2.6385689756698136e+00 1.1205980810543736e+00 3.1424409282277064e+00 + 2.9337476875789004e+00 1.2005273008246284e+00 3.7056160997256615e+00 + 3.1907922719841570e+00 1.1911487289082561e+00 4.2777702055209028e+00 + 3.4102196673718441e+00 1.0754847383655928e+00 4.8303785220560691e+00 + 3.5957680589758101e+00 8.5187523460420067e-01 5.3328653758284901e+00 + 3.7560614079213193e+00 5.3406356164276092e-01 5.7598865376461550e+00 + 3.8982115054825126e+00 1.4948521661756908e-01 6.0914106070463374e+00 + 4.0147725014135904e+00 -2.7091712801984613e-01 6.3109399636354091e+00 + 4.0807330489543334e+00 -7.1095531662709410e-01 6.3983540062699644e+00 + 4.0923839581607950e+00 -1.1797238004317361e+00 6.3488091739833283e+00 + 4.0717868814712341e+00 -1.7014764225060111e+00 6.2125902733597176e+00 + 4.0413888035621328e+00 -2.2701968768159801e+00 6.0809182475753083e+00 + 4.0298358003932737e+00 -2.8275968122709654e+00 6.0115816196776644e+00 + 4.2041255731161016e+00 -3.2114116358403249e+00 5.9493478877585435e+00 + id 12954 + loc 1.9332330673933029e-02 1.2865385413169861e-01 382 + blend 0.0000000000000000e+00 + interp 4.5866577553705784e-01:3.2370969858153897e-01:1.2853972252482848e-01:2.6765077004736060e-01:9.8069136248204947e-01:2.9495684869644573e-01:1.6892890191413175e+00:3.1930916309779528e-01:2.5607707731530702e+00:3.7554942246281076e-01:3.1397959176077253e+00:4.5866118887930252e-01:3.9372624084869949e+00 + CVs 20 + -4.7140063821190725e-01 1.5728756845730937e-01 -7.5344090433931010e-01 + -8.6647965115984382e-01 1.7996695726950435e-01 -1.3248147877888421e+00 + -1.2583629663301996e+00 1.4820708447183939e-01 -1.8410276552792262e+00 + -1.6776435137204408e+00 8.5317303915181220e-02 -2.3481883095184419e+00 + -2.1133270100929282e+00 -1.0007784795597940e-02 -2.8325464688637894e+00 + -2.5563970387575905e+00 -1.3642544093927467e-01 -3.2814341818539634e+00 + -2.9962675277498061e+00 -2.9289182510673295e-01 -3.6843794838207340e+00 + -3.4182709415590762e+00 -4.8138686478526793e-01 -4.0345344667690979e+00 + -3.8124603807461361e+00 -7.0209823147826289e-01 -4.3265152775351403e+00 + -4.1805069630365672e+00 -9.4833260839821709e-01 -4.5532006861331533e+00 + -4.5284502928381860e+00 -1.2092776670061549e+00 -4.7131088675043733e+00 + -4.8609331097151003e+00 -1.4746678683983858e+00 -4.8174579803968296e+00 + -5.1783346238210175e+00 -1.7354082302801772e+00 -4.8797990437036933e+00 + -5.4810995917521517e+00 -1.9838737270226807e+00 -4.9083356944211936e+00 + -5.7684714606873904e+00 -2.2137809363496608e+00 -4.9074323604838499e+00 + -6.0377952361456773e+00 -2.4243720273167551e+00 -4.8828862022283461e+00 + -6.2888869153496785e+00 -2.6228603198422347e+00 -4.8418518499879575e+00 + -6.5252715004473281e+00 -2.8205637937616777e+00 -4.7903422344331927e+00 + -6.7457711513165055e+00 -3.0195673387854445e+00 -4.7312285793981523e+00 + id 12955 + loc 9.3609976768493652e-01 3.8138025999069214e-01 415 + blend 0.0000000000000000e+00 + interp 4.3911098390904607e-01:2.9180334269900288e-01:4.1897450865576724e-03:3.5369379492965380e-01:9.4528106555731084e-01:3.3151489209324242e-01:1.8263104053092882e+00:3.3441814630648053e-01:2.3191142505516082e+00:4.3910659279920700e-01:2.9994407201431650e+00 + CVs 20 + -2.5352380714812073e-01 1.6219037635144981e-01 3.8127646248269045e-02 + -4.7126526698031340e-01 3.0570811081420146e-01 8.0323604671035526e-02 + -6.7350296300093060e-01 4.4841610759032180e-01 1.0837057188183066e-01 + -8.7703757438047969e-01 6.0149026253580395e-01 1.1399080544919221e-01 + -1.0819006585177724e+00 7.6085729498478449e-01 9.5217475422989806e-02 + -1.2858759831986826e+00 9.2173012766673157e-01 4.9811611161072800e-02 + -1.4862858850691789e+00 1.0800793567075107e+00 -2.4196133245995011e-02 + -1.6822974159125501e+00 1.2329450886190587e+00 -1.2704720749649512e-01 + -1.8733039861682745e+00 1.3775822853140445e+00 -2.5669389100549800e-01 + -2.0567158541507262e+00 1.5114142370226600e+00 -4.0937389301918470e-01 + -2.2349518037350222e+00 1.6332583650736434e+00 -5.8257127410325238e-01 + -2.4343565729815135e+00 1.7415868403784849e+00 -7.8052700241766126e-01 + -2.7038798772321817e+00 1.8247140968613782e+00 -1.0000149474193631e+00 + -3.0696521335608140e+00 1.8579304254508067e+00 -1.1961163067230380e+00 + -3.4934700177786260e+00 1.8290788729057832e+00 -1.3103412430819674e+00 + -3.9238919612763334e+00 1.7474181011105725e+00 -1.3290298370299609e+00 + -4.3379862074201876e+00 1.6233444250929296e+00 -1.2556990824441636e+00 + -4.7137409633583571e+00 1.4711441506111740e+00 -1.0893262677685525e+00 + -4.9937246728643752e+00 1.3731928506586568e+00 -9.7369531537048348e-01 + id 12956 + loc 3.6131042242050171e-01 8.4547829627990723e-01 411 + blend 0.0000000000000000e+00 + interp 4.8227745913154690e-01:2.8662368373223784e-01:5.5286424392691791e-01:4.3955689188268310e-01:1.1529824860774833e+00:2.8540840917914889e-01:1.9089529381458064e+00:4.8227263635695561e-01:2.6232142162669758e+00:2.8378106817951704e-01:3.2759359807454791e+00:3.5486983875050576e-01:3.9407347701093949e+00 + CVs 20 + 9.7985353580408141e-01 1.7914313545533589e-01 -9.6442554637323874e-02 + 1.6711944317651377e+00 2.4510850077719926e-01 -1.6969620656342788e-01 + 2.2991521858204043e+00 2.7935798929119915e-01 -2.0253419744088053e-01 + 2.9436807860864826e+00 3.0918713336597459e-01 -1.8540629732884017e-01 + 3.5850008981501893e+00 3.2310443084598217e-01 -1.1943547467362289e-01 + 4.2048366111853586e+00 3.0981823502471983e-01 -1.6773544957737307e-02 + 4.7897388790082669e+00 2.5848634903448886e-01 1.0469710676821187e-01 + 5.3319474480990472e+00 1.5911912847182275e-01 2.2723339799750755e-01 + 5.8288930701847503e+00 4.7712359857454700e-03 3.3544745795625153e-01 + 6.2792706102996707e+00 -2.0583941455483457e-01 4.1678542063746649e-01 + 6.6816956610294769e+00 -4.6924572848451107e-01 4.6177199400673752e-01 + 7.0347875291064623e+00 -7.8258421226305619e-01 4.6471575668661214e-01 + 7.3392135297970862e+00 -1.1467459882735946e+00 4.2788433787496749e-01 + 7.5974264050697498e+00 -1.5636526443893877e+00 3.6052761396659105e-01 + 7.8092050566977145e+00 -2.0298778463313933e+00 2.7026754505249134e-01 + 7.9701259446612891e+00 -2.5378623825425715e+00 1.6132546474051207e-01 + 8.0691234097794684e+00 -3.0776154218741887e+00 4.1195308038348366e-02 + 8.0930400552233142e+00 -3.6286919281045638e+00 -8.1974485616306936e-02 + 8.0454232188548129e+00 -4.1761788153049064e+00 -2.1397257786239293e-01 + id 12957 + loc 9.2449003458023071e-01 6.0377722978591919e-01 403 + blend 0.0000000000000000e+00 + interp 5.3430658948493637e-01:4.8664825578714244e-01:4.5538323755709431e-03:3.6851609353938369e-01:4.8404035253423694e-01:3.5248439110067126e-01:1.4331487323065772e+00:2.6959222461186200e-01:2.0001232148159422e+00:2.7562539974830880e-01:2.7613414752078929e+00:4.7707855847705022e-01:3.0800416850324082e+00:5.3430124641904153e-01:3.7591561605383590e+00 + CVs 20 + 3.3498609816923999e-02 9.1749569036034401e-02 -7.4205134799644711e-03 + 3.9724314183943427e-02 1.6118613435535348e-01 -2.0349412138186227e-02 + 3.0961221429318564e-02 2.2096853916211290e-01 -4.1398616911724959e-02 + 2.0870313837414431e-02 2.7297823961440082e-01 -6.6730227466013495e-02 + 1.0835464411864143e-02 3.1232462298202057e-01 -9.2503702524425357e-02 + 2.7687811987574806e-03 3.3614166694338532e-01 -1.1416709208262042e-01 + 4.1056568093800205e-04 3.4372220934341458e-01 -1.2588131705815850e-01 + 1.0075978791459855e-02 3.3640374987347466e-01 -1.2017475019779400e-01 + 4.1129163161983284e-02 3.1869511812220935e-01 -8.9117381295750267e-02 + 1.0502348626702009e-01 2.9994770105670349e-01 -2.8968394853189441e-02 + 2.1254715926524614e-01 2.9372405427893655e-01 5.4566622950174615e-02 + 3.7112237222790895e-01 3.1460877128422787e-01 1.4522502047936239e-01 + 5.8336597475561092e-01 3.7545715379660338e-01 2.1825076253070194e-01 + 8.4133466149243308e-01 4.8217091439249199e-01 2.4144393191790411e-01 + 1.1217044060891292e+00 6.2440863348926667e-01 1.8240937376164490e-01 + 1.3927093008234521e+00 7.7981871070137021e-01 2.2659955944730303e-02 + 1.6240927560570448e+00 9.3666447932124641e-01 -2.3930395421622530e-01 + 1.7848976061994557e+00 1.1023471005909748e+00 -5.9744776908545738e-01 + 1.8367537243472565e+00 1.1846584259674144e+00 -6.5010002171940395e-01 + id 12958 + loc 8.9200109243392944e-01 9.6463251113891602e-01 264 + blend 0.0000000000000000e+00 + interp 3.4103160358818163e-01:3.4102819327214579e-01:8.6632145935219718e-01:3.1469062546196508e-01:1.8031601520699581e+00:1.6886300178483715e-01:2.3978540424051955e+00:2.8525334618956205e-01:3.8337811744185659e+00 + CVs 20 + -7.2950775811660418e-01 3.8691047070791135e-01 -2.1168037834947445e-01 + -1.2516580216959536e+00 6.1143362713723026e-01 -2.8615960327080159e-01 + -1.7331922849208821e+00 6.9530176658448484e-01 -2.6286248885607888e-01 + -2.2497970687287436e+00 6.6738400904981732e-01 -1.6410481082051931e-01 + -2.8136043703419920e+00 5.8863544139591417e-01 -1.9459193768872840e-02 + -3.4389741707487680e+00 5.0874359651990475e-01 1.1777779479928707e-01 + -4.1323219861324620e+00 4.2864066883375851e-01 1.7569326768743343e-01 + -4.8741279587121751e+00 3.3761332581905745e-01 9.3143254124049335e-02 + -5.6083002537695643e+00 2.4192927351693472e-01 -1.5473997019334540e-01 + -6.2642301946005503e+00 1.4677703974487644e-01 -5.4300414644439488e-01 + -6.8037979237994497e+00 4.2817540550351030e-02 -1.0083900708051190e+00 + -7.2204799440872209e+00 -8.7359307628775085e-02 -1.4866796573125582e+00 + -7.5102851339065495e+00 -2.6131679081491477e-01 -1.9157057382646341e+00 + -7.6873514562604894e+00 -4.7402856129220972e-01 -2.2593937998733598e+00 + -7.7762817403101998e+00 -6.5403184143181248e-01 -2.5050667528319566e+00 + -7.8025638650207325e+00 -6.9017962555065582e-01 -2.6643432046526652e+00 + -7.7454394930179093e+00 -5.0290146783830503e-01 -2.8436784622396454e+00 + -7.5711914238285898e+00 -3.4870469010216132e-01 -3.1416247188042479e+00 + -7.5425214617983514e+00 -6.1627857293334731e-01 -3.1688620090513693e+00 + id 12959 + loc 9.2558211088180542e-01 4.3089714646339417e-01 377 + blend 0.0000000000000000e+00 + interp 3.9829245167391353e-01:3.7068458926498682e-01:2.5082043012070177e-04:2.9299585953626817e-01:4.4145411822693648e-01:3.9828846874939683e-01:1.0009317282096559e+00:3.9142341862468694e-01:2.9441153803821418e+00:2.5535789793751273e-01:3.1078755200305168e+00 + CVs 20 + 7.8713094422991570e-01 1.8880666228547674e-01 7.3372029130769501e-01 + 1.3592216995046273e+00 2.0662230563511857e-01 1.1842496472150419e+00 + 1.8701456896062667e+00 1.4990106445887297e-01 1.5628671821671001e+00 + 2.3687336551077718e+00 4.8381154211122546e-02 1.9472759159059192e+00 + 2.8452873754393888e+00 -9.9139437557004606e-02 2.3401376790159567e+00 + 3.2970456516789159e+00 -2.8472193184116690e-01 2.7394146418228269e+00 + 3.7323116921826598e+00 -4.9652733630417423e-01 3.1373949491676680e+00 + 4.1613818124698181e+00 -7.2637722047180153e-01 3.5276681593765606e+00 + 4.5864448317519599e+00 -9.7808294895453574e-01 3.9125785652580705e+00 + 4.9988564797280919e+00 -1.2693062587800714e+00 4.2933140997460137e+00 + 5.3736423509288489e+00 -1.6238203079590254e+00 4.6541231038018456e+00 + 5.6914093253445337e+00 -2.0514747998979268e+00 4.9605727155136199e+00 + 5.9553825032421690e+00 -2.5741482588649238e+00 5.1811750330990582e+00 + 6.1850661278651033e+00 -3.2211987431792792e+00 5.2944554235590386e+00 + 6.4178917303599539e+00 -3.9806223345804383e+00 5.3114418602563997e+00 + 6.7039628644269902e+00 -4.7875674037297236e+00 5.2728906886250435e+00 + 7.0838212529721183e+00 -5.5471054244430569e+00 5.2014959030266610e+00 + 7.5376200358917904e+00 -6.1906360261933031e+00 5.0997644952493175e+00 + 7.9544533137092692e+00 -6.7633207541515628e+00 4.9873717878891011e+00 + id 12960 + loc 2.6018467545509338e-01 8.5567712783813477e-01 409 + blend 0.0000000000000000e+00 + interp 3.9299026467344278e-01:3.9298633477079609e-01:9.3188296505414048e-02:3.4459958793206308e-01:1.0733568642440259e+00:3.6114176731723985e-01:1.9978654948386181e+00:3.4113086212371174e-01:2.9564155953842741e+00:3.6061918888660977e-01:3.6325361320881489e+00 + CVs 20 + 5.4105876169335709e-01 1.0272396597449057e-01 -8.3792230968628423e-02 + 9.8993217453291515e-01 1.7663403876447614e-01 -2.0234355305418841e-01 + 1.4297260612170657e+00 2.5411775190154867e-01 -3.0142122671020333e-01 + 1.8817890490060716e+00 3.4277834543329755e-01 -3.6769680870510846e-01 + 2.3413195797895927e+00 4.3584298158835499e-01 -4.0516907627870691e-01 + 2.8058204912994675e+00 5.2591068234520344e-01 -4.1604100276553235e-01 + 3.2745924774174084e+00 6.0264364217650312e-01 -4.0135169045621688e-01 + 3.7483996825874670e+00 6.5123005663237987e-01 -3.6264752950080348e-01 + 4.2264644003487408e+00 6.5614064192969312e-01 -3.0465646899452042e-01 + 4.7029417961037510e+00 6.0482228445179342e-01 -2.3759379103437378e-01 + 5.1667878093519626e+00 4.8767356680999940e-01 -1.7601917997023717e-01 + 5.6035779653162674e+00 2.9868569118109267e-01 -1.3421994698331166e-01 + 6.0027188861652307e+00 4.3668370489615249e-02 -1.2051000110667850e-01 + 6.3590537795005142e+00 -2.6799462308785227e-01 -1.3677301805079489e-01 + 6.6671079988641573e+00 -6.3012576228106987e-01 -1.8144894589448121e-01 + 6.9193712981812840e+00 -1.0399716617703043e+00 -2.4783625270734810e-01 + 7.1087583829969514e+00 -1.4905665488990194e+00 -3.2577803866642119e-01 + 7.2358378376836647e+00 -1.9520346247278355e+00 -4.1443160304816656e-01 + 7.3796665508507449e+00 -2.2999123415556211e+00 -4.9282343037178439e-01 + id 12961 + loc 5.7081258296966553e-01 7.5637429952621460e-01 393 + blend 0.0000000000000000e+00 + interp 3.8951976710394798e-01:3.8881812470862481e-01:3.7844999115467792e-02:2.8432072032862910e-01:9.7618389995392707e-01:3.8951587190627696e-01:1.9560821934210062e+00:2.8914667448206061e-01:2.2893917698657447e+00:3.0033809705872316e-01:2.9979533048547804e+00:3.8578785019428119e-01:3.4581254732559272e+00 + CVs 20 + -3.0513462887389692e-01 2.7564542479452242e-01 -1.4966300131467219e-01 + -6.1323737580267024e-01 5.4519699451878101e-01 -2.5543419678982515e-01 + -9.2457671877386827e-01 8.3101666899874904e-01 -3.4392872053201040e-01 + -1.2376143611997614e+00 1.1324988649848544e+00 -4.2576270598772181e-01 + -1.5630448962295840e+00 1.4370156307482631e+00 -5.0215998274365403e-01 + -1.9100618260910449e+00 1.7290345187373890e+00 -5.7226260868117917e-01 + -2.2787735254512929e+00 1.9927763498978162e+00 -6.3089979446628242e-01 + -2.6740650031212989e+00 2.2117322970619684e+00 -6.7498059492590845e-01 + -3.1349419598130202e+00 2.3668282166590888e+00 -7.1906408225750684e-01 + -3.7078109969773401e+00 2.4363467252996034e+00 -8.0033834174562557e-01 + -4.3592361931272841e+00 2.4128610359275107e+00 -9.5104358993472915e-01 + -5.0006202917717628e+00 2.3062342606047403e+00 -1.1607385823364949e+00 + -5.6011876640379681e+00 2.1152915560311678e+00 -1.4078931845753253e+00 + -6.1810518615450647e+00 1.8208966936933693e+00 -1.7010433103927434e+00 + -6.7129039038428600e+00 1.4527087399143959e+00 -2.0162506474338087e+00 + -7.1545704792467157e+00 1.1386794740831805e+00 -2.2416155984611690e+00 + -7.5188896832486236e+00 9.9056847143729509e-01 -2.3019488687370364e+00 + -7.8742346644205341e+00 9.2848516258539693e-01 -2.2936992998032264e+00 + -8.3924105079434081e+00 6.6853636634776281e-01 -2.3988656995394981e+00 + id 12962 + loc 8.7246984243392944e-01 9.1986191272735596e-01 395 + blend 0.0000000000000000e+00 + interp 5.0798484610636130e-01:3.5186923737277320e-01:5.7533855451038840e-02:4.1283530634574389e-01:9.7528659753306379e-01:3.5467257779256606e-01:1.3593632372848530e+00:3.8208461654886211e-01:2.1765385778284445e+00:5.0797976625790031e-01:2.7616515911271033e+00:4.8936352241781367e-01:3.0042949260568479e+00:3.7635203887941854e-01:3.6924691773650817e+00 + CVs 20 + 4.9215149666427649e-01 2.3356818455976164e-01 -4.0554332597734172e-01 + 8.6399428735621975e-01 3.9186333595671757e-01 -7.2227367806298592e-01 + 1.2160058160682072e+00 5.1881255067862686e-01 -1.0204015070464214e+00 + 1.6053944230017467e+00 6.3714636927644808e-01 -1.3333231567048192e+00 + 2.0350038663132701e+00 7.3622962271721726e-01 -1.6557702325625274e+00 + 2.5005164081341205e+00 8.0393327768636935e-01 -1.9817443249104545e+00 + 2.9949398442060677e+00 8.2967442996535501e-01 -2.3111793000943077e+00 + 3.5079007496029648e+00 8.0254409122432624e-01 -2.6453786867203761e+00 + 4.0262126487387606e+00 7.0880493630167196e-01 -2.9826659116810856e+00 + 4.5331411048379184e+00 5.3234515572194718e-01 -3.3202011118403405e+00 + 5.0033004893302113e+00 2.6471944133753800e-01 -3.6554315773829633e+00 + 5.4075922151671900e+00 -8.3085861036578557e-02 -3.9776530135030668e+00 + 5.7297571687861826e+00 -4.8133104729142984e-01 -4.2701127835088837e+00 + 5.9713229271635209e+00 -8.9789712975920555e-01 -4.5247403185875807e+00 + 6.1421722348929828e+00 -1.3083767058204319e+00 -4.7456319187299982e+00 + 6.2540422137804708e+00 -1.6946571313609518e+00 -4.9400453325704294e+00 + 6.3200828071581583e+00 -2.0422381945322012e+00 -5.1134292991054107e+00 + 6.3548070050994445e+00 -2.3424652739697223e+00 -5.2722429475690546e+00 + 6.3618172930413950e+00 -2.5577533000705195e+00 -5.3977081765989130e+00 + id 12963 + loc 1.1819081753492355e-01 9.0291544795036316e-02 417 + blend 0.0000000000000000e+00 + interp 2.4738972600733264e-01:1.9660843095567629e-01:2.2768815342866389e-01:2.3631871981235539e-01:1.0412369292844796e+00:1.8696059273551729e-01:1.6364370267183976e+00:1.9136492060554536e-01:1.9989500845228898e+00:1.8762669128899423e-01:2.7160253246049568e+00:2.4738725211007256e-01:3.3069745147489575e+00 + CVs 20 + -2.2337653432614449e-01 -6.5634821286582462e-02 2.0941214923232254e-01 + -3.5635485581451681e-01 -1.6964707071528815e-01 3.3802782196465686e-01 + -4.4553179583424996e-01 -2.9079868513566187e-01 4.4882797943405955e-01 + -5.3869293529348217e-01 -4.0740153794972400e-01 5.6659884002677563e-01 + -6.3365623468584631e-01 -5.1735637626736541e-01 6.8816789076599738e-01 + -7.2643704217260918e-01 -6.1901782860112375e-01 8.0862320680781585e-01 + -8.1226119660025820e-01 -7.1149148646997240e-01 9.2310146401524118e-01 + -8.8657429704460244e-01 -7.9467749544962452e-01 1.0281241641350813e+00 + -9.4404215077423137e-01 -8.6852752883341355e-01 1.1219584836698548e+00 + -9.7597992082355600e-01 -9.3079144942118386e-01 1.2028015238336043e+00 + -9.7543703747303578e-01 -9.7686340941086969e-01 1.2705235605556013e+00 + -9.4954765366747518e-01 -1.0055654620791215e+00 1.3318006390707735e+00 + -9.1852324587569345e-01 -1.0236661075069593e+00 1.3962118545411029e+00 + -8.9941703779175342e-01 -1.0404082702537467e+00 1.4665855445574627e+00 + -8.9816799391826829e-01 -1.0601688429557641e+00 1.5364229038791410e+00 + -9.1473662638859565e-01 -1.0837216232364713e+00 1.5967412203451388e+00 + -9.4788661127149887e-01 -1.1122501157352211e+00 1.6455933425052889e+00 + -9.9620741211921837e-01 -1.1483794713898541e+00 1.6882735401634246e+00 + -1.1156658349320752e+00 -1.2578225595465800e+00 1.6913230212881420e+00 + id 12964 + loc 1.8031007051467896e-01 2.5529992580413818e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3801302629879346e-01:3.6349321625217029e-01:3.1190661756253502e-01:3.6768838480258687e-01:9.8437494155437777e-01:4.3800864616853047e-01:1.2855980293371658e+00:3.2413578919073338e-01:1.9921454168438379e+00:3.3278847980794890e-01:2.9852994622100595e+00:3.7399905050575227e-01:3.9167972705792842e+00 + CVs 20 + -2.7822998793205816e-01 1.7123075029520116e-01 -1.5574135944293507e-02 + -5.3723791149289235e-01 3.7073444293217633e-01 -1.0590723946920039e-02 + -7.8076372764200874e-01 6.0377839841268899e-01 6.7135863934126294e-03 + -1.0155434715375937e+00 8.6961370113764724e-01 1.7598985754935181e-02 + -1.2559593011263628e+00 1.1515041657028140e+00 -1.4204460414194098e-02 + -1.5158267528619367e+00 1.4176618175786428e+00 -1.2116191609353943e-01 + -1.8024895341446621e+00 1.6311578298147693e+00 -3.2037828159835369e-01 + -2.0967754858680214e+00 1.7440121683458094e+00 -6.2577779588971960e-01 + -2.3228570318055257e+00 1.7179859175908663e+00 -1.0198284317572197e+00 + -2.4096475341931414e+00 1.5731552364631523e+00 -1.4331253843043585e+00 + -2.3647495709915778e+00 1.3580271133209978e+00 -1.8187829702722946e+00 + -2.2172100385017095e+00 1.0987679270742898e+00 -2.1668648936237171e+00 + -1.9787480301082601e+00 8.2754762688868155e-01 -2.4542710111695416e+00 + -1.6862633416609034e+00 6.0353420416324455e-01 -2.6685619236584945e+00 + -1.4025966027280097e+00 4.5629183231691939e-01 -2.8605427278612829e+00 + -1.1836164358004608e+00 4.1035767936697387e-01 -3.0749937851731737e+00 + -1.0867749460132916e+00 5.2867648567477532e-01 -3.2500179719115159e+00 + -1.0562979208951924e+00 7.2828609816645329e-01 -3.3437850348012241e+00 + -9.4015146642135994e-01 8.7027556118056082e-01 -3.6999649983864127e+00 + id 12965 + loc 6.7201471328735352e-01 5.3302222490310669e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8948295468046793e-01:3.3731909622709033e-01:1.7875860438306768e-01:3.2941714219080087e-01:1.2482665583531558e+00:4.6331032999453731e-01:1.9983648905729468e+00:3.4019088764198541e-01:2.5558054602196583e+00:4.8947805985092113e-01:3.0000563363432833e+00:3.8601118776802429e-01:3.5965820752736315e+00 + CVs 20 + 2.0945581022738086e-01 3.3389900607737344e-01 -1.5746213184610988e-01 + 4.1265276788943811e-01 6.6037130114200737e-01 -3.4406141100177040e-01 + 6.0930265655650384e-01 9.5896348373420648e-01 -5.7765522686400927e-01 + 7.9581620033260636e-01 1.2070209491756514e+00 -8.6706462486603653e-01 + 9.6305288039783055e-01 1.3822515478464712e+00 -1.2107290874239518e+00 + 1.0941698520916208e+00 1.4652860019634555e+00 -1.5953397508544545e+00 + 1.1650215858724353e+00 1.4437024949596784e+00 -1.9942762004152441e+00 + 1.1482540006402391e+00 1.3170033119652069e+00 -2.3650574398213067e+00 + 1.0304078844859497e+00 1.1040057377114576e+00 -2.6550825585121323e+00 + 8.2666913580923340e-01 8.4219310079993115e-01 -2.8221865710584710e+00 + 5.7832320022162409e-01 5.7145067520897719e-01 -2.8583109535591196e+00 + 3.3540667207021579e-01 3.0182532085592473e-01 -2.8188368476258239e+00 + 1.1519786515747728e-01 4.2658819156915495e-03 -2.8034985011309184e+00 + -1.0339788421609714e-01 -3.3411276193454098e-01 -2.9372431246162991e+00 + -3.3547601961568618e-01 -6.2296512053818920e-01 -3.3986823834413813e+00 + -5.0626056493762228e-01 -5.6799686506385338e-01 -4.2101405594637544e+00 + -4.6334216146204343e-01 1.1662075489116308e-01 -5.0186999941874078e+00 + -9.7844100823089503e-02 1.4263998426021041e+00 -5.1121194616265804e+00 + -1.1479423771198685e-01 1.6006099612012001e+00 -5.2299508094468345e+00 + id 12966 + loc 2.6548117399215698e-01 9.5585697889328003e-01 406 + blend 0.0000000000000000e+00 + interp 5.9005248059166489e+00:2.7563575423534353e-01:1.4988080578992780e-01:4.6263974666093227e-01:9.4665055641588991e-01:5.0734320355823270e-01:1.2740017485636197e+00:9.2732674598872400e-01:1.3447464620467586e+00:5.9005148059166492e+00:3.0744409168123292e+00:5.6796700352198402e+00:3.0869040599948598e+00:4.9057321726949592e+00:3.1308598763286399e+00:2.3999844952179448e+00:3.3516959234287471e+00:1.8058418270069450e+00:3.4206760821273789e+00:5.1050267869702148e-01:3.8661723018533092e+00 + CVs 20 + 3.7067181269141775e-01 3.1654341774911610e-01 -1.9943593675117105e-01 + 5.5093320569223048e-01 5.3921206729124305e-01 -3.8511343296528316e-01 + 6.6748444397546258e-01 6.8619037697093821e-01 -5.4518543155472887e-01 + 7.8001776280678192e-01 8.1909906904347318e-01 -6.9716382161110413e-01 + 8.8569269803136552e-01 9.3679480368969437e-01 -8.3690960648079160e-01 + 9.8510008829845774e-01 1.0348783599420792e+00 -9.5993165066826314e-01 + 1.0827673396785751e+00 1.1059984798156779e+00 -1.0613644221763798e+00 + 1.1869321705712856e+00 1.1354892565970063e+00 -1.1328074003516755e+00 + 1.3038102417842554e+00 1.0936521604699427e+00 -1.1539854662572846e+00 + 1.4024982782541637e+00 9.3768314172713785e-01 -1.0845646633282786e+00 + 1.3873405175709805e+00 7.0970998272900576e-01 -9.3117238830459659e-01 + 1.2943570195255227e+00 5.4542080255893266e-01 -8.0426565941103068e-01 + 1.2317065673229710e+00 4.4661902132864811e-01 -7.2810843019917670e-01 + 1.2233124404004918e+00 3.7628099823474714e-01 -6.6833233894937094e-01 + 1.2763720394152658e+00 3.2365420016263624e-01 -5.9616228356204060e-01 + 1.3908667041882150e+00 2.9617416968327026e-01 -4.9857307971751808e-01 + 1.5444549783606978e+00 3.0872227992486828e-01 -3.8527200476093526e-01 + 1.7028717986972157e+00 3.6512026037916251e-01 -2.7444083361462379e-01 + 1.7830917543524609e+00 3.9012426455279692e-01 -1.8246856319208957e-01 + id 12967 + loc 8.7678563594818115e-01 5.5153548717498779e-01 373 + blend 0.0000000000000000e+00 + interp 5.4228407599249240e-01:3.9810015839145541e-01:5.1818964283301128e-03:4.0445787189525412e-01:5.0832840294746329e-01:4.1679613892975276e-01:1.1011288603315519e+00:4.2405113401430622e-01:1.9179682011276729e+00:5.4227865315173251e-01:2.0504850784864073e+00:4.8543576854258497e-01:2.9845616342630219e+00:4.5893706394787309e-01:3.5936159933832945e+00 + CVs 20 + -3.1115538307162754e-01 3.5220088621824958e-01 -1.7246758438241533e-01 + -6.2151298424798362e-01 6.7209674533529307e-01 -3.3308595997427776e-01 + -9.4637256096287081e-01 9.7012919475928150e-01 -4.9061642109773651e-01 + -1.2766964478445426e+00 1.2684739898711577e+00 -6.5176069968953843e-01 + -1.5899464762375037e+00 1.5788837038259995e+00 -8.3074136523800901e-01 + -1.8695650787840932e+00 1.8905182318436997e+00 -1.0566279908995067e+00 + -2.1014580652894725e+00 2.1771596819512609e+00 -1.3558787326779420e+00 + -2.2724570901043002e+00 2.4151951704328822e+00 -1.7302632915045022e+00 + -2.3733679405740018e+00 2.5918642913596690e+00 -2.1605243521261763e+00 + -2.3999565836724353e+00 2.7039369337623809e+00 -2.6210640237507397e+00 + -2.3520712881126657e+00 2.7511440453929890e+00 -3.0895738532150627e+00 + -2.2348697095735974e+00 2.7266393694609201e+00 -3.5475303393372037e+00 + -2.0677687652643968e+00 2.6243845264169954e+00 -3.9681862549453184e+00 + -1.8841413560862543e+00 2.4628241128298671e+00 -4.3294049925005558e+00 + -1.7103597507233050e+00 2.2740316167317212e+00 -4.6358840648410542e+00 + -1.5603978375332974e+00 2.0680180720933810e+00 -4.9171199936161916e+00 + -1.4575341848473449e+00 1.8316426107803865e+00 -5.2109545763752658e+00 + -1.4540205696679003e+00 1.5720043713477356e+00 -5.5423422679741821e+00 + -1.5160318487081506e+00 1.4696747016357969e+00 -5.7676880802973889e+00 + id 12968 + loc 1.0759997367858887e-01 6.8623781204223633e-02 399 + blend 0.0000000000000000e+00 + interp 4.8036893401489589e-01:4.2955766635852111e-01:3.8189325025497656e-01:3.4056471888172729e-01:1.0007963368163282e+00:3.7319971249779299e-01:1.7168095175052751e+00:3.3023368524260671e-01:2.1367110190310541e+00:4.5058970843032825e-01:2.8219190564845373e+00:4.8036413032555575e-01:3.2059501746386769e+00:4.5091003635348720e-01:3.9231079407858132e+00 + CVs 20 + -1.0275431629679491e-01 3.8384018082814642e-01 1.2786000518216820e-01 + -2.1524188638173830e-01 7.6180526807838667e-01 2.6471225225402240e-01 + -3.2999530123747245e-01 1.1278422546956526e+00 3.8876639537849822e-01 + -4.3831219912021657e-01 1.4793247234021925e+00 5.0632718186008285e-01 + -5.3237925221973648e-01 1.8125740461050810e+00 6.3096250087334416e-01 + -6.0797575879065990e-01 2.1241247716519434e+00 7.6831619960202790e-01 + -6.6584853700747504e-01 2.4169422350807368e+00 9.1791171814545702e-01 + -7.0855025288917373e-01 2.7024266811558202e+00 1.0818824463702210e+00 + -7.3096863616538466e-01 2.9821290780413148e+00 1.2819820676884963e+00 + -7.1899731018580371e-01 3.2261836731447366e+00 1.5516957812004959e+00 + -6.8110474240930829e-01 3.4132095018615449e+00 1.8985771490777648e+00 + -6.6108678771452245e-01 3.5625780884957678e+00 2.3014023445901168e+00 + -6.9028124862958284e-01 3.6856804032629480e+00 2.7379519529860983e+00 + -7.5558579948985227e-01 3.7457802584524140e+00 3.1985531769935549e+00 + -8.4673257892063292e-01 3.7075203915504975e+00 3.6401770101310333e+00 + -1.0068202325827627e+00 3.6009067318899728e+00 3.9543212043231475e+00 + -1.2854408343394550e+00 3.4690217902940832e+00 4.0626694679276696e+00 + -1.6199528352681285e+00 3.2508158717402784e+00 4.0905642424794717e+00 + -1.7021474838648867e+00 2.8782752982708244e+00 4.3239553266464519e+00 + id 12969 + loc 4.6335458755493164e-02 4.9495476484298706e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7717985817547892e-01:3.5585494628638858e-01:7.5938023389431408e-01:4.7717508637689721e-01:1.0016728825353614e+00:4.5314570598395199e-01:1.4305660398320417e+00:2.0174709891187931e-01:2.0541490549318331e+00:3.8201345728405189e-01:3.0881222890760371e+00:3.5092589092111498e-01:3.9433391272337852e+00 + CVs 20 + -2.1401632115727767e-01 3.6765473413729155e-01 -3.6656152558418231e-01 + -4.1719929734652123e-01 7.2532353410753148e-01 -7.1507128304611811e-01 + -6.3697993413162490e-01 1.0662259317284182e+00 -1.0617640247399021e+00 + -9.0046568321509524e-01 1.3896783034312703e+00 -1.4055454985244289e+00 + -1.2306763392262607e+00 1.6885407773763985e+00 -1.7355868285150196e+00 + -1.6446791326244148e+00 1.9478835709716891e+00 -2.0354181923471897e+00 + -2.1449541561241268e+00 2.1433928654837926e+00 -2.2831915042284292e+00 + -2.7124325363938464e+00 2.2450564349495128e+00 -2.4554725635947454e+00 + -3.3045410888398798e+00 2.2288520282490798e+00 -2.5367040858724677e+00 + -3.8640229033132187e+00 2.0865846009339588e+00 -2.5271903810130518e+00 + -4.3345236506044946e+00 1.8329543080431929e+00 -2.4442625430631999e+00 + -4.6790777980590024e+00 1.5070766609291031e+00 -2.3239106031390828e+00 + -4.8946129408650734e+00 1.1557596150075029e+00 -2.2024955364413676e+00 + -4.9984372828090837e+00 8.1405139183710573e-01 -2.1016819861863976e+00 + -5.0097756998019864e+00 5.0499100431121979e-01 -2.0268177087730623e+00 + -4.9431781898282168e+00 2.4940340422494733e-01 -1.9694916661914701e+00 + -4.8230977739931209e+00 6.9106036424120720e-02 -1.9188671393771723e+00 + -4.6921288953957063e+00 -4.8439235314652107e-02 -1.8750265288869705e+00 + -4.5755939010223488e+00 -2.3722212350974303e-01 -1.8636690641289042e+00 + id 12970 + loc 4.2406544089317322e-01 8.1723439693450928e-01 400 + blend 0.0000000000000000e+00 + interp 3.3324784612406472e-01:2.5854691424118903e-01:1.0719297428715739e+00:2.5958058505937953e-01:1.9847279861561833e+00:3.3324451364560348e-01:2.6257206536441688e+00:3.1312376444762552e-01:3.0372961847218094e+00:2.4545813171948994e-01:3.9578934182053112e+00 + CVs 20 + -2.2611159646935330e-01 2.4802564713565867e-01 -3.3542962568898230e-02 + -4.6610278487731804e-01 5.0771396178640948e-01 -6.8134649053341101e-02 + -7.0537442354629964e-01 7.8837143578099655e-01 -1.3796576846964043e-01 + -9.2580087611366613e-01 1.0755953737814217e+00 -2.5721285003288769e-01 + -1.1290847560082260e+00 1.3555110720285048e+00 -4.2510049468130695e-01 + -1.3207551896670118e+00 1.6195272440332020e+00 -6.3998865796498439e-01 + -1.5015518642459329e+00 1.8644758794417002e+00 -9.0100723431333196e-01 + -1.6690028493060591e+00 2.0873394149794779e+00 -1.2084491254423917e+00 + -1.8192608650627202e+00 2.2806752681304792e+00 -1.5628368555215688e+00 + -1.9450496846741558e+00 2.4349894037127497e+00 -1.9602201267337769e+00 + -2.0270021041060411e+00 2.5406475558337416e+00 -2.3812628473454196e+00 + -2.0423045833092770e+00 2.5968361964204618e+00 -2.7913161726538118e+00 + -1.9892355885990036e+00 2.6210882235209514e+00 -3.1706379639551519e+00 + -1.8861546679554713e+00 2.6422399248371855e+00 -3.5317680545202164e+00 + -1.7510342456932424e+00 2.6722562124322278e+00 -3.8969443750461146e+00 + -1.6036436261289475e+00 2.6751871294780400e+00 -4.2652448627962238e+00 + -1.4746463401442578e+00 2.6037042182780166e+00 -4.6062287997929072e+00 + -1.4094209029619382e+00 2.4554039644971146e+00 -4.8991729948751299e+00 + -1.6511682415870739e+00 2.2075497766656298e+00 -5.0811249818919508e+00 + id 12971 + loc 8.3352190256118774e-01 7.1608382463455200e-01 1081 + blend 0.0000000000000000e+00 + interp 3.7857969185184231e-01:3.3442612428585439e-01:6.7198426141954815e-02:3.2112309495217922e-01:8.9321702109857148e-01:3.5053510828956691e-01:1.3390063105378944e+00:3.4099973362761571e-01:2.1351869167965907e+00:3.7857590605492381e-01:2.8591602952299713e+00:2.9027158032566719e-01:3.3209962357966694e+00 + CVs 20 + 1.3403511741649682e-01 5.4852456871455191e-01 3.5219536645119665e-01 + 3.0404575972018433e-01 9.6508105368492125e-01 5.4585874908066312e-01 + 4.8838628445536608e-01 1.3251976151806377e+00 6.8962771535371292e-01 + 6.7971602866893133e-01 1.6500539917010695e+00 8.1627537723715027e-01 + 8.7681778242270325e-01 1.9325547895676374e+00 9.1506541947711906e-01 + 1.0737935226737854e+00 2.1590283723998862e+00 9.6832014274150935e-01 + 1.2579295872685088e+00 2.3076243198469126e+00 9.5971971182052984e-01 + 1.4059864223269298e+00 2.3513613423153266e+00 8.9086438712297367e-01 + 1.4824787387952088e+00 2.2694657575265409e+00 7.9982107743728803e-01 + 1.4721084159072932e+00 2.0960598798632168e+00 7.5839738047457095e-01 + 1.4294747254754199e+00 1.9199584009797577e+00 7.8119225862790675e-01 + 1.4132403450421369e+00 1.7672255509237309e+00 8.0685735561370020e-01 + 1.4340597327316997e+00 1.6087280262225452e+00 7.9872243074234128e-01 + 1.4860079578373069e+00 1.4227904215441489e+00 7.5983958973726495e-01 + 1.5638929013864793e+00 1.2104073897224934e+00 7.1994632713031359e-01 + 1.6588889827276772e+00 1.0047325176344089e+00 7.4568581234805709e-01 + 1.7598424772072445e+00 8.7418916609835695e-01 8.9377576012413107e-01 + 1.8689266199052339e+00 7.9121337081558751e-01 1.0737739894104799e+00 + 1.9959173133638048e+00 4.2407830760897453e-01 1.0993776336862675e+00 + id 12972 + loc 1.3719019293785095e-01 1.7417614161968231e-01 411 + blend 0.0000000000000000e+00 + interp 3.2988339245239939e-01:2.8966184577162174e-01:5.8332004087948586e-01:3.2988009361847487e-01:1.2316045239035909e+00:3.2464078931982354e-01:2.0004741695443542e+00:2.8680433517589260e-01:2.8353029882203655e+00:3.2128626946527467e-01:3.9482017725174536e+00 + CVs 20 + -2.3960661404441058e-01 2.5971407910034278e-01 -6.7326866454870238e-01 + -4.3944545869759921e-01 4.1375062653722494e-01 -1.1875475735900549e+00 + -6.2707460765023249e-01 5.2667881501295977e-01 -1.6935023113202425e+00 + -8.1821344575199439e-01 6.0562231252069831e-01 -2.2365721188677288e+00 + -1.0306004433078539e+00 6.2049111762966547e-01 -2.7849916200022684e+00 + -1.2803979244641965e+00 5.5040940002537442e-01 -3.3000300991482838e+00 + -1.5706420096163605e+00 3.9134122082565548e-01 -3.7495109765336956e+00 + -1.8924526291605701e+00 1.4981367789737199e-01 -4.1174482418045208e+00 + -2.2246889495497060e+00 -1.6434233747439531e-01 -4.4043918445953585e+00 + -2.5337192728846816e+00 -5.4235603236622354e-01 -4.6210961957464072e+00 + -2.7850424435045609e+00 -9.9365674101108237e-01 -4.7821351402139269e+00 + -2.9779201885512250e+00 -1.5515215617695979e+00 -4.9119731205255075e+00 + -3.1604020771250951e+00 -2.2441556965408411e+00 -5.0428532740289622e+00 + -3.4123706759211538e+00 -3.0469717713393067e+00 -5.2087758910585578e+00 + -3.7951597255414362e+00 -3.8809512620658571e+00 -5.4406207652234198e+00 + -4.2877534296679460e+00 -4.6489223495183767e+00 -5.7569192125584223e+00 + -4.7997736641758033e+00 -5.3042343639405640e+00 -6.1538699598087234e+00 + -5.2728185488223849e+00 -5.8641900402562017e+00 -6.5983981245305996e+00 + -5.7456297197891892e+00 -6.3887689956229705e+00 -7.0214032283880767e+00 + id 12973 + loc 4.3021064996719360e-01 1.6407309472560883e-01 409 + blend 0.0000000000000000e+00 + interp 4.7489483436906793e-01:3.5271455004669072e-01:2.6399394811761345e-02:3.2842197010716329e-01:7.7922889405848395e-01:3.2711497470811185e-01:1.5111924274133783e+00:4.7489008542072425e-01:2.0175406448573945e+00:3.6985140919883475e-01:2.5048101066705031e+00:3.4073943079944341e-01:3.1507226220886597e+00 + CVs 20 + -1.8918610894181143e-01 1.8725692484898249e-01 -3.1313296412524655e-01 + -3.6411726733865374e-01 3.4415367391687945e-01 -5.8388539789347793e-01 + -5.2072927901171551e-01 4.9144637657139034e-01 -8.4920998249340340e-01 + -6.5695917927876057e-01 6.3736016657871475e-01 -1.1208248689047897e+00 + -7.7511166037974177e-01 7.7817595649557869e-01 -1.3979965069262783e+00 + -8.7749871706092963e-01 9.1210258522137799e-01 -1.6821276669136722e+00 + -9.6453857385480890e-01 1.0431061917516584e+00 -1.9787203804749005e+00 + -1.0351686169637593e+00 1.1742492859459990e+00 -2.2980603226917706e+00 + -1.0866513828074822e+00 1.2962779817076011e+00 -2.6501006013269870e+00 + -1.1170040830231585e+00 1.3913806703468923e+00 -3.0384995509498411e+00 + -1.1267794602444687e+00 1.4436428721693895e+00 -3.4614514447997258e+00 + -1.1187098473928743e+00 1.4385699094779159e+00 -3.9137402349807822e+00 + -1.0973445455644264e+00 1.3594683618126377e+00 -4.3834170851180421e+00 + -1.0653856524323402e+00 1.1922840059686022e+00 -4.8501008882904699e+00 + -1.0186412033468861e+00 9.3276144078249867e-01 -5.2899998768795200e+00 + -9.4848387312135929e-01 5.8586112482835961e-01 -5.6777367228941547e+00 + -8.5435129407934851e-01 1.6449247003294065e-01 -5.9822641223850486e+00 + -7.5089916075652419e-01 -3.0766248706067234e-01 -6.1769943692365370e+00 + -6.5805498723955258e-01 -8.0087783188652750e-01 -6.2691134304516929e+00 + id 12974 + loc 8.0437231063842773e-01 2.5245901942253113e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5699393243216635e-01:4.4998985646153544e-01:2.0004525290668396e-01:3.2634517160399917e-01:9.5263042001451292e-01:3.0957647726294640e-01:1.7736787873976041e+00:4.5698936249284206e-01:2.5366371213670389e+00:3.1130482288407402e-01:3.0037945183270103e+00:3.3096061352887246e-01:3.8514675350522345e+00 + CVs 20 + -1.4155963669869259e-01 3.3406112034825697e-01 -2.6050691662147102e-01 + -2.7205058897433670e-01 5.6082855340707227e-01 -3.9480492006761814e-01 + -4.0641843932419414e-01 7.5193604975398420e-01 -4.9252540326080985e-01 + -5.4149373813644130e-01 9.2403921520519539e-01 -5.9868474239811520e-01 + -6.7069888759078866e-01 1.0712955703403653e+00 -7.0929569425780037e-01 + -7.8041650210237612e-01 1.1889235549560015e+00 -8.2352109894471615e-01 + -8.5262853135007211e-01 1.2799815568550614e+00 -9.4457819402558085e-01 + -8.7631848296365289e-01 1.3627009117329674e+00 -1.0814422510892512e+00 + -8.6215637872118678e-01 1.4691371234379775e+00 -1.2451231002521652e+00 + -8.5229043278264149e-01 1.6235899028994785e+00 -1.4292172996975110e+00 + -8.9408103752803492e-01 1.8110265812858346e+00 -1.5989338457513511e+00 + -9.9866096964954632e-01 1.9903102996666788e+00 -1.7202857971735614e+00 + -1.1469518331255237e+00 2.1345034325449586e+00 -1.7805572961530671e+00 + -1.3146992044536492e+00 2.2420787541683058e+00 -1.7779980594252665e+00 + -1.4802899524344186e+00 2.3362250491057823e+00 -1.7038494005392673e+00 + -1.6284932595511830e+00 2.4818299230169765e+00 -1.5119678863815522e+00 + -1.7803679219552215e+00 2.7263597700258151e+00 -1.0837983697324334e+00 + -2.0094075095677435e+00 2.8717573131981240e+00 -4.5086435805265412e-01 + -2.1504359186224051e+00 2.7029366120844580e+00 -4.6464532377204848e-01 + id 12975 + loc 1.8042653799057007e-01 1.0249727964401245e-01 403 + blend 0.0000000000000000e+00 + interp 4.2736114612484566e-01:3.5530606695221367e-01:5.9152829151436348e-01:3.2121817133545533e-01:1.1307429270604643e+00:3.5885603155572149e-01:1.9200205047814269e+00:4.2735687251338444e-01:2.7187470971217405e+00:3.9267657456052529e-01:3.0207860850594912e+00:3.5796483229357123e-01:3.6306380969172194e+00 + CVs 20 + -2.2204785880624886e-01 3.1628979614470237e-01 8.2043687814106370e-02 + -4.2405127440453344e-01 6.4407633760195049e-01 1.5173179368120152e-01 + -6.2485354365709822e-01 9.7097744653482632e-01 2.3975323361925122e-01 + -8.3089211194870338e-01 1.2841382067123219e+00 3.6187682037410362e-01 + -1.0408429121303095e+00 1.5726658305853576e+00 5.3043868782680148e-01 + -1.2447644329826404e+00 1.8232529219392630e+00 7.5538248922487294e-01 + -1.4296687179658509e+00 2.0213038570991362e+00 1.0380695925249572e+00 + -1.5844916631570067e+00 2.1523436833500198e+00 1.3692491727951199e+00 + -1.7009006026415492e+00 2.2046566600441619e+00 1.7284729115616519e+00 + -1.7760679962325137e+00 2.1739289368855594e+00 2.0886381551954791e+00 + -1.8137188736566017e+00 2.0641488465078841e+00 2.4269523647609512e+00 + -1.8202675852203463e+00 1.8841955581094414e+00 2.7261908713571970e+00 + -1.8044607857262431e+00 1.6450094873109766e+00 2.9747962327397213e+00 + -1.7790300543973805e+00 1.3602080622059471e+00 3.1685189280118413e+00 + -1.7535261801177622e+00 1.0443388338661799e+00 3.3058261957862349e+00 + -1.7219935824566555e+00 6.9684546090705068e-01 3.3890796087269646e+00 + -1.6666705027263444e+00 2.8606855078627258e-01 3.4518283187919105e+00 + -1.5993488741037414e+00 -1.9514724483464385e-01 3.5747599319377481e+00 + -1.6035058158788980e+00 -5.8899440188968333e-01 3.7136905250076238e+00 + id 12976 + loc 7.8473609685897827e-01 7.1778959035873413e-01 377 + blend 0.0000000000000000e+00 + interp 4.1457209872718509e-01:3.7003269692188373e-01:4.2374320688331690e-02:3.8294037248474772e-01:9.1349838033954167e-01:3.7535704028709382e-01:1.5878905423490641e+00:4.1456795300619786e-01:2.0888245759250843e+00:3.5462803715366409e-01:2.9156884539221508e+00:4.1147508811223893e-01:3.3910149313286766e+00 + CVs 20 + -6.4965880026749356e-01 1.8095651043131589e-01 -7.0590618972133889e-01 + -1.1182110243823742e+00 2.0716464587504807e-01 -1.2041604211015193e+00 + -1.5408853818849531e+00 1.7477689253663864e-01 -1.6704523666839410e+00 + -1.9586942945295882e+00 1.2569593707161775e-01 -2.1719580342085725e+00 + -2.3655497056729997e+00 7.3337288217722785e-02 -2.7072067336474714e+00 + -2.7636083194612313e+00 2.8219222891062712e-02 -3.2687684993938122e+00 + -3.1669011032892098e+00 -1.2144167171719067e-02 -3.8501773886411810e+00 + -3.5860877769038688e+00 -6.8423160462716792e-02 -4.4490896826517936e+00 + -4.0240592371307411e+00 -1.7884467085743028e-01 -5.0669349144294262e+00 + -4.4775023568436527e+00 -3.9106014173483761e-01 -5.6935162796137444e+00 + -4.9294981601422760e+00 -7.4714851113417646e-01 -6.2924280098056311e+00 + -5.3472969161164219e+00 -1.2668451695851126e+00 -6.8092891461395766e+00 + -5.6963434535630224e+00 -1.9191746129534479e+00 -7.1939178074953416e+00 + -5.9694352250849576e+00 -2.5986550512078148e+00 -7.4367530775306534e+00 + -6.1965713236457169e+00 -3.1926736580066577e+00 -7.5799524619371592e+00 + -6.4115387601122809e+00 -3.6721549667045368e+00 -7.6679608410522118e+00 + -6.6355639452463162e+00 -4.0707860293448981e+00 -7.7244227277432094e+00 + -6.8682733163522389e+00 -4.4084306446542350e+00 -7.7639640438319573e+00 + -7.0937651872434921e+00 -4.6639870050782939e+00 -7.7907412450966929e+00 + id 12977 + loc 3.2182404398918152e-01 8.8365846872329712e-01 382 + blend 0.0000000000000000e+00 + interp 4.5363723054218930e-01:4.2705060038386694e-01:1.9540130209743367e-01:2.7123109611208235e-01:1.1194120809837287e+00:3.8662256921849714e-01:1.9486586771053682e+00:4.5363269416988389e-01:2.8640452925149784e+00:3.6911238483385855e-01:3.3205412968446235e+00:3.0589819059405732e-01:3.9257951898662795e+00 + CVs 20 + 1.0163672182467829e+00 1.5675668448057650e-01 -5.0335313765340328e-01 + 1.7067822768059235e+00 1.4428393017154595e-01 -8.8601881860533938e-01 + 2.3138483221726496e+00 5.8599996004520871e-02 -1.2400235782025293e+00 + 2.9453312157400289e+00 -5.8125054974749846e-02 -1.5997768065126343e+00 + 3.5845573848619203e+00 -2.0212780796400376e-01 -1.9559939304360661e+00 + 4.2152957112816969e+00 -3.6784188062542522e-01 -2.3073190510902624e+00 + 4.8218303839271801e+00 -5.5262524134701618e-01 -2.6585060639607416e+00 + 5.3891407888298932e+00 -7.6247928216696359e-01 -3.0126032498480084e+00 + 5.9055787646583244e+00 -1.0130540316744987e+00 -3.3697254502795175e+00 + 6.3620470530808193e+00 -1.3254869271435417e+00 -3.7321428349288723e+00 + 6.7451796458364921e+00 -1.7177062857034140e+00 -4.1014150508380132e+00 + 7.0366388591817710e+00 -2.1947389347954340e+00 -4.4700966387421772e+00 + 7.2222961445907377e+00 -2.7490893757469452e+00 -4.8224902297072596e+00 + 7.2961667297637653e+00 -3.3670200020321532e+00 -5.1413908769515082e+00 + 7.2579477426910035e+00 -4.0269244528143799e+00 -5.4099798896042337e+00 + 7.1144992044257140e+00 -4.6945422271928132e+00 -5.6074030531485874e+00 + 6.8853749266980131e+00 -5.3324554281758640e+00 -5.7112072174395356e+00 + 6.6052937765697948e+00 -5.9087529518341295e+00 -5.7123672554704816e+00 + 6.3751670737021833e+00 -6.4723213630216421e+00 -5.7329231963348644e+00 + id 12978 + loc 6.0800719261169434e-01 6.9574403762817383e-01 264 + blend 0.0000000000000000e+00 + interp 9.5059434737677873e-01:5.4140887822697092e-01:9.9327748512846403e-01:2.6109707988921921e-01:1.5562005776725316e+00:2.8195626389700956e-01:2.6038241726770046e+00:9.5058484143330502e-01:2.9791911543419722e+00:7.1598527957890079e-01:3.0091454122076726e+00:4.7387703483771987e-01:3.0115027909872092e+00 + CVs 20 + -8.4182870402719145e-01 4.1875799986169571e-01 -1.8506227220278673e-01 + -1.4640954934404922e+00 6.5661237794522931e-01 -2.1500582961406381e-01 + -2.0359441848904156e+00 7.5800879334650528e-01 -1.3085541150638663e-01 + -2.6265963115946933e+00 7.8979387430028258e-01 2.7292720657522085e-02 + -3.2437328782937009e+00 8.1982929875264210e-01 2.0694408949061172e-01 + -3.9057835177438651e+00 8.7613593182119520e-01 3.4321914503445916e-01 + -4.6123113836865954e+00 9.3864390942376619e-01 3.6612128291365664e-01 + -5.3295991017814437e+00 9.7637771669519513e-01 2.2818661836770016e-01 + -6.0141479524004877e+00 9.7040693482486406e-01 -8.2856231743847264e-02 + -6.6328806838834451e+00 9.0226994344297484e-01 -5.5024571129000743e-01 + -7.1666437297113985e+00 7.4297099624628893e-01 -1.1237381556786472e+00 + -7.5936022899128739e+00 4.6824074142230954e-01 -1.7275319975377688e+00 + -7.8845722445811157e+00 5.9251282578907993e-02 -2.2775228244631576e+00 + -8.0196790983600152e+00 -4.6623091670303562e-01 -2.7060700471407397e+00 + -7.9968268513479011e+00 -1.0424714844695488e+00 -2.9610837615370329e+00 + -7.8851401838721662e+00 -1.5822392693513065e+00 -2.9822608274576314e+00 + -7.8354614630130204e+00 -1.9810171812762389e+00 -2.7492352600240850e+00 + -7.8554612901221255e+00 -2.2922079682656746e+00 -2.4251261551130843e+00 + -7.7956027719142060e+00 -2.9394795991388292e+00 -2.2315255785513299e+00 + id 12979 + loc 8.4877383708953857e-01 1.8855035305023193e-01 395 + blend 0.0000000000000000e+00 + interp 4.5580489750933445e-01:3.3922512296572538e-01:1.4851806356657637e-01:2.9393147993671770e-01:9.9624819089579730e-01:3.8218581383697603e-01:1.5670073929985273e+00:2.5947157267384113e-01:2.0003783866788467e+00:3.7696344608632359e-01:2.4818865707080380e+00:4.5580033946035936e-01:3.0004794259127672e+00:3.1578480394856973e-01:3.7500050717508948e+00 + CVs 20 + -3.9061086486142754e-01 3.7338806081126596e-01 4.4802132651996063e-01 + -7.4042915107071550e-01 6.5580948321951571e-01 8.2680701286055491e-01 + -1.1049495523934671e+00 8.8875351679878434e-01 1.1847473181605381e+00 + -1.5098705667226011e+00 1.0842299252448080e+00 1.5411985560868195e+00 + -1.9508772221934609e+00 1.2345996763841534e+00 1.8915997953218138e+00 + -2.4155845089660382e+00 1.3346244937946352e+00 2.2360951652856040e+00 + -2.8896999250130926e+00 1.3772092098127384e+00 2.5772066409626841e+00 + -3.3591734449798452e+00 1.3478286122409324e+00 2.9110393084697535e+00 + -3.8062091858910723e+00 1.2336340768088307e+00 3.2286214951262746e+00 + -4.2111505836012135e+00 1.0337224915594065e+00 3.5220218566582204e+00 + -4.5574931599479545e+00 7.6209451984910626e-01 3.7794902877816012e+00 + -4.8383669086751668e+00 4.4364178311606262e-01 3.9849464447000020e+00 + -5.0568753370474857e+00 1.0101874788071052e-01 4.1333387168407745e+00 + -5.2181883622627296e+00 -2.5706883286847271e-01 4.2365876010386305e+00 + -5.3257345715731841e+00 -6.2711215437614820e-01 4.3065640912364112e+00 + -5.3779936697627466e+00 -9.8895125067602585e-01 4.3417288235040603e+00 + -5.3790746893268624e+00 -1.3074139219412939e+00 4.3370336729040959e+00 + -5.3413559753440794e+00 -1.5835163021854965e+00 4.3029881620828796e+00 + -5.2270809470596493e+00 -1.9351351623412989e+00 4.2728003745100871e+00 + id 12980 + loc 3.3908557891845703e-01 6.0937613248825073e-01 401 + blend 0.0000000000000000e+00 + interp 3.5172243075449605e-01:2.8255276717565331e-01:1.1177245565933247e-01:3.1822232197606470e-01:1.0232430493173821e+00:3.5171891353018853e-01:1.8245942135913500e+00:2.9106895037772684e-01:2.1693944952886248e+00:3.1193119862264052e-01:2.9795502540827701e+00:2.9799177533878080e-01:3.5415922427129538e+00 + CVs 20 + -7.6074060039424130e-02 3.1147381352694775e-01 -3.1069000657684387e-01 + -1.6040417064530846e-01 6.4853829197792701e-01 -6.2598151299420346e-01 + -2.8178188968938356e-01 9.9246271892503135e-01 -9.3847143018774715e-01 + -4.4643724628935588e-01 1.3171979051484417e+00 -1.2541837028583884e+00 + -6.6263939197077082e-01 1.6034324134633877e+00 -1.5808379453055239e+00 + -9.5077928333727446e-01 1.8342215159497592e+00 -1.9007580184926320e+00 + -1.3216825888778272e+00 1.9936759622449189e+00 -2.1744050359630518e+00 + -1.7591865784743397e+00 2.0704750010915296e+00 -2.3634339787097667e+00 + -2.2267365645701322e+00 2.0668298809253605e+00 -2.4476270424030790e+00 + -2.6912294859237935e+00 2.0034108547961349e+00 -2.4364849416016607e+00 + -3.1419692363152181e+00 1.9026414692779663e+00 -2.3625790247155711e+00 + -3.5909235459816502e+00 1.7702083357681189e+00 -2.2694846145638121e+00 + -4.0509958712207874e+00 1.5969534545048401e+00 -2.1898477572797321e+00 + -4.5065095696237973e+00 1.3889373567450225e+00 -2.1215575791271215e+00 + -4.9515677668682727e+00 1.1632465984604488e+00 -2.0650907925327235e+00 + -5.4473102541464851e+00 8.8520789204591011e-01 -2.0904729012024266e+00 + -6.0473881213785319e+00 5.1023629672611215e-01 -2.3317819299298259e+00 + -6.6386666162399495e+00 1.4465940349664930e-01 -2.8353432030462824e+00 + -6.9717735645294319e+00 -3.6092808836938550e-02 -3.0715677442536662e+00 + id 12981 + loc 3.3380430936813354e-01 3.9815816283226013e-01 402 + blend 0.0000000000000000e+00 + interp 4.3126302377702885e-01:2.7005299252293130e-01:7.0769241870606114e-01:4.3125871114679110e-01:1.0151844095945504e+00:3.6609711341337337e-01:1.7804074089790909e+00:3.1489582908138203e-01:2.3551737913820836e+00:3.7604805786505163e-01:3.2696851242596363e+00:2.9968564191252262e-01:3.9981146743048068e+00 + CVs 20 + -1.7573941368453413e-01 3.7829732676418576e-01 1.3517327629484233e-01 + -3.5425578800523772e-01 7.3580494630924398e-01 2.6005896260071548e-01 + -5.6364944046164256e-01 1.0807183717509974e+00 3.6230144377395646e-01 + -8.1713398112862246e-01 1.4108283718229782e+00 4.4811481106928469e-01 + -1.1170415905214246e+00 1.7134477385787050e+00 5.3473705307950514e-01 + -1.4654830245986872e+00 1.9736872351373169e+00 6.3157240608898557e-01 + -1.8639649147563844e+00 2.1765915938386349e+00 7.3760853022366279e-01 + -2.3088774907388756e+00 2.3066476483549376e+00 8.5194614161118620e-01 + -2.7897275731397784e+00 2.3492244259805379e+00 9.7771718417524978e-01 + -3.2889443335266302e+00 2.2913116480665616e+00 1.1102693050268850e+00 + -3.7730807416878624e+00 2.1209186685361034e+00 1.2357177826267873e+00 + -4.1845908351055066e+00 1.8350247032973446e+00 1.3502493204062711e+00 + -4.4655826457392847e+00 1.4581562206265732e+00 1.4702559140135187e+00 + -4.6083381288384748e+00 1.0475060598211612e+00 1.6273065537304705e+00 + -4.6541199512430769e+00 6.6909860506440477e-01 1.8664319792089608e+00 + -4.6601807808502196e+00 3.8856317417456254e-01 2.2346662748643515e+00 + -4.6856863243523890e+00 2.9307048553732351e-01 2.7697859508345442e+00 + -4.7251166839793193e+00 4.5348427596831054e-01 3.3844358064061204e+00 + -4.8835566266299777e+00 3.4590668405098657e-01 3.7876116602879137e+00 + id 12982 + loc 9.4234430789947510e-01 3.6479970812797546e-01 406 + blend 0.0000000000000000e+00 + interp 4.3378628806541120e-01:4.2255570456737984e-01:1.4450355426675887e-01:2.4853333160348098e-01:9.6580929105155577e-01:4.3321506324574471e-01:1.3784796514565412e+00:2.5008777714719660e-01:2.3497575051906452e+00:2.2988411029344180e-01:3.2689277991366872e+00:4.3378195020253058e-01:3.9682754212598836e+00 + CVs 20 + -2.1191083673820782e-01 1.8664346142598578e-01 3.7441132439525418e-02 + -3.5566478744765717e-01 2.9694933680151936e-01 5.9021566805119947e-02 + -4.6637467790371184e-01 3.6022273164444768e-01 7.8418572287597438e-02 + -5.8079171344494906e-01 4.0206258724940180e-01 1.1129517123516605e-01 + -6.9370039038428877e-01 4.2112594810954807e-01 1.5773409012534900e-01 + -7.9933978364887470e-01 4.1771526144376103e-01 2.1723122388762303e-01 + -8.9337369669131617e-01 3.9428190128416601e-01 2.8924626848817986e-01 + -9.7451945587319644e-01 3.5491153345207943e-01 3.7356016339615705e-01 + -1.0413167807317827e+00 3.0452339037366299e-01 4.6876125036356087e-01 + -1.0861601999308963e+00 2.4929413568722930e-01 5.6918264353051318e-01 + -1.1009446344604914e+00 1.9676358698546226e-01 6.6736374030592260e-01 + -1.0907885817123666e+00 1.5226892998849295e-01 7.6148402000623738e-01 + -1.0729344880413338e+00 1.1553306411850461e-01 8.5730976460723940e-01 + -1.0600537493216280e+00 8.4780010646970161e-02 9.5896906939305193e-01 + -1.0517141837653028e+00 6.2722355281326969e-02 1.0602494485916782e+00 + -1.0438640651411704e+00 5.4104045972183656e-02 1.1511994561889893e+00 + -1.0404910102784897e+00 5.9968810488214341e-02 1.2310025743761559e+00 + -1.0517542805757452e+00 7.6800888688198121e-02 1.3081792973781143e+00 + -1.1159412720556858e+00 3.7823502898988060e-02 1.4130514428388381e+00 + id 12983 + loc 1.2816423177719116e-01 5.1752430200576782e-01 380 + blend 0.0000000000000000e+00 + interp 3.7550926983182387e-01:3.7550551473912558e-01:3.1549353858302043e-02:2.8655210724249408e-01:7.7421578567881988e-01:3.1285871785773833e-01:9.7538606846641673e-01:2.9808234437356668e-01:1.2692674389830638e+00:3.0246713008654480e-01:2.5980273460036591e+00:3.3187690761739214e-01:3.5110130661763836e+00 + CVs 20 + -4.6044468841140607e-01 3.0903001957682358e-01 -3.8314005390489914e-01 + -8.4509242674502949e-01 5.3349962962544173e-01 -6.7416844830421729e-01 + -1.2062134051714044e+00 7.1394431925263280e-01 -9.4264285466610431e-01 + -1.5636213450655938e+00 8.7096931961583479e-01 -1.2180709534549521e+00 + -1.9101520088631945e+00 1.0043796257478408e+00 -1.4993269464588939e+00 + -2.2394637931860881e+00 1.1105838915280257e+00 -1.7809705314842663e+00 + -2.5513467105796064e+00 1.1848192881938386e+00 -2.0553645409739092e+00 + -2.8452073887750675e+00 1.2260151445235321e+00 -2.3174295593284193e+00 + -3.1119667781209839e+00 1.2364521849846497e+00 -2.5725853855049459e+00 + -3.3350784315215032e+00 1.2230120999982588e+00 -2.8313163817886613e+00 + -3.5094067218499951e+00 1.2034883841062256e+00 -3.0989238496715990e+00 + -3.6488012134015015e+00 1.1944537413431919e+00 -3.3821806467357369e+00 + -3.7623417569171735e+00 1.1675141660787647e+00 -3.6896646325069797e+00 + -3.8242402028102571e+00 1.0302775010947394e+00 -3.9925384276999432e+00 + -3.8018651869049842e+00 7.2418831522867988e-01 -4.2480893512087539e+00 + -3.6978321588132257e+00 2.7085948222426914e-01 -4.4951413177582884e+00 + -3.5525788669561020e+00 -2.8397724733344676e-01 -4.8204057628067041e+00 + -3.4755347538624388e+00 -8.5926718638692190e-01 -5.2310996692082981e+00 + -3.6092193112539324e+00 -1.1554656297704451e+00 -5.5170010507346108e+00 + id 12984 + loc 6.4932775497436523e-01 7.0436859130859375e-01 373 + blend 0.0000000000000000e+00 + interp 4.6707620218944457e-01:4.2942902085954809e-01:6.5202488127444935e-01:2.8287239181582269e-01:1.0008668936397267e+00:3.5449699591262279e-01:1.6263935516021817e+00:4.6707153142742269e-01:2.1798562175365332e+00:3.6799961754766441e-01:2.8102308810653298e+00:4.3244006851560396e-01:3.0948244898777602e+00:3.9383823431409465e-01:3.9199993847511632e+00 + CVs 20 + -2.8222909511297223e-01 3.6948269769920028e-01 -1.3666509191046108e-01 + -5.3115787146790350e-01 7.4746550372813725e-01 -2.9229110777736966e-01 + -7.3226210023166849e-01 1.1365253401831492e+00 -4.6623631085170281e-01 + -8.7285489226516022e-01 1.5360231132695146e+00 -6.5686177515737221e-01 + -9.5364480724045253e-01 1.9376197444875827e+00 -8.6921869029510712e-01 + -9.9751141184066616e-01 2.3222691107676963e+00 -1.1264190784067551e+00 + -1.0309850863245051e+00 2.6569235057630203e+00 -1.4557971597152717e+00 + -1.0638610801643362e+00 2.9117980594716619e+00 -1.8570022273467490e+00 + -1.0870662934492648e+00 3.0786973077821043e+00 -2.3046765374942755e+00 + -1.0819402701558862e+00 3.1635306484573062e+00 -2.7680739612776124e+00 + -1.0341257643924422e+00 3.1672061534300244e+00 -3.2256382818320564e+00 + -9.4833708726551658e-01 3.0626663205247340e+00 -3.6714721550779892e+00 + -8.5610587480874445e-01 2.8181631011617325e+00 -4.0897876696352231e+00 + -8.2140526884705511e-01 2.4732728286046131e+00 -4.4609656802523210e+00 + -9.1104192224493286e-01 2.1137208082459873e+00 -4.8008672489599471e+00 + -1.1484510513000923e+00 1.8107589118436591e+00 -5.1111140286908618e+00 + -1.5105144943270226e+00 1.6166553239763437e+00 -5.3695426351956721e+00 + -1.9239776932299191e+00 1.5499664228044265e+00 -5.5539011730850021e+00 + -2.1374754702818857e+00 1.4859935310879124e+00 -5.6878347617967639e+00 + id 12985 + loc 9.4632178544998169e-01 6.7449361085891724e-01 1078 + blend 0.0000000000000000e+00 + interp 4.8225333974290241e-01:3.4482357139092373e-01:4.9371954358640413e-01:4.8224851720950501e-01:1.0043095082888964e+00:3.5584285184058012e-01:1.6237885801373220e+00:2.6257911763375819e-01:2.7668289141661520e+00:2.9005810719521780e-01:3.5105359045839402e+00 + CVs 20 + 2.1460454332249548e-01 2.4854088571672311e-01 -1.5724039771131942e-01 + 4.1975924220426108e-01 5.2017750046595257e-01 -2.9217467698730726e-01 + 6.2137201369830897e-01 7.9700846411181936e-01 -4.3897104420514155e-01 + 8.2208851419279605e-01 1.0625179935855171e+00 -6.2380909859059941e-01 + 1.0192674152757053e+00 1.3071351370602611e+00 -8.5863627098491824e-01 + 1.2076921949093551e+00 1.5181062876011793e+00 -1.1508120284371191e+00 + 1.3787113595771778e+00 1.6809088533074830e+00 -1.5005987278587294e+00 + 1.5198897047632032e+00 1.7820343699947445e+00 -1.8993059951807392e+00 + 1.6163916944500616e+00 1.8123249394363754e+00 -2.3288624931052144e+00 + 1.6558592232472693e+00 1.7691534328605791e+00 -2.7650949124742028e+00 + 1.6344318318232243e+00 1.6566830447780403e+00 -3.1824629417924690e+00 + 1.5568408474476023e+00 1.4838452330497116e+00 -3.5576814043612601e+00 + 1.4341563160078377e+00 1.2629489981014892e+00 -3.8720070817112582e+00 + 1.2890912534602343e+00 1.0229045182213348e+00 -4.1030150981383420e+00 + 1.1589604683534789e+00 8.1974326068166503e-01 -4.2210950909874576e+00 + 1.0712750749713531e+00 6.7979043854996601e-01 -4.1968496890181362e+00 + 1.0007984465494069e+00 5.2243186454039825e-01 -4.0772640209546003e+00 + 8.9926319667493027e-01 2.7455400450049061e-01 -3.9850744680156951e+00 + 8.6656681775764799e-01 2.9615832298054112e-01 -4.1312724359668849e+00 + id 12986 + loc 3.1782811880111694e-01 5.0595629215240479e-01 415 + blend 0.0000000000000000e+00 + interp 5.1385429301063457e-01:4.3625675496169458e-01:6.4775260508078691e-03:4.8961344933653944e-01:4.2162943950531873e-01:4.3329336235064003e-01:9.4652246941285101e-01:4.0975757399653390e-01:1.3465417275661964e+00:4.2962484945552154e-01:1.9776388294181095e+00:2.6109194916428985e-01:2.2349226249757428e+00:4.2268586220253501e-01:2.8836133174410548e+00:5.1384915446770452e-01:3.3767289581153306e+00 + CVs 20 + 2.1012986105796749e-01 2.2447788737316560e-01 1.8234224225673898e-01 + 3.5405075547000064e-01 3.8624554684702633e-01 2.9462532794035856e-01 + 4.7293200104879130e-01 5.2211865766550092e-01 3.8061326246315991e-01 + 5.9713091944576391e-01 6.6435226282349225e-01 4.7924961269453298e-01 + 7.2922084627230144e-01 8.1153606403748979e-01 5.9177136851414480e-01 + 8.7090274894275554e-01 9.6037615844067992e-01 7.1884892057926841e-01 + 1.0229626221589139e+00 1.1071435902801219e+00 8.6359609833741302e-01 + 1.1849009811414115e+00 1.2476805954957970e+00 1.0306472712425769e+00 + 1.3549645341486880e+00 1.3774335885991920e+00 1.2214399397671845e+00 + 1.5305591740695941e+00 1.4921929806446199e+00 1.4338340374028826e+00 + 1.7071939286774136e+00 1.5893697690643454e+00 1.6708373151200411e+00 + 1.8776790309654496e+00 1.6682993049047066e+00 1.9520383425626548e+00 + 2.0438182562713894e+00 1.7248738003776027e+00 2.2976958789011994e+00 + 2.2323678869440218e+00 1.7481164488998624e+00 2.6898094532162879e+00 + 2.4712643315066982e+00 1.7306717492442834e+00 3.0721989055674590e+00 + 2.7588923140416575e+00 1.6760922108912402e+00 3.4041000645814443e+00 + 3.0784610224130917e+00 1.5891673336188128e+00 3.6828810225154256e+00 + 3.4155290517160615e+00 1.4731749637426472e+00 3.9126961457150742e+00 + 3.6337840995680901e+00 1.4005581053002636e+00 3.9565238132796443e+00 + id 12987 + loc 6.7387837171554565e-01 4.8373687267303467e-01 411 + blend 0.0000000000000000e+00 + interp 3.1673926566131400e-01:3.0533825486516369e-01:3.4953807974852469e-01:2.9292774033516294e-01:1.0268126757470717e+00:2.6718593626835224e-01:1.9690528110675700e+00:3.1673609826865740e-01:2.8196050645891146e+00:2.9825943441597857e-01:3.5722232064439066e+00 + CVs 20 + -8.0459309384005551e-01 2.4010805660278389e-01 1.5157059105041248e-01 + -1.4321438073501407e+00 3.4181867523669945e-01 2.9131580174111066e-01 + -2.0188160045992953e+00 3.8466815889692141e-01 4.1371647004402123e-01 + -2.6232185229760923e+00 3.8907087309237520e-01 5.2298766551857190e-01 + -3.2266565337021418e+00 3.4657605732235686e-01 6.2053169206778169e-01 + -3.8096227323153586e+00 2.5261829098608013e-01 7.1396624605156833e-01 + -4.3539753019571963e+00 1.0413253390344601e-01 8.1094199244820553e-01 + -4.8426801028505118e+00 -1.0120229476063169e-01 9.1587367551852772e-01 + -5.2578787797230389e+00 -3.6051978318027622e-01 1.0333600740725668e+00 + -5.5794432670822047e+00 -6.6101015710329469e-01 1.1676477972510413e+00 + -5.7954251568570125e+00 -9.8012970643295083e-01 1.3152510602232519e+00 + -5.9171262639655140e+00 -1.2974939678074142e+00 1.4658033868146896e+00 + -5.9652422695685452e+00 -1.6010464043031609e+00 1.6116332897428496e+00 + -5.9491925726521711e+00 -1.8715401124143753e+00 1.7488613109523925e+00 + -5.8780353046232889e+00 -2.0862079086961618e+00 1.8748547648059335e+00 + -5.7681173413800639e+00 -2.2321286640853097e+00 1.9905307102863707e+00 + -5.6408975269833554e+00 -2.3095433078484220e+00 2.1021218433110374e+00 + -5.5141778580981065e+00 -2.3308460340354955e+00 2.2042906295511848e+00 + -5.3281309169411522e+00 -2.4766047062953875e+00 2.2977940720968291e+00 + id 12988 + loc 5.3659331798553467e-01 8.8596820831298828e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4311791813887158e-01:3.7627207381205924e-01:9.5803700386880541e-01:3.2419012248815099e-01:1.6667580262995716e+00:4.3937969251161629e-01:2.0059435479726280e+00:3.1576989462895860e-01:2.6101721253516557e+00:4.4311348695969022e-01:3.1847533460536561e+00:3.1907676859632422e-01:3.9998019637229225e+00 + CVs 20 + 1.4303346253938090e-01 3.4771255557998249e-01 -2.7052949893667189e-01 + 2.6704003836872919e-01 6.7796104872916318e-01 -5.5377483225182622e-01 + 3.7803579960505335e-01 9.8392766318817071e-01 -8.3975705383847510e-01 + 4.7726522303444618e-01 1.2603475600548333e+00 -1.1232663984874087e+00 + 5.6388311107736422e-01 1.5044657327925146e+00 -1.4004440746774254e+00 + 6.3977330671067689e-01 1.7166612771172420e+00 -1.6683398870769994e+00 + 7.1570145578140065e-01 1.9032945263255683e+00 -1.9350346099218489e+00 + 8.1303995094688253e-01 2.0680480188142143e+00 -2.2189180202356700e+00 + 9.5668835155441523e-01 2.2007284893003169e+00 -2.5318814152959792e+00 + 1.1633725494355531e+00 2.2815878321329697e+00 -2.8689163996017673e+00 + 1.4354258582253183e+00 2.2924477768883804e+00 -3.2152964413487872e+00 + 1.7624513199824918e+00 2.2264371802132770e+00 -3.5549370545912931e+00 + 2.1265835723949746e+00 2.0990817438311145e+00 -3.8759934353758583e+00 + 2.5021260123172224e+00 1.9302461405444573e+00 -4.1812074294450401e+00 + 2.8406909952366459e+00 1.7169937694740312e+00 -4.4930386316721238e+00 + 3.0705389036073365e+00 1.4691028033994034e+00 -4.8381761860507329e+00 + 3.1370636334698538e+00 1.2436468312358879e+00 -5.2347845325034319e+00 + 3.0443758901740843e+00 1.0660049819905704e+00 -5.7086283081795495e+00 + 2.9165505742757483e+00 7.8611998465018473e-01 -6.3334584964692322e+00 + id 12989 + loc 1.7784482240676880e-01 6.2305283546447754e-01 417 + blend 0.0000000000000000e+00 + interp 7.2388738770351035e-01:3.2340584994807436e-01:3.5702331758795713e-01:2.9271518633713567e-01:9.9768152400785814e-01:3.9897940821740008e-01:1.6466299374334159e+00:3.1397385601623490e-01:2.1606908971463175e+00:5.8065018383438316e-01:2.6075116416915707e+00:7.2388014882963336e-01:3.9978175594096994e+00 + CVs 20 + -6.3788943884229843e-02 2.1949741556870089e-01 -2.7892379833209385e-01 + -7.7130100619557634e-02 3.8368628058755616e-01 -4.9139628801337482e-01 + -9.2957188976940081e-02 4.9805519846861757e-01 -6.9333048662581753e-01 + -1.2617575203387169e-01 5.8114687812835264e-01 -9.0920202281431461e-01 + -1.7190722973987010e-01 6.2843782314629559e-01 -1.1336801721744512e+00 + -2.2570475112238603e-01 6.3812737949398990e-01 -1.3603075907504356e+00 + -2.8313373574418066e-01 6.1196670404590559e-01 -1.5824258791630592e+00 + -3.4001766693383345e-01 5.5519918626435993e-01 -1.7943920626211360e+00 + -3.9324940966157157e-01 4.7212114918142634e-01 -1.9911074331945426e+00 + -4.4275066722698508e-01 3.6248851783416391e-01 -2.1665005233000532e+00 + -4.9067919655111297e-01 2.2757568188143973e-01 -2.3159999478714397e+00 + -5.3692726740115138e-01 7.6216467335379789e-02 -2.4409738352561714e+00 + -5.7875952431880751e-01 -8.0871625058581920e-02 -2.5469342572333318e+00 + -6.1468307834646818e-01 -2.3814252819764326e-01 -2.6375661560485959e+00 + -6.4676282370252569e-01 -3.9471919329010574e-01 -2.7136825158862488e+00 + -6.7713278095135976e-01 -5.5038032359878297e-01 -2.7757970911281911e+00 + -7.0202270925949395e-01 -7.0217503693271510e-01 -2.8236470043294899e+00 + -7.1327573074543738e-01 -8.4497900661468250e-01 -2.8559998874747423e+00 + -7.5488838599838870e-01 -9.7617401278040705e-01 -2.9300652201210111e+00 + id 12990 + loc 9.3482571840286255e-01 7.5962889194488525e-01 1081 + blend 0.0000000000000000e+00 + interp 5.4969976948443244e-01:3.2621241528395234e-01:1.0997885980232980e-01:3.7857590605492381e-01:8.5118080371253502e-01:2.8545463722169268e-01:1.3651600318085446e+00:4.8757393742884869e-01:1.9429346751998922e+00:5.4969427248673763e-01:2.1273857511243865e+00:3.8428602762358938e-01:2.8516918682033374e+00:3.3740669485938962e-01:3.4481766778520706e+00 + CVs 20 + 1.1064237861890411e-01 5.0290418589632702e-01 3.1564364580689291e-01 + 2.5705720267195181e-01 8.9191361527981905e-01 4.9308252164748989e-01 + 4.1981009877429404e-01 1.2329231605551694e+00 6.2657634516630378e-01 + 5.9136321199839781e-01 1.5436316970348853e+00 7.4595400384002808e-01 + 7.6964720381116070e-01 1.8170110744614758e+00 8.4450795709350945e-01 + 9.4964612074357324e-01 2.0434081440990743e+00 9.1047659684859894e-01 + 1.1241156589424470e+00 2.2127584357105454e+00 9.3208700657883159e-01 + 1.2838380020499172e+00 2.3174495509882780e+00 9.0823518094059419e-01 + 1.4195489961259118e+00 2.3559126544498907e+00 8.5229007928924183e-01 + 1.5321161929616542e+00 2.3404068377687564e+00 7.8174491084094033e-01 + 1.6353945477120404e+00 2.2871327811957927e+00 6.9905839781837975e-01 + 1.7409054624676876e+00 2.1988549697906863e+00 5.9715266699917335e-01 + 1.8525048241653352e+00 2.0719384608619302e+00 4.7581448891538258e-01 + 1.9718656425812104e+00 1.9073578241663689e+00 3.4411300511162890e-01 + 2.0996038143418465e+00 1.7149659516011511e+00 2.2328948714677727e-01 + 2.2319534071444380e+00 1.5165522381147241e+00 1.5082504659637841e-01 + 2.3636412138630742e+00 1.3235036472157624e+00 1.4654447897397110e-01 + 2.4961828892911395e+00 1.0770217342054254e+00 1.9550926782755462e-01 + 2.6299312207745440e+00 7.0593281486172088e-01 2.7631425189583786e-01 + id 12991 + loc 6.2648695707321167e-01 4.7145563364028931e-01 409 + blend 0.0000000000000000e+00 + interp 5.3579238507662819e-01:3.1218072373563194e-01:2.1920499594176490e-01:3.4302951489907391e-01:1.0034893292127876e+00:5.3578702715277748e-01:1.7724903388337594e+00:3.1962481604647119e-01:2.2805880224586352e+00:3.7286752583539046e-01:2.9999969756938420e+00:3.7389511392033520e-01:3.5817678733277849e+00 + CVs 20 + -3.0852376968230905e-01 6.6764672212394502e-02 1.2458117848027175e-01 + -5.9183841695382522e-01 1.2517240243160893e-01 2.6209473410585982e-01 + -8.7669888960852083e-01 1.8845078740105253e-01 3.9627952289188101e-01 + -1.1715055626999242e+00 2.6224921689059805e-01 5.1429133720867992e-01 + -1.4713776004107881e+00 3.4428501542110057e-01 6.1741882301286533e-01 + -1.7727584277610720e+00 4.3279700780814168e-01 7.0772718667622858e-01 + -2.0731195618878364e+00 5.2733206759993700e-01 7.8626819592381059e-01 + -2.3724902281691813e+00 6.2641197204785048e-01 8.5321849988039822e-01 + -2.6750545898724685e+00 7.2489337748967164e-01 9.0781770188497490e-01 + -2.9853367625266931e+00 8.1465533601204054e-01 9.4959754807531560e-01 + -3.3049630753694754e+00 8.8619482378666170e-01 9.8143180756979254e-01 + -3.6341186417204385e+00 9.2769897531428747e-01 1.0100135634815803e+00 + -3.9707441509022932e+00 9.2812086836707053e-01 1.0421194457449938e+00 + -4.3104070975679676e+00 8.8333469188945357e-01 1.0813784875426167e+00 + -4.6483822953444101e+00 7.9513355214596038e-01 1.1290516892397293e+00 + -4.9813275828739192e+00 6.6650897767810280e-01 1.1876029792075582e+00 + -5.3059044166172491e+00 4.9913682319761676e-01 1.2605242862670298e+00 + -5.6142437467035293e+00 2.9822534135131162e-01 1.3434347692105923e+00 + -5.8161999732325231e+00 1.4565500061649672e-01 1.3951046711537622e+00 + id 12992 + loc 7.6471918821334839e-01 7.2587686777114868e-01 399 + blend 0.0000000000000000e+00 + interp 4.1631380998870221e-01:3.4577273981155704e-01:1.8453540815440805e-01:3.7626260171844950e-01:9.7751002337926107e-01:2.6111760377811399e-01:1.3508877311822731e+00:2.8288312044488068e-01:2.0893609892639140e+00:4.0151872866403360e-01:2.7417122537355638e+00:4.1630964685060234e-01:3.3315502228931737e+00:3.7214882605786714e-01:3.9229532231188395e+00 + CVs 20 + -2.1067266507226706e-01 3.4280010296024038e-01 -2.4185861479425874e-01 + -3.9852532163494614e-01 6.8263537713924904e-01 -5.0539227654422769e-01 + -5.9274134799808431e-01 1.0055684276508758e+00 -8.0818322015156396e-01 + -8.1152500861321175e-01 1.2928791806517437e+00 -1.1514562239808077e+00 + -1.0627511644065264e+00 1.5209054677937532e+00 -1.5247779036838502e+00 + -1.3462081193756150e+00 1.6675922280103141e+00 -1.9104560554428565e+00 + -1.6552091653030783e+00 1.7252600244944676e+00 -2.2852158807809433e+00 + -1.9813464375545713e+00 1.7076611250415352e+00 -2.6252386118946083e+00 + -2.3135621828667503e+00 1.6328385697483254e+00 -2.9144900382327474e+00 + -2.6369915416532019e+00 1.5096443535653095e+00 -3.1476180944162584e+00 + -2.9389568193474465e+00 1.3529907115063251e+00 -3.3238106660750359e+00 + -3.2073049543946643e+00 1.1894623914345965e+00 -3.4393814034177161e+00 + -3.4240457559491628e+00 1.0347515865363413e+00 -3.4918328056383330e+00 + -3.5901945230654060e+00 8.8706815220740010e-01 -3.4994168063771451e+00 + -3.7300659168040458e+00 7.4220171428756998e-01 -3.4870192941753735e+00 + -3.8138077214028776e+00 5.6202059074860744e-01 -3.4518987226714222e+00 + -3.7641822607793256e+00 2.1675912431892119e-01 -3.3762013424513579e+00 + -3.7382097129432630e+00 -3.6574801550160729e-01 -3.2904245473987284e+00 + -4.0295457968567412e+00 -4.9593363979917138e-01 -3.2360618518859421e+00 + id 12993 + loc 4.0497785806655884e-01 8.9184510707855225e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5572148324402717e-01:3.6409279216132073e-01:5.0652457139621998e-01:3.5299059634393909e-01:1.1297985500032246e+00:3.1849563987947788e-01:1.9955533694074592e+00:4.4279648821189288e-01:2.2562809054626545e+00:4.5571692602919472e-01:2.6825870509341549e+00:3.2138217667041402e-01:3.4392985904083782e+00 + CVs 20 + -1.2468874668220162e-01 2.7867846167646471e-01 5.6692996869233597e-02 + -2.0187311577853351e-01 4.9059057891574387e-01 -1.4458059309300525e-02 + -3.1876062214381695e-01 6.9354462484888735e-01 -1.0866795789511768e-01 + -4.8612842875064255e-01 8.8228917531444551e-01 -2.0463662182202871e-01 + -7.0230845211323445e-01 1.0471719397134489e+00 -3.0358747220598359e-01 + -9.6396391378743285e-01 1.1818339856278617e+00 -4.0396994580111795e-01 + -1.2673425038885984e+00 1.2833241394408155e+00 -5.0161090386082663e-01 + -1.6091953940104369e+00 1.3512652080774037e+00 -5.9018826241961764e-01 + -1.9860017898199938e+00 1.3859971212994566e+00 -6.6236778501148375e-01 + -2.3931390357065165e+00 1.3867096389262645e+00 -7.1076522389156338e-01 + -2.8243364841207250e+00 1.3501672342801296e+00 -7.2950790174843871e-01 + -3.2706954179307490e+00 1.2703198702703642e+00 -7.1617127546941339e-01 + -3.7200817897382081e+00 1.1465994538024722e+00 -6.6865746614551114e-01 + -4.1584676281358588e+00 1.0011201547328901e+00 -5.7867684469167535e-01 + -4.5758106608128557e+00 8.7412904275561421e-01 -4.3430783197713463e-01 + -4.9666239339780036e+00 7.8813824352990669e-01 -2.3096482751467753e-01 + -5.3205656879896273e+00 7.4012257918779234e-01 2.4497545980901758e-02 + -5.6264732165611164e+00 7.2074920403916032e-01 3.1262878543870914e-01 + -5.9283926116703993e+00 6.0327172951435337e-01 4.9583500278654413e-01 + id 12994 + loc 7.5313800573348999e-01 9.5125325024127960e-02 393 + blend 0.0000000000000000e+00 + interp 5.6847334859615506e-01:2.7122318182756833e-01:2.0423269264942645e-01:3.6822155861885703e-01:9.6887800881639474e-01:3.0872520476160048e-01:1.5296686027726480e+00:5.6846766386266911e-01:1.9999658837351957e+00:4.5082871345134018e-01:2.6983038255106906e+00:4.4476257331782798e-01:2.9998561343717709e+00:3.8814761331485481e-01:3.3316391297631021e+00 + CVs 20 + 4.6967174192519157e-01 3.9557940347070653e-01 1.2530370813696728e-01 + 9.1321202892243614e-01 7.9515380681376890e-01 2.1583026080512813e-01 + 1.3422079465793186e+00 1.2252357379475398e+00 3.1118971712304488e-01 + 1.7682400452532205e+00 1.6815491103214593e+00 4.6298141802621801e-01 + 2.1903123682366310e+00 2.1315567700886131e+00 7.2111063271182507e-01 + 2.5894144887511006e+00 2.5340585590270392e+00 1.0986292091422125e+00 + 2.9437615765953744e+00 2.8563338622650276e+00 1.5602431541106023e+00 + 3.2441111503977025e+00 3.0841471918075314e+00 2.0466917647257477e+00 + 3.4915680643317959e+00 3.2263791068944219e+00 2.5094093665830526e+00 + 3.6870581008888670e+00 3.3105315153392918e+00 2.9271706668054773e+00 + 3.8321549951713600e+00 3.3710087993672229e+00 3.3128199428098570e+00 + 3.9390842797525880e+00 3.4281105935647687e+00 3.7121522960589415e+00 + 4.0248309352747427e+00 3.4712255750020580e+00 4.1755708084573255e+00 + 4.1010857888555137e+00 3.4575589623119143e+00 4.7375521481132665e+00 + 4.1756810133036035e+00 3.3077776226720013e+00 5.3853337998349318e+00 + 4.2402627116433038e+00 2.9486251794122076e+00 6.0162761032033920e+00 + 4.3380051279643084e+00 2.3797879650801415e+00 6.5003526814426253e+00 + 4.5933321354312326e+00 1.7052035608881244e+00 6.7141352747275338e+00 + 5.0160588684987246e+00 1.1262021871811676e+00 6.5979969399850953e+00 + id 12995 + loc 1.5156152844429016e-01 3.5507187247276306e-01 382 + blend 0.0000000000000000e+00 + interp 4.9204812395280717e-01:3.3295296101881594e-01:3.3949942717649095e-01:4.5896179429867878e-01:9.4903386164963188e-01:2.9207387875044805e-01:1.4671778514925595e+00:4.4795754340691391e-01:1.9579735442216140e+00:4.5741649349849878e-01:2.1123466842229472e+00:4.9204320347156766e-01:2.4046107266785071e+00:3.6582544853691074e-01:2.9854884176675354e+00:2.7257622826637778e-01:3.8528972166894602e+00 + CVs 20 + -4.7777413427592863e-01 1.4816821942483210e-01 -7.9696330915226055e-01 + -8.1707479841893638e-01 1.6693346188972952e-01 -1.3376200634189792e+00 + -1.1251606757569057e+00 1.4168482609138511e-01 -1.7992873552462725e+00 + -1.4440744042695748e+00 1.0494842000209781e-01 -2.2459745471740260e+00 + -1.7797548043059714e+00 5.6912003586333970e-02 -2.6761611511718195e+00 + -2.1388930820384502e+00 -3.6894524658328542e-03 -3.0934944633048449e+00 + -2.5258717915409612e+00 -7.9736531939693878e-02 -3.5019120978030838e+00 + -2.9394141864037229e+00 -1.7988020705953889e-01 -3.9052955935475664e+00 + -3.3704581013843802e+00 -3.2310838444163736e-01 -4.3088632436456997e+00 + -3.8052893005635120e+00 -5.3431643792736683e-01 -4.7108280281292334e+00 + -4.2324611678261128e+00 -8.3328344205100269e-01 -5.0949826775813820e+00 + -4.6427873403788560e+00 -1.2259971450782621e+00 -5.4422192103242297e+00 + -5.0282980919955431e+00 -1.7031516717249950e+00 -5.7442542202246187e+00 + -5.3860167966352455e+00 -2.2498414166671163e+00 -5.9996765174553861e+00 + -5.7055678698563499e+00 -2.8627061537954241e+00 -6.2035483848592445e+00 + -5.9709134421617174e+00 -3.5344681318023192e+00 -6.3440073201986165e+00 + -6.1575694612382854e+00 -4.2431457291569323e+00 -6.4147884934051245e+00 + -6.2541789454980128e+00 -4.9530673688820173e+00 -6.4353621918203405e+00 + -6.3619422755382669e+00 -5.6130739926579203e+00 -6.4961185418069753e+00 + id 12996 + loc 1.2855108082294464e-01 9.5897424221038818e-01 264 + blend 0.0000000000000000e+00 + interp 4.5466003638381319e-01:4.5465548978344938e-01:8.8330076430500992e-01:2.0196989652589742e-01:1.7251947966475814e+00:2.9365715356761596e-01:2.6606874932304443e+00:4.0884355410358492e-01:3.0203881605439227e+00:2.4535800938272462e-01:3.8080849786078899e+00 + CVs 20 + -7.2353325727331641e-01 4.1501505178505849e-01 -1.0704005550067706e-01 + -1.3100492703953204e+00 6.6683964308505761e-01 -1.2227117937245466e-01 + -1.8886606611034664e+00 7.6621099310432272e-01 -4.7963134862712364e-02 + -2.5016756929581012e+00 7.7895940098750938e-01 9.1648162561496549e-02 + -3.1353351722804303e+00 7.8381174686329358e-01 2.5133368761327102e-01 + -3.7884300009358292e+00 8.1593420394534721e-01 3.7259168152195765e-01 + -4.4595410140207141e+00 8.6679073295561149e-01 3.9980242636775554e-01 + -5.1216020494050118e+00 9.1985825164062041e-01 3.0142080405587857e-01 + -5.7419382554895062e+00 9.6324785662351919e-01 8.2861210884204839e-02 + -6.3036501559704421e+00 9.8180539866518668e-01 -2.2604545204043913e-01 + -6.7996519703179450e+00 9.5561122582308355e-01 -5.8700415279424245e-01 + -7.2211785973283806e+00 8.7135206233786322e-01 -9.6202745384139066e-01 + -7.5614887069070944e+00 7.2852999079882874e-01 -1.3258885649716459e+00 + -7.8214464516768150e+00 5.3010957644356083e-01 -1.6741715289941785e+00 + -7.9933247914139063e+00 2.8366226567178421e-01 -1.9957922017781540e+00 + -8.0583823649713366e+00 4.2126724739432575e-02 -2.2417019191853216e+00 + -8.0242051663832115e+00 -9.5302894877358213e-02 -2.4053128398961898e+00 + -7.9380614948769930e+00 -2.5089733381064727e-01 -2.5406053899420415e+00 + -7.9523564559328950e+00 -7.7269263667174481e-01 -2.5286144736885507e+00 + id 12997 + loc 4.7233879566192627e-01 9.5503324270248413e-01 395 + blend 0.0000000000000000e+00 + interp 4.4402660663372640e-01:3.9792860276642650e-01:3.7631232942488246e-01:4.4402216636766006e-01:9.9923864679867158e-01:3.2212593907348408e-01:1.5541828825750750e+00:3.8188876919845205e-01:2.4505133053680996e+00:3.2617327786211542e-01:2.9754918460775412e+00:3.5944649079992552e-01:3.8798265203830589e+00 + CVs 20 + 5.4940296884928486e-01 1.6807426474552850e-01 -3.2864473127065907e-01 + 9.8516483079741413e-01 2.4310713860950212e-01 -6.2302436071812228e-01 + 1.3924756792952246e+00 2.7648663435139798e-01 -9.1121145960541527e-01 + 1.8025680320170743e+00 2.8733334048938219e-01 -1.2034386450973307e+00 + 2.1999587995057119e+00 2.7172508854375577e-01 -1.4932427699442430e+00 + 2.5678438487525574e+00 2.3140702686105175e-01 -1.7772097911489746e+00 + 2.8921895534455606e+00 1.7310310381355909e-01 -2.0529117312378693e+00 + 3.1659816111991508e+00 1.0622982546391579e-01 -2.3171018114314093e+00 + 3.3913808994547310e+00 4.1770059137679283e-02 -2.5672583532093798e+00 + 3.5772374193772394e+00 -8.8281888358192617e-03 -2.8014685502214709e+00 + 3.7390145279922780e+00 -3.7777261233582937e-02 -3.0214174519592474e+00 + 3.9008860338143276e+00 -5.2228754545711853e-02 -3.2425656880769083e+00 + 4.0822753801442655e+00 -7.4090479805717813e-02 -3.4856966036706067e+00 + 4.2902273870870120e+00 -1.2361261847984828e-01 -3.7566077646810809e+00 + 4.5238534661156375e+00 -2.1337464777158344e-01 -4.0478882364601976e+00 + 4.7771839070042699e+00 -3.5472661018497975e-01 -4.3566012480726606e+00 + 5.0373815901055456e+00 -5.6380419582506036e-01 -4.6859141885516529e+00 + 5.2815319220963062e+00 -8.5194191598957802e-01 -5.0231821270548469e+00 + 5.4323941857023934e+00 -1.1650812425978252e+00 -5.2757494302307855e+00 + id 12998 + loc 7.5618207454681396e-01 5.9821569919586182e-01 403 + blend 0.0000000000000000e+00 + interp 4.5845256868236145e-01:3.9829533349411972e-01:4.3787774946188096e-01:4.5170972393132652e-01:9.6670869680060678e-01:3.4711199514111618e-01:1.2091336253049925e+00:2.8302117550048445e-01:1.9871580899951660e+00:3.6456878045911922e-01:2.4583588560609666e+00:3.4475142249692164e-01:3.4386354639260417e+00:4.5844798415667465e-01:3.9992407197064086e+00 + CVs 20 + 1.0163776804859698e-01 9.1568860439852823e-02 -5.6740878727591371e-02 + 1.9054345320380300e-01 1.6678278782315240e-01 -1.3122494239605348e-01 + 2.7949940124763495e-01 2.2270645961032376e-01 -2.0822297058622882e-01 + 3.7568365082799060e-01 2.6596030969265116e-01 -2.8320181028990932e-01 + 4.7584831426059021e-01 3.0041289229283552e-01 -3.5838279653413119e-01 + 5.7677169088229130e-01 3.2944633003968737e-01 -4.3493755132409839e-01 + 6.7590964681550258e-01 3.5633579176611258e-01 -5.1226607626400233e-01 + 7.7099117236929693e-01 3.8405724981313000e-01 -5.8890937272584498e-01 + 8.5999238500584019e-01 4.1532232334695562e-01 -6.6315136999296809e-01 + 9.4108423512346229e-01 4.5273268562695723e-01 -7.3365995518132976e-01 + 1.0126551582334304e+00 4.9892867965645982e-01 -8.0003818462962561e-01 + 1.0731240909367930e+00 5.5635260463333758e-01 -8.6326631081026728e-01 + 1.1206245880952208e+00 6.2698997705052451e-01 -9.2571955142625906e-01 + 1.1521989242988759e+00 7.1263290093766452e-01 -9.9117427763379229e-01 + 1.1623374792937766e+00 8.1505645859019715e-01 -1.0647706276019775e+00 + 1.1408328164877630e+00 9.3519961137563556e-01 -1.1525362152732486e+00 + 1.0716657516137966e+00 1.0697423233183714e+00 -1.2585260343623901e+00 + 9.3836642420642125e-01 1.2058847345257806e+00 -1.3776604587172483e+00 + 9.3602755406295046e-01 1.2610948098416728e+00 -1.3953233827424587e+00 + id 12999 + loc 3.5312560200691223e-01 4.9355104565620422e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3097933925593268e-01:2.5366563068027265e-01:5.5008745045508345e-03:3.4731271353034920e-01:7.4785293572497724e-01:3.5004785929712728e-01:1.1246908965424212e+00:2.6241184329918255e-01:1.9843549586324944e+00:4.3097502946254013e-01:2.1508963218283719e+00:4.0972641760343209e-01:3.0169457523110097e+00:3.5313397810052560e-01:3.5732056116008883e+00 + CVs 20 + -2.0861039179495677e-01 2.4969424407870772e-01 -1.8178681784456099e-02 + -4.0906847120039164e-01 4.7381450752904419e-01 -6.1295663366068287e-02 + -6.0150156076073558e-01 6.8258424399275652e-01 -1.1726233679701270e-01 + -7.8923680096252680e-01 8.7927908093500551e-01 -1.8386066837543502e-01 + -9.7462197303956788e-01 1.0547005747272880e+00 -2.7050190875793162e-01 + -1.1513240597199608e+00 1.1982741809578346e+00 -3.7653931102781779e-01 + -1.3070303808035257e+00 1.3061804141477995e+00 -4.8824071473054975e-01 + -1.4309255933231300e+00 1.3839901006532911e+00 -5.9168322770719284e-01 + -1.5227748863136672e+00 1.4427057872961868e+00 -6.8425801500660266e-01 + -1.6159739307251635e+00 1.4803570864710427e+00 -7.6543667483797406e-01 + -1.7536065147482489e+00 1.4585413406349126e+00 -8.2596374216440238e-01 + -1.9408990207695087e+00 1.3336230674403042e+00 -8.6314657311646492e-01 + -2.1576197165395636e+00 1.0940170510818401e+00 -8.9062786192189114e-01 + -2.3823651397821766e+00 7.6270136927715304e-01 -9.3506751381779452e-01 + -2.5978371549578756e+00 3.8481422350697198e-01 -1.0280802295082552e+00 + -2.7706481655170165e+00 2.9678346451689375e-02 -1.1949640466016229e+00 + -2.8172406757089887e+00 -1.9543878678563034e-01 -1.4227919462619532e+00 + -2.6876907796096097e+00 -2.4477924781790242e-01 -1.6238508778108114e+00 + -2.7593794874779407e+00 -4.6521385667913556e-01 -2.0511050379632723e+00 + id 13000 + loc 2.0064337551593781e-01 3.9662271738052368e-02 400 + blend 0.0000000000000000e+00 + interp 4.4162901553312395e-01:2.5889777244845669e-01:1.1627369860918213e-01:3.2478393353358925e-01:9.7395030140666372e-01:3.6649958082432271e-01:1.6852347240320680e+00:4.0190877809684333e-01:2.1678202126536288e+00:3.9482145394840990e-01:2.8450600782706883e+00:4.4162459924296865e-01:3.2010174550770003e+00 + CVs 20 + -5.5315027123828769e-02 3.2764429957873314e-01 2.6496248052325272e-01 + -1.3500903664439923e-01 6.6159609438286182e-01 5.2351941460054141e-01 + -2.4732761955486199e-01 9.9718537073600655e-01 7.7705755579636016e-01 + -4.0376693551464210e-01 1.3262727315981806e+00 1.0327792109630789e+00 + -6.1654125236469381e-01 1.6352484870871618e+00 1.3004551708977852e+00 + -8.9429149564178234e-01 1.9024698260048611e+00 1.5872089258719533e+00 + -1.2368568069280512e+00 2.1004578589850400e+00 1.8911672724430806e+00 + -1.6320286093103300e+00 2.2049274640103320e+00 2.1996134535715948e+00 + -2.0572007672253472e+00 2.2047735390341936e+00 2.4931825403513836e+00 + -2.4854344260897361e+00 2.1083167238661975e+00 2.7519018065010732e+00 + -2.8942743248522986e+00 1.9413779974963101e+00 2.9560134150613129e+00 + -3.2681959375328136e+00 1.7433367929675889e+00 3.0816200079283642e+00 + -3.5987268930862726e+00 1.5508780931810817e+00 3.1152584830621093e+00 + -3.8880440523228956e+00 1.3703466516949827e+00 3.0708881163700230e+00 + -4.1379444327261501e+00 1.2065892061788031e+00 2.9664921640456807e+00 + -4.3064964283549800e+00 1.1367827282494236e+00 2.7947691550760716e+00 + -4.2444902012949317e+00 1.2628017825354005e+00 2.5328167295425521e+00 + -3.8520241120797447e+00 1.3778397848556063e+00 2.1999814547423817e+00 + -4.0382270127073969e+00 1.3887100702657635e+00 1.9900434036709591e+00 + id 13001 + loc 7.3558455705642700e-01 5.5263686180114746e-01 377 + blend 0.0000000000000000e+00 + interp 4.1080468361844785e-01:3.6615013671369284e-01:8.4953160904729508e-01:3.8235524201972765e-01:1.4603995947292092e+00:3.7003269692188373e-01:2.0577390439759093e+00:4.1080057557161170e-01:2.9514055043721701e+00:2.4912706538466148e-01:3.6200125926825981e+00:3.7263271097037837e-01:3.9985540763248459e+00 + CVs 20 + -7.2238778555482053e-01 1.9793123998539783e-01 -5.7173741254241084e-01 + -1.2699150101444880e+00 2.8194684169356649e-01 -9.2001799808192208e-01 + -1.8033122729114066e+00 3.3642726733837702e-01 -1.2406401636269997e+00 + -2.3750841086653267e+00 3.9788293992063217e-01 -1.6185346674522285e+00 + -2.9764221306149494e+00 4.5576544426394017e-01 -2.0666036671850856e+00 + -3.6015219840887163e+00 4.8732215260736933e-01 -2.5823932059067785e+00 + -4.2475057587553620e+00 4.5311589114511053e-01 -3.1494544540551188e+00 + -4.8901472508680310e+00 3.0904935151899338e-01 -3.7391774761509931e+00 + -5.4836167192831384e+00 3.2201612441736804e-02 -4.3062958198254151e+00 + -5.9920179590899396e+00 -3.6727533037387072e-01 -4.7975434583385628e+00 + -6.4021354006777687e+00 -8.6434229595709722e-01 -5.1753415560697968e+00 + -6.7075315187980760e+00 -1.4411285469678043e+00 -5.4276698209447973e+00 + -6.8886426726895653e+00 -2.0398721332185019e+00 -5.5490652794862738e+00 + -6.9562132241366745e+00 -2.5797354229969534e+00 -5.5706005019330291e+00 + -6.9511654762232471e+00 -3.0333967174202696e+00 -5.5410122114744524e+00 + -6.9084329021382951e+00 -3.4120523879559279e+00 -5.4862184400198810e+00 + -6.8500758361549092e+00 -3.7375683802767083e+00 -5.4354217531813811e+00 + -6.8080072485688969e+00 -4.0220456996349636e+00 -5.4136771540035484e+00 + -6.8559947777948498e+00 -4.2359308717202531e+00 -5.4038917876166241e+00 + id 13002 + loc 6.8978631496429443e-01 9.8266464471817017e-01 411 + blend 0.0000000000000000e+00 + interp 3.4490911335706370e-01:3.4490566426593017e-01:1.5630672300207005e-01:2.7600281819340183e-01:9.8096359488847407e-01:1.5794365899758914e-01:1.9774719499301865e+00:2.9133249797451827e-01:3.0933751194931469e+00 + CVs 20 + 9.8769181346441826e-01 2.4806148375522841e-01 -1.4807331854278741e-01 + 1.6711443659234733e+00 3.1070717507435719e-01 -2.6287325168146192e-01 + 2.2957014039397929e+00 2.7634340008009783e-01 -3.6144388126387350e-01 + 2.9677654647145437e+00 1.7275228075392191e-01 -4.4792662320159371e-01 + 3.6735426625333440e+00 -1.3880926066605848e-02 -5.1473317955621178e-01 + 4.3885999982211095e+00 -2.8862840295492209e-01 -5.6069860920527148e-01 + 5.0788193464897926e+00 -6.4818786372258341e-01 -5.9127806562038665e-01 + 5.7029917154515806e+00 -1.0838202132258230e+00 -6.1433452773231134e-01 + 6.2209758869815897e+00 -1.5790411296396485e+00 -6.4120778799394973e-01 + 6.6018808600716108e+00 -2.1024371060744951e+00 -6.7582726877192900e-01 + 6.8378669878558753e+00 -2.6129407338075024e+00 -7.1321472729590962e-01 + 6.9602647862368503e+00 -3.0793772990026906e+00 -7.3275466999955219e-01 + 7.0173218534409818e+00 -3.4939200167112432e+00 -7.1281445923101971e-01 + 7.0378719179028844e+00 -3.8611846153586935e+00 -6.5040725054506587e-01 + 7.0291299015708590e+00 -4.1867269175675821e+00 -5.5364204880917700e-01 + 7.0032569872381858e+00 -4.4707785505683022e+00 -4.3007474199338641e-01 + 6.9752547742222077e+00 -4.7182008872079644e+00 -2.8894372833339904e-01 + 6.9614870820804073e+00 -4.9521082314263243e+00 -1.5087161383793113e-01 + 7.0325797329266351e+00 -5.2884133586033082e+00 -2.8273537984409958e-02 + id 13003 + loc 2.6216807961463928e-01 7.7652192115783691e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4676803630491563e-01:3.3391367001466665e-01:3.1604599755532969e-01:4.4676356862455258e-01:1.0163787701493312e+00:4.4235528596717283e-01:1.6927002076539399e+00:3.2503766970169468e-01:2.0999227736092552e+00:3.3243276388167059e-01:2.9764575247289082e+00:3.5472081791040483e-01:3.6090662738890842e+00 + CVs 20 + 1.4033811246915862e-01 3.4341046063143615e-01 -3.6999991731981124e-01 + 3.2253858925910828e-01 6.8082326535433213e-01 -7.3141841541572739e-01 + 5.0449159871686211e-01 1.0178628254004827e+00 -1.0943817577348427e+00 + 6.6189981934703856e-01 1.3423475664608013e+00 -1.4634246867194514e+00 + 7.7904659257287212e-01 1.6374165776295597e+00 -1.8412617933917654e+00 + 8.4456216570688203e-01 1.8863252744256407e+00 -2.2238268400219336e+00 + 8.5433973042942779e-01 2.0757152293112711e+00 -2.5992843653455524e+00 + 8.1295345961647136e-01 2.2002058595394947e+00 -2.9529353980150050e+00 + 7.3223539398824433e-01 2.2728292464516375e+00 -3.2905486965615172e+00 + 6.2924134925188224e-01 2.3118989940792503e+00 -3.6444215352150633e+00 + 5.2864913600497798e-01 2.3208194228301431e+00 -4.0279051038608680e+00 + 4.5142803316544966e-01 2.2909491133522373e+00 -4.4187769111167032e+00 + 4.0788199930172458e-01 2.2072969334522829e+00 -4.8013466878287936e+00 + 4.1437456144298912e-01 2.0490991267787235e+00 -5.1832364829933253e+00 + 4.8222309928482238e-01 1.8088552586175257e+00 -5.5521793427777935e+00 + 5.7432838045718893e-01 1.5197855194751513e+00 -5.8805797655933860e+00 + 6.3175380601589537e-01 1.2217901631337014e+00 -6.1804462334386772e+00 + 6.4911506014083353e-01 8.9662856414801295e-01 -6.5033246821202679e+00 + 6.8325447655378346e-01 4.8350596895325126e-01 -6.9001674323435607e+00 + id 13004 + loc 1.2894420325756073e-01 9.1325068473815918e-01 393 + blend 0.0000000000000000e+00 + interp 6.8952298700542147e-01:3.7209443880676468e-01:1.0442540999486394e-01:6.8951609177555140e-01:9.9278723082572062e-01:5.4750004690062304e-01:1.4298459533084031e+00:3.0003606115715964e-01:1.9447065809698851e+00:4.5933289783334535e-01:2.3630710133027462e+00:3.7188844716045932e-01:2.9447432370199218e+00:3.9715526681054475e-01:3.4345731353463673e+00 + CVs 20 + -2.0315641182841998e-01 4.1359137635903143e-01 -2.5129882856833430e-01 + -4.0369115802981420e-01 8.4864713101956091e-01 -5.1159521534204855e-01 + -6.0345754741391910e-01 1.3093831615658491e+00 -7.7087705624134661e-01 + -8.4068629142436047e-01 1.7941823624030739e+00 -1.0141304374368083e+00 + -1.1566117194127876e+00 2.2845914273517169e+00 -1.2209253574188006e+00 + -1.5760271947514553e+00 2.7455194990200993e+00 -1.3723075803544746e+00 + -2.1074712815060224e+00 3.1249653914169508e+00 -1.4599196464276420e+00 + -2.7282556988829225e+00 3.3582070220560922e+00 -1.4943835061922199e+00 + -3.3704354158848533e+00 3.4236825532368025e+00 -1.5155835695714273e+00 + -3.9762768002103686e+00 3.3703654587761682e+00 -1.5789613138410661e+00 + -4.5330984251343533e+00 3.2269781364262253e+00 -1.7033048638724733e+00 + -5.0271930643409792e+00 2.9718173571824154e+00 -1.8531224208562229e+00 + -5.4249531603784842e+00 2.6122727603476434e+00 -1.9951161977495673e+00 + -5.7149483744519989e+00 2.2098960920017481e+00 -2.1319311583152381e+00 + -5.9362850357751773e+00 1.8259399048934501e+00 -2.2284910024172828e+00 + -6.1456861276526862e+00 1.5185178918624240e+00 -2.1881882399030737e+00 + -6.3379899281192627e+00 1.3413703271543584e+00 -2.0079621666518754e+00 + -6.5027019866674962e+00 1.2440160663449744e+00 -1.8295370031826610e+00 + -6.7228274624433091e+00 1.0728467184232187e+00 -1.7481134283754933e+00 + id 13005 + loc 6.0332459211349487e-01 8.9120638370513916e-01 409 + blend 0.0000000000000000e+00 + interp 4.8928970814992362e-01:3.4986038514441081e-01:1.9337030570995606e-01:2.7499589232109267e-01:9.8139218187523602e-01:4.7665540953664892e-01:1.1980284419970650e+00:4.8928481525284212e-01:2.0166984086724522e+00:2.9980602510501825e-01:2.4380395821990626e+00:3.6233736640175612e-01:3.0011137738952125e+00:3.2531269186152295e-01:3.6876208572047435e+00 + CVs 20 + 5.0061509559280082e-01 1.1732005046282487e-01 -1.3582497671796817e-01 + 8.8222587454650592e-01 1.6912183524962010e-01 -2.4635414251404897e-01 + 1.2224864241273765e+00 1.9664959959652339e-01 -3.2482736498292519e-01 + 1.5487275404684087e+00 2.1858829564371374e-01 -3.6956380405611144e-01 + 1.8597252469424652e+00 2.3781553175168035e-01 -3.8705722830402844e-01 + 2.1574838269681411e+00 2.5862268171620972e-01 -3.8422287429175245e-01 + 2.4453134311578428e+00 2.8838412775297573e-01 -3.6695473090740227e-01 + 2.7296479479417943e+00 3.3491384704336480e-01 -3.3807474704223950e-01 + 3.0250492627738113e+00 3.9948864761601866e-01 -2.9416181466661845e-01 + 3.3500481683379082e+00 4.7346138191076337e-01 -2.3315496182611800e-01 + 3.7171441552413960e+00 5.3726114539638514e-01 -1.6223811745571987e-01 + 4.1247194043600892e+00 5.5922035989083674e-01 -9.8140625489651856e-02 + 4.5571235619058612e+00 5.0988877916367059e-01 -5.7090472515648250e-02 + 4.9947013724461247e+00 3.7751402596495454e-01 -4.8938958813090627e-02 + 5.4176817721536183e+00 1.6787997227204698e-01 -8.1900885669584422e-02 + 5.8082114587097298e+00 -1.0501971853005765e-01 -1.6572963183625911e-01 + 6.1518008529589494e+00 -4.3429522222201200e-01 -3.0362123737838798e-01 + 6.4319782267800552e+00 -8.1949701682865772e-01 -4.8215350847389932e-01 + 6.5849994787022110e+00 -1.2087990111661040e+00 -6.8256405552187815e-01 + id 13006 + loc 5.9045571088790894e-01 4.7346633672714233e-01 399 + blend 0.0000000000000000e+00 + interp 4.3880491729828502e-01:4.3880052924911206e-01:2.5262351036765063e-01:3.2027986195237285e-01:9.3068311105411761e-01:2.9503128390358518e-01:1.5761325519535740e+00:3.5047514252415163e-01:2.5241473084853627e+00:2.9464368436793814e-01:3.0061156098965420e+00:4.0870988573459233e-01:3.4770409123512271e+00:4.0123692998913768e-01:3.9795600610051114e+00 + CVs 20 + 1.1012447926414604e-01 2.8550387565324425e-01 2.2520162499412294e-01 + 2.2875955907347265e-01 5.5852625483203111e-01 4.4956140065175021e-01 + 3.3344239012111926e-01 8.1094208978948790e-01 6.9883438896455685e-01 + 4.2017312064585749e-01 1.0396469787273335e+00 9.7951429727688444e-01 + 4.9856974574312213e-01 1.2458884356689472e+00 1.2848151777769563e+00 + 5.7797405395948542e-01 1.4299163769779946e+00 1.6067333227873457e+00 + 6.6487017826074601e-01 1.5885511919677222e+00 1.9383585693594576e+00 + 7.6377982357622165e-01 1.7151005188938622e+00 2.2714750782611182e+00 + 8.7719179170737460e-01 1.7978745651581729e+00 2.5958059986548339e+00 + 1.0028421897412572e+00 1.8242069680559885e+00 2.8977230767873907e+00 + 1.1328347433348840e+00 1.7846341143577313e+00 3.1628683732227048e+00 + 1.2622703528437420e+00 1.6717390712870477e+00 3.3846448331192072e+00 + 1.3937244645145088e+00 1.4841204568898263e+00 3.5627081748048059e+00 + 1.5356517775786012e+00 1.2295078142766138e+00 3.7038343942197036e+00 + 1.7051105751678988e+00 9.2095678164595196e-01 3.8336319334011724e+00 + 1.9186476172933562e+00 5.8706092779385344e-01 4.0027845236428021e+00 + 2.1592041864285410e+00 2.7303230271391687e-01 4.2771288533172491e+00 + 2.3378355812483731e+00 4.9487894856652725e-02 4.6739927414533975e+00 + 2.3826442729632569e+00 -3.2303952226102384e-02 5.0082584619805814e+00 + id 13007 + loc 3.1184864044189453e-01 5.8725237846374512e-02 1078 + blend 0.0000000000000000e+00 + interp 3.5254088169794973e-01:3.0771196247366273e-01:1.2025705875134596e-01:2.8978117600595360e-01:5.9946034240131518e-01:3.5253735628913274e-01:1.1921606571979610e+00:3.3083397428604661e-01:1.9092633615001751e+00:2.4867926576274055e-01:2.9751120751755398e+00:3.2517864723944051e-01:3.4701514499394417e+00 + CVs 20 + 2.1197142807200364e-02 3.2908223338073828e-01 -2.3114711227257542e-02 + -2.1366565035137119e-02 6.1617044562401824e-01 -4.1377311211808945e-02 + -9.7858153335371956e-02 8.9088323637944900e-01 -6.3041989696299247e-02 + -1.8479426554792538e-01 1.1577274822833830e+00 -8.5772073375940366e-02 + -2.7424646519684737e-01 1.4088895438424189e+00 -1.0645092221199964e-01 + -3.5242010454452166e-01 1.6363992081990064e+00 -1.1721361213461315e-01 + -4.1004121357594581e-01 1.8418572489549843e+00 -1.1477839643871132e-01 + -4.5008948351400802e-01 2.0371382709128159e+00 -1.0691216909562573e-01 + -4.8668383838638585e-01 2.2359759117219697e+00 -1.0737742889437052e-01 + -5.4489502915355437e-01 2.4415688489481786e+00 -1.3056603355450991e-01 + -6.4895542326666988e-01 2.6358980113857404e+00 -1.8405150681481269e-01 + -8.0465775926116789e-01 2.7888421648014639e+00 -2.6421594657571112e-01 + -1.0004423861688960e+00 2.8783368133426173e+00 -3.6122830873902934e-01 + -1.2242721788578841e+00 2.8989239849306201e+00 -4.6695878793708512e-01 + -1.4872737324453693e+00 2.8572610751493634e+00 -5.7937264970862445e-01 + -1.8557572984867212e+00 2.7592523281177570e+00 -7.1025285453939224e-01 + -2.4207725270506670e+00 2.5339838752318293e+00 -8.8703939535419141e-01 + -2.9697446629017383e+00 2.0844482310420287e+00 -1.0896676201928788e+00 + -2.8811807458878884e+00 1.9345020427171860e+00 -1.1198383100027098e+00 + id 13008 + loc 9.3928617238998413e-01 1.7366334795951843e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9867488738819862e-01:3.9867090063932475e-01:2.9805908090826816e-01:2.3003199813852807e-01:9.7299279022032181e-01:3.3520216718709717e-01:2.0590166341394651e+00:3.2249371772055507e-01:2.9808599816604682e+00:3.3673637490570413e-01:3.7966080336968955e+00 + CVs 20 + -1.0960615471198343e-01 3.5499118835583254e-01 -2.4581589714132715e-01 + -2.0388616255410838e-01 6.3848437334005914e-01 -3.7830146753925886e-01 + -2.9474318779864717e-01 9.0521744245461244e-01 -4.7383755530295951e-01 + -3.8630373540508822e-01 1.1775140402060298e+00 -5.6879375402805665e-01 + -4.8380949653938887e-01 1.4531975105189150e+00 -6.6008558362405234e-01 + -5.9342292609430825e-01 1.7276665219669829e+00 -7.4421048562557202e-01 + -7.2400723898826080e-01 1.9955193060861576e+00 -8.1272517802059940e-01 + -8.8766033289732471e-01 2.2501145450034108e+00 -8.5191085573821179e-01 + -1.0954267796270487e+00 2.4788154225528807e+00 -8.4558234348677863e-01 + -1.3484029149593308e+00 2.6584291482177438e+00 -7.7961696870314112e-01 + -1.6310198967592002e+00 2.7623439303774724e+00 -6.5212594673226731e-01 + -1.9205871783769433e+00 2.7764230137439845e+00 -4.7749574761403790e-01 + -2.2007854565154461e+00 2.7011476787819255e+00 -2.7665105674321722e-01 + -2.4634043187409724e+00 2.5436574947729289e+00 -6.9952750481204751e-02 + -2.7051787210679112e+00 2.3125666196697936e+00 1.2296561862877142e-01 + -2.9252495634780091e+00 2.0151846941376208e+00 2.7970336892599257e-01 + -3.1148677390422583e+00 1.6709971789914897e+00 3.5820732530237709e-01 + -3.2530500833415963e+00 1.3462993236066987e+00 3.0699308427352689e-01 + -3.3287468996817102e+00 1.1007980379694773e+00 1.1329076413874603e-01 + id 13009 + loc 3.3714607357978821e-01 5.8474254608154297e-01 373 + blend 0.0000000000000000e+00 + interp 4.2690628036901274e-01:3.8159545351136887e-01:5.0423055970938657e-02:3.8774970847547968e-01:1.0021991966817938e+00:3.4031277747120769e-01:1.9753122182279275e+00:4.2690201130620908e-01:2.8286053926982260e+00:3.3073406245418951e-01:3.5509638693152747e+00 + CVs 20 + -4.4483847341445792e-01 5.9889576121055532e-01 -1.3358852527458198e-01 + -7.7945685418536603e-01 1.1496178419199110e+00 -3.1535285573870742e-01 + -9.9392884330668874e-01 1.6509955415585948e+00 -5.4770511072381101e-01 + -1.0879502476378606e+00 2.0911953085293340e+00 -8.1914382321220802e-01 + -1.0744165892731483e+00 2.4522948569055796e+00 -1.1108031106054259e+00 + -9.8818793590690546e-01 2.7310924213663377e+00 -1.4075227630729270e+00 + -8.6310102542009637e-01 2.9402163625007223e+00 -1.7177101651535478e+00 + -7.3237228339975202e-01 3.0924415026698981e+00 -2.0740912361605295e+00 + -6.4094803631500974e-01 3.1807876628452050e+00 -2.5106711918029632e+00 + -6.4878988643818403e-01 3.1854304681879442e+00 -3.0308841200109518e+00 + -8.1597351649823824e-01 3.1037971442472840e+00 -3.5790814883062887e+00 + -1.1707767608769983e+00 2.9486579966188962e+00 -4.0650884962499765e+00 + -1.7003641106849465e+00 2.7168055176857515e+00 -4.4500856216022004e+00 + -2.3778142680780894e+00 2.3828642721535473e+00 -4.7386341009405681e+00 + -3.1608414636313356e+00 1.9488316014880445e+00 -4.9401426097301329e+00 + -3.9818678924600941e+00 1.4600389042196409e+00 -5.0613476223504250e+00 + -4.7154375655770293e+00 9.9036035767791253e-01 -5.0435633928623407e+00 + -5.1835685664697095e+00 6.3432676601433879e-01 -4.8107943236003692e+00 + -5.6610930130756429e+00 1.3195586767323686e-01 -4.4554611512910283e+00 + id 13010 + loc 6.7031896114349365e-01 4.2653501033782959e-01 406 + blend 0.0000000000000000e+00 + interp 3.8587495356108376e-01:2.5931047701418264e-01:7.3317894232778624e-01:3.0411985917429274e-01:1.5286296166631332e+00:2.6160200788776472e-01:2.4785408539698608e+00:2.4073477434047827e-01:3.2035709376783523e+00:3.8587109481154819e-01:3.9724326725654322e+00 + CVs 20 + -2.1002031316019482e-01 2.4040563002696233e-01 -3.4916005421481155e-02 + -3.4084574468898848e-01 4.0607424319950647e-01 -9.2627327703912354e-02 + -4.5990121238329595e-01 5.4064543503869278e-01 -1.5639296586031745e-01 + -6.0138688625740011e-01 6.6611919505584705e-01 -2.2029915092774419e-01 + -7.6526262833235437e-01 7.7704669230121093e-01 -2.8451459269901075e-01 + -9.4931743290046400e-01 8.6792967659872833e-01 -3.4942092949710701e-01 + -1.1485954413004906e+00 9.3405477523401237e-01 -4.1621513531530735e-01 + -1.3555936158743773e+00 9.7246163734280278e-01 -4.8729765388836244e-01 + -1.5632847444141647e+00 9.8199127345059034e-01 -5.6457981253743372e-01 + -1.7693156311794676e+00 9.6208007128908002e-01 -6.4662511312707260e-01 + -1.9736616086877099e+00 9.1226257478247463e-01 -7.2984000362753465e-01 + -2.1710144829421290e+00 8.3412689100594961e-01 -8.1359786132370715e-01 + -2.3525727669616723e+00 7.3225229339626208e-01 -9.0103905544741281e-01 + -2.5150144412050603e+00 6.1122344402532214e-01 -9.9402718034104542e-01 + -2.6624683896542289e+00 4.7309111715028229e-01 -1.0909086188056567e+00 + -2.7984215925737024e+00 3.1905878105996144e-01 -1.1895950505777293e+00 + -2.9184664978869099e+00 1.5323701548249979e-01 -1.2905700603679486e+00 + -3.0153393590300155e+00 -1.7400877939951931e-02 -1.3960906063324769e+00 + -3.0913413110531733e+00 -1.8420341746050073e-01 -1.5088016026022135e+00 + id 13011 + loc 9.1355943679809570e-01 9.6390587091445923e-01 380 + blend 0.0000000000000000e+00 + interp 4.8936841610197468e-01:4.3123096622896123e-01:7.6629955708460429e-03:4.3428059760790044e-01:5.4748099433612696e-01:3.1671632651324683e-01:9.9642286689250970e-01:3.9646031372809154e-01:1.5265714431851671e+00:4.8936352241781367e-01:2.0089808392646353e+00:2.8367900129052592e-01:2.9832432919457790e+00:4.7898839538349430e-01:3.8147555582614698e+00 + CVs 20 + -5.3019703992578782e-01 1.8143164855283656e-01 -4.6402599328565441e-01 + -9.4445050856483648e-01 2.6713252671416765e-01 -7.8740225868029046e-01 + -1.3287961063796345e+00 3.0464012048688349e-01 -1.0788385370881306e+00 + -1.7097682656707414e+00 3.1349436784663143e-01 -1.3821777856975932e+00 + -2.0733518866295686e+00 2.8910021011264830e-01 -1.6924573425543623e+00 + -2.4079170782860349e+00 2.3152781085235774e-01 -2.0041548488687466e+00 + -2.7081816500896334e+00 1.4654758180346117e-01 -2.3132889832200738e+00 + -2.9729664143428618e+00 4.2727654326568887e-02 -2.6178371029882390e+00 + -3.1978795120212191e+00 -7.5313651865718478e-02 -2.9210885051397564e+00 + -3.3779266978448366e+00 -2.0925844705533891e-01 -3.2323688041525540e+00 + -3.5216672881675519e+00 -3.6887638369503972e-01 -3.5591047339626329e+00 + -3.6509837456890910e+00 -5.7170334514737231e-01 -3.8965293563675947e+00 + -3.7844312478159248e+00 -8.3002747886555794e-01 -4.2301444944776616e+00 + -3.9306283733553480e+00 -1.1449089367556651e+00 -4.5473578141511384e+00 + -4.0940187395965753e+00 -1.5078625779267356e+00 -4.8371642844854055e+00 + -4.2755799073327170e+00 -1.8960250907556997e+00 -5.0857064728246915e+00 + -4.4705984935966354e+00 -2.2821104431322596e+00 -5.2821966151578490e+00 + -4.6747637312862587e+00 -2.6669144334557968e+00 -5.4231819310532661e+00 + -4.8863454001501223e+00 -3.1465895554101007e+00 -5.4886392627794063e+00 + id 13012 + loc 4.9788245558738708e-01 3.3435186743736267e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7307046894909827e-01:3.3650687319536748e-01:9.4650528797834954e-01:3.9055881550559440e-01:1.4117535790825799e+00:3.5414007882280168e-01:2.0652980486014285e+00:4.6177198331037461e-01:2.6556402248945390e+00:4.7306573824440878e-01:2.9977600801797291e+00:3.3150488006066953e-01:3.3429245050922383e+00:3.5509529068756523e-01:3.9999508999369464e+00 + CVs 20 + -1.3615275327450019e-01 2.7073351435593385e-01 -1.0219188528550641e-01 + -2.6424883123240939e-01 5.2540809023461454e-01 -2.2662269265497761e-01 + -3.6194474112380248e-01 7.5074290193976323e-01 -3.7013780505646271e-01 + -4.2063127238584175e-01 9.3463386153581651e-01 -5.3291455114833031e-01 + -4.4641820187531400e-01 1.0816081974499516e+00 -7.1882663517697432e-01 + -4.4949477743187555e-01 1.2154646106956544e+00 -9.3104525303142871e-01 + -4.3786368182967794e-01 1.3807176946060917e+00 -1.1613664571413072e+00 + -4.1510696715009404e-01 1.6294139351978472e+00 -1.3798654858832995e+00 + -3.9185638100182385e-01 1.9918812198422340e+00 -1.5459583671759434e+00 + -4.1046681977681854e-01 2.4908000355519766e+00 -1.6127524281894365e+00 + -5.6756206510076246e-01 3.1139083505670464e+00 -1.4940541622885530e+00 + -9.5087175623773712e-01 3.6838793900608500e+00 -1.1226719750885366e+00 + -1.4922650068731993e+00 3.9721020635116999e+00 -5.8003673372577946e-01 + -2.0462203384873283e+00 3.9311294041952296e+00 -7.9505746070753780e-03 + -2.5160248392550431e+00 3.6509453369172626e+00 4.8322864308203606e-01 + -2.9144305065435239e+00 3.1914456711017412e+00 8.7480034993752920e-01 + -3.2565293159559374e+00 2.5130275034371174e+00 1.1560341926312681e+00 + -3.4595521944411138e+00 1.6714773702332761e+00 1.2594159998526067e+00 + -3.5018741388621413e+00 1.4124446113315146e+00 1.2269570177000377e+00 + id 13013 + loc 9.0442794561386108e-01 9.6698957681655884e-01 401 + blend 0.0000000000000000e+00 + interp 4.5413909556793158e-01:4.5413455417697590e-01:9.4732719501681939e-02:3.5942927750192122e-01:9.2138068310540411e-01:4.4136092440907138e-01:1.8130023303198803e+00:3.0883549016088047e-01:2.0836983350694802e+00:4.4650798606064862e-01:2.7628990166665739e+00:2.5623170712330767e-01:3.3013405513621201e+00 + CVs 20 + 9.8962421168668296e-02 2.7664211388590004e-01 -3.4210665737192836e-01 + 2.0692973819952926e-01 5.3585105550173306e-01 -6.6232244732638468e-01 + 3.4084058862580491e-01 7.8088637265798067e-01 -9.8893207367435698e-01 + 5.0453786576934545e-01 1.0076222950051248e+00 -1.3401933763549301e+00 + 6.8810679895833327e-01 1.2148981281485514e+00 -1.7363886376069182e+00 + 8.6365398560622342e-01 1.4124548867789448e+00 -2.2108632868931517e+00 + 9.7897695779635063e-01 1.6023851855568276e+00 -2.7872072286945215e+00 + 9.7088182737124107e-01 1.7660083395301371e+00 -3.4592031949200086e+00 + 7.9016956484845124e-01 1.8690416517736201e+00 -4.1866433755568790e+00 + 4.2765001326154461e-01 1.8806616831244587e+00 -4.9041529663691286e+00 + -7.7865120177695202e-02 1.7868513512529058e+00 -5.5487698529018292e+00 + -6.5029609310687086e-01 1.5878965079683958e+00 -6.0858700076238321e+00 + -1.2276719215248812e+00 1.2919810936158154e+00 -6.5217999730945717e+00 + -1.8110372763060232e+00 9.0587579104395533e-01 -6.8745152761842903e+00 + -2.3909058683322590e+00 4.6466196192528830e-01 -7.1537361822768011e+00 + -2.8510633928549467e+00 9.4131639228228592e-02 -7.4292650502852657e+00 + -3.0552485410068062e+00 -5.7210396806832625e-02 -7.8039879472654690e+00 + -3.0745581315372279e+00 -4.2508445630174863e-02 -8.2276340816504430e+00 + -3.4194672309455165e+00 -2.9771268632322290e-01 -8.6455167098962136e+00 + id 13014 + loc 7.6180648803710938e-01 4.0356472134590149e-01 1081 + blend 0.0000000000000000e+00 + interp 4.7838440572525659e-01:3.0142901401413985e-01:3.3748319676544791e-02:4.0334088499778470e-01:1.0004745491716300e+00:2.8030244277514849e-01:1.9486757433556279e+00:2.9697798094916950e-01:2.8995904379379267e+00:4.7837962188119937e-01:3.4186382119150083e+00 + CVs 20 + -2.0137410649422482e-02 4.9700157630873543e-01 -3.9031358599195931e-01 + -8.5017419277034739e-02 8.4176250926285823e-01 -6.1116269809925994e-01 + -1.5808173807270448e-01 1.1273070220113612e+00 -7.8068549823363065e-01 + -2.1714004992448588e-01 1.3770212871023859e+00 -9.4560654998725391e-01 + -2.6016873558070375e-01 1.5862473955293392e+00 -1.1055745369889260e+00 + -2.8488374171685238e-01 1.7515416032267226e+00 -1.2690740273796155e+00 + -2.9177095394175107e-01 1.8827884744318679e+00 -1.4573229264062175e+00 + -2.9330005107753554e-01 2.0310974691197203e+00 -1.7118355366552478e+00 + -3.4224525616925061e-01 2.3416435941122282e+00 -2.0349550608223170e+00 + -4.9608385272568301e-01 2.8467709309463163e+00 -2.1783956905513646e+00 + -6.5772694521842012e-01 3.2436137997659658e+00 -2.0493189133174190e+00 + -7.6315963151609056e-01 3.4673584264967570e+00 -1.8177438211756622e+00 + -8.1465195270521951e-01 3.5807693838895287e+00 -1.5495682541251556e+00 + -8.1672237231846534e-01 3.6227134642492516e+00 -1.2487086513715644e+00 + -7.7608641720745997e-01 3.6104649838348113e+00 -8.7339374152376115e-01 + -7.0484684816992815e-01 3.5075768660282214e+00 -3.2877133652235746e-01 + -6.0357374009658615e-01 3.1786269901062951e+00 3.4097818353620757e-01 + -4.5803211870431909e-01 2.6619094665392709e+00 8.0324424186229704e-01 + -2.8444769516699397e-01 2.3277426658365319e+00 8.1934631403973146e-01 + id 13015 + loc 6.1082065105438232e-01 1.3170826435089111e-01 382 + blend 0.0000000000000000e+00 + interp 4.7910045111622113e-01:4.7909566011171001e-01:6.8472793103602214e-04:3.1478971067883738e-01:4.9431319764361559e-01:3.0140233729653348e-01:1.1672847143108234e+00:4.0866887178362188e-01:2.2069795000806600e+00:3.7662890100358759e-01:2.9254027229769308e+00:3.9321357476151536e-01:3.4576012183030969e+00 + CVs 20 + -7.2719659807934811e-01 9.3620184503371368e-02 4.6968785695259657e-01 + -1.2035797044348830e+00 1.0404118655069605e-01 8.1646224355378516e-01 + -1.6333400625111643e+00 8.9262784313409504e-02 1.1369373592287386e+00 + -2.0981248119943565e+00 8.3772333471862193e-02 1.4627964226442789e+00 + -2.5977813128665241e+00 7.7531113298408116e-02 1.7926182560046238e+00 + -3.1261253049625193e+00 5.3831993752156970e-02 2.1217700604399288e+00 + -3.6682222599920022e+00 -1.0191147765553632e-02 2.4445897787363249e+00 + -4.2015515764192690e+00 -1.3678754589570086e-01 2.7477838030893231e+00 + -4.7003657438495425e+00 -3.3450052328251711e-01 3.0111295870706449e+00 + -5.1400350770184176e+00 -5.8804323828290372e-01 3.2187838360269816e+00 + -5.5046558456031693e+00 -8.6041038405729431e-01 3.3675778857759826e+00 + -5.8009069824925277e+00 -1.1125501576594954e+00 3.4668544493532880e+00 + -6.0619581084814378e+00 -1.3451525133065771e+00 3.5321442392391154e+00 + -6.3075113356050325e+00 -1.6151647797669970e+00 3.5684049600427521e+00 + -6.5239995948454013e+00 -1.9629745239632770e+00 3.5697283104977577e+00 + -6.7179689825687321e+00 -2.3719424234401898e+00 3.5347658327028566e+00 + -6.9267337190798663e+00 -2.8108089235507392e+00 3.4617464269838316e+00 + -7.1794991351775730e+00 -3.2539608345902513e+00 3.3772774064118587e+00 + -7.4216325555359566e+00 -3.5154788987401897e+00 3.4418357059076889e+00 + id 13016 + loc 3.6708745360374451e-01 5.2343213558197021e-01 395 + blend 0.0000000000000000e+00 + interp 4.7805612371188005e-01:4.2951143539363190e-01:1.3789479900409951e-01:3.4213698815191634e-01:1.0557023101448535e+00:4.1512123708130633e-01:1.9601490049195434e+00:2.8646948213050488e-01:2.2954492727318345e+00:4.2485150833850233e-01:2.9387044447603725e+00:4.7805134315064296e-01:3.2538306439603186e+00:3.3167623277872954e-01:3.8491168559553364e+00 + CVs 20 + 3.2393668689353505e-01 2.0584334389550762e-01 -2.6274713099787894e-01 + 5.9703332668585474e-01 3.8664351656334744e-01 -4.8204441779895785e-01 + 8.5874221290435060e-01 5.6676934304996984e-01 -6.9068617911765884e-01 + 1.1317137042529279e+00 7.5987907820872913e-01 -9.0772126253125218e-01 + 1.4183341244488512e+00 9.5953420419800040e-01 -1.1362091894640329e+00 + 1.7188132296083223e+00 1.1565606733652705e+00 -1.3801497267179030e+00 + 2.0320109117894622e+00 1.3416886355246094e+00 -1.6464669658157658e+00 + 2.3589663838937653e+00 1.5042746722603411e+00 -1.9439634933994845e+00 + 2.7027134908484025e+00 1.6286417537285791e+00 -2.2785007032373663e+00 + 3.0593303340489260e+00 1.6942948539406095e+00 -2.6494317962837526e+00 + 3.4083127804352591e+00 1.6829675720728929e+00 -3.0503503156793395e+00 + 3.7189898310252150e+00 1.5879923352368648e+00 -3.4710562068016886e+00 + 3.9710786269307454e+00 1.4154566783333724e+00 -3.9003951731807893e+00 + 4.1606897803745895e+00 1.1781045356032400e+00 -4.3272931969000901e+00 + 4.2876475718060494e+00 8.9746416926303940e-01 -4.7382508543784141e+00 + 4.3570346080670621e+00 5.9553948918802657e-01 -5.1272550139456960e+00 + 4.3815183960509767e+00 2.7759766839866762e-01 -5.4940104533380474e+00 + 4.3709996717428306e+00 -5.0606812857115546e-02 -5.8298610242384115e+00 + 4.2947909893158549e+00 -2.7363079548435154e-01 -6.0625864469171571e+00 + id 13017 + loc 5.2188605070114136e-01 8.1089317798614502e-01 415 + blend 0.0000000000000000e+00 + interp 4.7117134006503802e-01:2.2782969270341136e-01:3.3334225166330766e-01:2.7235010974041746e-01:1.0271264718716073e+00:2.8671016329147075e-01:1.9139492320631537e+00:3.8249411697945934e-01:2.9307964775880864e+00:4.7116662835163742e-01:3.5156493225263974e+00 + CVs 20 + 3.8082305973781588e-01 2.2068307554648386e-01 6.2813153820800591e-02 + 6.5412233893394189e-01 3.7106239211543229e-01 9.0724139814347210e-02 + 8.8916852324244022e-01 4.9861695204891243e-01 1.1944136083809037e-01 + 1.1255682273007801e+00 6.3410325134756451e-01 1.7120922196401389e-01 + 1.3626791634578164e+00 7.7556537728103025e-01 2.4435175156907213e-01 + 1.5991468716068384e+00 9.2190062320911692e-01 3.3690357474811161e-01 + 1.8350896646029486e+00 1.0738631272666672e+00 4.4953591137201254e-01 + 2.0723052066201939e+00 1.2323991308483537e+00 5.8434157707904011e-01 + 2.3119286137500268e+00 1.3968983847226930e+00 7.4029508158718094e-01 + 2.5541582242978689e+00 1.5656143226124741e+00 9.1463853614910939e-01 + 2.8036574665441498e+00 1.7377951743580207e+00 1.1180973134105863e+00 + 3.0772398492209483e+00 1.9102140467189073e+00 1.3862374033914571e+00 + 3.4067931352267595e+00 2.0631820799785818e+00 1.7386743142544909e+00 + 3.8172955566936162e+00 2.1642526466386665e+00 2.1160764001518544e+00 + 4.2936524504683051e+00 2.2021931200257896e+00 2.4324776893567961e+00 + 4.8062072402941345e+00 2.1827392591652606e+00 2.6624728584351494e+00 + 5.3304911698530129e+00 2.1106493461687750e+00 2.8129466532395782e+00 + 5.8348623878770081e+00 2.0004259699898927e+00 2.8838594662745516e+00 + 6.0967908372009578e+00 1.9974730617659286e+00 2.8122186560423899e+00 + id 13018 + loc 2.6816862821578979e-01 9.0912604331970215e-01 417 + blend 0.0000000000000000e+00 + interp 5.3637190688716119e-01:3.3614365304174210e-01:6.9653722956263708e-02:5.3636654316809229e-01:7.0870863110716342e-01:5.0177683034588694e-01:1.0001125272184415e+00:3.6908429722018482e-01:1.3751071464874349e+00:4.7683321594604217e-01:1.8096128731005074e+00:4.9362312905711392e-01:2.0207669560402097e+00:4.3321506324574471e-01:2.3913526043129343e+00:3.2723154587781006e-01:2.9190732128791810e+00:3.4398766922541069e-01:3.5207535426108230e+00 + CVs 20 + -6.2088842813647523e-02 1.9801309837424419e-01 -1.5273673889492057e-01 + -7.7259980587366328e-02 3.4347094157807878e-01 -2.2845484344879202e-01 + -7.0629721663612602e-02 4.7553234913842768e-01 -2.8195733162540715e-01 + -5.9421122641358654e-02 6.1738351768023580e-01 -3.5162794896928201e-01 + -4.3254453537736215e-02 7.6821817420511551e-01 -4.4338757778243054e-01 + -2.1670125070978929e-02 9.2525350853012989e-01 -5.6231292565474778e-01 + 6.0490699628449884e-03 1.0838004611063567e+00 -7.1117555467972426e-01 + 4.1613773579498248e-02 1.2383273608694785e+00 -8.8892721395040897e-01 + 8.7085582330476641e-02 1.3848395136202778e+00 -1.0934921188167521e+00 + 1.4182198308714333e-01 1.5206894867864298e+00 -1.3288837011654895e+00 + 2.0128784313553005e-01 1.6405423142067301e+00 -1.6019870237444667e+00 + 2.6210736518482280e-01 1.7375287823552588e+00 -1.9077449967454407e+00 + 3.2595591697946369e-01 1.8097963862296287e+00 -2.2305596907160616e+00 + 3.9452811655049858e-01 1.8592873033143194e+00 -2.5602906338555913e+00 + 4.6409668755437905e-01 1.8859647019900945e+00 -2.8975522939189364e+00 + 5.2826705046525513e-01 1.8881255491487836e+00 -3.2438110279855117e+00 + 5.8482680465138226e-01 1.8671889829210206e+00 -3.5910561153923526e+00 + 6.3771325171352955e-01 1.8288181763917661e+00 -3.9247749318878133e+00 + 7.0870279451891682e-01 1.8080292400364764e+00 -4.1965435160053985e+00 + id 13019 + loc 1.0971806012094021e-02 6.1825078725814819e-01 400 + blend 0.0000000000000000e+00 + interp 4.4151316888970732e-01:2.4169334748257326e-01:4.0386123462378165e-01:3.9316582629281066e-01:1.1370982396854834e+00:4.4150875375801846e-01:1.9378482517384659e+00:3.2227420758565239e-01:2.7379055245273403e+00:4.0258620664028916e-01:3.0719305052969124e+00:4.1456706760412071e-01:3.9996018363528716e+00 + CVs 20 + -2.1438635140650730e-01 3.1002751302027226e-01 -6.8395434742537065e-02 + -4.1973375275597330e-01 6.3658642838484725e-01 -1.6708609409981587e-01 + -6.2172545762784515e-01 9.6877417244865016e-01 -3.0274108335253319e-01 + -8.2377868780394892e-01 1.2977326899636914e+00 -4.8147774814294864e-01 + -1.0267487868522613e+00 1.6150438016106672e+00 -7.0871786391843639e-01 + -1.2289424083438527e+00 1.9102338186921990e+00 -9.8701151542215626e-01 + -1.4253637819217737e+00 2.1720919768843405e+00 -1.3173748036906476e+00 + -1.6063056610897506e+00 2.3888759093825129e+00 -1.6991758549994582e+00 + -1.7556686976608136e+00 2.5478426416738897e+00 -2.1295544546382650e+00 + -1.8517703335256011e+00 2.6356520219124393e+00 -2.5996972321025984e+00 + -1.8832419911125009e+00 2.6448874799754627e+00 -3.0890071302324946e+00 + -1.8700055899559966e+00 2.5794399751392758e+00 -3.5755870032719370e+00 + -1.8466703370263178e+00 2.4391275466101705e+00 -4.0493709976139751e+00 + -1.8401701271071123e+00 2.2038587548567397e+00 -4.4951416047843740e+00 + -1.8717929550622641e+00 1.8644286804989427e+00 -4.8806428452150339e+00 + -1.9534547649737954e+00 1.4633243817039214e+00 -5.1920612216376680e+00 + -2.0843992240943718e+00 1.0531984033895214e+00 -5.4559197198134282e+00 + -2.2364916444946252e+00 6.5663440154663388e-01 -5.7015403596787255e+00 + -2.2469094195305250e+00 3.1411376812203384e-01 -5.9644715940481641e+00 + id 13020 + loc 2.2219336032867432e-01 4.9554440379142761e-01 411 + blend 0.0000000000000000e+00 + interp 3.9293739504361375e-01:3.0037981414781745e-01:1.8936158407167969e-01:2.9172608434178615e-01:1.1919009250818275e+00:3.9293346566966331e-01:1.9573014910677986e+00:3.0665860889136082e-01:2.2081591713463578e+00:2.7550610442554047e-01:3.1881342406516522e+00 + CVs 20 + -3.1038639902630852e-02 1.4310988533231458e-01 -7.6269618435318309e-01 + -1.0471207397883336e-01 1.9146867976734983e-01 -1.3302149693656922e+00 + -1.7938309303130898e-01 2.0008838111785754e-01 -1.8594722885826629e+00 + -2.4076045809127838e-01 1.8703161083718045e-01 -2.4236628668737810e+00 + -2.8868342185738055e-01 1.4243915382762662e-01 -3.0188012897879561e+00 + -3.2651426621655499e-01 5.9120982424630597e-02 -3.6380231996723227e+00 + -3.5767872481441615e-01 -6.8667154293335697e-02 -4.2697768849764737e+00 + -3.8377620751513614e-01 -2.4813026890810552e-01 -4.8958803431323163e+00 + -4.0791218022311859e-01 -4.8588666901770416e-01 -5.4903310560013869e+00 + -4.3833968314835503e-01 -7.8199185133589921e-01 -6.0196982759920621e+00 + -4.8198006629093182e-01 -1.1258459761307575e+00 -6.4527303215934317e+00 + -5.3221840017460764e-01 -1.4975707977808215e+00 -6.7817832651312662e+00 + -5.7133993891022095e-01 -1.8766945506137191e+00 -7.0269776468937426e+00 + -5.8465850906884231e-01 -2.2476375622002491e+00 -7.2122314341332920e+00 + -5.6404629556612484e-01 -2.6002732480951685e+00 -7.3524209229471644e+00 + -5.0366191126602755e-01 -2.9341926994812346e+00 -7.4569811013161917e+00 + -4.0088815125771293e-01 -3.2555906739736029e+00 -7.5340609672344474e+00 + -2.6538620293967108e-01 -3.5602665254725139e+00 -7.5945209429918821e+00 + -9.6324726394728749e-02 -3.8242503214150352e+00 -7.7236920366133539e+00 + id 13021 + loc 7.7146184444427490e-01 9.6922427415847778e-01 1068 + blend 0.0000000000000000e+00 + interp 4.3762548246252841e-01:4.1192815195778820e-01:9.9876719027063743e-02:3.1192790237412132e-01:9.2697066916074933e-01:3.0749068112638422e-01:1.6194389646092875e+00:3.1670617153295300e-01:2.0540795288649281e+00:4.3762110620770384e-01:2.9535729053178317e+00:3.1155541237830614e-01:3.5344576367094946e+00 + CVs 20 + 7.6900441612533232e-02 3.8086868791667028e-01 -2.6827827389113712e-01 + 1.5397311914758621e-01 7.5321465403789989e-01 -5.1806931627060870e-01 + 2.5076981881465987e-01 1.1210452525159971e+00 -7.6240537524193108e-01 + 3.8332616375494544e-01 1.4787982850573316e+00 -1.0126655823105961e+00 + 5.6233513981800831e-01 1.8100546588277771e+00 -1.2743621925465340e+00 + 7.8984829307503335e-01 2.0900442585845815e+00 -1.5519926189006430e+00 + 1.0560922332888378e+00 2.2919403142217969e+00 -1.8454404982571977e+00 + 1.3430866017071572e+00 2.3982726994598433e+00 -2.1471132906126056e+00 + 1.6315402533765613e+00 2.4066630196250074e+00 -2.4451502574513970e+00 + 1.9050711578627100e+00 2.3268138694825780e+00 -2.7298674277456820e+00 + 2.1500799159886288e+00 2.1732574419719457e+00 -2.9979596734208807e+00 + 2.3565094587063613e+00 1.9581137386164089e+00 -3.2529389985717843e+00 + 2.5224964556957010e+00 1.6981179354470912e+00 -3.4990746911486368e+00 + 2.6550045889236142e+00 1.4230348929726961e+00 -3.7306624373333062e+00 + 2.7663362795732569e+00 1.1518773083146101e+00 -3.9326970860421162e+00 + 2.8647876613546854e+00 8.6124558517866090e-01 -4.1082078570531149e+00 + 2.9364715984205900e+00 5.2227952224071794e-01 -4.2958813014264727e+00 + 2.9317742608198607e+00 1.7208109912397362e-01 -4.5509383957111771e+00 + 2.7186396127529795e+00 -7.1564526801234374e-02 -4.9345837702473876e+00 + id 13022 + loc 4.6900436282157898e-01 1.1724802106618881e-01 1069 + blend 0.0000000000000000e+00 + interp 3.4592122899594091e-01:2.7780465003231170e-01:1.4249883072584679e-02:3.2625795107558453e-01:9.3284990699861448e-01:3.3872057317943710e-01:1.3558419938286745e+00:3.0435635869295041e-01:2.0528020470259514e+00:3.1157115781538014e-01:2.8947254829572087e+00:3.4591776978365096e-01:3.4299187282704295e+00 + CVs 20 + -1.4966673033130551e-01 2.4936717623172194e-01 2.3206814048501362e-02 + -2.9112375715285710e-01 4.8244729152489768e-01 1.6041242278473838e-02 + -4.0603204347665300e-01 7.0097183668593732e-01 -3.1113756822898075e-03 + -4.8999650384020949e-01 9.0805145878806659e-01 -3.0333876687054895e-02 + -5.4629780120773330e-01 1.0944903095195988e+00 -8.2882754203359887e-02 + -5.7099444704659996e-01 1.2379357332942018e+00 -1.6819867085370999e-01 + -5.6378814690645451e-01 1.3367371543710698e+00 -2.8207019510487741e-01 + -5.2483016023761497e-01 1.4417912588577964e+00 -4.0817173666107887e-01 + -4.4056426737222343e-01 1.6062487621620143e+00 -5.1343851409604324e-01 + -3.0181281592373610e-01 1.8656498866937370e+00 -5.7805245171062125e-01 + -1.3935015328519956e-01 2.2668052606444755e+00 -5.6513529997235046e-01 + -5.1133228748713622e-02 2.7767325090103414e+00 -3.9646559487456767e-01 + -9.5329602560053628e-02 3.2338244537843757e+00 -5.5076241718044150e-02 + -2.2154452677847092e-01 3.5147672622603063e+00 4.1626907760460430e-01 + -3.5568845358850476e-01 3.5724541498285465e+00 9.5602041127014459e-01 + -4.9032132098172909e-01 3.4439851855264236e+00 1.5027028725502034e+00 + -6.7142451430264138e-01 3.1861131501590649e+00 2.0225484189676677e+00 + -8.8051225166746583e-01 2.8039774869039427e+00 2.4737438694426026e+00 + -7.5667430052656848e-01 2.5700475959498088e+00 2.5536292143764170e+00 + id 13023 + loc 6.3872313499450684e-01 3.1092217564582825e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2857357153713995e-01:3.2184479359239604e-01:4.0378315182243230e-01:3.0738985374805922e-01:1.2261610688650291e+00:3.1878494384233202e-01:2.0000028095590610e+00:3.2857028580142461e-01:2.6617350893397189e+00:2.8508453518796562e-01:3.0894626676139909e+00:3.0200796447686445e-01:3.9244924166552955e+00 + CVs 20 + -7.8862233631385975e-02 4.1586717737890028e-01 -4.5750642403129521e-01 + -1.6572363429587172e-01 7.2896383707342449e-01 -7.2095405390450662e-01 + -2.6766622115324967e-01 1.0012162964265201e+00 -9.2167735803972395e-01 + -3.9660705810738650e-01 1.2649931425971099e+00 -1.1052778289753500e+00 + -5.5385208017125964e-01 1.5135991522561167e+00 -1.2639400645541092e+00 + -7.3510108107856631e-01 1.7366809615866732e+00 -1.3896431476908864e+00 + -9.2748221894009475e-01 1.9208682673129291e+00 -1.4743888430928396e+00 + -1.1107078150162741e+00 2.0569151698176089e+00 -1.5161004311547106e+00 + -1.2656596712555774e+00 2.1480403951683620e+00 -1.5229896814975525e+00 + -1.3875889451655488e+00 2.2066836790751578e+00 -1.5058463323462148e+00 + -1.4859143377678399e+00 2.2387991463061208e+00 -1.4656873707193627e+00 + -1.5668775226678340e+00 2.2397558303382281e+00 -1.3962874661754798e+00 + -1.6278720213953772e+00 2.2050924157845602e+00 -1.2931763424127900e+00 + -1.6650616962321341e+00 2.1339766398045779e+00 -1.1527223320130908e+00 + -1.6797104288503921e+00 2.0277581451204183e+00 -9.6045746288880873e-01 + -1.6862689173392196e+00 1.8826715424368610e+00 -6.7995984195271597e-01 + -1.7135637236152335e+00 1.6495236257950603e+00 -3.0957432811589924e-01 + -1.7448074034719603e+00 1.2857222740863632e+00 -1.4573931485946046e-02 + -1.6632479788289334e+00 8.9524646850103118e-01 -2.7240676215546378e-02 + id 13024 + loc 6.9354170560836792e-01 2.0861615240573883e-01 403 + blend 0.0000000000000000e+00 + interp 4.6875980312727239e-01:4.6875511552924115e-01:3.2483985673393390e-01:3.6677745784729177e-01:9.1947687964527969e-01:3.6460050575756786e-01:1.2538168788639610e+00:3.5616680203675460e-01:1.9886141023716555e+00:3.8204286684303262e-01:2.8945284401156517e+00:3.9256462774547662e-01:3.1441233328500320e+00:3.5041018977026811e-01:3.8189299455677546e+00 + CVs 20 + -5.9960843032636574e-02 4.0427362640525161e-01 1.9719390458001429e-01 + -7.8831501392454539e-02 7.8607171587929470e-01 3.8439669078054239e-01 + -1.0530656043388131e-01 1.1725775382452042e+00 5.9549981504982741e-01 + -1.5320277138961080e-01 1.5578904938372573e+00 8.5956375349687053e-01 + -2.0886118692758304e-01 1.9147329203287529e+00 1.1858809230245084e+00 + -2.3877317903035300e-01 2.2201282420597686e+00 1.5610428464137363e+00 + -2.0821571753381329e-01 2.4626644535358828e+00 1.9667422808770956e+00 + -9.4061424537986271e-02 2.6291299949453135e+00 2.3820257586490667e+00 + 1.0694987030058267e-01 2.7066193961372442e+00 2.7755161571585329e+00 + 3.7348601907869639e-01 2.6971634811178742e+00 3.1230213648653593e+00 + 6.7570517922600848e-01 2.6102616833296568e+00 3.4267001829042130e+00 + 9.8397803608444101e-01 2.4508181949334373e+00 3.7085398074945708e+00 + 1.2676829112719652e+00 2.2271240843878202e+00 3.9872265150855846e+00 + 1.5073904575093269e+00 1.9598608854192971e+00 4.2657324346716514e+00 + 1.6998576354417254e+00 1.6737498916224658e+00 4.5577766468435605e+00 + 1.8320364015451402e+00 1.4017649200149076e+00 4.8903640410751006e+00 + 1.8617779600077013e+00 1.1951398117967105e+00 5.2514703112079326e+00 + 1.7986191755465506e+00 1.0559001566166057e+00 5.6059647727019479e+00 + 1.7841763448245096e+00 8.8434560820566210e-01 6.0753778769126328e+00 + id 13025 + loc 4.0530106425285339e-01 3.9692929387092590e-01 373 + blend 0.0000000000000000e+00 + interp 3.9881330587253316e-01:2.5672526226211390e-01:5.9547127331188676e-01:3.4367477325072343e-01:1.0366162082423789e+00:3.1544845425547691e-01:1.8674018203256930e+00:3.4341861347256802e-01:2.5738139079800266e+00:3.9880931773947448e-01:3.0417614776649780e+00:3.1969430596904763e-01:3.7106048022517877e+00 + CVs 20 + -1.0155862306636362e-01 7.1793060601902470e-01 2.7166465985478860e-01 + -1.9288364574845962e-01 1.4655372746810895e+00 5.1226407559385789e-01 + -3.1673814607810963e-01 2.2213532526546040e+00 6.5626643040184729e-01 + -5.1186350399014446e-01 2.9353840083446854e+00 6.3081023463586794e-01 + -7.9547626557602635e-01 3.5377934777336248e+00 3.9383648691359641e-01 + -1.1540028571849130e+00 3.9393721595201674e+00 -3.7856228109688583e-02 + -1.5494046013275751e+00 4.0383777184124510e+00 -6.0623096042871616e-01 + -1.9425436978374595e+00 3.8014776498925187e+00 -1.2133112654240454e+00 + -2.3033667324754061e+00 3.2695074003717925e+00 -1.7773662841193028e+00 + -2.5899499884407251e+00 2.5020768800405340e+00 -2.2483997481110327e+00 + -2.7668892226521646e+00 1.5739399372584881e+00 -2.5864139793445262e+00 + -2.7812968663936872e+00 5.5683789960391472e-01 -2.7937982900439473e+00 + -2.5624658266919176e+00 -5.0526634622746047e-01 -2.9739712990205343e+00 + -2.0738959075397498e+00 -1.5256873009478973e+00 -3.2842721370374690e+00 + -1.4348949130676700e+00 -2.3552420807037273e+00 -3.9059228289169150e+00 + -9.9492898269050101e-01 -2.7941553299465580e+00 -4.9233732192755308e+00 + -9.9827190214437544e-01 -2.8196695634559323e+00 -6.0940300432059562e+00 + -1.5010739484314004e+00 -2.6393374022511202e+00 -7.1520612061329221e+00 + -2.0268671521037973e+00 -2.4444694415446397e+00 -7.8433712635828705e+00 + id 13026 + loc 3.2629916071891785e-01 9.1245299577713013e-01 377 + blend 0.0000000000000000e+00 + interp 5.6352834934646723e-01:4.1276562036066083e-01:8.3107368720925612e-02:4.8726045703624604e-01:5.5482881617762758e-01:4.1444105058841146e-01:9.7757904569299481e-01:3.0994736887176166e-01:1.8536318074381404e+00:5.6352271406297383e-01:2.2070069384273463e+00:4.2116271642873104e-01:2.9838722812344756e+00:4.1361688268867280e-01:3.6383305599944982e+00 + CVs 20 + -6.9300314219240988e-01 3.0247647761298285e-01 -5.0004099192750717e-01 + -1.2924109434086168e+00 4.8279762074462496e-01 -8.3638646750868784e-01 + -1.8993262632504224e+00 6.1812902588844110e-01 -1.1237791066657206e+00 + -2.5541490305087331e+00 7.4531884862369213e-01 -1.4133858277760079e+00 + -3.2395311490679668e+00 8.5981267850684628e-01 -1.7166546128575155e+00 + -3.9370750883229921e+00 9.3932629527443368e-01 -2.0421960877301739e+00 + -4.6280379899264661e+00 9.5412687480739256e-01 -2.3965657550045147e+00 + -5.2857424438592826e+00 8.7898397564214514e-01 -2.7805768100844119e+00 + -5.8776839230890303e+00 7.0117039605259346e-01 -3.1767176157046109e+00 + -6.3779561014080155e+00 4.2351002897925127e-01 -3.5518724838695461e+00 + -6.7750750188646514e+00 5.5670899335710455e-02 -3.8797944047073285e+00 + -7.0663819190137556e+00 -3.9032923799270236e-01 -4.1473479687695587e+00 + -7.2533197823424480e+00 -8.8395586415007754e-01 -4.3478694127501436e+00 + -7.3539843607445592e+00 -1.3775514678401493e+00 -4.4990697104883086e+00 + -7.4015952695613514e+00 -1.8347265255201983e+00 -4.6346228286519384e+00 + -7.4231670045199003e+00 -2.2141116954785298e+00 -4.7707675208691622e+00 + -7.4251682051249031e+00 -2.4865725927219255e+00 -4.9060089262951303e+00 + -7.4116211726006851e+00 -2.6918286891843728e+00 -5.0481647291657881e+00 + -7.4682952497441955e+00 -2.9264955472681624e+00 -5.2033374852656298e+00 + id 13027 + loc 9.6652036905288696e-01 7.8168326616287231e-01 402 + blend 0.0000000000000000e+00 + interp 4.1404319145173091e-01:4.1054214324485672e-01:7.3876127651317791e-03:2.7452804715871670e-01:7.4888759120115944e-01:4.1403905101981642e-01:1.0082245645959929e+00:3.0049231107391056e-01:2.0009749404191863e+00:1.7006240298801323e-01:2.5153155479780742e+00:3.1992110050198491e-01:3.2106827588431313e+00 + CVs 20 + -8.3088927559603759e-02 1.1441681827808331e-01 -2.3579133997271223e-01 + -1.2787783141400511e-01 2.2751579800776983e-01 -4.7826559526764534e-01 + -1.4898815757507294e-01 3.3510155747637388e-01 -7.2363060515128874e-01 + -1.5140303572604777e-01 4.3572033680247058e-01 -9.6667357095091555e-01 + -1.3435283505119205e-01 5.2892395519645663e-01 -1.2024279618448301e+00 + -8.8310683309415383e-02 6.0866698693674359e-01 -1.4184150116428045e+00 + -2.2292226020355632e-03 6.6419846356233792e-01 -1.5968123341022633e+00 + 1.2035253951158054e-01 6.8866725108893623e-01 -1.7270846984510266e+00 + 2.5990819847840602e-01 7.0266098953146461e-01 -1.8300961910273972e+00 + 4.1913987716744433e-01 7.1548470904662920e-01 -1.8843939811926256e+00 + 5.7141060350906081e-01 6.3969235431698646e-01 -1.7654758209951620e+00 + 6.6825074221861613e-01 5.2096910546284581e-01 -1.6432574852342161e+00 + 8.2531843934603666e-01 4.7927069379593035e-01 -1.6883465685888837e+00 + 1.0249860142188629e+00 4.6532701617824790e-01 -1.8987906594649699e+00 + 1.1871929933606635e+00 4.2771715925207854e-01 -2.2092487333780371e+00 + 1.2806767641880539e+00 3.5569190820599905e-01 -2.5542400455371403e+00 + 1.2984431119024036e+00 2.5154239080075458e-01 -2.9196415837994660e+00 + 1.2383344196464945e+00 1.2146514246696971e-01 -3.2858472131594940e+00 + 1.2757858130111783e+00 6.7337119642785881e-02 -3.4589340879745754e+00 + id 13028 + loc 6.4078521728515625e-01 2.4151252582669258e-02 1078 + blend 0.0000000000000000e+00 + interp 4.2923703853131956e-01:4.0413758703779878e-01:7.0762297876114888e-01:3.9998306639891962e-01:1.1711773590050856e+00:4.2923274616093426e-01:1.8818366993255555e+00:3.7506822548057989e-01:2.1502504638668682e+00:2.9853685482675496e-01:2.8895963949907308e+00:3.0272362323509183e-01:3.1165770918382600e+00:3.0209733245903675e-01:3.9723081519463204e+00 + CVs 20 + -1.3714458229148765e-01 3.4843269305626190e-01 -1.2800207526712293e-02 + -2.8795244429536554e-01 7.0317176304879281e-01 6.1698295208600928e-04 + -4.6355948107759576e-01 1.0591011040023099e+00 4.6483623238784133e-02 + -6.7066034411834796e-01 1.4049332756571338e+00 1.3275422018982519e-01 + -9.1061239809778749e-01 1.7222492934442926e+00 2.7004142676190757e-01 + -1.1777116681326123e+00 1.9846285123986505e+00 4.7014126450565674e-01 + -1.4558398743824459e+00 2.1624545264450501e+00 7.3481012736658802e-01 + -1.7232705485430788e+00 2.2367693204440049e+00 1.0475682803801525e+00 + -1.9618097995455683e+00 2.2027996398528078e+00 1.3807604781357199e+00 + -2.1610372209247211e+00 2.0663905705607992e+00 1.7039611182534742e+00 + -2.3180434194122772e+00 1.8419601166773052e+00 1.9910688666959004e+00 + -2.4353104650601107e+00 1.5491145305490568e+00 2.2253637472520014e+00 + -2.5177887729700474e+00 1.2090380640034550e+00 2.3968398973876437e+00 + -2.5719784761752686e+00 8.4093871140558918e-01 2.4980884544584572e+00 + -2.6013573391811575e+00 4.6330386476431928e-01 2.5075175140541415e+00 + -2.5922615052050131e+00 1.2272749321335952e-01 2.3501129476463349e+00 + -2.5084763087303070e+00 -4.1037894063455926e-03 1.9240744040768680e+00 + -2.3762717561684199e+00 2.2801326145212042e-01 1.4463302589850588e+00 + -2.3486513168128123e+00 1.3491987026302610e-02 1.2115856853847657e+00 + id 13029 + loc 3.6707568168640137e-01 9.0552043914794922e-01 393 + blend 0.0000000000000000e+00 + interp 4.4579235192258382e-01:3.0871464488307809e-01:1.1948989460471193e-01:3.6268652602966978e-01:1.0963324934980672e+00:2.7193633559156605e-01:2.2092546641979847e+00:3.1706123788026830e-01:2.9923035956021975e+00:4.4578789399906460e-01:3.8639230825085615e+00 + CVs 20 + -2.1898569538399049e-01 3.1825476533984431e-01 -1.9300462312817124e-01 + -4.2172932856581430e-01 6.5813288161483841e-01 -3.7478720147363709e-01 + -5.9473686344509524e-01 1.0225904488741115e+00 -5.5282547294847340e-01 + -7.4575408983095304e-01 1.4105750664185046e+00 -7.2532383418903801e-01 + -8.9806511332154382e-01 1.8192845824460933e+00 -8.8550878430279534e-01 + -1.0738176605299459e+00 2.2453349967392513e+00 -1.0298798864934771e+00 + -1.2951456533185151e+00 2.6892104620820385e+00 -1.1602235779244088e+00 + -1.5948232310010950e+00 3.1471824771889727e+00 -1.2825135361767239e+00 + -2.0024623583457446e+00 3.5905776686440340e+00 -1.4098564592817788e+00 + -2.5100327254029495e+00 3.9745516552552620e+00 -1.5801123740911671e+00 + -3.0852206740733132e+00 4.2748233761897385e+00 -1.8359033944648588e+00 + -3.7417798610332795e+00 4.4778500561298813e+00 -2.1982651433109601e+00 + -4.4861024480039831e+00 4.5260264229496219e+00 -2.6644885428505547e+00 + -5.2452836249534904e+00 4.3631906257203843e+00 -3.2015275964046448e+00 + -5.9242004167900912e+00 3.9984249661859717e+00 -3.7648870001756709e+00 + -6.5001750241455012e+00 3.4756066510699304e+00 -4.2884325291031447e+00 + -7.0337599771271915e+00 2.8422073261387939e+00 -4.6588739728164343e+00 + -7.5509123030044387e+00 2.1793595683922034e+00 -4.8034252860305617e+00 + -7.8953066091850292e+00 1.6268082713388055e+00 -4.9272906879070000e+00 + id 13030 + loc 8.1865882873535156e-01 5.9031414985656738e-01 382 + blend 0.0000000000000000e+00 + interp 4.2632559728962777e-01:3.4741503208311320e-01:2.0550203949798496e-01:4.2632133403365491e-01:9.9150017044695304e-01:3.2127457788930852e-01:1.4844895211271105e+00:4.2532644497580530e-01:1.9995137192520325e+00:2.6412161552656455e-01:2.6647353466863408e+00:3.9063193412348712e-01:3.7013355602635984e+00 + CVs 20 + 1.0194109609928423e+00 1.6735974977320589e-01 -5.6511100411981929e-01 + 1.7198551408923475e+00 1.8722840040239538e-01 -9.7394667731926665e-01 + 2.3659047170729770e+00 1.5535624045677837e-01 -1.3439980946769898e+00 + 3.0566004962930915e+00 1.0257940380248165e-01 -1.7194280874390859e+00 + 3.7795817028128362e+00 1.8430328324862688e-02 -2.0981310247762495e+00 + 4.5181394232441292e+00 -1.1147808101423429e-01 -2.4720721501074041e+00 + 5.2521183350618665e+00 -3.0258936635466016e-01 -2.8183467660629393e+00 + 5.9570693390891680e+00 -5.6582729087603734e-01 -3.1082533727856774e+00 + 6.6082166420036925e+00 -9.0051051592117259e-01 -3.3253874404297776e+00 + 7.1833558744440635e+00 -1.2977280293397364e+00 -3.4724722428366919e+00 + 7.6616863283561170e+00 -1.7470292914878123e+00 -3.5602099067986699e+00 + 8.0272746874498431e+00 -2.2365235282149638e+00 -3.5999328752317838e+00 + 8.2782679454536368e+00 -2.7534581085648178e+00 -3.6080494599901831e+00 + 8.4261004587300832e+00 -3.2865328327088186e+00 -3.6060530174452090e+00 + 8.4891291061116441e+00 -3.8277517412964386e+00 -3.6206649176639525e+00 + 8.4973831248096587e+00 -4.3849927286715804e+00 -3.6823376618523511e+00 + 8.4873132453725244e+00 -4.9651160882546410e+00 -3.8158205056951888e+00 + 8.4768903529092086e+00 -5.5250552162296218e+00 -4.0359197134094886e+00 + 8.4536237743307225e+00 -5.9543477268495160e+00 -4.3149789302430044e+00 + id 13031 + loc 8.7981849908828735e-02 6.5232354402542114e-01 399 + blend 0.0000000000000000e+00 + interp 3.5383593103688987e-01:3.5383239267757954e-01:2.9744150254509216e-01:2.6832678809380622e-01:9.9374334120205488e-01:2.7000116606918628e-01:1.6700334561965855e+00:2.7304253669971817e-01:2.2379114649792555e+00:2.7645067823520447e-01:3.4524427692240094e+00 + CVs 20 + -2.1618063305283997e-01 3.4798922068045562e-01 -2.6257340517875016e-01 + -4.1376653103835515e-01 7.1039817291417240e-01 -5.2536626409100451e-01 + -5.9292532298857270e-01 1.0845911140827347e+00 -8.1296853919596224e-01 + -7.5829141186275895e-01 1.4727430920176166e+00 -1.1402752643572946e+00 + -9.2960633331498210e-01 1.8800565881368059e+00 -1.5159526400401513e+00 + -1.1580099132047126e+00 2.3047349001956210e+00 -1.9430793262111967e+00 + -1.5301577542990816e+00 2.7150662180997274e+00 -2.4128842866333771e+00 + -2.1403095136751586e+00 3.0028669096865164e+00 -2.8893312985754620e+00 + -2.9655053586682012e+00 2.9927957375204364e+00 -3.2761284476942811e+00 + -3.8018016740139089e+00 2.6331783521214587e+00 -3.4940708469029693e+00 + -4.4723056798782945e+00 2.0435521642215737e+00 -3.5778815747170341e+00 + -4.9212684269400304e+00 1.4043204299922305e+00 -3.6321946796512630e+00 + -5.2073376866440979e+00 8.7752846753220715e-01 -3.7354499790923925e+00 + -5.4388059229361696e+00 5.6206649788363328e-01 -3.8725820860104134e+00 + -5.6749896903756740e+00 4.9781522294668284e-01 -3.9793690776774033e+00 + -5.8584642644399780e+00 6.8593060205402623e-01 -4.0017037745615065e+00 + -5.8296808552180348e+00 1.0614370338655548e+00 -3.8872886079393862e+00 + -5.7013559607234923e+00 1.3173267524981123e+00 -3.7143019414868021e+00 + -6.0277384662663094e+00 1.4260419405764575e+00 -3.7275266882901725e+00 + id 13032 + loc 6.0328727960586548e-01 8.2726925611495972e-01 395 + blend 0.0000000000000000e+00 + interp 4.3590155422057059e-01:2.8568384242322242e-01:2.6155292629653049e-01:3.1463754943874972e-01:1.0046315442700648e+00:4.1686819954348975e-01:1.9368457877287204e+00:2.7766543354116074e-01:2.3146030287804118e+00:4.3589719520502840e-01:2.9085421940245624e+00:2.9437687429514015e-01:3.6244444403143548e+00 + CVs 20 + 4.7417566426889396e-01 2.0015871705240104e-01 -3.4981034041476866e-01 + 8.3295386892335965e-01 3.3431170398382926e-01 -6.3683274441556748e-01 + 1.1638499193039551e+00 4.5320122652122946e-01 -9.1620075122590938e-01 + 1.5060401505581140e+00 5.7972048746020688e-01 -1.2130405908447028e+00 + 1.8610833251573564e+00 7.0856930847591304e-01 -1.5295548384675439e+00 + 2.2275786667519943e+00 8.3216176594804647e-01 -1.8687166778285986e+00 + 2.6026676193623826e+00 9.4231561747005366e-01 -2.2360573310649920e+00 + 2.9859661107348470e+00 1.0271690644121778e+00 -2.6379356253269970e+00 + 3.3774511003859660e+00 1.0674930058464553e+00 -3.0766395885208029e+00 + 3.7669097200987838e+00 1.0377474264075948e+00 -3.5466473207081517e+00 + 4.1289010062859255e+00 9.1833168919889840e-01 -4.0365835859037347e+00 + 4.4396098031487279e+00 7.0361729768282610e-01 -4.5304545575118373e+00 + 4.6896305875506989e+00 4.0015908966546609e-01 -5.0071388045561465e+00 + 4.8755691438443938e+00 2.6581799779222148e-02 -5.4409668910544564e+00 + 4.9962533831613225e+00 -3.9068526780725232e-01 -5.8098729660839048e+00 + 5.0579205288598672e+00 -8.3339425282166291e-01 -6.1023205979993893e+00 + 5.0713432790313551e+00 -1.2887076047217776e+00 -6.3119476704220396e+00 + 5.0501071217782840e+00 -1.7258266076087110e+00 -6.4346489817219314e+00 + 5.0254491327711506e+00 -2.0319631622730494e+00 -6.4696820108975635e+00 + id 13033 + loc 2.2890375927090645e-02 2.9907722491770983e-03 406 + blend 0.0000000000000000e+00 + interp 4.3254713133674849e-01:2.5703380248747476e-01:2.1860710442529285e-01:4.1933205429953524e-01:1.1925238219814178e+00:2.1555083234600728e-01:1.9515663130616510e+00:2.6587803008909866e-01:2.9677784515651155e+00:4.3254280586543514e-01:3.6823088593821884e+00 + CVs 20 + -6.4472016368338797e-02 5.2925926998153280e-02 5.3055940235430317e-02 + -1.3735539093473928e-01 9.8237354214257444e-02 1.1399864753612692e-01 + -1.8804236200205143e-01 1.6806587354290217e-01 2.0852429637749870e-01 + -2.1731319851441519e-01 2.5974217385750931e-01 3.0582914109663223e-01 + -2.2491888673399571e-01 3.6731761842324584e-01 3.9823692242510123e-01 + -2.1176303682973674e-01 4.8488492009918760e-01 4.8127168802559789e-01 + -1.7940366932539484e-01 6.0783666880379539e-01 5.5196055193965143e-01 + -1.2962075546087964e-01 7.3295317279213612e-01 6.0813711634585277e-01 + -6.4288386825219632e-02 8.5806068937045021e-01 6.4810925941775233e-01 + 1.4716799861773905e-02 9.8170151452990950e-01 6.7061950743092358e-01 + 1.0607998770983634e-01 1.1026281124554165e+00 6.7492208444576751e-01 + 2.1080424969210337e-01 1.2189164749432464e+00 6.6072463373402779e-01 + 3.3135428707379949e-01 1.3291778764921307e+00 6.2721655895066775e-01 + 4.6968112818255692e-01 1.4317455572189579e+00 5.7284142055435638e-01 + 6.2513221560342314e-01 1.5217277092533301e+00 4.9755576882303815e-01 + 7.9409521967608487e-01 1.5888187400782381e+00 4.0684792745462078e-01 + 9.7245536015647094e-01 1.6216737594578974e+00 3.0903336533079273e-01 + 1.1598618354203303e+00 1.6165364168346532e+00 2.0544924388643016e-01 + 1.2578830589436645e+00 1.5572581783188149e+00 1.6953595371196228e-01 + id 13034 + loc 4.9474802613258362e-01 1.4495238661766052e-01 415 + blend 0.0000000000000000e+00 + interp 4.8310931317730521e-01:4.8310448208417345e-01:3.2810216028599681e-01:4.2298644847923994e-01:9.9175531409193984e-01:3.5117140348932802e-01:1.5086427548213512e+00:3.6520188228092576e-01:2.4472046413212056e+00:3.7962182076404655e-01:3.3924251696742811e+00:3.9123912252577098e-01:3.9977618956841670e+00 + CVs 20 + 2.0989358338473110e-02 2.0253472347494955e-01 -5.0892058934578030e-02 + 4.8073904899737507e-03 3.8028665739895112e-01 -8.6499610187395159e-02 + -1.6461712224902808e-02 5.7225396011524565e-01 -1.4249098308003061e-01 + -4.1936302519055002e-03 7.8981802783369970e-01 -2.2938327151536647e-01 + 5.1839289372221098e-02 1.0269514107957960e+00 -3.5037665388541839e-01 + 1.6118993512564928e-01 1.2733035197268396e+00 -5.0625399282150363e-01 + 3.3283898024211522e-01 1.5154001844398426e+00 -6.9246087557206459e-01 + 5.7173459838716822e-01 1.7392128558487316e+00 -9.0012046857910333e-01 + 8.7676075161325162e-01 1.9329618935788553e+00 -1.1193628724644831e+00 + 1.2424347132256188e+00 2.0876829494909268e+00 -1.3397770241902700e+00 + 1.6604797658683992e+00 2.1975108824650613e+00 -1.5535877903863324e+00 + 2.1182243403879175e+00 2.2586652561833582e+00 -1.7753681901999880e+00 + 2.5868167838891223e+00 2.2640790404879523e+00 -2.0583387539045854e+00 + 3.0092875231814515e+00 2.2046843516456129e+00 -2.4524063783161969e+00 + 3.3323053909780187e+00 2.0809685784133172e+00 -2.9442382864300400e+00 + 3.5371888242799674e+00 1.9035280285270670e+00 -3.4878025974460520e+00 + 3.6085144300773084e+00 1.6897689294660281e+00 -4.0526294194341510e+00 + 3.5283442703032666e+00 1.4681320291931699e+00 -4.6102845597421158e+00 + 3.6227544559530229e+00 1.3396107943399493e+00 -4.9843130196280478e+00 + id 13035 + loc 6.7274749279022217e-01 5.7683032751083374e-01 409 + blend 0.0000000000000000e+00 + interp 3.8801455505032845e-01:3.1218072373563194e-01:2.2146228524952150e-01:3.8801067490477797e-01:1.0007276905367901e+00:3.6486729690821385e-01:1.6147762710313915e+00:3.2061814005197647e-01:2.0598096408405175e+00:3.5691481778016809e-01:2.9877633810839042e+00:3.5524145220427028e-01:3.6970500752879074e+00 + CVs 20 + 2.9893566212878164e-01 2.2604607170608010e-01 -3.5219003343701351e-02 + 5.7642063980380809e-01 4.2212615305634654e-01 -8.6307866437567909e-02 + 8.6572639169719623e-01 6.0040749797778603e-01 -1.3870273544780354e-01 + 1.1910932372268446e+00 7.6667177268821662e-01 -1.8157953624823842e-01 + 1.5480946169624921e+00 9.1206002866631031e-01 -2.1506760745115555e-01 + 1.9293701045983687e+00 1.0290665278069977e+00 -2.4170131642686946e-01 + 2.3307316669140556e+00 1.1134967246652332e+00 -2.6482799968074400e-01 + 2.7515100027336241e+00 1.1581673804815313e+00 -2.8683598540479766e-01 + 3.1926816836321046e+00 1.1493501021595816e+00 -3.0952956361693423e-01 + 3.6512193430039526e+00 1.0700097917393769e+00 -3.3888312348201399e-01 + 4.1042884958619616e+00 9.0565300454885511e-01 -3.8542923042047433e-01 + 4.5142469296507555e+00 6.5584363308088545e-01 -4.5788028486178706e-01 + 4.8554500679868777e+00 3.3763172020595400e-01 -5.5951510256190584e-01 + 5.1218126697261432e+00 -2.5462079487044154e-02 -6.9101521727989379e-01 + 5.3144936670930853e+00 -4.0953905931789958e-01 -8.4990613031159201e-01 + 5.4374275840249524e+00 -7.9191742059605463e-01 -1.0259356324639506e+00 + 5.5033506042985474e+00 -1.1575045052446593e+00 -1.2056902961804121e+00 + 5.5371560030769995e+00 -1.5004747231175659e+00 -1.3874678509209506e+00 + 5.6088373089675194e+00 -1.8049020080502132e+00 -1.5831829562531983e+00 + id 13036 + loc 7.4378567934036255e-01 5.6368011236190796e-01 400 + blend 0.0000000000000000e+00 + interp 4.0382185819452004e-01:3.9209271914593041e-01:1.0363512475274672e-02:3.1573692106392803e-01:7.2886638249219127e-01:4.0381781997593813e-01:1.2262380479012287e+00:3.4500291060831434e-01:2.0515784837468667e+00:2.8165965575370827e-01:2.7784367699943662e+00:2.7815538692829128e-01:3.3100419454863577e+00 + CVs 20 + -6.2179761479768829e-02 1.3612362521993721e-01 -4.1698479396685528e-01 + -1.0607442169798653e-01 2.6157646456848793e-01 -8.4502762243809559e-01 + -1.3417914091251493e-01 3.7171740833056860e-01 -1.2843411209633486e+00 + -1.7196462303534660e-01 4.7259358566041310e-01 -1.7421042304988410e+00 + -1.9804513730580256e-01 5.6925279075729218e-01 -2.1929515220167524e+00 + -1.9585955035163144e-01 6.4506928366046024e-01 -2.6220224114492492e+00 + -1.8800537508199872e-01 7.0060169216761858e-01 -3.0466669796329793e+00 + -1.7662920603509261e-01 7.1254163932527881e-01 -3.4535232353018168e+00 + -1.5593787990107305e-01 6.5499336441055300e-01 -3.8184117161654507e+00 + -1.2225652481627713e-01 5.2849576938902554e-01 -4.1227568034807645e+00 + -7.3160415954131239e-02 3.4573573463436302e-01 -4.3476445940098962e+00 + -8.3287143735009117e-03 1.2704947456683602e-01 -4.4741391668590760e+00 + 6.8018909999136817e-02 -9.6635059261202416e-02 -4.4914168541030950e+00 + 1.4610969537794555e-01 -2.8859636970609870e-01 -4.4048964098240129e+00 + 2.0999340785090242e-01 -4.1762492429008358e-01 -4.2333358705245674e+00 + 2.4222922358368107e-01 -4.6419808973440535e-01 -4.0116124551509502e+00 + 2.4564343382026621e-01 -4.3730593454224076e-01 -3.8062332384360742e+00 + 2.6280062766643153e-01 -4.1974385998382213e-01 -3.7025024499753383e+00 + 3.7448088625677045e-01 -6.0434806479386771e-01 -3.7840171546974917e+00 + id 13037 + loc 4.9032342433929443e-01 7.1405315399169922e-01 411 + blend 0.0000000000000000e+00 + interp 3.8714931983248652e-01:2.6692810554625279e-01:4.5555571024629582e-01:3.1960091800802709e-01:1.0367211598920631e+00:2.9438678294280535e-01:1.7305902717477863e+00:3.8714544833928821e-01:2.1359697324968900e+00:2.8565324367547529e-01:2.9894038341853308e+00:2.7535732626859027e-01:3.5471618373679696e+00 + CVs 20 + 8.2504147240981218e-01 2.3400575600880030e-01 -6.2869677890142486e-02 + 1.4210996093424424e+00 3.5399856796780738e-01 -1.0485315961941861e-01 + 1.9603064724891426e+00 4.2555265335426418e-01 -1.3074715705977599e-01 + 2.5351272880313949e+00 4.8097254779685672e-01 -1.4262413035933719e-01 + 3.1403487414107163e+00 5.1041109738330115e-01 -1.4188772355471485e-01 + 3.7685653956114589e+00 5.0476524293482339e-01 -1.3275227565064301e-01 + 4.4106147081819911e+00 4.5582908509713616e-01 -1.2087877755593440e-01 + 5.0566947892466985e+00 3.5367215887137360e-01 -1.1015764050872601e-01 + 5.6956526422977340e+00 1.8493829541347928e-01 -1.0462079033552368e-01 + 6.3102377191385290e+00 -6.4908575031920934e-02 -1.1533865710411995e-01 + 6.8733609193976797e+00 -4.0363974697675742e-01 -1.5730920686198818e-01 + 7.3566088995781245e+00 -8.2371007026210497e-01 -2.3280555224618879e-01 + 7.7446732800811686e+00 -1.3068831085004156e+00 -3.3157490554584212e-01 + 8.0331422597387530e+00 -1.8341013491530642e+00 -4.4190309553480661e-01 + 8.2198447002946669e+00 -2.3873254447193801e+00 -5.5349764563219273e-01 + 8.3035561066058481e+00 -2.9514174816996128e+00 -6.5323789525040998e-01 + 8.2851854860798451e+00 -3.5120360372913622e+00 -7.2566563464022504e-01 + 8.1739803732409868e+00 -4.0448940769727582e+00 -7.6337841378503457e-01 + 8.0725151559678245e+00 -4.5034392256435316e+00 -7.6042531403406355e-01 + id 13038 + loc 3.7045016884803772e-01 8.9698612689971924e-01 1068 + blend 0.0000000000000000e+00 + interp 5.1524508899468358e-01:3.2509597934845141e-01:1.2631203532382207e-01:3.4486259279943204e-01:9.8155453039400897e-01:3.3601113631895774e-01:1.6006576922543316e+00:4.5452959717277663e-01:2.0260410270896938e+00:5.1523993654379363e-01:2.5997387401974565e+00:3.2529458970998992e-01:3.1093861684814503e+00 + CVs 20 + 1.8861864575258211e-01 3.2309117296617368e-01 -2.1626317865592093e-01 + 3.7527699713551199e-01 6.5623410191475839e-01 -4.4256127913569898e-01 + 5.6274582853765565e-01 9.8428577323369071e-01 -6.5471534654169450e-01 + 7.4847750215822739e-01 1.2924630262171197e+00 -8.4959007761632843e-01 + 9.3111781344379962e-01 1.5705047562078882e+00 -1.0328845938169791e+00 + 1.1101062177549410e+00 1.8100918898627179e+00 -1.2053340327929942e+00 + 1.2841983387673230e+00 2.0095122914460952e+00 -1.3664750781144275e+00 + 1.4566429664671412e+00 2.1771362126007130e+00 -1.5204720874583493e+00 + 1.6379219062039314e+00 2.3244451842426699e+00 -1.6791498133523592e+00 + 1.8449869704898938e+00 2.4555376520794971e+00 -1.8572955391621742e+00 + 2.0916767827768132e+00 2.5659371568776721e+00 -2.0620451538430604e+00 + 2.3780423775266004e+00 2.6511508801287720e+00 -2.2887675266364167e+00 + 2.6951522531787346e+00 2.7150097106618798e+00 -2.5278764549155035e+00 + 3.0528795447302697e+00 2.7612919447294990e+00 -2.7793522789160554e+00 + 3.4765947927107215e+00 2.7720443728742898e+00 -3.0559689501649516e+00 + 3.9439977013712957e+00 2.7144454304865695e+00 -3.3618563579665848e+00 + 4.3851013316153136e+00 2.5841951193919437e+00 -3.6726488911607169e+00 + 4.7319649963987942e+00 2.4298416276787425e+00 -3.9877154604886904e+00 + 4.7561041415228544e+00 2.4954222079391259e+00 -4.3124833184123910e+00 + id 13039 + loc 1.4283615350723267e-01 9.0771329402923584e-01 373 + blend 0.0000000000000000e+00 + interp 7.3939304608105583e-01:3.7306213697849089e-01:9.6458172066502645e-02:7.3938565215059504e-01:9.7800689346193936e-01:3.0426630876505445e-01:1.8372226627558570e+00:3.0592497714515371e-01:2.6910461518500033e+00:2.8762967569338604e-01:3.7170679237727793e+00 + CVs 20 + -3.5911637364202931e-01 4.3890336443065509e-01 -1.2372548757109660e-01 + -6.5854302781310614e-01 8.6793435422227927e-01 -2.7090069278281553e-01 + -8.9554069997538277e-01 1.3021709909727455e+00 -4.5248961182596409e-01 + -1.0751471272557305e+00 1.7442941680946777e+00 -6.8677233899086521e-01 + -1.1994465947235275e+00 2.1650122686700368e+00 -9.8828537161590979e-01 + -1.2833587084451088e+00 2.5227866367445215e+00 -1.3550125939808586e+00 + -1.3476198176566361e+00 2.7859595168894513e+00 -1.7682339668147964e+00 + -1.4090613246342625e+00 2.9409555456609340e+00 -2.1990403224513719e+00 + -1.4807680673331753e+00 2.9905535309956202e+00 -2.6267354588722056e+00 + -1.5725596156821524e+00 2.9422395370641321e+00 -3.0434947501756877e+00 + -1.6906341236515185e+00 2.8086267006634618e+00 -3.4353832698871529e+00 + -1.8293988293241341e+00 2.6095534667066937e+00 -3.7774557352658018e+00 + -1.9686802645040624e+00 2.3653192793285847e+00 -4.0573831567931755e+00 + -2.1044200055219067e+00 2.0761052666912465e+00 -4.2935970327510535e+00 + -2.2677613462537156e+00 1.7167933582761457e+00 -4.5025943405967208e+00 + -2.4705297415405640e+00 1.3040845905776641e+00 -4.6700131979607677e+00 + -2.6222366251350691e+00 9.7650475450010077e-01 -4.8005181536804944e+00 + -2.6448441924620711e+00 8.8306351444735065e-01 -4.9581362015379433e+00 + -2.8488992554758084e+00 2.8700554004620127e-01 -4.8320768321521079e+00 + id 13040 + loc 1.7281989753246307e-01 1.2690742313861847e-01 401 + blend 0.0000000000000000e+00 + interp 4.8404499259911271e-01:4.5884897433019106e-01:1.9283375211721376e-01:4.8404015214918672e-01:7.8236491454831458e-01:3.6586302375277557e-01:1.0994322527264253e+00:2.8486002158565826e-01:1.8652248698031331e+00:4.0705217684119255e-01:2.1572294125476175e+00:2.9647932665335491e-01:2.8840868474053858e+00:4.3752001063103590e-01:3.1848990328080187e+00:3.9962713580330383e-01:3.9734788257472977e+00 + CVs 20 + -1.1525631434812122e-01 3.8018482287914329e-01 7.1919600217516338e-02 + -2.6428406468290638e-01 7.5631052716186753e-01 1.6929472245063160e-01 + -4.1707295363073982e-01 1.1141688328394768e+00 2.8737906379057210e-01 + -5.7044998388928425e-01 1.4435254884069526e+00 4.3147004738281020e-01 + -7.2923836664699437e-01 1.7325336572663901e+00 6.0987638050009063e-01 + -8.9065617018706145e-01 1.9673535369363901e+00 8.2719555740086870e-01 + -1.0431813328101691e+00 2.1355529652552927e+00 1.0792884365002402e+00 + -1.1708563112443675e+00 2.2342680228827434e+00 1.3519493505046618e+00 + -1.2697378123196310e+00 2.2763608211614912e+00 1.6428999686310466e+00 + -1.3531472284792909e+00 2.2703888026179779e+00 1.9721443630273801e+00 + -1.4263462611029423e+00 2.1996664446295418e+00 2.3284892514908702e+00 + -1.4633681432040226e+00 2.0678697273015065e+00 2.6430772769607813e+00 + -1.4496919456766038e+00 1.9211849550220939e+00 2.8818866008041057e+00 + -1.4122105133338776e+00 1.7944764393525825e+00 3.0848000980577903e+00 + -1.3729858974478646e+00 1.6916696297496592e+00 3.2994028266672548e+00 + -1.3040469805154098e+00 1.6015270288603456e+00 3.4577391099089807e+00 + -1.1657602274765904e+00 1.4973044967899765e+00 3.3479572691515105e+00 + -1.0063551197144158e+00 1.2612433720480920e+00 3.0944827020385004e+00 + -9.3321328993656294e-01 1.3932831163064407e+00 3.4504774165448158e+00 + id 13041 + loc 8.8634157180786133e-01 4.7314879298210144e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1755628845966641e-01:3.1094544478639813e-01:2.4086408153095484e-02:3.2964840752454511e-01:1.0772168522921710e+00:4.1755211289678185e-01:1.8016399862004189e+00:3.1422722518702345e-01:2.1171678793511646e+00:2.6708690324520240e-01:2.8987503762449491e+00:3.5482362356947816e-01:3.3452136262101981e+00 + CVs 20 + -3.0275697633107460e-02 3.8067793730701882e-01 -2.7289193627497299e-01 + -7.5160964891982388e-02 7.0054707719795728e-01 -4.2330834774996651e-01 + -1.2563300862590335e-01 1.0062897324575188e+00 -5.3100355544642519e-01 + -1.8466209340374851e-01 1.3221925873163700e+00 -6.2010291617279045e-01 + -2.5751921553086277e-01 1.6386790153519268e+00 -6.7527067648357586e-01 + -3.5157061388056976e-01 1.9450452425513238e+00 -6.7630669066653204e-01 + -4.7838992079934162e-01 2.2238411522694839e+00 -5.9122359626487886e-01 + -6.3860715790786271e-01 2.4231061265379088e+00 -3.8131264716034763e-01 + -7.8092771276797857e-01 2.4648905226573707e+00 -7.8126629515643975e-02 + -8.5595177917976162e-01 2.3616562533234808e+00 2.2209088932316978e-01 + -8.6416782950892290e-01 2.1639903444656312e+00 4.8206245529248537e-01 + -8.1522915601398527e-01 1.9090063472661136e+00 6.9060336224743191e-01 + -7.2177346662316277e-01 1.6384050621248836e+00 8.4927840356668138e-01 + -5.9964658309887853e-01 1.4106776510919974e+00 9.7161829218114726e-01 + -4.8034197836051989e-01 1.3235616737396076e+00 1.0518657360862174e+00 + -4.1415632082229470e-01 1.4263389786287126e+00 9.8166859382212157e-01 + -3.7631515939273857e-01 1.4467780031019473e+00 6.4015372041184215e-01 + -2.6713534998115057e-01 1.2649639426756183e+00 4.5765535053353795e-01 + -2.3982137694236619e-01 1.4397456901228027e+00 4.3499963627493421e-01 + id 13042 + loc 3.8691938389092684e-03 1.6151970624923706e-01 403 + blend 0.0000000000000000e+00 + interp 5.5778462720646549e-01:3.8075018889211359e-01:6.8139931812019072e-01:3.9697459229317533e-01:1.4653813871934729e+00:4.6807881135836527e-01:2.0101532062290151e+00:4.0952474387242116e-01:2.6540287094947193e+00:5.5777904936019340e-01:3.2466975260817859e+00:3.6222447437300070e-01:3.8280230999821758e+00 + CVs 20 + -1.7588570367533390e-01 3.3597988865623757e-01 7.5555909482709807e-02 + -3.4899638203814476e-01 6.7068144484988190e-01 1.4175335434047434e-01 + -5.2573330157834419e-01 9.9780667921922128e-01 2.2415093241058720e-01 + -7.0815447338232451e-01 1.3095250790910167e+00 3.3927566724349983e-01 + -8.9537531643580359e-01 1.5988920167920075e+00 5.0053788111188424e-01 + -1.0806899580607234e+00 1.8556800130779798e+00 7.1874464589033071e-01 + -1.2528651910046451e+00 2.0668350446460311e+00 9.9821282446259596e-01 + -1.3988848115747734e+00 2.2183675692488141e+00 1.3345561947830724e+00 + -1.5061698426592347e+00 2.2980130017135059e+00 1.7134410766520911e+00 + -1.5664042423598894e+00 2.2995816705021275e+00 2.1113066859934939e+00 + -1.5792697089272210e+00 2.2257752556802313e+00 2.5031267975293785e+00 + -1.5535232210070828e+00 2.0868950617202433e+00 2.8672492987057061e+00 + -1.5057636584938419e+00 1.8982294311055301e+00 3.1896454929801186e+00 + -1.4521254779404722e+00 1.6740569397135461e+00 3.4706947528104330e+00 + -1.4021159425853706e+00 1.4247740765636729e+00 3.7170430491430344e+00 + -1.3623479116976025e+00 1.1647487233016491e+00 3.9275231817653475e+00 + -1.3422730602076018e+00 9.2157251824234554e-01 4.0954869125407134e+00 + -1.3480985142770356e+00 7.2023940077472814e-01 4.2306132857857701e+00 + -1.3702473659881989e+00 5.0235171983011484e-01 4.4490796426264794e+00 + id 13043 + loc 3.0686259269714355e-01 1.1124499142169952e-01 417 + blend 0.0000000000000000e+00 + interp 1.8518540607370109e+00:5.5003994939248380e-01:8.9090814644062888e-01:3.5526218851037605e-01:1.0770602341319917e+00:2.2511189622418570e-01:1.6588448541472813e+00:2.9815068050414073e-01:2.2983715069009865e+00:1.3399807876007688e+00:2.9749329552574388e+00:1.8518440607370108e+00:3.0010502621548154e+00 + CVs 20 + -3.2328065144630908e-01 7.4754193165049831e-02 2.2044611478504395e-01 + -5.2366610108536982e-01 1.0572820828931936e-01 3.7190724979761391e-01 + -6.8439472428257131e-01 1.2172677197420489e-01 5.0247607288417728e-01 + -8.6026109053090283e-01 1.4506443919863116e-01 6.3171032705614272e-01 + -1.0499289644835115e+00 1.7454890545442697e-01 7.5661850521360485e-01 + -1.2514019000958285e+00 2.0746647542879404e-01 8.7407342179580727e-01 + -1.4624394683745194e+00 2.3961062789675774e-01 9.8119973917364123e-01 + -1.6803404675622216e+00 2.6582188624754066e-01 1.0751964290088925e+00 + -1.9008061934841225e+00 2.8072603048353917e-01 1.1525507772169825e+00 + -2.1183533057354982e+00 2.7913898104464252e-01 1.2093275853442507e+00 + -2.3293679286828639e+00 2.5669407864771743e-01 1.2435885437850427e+00 + -2.5338949336038850e+00 2.1237188137342389e-01 1.2568194028919075e+00 + -2.7333773922056150e+00 1.4895241551990501e-01 1.2518521465882215e+00 + -2.9281055192025809e+00 7.0444486278751439e-02 1.2324639798621670e+00 + -3.1188005566719781e+00 -2.0477762511850184e-02 1.2052797140949305e+00 + -3.3068673145469885e+00 -1.2235189703733473e-01 1.1780698850345730e+00 + -3.4915404757185859e+00 -2.3279076847627556e-01 1.1552329952954876e+00 + -3.6706243677290193e+00 -3.4702510479676230e-01 1.1370680112404870e+00 + -3.8683202823313620e+00 -4.4899315719555832e-01 1.1461747817470647e+00 + id 13044 + loc 5.5816308595240116e-03 5.4221726953983307e-02 377 + blend 0.0000000000000000e+00 + interp 4.0148300223568273e-01:1.3365171357357880e-01:1.0347859154656553e+00:2.1266622016438480e-01:1.9819317128114107e+00:4.0147898740566040e-01:2.9469390454725963e+00:3.2699618283379639e-01:3.5397565049299176e+00 + CVs 20 + -4.7614490042983881e-01 4.0353967644935812e-01 8.7213369618755709e-01 + -7.3158531466851584e-01 6.1099334141386230e-01 1.5614955521821041e+00 + -8.5520717798049128e-01 6.9075412977680362e-01 2.2407443866555097e+00 + -9.1349060528677495e-01 6.9395728974829085e-01 2.9732112838992579e+00 + -9.6168198158346718e-01 6.4313201074556836e-01 3.7357783223836365e+00 + -1.0556274881632306e+00 5.3690451641434289e-01 4.4867886101634191e+00 + -1.2291465316682932e+00 3.5634257863388252e-01 5.1800896418556093e+00 + -1.4889632541368516e+00 9.3594294299029102e-02 5.7754475523618440e+00 + -1.8139976927657506e+00 -2.3520332461180482e-01 6.2427055577951709e+00 + -2.1629675590435529e+00 -6.0176657004052370e-01 6.5868381327894792e+00 + -2.4939818209201379e+00 -9.8999633130670350e-01 6.8445677937814597e+00 + -2.7763590815880574e+00 -1.4076407788223144e+00 7.0577750275695550e+00 + -2.9912724125269996e+00 -1.8838709568705090e+00 7.2586792746837210e+00 + -3.1346776887742109e+00 -2.4598758541957659e+00 7.4712529674429078e+00 + -3.2168517155365079e+00 -3.1464137830180339e+00 7.7183385519974586e+00 + -3.2578747280877667e+00 -3.8908443221143760e+00 8.0271788676480451e+00 + -3.2533984985561464e+00 -4.5987849723638643e+00 8.4067889412701184e+00 + -3.1950727031382042e+00 -5.2071307176384058e+00 8.8247732535152359e+00 + -3.1536128826678094e+00 -5.7992147854074094e+00 9.1930720073926366e+00 + id 13045 + loc 4.1747263073921204e-01 2.2238299250602722e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6685961146410498e-01:3.2384351676191281e-01:3.2112177518810903e-02:2.4728273170633447e-01:8.7556799253811601e-01:3.2117072115439493e-01:1.2684889897109186e+00:2.9337636528764965e-01:1.9877450340156151e+00:3.1925626603916907e-01:2.6722012032702862e+00:4.6685494286799034e-01:3.1416643966067719e+00:3.8101768030662209e-01:3.7009171246542616e+00 + CVs 20 + 1.9091503418851299e-01 3.6802115719903927e-01 -3.5630687381959691e-01 + 3.0647355137178156e-01 7.1347314280032748e-01 -7.0705152284679929e-01 + 3.7592283469826776e-01 1.0280202677530828e+00 -1.0583278964430638e+00 + 3.9885124346746870e-01 1.3141644945147117e+00 -1.4135864675437058e+00 + 3.6813623863319156e-01 1.5621761854787808e+00 -1.7668677828233643e+00 + 2.7522346278580628e-01 1.7593805924738206e+00 -2.1111314293145447e+00 + 1.2084497429024721e-01 1.8909582470929356e+00 -2.4339456682272687e+00 + -7.7764606596002372e-02 1.9483344926409019e+00 -2.7190311011502897e+00 + -2.9134764695198445e-01 1.9320159582068124e+00 -2.9525731068820757e+00 + -4.8696484042921295e-01 1.8556477238582674e+00 -3.1279845081330011e+00 + -6.4644469331202226e-01 1.7487941479729692e+00 -3.2503607768434857e+00 + -7.7845054132269897e-01 1.6422145571750981e+00 -3.3341680898695651e+00 + -9.0456037332392092e-01 1.5503835610195786e+00 -3.3926939098489837e+00 + -1.0381387811723397e+00 1.4733216738983237e+00 -3.4304608429241359e+00 + -1.1751015186679350e+00 1.4129702639765755e+00 -3.4433019592365541e+00 + -1.3080246015369315e+00 1.3888447756753382e+00 -3.4238458803630905e+00 + -1.4770834854797867e+00 1.4291611466646064e+00 -3.3803511013406844e+00 + -1.7513961055114224e+00 1.4383264302132768e+00 -3.3614775329176001e+00 + -1.8332364330065707e+00 1.2878534604386027e+00 -3.3130162012509534e+00 + id 13046 + loc 4.5068189501762390e-01 1.1802761256694794e-01 380 + blend 0.0000000000000000e+00 + interp 5.6352834934646723e-01:2.9423467815147619e-01:2.8292408970287453e-01:4.7631516439863220e-01:8.4856775069084112e-01:5.6352271406297383e-01:1.1651563113539971e+00:4.3239244745892291e-01:1.7040598207592212e+00:3.6004739727461582e-01:2.0975247063123610e+00:3.9927337095959387e-01:2.9976154718022459e+00:3.7452239710896768e-01:3.8613302754020986e+00 + CVs 20 + -5.1623311050245890e-01 2.8301143625717923e-01 6.1393227839842113e-01 + -8.8466142285749350e-01 4.7354872532477821e-01 1.1288827966702981e+00 + -1.2246144758702642e+00 6.3317763846378217e-01 1.6135892462530976e+00 + -1.5942282167627710e+00 7.8771868131242395e-01 2.0933109621585766e+00 + -1.9989163293241055e+00 9.2327917865372278e-01 2.5490613330114540e+00 + -2.4384076303299658e+00 1.0196155873845423e+00 2.9682560008987249e+00 + -2.9058336376966292e+00 1.0551792485000693e+00 3.3461600256808413e+00 + -3.3862216801138874e+00 1.0135095122390150e+00 3.6796577394468635e+00 + -3.8606934964669684e+00 8.8681624367666756e-01 3.9692544698315668e+00 + -4.3122808579323983e+00 6.7406767647550936e-01 4.2239363335807596e+00 + -4.7221687147728977e+00 3.7920584310940608e-01 4.4573509832288165e+00 + -5.0659043496004674e+00 1.1226892512988584e-02 4.6779091010745084e+00 + -5.3211879080803453e+00 -4.2408779214021042e-01 4.8836754534378173e+00 + -5.4761770860077963e+00 -9.3423662520778805e-01 5.0709595406763839e+00 + -5.5448003566021109e+00 -1.5275320869247770e+00 5.2556177148451875e+00 + -5.5749640646826029e+00 -2.1862429413675524e+00 5.4780511291864800e+00 + -5.5999806711326405e+00 -2.8488791109423448e+00 5.7817706225386925e+00 + -5.6019537533932082e+00 -3.4336206152901401e+00 6.1876493860145416e+00 + -5.5858848785319344e+00 -3.9482964578493829e+00 6.6095155390672229e+00 + id 13047 + loc 9.0901029109954834e-01 6.4510655403137207e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5792163220409154e-01:4.5791705298776952e-01:1.9248639394134792e-02:3.9692929981801278e-01:7.4921284764298557e-01:3.5661365390154587e-01:1.1939071695772361e+00:4.4291442703021883e-01:2.0374969685280098e+00:3.1104756959272106e-01:2.4710547210903648e+00:3.6016679464949980e-01:2.8519439121966501e+00:3.4842560319996052e-01:3.2989260615384621e+00 + CVs 20 + 7.8091731103557188e-02 3.0845328975535519e-01 -1.1039921042674174e-01 + 1.6212532070683411e-01 6.1450768577394588e-01 -2.4971698294369132e-01 + 2.5592518125176861e-01 9.1986777980736600e-01 -4.0605505189273577e-01 + 3.7077511201470881e-01 1.2294706577570373e+00 -5.7121750552628414e-01 + 5.2181342909845241e-01 1.5424194064597669e+00 -7.3747929248629274e-01 + 7.1862889456852974e-01 1.8550606882381140e+00 -8.9964429941259016e-01 + 9.7939700855231915e-01 2.1621572367354105e+00 -1.0611998679656844e+00 + 1.3400258956315154e+00 2.4304347191685993e+00 -1.2269555074817824e+00 + 1.8157237718325820e+00 2.5789086714020359e+00 -1.3958946940018804e+00 + 2.3824003056554082e+00 2.5131573002824013e+00 -1.5677062365868057e+00 + 2.9450977098718467e+00 2.1636933312820537e+00 -1.7005226513566942e+00 + 3.3666397173323648e+00 1.5749756780712958e+00 -1.7214013103596941e+00 + 3.5819989398675474e+00 8.5245656624171884e-01 -1.6006269174661822e+00 + 3.5850120591443018e+00 1.1063651411196462e-01 -1.3386274515260270e+00 + 3.4450017638745565e+00 -5.5703969801998610e-01 -9.2373262258648625e-01 + 3.2641397000821746e+00 -1.0948487216066916e+00 -3.0655736424775726e-01 + 3.1218252024056103e+00 -1.4040913983144832e+00 5.2666798698530592e-01 + 3.0419751963585151e+00 -1.4188605064230333e+00 1.4277576643555572e+00 + 2.9109122466459509e+00 -1.4278903614904848e+00 2.0351813517308521e+00 + id 13048 + loc 9.3020403385162354e-01 3.1626281142234802e-01 402 + blend 0.0000000000000000e+00 + interp 5.1019517909928680e-01:3.8799561487640760e-01:6.3625857377188288e-02:4.6092727163310365e-01:4.8588555761912866e-01:4.1346919756212508e-01:9.8316620195851701e-01:5.1019007714749587e-01:1.5057323329080408e+00:3.8962560244644973e-01:1.9999296305419478e+00:3.2000179946663504e-01:2.4671147882114375e+00:3.4807267808729370e-01:3.0120418010362169e+00:2.6215413163592050e-01:3.7259053979509105e+00 + CVs 20 + 3.6266254674673926e-03 1.7788809732298455e-01 2.9247280305702339e-01 + 6.2624233094840248e-03 3.5335437150837812e-01 5.5736831846376489e-01 + -1.2685290531696272e-02 5.4173832530076926e-01 7.8749788704772417e-01 + -8.2989414413611434e-02 7.9052247504689910e-01 1.0404356658154281e+00 + -1.4105041479853406e-01 1.1010249328019786e+00 1.4264792290281705e+00 + -6.9703718499649875e-02 1.4143647018381502e+00 1.8824840945547121e+00 + 1.3164336473822791e-01 1.6953922260548466e+00 2.2892441202495166e+00 + 4.1267878325548357e-01 1.9292333807830395e+00 2.6079012586756654e+00 + 7.4806821478650698e-01 2.1072400697516458e+00 2.8677406482218810e+00 + 1.1316917314342565e+00 2.2074418796813045e+00 3.1236415502305825e+00 + 1.5171320965127446e+00 2.1550074725385255e+00 3.4142233224238017e+00 + 1.8099101396129817e+00 1.8817907666690188e+00 3.7239183042635595e+00 + 2.0079896364826610e+00 1.4269295656764494e+00 4.0098198682382478e+00 + 2.2080703147416352e+00 8.7827490378978879e-01 4.2510254988793168e+00 + 2.5045102556576038e+00 3.1412316371734050e-01 4.4438946683812439e+00 + 2.9479218906746967e+00 -2.0759909300478085e-01 4.5947318527125018e+00 + 3.5262887458310699e+00 -6.8460978669639161e-01 4.7418167258140107e+00 + 4.1881497768531180e+00 -1.1571368775608586e+00 4.9525166667483216e+00 + 4.8853995886476751e+00 -1.6521943484091177e+00 5.2350643493792415e+00 + id 13049 + loc 8.1263649463653564e-01 6.0495334863662720e-01 1081 + blend 0.0000000000000000e+00 + interp 3.6236569382556399e-01:3.0948064288552757e-01:2.1669932078211640e-01:2.8813905965848746e-01:9.6589318591283102e-01:3.0746205325335374e-01:1.5047773981785677e+00:3.3442612428585439e-01:2.0682309607467140e+00:3.6236207016862576e-01:2.8103612136751206e+00:2.7681857751430528e-01:3.4482606108858067e+00 + CVs 20 + -1.3980031464659037e-02 4.5007343032104230e-01 4.1140055982392676e-01 + -9.4477819613136838e-03 7.7955175208513716e-01 6.7792838131559352e-01 + -7.7918537544358069e-04 1.0606557741716456e+00 8.9347051839042380e-01 + 5.0607325926380620e-03 1.3320204823853632e+00 1.1100678305689484e+00 + 1.6640589286541441e-02 1.5999848001632522e+00 1.3302185881206441e+00 + 4.4407355123684822e-02 1.8779511613832640e+00 1.5569008898713046e+00 + 1.0601702318922646e-01 2.1922610572789023e+00 1.7823410985980952e+00 + 2.3590234983856428e-01 2.5836962750262922e+00 1.9720951233286934e+00 + 4.8935921482320965e-01 3.0786180222152941e+00 2.0268559275975031e+00 + 8.6058449680410620e-01 3.5539056902319857e+00 1.8056953166699539e+00 + 1.2112097201756962e+00 3.8084147932951709e+00 1.3795233595711220e+00 + 1.4704273013808757e+00 3.8479251732363617e+00 9.2678542749509463e-01 + 1.6585783643008363e+00 3.7489600448007439e+00 5.0816571763317109e-01 + 1.8019380129725713e+00 3.5509173964636749e+00 1.2585651284228394e-01 + 1.9189511081489079e+00 3.2558704859515561e+00 -2.3753872663637243e-01 + 2.0220644961170313e+00 2.8128463261345149e+00 -6.0591229230442389e-01 + 2.1105287634925887e+00 2.1675336988129121e+00 -9.0249260401246123e-01 + 2.1762168817895793e+00 1.4847437178834555e+00 -9.4962808830382917e-01 + 2.2221377246649663e+00 1.1363878811785117e+00 -7.6794246334236904e-01 + id 13050 + loc 2.2648927569389343e-01 2.6698985695838928e-01 373 + blend 0.0000000000000000e+00 + interp 4.1136641536992369e-01:3.7610218380655014e-01:5.2506050701579188e-01:4.1136230170576998e-01:9.9032548108779084e-01:2.7899777930328540e-01:1.6985314195358123e+00:3.0668214555484641e-01:2.2985308928904620e+00:3.3016134506875028e-01:3.0617198707951756e+00:3.1017850988672985e-01:3.9236160593034901e+00 + CVs 20 + -4.0370200202608168e-02 9.7859443073722185e-01 3.2456167875842468e-01 + -1.7793771262004038e-01 1.9261814950019254e+00 5.6697574841179355e-01 + -4.5622504649823081e-01 2.8123550642510278e+00 6.5855444121857609e-01 + -8.8430749264038178e-01 3.5786275453443901e+00 5.1698528416640532e-01 + -1.4304805368780511e+00 4.1418195166969367e+00 1.2648380879850207e-01 + -2.0318583539584818e+00 4.4198514431794012e+00 -4.7305368672163817e-01 + -2.6144255201823352e+00 4.3377926936903322e+00 -1.2252831689269754e+00 + -3.1033891608476338e+00 3.8748556581902021e+00 -2.0368696569216249e+00 + -3.4197592204359912e+00 3.0633532186507368e+00 -2.7987611795324550e+00 + -3.4943195784019703e+00 1.9847863508585772e+00 -3.4007784183192649e+00 + -3.3063702717979737e+00 7.9791051187251871e-01 -3.7696757558661327e+00 + -2.9421429958949239e+00 -3.1492990675013743e-01 -3.9470387939950031e+00 + -2.5321969523176855e+00 -1.2745398714523917e+00 -4.0833022731626469e+00 + -2.1903902066621366e+00 -2.0667477953379541e+00 -4.3252965200699389e+00 + -2.1114148818419709e+00 -2.5514428904891782e+00 -4.7524051037930590e+00 + -2.3484378300341899e+00 -2.6155004064549114e+00 -5.0569588652016098e+00 + -2.5427732313206679e+00 -2.6186100599291282e+00 -5.0124665743726124e+00 + -2.5237186720649820e+00 -2.7551625184218684e+00 -4.9265902774260963e+00 + -2.9491668725931537e+00 -2.9539472377316143e+00 -5.2525126860613680e+00 + id 13051 + loc 3.7122738361358643e-01 6.7360121011734009e-01 382 + blend 0.0000000000000000e+00 + interp 3.7527035450509671e-01:3.1907116429164484e-01:8.4008807076038572e-01:3.7526660180155169e-01:1.2259439381873702e+00:2.6316065533137406e-01:1.9562060254583709e+00:3.7479740578063275e-01:2.2028500517098499e+00:3.5863583825041018e-01:3.1172101663041660e+00:3.0407733306975399e-01:3.9985794580522986e+00 + CVs 20 + 9.1772965420852282e-01 1.5500800711128154e-01 -5.7262787665645709e-01 + 1.5327554557919427e+00 1.7059983180193528e-01 -1.0384391312044379e+00 + 2.0805031219024315e+00 1.4107543516055332e-01 -1.4961135970575230e+00 + 2.6534342305109262e+00 1.0265214022137814e-01 -1.9743389964774463e+00 + 3.2379161911759424e+00 5.4061169984280566e-02 -2.4479348528264318e+00 + 3.8162585960095252e+00 -4.5726946329734952e-03 -2.8964188497207948e+00 + 4.3726219862678981e+00 -7.4201735530713409e-02 -3.3079066758645794e+00 + 4.8979599711942186e+00 -1.5936927932661415e-01 -3.6795595181361564e+00 + 5.3887891675382544e+00 -2.6280098777811856e-01 -4.0214251023158907e+00 + 5.8459227144339501e+00 -3.8463077813827629e-01 -4.3572319062995533e+00 + 6.2706703018274395e+00 -5.3277859533222127e-01 -4.7097459561186454e+00 + 6.6553381759281445e+00 -7.2028469709333676e-01 -5.0907043325286336e+00 + 6.9848508102438123e+00 -9.6122237525708587e-01 -5.5007389388342371e+00 + 7.2449114540237787e+00 -1.2701389145334074e+00 -5.9300985071934065e+00 + 7.4242300973891471e+00 -1.6572347806578498e+00 -6.3627107855609939e+00 + 7.5145574543657565e+00 -2.1229003105241921e+00 -6.7851797736226835e+00 + 7.5133537692389458e+00 -2.6520406398213594e+00 -7.1791274214755667e+00 + 7.4320992595255913e+00 -3.2018787193167713e+00 -7.5047110171436451e+00 + 7.2859806052019280e+00 -3.6121192049355697e+00 -7.6151909448569839e+00 + id 13052 + loc 6.4459049701690674e-01 9.4640845060348511e-01 399 + blend 0.0000000000000000e+00 + interp 5.8107633196483743e-01:2.8988141695649500e-01:6.9206607532439457e-02:3.2986280345500163e-01:8.6162979118894056e-01:5.8107052120151781e-01:1.1807329967278648e+00:5.8054372952609734e-01:1.6470163884918272e+00:5.3489630578480052e-01:1.9913577724267963e+00:2.5481464625019484e-01:2.3511318313055090e+00:2.7671586139043386e-01:3.2564994025614804e+00 + CVs 20 + -1.7636301786080688e-01 2.8420131750406374e-01 -1.4056488382433655e-01 + -3.3750326043287915e-01 5.7213218859084003e-01 -2.8188678721561977e-01 + -4.9107988615005432e-01 8.6120567008363069e-01 -4.3283043159684154e-01 + -6.4645320853206534e-01 1.1473362187072538e+00 -6.0440680870635832e-01 + -8.1283390779708331e-01 1.4204169860488929e+00 -8.0875474019426596e-01 + -9.9674590343693448e-01 1.6635005781019778e+00 -1.0534606219276761e+00 + -1.1973423393427391e+00 1.8511839341433238e+00 -1.3370728141911910e+00 + -1.4064980625108323e+00 1.9617518607091822e+00 -1.6455693188232439e+00 + -1.6256881817859166e+00 2.0032053887031358e+00 -1.9618217530787587e+00 + -1.8653386872210218e+00 1.9974035743411813e+00 -2.2772568268761360e+00 + -2.1048975288368172e+00 1.9350504533998303e+00 -2.5822068441686241e+00 + -2.2784179941346263e+00 1.7833184592804829e+00 -2.8540513651529080e+00 + -2.3500764919646868e+00 1.5378472287777756e+00 -3.0869598900199522e+00 + -2.3693843481047154e+00 1.2356992421422248e+00 -3.3077458021541437e+00 + -2.3880778530481326e+00 9.2405297252811747e-01 -3.5308730313998433e+00 + -2.3820503288545578e+00 5.5545997304875228e-01 -3.7424122363046188e+00 + -2.3472331906433483e+00 -7.1544589750700160e-02 -3.9286683126669160e+00 + -2.5470818658539431e+00 -9.9558447244642845e-01 -4.1212430579749935e+00 + -2.7014257331099509e+00 -1.2115609947238741e+00 -4.2669155072532927e+00 + id 13053 + loc 9.3329989910125732e-01 8.3440566062927246e-01 409 + blend 0.0000000000000000e+00 + interp 4.9582762598438401e-01:3.2447877337509901e-01:7.5089543373817036e-01:4.5754105752434704e-01:1.3446074148171230e+00:3.7098990851428898e-01:1.9998744580062051e+00:4.1486228330329411e-01:2.8139585166895564e+00:4.9582266770812417e-01:3.1965398337415483e+00:4.1397847164107454e-01:3.9991937267038424e+00 + CVs 20 + 4.4338958624618624e-01 1.7796443415880908e-01 -1.7913476579570956e-01 + 8.1747858085099334e-01 2.7859335127864182e-01 -3.3338165518992779e-01 + 1.1779098387646132e+00 3.4197720946955551e-01 -4.7139036777351190e-01 + 1.5507777429847054e+00 3.8783848908579466e-01 -5.9784934825794533e-01 + 1.9296720956887166e+00 4.1447707482461726e-01 -7.1476204993464854e-01 + 2.3077125626525588e+00 4.2249101963968461e-01 -8.2667329959637237e-01 + 2.6773084565110317e+00 4.1481027441977325e-01 -9.3922331144050875e-01 + 3.0313003627167143e+00 3.9427003244919279e-01 -1.0566775789418541e+00 + 3.3663139725659352e+00 3.6183471491588226e-01 -1.1810652872199179e+00 + 3.6809123388093896e+00 3.1755309480845750e-01 -1.3135478998235430e+00 + 3.9722002056844090e+00 2.6145319584359639e-01 -1.4565318200497992e+00 + 4.2403418954360372e+00 1.9045594531154419e-01 -1.6141156846117197e+00 + 4.4898429564436331e+00 9.7499341524660110e-02 -1.7872822693832311e+00 + 4.7234101575842491e+00 -2.1651685897853490e-02 -1.9692522068940330e+00 + 4.9408735929180949e+00 -1.6465926219637339e-01 -2.1506695690443816e+00 + 5.1419706195619952e+00 -3.2794653728050793e-01 -2.3261489468331109e+00 + 5.3268017440985966e+00 -5.1215785738101394e-01 -2.4943691167119102e+00 + 5.4904830339473527e+00 -7.1869043187431192e-01 -2.6477059820369604e+00 + 5.5652094793978364e+00 -9.4732743680187959e-01 -2.7486570149037703e+00 + id 13054 + loc 8.9828723669052124e-01 6.5993940830230713e-01 395 + blend 0.0000000000000000e+00 + interp 5.3304078416728295e-01:2.8199225217242019e-01:6.1292514147647248e-03:2.9648723375339830e-01:9.4643640501496873e-01:3.7959131152814940e-01:1.7347699088600788e+00:3.5870452609057490e-01:2.0751785527605424e+00:5.0452566467891491e-01:2.6441242782744951e+00:5.3303545375944128e-01:2.9990602606859467e+00:5.1961998707673795e-01:3.3100988931593953e+00:4.6120540004732868e-01:3.6738428148868651e+00 + CVs 20 + 4.0587972259393656e-01 1.4723767892308887e-01 -4.8998005797461919e-01 + 6.9617389622469039e-01 1.8901915882817977e-01 -8.8020098102709465e-01 + 9.4251955659433162e-01 1.7573394037681045e-01 -1.2414167887091188e+00 + 1.1770809774951416e+00 1.3128815378948733e-01 -1.6022378961759598e+00 + 1.4015091348146977e+00 6.0512219544424650e-02 -1.9526899524982815e+00 + 1.6173213894309155e+00 -3.1705220419854685e-02 -2.2836672563010927e+00 + 1.8237882717081757e+00 -1.4066030765026860e-01 -2.5893095011499629e+00 + 2.0139560953398217e+00 -2.6311082549264708e-01 -2.8652342727307598e+00 + 2.1742176012850782e+00 -3.9675145575125326e-01 -3.1027447453493444e+00 + 2.2966496933573861e+00 -5.3203482201081043e-01 -3.2874129158530856e+00 + 2.3863035082908279e+00 -6.5854547826932786e-01 -3.4147058278192191e+00 + 2.4558265740813532e+00 -7.7755837488148760e-01 -3.5006452696839325e+00 + 2.5166053694640165e+00 -9.0230869047066364e-01 -3.5709278923160950e+00 + 2.5769545556343485e+00 -1.0434618321316746e+00 -3.6401706548812252e+00 + 2.6452699748275612e+00 -1.2043349604209344e+00 -3.7109075291599636e+00 + 2.7265297826801222e+00 -1.3789218583021816e+00 -3.7823616191890106e+00 + 2.8203094653167815e+00 -1.5565920417781207e+00 -3.8547433733725773e+00 + 2.9222225415138663e+00 -1.7463795659603796e+00 -3.9296512447960454e+00 + 2.9905429918819117e+00 -2.2181419232229600e+00 -4.0382847315002994e+00 + id 13055 + loc 3.8756087422370911e-01 8.1723439693450928e-01 402 + blend 0.0000000000000000e+00 + interp 4.8514686624919834e-01:4.3859746702370522e-01:8.6993917171755419e-02:4.2806443720652015e-01:9.0493789928762314e-01:4.1485767581204791e-01:1.5729601280948613e+00:4.8514201478053587e-01:2.0058371204664591e+00:3.1200758507157572e-01:2.6235752524317926e+00:3.9745266477030267e-01:3.5793581175302052e+00 + CVs 20 + -7.2623991398288998e-02 1.4570357029844561e-01 -1.4485048092530609e-01 + -1.1547566943488999e-01 3.0355181486956795e-01 -2.9811757953041446e-01 + -1.5226739928912569e-01 4.5835416700651976e-01 -4.5968051344674932e-01 + -1.9305911686364133e-01 6.0345045236715644e-01 -6.2741119485207630e-01 + -2.4401125915169264e-01 7.4042870772622360e-01 -8.0077255938618996e-01 + -3.1342404896384402e-01 8.6750467511897877e-01 -9.7613924376615802e-01 + -4.0806527365300044e-01 9.8003024618091472e-01 -1.1478921207697361e+00 + -5.3050577804135735e-01 1.0737084889824562e+00 -1.3101193154746122e+00 + -6.7911362239174500e-01 1.1466969660855004e+00 -1.4571850593753273e+00 + -8.4970018259025049e-01 1.1998385951619457e+00 -1.5845903175841998e+00 + -1.0362953104428858e+00 1.2346931202538141e+00 -1.6888366233826995e+00 + -1.2316295705437605e+00 1.2547767278874939e+00 -1.7684041768534271e+00 + -1.4301550872669446e+00 1.2652961601946990e+00 -1.8248291189324555e+00 + -1.6256647029359395e+00 1.2727326606996963e+00 -1.8575995984545037e+00 + -1.8083238086172155e+00 1.2847901053230726e+00 -1.8624244687157843e+00 + -1.9638398752135382e+00 1.3056138324784710e+00 -1.8377544380265780e+00 + -2.0860144655847144e+00 1.3332475980174974e+00 -1.7930282294545608e+00 + -2.1896013607992799e+00 1.3645265792922077e+00 -1.7413469351405801e+00 + -2.4031824591192046e+00 1.3785735515438318e+00 -1.6886976246037451e+00 + id 13056 + loc 7.4688929319381714e-01 7.9136866331100464e-01 1081 + blend 0.0000000000000000e+00 + interp 4.5135588085269662e-01:3.0954091851273413e-01:4.9051839408063014e-03:4.5135136729388814e-01:8.5988512497747638e-01:2.9727798341285927e-01:1.6496132968999877e+00:3.3378878314517035e-01:2.2150197605352719e+00:4.2559762267414636e-01:2.9344687684563029e+00:3.5053510828956691e-01:3.3486287731706623e+00 + CVs 20 + 5.9453271499878738e-02 4.8036843653213335e-01 4.2013904577528077e-01 + 1.4027349287253496e-01 8.4116170533184276e-01 6.6531580693801529e-01 + 2.3488285877993947e-01 1.1540783825479979e+00 8.3877275202890100e-01 + 3.3878162154795188e-01 1.4481434360808048e+00 9.8534228615419517e-01 + 4.5171781937817351e-01 1.7158207571475448e+00 1.1019270509849235e+00 + 5.6519614712451305e-01 1.9454918859262094e+00 1.1884819230170773e+00 + 6.6347151492693168e-01 2.1271476663833058e+00 1.2496196839904150e+00 + 7.2989911976564736e-01 2.2635961811287051e+00 1.3021409036992502e+00 + 7.6038958584261507e-01 2.3826951255564568e+00 1.3742119989426700e+00 + 7.8657423675314098e-01 2.5266251306659679e+00 1.4609867395444400e+00 + 8.4140655136596920e-01 2.6748591223701856e+00 1.4974093551889287e+00 + 9.0145570295727118e-01 2.7617080589934266e+00 1.4589136854334417e+00 + 9.3490450475557563e-01 2.7626438112668219e+00 1.3740762865940253e+00 + 9.2924396925289043e-01 2.6830545040970457e+00 1.2710942384276356e+00 + 8.8577721043119617e-01 2.5450876342970643e+00 1.1646108207988264e+00 + 8.1637758779976832e-01 2.4006493242970448e+00 1.0539159735999850e+00 + 7.3475180876824775e-01 2.2925964735960318e+00 9.3606551155477602e-01 + 6.4125266816257964e-01 2.1598135527443567e+00 8.9716315519212142e-01 + 5.2092971917667708e-01 1.8523078232885328e+00 1.2000827903067957e+00 + id 13057 + loc 6.3454312086105347e-01 1.5603269636631012e-01 400 + blend 0.0000000000000000e+00 + interp 4.4565760141866306e-01:4.0341422858395620e-01:1.0057346649519749e-01:3.4637897686055585e-01:9.9454755975544007e-01:4.4565314484264890e-01:1.4959668088900828e+00:3.0390582477096251e-01:1.9900850043212928e+00:4.3556654063924266e-01:2.8158361397734009e+00:3.6907505213521113e-01:3.2804589421068169e+00 + CVs 20 + 1.4088044534683855e-01 7.6433867715159851e-02 9.7162988996141272e-02 + 2.7981483508631011e-01 1.9308178422223296e-01 2.2931079820912370e-01 + 4.0569794219916655e-01 3.1643805494938726e-01 3.6554885015980115e-01 + 5.1490142963898611e-01 4.3028917939621125e-01 4.9170617273490175e-01 + 6.0756360778276031e-01 5.3478186638455538e-01 6.0919241894926368e-01 + 6.8464433135787872e-01 6.3106366277271397e-01 7.1903037402738401e-01 + 7.4845938521958455e-01 7.2357736709267029e-01 8.1818313999675429e-01 + 8.0207693172297512e-01 8.2116567764233028e-01 9.0042224140146099e-01 + 8.4474406769533483e-01 9.3684520370785607e-01 9.6725922010192478e-01 + 8.7085285583755057e-01 1.0857450111912605e+00 1.0346071204555511e+00 + 8.8544107065634492e-01 1.2730723219504720e+00 1.1249472853232434e+00 + 9.1265777843822404e-01 1.4751711541019428e+00 1.2520107441948871e+00 + 9.6804290184258235e-01 1.6525948013483389e+00 1.4149561184807569e+00 + 1.0429030438621825e+00 1.7807012667008255e+00 1.6129317152458407e+00 + 1.1291594208596549e+00 1.8518139985091073e+00 1.8428764373025945e+00 + 1.2393883551014111e+00 1.8697923760712836e+00 2.0880033762466637e+00 + 1.3884996801316618e+00 1.8372866405135793e+00 2.3243973575093491e+00 + 1.5601774916391860e+00 1.7398012927003408e+00 2.5292523135586613e+00 + 1.6752979215117481e+00 1.5281933923526207e+00 2.6423479091090698e+00 + id 13058 + loc 5.0413304567337036e-01 4.2247107625007629e-01 393 + blend 0.0000000000000000e+00 + interp 4.5927632255378292e-01:4.5927172979055741e-01:3.3018847153226061e-01:4.2670054376411903e-01:9.9474708255194821e-01:3.2921391486394169e-01:1.4082359347647506e+00:4.1878500002256058e-01:1.9874115064840536e+00:3.0842936172443580e-01:2.3628686617541481e+00:3.1542121540717327e-01:3.0103367485220347e+00:2.8245930172334355e-01:3.9986951363357117e+00 + CVs 20 + 2.1764445524089379e-01 3.0843983415786180e-01 1.5197007073248217e-01 + 4.5079826727766914e-01 6.2588792162494566e-01 3.0412367850745853e-01 + 6.7476421539057840e-01 9.5533805191019883e-01 4.4896743634926134e-01 + 8.8136945883557849e-01 1.2840450369671657e+00 5.9118778899579882e-01 + 1.0824132412550613e+00 1.5909927522188625e+00 7.5270539930304392e-01 + 1.2865512739664018e+00 1.8635889185865389e+00 9.5756976883677436e-01 + 1.4830446179084289e+00 2.1017875817634057e+00 1.2122906533149922e+00 + 1.6574730833966078e+00 2.3099222904942045e+00 1.5065945899997546e+00 + 1.8145085403781001e+00 2.4904033503982914e+00 1.8360472009331168e+00 + 1.9724328613475377e+00 2.6390176520709980e+00 2.2046663620340596e+00 + 2.1519820709380042e+00 2.7415539116362111e+00 2.6174704574778893e+00 + 2.3708841431691035e+00 2.7725948798090752e+00 3.0709848795045516e+00 + 2.6354518691710549e+00 2.6985841168494291e+00 3.5425565409204962e+00 + 2.9390598227573825e+00 2.4931710152545823e+00 3.9768097018046067e+00 + 3.2726649032264366e+00 2.1645107092698961e+00 4.2841085031331918e+00 + 3.6366601299043024e+00 1.7863031602113557e+00 4.3852719059907024e+00 + 4.0400222299035242e+00 1.4811988049163982e+00 4.2832673698445927e+00 + 4.4857610578422538e+00 1.2907611153176846e+00 4.0525618467233846e+00 + 5.0276200698655273e+00 9.5318767014030126e-01 3.7761936919747323e+00 + id 13059 + loc 2.3005064576864243e-02 6.1391800642013550e-01 415 + blend 0.0000000000000000e+00 + interp 3.8746543817286605e-01:3.1356129210096229e-01:7.8291513099083443e-01:2.8658459302437167e-01:1.1331492386178330e+00:3.7320465682850457e-01:1.6610386249300793e+00:3.5018317274623229e-01:2.0000169493146962e+00:3.6145055045726904e-01:2.4830428143707466e+00:3.8746156351848432e-01:3.0010224661300411e+00:2.6378019341188552e-01:3.8568228983646060e+00 + CVs 20 + 3.2658923200641016e-01 1.0858630327372960e-01 7.9064136809287977e-02 + 5.6491794834622799e-01 1.6051927063113058e-01 9.4355356629601761e-02 + 7.7893732397450888e-01 1.9003078619326352e-01 9.4185583140976525e-02 + 9.9740077082353562e-01 2.1126110221127881e-01 9.9359387349229888e-02 + 1.2183839543600203e+00 2.2515499736136696e-01 1.1304580069187398e-01 + 1.4393269140612666e+00 2.3158160142607620e-01 1.3781711571098071e-01 + 1.6572186261252484e+00 2.2956721350506165e-01 1.7541401239062648e-01 + 1.8690626800925711e+00 2.1798064959596858e-01 2.2691017547630399e-01 + 2.0713079901702862e+00 1.9537281524265793e-01 2.9254523024158063e-01 + 2.2584050521321313e+00 1.5890165199997608e-01 3.6960072420742551e-01 + 2.4258246141944104e+00 1.0606304687974910e-01 4.5241169807185799e-01 + 2.5757604865419115e+00 3.7764162782003674e-02 5.3950351689657050e-01 + 2.7130926353268729e+00 -4.3647119373915744e-02 6.3447834332120023e-01 + 2.8370716301323546e+00 -1.3561192772935016e-01 7.3316070324248372e-01 + 2.9444287589274558e+00 -2.3389214331161190e-01 8.2249273411120083e-01 + 3.0361733984371413e+00 -3.3467623159197413e-01 8.9576173974415618e-01 + 3.1163599742626680e+00 -4.3779649788680808e-01 9.5868642000497684e-01 + 3.1886670106989898e+00 -5.4629378383402338e-01 1.0221413581898489e+00 + 3.2559458751189054e+00 -6.6391289343620774e-01 1.0964680080698721e+00 + id 13060 + loc 7.4777489900588989e-01 6.5635550022125244e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9466963445264069e-01:3.9466568775629618e-01:7.5945232327827361e-01:3.4295355190929527e-01:1.0913717474319509e+00:3.6618343245137663e-01:1.9785558596774131e+00:3.7431795865241180e-01:2.7222965208737486e+00:3.1585964729783950e-01:3.2458760694657363e+00:2.5467113517500428e-01:3.9903244224268382e+00 + CVs 20 + 1.0483427377161722e-01 2.8970087832349700e-01 -1.4952296973787532e-01 + 2.1911241957736102e-01 5.7369456206943947e-01 -2.8618886459044268e-01 + 3.5964856432361869e-01 8.3795497195037039e-01 -4.0684329624987037e-01 + 5.4569129021146834e-01 1.0628517731501195e+00 -5.0711790937631152e-01 + 7.8909505358469589e-01 1.2306633941063632e+00 -5.8502828947857721e-01 + 1.0829438990615647e+00 1.3463557743845931e+00 -6.5385507803421961e-01 + 1.4011870742664942e+00 1.4452555518171901e+00 -7.4043360933163549e-01 + 1.7081718506385943e+00 1.5703370884405565e+00 -8.6798111622980390e-01 + 1.9663938078990135e+00 1.7471251396385159e+00 -1.0434630771970428e+00 + 2.1332991043647773e+00 1.9718105845487659e+00 -1.2573076809245969e+00 + 2.1794788549494766e+00 2.1813324332793318e+00 -1.4789894240138550e+00 + 2.1505171277407071e+00 2.2958331051687724e+00 -1.6702115322438902e+00 + 2.1014193066764313e+00 2.3108643631884300e+00 -1.8393228530274384e+00 + 2.0462027613966929e+00 2.2343264623933430e+00 -1.9917296316111475e+00 + 1.9954700789688327e+00 2.0900125870548663e+00 -2.1016147709635487e+00 + 1.9546336226469136e+00 1.9208006561922821e+00 -2.1556296861324369e+00 + 1.9179424688972730e+00 1.7776113781221090e+00 -2.1561311232102049e+00 + 1.8671227953649443e+00 1.6990020663955414e+00 -2.1240694216342395e+00 + 1.8845070056640039e+00 1.4308919989607234e+00 -2.0498081763852745e+00 + id 13061 + loc 9.5916651189327240e-02 9.0247631072998047e-01 417 + blend 0.0000000000000000e+00 + interp 5.0178184816436855e-01:2.8228571384251283e-01:8.9822734490120104e-01:3.1368499602133881e-01:1.0810367499009206e+00:3.7824560717152150e-01:1.9318832116020865e+00:3.0458156320929219e-01:2.5242394405684152e+00:5.0177683034588694e-01:3.0036010804284512e+00:2.9887415754084590e-01:3.9860443183747130e+00 + CVs 20 + -8.8926033302591287e-02 1.4065023410224328e-01 -6.4037044486539726e-02 + -1.4399411505266269e-01 2.4536393272069576e-01 -8.9280579975641414e-02 + -1.7525456544712906e-01 3.3776707973719106e-01 -9.4478729601057826e-02 + -2.0871864701929549e-01 4.3612994168339536e-01 -1.1117399318735352e-01 + -2.4679797966485870e-01 5.3965355996474007e-01 -1.4407018435302080e-01 + -2.9146181593055454e-01 6.4526488174881202e-01 -1.9666562018678413e-01 + -3.4460467545039353e-01 7.4777544148797448e-01 -2.7157863366032770e-01 + -4.0747432964748648e-01 8.4058048041994671e-01 -3.6957933790408987e-01 + -4.7922671270400613e-01 9.1809240526378921e-01 -4.8849218866604599e-01 + -5.5656539067748656e-01 9.7660719940816987e-01 -6.2317269880134207e-01 + -6.3733490148035543e-01 1.0123117978174416e+00 -7.6751018206439370e-01 + -7.2411700450274152e-01 1.0204160976076402e+00 -9.1811958926895998e-01 + -8.2201293457220470e-01 9.9668483466335511e-01 -1.0747858122855645e+00 + -9.3325287368547016e-01 9.3978420069099289e-01 -1.2373648989035240e+00 + -1.0559194312824622e+00 8.5153142269506832e-01 -1.4016115703867711e+00 + -1.1886691488744876e+00 7.3486706534722734e-01 -1.5607498253179601e+00 + -1.3329486951563854e+00 5.9176606601938786e-01 -1.7111269945643286e+00 + -1.4894419862672676e+00 4.2251555423939080e-01 -1.8545444214954518e+00 + -1.6650987810533087e+00 2.4422666853512065e-01 -2.0173705243922364e+00 + id 13062 + loc 7.4029725790023804e-01 9.6299934387207031e-01 403 + blend 0.0000000000000000e+00 + interp 4.3968759568021282e-01:3.2774497994680440e-01:5.1258460698222486e-04:3.6351972621584344e-01:8.5371431444979839e-01:4.3968319880425605e-01:1.0568023445275745e+00:2.8200443052085128e-01:1.9300389409791847e+00:4.3204608771201264e-01:2.4877897384143619e+00:3.6586115753511778e-01:2.9983399723576758e+00:3.7185016748868610e-01:3.4495557114071254e+00 + CVs 20 + -1.2521422496942453e-01 4.9222751069656380e-02 -3.9046442375706848e-02 + -2.4169669858403214e-01 1.1158468085202011e-01 -7.8834892545485591e-02 + -3.6484102133731011e-01 1.7779811076381519e-01 -1.1786762223676550e-01 + -5.0035164295646473e-01 2.4323258353844679e-01 -1.5390061303704006e-01 + -6.4951729862942542e-01 3.0731285875917735e-01 -1.8365311589468081e-01 + -8.1306210610382035e-01 3.6955091736388401e-01 -2.0261593273567363e-01 + -9.9040881504227940e-01 4.2933404413991583e-01 -2.0546039008375130e-01 + -1.1792069001502310e+00 4.8592338623024639e-01 -1.8685798848821789e-01 + -1.3754223485677661e+00 5.3867502263133060e-01 -1.4186020592718193e-01 + -1.5733988474682168e+00 5.8718853502168800e-01 -6.6274950493549353e-02 + -1.7664488002090177e+00 6.3100788840812283e-01 4.2900467857211980e-02 + -1.9480171179653532e+00 6.6841964188083602e-01 1.8698591904126186e-01 + -2.1116574748127350e+00 6.9675313581214227e-01 3.6467600974821734e-01 + -2.2479845517074901e+00 7.1862549176802570e-01 5.6960034957033767e-01 + -2.3440643815991029e+00 7.4914022013267678e-01 7.8851795494859389e-01 + -2.3879977636003131e+00 8.0865557664878551e-01 1.0046262755981672e+00 + -2.3774246166758561e+00 9.0352215498448685e-01 1.2047150435338292e+00 + -2.3180476033510535e+00 1.0247361985251831e+00 1.3847093807245789e+00 + -2.2926224611554851e+00 1.1163399797293767e+00 1.5852141025502631e+00 + id 13063 + loc 1.3691172003746033e-01 6.8353193998336792e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7339720160395640e-01:3.3147421220779077e-01:6.4456916264379549e-01:3.7339346763194037e-01:1.5575612081736643e+00:3.4353457954940225e-01:2.0444527691761158e+00:3.2812524183454689e-01:2.9999308655340440e+00:2.7516232944682373e-01:3.7567218084931686e+00 + CVs 20 + -4.0424809739513623e-02 3.1937412077291627e-01 -1.5180995154256660e-01 + -4.2303264129914864e-02 6.5821465808961332e-01 -3.3346950405423392e-01 + -3.1211470738536709e-02 1.0134714042241559e+00 -5.3765282282079752e-01 + -1.9814704993370458e-02 1.3837955548565464e+00 -7.6795187065999371e-01 + -1.0368528865706661e-02 1.7575957459046436e+00 -1.0338200042306802e+00 + -7.1637932830542483e-03 2.1189898897373260e+00 -1.3459282593438147e+00 + -1.4357374990933092e-02 2.4496213545761107e+00 -1.7135773389341731e+00 + -3.2116624641401803e-02 2.7251225635590579e+00 -2.1412750614913785e+00 + -5.0568857706579012e-02 2.9210311333316894e+00 -2.6269341647341831e+00 + -4.4082323963946901e-02 3.0331885435564812e+00 -3.1583559984312024e+00 + 1.9798719304634782e-02 3.0750822108688913e+00 -3.7038632459513137e+00 + 1.5195559279674198e-01 3.0502068382201166e+00 -4.2198014222761939e+00 + 3.3681726007716900e-01 2.9517800286529954e+00 -4.6790578807619125e+00 + 5.5947979468264508e-01 2.7883260720520533e+00 -5.0756368128837677e+00 + 8.0174910800339383e-01 2.5869267113830405e+00 -5.4159548839005405e+00 + 1.0209626526867774e+00 2.3741412278651244e+00 -5.7324349618589956e+00 + 1.1768623347876199e+00 2.1724487299067685e+00 -6.0593037494912529e+00 + 1.2758286730543946e+00 2.0062553267026644e+00 -6.3950722634210750e+00 + 1.3562625762694018e+00 1.8815698752074139e+00 -6.7304435396160702e+00 + id 13064 + loc 2.6891294121742249e-01 3.9815816283226013e-01 396 + blend 0.0000000000000000e+00 + interp 4.8087851346359439e-01:4.5917705174347073e-01:3.3010107145130108e-01:3.2804986069530367e-01:1.0017153648582651e+00:2.9127380444606382e-01:1.8628826151775764e+00:2.8707888992291530e-01:2.3404735877109619e+00:2.7825303614917429e-01:3.2642075199293146e+00:4.8087370467845980e-01:3.8979318977174091e+00 + CVs 20 + -3.0723058083884447e-01 2.3896565117818505e-01 -6.3125850175704001e-01 + -5.6915975877901048e-01 3.2438006460853108e-01 -1.0645575032381078e+00 + -8.2651710866364780e-01 3.4362641915448622e-01 -1.4632423730842177e+00 + -1.0877380511841910e+00 3.3337738695142077e-01 -1.8882940251590739e+00 + -1.3458815592090538e+00 2.8877321851732141e-01 -2.3355302435558869e+00 + -1.5954136065900473e+00 2.0717739930427648e-01 -2.7956056674523109e+00 + -1.8356888665408553e+00 8.9832662504982563e-02 -3.2560824282064598e+00 + -2.0662742528625992e+00 -6.2315448601373946e-02 -3.7032332657605949e+00 + -2.2813715142920930e+00 -2.5021961553666094e-01 -4.1206556892957469e+00 + -2.4748672342077835e+00 -4.7195029997320348e-01 -4.4892041477758182e+00 + -2.6510683317502304e+00 -7.2667126029700846e-01 -4.7994466575941113e+00 + -2.8220599150851680e+00 -1.0252572850357065e+00 -5.0593075804189027e+00 + -2.9926047205360566e+00 -1.3838353999089636e+00 -5.2785701991881933e+00 + -3.1551530746654661e+00 -1.8049529994128160e+00 -5.4532007240494611e+00 + -3.3009715347152735e+00 -2.2770628233988335e+00 -5.5699091522071873e+00 + -3.4207605035520370e+00 -2.7830446511769407e+00 -5.6141296505314244e+00 + -3.5010797523853978e+00 -3.3028343879900666e+00 -5.5778507204691232e+00 + -3.5411930553107602e+00 -3.8227509372832449e+00 -5.4730486677373156e+00 + -3.6016323401769816e+00 -4.4145578211413090e+00 -5.3873598508845602e+00 + id 13065 + loc 7.5979715585708618e-01 9.5323777198791504e-01 373 + blend 0.0000000000000000e+00 + interp 5.9883876280701309e-01:5.1757564076013607e-01:4.0467632195173242e-02:4.1523602942853249e-01:5.1814156804146105e-01:3.5958458324128534e-01:1.0000017834656580e+00:4.9732305861247589e-01:1.3651511457123235e+00:5.6846766386266911e-01:1.9966510503890598e+00:4.0199606750759304e-01:2.2240085880176057e+00:5.9883277441938509e-01:2.9895754731226871e+00:4.4092411974647522e-01:3.2411240829845598e+00 + CVs 20 + -2.2860573780588800e-01 2.3487115528691704e-01 -7.2487025934233867e-02 + -4.6794208272057969e-01 5.0275308255014262e-01 -1.6463884579040836e-01 + -6.9782327253888399e-01 8.0714939466043434e-01 -2.8249781506892790e-01 + -9.0369895476955775e-01 1.1494160710706469e+00 -4.3669906100805778e-01 + -1.0762193329170040e+00 1.5233287701288842e+00 -6.4542219846464166e-01 + -1.2076538417035436e+00 1.9050691309417238e+00 -9.3113572914915421e-01 + -1.2955236942277955e+00 2.2517511957371479e+00 -1.3132055637877458e+00 + -1.3385894853668854e+00 2.5158820472717389e+00 -1.7927629819298556e+00 + -1.3305320457062473e+00 2.6663116198420558e+00 -2.3476969843001245e+00 + -1.2565355812492711e+00 2.6930237979520881e+00 -2.9422023357302782e+00 + -1.1006377542787309e+00 2.5939657763948838e+00 -3.5339728388376397e+00 + -8.7147097017495312e-01 2.3489540740659725e+00 -4.0690385922492727e+00 + -6.3058942682065722e-01 1.9375502117487935e+00 -4.4831401272326996e+00 + -4.8417160176720864e-01 1.4174441867274696e+00 -4.7679891246507982e+00 + -5.4852934811342691e-01 8.9703434817376726e-01 -5.0133750369608014e+00 + -9.2636285947563424e-01 4.8953095986841499e-01 -5.2724029169208642e+00 + -1.6263724606226941e+00 3.6298293360274902e-01 -5.4822702744904070e+00 + -2.4448991902317987e+00 6.3321646295782452e-01 -5.5149698466618720e+00 + -2.6973265178711192e+00 4.5255880159675677e-01 -5.6936608202807246e+00 + id 13066 + loc 6.7092913389205933e-01 8.3953666687011719e-01 377 + blend 0.0000000000000000e+00 + interp 4.5819559061148096e-01:4.1938129267760726e-01:8.4214744023640153e-02:4.5819100865557488e-01:9.0677668165351133e-01:3.7725354869016903e-01:1.4400981842835248e+00:2.9455819292699942e-01:2.1580464060297744e+00:3.8009552048546780e-01:2.9143658723484309e+00:3.7535704028709382e-01:3.5793662556692056e+00 + CVs 20 + -6.8705646067938941e-01 2.1222228113921640e-01 -5.3836390689919411e-01 + -1.2434207720356707e+00 2.7633243570187493e-01 -8.7480297270238294e-01 + -1.7821751652506044e+00 2.6226280132704211e-01 -1.1600549225036023e+00 + -2.3435385614858086e+00 2.0001532471564798e-01 -1.4556668370941597e+00 + -2.9082585953208873e+00 9.1619870577830387e-02 -1.7576141548830617e+00 + -3.4524633809051037e+00 -5.2953096327650995e-02 -2.0570328524774313e+00 + -3.9609709485227267e+00 -2.1872012500894611e-01 -2.3481818544832129e+00 + -4.4274224499156780e+00 -3.8949680691210808e-01 -2.6357054644008300e+00 + -4.8460076157643055e+00 -5.5410415678257241e-01 -2.9311056046890971e+00 + -5.2099569678408706e+00 -7.1159555424231891e-01 -3.2443312336329617e+00 + -5.5279195219060098e+00 -8.6895523114928186e-01 -3.5761664360553382e+00 + -5.8256912800161915e+00 -1.0480762183305341e+00 -3.9195745043579100e+00 + -6.1187368828792232e+00 -1.2986030495194920e+00 -4.2610854322052223e+00 + -6.4026436894842886e+00 -1.6796034429937392e+00 -4.5748256623607233e+00 + -6.6678333005861505e+00 -2.1989601737334077e+00 -4.8406874368727024e+00 + -6.9207680252494557e+00 -2.7837655145832292e+00 -5.0780972648458604e+00 + -7.1789345163724105e+00 -3.3276664957062083e+00 -5.3149352693930609e+00 + -7.4602525212919168e+00 -3.7757269026512983e+00 -5.5360721572823337e+00 + -7.7850109257312301e+00 -4.2638944597076565e+00 -5.7554058765910625e+00 + id 13067 + loc 1.0676714032888412e-01 7.0852714776992798e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8701107197352413e-01:3.7938382407182847e-01:4.9402364130690657e-04:3.8700720186280441e-01:7.7392946945835051e-01:3.2543291939817504e-01:1.4051727911233978e+00:3.5874120975976487e-01:2.2079152264661759e+00:3.2412965819063366e-01:3.1753916593336200e+00 + CVs 20 + -5.4797543083666855e-02 2.0878974475291726e-01 2.4021133629263988e-01 + -1.0753674897040319e-01 4.1416417393098731e-01 4.4539285548934426e-01 + -1.5763416759277565e-01 6.2207600728560475e-01 6.1637913808854339e-01 + -1.9154800357209212e-01 8.8262476384113797e-01 7.9413300959269006e-01 + -1.9339699029824353e-01 1.2160557274009152e+00 9.7203807938977471e-01 + -1.3168838113709083e-01 1.6466752428943052e+00 1.1324028352994808e+00 + 4.3123665366402997e-02 2.1856555915652636e+00 1.2296036710538729e+00 + 3.7436137777096024e-01 2.7887453389508599e+00 1.1853939576205703e+00 + 8.5088112158389062e-01 3.3471623164905773e+00 9.2898633456435076e-01 + 1.3903229284512471e+00 3.7437614650522484e+00 4.4677948549122215e-01 + 1.8949274796980908e+00 3.9106869947426586e+00 -2.1507896727163978e-01 + 2.2874534638428470e+00 3.8309478087643400e+00 -9.6118481975665948e-01 + 2.5239117917298604e+00 3.5600464789890793e+00 -1.6372386635642568e+00 + 2.6353766881965708e+00 3.2329917763715224e+00 -2.0957272201336177e+00 + 2.6974331926340454e+00 3.0056794296076466e+00 -2.2317150683545370e+00 + 2.7547169332332087e+00 2.9710139718113058e+00 -1.8742530702137232e+00 + 2.7080540499680530e+00 2.8420794701021568e+00 -7.9821283071882843e-01 + 2.1812621902378222e+00 1.8326354468764199e+00 5.7769565136653400e-01 + 2.2793515070101718e+00 1.9166659591303210e+00 5.2226468014246918e-01 + id 13068 + loc 5.4684281349182129e-01 7.1128737926483154e-01 380 + blend 0.0000000000000000e+00 + interp 4.7870295203692587e-01:4.2157623177522868e-01:2.8608557982923166e-05:3.5483735841812986e-01:5.2306467360944464e-01:2.9223819580540111e-01:1.0831377412604826e+00:3.7302906681777870e-01:2.0034308699925756e+00:4.7869816500740553e-01:2.8654695130141401e+00:3.9023048791721354e-01:3.2118412137953456e+00 + CVs 20 + -4.1451444853945746e-01 2.3665840038250616e-01 -5.0773309011495016e-01 + -7.8115470316185787e-01 3.9043990846095455e-01 -8.9895801009019671e-01 + -1.1333516804333650e+00 5.0408512830787611e-01 -1.2922924076133779e+00 + -1.4803930290434222e+00 5.9366033325619261e-01 -1.7445357696607453e+00 + -1.8110189560440926e+00 6.4711060341206383e-01 -2.2527796504278426e+00 + -2.1145938818399892e+00 6.4647033608192750e-01 -2.8024418872513879e+00 + -2.3827682489680360e+00 5.7170491830288905e-01 -3.3681958465603028e+00 + -2.6061122103428720e+00 4.1030225600657411e-01 -3.9150510012441400e+00 + -2.7810791831564274e+00 1.6647604998938093e-01 -4.4044665939126411e+00 + -2.9160305371484485e+00 -1.3857515093278927e-01 -4.8025628989680360e+00 + -3.0211650109690211e+00 -4.7223770356414008e-01 -5.0833935579015908e+00 + -3.1012449166316638e+00 -7.9635123965246768e-01 -5.2369945579777868e+00 + -3.1687747082389337e+00 -1.0868021779052839e+00 -5.2891582721453396e+00 + -3.2510918987002206e+00 -1.3687519408550228e+00 -5.3042319894830339e+00 + -3.3699774280076307e+00 -1.7109273591631329e+00 -5.3456171966810686e+00 + -3.5287744806575483e+00 -2.1276138330789789e+00 -5.4358422996303233e+00 + -3.7254490415403669e+00 -2.5575669820478741e+00 -5.5681582859630039e+00 + -3.9492810976920429e+00 -2.9212378230394873e+00 -5.7115863362888923e+00 + -4.1532124326043700e+00 -3.1696122850911452e+00 -5.8363319790978050e+00 + id 13069 + loc 1.1681197583675385e-01 5.6860452890396118e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9607064211267090e-01:3.1458286934745860e-01:2.1346762430885080e-01:3.9606668140624979e-01:9.8832310429799453e-01:3.3187224400907750e-01:1.6736795700391833e+00:3.8688161000069171e-01:2.5906285346997562e+00:3.2004245030753437e-01:3.0237949773105006e+00:3.3183664549275338e-01:3.7604381337216384e+00 + CVs 20 + -1.9899963776607943e-01 4.3428670623677945e-01 2.4174282488376017e-01 + -3.5337744436408619e-01 7.7329330960262221e-01 2.6888216563348927e-01 + -5.6114628363261077e-01 1.0753950985060268e+00 2.7585837273508101e-01 + -8.3787674619036290e-01 1.3455826336791634e+00 2.8754126088223464e-01 + -1.1761259573308107e+00 1.5716218492038772e+00 2.9719694167048993e-01 + -1.5654270462462712e+00 1.7452724341158914e+00 3.0270212047046363e-01 + -1.9936116989471306e+00 1.8628060010715686e+00 3.0649661811238649e-01 + -2.4483949616378435e+00 1.9243667540860658e+00 3.1456781247737153e-01 + -2.9174194390607551e+00 1.9330177772101540e+00 3.3395293438218898e-01 + -3.3883827556757233e+00 1.8936804666070346e+00 3.7077727192473486e-01 + -3.8496030607536356e+00 1.8105699888785001e+00 4.2773729080481204e-01 + -4.2893477415605981e+00 1.6871272062946732e+00 5.0243301897591508e-01 + -4.6928322844310673e+00 1.5347258240992372e+00 5.9130186733084666e-01 + -5.0404822975402404e+00 1.3839442223090255e+00 6.9450689788889153e-01 + -5.3165696208388660e+00 1.2699940960963891e+00 8.1199208385432242e-01 + -5.5201806659466826e+00 1.2000921416385679e+00 9.3672566531859713e-01 + -5.6610626751020892e+00 1.1589300173176220e+00 1.0582688359838790e+00 + -5.7489218044803554e+00 1.1329638231981638e+00 1.1668883055717088e+00 + -5.8444089117921774e+00 1.0774190286047995e+00 1.2491106895292257e+00 + id 13070 + loc 7.7263629436492920e-01 9.1078263521194458e-01 400 + blend 0.0000000000000000e+00 + interp 3.5469275893087771e-01:3.3044644861523298e-01:3.3696939293062722e-02:2.6818061766134910e-01:9.9839042409998424e-01:3.5468921200328840e-01:1.5129672483290921e+00:3.0350447991041946e-01:2.2706646059728977e+00:2.4397926631438671e-01:3.2712703384176969e+00 + CVs 20 + -3.0039235509522072e-01 2.3643376131428262e-01 -1.9214283133699445e-01 + -5.9063680458045864e-01 4.8607901505172657e-01 -4.0494754496627317e-01 + -8.8429858344206169e-01 7.3443639673090433e-01 -6.4029299067401235e-01 + -1.1913929406790242e+00 9.4974217745128020e-01 -8.8236449101664349e-01 + -1.5202389165144254e+00 1.0981492191590787e+00 -1.1086378212498922e+00 + -1.8692505009218709e+00 1.1611215034155768e+00 -1.3077834346338102e+00 + -2.2265650514082846e+00 1.1338688755246453e+00 -1.4818281383080589e+00 + -2.5716826166477031e+00 1.0191318913259082e+00 -1.6426323448171152e+00 + -2.8672212094650584e+00 8.2869564270339025e-01 -1.8045685455241747e+00 + -3.0684714008439964e+00 5.9393965434576379e-01 -1.9675489475563457e+00 + -3.1778794889580864e+00 3.3469123114423882e-01 -2.1386642391262116e+00 + -3.2579586934252784e+00 -1.0401127911152663e-03 -2.3635453625624567e+00 + -3.3818495599881930e+00 -4.5340179631743083e-01 -2.6775285048067086e+00 + -3.6255868600408281e+00 -9.6910181364962145e-01 -3.0757238046127888e+00 + -4.0152013246212581e+00 -1.4363013486964484e+00 -3.5280706346116313e+00 + -4.4822006290333105e+00 -1.7562538769064866e+00 -3.9976766764059191e+00 + -4.9363817990481280e+00 -1.9170775860495790e+00 -4.4613361847304116e+00 + -5.3543065089450970e+00 -1.9788036042535522e+00 -4.9151396009633972e+00 + -5.8127005179647018e+00 -2.0402407739887414e+00 -5.3899797441570723e+00 + id 13071 + loc 1.8337152898311615e-01 3.9662271738052368e-02 402 + blend 0.0000000000000000e+00 + interp 4.8916664934081422e-01:3.1362450513223405e-01:9.8576285028700528e-01:3.6194415774747307e-01:1.5134952150484464e+00:4.6097999512162452e-01:1.9636751081108237e+00:3.6587810514128039e-01:2.8377005282371641e+00:4.0607808270840673e-01:3.2017357185841044e+00:4.8916175767432085e-01:3.7203016430264522e+00:4.6289032983892142e-01:3.9998934919094880e+00 + CVs 20 + -1.3072123758081247e-01 3.3072116324039974e-01 2.7545086934922436e-01 + -3.0493740266509917e-01 6.6526626494720054e-01 5.2095464786965662e-01 + -5.4232705429923178e-01 9.9247780052398704e-01 7.4474823091896836e-01 + -8.4713792780557307e-01 1.2974624980974394e+00 9.5333341031175778e-01 + -1.2104666045517631e+00 1.5653248224946490e+00 1.1507676072267377e+00 + -1.6186231083777629e+00 1.7864225243579368e+00 1.3391608380321989e+00 + -2.0557377894163555e+00 1.9559236414107177e+00 1.5203317748997338e+00 + -2.5031524959390881e+00 2.0705135265221735e+00 1.7022494916305313e+00 + -2.9429212134260450e+00 2.1275688490684703e+00 1.8917956072124040e+00 + -3.3631112875997213e+00 2.1244331516981605e+00 2.0823517072106732e+00 + -3.7506646771075767e+00 2.0556410868800157e+00 2.2632853875994519e+00 + -4.0821987763436667e+00 1.9162695503006120e+00 2.4371064716955906e+00 + -4.3436256050256539e+00 1.7185612767958696e+00 2.6204515359828267e+00 + -4.5525213778202431e+00 1.4969848868666471e+00 2.8437665231226608e+00 + -4.7340404137936680e+00 1.2959615237085698e+00 3.1435614966680063e+00 + -4.9024316418229450e+00 1.1780541776230211e+00 3.5361874909161006e+00 + -5.0648693837123391e+00 1.2232323987350979e+00 3.9851604083681922e+00 + -5.2308223707227661e+00 1.4120517003387585e+00 4.3956185669005157e+00 + -5.4841993745268223e+00 1.4299870895971751e+00 4.7945000768578003e+00 + id 13072 + loc 9.9799734354019165e-01 3.2384008169174194e-01 395 + blend 0.0000000000000000e+00 + interp 3.5178429785599430e-01:3.5178078001301577e-01:5.2996005914249467e-01:2.6085443313860701e-01:1.1603266081179711e+00:3.4382504841589756e-01:2.2482314945612210e+00:3.3063014730480578e-01:2.9999849346877996e+00:2.8894816249867683e-01:3.5832765581563706e+00 + CVs 20 + -4.9332757864936461e-01 2.3962514735981144e-01 2.7385897683608446e-01 + -9.0617352216468106e-01 4.2410316593366865e-01 5.3598175747201682e-01 + -1.3174875658978267e+00 5.8097298510544104e-01 7.8526009249381212e-01 + -1.7661920928314865e+00 7.2280051682468560e-01 1.0223545367003237e+00 + -2.2472555737277373e+00 8.3966757241875045e-01 1.2404561110637859e+00 + -2.7523145496565067e+00 9.1398733860048420e-01 1.4318334228198701e+00 + -3.2670665840297231e+00 9.2714853562008015e-01 1.5852755182494238e+00 + -3.7696568732899305e+00 8.6811050648794819e-01 1.6854745017050108e+00 + -4.2366439631539299e+00 7.4051959207044438e-01 1.7238491791448072e+00 + -4.6515568085627761e+00 5.6109958212206879e-01 1.7060514232460446e+00 + -5.0012240996684909e+00 3.5277764243607690e-01 1.6442088856761892e+00 + -5.2725647387524042e+00 1.4429832286179023e-01 1.5486827790462763e+00 + -5.4768280700010727e+00 -4.0679967191922906e-02 1.4366020014070382e+00 + -5.6686251591450629e+00 -2.2665710836518382e-01 1.3388976894671660e+00 + -5.8946361200337609e+00 -4.8140730655738606e-01 1.2820622963988859e+00 + -6.1631938715044985e+00 -8.3097762896113858e-01 1.2833000105418653e+00 + -6.4857649138032922e+00 -1.2690660131349891e+00 1.3659222450873776e+00 + -6.8645563926761914e+00 -1.7679192766812757e+00 1.5652750181541448e+00 + -7.1070511001582375e+00 -2.0043334237293542e+00 1.7592973761476420e+00 + id 13073 + loc 4.7556835412979126e-01 5.0320714712142944e-01 376 + blend 0.0000000000000000e+00 + interp 3.7979264998222539e-01:2.9442893374315593e-01:4.6609149031989849e-01:3.7978885205572560e-01:1.3809284513627678e+00:3.7467946319642303e-01:2.1100334958612605e+00:3.2475558902797580e-01:3.0663868793286477e+00:2.7149839429888784e-01:3.8369944763282144e+00 + CVs 20 + -1.7299362318778472e-01 3.2603469734695290e-01 5.4912529651532438e-01 + -2.3904212664866203e-01 5.5148405908269871e-01 9.8791093616198777e-01 + -2.0958666639405096e-01 6.7611545785420324e-01 1.4091000176106907e+00 + -9.6873064830597433e-02 7.2666332608509998e-01 1.8455086348630199e+00 + 7.2055179302819683e-02 7.6465253113212828e-01 2.2787084819365750e+00 + 2.6001839687898487e-01 8.3487219661472545e-01 2.7159306922899855e+00 + 4.1484855968331236e-01 9.3760367724089377e-01 3.1881389122934136e+00 + 4.7740410048864801e-01 1.0525461507186478e+00 3.7083911992543981e+00 + 4.0017216018226121e-01 1.1681154233530102e+00 4.2532684904702851e+00 + 1.5636427610697345e-01 1.2768416363117654e+00 4.7744145665674891e+00 + -2.3895264194874699e-01 1.3558587558131465e+00 5.2307312065340312e+00 + -7.3055522400026585e-01 1.3721928800494347e+00 5.5989016394401192e+00 + -1.2472364210484732e+00 1.2918537982603653e+00 5.8567543098223602e+00 + -1.7206822410745550e+00 1.1011103456186744e+00 5.9859539779402198e+00 + -2.0979854607812536e+00 8.4056011075001313e-01 5.9784251355009657e+00 + -2.3789939863554861e+00 5.5556582407270660e-01 5.8446263861819014e+00 + -2.5818451280389452e+00 2.1154106589766863e-01 5.6513981926183723e+00 + -2.6502864529281043e+00 -2.6435441090912404e-01 5.5340573834825078e+00 + -2.6473936167575540e+00 -8.8590002295998271e-01 5.5124924475611277e+00 + id 13074 + loc 9.5149256289005280e-02 4.8450005054473877e-01 417 + blend 0.0000000000000000e+00 + interp 5.1651908258346946e-01:5.1651391739264363e-01:8.2514455760074257e-01:2.5081708985485518e-01:9.9884894685424030e-01:3.1356129210096229e-01:1.7175677733153205e+00:3.8963037820627339e-01:2.0318382346243005e+00:2.6442880196294882e-01:2.8735330442775782e+00:3.2340584994807436e-01:3.3774572251083037e+00 + CVs 20 + -1.4623833569676953e-01 1.2623148150620683e-01 2.2919768342445238e-01 + -2.1823608734567662e-01 2.1539050740073840e-01 3.9806485249436330e-01 + -2.5838510305612306e-01 2.9023988381648630e-01 5.4358593105219200e-01 + -3.0051491760975724e-01 3.7186232043612077e-01 6.9757700789227384e-01 + -3.4999763799659461e-01 4.5971840850618645e-01 8.6013596172922435e-01 + -4.1270083103442745e-01 5.5158599164675159e-01 1.0309329694409237e+00 + -4.9550038153324627e-01 6.4477427048819358e-01 1.2082297704665881e+00 + -6.0527090542749162e-01 7.3543486823039639e-01 1.3885140780255139e+00 + -7.4743238009888624e-01 8.1860220744817624e-01 1.5659544694638745e+00 + -9.2403675265108198e-01 8.8823716326895952e-01 1.7329393489031770e+00 + -1.1326247847672493e+00 9.3790883371575973e-01 1.8828390355727311e+00 + -1.3678239306887012e+00 9.6348576907441008e-01 2.0121336857131622e+00 + -1.6248758222704314e+00 9.6524591818213201e-01 2.1188922185480803e+00 + -1.8993556178561963e+00 9.4624392059810125e-01 2.2008024938753623e+00 + -2.1832967976212023e+00 9.0941306764681806e-01 2.2585456320350223e+00 + -2.4672278208774165e+00 8.5653185758548411e-01 2.2995724959424688e+00 + -2.7473962575654785e+00 7.8786157236046628e-01 2.3318410031491927e+00 + -3.0260640338317546e+00 7.0265513654410716e-01 2.3544574148698674e+00 + -3.2990372587001713e+00 6.5875469340961090e-01 2.3634716286715229e+00 + id 13075 + loc 5.8115196228027344e-01 2.1431599557399750e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2992861431608465e-01:3.4071184141134975e-01:7.9612414099770246e-01:3.4091242178951087e-01:1.1584425351386016e+00:3.5610077873185259e-01:1.9167260945151869e+00:3.4679064612321175e-01:2.4690899518961364e+00:4.2992431502994150e-01:3.0774233370425037e+00:3.0778659761622651e-01:3.9432813434901535e+00 + CVs 20 + -4.9056033058792470e-03 4.0525014853209873e-01 2.0267788007986506e-01 + -5.2806515952738498e-02 8.1970870930201156e-01 4.3113624992374511e-01 + -1.0145980992355441e-01 1.2377723630651980e+00 6.8510947814069889e-01 + -1.3381816201684077e-01 1.6466092053965098e+00 9.7287685523757506e-01 + -1.4400675026348325e-01 2.0233184899769379e+00 1.3061335651026311e+00 + -1.3238800303462972e-01 2.3356499270892517e+00 1.6942822335483076e+00 + -1.0919458608356025e-01 2.5509829290272141e+00 2.1324588899302928e+00 + -9.3831665821455523e-02 2.6437761621906857e+00 2.6014383106717780e+00 + -1.1021861508406794e-01 2.5912101647397301e+00 3.0711695594095159e+00 + -1.7366114371110142e-01 2.3995666464718113e+00 3.4999532523632881e+00 + -2.8532418246016433e-01 2.1315802264207719e+00 3.8708123296947803e+00 + -4.4183084403689132e-01 1.8551821520344045e+00 4.2088682607945174e+00 + -6.1726958474260996e-01 1.6012919242802259e+00 4.5300144595606699e+00 + -7.5072561569443397e-01 1.3723677747337124e+00 4.8312724557549869e+00 + -7.9041710326669068e-01 1.1786179960819525e+00 5.1166379902304753e+00 + -7.2268935472281248e-01 1.0623276500643128e+00 5.3878454556133581e+00 + -5.8017530272019369e-01 1.0455069254854599e+00 5.6181824034039183e+00 + -4.4084590805079538e-01 1.0643980109461797e+00 5.8167366577300328e+00 + -3.6627071328561356e-01 1.0045313173950745e+00 6.1104296072863553e+00 + id 13076 + loc 1.3275921810418367e-03 6.1535412073135376e-01 373 + blend 0.0000000000000000e+00 + interp 4.6999918921133305e-01:4.6999448921944098e-01:4.3882045862037378e-01:2.3182062824667354e-01:1.3042604153677793e+00:3.5630425645164476e-01:2.1291690650321047e+00:3.9393139968748847e-01:3.0423737215494402e+00:4.5113129990168915e-01:3.6170272059220294e+00:4.0445757495941220e-01:3.9987208982194122e+00 + CVs 20 + -3.7282897320889280e-01 5.5768312540137543e-01 -2.0847111087120437e-02 + -6.9540303165726658e-01 1.0800158509296303e+00 -5.6351645048514781e-02 + -9.7149160169539073e-01 1.6029118697424518e+00 -1.1749455614268389e-01 + -1.1951267356303221e+00 2.1527157134099033e+00 -2.2291593710456736e-01 + -1.3420019948726369e+00 2.7127251359942881e+00 -3.9526206873565961e-01 + -1.4093996416682328e+00 3.2307264480596776e+00 -6.3976487122182701e-01 + -1.4268488544635987e+00 3.6554447363357228e+00 -9.3804790261633475e-01 + -1.4292371210281747e+00 3.9608759493412742e+00 -1.2582942351636734e+00 + -1.4376929836752850e+00 4.1465981914154835e+00 -1.5791558771831307e+00 + -1.4697131837115915e+00 4.2250734186864625e+00 -1.9090511931995231e+00 + -1.5546029883268120e+00 4.2077545688433533e+00 -2.2652998861540232e+00 + -1.7239495269992227e+00 4.1036967873458350e+00 -2.6420892377978027e+00 + -1.9875079189673628e+00 3.9216760964191177e+00 -3.0112602463012084e+00 + -2.3449188568858919e+00 3.6649947671313994e+00 -3.3417088892236642e+00 + -2.8090375405237782e+00 3.3335085568976170e+00 -3.6122535625842449e+00 + -3.3903530633177779e+00 2.9344286018940275e+00 -3.8372403845323322e+00 + -4.0646392744399904e+00 2.4951842158567921e+00 -4.0545044066270748e+00 + -4.8222645925835836e+00 2.0737895677295692e+00 -4.2746724310145190e+00 + -5.4975402584575006e+00 1.4160537401775894e+00 -4.2445957679039452e+00 + id 13077 + loc 3.0060449242591858e-01 5.5823969841003418e-01 374 + blend 0.0000000000000000e+00 + interp 4.7709070482818150e-01:3.7023743494226141e-01:6.6613583519364861e-01:4.7708593392113324e-01:1.0969695777074184e+00:3.4495505963063317e-01:1.8420492940469924e+00:4.6250712630542468e-01:2.5302015975859722e+00:4.3494119543958398e-01:3.0437214159948391e+00:3.3949105528770701e-01:3.7710641627425425e+00 + CVs 20 + -7.3901587166974136e-01 4.1816803811269843e-01 -2.3876297823127074e-01 + -1.3419281180248990e+00 6.8754665677552607e-01 -3.5565490175870040e-01 + -1.9108686087601934e+00 8.6063813716705040e-01 -3.8800266592811139e-01 + -2.4736405486268729e+00 9.8729884772090615e-01 -3.7335806842046004e-01 + -3.0139166961989265e+00 1.1016708653049221e+00 -3.4725352068588455e-01 + -3.5302657130287507e+00 1.2246487162090620e+00 -3.4007677386432533e-01 + -4.0341364675643918e+00 1.3602857831312081e+00 -3.7224305458235185e-01 + -4.5421527412679152e+00 1.5007057051880772e+00 -4.5465953218651078e-01 + -5.0664744260411307e+00 1.6299939601853251e+00 -6.0483856951867865e-01 + -5.6040204161276828e+00 1.7238488578820736e+00 -8.5422420618535044e-01 + -6.1444940707726090e+00 1.7491633832342330e+00 -1.2208905893585187e+00 + -6.6757744194150970e+00 1.6620128262846541e+00 -1.6916056271670201e+00 + -7.1601885410665194e+00 1.4205456372836172e+00 -2.2113102619233072e+00 + -7.5192562952364490e+00 1.0333339464912088e+00 -2.6862890382561249e+00 + -7.7031820307314387e+00 5.7325362563799098e-01 -3.0447305451106113e+00 + -7.7384367054861798e+00 9.3334941634720003e-02 -3.3011623848586540e+00 + -7.6983859782974173e+00 -4.1092920495144414e-01 -3.5251530856836419e+00 + -7.6869368422594402e+00 -9.3177721091768761e-01 -3.7282920707552925e+00 + -7.8214657988856091e+00 -1.3445978304193611e+00 -3.7836754884869026e+00 + id 13078 + loc 7.7862936258316040e-01 7.8168326616287231e-01 396 + blend 0.0000000000000000e+00 + interp 4.1145651543928963e-01:4.1145240087413526e-01:5.4382417326955279e-01:3.5747542180496578e-01:1.0461902425811402e+00:2.5961670485359339e-01:1.9913175326241566e+00:3.2027297131692722e-01:2.4587336017583965e+00:2.9182865536339853e-01:3.1475125549530869e+00:3.4213560482475264e-01:3.9986521535401351e+00 + CVs 20 + 9.2263254904768244e-01 2.1771230348030707e-01 -3.6786363819404905e-01 + 1.5237380711672308e+00 2.5428289620092270e-01 -6.7748722125811023e-01 + 2.0410536413690963e+00 2.2372916247619123e-01 -9.7586974268555338e-01 + 2.5646335927597192e+00 1.7339077081659349e-01 -1.2703646964626456e+00 + 3.0897014505826772e+00 1.0582259842929864e-01 -1.5422526341349547e+00 + 3.6141783157257281e+00 2.4334032171901776e-02 -1.7773450260909218e+00 + 4.1394509284874461e+00 -6.5589716338818826e-02 -1.9710079512430387e+00 + 4.6709272899143564e+00 -1.5829958900872798e-01 -2.1288892530114021e+00 + 5.2182965748894716e+00 -2.5908440566614854e-01 -2.2617139902434991e+00 + 5.7919652990040298e+00 -3.8802307446476947e-01 -2.3859501886297765e+00 + 6.3883183543720348e+00 -5.7565825289710948e-01 -2.5254776806482613e+00 + 6.9783621831602405e+00 -8.4504484244458133e-01 -2.7008454088438119e+00 + 7.5242396370352420e+00 -1.1995216567592821e+00 -2.9162027949766207e+00 + 7.9982418340567101e+00 -1.6310386232377558e+00 -3.1623442228676728e+00 + 8.3822583709863938e+00 -2.1229012445749675e+00 -3.4267149997091702e+00 + 8.6680692826179637e+00 -2.6484400733945810e+00 -3.6973941651153246e+00 + 8.8624198870267907e+00 -3.1793957640806481e+00 -3.9564752937893797e+00 + 8.9828286380048006e+00 -3.6877183534398634e+00 -4.1751738019649833e+00 + 9.0054900627187955e+00 -4.0511729096777476e+00 -4.2766936911410225e+00 + id 13079 + loc 8.9564776420593262e-01 3.9752626419067383e-01 401 + blend 0.0000000000000000e+00 + interp 4.4142434747715470e-01:3.8741352320638195e-01:2.2854262398337399e-01:2.4669183399075587e-01:8.6486391608785129e-01:2.9675115149045467e-01:1.3180230484060877e+00:4.4141993323367995e-01:2.0438815795507761e+00:3.6170923101713237e-01:2.9579232146511791e+00:3.4080119133075465e-01:3.8213008444773937e+00 + CVs 20 + 1.5341501970774540e-01 3.7489945828174975e-01 9.3596222458676312e-02 + 2.8839432815826238e-01 7.7015620665999318e-01 2.0281948313588105e-01 + 3.9330966038233600e-01 1.1770747420060474e+00 3.2711819984995633e-01 + 4.7070890554812878e-01 1.5835824666819298e+00 4.7265426663142657e-01 + 5.3218048121239847e-01 1.9776026165334355e+00 6.4515420114669120e-01 + 5.9026896403976337e-01 2.3503056965113185e+00 8.4340120485231562e-01 + 6.5576227862734293e-01 2.6979380240106825e+00 1.0622579389698414e+00 + 7.3729799906403337e-01 3.0181541316475955e+00 1.2978451387443113e+00 + 8.4284996245977140e-01 3.3107251364903605e+00 1.5541049019322630e+00 + 9.8044648293386449e-01 3.5763200266696180e+00 1.8483020120119318e+00 + 1.1512424152688894e+00 3.8043242741209653e+00 2.2043160206362815e+00 + 1.3444798223352579e+00 3.9652011157493634e+00 2.6359098298154819e+00 + 1.5405266564990709e+00 4.0176757659873594e+00 3.1143258330752159e+00 + 1.7070065954518379e+00 3.9584506199327167e+00 3.5433315394343792e+00 + 1.8013207401524796e+00 3.8551974435650704e+00 3.8413767337767464e+00 + 1.7751489674698941e+00 3.7661360446712067e+00 4.0041132660130474e+00 + 1.5791132245792721e+00 3.6648920695567484e+00 4.0686330176823287e+00 + 1.3398438908726082e+00 3.4585757035867171e+00 4.1141016105269799e+00 + 1.6177488122786037e+00 3.3641810480828869e+00 4.1693490535591993e+00 + id 13080 + loc 8.2552731037139893e-01 5.8425039052963257e-01 411 + blend 0.0000000000000000e+00 + interp 3.6728646570580320e-01:3.6561375255551931e-01:2.1593393450180143e-01:2.7612925490236173e-01:9.8956786124212737e-01:2.7003187126327755e-01:1.7746067444079985e+00:3.6728279284114618e-01:2.4267081287352315e+00:3.0158547474652708e-01:3.1296465364344526e+00:2.4655650597214118e-01:3.9173542473267884e+00 + CVs 20 + 8.0536860462714810e-01 2.1970834969984424e-01 -2.2089074061476399e-01 + 1.3646955168986343e+00 3.2692562309622275e-01 -3.9090901753630825e-01 + 1.8651261855310255e+00 4.0256189200455678e-01 -5.2424829506321069e-01 + 2.3691401957456621e+00 4.7166714925354813e-01 -6.2078715031502796e-01 + 2.8651772619760592e+00 5.1874107182687945e-01 -6.7594771964451517e-01 + 3.3432001202473183e+00 5.3175906864204836e-01 -6.9295962506192832e-01 + 3.7982482298033116e+00 5.0479774897713281e-01 -6.8116419468021894e-01 + 4.2301499434092582e+00 4.3687642102191304e-01 -6.4956479061307348e-01 + 4.6432996105200921e+00 3.2837406049060824e-01 -5.9868853142855549e-01 + 5.0445048016219145e+00 1.7892210300263400e-01 -5.2316888330112266e-01 + 5.4297921681411729e+00 -1.6717130274956693e-02 -4.3497805195207079e-01 + 5.7784623252362346e+00 -2.6559130111236251e-01 -3.5713622010213086e-01 + 6.0705646828508639e+00 -5.7080253590855667e-01 -2.9685857066973803e-01 + 6.2992412467151269e+00 -9.2974605691026757e-01 -2.4696522362645279e-01 + 6.4611920913834542e+00 -1.3279010118689452e+00 -2.0721165063198677e-01 + 6.5519335829620182e+00 -1.7349878514171504e+00 -1.8735830247365459e-01 + 6.5693404782497025e+00 -2.1268655138014534e+00 -1.8902005263781718e-01 + 6.5080422824554018e+00 -2.5132384094288414e+00 -2.0030490548991731e-01 + 6.3103624524612743e+00 -2.9766921652462841e+00 -2.2645267446070477e-01 + id 13081 + loc 3.4240734577178955e-01 1.7543345689773560e-01 375 + blend 0.0000000000000000e+00 + interp 5.4277654438181144e-01:3.6302689252774922e-01:9.8095605387069429e-01:5.4277111661636768e-01:1.7832770597298653e+00:3.1458363419450841e-01:2.4402889467027977e+00:4.3639581814905237e-01:3.0066680423939385e+00:3.1516248105928835e-01:3.9602618147490571e+00 + CVs 20 + -1.6217714042410902e-01 3.9366583079647999e-01 6.1958123105849949e-01 + -2.8173569631448842e-01 6.5420400032217518e-01 1.1891129031231380e+00 + -3.8854597762631193e-01 7.9974295672760543e-01 1.7656801551178503e+00 + -5.0895839579241930e-01 8.7711092305231353e-01 2.3205248296355157e+00 + -6.4467828586758302e-01 9.2848380257826257e-01 2.7640532707385375e+00 + -7.9212446353515231e-01 9.8447774078526062e-01 3.0850728208452760e+00 + -1.0435944865629772e+00 1.0549316094299774e+00 3.2643261493402558e+00 + -1.3909054461796719e+00 1.0863406014806829e+00 3.2190976605332180e+00 + -1.7497932942555579e+00 1.0638604595388563e+00 2.9660197859290056e+00 + -2.0950206399656728e+00 9.8560466136696701e-01 2.5487455608862803e+00 + -2.4318138678232839e+00 7.9006698315327428e-01 1.9966066689491777e+00 + -2.7477307382583662e+00 3.7928188029980137e-01 1.3591283001961907e+00 + -3.0065709459060943e+00 -2.5045478357031098e-01 6.7144897146730620e-01 + -3.2228891780517355e+00 -9.4780124088784223e-01 -8.6097112394857928e-02 + -3.5520973381388847e+00 -1.4436520978952219e+00 -9.3953148304124801e-01 + -4.1751039620375767e+00 -1.5903441041894599e+00 -1.8188460051706241e+00 + -5.0626079782187521e+00 -1.4898565465017106e+00 -2.5709784025716020e+00 + -6.0278981277359875e+00 -1.2663775857426258e+00 -3.1137519216169549e+00 + -6.9897936259899272e+00 -8.7832120739985831e-01 -3.5978999094671904e+00 + id 13082 + loc 8.9476042985916138e-01 9.2208623886108398e-01 1081 + blend 0.0000000000000000e+00 + interp 4.8757881321698082e-01:3.2074389361200917e-01:1.2424589278213161e-01:3.8995770604588631e-01:9.1043680447564190e-01:2.9010458752625978e-01:1.4935348152276404e+00:4.5636962625781025e-01:2.0509227683610840e+00:3.1515750336749071e-01:2.9854875262903686e+00:4.8757393742884869e-01:3.9461248543470600e+00 + CVs 20 + 1.1383364877064692e-02 3.8972245727446875e-01 3.7734692243560214e-01 + 4.0812604029868277e-02 7.1754763736436067e-01 6.5496150133598474e-01 + 8.6814086547099906e-02 1.0285942053915473e+00 8.9939520330613909e-01 + 1.5469895796040323e-01 1.3553119542441709e+00 1.1495044111138490e+00 + 2.5755803618734524e-01 1.6997317417216204e+00 1.3961039265447539e+00 + 4.1509768524490082e-01 2.0700550588316640e+00 1.6234423613980908e+00 + 6.5333988891692207e-01 2.4705024396794339e+00 1.7970412930740474e+00 + 9.9611809569428578e-01 2.8838856179358427e+00 1.8636847352723973e+00 + 1.4495054476438076e+00 3.2563103336329515e+00 1.7639752295293691e+00 + 1.9648151532513021e+00 3.4922104330138075e+00 1.4752653228300792e+00 + 2.4435483302805112e+00 3.5256183648989445e+00 1.0675111235347017e+00 + 2.8245168039081774e+00 3.3825852951035262e+00 6.4635584035791216e-01 + 3.1073887643962927e+00 3.1246483577191171e+00 2.7133139069021350e-01 + 3.3128565611497529e+00 2.7964304532456423e+00 -3.8612489977572606e-02 + 3.4608597101067953e+00 2.4129734971714432e+00 -2.7970054702532943e-01 + 3.5635312461991071e+00 1.9575150415957392e+00 -4.3532354422781427e-01 + 3.6184164134085037e+00 1.4474614208568797e+00 -4.4035076700001841e-01 + 3.6156996260712400e+00 1.0020290474185558e+00 -2.8061263967858019e-01 + 3.5571491322212334e+00 7.0325111516031469e-01 -9.6809286845437575e-02 + id 13083 + loc 9.0411710739135742e-01 8.8981139659881592e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8030542354592726e-01:3.2540857152451175e-01:1.2794896341106543e-01:4.5354799667299284e-01:9.5540564117439442e-01:3.0954670210694685e-01:1.3613818007871643e+00:3.5636377205383407e-01:1.9758084723265765e+00:4.8030062049169181e-01:2.3293547325514954e+00:3.1383228230579913e-01:3.0601224342110798e+00:3.8806612059033108e-01:3.7509190819612623e+00 + CVs 20 + 1.2666704712324344e-02 2.4177249246436372e-01 1.1438146179454084e-01 + 4.5026519097875591e-02 4.5055254223570718e-01 1.7302082064667690e-01 + 7.8977654838227759e-02 6.5346943032409377e-01 2.2311745241134900e-01 + 1.0618356994404556e-01 8.6816236383498890e-01 2.8719344631446470e-01 + 1.2494811412765738e-01 1.0927297447324005e+00 3.5797892373602158e-01 + 1.3019665945416103e-01 1.3258367522837760e+00 4.2562401362890340e-01 + 1.1342616443863306e-01 1.5655971658946490e+00 4.7872105941362075e-01 + 6.4419917079656233e-02 1.8067877311414535e+00 5.0788723786567480e-01 + -2.7163922779733674e-02 2.0400528530998119e+00 5.0657341198263195e-01 + -1.7148802439910546e-01 2.2520074830346233e+00 4.6652528435473861e-01 + -3.7781118860260027e-01 2.4204698011629393e+00 3.7490746798428431e-01 + -6.4297460656522332e-01 2.5102855305498393e+00 2.2240335648225251e-01 + -9.3523687825012236e-01 2.4911125631069879e+00 2.2604675464410251e-02 + -1.2089088309885851e+00 2.3743165123907044e+00 -1.8555468650169615e-01 + -1.4434715946235783e+00 2.2124545411678129e+00 -3.6791818689817934e-01 + -1.6489370383454252e+00 2.0536870666538078e+00 -5.1837127749399925e-01 + -1.8375310175771606e+00 1.9096201902987107e+00 -6.5650770444355278e-01 + -2.0059940471988136e+00 1.7764875236863911e+00 -8.0903034429849807e-01 + -2.1544621350981665e+00 1.7252122947625232e+00 -9.6471318205643020e-01 + id 13084 + loc 7.1341735124588013e-01 9.7461831569671631e-01 382 + blend 0.0000000000000000e+00 + interp 4.9612910639521091e-01:3.3399773241363051e-01:4.8643747352291822e-01:4.6203595421216115e-01:9.8990281869391838e-01:4.9612414510414699e-01:1.2968137102644235e+00:3.6826643413289178e-01:1.9980502638173676e+00:2.7261349135688939e-01:2.5101235768034602e+00:3.0502464686139014e-01:2.9566017689377118e+00:3.1835525508937396e-01:3.4320376765549279e+00:3.3447453726248799e-01:3.9962880907637288e+00 + CVs 20 + 1.0178229425163479e+00 1.8435823595511464e-01 -5.8804758258940604e-01 + 1.6373353079680597e+00 2.3914018126554840e-01 -9.9583647322560753e-01 + 2.1367227860364082e+00 2.3232994840065158e-01 -1.3565633703253406e+00 + 2.6536328975557355e+00 2.0200236341343791e-01 -1.7205980537543786e+00 + 3.1883615715097795e+00 1.3933267637730334e-01 -2.0762986286868683e+00 + 3.7372423323953954e+00 3.7702700827301538e-02 -2.4159175046230081e+00 + 4.2914349841665196e+00 -1.0360828398698063e-01 -2.7404272954193623e+00 + 4.8380093802932294e+00 -2.8139899351930708e-01 -3.0577644774863040e+00 + 5.3687930773596086e+00 -5.0124030479957049e-01 -3.3760310273578860e+00 + 5.8791767438608149e+00 -7.7869712515337419e-01 -3.6986869417294459e+00 + 6.3567087341205211e+00 -1.1311213463441492e+00 -4.0294431763599814e+00 + 6.7732199764023200e+00 -1.5644443840538544e+00 -4.3727768125506179e+00 + 7.1010005242515692e+00 -2.0676952879771071e+00 -4.7305339310217711e+00 + 7.3291936144145522e+00 -2.6231937222652730e+00 -5.1018762064401857e+00 + 7.4586400889789708e+00 -3.2114883408468624e+00 -5.4848860643259041e+00 + 7.4945365102799251e+00 -3.8060892355625020e+00 -5.8755347584726776e+00 + 7.4458321246924521e+00 -4.3775110469696408e+00 -6.2618099919996908e+00 + 7.3240931830997287e+00 -4.9055893413998293e+00 -6.6202101493585150e+00 + 7.1153400312776638e+00 -5.3743700483596575e+00 -6.8906038229343523e+00 + id 13085 + loc 7.7107988297939301e-02 2.1267715096473694e-01 417 + blend 0.0000000000000000e+00 + interp 3.7320838891239366e-01:2.4159812072663783e-01:5.5228063251977488e-05:1.8762669128899423e-01:8.7766194280708731e-01:1.8849540911363449e-01:1.4254839786226570e+00:2.2350464094861386e-01:1.8806282542466675e+00:3.7320465682850457e-01:2.5224108270260723e+00:2.0491013949253270e-01:3.0105910921494603e+00 + CVs 20 + -1.9426335422440183e-01 1.0129085876192703e-01 2.6507370786048778e-01 + -3.3315157067850287e-01 1.7033109940801711e-01 4.4159822314059649e-01 + -4.5011478218973933e-01 2.2464288743509883e-01 5.7456560964042436e-01 + -5.8198347218047541e-01 2.8403688703190000e-01 6.9732222690636647e-01 + -7.2689182002284491e-01 3.4736114570353127e-01 8.0648750219247534e-01 + -8.8188267116178765e-01 4.1263063665437649e-01 8.9886771828455858e-01 + -1.0435717505785913e+00 4.7737220233132577e-01 9.7203942739482507e-01 + -1.2083191664568609e+00 5.3893669315112747e-01 1.0241646144721559e+00 + -1.3715359246017826e+00 5.9481917482261215e-01 1.0531132811891566e+00 + -1.5281492762165600e+00 6.4345492724538422e-01 1.0568064019350816e+00 + -1.6754014865551694e+00 6.8459762956730086e-01 1.0351381195068119e+00 + -1.8143490282458381e+00 7.1876269161286621e-01 9.9044067632297139e-01 + -1.9467966028560357e+00 7.4733161825864358e-01 9.2542403856543021e-01 + -2.0739602575829363e+00 7.7277150362686275e-01 8.4184854556110000e-01 + -2.2017517582376400e+00 7.9701017057378287e-01 7.4307157238972565e-01 + -2.3430186652316563e+00 8.1867103169568467e-01 6.3384026372612234e-01 + -2.5056633897027916e+00 8.3561667133754081e-01 5.1654064672419153e-01 + -2.6843029392916935e+00 8.4956609052505838e-01 3.9072606070172045e-01 + -2.9119268520064305e+00 8.5328363100401494e-01 2.6838241264776774e-01 + id 13086 + loc 8.1511533260345459e-01 7.4112242460250854e-01 415 + blend 0.0000000000000000e+00 + interp 5.3227739181487499e-01:4.3359515516067648e-01:3.4833494563296630e-01:4.4626886903186080e-01:9.6984906017271066e-01:5.3227206904095692e-01:1.4592995094812846e+00:4.8270389849881978e-01:1.9832926421881396e+00:3.0014205606279154e-01:2.6478884582290583e+00:4.3182257570000515e-01:3.5318456303666257e+00:4.9630050166227518e-01:3.9955656143596272e+00 + CVs 20 + 4.0799775958377960e-01 1.3674934459282573e-01 -7.3094416097829656e-02 + 7.3072535733072974e-01 2.0608401028342138e-01 -1.6788446325926307e-01 + 1.0400103688311755e+00 2.5884057913495467e-01 -2.5123525642813710e-01 + 1.3596670999537657e+00 3.1244524552681868e-01 -3.0931119995592493e-01 + 1.6864911719992155e+00 3.6419121631103923e-01 -3.3801833529991321e-01 + 2.0169114163148625e+00 4.1277791432040090e-01 -3.3246977882501660e-01 + 2.3445223551535879e+00 4.5747060728017841e-01 -2.8900920787970774e-01 + 2.6611448298848304e+00 4.9768360781941789e-01 -2.0809666410287486e-01 + 2.9606890852915253e+00 5.3348092298718552e-01 -9.3026657087635800e-02 + 3.2386003484969006e+00 5.6532750879178018e-01 5.1764672268768797e-02 + 3.4858417773644716e+00 5.9285558177831055e-01 2.1501463082257677e-01 + 3.6895116625559621e+00 6.1483908417706501e-01 3.7315526554391987e-01 + 3.8491856920499261e+00 6.3122215355733968e-01 5.0844273151507535e-01 + 3.9934754963025201e+00 6.3822612306785276e-01 6.2918338869237045e-01 + 4.1566430356283650e+00 6.2397165551590983e-01 7.4384641717890188e-01 + 4.3414094016910925e+00 5.8266460477201609e-01 8.4729622348132527e-01 + 4.5340705276771960e+00 5.1657232011112653e-01 9.3465598900263103e-01 + 4.7261548775608304e+00 4.2754744124822897e-01 1.0012014154570932e+00 + 4.9121790300654915e+00 3.0577286902391165e-01 1.0110289358523079e+00 + id 13087 + loc 9.1859066486358643e-01 4.6536099910736084e-01 403 + blend 0.0000000000000000e+00 + interp 4.8665312231836561e-01:4.8664825578714244e-01:6.2143483082539586e-03:2.9562137458570359e-01:9.9687938979420643e-01:3.2731713581979410e-01:1.4952402620006278e+00:3.7301992554278490e-01:1.9998538568176205e+00:3.7920465913970147e-01:2.3879561733186012e+00:4.7005906230549710e-01:2.9999596286563763e+00:3.1419338265948227e-01:3.5051440962137428e+00 + CVs 20 + -1.4877583812011874e-03 1.1768457111681582e-01 3.2424183021169894e-02 + 1.2922005075604676e-02 2.3905398661311589e-01 7.2425819918045697e-02 + 3.5601639945898905e-02 3.6624787239410861e-01 1.1906822435349115e-01 + 6.6986006450953872e-02 4.9806337586794380e-01 1.7255364617644819e-01 + 1.1331938750945414e-01 6.2901695041587513e-01 2.3326425772296472e-01 + 1.7890872515404260e-01 7.5330665495156257e-01 3.0120068405598421e-01 + 2.6535305998671982e-01 8.6469642524095702e-01 3.7570047948084223e-01 + 3.7290138662520989e-01 9.5572877328640937e-01 4.5462181707055899e-01 + 5.0134090169193524e-01 1.0166442180692741e+00 5.3284622337196275e-01 + 6.4827140468301492e-01 1.0365823482928596e+00 6.0173742347110626e-01 + 8.0603964742169643e-01 1.0087260969873157e+00 6.5138625070166312e-01 + 9.6269780043331787e-01 9.3286117784122280e-01 6.7381025448686727e-01 + 1.1051783025935198e+00 8.1351494911709965e-01 6.6424111431284549e-01 + 1.2208250492244035e+00 6.5623404354083670e-01 6.1978785975544970e-01 + 1.2974236710925706e+00 4.6867395949051749e-01 5.4020404969747626e-01 + 1.3264034500915234e+00 2.6302447868947099e-01 4.3086513058396170e-01 + 1.3060464950446820e+00 5.2429116974184398e-02 3.0223162548658333e-01 + 1.2371945651003116e+00 -1.5358077926088964e-01 1.6811942438526997e-01 + 1.3139863286331628e+00 -2.9310073856458618e-01 1.8311548028924352e-01 + id 13088 + loc 4.6037051081657410e-01 5.7749533653259277e-01 409 + blend 0.0000000000000000e+00 + interp 3.7867129893394624e-01:3.0568451737957286e-01:1.2285658454330972e-01:2.8262982640408213e-01:1.0000182366699668e+00:3.2861309819750040e-01:1.6510030988218372e+00:3.0383782489114008e-01:2.1506386379169271e+00:3.3718705681417471e-01:3.0050219521656043e+00:3.7866751222095690e-01:3.6837459890607827e+00 + CVs 20 + 3.7039018002049995e-01 1.2877849764058380e-01 -7.8960668112526694e-02 + 6.8833056440894758e-01 2.4080330673436978e-01 -1.9468491532148482e-01 + 9.9526858839002008e-01 3.5101399690209956e-01 -3.1700312348238530e-01 + 1.3092078593532834e+00 4.6461495426404925e-01 -4.3278551676728672e-01 + 1.6296257942187444e+00 5.7740634813387648e-01 -5.4441877355165214e-01 + 1.9577464755204119e+00 6.8610893139507001e-01 -6.5291577865555972e-01 + 2.2976562499914137e+00 7.8872089050521010e-01 -7.5712663201289421e-01 + 2.6559983844192647e+00 8.8149184656088453e-01 -8.5434515933859867e-01 + 3.0379854861734006e+00 9.5597550014016375e-01 -9.4121062026436464e-01 + 3.4417191819248067e+00 9.9982511348250025e-01 -1.0163082378015169e+00 + 3.8572413963690257e+00 9.9953698945054081e-01 -1.0830719794830315e+00 + 4.2701619603662486e+00 9.4298887424451472e-01 -1.1493709622194190e+00 + 4.6676697939729666e+00 8.2401164551716555e-01 -1.2235785288838732e+00 + 5.0424066424998673e+00 6.4307089857601696e-01 -1.3109659555106581e+00 + 5.3888957508764346e+00 4.0326815654478132e-01 -1.4133258654410743e+00 + 5.7022959197746204e+00 1.0439139421793309e-01 -1.5292261627633938e+00 + 5.9767465717154540e+00 -2.5783412026743502e-01 -1.6521882956460869e+00 + 6.2008194714404468e+00 -6.7047302794966424e-01 -1.7717141902721127e+00 + 6.3948212693353561e+00 -1.0007669762540519e+00 -1.8696403460862656e+00 + id 13089 + loc 1.9087237119674683e-01 2.3836318869143724e-03 382 + blend 0.0000000000000000e+00 + interp 4.7899318531534746e-01:1.5734612088328961e-01:8.9831169818801460e-03:2.4393915667126898e-01:1.0009373643753372e+00:4.7898839538349430e-01:1.8296064787366948e+00:4.7498553074632832e-01:2.0314505499779751e+00:2.9615873786606356e-01:2.5605902317123874e+00:3.4595514134248467e-01:3.3087777269012557e+00 + CVs 20 + -5.5374439657961561e-01 1.4666047833081780e-01 -5.6348601349280381e-01 + -9.7380073410732215e-01 1.4775308663451636e-01 -9.8094712072784729e-01 + -1.3580817954169722e+00 6.4560165589280349e-02 -1.3675841991841737e+00 + -1.7442253128554792e+00 -7.8456247233074428e-02 -1.7734632877240859e+00 + -2.1213320776994551e+00 -2.7694678149348961e-01 -2.1857607356368098e+00 + -2.4817617444299476e+00 -5.1994828267654225e-01 -2.5885964456046135e+00 + -2.8213749816663212e+00 -7.9150850522701521e-01 -2.9646141279994778e+00 + -3.1335734632388168e+00 -1.0742672880650466e+00 -3.2950725782002879e+00 + -3.4104238012142449e+00 -1.3524985694605305e+00 -3.5649345287926533e+00 + -3.6524032096854682e+00 -1.6152868488107253e+00 -3.7695904012104626e+00 + -3.8719313846967651e+00 -1.8602222112595168e+00 -3.9152559325800143e+00 + -4.0821618581206467e+00 -2.0911895081621448e+00 -4.0111311226518858e+00 + -4.2898078953498242e+00 -2.3139515398004415e+00 -4.0662460100842521e+00 + -4.4930118205405423e+00 -2.5317342125610223e+00 -4.0875276834008680e+00 + -4.6846265896915043e+00 -2.7423192046526301e+00 -4.0795090351674030e+00 + -4.8556249072438682e+00 -2.9323968813819530e+00 -4.0450645441772686e+00 + -5.0070048175856261e+00 -3.0801823283699825e+00 -3.9880156842860068e+00 + -5.1616996831263293e+00 -3.1803077834162119e+00 -3.9124773018376215e+00 + -5.3869930287185070e+00 -3.4224637135453060e+00 -3.7939728736009499e+00 + id 13090 + loc 7.9928547143936157e-01 3.0575439333915710e-01 399 + blend 0.0000000000000000e+00 + interp 4.8249612308943962e-01:2.9481750641735593e-01:2.5518849542697675e-02:4.8249129812820873e-01:9.2503761364135362e-01:4.0500760772635275e-01:1.1296592011155455e+00:2.9161196456445182e-01:1.8774663957553628e+00:4.1103989303809740e-01:2.7675469270772002e+00:2.8114641123912959e-01:3.4901000373811244e+00 + CVs 20 + 2.6392231028907726e-01 3.2706020266695229e-01 2.1851180223888450e-01 + 5.3570035692514395e-01 6.4025912385676564e-01 4.6044912698901819e-01 + 7.9491808214945303e-01 9.2608059006343457e-01 7.7370254937442939e-01 + 1.0408767057109032e+00 1.1701796448063138e+00 1.1513281195529312e+00 + 1.2852911179554305e+00 1.3634445746098280e+00 1.5691908909359626e+00 + 1.5344064492372222e+00 1.4949256072071622e+00 2.0055599226672727e+00 + 1.7864677166937830e+00 1.5497206458433055e+00 2.4357883961567968e+00 + 2.0329104587555431e+00 1.5132805945955026e+00 2.8271878979858904e+00 + 2.2567780783904259e+00 1.3822868567050799e+00 3.1427776119869431e+00 + 2.4339920530223957e+00 1.1758652504684144e+00 3.3495941914896465e+00 + 2.5471716644707176e+00 9.4275238981326981e-01 3.4423292292658592e+00 + 2.6079663026568425e+00 7.2649330371057586e-01 3.4747562661401425e+00 + 2.6494130743580393e+00 5.1763597892443047e-01 3.5199794947155509e+00 + 2.7101146958685698e+00 2.6964044236113827e-01 3.6318140519287860e+00 + 2.8203608961729039e+00 -5.0903757729169108e-02 3.8472990861085492e+00 + 2.9794783736921064e+00 -4.2011268822534842e-01 4.2025058471379673e+00 + 3.1286445209772840e+00 -7.5690145458678948e-01 4.7124449003843161e+00 + 3.1564885338951267e+00 -9.5570044307105073e-01 5.2326960387141828e+00 + 3.0263639052424964e+00 -9.8692671469743820e-01 5.4902885828389296e+00 + id 13091 + loc 9.9937725067138672e-01 3.6565080285072327e-01 374 + blend 0.0000000000000000e+00 + interp 4.3930268683496349e-01:3.1354278405917091e-01:1.7282761015560810e-02:3.0333191701561535e-01:1.0283546564319515e+00:2.9475505181131451e-01:1.7225436325056234e+00:3.0322156380778337e-01:2.0488983333832662e+00:3.8897867826748600e-01:2.7848729744615301e+00:4.3929829380809515e-01:3.1839722896266731e+00 + CVs 20 + 6.9148590945438049e-01 3.9004489534896891e-01 5.0028878611940075e-01 + 1.2371113752052469e+00 6.1437241597641734e-01 8.3068313192789600e-01 + 1.7995392913547645e+00 7.2449126164390631e-01 1.0545844773351960e+00 + 2.4262803171497880e+00 7.5902984372427174e-01 1.2092220030769658e+00 + 3.1014329402310663e+00 7.4746005511473912e-01 1.3270821867680560e+00 + 3.8051328859624114e+00 7.0010245531779969e-01 1.4525078216449936e+00 + 4.5129120687870286e+00 5.9675570041615855e-01 1.6232234788836548e+00 + 5.1951422117912873e+00 4.1875880434698076e-01 1.8617328562540012e+00 + 5.8180476292028889e+00 1.6896264012195505e-01 2.1679026607096903e+00 + 6.3562257882277606e+00 -1.3873258876157424e-01 2.5144261869416162e+00 + 6.7988185543665773e+00 -4.9722982278051964e-01 2.8507664300083384e+00 + 7.1396801632409579e+00 -9.0125525150658836e-01 3.1240349157677390e+00 + 7.3837138206944655e+00 -1.3268300097044530e+00 3.3180844826902218e+00 + 7.5479049789962582e+00 -1.7550440787804518e+00 3.4488427437219271e+00 + 7.6458041924026325e+00 -2.1767101627736043e+00 3.5341754457100638e+00 + 7.6891756856854743e+00 -2.5793334237066343e+00 3.5881395673315777e+00 + 7.6988852339670482e+00 -2.9457150897681070e+00 3.6281157933755677e+00 + 7.7220348326042725e+00 -3.2645008872986208e+00 3.6540569497924889e+00 + 7.8470024784616870e+00 -3.5174450376016964e+00 3.6243078311553050e+00 + id 13092 + loc 3.0201241374015808e-01 1.3039981946349144e-02 393 + blend 0.0000000000000000e+00 + interp 5.2551884119346282e-01:5.2551358600505094e-01:7.1522373569894548e-02:4.6505811194641539e-01:9.6096114111736863e-01:2.8160156720576723e-01:1.3454376075523415e+00:3.8903548285186051e-01:2.0763744242475326e+00:3.8065377291896613e-01:2.7927830742951691e+00:2.6307589873787823e-01:3.1874754658839612e+00:3.5068498862496156e-01:3.9469554965927305e+00 + CVs 20 + -8.3731378294095271e-02 4.9292785769194797e-01 3.3766901649425007e-01 + -1.7766933300024679e-01 9.9310480871398754e-01 6.1532847449929262e-01 + -3.0181085996618950e-01 1.4977837170970585e+00 8.1651366607028653e-01 + -4.7961467263451407e-01 2.0017780029318333e+00 9.4997467853840067e-01 + -7.2509585124326215e-01 2.4872384734894393e+00 1.0273813988838560e+00 + -1.0422283992927890e+00 2.9380515692264759e+00 1.0650788177774906e+00 + -1.4348102333870156e+00 3.3450117250344311e+00 1.0816475858346410e+00 + -1.9092193028461744e+00 3.6976329148387066e+00 1.0966433999170979e+00 + -2.4621554572094668e+00 3.9749698979172328e+00 1.1341327796700489e+00 + -3.0754201999397264e+00 4.1567325563059265e+00 1.2231503564486261e+00 + -3.7248550667393685e+00 4.2361495022649471e+00 1.3999873430849274e+00 + -4.3803465327334692e+00 4.2087890713780665e+00 1.7052968846618561e+00 + -5.0008453426310950e+00 4.0556668365613078e+00 2.1546463020992417e+00 + -5.5338906338147478e+00 3.7588396854920427e+00 2.7176485369037584e+00 + -5.9380823697056693e+00 3.3397082337651298e+00 3.3434436670349905e+00 + -6.2074939188728555e+00 2.8344242815968883e+00 4.0024860665440780e+00 + -6.3164466069424332e+00 2.1986511945160840e+00 4.6922338311293990e+00 + -6.1073963399479014e+00 1.3095764150369136e+00 5.3118417048330500e+00 + -5.9274414868956269e+00 7.4581590201872894e-01 5.7191173855591098e+00 + id 13093 + loc 9.0341162681579590e-01 4.8028945922851563e-01 376 + blend 0.0000000000000000e+00 + interp 5.5538203546744258e-01:4.1360952510712556e-01:1.1780592950335012e-01:4.4566183149761412e-01:7.7448303744778757e-01:5.0771109472866993e-01:1.1071789909314333e+00:5.5537648164708797e-01:1.3869194232374167e+00:4.3088648829530829e-01:2.0327305126693602e+00:2.9648366681786004e-01:2.9902277922564080e+00:3.1875259012941881e-01:3.9435934552573162e+00 + CVs 20 + 5.0646296771271117e-02 3.4317331474733626e-01 -4.8446439035631039e-01 + 2.4905170213312414e-02 6.1667812817214818e-01 -9.2695757574655091e-01 + -7.1407013857421708e-02 8.1072077110211782e-01 -1.3818356494486601e+00 + -2.1387603626486121e-01 9.6772656279638203e-01 -1.8608052361163376e+00 + -3.5364659230591444e-01 1.1523127930105252e+00 -2.3485865526952754e+00 + -4.3113441018059190e-01 1.3946363391832981e+00 -2.8454352676793815e+00 + -3.9486070972309562e-01 1.6896124817315776e+00 -3.3539941758188356e+00 + -2.1410355677214715e-01 2.0197993919751442e+00 -3.8536650116827662e+00 + 1.1737507423342197e-01 2.3566303169727751e+00 -4.3206859705318061e+00 + 5.8773044843723277e-01 2.6534725644148702e+00 -4.7642182052217601e+00 + 1.1765345881672227e+00 2.8362280029467715e+00 -5.2034808008702731e+00 + 1.8538338381257295e+00 2.8008737474102872e+00 -5.6139978762767893e+00 + 2.5414779597813340e+00 2.4724048892315666e+00 -5.9131154188471022e+00 + 3.1175555124430918e+00 1.8886224614926881e+00 -6.0116531345033426e+00 + 3.4814884770354091e+00 1.1399954854069763e+00 -5.9258494218689748e+00 + 3.5493094549979629e+00 2.4015252239829588e-01 -5.8582427507146360e+00 + 3.0948630863102649e+00 -7.5159675688793293e-01 -6.0610150659409765e+00 + 2.2265939939080526e+00 -1.3474510352125306e+00 -6.4971162384664911e+00 + 2.0064368778949540e+00 -1.7822857551417237e+00 -6.7123060768154605e+00 + id 13094 + loc 1.0027327574789524e-02 6.1825078725814819e-01 402 + blend 0.0000000000000000e+00 + interp 3.8357806741317457e-01:1.0508672828937361e-01:9.5148822233774122e-01:3.4672928504910372e-01:1.9773823051186463e+00:3.0079257762962247e-01:2.7415155448061097e+00:3.7678221792044880e-01:3.0699872783639002e+00:3.8357423163250048e-01:3.9994826866963691e+00 + CVs 20 + -2.0155511626738759e-02 3.3566727727434931e-01 -1.3438232335097378e-01 + -5.0793678827204342e-02 6.7295269259489643e-01 -2.8335879848130463e-01 + -5.9422142699247893e-02 1.0134542581309758e+00 -4.5364524623608521e-01 + -3.2362170997518480e-02 1.3480674710910669e+00 -6.5208554483451475e-01 + 2.5545672435050126e-02 1.6626763602156416e+00 -8.8397672540354111e-01 + 1.0499321039607318e-01 1.9463539594704500e+00 -1.1500283317965829e+00 + 1.9568215847631892e-01 2.1935400121218973e+00 -1.4479608910064810e+00 + 2.8740923651997491e-01 2.4012049993197717e+00 -1.7737668818431560e+00 + 3.6912966644102974e-01 2.5648945397395444e+00 -2.1188821441998114e+00 + 4.3583833730583826e-01 2.6767356805947573e+00 -2.4643217514066751e+00 + 4.9750429545857067e-01 2.7321999807442343e+00 -2.7850168468575074e+00 + 5.6978392369450503e-01 2.7345035030096891e+00 -3.0703234360767597e+00 + 6.5746295671678190e-01 2.6756922063317026e+00 -3.3477435728734593e+00 + 7.4326799018928913e-01 2.5071910756099371e+00 -3.6715053613138418e+00 + 7.6758190513259961e-01 2.1724182670217114e+00 -4.0692688750920638e+00 + 6.1290514826872666e-01 1.6764804738346153e+00 -4.5314314240435065e+00 + 1.3791016404370976e-01 1.1467861384547962e+00 -5.0319124261258725e+00 + -6.0641374147821858e-01 8.4565443317489453e-01 -5.4978754712217395e+00 + -9.6533068727225435e-01 7.6719091254252780e-01 -5.8264374914171242e+00 + id 13095 + loc 5.3740161657333374e-01 7.4358463287353516e-01 1081 + blend 0.0000000000000000e+00 + interp 4.2867991850975989e-01:2.9442620436440309e-01:8.9313393415630349e-01:4.2867563171057482e-01:1.4183079039721340e+00:2.9372676468136544e-01:1.9818181693342618e+00:3.0234577427409665e-01:2.9996057380373875e+00:3.4464736274747471e-01:3.9899378241406405e+00 + CVs 20 + 4.7283094077306256e-02 5.3086435811781396e-01 5.6787915094274333e-01 + 1.2193481818695412e-01 9.2852141107794450e-01 9.4070735557162288e-01 + 2.1037808716480105e-01 1.2745277773015498e+00 1.2485927788372875e+00 + 3.1026626758990827e-01 1.6027685816448796e+00 1.5385096349782010e+00 + 4.2443682942025551e-01 1.9073593235934674e+00 1.7950298537268736e+00 + 5.5195898303707103e-01 2.1850043209351737e+00 2.0050630007225920e+00 + 6.9147049979540531e-01 2.4345405883132774e+00 2.1588418796253062e+00 + 8.4961748243055624e-01 2.6590275764058218e+00 2.2517742047192000e+00 + 1.0541790611388202e+00 2.8651561274220199e+00 2.2688693966460280e+00 + 1.3177208124837101e+00 3.0074942949251291e+00 2.1616451708282787e+00 + 1.5329667179343682e+00 3.0165450434347658e+00 1.9735083665720063e+00 + 1.6584391659653188e+00 2.9495547282565515e+00 1.7952492366822530e+00 + 1.7250102620009886e+00 2.8521663258176644e+00 1.6326578795188662e+00 + 1.7479192508607482e+00 2.7381538822882474e+00 1.4743869978795388e+00 + 1.7328530776299069e+00 2.6110147119084566e+00 1.3009394682560398e+00 + 1.6859159573775462e+00 2.4566417016695770e+00 1.0729092701160439e+00 + 1.6106863920310941e+00 2.2290194645042192e+00 7.9028532195970258e-01 + 1.4976403566862733e+00 1.9324630221624526e+00 5.7053312170184833e-01 + 1.3382053201855850e+00 1.7181840142600102e+00 5.5935246354001478e-01 + id 13096 + loc 1.3563235104084015e-01 8.6697173118591309e-01 400 + blend 0.0000000000000000e+00 + interp 5.2211831946685672e-01:2.9411897186659297e-01:5.1937808794892826e-01:5.2211309828366204e-01:1.0127280455295589e+00:4.0374602859629388e-01:1.9477869736418540e+00:3.8811052851983285e-01:2.2756132683120560e+00:2.9943621257969943e-01:3.0016179388836157e+00:3.0840735024864185e-01:3.9584747937978397e+00 + CVs 20 + -1.7814434196139498e-01 2.9545652268204237e-01 -2.8836199806421853e-02 + -3.7998084327900339e-01 5.9452347220621493e-01 -7.1009400438850304e-02 + -5.8759432536903311e-01 8.9803457470861270e-01 -1.4067607401479004e-01 + -7.8981571120519223e-01 1.2029037121738984e+00 -2.4661024366274187e-01 + -9.8331381524708605e-01 1.5047704646031628e+00 -3.9273317508998851e-01 + -1.1646434043777070e+00 1.7996501698465848e+00 -5.7955941654792131e-01 + -1.3306718578161558e+00 2.0855206799448176e+00 -8.0689998479297287e-01 + -1.4800629041510456e+00 2.3617871139282052e+00 -1.0773677210621506e+00 + -1.6132370676175645e+00 2.6278196717166078e+00 -1.4001533453628610e+00 + -1.7239063117221414e+00 2.8766252279431197e+00 -1.7858358705109108e+00 + -1.7886984003499349e+00 3.0901492748254187e+00 -2.2230985217025916e+00 + -1.7845282011922563e+00 3.2540361568218206e+00 -2.6752789049221164e+00 + -1.7129045430698526e+00 3.3716361876289729e+00 -3.1255359992865186e+00 + -1.5934435825031275e+00 3.4473725197707132e+00 -3.5971172635784461e+00 + -1.4533270509079128e+00 3.4590146501450052e+00 -4.1071026080535056e+00 + -1.3275107412919220e+00 3.3716973895369837e+00 -4.6188653768172365e+00 + -1.2407822562013628e+00 3.1873890208632227e+00 -5.0833278014366545e+00 + -1.2143315270802462e+00 2.9334549615802543e+00 -5.4953685358595674e+00 + -1.2929331366748722e+00 2.6534846194355630e+00 -5.8303509059131482e+00 + id 13097 + loc 5.7035404443740845e-01 1.7900037765502930e-01 401 + blend 0.0000000000000000e+00 + interp 4.2665639258696347e-01:3.1677754504953987e-01:1.2203710585056760e-02:3.3476460639890543e-01:7.6916207138287473e-01:3.6732393538763097e-01:1.0815295190994072e+00:3.6725579217162391e-01:1.8268571301657810e+00:4.2665212602303765e-01:2.1102803080491634e+00:3.7078196485261455e-01:2.9502399088678963e+00:3.3382622560263742e-01:3.4057583664841919e+00 + CVs 20 + 4.0574503889779553e-02 2.8592643319795885e-01 2.0880950232242665e-01 + 9.3704775624283781e-02 5.5436774765116792e-01 4.2299878285280829e-01 + 1.4838149309860157e-01 8.0183509398595543e-01 6.3678416364727397e-01 + 2.0005477980199471e-01 1.0263926708993747e+00 8.4593913339745164e-01 + 2.5214352807920959e-01 1.2279573012569922e+00 1.0515222060127980e+00 + 3.0965846368325800e-01 1.4088593219737267e+00 1.2580855143737439e+00 + 3.8264516251965203e-01 1.5658989170083200e+00 1.4740520586759716e+00 + 4.8360366420160672e-01 1.6857837544730372e+00 1.7038828414133902e+00 + 6.1986079193388854e-01 1.7696694704849232e+00 1.9353536253629593e+00 + 7.9672206299974768e-01 1.8464694515691948e+00 2.1525770912804196e+00 + 1.0177721625373353e+00 1.9199589963685284e+00 2.3608923979738812e+00 + 1.2557908223100913e+00 1.9281723900596832e+00 2.5668725095020397e+00 + 1.4614354615870921e+00 1.8344452491880925e+00 2.7533112087276006e+00 + 1.6402845246936855e+00 1.6862847797053462e+00 2.9210084829999547e+00 + 1.8424711184816651e+00 1.5456186846221784e+00 3.0830886797981716e+00 + 2.0593682651204204e+00 1.3868087949874355e+00 3.2163189874841174e+00 + 2.1701283833660994e+00 1.1000664827668687e+00 3.2653293413306383e+00 + 2.1647569630828674e+00 5.9376325785356077e-01 3.2370906416124789e+00 + 2.5213461147281091e+00 6.3297120198770163e-01 3.2287964827698117e+00 + id 13098 + loc 2.2020302712917328e-01 1.7543345689773560e-01 407 + blend 0.0000000000000000e+00 + interp 7.0532943383122637e-01:2.6923344841662245e-01:8.1995780229998316e-01:4.7368111003815727e-01:1.3550444938768686e+00:4.3163269187662739e-01:1.9908626204690005e+00:7.0532238053688812e-01:1.9972175156255227e+00:4.6652649168794919e-01:3.9728226408918847e+00 + CVs 20 + -3.2339925192800073e-02 3.7382087359288957e-01 -3.3018359519956408e-01 + -6.6314456449082057e-02 6.0779869882793913e-01 -4.4095661510041884e-01 + -8.4855215230323564e-02 8.1860598337927803e-01 -4.8960122844945170e-01 + -7.8922824388380983e-02 1.0396268562125695e+00 -5.5706416275088766e-01 + -3.7824176336270839e-02 1.2672081752172903e+00 -6.4361082762497746e-01 + 5.2358221453708088e-02 1.4934333431650324e+00 -7.4851774477179545e-01 + 2.0422574488275935e-01 1.7028957718471540e+00 -8.6602910571227798e-01 + 4.2113771263409472e-01 1.8764014815644479e+00 -9.8452977792103691e-01 + 6.9574491570789099e-01 1.9998222043761995e+00 -1.0920733244620404e+00 + 1.0179120995573661e+00 2.0678038647638988e+00 -1.1821717034055479e+00 + 1.3811210101644231e+00 2.0795616535859160e+00 -1.2543130116394610e+00 + 1.7807593966644089e+00 2.0340114752747147e+00 -1.3100861849501371e+00 + 2.2067128250017523e+00 1.9317731551701018e+00 -1.3493254589477266e+00 + 2.6416393706034991e+00 1.7853238973042200e+00 -1.3733331922025620e+00 + 3.0748373526712465e+00 1.6199642489306632e+00 -1.3935415230506532e+00 + 3.5102690926540148e+00 1.4562026228445406e+00 -1.4305790623632488e+00 + 3.9512609561152918e+00 1.3034454898441896e+00 -1.5018433679136778e+00 + 4.3861935279106250e+00 1.1726897465607817e+00 -1.6064217837668064e+00 + 4.8056076978800046e+00 1.0172834392126906e+00 -1.6779319103820629e+00 + id 13099 + loc 7.4441768229007721e-02 1.4395181834697723e-01 1068 + blend 0.0000000000000000e+00 + interp 4.8455280048954208e-01:3.0244822330874072e-01:7.3525375066900134e-01:4.8454795496153719e-01:1.2971389064274639e+00:3.1464358249597524e-01:1.9029676948360632e+00:3.1085536501677641e-01:2.8705750802006147e+00:3.2296451051825042e-01:3.8509247023981001e+00 + CVs 20 + -2.3149458814527568e-01 2.7418130900029314e-01 -1.6163704877052334e-01 + -4.5290131090674179e-01 5.5170520047828653e-01 -3.4072130971488268e-01 + -6.8727423725797476e-01 8.3655468560926449e-01 -5.2336451495395908e-01 + -9.5069247482111241e-01 1.1273682006921824e+00 -6.9719444711729528e-01 + -1.2530601790068521e+00 1.4162314659009192e+00 -8.5109692608372667e-01 + -1.6027535711985514e+00 1.6902155260171885e+00 -9.7357605928131052e-01 + -2.0049506503290946e+00 1.9322927541306290e+00 -1.0550696312767707e+00 + -2.4579982890777492e+00 2.1215211313665367e+00 -1.0896609939001975e+00 + -2.9518505997668925e+00 2.2356723464692689e+00 -1.0755448782430306e+00 + -3.4682335001081457e+00 2.2551809894524073e+00 -1.0161648312597829e+00 + -3.9830824134740208e+00 2.1677690272185037e+00 -9.2379380439520165e-01 + -4.4746737547817697e+00 1.9750956382150893e+00 -8.2128543517043129e-01 + -4.9288842613960124e+00 1.6896639432955107e+00 -7.3554134099814672e-01 + -5.3327266183291382e+00 1.3261969783172782e+00 -6.8857768450244827e-01 + -5.6698300568768447e+00 8.9870473161160769e-01 -6.9379798292714556e-01 + -5.9162768428679033e+00 4.2005124857288767e-01 -7.5064069171324621e-01 + -6.0491758269835065e+00 -8.6318564109396534e-02 -8.3941112478122759e-01 + -6.0923685683859983e+00 -5.7516345764920263e-01 -9.3395894323659001e-01 + -6.2703306619373382e+00 -9.1770320548217488e-01 -9.8631376658316905e-01 + id 13100 + loc 5.0775855779647827e-01 8.8981360197067261e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5451943601070349e-01:3.5614524673295578e-01:4.9763136747289449e-01:4.1808251336612967e-01:9.7997484487115849e-01:3.1735866395468371e-01:1.5550524431334380e+00:4.5177708020425267e-01:1.9888975843332675e+00:4.5451489081634339e-01:2.8838200286301188e+00:2.8648171891220803e-01:3.1051277710383953e+00:3.7787693513639120e-01:3.9079400078781030e+00 + CVs 20 + 2.2550404909776020e-01 2.6825091110265892e-01 -2.4437030292567702e-01 + 4.5526968233903675e-01 5.3012030297081891e-01 -4.5954539884942924e-01 + 6.9749019995884576e-01 7.8344714207046773e-01 -6.6770384084043299e-01 + 9.5005581112147652e-01 1.0275149345435295e+00 -8.9154022344694839e-01 + 1.1959280178711560e+00 1.2605265502922367e+00 -1.1521939574576412e+00 + 1.4008236594701031e+00 1.4730472651327169e+00 -1.4645317734796639e+00 + 1.5255388872250379e+00 1.6398093228549850e+00 -1.8214329053709362e+00 + 1.5546103485946539e+00 1.7289972130375650e+00 -2.1912625059207924e+00 + 1.5021806221893974e+00 1.7225364412417510e+00 -2.5338218806544490e+00 + 1.3941634947234176e+00 1.6303421337857864e+00 -2.8230076052488569e+00 + 1.2522855796681360e+00 1.4790842592693805e+00 -3.0626325675272974e+00 + 1.0910068538173259e+00 1.2878433423441509e+00 -3.2758442608750280e+00 + 9.2378540983262003e-01 1.0636776884258108e+00 -3.4863035725456499e+00 + 7.6718495700048761e-01 8.0809979326142312e-01 -3.7140726674859712e+00 + 6.4125928210218852e-01 5.1876045243556490e-01 -3.9787915906304470e+00 + 5.7563344152255880e-01 1.8694902754064324e-01 -4.3032233631495647e+00 + 6.2995142901305645e-01 -1.9768509292617631e-01 -4.7070894434608919e+00 + 8.6956817295279165e-01 -5.7440663656634383e-01 -5.1310830291529950e+00 + 1.0334496219656466e+00 -6.9600693911977796e-01 -5.3310504383852901e+00 + id 13101 + loc 2.1634808182716370e-01 5.0024640560150146e-01 377 + blend 0.0000000000000000e+00 + interp 3.4387620369527844e-01:3.4336208041779132e-01:3.3619134598083744e-02:3.3855828027415635e-01:1.0010827799827533e+00:3.1809763236548616e-01:1.9452612943218588e+00:3.2816983728805388e-01:2.6437786664774601e+00:3.4387276493324148e-01:3.3576017293740281e+00 + CVs 20 + -7.3082537586094010e-01 3.0402461198665987e-01 -5.7631182967372774e-01 + -1.3047357729320015e+00 4.3375180629397764e-01 -9.4988798923928153e-01 + -1.8489280731567066e+00 4.8084571907163942e-01 -1.2291257689301653e+00 + -2.4053903710910562e+00 5.0588850047593659e-01 -1.4706428447146804e+00 + -2.9597346735011012e+00 5.3880046578707907e-01 -1.6910919551344947e+00 + -3.5140543244685958e+00 5.9205716803291808e-01 -1.9056520959755248e+00 + -4.0880849451482195e+00 6.5538723590239112e-01 -2.1323490393239224e+00 + -4.7005120418337665e+00 6.9852754087544966e-01 -2.3956444346629242e+00 + -5.3497415910846762e+00 6.7551372792074105e-01 -2.7193458064018659e+00 + -6.0100589826731712e+00 5.3436876281414358e-01 -3.1056059948450407e+00 + -6.6423636967331214e+00 2.3130424529060134e-01 -3.5199634009445950e+00 + -7.1994153408477670e+00 -2.5675797964514224e-01 -3.9005994484205257e+00 + -7.6262273981761108e+00 -9.1055377841723351e-01 -4.1767138082982704e+00 + -7.8893788296166649e+00 -1.6524924654700683e+00 -4.3048166724526418e+00 + -8.0145286579624688e+00 -2.3950639046483850e+00 -4.3086963258713826e+00 + -8.0694914528897819e+00 -3.0899583929711798e+00 -4.2479358547229449e+00 + -8.1218924738077938e+00 -3.7131254926962609e+00 -4.1571467326934108e+00 + -8.1976813195312417e+00 -4.2769088969912286e+00 -4.0375511538514299e+00 + -8.2429853765882442e+00 -4.8596443329319134e+00 -3.9188478843911088e+00 + id 13102 + loc 1.8235490424558520e-03 1.9857356324791908e-02 411 + blend 0.0000000000000000e+00 + interp 4.2348887392861473e-01:2.9833685468947130e-01:7.4195495634868158e-01:2.5967820226015970e-01:9.9964937183274227e-01:2.7677028735900872e-01:1.8454452073090244e+00:3.2312940914095500e-01:2.2470281313712177e+00:4.2348463903987549e-01:3.0314705120660479e+00:2.7563335458826366e-01:3.7988140600748674e+00 + CVs 20 + -1.6751428552469383e-01 2.5062264607408313e-01 -6.9520905040319680e-01 + -3.1400152311452417e-01 4.2954416945589580e-01 -1.2258109898302332e+00 + -4.5002984157621068e-01 6.0869552539279737e-01 -1.7176535037608704e+00 + -5.8928222747094683e-01 8.0537502454112497e-01 -2.2157618288064209e+00 + -7.4705946032862869e-01 9.9564870165683239e-01 -2.7204691381744368e+00 + -9.4262577083726284e-01 1.1481679539766856e+00 -3.2369299977297370e+00 + -1.1932735908870178e+00 1.2296762511244892e+00 -3.7618542597450917e+00 + -1.5026794920358326e+00 1.2105509073984129e+00 -4.2751629638491799e+00 + -1.8534168069083503e+00 1.0697306985928123e+00 -4.7530054563972302e+00 + -2.2099057242968416e+00 7.9630287488763796e-01 -5.1748067085883891e+00 + -2.5108608136855257e+00 3.9167934734277887e-01 -5.5113343155689130e+00 + -2.6866101620430123e+00 -1.3611058604270498e-01 -5.7347804146642156e+00 + -2.7397081838486694e+00 -7.8587705853689060e-01 -5.8473112902775677e+00 + -2.7664487055975333e+00 -1.5510444357544930e+00 -5.8792321885884213e+00 + -2.8870140375802049e+00 -2.3774244024848956e+00 -5.8719475826060012e+00 + -3.1863409722638569e+00 -3.1711994301006854e+00 -5.8693485239157202e+00 + -3.6833082862357234e+00 -3.8750404373025429e+00 -5.9204704696485582e+00 + -4.3416609115125464e+00 -4.5050182917833705e+00 -6.0760699989535718e+00 + -5.1139638300677888e+00 -5.1062925218188937e+00 -6.3626622379240523e+00 + id 13103 + loc 3.4531944990158081e-01 5.8130437135696411e-01 399 + blend 0.0000000000000000e+00 + interp 4.6032551127277810e-01:3.8084012119810612e-01:2.0487992625947349e-01:2.8714272540671443e-01:9.8989236316497708e-01:4.2361780798026472e-01:1.2988531511756456e+00:4.6032090801766540e-01:1.9421914325175829e+00:4.4344814785840253e-01:2.2642800234641607e+00:3.3214130119968521e-01:2.8656153842067251e+00:2.9731300561065016e-01:3.5919868127009664e+00 + CVs 20 + -5.4582388572254267e-02 2.8800160781263234e-01 -2.6044840202495112e-01 + -1.3079165950777821e-01 5.5361851755990754e-01 -5.3693940378641980e-01 + -1.9690923465290999e-01 7.8157955751641561e-01 -8.3012195607441286e-01 + -2.5184126352462555e-01 9.7409730241335657e-01 -1.1403611721636486e+00 + -3.0838696519508996e-01 1.1383214664778605e+00 -1.4637982444713431e+00 + -3.7745388722881396e-01 1.2740978620299686e+00 -1.7897017571592408e+00 + -4.6380122364816551e-01 1.3712901805322177e+00 -2.1003826863952453e+00 + -5.6156063408433565e-01 1.4127453779780581e+00 -2.3691314106047421e+00 + -6.4990485567108069e-01 1.3870218471047804e+00 -2.5592489990312135e+00 + -6.9684198981208700e-01 1.3137359048786963e+00 -2.6359981265701093e+00 + -6.9775747163554402e-01 1.2445697086615566e+00 -2.6203277465986607e+00 + -7.0519062786834885e-01 1.1720056897677074e+00 -2.6004700699003203e+00 + -7.6174802236731587e-01 1.0272975520674530e+00 -2.6212815206896019e+00 + -8.8807494227089279e-01 7.6702644299935618e-01 -2.6930175590451473e+00 + -1.1000841017952014e+00 4.0378902895094465e-01 -2.8473661161743666e+00 + -1.3792645190555244e+00 1.5530642856315502e-02 -3.1362966513128718e+00 + -1.6403284647005330e+00 -3.0139973743978021e-01 -3.5956673729833013e+00 + -1.7815899215586353e+00 -4.7563720235481927e-01 -4.1108797656342881e+00 + -1.8425669854715883e+00 -5.3877039189069931e-01 -4.4453320873478006e+00 + id 13104 + loc 7.4004071950912476e-01 2.4834712967276573e-02 414 + blend 0.0000000000000000e+00 + interp 1.1528839294460484e+00:1.1528739294460484e+00:9.9023250662854756e-01:3.0689599390483113e-01:1.1167456632242589e+00:3.7947802214947118e-01:1.8927294026051440e+00:1.2680398054819381e-01:2.4337148579159926e+00:3.3698844957844576e-01:3.2035650445302410e+00 + CVs 20 + -8.6766483633899127e-01 9.9432828566826212e-02 1.8336803095283333e-01 + -1.4159393673803498e+00 5.2273175852449699e-02 3.3474182500249194e-01 + -1.8986629329285873e+00 -5.9840115665669769e-02 4.7836860061066389e-01 + -2.4178223950806994e+00 -2.0188341385875885e-01 6.1384292040106814e-01 + -2.9549519209466157e+00 -3.8122240690714970e-01 7.3877916287130818e-01 + -3.4894828295822640e+00 -5.9908342781643176e-01 8.4653768849582589e-01 + -4.0011604743735676e+00 -8.4897574881172777e-01 9.2583365803007966e-01 + -4.4712699289436522e+00 -1.1196702181966907e+00 9.6958461029491516e-01 + -4.8867616107696792e+00 -1.3983787672510735e+00 9.7899825813744124e-01 + -5.2418990640520260e+00 -1.6728986276059126e+00 9.6002072160512575e-01 + -5.5298466947525995e+00 -1.9344930847327426e+00 9.2474674853352612e-01 + -5.7429609337764349e+00 -2.1802360084200916e+00 8.9312901329465300e-01 + -5.8929410719727411e+00 -2.4118414275983038e+00 8.8032900771298628e-01 + -6.0163206045354762e+00 -2.6397443253215034e+00 8.8857944695116309e-01 + -6.1327953547302245e+00 -2.8698944203789516e+00 9.1894556927401450e-01 + -6.2383404471928516e+00 -3.0937570036721080e+00 9.7251956739446421e-01 + -6.3275475715469156e+00 -3.3035228794791074e+00 1.0480906899867812e+00 + -6.3978746932461323e+00 -3.4975286430801340e+00 1.1432823495251012e+00 + -6.4562284973930328e+00 -3.7238744619322004e+00 1.2833617290865345e+00 + id 13105 + loc 9.7037422657012939e-01 5.6852984428405762e-01 393 + blend 0.0000000000000000e+00 + interp 4.2012022890505568e-01:3.9089170637759907e-01:1.5195053074657727e-01:3.9168838368212161e-01:1.0087008126287611e+00:2.5133621399065459e-01:1.5252198713408194e+00:4.2011602770276663e-01:2.0489633176999296e+00:1.0185020775744986e-01:3.1314914925140656e+00 + CVs 20 + -2.0305558078050914e-01 2.2279795102307520e-01 -1.2878522416793767e-01 + -3.9411877054505673e-01 4.6250304916616081e-01 -2.6903366416397373e-01 + -5.8023142011153128e-01 7.1978691873688372e-01 -3.9490990457456510e-01 + -7.6603090527304318e-01 9.9080357206858138e-01 -4.9659886056775243e-01 + -9.5501267581337390e-01 1.2681126829177547e+00 -5.7892486571742063e-01 + -1.1506870878672177e+00 1.5428955591794700e+00 -6.5308400264125077e-01 + -1.3556828698791739e+00 1.8072696547256499e+00 -7.3284466771143597e-01 + -1.5720745670809104e+00 2.0533342800794192e+00 -8.2640603519807232e-01 + -1.8037257207404342e+00 2.2744279662373139e+00 -9.3635043365377413e-01 + -2.0577548924258506e+00 2.4625873994891236e+00 -1.0738647965780990e+00 + -2.3366556838395276e+00 2.5948943258519823e+00 -1.2619543949211405e+00 + -2.6229629024184380e+00 2.6316018441192952e+00 -1.5078672512514042e+00 + -2.8855252893885992e+00 2.5517731128363739e+00 -1.7810304666697840e+00 + -3.1074759131258003e+00 2.3779117964562353e+00 -2.0422483611115676e+00 + -3.2915802395773142e+00 2.1562398446052420e+00 -2.2710343020210821e+00 + -3.4468520491120964e+00 1.9505205089759055e+00 -2.4522280161662762e+00 + -3.5771842658003936e+00 1.8297865424873909e+00 -2.5762748375832136e+00 + -3.6956316048170579e+00 1.7723272316411443e+00 -2.6755395368698949e+00 + -3.9253815278837281e+00 1.5928360791391580e+00 -2.8429906632247595e+00 + id 13106 + loc 2.8267279267311096e-01 1.0624536871910095e-01 374 + blend 0.0000000000000000e+00 + interp 4.0094777716960406e-01:3.4600747327573000e-01:9.8274021847544746e-02:2.6047136637301094e-01:8.2262212759919295e-01:2.7580120537290670e-01:1.6881735499058572e+00:2.9532416236393044e-01:2.5261066614381713e+00:2.7488153194971371e-01:3.0108371890326686e+00:4.0094376769183238e-01:3.7100383437750359e+00 + CVs 20 + -3.3285821272465121e-01 4.6539687532544061e-01 7.5473678885371109e-01 + -4.4256101631747680e-01 7.6555417986072249e-01 1.3805520581626523e+00 + -4.0340946588873677e-01 9.2508140998429511e-01 1.9840966347632263e+00 + -3.0115373795445854e-01 1.0280686262010765e+00 2.5999893767763664e+00 + -2.2015237089485273e-01 1.1448097325657032e+00 3.2262549824437867e+00 + -2.2665900882497936e-01 1.2958460388254300e+00 3.8664111132019405e+00 + -3.6184843463583061e-01 1.4664684949936193e+00 4.5038745675766343e+00 + -6.4667389479557458e-01 1.6338818452070165e+00 5.0988226301108037e+00 + -1.0776841081796484e+00 1.7790691085919272e+00 5.6162907597925731e+00 + -1.6436544648883709e+00 1.8795031830236026e+00 6.0450306437533712e+00 + -2.3237339580828653e+00 1.9020658632300125e+00 6.3899203799089364e+00 + -3.0700903049945514e+00 1.8088609992777385e+00 6.6503083384896007e+00 + -3.8088730479037252e+00 1.5782729210906554e+00 6.8128265469665177e+00 + -4.4643633806512604e+00 1.2289926258264043e+00 6.8677591281056527e+00 + -5.0131397573404541e+00 7.9356847414144660e-01 6.8253507610098634e+00 + -5.4919392470103219e+00 2.2823381039798818e-01 6.6878591345829159e+00 + -5.8591688233773374e+00 -5.7190766551491246e-01 6.4948111258572849e+00 + -5.9463131853269182e+00 -1.4607340813379621e+00 6.4142614228118155e+00 + -5.8449503480134002e+00 -1.9265556757134714e+00 6.4779664158332650e+00 + id 13107 + loc 3.9950451254844666e-01 3.5331839323043823e-01 1080 + blend 0.0000000000000000e+00 + interp 4.2607729308873321e-01:3.9421521880158888e-01:2.3744835531790187e-01:3.3630165146464219e-01:9.4588989856027605e-01:3.2965124242558597e-01:1.8695106962536561e+00:4.2607303231580235e-01:2.0655282310229222e+00:3.2857578416694461e-01:2.8902005649765763e+00:3.1644139352405076e-01:3.9272381454980700e+00 + CVs 20 + 4.1867059385994410e-01 4.2745639518309420e-01 2.9354102569575567e-02 + 6.6245571148424642e-01 7.4260979216835221e-01 4.5774574700929396e-02 + 8.5114611911413784e-01 1.0215522572516218e+00 5.5849893768670590e-02 + 1.0567801668754886e+00 1.3058655137595938e+00 6.4420230469148534e-02 + 1.2634996476609024e+00 1.5850070880515623e+00 6.7285112631548447e-02 + 1.4553139450106682e+00 1.8483791690756670e+00 6.0693658538810757e-02 + 1.6188833352313565e+00 2.0893113908804049e+00 4.0574267743707260e-02 + 1.7438728704852666e+00 2.3178112056880491e+00 -6.6138365802080323e-03 + 1.7509220726294967e+00 2.6337543331170385e+00 -2.3251990065771738e-01 + 1.3171683641542016e+00 2.5003114736844325e+00 -6.9119170426536136e-01 + 1.1924890377079396e+00 2.2925980195174382e+00 -7.6051170244945054e-01 + 1.1105397243931154e+00 2.0838340060953522e+00 -8.0562472778653693e-01 + 1.0435069163034996e+00 1.8342791512044561e+00 -8.3913269161950499e-01 + 9.8675590480972863e-01 1.5501119416610685e+00 -8.6104741597167944e-01 + 9.2481103258431541e-01 1.2573631915003025e+00 -8.7116343642171212e-01 + 8.3074435080887576e-01 1.0239167287649693e+00 -8.7620133414794155e-01 + 7.6258596914109589e-01 1.0196011890028265e+00 -9.1714597672633558e-01 + 1.4942857826198854e+00 9.3229776714144696e-01 -6.6787529776611554e-01 + 1.5176642071529101e+00 9.8193027664826904e-01 -7.3761208495118558e-01 + id 13108 + loc 9.7717767953872681e-01 5.2032095193862915e-01 409 + blend 0.0000000000000000e+00 + interp 3.5287534786430597e-01:3.0313500033215279e-01:5.8693109246515252e-01:3.3849752211397022e-01:1.1176563016553225e+00:3.4144085560726534e-01:2.0678859154509976e+00:3.5287181911082732e-01:2.9399347773374531e+00:3.5097792825034241e-01:3.9701227352845931e+00 + CVs 20 + 2.7279851772924335e-01 2.3097835264085861e-01 -1.2038736060375968e-01 + 5.2393785927807346e-01 4.3395027393418872e-01 -2.3206919896033368e-01 + 7.8114953701985590e-01 6.2473409006825931e-01 -3.3844417936862536e-01 + 1.0668397501832445e+00 8.1487560991186592e-01 -4.4195304316801420e-01 + 1.3836010295051646e+00 9.9803563155787511e-01 -5.4278985204255403e-01 + 1.7313546231815766e+00 1.1673252283016033e+00 -6.4354871908942568e-01 + 2.1105318325239848e+00 1.3175076457143031e+00 -7.5012725795902857e-01 + 2.5239855568188836e+00 1.4403015382543312e+00 -8.6885994613009487e-01 + 2.9750015069500244e+00 1.5190363960939548e+00 -1.0035369877680944e+00 + 3.4601873347636278e+00 1.5306174449042391e+00 -1.1593140243620923e+00 + 3.9571419041156828e+00 1.4523652220754930e+00 -1.3441978152485143e+00 + 4.4226957628026025e+00 1.2753795334656488e+00 -1.5583130435620762e+00 + 4.8194007246390766e+00 1.0131232225581568e+00 -1.7906782214644648e+00 + 5.1327077241225059e+00 6.8895144192459146e-01 -2.0313694146147689e+00 + 5.3588399860904845e+00 3.2583023237904429e-01 -2.2747107829850148e+00 + 5.4972716142671514e+00 -5.6034292469114177e-02 -2.5127118304831617e+00 + 5.5519558567604355e+00 -4.4065179706865498e-01 -2.7321355115791630e+00 + 5.5323457371379092e+00 -8.1107391883207836e-01 -2.9209217679216639e+00 + 5.4632931942818725e+00 -1.1050760757152140e+00 -3.0733563164159547e+00 + id 13109 + loc 1.1918430030345917e-01 8.6745530366897583e-01 382 + blend 0.0000000000000000e+00 + interp 4.7569655115985371e-01:3.1826166924593668e-01:2.2547503071433495e-02:4.4838340980640234e-01:6.7423968786613986e-01:4.0186333139741037e-01:1.2016867404547429e+00:2.8078068236369907e-01:1.8966531358993723e+00:2.6335562787470829e-01:2.7928097968803201e+00:4.7569179419434215e-01:3.5544696847136570e+00 + CVs 20 + 9.7033426565992087e-01 1.6321068891389162e-01 -4.3502227406561400e-01 + 1.5808300654427936e+00 1.6070994168858180e-01 -7.5027370286690964e-01 + 2.0819979350810929e+00 9.0840775655255335e-02 -1.0323495954967341e+00 + 2.5817345783587862e+00 1.0826638379774489e-03 -1.3140918814199778e+00 + 3.0770998954059832e+00 -1.0738916861679015e-01 -1.5967399198904206e+00 + 3.5673185430701060e+00 -2.3339680129128104e-01 -1.8839742751098787e+00 + 4.0487840459314040e+00 -3.7487631208628125e-01 -2.1800075628603151e+00 + 4.5128575504784898e+00 -5.3015594559775558e-01 -2.4826425627415092e+00 + 4.9526897244054613e+00 -6.9983196694767069e-01 -2.7783747567736685e+00 + 5.3679458115507170e+00 -8.8444849579363982e-01 -3.0585393552289215e+00 + 5.7589858972968520e+00 -1.0874509349623154e+00 -3.3251994846924209e+00 + 6.1201796964424497e+00 -1.3139937597172304e+00 -3.5903338049019049e+00 + 6.4425277522964999e+00 -1.5664543288646964e+00 -3.8666251125192685e+00 + 6.7203164077046784e+00 -1.8441748946983842e+00 -4.1593672210384423e+00 + 6.9499184527034323e+00 -2.1443111110225770e+00 -4.4684001779223230e+00 + 7.1266573206093424e+00 -2.4591302824650754e+00 -4.7958198464372028e+00 + 7.2444094728846045e+00 -2.7797362126416738e+00 -5.1462682811066642e+00 + 7.2936947718549794e+00 -3.1022442527728211e+00 -5.5120812033438291e+00 + 7.1853397708684072e+00 -3.3968681938881571e+00 -5.7801634079922213e+00 + id 13110 + loc 7.4937289953231812e-01 3.1626281142234802e-01 396 + blend 0.0000000000000000e+00 + interp 4.6705869819684820e-01:2.9411516622520656e-01:2.4024660537403708e-02:4.3149500800102714e-01:7.1902016443063621e-01:3.6330157735793611e-01:1.0657850830402804e+00:3.0823794408907029e-01:1.9810550595265732e+00:4.6705402760986625e-01:2.8232242861793164e+00:3.1999497330367410e-01:3.0442202965805141e+00 + CVs 20 + -7.9295942197368641e-01 3.4184306666508157e-01 3.7516149550977484e-01 + -1.3851117214444344e+00 5.3464502517998169e-01 6.8654071596541555e-01 + -1.9054690069880880e+00 6.6315484551812121e-01 9.7075527888041790e-01 + -2.4226506918546691e+00 7.4963406452581738e-01 1.2592327850827789e+00 + -2.9317855711460941e+00 7.8611609577227215e-01 1.5529131927993558e+00 + -3.4271749931159747e+00 7.6840080633219954e-01 1.8537795606354206e+00 + -3.9016590620593150e+00 6.9589089053776321e-01 2.1618450399661251e+00 + -4.3501574926880320e+00 5.6922171999417914e-01 2.4743143059406103e+00 + -4.7739616294365756e+00 3.8749135258070777e-01 2.7903653775702386e+00 + -5.1708022715963073e+00 1.4957435416473452e-01 3.1098719048541570e+00 + -5.5326702804205405e+00 -1.4319249181043681e-01 3.4330045612995694e+00 + -5.8521363670035651e+00 -4.8584929244612640e-01 3.7584573327824033e+00 + -6.1298547776261563e+00 -8.7249262596580746e-01 4.0829780708499381e+00 + -6.3712027551926971e+00 -1.2979437442706789e+00 4.4027058894376907e+00 + -6.5786129944004319e+00 -1.7564979760431338e+00 4.7146685087009974e+00 + -6.7497338357603969e+00 -2.2429781354196563e+00 5.0148494449849217e+00 + -6.8797410892670099e+00 -2.7524513037361804e+00 5.2931073222011094e+00 + -6.9674815478289656e+00 -3.2699385977080446e+00 5.5347959172860115e+00 + -7.0597567320807268e+00 -3.6776004507028990e+00 5.7333154433713602e+00 + id 13111 + loc 6.0723817348480225e-01 7.1955800056457520e-02 373 + blend 0.0000000000000000e+00 + interp 5.1079621081494797e-01:2.5769025965171288e-01:4.8277753084838326e-01:2.1118814350288187e-01:1.0496511650126361e+00:3.5789955862285844e-01:1.9170133916856820e+00:5.1079110285283980e-01:2.8907613913537911e+00:2.8592138977612996e-01:3.0927395453640223e+00:2.6650684872291813e-01:3.9919446208214469e+00 + CVs 20 + 3.6878491920735840e-01 4.6560134778642143e-01 -2.4668242299925439e-02 + 7.2193687188428046e-01 8.6755456595291724e-01 -5.0284818247273932e-02 + 1.0540521187652259e+00 1.1644299544484331e+00 -9.5254373205676729e-02 + 1.3389211012449356e+00 1.3714401309678039e+00 -1.7934888318087600e-01 + 1.5783793580969636e+00 1.5399627415569872e+00 -3.0237184258187588e-01 + 1.8211711514915365e+00 1.7248897303282869e+00 -4.4915534379648941e-01 + 2.0943637258527481e+00 1.9607830422727328e+00 -5.9853058933479697e-01 + 2.3843377982578047e+00 2.2573476792368243e+00 -7.2644491199593009e-01 + 2.6715116279024267e+00 2.6106514514846024e+00 -8.1515139641715839e-01 + 2.9528203255612162e+00 3.0158670102580318e+00 -8.4817247044502575e-01 + 3.2422735975128263e+00 3.4738494925310257e+00 -7.9734728395853494e-01 + 3.5643666346155731e+00 3.9871742027854706e+00 -6.0663936933151907e-01 + 3.9264492998511757e+00 4.5222982747137275e+00 -1.8514240451461905e-01 + 4.2867778691103426e+00 4.9549540788994015e+00 5.5324682917906509e-01 + 4.5447488938066547e+00 5.0770677266202560e+00 1.5349278197696048e+00 + 4.6191674632713076e+00 4.8698404073005186e+00 2.3560585610238967e+00 + 4.5491240124990542e+00 4.5614724865865499e+00 2.8552494630057463e+00 + 4.5007652636871907e+00 4.1898530386144870e+00 3.1012626474260649e+00 + 4.7400326519204548e+00 3.7736793816028866e+00 2.9590183458405312e+00 + id 13112 + loc 7.1631664037704468e-01 3.0304792523384094e-01 395 + blend 0.0000000000000000e+00 + interp 3.9182409227816595e-01:2.9751072872584194e-01:2.5486170794609442e-01:2.9639365121171468e-01:1.0196600313135984e+00:3.1605563085010607e-01:1.9996712727899995e+00:2.8306037693594183e-01:2.7427217677299658e+00:3.1244148665610832e-01:3.2741451377905975e+00:3.9182017403724317e-01:3.9475740752321289e+00 + CVs 20 + -4.5072782786124682e-01 3.9594127813351210e-01 4.0523012621947518e-01 + -8.4305209256942948e-01 7.0894251326947477e-01 7.7415350623941093e-01 + -1.2376736542509383e+00 9.7822821253626557e-01 1.1302429833308267e+00 + -1.6604604709265391e+00 1.2128473856721480e+00 1.4847735367279180e+00 + -2.0996692031092321e+00 1.4035280675002224e+00 1.8289245481425027e+00 + -2.5386647998237302e+00 1.5443984989363042e+00 2.1585672958773490e+00 + -2.9693327421365883e+00 1.6275890498602918e+00 2.4733700257524251e+00 + -3.3914681618312446e+00 1.6406002042342347e+00 2.7716291696019697e+00 + -3.7972343691413846e+00 1.5766055888033152e+00 3.0478099645602805e+00 + -4.1719221952474630e+00 1.4419345880597805e+00 3.2949311964984447e+00 + -4.5079003475781665e+00 1.2512878437906831e+00 3.5060730594883549e+00 + -4.8067855746992079e+00 1.0200559847627497e+00 3.6772401823981360e+00 + -5.0751787104290180e+00 7.6009576969625980e-01 3.8092811369526247e+00 + -5.3241604532399815e+00 4.7912495159342772e-01 3.9045345492706200e+00 + -5.5658151195688426e+00 1.8375636365847958e-01 3.9680331408679512e+00 + -5.8089788234205795e+00 -1.1342812538430369e-01 4.0143059836004884e+00 + -6.0596533977439302e+00 -4.1204419808527470e-01 4.0677106126992193e+00 + -6.2906747828174492e+00 -7.2887184649620451e-01 4.1279864898081957e+00 + -6.3465948251435780e+00 -1.0526180007393084e+00 4.1202120135617051e+00 + id 13113 + loc 4.3904951214790344e-01 8.4282702207565308e-01 1081 + blend 0.0000000000000000e+00 + interp 4.4858861648989079e-01:3.1130302243679142e-01:5.2584712955808044e-01:2.8325473395674222e-01:1.1437838922823200e+00:4.4858413060372593e-01:1.9908153383848004e+00:2.8765698037231768e-01:2.9984512363143212e+00:4.2867563171057482e-01:3.4268804710467395e+00:3.7662166475206166e-01:3.9854641410904024e+00 + CVs 20 + -1.5439251394594206e-02 4.2853673994324898e-01 6.2931468207817698e-01 + 1.4305692132875247e-02 7.3489796851328559e-01 1.0596448142945667e+00 + 7.6272629318598989e-02 1.0035290856899546e+00 1.4144748868239685e+00 + 1.6416016777350739e-01 1.2814173012568089e+00 1.7601651006203975e+00 + 2.7782524992416457e-01 1.5651703259663148e+00 2.0851231848316778e+00 + 4.1696504722558220e-01 1.8517423996995634e+00 2.3808745864712590e+00 + 5.8424999182995729e-01 2.1386589590157468e+00 2.6370285977283019e+00 + 7.9427117790050850e-01 2.4280135629245581e+00 2.8445460522599340e+00 + 1.1002401320911355e+00 2.7284323212873502e+00 2.9838008840905825e+00 + 1.5653865440425374e+00 2.9730759020485293e+00 2.9643592307628266e+00 + 2.0133548079356851e+00 3.0010323714358753e+00 2.7617167243455012e+00 + 2.2843197906948456e+00 2.8785659676950814e+00 2.5288732788882351e+00 + 2.4324565567806644e+00 2.6996855722987649e+00 2.3069157420564399e+00 + 2.5066788947097907e+00 2.4838068324075731e+00 2.0821265734567413e+00 + 2.5314918064833414e+00 2.2277900686823862e+00 1.8459861285118648e+00 + 2.5224334685638521e+00 1.9092469565646328e+00 1.6113169612842835e+00 + 2.4903289925885446e+00 1.4892232688561950e+00 1.4382186473985774e+00 + 2.4410695697922700e+00 9.6301801445408719e-01 1.3925676192195788e+00 + 2.3903990863950817e+00 3.8827813544366452e-01 1.4045230120638348e+00 + id 13114 + loc 6.7975890636444092e-01 5.6368011236190796e-01 402 + blend 0.0000000000000000e+00 + interp 3.6904701696467485e-01:3.6270076514516020e-01:1.3005669254863572e-02:2.9436176632435651e-01:7.2528456234230287e-01:3.6904332649450522e-01:1.2224377534688711e+00:3.2007291213816241e-01:2.0574880234102482e+00:2.6216166687288317e-01:2.7687642058769053e+00:2.5207586073490829e-01:3.3050475659077110e+00 + CVs 20 + -3.2527112037151529e-02 2.9635077301103968e-01 -2.1983392235467472e-01 + -8.8278179448747857e-02 6.0322565928849337e-01 -4.7210857973683235e-01 + -1.4926467152609474e-01 9.1971841760092965e-01 -7.5618468753786594e-01 + -2.3809961499510046e-01 1.2318919846771776e+00 -1.0641061558566769e+00 + -3.8555494662682160e-01 1.5048523461757997e+00 -1.3794573243688675e+00 + -5.8583003697030223e-01 1.6992873683959302e+00 -1.6871913802439811e+00 + -8.3432367030619825e-01 1.8076806705182529e+00 -1.9722335855563573e+00 + -1.0978970006454050e+00 1.8052006534268517e+00 -2.1944068225826054e+00 + -1.3071572792356230e+00 1.7047634504876688e+00 -2.3744723285313420e+00 + -1.4484619038364015e+00 1.5335616113891832e+00 -2.5335705336995993e+00 + -1.5345989805932061e+00 1.3112180597748544e+00 -2.6676733173290046e+00 + -1.6277655057517759e+00 1.0224733365264664e+00 -2.8119682270361817e+00 + -1.7863267912265308e+00 6.4663775287105563e-01 -2.9973386239282256e+00 + -2.0537722230717108e+00 2.3596906063797018e-01 -3.2171156031264001e+00 + -2.4441552868486767e+00 -1.2597940953673270e-01 -3.4516772995467351e+00 + -2.9269697022046497e+00 -3.8807891194382327e-01 -3.6871059358107656e+00 + -3.4642107979784820e+00 -5.5752856544868179e-01 -3.9360089694824518e+00 + -4.0394852195786601e+00 -6.6967520085013232e-01 -4.2270057925979980e+00 + -4.6317303478561396e+00 -7.5439604145829708e-01 -4.5193991427368179e+00 + id 13115 + loc 4.5171079039573669e-01 6.0042464733123779e-01 400 + blend 0.0000000000000000e+00 + interp 4.3241477796866562e-01:4.3241045382088594e-01:2.6386830011013829e-02:2.9816751027076382e-01:5.0126388564471847e-01:3.1639059309030987e-01:1.0294667660378096e+00:3.8900104610545616e-01:1.8089424030655965e+00:2.6768344261289645e-01:2.5296335619630357e+00:3.0993192168107325e-01:3.4250318601885064e+00 + CVs 20 + -2.0711192298047199e-01 2.9706464428286233e-01 -2.0991408134314066e-01 + -4.0903268851194097e-01 5.6345612960079405e-01 -4.2412799428394249e-01 + -6.0669618059111019e-01 8.0336204154413915e-01 -6.7182363863078565e-01 + -8.0079842564498471e-01 1.0142221129076132e+00 -9.6463550173748547e-01 + -9.9179867641810626e-01 1.1886250085812256e+00 -1.2993453595708835e+00 + -1.1825907806360818e+00 1.3185330764110079e+00 -1.6682232586499075e+00 + -1.3753091601166123e+00 1.3956620207778792e+00 -2.0611562878339278e+00 + -1.5683771326142049e+00 1.4121945007068828e+00 -2.4682929256371207e+00 + -1.7565832210577357e+00 1.3636643509195063e+00 -2.8828220701132929e+00 + -1.9322042497531733e+00 1.2503798958730572e+00 -3.2996649779089511e+00 + -2.0898100048941690e+00 1.0777597192887292e+00 -3.7114643735730510e+00 + -2.2356674229367020e+00 8.5800873236195541e-01 -4.1050466214483219e+00 + -2.3867712431287229e+00 6.0925893545993803e-01 -4.4527225642015269e+00 + -2.5569085744313766e+00 3.5508956099189137e-01 -4.7053645287312706e+00 + -2.7444023239820496e+00 1.2907700080643281e-01 -4.8278478360049064e+00 + -2.9348985943356767e+00 -4.1747839987136048e-02 -4.8598676844731026e+00 + -3.1181908912964080e+00 -1.6575904180232515e-01 -4.8836068433003792e+00 + -3.2872662058460831e+00 -2.7841403192472303e-01 -4.9546723948789060e+00 + -3.4604121733826623e+00 -5.0443116059406390e-01 -5.1966622361571391e+00 + id 13116 + loc 7.2693847119808197e-02 7.7010500431060791e-01 403 + blend 0.0000000000000000e+00 + interp 3.8024674414848192e-01:3.3766070731917996e-01:8.5811467747774040e-02:3.2229650438575969e-01:1.0863776571856829e+00:3.7171175711294635e-01:1.9865750028720162e+00:3.3416470604412396e-01:2.5725277299822320e+00:3.8024294168104045e-01:3.3135618361193284e+00 + CVs 20 + 7.4412508232665070e-03 1.9519068138704748e-01 -7.4893972612051177e-02 + -2.3842662492346539e-02 3.6791267640848213e-01 -1.6368977094277046e-01 + -8.0350054083513700e-02 5.2565714296376709e-01 -2.5547914749154971e-01 + -1.5567164008836099e-01 6.6853573988455206e-01 -3.4436727458078015e-01 + -2.4756991387971733e-01 7.9257711469803382e-01 -4.2893472155172691e-01 + -3.5190513840933568e-01 8.9599286479644524e-01 -5.0821676624144352e-01 + -4.6442011878424211e-01 9.7983152750295610e-01 -5.8187672595066087e-01 + -5.8219303136248646e-01 1.0481535686308918e+00 -6.5038220599147112e-01 + -7.0296982190617485e-01 1.1054245638716542e+00 -7.1423158005982557e-01 + -8.2248412061328835e-01 1.1535158196674511e+00 -7.7406853684055510e-01 + -9.3504227606119872e-01 1.1933240901523441e+00 -8.3188302111072665e-01 + -1.0376441289935530e+00 1.2280226785460748e+00 -8.9020476910194590e-01 + -1.1364929332019493e+00 1.2640346685018957e+00 -9.4908178315363845e-01 + -1.2518034128200433e+00 1.3056499928126455e+00 -1.0022503911091480e+00 + -1.4068780475587424e+00 1.3469248742904318e+00 -1.0369898622874600e+00 + -1.5991823799795508e+00 1.3818449615441717e+00 -1.0445758712442164e+00 + -1.8039560117745528e+00 1.4180986018147450e+00 -1.0274753103087295e+00 + -1.9972051367791224e+00 1.4656307182398765e+00 -9.9432273422751638e-01 + -2.1662489290459304e+00 1.5142752186238748e+00 -9.5398194519124047e-01 + id 13117 + loc 2.7860519289970398e-01 2.7519756555557251e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9558196515328697e-01:2.6545187264727377e-01:4.5933544984136498e-01:3.2380082764805573e-01:1.2265607731512174e+00:3.9557800933363546e-01:1.8994998565137056e+00:3.2889083246063244e-01:2.1990951598876611e+00:2.5307949461822682e-01:2.9574686136725936e+00:3.2728170692310027e-01:3.8804934053322047e+00 + CVs 20 + -5.8209106096303587e-03 3.1130579355141441e-01 -2.9191428919623119e-02 + -6.5314230378207661e-02 5.8647548123940363e-01 -4.1861235597689422e-02 + -1.4850484263308361e-01 8.6492708587628497e-01 -6.5362602516425367e-02 + -2.2987522618483869e-01 1.1502133814763835e+00 -1.0725167359080300e-01 + -3.0711908213293482e-01 1.4384128956213420e+00 -1.6973970438568992e-01 + -3.7787733633756160e-01 1.7239970551062465e+00 -2.5173796441559876e-01 + -4.4957186904805790e-01 2.0020269956624466e+00 -3.5524738963770375e-01 + -5.4032391450690975e-01 2.2667860744080630e+00 -4.8714221068284158e-01 + -6.7312454189031701e-01 2.5087393916288412e+00 -6.5560515670368402e-01 + -8.7069107590577577e-01 2.7053799132349159e+00 -8.6713530931520544e-01 + -1.1377806293551593e+00 2.8192640199562176e+00 -1.1173120944759689e+00 + -1.4525551539028390e+00 2.8219925171070472e+00 -1.3896188656410424e+00 + -1.7888015560767447e+00 2.7118639043414499e+00 -1.6708561993086435e+00 + -2.1371080292926012e+00 2.4985716871628498e+00 -1.9602907334917881e+00 + -2.5055462348202222e+00 2.1685887493846336e+00 -2.2704846164469106e+00 + -2.8788630347411361e+00 1.6361559427088688e+00 -2.6251043718307372e+00 + -3.0750314908145517e+00 7.5583763899975120e-01 -3.0166216657527811e+00 + -2.8011123828394551e+00 -2.7611138733583029e-01 -3.3135136579291489e+00 + -2.7025592846132649e+00 -7.8328388760756162e-01 -3.5252477485886287e+00 + id 13118 + loc 7.6280131936073303e-02 7.4796460568904877e-02 380 + blend 0.0000000000000000e+00 + interp 4.8433090722449290e-01:4.0791476978425684e-01:1.1079626632449224e-01:4.8432606391542066e-01:9.6938700474859973e-01:2.6332574548320237e-01:1.3421567096322062e+00:3.5631210734344110e-01:1.9366261833067819e+00:2.7286526221720936e-01:2.7026007368993512e+00:3.4268231099391888e-01:3.0528070450232025e+00:2.4130725540007494e-01:3.9265741614045213e+00 + CVs 20 + -3.6548564910130027e-01 3.7287144124121607e-01 6.1964666256103051e-01 + -5.9041348450626230e-01 6.1333920970549483e-01 1.1327266630170709e+00 + -7.6259494713175913e-01 7.8424298353227095e-01 1.6283179339142699e+00 + -9.2865505341213939e-01 9.1867004424466447e-01 2.1469684021008986e+00 + -1.1124809791532000e+00 1.0240402771560064e+00 2.6869706933096724e+00 + -1.3367121708078704e+00 1.0973021909143310e+00 3.2429597799867853e+00 + -1.6178774120868342e+00 1.1238045634220595e+00 3.8075173074604902e+00 + -1.9636333282578775e+00 1.0874488040567869e+00 4.3648931857741537e+00 + -2.3669947978526888e+00 9.7880195676584769e-01 4.8895962837434706e+00 + -2.8020390160707569e+00 7.9713929263765682e-01 5.3608349566103133e+00 + -3.2323132452373695e+00 5.4461018829885388e-01 5.7744481055451304e+00 + -3.6234808496886206e+00 2.1924025039791228e-01 6.1336168159735838e+00 + -3.9498625621347223e+00 -1.7549050294179125e-01 6.4395649182600554e+00 + -4.2127373540653430e+00 -6.0656231224621093e-01 6.7032903463808715e+00 + -4.4329376686072104e+00 -1.0155478714381214e+00 6.9483230325645735e+00 + -4.6192863525698717e+00 -1.3332783629815221e+00 7.1873771931116810e+00 + -4.7626228979436780e+00 -1.5131041400791942e+00 7.4034665527215555e+00 + -4.8726210529765766e+00 -1.5887880329050450e+00 7.5858503994681854e+00 + -4.9801762204964186e+00 -1.6973214044250398e+00 7.8540433297865180e+00 + id 13119 + loc 7.2730362415313721e-01 1.9642473757266998e-01 415 + blend 0.0000000000000000e+00 + interp 4.4739758866467499e-01:3.7929395924950660e-01:9.0334886247442348e-02:3.9892325089145880e-01:9.1776755998425741e-01:3.4645188320315001e-01:1.8293289970233988e+00:4.4739311468878834e-01:2.4321298994702492e+00:2.8419394954134897e-01:2.9779155450759971e+00:3.7424727229480687e-01:3.8062461996955208e+00 + CVs 20 + -1.7652414220303908e-01 9.1035493389737890e-02 2.9324871097339139e-02 + -3.2290549574546290e-01 1.5122818763908247e-01 8.0848664959119992e-02 + -4.6869296527787496e-01 2.1046075751412033e-01 1.3870029469314010e-01 + -6.1832877403418063e-01 2.8020069911791251e-01 1.8607757097373401e-01 + -7.7252307559639277e-01 3.6175824557417746e-01 2.2289747538560584e-01 + -9.3469154880339600e-01 4.5680303595913818e-01 2.4798134316683984e-01 + -1.1058055455657394e+00 5.6577469649115331e-01 2.5559070970473974e-01 + -1.2833546870909358e+00 6.8736217909529951e-01 2.3860287986250739e-01 + -1.4664895989978781e+00 8.1983984990928072e-01 1.9294519356885187e-01 + -1.6542531870021073e+00 9.6111728646061145e-01 1.1579076367496532e-01 + -1.8264266323083818e+00 1.1096235243456254e+00 2.8283595826447128e-03 + -1.9358331043969625e+00 1.2683097205089811e+00 -1.4940943046055832e-01 + -1.9616401721238230e+00 1.4428567707376532e+00 -3.4901589899250485e-01 + -1.9766051705874799e+00 1.6251852531596984e+00 -5.9893590300320609e-01 + -2.0754200518858461e+00 1.7922609969563552e+00 -8.6233227345535757e-01 + -2.2688366872690837e+00 1.9298239571391842e+00 -1.1041203882035076e+00 + -2.5259231141366150e+00 2.0326447712102693e+00 -1.3122049846986430e+00 + -2.8231449120844658e+00 2.0998835602440469e+00 -1.4664455030647845e+00 + -3.1507023851515932e+00 2.1170821645489415e+00 -1.4249460700681913e+00 + id 13120 + loc 9.4851988554000854e-01 7.7142876386642456e-01 377 + blend 0.0000000000000000e+00 + interp 3.6363744783082413e-01:3.6063757684029418e-01:4.6552408320965633e-04:3.5462803715366409e-01:8.9909969770343789e-01:3.6363381145634582e-01:1.6207781914625605e+00:2.5182546008871010e-01:2.0712294219695675e+00:1.4353715514533624e-01:2.8112365576991247e+00:3.6226052331003999e-01:3.4760120916743240e+00 + CVs 20 + -6.8439625037167895e-01 1.8987585356311504e-01 -7.3688375092234171e-01 + -1.2434535679235443e+00 2.3902905416519621e-01 -1.2354353578738730e+00 + -1.7946902536794691e+00 2.4161524917041965e-01 -1.6831067196631171e+00 + -2.3731723643632252e+00 2.3342127492109355e-01 -2.1448269552080403e+00 + -2.9575298012355535e+00 2.1814714460957374e-01 -2.6044488566245203e+00 + -3.5277118988602210e+00 1.9547339660410712e-01 -3.0431251786978173e+00 + -4.0699511660075824e+00 1.5916056777256760e-01 -3.4573092799835772e+00 + -4.5788496434138573e+00 9.6637917818918284e-02 -3.8669479995359675e+00 + -5.0530580755699885e+00 -1.5063591134823140e-02 -4.2991717260988809e+00 + -5.4848151293551002e+00 -2.0575724044717103e-01 -4.7637616416519055e+00 + -5.8662180779055948e+00 -5.0866404656653730e-01 -5.2506528641927090e+00 + -6.1864599641003402e+00 -9.5396329224201359e-01 -5.7290668009321477e+00 + -6.4230421908705582e+00 -1.5457109847774118e+00 -6.1526943511018448e+00 + -6.5597515955394989e+00 -2.2410343224699720e+00 -6.4856060139984439e+00 + -6.6169593938254927e+00 -2.9688704651319515e+00 -6.7353890560470671e+00 + -6.6449458372158539e+00 -3.6691294415812661e+00 -6.9354725952689211e+00 + -6.6998119475683744e+00 -4.3165915789746858e+00 -7.0985529701636487e+00 + -6.8068517075793284e+00 -4.9178468521064191e+00 -7.2145684962015784e+00 + -6.9004054253221057e+00 -5.4737238482768298e+00 -7.2830835705510610e+00 + id 13121 + loc 5.6212252378463745e-01 8.8070011138916016e-01 374 + blend 0.0000000000000000e+00 + interp 5.1933476987184435e-01:4.8328025658993168e-01:4.2167313323129063e-02:4.5076301056876172e-01:6.0461552089964266e-01:3.8699080486240628e-01:1.0122958479069224e+00:3.0826104470192811e-01:1.6137175817584202e+00:3.7985812045732464e-01:2.0050352114263053e+00:3.7484164362400929e-01:2.4317881857450474e+00:5.0002446284515845e-01:2.9820353624637539e+00:5.1932957652414569e-01:3.2176440659200107e+00:3.7216373322872826e-01:3.7992688852136696e+00 + CVs 20 + -6.3939605769671592e-01 3.6785134323901214e-01 -2.4177051155513368e-01 + -1.1744474849426614e+00 6.1927172210842718e-01 -4.0292187689617409e-01 + -1.6966764374126060e+00 7.9918712811454773e-01 -5.2243112092782784e-01 + -2.2402147037111204e+00 9.4107317975379101e-01 -6.3180713539787126e-01 + -2.7916455853020690e+00 1.0534420172451666e+00 -7.5273999768844668e-01 + -3.3416250152265157e+00 1.1297425596113229e+00 -9.0405343873530819e-01 + -3.8848477185758057e+00 1.1520002233986366e+00 -1.0974728100952105e+00 + -4.4119286431219393e+00 1.1035266889246853e+00 -1.3362722415078938e+00 + -4.9069950339104844e+00 9.7188354521124420e-01 -1.6122075541672607e+00 + -5.3549383541296534e+00 7.5371402987872615e-01 -1.9051826414985742e+00 + -5.7520046402596856e+00 4.4904888159489120e-01 -2.1903661832909513e+00 + -6.0893420924564152e+00 6.1509153384178727e-02 -2.4380929424164099e+00 + -6.3611947329912022e+00 -4.0123024498933813e-01 -2.6303713519728484e+00 + -6.5925678750840433e+00 -9.3544424294934680e-01 -2.7834394107751148e+00 + -6.8407849343057370e+00 -1.5330595285273629e+00 -2.9437904856079435e+00 + -7.1655321845071640e+00 -2.1473224509235020e+00 -3.1411280061726496e+00 + -7.6058387420649467e+00 -2.6986470268695211e+00 -3.3388108689782943e+00 + -8.1348469517582149e+00 -3.1296631533338446e+00 -3.4770750564668682e+00 + -8.5585952105001404e+00 -3.5221827761852360e+00 -3.6477895786842915e+00 + id 13122 + loc 2.9923054575920105e-01 5.9806495904922485e-01 393 + blend 0.0000000000000000e+00 + interp 4.8313948822290714e-01:3.1097294202785403e-01:7.2969386694938021e-02:4.8313465682802492e-01:7.2690494133037165e-01:4.3580149535346868e-01:1.0038147100027517e+00:4.0204231390303641e-01:1.4169000739883162e+00:3.2909397617621572e-01:2.0111798677786048e+00:3.2642760545357991e-01:2.9666464687085963e+00:4.6853566803267910e-01:3.6628784897934863e+00 + CVs 20 + -3.3461746575276508e-01 4.2389319224361027e-01 -2.3776229925127002e-01 + -6.2365712197023515e-01 8.3382537387126077e-01 -4.5669694740459921e-01 + -8.8878113791080482e-01 1.2349843549476955e+00 -6.6212016841637455e-01 + -1.1532411646475984e+00 1.6249538142833821e+00 -8.5741469150336347e-01 + -1.4375505385895637e+00 1.9945022749137009e+00 -1.0408932247146665e+00 + -1.7532821304824586e+00 2.3332760064305407e+00 -1.2061912018383878e+00 + -2.1030095833661733e+00 2.6307943931884461e+00 -1.3468702808595128e+00 + -2.4884125455033783e+00 2.8770507545433794e+00 -1.4619007293800428e+00 + -2.9104392960616696e+00 3.0562776851328044e+00 -1.5534334379187111e+00 + -3.3688524974582670e+00 3.1531422093226382e+00 -1.6292516689090724e+00 + -3.8638132210368781e+00 3.1674801243858495e+00 -1.7145402818031692e+00 + -4.3864524356507326e+00 3.1057779931335379e+00 -1.8429176686259434e+00 + -4.9148709570150135e+00 2.9572903758724429e+00 -2.0244274349012255e+00 + -5.4207513126587514e+00 2.6981747672232235e+00 -2.2448044582020850e+00 + -5.8680316705144397e+00 2.3241209202535651e+00 -2.4954670627748565e+00 + -6.2327755438221049e+00 1.8593320826772333e+00 -2.7658216064524304e+00 + -6.5503988708424323e+00 1.3296534435293887e+00 -3.0070571625868951e+00 + -6.8829827159426262e+00 7.5532958621890089e-01 -3.1615543577086962e+00 + -7.2304945204711322e+00 1.6257718885526073e-01 -3.2911668441599047e+00 + id 13123 + loc 1.4370059967041016e-01 8.7259286642074585e-01 399 + blend 0.0000000000000000e+00 + interp 4.7836154742883596e-01:3.7871581641472685e-01:1.7376962927241058e-01:2.8999704533144366e-01:1.0242327726630063e+00:4.0258494715299420e-01:1.9524989749545498e+00:3.4792706234231424e-01:2.3720428718846258e+00:4.7835676381336167e-01:2.9576213770956739e+00:4.4317435804267974e-01:3.2366267325709703e+00:2.6182763610255694e-01:3.8618660022700211e+00 + CVs 20 + -1.0627585933041936e-01 3.7426853258332415e-01 -3.7634353888026534e-01 + -2.5620866647778290e-01 7.5771661361297649e-01 -7.5970519335660769e-01 + -4.2878043558428780e-01 1.1326300859580076e+00 -1.1694251662611892e+00 + -6.2084928559542596e-01 1.4908781216121592e+00 -1.6090036112118906e+00 + -8.4839744606983791e-01 1.8287089999729533e+00 -2.0666123213749854e+00 + -1.1449293125095676e+00 2.1341197628009558e+00 -2.5172466350947946e+00 + -1.5423979070630294e+00 2.3613432052942294e+00 -2.9276275734137056e+00 + -2.0436840821744893e+00 2.4159890687644090e+00 -3.2569480371023727e+00 + -2.5678236176619302e+00 2.2250814309694671e+00 -3.4594753795103745e+00 + -2.9968163413940871e+00 1.8576914993944702e+00 -3.5514955340098622e+00 + -3.3122342354950858e+00 1.4314136319899098e+00 -3.6135428351212009e+00 + -3.5567243045111372e+00 1.0329812261917410e+00 -3.7228182445162243e+00 + -3.7874719484730810e+00 7.3147629650177337e-01 -3.9107636390452569e+00 + -4.0330228023561903e+00 5.9300668979081417e-01 -4.1653144648032097e+00 + -4.2458047156917127e+00 6.8714207313966491e-01 -4.4365372935093434e+00 + -4.2830300532651240e+00 1.0121078180842211e+00 -4.6297151742951757e+00 + -3.9634825328549939e+00 1.3666916078954650e+00 -4.6487222563250947e+00 + -3.5416582793600528e+00 1.4581290792942150e+00 -4.6343845752119419e+00 + -3.5187221235938506e+00 1.7651509246207835e+00 -4.8500257288729971e+00 + id 13124 + loc 3.1221926212310791e-01 8.1723439693450928e-01 396 + blend 0.0000000000000000e+00 + interp 4.4990597426330087e-01:3.4310463601341901e-01:4.9233524181768629e-02:3.3281368302591574e-01:9.4540573985918519e-01:3.7033093699651909e-01:1.5805413125275631e+00:4.0277925389821712e-01:1.9998031965923251e+00:4.4990147520355828e-01:2.3015641966281248e+00:4.2497636336104255e-01:2.9686749072700458e+00:3.5967665571020269e-01:3.5599960953425094e+00 + CVs 20 + 9.3363542103027319e-01 2.5513190208452119e-01 -2.7681148264165856e-01 + 1.6132925584995239e+00 3.4708840824092491e-01 -4.9535177889817683e-01 + 2.2312398236227144e+00 3.8131421199658966e-01 -6.8633001790081338e-01 + 2.8686574600987824e+00 3.9836223450629765e-01 -8.6269301028618284e-01 + 3.5022695491610296e+00 3.8708754037729942e-01 -1.0238686822509242e+00 + 4.1095771233161331e+00 3.4127022947615948e-01 -1.1763974075948607e+00 + 4.6732843294180437e+00 2.5902143526153909e-01 -1.3293822053803606e+00 + 5.1839099248947873e+00 1.4072162777986752e-01 -1.4887675739330348e+00 + 5.6404692376279950e+00 -1.1078824758085748e-02 -1.6570487360157307e+00 + 6.0476171585694241e+00 -1.9162152992977521e-01 -1.8341772569245178e+00 + 6.4110055548012417e+00 -3.9421243149375673e-01 -2.0171519725564977e+00 + 6.7352936851946401e+00 -6.1201077992662833e-01 -2.2030530313760011e+00 + 7.0250210895955476e+00 -8.3900919243599792e-01 -2.3900472253502096e+00 + 7.2971407968712017e+00 -1.0737865092135237e+00 -2.5802033456954852e+00 + 7.5741859268786556e+00 -1.3231186956974539e+00 -2.7807389930686721e+00 + 7.8639363439052685e+00 -1.6020364849396218e+00 -3.0056470629266259e+00 + 8.1619879210881479e+00 -1.9304105755992742e+00 -3.2654558594997405e+00 + 8.4500012851450350e+00 -2.3200078766840360e+00 -3.5433148374176353e+00 + 8.5962717877261952e+00 -2.6451497933820969e+00 -3.7423991953826512e+00 + id 13125 + loc 6.5644276142120361e-01 7.9385781288146973e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9258400147983505e-01:4.9257907563982029e-01:3.7033291490606857e-04:3.2018518356219883e-01:3.6653361508319182e-01:3.3441926060032706e-01:1.2456852724126393e+00:3.2088768841131532e-01:2.0860123171872487e+00:3.0663706064040608e-01:3.0877755043865558e+00 + CVs 20 + -9.9731809053076201e-02 1.1760321613827494e-01 1.4722288104945586e-01 + -1.4435541770012938e-01 1.8552663797237756e-01 2.3408032314582300e-01 + -1.6301509124118713e-01 2.3020618966533263e-01 2.9241768730103890e-01 + -1.7828322778612607e-01 2.7153286967968099e-01 3.6196628015447663e-01 + -1.9106402156219368e-01 3.1152510816733225e-01 4.4405474268198647e-01 + -2.0352408535441663e-01 3.5188815058679057e-01 5.3992770903588583e-01 + -2.1930937129596501e-01 3.9362874817749488e-01 6.5088441565675825e-01 + -2.4236983395143427e-01 4.3683275082553191e-01 7.7745162020370040e-01 + -2.7567689938238321e-01 4.8052418865376778e-01 9.1878141038757466e-01 + -3.1988237878035353e-01 5.2254407223249277e-01 1.0721771515534890e+00 + -3.7278140680991301e-01 5.6066460417680319e-01 1.2337288293628230e+00 + -4.3009979518666225e-01 5.9375491737011776e-01 1.3990599565829827e+00 + -4.8754019191179543e-01 6.2255195501282357e-01 1.5640362092252813e+00 + -5.4444900312381828e-01 6.4999786484143485e-01 1.7263521508764894e+00 + -6.0576765286156764e-01 6.7977932525706786e-01 1.8859213905275345e+00 + -6.7756303751617564e-01 7.1369164834416243e-01 2.0411899433570397e+00 + -7.5980102886797007e-01 7.5287028689027846e-01 2.1856261068263625e+00 + -8.4835272449729460e-01 7.9776520030263731e-01 2.3116248803112853e+00 + -1.0028042902878411e+00 8.0508237580446962e-01 2.4719986933565443e+00 + id 13126 + loc 9.5946863293647766e-02 4.6127253770828247e-01 411 + blend 0.0000000000000000e+00 + interp 3.9293739504361375e-01:3.1406867518098441e-01:3.1699853161843050e-01:2.4773358331345766e-01:1.0765386415737868e+00:2.7672201531073948e-01:2.1472425715442487e+00:2.4765254669650696e-01:3.1898900993223700e+00:3.9293346566966331e-01:3.9504392257650300e+00 + CVs 20 + -2.3984340907785676e-01 2.9905947533862098e-01 -7.5802931935345608e-01 + -4.5534636954781582e-01 4.9169344354152206e-01 -1.2719162234648378e+00 + -6.6122171350086667e-01 6.5862714504569853e-01 -1.7534485484749944e+00 + -8.4685802046559955e-01 8.2462600341450232e-01 -2.2798514590409589e+00 + -1.0016344672515227e+00 9.6484844329393793e-01 -2.8435385260556827e+00 + -1.1352926376468329e+00 1.0546352656245199e+00 -3.4406892160898126e+00 + -1.2803630612672114e+00 1.0720901236199627e+00 -4.0687888202666151e+00 + -1.4775800169423283e+00 9.9844656787141484e-01 -4.7159433867952858e+00 + -1.7492652922975682e+00 8.2410342195864916e-01 -5.3596674055945090e+00 + -2.0948662457839604e+00 5.4293650755577350e-01 -5.9756199072004232e+00 + -2.4747414214932255e+00 1.3571592851136360e-01 -6.5207480995215787e+00 + -2.7988284201089266e+00 -4.0817299205877111e-01 -6.9357245869501742e+00 + -3.0217667620706825e+00 -1.0701981755867767e+00 -7.1900867028428319e+00 + -3.1965145347484936e+00 -1.8280686083589344e+00 -7.2881725036793616e+00 + -3.4205766068866792e+00 -2.6543066043939998e+00 -7.2587345148673608e+00 + -3.7727499535998499e+00 -3.5065269856192862e+00 -7.1550787658098773e+00 + -4.2418204638911963e+00 -4.3624797104407138e+00 -7.0378083599345906e+00 + -4.7695035739270546e+00 -5.2298176924636053e+00 -6.9178933208806868e+00 + -5.3231299319334049e+00 -6.1149336704413635e+00 -6.7804312122985451e+00 + id 13127 + loc 4.2879763245582581e-01 7.4196189641952515e-01 373 + blend 0.0000000000000000e+00 + interp 4.1011665055671120e-01:3.5906238092085224e-01:6.0210978249280189e-01:3.9249911769522211e-01:1.2513066637423478e+00:3.3270646000777543e-01:2.0037039274303874e+00:3.6922611439149472e-01:2.8396257404484171e+00:2.7805278692801483e-01:3.1816190525087644e+00:4.1011254939020564e-01:3.8333632105273705e+00 + CVs 20 + -3.5695176873815093e-01 5.6540530217887186e-01 -2.5784392462235667e-01 + -6.1971942987645412e-01 1.1192711253793082e+00 -4.9750105066883199e-01 + -7.9506148918983222e-01 1.6663869052889007e+00 -7.3963303359324173e-01 + -8.9909969814991630e-01 2.2091877801855078e+00 -1.0022310065995725e+00 + -9.6219457764323080e-01 2.7398653772587909e+00 -1.3088609926445938e+00 + -1.0276293626318680e+00 3.2408009652644347e+00 -1.6867352917760730e+00 + -1.1340263623352547e+00 3.6830334591483043e+00 -2.1440602576775634e+00 + -1.3077160229228357e+00 4.0377749730530690e+00 -2.6588817045847923e+00 + -1.5556664510759379e+00 4.2892084595083784e+00 -3.1802994267894316e+00 + -1.8610304818985117e+00 4.4416398678383002e+00 -3.6503349792509310e+00 + -2.1981075517291111e+00 4.5072039026321171e+00 -4.0452676134325607e+00 + -2.5648039528380813e+00 4.4868959416751490e+00 -4.3804129830387852e+00 + -2.9654692972796068e+00 4.3715140634991396e+00 -4.6768042570285377e+00 + -3.3812495327282681e+00 4.1501836203081917e+00 -4.9358623585018089e+00 + -3.7951546169029902e+00 3.8166679594403545e+00 -5.1609175857231229e+00 + -4.2264919074836182e+00 3.3750963732191512e+00 -5.3767353380487108e+00 + -4.7151136822706263e+00 2.8467025095065943e+00 -5.6106828185773390e+00 + -5.2704500737145938e+00 2.2160180193655363e+00 -5.8141110165010099e+00 + -5.6255814785581038e+00 1.5535974303649898e+00 -5.7827712496975643e+00 + id 13128 + loc 3.9728409051895142e-01 2.1212497726082802e-02 1068 + blend 0.0000000000000000e+00 + interp 3.4646335234134629e-01:2.5649353401462899e-01:1.8809153895310993e-01:2.2735792429582219e-01:1.2713458836831282e+00:3.4645988770782288e-01:2.3914891042970119e+00:3.3731830351742637e-01:2.9937125726544016e+00:3.2527721803655690e-01:3.4238461082263489e+00 + CVs 20 + -2.4113889218767573e-01 2.0186665662470124e-01 -1.2924543644793654e-01 + -4.6478389408664467e-01 4.0300848007207313e-01 -2.3785410282937428e-01 + -6.6799343298570502e-01 5.9843973670798178e-01 -3.4404317609476942e-01 + -8.3873005045962223e-01 7.8023734258022182e-01 -4.5158379211027933e-01 + -9.6207690171039928e-01 9.5187316862171634e-01 -5.5715283114397673e-01 + -1.0286039844137749e+00 1.1276719615667090e+00 -6.6333643829587818e-01 + -1.0526177282455838e+00 1.3377459054880474e+00 -7.7455559034032995e-01 + -1.0763004189623424e+00 1.6188001139896735e+00 -8.8624358085256438e-01 + -1.1595578191687494e+00 1.9836813482489708e+00 -9.8851482660262024e-01 + -1.3622371502797346e+00 2.3898859569710753e+00 -1.0649519293013510e+00 + -1.7013436734620870e+00 2.7481721428781443e+00 -1.0812657344607199e+00 + -2.1325061677939652e+00 2.9813200473894343e+00 -1.0028388914345165e+00 + -2.5974259678009517e+00 3.0680928341547324e+00 -8.2811998158609157e-01 + -3.0679176895150038e+00 3.0200999089957290e+00 -5.7797465597429853e-01 + -3.5606494188894406e+00 2.8345578811385472e+00 -2.5022908939317878e-01 + -4.1696790997141591e+00 2.4451170873201482e+00 1.8226254078328386e-01 + -5.0105457200174692e+00 1.7443015723261328e+00 5.6999873011244140e-01 + -5.8529156448467612e+00 9.8507358265358635e-01 5.3651569929391618e-01 + -6.0712152377217947e+00 8.5256696613576777e-01 2.7916261652132274e-01 + id 13129 + loc 7.7946908771991730e-02 5.5808448791503906e-01 395 + blend 0.0000000000000000e+00 + interp 5.1569317378146906e-01:5.1568801684973131e-01:3.0853136308143725e-01:3.5287181911082732e-01:9.4530674106757839e-01:3.5100599830421303e-01:1.4915069663777225e+00:2.8682270620288097e-01:2.1759364757554907e+00:2.9698179528401175e-01:3.0089756918539692e+00:3.0837118847725620e-01:3.7494475654330102e+00 + CVs 20 + 3.4562286045003332e-01 1.8756842996404929e-01 -2.0253079110565619e-01 + 6.5396748943844274e-01 3.3496111451477351e-01 -4.0760595498186480e-01 + 9.5905481077702492e-01 4.7074280547052516e-01 -6.2014393385945743e-01 + 1.2777414672375256e+00 6.0800528382262908e-01 -8.4086143054387419e-01 + 1.6090621062597923e+00 7.4362628752691595e-01 -1.0655364810072454e+00 + 1.9526388557344128e+00 8.7481819806283967e-01 -1.2929835714378410e+00 + 2.3106827412121702e+00 9.9814885336422265e-01 -1.5247639233789192e+00 + 2.6893726379440643e+00 1.1048524248742375e+00 -1.7630689520725451e+00 + 3.0919343297971911e+00 1.1781908139596458e+00 -2.0096642819887460e+00 + 3.5093146354788800e+00 1.1959926300148740e+00 -2.2687103144974232e+00 + 3.9220535517972701e+00 1.1379404461084652e+00 -2.5457914035358424e+00 + 4.3145117070601593e+00 9.9678233759814283e-01 -2.8346416562770043e+00 + 4.6788411862362738e+00 7.7956922646231464e-01 -3.1193902274996250e+00 + 5.0092966175318647e+00 5.0212679191935905e-01 -3.3846931202535124e+00 + 5.3027797537130921e+00 1.7981493110577951e-01 -3.6203536016487723e+00 + 5.5616576673267577e+00 -1.8239209289869418e-01 -3.8185212979041827e+00 + 5.7883834047530689e+00 -5.8149953213861982e-01 -3.9687489851893001e+00 + 5.9834748709424161e+00 -9.8890790320516864e-01 -4.0599714229670258e+00 + 6.1662229233728869e+00 -1.2524638264483889e+00 -4.0786665114373992e+00 + id 13130 + loc 5.7992017269134521e-01 1.5603269636631012e-01 402 + blend 0.0000000000000000e+00 + interp 4.1201174914071947e-01:3.7476312903217357e-01:1.0153145132065589e-01:3.1939769322907108e-01:9.9376325964536871e-01:4.1200762902322807e-01:1.5010686084575466e+00:2.8251716793011222e-01:1.9905018730845740e+00:4.0308855320141979e-01:2.8164421966138331e+00:3.4124455248432883e-01:3.2810714042526445e+00 + CVs 20 + 1.2433598952524313e-01 2.7196038044470577e-01 1.7991126271936980e-01 + 2.2374902731246449e-01 5.4335015883158011e-01 3.7381586351675661e-01 + 3.0400092895735142e-01 8.2154800902901226e-01 5.8573278795333483e-01 + 3.8632692279928410e-01 1.1184040344481678e+00 8.2471876002387789e-01 + 5.1177366960456239e-01 1.4221117479064083e+00 1.0832625876724602e+00 + 7.1030511315022749e-01 1.6966909795063281e+00 1.3312303329458248e+00 + 9.7952372196822135e-01 1.9071091631650607e+00 1.5331962761297397e+00 + 1.3008070921170294e+00 2.0346437275673517e+00 1.6664293573457802e+00 + 1.6618672649744841e+00 2.0830196612829095e+00 1.7411484847963763e+00 + 2.0513626287740951e+00 2.0613433060962190e+00 1.7911101352195258e+00 + 2.4160276669180414e+00 1.9261346268372470e+00 1.8552118632175123e+00 + 2.6470091693752980e+00 1.5997029340655811e+00 1.9459519042700970e+00 + 2.7326283278294849e+00 1.0775237425071138e+00 2.0534673097601952e+00 + 2.8070279587797975e+00 4.1054877042894999e-01 2.1843757471252156e+00 + 3.0257367389272387e+00 -3.0373436219144428e-01 2.3379816297677021e+00 + 3.4410207169102534e+00 -9.3175366421907102e-01 2.4947153217595481e+00 + 3.9837247384230587e+00 -1.4076364463977595e+00 2.6620615037527777e+00 + 4.5470042678785827e+00 -1.7519704599553869e+00 2.8798019962644812e+00 + 4.9989635644428798e+00 -1.9874067865782123e+00 3.1562527912463931e+00 + id 13131 + loc 9.1538375616073608e-01 1.1468474566936493e-01 400 + blend 0.0000000000000000e+00 + interp 5.6689842936504453e-01:5.6689276038075087e-01:7.7989393301043397e-01:5.1089757382534651e-01:1.0004541880528390e+00:2.4644738777756142e-01:1.7936248617134871e+00:3.6095374884941694e-01:2.1143507048554695e+00:4.7609115756603926e-01:2.8148705885337639e+00:4.2297279190950110e-01:3.1013428490335793e+00:2.5677006664067265e-01:3.9760496290040157e+00 + CVs 20 + 1.4977332470496560e-01 8.3170256574917889e-02 1.7798311543485099e-01 + 3.0495964968152955e-01 1.7097806431717452e-01 3.7844000251206944e-01 + 4.5859999953063824e-01 2.4916941610332388e-01 5.8678146514070351e-01 + 6.0684399984925363e-01 3.1051655555572621e-01 7.9460619234029894e-01 + 7.4838098440033274e-01 3.5461347848564440e-01 1.0003338725906352e+00 + 8.8200627749369154e-01 3.8187069346723668e-01 1.2018493656503124e+00 + 1.0045246380508159e+00 3.9385911396027895e-01 1.3927662489825057e+00 + 1.1103753826708833e+00 3.9307913262998273e-01 1.5609076655101872e+00 + 1.1920095562000377e+00 3.8394144109846939e-01 1.6968664263023285e+00 + 1.2406084119780401e+00 3.7491125638790090e-01 1.7972407080754049e+00 + 1.2538219843712586e+00 3.7818712906744856e-01 1.8633319267117319e+00 + 1.2459664582792567e+00 3.9742180729566301e-01 1.9106316037488631e+00 + 1.2395085256334388e+00 4.1814435025092123e-01 1.9618063670244195e+00 + 1.2469340096293473e+00 4.2498704508024610e-01 2.0278420055457884e+00 + 1.2716326497630988e+00 4.1647075881743212e-01 2.1098561444935653e+00 + 1.3197639478162786e+00 4.0284078436145587e-01 2.2027495320384416e+00 + 1.4003794663585680e+00 3.9092947682737678e-01 2.3036052089417476e+00 + 1.5148898557144024e+00 3.5787176638891616e-01 2.4164421507882810e+00 + 1.6451528612234148e+00 1.6527285982863171e-01 2.5279228591062566e+00 + id 13132 + loc 8.2092940807342529e-01 4.7331866621971130e-01 409 + blend 0.0000000000000000e+00 + interp 3.7483115805762440e-01:3.0452743084676470e-01:4.9656757868320078e-01:3.2003373285099035e-01:1.0847932770709150e+00:3.2739653748550274e-01:1.9104756101808094e+00:3.5411908453944541e-01:2.3496401917628473e+00:3.3120179059179339e-01:3.0002338896121499e+00:3.7482740974604384e-01:3.8090061879618000e+00 + CVs 20 + -3.4653766276065651e-01 1.4252433752459459e-01 1.7183875641069343e-01 + -6.6939998600885775e-01 2.3976742614926244e-01 3.4981408134430819e-01 + -9.9693490502952609e-01 3.0834797218523063e-01 5.2671061705846745e-01 + -1.3403319819762192e+00 3.5344055066931290e-01 6.9955678286158240e-01 + -1.6946916723509027e+00 3.7237830038856767e-01 8.6658508984818816e-01 + -2.0540752204409358e+00 3.6417116560192009e-01 1.0259576606413954e+00 + -2.4116659042172399e+00 3.2756337364570998e-01 1.1746684125977214e+00 + -2.7577110414612180e+00 2.5754492460815914e-01 1.3076826307058700e+00 + -3.0790021277234887e+00 1.4712715449378799e-01 1.4206511318233379e+00 + -3.3571955212716471e+00 -7.6254250896907738e-03 1.5132021648302070e+00 + -3.5717174981415600e+00 -2.0373190312438849e-01 1.5868599677320541e+00 + -3.7178543024379183e+00 -4.3160296197430514e-01 1.6415594432065990e+00 + -3.8127657918085438e+00 -6.8193531240769811e-01 1.6778276623677690e+00 + -3.8744787977564465e+00 -9.4794533648039647e-01 1.6989524996020828e+00 + -3.9106999038435371e+00 -1.2232043412014428e+00 1.7074178550644241e+00 + -3.9222876645015576e+00 -1.4985063928756592e+00 1.6999146899153375e+00 + -3.9118587711975867e+00 -1.7640311515492209e+00 1.6683886354450375e+00 + -3.8942398286485922e+00 -2.0209657083589421e+00 1.6168108160315280e+00 + -3.9991806825077916e+00 -2.3935502820168830e+00 1.6256705078630072e+00 + id 13133 + loc 7.2747749090194702e-01 1.1592964082956314e-01 374 + blend 0.0000000000000000e+00 + interp 4.4922523086102883e-01:3.9323575148926071e-01:7.1373580816833315e-02:4.4922073860872025e-01:6.9749600513824095e-01:2.9449497796894247e-01:1.3245213506388915e+00:3.3801008109616715e-01:2.1744306130845716e+00:3.9181769893692264e-01:2.8708539047407653e+00:4.1635743217260712e-01:3.1944984810689077e+00:2.6760438883579918e-01:3.7882530336564391e+00 + CVs 20 + 8.4964677521300236e-01 4.2337460803246973e-01 3.6504888679270348e-01 + 1.4899317823925136e+00 7.0419730790300761e-01 5.5935767377248891e-01 + 2.1181490962567828e+00 9.1197553321720515e-01 6.5124246069789027e-01 + 2.7984324282673021e+00 1.1035134336391788e+00 6.8571577977313825e-01 + 3.5198257118083927e+00 1.3016559060680406e+00 6.9964253972634505e-01 + 4.2872215262902813e+00 1.4909580222914247e+00 7.3881895769524863e-01 + 5.1068996066234860e+00 1.6104318217878668e+00 8.4793306563536319e-01 + 5.9469364328964369e+00 1.5865274433807646e+00 1.0591818849595438e+00 + 6.7379558699270108e+00 1.3734219156081415e+00 1.3741857323819613e+00 + 7.4066389802633754e+00 9.6839525540294624e-01 1.7597693186646721e+00 + 7.9041117023256007e+00 4.0599376069385595e-01 2.1604966437796067e+00 + 8.2163424368560420e+00 -2.5407223743625718e-01 2.5206189845317848e+00 + 8.3635550221170973e+00 -9.4165402925002217e-01 2.8073181064147184e+00 + 8.3956869757101042e+00 -1.6053461009833065e+00 3.0267128794707823e+00 + 8.3637220566626063e+00 -2.2106518147827572e+00 3.2016772954071802e+00 + 8.2970069222162763e+00 -2.7424058609691744e+00 3.3336398722100151e+00 + 8.2260090372877546e+00 -3.2082566184516850e+00 3.4140663759905561e+00 + 8.1767025432709666e+00 -3.6108130198505872e+00 3.4444253841550800e+00 + 8.1960312897805281e+00 -3.9084932027966710e+00 3.3833271022139018e+00 + id 13134 + loc 1.3854059576988220e-01 2.9304137825965881e-01 393 + blend 0.0000000000000000e+00 + interp 4.4119616471259049e-01:3.9724414355062182e-01:5.8781779920125421e-01:3.6583444723410019e-01:1.1954699525707562e+00:2.4133538977944191e-01:1.9253241092881166e+00:2.7877180095563220e-01:2.4556219263855317e+00:3.8154778830547775e-01:2.9999949250199709e+00:4.4119175275094336e-01:3.3951355341218861e+00:3.3165477893750006e-01:3.9980764921876455e+00 + CVs 20 + -1.9008334242371897e-01 2.4592302709472630e-01 3.1305103846217297e-01 + -3.4945223260044689e-01 4.9594278045083418e-01 6.0377158314341139e-01 + -4.9159126007997489e-01 7.5148983144325521e-01 8.7170960141827414e-01 + -6.2810824898637863e-01 1.0126587265651303e+00 1.1191354044236541e+00 + -7.7123454776006162e-01 1.2786491086052205e+00 1.3510034229325503e+00 + -9.3529905905345445e-01 1.5469307442596694e+00 1.5757431749868496e+00 + -1.1298710897658177e+00 1.8129355989704774e+00 1.8083289760545207e+00 + -1.3682122182663241e+00 2.0653028750387623e+00 2.0715885198380888e+00 + -1.6670798622429519e+00 2.2795119327465923e+00 2.3874061538630933e+00 + -2.0312891519418410e+00 2.4257633423556944e+00 2.7661207443107179e+00 + -2.4443171605392178e+00 2.4862927809801061e+00 3.2044729774896443e+00 + -2.8752166092658182e+00 2.4691698629494896e+00 3.6890696803365133e+00 + -3.2968008531927140e+00 2.4058234953275459e+00 4.2059102989166854e+00 + -3.6840856627388261e+00 2.3215252750071453e+00 4.7440758232778713e+00 + -3.9902996832925495e+00 2.2327869740107689e+00 5.2794596032568455e+00 + -4.1636171946938489e+00 2.1909799554024110e+00 5.7444703136517212e+00 + -4.2227108384094203e+00 2.2424651077229081e+00 6.0643491790993114e+00 + -4.2261639429081406e+00 2.3300949327279090e+00 6.3006889711893894e+00 + -4.1230205883904354e+00 2.3404572988666597e+00 6.7368375582481335e+00 + id 13135 + loc 1.1825443059206009e-01 2.9098281264305115e-01 1068 + blend 0.0000000000000000e+00 + interp 3.5273487677264093e-01:3.2774086458701951e-01:1.5758558949906387e-01:3.2391161057718354e-01:8.9748944605577707e-01:3.3613885588997255e-01:1.8260617765626643e+00:3.1796177176272650e-01:2.1221727835909521e+00:2.9784067178685841e-01:2.8763860528553091e+00:3.5273134942387324e-01:3.8485284060400375e+00 + CVs 20 + -2.2166825524336048e-01 3.0423480262676184e-01 -2.5066185141426089e-01 + -4.1825076117143833e-01 6.0097154694750632e-01 -5.1402601175312035e-01 + -6.2158455025489112e-01 8.9758162797321972e-01 -7.8830152602264336e-01 + -8.5243830272033250e-01 1.1970459450805973e+00 -1.0672153533526825e+00 + -1.1260689342212378e+00 1.4969251326647193e+00 -1.3406725472822409e+00 + -1.4565881988134139e+00 1.7885360610473535e+00 -1.5956357935193515e+00 + -1.8521844117385655e+00 2.0565407265195805e+00 -1.8173172568197855e+00 + -2.3119296906765929e+00 2.2808296226526470e+00 -1.9918233249980528e+00 + -2.8248686110970826e+00 2.4397964904254317e+00 -2.1081539321684519e+00 + -3.3691102665428705e+00 2.5141253721965651e+00 -2.1606829812244350e+00 + -3.9126159644716338e+00 2.4921366675785848e+00 -2.1530374442421802e+00 + -4.4205984316572451e+00 2.3777291330456989e+00 -2.0998356436502581e+00 + -4.8715428128028080e+00 2.1881907872270072e+00 -2.0210455843855737e+00 + -5.2611260009851302e+00 1.9407294479888766e+00 -1.9341455922192519e+00 + -5.5920650214895291e+00 1.6461589212603611e+00 -1.8526785360370404e+00 + -5.8668401614040846e+00 1.3076293551271032e+00 -1.7866429788416167e+00 + -6.0812788852191808e+00 9.3065502754331397e-01 -1.7415345717850834e+00 + -6.2298221540967873e+00 5.4448284130001379e-01 -1.7152423232169665e+00 + -6.3221820998978195e+00 2.8121974243943881e-01 -1.6767715412145983e+00 + id 13136 + loc 6.1922818422317505e-01 3.2988169789314270e-01 382 + blend 0.0000000000000000e+00 + interp 4.7910045111622113e-01:4.3786121496121699e-01:4.6341237141872349e-01:4.7552358457234029e-01:1.0000717477191321e+00:3.2958463423905160e-01:1.5798357883934524e+00:4.7909566011171001e-01:2.0000462535108512e+00:3.6962082613792413e-01:2.6499684179758023e+00:3.5261521685339459e-01:3.0623217164208443e+00:3.1133855771987518e-01:3.8887128866951528e+00 + CVs 20 + -9.7032967024947114e-01 2.3850463865117755e-01 4.8983516390290543e-01 + -1.6844078583245614e+00 2.9025776790093644e-01 8.6878047762316390e-01 + -2.3315117369209490e+00 2.4653096815789183e-01 1.2040624181467827e+00 + -2.9916877235409931e+00 1.3187343203693969e-01 1.5312727583352119e+00 + -3.6436407536795627e+00 -4.9235260490504640e-02 1.8458902051921948e+00 + -4.2592090415742954e+00 -2.8824576404801472e-01 2.1429569338539345e+00 + -4.8050723411553049e+00 -5.7239246320449189e-01 2.4143774081856644e+00 + -5.2551508803503904e+00 -8.8258015809878265e-01 2.6577730043745826e+00 + -5.6090405152977709e+00 -1.1967080163156383e+00 2.8807419898314457e+00 + -5.8937851002557062e+00 -1.4984709967672010e+00 3.0813687788423398e+00 + -6.1315974703311404e+00 -1.7877565820857926e+00 3.2466602635222856e+00 + -6.3453598016189199e+00 -2.0536758357541096e+00 3.3841654089871946e+00 + -6.5686501903815842e+00 -2.3113377617639910e+00 3.5173823683605203e+00 + -6.8242445021768070e+00 -2.6170859796741865e+00 3.6651748398594566e+00 + -7.1046566242244689e+00 -3.0044067257189635e+00 3.8353634299967494e+00 + -7.3922515904122594e+00 -3.4350145050373246e+00 4.0279592851240880e+00 + -7.6733360345165229e+00 -3.8416111410311458e+00 4.2350057875808265e+00 + -7.9345320139098678e+00 -4.1851372181969584e+00 4.4504878951761597e+00 + -8.1679727066276548e+00 -4.4863061429013333e+00 4.7273354994419146e+00 + id 13137 + loc 6.8884050846099854e-01 8.5299289226531982e-01 1078 + blend 0.0000000000000000e+00 + interp 4.9855655580864316e-01:2.9084900655730295e-01:2.0199147465103073e-01:3.1787332795452788e-01:1.0486784064270840e+00:4.5397790984915443e-01:1.9108680218615430e+00:3.2007147208860626e-01:2.4451734197601027e+00:4.9855157024308511e-01:2.9991423813496194e+00:3.2092826284315534e-01:3.7522721792973006e+00 + CVs 20 + 1.4092221595032983e-01 2.7997840396908547e-01 -8.0328554142838252e-02 + 3.0873820003856156e-01 5.5645667396727461e-01 -1.7805329012391305e-01 + 4.9399134429344849e-01 8.2559838588689227e-01 -2.9855874870917043e-01 + 6.8964898658961116e-01 1.0827142543794368e+00 -4.4841515658330405e-01 + 8.9036023985378032e-01 1.3204790334982000e+00 -6.3555619807174035e-01 + 1.0864888454723856e+00 1.5294710025551290e+00 -8.6697509842348286e-01 + 1.2637999612814981e+00 1.6979053492147824e+00 -1.1476198246263341e+00 + 1.4038388143990448e+00 1.8112431774849247e+00 -1.4775329540644133e+00 + 1.4867077670354303e+00 1.8530512416593861e+00 -1.8464779792123587e+00 + 1.5000369526212980e+00 1.8128575287940225e+00 -2.2307140825034697e+00 + 1.4477150541721200e+00 1.6938854763614068e+00 -2.6002175446380580e+00 + 1.3576634117361348e+00 1.5147030805905994e+00 -2.9301095905868579e+00 + 1.2719646809932237e+00 1.3053836768141829e+00 -3.2171096615870773e+00 + 1.2098740896403333e+00 1.0884606902548288e+00 -3.4752772310176336e+00 + 1.1646830454828425e+00 8.7172826024763395e-01 -3.7162093974549180e+00 + 1.1353939803333029e+00 6.6493408062435555e-01 -3.9442569835347454e+00 + 1.1464365451523733e+00 5.1449800396884293e-01 -4.1675712216063925e+00 + 1.2249028573610401e+00 4.9326414719952072e-01 -4.3810450723796777e+00 + 1.2180986220511929e+00 3.8809852261872324e-01 -4.6205314425504325e+00 + id 13138 + loc 6.8682938814163208e-01 2.2269469499588013e-01 373 + blend 0.0000000000000000e+00 + interp 3.8406721764466312e-01:3.0604692937625561e-01:4.3029923470716547e-04:2.4924387522408653e-01:7.6715588872055984e-01:2.9638499796285561e-01:1.0878313148998111e+00:2.6980415008348230e-01:1.9893829050716958e+00:2.6760479361175099e-01:2.4476501905306618e+00:3.8406337697248671e-01:2.9919835529547250e+00:2.7061128262880507e-01:3.4639073079336868e+00 + CVs 20 + 3.2824762514934003e-01 4.1664816924060105e-01 8.8950057667660926e-03 + 6.7658950609209723e-01 7.7490158266372389e-01 2.4437755726932769e-02 + 1.0272291383072287e+00 1.0414916030697439e+00 3.7315504476289174e-02 + 1.3344507561814005e+00 1.2422503994009142e+00 2.0124270053588522e-02 + 1.5930773324648917e+00 1.4195401357230184e+00 -4.8894405100336102e-02 + 1.8649429432275506e+00 1.6263874986978164e+00 -1.4377047388782849e-01 + 2.1698000314671289e+00 1.8998981081082755e+00 -2.2442274215981628e-01 + 2.4778585408623424e+00 2.2547787886325206e+00 -2.5872015631286194e-01 + 2.7488101852404165e+00 2.6841539362795541e+00 -2.3085757893809611e-01 + 2.9632940746863090e+00 3.1658767416297762e+00 -1.2909992288634475e-01 + 3.1280149118508804e+00 3.6776781984821829e+00 7.4474602926040245e-02 + 3.2548249601967676e+00 4.1879830262678333e+00 4.3627215935589070e-01 + 3.3307680693619779e+00 4.6153481573832060e+00 1.0013089138783886e+00 + 3.3176330651706145e+00 4.8419504764016574e+00 1.7381376463406812e+00 + 3.1853132980666947e+00 4.7752762474942454e+00 2.5452650100562280e+00 + 2.9553546256682726e+00 4.3813154670933150e+00 3.2728371454879204e+00 + 2.7672043011670429e+00 3.7231892585955970e+00 3.7896375193144083e+00 + 2.7173273765775363e+00 3.0735672758803818e+00 4.0126698403268888e+00 + 2.6821000025772568e+00 2.6955422407261920e+00 3.9682215424452556e+00 + id 13139 + loc 2.9884633421897888e-01 8.1135444343090057e-02 415 + blend 0.0000000000000000e+00 + interp 4.3850960260366006e-01:3.5287373387282039e-01:1.6774017068054070e-01:2.5630324067669930e-01:8.7498007529922472e-01:3.1404462923225535e-01:1.2597600986909294e+00:3.7843618300658033e-01:1.8833832478896144e+00:3.2842150614972249e-01:2.6149220878526251e+00:4.3850521750763405e-01:3.3852760142299392e+00 + CVs 20 + -6.0491360654975131e-02 8.1482071460884722e-02 -6.8380888881093366e-02 + -1.2296562435932840e-01 1.6000204181305872e-01 -1.1436278686544077e-01 + -1.8908377042783017e-01 2.5145957257397172e-01 -1.5267029005739069e-01 + -2.5713197081121186e-01 3.5657444824849038e-01 -2.0474900399726764e-01 + -3.2151209142931109e-01 4.7693048346134903e-01 -2.7286670086722692e-01 + -3.7440900170747893e-01 6.1396132523582581e-01 -3.5875293857700064e-01 + -4.0567478522734579e-01 7.6773485119325580e-01 -4.6335361606237613e-01 + -4.0419474599732036e-01 9.3530469336299182e-01 -5.8439399410785997e-01 + -3.6156547108175574e-01 1.1106126377452092e+00 -7.1468350780287060e-01 + -2.7503469297110517e-01 1.2865940559519782e+00 -8.4379133441486320e-01 + -1.4475867570923662e-01 1.4563793537501721e+00 -9.6561621497517769e-01 + 2.6918242381399948e-02 1.6104806198908210e+00 -1.0830968275888806e+00 + 2.3132987338463862e-01 1.7392413416295622e+00 -1.2028591203669678e+00 + 4.5447253002794019e-01 1.8398755132519835e+00 -1.3276706456509808e+00 + 6.8242559390624136e-01 1.9176050956576396e+00 -1.4559937533436871e+00 + 9.0409659539067688e-01 1.9765926396273699e+00 -1.5922276940315225e+00 + 1.1127938854062405e+00 2.0161163108356952e+00 -1.7445000849817602e+00 + 1.3114112660838684e+00 2.0331627101520331e+00 -1.9126393403133479e+00 + 1.4789210081424078e+00 2.0994776919979974e+00 -2.0345273373456525e+00 + id 13140 + loc 5.5385631322860718e-01 6.3064962625503540e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9822012990085196e-01:4.9821514769955300e-01:2.1490268125395307e-01:3.2424587895980178e-01:9.3584973558214701e-01:3.1925111308741966e-01:1.7136433628425891e+00:3.2595542061124733e-01:2.3083670260351603e+00:3.6726157145488897e-01:2.9915904958550121e+00:3.0114085100106691e-01:3.5725137717238100e+00:4.8706568400325084e-01:3.9947777369816260e+00 + CVs 20 + -5.1831872478857732e-02 3.3467178868609854e-01 2.7079369075731152e-01 + -7.0783715758168386e-02 5.9901448905492827e-01 4.0193643262903317e-01 + -9.0905206990889262e-02 8.4031912829455435e-01 4.9733131336841940e-01 + -1.2854841036940196e-01 1.0858024360106662e+00 6.0195801007529326e-01 + -1.8589503447760219e-01 1.3279677430001884e+00 7.0892479974974631e-01 + -2.6601414926973194e-01 1.5590032717882887e+00 8.1094394282956528e-01 + -3.7212601648620158e-01 1.7711805398879577e+00 9.0151382929581481e-01 + -5.0656431349661113e-01 1.9570182708647437e+00 9.7672064219234656e-01 + -6.7020072390191388e-01 2.1088718387256189e+00 1.0339368075193760e+00 + -8.6211384823428927e-01 2.2175789991541826e+00 1.0683432062212779e+00 + -1.0766996891862795e+00 2.2714629540904845e+00 1.0711045799629748e+00 + -1.2970907565806105e+00 2.2619304676083871e+00 1.0324312688507520e+00 + -1.4977736133656461e+00 2.1951006097350931e+00 9.5126694141473900e-01 + -1.6629037174695520e+00 2.0946723461855359e+00 8.4050221151645177e-01 + -1.8001736388160341e+00 1.9854957362712451e+00 7.1814710985412777e-01 + -1.9264031218341455e+00 1.8752794515872302e+00 5.9194846425359016e-01 + -2.0461083730455516e+00 1.7620260113989827e+00 4.5817733030137642e-01 + -2.1494865086582116e+00 1.6528592203820858e+00 3.0989249439243716e-01 + -2.2906025998467139e+00 1.5415565626089007e+00 1.8148323316813342e-01 + id 13141 + loc 5.1364910602569580e-01 9.1754728555679321e-01 401 + blend 0.0000000000000000e+00 + interp 4.0442166882268848e-01:3.8864900146074760e-01:1.3327278627630479e-01:3.8503267523745016e-01:8.6288258093206061e-01:3.7146676079874008e-01:1.2674502103743892e+00:4.0441762460600028e-01:1.7777580816357743e+00:3.0305971268945658e-01:2.3149394528795346e+00:3.6961207500518312e-01:3.2293199052191328e+00 + CVs 20 + 4.9100913663074758e-02 3.2905179234293086e-01 -3.5133635645389300e-01 + 1.0033267739980065e-01 6.6136341657488473e-01 -7.0255323973814887e-01 + 1.6219749262454547e-01 9.8919121968265489e-01 -1.0530302343514646e+00 + 2.3552367447843248e-01 1.2941673859913461e+00 -1.4129312289843683e+00 + 3.0003952088796315e-01 1.5759304490863462e+00 -1.8061773300732649e+00 + 3.0460506909971213e-01 1.8498904049040505e+00 -2.2550760379161452e+00 + 1.8609151165007076e-01 2.1105315166141887e+00 -2.7477283759432698e+00 + -9.4421774345958220e-02 2.3252500015558621e+00 -3.2383631876049375e+00 + -5.3236783641019603e-01 2.4579314264130638e+00 -3.6690137144914141e+00 + -1.0809916670991213e+00 2.4944172174299428e+00 -3.9947516393709535e+00 + -1.6774941618869512e+00 2.4394147179087238e+00 -4.2082291128766842e+00 + -2.2679960131045211e+00 2.2984387927620098e+00 -4.3409281594346485e+00 + -2.8287765835357561e+00 2.0754990984511696e+00 -4.4304151579650455e+00 + -3.3643024985458769e+00 1.7864118483487506e+00 -4.4765986170515628e+00 + -3.8682187707551066e+00 1.4753583170850579e+00 -4.4797347946485440e+00 + -4.3111611682469988e+00 1.2092203760930060e+00 -4.5316749536026499e+00 + -4.6586674059699611e+00 1.0468009979909301e+00 -4.7541555071046329e+00 + -4.8992751683692530e+00 9.8411295636560714e-01 -5.0858976492339956e+00 + -5.1740591359449732e+00 8.2645075179584226e-01 -5.2599871337742492e+00 + id 13142 + loc 9.0099520981311798e-02 2.1029089391231537e-01 376 + blend 0.0000000000000000e+00 + interp 4.7457875938002647e-01:4.0954407473041338e-01:5.1497834567423739e-01:3.2155999673066199e-01:9.6579274508586610e-01:2.8873172281780191e-01:1.2770993354702465e+00:3.1469062546196508e-01:1.8065151218616962e+00:4.4377284797933270e-01:2.1639040708861672e+00:3.6035815781128777e-01:2.9998793359646734e+00:4.7457401359243268e-01:3.6103405978574137e+00:3.2804143225512244e-01:3.9994061163598356e+00 + CVs 20 + 6.8902560623108000e-01 4.2579982918693587e-01 2.7634209026231521e-01 + 1.2969773993952802e+00 6.8787226535526946e-01 4.1618719999340853e-01 + 1.9141924842492568e+00 7.8822649564716518e-01 4.3290585968239581e-01 + 2.5596466455828786e+00 8.0271089167524412e-01 3.7652245486089020e-01 + 3.2034661584130921e+00 8.1869345247207126e-01 3.1688796964896138e-01 + 3.8240026041146686e+00 8.6881044395701823e-01 3.2043617055200757e-01 + 4.4186246652791166e+00 9.4364119075709429e-01 4.2526086237925775e-01 + 4.9866693675418530e+00 1.0319176171559872e+00 6.4553894862652939e-01 + 5.5197167976983339e+00 1.1222191281477103e+00 9.8057963304211293e-01 + 6.0192646492566224e+00 1.1887878819698312e+00 1.4200774568918022e+00 + 6.4859725927718195e+00 1.1849261486681193e+00 1.9411052001383118e+00 + 6.8966126885533985e+00 1.0532552176469960e+00 2.5015136785602419e+00 + 7.2078495982584423e+00 7.5894078558087452e-01 3.0405612568886102e+00 + 7.3819608011541753e+00 3.2398180715805802e-01 3.4944818830339832e+00 + 7.4139978006016323e+00 -1.9044201249764425e-01 3.8083702307634839e+00 + 7.3794219981111278e+00 -7.2106507277781295e-01 3.9187412985495853e+00 + 7.4120631351581352e+00 -1.1595579090947177e+00 3.7772651744585790e+00 + 7.5244189458986463e+00 -1.3881286353171189e+00 3.4952380537243530e+00 + 7.5816302224889567e+00 -1.7642886568913192e+00 3.2971621208119037e+00 + id 13143 + loc 7.8470814228057861e-01 5.2875880151987076e-02 1081 + blend 0.0000000000000000e+00 + interp 6.2321582489821792e-01:2.5405931201463366e-01:6.3647176095637303e-02:4.2611622659593085e-01:9.6420358576364240e-01:6.2320959273996901e-01:1.2622297536462033e+00:4.9401923307416351e-01:3.6233131141149464e+00 + CVs 20 + 1.4822086115118696e-01 5.2786773339483839e-01 -5.0811607126302327e-01 + 1.9881769286356410e-01 9.3229370653942834e-01 -8.2394464383497534e-01 + 2.1281700889319033e-01 1.2803637769442373e+00 -1.0661957010866265e+00 + 2.1146872415016138e-01 1.6088456486843550e+00 -1.2840737924236383e+00 + 1.9352032828413601e-01 1.9144672587846687e+00 -1.4710583291116932e+00 + 1.6161950146299087e-01 2.1974593644643701e+00 -1.6206927079515636e+00 + 1.2243894667693744e-01 2.4656417077281469e+00 -1.7249057424401322e+00 + 8.6937593473898289e-02 2.7444575460106018e+00 -1.7664238077024363e+00 + 7.6429108948531499e-02 3.0580753485149108e+00 -1.6788507667807611e+00 + 1.0360032710728417e-01 3.2908766040738682e+00 -1.4149643875216193e+00 + 1.3126504936662731e-01 3.3594285505567525e+00 -1.1189485613996786e+00 + 1.3927634674015055e-01 3.3354636411214118e+00 -8.4937673994240370e-01 + 1.2675001531583507e-01 3.2582795395399602e+00 -5.9188043068106588e-01 + 9.4238192719742764e-02 3.1401152327756634e+00 -3.3521192818251677e-01 + 4.3333931551982674e-02 2.9768965743667337e+00 -6.4040622603911190e-02 + -2.2267388092080731e-02 2.7262168427989804e+00 2.5529717467232871e-01 + -1.0004661953083846e-01 2.3116570727846359e+00 6.1038740274948611e-01 + -1.9771591396243432e-01 1.7939242384268592e+00 8.5896401420212631e-01 + -3.4601472679960593e-01 1.5480849777618164e+00 8.8098080958899061e-01 + id 13144 + loc 1.4772421121597290e-01 3.9662271738052368e-02 396 + blend 0.0000000000000000e+00 + interp 5.5251798593709767e-01:4.2778376780673316e-01:4.5423840923263237e-03:3.8910286878005362e-01:4.5044248455717650e-01:5.5251246075723837e-01:9.8735016147365939e-01:4.6559400365527964e-01:1.4410607063324634e+00:4.0741869282627557e-01:1.9944943070016821e+00:3.0534332392592767e-01:2.7329979511386640e+00:2.9271505025479361e-01:3.2205190711802869e+00 + CVs 20 + -2.6854672873617436e-01 2.0834014682709517e-01 -4.7299546133633957e-01 + -5.0746013211215724e-01 3.1858579517217761e-01 -8.2095855582211963e-01 + -7.3331764699150181e-01 3.8510495508563131e-01 -1.1385499758617383e+00 + -9.4391488208397301e-01 4.3521213877577447e-01 -1.4630468430625889e+00 + -1.1271372309342318e+00 4.6549702289552874e-01 -1.7866410389042635e+00 + -1.2749458241417844e+00 4.7691169893204766e-01 -2.1001331877106626e+00 + -1.3871781192162760e+00 4.7601934571971705e-01 -2.3976528314030308e+00 + -1.4681984648224113e+00 4.6980181986217318e-01 -2.6781291205219939e+00 + -1.5195472416222706e+00 4.6394866966687032e-01 -2.9445183466406615e+00 + -1.5382389749100371e+00 4.6165984990894215e-01 -3.2047799836979554e+00 + -1.5342706360178093e+00 4.5902887390439484e-01 -3.4680397574309190e+00 + -1.5398196433642208e+00 4.3848919606977299e-01 -3.7315003798663215e+00 + -1.5803582648611942e+00 3.8091196506144898e-01 -3.9816171319219089e+00 + -1.6529454512383919e+00 2.7844798164385165e-01 -4.2134132767389172e+00 + -1.7475326558935664e+00 1.3315118477503418e-01 -4.4296959932698181e+00 + -1.8710376806262015e+00 -4.2588358185065456e-02 -4.6304354329230524e+00 + -2.0367834519896446e+00 -2.3714809834784090e-01 -4.8107220517751914e+00 + -2.2341055576354543e+00 -4.6121664550342922e-01 -4.9562787620296405e+00 + -2.3914932449764468e+00 -8.4075858388560043e-01 -4.9241956226731247e+00 + id 13145 + loc 7.0260155200958252e-01 3.2181814312934875e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9662288547387192e-01:3.3083247430590024e-01:4.1235120304794326e-01:3.4950258026096359e-01:9.9560159840106788e-01:2.7325461804489581e-01:1.8714832174278215e+00:2.6439188025711585e-01:2.4604283370556836e+00:3.9661891924501719e-01:2.9965309037167431e+00:2.5193812669773397e-01:3.9041952159445339e+00 + CVs 20 + -7.3138273325463618e-02 1.8676568390959583e-01 2.2115705795172913e-01 + -1.6138221654479309e-01 3.4725947929422069e-01 4.1830057665049392e-01 + -2.6120953557180770e-01 4.8567235685120735e-01 5.9164546766120363e-01 + -3.7333243521558951e-01 6.0550359275767696e-01 7.4351532801299880e-01 + -5.2325820855598792e-01 7.0565138387789617e-01 8.7242408742906385e-01 + -7.4168994846201275e-01 7.9039209713633973e-01 9.7038029735454978e-01 + -1.0216195157578418e+00 9.0231122292335975e-01 1.0319564467292741e+00 + -1.2979833174501327e+00 1.0925509624133647e+00 1.0538161984567542e+00 + -1.5208608759886377e+00 1.3703520863621583e+00 1.0310458015866026e+00 + -1.6827403777889913e+00 1.7556232415503081e+00 9.6396293287318713e-01 + -1.7450704229463745e+00 2.2868998744097340e+00 9.1428111678350232e-01 + -1.6363748793574235e+00 2.8667644526256635e+00 1.0162195260636455e+00 + -1.3715257277658894e+00 3.3219486807701344e+00 1.2956398369101669e+00 + -1.0015695391320263e+00 3.5843239845252102e+00 1.6774589198192194e+00 + -5.7694583639923747e-01 3.6401090451650582e+00 2.0820449594123884e+00 + -1.3201004182505849e-01 3.5070786730467205e+00 2.5054006718207313e+00 + 3.0007527264029377e-01 3.1601121186966612e+00 2.9896609084484469e+00 + 6.2234205685561084e-01 2.5597172935867105e+00 3.4552770349558122e+00 + 6.7261789732659771e-01 2.1997708062958647e+00 3.5217548256355213e+00 + id 13146 + loc 3.0858987569808960e-01 7.7198743820190430e-01 375 + blend 0.0000000000000000e+00 + interp 5.3903161601499472e-01:4.8775868813118733e-01:1.3643093130341366e-01:5.3902622569883463e-01:6.5713020103412156e-01:2.7987478775733043e-01:1.1155269688674117e+00:4.2602898404944295e-01:1.8459420170986507e+00:2.7567766043127889e-01:2.8681240415836551e+00:5.0938655113359788e-01:3.4018311349661712e+00:4.4924366524013348e-01:3.9172653208595518e+00 + CVs 20 + -4.0774667925116792e-01 3.7317395958856603e-01 -3.1569846976245430e-02 + -8.0182159414686249e-01 6.1905464544243172e-01 -1.4837024273429894e-02 + -1.2389872491061507e+00 7.0929131859215266e-01 5.0478685695709735e-02 + -1.7493309710618676e+00 6.8658526474253812e-01 1.6591053254751903e-01 + -2.3294708923585574e+00 6.4497423719406843e-01 3.1793496309368308e-01 + -2.9769482208984535e+00 6.6014771178628218e-01 4.5417891384639764e-01 + -3.6808440578614636e+00 7.6618777496857304e-01 4.9626143607358641e-01 + -4.4037776866542035e+00 9.7519083392151784e-01 3.8607332780046466e-01 + -5.0830701566610612e+00 1.2727247797327388e+00 1.0889277608698711e-01 + -5.6685889128841875e+00 1.5966680473214374e+00 -3.0425412578734312e-01 + -6.1533118246674601e+00 1.8652325254526478e+00 -8.1162222151897800e-01 + -6.5335698658373849e+00 1.9983539474334733e+00 -1.3881592867480752e+00 + -6.7914875436825133e+00 1.9335343204175022e+00 -1.9948407641830279e+00 + -6.9089729050068005e+00 1.6539874950662741e+00 -2.5704339885882135e+00 + -6.8981951114072881e+00 1.2020409352625303e+00 -2.9705409213164442e+00 + -6.9269339868911537e+00 8.0135124800296120e-01 -2.9413572608108751e+00 + -7.1199928192467308e+00 8.7552556838999473e-01 -2.4562691236770169e+00 + -7.2144079566261015e+00 1.2276778916906692e+00 -2.0152645363771042e+00 + -7.3186593544512872e+00 7.2979171555632494e-01 -1.8839758501838173e+00 + id 13147 + loc 5.4947608709335327e-01 6.4594841003417969e-01 411 + blend 0.0000000000000000e+00 + interp 3.8216603435076668e-01:2.5532867135545501e-01:2.4790734365632350e-01:3.6550382257913538e-01:1.0010738160402033e+00:2.7535732626859027e-01:1.5615136745542786e+00:2.5317252143036756e-01:2.1629877352379654e+00:3.8216221269042316e-01:2.9920128451145676e+00:3.2304103863327299e-01:3.6217495704533995e+00 + CVs 20 + 7.5160664827916435e-01 2.5757615287456537e-01 -5.2968279809604224e-02 + 1.2601222735730355e+00 4.0436020063846256e-01 -7.2511304178646291e-02 + 1.7011593459198366e+00 5.0201813080973490e-01 -7.4336278392256039e-02 + 2.1681653926960247e+00 5.8623148358313970e-01 -6.4554186762542931e-02 + 2.6689750748999135e+00 6.4277763561622037e-01 -4.6504207238911049e-02 + 3.2083346377325626e+00 6.5158377594770178e-01 -2.4181258252653770e-02 + 3.7837738119333282e+00 5.9432767401011100e-01 -4.3745002764849494e-03 + 4.3832656338411926e+00 4.5379219496093537e-01 7.4430378951209075e-03 + 4.9834879883214551e+00 2.1325579795925065e-01 8.8568117265672708e-03 + 5.5461722188764755e+00 -1.3481275962533568e-01 -7.0368748526540847e-03 + 6.0202049150905381e+00 -5.7733525238618344e-01 -5.3471414827424291e-02 + 6.3659915144799761e+00 -1.0809867232397161e+00 -1.3639157449514877e-01 + 6.5778108931114678e+00 -1.6074950783583954e+00 -2.5030662325773506e-01 + 6.6725144014145341e+00 -2.1231634742781154e+00 -3.9143538487065827e-01 + 6.6730525316857356e+00 -2.5986053316917492e+00 -5.5810139528139235e-01 + 6.6047744066414156e+00 -3.0155424651661438e+00 -7.4337264705869122e-01 + 6.4936983195485425e+00 -3.3776451892937476e+00 -9.3627216586363238e-01 + 6.3623779256797617e+00 -3.6954290367779534e+00 -1.1298614849414916e+00 + 6.2704899303926194e+00 -4.0946023813204189e+00 -1.3224113764280361e+00 + id 13148 + loc 7.6251256465911865e-01 6.0344249010086060e-01 374 + blend 0.0000000000000000e+00 + interp 5.0406394417252143e-01:3.9086014466374880e-01:7.6036546008737682e-01:5.0405890353307969e-01:1.1721311762139890e+00:4.0772417357241592e-01:1.7669855014066480e+00:4.6451930317438889e-01:2.0404146443886404e+00:4.3926546149438633e-01:2.7879019925929107e+00:3.8693770184122062e-01:3.1710904855261091e+00:3.6976991186238140e-01:3.9969631615156058e+00 + CVs 20 + -6.8813137977000616e-01 2.8340364278420443e-01 -2.0521097649901282e-01 + -1.1695963516733403e+00 4.4596632936859815e-01 -2.9723892675809066e-01 + -1.6139926098850941e+00 5.5567071768778076e-01 -3.3886149225479956e-01 + -2.0966734532170355e+00 6.5539920813737473e-01 -3.5903383930090782e-01 + -2.6221704456161703e+00 7.7380903030529635e-01 -3.7255401380789355e-01 + -3.1958358798143895e+00 9.2848203652965877e-01 -4.0687533674624965e-01 + -3.8327082993700330e+00 1.1035844694489694e+00 -4.9886876326895657e-01 + -4.5366428824117664e+00 1.2573496192440152e+00 -6.8309236342076529e-01 + -5.2834539236833082e+00 1.3432654572450118e+00 -9.7916259239342462e-01 + -6.0304417800223433e+00 1.3199741085448771e+00 -1.3769239240069153e+00 + -6.7415636063748252e+00 1.1543966965427745e+00 -1.8292284568649415e+00 + -7.3855246063127140e+00 8.2426092998059541e-01 -2.2706521940685089e+00 + -7.9067532893833494e+00 3.3617759982338136e-01 -2.6370905000086906e+00 + -8.2494807874489897e+00 -2.4825906923393459e-01 -2.8776984712513434e+00 + -8.4112585650648803e+00 -8.5812116674273264e-01 -2.9975548546928108e+00 + -8.4358539662492475e+00 -1.4522420005963852e+00 -3.0507085996240506e+00 + -8.3894553532685787e+00 -2.0147396631819103e+00 -3.0865944383880572e+00 + -8.3576661275871995e+00 -2.5811012210233359e+00 -3.1204721932571813e+00 + -8.4059043909319637e+00 -3.2191819463606093e+00 -3.1547764842774115e+00 + id 13149 + loc 5.1804572343826294e-01 4.6371132135391235e-01 409 + blend 0.0000000000000000e+00 + interp 4.8805133702393622e-01:3.1443637299208022e-01:1.6245492192574462e-01:3.7286752583539046e-01:9.9972050164123216e-01:3.3848449128891323e-01:1.6239701004128060e+00:4.8804645651056600e-01:2.0743543319741988e+00:4.7054753129786753e-01:2.7035193769477859e+00:3.2115213591102476e-01:3.0089794690478024e+00:3.7866751222095690e-01:3.6942678954402948e+00 + CVs 20 + -3.1167997163265776e-01 6.1716392809885001e-02 1.0070007254771726e-01 + -5.9638344670338062e-01 1.1364388204669107e-01 2.1723488916098732e-01 + -8.8355359615868267e-01 1.6973553976152445e-01 3.2002476260925050e-01 + -1.1793909646425194e+00 2.3460915666269394e-01 3.8928939394827217e-01 + -1.4790850628009213e+00 3.0665094033361018e-01 4.2453756655239955e-01 + -1.7788616951913525e+00 3.8511087324484794e-01 4.2620772523552075e-01 + -2.0743895664522616e+00 4.7115257206769467e-01 3.9393515307138693e-01 + -2.3644573310348576e+00 5.6449041615672602e-01 3.2693738795860794e-01 + -2.6565455617617864e+00 6.6004847681714829e-01 2.2358803515883879e-01 + -2.9633580083608377e+00 7.4820271470861832e-01 8.4693882120499858e-02 + -3.2967052311444816e+00 8.1262596849337099e-01 -8.1541448247645254e-02 + -3.6617746461612142e+00 8.2911770518502093e-01 -2.6088923436715511e-01 + -4.0515065187809567e+00 7.7708840526150613e-01 -4.3902713345838851e-01 + -4.4509523640113589e+00 6.4977259431070333e-01 -6.0511836636868854e-01 + -4.8407827275440543e+00 4.5398679017538646e-01 -7.5078918444926135e-01 + -5.1964565124851783e+00 2.1210459834457485e-01 -8.7121789630072444e-01 + -5.4992117325723004e+00 -4.9446031948188196e-02 -9.6925672399695817e-01 + -5.7440788636344369e+00 -3.2726986993134366e-01 -1.0532619073115197e+00 + -5.8832931370707140e+00 -5.7803077116667589e-01 -1.1356806747870325e+00 + id 13150 + loc 8.1789022684097290e-01 1.3296359777450562e-01 382 + blend 0.0000000000000000e+00 + interp 4.6189406085362944e-01:2.9401314497617603e-01:6.3810660115938900e-01:2.8511890395450767e-01:1.2006169981896364e+00:2.6723861121013714e-01:2.8077435896008569e+00:3.6283363959520099e-01:3.4086037799010969e+00:4.6188944191302095e-01:3.9999787009308587e+00 + CVs 20 + -7.5271531379073231e-01 5.1217697742928836e-02 5.3317390698661182e-01 + -1.2704982308952062e+00 -8.3586174161658922e-03 9.3871431372383940e-01 + -1.7661095253599539e+00 -9.1495451541313555e-02 1.3182959629956241e+00 + -2.3125329736044753e+00 -1.5209196611583109e-01 1.6907563753443979e+00 + -2.9055343767201931e+00 -1.8440952154591439e-01 2.0465203644407399e+00 + -3.5420727499845635e+00 -1.9496121833211721e-01 2.3906584819936421e+00 + -4.2169193810071084e+00 -2.1213230691083407e-01 2.7373653468863122e+00 + -4.9195247906950028e+00 -2.8350008431209783e-01 3.0952914900133335e+00 + -5.6273873521876414e+00 -4.6037406922511748e-01 3.4634031196592225e+00 + -6.2970710284496123e+00 -7.7985771453199892e-01 3.8348348948912778e+00 + -6.8681832930207625e+00 -1.2529963495628405e+00 4.1915311224090068e+00 + -7.2892152757487736e+00 -1.8578817294868872e+00 4.5033548301160575e+00 + -7.5517646036397892e+00 -2.5349120164308521e+00 4.7550128461481496e+00 + -7.6900827281831479e+00 -3.2031650596638510e+00 4.9853767984316004e+00 + -7.7653762756363598e+00 -3.7970487787629814e+00 5.2473680541074543e+00 + -7.8066846796607523e+00 -4.2886310398287710e+00 5.5688584144071429e+00 + -7.8018541352086199e+00 -4.6663609738518694e+00 5.9501664469698969e+00 + -7.7382263792103991e+00 -4.9502558266803405e+00 6.3525412231253542e+00 + -7.6484692518518962e+00 -5.2885001343740186e+00 6.7107259574337350e+00 + id 13151 + loc 9.1297313570976257e-02 2.9472336173057556e-01 403 + blend 0.0000000000000000e+00 + interp 5.5778462720646549e-01:4.1265721837350461e-01:4.5491692244494786e-03:4.5384132887028472e-01:4.5518946274870387e-01:3.3801825814279712e-01:9.7642347694938980e-01:5.5777904936019340e-01:1.2485317196835730e+00:5.3989667338044889e-01:1.9211019559407614e+00:3.7582315770010205e-01:2.2719099705060648e+00:3.3410327992534372e-01:3.0000295783303068e+00:3.9583292981426776e-01:3.6534912422481978e+00 + CVs 20 + -1.6824611871303105e-01 2.5698668808916852e-01 5.9710867853093555e-02 + -3.2472587890039872e-01 5.1279424197374635e-01 1.2484071217726689e-01 + -4.7550737829020351e-01 7.6812771089837040e-01 1.9723823050329953e-01 + -6.2396682828697925e-01 1.0220647579191418e+00 2.8071308206529827e-01 + -7.7105086523383926e-01 1.2728220309990310e+00 3.8180400561727423e-01 + -9.1607220112372523e-01 1.5183954789622829e+00 5.0964464607752979e-01 + -1.0560456994330862e+00 1.7555378992236446e+00 6.7567728667570126e-01 + -1.1855565260683607e+00 1.9775122477626359e+00 8.9114129023242039e-01 + -1.2961819345084609e+00 2.1717169012031809e+00 1.1636075883633850e+00 + -1.3761804224472272e+00 2.3215803014724719e+00 1.4925381356269134e+00 + -1.4140251127102879e+00 2.4120756379437900e+00 1.8681362361510980e+00 + -1.4037086206564449e+00 2.4325342483339210e+00 2.2729703332396762e+00 + -1.3533312212456798e+00 2.3785729243909834e+00 2.6875454492280002e+00 + -1.2834342475019660e+00 2.2494208876135633e+00 3.0998585788092061e+00 + -1.2131819407029734e+00 2.0470811047657613e+00 3.4957149954342488e+00 + -1.1621517533588008e+00 1.7997030578698650e+00 3.8418491348151065e+00 + -1.1592574569890639e+00 1.5826424838584474e+00 4.1017048391024051e+00 + -1.2151970367988212e+00 1.4408185861757752e+00 4.2888716318901530e+00 + -1.2945792261588698e+00 1.2054268881144867e+00 4.6105528345310933e+00 + id 13152 + loc 5.1228022575378418e-01 8.8058722019195557e-01 1078 + blend 0.0000000000000000e+00 + interp 3.3040475570476668e-01:3.1584649096336198e-01:4.7942127233391152e-01:3.1294368644311232e-01:1.5468378989628706e+00:3.0321293964988616e-01:2.3447764485106966e+00:3.3040145165720963e-01:3.0017331080982630e+00:2.6651860923011589e-01:3.9322805357058752e+00 + CVs 20 + 2.2536049836711436e-01 3.0297543218883904e-01 -1.1199838001666967e-01 + 4.6652797953414027e-01 5.7071057412762527e-01 -2.7055823173928728e-01 + 7.1658501622656312e-01 8.2290886117762585e-01 -4.5958900587272378e-01 + 9.6555230747785381e-01 1.0485668746879471e+00 -6.7871217983335796e-01 + 1.2030967076916037e+00 1.2363016812461907e+00 -9.3212391101590564e-01 + 1.4135902077694631e+00 1.3729917031077417e+00 -1.2211782143042051e+00 + 1.5769667336117108e+00 1.4423328422930437e+00 -1.5416933777042439e+00 + 1.6703736487679934e+00 1.4242029531808398e+00 -1.8790009293900549e+00 + 1.6752769463974782e+00 1.2974540920802005e+00 -2.1988041666826623e+00 + 1.5966896614254282e+00 1.0616935146875446e+00 -2.4473388744659470e+00 + 1.4728346157328145e+00 7.5219487284723285e-01 -2.5787688668172208e+00 + 1.3657878658283658e+00 4.2518215252212577e-01 -2.5840526116888825e+00 + 1.3083597704351786e+00 1.3179255739983398e-01 -2.5089836820681377e+00 + 1.2293653835742415e+00 -1.1171607214389456e-01 -2.4637978689816902e+00 + 1.0794614239765836e+00 -3.0811812891668278e-01 -2.5961542785030289e+00 + 9.4780925186502729e-01 -4.5834529645393496e-01 -2.8154904265428291e+00 + 8.8254215605810149e-01 -5.6073467005717159e-01 -3.0547719537907181e+00 + 8.8876075067166693e-01 -5.8076679669474141e-01 -3.4049871801576956e+00 + 7.3631257478791490e-01 -6.4013939211726245e-01 -3.6518623629052929e+00 + id 13153 + loc 1.3604057021439075e-02 5.5065159685909748e-03 1068 + blend 0.0000000000000000e+00 + interp 4.8455280048954208e-01:2.8466811392360225e-01:3.7674338215218772e-01:2.8811430542286154e-01:1.0421022966819844e+00:2.8663624481218980e-01:1.8920830230175385e+00:2.7483680782241504e-01:2.0853409441971378e+00:3.1019743703253766e-01:2.9869210837407492e+00:4.8454795496153719e-01:3.2954489058530068e+00:4.4465115015350959e-01:3.8897686404777865e+00 + CVs 20 + -2.1069398744599119e-01 2.8245366134846817e-01 -1.7785430227799992e-01 + -4.1782696374531825e-01 5.5482458054044836e-01 -3.6755711197665231e-01 + -6.3732432058426403e-01 8.2891544425351182e-01 -5.4539312590234945e-01 + -8.7785403572308640e-01 1.1069256477333980e+00 -6.9662330320671817e-01 + -1.1441969216133276e+00 1.3847872571185180e+00 -8.1410138799920218e-01 + -1.4403167278918592e+00 1.6545641585487849e+00 -8.9297920970322808e-01 + -1.7697887416884890e+00 1.9056351789922459e+00 -9.3217696315253329e-01 + -2.1360332364947268e+00 2.1254905703181133e+00 -9.3518069865225129e-01 + -2.5415949437120031e+00 2.2995344180378252e+00 -9.0838841079175836e-01 + -2.9856148185437976e+00 2.4109262888566660e+00 -8.5914979993269647e-01 + -3.4608687614941305e+00 2.4416701447984228e+00 -7.9738576231820624e-01 + -3.9533893036600443e+00 2.3784125359885455e+00 -7.3923677595043757e-01 + -4.4454782722792796e+00 2.2172491860847723e+00 -7.0667772807256801e-01 + -4.9162634484527654e+00 1.9614354005959482e+00 -7.2188027934332255e-01 + -5.3413439923448420e+00 1.6174504249896562e+00 -8.0059008193097658e-01 + -5.6910430655105442e+00 1.1908548920342119e+00 -9.4510306806017363e-01 + -5.9312175086255490e+00 6.9313117382048328e-01 -1.1433444487120938e+00 + -6.0518863477617515e+00 1.7086453564623305e-01 -1.3711114784014309e+00 + -6.2084131375198046e+00 -2.0970930242828079e-01 -1.5555208342222182e+00 + id 13154 + loc 6.4127284288406372e-01 2.0853421092033386e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1102967462612405e-01:3.2122424274159311e-01:7.0954369331093936e-01:2.8965860164548507e-01:1.2933631894249527e+00:3.4483501219270485e-01:2.0166770825298470e+00:4.1102556432937781e-01:2.7326876713773327e+00:2.9571312999575344e-01:3.1847057050799457e+00:3.1878494384233202e-01:3.9999998382142357e+00 + CVs 20 + -6.4741329231557690e-02 4.5607696105917050e-01 -5.1975374498207427e-01 + -1.5462835042104917e-01 8.1551055473099454e-01 -8.6976661677220202e-01 + -2.6483938842540156e-01 1.1323959572582067e+00 -1.1727009819234691e+00 + -4.1027057749325979e-01 1.4454389967545191e+00 -1.4701574644952613e+00 + -5.9948485478072411e-01 1.7515566579599313e+00 -1.7476173001122415e+00 + -8.4460027035398866e-01 2.0450442629373269e+00 -1.9865933180693669e+00 + -1.1577607788089919e+00 2.3079711208399516e+00 -2.1628841189376691e+00 + -1.5429635770091310e+00 2.5045061743731836e+00 -2.2507148954379121e+00 + -1.9815106027343432e+00 2.5836554021444842e+00 -2.2284879432326252e+00 + -2.4075435381072086e+00 2.5056501546558456e+00 -2.1011855864418250e+00 + -2.7447361747425512e+00 2.2960418297948300e+00 -1.9188929713353744e+00 + -2.9819244781844216e+00 2.0209401060262988e+00 -1.7295088648730761e+00 + -3.1490167815072119e+00 1.7197261153185066e+00 -1.5477944739758664e+00 + -3.2714275285489287e+00 1.4048322041033394e+00 -1.3781796339979699e+00 + -3.3604356485422859e+00 1.0809852481969497e+00 -1.2478242520683112e+00 + -3.4107742387886781e+00 7.6212406660194754e-01 -1.2328648665474495e+00 + -3.4145914946112002e+00 4.8815120306682336e-01 -1.3810907539736794e+00 + -3.4119125975054585e+00 2.1503992271544625e-01 -1.5637847692819804e+00 + -3.5225515757397359e+00 -2.3576917642847883e-01 -1.5464431018021614e+00 + id 13155 + loc 3.3887603878974915e-01 8.9240300655364990e-01 373 + blend 0.0000000000000000e+00 + interp 5.2439449363967672e-01:3.6587980998424219e-01:1.0492968759264354e-01:3.9516933075255745e-01:7.6023481213451416e-01:3.4387905120415901e-01:1.4245323337069833e+00:4.6505811194641539e-01:1.9548028749713235e+00:5.2073375638837904e-01:2.6188144572194290e+00:5.2438924969474032e-01:3.0015494882550411e+00:3.3105696041449723e-01:3.4504536917054951e+00 + CVs 20 + -3.9761860407062044e-01 3.9965653107690435e-01 -1.1468405322009155e-01 + -7.4066173528159263e-01 8.1040155662297797e-01 -2.3999099724230097e-01 + -1.0228857231685637e+00 1.2484658629745558e+00 -3.9940350959666082e-01 + -1.2459614355527546e+00 1.7173228980010999e+00 -6.1763357064328872e-01 + -1.4075911877734413e+00 2.1920802612782464e+00 -9.1239540259036489e-01 + -1.5213767173728807e+00 2.6363871444154099e+00 -1.2914210306013028e+00 + -1.6154464256111760e+00 3.0141781904116098e+00 -1.7496642652988181e+00 + -1.7242944067041808e+00 3.2943702660882819e+00 -2.2645757073921842e+00 + -1.8805791325989349e+00 3.4577791250794672e+00 -2.7952986038773924e+00 + -2.1061465154711461e+00 3.5139668430054414e+00 -3.2888390220349510e+00 + -2.4057536991283937e+00 3.4937588969870879e+00 -3.6999694665659852e+00 + -2.7730404742387984e+00 3.4246957239712916e+00 -4.0136148913617893e+00 + -3.1967505619628351e+00 3.3143140401176687e+00 -4.2390517207392255e+00 + -3.6580403677836344e+00 3.1597042814040788e+00 -4.3874004340542925e+00 + -4.1405678127127032e+00 2.9619078920891626e+00 -4.4721666138185876e+00 + -4.6331999836416955e+00 2.7223925445025241e+00 -4.5094825382628869e+00 + -5.1022585776860527e+00 2.4352811122142950e+00 -4.4942198158124738e+00 + -5.4720839798409795e+00 2.0836288440412885e+00 -4.3746434254559530e+00 + -5.8247171733226093e+00 1.6258358162239941e+00 -4.2026799471624310e+00 + id 13156 + loc 3.8665652275085449e-02 8.3965408802032471e-01 415 + blend 0.0000000000000000e+00 + interp 3.5018667461297842e-01:3.5018317274623229e-01:2.6073418566950890e-03:2.2350464094861386e-01:9.7382765011080752e-01:1.0879550486205367e-01:1.5524925090034354e+00:1.7143488831943982e-01:2.2500707347702980e+00:2.6531440507811804e-01:3.1465235046306450e+00 + CVs 20 + 4.5318590188481395e-01 6.7789994293105144e-02 -7.1135693538510181e-03 + 8.0471041946647259e-01 9.9863643896395432e-02 -8.4271448297102869e-02 + 1.1200264269186593e+00 1.2509773309457412e-01 -1.7331984466830397e-01 + 1.4351757100062028e+00 1.6018071986926424e-01 -2.5492889317226519e-01 + 1.7476256771195797e+00 2.0531750874581883e-01 -3.2457455110708044e-01 + 2.0544442199088397e+00 2.5806468282350742e-01 -3.7823316317857492e-01 + 2.3535825556389116e+00 3.1444006451573581e-01 -4.1235777910698324e-01 + 2.6435079851713024e+00 3.7009995565873532e-01 -4.2442770839139810e-01 + 2.9237249829868146e+00 4.2123795908579043e-01 -4.1199594301313502e-01 + 3.1952659854777008e+00 4.6347438466144975e-01 -3.7115033961436517e-01 + 3.4590936039690856e+00 4.9035715543493386e-01 -2.9769836146962891e-01 + 3.7128727871784859e+00 4.9544209539328321e-01 -1.9185514903974465e-01 + 3.9518818325019978e+00 4.7906224324334179e-01 -5.8459187351928898e-02 + 4.1719851253154232e+00 4.4745601775439647e-01 9.6610219609780668e-02 + 4.3694625693810405e+00 4.0664334082533782e-01 2.6463000971984374e-01 + 4.5405700188363012e+00 3.6237538657016288e-01 4.2959701911286796e-01 + 4.6843227170840978e+00 3.2147209761293016e-01 5.7397842580030423e-01 + 4.8050165759351158e+00 2.8840158991845599e-01 6.9542325448234710e-01 + 4.8874634087172630e+00 3.0724094360763354e-01 7.2168627034062127e-01 + id 13157 + loc 7.0612597465515137e-01 9.1078263521194458e-01 402 + blend 0.0000000000000000e+00 + interp 4.4584199019230830e-01:3.0727159478524835e-01:3.8376176246613158e-02:4.4583753177240643e-01:7.1617915202915516e-01:3.2289106920306321e-01:1.5229571904940511e+00:2.8385939547913330e-01:2.2719459186277784e+00:3.8329796124659615e-01:2.9911545223937246e+00:4.1048970180833794e-01:3.6352239391617580e+00 + CVs 20 + -5.4467702318969476e-02 8.9523010258112434e-02 -1.0238772214993529e-01 + -1.0623846365594140e-01 2.0118098429675257e-01 -2.1270117443864744e-01 + -1.5986642425673436e-01 3.2623800593225982e-01 -3.2120575922359079e-01 + -2.1764702860128787e-01 4.5503517713991692e-01 -4.1921854172183248e-01 + -2.7868487935748731e-01 5.8616348956403330e-01 -5.0702825694247045e-01 + -3.4074503081808039e-01 7.1866831725766767e-01 -5.8657674002664706e-01 + -3.9871610865204787e-01 8.5244282392570814e-01 -6.6155785303631531e-01 + -4.4483697041736264e-01 9.8733108677690318e-01 -7.3548186900727397e-01 + -4.6960194441713377e-01 1.1228652632608738e+00 -8.1043332384750277e-01 + -4.6188032545792596e-01 1.2569894639558488e+00 -8.8587893511349614e-01 + -4.1241154917654199e-01 1.3819853037571062e+00 -9.5652872143338041e-01 + -3.2185555653210640e-01 1.4857528000826012e+00 -1.0164572178252096e+00 + -1.9597409619715200e-01 1.5625154167735433e+00 -1.0708147563383481e+00 + -3.8215198276681739e-02 1.6120069739985663e+00 -1.1371776524670167e+00 + 1.3565633013893530e-01 1.6307145593489059e+00 -1.2367300884995251e+00 + 2.9531222442695731e-01 1.6106040767180461e+00 -1.3774144223656370e+00 + 4.1715481898841067e-01 1.5439703800091547e+00 -1.5436820343550939e+00 + 4.9565885906588991e-01 1.4301126700592568e+00 -1.7143427563126399e+00 + 5.4698031833546268e-01 1.2836831539650631e+00 -1.8439487254148503e+00 + id 13158 + loc 7.0644658803939819e-01 6.6027128696441650e-01 401 + blend 0.0000000000000000e+00 + interp 3.9143741392130754e-01:2.8711341551265412e-01:6.1588892587687694e-01:3.9143349954716833e-01:1.0149451312251316e+00:3.4937920408739287e-01:1.9851506602015783e+00:2.5150563816866334e-01:2.5343470196275200e+00:3.5168623006420313e-01:3.0060594926620996e+00:3.5917193226207877e-01:3.8714920651751172e+00 + CVs 20 + -1.4974682869593026e-01 3.1595009282790631e-01 -2.1815913771497711e-01 + -2.7639498388133532e-01 6.4370147304725234e-01 -4.4075188188517733e-01 + -3.9022221982902328e-01 9.7121170672868884e-01 -6.9226810113476844e-01 + -4.9481417071920752e-01 1.2771974922593565e+00 -9.8900743714503114e-01 + -5.8852729581986662e-01 1.5317210129317127e+00 -1.3329630833740229e+00 + -6.8019963025404140e-01 1.7128713940809395e+00 -1.7100165512396686e+00 + -7.9132703783187686e-01 1.8175293090397040e+00 -2.0998873855643940e+00 + -9.4105575857853785e-01 1.8501694197216942e+00 -2.4811258742136184e+00 + -1.1376276951888538e+00 1.8144913998661556e+00 -2.8323199925785199e+00 + -1.3807251978366217e+00 1.7163536921411344e+00 -3.1369888336326763e+00 + -1.6624930929171238e+00 1.5692443531342035e+00 -3.3842916179164102e+00 + -1.9734181897423422e+00 1.3907748690560782e+00 -3.5716205510917796e+00 + -2.3041981154442834e+00 1.1942380980786145e+00 -3.7109604805926555e+00 + -2.6482875069713327e+00 9.8518820371468230e-01 -3.8217588307493151e+00 + -3.0174500314892749e+00 7.5395948805683299e-01 -3.9089218341412777e+00 + -3.4424529803357462e+00 4.6690724779762394e-01 -3.9702400997277918e+00 + -3.9267443489376723e+00 1.0936749121389688e-01 -4.0576207611534532e+00 + -4.4047362235891088e+00 -2.4441365477993604e-01 -4.2577449258220668e+00 + -4.7545723676571896e+00 -4.7576422675833718e-01 -4.5251973762018167e+00 + id 13159 + loc 8.0780209973454475e-03 6.1825078725814819e-01 396 + blend 0.0000000000000000e+00 + interp 3.6668248352834620e-01:3.3078062229039490e-01:6.7021732498678732e-01:3.6227396787999355e-01:1.2973679262309754e+00:3.6667881670351093e-01:2.1700941490777765e+00:3.2389732699285817e-01:3.0953864640978357e+00:3.0666306783626335e-01:3.9903342460527589e+00 + CVs 20 + 8.2578797209797716e-01 1.9441690257273259e-01 -2.5205052690092988e-01 + 1.3843696321557513e+00 2.2767713133576442e-01 -4.2963626499931035e-01 + 1.8733535126923193e+00 2.1165540240503516e-01 -5.6405864003492034e-01 + 2.3596268485835656e+00 1.9139754937293463e-01 -6.6211568773142582e-01 + 2.8439551819580662e+00 1.7005022571826256e-01 -7.2435537995108179e-01 + 3.3320020688254122e+00 1.4835645355781357e-01 -7.5752916371521961e-01 + 3.8305746643770862e+00 1.2350496717027948e-01 -7.7419979269295824e-01 + 4.3454826765102776e+00 8.5503399965643379e-02 -7.8812030937411848e-01 + 4.8822535868112942e+00 1.3427269744099357e-02 -8.0861544036809063e-01 + 5.4393901873195487e+00 -1.2162647154125050e-01 -8.4260485245246364e-01 + 5.9957371017760144e+00 -3.4518323079374191e-01 -8.9930546039513959e-01 + 6.5171338023810943e+00 -6.6390415944095427e-01 -9.8029037368897409e-01 + 6.9823055778410534e+00 -1.0660711797338802e+00 -1.0713763135669427e+00 + 7.3894172003719998e+00 -1.5366997348239633e+00 -1.1561467143365904e+00 + 7.7411835977165140e+00 -2.0638733986882576e+00 -1.2283661652924232e+00 + 8.0322138622434682e+00 -2.6331045866617133e+00 -1.2864380812781042e+00 + 8.2548533825401300e+00 -3.2223498946750251e+00 -1.3251532343305117e+00 + 8.4117659146407746e+00 -3.8075189442309281e+00 -1.3425117959208939e+00 + 8.5496165139992328e+00 -4.2909988744839662e+00 -1.3410469448044504e+00 + id 13160 + loc 2.1825484931468964e-01 2.4719712138175964e-01 395 + blend 0.0000000000000000e+00 + interp 4.3801020766700072e-01:3.9223058826849444e-01:4.2222184371053184e-02:3.1823374718584085e-01:9.9980601517298162e-01:3.1898472347096374e-01:2.0167346482642752e+00:3.4671378095398742e-01:2.6909839616963649e+00:4.3800582756492407e-01:3.5251823740176276e+00 + CVs 20 + -2.7984447959520919e-01 1.5288636348528969e-01 -2.4220472700793902e-01 + -5.2134941494407772e-01 3.0159210379553358e-01 -4.8412838769843847e-01 + -7.4412710470695798e-01 4.5395091296939705e-01 -7.3748061789685404e-01 + -9.5351056407648416e-01 6.0991996359286360e-01 -1.0059590016050644e+00 + -1.1460215030508938e+00 7.6204890209191534e-01 -1.2858925145710334e+00 + -1.3218810481708978e+00 9.0438734056119530e-01 -1.5721470610885722e+00 + -1.4843093508108671e+00 1.0343173809326354e+00 -1.8603920407765060e+00 + -1.6362988031780270e+00 1.1509166645684183e+00 -2.1494682569749082e+00 + -1.7801604758128808e+00 1.2534753299140990e+00 -2.4441895271948963e+00 + -1.9214248926715032e+00 1.3391443270356036e+00 -2.7540879233695610e+00 + -2.0690567225028795e+00 1.4005121667347888e+00 -3.0831034984599550e+00 + -2.2290495545664628e+00 1.4300363339554529e+00 -3.4218676945819557e+00 + -2.4009018879683826e+00 1.4274695227356298e+00 -3.7606703306710578e+00 + -2.5822290878924314e+00 1.3952858483384920e+00 -4.1011392147179810e+00 + -2.7752145226625080e+00 1.3340578525664366e+00 -4.4479987804352712e+00 + -2.9904103943145071e+00 1.2430284456296401e+00 -4.8002013276535633e+00 + -3.2325595492220871e+00 1.1196484489097891e+00 -5.1472153647402212e+00 + -3.4761105451004854e+00 9.7053364134480802e-01 -5.4618807370057532e+00 + -3.6053765417654295e+00 8.6159247678739259e-01 -5.6562900104899825e+00 + id 13161 + loc 1.6165189445018768e-01 8.3017259836196899e-01 380 + blend 0.0000000000000000e+00 + interp 4.7345865356802713e-01:2.8336911115981622e-01:5.3563483944651613e-01:4.7345391898149147e-01:1.3155031780833291e+00:4.3871473869570121e-01:1.9123643006434881e+00:4.4088860987245038e-01:2.5208792661755055e+00:4.0150441448094876e-01:3.0201782347067319e+00:3.6088747322280895e-01:3.9861788073903961e+00 + CVs 20 + -3.6227185740140294e-01 2.7176240942524255e-01 -4.1235851058009698e-01 + -7.0854237807979281e-01 4.8622133943479684e-01 -7.6386887261133884e-01 + -1.0518586011155282e+00 6.7860643266627507e-01 -1.1254976537090040e+00 + -1.3900418710124267e+00 8.6563202139522022e-01 -1.5309546365558537e+00 + -1.7041608677036026e+00 1.0364019190692446e+00 -1.9801413511433474e+00 + -1.9819333797553733e+00 1.1693535307100602e+00 -2.4647273264883309e+00 + -2.2163233449978059e+00 1.2416452812076599e+00 -2.9680477117597177e+00 + -2.4010146399335692e+00 1.2393273662147650e+00 -3.4651409092639676e+00 + -2.5390561478214360e+00 1.1627496083665048e+00 -3.9289445353616346e+00 + -2.6436356350799053e+00 1.0223231960722123e+00 -4.3373742866632270e+00 + -2.7235153913227186e+00 8.3424684009142025e-01 -4.6712008939307506e+00 + -2.7805394298179680e+00 6.2260912282520176e-01 -4.9180531997543966e+00 + -2.8236883849310099e+00 4.0886188400285839e-01 -5.0897531452847131e+00 + -2.8673729123042260e+00 1.8763825839220560e-01 -5.2147878081491292e+00 + -2.9161111662730095e+00 -6.8773005640257789e-02 -5.3070562966863948e+00 + -2.9627072250754196e+00 -3.7474864208023462e-01 -5.3739724863733214e+00 + -2.9949078609066224e+00 -7.3049019050696318e-01 -5.4452351735875926e+00 + -3.0177347927867166e+00 -1.1018330748324185e+00 -5.5396491166914448e+00 + -3.1039802040885167e+00 -1.2768004018925159e+00 -5.5272759416161810e+00 + id 13162 + loc 3.8858127593994141e-01 4.1374552249908447e-01 411 + blend 0.0000000000000000e+00 + interp 3.9421871231231431e-01:3.8932850441223898e-01:3.4058831748542162e-01:2.5836028145921774e-01:1.1505481584063095e+00:2.8237410217706838e-01:2.2004290113661367e+00:3.9421477012519118e-01:2.9816851643562750e+00:2.5334412458814198e-01:3.5639527649355722e+00 + CVs 20 + -1.0738415696896697e-01 2.0363237377989851e-01 -6.4390918624181182e-01 + -2.1641525183900284e-01 3.4263606144831138e-01 -1.0813791794103436e+00 + -3.1531977463725203e-01 4.6223355839027058e-01 -1.4654247672103988e+00 + -3.8942520683265025e-01 5.8503020275959638e-01 -1.8642310587274249e+00 + -4.2806071354740366e-01 6.9771698175806929e-01 -2.2784622485647419e+00 + -4.2194922175048366e-01 7.8663117675440364e-01 -2.7067595736748653e+00 + -3.6732402254900109e-01 8.4192143581434964e-01 -3.1493250386102178e+00 + -2.6444064357388286e-01 8.5569292433256494e-01 -3.6072518444584283e+00 + -1.1417326705317016e-01 8.1769849482127832e-01 -4.0779481941307791e+00 + 7.7455617726280679e-02 7.1681188086925662e-01 -4.5540273070127464e+00 + 2.9005065464409507e-01 5.4312538168410662e-01 -5.0201649252445470e+00 + 4.9479492570522177e-01 2.9031438533336473e-01 -5.4479159735201712e+00 + 6.7419200962173897e-01 -3.6929799981237910e-02 -5.8077962932847216e+00 + 8.2525807216862546e-01 -4.2202712083616856e-01 -6.0852530192787064e+00 + 9.4573698517887173e-01 -8.3909686902455682e-01 -6.2753255899143419e+00 + 1.0294886669763343e+00 -1.2496948394990128e+00 -6.3819223721568328e+00 + 1.0749912127014598e+00 -1.6171346532541220e+00 -6.4203568492229648e+00 + 1.0933643501887014e+00 -1.9360394717696545e+00 -6.4079918503562636e+00 + 1.0793214475005144e+00 -2.2790622612086651e+00 -6.2850946016329914e+00 + id 13163 + loc 1.8044357001781464e-01 6.3324761390686035e-01 377 + blend 0.0000000000000000e+00 + interp 4.3307845849919413e-01:3.9809633817350037e-01:4.2930760962783510e-01:4.3307412771460918e-01:7.5722960760393776e-01:2.8598099911284153e-01:1.2158083068117205e+00:3.6509322811158545e-01:1.9165683941200453e+00:2.9626295677839665e-01:2.2035476328912980e+00:3.5620007837999812e-01:3.0948016497952811e+00:3.1809763236548616e-01:3.9403434266939001e+00 + CVs 20 + -7.5165369468163723e-01 3.4273639773975745e-01 -5.5739345250336225e-01 + -1.3762667938300006e+00 5.3321678476011203e-01 -9.2108875422295600e-01 + -1.9842041517677078e+00 6.5057900686655135e-01 -1.1884483422507819e+00 + -2.6196439457965321e+00 7.3722362722813206e-01 -1.4118081812356316e+00 + -3.2755233539734716e+00 7.9611724633474190e-01 -1.6154838553093231e+00 + -3.9523070784650582e+00 8.0946335679019921e-01 -1.8237810257354816e+00 + -4.6469945669085106e+00 7.4449563397393415e-01 -2.0554050763459277e+00 + -5.3371313223387880e+00 5.7411582103127023e-01 -2.3220571029534307e+00 + -5.9786578742080492e+00 2.9107118892336414e-01 -2.6153179111274438e+00 + -6.5266617643920215e+00 -8.5081730938731948e-02 -2.9028670285108094e+00 + -6.9563964119245387e+00 -5.1767407434421431e-01 -3.1517124321098775e+00 + -7.2653558421213278e+00 -9.6981048432309747e-01 -3.3491800948789368e+00 + -7.4739860475887543e+00 -1.4142833114987203e+00 -3.5071078296325435e+00 + -7.6258544263376553e+00 -1.8462829231209548e+00 -3.6602531483584118e+00 + -7.7618933452022754e+00 -2.2683772437676626e+00 -3.8382422920753410e+00 + -7.8963194050278087e+00 -2.6486864764388893e+00 -4.0412848712180285e+00 + -8.0195765203128655e+00 -2.9524914012242793e+00 -4.2516729098626991e+00 + -8.1338832645725443e+00 -3.2096894762472501e+00 -4.4594359391895670e+00 + -8.2863614031189190e+00 -3.5128996340370704e+00 -4.6699025786383821e+00 + id 13164 + loc 9.7628754377365112e-01 3.6754828691482544e-01 1081 + blend 0.0000000000000000e+00 + interp 3.3319010865100879e-01:2.6337723702736049e-01:1.0530345614561787e-02:3.3318677674992231e-01:1.0097931812054641e+00:2.5608674485222910e-01:2.0114325613605493e+00:3.3184294953683519e-01:2.6680772214658184e+00:2.9056517039183805e-01:3.0276431295296811e+00 + CVs 20 + 1.6947644842989457e-01 5.3847396309587070e-01 -5.1479182828198145e-01 + 2.7667605582162319e-01 1.0098573091955947e+00 -8.9253456846969081e-01 + 3.6761441533865769e-01 1.4315184888792440e+00 -1.2087170027974088e+00 + 4.4015133393436023e-01 1.8560674691775774e+00 -1.4935208194476948e+00 + 4.8248582649142130e-01 2.2968509450732815e+00 -1.7319915147088900e+00 + 4.8065680558631230e-01 2.7835683279890726e+00 -1.8924239548558637e+00 + 4.1794949625848599e-01 3.3441629043614034e+00 -1.9085667303594187e+00 + 2.8584278475053726e-01 3.9572594224130659e+00 -1.6674381046503473e+00 + 1.1283937991713200e-01 4.4787640459629801e+00 -1.0596750395378376e+00 + -1.4891250645336362e-02 4.6814016998892143e+00 -1.9908931513460804e-01 + -5.1559439835628607e-02 4.5663233253522639e+00 6.0706691452475448e-01 + -3.4615859893025236e-02 4.3034832736404081e+00 1.2420670347307585e+00 + -5.1775262534541344e-03 3.9874260309054312e+00 1.7420091448155910e+00 + 1.5186929784259146e-02 3.6362245436538676e+00 2.1553201468138625e+00 + 2.0490073334386932e-02 3.2162015738074876e+00 2.5172849852402313e+00 + 2.0770747763304023e-02 2.6040455587297728e+00 2.8475645075772866e+00 + 3.2177523231848859e-02 1.6453799870260364e+00 3.0577519016764891e+00 + 4.7646992003737676e-02 5.9040124441533237e-01 2.9738255147736563e+00 + 1.1265606403454365e-02 4.0373439456328764e-01 2.9646842280405652e+00 + id 13165 + loc 7.3282706737518311e-01 3.5243198275566101e-01 400 + blend 0.0000000000000000e+00 + interp 4.7817447937859625e-01:3.9141804622480675e-01:7.7865808283011928e-03:2.9651345033447579e-01:5.8630132926227940e-01:3.7825661221740914e-01:1.0128481294162783e+00:4.7816969763380246e-01:1.8048753231183585e+00:4.1237817586462405e-01:2.1927628915345223e+00:3.4715932653227988e-01:3.0200575633781774e+00 + CVs 20 + 3.5680042255694283e-01 2.1559508669491390e-01 1.9783517160840719e-01 + 6.6739527129336185e-01 4.3919426188746352e-01 4.2289517061057602e-01 + 9.4183596562691374e-01 6.6482509298179759e-01 6.6927440936137472e-01 + 1.1829809475900910e+00 8.9039386160481304e-01 9.3548524048340853e-01 + 1.3892886103750040e+00 1.1128351860761567e+00 1.2120872808126895e+00 + 1.5618989152570344e+00 1.3311661149731120e+00 1.4886424154235300e+00 + 1.7049342735899877e+00 1.5425883058888052e+00 1.7638980697425701e+00 + 1.8240799557145169e+00 1.7405026135453987e+00 2.0473043164500666e+00 + 1.9222988630045914e+00 1.9177306643119767e+00 2.3472518740741171e+00 + 1.9974533526785823e+00 2.0701720759617013e+00 2.6654710531463741e+00 + 2.0475105181887705e+00 2.1947343093945872e+00 3.0030607505103668e+00 + 2.0728637619306292e+00 2.2862574235947228e+00 3.3624856375045438e+00 + 2.0734167504683070e+00 2.3379096880353893e+00 3.7429118108764339e+00 + 2.0473503994070885e+00 2.3424667039355436e+00 4.1377934856506169e+00 + 1.9919718891151965e+00 2.2928365940391231e+00 4.5385675810017752e+00 + 1.9024769180453260e+00 2.1806417773865094e+00 4.9383667044238209e+00 + 1.7701340180987204e+00 1.9965313769147246e+00 5.3236086324743370e+00 + 1.5981953353856326e+00 1.7489181919515180e+00 5.6466190193543566e+00 + 1.4416498465013832e+00 1.5735886319187853e+00 5.6838028988481515e+00 + id 13166 + loc 3.1070339679718018e-01 2.0414896309375763e-01 399 + blend 0.0000000000000000e+00 + interp 4.6517021567545291e-01:4.5953841029337789e-01:4.0095609748367200e-01:3.1413957109765839e-01:9.3083160128875497e-01:4.6516556397329617e-01:1.1533489431906252e+00:4.1616832212017035e-01:1.9101411811779236e+00:2.9350289767160609e-01:2.3561757511815027e+00:2.6454949478319095e-01:3.3457242580041289e+00:4.0156572972688342e-01:3.9239256541936198e+00 + CVs 20 + -1.5819509691725986e-01 3.6613048951130001e-01 1.6829202068657784e-01 + -3.3585186271747280e-01 7.2525410332958085e-01 3.0525754457721443e-01 + -5.4046923311242123e-01 1.0722201613745099e+00 4.1310290853532161e-01 + -7.6771571765745217e-01 1.4062001093617666e+00 5.0623601062964618e-01 + -1.0129985780457018e+00 1.7289833113687345e+00 6.0398661359532346e-01 + -1.2817389910086909e+00 2.0391432433034802e+00 7.2348461677707232e-01 + -1.5852419380517939e+00 2.3287006741645158e+00 8.8822534500238670e-01 + -1.9030980697687552e+00 2.5730809215092387e+00 1.1028806837982648e+00 + -2.2496230713822039e+00 2.7557052678742253e+00 1.3686328933932772e+00 + -2.6467317548193434e+00 2.8368623771018733e+00 1.6706177737583334e+00 + -3.0663979696352643e+00 2.7856532439993478e+00 1.9935134754754267e+00 + -3.4417007361287686e+00 2.6207296438016772e+00 2.2927162839662287e+00 + -3.7428145899189507e+00 2.4010381445556064e+00 2.5255301487563613e+00 + -3.9546528986097473e+00 2.1940286040036234e+00 2.6610607395535850e+00 + -4.0588506566239921e+00 2.0410242137599122e+00 2.6878523151113889e+00 + -4.0255634885894569e+00 1.9313560619987526e+00 2.6357462716849818e+00 + -3.8240068155630658e+00 1.8099860641717513e+00 2.5812319896219535e+00 + -3.6707868449188346e+00 1.6204839837221017e+00 2.5970546048898759e+00 + -3.9966649710223230e+00 1.5124948922109078e+00 2.5078332826530341e+00 + id 13167 + loc 8.8433367013931274e-01 2.8803077340126038e-01 393 + blend 0.0000000000000000e+00 + interp 5.0708344726177967e-01:3.8515651800016526e-01:1.4868269646080701e-01:3.4128919610270880e-01:7.6971323584525320e-01:3.6645698465532356e-01:1.2562194054875764e+00:3.9966365982655511e-01:2.0149631280804123e+00:5.0707837642730713e-01:2.6171227415894278e+00:3.0139967890316666e-01:3.2655115473657075e+00 + CVs 20 + 3.1568935816991539e-01 3.4766956213316386e-01 2.0831882503526344e-01 + 6.4529253629938488e-01 6.9521164607660879e-01 4.0175087857712610e-01 + 9.7531282013320686e-01 1.0567922512824250e+00 6.1893104160350709e-01 + 1.2904983901580083e+00 1.4063132220445205e+00 8.9536805783025408e-01 + 1.5708932113907101e+00 1.6945258746238596e+00 1.2533252424472949e+00 + 1.7971560309608581e+00 1.8922726697113501e+00 1.6916770489778319e+00 + 1.9560457166610341e+00 1.9962085130728324e+00 2.1871192644254327e+00 + 2.0480897483862899e+00 2.0159771911475413e+00 2.7042410870849078e+00 + 2.0896001350413203e+00 1.9700304642271895e+00 3.2115286504769722e+00 + 2.1056360638319944e+00 1.8808442166269173e+00 3.6895704195946970e+00 + 2.1248014899906105e+00 1.7676428754343567e+00 4.1330247764762849e+00 + 2.1752125093639916e+00 1.6387341797385222e+00 4.5445825146608305e+00 + 2.2831800684822596e+00 1.4855706545686005e+00 4.9270972887411730e+00 + 2.4699904211706643e+00 1.2836767446066868e+00 5.2683880692383509e+00 + 2.7478095721121432e+00 1.0062533318822688e+00 5.5303135220930404e+00 + 3.1208487744485796e+00 6.5678141590189654e-01 5.6547564708218294e+00 + 3.5698071415731163e+00 3.2071091685124076e-01 5.6061590375000758e+00 + 4.0537344418062879e+00 8.7121181086378119e-02 5.4341718935572993e+00 + 4.5640132880630206e+00 -7.7866016557156748e-02 5.2228611629855477e+00 + id 13168 + loc 5.8554506301879883e-01 3.6547169089317322e-01 374 + blend 0.0000000000000000e+00 + interp 4.0677810828968697e-01:3.5846962689301765e-01:7.4077292623858237e-01:3.8624331682987639e-01:1.2391746226553884e+00:3.4601458598363816e-01:1.9029978538097962e+00:4.0677404050860411e-01:2.1240404895409131e+00:3.2332681983672268e-01:2.7844894363863872e+00:3.3952607775511801e-01:3.2163465837673804e+00:3.7723587299325739e-01:3.9855305972329567e+00 + CVs 20 + 8.0621364157802555e-01 3.9078548134909585e-01 2.8496434212553839e-01 + 1.4164365850272684e+00 6.0301499918856838e-01 4.3556199221078218e-01 + 1.9905016291557540e+00 7.1291259089011438e-01 5.1384285283415798e-01 + 2.5877717967287248e+00 7.7996723048557592e-01 5.6623420010958347e-01 + 3.1893501853812705e+00 8.3925392721786751e-01 6.1995180169880593e-01 + 3.7722012561760527e+00 9.0848994088044255e-01 6.9233937828539782e-01 + 4.3379517034375707e+00 9.8233028636800390e-01 7.8851709424852956e-01 + 4.9111856702029222e+00 1.0391026640017382e+00 9.1503160459457988e-01 + 5.5155193624027650e+00 1.0480640558724958e+00 1.0865065272026169e+00 + 6.1545810427652530e+00 9.7312425752427778e-01 1.3194118391696654e+00 + 6.8073978852335255e+00 7.7723297177555351e-01 1.6136748468758348e+00 + 7.4345451854327678e+00 4.3172483106604354e-01 1.9385650045339133e+00 + 7.9845384063786753e+00 -6.5545451612762928e-02 2.2386650617225503e+00 + 8.4165849605668122e+00 -6.6346867776358520e-01 2.4626068138263815e+00 + 8.7383465145399910e+00 -1.2717255527251528e+00 2.6064357063569412e+00 + 8.9932253089499152e+00 -1.8012582862806301e+00 2.7008205614769190e+00 + 9.2211704774422110e+00 -2.1933437206907991e+00 2.7696609697501833e+00 + 9.4431133285019122e+00 -2.4896540068499746e+00 2.8445609807628269e+00 + 9.7465317914247649e+00 -2.8370588121827645e+00 2.9442233934013662e+00 + id 13169 + loc 1.7606091499328613e-01 4.3543311953544617e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8847406712457322e-01:2.9986492697987022e-01:9.3565855292753486e-01:3.8262385220797523e-01:1.8519054072177843e+00:3.0976854019293609e-01:2.6338654388473444e+00:3.4129965394904999e-01:3.2551278233742158e+00:3.8847018238390202e-01:3.9963427423785443e+00 + CVs 20 + -2.9277659881951601e-01 2.5308011666831948e-01 -1.6017937010193445e-01 + -5.6027825627395078e-01 4.9097592456122552e-01 -3.3580275744839649e-01 + -8.2648508700107959e-01 7.1782754039140739e-01 -5.3887786137377569e-01 + -1.1065393627005633e+00 9.3585857725730259e-01 -7.7202534165410930e-01 + -1.4090327212385292e+00 1.1450790913662239e+00 -1.0289055191691951e+00 + -1.7452813861850733e+00 1.3425406444029404e+00 -1.3001886992329224e+00 + -2.1267853656152402e+00 1.5217081539657364e+00 -1.5741779998915568e+00 + -2.5599518091917219e+00 1.6714967744822724e+00 -1.8372627400191626e+00 + -3.0435682652616030e+00 1.7765927884925528e+00 -2.0748279451481642e+00 + -3.5657518640998260e+00 1.8189093037981088e+00 -2.2737340743567258e+00 + -4.1032170460380533e+00 1.7817585455291165e+00 -2.4277684683959504e+00 + -4.6279851312781526e+00 1.6592964461286079e+00 -2.5431813719732883e+00 + -5.1172080878301340e+00 1.4573545183238443e+00 -2.6354324995175382e+00 + -5.5558935103406606e+00 1.1821574804480075e+00 -2.7203461343480702e+00 + -5.9317444138331830e+00 8.3022998390054825e-01 -2.8103213638444067e+00 + -6.2219334191022293e+00 3.8832382543737842e-01 -2.9100291562353595e+00 + -6.3930824915878386e+00 -1.4287658002764059e-01 -3.0132113403321457e+00 + -6.4540119499247703e+00 -7.1826719461137067e-01 -3.1061138360750635e+00 + -6.6343548228783886e+00 -1.2264211976883361e+00 -3.1587649313383839e+00 + id 13170 + loc 6.5564554929733276e-01 6.3963788747787476e-01 1080 + blend 0.0000000000000000e+00 + interp 5.0267419797682777e-01:3.1126258897982706e-01:2.9196047713989526e-01:3.6726157145488897e-01:9.9117395002795905e-01:3.0076275187742496e-01:1.6208611057588440e+00:4.9257907563982029e-01:2.0002483809962883e+00:5.0266917123484800e-01:2.3584996149225610e+00:3.1067460770982464e-01:3.0409886639162247e+00:3.4082663158900278e-01:3.8608196576097153e+00 + CVs 20 + -6.1715582509007886e-03 3.6160543265612755e-01 2.1201777752686346e-01 + 2.3678407889971637e-02 6.5629150452000506e-01 2.9364458668088295e-01 + 4.4401223430145506e-02 9.4033877629432938e-01 3.5354148743020181e-01 + 3.8806861266796271e-02 1.2328591996948350e+00 4.2236753872708871e-01 + 7.1795780978409218e-04 1.5276920133013296e+00 4.9284384690613248e-01 + -7.7609094449645741e-02 1.8169179243904963e+00 5.5565079314225174e-01 + -2.0369901866619872e-01 2.0901952857427326e+00 6.0062405106889283e-01 + -3.8274907560733923e-01 2.3347019965847560e+00 6.2102711457091775e-01 + -6.1585825643294811e-01 2.5347061915307472e+00 6.1225853110093320e-01 + -8.9839428358165774e-01 2.6704683693114433e+00 5.6617183831290285e-01 + -1.2150384311663947e+00 2.7180102132192347e+00 4.6986212316133025e-01 + -1.5298409594170417e+00 2.6594460410917633e+00 3.1341456676199209e-01 + -1.7943569106714350e+00 2.5040161778542833e+00 1.0483092890964252e-01 + -1.9806949256157487e+00 2.2920844890240817e+00 -1.2824360281866642e-01 + -2.1009280708135538e+00 2.0687658220268648e+00 -3.5625168125847850e-01 + -2.1859653252079281e+00 1.8551227915099069e+00 -5.6496922069978417e-01 + -2.2485962680904525e+00 1.6486353329297745e+00 -7.5705281005799385e-01 + -2.2754322432580807e+00 1.4521012305436727e+00 -9.4089139229547403e-01 + -2.3596462929504174e+00 1.2829929099970454e+00 -1.0775814841132070e+00 + id 13171 + loc 4.7358483076095581e-01 9.9686361849308014e-02 407 + blend 0.0000000000000000e+00 + interp 4.8297628453810293e-01:3.4887880039105829e-01:2.1464032442512548e-01:3.0765444138560877e-01:1.1018910958397754e+00:4.0903788391605084e-01:1.9818615850676282e+00:4.8297145477525755e-01:2.4826167285967569e+00:3.4012684228618251e-01:2.9957568688779643e+00:3.3494546444019169e-01:3.4360138301446841e+00 + CVs 20 + -1.1861080046644321e-01 3.2896381631792282e-01 -2.0430901293364123e-01 + -2.2727104842097373e-01 4.9811182325716030e-01 -2.4270499476556484e-01 + -3.3497044264027709e-01 6.6438012086975828e-01 -2.1943257488182649e-01 + -4.4062424084403279e-01 8.5557451870624390e-01 -2.2464031512320626e-01 + -5.3861251243602137e-01 1.0800336769362568e+00 -2.6691075789029156e-01 + -6.1191313469319608e-01 1.3476380103553183e+00 -3.6012320404642939e-01 + -6.2638536862239225e-01 1.6530304912596605e+00 -5.1707470365082753e-01 + -5.4731008506309897e-01 1.9568907756414284e+00 -7.3089850403883894e-01 + -3.7506531626818940e-01 2.2028570370242635e+00 -9.7035680788671441e-01 + -1.4251705784906715e-01 2.3593688015304779e+00 -1.2061081817600940e+00 + 1.2027643786389525e-01 2.4244671506658166e+00 -1.4305450105405257e+00 + 3.9870673910540722e-01 2.4042762363685801e+00 -1.6514596595297530e+00 + 6.7923194640323359e-01 2.3024135272505268e+00 -1.8743528836023455e+00 + 9.3323199738207052e-01 2.1280988522035362e+00 -2.0932753634325691e+00 + 1.1338116128319753e+00 1.9060355248537229e+00 -2.3045894392145541e+00 + 1.2812108611153183e+00 1.6658044703597308e+00 -2.5199108227950227e+00 + 1.3906137873712285e+00 1.4287753609211493e+00 -2.7557855609561828e+00 + 1.4726697576942067e+00 1.2070120260787094e+00 -3.0200679215736690e+00 + 1.6190975235501186e+00 9.5172236896572349e-01 -3.3526644586388956e+00 + id 13172 + loc 5.9591478109359741e-01 3.7683784961700439e-01 373 + blend 0.0000000000000000e+00 + interp 3.0087286058122431e-01:2.2896298645577692e-01:9.1279304296150110e-01:2.4652601932186910e-01:1.5192226790150904e+00:3.0086985185261850e-01:2.0125746364754722e+00:2.5833066164336826e-01:2.7020771420790020e+00:2.6892273296011066e-01:3.7606618061873220e+00 + CVs 20 + 1.3786225156443616e-01 4.1146272763144615e-01 1.0861677950330052e-01 + 2.8488619248967750e-01 7.8881069380835456e-01 2.0309940812601363e-01 + 4.2418516372046250e-01 1.0611590267833042e+00 2.7969844800897636e-01 + 5.3050410159694916e-01 1.2162118116552005e+00 3.9876917281390378e-01 + 5.2424737176426250e-01 1.4053743112443697e+00 5.6784063387704919e-01 + 4.6610369526311934e-01 1.6709080877103242e+00 6.1903293952754890e-01 + 4.8218373823361743e-01 1.8931764468570893e+00 5.4415611546540532e-01 + 5.9495569174834562e-01 2.0697384120383777e+00 4.3131788622916911e-01 + 7.8294667601236889e-01 2.2623629256676665e+00 3.2789689640263242e-01 + 1.0088763742660531e+00 2.5256495440331403e+00 2.6379703628055673e-01 + 1.2416645861741982e+00 2.8818792408229350e+00 2.5936080903976305e-01 + 1.4783806691801018e+00 3.3206505650390139e+00 3.2951641760837369e-01 + 1.7223211018578790e+00 3.8019795193480497e+00 5.2354791217290964e-01 + 1.9474012842727488e+00 4.2272616627953088e+00 9.1555041935689241e-01 + 2.0845090254153456e+00 4.4361342745354087e+00 1.5101301327684595e+00 + 2.0693728859732818e+00 4.2739981765971624e+00 2.1489132815720868e+00 + 2.0570154310219757e+00 3.7710637795416142e+00 2.6200425427541516e+00 + 2.2818171954740074e+00 3.1627576661275265e+00 2.8082456937023026e+00 + 2.7053324067123161e+00 2.6260508243553846e+00 2.7620483853507265e+00 + id 13173 + loc 1.2395679950714111e-01 8.6697173118591309e-01 402 + blend 0.0000000000000000e+00 + interp 5.0802605407965595e-01:2.7514686991232729e-01:5.1996557174767122e-01:4.1938444063447256e-01:9.6446339472907550e-01:4.5995381588029294e-01:1.1594314078896770e+00:3.7843200823218642e-01:1.9492019416927464e+00:3.6393119867862467e-01:2.2758033681238574e+00:5.0802097381911515e-01:2.8674940432212814e+00:4.3216215635405958e-01:3.3699587619571623e+00:2.8764952153303180e-01:3.9583238583985967e+00 + CVs 20 + -4.6036067877676612e-02 2.9918325015779196e-01 -2.4325627375047790e-01 + -7.8509800068404884e-02 5.9580310530377167e-01 -4.6554701073969562e-01 + -8.7947422193687341e-02 9.0427231114662654e-01 -7.1998023072861472e-01 + -6.8893483543314982e-02 1.2150215998558211e+00 -1.0294850550815515e+00 + -2.1308762889994948e-02 1.5062307200964875e+00 -1.3986326317815465e+00 + 4.4326116578591090e-02 1.7588795040169556e+00 -1.8280214075449548e+00 + 9.9321859491520170e-02 1.9613126857748788e+00 -2.3219889055564717e+00 + 1.0435108469509602e-01 2.0986700633518094e+00 -2.8797984507233059e+00 + 2.4154744960303010e-02 2.1482974177336747e+00 -3.4795613702280686e+00 + -1.5698820560919957e-01 2.0926143989506696e+00 -4.0785338872152703e+00 + -4.2860470189306632e-01 1.9333012554074198e+00 -4.6279783288457912e+00 + -7.5992163824170345e-01 1.6893971338645990e+00 -5.0874146300490146e+00 + -1.1179029012976274e+00 1.3840183706095881e+00 -5.4444604319642913e+00 + -1.4917565051060304e+00 1.0339467460319067e+00 -5.7109777992219106e+00 + -1.8801508439999963e+00 6.6433312885267370e-01 -5.8837608374717218e+00 + -2.2752572141170155e+00 3.1403190557821448e-01 -5.9544719019539034e+00 + -2.6907248450677024e+00 -1.7085320326080122e-03 -5.9844702338645615e+00 + -3.1485826550695606e+00 -2.8649690311709891e-01 -6.1044774371541930e+00 + -3.6349070248659792e+00 -5.2647006561208798e-01 -6.3870517338594857e+00 + id 13174 + loc 4.2484024167060852e-01 5.1351487636566162e-01 403 + blend 0.0000000000000000e+00 + interp 4.6215192506418823e-01:2.9723019575113341e-01:2.3844792202478959e-01:3.4541104727404670e-01:9.8977390207486882e-01:3.7451795399800131e-01:1.4602896062807849e+00:4.1940303689562153e-01:1.9945756407286921e+00:3.4051933594696432e-01:2.7140466817232407e+00:4.6214730354493760e-01:3.0145500506361267e+00:3.6020288825141095e-01:3.8891491646698610e+00 + CVs 20 + -2.9589487795529681e-02 1.3925247192142548e-01 -1.6545863193586827e-01 + -5.8384419070326182e-02 2.8476710391122811e-01 -3.1773510313071984e-01 + -1.0144599838010263e-01 4.2730057567834995e-01 -4.6565979007963032e-01 + -1.6581253664809431e-01 5.6199770482444600e-01 -6.1166403826353277e-01 + -2.5399418716882483e-01 6.8784238150740573e-01 -7.5324063383168827e-01 + -3.6851167875987051e-01 8.0554696090793865e-01 -8.8628483086257259e-01 + -5.0978522806252702e-01 9.1584795554461307e-01 -1.0051328471887109e+00 + -6.7498091948734518e-01 1.0193851781596317e+00 -1.1043059795190782e+00 + -8.5934898667362092e-01 1.1168657001938929e+00 -1.1797127491265313e+00 + -1.0579253961072475e+00 1.2082578969949522e+00 -1.2288274074290026e+00 + -1.2665565489684207e+00 1.2925139748829455e+00 -1.2505960678661330e+00 + -1.4821113070308016e+00 1.3682165864323148e+00 -1.2451393731068250e+00 + -1.7024236318572572e+00 1.4340038072107650e+00 -1.2129955759995650e+00 + -1.9251053024449225e+00 1.4884305571135443e+00 -1.1540230716401609e+00 + -2.1455078013287752e+00 1.5301400240979448e+00 -1.0683026149850472e+00 + -2.3583453458849637e+00 1.5577391981822419e+00 -9.5844753330863675e-01 + -2.5619416610319643e+00 1.5694358227425729e+00 -8.3013007409149830e-01 + -2.7568920125034779e+00 1.5646069882312388e+00 -6.9081255341303438e-01 + -2.9445441183292171e+00 1.5664543066093646e+00 -5.7109599917036991e-01 + id 13175 + loc 5.4761415719985962e-01 5.6368011236190796e-01 396 + blend 0.0000000000000000e+00 + interp 4.6683259225393814e-01:2.8625575922926855e-01:6.2938201207951572e-05:4.4433997336588732e-01:6.4411626319947424e-01:3.4164507538656752e-01:1.2565812988911664e+00:2.5013691055998077e-01:2.0200496252986455e+00:3.8379247150089008e-01:3.0004072900323058e+00:4.6682792392801564e-01:3.4453705990234891e+00 + CVs 20 + 8.3622568678472675e-01 1.6474450750305497e-01 -3.5633434879327164e-01 + 1.4073538621972581e+00 1.4122736812029185e-01 -6.5558606956962961e-01 + 1.9103431147691055e+00 4.6071829466404979e-02 -9.3680396964428470e-01 + 2.4058798703977193e+00 -7.6875359853252334e-02 -1.2055696498252773e+00 + 2.8827121968360427e+00 -2.1701107254851471e-01 -1.4521274266053297e+00 + 3.3340018366997217e+00 -3.5943244520280337e-01 -1.6731792604977174e+00 + 3.7571398413820769e+00 -4.8897828450602909e-01 -1.8705686520882632e+00 + 4.1548747733300821e+00 -5.9568261336333550e-01 -2.0488166173140989e+00 + 4.5380496200173104e+00 -6.7961878173802370e-01 -2.2145022318110983e+00 + 4.9221263059378915e+00 -7.5353002477998188e-01 -2.3767512220129721e+00 + 5.3183362623593124e+00 -8.4358195549647386e-01 -2.5495007915714276e+00 + 5.7249535705485464e+00 -9.8242081695470307e-01 -2.7466341858741918e+00 + 6.1288479421580755e+00 -1.1941735701496790e+00 -2.9675416210118843e+00 + 6.5113277009070991e+00 -1.4878188034342867e+00 -3.1966713977347911e+00 + 6.8501821743357274e+00 -1.8562820970878831e+00 -3.4176860444771440e+00 + 7.1263505333549055e+00 -2.2811768916503423e+00 -3.6233436905723124e+00 + 7.3288370652453558e+00 -2.7443946578526415e+00 -3.8143507731626327e+00 + 7.4548784288921182e+00 -3.2224204354180799e+00 -3.9895879066871767e+00 + 7.4949336608353452e+00 -3.6554015623647542e+00 -4.1194845336035089e+00 + id 13176 + loc 4.5273903012275696e-01 1.0084850341081619e-01 395 + blend 0.0000000000000000e+00 + interp 4.2458917494060749e-01:4.2458492904885808e-01:9.0434918518824348e-02:3.7450673770643583e-01:8.2576015001860126e-01:2.9198167240020290e-01:1.7823913591589418e+00:2.9293075284192416e-01:2.6169643791371113e+00:3.4246650006744689e-01:3.7991042235945391e+00 + CVs 20 + -2.5531576645924531e-01 2.5982596496573018e-01 -4.7074525510252435e-01 + -4.8617861044021471e-01 4.6173371442196898e-01 -8.9525364819896014e-01 + -7.0494067818463613e-01 6.3286709092866489e-01 -1.3111731141182315e+00 + -9.2041862897837912e-01 7.8099584514011333e-01 -1.7368504473509505e+00 + -1.1357647327680118e+00 9.0159398351226105e-01 -2.1739429579803544e+00 + -1.3604841009845949e+00 9.9292959213992327e-01 -2.6226591161527963e+00 + -1.5989525425983628e+00 1.0462436377360049e+00 -3.0789923667196692e+00 + -1.8450563962400350e+00 1.0406213490064551e+00 -3.5353227970650654e+00 + -2.0945604970553808e+00 9.5729604721780515e-01 -3.9815910333643281e+00 + -2.3515876846451333e+00 7.9336960781194987e-01 -4.4037270057209303e+00 + -2.6156647546185381e+00 5.6645793751961060e-01 -4.7869257048147142e+00 + -2.8755040105141108e+00 3.0724262728859575e-01 -5.1302226501672381e+00 + -3.1303245925562866e+00 4.1965499169345666e-02 -5.4449446833178472e+00 + -3.4025314132908653e+00 -2.1788931716099658e-01 -5.7356678916904276e+00 + -3.7140903636828213e+00 -4.7423064254509040e-01 -5.9919101758139472e+00 + -4.0588028918615393e+00 -7.4424230000938962e-01 -6.1922388150212360e+00 + -4.4142049961093868e+00 -1.0513620632771010e+00 -6.3187580548349018e+00 + -4.7706109619941746e+00 -1.3788127033531885e+00 -6.3867066459667825e+00 + -5.1148605278614250e+00 -1.5353273701412147e+00 -6.5567438141254186e+00 + id 13177 + loc 3.6724033951759338e-01 9.4486957788467407e-01 1078 + blend 0.0000000000000000e+00 + interp 3.5839929361071460e-01:3.1785775739064326e-01:2.4534085377113657e-02:3.5839570961777850e-01:9.4728192268273437e-01:3.5387140385548121e-01:1.7546520608953171e+00:3.1024619473418202e-01:2.4873187617907031e+00:3.1641461672342514e-01:2.9914350766643460e+00 + CVs 20 + 1.1239681748002397e-01 1.8632489144121239e-01 -1.2990749500914006e-01 + 2.4156673486603819e-01 3.4788569862166807e-01 -2.5890662999280378e-01 + 3.6392782734036244e-01 4.9657620839834538e-01 -3.9156293105696138e-01 + 4.7213188824736874e-01 6.2654704728245425e-01 -5.2559933452094509e-01 + 5.6631219580904957e-01 7.4055171923906105e-01 -6.6055080365803365e-01 + 6.4555166110103901e-01 8.4379746708319348e-01 -7.9730010774317384e-01 + 7.0803724746287255e-01 9.4203516290201339e-01 -9.3794750088444567e-01 + 7.5140913924236252e-01 1.0404959581679880e+00 -1.0847599569215600e+00 + 7.7322906862640961e-01 1.1410087387896883e+00 -1.2380556593220688e+00 + 7.7351729790412105e-01 1.2392472146499784e+00 -1.3935051315760343e+00 + 7.5593496076485112e-01 1.3291036421058715e+00 -1.5448267665834554e+00 + 7.2591609451520678e-01 1.4076298943688281e+00 -1.6874077656966695e+00 + 6.8823774947498007e-01 1.4761034953157011e+00 -1.8191906045598008e+00 + 6.4497058300304111e-01 1.5383619335336081e+00 -1.9409463663242783e+00 + 5.9561245349339964e-01 1.5976754903388879e+00 -2.0553669264488259e+00 + 5.4120974892155438e-01 1.6542710026099310e+00 -2.1626045878967646e+00 + 4.8672114160408630e-01 1.7073620384661843e+00 -2.2577190806947631e+00 + 4.3684927093003639e-01 1.7576526429080739e+00 -2.3358944346955584e+00 + 4.1682078956128082e-01 1.7853504337024555e+00 -2.3533377464369578e+00 + id 13178 + loc 7.4028354883193970e-01 5.3668153285980225e-01 375 + blend 0.0000000000000000e+00 + interp 4.0994626403749590e-01:3.5402127509067677e-01:7.2055098253638139e-01:2.5023871173318962e-01:1.6021769362041554e+00:3.6563915944211867e-01:2.6159648151300559e+00:2.6627690444915969e-01:2.9969139286670896e+00:4.0994216457485555e-01:3.7079991165045456e+00 + CVs 20 + -5.1678031641403510e-01 4.1258497320893323e-01 -1.3967284614177661e-01 + -1.0019709549087945e+00 6.6297576101519040e-01 -2.2560851067708101e-01 + -1.5089448817810669e+00 7.4439654857743243e-01 -2.5401209242973033e-01 + -2.0463280327712630e+00 7.1423532532184364e-01 -2.3605699507553035e-01 + -2.5861227529137265e+00 6.5667938603255471e-01 -1.9217488015122580e-01 + -3.1022732436740359e+00 6.2251539458126737e-01 -1.5577500237412467e-01 + -3.5964743538454087e+00 6.2221766787546495e-01 -1.5882091166272116e-01 + -4.0813259174333183e+00 6.5924061108585530e-01 -2.2398526572307098e-01 + -4.5471603813263588e+00 7.3817001401320748e-01 -3.6189804195227515e-01 + -4.9691267711364686e+00 8.5164970069915191e-01 -5.6517375770719658e-01 + -5.3305439863280615e+00 9.7519660701911359e-01 -8.0319048795138726e-01 + -5.6302495562478478e+00 1.0841143204458199e+00 -1.0347411917969127e+00 + -5.8839385432705971e+00 1.1661488835102070e+00 -1.2420523406621600e+00 + -6.1174311711504776e+00 1.2080282596085596e+00 -1.4394001073220319e+00 + -6.3308397563846803e+00 1.2137917326537790e+00 -1.6295030473481358e+00 + -6.4631448425023343e+00 1.2549218740721124e+00 -1.7813043002877711e+00 + -6.4148599450960173e+00 1.4740370776457081e+00 -1.9005172542022903e+00 + -6.1964903375057121e+00 1.6872179943658969e+00 -2.0674380522233275e+00 + -6.2947627122604004e+00 1.3987727760751092e+00 -1.9303229594963613e+00 + id 13179 + loc 1.4655338600277901e-02 5.9373420476913452e-01 401 + blend 0.0000000000000000e+00 + interp 3.7265132720323169e-01:2.1756754648126617e-01:5.5042702259253229e-02:2.6103719855033880e-01:1.1519019758852238e+00:3.7264760068995967e-01:2.0036486098752815e+00:3.4446609313460563e-01:2.9138605311236203e+00:3.1017560732029004e-01:3.4283772450023693e+00 + CVs 20 + -6.3380729225436361e-02 2.6185767132290549e-01 -2.4619176441461016e-01 + -1.3828989615654363e-01 5.0795863087470428e-01 -4.8410035625063125e-01 + -2.2604988921880781e-01 7.3466420159555990e-01 -7.1869743468290859e-01 + -3.2522590689566455e-01 9.3616128579886371e-01 -9.4977556574240185e-01 + -4.3167388846954291e-01 1.1075193747233820e+00 -1.1741050046748840e+00 + -5.4075846888931156e-01 1.2485842529683209e+00 -1.3891653889934692e+00 + -6.5242744093768312e-01 1.3649893017031558e+00 -1.5966307318122563e+00 + -7.7295007518095604e-01 1.4641366849089226e+00 -1.8024185235766594e+00 + -9.1219139320038023e-01 1.5515967875934289e+00 -2.0115254342438980e+00 + -1.0817904588712566e+00 1.6290678856494738e+00 -2.2250702293374611e+00 + -1.2892500988092299e+00 1.6959246629475195e+00 -2.4431265381192135e+00 + -1.5380833647484735e+00 1.7499730449297051e+00 -2.6698108406179473e+00 + -1.8327289337389254e+00 1.7773945126671793e+00 -2.9121468834758995e+00 + -2.1732468908642790e+00 1.7438586176348596e+00 -3.1763435451239350e+00 + -2.5580698256686167e+00 1.6172443771932339e+00 -3.4522229806548395e+00 + -2.9902503578147788e+00 1.3899523914263012e+00 -3.6924676074989708e+00 + -3.4998168708169204e+00 1.0871861333336013e+00 -3.8318080521795270e+00 + -4.0954355683163541e+00 7.9754311303462078e-01 -3.7701021913434154e+00 + -4.5385748540843673e+00 7.4864182612707342e-01 -3.5812832059972535e+00 + id 13180 + loc 3.1604698300361633e-01 7.2443139553070068e-01 415 + blend 0.0000000000000000e+00 + interp 4.2962914574697897e-01:3.2389397868295672e-01:7.5168735161786471e-01:3.7079603499986996e-01:1.1346969334734811e+00:4.2922813305089230e-01:1.6683221810322908e+00:4.2337207892348033e-01:2.0260767097008596e+00:2.3073755005824303e-01:2.5417217104571299e+00:3.3737415501267087e-01:3.0290296560255454e+00:2.7372061827327226e-01:3.5937161524214787e+00:4.2962484945552154e-01:3.9950040343088453e+00 + CVs 20 + 4.0205146188582064e-01 2.1410753321577791e-01 1.1546028117054685e-01 + 7.1287967162428267e-01 3.2542827419339354e-01 1.6210768977641030e-01 + 9.9845993753100704e-01 3.9209938590354032e-01 2.0300404868537986e-01 + 1.2886257765590452e+00 4.4039639797449681e-01 2.7002007767143926e-01 + 1.5777955443108791e+00 4.6736183458658520e-01 3.6320625845706817e-01 + 1.8600597267731942e+00 4.7153090059183678e-01 4.8229932880001497e-01 + 2.1289887347310721e+00 4.5323147816432252e-01 6.2715360228734518e-01 + 2.3786159256331354e+00 4.1425648446200802e-01 7.9611627910353788e-01 + 2.6054216538614354e+00 3.5747404780520153e-01 9.8523526400577000e-01 + 2.8077004178931215e+00 2.8597903967237026e-01 1.1900310960072500e+00 + 2.9807226826826287e+00 2.0360703525486579e-01 1.4052525223983383e+00 + 3.1135117916284534e+00 1.1649316505154217e-01 1.6219532645645225e+00 + 3.2021037674254300e+00 2.9781916230127381e-02 1.8295724959035038e+00 + 3.2679892672852286e+00 -5.9563311541447339e-02 2.0212166283784101e+00 + 3.3417099922656086e+00 -1.5955208400310372e-01 2.1873281799560860e+00 + 3.4287383716835587e+00 -2.7001349274417352e-01 2.3189031961316058e+00 + 3.5156891950921594e+00 -3.8380476798860541e-01 2.4183904065853783e+00 + 3.5939163209027112e+00 -4.9696935291572397e-01 2.4920578919306813e+00 + 3.7396285132668736e+00 -6.7308213914816473e-01 2.4500016424592044e+00 + id 13181 + loc 5.0597465038299561e-01 9.4981825351715088e-01 382 + blend 0.0000000000000000e+00 + interp 5.5056006465501039e-01:3.9412080548296630e-01:1.0453320576969560e-01:4.5363269416988389e-01:8.8191140378790034e-01:5.5055455905436390e-01:1.1639632875505141e+00:4.9371716982595815e-01:1.7186184002284832e+00:3.1970043268392839e-01:2.0098296477574982e+00:4.6203595421216115e-01:2.9810123818721195e+00:2.9770635153390917e-01:3.3831085716429214e+00 + CVs 20 + 1.0034922839265215e+00 1.6058668564412620e-01 -5.6765138672085147e-01 + 1.5992856356253939e+00 1.9770426308739580e-01 -9.9893106401635512e-01 + 2.0695576339968489e+00 1.9279668080419918e-01 -1.3943228712705464e+00 + 2.5395542170411400e+00 1.8354976814044016e-01 -1.7938309989487029e+00 + 3.0129249062984389e+00 1.5943039591788738e-01 -2.1812968949970628e+00 + 3.5014497593572425e+00 1.1616889534662328e-01 -2.5363589330973006e+00 + 4.0155981891446828e+00 5.1709089198846536e-02 -2.8522827910521027e+00 + 4.5600851051241476e+00 -3.6659399885789923e-02 -3.1401353122258397e+00 + 5.1309790692815982e+00 -1.5704438132079468e-01 -3.4182007249760931e+00 + 5.7165929172386072e+00 -3.2557381960712772e-01 -3.7013344536323993e+00 + 6.2932481310079487e+00 -5.6098420618524181e-01 -4.0022267209686460e+00 + 6.8211710044636398e+00 -8.7031539362591626e-01 -4.3327061413681314e+00 + 7.2620697273226495e+00 -1.2474612585282601e+00 -4.7033186174943395e+00 + 7.5924799715084896e+00 -1.6798525486705627e+00 -5.1169887736103385e+00 + 7.8017014257352386e+00 -2.1534665668176776e+00 -5.5685770561175270e+00 + 7.8865679647367477e+00 -2.6522924001633688e+00 -6.0482908649208298e+00 + 7.8490390547934705e+00 -3.1623007106566776e+00 -6.5378958372974978e+00 + 7.6962503785153560e+00 -3.6695260839146719e+00 -7.0077321222172975e+00 + 7.4048312972537680e+00 -4.0763505978089887e+00 -7.3173313961325057e+00 + id 13182 + loc 2.3904095869511366e-03 9.0671449899673462e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9980620059086824e-01:3.9980220252886234e-01:2.6393553533119452e-03:2.9503422934207946e-01:8.6623614816867645e-01:2.8293164629050277e-01:1.4379115225070171e+00:2.8811430542286154e-01:2.0410552785182956e+00:3.0341261850322598e-01:2.8733901859707061e+00:3.9118709623534731e-01:3.6214117492631885e+00 + CVs 20 + 2.8242440508365729e-01 1.8292702204737155e-01 -1.4537692912972469e-01 + 5.7118428061689130e-01 3.8637112129729151e-01 -3.2358078782398680e-01 + 8.7413951696637227e-01 6.0456836003950054e-01 -5.1060001285453716e-01 + 1.1797644299101189e+00 8.4446259704268689e-01 -7.0876803605628691e-01 + 1.4627576401080098e+00 1.1122390574633194e+00 -9.3552644418292452e-01 + 1.6902165837991268e+00 1.3939615697752279e+00 -1.2101674504739033e+00 + 1.8336202785907734e+00 1.6431395589025810e+00 -1.5434478670036973e+00 + 1.8886945384202412e+00 1.7850019561828048e+00 -1.9220699055364907e+00 + 1.8754530510030261e+00 1.7592218017554400e+00 -2.3010522500076585e+00 + 1.8211361267210295e+00 1.5722359473359098e+00 -2.6220648683409582e+00 + 1.7568868828321171e+00 1.2911920330849571e+00 -2.8600556134107262e+00 + 1.7130351675601538e+00 9.8625435296042896e-01 -3.0417852029227359e+00 + 1.7070168200840903e+00 6.9324734631055585e-01 -3.2053901335811394e+00 + 1.7532004726343287e+00 4.3204372204681524e-01 -3.3673991191419117e+00 + 1.8838081123999328e+00 2.3187416253080240e-01 -3.5151854806338347e+00 + 2.1570271310417528e+00 1.6194377378235714e-01 -3.5800912192799959e+00 + 2.5282748068240211e+00 3.3097585037454003e-01 -3.4652102737166821e+00 + 2.7803264150873730e+00 5.7066274534757611e-01 -3.3094580561980482e+00 + 3.0056853372761556e+00 4.1231192311738613e-01 -3.4338657354707993e+00 + id 13183 + loc 7.2874355316162109e-01 9.5608448982238770e-01 377 + blend 0.0000000000000000e+00 + interp 4.5201628521946841e-01:2.9455819292699942e-01:1.3704012596423110e-01:3.9983525081612625e-01:9.9370725131019022e-01:4.2105201998251846e-01:1.3562001621496376e+00:3.7270757636893465e-01:2.0213715748921630e+00:4.5201176505661622e-01:2.5905439846680682e+00:2.9321467670242396e-01:3.2673275142757028e+00 + CVs 20 + -6.3513479653491478e-01 2.3901680753706545e-01 -5.6463611386478152e-01 + -1.1053730790500704e+00 3.7752099195539823e-01 -9.4417061472775377e-01 + -1.5232408047367407e+00 4.9128794716857088e-01 -1.2857787479907321e+00 + -1.9268503694043764e+00 6.2135165423405248e-01 -1.6508325350033852e+00 + -2.3071389290567614e+00 7.7309468053530161e-01 -2.0405294247231964e+00 + -2.6635380548844010e+00 9.4806902835630691e-01 -2.4636196360726319e+00 + -3.0109814554272498e+00 1.1332358573778973e+00 -2.9313472505535376e+00 + -3.3668975063250075e+00 1.2969738677373632e+00 -3.4514774072084542e+00 + -3.7361731185686606e+00 1.3930207777212518e+00 -4.0269544076198871e+00 + -4.1134470618776398e+00 1.3727047178816218e+00 -4.6504689236332064e+00 + -4.4950481794130388e+00 1.1988298791863841e+00 -5.2940982256033315e+00 + -4.8715106729594604e+00 8.5228613524473396e-01 -5.9077264664893443e+00 + -5.1991886334219428e+00 3.3924889681593084e-01 -6.4193085530210947e+00 + -5.4052893094623071e+00 -2.8346689805703162e-01 -6.7423015599085669e+00 + -5.4600145271449270e+00 -9.3412164795187458e-01 -6.8489091094762928e+00 + -5.3976568077985103e+00 -1.5916124845385591e+00 -6.8191287731890782e+00 + -5.2699385450102207e+00 -2.2854647835322655e+00 -6.7742045389732732e+00 + -5.1573742274186802e+00 -3.0176174987651425e+00 -6.7771573930301452e+00 + -5.1624528902950750e+00 -3.5964397482697628e+00 -6.7509305116317027e+00 + id 13184 + loc 1.9629125297069550e-01 2.4233266711235046e-01 400 + blend 0.0000000000000000e+00 + interp 4.7507382940910364e-01:3.1281517940626169e-01:1.3350919617997037e-01:4.3372197809385538e-01:8.5006734259153027e-01:4.7506907867080955e-01:1.1514721809696993e+00:3.3526660309100864e-01:1.9574072783505612e+00:4.4852817428020719e-01:2.7474102018058364e+00:4.6889401485802712e-01:3.1122656462118128e+00:4.7083931040638027e-01:3.8843510276919249e+00 + CVs 20 + -1.0585455164693999e-01 1.8511343559767474e-01 1.9609317794489675e-01 + -2.2623227147381386e-01 3.7081484259470987e-01 4.2087388031631112e-01 + -3.6655145796140653e-01 5.4691493039739214e-01 6.4904466888000345e-01 + -5.2743391385580463e-01 7.0495073328674052e-01 8.6441731081585815e-01 + -7.0432681487826510e-01 8.3768090553344499e-01 1.0598384292988061e+00 + -8.8765401123468723e-01 9.3803758903444656e-01 1.2275149938217074e+00 + -1.0679490788416188e+00 1.0039251590597520e+00 1.3615803121679864e+00 + -1.2403660242078574e+00 1.0405889283813756e+00 1.4600198214217508e+00 + -1.4091954146809362e+00 1.0564143322970359e+00 1.5268462839566339e+00 + -1.5859538717756037e+00 1.0553361523662144e+00 1.5709423797136328e+00 + -1.7778433708855865e+00 1.0353817691869438e+00 1.6010716525015931e+00 + -1.9811785894697751e+00 9.9487955483978963e-01 1.6220508512501151e+00 + -2.1870475857604417e+00 9.4539890385083458e-01 1.6309192465787778e+00 + -2.3956239900663481e+00 9.0584134333675936e-01 1.6235131916958057e+00 + -2.6068493203417091e+00 8.5845157704441544e-01 1.6017226771862505e+00 + -2.7687996428449773e+00 7.2625848618413769e-01 1.5630468876315606e+00 + -2.8229079849488965e+00 3.8313919350362613e-01 1.5136360025566473e+00 + -2.9482069487072944e+00 -4.3896177176638851e-02 1.4817592036628759e+00 + -3.0987961297102453e+00 1.0076921800382954e-01 1.3743278824068164e+00 + id 13185 + loc 6.5454399585723877e-01 7.9433929920196533e-01 409 + blend 0.0000000000000000e+00 + interp 3.4675170791164506e-01:3.3698419399623980e-01:1.7446542129774800e-01:3.3854390555570274e-01:9.8556987867569201e-01:3.2531269186152295e-01:1.6981709150389035e+00:3.1448491484100033e-01:2.3397242281259967e+00:3.4674824039456598e-01:3.0107769196088587e+00:3.2267482618771881e-01:3.7422338476616628e+00 + CVs 20 + 5.1136474559343326e-01 8.9853938252759114e-02 -1.9465204105765088e-01 + 9.2721784152477438e-01 1.1862902510423090e-01 -3.7958999356150602e-01 + 1.3152455051569483e+00 1.2604725999493593e-01 -5.4010363453982291e-01 + 1.6857182723034827e+00 1.2378710597512099e-01 -6.7333912573982446e-01 + 2.0278346078212692e+00 1.1368901503449680e-01 -7.8238273445381457e-01 + 2.3349032455358039e+00 1.0097841523908468e-01 -8.7107873264686053e-01 + 2.6019401212230568e+00 9.4101386595696113e-02 -9.4314351060784840e-01 + 2.8281567335431683e+00 1.0450872816581147e-01 -1.0018915722360728e+00 + 3.0216806060079144e+00 1.4433090634833068e-01 -1.0471849047675090e+00 + 3.1983082153356852e+00 2.2449591645765232e-01 -1.0748740374581538e+00 + 3.3835581522639533e+00 3.4593608295924483e-01 -1.0849865310371856e+00 + 3.6064336221197935e+00 4.8501206596695123e-01 -1.0869674479341123e+00 + 3.8803044065636207e+00 6.0543238698034307e-01 -1.0925705778655233e+00 + 4.2021836194262132e+00 6.8211965510369721e-01 -1.1083327474825597e+00 + 4.5632959977698047e+00 7.0374698720462847e-01 -1.1441210055612694e+00 + 4.9514031215109995e+00 6.6399909858466022e-01 -1.2191053795861486e+00 + 5.3423323296419429e+00 5.5644263280365625e-01 -1.3376600799266274e+00 + 5.6890866028504172e+00 3.8606755763871137e-01 -1.4664628623490645e+00 + 5.8437817482335426e+00 1.8089570415816336e-01 -1.5795939590354071e+00 + id 13186 + loc 3.8627916574478149e-01 7.3097193241119385e-01 411 + blend 0.0000000000000000e+00 + interp 3.5487338748438058e-01:2.4762848921249506e-01:6.2472010039108317e-01:3.3608755899337572e-01:1.2170668141740653e+00:3.5486983875050576e-01:1.9470256150519125e+00:2.4924769223896806e-01:2.4005722613947258e+00:3.1960091800802709e-01:3.0308514149885712e+00:2.9067173313538613e-01:3.7756307347908677e+00 + CVs 20 + 8.4223922766287185e-01 1.8151117991075819e-01 -5.9266632345575290e-02 + 1.3909778312222218e+00 2.5233028661903034e-01 -8.2360113029723195e-02 + 1.8493116241058145e+00 2.8900494571305158e-01 -6.9507786745452743e-02 + 2.3065943046996193e+00 3.3094660491924882e-01 -1.5791996860577306e-02 + 2.7686797679031812e+00 3.7506548552794716e-01 7.6338119260139559e-02 + 3.2456785272074340e+00 4.1301006381747207e-01 1.9976566837748685e-01 + 3.7480881334764984e+00 4.3264613948629882e-01 3.4167855364273159e-01 + 4.2837406943567862e+00 4.1583515810338278e-01 4.8794801493224765e-01 + 4.8549796224266117e+00 3.3530459086856190e-01 6.2790614372779230e-01 + 5.4497816710508680e+00 1.6027940301699850e-01 7.4862999654278761e-01 + 6.0302794383575620e+00 -1.2981293473089939e-01 8.2769013232932531e-01 + 6.5427546732961392e+00 -5.3346448083455078e-01 8.4447224604828386e-01 + 6.9494267557936622e+00 -1.0313634719312963e+00 7.9629928580554132e-01 + 7.2373597579308946e+00 -1.5989336329655299e+00 6.9354998453114269e-01 + 7.4018461632462698e+00 -2.2022736707758863e+00 5.4806481124535555e-01 + 7.4430921923132889e+00 -2.7999080265125409e+00 3.7424913697652568e-01 + 7.3701898492969899e+00 -3.3564818782277941e+00 1.9142774318715366e-01 + 7.2045897856050818e+00 -3.8504632413288702e+00 1.3618079797884097e-02 + 7.0261110775975091e+00 -4.3468904502575905e+00 -1.4827214485242285e-01 + id 13187 + loc 8.2001739740371704e-01 6.8191811442375183e-02 399 + blend 0.0000000000000000e+00 + interp 4.5137260444561711e-01:4.5136809071957268e-01:2.2975695935781271e-01:3.0909093783516928e-01:9.5564519729731778e-01:2.4080234647585469e-01:1.5326820686105644e+00:3.6369838048918823e-01:2.2332678139756932e+00:4.2945942711936158e-01:3.0229487181925725e+00:2.6074774218300295e-01:3.5080267171277417e+00 + CVs 20 + 2.2370389473569838e-01 2.6592414339381265e-01 2.8501216660434925e-01 + 4.1100292128103272e-01 5.0335472660795677e-01 5.6081225346574182e-01 + 5.6724352606587936e-01 7.1677981021330228e-01 8.6021934163588587e-01 + 7.0367271190994085e-01 9.1112344369689624e-01 1.1982426083945488e+00 + 8.3401206114157511e-01 1.0889874417878769e+00 1.5708690238136200e+00 + 9.7051970671404397e-01 1.2491362150117000e+00 1.9705836612090171e+00 + 1.1217251021918573e+00 1.3854482229380749e+00 2.3910267723184209e+00 + 1.2955486935630567e+00 1.4862351396536433e+00 2.8262987628858833e+00 + 1.4995544708603596e+00 1.5333151533726412e+00 3.2682928835975189e+00 + 1.7372343363086182e+00 1.5042045527441203e+00 3.7038002967314689e+00 + 2.0067725655717958e+00 1.3778026332245223e+00 4.1147638366126227e+00 + 2.3038155191731255e+00 1.1499677834482114e+00 4.4822022876844114e+00 + 2.6223689384722673e+00 8.4807087905000311e-01 4.7941383430103093e+00 + 2.9558068209422772e+00 5.2930893188600603e-01 5.0607211947374537e+00 + 3.2925917382520078e+00 2.6095955312522712e-01 5.3163261872353589e+00 + 3.5930387227092302e+00 9.4243933017963855e-02 5.5971729896003986e+00 + 3.7982338214213187e+00 4.7916627401967782e-02 5.9258342103348793e+00 + 3.9338064587013424e+00 6.5756238745832585e-02 6.3235618039815984e+00 + 4.1649116298470661e+00 -2.0995631815012850e-03 6.8150181959393716e+00 + id 13188 + loc 3.8642223924398422e-02 4.5560291409492493e-01 393 + blend 0.0000000000000000e+00 + interp 4.7629864044162901e-01:3.9171480191130592e-01:4.7913390796757149e-01:4.6871780908203658e-01:9.7371103009590321e-01:3.2141899922108508e-01:1.5521169175320786e+00:4.3937969251161629e-01:2.0045526785737122e+00:2.8087386441813356e-01:2.6097526399969948e+00:3.1962245145658952e-01:2.9297262419131207e+00:4.7629387745522461e-01:3.5231422931887519e+00:3.1015673652801184e-01:3.9954879472234368e+00 + CVs 20 + -1.6835166561883419e-01 2.7473341178974203e-01 2.5245263967272713e-01 + -3.3189827607664707e-01 5.5279855839903880e-01 5.2190966835957431e-01 + -5.0380651520922504e-01 8.2498137823100082e-01 7.9361908598392117e-01 + -6.9001551654018922e-01 1.0764199214516978e+00 1.0590960508935419e+00 + -8.8640940115897415e-01 1.2915852156594563e+00 1.3146885505740522e+00 + -1.0816656835008420e+00 1.4569775354944661e+00 1.5525390194896274e+00 + -1.2610517177388518e+00 1.5679747297295270e+00 1.7636599187110100e+00 + -1.4180181057101913e+00 1.6350453655570927e+00 1.9479298981747388e+00 + -1.5626752590769106e+00 1.6752402073403720e+00 2.1191682573353336e+00 + -1.7153196923178982e+00 1.6975405305970239e+00 2.2968486107582007e+00 + -1.8916072950712459e+00 1.7010801122257981e+00 2.4948887705126701e+00 + -2.0972144276467635e+00 1.6812812786738747e+00 2.7192803988859167e+00 + -2.3276533866045122e+00 1.6454712467956911e+00 2.9632235104153568e+00 + -2.5716115214812021e+00 1.6275043828836293e+00 3.2007657547722572e+00 + -2.8346614729559509e+00 1.6521146132276114e+00 3.4010966306542914e+00 + -3.1372529855999449e+00 1.6895374271554706e+00 3.5401678057915054e+00 + -3.4892880999074989e+00 1.6750797900030721e+00 3.6051991864772330e+00 + -3.8531352112895640e+00 1.5929775823876098e+00 3.6601288013134257e+00 + -3.8568546676729532e+00 1.7066687027361143e+00 3.8965841282778455e+00 + id 13189 + loc 6.2903046607971191e-01 2.9947015643119812e-01 1081 + blend 0.0000000000000000e+00 + interp 1.5119050402287948e+00:2.6823404812985885e-01:3.7960374046841805e-01:2.5889752779872299e-01:1.6629804307398262e+00:1.5118950402287947e+00:3.7233686953496798e+00:6.6732170419918546e-01:3.7428617760260230e+00:3.3908604047023860e-01:3.7860569310059917e+00 + CVs 20 + 1.2093439561798494e-01 5.6990903461443077e-01 -6.6180889506253082e-01 + 1.7231247144707165e-01 1.0404649025831618e+00 -1.1279164460675757e+00 + 2.0988917938384216e-01 1.4697287488624906e+00 -1.5252137970254958e+00 + 2.4011019283401275e-01 1.9048765117073960e+00 -1.8969259984211979e+00 + 2.5677859258245350e-01 2.3465365797765889e+00 -2.2202986746107487e+00 + 2.5395392623291202e-01 2.8049009590343270e+00 -2.4617445914617653e+00 + 2.2561201679392595e-01 3.2942906366769331e+00 -2.5673097854555254e+00 + 1.6664221637365639e-01 3.8272295029200034e+00 -2.4195253693611352e+00 + 9.9508322905986213e-02 4.2682830350776753e+00 -1.6840478137085213e+00 + 2.0773325247104601e-01 3.9293599776079482e+00 -5.4779849153730020e-01 + 4.1484173844058547e-01 3.3071480925512269e+00 -2.0313931541159347e-02 + 5.8941988361162334e-01 2.8451637463872292e+00 2.3667269250986456e-01 + 7.4056763546850302e-01 2.4426058682207836e+00 4.2626679525297750e-01 + 8.7443967233998499e-01 2.0291252420306622e+00 5.7520142339497560e-01 + 9.9830554745800493e-01 1.5413988107099776e+00 6.4958467890927274e-01 + 1.1235727041286843e+00 9.1689307500888528e-01 5.4383854443081348e-01 + 1.2450326719991125e+00 2.6409395697223215e-01 1.7423736786064234e-01 + 1.3516587537455123e+00 -1.8579867274389605e-01 -2.6245174496247492e-01 + 1.4666075760534578e+00 -3.6848832567023271e-01 -4.1926730770548026e-01 + id 13190 + loc 4.9393582344055176e-01 4.1847473382949829e-01 380 + blend 0.0000000000000000e+00 + interp 4.2214801869626079e-01:3.2910828978679352e-01:3.0886128873346408e-03:3.0576369189766817e-01:7.7314831055758837e-01:4.1103723539283893e-01:1.0768305129876112e+00:3.3518173178060812e-01:1.8855498683725083e+00:4.2214379721607387e-01:2.3020915402672433e+00:2.7553420476712942e-01:2.8930986626777919e+00:4.2006316646330494e-01:3.1060916809771513e+00 + CVs 20 + -5.7055721450048291e-01 3.1439799413914848e-01 5.2901803755183807e-01 + -1.0217144309003763e+00 5.1408029613954931e-01 9.6842981175254805e-01 + -1.4681750174338173e+00 6.6555168798517172e-01 1.3761696689917198e+00 + -1.9542077458420120e+00 7.9567742656674456e-01 1.7787348486030794e+00 + -2.4720134353755121e+00 9.0174572797573072e-01 2.1704968083971568e+00 + -3.0124399517347804e+00 9.7426854135246876e-01 2.5485889757073363e+00 + -3.5678636275143307e+00 9.9791819002976578e-01 2.9081327078040813e+00 + -4.1324485948088032e+00 9.5416702971170508e-01 3.2356397257234653e+00 + -4.6987198985931462e+00 8.2613455975747851e-01 3.5157344361849732e+00 + -5.2517729584337678e+00 6.0439797297446551e-01 3.7393865871941809e+00 + -5.7681899972508308e+00 2.8778743914236360e-01 3.8974894582133208e+00 + -6.2210281721471770e+00 -1.1269688714244630e-01 3.9782547589079997e+00 + -6.5933992008323159e+00 -5.7058007937395550e-01 3.9808090824073634e+00 + -6.8928337681265965e+00 -1.0476301964216379e+00 3.9263182605463274e+00 + -7.1490062787359161e+00 -1.5215174168329808e+00 3.8528726281566645e+00 + -7.3957375214278640e+00 -2.0192177134834060e+00 3.8125471926282479e+00 + -7.6578081920162226e+00 -2.5884753019498388e+00 3.8743191134739705e+00 + -7.9142208704722954e+00 -3.1895296591502613e+00 4.0763450006663362e+00 + -8.0760871871603683e+00 -3.5835913190818980e+00 4.2235040533297399e+00 + id 13191 + loc 9.2522919178009033e-01 2.4523302912712097e-01 373 + blend 0.0000000000000000e+00 + interp 2.7371462460523333e-01:2.6229701937611388e-01:2.2359733240181756e-01:2.5574403377137123e-01:9.3546467716846260e-01:2.7371188745898728e-01:1.9767343789126490e+00:2.0634232666891653e-01:2.4217107165127993e+00:2.2089267150633546e-01:3.0413272650661400e+00 + CVs 20 + 2.0126137127078136e-01 3.3450978434156348e-01 1.0417847979558205e-01 + 4.4084542736846055e-01 6.6183304501722384e-01 2.0975841109529772e-01 + 7.4438520022614807e-01 9.3829283810662689e-01 3.1209574551794689e-01 + 1.0870872207395024e+00 1.1552710733168807e+00 4.0420036412724003e-01 + 1.4136692164827944e+00 1.3499110733141100e+00 4.8818481639493216e-01 + 1.6875130117903478e+00 1.5534761179599552e+00 5.7901838407088502e-01 + 1.9020655604234413e+00 1.7736503500892551e+00 6.9484237356198841e-01 + 2.0575841500444900e+00 2.0008328733661842e+00 8.4241520398820691e-01 + 2.1554471655479204e+00 2.2313178597764116e+00 1.0163867935540518e+00 + 2.2055540648381573e+00 2.4778497857355375e+00 1.2163784949932630e+00 + 2.2195073667953551e+00 2.7350234579690635e+00 1.4377335194043444e+00 + 2.2084366837816405e+00 2.9678577808227544e+00 1.6566357132518919e+00 + 2.1827303037724861e+00 3.1491825428037021e+00 1.8471408969040983e+00 + 2.1521143992652281e+00 3.2859567575477646e+00 1.9994971900871694e+00 + 2.1108807052598326e+00 3.3983308173763489e+00 2.1647972525982198e+00 + 1.9887453572986631e+00 3.3949656646436068e+00 2.4830797148718071e+00 + 1.7915465217747666e+00 3.0431885206059990e+00 2.9728951085913611e+00 + 1.7851273100577982e+00 2.3945102883978548e+00 3.4078821502796139e+00 + 1.8811907624522022e+00 2.1399970419013794e+00 3.6187676503884498e+00 + id 13192 + loc 4.1282644867897034e-01 6.0042464733123779e-01 402 + blend 0.0000000000000000e+00 + interp 4.8879246607458426e-01:3.9983206174746366e-01:2.8047244746232214e-02:2.9465353107538589e-01:1.0278595010297054e+00:3.5886975369504787e-01:1.8094998822837933e+00:4.8878757814992352e-01:2.2278896772740318e+00:4.1287900129179322e-01:2.9437103194037015e+00:2.8551700647781525e-01:3.4186299540178995e+00 + CVs 20 + -4.1199361268072235e-02 3.6283792844368068e-01 -2.2478856846484307e-01 + -9.3942481814089873e-02 7.0010027137774800e-01 -4.5192048912869165e-01 + -1.2258705045987356e-01 1.0210738797334602e+00 -7.0861036084033280e-01 + -1.1899613299402140e-01 1.3203822847522979e+00 -1.0008093135034717e+00 + -9.4299290509884504e-02 1.5859598515396161e+00 -1.3177209218824193e+00 + -5.4682862420330380e-02 1.8089249430790111e+00 -1.6471479970263618e+00 + 2.3981558940677772e-05 1.9869625663196930e+00 -1.9800700260208326e+00 + 6.9339367735217095e-02 2.1246340867816000e+00 -2.3129920337133969e+00 + 1.4767451550017008e-01 2.2287494044501495e+00 -2.6434453579623698e+00 + 2.2780170886005313e-01 2.3057287359911571e+00 -2.9645821609898366e+00 + 3.0887696823217892e-01 2.3627065604270698e+00 -3.2747034847150731e+00 + 3.9677870153040495e-01 2.4006730199816726e+00 -3.5901505107198606e+00 + 4.9662855101070569e-01 2.3970917419172042e+00 -3.9399646164579480e+00 + 6.0225077446616138e-01 2.2969896701859662e+00 -4.3462082887231945e+00 + 6.7799652519019693e-01 2.0423723586812024e+00 -4.8023119905097671e+00 + 6.5249635813622453e-01 1.6125754507521899e+00 -5.2772238187442939e+00 + 4.2353924006710908e-01 1.0575855009815807e+00 -5.7433708946379278e+00 + -4.6722535677379939e-02 5.8050883154893396e-01 -6.1642760616972199e+00 + -3.4306090728901883e-01 4.9952195604594918e-01 -6.3526551725202935e+00 + id 13193 + loc 5.6474059820175171e-01 2.9192364215850830e-01 395 + blend 0.0000000000000000e+00 + interp 4.8408869101105889e-01:2.8960412871492752e-01:6.8550753464549563e-01:3.0585997840585999e-01:1.2219465773870197e+00:3.2741469345331581e-01:2.0264455232595417e+00:4.8408385012414878e-01:3.0021256109698014e+00:2.6769007033946052e-01:3.9914377155069554e+00 + CVs 20 + -2.5267794927025988e-01 1.4821582264842523e-01 3.6944653074980616e-01 + -4.6697220899817982e-01 2.5365022531772635e-01 6.6651722998891949e-01 + -6.6405717532914588e-01 3.4044519796756995e-01 9.4156153263199860e-01 + -8.5171296373015160e-01 4.2233020087166340e-01 1.2169773735410816e+00 + -1.0294339675329813e+00 5.0182557997071020e-01 1.4900587069539459e+00 + -1.1974729229110697e+00 5.8077418948563264e-01 1.7588305652066840e+00 + -1.3560620243420345e+00 6.6247313668829433e-01 2.0244581106057540e+00 + -1.5059242556018555e+00 7.5169961386900397e-01 2.2916534342156680e+00 + -1.6522851156982608e+00 8.5166189867654152e-01 2.5646575108183720e+00 + -1.8053752246728725e+00 9.6011163196435989e-01 2.8428781459147627e+00 + -1.9729471039487025e+00 1.0655199816815619e+00 3.1279140085698725e+00 + -2.1526542385781813e+00 1.1452012319327949e+00 3.4323306384096228e+00 + -2.3341620619879739e+00 1.1755161736835187e+00 3.7684597614101500e+00 + -2.5089453931509427e+00 1.1456030379181186e+00 4.1330574251421304e+00 + -2.6724520324793817e+00 1.0571845606685084e+00 4.5120241316899516e+00 + -2.8210775738742075e+00 9.1610846741678742e-01 4.8975092426000462e+00 + -2.9503139463145600e+00 7.2291603183690212e-01 5.2883764193209872e+00 + -3.0511127513787502e+00 4.7667655423595612e-01 5.6678874856104002e+00 + -3.0640937477323922e+00 2.0809819639035876e-01 5.9216135491840820e+00 + id 13194 + loc 4.6718403697013855e-01 1.5603269636631012e-01 396 + blend 0.0000000000000000e+00 + interp 4.4745271873045739e-01:3.8656068116501241e-01:4.0632186385021307e-01:3.4381140167916813e-01:1.2526145233344554e+00:3.2500058068878535e-01:2.2596649261340391e+00:2.7314396729727958e-01:3.0739790218512253e+00:4.4744824420327012e-01:3.8253724540042704e+00 + CVs 20 + -3.1017982643906961e-01 1.9825263988062106e-01 -5.8538723436630991e-01 + -5.5629207612850329e-01 2.7192455627970580e-01 -1.0120341622037421e+00 + -7.8262014768587229e-01 2.9358172735447563e-01 -1.4027315948624470e+00 + -1.0020397804645886e+00 2.9221016412837630e-01 -1.8043877870018181e+00 + -1.2124494049059971e+00 2.6084644572786031e-01 -2.2129380194681936e+00 + -1.4134268275346966e+00 1.9106851502796673e-01 -2.6237949421461937e+00 + -1.6074138837577392e+00 7.8200476754886505e-02 -3.0284217267181566e+00 + -1.7955626986883999e+00 -7.8876722924323683e-02 -3.4134042369051065e+00 + -1.9735458389957428e+00 -2.7968031848546726e-01 -3.7643563215643971e+00 + -2.1355141382237104e+00 -5.2061822886737863e-01 -4.0676340047575064e+00 + -2.2833885736886455e+00 -7.9449788004280109e-01 -4.3106342439198571e+00 + -2.4292237346997689e+00 -1.0948705472186173e+00 -4.4843503579655541e+00 + -2.5835620699311965e+00 -1.4144400260689005e+00 -4.5857694863574086e+00 + -2.7481156135557447e+00 -1.7407344019367668e+00 -4.6196889331129025e+00 + -2.9210908963878692e+00 -2.0547040895327831e+00 -4.5927551641966531e+00 + -3.0982008850407854e+00 -2.3316910621065405e+00 -4.5129835201528756e+00 + -3.2748989106979911e+00 -2.5587790343621761e+00 -4.3949582302570533e+00 + -3.4541772507739226e+00 -2.7601611820048633e+00 -4.2567475257143084e+00 + -3.6795566475686976e+00 -3.1112062837413506e+00 -4.1072125219168445e+00 + id 13195 + loc 2.5893306732177734e-01 1.0442604869604111e-01 1068 + blend 0.0000000000000000e+00 + interp 3.3363860578835897e-01:2.8514809406727115e-01:9.4808206550937535e-01:3.3363526940230109e-01:1.4290491415160607e+00:3.3098548608256267e-01:1.9967838742921549e+00:2.9286715352762988e-01:2.9979656722854342e+00:2.9615446228173142e-01:3.9997380866891894e+00 + CVs 20 + -1.2797124306403956e-01 2.2741329745547634e-01 -3.2801927641666589e-01 + -2.6238256440723356e-01 4.7226149759567010e-01 -6.2932885613028555e-01 + -4.0758099812752863e-01 7.2018191930305664e-01 -9.2314653022816662e-01 + -5.7621280857078738e-01 9.7083205235126457e-01 -1.2111782798197188e+00 + -7.8260408783204161e-01 1.2240279847668036e+00 -1.4811925829131440e+00 + -1.0387541895972265e+00 1.4701398978881111e+00 -1.7187564155848172e+00 + -1.3487205333085590e+00 1.6882048388629380e+00 -1.9092095948921295e+00 + -1.7030032975196083e+00 1.8498373149171792e+00 -2.0437223063586001e+00 + -2.0804231745732102e+00 1.9297332505411036e+00 -2.1228126773335996e+00 + -2.4537610926447759e+00 1.9158858629304185e+00 -2.1520862073129727e+00 + -2.7936283426159303e+00 1.8140537699641821e+00 -2.1398241834402740e+00 + -3.0791365294301696e+00 1.6458430931441397e+00 -2.0990294231494859e+00 + -3.3110597386951883e+00 1.4344830368180463e+00 -2.0440555152816207e+00 + -3.5034635480833680e+00 1.1943681663233003e+00 -1.9869402297438188e+00 + -3.6675919942482218e+00 9.3480162642723985e-01 -1.9383530964085907e+00 + -3.8045670610619737e+00 6.6800327035644047e-01 -1.9114504486557726e+00 + -3.9107552553311131e+00 4.0949968186978386e-01 -1.9286438762410449e+00 + -3.9939740424338783e+00 1.5245605009964036e-01 -2.0328297939393685e+00 + -4.0706840149884655e+00 -1.3435087336385285e-01 -2.2500668300603173e+00 + id 13196 + loc 5.1792744547128677e-02 9.9203282594680786e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6552669220135756e-01:4.6552203693443556e-01:2.4500762121537945e-01:2.6627733502688639e-01:1.0611299558272260e+00:3.3208178566556634e-01:1.9617861100080110e+00:3.4789167697061141e-01:2.6246596491801215e+00:3.3260432134566958e-01:3.2077274923059242e+00:3.7198552809388385e-01:3.9871379229820345e+00 + CVs 20 + 9.9253799849120888e-02 2.4222842370773376e-01 1.4899353137596993e-02 + 2.1455538774628927e-01 4.2901096924606208e-01 -1.4775523701542781e-02 + 3.3264283668845668e-01 6.0618036670526365e-01 -5.0711486970672626e-02 + 4.4585467846115501e-01 7.7610743792816450e-01 -8.3657562143219233e-02 + 5.5188253789423580e-01 9.3880391816833109e-01 -1.1862640079885245e-01 + 6.4724399381778830e-01 1.0965945462003799e+00 -1.6114214823626322e-01 + 7.2747020836978626e-01 1.2522686819689604e+00 -2.1688285761470327e-01 + 7.8762923320075895e-01 1.4082176530137518e+00 -2.9026048594552145e-01 + 8.2265156881419277e-01 1.5638154461467093e+00 -3.8403876513424584e-01 + 8.2908036368615434e-01 1.7119438086827237e+00 -4.9932285841380164e-01 + 8.0680762174435050e-01 1.8402032397974784e+00 -6.3573703311313257e-01 + 7.6114970147716599e-01 1.9339610413686610e+00 -7.8945522041834759e-01 + 7.0329609987350594e-01 1.9834679850834562e+00 -9.5111258306238700e-01 + 6.4257642994429842e-01 1.9912253274109504e+00 -1.1111450898199429e+00 + 5.7860155200876873e-01 1.9670167649310204e+00 -1.2669403303957456e+00 + 5.0736488815960934e-01 1.9174489949622815e+00 -1.4191834653533295e+00 + 4.3412651025280774e-01 1.8449848158839617e+00 -1.5631212152562224e+00 + 3.7548623385590252e-01 1.7566855630434790e+00 -1.6885449101062955e+00 + 3.5989675709658420e-01 1.6763213615606023e+00 -1.7783448982064252e+00 + id 13197 + loc 5.5061215162277222e-01 7.5562328100204468e-02 414 + blend 0.0000000000000000e+00 + interp 4.0786484446979117e+00:4.0786384446979120e+00:9.1625889624694801e-01:2.3589785685731126e+00:9.7647409010545017e-01:2.7145887631972854e-01:1.0236913895914173e+00:4.3324679739586086e-01:1.8645954526200810e+00:2.5739994352925250e-01:2.8637696886297697e+00:6.7325326531480079e-01:2.9828482893227144e+00:1.1113698374232035e+00:2.9986536616794051e+00 + CVs 20 + -9.0994326131768000e-01 1.9470698234758632e-01 1.4264148160208873e-01 + -1.4339036619753536e+00 2.4564500651933407e-01 2.7377189427285120e-01 + -1.8518244033084605e+00 2.4442686565618871e-01 4.0251856452573875e-01 + -2.2708639571222262e+00 2.3431292817588231e-01 5.2875067280545318e-01 + -2.6868197454795042e+00 2.1224157679685979e-01 6.5318914464022082e-01 + -3.0992686584392275e+00 1.7908066534949690e-01 7.7138679071012728e-01 + -3.5095028924888103e+00 1.3756980335130753e-01 8.7175276451611228e-01 + -3.9160763383515307e+00 9.0006807427927105e-02 9.4297060849096237e-01 + -4.3127017892017907e+00 3.7010772683659376e-02 9.8051186540411583e-01 + -4.6902611152194131e+00 -1.7779492862339819e-02 9.8312733799316110e-01 + -5.0522562306099701e+00 -6.0101389290821317e-02 9.3552275083221081e-01 + -5.4260835035392052e+00 -8.4000544395464449e-02 8.0761108297874118e-01 + -5.8341494050214848e+00 -1.3257050766251910e-01 6.1018241542552665e-01 + -6.2605181017491809e+00 -2.6495265649220889e-01 4.0848984464831262e-01 + -6.6756099975649885e+00 -4.9305040293237923e-01 2.4423548272310824e-01 + -7.0615680064673017e+00 -8.0130673660636575e-01 1.1784384098456535e-01 + -7.4004205512389252e+00 -1.1694031172816937e+00 3.0918985361464535e-02 + -7.6628235306978851e+00 -1.5614688136784427e+00 3.6801481905146538e-03 + -7.7253214055101100e+00 -1.8880697066272003e+00 1.0689506806910443e-01 + id 13198 + loc 7.6400369405746460e-01 4.6858611702919006e-01 403 + blend 0.0000000000000000e+00 + interp 4.7006376294312652e-01:3.3645342919631710e-01:5.4229412592180104e-01:4.7005906230549710e-01:9.9986293176658303e-01:3.7535902342144811e-01:1.6069132637105259e+00:3.3729009074799515e-01:2.1732139231155028e+00:3.1895696273077778e-01:3.2582813824594030e+00:4.5844798415667465e-01:3.9996617585283114e+00 + CVs 20 + -3.4757312156932493e-02 8.7393814305648798e-02 2.8342872068982877e-02 + -8.0225180171750704e-02 1.8112896502847531e-01 6.6441386894718818e-02 + -1.4222673465631916e-01 2.8121538917150346e-01 1.0258851254082001e-01 + -2.2226613826513120e-01 3.9072267269683569e-01 1.3263501883690221e-01 + -3.1524594504519104e-01 5.1429005917525150e-01 1.6233349117093376e-01 + -4.1249647364709618e-01 6.5831726338287500e-01 1.9865508160773251e-01 + -5.0066477936906584e-01 8.3017880368930830e-01 2.4810167471253591e-01 + -5.5956439739697894e-01 1.0363555638729984e+00 3.1629788260724429e-01 + -5.6219558789641066e-01 1.2760081642354675e+00 4.0536658350664911e-01 + -4.8320315419059123e-01 1.5338626034430660e+00 5.0801209598603114e-01 + -3.1341270180545100e-01 1.7830226653966534e+00 6.0661340029936073e-01 + -6.0388610001176346e-02 1.9979901921778311e+00 6.8220891068382228e-01 + 2.5855699448709246e-01 2.1603858962825315e+00 7.1903874067716966e-01 + 6.1471673170133745e-01 2.2622144876606001e+00 7.0324342538602758e-01 + 9.7340200078535710e-01 2.3103023529057753e+00 6.2421209334758510e-01 + 1.3120738293049681e+00 2.3151611130551801e+00 4.7411429881622885e-01 + 1.6200933124661991e+00 2.2747551908365007e+00 2.4638842879148343e-01 + 1.8812687224257365e+00 2.1860489419079916e+00 -4.4056010571082965e-02 + 2.1005048183783273e+00 2.1772024061646835e+00 -1.3423681394248116e-01 + id 13199 + loc 1.1854162812232971e-01 3.9737671613693237e-01 1080 + blend 0.0000000000000000e+00 + interp 6.3466842216686492e-01:3.1319227588176318e-01:1.4554819157513998e-03:3.3543687492316132e-01:7.5316353601768360e-01:6.3466207548264331e-01:2.6240928949305653e+00:3.0075831574315987e-01:2.7841187917222685e+00:3.0718661277967158e-01:3.2993020075630723e+00 + CVs 20 + 5.3262713080268909e-01 2.6006490648615338e-01 1.5355405511375630e-01 + 8.6943913259840222e-01 4.1668614648003394e-01 2.5654195400618740e-01 + 1.1470978981282265e+00 5.1634274363701715e-01 3.4367823795768510e-01 + 1.4383776559020880e+00 6.0215026420510465e-01 4.5360882836960126e-01 + 1.7372679137168392e+00 6.7295729074677846e-01 5.8830511792623086e-01 + 2.0377517020900666e+00 7.2713150196701493e-01 7.5140260058057640e-01 + 2.3335642381007005e+00 7.6266763938832616e-01 9.4727307143761874e-01 + 2.6175842322703020e+00 7.7691519401571563e-01 1.1790972315222801e+00 + 2.8818423114458689e+00 7.6733307088948677e-01 1.4469645917975800e+00 + 3.1185245799913148e+00 7.3299720412467462e-01 1.7469669792577351e+00 + 3.3214551434785693e+00 6.7548639154768331e-01 2.0718400248446982e+00 + 3.4871378682139582e+00 5.9844636484624103e-01 2.4126032598918310e+00 + 3.6146541846302989e+00 5.0560039382146638e-01 2.7617016373000434e+00 + 3.7040720066723507e+00 3.9840151259602985e-01 3.1159077754216398e+00 + 3.7557448722788593e+00 2.7670854203549911e-01 3.4732303529665387e+00 + 3.7725124093369193e+00 1.4168702029492164e-01 3.8278871266848609e+00 + 3.7608982565403299e+00 -3.6173821340010903e-03 4.1730160146462705e+00 + 3.7268387863605628e+00 -1.5526432753253050e-01 4.5079854874874652e+00 + 3.6683401040544599e+00 -2.8825569345930235e-01 4.8430655161166385e+00 + id 13200 + loc 9.8131543397903442e-01 8.8022798299789429e-01 377 + blend 0.0000000000000000e+00 + interp 5.1906975708055925e-01:2.5182546008871010e-01:5.8668182594640572e-02:2.9440568842890597e-01:1.0153085480441915e+00:5.1906456638298848e-01:1.8495827511708627e+00:3.0440276971763852e-01:2.2815789694508517e+00:4.0883164500554814e-01:3.0330211679452903e+00:1.9070855324766850e-01:3.8778402509632937e+00 + CVs 20 + -6.0921406038565751e-01 1.7724513452825347e-01 -7.8087900065724170e-01 + -1.0676821684265836e+00 2.1252103960363444e-01 -1.2964258254156678e+00 + -1.4855346453487526e+00 1.9686545036097625e-01 -1.7365474443535038e+00 + -1.9023625732467901e+00 1.6292626754643702e-01 -2.1762484794695327e+00 + -2.3092351991961664e+00 1.0788435333605129e-01 -2.6171292847131573e+00 + -2.7002243517308311e+00 2.8341393900180423e-02 -3.0576500186882893e+00 + -3.0730876969242948e+00 -8.1782373333266989e-02 -3.4902981282773320e+00 + -3.4243642488794612e+00 -2.3012679588122298e-01 -3.9050149696580148e+00 + -3.7460030854809179e+00 -4.2274931153891404e-01 -4.2940665146213135e+00 + -4.0296179574027473e+00 -6.5883354979893549e-01 -4.6497207523222857e+00 + -4.2712523097745994e+00 -9.2400304315792781e-01 -4.9620700421262285e+00 + -4.4732805145014032e+00 -1.1979609235566135e+00 -5.2245681979584058e+00 + -4.6413759710584079e+00 -1.4820797150014169e+00 -5.4387367888560503e+00 + -4.7772218082054909e+00 -1.8169194028282689e+00 -5.5955671098374333e+00 + -4.8785495214662804e+00 -2.2312796923423326e+00 -5.6749205529842568e+00 + -4.9447973371020693e+00 -2.7041113390240135e+00 -5.6911859501268891e+00 + -4.9732090833437939e+00 -3.1937133030464557e+00 -5.6943049262831460e+00 + -4.9912301790860312e+00 -3.6473498500611066e+00 -5.7193529698317329e+00 + -5.1191020826531766e+00 -3.9309963366506921e+00 -5.7297997787739039e+00 + id 13201 + loc 1.6493102908134460e-01 8.3022499084472656e-01 374 + blend 0.0000000000000000e+00 + interp 5.8301764797868549e-01:5.6611687514050402e-01:3.6826736017368178e-01:5.8301181780220568e-01:1.0146580354313153e+00:3.5350525005509115e-01:1.9126597803617427e+00:3.5820870286853751e-01:2.7819241655611187e+00:3.6273594546784305e-01:3.1963078913062852e+00:3.6191084073023311e-01:3.9424084086076303e+00 + CVs 20 + -6.1479668812770916e-01 3.0092088123725697e-01 -3.0794566743343021e-02 + -1.1001718297140584e+00 5.2541959157830798e-01 -9.0660818598677917e-03 + -1.5813627207008285e+00 7.1567364413867329e-01 5.4240393441318868e-02 + -2.1143284245481317e+00 9.1113046347706861e-01 1.3955531359730156e-01 + -2.6927082166217575e+00 1.1336148346877042e+00 2.1208816753316995e-01 + -3.3114714787882749e+00 1.3778929463056058e+00 2.2894286567325861e-01 + -3.9666537068126049e+00 1.6054947329754978e+00 1.5169830940882290e-01 + -4.6348912203334507e+00 1.7681602504342790e+00 -4.0674914789623040e-02 + -5.2769032077422393e+00 1.8298886868494559e+00 -3.4294333224692708e-01 + -5.8606360022903354e+00 1.7699716135639103e+00 -7.2667207792469779e-01 + -6.3748053067878416e+00 1.5741922376530315e+00 -1.1529101805188353e+00 + -6.8138050347089596e+00 1.2292989414334778e+00 -1.5816052722896206e+00 + -7.1538306752821530e+00 7.4212374178461316e-01 -1.9704012927629264e+00 + -7.3755391550536258e+00 1.6243856264723711e-01 -2.2933297657590499e+00 + -7.5076572047911956e+00 -4.4691379425991196e-01 -2.5679557843224536e+00 + -7.6200034026704584e+00 -1.0548638274866633e+00 -2.8276889968448353e+00 + -7.7833002381717789e+00 -1.6628519944356901e+00 -3.0696168947481226e+00 + -8.0164317791623922e+00 -2.2611828925913158e+00 -3.2674612231749371e+00 + -8.1670955400043432e+00 -2.8013969824179785e+00 -3.4492445572393629e+00 + id 13202 + loc 9.7142881155014038e-01 4.2168134450912476e-01 411 + blend 0.0000000000000000e+00 + interp 4.1170934535354597e-01:2.7336819964194986e-01:2.0663587245126014e-01:4.1099981682391257e-01:9.2470923650687065e-01:4.1170522826009248e-01:1.2915655229508340e+00:2.3613899667064717e-01:2.0280095577252117e+00:2.9049190493853483e-01:3.0001185195228999e+00:4.0266379676422853e-01:3.8106982423380105e+00 + CVs 20 + -6.2409399683640632e-01 8.4778851994066762e-02 2.5846923350797213e-01 + -1.0294947898372684e+00 4.2906074787349868e-02 4.8032962473455088e-01 + -1.3924581807524237e+00 -3.7696688336725126e-02 7.0643469229509914e-01 + -1.7719854900794882e+00 -1.0687496106402072e-01 9.4291342537244471e-01 + -2.1745740061415488e+00 -1.6051720023583349e-01 1.1834894017468134e+00 + -2.6040466320273823e+00 -1.9954787970606302e-01 1.4208915091833743e+00 + -3.0597229617349315e+00 -2.2836341191176479e-01 1.6518180649111633e+00 + -3.5386415047090303e+00 -2.5882652930717742e-01 1.8736000535403359e+00 + -4.0316448229214652e+00 -3.1121101598193190e-01 2.0793313088500356e+00 + -4.5183459611099845e+00 -4.0505032617410719e-01 2.2654014562287008e+00 + -4.9823001576677566e+00 -5.5737728149905985e-01 2.4420325658153246e+00 + -5.4237344558505729e+00 -7.8438458548107737e-01 2.6240436279941290e+00 + -5.8418303597380303e+00 -1.0895186297541777e+00 2.8119817393134006e+00 + -6.2229489341100601e+00 -1.4537329423409258e+00 2.9961324699901697e+00 + -6.5527564516152035e+00 -1.8509117378495281e+00 3.1719855183529559e+00 + -6.8229952622708065e+00 -2.2680810352251806e+00 3.3380639930453064e+00 + -7.0285207368062821e+00 -2.6971591021954469e+00 3.4897336966612489e+00 + -7.1715877991460744e+00 -3.1095628290659185e+00 3.6233721501356788e+00 + -7.2958916965216023e+00 -3.4283014007604140e+00 3.7391741471523670e+00 + id 13203 + loc 6.0904633998870850e-01 6.7907965183258057e-01 409 + blend 0.0000000000000000e+00 + interp 3.7209493064813814e-01:3.1939135589030127e-01:2.4457927457193851e-01:3.7209120969883169e-01:1.0065830979640158e+00:3.2961877456053035e-01:1.6469349338982928e+00:3.3698419399623980e-01:2.1731198664309184e+00:3.0582797994414990e-01:2.9911971740614076e+00:3.6486729690821385e-01:3.6023643811023476e+00 + CVs 20 + 4.2750985710485595e-01 1.0167487075241280e-01 -1.5406995918678562e-01 + 7.7761291731943105e-01 1.6099992100426547e-01 -3.2370090141888208e-01 + 1.1057422272512349e+00 2.0280371408640319e-01 -4.9330769000158703e-01 + 1.4313024363484137e+00 2.3532877214518144e-01 -6.5787399012019177e-01 + 1.7518079562340882e+00 2.5550431026269727e-01 -8.1935731750986629e-01 + 2.0646261380578181e+00 2.6165071270544704e-01 -9.7838437555460389e-01 + 2.3650106010333052e+00 2.5419229380985087e-01 -1.1339315189872319e+00 + 2.6495457375062954e+00 2.3557823494646946e-01 -1.2844034649837643e+00 + 2.9148491772748724e+00 2.0899420404108970e-01 -1.4268791731422390e+00 + 3.1538401826068116e+00 1.7909903460543064e-01 -1.5568726996801876e+00 + 3.3595194212399315e+00 1.5408312964695137e-01 -1.6713314270350339e+00 + 3.5391412213481930e+00 1.3708910227621640e-01 -1.7716450335319016e+00 + 3.7129839056944323e+00 1.1726230336092969e-01 -1.8624076633780431e+00 + 3.8962850638855753e+00 8.0223766451606116e-02 -1.9472577294636777e+00 + 4.0946097866607731e+00 1.7488663740944155e-02 -2.0283743358173796e+00 + 4.3105975966514629e+00 -7.8877257190982153e-02 -2.1112297082939047e+00 + 4.5436294144814919e+00 -2.2349075114591210e-01 -2.2034083601486660e+00 + 4.7806771500202379e+00 -4.2573562187506298e-01 -2.3008900052884260e+00 + 4.9695155978672503e+00 -7.1995331004692265e-01 -2.3915722834501869e+00 + id 13204 + loc 1.3794280588626862e-01 4.6593025326728821e-01 400 + blend 0.0000000000000000e+00 + interp 4.9851789521704359e-01:3.5158832214972940e-01:4.3980630224115247e-03:4.9851291003809145e-01:6.8869075836655336e-01:4.8573842938151213e-01:1.0452728086879930e+00:2.9939513224234748e-01:1.6197002560984366e+00:3.6432058163154057e-01:2.1828696496175644e+00:2.8020447533327703e-01:3.3431074945601975e+00 + CVs 20 + -1.3901086332512955e-02 4.2503363154255352e-01 2.7942426655828534e-01 + -9.3078805439265055e-02 8.3944381277163937e-01 5.2726407871498115e-01 + -2.4951158991426375e-01 1.2334821878733184e+00 7.5815027707618710e-01 + -4.8216794791606898e-01 1.5954939306156404e+00 9.7125683453977252e-01 + -7.8166460734139120e-01 1.9164475365173184e+00 1.1623037777444472e+00 + -1.1347806449896791e+00 2.1900334947240419e+00 1.3277748089231898e+00 + -1.5262611362142473e+00 2.4122143415254786e+00 1.4625772943208997e+00 + -1.9379715904377011e+00 2.5804625802223624e+00 1.5582468054059571e+00 + -2.3492863868162805e+00 2.6945481905171338e+00 1.6043908008898125e+00 + -2.7388897399380001e+00 2.7569671518408843e+00 1.5927352020054057e+00 + -3.0952093851343547e+00 2.7764690389734263e+00 1.5291171195726054e+00 + -3.4369892881906687e+00 2.7668755492885357e+00 1.4390482725334830e+00 + -3.8117895087634852e+00 2.7279678293942817e+00 1.3495066388521619e+00 + -4.2869009274820602e+00 2.6310719368670070e+00 1.2949354136392985e+00 + -4.8207678324569931e+00 2.4555181765322089e+00 1.3163776092478012e+00 + -5.2669319302559545e+00 2.2692345141663952e+00 1.4015566807364235e+00 + -5.6778008475868820e+00 2.0727509479476933e+00 1.5515551078533056e+00 + -6.0784688216353793e+00 1.8636730041165568e+00 1.7748213518114078e+00 + -6.3026561058546147e+00 1.7999620494782873e+00 2.0096650409814716e+00 + id 13205 + loc 8.5138380527496338e-01 9.1654479503631592e-01 375 + blend 0.0000000000000000e+00 + interp 4.3842066761424253e-01:3.5999613556346421e-01:1.6658483719557504e-01:4.3841628340756639e-01:7.6077269050509189e-01:3.8457350141459828e-01:1.0073167561303016e+00:3.4263456236681622e-01:1.8733290159720619e+00:2.1599457609199074e-01:2.0183012338137081e+00:2.1514950651908521e-01:3.0119229163753567e+00:2.4997026834498848e-01:3.5934070658508110e+00 + CVs 20 + -3.7184579948806196e-01 3.6127844696081346e-01 -2.4723407577520815e-01 + -7.4972891219140070e-01 6.1409380177271855e-01 -4.1048127212974994e-01 + -1.1761216974258266e+00 7.3588401636835665e-01 -5.1789779972687178e-01 + -1.6626598034409374e+00 7.6652533228468556e-01 -5.8964653687984647e-01 + -2.1923634109658821e+00 7.8376598531718644e-01 -6.4851062145500338e-01 + -2.7466140830380343e+00 8.4191151046057067e-01 -7.3937394976253579e-01 + -3.2988817871155929e+00 9.5496746097447605e-01 -9.1445385378006394e-01 + -3.8119159003224450e+00 1.1190013208082519e+00 -1.1996917899233930e+00 + -4.2444846268676111e+00 1.3217569002217127e+00 -1.5828248515407275e+00 + -4.5712493821311018e+00 1.5355426841065927e+00 -2.0239720764121798e+00 + -4.8028980742122247e+00 1.7291818335735945e+00 -2.4826141529396928e+00 + -4.9611330862126737e+00 1.8897344267037497e+00 -2.9350462599292553e+00 + -5.0502832597053544e+00 2.0179036541064534e+00 -3.3804209673888863e+00 + -5.0647953723860901e+00 2.1008351548661257e+00 -3.8353195064706886e+00 + -4.9805288331492124e+00 2.1456378589391960e+00 -4.2742455106999628e+00 + -4.7276846420305940e+00 2.2349337078312668e+00 -4.6181287530539663e+00 + -4.1837511430979877e+00 2.3867206160707006e+00 -4.9020322596841073e+00 + -3.5241224753193650e+00 2.2460273619418416e+00 -5.1664798922386606e+00 + -3.3596872585519897e+00 1.8832123219777919e+00 -5.1686413852221822e+00 + id 13206 + loc 1.4934109151363373e-01 4.2617848515510559e-01 415 + blend 0.0000000000000000e+00 + interp 4.3329769532759327e-01:2.9096716650580223e-01:8.0600079940571900e-01:2.8201236152652476e-01:1.4172459622946105e+00:2.8123103639933023e-01:2.2383735636570803e+00:3.5300730243146261e-01:3.0266215978270852e+00:4.3329336235064003e-01:3.8968941149257099e+00 + CVs 20 + 1.8412203834146976e-02 1.2708559627565724e-01 -1.7106856785227786e-01 + 1.8207497839576786e-02 2.2868926035303067e-01 -2.6624989273038030e-01 + 9.5770045642765422e-03 3.2192427468991314e-01 -3.2822460973887790e-01 + 7.7824438081462999e-03 4.1590737710142001e-01 -3.8542664219736700e-01 + 1.4508505871465183e-02 5.1063733104824061e-01 -4.3773351741821909e-01 + 3.0188829693538477e-02 6.0667207879590057e-01 -4.8456660752689051e-01 + 5.4088949270489239e-02 7.0372150551919010e-01 -5.2593800591074946e-01 + 8.4554645444602450e-02 8.0041488593785437e-01 -5.6201015997493131e-01 + 1.1947282425225636e-01 8.9480386170549708e-01 -5.9269547411684298e-01 + 1.5892977041603013e-01 9.8577037266119660e-01 -6.1725123111698366e-01 + 2.0629966503899400e-01 1.0742071951227894e+00 -6.3487635481354876e-01 + 2.6776052268740885e-01 1.1594670434259537e+00 -6.4393504042707561e-01 + 3.4553035987944014e-01 1.2350990594794493e+00 -6.4127717563607556e-01 + 4.3513603699173098e-01 1.2932439696985543e+00 -6.2349797919751315e-01 + 5.3597234409709371e-01 1.3316606744701662e+00 -5.8776572521233916e-01 + 6.5657735905763503e-01 1.3509978559277973e+00 -5.3188612778402267e-01 + 8.0368331758677347e-01 1.3506247558692057e+00 -4.5693242035720666e-01 + 9.6807286721252583e-01 1.3295222489165210e+00 -3.6803309366516246e-01 + 1.1079411883224406e+00 1.2524373108435178e+00 -2.5644759262169592e-01 + id 13207 + loc 8.8674414157867432e-01 6.7223888635635376e-01 380 + blend 0.0000000000000000e+00 + interp 4.6696472805856082e-01:2.9319958152628084e-01:4.7444348807463343e-01:4.6696005841128024e-01:9.5725836117562135e-01:4.5385011576623635e-01:1.3331191641959967e+00:4.0786025633161799e-01:2.0227801261785423e+00:3.6615784545342800e-01:2.6028003363020229e+00:3.9699554864025000e-01:3.0030422197195548e+00:2.8806575158884068e-01:3.3849876196098068e+00:3.8393969833972724e-01:3.9984721683730489e+00 + CVs 20 + -3.7576079918622685e-01 2.1504145585906315e-01 -8.0431004522120508e-01 + -6.7740868274383614e-01 3.3234769175297252e-01 -1.4077824766597351e+00 + -9.5542972713968188e-01 4.1748974240505010e-01 -1.9621150619515388e+00 + -1.2390298630595256e+00 4.9120565007237860e-01 -2.5240277686012229e+00 + -1.5303230775171450e+00 5.4291137860585337e-01 -3.0864514698383081e+00 + -1.8342727182847807e+00 5.7001375723399295e-01 -3.6383733200827333e+00 + -2.1530831581555319e+00 5.7396692040186403e-01 -4.1708420651654752e+00 + -2.4875713106969317e+00 5.5456195280737552e-01 -4.6826656954450794e+00 + -2.8397578929407112e+00 5.0746132451696413e-01 -5.1798888712491120e+00 + -3.2085342350296733e+00 4.2298314575562701e-01 -5.6661402002876118e+00 + -3.5873216095748628e+00 2.8477420027788591e-01 -6.1410248284661328e+00 + -3.9661869352953523e+00 6.7400855063109777e-02 -6.6034912620049369e+00 + -4.3250387346510166e+00 -2.4256252336250572e-01 -7.0310609182599055e+00 + -4.6318879700579849e+00 -5.9719551188635167e-01 -7.3653432487685837e+00 + -4.8634616415356753e+00 -9.1296868527932640e-01 -7.5632204583233058e+00 + -4.9985617592080045e+00 -1.1430493832419333e+00 -7.6318729029389250e+00 + -5.0059779103484798e+00 -1.2809647486629632e+00 -7.6154255844813754e+00 + -4.9270930664495491e+00 -1.3883955836117892e+00 -7.5791877395644036e+00 + -5.0967274317604598e+00 -1.6216120243247572e+00 -7.5610425136530415e+00 + id 13208 + loc 5.6019043922424316e-01 2.2309830784797668e-01 393 + blend 0.0000000000000000e+00 + interp 4.1279264808085642e-01:2.9620810821858606e-01:8.4193951280409696e-01:3.8624836679532598e-01:1.6012533776303479e+00:2.5873320488543744e-01:2.1649720482547568e+00:3.6069334333984671e-01:2.9073139774785810e+00:3.0549989576215808e-01:3.2618076839169321e+00:4.1278852015437562e-01:3.9256027932358037e+00 + CVs 20 + 2.5375519787072676e-01 3.5529381847687430e-01 1.8810331674936703e-01 + 4.8893406643134141e-01 7.3416821443093472e-01 3.8792497439999213e-01 + 6.7637583493726128e-01 1.1393581514062607e+00 5.9562958574067115e-01 + 8.0175772095783882e-01 1.5420036832689608e+00 8.2569810374006447e-01 + 8.7383094363320923e-01 1.9052371842587357e+00 1.1073308211954174e+00 + 9.0184807424405578e-01 2.2212177452252271e+00 1.4507067980135990e+00 + 8.9580428268184098e-01 2.5117254988907836e+00 1.8549975301395778e+00 + 8.8535838168774172e-01 2.7962292710203633e+00 2.3393387681380888e+00 + 9.1885271037539584e-01 3.0634546870618986e+00 2.9283863228887208e+00 + 1.0457863753131587e+00 3.2690498771689116e+00 3.6158081374507880e+00 + 1.2991123374500595e+00 3.3565786733331660e+00 4.3594614111502574e+00 + 1.6825849838855591e+00 3.2795451443465433e+00 5.0943432732094536e+00 + 2.1828925405720030e+00 3.0052272488264098e+00 5.7579517595665708e+00 + 2.7851718945248236e+00 2.5130741977278230e+00 6.2757081784184194e+00 + 3.4568594465444553e+00 1.8536141073191033e+00 6.5404408228987192e+00 + 4.1360972154051519e+00 1.2091408006251845e+00 6.5026463915998187e+00 + 4.7538119059097372e+00 7.5238438176156697e-01 6.2580565953656215e+00 + 5.2553431937811608e+00 4.9384272887901837e-01 5.9529878901513689e+00 + 5.6099066780529707e+00 3.4652479586643903e-01 5.6915417618787396e+00 + id 13209 + loc 3.6533188819885254e-01 3.2156806439161301e-02 399 + blend 0.0000000000000000e+00 + interp 5.3272655022881821e-01:3.0060880705267740e-01:8.3539211247672518e-01:5.3272122296331592e-01:1.4247560314124539e+00:4.4933680613767873e-01:1.9228648383370393e+00:4.2785952437609626e-01:2.3851706575718117e+00:3.9643939555622515e-01:2.9683441346182695e+00:2.7774091865396061e-01:3.7554155466258621e+00 + CVs 20 + -1.7054169151545867e-01 2.4363324487912133e-01 2.6055552921340502e-01 + -3.5552814270802607e-01 4.8058506181099125e-01 4.8093280538352767e-01 + -5.5733757269795048e-01 7.0892588837029491e-01 6.6837305273178882e-01 + -7.7381194590741564e-01 9.2740666254985116e-01 8.3155929991302546e-01 + -9.9780088312052317e-01 1.1362255130370567e+00 9.8061095296892309e-01 + -1.2203229816388568e+00 1.3349677549898016e+00 1.1264197665169469e+00 + -1.4354917663853148e+00 1.5219235380673410e+00 1.2743099905830115e+00 + -1.6422453705178985e+00 1.6961478242594326e+00 1.4267550630421242e+00 + -1.8459744831512122e+00 1.8571287704714550e+00 1.5899954567545100e+00 + -2.0582509079050837e+00 1.9997590465902106e+00 1.7763415951292423e+00 + -2.2891523251581583e+00 2.1058052418432966e+00 1.9974174210322466e+00 + -2.5351001710187733e+00 2.1446398862667699e+00 2.2520943584616662e+00 + -2.7745405610983020e+00 2.1003136996409522e+00 2.5218951494411339e+00 + -2.9783081189244074e+00 1.9883839393847227e+00 2.7823835932018808e+00 + -3.1215434420956494e+00 1.8410914562861138e+00 3.0169631420441223e+00 + -3.1976371386789446e+00 1.6919161951869706e+00 3.2381967347068397e+00 + -3.2006067825324598e+00 1.5521678652717585e+00 3.4908991921041155e+00 + -3.2017772102918785e+00 1.4247569024669202e+00 3.7937657171047832e+00 + -3.5362683149542828e+00 1.5722783263769253e+00 3.8473803793952355e+00 + id 13210 + loc 8.3658534288406372e-01 1.1468474566936493e-01 402 + blend 0.0000000000000000e+00 + interp 4.8096345090685444e-01:4.8095864127234539e-01:2.9682113210248051e-02:4.3326247275782775e-01:4.8158666826250762e-01:3.7243199387583698e-01:1.1825294692524093e+00:3.3935024730103486e-01:2.1137438299720270e+00:4.4007669361477358e-01:2.8091645813424639e+00:3.8687863511932519e-01:3.1034934115188206e+00:4.4293562878670478e-01:3.7886668869479179e+00 + CVs 20 + 2.8826189206440728e-01 2.9177010116481694e-01 2.2836046753334194e-01 + 5.5910414247370610e-01 5.9037043080776264e-01 4.5871279113539021e-01 + 8.1899047912158107e-01 8.8564368204664223e-01 6.8665696284434141e-01 + 1.0798802380671331e+00 1.1526339193548050e+00 8.9040042442045741e-01 + 1.3535397922513126e+00 1.3762376724319054e+00 1.0535432648429093e+00 + 1.6516699947129743e+00 1.5613670005874076e+00 1.1795895212410206e+00 + 1.9940483324669720e+00 1.7156752289866546e+00 1.2857593283676931e+00 + 2.4068607000423503e+00 1.8303783536651994e+00 1.3975723715830892e+00 + 2.8981502447836984e+00 1.8746195089390882e+00 1.5471622939970109e+00 + 3.4429481316501556e+00 1.8006658665546484e+00 1.7628532441067106e+00 + 3.9543594957731116e+00 1.5782558610696054e+00 2.0348121259987400e+00 + 4.3293648757136243e+00 1.2814567747224896e+00 2.2976555958671820e+00 + 4.5645526882962111e+00 1.0190748817964721e+00 2.5105940237130833e+00 + 4.7101675847494278e+00 8.1266905765017028e-01 2.6873746984003080e+00 + 4.8434503525874746e+00 6.1571131282765945e-01 2.8710755458645574e+00 + 5.0776742195032840e+00 3.8932641898650355e-01 3.1171118256830912e+00 + 5.4435886362458961e+00 1.4423327477931003e-01 3.4694216096213899e+00 + 5.8511845852484612e+00 -9.6541559497492990e-02 3.9411583317712013e+00 + 6.2217101584714927e+00 -3.2654232486330481e-01 4.5118385052502576e+00 + id 13211 + loc 3.0359381344169378e-03 7.9222694039344788e-02 407 + blend 0.0000000000000000e+00 + interp 4.2386268209241201e-01:4.2385844346559109e-01:5.6324263832832067e-03:2.8047419907054283e-01:9.5179633523786833e-01:2.4236390831902217e-02:1.7054064458430485e+00:2.5966186479533471e-01:2.9948308552313527e+00:4.0952146286166041e-01:3.4417256781325687e+00 + CVs 20 + 1.6294972654875058e-02 3.3330745784941174e-01 -2.9273177042873971e-01 + 2.8252413583116642e-03 5.3977145153633743e-01 -3.8844083492148984e-01 + 2.6345553527619622e-03 7.3295129496932676e-01 -4.3232115382620551e-01 + 2.9528211889510821e-02 9.3371449777448345e-01 -5.0001592240797588e-01 + 9.3026307316541837e-02 1.1361901863656432e+00 -5.8968690688704795e-01 + 2.0280487784850892e-01 1.3300684023795875e+00 -6.9735889924048422e-01 + 3.6405935641348419e-01 1.5005555357873481e+00 -8.1621619407418211e-01 + 5.7419894092126189e-01 1.6328282969446999e+00 -9.3919360516693717e-01 + 8.2516099663549913e-01 1.7165656844251473e+00 -1.0625367647933184e+00 + 1.1084466619763520e+00 1.7470743868600533e+00 -1.1867978553412737e+00 + 1.4181732213697114e+00 1.7234434574095698e+00 -1.3161410484930722e+00 + 1.7491603901963326e+00 1.6456413144794850e+00 -1.4548478353627574e+00 + 2.0897511951809085e+00 1.5150571753568833e+00 -1.6027608129945830e+00 + 2.4227298836519049e+00 1.3425680146668268e+00 -1.7584291459727810e+00 + 2.7398684587753896e+00 1.1523563727276926e+00 -1.9274666131091012e+00 + 3.0443171343808202e+00 9.7127333014006256e-01 -2.1208770483318511e+00 + 3.3360086139356211e+00 8.1821828457710466e-01 -2.3445194632210620e+00 + 3.6121680210619860e+00 7.0245019586734758e-01 -2.5936969862715720e+00 + 3.9215201695884208e+00 5.8512684494254152e-01 -2.8611997420282043e+00 + id 13212 + loc 1.7301966249942780e-01 6.9834548234939575e-01 376 + blend 0.0000000000000000e+00 + interp 4.9702466405373863e-01:3.7713855237265997e-01:1.9242417406449708e-01:3.4717201773778861e-01:1.0099669263505164e+00:3.3135556842050395e-01:2.0375324444265424e+00:4.9701969380709810e-01:2.6899849658743022e+00:4.2068438565783928e-01:3.0305715156184379e+00:4.5620710406154641e-01:3.7904011270511386e+00 + CVs 20 + -9.5949012058298450e-02 5.3135191815226257e-01 6.9742063790459796e-01 + -6.3389427804414755e-02 8.8239674127991163e-01 1.3322950260097399e+00 + 7.4678553164168493e-02 1.0613213169914668e+00 1.9807415384849232e+00 + 2.5079100582112668e-01 1.1738697890274437e+00 2.6487660109428210e+00 + 3.8171896722013987e-01 1.3068485768697500e+00 3.3295007476970016e+00 + 3.8732883057700629e-01 1.4764539761245463e+00 4.0191172873794070e+00 + 2.1808203994264930e-01 1.6619301972618488e+00 4.6772351440634194e+00 + -1.2756809535578828e-01 1.8408369939825944e+00 5.2375947292008069e+00 + -6.0715126562021593e-01 1.9878216423777961e+00 5.6616621632001936e+00 + -1.1691352376542286e+00 2.0735481392991071e+00 5.9680529615268130e+00 + -1.7769175259020191e+00 2.0731599927362803e+00 6.1897498884149726e+00 + -2.3919932185977286e+00 1.9660917199435710e+00 6.3323771429570623e+00 + -2.9593663588717063e+00 1.7510562391054809e+00 6.3860598562649367e+00 + -3.4248701882963992e+00 1.4593886024910492e+00 6.3519726745021234e+00 + -3.7759440118580434e+00 1.1134522029553988e+00 6.2643587988420979e+00 + -4.0813601348020390e+00 6.2282802758065969e-01 6.1890317996256341e+00 + -4.3018185310988857e+00 -1.6739559284365768e-01 6.1962442346426636e+00 + -4.2585121562401502e+00 -1.0522256420110354e+00 6.3768776712964383e+00 + -4.2005714608854365e+00 -1.5355601746004979e+00 6.5608688664385628e+00 + id 13213 + loc 3.3994814753532410e-01 7.1441054344177246e-02 1069 + blend 0.0000000000000000e+00 + interp 3.6006676570160706e-01:2.9683203845234252e-01:1.5779445719268881e-01:2.9297465521146693e-01:9.1308033695990243e-01:2.9695485150932727e-01:1.8571944158277083e+00:3.6006316503395008e-01:2.4814474150760324e+00:2.9350933242820065e-01:3.4061285702052948e+00 + CVs 20 + -3.0349505174826663e-01 3.1227119667641523e-01 -9.9372967998101802e-02 + -5.5942782123912171e-01 6.2868126508039590e-01 -1.7918547665173062e-01 + -7.9087801083886844e-01 9.4776928424382367e-01 -2.4461953251533963e-01 + -1.0201292881754438e+00 1.2481807431791370e+00 -3.2628900829551599e-01 + -1.2641440549239413e+00 1.4975038884285772e+00 -4.5531550222055006e-01 + -1.5230841888278077e+00 1.6628351443623104e+00 -6.3663402989676998e-01 + -1.7616523964646715e+00 1.7137938630489831e+00 -8.5042908420664365e-01 + -1.9167595876344992e+00 1.6478918539121437e+00 -1.0594365644861643e+00 + -1.9511846411242832e+00 1.5078127782410549e+00 -1.2173994073345911e+00 + -1.9040725309734325e+00 1.3430653121748430e+00 -1.3099594086509045e+00 + -1.8250080655079159e+00 1.1610699315637707e+00 -1.3570121357272753e+00 + -1.7314711685744006e+00 9.6932682165286321e-01 -1.3496694065873840e+00 + -1.6411582554682940e+00 7.8218959587986836e-01 -1.2888376745634873e+00 + -1.5399710420794093e+00 5.5107823828796643e-01 -1.2354661043353257e+00 + -1.3864129149059161e+00 1.9300729434359984e-01 -1.2749685103514274e+00 + -1.1929946612036182e+00 -2.7014009600567174e-01 -1.5132388786382613e+00 + -1.0209675338861879e+00 -6.9416470122857665e-01 -2.0606738634925379e+00 + -9.7037884572956212e-01 -8.7152616655829918e-01 -2.8254748513241821e+00 + -9.9732862009555800e-01 -1.0040525457507030e+00 -3.1265252345543448e+00 + id 13214 + loc 2.5018906593322754e-01 1.3713808357715607e-01 373 + blend 0.0000000000000000e+00 + interp 4.1136641536992369e-01:3.8686824692451199e-01:6.8662286523126115e-02:3.7273368438614640e-01:8.4485634402989285e-01:3.5189267563601329e-01:1.2205686843188175e+00:3.5503278523052484e-01:1.9979408816828552e+00:3.7479758888467746e-01:2.4680706343351781e+00:4.1136230170576998e-01:2.9905588083111594e+00:2.5795742075082967e-01:3.7199687306618072e+00 + CVs 20 + -7.2380028020250980e-02 8.1579870412420541e-01 3.6842255392422363e-01 + -1.7890093919676325e-01 1.6025903518462996e+00 6.8621844307206603e-01 + -3.3586967519572486e-01 2.3656396344778909e+00 9.2646383764311380e-01 + -5.6463058111242626e-01 3.1036742542985927e+00 1.0178954844621413e+00 + -8.8407279926415117e-01 3.8000695173704324e+00 8.8659801651668535e-01 + -1.2944151277909228e+00 4.3811884817944486e+00 4.8386308290548663e-01 + -1.7508604155790910e+00 4.6932753685637287e+00 -1.9490922223519558e-01 + -2.1740288686187856e+00 4.6344989295932617e+00 -1.0480387884833988e+00 + -2.5042610269897567e+00 4.1963774348046972e+00 -1.9435235195973759e+00 + -2.6789620405064771e+00 3.4172475185290860e+00 -2.7506066644332816e+00 + -2.6265526716808103e+00 2.4104896070095285e+00 -3.3774283097414730e+00 + -2.3153630468217830e+00 1.3758461364538861e+00 -3.7850215260713469e+00 + -1.8097992011887096e+00 4.9861615114131563e-01 -4.0268593408091071e+00 + -1.2214110505976887e+00 -1.4875761510669694e-01 -4.2130364069620976e+00 + -6.8477360518190500e-01 -5.8187877064465887e-01 -4.4382324148103667e+00 + -3.0926306490257660e-01 -9.1935797706244093e-01 -4.8832111691118989e+00 + -2.8858957644592242e-01 -1.1839075040945484e+00 -5.7213286874000513e+00 + -7.8196835352775818e-01 -1.3419148927744193e+00 -6.7043116196960479e+00 + -1.1237330725337071e+00 -1.5144253379281722e+00 -7.1281795659482521e+00 + id 13215 + loc 5.6885546445846558e-01 9.1078263521194458e-01 396 + blend 0.0000000000000000e+00 + interp 5.4814982232541565e-01:5.0933831311684652e-01:7.9295277657565055e-02:3.3435157906397334e-01:7.5419018128831150e-01:2.9856252464368044e-01:1.5474305092318403e+00:4.8217884882192702e-01:1.9084802019600988e+00:5.4814434082719243e-01:2.4073011204088117e+00:3.1092209375838697e-01:3.0001689206271198e+00:3.8412389308147388e-01:3.6163281851549987e+00 + CVs 20 + 1.0009982124804622e+00 2.1720704640653671e-01 -3.4971383198253214e-01 + 1.6679015386324452e+00 2.7525051568706660e-01 -6.4103294687209678e-01 + 2.2457413279458609e+00 2.8702048124263979e-01 -9.1866350908818761e-01 + 2.8258789735826069e+00 2.9610249648673342e-01 -1.1992647600527724e+00 + 3.3940495135764439e+00 2.9552361752207962e-01 -1.4799321224990467e+00 + 3.9379826705820626e+00 2.8408594169338253e-01 -1.7604582042916512e+00 + 4.4517551121727408e+00 2.5935212947529718e-01 -2.0409927270276826e+00 + 4.9352854366063630e+00 2.1353014616134058e-01 -2.3265028344362353e+00 + 5.3900097304005801e+00 1.3487110102948208e-01 -2.6212107725699467e+00 + 5.8118413781110787e+00 1.3606376712282042e-02 -2.9228015400286962e+00 + 6.1909269600410495e+00 -1.5543084872033441e-01 -3.2271181180232582e+00 + 6.5171845448830821e+00 -3.7760411998746379e-01 -3.5367253491051720e+00 + 6.7823969137030540e+00 -6.5848594426207296e-01 -3.8558098733421460e+00 + 6.9814235045782427e+00 -9.9352972201252920e-01 -4.1763243711657276e+00 + 7.1155641181257598e+00 -1.3666609629499957e+00 -4.4840357569184190e+00 + 7.1933866121083696e+00 -1.7643286004275553e+00 -4.7779786692331205e+00 + 7.2230559944366775e+00 -2.1816424272261843e+00 -5.0668224502923254e+00 + 7.2052988003341163e+00 -2.6070793774399190e+00 -5.3447979177673792e+00 + 7.0696769290285024e+00 -2.9856225473126750e+00 -5.5489481286726274e+00 + id 13216 + loc 3.1824466586112976e-01 9.8597377538681030e-01 1068 + blend 0.0000000000000000e+00 + interp 5.3776907078281788e-01:3.3334743784915460e-01:1.4833019042685425e-01:5.3776369309211003e-01:7.8533017263191596e-01:3.7850702705292888e-01:1.7141228109297719e+00:7.4106059471478844e-02:2.0009550720112221e+00:3.4205138172948646e-01:2.6943476856967608e+00:3.3601113631895774e-01:3.5975326525453664e+00 + CVs 20 + 5.0088174111678388e-02 3.4846707221134338e-01 -2.5934316209485941e-01 + 1.0589729204617673e-01 6.7964556115171226e-01 -5.1342566988461602e-01 + 1.6071510589075663e-01 1.0017192115685636e+00 -7.7154300265944564e-01 + 2.1034623431323268e-01 1.3177925193745428e+00 -1.0389449662207402e+00 + 2.5110943661893620e-01 1.6260452280826683e+00 -1.3191729807024370e+00 + 2.7538911008360889e-01 1.9247841765504017e+00 -1.6173298795921385e+00 + 2.7554512508515605e-01 2.2139864220620784e+00 -1.9406085504333945e+00 + 2.4739719531187462e-01 2.4903782936289018e+00 -2.3024137070332786e+00 + 1.9319556987348913e-01 2.7352059732649576e+00 -2.7297795253147670e+00 + 1.2898713262154679e-01 2.9191205222649592e+00 -3.2474881736807877e+00 + 9.2443040519985670e-02 3.0279839696915873e+00 -3.8424858430628932e+00 + 1.1980873346423127e-01 3.0620981575687423e+00 -4.4637075652603393e+00 + 2.1499254946944366e-01 3.0055916092239547e+00 -5.0648595275584611e+00 + 3.6599911995538220e-01 2.8310204575676150e+00 -5.6213310612785206e+00 + 5.6168179814610208e-01 2.5460464281402029e+00 -6.0867246924487510e+00 + 7.7016051527509610e-01 2.2285061971845703e+00 -6.3903674493660851e+00 + 9.6382533417963989e-01 1.9485651941416682e+00 -6.5280319053697768e+00 + 1.1542825793525160e+00 1.6531731070537241e+00 -6.6014123893533130e+00 + 1.3269466504226075e+00 1.2126467822090077e+00 -6.7524418816255087e+00 + id 13217 + loc 1.6129437088966370e-01 8.6032235622406006e-01 401 + blend 0.0000000000000000e+00 + interp 4.1112275768164680e-01:4.1111864645406998e-01:3.7278860485898768e-01:3.4876057169444480e-01:9.9734656747684347e-01:4.0977556684461319e-01:1.7609733466018125e+00:3.2151535044389429e-01:2.2318852488614169e+00:2.9313534029501498e-01:2.9982011709265319e+00:3.6824261940280051e-01:3.5643585170063194e+00:3.5651683035529808e-01:3.9999772266338645e+00 + CVs 20 + 1.2125512174608055e-03 3.1483817131638847e-01 -2.4853737106212415e-01 + -1.1016202866691749e-02 6.3442872511805359e-01 -5.3321206401868282e-01 + -4.0600091901788149e-02 9.4861488016659634e-01 -8.3223565506931074e-01 + -8.9471734070768028e-02 1.2295456541438590e+00 -1.1404085909515262e+00 + -1.6609481218754901e-01 1.4584990571287022e+00 -1.4586125787743722e+00 + -2.8786915091841048e-01 1.6294390191995118e+00 -1.7772718764951916e+00 + -4.6797597083196896e-01 1.7357758807918262e+00 -2.0735111384881200e+00 + -6.9772662194459412e-01 1.7672486639538754e+00 -2.3164128578435812e+00 + -9.4723209065763703e-01 1.7238596460860922e+00 -2.4821126527511721e+00 + -1.1866730703727795e+00 1.6229712400676748e+00 -2.5665688296381663e+00 + -1.3973954967457660e+00 1.4877117785486991e+00 -2.5768954198625469e+00 + -1.5723177855337345e+00 1.3404278691605591e+00 -2.5226141970256939e+00 + -1.7243831375407941e+00 1.1964123607055948e+00 -2.4178244395198889e+00 + -1.8314577996195642e+00 1.0888153567495018e+00 -2.2694633805689839e+00 + -1.9730451357156895e+00 9.6828345808351990e-01 -2.0892382612207987e+00 + -2.3468672472518080e+00 5.9984031403141547e-01 -1.9424266491705258e+00 + -2.8660450409658726e+00 1.4645975864326322e-01 -1.9222461130262714e+00 + -3.5112597184055501e+00 -3.3007579356847150e-01 -2.1149420866183566e+00 + -3.9769789573257182e+00 -5.6724676633004401e-01 -2.2956301886855228e+00 + id 13218 + loc 2.7293118834495544e-01 5.0107216835021973e-01 382 + blend 0.0000000000000000e+00 + interp 4.7808239097704397e-01:2.6226760316187953e-01:3.9851653926246122e-02:3.4618211853004216e-01:1.0001254051479087e+00:3.1388076733835790e-01:1.9602227882320160e+00:2.7453350256337172e-01:2.7718938610197763e+00:4.7807761015313421e-01:3.0157057397041429e+00:4.5520306445186881e-01:3.7466380285072063e+00 + CVs 20 + 8.4856040313804781e-01 8.3921414499188912e-02 -5.9554782972803866e-01 + 1.4039209828005286e+00 4.3855623601791238e-02 -1.0727098503584402e+00 + 1.8912072273374918e+00 -2.6867144317038738e-02 -1.5332326536251715e+00 + 2.3913354052475011e+00 -9.7246564358467680e-02 -2.0067432762662740e+00 + 2.9026488963979942e+00 -1.7173617486643855e-01 -2.4811792216059105e+00 + 3.4137134616250151e+00 -2.5192923708969239e-01 -2.9475915542805451e+00 + 3.9064515396060591e+00 -3.4165344389307162e-01 -3.3961249618092331e+00 + 4.3674438204156347e+00 -4.5423664745137615e-01 -3.8165289564361990e+00 + 4.7855985694071617e+00 -6.0636842156430282e-01 -4.2013203788451872e+00 + 5.1481414913077224e+00 -8.0939938182481064e-01 -4.5477549709513312e+00 + 5.4447238391317585e+00 -1.0661918968891777e+00 -4.8546126335491300e+00 + 5.6711080534427474e+00 -1.3732816161942620e+00 -5.1188252375359315e+00 + 5.8279269081546232e+00 -1.7235624160623113e+00 -5.3361612820609334e+00 + 5.9228458430362183e+00 -2.1082926057119056e+00 -5.5035546205776926e+00 + 5.9719778271283666e+00 -2.5195911631615280e+00 -5.6228388910058609e+00 + 5.9747672816774111e+00 -2.9481813220150492e+00 -5.7024743148129389e+00 + 5.9217817504597914e+00 -3.3753613260324555e+00 -5.7487735978402874e+00 + 5.8095595425437700e+00 -3.7853096706155722e+00 -5.7621885017459160e+00 + 5.6090555845073737e+00 -4.2490424843748533e+00 -5.7410041680236628e+00 + id 13219 + loc 2.4136993288993835e-01 3.3365455269813538e-01 374 + blend 0.0000000000000000e+00 + interp 6.0398126499364568e-01:2.6998711406950149e-01:7.2150746125048126e-02:2.6501755093957263e-01:9.0035264181657348e-01:3.4376502856223401e-01:1.1863617190466766e+00:5.0555805895577055e-01:1.6385506969280232e+00:6.0397522518099578e-01:2.0012794678814165e+00:3.8138635458116038e-01:2.7097104965164087e+00:3.5018666689146044e-01:3.5465680609545931e+00 + CVs 20 + -3.4477004268323308e-01 4.2001311935277419e-01 6.4961361085552594e-01 + -5.3324335946316048e-01 6.8090726370462518e-01 1.1817910548544832e+00 + -6.1268976479773229e-01 8.0760470134906359e-01 1.6938372808914417e+00 + -6.3246398503499224e-01 8.5831370714639976e-01 2.1997329606804512e+00 + -6.2881327481285687e-01 8.9602787015933660e-01 2.6694525685586874e+00 + -6.2361522053343021e-01 9.5600220787036294e-01 3.0966951217012846e+00 + -6.3148560456958802e-01 1.0412073275311871e+00 3.5056788303620228e+00 + -6.7084561184774338e-01 1.1483529276064903e+00 3.9280953233038138e+00 + -7.7616904685459820e-01 1.2971539034425195e+00 4.3787495046220233e+00 + -9.9787793392340618e-01 1.5143379449279102e+00 4.8516457679630403e+00 + -1.3747128359712988e+00 1.7996775950901216e+00 5.3438274211814711e+00 + -1.9409851909195255e+00 2.1052272150548927e+00 5.8695070538567400e+00 + -2.7234152589966190e+00 2.3114357789731872e+00 6.4224398418775355e+00 + -3.6852940397815264e+00 2.2707912165379134e+00 6.9366382588498254e+00 + -4.7325064571463100e+00 1.9045564379989237e+00 7.2923581995782056e+00 + -5.7191185975455499e+00 1.2186615231629450e+00 7.3765341066946446e+00 + -6.4533342523387933e+00 2.5315131229635268e-01 7.2692852222192874e+00 + -6.7336799873673838e+00 -7.8514142652065333e-01 7.2427658998212010e+00 + -6.6756750960172013e+00 -1.3284741003329250e+00 7.3495735449810589e+00 + id 13220 + loc 8.5887365043163300e-02 3.5706654191017151e-01 395 + blend 0.0000000000000000e+00 + interp 3.5972107048013224e-01:2.8831584824236761e-01:8.8634834432776977e-03:3.2510841525471973e-01:7.2696148881183820e-01:3.1766716340805612e-01:1.2237381932555411e+00:3.5971747326942743e-01:2.0946876322127901e+00:2.8552874419610408e-01:3.1235863136599127e+00 + CVs 20 + -2.3459925945076820e-01 1.4887626967761541e-01 -3.0788080325541628e-01 + -4.6257358208764987e-01 2.8303814092014740e-01 -5.9526677860928934e-01 + -6.9180839110101200e-01 4.1680473332935891e-01 -8.8641446741424579e-01 + -9.2494299694496718e-01 5.5135054849618914e-01 -1.1915977463574774e+00 + -1.1610910533102630e+00 6.7765973198509577e-01 -1.5096339733485196e+00 + -1.4015545213713185e+00 7.8666525344681981e-01 -1.8370557709166029e+00 + -1.6483175161674222e+00 8.6857369847452737e-01 -2.1711898397094935e+00 + -1.9012193726105240e+00 9.0929078186984025e-01 -2.5106155283431497e+00 + -2.1584955062483369e+00 8.9134249609353811e-01 -2.8467600995130180e+00 + -2.4193290577058342e+00 8.0074573755812839e-01 -3.1560246392981748e+00 + -2.6812960334018729e+00 6.3605856769528391e-01 -3.4116227170869458e+00 + -2.9394710076439812e+00 4.0970887416495394e-01 -3.6054492331039025e+00 + -3.1911758480948547e+00 1.3804802208781641e-01 -3.7440392092244141e+00 + -3.4365872564901019e+00 -1.6244355983901837e-01 -3.8301750556873069e+00 + -3.6753108982204128e+00 -4.7782434875930013e-01 -3.8646464234441842e+00 + -3.9023517829445002e+00 -8.0470695326394681e-01 -3.8541852643965786e+00 + -4.1105354870793240e+00 -1.1469259301843089e+00 -3.8104002308787583e+00 + -4.3033148222060555e+00 -1.5024108080836018e+00 -3.7513116693607085e+00 + -4.5400195139190380e+00 -1.8568315936789759e+00 -3.7518050202827031e+00 + id 13221 + loc 3.5453614592552185e-01 5.1626048982143402e-02 403 + blend 0.0000000000000000e+00 + interp 4.8334115254469773e-01:3.1976991774053087e-01:1.3568726286270338e-01:3.3144679952573364e-01:7.3192910309564896e-01:4.8333631913317232e-01:1.0771051223018602e+00:3.3431044411031452e-01:1.9203921371232235e+00:4.7392307847615728e-01:2.6985269656189441e+00:3.2834401256821105e-01:3.4531890724376328e+00 + CVs 20 + -2.0942974397017741e-01 2.1058149174673124e-01 5.4745951983664401e-02 + -4.3215579042103824e-01 4.2522674909409686e-01 1.2034537293868502e-01 + -6.5990966026928577e-01 6.5688370894725168e-01 1.8226757439485494e-01 + -8.8298388895583746e-01 8.9711620909534540e-01 2.2967556979843884e-01 + -1.1055255365513537e+00 1.1274969193372111e+00 2.5600237684380411e-01 + -1.3307946797859032e+00 1.3332006698466219e+00 2.6074691552367413e-01 + -1.5562442771911185e+00 1.5131422118759827e+00 2.6175159406427562e-01 + -1.7740865348093939e+00 1.6701967791197374e+00 2.8182241973334532e-01 + -1.9785552868969123e+00 1.8014380970780990e+00 3.3924841791049265e-01 + -2.1663164737342901e+00 1.8979143581662195e+00 4.5445259597803811e-01 + -2.3256448178715514e+00 1.9470917769256175e+00 6.3886220597788945e-01 + -2.4455066250313062e+00 1.9353112913624413e+00 8.8844775755198180e-01 + -2.5334192474364063e+00 1.8441639276433357e+00 1.1859309907752968e+00 + -2.6014176929260224e+00 1.6592288016886170e+00 1.5029896497802682e+00 + -2.6439938104871001e+00 1.3749627981606902e+00 1.8285042138379657e+00 + -2.6776871210435735e+00 9.7127660635225177e-01 2.1993653633020664e+00 + -2.8069328330288763e+00 4.4076461723376037e-01 2.6591850792030378e+00 + -3.1150451532320438e+00 -1.1859079966976682e-01 3.1400866814562445e+00 + -3.3215368865252271e+00 -5.6315237074629865e-01 3.4562357206342433e+00 + id 13222 + loc 7.5351667404174805e-01 1.0875094681978226e-01 380 + blend 0.0000000000000000e+00 + interp 4.0945065451937029e-01:3.9077265873513906e-01:3.7128952053759412e-01:3.0342304164175216e-01:1.0525329813472708e+00:3.7270757636893465e-01:2.0128006041680253e+00:4.0944656001282514e-01:2.8987810866954469e+00:3.4654247146945638e-01:3.2394736357711142e+00:2.5208337835136507e-01:3.9822570982606385e+00 + CVs 20 + 5.8069703216272106e-01 2.2147827744573531e-01 6.3178022066134620e-01 + 1.0101830478405200e+00 2.9802407615278687e-01 1.0674443518153245e+00 + 1.3827324126996654e+00 3.0865804572523814e-01 1.4556633047962875e+00 + 1.7365126802811637e+00 2.8828987788999905e-01 1.8725242239422617e+00 + 2.0655943151021150e+00 2.3833754321200873e-01 2.3275361791996660e+00 + 2.3653013737465782e+00 1.6033545507045677e-01 2.8243391720037918e+00 + 2.6362853650933911e+00 5.2269761399633019e-02 3.3569191894790933e+00 + 2.8801305117132876e+00 -9.1058458315794066e-02 3.9115266410495702e+00 + 3.1010760713218941e+00 -2.7657369804654786e-01 4.4752199944999296e+00 + 3.3113083394657146e+00 -5.1331030411089218e-01 5.0345831767431122e+00 + 3.5227964031560326e+00 -8.0922939859269016e-01 5.5625148551782653e+00 + 3.7346184480358016e+00 -1.1695889675324311e+00 6.0226657670305341e+00 + 3.9385213791987188e+00 -1.6083926935881507e+00 6.3931052488295013e+00 + 4.1303829634946512e+00 -2.1292985795500790e+00 6.6714714951804819e+00 + 4.3237967362046206e+00 -2.6981863076921249e+00 6.8864963541547155e+00 + 4.5396583687239422e+00 -3.2610612386816276e+00 7.0809279413251920e+00 + 4.7971222666794455e+00 -3.7870522117046526e+00 7.2731241052046061e+00 + 5.1013466247131358e+00 -4.2554553461013507e+00 7.4419058643739335e+00 + 5.2999768036599129e+00 -4.5349639249922893e+00 7.5563618708122116e+00 + id 13223 + loc 4.5883664488792419e-01 3.7267139554023743e-01 415 + blend 0.0000000000000000e+00 + interp 5.1385429301063457e-01:4.5913862251148890e-01:2.7678670237976155e-01:3.0694527222790025e-01:1.1524493868158450e+00:4.5641365845081650e-01:1.9442529955106931e+00:5.1384915446770452e-01:2.4030686281202525e+00:4.5941211799313253e-01:3.0000910635408768e+00:2.5227620740186135e-01:3.4139163933203713e+00 + CVs 20 + 1.3430128412997205e-01 1.9666500266874287e-01 -2.6261199182254558e-01 + 2.2140844761362502e-01 3.2587780870776867e-01 -4.8020558794218748e-01 + 3.1315149164248651e-01 4.2359053142055036e-01 -6.8268162816805800e-01 + 4.3191614736710304e-01 5.0645394392768139e-01 -8.8798727736067451e-01 + 5.7588240549530023e-01 5.6897583402767338e-01 -1.0921116778048645e+00 + 7.4244586599749218e-01 6.0685609741066338e-01 -1.2896345969302954e+00 + 9.2848194493583680e-01 6.1823531563838885e-01 -1.4755729157190691e+00 + 1.1297302074135072e+00 6.0352929728309412e-01 -1.6464944723419432e+00 + 1.3403897036333858e+00 5.6467768715695887e-01 -1.7996954185818712e+00 + 1.5543724997262300e+00 5.0495083329389001e-01 -1.9333309738028026e+00 + 1.7673346578009372e+00 4.2853480180894832e-01 -2.0486472974531487e+00 + 1.9767284685069144e+00 3.3916907422899012e-01 -2.1520234036611563e+00 + 2.1778135289452853e+00 2.3886375137522853e-01 -2.2541466234712528e+00 + 2.3597029417708413e+00 1.2852480065292449e-01 -2.3651945300612032e+00 + 2.5104296570844573e+00 1.1070299014320106e-02 -2.4861115545324850e+00 + 2.6284533124984328e+00 -1.0842521202816369e-01 -2.6099485323649909e+00 + 2.7215492417475655e+00 -2.2751175088357600e-01 -2.7331478359115433e+00 + 2.7955259151054177e+00 -3.4775821038925381e-01 -2.8582323071536102e+00 + 2.7968250879463343e+00 -4.7256187509552383e-01 -2.9852187415155020e+00 + id 13224 + loc 9.4123959541320801e-01 3.5265481472015381e-01 1080 + blend 0.0000000000000000e+00 + interp 4.9493654880768662e-01:3.1100570853684290e-01:1.7242519443201831e-01:4.9493159944219856e-01:1.0077765728407975e+00:2.9523687170121521e-01:1.5645103276104111e+00:3.0819546606450277e-01:2.3217190972592086e+00:3.0385024329592764e-01:3.0641181284327108e+00:4.1755211289678185e-01:3.7971981214153248e+00 + CVs 20 + -1.2011168144543671e-02 4.0333442582480755e-01 -2.7824185806092955e-01 + -6.1108587541368872e-02 7.5859771748455462e-01 -4.2300654742966437e-01 + -1.2791317891175610e-01 1.0957360693280611e+00 -5.0509418229819192e-01 + -2.1384845091996449e-01 1.4360458302284478e+00 -5.4378263701264895e-01 + -3.1904762279700327e-01 1.7602343859121952e+00 -5.2372399572181738e-01 + -4.3795958106614241e-01 2.0405450880250342e+00 -4.2865609379764558e-01 + -5.5593389192551745e-01 2.2351454093815013e+00 -2.4809102566017449e-01 + -6.4172999047816393e-01 2.2883570207482045e+00 -2.0066391224693447e-03 + -6.5679746168536124e-01 2.1809332798653100e+00 2.2613772779517960e-01 + -6.0509304340942083e-01 1.9873283899337988e+00 3.6071617697914182e-01 + -5.2085737642530550e-01 1.7751627213597716e+00 4.1422243448344054e-01 + -4.2635373341885990e-01 1.5525839142073670e+00 4.2692847967172171e-01 + -3.2799537559298875e-01 1.3020017756491011e+00 4.3154426077562819e-01 + -2.2119609833308784e-01 1.0164064193587776e+00 4.6110047375699426e-01 + -9.2341812550838620e-02 7.1546416560209714e-01 5.8405064423505981e-01 + 7.2060952997253347e-02 5.0296477143371199e-01 9.0835449918661859e-01 + 2.1900700591569924e-01 6.7021681068798844e-01 1.4151498571295522e+00 + 1.5153302164796012e-01 1.3915201274295077e+00 1.5531365537104151e+00 + 1.5769983753007533e-01 1.5357307819763082e+00 1.6019997152709760e+00 + id 13225 + loc 7.2845011949539185e-01 5.9204560518264771e-01 1081 + blend 0.0000000000000000e+00 + interp 3.5130959325370770e-01:3.5130608015777520e-01:6.5081471197704011e-01:2.5093824950227300e-01:1.1967463956149207e+00:2.7972140779020771e-01:2.0620831192457008e+00:2.8813905965848746e-01:2.9697156296414038e+00:2.6085226225588320e-01:3.7255191060903123e+00 + CVs 20 + 8.2263964348422924e-02 5.7039364135560433e-01 4.2890660437756684e-01 + 2.3115097725371819e-01 1.0167517167110700e+00 6.4508676956776967e-01 + 4.1235547961811975e-01 1.4232790401970348e+00 7.8465926063122171e-01 + 6.1402450621239402e-01 1.8056850490259815e+00 8.8259867467590714e-01 + 8.2808156611755090e-01 2.1409274238126330e+00 9.2593459715271420e-01 + 1.0355663260127097e+00 2.3895371032414796e+00 8.9286576343871293e-01 + 1.2008228975563309e+00 2.4929532363143916e+00 7.6856049860231324e-01 + 1.2546552909700748e+00 2.3689956957908200e+00 5.8670457664113884e-01 + 1.0804120974658578e+00 1.9621531443719586e+00 5.2265459571699735e-01 + 7.1900959469939041e-01 1.5273296989688296e+00 8.0241620858027463e-01 + 4.4024582756601066e-01 1.3254287235205928e+00 1.1871022782931926e+00 + 2.8394941973769378e-01 1.2177736062168012e+00 1.4466080175801295e+00 + 1.8990196188691910e-01 1.0922540002298136e+00 1.5907528142021918e+00 + 1.3060935114383132e-01 9.2769574111939979e-01 1.6709568996865802e+00 + 9.8392011704623528e-02 7.7121302813480430e-01 1.7674346848974634e+00 + 8.9907955805353712e-02 7.4926583400952007e-01 1.9724455624556709e+00 + 1.0592162623513407e-01 8.7849422466517224e-01 2.2018865077940024e+00 + 1.4943615512709846e-01 8.3810268235609242e-01 2.3216980389995214e+00 + 2.1435327894434664e-01 3.5811784952485148e-01 2.3408987795175924e+00 + id 13226 + loc 5.0299537181854248e-01 5.6338793039321899e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6845153851811744e-01:4.4412000860374967e-01:6.0121496566703914e-01:4.6844685400273228e-01:1.0144028903390974e+00:2.9578207446977922e-01:1.6503778877465671e+00:3.2766352727252090e-01:2.1703582845113498e+00:3.3216915621485132e-01:2.9425361806846642e+00:3.1064849188732430e-01:3.9149689182462977e+00 + CVs 20 + 1.2603518041821732e-01 2.7579022245077761e-01 -2.8878893348433257e-02 + 2.5853728970375300e-01 5.4212197062235279e-01 -8.1079025046908199e-02 + 3.9986952254437252e-01 8.0366345576540898e-01 -1.5393394445775571e-01 + 5.5195725778820115e-01 1.0558835095765418e+00 -2.4595062696898301e-01 + 7.1882834806364271e-01 1.2842880023179535e+00 -3.6136326563635823e-01 + 9.0514011029087338e-01 1.4735140792586017e+00 -5.0625148175717016e-01 + 1.1116554918354853e+00 1.6117626505513727e+00 -6.9070327428928935e-01 + 1.3307775632127403e+00 1.6887264738376655e+00 -9.2496216131396625e-01 + 1.5439895620813637e+00 1.6905708334954230e+00 -1.2090117663202971e+00 + 1.7275853740975315e+00 1.6038006045728097e+00 -1.5250255278237312e+00 + 1.8633529581600670e+00 1.4238459344216081e+00 -1.8385680069506092e+00 + 1.9477844227465828e+00 1.1636649444602865e+00 -2.1059387599456443e+00 + 1.9986328510952800e+00 8.5739217814080593e-01 -2.2960410266924027e+00 + 2.0398570318497771e+00 5.3974876461945420e-01 -2.4199204481915451e+00 + 2.0780848305435828e+00 2.2185041004115691e-01 -2.5291708406444080e+00 + 2.1066673767382929e+00 -8.8680811184961517e-02 -2.7031610679678151e+00 + 2.1358926366151221e+00 -3.2255230608357954e-01 -3.0151240482837300e+00 + 2.2115432209809702e+00 -3.5828409454171717e-01 -3.4064131621623113e+00 + 2.2882312013173465e+00 -4.0410098362255376e-01 -3.5496443248191358e+00 + id 13227 + loc 6.6974359750747681e-01 3.5243198275566101e-01 402 + blend 0.0000000000000000e+00 + interp 4.3904447032661403e-01:3.6222898825776073e-01:9.8746840451859885e-03:2.7644465282078834e-01:5.8086850754225894e-01:3.4633527280739179e-01:1.0101040845888170e+00:4.3904007988191079e-01:1.8115874670926466e+00:3.8376942146348436e-01:2.1961621861070162e+00:3.1987639578674737e-01:3.0183987297774681e+00 + CVs 20 + 1.4544682071925241e-01 3.0693284854693764e-01 1.8135633621696304e-01 + 2.8581807994196151e-01 6.2117171178788133e-01 3.7599804704062073e-01 + 4.1026526339796671e-01 9.4179278782277098e-01 5.8555474681719533e-01 + 5.3548481858911412e-01 1.2633751369199668e+00 8.0769216558019830e-01 + 7.0055861862046220e-01 1.5710379457465484e+00 1.0326889253584417e+00 + 9.3516649419385800e-01 1.8426895976897180e+00 1.2479879033348780e+00 + 1.2454809847950952e+00 2.0533718613464331e+00 1.4464094885654704e+00 + 1.6185670566843209e+00 2.1806211527289783e+00 1.6338265177458835e+00 + 2.0312418049065708e+00 2.2085927111465957e+00 1.8316460694481540e+00 + 2.4501125286909744e+00 2.1200349960595739e+00 2.0620019882527254e+00 + 2.8138205793795250e+00 1.8936048025036103e+00 2.3212823247992671e+00 + 3.0700069508600376e+00 1.5493885110073147e+00 2.5702878090767523e+00 + 3.2575178087739136e+00 1.1546937060966587e+00 2.7787037375080876e+00 + 3.4607980792368647e+00 7.7190504995372766e-01 2.9429896815374503e+00 + 3.7431491149415725e+00 4.4117611119401345e-01 3.0739297015625571e+00 + 4.1480741593994432e+00 1.7357002132496580e-01 3.2038685603033312e+00 + 4.6844644689862331e+00 -4.0018517103520335e-02 3.3887508250389429e+00 + 5.2924906216260910e+00 -2.1077264472732604e-01 3.6696423996135747e+00 + 5.8779588437237802e+00 -3.4174517958328998e-01 3.9823635967334265e+00 + id 13228 + loc 9.1714654117822647e-03 6.8315416574478149e-01 409 + blend 0.0000000000000000e+00 + interp 3.6156290296989624e-01:3.2056333218340655e-01:3.8116166936097318e-01:2.0174171460266524e-01:1.2041585750396622e+00:3.1285275623487840e-01:1.9998130060235420e+00:3.6155928734086656e-01:2.7942593277620542e+00:3.3396607234570430e-01:3.4596440549000347e+00 + CVs 20 + 5.2839300776357090e-01 2.3776248825447416e-01 -2.2023950948345830e-01 + 9.7831012720525290e-01 4.1167383333900276e-01 -4.3836220895624456e-01 + 1.4267296962405249e+00 5.6745354738013565e-01 -6.6589602415332438e-01 + 1.8797173723641514e+00 7.0323829279261085e-01 -9.1789637995919204e-01 + 2.2956540529176603e+00 7.9315398734841291e-01 -1.2039402069783494e+00 + 2.6403171486526160e+00 8.2635539960149251e-01 -1.5196456413968957e+00 + 2.9061323630986444e+00 8.1231059625890945e-01 -1.8505983683184986e+00 + 3.1153144095924761e+00 7.6759823347557132e-01 -2.1903457519116030e+00 + 3.3026555495166821e+00 7.0108426475033414e-01 -2.5424362157590519e+00 + 3.5013328821323837e+00 6.0899799398131171e-01 -2.9096475650005651e+00 + 3.7347199609665815e+00 4.6581716320566469e-01 -3.2810334673100590e+00 + 4.0008749708585558e+00 2.4359426514722005e-01 -3.5987697685148423e+00 + 4.2867741514266342e+00 -4.7622868656950423e-02 -3.8006840484880220e+00 + 4.5891882918984841e+00 -4.0497620059683381e-01 -3.8888637845941649e+00 + 4.9080731051072277e+00 -8.4977582941145791e-01 -3.9305703048931671e+00 + 5.2442993034141896e+00 -1.3794790552587530e+00 -4.0313763029937446e+00 + 5.6007612101785327e+00 -1.9543341792368638e+00 -4.2414280485166032e+00 + 5.9923356209148242e+00 -2.5509655871216244e+00 -4.5122895968498504e+00 + 6.4774364673056102e+00 -3.1847992080209533e+00 -4.8035357013361173e+00 + id 13229 + loc 1.9080052152276039e-02 6.2341731786727905e-01 374 + blend 0.0000000000000000e+00 + interp 4.7709070482818150e-01:3.5811349010055327e-01:5.1955802265863271e-01:1.2060287853717425e-01:1.2081112432157077e+00:3.5799877619726417e-01:2.8119223193922940e+00:4.7708593392113324e-01:3.1218662804896296e+00:3.9263003889531228e-01:3.8793267031681098e+00 + CVs 20 + -5.5377087427780258e-01 3.3735467448680539e-01 -2.1216861947081433e-01 + -9.9498694603110305e-01 5.8285558666447412e-01 -3.0795557803542206e-01 + -1.4132553866903299e+00 7.4459779221776912e-01 -3.3274229891090407e-01 + -1.8395866717292431e+00 8.4270753157058254e-01 -3.1508203044755978e-01 + -2.2665496347897900e+00 9.1678654180735908e-01 -2.7819525717475962e-01 + -2.7017883186532874e+00 9.9865202306352951e-01 -2.5368129922356930e-01 + -3.1596236904079045e+00 1.0863099911028027e+00 -2.8301761298181416e-01 + -3.6403843615259031e+00 1.1621277338064613e+00 -4.0382790447174122e-01 + -4.1241080471188365e+00 1.2184347885095386e+00 -6.4140794229615361e-01 + -4.5803610016693774e+00 1.2529077948319667e+00 -1.0031074890940477e+00 + -4.9853385150168696e+00 1.2544439001390653e+00 -1.4583705874121271e+00 + -5.3230130943587595e+00 1.1960741779750008e+00 -1.9438466912533650e+00 + -5.5746066225519977e+00 1.0492108963050466e+00 -2.3962777953126646e+00 + -5.7235664614801109e+00 8.0954184369651960e-01 -2.7730746133948712e+00 + -5.7553961269584324e+00 5.1550963561871166e-01 -3.0470258480906618e+00 + -5.6894290121798710e+00 2.1914842165505188e-01 -3.2132708613393617e+00 + -5.5977650852211340e+00 -2.3894449905143667e-02 -3.2673616618244514e+00 + -5.5441054707156923e+00 -2.3915059503313252e-01 -3.2382382982673201e+00 + -5.5704537440973114e+00 -6.8286072264355191e-01 -3.1375820541511210e+00 + id 13230 + loc 9.7745126485824585e-01 9.2763864994049072e-01 396 + blend 0.0000000000000000e+00 + interp 4.3647138302607003e-01:3.2087507765830214e-01:8.0713793704474202e-01:2.7399341992169979e-01:1.2397432664244445e+00:2.4888797348725947e-01:2.0424964820261033e+00:2.8202653868120203e-01:2.8880331605761036e+00:4.0186333139741037e-01:3.1754616309062991e+00:4.3646701831223977e-01:3.9998423925610109e+00 + CVs 20 + 1.0291042021625287e+00 2.0913864019555237e-01 -4.4168037948610933e-01 + 1.6833341097750769e+00 2.3848002180391881e-01 -8.3249122076929738e-01 + 2.2411713495600170e+00 1.9066974384159849e-01 -1.2303979722129643e+00 + 2.7953436876373114e+00 9.2739839623782239e-02 -1.6491360217277165e+00 + 3.3281606828204824e+00 -6.7681136261769415e-02 -2.0676213554475984e+00 + 3.8210769843162797e+00 -2.9075122282279775e-01 -2.4677769742665134e+00 + 4.2594482323235319e+00 -5.6528809679159697e-01 -2.8378827113691680e+00 + 4.6341530977813976e+00 -8.7371851843279935e-01 -3.1708665793937603e+00 + 4.9389730721118790e+00 -1.1940494887035582e+00 -3.4621527037928330e+00 + 5.1721248396835540e+00 -1.5015318480716782e+00 -3.7123273412185558e+00 + 5.3465228007780583e+00 -1.7835826393603149e+00 -3.9360794307128066e+00 + 5.4821647102750033e+00 -2.0533466491906234e+00 -4.1585461948813673e+00 + 5.5872092177258459e+00 -2.3384612630276385e+00 -4.3924493743791357e+00 + 5.6624818720684864e+00 -2.6582346935522638e+00 -4.6256068019854766e+00 + 5.7072955814770294e+00 -3.0142567665122257e+00 -4.8471798685783787e+00 + 5.7162433660235221e+00 -3.4031523342034893e+00 -5.0504326143398579e+00 + 5.6805273588927641e+00 -3.8215497650058996e+00 -5.2261099957380752e+00 + 5.5929547540540270e+00 -4.2720606782036281e+00 -5.3642871452693122e+00 + 5.4527193306472297e+00 -4.8284033359033751e+00 -5.4939854916575408e+00 + id 13231 + loc 3.3341389894485474e-01 1.4339105784893036e-01 393 + blend 0.0000000000000000e+00 + interp 4.0392367813092905e-01:2.5938190176474996e-01:3.7809164122742156e-02:2.6969762111625917e-01:9.8997872965379485e-01:3.0791787269376814e-01:1.7116467464899479e+00:4.0391963889414778e-01:2.4949803725575892e+00:2.6873995249760851e-01:2.9964687852209440e+00:3.6037423810453745e-01:3.6704496429187272e+00 + CVs 20 + -4.8803049853362854e-02 4.3067148800469607e-01 3.9752665467977510e-01 + -1.3907797400941302e-01 8.5485995277189197e-01 7.6178638479294924e-01 + -2.7522486496719245e-01 1.2763171784474250e+00 1.0929442647195711e+00 + -4.8083621149460221e-01 1.6669395823289135e+00 1.3908261552606156e+00 + -7.6688826217443506e-01 1.9817583300797947e+00 1.6481473482132079e+00 + -1.1166848361553618e+00 2.2032184483651922e+00 1.8621963422573713e+00 + -1.5009488603633141e+00 2.3369716524260804e+00 2.0356465018159655e+00 + -1.8869618151116185e+00 2.3911071828643662e+00 2.1766762515684821e+00 + -2.2454881078199844e+00 2.3737358094129339e+00 2.2983902266580429e+00 + -2.5486493953865410e+00 2.2949101828822158e+00 2.4110440504069537e+00 + -2.7699082105630244e+00 2.1727576428981847e+00 2.5149249375596052e+00 + -2.8944371684944219e+00 2.0373199465125227e+00 2.6027976423758381e+00 + -2.9291468676383747e+00 1.9273697110715564e+00 2.6614763992049189e+00 + -2.9079447526481679e+00 1.8842791614637582e+00 2.6713845821604214e+00 + -2.8964686628369929e+00 1.9014829158507296e+00 2.6305679901249746e+00 + -2.9220413623630668e+00 1.8465857710114526e+00 2.5797321494866612e+00 + -2.8992298287997222e+00 1.6171517180482156e+00 2.5733320297769682e+00 + -2.7198115094475077e+00 1.2679993277835884e+00 2.6922299409802601e+00 + -2.3066988591025903e+00 8.7967485328977446e-01 3.0361879947558910e+00 + id 13232 + loc 1.3997372984886169e-01 7.0177549123764038e-01 1069 + blend 0.0000000000000000e+00 + interp 3.6180162526787024e-01:2.9971349695768745e-01:5.1486654384785624e-01:3.6179800725161759e-01:1.4140876405440344e+00:3.3799543652034242e-01:2.3483734492408774e+00:2.8629580362057055e-01:3.1353591843386908e+00:2.7856553178173626e-01:3.9837070222576090e+00 + CVs 20 + 1.2155945858626020e-01 2.5008825922052602e-01 -1.1581782184411660e-01 + 2.4052034077796269e-01 5.1558988459320332e-01 -2.4457185062109665e-01 + 3.5655498543109398e-01 7.9333956172981523e-01 -3.7086632738794195e-01 + 4.6801773124036411e-01 1.0815212726567891e+00 -4.9253555701337559e-01 + 5.6806161987038806e-01 1.3763260853409247e+00 -6.1658634453585792e-01 + 6.4406194668185801e-01 1.6717594753483067e+00 -7.5197203545017488e-01 + 6.8253871978576919e-01 1.9637422462507796e+00 -9.1575855650813631e-01 + 6.7283419853279269e-01 2.2423659090070958e+00 -1.1367796183835523e+00 + 6.0685073030039338e-01 2.4690429391169926e+00 -1.4399368693639825e+00 + 4.8333450441111914e-01 2.5813581270819634e+00 -1.8111701378654517e+00 + 3.1702355964700235e-01 2.5456661878645268e+00 -2.2028991606048813e+00 + 1.3400071307164707e-01 2.3688603395237888e+00 -2.5867886146871522e+00 + -3.4545100978631949e-02 2.0699042681605260e+00 -2.9598437576812753e+00 + -1.5303047062265029e-01 1.6705381757546789e+00 -3.3290615796628140e+00 + -1.7035467055755293e-01 1.1893239595170726e+00 -3.7098936305986223e+00 + 1.7113080837333761e-02 6.5008581969218160e-01 -4.1105652438152118e+00 + 5.4805087487514481e-01 1.7302710829046675e-01 -4.4485235739914204e+00 + 1.2600257959559187e+00 -7.0892361323662501e-02 -4.5740866973854457e+00 + 1.7284162528793643e+00 -2.8471415021791879e-01 -4.6280923224012556e+00 + id 13233 + loc 8.4617906808853149e-01 5.0185298919677734e-01 411 + blend 0.0000000000000000e+00 + interp 2.5908276080527953e-01:2.5619813465625557e-01:8.8959491283123238e-01:2.4655650597214118e-01:1.9229606498402649e+00:2.4611210325382207e-01:2.7405515311377373e+00:2.5908016997767147e-01:3.8349594408773866e+00 + CVs 20 + 8.2665527558986618e-01 1.1024186125135857e-01 -3.0777495503379315e-01 + 1.4301522159758668e+00 7.3322638576575061e-02 -5.8426420777470756e-01 + 1.9981238500095910e+00 -8.0111412473834465e-03 -8.3331540612171984e-01 + 2.5879858191833636e+00 -1.0562462773787562e-01 -1.0464756432519056e+00 + 3.1898119547506920e+00 -2.2418393855078800e-01 -1.2087631256229501e+00 + 3.7898686001117010e+00 -3.6786236244906556e-01 -1.3145461941882548e+00 + 4.3729683893840701e+00 -5.4441149364795471e-01 -1.3643704794209963e+00 + 4.9213571014163815e+00 -7.6722899253426879e-01 -1.3619853640528521e+00 + 5.4144977261089133e+00 -1.0488663866547427e+00 -1.3199138031303173e+00 + 5.8308849401989562e+00 -1.3962674262227812e+00 -1.2605712628510457e+00 + 6.1558165926809902e+00 -1.8069790663524610e+00 -1.1986580441411296e+00 + 6.3910752785690335e+00 -2.2663332533608296e+00 -1.1271173642754369e+00 + 6.5487216156037800e+00 -2.7542100017376976e+00 -1.0335146544933402e+00 + 6.6396291031074490e+00 -3.2537726856748708e+00 -9.1577786109291037e-01 + 6.6690328564604178e+00 -3.7520605596723065e+00 -7.7480858878983450e-01 + 6.6350611816499487e+00 -4.2319221924678470e+00 -6.0387188206264097e-01 + 6.5430067027635506e+00 -4.6745847854762408e+00 -3.9619679762372567e-01 + 6.4224700181825716e+00 -5.0880589512079233e+00 -1.7378428298090121e-01 + 6.4592318855227635e+00 -5.5797005166341522e+00 9.4508406265095823e-03 + id 13234 + loc 4.6442461013793945e-01 6.6621452569961548e-01 377 + blend 0.0000000000000000e+00 + interp 4.6340216484207952e-01:2.4522179538804037e-01:5.6229495955614339e-01:4.5400339079979485e-01:1.1970376036779986e+00:2.6307228306517161e-01:1.9789690944868086e+00:2.6151492056141845e-01:3.0051794959379010e+00:4.6339753082043111e-01:3.8184746939192635e+00 + CVs 20 + -7.3267696743739585e-01 2.2623124418079046e-01 -5.4061769361410261e-01 + -1.3284622257109193e+00 3.2196665896500570e-01 -9.3437317843372736e-01 + -1.8884927036491244e+00 3.6349211442235818e-01 -1.3068012327495968e+00 + -2.4484245113927567e+00 3.8371038657913503e-01 -1.7104133400531907e+00 + -2.9855279618292268e+00 3.8065765607820423e-01 -2.1328148626644365e+00 + -3.4856037618131217e+00 3.5076712681595756e-01 -2.5577193594367262e+00 + -3.9455358028294061e+00 2.8853303705753519e-01 -2.9743861232809792e+00 + -4.3654409605206332e+00 1.8532600281213885e-01 -3.3827676890134533e+00 + -4.7379475275446268e+00 3.4641764314297330e-02 -3.7799037275707090e+00 + -5.0631260563020000e+00 -1.6307654584781828e-01 -4.1596895813955701e+00 + -5.3511756856685766e+00 -4.0536824318196629e-01 -4.5166567835843221e+00 + -5.6157233676966793e+00 -6.9280150985392197e-01 -4.8456789408298127e+00 + -5.8664116594295663e+00 -1.0412984421607523e+00 -5.1380057907502090e+00 + -6.1009854928467933e+00 -1.4781997990402109e+00 -5.3726288155658493e+00 + -6.3179452892819414e+00 -2.0078911522563407e+00 -5.5301603331704490e+00 + -6.5389576565415153e+00 -2.6056459332817221e+00 -5.6233274678664298e+00 + -6.8011232366228578e+00 -3.2340392714104884e+00 -5.6782612018219902e+00 + -7.1363619110671026e+00 -3.8375118550309071e+00 -5.6910176993969994e+00 + -7.5145809433009978e+00 -4.3864107102234673e+00 -5.6497866042040759e+00 + id 13235 + loc 5.6041330099105835e-01 6.4553362131118774e-01 399 + blend 0.0000000000000000e+00 + interp 4.7220725933531660e-01:3.7614965903639214e-01:8.5739913976898063e-01:4.4437008451549542e-01:1.0690398301996491e+00:3.6422110276208414e-01:1.8065183998708014e+00:3.6784909806917188e-01:2.4563587767029826e+00:4.7220253726272327e-01:2.9989378299253473e+00:4.1185284067037081e-01:3.4928770583642708e+00:2.7340842231045576e-01:3.9968689820132068e+00 + CVs 20 + -2.6223066311485793e-01 2.9383080841774017e-01 -1.4873660830681584e-01 + -4.8713412513935855e-01 5.9641952623193684e-01 -3.0655327979648445e-01 + -7.0132577633926074e-01 9.0108554548756481e-01 -4.7660308264412221e-01 + -9.2175815613884737e-01 1.2024121446442582e+00 -6.6224606326401791e-01 + -1.1587696597043984e+00 1.4937193336058647e+00 -8.6915088079546421e-01 + -1.4245874455516851e+00 1.7632057137281589e+00 -1.1043201731399335e+00 + -1.7260003016723375e+00 1.9904568387657982e+00 -1.3715804815111818e+00 + -2.0580431279326650e+00 2.1567319531533102e+00 -1.6645035522193410e+00 + -2.4246510888940644e+00 2.2608026659524585e+00 -1.9785025044692928e+00 + -2.8449619661181584e+00 2.2974513709200877e+00 -2.3200134912851080e+00 + -3.2964342968793328e+00 2.2391746260590630e+00 -2.6765541354147175e+00 + -3.7001257038898587e+00 2.0895551446865830e+00 -3.0035577501651960e+00 + -4.0272698219792957e+00 1.8862715235783887e+00 -3.2863199345746890e+00 + -4.3445130060891533e+00 1.6332367074331067e+00 -3.5536935865246422e+00 + -4.6822764234697853e+00 1.3154249603156365e+00 -3.8073771060423720e+00 + -4.9269365841809289e+00 9.6967047202970191e-01 -3.9995650641374971e+00 + -4.9704459032184163e+00 6.5157999502638897e-01 -4.1112959594778760e+00 + -5.0425855725043851e+00 3.3687024728802906e-01 -4.2035746906320686e+00 + -5.5640309992675432e+00 1.4149107257292703e-01 -4.3463381569342889e+00 + id 13236 + loc 7.2421157360076904e-01 8.2010149955749512e-01 373 + blend 0.0000000000000000e+00 + interp 5.6803412492935068e-01:4.6707153142742269e-01:1.6752969339770318e-01:4.3848901173071259e-01:8.8444512532798691e-01:2.9286460106413276e-01:1.5392864923022214e+00:5.1757564076013607e-01:2.0334819654233147e+00:5.6802844458810142e-01:2.7223247935569819e+00:4.6550176644533958e-01:3.1200324969533595e+00:2.9446266122414910e-01:3.7822206925746857e+00 + CVs 20 + -2.6558926435446628e-01 2.5336629055788595e-01 -8.7169472903812939e-02 + -5.3915259086384959e-01 5.3236731048632058e-01 -1.8507939971891241e-01 + -8.0566398288691365e-01 8.5008022410432116e-01 -2.9670451496464068e-01 + -1.0502028860581665e+00 1.2168367588915847e+00 -4.3083093536116657e-01 + -1.2568879797791936e+00 1.6328269431655507e+00 -6.0296879147305515e-01 + -1.4173100233774656e+00 2.0801026565124765e+00 -8.4044307600622536e-01 + -1.5321265000947539e+00 2.5193183427393566e+00 -1.1793270506957665e+00 + -1.6003510526758502e+00 2.9003530360494114e+00 -1.6354436446756133e+00 + -1.6127561097484029e+00 3.1860218609606599e+00 -2.1921854031610515e+00 + -1.5514571455311894e+00 3.3584362131483267e+00 -2.8139959344029748e+00 + -1.4012271842110680e+00 3.4007002409479439e+00 -3.4663797975662023e+00 + -1.1733069312367674e+00 3.2654650051452583e+00 -4.1196603844476600e+00 + -9.3720738631747613e-01 2.9185747758257130e+00 -4.7116588541104321e+00 + -8.2021451569584847e-01 2.4487663581172887e+00 -5.1865219265420937e+00 + -9.3204998086230029e-01 2.0116047698860116e+00 -5.5597746786468836e+00 + -1.2912533001447708e+00 1.7442371118824618e+00 -5.8324636788101953e+00 + -1.7855785697436151e+00 1.7318274976349877e+00 -5.9642307094105451e+00 + -2.2266604732181183e+00 1.8705210752961587e+00 -5.9778170037524880e+00 + -2.5163246402845321e+00 1.7567434597405411e+00 -6.0802287916628499e+00 + id 13237 + loc 7.4037760496139526e-01 5.3451216220855713e-01 395 + blend 0.0000000000000000e+00 + interp 4.7023747438489694e-01:2.5072395277021625e-01:3.0378131010225706e-01:4.3356626520482822e-01:8.8628111919073393e-01:2.9063156079027774e-01:1.6818645079233581e+00:2.9660916158350775e-01:2.4309205969778267e+00:4.6424049782289378e-01:2.9989571825411518e+00:4.7023277201015312e-01:3.2933807936140771e+00:3.4509189518050237e-01:3.9089690690600900e+00 + CVs 20 + 3.7265744399409545e-01 1.7401334415231623e-01 -4.3419906591500301e-01 + 6.7613825782119308e-01 3.0442966546744099e-01 -7.6807274425526739e-01 + 9.6257468199547946e-01 4.2703644044717204e-01 -1.0689754327677135e+00 + 1.2567366040095571e+00 5.5862794860591425e-01 -1.3648825183397120e+00 + 1.5595310521854813e+00 6.9378009003815067e-01 -1.6530620522020818e+00 + 1.8711103216690881e+00 8.2474421262250175e-01 -1.9317378544433481e+00 + 2.1917267011826320e+00 9.4388704686991742e-01 -2.2019534099188580e+00 + 2.5223122725103386e+00 1.0433182836933867e+00 -2.4662862413266158e+00 + 2.8663605260094451e+00 1.1134077152738706e+00 -2.7272426778745271e+00 + 3.2296597748116502e+00 1.1413213317488935e+00 -2.9872751867681275e+00 + 3.6114574680804576e+00 1.1112584974221857e+00 -3.2479605172695920e+00 + 3.9958570440938170e+00 1.0112271106957289e+00 -3.5060584570270548e+00 + 4.3620527578327435e+00 8.4162269297181247e-01 -3.7532560241724449e+00 + 4.7000839179405016e+00 6.1218240844279270e-01 -3.9830818971318749e+00 + 5.0109602339821295e+00 3.3120515100095949e-01 -4.1905200552224446e+00 + 5.2966852265004212e+00 7.4954628935706147e-03 -4.3715286090488812e+00 + 5.5541869113134856e+00 -3.4296068200898988e-01 -4.5238682785059972e+00 + 5.7771623588361649e+00 -7.0201935509531266e-01 -4.6385787864235644e+00 + 5.9183824069714408e+00 -1.0544927698291953e+00 -4.6394106890714104e+00 + id 13238 + loc 6.9287651777267456e-01 7.3265391588211060e-01 400 + blend 0.0000000000000000e+00 + interp 4.8984298006798105e-01:4.8983808163818038e-01:2.6363465506409522e-01:4.4441170801686453e-01:9.8047679750130967e-01:4.5809198707853116e-01:1.2024990590988598e+00:4.3196871035124124e-01:1.8777583607919643e+00:3.7766552788852475e-01:2.2611176645458779e+00:3.2963549808994869e-01:2.9961614861924084e+00:3.2243840845214483e-01:3.6911267963659702e+00 + CVs 20 + -9.6077806744826272e-02 1.8527692636251239e-01 -2.7210374112668545e-01 + -1.8740622763074277e-01 3.6737237718807353e-01 -5.7827820026470445e-01 + -2.5483463110533267e-01 5.3200836875298285e-01 -9.1616808729295252e-01 + -2.9868726403534029e-01 6.7347007647505897e-01 -1.2806814623792586e+00 + -3.2318705425882011e-01 7.9343828821846463e-01 -1.6640172140390894e+00 + -3.2503106244403351e-01 8.9873420633331380e-01 -2.0571809213318843e+00 + -2.9858302171443629e-01 9.9055046363468191e-01 -2.4532119972377471e+00 + -2.4191422101762833e-01 1.0550404281308750e+00 -2.8475951224250586e+00 + -1.5635265366915352e-01 1.0748573574328577e+00 -3.2369816789419916e+00 + -4.3135692875998888e-02 1.0427414710421719e+00 -3.6174113798978471e+00 + 9.4551086862375969e-02 9.5608216638703247e-01 -3.9814938278339120e+00 + 2.4729459398741399e-01 8.0969431480090837e-01 -4.3149016011551771e+00 + 4.0565352590335269e-01 6.0116110552403224e-01 -4.5953555382068254e+00 + 5.6867958461724033e-01 3.4165582154159368e-01 -4.7918703788107369e+00 + 7.3690876182888099e-01 5.7470743176951888e-02 -4.8769140865485667e+00 + 8.9612578072447846e-01 -2.2138670952225170e-01 -4.8417713608501138e+00 + 1.0220253438022835e+00 -4.6730080710230260e-01 -4.7094844510027363e+00 + 1.1102109756762653e+00 -6.6362892831568443e-01 -4.5585381131241158e+00 + 1.2463472764287411e+00 -8.5368648822977033e-01 -4.6976393114001276e+00 + id 13239 + loc 9.9648362398147583e-01 3.0770483613014221e-01 382 + blend 0.0000000000000000e+00 + interp 4.6523468458014200e-01:4.6523003223329623e-01:2.3255948954594485e-02:3.9547753897004617e-01:9.2836168808065445e-01:2.3143107930813078e-01:1.2586314704978765e+00:2.9172484319981429e-01:2.3802230410950767e+00:4.1538107626479459e-01:3.0209384479800745e+00:4.0267378145390520e-01:3.7730806874457166e+00 + CVs 20 + -9.4453843906515589e-01 2.9452534651725087e-01 6.2332081337872591e-01 + -1.5961741701165413e+00 4.2095451498681252e-01 1.0749315072448693e+00 + -2.1748867909102731e+00 4.8771190071468606e-01 1.4577856415510895e+00 + -2.7790491996723832e+00 5.2545129021532888e-01 1.8190774037541790e+00 + -3.4067312872883941e+00 5.2821528358180236e-01 2.1539679100063069e+00 + -4.0435085304332778e+00 4.8940974509920521e-01 2.4554134149585427e+00 + -4.6700288170478865e+00 4.0795469929715966e-01 2.7133693734256354e+00 + -5.2668152544764277e+00 2.8892025622070938e-01 2.9232713509198702e+00 + -5.8268788219831276e+00 1.3792846168774608e-01 3.0954968152956392e+00 + -6.3585452054694009e+00 -5.1656866523562606e-02 3.2539550794809342e+00 + -6.8683948742903160e+00 -3.0033550205636073e-01 3.4234799669543046e+00 + -7.3459839692983167e+00 -6.3563082831199358e-01 3.6171804676339430e+00 + -7.7508943648828756e+00 -1.0853674188688800e+00 3.8201375375374531e+00 + -8.0048242260714773e+00 -1.6461191418924845e+00 3.9877968640487764e+00 + -8.0576165617479969e+00 -2.2725080607500896e+00 4.0911066193378662e+00 + -7.9553495628825717e+00 -2.9443607021694360e+00 4.1380151115868742e+00 + -7.7995539949372299e+00 -3.6739273669959545e+00 4.1589046296610057e+00 + -7.6547947075196943e+00 -4.4245271868918596e+00 4.2164058878241777e+00 + -7.4907508834478103e+00 -5.0080481302832087e+00 4.3694451375144130e+00 + id 13240 + loc 2.3542626202106476e-01 2.8618922829627991e-01 380 + blend 0.0000000000000000e+00 + interp 4.3945283498734805e-01:4.3944844045899822e-01:1.0877471104466574e-02:3.4721931302750614e-01:8.9684449249475351e-01:3.3632366669631708e-01:1.5451604897206535e+00:2.9506229677863849e-01:2.0044414003982043e+00:4.0416418518997355e-01:2.4549287491713545e+00:4.0020839958969162e-01:3.0000367900071474e+00:3.5622709452414147e-01:3.5126634492207027e+00 + CVs 20 + -4.2545953422966826e-01 2.5780269445184512e-01 5.3073566356453905e-01 + -7.3626955240358571e-01 4.1114483640428034e-01 9.9362059929748114e-01 + -1.0183058281440180e+00 5.1192546934018002e-01 1.4625314049904024e+00 + -1.3203430544955710e+00 5.9141846244643714e-01 1.9688428144751642e+00 + -1.6550028862873254e+00 6.5236423294847290e-01 2.4931609112924211e+00 + -2.0282030768348500e+00 6.8618008015362841e-01 3.0087950589804753e+00 + -2.4381695078447674e+00 6.7785146276721919e-01 3.4931628674539028e+00 + -2.8752792262460112e+00 6.1709750871412661e-01 3.9246656891859888e+00 + -3.3194285128577916e+00 5.0353594276402891e-01 4.2857997003189734e+00 + -3.7435691869987084e+00 3.4482679369639913e-01 4.5729538438566841e+00 + -4.1250305003161927e+00 1.4921871315063129e-01 4.7944115405124528e+00 + -4.4547781331702971e+00 -8.1762120880742195e-02 4.9620730957257653e+00 + -4.7362113075990715e+00 -3.5479979090776803e-01 5.0896635899419458e+00 + -4.9771225599013098e+00 -6.7729004660286574e-01 5.1917033548899330e+00 + -5.1849405908044250e+00 -1.0514738190441513e+00 5.2824358514764338e+00 + -5.3615492328585876e+00 -1.4633428723621238e+00 5.3762143261475845e+00 + -5.5071275058988185e+00 -1.8918158124645368e+00 5.4970529501572543e+00 + -5.6122950960648001e+00 -2.3041458848836398e+00 5.6731113560925284e+00 + -5.6542032184755460e+00 -2.6436848242699464e+00 5.8733719369628847e+00 + id 13241 + loc 8.3221632242202759e-01 9.4457823038101196e-01 376 + blend 0.0000000000000000e+00 + interp 3.0282908256542002e-01:1.9956376675093360e-01:1.4867522114948084e-01:2.7447076606228010e-01:9.6887570347944163e-01:1.7763364001580734e-01:1.5559290639264236e+00:2.1514950651908521e-01:2.3560537815427933e+00:3.0084174281142595e-01:2.9829270375031678e+00:3.0282605427459436e-01:3.7047077576890168e+00 + CVs 20 + -1.6036842545979701e-01 2.3180129429812404e-01 4.3578475648368664e-01 + -2.5843122719540984e-01 4.0637661849350792e-01 8.0616416506773547e-01 + -2.8359546665340407e-01 4.9405055403809728e-01 1.1932470808048294e+00 + -2.2267910986919362e-01 4.9216374279033692e-01 1.6438179923036866e+00 + -8.9619726410604034e-02 4.6278070932849247e-01 2.1240492791606456e+00 + 7.4894499600621500e-02 4.6711952637028220e-01 2.6042534676188942e+00 + 2.1854090805643034e-01 5.2701529206334063e-01 3.1005577442130479e+00 + 2.8686277571760532e-01 6.5054942797958670e-01 3.6367787185192331e+00 + 2.3297188106583466e-01 8.4604737864544055e-01 4.1990631024458080e+00 + 3.0870716526215980e-02 1.1040700772929812e+00 4.7425460399188948e+00 + -3.1529350208253248e-01 1.3815466881291376e+00 5.2315739070022715e+00 + -7.8664161504353258e-01 1.6064785714097729e+00 5.6448913213724108e+00 + -1.3578602679493541e+00 1.6923987218981060e+00 5.9510245704252620e+00 + -1.9795023304863237e+00 1.5790083619360447e+00 6.1000227063337036e+00 + -2.5521324456165564e+00 1.2703940505936377e+00 6.0428699351971034e+00 + -2.9418824216230215e+00 8.1896409667140269e-01 5.8318298748175472e+00 + -3.0396585474259776e+00 2.5735258234402725e-01 5.6840420564092309e+00 + -2.8252053705405986e+00 -3.1278274487195201e-01 5.7572045313155726e+00 + -2.9286235643584675e+00 -8.6594505122446552e-01 5.6525711704164072e+00 + id 13242 + loc 4.8483571410179138e-01 5.8888059854507446e-01 415 + blend 0.0000000000000000e+00 + interp 4.5941671216025409e-01:4.5941211799313253e-01:4.9979609927198743e-03:4.2268586220253501e-01:9.3522167114559174e-01:2.8343394804507771e-01:1.1459019154039332e+00:2.7860228246886359e-01:1.8666216502279107e+00:4.0015528774610620e-01:2.8561063971203957e+00:3.0949592189875824e-01:3.7918563959085452e+00 + CVs 20 + 4.7349685316583900e-01 1.8730279688465040e-01 -1.0795102023941489e-02 + 8.7170485141175469e-01 2.8514462353081810e-01 -6.2586680336990330e-02 + 1.2674180809966418e+00 3.6182661150167128e-01 -7.8295210680289273e-02 + 1.6704714272796901e+00 4.2561132510757027e-01 -4.0618396552785541e-02 + 2.0732328120748429e+00 4.7015560419188740e-01 5.3245768325338783e-02 + 2.4669413685516774e+00 4.9158375945487354e-01 2.0657498612817926e-01 + 2.8397513400118588e+00 4.8686301988971381e-01 4.1563591984294923e-01 + 3.1817467703393953e+00 4.5508132044841831e-01 6.6966523433116043e-01 + 3.4878790878252612e+00 3.9832796682234228e-01 9.5954013037692698e-01 + 3.7548009809400491e+00 3.1919629051397003e-01 1.2743522612126967e+00 + 3.9820630129600709e+00 2.1547107312757174e-01 1.5727672547569616e+00 + 4.1793419842570687e+00 8.3580882216013563e-02 1.7773666398541481e+00 + 4.3505433963490416e+00 -6.8252860156800210e-02 1.8433854150772455e+00 + 4.4915759632351797e+00 -2.2387048042034197e-01 1.8237624729002013e+00 + 4.6137349363747795e+00 -3.8075601654124425e-01 1.7916569561839790e+00 + 4.7217645912008894e+00 -5.3706949476725674e-01 1.7521107985023630e+00 + 4.8138411142934086e+00 -6.8266665679832217e-01 1.6870493126496886e+00 + 4.9063215799545699e+00 -8.1531733704684717e-01 1.6037431484536744e+00 + 5.1479026238333514e+00 -1.0033644849336838e+00 1.6732589060779741e+00 + id 13243 + loc 1.1687212437391281e-01 4.7137963771820068e-01 375 + blend 0.0000000000000000e+00 + interp 5.4424828122212476e-01:4.1315810651022755e-01:4.2933731260308050e-01:5.1167360145166452e-01:9.8982616061184581e-01:4.5327474183286620e-01:1.5104571312141082e+00:3.1389179457258121e-01:1.9756385401332486e+00:3.6177694834250829e-01:2.3852703898305410e+00:3.3382036766411016e-01:3.1032181320729393e+00:5.1700543282346390e-01:3.6511681638136650e+00:5.4424283873931256e-01:3.9999699063510628e+00 + CVs 20 + 4.8146904224136242e-02 4.8388523896860847e-01 5.1381287483796578e-01 + 1.4766629123575198e-01 8.2976304942677492e-01 9.9196195979779711e-01 + 3.0509247928479788e-01 1.0309763659193232e+00 1.4953722817167932e+00 + 5.0311193137532828e-01 1.1533757629630450e+00 2.0028925872693613e+00 + 7.1633526222984323e-01 1.2730985123587404e+00 2.5031111085022015e+00 + 9.0703617091008604e-01 1.4319945105026577e+00 3.0249583539322975e+00 + 1.0127317920936070e+00 1.6430873997933930e+00 3.5824477115885101e+00 + 9.7836784535745636e-01 1.9059209861955018e+00 4.1476635943257598e+00 + 7.7687242723323213e-01 2.2146466603426918e+00 4.6822525486609976e+00 + 3.9706373472369139e-01 2.5434531110197991e+00 5.1662041491939128e+00 + -1.6683428129908129e-01 2.8332211307076576e+00 5.5936196168175121e+00 + -9.0361161499961429e-01 2.9842821380392559e+00 5.9319810558016455e+00 + -1.7343226147992956e+00 2.8878753956926415e+00 6.1070743627826740e+00 + -2.4971547971830814e+00 2.5159790537918179e+00 6.0487950285640526e+00 + -3.0359545631199856e+00 1.9194878709747323e+00 5.7843736340283982e+00 + -3.2926722648501960e+00 1.1075239152048724e+00 5.5403890174736183e+00 + -3.2019543915541107e+00 1.1617866873190374e-01 5.6046936608568627e+00 + -2.8625687564931477e+00 -6.9471109043838819e-01 5.8800638241700653e+00 + -2.7531126271505642e+00 -1.2378233153032125e+00 5.8679729439861443e+00 + id 13244 + loc 7.2849935293197632e-01 2.1231651306152344e-02 403 + blend 0.0000000000000000e+00 + interp 4.0208421754826523e-01:4.0208019670608974e-01:6.8919324218431854e-01:3.3182508842401931e-01:1.6916703846449113e+00:2.6954389529523998e-01:2.4127697977684361e+00:3.0634205592076991e-01:3.1378940581445076e+00:3.1402883544972887e-01:3.9738549489141928e+00 + CVs 20 + -3.2698933820239917e-03 3.7789464908068437e-01 2.4610384009585221e-01 + 1.3606612213798719e-02 7.5213706847906614e-01 4.6495659065056338e-01 + 3.0022869662576168e-02 1.1362316985947869e+00 6.9155619660936640e-01 + 4.2724910095553015e-02 1.5219250042356742e+00 9.5365502644343503e-01 + 6.4569274774717966e-02 1.8817227793007574e+00 1.2567140685882678e+00 + 1.1842113452736402e-01 2.1885714853213516e+00 1.5794556188547542e+00 + 2.2153422979869219e-01 2.4303890594892152e+00 1.8993003490625764e+00 + 3.7817382763781882e-01 2.6021874224416726e+00 2.2032558172738197e+00 + 5.8198834518464126e-01 2.6993204092882581e+00 2.4802167836017217e+00 + 8.2432376281438025e-01 2.7208987361228898e+00 2.7265986134966735e+00 + 1.1043100156966201e+00 2.6681486926537872e+00 2.9482405374506766e+00 + 1.4242240691656185e+00 2.5385537363103579e+00 3.1508531556833654e+00 + 1.7594110570711772e+00 2.3321491330982660e+00 3.3308657035300997e+00 + 2.0655742074478254e+00 2.0657544523715483e+00 3.4812242786174199e+00 + 2.3431411441101866e+00 1.7492677210968122e+00 3.5996529974804390e+00 + 2.6514876936314677e+00 1.3513748502966776e+00 3.6936080087379426e+00 + 3.0182712071941662e+00 8.5799041913646723e-01 3.8174718538013295e+00 + 3.3581641319753732e+00 3.5227340808584406e-01 4.0302879797043589e+00 + 3.5198458021691255e+00 -3.9246278229606024e-02 4.2457847571285496e+00 + id 13245 + loc 8.9474213123321533e-01 3.0282250046730042e-01 1081 + blend 0.0000000000000000e+00 + interp 3.4705497004975777e-01:3.3184294953683519e-01:6.8240549232902303e-01:2.5194640794896439e-01:1.0711111916430718e+00:2.4063309703262648e-01:2.0270132087786430e+00:3.4705149950005731e-01:2.9915769843149409e+00:2.3994593229574490e-01:3.9976412771258185e+00 + CVs 20 + 6.6955140135803559e-02 5.2953649649531109e-01 -3.9696046048865591e-01 + 6.7326732162338976e-02 9.6668673504784153e-01 -6.1485096174829290e-01 + 4.5577647910749752e-02 1.3782384116760820e+00 -7.5814595885967728e-01 + 1.3231230766406088e-02 1.7877590583205258e+00 -8.5854086145727382e-01 + -3.2855193256963289e-02 2.1775210087724952e+00 -9.0265650686473642e-01 + -8.9632131006458171e-02 2.5134599939098790e+00 -8.6788464984244329e-01 + -1.4368393231957266e-01 2.7375178696707767e+00 -7.3353371075202900e-01 + -1.6515250224101785e-01 2.7634584423074262e+00 -5.2208600415757633e-01 + -1.2000660765563942e-01 2.5367014313445884e+00 -3.6715424586939371e-01 + -3.4312781897153477e-02 2.2167274002425081e+00 -3.9371162356378342e-01 + 3.9418906781172047e-02 1.9563903673558376e+00 -4.8636979904715649e-01 + 9.6914846835187085e-02 1.7185935159457024e+00 -5.5087678826148323e-01 + 1.4341552909425578e-01 1.4557803943875638e+00 -5.8779147657969932e-01 + 1.7544420483727541e-01 1.1555855389874172e+00 -6.2535213429611869e-01 + 1.8718239303121012e-01 8.4688127079835473e-01 -7.3019937310716354e-01 + 1.7505244088617603e-01 6.4113182113849798e-01 -1.0166688684894860e+00 + 1.3392258769185494e-01 6.5680047322730561e-01 -1.4469179790087425e+00 + 5.8547800878270995e-02 6.7263894023161130e-01 -1.8045517701425622e+00 + -3.8018026252381487e-02 2.6450845279546076e-01 -2.0284872960072318e+00 + id 13246 + loc 6.9272494316101074e-01 5.3952842950820923e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0236543107958211e-01:2.6141757271625865e-01:2.3009027561147244e-01:3.0026771292975385e-01:1.0315201611350098e+00:3.4082663158900278e-01:1.8585658967106062e+00:3.0905656211538557e-01:2.3253355368315320e+00:4.0236140742527132e-01:2.9991313015487915e+00:2.9353045511759579e-01:3.6836778975946327e+00 + CVs 20 + -1.0104129811034164e-01 2.3703232950289893e-01 2.3708902185403050e-01 + -1.6356012186100022e-01 4.0139925512836999e-01 3.6031093505067280e-01 + -2.1251521644589574e-01 5.3272602025969440e-01 4.3406465901574554e-01 + -2.6988479195715981e-01 6.5840373533694141e-01 5.0841530368632992e-01 + -3.3261236393348859e-01 7.7576732405650428e-01 5.8222465030875747e-01 + -3.9666081587425966e-01 8.8186665221052296e-01 6.5415935825498295e-01 + -4.5901769817398486e-01 9.7511575526326411e-01 7.2196856353618222e-01 + -5.1866447854436526e-01 1.0561279809666306e+00 7.8320267732791549e-01 + -5.7678942155262147e-01 1.1270106856681841e+00 8.3765231844955290e-01 + -6.3594363410640142e-01 1.1900721712653197e+00 8.8738281556108212e-01 + -7.0083829886318083e-01 1.2466776911562063e+00 9.3391796162124996e-01 + -7.8124714964592856e-01 1.2953283262622444e+00 9.7552592388180481e-01 + -8.8899927299772374e-01 1.3300368002298719e+00 1.0063751008718045e+00 + -1.0329927573445015e+00 1.3421343050380794e+00 1.0190513903113625e+00 + -1.2177311676821119e+00 1.3251306079151317e+00 1.0080792946249000e+00 + -1.4427835942578198e+00 1.2793820858623874e+00 9.7313804925299263e-01 + -1.7047314285528468e+00 1.2091841345812440e+00 9.1527360526402946e-01 + -1.9979223717850927e+00 1.1198881676137340e+00 8.2871665272606432e-01 + -2.3126072191823006e+00 1.0339564533993038e+00 7.3177640767491170e-01 + id 13247 + loc 1.7939403653144836e-01 2.4233266711235046e-01 402 + blend 0.0000000000000000e+00 + interp 4.3826527516948227e-01:2.9212159298531326e-01:1.3130210225810546e-01:4.0133197500303791e-01:8.4404119788986887e-01:4.3699009065675348e-01:1.1527488910522772e+00:3.1297283826513594e-01:1.9596525385081827e+00:4.1569093791394873e-01:2.7396582514451282e+00:4.3190295577440191e-01:3.1138133997979649e+00:4.3826089251673062e-01:3.8875895903290272e+00 + CVs 20 + -9.9150569867643534e-02 3.9522455164004744e-01 2.0674205973484566e-01 + -2.1811244101288277e-01 7.6819190391756809e-01 3.7968120361094282e-01 + -3.7538674692772273e-01 1.1203427472998624e+00 5.1453930130602132e-01 + -5.7657760883804343e-01 1.4476533271096421e+00 6.1755119472594644e-01 + -8.1978200321820305e-01 1.7427526169666032e+00 7.0109050340844181e-01 + -1.1023197259383963e+00 1.9992712522824911e+00 7.7454442428330572e-01 + -1.4212917566491301e+00 2.2121342945957641e+00 8.4105366259308101e-01 + -1.7696994011464033e+00 2.3748273261589770e+00 9.0740870589156564e-01 + -2.1333294051502003e+00 2.4790144167619270e+00 9.8956637428188698e-01 + -2.4923520315462344e+00 2.5184959305269805e+00 1.0956635380127389e+00 + -2.8292509163612043e+00 2.4932671408322644e+00 1.2146989675248436e+00 + -3.1222387170221100e+00 2.4079769448411290e+00 1.3294786459364905e+00 + -3.3548371247232298e+00 2.2635081475167467e+00 1.4339910216198857e+00 + -3.5228601270443232e+00 2.0504157774597012e+00 1.5361498082289167e+00 + -3.6244078579314483e+00 1.7634118665331597e+00 1.6633645408636364e+00 + -3.6629867450604383e+00 1.4083735692476473e+00 1.8756875349532165e+00 + -3.6441103737855856e+00 1.0513906647260662e+00 2.2469819522453012e+00 + -3.5620760508983880e+00 8.1892245211734216e-01 2.7587211014102184e+00 + -3.4234650792623156e+00 7.0989122965709717e-01 3.3035876092859846e+00 + id 13248 + loc 7.1689319610595703e-01 9.5973116159439087e-01 1069 + blend 0.0000000000000000e+00 + interp 5.5148207888320377e-01:3.0889318096921381e-01:2.7327345159312355e-01:2.8859460580246499e-01:1.3268523043860576e+00:3.9942128672623201e-01:1.9957708294404322e+00:5.5147656406241496e-01:2.4857665227980323e+00:5.0198049574267933e-01:2.9968455924104367e+00:2.6528495206992914e-01:3.7267579956702148e+00 + CVs 20 + 1.8812258884033006e-01 2.6808071660335991e-01 -1.6224915290151365e-01 + 3.5138598054309578e-01 5.4556780265319671e-01 -3.3307121680440199e-01 + 5.3527135072751486e-01 8.1435751651954114e-01 -5.0953287723051621e-01 + 7.7618277726849527e-01 1.0484277404967954e+00 -6.8541385039983216e-01 + 1.0774309007373195e+00 1.2261305504886915e+00 -8.5436090764531070e-01 + 1.4102606153028032e+00 1.3540220273062278e+00 -1.0207981417232279e+00 + 1.7364240812097154e+00 1.4723229346334668e+00 -1.1975784906806102e+00 + 2.0243824864478883e+00 1.6228063392722587e+00 -1.3904068336161064e+00 + 2.2419097716842620e+00 1.8159137631096629e+00 -1.5950740443698721e+00 + 2.3457927059677282e+00 2.0092758758848652e+00 -1.8103433641732698e+00 + 2.3042184522266558e+00 2.1105548171090796e+00 -2.0276846400185802e+00 + 2.1700502969160542e+00 2.0726975859243648e+00 -2.2172549529322279e+00 + 2.0279813584120139e+00 1.9353012573580368e+00 -2.4008810927044157e+00 + 1.9269441324694205e+00 1.7015506699056875e+00 -2.5912106663992600e+00 + 1.9084386525101875e+00 1.3895413698394190e+00 -2.7717836784331551e+00 + 1.9923485443964921e+00 1.0311146795183284e+00 -2.9142587549902639e+00 + 2.1827314165746770e+00 6.5769311681993181e-01 -2.9582302651099996e+00 + 2.4471626360809537e+00 3.1712306380409194e-01 -2.8639427932745183e+00 + 2.6132890726257898e+00 -4.7660503433612528e-02 -2.9349173373362318e+00 + id 13249 + loc 6.8327176570892334e-01 3.5847187042236328e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6763326240346209e-01:3.2786086333763875e-01:4.3766257964605793e-01:2.9924681546606974e-01:1.0332478944804451e+00:2.9249649417134926e-01:1.9095523239723420e+00:4.6762858607083807e-01:2.3367430984703290e+00:4.3026053387930935e-01:2.9731035467355094e+00:2.9139507403998799e-01:3.6562798818837230e+00 + CVs 20 + -5.6432352786701320e-02 3.1963722594161842e-01 5.3563169823057200e-02 + -1.4094824029578765e-01 6.3305969219664027e-01 1.0546175638188318e-01 + -2.4629943763709378e-01 9.4258392910173461e-01 1.7116695777801189e-01 + -3.7142141896143438e-01 1.2490678055360818e+00 2.6557180980448342e-01 + -5.1876501753322968e-01 1.5502903719926315e+00 4.0433597014831479e-01 + -6.8778307015039652e-01 1.8385241551359828e+00 6.0432509586493854e-01 + -8.7289301017025556e-01 2.0989108958589906e+00 8.7899025276679776e-01 + -1.0634055776576741e+00 2.3123924935234332e+00 1.2368145926661820e+00 + -1.2428721816078727e+00 2.4556347266867409e+00 1.6825106953068745e+00 + -1.3882843781054695e+00 2.5003226915544388e+00 2.2085285795211989e+00 + -1.4749194117106472e+00 2.4200150789078827e+00 2.7881395038486789e+00 + -1.4862370728444325e+00 2.2097084862450034e+00 3.3628662444548199e+00 + -1.4388354026124739e+00 1.9179362416240275e+00 3.8501804316840769e+00 + -1.3925762896551879e+00 1.6623472808998367e+00 4.1709833979001525e+00 + -1.4239207232233586e+00 1.5938025069909130e+00 4.2242504421084410e+00 + -1.5556549187035440e+00 1.6699506983536199e+00 3.8899153952322982e+00 + -1.6946860153127588e+00 1.5583568103823309e+00 3.2461320546704004e+00 + -1.6980025375616024e+00 8.2631108924088759e-01 2.4431628239729100e+00 + -1.7575610563283461e+00 9.9027455560491418e-01 2.5369754866666163e+00 + id 13250 + loc 9.9055778980255127e-01 3.0923157930374146e-01 396 + blend 0.0000000000000000e+00 + interp 4.4796202302714416e-01:2.4525806132294675e-01:2.9798648482626255e-05:4.4795754340691391e-01:9.4740994984135607e-01:2.6786262374730518e-01:1.1854832212515778e+00:2.5618234001094015e-01:2.1768594217583370e+00:3.4591937384194044e-01:2.9859397386577453e+00:4.2150666064302067e-01:3.4412408999859219e+00 + CVs 20 + -6.7564025925509896e-01 1.0860816807482138e-01 4.2258766678825577e-01 + -1.1441337470495700e+00 1.0468847021715971e-01 7.2127689651383375e-01 + -1.5692379929002482e+00 5.5782465918714608e-02 9.8379741330605075e-01 + -2.0212553380470775e+00 -1.6258021238575449e-03 1.2375898367058178e+00 + -2.4968846141694692e+00 -6.8801746636680039e-02 1.4809900969390095e+00 + -2.9903533621828204e+00 -1.4693751579519732e-01 1.7174383403944726e+00 + -3.4883948699452700e+00 -2.3698775916656034e-01 1.9542451431259829e+00 + -3.9701848777957354e+00 -3.4196597481156821e-01 2.1954963721593845e+00 + -4.4178049427510526e+00 -4.7107317392551606e-01 2.4404184361656069e+00 + -4.8196933995687576e+00 -6.3777038613492154e-01 2.6881164934526227e+00 + -5.1594800336102686e+00 -8.4125671433252380e-01 2.9463474649983201e+00 + -5.4151245571315574e+00 -1.0676864507670167e+00 3.2206887876038834e+00 + -5.5734086625989141e+00 -1.2972077205210777e+00 3.5110915918074124e+00 + -5.6385818997907089e+00 -1.5148154980394273e+00 3.8158746923506310e+00 + -5.6243898293825900e+00 -1.7109473269144182e+00 4.1306815163492940e+00 + -5.5472594957831785e+00 -1.8734504768953752e+00 4.4501427795982558e+00 + -5.4258328985961333e+00 -1.9943957695851127e+00 4.7733502500517737e+00 + -5.2735468012754216e+00 -2.0875168919836886e+00 5.0976591793120569e+00 + -5.0052002533505622e+00 -2.2612651487488176e+00 5.3441012483894719e+00 + id 13251 + loc 2.3280492424964905e-01 6.7320495843887329e-01 400 + blend 0.0000000000000000e+00 + interp 4.8461454417213634e-01:4.2825297433869225e-01:3.4844448891677271e-01:3.7156114297231302e-01:9.6146966520705868e-01:4.6706930825033455e-01:1.2306696758727731e+00:4.4699101051728096e-01:1.8435376559588477e+00:4.4281919397593567e-01:2.0828354583339963e+00:4.3668417501315893e-01:2.9361793533474438e+00:3.3911617983725539e-01:3.3021649443660674e+00:4.8460969802669462e-01:3.9476297282386499e+00 + CVs 20 + -2.6085179405011610e-01 2.5428187575625705e-01 4.4199133317373199e-02 + -5.3264239375398670e-01 5.3521562998404160e-01 5.4283597535800504e-02 + -8.0810920046311718e-01 8.3929050899688995e-01 -6.4904663610594326e-03 + -1.0711111448485453e+00 1.1483101085416625e+00 -1.5864854537250403e-01 + -1.3049836948521505e+00 1.4412104655560638e+00 -4.0009390906319253e-01 + -1.4996664667331934e+00 1.7021905234322361e+00 -7.1601991036513724e-01 + -1.6531946666629291e+00 1.9231729385452874e+00 -1.0887901510177251e+00 + -1.7662822022944979e+00 2.0993662073593407e+00 -1.5020182253830741e+00 + -1.8390830796936553e+00 2.2269109653853034e+00 -1.9399461559787716e+00 + -1.8712545681441479e+00 2.3040057520854624e+00 -2.3851245670086310e+00 + -1.8636599678640271e+00 2.3326709952183604e+00 -2.8165817930694499e+00 + -1.8248123761666111e+00 2.3214191103099289e+00 -3.2179954611382691e+00 + -1.7713371805629259e+00 2.2841306400547530e+00 -3.5871872335426742e+00 + -1.7183476069291330e+00 2.2334447765018446e+00 -3.9335593539555758e+00 + -1.6755013658607696e+00 2.1667247680563437e+00 -4.2726496531791520e+00 + -1.6591039501067311e+00 2.0650611123248286e+00 -4.6006371626777813e+00 + -1.6854361239504283e+00 1.9275763791746592e+00 -4.8912167951090302e+00 + -1.7670989435403097e+00 1.7792304485966477e+00 -5.1192160602569921e+00 + -1.9490807145081177e+00 1.6467931957033475e+00 -5.2364672280036082e+00 + id 13252 + loc 4.2631298303604126e-01 9.1571557521820068e-01 380 + blend 0.0000000000000000e+00 + interp 5.1516168361806480e-01:5.1515653200122868e-01:1.8434895954555497e-04:4.1918461877515767e-01:3.4451156420701290e-01:3.4603613972118141e-01:1.0026307557786742e+00:3.5178078001301577e-01:1.5322187494677597e+00:4.4302855808928876e-01:1.9980773425320284e+00:4.1113192682934274e-01:2.3154437264073655e+00:3.5150691811747231e-01:2.7750742634208745e+00:3.6377617922326905e-01:3.3692462726326995e+00 + CVs 20 + -3.0042150372132931e-01 2.2238706264456196e-01 -5.3095110600079110e-01 + -5.5654355981495374e-01 3.6357846466710914e-01 -9.3742427664124883e-01 + -7.8646691599918062e-01 4.7010983577310261e-01 -1.3147650398639872e+00 + -1.0007025936764014e+00 5.6647584397156070e-01 -1.7063645097215050e+00 + -1.1978911458373243e+00 6.5471364009335975e-01 -2.1112767126810699e+00 + -1.3731392135272587e+00 7.2881266927547628e-01 -2.5267015467478333e+00 + -1.5271279960815733e+00 7.8236640272419100e-01 -2.9508465460724547e+00 + -1.6633458984786631e+00 8.0791028860762593e-01 -3.3885363528080954e+00 + -1.7818767284337680e+00 7.9254119986994054e-01 -3.8493215655616808e+00 + -1.8823012586548986e+00 7.1841014680932092e-01 -4.3380872295026052e+00 + -1.9657326442035292e+00 5.6846438969449675e-01 -4.8380464583759490e+00 + -2.0281643497159099e+00 3.3213103956843648e-01 -5.3119924591056149e+00 + -2.0586631257628127e+00 -8.9845353547168827e-05 -5.7274612442864115e+00 + -2.0548046948688019e+00 -4.4186046724531280e-01 -6.0803033797985577e+00 + -2.0369968184352572e+00 -9.8605931804627867e-01 -6.3998672871222402e+00 + -2.0470740706095727e+00 -1.5936319473860441e+00 -6.7330786091589694e+00 + -2.1512673545329140e+00 -2.2325763011951447e+00 -7.1053888432806485e+00 + -2.4110173823142218e+00 -2.8620462905431343e+00 -7.4857776667805975e+00 + -2.5307154640471072e+00 -3.2703906764447050e+00 -7.7293328427346983e+00 + id 13253 + loc 1.7427316925022751e-04 1.1137957125902176e-01 374 + blend 0.0000000000000000e+00 + interp 3.2156321236278562e-01:2.4973658420662634e-01:3.7420380749114823e-01:2.2286216423523802e-01:1.0939407289147085e+00:3.2155999673066199e-01:1.9619948761995989e+00:2.2677167516143240e-01:2.9885322865743631e+00:3.1555411619769580e-01:3.5366704107149234e+00 + CVs 20 + -2.9028050343692874e-01 4.2614028937865339e-01 7.0003311269886970e-01 + -4.4720910951054849e-01 6.7946284367108167e-01 1.2500162623095645e+00 + -5.0808286783364243e-01 7.9100419581552361e-01 1.7781206857733936e+00 + -5.1473324948710442e-01 8.1329564073825122e-01 2.3239860620678123e+00 + -5.1076783636964629e-01 8.1166021505674613e-01 2.8702164585288057e+00 + -5.4271195380769266e-01 8.2437937957930829e-01 3.4059686411788461e+00 + -6.5016695252085199e-01 8.4643465276732277e-01 3.9310771442276295e+00 + -8.5470961526403433e-01 8.6277009732482890e-01 4.4431462866154074e+00 + -1.1559470735182471e+00 8.6950954674535552e-01 4.9330140271852834e+00 + -1.5525322210893977e+00 8.6267471575316090e-01 5.4143562689873077e+00 + -2.0335781132390833e+00 8.1606583666173971e-01 5.9052727091520456e+00 + -2.5600236139061630e+00 6.7967102070423779e-01 6.3955850599004380e+00 + -3.0823364483896896e+00 3.9848603404933325e-01 6.8469410361271512e+00 + -3.5463241993058849e+00 -5.9319725582585026e-02 7.2079569519941380e+00 + -3.8822126685122216e+00 -6.6444495670300929e-01 7.4338848846166350e+00 + -3.9730349433689254e+00 -1.3143163368360011e+00 7.5786719106282838e+00 + -3.7063143066924544e+00 -1.7625883755919483e+00 7.8264719095327573e+00 + -3.2883790946717504e+00 -1.8019931297146830e+00 8.1803298168478609e+00 + -3.0955065515139228e+00 -2.2069627246621613e+00 8.4107903229957000e+00 + id 13254 + loc 2.9612186551094055e-01 1.7626070976257324e-01 409 + blend 0.0000000000000000e+00 + interp 4.7489483436906793e-01:4.7489008542072425e-01:1.2943657797167107e-02:3.7562000589889838e-01:5.8415183085197819e-01:4.7097503473978214e-01:1.0450635295528217e+00:3.2223111482918343e-01:1.9287783621886267e+00:4.3102058833126949e-01:2.5399012670422851e+00:2.9021866532379520e-01:3.5068087025479948e+00 + CVs 20 + -1.7152606047018232e-01 1.9074777543544053e-01 -2.9316968110022495e-01 + -3.4439155404001526e-01 3.4723852361429730e-01 -5.5482811189587333e-01 + -5.0912255904301063e-01 4.8443762428827630e-01 -8.3053612132581367e-01 + -6.6019162193345970e-01 6.0200151667505097e-01 -1.1352413366659220e+00 + -8.0201805568438067e-01 6.9124394047792959e-01 -1.4696831283850016e+00 + -9.3640010201726487e-01 7.4875480804037586e-01 -1.8372822433559892e+00 + -1.0585298737164717e+00 7.7574439921861205e-01 -2.2407871657188436e+00 + -1.1598422677911167e+00 7.6695701791182636e-01 -2.6765295084668299e+00 + -1.2329175400024055e+00 7.0704844902985764e-01 -3.1353372165394000e+00 + -1.2738064808526113e+00 5.8166591168021653e-01 -3.6061397457169848e+00 + -1.2814081663220096e+00 3.8363635212835168e-01 -4.0704014077662150e+00 + -1.2574285751210561e+00 1.1118492990414452e-01 -4.5043056204551020e+00 + -1.2024742489104143e+00 -2.3319266129162664e-01 -4.8863210238212940e+00 + -1.1111404621139123e+00 -6.4013972303538758e-01 -5.1977989927749091e+00 + -9.7894940198777536e-01 -1.0886404454914937e+00 -5.4134747402676187e+00 + -8.1851805836821812e-01 -1.5437713947970930e+00 -5.5033038048003826e+00 + -6.5854670482902145e-01 -1.9673763662510635e+00 -5.4639784019975597e+00 + -5.1064578492023960e-01 -2.3552745399808752e+00 -5.3625600574692234e+00 + -2.9420074950124786e-01 -2.8380394106001194e+00 -5.4607303701710457e+00 + id 13255 + loc 6.3450592756271362e-01 5.6789082288742065e-01 382 + blend 0.0000000000000000e+00 + interp 4.8071286575528105e-01:3.2259554801158630e-01:1.4901100308039938e-01:4.6464583044269919e-01:8.1507763541866662e-01:3.4513053128407517e-01:1.2289592941323728e+00:4.8070805862662352e-01:1.9938055806417028e+00:3.2664307428321204e-01:2.3178152751811933e+00:4.2632133403365491e-01:2.9835544924279094e+00:3.7995909314571613e-01:3.4700556485714484e+00 + CVs 20 + 9.5311544121148395e-01 1.7727530780736128e-01 -4.7320706148802422e-01 + 1.5515036549545205e+00 2.0847370253978392e-01 -7.9705904938987449e-01 + 2.0440149039102171e+00 1.7831869844136994e-01 -1.0637046724488868e+00 + 2.5300686205001774e+00 1.2849598696550618e-01 -1.3037372837338925e+00 + 3.0129427079981581e+00 6.4771440347730413e-02 -1.5153594021600019e+00 + 3.5042068926946666e+00 -6.7189255481193699e-03 -1.7027323576776399e+00 + 4.0163508170442253e+00 -8.0671155854951548e-02 -1.8808764721695916e+00 + 4.5622631056263927e+00 -1.6584800964345658e-01 -2.0676828212915574e+00 + 5.1558229728845681e+00 -2.9170912965358187e-01 -2.2719754066756574e+00 + 5.7996192781579881e+00 -4.9505042575770086e-01 -2.4943018124526231e+00 + 6.4716725188600916e+00 -8.0133926423697321e-01 -2.7347459386369217e+00 + 7.1267171005770802e+00 -1.2284882184054537e+00 -2.9913617536218728e+00 + 7.6939898673831362e+00 -1.7975109238415961e+00 -3.2596090049511259e+00 + 8.1063151790347625e+00 -2.4932501716663751e+00 -3.5310535083561057e+00 + 8.3564159758992176e+00 -3.2434270305918158e+00 -3.8149313435686900e+00 + 8.5024049062436120e+00 -3.9820157163896432e+00 -4.1261924560331344e+00 + 8.6000277477873404e+00 -4.6585584589334239e+00 -4.4729814989082994e+00 + 8.6645156078231338e+00 -5.2351057815855322e+00 -4.8638652745083828e+00 + 8.7075052439575540e+00 -5.8198384797235594e+00 -5.2648522515251948e+00 + id 13256 + loc 4.6215638518333435e-01 3.2997569441795349e-01 399 + blend 0.0000000000000000e+00 + interp 4.4977668000937288e-01:4.0332688622127127e-01:4.4826915769053410e-01:4.0851874423763718e-01:1.0361655925630857e+00:4.2850256236753675e-01:1.5170616701287436e+00:4.4977218224257282e-01:1.9723361619491451e+00:3.0613875979060651e-01:2.3372184652218859e+00:3.6520760623276893e-01:3.1558038025801602e+00:2.7056216295042684e-01:3.9093744042399496e+00 + CVs 20 + -2.2047653764631778e-01 2.9315732589485100e-01 1.3385307965256654e-01 + -4.6597550826737599e-01 5.6518329809649792e-01 2.6928665555958742e-01 + -7.4773106688935076e-01 8.0790351325585452e-01 3.9502638772399801e-01 + -1.0593285319196482e+00 1.0223572198409494e+00 5.1899846544979111e-01 + -1.3842084511829484e+00 1.2125093226509045e+00 6.5762870097222403e-01 + -1.7070067877197126e+00 1.3758569480698728e+00 8.2034565266587534e-01 + -2.0149380584775747e+00 1.5022965339799796e+00 1.0072958618894505e+00 + -2.2928372094088982e+00 1.5773773884832112e+00 1.2113968636253789e+00 + -2.5235723029887724e+00 1.5902268946529656e+00 1.4191714775258089e+00 + -2.6918880880342111e+00 1.5421976538818227e+00 1.6119062928830110e+00 + -2.7975458480883795e+00 1.4501298871310042e+00 1.7774101852270154e+00 + -2.8701978224728739e+00 1.3258569999602929e+00 1.9309358780642762e+00 + -2.9408519083173728e+00 1.1585824327034977e+00 2.0994908391324190e+00 + -3.0304408760996449e+00 9.3261036364982119e-01 2.3051129268090316e+00 + -3.1695832396278028e+00 6.4686970057819437e-01 2.5666327036256096e+00 + -3.4188058796702037e+00 3.2936930125011898e-01 2.8866435432719175e+00 + -3.8654877079140690e+00 3.8556264248315264e-02 3.2194145924672419e+00 + -4.4437729582275853e+00 -1.1930002834620501e-01 3.4312236223246653e+00 + -4.7406639928097238e+00 -1.4720177857485728e-01 3.5018070429493395e+00 + id 13257 + loc 9.5582562685012817e-01 6.1439663171768188e-02 1068 + blend 0.0000000000000000e+00 + interp 5.4929550320522225e-01:5.4929001025019020e-01:3.7569855207549097e-01:2.5903693657684135e-01:1.2325189698822745e+00:4.9739716701294162e-01:2.3630334590467550e+00:4.0932911404031591e-01:3.0021022925840799e+00:3.2889342999004567e-01:3.4942332268197864e+00:4.1796347192069949e-01:3.9971541379931144e+00 + CVs 20 + -1.7806698365863100e-02 4.8386240168738526e-01 2.1549506830317317e-01 + -7.0156469096570695e-02 9.5513339683205334e-01 3.8884320910972503e-01 + -1.6268466725302783e-01 1.4226361735969537e+00 5.2016459303310625e-01 + -3.2219309756186043e-01 1.8833775572430178e+00 6.1446325738778818e-01 + -5.8329251961874695e-01 2.3127461038066754e+00 6.8088414194409808e-01 + -9.5313881270728051e-01 2.6757708510365310e+00 7.4427564177347605e-01 + -1.3992908635435928e+00 2.9387869651598777e+00 8.4310047086279727e-01 + -1.8632364065124025e+00 3.0873576012370609e+00 1.0143049055027979e+00 + -2.3127934197338043e+00 3.1026610579411003e+00 1.3150456534860733e+00 + -2.6672393174993290e+00 2.8656474216032493e+00 1.8124797887122233e+00 + -2.7405851639194876e+00 2.4039761617929427e+00 2.3102357933218172e+00 + -2.6008008066208239e+00 1.8951562771589221e+00 2.6844290579951808e+00 + -2.3027334035848557e+00 1.3569245971174007e+00 2.9717114205381616e+00 + -1.9064863413012052e+00 8.3263396096960529e-01 3.1662675957663819e+00 + -1.5403729065937413e+00 3.5866433014467614e-01 3.2876681875344920e+00 + -1.3287743800946528e+00 -3.3988996807789107e-02 3.3934008047867690e+00 + -1.4322808303484682e+00 -1.4472870658916503e-01 3.5822922917914162e+00 + -1.9627572654265766e+00 6.6601096634208390e-01 3.6232108894215713e+00 + -2.0198212135535960e+00 5.5621210664250453e-01 3.8274668153558071e+00 + id 13258 + loc 6.7743104696273804e-01 2.4822057783603668e-01 376 + blend 0.0000000000000000e+00 + interp 4.6154005786678048e-01:3.2761585658042408e-01:3.0407936647237643e-01:4.6153544246620182e-01:1.0336563077306145e+00:3.0966564980965722e-01:2.0587291311141644e+00:3.9570324369155319e-01:2.8811061139561867e+00:3.9394985955275630e-01:3.1197465332528682e+00:3.3563368229443730e-01:3.7713439914372984e+00 + CVs 20 + 1.0162991547170314e-01 3.9024759998493075e-01 -4.5021111777809131e-01 + 1.2868180908979771e-01 7.1138009271299329e-01 -8.4412143536047468e-01 + 9.2692231759076427e-02 9.4067385663190872e-01 -1.2609266243477144e+00 + 1.5774485916522307e-02 1.0798737659893074e+00 -1.7100166785517479e+00 + -6.9688281531249174e-02 1.1787509426079565e+00 -2.1837890586848552e+00 + -1.1468361708697983e-01 1.2807345263105538e+00 -2.6934800709705287e+00 + -5.9710735370389179e-02 1.3867251959870803e+00 -3.2358541467800048e+00 + 1.3545272426552823e-01 1.4783376479019126e+00 -3.7802063169476612e+00 + 4.7869262829981973e-01 1.5440837187871610e+00 -4.2863551141716094e+00 + 9.5040508660674994e-01 1.5724455357262699e+00 -4.7239874230216570e+00 + 1.4991880660488457e+00 1.5398664918799922e+00 -5.0736643176756075e+00 + 2.0455118881742909e+00 1.4195193541816753e+00 -5.3125117756168301e+00 + 2.5027549218554936e+00 1.2107406380692680e+00 -5.4178407193565317e+00 + 2.8182494784493786e+00 9.6303653309403980e-01 -5.3986794805451570e+00 + 2.9949752199405051e+00 7.4082603845429151e-01 -5.3046038143626451e+00 + 3.0991526688460702e+00 5.4049280232881491e-01 -5.2091447371814539e+00 + 3.1800598748618722e+00 2.7143795597952991e-01 -5.1547754109373267e+00 + 3.1814066190032744e+00 -8.4323855620681787e-02 -5.1584730425935525e+00 + 3.1313679688677580e+00 -3.8486369329851655e-01 -5.1828713957683545e+00 + id 13259 + loc 6.0992670059204102e-01 6.4601105451583862e-01 395 + blend 0.0000000000000000e+00 + interp 4.1790410777089743e-01:2.6787616330184011e-01:2.3610257858514139e-01:4.1789992872981974e-01:8.2905136941578594e-01:2.9849873726531506e-01:1.5879573248057839e+00:2.7223492399254634e-01:2.2461546474096385e+00:2.7994607826440693e-01:3.0580836187358251e+00 + CVs 20 + 3.2233176281928833e-01 2.7978326241942347e-01 -2.8176547846055661e-01 + 5.8710964363212303e-01 5.0177832988782411e-01 -5.0766617451654361e-01 + 8.4620505041491145e-01 6.9638027496883748e-01 -7.2768840556235626e-01 + 1.1317485992557212e+00 8.8450864958347719e-01 -9.7192015651832642e-01 + 1.4436697331714448e+00 1.0612808039636756e+00 -1.2415908317632727e+00 + 1.7794382585929203e+00 1.2180036828517955e+00 -1.5364141196155110e+00 + 2.1353686337643007e+00 1.3444333351995634e+00 -1.8578604857696766e+00 + 2.5099543833178317e+00 1.4258195552447650e+00 -2.2068895870283303e+00 + 2.9028279455719299e+00 1.4413908058163465e+00 -2.5791376074127363e+00 + 3.3068567797170201e+00 1.3667047987867802e+00 -2.9631234276034109e+00 + 3.6947815864723870e+00 1.1830741037137291e+00 -3.3404667592872492e+00 + 4.0268223897100661e+00 8.9027930213620854e-01 -3.6889845137890327e+00 + 4.2771091320590608e+00 5.0797727163141149e-01 -3.9869595792615482e+00 + 4.4412368515726071e+00 6.6927725561763296e-02 -4.2170354950142421e+00 + 4.5255617950071914e+00 -3.9833220538768099e-01 -4.3705252951883988e+00 + 4.5406591482656022e+00 -8.5407681755586928e-01 -4.4488499602529137e+00 + 4.4999749919539953e+00 -1.2687115152588393e+00 -4.4588819982038768e+00 + 4.4205604425329650e+00 -1.6186876667202896e+00 -4.4130744250874478e+00 + 4.3212594357698322e+00 -1.9845119550787254e+00 -4.3552821218359021e+00 + id 13260 + loc 3.9097413420677185e-01 9.5007067918777466e-01 415 + blend 0.0000000000000000e+00 + interp 4.2337631268660719e-01:4.2337207892348033e-01:1.1010372833192472e-01:3.2236001427449740e-01:9.9900251800646145e-01:3.3149908589754723e-01:1.8137497551440929e+00:3.4999910543976614e-01:2.3938321398342901e+00:2.5785878701538895e-01:3.0490902351337485e+00:2.8056242716274632e-01:3.9629845099728982e+00 + CVs 20 + 5.4282793174276578e-01 1.8998091625145469e-01 -1.8747141675178880e-02 + 9.3615083012221412e-01 2.7331612214771162e-01 -8.6023038929892381e-02 + 1.2999554691866142e+00 3.3228206197635779e-01 -1.4074049804266486e-01 + 1.6673645688222585e+00 3.9401324239802893e-01 -1.6483698775186795e-01 + 2.0366060253820226e+00 4.5967563789518140e-01 -1.5725945032632960e-01 + 2.4080345694870591e+00 5.3095768025637358e-01 -1.1479441764887122e-01 + 2.7804094249745921e+00 6.0859897499691451e-01 -3.4017108862864243e-02 + 3.1516041651604447e+00 6.9171242124074883e-01 8.6551404825600420e-02 + 3.5209993303509388e+00 7.7730290599718144e-01 2.4743502045660692e-01 + 3.8855593590008803e+00 8.6059273613854204e-01 4.4755251350341174e-01 + 4.2333451740763728e+00 9.3714070685185669e-01 6.7641003773491204e-01 + 4.5543445084319742e+00 1.0017765766833442e+00 9.1002752527800879e-01 + 4.8622183038049425e+00 1.0418928487156436e+00 1.1243974487086625e+00 + 5.1894478175373706e+00 1.0364787454090063e+00 1.3046691017672134e+00 + 5.5489532198819447e+00 9.7163357902638792e-01 1.4373065929764612e+00 + 5.9182968635673863e+00 8.5467071680648021e-01 1.5091018895228403e+00 + 6.2661256340855207e+00 7.0871749719588095e-01 1.5106670089999290e+00 + 6.5740274714479190e+00 5.6093220980844594e-01 1.4437873944735213e+00 + 6.8769241256451537e+00 4.0941003015546684e-01 1.3571921843054588e+00 + id 13261 + loc 7.6316481828689575e-01 9.9107176065444946e-01 393 + blend 0.0000000000000000e+00 + interp 4.5714312785325378e-01:3.7977980269422407e-01:9.5916983782452503e-03:2.9663253227103814e-01:9.6518314987233345e-01:4.5713855642197526e-01:1.7047036426104589e+00:3.6369838048918823e-01:2.2343118745627351e+00:3.6897200184460677e-01:2.8513162982045142e+00:3.4609673527386919e-01:3.0840486014218218e+00 + CVs 20 + -2.7354494614319597e-01 3.3736087080411425e-01 -3.4901229230968434e-01 + -5.0092151167270993e-01 6.5386667287522982e-01 -6.9967307252484423e-01 + -7.0121153077932952e-01 9.4407196813776229e-01 -1.0823291770753423e+00 + -8.9758886374955638e-01 1.2049024070689998e+00 -1.5059575074150955e+00 + -1.1067313328937642e+00 1.4264275538854823e+00 -1.9640726386908951e+00 + -1.3348125162526474e+00 1.5924948895559512e+00 -2.4472438565310997e+00 + -1.5812927775996863e+00 1.6846387344088769e+00 -2.9432189795275803e+00 + -1.8421882709420605e+00 1.6843292934227891e+00 -3.4335184795500204e+00 + -2.1056251849124363e+00 1.5790289604946783e+00 -3.8925276033052052e+00 + -2.3540219403869242e+00 1.3705701052406736e+00 -4.2925885840928011e+00 + -2.5776704745454140e+00 1.0847906855471945e+00 -4.6152056820103384e+00 + -2.7864213791157684e+00 7.7276099717506597e-01 -4.8696566085410327e+00 + -2.9980216850209316e+00 4.8631318177504612e-01 -5.0912135099980196e+00 + -3.2184039774426436e+00 2.7129913984624343e-01 -5.3205621839554000e+00 + -3.4292075958519339e+00 1.7424374412750643e-01 -5.5790095188207083e+00 + -3.5741571674457564e+00 2.2834250923352717e-01 -5.8366373349479321e+00 + -3.5923951075402583e+00 4.3747853209642162e-01 -6.0025074291224323e+00 + -3.5486047093063906e+00 7.0540739664488772e-01 -6.0144164587840212e+00 + -3.6584700708679518e+00 8.2010905859466998e-01 -6.3005075261055596e+00 + id 13262 + loc 1.9519647583365440e-02 5.7670718431472778e-01 411 + blend 0.0000000000000000e+00 + interp 5.5482043809385573e-01:2.4922444064819196e-01:3.0058816176414815e-04:3.3892359385342807e-01:5.1505874071801161e-01:4.1657020592349581e-01:1.0042546283658706e+00:5.5481488988947480e-01:1.5092177779792904e+00:2.5753926065873456e-01:2.2720229915028098e+00:3.7873025968997542e-01:3.1110835863716502e+00 + CVs 20 + 8.8448899096861189e-01 2.7188080206664411e-01 -1.6346559747918965e-01 + 1.5064773274517766e+00 3.8966510668685456e-01 -3.1207922396992172e-01 + 2.0902287653263509e+00 4.5774034801559915e-01 -4.6059103942021917e-01 + 2.7019466083128307e+00 5.0379989014787063e-01 -6.1772003523439523e-01 + 3.3113551118815825e+00 5.1185335247092745e-01 -7.9441255585729487e-01 + 3.8934602984238795e+00 4.6765997849718799e-01 -1.0102486396750072e+00 + 4.4328642537978142e+00 3.5690445796784576e-01 -1.2901953145565157e+00 + 4.9189781371890708e+00 1.5986375915780360e-01 -1.6557939582692365e+00 + 5.3434692232753598e+00 -1.5045087896160525e-01 -2.1095197130363212e+00 + 5.6995186838204690e+00 -5.9681977143408860e-01 -2.6288585350432983e+00 + 5.9714798061256662e+00 -1.1989767477107993e+00 -3.1625142904132741e+00 + 6.1501693488392855e+00 -1.9299700650841398e+00 -3.6694458435803665e+00 + 6.2558198031404739e+00 -2.7101547769678680e+00 -4.1696325025477519e+00 + 6.3203480788451536e+00 -3.4599649067819520e+00 -4.7033408025333259e+00 + 6.3685644626545699e+00 -4.1441483900235170e+00 -5.2751652675870666e+00 + 6.4150619147733519e+00 -4.8157227421727677e+00 -5.8495762420959982e+00 + 6.4632430975403778e+00 -5.5488157403117668e+00 -6.3733207856990512e+00 + 6.5004454188202843e+00 -6.3365599259355356e+00 -6.8017250180390807e+00 + 6.4851226957906380e+00 -7.1163269970218508e+00 -7.1345479542097863e+00 + id 13263 + loc 5.7881563901901245e-01 6.3377493619918823e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2291011324779881e-01:3.0841311135511601e-01:1.0534021468780430e-01:2.9486027658336128e-01:8.9407468104676913e-01:3.6135150363589869e-01:1.8938743903549005e+00:4.2290588414666636e-01:2.7025886666666770e+00:3.3006947139907777e-01:3.0393448236208891e+00 + CVs 20 + 1.1987628713744637e-01 2.6369829929237543e-01 -1.2961904591902582e-01 + 2.2790344131285475e-01 5.4558403776642517e-01 -2.6080062573997920e-01 + 3.4676523200773346e-01 8.2933592602470696e-01 -3.7500935367616695e-01 + 5.1634341727872290e-01 1.0984439015609491e+00 -4.6250314132292086e-01 + 7.5231515555850348e-01 1.3388087843495247e+00 -5.2714794918155761e-01 + 1.0180559197892640e+00 1.5674386684941024e+00 -5.8029163722542054e-01 + 1.2516985743961535e+00 1.8233540077701460e+00 -6.2578751478657058e-01 + 1.3970572273685482e+00 2.1243266798159404e+00 -6.5750064372590700e-01 + 1.4050464246850662e+00 2.4521809895795670e+00 -7.0046484298314726e-01 + 1.2284733389734599e+00 2.7446586034476326e+00 -8.3641547228682311e-01 + 8.9205417861322944e-01 2.8987408359188560e+00 -1.0926381475690394e+00 + 4.8607124315086936e-01 2.8884557187219650e+00 -1.3738318992285856e+00 + 5.4826780405639042e-02 2.7114280518661320e+00 -1.6039589953572444e+00 + -3.3715470248560642e-01 2.2907897959275494e+00 -1.8084954261789699e+00 + -4.9539345746946561e-01 1.5349041286777338e+00 -2.1113355342325644e+00 + -3.6213120501321983e-01 7.9524776547677356e-01 -2.3995994809495773e+00 + -2.5526802032565371e-01 2.3498164925008602e-01 -2.4929480845156928e+00 + -1.7562533120650745e-01 -2.8963080730636220e-01 -2.3726436361731733e+00 + -1.8344720298585235e-01 -6.7398481310216307e-01 -2.4420489479680274e+00 + id 13264 + loc 9.6881008148193359e-01 9.7496145963668823e-01 402 + blend 0.0000000000000000e+00 + interp 3.2024290028257185e-01:3.2023969785356904e-01:2.5102010968734101e-02:2.4446439904967560e-01:1.0117457539310530e+00:2.4149081579288759e-01:1.9796677679510275e+00:1.5066349323234637e-01:2.6858566533822272e+00:2.5795501271987975e-01:3.4655591367201035e+00 + CVs 20 + -1.3499428547875378e-02 1.0686462137780232e-01 -2.9772514548467516e-01 + -4.9958688787084260e-03 2.0927674532032406e-01 -5.9623367123106152e-01 + 3.6096841886950337e-02 3.0482836773566663e-01 -8.8852482633194385e-01 + 1.1342876791994533e-01 3.8560975327051672e-01 -1.1680682241263096e+00 + 2.2902338656815419e-01 4.4276972659643710e-01 -1.4256799368417821e+00 + 3.8420842686748080e-01 4.6870012447617893e-01 -1.6479077711955901e+00 + 5.7132609758203723e-01 4.5947080388960515e-01 -1.8251868898211412e+00 + 7.7356223080289177e-01 4.1837540481233559e-01 -1.9598762145775956e+00 + 9.7726144536831927e-01 3.5547326037419580e-01 -2.0607538719180361e+00 + 1.1765065951461331e+00 2.8328865480501753e-01 -2.1369765740311375e+00 + 1.3602519191385285e+00 2.0934832034669704e-01 -2.2132627548668338e+00 + 1.4947195938580546e+00 1.2719775287573731e-01 -2.3472428039037445e+00 + 1.5173521661544007e+00 1.2615810642083058e-02 -2.5779996098483764e+00 + 1.3939708413679428e+00 -1.4739398809883864e-01 -2.8320631596347976e+00 + 1.1960181631819036e+00 -3.2104388558020647e-01 -3.0110338682773485e+00 + 9.8175465111818982e-01 -4.8139274607682281e-01 -3.1136663391061075e+00 + 7.5283846014239564e-01 -6.2150430331332429e-01 -3.1614108665588381e+00 + 5.1933136791368528e-01 -7.3663706386271011e-01 -3.1679540481230930e+00 + 4.0894316930832031e-01 -8.1190930747387358e-01 -3.2916952855320680e+00 + id 13265 + loc 6.0224950313568115e-01 9.4029307365417480e-01 1080 + blend 0.0000000000000000e+00 + interp 5.4580009171922206e-01:3.1713514420641076e-01:9.6448771796947663e-02:3.4782300850377712e-01:1.0796010936796319e+00:5.4579463371830494e-01:1.7677022258625938e+00:4.7869235335106258e-01:2.1456234301640662e+00:4.1760574647506210e-01:2.8230542403984700e+00:3.2921153020616950e-01:3.2420095294324041e+00 + CVs 20 + -7.1870523609902495e-02 2.0008040043210856e-01 1.4499026015416924e-01 + -1.2754454594735487e-01 3.5369388914592154e-01 2.0014214082531773e-01 + -1.9438408797173251e-01 4.8417426133371411e-01 2.3835918431416980e-01 + -2.8598434486752483e-01 6.0627257226739428e-01 2.8477654331444691e-01 + -4.0115514088906690e-01 7.1393075911086701e-01 3.3537821407642315e-01 + -5.3770473727966350e-01 8.0134548477332346e-01 3.8560471640484784e-01 + -6.9233022688254386e-01 8.6420480797276822e-01 4.3082525152499151e-01 + -8.6086096617685548e-01 9.0016110736965760e-01 4.6792283070167562e-01 + -1.0385465623005696e+00 9.0889943859117905e-01 4.9666908264152065e-01 + -1.2207787256698299e+00 8.9249661434289695e-01 5.2084297804124968e-01 + -1.4044301331696445e+00 8.5454733235016800e-01 5.4825325516917944e-01 + -1.5877678196222615e+00 7.9856737864258487e-01 5.8920636857658770e-01 + -1.7687267114256013e+00 7.2688408075571243e-01 6.5415178119280382e-01 + -1.9432117784434293e+00 6.4043725915725369e-01 7.5066371093847628e-01 + -2.1052381470987096e+00 5.3943838696654223e-01 8.8151302478401206e-01 + -2.2483726050094579e+00 4.2461850044969951e-01 1.0461839651058540e+00 + -2.3658256097299546e+00 2.9840741875325261e-01 1.2437942065278258e+00 + -2.4510049361623674e+00 1.6531973823305757e-01 1.4712296342643703e+00 + -2.5421028112526889e+00 4.1527640100893604e-02 1.6977989618148563e+00 + id 13266 + loc 7.1563726663589478e-01 5.1617801189422607e-01 380 + blend 0.0000000000000000e+00 + interp 4.0226436212384181e-01:3.3613020889712281e-01:2.6434604763722580e-01:4.0226033948022061e-01:1.0848814663605655e+00:3.5661286049878194e-01:1.9912795522075761e+00:3.1290230704939537e-01:2.4751869466519314e+00:2.5336493171106983e-01:3.2381604110659676e+00:3.6982829308872917e-01:3.9062062676910037e+00 + CVs 20 + -4.5376693925018852e-01 2.4761593002425869e-01 -6.6924264042998916e-01 + -8.1483218285848613e-01 4.0083699319474597e-01 -1.1621598209342348e+00 + -1.1264602921748006e+00 5.1766967993517921e-01 -1.6073777328150707e+00 + -1.4083439258442247e+00 6.2614680542039580e-01 -2.0614979546504903e+00 + -1.6552241354154598e+00 7.2887272779609780e-01 -2.5237895176097380e+00 + -1.8746327399832621e+00 8.3159065986976743e-01 -2.9971673649002035e+00 + -2.0861978892644135e+00 9.3558537862135971e-01 -3.4892637417879167e+00 + -2.3135792488708105e+00 1.0294520123493063e+00 -4.0125077924598509e+00 + -2.5776290501237140e+00 1.0837735622051130e+00 -4.5839272768081738e+00 + -2.8922117125255555e+00 1.0528793723165113e+00 -5.2117181436515398e+00 + -3.2611436151410631e+00 8.8568249736381000e-01 -5.8762050601117011e+00 + -3.6695299457685961e+00 5.3554144939885573e-01 -6.5294208304496584e+00 + -4.0758537386602587e+00 -2.0691475593991537e-02 -7.1013249976035935e+00 + -4.4344019075454737e+00 -7.2596827112136175e-01 -7.5188837326836815e+00 + -4.7430764784467412e+00 -1.4491300711900821e+00 -7.7785554408903845e+00 + -5.0370023990822759e+00 -2.0965295890841760e+00 -7.9470267488680948e+00 + -5.3552761086700293e+00 -2.6263671718173933e+00 -8.0688648498310691e+00 + -5.7162716200595378e+00 -3.0227084449195889e+00 -8.1393284687866192e+00 + -6.0189583823466881e+00 -3.4746611714354212e+00 -8.2170697207342798e+00 + id 13267 + loc 4.0500813722610474e-01 1.6963320970535278e-01 400 + blend 0.0000000000000000e+00 + interp 4.2651061528289902e-01:3.0608492001076909e-01:4.3491129276148055e-01:2.9669027368338119e-01:1.2484089282024935e+00:3.0507709056602372e-01:2.2009492271858608e+00:4.2650635017674621e-01:2.9227718074887781e+00:3.6535070259415647e-01:3.1178950632138545e+00:3.5875793419361862e-01:3.7466994591004141e+00 + CVs 20 + -1.7727495242671165e-01 2.5097020379582829e-01 1.8899707582796157e-01 + -3.3470592131483978e-01 5.0335861122761627e-01 3.9914235465349057e-01 + -4.8874297810934419e-01 7.5822441530869045e-01 6.1995326306595500e-01 + -6.4956665510247447e-01 1.0126999960475163e+00 8.5065253966668430e-01 + -8.2360092457961609e-01 1.2602444752487336e+00 1.0977228202027307e+00 + -1.0162618818209250e+00 1.4896695015368513e+00 1.3692498321802480e+00 + -1.2313868838884505e+00 1.6834376793972341e+00 1.6729327954370703e+00 + -1.4854509196081565e+00 1.8202843583438835e+00 2.0184382051328504e+00 + -1.7700102081924207e+00 1.8683437643682825e+00 2.3894645280304840e+00 + -2.0610386523715443e+00 1.8179049261692160e+00 2.7774704112699098e+00 + -2.3558203272933333e+00 1.6735302338145268e+00 3.1804759360077286e+00 + -2.6659029322598142e+00 1.4449877722203628e+00 3.5872692266038175e+00 + -3.0089594620005151e+00 1.1383698395277402e+00 3.9802761741859691e+00 + -3.3829687412985199e+00 7.5904215519428675e-01 4.3351694777627090e+00 + -3.7812367508919582e+00 3.5512084848804015e-01 4.6330964868545612e+00 + -4.2461479014410859e+00 9.9958433356252652e-02 4.8708551697252558e+00 + -4.7685320453185991e+00 2.8593695854476264e-01 5.0180487213832299e+00 + -5.1575109674939803e+00 7.8377182980329296e-01 5.0331005473184849e+00 + -5.6733171266671665e+00 8.5249233984199924e-01 5.1271362815514614e+00 + id 13268 + loc 7.3963153362274170e-01 4.7248220443725586e-01 373 + blend 0.0000000000000000e+00 + interp 4.4453419167409913e-01:4.0445787189525412e-01:5.7695749162028231e-01:2.8336622894135877e-01:1.2140877572870274e+00:2.5429100571631663e-01:2.0777731871841723e+00:4.4452974633218240e-01:2.9462252803422317e+00:3.8492438399544326e-01:3.2252973842052994e+00:4.2956062079069696e-01:3.9670258999138053e+00 + CVs 20 + 4.7600895769914919e-01 4.4864147642203106e-01 5.5480367074769638e-02 + 9.0352770826756168e-01 8.4536783834647711e-01 1.3018229797673192e-01 + 1.2952342346821766e+00 1.2111311704543402e+00 2.3553034202524412e-01 + 1.6405667597348594e+00 1.5739463249513501e+00 3.8335533014561807e-01 + 1.9256591723654493e+00 1.9285254832375482e+00 5.8166437012975980e-01 + 2.1583431178790837e+00 2.2457114988473577e+00 8.4346891502519028e-01 + 2.3487010580564851e+00 2.4947720896949233e+00 1.1742715647023982e+00 + 2.4983981560312118e+00 2.6625434208225824e+00 1.5648393220479297e+00 + 2.6032283400454448e+00 2.7490494924151547e+00 2.0005992264175472e+00 + 2.6531430912866161e+00 2.7587951156338226e+00 2.4665325191778447e+00 + 2.6384822380272173e+00 2.6875383923096927e+00 2.9398936875396360e+00 + 2.5615830522656302e+00 2.5199592509292419e+00 3.3807673121265212e+00 + 2.4520369926347123e+00 2.2655992321736331e+00 3.7510200689935229e+00 + 2.3663510630992435e+00 1.9665626671597902e+00 4.0722476675087425e+00 + 2.3722919668371212e+00 1.6538852233462429e+00 4.4007605428857293e+00 + 2.5388410310625265e+00 1.3653268436776598e+00 4.7509101177082957e+00 + 2.9022220140154271e+00 1.1688007502484734e+00 5.0822291380437505e+00 + 3.3930459503779873e+00 1.0829573460233402e+00 5.3562631995033838e+00 + 3.7835408827663324e+00 9.1903193753912760e-01 5.6682764973256923e+00 + id 13269 + loc 8.1302177906036377e-01 5.4692715406417847e-01 396 + blend 0.0000000000000000e+00 + interp 4.2819432299250032e-01:3.3090424832939219e-01:1.0509103551961574e-01:3.7823530601631661e-01:1.0345181291703622e+00:3.1514873614101624e-01:1.8800863589270655e+00:3.4635662493975222e-01:2.4450645237355912e+00:3.3586587091268033e-01:3.0676148746883363e+00:4.2819004104927044e-01:3.7508037357630934e+00 + CVs 20 + 8.1835961230205134e-01 2.0170081044940080e-01 -4.0597309591167263e-01 + 1.3540553782969400e+00 2.4332337734319459e-01 -7.6432293997726286e-01 + 1.8125255766130153e+00 2.1656115904986822e-01 -1.1327419465772623e+00 + 2.2636829661940898e+00 1.4965660638276435e-01 -1.5261214871069189e+00 + 2.6986251988420236e+00 3.5809017999383852e-02 -1.9275924426679554e+00 + 3.1076844064787141e+00 -1.2421955583753574e-01 -2.3200685027557633e+00 + 3.4817256012742064e+00 -3.2091823744358616e-01 -2.6891394138242686e+00 + 3.8093592632716526e+00 -5.3902904691498010e-01 -3.0188077160840967e+00 + 4.0805258256502634e+00 -7.6104388450673310e-01 -3.2909309081470797e+00 + 4.2907485109943213e+00 -9.6480299772914102e-01 -3.4927205028629151e+00 + 4.4507670873200293e+00 -1.1353701291361562e+00 -3.6317868670247266e+00 + 4.5786189498364651e+00 -1.2767366424817912e+00 -3.7368353570627137e+00 + 4.6959150464796018e+00 -1.3954875738436665e+00 -3.8267521021783391e+00 + 4.8241454667331150e+00 -1.4938794301670144e+00 -3.9040210078996043e+00 + 4.9813182785150669e+00 -1.5744794283734096e+00 -3.9708832688773632e+00 + 5.1777023280663146e+00 -1.6419621451862407e+00 -4.0430360987458656e+00 + 5.4084399178787086e+00 -1.7095270723391969e+00 -4.1388374286194063e+00 + 5.6397228690155705e+00 -1.8075404427948787e+00 -4.2509402671507299e+00 + 5.7179990495598227e+00 -2.0257834086113489e+00 -4.2683486548134164e+00 + id 13270 + loc 4.7461852431297302e-01 1.9549950957298279e-01 403 + blend 0.0000000000000000e+00 + interp 5.2503450132811502e-01:3.2545747447667717e-01:3.6168687125509580e-02:5.2502925098310171e-01:8.7900804934864529e-01:3.2562719995148931e-01:1.2512925708149616e+00:2.9422731304062971e-01:1.9911419973861473e+00:3.2913088198574653e-01:2.6845563077762984e+00:4.7313017864330698e-01:3.1331285784548708e+00:3.7997959055747527e-01:3.6911161013838107e+00 + CVs 20 + -1.9844977650403606e-01 2.4323397107789307e-01 -2.8121490051192174e-02 + -4.1066191113210315e-01 4.7952366389160950e-01 -3.4589328523447926e-02 + -6.3728244100385922e-01 7.2911059015092350e-01 -4.9007169073138512e-02 + -8.7365768177174008e-01 9.8185325953542724e-01 -8.7971899083984118e-02 + -1.1235022285821337e+00 1.2174922487535311e+00 -1.5301588116815362e-01 + -1.3928224750519234e+00 1.4269268943410842e+00 -2.3512223823884948e-01 + -1.6823633324732987e+00 1.6123404533740202e+00 -3.0889520464863363e-01 + -1.9841598554190796e+00 1.7728575467323999e+00 -3.4589602272853692e-01 + -2.2878112642822535e+00 1.9004772526572011e+00 -3.2607362221024894e-01 + -2.5822972479353821e+00 1.9855735552748919e+00 -2.3829846263981835e-01 + -2.8487116003875261e+00 2.0229852752220183e+00 -8.6961249065024560e-02 + -3.0679834824513779e+00 2.0160157099496843e+00 1.0834282219117086e-01 + -3.2389449425100891e+00 1.9696578601014911e+00 3.3216662340127923e-01 + -3.3727259897719666e+00 1.8818415487125519e+00 5.7924669545257090e-01 + -3.4639768041806662e+00 1.7508861213559428e+00 8.4120903703110550e-01 + -3.4841179459246949e+00 1.5730023220722074e+00 1.1164826196773525e+00 + -3.4352937080993087e+00 1.3268848719808854e+00 1.4297508319549082e+00 + -3.4128349116843042e+00 1.0266344067223658e+00 1.7837117826041453e+00 + -3.5109287993625622e+00 8.3567844308079264e-01 2.0246391455456245e+00 + id 13271 + loc 8.0673044919967651e-01 5.2645432949066162e-01 415 + blend 0.0000000000000000e+00 + interp 5.0751912063317839e-01:3.9471402333636257e-01:5.5935438657923608e-03:5.0751404544197209e-01:3.7166744742499958e-01:4.6463670399317736e-01:9.6868661440982906e-01:3.2291234267963353e-01:1.1651077169297532e+00:4.9630050166227518e-01:1.9871787845768973e+00:3.1845808352073202e-01:2.6357812864480552e+00:4.3270913200402533e-01:3.0392172859989541e+00 + CVs 20 + 2.4669259698989815e-01 1.8300500679245668e-01 3.5762695912456829e-02 + 4.3832462516935766e-01 3.1542984459118112e-01 5.7205065130114141e-02 + 6.0522665881020143e-01 4.2267620084282131e-01 8.0892503898812668e-02 + 7.7196783259299950e-01 5.2544044299926729e-01 1.2186243740334715e-01 + 9.3636793752098191e-01 6.2082616418607017e-01 1.7968368443112179e-01 + 1.0942052119512571e+00 7.0499335535776875e-01 2.5252469336235461e-01 + 1.2428134400871815e+00 7.7618467962234361e-01 3.4116902189499404e-01 + 1.3816021176171989e+00 8.3410491023907241e-01 4.4867438861877984e-01 + 1.5090256790793650e+00 8.7761586734473873e-01 5.7399199526415234e-01 + 1.6229324231260371e+00 9.0599240407019632e-01 7.1268705941186083e-01 + 1.7263423273068232e+00 9.2505027742616841e-01 8.7728147124559286e-01 + 1.8349949298438712e+00 9.4735339942202235e-01 1.1171043340951536e+00 + 1.9889948136713533e+00 9.6927263875760872e-01 1.4723560486751326e+00 + 2.2312574928797493e+00 9.5616281758107924e-01 1.8823716936349841e+00 + 2.5455271737309033e+00 8.8670254462967923e-01 2.2400458304139947e+00 + 2.8979274895675520e+00 7.6759391580714564e-01 2.5147496840006740e+00 + 3.2800943598662906e+00 6.0297867819816586e-01 2.7166382246615619e+00 + 3.6772961851875938e+00 3.9860095505907278e-01 2.8407123602519517e+00 + 3.8575772658857845e+00 2.6021611184888327e-01 2.8349516058355015e+00 + id 13272 + loc 6.9156146049499512e-01 3.4924149513244629e-02 407 + blend 0.0000000000000000e+00 + interp 4.3852492711079055e-01:3.5680171462514437e-01:6.4873363621140712e-02:3.1727918523663323e-01:9.4143292076459084e-01:3.9175897154264783e-01:1.1338231365245632e+00:4.3852054186151945e-01:1.7787006976193145e+00:4.3063190470364299e-01:2.0205911989453544e+00:4.3292057650889809e-01:2.8689939431931015e+00:3.8128019621995507e-01:3.0201802636125423e+00:4.2220685234828131e-01:3.6752258409705867e+00 + CVs 20 + -2.8197852039050236e-01 3.6822010075877804e-01 3.6387913881074735e-02 + -3.8370603669538028e-01 5.7610043893112373e-01 5.7794506771184313e-02 + -4.2060233011753900e-01 7.1883657929762401e-01 7.3288364884457127e-02 + -4.5607445557100257e-01 8.4049929256621003e-01 8.8450025994356418e-02 + -4.8594292736032141e-01 9.4349798571309784e-01 1.0629249207355504e-01 + -5.0789494789517420e-01 1.0350710790785869e+00 1.3249593557889369e-01 + -5.2527704559112243e-01 1.1304671200179461e+00 1.7246131154324273e-01 + -5.5147384496263063e-01 1.2483656951756301e+00 2.1848889662905291e-01 + -6.0089473907220192e-01 1.3859000056248867e+00 2.4220753300028119e-01 + -6.6961717165764778e-01 1.5145426850024826e+00 2.2291868880464255e-01 + -7.4556996985284096e-01 1.6158875347534332e+00 1.6384215791182150e-01 + -8.2530319633779814e-01 1.6896861038030946e+00 7.3208728446080090e-02 + -9.0898027878531196e-01 1.7374505381871801e+00 -4.4999407439414746e-02 + -9.8857964063903880e-01 1.7516286803137548e+00 -1.8391527287611759e-01 + -1.0501287785942801e+00 1.7239814401509681e+00 -3.3205467816505319e-01 + -1.0896215767323680e+00 1.6588797149847205e+00 -4.8631044595416789e-01 + -1.1194841867728849e+00 1.5724742459918040e+00 -6.5600373688718627e-01 + -1.1584400518956848e+00 1.4818266214128524e+00 -8.4710249531734627e-01 + -1.2797491977300652e+00 1.4441882789357954e+00 -1.0656187480989523e+00 + id 13273 + loc 1.4282165095210075e-02 4.6664789319038391e-01 382 + blend 0.0000000000000000e+00 + interp 5.1674649107386772e-01:4.9204320347156766e-01:3.6877462593741595e-01:1.6769933633225281e-01:1.0732609951289585e+00:2.8155327370318056e-01:2.2776236647274213e+00:4.6006618349533701e-01:2.9893150862364979e+00:5.1674132360895697e-01:3.3280077992423927e+00:3.3930639288174869e-01:3.9660670064075711e+00 + CVs 20 + -4.2620056558078501e-01 1.4378602337169893e-01 -8.8774842877449678e-01 + -7.6635902544476098e-01 1.2638687687952338e-01 -1.4935042864281187e+00 + -1.0971724911647378e+00 5.3265985534244997e-02 -2.0152894723282833e+00 + -1.4483389422603099e+00 -3.8616025522258290e-02 -2.5199049165254657e+00 + -1.8194598229711167e+00 -1.4473926882149801e-01 -2.9996030058147092e+00 + -2.2143980408068651e+00 -2.6281529633278566e-01 -3.4473695876145101e+00 + -2.6313539925417926e+00 -3.9167230139152021e-01 -3.8586424686145571e+00 + -3.0618503871698612e+00 -5.3591034713910957e-01 -4.2326554522492206e+00 + -3.4939603613660664e+00 -7.0665634376416175e-01 -4.5721231502263828e+00 + -3.9152676572151544e+00 -9.1622959540300375e-01 -4.8757145342582531e+00 + -4.3159755435344156e+00 -1.1742515521812371e+00 -5.1394838973914663e+00 + -4.6889883868529108e+00 -1.4895566948834529e+00 -5.3654542951537092e+00 + -5.0237996122973803e+00 -1.8670650911544366e+00 -5.5577421847212936e+00 + -5.3064327363810939e+00 -2.3009707723201975e+00 -5.7152894500907001e+00 + -5.5264401578681071e+00 -2.7775069351633834e+00 -5.8327070501594847e+00 + -5.6773398646167568e+00 -3.2809048563000172e+00 -5.9036570546198330e+00 + -5.7557181299163069e+00 -3.7911422551241252e+00 -5.9249892729717750e+00 + -5.7716798311704434e+00 -4.2873743354325207e+00 -5.9042455645131930e+00 + -5.7874897377387793e+00 -4.7688622796891744e+00 -5.8825357637124789e+00 + id 13274 + loc 1.2685334682464600e-01 2.2854883223772049e-02 1078 + blend 0.0000000000000000e+00 + interp 4.1222667611334957e-01:1.2572075085028853e-01:9.7759584295132151e-01:4.1222255384658846e-01:1.9852721826254689e+00:2.8097588005007629e-01:2.4075463620570661e+00:3.1329312623828592e-01:3.1518920191006208e+00:3.3638408639435308e-01:3.9900719079057354e+00 + CVs 20 + 1.7981894858924485e-01 3.8612826558733010e-01 -8.0059454713624661e-02 + 2.7934953019682707e-01 7.1934417426424868e-01 -1.7372683603186978e-01 + 3.5245440565994046e-01 1.0410986347241389e+00 -2.8309295197821110e-01 + 4.1918389047234977e-01 1.3635859864492295e+00 -4.0911366978593711e-01 + 4.7165537754445519e-01 1.6801650024554484e+00 -5.5416603482466598e-01 + 4.9660626490528470e-01 1.9823432611141516e+00 -7.2049497281129016e-01 + 4.7472788148283784e-01 2.2589572107229570e+00 -9.1094027220999529e-01 + 3.8917774983995512e-01 2.4945607476619069e+00 -1.1255109963588454e+00 + 2.3266935340275041e-01 2.6701358550787342e+00 -1.3580718902222726e+00 + 9.9540821194605833e-03 2.7675197394917612e+00 -1.5966215106432295e+00 + -2.6317089889080436e-01 2.7771291603934238e+00 -1.8275656523843240e+00 + -5.6770383170352345e-01 2.7004291009914265e+00 -2.0419685768855129e+00 + -8.8816108739312782e-01 2.5438951658495412e+00 -2.2379629935621037e+00 + -1.2119595896291826e+00 2.3108668173454956e+00 -2.4196560350630212e+00 + -1.5232974854630157e+00 1.9828070712595820e+00 -2.5962798791248165e+00 + -1.7675568002911390e+00 1.4896265758925029e+00 -2.7748595849749793e+00 + -1.7924907349584847e+00 8.0724945467931053e-01 -2.9340948579005275e+00 + -1.5835528389937017e+00 1.5869938808740258e-01 -3.0419629969239557e+00 + -1.5121041771311279e+00 -2.4711081467749896e-01 -3.1411294251056630e+00 + id 13275 + loc 1.2814240157604218e-01 7.7880495786666870e-01 377 + blend 0.0000000000000000e+00 + interp 4.8726532968954289e-01:2.6222353153518047e-01:3.0954763460191803e-01:3.2857141354500624e-01:6.2644032751173906e-01:2.6708232783510566e-01:1.9848080968631607e+00:4.8726045703624604e-01:2.6069033855332915e+00:2.5378955924717544e-01:3.1068809898341070e+00:3.6509322811158545e-01:3.9116730356724703e+00 + CVs 20 + -6.8464113793244419e-01 2.7626998232802807e-01 -3.6242577050571056e-01 + -1.2217686396241998e+00 4.0798758686934111e-01 -5.8796036455085221e-01 + -1.7429428469757151e+00 4.6134787997166371e-01 -7.7658846320908470e-01 + -2.3068016672714000e+00 4.6818390526974740e-01 -9.8321042807743597e-01 + -2.9026939557384290e+00 4.3069758261612701e-01 -1.2256453474994879e+00 + -3.5068462059243108e+00 3.4037543785322155e-01 -1.5133990821075216e+00 + -4.0970519599997717e+00 1.8063381821550695e-01 -1.8453369368149268e+00 + -4.6494941650221051e+00 -5.6590022711791477e-02 -2.2118811743708395e+00 + -5.1376144129740906e+00 -3.6406594319536811e-01 -2.5939468711348712e+00 + -5.5405916878343193e+00 -7.2463986370870659e-01 -2.9618996468277796e+00 + -5.8408681236563478e+00 -1.1179730329567086e+00 -3.2837051000089761e+00 + -6.0343078767585112e+00 -1.5175532323603518e+00 -3.5341702023790322e+00 + -6.1458063376646397e+00 -1.9076848822565249e+00 -3.7221046018842596e+00 + -6.2379036319459313e+00 -2.3132816308556614e+00 -3.9023908279824600e+00 + -6.3712084120442656e+00 -2.7746474369248348e+00 -4.1287017187599115e+00 + -6.5774475657470228e+00 -3.2765234555992944e+00 -4.4005535105276499e+00 + -6.8677747724820453e+00 -3.7490829780791950e+00 -4.6650226883644752e+00 + -7.2084568409278553e+00 -4.1429265624853500e+00 -4.8782261587191922e+00 + -7.4360718261439569e+00 -4.4525069754440096e+00 -5.0837226397222643e+00 + id 13276 + loc 5.0091654062271118e-01 6.9116842746734619e-01 374 + blend 0.0000000000000000e+00 + interp 5.0406394417252143e-01:4.6250712630542468e-01:5.0115964700794957e-01:4.7371972130370665e-01:9.9912439354865024e-01:3.1463544248701936e-01:1.3744028367971655e+00:4.8328025658993168e-01:2.0474033374146652e+00:3.0058824226713127e-01:2.7929218098365634e+00:5.0405890353307969e-01:3.2050393891639741e+00:4.1728115198284260e-01:3.9418977787448459e+00 + CVs 20 + -6.8213542222785273e-01 3.5164690903708662e-01 -2.2131868825346496e-01 + -1.2346070961133015e+00 5.8991682110019217e-01 -3.7550468362447664e-01 + -1.7726422198365857e+00 7.5771398860857997e-01 -4.9829927668376589e-01 + -2.3321436315393327e+00 8.9097926461056698e-01 -6.2333098333125925e-01 + -2.8845342125031355e+00 1.0015470976609717e+00 -7.7350040510686524e-01 + -3.4043462076896827e+00 1.0863597929922155e+00 -9.6449412691832981e-01 + -3.8774981954441143e+00 1.1319517456435180e+00 -1.1970768563973726e+00 + -4.2989697197132992e+00 1.1298011547653959e+00 -1.4596346085543348e+00 + -4.6751667342287968e+00 1.0817488024690880e+00 -1.7380796637840885e+00 + -5.0260248397513410e+00 9.9078127714016806e-01 -2.0274031094078460e+00 + -5.3754115850454793e+00 8.6051394449914742e-01 -2.3294559675231010e+00 + -5.7421470795577241e+00 6.8899221425331003e-01 -2.6413724384076769e+00 + -6.1321410524826767e+00 4.5168662381390989e-01 -2.9535488564076311e+00 + -6.5282922185436654e+00 1.1701041817658364e-01 -3.2468206864396003e+00 + -6.9047381158285202e+00 -2.9853581939056184e-01 -3.5002766471109301e+00 + -7.2541972671384327e+00 -7.3224098934353776e-01 -3.7223394593668484e+00 + -7.5820293614969501e+00 -1.1356250284787741e+00 -3.9385548731003457e+00 + -7.9034330659182768e+00 -1.4838556762929356e+00 -4.1457229786966270e+00 + -8.2566847733667341e+00 -1.7443490525526739e+00 -4.2956357161867631e+00 + id 13277 + loc 1.8087565898895264e-02 4.9252393841743469e-01 399 + blend 0.0000000000000000e+00 + interp 4.7111146842182361e-01:3.4971801825772825e-01:1.2201746756762344e-01:3.2520977453489625e-01:1.1079295687431538e+00:4.0735056264266506e-01:1.8458650820064000e+00:4.7110675730713941e-01:2.3941713291784756e+00:4.2130386974247380e-01:2.9229175748154699e+00:3.3240245117085931e-01:3.0048157114730443e+00:2.6611671109059332e-01:3.6819591054103977e+00 + CVs 20 + -2.2172894963108286e-01 2.8502338223910706e-01 2.8603959267764667e-01 + -4.4291957337400828e-01 5.5658502583163005e-01 5.6851092227783651e-01 + -6.8086640327778836e-01 8.1169562082408486e-01 8.5791830306973604e-01 + -9.3904260178799248e-01 1.0492422945544086e+00 1.1566094113689231e+00 + -1.2060403156987063e+00 1.2665559563354956e+00 1.4575915723768014e+00 + -1.4577083885189455e+00 1.4561579989950060e+00 1.7508152568579614e+00 + -1.6646067168791223e+00 1.6131895436747121e+00 2.0195221947203090e+00 + -1.8130613572277459e+00 1.7466784633531329e+00 2.2407617388354910e+00 + -1.9230975388972191e+00 1.8653577447739085e+00 2.4472137608271347e+00 + -2.0031834072440815e+00 1.9286608140070978e+00 2.7127499322777435e+00 + -2.0290542945650167e+00 1.8846230916543554e+00 3.0484160936406743e+00 + -1.9805758081200491e+00 1.6971234286231323e+00 3.4188277534912190e+00 + -1.8823255133092562e+00 1.3516958020397825e+00 3.7764307557873864e+00 + -1.8020759009096263e+00 8.6605578009042938e-01 4.0899010249808905e+00 + -1.7978631489199830e+00 2.8933304135769106e-01 4.3903786428376534e+00 + -1.9005046273919273e+00 -3.2076198758347058e-01 4.7738716301964237e+00 + -2.1292512495470386e+00 -8.4569740577482844e-01 5.3482236588921781e+00 + -2.3925402506468876e+00 -9.7882600150193477e-01 5.9814328388722586e+00 + -2.5188668815961877e+00 -6.6882078069452522e-01 6.2777853713970568e+00 + id 13278 + loc 2.5608208775520325e-01 3.6993253231048584e-01 401 + blend 0.0000000000000000e+00 + interp 4.7673577509809245e-01:3.8247189187301872e-01:1.1400244886394795e-04:3.0868027968957540e-01:6.0305481932150329e-01:2.9883140560537103e-01:1.2594629681236398e+00:3.2577434933580729e-01:1.9863178577560101e+00:4.7673100774034149e-01:2.6273429640079784e+00:3.7840069911479896e-01:3.0002076873200862e+00:2.6583424420912372e-01:3.5437721741749932e+00 + CVs 20 + -2.9458723424814581e-01 2.1060147299165888e-01 1.4347434509134094e-01 + -5.6374037407162114e-01 4.0790059882816604e-01 2.6273429639045998e-01 + -8.2466693126588275e-01 5.8680833838027735e-01 3.7703181365205829e-01 + -1.0858661598025061e+00 7.4620341113651212e-01 4.9687931417353259e-01 + -1.3472324694109707e+00 8.8831995211168380e-01 6.2386464404645237e-01 + -1.6103672146012060e+00 1.0160200769116192e+00 7.6243237193107594e-01 + -1.8763289621793147e+00 1.1314195563469247e+00 9.2392622600881147e-01 + -2.1439569072616709e+00 1.2337063814655733e+00 1.1261540831641250e+00 + -2.4079916657872591e+00 1.3190555389082235e+00 1.3858264115392465e+00 + -2.6599432735966828e+00 1.3820334958385703e+00 1.7128513740242226e+00 + -2.8932542389950906e+00 1.4174026628613232e+00 2.1072902588938782e+00 + -3.1071418422596233e+00 1.4202115998722555e+00 2.5578098786644894e+00 + -3.3023606088354027e+00 1.3833201203655754e+00 3.0456885990698099e+00 + -3.4722108081711229e+00 1.3036580890864018e+00 3.5467971163588139e+00 + -3.5989154761085826e+00 1.2026688340995997e+00 4.0294766516082108e+00 + -3.6678832934773977e+00 1.1232677498992001e+00 4.4646380901888687e+00 + -3.6883111880901724e+00 1.0956793948663828e+00 4.8382519586387280e+00 + -3.6763590178973113e+00 1.1118955617670070e+00 5.1686679877658417e+00 + -3.5454198411564919e+00 1.1388945375047357e+00 5.5341537124386768e+00 + id 13279 + loc 2.9167531058192253e-02 2.5921169668436050e-02 393 + blend 0.0000000000000000e+00 + interp 3.8682668645441409e-01:2.4257735058747390e-01:4.7570288146250927e-01:3.8682281818754954e-01:1.9251919390165415e+00:2.9296188694538683e-01:2.3926713130614532e+00:3.6586044408654483e-01:2.9646678109074891e+00:2.5291154463143400e-01:3.3634638847431755e+00:3.6301196621927695e-01:3.9714607238946158e+00 + CVs 20 + -1.4263111048333305e-01 3.1473288379832687e-01 3.1554564078148861e-01 + -3.1670125343475730e-01 6.4883634479039376e-01 6.2811347833003683e-01 + -5.2129123292938384e-01 1.0110514734685445e+00 9.0697561050199393e-01 + -7.6203044928288954e-01 1.3882389629669694e+00 1.1299356504580298e+00 + -1.0508202382230700e+00 1.7446549473450621e+00 1.2877540990504770e+00 + -1.3906378073635823e+00 2.0444031063084309e+00 1.3873723392807809e+00 + -1.7731868086703211e+00 2.2634869436270701e+00 1.4410371099936958e+00 + -2.1825894197853475e+00 2.3885094046477144e+00 1.4616432177499106e+00 + -2.6179018924355746e+00 2.4186040366431465e+00 1.4733239266527010e+00 + -3.0862565161816775e+00 2.3584782915770717e+00 1.5160113790355214e+00 + -3.5643074842489950e+00 2.2090875284900080e+00 1.6298901381853292e+00 + -3.9926614450729834e+00 1.9687908974460893e+00 1.8129491057328058e+00 + -4.3307263136961529e+00 1.6452101201599239e+00 2.0183804478683980e+00 + -4.5910651125745687e+00 1.2546121124617524e+00 2.2309307825381390e+00 + -4.8027803233177897e+00 8.1341438091839147e-01 2.4727183987409198e+00 + -4.9711886539948935e+00 3.5691032135980927e-01 2.7141385605799346e+00 + -5.0432994557946333e+00 -4.5878319987031513e-02 2.8203811084981605e+00 + -4.9879230666584933e+00 -2.7374731027950994e-01 2.6344881705065046e+00 + -5.0063619889736399e+00 -7.4658213904392956e-01 2.8513834549073458e+00 + id 13280 + loc 3.5104086995124817e-01 1.5314657986164093e-01 376 + blend 0.0000000000000000e+00 + interp 6.0398126499364568e-01:4.0300240626402384e-01:7.2648728820590147e-04:4.9811883595766959e-01:6.6688969261672326e-01:6.0397522518099578e-01:1.0043933931818483e+00:3.8163596583696369e-01:1.7539991679755484e+00:3.0811476048522368e-01:2.1329639906869944e+00:2.9567321318483386e-01:3.0682467382356293e+00 + CVs 20 + 8.0174237943892057e-01 4.0325528272647915e-01 1.2408341740235321e-01 + 1.4228446731353479e+00 6.0216238468720562e-01 6.8190400904221238e-02 + 1.9918286123261846e+00 6.6724929964003377e-01 -9.7231844306780779e-02 + 2.6072298769489879e+00 7.2158347941913770e-01 -3.0010270408680939e-01 + 3.2852469302646257e+00 8.3018772095896487e-01 -4.5660544629592370e-01 + 4.0132442815998788e+00 9.9436315499672234e-01 -4.7175342937382991e-01 + 4.7436230551909722e+00 1.1969747763714169e+00 -2.8095673930952492e-01 + 5.4044337039398522e+00 1.4212458874509439e+00 1.2784530016064211e-01 + 5.9406112066009378e+00 1.6344983409830920e+00 7.1798143107385393e-01 + 6.3521968697989113e+00 1.7845621066605259e+00 1.4312679203968588e+00 + 6.6712579803592060e+00 1.8039165381772881e+00 2.2229145225395013e+00 + 6.9002848954789462e+00 1.6136180065395287e+00 3.0347814530910351e+00 + 7.0017799230382609e+00 1.1821018544380144e+00 3.7552763698101881e+00 + 6.9519083307578153e+00 5.7510998743222430e-01 4.2684510266860594e+00 + 6.8067117229616887e+00 -1.1050597865903988e-01 4.4953691123850517e+00 + 6.7547847234277185e+00 -7.9705632287310291e-01 4.3884139944217440e+00 + 6.9530541291555350e+00 -1.2923811799336473e+00 3.9354237933823772e+00 + 7.2544026571722249e+00 -1.4326815693363937e+00 3.4172044953756786e+00 + 7.4768875148939955e+00 -1.7065347012763734e+00 3.0953524414275995e+00 + id 13281 + loc 3.1562611460685730e-01 6.6332238912582397e-01 380 + blend 0.0000000000000000e+00 + interp 4.5315285249750825e-01:3.1200092482687963e-01:4.2673195824822530e-01:3.3475984470746623e-01:1.1490536527699022e+00:4.3152998722102603e-01:2.0121755208803469e+00:3.6413286790826338e-01:2.5709976574559441e+00:2.9811077158309013e-01:3.0942680026175977e+00:4.5314832096898328e-01:3.9912206651206312e+00 + CVs 20 + -4.1958319005178074e-01 2.6226536200980566e-01 -4.2976175281283679e-01 + -7.9425687477700613e-01 4.5077687473005484e-01 -7.4682237551277786e-01 + -1.1564565229025661e+00 6.1200903144008945e-01 -1.0393429738718420e+00 + -1.5184100223434851e+00 7.7463489277086783e-01 -1.3532592553822891e+00 + -1.8701038423879117e+00 9.4272429790351719e-01 -1.6947654476218648e+00 + -2.2045759409398262e+00 1.1136405553918540e+00 -2.0694580280848096e+00 + -2.5233157060617279e+00 1.2775395913409764e+00 -2.4839498841628118e+00 + -2.8302922393820023e+00 1.4178352133157435e+00 -2.9438934208606571e+00 + -3.1258758253683787e+00 1.5150838944250751e+00 -3.4517312982894741e+00 + -3.4098075655463869e+00 1.5501518344823562e+00 -4.0050945686390680e+00 + -3.6884883827864852e+00 1.4992421532981024e+00 -4.5937836676886308e+00 + -3.9674705139858664e+00 1.3307208153826227e+00 -5.1988861511776197e+00 + -4.2365731077603721e+00 1.0157212028812279e+00 -5.7849394472301690e+00 + -4.4705037962342331e+00 5.7357263033492112e-01 -6.2946840591750224e+00 + -4.6605321466538907e+00 9.6894109276282503e-02 -6.6901567442028833e+00 + -4.8302162964452497e+00 -3.3116453777043953e-01 -6.9890117333250208e+00 + -5.0117508142162750e+00 -6.8536113319002911e-01 -7.2222867893377423e+00 + -5.2321592848735161e+00 -9.6749026230138124e-01 -7.4016119252209336e+00 + -5.5098266051142630e+00 -1.3004388318360398e+00 -7.5819963369764753e+00 + id 13282 + loc 1.6734455525875092e-01 3.0398452281951904e-01 1080 + blend 0.0000000000000000e+00 + interp 1.7353358294414418e+00:2.7311929699952747e-01:1.7707115807792384e-02:6.4476969503835235e-01:2.6663532324754258e-01:1.0826509673710043e+00:5.6322215596478986e-01:1.4299594850812307e+00:8.0197506298650889e-01:1.7353258294414418e+00:8.5302598558460052e-01:9.6780224792712444e-01:2.6674395616746716e+00:3.3543687492316132e-01:2.7505041130171537e+00:3.1515277648261830e-01:3.2130606458345854e+00 + CVs 20 + 5.0949004144892462e-01 4.2956210568862963e-01 8.2823376269938326e-03 + 7.8273499791147139e-01 7.0237771777631353e-01 4.9067573681925714e-03 + 1.0155222437354585e+00 9.2936239067939097e-01 -1.7712686222561308e-02 + 1.2967642730349596e+00 1.1395547934444168e+00 -6.5944251457029340e-02 + 1.6102539725557907e+00 1.3199010030689529e+00 -1.4143569161437750e-01 + 1.9328496046206813e+00 1.4582361579533263e+00 -2.4216535897520125e-01 + 2.2345165065618078e+00 1.5443854888305606e+00 -3.5989420877053258e-01 + 2.4855123961002428e+00 1.5738836725618761e+00 -4.7796103630553138e-01 + 2.6700798328820801e+00 1.5532811370613824e+00 -5.7360030125666295e-01 + 2.7973473450074535e+00 1.4985931129645877e+00 -6.3684004010963302e-01 + 2.8858117197344151e+00 1.4159094373203267e+00 -6.9075513505808006e-01 + 2.9340518226784194e+00 1.2949504484251466e+00 -7.6382325338349921e-01 + 2.9292369346696829e+00 1.1312907304514284e+00 -8.5974090436562078e-01 + 2.8658065992568669e+00 9.3367739613427325e-01 -9.6859131570165491e-01 + 2.7478153397875076e+00 7.1705521832859254e-01 -1.0799613750349357e+00 + 2.5926499872947844e+00 4.9958391304151428e-01 -1.1820973690201644e+00 + 2.4392001963717744e+00 2.9042412960241826e-01 -1.2645133843472145e+00 + 2.3363808469980700e+00 5.7636719244361756e-02 -1.3319567446306051e+00 + 2.3099661670334273e+00 -4.0350343185774051e-01 -1.4755279735737508e+00 + id 13283 + loc 4.9912539124488831e-01 6.8342500925064087e-01 409 + blend 0.0000000000000000e+00 + interp 3.7442715536440013e-01:3.0383782489114008e-01:1.5240961686466226e-01:3.1236120803886364e-01:9.9797550483583175e-01:3.7442341109284649e-01:1.7498919501728070e+00:2.9294113138435735e-01:2.3417431952080707e+00:3.7209120969883169e-01:3.0042711049066280e+00:3.7423515776137894e-01:3.6615098982339425e+00 + CVs 20 + 3.9979992589205782e-01 1.4070719509731230e-01 -8.8670263154894055e-02 + 7.1916315159664090e-01 2.6190366071226251e-01 -1.9926601942182839e-01 + 1.0070753282569280e+00 3.8320402036036327e-01 -3.0646403577184189e-01 + 1.2836947089569126e+00 5.1559251739100564e-01 -4.0027199698351157e-01 + 1.5475401183530630e+00 6.5823447481932607e-01 -4.8337271058111397e-01 + 1.8008482736008307e+00 8.1130176323738623e-01 -5.5637713077236040e-01 + 2.0518885967852016e+00 9.7795891636931520e-01 -6.1846176942176023e-01 + 2.3165537879658271e+00 1.1622634210022829e+00 -6.6696243785162257e-01 + 2.6144907522979857e+00 1.3613770397244060e+00 -6.9440100088282342e-01 + 2.9635973422447428e+00 1.5628094507369972e+00 -6.8918571743126744e-01 + 3.3783059221906293e+00 1.7451992745499867e+00 -6.4413184906968768e-01 + 3.8593626814859898e+00 1.8742282149929692e+00 -5.6412225328127774e-01 + 4.3841191216024784e+00 1.9129833460398402e+00 -4.6291667498822558e-01 + 4.9218086336432627e+00 1.8408055968517663e+00 -3.5352877617444178e-01 + 5.4469837545734894e+00 1.6530657385681558e+00 -2.4605375331871349e-01 + 5.9379138010441626e+00 1.3555510920298413e+00 -1.5368668986609302e-01 + 6.3678861663788675e+00 9.6473648365097375e-01 -8.6679454387876942e-02 + 6.7037478609088277e+00 5.0771563232070616e-01 -3.1630373804603540e-02 + 6.7925496837051664e+00 1.2236055806980373e-01 5.4596334511836764e-02 + id 13284 + loc 5.4915672540664673e-01 9.5332324504852295e-01 400 + blend 0.0000000000000000e+00 + interp 4.6948327154131014e-01:3.2690048991897686e-01:1.0917617087165321e-01:3.3973581473477527e-01:1.0000977853960920e+00:3.2359817169276800e-01:1.9062121319739980e+00:4.6947857670859477e-01:2.1119050822421541e+00:3.7541180768794441e-01:2.8618926571409045e+00:3.5273863391442506e-01:3.1264183299004049e+00:4.1475976590753372e-01:3.7846735350236607e+00 + CVs 20 + -2.5803703682273171e-01 3.4760970034972005e-01 -2.1694501022620755e-01 + -4.6994109964346253e-01 6.9602518355382792e-01 -4.8712131628857841e-01 + -6.7422667696468053e-01 1.0302932826194946e+00 -7.9808559196936457e-01 + -9.1195354547402097e-01 1.3344601622095684e+00 -1.1332697791116848e+00 + -1.2140142771044116e+00 1.5848916661335917e+00 -1.4697256991290606e+00 + -1.5775890695340571e+00 1.7544333461357597e+00 -1.7815333278994610e+00 + -1.9689992130448497e+00 1.8311674677580547e+00 -2.0527462761482935e+00 + -2.3497017792749832e+00 1.8266170199496612e+00 -2.2818732321039099e+00 + -2.7074364547884051e+00 1.7611316352072746e+00 -2.4784231385914222e+00 + -3.0505234363911984e+00 1.6400946297896912e+00 -2.6567419303210338e+00 + -3.3893114411184060e+00 1.4512894633119455e+00 -2.8326300101560653e+00 + -3.7316404881387046e+00 1.1909810514701371e+00 -3.0105004952902932e+00 + -4.0839127639231023e+00 9.1114233532508981e-01 -3.1689870208467994e+00 + -4.4458605769360320e+00 6.9314973222257903e-01 -3.2832306661747030e+00 + -4.8083268230745331e+00 5.7199732082937049e-01 -3.3510032979898963e+00 + -5.1933890147816060e+00 5.2566673542218689e-01 -3.3955543413859610e+00 + -5.6516453108044260e+00 5.1774920943076097e-01 -3.4596850122454446e+00 + -6.1923163083597856e+00 5.2495389892661026e-01 -3.5918754500130023e+00 + -6.7984587750224721e+00 5.3567132258521299e-01 -3.8251928005398286e+00 + id 13285 + loc 9.1822499036788940e-01 2.9616308212280273e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0873549888486077e-01:3.2317037936771664e-01:6.5257055868232605e-02:2.6959854327480365e-01:9.2858186171393120e-01:2.2646549560911425e-01:1.7910285817752640e+00:2.7300714092105166e-01:2.2077151345299462e+00:4.0873141152987191e-01:3.0069136125139120e+00:2.7145001216341152e-01:3.7201797282500975e+00 + CVs 20 + -3.4445639959736818e-02 3.5724935820903964e-01 2.9119542002460841e-01 + -1.0744043141289872e-01 6.8128503785450312e-01 5.6932165430667658e-01 + -2.2713227324334279e-01 9.8272167792242604e-01 8.4434716636699969e-01 + -3.9980719994717073e-01 1.2651760322376462e+00 1.1041193948224697e+00 + -5.9503129235315955e-01 1.5268788115160319e+00 1.3224550346730672e+00 + -7.4147509442245352e-01 1.7718773988189847e+00 1.4896256024810572e+00 + -7.9853504650473750e-01 2.0007310478837135e+00 1.6210819426029652e+00 + -7.8671047663580496e-01 2.2175332703154913e+00 1.7498517684978492e+00 + -7.2523712560892029e-01 2.4122787542575694e+00 1.9101672508882648e+00 + -6.1945849246899920e-01 2.5253516754711653e+00 2.1219691256529956e+00 + -4.9712205946893762e-01 2.4971358205559655e+00 2.3655190639215791e+00 + -3.9355725858556867e-01 2.3534793765774582e+00 2.6155004087501625e+00 + -3.2415848088897259e-01 2.1246411165069854e+00 2.8812170949546445e+00 + -3.1491077754177454e-01 1.8178515997908546e+00 3.1643770182917055e+00 + -3.9918155987447324e-01 1.4537839245123696e+00 3.4456872128043323e+00 + -6.0420020706530109e-01 1.0582686661572935e+00 3.6668220469614985e+00 + -9.3932464748221400e-01 6.7228759506345959e-01 3.7443938063750131e+00 + -1.3531563257389925e+00 3.5143405696734331e-01 3.6879393679834038e+00 + -1.6414717472557852e+00 -2.9036030607435426e-02 3.8131947530183297e+00 + id 13286 + loc 1.2606836855411530e-01 4.6593025326728821e-01 402 + blend 0.0000000000000000e+00 + interp 4.9170865635390448e-01:3.2900034140967832e-01:4.1692818413934241e-03:4.6212638473470469e-01:6.8024499414543937e-01:4.4767150851127763e-01:1.0454664729189198e+00:2.7834121792946814e-01:1.6266414912960194e+00:3.4070670444144047e-01:2.1792736456353592e+00:4.2565119252080202e-01:3.0139122410687893e+00:4.9170373926734096e-01:3.6247845037682840e+00 + CVs 20 + -1.4971439375205059e-01 3.2273831684494475e-01 1.1777853507780384e-01 + -3.0607514253259316e-01 6.6636009547677988e-01 2.3192278364008043e-01 + -4.8763729833406405e-01 1.0349704514081473e+00 3.1330407793521675e-01 + -7.0707316626470318e-01 1.4217681542243386e+00 3.5272058972510734e-01 + -9.7291894230765208e-01 1.8153813423944214e+00 3.6112383040632018e-01 + -1.2911670346172821e+00 2.2042475162843198e+00 3.5372517381931357e-01 + -1.6652774718363730e+00 2.5762878968966940e+00 3.4737869216958861e-01 + -2.0961915479438606e+00 2.9162762386200045e+00 3.6393574331928258e-01 + -2.5834343608567689e+00 3.2034037468912313e+00 4.2159593623121250e-01 + -3.1275138755830816e+00 3.4088967071762717e+00 5.1777327583795474e-01 + -3.7245185458088921e+00 3.4928487227937763e+00 6.3693906936056965e-01 + -4.3489314691798304e+00 3.4079437383725093e+00 7.7666575456191311e-01 + -4.9376802310610932e+00 3.1376638584010950e+00 9.5782865059154676e-01 + -5.4164934107195517e+00 2.7535676884497131e+00 1.2219552579143100e+00 + -5.7507683071497295e+00 2.3983063514467862e+00 1.6054214025153202e+00 + -5.9503490425293091e+00 2.2429136867008483e+00 2.0843949616328361e+00 + -6.0509698949882109e+00 2.4260097089785182e+00 2.5292532213935170e+00 + -6.1194177276685471e+00 2.8156666532652799e+00 2.7964599651435043e+00 + -6.3759025736893165e+00 2.8463411124562201e+00 3.1548491318587635e+00 + id 13287 + loc 2.6922532916069031e-01 6.0434013605117798e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0460364934798265e-01:3.0104503584904746e-01:5.3145530062385782e-01:4.0459960331148920e-01:9.9894381979269431e-01:3.1161592929769860e-01:1.5385915294318000e+00:3.0152741649304288e-01:2.4304382263139672e+00:2.9560948845138663e-01:3.5049824453092366e+00 + CVs 20 + 2.2836728004261389e-01 3.1996280540767608e-01 -2.4437959665505318e-01 + 4.7240989512468290e-01 6.6048194615186961e-01 -5.1380381723516655e-01 + 7.1713827263005658e-01 1.0114768708282984e+00 -7.7758825630347828e-01 + 9.5541908696425915e-01 1.3437081265897086e+00 -1.0346201935713586e+00 + 1.1887935704834651e+00 1.6238261504168261e+00 -1.2917272137822211e+00 + 1.4208768343402285e+00 1.8028104086155865e+00 -1.5403886305906951e+00 + 1.6494074927063302e+00 1.8368540707468874e+00 -1.7432225509150991e+00 + 1.8550794173307765e+00 1.7242557189286369e+00 -1.8373685287630905e+00 + 2.0090534797904454e+00 1.5344300862982478e+00 -1.7907490410857716e+00 + 2.1151464256249950e+00 1.3590401934687848e+00 -1.6596388740418520e+00 + 2.2227446428848943e+00 1.2268777388990821e+00 -1.5384739521701281e+00 + 2.3848485754847450e+00 1.1123636986033352e+00 -1.4859035562305702e+00 + 2.6147565544923648e+00 9.8763603924641918e-01 -1.5155756240781086e+00 + 2.8954157533228670e+00 8.3230108018301741e-01 -1.6373404124815414e+00 + 3.2096939284690222e+00 6.1721924157742825e-01 -1.8921229681139826e+00 + 3.5171176681720393e+00 3.1320850348344503e-01 -2.3572203688181221e+00 + 3.7033996446231128e+00 -2.1686275404796618e-02 -3.0482342326868008e+00 + 3.7306501324659420e+00 -2.0830064177818938e-01 -3.7247903875353847e+00 + 3.7827846359973787e+00 -1.0685924561916604e-01 -3.9492195531410488e+00 + id 13288 + loc 6.8397015333175659e-01 8.7696892023086548e-01 415 + blend 0.0000000000000000e+00 + interp 5.3227739181487499e-01:4.4066422423387747e-01:1.9733726068298707e-02:3.8249411697945934e-01:9.5367526057226881e-01:4.8496604783925495e-01:1.1630055925174534e+00:3.9340932992462169e-01:1.8519366039865859e+00:4.5348658737764608e-01:2.0743419988315019e+00:3.4940488044280765e-01:2.9046712762279823e+00:5.3227206904095692e-01:3.4902245626766102e+00 + CVs 20 + 4.1728113214597817e-01 1.9286528895331545e-01 -1.2622629473002633e-02 + 7.0980616625911896e-01 3.0996395665972226e-01 -5.4010504658684982e-02 + 9.6632675913806687e-01 4.0897734762121085e-01 -9.5244019945982417e-02 + 1.2243518429580653e+00 5.1750345409384524e-01 -1.2398974406697916e-01 + 1.4869396582619965e+00 6.3406679895274798e-01 -1.4267425148515794e-01 + 1.7589223778897831e+00 7.5670540062203884e-01 -1.5204327381196980e-01 + 2.0454894156734862e+00 8.8312405030554242e-01 -1.4827092192488889e-01 + 2.3501940526398690e+00 1.0096211547036500e+00 -1.2562301361416939e-01 + 2.6748375397255497e+00 1.1302732690885446e+00 -8.0857786845674129e-02 + 3.0180262806602216e+00 1.2392392687748592e+00 -1.0373903069382906e-02 + 3.3677222380488363e+00 1.3372095372813817e+00 9.7762470141372404e-02 + 3.7028038927850866e+00 1.4291069243472174e+00 2.5342240818421746e-01 + 4.0236088309670883e+00 1.5050769255633338e+00 4.3649942933876329e-01 + 4.3602131230003760e+00 1.5357474458135703e+00 5.9387165271337594e-01 + 4.7233721491324268e+00 1.5030656279632091e+00 6.8231158764727506e-01 + 5.0836054466561649e+00 1.4172958425162783e+00 6.9742393013434234e-01 + 5.4007951667235403e+00 1.3034298614274979e+00 6.4907726591939363e-01 + 5.6526136356136130e+00 1.1833321814917435e+00 5.4216912885603508e-01 + 5.8865251865470052e+00 1.0095099160393715e+00 3.1861917626715508e-01 + id 13289 + loc 7.3640644550323486e-01 9.9686361849308014e-02 375 + blend 0.0000000000000000e+00 + interp 5.2944073180155315e-01:3.8776460148778824e-01:2.2376188393979679e-01:3.1917954202005622e-01:9.0647914532628215e-01:4.4429803573471149e-01:1.0832683694941498e+00:4.7053953267385695e-01:1.9486817125914322e+00:4.1584410740546163e-01:2.3552259675176384e+00:5.2943543739423515e-01:2.8547021088423312e+00:3.1257410704147620e-01:3.4820666709174306e+00 + CVs 20 + 6.1291634254584171e-01 4.4784941085183616e-01 1.0255543256347890e-01 + 1.1279320644646400e+00 7.3879240716649308e-01 1.0737343588192511e-01 + 1.6353337733651414e+00 8.6471362909390792e-01 1.1683567028681452e-02 + 2.1469671400388597e+00 8.6093113766107598e-01 -1.7415438587341553e-01 + 2.6737919584849474e+00 8.0167326957529350e-01 -4.2566524265257116e-01 + 3.2651778661013968e+00 7.4162700957148076e-01 -6.9213083151603338e-01 + 3.9579739122296367e+00 6.9616598707380106e-01 -8.8224024946305557e-01 + 4.7357469896433262e+00 6.6892316402910157e-01 -9.0604140083941676e-01 + 5.5320035200820872e+00 6.6457837867155178e-01 -7.1974220460312011e-01 + 6.2666707562996322e+00 6.6120034512699988e-01 -3.4748621514755063e-01 + 6.8883228053452665e+00 6.0390604246955526e-01 1.3677957359768755e-01 + 7.3599787825995131e+00 4.3691953862123656e-01 6.4455968942618536e-01 + 7.6571002937035777e+00 1.4194642002148328e-01 1.0907744191363764e+00 + 7.7884380844196421e+00 -2.4467790653122634e-01 1.4193395260725674e+00 + 7.7939768077877201e+00 -6.3952743351685859e-01 1.5535311876723834e+00 + 7.8090743154687239e+00 -8.7601752572528868e-01 1.3890985582742932e+00 + 7.9343856011421359e+00 -7.4916796721377832e-01 1.0096053071157112e+00 + 8.0546942972772388e+00 -5.5307803500152675e-01 7.4470563427569259e-01 + 8.2141654739217707e+00 -1.0174177192378591e+00 5.9500213962088855e-01 + id 13290 + loc 9.9859669804573059e-02 8.6697173118591309e-01 396 + blend 0.0000000000000000e+00 + interp 4.6568811074636701e-01:3.7970934925038757e-01:6.8011519293962874e-02:4.6568345386525956e-01:8.3944212652104244e-01:4.2744991327314419e-01:1.3692172744471449e+00:3.2352993854928958e-01:1.9279121356922744e+00:3.8608103434930047e-01:2.8931215029531026e+00:3.7765151756313853e-01:3.3923299217546257e+00 + CVs 20 + 9.3436861248544734e-01 2.5747513393518906e-01 -2.8374615484964294e-01 + 1.5689293058026088e+00 3.6947948521477941e-01 -5.3756935493092095e-01 + 2.1391504290390984e+00 4.3444480379381417e-01 -7.8896296058919213e-01 + 2.7454969277938210e+00 4.8976746969386864e-01 -1.0475762010563938e+00 + 3.3854302028861265e+00 5.2332509602045985e-01 -1.3029630046330272e+00 + 4.0498381944572390e+00 5.2851558002462440e-01 -1.5483650505344222e+00 + 4.7280852771602726e+00 4.8887652532652104e-01 -1.7785815923993042e+00 + 5.4103695563376668e+00 3.7975310399256468e-01 -1.9884674743710484e+00 + 6.0803854859746922e+00 1.7307439644874889e-01 -2.1736695418123722e+00 + 6.7000807906733177e+00 -1.4782032625237918e-01 -2.3343681814399972e+00 + 7.2192330981343016e+00 -5.7443776676217584e-01 -2.4729477320581581e+00 + 7.6089699614099473e+00 -1.0793189465612643e+00 -2.5847709981559990e+00 + 7.8640870742762585e+00 -1.6252587006713735e+00 -2.6580073097831103e+00 + 7.9913055959331540e+00 -2.1708824272365255e+00 -2.6860111849038182e+00 + 8.0082392441565489e+00 -2.6807894845282738e+00 -2.6713612763454195e+00 + 7.9436125185497746e+00 -3.1361644527090333e+00 -2.6195788163202764e+00 + 7.8266664309381007e+00 -3.5284624368504671e+00 -2.5421797701721163e+00 + 7.6820029361309956e+00 -3.8538415898020073e+00 -2.4564333432081851e+00 + 7.5187607194433506e+00 -4.1431543545830678e+00 -2.3775026166793474e+00 + id 13291 + loc 1.6849637031555176e-01 5.9363180398941040e-01 373 + blend 0.0000000000000000e+00 + interp 4.9299113512167569e-01:2.9317080381075400e-01:1.0737348953371595e-01:3.9393139968748847e-01:1.0287856000095759e+00:4.8709480295623808e-01:1.6873836027461144e+00:4.8866555788381194e-01:2.0132657879590883e+00:4.6094131501529839e-01:2.5680000405730015e+00:3.8774970847547968e-01:3.0082424450532259e+00:4.9298620521032449e-01:3.6680912280618672e+00 + CVs 20 + -4.5093063099381103e-01 4.9219648147935963e-01 4.5930632178161894e-02 + -8.4139995551189206e-01 9.9533665930228488e-01 4.8869145832416319e-02 + -1.1652586950292574e+00 1.5358531452101811e+00 -2.1442776651769038e-02 + -1.4028457202069242e+00 2.1155329187272458e+00 -1.9047376431518390e-01 + -1.5187096075681121e+00 2.6791539973307144e+00 -4.6464502194209012e-01 + -1.5175246495819539e+00 3.1528374977747156e+00 -8.1710347620704771e-01 + -1.4450530565681983e+00 3.4923812529078431e+00 -1.2033340222030728e+00 + -1.3474861045481650e+00 3.6899290791294237e+00 -1.5900433498445354e+00 + -1.2637221926622431e+00 3.7573931292467342e+00 -1.9863057085228566e+00 + -1.2412769165188937e+00 3.7027047115647735e+00 -2.4237611958580896e+00 + -1.3335627780001587e+00 3.5337370047123562e+00 -2.9052079038385061e+00 + -1.5674829340162411e+00 3.2675526313990280e+00 -3.3896948211488502e+00 + -1.9205478926644770e+00 2.9293040450787040e+00 -3.8251402260030729e+00 + -2.3607171954250230e+00 2.5378623559862330e+00 -4.1833472295801215e+00 + -2.8534530692847415e+00 2.0973776301004179e+00 -4.4571613202832063e+00 + -3.3530066679183941e+00 1.6319158988118769e+00 -4.6542450663293735e+00 + -3.8177710161652865e+00 1.2597854515766214e+00 -4.8118595354079670e+00 + -4.2329841244393194e+00 1.0455619378352832e+00 -4.9836717756019482e+00 + -4.6576155299118227e+00 5.0102163260758115e-01 -4.9212368335470646e+00 + id 13292 + loc 6.9800049066543579e-01 6.3245421648025513e-01 376 + blend 0.0000000000000000e+00 + interp 3.9356994269108747e-01:2.9571484215731980e-01:3.5549336206615911e-01:3.9356600699166056e-01:1.2938810354813923e+00:3.3887617635785011e-01:1.9590305460719610e+00:2.1081128614390687e-01:2.2788377255082648e+00:3.5566006074457496e-01:2.9411291150069894e+00:3.1935326915144202e-01:3.7377753579452588e+00 + CVs 20 + -4.1052545972584994e-02 4.2736194670652145e-01 5.4855787238995990e-01 + 4.7941177912061428e-04 7.0929028140112560e-01 1.0453208110802641e+00 + 1.0443758674118880e-01 8.4575990385807365e-01 1.5339241267072954e+00 + 2.3097187645134498e-01 8.9960509189638560e-01 2.0215413529784882e+00 + 3.4112464963142813e-01 9.3763620093707611e-01 2.4976417340233970e+00 + 4.0451019547449379e-01 9.9219110483325001e-01 2.9542369296669282e+00 + 4.0590819597238043e-01 1.0675739422852795e+00 3.3895985494720895e+00 + 3.4363083897232882e-01 1.1659517529212704e+00 3.8085840483929836e+00 + 2.1719032022103280e-01 1.2989728090582606e+00 4.2169516213408604e+00 + 1.7454250861743015e-02 1.4796026289314763e+00 4.6226312993158576e+00 + -2.6472022044552457e-01 1.7010174965995204e+00 5.0392955282623726e+00 + -6.4340172305861087e-01 1.9216057297801403e+00 5.4827174082424044e+00 + -1.1470859188834082e+00 2.0536532836031700e+00 5.9483087367313665e+00 + -1.7792240133005299e+00 1.9889032515895981e+00 6.3816218372214397e+00 + -2.4759738255616930e+00 1.6603418048374028e+00 6.6932003405003506e+00 + -3.0743541234669847e+00 1.0672784215407276e+00 6.8714880792809359e+00 + -3.3159824683452630e+00 3.2481766674142110e-01 7.0745876263789640e+00 + -3.1504037814849757e+00 -2.6603782248091790e-01 7.4105935461920396e+00 + -3.0326711003501035e+00 -7.8398686463739597e-01 7.7037640261644498e+00 + id 13293 + loc 8.1650811433792114e-01 7.9143375158309937e-01 374 + blend 0.0000000000000000e+00 + interp 5.9317798875110528e-01:4.6451930317438889e-01:3.2066036341238835e-02:3.0617149586842246e-01:8.8397395476048124e-01:5.1932957652414569e-01:1.1795506215100291e+00:3.1123767753156623e-01:2.0047746933114761e+00:5.9317205697121778e-01:2.8791251537487388e+00:3.8947862626689067e-01:3.3981532703044754e+00 + CVs 20 + -6.7004158151574267e-01 4.0901731074317382e-01 -3.9136249995558964e-01 + -1.2099975547848461e+00 7.1992201545258494e-01 -6.6070240306688821e-01 + -1.7221021241293752e+00 9.8323533676027097e-01 -8.7317793114601761e-01 + -2.2407794743127165e+00 1.2303674194466985e+00 -1.0652069191330438e+00 + -2.7654681138330108e+00 1.4586775310444413e+00 -1.2579500610319760e+00 + -3.3142288666357391e+00 1.6496168167878000e+00 -1.4784154863361978e+00 + -3.8977442273732961e+00 1.7675136829286067e+00 -1.7517980019017361e+00 + -4.5018388143265078e+00 1.7737789602215384e+00 -2.0941542921252072e+00 + -5.0956221724341715e+00 1.6410188130939607e+00 -2.5091880106491491e+00 + -5.6466235724932599e+00 1.3547079101973383e+00 -2.9813983059885172e+00 + -6.1270414207897472e+00 9.1093025461637023e-01 -3.4704679209649520e+00 + -6.5073484454322736e+00 3.1779003703356734e-01 -3.9197386019586173e+00 + -6.7603778144538502e+00 -3.9466735785967177e-01 -4.2758233894872664e+00 + -6.8939796655331111e+00 -1.1629838878791561e+00 -4.5189953255006969e+00 + -6.9751573391077404e+00 -1.9225890146981763e+00 -4.6883375812973211e+00 + -7.0975335250676581e+00 -2.6522070860143807e+00 -4.8257883927050802e+00 + -7.3398903718681279e+00 -3.3478562296502310e+00 -4.9154807819246997e+00 + -7.6859028497350117e+00 -3.9776714388622296e+00 -4.9224842785631893e+00 + -7.8649974084028580e+00 -4.5166329936381837e+00 -4.9174311431702069e+00 + id 13294 + loc 2.0518429577350616e-01 6.3819670677185059e-01 395 + blend 0.0000000000000000e+00 + interp 4.8055475813361870e-01:2.5688381650598163e-01:2.5559948242096286e-01:3.0928167897322906e-01:1.0499492374181552e+00:2.8895230851252729e-01:1.9853429311218442e+00:4.3413182525169841e-01:2.1886625434849591e+00:4.8054995258603739e-01:2.9707923915275849e+00:3.4392784185140185e-01:3.5355980319731874e+00 + CVs 20 + 3.4177209728624874e-01 2.3908008081976881e-01 -1.9197864067669962e-01 + 6.2868725050651697e-01 4.2349467313599598e-01 -3.8916328272183964e-01 + 9.1480621309283872e-01 5.8079020382448776e-01 -6.0954322596962141e-01 + 1.2326593298979298e+00 7.2035628274520458e-01 -8.5925362199429600e-01 + 1.5871620518865852e+00 8.2905391746255308e-01 -1.1303787147272089e+00 + 1.9744006932268339e+00 8.9324471677400696e-01 -1.4161470474450286e+00 + 2.3853932814279699e+00 9.0113198403422201e-01 -1.7133429697348470e+00 + 2.8078241431218460e+00 8.3840096032351152e-01 -2.0159837891033883e+00 + 3.2182113711312983e+00 6.8849324641867282e-01 -2.3112145791168897e+00 + 3.5774430893473843e+00 4.4318933032133456e-01 -2.5851359636236255e+00 + 3.8512260236905083e+00 1.1125344073062049e-01 -2.8263062983733778e+00 + 4.0363056244105504e+00 -2.8704831567269684e-01 -3.0242831786036559e+00 + 4.1486158164429465e+00 -7.2997162591925902e-01 -3.1722402296205421e+00 + 4.2001809877169478e+00 -1.1966133769733844e+00 -3.2722993829789235e+00 + 4.1972155850745825e+00 -1.6702068852424998e+00 -3.3325092651624910e+00 + 4.1414890280181966e+00 -2.1337224826159380e+00 -3.3516781763726322e+00 + 4.0394518976560985e+00 -2.5713235592194548e+00 -3.3265337051343948e+00 + 3.9163995263740041e+00 -2.9838737240090341e+00 -3.2799960275891458e+00 + 3.8971369692805560e+00 -3.4725254807855199e+00 -3.3406493587621777e+00 + id 13295 + loc 1.4024135470390320e-01 9.6601819992065430e-01 1080 + blend 0.0000000000000000e+00 + interp 5.5448500505843590e-01:2.9831047863811205e-01:5.7962634022307946e-02:3.3921954630541140e-01:9.7379234621929944e-01:2.6569739101499246e-01:1.9931201186773593e+00:5.5447946020838534e-01:2.7591171952470388e+00:2.8730054505606273e-01:3.3193392634134069e+00 + CVs 20 + -1.0134995947993682e-01 2.5754972847370422e-01 2.4653919583899855e-01 + -1.6141318071426028e-01 4.1594259825788971e-01 3.4527228220982076e-01 + -2.1319595828326171e-01 5.3364615890093448e-01 4.0039754689601081e-01 + -2.7273770613732135e-01 6.4230387592035454e-01 4.6780406807750319e-01 + -3.4284397280710782e-01 7.4446674222371789e-01 5.4592067960438839e-01 + -4.2766152239008098e-01 8.4124511594001672e-01 6.3377980227908826e-01 + -5.3054740863470373e-01 9.3145308904559887e-01 7.3027541641827909e-01 + -6.5229187862974314e-01 1.0130093694607449e+00 8.3435664214093896e-01 + -7.9164637075091837e-01 1.0846905629819494e+00 9.4553528644824114e-01 + -9.4674492350419037e-01 1.1470986961300547e+00 1.0635370352680149e+00 + -1.1175386339614892e+00 1.2027951599435620e+00 1.1887019146242661e+00 + -1.3062583962786338e+00 1.2537971339763918e+00 1.3213408620947691e+00 + -1.5092822370479093e+00 1.2963620359542356e+00 1.4569391792865949e+00 + -1.7080492527320279e+00 1.3222094086016862e+00 1.5837055217143479e+00 + -1.8810318593841686e+00 1.3305758054985131e+00 1.6910759010949059e+00 + -2.0247658910070285e+00 1.3332546960784377e+00 1.7802844045044794e+00 + -2.1472416972912929e+00 1.3440333619743048e+00 1.8624477185751265e+00 + -2.2579999571062555e+00 1.3696665490200091e+00 1.9532345352784228e+00 + -2.4591175799566556e+00 1.4452415866187327e+00 2.1626467651944026e+00 + id 13296 + loc 9.6926689147949219e-03 1.2332119047641754e-02 1078 + blend 0.0000000000000000e+00 + interp 4.3438206897940784e-01:4.3437772515871809e-01:3.2866055235679759e-02:3.4599191698072529e-01:7.4690179098878806e-01:2.6684392138844809e-01:1.1294142367858031e+00:3.4636930793572973e-01:2.2023959300286648e+00:2.9970074968997451e-01:3.4244044473675013e+00:4.1222255384658846e-01:3.9876671354372277e+00 + CVs 20 + 1.8214177376569390e-01 3.8748135253878291e-01 -5.0724820367227738e-02 + 2.5459671643593995e-01 6.9318745086260569e-01 -1.2796513806221926e-01 + 2.7503810476900642e-01 9.6498886504575809e-01 -2.3094998253056478e-01 + 2.7567208476388155e-01 1.2129040636654069e+00 -3.4937433673349888e-01 + 2.5654505258878957e-01 1.4233200759010542e+00 -4.7032838596776916e-01 + 2.2588656240690030e-01 1.5797939543987547e+00 -5.7066772967543011e-01 + 2.0163427176416671e-01 1.6754590163721641e+00 -6.2301597099377026e-01 + 2.0873487958826942e-01 1.7276017111349122e+00 -6.1081260545853222e-01 + 2.6840526839406009e-01 1.7764757092699552e+00 -5.3853698005257278e-01 + 3.7494175559560838e-01 1.8658194260967593e+00 -4.3729053786662658e-01 + 4.8413353949107463e-01 2.0049480221340650e+00 -3.4961465356925953e-01 + 5.5005252640959468e-01 2.1593969880833219e+00 -2.9420623429303733e-01 + 5.5476271182474157e-01 2.2859634939920017e+00 -2.6110776842298855e-01 + 5.0022489140016591e-01 2.3575143244239007e+00 -2.3028966972429593e-01 + 3.8791181088361337e-01 2.3709169781632444e+00 -1.8502384410262629e-01 + 1.9477693234235227e-01 2.3658905865885131e+00 -1.2057351776134229e-01 + -1.4196638295385022e-01 2.3843393716977896e+00 -5.0761172941338945e-02 + -5.5772699238233103e-01 2.3137432323056046e+00 6.0350453731156384e-03 + -4.4240393454763993e-01 1.9876664397033088e+00 1.2529975950897765e-01 + id 13297 + loc 7.9938751459121704e-01 5.5967384576797485e-01 399 + blend 0.0000000000000000e+00 + interp 5.1588829545098158e-01:5.1588313656802709e-01:7.1077821904284799e-02:4.2105077820401304e-01:5.8377541463410365e-01:4.1077554910198705e-01:1.0032480777624802e+00:3.9919374377056871e-01:1.6698404814708951e+00:2.8034718338764586e-01:2.0062053633862647e+00:2.6741365981329551e-01:2.7552965900735562e+00:3.6543208334310351e-01:3.6125410699690619e+00 + CVs 20 + -2.1227947451404017e-01 3.1948362786640827e-01 -9.2408923552515593e-02 + -4.1708994561140650e-01 6.4412565396910926e-01 -2.2458358098870107e-01 + -6.2949409085191377e-01 9.5541256426293075e-01 -3.8002711488675778e-01 + -8.5381046711433517e-01 1.2390036009719094e+00 -5.5376904061945365e-01 + -1.0890486206663723e+00 1.4855702393753263e+00 -7.4393328641656120e-01 + -1.3294858863833643e+00 1.6869658358899455e+00 -9.4627275189922777e-01 + -1.5672400524194274e+00 1.8389704720482578e+00 -1.1561965719589256e+00 + -1.7942637391395386e+00 1.9415401299555226e+00 -1.3692345502646912e+00 + -2.0034985108267716e+00 1.9980133205542800e+00 -1.5819085788995764e+00 + -2.1900653839691446e+00 2.0140160119113006e+00 -1.7917919069008112e+00 + -2.3506019669931213e+00 1.9952399905089448e+00 -1.9934599831666646e+00 + -2.4817444221618747e+00 1.9472142783593078e+00 -2.1726139709672960e+00 + -2.5815865440397068e+00 1.8839549930181532e+00 -2.3051220568224142e+00 + -2.6463204365675379e+00 1.8380587397737633e+00 -2.3664849914338757e+00 + -2.6674355808879850e+00 1.8367752011757414e+00 -2.3694280411938551e+00 + -2.6468548655802651e+00 1.8483846988310535e+00 -2.3690721518901992e+00 + -2.6073987991647005e+00 1.8152966851513825e+00 -2.3987014134862892e+00 + -2.6093354697123976e+00 1.7086253447998812e+00 -2.4627454161041764e+00 + -2.7810702233385460e+00 1.5156680344488831e+00 -2.5533303112268149e+00 + id 13298 + loc 9.4672590494155884e-02 7.3130798339843750e-01 393 + blend 0.0000000000000000e+00 + interp 6.3157302751402367e-01:3.1985030249538154e-01:5.8771837329997645e-01:3.7850702705292888e-01:7.1152188029343222e-01:6.3156671178374857e-01:1.1864289663680117e+00:3.9250425151443025e-01:1.9983115870478625e+00:3.1509835661984381e-01:2.5307763455056231e+00:2.4913568817834711e-01:3.0298497246152909e+00:2.7088117240135123e-01:3.9974812200452572e+00 + CVs 20 + -3.2943523654857398e-01 2.6088567652808653e-01 -1.1819299266320931e-02 + -6.6210273102246897e-01 5.3188030107811024e-01 -3.7388808048475858e-02 + -9.8887648990474553e-01 8.2015923908532717e-01 -8.0030803534760026e-02 + -1.3045193071438386e+00 1.1199402897408193e+00 -1.3930055343972178e-01 + -1.6182843668092175e+00 1.4177178300321542e+00 -2.1362661557552309e-01 + -1.9481830257238963e+00 1.6983442593818407e+00 -2.9913394044546454e-01 + -2.3052932486690949e+00 1.9487927843015505e+00 -3.9110371775684577e-01 + -2.6961013474923252e+00 2.1526856084133632e+00 -4.8831792240994998e-01 + -3.1344094510223321e+00 2.2925892854678338e+00 -5.9938575397837690e-01 + -3.6268724962708294e+00 2.3614095025923327e+00 -7.4739886902652586e-01 + -4.1312198970486076e+00 2.3658642681322473e+00 -9.5549157273068075e-01 + -4.5788292361146548e+00 2.3130127725297096e+00 -1.2134504713011551e+00 + -4.9395508084348041e+00 2.2025858645751839e+00 -1.4896992582239297e+00 + -5.2187939425875385e+00 2.0380207806421797e+00 -1.7741874994186582e+00 + -5.4268304362783155e+00 1.8321649607945301e+00 -2.0643485412242879e+00 + -5.6013774782657482e+00 1.5851940881400255e+00 -2.3410590406309746e+00 + -5.8019717243319855e+00 1.2677128387715644e+00 -2.5797052540040553e+00 + -6.0437663215530666e+00 8.8606085122970102e-01 -2.7466575516877167e+00 + -6.2626020876142547e+00 5.1723811449531798e-01 -2.8649121987343595e+00 + id 13299 + loc 8.1472116708755493e-01 7.6171427965164185e-01 382 + blend 0.0000000000000000e+00 + interp 4.2533069828278808e-01:2.9935210803060408e-01:5.2261037643832209e-01:2.9952671198766118e-01:1.5015879082762473e+00:3.2525111859920369e-01:2.0019529168799290e+00:3.8975328493096506e-01:2.4170594457858807e+00:3.2637400503796182e-01:3.0005550720121610e+00:3.5302713152595222e-01:3.5711682075625530e+00:4.2532644497580530e-01:3.9978810776556339e+00 + CVs 20 + 1.0655875673722424e+00 2.0149607047544946e-01 -5.6368492466059672e-01 + 1.7876163153427236e+00 2.3562003898909872e-01 -9.9397726487081561e-01 + 2.4442281007389481e+00 2.0336362529853330e-01 -1.3863646147006785e+00 + 3.1494971337287310e+00 1.4676867446536973e-01 -1.7744777394209801e+00 + 3.8834130860070482e+00 6.6144916608654070e-02 -2.1439807266148039e+00 + 4.6156475203112759e+00 -4.3445790124025496e-02 -2.4895832209963928e+00 + 5.3116348010817127e+00 -1.9148674825187961e-01 -2.8129189364751892e+00 + 5.9425495948048255e+00 -3.8350087503287167e-01 -3.1193775205615455e+00 + 6.4948723087048252e+00 -6.1839868841915879e-01 -3.4205606248328633e+00 + 6.9700897590917688e+00 -8.9638742958889694e-01 -3.7303351663612303e+00 + 7.3759581021895508e+00 -1.2253160997663044e+00 -4.0557081810300852e+00 + 7.7211773908477737e+00 -1.6181020019179073e+00 -4.3989954845991566e+00 + 7.9966092439596412e+00 -2.0913505501462728e+00 -4.7471155363230375e+00 + 8.1628469997671260e+00 -2.6366893403127034e+00 -5.0695441546515783e+00 + 8.2051492453117501e+00 -3.2062404089902845e+00 -5.3361752716026825e+00 + 8.1712100705097122e+00 -3.7386360102660916e+00 -5.5245559223275063e+00 + 8.1296765647676033e+00 -4.2031190592639316e+00 -5.6197595131771632e+00 + 8.1234680069877800e+00 -4.6124662387407493e+00 -5.6423268273989979e+00 + 8.1571360545410823e+00 -5.1288155915080260e+00 -5.7408418650224666e+00 + id 13300 + loc 2.4834305047988892e-01 3.9968550205230713e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3818398686452644e-01:2.9927116435828699e-01:2.1387385280032478e-02:3.0680590232233512e-01:9.4350045782036485e-01:3.3818060502465780e-01:1.9429456585865195e+00:2.3513929050807103e-01:2.7920801479363107e+00:3.0226716617906491e-01:3.2971977158550541e+00 + CVs 20 + -2.0553106699301460e-01 2.2852509003077515e-01 4.5274048408754125e-02 + -4.1281623472898299e-01 4.4928960339207896e-01 5.8736374362920174e-02 + -6.0943852307030255e-01 6.7141134831713545e-01 5.8234476263320900e-02 + -7.9224036782825125e-01 8.9725015115505569e-01 4.9457600098175070e-02 + -9.6424244233567902e-01 1.1143588652313490e+00 2.5440745287569122e-02 + -1.1234536813473146e+00 1.3095745845280715e+00 -8.6152412812986467e-03 + -1.2570613161885102e+00 1.4746002219057943e+00 -3.9075559929404591e-02 + -1.3436580162962590e+00 1.6113823700896286e+00 -5.9173935974120906e-02 + -1.3827672116453589e+00 1.7421391571111868e+00 -7.2728855082606847e-02 + -1.4404449997944500e+00 1.8757393611145516e+00 -6.4326022965485508e-02 + -1.5802624133274539e+00 1.9566270500548448e+00 -9.4663886447032830e-04 + -1.7967006073992977e+00 1.9332294205509934e+00 1.2230779126391911e-01 + -2.0641227601394396e+00 1.7992967326418037e+00 2.8514123109000222e-01 + -2.3662450699427113e+00 1.5742903987725327e+00 4.5764853412306439e-01 + -2.6977940483183538e+00 1.2856141310125293e+00 6.0910790602843246e-01 + -3.0619770863668574e+00 9.5218529107939598e-01 7.1536878144873373e-01 + -3.4676143379210469e+00 5.7422653275088564e-01 7.3958456359426517e-01 + -3.8691466693498899e+00 2.1625322826646953e-01 6.0578319477533160e-01 + -4.0021682768433600e+00 1.4243368057187911e-01 4.1083795284731434e-01 + id 13301 + loc 5.6152737140655518e-01 4.3492218852043152e-01 401 + blend 0.0000000000000000e+00 + interp 4.9107516305085785e-01:2.6173057956906809e-01:7.7442077322445613e-01:3.4146422255732523e-01:1.0804337923795544e+00:3.8094809399702190e-01:1.8365947282486010e+00:4.9107025229922735e-01:2.2267626637910789e+00:3.1934955223244083e-01:2.9529019933629126e+00:3.3745467600229984e-01:3.5443993741997115e+00 + CVs 20 + 1.7660367424619910e-01 2.7081131689206017e-01 2.3739835053443251e-01 + 3.0786595018200780e-01 5.4911637960443904e-01 4.7911277989369866e-01 + 4.2321530373687472e-01 8.2256893575794909e-01 7.2755392234760086e-01 + 5.3589447100297527e-01 1.0824041913655000e+00 9.8471204974929427e-01 + 6.4581766404977126e-01 1.3273914390075596e+00 1.2606695576544877e+00 + 7.6043570190199250e-01 1.5586088768603434e+00 1.5690720910392322e+00 + 9.0175498812462607e-01 1.7780268914205524e+00 1.9158061475338048e+00 + 1.0996126446753416e+00 1.9845198706191181e+00 2.2953161001818114e+00 + 1.3799478881454319e+00 2.1677781094873270e+00 2.6917030267404884e+00 + 1.7545602885192846e+00 2.3105037244734659e+00 3.0798023440684008e+00 + 2.2188746024380448e+00 2.3995021542427399e+00 3.4360309653398167e+00 + 2.7682813355371958e+00 2.4262987369089881e+00 3.7594232048622005e+00 + 3.3945942067002521e+00 2.3740747560471060e+00 4.0665156314523685e+00 + 4.0780449486114261e+00 2.2163430179665302e+00 4.3795379882921930e+00 + 4.7814994947208875e+00 1.9423336890281235e+00 4.6953041324829163e+00 + 5.4322126471625394e+00 1.6075218269668845e+00 5.0019709800607295e+00 + 5.9190247887608329e+00 1.3499242014398929e+00 5.3409013836120982e+00 + 6.2000471030755113e+00 1.2485285076771200e+00 5.7476857544261506e+00 + 6.6189005874084028e+00 9.7210321732473137e-01 6.2757431933289149e+00 + id 13302 + loc 6.8272233009338379e-01 2.9857796430587769e-01 380 + blend 0.0000000000000000e+00 + interp 4.2301279653441320e-01:2.9376736623532140e-01:4.3543809036985981e-01:4.2300856640644791e-01:1.1466914075559906e+00:2.5935160378702937e-01:1.7829160554863659e+00:3.4867349866583941e-01:2.1743340406687386e+00:2.7431776136321884e-01:3.0274988469449693e+00:3.1023424549539597e-01:3.9174910264385403e+00 + CVs 20 + 6.7811990485021234e-01 2.6632770157713337e-01 5.9526700514513964e-01 + 1.2600419067992501e+00 3.9185011912175960e-01 1.0314730609312306e+00 + 1.8049781134772269e+00 4.4939967220825294e-01 1.4513707838309771e+00 + 2.3307308600875905e+00 4.6391893817860175e-01 1.9069636017185883e+00 + 2.8117131436546092e+00 4.2854078507558446e-01 2.3874161508213518e+00 + 3.2240882700344340e+00 3.3742430993173467e-01 2.8730888776727399e+00 + 3.5524840227434509e+00 1.9407843284517368e-01 3.3439099839971975e+00 + 3.7925873199988342e+00 1.5910782506378007e-02 3.7825528694132218e+00 + 3.9574724265300913e+00 -1.7051486408700045e-01 4.1784179639796255e+00 + 4.0758485573565979e+00 -3.4265748412847108e-01 4.5337063200843319e+00 + 4.1793225663006091e+00 -4.9080542678190264e-01 4.8589512490673759e+00 + 4.2935576019357748e+00 -6.1724149125460848e-01 5.1656889829353068e+00 + 4.4349558745773336e+00 -7.4064429420779687e-01 5.4677393542113109e+00 + 4.6018696762554985e+00 -9.0343663561024323e-01 5.7708778687232556e+00 + 4.7686689263715021e+00 -1.1262752633960003e+00 6.0565507429673202e+00 + 4.9027981720608738e+00 -1.3745423699225174e+00 6.3177685926997214e+00 + 4.9695164184183538e+00 -1.6126707166947272e+00 6.5787565899594513e+00 + 4.9686938137647960e+00 -1.8371620541087830e+00 6.8690092782362235e+00 + 5.1306900309271812e+00 -1.9840259994080287e+00 7.1425944639163310e+00 + id 13303 + loc 7.8358165919780731e-03 1.3956414163112640e-01 400 + blend 0.0000000000000000e+00 + interp 5.2717289788342880e-01:3.6659686250786522e-01:2.7687399486309161e-04:2.6021968683954738e-01:6.3248757398472166e-01:3.4874500446972789e-01:1.5119921427761027e+00:3.4608154600075691e-01:2.0640159338453028e+00:5.2716762615445001e-01:2.8631670985581752e+00:4.2679257492160189e-01:3.2772309226254928e+00 + CVs 20 + 6.9122094455936756e-04 4.2014239261842373e-01 2.0949704205916017e-01 + -4.2802873962553334e-02 8.4965860024224260e-01 4.2819563639588937e-01 + -1.2234927575237492e-01 1.2703828434699809e+00 6.5539145311037106e-01 + -2.4140079240695134e-01 1.6700293650564830e+00 9.0810439903399309e-01 + -4.1080371512182101e-01 2.0340515067207212e+00 1.2093194680609001e+00 + -6.4348793513472824e-01 2.3352845131319833e+00 1.5747273471439556e+00 + -9.4335581672732582e-01 2.5340145512277417e+00 2.0030015047325485e+00 + -1.2966166411014333e+00 2.5907264797465643e+00 2.4710707099414191e+00 + -1.6705785156709765e+00 2.4882390482054690e+00 2.9374006180358352e+00 + -2.0281216756328351e+00 2.2475672856654141e+00 3.3598650409840487e+00 + -2.3552418451223707e+00 1.9159223420106888e+00 3.7109153670269106e+00 + -2.6700228619971567e+00 1.5441972758291636e+00 3.9745294830527800e+00 + -2.9948688538879940e+00 1.1603597011776117e+00 4.1466465597850206e+00 + -3.3212388490737892e+00 7.6171655077328060e-01 4.2378827313596634e+00 + -3.6351578385949725e+00 3.8307444416760994e-01 4.2725509137448086e+00 + -3.9896059535672839e+00 1.9540022422362235e-01 4.2856995716205546e+00 + -4.3980890850260757e+00 5.4103628806385196e-01 4.2807898590894284e+00 + -4.5294634597205325e+00 1.2942914085414352e+00 4.2144835281969870e+00 + -4.8642751431870810e+00 1.2964771763462144e+00 4.3053057168073900e+00 + id 13304 + loc 2.9242947697639465e-01 2.9616072773933411e-01 415 + blend 0.0000000000000000e+00 + interp 4.5641822263304282e-01:3.6765912228115116e-01:1.7087655432108062e-01:2.7126243506815717e-01:1.2758526529170717e+00:2.8930345896686877e-01:2.0291501774288974e+00:4.3625675496169458e-01:3.0012932771590677e+00:4.5641365845081650e-01:3.9083304900644813e+00 + CVs 20 + 5.9360887827009823e-02 7.1372459461187185e-02 -2.9642887343124558e-01 + 1.2247926411334703e-01 1.4039262506421812e-01 -5.4628991364026047e-01 + 2.0218812775866910e-01 1.8739255116184628e-01 -7.6068841149551436e-01 + 2.9927295081608213e-01 2.2437872096354222e-01 -9.5902284882877464e-01 + 4.1431365293066369e-01 2.4809352061103013e-01 -1.1321397374688604e+00 + 5.4585929631517760e-01 2.5376639590401234e-01 -1.2708026193122468e+00 + 6.8984733805780551e-01 2.3739873923751986e-01 -1.3667899167249620e+00 + 8.3906093477250898e-01 1.9792959541590938e-01 -1.4147991901185430e+00 + 9.8319537050142070e-01 1.3709556119558453e-01 -1.4134778237378576e+00 + 1.1089728729869592e+00 5.4969645145526713e-02 -1.3641419387069249e+00 + 1.2018265433509467e+00 -4.7525090183898833e-02 -1.2738866024004261e+00 + 1.2551679211508642e+00 -1.5922999824688489e-01 -1.1589303934962907e+00 + 1.2769168673177598e+00 -2.6210803374492653e-01 -1.0364876469727686e+00 + 1.2801813752081115e+00 -3.4476415651428971e-01 -9.1711435938481345e-01 + 1.2746560630532362e+00 -4.0613254253158415e-01 -8.0850067192056296e-01 + 1.2697638466665369e+00 -4.4875536974650432e-01 -7.1717834519260903e-01 + 1.2687277587959964e+00 -4.7479067509390732e-01 -6.3966502299875461e-01 + 1.2620336039270335e+00 -4.8413733285441968e-01 -5.6314412742769493e-01 + 1.3109494346731236e+00 -4.7449095802144997e-01 -5.2023406656065230e-01 + id 13305 + loc 8.2220208644866943e-01 6.0782086849212646e-01 1068 + blend 0.0000000000000000e+00 + interp 3.0413927885493286e-01:2.7400642264432690e-01:8.8895794092967440e-01:2.9109616449367376e-01:1.9560402356273396e+00:3.0413623746214430e-01:2.4295271140275156e+00:2.8415159884258012e-01:3.0288778105826673e+00:2.9661725910842390e-01:3.9867633123865569e+00 + CVs 20 + 1.1575322730121379e-01 4.3831816805283441e-01 -2.8295900451844913e-01 + 2.7484521173116983e-01 8.5323924912583338e-01 -5.2101382902381321e-01 + 4.6546871844593785e-01 1.2511697201851895e+00 -7.3187752836824616e-01 + 6.8310722972838311e-01 1.6306794561714746e+00 -9.4368048707389918e-01 + 9.2758277875996020e-01 1.9799008869713757e+00 -1.1984796211532376e+00 + 1.1891676579600869e+00 2.2719188724782797e+00 -1.5384887806085232e+00 + 1.4467721536067535e+00 2.4744904061733513e+00 -1.9776897179320927e+00 + 1.6760540900466832e+00 2.5647819599739412e+00 -2.4954345299283496e+00 + 1.8553738188009417e+00 2.5303460012098369e+00 -3.0489105965325050e+00 + 1.9705502255492180e+00 2.3774946180374852e+00 -3.5912021055468761e+00 + 2.0233586038019125e+00 2.1440435446900792e+00 -4.0891515378988723e+00 + 2.0319324726968118e+00 1.8870964920367153e+00 -4.5389036565407936e+00 + 2.0027770411440069e+00 1.6461417438273263e+00 -4.9518881135782067e+00 + 1.9091451048733878e+00 1.4384698413609747e+00 -5.3295656241975546e+00 + 1.7224634272634818e+00 1.2939149229559064e+00 -5.6588375159868898e+00 + 1.4475896685152581e+00 1.2646576865771491e+00 -5.8957789914106780e+00 + 1.1473338619495848e+00 1.3750282624654304e+00 -5.9645960348098512e+00 + 8.9447026731922330e-01 1.5548196050856811e+00 -5.9010488723880812e+00 + 5.4883214794766633e-01 1.7060258675908886e+00 -6.0063761866727337e+00 + id 13306 + loc 1.2138199806213379e-01 6.2287455797195435e-01 403 + blend 0.0000000000000000e+00 + interp 3.8463716591563413e-01:3.8195735332586417e-01:1.0267219543780293e-04:3.8463331954397501e-01:7.7918571449932461e-01:3.2857576850563153e-01:1.4110411903943720e+00:3.5810535234609497e-01:2.2049580515615697e+00:3.2590111508654246e-01:3.1778779246118658e+00 + CVs 20 + -7.4025032886924122e-02 1.3363081246426919e-01 -1.0245359188881194e-02 + -1.4311774650581893e-01 2.6638393109379233e-01 -3.6262403740677879e-02 + -2.0640612745004602e-01 3.9574060629614449e-01 -7.2168783881241427e-02 + -2.6537602306385866e-01 5.2411869456341997e-01 -1.1404921524238106e-01 + -3.2210849691025001e-01 6.5343813616955693e-01 -1.6294807577403869e-01 + -3.7916686494191504e-01 7.8584890473937796e-01 -2.1938776672329841e-01 + -4.4056959554467540e-01 9.2371852640683427e-01 -2.8251979310836539e-01 + -5.1125790570366370e-01 1.0689312230880492e+00 -3.4987228816764604e-01 + -5.9538558093037541e-01 1.2228461021922770e+00 -4.1729470314290751e-01 + -6.9672053224360875e-01 1.3868128989716255e+00 -4.7977654839663197e-01 + -8.2109214652315199e-01 1.5604374161530172e+00 -5.3287120855123438e-01 + -9.7665246275592466e-01 1.7388582167239330e+00 -5.7271842084158775e-01 + -1.1721542469318285e+00 1.9127255757952297e+00 -5.9674066690112026e-01 + -1.4129199807088049e+00 2.0689876220766865e+00 -6.0193503906346546e-01 + -1.6848885129952649e+00 2.1967819730918592e+00 -5.8446506012107691e-01 + -1.9698853788353115e+00 2.3022486583491895e+00 -5.4322703041516329e-01 + -2.2767987258696278e+00 2.3927044120643948e+00 -4.7330561018623923e-01 + -2.6096930845094568e+00 2.4603766479316853e+00 -3.7298144135081757e-01 + -2.8699894776930419e+00 2.5318194174285713e+00 -3.1631550885965692e-01 + id 13307 + loc 3.5643786191940308e-01 9.1118812561035156e-01 376 + blend 0.0000000000000000e+00 + interp 4.9702466405373863e-01:4.9701969380709810e-01:6.8661519794501191e-01:3.5187886781834898e-01:1.0179083042316712e+00:2.4994621038338280e-01:2.0094173552314589e+00:4.1258163712036067e-01:2.8362891390936875e+00:4.7092645659672805e-01:3.2036357952187418e+00:3.5019366528282614e-01:3.9999349901084882e+00 + CVs 20 + -1.1962932976570459e-01 4.0289785138213696e-01 5.8577445058571431e-01 + -1.3882697559804968e-01 6.7589805640003409e-01 1.0949292327296245e+00 + -5.8520649081151177e-02 8.0834039042566019e-01 1.6217655678044942e+00 + 9.6397113658782063e-02 8.5824102986369066e-01 2.1870564223555178e+00 + 2.7205142086087430e-01 9.1255875257363250e-01 2.7777591835403950e+00 + 3.9373094885726834e-01 1.0166386291851868e+00 3.3952417851098646e+00 + 3.8736130617425957e-01 1.1699169303501902e+00 4.0311331036889975e+00 + 2.1373126214054783e-01 1.3578832485828083e+00 4.6387554237715882e+00 + -1.1487579552112615e-01 1.5579827747989734e+00 5.1584650274011938e+00 + -5.5311493203600570e-01 1.7367095469018534e+00 5.5674397693413216e+00 + -1.0492606145080898e+00 1.8593122152482211e+00 5.8710113842024736e+00 + -1.5535315634956586e+00 1.9030507614285110e+00 6.0748188175545135e+00 + -2.0217942458039824e+00 1.8719781576872174e+00 6.1879698309924880e+00 + -2.4298350054250446e+00 1.7939148975351746e+00 6.2339641037332729e+00 + -2.8062119819750135e+00 1.6885811273596318e+00 6.2464121761306926e+00 + -3.2514275276962010e+00 1.4861358191961644e+00 6.2172651062208093e+00 + -3.7763636026003926e+00 1.0246954399288586e+00 6.1154279873162967e+00 + -4.1572323259228794e+00 3.4207469392089429e-01 6.0678350671278523e+00 + -4.2785674535821414e+00 -5.9075975905507505e-02 6.1603269703147632e+00 + id 13308 + loc 6.3323205709457397e-01 7.3265391588211060e-01 402 + blend 0.0000000000000000e+00 + interp 4.5703254993000464e-01:4.5702797960450536e-01:2.6922004818445666e-01:4.1249425595644096e-01:9.7831419121768171e-01:3.9624956694160413e-01:1.8857615403744987e+00:3.5283443424310756e-01:2.2653872761674161e+00:3.0333898803915682e-01:2.9936785358961653e+00:2.9328960122107112e-01:3.6959249950464956e+00 + CVs 20 + -1.4955876807554852e-01 -1.3235109674187118e-02 9.1146526872209810e-02 + -3.1197937237004147e-01 1.5878791750078766e-02 1.4648551635804030e-01 + -4.4390989622577426e-01 5.7520707622864403e-02 1.8641159353468806e-01 + -5.7046846991432598e-01 1.0519457567233589e-01 2.1744573320259039e-01 + -6.8773146239903160e-01 1.5950422735702083e-01 2.3788541339772953e-01 + -7.9821635003163882e-01 2.2242778218656625e-01 2.4518407243606749e-01 + -9.1371049030852403e-01 2.9979236976719059e-01 2.3533237941140728e-01 + -1.0426479411760652e+00 3.9703133936688029e-01 2.0481761573126225e-01 + -1.1859722710967024e+00 5.1543900322343816e-01 1.5016660468710105e-01 + -1.3436881455362044e+00 6.5339372858695943e-01 6.5011512714511832e-02 + -1.5212773160953534e+00 8.2434604077697526e-01 -6.3004436161990210e-02 + -1.6942780218956353e+00 1.0799237653566394e+00 -2.3599963785284761e-01 + -1.7567298632618391e+00 1.4356170260503234e+00 -3.9057920672770191e-01 + -1.6538576192126475e+00 1.7932881251564561e+00 -4.6454614138811035e-01 + -1.4375476079765579e+00 2.1034973489522111e+00 -5.1148901080144948e-01 + -1.1733439059623310e+00 2.3604664791303582e+00 -6.1281855989208955e-01 + -9.1267366344279544e-01 2.5598537000649602e+00 -7.9867656701339573e-01 + -6.8274614858911098e-01 2.7030583560409105e+00 -1.0591706521032160e+00 + -5.7182859814399822e-01 2.7657194967452465e+00 -1.2602051728338659e+00 + id 13309 + loc 3.3257323503494263e-01 6.0042464733123779e-01 396 + blend 0.0000000000000000e+00 + interp 4.8602919035172387e-01:3.1104297723591140e-01:7.0248744038988731e-03:3.9450498791787980e-01:8.8495526743983177e-01:3.1630041938283232e-01:1.7555082998889886e+00:3.6879134892356463e-01:2.1879413328350403e+00:3.3669010657555654e-01:2.9795192998533060e+00:4.8602433005982038e-01:3.6502944080730431e+00 + CVs 20 + 8.8160687186322118e-01 1.3424732455218374e-01 -3.4552347283172075e-01 + 1.5042766337182221e+00 1.0168933510795297e-01 -6.0389547985166547e-01 + 2.0628143598822954e+00 2.6541381869924940e-02 -8.1717991752793195e-01 + 2.6124140171240118e+00 -4.7364910545248162e-02 -9.9827903865221823e-01 + 3.1387679324346354e+00 -1.1462022236973501e-01 -1.1527814652273620e+00 + 3.6345999820491679e+00 -1.6709893998252556e-01 -1.2879228818382684e+00 + 4.1001609410931898e+00 -1.9651513876042626e-01 -1.4051387129361232e+00 + 4.5425659286828033e+00 -2.0010912932620495e-01 -1.5044377253807346e+00 + 4.9777661901473742e+00 -1.8416012547866156e-01 -1.5896506514616080e+00 + 5.4265370737567524e+00 -1.6633661385112641e-01 -1.6688741081168472e+00 + 5.9013774310843257e+00 -1.7426848320430022e-01 -1.7538255238023768e+00 + 6.3918910469120105e+00 -2.3407561029136770e-01 -1.8586635809020104e+00 + 6.8705825295421352e+00 -3.5739289961392595e-01 -1.9930523013181345e+00 + 7.3149513714920200e+00 -5.4438540952101899e-01 -2.1574081717061624e+00 + 7.7148878177877487e+00 -7.8852976621090365e-01 -2.3513210819063657e+00 + 8.0695238582488535e+00 -1.0750313742796016e+00 -2.5873690228087844e+00 + 8.3749082937046015e+00 -1.3900231755311152e+00 -2.8768490520365191e+00 + 8.6164216934466875e+00 -1.7162085226875194e+00 -3.2029640292038208e+00 + 8.6507189985632831e+00 -1.9010622442158636e+00 -3.4406392671057651e+00 + id 13310 + loc 3.7777507305145264e-01 3.6604333668947220e-02 1080 + blend 0.0000000000000000e+00 + interp 1.0826609673710044e+00:1.9878069904931853e-01:4.3698244241249118e-01:4.7463170991555503e-01:1.0230374506433504e+00:1.0826509673710043e+00:2.5499011224748616e+00:5.0669498437417071e-01:2.8874860272096168e+00:3.9474650879289430e-01:3.0747490152473351e+00:3.1532705241318004e-01:3.7302016676490251e+00 + CVs 20 + 6.2685837324315574e-01 5.4825874091510685e-01 -1.2682934654330885e-01 + 1.0251987395084117e+00 9.4218346675925391e-01 -2.9272798375728581e-01 + 1.3566484760806894e+00 1.2795930818765688e+00 -4.8654421966076611e-01 + 1.6725288712848523e+00 1.5916484916127551e+00 -7.0615392071589256e-01 + 1.9517440913242088e+00 1.8677385784920639e+00 -9.4734578195370311e-01 + 2.1725296832360339e+00 2.0969268836532047e+00 -1.2003274694994632e+00 + 2.3167310316093914e+00 2.2664024039309503e+00 -1.4495939251228374e+00 + 2.3789206763300901e+00 2.3609942218434954e+00 -1.6718346201471768e+00 + 2.3716017128694364e+00 2.3678381599451237e+00 -1.8287506138586134e+00 + 2.3386636964433625e+00 2.3062433983232093e+00 -1.8776562628364752e+00 + 2.3242766002801680e+00 2.2377946038975152e+00 -1.8545549020533205e+00 + 2.3074123039627144e+00 2.1670259469626352e+00 -1.8351777315112741e+00 + 2.2652907500433943e+00 2.0643518633751050e+00 -1.8278408417044663e+00 + 2.1997670397385245e+00 1.9222706679053188e+00 -1.8194393399633630e+00 + 2.1255792940975038e+00 1.7567789824155260e+00 -1.8030893877714627e+00 + 2.0569803665482720e+00 1.5990189454455273e+00 -1.7795355265786386e+00 + 1.9918584447098120e+00 1.4356059116606741e+00 -1.7563266060938048e+00 + 1.9606348482424707e+00 1.1981502145774372e+00 -1.7389903178000785e+00 + 2.0141204242486772e+00 8.7182144981821641e-01 -1.7273484664769154e+00 + id 13311 + loc 4.6909192204475403e-01 5.7843152433633804e-02 409 + blend 0.0000000000000000e+00 + interp 3.9291873455592202e-01:2.0789469024242005e-01:6.5476256554402334e-01:3.6096669143437132e-01:1.0825375617709212e+00:3.9291480536857648e-01:2.0264959811650733e+00:3.2842197010716329e-01:2.7852736318438351e+00:3.0268956310889972e-01:3.4170142057789059e+00 + CVs 20 + -1.9495064755562366e-01 1.7350839260126333e-01 -3.0687081994936849e-01 + -3.8772723944020104e-01 3.1524766469350296e-01 -6.0440689536217507e-01 + -5.7376270079526159e-01 4.3835356742126513e-01 -9.1482778022343880e-01 + -7.5330154892800949e-01 5.4689687082906491e-01 -1.2438421413573568e+00 + -9.2848107106832722e-01 6.4031072140444789e-01 -1.5882738621228929e+00 + -1.0985131587974259e+00 7.2224143912433436e-01 -1.9469941577899745e+00 + -1.2586520616082986e+00 7.9592626993473847e-01 -2.3192713305800150e+00 + -1.4029831606464018e+00 8.5696188900193926e-01 -2.7033994534225592e+00 + -1.5273392955714513e+00 8.9521237554119071e-01 -3.0964144880781226e+00 + -1.6299656357884789e+00 9.0230983161242384e-01 -3.4926361429804746e+00 + -1.7107188801303992e+00 8.7365774103744687e-01 -3.8827286642825882e+00 + -1.7707547988836327e+00 8.0699990194652749e-01 -4.2563568754577679e+00 + -1.8113737817365245e+00 7.0210269140850512e-01 -4.6069342171608820e+00 + -1.8273044697276739e+00 5.6265927476361055e-01 -4.9327842670172171e+00 + -1.8073694578690787e+00 3.9686265410871746e-01 -5.2314062431120343e+00 + -1.7451572092258143e+00 2.1750410778493645e-01 -5.4950708568174864e+00 + -1.6408949575753842e+00 4.1306765892073383e-02 -5.7173966255663569e+00 + -1.4977503502693734e+00 -1.1940257564176049e-01 -5.8964496521759369e+00 + -1.3209574752465549e+00 -2.5370124888425094e-01 -5.9700808567639729e+00 + id 13312 + loc 1.6085889935493469e-01 3.7129398435354233e-02 373 + blend 0.0000000000000000e+00 + interp 3.5189619459795923e-01:3.1363409810406412e-01:1.5495750927367546e-02:2.0514330028378211e-01:1.1416128314093186e+00:2.9640023144624944e-01:1.9539381765141548e+00:3.5013662416916347e-01:2.7274150627987788e+00:3.5189267563601329e-01:3.2395055206807299e+00 + CVs 20 + -1.5910534729789527e-01 6.2659687708590361e-01 4.4992489162180482e-01 + -3.6769360121379724e-01 1.2354614579662950e+00 8.4273852598037480e-01 + -5.8011421264169527e-01 1.7893983316485687e+00 1.3868749855625195e+00 + -9.0620878660129034e-01 2.3838634438842363e+00 1.7085448597574551e+00 + -1.3301201694475058e+00 2.9378857613795519e+00 1.7664906594095775e+00 + -1.8159252390605438e+00 3.3693039486971053e+00 1.6071097294198626e+00 + -2.3247509747290347e+00 3.5811476732005594e+00 1.2265153240458160e+00 + -2.7905429105588859e+00 3.5076549556459709e+00 6.8263347975225863e-01 + -3.1503836561845477e+00 3.1714201575452767e+00 8.1958941023871024e-02 + -3.3603256082281572e+00 2.6324517769088196e+00 -4.8291214753562439e-01 + -3.3951438870252266e+00 1.9715933623465727e+00 -9.4052056945628837e-01 + -3.2384779361996254e+00 1.2316217972300239e+00 -1.2460755247494131e+00 + -2.8758219241504981e+00 4.1560032047413820e-01 -1.4183358498750773e+00 + -2.2751221417822829e+00 -4.9570361284484282e-01 -1.5539902766745721e+00 + -1.3639881491092460e+00 -1.5898503289763202e+00 -1.8984645302843144e+00 + -4.6723710442997568e-01 -2.6392150987789105e+00 -3.0002507289008129e+00 + -2.5158316717866769e-01 -3.0629522354157972e+00 -4.6696729828602095e+00 + -9.2691647729105531e-01 -2.9570876424017625e+00 -6.1725309420414822e+00 + -1.8981028594062899e+00 -2.7086351761470491e+00 -6.8978555988471015e+00 + id 13313 + loc 6.4331817626953125e-01 3.1069543957710266e-01 375 + blend 0.0000000000000000e+00 + interp 4.0501931819222464e-01:3.9409026957178211e-01:8.3410582472961681e-01:3.2192853338006022e-01:1.2168843165662628e+00:3.0801456708953490e-01:2.1534850230739431e+00:4.0501526799904275e-01:3.0467297751792892e+00:3.8175986312937971e-01:3.8430079704543627e+00 + CVs 20 + 6.3785075908200362e-01 3.9866321449599507e-01 3.5495065346234506e-02 + 1.1729815447932435e+00 6.0629568797761069e-01 7.9036611292605252e-03 + 1.6915487086696988e+00 6.6156158743943350e-01 -8.0393577400256544e-02 + 2.2375680570899275e+00 6.5808398998790185e-01 -2.1719753618331056e-01 + 2.7894055086789167e+00 6.9130923924759013e-01 -3.7307230515326723e-01 + 3.3234267112151676e+00 8.0902939742280877e-01 -5.0774577102565266e-01 + 3.8329418498064012e+00 1.0135489124833952e+00 -5.8787429231782573e-01 + 4.3121392765297397e+00 1.2918824463084257e+00 -5.9552429604870694e-01 + 4.7579113011365832e+00 1.6321120186365994e+00 -5.2194371061091316e-01 + 5.1855421144344405e+00 2.0242388749093827e+00 -3.4574037177273109e-01 + 5.6195084097976800e+00 2.4374479615650402e+00 -3.3857652997741017e-02 + 6.0724148641207156e+00 2.8051882048870240e+00 4.4745134849308332e-01 + 6.5185361578636245e+00 3.0251560712102008e+00 1.1212463731982387e+00 + 6.8770385851365665e+00 2.9949540193138500e+00 1.9406206239612345e+00 + 7.0585358900021209e+00 2.6695691264187302e+00 2.8141146398573409e+00 + 7.0331838612975819e+00 2.0343517937882720e+00 3.6211938371956172e+00 + 6.9635002494794476e+00 1.1061614478395416e+00 4.1666390579741712e+00 + 7.0591879867468244e+00 1.5598240627873938e-01 4.2929083262915722e+00 + 7.1946484657461793e+00 -5.1092573315831968e-01 4.2270067268965033e+00 + id 13314 + loc 4.9491453170776367e-01 2.0061364769935608e-01 374 + blend 0.0000000000000000e+00 + interp 4.1636159578856496e-01:4.1635743217260712e-01:2.1598295662074996e-01:3.2439602463818451e-01:1.0000052376249209e+00:4.0094376769183238e-01:1.6861839211861285e+00:3.1448768027615193e-01:2.0247781481758995e+00:2.7134726572911982e-01:2.7377426172776262e+00:4.0677404050860411e-01:3.1361354439653475e+00:2.5627704484368119e-01:3.9659261517079272e+00 + CVs 20 + -4.0130683137777179e-01 5.5924606061929938e-01 7.3517370143207239e-01 + -5.9493001372980570e-01 9.4490985486765200e-01 1.3881189127909255e+00 + -6.4375042376931224e-01 1.1686464951705788e+00 2.0474441913342218e+00 + -6.4453084575734609e-01 1.3136697833223676e+00 2.7027419250270288e+00 + -6.8350418309252958e-01 1.4356726422485384e+00 3.3403343380892156e+00 + -8.2469263846804175e-01 1.5307358463153964e+00 3.9710812052514175e+00 + -1.1010376113977083e+00 1.5706608688316668e+00 4.5810127923842678e+00 + -1.5163304422263426e+00 1.5365479469511560e+00 5.1354414581640402e+00 + -2.0601411704415229e+00 1.4170261488404141e+00 5.6057241232859445e+00 + -2.7055323378153515e+00 1.2005564363560568e+00 5.9794413557055064e+00 + -3.4050989390742057e+00 8.7642288081235331e-01 6.2474385394057581e+00 + -4.0865494104324176e+00 4.3861143947820347e-01 6.3909083494746124e+00 + -4.6645359378825599e+00 -1.0432207832570306e-01 6.3940485578939779e+00 + -5.0693651680088241e+00 -7.2195329833309163e-01 6.2618863271903802e+00 + -5.2620941531768493e+00 -1.3596856401674273e+00 6.0244982763132793e+00 + -5.2321533989134767e+00 -2.0134131416029741e+00 5.8070182013424523e+00 + -4.9100404887777671e+00 -2.7187245102444000e+00 5.8429287886784946e+00 + -4.3066678614454279e+00 -3.2761880026273684e+00 6.2258857898206363e+00 + -4.1994744622357434e+00 -3.9026082247401908e+00 6.3618549972708802e+00 + id 13315 + loc 4.8208630084991455e-01 5.0883448123931885e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7307046894909827e-01:2.6732310246511842e-01:8.6306023512211838e-01:2.8387338027756004e-01:1.2825152539230580e+00:3.1257261625341365e-01:2.1725162778631395e+00:3.1587260221504260e-01:2.9279569756015116e+00:2.9736368760687021e-01:3.4682832089230820e+00:4.7306573824440878e-01:3.9976171705705279e+00 + CVs 20 + 3.2652688021699378e-02 2.6063600359427153e-01 -5.7582609081658312e-02 + 6.7850828975753841e-02 5.4044499585378802e-01 -1.4187232010633086e-01 + 1.1805119622208021e-01 8.3478419453796482e-01 -2.4286956613567653e-01 + 2.0926990219500169e-01 1.1281788497977696e+00 -3.5550593373926748e-01 + 3.4811305239432572e-01 1.3763669229092257e+00 -4.5473552468316591e-01 + 4.9275495443201311e-01 1.5516350315042806e+00 -5.1041440369736368e-01 + 6.0744661314322834e-01 1.6729797142410403e+00 -5.2133114629056032e-01 + 6.9272878001684079e-01 1.7862396684940600e+00 -4.9667998904768351e-01 + 7.4735880111950770e-01 1.9421106920507025e+00 -4.5297814973633443e-01 + 7.4231495035124762e-01 2.1636450815200226e+00 -4.3786490313943838e-01 + 6.4271365026021188e-01 2.3989555421301394e+00 -5.1416669963946204e-01 + 4.6345859929363231e-01 2.5497259359027176e+00 -6.7683014967144861e-01 + 2.4639000242466735e-01 2.5761145743187281e+00 -8.7077021496584917e-01 + 1.4663230403795247e-02 2.4676416622190134e+00 -1.0650816978989344e+00 + -1.9250304125691198e-01 2.2295059441757532e+00 -1.2245004836326041e+00 + -3.3363456643572875e-01 1.9382218516379239e+00 -1.3009018103248529e+00 + -4.2201016779967204e-01 1.6246868446995428e+00 -1.3021257855103805e+00 + -4.5845907948713061e-01 1.2313430607674078e+00 -1.2406658599642753e+00 + -4.8254625324655426e-01 9.1720827282834871e-01 -1.1634379969413482e+00 + id 13316 + loc 1.7345614731311798e-01 1.8379511311650276e-02 395 + blend 0.0000000000000000e+00 + interp 4.6361648310096470e-01:4.0544296772603583e-01:4.8041895472169560e-01:3.2203044998427027e-01:9.8122897316152369e-01:2.2240203926093743e-01:1.5266229281814183e+00:3.0892552616820257e-01:2.0969002928371907e+00:3.0750075018742334e-01:3.1770811983337435e+00:4.6361184693613372e-01:3.9110691849956796e+00 + CVs 20 + -2.7123593907075438e-01 1.1753556895788042e-01 -1.1765641352604926e-01 + -5.1507910846467830e-01 2.4254046131920212e-01 -2.4978021941574019e-01 + -7.4779381651989585e-01 3.7456112706479883e-01 -3.8911663729856893e-01 + -9.7965070525878484e-01 5.1529008309067303e-01 -5.3532078556336615e-01 + -1.2093467283528496e+00 6.6334975303611277e-01 -6.9153712467228889e-01 + -1.4371286363056717e+00 8.1601168065988405e-01 -8.5971967336722144e-01 + -1.6679861684208281e+00 9.7268666163752471e-01 -1.0419662783437764e+00 + -1.9090125414537744e+00 1.1315084474097892e+00 -1.2438152030123402e+00 + -2.1612033507842900e+00 1.2818973984424988e+00 -1.4726717210545159e+00 + -2.4212986079410701e+00 1.4043887857503401e+00 -1.7283217444176635e+00 + -2.6939222493287462e+00 1.4762194466348011e+00 -2.0007061761728484e+00 + -2.9894749472031767e+00 1.4771135208958830e+00 -2.2783518277484553e+00 + -3.3078534749196642e+00 1.3981702562179594e+00 -2.5515600016148556e+00 + -3.6373969617452149e+00 1.2439093380364301e+00 -2.8110317751295844e+00 + -3.9678566224349963e+00 1.0222158898021596e+00 -3.0487669522969876e+00 + -4.2934963370322006e+00 7.3318604790597908e-01 -3.2607674775686508e+00 + -4.6006675327805437e+00 3.7715393020022558e-01 -3.4427135031687368e+00 + -4.8693975978788435e+00 -2.0913363609627478e-02 -3.5909176271912955e+00 + -5.0917170612120772e+00 -3.6140185048977091e-01 -3.7113168527280038e+00 + id 13317 + loc 8.0755722522735596e-01 4.6469748020172119e-01 377 + blend 0.0000000000000000e+00 + interp 3.7848414449229950e-01:3.7848035965085458e-01:4.3308331871843841e-01:2.5535789793751273e-01:1.1125391860273199e+00:2.2465877577419469e-01:2.3911110767096195e+00:2.4912706538466148e-01:3.6263800463115814e+00 + CVs 20 + 7.2181469593533609e-01 1.9015081455892413e-01 6.9009529002716752e-01 + 1.2406771269797547e+00 2.4043372971465560e-01 1.1117037030659738e+00 + 1.7033037905668693e+00 2.4397975993847110e-01 1.4452932938534560e+00 + 2.1661386991135108e+00 2.4126462696380124e-01 1.7635572338564407e+00 + 2.6282417490757761e+00 2.3685180805896222e-01 2.0755805933015874e+00 + 3.0922427630921456e+00 2.4487833057765507e-01 2.4005073391759164e+00 + 3.5728806436579674e+00 2.7183393405389877e-01 2.7604508808108417e+00 + 4.0829168052998099e+00 3.0412919446427655e-01 3.1764996196742330e+00 + 4.6054655356588503e+00 3.1229825408250589e-01 3.6613205196589012e+00 + 5.1263443637077319e+00 2.5336169335037861e-01 4.2292943721364713e+00 + 5.6534975218502854e+00 6.2618030919205925e-02 4.8829631528528701e+00 + 6.1830312789279116e+00 -3.3296796395563044e-01 5.5804710463420371e+00 + 6.6728844777206344e+00 -9.8279176941025215e-01 6.2317373497219659e+00 + 7.0575887050714030e+00 -1.8417682427996604e+00 6.7345203595747121e+00 + 7.3237269462422354e+00 -2.7721330706126084e+00 7.0663613249180601e+00 + 7.5284332002901522e+00 -3.6600280562828966e+00 7.2862972847372873e+00 + 7.7533366804984407e+00 -4.4682686449249056e+00 7.4406957706840844e+00 + 8.0474854981982631e+00 -5.2003526286204043e+00 7.5341452764851873e+00 + 8.3242688555796995e+00 -5.8798539192624357e+00 7.5939116069480281e+00 + id 13318 + loc 2.5043240189552307e-01 2.4175388738512993e-02 407 + blend 0.0000000000000000e+00 + interp 4.5729412362488264e-01:2.5822809780679967e-01:1.3619264368716189e-02:4.5728955068364641e-01:9.5120721843246248e-01:4.4570048315873056e-01:1.2738855849983572e+00:3.1123869446257074e-01:1.9360230284697013e+00:4.0794319648623190e-01:2.1565980102315896e+00:2.9786494231506083e-01:3.0055539035074608e+00:3.8670873083271007e-01:3.6599337241341781e+00 + CVs 20 + 1.0584055359387254e-01 3.5624905234416337e-01 -4.1130119408085841e-01 + 2.1639821091757150e-01 6.1762152548326954e-01 -6.1000173722318296e-01 + 3.4025155951701952e-01 7.7745387394983678e-01 -7.4837377880900668e-01 + 4.8573248697785215e-01 8.9533409661448782e-01 -8.7276399186483689e-01 + 6.5209608227912352e-01 9.6163895926263532e-01 -9.7321251902915062e-01 + 8.3071342682909466e-01 9.6995868707703026e-01 -1.0421996889743885e+00 + 1.0076649154450876e+00 9.2707302326243046e-01 -1.0792969503416869e+00 + 1.1750493863238411e+00 8.5409843738040503e-01 -1.0941185224670895e+00 + 1.3387005532802332e+00 7.7407583441560712e-01 -1.1005273053364837e+00 + 1.5112669585695229e+00 7.0030529309964207e-01 -1.1090891671713754e+00 + 1.7016155939692197e+00 6.3531255816377030e-01 -1.1243028729657976e+00 + 1.9115643936695494e+00 5.7561472927003887e-01 -1.1448591401260304e+00 + 2.1401833167053468e+00 5.1866094351103909e-01 -1.1690666617397354e+00 + 2.3910646348752578e+00 4.7129038362250020e-01 -1.2017818722825819e+00 + 2.6684931577474171e+00 4.4915655209799199e-01 -1.2504884048550586e+00 + 2.9663521215480957e+00 4.6515610728682688e-01 -1.3138738652302488e+00 + 3.2711951901077589e+00 5.1987573457393221e-01 -1.3816849904855277e+00 + 3.5736367948656729e+00 6.0624658348288218e-01 -1.4417945893923685e+00 + 3.8655417392107019e+00 6.7586790579063749e-01 -1.4290267976229094e+00 + id 13319 + loc 8.3709377050399780e-01 8.7506532669067383e-01 399 + blend 0.0000000000000000e+00 + interp 4.5856179114219281e-01:3.3949359008095087e-01:1.9300693321732065e-01:4.2350457710949735e-01:8.6152361719250459e-01:3.4751950725920983e-01:1.1034884915171654e+00:3.8033079470040404e-01:1.8146855967339373e+00:4.5855720552428142e-01:2.2000555933281571e+00:3.5380708800662991e-01:2.9676425692054318e+00:3.8594725661232776e-01:3.9150025140925271e+00 + CVs 20 + -1.7025884225370411e-01 3.3441990321173964e-01 -2.4553517440470901e-01 + -3.2386872242802134e-01 6.3140638864301113e-01 -4.8241874960940423e-01 + -4.6395000699868527e-01 8.8753412733853332e-01 -7.2700737825242379e-01 + -5.9044209677116222e-01 1.1022739247428475e+00 -9.8137873335219750e-01 + -7.0172167660880247e-01 1.2791596232983684e+00 -1.2421691054627690e+00 + -7.9902006210595244e-01 1.4258414862680542e+00 -1.5105947172973606e+00 + -8.8844674696164494e-01 1.5442438168935917e+00 -1.7978785439676379e+00 + -9.7996109146717980e-01 1.6244164575694182e+00 -2.1172371820687208e+00 + -1.0857846663997994e+00 1.6667572965538193e+00 -2.4674786799924466e+00 + -1.2190341731455403e+00 1.6871125739999289e+00 -2.8413135224584707e+00 + -1.3799531529845581e+00 1.6594872646622396e+00 -3.2417096644649499e+00 + -1.5428453880465240e+00 1.5067370199290742e+00 -3.6653946117102696e+00 + -1.7039280145221236e+00 1.2074939489241290e+00 -4.0902871369481559e+00 + -1.9109085602575915e+00 8.3414121693476073e-01 -4.4929394302676045e+00 + -2.1947875094726648e+00 4.4356145931426127e-01 -4.8472831233635469e+00 + -2.5268623457655441e+00 -2.6743885675605261e-03 -5.1173272355073012e+00 + -2.9019967613264797e+00 -5.6034987754697863e-01 -5.2908927241116235e+00 + -3.4163160365765322e+00 -1.0783635038444250e+00 -5.4078086133718681e+00 + -3.8961506012777880e+00 -1.1419651869919853e+00 -5.4575807223269051e+00 + id 13320 + loc 1.8031007051467896e-01 1.8014778196811676e-01 382 + blend 0.0000000000000000e+00 + interp 4.5896638396251838e-01:2.8503378172786387e-01:2.9234264601184090e-01:2.7103221594422766e-01:1.2959029728385663e+00:4.5866118887930252e-01:1.9485902668943194e+00:3.8293184840235273e-01:2.3953486801690582e+00:4.5896179429867878e-01:2.9586337699466081e+00:3.0325236252614463e-01:3.3246567558861555e+00 + CVs 20 + -5.3152438830798443e-01 1.5971756211617685e-01 -5.7744004714476116e-01 + -9.1099599454755675e-01 2.1442207468679919e-01 -9.4631753447653155e-01 + -1.2437746751805407e+00 2.2661502374881992e-01 -1.2572434872462201e+00 + -1.5676769618917215e+00 2.3074731482162980e-01 -1.5781160506435254e+00 + -1.8801176151022849e+00 2.2535060116049188e-01 -1.9114492069757911e+00 + -2.1818505515993216e+00 2.0650174783804287e-01 -2.2594380585518721e+00 + -2.4792863102284386e+00 1.7102438097766293e-01 -2.6214645104375687e+00 + -2.7813429003886361e+00 1.1650945405750135e-01 -2.9924987792888635e+00 + -3.0905867103688456e+00 3.6941918190275036e-02 -3.3671937959172751e+00 + -3.4004010819446604e+00 -7.9207514160495762e-02 -3.7423923981678948e+00 + -3.7038474484420374e+00 -2.4492949763160587e-01 -4.1092383880251688e+00 + -3.9986379522371038e+00 -4.6723132220937824e-01 -4.4487395041224183e+00 + -4.2801525067518220e+00 -7.4265365345466861e-01 -4.7404233287875588e+00 + -4.5365750453692115e+00 -1.0570153529001061e+00 -4.9790429187586742e+00 + -4.7573790054252454e+00 -1.3920447666347626e+00 -5.1708135661243180e+00 + -4.9417057709343428e+00 -1.7264223793386626e+00 -5.3235754565592313e+00 + -5.0965077473328115e+00 -2.0411765419703833e+00 -5.4436343407634666e+00 + -5.2247363375000644e+00 -2.3337945946325585e+00 -5.5312747573988830e+00 + -5.2495852170714601e+00 -2.6980591112699415e+00 -5.5037146679173610e+00 + id 13321 + loc 7.2223222255706787e-01 8.1625849008560181e-01 393 + blend 0.0000000000000000e+00 + interp 3.5719380146441182e-01:2.8543138075822849e-01:2.6277991922842714e-01:2.9025623805671086e-01:9.9755339013681232e-01:2.5503689355489778e-01:1.7672507009391767e+00:3.5719022952639717e-01:2.0852130629931569e+00:2.9805423570367467e-01:2.9949378746626780e+00:3.1052092591382835e-01:3.6857081335046500e+00 + CVs 20 + -2.1777265681872124e-01 3.3741183809280789e-01 -3.4852887126956555e-01 + -4.3912098020798385e-01 6.8668872005673376e-01 -6.5265629539494741e-01 + -6.7136717495730824e-01 1.0522372836865279e+00 -9.4901592767645460e-01 + -9.3683153575593525e-01 1.4263812802513787e+00 -1.2508493306462174e+00 + -1.2573558559848772e+00 1.7851327515276494e+00 -1.5543278127919016e+00 + -1.6432052153548404e+00 2.0965134749052003e+00 -1.8509053525001624e+00 + -2.0886065928973516e+00 2.3235097625349539e+00 -2.1268673822844875e+00 + -2.5707439994159240e+00 2.4238843513591410e+00 -2.3626162918408458e+00 + -3.0483080955902895e+00 2.3831031720565092e+00 -2.5483316383707932e+00 + -3.4971715234955227e+00 2.2317611095051082e+00 -2.6996793117693869e+00 + -3.9116433622643600e+00 2.0010070204351269e+00 -2.8276375017217359e+00 + -4.2672091312145453e+00 1.7135150013728748e+00 -2.9110287738823173e+00 + -4.5432827124178328e+00 1.4085578276050748e+00 -2.9342994156930273e+00 + -4.7639912570970724e+00 1.1227970408182504e+00 -2.9258657795000880e+00 + -4.9656233614871006e+00 8.7323879274437388e-01 -2.9192159516276890e+00 + -5.1502695693678078e+00 6.9080889453692018e-01 -2.9203082440085910e+00 + -5.3040517631790332e+00 6.0385706408433926e-01 -2.9428492849150767e+00 + -5.4709800101553139e+00 5.5769356277778881e-01 -3.0136317316512264e+00 + -5.8212917326072215e+00 3.8230852892462441e-01 -3.0750938070206475e+00 + id 13322 + loc 8.9846616983413696e-01 4.5165437459945679e-01 400 + blend 0.0000000000000000e+00 + interp 4.2615599085010231e-01:4.2615172929019385e-01:5.4259333887370031e-02:3.3118672845349095e-01:6.8367814347813460e-01:2.6668708567159427e-01:1.7436202123047697e+00:3.1093100299339860e-01:2.5887757534014368e+00:2.7959360548482931e-01:3.6711732181956434e+00 + CVs 20 + 1.0094354090542851e-01 1.2873146364623511e-01 2.7716589128559044e-01 + 1.9198378795312585e-01 2.4792983448811515e-01 5.3693359602931623e-01 + 2.7868834662929209e-01 3.6125828464776305e-01 7.9369558592866540e-01 + 3.6667126823540391e-01 4.6943178324412238e-01 1.0538023316858636e+00 + 4.6041088821120474e-01 5.6725025459076672e-01 1.3141351797265890e+00 + 5.6232418813840124e-01 6.5216161215902668e-01 1.5697289356216881e+00 + 6.7064809343868492e-01 7.2940942366240180e-01 1.8159374962447896e+00 + 7.8320724069582748e-01 8.0599323832497183e-01 2.0501945812681961e+00 + 9.0111845026383075e-01 8.8146559773358557e-01 2.2760636880367291e+00 + 1.0267560423466260e+00 9.4968381124772094e-01 2.5007539912120409e+00 + 1.1618719229459065e+00 1.0069399881022068e+00 2.7295197960417052e+00 + 1.3072578776701591e+00 1.0535094799180609e+00 2.9654733897580172e+00 + 1.4661542637373035e+00 1.0878787028858441e+00 3.2114513879202002e+00 + 1.6445360965866900e+00 1.1025709537561017e+00 3.4747227525638182e+00 + 1.8415267161925584e+00 1.0866951106424907e+00 3.7670170698556493e+00 + 2.0401994976941151e+00 1.0314016097992518e+00 4.0979701286495702e+00 + 2.2120769642412723e+00 9.2831839064772659e-01 4.4636707314029547e+00 + 2.3330639873900001e+00 7.5856024979428449e-01 4.8298231304805990e+00 + 2.3662093858937210e+00 4.5460537971501447e-01 4.9864467030506452e+00 + id 13323 + loc 8.1821948289871216e-01 5.7154174894094467e-02 1078 + blend 0.0000000000000000e+00 + interp 4.9520710808115387e-01:2.8906978578851311e-01:5.8263716918696917e-02:3.8624732152982905e-01:9.9884769714847199e-01:4.4779440187616432e-01:1.4326196657576231e+00:4.9520215601007306e-01:1.9999041559561646e+00:3.8770582044089635e-01:2.4457435551489990e+00:3.0359370096698657e-01:3.0978559822042984e+00 + CVs 20 + -1.4745237709024861e-01 1.6346727650832102e-01 1.2554391743250368e-01 + -2.8128986982146387e-01 3.4386549087295409e-01 2.4086310265832270e-01 + -4.0599336861854513e-01 5.3164723902605049e-01 3.5170381590600536e-01 + -5.2916119793241989e-01 7.2433319991987954e-01 4.6554146242476702e-01 + -6.5471934062597403e-01 9.2163838863789915e-01 5.8372565565125978e-01 + -7.8774392318957487e-01 1.1211088812012919e+00 7.0847511923774520e-01 + -9.3743737617411316e-01 1.3163876800054655e+00 8.4923239836819764e-01 + -1.1137291866290813e+00 1.4953150125950954e+00 1.0195778578636243e+00 + -1.3203716890078172e+00 1.6417944314122124e+00 1.2278620622353174e+00 + -1.5544818696800151e+00 1.7390001530571744e+00 1.4754392521916875e+00 + -1.8092126073590029e+00 1.7711686611055428e+00 1.7586375107198724e+00 + -2.0750418072563881e+00 1.7255338874561124e+00 2.0691032053318774e+00 + -2.3412916471815608e+00 1.5940383042535866e+00 2.3940800347344298e+00 + -2.5980734308393876e+00 1.3749780991729601e+00 2.7163521188852831e+00 + -2.8381614822512384e+00 1.0734465480507671e+00 3.0115086015118542e+00 + -3.0557962689314211e+00 6.9599565428261645e-01 3.2294756763040229e+00 + -3.2313729698543083e+00 2.6699487123918053e-01 3.2442281853601687e+00 + -3.3184403488988710e+00 -6.5979232315553915e-02 2.9186243004666150e+00 + -3.4408830683433695e+00 -4.4596110249406662e-01 2.7967275027659717e+00 + id 13324 + loc 9.5988774299621582e-01 8.3599781990051270e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2326479755893009e-01:4.2326056491095454e-01:2.7708098625362276e-02:2.6954623116596454e-01:7.0862498912778227e-01:3.0382647666310569e-01:1.1187844220834140e+00:3.1913773372783394e-01:1.8396734955444021e+00:2.1021367289659060e-01:2.5577631764318545e+00:3.5490468297061684e-01:3.7562875252714480e+00 + CVs 20 + 3.6092963089504299e-02 4.3669480121579607e-01 -2.1329543471719895e-01 + 6.9290187637478573e-02 8.3903133292297150e-01 -3.6363338538570733e-01 + 1.1494532943586017e-01 1.2357067735047376e+00 -4.8430908277728502e-01 + 1.9206035359261872e-01 1.6550516557466557e+00 -6.0291332980408885e-01 + 3.3336276684794303e-01 2.1160019863084916e+00 -7.4692211755291604e-01 + 5.7377151981937868e-01 2.5932541928748090e+00 -9.6444682470283394e-01 + 9.1882562293090908e-01 3.0027104638185498e+00 -1.2955578507225687e+00 + 1.3380951989574486e+00 3.2603574117662060e+00 -1.7323031005570799e+00 + 1.7925099502779365e+00 3.3308539184133448e+00 -2.2302115189720744e+00 + 2.2492369586832619e+00 3.2205596376067116e+00 -2.7409143390241164e+00 + 2.6813074429400081e+00 2.9636210749163241e+00 -3.2325896879849170e+00 + 3.0754342661241285e+00 2.6102939266692209e+00 -3.6972697187456793e+00 + 3.4380518800090547e+00 2.2147788974228626e+00 -4.1541534185027373e+00 + 3.7754444970683165e+00 1.8172267239492299e+00 -4.6315737572343467e+00 + 4.0732617260751907e+00 1.4269285008488988e+00 -5.1599367104963907e+00 + 4.2938696788610882e+00 1.0595850090159968e+00 -5.7537948961291985e+00 + 4.4001166907093516e+00 7.6146668222701663e-01 -6.3918363163758984e+00 + 4.3916140679569677e+00 5.7714505926817372e-01 -7.0101653764203329e+00 + 4.3184876104938761e+00 5.3553832996493522e-01 -7.4817884800639440e+00 + id 13325 + loc 6.7310202121734619e-01 9.2615705728530884e-01 380 + blend 0.0000000000000000e+00 + interp 5.3304078416728295e-01:4.1630766207785080e-01:5.5417670032013411e-01:3.2197889905628002e-01:1.1172178238017447e+00:5.3303545375944128e-01:1.9999996079261586e+00:3.1204747805266619e-01:2.8540287247840288e+00:3.1429927537467278e-01:3.2390682394007042e+00:4.6776575529710673e-01:3.9299225378119926e+00 + CVs 20 + -2.8524638524336965e-01 2.0479237775032136e-01 -6.6713031822374780e-01 + -5.4314964379468778e-01 3.3837029651151151e-01 -1.1685934254393875e+00 + -7.8015552925027443e-01 4.5241463238707058e-01 -1.6184549724811861e+00 + -1.0058820276227680e+00 5.7553482658291488e-01 -2.0715326889819075e+00 + -1.2186873345841696e+00 7.0898364961081095e-01 -2.5277895608164465e+00 + -1.4195414987439210e+00 8.4632446322172306e-01 -2.9913367563316635e+00 + -1.6145219084119673e+00 9.7889679115506034e-01 -3.4682638480798720e+00 + -1.8103862115517111e+00 1.0935100599293108e+00 -3.9670609155427607e+00 + -2.0106897504148602e+00 1.1689287158755348e+00 -4.4966051915102216e+00 + -2.2157319783429248e+00 1.1780909037754650e+00 -5.0569779122846716e+00 + -2.4242354576209757e+00 1.0941024694431349e+00 -5.6326972887614799e+00 + -2.6333689986636304e+00 8.8939854161372978e-01 -6.2023975071367250e+00 + -2.8285613911954375e+00 5.4242041190254220e-01 -6.7301103137026823e+00 + -2.9831084951806441e+00 7.0935963774632516e-02 -7.1565456338877169e+00 + -3.0821200270021296e+00 -4.5468651901432722e-01 -7.4428289105396264e+00 + -3.1405560951585612e+00 -9.8063127366011571e-01 -7.6164992073013238e+00 + -3.1976005097544573e+00 -1.4983808473633093e+00 -7.7293371208630335e+00 + -3.3029286508322131e+00 -2.0014048450832091e+00 -7.8173739112025684e+00 + -3.4741511268030028e+00 -2.5049117872034996e+00 -7.8916896688351628e+00 + id 13326 + loc 9.8713177442550659e-01 7.1583026647567749e-01 401 + blend 0.0000000000000000e+00 + interp 4.2378974909230860e-01:3.6937027888095841e-01:1.6478373148137826e-02:2.8650997252995414e-01:6.4462536379646151e-01:2.8950345042959919e-01:1.6318818177390442e+00:4.2378551119481772e-01:2.2907017477914389e+00:2.8234307407365655e-01:2.9019196766396771e+00:3.6446558693458819e-01:3.2639083269221145e+00:3.4672928504910372e-01:3.9749097414045087e+00 + CVs 20 + -3.1756288672309216e-02 3.3376590173511422e-01 -3.6868892379862839e-01 + -1.9398931305715184e-02 6.6545643043461955e-01 -7.2603093760368509e-01 + 3.1893287351134780e-02 9.7945966130031070e-01 -1.1132059589365342e+00 + 1.1019478029292007e-01 1.2584372026396322e+00 -1.5483660486900657e+00 + 1.8992533965275304e-01 1.4901414469252667e+00 -2.0402819296650732e+00 + 2.2657145804455137e-01 1.6724371257845703e+00 -2.5966258589061733e+00 + 1.6925878078350720e-01 1.7975314386005437e+00 -3.2056187374195098e+00 + -1.6997260838536699e-02 1.8482312134699803e+00 -3.8285064370536581e+00 + -3.3607136486908862e-01 1.8123200416519496e+00 -4.4119702323518899e+00 + -7.5636694816652106e-01 1.6937084273660721e+00 -4.9051286061871213e+00 + -1.2232196577449521e+00 1.5101704471200850e+00 -5.2793342367161964e+00 + -1.6788529295726085e+00 1.2851879081820756e+00 -5.5368175727483964e+00 + -2.0951882027120088e+00 1.0367529911662345e+00 -5.7050274532388308e+00 + -2.4768212522411313e+00 7.6968136913397012e-01 -5.8156196549016306e+00 + -2.8142132988188822e+00 4.9563771712202453e-01 -5.8885161899727958e+00 + -3.0747096675417906e+00 2.4554024310948874e-01 -5.9275446609745917e+00 + -3.2580398876228904e+00 2.6569363097080745e-02 -5.9182552985788348e+00 + -3.4312128726358448e+00 -2.1040458358528608e-01 -5.8919741865871798e+00 + -3.6301473422048360e+00 -5.0130260554006667e-01 -6.0001940989718312e+00 + id 13327 + loc 3.5132713615894318e-02 9.5345425605773926e-01 376 + blend 0.0000000000000000e+00 + interp 4.5867843920443291e-01:3.4452274067827482e-01:1.0975926846290562e-06:2.0196989652589742e-01:7.2401537277479999e-01:4.5867385242004088e-01:1.4902522225132331e+00:4.4429803573471149e-01:2.0881354368410281e+00:2.5637772549716370e-01:2.7826966972472658e+00:4.1095020594630571e-01:3.0158957246165916e+00 + CVs 20 + -1.0866448880688914e-01 4.6443771122691702e-01 6.9507000844365907e-01 + -1.4655142545328470e-01 7.6025288641176125e-01 1.2622342339683106e+00 + -1.1966014145742604e-01 9.1249083307628887e-01 1.8258497195999490e+00 + -5.6602065317983452e-02 9.8604281961155038e-01 2.4041266978087203e+00 + 3.6666575329233897e-03 1.0577010056080656e+00 2.9615251118139940e+00 + 2.2633919905312272e-02 1.1683171309360665e+00 3.4777312950135264e+00 + -3.0161407322307210e-02 1.3165823143531459e+00 3.9421757869598220e+00 + -1.5749257142797712e-01 1.4832310064862400e+00 4.3429120417542295e+00 + -3.4683963741050750e-01 1.6590710903555279e+00 4.6851263977772843e+00 + -6.0571876476299513e-01 1.8472666061394070e+00 5.0030520209102072e+00 + -9.4781354478257029e-01 2.0372875512745914e+00 5.3246502418358794e+00 + -1.3653071163800437e+00 2.1947180612006369e+00 5.6527891970091320e+00 + -1.8371737311516665e+00 2.2721630952091516e+00 5.9666818142373508e+00 + -2.3245125940990556e+00 2.2351330730171206e+00 6.2293473410510529e+00 + -2.8199044303432972e+00 2.0767313701725865e+00 6.4086990125465846e+00 + -3.4035640589687173e+00 1.7164558264985927e+00 6.4304781882218753e+00 + -4.0289546164884058e+00 9.8478902581343331e-01 6.2538568244751636e+00 + -4.3732069406360878e+00 2.2413639813391395e-02 6.0902426056926675e+00 + -4.3367313039197137e+00 -4.1842134943550979e-01 6.0569631987175594e+00 + id 13328 + loc 6.4113003015518188e-01 6.7519140243530273e-01 415 + blend 0.0000000000000000e+00 + interp 4.8452606824666877e-01:4.8452122298598632e-01:2.8093872779448537e-01:4.0015528774610620e-01:9.0001962121682244e-01:4.8388254616533477e-01:1.0828639988646862e+00:4.7116662835163742e-01:1.4878094394560757e+00:4.4066422423387747e-01:2.0043651389720916e+00:4.4626886903186080e-01:2.9540896219088610e+00:3.2828865001212515e-01:3.6496201008886562e+00:4.7733891583547000e-01:3.9960415738246904e+00 + CVs 20 + 4.1140534387085148e-01 1.8177075216294833e-01 -1.8377592459398684e-02 + 7.5315598031347486e-01 3.0731390991511293e-01 -6.5713154766090465e-02 + 1.0908275975202546e+00 4.2551593940331023e-01 -9.2424676438529751e-02 + 1.4491373362098936e+00 5.5105950657917369e-01 -7.8298180839445397e-02 + 1.8229713001032464e+00 6.7451844357385837e-01 -1.6889476974833784e-02 + 2.2026405026236113e+00 7.8745940905240175e-01 9.9551686128752315e-02 + 2.5738163637948661e+00 8.8337856173277152e-01 2.7409649797994895e-01 + 2.9216001828043345e+00 9.5925386352528097e-01 5.0088323927772482e-01 + 3.2331143440863186e+00 1.0166577192867523e+00 7.6968868285471725e-01 + 3.4983600092938421e+00 1.0585313732905559e+00 1.0680140753122789e+00 + 3.7203093649150514e+00 1.0837514810664810e+00 1.3718101500677335e+00 + 3.9308802425406828e+00 1.0803819555009131e+00 1.6421851298678567e+00 + 4.1679581315565803e+00 1.0347382981451676e+00 1.8460062525518179e+00 + 4.4264642589702428e+00 9.5231799818496743e-01 1.9836235591001368e+00 + 4.6792270915686958e+00 8.5032130626348046e-01 2.0833091749478987e+00 + 4.9180442496864210e+00 7.3716726516333564e-01 2.1574962135804370e+00 + 5.1455901631883076e+00 6.1662912006328829e-01 2.2011747695318968e+00 + 5.3612698217359345e+00 4.9482945115132004e-01 2.2148429554707558e+00 + 5.4875269646303719e+00 4.4398209448147963e-01 2.2796934005059222e+00 + id 13329 + loc 4.1719496250152588e-01 5.3421711921691895e-01 1080 + blend 0.0000000000000000e+00 + interp 3.2247085733209263e-01:3.2246763262351935e-01:3.2836144751874574e-01:2.9136598498478472e-01:1.2846039221401488e+00:2.9602360622563739e-01:2.3766714874706101e+00:2.9224457025420303e-01:3.1850875968331129e+00 + CVs 20 + -1.8348098194737508e-01 1.9335447254710811e-01 2.6716887094488517e-01 + -3.0908175519308712e-01 3.0044764727302770e-01 3.9769364927891238e-01 + -4.2970921361543252e-01 3.6922588842471210e-01 4.9168178878895896e-01 + -5.7082594103018558e-01 4.2001888922666469e-01 5.9268245741743342e-01 + -7.2979939374429514e-01 4.4989145853463941e-01 6.9596495874029873e-01 + -9.0411829031944591e-01 4.5670271768337334e-01 7.9761323299670794e-01 + -1.0919859726746997e+00 4.3939138388116172e-01 8.9453007829274500e-01 + -1.2919950924946846e+00 3.9753191195033244e-01 9.8445330563622924e-01 + -1.5029087039799738e+00 3.3119751429432559e-01 1.0663789744490264e+00 + -1.7239946569177991e+00 2.4121828244671417e-01 1.1412660282987710e+00 + -1.9551209683075415e+00 1.2930477682879560e-01 1.2123363480905986e+00 + -2.1959384209552129e+00 -1.9361475167872788e-03 1.2846661871664136e+00 + -2.4445431423431989e+00 -1.4901432678822069e-01 1.3635937540503957e+00 + -2.6969405616963518e+00 -3.0757462362554699e-01 1.4523496374128921e+00 + -2.9472868253639839e+00 -4.7231971065927003e-01 1.5518482567147791e+00 + -3.1880988647846720e+00 -6.3703619083131935e-01 1.6628074632591776e+00 + -3.4122851796487081e+00 -7.9515328425658605e-01 1.7850724440488248e+00 + -3.6187165788128692e+00 -9.4072612965207048e-01 1.9124597871840856e+00 + -3.8345329803421477e+00 -1.0649421277780986e+00 2.0266179867550269e+00 + id 13330 + loc 3.1674215197563171e-01 2.4192942678928375e-01 403 + blend 0.0000000000000000e+00 + interp 3.9631949078492651e-01:2.7505513652371966e-01:4.6767972544446357e-01:3.2780384681156965e-01:1.2103988516193012e+00:3.9631552759001870e-01:1.9084574282847371e+00:3.3792241878004819e-01:2.2181472813691472e+00:2.6108573908108335e-01:2.9545921825259267e+00:3.2674312976760261e-01:3.8811834538954009e+00 + CVs 20 + -2.3989784533896819e-01 1.7225686532714771e-01 8.1652827649491097e-02 + -4.5611902265961185e-01 3.5089504623880413e-01 1.5140299393972606e-01 + -6.6761774303892474e-01 5.3392569051921157e-01 2.1322233571490903e-01 + -8.8633075599892530e-01 7.2087026155039879e-01 2.7070978418176150e-01 + -1.1184635554670113e+00 9.1382985992150290e-01 3.3168266412862535e-01 + -1.3686221225002708e+00 1.1180144793302749e+00 4.1531591376415850e-01 + -1.6337931696002963e+00 1.3371789090841442e+00 5.4997415017054796e-01 + -1.9025550088722911e+00 1.5662458985986467e+00 7.6422651987078261e-01 + -2.1555209475173815e+00 1.7882683325093693e+00 1.0796995321688261e+00 + -2.3665118426715619e+00 1.9788585154828287e+00 1.5030387571792947e+00 + -2.5101056848214887e+00 2.1148199251695905e+00 2.0194140864264956e+00 + -2.5763696869120047e+00 2.1819912813436728e+00 2.5930814611609980e+00 + -2.5807945337575142e+00 2.1782541138966085e+00 3.1897310559663143e+00 + -2.5438537897893139e+00 2.1000918010165175e+00 3.7944503492151718e+00 + -2.4827424214296103e+00 1.9577336874323485e+00 4.3789291501171403e+00 + -2.4425186896606665e+00 1.8467511953781113e+00 4.8658620631594527e+00 + -2.4720690051626009e+00 1.9128166323405500e+00 5.1670438757835848e+00 + -2.5338266946180643e+00 2.1023327771064642e+00 5.3202084033822619e+00 + -2.5572860079791520e+00 2.0814158318773166e+00 5.7262080792771295e+00 + id 13331 + loc 7.3521798849105835e-01 6.8066263198852539e-01 412 + blend 0.0000000000000000e+00 + interp 4.8087413282756997e-01:3.4927515811873838e-01:3.9750266112138888e-01:3.6230863491786619e-01:1.4330553673605890e+00:3.6557600199416335e-01:1.9832116326650522e+00:4.3098086119398199e-01:2.3068864071797486e+00:4.8086932408624172e-01:2.9948028562773574e+00:2.9961750209190302e-01:3.6752320081231664e+00 + CVs 20 + 6.9164140046411005e-01 1.7861360297497614e-01 -1.5569977017811426e-01 + 1.1318740381263486e+00 2.3789957404973677e-01 -2.7388766705914225e-01 + 1.4985136208506853e+00 2.4237109539471555e-01 -3.7750425201332405e-01 + 1.8740583992139364e+00 2.2722027477071477e-01 -4.7006801829940070e-01 + 2.2497067498053540e+00 1.9413471593447817e-01 -5.4789153176941485e-01 + 2.6163010394866113e+00 1.4693131120978586e-01 -6.0876737775622369e-01 + 2.9670172053351851e+00 9.1022896811335685e-02 -6.5046023439025835e-01 + 3.2971652547683892e+00 3.0134146429980579e-02 -6.7093257129772144e-01 + 3.6011450850118143e+00 -3.5830305887572189e-02 -6.7007774200981596e-01 + 3.8741757841703075e+00 -1.0349411884063398e-01 -6.5015037217681604e-01 + 4.1271966513706753e+00 -1.6011368491056932e-01 -6.0507751439692736e-01 + 4.4003482712684105e+00 -1.9243405515038225e-01 -5.1261526025303839e-01 + 4.7291919952813313e+00 -2.2563039285819508e-01 -3.6980207794929887e-01 + 5.0969938171902207e+00 -3.1329514634063593e-01 -2.1995711199427864e-01 + 5.4711267490022122e+00 -4.7563548886404439e-01 -9.6875810675209950e-02 + 5.8434926978974220e+00 -7.0971901356229772e-01 -3.3568587251675552e-05 + 6.2070461859541073e+00 -1.0117137031758079e+00 7.2301743366389642e-02 + 6.5303836766538783e+00 -1.3565974845134385e+00 1.0475335657841009e-01 + 6.6531971199243163e+00 -1.6327071757019593e+00 5.3557836986768137e-02 + id 13332 + loc 2.1276453137397766e-01 6.7320495843887329e-01 402 + blend 0.0000000000000000e+00 + interp 4.4817554264907833e-01:3.9828813804897073e-01:3.5317288189191554e-01:3.4775646542678917e-01:9.6206655360114723e-01:4.3604150446054862e-01:1.2283138377819978e+00:4.1522244388604335e-01:1.8429534910034073e+00:4.1181504132910463e-01:2.0850903312478040e+00:4.0846942492094757e-01:2.9352015125521111e+00:3.1541799321630326e-01:3.2955028908521520e+00:4.4817106089365188e-01:3.9463721891958641e+00 + CVs 20 + 4.6580232485335119e-02 3.5933508146143145e-01 -2.4062544218276344e-01 + 8.2565805743142345e-02 6.9685527519537382e-01 -4.8728125558642083e-01 + 1.4270811410433060e-01 1.0147711333928355e+00 -7.4961242755832791e-01 + 2.2919924534674774e-01 1.3113506820026828e+00 -1.0317079334286403e+00 + 3.2711314097887750e-01 1.5764228863983734e+00 -1.3304472272215067e+00 + 4.2409525550936777e-01 1.8003365283952784e+00 -1.6406415766885987e+00 + 5.1265723427141852e-01 1.9792727021925811e+00 -1.9554335658378865e+00 + 5.8846210955136402e-01 2.1129698469735310e+00 -2.2679316104226821e+00 + 6.4859777445569167e-01 2.2005606018000670e+00 -2.5643326588156166e+00 + 6.9318114836264644e-01 2.2441123091104251e+00 -2.8221844804857086e+00 + 7.2819625450902659e-01 2.2571103195625906e+00 -3.0269418490514406e+00 + 7.6408447233751442e-01 2.2584924297522893e+00 -3.1898264814089794e+00 + 8.1073622421142955e-01 2.2433911776917257e+00 -3.3530891893235597e+00 + 8.6928592435444640e-01 2.1549921298589649e+00 -3.5664879685758635e+00 + 9.1229931185421131e-01 1.9184710016487270e+00 -3.8440479517730504e+00 + 8.5286002080536438e-01 1.4903083262735703e+00 -4.1702461797317412e+00 + 5.4290140754706917e-01 9.1310766965767654e-01 -4.5269111579991543e+00 + -5.1509518818193323e-02 4.4268440100342077e-01 -4.8469025003980803e+00 + -4.1999236344885715e-01 3.5433530888832943e-01 -4.9189219520879419e+00 + id 13333 + loc 6.7395365238189697e-01 1.1468474566936493e-01 396 + blend 0.0000000000000000e+00 + interp 5.0947061880450772e-01:3.2136822477677851e-01:5.6108195007830308e-01:3.6073415096867317e-01:1.1768917820273321e+00:5.0946552409831969e-01:2.0024156046856536e+00:4.4399274644384695e-01:2.4195719133349400e+00:3.6443875528461350e-01:2.9169366657738522e+00:3.9457617855937588e-01:3.6750986506270142e+00 + CVs 20 + -6.0163457961522349e-01 1.3018745226201667e-01 3.6863510879024786e-01 + -1.0376513139565173e+00 1.4065876098436536e-01 6.7136608889055016e-01 + -1.4406485490546190e+00 1.0673010097116009e-01 9.5764708085279460e-01 + -1.8571565357442417e+00 5.9276106782823912e-02 1.2327609127034675e+00 + -2.2810919266179019e+00 1.9642894917807352e-03 1.4832199352467965e+00 + -2.7061609738290375e+00 -5.9421297483895685e-02 1.7024852794185432e+00 + -3.1252968514757931e+00 -1.1767357768683251e-01 1.8903369927118212e+00 + -3.5323657111835920e+00 -1.6730505288241870e-01 2.0493712682811580e+00 + -3.9292936563059859e+00 -2.0803192854694386e-01 2.1848655702668287e+00 + -4.3273214743707626e+00 -2.4821303385961624e-01 2.3086958330496730e+00 + -4.7299278123364044e+00 -3.0703226924113003e-01 2.4416395612452515e+00 + -5.1206782243557258e+00 -4.0322875520934387e-01 2.6010396856901608e+00 + -5.4764431613782314e+00 -5.4549101009965062e-01 2.7904705758559878e+00 + -5.7824315050131458e+00 -7.3808820034130873e-01 3.0031689713957981e+00 + -6.0272149585970869e+00 -9.7932063646248890e-01 3.2290663881969230e+00 + -6.1983004711151004e+00 -1.2525366445594113e+00 3.4594736179434591e+00 + -6.2870617102724857e+00 -1.5348921399147630e+00 3.6836915173580840e+00 + -6.2867039253271697e+00 -1.8133049939759642e+00 3.8801524473197624e+00 + -6.1369044954476504e+00 -2.1209676299918456e+00 3.9722991921106132e+00 + id 13334 + loc 5.0239545106887817e-01 6.3679271936416626e-01 373 + blend 0.0000000000000000e+00 + interp 4.7468800822642454e-01:4.5398721394022717e-01:1.0159984543216805e-01:4.2690201130620908e-01:7.8775034333396410e-01:4.6985318290444061e-01:1.0841203318225427e+00:4.1011254939020564e-01:1.8137711197967104e+00:2.6934603517157124e-01:2.0828502520711734e+00:4.2942902085954809e-01:2.7007151918399748e+00:4.7468326134634231e-01:3.0975051740931194e+00:4.0229803480543208e-01:3.8206645425306860e+00 + CVs 20 + -3.1611064899656371e-01 4.0406566148587325e-01 -7.6389335182235452e-02 + -5.8419444555150257e-01 7.8682855933513318e-01 -2.0541068446364813e-01 + -8.0117220640897213e-01 1.1439468437782414e+00 -3.7557988570792933e-01 + -9.6459203211303257e-01 1.4743670224497289e+00 -5.7568058389590193e-01 + -1.0733783947854190e+00 1.7693472266942760e+00 -7.9145236502463312e-01 + -1.1426617203306604e+00 2.0093465267634758e+00 -1.0023698436262625e+00 + -1.1958706232472802e+00 2.1803024877764217e+00 -1.1928762992202218e+00 + -1.2537033539683715e+00 2.2927356567741155e+00 -1.3688139710457239e+00 + -1.3322551972067991e+00 2.3644573054960536e+00 -1.5488114612163926e+00 + -1.4383708923945773e+00 2.4076304602256227e+00 -1.7393812338864341e+00 + -1.5646114457146645e+00 2.4403787622916173e+00 -1.9267960835045159e+00 + -1.6938534084906478e+00 2.4927355247874567e+00 -2.0929665246296421e+00 + -1.8110930103308009e+00 2.5624945755705495e+00 -2.2585359411510217e+00 + -1.8969938763886085e+00 2.5911637123828486e+00 -2.4376288509468602e+00 + -1.9292238460677096e+00 2.5714431670701479e+00 -2.5946620224957848e+00 + -1.8912428825771139e+00 2.5320484566902106e+00 -2.7169305574631020e+00 + -1.7801193084814289e+00 2.4698355891691510e+00 -2.8319448826633837e+00 + -1.6852340878813294e+00 2.4051293085454843e+00 -2.9692147717422119e+00 + -1.9347412220568250e+00 2.5776836624829871e+00 -3.0107381629159913e+00 + id 13335 + loc 4.7207684256136417e-03 7.9222694039344788e-02 375 + blend 0.0000000000000000e+00 + interp 5.4277654438181144e-01:5.4095034924089624e-01:4.0113953172800976e-02:3.9726569340317019e-01:7.7242106213323825e-01:1.1254761848718059e-01:1.9146263965946133e+00:3.6232340502594101e-01:2.2380408460123467e+00:4.8855778601102062e-01:2.7587679989341529e+00:5.2227990722898021e-01:3.2215623198407948e+00:5.4277111661636768e-01:3.7851880808464573e+00 + CVs 20 + -6.8973045382251463e-02 4.7123197917014903e-01 6.3570914317658311e-01 + -1.0011261715066205e-01 8.4842440574879763e-01 1.2089745123670852e+00 + -1.1482515286855394e-01 1.1458047836557825e+00 1.7886205271354811e+00 + -1.4654453083594521e-01 1.3983029166168908e+00 2.3271220222241866e+00 + -2.0904164790036370e-01 1.6288832432118763e+00 2.7326084616888466e+00 + -3.3059360661648030e-01 1.8707201220476317e+00 3.0189502546035123e+00 + -6.2004702539468282e-01 2.1367001322425443e+00 3.1328808937141672e+00 + -1.0220529449270377e+00 2.3489259128697690e+00 2.9710020954440246e+00 + -1.4327655912155250e+00 2.4532418368365163e+00 2.5533975167353917e+00 + -1.7838933714155882e+00 2.4078650456821711e+00 1.9487952262350179e+00 + -2.0196150582819770e+00 2.1886912559723140e+00 1.2866609385430228e+00 + -2.1119399635920377e+00 1.8315519829196918e+00 7.4109332813266537e-01 + -2.0525363849484117e+00 1.3727618339152081e+00 4.0319083491885743e-01 + -1.8199958798836291e+00 7.8852550901932283e-01 2.1497793674213406e-01 + -1.4755136049304571e+00 1.4240710853175412e-01 -1.8053575335300481e-01 + -1.2666690145569675e+00 -1.6366669006331297e-01 -1.0572592177143751e+00 + -1.3696562881313044e+00 4.9861714836519799e-02 -2.1656042620328302e+00 + -1.8459099178077230e+00 5.9528891718704346e-01 -3.1582167205581060e+00 + -2.6083125237576468e+00 1.1767243364268081e+00 -3.8392435206322406e+00 + id 13336 + loc 5.7404500246047974e-01 4.5993289351463318e-01 400 + blend 0.0000000000000000e+00 + interp 4.3943852679946183e-01:3.2488957965706500e-01:4.2793230132483706e-01:4.3943413241419388e-01:9.9849780213084716e-01:3.3432580049651556e-01:1.9624322102977456e+00:3.6464235649995697e-01:2.5218280783154876e+00:3.8683843184636746e-01:3.0450818314149899e+00:3.1028601985279086e-01:3.9496817091513581e+00 + CVs 20 + 1.7105737858625278e-01 1.6548219632510427e-01 1.6252200915598886e-01 + 3.2752655199017006e-01 3.3187845204228483e-01 3.6576251192389814e-01 + 4.6899554221000389e-01 4.8415457986448740e-01 6.0457262451146887e-01 + 5.9506633057229497e-01 6.1426083721323410e-01 8.7389076331919058e-01 + 7.0743638948655507e-01 7.2308863677362711e-01 1.1723341098833957e+00 + 8.1301825805855854e-01 8.1468794356923668e-01 1.4957830910897121e+00 + 9.2272256251751661e-01 8.9297892072699225e-01 1.8381787499216133e+00 + 1.0426108349006118e+00 9.5877943374926167e-01 2.1878678140962755e+00 + 1.1628312610858851e+00 1.0072324190311286e+00 2.5259544653933976e+00 + 1.2654212605110637e+00 1.0279546324322923e+00 2.8350889066216913e+00 + 1.3466582592325800e+00 1.0135105052996438e+00 3.1086054066197413e+00 + 1.4153543119084866e+00 9.6517106691338461e-01 3.3467704650020047e+00 + 1.4804156001886961e+00 8.9044313673418962e-01 3.5516282549732763e+00 + 1.5470683567810630e+00 7.9948444098371074e-01 3.7290019098432818e+00 + 1.6170860661515984e+00 7.0034159131181961e-01 3.8879688482379002e+00 + 1.6912749545822909e+00 5.9679296406063442e-01 4.0379075331988652e+00 + 1.7695373883020193e+00 4.8870841392908626e-01 4.1900706688771052e+00 + 1.8445495944007113e+00 3.6575704683362931e-01 4.3621027254645082e+00 + 1.8994179875661510e+00 1.9881732973203570e-01 4.5744599435490567e+00 + id 13337 + loc 2.5218394398689270e-01 8.7739330530166626e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8143540455034906e-01:3.7340711299119778e-01:5.7171477504029289e-01:4.8143059019630358e-01:1.0033075852651241e+00:4.2147191115523802e-01:1.8551468407141229e+00:3.8854172933303899e-01:2.1010112377409618e+00:3.3483587362593703e-01:2.3215662001538409e+00:3.0250366898796271e-01:3.0004872018730020e+00:4.6571009656047030e-01:3.9872006886175511e+00 + CVs 20 + 3.7375449663368587e-01 1.9740605220836260e-01 -2.5506277227024199e-01 + 7.2792310613857947e-01 4.0894207535332083e-01 -5.3485278029022998e-01 + 1.0532166970856807e+00 6.2509645070175357e-01 -8.4086457246659430e-01 + 1.3239802923261297e+00 8.3965448466223302e-01 -1.1793662848498991e+00 + 1.5115319561238278e+00 1.0312626362623343e+00 -1.5465019583736719e+00 + 1.6009082927976626e+00 1.1620039733340786e+00 -1.9196750415150758e+00 + 1.6071464629574379e+00 1.1972535714834733e+00 -2.2568586027349937e+00 + 1.5720583968997162e+00 1.1320371696273948e+00 -2.5120101945427682e+00 + 1.5313935087990289e+00 1.0041420155242329e+00 -2.6640781775955151e+00 + 1.4974873156560704e+00 8.7015168236792628e-01 -2.7338684673146338e+00 + 1.4712745366547801e+00 7.6714127222888073e-01 -2.7720120804261237e+00 + 1.4472192198394898e+00 6.9796152330202710e-01 -2.8366514289054359e+00 + 1.4171525310651736e+00 6.4320520198278908e-01 -2.9595857082977308e+00 + 1.3813979776677343e+00 5.8693460751406157e-01 -3.1427141206279319e+00 + 1.3507565222818614e+00 5.2882406976211449e-01 -3.3712640601826185e+00 + 1.3376810659513783e+00 4.8198291197098303e-01 -3.6183769420699683e+00 + 1.3517831684242250e+00 4.4146740502533022e-01 -3.8703139317978548e+00 + 1.4415100920933392e+00 3.8583825900446056e-01 -4.1455764294489486e+00 + 1.6260923763647126e+00 3.6219460130682968e-01 -4.4326224133292209e+00 + id 13338 + loc 8.6048737168312073e-02 2.5520077347755432e-01 377 + blend 0.0000000000000000e+00 + interp 2.9475799939130842e-01:2.3496305487449234e-01:7.5809426174184802e-01:2.2682021719503498e-01:1.9589315311913480e+00:2.9475505181131451e-01:2.7195243234640980e+00:2.4581854786336949e-01:3.3388455431625603e+00 + CVs 20 + -4.7658497836612079e-01 4.0500595773810294e-01 7.7147538626129419e-01 + -7.2362842620783951e-01 6.5500001911989025e-01 1.3723768151571802e+00 + -8.2481389112526970e-01 8.1417710145312872e-01 1.9599558901036263e+00 + -8.3484426040726845e-01 9.3372932573439638e-01 2.5980787186297816e+00 + -7.9887499579261856e-01 1.0352841222611251e+00 3.2831562421685456e+00 + -7.7986892665955754e-01 1.1188689839758390e+00 4.0120396780732950e+00 + -8.3843433633052933e-01 1.1523600654941339e+00 4.7738604386295282e+00 + -1.0162691692340398e+00 1.0921156572162498e+00 5.5309089079844131e+00 + -1.3208536158130255e+00 9.1460028939628790e-01 6.2224054148450483e+00 + -1.7222913190387874e+00 6.2887675366109796e-01 6.7967895117728965e+00 + -2.1673566923418517e+00 2.6292299198692115e-01 7.2437077136694716e+00 + -2.6110430609537278e+00 -1.6508329790649157e-01 7.5803588557995631e+00 + -3.0175657112534267e+00 -6.5263735078167873e-01 7.8300780012365623e+00 + -3.3554958253975169e+00 -1.1996721211130148e+00 8.0116762061136892e+00 + -3.6092043894096095e+00 -1.7874520297126364e+00 8.1468475703896370e+00 + -3.7903409478401726e+00 -2.3744254401550760e+00 8.2660829013338244e+00 + -3.9213459072917449e+00 -2.9129682035275293e+00 8.3930810334123880e+00 + -4.0124636771722946e+00 -3.3797583027062696e+00 8.5440706648830211e+00 + -4.0499553411674745e+00 -3.8221582967241186e+00 8.7804774552760048e+00 + id 13339 + loc 5.3773885965347290e-01 6.7602592706680298e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4120718341655681e-01:2.9130048850711404e-01:7.7781618391024654e-01:2.7699969308559097e-01:1.2827601206199370e+00:2.8411013083469944e-01:2.0000507764155415e+00:3.4120377134472268e-01:3.0000512038841074e+00:2.7870483471088225e-01:3.8307127755870143e+00 + CVs 20 + 1.4779593556037035e-01 3.4794953337909168e-01 -2.6601818717812581e-01 + 3.1287313977342812e-01 6.9526177409263257e-01 -5.4992659054505277e-01 + 4.9010265435817124e-01 1.0315672297430161e+00 -8.4189789687587402e-01 + 6.7547105629369797e-01 1.3429283371517433e+00 -1.1364933208480619e+00 + 8.6629782473170303e-01 1.6106004402259870e+00 -1.4287046910822931e+00 + 1.0605927211026358e+00 1.8116557164777112e+00 -1.7080197380514508e+00 + 1.2566372001581545e+00 1.9368576624600158e+00 -1.9593128719379425e+00 + 1.4507728677073048e+00 1.9964095061813669e+00 -2.1669096103327354e+00 + 1.6383930417760613e+00 2.0137418026284704e+00 -2.3266415523298716e+00 + 1.8240157823113461e+00 2.0143265261415273e+00 -2.4592375447604136e+00 + 2.0225598952312178e+00 2.0085127286788733e+00 -2.5969227488538724e+00 + 2.2433318085925351e+00 1.9938235441485694e+00 -2.7585588934060237e+00 + 2.4896218951082481e+00 1.9737063620965494e+00 -2.9499883741324933e+00 + 2.7784363580122520e+00 1.9516145684804775e+00 -3.1863756364640863e+00 + 3.1233288451411405e+00 1.9081701178191826e+00 -3.4970604284091609e+00 + 3.4916022805944014e+00 1.8168170768433964e+00 -3.9002120415871544e+00 + 3.8121483231689770e+00 1.7005060392005393e+00 -4.3827243080255860e+00 + 4.0167856178291963e+00 1.6590131501235785e+00 -4.8985848880741480e+00 + 4.0450101398280784e+00 1.8355866390164886e+00 -5.3476656549786226e+00 + id 13340 + loc 4.4374238699674606e-02 6.8104773759841919e-01 380 + blend 0.0000000000000000e+00 + interp 5.0221201304156282e-01:3.2819049839702719e-01:4.5182350429389229e-02:4.5410574057498038e-01:4.5951962337321994e-01:3.9156574771525704e-01:1.1267253957141019e+00:2.8390425551407278e-01:2.0984678846032137e+00:3.4314204144261135e-01:2.9277026189615252e+00:5.0220699092143239e-01:3.3058814578596714e+00 + CVs 20 + -3.9138580606384588e-01 3.3052400316337005e-01 -4.2324188043894095e-01 + -7.5290326865410417e-01 6.1304434820620768e-01 -7.8786588740439556e-01 + -1.1040794491385737e+00 8.7198354577433701e-01 -1.1483360105020763e+00 + -1.4467977428163135e+00 1.1213984806553126e+00 -1.5323940232212134e+00 + -1.7644457669677733e+00 1.3478414882924590e+00 -1.9384397837536982e+00 + -2.0531922772355773e+00 1.5296782878620536e+00 -2.3604834466373319e+00 + -2.3138615765566146e+00 1.6468980525647006e+00 -2.7850607362566322e+00 + -2.5458980765012629e+00 1.6904507032878615e+00 -3.1916946501164603e+00 + -2.7556016007129371e+00 1.6647065304458066e+00 -3.5623063566670639e+00 + -2.9548956937270763e+00 1.5813007511481358e+00 -3.8884159486332601e+00 + -3.1482309171521425e+00 1.4549397136782791e+00 -4.1656822129231008e+00 + -3.3335051077224844e+00 1.3048979857111735e+00 -4.3921511342973494e+00 + -3.5124903268546488e+00 1.1442483719555816e+00 -4.5763022763302939e+00 + -3.6840062678630323e+00 9.5715336839162024e-01 -4.7248303208829689e+00 + -3.8350555190282831e+00 7.0775481902114246e-01 -4.8214685085494322e+00 + -3.9559118013422441e+00 3.7810760938271404e-01 -4.8732801718737946e+00 + -4.0450760122140155e+00 -1.9488024355790223e-02 -4.9401663885254798e+00 + -4.1288320334076571e+00 -4.4030161531968082e-01 -5.0663372865625824e+00 + -4.3535563013320591e+00 -7.4331736787312774e-01 -5.1738217440037078e+00 + id 13341 + loc 7.5715494155883789e-01 7.8502881526947021e-01 409 + blend 0.0000000000000000e+00 + interp 5.1944233902660664e-01:3.0222522274258823e-01:3.7292593734113144e-01:3.4674824039456598e-01:1.0140044351428890e+00:3.3331281634371174e-01:1.7773166629006538e+00:4.3064141149950375e-01:2.2308032795183310e+00:3.0945562129881138e-01:3.0269813857741394e+00:4.9750233427985407e-01:3.5420882031290732e+00:5.1943714460321644e-01:3.9692140962877240e+00 + CVs 20 + 5.3280933002654218e-01 6.8974833472306485e-02 -2.5224343468077692e-01 + 1.0108908259020433e+00 8.9763508400903858e-02 -4.9360420906488300e-01 + 1.4973227792807788e+00 1.0269647089738709e-01 -7.0720535037278176e-01 + 2.0057967091181474e+00 1.1584911955249222e-01 -8.8656337613100267e-01 + 2.5228871225040708e+00 1.2293490618945824e-01 -1.0285630751856341e+00 + 3.0355675832406277e+00 1.1889645884648425e-01 -1.1331227957601051e+00 + 3.5306084061448919e+00 9.4580135877347926e-02 -1.2003316487724558e+00 + 3.9939069175563713e+00 3.4821834292716680e-02 -1.2303687249561142e+00 + 4.4115739513861207e+00 -7.2984033492319966e-02 -1.2304096118707846e+00 + 4.7703988931321799e+00 -2.3390150738766913e-01 -1.2175583731110473e+00 + 5.0590766234139846e+00 -4.4583065094000984e-01 -1.2069304483884324e+00 + 5.2778427275349769e+00 -6.9395704144015236e-01 -1.2000102504167924e+00 + 5.4427047574913772e+00 -9.5708438991469036e-01 -1.1925856971561921e+00 + 5.5697268641016811e+00 -1.2234845728520822e+00 -1.1867922252673413e+00 + 5.6647473656585872e+00 -1.4904421455007775e+00 -1.1875037232978141e+00 + 5.7249922982011476e+00 -1.7556895545835784e+00 -1.1923924898103233e+00 + 5.7480141364499726e+00 -2.0124198646793134e+00 -1.1936875613409987e+00 + 5.7422174952809595e+00 -2.2548869488295100e+00 -1.1948059901812194e+00 + 5.8028537595473235e+00 -2.4993843270638667e+00 -1.2317208474148078e+00 + id 13342 + loc 4.8438122868537903e-01 4.3766614794731140e-01 395 + blend 0.0000000000000000e+00 + interp 4.7805612371188005e-01:2.9612430879244384e-01:1.7917553459093216e-01:4.2339056561628491e-01:1.1890784242431789e+00:2.9139404229455707e-01:1.9608822160478889e+00:4.7805134315064296e-01:2.2759839254968344e+00:3.4601622029019902e-01:3.0004584421298253e+00:3.8454726322305166e-01:3.4499735110565091e+00 + CVs 20 + -3.2427391595786542e-01 2.0106985900473764e-01 -4.5575291922462768e-01 + -5.9229906533998533e-01 3.5125873608674385e-01 -8.6959363277985258e-01 + -8.4488812704929561e-01 4.7199199888047760e-01 -1.2709662951994780e+00 + -1.0947406109862070e+00 5.6400032877788786e-01 -1.6693605163040073e+00 + -1.3370145389552395e+00 6.1675693538264387e-01 -2.0560551736291370e+00 + -1.5705722168468945e+00 6.2419083629046446e-01 -2.4205036211395075e+00 + -1.7929686687171820e+00 5.8373920959741832e-01 -2.7507708054423659e+00 + -1.9958276598415550e+00 4.9585287169101333e-01 -3.0330748415052620e+00 + -2.1712784897067579e+00 3.6821976291299618e-01 -3.2553838136864655e+00 + -2.3178427637799022e+00 2.1785478306418926e-01 -3.4129947083461478e+00 + -2.4362057043422101e+00 6.7875237424204649e-02 -3.5098172434447590e+00 + -2.5310333932544919e+00 -6.0526981085464726e-02 -3.5564897928821857e+00 + -2.6167193977421936e+00 -1.5683652865523401e-01 -3.5668218102069043e+00 + -2.7114209428166074e+00 -2.2189624795794760e-01 -3.5558911156054713e+00 + -2.8284198073565388e+00 -2.6236632543201610e-01 -3.5361454212499415e+00 + -2.9776076632193718e+00 -2.8136740372999158e-01 -3.5092986876143009e+00 + -3.1704447998491707e+00 -2.8228260532387806e-01 -3.4717872554645650e+00 + -3.4098563701297397e+00 -2.9418735488789505e-01 -3.4190093873600951e+00 + -3.6309357465721295e+00 -4.8723736728673339e-01 -3.2861503041789639e+00 + id 13343 + loc 3.5312560200691223e-01 3.4826534986495972e-01 382 + blend 0.0000000000000000e+00 + interp 4.8172123098429454e-01:4.8171641377198471e-01:3.5059840293599476e-01:4.1671815416924557e-01:9.9896042585410350e-01:3.1048795290901221e-01:1.7547994651888152e+00:3.1274341846968884e-01:2.2158642266483692e+00:4.5520306445186881e-01:2.7740030171595995e+00:4.1383530009917902e-01:3.3821169720266724e+00:3.2844810848587602e-01:3.9967847986899407e+00 + CVs 20 + -5.5568181953788520e-01 1.1458730519761229e-01 -7.5648355167662040e-01 + -9.3816987545036834e-01 8.4626702138618837e-02 -1.2656102043971218e+00 + -1.2764593422494386e+00 -3.3841883096852321e-03 -1.7084579542182836e+00 + -1.6171133862300224e+00 -1.0955688491907400e-01 -2.1525707633664051e+00 + -1.9641215774005456e+00 -2.2360243958260140e-01 -2.5901805232060910e+00 + -2.3255631062511171e+00 -3.3670529295660856e-01 -3.0146048460250658e+00 + -2.7085424328185841e+00 -4.4262465779161642e-01 -3.4165455036986980e+00 + -3.1136675616726626e+00 -5.4213652810629287e-01 -3.7862330398529274e+00 + -3.5342773308188615e+00 -6.4888815346018580e-01 -4.1215746919543435e+00 + -3.9610867788548139e+00 -7.8353742738059950e-01 -4.4236720261753568e+00 + -4.3876652746025826e+00 -9.6178654788340046e-01 -4.6845409981348931e+00 + -4.8075853657117120e+00 -1.1917352577330222e+00 -4.8898682184503306e+00 + -5.2111154165348603e+00 -1.4735170725858013e+00 -5.0313003157206682e+00 + -5.5846027573408605e+00 -1.8014222740088406e+00 -5.1099243260654967e+00 + -5.9158854982632896e+00 -2.1640380380040884e+00 -5.1303458392941703e+00 + -6.1992956535229311e+00 -2.5456462792603674e+00 -5.0971894304948249e+00 + -6.4317152487716029e+00 -2.9315091451579196e+00 -5.0152384843059652e+00 + -6.6082288300625951e+00 -3.3153151166613686e+00 -4.8881782527567355e+00 + -6.7151857977025395e+00 -3.7469169071223845e+00 -4.6966695074434206e+00 + id 13344 + loc 4.2238026857376099e-01 6.9381093978881836e-01 393 + blend 0.0000000000000000e+00 + interp 3.8020363129852131e-01:3.3988063180477868e-01:1.5500721532646256e-02:3.3534054833506510e-01:9.5737110259570102e-01:2.6587887007852995e-01:1.6679309371103559e+00:2.7083474590090778e-01:2.3321122982452893e+00:3.8019982926220836e-01:3.0925650366789972e+00 + CVs 20 + -3.2242296528154168e-01 3.3465465593890248e-01 -1.7327112918886689e-01 + -6.2207429614960619e-01 6.8070201323478363e-01 -3.1385633288703074e-01 + -9.0589825877320718e-01 1.0498308934338669e+00 -4.3694309402608522e-01 + -1.1879170805364943e+00 1.4373160986382549e+00 -5.5154909175663036e-01 + -1.4885907645101477e+00 1.8269889239114196e+00 -6.6109623975363419e-01 + -1.8247068924604550e+00 2.2004974511400528e+00 -7.6429377868628756e-01 + -2.2088951907889798e+00 2.5397375653126852e+00 -8.5730133157340560e-01 + -2.6576088718122040e+00 2.8197233158047421e+00 -9.3982703206688689e-01 + -3.1906977171624993e+00 3.0078153292130141e+00 -1.0210322204533571e+00 + -3.8143715537624692e+00 3.0812745842987757e+00 -1.1264789162462141e+00 + -4.4965999999293720e+00 3.0342642355853737e+00 -1.2848545233069941e+00 + -5.1778105331373450e+00 2.8613621718679947e+00 -1.4909786586905815e+00 + -5.8147012485858927e+00 2.5507660969583537e+00 -1.7133977271902820e+00 + -6.3802181817062866e+00 2.1015446569196521e+00 -1.9308985025695782e+00 + -6.8329077400172267e+00 1.5585278019431592e+00 -2.0988818315206017e+00 + -7.1450709355419511e+00 1.0502414248666259e+00 -2.1051824264358499e+00 + -7.3240159085693977e+00 7.0792780297480085e-01 -1.8885858222263137e+00 + -7.4151370544760544e+00 4.8714088295007718e-01 -1.5764753435384193e+00 + -7.6073390740078715e+00 8.5442726171207628e-02 -1.3642905014217994e+00 + id 13345 + loc 4.3638709187507629e-01 9.3468880653381348e-01 399 + blend 0.0000000000000000e+00 + interp 3.5368423758258827e-01:3.0089641208631185e-01:3.0637712276270135e-01:2.9005516735303788e-01:1.0419681017697260e+00:3.2387257923874019e-01:2.1112623755783471e+00:3.3522771901601650e-01:3.0360073601389477e+00:3.5368070074021246e-01:3.9152106435500418e+00 + CVs 20 + -1.5184343100641490e-01 3.1685980663662489e-01 -1.9976471869565138e-01 + -2.9010997733906912e-01 6.3654377121233052e-01 -4.1210220544283432e-01 + -4.2443848245288052e-01 9.5215125444627136e-01 -6.2580851392118442e-01 + -5.6416218236668181e-01 1.2579811369229696e+00 -8.4098736885845837e-01 + -7.1976109088680129e-01 1.5492477078473665e+00 -1.0670384423946957e+00 + -9.0399459766371726e-01 1.8178785531193336e+00 -1.3131696994983613e+00 + -1.1267917797070801e+00 2.0486239049800390e+00 -1.5832622902755524e+00 + -1.3863195066580454e+00 2.2258295485711641e+00 -1.8693697591656921e+00 + -1.6805336969193672e+00 2.3508321869520437e+00 -2.1612983574201929e+00 + -2.0229551642537968e+00 2.4282759013236221e+00 -2.4649981690029708e+00 + -2.4017438152438877e+00 2.4344979165675604e+00 -2.7832127013425532e+00 + -2.7424084448752599e+00 2.3623296673424998e+00 -3.0809300849744909e+00 + -3.0008529222046949e+00 2.2545643564559850e+00 -3.3320653015991177e+00 + -3.2318842534251102e+00 2.1341419906327750e+00 -3.5625974776375786e+00 + -3.4973745156455460e+00 1.9966646826168484e+00 -3.7896177776561779e+00 + -3.6931905747010094e+00 1.8572937999621992e+00 -3.9586848565454487e+00 + -3.5421342059936056e+00 1.7143374850774276e+00 -4.0003451978438518e+00 + -3.1168071955617349e+00 1.3890025926999703e+00 -3.9624967578883870e+00 + -3.3834886452667519e+00 1.4416174249787117e+00 -3.9967136105488068e+00 + id 13346 + loc 7.9093801975250244e-01 2.8604692220687866e-01 374 + blend 0.0000000000000000e+00 + interp 3.9323968388609953e-01:3.8897867826748600e-01:8.1655877372039876e-01:3.0050757177156423e-01:1.1765898932214824e+00:3.9323575148926071e-01:2.0614625742823804e+00:2.6839812862748191e-01:2.7048161554931545e+00:3.8624331682987639e-01:3.2174632862545440e+00:3.7236992531322843e-01:3.9897047899793447e+00 + CVs 20 + 7.1450499838210102e-01 4.0810682666318726e-01 4.1168516982717862e-01 + 1.2660915680988136e+00 6.6952402811937017e-01 6.6913926795118051e-01 + 1.8229215315975140e+00 8.3982414916609760e-01 8.2126885768417501e-01 + 2.4381808897314583e+00 9.5908232803078020e-01 8.9325991828987705e-01 + 3.0962531098801938e+00 1.0548290426768088e+00 9.0588317730807177e-01 + 3.7925875745920035e+00 1.1396854164348147e+00 8.9928939790203000e-01 + 4.5286321259339779e+00 1.1888780744275480e+00 9.1988232353586619e-01 + 5.2943197844858485e+00 1.1620952722457374e+00 1.0011294032418490e+00 + 6.0589640337069648e+00 1.0302294774016720e+00 1.1602231265099519e+00 + 6.7759498394962092e+00 7.8604903845038088e-01 1.3952129295148217e+00 + 7.3988089184799666e+00 4.4213383829726993e-01 1.6856015831236029e+00 + 7.8974781767305551e+00 1.8116900753789800e-02 2.0066142142383021e+00 + 8.2566097599734256e+00 -4.6806284687738042e-01 2.3379718871258581e+00 + 8.4699777161166985e+00 -9.8996130920928715e-01 2.6635817148604977e+00 + 8.5537861554591821e+00 -1.5223747167075903e+00 2.9851829529081715e+00 + 8.5481984341026411e+00 -2.0486576016034688e+00 3.3159906559776613e+00 + 8.5127052767557814e+00 -2.5756473913224966e+00 3.6575945178072824e+00 + 8.5148870912765542e+00 -3.1352927754524051e+00 3.9739381231483817e+00 + 8.5961362027132928e+00 -3.7157513461866420e+00 4.2110687684706676e+00 + id 13347 + loc 9.0153431892395020e-01 1.4203469455242157e-01 401 + blend 0.0000000000000000e+00 + interp 4.0664745513040229e-01:3.0256750397652271e-01:9.6661396695940649e-02:3.1025541964931880e-01:9.9988325503095021e-01:3.2447208228933833e-01:1.8483502067205058e+00:3.4651196409620999e-01:2.3321410583347393e+00:4.0664338865585098e-01:3.1196820260641145e+00 + CVs 20 + 3.3611847914143504e-02 3.0728875218439905e-01 2.4181747660344766e-01 + 6.4396026027964182e-02 6.0945419449753369e-01 4.7670718504574205e-01 + 7.7132395018757946e-02 9.0361664490721416e-01 7.3569162643313279e-01 + 7.5900364374935386e-02 1.1819380879594501e+00 1.0435962641698788e+00 + 7.9630146796041135e-02 1.4215614651172759e+00 1.4121615063186521e+00 + 1.0816487310966846e-01 1.5926839519245846e+00 1.8414203383980616e+00 + 1.7892242901145533e-01 1.6673507488573249e+00 2.3179722605051660e+00 + 3.0252869582728359e-01 1.6304226489544502e+00 2.8134726621618054e+00 + 4.7043402022883729e-01 1.4853871209830962e+00 3.2813617046705170e+00 + 6.4949505955049225e-01 1.2441965655381075e+00 3.6695999325333992e+00 + 8.1415967238456266e-01 9.1854986714746167e-01 3.9582916460404212e+00 + 9.8389323731499856e-01 5.1214707305124219e-01 4.1764804319195674e+00 + 1.1911936396144391e+00 4.2206397346121971e-02 4.3477024810992653e+00 + 1.4252987655956832e+00 -4.3168324787677009e-01 4.4539841209019544e+00 + 1.6575537409594661e+00 -8.6845403823690692e-01 4.4897342214444658e+00 + 1.9697675933037702e+00 -1.3353603010666268e+00 4.5180898560632770e+00 + 2.5821030060240573e+00 -1.8833892916907220e+00 4.6229905698894207e+00 + 3.4142188559258493e+00 -2.2358494684269017e+00 4.7739712219386261e+00 + 3.6853628949422741e+00 -2.3212366083456795e+00 4.7446862647499382e+00 + id 13348 + loc 7.8348517417907715e-01 2.2407102584838867e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4499922007660275e-01:3.3903891099275563e-01:4.2603179576590389e-01:2.8263696667596677e-01:1.6175005196559256e+00:4.4499477008440202e-01:2.1724373033063511e+00:3.3408652757114371e-01:2.7719341845900054e+00:2.8469782204167599e-01:3.1881713085927963e+00:3.5386875266242995e-01:3.9779770619401269e+00 + CVs 20 + -1.9788759151452545e-01 2.2961885849144592e-01 1.1368442728689546e-01 + -3.9069001804096948e-01 4.5993736179649702e-01 2.2916043274762565e-01 + -5.9444163451390752e-01 6.7365101612757317e-01 3.5823388264271216e-01 + -8.1463873851221702e-01 8.5986028961591632e-01 5.0691244585381989e-01 + -1.0444397124418758e+00 1.0101253271090778e+00 6.7282052488345223e-01 + -1.2720650672908544e+00 1.1145097392725791e+00 8.5058266224905033e-01 + -1.4857978279367261e+00 1.1658344147421886e+00 1.0360132608813639e+00 + -1.6757898812078162e+00 1.1632509058742797e+00 1.2249041117434942e+00 + -1.8319451295548901e+00 1.1117993516625757e+00 1.4092027937604032e+00 + -1.9475369559786069e+00 1.0211679607315867e+00 1.5801741039735504e+00 + -2.0231176258277905e+00 9.0233767933833353e-01 1.7347947190981721e+00 + -2.0649497792891194e+00 7.6298250495042597e-01 1.8777478366099420e+00 + -2.0803768718288387e+00 6.0681310884482043e-01 2.0167339215947342e+00 + -2.0730983133867955e+00 4.4028799536185481e-01 2.1538973888699009e+00 + -2.0381540602429151e+00 2.9255612328288927e-01 2.2724334508925379e+00 + -1.9569895910132256e+00 2.5483787631467303e-01 2.3351973933128578e+00 + -1.8216467475668598e+00 4.5855811695556181e-01 2.3936380358856142e+00 + -1.7185930455825911e+00 6.5494068756042345e-01 2.5547603102137533e+00 + -1.6807896046249802e+00 3.8515130134151832e-01 2.4332101832267150e+00 + id 13349 + loc 2.5379613041877747e-01 4.2119112610816956e-01 376 + blend 0.0000000000000000e+00 + interp 4.7457875938002647e-01:3.3896051220217854e-01:1.1605022640091656e-01:2.9137425946023576e-01:1.0247437967250412e+00:4.7457401359243268e-01:1.6207571841292632e+00:3.8001603425548902e-01:2.0322082502438397e+00:4.5620710406154641e-01:2.7941336958829903e+00:3.9027273635111209e-01:3.2813577371763811e+00 + CVs 20 + 7.3282594005727542e-01 4.0763820226991487e-01 1.3287772111853857e-01 + 1.3135488669382616e+00 6.2603053044049894e-01 1.1971233649334562e-01 + 1.8536214067463461e+00 7.0631925639466919e-01 5.3850572118300244e-03 + 2.4159268155156055e+00 7.4866625511713925e-01 -1.5578781517241391e-01 + 2.9926151446510425e+00 8.2741174451217914e-01 -2.9984753003067854e-01 + 3.5669312572008001e+00 9.6463869097999455e-01 -3.6564684911382128e-01 + 4.1146717483640423e+00 1.1555873022412571e+00 -3.1462729978837645e-01 + 4.6002634633097426e+00 1.3929278746048790e+00 -1.3945248782007047e-01 + 4.9997740974666263e+00 1.6684441861148589e+00 1.4595257588477462e-01 + 5.3239401928685304e+00 1.9716608481839941e+00 5.3824826181478880e-01 + 5.6105478091752889e+00 2.2733736198994183e+00 1.0512598601712653e+00 + 5.8939405026401399e+00 2.5087070079833040e+00 1.6960729049174943e+00 + 6.1631140734836523e+00 2.5796397340265416e+00 2.4484655789954002e+00 + 6.3589997912764487e+00 2.4127088769101670e+00 3.2197302798200944e+00 + 6.4197571250386796e+00 1.9932959182601167e+00 3.9287189903747564e+00 + 6.3019414815939294e+00 1.2700920055226663e+00 4.5395998777027584e+00 + 6.1104266807104723e+00 1.9093389448222275e-01 4.8931150269525432e+00 + 6.0772696490284215e+00 -9.0403312333922381e-01 4.7719707354530865e+00 + 6.1058738130368049e+00 -1.5342588554274905e+00 4.4348687469458641e+00 + id 13350 + loc 3.7014406919479370e-01 1.6963320970535278e-01 402 + blend 0.0000000000000000e+00 + interp 3.9405097916922277e-01:2.8431335305004102e-01:4.3280139815300600e-01:2.7364409294488334e-01:1.2494837551404223e+00:2.8412556365050151e-01:2.1989116240350932e+00:3.9404703865943108e-01:2.9205133625176973e+00:3.3249861191286550e-01:3.7482752653454465e+00 + CVs 20 + -1.9418491611705446e-01 3.3945266384356171e-01 2.5083908740445360e-01 + -4.0209298084911199e-01 6.5785645557181682e-01 4.4930471182545290e-01 + -6.4338156895703191e-01 9.5273759891727028e-01 5.8647333064375406e-01 + -9.1777553324956140e-01 1.2210106817483546e+00 6.6557591509413072e-01 + -1.2105183008558567e+00 1.4601137052225939e+00 7.0034721708601388e-01 + -1.5074476814545155e+00 1.6722195180538582e+00 7.0347025738619062e-01 + -1.8043511975909179e+00 1.8671902346026963e+00 6.8195128267933769e-01 + -2.1105580050165562e+00 2.0571076360614531e+00 6.4521130451405839e-01 + -2.4331269559539592e+00 2.2462947929392829e+00 6.1088621605286497e-01 + -2.7696003068804815e+00 2.4340324543597101e+00 5.9652360266436211e-01 + -3.1374182628400287e+00 2.6169926238969925e+00 6.0658587628241767e-01 + -3.5815657740308353e+00 2.7693941259851882e+00 6.3643553669059327e-01 + -4.1264441230493816e+00 2.8223029779839033e+00 6.8941200430078720e-01 + -4.7320503508014156e+00 2.6981022232832310e+00 7.8162706998701403e-01 + -5.3098922823024406e+00 2.3808253683164109e+00 9.3824748589693074e-01 + -5.7712972078234746e+00 1.9324956987627968e+00 1.1791843254398406e+00 + -6.0811176862754941e+00 1.4633484994147499e+00 1.5068573870071085e+00 + -6.2564859653431846e+00 1.1306163785398522e+00 1.9113865546945443e+00 + -6.2856201133471066e+00 1.1393836533251576e+00 2.3268752681262965e+00 + id 13351 + loc 4.0479654073715210e-01 1.5876938402652740e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9475045629745725e-01:2.6962988382269693e-01:6.4140148808176756e-01:3.9474650879289430e-01:1.0749114733093703e+00:2.9451304506205600e-01:2.1102273029193297e+00:2.9144987942037576e-01:3.0696202487513231e+00:3.0033570371229923e-01:3.8526540660216932e+00 + CVs 20 + 4.2978118006879318e-01 4.6269547043404780e-01 -1.3208953323749918e-02 + 6.6007818149134923e-01 7.8988293224942763e-01 -3.7597427459812482e-02 + 8.4076193525671239e-01 1.0791634174120985e+00 -8.2818300552117557e-02 + 1.0456772210960945e+00 1.3610496452265672e+00 -1.4713754988832115e-01 + 1.2669839299005701e+00 1.6286205900563437e+00 -2.3039450618898918e-01 + 1.4943860306585219e+00 1.8763321137637206e+00 -3.2958794373684575e-01 + 1.7156467269498197e+00 2.1033548903858255e+00 -4.4118714126885356e-01 + 1.9223770592907792e+00 2.3154170033299093e+00 -5.6654752369166927e-01 + 2.1136641749546934e+00 2.5215350681326649e+00 -7.2090725782124165e-01 + 2.2801313904550997e+00 2.7125102671725796e+00 -9.3899201872187876e-01 + 2.3858196284718929e+00 2.8350409677506176e+00 -1.2285321622261713e+00 + 2.4104374678565681e+00 2.8473583151510624e+00 -1.5339986897079114e+00 + 2.3687434594739138e+00 2.7595397912447726e+00 -1.8111160478910784e+00 + 2.2780044655069518e+00 2.5952448784047704e+00 -2.0515665813548067e+00 + 2.1464740689111035e+00 2.3749963334865578e+00 -2.2596765328489830e+00 + 1.9784518114067073e+00 2.1175915526658393e+00 -2.4436210305467867e+00 + 1.7999680151535640e+00 1.8249046420009432e+00 -2.6134038305042888e+00 + 1.6959413964998888e+00 1.4696502522256152e+00 -2.7730248762911951e+00 + 1.7673029696684686e+00 1.0529534208618321e+00 -2.9026378432692859e+00 + id 13352 + loc 9.5359903573989868e-01 9.9162411689758301e-01 403 + blend 0.0000000000000000e+00 + interp 3.9966511930013793e-01:3.0918259387338815e-01:8.8061054291336627e-01:3.9966112264894493e-01:1.2205903907937852e+00:3.0486281222009831e-01:1.8996007512972191e+00:3.4912112029382825e-01:2.2159795818544472e+00:2.1555083234600728e-01:2.9512099113512189e+00:3.3041914343724121e-01:3.9935712638359799e+00 + CVs 20 + -5.4595810038221511e-02 -7.0334680544559824e-02 1.1734517520890550e-01 + -8.7104065201530190e-02 -1.3645113478184973e-01 2.4375566712048968e-01 + -1.1747739583572239e-01 -1.8180172393639060e-01 3.7924980338482495e-01 + -1.3729381013550793e-01 -2.1529028296974606e-01 5.0356563391427100e-01 + -1.4240917423646823e-01 -2.3735186045200243e-01 6.0990691635971428e-01 + -1.3119404696831674e-01 -2.4805831195633113e-01 6.9076149965968991e-01 + -1.0630100944096560e-01 -2.4740570953176724e-01 7.3896705148805220e-01 + -7.4772263845614723e-02 -2.3594914474702600e-01 7.4894127197519311e-01 + -4.6431094173877557e-02 -2.1486497279420869e-01 7.1796432292455870e-01 + -3.1457938838273830e-02 -1.8544816975992920e-01 6.4670751645539670e-01 + -3.6937583898653009e-02 -1.4697162146097284e-01 5.3712092764327479e-01 + -6.8722245748797040e-02 -9.4979680651246179e-02 3.9368643770590195e-01 + -1.3751799968780745e-01 -3.3541364833288623e-02 2.2749865507512346e-01 + -2.5923382202589906e-01 4.2531463235198630e-04 5.1486369453976569e-02 + -4.5018365945879157e-01 -4.6135181777797740e-02 -1.1910429404396439e-01 + -7.1911977033381569e-01 -1.7315625960415545e-01 -2.4482697106915621e-01 + -1.0422862032370288e+00 -3.0604571678963277e-01 -2.8118271089616320e-01 + -1.3704324525248057e+00 -3.6942397415797862e-01 -2.3463020476007734e-01 + -1.5029039130177309e+00 -2.5732783342655452e-01 -1.7100847738483346e-01 + id 13353 + loc 7.8734476119279861e-03 4.9829560518264771e-01 373 + blend 0.0000000000000000e+00 + interp 4.0446161957560794e-01:3.8782871435344235e-01:3.2493327986495046e-01:2.4573897029745331e-01:1.1319512512402767e+00:3.2989723456813613e-01:2.0244274735819103e+00:4.0445757495941220e-01:2.9986231289412704e+00:2.6932586596988728e-01:3.9653917011940409e+00 + CVs 20 + -1.5844891965152746e-01 8.3052380285381344e-01 3.0724277133404598e-01 + -3.2776292968409576e-01 1.6395953611917173e+00 5.4522474626470929e-01 + -5.5286353993500115e-01 2.4419558964273347e+00 6.8152528891115061e-01 + -8.7470371484970511e-01 3.2420137887806693e+00 6.6490460467226731e-01 + -1.3227782286792120e+00 3.9907581028743611e+00 4.1584706999260268e-01 + -1.8828377406453600e+00 4.5506062635996321e+00 -1.1323392773219232e-01 + -2.4642718474203962e+00 4.7222212000659702e+00 -8.7441229805870213e-01 + -2.9487344545399390e+00 4.4400598183136468e+00 -1.7086698509257967e+00 + -3.2660244938550851e+00 3.7904750524486825e+00 -2.4920200554876866e+00 + -3.3439726393622746e+00 2.9093528467179235e+00 -3.1747986076720278e+00 + -3.1085652832578154e+00 1.9915032926069702e+00 -3.7380062045192459e+00 + -2.5789317723633398e+00 1.2106959359972698e+00 -4.1608984240490319e+00 + -1.8640700627770721e+00 5.8806598961821988e-01 -4.4478615496476701e+00 + -1.0685958869395233e+00 4.3206197422319459e-02 -4.6209445561425486e+00 + -2.8633749046224455e-01 -5.2998298799996135e-01 -4.7641898371332969e+00 + 2.8295114310450098e-01 -1.2449139355904428e+00 -5.1142190013955560e+00 + 3.5313547491416364e-01 -1.8726182859188480e+00 -5.7626346753340210e+00 + 6.8431970918598151e-02 -2.1342446454944324e+00 -6.5767615768817542e+00 + -3.8761051213723180e-01 -2.0743845958456371e+00 -7.5855163996559654e+00 + id 13354 + loc 1.9454224407672882e-01 1.7543345689773560e-01 412 + blend 0.0000000000000000e+00 + interp 4.4489741136685024e-01:4.4489296239273657e-01:3.8846074302431333e-01:4.2915507079426218e-01:9.2315316086508159e-01:3.1218542653763265e-01:1.3441227744703945e+00:3.2389984208819056e-01:2.0011599909966340e+00:4.1405902763785213e-01:2.4369541971502509e+00:2.6996377352003453e-01:3.2605961839898638e+00:3.5480656719959786e-01:3.9982708845342660e+00 + CVs 20 + -1.1005951775415479e-01 1.4420288986544727e-01 -5.1632580324653521e-01 + -2.2683733785033769e-01 2.1680409648582077e-01 -9.0467022270898834e-01 + -3.3551852626494361e-01 2.7217118389485212e-01 -1.2672731411282134e+00 + -4.3111719528908954e-01 3.3507951616992981e-01 -1.6602085341069852e+00 + -5.0552489341757800e-01 3.9947946718460503e-01 -2.0830166674050159e+00 + -5.4797908684323993e-01 4.5940984120480066e-01 -2.5318841217063488e+00 + -5.4836010598299678e-01 5.0967944807285703e-01 -2.9997335257614135e+00 + -5.0226682736354522e-01 5.4562754881752862e-01 -3.4771960682791341e+00 + -4.1044283623697175e-01 5.6495443664553124e-01 -3.9533301948654782e+00 + -2.7662080461194660e-01 5.6920658837048244e-01 -4.4168602692215568e+00 + -1.1725482535994314e-01 5.5429978485741116e-01 -4.8650740885746284e+00 + 1.9654695853877913e-02 4.8996031496985903e-01 -5.3184171461691108e+00 + 6.6452397452795187e-02 3.3585414148471759e-01 -5.7968822285400332e+00 + 4.6673593034340932e-05 1.0350230596634136e-01 -6.2751503469455709e+00 + -1.4719653754023210e-01 -1.6169198444798027e-01 -6.7239452224684948e+00 + -3.5903525417095417e-01 -4.3637287810571612e-01 -7.1332948678987771e+00 + -6.4264289169671307e-01 -7.0447372780951545e-01 -7.4899698704956599e+00 + -9.8837378496573691e-01 -9.4119650689087697e-01 -7.7829669942195281e+00 + -1.1771311564529530e+00 -1.0437502818045559e+00 -8.0979628253557401e+00 + id 13355 + loc 5.3954583406448364e-01 3.5243198275566101e-01 396 + blend 0.0000000000000000e+00 + interp 4.7373432329769077e-01:4.2735109178663622e-01:6.5450798850111747e-01:3.1755133342920216e-01:1.0339548541256265e+00:3.8844593714738007e-01:1.7048325011419414e+00:2.7997613543143868e-01:2.1886890046918577e+00:4.6752302291011477e-01:2.9517753820276886e+00:4.7372958595445780e-01:3.4303293496789404e+00:2.8315463381799100e-01:3.9998317063640032e+00 + CVs 20 + -7.3855155301703879e-01 2.3813936242848807e-01 3.1771206839379323e-01 + -1.2917331870965134e+00 3.4611829224231061e-01 5.8364675834549795e-01 + -1.8140302679386759e+00 4.1256909344562476e-01 8.4342363852478064e-01 + -2.3642270322139751e+00 4.6498639733369468e-01 1.1180039809566489e+00 + -2.9316993898339341e+00 4.9163766724195712e-01 1.4112216361176566e+00 + -3.5006993288066153e+00 4.8030741678215860e-01 1.7298090024798281e+00 + -4.0526314885308246e+00 4.1739402908369994e-01 2.0785803526480948e+00 + -4.5689513861081918e+00 2.8598309574145686e-01 2.4541039437248515e+00 + -5.0278169975894222e+00 7.1565013808924993e-02 2.8460344322774587e+00 + -5.3990542646179902e+00 -2.2684848536082702e-01 3.2406659626423640e+00 + -5.6558406154123420e+00 -5.9260297030975373e-01 3.6209862916864339e+00 + -5.7987926827464564e+00 -1.0010972089111374e+00 3.9664564482961433e+00 + -5.8481099957805576e+00 -1.4318240873523136e+00 4.2608167351243482e+00 + -5.8231920025970538e+00 -1.8643913760632405e+00 4.4943815949112329e+00 + -5.7431109297550282e+00 -2.2808657653724271e+00 4.6619188118262871e+00 + -5.6296934507849308e+00 -2.6740313609453059e+00 4.7608477061465617e+00 + -5.5040654004445893e+00 -3.0406437462112841e+00 4.7926458484924730e+00 + -5.3869347324773091e+00 -3.3830852459961882e+00 4.7698748979594967e+00 + -5.3111901585824368e+00 -3.7668322443187967e+00 4.7420428898224785e+00 + id 13356 + loc 6.6172569990158081e-01 7.4011904001235962e-01 375 + blend 0.0000000000000000e+00 + interp 4.1771049424842543e-01:2.5616442814957330e-01:4.0278451301145157e-02:2.6152141286071007e-01:1.4131750582802536e+00:3.5999613556346421e-01:2.3840939451194396e+00:3.3507925322988957e-01:2.9715717018481671e+00:4.1770631714348300e-01:3.1486963729189128e+00 + CVs 20 + -4.4650557786434675e-01 5.0024053452515038e-01 -2.6067699054053939e-01 + -9.6041991667210691e-01 8.6180347263427259e-01 -4.3604726169614222e-01 + -1.5385395111935274e+00 1.0578412561170987e+00 -5.2151589609417215e-01 + -2.1059024465813652e+00 1.1813498929844757e+00 -5.3832708350627567e-01 + -2.6019121203680848e+00 1.3188749299030857e+00 -5.2401229528139948e-01 + -3.0124034103415158e+00 1.4888793620269170e+00 -5.1655556487401177e-01 + -3.3648000590890508e+00 1.6813738696202383e+00 -5.3518443577154073e-01 + -3.6918060923141711e+00 1.8913011349132773e+00 -5.9113852474458528e-01 + -4.0189570622793891e+00 2.1200967960305932e+00 -7.0581188250538973e-01 + -4.3646430176767446e+00 2.3692840675118294e+00 -9.1667793996389135e-01 + -4.7261631920815432e+00 2.6188004171484609e+00 -1.2540495243453895e+00 + -5.0894232480750761e+00 2.8236557263518929e+00 -1.7258383225525336e+00 + -5.4237959591907288e+00 2.9171632181584681e+00 -2.3256490993682615e+00 + -5.6700650737989777e+00 2.8232048216583516e+00 -3.0094720618279123e+00 + -5.7788128499896629e+00 2.5063420142770418e+00 -3.6833292049147710e+00 + -5.7717298620135793e+00 2.0023393830146712e+00 -4.1979861348987448e+00 + -5.7902243679083636e+00 1.4641854169251540e+00 -4.4079194015906227e+00 + -5.9057444513327972e+00 1.0811263240398685e+00 -4.3452144075458614e+00 + -6.0207518221133327e+00 5.9426964014583072e-01 -4.2415559842552151e+00 + id 13357 + loc 8.7274163961410522e-01 6.9059425592422485e-01 1068 + blend 0.0000000000000000e+00 + interp 3.0413927885493286e-01:3.0413623746214430e-01:4.2340008783688587e-01:2.6606392869830725e-01:1.0401554114972655e+00:2.7562656311641726e-01:2.1621190223213356e+00:2.6328338794246087e-01:3.0072647902261465e+00:2.8946349572715235e-01:3.9188853806509427e+00 + CVs 20 + 1.2315649992969761e-01 4.4678972649358512e-01 -2.9555078209509777e-01 + 2.7078863827756672e-01 8.7200089955743953e-01 -5.3306779837991014e-01 + 4.4528953767147206e-01 1.2772523072959752e+00 -7.2576044168233567e-01 + 6.5351975219986858e-01 1.6591837816608515e+00 -8.9680919864260433e-01 + 9.0776772994466026e-01 2.0073947314520200e+00 -1.0803200394929675e+00 + 1.2131877989423494e+00 2.2988436147738551e+00 -1.3148654092665155e+00 + 1.5599703971931524e+00 2.5019495250540742e+00 -1.6168057278009820e+00 + 1.9274476932999589e+00 2.5957844969243613e+00 -1.9711157067891287e+00 + 2.2934157296988706e+00 2.5772743500720803e+00 -2.3484255484231720e+00 + 2.6378035823351227e+00 2.4571431809614435e+00 -2.7215812098478298e+00 + 2.9440154419503317e+00 2.2583862361346596e+00 -3.0683038095227206e+00 + 3.2055728226030347e+00 2.0146450056937786e+00 -3.3760428584553144e+00 + 3.4305724212499999e+00 1.7530054368326780e+00 -3.6559478249273591e+00 + 3.6360008263374199e+00 1.4753889199901349e+00 -3.9459855521853493e+00 + 3.8298003546200832e+00 1.1641696714304124e+00 -4.2889008868166529e+00 + 3.9970344435617835e+00 7.9823534230962956e-01 -4.7120487654074790e+00 + 4.1097714572406314e+00 3.7826239282273466e-01 -5.2313057225102302e+00 + 4.1256374297372895e+00 -1.9055248627063204e-02 -5.8142488021563139e+00 + 4.0473357724052743e+00 -1.9294518705064134e-01 -6.1893761305725201e+00 + id 13358 + loc 9.0240073204040527e-01 6.7443853616714478e-01 400 + blend 0.0000000000000000e+00 + interp 4.5729365541878886e-01:3.5378075161762540e-01:3.1742230498222945e-01:3.8359603494346051e-01:9.4312516043397077e-01:2.9561232830514456e-01:1.4403999277265420e+00:3.1494130419929800e-01:2.3173504945328980e+00:3.7061077128383840e-01:2.5560385706725648e+00:4.5728908248223471e-01:3.0445579807724656e+00:3.8956587437568896e-01:3.9883513016717282e+00 + CVs 20 + -1.6255247818375546e-01 1.7212904271000379e-01 -2.3656604003644086e-01 + -3.2083005019999111e-01 3.3674953389224682e-01 -4.7689953080758762e-01 + -4.5882322876751358e-01 4.9566685597977322e-01 -7.3294691384956234e-01 + -5.7050133027670702e-01 6.4512473257654102e-01 -1.0042644105658749e+00 + -6.5882314121120067e-01 7.8004773809317474e-01 -1.2854168930043384e+00 + -7.2458734276589043e-01 8.9942712397047953e-01 -1.5725232854044040e+00 + -7.6524517926035351e-01 1.0058918656831612e+00 -1.8631080643610800e+00 + -7.7806612677303477e-01 1.0996495515619169e+00 -2.1560471969872559e+00 + -7.6214319688502474e-01 1.1739133477084909e+00 -2.4503313165886826e+00 + -7.1914402558782864e-01 1.2196193215783833e+00 -2.7422651340285800e+00 + -6.5265738958835373e-01 1.2323640146897399e+00 -3.0253630256130082e+00 + -5.6843924564076365e-01 1.2123476034467007e+00 -3.2923780985554787e+00 + -4.7658691420102373e-01 1.1612065993023721e+00 -3.5341672640600681e+00 + -3.8934311453677117e-01 1.0830462927176820e+00 -3.7399400970761176e+00 + -3.1298441441287683e-01 9.8820045446781735e-01 -3.9028614726788939e+00 + -2.4159015120267618e-01 8.9138415796591963e-01 -4.0236173444881480e+00 + -1.5946785572221242e-01 7.9863663268329388e-01 -4.1050429378850026e+00 + -4.2712170427832402e-02 6.7956104859738709e-01 -4.1378857301243359e+00 + 1.9696581390555368e-01 3.2928324764368755e-01 -4.0620741959956428e+00 + id 13359 + loc 8.4977811574935913e-01 2.2477343678474426e-01 409 + blend 0.0000000000000000e+00 + interp 5.1606046512356196e-01:3.0888139444777518e-01:9.2274000772440967e-01:3.6904052354995370e-01:1.7518698853952950e+00:3.4722535634731633e-01:2.0713424708819717e+00:3.0996249242497526e-01:2.8435390030151377e+00:5.1605530451891080e-01:3.5600175828270082e+00:3.5696914141335945e-01:3.9901875053147902e+00 + CVs 20 + -2.7954661180656898e-01 1.9766152815969207e-01 1.6259831093958604e-01 + -5.5153778920229868e-01 4.0368510023726195e-01 3.1574758190938856e-01 + -8.2623638305945857e-01 6.1671451935493837e-01 4.5032093350692737e-01 + -1.1103579191568649e+00 8.3191313013597101e-01 5.6526792609561172e-01 + -1.4064177182602511e+00 1.0420793673387576e+00 6.6266224485986580e-01 + -1.7165898072616006e+00 1.2405984686261491e+00 7.4483595104491718e-01 + -2.0475693545459248e+00 1.4204400584385413e+00 8.1487656873919778e-01 + -2.4106986647504351e+00 1.5698074270359839e+00 8.7594755798793678e-01 + -2.8157248298566291e+00 1.6703311815921462e+00 9.3287035402623197e-01 + -3.2651035859545496e+00 1.6979678828562350e+00 9.9647358369390626e-01 + -3.7437742465926340e+00 1.6260168069406860e+00 1.0787932419742852e+00 + -4.2125737863436585e+00 1.4418273594721032e+00 1.1793101091572773e+00 + -4.6330880389928115e+00 1.1584833862276427e+00 1.2870175552048717e+00 + -4.9887784175262428e+00 7.9620343020338602e-01 1.3968669966159522e+00 + -5.2724032095158151e+00 3.7046711703734791e-01 1.5090466447837503e+00 + -5.4749240992559454e+00 -1.0218332507109151e-01 1.6150363991343721e+00 + -5.5903656629261871e+00 -5.9829995173370065e-01 1.6955782097288554e+00 + -5.6288400599978594e+00 -1.0900273019589091e+00 1.7438785044521268e+00 + -5.6809189675200198e+00 -1.5013868663936201e+00 1.8056222998811826e+00 + id 13360 + loc 4.8649078235030174e-03 6.6246114671230316e-02 415 + blend 0.0000000000000000e+00 + interp 4.3558088912553233e-01:4.1096626053024166e-01:3.6202401307265886e-01:3.4180693180051280e-01:1.3783730292180822e+00:3.1368499602133881e-01:2.0987701181392171e+00:1.8235509976913575e-01:2.9771685878007244e+00:4.3557653331664109e-01:3.5827223155314716e+00 + CVs 20 + 1.2718412104038307e-01 1.5452379910485456e-01 -1.1754023930025230e-01 + 2.2981227286720440e-01 3.0839466537534477e-01 -1.9363772109977939e-01 + 3.3049128079382312e-01 4.3110834192129321e-01 -2.5940810372804118e-01 + 4.4903097255769009e-01 5.4247730341898781e-01 -3.2930775083938463e-01 + 5.8760705058967577e-01 6.3855210948835961e-01 -4.0146521682815628e-01 + 7.4578368032600950e-01 7.1500752139759249e-01 -4.7335045097214806e-01 + 9.2106303510127829e-01 7.6964624276707494e-01 -5.4176885033457278e-01 + 1.1094167453131671e+00 8.0473375078242204e-01 -6.0267404435782990e-01 + 1.3060340970073918e+00 8.2406306978794996e-01 -6.5203842520819033e-01 + 1.5046806001172093e+00 8.2728983322757599e-01 -6.8923654619157493e-01 + 1.6971425813669483e+00 8.0852316334264673e-01 -7.2163807182926887e-01 + 1.8763525518979194e+00 7.6610453233604203e-01 -7.6021871618781656e-01 + 2.0411288450001326e+00 7.1126352118949954e-01 -8.0613340559376467e-01 + 2.1941789932058398e+00 6.5814944213729454e-01 -8.5175270681803916e-01 + 2.3366974103486058e+00 6.1363456340053779e-01 -8.9047493677084089e-01 + 2.4663237152251369e+00 5.7685018654690712e-01 -9.2290368501681508e-01 + 2.5803638407333742e+00 5.4522082220545443e-01 -9.5412957023215217e-01 + 2.6793043814614284e+00 5.1824184839131826e-01 -9.8311149716255986e-01 + 2.7793384577202276e+00 5.4811067546820458e-01 -1.0017610714814067e+00 + id 13361 + loc 7.3812282085418701e-01 8.8503891229629517e-01 395 + blend 0.0000000000000000e+00 + interp 4.3631082268326626e-01:4.3365923504389731e-01:3.0923349787072418e-01:4.3589719520502840e-01:9.1799998158471385e-01:2.7761796914869030e-01:1.1360194160898736e+00:3.0387269602497641e-01:2.1517635354206526e+00:4.1283530634574389e-01:2.9689010446919690e+00:4.2549824501762934e-01:3.4037782402844670e+00:4.3630645957503944e-01:3.9940900670979271e+00 + CVs 20 + 5.8432168541669582e-01 9.5282808559575272e-02 -4.7528844319937047e-01 + 1.0537772149821112e+00 1.0318387822650954e-01 -8.7236059973212765e-01 + 1.5084298160462164e+00 8.4732507967427040e-02 -1.2439584480951611e+00 + 1.9872375216950127e+00 5.8246960200737385e-02 -1.6043033986038733e+00 + 2.4842330994549378e+00 1.5233379175418671e-02 -1.9409194912623018e+00 + 2.9897272143518929e+00 -5.3170499182493280e-02 -2.2468761046627641e+00 + 3.4911957627798964e+00 -1.5623171122005264e-01 -2.5178732166545092e+00 + 3.9734392648972423e+00 -3.0530424558843050e-01 -2.7457762282907821e+00 + 4.4190692627642818e+00 -5.0933815811061534e-01 -2.9236540884484419e+00 + 4.8127252404696126e+00 -7.6926534167933047e-01 -3.0570104406574994e+00 + 5.1492326448007439e+00 -1.0760194017790683e+00 -3.1580181190156558e+00 + 5.4389371890875244e+00 -1.4099867508403823e+00 -3.2294243709801362e+00 + 5.6991590733786008e+00 -1.7502891816355408e+00 -3.2693902199467484e+00 + 5.9408300089546486e+00 -2.0883498996367420e+00 -3.2875655723486839e+00 + 6.1660587734443260e+00 -2.4287118098364875e+00 -3.3019638067296406e+00 + 6.3667181172848242e+00 -2.7737070110636202e+00 -3.3188415184918933e+00 + 6.5309328949019720e+00 -3.1118551699253567e+00 -3.3291708008278333e+00 + 6.6545742519399731e+00 -3.4328608426164875e+00 -3.3296545372081643e+00 + 6.7780479210082962e+00 -3.7913739323145532e+00 -3.3916047549891108e+00 + id 13362 + loc 7.5136744976043701e-01 2.1320864558219910e-01 393 + blend 0.0000000000000000e+00 + interp 5.0708344726177967e-01:4.8946625971646862e-01:5.8820727727446398e-02:5.0707837642730713e-01:5.7286226821275310e-01:3.5915715112245689e-01:1.0349328389457597e+00:2.8904950480346464e-01:1.7879405946333105e+00:3.9996512395940698e-01:2.5898198021352972e+00:3.2341330555864473e-01:3.2483986106273122e+00:4.9486316948874032e-01:3.8553130660711226e+00 + CVs 20 + 2.2719781749178503e-01 3.1997076171066552e-01 2.2119974964829908e-01 + 4.4117109628089179e-01 6.2250027155310406e-01 4.2932828636639170e-01 + 6.3472317114341281e-01 9.2492521455878351e-01 6.3011046508321744e-01 + 8.0071018583000009e-01 1.2231416182057693e+00 8.2802089408562751e-01 + 9.3951560803722245e-01 1.4983047159512557e+00 1.0406840417345737e+00 + 1.0524412329431418e+00 1.7401691439492248e+00 1.2977463878524000e+00 + 1.1276739183315643e+00 1.9530546035049183e+00 1.6212685963345868e+00 + 1.1513847914866360e+00 2.1462642513079961e+00 2.0206745375868778e+00 + 1.1290091379765732e+00 2.3217460042918758e+00 2.4962048182316345e+00 + 1.0852870279394793e+00 2.4713771486913512e+00 3.0451736496918325e+00 + 1.0557234276980199e+00 2.5741805699851628e+00 3.6658239644975676e+00 + 1.0803229974826782e+00 2.5923166501244403e+00 4.3535689744022701e+00 + 1.1969414840138384e+00 2.4634511792249798e+00 5.0972487162623636e+00 + 1.4386711653153630e+00 2.1036709886773961e+00 5.8501632435942277e+00 + 1.8373124983174756e+00 1.4406405766556025e+00 6.4882965425129484e+00 + 2.4180897669404429e+00 5.0677236121664615e-01 6.8166109162479600e+00 + 3.1793756601977834e+00 -4.7698868525665561e-01 6.7036124712400849e+00 + 4.0087977779310409e+00 -1.2218236593304279e+00 6.2422599400071581e+00 + 4.5832890264306387e+00 -1.6487057666210807e+00 5.8584624605449429e+00 + id 13363 + loc 5.0188404321670532e-01 9.5332324504852295e-01 402 + blend 0.0000000000000000e+00 + interp 4.7398797812072291e-01:3.0590494382950534e-01:1.1240430677643098e-01:3.1541239869142679e-01:1.0000243323423712e+00:4.0321638315529862e-01:1.5921461245941135e+00:4.7398323824094174e-01:2.1387665629280406e+00:3.4943654679178043e-01:2.8537433179729783e+00:3.8210777802657148e-01:3.7895032243584161e+00 + CVs 20 + 3.6097990952947676e-02 1.5243937229013660e-01 -2.6590593857347078e-01 + 9.7329013760524344e-02 3.0086818442111529e-01 -5.1818895629541539e-01 + 1.6279369541118366e-01 4.4321900561055477e-01 -7.6615353510452411e-01 + 2.1882323283833890e-01 5.8599782776277554e-01 -1.0135747856336912e+00 + 2.5400821361932802e-01 7.3483448460763612e-01 -1.2625943793952619e+00 + 2.5925044119032092e-01 8.8636703594597632e-01 -1.5131102112211194e+00 + 2.2808718460186661e-01 1.0343477925561158e+00 -1.7657823728725659e+00 + 1.5553116660724042e-01 1.1762815225026690e+00 -2.0211693264495167e+00 + 3.7320290391698929e-02 1.3119353801110374e+00 -2.2771620829347792e+00 + -1.2998411084759387e-01 1.4395655640496843e+00 -2.5289661115683768e+00 + -3.5089163310443838e-01 1.5536643843187281e+00 -2.7701618960030059e+00 + -6.2736091957017215e-01 1.6495011257628946e+00 -2.9893739729361037e+00 + -9.5927644198460871e-01 1.7276658234652209e+00 -3.1725177271585463e+00 + -1.3401135415531389e+00 1.7981657229116641e+00 -3.3021387750807443e+00 + -1.7606387421332388e+00 1.8813486253596137e+00 -3.3535255476953689e+00 + -2.2035192581463803e+00 1.9789737287758802e+00 -3.3033805632531834e+00 + -2.6523324959101586e+00 2.0453111870718530e+00 -3.1577451141874806e+00 + -3.0988035971907890e+00 2.0321939295995994e+00 -2.9457014851551229e+00 + -3.4803227666906773e+00 2.1234527742708851e+00 -2.9175132058323046e+00 + id 13364 + loc 2.6892530918121338e-01 2.6448504999279976e-02 380 + blend 0.0000000000000000e+00 + interp 4.5395694043378992e-01:3.0994736887176166e-01:8.4856766722335375e-01:4.5395240086438560e-01:1.4048299705091358e+00:4.0791476978425684e-01:2.0922748328153022e+00:2.5237213484579268e-01:2.6056757690288386e+00:3.4816083976820483e-01:3.0110131551705228e+00:4.3239244745892291e-01:3.7449002757072161e+00 + CVs 20 + -4.6402256078778531e-01 4.2962104506765469e-01 6.5705461567485268e-01 + -7.8356309848043493e-01 7.4320393857793654e-01 1.1913944893630186e+00 + -1.0627154377010224e+00 1.0031690263637623e+00 1.6994599773907164e+00 + -1.3444705778208508e+00 1.2282011650471354e+00 2.2183906592493363e+00 + -1.6332639851346373e+00 1.4012400630917143e+00 2.7410159960213805e+00 + -1.9303868216529736e+00 1.4997503409143231e+00 3.2632366357373788e+00 + -2.2297174387740379e+00 1.5039188064553239e+00 3.7762308982284001e+00 + -2.5209481612175217e+00 1.4077054100506179e+00 4.2636985406774865e+00 + -2.7959544042873055e+00 1.2232170507737228e+00 4.7044890134669295e+00 + -3.0513779118714406e+00 9.7787312362374612e-01 5.0800035498022025e+00 + -3.2881885720423742e+00 7.0429916921546099e-01 5.3880389461355476e+00 + -3.5073388242063430e+00 4.2093725367174795e-01 5.6414420550499464e+00 + -3.6944180746949278e+00 1.0844921762212989e-01 5.8414877228975399e+00 + -3.8051836233714988e+00 -2.8964948034460170e-01 5.9716662786076480e+00 + -3.8392241276244681e+00 -8.0328562791045632e-01 6.0343061598778522e+00 + -3.8642462782196434e+00 -1.3943367172697281e+00 6.0605422366977706e+00 + -3.9398698164314681e+00 -1.9715019711702788e+00 6.0917450327507821e+00 + -4.0583724398086716e+00 -2.4662806223941520e+00 6.1912892614358093e+00 + -4.1680633885823291e+00 -2.8739896029121854e+00 6.4726491332154890e+00 + id 13365 + loc 8.1856626272201538e-01 1.3297057151794434e-01 407 + blend 0.0000000000000000e+00 + interp 6.6490060868297385e-01:5.7990978774890600e-01:1.0033782187308762e+00:4.7430556726909906e-01:1.0184732743536900e+00:3.4083621838209327e-01:1.3731501062641338e+00:2.9959171088138148e-01:2.1094030607370668e+00:3.1634347510672800e-01:2.9979154536296924e+00:6.6489395967688703e-01:3.1283213223728978e+00 + CVs 20 + -3.7334635921988790e-01 3.0677419792687505e-01 1.0825183762375543e-01 + -5.6343740046054880e-01 4.6325193293106581e-01 1.9181555545150500e-01 + -6.6859699588446320e-01 5.5499643783402131e-01 2.6556074855858069e-01 + -7.7581978281983621e-01 6.3887975050733015e-01 3.3448583739519133e-01 + -8.7960164489497494e-01 7.1403147178739435e-01 3.9952131913115341e-01 + -9.7392619450683693e-01 7.8046393556222138e-01 4.6356895757453087e-01 + -1.0548404130060054e+00 8.4187640229048299e-01 5.3141114233427078e-01 + -1.1265549853969032e+00 9.0661875254772295e-01 6.0438819529102727e-01 + -1.2055098417470043e+00 9.7533675724557423e-01 6.6716466109665507e-01 + -1.3005941819700544e+00 1.0276080831371197e+00 6.9335810999855396e-01 + -1.4043242604987118e+00 1.0452543948525932e+00 6.7231786009274475e-01 + -1.5112181489616954e+00 1.0266536925498486e+00 6.0681752069914419e-01 + -1.6213758792720885e+00 9.7330766857314654e-01 5.0015259781875665e-01 + -1.7373197387380577e+00 8.8241673531840747e-01 3.5303174055419717e-01 + -1.8655900885751935e+00 7.6151441991866275e-01 1.6783808879975423e-01 + -2.0154350143564175e+00 6.3993252011560142e-01 -4.5341532298186771e-02 + -2.1907133380235586e+00 5.5078179023621598e-01 -2.6864543879361613e-01 + -2.3876646864700994e+00 5.1041292992401732e-01 -4.8549005406513424e-01 + -2.5939919818658552e+00 5.0046039991135816e-01 -6.9472104153351322e-01 + id 13366 + loc 1.3553875684738159e-01 2.6382964849472046e-01 399 + blend 0.0000000000000000e+00 + interp 3.8206256822588508e-01:2.9650842716821774e-01:3.9814552409165427e-02:3.8205874760020286e-01:8.8489891522357489e-01:2.7535925244509180e-01:1.8240297111268928e+00:2.9765259763648244e-01:2.3786920634497588e+00:3.4814049674281589e-01:3.4832337511657316e+00 + CVs 20 + -1.0482585484281602e-01 3.2991650411123163e-01 1.7038611997442271e-01 + -2.5883625137325178e-01 6.6458014330201054e-01 3.1713601004117603e-01 + -4.5670958026998154e-01 9.8997640056560954e-01 4.3419404109316884e-01 + -6.8936259716303272e-01 1.2999020296114516e+00 5.3136529511082586e-01 + -9.4905147489981545e-01 1.5942659898638276e+00 6.2832371127192921e-01 + -1.2318983333384470e+00 1.8693125111172795e+00 7.4374452213333497e-01 + -1.5393409079831613e+00 2.1131880728878332e+00 8.9212296923198886e-01 + -1.8740834627887779e+00 2.3033615571290253e+00 1.0841699718194886e+00 + -2.2321031545130645e+00 2.4043573035998422e+00 1.3220359068217131e+00 + -2.5951484337355231e+00 2.3754354205013546e+00 1.5890349778992081e+00 + -2.9288210267096559e+00 2.1951817795348911e+00 1.8449888884056067e+00 + -3.2025864433836717e+00 1.8978989972890443e+00 2.0453782925793025e+00 + -3.4245437960483880e+00 1.5506731622697822e+00 2.1816341226209723e+00 + -3.6283092017442056e+00 1.2073354855836362e+00 2.2698365133578986e+00 + -3.8544445612999181e+00 9.2358762913540959e-01 2.3209663170313704e+00 + -4.1210451867784759e+00 7.5625227200832856e-01 2.3097374720088473e+00 + -4.3614090582358216e+00 7.6437366189636036e-01 2.1392752497954644e+00 + -4.4247101230589303e+00 8.9949320199061455e-01 1.7989138245425826e+00 + -4.7824408256632474e+00 7.8440799936775041e-01 1.7292007696644294e+00 + id 13367 + loc 3.9055591821670532e-01 7.0591740310192108e-02 401 + blend 0.0000000000000000e+00 + interp 4.7849324300295865e-01:3.1635038932202586e-01:4.2585779576248051e-01:4.7848845807052864e-01:1.0998883054200919e+00:2.6102130501169024e-01:2.0000899594843045e+00:3.8652331717364069e-01:2.4848100519066256e+00:3.8938758309317956e-01:3.2609662564560060e+00:4.1900051633648672e-01:3.9987090420316025e+00 + CVs 20 + -1.8852906567245720e-01 3.3331594075395765e-01 1.0852488407307714e-01 + -4.0738936675440818e-01 6.6772462027288704e-01 2.3771265918074430e-01 + -6.3968657685689512e-01 9.9211739492344797e-01 3.8442248754142960e-01 + -8.8129700674116340e-01 1.2924080160500933e+00 5.4919577276220477e-01 + -1.1343106806710062e+00 1.5535607816398964e+00 7.3600599911585407e-01 + -1.3961617048061903e+00 1.7613813889850876e+00 9.4936084223787565e-01 + -1.6603567182137899e+00 1.9075224491901650e+00 1.1909763367657042e+00 + -1.9183373859716482e+00 1.9954809673902341e+00 1.4568766543756888e+00 + -2.1669560776426540e+00 2.0344184824338938e+00 1.7421821032641880e+00 + -2.4142416643075979e+00 2.0200307636627106e+00 2.0463558250153815e+00 + -2.6620542387074413e+00 1.9395385129473048e+00 2.3581966373534833e+00 + -2.8894181259881244e+00 1.8162074167012583e+00 2.6495739434713483e+00 + -3.0798661190960894e+00 1.6987500150913324e+00 2.9104575379145512e+00 + -3.2431773622626321e+00 1.6014449941245885e+00 3.1621409011178470e+00 + -3.3894396875398685e+00 1.5143322901081935e+00 3.4266029071238213e+00 + -3.4841061948422243e+00 1.4739980765029164e+00 3.6222215915220812e+00 + -3.4709661459166568e+00 1.5120534997638564e+00 3.4978679765416776e+00 + -3.3852759523403821e+00 1.4012385436091659e+00 3.0712239446435792e+00 + -3.3875507601796633e+00 1.5207489891343644e+00 3.2370303569184613e+00 + id 13368 + loc 8.6706155538558960e-01 1.4669591188430786e-01 396 + blend 0.0000000000000000e+00 + interp 3.6384500779344675e-01:2.8366366468941934e-01:6.3595477724754279e-01:3.1008387144046101e-01:1.5653740216321632e+00:3.2544629811798098e-01:2.5948898475656681e+00:3.6384136934336886e-01:3.1930696768028173e+00:3.6114073213870290e-01:3.9991007349085566e+00 + CVs 20 + -6.3932396353253074e-01 1.8748859205121371e-01 4.2260307457801577e-01 + -1.0826336399712679e+00 2.5244637102022549e-01 7.5351436945251082e-01 + -1.4624051613886866e+00 2.6098263621133322e-01 1.0645189505539794e+00 + -1.8319585634001379e+00 2.3858491003127791e-01 1.3819586416293459e+00 + -2.1884388138601762e+00 1.8225109708127996e-01 1.7017731668828977e+00 + -2.5276537907288121e+00 8.8829247963377655e-02 2.0244812811486685e+00 + -2.8443164614410898e+00 -4.1134027577366616e-02 2.3519482685423601e+00 + -3.1322947157700467e+00 -2.0439853295327071e-01 2.6829274057808554e+00 + -3.3865306697580211e+00 -3.9823965256491101e-01 3.0080046135456611e+00 + -3.6018429852341058e+00 -6.1989328509651243e-01 3.3115282597636644e+00 + -3.7735623303205381e+00 -8.6708625324824440e-01 3.5854974919490195e+00 + -3.9034575709682535e+00 -1.1433449746359416e+00 3.8364444352379792e+00 + -3.9994901521294510e+00 -1.4540532137258351e+00 4.0700212916031893e+00 + -4.0703323139930569e+00 -1.7966030242509703e+00 4.2799907566159581e+00 + -4.1213244054902978e+00 -2.1582941645127245e+00 4.4606235690617355e+00 + -4.1536638863879691e+00 -2.5227104446443844e+00 4.6128244124614728e+00 + -4.1665334356734034e+00 -2.8815116781565728e+00 4.7389375361206980e+00 + -4.1586668246954446e+00 -3.2533639283547808e+00 4.8481963756552027e+00 + -4.1409629731348341e+00 -3.7838817086969798e+00 5.0214287539729048e+00 + id 13369 + loc 4.9788245558738708e-01 2.3592934012413025e-01 382 + blend 0.0000000000000000e+00 + interp 4.8172123098429454e-01:3.9321357476151536e-01:4.2437205391600730e-01:3.7593188691739376e-01:1.0257916057604370e+00:3.9705470469385856e-01:1.9145295770960202e+00:4.8171641377198471e-01:2.3895476086209273e+00:3.0976499266784019e-01:2.9760394090599336e+00:3.6962082613792413e-01:3.6360953637170788e+00 + CVs 20 + -4.9000821574792153e-01 2.0357066561910170e-01 -7.2597643695760894e-01 + -8.6807614235551589e-01 3.0343021998779018e-01 -1.1914373759638770e+00 + -1.2193628118558022e+00 3.6164589664503310e-01 -1.6165425258726647e+00 + -1.5701949459468629e+00 4.0982379453185946e-01 -2.0921839398203401e+00 + -1.9215139115324877e+00 4.4323858327501564e-01 -2.6232126406113858e+00 + -2.2751068387849127e+00 4.4544318234279545e-01 -3.2094891048601273e+00 + -2.6343451793528474e+00 3.8467449698827549e-01 -3.8409137462946936e+00 + -2.9938243078465501e+00 2.2004183600309046e-01 -4.4925456241350963e+00 + -3.3426420070929748e+00 -8.5986761380054899e-02 -5.1350467879897792e+00 + -3.6727138228497735e+00 -5.5832758772567459e-01 -5.7324307659375000e+00 + -3.9717032090981257e+00 -1.1951821005434347e+00 -6.2232484371845924e+00 + -4.2151461776324197e+00 -1.9613523938254587e+00 -6.5352989892425946e+00 + -4.3834826386287213e+00 -2.7870648706976131e+00 -6.6260805123464817e+00 + -4.5023561171017672e+00 -3.6079825917777057e+00 -6.5508968919294883e+00 + -4.6284487890387922e+00 -4.4070225298765751e+00 -6.4402949505868214e+00 + -4.8165954609216257e+00 -5.1491246994883877e+00 -6.3775809800291263e+00 + -5.1117411914397204e+00 -5.7410809018703004e+00 -6.3389663713055988e+00 + -5.4717096312428364e+00 -6.1328751358299058e+00 -6.2545313901846900e+00 + -5.6615594964089251e+00 -6.5475888707057859e+00 -6.1697157555720192e+00 + id 13370 + loc 8.2221788167953491e-01 6.6944301128387451e-01 373 + blend 0.0000000000000000e+00 + interp 4.3244439295953352e-01:3.8705023912106312e-01:5.2514831284247576e-01:4.3244006851560396e-01:1.0551084832183191e+00:3.0418451978126892e-01:1.8871169857470553e+00:2.7220320033335799e-01:2.8181564452168457e+00:4.2405113401430622e-01:3.9311536758364825e+00 + CVs 20 + -2.8377686558544546e-01 2.6303422910144653e-01 -8.6415944451091992e-02 + -5.6617741969256041e-01 5.1275574525662360e-01 -1.7671363528368730e-01 + -8.5928144303143350e-01 7.6280967739652306e-01 -2.7722997653286435e-01 + -1.1653099835696259e+00 1.0357765948880224e+00 -3.9211133386707608e-01 + -1.4718873128067238e+00 1.3547275160369274e+00 -5.2570569696820735e-01 + -1.7688797826269385e+00 1.7214681529283160e+00 -7.0291037428727354e-01 + -2.0509044947513808e+00 2.1040627285623463e+00 -9.7078090580332721e-01 + -2.3081810475161815e+00 2.4546523192865859e+00 -1.3611920269135687e+00 + -2.5256041661587600e+00 2.7355313487959059e+00 -1.8737498306310232e+00 + -2.6878800733394641e+00 2.9295988386610547e+00 -2.4892738100668717e+00 + -2.7820432169476064e+00 3.0279031398362024e+00 -3.1816226160475560e+00 + -2.8134561093822010e+00 3.0067416819341384e+00 -3.9070584047307002e+00 + -2.8387432591756792e+00 2.8536257463558989e+00 -4.5725822833061667e+00 + -2.9624899929846764e+00 2.6807935900943103e+00 -5.0536045793534541e+00 + -3.2138933773684766e+00 2.7057519633132570e+00 -5.2765892607482945e+00 + -3.4437115900964050e+00 3.0517762363983088e+00 -5.2223088540131375e+00 + -3.3999642913817625e+00 3.6510295233181869e+00 -4.9119851706739750e+00 + -3.0526767547924285e+00 4.2143970783090321e+00 -4.5419435456110993e+00 + -3.4417652745441627e+00 4.4556668746388475e+00 -4.6704689380521458e+00 + id 13371 + loc 8.6989980936050415e-01 1.9082777202129364e-01 376 + blend 0.0000000000000000e+00 + interp 5.9292884339841168e-01:4.3088648829530829e-01:6.8533579146264900e-03:5.1837618899773130e-01:9.3925206588559451e-01:5.9292291410997777e-01:1.5524754008526558e+00:5.4412877720406261e-01:1.8264303462551608e+00:5.8301181780220568e-01:2.0414458107012887e+00:5.7089184127369463e-01:2.8889678905237157e+00:4.6153544246620182e-01:3.0532657797544838e+00:4.5008356520634785e-01:3.6787371076975472e+00 + CVs 20 + 1.5052524814931903e-01 3.2769360836530975e-01 -4.7446395503543309e-01 + 2.3067418798482339e-01 5.9436333891959436e-01 -9.0147559528972543e-01 + 2.5402895567174599e-01 7.9031510519112402e-01 -1.3403847603418475e+00 + 2.3958182860834712e-01 9.3708794868713086e-01 -1.8027439478798188e+00 + 2.1483376501449364e-01 1.0807708058699677e+00 -2.2679846967424568e+00 + 2.1697610728430466e-01 1.2528748456959458e+00 -2.7319997180541349e+00 + 2.8065456108300868e-01 1.4596797221318356e+00 -3.2044422927868177e+00 + 4.2971920008721753e-01 1.7001950143217281e+00 -3.6845340052607396e+00 + 6.7486783704690201e-01 1.9716132589409487e+00 -4.1596805127700032e+00 + 1.0169648430823128e+00 2.2596574045606697e+00 -4.6267852904739550e+00 + 1.4546641098903759e+00 2.5270401497624544e+00 -5.0906058860688095e+00 + 1.9926924390402176e+00 2.7101780945380671e+00 -5.5435527600572936e+00 + 2.6261634917192707e+00 2.7398633232602831e+00 -5.9662271433745619e+00 + 3.3283288206057824e+00 2.5733089904942359e+00 -6.3173313002250993e+00 + 4.0571679735743267e+00 2.1990906696350181e+00 -6.5565823458846442e+00 + 4.7454495828538938e+00 1.5887628796467763e+00 -6.7061029404696750e+00 + 5.2228533826844217e+00 6.9040075294824454e-01 -6.8978850035285273e+00 + 5.2230800096224685e+00 -3.2939644442254323e-01 -7.3052346828785311e+00 + 5.3855016151361061e+00 -7.5815024870968006e-01 -7.5603428049114942e+00 + id 13372 + loc 5.5914503335952759e-01 5.2444332838058472e-01 374 + blend 0.0000000000000000e+00 + interp 4.3494554489503290e-01:3.3459947286513292e-01:5.8021250815226177e-01:4.3494119543958398e-01:1.0298060392225465e+00:4.1728115198284260e-01:1.9387636834061159e+00:3.9086014466374880e-01:2.7911349411411805e+00:4.0251447357272224e-01:3.2256718924372203e+00:3.7723587299325739e-01:3.9851728154076191e+00 + CVs 20 + -7.6398389022407365e-01 4.0405228010436700e-01 -3.1502493319142127e-01 + -1.4048050636722507e+00 6.4202923443535442e-01 -4.7604463259152863e-01 + -2.0244906845349555e+00 7.6799172202075916e-01 -5.3469711447245294e-01 + -2.6572063773523111e+00 8.3276662170418714e-01 -5.3591283286619384e-01 + -3.2857328556243619e+00 8.6251367676179624e-01 -5.1811115939419672e-01 + -3.8955235657217484e+00 8.6356786477505498e-01 -5.2214380980334041e-01 + -4.4743944131810043e+00 8.3159165164636017e-01 -5.7771566780487160e-01 + -5.0108301494459759e+00 7.6522426944272937e-01 -7.0198839214323261e-01 + -5.4924207379525356e+00 6.6893352224134395e-01 -9.0125668806470127e-01 + -5.9105569198704515e+00 5.4758332886159122e-01 -1.1732169169497504e+00 + -6.2697697721289831e+00 3.9654448770849227e-01 -1.5085834406915009e+00 + -6.5858509035881205e+00 1.9369327256520252e-01 -1.8881438226955671e+00 + -6.8670157614807872e+00 -9.8880427050037412e-02 -2.2793888025541089e+00 + -7.1043644654658360e+00 -5.0898787013712532e-01 -2.6381606255846219e+00 + -7.3016401010548844e+00 -1.0093820607544055e+00 -2.9321152546556832e+00 + -7.4955947234936939e+00 -1.5352169746662194e+00 -3.1669164773676131e+00 + -7.7223858611508378e+00 -2.0266753635181591e+00 -3.3553829763689054e+00 + -8.0014037878435111e+00 -2.4402873388833108e+00 -3.4857119868383752e+00 + -8.3567958762170278e+00 -2.7572197958511437e+00 -3.5272094637141258e+00 + id 13373 + loc 1.7532850801944733e-01 7.7198743820190430e-01 412 + blend 0.0000000000000000e+00 + interp 3.6707805237846775e-01:2.8715889751654955e-01:5.0644314892312925e-01:3.5442055724166643e-01:1.1888218885541171e+00:3.3686911180026002e-01:2.0095441965857677e+00:3.1986065073416214e-01:2.8906788656381606e+00:3.6707438159794398e-01:3.4011783263553870e+00:3.1107764596461190e-01:3.9763808226874859e+00 + CVs 20 + 7.9036781966659708e-01 1.4308212308146162e-01 -1.9504894355354369e-01 + 1.2963480383230479e+00 1.5537403077377748e-01 -3.8221639584150269e-01 + 1.7402222956894913e+00 1.3000723322791347e-01 -5.4965210989411262e-01 + 2.2085530057850002e+00 1.0564440918712736e-01 -6.8973601494949788e-01 + 2.7003626987592684e+00 7.9331064914780591e-02 -7.9469840759300414e-01 + 3.2141551534399664e+00 4.7559180054639105e-02 -8.5609411290783799e-01 + 3.7448986102309560e+00 5.5870803941650005e-03 -8.6619573248579362e-01 + 4.2839320943301740e+00 -5.3138642391394431e-02 -8.2125795031078597e-01 + 4.8205743816744420e+00 -1.3569515580437241e-01 -7.2097858008066384e-01 + 5.3414372802428325e+00 -2.4648364328769112e-01 -5.6326588965150470e-01 + 5.8329598569333916e+00 -3.9291143710749799e-01 -3.5456057970441746e-01 + 6.2939956625714073e+00 -6.0183146291768597e-01 -1.2711281025863941e-01 + 6.7332945645503877e+00 -9.1200515805760518e-01 7.2847455220567348e-02 + 7.1445303445466184e+00 -1.3325787601566115e+00 2.2558763953180316e-01 + 7.5093251061494994e+00 -1.8443040265865418e+00 3.4153674557163305e-01 + 7.8112055784436780e+00 -2.4296160592637817e+00 4.1787545719864666e-01 + 8.0398532244844514e+00 -3.0712386114926624e+00 4.3185154621351390e-01 + 8.1914868956226297e+00 -3.7364563065022320e+00 3.7314099059620187e-01 + 8.3474026579980620e+00 -4.2552665560982454e+00 4.5267213238177983e-01 + id 13374 + loc 1.6382667422294617e-01 4.7704687714576721e-01 1080 + blend 0.0000000000000000e+00 + interp 3.8062038273052046e-01:3.8061657652669317e-01:3.9367650732480275e-04:3.0560216912749344e-01:7.7567233054573570e-01:3.0718661277967158e-01:1.2999303447271131e+00:3.0791700106382214e-01:2.0009378354517797e+00:3.3183664549275338e-01:2.7579086394502599e+00:2.8502691192645330e-01:3.2885126119965626e+00 + CVs 20 + 3.5971810176623381e-01 2.4117659608445691e-01 1.8133505781510526e-01 + 5.3407641035181952e-01 3.8324588301181994e-01 2.8763167264367934e-01 + 6.5536393711669860e-01 4.8862461775261756e-01 3.7976734296648423e-01 + 7.9366619628904034e-01 5.8833607769981511e-01 4.8088326857520802e-01 + 9.4586349490470323e-01 6.7911842198533379e-01 5.9033586695148266e-01 + 1.1091176249441257e+00 7.5799199431768061e-01 7.0813334707928144e-01 + 1.2810301670581832e+00 8.2249769948309515e-01 8.3523022359517041e-01 + 1.4592003599191261e+00 8.7051678310463099e-01 9.7323874801872623e-01 + 1.6406718629341623e+00 8.9994431401982733e-01 1.1236572495937804e+00 + 1.8217046005644602e+00 9.0879073859622628e-01 1.2870624926509848e+00 + 1.9985340652702188e+00 8.9485936418195156e-01 1.4622106876102774e+00 + 2.1680959969785696e+00 8.5563503594406687e-01 1.6454814695808824e+00 + 2.3281616103816569e+00 7.8951851748170931e-01 1.8317824095512329e+00 + 2.4780358932457713e+00 6.9574003598736800e-01 2.0160235466634164e+00 + 2.6174312756669784e+00 5.7438467548357686e-01 2.1934904529373207e+00 + 2.7445689880573068e+00 4.2749308998759672e-01 2.3586991629725178e+00 + 2.8570347143309105e+00 2.5943475517826387e-01 2.5058761158518870e+00 + 2.9553009336000557e+00 7.4842509319277717e-02 2.6323360492060703e+00 + 3.0482902472565860e+00 -1.3383892031704714e-01 2.7461524039039880e+00 + id 13375 + loc 4.0004730224609375e-01 3.5923978686332703e-01 409 + blend 0.0000000000000000e+00 + interp 4.7055223682023573e-01:3.3746604328655044e-01:3.8572517827524033e-01:2.9319018794267898e-01:1.1894484011471298e+00:3.7593409539545980e-01:2.0684340999684578e+00:3.8753088377038664e-01:2.6570522137993442e+00:2.9631736469711967e-01:3.0570792692742597e+00:4.7054753129786753e-01:3.6903411953550318e+00 + CVs 20 + -1.6351438276889180e-01 1.8689938241673065e-01 -4.3830657986230581e-01 + -3.3145849656428861e-01 3.1965951595272130e-01 -8.0682986673004420e-01 + -4.9940343901981599e-01 4.2796400384750449e-01 -1.1579502230304011e+00 + -6.7096934267898056e-01 5.2242378865793870e-01 -1.5109311153535587e+00 + -8.4852827508253514e-01 6.0022104631774675e-01 -1.8632387700039579e+00 + -1.0310733521840703e+00 6.6105523504827046e-01 -2.2130611882677353e+00 + -1.2149705838449387e+00 7.0625616541824066e-01 -2.5601586162053547e+00 + -1.3959850519923720e+00 7.3576507979723593e-01 -2.9044519565909805e+00 + -1.5707422600215648e+00 7.4806863499378928e-01 -3.2446575163089166e+00 + -1.7375619097183812e+00 7.4370525103855334e-01 -3.5788165138996719e+00 + -1.8938616627590434e+00 7.2088138232658339e-01 -3.9057247295839383e+00 + -2.0374361199003461e+00 6.7721834614655196e-01 -4.2263433840586995e+00 + -2.1688292289420001e+00 6.0732662788943603e-01 -4.5467713401731666e+00 + -2.2902973822335952e+00 4.9908010716856266e-01 -4.8758837153700361e+00 + -2.4003722704231953e+00 3.4098825215658524e-01 -5.2170871976054123e+00 + -2.4901936297046028e+00 1.3468760360234766e-01 -5.5629466387185289e+00 + -2.5488881248250954e+00 -1.0719007302049466e-01 -5.8954184198155382e+00 + -2.5709267219505909e+00 -3.7970826208569175e-01 -6.1739462757108505e+00 + -2.5334282912878305e+00 -7.2202700487158378e-01 -6.1577198819981405e+00 + id 13376 + loc 5.6116789579391479e-01 9.5769590139389038e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6446059593009126e-01:3.0321293964988616e-01:3.4678581607634906e-01:3.8892629067116863e-01:9.9885911173440556e-01:2.1717726230160900e-01:1.6907614862999445e+00:4.6445595132413198e-01:2.1634593649314735e+00:3.4328846030550575e-01:2.9100119946412200e+00:3.0048431016973548e-01:3.7456180029954251e+00 + CVs 20 + 1.6715882771229698e-01 2.8546761274333210e-01 -3.9829608671602720e-02 + 3.3913356965246982e-01 5.4574008277778985e-01 -9.9684229763912890e-02 + 5.1311726282354708e-01 7.9090114914262855e-01 -1.7194915811208888e-01 + 6.8589596879546300e-01 1.0232458657790147e+00 -2.5621606121030027e-01 + 8.5460005247359305e-01 1.2408201799028880e+00 -3.5795864113401316e-01 + 1.0149479043173488e+00 1.4412955747884673e+00 -4.8199991756032934e-01 + 1.1614684801664041e+00 1.6216399987450243e+00 -6.3257743217417506e-01 + 1.2877198340572080e+00 1.7776496458388333e+00 -8.1257629157179767e-01 + 1.3862008176707015e+00 1.9033046223522194e+00 -1.0224250135601198e+00 + 1.4489550735714476e+00 1.9912395997916725e+00 -1.2585157722485565e+00 + 1.4692207842784515e+00 2.0355898907436742e+00 -1.5096730165861014e+00 + 1.4444044249487071e+00 2.0363866007459333e+00 -1.7567448691601846e+00 + 1.3794063996622925e+00 2.0000830685237321e+00 -1.9853562520306156e+00 + 1.2853623771681326e+00 1.9325304081360681e+00 -2.1969868112529034e+00 + 1.1707703387650366e+00 1.8368982602423132e+00 -2.3948405187246355e+00 + 1.0326438976049537e+00 1.7185207374620055e+00 -2.5670368016978347e+00 + 8.6891202984669969e-01 1.5756610767390979e+00 -2.6892026710919077e+00 + 6.9054444109336643e-01 1.4002235109769234e+00 -2.7717764188377600e+00 + 5.8548423212656486e-01 1.2793242906239968e+00 -2.9563524308088516e+00 + id 13377 + loc 7.1612908504903316e-03 1.3956414163112640e-01 402 + blend 0.0000000000000000e+00 + interp 4.3485736264636687e-01:3.4310919027174325e-01:4.3303006335215777e-04:4.3485301407274041e-01:9.9064424255183270e-01:3.5371459376264586e-01:1.2717258649586904e+00:3.1025541964931880e-01:1.9999214150972420e+00:3.5705096343375420e-01:2.6355995155282530e+00:3.9311776172194596e-01:3.2827048586902636e+00 + CVs 20 + -1.1932380579849858e-01 2.6858161269399994e-01 2.3122477392460539e-01 + -2.6132796196686570e-01 5.3319463372961584e-01 4.2909524656436898e-01 + -4.2422482115217941e-01 7.8978337984644109e-01 5.9446395657283124e-01 + -6.0369552240927482e-01 1.0329892935404563e+00 7.2794007646532233e-01 + -7.9425491171156171e-01 1.2575622352340430e+00 8.3165253200186506e-01 + -9.8972222760506190e-01 1.4611797572526568e+00 9.1013826944266352e-01 + -1.1874555620594611e+00 1.6463895276303713e+00 9.6233608608302090e-01 + -1.3881995502767341e+00 1.8189724620929906e+00 9.8428867205659298e-01 + -1.5880515698137723e+00 1.9860122388966757e+00 9.8564094961964011e-01 + -1.7760857992358838e+00 2.1561747505222018e+00 9.8554530403576168e-01 + -1.9518887614075520e+00 2.3429345787893565e+00 9.8471934400686500e-01 + -2.1437831846543798e+00 2.5616696179102232e+00 9.6060056213288814e-01 + -2.4069941154311807e+00 2.7867060068230702e+00 8.9636266904704653e-01 + -2.7737112965241137e+00 2.9052068400298965e+00 7.9100178483773187e-01 + -3.2042523868308179e+00 2.7858309263009406e+00 6.5637614522684795e-01 + -3.6230448121545877e+00 2.3502104040735525e+00 5.4844945735360007e-01 + -3.9680903071304132e+00 1.6121966287725833e+00 6.0048518387971228e-01 + -4.1920847856512093e+00 8.4778607213879376e-01 9.2035355632628402e-01 + -4.1815162026572148e+00 6.6855626325939344e-01 1.2080870218384845e+00 + id 13378 + loc 3.1406819820404053e-01 3.6822280287742615e-01 395 + blend 0.0000000000000000e+00 + interp 5.1024312704771158e-01:4.5835959296724671e-01:2.4996714197049275e-01:3.8814905094426116e-01:9.7278673790207182e-01:4.3800582756492407e-01:1.5318163041844817e+00:5.1023802461644108e-01:1.9996024122727727e+00:4.5672877257049488e-01:2.2944368717500203e+00:5.0976462441718629e-01:2.8865745177261477e+00:4.2951143539363190e-01:3.1400350650918822e+00:3.0295092923820016e-01:3.9072175373277691e+00 + CVs 20 + -3.0645509926536108e-01 1.4043014236211826e-01 -2.4417143215891909e-01 + -5.6286763947035756e-01 2.2896767139851421e-01 -4.5364993951607890e-01 + -7.9928179763033136e-01 2.8965107130001810e-01 -6.6102691545068915e-01 + -1.0235655100539065e+00 3.3356843831771854e-01 -8.8033024340626875e-01 + -1.2270703568103820e+00 3.6121707092272082e-01 -1.1129699488301426e+00 + -1.4022912343583875e+00 3.7315030307279040e-01 -1.3581803611449808e+00 + -1.5462455882424297e+00 3.7355190661931947e-01 -1.6108854829413202e+00 + -1.6569294522008189e+00 3.6957796414304456e-01 -1.8610979294104562e+00 + -1.7275283168148934e+00 3.6889735206664009e-01 -2.1031925360671222e+00 + -1.7544850204659395e+00 3.7692054640627770e-01 -2.3472013862610264e+00 + -1.7530094911706606e+00 3.8598322426521881e-01 -2.6079372555474993e+00 + -1.7520832255510745e+00 3.7244410335686551e-01 -2.8862508842678363e+00 + -1.7668748328292700e+00 3.1702487668017110e-01 -3.1727217469844851e+00 + -1.7948155873946385e+00 2.1228979285418648e-01 -3.4657951466822610e+00 + -1.8318025872825934e+00 5.9844441047617547e-02 -3.7650834707096603e+00 + -1.8776823688462745e+00 -1.2418454329337791e-01 -4.0604360275622700e+00 + -1.9290440658927630e+00 -3.2693480343070025e-01 -4.3399379756372358e+00 + -1.9739384978520338e+00 -5.6818674610153064e-01 -4.5927848003471610e+00 + -1.9857785568870443e+00 -9.6021193375351244e-01 -4.7953999921628752e+00 + id 13379 + loc 7.2920835018157959e-01 7.6989620923995972e-01 380 + blend 0.0000000000000000e+00 + interp 4.7870295203692587e-01:3.6855132483198688e-01:5.5066287400241443e-02:4.7869816500740553e-01:8.4100058090545959e-01:4.6694256721126581e-01:1.1522591467911787e+00:4.6776575529710673e-01:1.9404361327684960e+00:3.3319503181549315e-01:2.2210057944198605e+00:4.5465137124812804e-01:2.9035289876898771e+00:4.5385011576623635e-01:3.3335650983265692e+00 + CVs 20 + -3.2438502032129929e-01 2.2086692495689331e-01 -7.6552009520565756e-01 + -5.9010911834438573e-01 3.5393658392264837e-01 -1.3405993446300253e+00 + -8.1342887218150417e-01 4.4915534931279488e-01 -1.8500398454530271e+00 + -1.0102737897665475e+00 5.2537843463142253e-01 -2.3457925774959345e+00 + -1.1775808603606375e+00 5.7656010639420452e-01 -2.8238442134888779e+00 + -1.3147696168572436e+00 5.9737594580280484e-01 -3.2835731133997097e+00 + -1.4213580373621466e+00 5.8504715521895667e-01 -3.7243542661598141e+00 + -1.4964303367759926e+00 5.4057566391785228e-01 -4.1472797522914595e+00 + -1.5411172217248847e+00 4.6707068581516809e-01 -4.5624334174302952e+00 + -1.5647705813459383e+00 3.7473065432575559e-01 -4.9832080384877324e+00 + -1.5835715785585556e+00 2.8152079978871214e-01 -5.4092208394229928e+00 + -1.6195523776728289e+00 2.0048995232658173e-01 -5.8394986337891943e+00 + -1.6930598051284065e+00 9.6175813864375570e-02 -6.2935275280769023e+00 + -1.7988888484406196e+00 -1.0967670857789980e-01 -6.7596111670930838e+00 + -1.9214340788661834e+00 -4.4058461127732240e-01 -7.1855014069922172e+00 + -2.0592520352896817e+00 -8.5296354472851510e-01 -7.5645204047341394e+00 + -2.2159953308315279e+00 -1.3173097934036280e+00 -7.9413770775513246e+00 + -2.4265482395796858e+00 -1.7964886413103316e+00 -8.3404301552554472e+00 + -2.7858789968560140e+00 -2.0626153719485947e+00 -8.6633638855488719e+00 + id 13380 + loc 3.4797129034996033e-01 6.0937613248825073e-01 378 + blend 0.0000000000000000e+00 + interp 4.4684769603492863e-01:4.4134361038986131e-01:2.0745513331298981e-01:3.9369667408349940e-01:8.3728128426809190e-01:4.3174732043181546e-01:1.3135306313246018e+00:2.6944370590999334e-01:1.8460592405525353e+00:3.5860667418838216e-01:2.5145357201391438e+00:4.1977260341187028e-01:3.0042724232957112e+00:4.4684322755796829e-01:3.4343845139743001e+00:4.0689262546841976e-01:3.9649387701989376e+00 + CVs 20 + 5.3008229740956403e-01 3.3770022585427539e-01 1.6069862708082111e-01 + 1.0215303902254869e+00 5.9566717876434216e-01 2.3587227202544636e-01 + 1.5217912631456265e+00 8.0930813915990041e-01 2.6558743831882853e-01 + 2.0541017566432607e+00 1.0056373610089699e+00 2.8358413114250480e-01 + 2.6093681411997842e+00 1.1827951714332801e+00 3.1973650213255855e-01 + 3.1726962244548345e+00 1.3195692543865798e+00 3.9898875664852029e-01 + 3.7252259787727739e+00 1.3896302997766803e+00 5.3366516757883176e-01 + 4.2395374153054455e+00 1.3772967635869748e+00 7.2139725532831478e-01 + 4.6786860927141483e+00 1.2839869070016958e+00 9.4122818676442932e-01 + 5.0074954704763508e+00 1.1326544082029328e+00 1.1571782769880929e+00 + 5.2120496897550179e+00 9.6640030411811595e-01 1.3397927447542446e+00 + 5.3088129303166784e+00 8.3379326091866490e-01 1.4855241951884313e+00 + 5.3398938381705978e+00 7.5460251568768522e-01 1.6219833035406193e+00 + 5.3503904654813041e+00 6.6957922386048940e-01 1.7900140823396018e+00 + 5.3542171898846682e+00 4.8001241750745471e-01 2.0001056930053220e+00 + 5.3438701488691676e+00 1.7197950483886393e-01 2.2488570591771095e+00 + 5.3126782294650710e+00 -1.9565535241222065e-01 2.5544062785584662e+00 + 5.2950939576050482e+00 -5.7556827680670564e-01 2.9201122074160804e+00 + 5.4052321137320360e+00 -8.3912390439969675e-01 3.2365592960113752e+00 + id 13381 + loc 7.8313267230987549e-01 7.4987608194351196e-01 403 + blend 0.0000000000000000e+00 + interp 4.7674046225429695e-01:2.8946004494164973e-01:2.0386865824543321e-01:3.0436001978565302e-01:1.0431308643460688e+00:4.3804599498620694e-01:1.9289341376612934e+00:3.1834622516562572e-01:2.4414465440658968e+00:4.7673569484967443e-01:2.9964073768631705e+00:4.7364944302537426e-01:3.2284798436971429e+00:3.0659828028895603e-01:3.7660015713472497e+00 + CVs 20 + -3.3858302234830787e-02 3.6646273358574344e-02 -1.1685248879848427e-01 + -6.4439194563340046e-02 9.0969947535188805e-02 -2.2113967557528835e-01 + -9.7607356897007419e-02 1.4613364222608810e-01 -3.1754310620889220e-01 + -1.4269415497407226e-01 1.9759522902507354e-01 -4.1380187008659186e-01 + -2.0246571551801076e-01 2.4615699224601240e-01 -5.0877428967936933e-01 + -2.7832352117392423e-01 2.9103310357240952e-01 -5.9984107307598911e-01 + -3.7168118729903393e-01 3.3227199995181567e-01 -6.8343248137952284e-01 + -4.8341119803517385e-01 3.7001505536608831e-01 -7.5510942744166887e-01 + -6.1338550405284475e-01 4.0431372663479037e-01 -8.0986626510382498e-01 + -7.5979142624021767e-01 4.3431881205430917e-01 -8.4306440424019580e-01 + -9.1925070849590806e-01 4.5902362321905271e-01 -8.5083128766482785e-01 + -1.0869094711657514e+00 4.7767377419342089e-01 -8.3049962559433455e-01 + -1.2565678449016244e+00 4.9061445491421324e-01 -7.8068441911069841e-01 + -1.4211818553753937e+00 4.9859411957609540e-01 -7.0111612878715246e-01 + -1.5731582594716105e+00 5.0232157840524860e-01 -5.9236431750211893e-01 + -1.7043737218953892e+00 5.0291029391065567e-01 -4.5685720479632208e-01 + -1.8067673145521290e+00 5.0164640454325027e-01 -2.9830976574648999e-01 + -1.8724545682503480e+00 4.9963401538567576e-01 -1.2153663241034546e-01 + -1.9665340544365320e+00 4.9580795543362355e-01 -1.3573019798126668e-02 + id 13382 + loc 5.2601909637451172e-01 3.0497097969055176e-01 400 + blend 0.0000000000000000e+00 + interp 4.1981512141838051e-01:3.4617359407414627e-01:4.3500915355047276e-01:4.1981092326716635e-01:1.1464579654574087e+00:3.5859689536294725e-01:2.0194272177035479e+00:3.0689551508991791e-01:2.5956038894104685e+00:2.7863365137285695e-01:3.0900124341095196e+00:3.5555621379853364e-01:3.9231769599218054e+00 + CVs 20 + 2.1498353840036796e-01 1.7918732519468744e-01 1.4416080644744173e-01 + 4.0733425825162661e-01 3.7275790714235812e-01 3.1734529350629881e-01 + 5.9401391617048149e-01 5.7102804515310479e-01 5.1577797531836000e-01 + 7.8044762006101343e-01 7.6643162962199063e-01 7.3881800474443393e-01 + 9.6546671175638310e-01 9.5713530952114823e-01 9.9049339390948399e-01 + 1.1495538654335786e+00 1.1442455350157552e+00 1.2698075952099481e+00 + 1.3342911054232340e+00 1.3280499187432964e+00 1.5743396494321953e+00 + 1.5197532770084416e+00 1.5007485421953497e+00 1.9049700527971054e+00 + 1.7023481919303578e+00 1.6467474302005312e+00 2.2633863786195927e+00 + 1.8742846201371082e+00 1.7493070848707153e+00 2.6469440578077608e+00 + 2.0226416847121511e+00 1.7929358829791013e+00 3.0492449424340711e+00 + 2.1302079236598832e+00 1.7620048778641404e+00 3.4604026501840117e+00 + 2.1817605073260311e+00 1.6439507595517859e+00 3.8620519119379972e+00 + 2.1718456791793050e+00 1.4364533873108909e+00 4.2260743179475471e+00 + 2.1061302551162187e+00 1.1483061476790022e+00 4.5213979566792233e+00 + 2.0007562545524511e+00 7.9560650424104229e-01 4.7192691651342500e+00 + 1.8838701046273456e+00 4.0757017571013421e-01 4.8043948731744415e+00 + 1.7827830961940565e+00 2.6859955256350432e-02 4.8052911054887950e+00 + 1.7267726229503446e+00 -2.8830118215463973e-01 4.8691160849570059e+00 + id 13383 + loc 7.2187077999114990e-01 2.8756919503211975e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5727525430164334e-01:3.4173061018452722e-01:2.5799695291017888e-02:2.8193945709595919e-01:9.0079847699695115e-01:2.9407867365036378e-01:1.6587846725370037e+00:4.5727068154910033e-01:2.4019231704997055e+00:2.9779136532227846e-01:2.9538306747836094e+00:3.0116593334876235e-01:3.4741966942519982e+00 + CVs 20 + -1.6349367483951388e-01 2.1648680615330518e-01 1.6745760836624562e-01 + -3.3503947843093179e-01 4.4460779253994009e-01 3.5395293328523103e-01 + -5.1807000203266251e-01 6.7691561384008958e-01 5.3940475059353488e-01 + -7.0916038451166763e-01 8.9858092561390490e-01 7.0273507641981892e-01 + -8.9688109647776126e-01 1.0937965131739922e+00 8.3191430152068868e-01 + -1.0675132050795539e+00 1.2509889027215138e+00 9.1622743457423694e-01 + -1.2153933875740925e+00 1.3704726906201050e+00 9.5377450137235187e-01 + -1.3530138644093563e+00 1.4569139956998569e+00 9.5674819710907766e-01 + -1.4780251996670162e+00 1.5224996588400443e+00 9.3073558886621088e-01 + -1.5430594098321619e+00 1.6557883550002881e+00 8.3363254151949862e-01 + -1.6194701580690716e+00 1.9918855429149853e+00 6.7255349642694917e-01 + -1.8315502500942253e+00 2.2957602561694443e+00 6.3036882745041534e-01 + -2.0662659894852089e+00 2.3919662814240734e+00 6.9634723275706600e-01 + -2.2815432146487433e+00 2.3558380329722235e+00 8.1349986546173969e-01 + -2.4089296843437324e+00 2.2293238272517133e+00 9.4198515188540366e-01 + -2.3819961876596949e+00 2.0659545154815411e+00 1.0274059322828939e+00 + -2.2336328292888750e+00 1.9217755742130127e+00 1.0630880812471821e+00 + -1.9793142451840062e+00 1.8259209404284418e+00 1.0595746632306906e+00 + -1.9459793201353814e+00 1.7317539306329122e+00 9.6841959494675534e-01 + id 13384 + loc 7.3988896608352661e-01 8.4659832715988159e-01 401 + blend 0.0000000000000000e+00 + interp 4.7236447948133692e-01:3.6350062855045429e-01:2.0363003875142149e-01:3.7193621929752302e-01:1.0261513674470975e+00:4.5697753045041650e-01:1.8295849355554412e+00:3.8194619010219805e-01:2.1936092318017910e+00:3.7231266284078074e-01:2.9991317805330415e+00:4.7235975583654211e-01:3.6114984797798995e+00 + CVs 20 + -7.8910940985504052e-03 3.0616064287083400e-01 -3.0025153761456103e-01 + -3.5238414685771213e-03 5.8931759803057837e-01 -5.9009974553673161e-01 + 1.3878777008562604e-02 8.4666199474948556e-01 -8.7998310937732904e-01 + 4.3418301312108554e-02 1.0719295696578783e+00 -1.1715388959480002e+00 + 8.6512439584535028e-02 1.2640445578487409e+00 -1.4691362685533125e+00 + 1.4099557271268265e-01 1.4301605029886615e+00 -1.7849871896791754e+00 + 1.8950977635991384e-01 1.5813398567438735e+00 -2.1281701228194638e+00 + 2.0477970681782887e-01 1.7256784830410192e+00 -2.5007020810323368e+00 + 1.5726130172889086e-01 1.8581597838496364e+00 -2.8976955057316940e+00 + 2.2747629369023525e-02 1.9613290529508229e+00 -3.3004449155537254e+00 + -2.0436318179987789e-01 2.0220844099941302e+00 -3.6772143790097336e+00 + -5.1136654856326169e-01 2.0356033668430000e+00 -3.9964374215581144e+00 + -8.7448195862109757e-01 1.9883968252300899e+00 -4.2560679116242044e+00 + -1.2649000828086954e+00 1.8494718264279166e+00 -4.4866163222916606e+00 + -1.6536674878991504e+00 1.5956081041576557e+00 -4.6839722101838248e+00 + -2.0135284206776660e+00 1.2383839059782744e+00 -4.7859033299823484e+00 + -2.3359648744451795e+00 8.0935726055101831e-01 -4.7940472608302853e+00 + -2.6334620847511401e+00 3.4612770009586025e-01 -4.8674575811287148e+00 + -2.8763214646238358e+00 -8.8884061085507088e-02 -5.2157926188031096e+00 + id 13385 + loc 8.9841639995574951e-01 9.0074700117111206e-01 373 + blend 0.0000000000000000e+00 + interp 5.6803412492935068e-01:4.6280624040603080e-01:3.1986680159353797e-03:5.6802844458810142e-01:6.8308265481807862e-01:4.4092411974647522e-01:1.1910525580227056e+00:3.4906595329647999e-01:2.3100831485780238e+00:4.9752393330270001e-01:3.1153062696987202e+00 + CVs 20 + -2.2401791647601141e-01 2.5198670102686466e-01 -1.0820039195519664e-01 + -4.4863531243900096e-01 5.1277691697699712e-01 -2.2569033910245548e-01 + -6.6140515820391232e-01 7.8978300090171727e-01 -3.6333077751894288e-01 + -8.4590247188861034e-01 1.0891356366257603e+00 -5.2920611528405215e-01 + -9.8310348817059690e-01 1.4115573021232461e+00 -7.2768508216680861e-01 + -1.0580975977470759e+00 1.7450497138317185e+00 -9.6496896538946042e-01 + -1.0680380448116473e+00 2.0646849577928728e+00 -1.2500271713775697e+00 + -1.0167452960447179e+00 2.3425544251635557e+00 -1.5854118254630927e+00 + -9.0997034937071408e-01 2.5611362098602029e+00 -1.9591343730567035e+00 + -7.5485111541348904e-01 2.7166702426894522e+00 -2.3506509314511623e+00 + -5.5848216894140368e-01 2.8163531972335272e+00 -2.7445473986604609e+00 + -3.2455867484847722e-01 2.8641688228259436e+00 -3.1463893233824711e+00 + -5.4392201330213830e-02 2.8327186423058084e+00 -3.5809856186995686e+00 + 2.3306160811063958e-01 2.6647391868202308e+00 -4.0676477030601479e+00 + 4.6769015295195482e-01 2.3299281090645301e+00 -4.6159472012572413e+00 + 5.2549365434519235e-01 1.8828232049903677e+00 -5.2220593977103924e+00 + 3.0373127426336033e-01 1.4689593823535541e+00 -5.8407724426232424e+00 + -1.7328492863519829e-01 1.2646990932604516e+00 -6.3712305837844108e+00 + -4.3024620464350705e-01 1.2912248953403993e+00 -6.6093013310885622e+00 + id 13386 + loc 9.3527352809906006e-01 3.1822785735130310e-02 393 + blend 0.0000000000000000e+00 + interp 4.1506226142492170e-01:3.2435292035716823e-01:3.9667872596864928e-01:3.6745724951715902e-01:1.0574521566205195e+00:2.4415161767590374e-01:1.9680799558135793e+00:3.6200616939260455e-01:3.0262398365517349e+00:4.1505811080230748e-01:3.7259708581313475e+00 + CVs 20 + 2.9106193832974409e-01 2.7548316170584519e-01 5.7343429241296463e-02 + 5.8602722839770283e-01 5.9233038349043743e-01 1.4871980794152728e-01 + 8.7957842727683799e-01 9.3337664415012889e-01 2.5840988999858694e-01 + 1.1667137306963948e+00 1.2917371139872893e+00 3.9403989128291111e-01 + 1.4403118160113628e+00 1.6570976019614501e+00 5.7743471360087195e-01 + 1.6968281568292454e+00 2.0044097443157760e+00 8.3012138704191707e-01 + 1.9337881362653051e+00 2.3018762426110424e+00 1.1621828276286548e+00 + 2.1452324855957130e+00 2.5215036588847122e+00 1.5647632257077302e+00 + 2.3256834082766433e+00 2.6387544657743809e+00 2.0144572739818969e+00 + 2.4767680645551495e+00 2.6279597653337570e+00 2.4763895373577860e+00 + 2.6032551791124581e+00 2.4614927978225909e+00 2.9033575555242455e+00 + 2.6956498526596184e+00 2.1225265822490140e+00 3.2302882019366574e+00 + 2.7323680335538443e+00 1.6637279032013232e+00 3.3966561100440167e+00 + 2.7349164891813613e+00 1.2245582699493243e+00 3.4530422617206487e+00 + 2.7708985370765093e+00 8.8192579960170137e-01 3.5484827562280707e+00 + 2.8845824259712471e+00 6.2763048411947642e-01 3.7429436910016127e+00 + 3.1127420473638510e+00 4.5372590348301767e-01 3.9910046591530963e+00 + 3.4355656145432700e+00 3.5747417657646574e-01 4.2172636428418793e+00 + 3.5696610615779085e+00 2.2884189153183732e-01 4.3443371864821287e+00 + id 13387 + loc 5.4040962457656860e-01 7.6470911502838135e-01 376 + blend 0.0000000000000000e+00 + interp 4.7630655722944731e-01:3.7467946319642303e-01:1.1016798048246201e-01:4.3936937231834222e-01:9.2709423505732991e-01:4.7092645659672805e-01:1.2415534618511064e+00:3.8172684383998023e-01:1.9956014169536600e+00:3.7390697740374496e-01:2.2337321422314238e+00:2.8752761761712103e-01:2.7658324833464283e+00:3.9356600699166056e-01:3.2238631340075674e+00:4.7630179416387503e-01:3.8414546142453956e+00 + CVs 20 + -7.0620212532042453e-02 4.5525468520508494e-01 5.8054606150549737e-01 + -9.9433228999838419e-03 7.7238269760540035e-01 1.1301952664084540e+00 + 1.6927061679105676e-01 9.4102322862473908e-01 1.6994330072078256e+00 + 4.1275937253977790e-01 1.0594914922290979e+00 2.2889469841678509e+00 + 6.3885910717823480e-01 1.2201922126433549e+00 2.8944028299911340e+00 + 7.5875403549255938e-01 1.4431416076400281e+00 3.5243266586322011e+00 + 7.1049820280118448e-01 1.7058389493976052e+00 4.1523970340975715e+00 + 4.8592453454113227e-01 1.9762569687025078e+00 4.7199420393430760e+00 + 1.1843754392327632e-01 2.2151801432145946e+00 5.1942685462331735e+00 + -3.5018315952086909e-01 2.3807353563255638e+00 5.5908416914991292e+00 + -8.9166357259220785e-01 2.4350094612606341e+00 5.9325484676256339e+00 + -1.4750113025278271e+00 2.3415731971100264e+00 6.2090264849253467e+00 + -2.0306433530543946e+00 2.0903993150775779e+00 6.3821475860043337e+00 + -2.4706196889060914e+00 1.7293245702161646e+00 6.4264122896064286e+00 + -2.7472527656544488e+00 1.3399540257646794e+00 6.3701293651461999e+00 + -2.8887796578954323e+00 9.7907188444845161e-01 6.2735305480969146e+00 + -2.9613136505916930e+00 6.6660261062147574e-01 6.1596745531392720e+00 + -2.9880696209902657e+00 3.7162851794234264e-01 6.0504444367977799e+00 + -2.8647433129414992e+00 1.0172989879503813e-01 6.0335931344316789e+00 + id 13388 + loc 1.4451994001865387e-01 2.4233266711235046e-01 396 + blend 0.0000000000000000e+00 + interp 4.9042742082901897e-01:3.3682594047422804e-01:7.4401301922201180e-01:3.1758064570506078e-01:1.1545103067336926e+00:4.9042251655481067e-01:2.0096970095738711e+00:3.5835315243477889e-01:2.6563711506790786e+00:3.1819321247601634e-01:3.0940581666949374e+00:3.6540646646482411e-01:3.9469651395798842e+00 + CVs 20 + -1.8602767211686697e-01 1.8702770199705221e-01 -7.2520141553067763e-01 + -3.3180774321566286e-01 2.4522124001437923e-01 -1.2839385650602446e+00 + -4.5454645103269364e-01 2.6126743759278348e-01 -1.7882598556908291e+00 + -5.6499778098719144e-01 2.6495863743760184e-01 -2.2840522009511335e+00 + -6.6554696473754604e-01 2.5255578890109365e-01 -2.7674861193835625e+00 + -7.6329495507591938e-01 2.1957351816842974e-01 -3.2379977428600735e+00 + -8.6525559186517931e-01 1.5922205892389352e-01 -3.6933646383755434e+00 + -9.7485412429616902e-01 6.1480818779987123e-02 -4.1282775854480054e+00 + -1.0937645419729571e+00 -8.6343244724218282e-02 -4.5381310111450688e+00 + -1.2245433665346375e+00 -2.9752199699741744e-01 -4.9160174055732595e+00 + -1.3683245369086565e+00 -5.7895602628951859e-01 -5.2439904323487490e+00 + -1.5204843432381732e+00 -9.2437050845258262e-01 -5.5001171868190317e+00 + -1.6728520067612718e+00 -1.3192666240532642e+00 -5.6763832901480180e+00 + -1.8206206956627780e+00 -1.7494070227520471e+00 -5.7781562060538096e+00 + -1.9601349446818037e+00 -2.2002064381816160e+00 -5.8086756245097426e+00 + -2.0835510483587196e+00 -2.6475337010503992e+00 -5.7672501068607556e+00 + -2.1790441000606333e+00 -3.0668506292355300e+00 -5.6589797312041714e+00 + -2.2451692813267012e+00 -3.4511678520529498e+00 -5.5018113282370065e+00 + -2.3513298389889932e+00 -3.9268046362185265e+00 -5.3919695652824640e+00 + id 13389 + loc 5.7594776153564453e-01 7.9714202880859375e-01 399 + blend 0.0000000000000000e+00 + interp 4.5941928745997801e-01:3.4159855987416088e-01:4.2157823239550596e-01:3.5876140467829243e-01:1.2477215289369665e+00:4.5941469326710344e-01:1.9671965816359904e+00:3.2824974859742112e-01:2.1981016217333811e+00:4.2978755544887920e-01:2.8569645399254684e+00:3.6225705141000986e-01:3.0790137053744271e+00:3.6538580390541975e-01:3.7376277805973217e+00 + CVs 20 + -1.8378161902242837e-01 3.5192050646020950e-01 -2.6089599200806196e-01 + -3.5061714588712756e-01 6.9774165174612779e-01 -5.5089257338739905e-01 + -5.2678536945773080e-01 1.0189749868210916e+00 -8.7115406192718570e-01 + -7.2632527030845895e-01 1.2934807859725574e+00 -1.2190245666141561e+00 + -9.5524565107033677e-01 1.4978183471629236e+00 -1.5873082529686895e+00 + -1.2113541476821681e+00 1.6111259245770990e+00 -1.9611625194027957e+00 + -1.4874809214561722e+00 1.6284972208071875e+00 -2.3222562532870223e+00 + -1.7784392728429388e+00 1.5647275240301237e+00 -2.6560691690673446e+00 + -2.0707044415836409e+00 1.4342779789524553e+00 -2.9507063769863615e+00 + -2.3379776964319530e+00 1.2444935164396451e+00 -3.1963411666411625e+00 + -2.5765285731245116e+00 1.0098345301795735e+00 -3.3991761760628827e+00 + -2.8221579842071782e+00 7.4386284364786026e-01 -3.5841118266312386e+00 + -3.1014159925078792e+00 4.6057686431806960e-01 -3.7639657043599426e+00 + -3.4093026162105837e+00 1.7937895451535063e-01 -3.9354860757475452e+00 + -3.7418538971947006e+00 -9.6574656444844198e-02 -4.1019845622102924e+00 + -4.1219140054071701e+00 -3.5694846767828992e-01 -4.2741195182025615e+00 + -4.5594007500516325e+00 -5.1085338767407873e-01 -4.4517829130888149e+00 + -4.9930635035513102e+00 -4.7950465696513689e-01 -4.6293759320327323e+00 + -5.4406805574662318e+00 -3.7786705451194014e-01 -4.8293886367219105e+00 + id 13390 + loc 1.1000386625528336e-01 4.7064745426177979e-01 374 + blend 0.0000000000000000e+00 + interp 4.9812381719584153e-01:4.7204656757873159e-01:3.8824143983884896e-02:3.8138635458116038e-01:7.2487293441613176e-01:4.9811883595766959e-01:1.6555596299965480e+00:4.1222289373800908e-01:2.0722172766635607e+00:3.9263003889531228e-01:2.8642416790632517e+00:3.7023743494226141e-01:3.6835395637067254e+00 + CVs 20 + -2.8204174874333110e-01 3.3997776253891460e-01 6.0649815803818163e-01 + -4.1934626498923505e-01 5.5158624341163209e-01 1.1192256486626737e+00 + -4.4614600306220031e-01 6.4003484617051387e-01 1.6252076852805650e+00 + -3.9805651787249263e-01 6.4886199158671809e-01 2.1691558274231673e+00 + -3.2104700393545083e-01 6.4115832273058926e-01 2.7493068897442314e+00 + -2.7880315854888038e-01 6.5232050635967165e-01 3.3639235962897596e+00 + -3.3273402769582205e-01 6.7930040585554652e-01 4.0147290778439348e+00 + -5.2682861666040159e-01 7.1168529611976261e-01 4.6847796772086685e+00 + -8.7019893130690140e-01 7.3869297977614679e-01 5.3235809037326121e+00 + -1.3248632956949118e+00 7.3914161055104133e-01 5.8762784850653142e+00 + -1.8248861440695343e+00 6.8627597705257237e-01 6.3115484692380450e+00 + -2.3041706844176288e+00 5.6334274941881590e-01 6.6148731076523921e+00 + -2.7154976607188290e+00 3.7971667996998182e-01 6.7895638304112289e+00 + -3.0537206701712400e+00 1.6250779130697390e-01 6.8568346515582483e+00 + -3.3189366803522766e+00 -6.0272445530186847e-02 6.8350302994473227e+00 + -3.4873126484615717e+00 -2.3951492208385883e-01 6.7565038991448301e+00 + -3.5594795741193064e+00 -3.0235586928496350e-01 6.6596295926584137e+00 + -3.6152594707738204e+00 -3.0298937638340151e-01 6.5433864293605364e+00 + -3.5524525366747124e+00 -7.0883268761797869e-01 6.5084242928952474e+00 + id 13391 + loc 6.9444906711578369e-01 3.8858228921890259e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0012729185502588e-01:2.8892977545980131e-01:3.4236574354159599e-01:2.7503449111154782e-01:1.1599384049896284e+00:4.0012329058210733e-01:1.9724607398126659e+00:3.2184479359239604e-01:2.4026486200028452e+00:2.9051530040608631e-01:3.0204766518598749e+00:2.7499594856325044e-01:3.8048956884777394e+00 + CVs 20 + 3.8154460305440396e-02 3.9897208575085752e-01 -4.1860696862763830e-01 + 3.3285205585354603e-02 7.4514621441687479e-01 -6.9459354990339051e-01 + 1.1342571135809790e-02 1.0436431030117179e+00 -9.0185583837730099e-01 + -3.3415278383379626e-02 1.3509593819677612e+00 -1.0906348614784824e+00 + -1.0474718052864304e-01 1.6658557971542101e+00 -1.2502244497984596e+00 + -2.0644956684100499e-01 1.9871025651820919e+00 -1.3661898778211881e+00 + -3.4797423815629824e-01 2.3166764798924482e+00 -1.4140192705603569e+00 + -5.5323945526189111e-01 2.6516885386504150e+00 -1.3382950683176007e+00 + -8.5144617283631363e-01 2.9213438588819125e+00 -1.0134301506871028e+00 + -1.1346067548558629e+00 2.8697905473346648e+00 -4.3032116141413979e-01 + -1.2318481734179185e+00 2.5189422061592199e+00 3.5205459578403708e-02 + -1.2194236232811326e+00 2.1212796166048697e+00 3.0154135325649722e-01 + -1.1696735784940862e+00 1.7368525036816740e+00 4.5743584103750329e-01 + -1.1108002806687869e+00 1.3756646812272886e+00 5.6004764589990041e-01 + -1.0470307552826081e+00 1.0496901782868788e+00 6.5771122422457584e-01 + -9.7299006094642637e-01 8.0967358388331889e-01 8.0611121964151156e-01 + -9.0597998996539009e-01 7.9636401039412708e-01 1.0422540057100917e+00 + -9.4575594709830779e-01 1.2460469325957559e+00 1.1956880236997796e+00 + -9.2345074435147145e-01 1.2254994399822146e+00 1.3538236263953698e+00 + id 13392 + loc 7.4521565437316895e-01 6.2225610017776489e-02 409 + blend 0.0000000000000000e+00 + interp 5.2925121918533014e-01:2.9771515689956429e-01:5.0935975780617815e-02:2.7276789798591877e-01:9.1477240938350568e-01:3.4385878846375512e-01:1.9923276409970818e+00:5.2924592667313830e-01:2.7581832674418840e+00:3.9038170725290328e-01:2.9999305558472509e+00:2.8974766523341527e-01:3.5764195860278956e+00 + CVs 20 + -1.6595774045907424e-01 -8.1364996919411181e-02 1.4220703684671032e-01 + -3.5473102045163224e-01 -1.4503740964733880e-01 2.8649311121161258e-01 + -5.5093591400266806e-01 -1.9762791427215398e-01 4.1333547804587695e-01 + -7.4445860811136078e-01 -2.4404267069870134e-01 5.1026935070943646e-01 + -9.3004344142689832e-01 -2.8598623970848708e-01 5.7748782967636192e-01 + -1.1017521655625442e+00 -3.2343342807682529e-01 6.1873747841262450e-01 + -1.2416803245044907e+00 -3.5014308358640711e-01 6.3550191021565317e-01 + -1.3264270287312836e+00 -3.5322683692391033e-01 6.2650933235629491e-01 + -1.3532844770542920e+00 -3.1659649686949887e-01 5.8387743952683846e-01 + -1.3415000443634133e+00 -2.2198059496766342e-01 4.9242805758298375e-01 + -1.3229484531248590e+00 -5.5665416839109194e-02 3.4688999511487606e-01 + -1.3446109269449900e+00 1.6298303275623960e-01 1.6641235377764785e-01 + -1.4414704500864888e+00 3.8009543780222121e-01 -2.1017507773387956e-02 + -1.6168498437729881e+00 5.5322677358244288e-01 -2.0080385115351188e-01 + -1.8546943243551024e+00 6.7122349356773892e-01 -3.6517748254273308e-01 + -2.1260565977562238e+00 7.4990749732785444e-01 -4.9935434743825746e-01 + -2.4007067727516667e+00 8.0302858444875758e-01 -5.9082776311397223e-01 + -2.6577473764716411e+00 7.9040364262623186e-01 -6.5335485233776225e-01 + -2.8127799177784132e+00 5.0311124599174906e-01 -7.3046253681637152e-01 + id 13393 + loc 8.2112413644790649e-01 4.5165437459945679e-01 402 + blend 0.0000000000000000e+00 + interp 3.9805440351315335e-01:3.0855465761296946e-01:6.6990514426007464e-01:3.5502885670410783e-01:1.0223296048753299e+00:2.4177119108751730e-01:1.7564432467334667e+00:2.9016567329631721e-01:2.5834911885694360e+00:3.9805042296911824e-01:2.9996532631948147e+00:2.5301739210940472e-01:3.6828698669290594e+00 + CVs 20 + 1.3738872322701606e-01 3.0465365290132962e-01 2.2883702295663602e-01 + 3.1117583488379141e-01 6.1844523479696933e-01 4.6387075205915868e-01 + 5.0377611221462848e-01 9.4022592458042309e-01 7.0692980387723092e-01 + 7.2387027144871230e-01 1.2461957163588608e+00 9.3662897121680921e-01 + 9.8699099666614731e-01 1.5138668971463798e+00 1.1292187115266858e+00 + 1.2901997450658733e+00 1.7481244902785187e+00 1.2894884551566503e+00 + 1.5849754452785143e+00 1.8967671111500291e+00 1.4593625407579500e+00 + 1.8520486649218642e+00 1.9368046222206279e+00 1.6291435870719111e+00 + 2.1919003978748535e+00 1.9122040973463295e+00 1.8556403803800379e+00 + 2.5555453998874365e+00 1.7923828535247794e+00 2.1440253282650348e+00 + 2.8398957717106690e+00 1.5842715690515048e+00 2.4582172911099871e+00 + 3.0185370469143216e+00 1.3526949853218104e+00 2.7560703794387602e+00 + 3.1044008414374988e+00 1.1527302377443120e+00 3.0155654035450614e+00 + 3.1159192199047738e+00 9.7995973445545992e-01 3.2345147330185768e+00 + 3.0887094973937494e+00 7.9059038131370307e-01 3.4246938169106032e+00 + 3.1006267861233465e+00 5.6038987224651160e-01 3.6019551701585542e+00 + 3.2059051906857938e+00 3.1142644792884988e-01 3.7695011938386811e+00 + 3.3796686966126166e+00 5.7498466347948529e-02 3.9475052086649787e+00 + 3.5559797375446367e+00 -1.8523752956947859e-01 4.2141908822843144e+00 + id 13394 + loc 3.3580416440963745e-01 5.0495254993438721e-01 380 + blend 0.0000000000000000e+00 + interp 4.5315285249750825e-01:3.0811739878324512e-01:5.4389329250371932e-01:3.2684364063599480e-01:1.4559492460291679e+00:4.5314832096898328e-01:1.9951172685533378e+00:4.3297275854732670e-01:2.3328211645910737e+00:2.6413009902362261e-01:2.9907596541960402e+00:4.2214379721607387e-01:3.3127061780290341e+00:3.4731552339240140e-01:3.9908556348285917e+00 + CVs 20 + -4.7692548770190835e-01 2.8256103632391083e-01 -4.6049826856887172e-01 + -8.9286020224975027e-01 4.7361280255422200e-01 -7.9758483127760971e-01 + -1.2989361780453887e+00 6.1921240146423995e-01 -1.1067778615419572e+00 + -1.7179035272633980e+00 7.4096564270474075e-01 -1.4338146633239177e+00 + -2.1410809742741095e+00 8.3316119775664466e-01 -1.7824363042447771e+00 + -2.5589988987210170e+00 8.8447776424743030e-01 -2.1509139398945991e+00 + -2.9649145314627563e+00 8.8122808018792975e-01 -2.5322669248135474e+00 + -3.3506087489441905e+00 8.1375753823370500e-01 -2.9146919069533030e+00 + -3.7063267955664934e+00 6.8051871747954329e-01 -3.2807098347476709e+00 + -4.0238132335235246e+00 4.9118390191687400e-01 -3.6080171860031842e+00 + -4.2971257036316519e+00 2.6676184647394630e-01 -3.8769312937996485e+00 + -4.5223531098704575e+00 3.1188611465137850e-02 -4.0807902089498223e+00 + -4.7047855808815164e+00 -2.0229808154454743e-01 -4.2333693108903336e+00 + -4.8593527733949706e+00 -4.5962824274352787e-01 -4.3646717096690688e+00 + -4.9950208961404119e+00 -7.8397602224882279e-01 -4.4972986811685471e+00 + -5.1142765517649176e+00 -1.1557198032791467e+00 -4.6464256528010068e+00 + -5.2127893265003244e+00 -1.4972595153642181e+00 -4.8199404775841526e+00 + -5.2922536677997343e+00 -1.7555452154035143e+00 -5.0111788089715406e+00 + -5.4880722284593375e+00 -1.9773176114911992e+00 -5.2228783057193375e+00 + id 13395 + loc 4.0553882718086243e-01 5.8949196338653564e-01 375 + blend 0.0000000000000000e+00 + interp 5.1701060292949319e-01:5.1700543282346390e-01:6.1710342160571630e-01:3.1009373259265166e-01:9.9999977265037143e-01:4.4924366524013348e-01:1.9535915175713705e+00:2.8546925465439338e-01:2.9072111017145934e+00:3.2785396803604305e-01:3.8232970606883576e+00 + CVs 20 + -4.8887551627319392e-01 4.0309435437530178e-01 -5.5780713411941671e-02 + -9.5227005850002477e-01 6.4675121078221209e-01 -5.6804128113468688e-02 + -1.4360211422772380e+00 7.1981740973476249e-01 -5.6166112975719051e-03 + -1.9572262693769140e+00 6.8669961292211523e-01 8.7010411607764071e-02 + -2.4957152486016723e+00 6.4081496023204743e-01 1.9790408666269993e-01 + -3.0247189112043698e+00 6.4029689236796861e-01 2.9139300167508231e-01 + -3.5284613305631574e+00 6.9842087419811372e-01 3.3739198363549927e-01 + -3.9985606503485305e+00 8.1340334446307749e-01 3.2608397560067481e-01 + -4.4206398048915636e+00 9.8347319376122710e-01 2.6631057171387928e-01 + -4.7814535787084385e+00 1.2077033664204220e+00 1.7376744718904469e-01 + -5.0905997051315701e+00 1.4840621826363503e+00 6.2781699563087545e-02 + -5.3835789518318800e+00 1.8183729674684397e+00 -6.9800886710867260e-02 + -5.7008145125278791e+00 2.1990122540524761e+00 -2.7373688644189231e-01 + -6.0548730150811743e+00 2.5580893128736450e+00 -6.1673408874318580e-01 + -6.3832175362168915e+00 2.8307736413834808e+00 -1.1224327738625868e+00 + -6.4818939025608540e+00 3.0275782555073762e+00 -1.7357425888838021e+00 + -6.1835023942322991e+00 3.1687269120225903e+00 -2.4071627924345647e+00 + -5.7568853778407263e+00 3.0404853438227573e+00 -2.9634245769291048e+00 + -5.8421392566102046e+00 2.7321927221562934e+00 -2.8581495773563717e+00 + id 13396 + loc 9.7563242912292480e-01 5.1168996095657349e-01 395 + blend 0.0000000000000000e+00 + interp 4.6121001214745011e-01:2.7046326981667329e-01:1.2234282557288823e-01:3.9656138883557679e-01:8.3699072208962910e-01:3.0160805049341383e-01:1.1241475431115555e+00:4.6120540004732868e-01:1.7024799365937850e+00:1.9040762015218063e-01:2.8055943176305345e+00:4.1113192682934274e-01:3.2867063977108710e+00 + CVs 20 + 5.6692943798208717e-01 2.3483932590193848e-01 -2.9127959183153096e-01 + 9.9455667732679820e-01 4.2465706457178459e-01 -5.9756660539074291e-01 + 1.3990241319749976e+00 6.0860161730099060e-01 -9.1420572539515876e-01 + 1.8292109188066858e+00 8.0386383904442593e-01 -1.2397500698239745e+00 + 2.2896942129726821e+00 1.0030663106834146e+00 -1.5653075689768345e+00 + 2.7852777657521637e+00 1.1896250079748696e+00 -1.8843279457606990e+00 + 3.3231781022638849e+00 1.3389607097098062e+00 -2.1920132012460716e+00 + 3.9068899949335085e+00 1.4215090232687717e+00 -2.4799285963327584e+00 + 4.5247292011362426e+00 1.4091252151098275e+00 -2.7386112099259572e+00 + 5.1496052958431626e+00 1.2812038397669667e+00 -2.9648988643790637e+00 + 5.7395538524146126e+00 1.0293052773558857e+00 -3.1567798010338981e+00 + 6.2530809924849979e+00 6.6164852017205833e-01 -3.3095471916101991e+00 + 6.6566762288268899e+00 2.2137706360650755e-01 -3.4221972924585362e+00 + 6.9433326119443119e+00 -2.0045267827845459e-01 -3.5066386418445301e+00 + 7.1374827058846453e+00 -5.2108986005601476e-01 -3.5823294231791554e+00 + 7.2521220755750146e+00 -7.1474904994962918e-01 -3.6554246556714429e+00 + 7.2868967524856734e+00 -7.9211621903462248e-01 -3.7015374121929758e+00 + 7.2703416691370428e+00 -8.0196406120587493e-01 -3.6892518095652305e+00 + 7.2838268731803506e+00 -8.7437032062897924e-01 -3.8168840669255926e+00 + id 13397 + loc 3.6298418045043945e-01 1.9493657350540161e-01 407 + blend 0.0000000000000000e+00 + interp 1.1698390469078355e+00:4.8297145477525755e-01:4.7722972083267345e-01:3.9483944464434856e-01:1.0200235535690620e+00:4.7166711872394629e-01:1.5433783664897565e+00:4.6652649168794919e-01:1.9746617801650110e+00:1.1698290469078354e+00:1.9915903160549502e+00:8.1668697064716167e-01:3.9959296114776564e+00:3.2523470427626650e-01:3.9996982988914667e+00 + CVs 20 + 8.0911711697658588e-03 3.9828172267801820e-01 -4.4169696916996332e-01 + 2.5887006669488836e-02 6.4690144409866168e-01 -6.6174773166331369e-01 + 5.8371279514673434e-02 8.1812327642571847e-01 -8.2158606505001031e-01 + 1.0897894343456202e-01 9.6080691348672853e-01 -9.9104488944320779e-01 + 1.8230712914637925e-01 1.0664248950500568e+00 -1.1610032224973270e+00 + 2.7980475394773252e-01 1.1264323759825507e+00 -1.3222896655266461e+00 + 3.9646314096697571e-01 1.1366750002549053e+00 -1.4678941228581681e+00 + 5.2279868399676577e-01 1.1024399505882831e+00 -1.5978096450031178e+00 + 6.5290558705493873e-01 1.0357787718190881e+00 -1.7202321700713887e+00 + 7.8624738738164923e-01 9.4670635318410845e-01 -1.8450796142374564e+00 + 9.2247090916049168e-01 8.4022860730147841e-01 -1.9775435783900686e+00 + 1.0589355310506738e+00 7.1952283024775665e-01 -2.1174791707857001e+00 + 1.1933205967205647e+00 5.9094238819505129e-01 -2.2639786012089407e+00 + 1.3261443649112301e+00 4.6630521199922481e-01 -2.4186718266240268e+00 + 1.4550558915414620e+00 3.5890509578305424e-01 -2.5804457712752402e+00 + 1.5700512022783546e+00 2.7677389404513442e-01 -2.7393670247333541e+00 + 1.6631881877475190e+00 2.1923262181042136e-01 -2.8817885229511551e+00 + 1.7401700941272125e+00 1.7736510275077144e-01 -3.0008173575247725e+00 + 1.8219766441485106e+00 1.3512552056710148e-01 -3.1055698200320676e+00 + id 13398 + loc 9.2812848091125488e-01 9.6698957681655884e-01 378 + blend 0.0000000000000000e+00 + interp 5.9292884339841168e-01:3.1881405504896509e-01:5.9077493579749785e-02:2.1564682340747743e-01:9.1741378231326220e-01:1.7825614034527784e-01:1.8949216081425821e+00:5.9292291410997777e-01:2.5299622231871393e+00:5.7774579073463417e-01:3.0260691209554951e+00:4.8864149704928428e-01:3.2725782075683201e+00 + CVs 20 + 5.7616978248013706e-01 3.3663817063396390e-01 2.7228172330021505e-02 + 1.0700901753032492e+00 5.7983180807051460e-01 1.4460496063671169e-02 + 1.5596449453764987e+00 7.6601453821924448e-01 -3.3508932345498954e-02 + 2.0748472312713582e+00 9.3521128705807455e-01 -1.0323716007950412e-01 + 2.6009349510611912e+00 1.1128345094345375e+00 -1.6694297265382507e-01 + 3.1281345216386169e+00 1.3038362629719249e+00 -1.9458726141418992e-01 + 3.6571601792324073e+00 1.4953574881078706e+00 -1.6278625691421023e-01 + 4.1879536302564091e+00 1.6709715600717274e+00 -5.6914721705265015e-02 + 4.7184809808479695e+00 1.8156732313458768e+00 1.3024733155667678e-01 + 5.2526231106527126e+00 1.9097504368841487e+00 4.0065016647372065e-01 + 5.7994792879868076e+00 1.9205701257897045e+00 7.4758711863771266e-01 + 6.3612187722527267e+00 1.7984350040667492e+00 1.1514327889432345e+00 + 6.9073478866833220e+00 1.4995788971693464e+00 1.5732348973811021e+00 + 7.3800911904391526e+00 1.0509640204665933e+00 1.9610110991558067e+00 + 7.7593134483667789e+00 5.5522379214689499e-01 2.2884932591204654e+00 + 8.0840402809145555e+00 9.0903260510137862e-02 2.5588254538930597e+00 + 8.4142812954272621e+00 -3.3118545339036132e-01 2.7633542970649367e+00 + 8.7805954294199786e+00 -7.3029609685662766e-01 2.8875618891849415e+00 + 9.1211006635918999e+00 -1.1890738066551227e+00 2.9941679885480088e+00 + id 13399 + loc 6.1590147018432617e-01 2.3186263442039490e-01 412 + blend 0.0000000000000000e+00 + interp 5.0401376066067127e-01:3.4431922450374580e-01:1.3433059651530632e-02:4.2959443395240060e-01:8.4176107372186160e-01:5.0400872052306467e-01:1.0384207207258365e+00:4.6415531889966544e-01:1.4295409386886444e+00:2.9840078576754231e-01:1.9305749380015933e+00:3.2464729663817937e-01:2.3879090983823925e+00:3.9284562761890363e-01:3.0230760664181258e+00 + CVs 20 + -5.5453586777044994e-01 1.8202375952433153e-01 1.8832913743586277e-01 + -9.4782179615102879e-01 3.1005065018584316e-01 3.5822982251145635e-01 + -1.2941217394011786e+00 4.2620513459185960e-01 5.2495891587400467e-01 + -1.6477314914328978e+00 5.4702864086095926e-01 6.9874414031309884e-01 + -2.0078713397826831e+00 6.6418543009711439e-01 8.7636737875544157e-01 + -2.3728906179000879e+00 7.7040132922462590e-01 1.0532714680961410e+00 + -2.7416677479951663e+00 8.6114098914314263e-01 1.2242831000993075e+00 + -3.1135637022552189e+00 9.3473825490585360e-01 1.3848420077853887e+00 + -3.4863067412482698e+00 9.9258484648222856e-01 1.5317659064658873e+00 + -3.8562434882346719e+00 1.0388147882318901e+00 1.6631837049946028e+00 + -4.2261343933600681e+00 1.0750478260453158e+00 1.7769969546536499e+00 + -4.6104593935242582e+00 1.0963258507980647e+00 1.8736354555031953e+00 + -5.0139546394868031e+00 1.0865076197515089e+00 1.9664416356576204e+00 + -5.4155505821523233e+00 1.0287328499338564e+00 2.0817518574202243e+00 + -5.7916205195188653e+00 9.2113756335936992e-01 2.2348115222171274e+00 + -6.1229912640028088e+00 7.7795657863703993e-01 2.4209437077359262e+00 + -6.3919776926213121e+00 6.2265018098750624e-01 2.6269248372831671e+00 + -6.5926930070255878e+00 4.7171096535693957e-01 2.8449299406769888e+00 + -6.7209574683918483e+00 3.1640751898584929e-01 3.0946977478134334e+00 + id 13400 + loc 6.6914731264114380e-01 3.5949021577835083e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6046281918946647e-01:2.8232961701590570e-01:1.8826151990892215e-02:3.0255057028218424e-01:8.1178513324389989e-01:3.0116593334876235e-01:1.4693302393879695e+00:2.8087133421611798e-01:2.0641842761313294e+00:4.6045821456127461e-01:2.9342418635737229e+00:2.8950024293347348e-01:3.4555659483188474e+00 + CVs 20 + -1.0445607235342050e-01 2.4125041410063108e-01 2.4483481389746392e-01 + -2.3425158593979264e-01 4.7428404402849306e-01 4.6951124373349429e-01 + -3.7533037911996225e-01 7.1314525439301646e-01 6.7600457636664946e-01 + -5.1728501296284091e-01 9.6480357428269548e-01 8.6536833399588842e-01 + -6.5809278896892176e-01 1.2350165578845078e+00 1.0419076382085866e+00 + -7.9323541777258921e-01 1.5257320685275471e+00 1.2193783657133102e+00 + -9.2097503732140606e-01 1.8271653076551986e+00 1.4257136162865125e+00 + -1.0401889276872351e+00 2.1190363772716037e+00 1.6782698816192405e+00 + -1.1512206381168255e+00 2.3826423869865456e+00 1.9738014381005944e+00 + -1.2636944352233881e+00 2.5918430694547832e+00 2.3118601537487580e+00 + -1.3925753206691198e+00 2.7064690748650007e+00 2.6858373148777170e+00 + -1.5437780856047296e+00 2.7134565722413146e+00 3.0659011853317133e+00 + -1.7205653228560287e+00 2.6407702834643541e+00 3.4338881281211511e+00 + -1.9335789216542825e+00 2.5116502792514868e+00 3.8086840838878713e+00 + -2.1739221046620041e+00 2.3185585360655057e+00 4.2210214026844541e+00 + -2.3872205827560165e+00 2.0546480307283055e+00 4.6763363520719787e+00 + -2.5052097430841562e+00 1.7536447837383580e+00 5.1574628564687286e+00 + -2.4847934258155142e+00 1.4830255543720816e+00 5.6329794719599224e+00 + -2.3249938395508227e+00 1.3267741300773461e+00 6.0006961640449541e+00 + id 13401 + loc 5.8240389823913574e-01 7.7413463592529297e-01 403 + blend 0.0000000000000000e+00 + interp 3.2131422771917229e-01:3.1569424031794774e-01:4.7283849926188826e-01:3.0338266487442417e-01:1.5577930412249854e+00:3.0356982668068488e-01:2.3470437789569827e+00:3.2131101457689509e-01:3.0004735787127097e+00:2.6161594079387540e-01:3.9387562346355258e+00 + CVs 20 + -5.8242861902711163e-02 -1.0975989402710676e-04 2.4378022267032028e-02 + -1.0402655616654520e-01 -1.4203786304557778e-03 4.8807599792097631e-02 + -1.2262655977070101e-01 3.6313240915918782e-03 7.7344267996360905e-02 + -1.2355136219095267e-01 1.2419798849589825e-02 1.0511487424139199e-01 + -1.0945745291678477e-01 2.7493827859459842e-02 1.2965537815310357e-01 + -8.1361163300692568e-02 5.0534478533355992e-02 1.4815103491927620e-01 + -3.9538690652409836e-02 8.1278334491486567e-02 1.5681841775593056e-01 + 1.6240473283187049e-02 1.1840138278462756e-01 1.5104394073382327e-01 + 8.5068916359810343e-02 1.6202993094372420e-01 1.2699724639596707e-01 + 1.6435074518792864e-01 2.1309288290728304e-01 8.1664480690281593e-02 + 2.5002257126927835e-01 2.7217620973533091e-01 1.2584193460856950e-02 + 3.3708405128497687e-01 3.3786440856295791e-01 -8.3016870847489099e-02 + 4.1964863605958480e-01 4.0700208119445830e-01 -2.0868994539395591e-01 + 4.9036948143028780e-01 4.7509981305149662e-01 -3.6777674334773686e-01 + 5.4018053065952454e-01 5.3673833200360366e-01 -5.6269081283523514e-01 + 5.5808089158134411e-01 5.8682972411137957e-01 -7.9386575341191379e-01 + 5.3099510111801829e-01 6.2524898730753309e-01 -1.0579020118851548e+00 + 4.4657930163427828e-01 6.5702218109202515e-01 -1.3436961678920871e+00 + 4.8034883519720339e-01 7.0278506995516798e-01 -1.4029879089329818e+00 + id 13402 + loc 8.1989133358001709e-01 2.3274829983711243e-01 400 + blend 0.0000000000000000e+00 + interp 4.7817447937859625e-01:4.1963055669987709e-01:1.6375798120672003e-01:3.2258060747947248e-01:9.2629848537958437e-01:2.5303231910819846e-01:1.4356635134579543e+00:3.3655635339071671e-01:2.2539965659131402e+00:3.9657693756385759e-01:3.0257670740369456e+00:4.7816969763380246e-01:3.8154763538435188e+00 + CVs 20 + 1.5823581811870946e-01 9.4842077225070820e-02 1.4758371676042928e-01 + 3.1635412255146661e-01 2.3624398142294811e-01 3.2709667132519754e-01 + 4.6115641370849547e-01 3.9818533879631873e-01 5.1730209053282927e-01 + 5.8910623851749411e-01 5.6415808141947665e-01 7.0755131256846582e-01 + 7.0288402376328818e-01 7.2825497718420684e-01 8.9603282245902161e-01 + 8.0466240069172901e-01 8.8595565887037964e-01 1.0808595983171301e+00 + 8.9639680732457849e-01 1.0349183396676074e+00 1.2625160684978707e+00 + 9.8025481561685668e-01 1.1726777142774840e+00 1.4454425927008621e+00 + 1.0581194049164324e+00 1.2946905500250621e+00 1.6367482053161275e+00 + 1.1322368689972628e+00 1.3944654733839401e+00 1.8416968668609974e+00 + 1.2063824814185309e+00 1.4640491063191492e+00 2.0588559732746674e+00 + 1.2849016981047359e+00 1.4951674982256686e+00 2.2783249664350551e+00 + 1.3704431438603213e+00 1.4840682163805066e+00 2.4863736157705842e+00 + 1.4636174352184155e+00 1.4344938898410104e+00 2.6731776930746998e+00 + 1.5650225648175737e+00 1.3547448701853531e+00 2.8332823099280913e+00 + 1.6786636087481890e+00 1.2543984083466224e+00 2.9632713921372860e+00 + 1.8090181038735629e+00 1.1395452141426778e+00 3.0608726315340329e+00 + 1.9485113124907940e+00 1.0085230640777079e+00 3.1218616793882856e+00 + 2.0578513166021328e+00 8.3875194220826299e-01 3.1053590487793734e+00 + id 13403 + loc 3.6172002553939819e-01 7.8802770376205444e-01 401 + blend 0.0000000000000000e+00 + interp 4.4511275915904464e-01:4.0216620132039133e-01:3.1850897159144609e-01:3.8575455283236015e-01:9.9728308789731979e-01:4.2807341630398438e-01:1.3937311375456798e+00:3.5559540210855450e-01:2.1221061012077671e+00:3.5858926727312690e-01:2.8990834990992465e+00:4.4510830803145307e-01:3.5456658890894279e+00:3.8719194139806251e-01:3.9891330482288998e+00 + CVs 20 + -1.9189232546055529e-01 2.7197342178755923e-01 -3.0821238817030389e-02 + -3.7963303107712632e-01 5.6981462035887054e-01 -7.3974826538641819e-02 + -5.6697069113027632e-01 9.0036133854998113e-01 -1.2702539018465717e-01 + -7.5282729213173183e-01 1.2704072229604728e+00 -2.0336547590038145e-01 + -9.1138583630202019e-01 1.6385280177648225e+00 -3.0634290601703307e-01 + -1.0129946989324443e+00 1.9501121708074378e+00 -4.0922015186533023e-01 + -1.0556703677367314e+00 2.2023340372124820e+00 -4.9924041708938205e-01 + -1.0618633719247335e+00 2.4236201072665460e+00 -5.9212359703199335e-01 + -1.0629705646837566e+00 2.6271850697285770e+00 -7.0471604630133300e-01 + -1.0970283973706054e+00 2.8051816288587967e+00 -8.4021349160041237e-01 + -1.2168939848096434e+00 2.9467029560052689e+00 -9.8224220678293173e-01 + -1.4841050431308551e+00 3.0330557286475073e+00 -1.0952516103317986e+00 + -1.8785292965393503e+00 3.0416420273154170e+00 -1.1701645579149698e+00 + -2.2913393172816483e+00 2.9728516471108373e+00 -1.2433766629610026e+00 + -2.6824653402236160e+00 2.8094089524985733e+00 -1.3148718023872841e+00 + -3.1460002185095912e+00 2.4453645455990296e+00 -1.3130598789710390e+00 + -3.7662733285039716e+00 1.8081918088043170e+00 -1.2789452404803618e+00 + -4.3899892357575006e+00 1.1162193046002722e+00 -1.4482835730929879e+00 + -4.5502860789969777e+00 8.6292392238847904e-01 -1.8198911947910972e+00 + id 13404 + loc 5.2073043584823608e-01 1.4821451902389526e-01 376 + blend 0.0000000000000000e+00 + interp 4.4012176837666761e-01:3.9570324369155319e-01:8.5341106737994954e-01:3.3866171250400240e-01:1.2009549823583145e+00:3.5811349010055327e-01:1.5229995568618400e+00:4.1222289373800908e-01:2.0869115086488770e+00:4.0300240626402384e-01:3.0018929958998233e+00:4.4011736715898386e-01:3.4698476704064758e+00:2.7267497240760463e-01:3.9988014638828169e+00 + CVs 20 + 2.0356262184492710e-01 3.7706547393046769e-01 -5.6375719700859872e-01 + 3.0156608622612829e-01 6.3150672889854698e-01 -1.0424326973057614e+00 + 3.1599328814747496e-01 7.6258648944093010e-01 -1.5091651996143240e+00 + 2.8162134355841717e-01 8.0445779522174732e-01 -1.9830027641971655e+00 + 2.3411204031477939e-01 8.0991530198909067e-01 -2.4466397049775326e+00 + 2.0797247844373923e-01 8.1342976328733241e-01 -2.8904173923935872e+00 + 2.2995430920906912e-01 8.1603844752527843e-01 -3.3137714346259846e+00 + 3.0954617355857117e-01 8.0646487824473811e-01 -3.7087441769609319e+00 + 4.3539291568890259e-01 7.8739813252747992e-01 -4.0605677820830310e+00 + 5.8951123474338052e-01 7.8107205784821354e-01 -4.3563260934460732e+00 + 7.4389857957498307e-01 8.2138234585770387e-01 -4.5978290022622197e+00 + 8.6801297961464041e-01 9.5238059487298177e-01 -4.8178752174198900e+00 + 9.8256651017514740e-01 1.1977760578909893e+00 -5.0807136006620528e+00 + 1.1716794204732768e+00 1.4981466287551466e+00 -5.4477447211437475e+00 + 1.5232077719908046e+00 1.7463009170979853e+00 -5.9015712845382371e+00 + 2.0975746787990874e+00 1.8674582880674306e+00 -6.2560586216184948e+00 + 2.8816770761457682e+00 1.8461298582125860e+00 -6.2789756664559082e+00 + 3.6761376103323200e+00 1.5385496180467899e+00 -6.0586431631433131e+00 + 3.6656075745482513e+00 9.7011163570477210e-01 -6.2633272696098210e+00 + id 13405 + loc 7.6609176397323608e-01 3.3856666088104248e-01 1078 + blend 0.0000000000000000e+00 + interp 3.5387229138534382e-01:2.7931641854957240e-01:3.8285059718264203e-01:2.8917238192647354e-01:1.1063211291264092e+00:3.5386875266242995e-01:1.9793027026450356e+00:3.0476044038062849e-01:2.4526641797770772e+00:2.9924681546606974e-01:3.0314191630198888e+00:3.1018261136791170e-01:3.9354390790998930e+00 + CVs 20 + -7.7702355375601190e-02 3.9448600436697279e-01 8.9984162534865658e-02 + -1.9698449670847329e-01 7.9090029659972405e-01 2.0602858646190725e-01 + -3.5089879133940149e-01 1.1709571229759648e+00 3.8051387762875205e-01 + -5.3498666849479248e-01 1.5090832214809524e+00 6.3032013849315249e-01 + -7.4265558925987663e-01 1.7764619459608086e+00 9.5858907288321804e-01 + -9.5908878385538043e-01 1.9446230231564514e+00 1.3561973520001647e+00 + -1.1622356135261853e+00 1.9926548431549758e+00 1.8022316984887610e+00 + -1.3259629606280652e+00 1.9110341715010088e+00 2.2676910665491961e+00 + -1.4266504303002099e+00 1.7018211766665767e+00 2.7166433718591136e+00 + -1.4536156253943266e+00 1.3806427668573149e+00 3.1079093503010657e+00 + -1.4136108497974553e+00 9.7573327375661367e-01 3.4032168852391331e+00 + -1.3371563822115988e+00 5.2960392929035582e-01 3.5816646836673454e+00 + -1.2691953581038944e+00 9.0799394771915676e-02 3.6681464881901236e+00 + -1.2229598743731214e+00 -3.0525100240892411e-01 3.7478649005755509e+00 + -1.1683197332338622e+00 -6.2974498815700830e-01 3.9492798726066480e+00 + -1.0922703141053769e+00 -7.9412198007065005e-01 4.3618500754750853e+00 + -1.0418160159191820e+00 -6.6546551504412754e-01 4.8950560562961325e+00 + -1.0956610663496238e+00 -8.1711494569733922e-02 5.3318853439249114e+00 + -1.1091667103489065e+00 -4.4872852331828472e-02 5.5085270482309623e+00 + id 13406 + loc 7.8047400712966919e-01 9.7496145963668823e-01 396 + blend 0.0000000000000000e+00 + interp 3.6999413905968004e-01:2.7129216668898143e-01:1.3768229372650431e-03:2.9898640645646513e-01:6.9764276878126541e-01:3.2762307635836330e-01:1.6317997947176004e+00:2.7140600737610093e-01:2.1363580884858440e+00:2.6991831417576484e-01:3.0019064145597509e+00:3.6999043911828944e-01:3.6085590436653598e+00 + CVs 20 + 1.0231717210367639e+00 2.5465661907153625e-01 -3.2384969224974680e-01 + 1.6992980466352132e+00 3.2038001722328285e-01 -5.7041333308831699e-01 + 2.2894063918867009e+00 3.0550458075313547e-01 -8.0021013097696181e-01 + 2.8972178492650040e+00 2.4762809847559764e-01 -1.0358334281113861e+00 + 3.5100924575313401e+00 1.3296945091208268e-01 -1.2772195700828850e+00 + 4.1144659944506641e+00 -4.6761463882482590e-02 -1.5261957481975712e+00 + 4.6945855677712860e+00 -2.9287618900612511e-01 -1.7846561039434392e+00 + 5.2321264334744688e+00 -6.0277252962933592e-01 -2.0486862587663870e+00 + 5.7087603355322596e+00 -9.7174991302350500e-01 -2.3074589938791661e+00 + 6.1018274079576571e+00 -1.3853422281962176e+00 -2.5474920198762971e+00 + 6.3944485273903897e+00 -1.8174201368518585e+00 -2.7607897734782005e+00 + 6.5876603517062318e+00 -2.2406963952759424e+00 -2.9461530527913351e+00 + 6.6961999286996354e+00 -2.6350591670322538e+00 -3.1051406359460074e+00 + 6.7476151153373358e+00 -2.9896656275868327e+00 -3.2323224364765197e+00 + 6.7660651080278562e+00 -3.3013442583894577e+00 -3.3221460134772771e+00 + 6.7703286168763270e+00 -3.5659429966304379e+00 -3.3761668571437156e+00 + 6.7737982446211991e+00 -3.7834504529204516e+00 -3.4044067107185443e+00 + 6.7762932224399854e+00 -3.9735747328015121e+00 -3.4193516919631510e+00 + 6.6955885784640836e+00 -4.2548256311572086e+00 -3.4152539314080679e+00 + id 13407 + loc 9.6396291255950928e-01 5.4101216793060303e-01 374 + blend 0.0000000000000000e+00 + interp 4.3307845849919413e-01:3.9218319706752369e-01:6.8725666633554738e-01:3.8693770184122062e-01:1.1486871975116786e+00:3.6415128520212403e-01:2.0054033039875456e+00:3.6754323298579089e-01:2.1447907989284687e+00:4.3307412771460918e-01:2.7968607812405200e+00:1.4520216425994756e-01:3.4082860653980855e+00 + CVs 20 + -7.7156899935347822e-01 4.1814951160445990e-01 -5.4716177799371601e-01 + -1.4299454911424139e+00 6.9194230726332562e-01 -9.3371247077901598e-01 + -2.0788707215308446e+00 8.8729094634985117e-01 -1.2277652264008709e+00 + -2.7324385190107665e+00 1.0462542805226975e+00 -1.4755788735892703e+00 + -3.3665519411911711e+00 1.1645151801769016e+00 -1.6983672404083932e+00 + -3.9839116417667686e+00 1.2143660840283341e+00 -1.9111771471142034e+00 + -4.5882580362275007e+00 1.1659488031306007e+00 -2.1219556340378602e+00 + -5.1717157141883687e+00 1.0024734695509105e+00 -2.3352055764913748e+00 + -5.7200032744634131e+00 7.2225698159601226e-01 -2.5526777572924488e+00 + -6.2181321156662399e+00 3.3851281687236767e-01 -2.7639239404395664e+00 + -6.6611454635232796e+00 -1.1954765323450989e-01 -2.9383723257386940e+00 + -7.0553661196336517e+00 -6.1566643462019277e-01 -3.0399548766456252e+00 + -7.4054415201657715e+00 -1.1210141792350075e+00 -3.0507893495730727e+00 + -7.7235131905455834e+00 -1.6343309191681055e+00 -2.9763606018562596e+00 + -8.0236561818041814e+00 -2.1571484404101069e+00 -2.8441142878784320e+00 + -8.3123745006957339e+00 -2.6420044719117599e+00 -2.6958480739309931e+00 + -8.5731392455183233e+00 -3.0121663495609674e+00 -2.5507635100679971e+00 + -8.8036465307325749e+00 -3.2945006528405378e+00 -2.4261087453063701e+00 + -9.0827360119660661e+00 -3.6822885406167445e+00 -2.3590639023044475e+00 + id 13408 + loc 5.6153637170791626e-01 3.4062197804450989e-01 1080 + blend 0.0000000000000000e+00 + interp 4.3348034466037177e-01:4.3347600985692519e-01:3.8133314368703486e-03:2.7892577697167642e-01:4.6340928343860843e-01:2.8508453518796562e-01:1.0919023001512103e+00:2.7638323239231150e-01:1.9998362836701256e+00:2.8441628381532880e-01:2.6570969890420342e+00:2.9367334309750248e-01:3.1418643765682597e+00 + CVs 20 + 4.0086281255702821e-02 4.2507125837869153e-01 -4.5151093285659222e-01 + 4.9421641232096164e-02 8.0260872570824771e-01 -7.5059537675946619e-01 + 4.9818254015472407e-02 1.1359070502482926e+00 -9.7255009453473151e-01 + 3.9175209031431873e-02 1.4863185875787863e+00 -1.1822818491706091e+00 + 1.1386397558079936e-02 1.8505186773816349e+00 -1.3687921646093750e+00 + -4.0643438385701891e-02 2.2233464245658565e+00 -1.5158721204244956e+00 + -1.2881993033330169e-01 2.6028522476481699e+00 -1.5974595739424551e+00 + -2.7814214891480593e-01 2.9879566748725965e+00 -1.5595450708937655e+00 + -5.3986939864500416e-01 3.3378299104044826e+00 -1.2471716909953341e+00 + -8.4542306354612851e-01 3.2762882560967972e+00 -4.2080253957608771e-01 + -8.0227842933992011e-01 2.6324738390261140e+00 2.3132219211430649e-01 + -6.2824275495418325e-01 2.0898405302852283e+00 4.7075268383305280e-01 + -4.6924257176859380e-01 1.6526553399698465e+00 6.0074705964644703e-01 + -3.3973154189780985e-01 1.2534326187489011e+00 7.1267805861545652e-01 + -2.3553776522134642e-01 8.9132761154239959e-01 8.4751484440902869e-01 + -1.4149658946632149e-01 6.2984188310937195e-01 1.0484149157159137e+00 + -4.8937928908310863e-02 6.3197317531237351e-01 1.3560071172176551e+00 + -3.0196774935848880e-02 1.2300012153382180e+00 1.6743722129875178e+00 + 3.0038504051591891e-02 1.1700423509813029e+00 1.8773647672255556e+00 + id 13409 + loc 4.5396214723587036e-01 1.0431646555662155e-01 373 + blend 0.0000000000000000e+00 + interp 3.8687211564566842e-01:2.8592138977612996e-01:1.0897395392611686e-01:3.3086000836926255e-01:1.4288212049276123e+00:3.8686824692451199e-01:2.0499408364205260e+00:2.8361052189647667e-01:2.6665727525777703e+00:3.5700866252064994e-01:3.0311212806913326e+00:3.0578598684650510e-01:3.6850270656557949e+00 + CVs 20 + -9.3805184525136934e-02 6.5813636645718276e-01 3.8700743985874025e-01 + -1.7095153197679372e-01 1.2953029136077761e+00 7.7002340111557765e-01 + -2.7284680029818065e-01 1.9198471046353756e+00 1.1326904313334114e+00 + -4.5749230237949384e-01 2.5325433843754044e+00 1.3979886072232066e+00 + -7.4397895890439369e-01 3.1114362470322887e+00 1.4722571062752734e+00 + -1.1146573053328857e+00 3.5908680766458003e+00 1.3144973659028554e+00 + -1.5188714339645148e+00 3.8327158814829287e+00 9.2547696831269932e-01 + -1.8869148037718808e+00 3.7523036676206400e+00 3.8915126389501697e-01 + -2.1867227902903283e+00 3.3624327888854850e+00 -2.1105690315607828e-01 + -2.4035360010149809e+00 2.6895233064604560e+00 -8.3095446172880583e-01 + -2.5142700852773272e+00 1.7819831405300146e+00 -1.4497248579936621e+00 + -2.4736089839331816e+00 7.1975371577963898e-01 -2.0556765231300740e+00 + -2.2631726754849657e+00 -3.3081784146237758e-01 -2.7026860970719770e+00 + -1.9650532639750722e+00 -1.1393556380204668e+00 -3.4736818349740117e+00 + -1.8261116326705480e+00 -1.4223498962494581e+00 -4.3115090680434323e+00 + -1.9759226033808810e+00 -1.1494799149533017e+00 -4.9260661518350970e+00 + -2.2532262765983049e+00 -6.5077614336353751e-01 -5.2628542445078939e+00 + -2.5764889007930321e+00 -1.2738565833320559e-01 -5.4767503112775593e+00 + -3.0269403241347801e+00 3.3725371353753530e-01 -5.8506360211000565e+00 + id 13410 + loc 5.2462989091873169e-01 4.5993289351463318e-01 402 + blend 0.0000000000000000e+00 + interp 4.0645409835790469e-01:3.0276276213447018e-01:4.3018404506890762e-01:4.0645003381692113e-01:9.9744962065627285e-01:3.0777848001792768e-01:1.9642262700999014e+00:3.3937998498419153e-01:2.5253232698725152e+00:3.5867568595620641e-01:3.0428730673708744e+00:2.8540442504430180e-01:3.9520997906436630e+00 + CVs 20 + 6.5749532454332030e-02 2.7536538412299771e-01 1.4690311450462265e-01 + 1.4670092244281185e-01 5.4782222698273064e-01 3.2623391718226774e-01 + 2.2346318299656281e-01 8.0888811823869089e-01 5.3281012556336727e-01 + 2.9364504395147351e-01 1.0493467474503386e+00 7.5849339843861630e-01 + 3.7198177458847820e-01 1.2554178718065481e+00 9.8671433028049127e-01 + 4.6807997596809864e-01 1.4147636665289829e+00 1.1945092840047240e+00 + 5.8077542585044717e-01 1.5201155873482861e+00 1.3598623570625656e+00 + 7.0520656168486517e-01 1.5721388513982371e+00 1.4668805361550219e+00 + 8.3391680087668341e-01 1.5903857633476817e+00 1.5102249093817552e+00 + 9.6374251407545042e-01 1.6144395526745208e+00 1.4949272195741696e+00 + 1.1033535120000344e+00 1.6146829619061709e+00 1.4707978576972616e+00 + 1.2046206759607765e+00 1.4389655375514137e+00 1.5146143462602799e+00 + 1.2330497412674264e+00 1.0065976442678051e+00 1.6481611210750269e+00 + 1.2858576026994126e+00 3.5972540965234073e-01 1.8695427623240477e+00 + 1.5048442898134828e+00 -3.7010376754765595e-01 2.1552657281881391e+00 + 1.9177311827526937e+00 -9.8320987237405422e-01 2.4396061951048278e+00 + 2.4175552805607445e+00 -1.3805194654501407e+00 2.6898729303123368e+00 + 2.8895142926933057e+00 -1.6019306280342067e+00 2.9576221906794919e+00 + 3.1982003736982865e+00 -1.6815566110055531e+00 3.3336018121272315e+00 + id 13411 + loc 4.4004073739051819e-01 2.7189132571220398e-01 380 + blend 0.0000000000000000e+00 + interp 4.4935843563035932e-01:4.4935394204600304e-01:3.0984628206196374e-01:3.9927337095959387e-01:9.9464387627102835e-01:4.3120970389229030e-01:1.5352464682513767e+00:4.3944844045899822e-01:2.0049351269672675e+00:3.4616684287769556e-01:2.6929387495112813e+00:4.1103723539283893e-01:3.0959058868088061e+00:2.8853630628770877e-01:3.8351806468937761e+00 + CVs 20 + -5.4227772320387002e-01 4.5705116228977410e-01 6.2510951328247466e-01 + -9.5226884271676648e-01 7.8352824625013695e-01 1.1898525047378614e+00 + -1.3412247044287151e+00 1.0367037368100771e+00 1.7432732807464817e+00 + -1.7619006317457195e+00 1.2349469378026519e+00 2.3193386988658786e+00 + -2.2219885908389041e+00 1.3666938996428764e+00 2.9119608454167047e+00 + -2.7194198750035703e+00 1.4135075767189522e+00 3.5088145319686066e+00 + -3.2433485622204357e+00 1.3585643632266837e+00 4.0860758918969386e+00 + -3.7765000235210016e+00 1.1965963549695604e+00 4.6103634397659734e+00 + -4.2869923266881766e+00 9.4136340327644996e-01 5.0569562873877620e+00 + -4.7355553477808661e+00 6.1564719994274286e-01 5.4215542450279433e+00 + -5.0911184079317078e+00 2.3364225337881939e-01 5.7103388659623144e+00 + -5.3424552102798177e+00 -1.8925839837909830e-01 5.9241690048600955e+00 + -5.4950092601169747e+00 -6.1681813062717161e-01 6.0669139016824580e+00 + -5.5718749595130745e+00 -9.9761106156679036e-01 6.1568427226766982e+00 + -5.5982088813469799e+00 -1.3124755933512189e+00 6.2109554493125039e+00 + -5.5799107294741477e+00 -1.5803933653115494e+00 6.2287081867760072e+00 + -5.5275529530307965e+00 -1.8175681438395679e+00 6.1969061233412281e+00 + -5.4706166329237078e+00 -2.0433098424897200e+00 6.1163090381908720e+00 + -5.4215512888771613e+00 -2.3272447841327000e+00 6.1470852691365625e+00 + id 13412 + loc 9.2374372482299805e-01 1.0864943265914917e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3477434744001381e-01:3.0782480601661977e-01:1.4447786917449301e-01:2.9919857272235206e-01:1.1096083458320321e+00:2.8986619673507602e-01:2.0001913616149074e+00:4.3476999969653946e-01:2.9217464117131717e+00:3.9310065891964918e-01:3.2169564566320457e+00:2.7374412811868204e-01:3.8323827122423957e+00 + CVs 20 + 3.6546822378929533e-02 3.2993545838640104e-01 3.0782551105563860e-01 + 1.6333415268034557e-02 6.2864262478037358e-01 5.8586051312402398e-01 + -5.1617262371892902e-02 9.1669137420464408e-01 8.3835427734586709e-01 + -1.6020138311603838e-01 1.2003664661833966e+00 1.0488044620862307e+00 + -2.7256739473690472e-01 1.4668968110141871e+00 1.1898452364913665e+00 + -3.2763775128826056e-01 1.6940874807924584e+00 1.2554251102809437e+00 + -3.1858559231907424e-01 1.8817607448510971e+00 1.2698644734811193e+00 + -2.6853244037232682e-01 2.0796409366048416e+00 1.2687722649663720e+00 + -1.7016477125992235e-01 2.3207990151016760e+00 1.2818767464009198e+00 + -6.3354373222290761e-04 2.6003399703882333e+00 1.3501320615925814e+00 + 2.5695014750792966e-01 2.8654650484377764e+00 1.5197653148584516e+00 + 5.7948064213723227e-01 3.0436830447221812e+00 1.7910415636258865e+00 + 9.3547572140409097e-01 3.1015156900530370e+00 2.1393118157143447e+00 + 1.3009176209155451e+00 3.0176857667001409e+00 2.5399282703843169e+00 + 1.6453317117770321e+00 2.7821934452564014e+00 2.9694781445487690e+00 + 1.9377563011354506e+00 2.3729804064014113e+00 3.4262661226436695e+00 + 2.1187127936091157e+00 1.7428498554503125e+00 3.8703954168430803e+00 + 2.1265314704477900e+00 1.0174614124233594e+00 4.1642481114050103e+00 + 2.0995827301991197e+00 7.4660328485339633e-01 4.2654705936273638e+00 + id 13413 + loc 8.8272619247436523e-01 1.2351765483617783e-01 415 + blend 0.0000000000000000e+00 + interp 4.9969340271861773e-01:3.9811508517164118e-01:3.4163069785443323e-01:3.8529195127177707e-01:1.0178960680465090e+00:4.9968840578459056e-01:1.3765946504842503e+00:3.9360901825744782e-01:2.0013585076149365e+00:3.5624859985317692e-01:2.9378531297991715e+00:3.4816685411836779e-01:3.9252883383043300e+00 + CVs 20 + -1.8664275979188799e-01 1.4345945397383084e-01 3.0677706339259231e-02 + -3.5968685540573586e-01 2.7926719129672473e-01 5.9613772769883250e-02 + -5.2848776234589634e-01 4.2028178433747376e-01 6.6172335070255356e-02 + -6.9626764351985027e-01 5.6957249729963122e-01 4.0331965482784393e-02 + -8.5861056117233270e-01 7.2127077541366624e-01 -2.0775760832864310e-02 + -1.0081123681933408e+00 8.6891259590415126e-01 -1.1863521313049680e-01 + -1.1377933687146418e+00 1.0079124724008162e+00 -2.5221865574658381e-01 + -1.2433943627525188e+00 1.1358816696127942e+00 -4.1724847790403391e-01 + -1.3205910119384059e+00 1.2507205467646365e+00 -6.0619420382330347e-01 + -1.3671372913002036e+00 1.3514916215207222e+00 -8.1126953732568563e-01 + -1.4013670300901708e+00 1.4434092912573719e+00 -1.0421239153759407e+00 + -1.4790417264949074e+00 1.5340448555839181e+00 -1.3385262212555129e+00 + -1.6766513884692351e+00 1.6112837667949780e+00 -1.7138360916627531e+00 + -2.0087276557526934e+00 1.6427333031310769e+00 -2.0915244202108170e+00 + -2.4124500389629935e+00 1.6158706925542989e+00 -2.4037286746265671e+00 + -2.8649104801930978e+00 1.5319252924519164e+00 -2.6431327290742588e+00 + -3.3668223276684595e+00 1.3902052175242874e+00 -2.7993647136647235e+00 + -3.8699971881619497e+00 1.2072729027511317e+00 -2.8666924500034927e+00 + -4.0839597333488600e+00 1.1004344931775316e+00 -2.9791873309264552e+00 + id 13414 + loc 1.1371520347893238e-02 2.5155248120427132e-02 409 + blend 0.0000000000000000e+00 + interp 4.5997854771353774e-01:1.8352730998428907e-01:9.9813401688967185e-01:2.7612797868884831e-01:1.7580135167030790e+00:4.5997394792806062e-01:2.2730047060261107e+00:3.1957761495209053e-01:2.9660600210718204e+00:4.1212393067510777e-01:3.3438653463913721e+00:2.9943448277831963e-01:3.9609188610624395e+00 + CVs 20 + -2.6159730121876978e-01 2.1772117125664128e-01 -2.3350493443179121e-01 + -5.1019850659994892e-01 4.3971801086536849e-01 -4.6207136916869640e-01 + -7.5125253249719726e-01 6.7735740533437327e-01 -7.0600503810262683e-01 + -9.8871464544497367e-01 9.1680455856225418e-01 -9.6114383573458062e-01 + -1.2394306123039924e+00 1.1356858222987241e+00 -1.2159779673994844e+00 + -1.5259681880529210e+00 1.3166072817191805e+00 -1.4681174234832022e+00 + -1.8633435546362416e+00 1.4418456851090833e+00 -1.7227756022150857e+00 + -2.2472660560807962e+00 1.4874103161945667e+00 -1.9915950793612001e+00 + -2.6419639519035205e+00 1.4333747661621419e+00 -2.2883051272223272e+00 + -2.9942817475881576e+00 1.2772774456807774e+00 -2.6149733299559275e+00 + -3.2549296015668374e+00 1.0317674159195533e+00 -2.9582591106434464e+00 + -3.4035000952468812e+00 7.1711055156771830e-01 -3.3102940071732823e+00 + -3.4723883477567377e+00 3.5418466935053172e-01 -3.6802421874854687e+00 + -3.5246389098354203e+00 -3.5737656329065004e-02 -4.0742263622339001e+00 + -3.6131620360350847e+00 -4.1690545738733720e-01 -4.4801522146580286e+00 + -3.7578811318977747e+00 -7.3088508108493233e-01 -4.8627581447517425e+00 + -3.9496375786382369e+00 -9.4888993805856869e-01 -5.1895907477472329e+00 + -4.1955264668604588e+00 -1.1106993988153726e+00 -5.4872173676658598e+00 + -4.5425827036147126e+00 -1.3010322642363463e+00 -5.8807952108122317e+00 + id 13415 + loc 6.8913424015045166e-01 5.8925259113311768e-01 393 + blend 0.0000000000000000e+00 + interp 4.2684208244438260e-01:4.2618908619661089e-01:4.2681441985601010e-01:2.6554897368490887e-01:1.1117304770727883e+00:4.2683781402355819e-01:1.9893118407531225e+00:2.5814837617259301e-01:2.6620209769477743e+00:4.1922817898435816e-01:3.0067339111753251e+00:2.8037401156931485e-01:3.9989291970352081e+00 + CVs 20 + -3.1208059833136403e-01 3.6363801796177075e-01 -3.4166010596006480e-01 + -5.7326403906956935e-01 7.0764918497737650e-01 -6.5904012025876435e-01 + -8.0782017536550144e-01 1.0422096890096695e+00 -9.8388529635715760e-01 + -1.0376774833424818e+00 1.3589672148542615e+00 -1.3294706232856639e+00 + -1.2818726943533219e+00 1.6432402212714912e+00 -1.6936071608307797e+00 + -1.5563685228319504e+00 1.8885990747336332e+00 -2.0682471969893714e+00 + -1.8707388098466451e+00 2.0900038219561878e+00 -2.4399435436304007e+00 + -2.2257034927156738e+00 2.2316291633272121e+00 -2.7909638524177605e+00 + -2.6119643450209011e+00 2.2859141095481337e+00 -3.1047980801043509e+00 + -3.0141313929630251e+00 2.2388260681335233e+00 -3.3768034693357301e+00 + -3.4260073838340781e+00 2.1099472646548052e+00 -3.6134988045440939e+00 + -3.8413900680798552e+00 1.9254639462765128e+00 -3.8182015144428454e+00 + -4.2444468152749781e+00 1.7071713551801670e+00 -3.9759646334599323e+00 + -4.6283234056553306e+00 1.4762180695106668e+00 -4.0824836659384829e+00 + -5.0114120723002333e+00 1.2380096340084101e+00 -4.1703569565007719e+00 + -5.4180426101580865e+00 9.7595481702898246e-01 -4.2817100487615907e+00 + -5.8454913901482266e+00 7.0964448643804268e-01 -4.4082693522418674e+00 + -6.2791627819831213e+00 4.9614226429896879e-01 -4.5132428249177963e+00 + -6.7053596877580599e+00 3.6778224421539019e-01 -4.5618935559868294e+00 + id 13416 + loc 4.0258514881134033e-01 4.5360836386680603e-01 399 + blend 0.0000000000000000e+00 + interp 3.7409685418446542e-01:3.4799907223889592e-01:1.8759915726368637e-01:3.1968248182189896e-01:1.0614407449947749e+00:2.8495505056247999e-01:1.8586366404322829e+00:3.7409311321592359e-01:2.1841760789554114e+00:2.7147543736128832e-01:3.0082859775650452e+00:2.9593055216706649e-01:3.8516190303639561e+00 + CVs 20 + -2.1569430121201405e-01 3.6065112020029444e-01 7.9368100032153055e-02 + -4.5242110648189116e-01 7.1203920996899128e-01 1.6211585495103159e-01 + -7.1972759433588862e-01 1.0394430547778513e+00 2.2338120406575496e-01 + -1.0125359094981410e+00 1.3385975380920134e+00 2.6378469099716123e-01 + -1.3220481613852983e+00 1.6115621493735663e+00 2.9721951142364683e-01 + -1.6440645090398369e+00 1.8574084810574549e+00 3.3631505757528657e-01 + -1.9791055228546421e+00 2.0697348674812170e+00 3.9073791102231720e-01 + -2.3292310595279195e+00 2.2372213422420475e+00 4.6853006718840373e-01 + -2.6925715765736529e+00 2.3438544151490932e+00 5.7407611511233225e-01 + -3.0583569650217126e+00 2.3720167743052940e+00 7.0352825166845601e-01 + -3.4043220730832671e+00 2.3137814385672208e+00 8.4118956488792085e-01 + -3.7031258211650595e+00 2.1868625427252422e+00 9.6143977475959719e-01 + -3.9418086090023738e+00 2.0278140028745546e+00 1.0453797104700207e+00 + -4.1134208894246109e+00 1.8729493322711381e+00 1.0840929059758111e+00 + -4.1914618506920904e+00 1.7493932035282751e+00 1.0694882564373134e+00 + -4.1208420805565522e+00 1.6646141905432472e+00 1.0155597961744516e+00 + -3.8156238065348655e+00 1.5851936317479078e+00 1.0041180479189760e+00 + -3.4154235186517736e+00 1.4176938926677323e+00 1.1605033584695477e+00 + -3.5665086340979313e+00 1.4236570970827171e+00 1.1253597595703295e+00 + id 13417 + loc 2.3260957002639771e-01 9.4606930017471313e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399334262279577e-01:3.6623697065915117e-01:3.9939046993942995e-01:3.8910286878005362e-01:1.4682850751212098e+00:2.7039559542302977e-01:2.2778583455966768e+00:3.2907879728166456e-01:3.0065367338442606e+00:4.4398890268936958e-01:3.9067188170124263e+00 + CVs 20 + 5.0124389676209324e-01 2.2180485291478846e-01 -2.2319410722315319e-01 + 8.9780717858830628e-01 3.5275077776548436e-01 -4.0907045621652038e-01 + 1.2777289504761797e+00 4.5058004677777908e-01 -5.8581457003602777e-01 + 1.6814500368508634e+00 5.3954855064347129e-01 -7.6593499374620522e-01 + 2.1129008732981585e+00 6.1559110053730948e-01 -9.5304200168630948e-01 + 2.5737041718127558e+00 6.7457167419434916e-01 -1.1544019506012728e+00 + 3.0621960663548657e+00 7.1162559188749674e-01 -1.3799715210389962e+00 + 3.5755784951208929e+00 7.1508464034503816e-01 -1.6367540977651847e+00 + 4.1055830072400816e+00 6.6040751720944368e-01 -1.9327838369931736e+00 + 4.6267464042640052e+00 5.1684538989339912e-01 -2.2792549618596425e+00 + 5.0958418902053833e+00 2.6292199254106530e-01 -2.6788703157774423e+00 + 5.4767879842132272e+00 -1.0224531681850646e-01 -3.1131132584230032e+00 + 5.7535556018354050e+00 -5.6290896259515133e-01 -3.5529673317967605e+00 + 5.9137377680364613e+00 -1.0916735405085496e+00 -3.9752965708123100e+00 + 5.9462773465164194e+00 -1.6555555001171971e+00 -4.3613767518905417e+00 + 5.8526530582415921e+00 -2.2301423597615297e+00 -4.6864394611185993e+00 + 5.6499604914862926e+00 -2.7918151600714074e+00 -4.9270485450877493e+00 + 5.3794063251251245e+00 -3.3020983219914726e+00 -5.0886141338970363e+00 + 5.1826828102322011e+00 -3.7184259020399741e+00 -5.2584537090642884e+00 + id 13418 + loc 4.6900436282157898e-01 8.2733944058418274e-02 382 + blend 0.0000000000000000e+00 + interp 4.0857827559730092e-01:3.1502542626375796e-01:6.6517676114868929e-01:2.9916952788970080e-01:1.3859311538620589e+00:3.4719168483482743e-01:1.9672347482746022e+00:4.0857418981454496e-01:2.3989502099269040e+00:3.7593188691739376e-01:3.0290761857871100e+00:3.7662890100358759e-01:3.9128427286651766e+00 + CVs 20 + -4.4975065852311574e-01 1.9012335817046894e-01 -7.9098043775458016e-01 + -7.9137698680327773e-01 2.6376464991770865e-01 -1.3377274484322790e+00 + -1.0890919990020307e+00 3.0532511747862928e-01 -1.8224443494610003e+00 + -1.3659848731355224e+00 3.5474244489521456e-01 -2.3104751969915895e+00 + -1.6217595871233050e+00 4.2010939396055902e-01 -2.7938902893944886e+00 + -1.8628624190485898e+00 5.0449999512147514e-01 -3.2701256281028623e+00 + -2.1022818415463034e+00 6.0208275451906923e-01 -3.7440044159789405e+00 + -2.3505687770346095e+00 6.9528665891771968e-01 -4.2277724283698257e+00 + -2.6041454013560208e+00 7.5609745558405272e-01 -4.7377830736024018e+00 + -2.8466687500862076e+00 7.5609927526885889e-01 -5.2846623154676422e+00 + -3.0750922348180723e+00 6.7068694486601244e-01 -5.8592774167385979e+00 + -3.2963777085094730e+00 4.8295795325895030e-01 -6.4386171286253440e+00 + -3.5003539738364955e+00 1.8304735234948044e-01 -6.9781976593993260e+00 + -3.6480244667069170e+00 -2.1014661457680406e-01 -7.3875322915279096e+00 + -3.7050555942587513e+00 -6.3644330917002501e-01 -7.5968940208799216e+00 + -3.6622507562356197e+00 -1.0676775960811780e+00 -7.6484075701017060e+00 + -3.5165775535351234e+00 -1.5244093657138547e+00 -7.6534945716347771e+00 + -3.3476043451028192e+00 -2.0155816351137532e+00 -7.6995714944470404e+00 + -3.4706102971209289e+00 -2.4031990557737628e+00 -7.7306994227081329e+00 + id 13419 + loc 4.2059969902038574e-01 5.3668153285980225e-01 412 + blend 0.0000000000000000e+00 + interp 3.9827524683959836e-01:3.2543021560782509e-01:1.2468926192514052e-02:3.9827126408712998e-01:7.8649515588217644e-01:3.6545475513663944e-01:1.5793876902598902e+00:3.4053969121166261e-01:2.0343972087729698e+00:3.5300512553091101e-01:3.0001371329892543e+00:3.4207000633286866e-01:3.4687549074256232e+00 + CVs 20 + 6.7381406154413837e-01 1.2672480665013849e-01 -1.8856522600033518e-01 + 1.1575287265189529e+00 1.4206295425433513e-01 -3.6827271802548356e-01 + 1.6063919223534762e+00 1.2208949011534520e-01 -5.3372068162004449e-01 + 2.0866602943096733e+00 9.5128993130255357e-02 -6.8371804065295638e-01 + 2.5868942382091138e+00 5.7766233801569422e-02 -8.1176805051409140e-01 + 3.0953893050693941e+00 9.1559003665804273e-03 -9.1101217466772022e-01 + 3.6005562667654667e+00 -5.0107838557283291e-02 -9.7759370935984813e-01 + 4.0922884083732090e+00 -1.1961838536294800e-01 -1.0136253531062900e+00 + 4.5641068864824899e+00 -1.9847487619019755e-01 -1.0238705401247423e+00 + 5.0126435851116868e+00 -2.8562743005751656e-01 -1.0130696570724349e+00 + 5.4336311071760806e+00 -3.8779753700200104e-01 -9.9561675729531207e-01 + 5.8190980898008027e+00 -5.2619217528861517e-01 -1.0090952511784754e+00 + 6.1600030199034839e+00 -7.1462182218690007e-01 -1.0923320084902102e+00 + 6.4610199764880480e+00 -9.3948593490210630e-01 -1.2419641083290320e+00 + 6.7367425004429151e+00 -1.1894393093640756e+00 -1.4361313918488625e+00 + 6.9810569924867352e+00 -1.4584973494629110e+00 -1.6709432738357428e+00 + 7.1755567822813617e+00 -1.7295746541695149e+00 -1.9478428463376538e+00 + 7.3156826799577477e+00 -1.9846092909376782e+00 -2.2559812073375003e+00 + 7.5244825005375127e+00 -2.2468448397323448e+00 -2.5079938046908374e+00 + id 13420 + loc 3.8034591078758240e-01 3.4320205450057983e-02 400 + blend 0.0000000000000000e+00 + interp 4.6271735071619996e-01:2.7755521875014355e-01:2.0246246741829121e-01:4.2480858851753844e-01:9.2597827957353673e-01:3.7021275942325232e-01:1.2552624744408019e+00:2.7190997127462113e-01:1.8755125401679491e+00:2.7889230593869757e-01:2.9691482584000575e+00:4.6271272354269283e-01:3.5076848062459125e+00 + CVs 20 + -1.7210946003248700e-01 1.9020331315326616e-01 2.2399229609870744e-01 + -3.2283787716047835e-01 3.8031400378321140e-01 4.2890230807882590e-01 + -4.6232445561604474e-01 5.7766199309937849e-01 6.1226196375883168e-01 + -6.0084234038177875e-01 7.8668916089158536e-01 7.7312274074908349e-01 + -7.4712703726446650e-01 1.0095649577052508e+00 9.1639304709313563e-01 + -9.0805777076755878e-01 1.2487064789797020e+00 1.0508211905967269e+00 + -1.0928002719161154e+00 1.5034097657865133e+00 1.1900855879950745e+00 + -1.3150402682072442e+00 1.7634919498992665e+00 1.3498309725268882e+00 + -1.5887062367987745e+00 2.0046775272508990e+00 1.5393452689891649e+00 + -1.9161750572784984e+00 2.1950836859757881e+00 1.7585428475027332e+00 + -2.2733975045024986e+00 2.3130236689087842e+00 2.0013804021256782e+00 + -2.6213924176249179e+00 2.3582518088342437e+00 2.2600882948384231e+00 + -2.9489052069793091e+00 2.3441927399991158e+00 2.5320500356632678e+00 + -3.2829182842943161e+00 2.2744197905351791e+00 2.8183426702257264e+00 + -3.5979099057941202e+00 2.1435679235983196e+00 3.0897115137089788e+00 + -3.7232858160523250e+00 1.9877072043748996e+00 3.2684060573491847e+00 + -3.4377772685384995e+00 1.8003681512017131e+00 3.2935680044262727e+00 + -3.0362437073721824e+00 1.4722512095403295e+00 3.3034128201139183e+00 + -3.4218246095093754e+00 1.6136399118232010e+00 3.4969346123680767e+00 + id 13421 + loc 4.1751015186309814e-01 8.3064597845077515e-01 403 + blend 0.0000000000000000e+00 + interp 5.1700038393198178e-01:3.1729556559402683e-01:2.6293860459792984e-02:3.5657102116934719e-01:9.4325357537964605e-01:3.0853452354537164e-01:1.9767071023649172e+00:3.1254876746975258e-01:2.9882471059916771e+00:5.1699521392814252e-01:3.6662677204080909e+00 + CVs 20 + -5.4758878642776149e-02 1.0597883263061748e-01 -9.3743923092168016e-02 + -9.0396952969168443e-02 2.1507782019013677e-01 -1.9151046191880028e-01 + -1.3329763896132876e-01 3.2736078469216123e-01 -2.8921951439800003e-01 + -1.8199909418985524e-01 4.3908701913842108e-01 -3.8553088082034004e-01 + -2.3740353394616082e-01 5.5118402990349491e-01 -4.8063554743883963e-01 + -3.0173460419699222e-01 6.6599712302833780e-01 -5.7335359779175255e-01 + -3.7885281581995017e-01 7.8589239520003606e-01 -6.6166606890066004e-01 + -4.7360014676905199e-01 9.1199722853349385e-01 -7.4299301953381114e-01 + -5.9070770229136715e-01 1.0442586359281949e+00 -8.1340904425019489e-01 + -7.3399242807120435e-01 1.1818476486874530e+00 -8.6678255880285460e-01 + -9.0512526262685977e-01 1.3230907157017966e+00 -8.9462440391059417e-01 + -1.1007309613262501e+00 1.4651334590837155e+00 -8.8739527938966867e-01 + -1.3112776034534885e+00 1.6041275941170730e+00 -8.3734745262305954e-01 + -1.5222064767072652e+00 1.7356634486606202e+00 -7.4219830466392911e-01 + -1.7171382343346708e+00 1.8549335962979980e+00 -6.0875007533081038e-01 + -1.8872592849391729e+00 1.9583525449309584e+00 -4.4521809753346459e-01 + -2.0301696189394542e+00 2.0437187014357900e+00 -2.5560205622882137e-01 + -2.1420377343823418e+00 2.1095844754327024e+00 -4.6034955810355722e-02 + -2.1693838186980963e+00 2.1409378933087115e+00 5.9474750294848527e-03 + id 13422 + loc 3.4856483340263367e-01 6.5825110673904419e-01 376 + blend 0.0000000000000000e+00 + interp 4.5995195480562262e-01:3.9027273635111209e-01:2.8830877812976008e-01:4.2068438565783928e-01:1.0354111585529344e+00:3.5019366528282614e-01:2.0001089979027347e+00:4.3936937231834222e-01:2.9131467798821422e+00:3.7978885205572560e-01:3.3575247868696017e+00:4.5994735528607461e-01:3.9443914221919876e+00 + CVs 20 + -1.2718230632973865e-01 4.3242057432946368e-01 6.2509582437446609e-01 + -1.2084257538011015e-01 6.9870654510368702e-01 1.1724330975301935e+00 + 2.4688717948320726e-03 8.0455059462920153e-01 1.7149407141455646e+00 + 2.0208955380770999e-01 8.3344007427662836e-01 2.2802766123548883e+00 + 4.1330011798332522e-01 8.7740925177627738e-01 2.8720814440265880e+00 + 5.5650544616331188e-01 9.7875618770019202e-01 3.4986363683230897e+00 + 5.6061451401257478e-01 1.1369172653231945e+00 4.1449213588490847e+00 + 3.9017399067559899e-01 1.3391141442720835e+00 4.7625404549509076e+00 + 4.9913703366971651e-02 1.5646573372012993e+00 5.2987527065787763e+00 + -4.3478728037557091e-01 1.7835982941715023e+00 5.7312478685082313e+00 + -1.0416722900370734e+00 1.9613013482278461e+00 6.0665942041444190e+00 + -1.7499451154455388e+00 2.0449910852557407e+00 6.3109360223093862e+00 + -2.5160327157988767e+00 1.9753352198011134e+00 6.4457857363473403e+00 + -3.2603725108937880e+00 1.7294894484022101e+00 6.4352291642731991e+00 + -3.9065515689023922e+00 1.3095960996071487e+00 6.2779290970595767e+00 + -4.4274405878611631e+00 6.1826664825379574e-01 6.0728928564258773e+00 + -4.6668258271730894e+00 -4.5748404193763426e-01 6.0231450988993664e+00 + -4.5163607605997127e+00 -1.5184519916866619e+00 6.2215773229430935e+00 + -4.4724970659649479e+00 -2.1062905088476080e+00 6.3289684107445847e+00 + id 13423 + loc 2.1013090736232698e-04 6.6141468286514282e-01 375 + blend 0.0000000000000000e+00 + interp 5.3903161601499472e-01:2.9645820516197374e-01:2.2039586390382548e-01:4.0437355785500850e-01:9.0532238485719663e-01:2.8194567473218268e-01:1.4059277139832456e+00:4.4589973557968710e-01:2.1996775556860633e+00:5.3902622569883463e-01:2.7157563976855990e+00:2.9124983598805276e-01:3.2782429595110583e+00 + CVs 20 + -4.5919351679309728e-01 5.2628154312235864e-01 -1.0298835915163315e-01 + -9.7946723789502566e-01 8.9172514759276533e-01 -1.4295751907829118e-01 + -1.5523088436741717e+00 1.0566991662298586e+00 -1.0589107739217590e-01 + -2.1182783153351443e+00 1.1131440252768343e+00 -4.9425069521990550e-03 + -2.6440509802739860e+00 1.1620512972392203e+00 1.2401495407545465e-01 + -3.1314633010277255e+00 1.2467109602279260e+00 2.3219325414944370e-01 + -3.5961645383777174e+00 1.3778208270229770e+00 2.8784659874128760e-01 + -4.0421074221695763e+00 1.5631789760715311e+00 2.7887945872494035e-01 + -4.4583464365602232e+00 1.8019268552966534e+00 2.0114361496456457e-01 + -4.8322830894131199e+00 2.0742801502844346e+00 6.1620201414883446e-02 + -5.1624477835449989e+00 2.3558649324160585e+00 -1.2905816892827504e-01 + -5.4462513999315316e+00 2.6229715511148424e+00 -3.8350631935198509e-01 + -5.6767163499040105e+00 2.8498091451732090e+00 -7.2399182558967101e-01 + -5.8375845241445345e+00 3.0037231998783342e+00 -1.1557273670148418e+00 + -5.9006787402382805e+00 3.0567924512371021e+00 -1.6496148673508979e+00 + -5.8223217190134449e+00 3.0090208840816266e+00 -2.1527317680971043e+00 + -5.5646571881361160e+00 2.8330854296170109e+00 -2.6566694613633279e+00 + -5.2374654437237025e+00 2.4201007873162612e+00 -3.1073489439734949e+00 + -5.0373419889405850e+00 2.0475454421447212e+00 -3.2268214591961839e+00 + id 13424 + loc 8.4233438968658447e-01 7.4665650725364685e-02 1080 + blend 0.0000000000000000e+00 + interp 2.7306462010536359e-01:2.7306188945916254e-01:1.3609789603719724e-02:2.6855231952239872e-01:1.0015505994874381e+00:2.5265833916763292e-01:2.0288642643246924e+00:2.7182239849270107e-01:2.9808524553213380e+00 + CVs 20 + -8.7762232458391182e-02 4.3760024898392402e-01 -3.7386460640305724e-01 + -1.9719484370694207e-01 7.7804350231652664e-01 -5.9474373234880473e-01 + -3.2378302650014856e-01 1.0742177556426351e+00 -7.5942385074634777e-01 + -4.6965007212493437e-01 1.3487400932537121e+00 -9.0138420579889544e-01 + -6.3107452861102464e-01 1.5933729761409663e+00 -1.0152958739880797e+00 + -7.9782036917620702e-01 1.7986630391272063e+00 -1.0984448782542136e+00 + -9.5417266172797355e-01 1.9582240285588886e+00 -1.1529643366684494e+00 + -1.0846983463086597e+00 2.0764724016208360e+00 -1.1896487263668698e+00 + -1.1840278088154723e+00 2.1729257149747294e+00 -1.2246598901988786e+00 + -1.2656480644857648e+00 2.2700260343182386e+00 -1.2614357489272197e+00 + -1.3482607572535219e+00 2.3671132120164828e+00 -1.2831660606179978e+00 + -1.4324805468304262e+00 2.4454690424883783e+00 -1.2760418351915548e+00 + -1.5064434887858469e+00 2.4956928682714663e+00 -1.2395964039710792e+00 + -1.5591116139608223e+00 2.5243861228842546e+00 -1.1738151557363885e+00 + -1.5850028810930241e+00 2.5622079928073571e+00 -1.0571578943040607e+00 + -1.5948109341891219e+00 2.6631282641636069e+00 -8.0606477103476315e-01 + -1.6292881016976191e+00 2.7643096325172745e+00 -3.3318061468222604e-01 + -1.6968735563250357e+00 2.6810871331343700e+00 1.2464914892246437e-01 + -1.6846019193827921e+00 2.4969047780399292e+00 7.4549068143416330e-02 + id 13425 + loc 1.0156074911355972e-01 4.6593025326728821e-01 396 + blend 0.0000000000000000e+00 + interp 4.1100392686318116e-01:2.8559880991669595e-01:1.7565030909950319e-02:4.0396584999382473e-01:6.0494898088828242e-01:3.3859266476314287e-01:1.0248171404063240e+00:4.1099981682391257e-01:1.9319029664595089e+00:3.0083501477038649e-01:2.1998349993047106e+00:3.3230806510901889e-01:3.0018468938223988e+00:3.7499789866769806e-01:3.6758750595419847e+00 + CVs 20 + -2.4601832799362322e-01 2.3629193840609528e-01 -7.3549478508611266e-01 + -4.5095206542506894e-01 3.3655950793991712e-01 -1.2638015610739133e+00 + -6.3711419371131450e-01 3.9364564989691514e-01 -1.7472999029101213e+00 + -8.0784815584241043e-01 4.4468407453674552e-01 -2.2492907104708948e+00 + -9.5520067625884031e-01 4.8544940241029261e-01 -2.7674928713068199e+00 + -1.0774444642624430e+00 5.1171016591791729e-01 -3.2988417036414033e+00 + -1.1805708302802032e+00 5.1825098683497339e-01 -3.8404481964890698e+00 + -1.2748677620805191e+00 5.0131937847944319e-01 -4.3917443240339562e+00 + -1.3674589583278771e+00 4.5512230963612677e-01 -4.9569045770804721e+00 + -1.4681715010823708e+00 3.6602458357068546e-01 -5.5396109186262690e+00 + -1.5913779083815927e+00 2.1673654529251896e-01 -6.1332066687418667e+00 + -1.7469605866491975e+00 -1.6950263740258542e-03 -6.7178321050906789e+00 + -1.9331705119991884e+00 -2.8562444757527494e-01 -7.2740923965838133e+00 + -2.1422866483189535e+00 -6.2853547573632218e-01 -7.7908082419018543e+00 + -2.3688677242101406e+00 -1.0257864906493701e+00 -8.2588125159541139e+00 + -2.6111485210850072e+00 -1.4740511416274442e+00 -8.6674427871502004e+00 + -2.8628631917172886e+00 -1.9641014644725465e+00 -9.0041582449683268e+00 + -3.1042023972851576e+00 -2.4554831053713677e+00 -9.2567710184792489e+00 + -3.2767491894490020e+00 -2.7165322010779849e+00 -9.3927942166529022e+00 + id 13426 + loc 3.3707922697067261e-01 4.3628481030464172e-01 1068 + blend 0.0000000000000000e+00 + interp 3.9664365429401333e-01:3.9663968785747039e-01:4.3710814397250608e-01:3.0672743824216725e-01:1.1470706894746345e+00:2.7653983198193927e-01:2.0006745978998128e+00:2.8207258722070033e-01:2.9490317122209486e+00:3.2508899295947136e-01:3.9419820451923133e+00 + CVs 20 + -1.5547320481738869e-01 2.5785702293302676e-01 -1.2400187999309177e-02 + -3.4847151109780872e-01 5.2506161958655251e-01 -4.7272323127818233e-02 + -5.5366307152961403e-01 7.9237980264284580e-01 -8.7054608443971504e-02 + -7.5799888818816186e-01 1.0526046571175935e+00 -1.2400082263354059e-01 + -9.5849830590553653e-01 1.3001495368043776e+00 -1.5737650104933845e-01 + -1.1502367505135398e+00 1.5272699346656373e+00 -1.8570093756083589e-01 + -1.3335061227053622e+00 1.7271432071889026e+00 -2.0866411827842457e-01 + -1.5144160126746984e+00 1.8973265402123063e+00 -2.2781046832756774e-01 + -1.7026272079704960e+00 2.0342125982205888e+00 -2.5245907485483937e-01 + -1.9082100791835082e+00 2.1194798119001947e+00 -3.0473690606968146e-01 + -2.1286380615530831e+00 2.1215099809535567e+00 -4.0773600078486300e-01 + -2.3479645068196811e+00 2.0272671216786300e+00 -5.7139524270098119e-01 + -2.5497226171290710e+00 1.8697180039876633e+00 -7.9068334608088819e-01 + -2.7291203960325672e+00 1.6957216106435162e+00 -1.0477477998342173e+00 + -2.9079387542846455e+00 1.5073781221869700e+00 -1.3187746570737175e+00 + -3.1339866516643475e+00 1.2728227148162699e+00 -1.5674653676572290e+00 + -3.4533405608343410e+00 1.0021988377325857e+00 -1.7271066045598586e+00 + -3.8603823079773760e+00 7.6306005883421457e-01 -1.7378770682816955e+00 + -4.2941957933938317e+00 5.8086406210367580e-01 -1.6310419452867209e+00 + id 13427 + loc 9.9491745233535767e-01 9.9158346652984619e-01 374 + blend 0.0000000000000000e+00 + interp 3.6455793069089654e-01:3.6455428511158966e-01:7.1425297188992620e-01:2.2748810858239712e-01:1.3207950055566018e+00:2.6332574548320237e-01:2.3675886293890267e+00:3.5541734955062682e-01:3.5756052952375041e+00 + CVs 20 + -6.3391018888794981e-01 3.9713248286981412e-01 -4.5299891717869906e-01 + -1.1767740739009935e+00 6.9020635261239516e-01 -7.8309398579325684e-01 + -1.7131468435049229e+00 9.2862442713349469e-01 -1.0663017569638917e+00 + -2.2731521820369585e+00 1.1364824114930236e+00 -1.3406398399062185e+00 + -2.8526253951197758e+00 1.3030077150329813e+00 -1.6204827770934682e+00 + -3.4567993556412429e+00 1.4004553579202039e+00 -1.9193277406458731e+00 + -4.0816908701914301e+00 1.3934771819363796e+00 -2.2442090453743666e+00 + -4.7034406556890644e+00 1.2550608147415840e+00 -2.5930837261997173e+00 + -5.2861067913951514e+00 9.7541599644122634e-01 -2.9499165436113413e+00 + -5.7922446915727548e+00 5.6525319845267985e-01 -3.2795214946960627e+00 + -6.1858182194657072e+00 5.5221215620968600e-02 -3.5394115279281433e+00 + -6.4371749717745264e+00 -5.0787777647795895e-01 -3.7008832088419874e+00 + -6.5480626920875622e+00 -1.0681087311219768e+00 -3.7680410294998139e+00 + -6.5719132099840820e+00 -1.5990497004243704e+00 -3.7912342786898412e+00 + -6.5720449891244010e+00 -2.1248227201599832e+00 -3.8209891988279532e+00 + -6.5960353183039402e+00 -2.6557068080241222e+00 -3.8670072487564964e+00 + -6.6762293243004995e+00 -3.1681034955284075e+00 -3.9016356052848189e+00 + -6.7941960504789822e+00 -3.6395669628081326e+00 -3.9076630832231314e+00 + -6.8356169103131288e+00 -4.0705276550404594e+00 -3.9188624675662376e+00 + id 13428 + loc 5.4828578233718872e-01 5.6278777122497559e-01 380 + blend 0.0000000000000000e+00 + interp 4.5751294740231147e-01:4.2006316646330494e-01:8.6227857528788920e-02:2.6492285101747393e-01:7.0323107022348497e-01:3.0959301851093179e-01:1.3496524108183305e+00:4.2157623177522868e-01:2.0009947942836712e+00:4.2436398986476387e-01:2.6994567456163168e+00:4.0226033948022061e-01:3.0934306620418219e+00:4.5750837227283747e-01:3.7978514865075885e+00 + CVs 20 + -4.8649699685006831e-01 2.5150628647086498e-01 -5.0689572959177587e-01 + -9.0995343633989489e-01 4.1799012956598841e-01 -8.9253963835142125e-01 + -1.3175851780002141e+00 5.6051081349204168e-01 -1.2829190128280137e+00 + -1.7205405497631472e+00 7.0667067177091103e-01 -1.7296051903280030e+00 + -2.1045499801616412e+00 8.5134452660040871e-01 -2.2302507909627192e+00 + -2.4588225760306712e+00 9.7674751577360364e-01 -2.7794060661574309e+00 + -2.7740453897798241e+00 1.0530886790553633e+00 -3.3703434840098447e+00 + -3.0376277917899075e+00 1.0510077348219018e+00 -3.9869150927038643e+00 + -3.2413363795630805e+00 9.5336766368837056e-01 -4.6014487536751734e+00 + -3.3893089203898752e+00 7.5727077945120680e-01 -5.1823018757064414e+00 + -3.4904551047180865e+00 4.7073668187015416e-01 -5.6990511410863558e+00 + -3.5499183576788447e+00 1.1290954346111048e-01 -6.1260049897923423e+00 + -3.5742061483805339e+00 -2.8926789194278957e-01 -6.4521659201315025e+00 + -3.5768810535987718e+00 -7.1205230873918079e-01 -6.6853993799176425e+00 + -3.5797228832481043e+00 -1.1492067618349466e+00 -6.8502179268803980e+00 + -3.6116016509780406e+00 -1.6188426456121641e+00 -6.9901992506817399e+00 + -3.7084868852478126e+00 -2.1346878902323390e+00 -7.1510149146663400e+00 + -3.9046076284321707e+00 -2.6502718448685996e+00 -7.3317391283424795e+00 + -4.1407542800298298e+00 -3.0136557325283646e+00 -7.4527015164624730e+00 + id 13429 + loc 1.7734862864017487e-01 1.2690742313861847e-01 378 + blend 0.0000000000000000e+00 + interp 4.5950356262287900e-01:3.9989027465140825e-01:8.1318652508097777e-01:3.1835618001408889e-01:1.1251292144234837e+00:3.2521817571545081e-01:2.1505106093716875e+00:4.5949896758725278e-01:2.8898800554684119e+00:3.7411075790502357e-01:3.1795936229821944e+00:3.3792277028568474e-01:3.9548517582376039e+00 + CVs 20 + 2.6994416092215795e-01 2.9223287112946777e-01 -3.1039695031707498e-01 + 4.7989675678163352e-01 5.4700506712555386e-01 -6.0667798104799009e-01 + 6.6877007976559877e-01 7.8605962750695801e-01 -9.0338674847558864e-01 + 8.6024435738009730e-01 1.0280339597932637e+00 -1.2063804414036923e+00 + 1.0641026931966229e+00 1.2789082317131062e+00 -1.5107652636791575e+00 + 1.2935075651679684e+00 1.5364547309856373e+00 -1.8158612623045662e+00 + 1.5614203865661378e+00 1.7890103192368128e+00 -2.1264043587160093e+00 + 1.8766611907937436e+00 2.0199137543518346e+00 -2.4434508527924730e+00 + 2.2434960808919251e+00 2.2090891201453990e+00 -2.7582604241019562e+00 + 2.6572381716807580e+00 2.3354876529123487e+00 -3.0560481749492650e+00 + 3.1038633346114288e+00 2.3828446422098715e+00 -3.3261611583068955e+00 + 3.5667575586239226e+00 2.3391812334170821e+00 -3.5635883898473226e+00 + 4.0213894429469725e+00 2.1985188538682578e+00 -3.7581015482904960e+00 + 4.4224104404989486e+00 1.9795241925133773e+00 -3.8833130210234215e+00 + 4.7259295885937807e+00 1.7323353627032283e+00 -3.9120540437365148e+00 + 4.9374705545902993e+00 1.4888657170483750e+00 -3.8418372456514249e+00 + 5.1157942931104294e+00 1.2320281854883341e+00 -3.6865569631557729e+00 + 5.3333389057403355e+00 9.3194398603913342e-01 -3.4868782649281451e+00 + 5.5060247322909301e+00 7.4885427780649971e-01 -3.4171837738037669e+00 + id 13430 + loc 7.2958147525787354e-01 2.9561021924018860e-01 401 + blend 0.0000000000000000e+00 + interp 4.3471119787193374e-01:3.5111284331529502e-01:2.0000603110281223e-01:4.1994835233161182e-01:1.0110114440680555e+00:4.2472452739903188e-01:1.9257878424569466e+00:3.4791417692139476e-01:2.3370527494812898e+00:3.7742708515482326e-01:3.1580115074080215e+00:4.3470685075995502e-01:3.8463398261174033e+00 + CVs 20 + 2.0222976032446441e-01 3.4301309503707034e-01 6.8920371982075845e-02 + 3.9631619274906732e-01 6.9127657120034147e-01 1.5595224751897710e-01 + 5.7919958813601058e-01 1.0328246298855293e+00 2.4147257676053849e-01 + 7.4995802858832483e-01 1.3603927320626061e+00 3.2157108864896861e-01 + 9.0829565481122632e-01 1.6683703154667846e+00 3.9768931336448254e-01 + 1.0542682614316812e+00 1.9540371744208009e+00 4.6762173074934432e-01 + 1.1863454227071697e+00 2.2188311209693894e+00 5.2789465151114789e-01 + 1.3013142208596127e+00 2.4682003855025298e+00 5.7609334193281869e-01 + 1.4066092995175630e+00 2.7204556524151218e+00 6.1744414586437757e-01 + 1.5338472100759757e+00 3.0081195227939541e+00 6.7247932037767288e-01 + 1.7134702782583437e+00 3.3560275889976192e+00 7.7660298853917387e-01 + 1.9375303934532728e+00 3.7651137549101548e+00 9.7557953833005251e-01 + 2.1714927957511740e+00 4.1926518878680268e+00 1.3065769518402210e+00 + 2.3510077231136588e+00 4.5408259045790782e+00 1.7147865928804582e+00 + 2.3672464461803511e+00 4.7796083644021321e+00 2.0576015617600723e+00 + 2.1146642030969107e+00 4.9401371135426322e+00 2.2683997090736696e+00 + 1.4968562752909280e+00 4.9475330919751386e+00 2.3614288903041638e+00 + 7.0169120296171628e-01 4.6484158085653871e+00 2.4203583835513571e+00 + 8.9518557021869360e-01 4.7492872864074522e+00 2.3509356625508384e+00 + id 13431 + loc 5.5840700864791870e-01 6.2697403132915497e-02 1078 + blend 0.0000000000000000e+00 + interp 4.4339107781473813e-01:3.0446463838264071e-01:5.9967604540997543e-01:3.0272362323509183e-01:1.1218494438049713e+00:2.0255043837271614e-01:1.9999598566805323e+00:3.0569744428576034e-01:2.9996798845856349e+00:4.4338664390395999e-01:3.8625744312927810e+00 + CVs 20 + -1.6870899640788703e-01 2.5757980165683431e-01 3.3132287392987542e-02 + -3.3561352078064188e-01 5.0235105921236356e-01 9.8511891408926217e-02 + -5.0656872091425487e-01 7.3857063899182829e-01 1.8809105875394561e-01 + -6.8262557398154755e-01 9.6282805065992183e-01 2.9524567987940048e-01 + -8.6096899266740468e-01 1.1666242417881578e+00 4.1828990885506767e-01 + -1.0345436191675625e+00 1.3380496356104008e+00 5.5460985620016556e-01 + -1.1973799660038746e+00 1.4681169958591087e+00 7.0503793600613407e-01 + -1.3474643978225571e+00 1.5541344203431338e+00 8.7278817843712486e-01 + -1.4825761492751603e+00 1.5952217837369886e+00 1.0579488129460393e+00 + -1.6005206380883306e+00 1.5900548441950140e+00 1.2570823013338743e+00 + -1.7021176350473861e+00 1.5372592614765306e+00 1.4665952645113798e+00 + -1.7918146951604486e+00 1.4365337652294381e+00 1.6843870934632623e+00 + -1.8750648874304456e+00 1.2879348629009610e+00 1.9101305862521984e+00 + -1.9560114214119231e+00 1.0918637648630547e+00 2.1404833631664224e+00 + -2.0368443744151317e+00 8.4805665926946217e-01 2.3596979655457027e+00 + -2.1119177355500351e+00 5.5386229904222439e-01 2.5128493393275786e+00 + -2.1566640493910301e+00 2.2853827651191039e-01 2.4754240316074734e+00 + -2.1453177448659173e+00 -2.3900117715415670e-02 2.1985037460870132e+00 + -2.2106561707977144e+00 -3.8965065853378866e-01 2.1693718910454658e+00 + id 13432 + loc 5.5601352453231812e-01 2.5797605514526367e-01 409 + blend 0.0000000000000000e+00 + interp 4.8222051237863711e-01:2.9112666146459448e-01:2.7956412252968299e-02:4.8221569017351334e-01:9.6638396108239233e-01:3.2978345521661251e-01:1.3262966620276826e+00:2.9821622932453379e-01:2.0792898258914230e+00:3.0704184851787375e-01:3.0829076077203958e+00 + CVs 20 + -2.7874838162806653e-01 1.3975966425905753e-01 8.2995324826447087e-02 + -5.4073270543692109e-01 2.6810136697289444e-01 1.9070762768414101e-01 + -7.9338975012462565e-01 3.8550011300760645e-01 2.9351801403809596e-01 + -1.0381873346560062e+00 4.9171330630668275e-01 3.8292178925395171e-01 + -1.2725303432518564e+00 5.8619978249901661e-01 4.6294972380407218e-01 + -1.4954501738626405e+00 6.7046999700123666e-01 5.3685664468744831e-01 + -1.7078322254838865e+00 7.4971925446645149e-01 6.0667047429053234e-01 + -1.9127640060577580e+00 8.3027661209010717e-01 6.7280041040381666e-01 + -2.1159292325340751e+00 9.1479945249199279e-01 7.3166122560464197e-01 + -2.3216283585048325e+00 1.0037130859105856e+00 7.7667427072038464e-01 + -2.5326779453047328e+00 1.0960369010832949e+00 8.0431572746593694e-01 + -2.7534446116759335e+00 1.1810838708683207e+00 8.1829209511466217e-01 + -2.9851746580091829e+00 1.2412816711250145e+00 8.2739628367609952e-01 + -3.2239044681161109e+00 1.2674682078236581e+00 8.3908734402262097e-01 + -3.4651499208388703e+00 1.2613401536253561e+00 8.6055287832464411e-01 + -3.7065377658213294e+00 1.2252174671903742e+00 9.0624684808851208e-01 + -3.9394582223103578e+00 1.1550435082450123e+00 9.8414628435944407e-01 + -4.1399378209987452e+00 1.0409412541823566e+00 1.0690330223924445e+00 + -4.2011458514403293e+00 8.5293224862349049e-01 1.1246589460264511e+00 + id 13433 + loc 9.3754285573959351e-01 5.0217274576425552e-02 373 + blend 0.0000000000000000e+00 + interp 4.6504891871266069e-01:2.8448866723089922e-01:1.2271674580286329e-02:2.9159112520672531e-01:3.8552222759372790e-01:4.2528708763949757e-01:1.0086594544494856e+00:4.6504426822347356e-01:1.4427996439759116e+00:3.8239850451313462e-01:1.9992231279111388e+00:3.4672763100242948e-01:2.9998215204916345e+00:2.6534740205101204e-01:3.4989555830740295e+00 + CVs 20 + 3.0355241794853632e-01 3.8866971611372358e-01 1.0775043970138842e-02 + 6.3562943100209057e-01 6.8819541370414372e-01 4.2012217776142835e-03 + 1.0280396756197705e+00 8.7341263708237782e-01 -3.2728138898075188e-02 + 1.4679429402753121e+00 9.9065243317977836e-01 -1.0891215940824578e-01 + 1.9081561831557445e+00 1.1181881775493383e+00 -2.2110480973681906e-01 + 2.3211594550688526e+00 1.3059592455511067e+00 -3.4501330250582662e-01 + 2.7023605250818394e+00 1.5702243606539803e+00 -4.4243746649390836e-01 + 3.0429638793455096e+00 1.9108818316765319e+00 -4.8359481736333354e-01 + 3.3304333381339020e+00 2.3274462893761330e+00 -4.5437238663338797e-01 + 3.5631408927803676e+00 2.8254158638186539e+00 -3.3577032315588573e-01 + 3.7522425546292739e+00 3.3979526002943237e+00 -9.0716742528691441e-02 + 3.9084523229358417e+00 4.0083041680496905e+00 3.4445979006101146e-01 + 4.0108975124502155e+00 4.5583713355179301e+00 1.0384240378411844e+00 + 4.0011090650290724e+00 4.8959417615746181e+00 1.9733140931098938e+00 + 3.8248549030626591e+00 4.8962275738509602e+00 3.0426423399146323e+00 + 3.5226595845730735e+00 4.4610752545876045e+00 4.1258243975332700e+00 + 3.3651892611304324e+00 3.4755699817984342e+00 5.0937389588714055e+00 + 3.6760955023689008e+00 2.2670658664815422e+00 5.6655690889065937e+00 + 3.7941656246159896e+00 1.7700609314942302e+00 5.9711411417132307e+00 + id 13434 + loc 3.9470362663269043e-01 5.0438344478607178e-01 393 + blend 0.0000000000000000e+00 + interp 4.8646410273151014e-01:2.9962551653917863e-01:6.9605281536766483e-05:4.7718216175239814e-01:7.6358605256984347e-01:3.6536913042675884e-01:1.0479772414416675e+00:4.6853566803267910e-01:1.6575942662410457e+00:4.4373830479498233e-01:2.0109637548414421e+00:4.8645923809048286e-01:2.5258821745989972e+00:3.0752978792483904e-01:3.0284791965190339e+00 + CVs 20 + -3.9639478941685119e-01 3.4097966923575851e-01 -1.3009782623647215e-01 + -7.3972851544089513e-01 7.0677218057775770e-01 -2.7575516859681826e-01 + -1.0485909560678452e+00 1.1024778828867396e+00 -4.5402029574861402e-01 + -1.3438478689181355e+00 1.5111477208250432e+00 -6.8002951922306831e-01 + -1.6478285369740147e+00 1.9023310852316746e+00 -9.5731676266547827e-01 + -1.9802267195744920e+00 2.2505574956692489e+00 -1.2717228641941500e+00 + -2.3549763342925703e+00 2.5354006141153067e+00 -1.5981647726969881e+00 + -2.7766487987467476e+00 2.7332980807740963e+00 -1.9124326730790124e+00 + -3.2309105216534304e+00 2.8255921198713954e+00 -2.1996327065132522e+00 + -3.6968857549290632e+00 2.8163118717998543e+00 -2.4644818320680915e+00 + -4.1678786849673379e+00 2.7089471066529902e+00 -2.7243727581429966e+00 + -4.6408220175358608e+00 2.4998771835331590e+00 -2.9825209084846014e+00 + -5.1001607525705221e+00 2.1816880012887561e+00 -3.2140867092489636e+00 + -5.5171305831324027e+00 1.7578710078308317e+00 -3.3923272297154234e+00 + -5.8818669692135783e+00 1.2459892587150505e+00 -3.5138532831187042e+00 + -6.2337054720707448e+00 6.5635028609903068e-01 -3.5700854296808355e+00 + -6.6295377588951609e+00 1.9235720160910574e-02 -3.5045309087314127e+00 + -7.0659914154120695e+00 -5.8973603640957029e-01 -3.2951696769175869e+00 + -7.5320161298886932e+00 -1.1719118395071264e+00 -3.1256963746268953e+00 + id 13435 + loc 7.5799274444580078e-01 4.3347063660621643e-01 399 + blend 0.0000000000000000e+00 + interp 5.1588829545098158e-01:5.1588313656802709e-01:7.3522681373599963e-02:4.2165958796910319e-01:7.5335303136558074e-01:4.2583252547318112e-01:1.1199732789491972e+00:2.5692898849751300e-01:1.6562468839555364e+00:3.1877241860678346e-01:2.0919726681453117e+00:3.1199412326902404e-01:2.9318955485685576e+00:2.9116960514369178e-01:3.6045501971423541e+00 + CVs 20 + 3.9214375807453711e-02 2.2413093897270836e-01 2.4678477755120404e-01 + 7.5141695764086636e-02 4.2245481755722092e-01 4.5704451963912529e-01 + 9.3991973029833212e-02 5.9562153824336117e-01 6.5439555851345332e-01 + 9.3260256332217059e-02 7.5574150901307036e-01 8.6615011850833890e-01 + 8.0715353191285089e-02 9.1176363721998421e-01 1.0965296905235142e+00 + 6.5675984666478143e-02 1.0722024135832608e+00 1.3419634526404614e+00 + 5.5138862983080517e-02 1.2457665070058044e+00 1.6024024759741597e+00 + 5.4771977716405226e-02 1.4408053228689277e+00 1.8832280181013779e+00 + 7.4764380870422170e-02 1.6612912565600206e+00 2.1932447120772975e+00 + 1.3090689802671274e-01 1.8996519079479046e+00 2.5465414661715902e+00 + 2.3695640462599285e-01 2.1112350028341345e+00 2.9598477581417639e+00 + 3.9473008844851376e-01 2.2068867826089908e+00 3.4095143844376921e+00 + 5.8993428793353431e-01 2.1345479757341628e+00 3.8156789298377762e+00 + 8.0220213463286483e-01 1.9119223380549244e+00 4.0996149609424322e+00 + 1.0286634206809726e+00 1.5838690039396333e+00 4.2339307247082312e+00 + 1.3095144093299105e+00 1.1992803153998399e+00 4.2619938113956000e+00 + 1.6896039052772396e+00 7.8615101577059809e-01 4.2786950772522649e+00 + 2.0823465542855759e+00 4.0188339112468885e-01 4.4718926107744403e+00 + 2.1677110506353001e+00 2.5410156801648687e-01 4.9126884342819750e+00 + id 13436 + loc 8.2471996545791626e-01 6.7443853616714478e-01 402 + blend 0.0000000000000000e+00 + interp 3.6707817575446866e-01:3.3069689441549016e-01:3.2133825250172365e-01:3.5390758935647054e-01:9.3630449471628074e-01:2.6564346407134282e-01:1.4456321940542918e+00:2.9436867954044715e-01:2.3193204611110181e+00:3.6707450497271116e-01:3.0069876499356685e+00:3.5716636872337998e-01:3.9924405178763038e+00 + CVs 20 + -1.5391614743674867e-01 5.5129952593292404e-02 -1.5712485096452171e-02 + -2.7910916540827974e-01 1.3458066846419345e-01 -4.5560337487334415e-02 + -3.7350143600013896e-01 2.2183703888458603e-01 -7.4688222258155662e-02 + -4.5053508055493779e-01 3.0866148090406698e-01 -9.7357576711038479e-02 + -5.1075934620488550e-01 3.9598043509498471e-01 -1.1420077388318320e-01 + -5.6409996476516899e-01 4.8570166040433171e-01 -1.2482224149182021e-01 + -6.2578796294840844e-01 5.8102524659124977e-01 -1.2672647293806177e-01 + -7.0461330175881076e-01 6.8613133699125561e-01 -1.1891306983210635e-01 + -7.9191559142408441e-01 7.9456335017587876e-01 -1.0729709706626708e-01 + -8.8398400069912952e-01 8.5661193854637063e-01 -1.0007384687973039e-01 + -1.1072305238994906e+00 8.2374366141855515e-01 -1.1250342699219017e-01 + -1.4642918945917323e+00 9.6572974432066050e-01 -1.5734405419326555e-01 + -1.5219440061737879e+00 1.3188272147827109e+00 -1.3109925366535502e-01 + -1.2510493251531865e+00 1.7026978714570138e+00 -6.3084881874368337e-02 + -8.0593698484274512e-01 2.0626518533720088e+00 -9.2321266889369702e-02 + -2.9608498667398497e-01 2.3742002915547396e+00 -2.8666410325669933e-01 + 2.1981714935528252e-01 2.6148877309990541e+00 -6.6856913280191199e-01 + 6.6658069747801241e-01 2.7566505424242633e+00 -1.2265468952346890e+00 + 8.0176075880616160e-01 2.7805510820964532e+00 -1.4572176615066996e+00 + id 13437 + loc 3.9182651042938232e-01 8.3115410804748535e-01 395 + blend 0.0000000000000000e+00 + interp 4.3884758121208128e-01:4.2039793719470531e-01:8.7827747778364218e-02:4.1484001465390163e-01:9.5427286914910203e-01:3.6209461737103110e-01:1.6927315307829267e+00:3.9792860276642650e-01:2.3734394612049363e+00:3.6934233245283671e-01:3.0034906104527588e+00:4.3884319273626921e-01:3.6330220142158045e+00 + CVs 20 + 5.3907500246283357e-01 1.1326220389596980e-01 -3.5157055889006045e-01 + 9.6677146894963051e-01 1.3700034943342737e-01 -6.5847264890334722e-01 + 1.3675004190066868e+00 1.3155583160135265e-01 -9.4432647775286971e-01 + 1.7645668499804055e+00 1.1415015562270103e-01 -1.2075913985913909e+00 + 2.1498975703329357e+00 8.4050500882721257e-02 -1.4368061121214619e+00 + 2.5163640300051657e+00 4.4204238806635265e-02 -1.6265424927085332e+00 + 2.8586070802161352e+00 -7.8041320799471237e-05 -1.7747510233130535e+00 + 3.1737726850570636e+00 -4.2327024580194994e-02 -1.8810799935514171e+00 + 3.4662963151835866e+00 -7.5440353226499113e-02 -1.9493707023310505e+00 + 3.7524142167465793e+00 -9.5850202916383243e-02 -1.9909257447646209e+00 + 4.0528903470430677e+00 -1.1128356649677618e-01 -2.0271423762375744e+00 + 4.3750080782787917e+00 -1.4028439209363297e-01 -2.0837233780662912e+00 + 4.7117012768260995e+00 -2.0101888535890655e-01 -2.1772001160679944e+00 + 5.0554450631165331e+00 -3.0938201845559554e-01 -2.3125809802354089e+00 + 5.3962158938810170e+00 -4.7670789989341023e-01 -2.4900522569308636e+00 + 5.7167414987016389e+00 -7.0097673990215803e-01 -2.7082034774323116e+00 + 6.0000562188580222e+00 -9.7458065494673063e-01 -2.9576540488570444e+00 + 6.2344664577107975e+00 -1.2929097267339884e+00 -3.2127631723100949e+00 + 6.3849277536414037e+00 -1.6329107040368425e+00 -3.4096781506142539e+00 + id 13438 + loc 8.3548951148986816e-01 9.9566495418548584e-01 412 + blend 0.0000000000000000e+00 + interp 8.8632911135315207e-01:3.0214102034414231e-01:3.0564718712644279e-01:3.0689599390483113e-01:1.1243320229008151e+00:8.8632024806203857e-01:2.9446566005590014e+00:4.3073271510783256e-01:3.1657685200150398e+00:3.7618964790653969e-01:3.8385017478774204e+00 + CVs 20 + 9.4223407560352646e-01 1.0613174458820306e-01 -2.4946430107165907e-01 + 1.5480094051040043e+00 9.2498092388630132e-02 -4.6656795895907038e-01 + 2.0893884409634089e+00 5.3936298031149910e-02 -6.6808043063772882e-01 + 2.6644747081421869e+00 2.5678406301969325e-02 -8.6267102102775428e-01 + 3.2648185189452441e+00 5.6550628151958993e-03 -1.0459747915530715e+00 + 3.8803668413325920e+00 -8.7575862662737647e-03 -1.2053754692814258e+00 + 4.4979370732703634e+00 -2.3454934518397197e-02 -1.3288500266398424e+00 + 5.1018909492935833e+00 -4.7787543965534418e-02 -1.4113903858809707e+00 + 5.6761286831043805e+00 -9.0557154043706012e-02 -1.4537076750092941e+00 + 6.2068084265507473e+00 -1.5910834268993868e-01 -1.4617392887714822e+00 + 6.6921517627196527e+00 -2.7143121800399639e-01 -1.4536854863108148e+00 + 7.1424903567311144e+00 -4.5885496742331044e-01 -1.4590779443575574e+00 + 7.5488718725261883e+00 -7.2928847798020136e-01 -1.4961378462445434e+00 + 7.8837198941390740e+00 -1.0557957265702980e+00 -1.5602954278845824e+00 + 8.1303901892621102e+00 -1.4132077223098005e+00 -1.6437516780478694e+00 + 8.2850748932144107e+00 -1.7820947338465627e+00 -1.7438866471724239e+00 + 8.3527094000150548e+00 -2.1403264447603627e+00 -1.8564490903084951e+00 + 8.3438202890988418e+00 -2.4654864364931157e+00 -1.9751689533982473e+00 + 8.2497758751446035e+00 -2.7144768701414659e+00 -2.0902013830942296e+00 + id 13439 + loc 2.8008186817169189e-01 5.4632252454757690e-01 400 + blend 0.0000000000000000e+00 + interp 4.8461454417213634e-01:3.5517524527968986e-01:3.1445774615639133e-02:2.7024618713232818e-01:8.6271145180711839e-01:3.8487235722488783e-01:1.1140091722633982e+00:4.8460969802669462e-01:1.9524319185673422e+00:3.3331876288473755e-01:2.2772543866494330e+00:2.7558239949422897e-01:2.9956984271297493e+00 + CVs 20 + -2.6366570711401377e-01 3.5529308060688064e-01 -1.3808226412612515e-01 + -5.2434722236072184e-01 6.9974996742996531e-01 -3.1913326738654579e-01 + -7.8355995721777327e-01 1.0207886266559556e+00 -5.7001959910556188e-01 + -1.0365840502137453e+00 1.3050559246785631e+00 -8.9658102353384228e-01 + -1.2767780950355716e+00 1.5407490080964488e+00 -1.2889341522108946e+00 + -1.4998553749476007e+00 1.7209271671144504e+00 -1.7310416244911269e+00 + -1.7002829909057575e+00 1.8421808412554657e+00 -2.2065883666794863e+00 + -1.8688048187307880e+00 1.9034928356126120e+00 -2.7013892562942927e+00 + -1.9948162374955114e+00 1.9075574242048277e+00 -3.2038145429921321e+00 + -2.0719726201787854e+00 1.8599983220991763e+00 -3.7036043208707445e+00 + -2.1146456186585887e+00 1.7706044487671402e+00 -4.1919056250833622e+00 + -2.1637914254605746e+00 1.6513010009177282e+00 -4.6650704592511447e+00 + -2.2619126951657216e+00 1.4989863370578611e+00 -5.1152855257403491e+00 + -2.4381512114019235e+00 1.2931848448604337e+00 -5.5168576118161319e+00 + -2.7078840172906999e+00 1.0395441889863637e+00 -5.8431498488454885e+00 + -3.0677823364390089e+00 7.9552432378639848e-01 -6.1008501650913622e+00 + -3.4944623637869605e+00 6.1360425847954447e-01 -6.3208416359197130e+00 + -3.9388572486514488e+00 4.8831122324079645e-01 -6.5453113727271894e+00 + -4.3067667546308046e+00 3.6250447645808137e-01 -6.8919046847366925e+00 + id 13440 + loc 7.5013421475887299e-02 3.7967878580093384e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7756991946006822e-01:3.4047939391730397e-01:9.7553149371718695e-01:4.5156750711934240e-01:1.7851489171903410e+00:3.8284630435679423e-01:2.0552706310515831e+00:4.3242620799317594e-01:2.9911198861478745e+00:4.7756514376087361e-01:3.4497665812548806e+00:3.4113453201799743e-01:3.9969262383212669e+00 + CVs 20 + -2.2005239415900718e-01 3.3270121992799961e-01 -3.2955011599638606e-01 + -4.2497017026578776e-01 7.1395503511442049e-01 -6.0525980270141000e-01 + -6.1436896954670872e-01 1.0946856108970673e+00 -8.6667747270226592e-01 + -8.0616821634287372e-01 1.4255475775246778e+00 -1.1508934648822273e+00 + -1.0134888042465366e+00 1.6553329586693264e+00 -1.4798832465938743e+00 + -1.2169873881537809e+00 1.7336829834761045e+00 -1.8446587877455434e+00 + -1.3343721606243237e+00 1.6155809264892647e+00 -2.1967740353630978e+00 + -1.2634768606717701e+00 1.3488237982615974e+00 -2.4422003559522927e+00 + -1.0584799635440281e+00 1.0870113136722481e+00 -2.5527284904170142e+00 + -8.4998157313260925e-01 8.8384631631269173e-01 -2.6242860578571867e+00 + -6.4188374469629117e-01 7.1351647751210279e-01 -2.6769751350412507e+00 + -4.1027849022366558e-01 5.7751151031522674e-01 -2.6491281171554966e+00 + -1.8891034634282305e-01 4.6714078172904094e-01 -2.5566683907198779e+00 + 1.9725870616570385e-03 2.9327288585976774e-01 -2.5667015473493247e+00 + 1.7381612872649779e-01 4.4458309035334542e-02 -2.7933044891057404e+00 + 2.7517999637881618e-01 -1.0409379541451869e-01 -3.2291630999923857e+00 + 2.2715017450202754e-01 1.4076519166426715e-02 -3.7384531764885476e+00 + 8.1318326302148747e-02 2.2277724191820814e-01 -4.1010098152245851e+00 + 2.8137488632928365e-02 2.2605329053945389e-01 -4.3451756150873058e+00 + id 13441 + loc 2.0881573855876923e-01 2.0317563787102699e-02 376 + blend 0.0000000000000000e+00 + interp 5.0556311458691638e-01:5.0555805895577055e-01:6.5698938713072785e-01:2.5564805665691348e-01:1.0018779162237021e+00:2.2677167516143240e-01:1.9889334760533626e+00:4.0954407473041338e-01:2.5073262906384834e+00:3.0483497448201580e-01:3.0176490844801735e+00:3.8163596583696369e-01:3.7428224325671255e+00 + CVs 20 + 5.9994780879611154e-01 4.3044680807132740e-01 3.3217800832107797e-01 + 1.1331904777120276e+00 7.5629165189301573e-01 5.2531000695782992e-01 + 1.7009161564320630e+00 9.6220817291805194e-01 5.7651104417733534e-01 + 2.2918618845142169e+00 1.0943484745195049e+00 5.1573163950982437e-01 + 2.8728527150902634e+00 1.2298653647195670e+00 3.9956962498689885e-01 + 3.4616707663939277e+00 1.4025093896513317e+00 2.9502291181536089e-01 + 4.0824260439017035e+00 1.5973470277218593e+00 2.6635499086827497e-01 + 4.7216728076406724e+00 1.7872095714759273e+00 3.5666782341612202e-01 + 5.3461506501843079e+00 1.9474075877344672e+00 5.8030456430997290e-01 + 5.9260114694334556e+00 2.0497983559881323e+00 9.2846767821692289e-01 + 6.4355795242115192e+00 2.0658597143363382e+00 1.3713172129746818e+00 + 6.8596144713012146e+00 1.9829905627115545e+00 1.8708031238493534e+00 + 7.1994416044717360e+00 1.8095357308667332e+00 2.3844956719641761e+00 + 7.4605368300095867e+00 1.5715538151094557e+00 2.8560426580848368e+00 + 7.6426816975118772e+00 1.3042052465964353e+00 3.2649075886751628e+00 + 7.7051072554100912e+00 1.0732254765364906e+00 3.6197339321474100e+00 + 7.5398834707875650e+00 9.6301700005135427e-01 3.9880974006933800e+00 + 7.1547582457329160e+00 8.3843766060423874e-01 4.3892501408178077e+00 + 7.0770231752874659e+00 5.6571363166478816e-01 4.1534805714301122e+00 + id 13442 + loc 1.9844962656497955e-01 6.4419925212860107e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8750044397884862e-01:3.8688161000069171e-01:5.9139561008715891e-01:4.8749556897440888e-01:1.0026983337787918e+00:2.8578239271962858e-01:1.7563493497852178e+00:2.7789344693694407e-01:2.7994870309685589e+00:3.2467787189385339e-01:3.3238979369585171e+00:2.9747434530145045e-01:3.9960574522499548e+00 + CVs 20 + -1.8222252661447752e-01 3.1175441481263777e-01 1.9597039721442822e-01 + -2.9871607622447105e-01 5.3547740597629823e-01 2.2069031043513107e-01 + -4.2988075062528425e-01 7.2904946766152556e-01 2.0540462367202994e-01 + -5.9454000658190143e-01 9.0520497905733088e-01 1.8906343126331698e-01 + -7.8881168819523539e-01 1.0590463559949652e+00 1.6739256653268086e-01 + -1.0081599900363225e+00 1.1872135403987616e+00 1.3810066796904730e-01 + -1.2478615663323422e+00 1.2875184910302979e+00 1.0055707597290231e-01 + -1.5034173138489035e+00 1.3584244726669734e+00 5.5343171466107899e-02 + -1.7701147752350881e+00 1.3985563146532700e+00 3.8017174342843685e-03 + -2.0427830342125874e+00 1.4066942312550363e+00 -5.2249793889862728e-02 + -2.3158055123932302e+00 1.3821733120027202e+00 -1.1062804994468078e-01 + -2.5819033072536510e+00 1.3258632132929999e+00 -1.6886910889455531e-01 + -2.8313373553070997e+00 1.2405280272446666e+00 -2.2524725412312557e-01 + -3.0540470683746070e+00 1.1275415008342160e+00 -2.8077802163070509e-01 + -3.2456116086453841e+00 9.8404481320125758e-01 -3.3875186524001588e-01 + -3.4136770943797194e+00 8.0895459411219828e-01 -4.0015411059899009e-01 + -3.5724944625692099e+00 6.0963073276009472e-01 -4.6178438238151170e-01 + -3.7299104870267619e+00 3.9833678505846992e-01 -5.1828060655889852e-01 + -3.8178699389629722e+00 2.6213651032897944e-01 -5.1482350531303434e-01 + id 13443 + loc 9.0901029109954834e-01 4.5520776510238647e-01 382 + blend 0.0000000000000000e+00 + interp 4.8005147150304789e-01:4.8004667098833287e-01:1.6481222637033666e-03:2.8321783326164246e-01:8.3392840278114377e-01:4.0267378145390520e-01:1.7413812897834582e+00:3.6664340839599718e-01:2.3225085261170597e+00:3.7134960464106975e-01:3.0069797035775196e+00:3.9063193412348712e-01:3.7343381319095403e+00 + CVs 20 + -9.6612662570059449e-01 2.3826518903003308e-01 6.1672429821829233e-01 + -1.5907119550896218e+00 3.1880629743852068e-01 1.1007995394332877e+00 + -2.1265340434555124e+00 3.4070122807362135e-01 1.5533255210145140e+00 + -2.6809778654579786e+00 3.3568695265612436e-01 2.0111900556235924e+00 + -3.2675450873042382e+00 3.0011375440018462e-01 2.4559049204502093e+00 + -3.8977589450887371e+00 2.2688669365693104e-01 2.8692464551318539e+00 + -4.5767453518750747e+00 1.0052941863854770e-01 3.2357887310704156e+00 + -5.2961175310453452e+00 -1.0088428956864770e-01 3.5418333670753772e+00 + -6.0274062998996865e+00 -3.9890119006332947e-01 3.7832057946483104e+00 + -6.7446845116262519e+00 -7.9705402348765264e-01 3.9582797722990426e+00 + -7.4309890927335793e+00 -1.2908832821522043e+00 4.0669261987582086e+00 + -8.0528797899074025e+00 -1.8877157717729263e+00 4.1153488529216329e+00 + -8.5656830957606935e+00 -2.5837523868036589e+00 4.1079360867773298e+00 + -8.9494939914030418e+00 -3.3219409398633601e+00 4.0709453798457806e+00 + -9.2264474955329980e+00 -4.0180124303414688e+00 4.0515826425999162e+00 + -9.4224088067191243e+00 -4.6411838211693066e+00 4.0944707261626379e+00 + -9.5451489078022256e+00 -5.2173637635319938e+00 4.2316689816094168e+00 + -9.5944285553144724e+00 -5.7399405588561176e+00 4.4577099329749705e+00 + -9.5686556250868371e+00 -6.0885812717469134e+00 4.6659183396008963e+00 + id 13444 + loc 5.1013213396072388e-01 7.3265391588211060e-01 396 + blend 0.0000000000000000e+00 + interp 5.0934340655091204e-01:3.4292115273391599e-01:2.3917271379851146e-01:3.3723904408916366e-01:9.9861895518505495e-01:3.5482652330870862e-01:1.8358797461535261e+00:5.0933831311684652e-01:2.0847429273696503e+00:4.2478339907090917e-01:2.8137144897682465e+00:2.6985526664968928e-01:3.6463322237670344e+00 + CVs 20 + 8.4374876339966964e-01 2.9716609516932124e-01 -2.3881997376381606e-01 + 1.4172626918760347e+00 4.2918935867540592e-01 -3.9622638856329134e-01 + 1.9194886013757619e+00 4.8730147497532555e-01 -5.2048405895519256e-01 + 2.4418044386935178e+00 5.1442195258933587e-01 -6.2870088740879126e-01 + 2.9807623567274653e+00 5.0269833529413388e-01 -7.2322178794544933e-01 + 3.5334989529146168e+00 4.4814804388647206e-01 -8.1046159820409513e-01 + 4.0933342770484913e+00 3.5237384403146088e-01 -9.0004233870894079e-01 + 4.6490624484731828e+00 2.1822711705234987e-01 -9.9775487351277070e-01 + 5.2042061078805286e+00 3.4953816278842531e-02 -1.1032063183903755e+00 + 5.7619959173617437e+00 -2.2812543990553702e-01 -1.2114546453115209e+00 + 6.2974396150804637e+00 -6.0027003762029585e-01 -1.3211485650117623e+00 + 6.7622541683634561e+00 -1.0825285715670907e+00 -1.4303436584374132e+00 + 7.1213447089033588e+00 -1.6499870055187758e+00 -1.5269703081909731e+00 + 7.3691987035760960e+00 -2.2738262275911882e+00 -1.5981162808672615e+00 + 7.5126125477546006e+00 -2.9236320818158168e+00 -1.6412894813184633e+00 + 7.5596019606129889e+00 -3.5542890363212694e+00 -1.6576548856993587e+00 + 7.5264425606403158e+00 -4.1185503587718149e+00 -1.6456512581875715e+00 + 7.4406028081652069e+00 -4.6041017244660232e+00 -1.6132437182617594e+00 + 7.3433797944263697e+00 -5.1067634561285367e+00 -1.6095510498460261e+00 + id 13445 + loc 9.8204106092453003e-01 6.9466865062713623e-01 374 + blend 0.0000000000000000e+00 + interp 5.1821574750518806e-01:3.6415128520212403e-01:3.0950956276127872e-03:4.3926546149438633e-01:7.4793047256500977e-01:3.8947862626689067e-01:1.3751761249852179e+00:5.1821056534771304e-01:2.2212659155186758e+00:3.2857141354500624e-01:2.6612830727056500e+00:1.1543470237409076e-01:3.0337785296875115e+00 + CVs 20 + -7.2995405406379810e-01 3.7128972530810012e-01 -4.9181929167423227e-01 + -1.3501638689122093e+00 5.8043053355510765e-01 -8.3757123466240846e-01 + -1.9481271029221174e+00 6.9303874694660406e-01 -1.1127018837889828e+00 + -2.5479170770542923e+00 7.5104290750532776e-01 -1.3678914610638064e+00 + -3.1191547743979879e+00 7.6477211710247350e-01 -1.6257971533352278e+00 + -3.6398877180160123e+00 7.3490720295054079e-01 -1.9003052278936807e+00 + -4.0991137413645617e+00 6.6395804625688148e-01 -2.1975217384696721e+00 + -4.4925438582344226e+00 5.6179249500321760e-01 -2.5207323805095880e+00 + -4.8235091914387915e+00 4.3803798854655041e-01 -2.8733644476700211e+00 + -5.1039550346987363e+00 2.8929317254716524e-01 -3.2580030532475281e+00 + -5.3437071351755332e+00 9.5983502029308276e-02 -3.6642417421526483e+00 + -5.5438370348768453e+00 -1.5299497488860148e-01 -4.0730182144969387e+00 + -5.7046624421054180e+00 -4.6302626770854971e-01 -4.4697037934400257e+00 + -5.8401318189339850e+00 -8.4032858819591016e-01 -4.8359950784633483e+00 + -5.9748841434430933e+00 -1.2691953695819933e+00 -5.1556005665630824e+00 + -6.1421112176751009e+00 -1.7222590988794049e+00 -5.4354755609988707e+00 + -6.3752642917234681e+00 -2.1865124212919471e+00 -5.6957107950701289e+00 + -6.6863403106637360e+00 -2.6068008749086209e+00 -5.9275634413907499e+00 + -7.0335296635591877e+00 -2.8027485651446429e+00 -6.0690674970328740e+00 + id 13446 + loc 6.5538829565048218e-01 1.6516003012657166e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7572800804890997e-01:4.5727068154910033e-01:3.7490335222322124e-01:4.7572325076882949e-01:9.2800106543896510e-01:2.9450946785061294e-01:1.4264560019047796e+00:4.1229811796426169e-01:2.0000218554030904e+00:2.9361654470236831e-01:2.5102700760415648e+00:3.4091242178951087e-01:3.1577006757110908e+00:2.8965894244433504e-01:3.9990347073611154e+00 + CVs 20 + -1.3188158264178185e-01 2.1508409955563829e-01 1.2828137121615513e-01 + -2.6472921525479970e-01 4.3468436759422252e-01 2.7519532840674749e-01 + -3.9842774074884396e-01 6.5877329237971105e-01 4.2976878201327595e-01 + -5.2837300437352697e-01 8.7992031203661414e-01 5.7386948378888847e-01 + -6.5085783924554641e-01 1.0920765855321526e+00 7.0320357090137853e-01 + -7.6270946865280109e-01 1.2879167624786301e+00 8.0985294126541940e-01 + -8.5880793026608848e-01 1.4621290537912466e+00 8.8459629002078000e-01 + -9.4013574161498514e-01 1.6117042593265061e+00 9.2792269206748190e-01 + -1.0080512713956076e+00 1.7374620139974617e+00 9.4118875969113180e-01 + -1.0371539817765951e+00 1.8937554891748378e+00 8.9917777204806781e-01 + -1.0630339957896568e+00 2.2425497593801831e+00 7.7638027354662142e-01 + -1.2666726236731027e+00 2.6836263531065936e+00 7.4353637866782196e-01 + -1.5031590034941225e+00 2.8654940125066153e+00 8.5961738268879029e-01 + -1.6768517210424290e+00 2.8533924583361960e+00 1.0292637967926657e+00 + -1.7791783577625515e+00 2.7299824653935962e+00 1.2218983521767219e+00 + -1.7438804505943355e+00 2.5337839409093865e+00 1.3948575136274965e+00 + -1.5407601003060818e+00 2.3060182531109947e+00 1.5066180194272798e+00 + -1.2158209817671848e+00 2.0653050489309219e+00 1.5468975282906487e+00 + -1.0351564190231404e+00 1.9002791238632777e+00 1.4816805875931518e+00 + id 13447 + loc 6.1235445737838745e-01 1.3383752107620239e-01 407 + blend 0.0000000000000000e+00 + interp 4.2221107445902589e-01:2.5187973744043013e-01:1.0099329833957671e-02:3.3145758637115336e-01:1.0000014450432817e+00:4.2220685234828131e-01:1.6710666298051535e+00:3.2313079184033694e-01:2.1759285626798430e+00:2.5250931961711726e-01:3.2263578112280928e+00 + CVs 20 + -3.5887391274799652e-01 3.7484916573248844e-01 4.1396114407880040e-02 + -5.4326147242711897e-01 6.1345945685557923e-01 5.5761174402157707e-02 + -6.6187275903078846e-01 7.7615132462596592e-01 4.9188142660901116e-02 + -7.9032400846136719e-01 9.1332015955286838e-01 2.1942117867433872e-02 + -9.1796820601213014e-01 1.0151899034512248e+00 -2.7526516786596636e-02 + -1.0306077792628947e+00 1.0705917836521450e+00 -9.6741418780588340e-02 + -1.1112356328393085e+00 1.0709346375606534e+00 -1.7521261387602124e-01 + -1.1468324182401950e+00 1.0202514002081642e+00 -2.4354387776195985e-01 + -1.1423821317975897e+00 9.4035605280246504e-01 -2.8808941763818285e-01 + -1.1183229392953837e+00 8.5150775931061717e-01 -3.1697187830768647e-01 + -1.0887910239031435e+00 7.5686560456237761e-01 -3.4604327262251122e-01 + -1.0550422469547869e+00 6.5361964097289027e-01 -3.8060404240960138e-01 + -1.0146588980186215e+00 5.4285867601701399e-01 -4.1881320978736658e-01 + -9.7105390419324089e-01 4.2365094444127327e-01 -4.6659265701346980e-01 + -9.3396501656339248e-01 2.8575059295189509e-01 -5.4103308156375052e-01 + -9.1346012078810213e-01 1.2067780808969725e-01 -6.5624724418167357e-01 + -9.1456059753924912e-01 -6.0835228626669791e-02 -8.0978548809468076e-01 + -9.3692193542266866e-01 -2.3699417716084839e-01 -9.8773628849455208e-01 + -9.3389719327481935e-01 -3.0989912625685401e-01 -1.0787410121243315e+00 + id 13448 + loc 1.8856737017631531e-01 6.1118268966674805e-01 415 + blend 0.0000000000000000e+00 + interp 4.0976167161325000e-01:3.5300730243146261e-01:4.5886560032145862e-02:3.6912097248977799e-01:7.2211743487135127e-01:3.8746156351848432e-01:1.0240888438074927e+00:3.0418572421069101e-01:1.8895624672862716e+00:3.2389397868295672e-01:2.6366525626941346e+00:4.0975757399653390e-01:3.3055832602262125e+00 + CVs 20 + 2.6262287313979382e-01 2.4656655080535850e-01 2.3314923066073087e-01 + 4.5051328215543240e-01 4.2558156909026684e-01 3.8760591478930284e-01 + 6.0852640062643981e-01 5.7454986901598026e-01 5.2050336982646883e-01 + 7.7101187506523061e-01 7.2632392307506799e-01 6.7887465802283009e-01 + 9.3912414431097457e-01 8.7487419377556719e-01 8.6343867670933361e-01 + 1.1119391841064881e+00 1.0125604390850953e+00 1.0735499892510236e+00 + 1.2875393135835047e+00 1.1322411099582346e+00 1.3098898588638637e+00 + 1.4640177575473288e+00 1.2277284592485656e+00 1.5736192051048996e+00 + 1.6387694106189259e+00 1.2938867930269129e+00 1.8624867793049085e+00 + 1.8080173010006404e+00 1.3275282118875633e+00 2.1710886647849370e+00 + 1.9699811569871089e+00 1.3277337773010573e+00 2.4995413915932443e+00 + 2.1335724694356828e+00 1.2921304771774322e+00 2.8630852708305969e+00 + 2.3254050986506725e+00 1.2114246028931037e+00 3.2721248685569111e+00 + 2.5782312184096075e+00 1.0739048774426752e+00 3.6924074467857522e+00 + 2.8962682581788246e+00 8.8088064141018219e-01 4.0602234806012767e+00 + 3.2557645330445357e+00 6.4508438496582876e-01 4.3398270965397385e+00 + 3.6391402051770898e+00 3.7687260586123283e-01 4.5244780186308340e+00 + 4.0357317947157911e+00 8.9097231293006729e-02 4.6070345919053057e+00 + 4.3010871001824196e+00 -1.1629695423724051e-01 4.6459886067354832e+00 + id 13449 + loc 5.8882411569356918e-02 8.7210774421691895e-01 403 + blend 0.0000000000000000e+00 + interp 3.9664124972386255e-01:3.8149158771773606e-01:4.8140344361708098e-01:3.6529050828070775e-01:9.9689291199801555e-01:3.4789167697061141e-01:1.6267602138395723e+00:3.5798975362790814e-01:2.1002253156127875e+00:3.9663728331136533e-01:2.8489000780160487e+00:3.3204959603300377e-01:3.2048905486738946e+00:3.7171175711294635e-01:3.9862950379034094e+00 + CVs 20 + -9.0720608491789562e-03 1.7168711027963107e-01 2.2759726499379400e-02 + -3.5617137707774832e-02 3.2090803780530075e-01 3.9470499146920766e-02 + -6.4262960535393265e-02 4.6448159105678921e-01 5.2604623933316483e-02 + -7.9187760359391846e-02 6.0937918342641395e-01 6.8211828869394392e-02 + -8.1954758372016545e-02 7.5216734598706658e-01 8.6048715578986357e-02 + -7.4021286430700384e-02 8.8881282000904838e-01 1.0578620438726366e-01 + -5.8099051632064191e-02 1.0167787387628846e+00 1.2672448980321482e-01 + -3.7307990690263693e-02 1.1353985373184217e+00 1.4833899737186262e-01 + -1.3811649467937226e-02 1.2474204108703428e+00 1.7077240723434797e-01 + 9.2368160391292919e-03 1.3600693071443262e+00 1.9563514666661747e-01 + 2.3827389856450054e-02 1.4812504608120500e+00 2.2742988283055859e-01 + 1.5984145929218263e-02 1.6121729218499223e+00 2.7436765417588105e-01 + -2.4053533386191983e-02 1.7413693352034034e+00 3.4066535990051311e-01 + -9.0831710078758121e-02 1.8529702014430549e+00 4.1845338617812655e-01 + -1.7308901685907119e-01 1.9409794990266809e+00 4.9732339683478144e-01 + -2.7309797556729010e-01 2.0066009944514880e+00 5.8267148487345410e-01 + -3.9864306046357845e-01 2.0451177894070316e+00 6.8853119296808907e-01 + -5.4545413035153700e-01 2.0541141855536726e+00 8.1218383304706543e-01 + -7.0231620129888928e-01 2.0550684738640572e+00 9.2699611660010461e-01 + id 13450 + loc 9.7872740030288696e-01 6.6412830352783203e-01 375 + blend 0.0000000000000000e+00 + interp 4.4582412463215160e-01:2.1277441414507764e-01:2.9702277209875394e-04:3.6563915944211867e-01:5.3485887962936041e-01:4.4581966639090531e-01:9.7648133953459282e-01:4.1770631714348300e-01:1.1859552682726375e+00:2.2421351713495560e-01:1.9611831179831949e+00:2.0108027521141908e-01:2.6837052890885933e+00:3.7390697740374496e-01:3.0695965517389272e+00 + CVs 20 + -4.5694338620947467e-01 3.4295913788454413e-01 -1.5052194653104214e-01 + -8.3087001900843660e-01 5.5585311701509976e-01 -2.3196004274612969e-01 + -1.2018901057692433e+00 6.4645459438653030e-01 -2.5944493826432735e-01 + -1.6172413874154274e+00 6.3212602447543731e-01 -2.3506272828008512e-01 + -2.0721369554152140e+00 5.7244554008862480e-01 -1.5626160863395377e-01 + -2.5692598434365137e+00 5.3029994772325240e-01 -4.1842439912315510e-02 + -3.1289064950494438e+00 5.3312995064668878e-01 4.9914786523451715e-02 + -3.7563097078606829e+00 5.9036252415444701e-01 4.3081903084002615e-02 + -4.4069520228197590e+00 7.1402839342347857e-01 -1.1565009698532536e-01 + -5.0026021944778654e+00 8.9877225600025601e-01 -4.3310993530084985e-01 + -5.4946228771486654e+00 1.1070807086096366e+00 -8.7191556364211531e-01 + -5.8735352023497205e+00 1.2876545219152737e+00 -1.3859567603240146e+00 + -6.1344826267015922e+00 1.3849937202792599e+00 -1.9448809497000876e+00 + -6.2628448554608545e+00 1.3508864480175413e+00 -2.5260533971381047e+00 + -6.2331188701178917e+00 1.1749592600172143e+00 -3.0698050806335333e+00 + -6.0580139774989714e+00 9.0686693346941860e-01 -3.4678911733720650e+00 + -5.8548230549346822e+00 6.1096532348116650e-01 -3.6576964513929289e+00 + -5.7494772053329610e+00 2.3858353522994635e-01 -3.6851104583586536e+00 + -5.6734052194644420e+00 -4.6376130077521971e-01 -3.7291147418064829e+00 + id 13451 + loc 8.5853308439254761e-01 2.3491515219211578e-01 380 + blend 0.0000000000000000e+00 + interp 6.2437312926362354e-01:3.9114829446609006e-01:6.4530647368549632e-02:5.2529699452097867e-01:9.5417692201352911e-01:6.2436688553233088e-01:1.3755367191787529e+00:3.8363052201680170e-01:1.9652380442302135e+00:3.9077265873513906e-01:2.3352941639569527e+00:2.7822363743967865e-01:2.9363820989958560e+00:4.2300856640644791e-01:3.1396850238194007e+00:4.3037273799801301e-01:3.7827506639983239e+00 + CVs 20 + 6.1552995005523825e-01 2.3583565619240407e-01 6.9235649577710923e-01 + 1.1267844236613962e+00 3.2811949921261530e-01 1.1798290509641960e+00 + 1.6078229903727768e+00 3.5337813197236823e-01 1.6314488543634693e+00 + 2.0832604286197198e+00 3.3650809852565411e-01 2.1100267171336284e+00 + 2.5381084045110738e+00 2.7191300134435048e-01 2.6069953972777133e+00 + 2.9628291388432322e+00 1.5134727129656000e-01 3.1059948700036983e+00 + 3.3532537725830949e+00 -3.2988607125451708e-02 3.5889713756251633e+00 + 3.7043311536062933e+00 -2.8088033289158343e-01 4.0418889799356661e+00 + 4.0129303227440971e+00 -5.8323115046669383e-01 4.4555465604245921e+00 + 4.2788980593799781e+00 -9.2457196429473099e-01 4.8211794944716022e+00 + 4.4986052957860290e+00 -1.2837985986375826e+00 5.1255676518078284e+00 + 4.6641321515265872e+00 -1.6341223855028320e+00 5.3589579751641097e+00 + 4.7836653119162724e+00 -1.9666330717410778e+00 5.5428101525381104e+00 + 4.8831484189409045e+00 -2.3137171740050269e+00 5.7260813893978728e+00 + 4.9772977153466664e+00 -2.6987682233988126e+00 5.9392181197553775e+00 + 5.0655598727717148e+00 -3.0881865493685896e+00 6.1799826181638959e+00 + 5.1445080784502473e+00 -3.4389953464473071e+00 6.4292625731695550e+00 + 5.2163488845994666e+00 -3.7446091986288628e+00 6.6719466005510881e+00 + 5.3062379797191550e+00 -3.9924594880669604e+00 6.8943149133810291e+00 + id 13452 + loc 2.9982590675354004e-01 4.7662961483001709e-01 373 + blend 0.0000000000000000e+00 + interp 4.9299113512167569e-01:3.4341861347256802e-01:5.9917291842450338e-01:3.8136899079671566e-01:1.0432320233476033e+00:3.4683806246328663e-01:1.8051086413988227e+00:4.0038140808621153e-01:2.0806129353707363e+00:4.9298620521032449e-01:2.6376203465117998e+00:3.8159545351136887e-01:3.0560798171160348e+00:3.3223953110724952e-01:3.8642618992840716e+00 + CVs 20 + -1.2744346934643822e-01 7.4413986568014789e-01 2.9081814481594426e-01 + -2.9924542497440509e-01 1.5527008571011269e+00 5.6704477698836830e-01 + -5.6080746831683814e-01 2.4031550166559885e+00 7.4341427368804114e-01 + -9.4889869762981205e-01 3.2365377381034417e+00 7.1424173647979217e-01 + -1.4631456993767931e+00 3.9450468167799522e+00 4.1220163973276680e-01 + -2.0542041010525143e+00 4.3982717569062935e+00 -1.5063444318171282e-01 + -2.6261188308129033e+00 4.4995202055738730e+00 -8.6788641941420575e-01 + -3.1022265575961168e+00 4.2546604813317765e+00 -1.5920686865158684e+00 + -3.4460561684931030e+00 3.7140989287938693e+00 -2.2170088041384344e+00 + -3.6263504880381023e+00 2.9356141743812447e+00 -2.6810967464445676e+00 + -3.6201553063856520e+00 2.0124570564309043e+00 -2.9774796901085705e+00 + -3.4304960600546428e+00 1.0677342799029210e+00 -3.1216863756629065e+00 + -3.0574095303140463e+00 1.2037808339007083e-01 -3.2047721843113228e+00 + -2.4866852041916010e+00 -8.1152937539232539e-01 -3.3591713142377500e+00 + -1.7448174048448994e+00 -1.6651094894945253e+00 -3.6884642602178155e+00 + -1.1063150789161009e+00 -2.2799561240406936e+00 -4.4171564360532241e+00 + -9.1723438032633731e-01 -2.4428834668133090e+00 -5.4983069208941853e+00 + -1.3163512537776354e+00 -2.2620070860331674e+00 -6.5935586514587348e+00 + -2.0794811825282467e+00 -1.9538996045836940e+00 -7.3727669966768445e+00 + id 13453 + loc 6.3599556684494019e-01 3.3731275796890259e-01 399 + blend 0.0000000000000000e+00 + interp 3.8215081683480384e-01:3.1785184942570871e-01:5.0474965468828459e-02:2.8904215670212230e-01:9.0919074516825926e-01:3.3011976654396780e-01:1.8729938919673619e+00:3.8214699532663549e-01:2.3328982150396800e+00:2.6429785849124549e-01:3.0222778960662247e+00 + CVs 20 + 2.6824630380173392e-01 3.6054733418099233e-01 1.9451601007124802e-01 + 5.3346824137709181e-01 7.2495027484959063e-01 4.2956129317299430e-01 + 7.7646628204978585e-01 1.0768782631009319e+00 7.3630600969120441e-01 + 1.0031521175102978e+00 1.4028060476265518e+00 1.0923809013353341e+00 + 1.2284358516338911e+00 1.7000982233852502e+00 1.4718107700522896e+00 + 1.4604108719563684e+00 1.9628200864353311e+00 1.8624028433696005e+00 + 1.7030733316035453e+00 2.1764643907014629e+00 2.2565764531467534e+00 + 1.9605501714621827e+00 2.3214733939843613e+00 2.6456061391261865e+00 + 2.2354121103264450e+00 2.3801403277149351e+00 3.0216126350384545e+00 + 2.5262392742626183e+00 2.3371451408651001e+00 3.3763389356359252e+00 + 2.8237696921051425e+00 2.1995919494553959e+00 3.6901746119792058e+00 + 3.1133233325741383e+00 2.0205169066316686e+00 3.9517083722847532e+00 + 3.3862144998628905e+00 1.8617282704679494e+00 4.1784741072052505e+00 + 3.6295080859384616e+00 1.7745645252255111e+00 4.3915966254715260e+00 + 3.8243711875139659e+00 1.7800415544950203e+00 4.5956427165723763e+00 + 3.9756353505145205e+00 1.8367982936178353e+00 4.7988051623343839e+00 + 4.1002330668552096e+00 1.9051142392802234e+00 5.0249872014549579e+00 + 4.2002691625727149e+00 1.9793574614785321e+00 5.2818151963944562e+00 + 4.2710003966971390e+00 2.0581351425901615e+00 5.5414305767237861e+00 + id 13454 + loc 8.5600268840789795e-01 3.9447265863418579e-01 393 + blend 0.0000000000000000e+00 + interp 4.5134773116317539e-01:4.2455739451267510e-01:2.2124190553424983e-01:2.4169520456969429e-01:1.1721419671110198e+00:3.5323217228921377e-01:2.2812859321597552e+00:3.2524021589386132e-01:2.9944467901555072e+00:4.5134321768586377e-01:3.7988836883089969e+00 + CVs 20 + 2.5043844043082270e-01 3.4128101061400334e-01 2.0526376750108616e-01 + 5.1445051777381146e-01 6.9625930282796800e-01 3.6706623517596954e-01 + 7.7114441491829844e-01 1.0694266898922837e+00 5.1418146173429580e-01 + 1.0154437364658568e+00 1.4455866545319924e+00 6.7641063229034248e-01 + 1.2480036828496486e+00 1.7949329849383251e+00 8.8186713380886239e-01 + 1.4641080720782200e+00 2.0898344244898599e+00 1.1463041178039377e+00 + 1.6523558106955059e+00 2.3127522291698326e+00 1.4654535019304824e+00 + 1.8024825552485200e+00 2.4547235671307925e+00 1.8197194085941053e+00 + 1.9127570280935251e+00 2.5159403934690578e+00 2.1855487855157718e+00 + 1.9859744758193467e+00 2.5061457801253373e+00 2.5437333807431006e+00 + 2.0262535604459315e+00 2.4423287296449359e+00 2.8834825345120803e+00 + 2.0411058535530762e+00 2.3466204436627360e+00 3.2029023644719432e+00 + 2.0313230449979711e+00 2.2422026901751977e+00 3.5103506413373369e+00 + 1.9855460433070915e+00 2.1517890709353291e+00 3.8295980396091815e+00 + 1.8969887472639448e+00 2.0565087351949987e+00 4.1982311127545877e+00 + 1.7928709523820858e+00 1.8288487036418559e+00 4.6096953963781564e+00 + 1.7622302477403833e+00 1.3768388714520421e+00 4.9483491986886072e+00 + 1.9080032127193542e+00 8.3074602430092259e-01 5.0748548557634336e+00 + 2.2362944468742931e+00 4.3811318755921391e-01 4.9123647525344243e+00 + id 13455 + loc 9.0767556428909302e-01 4.4289398193359375e-01 409 + blend 0.0000000000000000e+00 + interp 5.0024155532798609e-01:3.0313500033215279e-01:5.8142417957011971e-01:3.2942425169105038e-01:1.2052870990412365e+00:5.0023655291243285e-01:1.9409830817765339e+00:3.0233149506636653e-01:2.4873222938623236e+00:3.2003373285099035e-01:3.0922148275695385e+00:3.2252900751190672e-01:3.9263615384926585e+00 + CVs 20 + -3.5854912118906401e-01 1.7367620142302787e-01 1.9280282117458863e-01 + -7.1927099734042765e-01 3.2001171414940033e-01 3.7482600914326220e-01 + -1.1056936181245740e+00 4.5672810961248611e-01 5.3868740890766786e-01 + -1.5251899899734829e+00 5.8544499665811389e-01 6.8165153312745697e-01 + -1.9705333297929097e+00 6.9827973431256807e-01 8.0283349997180165e-01 + -2.4333749868467072e+00 7.8765694169231337e-01 9.0357361168605499e-01 + -2.9060298805980569e+00 8.4121928161827575e-01 9.8428818375885307e-01 + -3.3801471963104226e+00 8.3900156607800769e-01 1.0441398510271636e+00 + -3.8451000217515778e+00 7.6081206470306162e-01 1.0906207592554071e+00 + -4.2843087091514196e+00 5.9046757861181987e-01 1.1415712530136453e+00 + -4.6703664530704057e+00 3.2359790950000988e-01 1.2055245100901129e+00 + -4.9793421703117513e+00 -1.7829991297538594e-02 1.2716941793264429e+00 + -5.2086532921912028e+00 -4.0016222540189128e-01 1.3302212125191257e+00 + -5.3654297670092621e+00 -8.0199789880662031e-01 1.3840920751529868e+00 + -5.4508246834696195e+00 -1.2097912601053356e+00 1.4325116854238749e+00 + -5.4618486869166691e+00 -1.6049637442818523e+00 1.4577758577689663e+00 + -5.4066054282817042e+00 -1.9654761060719901e+00 1.4446756050391980e+00 + -5.3166298292198242e+00 -2.2852270633224547e+00 1.4107830955649512e+00 + -5.2995306256288144e+00 -2.5973177229184783e+00 1.4270590743375791e+00 + id 13456 + loc 7.1876430511474609e-01 6.5770410001277924e-02 401 + blend 0.0000000000000000e+00 + interp 4.7486490212391552e-01:4.7486015347489430e-01:1.3382070182321792e-01:3.5575931957803253e-01:9.9744485954231132e-01:3.9789791723530060e-01:1.8250249244843397e+00:2.6384915248556035e-01:2.1047760349469251e+00:2.9740856175480296e-01:3.0670369470323156e+00:3.1657768882478410e-01:3.9255903973933228e+00 + CVs 20 + 7.8210896910268959e-02 2.7559413491405882e-01 2.2906795981535052e-01 + 1.7600477373575937e-01 5.2108119058885893e-01 4.4742009024846074e-01 + 2.8587666776237386e-01 7.3745059989320727e-01 6.5816666173247351e-01 + 4.0157453403055265e-01 9.2643352114360533e-01 8.6092430425831790e-01 + 5.2142230350922314e-01 1.0903158483085806e+00 1.0560949547392577e+00 + 6.4590552927611367e-01 1.2324651995413247e+00 1.2489726864138615e+00 + 7.8064943253446895e-01 1.3495023667164285e+00 1.4527779818761579e+00 + 9.3626648351861963e-01 1.4285862826621427e+00 1.6809017380454250e+00 + 1.1223678727141024e+00 1.4733782596901166e+00 1.9293060799179051e+00 + 1.3452406466841564e+00 1.5091047071842905e+00 2.1866238214659406e+00 + 1.6043277519495409e+00 1.5254706644327654e+00 2.4594042530835227e+00 + 1.8790329736807001e+00 1.4588865773201762e+00 2.7547123184087301e+00 + 2.1495409096903786e+00 1.2931796000971081e+00 3.0563258742328427e+00 + 2.4367830748206480e+00 1.0922764358536794e+00 3.3509033146884217e+00 + 2.7716572577716465e+00 9.0444440507316892e-01 3.6324679169898748e+00 + 3.1395978928889048e+00 7.2199820582503271e-01 3.8805650615585634e+00 + 3.4490419065782913e+00 5.7847006680731528e-01 4.0580143777080062e+00 + 3.5890069315657707e+00 5.4482165637785496e-01 4.1521623298853765e+00 + 4.0285697419671571e+00 6.5773464769332957e-01 4.3056188577794652e+00 + id 13457 + loc 5.5343121290206909e-01 4.1120257228612900e-02 400 + blend 0.0000000000000000e+00 + interp 4.9765099363070481e-01:3.1318593864794242e-01:7.7776834219889668e-01:4.9764601712076850e-01:1.0910527791202318e+00:3.5731026822480377e-01:2.0001086976403615e+00:2.9050254094458100e-01:2.6144600175138297e+00:3.0609558040174900e-01:3.7730722579441842e+00 + CVs 20 + 3.3504553083517896e-01 2.7670382893624335e-01 2.0362871653128811e-01 + 6.5274468499114480e-01 5.3829895696918928e-01 3.8049809254203004e-01 + 9.5133205783718733e-01 7.9669201706738224e-01 5.6215602207484228e-01 + 1.2304747307626724e+00 1.0472508226584114e+00 7.6335412566974969e-01 + 1.4937218818973519e+00 1.2758207702696041e+00 9.8715357928077285e-01 + 1.7479679666606738e+00 1.4682126201834049e+00 1.2323240278746397e+00 + 2.0010090111252916e+00 1.6131099115488525e+00 1.5006755659152249e+00 + 2.2566211736168937e+00 1.6980951322719726e+00 1.7948781791827062e+00 + 2.5109368574037649e+00 1.7119728701483470e+00 2.1089058865493127e+00 + 2.7565069611288990e+00 1.6540982641591881e+00 2.4298141825101958e+00 + 2.9886429385072586e+00 1.5338962752583898e+00 2.7494071431856297e+00 + 3.2031150393458980e+00 1.3645972751034567e+00 3.0660802204993129e+00 + 3.3939444283306170e+00 1.1611789615594448e+00 3.3781800623676559e+00 + 3.5592422530757837e+00 9.3467804562463797e-01 3.6826483707865343e+00 + 3.6997123351211534e+00 6.9640770655368422e-01 3.9746712109141473e+00 + 3.8063789807930672e+00 4.8845066370436419e-01 4.2373093661406331e+00 + 3.8534067210541476e+00 3.9433512277129124e-01 4.4171052730180751e+00 + 3.8262907022744228e+00 4.1131574352821243e-01 4.4395744588713999e+00 + 3.8752964896598967e+00 4.3041684665843860e-01 4.7178082341651582e+00 + id 13458 + loc 4.9359464645385742e-01 7.2794294357299805e-01 1078 + blend 0.0000000000000000e+00 + interp 4.7477206522974458e-01:3.1576263950736028e-01:2.2040938058435744e-01:4.7476731750909229e-01:9.9211221953851869e-01:2.9469511594919828e-01:1.7504965997920223e+00:2.6732858613975180e-01:2.2781021235839716e+00:2.9836526982526274e-01:2.9949769044009011e+00:2.7375468021331023e-01:3.6489396527856988e+00 + CVs 20 + 1.8436052738759515e-01 2.7319649641739341e-01 -5.4256833492734330e-02 + 3.4184986521928740e-01 5.3578136990406910e-01 -1.3774456054916484e-01 + 4.8592211484208714e-01 7.9109507894264475e-01 -2.4483610543333184e-01 + 6.2317606529035097e-01 1.0323408060586163e+00 -3.7797977577501285e-01 + 7.5488882470197227e-01 1.2478595813364286e+00 -5.4465505724746799e-01 + 8.7798510784182038e-01 1.4258916666566794e+00 -7.4925686206626962e-01 + 9.8408697959288549e-01 1.5557859851555271e+00 -9.9106842118753424e-01 + 1.0603396778721916e+00 1.6291194133010796e+00 -1.2619331355919587e+00 + 1.0930828644737745e+00 1.6414141368523114e+00 -1.5459554777468423e+00 + 1.0741519065721308e+00 1.5931194440386369e+00 -1.8247056451145462e+00 + 1.0024492232446391e+00 1.4871242967409219e+00 -2.0814778563211660e+00 + 8.8376716430283608e-01 1.3240927021568931e+00 -2.3094562702894561e+00 + 7.2844808428204821e-01 1.0998548090804237e+00 -2.5186222996843113e+00 + 5.5304292196154381e-01 8.3434288052978367e-01 -2.7256309694596883e+00 + 3.8509041146727196e-01 6.0892034608921808e-01 -2.9667990545040839e+00 + 2.6275814152914834e-01 5.4780686443208859e-01 -3.2705707984937131e+00 + 2.2881912000161519e-01 7.0796931726858037e-01 -3.6038159164242285e+00 + 3.5496665228975804e-01 1.1504455748128222e+00 -3.8535714067663704e+00 + 3.4240563220310688e-01 1.3196121019646221e+00 -4.0106193682705076e+00 + id 13459 + loc 4.8372244834899902e-01 9.1654479503631592e-01 412 + blend 0.0000000000000000e+00 + interp 4.2865525971540080e-01:3.1038561229890221e-01:7.1115936521946499e-01:2.9237573592096822e-01:1.1615916458546920e+00:4.0383626867024647e-01:1.9675769059283224e+00:3.3503376529203877e-01:2.9333864018883693e+00:4.2865097316280365e-01:3.7863472533726972e+00 + CVs 20 + 8.6812808410564124e-01 1.2627860111392000e-01 -2.0759199057885572e-01 + 1.4074069975489429e+00 1.0694725578297642e-01 -4.0686272592923345e-01 + 1.8664968770337635e+00 4.1114515969759236e-02 -5.9655903352593653e-01 + 2.3347576938796251e+00 -3.5252890775960666e-02 -7.7579788290479235e-01 + 2.8065795735940680e+00 -1.2708154764216717e-01 -9.4111195338633857e-01 + 3.2808621328584557e+00 -2.3819005880351019e-01 -1.0886054590951315e+00 + 3.7565459052752028e+00 -3.6961047344144315e-01 -1.2141472994201701e+00 + 4.2310451092006396e+00 -5.1948035551877614e-01 -1.3142297247691093e+00 + 4.7014932147462751e+00 -6.8624146919080531e-01 -1.3871954353890954e+00 + 5.1626741705898374e+00 -8.6857897372737858e-01 -1.4329941529459533e+00 + 5.5961580903594204e+00 -1.0628300669931614e+00 -1.4579458499509166e+00 + 5.9699847546516489e+00 -1.2642040620759916e+00 -1.4847744968183743e+00 + 6.2735904217507823e+00 -1.4746862351661736e+00 -1.5408067087220294e+00 + 6.5356299994100180e+00 -1.7106464382967888e+00 -1.6354479244467681e+00 + 6.7739675445163643e+00 -1.9836470475274461e+00 -1.7688989318991011e+00 + 6.9720809872607958e+00 -2.2758213752175580e+00 -1.9400897640981662e+00 + 7.1111149760204500e+00 -2.5557670599282809e+00 -2.1443685391383362e+00 + 7.1930719429236607e+00 -2.8069462090127413e+00 -2.3715245407864725e+00 + 7.3113518320849034e+00 -3.1204946202902484e+00 -2.6078092697717397e+00 + id 13460 + loc 5.6636470556259155e-01 4.7763633728027344e-01 1080 + blend 0.0000000000000000e+00 + interp 4.8707055470879790e-01:3.0441240651493690e-01:2.7894529298685677e-01:3.3094092202647468e-01:1.0055800610313013e+00:2.8058962576690299e-01:1.6644180636453343e+00:4.3347600985692519e-01:2.0041235780545952e+00:4.3927816414893989e-01:2.4652236654358259e+00:2.6978851218804051e-01:3.0258017480362631e+00:4.8706568400325084e-01:3.9942520559612644e+00 + CVs 20 + -3.0730151688164453e-04 4.2722682978762605e-01 -4.0378768016827432e-01 + -2.3686979897770966e-03 7.5173444743175388e-01 -6.2710219928541833e-01 + 1.5200265146754349e-03 1.0438644516835334e+00 -8.0091134976919276e-01 + 1.2134962874008906e-02 1.3367570496875141e+00 -9.7630210103812620e-01 + 2.3666748519587319e-02 1.6233253193066810e+00 -1.1452043651074235e+00 + 2.5152229364019146e-02 1.9068198572203392e+00 -1.3010333522245299e+00 + -1.1575278224988578e-02 2.2163416995612013e+00 -1.4347194501673024e+00 + -1.9319093346019625e-01 2.6300557147889263e+00 -1.4846559294420456e+00 + -6.8285807046410618e-01 2.9985400155643704e+00 -1.1773456260609141e+00 + -1.0652553785823446e+00 2.9404220346574537e+00 -7.1236926141485668e-01 + -1.2628482642713188e+00 2.7373963909069881e+00 -3.6383722335157032e-01 + -1.3906463859078533e+00 2.5056237404289061e+00 -8.9964070692365006e-02 + -1.4918456179318431e+00 2.2941025533023600e+00 1.1924743703452356e-01 + -1.5910246063141067e+00 2.1619279619110801e+00 2.3373929200083066e-01 + -1.7069031331440969e+00 2.1871353960177564e+00 1.2513718724303347e-01 + -1.7816331868643962e+00 2.2641106601015291e+00 -6.5001641275131661e-01 + -8.5920024363815728e-01 6.9095964938064180e-01 -2.0562248042941031e+00 + -9.7100063680249316e-02 -4.2567210733880073e-01 -1.3637019482281310e+00 + -1.2889518264282601e-01 -4.4862366986563540e-01 -1.4535297518822776e+00 + id 13461 + loc 2.7789995074272156e-01 5.7566817849874496e-03 1068 + blend 0.0000000000000000e+00 + interp 3.8854561478918687e-01:1.1394768320471012e-01:6.6670191097192744e-01:3.8854172933303899e-01:1.1049975873008435e+00:2.8463142817454706e-01:2.0066843251667539e+00:2.8514809406727115e-01:2.9445267418856504e+00:3.6494747703406255e-01:3.3935404268963674e+00 + CVs 20 + -1.4529174596154490e-01 2.4278433118913773e-01 -3.0214483034904122e-01 + -2.9929966070459779e-01 5.1228522935594223e-01 -6.0092886547769220e-01 + -4.7324124549834967e-01 8.0190969836981985e-01 -9.0710566456056940e-01 + -6.8785333142178284e-01 1.1148826350130281e+00 -1.2088607071263984e+00 + -9.6777197048489727e-01 1.4487205022758940e+00 -1.4786759841119252e+00 + -1.3343054910182011e+00 1.7805050823274031e+00 -1.6852009245845441e+00 + -1.7938486414847479e+00 2.0641062084147865e+00 -1.8048690550314537e+00 + -2.3315131103161493e+00 2.2406576911444889e+00 -1.8364539933851596e+00 + -2.9118483947645237e+00 2.2606068309861334e+00 -1.7910553518774137e+00 + -3.4811189025510059e+00 2.1090172705556465e+00 -1.6813058120002242e+00 + -3.9917105096846712e+00 1.8176377832728849e+00 -1.5390869960496967e+00 + -4.4389020390120377e+00 1.4518011563543551e+00 -1.4173757369920823e+00 + -4.8509680942028233e+00 1.0645240742769504e+00 -1.3587844021240127e+00 + -5.2485771850591068e+00 6.8594160674224014e-01 -1.3934767270681743e+00 + -5.6281444644684449e+00 3.3651384214142843e-01 -1.5808933163749694e+00 + -5.9281289672516539e+00 6.9441188717252911e-02 -2.0541307786692706e+00 + -6.0199582015035764e+00 3.5375140297422947e-02 -2.8171457323999207e+00 + -6.0020094392432286e+00 1.5689960931148728e-01 -3.4890464960230685e+00 + -6.2213728725987147e+00 3.6621157552980677e-03 -3.8456432152554592e+00 + id 13462 + loc 8.9541840553283691e-01 7.1882218122482300e-01 376 + blend 0.0000000000000000e+00 + interp 4.0350795518686083e-01:4.0350392010730901e-01:3.0724637399379362e-01:3.5566006074457496e-01:9.8508204489003814e-01:2.5139903944442255e-01:1.2302366071024029e+00:3.0282605427459436e-01:1.8784180353647151e+00:3.2262542728955829e-01:2.3617686602799295e+00:2.3134151239041303e-01:2.8918141643299391e+00:3.1875259012941881e-01:3.9492107792232769e+00 + CVs 20 + 1.0636159009987302e-01 4.6655523962864193e-01 4.8800840635873144e-01 + 3.2200219183698525e-01 7.8773067428497623e-01 9.3000046127995095e-01 + 6.1697322623985695e-01 9.6176611165654624e-01 1.3546087569946843e+00 + 9.4487442089822915e-01 1.0677780304540221e+00 1.7769553660056427e+00 + 1.2582025918934361e+00 1.1761922407902070e+00 2.2312740636367470e+00 + 1.5021669925720793e+00 1.3114662309869560e+00 2.7578386883742452e+00 + 1.6185841419662459e+00 1.4619591314753959e+00 3.3535855105254875e+00 + 1.5754130063397438e+00 1.6018029011401400e+00 3.9752214293323136e+00 + 1.3801214142880196e+00 1.7018863218010192e+00 4.5716663718552519e+00 + 1.0762174982953294e+00 1.7310550377903553e+00 5.0987340750668695e+00 + 7.2628413962045069e-01 1.6721032894677510e+00 5.5264264148869975e+00 + 4.0047639638914956e-01 1.5352542212255000e+00 5.8287578602153935e+00 + 1.5844698788792422e-01 1.3654966649442737e+00 5.9930824075854732e+00 + 5.1311191373640264e-03 1.2229241175386742e+00 6.0440123858173473e+00 + -8.1331205966118592e-02 1.1647068901275075e+00 6.0075854873225314e+00 + -1.4415562515881597e-01 1.2715636402443020e+00 5.8670312787152268e+00 + -3.4152788461839301e-01 1.5912665052612178e+00 5.5690574209058665e+00 + -7.9699518681177584e-01 1.7502147853523857e+00 5.1592964730822111e+00 + -8.7048919392083624e-01 1.3928092187163574e+00 4.9748930144130856e+00 + id 13463 + loc 9.1911822557449341e-01 3.9752626419067383e-01 378 + blend 0.0000000000000000e+00 + interp 6.4823649674956019e-01:3.1571880838846855e-01:2.2260386519797026e-01:4.5344176322137647e-01:9.9059117186822121e-01:6.4823001438459271e-01:1.4578545999689339e+00:3.7766572907790280e-01:2.0650705307331441e+00:2.9526464492760213e-01:2.9653745233050284e+00:2.6834810638824591e-01:3.8600342988728871e+00 + CVs 20 + -4.2137198712678381e-01 4.4270051983197461e-01 -8.5781399991425866e-03 + -8.3247955717301947e-01 8.3124542368987997e-01 -2.2066288343065787e-02 + -1.2547489032495802e+00 1.1726548002432440e+00 -2.9039461783859383e-02 + -1.6774585996542681e+00 1.4797855763434602e+00 -4.2685910527515802e-02 + -2.0886787312492032e+00 1.7557664005787172e+00 -8.0764262135844589e-02 + -2.4919841696231133e+00 1.9922330924222380e+00 -1.5216419666536651e-01 + -2.8921032153549300e+00 2.1800992985277250e+00 -2.5685480938631688e-01 + -3.2896466729433946e+00 2.3180989778731869e+00 -3.8943825594433967e-01 + -3.6910813875316042e+00 2.4092397948819855e+00 -5.4393940586475076e-01 + -4.1108252892776225e+00 2.4500505466636637e+00 -7.1594726300102907e-01 + -4.5573183826445316e+00 2.4221753754639650e+00 -8.9961015161423863e-01 + -5.0228375374035199e+00 2.2966525660218871e+00 -1.0839832536395373e+00 + -5.4831542132784481e+00 2.0616972100321527e+00 -1.2509396475707806e+00 + -5.9139070750956284e+00 1.7639826732268693e+00 -1.3840856131710422e+00 + -6.3209983090025599e+00 1.4876783595435916e+00 -1.4879401129598637e+00 + -6.7290916011117741e+00 1.2921263196103121e+00 -1.5706296619287565e+00 + -7.1471493193271236e+00 1.1994772247025609e+00 -1.6168193921285816e+00 + -7.5678893054413701e+00 1.1914492374224332e+00 -1.6227869071776229e+00 + -8.0470546045680837e+00 1.1430706240972484e+00 -1.6530598201432141e+00 + id 13464 + loc 3.7055066227912903e-01 7.8708404302597046e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7383586073507006e-01:4.1905640839749403e-01:3.2064807384449723e-02:4.7383112237646274e-01:7.3750692990268885e-01:2.7486283891088292e-01:1.6315934703957982e+00:3.1794028260261392e-01:2.2882677727017464e+00:3.3924911896856319e-01:2.9534096940552486e+00:4.3222553120996199e-01:3.3991170451860016e+00 + CVs 20 + 2.8968363253106699e-01 2.3656656748795793e-01 -2.4768010964098333e-01 + 5.5712401213636253e-01 4.8023450842356807e-01 -4.7174386563731896e-01 + 7.9975349508072369e-01 7.3076220351419652e-01 -6.7921257996425166e-01 + 1.0128638490452271e+00 9.8879344510227429e-01 -8.8094590166328235e-01 + 1.1908028349696405e+00 1.2556148562915426e+00 -1.0885584157777672e+00 + 1.3263193679113967e+00 1.5280441914813729e+00 -1.3127671117872430e+00 + 1.4145577897533474e+00 1.7970001874472326e+00 -1.5655900413398987e+00 + 1.4561778649225170e+00 2.0488142789168453e+00 -1.8644868817075886e+00 + 1.4518311377825239e+00 2.2611036618004290e+00 -2.2311533197430053e+00 + 1.3988817640516595e+00 2.4009860291586942e+00 -2.6753879315889915e+00 + 1.3000246727469484e+00 2.4413549565599499e+00 -3.1798752412060152e+00 + 1.1721691879173934e+00 2.3808902559181817e+00 -3.7124737013098494e+00 + 1.0439945244319095e+00 2.2389620442333604e+00 -4.2496824302368212e+00 + 9.4832334980736166e-01 2.0412648509585689e+00 -4.7790563462011511e+00 + 9.2192112596307707e-01 1.8115407948960467e+00 -5.2942747195672455e+00 + 1.0258695645953317e+00 1.5735839456362741e+00 -5.7811304412353355e+00 + 1.3330743067296156e+00 1.3866354145998165e+00 -6.1850596792612862e+00 + 1.7818843461267013e+00 1.2955390302576155e+00 -6.4683209309588161e+00 + 2.1383557739842436e+00 1.1578325176852180e+00 -6.7691309663549468e+00 + id 13465 + loc 4.8073813319206238e-01 3.0497097969055176e-01 402 + blend 0.0000000000000000e+00 + interp 3.8726474658973681e-01:3.8726087394227093e-01:1.4292268113752316e-01:3.3152004809457553e-01:1.0200794095348418e+00:2.5848022725473857e-01:2.0880003404960124e+00:3.2763497595687885e-01:2.9238367915266075e+00:3.2169588818051315e-01:3.4367021513974576e+00 + CVs 20 + -5.4589663128100041e-02 4.8140413430629325e-01 1.6352219286321693e-01 + -1.6829252477803053e-01 9.9413375698363371e-01 2.9620849601269755e-01 + -3.3725558972584102e-01 1.5187634402120320e+00 4.2269825348933648e-01 + -5.6186802560206794e-01 2.0322201559059998e+00 6.2020381711097783e-01 + -8.3036696629415918e-01 2.4787350385847580e+00 9.6112552784183480e-01 + -1.1226550471154726e+00 2.7819876387873803e+00 1.4523632406227862e+00 + -1.4291181598590941e+00 2.8873179418012533e+00 2.0328774951058066e+00 + -1.7580513264347823e+00 2.7819469105593204e+00 2.6137511226665953e+00 + -2.1190522893894124e+00 2.4656007043787946e+00 3.1186102869893499e+00 + -2.4871286393041920e+00 1.9447746155821652e+00 3.4641215944469419e+00 + -2.7793068017739220e+00 1.3306391913260018e+00 3.6008248045433833e+00 + -2.9533678712988847e+00 7.7956882406272376e-01 3.6389973673284750e+00 + -3.0602486894876701e+00 3.2186731943381186e-01 3.7132804270541828e+00 + -3.1631607614625250e+00 -6.7812077630544865e-02 3.8748545381049055e+00 + -3.3087210394310311e+00 -4.1951553825990362e-01 4.1205864916367752e+00 + -3.5249696786430027e+00 -7.6955587501148137e-01 4.4098873447641802e+00 + -3.8016852645125176e+00 -1.1321847260165177e+00 4.6976777197366868e+00 + -4.1064667362238048e+00 -1.4885269473608707e+00 4.9656261819185525e+00 + -4.3780741114681927e+00 -1.8280962752289622e+00 5.2403072839138378e+00 + id 13466 + loc 8.2672286033630371e-01 9.4250333309173584e-01 415 + blend 0.0000000000000000e+00 + interp 5.1246237311504839e-01:3.4940488044280765e-01:9.2428572446219026e-01:3.8882157032904541e-01:1.7444753219265032e+00:4.3269548332797025e-01:2.0117336742840259e+00:5.1245724849131724e-01:2.6758779647767388e+00:4.2713516223737652e-01:3.5580464703446886e+00:4.8270389849881978e-01:3.9956909694108265e+00 + CVs 20 + 4.2000706349393307e-01 1.8258609467790854e-01 -2.5878786447890642e-02 + 7.3497979114147283e-01 2.7156493958527900e-01 -6.5624160579396684e-02 + 1.0300272379666593e+00 3.2530681714251647e-01 -9.4168042533189167e-02 + 1.3434014505596716e+00 3.7003399388580149e-01 -9.5262543159185864e-02 + 1.6687529677443613e+00 4.0369944796629342e-01 -6.3054584261988456e-02 + 1.9968464521597789e+00 4.2463442374013716e-01 8.4427802507751060e-03 + 2.3179239575167712e+00 4.3190200266932399e-01 1.2472858944445298e-01 + 2.6229309590513257e+00 4.2356712221328874e-01 2.8715346610190140e-01 + 2.9011114625936192e+00 3.9677584009492128e-01 4.9074389802889556e-01 + 3.1417701220872125e+00 3.5132066574568110e-01 7.2602348793509841e-01 + 3.3510990191186583e+00 2.8642764439489077e-01 9.8516853309769492e-01 + 3.5639122394135194e+00 1.9066415130368219e-01 1.2625477355669958e+00 + 3.8111689284482289e+00 4.2522391466792930e-02 1.5347114758292340e+00 + 4.0747148143601262e+00 -1.6222954541816348e-01 1.7607263215201348e+00 + 4.3174102869061084e+00 -4.0275591138941280e-01 1.9238539970098758e+00 + 4.5296467668810569e+00 -6.6116879650657889e-01 2.0299653738408177e+00 + 4.7154955212588128e+00 -9.2786487866834744e-01 2.0858062510193758e+00 + 4.8678465190605174e+00 -1.1865964894049594e+00 2.0984667253366402e+00 + 4.9028979936534833e+00 -1.3579301884886683e+00 2.0836537532028157e+00 + id 13467 + loc 4.4592660665512085e-01 8.0515015125274658e-01 382 + blend 0.0000000000000000e+00 + interp 4.8732132315053911e-01:3.7479740578063275e-01:2.0149433597398525e-01:2.3683515309629075e-01:8.9243301199680658e-01:3.6911238483385855e-01:1.3531840459247899e+00:3.9412080548296630e-01:2.1094303362642290e+00:4.0754309261660454e-01:2.7922080252226937e+00:4.3087562614813602e-01:3.0849845415273038e+00:4.8731644993730761e-01:3.8797236728939026e+00 + CVs 20 + 9.3497305148957832e-01 2.5622036240297508e-01 -4.8810557077812250e-01 + 1.5417019247778305e+00 3.9767494418488947e-01 -8.1713779745538517e-01 + 2.0740446570637028e+00 4.9018866711649550e-01 -1.1247364463993192e+00 + 2.6473915714923626e+00 5.6166146503177050e-01 -1.4736754245984236e+00 + 3.2545562016070564e+00 5.9106856238788708e-01 -1.8742184804890951e+00 + 3.8809124203842784e+00 5.6137517952141236e-01 -2.3305010342431993e+00 + 4.5067394077422458e+00 4.6301996151092067e-01 -2.8414145837945441e+00 + 5.1127305817338859e+00 2.7666972765307596e-01 -3.3882513130243259e+00 + 5.6776115458861813e+00 -1.9536826254519024e-02 -3.9348323200132662e+00 + 6.1702007191134278e+00 -4.3034416378788265e-01 -4.4413901880545588e+00 + 6.5429834594189051e+00 -9.3434609739346453e-01 -4.8816757666298267e+00 + 6.7490883289999335e+00 -1.4867057724951287e+00 -5.2455922291093522e+00 + 6.7791068922852755e+00 -2.0339785077092012e+00 -5.5331427153366803e+00 + 6.6540944846979544e+00 -2.5398241436180409e+00 -5.7591153972146829e+00 + 6.4072566465568190e+00 -2.9836479795502391e+00 -5.9450495931560052e+00 + 6.0760139976338117e+00 -3.3489182422426453e+00 -6.1113221014134265e+00 + 5.6967885487466097e+00 -3.6333730895657097e+00 -6.2757983328868336e+00 + 5.2901723369312315e+00 -3.8650381748474523e+00 -6.4481287382302508e+00 + 4.8149470422995577e+00 -4.1614895530304068e+00 -6.6083480384291793e+00 + id 13468 + loc 1.7140322923660278e-01 6.7320495843887329e-01 396 + blend 0.0000000000000000e+00 + interp 3.7988466530129167e-01:2.9897700572673702e-01:3.4885003459106634e-01:3.7988086645463870e-01:1.2649642466107172e+00:3.2164009637379998e-01:2.0493861162537330e+00:3.2577433757194812e-01:2.9679478156206747e+00:3.7605585194807678e-01:3.9005766603972769e+00 + CVs 20 + 8.3499195725450004e-01 2.8527838817983264e-01 -2.2636965932781175e-01 + 1.4532656834957933e+00 4.1583797797390465e-01 -4.0524597496190456e-01 + 2.0331735994877462e+00 4.9153715152231214e-01 -5.6717707363413017e-01 + 2.6543070817041770e+00 5.4818789539054524e-01 -7.2573496933593407e-01 + 3.3035509776837753e+00 5.6971191213492489e-01 -8.8074187384175784e-01 + 3.9625336667743221e+00 5.4025886150378022e-01 -1.0383242309519591e+00 + 4.6097494148005413e+00 4.4480377728004949e-01 -1.2074669578270392e+00 + 5.2216994860797357e+00 2.6839738438065153e-01 -1.3929177488482853e+00 + 5.7721412931091614e+00 9.2323323815768354e-04 -1.5956349678764270e+00 + 6.2299784063411305e+00 -3.5455459196111438e-01 -1.8162380295400684e+00 + 6.5660390098377466e+00 -7.7550096544312641e-01 -2.0492154108847518e+00 + 6.7731572838339797e+00 -1.2284679272598737e+00 -2.2791473810859726e+00 + 6.8692174826381196e+00 -1.6881053349608373e+00 -2.4908035257798975e+00 + 6.8789850383096267e+00 -2.1387808517453761e+00 -2.6766425233678079e+00 + 6.8290213449374821e+00 -2.5679961656591641e+00 -2.8373464925590062e+00 + 6.7454936468683586e+00 -2.9725278458809350e+00 -2.9781486631443470e+00 + 6.6457388591536937e+00 -3.3600513117292738e+00 -3.1048095158135887e+00 + 6.5378931110018996e+00 -3.7434430486385075e+00 -3.2261093740055751e+00 + 6.4493764889339094e+00 -4.1886018759021280e+00 -3.3724504689636494e+00 + id 13469 + loc 5.7184809446334839e-01 4.9528095126152039e-01 403 + blend 0.0000000000000000e+00 + interp 4.6215192506418823e-01:3.2777753350536332e-01:1.7048390244989653e-01:3.2640261190074943e-01:9.3641401373479061e-01:3.1072609017013014e-01:1.9173659771923126e+00:4.4200295161509323e-01:2.5927529662106745e+00:4.6214730354493760e-01:3.0158903860260877e+00:2.9292170499312731e-01:3.6644119061962876e+00 + CVs 20 + 1.6034705835851681e-01 2.2466358630713848e-01 1.4622864288825618e-01 + 3.1056629338889791e-01 4.5645627416100759e-01 2.6493063256556443e-01 + 4.7435077800316938e-01 6.7614134980554275e-01 3.8459034758820165e-01 + 6.5984117357074246e-01 8.7534704187730450e-01 5.0874301242857001e-01 + 8.7038642354234963e-01 1.0467717283690259e+00 6.2896214450915644e-01 + 1.1060435126628265e+00 1.1863130829645270e+00 7.3179901935227099e-01 + 1.3630339174139734e+00 1.2948004457552940e+00 8.0918603775862441e-01 + 1.6357319114449551e+00 1.3761452093784339e+00 8.6196664107905241e-01 + 1.9187535947855052e+00 1.4328420845111005e+00 8.9257210868889192e-01 + 2.2074089649950484e+00 1.4618905613388036e+00 9.0098705430788883e-01 + 2.4957705274929283e+00 1.4565747641564823e+00 8.8509956066437978e-01 + 2.7752381942625073e+00 1.4127801134717575e+00 8.4325570237515879e-01 + 3.0352250333268334e+00 1.3313780683350487e+00 7.7394563195777100e-01 + 3.2631636363697325e+00 1.2177942528217225e+00 6.7063280015461868e-01 + 3.4457483140913809e+00 1.0832978534063222e+00 5.2653521782746671e-01 + 3.5751671327437338e+00 9.3927582651024299e-01 3.4559772117839893e-01 + 3.6559415507125514e+00 7.8972223390217255e-01 1.4740523831964478e-01 + 3.7045558570334958e+00 6.3881241988292281e-01 -4.5501241136675780e-02 + 3.9045600559965985e+00 5.7745456843857279e-01 -1.2624740508203061e-01 + id 13470 + loc 7.0098310708999634e-01 5.9699821472167969e-01 373 + blend 0.0000000000000000e+00 + interp 4.7468800822642454e-01:3.5417891746137431e-01:5.5317259235381089e-01:4.7468326134634231e-01:1.0575317686913837e+00:3.9383823431409465e-01:1.9072394884047468e+00:3.8705023912106312e-01:2.5786464446776574e+00:4.1679613892975276e-01:3.1537573565833261e+00:4.2956062079069696e-01:3.9708282347058064e+00 + CVs 20 + -3.0094049388251320e-01 4.0610557158742050e-01 -1.2230189458065620e-01 + -5.5148257862806416e-01 8.0475923809650585e-01 -2.5990990234414679e-01 + -7.5570918209660620e-01 1.1955211859442081e+00 -4.1461633926935998e-01 + -9.0662309912779349e-01 1.5794542997930314e+00 -5.8703310061677816e-01 + -1.0040806872703059e+00 1.9576750692015403e+00 -7.8325525675271201e-01 + -1.0709790148031675e+00 2.3218566097422437e+00 -1.0264109986884189e+00 + -1.1330091272962135e+00 2.6419702200238273e+00 -1.3431339434497156e+00 + -1.2000094282374660e+00 2.8879131316596340e+00 -1.7348225348693020e+00 + -1.2673981824894265e+00 3.0482618968655903e+00 -2.1829121179871156e+00 + -1.3231687713747533e+00 3.1217776183040753e+00 -2.6674018067227592e+00 + -1.3561311957299802e+00 3.0957425990695753e+00 -3.1799105793998699e+00 + -1.3678514108116908e+00 2.9222653218118944e+00 -3.7070251079471066e+00 + -1.4001320602408871e+00 2.5720671230351773e+00 -4.1946872841164087e+00 + -1.5515792166761964e+00 2.1266378565935682e+00 -4.6039706829851390e+00 + -1.9095376540184379e+00 1.7279730462783931e+00 -4.9403635025997854e+00 + -2.4771356935754270e+00 1.5063427860357332e+00 -5.1786988575650748e+00 + -3.1632955595545722e+00 1.5487226583278804e+00 -5.2534854733596843e+00 + -3.8134119320051152e+00 1.7793661581318290e+00 -5.1722499015959658e+00 + -4.4305579571775482e+00 1.7386944973244214e+00 -5.2599006698207189e+00 + id 13471 + loc 7.7032661437988281e-01 4.4715809822082520e-01 374 + blend 0.0000000000000000e+00 + interp 4.5473598547745536e-01:3.9218319706752369e-01:7.2386028799430191e-01:4.5473143811760058e-01:9.4271473654612226e-01:4.3929829380809515e-01:1.2087988439374553e+00:3.7236992531322843e-01:1.9881863447816777e+00:3.5846962689301765e-01:2.7121350055516129e+00:4.0251447357272224e-01:3.2014737830578679e+00:3.6976991186238140e-01:3.9978243678904120e+00 + CVs 20 + 7.5308724380044290e-01 3.9437416468994252e-01 3.5529222764249202e-01 + 1.3363740167770835e+00 6.6974446080734407e-01 5.6792845364093769e-01 + 1.9070677630319932e+00 8.9376081937566665e-01 7.0615214303385354e-01 + 2.5084459173561675e+00 1.1195009438548873e+00 8.1766820984979860e-01 + 3.1289637547702629e+00 1.3667628428860930e+00 9.3735704786464158e-01 + 3.7835636974341202e+00 1.6220139059099501e+00 1.1022637932532078e+00 + 4.4914523533176283e+00 1.8332697912973228e+00 1.3469690449313980e+00 + 5.2435149842522604e+00 1.9343496657271606e+00 1.6947149970969728e+00 + 6.0059893819009984e+00 1.8694695378313932e+00 2.1493151755165609e+00 + 6.7397806305935664e+00 1.5987241878113259e+00 2.6875425928870809e+00 + 7.4186841574344555e+00 1.1010718532935626e+00 3.2457672518596978e+00 + 8.0150849279936018e+00 3.8145085313258908e-01 3.7402444444543566e+00 + 8.4962051539544472e+00 -4.9709551131939866e-01 4.0973864425421613e+00 + 8.8712757615412308e+00 -1.4015917874195307e+00 4.3012088476430241e+00 + 9.2074328124972986e+00 -2.2251699280889974e+00 4.4076389834773311e+00 + 9.5748699801897725e+00 -2.9293978306015207e+00 4.4607820925801125e+00 + 1.0008926754709410e+01 -3.4965364173009443e+00 4.4531140043207262e+00 + 1.0471764731870564e+01 -3.9817812098354035e+00 4.4052249686927860e+00 + 1.0863475889337977e+01 -4.5809472660620765e+00 4.4416375728742592e+00 + id 13472 + loc 3.4771755337715149e-01 6.7646241188049316e-01 395 + blend 0.0000000000000000e+00 + interp 4.8055475813361870e-01:4.1060259352487782e-01:3.5630462481843039e-01:4.8054995258603739e-01:9.7657649860013707e-01:4.2023764690426663e-01:1.5584322982905991e+00:4.2039793719470531e-01:2.0904860384128359e+00:3.9384543832148045e-01:2.9835831498684193e+00:2.9077555789018056e-01:3.3140119376600863e+00:4.1512123708130633e-01:3.9544609154929162e+00 + CVs 20 + 5.2348973422096334e-01 6.2423958724362905e-02 -3.9011744589665331e-01 + 9.6528808228082230e-01 6.1926084218859201e-02 -7.3291577453088164e-01 + 1.3917276876066662e+00 4.7418722469495855e-02 -1.0538602150585050e+00 + 1.8205209083054463e+00 2.7616560146897950e-02 -1.3565840409336560e+00 + 2.2445574041666525e+00 -4.7132022900668868e-03 -1.6379798474267520e+00 + 2.6556562660154057e+00 -5.4998750117054351e-02 -1.9012349162095301e+00 + 3.0467145517483250e+00 -1.2770998272066247e-01 -2.1454493065451792e+00 + 3.4114154976631021e+00 -2.2980397019178911e-01 -2.3621771649498542e+00 + 3.7416818367090641e+00 -3.6929171504983116e-01 -2.5441680417571439e+00 + 4.0264139302311488e+00 -5.4854791021329907e-01 -2.6930276731740888e+00 + 4.2633707764429838e+00 -7.6109180406100840e-01 -2.8125352259365175e+00 + 4.4708231009024981e+00 -9.9528021821572965e-01 -2.9022206711277643e+00 + 4.6691928133315113e+00 -1.2409429764346824e+00 -2.9607390706309240e+00 + 4.8635790242446406e+00 -1.4902549958099218e+00 -2.9928335248923421e+00 + 5.0493685267490838e+00 -1.7372691207604727e+00 -3.0057819082022559e+00 + 5.2195307744539070e+00 -1.9735262812665550e+00 -2.9981440600487677e+00 + 5.3710750651542298e+00 -2.1863252795686323e+00 -2.9670984855433522e+00 + 5.5109900806528191e+00 -2.3723017964708357e+00 -2.9267773443813705e+00 + 5.6733351816238029e+00 -2.5786818148394235e+00 -2.9327789718032400e+00 + id 13473 + loc 3.1143611669540405e-01 9.1354680061340332e-01 400 + blend 0.0000000000000000e+00 + interp 4.6222765355796730e-01:2.9336285562585318e-01:4.9491900824251223e-01:3.3069405631691212e-01:1.1634563179286908e+00:4.6222303128143172e-01:2.0754404126263797e+00:3.7541500609254097e-01:2.7586882079756885e+00:2.7292599680534840e-01:3.0807134380653167e+00:2.7193496068312412e-01:3.9706979658995900e+00 + CVs 20 + -1.3773196205731075e-01 3.7977432633233144e-01 -1.7287437078370665e-01 + -2.7914862585099909e-01 7.3191975686967659e-01 -3.6376199751195815e-01 + -3.9421015253806635e-01 1.0425265380634328e+00 -5.9090239253951682e-01 + -4.7899144156459983e-01 1.3015220885851118e+00 -8.5352701798017372e-01 + -5.3602811488560509e-01 1.5002237276913799e+00 -1.1379633156233186e+00 + -5.6435795672324551e-01 1.6367846610230075e+00 -1.4286367814741787e+00 + -5.6251492348130383e-01 1.7155883628456237e+00 -1.7122002698699093e+00 + -5.3107505286839907e-01 1.7439380376725537e+00 -1.9781964878410832e+00 + -4.7372650219376194e-01 1.7300081193193000e+00 -2.2184419331807756e+00 + -3.9518914257384496e-01 1.6828707108661347e+00 -2.4298787777307593e+00 + -2.9088334287110862e-01 1.6092912416823264e+00 -2.6292944592972023e+00 + -1.4507579216003033e-01 1.5076472456247285e+00 -2.8512879109297438e+00 + 4.2694444036458189e-02 1.3771071117351679e+00 -3.1180699148340545e+00 + 2.4596181625592373e-01 1.2239325627728164e+00 -3.4283441212899008e+00 + 4.2681101345394035e-01 1.0323205221230221e+00 -3.7803299400713790e+00 + 5.3281290298303619e-01 7.4675820328424813e-01 -4.1800595320564771e+00 + 4.9904227787798944e-01 3.4032611257808631e-01 -4.6089189581463330e+00 + 2.9446412336858280e-01 -1.2507657552076523e-01 -5.0146152069755425e+00 + -3.4657805976135159e-03 -5.2190481443661740e-01 -5.3295097801287321e+00 + id 13474 + loc 3.4953981637954712e-01 3.5388472676277161e-01 375 + blend 0.0000000000000000e+00 + interp 4.6151688901434756e-01:4.0501526799904275e-01:3.9349085850150178e-02:4.6151227384545745e-01:6.2875613171840583e-01:4.3639581814905237e-01:1.0036311686841048e+00:3.5289553646076410e-01:1.5684053059137393e+00:4.1315810651022755e-01:2.4543773826857218e+00:3.5869356770368066e-01:3.4443968161804186e+00 + CVs 20 + 6.3214722815387064e-02 5.0930122183706295e-01 5.9047577807536522e-01 + 2.1808179992436375e-01 8.1601747180156670e-01 1.1483636045131513e+00 + 4.5356518746016988e-01 9.2003992130467316e-01 1.7030295525773345e+00 + 7.3768841315584510e-01 9.2138758993820413e-01 2.2552088554607845e+00 + 1.0269224051044872e+00 9.1183303709981112e-01 2.8257916249073478e+00 + 1.2629799089337059e+00 9.3757054867156553e-01 3.4503835899719175e+00 + 1.3840430957561476e+00 1.0122214788315531e+00 4.1238376832758181e+00 + 1.3564525800174461e+00 1.1313638900919007e+00 4.8017040708202954e+00 + 1.1824221472751222e+00 1.2890175095986369e+00 5.4345105337378072e+00 + 8.9160154965383409e-01 1.4714707316984084e+00 5.9800977745016795e+00 + 5.2111943139644956e-01 1.6610656158952855e+00 6.4255071080349335e+00 + 8.8598174972434052e-02 1.8471057216420026e+00 6.7884129686893697e+00 + -4.1430540142217054e-01 2.0083503655306112e+00 7.0911217943549474e+00 + -1.0080454598017181e+00 2.0997326130774492e+00 7.3378528774749299e+00 + -1.6870933559281107e+00 2.0706752200872307e+00 7.5007420677971242e+00 + -2.3723676865840426e+00 1.9065497668027218e+00 7.5387381287982516e+00 + -2.9669995041553996e+00 1.6230020606345823e+00 7.4894563632979239e+00 + -3.3992085484030543e+00 1.2006120309700012e+00 7.4863677174142422e+00 + -3.6133882121116887e+00 7.0282646192601783e-01 7.6383006892538567e+00 + id 13475 + loc 4.2505514621734619e-01 8.0384427309036255e-01 393 + blend 0.0000000000000000e+00 + interp 4.6732851907016659e-01:2.8865277100248810e-01:3.3795335311872265e-01:2.9843646590637185e-01:1.1742879935309540e+00:4.4578789399906460e-01:1.8637895343061430e+00:4.6732384578497593e-01:2.1048678776630436e+00:3.9143373858766162e-01:2.7552486201363355e+00:2.7121181431651187e-01:3.7278095961756259e+00 + CVs 20 + -2.7570782147351058e-01 2.9334515794172200e-01 -1.5556638705065057e-01 + -5.3725945770984129e-01 5.9741680865612390e-01 -3.0743104000038490e-01 + -7.7407353783832078e-01 9.2067664473712563e-01 -4.7291241548031038e-01 + -9.8525923515249003e-01 1.2613314052284146e+00 -6.5933006273458639e-01 + -1.1866091167326338e+00 1.6152540337474044e+00 -8.6616018322198307e-01 + -1.4009157502725225e+00 1.9783884627427291e+00 -1.0905464280356443e+00 + -1.6532263727946006e+00 2.3438195360830880e+00 -1.3265495887496290e+00 + -1.9709038008063093e+00 2.6921925188168641e+00 -1.5669612429765343e+00 + -2.3714868377199725e+00 2.9835944339656475e+00 -1.8052703583985612e+00 + -2.8417070898919570e+00 3.1817692977640348e+00 -2.0403491163111132e+00 + -3.3577272504745244e+00 3.2819652432158026e+00 -2.2833639518427100e+00 + -3.9148382010271701e+00 3.2810610831724403e+00 -2.5462621655801749e+00 + -4.5037625493538194e+00 3.1499807095744368e+00 -2.8164591585177137e+00 + -5.0836157313752901e+00 2.8650640976685429e+00 -3.0646156059519085e+00 + -5.6107296241207978e+00 2.4369865038557426e+00 -3.2736229838463595e+00 + -6.0903496901180230e+00 1.9116893994181208e+00 -3.3955459460548880e+00 + -6.5513249210534701e+00 1.3791435225419677e+00 -3.3312124966140426e+00 + -6.9868694933749413e+00 9.4066378418602303e-01 -3.0477496353990827e+00 + -7.4569224630182500e+00 4.6641060625677877e-01 -2.7844789754435526e+00 + id 13476 + loc 5.6512564420700073e-01 5.2016157656908035e-02 1080 + blend 0.0000000000000000e+00 + interp 4.3411921238168938e-01:2.8204980959251491e-01:7.2066863363431144e-01:4.1942271899337596e-01:1.0005208028833059e+00:4.3411487118956560e-01:1.9402248633409638e+00:2.3269773955375489e-01:2.3008035792065931e+00:4.0191925328542527e-01:3.0525984041734242e+00:2.8717667292118138e-01:3.9445995686332664e+00 + CVs 20 + -8.1742408077728645e-02 4.5932359950464285e-01 -5.0247358174420709e-01 + -1.7442226704218700e-01 7.7952095530558752e-01 -8.1564505398123632e-01 + -2.7282368884015140e-01 1.0369181182090030e+00 -1.0649174488189741e+00 + -3.7797087554400111e-01 1.2696678516893485e+00 -1.3097296464989989e+00 + -4.9268107032936098e-01 1.4783002952206024e+00 -1.5465113680029912e+00 + -6.1847710414279866e-01 1.6653365733011269e+00 -1.7732628456705690e+00 + -7.5513217042420566e-01 1.8351608183347419e+00 -1.9865248583815203e+00 + -9.0224524413276219e-01 1.9948450817188161e+00 -2.1827384409544273e+00 + -1.0665032238724899e+00 2.1566543067400961e+00 -2.3614382674542092e+00 + -1.2697929304713140e+00 2.3238942789621664e+00 -2.5113138572477114e+00 + -1.5158287302058182e+00 2.4551669470260409e+00 -2.6003088860709083e+00 + -1.7583898436358045e+00 2.5002318494775251e+00 -2.6209096489100334e+00 + -1.9572795314102873e+00 2.4550456930035431e+00 -2.5966294891141444e+00 + -2.1000208852126168e+00 2.3384656183745038e+00 -2.5473111390923142e+00 + -2.1827541511117219e+00 2.1811530096268745e+00 -2.4829591765263688e+00 + -2.2030463724877998e+00 2.0487067655258198e+00 -2.4063293677187985e+00 + -2.1683952485038254e+00 2.0060373545251853e+00 -2.3062230609029943e+00 + -2.1055668267984315e+00 1.9388605154810088e+00 -2.2170400753127617e+00 + -2.0262284564672250e+00 1.4559492360595843e+00 -2.3939309627122056e+00 + id 13477 + loc 8.7232834100723267e-01 5.7349973917007446e-01 401 + blend 0.0000000000000000e+00 + interp 3.7322151023597955e-01:3.3778942907460130e-01:8.2518085352080273e-02:3.6690168843838233e-01:9.8889911623980609e-01:3.0180056774942837e-01:1.7841189367062507e+00:3.7321777802087719e-01:2.1253193794140914e+00:3.4828430350843120e-01:2.8091116456394918e+00:3.6985659618290012e-01:3.6070714786568576e+00 + CVs 20 + -7.5611767420521350e-02 3.1255890261390495e-01 -8.4265705612981939e-02 + -1.7383117479843141e-01 6.3077665138068573e-01 -2.0730171185347696e-01 + -2.6866883324114266e-01 9.5891776363568337e-01 -3.6950337936671362e-01 + -3.4279281034361531e-01 1.2872704576668248e+00 -5.7298605832641503e-01 + -3.9548426146261778e-01 1.5973917885318256e+00 -8.2132148456883936e-01 + -4.3307859926030523e-01 1.8731692292496880e+00 -1.1101731598055633e+00 + -4.6536712517092482e-01 2.1054520516091855e+00 -1.4290652353886837e+00 + -5.0234280857286495e-01 2.2884425151541552e+00 -1.7638152438754808e+00 + -5.5242990758045318e-01 2.4178990856448990e+00 -2.1005015193382395e+00 + -6.1504502591437749e-01 2.4870946990849876e+00 -2.4284357545975466e+00 + -6.7409578568851536e-01 2.4806496265691504e+00 -2.7281241169920483e+00 + -7.0980572322173519e-01 2.3868233601675044e+00 -2.9574995206421404e+00 + -7.2093288213684004e-01 2.2258326611158048e+00 -3.0872013252252639e+00 + -7.3618974889228683e-01 2.0290986027744689e+00 -3.1606383744342592e+00 + -8.1022925244549504e-01 1.7994946784664632e+00 -3.2406847910881607e+00 + -1.0176693027253250e+00 1.5557962436233501e+00 -3.3509364740125931e+00 + -1.4328431952923748e+00 1.3941463350773413e+00 -3.4875479059298007e+00 + -1.9817937679784421e+00 1.4416989021259603e+00 -3.6067413436543774e+00 + -2.3662060187577643e+00 1.3608764457146378e+00 -3.7738577238796958e+00 + id 13478 + loc 9.5516151189804077e-01 1.9340805709362030e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6093774698570639e-01:3.5925397203232201e-01:9.9931054231964200e-01:4.1796347192069949e-01:1.9989239891553723e+00:2.8181492953457038e-01:2.5841530260534231e+00:4.6093313760823656e-01:3.1563556919936797e+00:3.1149281816045143e-01:3.9858113235925856e+00 + CVs 20 + -5.3583731482958225e-02 5.3495739990442437e-01 2.1226392010604356e-01 + -1.6300703805088990e-01 1.0564916246893270e+00 3.9743860532902309e-01 + -3.4705524671000854e-01 1.5488730591260398e+00 5.4841977677909060e-01 + -6.2225438543706957e-01 1.9784247168573486e+00 6.6833504039319280e-01 + -9.7892414282591578e-01 2.3026039587458738e+00 7.7130611848812614e-01 + -1.3722018046604991e+00 2.4991140456745846e+00 8.8183530804395360e-01 + -1.7410611545033827e+00 2.5744381143491171e+00 1.0153875859555517e+00 + -2.0370701399965925e+00 2.5610058695575613e+00 1.1670173536630621e+00 + -2.2462342056379283e+00 2.4967149458675708e+00 1.3208718263762589e+00 + -2.3800674812453924e+00 2.4140676630716302e+00 1.4592973136298730e+00 + -2.4589834799913044e+00 2.3320495842454925e+00 1.5783992692983899e+00 + -2.4895927699496907e+00 2.2310359233163863e+00 1.6811747881499155e+00 + -2.4936403980415371e+00 2.1062098811846646e+00 1.7651744124531399e+00 + -2.4787802606801241e+00 1.9726991368165310e+00 1.8373809403714785e+00 + -2.4049064740950494e+00 1.8638234134569722e+00 1.8863640273300322e+00 + -2.2471628660005250e+00 1.8071887548252259e+00 1.8903421861622531e+00 + -1.9754939229499917e+00 1.7885404428350085e+00 1.7504826461151191e+00 + -1.3451473631100141e+00 1.5560255701236585e+00 1.1734630313711998e+00 + -1.3580876600866796e+00 1.5306749697196758e+00 1.1611978626765624e+00 + id 13479 + loc 2.1046233177185059e-01 7.4607723951339722e-01 399 + blend 0.0000000000000000e+00 + interp 4.0910231360098365e-01:2.7799997296906404e-01:7.8479514121870642e-01:3.8763076366104388e-01:1.1359404131386204e+00:2.6516132813129206e-01:1.8434461238174484e+00:3.2750393464535826e-01:2.3193068463598512e+00:3.4958047649664414e-01:3.2941956446199372e+00:4.0909822257784767e-01:3.9846740434987287e+00 + CVs 20 + -1.7402969507094990e-01 3.2992092726293892e-01 -2.6727460173560436e-01 + -3.3477738980555538e-01 6.6092606593193293e-01 -5.1601842900847272e-01 + -4.8056183907797739e-01 9.8999693532888999e-01 -7.7317351776653931e-01 + -6.1043535721906494e-01 1.3159425157604836e+00 -1.0500354682216300e+00 + -7.2373242417950889e-01 1.6438473698742637e+00 -1.3501622720460913e+00 + -8.2801724406176735e-01 1.9853891228151452e+00 -1.6808413119228700e+00 + -9.5993348385568078e-01 2.3609980770378134e+00 -2.0569678516768475e+00 + -1.2059575681969315e+00 2.7750715695298340e+00 -2.5043060696058563e+00 + -1.6771258416337125e+00 3.1309010812328419e+00 -3.0118944692193796e+00 + -2.3524694020383978e+00 3.2678884269465551e+00 -3.4809079182838336e+00 + -3.0780251756659842e+00 3.1553292433261753e+00 -3.8259465350938213e+00 + -3.6978847433630850e+00 2.8961455509644694e+00 -4.0304666993571621e+00 + -4.1202236299056567e+00 2.6274189484125605e+00 -4.1284817405146033e+00 + -4.3047679700079380e+00 2.4318082301917303e+00 -4.1536292362638880e+00 + -4.2397807252343727e+00 2.3003082166616622e+00 -4.1016725015475979e+00 + -3.9426129039937861e+00 2.1232491217181377e+00 -3.9476972544370219e+00 + -3.4701615271314714e+00 1.6864839800005100e+00 -3.6978108300538959e+00 + -3.2872405257161876e+00 1.1351268241452721e+00 -3.5667400527461761e+00 + -3.6747983509753954e+00 1.4727335368729235e+00 -3.6555775164925839e+00 + id 13480 + loc 6.1923187971115112e-01 4.2698282748460770e-02 415 + blend 0.0000000000000000e+00 + interp 4.8310931317730521e-01:2.9519333484068072e-01:1.1785650102069667e-05:4.4739311468878834e-01:3.9205296907026299e-01:4.3760377754766810e-01:9.9199907434030354e-01:2.7297302278438579e-01:1.5751241712153639e+00:1.8997765813840742e-01:2.2697652691554309e+00:3.8555613979832848e-01:2.8733756231737928e+00:4.8310448208417345e-01:3.3477208326495060e+00 + CVs 20 + -1.3123508727258001e-01 1.3351642249662929e-01 -2.7613969977998754e-02 + -2.5304541743969572e-01 2.4452227564810269e-01 -2.1911732240904008e-02 + -3.8469085372800915e-01 3.5742245163746555e-01 -1.2538640294918718e-02 + -5.3291019294638109e-01 4.7977364366922021e-01 -2.2695296312091440e-02 + -6.9987054374382618e-01 6.0767808802247791e-01 -5.7911754003770188e-02 + -8.8702435154163306e-01 7.3565380158737459e-01 -1.2471568476683248e-01 + -1.0928215316058751e+00 8.5624576807070574e-01 -2.3026639352938805e-01 + -1.3127012394003907e+00 9.6062015334155104e-01 -3.7910682774667837e-01 + -1.5412530171378531e+00 1.0405320517565180e+00 -5.7190711699676144e-01 + -1.7726830487292351e+00 1.0890387745947481e+00 -8.0703932355567221e-01 + -1.9997431221562723e+00 1.0994327528973704e+00 -1.0759713682845842e+00 + -2.2192409490051554e+00 1.0641971641381338e+00 -1.3460093096673671e+00 + -2.4411736302876990e+00 9.7824866320446791e-01 -1.5572465701032705e+00 + -2.6729874770629136e+00 8.4474857816752658e-01 -1.6630713264921857e+00 + -2.9073637460076882e+00 6.7239932423447080e-01 -1.6705412651097662e+00 + -3.1331284236721455e+00 4.6800577777075647e-01 -1.6037746708514242e+00 + -3.3287348269692991e+00 2.4389808097334087e-01 -1.4600090228038116e+00 + -3.4706423928412282e+00 2.1189044014129799e-02 -1.2357598358873891e+00 + -3.7883862569133484e+00 -2.3179365216662129e-01 -1.1671688197119479e+00 + id 13481 + loc 7.4931317567825317e-01 2.3274829983711243e-01 402 + blend 0.0000000000000000e+00 + interp 4.4294005818728666e-01:3.9209352705215728e-01:1.6642469905331503e-01:2.9749463688101219e-01:9.1801196119601736e-01:4.4293562878670478e-01:1.7752307086898491e+00:3.1416911555975546e-01:2.2538675367223249e+00:3.6413540804207511e-01:3.0246820588961567e+00:4.3904007988191079e-01:3.8242730201564985e+00 + CVs 20 + 1.9137330597831495e-01 3.2196137023189653e-01 2.3016510455487968e-01 + 3.7416075419572581e-01 6.5328308565932458e-01 4.6849809851887991e-01 + 5.5226682384399495e-01 1.0026591904015885e+00 7.3200975305296789e-01 + 7.6813353025890752e-01 1.3629125910637792e+00 1.0254398972271714e+00 + 1.0836128319382141e+00 1.6920605501658952e+00 1.3271338359007365e+00 + 1.5174037093812087e+00 1.9337334336841252e+00 1.6138430038537595e+00 + 2.0343166233206746e+00 2.0423974174746724e+00 1.8871765913299026e+00 + 2.5676157105149677e+00 1.9890675023024591e+00 2.1754576120847897e+00 + 3.0317713495701928e+00 1.7571951136941424e+00 2.5085930140126420e+00 + 3.3249013389584774e+00 1.3497746746244894e+00 2.8717892538498790e+00 + 3.4167615435036001e+00 8.2742114934064714e-01 3.2100674619862373e+00 + 3.4506262538851553e+00 2.4939349957179968e-01 3.5215365407119226e+00 + 3.5945043739919371e+00 -3.5166123799189641e-01 3.8401038930827354e+00 + 3.9301258593720498e+00 -8.9377210947530716e-01 4.1733340554169054e+00 + 4.4098127105675200e+00 -1.2921216991029891e+00 4.5180686577829707e+00 + 4.8733895314300204e+00 -1.5578038979440316e+00 4.8898624870115199e+00 + 5.2219209831884816e+00 -1.7614447860678943e+00 5.2979790234578505e+00 + 5.4975398218044500e+00 -1.9472004686417526e+00 5.7033207771935173e+00 + 5.8252527988307650e+00 -2.1673294315014302e+00 6.0398887132886703e+00 + id 13482 + loc 6.6402092576026917e-02 4.7137963771820068e-01 412 + blend 0.0000000000000000e+00 + interp 5.4556240185746085e-01:3.0747123824106143e-01:3.3953150032828283e-04:2.9877168511952806e-01:8.6758067635935077e-01:5.4555694623344231e-01:1.5064784005124223e+00:4.5911675009234798e-01:2.0034089630313963e+00:3.1846648335648076e-01:2.6151765072655393e+00:3.4720198455343765e-01:3.0270794842502697e+00 + CVs 20 + -1.4911621264202163e-01 2.0397280134300647e-01 -5.7962795247857424e-01 + -3.0714192371968652e-01 3.1007728196422579e-01 -9.8724913456303076e-01 + -4.5948145008205799e-01 3.8179439123334591e-01 -1.3683927189448233e+00 + -5.9136005766179989e-01 4.5408122564325015e-01 -1.7989696694061943e+00 + -6.8899006383901051e-01 5.1852672412047440e-01 -2.2745986163789094e+00 + -7.3698413694338227e-01 5.6652684582968094e-01 -2.7848366953129884e+00 + -7.2197367692221281e-01 5.9109949756020641e-01 -3.3126250168255336e+00 + -6.3891517694963174e-01 5.8700244474193553e-01 -3.8367517511631002e+00 + -4.9184643507261239e-01 5.5178829393853768e-01 -4.3356715490630400e+00 + -2.9119427368586281e-01 4.8667406448020833e-01 -4.7904028210622833e+00 + -5.6844758631324876e-02 3.8914672564553721e-01 -5.1938099766461754e+00 + 1.7770762074491464e-01 2.3854233343622400e-01 -5.5641281036216403e+00 + 3.7408818451820752e-01 6.1754599727716908e-03 -5.9246878284272899e+00 + 5.1160551567488188e-01 -3.0465789057295956e-01 -6.2614350418230371e+00 + 5.9540078879291158e-01 -6.6276690628787627e-01 -6.5447104802461613e+00 + 6.3076143453917843e-01 -1.0438573318618061e+00 -6.7639315169635141e+00 + 6.1648459679635814e-01 -1.4309711581264297e+00 -6.9212833293193867e+00 + 5.5863050463156905e-01 -1.8045618935300221e+00 -7.0208773561843367e+00 + 5.3814172000837868e-01 -2.0656082009836059e+00 -7.0482885664087496e+00 + id 13483 + loc 6.7093068361282349e-01 8.8582485914230347e-01 376 + blend 0.0000000000000000e+00 + interp 3.3887956515350165e-01:2.8752761761712103e-01:7.6278437565081592e-01:2.0108027521141908e-01:1.8739685698066753e+00:2.3600430221827604e-01:2.4192212640655328e+00:2.7447076606228010e-01:2.9710736502923378e+00:2.3602638597825226e-01:3.3367080030161604e+00:3.3887617635785011e-01:3.9188499616598733e+00 + CVs 20 + -7.1023180938907943e-02 4.2916881110958466e-01 5.1933574834770502e-01 + -5.6903935020726604e-02 7.5096978789505464e-01 1.0146584269236789e+00 + 4.6434421266010939e-02 9.3791442747968790e-01 1.5413408261668748e+00 + 2.0534050042851604e-01 1.0488118388703267e+00 2.0831440118735114e+00 + 3.6722864534456662e-01 1.1569789553439767e+00 2.6165218637698997e+00 + 4.7445136478038707e-01 1.2893308144843649e+00 3.1458492579697195e+00 + 4.8530095258017680e-01 1.4398058946596559e+00 3.6716479875599610e+00 + 3.9116579374059957e-01 1.6009614426405840e+00 4.1765771371759666e+00 + 2.0384142690450913e-01 1.7713512021867714e+00 4.6457091512999957e+00 + -5.9913555649675043e-02 1.9465622786188470e+00 5.0772729693443761e+00 + -3.8698908261917442e-01 2.1162705764780450e+00 5.4728338793066245e+00 + -7.7619859046778072e-01 2.2648393626458070e+00 5.8330711268943150e+00 + -1.2398811533158423e+00 2.3663349201677093e+00 6.1550351930941050e+00 + -1.7867583967516092e+00 2.3813179145924561e+00 6.4219113679088151e+00 + -2.4051581737705972e+00 2.2709762524481576e+00 6.5967175823937669e+00 + -3.0518297578407472e+00 2.0080401090667772e+00 6.6307591471374794e+00 + -3.6539836660634784e+00 1.5432816032927335e+00 6.5378754114503197e+00 + -4.0469958619841861e+00 8.7603470408305606e-01 6.4670529945738320e+00 + -4.1397183988652291e+00 3.9069428244503346e-01 6.4905042827168424e+00 + id 13484 + loc 2.3875829577445984e-01 7.3544543981552124e-01 382 + blend 0.0000000000000000e+00 + interp 4.8128685671959343e-01:3.6392119793512701e-01:5.0551725983974749e-01:3.6741088921842951e-01:1.0213124609560140e+00:4.7569179419434215e-01:1.5926973137159619e+00:4.8128204385102624e-01:1.9819749210237934e+00:4.2705060038386694e-01:2.1974055954632199e+00:2.8618813854450736e-01:2.9053611938256338e+00:3.7526660180155169e-01:3.1988209159500705e+00:3.0827591269571275e-01:3.9759335217164384e+00 + CVs 20 + 9.5201386666764232e-01 1.4511980952430506e-01 -5.3088594871619799e-01 + 1.5867594456800891e+00 1.5921941816237259e-01 -9.5959686748686879e-01 + 2.1503757324628401e+00 1.3254384386267509e-01 -1.3795452056874127e+00 + 2.7427875662950441e+00 9.2977503603733358e-02 -1.8256209982684783e+00 + 3.3559579284619470e+00 2.4553267853066663e-02 -2.2857712791046807e+00 + 3.9740269811810607e+00 -8.5730124265416485e-02 -2.7470194856414230e+00 + 4.5767930523444029e+00 -2.4609530565453674e-01 -3.1969616619431722e+00 + 5.1451038442503156e+00 -4.6061471301156653e-01 -3.6231184346679957e+00 + 5.6619681477677313e+00 -7.2302497362643225e-01 -4.0197834155044205e+00 + 6.1144366578163414e+00 -1.0186993942607938e+00 -4.3938604551834075e+00 + 6.4999572912038159e+00 -1.3327933312157372e+00 -4.7575646043999971e+00 + 6.8287656100381549e+00 -1.6551020062703943e+00 -5.1185658467517889e+00 + 7.1150208804343329e+00 -1.9844872833429144e+00 -5.4800672958960304e+00 + 7.3668846397812553e+00 -2.3286018472503263e+00 -5.8432154659589077e+00 + 7.5852594622418570e+00 -2.7000237865047336e+00 -6.2045693207468346e+00 + 7.7667506988286057e+00 -3.1128484331714277e+00 -6.5558248883109549e+00 + 7.9062127807973166e+00 -3.5725895343792105e+00 -6.8831657533316015e+00 + 7.9955237068990375e+00 -4.0514265861544505e+00 -7.1624054109722781e+00 + 8.0558111876161131e+00 -4.3554908322487789e+00 -7.3029482701076116e+00 + id 13485 + loc 2.9818829894065857e-01 1.6963320970535278e-01 396 + blend 0.0000000000000000e+00 + interp 5.0956913950430149e-01:5.0956404381290643e-01:4.8618416385221475e-01:3.6371030955117079e-01:1.0122003956054670e+00:3.3374928297253098e-01:1.9549484790432636e+00:3.2600663163891630e-01:2.8390878496459440e+00:2.6766773223823687e-01:3.8473441344724919e+00 + CVs 20 + -2.0304837181166022e-01 1.7829416229893674e-01 -7.5511521274999471e-01 + -3.7920161430272925e-01 2.1996971446855307e-01 -1.3579869156501838e+00 + -5.4972636846853296e-01 2.0989201360735510e-01 -1.9152602604388778e+00 + -7.2968978276271046e-01 1.6966490418341851e-01 -2.4679051507973981e+00 + -9.2161024190220686e-01 9.4421010698520380e-02 -3.0096352691916710e+00 + -1.1289929282508111e+00 -1.7956123067822238e-02 -3.5310678814998688e+00 + -1.3476841060559090e+00 -1.6920206162933593e-01 -4.0125192083067951e+00 + -1.5645536519808652e+00 -3.6087140847016297e-01 -4.4310646971895267e+00 + -1.7679719216224639e+00 -5.8978986976491332e-01 -4.7683591588013963e+00 + -1.9548441299588908e+00 -8.4472183361867836e-01 -5.0115248106379404e+00 + -2.1225102836550840e+00 -1.1061518346964245e+00 -5.1551660972676698e+00 + -2.2618083091466827e+00 -1.3514635669184760e+00 -5.2133686975892761e+00 + -2.3641525987346030e+00 -1.5668412758976056e+00 -5.2177396211182971e+00 + -2.4300537751632438e+00 -1.7513291812063447e+00 -5.1947539782616765e+00 + -2.4595162219787587e+00 -1.9085441215477190e+00 -5.1623824734100339e+00 + -2.4508513528299125e+00 -2.0394217727131183e+00 -5.1328194070914783e+00 + -2.4081759909058009e+00 -2.1446178814656625e+00 -5.1144821334006538e+00 + -2.3401146176150460e+00 -2.2447651264351647e+00 -5.1088916281012562e+00 + -2.2547841980771914e+00 -2.5115166820949328e+00 -5.0600670965270398e+00 + id 13486 + loc 3.9580065011978149e-01 1.9936142489314079e-02 1078 + blend 0.0000000000000000e+00 + interp 3.4959028499675310e-01:2.1454490433005560e-01:1.3458622810131460e-01:1.5782492111622429e-01:1.4359321727461958e+00:3.0771196247366273e-01:2.1148210322662777e+00:3.4958678909390317e-01:2.9616449198624890e+00:3.0652503819970034e-01:3.7735460947821138e+00 + CVs 20 + 8.6749794721535045e-02 3.4445953626139747e-01 -1.2232826795076640e-01 + 1.2725256869879903e-01 6.4726328914536324e-01 -2.5569763246712096e-01 + 1.4271128417443896e-01 9.2638583569331667e-01 -4.0325591539297967e-01 + 1.4223037158683227e-01 1.1865637967840394e+00 -5.6533220569921272e-01 + 1.2376746940893213e-01 1.4221403881941059e+00 -7.3980557262833102e-01 + 8.6624425175471420e-02 1.6268052379125966e+00 -9.2145785235099897e-01 + 2.9092337469352247e-02 1.7951095922143558e+00 -1.1042048266194839e+00 + -4.9713461293089845e-02 1.9245983102069550e+00 -1.2829030002880148e+00 + -1.4721211769889697e-01 2.0163563648940972e+00 -1.4525940559515305e+00 + -2.5944777490629933e-01 2.0735973297020678e+00 -1.6093078771776674e+00 + -3.8396889964700109e-01 2.0990037785916691e+00 -1.7517036924949170e+00 + -5.1993629253986740e-01 2.0932372893355389e+00 -1.8804125602688366e+00 + -6.6695230433999431e-01 2.0564667090764450e+00 -1.9961122186090372e+00 + -8.2451283891917493e-01 1.9923418400497890e+00 -2.0987490298381060e+00 + -9.9431820393455328e-01 1.9152473461963555e+00 -2.1879660695239189e+00 + -1.1923162927848512e+00 1.8618638731320631e+00 -2.2664585088395932e+00 + -1.4706487224391827e+00 1.8507809168053586e+00 -2.3482774572157976e+00 + -1.7877834311929577e+00 1.7482685111361393e+00 -2.4508894796931329e+00 + -1.7444893506615669e+00 1.5059178630970456e+00 -2.5106336844970460e+00 + id 13487 + loc 1.7362892627716064e-01 9.1425549983978271e-01 403 + blend 0.0000000000000000e+00 + interp 3.9664124972386255e-01:3.1225488214830971e-01:5.0404467394319918e-02:3.9663728331136533e-01:8.5076350026190284e-01:3.1290097575936554e-01:1.3536064124972014e+00:3.5870257467728728e-01:2.0458013898647120e+00:3.0373703405643876e-01:2.9736308182280333e+00:2.7309088244467822e-01:3.5483658764429666e+00 + CVs 20 + 7.1703666128620155e-02 1.9255690618168225e-01 -9.3785271655335470e-02 + 1.1167110595870322e-01 3.5651217513245687e-01 -1.9789984539050107e-01 + 1.4247203829036728e-01 5.0036976536779099e-01 -3.0531569233768641e-01 + 1.7642219747969362e-01 6.3889337413853109e-01 -4.1664452473157937e-01 + 2.1087890490310979e-01 7.7272871298373591e-01 -5.3182312132589171e-01 + 2.4264817145426509e-01 9.0511053634399685e-01 -6.5071340919941800e-01 + 2.6768942457319655e-01 1.0416796651474094e+00 -7.7287107289829393e-01 + 2.8107751735994230e-01 1.1882360797822007e+00 -8.9694698993524435e-01 + 2.7701601275989174e-01 1.3501263811730460e+00 -1.0203803571806729e+00 + 2.4846294433416205e-01 1.5325369899816326e+00 -1.1389014370663817e+00 + 1.8569969545940523e-01 1.7409565750567761e+00 -1.2456376491046037e+00 + 7.4132945984996312e-02 1.9785550614647729e+00 -1.3296229326321025e+00 + -1.0186834544235368e-01 2.2348502020707661e+00 -1.3761131381853577e+00 + -3.4554362402029382e-01 2.4783655004059479e+00 -1.3750188730609589e+00 + -6.3691188876621774e-01 2.6711887815288184e+00 -1.3323053186445688e+00 + -9.3885554456809417e-01 2.7941463756702456e+00 -1.2694488787544422e+00 + -1.2209798353478725e+00 2.8550089648313524e+00 -1.2080891565130458e+00 + -1.4753673168396166e+00 2.8713434734276384e+00 -1.1576682093751376e+00 + -1.6003119916348316e+00 2.8775987103509948e+00 -1.1775596661357888e+00 + id 13488 + loc 9.1667371988296509e-01 9.2528951168060303e-01 1069 + blend 0.0000000000000000e+00 + interp 7.0205389698025922e-01:4.1428780897668427e-01:1.3832650853841666e-02:5.3549748717280810e-01:6.8769746893582195e-01:3.6175304289294835e-01:1.0379141813075927e+00:4.2981988328586690e-01:1.8073011857867547e+00:4.9739716701294162e-01:2.1889756357175183e+00:5.9270504651599398e-01:2.6109511208263516e+00:7.0204687644128949e-01:3.0196595798878016e+00:6.3713661130595478e-01:3.4262635220728788e+00 + CVs 20 + 1.5137545627916782e-01 3.4408182510757152e-01 -1.5692310463206904e-01 + 3.0973184415195931e-01 6.8372655491743484e-01 -3.1033375092096560e-01 + 4.9488387846570897e-01 9.9836507527022289e-01 -4.4297927758724992e-01 + 7.2012110369406079e-01 1.2705669729471958e+00 -5.4887066068946111e-01 + 9.9163694472146191e-01 1.4867347544134017e+00 -6.3035724272455351e-01 + 1.2969964376487904e+00 1.6378472305380285e+00 -7.0035320882577667e-01 + 1.6105079534621276e+00 1.7208201726706900e+00 -7.8046402968005268e-01 + 1.9149871934479119e+00 1.7352929139980395e+00 -8.8867239320879821e-01 + 2.2078201005694678e+00 1.6752936576288369e+00 -1.0288527329119694e+00 + 2.4886877798969196e+00 1.5240022320790456e+00 -1.1916781800741807e+00 + 2.7456340952703790e+00 1.2552298249976419e+00 -1.3570240326062515e+00 + 2.9462844744583125e+00 8.5260856932415630e-01 -1.4905790817336915e+00 + 3.0525340334333357e+00 3.2568708178065697e-01 -1.5464044586776795e+00 + 3.0586863247760134e+00 -3.1260483926149729e-01 -1.4532835314880221e+00 + 3.0305717237483281e+00 -1.0129710778039125e+00 -1.1104591947808564e+00 + 3.0865404212772161e+00 -1.6338571179265002e+00 -4.4573784815484907e-01 + 3.2977654722023702e+00 -1.9734102281306758e+00 4.5822278593877908e-01 + 3.5870230360919413e+00 -2.0096260030760225e+00 1.3194520647826566e+00 + 3.7666195877792465e+00 -2.0557441493594237e+00 1.8482382179037913e+00 + id 13489 + loc 8.8391286134719849e-01 8.0344986915588379e-01 400 + blend 0.0000000000000000e+00 + interp 3.3983567415577470e-01:3.2990418589103793e-01:3.6254265623846393e-01:3.3983227579903313e-01:1.0135193354224816e+00:2.4290031889610858e-01:1.9260855139716111e+00:2.7157347082302469e-01:2.8500138627475566e+00:2.7695106681833664e-01:3.4846877801483149e+00 + CVs 20 + -1.4917402499563234e-01 1.8324495652887529e-01 -2.0895854481805914e-01 + -3.1809859775643351e-01 3.6533642832886787e-01 -4.2473468621990618e-01 + -4.7970410673663361e-01 5.4739052559947154e-01 -6.6388224897907666e-01 + -6.2187774098557569e-01 7.2277859010107703e-01 -9.2509233631387855e-01 + -7.4813571434448500e-01 8.8662522436899405e-01 -1.2047598280139864e+00 + -8.5725109697737967e-01 1.0406613374573488e+00 -1.5033365801000467e+00 + -9.4110514446758431e-01 1.1906219380784426e+00 -1.8229487112633982e+00 + -9.9033898892186401e-01 1.3369537797869220e+00 -2.1659642597853814e+00 + -9.9884770869862982e-01 1.4729528302637411e+00 -2.5311399666354251e+00 + -9.6472553170836184e-01 1.5929021678047790e+00 -2.9120237659067802e+00 + -8.8928182543241940e-01 1.6968380365851246e+00 -3.3014501512459278e+00 + -7.7680497966086193e-01 1.7862802949271095e+00 -3.6997536565693121e+00 + -6.3296762164304043e-01 1.8576147841380772e+00 -4.1148216691422803e+00 + -4.5973419851689135e-01 1.9013457098217157e+00 -4.5526975840244948e+00 + -2.4932509376742545e-01 1.9051686798754655e+00 -5.0140807224931070e+00 + 1.9083901494018049e-02 1.8522902387988203e+00 -5.4937098530504436e+00 + 3.6284887787159376e-01 1.7248274181746099e+00 -5.9648351174392866e+00 + 7.6477202024556956e-01 1.5388917737466308e+00 -6.3647173572929017e+00 + 1.1125751595358027e+00 1.4437525594929745e+00 -6.5607742702337681e+00 + id 13490 + loc 9.0344512462615967e-01 8.1571710109710693e-01 380 + blend 0.0000000000000000e+00 + interp 4.5465591780730608e-01:4.0786025633161799e-01:1.5176501751180127e-02:4.5465137124812804e-01:8.8642767944575140e-01:3.1511531191854164e-01:1.2123042624142462e+00:4.3123096622896123e-01:2.0132502478212984e+00:2.4393915667126898e-01:3.0015370345651093e+00:2.8165160581020832e-01:3.3477309661621142e+00 + CVs 20 + -3.5254614259432521e-01 2.1544565876581540e-01 -6.6607839942106739e-01 + -6.5261281212032685e-01 3.6573336862026729e-01 -1.1342729685330273e+00 + -9.3724399541363523e-01 5.0266825876768162e-01 -1.5569602324756096e+00 + -1.2234759913447171e+00 6.5670197673056019e-01 -2.0107130531992334e+00 + -1.5115401133000876e+00 8.2508926345561173e-01 -2.5042967270115981e+00 + -1.8005629428553478e+00 9.9517296093938257e-01 -3.0462932208576321e+00 + -2.0907345386919975e+00 1.1414540605409584e+00 -3.6459812882997218e+00 + -2.3811789321712076e+00 1.2246052675596066e+00 -4.3131322718275698e+00 + -2.6621659209243802e+00 1.1989547244619589e+00 -5.0399304564761680e+00 + -2.9212888585712107e+00 1.0272393884567244e+00 -5.7942678695871583e+00 + -3.1497688241495521e+00 6.8848638600566714e-01 -6.5274971535290245e+00 + -3.3347575511815397e+00 1.7903206364392776e-01 -7.1845384987915821e+00 + -3.4563528260973464e+00 -4.7294220166625056e-01 -7.7085589244344392e+00 + -3.5082520123589811e+00 -1.1783879169602534e+00 -8.0676913206002396e+00 + -3.5146937593571344e+00 -1.8193181765163895e+00 -8.3017220297665482e+00 + -3.5114287403216689e+00 -2.3392159709463427e+00 -8.4866519729400416e+00 + -3.5308141789551462e+00 -2.7465413125554563e+00 -8.6624330964992904e+00 + -3.5946862530272750e+00 -3.0775138125005546e+00 -8.8322637734634615e+00 + -3.6191316252028409e+00 -3.4062196368918123e+00 -9.0002834464969244e+00 + id 13491 + loc 7.4683725833892822e-01 9.8942196369171143e-01 409 + blend 0.0000000000000000e+00 + interp 4.5868119037008809e-01:2.8568644710755536e-01:1.2896748945090974e-01:2.6410986157544619e-01:9.8928927983318105e-01:4.5867660355818440e-01:1.2629826701894951e+00:2.3223684031040109e-01:2.2483731801715603e+00:3.1580042128350228e-01:3.3194757320794710e+00 + CVs 20 + 4.6859762398001198e-01 2.1562529581337997e-01 -1.0609632970130389e-01 + 8.3729473303841961e-01 3.6494318225727768e-01 -1.9525360445913220e-01 + 1.1799190606499690e+00 4.8685912199827169e-01 -2.7382373312336533e-01 + 1.5411270576973624e+00 6.0592096029992648e-01 -3.4551321859639533e-01 + 1.9234261820902692e+00 7.1965271901503347e-01 -4.1399351162050002e-01 + 2.3296874270855747e+00 8.2517621004757113e-01 -4.8437388610660320e-01 + 2.7646317722473994e+00 9.1989622676095106e-01 -5.6318154360276418e-01 + 3.2357925696675180e+00 9.9640346554483306e-01 -6.5568784350846177e-01 + 3.7505919842979578e+00 1.0369608198682405e+00 -7.6375288059303015e-01 + 4.3075680431952561e+00 1.0155920037870094e+00 -8.9033263704333521e-01 + 4.8869309415420030e+00 9.0503085704638520e-01 -1.0438838551522722e+00 + 5.4525950128293044e+00 6.8822910156001238e-01 -1.2313476765668654e+00 + 5.9706061809279474e+00 3.6875240056559644e-01 -1.4497295727371156e+00 + 6.4213269227497491e+00 -3.4827791251953677e-02 -1.6909925720898991e+00 + 6.7938363542382394e+00 -4.9955180806580213e-01 -1.9479628623013552e+00 + 7.0825155471636254e+00 -1.0070197181089662e+00 -2.2109367953410213e+00 + 7.2860064391725530e+00 -1.5442868380749126e+00 -2.4645596275933777e+00 + 7.4078243579665450e+00 -2.0813446607771402e+00 -2.6970224313441311e+00 + 7.5197212867249625e+00 -2.4447524834443599e+00 -2.9024188782709190e+00 + id 13492 + loc 5.8530014753341675e-01 1.7900037765502930e-01 378 + blend 0.0000000000000000e+00 + interp 5.3357605157219523e-01:5.2960287737815248e-01:5.0776178076191503e-02:3.0385528009262347e-01:7.3911529499195305e-01:5.3357071581167959e-01:1.4262455885251415e+00:3.8640286104367150e-01:2.1515342956616572e+00:3.3033755867695486e-01:2.9510579195779880e+00:4.7760588165639606e-01:3.8272281476548118e+00 + CVs 20 + -3.4300943904133424e-01 3.8800437738928933e-01 -2.0824283600237237e-01 + -6.9019876524835699e-01 7.3613489019735268e-01 -3.7837585344209518e-01 + -1.0401306047277221e+00 1.0499727972238162e+00 -5.2468251401664046e-01 + -1.3806262721740785e+00 1.3405612858202784e+00 -6.6370030996687035e-01 + -1.7011423430165160e+00 1.6091798093923311e+00 -8.1256212745776846e-01 + -2.0045245858080989e+00 1.8502053313411468e+00 -9.8536904988510798e-01 + -2.2948578726136311e+00 2.0580019808352237e+00 -1.1891528163760239e+00 + -2.5715959157636301e+00 2.2313022928060846e+00 -1.4241645332012722e+00 + -2.8363651336483757e+00 2.3726758091152629e+00 -1.6878094469120382e+00 + -3.0980574636879994e+00 2.4832491682528510e+00 -1.9811587773972366e+00 + -3.3691917205321120e+00 2.5553392605176319e+00 -2.3085677333394079e+00 + -3.6615556337173993e+00 2.5678720727377966e+00 -2.6735321750590781e+00 + -3.9745206096491317e+00 2.4923202699911795e+00 -3.0658685009361246e+00 + -4.2804749687817880e+00 2.3341629141969316e+00 -3.4443034181000947e+00 + -4.5499079538740439e+00 2.1566656068103196e+00 -3.7667201167427282e+00 + -4.7798334480442275e+00 2.0103722493005489e+00 -4.0287336539842178e+00 + -4.9864444173503220e+00 1.8946603406009284e+00 -4.2544162796862377e+00 + -5.2084137773141137e+00 1.7971146367125552e+00 -4.4577758460985528e+00 + -5.5485728827438425e+00 1.7078451664266150e+00 -4.6266654055381027e+00 + id 13493 + loc 6.9467449188232422e-01 9.9349611997604370e-01 374 + blend 0.0000000000000000e+00 + interp 4.1222140547221370e-01:3.7484164362400929e-01:4.0035877148874910e-01:2.3953422885242232e-01:1.1391629703337907e+00:2.2009335343285186e-01:1.9754337489662619e+00:4.1221728325815898e-01:2.9316519627470772e+00:3.2943008621527703e-01:3.3959188651744654e+00 + CVs 20 + -6.0896241140380447e-01 3.6126061111029145e-01 -2.6246108026722181e-01 + -1.1241443049200672e+00 6.2498808547563778e-01 -4.5864500355862997e-01 + -1.6491782881931036e+00 8.3681912506427847e-01 -6.3343277943091181e-01 + -2.2206557788958956e+00 1.0249829816042642e+00 -8.1823579578085381e-01 + -2.8254092917288416e+00 1.1873509460303744e+00 -1.0341513149869446e+00 + -3.4515693131203329e+00 1.2978905241263032e+00 -1.2996164045946945e+00 + -4.0848429746061132e+00 1.3163966621658825e+00 -1.6210212628729663e+00 + -4.6993242732472904e+00 1.2115965245535736e+00 -1.9876197961096633e+00 + -5.2659646996777774e+00 9.7085038557696368e-01 -2.3686858603731484e+00 + -5.7638775719327100e+00 5.9925038882988613e-01 -2.7134255990672744e+00 + -6.1715672451838142e+00 1.2052258426013918e-01 -2.9645766840938679e+00 + -6.4637299688008394e+00 -4.1776060963326156e-01 -3.0847238532724077e+00 + -6.6521705295393634e+00 -9.4824288100494103e-01 -3.0856396420987400e+00 + -6.8255678266554263e+00 -1.4275994273303523e+00 -3.0403653791196361e+00 + -7.0723981975365735e+00 -1.8624491083364156e+00 -3.0247275295163867e+00 + -7.4170780329543611e+00 -2.2381455491094404e+00 -3.0356361171108190e+00 + -7.8202953838821809e+00 -2.5010072917812241e+00 -3.0071362452982622e+00 + -8.2000422399907826e+00 -2.6463027015128162e+00 -2.9234016708115020e+00 + -8.5304303721870909e+00 -2.8403801583021728e+00 -2.8985127978712333e+00 + id 13494 + loc 9.5861285924911499e-01 7.8400325775146484e-01 1080 + blend 0.0000000000000000e+00 + interp 4.5906455428048898e-01:3.1078207481671094e-01:7.8483679809223106e-02:3.1173755383189283e-01:1.0100977635178854e+00:3.8806612059033108e-01:1.7480428592518940e+00:2.8188852968509948e-01:2.1515143882280161e+00:2.8274392902158380e-01:3.0093399901886837e+00:4.5905996363494622e-01:3.8290242299480362e+00 + CVs 20 + 7.7881564156656018e-03 2.6347551415394077e-01 8.8278422049828845e-02 + 2.8497845826122761e-02 4.7934888777589502e-01 1.0793938764956482e-01 + 3.4376465981702999e-02 6.8404276059746350e-01 1.1061683377058990e-01 + 1.3564839256293579e-02 8.8469895072430371e-01 1.1236856377558407e-01 + -3.5088002671166879e-02 1.0754262393720353e+00 1.0776082985256330e-01 + -1.1398846883468916e-01 1.2470618429163389e+00 9.1229463434023605e-02 + -2.2448634064017844e-01 1.3871886103992450e+00 5.9448394225085299e-02 + -3.6420554676325162e-01 1.4829730299289847e+00 1.4753748287631874e-02 + -5.2546276895212873e-01 1.5240873070163508e+00 -3.6119376930138558e-02 + -6.9513687202569274e-01 1.5028580037957595e+00 -8.6638680675745650e-02 + -8.5520268245917563e-01 1.4144523930957007e+00 -1.3129795387480980e-01 + -9.8799250704305475e-01 1.2650865317758677e+00 -1.6503008473493785e-01 + -1.0881058089020070e+00 1.0735822575296483e+00 -1.8430696631447840e-01 + -1.1686886833307251e+00 8.6137896394197055e-01 -1.9005408566736770e-01 + -1.2553959016923659e+00 6.4169765969548931e-01 -1.8892858154084899e-01 + -1.3610802592021247e+00 4.1331523997672814e-01 -1.8640386624501526e-01 + -1.4790944020547401e+00 1.7275181755956567e-01 -1.8968837758431598e-01 + -1.6074610120882269e+00 -7.4451992276692122e-02 -2.2438404383458627e-01 + -1.7996379636288413e+00 -2.9751396973455069e-01 -2.9727121516741373e-01 + id 13495 + loc 4.7979152202606201e-01 7.2748190164566040e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0527504571810025e-01:2.8546719409869925e-01:5.5023809187367823e-03:2.8072270034634578e-01:1.0001354045563884e+00:4.0527099296764307e-01:1.8886076577683286e+00:2.7330394274476605e-01:2.7458288698535824e+00:2.7699969308559097e-01:3.2790723419572223e+00 + CVs 20 + 1.1620312362741211e-01 3.3054670589732060e-01 -2.0182021457001614e-01 + 2.4819968910657364e-01 6.5651698805674896e-01 -4.0700308850445061e-01 + 3.9353674460386012e-01 9.7347607463140118e-01 -6.0224309366483075e-01 + 5.4924605933986492e-01 1.2788426062780898e+00 -7.8397040509503668e-01 + 7.1202927460957532e-01 1.5714999160751340e+00 -9.5453305571847935e-01 + 8.7940722495451285e-01 1.8480770565031210e+00 -1.1177587324296852e+00 + 1.0523778035248423e+00 2.1030180909871143e+00 -1.2820860289673983e+00 + 1.2352766440406977e+00 2.3295883957498340e+00 -1.4570211306196936e+00 + 1.4378128402931567e+00 2.5195866626448487e+00 -1.6502187299806257e+00 + 1.6724067466614883e+00 2.6596575870584003e+00 -1.8647975873900173e+00 + 1.9408523696772073e+00 2.7341411529879620e+00 -2.0933759290813265e+00 + 2.2315021729449160e+00 2.7365940913793168e+00 -2.3213503913056379e+00 + 2.5440997329340873e+00 2.6760612899559879e+00 -2.5457868920804909e+00 + 2.9050415565753482e+00 2.5582660246105324e+00 -2.7876058875295824e+00 + 3.3197464641570660e+00 2.3630741676795477e+00 -3.0767421939650363e+00 + 3.7286273929835687e+00 2.0621912060752488e+00 -3.4287426534901813e+00 + 4.0408094342788834e+00 1.6758463359711155e+00 -3.8503257843963317e+00 + 4.1692921301174994e+00 1.3208582547130190e+00 -4.3134440000206835e+00 + 4.0557188004868445e+00 1.1997701793621409e+00 -4.6423932382778501e+00 + id 13496 + loc 3.4760484099388123e-01 3.4320205450057983e-02 402 + blend 0.0000000000000000e+00 + interp 5.2997751435473406e-01:3.2802404744867281e-01:6.1751818236172817e-01:4.6222303128143172e-01:1.0698118750976451e+00:5.2997221457959054e-01:1.6461763457733047e+00:4.6289032983892142e-01:1.9999363526820240e+00:2.5829207990032182e-01:2.9668739921391705e+00:4.2696831508771277e-01:3.5083123370998783e+00:4.4315017889899810e-01:3.9875940498843714e+00 + CVs 20 + -1.4854982817348528e-01 3.6842354591202020e-01 2.8002949123699777e-01 + -2.9431597102002371e-01 7.1880727587846072e-01 5.1012910684601187e-01 + -4.6680363438090683e-01 1.0576177313498603e+00 7.0746025110570621e-01 + -6.7690092703827665e-01 1.3850514040328561e+00 8.8545376104096485e-01 + -9.2475900837401637e-01 1.6972478565269951e+00 1.0550096465263610e+00 + -1.2128205183562679e+00 1.9906570673407971e+00 1.2225264320748122e+00 + -1.5481097588981481e+00 2.2619107368438116e+00 1.3861344009385423e+00 + -1.9387142242161595e+00 2.5030693655433383e+00 1.5438402925763557e+00 + -2.3886706453097122e+00 2.6985926249411301e+00 1.6993333520333436e+00 + -2.8934816781697239e+00 2.8281588372895921e+00 1.8510380196878835e+00 + -3.4419770643090146e+00 2.8701361734654980e+00 1.9867545665785240e+00 + -4.0169720453528832e+00 2.7989181472084583e+00 2.1024641986918260e+00 + -4.5818796780168878e+00 2.5894201187773001e+00 2.2137419189987502e+00 + -5.0862444208088826e+00 2.2433092644135746e+00 2.3504450067451303e+00 + -5.4878956827869168e+00 1.8065597311186208e+00 2.5550300724579826e+00 + -5.7679012579122366e+00 1.3692672399002672e+00 2.8674343255265331e+00 + -5.9375965788713359e+00 1.0417388021141947e+00 3.2927190635970534e+00 + -6.0233561884755398e+00 8.6529390571686404e-01 3.7788890581539816e+00 + -6.0692356956606401e+00 7.0128399091157290e-01 4.2263728260093378e+00 + id 13497 + loc 7.6558077335357666e-01 7.6205886900424957e-02 395 + blend 0.0000000000000000e+00 + interp 4.8048171025194469e-01:3.7696344608632359e-01:4.7931555591566299e-01:2.5685655645205796e-01:9.9759112391432969e-01:2.2479761213898219e-01:1.9953610446759444e+00:3.3988950360675302e-01:2.3729667841572626e+00:4.8047690543484217e-01:3.0755552644408226e+00:3.4172085515531825e-01:3.6749211178041992e+00 + CVs 20 + -3.2392487748910487e-01 2.7004360974485786e-01 3.7823937718907752e-01 + -6.0708412530608857e-01 4.9553934855813775e-01 6.7829701124966368e-01 + -8.8873234532365775e-01 7.0808041870598615e-01 9.4757218509563312e-01 + -1.1863715974030127e+00 9.2355467710195560e-01 1.2060390539877972e+00 + -1.4986282945323097e+00 1.1373989101291166e+00 1.4539514673545866e+00 + -1.8246899855847096e+00 1.3447986966012437e+00 1.6967863369906167e+00 + -2.1643223811762007e+00 1.5422275740134088e+00 1.9461077639702524e+00 + -2.5206885701531325e+00 1.7235817550616896e+00 2.2151488417122023e+00 + -2.9025451690675252e+00 1.8750562350178570e+00 2.5128144987453158e+00 + -3.3176891854721813e+00 1.9776119530061209e+00 2.8402888581152692e+00 + -3.7605783221309155e+00 2.0152374026673980e+00 3.1929902362013061e+00 + -4.2058310300850161e+00 1.9749925092832219e+00 3.5648145385088115e+00 + -4.6293345966640125e+00 1.8535079448293024e+00 3.9442196788950383e+00 + -5.0211228604535716e+00 1.6529371360166363e+00 4.3178437410134780e+00 + -5.3752690760224242e+00 1.3774455958329503e+00 4.6792681602765311e+00 + -5.6840996341300070e+00 1.0287059187477299e+00 5.0371625749581392e+00 + -5.9324511308767285e+00 6.0471089113206977e-01 5.3973394730818631e+00 + -6.0859587107471960e+00 1.3171347767074160e-01 5.7233728038397533e+00 + -6.0575544613375829e+00 -2.0427669645837110e-01 5.8706658366112316e+00 + id 13498 + loc 2.6373505592346191e-01 3.6523026227951050e-01 373 + blend 0.0000000000000000e+00 + interp 3.8137280452476091e-01:3.1852474254661078e-01:5.2706009032881407e-01:3.3016134506875028e-01:1.0557426899010185e+00:3.7146064705058196e-01:1.8226261230222054e+00:3.1955905400613721e-01:2.4862668444477403e+00:3.8136899079671566e-01:3.0486824642783272e+00:3.1544845425547691e-01:3.8928413171320022e+00 + CVs 20 + -5.1059021446204098e-02 9.2049964651401295e-01 2.7293187665459373e-01 + -1.8902520209048115e-01 1.8202331239611254e+00 4.6924957674385104e-01 + -4.4948128529788489e-01 2.6462677570602944e+00 5.0196218685061400e-01 + -8.3050850445503333e-01 3.3061849143890076e+00 3.1348486307866685e-01 + -1.2719952372805918e+00 3.7064031274338411e+00 -6.6973111070026459e-02 + -1.6696569260119074e+00 3.8111778787901480e+00 -5.1006062147694542e-01 + -1.9722629906127682e+00 3.6966190302242614e+00 -9.3069054475618462e-01 + -2.1788759445394854e+00 3.4512851783470313e+00 -1.3409319461936180e+00 + -2.2878010369282147e+00 3.1208419613521157e+00 -1.7820713245023045e+00 + -2.2892494741946456e+00 2.6827715857288705e+00 -2.2863267782886001e+00 + -2.1593480868860393e+00 2.0945218371716350e+00 -2.8273388320822428e+00 + -1.8682476002441533e+00 1.3292203383456513e+00 -3.3146816240858490e+00 + -1.4242033393043076e+00 4.7259482212843706e-01 -3.7341212220475266e+00 + -9.1513166577629823e-01 -3.5948329162678894e-01 -4.1859256219647563e+00 + -5.4774696628261399e-01 -1.0642019900929067e+00 -4.7701327044246176e+00 + -6.0353688840717434e-01 -1.4941665144756007e+00 -5.5393274980425273e+00 + -1.2657618466728091e+00 -1.6811813132688096e+00 -6.3195126580910523e+00 + -2.4493855973837890e+00 -1.8074613830811255e+00 -6.6634895056163241e+00 + -3.7916026090245918e+00 -2.0480697838970960e+00 -6.9058027766211314e+00 + id 13499 + loc 5.8998590707778931e-01 2.8073161840438843e-01 415 + blend 0.0000000000000000e+00 + interp 5.1177720181618391e-01:4.1007236814507325e-01:3.2499001055525722e-02:2.6718391856813273e-01:8.6729400285425051e-01:3.1664483920626157e-01:1.8014484439249920e+00:3.7962182076404655e-01:2.4346131015672698e+00:5.1177208404416574e-01:2.9967160257239769e+00:4.5913862251148890e-01:3.2977942401617324e+00:4.9078722075461073e-01:3.8030039150273502e+00 + CVs 20 + -2.1949600064717475e-01 2.8680016675798570e-01 -1.5972661490549900e-01 + -4.0993392511461146e-01 5.2496665292293243e-01 -2.8518171274608412e-01 + -5.7817533464276005e-01 7.3139317632710732e-01 -4.3094721460684937e-01 + -7.4671570334749315e-01 9.2038219107329122e-01 -6.0913156219129105e-01 + -9.1143373080847556e-01 1.0839646815956547e+00 -8.1865189312934128e-01 + -1.0633268186943727e+00 1.2146487617338999e+00 -1.0561849195278947e+00 + -1.1969241859026889e+00 1.3094872568798215e+00 -1.3148474077099783e+00 + -1.3120075139375693e+00 1.3691561220289079e+00 -1.5857599708392498e+00 + -1.4069556277352007e+00 1.3947306532698991e+00 -1.8592218366647604e+00 + -1.4816562942255245e+00 1.3884176392905025e+00 -2.1260990331078329e+00 + -1.5604970537609546e+00 1.3537675394346662e+00 -2.3890249201084508e+00 + -1.7036790123381469e+00 1.2881392219538133e+00 -2.6696684769823200e+00 + -1.9645600889061474e+00 1.1771849868975612e+00 -2.9670059408321547e+00 + -2.3186957292083186e+00 1.0127308339787848e+00 -3.2195030597700303e+00 + -2.6860402085099371e+00 8.0877238833108689e-01 -3.3785801203295720e+00 + -3.0324425566013389e+00 5.8068620426867534e-01 -3.4470014433182739e+00 + -3.3600467458908865e+00 3.3766139586495791e-01 -3.4346537918616700e+00 + -3.6575054365867308e+00 9.3530423401330332e-02 -3.3506730785772421e+00 + -3.7635322832419922e+00 -6.9621443087238166e-02 -3.2918948942208277e+00 + id 13500 + loc 8.9446443319320679e-01 7.6707571744918823e-01 393 + blend 0.0000000000000000e+00 + interp 4.6613882509611454e-01:4.6613416370786359e-01:3.3097340708149703e-01:3.2325247413966152e-01:9.5301326925600749e-01:2.8138551736379624e-01:1.5429044176446902e+00:4.4513966868456656e-01:1.9978186190139744e+00:2.7920447474720667e-01:2.8806017563203148e+00:4.4048658306676147e-01:3.8927900672319389e+00 + CVs 20 + -1.4758340888768415e-01 1.7954155219042295e-01 -9.3165033542515374e-02 + -3.0243818020879654e-01 3.9263446710220262e-01 -2.1105765821410355e-01 + -4.5395794573410864e-01 6.3579038370710206e-01 -3.2851833409592079e-01 + -5.9847289003340387e-01 9.0468733308749849e-01 -4.3018990980033778e-01 + -7.3976065527416479e-01 1.1961696165139408e+00 -5.1649584349238975e-01 + -8.8261289069578552e-01 1.5025577431964485e+00 -5.9652896773289266e-01 + -1.0320226304190783e+00 1.8133352022343334e+00 -6.8711635387461456e-01 + -1.1940285055097499e+00 2.1171476755377743e+00 -8.0262049818643988e-01 + -1.3757702986135301e+00 2.4027184461264097e+00 -9.5011337494245129e-01 + -1.5806368214409445e+00 2.6506120097655197e+00 -1.1460810849060108e+00 + -1.7970234996835215e+00 2.8159630414597165e+00 -1.4261680435455197e+00 + -1.9905934460421237e+00 2.8300475782840047e+00 -1.7996333655470558e+00 + -2.1279297412597393e+00 2.6576239656622125e+00 -2.2017634594788409e+00 + -2.2068319774479317e+00 2.3475218824216268e+00 -2.5557492197792899e+00 + -2.2561834720244072e+00 1.9891310576495220e+00 -2.8518902531623680e+00 + -2.3269391600436706e+00 1.6377810710570326e+00 -3.1164077401500094e+00 + -2.5020625003466295e+00 1.3392961361161198e+00 -3.3510593159162370e+00 + -2.8493908142655400e+00 1.1749341800121940e+00 -3.5212387074123432e+00 + -3.0333429152244276e+00 9.7090995262069502e-01 -3.7504055222732502e+00 + id 13501 + loc 1.7574945092201233e-01 5.3852999210357666e-01 399 + blend 0.0000000000000000e+00 + interp 3.8526100245901551e-01:3.4355847519701599e-01:2.0678448521468484e-01:2.6564130758952492e-01:9.8410064782454554e-01:2.6572198300757649e-01:1.9456749333859200e+00:2.7551244392613489e-01:2.7219376508578819e+00:3.8525714984899095e-01:3.1838921896171590e+00 + CVs 20 + -2.6684530761054304e-01 3.1062312203585701e-01 -2.2831655333157291e-01 + -5.4099640603707266e-01 6.2203454630172983e-01 -4.5393578623231734e-01 + -8.3603842090944125e-01 9.2667572597830894e-01 -7.0724376128962885e-01 + -1.1593315908164838e+00 1.2133860676633947e+00 -9.9480842827567018e-01 + -1.5129956323666180e+00 1.4677356079755688e+00 -1.2992782069098312e+00 + -1.8964174732838703e+00 1.6670157235389316e+00 -1.5854469611561144e+00 + -2.2973459601367057e+00 1.7812492613219690e+00 -1.8079621674569195e+00 + -2.6670525029860337e+00 1.7769965161294625e+00 -1.9275329771347540e+00 + -2.9560904270959778e+00 1.6521526152896271e+00 -1.9446098013755071e+00 + -3.1875616250769037e+00 1.4198805708918565e+00 -1.9029762431939448e+00 + -3.4064972991689948e+00 1.0582544456514931e+00 -1.8430237880875053e+00 + -3.6510866583400490e+00 5.2664288135771242e-01 -1.8139662343464789e+00 + -3.9724040436225319e+00 -1.7782261285782602e-01 -1.8980497331917650e+00 + -4.4687774765394748e+00 -9.5395735906666634e-01 -2.1777233988907390e+00 + -5.2608205144099536e+00 -1.5747866530715109e+00 -2.6754871995277520e+00 + -6.3505235384548850e+00 -1.7070826931043213e+00 -3.3276240796443086e+00 + -7.4611102080512026e+00 -9.9903672491717843e-01 -3.9559994905508362e+00 + -8.0228638564075982e+00 2.1881682644049161e-01 -4.3104215620872033e+00 + -8.3448792848181643e+00 7.4086562229761543e-01 -4.6074291098542952e+00 + id 13502 + loc 8.6200898885726929e-01 4.0754392743110657e-01 412 + blend 0.0000000000000000e+00 + interp 4.9861309267591575e-01:4.9860810654498899e-01:4.2711669920085793e-03:3.1599843776230413e-01:4.3746197071828730e-01:3.4404299614877620e-01:1.0087349448531568e+00:3.2847929273326759e-01:1.9860842793949409e+00:4.2417533136264457e-01:2.5601628857123169e+00:4.0300708160205939e-01:3.0051653889905574e+00:4.4237859024185089e-01:3.4850683959141118e+00 + CVs 20 + -6.1946244247143389e-01 1.4391673957021128e-01 2.3561530674329217e-01 + -1.0213770823602892e+00 2.1109744325808644e-01 4.2526101587043869e-01 + -1.3563877579257664e+00 2.5034909873830441e-01 6.0585262704511389e-01 + -1.6854940162133434e+00 2.8181895159681408e-01 7.9012262170640535e-01 + -2.0071058173640481e+00 2.9954646834196419e-01 9.7326600731543178e-01 + -2.3207010713461562e+00 2.9699655402649972e-01 1.1501850987667113e+00 + -2.6266741189644764e+00 2.6914350898954331e-01 1.3152629725015348e+00 + -2.9252808799622700e+00 2.1320004366374912e-01 1.4628577475423510e+00 + -3.2148108648677134e+00 1.2792654982415663e-01 1.5885235967029105e+00 + -3.4916746450973730e+00 1.5016698344851420e-02 1.6881516243898345e+00 + -3.7541534685015532e+00 -1.1389791470465238e-01 1.7518093255237845e+00 + -4.0054894300180717e+00 -2.4036296552393521e-01 1.7623988904292842e+00 + -4.2521022197271607e+00 -3.7163935252290803e-01 1.7203491941358200e+00 + -4.4940210847682778e+00 -5.4808359419454122e-01 1.6547883155506951e+00 + -4.7219035564741612e+00 -7.9582745913240394e-01 1.5876480898815180e+00 + -4.9265915872205897e+00 -1.1134688781439455e+00 1.5236100305145150e+00 + -5.0979398126094395e+00 -1.4901900297044655e+00 1.4742075868043485e+00 + -5.2193072320375995e+00 -1.9058456045813104e+00 1.4622042933279924e+00 + -5.2568183496994028e+00 -2.3476068151640535e+00 1.5256651291003691e+00 + id 13503 + loc 7.4777489900588989e-01 4.6314537525177002e-01 382 + blend 0.0000000000000000e+00 + interp 4.3786559361715316e-01:3.4741503208311320e-01:2.0585875482218641e-01:3.7134960464106975e-01:1.0022694356811901e+00:3.7004554564946818e-01:1.7797646511919929e+00:4.3786121496121699e-01:2.4751685406673003e+00:4.0281132954633175e-01:2.9968868117673542e+00:3.7995909314571613e-01:3.5064953818496205e+00 + CVs 20 + -8.9729392263033936e-01 9.9640823304036091e-02 5.1429218413810263e-01 + -1.4981353821283556e+00 7.8954562358367619e-02 8.8745576835969708e-01 + -2.0459125402019707e+00 1.8724368296630378e-02 1.2334117960553841e+00 + -2.6403406771810958e+00 -3.2115598875892215e-02 1.5902371445394321e+00 + -3.2763212879009744e+00 -6.5969024101764417e-02 1.9515180060469015e+00 + -3.9498005321242333e+00 -8.8946112596854476e-02 2.3167913069984372e+00 + -4.6528837681009385e+00 -1.3048092131965006e-01 2.6881595139149601e+00 + -5.3693175809729832e+00 -2.3779582652468512e-01 3.0601964028918891e+00 + -6.0683664452066663e+00 -4.5591401914622054e-01 3.4184511714901862e+00 + -6.7020623763574614e+00 -8.0789717364914360e-01 3.7467035434119191e+00 + -7.2138513223886171e+00 -1.2876080567765931e+00 4.0285819106676266e+00 + -7.5561655985103737e+00 -1.8602101199802432e+00 4.2461958381911344e+00 + -7.7103695091076787e+00 -2.4642193242044845e+00 4.3891596070766523e+00 + -7.7045719449976291e+00 -3.0354146149202603e+00 4.4655675242657322e+00 + -7.5975401065631409e+00 -3.5568864410637566e+00 4.4942564786994410e+00 + -7.4412785099695515e+00 -4.0572718807278587e+00 4.4945171923392442e+00 + -7.2743817140216951e+00 -4.5586688251333323e+00 4.4895998648058342e+00 + -7.1132863664606845e+00 -5.0543012451148526e+00 4.4998127831627244e+00 + -6.9404055100856876e+00 -5.5137400955557565e+00 4.5287290244890830e+00 + id 13504 + loc 1.3378058373928070e-01 6.9760143756866455e-02 407 + blend 0.0000000000000000e+00 + interp 4.7368584689662624e-01:4.0794319648623190e-01:1.5292202892328144e-01:2.5114420943651844e-01:9.1147260556757659e-01:4.0294493016102062e-01:1.1440240500231722e+00:4.3454328238851042e-01:1.6957273346408721e+00:4.2385844346559109e-01:2.0065553233004891e+00:3.6974970277464453e-01:2.8389364298629634e+00:4.7368111003815727e-01:3.3524241285539524e+00:4.1933289530993390e-01:3.8922372494404565e+00 + CVs 20 + 3.4325966954052767e-02 3.2393519789789638e-01 -3.1150857526917536e-01 + 6.1784687827802658e-02 5.2254278151943123e-01 -4.3179593665621568e-01 + 9.6961547301146880e-02 6.7695369290985297e-01 -4.8272061606784583e-01 + 1.4736096546611779e-01 8.2347828432436809e-01 -5.3846615612937532e-01 + 2.1443136495452103e-01 9.6076734005235265e-01 -5.9659116067344886e-01 + 3.0138352930500889e-01 1.0877110757991455e+00 -6.5557115606860439e-01 + 4.1321188107801432e-01 1.2021587084169050e+00 -7.1449739955312264e-01 + 5.5499491284982450e-01 1.3004297116828230e+00 -7.7242044041705882e-01 + 7.2961686604120612e-01 1.3784100299431246e+00 -8.2882333826687837e-01 + 9.3741273510340040e-01 1.4332451159799438e+00 -8.8427132595444857e-01 + 1.1770290266075731e+00 1.4638137130347524e+00 -9.4045732542956806e-01 + 1.4457649289917214e+00 1.4695199969824855e+00 -9.9919549373337868e-01 + 1.7383021799920357e+00 1.4487774167268519e+00 -1.0613858593768000e+00 + 2.0434513764031186e+00 1.4013624677337062e+00 -1.1277856446616468e+00 + 2.3456993176208583e+00 1.3341255872785840e+00 -1.2000619625122519e+00 + 2.6327357469746944e+00 1.2606897163443036e+00 -1.2831453909806152e+00 + 2.8980854366720759e+00 1.1930746202777205e+00 -1.3827555634690272e+00 + 3.1354700433512024e+00 1.1375901176218726e+00 -1.5003211140709998e+00 + 3.3551482849566807e+00 1.0923433020883073e+00 -1.6444868589115345e+00 + id 13505 + loc 1.7121697962284088e-01 9.2993885278701782e-01 375 + blend 0.0000000000000000e+00 + interp 5.1455906462598489e-01:3.1178065832701179e-01:6.3251525599524516e-02:3.4411067905371107e-01:9.5813040796895510e-01:4.6504426822347356e-01:1.4499609245194574e+00:2.8042653104258519e-01:2.0780772896984301e+00:4.9206645667254162e-01:3.0024183683492396e+00:5.1455391903533865e-01:3.2670133015664611e+00:4.2602898404944295e-01:3.8011916583037966e+00 + CVs 20 + -3.4947436882560479e-01 4.0363377917293619e-01 -5.0710526841154180e-02 + -7.2028852315210534e-01 7.0424079318394528e-01 -5.4410423888916509e-02 + -1.1472153050073834e+00 8.7353724486550033e-01 -7.7412135107703395e-03 + -1.6169587021123122e+00 9.6270393458408066e-01 9.0854815622927076e-02 + -2.0956065726516324e+00 1.0585709619084511e+00 2.2963895085598274e-01 + -2.5754092464302971e+00 1.2185174512474635e+00 3.7299973999598823e-01 + -3.0568371297730854e+00 1.4641777965899023e+00 4.7070596810587106e-01 + -3.5223949657762814e+00 1.7976380655965465e+00 4.8399842025052486e-01 + -3.9475161766929805e+00 2.2146174334872182e+00 3.9307137854681551e-01 + -4.3188569817913534e+00 2.7000894370512674e+00 1.8011100940833535e-01 + -4.6415841232045274e+00 3.2174265580691164e+00 -1.8380960183010231e-01 + -4.9184596456076051e+00 3.7005380881016858e+00 -7.4547149445891603e-01 + -5.1198263574208793e+00 4.0317075694896278e+00 -1.5190007845860578e+00 + -5.1940878394139869e+00 4.0899185329756280e+00 -2.4192894609987117e+00 + -5.1099458873277035e+00 3.8323937943107778e+00 -3.2863336472648479e+00 + -4.9344084806273267e+00 3.3270029561952104e+00 -3.9263176258995776e+00 + -4.8278960653713652e+00 2.7269709433985461e+00 -4.2502796284126374e+00 + -4.8494278211439052e+00 2.1695809229574028e+00 -4.3097362735040523e+00 + -4.8947537695712278e+00 1.6446234758382703e+00 -4.2289629940076310e+00 + id 13506 + loc 7.7680164575576782e-01 3.1513684988021851e-01 403 + blend 0.0000000000000000e+00 + interp 4.6875980312727239e-01:3.2598561080611244e-01:4.2416236085867121e-01:2.8935536898311059e-01:1.0319988218848890e+00:2.9350156202950001e-01:1.9147071134731266e+00:4.6875511552924115e-01:2.3210345859593962e+00:4.2171925169904961e-01:2.9727081732268190e+00:2.8813989932007306e-01:3.6779266886969300e+00 + CVs 20 + -9.1502277822487297e-03 3.2862559446464171e-02 4.2504963837031784e-02 + -2.6706670506594025e-02 7.2385210671299480e-02 1.0842685171620570e-01 + -5.0817720760972400e-02 1.1906704680882234e-01 1.9527635591679743e-01 + -7.7138483973963848e-02 1.6769229113030371e-01 2.9210610507310741e-01 + -1.0571112045264440e-01 2.1791304855841137e-01 3.9751971984596790e-01 + -1.3543963980813661e-01 2.6881937283748014e-01 5.1049949047383525e-01 + -1.6434964936031521e-01 3.1978017750486809e-01 6.3052664811521730e-01 + -1.8924956545791116e-01 3.7221379775545987e-01 7.5836802272102921e-01 + -2.0430415861540577e-01 4.2973172986648744e-01 8.9607824003081504e-01 + -2.0124620245829392e-01 4.9526544839931053e-01 1.0451101518646781e+00 + -1.7287017568625218e-01 5.6899211084831713e-01 1.2041701338951705e+00 + -1.1680809474638498e-01 6.4944503384428653e-01 1.3688312334975237e+00 + -3.4907300737823277e-02 7.3636719148701235e-01 1.5334336077003743e+00 + 7.0578080072789096e-02 8.3167831289887517e-01 1.6926024662673675e+00 + 1.9907426063627631e-01 9.3815002049333573e-01 1.8409996237378350e+00 + 3.5075976984507340e-01 1.0578227217035552e+00 1.9725441792210732e+00 + 5.2683981657987811e-01 1.1922357483303290e+00 2.0804622445286345e+00 + 7.3058185512504836e-01 1.3421666096885754e+00 2.1569812185107602e+00 + 7.2036851302937277e-01 1.4662728426250335e+00 2.1914323580901667e+00 + id 13507 + loc 4.0431806445121765e-01 9.5332324504852295e-01 396 + blend 0.0000000000000000e+00 + interp 4.4990597426330087e-01:4.4990147520355828e-01:3.0097512019592565e-01:2.5407681070393173e-01:1.0109394508852474e+00:3.4102495728285664e-01:1.9661412467888530e+00:2.6416715615350245e-01:2.8874816835466914e+00:3.4610009567349420e-01:3.7546382442429782e+00 + CVs 20 + 9.9152855912786675e-01 2.5635659474962480e-01 -2.7634531500734927e-01 + 1.6431745862690645e+00 3.3647742728996743e-01 -4.6779672333362132e-01 + 2.2181252309473809e+00 3.6315153533733596e-01 -6.2341161769201658e-01 + 2.8228842352422019e+00 3.8402829315045173e-01 -7.5823430136871672e-01 + 3.4594271871591693e+00 3.8293652438446407e-01 -8.7632785081546238e-01 + 4.1250388814541692e+00 3.3771516114177808e-01 -9.8903120610697903e-01 + 4.8072205054923876e+00 2.2356820994861970e-01 -1.1128576977897733e+00 + 5.4800436210202976e+00 1.4914749286690787e-02 -1.2607911146634316e+00 + 6.1121086982332624e+00 -3.1305928181225107e-01 -1.4392924695716478e+00 + 6.6678759659603521e+00 -7.7872803272059854e-01 -1.6534914331141515e+00 + 7.0941473979218408e+00 -1.3730324279997754e+00 -1.9018660502667770e+00 + 7.3474242479656802e+00 -2.0537736841254768e+00 -2.1662350015792793e+00 + 7.4223275350966773e+00 -2.7670990279180021e+00 -2.4164508738652533e+00 + 7.3416769401495632e+00 -3.4633758656901619e+00 -2.6295477517000228e+00 + 7.1380158881981535e+00 -4.0962061943970767e+00 -2.7942817491415335e+00 + 6.8484759296520039e+00 -4.6255943064273168e+00 -2.9005026174058752e+00 + 6.5146797383093471e+00 -5.0280998371747190e+00 -2.9457077147774013e+00 + 6.1795314979047706e+00 -5.3137875251403530e+00 -2.9578502932105364e+00 + 5.9296556617123999e+00 -5.6555161659244693e+00 -3.0298973834282910e+00 + id 13508 + loc 4.9784249067306519e-01 2.8951826691627502e-01 1080 + blend 0.0000000000000000e+00 + interp 3.9421916099319881e-01:2.5855238158521937e-01:1.8197534559549178e-01:3.0856298531283743e-01:1.0436100827169030e+00:2.9828048315162931e-01:1.7908687780453501e+00:3.9421521880158888e-01:2.2329747498674357e+00:2.8022645753817899e-01:2.9786213801809951e+00:2.8441628381532880e-01:3.6589753931608655e+00 + CVs 20 + 3.3834853524585173e-01 4.4967267999887806e-01 1.3131031031465019e-02 + 4.7998495688312015e-01 7.9390893461607814e-01 4.1757235062107843e-02 + 5.7762399963218258e-01 1.1364132370510254e+00 5.5539466289688574e-02 + 6.9294258047731838e-01 1.4994337351689240e+00 4.8951758559869718e-02 + 8.2094613083876455e-01 1.8738468140190543e+00 1.5473160487648713e-02 + 9.5713463337368332e-01 2.2505764121368568e+00 -4.8319953476773037e-02 + 1.0976053456593613e+00 2.6279615941857393e+00 -1.4932404813858605e-01 + 1.2399328718136258e+00 3.0116084428776837e+00 -3.1037214437967120e-01 + 1.3717904061575830e+00 3.3931650571222463e+00 -5.7452003517434158e-01 + 1.4492431798453225e+00 3.7175742003417067e+00 -9.6578374594911565e-01 + 1.4263756497517699e+00 3.9146081282399026e+00 -1.4255954268486082e+00 + 1.3050868264510773e+00 3.9713751537623203e+00 -1.8669095032676362e+00 + 1.1104539186724702e+00 3.9123998393685362e+00 -2.2519256669055752e+00 + 8.5753972304871184e-01 3.7556148927844699e+00 -2.5810006546809223e+00 + 5.2784531572277071e-01 3.4855860989600629e+00 -2.8842072468643414e+00 + 8.7301104616808844e-02 3.0166365407508100e+00 -3.2193434548971118e+00 + -3.3036826163049149e-01 2.2734897466855095e+00 -3.5865420759710038e+00 + -4.7831794614673051e-01 1.4931090491082883e+00 -3.8472706051684749e+00 + -3.9599776340506226e-01 1.1273956130937457e+00 -3.8512482697108852e+00 + id 13509 + loc 2.0689229667186737e-01 9.3184351921081543e-01 376 + blend 0.0000000000000000e+00 + interp 5.0201216383692171e-01:3.3135556842050395e-01:3.5035957601158074e-02:5.0200714371528332e-01:6.5979073559117851e-01:4.1095020594630571e-01:1.0158881054847069e+00:2.4909463138907045e-01:1.4729886261271905e+00:2.9622176845522230e-01:2.0473608767378568e+00:4.2392501181338549e-01:2.7702076465851642e+00:3.5187886781834898e-01:3.0168614321410150e+00 + CVs 20 + -8.9135465417997731e-02 4.3243370951987881e-01 6.3408884879219496e-01 + -8.0902829915267843e-02 6.7458087392829869e-01 1.1294729106306676e+00 + 5.8396296620873422e-03 7.5238981559735252e-01 1.5866166602693466e+00 + 1.5974050460675493e-01 7.1054051422981079e-01 2.0499462611536363e+00 + 3.6819659675104605e-01 6.2283901487550697e-01 2.5382977361252248e+00 + 5.9805266058692264e-01 5.5425175382941094e-01 3.0835268866502386e+00 + 7.8017644949829468e-01 5.2803887829490548e-01 3.7123989157524502e+00 + 8.4024935492973363e-01 5.4467514779238524e-01 4.4173854797874128e+00 + 7.3605838525919809e-01 6.0258192345314376e-01 5.1410507801138516e+00 + 4.7693516980833750e-01 6.9281736629667323e-01 5.7999389619083770e+00 + 1.1450231998313343e-01 7.9141552745466504e-01 6.3493339618906628e+00 + -2.9814672560993882e-01 8.7809046395410606e-01 6.7864539040940617e+00 + -7.4052677188914107e-01 9.3353191432511951e-01 7.1252182885683304e+00 + -1.2193244841445823e+00 9.3388608093748671e-01 7.3779359808372984e+00 + -1.7235823222225783e+00 8.8319884739362520e-01 7.5265073453161548e+00 + -2.2267128357221213e+00 8.2316863298897003e-01 7.5235566676730681e+00 + -2.7362089720151070e+00 7.1691092050599980e-01 7.3786434591820296e+00 + -3.1679857456507978e+00 3.6080993321177202e-01 7.2464901695381112e+00 + -3.3621842769578194e+00 -1.9544329188064102e-01 7.3050001352289913e+00 + id 13510 + loc 5.2710926532745361e-01 9.1754728555679321e-01 378 + blend 0.0000000000000000e+00 + interp 3.9631010553475055e-01:2.7922186303266666e-01:9.5489363312874276e-02:3.9630614243369522e-01:1.0062292937641311e+00:2.5011076318945197e-01:1.3555216447422271e+00:2.8222702473679456e-01:2.0054520763960060e+00:3.2889437745723504e-01:2.8495901605600116e+00:2.5001253873799867e-01:3.2916805227547483e+00 + CVs 20 + 4.9275929782278183e-01 3.7137428772844649e-01 2.2960387579297736e-01 + 9.2180264222639408e-01 6.7669062172893180e-01 4.3024419579548323e-01 + 1.3678337704560017e+00 9.4263705013040267e-01 6.1880806129826016e-01 + 1.8453152117855158e+00 1.1944221723816131e+00 8.1387112754830582e-01 + 2.3306900059939468e+00 1.4411578312710402e+00 1.0333254525477378e+00 + 2.8165543143343519e+00 1.6741970967984192e+00 1.2959282000558530e+00 + 3.3048356597491351e+00 1.8654145822721977e+00 1.6139112650037535e+00 + 3.7946962527288823e+00 1.9844863035803604e+00 1.9904185521026625e+00 + 4.2909813066866427e+00 2.0039040515148425e+00 2.4254670463019488e+00 + 4.8018286265730863e+00 1.8888470204247327e+00 2.9108519355701339e+00 + 5.3156661261559988e+00 1.5981301597690241e+00 3.4124292275379662e+00 + 5.7846458414436022e+00 1.1073533698340854e+00 3.8690413846474456e+00 + 6.1493905492518870e+00 4.5187748160344121e-01 4.2198244454418301e+00 + 6.4050701634577649e+00 -2.5075779941066267e-01 4.4565322504392082e+00 + 6.6205074886007775e+00 -8.8622428196056946e-01 4.6376997221144194e+00 + 6.8802546746874871e+00 -1.4291048805413662e+00 4.8060521914479093e+00 + 7.2397927313139689e+00 -1.9042229103049100e+00 4.9424257572376611e+00 + 7.6444389553217036e+00 -2.3042411901956745e+00 5.0262540640645259e+00 + 7.8272000161420010e+00 -2.6019486072359745e+00 5.1231865934282341e+00 + id 13511 + loc 8.5147660970687866e-01 6.5287303924560547e-01 409 + blend 0.0000000000000000e+00 + interp 4.9750730935294757e-01:2.8517992856796137e-01:7.5749723482689058e-01:4.9750233427985407e-01:1.5609783784667746e+00:3.1705061885229174e-01:1.9936025078908908e+00:2.7562941345635517e-01:2.9450167332068871e+00:2.9101491648812305e-01:3.7985188098905036e+00 + CVs 20 + 3.7635281568795481e-01 1.5825906710307608e-01 -1.7123320212139234e-01 + 6.9179382838741599e-01 2.6509142179788303e-01 -3.3678867910228671e-01 + 9.9261231659031690e-01 3.4744487220985670e-01 -4.9795953945750709e-01 + 1.3007179556926398e+00 4.1750488451843859e-01 -6.5477249266978255e-01 + 1.6156460126191461e+00 4.7249346529033964e-01 -8.0648044757163140e-01 + 1.9362587891454552e+00 5.1150187248480272e-01 -9.5324528846619949e-01 + 2.2612417524285298e+00 5.3623287416216225e-01 -1.0960011272272143e+00 + 2.5896070636184541e+00 5.4695687560681616e-01 -1.2348140205266414e+00 + 2.9202125427109080e+00 5.3883239276340156e-01 -1.3671176864134342e+00 + 3.2476918287043350e+00 5.0412541176410608e-01 -1.4903219599821236e+00 + 3.5620395923501347e+00 4.3520407223109570e-01 -1.6072493938081207e+00 + 3.8559849425845503e+00 3.2307493078687921e-01 -1.7254710383351886e+00 + 4.1270297068505686e+00 1.5983118199543567e-01 -1.8498958466827204e+00 + 4.3717373801519752e+00 -5.4659929186319900e-02 -1.9797435000605317e+00 + 4.5836684164110766e+00 -3.1323280566380074e-01 -2.1126277038654000e+00 + 4.7557151962418178e+00 -6.0682703503494162e-01 -2.2458506477408937e+00 + 4.8822247709752356e+00 -9.2830661672153747e-01 -2.3730384735379513e+00 + 4.9609664317795534e+00 -1.2690514878050405e+00 -2.4852584576897154e+00 + 5.0284953749316239e+00 -1.6413499785597883e+00 -2.5902348328576363e+00 + id 13512 + loc 9.9797552824020386e-01 3.5776883363723755e-01 1068 + blend 0.0000000000000000e+00 + interp 5.0206522440892254e-01:3.9747970078710854e-01:4.8121971778796402e-01:3.1925649842847337e-01:1.1082771323015543e+00:5.0206020375667848e-01:1.8427937359377786e+00:2.6400519077397755e-01:2.5909308108923605e+00:3.2287615117105006e-01:3.0447069937141773e+00:2.8077498763031039e-01:3.9998119548018387e+00 + CVs 20 + -1.0604377020897202e-01 4.2099303797654014e-01 1.9799131961856459e-01 + -2.0663855272213533e-01 8.5723259429824228e-01 3.5611228012315299e-01 + -3.2467753619895634e-01 1.3081112855273447e+00 4.7098381676440232e-01 + -4.9029224940969834e-01 1.7666450957087652e+00 5.4627992901645006e-01 + -7.4115735409421735e-01 2.2124368770472964e+00 5.9002224543592330e-01 + -1.1061763522033521e+00 2.6093760855248700e+00 6.1970141334701978e-01 + -1.5789870863860043e+00 2.9133806253740335e+00 6.6543090371898206e-01 + -2.1094029084061185e+00 3.0958982875916607e+00 7.6064573438015159e-01 + -2.6480076397465995e+00 3.1536836837509834e+00 9.3529046702354712e-01 + -3.1804986346878730e+00 3.0558812847854955e+00 1.2299623124684389e+00 + -3.6264879419759755e+00 2.7283000786816234e+00 1.6485033207025179e+00 + -3.8374586468968004e+00 2.2285091628382787e+00 2.0690632786774663e+00 + -3.8001229550216729e+00 1.6836904535158577e+00 2.4144245516264875e+00 + -3.5610783157948300e+00 1.1828738730165682e+00 2.6617520362518845e+00 + -3.2198017638763661e+00 8.2215109761596517e-01 2.7879039607232126e+00 + -2.8732690169997932e+00 6.2028759274954859e-01 2.8162493994691511e+00 + -2.5780249607202186e+00 5.5100952704052841e-01 2.7798805447864581e+00 + -2.3661965115570673e+00 6.2971277050971874e-01 2.6370631354849370e+00 + -2.2233353218690985e+00 5.7667134359175787e-01 2.6547923138236054e+00 + id 13513 + loc 3.6675024032592773e-01 2.3456862568855286e-01 401 + blend 0.0000000000000000e+00 + interp 4.9799885989381865e-01:3.8254845889082523e-01:5.2839850846230729e-01:4.0629360920827318e-01:1.2757685442015125e+00:4.1894863453359099e-01:1.9986650947402822e+00:2.9605514131621058e-01:2.7652890528317089e+00:4.9563469988488268e-01:3.0085755370545444e+00:4.9799387990521971e-01:3.5869539373008914e+00:3.6552924458509012e-01:3.9976077354574864e+00 + CVs 20 + -2.0114999321299099e-01 2.2721476635984864e-01 8.9886289696461827e-02 + -4.1689992322704883e-01 4.7598821507023370e-01 1.9901195427848131e-01 + -6.2986114823626294e-01 7.3986491980037972e-01 3.1213854569958355e-01 + -8.3232076740636729e-01 1.0032488042087775e+00 4.2211568554925649e-01 + -1.0315367892505176e+00 1.2505957463339379e+00 5.3407999092905933e-01 + -1.2341191631639388e+00 1.4677275094140689e+00 6.5817346258843412e-01 + -1.4474569046049202e+00 1.6420689993005544e+00 8.1044540717053160e-01 + -1.6746201916101933e+00 1.7626227851780967e+00 1.0033975778910822e+00 + -1.9082501446934954e+00 1.8266166907623471e+00 1.2364211097715927e+00 + -2.1445699799723470e+00 1.8267694265100207e+00 1.4998881670353681e+00 + -2.3839800229176094e+00 1.7386164546006420e+00 1.7738700616670080e+00 + -2.6169081502039444e+00 1.5631340387233270e+00 2.0341731757170685e+00 + -2.8340523041679861e+00 1.3441378761155351e+00 2.2831736751116800e+00 + -3.0294102721047405e+00 1.1115537928483847e+00 2.5429312743020560e+00 + -3.1944901445752536e+00 8.6342874949646897e-01 2.8236367189699725e+00 + -3.3184625563121255e+00 6.3803986328634477e-01 3.1140724793723868e+00 + -3.3948618310934200e+00 5.7278989298413829e-01 3.3751659050880045e+00 + -3.4330310249704832e+00 6.8527044977429541e-01 3.5514922748442381e+00 + -3.5135060241336440e+00 7.1951753920651362e-01 3.9223284712613964e+00 + id 13514 + loc 2.5597175955772400e-01 5.4632252454757690e-01 402 + blend 0.0000000000000000e+00 + interp 4.9170865635390448e-01:3.2798838888113352e-01:3.2198009154669194e-02:4.9170373926734096e-01:6.2041585405775534e-01:3.5951575299814748e-01:1.1114840392867011e+00:4.4817106089365188e-01:1.9522071860271106e+00:3.0959431844054813e-01:2.2821740749683355e+00:4.2750496890353490e-01:3.1803673033563062e+00 + CVs 20 + -7.8008643121461885e-03 4.0415535901397964e-01 -2.7093064739064082e-01 + -1.8582583329316893e-02 7.8823233134458548e-01 -5.4227766316676629e-01 + -5.5325643926547041e-03 1.1520219051656846e+00 -8.3009760990505610e-01 + 2.2334359037308738e-02 1.4966860000652014e+00 -1.1394010401972721e+00 + 4.8634304276993279e-02 1.8140715551130322e+00 -1.4633710263544026e+00 + 6.5589982679762349e-02 2.0983291023387340e+00 -1.7939049007970755e+00 + 6.9560724033779664e-02 2.3512797665015350e+00 -2.1281226299193716e+00 + 5.7198970647067027e-02 2.5779383324941834e+00 -2.4682710558743954e+00 + 3.0021391279536513e-02 2.7793221641052770e+00 -2.8171950947714981e+00 + -3.0729622078927710e-03 2.9508029017871178e+00 -3.1750576121116931e+00 + -3.3388455224048763e-02 3.0856894819267247e+00 -3.5462315871203378e+00 + -5.8476694496379711e-02 3.1734511300950428e+00 -3.9443999576609841e+00 + -7.9799108675263186e-02 3.1975359821746214e+00 -4.3787376811257328e+00 + -9.8287504152310357e-02 3.1447422953065240e+00 -4.8351567110792573e+00 + -1.0873303850755822e-01 3.0176536275701462e+00 -5.2797859341986797e+00 + -9.2975895132588304e-02 2.8305243097251163e+00 -5.6717021612609084e+00 + -2.6679665602176383e-02 2.5741727907361116e+00 -5.9870594466656222e+00 + 1.5311046750556501e-02 2.2563947615316620e+00 -6.2581762954067992e+00 + -8.3021174372044926e-02 2.2390590091894440e+00 -6.4239705228086397e+00 + id 13515 + loc 7.1913039684295654e-01 1.1416239291429520e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2861086704834617e-01:3.0388258825840070e-01:6.9520258521652889e-02:4.1900867833702071e-01:7.3930772359207042e-01:2.9112587895643033e-01:1.0903489220197258e+00:3.1983518070903794e-01:2.0028296861685728e+00:4.2860658093967569e-01:2.7606154880505400e+00:4.0592124367776350e-01:3.1597247191470910e+00:4.0893583118257920e-01:3.7698492551205494e+00 + CVs 20 + -6.2772804382150549e-02 1.4574776405057888e-01 2.4789742638185672e-01 + -1.4943539093828515e-01 2.3591451935826038e-01 4.6511689111611321e-01 + -2.3623748897080343e-01 2.9095827383395534e-01 6.6305955351446033e-01 + -3.2310370045591941e-01 3.2663484311094326e-01 8.5558184470474008e-01 + -4.9492429508964719e-01 3.7138905376623133e-01 1.0589461864635925e+00 + -8.2940985191911976e-01 4.8161701003657681e-01 1.2641675535519981e+00 + -1.2404149956823818e+00 7.3288501004586637e-01 1.4437387900723460e+00 + -1.5716378450225896e+00 1.1046083275207095e+00 1.5679416267906467e+00 + -1.7895457579351415e+00 1.5416297126286911e+00 1.6177910957603121e+00 + -1.9133605055454554e+00 2.0623417625314078e+00 1.5972007178392493e+00 + -1.8890540983187660e+00 2.6769524876466280e+00 1.6131024842903363e+00 + -1.6698671050999736e+00 3.2288383208017954e+00 1.7916273074794846e+00 + -1.3150120941343479e+00 3.5906623243216700e+00 2.0910590414191788e+00 + -8.9669748173042874e-01 3.7546411478509634e+00 2.4027370484275150e+00 + -4.5205885940140589e-01 3.7611467659386748e+00 2.6958352112246278e+00 + 1.6129956380344979e-02 3.6236559946939355e+00 3.0498414076807179e+00 + 4.6309582936043281e-01 3.2842421999848517e+00 3.5003741776544168e+00 + 7.4634463835188791e-01 2.7829353429990222e+00 3.8522894184272931e+00 + 7.2915734285160450e-01 2.5160809313046992e+00 3.7938802828614486e+00 + id 13516 + loc 7.5875949859619141e-01 6.7098423838615417e-02 400 + blend 0.0000000000000000e+00 + interp 4.7609591852522448e-01:3.4057422617234456e-01:8.9658904988981769e-03:4.7609115756603926e-01:8.2279965635116747e-01:3.3599671084120791e-01:1.1689531019104968e+00:2.9531700857850368e-01:2.0848791081125171e+00:2.8639242286319061e-01:3.0024269949112936e+00:4.4565314484264890e-01:3.5054459949984089e+00 + CVs 20 + 2.0657920848140426e-01 1.0401749328718271e-01 1.2539710836054521e-01 + 4.2051602656495946e-01 2.6347215009288150e-01 2.9338925732465027e-01 + 6.3469600534833925e-01 4.5165511758127208e-01 4.8000016594142225e-01 + 8.4385625178870383e-01 6.5227499289938784e-01 6.7687927480803589e-01 + 1.0459205708774331e+00 8.5890380957512336e-01 8.8563056029022780e-01 + 1.2391831551647601e+00 1.0663724532307488e+00 1.1074545136243659e+00 + 1.4223005331178569e+00 1.2682616000435032e+00 1.3488662571364278e+00 + 1.5938507668238309e+00 1.4510485607256394e+00 1.6238904534272407e+00 + 1.7563103161328331e+00 1.5923992732404257e+00 1.9438152905352453e+00 + 1.9215812609703586e+00 1.6624446354332352e+00 2.3061957821136945e+00 + 2.1006946325466593e+00 1.6307203751662054e+00 2.6930666386722129e+00 + 2.2870390694423373e+00 1.4883101079297421e+00 3.0760312840349120e+00 + 2.4677229420466378e+00 1.2543889650663989e+00 3.4342974883535593e+00 + 2.6415499596136804e+00 9.4910285972336927e-01 3.7598300969256826e+00 + 2.8067788203045092e+00 5.8041693682491191e-01 4.0478861234812067e+00 + 2.9414573981882928e+00 1.5137741719981879e-01 4.2951948190258440e+00 + 3.0144128632468368e+00 -3.2184580105697691e-01 4.5023205313883770e+00 + 3.0254283217845379e+00 -7.9292850947061022e-01 4.6837860462719512e+00 + 3.0689983578302051e+00 -1.1457617480897548e+00 4.9141907426703622e+00 + id 13517 + loc 1.0020383447408676e-01 9.6596407890319824e-01 380 + blend 0.0000000000000000e+00 + interp 4.6223533708715614e-01:3.0330094155130810e-01:7.3049370057109009e-01:3.8132271321102734e-01:1.5066342413571920e+00:3.6984499234637486e-01:1.9930579567568412e+00:4.1401747143717149e-01:2.4333793360688052e+00:4.6223071473378530e-01:3.0526248206324471e+00:4.3871473869570121e-01:3.9025188295316200e+00 + CVs 20 + -2.9852788069667602e-01 2.6973118320882494e-01 -4.0056285411219344e-01 + -6.0774647900603185e-01 4.9290483683569075e-01 -7.0131669405551345e-01 + -9.3076387320025245e-01 6.9668148502815908e-01 -9.7192234085635976e-01 + -1.2701252937734753e+00 8.9918454716457752e-01 -1.2488921367656043e+00 + -1.6180117200297264e+00 1.1010533223957639e+00 -1.5438443456148727e+00 + -1.9663968161769338e+00 1.2940180220793278e+00 -1.8677815322296896e+00 + -2.3087523979167024e+00 1.4632723730195196e+00 -2.2313944632463798e+00 + -2.6337479224190856e+00 1.5909609781584748e+00 -2.6423560675430475e+00 + -2.9241574717074199e+00 1.6595611027972423e+00 -3.0969481257800502e+00 + -3.1655366749703235e+00 1.6567606469336931e+00 -3.5784183724174601e+00 + -3.3534381821468999e+00 1.5745041204461250e+00 -4.0685378394881111e+00 + -3.4883667328268673e+00 1.4028902432449790e+00 -4.5522871165374141e+00 + -3.5672198256900005e+00 1.1376659196094643e+00 -5.0080871781656278e+00 + -3.5880679501449162e+00 8.0283912224930765e-01 -5.4127078599931906e+00 + -3.5596863565493848e+00 4.4985337590713703e-01 -5.7705009367379940e+00 + -3.5022831326951094e+00 1.2239475880043926e-01 -6.1132996006032361e+00 + -3.4516002486215056e+00 -1.7100897004333504e-01 -6.4674606102412309e+00 + -3.4571349063519481e+00 -4.5062307162084503e-01 -6.8452897974853242e+00 + -3.4883683276440056e+00 -6.8027267128154367e-01 -7.2114876593168153e+00 + id 13518 + loc 7.8200548887252808e-01 3.5380354523658752e-01 415 + blend 0.0000000000000000e+00 + interp 5.4806067746408282e-01:3.9471402333636257e-01:2.5680237074878765e-03:5.4805519685730819e-01:6.6323714469852324e-01:4.3910659279920700e-01:9.9638821312418724e-01:3.6461891867422180e-01:1.4938352053467303e+00:3.7929395924950660e-01:2.1113125166432738e+00:2.7983045290070768e-01:2.9968011512406809e+00 + CVs 20 + -2.4565492319834814e-01 1.5091673220211443e-01 1.4531117685661857e-02 + -4.5087816481576504e-01 2.6476938582488208e-01 4.8427497456877439e-02 + -6.4902588066959743e-01 3.7089879980656187e-01 7.4527542344048125e-02 + -8.5276433657155293e-01 4.8101118294532702e-01 7.6786967754710223e-02 + -1.0599060197252692e+00 5.9093425049584003e-01 5.1391790808818671e-02 + -1.2661291986084036e+00 6.9609551109186774e-01 -5.1579780331291736e-03 + -1.4646676059957522e+00 7.9241202236804131e-01 -9.6179150571165883e-02 + -1.6479395543186319e+00 8.7651631259682949e-01 -2.2221172727967092e-01 + -1.8092597168628544e+00 9.4584367035092831e-01 -3.7919193170238852e-01 + -1.9428294085444371e+00 9.9934534665518371e-01 -5.6088161768641465e-01 + -2.0450452504389407e+00 1.0398540562815795e+00 -7.6834405599809363e-01 + -2.1241733960057045e+00 1.0733421273157684e+00 -1.0199256465059781e+00 + -2.2173320317072251e+00 1.0973752673700068e+00 -1.3334600762768278e+00 + -2.3723989455939840e+00 1.0932012697074809e+00 -1.6795815674942118e+00 + -2.5944411616725676e+00 1.0474601932076499e+00 -2.0049943592772963e+00 + -2.8714076553000765e+00 9.5892033916783848e-01 -2.2934348371355577e+00 + -3.2040500017104798e+00 8.2394768497440984e-01 -2.5389506702545064e+00 + -3.5761255899776829e+00 6.4621042266368978e-01 -2.7203436448227789e+00 + -3.7694891540885580e+00 5.1927815989874704e-01 -2.8215084369638106e+00 + id 13519 + loc 4.3902066349983215e-01 5.1330590248107910e-01 373 + blend 0.0000000000000000e+00 + interp 4.5399175385776575e-01:3.9880931773947448e-01:3.5420339058794714e-02:3.3223953110724952e-01:8.3442362258348024e-01:3.3073406245418951e-01:1.5223034966340609e+00:4.5398721394022717e-01:2.1163861794112742e+00:3.2183863862067108e-01:2.9671914805366870e+00:2.8814006997357755e-01:3.5579863969291861e+00 + CVs 20 + -3.2259410255458809e-01 4.9849322214222214e-01 -8.6557652490415943e-02 + -5.8343373491858319e-01 9.4087257882914699e-01 -2.3005588205626148e-01 + -7.8555777360195855e-01 1.3259379750695512e+00 -4.1275926523082707e-01 + -9.2650917671042565e-01 1.6551927302053213e+00 -6.2017915789217193e-01 + -1.0090207910658313e+00 1.9286640382928841e+00 -8.4111116822559173e-01 + -1.0522059882726531e+00 2.1349436849926842e+00 -1.0609847195808495e+00 + -1.0795561123506781e+00 2.2588972370878895e+00 -1.2630171782584203e+00 + -1.1077468455771653e+00 2.3133352336515696e+00 -1.4464117614494827e+00 + -1.1494784532387661e+00 2.3240410621321792e+00 -1.6311686091028310e+00 + -1.2080132838452351e+00 2.3027011021145207e+00 -1.8258796228628369e+00 + -1.2715269406581875e+00 2.2564004965309103e+00 -2.0121240016011859e+00 + -1.3231872305095298e+00 2.1983631701334283e+00 -2.1571610529328042e+00 + -1.3693914438579986e+00 2.1273856858620954e+00 -2.2787464906582158e+00 + -1.4484916295319177e+00 1.9755831269044906e+00 -2.4540545728720664e+00 + -1.6173802605209564e+00 1.6938400458170308e+00 -2.7012645559770485e+00 + -1.9377903892174546e+00 1.3494866019010701e+00 -2.9769407788220650e+00 + -2.4309078666574528e+00 1.0603856921104264e+00 -3.2228478650087320e+00 + -3.0377784170794540e+00 9.1551041443768844e-01 -3.3808015327388965e+00 + -3.6033226484174810e+00 8.5240211675685229e-01 -3.4722757338262653e+00 + id 13520 + loc 3.4804967045783997e-01 8.9937371015548706e-01 374 + blend 0.0000000000000000e+00 + interp 4.5429161410504970e-01:3.5820870286853751e-01:7.5569293039660090e-01:4.5428707118890865e-01:1.1200172979548511e+00:3.5768187411814062e-01:1.9535600140362468e+00:2.7684988279944661e-01:2.5318758804127848e+00:3.8699080486240628e-01:3.0245669307304901e+00:3.2803352194294383e-01:3.9967303443484767e+00 + CVs 20 + -6.4396184224912811e-01 4.1011857953750430e-01 -1.8256534040843969e-01 + -1.2009953345019928e+00 7.2121617432172358e-01 -2.7172984577503223e-01 + -1.7577059864022875e+00 9.7081373435454932e-01 -2.9674837873210336e-01 + -2.3440237135474971e+00 1.1949524132984939e+00 -2.9150551880448783e-01 + -2.9553031852725926e+00 1.4034184442020994e+00 -2.9611490021046827e-01 + -3.5949193142576998e+00 1.5808653339155714e+00 -3.5111723673161366e-01 + -4.2539382313122180e+00 1.6943079264656347e+00 -4.8324403104592095e-01 + -4.9029919270260036e+00 1.7169009189452138e+00 -6.9177209779760007e-01 + -5.5097340629906384e+00 1.6398418952494618e+00 -9.4985086676247543e-01 + -6.0517545762013132e+00 1.4698091122182475e+00 -1.2166160213461588e+00 + -6.5191803477895673e+00 1.2260133845636370e+00 -1.4515513748413496e+00 + -6.9113905413055781e+00 9.3713378564894079e-01 -1.6317731916749454e+00 + -7.2374728154981334e+00 6.3849365047457418e-01 -1.7553320258022813e+00 + -7.5106840545422511e+00 3.6312208315617189e-01 -1.8312276462726085e+00 + -7.7307766820666650e+00 1.2934491349662025e-01 -1.8637526116239651e+00 + -7.8743445833198678e+00 -5.1616219408271657e-02 -1.8556353509015868e+00 + -7.9075726180000103e+00 -1.7187454635848276e-01 -1.8330337278938937e+00 + -7.8620650600803206e+00 -2.6388288592331000e-01 -1.8277869775922810e+00 + -7.9955104824125947e+00 -3.9933403588523442e-01 -1.7767000559968968e+00 + id 13521 + loc 1.5828710794448853e-01 8.3591330051422119e-01 395 + blend 0.0000000000000000e+00 + interp 5.5251798593709767e-01:3.6598963666147111e-01:7.1768630670425160e-01:4.2207843462468719e-01:1.2386753911774637e+00:5.5251246075723837e-01:1.9903744283045834e+00:3.6623697065915117e-01:2.3962480492299401e+00:3.9237885908072784e-01:3.1233745481668276e+00:2.8636628654191715e-01:3.7402815890392502e+00 + CVs 20 + 4.1426551802129302e-01 2.3718573919196057e-01 -1.7643560865007313e-01 + 7.5071068796987017e-01 4.0064686206648681e-01 -3.2862279210012824e-01 + 1.0664731181681995e+00 5.2592874211209062e-01 -4.7332555847764546e-01 + 1.3967779526857134e+00 6.3424792461853263e-01 -6.1972001204618654e-01 + 1.7455681917021943e+00 7.2076974727264220e-01 -7.6903046438311096e-01 + 2.1171201133104662e+00 7.7899051651001405e-01 -9.2430426405157762e-01 + 2.5131437170911295e+00 8.0226265791264817e-01 -1.0921121628532406e+00 + 2.9317146141515029e+00 7.8165866596649258e-01 -1.2790630093929982e+00 + 3.3667572985340950e+00 7.0154583242778235e-01 -1.4863512716718881e+00 + 3.8018259620287633e+00 5.4224331817512450e-01 -1.7127267806945934e+00 + 4.2040075602858398e+00 2.8818872970704601e-01 -1.9598857104650067e+00 + 4.5377771734774468e+00 -6.4896903376127302e-02 -2.2258831455012089e+00 + 4.7867052158086443e+00 -5.0919616896522735e-01 -2.4980953848103011e+00 + 4.9494344713969047e+00 -1.0272409527383268e+00 -2.7605818096159176e+00 + 5.0245424952741029e+00 -1.5942408807370847e+00 -3.0039329348745003e+00 + 5.0104813629652654e+00 -2.1830786364504728e+00 -3.2169064003065495e+00 + 4.9128239384364161e+00 -2.7703563738816528e+00 -3.3785007098480899e+00 + 4.7545974152786652e+00 -3.3387301081797944e+00 -3.4805442134458136e+00 + 4.7272815246237725e+00 -3.9402997261844392e+00 -3.6559278876794084e+00 + id 13522 + loc 7.5420635938644409e-01 1.8608336150646210e-01 399 + blend 0.0000000000000000e+00 + interp 3.9627605639543384e-01:3.2517266233030795e-01:5.9199208645021817e-01:3.9627209363486993e-01:1.0307900173966340e+00:2.8226602585241339e-01:2.0007803995786935e+00:2.9071071078479849e-01:2.8715952526795423e+00:3.5451914410516966e-01:3.6433164288018798e+00 + CVs 20 + 2.0405170956513113e-01 2.7185353326458145e-01 2.3644300163796156e-01 + 3.6938789809117584e-01 5.1232801585596999e-01 4.5488724507646017e-01 + 4.9742115356206179e-01 7.2492437215785799e-01 6.8695531897706064e-01 + 5.9435460520703609e-01 9.1504819253969250e-01 9.4720550467627196e-01 + 6.7010917929833114e-01 1.0871867839481326e+00 1.2370009813140896e+00 + 7.3412618431597387e-01 1.2427619045510143e+00 1.5562139183939128e+00 + 7.9292125509030864e-01 1.3784884191734001e+00 1.9063935965361551e+00 + 8.5421106343303943e-01 1.4844174033178676e+00 2.2872741829508114e+00 + 9.2649529543034970e-01 1.5432517856646080e+00 2.6916044885604835e+00 + 1.0141629554571434e+00 1.5342729487176254e+00 3.1005288694930604e+00 + 1.1145637437573428e+00 1.4353457692186060e+00 3.4866077963986140e+00 + 1.2238907011217899e+00 1.2244833016427714e+00 3.8232777083855809e+00 + 1.3433002645205214e+00 8.9690496166760147e-01 4.0921212855865106e+00 + 1.4857007222586986e+00 4.6653328395378635e-01 4.2979700043426217e+00 + 1.6750290614068670e+00 -3.4057364797380529e-02 4.4846962179782572e+00 + 1.9068154656672465e+00 -5.2813404283077992e-01 4.7111901121937683e+00 + 2.1173934268232255e+00 -9.2969164432508156e-01 5.0146489733839328e+00 + 2.2450853331614025e+00 -1.2092404991351444e+00 5.4149093983808658e+00 + 2.3468053967233495e+00 -1.4356815330361199e+00 5.8734676982083229e+00 + id 13523 + loc 6.5184277296066284e-01 4.2902949452400208e-01 393 + blend 0.0000000000000000e+00 + interp 4.6199811440592747e-01:4.1032556132088027e-01:9.5125075174097629e-02:4.6199349442478344e-01:6.6278155588455578e-01:3.0857610442706945e-01:1.2746952488329311e+00:2.9646600167152198e-01:2.3402273331197114e+00:4.2670054376411903e-01:2.9951140979772206e+00:3.8091127339147468e-01:3.8220482601108547e+00 + CVs 20 + 9.1580285624463409e-02 2.7676947264044627e-01 2.2952406523352251e-01 + 1.9977334758470475e-01 5.6964338510383405e-01 4.1620292873884163e-01 + 3.0098875613756149e-01 8.7956379746383240e-01 5.4336193726242132e-01 + 3.9249804272297173e-01 1.2170296145065913e+00 6.0986672667425457e-01 + 4.9521915116788034e-01 1.5824293421047317e+00 6.4529647461919493e-01 + 6.2663247137027678e-01 1.9675691843574568e+00 6.9859857523742719e-01 + 7.7728058180692161e-01 2.3721878617833316e+00 8.1529795714679565e-01 + 9.2371168901719025e-01 2.7949644958373643e+00 1.0302953021230719e+00 + 1.0611599758175203e+00 3.2167342970698094e+00 1.3595304830679120e+00 + 1.2054381909738938e+00 3.6095831934568920e+00 1.8035620459841355e+00 + 1.3822323008263266e+00 3.9504375628025032e+00 2.3532305976754215e+00 + 1.6226797594720876e+00 4.2193203316301444e+00 3.0002623169638101e+00 + 1.9443956159828382e+00 4.3791532010541347e+00 3.7420429959222004e+00 + 2.3400898681660278e+00 4.3756759242436409e+00 4.5672973463209203e+00 + 2.7791360928634052e+00 4.1500614542968890e+00 5.4101172010806042e+00 + 3.1911142189458213e+00 3.7190745834135743e+00 6.1136306396507774e+00 + 3.5266802426860604e+00 3.2153044102299817e+00 6.5754302739419348e+00 + 3.8603729966394331e+00 2.7884599879485674e+00 6.7593038139666337e+00 + 4.3304572927446419e+00 2.6611170372469211e+00 6.4989984841769282e+00 + id 13524 + loc 4.1839689016342163e-01 9.9686361849308014e-02 412 + blend 0.0000000000000000e+00 + interp 4.0350029592842279e-01:3.1126435008942471e-01:2.4388493306246750e-01:3.5850888916119328e-01:1.1823066038630008e+00:3.2202173090109615e-01:1.9999870541140083e+00:2.6878985709497805e-01:2.9642991661928533e+00:4.0349626092546353e-01:3.1588318344480957e+00:3.6039300982790118e-01:3.9709638651445731e+00 + CVs 20 + -8.7869231315632207e-02 8.5729086311296693e-02 -5.8264826545379478e-01 + -1.6606640260581679e-01 9.7838844851406759e-02 -1.0348875346965676e+00 + -2.2980169888068322e-01 8.7855625706212082e-02 -1.4405277541860455e+00 + -2.8782511031773478e-01 7.2528165827188684e-02 -1.8433918461114012e+00 + -3.3917974519317828e-01 4.9074272828780519e-02 -2.2379944331260093e+00 + -3.8148839683638797e-01 1.6824210700454589e-02 -2.6192268266400758e+00 + -4.1247577571797028e-01 -2.3626989348783711e-02 -2.9837102291548359e+00 + -4.3182482438925590e-01 -7.1797908620590656e-02 -3.3302124064716079e+00 + -4.3975335529566933e-01 -1.2659327510415586e-01 -3.6583670138535327e+00 + -4.3543469436711901e-01 -1.8554637431170473e-01 -3.9676782297758360e+00 + -4.2231804598425099e-01 -2.5006022189278365e-01 -4.2577756689579953e+00 + -4.2138450694324381e-01 -3.3581670844157441e-01 -4.5292736921546464e+00 + -4.6675565738695329e-01 -4.6285888979904155e-01 -4.7796652717356256e+00 + -5.6698999131967964e-01 -6.2363730008897411e-01 -5.0017519577390450e+00 + -7.0368517906163619e-01 -7.9723394130686986e-01 -5.1988330539461023e+00 + -8.6819348739415680e-01 -9.7530931969129631e-01 -5.3734063155064815e+00 + -1.0625954726221973e+00 -1.1510475407615102e+00 -5.5164734908792283e+00 + -1.2823529504489066e+00 -1.3133682589025863e+00 -5.6204204591448370e+00 + -1.4742626306049185e+00 -1.4736143718311467e+00 -5.7665864558266984e+00 + id 13525 + loc 4.8218482732772827e-01 1.9330023229122162e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5442979457900664e-01:2.5671492541639807e-01:3.2855427331689147e-01:3.5088389889078836e-01:1.1067842539611383e+00:3.0033570371229923e-01:1.8501676623028436e+00:2.6012339907152859e-01:2.4030670563085881e+00:3.0856298531283743e-01:3.0432482736236559e+00:3.5442625028106084e-01:3.7074789467358471e+00 + CVs 20 + 4.6516657715284482e-01 4.5539063148102488e-01 -7.7072934718731112e-02 + 7.2674350170532664e-01 8.0150418611972896e-01 -1.5453323642899136e-01 + 9.3160442620822315e-01 1.1205431620183035e+00 -2.4404517739051385e-01 + 1.1358623095903804e+00 1.4428247430153185e+00 -3.5167459651980942e-01 + 1.3266850634318894e+00 1.7561061679358985e+00 -4.8169263134178925e-01 + 1.4900924060906990e+00 2.0454914702913127e+00 -6.3437255649815427e-01 + 1.6130591719695024e+00 2.2963833314945168e+00 -8.0575841000712922e-01 + 1.6891029833335431e+00 2.4989215415461619e+00 -9.8968107010373729e-01 + 1.7188418665961851e+00 2.6490306649087261e+00 -1.1805462357570642e+00 + 1.7046114564756869e+00 2.7448619184857277e+00 -1.3740827778137139e+00 + 1.6474596443152660e+00 2.7837764863219672e+00 -1.5627813961492427e+00 + 1.5510186347973067e+00 2.7666947537810538e+00 -1.7354413207757986e+00 + 1.4216945482779937e+00 2.6989418290158627e+00 -1.8855255168900651e+00 + 1.2647650555242915e+00 2.5843979410255833e+00 -2.0128492212897235e+00 + 1.0775793095287558e+00 2.4175766256151245e+00 -2.1251683346332020e+00 + 8.4585781759323941e-01 2.1701745019087921e+00 -2.2418830570544488e+00 + 5.9375831632336662e-01 1.7964407905376751e+00 -2.3782615731344219e+00 + 4.4305136361197817e-01 1.3376629451375901e+00 -2.5031660668457110e+00 + 4.9573086396181831e-01 1.0308586649133662e+00 -2.5277751743454240e+00 + id 13526 + loc 5.0775855779647827e-01 6.2788087129592896e-01 382 + blend 0.0000000000000000e+00 + interp 4.8732132315053911e-01:3.8306994984841819e-01:7.4061200020069107e-02:3.7246540257386568e-01:7.9091396758204335e-01:3.5863583825041018e-01:1.1391217134070630e+00:4.8731644993730761e-01:1.9013861691424103e+00:4.1107173921283607e-01:2.3835212548562357e+00:3.4513053128407517e-01:3.2015772603203727e+00 + CVs 20 + 8.5781058943451316e-01 1.5734058012093941e-01 -5.5322012287495448e-01 + 1.4235905582624548e+00 1.5844978914505672e-01 -9.2133379030409235e-01 + 1.9231117762876668e+00 8.5665828661552479e-02 -1.2406258899124094e+00 + 2.4550357419825355e+00 -2.0371690406238985e-02 -1.5629887593134251e+00 + 3.0105334096859666e+00 -1.5304089086314643e-01 -1.8912896327968123e+00 + 3.5777200466174794e+00 -3.0400725632676184e-01 -2.2340630911251829e+00 + 4.1402556283272105e+00 -4.6438909575950482e-01 -2.6024325272690190e+00 + 4.6817235728009008e+00 -6.3309380377282243e-01 -3.0032866265154858e+00 + 5.2009107521186095e+00 -8.3252194570372628e-01 -3.4411237686769289e+00 + 5.7003944109802145e+00 -1.1047957395305299e+00 -3.9135275700938230e+00 + 6.1634564590753751e+00 -1.4779921483195984e+00 -4.4206756256455346e+00 + 6.5512671546476939e+00 -1.9605864931458321e+00 -4.9546413186278890e+00 + 6.8306288692604626e+00 -2.5393179029820123e+00 -5.4952465198242191e+00 + 6.9849734030598158e+00 -3.1890950908530229e+00 -6.0194199771649437e+00 + 7.0085240332877188e+00 -3.8779749142003146e+00 -6.5041436371398182e+00 + 6.9065146321238071e+00 -4.5710478987403595e+00 -6.9203564081328484e+00 + 6.7007338533906626e+00 -5.2364662670277227e+00 -7.2335584714856127e+00 + 6.4353394769175560e+00 -5.8453298023461429e+00 -7.4247036282224324e+00 + 6.2369529761224261e+00 -6.3402162220178457e+00 -7.6047995704404592e+00 + id 13527 + loc 5.3517901897430420e-01 9.2755359411239624e-01 375 + blend 0.0000000000000000e+00 + interp 5.0658045904276572e-01:2.4682522107821603e-01:1.2254421032501073e-02:4.9206645667254162e-01:9.9783068044654766e-01:5.0657539323817535e-01:1.2491814013827303e+00:4.3934265332188482e-01:1.8567106651657359e+00:3.1657894908605450e-01:2.0099063008918279e+00:3.8811209192555823e-01:2.5630656516515926e+00:3.8457350141459828e-01:3.0385271710568320e+00 + CVs 20 + -3.6470363063180378e-01 3.4993299741306205e-01 -1.1982910386511336e-01 + -7.2663134314502842e-01 6.0263572631662399e-01 -1.9236169966899636e-01 + -1.1338260557661650e+00 7.3301138382208020e-01 -2.3075203284713741e-01 + -1.6079229467162768e+00 7.7595179363346445e-01 -2.4338072644797382e-01 + -2.1308786100173505e+00 8.1212283094940585e-01 -2.4092264957212556e-01 + -2.6784419150247807e+00 9.0518637105886857e-01 -2.6106903770553436e-01 + -3.2228424925920995e+00 1.0771203201603354e+00 -3.5953694784292189e-01 + -3.7254038260278541e+00 1.3265446689998979e+00 -5.7222304215142317e-01 + -4.1422000613099330e+00 1.6382982863149012e+00 -8.9972761768694465e-01 + -4.4478898073291973e+00 1.9764925994205997e+00 -1.3221276186245219e+00 + -4.6479461605889307e+00 2.2883310408964044e+00 -1.8200217455188847e+00 + -4.7552441749281380e+00 2.5115228796389726e+00 -2.3762797600023724e+00 + -4.7720595061534858e+00 2.5845075977644472e+00 -2.9574460599000467e+00 + -4.6971932367775961e+00 2.4778321119933260e+00 -3.5050015693794108e+00 + -4.5465549864206896e+00 2.2062847089516868e+00 -3.9446195127384489e+00 + -4.4019909875912795e+00 1.8230379457050128e+00 -4.2074697594913166e+00 + -4.4104113767890283e+00 1.4347889280991346e+00 -4.2568704624256419e+00 + -4.5837782593230791e+00 1.1674985080889053e+00 -4.1552450797737759e+00 + -4.7314793128404986e+00 7.0157508001095836e-01 -4.1549816463894151e+00 + id 13528 + loc 4.5075398683547974e-01 5.4061937332153320e-01 1068 + blend 0.0000000000000000e+00 + interp 3.1579990878028258e-01:2.8050467901618975e-01:3.1871209336957362e-01:3.0681944763286922e-01:1.3497771850832838e+00:2.7610057514304903e-01:2.1368313502073621e+00:3.1579675078119479e-01:3.2033062499240987e+00 + CVs 20 + 7.5719059384791260e-02 3.3147268325631846e-01 -1.5861937514368793e-01 + 1.7443274986107887e-01 6.8358768681474247e-01 -3.4222204096088560e-01 + 2.8575136069576096e-01 1.0506751219797406e+00 -5.3953287629998159e-01 + 4.0676199787123080e-01 1.4255247314636958e+00 -7.5336988176510167e-01 + 5.4049366499080209e-01 1.7966109982219201e+00 -9.9668542972029550e-01 + 6.9412120102444652e-01 2.1391551822100277e+00 -1.2835360499410555e+00 + 8.7857451761577043e-01 2.4152333197224913e+00 -1.6174183883649191e+00 + 1.1039230891919691e+00 2.5868605643863622e+00 -1.9777602551719631e+00 + 1.3715840430199115e+00 2.6319022882959824e+00 -2.3237110889840058e+00 + 1.6694278420166546e+00 2.5612512439459501e+00 -2.6167209224150003e+00 + 1.9833008456984542e+00 2.4181194324960043e+00 -2.8452957821632010e+00 + 2.3082027822118052e+00 2.2492002369284050e+00 -3.0257688973604746e+00 + 2.6412622728235622e+00 2.0700585992021341e+00 -3.1912500115802542e+00 + 2.9751669856002536e+00 1.8559064533509777e+00 -3.3896899701233201e+00 + 3.2893662536181627e+00 1.5788974143396142e+00 -3.6729586780478227e+00 + 3.5387808246837582e+00 1.2490373062833582e+00 -4.0804801519194385e+00 + 3.6686017800859223e+00 9.1896527156834584e-01 -4.6077163702238257e+00 + 3.6881202414978818e+00 6.6291075419172185e-01 -5.1323973629839728e+00 + 3.7438185457923665e+00 5.4861891828185283e-01 -5.3654578195952487e+00 + id 13529 + loc 1.4421769976615906e-01 2.0091997459530830e-02 403 + blend 0.0000000000000000e+00 + interp 4.2261965004257501e-01:3.6122764098776933e-01:6.7650646710834739e-01:2.6814234608523674e-01:1.3124624685122348e+00:4.2261542384607459e-01:1.9935909167968786e+00:3.0198586603825206e-01:2.4295928450201836e+00:3.2121817133545533e-01:3.1307565887532420e+00:3.4418042133322269e-01:3.9942369520807031e+00 + CVs 20 + -1.2385815339655840e-01 3.5195381028155565e-01 -2.4823435010747255e-02 + -2.7770911472509535e-01 7.0755861576769452e-01 -2.1790682583342158e-02 + -4.4169052356243288e-01 1.0705809148515801e+00 -3.3211841592416524e-03 + -6.2254406557983699e-01 1.4360840895318205e+00 3.0693752425395626e-02 + -8.3149709647743830e-01 1.7874491218510609e+00 8.9628566693897516e-02 + -1.0640723360253346e+00 2.1039226840204330e+00 1.9136569948691273e-01 + -1.3017334849296072e+00 2.3645810376074015e+00 3.5550443876766757e-01 + -1.5190830959380646e+00 2.5469848018578221e+00 5.8802827186620743e-01 + -1.6891794665481537e+00 2.6318123922082419e+00 8.7190361468228139e-01 + -1.7996733057043102e+00 2.6180904866974624e+00 1.1766442003509305e+00 + -1.8615558825336000e+00 2.5170306462844030e+00 1.4817304815498911e+00 + -1.8987836957041215e+00 2.3334670712103178e+00 1.7792323601838023e+00 + -1.9290391091701953e+00 2.0702333036336453e+00 2.0540416087885425e+00 + -1.9499419537459757e+00 1.7463587179507216e+00 2.2858130302344568e+00 + -1.9660647071217465e+00 1.3760011325027099e+00 2.4895047406066899e+00 + -2.0360719302740229e+00 9.3030966598150910e-01 2.7281281998817115e+00 + -2.2670694502850965e+00 3.9575686817058120e-01 3.0379363392578260e+00 + -2.6632373014278805e+00 -1.3881671900453774e-01 3.3285631215814049e+00 + -2.9153323860565283e+00 -5.9589781258442742e-01 3.4397877571650053e+00 + id 13530 + loc 8.9600241184234619e-01 5.3095912933349609e-01 380 + blend 0.0000000000000000e+00 + interp 3.8876900801192160e-01:3.8876512032184152e-01:7.6922254317324246e-06:2.6374336858555197e-01:5.6682861462452450e-01:2.7629235375347350e-01:1.4080849090934309e+00:3.8393969833972724e-01:1.9998097942600557e+00:2.9403199353238602e-01:2.5397347409375151e+00:2.5110289891942816e-01:3.4484419023112931e+00 + CVs 20 + -4.9081895623993521e-01 2.3838417651975544e-01 -6.9308692243202574e-01 + -9.2917168334243638e-01 3.9220357858280097e-01 -1.1619581586070209e+00 + -1.3674574922302773e+00 5.2460965221377420e-01 -1.5809271830185525e+00 + -1.8297006741077397e+00 6.5454865543820440e-01 -2.0196488112871771e+00 + -2.3097926584907924e+00 7.6048693795214684e-01 -2.4822810660470846e+00 + -2.7999934721406730e+00 8.1221634563611567e-01 -2.9704011831341131e+00 + -3.2888156663208377e+00 7.7586167025160235e-01 -3.4821705353689589e+00 + -3.7541561606745222e+00 6.2384448947633575e-01 -4.0054112861804541e+00 + -4.1661257093846960e+00 3.4845499804017055e-01 -4.5100827252429667e+00 + -4.5026442379655869e+00 -3.2438190835875513e-02 -4.9589572002299782e+00 + -4.7581467020169015e+00 -4.9037724774372160e-01 -5.3294206012160554e+00 + -4.9320887717807986e+00 -9.9997251847583524e-01 -5.6102765214806221e+00 + -5.0238509803995139e+00 -1.5384644155379874e+00 -5.7972872029715745e+00 + -5.0446380185395618e+00 -2.1015290278494376e+00 -5.9149415282637969e+00 + -5.0197441562558458e+00 -2.7031106593781740e+00 -6.0130820652116181e+00 + -4.9910676680986032e+00 -3.3191322649109480e+00 -6.1283984725784357e+00 + -5.0147386118785864e+00 -3.8838412154279407e+00 -6.2542765347913880e+00 + -5.1162507697958377e+00 -4.3673393860201584e+00 -6.3598183167113236e+00 + -5.1892557669867614e+00 -4.8888154885264932e+00 -6.4775842867239248e+00 + id 13531 + loc 5.7691400870680809e-03 1.3956414163112640e-01 396 + blend 0.0000000000000000e+00 + interp 4.3866915270307527e-01:3.0819699619850827e-01:7.4616404127190172e-03:3.3126681680537673e-01:9.6012104164313627e-01:3.3830835178225832e-01:1.9314373977825283e+00:4.3866476601154825e-01:2.3699829436050481e+00:3.1534335883210662e-01:2.9638379510294741e+00 + CVs 20 + -2.2732251314445384e-01 2.1151124638036714e-01 -5.5349369827616057e-01 + -4.1426105430587923e-01 3.3771486607064205e-01 -9.9035561185507748e-01 + -5.7414933157203607e-01 4.4090447621359707e-01 -1.4087799998469268e+00 + -7.0829407140128131e-01 5.5218824264103650e-01 -1.8566678903540592e+00 + -8.1230257937342143e-01 6.6586247999292469e-01 -2.3322496804112327e+00 + -8.8828170562597886e-01 7.7495921205665175e-01 -2.8334691379882697e+00 + -9.4399203431781631e-01 8.7115244690151206e-01 -3.3601534561365911e+00 + -9.8938829431751485e-01 9.4110240589755123e-01 -3.9147950713583772e+00 + -1.0361906339618907e+00 9.6471413321996691e-01 -4.5013193891407637e+00 + -1.1014596384652546e+00 9.1555343403556400e-01 -5.1197387458344217e+00 + -1.2031071712140569e+00 7.6686081959146746e-01 -5.7524338615167414e+00 + -1.3436838019994115e+00 5.0991426422403219e-01 -6.3596525512741371e+00 + -1.5091902910748538e+00 1.5830043893537260e-01 -6.9050086110284594e+00 + -1.6882347632668577e+00 -2.7223769695302247e-01 -7.3713048119897664e+00 + -1.8768040331047258e+00 -7.6949173138088156e-01 -7.7472727634513285e+00 + -2.0684574701901357e+00 -1.3190370787161099e+00 -8.0204870040054903e+00 + -2.2487262480406729e+00 -1.9009502864819279e+00 -8.1813846644129207e+00 + -2.4026178866519050e+00 -2.4826609573019320e+00 -8.2303808184666991e+00 + -2.5149646179078684e+00 -2.8796095211475321e+00 -8.2226990497537269e+00 + id 13532 + loc 5.0579053163528442e-01 4.1120257228612900e-02 402 + blend 0.0000000000000000e+00 + interp 4.4315461044510251e-01:2.8923288458054752e-01:7.7571111366795131e-01:3.2359817169276800e-01:1.9004051772354660e+00:3.8817752594589416e-01:2.3748253788528295e+00:4.4315017889899810e-01:2.9877608308196244e+00:2.8456448472882023e-01:3.7726357876051089e+00 + CVs 20 + 3.4708101948532488e-01 3.1805179104890452e-01 6.1794713949732800e-02 + 6.6226350589787797e-01 6.6096539141482702e-01 1.8475070687991724e-01 + 9.4895921201282551e-01 9.9253619594249287e-01 3.4822386355437251e-01 + 1.2180420067456599e+00 1.2796580877345118e+00 5.2655578319530938e-01 + 1.4818743944142656e+00 1.5055310413952010e+00 7.0183864161750098e-01 + 1.7501062594103347e+00 1.6720078560392841e+00 8.7235142532643439e-01 + 2.0312540729738262e+00 1.7863761666222577e+00 1.0477952655311937e+00 + 2.3294445455982125e+00 1.8500990671176363e+00 1.2392451859350746e+00 + 2.6351812872104867e+00 1.8618560542431890e+00 1.4527861819502004e+00 + 2.9322938974543238e+00 1.8231701620208405e+00 1.6880592281414841e+00 + 3.1948577444998589e+00 1.7255446253970825e+00 1.9396311269703230e+00 + 3.3688202463123420e+00 1.5514320638909931e+00 2.1946536992041672e+00 + 3.4277665637061276e+00 1.2950194433269469e+00 2.4354991399690133e+00 + 3.4236792291112508e+00 9.4917388868579122e-01 2.6531927487208806e+00 + 3.4574702135369688e+00 5.2630365223547138e-01 2.8387513311094112e+00 + 3.6165349173649086e+00 9.7383582644209765e-02 2.9686310737474875e+00 + 3.9105575708294138e+00 -2.5918471986121183e-01 3.0374031517841305e+00 + 4.2878076078091096e+00 -5.2109732104022144e-01 3.0979671368989283e+00 + 4.6456757974424958e+00 -6.7586488913094889e-01 3.3133649663593143e+00 + id 13533 + loc 7.2495901584625244e-01 6.6027128696441650e-01 378 + blend 0.0000000000000000e+00 + interp 4.2552857002041744e-01:3.9085230471480625e-01:1.7873658426532246e-01:2.7251107982823225e-01:1.0325679170432596e+00:2.6877279762144296e-01:1.9855494002922096e+00:3.5502413505190233e-01:2.5853644367750501e+00:4.2552431473471725e-01:3.2761316088142127e+00:2.8176709430713498e-01:3.8807604914656673e+00 + CVs 20 + 4.5055949715316135e-01 3.5524995849234697e-01 1.0729112098607910e-01 + 8.6236100338990118e-01 6.5121428182697172e-01 2.0187021082714474e-01 + 1.2879539812873833e+00 9.0526981113854055e-01 2.7807561346353260e-01 + 1.7346098153658909e+00 1.1326247135762861e+00 3.3914528074795036e-01 + 2.1838519795138236e+00 1.3395644113703495e+00 3.9508789492766683e-01 + 2.6305755233805619e+00 1.5206686741928270e+00 4.5674190379158902e-01 + 3.0783732251449916e+00 1.6604469305265201e+00 5.3229749150111416e-01 + 3.5244884858062484e+00 1.7462887627139547e+00 6.2747167603608200e-01 + 3.9592118727508652e+00 1.7753267856825723e+00 7.4144722727958867e-01 + 4.3716445717415144e+00 1.7527263130190096e+00 8.6476631815193905e-01 + 4.7504843348758685e+00 1.6896369251924241e+00 9.8385093514454613e-01 + 5.0911258457244148e+00 1.5992576442909316e+00 1.0886089797372156e+00 + 5.3969862254595018e+00 1.4755262672628793e+00 1.1789563242063288e+00 + 5.6635416538519330e+00 1.2802167941247284e+00 1.2520596516327724e+00 + 5.8787450851577043e+00 9.9124529504850489e-01 1.3058923606303998e+00 + 6.0396406438354928e+00 6.3853428626665432e-01 1.3673574936179882e+00 + 6.1579328495053804e+00 2.7303821809860462e-01 1.4677071483909949e+00 + 6.2949305541782721e+00 -7.2077529041592481e-02 1.5939595783294072e+00 + 6.5446893497638161e+00 -3.5674514293741089e-01 1.6883829175380654e+00 + id 13534 + loc 6.5341168642044067e-01 7.7115029096603394e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4754224892463623e-01:3.0740334764717453e-01:8.4455044689259695e-01:4.4753777350214702e-01:1.0356725121630515e+00:3.7549983663211112e-01:1.7701368308403411e+00:2.9084900655730295e-01:2.2003569331621939e+00:2.9102222568477881e-01:3.0038187641202381e+00:2.8851215919301526e-01:3.9818454122857245e+00 + CVs 20 + 2.4853645843340627e-01 3.0392423830377230e-01 -1.2229374476437627e-01 + 4.7061085895399990e-01 6.0682515295207584e-01 -2.6474666670752711e-01 + 6.7773662423181324e-01 8.9432279178631446e-01 -4.3795125174611893e-01 + 8.7207504600418118e-01 1.1532430175105355e+00 -6.4914082476089829e-01 + 1.0477431317663797e+00 1.3711428120257614e+00 -9.0064773173498103e-01 + 1.1960476428947031e+00 1.5375859769447699e+00 -1.1889888306338201e+00 + 1.3079901357773362e+00 1.6478385133087059e+00 -1.5021586411736398e+00 + 1.3778473914672564e+00 1.7044414420472540e+00 -1.8220867139423378e+00 + 1.4074459934883317e+00 1.7149873343242281e+00 -2.1328959845750961e+00 + 1.4077650365068646e+00 1.6859391116284557e+00 -2.4303641914363383e+00 + 1.3916136606702230e+00 1.6141866151646416e+00 -2.7212841235786223e+00 + 1.3673055015644136e+00 1.4851508287561395e+00 -3.0149421762717949e+00 + 1.3438690174936945e+00 1.2943147525621626e+00 -3.3042439802628771e+00 + 1.3451462743113480e+00 1.0932562786701456e+00 -3.5550477344518936e+00 + 1.3950032427512820e+00 9.9147416617511319e-01 -3.6967729180369688e+00 + 1.4661857026408758e+00 1.0129449337950185e+00 -3.6012242597425912e+00 + 1.4503745252125273e+00 9.3183945005442526e-01 -3.2745008364050427e+00 + 1.2317912088939094e+00 5.0059887028806949e-01 -2.9939268002679711e+00 + 1.3310332961594262e+00 6.1679495942524609e-01 -2.9378148265379807e+00 + id 13535 + loc 5.2034461498260498e-01 8.7317878007888794e-01 409 + blend 0.0000000000000000e+00 + interp 3.0394391218147043e-01:3.0394087274234866e-01:6.0881593329825801e-01:2.9353384432756335e-01:1.7130387467807262e+00:2.7499589232109267e-01:2.9782646941620592e+00:3.0104781643465417e-01:3.8367479307859496e+00 + CVs 20 + 5.2950660493934665e-01 1.1557050266243910e-01 -1.3619945417715587e-01 + 9.7727807456718230e-01 1.8539936919728756e-01 -2.7511923883898215e-01 + 1.4198551066377003e+00 2.4464221828034732e-01 -3.8859997988504835e-01 + 1.8809626589473423e+00 3.0160695759461986e-01 -4.6890365966558684e-01 + 2.3531535890116064e+00 3.4851594350841952e-01 -5.1860185726606811e-01 + 2.8300993247249626e+00 3.7784747533443475e-01 -5.4110934008878764e-01 + 3.3060216480044295e+00 3.7938330087950756e-01 -5.3963978505104004e-01 + 3.7747167391546554e+00 3.3802139068871306e-01 -5.1781378738800943e-01 + 4.2286606436785821e+00 2.3771303183624459e-01 -4.8329510107970108e-01 + 4.6548086033104292e+00 6.5421858768182961e-02 -4.5017841766465855e-01 + 5.0324822647820184e+00 -1.8376384557922609e-01 -4.3435260960422062e-01 + 5.3453415415896508e+00 -4.9960253979174940e-01 -4.4558655205643638e-01 + 5.5929826532171996e+00 -8.6319354507955781e-01 -4.8653307838807841e-01 + 5.7820644552798646e+00 -1.2589678840528271e+00 -5.5810807123665618e-01 + 5.9144006183564013e+00 -1.6753369897407357e+00 -6.5817585109521359e-01 + 5.9879219023148957e+00 -2.1027044356711997e+00 -7.7408038323381123e-01 + 6.0069429310162494e+00 -2.5347628877284936e+00 -8.8876442711066050e-01 + 5.9931163073059608e+00 -2.9669694023511806e+00 -1.0090895461003782e+00 + 6.1055418643111512e+00 -3.4033644243106025e+00 -1.1504587620645887e+00 + id 13536 + loc 1.7494958639144897e-01 1.1525651440024376e-02 415 + blend 0.0000000000000000e+00 + interp 4.7369498257242787e-01:2.4103588565499670e-01:3.0778691897818367e-01:3.9810754678257326e-01:1.0046059648369856e+00:2.0917328297958535e-01:1.8435142037277510e+00:4.7369024562260215e-01:2.8823553225228107e+00:4.1541997522439811e-01:3.1094404632215964e+00:3.7843618300658033e-01:3.8589990810192574e+00 + CVs 20 + -7.2005928832404795e-02 8.8839867851500665e-02 8.4273230764042219e-03 + -1.6820599711803005e-01 1.4967288010911092e-01 4.7341247236372092e-02 + -2.8587799849877826e-01 2.4227618619425118e-01 9.7398860862583772e-02 + -4.1294928225926297e-01 3.6812373769721657e-01 1.3343696317430687e-01 + -5.3837454016439534e-01 5.3483011290480975e-01 1.4878440640872284e-01 + -6.4687826610718457e-01 7.4488242074929889e-01 1.3814891944264465e-01 + -7.2204861137528253e-01 9.9064691716955688e-01 1.0071210688851298e-01 + -7.5447570605575820e-01 1.2516779889572152e+00 4.3418740720687146e-02 + -7.4463278392546728e-01 1.5095119892365183e+00 -2.3216918945617143e-02 + -6.8904301520190170e-01 1.7624977378632314e+00 -8.9572520805415168e-02 + -5.7603046759068011e-01 2.0136576724550528e+00 -1.4672703909527413e-01 + -4.0394253623451515e-01 2.2516286451642284e+00 -1.9008464920973989e-01 + -1.9205957694435938e-01 2.4564079448689906e+00 -2.2247774652418634e-01 + 3.7525575146397427e-02 2.6193642362307186e+00 -2.4888374857278428e-01 + 2.8038765785431075e-01 2.7464797911544672e+00 -2.7316757661555152e-01 + 5.4427156213219985e-01 2.8449886704438567e+00 -2.9836255938190537e-01 + 8.3520827755561178e-01 2.9161001297366296e+00 -3.2664133600937284e-01 + 1.1523583535233062e+00 2.9570582580475562e+00 -3.5641211057199507e-01 + 1.3894582253164041e+00 2.9726970139762607e+00 -3.3420539291963236e-01 + id 13537 + loc 1.2358006834983826e-01 1.2326563149690628e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5209893216875013e-01:3.8009630519024312e-01:6.4316977394816077e-01:2.7060181580232745e-01:1.0483104675270427e+00:4.5209441117942845e-01:1.6649332624084781e+00:4.0193157859262374e-01:2.1060755950523946e+00:3.5285014348894073e-01:2.9425977909224064e+00:4.3800864616853047e-01:3.2971075941509702e+00:2.8001382249931178e-01:3.9999557182116385e+00 + CVs 20 + -2.4890843995204590e-01 2.4137661333566085e-01 -2.2932350963530357e-02 + -4.6401667762807269e-01 5.0728294385912376e-01 -2.7818710779064781e-02 + -6.4867692602751248e-01 7.9438516131942227e-01 -1.6574102532387669e-02 + -8.2111394198612930e-01 1.0945591433845365e+00 -1.1803538873089381e-02 + -1.0089905327604485e+00 1.3875441703661200e+00 -5.3528773271823371e-02 + -1.2269518353507447e+00 1.6395252355399408e+00 -1.6807999615128688e-01 + -1.4654490539642939e+00 1.8145492084476134e+00 -3.5379965636912802e-01 + -1.6940483340889712e+00 1.8891110545139784e+00 -5.9428887114136242e-01 + -1.8713083990429140e+00 1.8612193282062250e+00 -8.6801139955683226e-01 + -1.9669670045364778e+00 1.7470981588067136e+00 -1.1455133584559780e+00 + -1.9858599516298925e+00 1.5703807153783096e+00 -1.3964922712414125e+00 + -1.9566657839983883e+00 1.3484868550307088e+00 -1.6060450492558955e+00 + -1.8958646387139633e+00 1.0926400820011852e+00 -1.7713317302492759e+00 + -1.7927507898531461e+00 8.2237052633434704e-01 -1.8790331792315589e+00 + -1.6441631456231154e+00 5.4706485692061979e-01 -1.9254375437267668e+00 + -1.4633273693719113e+00 2.3327283994568115e-01 -1.9693924613901252e+00 + -1.2665295146807498e+00 -1.2869815240425164e-01 -2.1374994288991807e+00 + -1.1281699418993274e+00 -3.9026551703133583e-01 -2.5236071327716494e+00 + -1.1303893863513934e+00 -4.5199018398783419e-01 -2.8980443840151491e+00 + id 13538 + loc 8.7353732669726014e-04 1.7974689602851868e-02 373 + blend 0.0000000000000000e+00 + interp 4.9865540857917234e-01:2.4707921503533720e-01:2.8796790059525723e-01:4.9865042202508658e-01:1.1575570204973462e+00:2.5759952852652634e-01:1.9215258781572531e+00:3.0447306748992259e-01:2.1306932400954772e+00:2.6069575393475458e-01:2.8541074039181726e+00:3.7756631396534013e-01:3.0961107536459078e+00:2.9640023144624944e-01:3.9653738061146662e+00 + CVs 20 + -1.1288105089113531e-01 6.9898689525854008e-01 4.5616038937205922e-01 + -2.9173125594908506e-01 1.3938858581250031e+00 8.7144460142284430e-01 + -5.6805763701095202e-01 2.0885675805819419e+00 1.2528395257066429e+00 + -9.3132466530227997e-01 2.7784211334832216e+00 1.5740278834888870e+00 + -1.3494261076626000e+00 3.4338803244260934e+00 1.6104694178542802e+00 + -1.8523687491115239e+00 3.9032222437566766e+00 1.2660125883822400e+00 + -2.3762844749697938e+00 4.0315794632697726e+00 6.3801942076973628e-01 + -2.8234210817589891e+00 3.7759953824035257e+00 -1.2161501529065188e-01 + -3.1324846874565404e+00 3.1790801925526937e+00 -8.9366306619610958e-01 + -3.2650282184946398e+00 2.3189223650487403e+00 -1.5946209470299344e+00 + -3.2110195826465171e+00 1.3103583565473871e+00 -2.1672509357432381e+00 + -2.9978386737721308e+00 2.8933122238462428e-01 -2.6077811109129900e+00 + -2.6501964279002999e+00 -6.2268721901855351e-01 -2.9668823158230397e+00 + -2.2203643028179707e+00 -1.3458876261085826e+00 -3.3072620140196465e+00 + -1.8225475820830275e+00 -1.8369688508995177e+00 -3.6890910035463449e+00 + -1.5473159178355058e+00 -2.1542361098484597e+00 -4.1930202297234764e+00 + -1.4769417081886742e+00 -2.3550116848569518e+00 -4.8680698183342876e+00 + -1.7820552949100139e+00 -2.4572198682904336e+00 -5.6966474689628175e+00 + -2.3571575620159608e+00 -2.5219207452293340e+00 -6.4840275285224713e+00 + id 13539 + loc 2.7372503280639648e-01 5.8523976802825928e-01 1080 + blend 0.0000000000000000e+00 + interp 3.6133886324868630e-01:3.6133524986005383e-01:3.2294064989246696e-03:2.7240740339565062e-01:8.2861753458789511e-01:3.2467787189385339e-01:1.3214667940345384e+00:3.0974646253906502e-01:1.9961323106846962e+00:2.6550728348502356e-01:2.9999465845995648e+00 + CVs 20 + -1.5859623240065124e-01 2.0949874716753086e-01 3.1076089810050278e-01 + -2.5217918670957667e-01 3.1684590510177407e-01 4.5059453216864925e-01 + -3.3192567209247142e-01 3.8663516276224935e-01 5.3620702593386638e-01 + -4.1763115168356829e-01 4.4644985712073054e-01 6.2367169027688429e-01 + -5.0695347737778484e-01 4.9621861340242612e-01 7.0918650445306830e-01 + -5.9805163343753187e-01 5.3655106533353381e-01 7.9041066615809696e-01 + -6.9008466558493775e-01 5.6855400124160860e-01 8.6634201273741351e-01 + -7.8331992632673830e-01 5.9345967580069425e-01 9.3656343462309488e-01 + -8.7925319970020221e-01 6.1183829503565423e-01 1.0005564484479632e+00 + -9.8073522607493246e-01 6.2285844526132328e-01 1.0571578471990404e+00 + -1.0916250939944614e+00 6.2423041475855012e-01 1.1042321738374694e+00 + -1.2159502648802281e+00 6.1288039969029628e-01 1.1388996531669620e+00 + -1.3564908857482014e+00 5.8622745440727386e-01 1.1591586032448751e+00 + -1.5132522833400996e+00 5.4322429884621581e-01 1.1659067474047553e+00 + -1.6836617714313025e+00 4.8412996241795275e-01 1.1615971186481724e+00 + -1.8642378266376067e+00 4.0970447082966766e-01 1.1472051029530677e+00 + -2.0504166532505685e+00 3.2098496957699085e-01 1.1234403320108035e+00 + -2.2326825301565156e+00 2.1993268741740357e-01 1.0952950718296657e+00 + -2.3916976986456420e+00 9.7886424046343179e-02 1.0763087668766163e+00 + id 13540 + loc 6.2714219093322754e-01 8.4735798835754395e-01 400 + blend 0.0000000000000000e+00 + interp 4.3197303008154203e-01:3.2554171680668803e-01:6.1566724459422761e-01:3.0616685904117097e-01:1.0415566908820437e+00:4.1475976590753372e-01:1.7945246985376981e+00:2.7811535599469517e-01:2.2538838886491033e+00:3.5317233633040662e-01:3.0456049344777454e+00:4.3196871035124124e-01:3.8690029901585392e+00 + CVs 20 + -1.1726972557962317e-01 1.9459198222469823e-01 -1.3102720344911789e-01 + -2.4866495683207676e-01 4.0792295298058895e-01 -2.8786819178545653e-01 + -3.6887747550677902e-01 6.2695745407698644e-01 -4.7240419040966503e-01 + -4.6904194433767221e-01 8.4170481571958999e-01 -6.8224898923937816e-01 + -5.5386631147187471e-01 1.0477201278723434e+00 -9.1262135546277867e-01 + -6.2570688652278472e-01 1.2451792623122668e+00 -1.1575187713168824e+00 + -6.8278655413480527e-01 1.4388365029994690e+00 -1.4150990494893705e+00 + -7.2258925388268302e-01 1.6322634728621717e+00 -1.6914547438760055e+00 + -7.4332669177312372e-01 1.8211664242425782e+00 -1.9967097634262279e+00 + -7.4373951929120852e-01 1.9940147125052869e+00 -2.3374688714677694e+00 + -7.2261271630549329e-01 2.1377851549849476e+00 -2.7156380129789324e+00 + -6.7863328324401673e-01 2.2395353128925324e+00 -3.1306193476359936e+00 + -6.1227380643643015e-01 2.2847726525725180e+00 -3.5782192921965690e+00 + -5.2718507563739503e-01 2.2588457275214555e+00 -4.0478789685490195e+00 + -4.2516358284648209e-01 2.1494932709450243e+00 -4.5261627794563939e+00 + -3.0283561316371388e-01 1.9475544529883870e+00 -4.9954346794679285e+00 + -1.6092198091991988e-01 1.6534398251284437e+00 -5.4265422620784758e+00 + -2.4785525431066963e-02 1.2998628521092765e+00 -5.7788815843721260e+00 + 3.7778982629160154e-03 1.0473111620986733e+00 -5.9648294424949269e+00 + id 13541 + loc 4.8723708838224411e-02 9.0556687116622925e-01 395 + blend 0.0000000000000000e+00 + interp 4.6559865964187602e-01:4.1486228330329411e-01:8.2246897387914175e-01:4.2432001611369263e-01:1.2138109250072067e+00:3.3239460502838342e-01:1.9117763044858918e+00:4.6559400365527964e-01:2.4361775000167998e+00:4.2207843462468719e-01:3.2226348479785236e+00:4.0485553208425201e-01:3.9735503664249121e+00 + CVs 20 + 5.2998598196203417e-01 1.4905770142905347e-01 -2.5315552724778428e-01 + 9.7100489797471834e-01 2.0563048277764573e-01 -4.7502333395904983e-01 + 1.4057827712933140e+00 2.2987840676018140e-01 -6.7269545777789452e-01 + 1.8611444977845137e+00 2.3785235462946186e-01 -8.4146524020565083e-01 + 2.3301154752972146e+00 2.2270077096728413e-01 -9.7408368254330902e-01 + 2.8034400947519940e+00 1.7938530047584700e-01 -1.0708491483778877e+00 + 3.2691380247233703e+00 1.0303037438940654e-01 -1.1353128089654065e+00 + 3.7128238409779568e+00 -1.2431862038602359e-02 -1.1704482534558500e+00 + 4.1226863940963003e+00 -1.7167984910395773e-01 -1.1830381929001195e+00 + 4.4889937757492513e+00 -3.7703044872863467e-01 -1.1871928135893972e+00 + 4.8003040311530203e+00 -6.2439515933265310e-01 -1.1929035051892867e+00 + 5.0508139078476750e+00 -8.9950439930493831e-01 -1.1989883316742413e+00 + 5.2462403017249564e+00 -1.1879373895339498e+00 -1.2065045770949590e+00 + 5.3951499576893003e+00 -1.4840119658774533e+00 -1.2258691953688632e+00 + 5.4980101805899997e+00 -1.7814246733096741e+00 -1.2647507985372426e+00 + 5.5493577235333582e+00 -2.0629410068517036e+00 -1.3192477289753737e+00 + 5.5517711177045976e+00 -2.3146116570719251e+00 -1.3841507131361122e+00 + 5.5201701476544525e+00 -2.5511819877837092e+00 -1.4665440023282525e+00 + 5.4919958341944470e+00 -2.8591615498800058e+00 -1.5992411030069098e+00 + id 13542 + loc 6.7844080924987793e-01 4.5669898390769958e-01 1068 + blend 0.0000000000000000e+00 + interp 4.6578083017870486e-01:4.6577617237040309e-01:4.8056050738261213e-01:3.7813638851909748e-01:9.3616873878004059e-01:2.7695631448763153e-01:1.2882282209823459e+00:2.8232961701590570e-01:2.0191994549573793e+00:2.6602399385009495e-01:2.9005641714709975e+00:3.5051094838972785e-01:3.2223518602556624e+00:2.7831911941478249e-01:3.9180686561853335e+00 + CVs 20 + -7.1813843080669515e-02 3.3379034058721863e-01 2.3967604783035185e-01 + -1.5719775159832464e-01 6.4930541576507628e-01 4.6017833025009730e-01 + -2.4070232678603373e-01 9.4992395823439080e-01 6.7158365064308412e-01 + -3.1559548227575407e-01 1.2370101313244091e+00 8.8231416717656019e-01 + -3.8047036380395233e-01 1.5117787955591504e+00 1.0989933852853848e+00 + -4.3330549049667211e-01 1.7726935824496910e+00 1.3320187918486750e+00 + -4.7399095092732130e-01 2.0081802241947750e+00 1.5985558814055842e+00 + -5.0301349205491408e-01 2.2040789105947098e+00 1.9062528032497381e+00 + -5.2414816863895863e-01 2.3505622405368194e+00 2.2500310971608211e+00 + -5.5016632723071901e-01 2.4215503721743281e+00 2.6248865347288102e+00 + -5.9488788156150973e-01 2.3756239157200216e+00 3.0200213953788810e+00 + -6.6734508421969774e-01 2.2033772295918554e+00 3.4189062706043138e+00 + -7.7406830836677587e-01 1.9500084584833193e+00 3.8094711390680560e+00 + -9.0241519618690058e-01 1.6736471499277585e+00 4.1839496763308306e+00 + -1.0125930635740525e+00 1.3955405613701082e+00 4.5492306859610938e+00 + -1.0535336125411923e+00 1.1290415416910315e+00 4.9241201017806278e+00 + -9.8223391897220802e-01 9.2071032182503987e-01 5.3197851797534126e+00 + -7.8916778576526436e-01 7.8268135215202039e-01 5.7692203809267237e+00 + -5.2684454554880922e-01 5.9990097162434908e-01 6.4030269308249679e+00 + id 13543 + loc 8.6174803972244263e-01 1.8168401718139648e-01 412 + blend 0.0000000000000000e+00 + interp 3.7513946341999299e-01:2.8756154421243224e-01:9.7042833037411758e-01:3.7513571202535878e-01:1.7473079487165275e+00:3.3844772056203448e-01:2.2362344470121238e+00:2.8571839149858003e-01:3.1196299795058873e+00:3.2554478238744289e-01:3.9998500878451093e+00 + CVs 20 + -6.3569881390632799e-01 1.2388600482544207e-01 2.1517961602798363e-01 + -1.1054754173761969e+00 1.6222227712530396e-01 4.1357834021838119e-01 + -1.5753240955581140e+00 2.0348632625425805e-01 5.9881266250270393e-01 + -2.0825442938035481e+00 2.7473459498139596e-01 7.5753542376594107e-01 + -2.6079881799006759e+00 3.5321978737750648e-01 8.9623102139853916e-01 + -3.1444400254685694e+00 4.0308598256900707e-01 1.0425553403849215e+00 + -3.6913544874866848e+00 3.7931164049466393e-01 1.2391504929862454e+00 + -4.2387273835046351e+00 2.3604468643552567e-01 1.5159681354852332e+00 + -4.7627323110087021e+00 -6.0630902837712108e-02 1.8546313115966020e+00 + -5.2303263019562074e+00 -5.2355575934594678e-01 2.1879061348645239e+00 + -5.6269438462660792e+00 -1.1307336767948812e+00 2.4499193650119384e+00 + -5.9972609492125732e+00 -1.8377047206788788e+00 2.6495742004242580e+00 + -6.4019820001338807e+00 -2.6052937008810839e+00 2.8583350844627073e+00 + -6.8760337465491244e+00 -3.3880301038364995e+00 3.1450689699932912e+00 + -7.4201749003941249e+00 -4.1227210156566372e+00 3.5271054381887126e+00 + -7.9980020338179001e+00 -4.7353133934848497e+00 3.9118785570288961e+00 + -8.5404335695450015e+00 -5.2081682399319931e+00 4.1918786583484060e+00 + -8.9652561094706034e+00 -5.5681557639477059e+00 4.3861883904751817e+00 + -9.2239113781910831e+00 -5.8945580989415216e+00 4.6258637686789665e+00 + id 13544 + loc 5.2853077650070190e-01 4.5491553843021393e-02 399 + blend 0.0000000000000000e+00 + interp 2.7677445991729616e-01:2.7133602333198847e-01:3.3227870774933366e-01:2.5349932120405011e-01:1.0262052592781663e+00:2.7677169217269698e-01:2.1121421459623746e+00:2.5434768346701669e-01:3.0845984893042604e+00 + CVs 20 + 3.1133220200438128e-01 2.9505300938910012e-01 1.7497988969191247e-01 + 6.1501281303120436e-01 5.8375982832304985e-01 3.5633111873091639e-01 + 9.2012995884229420e-01 8.6151297342113575e-01 5.6637989811391320e-01 + 1.2366747285248867e+00 1.1184853112594615e+00 8.0502878719131754e-01 + 1.5743952134483634e+00 1.3435378008008605e+00 1.0571652272714149e+00 + 1.9391206112022892e+00 1.5257234947096645e+00 1.3136427826816885e+00 + 2.3253319871403093e+00 1.6467324560875074e+00 1.5731250955871785e+00 + 2.7167834883430690e+00 1.6815268003558999e+00 1.8301210829296972e+00 + 3.0875321924950945e+00 1.6090782208005485e+00 2.0699781492906499e+00 + 3.4050496820011458e+00 1.4269114287572775e+00 2.2713691254319484e+00 + 3.6396963697277469e+00 1.1613002212901919e+00 2.4153115427845835e+00 + 3.7880451268566193e+00 8.6441362652533815e-01 2.5106872987238300e+00 + 3.8800562857201082e+00 5.7515145255862532e-01 2.6041368063562356e+00 + 3.9559945754556756e+00 2.9557173495105959e-01 2.7544286470431820e+00 + 4.0498816399767747e+00 1.3301108964923980e-02 3.0138350585940517e+00 + 4.1585155374785501e+00 -2.5864555643565368e-01 3.4038606385309085e+00 + 4.2367088260233707e+00 -4.7619204057339537e-01 3.9179788239573536e+00 + 4.2218773300723367e+00 -5.8004780646682141e-01 4.4751243350328203e+00 + 4.1113387251526063e+00 -5.7015191403858756e-01 4.7113657280286567e+00 + id 13545 + loc 1.5759946405887604e-01 5.3686124086380005e-01 393 + blend 0.0000000000000000e+00 + interp 4.8313948822290714e-01:3.1002953315862047e-01:1.1559511395597633e-02:4.7629387745522461e-01:5.1758883275902767e-01:4.2970658387905580e-01:9.9712393594462867e-01:4.3435942205809452e-01:1.4898584783277675e+00:2.8029088675895608e-01:1.9937397023797103e+00:4.8313465682802492e-01:2.7297443550312805e+00:3.3125932317891876e-01:3.0210099019714329e+00 + CVs 20 + -3.8337626039505357e-01 2.9962070494467863e-01 -1.6569873452681155e-02 + -7.2492553438826102e-01 6.0231327164586035e-01 -3.4213956777926970e-02 + -1.0402496173812199e+00 9.1966950974700712e-01 -6.0247017776083246e-02 + -1.3413021215698924e+00 1.2508535846409692e+00 -1.0499842949962188e-01 + -1.6401204561356477e+00 1.5815251373399719e+00 -1.8057220206460972e-01 + -1.9513283623651241e+00 1.8961472904291092e+00 -2.9026694153413757e-01 + -2.2900758078791283e+00 2.1835701242442065e+00 -4.2592010880833880e-01 + -2.6766972877721584e+00 2.4259997339859329e+00 -5.7491874407739885e-01 + -3.1369335495326620e+00 2.5860700093377758e+00 -7.2832921354983582e-01 + -3.6803451062996304e+00 2.6311716869776092e+00 -8.9036535721493704e-01 + -4.2760290133607679e+00 2.5659963692643819e+00 -1.0814662443958691e+00 + -4.8654733753205646e+00 2.4037087905776318e+00 -1.3097141900463076e+00 + -5.3997459953920490e+00 2.1391331930841639e+00 -1.5592270021888330e+00 + -5.8527248245060797e+00 1.7699635750366673e+00 -1.8174728810941687e+00 + -6.2147425821791789e+00 1.3243705778934147e+00 -2.0740440512572986e+00 + -6.5198662134001593e+00 8.4246102267753087e-01 -2.2899914974465143e+00 + -6.8485456350915515e+00 3.4857336295273367e-01 -2.4059071587439163e+00 + -7.2448789716949946e+00 -1.4673814823887654e-01 -2.4280290138917899e+00 + -7.7136929801297107e+00 -6.5806774218386588e-01 -2.5069227145490309e+00 + id 13546 + loc 3.2768648862838745e-01 8.0816882848739624e-01 380 + blend 0.0000000000000000e+00 + interp 4.6557915201614297e-01:4.3152998722102603e-01:6.8062484383341060e-03:4.6557449622462282e-01:5.5835709867647931e-01:4.0150441448094876e-01:1.0142921904156068e+00:3.7069365472403415e-01:1.9445847998037915e+00:4.1918461877515767e-01:2.3774864206734856e+00:2.9666009959367051e-01:3.3843028640654862e+00 + CVs 20 + -3.8709884386722748e-01 2.6507648149450447e-01 -4.5097915556634571e-01 + -7.8368238396910050e-01 4.8273335570243248e-01 -7.7347537360684371e-01 + -1.2090186264775913e+00 6.9442042687445882e-01 -1.0689082466136515e+00 + -1.6725541156046799e+00 9.2236942715948755e-01 -1.3893344003939503e+00 + -2.1636180793000444e+00 1.1599174057510369e+00 -1.7505727142686021e+00 + -2.6708704867321726e+00 1.3854345978853095e+00 -2.1650711342628668e+00 + -3.1848858380065379e+00 1.5659607523342089e+00 -2.6430866296074900e+00 + -3.6917327376102507e+00 1.6631808447889704e+00 -3.1845814476013112e+00 + -4.1744319792638045e+00 1.6437810013458241e+00 -3.7614752245541929e+00 + -4.6186875792045257e+00 1.4965875310770813e+00 -4.3248345159837385e+00 + -5.0205598587934279e+00 1.2256706083903550e+00 -4.8382263379902675e+00 + -5.3812951502769915e+00 8.3085452714588470e-01 -5.2916118176683247e+00 + -5.6935934471653891e+00 3.2348346234816550e-01 -5.6691685225466486e+00 + -5.9569538515017868e+00 -2.1337854449227311e-01 -5.9552325427993758e+00 + -6.1962560906572257e+00 -6.6723238062641554e-01 -6.1851364297499503e+00 + -6.4350191355832997e+00 -9.6689454440024836e-01 -6.3873493560292172e+00 + -6.6735096026691414e+00 -1.0536803223456173e+00 -6.5223300563620850e+00 + -6.8747917492331085e+00 -9.3657568154378268e-01 -6.5482957539557605e+00 + -7.1280987151153905e+00 -1.1607657287129314e+00 -6.7350794796017457e+00 + id 13547 + loc 9.5788963139057159e-02 4.5658701658248901e-01 376 + blend 0.0000000000000000e+00 + interp 4.8392975096249291e-01:3.8001603425548902e-01:3.0360175161666114e-02:4.8392491166498330e-01:5.3581968372162225e-01:3.6035815781128777e-01:9.9998033042050483e-01:4.4041751636432386e-01:1.8372924466930440e+00:4.5916558955955017e-01:2.2024519587407303e+00:4.1457323421475467e-01:2.8096084611402770e+00:3.7713855237265997e-01:3.1908919710535226e+00 + CVs 20 + 5.4668342883072696e-01 4.5923208622801703e-01 3.1590003007757167e-01 + 1.0471046582839911e+00 8.1658228812867240e-01 5.3151727464559384e-01 + 1.5832014893072113e+00 1.0317966363065671e+00 6.2097044161951531e-01 + 2.1062198948104887e+00 1.1186931572954955e+00 5.9402071904325193e-01 + 2.5763381556217553e+00 1.1531341211366564e+00 4.7933409132381971e-01 + 3.0250020163774467e+00 1.1903352569151839e+00 3.1190711147564909e-01 + 3.5070240863089674e+00 1.2346560795759542e+00 1.4832945001597742e-01 + 4.0485371121077796e+00 1.2743649987477093e+00 5.0927951048629794e-02 + 4.6452444935784589e+00 1.3172864653453349e+00 6.3537202034096740e-02 + 5.2704374601358008e+00 1.3748224638334052e+00 2.2043278461560711e-01 + 5.8809743982728797e+00 1.4304972947364269e+00 5.2327166334156949e-01 + 6.4425748931085751e+00 1.4498787419730370e+00 9.3908065830679344e-01 + 6.9230503146170568e+00 1.3882497711208210e+00 1.4296895348595975e+00 + 7.2877957783009792e+00 1.2093144883503211e+00 1.9500178190318809e+00 + 7.4996063467081431e+00 9.2903227386128329e-01 2.4506224876736198e+00 + 7.5105484336409400e+00 6.1339438615487518e-01 2.8871090657194518e+00 + 7.3356287953775201e+00 3.0437941331322982e-01 3.2385033150538254e+00 + 7.1228761339430875e+00 -9.4169944617620072e-02 3.4379476327647507e+00 + 7.0892303259104352e+00 -6.3828427744278438e-01 3.2930016971319236e+00 + id 13548 + loc 2.8462696075439453e-01 9.1354680061340332e-01 402 + blend 0.0000000000000000e+00 + interp 5.0802605407965595e-01:4.6617968239589258e-01:7.7794113852795999e-02:5.0802097381911515e-01:8.6765164102971504e-01:3.0836553206445289e-01:1.1639603513746088e+00:3.3321591375709891e-01:1.7914204222401082e+00:3.5167995609658387e-01:2.7548128958838829e+00:4.1485767581204791e-01:3.5589981541106415e+00 + CVs 20 + -9.1952079089666433e-02 1.1538860091152760e-01 -3.8972298855187729e-02 + -1.5712024115477449e-01 2.6446350294863208e-01 -1.0006387308319015e-01 + -1.9957785703622635e-01 4.2868989285553782e-01 -1.7362122890243631e-01 + -2.2743566799981901e-01 5.9750539944059433e-01 -2.5651298584017129e-01 + -2.4080277127498428e-01 7.6742732282278281e-01 -3.4635030542270673e-01 + -2.4374196767801426e-01 9.3723175117423230e-01 -4.4052702145129413e-01 + -2.4338552223946402e-01 1.1080390049247710e+00 -5.3860698581840949e-01 + -2.4979412579385701e-01 1.2820331760909953e+00 -6.4330592944486353e-01 + -2.7518933911149768e-01 1.4588759976756012e+00 -7.5785299777736637e-01 + -3.3176887705056624e-01 1.6354113491529887e+00 -8.8321391686185347e-01 + -4.2977780107896679e-01 1.8077457320033905e+00 -1.0181112030171917e+00 + -5.7308789061618615e-01 1.9661589708070544e+00 -1.1552837540490997e+00 + -7.5890476976378829e-01 2.1022207212540236e+00 -1.2861130840674675e+00 + -9.7043434439551002e-01 2.2081753582003603e+00 -1.3961744944042418e+00 + -1.1782464311700163e+00 2.2836789128231412e+00 -1.4686608555784377e+00 + -1.3674400730397762e+00 2.3381260607346350e+00 -1.4989778328835124e+00 + -1.5584643925343880e+00 2.3793362600259353e+00 -1.4952179639529342e+00 + -1.7710341297676553e+00 2.4039503168806307e+00 -1.4605238253735293e+00 + -1.9987807761013241e+00 2.4059502590552415e+00 -1.3976860923056806e+00 + id 13549 + loc 8.5418057441711426e-01 9.9951052665710449e-01 382 + blend 0.0000000000000000e+00 + interp 3.3918663446725072e-01:2.7897384502468481e-01:5.4391766081746562e-02:3.0502464686139014e-01:9.6603671317587203e-01:1.6411117021285379e-01:1.6252029158128705e+00:2.8538500875193651e-01:2.2763269625513258e+00:3.3918324260090604e-01:3.7400038608088124e+00 + CVs 20 + 1.1545794497995008e+00 1.9505986899817215e-01 -5.5907291120578206e-01 + 1.8700744852680673e+00 1.8453956731709928e-01 -9.7149940201468143e-01 + 2.4839661025109692e+00 7.7684177523046127e-02 -1.3792928138700629e+00 + 3.1327044612446375e+00 -7.0732070337558517e-02 -1.8421899575992731e+00 + 3.8145108835671286e+00 -2.4303675734702385e-01 -2.3499352278501870e+00 + 4.5188336335810160e+00 -4.2744714064169198e-01 -2.8751118683509604e+00 + 5.2301742676051699e+00 -6.2863573430835640e-01 -3.3796457024189164e+00 + 5.9328095184022214e+00 -8.6355748855126135e-01 -3.8213825770795555e+00 + 6.6049689165798933e+00 -1.1466209929456770e+00 -4.1656737416560734e+00 + 7.2167448700619161e+00 -1.4807974952168039e+00 -4.3959718117726307e+00 + 7.7401340921826263e+00 -1.8624625387327294e+00 -4.5130992534193597e+00 + 8.1576215564067187e+00 -2.2830210630733019e+00 -4.5265153057926204e+00 + 8.4663493882231311e+00 -2.7240509092323544e+00 -4.4431065479519862e+00 + 8.6824823646610181e+00 -3.1717026711686733e+00 -4.2538105160279942e+00 + 8.8331703235824754e+00 -3.6365734449362348e+00 -3.9521510493695535e+00 + 8.9420126459887541e+00 -4.1469201860174563e+00 -3.5561187913954377e+00 + 9.0296400190539572e+00 -4.7484063000803536e+00 -3.0942228230639035e+00 + 9.1204773972103030e+00 -5.4686438264703421e+00 -2.6525463464460701e+00 + 9.1849000577774671e+00 -6.0606791527352026e+00 -2.3404690649612303e+00 + id 13550 + loc 9.0452802181243896e-01 3.7124863266944885e-01 375 + blend 0.0000000000000000e+00 + interp 5.4514675274550273e-01:3.6231863083587845e-01:4.0411473957538080e-02:2.4994621038338280e-01:1.0052558544319246e+00:4.2392501181338549e-01:1.7533213210279235e+00:3.1925957729047827e-01:2.0624931586791631e+00:3.9409026957178211e-01:2.8456685793884486e+00:5.4514130127797533e-01:3.1323960611158386e+00:4.0994216457485555e-01:3.7773814256534917e+00 + CVs 20 + 6.0332604426055947e-01 4.1329873953924345e-01 5.9976478927442456e-02 + 1.1035368098841389e+00 6.8353447575116899e-01 2.7628113499781448e-02 + 1.6018272224133998e+00 8.2356192459460775e-01 -9.2401195315353124e-02 + 2.1259186813173607e+00 8.9841088562142313e-01 -2.8206971117973356e-01 + 2.6704253353188347e+00 9.8723117859012577e-01 -5.0339194043266744e-01 + 3.2532686890279257e+00 1.1405409650118281e+00 -6.9698384274421832e-01 + 3.8778972227992110e+00 1.3713796413589057e+00 -7.8672012336865682e-01 + 4.5040041854214401e+00 1.6698076435615568e+00 -7.1445612172854667e-01 + 5.0787046102312043e+00 2.0142257082240489e+00 -4.5910039448112983e-01 + 5.5781065915281607e+00 2.3646410110829175e+00 -2.0857060458712828e-02 + 6.0056334683161623e+00 2.6567703930241717e+00 5.9677939345053388e-01 + 6.3471148925197634e+00 2.7994385996942843e+00 1.3738762321102982e+00 + 6.5451514729216917e+00 2.7083452268161494e+00 2.2268644164633775e+00 + 6.5391749830828028e+00 2.3816864414046326e+00 3.0074624238821137e+00 + 6.3431593827413835e+00 1.8866840408041701e+00 3.5952104821713284e+00 + 6.0783029826341046e+00 1.2341960035453425e+00 3.9740284233437024e+00 + 5.8990626832456403e+00 3.7464669601300127e-01 4.1254741124055858e+00 + 5.8549163239742548e+00 -4.4647990350823052e-01 4.0066082628566049e+00 + 5.7225780175358238e+00 -8.2696655175530642e-01 3.8544274160703766e+00 + id 13551 + loc 1.1019453406333923e-02 1.0841310955584049e-02 403 + blend 0.0000000000000000e+00 + interp 4.2261965004257501e-01:3.3039410321797419e-01:3.2170095150811850e-01:2.4771280563846257e-01:1.0967562782187286e+00:3.4178739478570208e-01:1.9942442219515839e+00:3.8994245130198169e-01:2.4334876688704359e+00:3.0169590965791226e-01:3.4058326239029024e+00:4.2261542384607459e-01:3.9929197789494388e+00 + CVs 20 + -2.0910289656379799e-01 1.4726510588837399e-01 1.5247731328671060e-01 + -4.2844587530519668e-01 3.0033929622745825e-01 2.8952288342337840e-01 + -6.4985489866235857e-01 4.3791077243572840e-01 4.2945443663347727e-01 + -8.6865269552544322e-01 5.4792834340807617e-01 5.8218465616966419e-01 + -1.0804435208945027e+00 6.2630985087273383e-01 7.4450098977865409e-01 + -1.2821480837492170e+00 6.7234395505181466e-01 9.1335213636751533e-01 + -1.4707506655833400e+00 6.8859394316654432e-01 1.0875162712708444e+00 + -1.6433555284339361e+00 6.7957245828128154e-01 1.2653113992175926e+00 + -1.7984006227466736e+00 6.5075352593513547e-01 1.4446782117246530e+00 + -1.9347865543482399e+00 6.0659264170568983e-01 1.6268289073799385e+00 + -2.0492575028278601e+00 5.5178316953126294e-01 1.8103142420266187e+00 + -2.1344076901640263e+00 4.9335833598843953e-01 1.9863178215604453e+00 + -2.1830408233806029e+00 4.3897460164991076e-01 2.1438982150852230e+00 + -2.2029572173521408e+00 3.9901552209053393e-01 2.2788818441757379e+00 + -2.2088033628084873e+00 3.7585980091711502e-01 2.3976148530687800e+00 + -2.1840223610064120e+00 3.3065054299223440e-01 2.4983294065330472e+00 + -2.0743659339791201e+00 1.7306525332064449e-01 2.5576039248432809e+00 + -1.8654314470132249e+00 -1.3305796845479057e-01 2.5894026683110942e+00 + -1.8629298159691889e+00 -2.5424735467790627e-01 2.7106523508114404e+00 + id 13552 + loc 1.7458972334861755e-01 6.9304686784744263e-01 401 + blend 0.0000000000000000e+00 + interp 4.8147688714459419e-01:3.1747365132380873e-01:3.0638677908266443e-01:4.8147207237572276e-01:1.0002561670945300e+00:4.0482358638960825e-01:1.4903045860097248e+00:2.5464733113248700e-01:1.9795758972718491e+00:3.8959282741273088e-01:2.2773383654890851e+00:3.6501441884533514e-01:2.9970468723189700e+00:3.2112538801288809e-01:3.6161382005737774e+00 + CVs 20 + 4.1607046687124831e-02 2.7464810839136317e-01 -4.0701721202039232e-01 + 5.4886634554799016e-02 5.3670670931496933e-01 -8.0213248515817115e-01 + 4.1740462148489282e-02 7.7365092966924109e-01 -1.1975657641726734e+00 + -3.4989472474258321e-03 9.7283684815452898e-01 -1.5980831025394919e+00 + -9.2040592744253413e-02 1.1209403690906306e+00 -1.9977438425103882e+00 + -2.3601911642299978e-01 1.2086760935010172e+00 -2.3832841667537275e+00 + -4.3628919462200694e-01 1.2307708071922829e+00 -2.7318618550881397e+00 + -6.7561398239206127e-01 1.1911123226529388e+00 -3.0217856891377632e+00 + -9.2744946656771243e-01 1.1033016856967515e+00 -3.2438778303716456e+00 + -1.1675618977250872e+00 9.8710929095309641e-01 -3.4030841081846179e+00 + -1.3817243415533589e+00 8.6267830577553295e-01 -3.5132893215989949e+00 + -1.5672506739425347e+00 7.4560721351924542e-01 -3.5886088121388351e+00 + -1.7345350570418174e+00 6.4464411976932257e-01 -3.6414310775618053e+00 + -1.9130089730761470e+00 5.5423428852195911e-01 -3.6835313319430778e+00 + -2.1364071981110233e+00 4.5238252237851856e-01 -3.7154622912341639e+00 + -2.4093072631935764e+00 3.2935320925849609e-01 -3.7161463424824865e+00 + -2.7140407898372758e+00 2.0243205365285455e-01 -3.6589764845758563e+00 + -3.0273694176874519e+00 1.0286511251925978e-01 -3.5340632223494577e+00 + -3.2607252887705007e+00 1.2720335980936570e-01 -3.4135778838552917e+00 + id 13553 + loc 6.6149806976318359e-01 4.5165437459945679e-01 396 + blend 0.0000000000000000e+00 + interp 4.6683259225393814e-01:3.0592684983257501e-01:2.1600677634414422e-02:3.2456579687176046e-01:1.0554393407602269e+00:3.1153652899315726e-01:2.0139380137522553e+00:4.2735109178663622e-01:2.6643009575040635e+00:3.5082486300153976e-01:3.0102594273063636e+00:4.6682792392801564e-01:3.4745609998691886e+00 + CVs 20 + -7.6715685022048896e-01 2.0266250507583716e-01 3.6311904185907451e-01 + -1.2876099885066508e+00 2.4341775172595703e-01 6.8270946401455379e-01 + -1.7455721194322928e+00 2.2705229927399062e-01 1.0050283501559643e+00 + -2.2086984700752463e+00 1.9505206253842333e-01 1.3441214680256857e+00 + -2.6724943339830487e+00 1.4984158476545639e-01 1.6932950891521876e+00 + -3.1280021862323490e+00 9.0562586180967353e-02 2.0536021547159011e+00 + -3.5683182885435096e+00 1.6922318757870425e-02 2.4243745223198960e+00 + -3.9959910330608568e+00 -7.1769223383097325e-02 2.7947999924272748e+00 + -4.4149300666509852e+00 -1.8141324268434822e-01 3.1519557960225533e+00 + -4.8247058707828732e+00 -3.1609646704673677e-01 3.4880427243361360e+00 + -5.2277072956114683e+00 -4.8450969725846194e-01 3.8058458171881986e+00 + -5.6320499581975021e+00 -7.0523707066000396e-01 4.1133931494807614e+00 + -6.0393007745169527e+00 -9.9495104295594450e-01 4.4093755053792911e+00 + -6.4387116026767321e+00 -1.3569598325550958e+00 4.6814696388586059e+00 + -6.8128673653322807e+00 -1.7884176085199774e+00 4.9187903439068235e+00 + -7.1412213141182539e+00 -2.2898610117146707e+00 5.1157522195279377e+00 + -7.4016109746265615e+00 -2.8517248040652432e+00 5.2628246853318483e+00 + -7.5826703959224604e+00 -3.4328603866830143e+00 5.3451968850279030e+00 + -7.7178539522133045e+00 -3.8919460156631871e+00 5.3462321112524425e+00 + id 13554 + loc 1.5039382502436638e-02 5.9373420476913452e-01 378 + blend 0.0000000000000000e+00 + interp 4.4997466119936713e-01:2.7625812366306968e-01:4.1899882862742599e-03:1.9896448834436539e-01:1.2581487427006877e-01:2.5096718379286803e-01:1.0496547818673614e+00:2.8260959047821405e-01:2.0023202085568821e+00:4.4997016145275515e-01:2.5950492991629401e+00:3.9674118000957448e-01:3.0809391351520459e+00 + CVs 20 + 4.7685501962202703e-01 3.2500519432336406e-01 3.3007622606342624e-01 + 8.8411115813158148e-01 5.6553622402861237e-01 5.8771765769184925e-01 + 1.2744052081804573e+00 7.6192526415999107e-01 8.2982798441294470e-01 + 1.6656056372442538e+00 9.3946857089976821e-01 1.0873976159730119e+00 + 2.0420844161364102e+00 1.0994947503665276e+00 1.3639293152760177e+00 + 2.3943832259401199e+00 1.2374343524904545e+00 1.6586602601806391e+00 + 2.7240514149927382e+00 1.3448995544516800e+00 1.9660890353537526e+00 + 3.0376646750789016e+00 1.4156428433050501e+00 2.2781758568212989e+00 + 3.3468286957025621e+00 1.4471973859662195e+00 2.5945430681691444e+00 + 3.6649542171820819e+00 1.4341975431609020e+00 2.9243385180435033e+00 + 3.9996313666081367e+00 1.3662910676761557e+00 3.2684194133782678e+00 + 4.3517685533836339e+00 1.2295994626541566e+00 3.6130596899848575e+00 + 4.7114415277856416e+00 1.0015212263608664e+00 3.9376701550373125e+00 + 5.0559617403552206e+00 6.6033276577546518e-01 4.2144979307322181e+00 + 5.3716031922463703e+00 2.2241726940000550e-01 4.4265922915231819e+00 + 5.6711182600916921e+00 -2.5208139797851548e-01 4.5969996687195289e+00 + 5.9742165424785778e+00 -6.8565570087038719e-01 4.7506570594857678e+00 + 6.2951334282325710e+00 -1.0186966825010919e+00 4.8725586946376396e+00 + 6.6891107707703270e+00 -1.3343157841932012e+00 4.9830721117530796e+00 + id 13555 + loc 3.7666806578636169e-01 5.7239401340484619e-01 409 + blend 0.0000000000000000e+00 + interp 3.3681009319663313e-01:2.8710678353532115e-01:1.7183055371197398e-01:2.8543280230282675e-01:9.9129580499722225e-01:2.8722448795118888e-01:1.6168666231518150e+00:2.7836738853724363e-01:2.0938279073397785e+00:2.8262982640408213e-01:2.9999386923624254e+00:3.3680672509570120e-01:3.7178056474916015e+00 + CVs 20 + 3.8719230758901246e-01 1.1407220480260633e-01 -6.3287811174905978e-02 + 7.2219245155977396e-01 2.0845670837734778e-01 -1.4998521581775343e-01 + 1.0416549636243295e+00 2.9613096493549257e-01 -2.2174866743955310e-01 + 1.3569961653966194e+00 3.8041452661027059e-01 -2.6435646231780113e-01 + 1.6630177935749022e+00 4.5737837281526861e-01 -2.8366592085894921e-01 + 1.9561070437150381e+00 5.2457830393121097e-01 -2.8545270910904830e-01 + 2.2349740042164861e+00 5.8182937314561001e-01 -2.7454687390394827e-01 + 2.5010799739145813e+00 6.3002595497575531e-01 -2.5516025041200840e-01 + 2.7588678732702565e+00 6.6857947045031729e-01 -2.3032896873908099e-01 + 3.0130798451450032e+00 6.9521882137814828e-01 -2.0195701693687676e-01 + 3.2648244862146067e+00 7.0819367317291237e-01 -1.7267893976031945e-01 + 3.5129022486631394e+00 7.0365272969519221e-01 -1.4716478469501121e-01 + 3.7557311912900389e+00 6.7322783204558223e-01 -1.3302426527843106e-01 + 3.9901218153903004e+00 6.1069805888271711e-01 -1.4011555069329085e-01 + 4.2084731238251152e+00 5.1488227299897904e-01 -1.7670736032196588e-01 + 4.4014197251803218e+00 3.9140632704369005e-01 -2.5002683315258822e-01 + 4.5609597735490928e+00 2.4633199286947161e-01 -3.6665495600464593e-01 + 4.6761579531281541e+00 7.9421698038211641e-02 -5.2114077024272343e-01 + 4.6623035302535358e+00 -1.8296738231136267e-01 -7.0899296552817548e-01 + id 13556 + loc 2.4350297451019287e-01 2.9021540284156799e-01 1080 + blend 0.0000000000000000e+00 + interp 4.0892642234190224e-01:4.0892233307767883e-01:5.2316403941751688e-01:2.7311929699952747e-01:2.0169937460269893e+00:3.3980491819796399e-01:2.8624356095711883e+00:3.5634710844758510e-01:3.1786708486334532e+00:2.7109897031735547e-01:3.8788309199109512e+00 + CVs 20 + 4.0079168117179387e-01 4.3872882950776021e-01 5.7516414182420587e-02 + 5.5406592933642618e-01 7.4608891248606357e-01 1.1942905639866544e-01 + 6.7453928594233781e-01 1.0540529510644001e+00 1.7386083441382144e-01 + 8.4592116348066759e-01 1.3825144592969618e+00 2.1953917584387322e-01 + 1.0669241310311479e+00 1.7185881019519980e+00 2.5444177477559626e-01 + 1.3368314124588920e+00 2.0517017059271958e+00 2.7402619579221615e-01 + 1.6582453063617528e+00 2.3779409120351316e+00 2.6568572053856115e-01 + 2.0403109590898345e+00 2.6968883405526087e+00 1.9705016691030727e-01 + 2.4827498961810686e+00 2.9890216785959618e+00 8.7689040181729849e-03 + 2.9300635980080267e+00 3.1929888755801143e+00 -3.4375882474881148e-01 + 3.2903728867865900e+00 3.2526975584202269e+00 -8.1494494588402411e-01 + 3.5272808256261334e+00 3.1721984771645624e+00 -1.3176500557925093e+00 + 3.6566813887654663e+00 2.9828075041188837e+00 -1.8029494212475867e+00 + 3.7031870250437100e+00 2.7147348467191859e+00 -2.2494975557383832e+00 + 3.6877202325871377e+00 2.4099927322370607e+00 -2.6341436449133688e+00 + 3.6338178611796517e+00 2.1476963610090039e+00 -2.9215115202231452e+00 + 3.5659230524629293e+00 1.9957440840103291e+00 -3.1052796015091868e+00 + 3.5589043883135059e+00 1.8502655862757396e+00 -3.2502216069227470e+00 + 3.8218435763429741e+00 1.4551664953552634e+00 -3.3563975753236903e+00 + id 13557 + loc 5.3182566165924072e-01 7.2267127037048340e-01 400 + blend 0.0000000000000000e+00 + interp 4.4441615217838631e-01:2.8423446334454494e-01:3.0444835626254441e-02:2.4495042847444895e-01:1.1377853300660563e+00:2.6989115944795383e-01:2.0133741112819878e+00:4.4441170801686453e-01:2.9808361536509036e+00:4.0475686183085324e-01:3.7845751101484755e+00 + CVs 20 + -7.3591497091521504e-02 2.4942552803546258e-01 -2.8778990808919303e-01 + -1.2615435090362254e-01 4.7713057265078340e-01 -6.1375607380940922e-01 + -1.4257771889974577e-01 6.6004463429778437e-01 -9.6250585124398924e-01 + -1.2618602203818885e-01 7.9470843107890299e-01 -1.3205359957651925e+00 + -8.5756060444290988e-02 8.9242423418973293e-01 -1.6787737848352431e+00 + -2.5794506113870661e-02 9.6738153590732667e-01 -2.0292519684966610e+00 + 4.8476473379296316e-02 1.0247400808516574e+00 -2.3683936664731871e+00 + 1.2984836096921978e-01 1.0525879839074193e+00 -2.6938689203089918e+00 + 2.1170833865197730e-01 1.0352762516328182e+00 -3.0013128422125201e+00 + 2.9004906069410474e-01 9.6839608786020315e-01 -3.2853570246253931e+00 + 3.6211958759420898e-01 8.5455361563391907e-01 -3.5413869580061603e+00 + 4.2341192339572536e-01 6.9483391247340442e-01 -3.7653866768847966e+00 + 4.6922684404065945e-01 4.8991104665137497e-01 -3.9515451546516092e+00 + 5.0086139162316257e-01 2.4527574183137224e-01 -4.0890290750901341e+00 + 5.2506209748796129e-01 -2.9163297909093000e-02 -4.1637531728039772e+00 + 5.4134041933141175e-01 -3.2543505729723132e-01 -4.1650184145869202e+00 + 5.3892777757950905e-01 -6.3738812395523703e-01 -4.0959953480099340e+00 + 5.2031198877908091e-01 -9.6641921652278484e-01 -4.0117271806976378e+00 + 5.8410346033528282e-01 -1.3837850330075097e+00 -4.2852304694810526e+00 + id 13558 + loc 4.0201178193092346e-01 4.3411433696746826e-01 374 + blend 0.0000000000000000e+00 + interp 4.7205128809161251e-01:3.3952607775511801e-01:2.3568627402484199e-01:3.0826742710263544e-01:9.9949352326173446e-01:3.5018666689146044e-01:1.5281604090658103e+00:4.7204656757873159e-01:2.0267161593514400e+00:3.3949105528770701e-01:2.7588230293899230e+00:3.3459947286513292e-01:3.6034942423119425e+00 + CVs 20 + -1.9158897975431979e-01 4.8092411290359055e-01 7.7209284817464729e-01 + -2.6147986220046926e-01 8.0800709106698321e-01 1.3728328013470892e+00 + -2.5741500431028119e-01 1.0396487415049291e+00 1.9511439494242580e+00 + -2.1756926544353394e-01 1.2219400946656416e+00 2.5554741795466800e+00 + -1.7319176659922864e-01 1.3791931558883557e+00 3.1907398529929081e+00 + -1.5819886101718073e-01 1.5141856991813543e+00 3.8729173478174537e+00 + -2.0580787807280121e-01 1.5999827792134294e+00 4.6023842001476112e+00 + -3.3659267842333018e-01 1.6034350668066450e+00 5.3483399110032765e+00 + -5.5072865774158819e-01 1.5032763114207410e+00 6.0707149406997285e+00 + -8.3155243325032147e-01 1.2799625402869699e+00 6.7239548713931452e+00 + -1.1502884758923857e+00 9.3191654065275475e-01 7.2613468636747118e+00 + -1.4668474623301231e+00 4.7723986293992171e-01 7.6520719100458408e+00 + -1.7430086983032886e+00 -5.3494445425055659e-02 7.8803231906014792e+00 + -1.9598372023934549e+00 -6.3518845258937962e-01 7.9510307108654406e+00 + -2.1352958300084937e+00 -1.2646793183464227e+00 7.9098548111409128e+00 + -2.3090304446199905e+00 -1.9361852145776970e+00 7.8365228010349330e+00 + -2.4953638543828940e+00 -2.6222941804773434e+00 7.8176462480673568e+00 + -2.6655794419605696e+00 -3.2875827426560784e+00 7.9068214316283942e+00 + -2.8009360344220298e+00 -3.8905178864227619e+00 8.0738464228209352e+00 + id 13559 + loc 9.3827515840530396e-01 5.3069049119949341e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3720940824622584e-01:3.3505921175884690e-01:4.3113231124808093e-01:2.9049850313489822e-01:1.4972072961265754e+00:3.4215766981199253e-01:2.4882161189470029e+00:4.3720503615214340e-01:2.9995355620651236e+00:2.8154906842894090e-01:3.7057339396618043e+00 + CVs 20 + 2.2585724215998393e-01 2.6677791444273924e-01 -2.0765954524085797e-01 + 4.5477589768953669e-01 5.4107373849784524e-01 -4.1982773270369855e-01 + 6.8263567770506062e-01 7.8089057938271134e-01 -6.6868659984898837e-01 + 9.0475819162508497e-01 9.6102958890071577e-01 -9.6329288127719959e-01 + 1.1145442298567616e+00 1.0669686030884813e+00 -1.2957195765811951e+00 + 1.3058627882613600e+00 1.0913928251377367e+00 -1.6535823186730552e+00 + 1.4723653241693819e+00 1.0348148575381895e+00 -2.0248426452081554e+00 + 1.6039650994504477e+00 9.0278576395428789e-01 -2.3993056830091928e+00 + 1.6878707015430683e+00 7.0343417066248304e-01 -2.7662825806523887e+00 + 1.7141130898682491e+00 4.4617397860437213e-01 -3.1124482969515843e+00 + 1.6786543996087200e+00 1.4076177628156716e-01 -3.4198576253057409e+00 + 1.5914446146431191e+00 -2.0197599935297728e-01 -3.6823036612120821e+00 + 1.4694718869735752e+00 -5.6733069688157056e-01 -3.9424497183962322e+00 + 1.3105801679885254e+00 -9.0615779997225010e-01 -4.3126028796727667e+00 + 1.1345765450077940e+00 -1.0467739401107383e+00 -4.9140383952443418e+00 + 1.0713554256919373e+00 -7.4421416559296327e-01 -5.6220581983601887e+00 + 1.2367809873418156e+00 3.6326302586548120e-02 -6.0351692515690027e+00 + 1.6828307813932524e+00 1.0296624889578616e+00 -5.5935121407685049e+00 + 1.7736352797919319e+00 1.2973461279412284e+00 -5.6747853047057166e+00 + id 13560 + loc 2.4829535186290741e-01 5.6646203994750977e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0977408842277094e-01:2.8318714783553361e-01:2.4080733519870479e-01:3.7316236239127309e-01:1.0315538099234283e+00:2.7880709034699125e-01:1.7491200093112105e+00:4.2248771934938489e-01:2.0870490382925788e+00:5.0976899068188675e-01:2.7954641265753404e+00:4.3097502946254013e-01:3.1643183973773858e+00:2.4250487619114505e-01:3.6989581894642485e+00 + CVs 20 + 1.2027757053953776e-01 2.5924923399195082e-01 -2.0362787270542629e-01 + 2.5227587248331784e-01 5.1142078503231725e-01 -4.1005124565967577e-01 + 3.8447202027267563e-01 7.6524462275356864e-01 -6.1239641071109052e-01 + 5.0873676193145434e-01 1.0223754601982353e+00 -8.1303270862328225e-01 + 6.1596267491741341e-01 1.2815302308873247e+00 -1.0193573543119037e+00 + 6.9065363618312015e-01 1.5370194227410252e+00 -1.2344149415991412e+00 + 7.1793193815527534e-01 1.7742706988020940e+00 -1.4541870295676638e+00 + 6.9134193636781727e-01 1.9681095918919960e+00 -1.6725513443108777e+00 + 6.1590099253045194e-01 2.0958039201413161e+00 -1.8948842038661939e+00 + 4.9965811065325094e-01 2.1486243564994298e+00 -2.1388435705572832e+00 + 3.4839185279405949e-01 2.1228665714428749e+00 -2.4163199931144326e+00 + 1.7324353927752845e-01 2.0156029717247530e+00 -2.7286487248590712e+00 + -3.0636241067023562e-03 1.8290475951347298e+00 -3.0720649953021852e+00 + -1.4718250566070368e-01 1.5735225728576159e+00 -3.4413769711989963e+00 + -2.1877813427742387e-01 1.2641862707695419e+00 -3.8332266320869079e+00 + -1.5988182703844944e-01 9.1758445345787698e-01 -4.2442933719469389e+00 + 1.1715739183522089e-01 5.8501412592722724e-01 -4.6390511831798555e+00 + 5.8593366533083979e-01 3.8040342574743158e-01 -4.9144211875981583e+00 + 9.1035419556293673e-01 2.5681768058051979e-01 -5.0810853810231578e+00 + id 13561 + loc 8.0782359838485718e-01 8.0344986915588379e-01 402 + blend 0.0000000000000000e+00 + interp 4.9677890255197243e-01:3.0835369252547445e-01:3.6423130474294241e-01:3.0915736022063395e-01:1.0107722262801173e+00:4.1048970180833794e-01:1.6549086798407802e+00:3.8688992468736461e-01:2.1332513971858806e+00:4.9677393476294696e-01:2.7098729354052518e+00:4.1403905101981642e-01:3.0063387108915034e+00:2.4741145494931222e-01:3.4900567776435967e+00 + CVs 20 + -8.6438884273383421e-02 1.0759581516896632e-01 -1.5116994732612524e-01 + -1.5052376303810508e-01 2.3339417227621495e-01 -3.1845385160143419e-01 + -2.0595105613063491e-01 3.6322212335878290e-01 -4.9027935488371710e-01 + -2.5903265564632627e-01 4.8889600781162657e-01 -6.5769484124620436e-01 + -3.1155869756613380e-01 6.0850233144322419e-01 -8.1735950184848061e-01 + -3.5961744583453076e-01 7.1863596742526226e-01 -9.6473788075809741e-01 + -3.9693475910117981e-01 8.1694707483621598e-01 -1.0958122659135165e+00 + -4.1943333848516623e-01 9.0349525076429038e-01 -1.2065198450281631e+00 + -4.2299271330295202e-01 9.7387047520225900e-01 -1.2873159811487780e+00 + -4.1354320745646445e-01 1.0136117417868522e+00 -1.3260031628284676e+00 + -4.1138251791137270e-01 1.0358724807737878e+00 -1.3415378966761158e+00 + -3.9650061604213577e-01 1.0784446677855133e+00 -1.3637951567838291e+00 + -3.4708900506770751e-01 1.1438129204970293e+00 -1.3891956841716384e+00 + -2.6388437641764079e-01 1.2249513087523076e+00 -1.4160586495139604e+00 + -1.6039475850498830e-01 1.3161583723445398e+00 -1.4602762029508201e+00 + -5.2441149953400656e-02 1.4121246226544752e+00 -1.5364273150533170e+00 + 5.3756587810238399e-02 1.5072356787064323e+00 -1.6517689750213318e+00 + 1.4606731713647336e-01 1.5929600795363312e+00 -1.8073742598795808e+00 + 1.2974174015619377e-01 1.6439490480670718e+00 -1.9123793171600303e+00 + id 13562 + loc 3.4733879566192627e-01 8.5948988795280457e-02 407 + blend 0.0000000000000000e+00 + interp 4.0904197433579420e-01:3.8756753427186180e-01:3.6838639917038796e-01:2.6206505395158453e-01:1.0495781983697214e+00:3.8670873083271007e-01:1.6624640238285906e+00:3.0055750489706773e-01:2.0579009844813179e+00:3.9483944464434856e-01:3.0202744336969771e+00:4.0903788391605084e-01:3.9807599070878412e+00 + CVs 20 + 4.8472349298543140e-03 3.6810092864780808e-01 -3.4884438468983014e-01 + 1.8916808459805201e-02 5.9246009732966542e-01 -4.8358806393461429e-01 + 4.7139289492714426e-02 7.6163075881341458e-01 -5.5957590294142767e-01 + 9.2702488921277582e-02 9.1435557477216889e-01 -6.3683298457353588e-01 + 1.5753369129570605e-01 1.0461165850935390e+00 -7.1036196590128098e-01 + 2.4245435520717301e-01 1.1534145886166196e+00 -7.7654563488250994e-01 + 3.4810583256615341e-01 1.2350166189288230e+00 -8.3385380777239693e-01 + 4.7644159807802994e-01 1.2914954993095655e+00 -8.8303438792058686e-01 + 6.3025335320004927e-01 1.3233028533260094e+00 -9.2575609056033326e-01 + 8.1085676117555983e-01 1.3304578965692033e+00 -9.6342629995556917e-01 + 1.0165945197467297e+00 1.3135900045883055e+00 -9.9704012594673030e-01 + 1.2432913608183789e+00 1.2743513606328634e+00 -1.0271545138901281e+00 + 1.4859240413142034e+00 1.2152759445476966e+00 -1.0543966828991493e+00 + 1.7395372311400785e+00 1.1415910349039682e+00 -1.0809115499423578e+00 + 1.9990912512707013e+00 1.0635600956277049e+00 -1.1115191205207586e+00 + 2.2595602791449823e+00 9.9371478730042284e-01 -1.1524915789450032e+00 + 2.5135861929961183e+00 9.4156694533072760e-01 -1.2075187459370360e+00 + 2.7454412586092691e+00 9.1344499832913373e-01 -1.2725966326527285e+00 + 2.9447112007395329e+00 9.2228291370384230e-01 -1.3478988456911978e+00 + id 13563 + loc 6.3717222213745117e-01 4.6518689393997192e-01 412 + blend 0.0000000000000000e+00 + interp 4.2169684668520663e-01:3.5171665122093360e-01:6.2021291320379923e-03:3.8128077939369542e-01:9.4333071125638701e-01:3.4936357046507571e-01:1.2970986553840476e+00:3.2761983514471693e-01:1.9907991543471217e+00:4.2169262971673982e-01:2.6746472892639055e+00:4.1249341826948183e-01:3.0055885175104806e+00:3.9988327029277082e-01:3.4207237488337436e+00 + CVs 20 + -6.7648047186473326e-01 1.9116930043962277e-01 1.7363340590577878e-01 + -1.1505491516703774e+00 2.8086295705515979e-01 3.1299098730899877e-01 + -1.5709335096888999e+00 3.3715986014161825e-01 4.3114947520897151e-01 + -2.0032592566815879e+00 3.8227776760512600e-01 5.3737178951060627e-01 + -2.4418832384351461e+00 4.1216038402277066e-01 6.3030131485432950e-01 + -2.8809164569918506e+00 4.2442153562411833e-01 7.0817961312398658e-01 + -3.3164676404160836e+00 4.1831817538053462e-01 7.6927327321750272e-01 + -3.7462596620052540e+00 3.9366537927890510e-01 8.1268384568785468e-01 + -4.1665341393926107e+00 3.5130490036821316e-01 8.3792466821235689e-01 + -4.5730372701420423e+00 2.9361125941062727e-01 8.4480619914255584e-01 + -4.9740442007849319e+00 2.1678860144067125e-01 8.3710583570000163e-01 + -5.3947813300331937e+00 9.7079147602273208e-02 8.3002469891655750e-01 + -5.8362711465823089e+00 -9.4255244977922370e-02 8.5090707383133979e-01 + -6.2631039844148733e+00 -3.5395895451742154e-01 9.1809661877542448e-01 + -6.6514769851548481e+00 -6.5943085168537685e-01 1.0317528622148502e+00 + -6.9923175522332315e+00 -9.8973106671554234e-01 1.1888942619659515e+00 + -7.2780928040315782e+00 -1.3204832302820901e+00 1.3845488127057071e+00 + -7.5063236049643818e+00 -1.6198094915631644e+00 1.5987881458579296e+00 + -7.6806828888969729e+00 -1.8118056829919111e+00 1.7569026779305792e+00 + id 13564 + loc 9.9916063249111176e-02 3.2059851288795471e-01 373 + blend 0.0000000000000000e+00 + interp 4.5856306694052346e-01:3.0668214555484641e-01:3.2365666447073416e-01:3.2159048459005823e-01:9.9785306282334518e-01:3.2389457904782187e-01:1.9459760384525824e+00:4.5855848130985405e-01:2.6133418601504910e+00:3.9426824727195359e-01:3.0967004541254370e+00:3.7146064705058196e-01:3.8516721129527265e+00 + CVs 20 + -3.4725131180814744e-02 1.0236786926209098e+00 2.9352914002977071e-01 + -1.6022315261914249e-01 2.0408101559073151e+00 5.2561424482067809e-01 + -4.1663824812978489e-01 3.0226275787949271e+00 5.9177475144448466e-01 + -8.1081143969194702e-01 3.8949610309712495e+00 3.9388144524313384e-01 + -1.3044587659264597e+00 4.5640942784952561e+00 -8.8246905009915722e-02 + -1.8338673546524227e+00 4.9509839129887556e+00 -8.1019380020572029e-01 + -2.3190991852425218e+00 4.9819953153234886e+00 -1.6913123145448035e+00 + -2.6901682182284836e+00 4.6386314683645473e+00 -2.6077981185795407e+00 + -2.8903949981326527e+00 3.9540901107479054e+00 -3.4426534028945821e+00 + -2.8606728409805346e+00 2.9979347347436085e+00 -4.0898393077333344e+00 + -2.5528462899408577e+00 1.9272291842899405e+00 -4.4612747559372830e+00 + -2.0170511156188513e+00 9.1495261092650093e-01 -4.5859910239181767e+00 + -1.4482570642175858e+00 -5.6120935367998559e-02 -4.6380100145561958e+00 + -9.9583332874396413e-01 -9.5864234401750092e-01 -4.7778073802007004e+00 + -8.2454685715279152e-01 -1.6292825524480552e+00 -5.1811569578355154e+00 + -1.0579157781022426e+00 -1.8609004871709260e+00 -5.6834113484965325e+00 + -1.5097005725014296e+00 -1.8732493175996989e+00 -6.0259743581674492e+00 + -2.0319241909173220e+00 -1.8462764413707684e+00 -6.2135410707764525e+00 + -2.6066917935974674e+00 -1.8383019515768586e+00 -6.4349412158772719e+00 + id 13565 + loc 8.3889722824096680e-01 7.8397285938262939e-01 395 + blend 0.0000000000000000e+00 + interp 4.2550250004262974e-01:4.0478424441041005e-01:4.3027594186207940e-02:3.3783765875634281e-01:7.8419812762151431e-01:4.2549824501762934e-01:1.4294390412734204e+00:3.5186923737277320e-01:2.0608166182578911e+00:2.9443746133460336e-01:2.9920048968641315e+00:3.7959131152814940e-01:3.7143230740494171e+00 + CVs 20 + 4.2904175444140091e-01 2.6316805904457052e-01 -3.9319330072634223e-01 + 7.6671380134018319e-01 4.6719738746786638e-01 -6.9370992746970850e-01 + 1.0990987388823101e+00 6.5200767288751549e-01 -9.7575066986243830e-01 + 1.4744326202571889e+00 8.3876794800212873e-01 -1.2717556494309246e+00 + 1.8992664551773741e+00 1.0184236782656666e+00 -1.5786762757288484e+00 + 2.3750815795374116e+00 1.1785350505887355e+00 -1.8943484600375120e+00 + 2.8986003408365311e+00 1.3055946763014443e+00 -2.2214949951616809e+00 + 3.4633443546612366e+00 1.3822897859552694e+00 -2.5648426962528519e+00 + 4.0610700260324357e+00 1.3842779018587790e+00 -2.9282975359097474e+00 + 4.6773626799037116e+00 1.2816567169398680e+00 -3.3180416173322920e+00 + 5.2804053878532597e+00 1.0502460663485320e+00 -3.7353770977709284e+00 + 5.8267729801495083e+00 6.9014938845489349e-01 -4.1624438050421011e+00 + 6.2887753137757789e+00 2.2201198022726754e-01 -4.5730637189037928e+00 + 6.6596410533344983e+00 -3.3518886408082604e-01 -4.9509614152941115e+00 + 6.9385735123607102e+00 -9.6935823621882067e-01 -5.2852199341840560e+00 + 7.1250647652720644e+00 -1.6681057170655866e+00 -5.5592342892239159e+00 + 7.2223057529356272e+00 -2.4067173183004122e+00 -5.7482606590650036e+00 + 7.2484012630352179e+00 -3.1377876973191312e+00 -5.8355699879382019e+00 + 7.3012423721381170e+00 -3.7069603731363907e+00 -5.8912272349262835e+00 + id 13566 + loc 6.5950906276702881e-01 2.2356070578098297e-02 1068 + blend 0.0000000000000000e+00 + interp 4.3485504430475186e-01:3.1461870778332734e-01:4.7427329360483172e-01:2.8859460580246499e-01:1.3511310943709836e+00:4.3485069575430885e-01:1.9781617346924167e+00:3.5274748939187567e-01:2.4579653377271420e+00:2.9318323020919673e-01:3.4605624605989460e+00:4.1229811796426169e-01:3.9989543264826928e+00 + CVs 20 + -5.4508291247534701e-02 3.9101226047569665e-01 8.5838033925994289e-02 + -1.4911135253341276e-01 7.8760508280295927e-01 2.0655320350098186e-01 + -2.8464993619542772e-01 1.1843098946426855e+00 3.2945419814593485e-01 + -4.7442535708867145e-01 1.5629266943425311e+00 4.3561178632159731e-01 + -7.2958477997755267e-01 1.8893338898220233e+00 5.2058691115264466e-01 + -1.0383033694350017e+00 2.1265512901163892e+00 5.9149472146522231e-01 + -1.3649878571567000e+00 2.2499580645481219e+00 6.6571107905940852e-01 + -1.6612099900315265e+00 2.2596593333971895e+00 7.5929264543135178e-01 + -1.8774320696957043e+00 2.1683781477696744e+00 8.8059661342377860e-01 + -1.8962389036060117e+00 1.9468206363558633e+00 1.0029801711785553e+00 + -1.6255942127386234e+00 1.7341383369191428e+00 9.8311570522842173e-01 + -1.3796571310057957e+00 1.6347040275614977e+00 9.0357692586810234e-01 + -1.1434014152079441e+00 1.5272596101698326e+00 8.2817335189228558e-01 + -8.7248177522039172e-01 1.4443585095571416e+00 7.1877127990673062e-01 + -5.9111245720191885e-01 1.3789502819104595e+00 5.7716991916409077e-01 + -3.0597005480309869e-01 1.2669410606624634e+00 4.1247891909949974e-01 + -3.6363434801194305e-02 1.0746963631417799e+00 2.2394240035216567e-01 + 1.8136301008120242e-01 7.3359874431326866e-01 2.1477865243292010e-02 + 3.3025364825433967e-01 6.2098484407459398e-01 -9.1929269103794592e-02 + id 13567 + loc 2.8340303897857666e-01 3.9139583706855774e-01 1080 + blend 0.0000000000000000e+00 + interp 4.2607729308873321e-01:4.2607303231580235e-01:6.7850694154229840e-02:2.5091182940384216e-01:8.3016099608156724e-01:3.5634710844758510e-01:1.1790674591406303e+00:2.7673685849601759e-01:1.9993226327624662e+00:2.5894147869025702e-01:2.9735812437560787e+00:3.6354681279433337e-01:3.6986863688319516e+00 + CVs 20 + 2.9298799843773171e-01 2.1347370755121597e-01 2.1699742133693475e-01 + 4.1196587209072943e-01 3.4789289564140979e-01 3.5989600533405225e-01 + 4.7441822507981068e-01 4.5459418034211430e-01 4.9327280881629398e-01 + 5.3867860498646591e-01 5.6132221195301724e-01 6.4624457084610976e-01 + 6.0067043806369269e-01 6.6553221241075211e-01 8.1696833096688926e-01 + 6.5678986238939729e-01 7.6474532376952897e-01 1.0031106189122141e+00 + 7.0423455152213821e-01 8.5702058544892556e-01 1.2023403992875972e+00 + 7.4113578952465531e-01 9.4097354352522489e-01 1.4126845300342468e+00 + 7.6665826524002745e-01 1.0153690242297491e+00 1.6326289580690128e+00 + 7.8109290180410396e-01 1.0788051719463394e+00 1.8612889943783779e+00 + 7.8593774335065203e-01 1.1295902827983935e+00 2.0985423578945661e+00 + 7.8386155088561915e-01 1.1655973966744384e+00 2.3448796808358581e+00 + 7.7861991034046341e-01 1.1843529663767742e+00 2.6005121911820037e+00 + 7.7477637487056561e-01 1.1837374128810623e+00 2.8632918202339264e+00 + 7.7697492048214256e-01 1.1624633723618394e+00 3.1286070187318660e+00 + 7.8906824683508237e-01 1.1196985185427959e+00 3.3922322097485225e+00 + 8.1370528816901311e-01 1.0551618100412465e+00 3.6512107554233260e+00 + 8.5220758678823016e-01 9.7118114154614599e-01 3.8996504547859914e+00 + 8.9906106321536672e-01 8.8294336217331182e-01 4.0954359393784392e+00 + id 13568 + loc 9.3022173643112183e-01 5.0244908779859543e-02 403 + blend 0.0000000000000000e+00 + interp 4.0543369264500057e-01:2.9473440304022586e-01:5.5687208783144815e-02:4.0542963830807416e-01:5.0523930456553812e-01:3.1061526400640266e-01:1.0604953842654248e+00:3.0883549016088047e-01:2.0806250734750122e+00:2.9826721768656489e-01:3.1143401042974150e+00 + CVs 20 + -1.2358540108878860e-01 2.0988065630188868e-01 2.9267644122486336e-01 + -2.3158243638946066e-01 4.1640056269317827e-01 5.7448624176712271e-01 + -3.4581895087132586e-01 6.3386185829201214e-01 8.7621686151722178e-01 + -4.7239069192819849e-01 8.5515810264443870e-01 1.2186542693048419e+00 + -5.9952652697874320e-01 1.0620103108358971e+00 1.6215763929099110e+00 + -6.9439136060656192e-01 1.2407580452184956e+00 2.1026463520355385e+00 + -7.0305489217627670e-01 1.3749891092994171e+00 2.6515246164278334e+00 + -5.8061058260758502e-01 1.4386082175891004e+00 3.2193480252174882e+00 + -3.1922114753519137e-01 1.4106515269702822e+00 3.7378624182610909e+00 + 4.7283077998374723e-02 1.2933842243349212e+00 4.1486373747472296e+00 + 4.5731202119028391e-01 1.1095249229579389e+00 4.4212368587087711e+00 + 8.4906749066375842e-01 8.9191613938165593e-01 4.5618260046718131e+00 + 1.2003233931915476e+00 6.7534176554467273e-01 4.6025455069697747e+00 + 1.5238198013132733e+00 4.8938472038306324e-01 4.5758379771595008e+00 + 1.8429609030116774e+00 3.4618231010718303e-01 4.5237204876374078e+00 + 2.2140428580261791e+00 2.1054887508253028e-01 4.5027255412379565e+00 + 2.6706292614932354e+00 4.6180329370755752e-02 4.5529277400715253e+00 + 3.1363229768448480e+00 -8.8335184791290600e-02 4.6782468970437279e+00 + 3.4651957710437169e+00 -7.5319737387875008e-02 4.8311646434100997e+00 + id 13569 + loc 2.9491192102432251e-01 8.9691716432571411e-01 399 + blend 0.0000000000000000e+00 + interp 4.7836154742883596e-01:3.2425900499083032e-01:6.3470503382098697e-02:4.7835676381336167e-01:9.5870555461461493e-01:3.1125288125740319e-01:1.3268032725459404e+00:2.6030640107396558e-01:2.3466060700305902e+00:2.8880969704207099e-01:3.1184257339028152e+00 + CVs 20 + -1.8298188451939226e-01 3.3410320510376235e-01 -1.9838301665924438e-01 + -3.7414324905430518e-01 6.7105038631383973e-01 -4.5115780494421864e-01 + -5.9030484517172721e-01 9.8934100072308806e-01 -7.3253788448128454e-01 + -8.3952269640905497e-01 1.2613272003861000e+00 -1.0302065528325213e+00 + -1.1254346587208863e+00 1.4569420294081199e+00 -1.3349925704655712e+00 + -1.4437318763808307e+00 1.5466764593766482e+00 -1.6278071467670294e+00 + -1.7806874099489496e+00 1.5205634065539950e+00 -1.8882767184996665e+00 + -2.1261560445866379e+00 1.3964280939627314e+00 -2.1077541037419758e+00 + -2.4593904144785572e+00 1.1873097823156629e+00 -2.2872594755939941e+00 + -2.7287651979436340e+00 8.8843306201830230e-01 -2.4290636688402794e+00 + -2.9233501606132299e+00 5.1952802724969227e-01 -2.5455690786154976e+00 + -3.1443355671462427e+00 1.1479265816205492e-01 -2.6752854191783091e+00 + -3.4735001804252481e+00 -3.0619123339230236e-01 -2.8305695251186376e+00 + -3.8690002138106649e+00 -7.3143615960395969e-01 -2.9693422043842554e+00 + -4.2906432791396707e+00 -1.1602792566353617e+00 -3.0736434686554803e+00 + -4.9012411231472637e+00 -1.4861092219596663e+00 -3.1973095283630073e+00 + -5.8944133841298259e+00 -1.3207758209700466e+00 -3.3646187226682684e+00 + -6.7785098697800663e+00 -6.0903212125716211e-01 -3.5039897708060965e+00 + -7.3126661082638202e+00 -5.2824583450635920e-01 -3.7015492599532762e+00 + id 13570 + loc 5.2703797817230225e-01 5.9436243772506714e-01 401 + blend 0.0000000000000000e+00 + interp 4.2055764385735361e-01:3.5747785879911309e-01:1.4005267567246205e-01:4.2055343828091507e-01:8.2849801780960397e-01:2.8860856527171502e-01:1.0955038925662939e+00:4.1663261630251819e-01:1.7651970137124360e+00:3.4366443149897147e-01:2.2400199643473151e+00:3.4011300285415763e-01:2.9525542031267880e+00:3.8797500969720283e-01:3.2769669982898031e+00 + CVs 20 + -1.0026022200184721e-01 3.1433485030369140e-01 -3.2854767292361903e-01 + -1.9103492147585385e-01 6.2424381654112082e-01 -6.6463587919419820e-01 + -2.9280639224729998e-01 9.0860412579572714e-01 -1.0103094604038279e+00 + -4.0794308838474930e-01 1.1451766026938781e+00 -1.3654497504632528e+00 + -5.3877382292421605e-01 1.3245924931656681e+00 -1.7300329864420387e+00 + -6.9900665641941906e-01 1.4491136929165951e+00 -2.0972200003190586e+00 + -9.0247138091142254e-01 1.5236156096277105e+00 -2.4498406835778437e+00 + -1.1510518388097468e+00 1.5521349560638071e+00 -2.7681093623097004e+00 + -1.4380904800578591e+00 1.5399927774711895e+00 -3.0417742971616608e+00 + -1.7599117529431980e+00 1.4933770297157851e+00 -3.2740796929710316e+00 + -2.1148600818955856e+00 1.4150607294012065e+00 -3.4724684690043892e+00 + -2.4978759558090995e+00 1.3017156704631891e+00 -3.6446254852783633e+00 + -2.9032940075864504e+00 1.1420793273805652e+00 -3.7984702212602435e+00 + -3.3284082597285733e+00 9.2362891509693001e-01 -3.9421813371884937e+00 + -3.7775545086677260e+00 6.4718609797297777e-01 -4.0884569018715249e+00 + -4.2521397075837131e+00 3.4053939458027344e-01 -4.2778664908964359e+00 + -4.7106114246145552e+00 8.1021348983306374e-02 -4.6016514075690145e+00 + -5.0860759975859722e+00 -4.7560426487753826e-02 -5.0805346952739194e+00 + -5.5318783333155936e+00 -2.0298331826524896e-01 -5.5611802294913195e+00 + id 13571 + loc 9.7177404165267944e-01 7.6553475856781006e-01 396 + blend 0.0000000000000000e+00 + interp 4.4838789368533916e-01:3.5372840696502950e-01:2.4014666176100996e-01:2.5312191410888746e-01:9.6307488135239017e-01:4.1665058065590188e-01:1.5209929154666408e+00:4.3646701831223977e-01:2.0000304952576378e+00:4.4838340980640234e-01:2.6599412959099462e+00:3.2569142442335247e-01:3.0273469044073380e+00:3.5126757971058981e-01:3.9225886231900375e+00 + CVs 20 + 8.3257147662471609e-01 3.1848399343247552e-01 -3.2505528580265464e-01 + 1.3527019615275762e+00 4.8524836444717823e-01 -5.8653944574880268e-01 + 1.7788864842572527e+00 5.7744308084237106e-01 -8.5183827640593213e-01 + 2.2329647720692822e+00 6.4300780632078480e-01 -1.1522896132775673e+00 + 2.7252144853863860e+00 6.7331792021887416e-01 -1.4854485685229468e+00 + 3.2571641883890772e+00 6.5341864632168689e-01 -1.8533767041953206e+00 + 3.8236383602151607e+00 5.6722407864289104e-01 -2.2581612124191719e+00 + 4.4133962495132826e+00 4.0040807735942718e-01 -2.6976555740659460e+00 + 5.0070983031650638e+00 1.3747087161580440e-01 -3.1561078831717708e+00 + 5.5737060235085174e+00 -2.3043459679047062e-01 -3.6088049879075186e+00 + 6.0768221048442479e+00 -6.9652877829946647e-01 -4.0386222555850599e+00 + 6.4962017719251453e+00 -1.2423820199886777e+00 -4.4385406551437772e+00 + 6.8381107135832098e+00 -1.8500592357385497e+00 -4.8046974008615493e+00 + 7.1199155936892229e+00 -2.5125517792856416e+00 -5.1402310777683846e+00 + 7.3478426541650155e+00 -3.2261943384136202e+00 -5.4531679928100925e+00 + 7.5140136790767178e+00 -3.9766488301845428e+00 -5.7406954484099728e+00 + 7.6098755002677194e+00 -4.7441135228209363e+00 -5.9854945804726611e+00 + 7.6446103913623160e+00 -5.4926162791244284e+00 -6.1711652553360707e+00 + 7.7735266185365059e+00 -6.0764348718974421e+00 -6.3673365337515158e+00 + id 13572 + loc 7.0260155200958252e-01 2.2708515822887421e-01 382 + blend 0.0000000000000000e+00 + interp 3.6283726796788063e-01:3.5992042477419178e-01:5.5786171818153396e-01:3.6283363959520099e-01:1.3752275807499696e+00:3.5124122936698704e-01:1.9791340689649140e+00:3.1478971067883738e-01:2.5030853443574324e+00:3.2958463423905160e-01:3.6077568736499850e+00 + CVs 20 + -8.1152226098269431e-01 1.4895445153112857e-01 5.1528211266502555e-01 + -1.3350229568475949e+00 2.1353813537676386e-01 9.1880487685317713e-01 + -1.7947817174222735e+00 2.7363555424253422e-01 1.3044050641842484e+00 + -2.2759412169122011e+00 3.6883638689215187e-01 1.7008663887497939e+00 + -2.7883201642075943e+00 4.9406946980074018e-01 2.1015833628963922e+00 + -3.3458802425666221e+00 6.2956826674678834e-01 2.5038611082678877e+00 + -3.9629877797515443e+00 7.3372738293172624e-01 2.9084542773445072e+00 + -4.6400867059393036e+00 7.4810255576685325e-01 3.3048736257979825e+00 + -5.3495087035049211e+00 6.2043812244831975e-01 3.6650278665762266e+00 + -6.0410538195670762e+00 3.2808041563488333e-01 3.9606824326420704e+00 + -6.6607083015896498e+00 -1.1919201588572648e-01 4.1796467026077408e+00 + -7.1615248670184872e+00 -6.8602873733758596e-01 4.3205400706794235e+00 + -7.5085931470007754e+00 -1.3132204943675685e+00 4.3842420218569531e+00 + -7.6955822076715723e+00 -1.9318507585777764e+00 4.3826342272425682e+00 + -7.7609941192262362e+00 -2.5033661118603283e+00 4.3479755925882060e+00 + -7.7679349636325172e+00 -3.0308694836192744e+00 4.3103842380100019e+00 + -7.7689262493287394e+00 -3.5304345560163850e+00 4.2794120127549631e+00 + -7.7765616895182550e+00 -3.9959999615792388e+00 4.2651481832452758e+00 + -7.7545460191619933e+00 -4.3600525889485038e+00 4.3140787542128880e+00 + id 13573 + loc 9.7303643822669983e-02 3.8679853081703186e-01 380 + blend 0.0000000000000000e+00 + interp 4.0416822687224224e-01:4.0416418518997355e-01:4.6697629961435283e-01:2.5289514116861145e-01:9.9998583753891324e-01:3.4338091787773400e-01:1.5443703332323762e+00:2.5096718379286803e-01:2.0409243600116116e+00:2.9804897220076698e-01:2.6390672753885034e+00:3.7550551473912558e-01:3.0417014159806568e+00:3.2671210270874518e-01:3.8557564663222790e+00 + CVs 20 + -3.5574239458068918e-01 2.6879704984131125e-01 5.0044029422035197e-01 + -5.8293014116149089e-01 4.4839878679431727e-01 9.3571542311851019e-01 + -7.6230637007962831e-01 5.8814862152429548e-01 1.3739460522062921e+00 + -9.3171524248499304e-01 7.1901024450914419e-01 1.8451732735268589e+00 + -1.1059513406558095e+00 8.5086471197663993e-01 2.3445467601415739e+00 + -1.3063930840235645e+00 9.8357306496247854e-01 2.8697209686060976e+00 + -1.5587677660759498e+00 1.1015734021091785e+00 3.4242951334327070e+00 + -1.8878077830241682e+00 1.1775139924122990e+00 4.0032673378320345e+00 + -2.3017392190368957e+00 1.1790950959203137e+00 4.5806263857795475e+00 + -2.7781925362362401e+00 1.0790277362625020e+00 5.1214342588129611e+00 + -3.2747713699480894e+00 8.5683092706969743e-01 5.6014399952499190e+00 + -3.7468126493004092e+00 4.9433696653398274e-01 6.0021115100053155e+00 + -4.1528386406496800e+00 -3.0935331384682740e-03 6.3028697214112857e+00 + -4.4859764553788857e+00 -5.7635122586289800e-01 6.5088004362319358e+00 + -4.7889106183927321e+00 -1.1410569240575561e+00 6.6650729209912569e+00 + -5.0797837018624570e+00 -1.6194118742082657e+00 6.8280407264718779e+00 + -5.3113835896768791e+00 -1.9573516095656833e+00 7.0409218672868832e+00 + -5.4541786738898423e+00 -2.1848289135448744e+00 7.2948385731493683e+00 + -5.6435337475760843e+00 -2.5373040073773931e+00 7.5005887984153219e+00 + id 13574 + loc 1.6552108526229858e-01 8.6032235622406006e-01 378 + blend 0.0000000000000000e+00 + interp 3.4827339494568571e-01:2.8893377539747028e-01:3.3385728820854388e-01:3.4725148539636636e-01:9.8154162094658637e-01:2.9369182106719460e-01:1.7940290195538593e+00:3.4826991221173625e-01:2.7591640337707459e+00:2.6513069074229734e-01:3.6115121229615950e+00 + CVs 20 + 5.0150498332029736e-01 3.3720988106392336e-01 3.1263228636353685e-01 + 9.2695553904057681e-01 5.7972715312905909e-01 5.4527626020165776e-01 + 1.3530019451149005e+00 7.7265195942376097e-01 7.4000928501907071e-01 + 1.8095559501109182e+00 9.4787874845726139e-01 9.2056568081103507e-01 + 2.2832429169036672e+00 1.1178264752741474e+00 1.0972312426846702e+00 + 2.7627263090393654e+00 1.2874078972923140e+00 1.2843257201881759e+00 + 3.2444493600493693e+00 1.4491763813676211e+00 1.4929540396888756e+00 + 3.7272637356038483e+00 1.5934433098869651e+00 1.7303815626592232e+00 + 4.2098135430238415e+00 1.7129893822219970e+00 2.0038554754681566e+00 + 4.6923684747050789e+00 1.7990566383168822e+00 2.3206695171707330e+00 + 5.1781289892947022e+00 1.8356868686062269e+00 2.6848833491597084e+00 + 5.6711099127827209e+00 1.7933358381279938e+00 3.0965304412963297e+00 + 6.1566129494410546e+00 1.6326715993851688e+00 3.5380211378252806e+00 + 6.5776436362970276e+00 1.3487402534861723e+00 3.9523654753168627e+00 + 6.8747493455736173e+00 1.0050223877625810e+00 4.2810095512948116e+00 + 7.0361459652250229e+00 6.6538805542033241e-01 4.5313700019064687e+00 + 7.0878429831728056e+00 3.3992856394733462e-01 4.7616929492024278e+00 + 7.1113932172091010e+00 -1.5418416740651253e-03 5.0121992004123346e+00 + 7.3052986658819448e+00 -3.8757212770677452e-01 5.2434150988864454e+00 + id 13575 + loc 7.6394444704055786e-01 4.3668833374977112e-01 376 + blend 0.0000000000000000e+00 + interp 4.5008806608700869e-01:4.0350392010730901e-01:2.1692977583881412e-01:2.9648366681786004e-01:9.6505753207267242e-01:4.5008356520634785e-01:1.6894431982482152e+00:3.2761585658042408e-01:2.3618884496138484e+00:3.4173523667722150e-01:3.0154765739976321e+00:3.1935326915144202e-01:3.7527023949761285e+00 + CVs 20 + 1.6297018874611074e-01 3.0276542766486930e-01 -6.2416527054277182e-01 + 1.9454824105633067e-01 4.7653288346873718e-01 -1.1775584842604541e+00 + 1.2520721658628356e-01 5.2886737253666727e-01 -1.6950137522214410e+00 + -1.0408580578350701e-02 5.3793063182373824e-01 -2.2128684716609692e+00 + -1.6507230289878244e-01 5.6816376312999028e-01 -2.7275623061971426e+00 + -2.8875833731511685e-01 6.4094755884517740e-01 -3.2321997756989749e+00 + -3.5234991021091544e-01 7.5601452408830472e-01 -3.7374773976707836e+00 + -3.4069795690584681e-01 9.1036879340839416e-01 -4.2456347702225461e+00 + -2.5301640860323438e-01 1.0915821005128798e+00 -4.7365078822593940e+00 + -1.0818610136503715e-01 1.2775244100418730e+00 -5.1860922273245311e+00 + 6.9845358084816400e-02 1.4499997977166847e+00 -5.5858256465948104e+00 + 2.7102242980623270e-01 1.6063237349996258e+00 -5.9472565708806213e+00 + 5.1198590090738305e-01 1.7508193404857832e+00 -6.2981749985811550e+00 + 8.3723643922787350e-01 1.8642652572096079e+00 -6.6659817453713259e+00 + 1.2858836879636657e+00 1.9078243888279407e+00 -7.0356092491522455e+00 + 1.8434712527119659e+00 1.8924672883341387e+00 -7.2942372090134393e+00 + 2.4946906307701475e+00 1.8985447111052016e+00 -7.3198374135766002e+00 + 3.2152908751591376e+00 1.7649917272124949e+00 -7.1519976317623071e+00 + 3.3747154875476912e+00 1.3512046762029866e+00 -7.2237716395089606e+00 + id 13576 + loc 1.7577920854091644e-01 1.4422051608562469e-02 409 + blend 0.0000000000000000e+00 + interp 3.2797609731216715e-01:3.0310800221625489e-01:3.1255998581529387e-02:1.0297865327569082e-01:1.0114160582882519e+00:3.0314481921506414e-01:2.1664160749807202e+00:3.2797281755119406e-01:3.0628671552689806e+00 + CVs 20 + -1.2134456310538178e-01 1.8357496962507827e-01 -2.7104357774299137e-01 + -2.5044969181822013e-01 3.4047934601546848e-01 -5.2004110463237341e-01 + -3.6843540503608979e-01 4.8148626296763664e-01 -7.7243164812944487e-01 + -4.7081380874874224e-01 6.0831840320544317e-01 -1.0335984081560419e+00 + -5.6785384649578297e-01 7.1932873022055233e-01 -1.3021764786747130e+00 + -6.6677865534733205e-01 8.1735635336363344e-01 -1.5813525005459153e+00 + -7.6740612612543402e-01 9.1124023344290817e-01 -1.8765512644193487e+00 + -8.6532075502500827e-01 1.0063239858422270e+00 -2.1944563849895764e+00 + -9.5567548731966556e-01 1.0941669141220998e+00 -2.5428420489581178e+00 + -1.0340354432259609e+00 1.1586693571511857e+00 -2.9245811353889075e+00 + -1.0961605435077599e+00 1.1867917502947958e+00 -3.3326413985561318e+00 + -1.1421080499831040e+00 1.1687509697137308e+00 -3.7552940670488528e+00 + -1.1772022870454275e+00 1.0933846143534738e+00 -4.1845193915706584e+00 + -1.2041038340374031e+00 9.4892327062586967e-01 -4.6136343749717383e+00 + -1.2188131308456127e+00 7.3242955576429303e-01 -5.0273756916030656e+00 + -1.2127875054869424e+00 4.5850373029449853e-01 -5.3992291765763936e+00 + -1.1809102935564624e+00 1.5519641899434555e-01 -5.6991541362540596e+00 + -1.1268513558812887e+00 -1.5091391390349251e-01 -5.8996588122059741e+00 + -1.0532966184595369e+00 -4.7550760520093815e-01 -5.9425996499225580e+00 + id 13577 + loc 1.0863596946001053e-01 3.4454014897346497e-01 400 + blend 0.0000000000000000e+00 + interp 4.8574328681438023e-01:4.4852817428020719e-01:7.3952518513676746e-01:4.6825924161896748e-01:1.0442934155225188e+00:4.3649177690433522e-01:1.9824724473047579e+00:3.1873342685853540e-01:2.8339110027640575e+00:4.8573842938151213e-01:3.0488324553706727e+00:3.8628629864528158e-01:3.9777645618140252e+00 + CVs 20 + -6.0723778436097935e-02 2.4070294043906601e-01 1.4403198701962061e-01 + -1.5004002370334030e-01 4.9532976512218896e-01 3.0931863939358512e-01 + -2.6969059601207124e-01 7.4897108729821726e-01 4.6866373567579328e-01 + -4.1824746922203848e-01 9.9268151447290587e-01 6.1231724699565049e-01 + -5.9436932415332633e-01 1.2224877032971031e+00 7.4602794625990398e-01 + -7.9654621112163371e-01 1.4317637168107558e+00 8.7691130455935007e-01 + -1.0244551127150139e+00 1.6105014368586426e+00 1.0117361829402927e+00 + -1.2773201165059516e+00 1.7466502260093282e+00 1.1548692163746315e+00 + -1.5516284359998687e+00 1.8287363694209335e+00 1.3067647201316257e+00 + -1.8400399428159804e+00 1.8499782086565566e+00 1.4642586267446482e+00 + -2.1319486523196907e+00 1.8121322586025692e+00 1.6215165283083897e+00 + -2.4160434135053310e+00 1.7274765717583367e+00 1.7700644450062561e+00 + -2.6880085209333564e+00 1.6146369371960754e+00 1.9024431026388517e+00 + -2.9561283812379813e+00 1.4845249983817335e+00 2.0182278343623263e+00 + -3.2261390119428013e+00 1.3412423511765388e+00 2.1178139276231125e+00 + -3.4648983795101467e+00 1.2223228611012513e+00 2.1878070692284006e+00 + -3.5555079908365164e+00 1.2223898260314952e+00 2.1959097895387831e+00 + -3.3789286946490633e+00 1.2799950355444047e+00 2.1407850123078456e+00 + -3.6169115827953009e+00 1.3710386971226252e+00 2.1674792005265302e+00 + id 13578 + loc 2.1900954842567444e-01 6.8860834836959839e-01 374 + blend 0.0000000000000000e+00 + interp 4.7372445854829209e-01:3.5799877619726417e-01:7.9542023779548121e-01:4.4140344610101673e-01:9.3891135357496625e-01:3.6191084073023311e-01:1.9310204334987109e+00:3.0509610055953140e-01:2.5873512389157254e+00:4.7371972130370665e-01:3.0002657243868960e+00:3.4495505963063317e-01:3.8550241716043434e+00 + CVs 20 + -6.5157398596781813e-01 3.0424075981028131e-01 -7.5606732847856850e-02 + -1.1421039515641085e+00 4.9885229740694897e-01 -7.6529861689006440e-02 + -1.5980264316496027e+00 6.3611267418851236e-01 -3.1769523159453195e-02 + -2.0842329808971738e+00 7.5975466394928870e-01 3.1034764794312331e-02 + -2.6002796733285747e+00 8.9992448871443276e-01 8.0528042347023709e-02 + -3.1424122009991633e+00 1.0711058770063893e+00 8.1235115172973438e-02 + -3.7136269731782261e+00 1.2531831424118001e+00 4.9183929854645925e-05 + -4.3081330984365946e+00 1.4020053891186517e+00 -1.8732446227643695e-01 + -4.9024237751858779e+00 1.4730151227734423e+00 -4.8702954005980970e-01 + -5.4675798694118711e+00 1.4299428221585497e+00 -8.8325412287791039e-01 + -5.9823078996186565e+00 1.2426705850174362e+00 -1.3344274955467474e+00 + -6.4268933879978452e+00 8.9329531538231866e-01 -1.7743666282155064e+00 + -6.7754988498425046e+00 3.9260932267908988e-01 -2.1314168081900737e+00 + -7.0239410085978253e+00 -2.1508045627791894e-01 -2.3633491814794434e+00 + -7.2260320141875347e+00 -8.8246552450563209e-01 -2.4846487780151958e+00 + -7.4687759031103917e+00 -1.5823298891932862e+00 -2.5437966542562167e+00 + -7.8211824211933134e+00 -2.2697262415710746e+00 -2.5629996551840408e+00 + -8.2844826293416531e+00 -2.8757492113046323e+00 -2.5218418820139936e+00 + -8.7304544069582377e+00 -3.4260505275353439e+00 -2.4847424902272870e+00 + id 13579 + loc 2.9564374685287476e-01 6.6527640819549561e-01 1078 + blend 0.0000000000000000e+00 + interp 3.8537944088525866e-01:2.9575080418344624e-01:5.4107971307381986e-02:3.8537558709084985e-01:9.9962395788341996e-01:3.0630836462152511e-01:1.8412984079544934e+00:2.9551076564388878e-01:2.6892890874848416e+00:3.7498260760962182e-01:3.4534910404218504e+00 + CVs 20 + 1.2982162006365905e-01 3.0769087655310023e-01 6.2720108492122506e-02 + 2.6168661592204395e-01 5.9460457937941613e-01 6.7279437792509694e-02 + 4.0052415847879147e-01 8.7974226847016834e-01 3.7610639751189778e-02 + 5.4978891844947286e-01 1.1633082632064848e+00 -2.1165905669783158e-02 + 7.1118813059056329e-01 1.4291852500253284e+00 -1.2033551922920405e-01 + 8.8377592690059992e-01 1.6570744323040896e+00 -2.7201411096955996e-01 + 1.0588055768387119e+00 1.8243319484573011e+00 -4.8583777825721808e-01 + 1.2163122884731874e+00 1.9114348018238645e+00 -7.6250632163234755e-01 + 1.3301200908130961e+00 1.9055201935598975e+00 -1.0900724594531184e+00 + 1.3786238932935964e+00 1.7987532115237890e+00 -1.4444076607955578e+00 + 1.3519926290012323e+00 1.5869385240203797e+00 -1.7912858019488511e+00 + 1.2627614552818938e+00 1.2798903969141002e+00 -2.1011631993863014e+00 + 1.1441957546014729e+00 9.1556564374711691e-01 -2.3817354995982321e+00 + 1.0284161621526302e+00 5.8901832698219203e-01 -2.6938158764306519e+00 + 9.5580695508414615e-01 5.2030786267639528e-01 -3.1090896522613223e+00 + 1.0083336253463500e+00 9.8549684590275821e-01 -3.4591047984320920e+00 + 1.2389419246544890e+00 1.8212119126763326e+00 -3.2192868375607042e+00 + 1.4145795469255944e+00 2.2667112953266773e+00 -2.1848657661314976e+00 + 1.5001340343020824e+00 2.5644545696762964e+00 -2.1778198787753613e+00 + id 13580 + loc 3.8941287994384766e-01 2.4175388738512993e-02 375 + blend 0.0000000000000000e+00 + interp 5.4095575879848423e-01:2.7531071053212980e-01:2.2672296558634386e-01:4.3652176032224893e-01:1.0294744913570426e+00:4.1686361988605136e-01:1.6706538785533964e+00:5.4095034924089624e-01:2.0420035400648411e+00:3.6302689252774922e-01:2.9832265758249603e+00:4.9520532084512181e-01:3.2809214407719862e+00:5.2943543739423515e-01:3.8516682249764451e+00 + CVs 20 + -8.4088902476825919e-02 5.6838526663693001e-01 7.1886415905207957e-01 + -1.2636352034856566e-01 1.0205124701167450e+00 1.4081028612906161e+00 + -2.0681680281641590e-01 1.3666979081334178e+00 2.1322972571430201e+00 + -4.3382356937542377e-01 1.6551826694077121e+00 2.7916310353938099e+00 + -8.6420418952735800e-01 1.8915257401492471e+00 3.1483357195979700e+00 + -1.3285504375992396e+00 1.9892530323537148e+00 3.0518991879801587e+00 + -1.6335491980817018e+00 1.9296687961434249e+00 2.7060575161330349e+00 + -1.8295391893880919e+00 1.7501943134854918e+00 2.2724736575852136e+00 + -1.9392889440129784e+00 1.4437433229795169e+00 1.7882272844796228e+00 + -1.9580472877196460e+00 1.0228539279805391e+00 1.3072469807599738e+00 + -1.8995996633548242e+00 5.2112073916477675e-01 8.7289982674164857e-01 + -1.7760051691716876e+00 -3.3289715556558130e-02 4.7453963056985254e-01 + -1.5989927157853168e+00 -6.1347209112378687e-01 4.6771717460954709e-03 + -1.4512470015297863e+00 -1.1424558699939176e+00 -7.6260118252079367e-01 + -1.5047956946198231e+00 -1.3706734337351405e+00 -1.8750528816429690e+00 + -1.8622279840392628e+00 -1.1475832187099093e+00 -3.0009140176951550e+00 + -2.5039288391730654e+00 -5.2972105771842792e-01 -3.8453608962756034e+00 + -3.2974940448704708e+00 2.8908051596254869e-01 -4.2133679541093567e+00 + -4.1105968459446904e+00 1.1070497970424347e+00 -4.1887968768136368e+00 + id 13581 + loc 5.2192056179046631e-01 3.2089996337890625e-01 393 + blend 0.0000000000000000e+00 + interp 4.7730751158381529e-01:2.9135479141566989e-01:4.9026647549077440e-01:4.7730273850869948e-01:9.9958341506448500e-01:4.7515169134602397e-01:1.3602359524891454e+00:4.1278852015437562e-01:1.9334382187912169e+00:2.8364093465923379e-01:2.2930974627703833e+00:2.8820687828550923e-01:3.3372764485486526e+00:4.1878500002256058e-01:3.9848582591381829e+00 + CVs 20 + 2.2592057086057454e-01 3.3213071085781476e-01 1.5724644305546087e-01 + 4.3723531387816150e-01 6.9153097049428114e-01 2.9253235989434678e-01 + 6.1316221479153366e-01 1.0846887273159771e+00 4.0093245638284364e-01 + 7.5954066115223640e-01 1.5109072097654848e+00 5.0194947236441734e-01 + 9.0015735897793625e-01 1.9503947296002178e+00 6.4175843196734594e-01 + 1.0426856786115892e+00 2.3763569201530901e+00 8.5274572851786345e-01 + 1.1791328743887708e+00 2.7835289567575225e+00 1.1467150709752871e+00 + 1.3090368969858959e+00 3.1707826797852130e+00 1.5390608939661310e+00 + 1.4501683557781555e+00 3.5126279797588267e+00 2.0375739502285124e+00 + 1.6274960081476562e+00 3.7653620656390721e+00 2.6278696687289260e+00 + 1.8564691413182917e+00 3.8846791749912688e+00 3.2723595986066365e+00 + 2.1341412467797207e+00 3.8408945824320564e+00 3.9172036764266922e+00 + 2.4392803813130444e+00 3.6268889475353738e+00 4.5079500932829175e+00 + 2.7436494793415962e+00 3.2580110818610857e+00 4.9981301628272243e+00 + 3.0208782012264201e+00 2.7751110136415087e+00 5.3429397406202694e+00 + 3.2443633518042989e+00 2.2492599773344191e+00 5.5063467792418317e+00 + 3.4090918701321060e+00 1.7437804282508405e+00 5.4921900673202639e+00 + 3.5581654084508858e+00 1.3064506414231225e+00 5.3070898655567955e+00 + 3.7424292163426527e+00 1.0583112817013631e+00 4.9065880824546655e+00 + id 13582 + loc 1.5727326273918152e-01 7.7367871999740601e-01 415 + blend 0.0000000000000000e+00 + interp 3.7079974299729990e-01:3.6145055045726904e-01:6.4927677295931341e-01:2.6531440507811804e-01:1.2437025987052754e+00:2.9641825991049481e-01:1.8156609943583883e+00:2.3591932164920093e-01:2.1119665593641415e+00:3.7079603499986996e-01:3.0824214886729808e+00:3.0418572421069101e-01:3.9147750603484237e+00 + CVs 20 + 4.4181205500846765e-01 2.3983592646736024e-01 1.7687660810389613e-01 + 8.0300343963418686e-01 3.7715043368255174e-01 2.5838554985909223e-01 + 1.1528026214938680e+00 4.7538068199601036e-01 3.3977323856085706e-01 + 1.5225680507976969e+00 5.5927119403516490e-01 4.6558365526820700e-01 + 1.9043823708145557e+00 6.2099359347213234e-01 6.4326225314300300e-01 + 2.2860323737447850e+00 6.5389652822109245e-01 8.7978839229812023e-01 + 2.6518237340785245e+00 6.5407133393906314e-01 1.1770809415581140e+00 + 2.9877139820094434e+00 6.2211605354419175e-01 1.5279366746354368e+00 + 3.2848024982061457e+00 5.6384118892799839e-01 1.9198968932869456e+00 + 3.5380083930698722e+00 4.8838666984873313e-01 2.3395789036722690e+00 + 3.7527394037385391e+00 4.0387291992485430e-01 2.7636537096564546e+00 + 3.9621509386280804e+00 3.1025521907151887e-01 3.1468928420261282e+00 + 4.2133910901031930e+00 2.0191184256112127e-01 3.4370861668565960e+00 + 4.5121148469433727e+00 8.3651536634271828e-02 3.6169752257086309e+00 + 4.8261337324593896e+00 -3.2434836207785089e-02 3.7169648470883789e+00 + 5.1354523209955412e+00 -1.3980180073299930e-01 3.7602813390286220e+00 + 5.4328102643363296e+00 -2.3020116525878409e-01 3.7398786177922307e+00 + 5.7079883330770329e+00 -2.8953754911127927e-01 3.6517695988104175e+00 + 5.9578868490973065e+00 -3.1305274659273907e-01 3.7120834183150917e+00 + id 13583 + loc 6.9344371557235718e-01 6.7098423838615417e-02 402 + blend 0.0000000000000000e+00 + interp 4.4008109442571780e-01:3.1797062736034343e-01:9.5449945668283354e-03:4.4007669361477358e-01:8.1310406885005815e-01:3.0881858139768192e-01:1.1736944033695405e+00:2.9506416838187205e-01:2.0534500350151195e+00:2.6369676328127922e-01:3.0026104918969976e+00:4.1200762902322807e-01:3.5126158150029672e+00 + CVs 20 + 3.1948632751475453e-01 3.1325837180929872e-01 1.4644083295002880e-01 + 5.9318473411868666e-01 6.1622364788880679e-01 3.0223065240309238e-01 + 8.2527870830527172e-01 8.9625672344130858e-01 4.5956777044610747e-01 + 1.0185073506957294e+00 1.1465204501642701e+00 6.0841195265620607e-01 + 1.1899494975489611e+00 1.3761464468761828e+00 7.4828420614225588e-01 + 1.3769076861430132e+00 1.5984313597973641e+00 8.8456349654769695e-01 + 1.6228209388957184e+00 1.8114089541616019e+00 1.0168039700747411e+00 + 1.9609249425386750e+00 1.9922981231414501e+00 1.1440677864518227e+00 + 2.3987548324946419e+00 2.1127007852391197e+00 1.2868877431250205e+00 + 2.9158934008182671e+00 2.1383231401496325e+00 1.4829022301883399e+00 + 3.4098400425730482e+00 2.0054915844144587e+00 1.7464555670497490e+00 + 3.7246825154301328e+00 1.7054382197926994e+00 2.0316137663307616e+00 + 3.8640771036738863e+00 1.3052884436729311e+00 2.2879939011388322e+00 + 3.9578211847886453e+00 8.6094473922435455e-01 2.5001429762313512e+00 + 4.1327344726645014e+00 4.1734014172300116e-01 2.6652340294012493e+00 + 4.4667656386834000e+00 2.3174050839328442e-02 2.7838072136308862e+00 + 4.9394510359020654e+00 -3.0137495353394905e-01 2.8772221704315930e+00 + 5.4535810928755950e+00 -5.6572510643191010e-01 2.9825579126798654e+00 + 5.8613647816596277e+00 -7.5341966802868732e-01 3.1170695488827600e+00 + id 13584 + loc 9.7269527614116669e-02 8.1191718578338623e-01 373 + blend 0.0000000000000000e+00 + interp 6.6226823705111337e-01:3.8562363987977560e-01:7.4220305129389930e-02:3.0381562771782766e-01:8.7268613059481659e-01:6.6226161436874287e-01:1.1418075466778390e+00:3.7306213697849089e-01:2.1010801305264639e+00:2.9087262999784624e-01:2.8597511286328592e+00:3.7092713858835574e-01:3.6324988379480967e+00 + CVs 20 + -3.5776993085315401e-01 5.6972118301620511e-01 -1.6261540168073629e-01 + -6.1647656346704827e-01 1.1285788143764734e+00 -3.4610825465725031e-01 + -7.6483037560919542e-01 1.6694631495502283e+00 -5.4733080737260753e-01 + -8.2793348930219290e-01 2.1852322470481775e+00 -7.6957959897949846e-01 + -8.4711705253183089e-01 2.6659704045600954e+00 -1.0237538114349105e+00 + -8.6942644835535021e-01 3.1040067937380864e+00 -1.3198763720257669e+00 + -9.3209832928660830e-01 3.4918623233628492e+00 -1.6627605537515719e+00 + -1.0594359759381800e+00 3.8192621667344913e+00 -2.0436833118045752e+00 + -1.2636482318541913e+00 4.0760538004307607e+00 -2.4361858552933500e+00 + -1.5401222558246619e+00 4.2606302403400624e+00 -2.7987320174178105e+00 + -1.8708275849764635e+00 4.3870882546114647e+00 -3.0979480703918827e+00 + -2.2593543363195527e+00 4.4708952366190138e+00 -3.3245405118887681e+00 + -2.7445091024188639e+00 4.4980895383593342e+00 -3.4713586822035127e+00 + -3.3351987769852069e+00 4.4293491228875963e+00 -3.5249141638566237e+00 + -4.0038886307951218e+00 4.2384641940609900e+00 -3.4912892397901620e+00 + -4.7223488846461219e+00 3.9295244631514357e+00 -3.3930197084814102e+00 + -5.4394264559983885e+00 3.5428106874458987e+00 -3.2727525709134646e+00 + -6.0746956395205602e+00 3.1010960213624879e+00 -3.1350554604876386e+00 + -6.5530411576118128e+00 2.5720423786670357e+00 -2.9122764243399653e+00 + id 13585 + loc 3.6550781130790710e-01 3.1069543957710266e-01 412 + blend 0.0000000000000000e+00 + interp 4.4199722915318546e-01:4.4199280918089395e-01:2.7791378706915337e-01:3.7452144779529334e-01:8.1055081859712375e-01:3.2293571809909516e-01:1.0925146151426792e+00:3.2157251631928196e-01:1.9293660479828045e+00:2.8703135318161721e-01:2.4297882938524586e+00:3.1723215230249213e-01:3.0387262508123944e+00:4.3965009353532652e-01:3.9074363975825270e+00 + CVs 20 + -1.7696497053383609e-01 1.4941860729542228e-01 -4.9671412277950872e-01 + -3.4969846003706712e-01 2.1110094783394659e-01 -8.4394612282060399e-01 + -5.2448804368502899e-01 2.3686024081478230e-01 -1.1648866984349411e+00 + -6.9827035246123148e-01 2.5602622002660858e-01 -1.5234379992183147e+00 + -8.6394780157549800e-01 2.6511978320149293e-01 -1.9194024312857418e+00 + -1.0110573319498257e+00 2.6146761303222477e-01 -2.3499718955479398e+00 + -1.1268518815229742e+00 2.4415549363719768e-01 -2.8090703625728297e+00 + -1.2012857866740760e+00 2.1288571808612167e-01 -3.2868283129375180e+00 + -1.2294857208249306e+00 1.6788846084988407e-01 -3.7713135707229108e+00 + -1.2102786940204169e+00 1.1091894367333111e-01 -4.2499853286917340e+00 + -1.1520351846756474e+00 4.1534150669877201e-02 -4.7064049476499408e+00 + -1.0884056375824107e+00 -5.3108238882563663e-02 -5.1215956509055651e+00 + -1.0654396910133708e+00 -1.9133596526633667e-01 -5.4874352766692285e+00 + -1.0917514337523810e+00 -3.7265745870775069e-01 -5.8170579607041448e+00 + -1.1461767424666114e+00 -5.8645653529790254e-01 -6.1288193894214933e+00 + -1.2198938057854578e+00 -8.2111780586761851e-01 -6.4193628043926445e+00 + -1.3146670039493620e+00 -1.0599789883094717e+00 -6.6751213856588301e+00 + -1.4249694852656465e+00 -1.2876683406978398e+00 -6.8938496537319001e+00 + -1.4578118958572903e+00 -1.4661479550221128e+00 -7.1377757585418031e+00 + id 13586 + loc 8.9073276519775391e-01 1.9698348641395569e-01 403 + blend 0.0000000000000000e+00 + interp 4.5058995722798478e-01:3.3712721103653143e-01:4.0800185117622134e-01:2.8014025025168787e-01:1.6369358295638734e+00:4.5058545132841255e-01:2.1580654760157052e+00:3.2878577232451739e-01:2.7583246723395352e+00:2.7767342126347538e-01:3.2054373974734789e+00:3.5526205083818568e-01:3.9834491171669364e+00 + CVs 20 + 3.7291507095811915e-02 4.7575951205701544e-02 5.4547062875796720e-02 + 5.3743889983906508e-02 1.2086500835957448e-01 1.1058029326281346e-01 + 6.3192819611952389e-02 2.0769192806508202e-01 1.6116944104232839e-01 + 7.2813764657257946e-02 3.0108470973471013e-01 2.0376399939578296e-01 + 8.3778261533231563e-02 4.0155805884157458e-01 2.3975431941413555e-01 + 9.8515236043864862e-02 5.1016104345220437e-01 2.7112312653584608e-01 + 1.2067563084848987e-01 6.2829056780948167e-01 3.0013598668724362e-01 + 1.5528276777617384e-01 7.5680680812012346e-01 3.2871358698230596e-01 + 2.0759290429968114e-01 8.9466918682142871e-01 3.5659289634628843e-01 + 2.8012415929971646e-01 1.0393176077237898e+00 3.8009380176741725e-01 + 3.7155216248927503e-01 1.1892706105964317e+00 3.9397446684066040e-01 + 4.7919302824578996e-01 1.3452457504169546e+00 3.9420795666719177e-01 + 5.9922141078651292e-01 1.5083201739103109e+00 3.7809160477946324e-01 + 7.2366939852346124e-01 1.6782011504941170e+00 3.4348302439789258e-01 + 8.4092314826028935e-01 1.8529104407689574e+00 2.8974740979810670e-01 + 9.4252857595498574e-01 2.0297319833472196e+00 2.1995588586625420e-01 + 1.0270646636618586e+00 2.2046798122492950e+00 1.3990838783027074e-01 + 1.0977864181200898e+00 2.3724064489628325e+00 5.5394646681802495e-02 + 1.1968150650870670e+00 2.5243489882704466e+00 -5.0903257587784689e-02 + id 13587 + loc 6.1410528421401978e-01 1.7626637220382690e-01 380 + blend 0.0000000000000000e+00 + interp 4.4935843563035932e-01:3.4867349866583941e-01:1.9946003744643004e-01:2.8035235038021722e-01:9.2123803221491374e-01:3.4654247146945638e-01:1.2446181654096851e+00:3.1182962523215813e-01:2.0793876304479886e+00:3.7452239710896768e-01:2.8360580151853840e+00:4.4935394204600304e-01:3.3006100418555206e+00:3.8320835298777595e-01:3.9126962234195135e+00 + CVs 20 + 5.0406436516430830e-01 2.5603858183010098e-01 6.1003178633243216e-01 + 9.0678854044895740e-01 4.0488326263693258e-01 1.0479681018170401e+00 + 1.2904679836700788e+00 5.0845218050401841e-01 1.4454364425913213e+00 + 1.6898793304726019e+00 5.9636327000954670e-01 1.8636180063886925e+00 + 2.0951975785348682e+00 6.6327849911773162e-01 2.3069861515511936e+00 + 2.5008443232282915e+00 6.9887488218634330e-01 2.7825459352154009e+00 + 2.9038505900194913e+00 6.8285275070796314e-01 3.2928238643534447e+00 + 3.2950783149328924e+00 5.8746941877759795e-01 3.8304242852936956e+00 + 3.6596397868714194e+00 3.8749128080038608e-01 4.3782980686930379e+00 + 3.9836902639474046e+00 7.0045220108417183e-02 4.9051431625421325e+00 + 4.2514288459926304e+00 -3.5863733032963774e-01 5.3629669744602761e+00 + 4.4384712185982389e+00 -8.7030197721168490e-01 5.7018815238111236e+00 + 4.5294383583407249e+00 -1.4224075052159395e+00 5.8990085364842342e+00 + 4.5504274429807188e+00 -1.9865409085390864e+00 5.9837432068149807e+00 + 4.5551836939513386e+00 -2.5693767246014434e+00 6.0193918428732616e+00 + 4.5991299671702084e+00 -3.1827359113079092e+00 6.0558308313032114e+00 + 4.7354190818312851e+00 -3.8134859260387768e+00 6.1061297440784319e+00 + 4.9746133710583997e+00 -4.3997815711508572e+00 6.1444755303037004e+00 + 5.1394963010266936e+00 -4.8017483103146059e+00 6.1411223331916531e+00 + id 13588 + loc 9.1933083534240723e-01 7.8936152160167694e-02 395 + blend 0.0000000000000000e+00 + interp 4.7518825618019589e-01:3.0863555556718431e-01:2.6818053397192121e-02:3.6984499234637486e-01:9.8920236794938088e-01:2.5616627968951799e-01:1.8414702945536348e+00:4.7518350429763412e-01:2.0848978951339281e+00:2.5806150838883135e-01:3.0190100949263403e+00:3.8218581383697603e-01:3.5947925228803594e+00 + CVs 20 + -3.7373001579973308e-01 1.7009203004045620e-01 2.5292921648727790e-01 + -6.7238732915357158e-01 3.1926656523397939e-01 5.2265755656628543e-01 + -9.6048600075933299e-01 4.7215132340360255e-01 8.0703796097067915e-01 + -1.2754610338404908e+00 6.4520814227531087e-01 1.0989558321542181e+00 + -1.6246016855373351e+00 8.3681106119428561e-01 1.3854731608496695e+00 + -2.0123300718226464e+00 1.0341745255183845e+00 1.6548720982985530e+00 + -2.4419855051478909e+00 1.2171523599410756e+00 1.9022584398341400e+00 + -2.9130207716487821e+00 1.3645116832661330e+00 2.1226568395031884e+00 + -3.4164686126619079e+00 1.4596358447381266e+00 2.3118740322280522e+00 + -3.9361153767030812e+00 1.4910017564648648e+00 2.4734815796353633e+00 + -4.4537874354193248e+00 1.4475208723009918e+00 2.6160609512579858e+00 + -4.9523034475543364e+00 1.3139984746935420e+00 2.7439426135823091e+00 + -5.4137164461802438e+00 1.0820342446785216e+00 2.8580528507663350e+00 + -5.8257121152279163e+00 7.8199263029135402e-01 2.9640880919295394e+00 + -6.1903208943336674e+00 4.8665018597069487e-01 3.0756310032465466e+00 + -6.5089324201308116e+00 2.5595821269638952e-01 3.2053132053017714e+00 + -6.7709004876810814e+00 1.0249222916423983e-01 3.3602304022814948e+00 + -6.9699492582498177e+00 7.2054018533442843e-03 3.5371952550191708e+00 + -7.1625443644302944e+00 -1.2421200174142388e-01 3.7318177767448870e+00 + id 13589 + loc 8.4168195724487305e-02 7.3770207166671753e-01 400 + blend 0.0000000000000000e+00 + interp 4.6707397899012443e-01:3.4348452638808546e-01:9.8840270675489750e-01:2.9127664620801896e-01:1.9788506907756320e+00:2.9809940804123536e-01:2.6034580248115899e+00:4.6706930825033455e-01:3.2252915742341042e+00:3.0062711150610777e-01:3.9753323803914808e+00 + CVs 20 + -2.2842409664252275e-01 2.5509510331006385e-01 3.2269612997628871e-02 + -4.7799575813989748e-01 5.4797733787858138e-01 4.7378669537374046e-02 + -7.4453347663855285e-01 8.7388683011325041e-01 1.7918198712574829e-02 + -1.0200046538106240e+00 1.2177453609579452e+00 -7.8991980340151424e-02 + -1.2946456417190164e+00 1.5585500346065129e+00 -2.5408559166960798e-01 + -1.5585255477930042e+00 1.8762771547364596e+00 -5.0624956882499483e-01 + -1.8041395593843041e+00 2.1572776291570874e+00 -8.2958521492865667e-01 + -2.0255208444765840e+00 2.3939818800917032e+00 -1.2196026653361109e+00 + -2.2152105947898866e+00 2.5818778127952347e+00 -1.6742518560224271e+00 + -2.3591397969357719e+00 2.7131751886407249e+00 -2.1818343446415955e+00 + -2.4427281892935668e+00 2.7779949740520884e+00 -2.7011451269690792e+00 + -2.4741391235530408e+00 2.7826404124414434e+00 -3.1752805623164653e+00 + -2.4787930711210482e+00 2.7470825575463627e+00 -3.5793312213952091e+00 + -2.4758475888394091e+00 2.6875082845116416e+00 -3.9147570512644014e+00 + -2.4706994868995937e+00 2.6160223267864549e+00 -4.1832521736725337e+00 + -2.4563214315845419e+00 2.5418966752466612e+00 -4.3922479671555585e+00 + -2.4261601583359291e+00 2.4621581155753454e+00 -4.5638860909449930e+00 + -2.4004997300884314e+00 2.3562081930017449e+00 -4.7269014065833002e+00 + -2.4520320303428536e+00 2.1968773544688061e+00 -4.8888870404241498e+00 + id 13590 + loc 8.1587505340576172e-01 4.4795957207679749e-01 1080 + blend 0.0000000000000000e+00 + interp 3.5758094567206472e-01:2.6708690324520240e-01:9.0029938320419811e-01:2.5575829620252188e-01:1.6782991831622636e+00:3.5757736986260802e-01:2.2650462615211229e+00:2.7120422188475291e-01:3.0190074383953589e+00:2.9538794764776816e-01:3.9873591963129646e+00 + CVs 20 + -8.8987166233354786e-02 3.2171504262048961e-01 -1.6707570887174167e-01 + -1.6247780965281960e-01 5.4107568857113186e-01 -2.1127649126013873e-01 + -2.2269263204778231e-01 7.4692089261295436e-01 -2.1272750524496059e-01 + -2.5212358194409124e-01 9.4483994375059177e-01 -2.1435563290263498e-01 + -2.4402543374403696e-01 1.1171721370289278e+00 -2.1829512114787381e-01 + -1.8668149238953674e-01 1.2458278171150696e+00 -2.4393811374360264e-01 + -5.9592761531109623e-02 1.3372028862809309e+00 -3.4687904970524386e-01 + 1.3052267203350842e-01 1.4965207980376869e+00 -6.0954593163431836e-01 + 2.5050094555055080e-01 1.8818335882891617e+00 -9.1770523895147493e-01 + 2.3267809863273964e-01 2.3380447838246181e+00 -1.0037116178483072e+00 + 1.7695829689180004e-01 2.6878827753391619e+00 -8.7522285417638113e-01 + 1.6576606037819488e-01 2.8827023984047160e+00 -6.2907880744840861e-01 + 2.3826863503010154e-01 2.9155495241568516e+00 -3.7611644314373116e-01 + 3.6162274329810418e-01 2.8302570095474668e+00 -2.4358107252075278e-01 + 4.6235293141306794e-01 2.6527292888436609e+00 -4.0413797052461309e-01 + 5.7046060310470703e-01 2.1003244587142200e+00 -9.6328102948763139e-01 + 1.0869507144551380e+00 6.3442537459897586e-01 -9.6147127747345174e-01 + 1.6902657601556410e+00 1.6325491760047686e-01 3.9376037520729762e-01 + 1.7503039254075070e+00 2.7833512373633856e-01 2.8112924502649650e-01 + id 13591 + loc 4.2264214158058167e-01 4.5993289351463318e-01 396 + blend 0.0000000000000000e+00 + interp 4.8602919035172387e-01:3.5493715821119487e-01:2.5009426177865501e-03:4.7372958595445780e-01:4.0281101883026893e-01:4.2499305043433744e-01:1.0419421410620766e+00:4.8087370467845980e-01:1.9082177518531758e+00:3.2399585580104168e-01:2.0779552556444387e+00:4.8602433005982038e-01:2.6758850904586340e+00:4.4248883337146200e-01:3.0170413344317639e+00:4.4433997336588732e-01:3.6348956398834589e+00 + CVs 20 + -3.6316684343593086e-01 2.6031087188419277e-01 -6.3521205897902644e-01 + -6.9002734646526631e-01 3.7932090190261619e-01 -1.0773205933955010e+00 + -1.0203519474485636e+00 4.3869647580907251e-01 -1.5059237587595953e+00 + -1.3528444488643476e+00 4.7617307778514378e-01 -1.9977568097373188e+00 + -1.6652101090811398e+00 4.8339078049617978e-01 -2.5497357445164863e+00 + -1.9404206460610278e+00 4.5444861605500098e-01 -3.1481835342723561e+00 + -2.1728068173919977e+00 3.8554406346298220e-01 -3.7765282709890404e+00 + -2.3626013436070101e+00 2.6902057894054376e-01 -4.4186747018877739e+00 + -2.5129922975224357e+00 9.3825187540915955e-02 -5.0556814110654917e+00 + -2.6372760178106662e+00 -1.5047245568358392e-01 -5.6676558803281401e+00 + -2.7565339729209990e+00 -4.7480788693157017e-01 -6.2412548481118924e+00 + -2.8830743765070377e+00 -8.9001926208907323e-01 -6.7689063148307049e+00 + -3.0136984253448769e+00 -1.3943574577927027e+00 -7.2359568092300721e+00 + -3.1461358964392088e+00 -1.9737053690450512e+00 -7.6230706196387636e+00 + -3.2822774565525048e+00 -2.6115240278170284e+00 -7.9091450802897878e+00 + -3.4133585095267547e+00 -3.2848062033540315e+00 -8.0742870182475510e+00 + -3.5195133576095934e+00 -3.9589631422465255e+00 -8.1110213016660175e+00 + -3.5934939677403683e+00 -4.5895313601160606e+00 -8.0410211223314896e+00 + -3.6823824209024645e+00 -5.0826420029741453e+00 -7.9947327716891010e+00 + id 13592 + loc 8.5750430822372437e-02 4.2721047997474670e-01 401 + blend 0.0000000000000000e+00 + interp 4.0968497314336866e-01:3.2340132190554055e-01:5.8215947204237606e-01:3.3030448056451106e-01:1.0882235206165725e+00:2.8213422438356628e-01:1.9274964778034167e+00:3.5180362848250762e-01:2.5302494244325082e+00:4.0968087629363725e-01:3.0009403205765164e+00:2.9314261185359142e-01:3.6672300363378536e+00 + CVs 20 + -2.7005897503240334e-01 1.3124389565151723e-01 1.6927792297506883e-01 + -5.2167898083031661e-01 2.7641859115352341e-01 3.1733607571089328e-01 + -7.5729002480508523e-01 4.2559573673664053e-01 4.5134361005332219e-01 + -9.8143765283185669e-01 5.7434346310290740e-01 5.7545303642505208e-01 + -1.1970546852651442e+00 7.1989611697773248e-01 6.8730745082032774e-01 + -1.4087810166494619e+00 8.6242653477852649e-01 7.9058536272539737e-01 + -1.6217666716666483e+00 1.0031297528601075e+00 9.0120460661102775e-01 + -1.8384285456959493e+00 1.1384589367390010e+00 1.0423334841186409e+00 + -2.0525307189892561e+00 1.2595886467935160e+00 1.2327743748125395e+00 + -2.2508345692240437e+00 1.3562582519472177e+00 1.4812288867555774e+00 + -2.4230017984239853e+00 1.4225458437044123e+00 1.7820792916297410e+00 + -2.5691394950331032e+00 1.4569194833110493e+00 2.1199257654065762e+00 + -2.6986356832581624e+00 1.4552439028342894e+00 2.4748705141681313e+00 + -2.8263370306017572e+00 1.4099148017799472e+00 2.8165142100432221e+00 + -2.9576632200885680e+00 1.3269272589551773e+00 3.1116761360437639e+00 + -3.0882194372932665e+00 1.2205350369935695e+00 3.3527103378210650e+00 + -3.2079393642722502e+00 1.0969877536523569e+00 3.5617112449095378e+00 + -3.2268892778165590e+00 9.8094444361161770e-01 3.7719579986793610e+00 + -2.8988739427020431e+00 9.9110531521400780e-01 3.9527854570727854e+00 + id 13593 + loc 6.1144101619720459e-01 4.4878000020980835e-01 376 + blend 0.0000000000000000e+00 + interp 4.7630655722944731e-01:2.9571484215731980e-01:3.1465151212822273e-01:3.4173523667722150e-01:1.0042741239397539e+00:3.3563368229443730e-01:1.7739326132217590e+00:2.6227203800822901e-01:2.6388235136970177e+00:3.2475558902797580e-01:3.0844852473818101e+00:4.7630179416387503e-01:3.8664677632111069e+00 + CVs 20 + 1.3035678682462015e-01 3.5603229002016212e-01 -5.4495812956830758e-01 + 1.4874786612865032e-01 6.0615418196182569e-01 -9.7621314716744501e-01 + 8.3758605804524378e-02 7.5447784122181893e-01 -1.3690397510766146e+00 + -4.4982661286859127e-02 8.2571856866901205e-01 -1.7524681199684884e+00 + -2.2558115213613711e-01 8.6823914257034496e-01 -2.1269134230914042e+00 + -4.3836099580767246e-01 9.3422826503008172e-01 -2.5184315889634901e+00 + -6.3260783169959711e-01 1.0469453640768933e+00 -2.9636113318317441e+00 + -7.4032246110801125e-01 1.2061309515408076e+00 -3.4693638044778297e+00 + -7.0510998806491965e-01 1.4127551716116731e+00 -3.9977946638499038e+00 + -4.9564863124650449e-01 1.6680252394791637e+00 -4.4849955426627810e+00 + -1.1579602015284318e-01 1.9584422584444166e+00 -4.8895082011410294e+00 + 4.0921806994367849e-01 2.2541103028766019e+00 -5.2113515254641829e+00 + 1.0506046707054291e+00 2.5003511502970328e+00 -5.4569917025153147e+00 + 1.7609756740981253e+00 2.6291754275743782e+00 -5.6105886307485600e+00 + 2.4882332781647287e+00 2.6115759414159294e+00 -5.6426542359387586e+00 + 3.2549101840086054e+00 2.4067958160757312e+00 -5.5027460636315615e+00 + 4.1100802471146762e+00 1.7944800959596745e+00 -5.1615413068062894e+00 + 4.7442896306004982e+00 5.8640520713867783e-01 -4.8425673618786718e+00 + 4.8370935620203577e+00 2.5542098740993335e-02 -4.7143765954894059e+00 + id 13594 + loc 3.1776610016822815e-01 2.3323443531990051e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8437996309456801e-01:2.7281944829569948e-01:6.1559731364235759e-05:3.8437611929493709e-01:4.5547329423010441e-01:3.7596461798744552e-01:9.8988911000726021e-01:2.8264515907293941e-01:1.9108447904979631e+00:3.0074009103299898e-01:2.3231799958872257e+00:3.0569312177837638e-01:2.9940695269627380e+00 + CVs 20 + -1.9051851754648319e-01 2.1618060332457448e-01 -2.5787031726997411e-01 + -3.8511275631296560e-01 4.4664027198485023e-01 -4.7412899424114685e-01 + -5.9310805560921531e-01 6.7767643602355354e-01 -6.8346505031135929e-01 + -8.2241520015224512e-01 9.0289431706794676e-01 -8.9244525944436492e-01 + -1.0811775458489961e+00 1.1223988749277565e+00 -1.0869591034330957e+00 + -1.3743390072087598e+00 1.3282926953642251e+00 -1.2479873865739290e+00 + -1.7019125892244373e+00 1.5035026762889716e+00 -1.3562201171894275e+00 + -2.0551081029399945e+00 1.6249431862029124e+00 -1.3989311305804502e+00 + -2.4123732200424080e+00 1.6665997386279985e+00 -1.3730836525047829e+00 + -2.7445926298661165e+00 1.6125481177022882e+00 -1.2827606737445694e+00 + -3.0389377951138283e+00 1.4645361935934083e+00 -1.1393151660569947e+00 + -3.3170674592019394e+00 1.2250670983945584e+00 -9.6177577493364153e-01 + -3.6096149795038732e+00 8.9039428186305269e-01 -7.7726736065315327e-01 + -3.9405325637186004e+00 4.6036066154318600e-01 -6.2662247060616838e-01 + -4.3380497098801714e+00 -7.2433735665112131e-02 -5.8044032987612448e-01 + -4.8173786429618035e+00 -7.2453470725080615e-01 -7.8883912270561996e-01 + -5.2733802943916501e+00 -1.3977986771896420e+00 -1.4353693789679136e+00 + -5.5200890499564146e+00 -1.8487383390733436e+00 -2.2745074973517116e+00 + -5.6823594103274688e+00 -2.1076096251419778e+00 -2.5617168140888147e+00 + id 13595 + loc 2.7364995330572128e-02 3.4947488456964493e-02 1069 + blend 0.0000000000000000e+00 + interp 4.8545161463591180e-01:3.0916137578601866e-01:6.2208444508771166e-04:3.9878214290711400e-01:8.2710581707818809e-01:3.0428713505707966e-01:1.1142049470033053e+00:3.6182630213178063e-01:1.7957892768148067e+00:4.0490488981766826e-01:2.0858530190565645e+00:4.8544676011976545e-01:2.6981449043755310e+00:3.9273226467750244e-01:2.9998670421548703e+00:4.5209441117942845e-01:3.6814133313458344e+00 + CVs 20 + -2.1831556064737614e-01 3.0627883211564599e-01 -4.2986252707755940e-02 + -4.0172842388458796e-01 6.1045959537382044e-01 -6.8297990562503075e-02 + -5.4698366974717738e-01 9.0465443323236205e-01 -7.9997753995274368e-02 + -6.6508474325815237e-01 1.1662525682928537e+00 -1.0397893806881764e-01 + -7.7128463046021523e-01 1.3782629243348694e+00 -1.6125408367223326e-01 + -8.7371627721018474e-01 1.5390911704697543e+00 -2.5048299971499211e-01 + -9.6566503865654352e-01 1.6489739678706874e+00 -3.4375631242842131e-01 + -1.0480300842041970e+00 1.7244123266980620e+00 -3.9922657128303751e-01 + -1.1489269498160095e+00 1.7931680817845528e+00 -4.2500166034636611e-01 + -1.2501725298359401e+00 1.8388769232450048e+00 -4.9773263281441049e-01 + -1.3225876827813066e+00 1.8295963200192098e+00 -6.1042960699088678e-01 + -1.4314581750810538e+00 1.7960833085374242e+00 -7.3762821035626369e-01 + -1.5625330521718921e+00 1.7594702364499830e+00 -9.2575635975511283e-01 + -1.5559928938775771e+00 1.6687373316978871e+00 -1.0836783593364649e+00 + -1.3779929512905729e+00 1.4891197453865019e+00 -1.0679137259236509e+00 + -1.0818583213779704e+00 1.1501642943742099e+00 -9.0754854736494406e-01 + -6.8060020829435608e-01 5.1605675200820034e-01 -7.7313067985183626e-01 + -2.7264549707857000e-01 -2.0617228045018188e-01 -1.0020254690523247e+00 + -3.2340442801442548e-01 -2.0210065436609459e-01 -1.2131718624536711e+00 + id 13596 + loc 1.7739622294902802e-01 9.8687905073165894e-01 409 + blend 0.0000000000000000e+00 + interp 4.3817291980445722e-01:2.8803253725249367e-01:2.4634096002353445e-02:4.3816853807525918e-01:9.1016974894553471e-01:5.3583043086947495e-02:1.7164094713042035e+00:2.6582132630900451e-01:3.0020662390772888e+00 + CVs 20 + 6.5110461872657743e-01 2.5297904275160388e-01 -2.4817302911188607e-01 + 1.1848591149849246e+00 4.2733130767469207e-01 -4.8814216126525878e-01 + 1.7289841628974123e+00 5.8565798525262425e-01 -7.4284346050552208e-01 + 2.3151519884345908e+00 7.3122640814908457e-01 -1.0355542401998716e+00 + 2.9047090964802482e+00 8.2919092037297482e-01 -1.3882058637351535e+00 + 3.4542442925862633e+00 8.5090737553592555e-01 -1.8136670811888649e+00 + 3.9377184558714085e+00 7.8294393304582988e-01 -2.3014432512636249e+00 + 4.3610623922480878e+00 6.2184924156445831e-01 -2.8225537524557303e+00 + 4.7465036298440335e+00 3.6251724001066066e-01 -3.3461760068001576e+00 + 5.1069270093331571e+00 -8.8935484771721640e-03 -3.8464070830633750e+00 + 5.4380149457532081e+00 -4.9199583767905075e-01 -4.3034532847148883e+00 + 5.7237064455304427e+00 -1.0293365092381332e+00 -4.7181515273865120e+00 + 5.9573509254090951e+00 -1.5485663686903122e+00 -5.1210655858989771e+00 + 6.1395395342841539e+00 -2.0171663242395521e+00 -5.5467659009629022e+00 + 6.2789253011269546e+00 -2.4440240653631382e+00 -6.0226139027440544e+00 + 6.4049420293036174e+00 -2.8915589998529190e+00 -6.5782812215540023e+00 + 6.5639857066772489e+00 -3.4253659646649344e+00 -7.2214568410164723e+00 + 6.7773194108322059e+00 -4.0455058275350035e+00 -7.9150734296253074e+00 + 6.9629783956074736e+00 -4.7225762137033884e+00 -8.6155382508896032e+00 + id 13597 + loc 2.6279273629188538e-01 3.6993253231048584e-01 378 + blend 0.0000000000000000e+00 + interp 4.9012129521345527e-01:4.8563380751087626e-01:7.0115162144845244e-01:4.3055787432802345e-01:1.0334075937948155e+00:4.9011639400050316e-01:1.6081773221460143e+00:4.3647052203885656e-01:2.1509550150063359e+00:3.0419976088644129e-01:3.0001449064973520e+00:4.2134570118590720e-01:3.4440134781473910e+00:2.9972973321299323e-01:3.9997453988772440e+00 + CVs 20 + 3.1450645291332679e-01 2.6663375957119545e-01 -5.2340367515103636e-01 + 5.4431551603029693e-01 4.6472055141036961e-01 -1.0012562336988684e+00 + 7.3223934821952552e-01 6.3163116157604537e-01 -1.4612090004249529e+00 + 9.0609119970481244e-01 7.9779805975110751e-01 -1.9136550426633623e+00 + 1.0806822249355070e+00 9.6453637895314781e-01 -2.3458081227840779e+00 + 1.2667651421820336e+00 1.1202726333091853e+00 -2.7508851338350468e+00 + 1.4746504191232046e+00 1.2549851257744460e+00 -3.1316520221481712e+00 + 1.7114707034142156e+00 1.3608227932311849e+00 -3.4872498562891963e+00 + 1.9749472563746540e+00 1.4302217329562836e+00 -3.8095170376941523e+00 + 2.2536345737019969e+00 1.4584960706014449e+00 -4.0894369738831218e+00 + 2.5354519527981356e+00 1.4452525801994787e+00 -4.3247601175978501e+00 + 2.8150292234374250e+00 1.3908796000089625e+00 -4.5241365988905091e+00 + 3.0930457952501587e+00 1.2874089256737515e+00 -4.7041141517916376e+00 + 3.3669411520576524e+00 1.1098501812733921e+00 -4.8695876140439918e+00 + 3.6247375662696948e+00 8.4473471693394231e-01 -5.0084176948520227e+00 + 3.8682340164840472e+00 5.1741834928010677e-01 -5.1193916970869067e+00 + 4.1147507793881406e+00 1.6782010960643179e-01 -5.2205080634049921e+00 + 4.3674388392994032e+00 -1.7747457651752230e-01 -5.3553783655838796e+00 + 4.6094176747974709e+00 -5.0753841511943865e-01 -5.5770033670598709e+00 + id 13598 + loc 4.9644219875335693e-01 5.6659400463104248e-02 374 + blend 0.0000000000000000e+00 + interp 3.9182161715309416e-01:2.7931140368183877e-01:3.8646144167553109e-01:3.2530507435205486e-01:1.0823981729814192e+00:2.5339963536443211e-01:1.7266234651195669e+00:3.4600747327573000e-01:2.0858010060943815e+00:3.2439602463818451e-01:3.0000575438352994e+00:3.9181769893692264e-01:3.8921091812866782e+00 + CVs 20 + -4.2549780855355490e-01 4.5121933938836362e-01 7.4807103063780278e-01 + -6.6313317480201450e-01 7.2054909572016612e-01 1.3540234005941436e+00 + -7.6313926632575269e-01 8.2984882298499851e-01 1.9487714387023292e+00 + -7.8637059987985625e-01 8.3740677888427928e-01 2.5658045280072344e+00 + -7.9663419560769722e-01 8.0392901063386346e-01 3.1975719021020859e+00 + -8.6654573268194635e-01 7.5213305169313349e-01 3.8432427145565100e+00 + -1.0530886623222266e+00 6.6989303288915547e-01 4.4914427446985172e+00 + -1.3839596846204318e+00 5.5085770159942693e-01 5.1144871244486882e+00 + -1.8505264602472908e+00 4.0502601395677917e-01 5.6723590002087150e+00 + -2.4054404736137358e+00 2.4234644848029063e-01 6.1370416141346560e+00 + -2.9807422868061941e+00 6.6981273263095886e-02 6.5040953046458938e+00 + -3.5193878846156204e+00 -1.2059720425532916e-01 6.7800363828271424e+00 + -4.0106104828589597e+00 -3.2969879504427180e-01 6.9833276910161377e+00 + -4.4700198045866504e+00 -5.8807115355766948e-01 7.1277945351291754e+00 + -4.8589235104015360e+00 -9.0799609655058511e-01 7.2118771071935122e+00 + -5.1230518581577069e+00 -1.2780422371612352e+00 7.2797924912464431e+00 + -5.2130620260033105e+00 -1.6234527319706191e+00 7.4056709940710954e+00 + -5.1901541012552528e+00 -1.8332792805709621e+00 7.5769005461098153e+00 + -5.1191552146039641e+00 -2.1066430729202765e+00 7.7445432852239779e+00 + id 13599 + loc 5.1388502120971680e-01 4.6068355441093445e-01 375 + blend 0.0000000000000000e+00 + interp 5.4514675274550273e-01:4.0704068956015005e-01:1.3729614381007160e-01:3.5402127509067677e-01:7.3997262075594650e-01:5.4514130127797533e-01:1.0966332826980092e+00:3.8175986312937971e-01:1.8136125665136911e+00:3.5869356770368066e-01:2.4248388385527355e+00:5.4424283873931256e-01:3.0000015398821520e+00:3.2785396803604305e-01:3.8552626416582738e+00 + CVs 20 + 4.9805568919986815e-01 4.0767594860631878e-01 7.5691226588315619e-02 + 9.4713467704373988e-01 6.8798074981571333e-01 9.9594371668777409e-02 + 1.4141836965880215e+00 8.2818256136420909e-01 6.1691617685393940e-02 + 1.9010582254342623e+00 8.6862693029721449e-01 -3.5041033604919947e-02 + 2.3786795187152032e+00 8.8597483899224316e-01 -1.7915434227967603e-01 + 2.8440792891779831e+00 9.3437425155553511e-01 -3.4878583788763839e-01 + 3.3187711921115541e+00 1.0295719131904371e+00 -5.0514887011398379e-01 + 3.8156744476609683e+00 1.1718032140993466e+00 -6.0214491992896513e-01 + 4.3232262427134245e+00 1.3646290100526897e+00 -6.0422762116592055e-01 + 4.8156342859639114e+00 1.6100987592500444e+00 -4.8673658857983781e-01 + 5.2715700825959146e+00 1.8877257425770162e+00 -2.4266018063837791e-01 + 5.6849739590806827e+00 2.1564365951805229e+00 1.2024883416185350e-01 + 6.0465089120276083e+00 2.3603831998207645e+00 5.9019131518097634e-01 + 6.3298645214605855e+00 2.4394982208231109e+00 1.1341909834876753e+00 + 6.5013124152471091e+00 2.3781758211448780e+00 1.6918774849015195e+00 + 6.5120422394013930e+00 2.2168074716860899e+00 2.2071948753059991e+00 + 6.3296529516183684e+00 1.9939812911178274e+00 2.6597844441790466e+00 + 6.0651355185484981e+00 1.6512524022925779e+00 3.0083196748780576e+00 + 6.0364707388374601e+00 1.2733878278574964e+00 2.9694066824512895e+00 + id 13600 + loc 5.7315635681152344e-01 8.4735798835754395e-01 402 + blend 0.0000000000000000e+00 + interp 5.1286231870624721e-01:5.1285719008306019e-01:2.7028839255993831e-01:2.8252948703451591e-01:1.0391008952095215e+00:3.8210777802657148e-01:1.8029192300712618e+00:4.9551865946672641e-01:2.0986102436326437e+00:4.4583753177240643e-01:2.7190801093501435e+00:3.2341766287680807e-01:3.0402344520218225e+00:3.9624956694160413e-01:3.8744291790991827e+00 + CVs 20 + -1.3734673780184209e-01 1.3325019458461890e-01 -7.9768694658983244e-02 + -2.3984251669300383e-01 2.7784297551379855e-01 -1.5747593207386532e-01 + -3.1254444666918202e-01 4.2369728375560844e-01 -2.3367709331336495e-01 + -3.6208246414932027e-01 5.6247908231662969e-01 -3.0929251398662383e-01 + -3.8707901806466216e-01 6.9511986961219940e-01 -3.8212994083214519e-01 + -3.9140470149158402e-01 8.2910855160824604e-01 -4.5452027255581262e-01 + -3.8010595582831619e-01 9.7177373110075882e-01 -5.3327687881963881e-01 + -3.5693738118863416e-01 1.1236128640533860e+00 -6.2776210994173509e-01 + -3.2503976348593971e-01 1.2791972195726202e+00 -7.4658914001010035e-01 + -2.8823424726619917e-01 1.4340281557608172e+00 -8.9715648194473574e-01 + -2.5104956399543232e-01 1.5863074651724633e+00 -1.0861750659989216e+00 + -2.2074122865425017e-01 1.7277761770373858e+00 -1.3172068145874658e+00 + -2.0424852832304363e-01 1.8470857484010132e+00 -1.5940885003303999e+00 + -2.0692935232172882e-01 1.9226424679172909e+00 -1.9182729149846218e+00 + -2.3959707734497704e-01 1.9394107163838092e+00 -2.2944663149271571e+00 + -3.4342802886738888e-01 1.9224785470985719e+00 -2.7189471876548508e+00 + -5.7300826915551795e-01 1.9229767878376922e+00 -3.1527538557200963e+00 + -9.3127672697638597e-01 1.9329514356674100e+00 -3.5314332611094699e+00 + -1.2231479059155310e+00 1.8306410369388715e+00 -3.6739533413884100e+00 + id 13601 + loc 7.0196700096130371e-01 1.7507922649383545e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6678209796531003e-01:2.8541951203830862e-01:1.7833946809138634e-02:3.3408652757114371e-01:7.7531832620640673e-01:2.6825918923746939e-01:1.8389454491350623e+00:3.2793488999453418e-01:2.7425242014072797e+00:3.6677843014433037e-01:3.2365425691389538e+00 + CVs 20 + -1.7258427770525933e-01 1.3119547627012892e-01 1.1038869201854200e-01 + -3.2863779341729726e-01 2.4784080408569084e-01 2.1947472837832041e-01 + -4.7193442954657489e-01 3.4466779296527172e-01 3.1980461604298138e-01 + -6.0890810871768886e-01 4.2213391309702608e-01 4.0377026509962943e-01 + -7.3635632383777672e-01 4.8492912634827090e-01 4.6055671859411851e-01 + -8.5008089578405999e-01 5.4279891683478609e-01 4.7592392113780380e-01 + -9.5373266336858131e-01 6.1181811599552505e-01 4.4518129301740406e-01 + -1.0627514488917955e+00 7.0707470964375929e-01 3.8183311201207798e-01 + -1.1937956042958269e+00 8.3552874784543707e-01 3.0799739673278453e-01 + -1.3581119882614490e+00 9.9534887497030633e-01 2.4657404203822869e-01 + -1.5632935554779268e+00 1.1746107455675681e+00 2.1969272481989599e-01 + -1.8128474977286482e+00 1.3534384907485073e+00 2.4454721905784965e-01 + -2.1041217454861947e+00 1.5099025780825854e+00 3.3088307938754130e-01 + -2.4276260950812625e+00 1.6284965181225726e+00 4.8069768311150168e-01 + -2.7623263900595081e+00 1.7129687856745162e+00 6.9090752386690046e-01 + -3.0764804872861196e+00 1.8105221717108744e+00 9.6353822700484382e-01 + -3.3408321345652294e+00 2.0163766340173885e+00 1.3477820055087975e+00 + -3.5903455739008048e+00 2.2891948750399496e+00 1.9710773688021324e+00 + -3.8292014996466723e+00 2.0401198594385406e+00 1.9860305324534042e+00 + id 13602 + loc 2.8705325722694397e-01 1.6184696555137634e-01 380 + blend 0.0000000000000000e+00 + interp 4.3121401603245058e-01:3.6004739727461582e-01:1.1040153529302310e-01:3.4816083976820483e-01:1.0066095160544146e+00:2.4589385688204571e-01:1.6058251466447184e+00:3.7395855355009699e-01:2.0792346248528606e+00:3.4721931302750614e-01:2.9025687111364782e+00:4.3120970389229030e-01:3.5795633850071940e+00 + CVs 20 + -4.3965328814548421e-01 1.5927195747154158e-01 5.4413174413347298e-01 + -7.1755919034646554e-01 2.1809911076231869e-01 9.7662675463903725e-01 + -9.3999805318563401e-01 2.4430244811988255e-01 1.4067037771880055e+00 + -1.1568096288261331e+00 2.7397062185304377e-01 1.8777586334053631e+00 + -1.3875749765552756e+00 3.1204798563645508e-01 2.3809213548207180e+00 + -1.6537645121637823e+00 3.5071796033243463e-01 2.8998362533139819e+00 + -1.9732498080867260e+00 3.6751638288166788e-01 3.4243577749734717e+00 + -2.3518967775162749e+00 3.3875773264114772e-01 3.9422116263968889e+00 + -2.7828575349807538e+00 2.4218106142147455e-01 4.4253111951844133e+00 + -3.2405232718160732e+00 5.9355113280275873e-02 4.8334604727856867e+00 + -3.6784280698168916e+00 -2.0950857933079359e-01 5.1406373928452753e+00 + -4.0534144673954513e+00 -5.4951991900139463e-01 5.3339561851901198e+00 + -4.3499850224463312e+00 -9.4161657947981636e-01 5.4182335259831849e+00 + -4.5930564984858009e+00 -1.3855448812176210e+00 5.4276194294803979e+00 + -4.8203588694424759e+00 -1.8884310135444542e+00 5.4093022706686877e+00 + -5.0541832530503124e+00 -2.4403000480623920e+00 5.4173515022579384e+00 + -5.2908220692747516e+00 -3.0132345834287846e+00 5.5123403205142214e+00 + -5.5062921062144259e+00 -3.5564415842022052e+00 5.7130290317961823e+00 + -5.6964342457787192e+00 -3.9965421758593922e+00 5.8943847748355997e+00 + id 13603 + loc 3.7454947829246521e-01 2.9392454028129578e-01 373 + blend 0.0000000000000000e+00 + interp 3.6031621951854803e-01:3.1278217070176412e-01:5.8586533778279581e-01:3.6031261635635287e-01:1.0049613453325199e+00:3.1017850988672985e-01:1.9025970222005459e+00:3.1852474254661078e-01:2.5028285396657006e+00:3.4367477325072343e-01:3.0426185778368771e+00:2.6801640377623875e-01:3.7438712801953500e+00 + CVs 20 + -1.8041569573784794e-01 6.3058962903734306e-01 3.7782633009749766e-01 + -3.3489331891406604e-01 1.3104450421442320e+00 7.3593516276570681e-01 + -4.8904082163046680e-01 2.0639020844947713e+00 1.0311230526915767e+00 + -7.0964356451714372e-01 2.9075798659855243e+00 1.1499772632912726e+00 + -1.0546545995397589e+00 3.7554703417004043e+00 9.2917753084583743e-01 + -1.5063930292246526e+00 4.3890197883998434e+00 2.9400945529451139e-01 + -1.9488659829940478e+00 4.5528471794788645e+00 -6.4113358422772726e-01 + -2.2693920518642368e+00 4.1980140886052020e+00 -1.6353552559117892e+00 + -2.4257028545044816e+00 3.4455721499645873e+00 -2.5112803284682625e+00 + -2.4143916096729439e+00 2.4727349060371528e+00 -3.2033486480808406e+00 + -2.2791436950765820e+00 1.4279452360043026e+00 -3.7140576093904896e+00 + -2.0904402227339558e+00 4.3434465401264455e-01 -4.1078557246770684e+00 + -1.9125463597077412e+00 -4.1950441332457888e-01 -4.4918185558826691e+00 + -1.8008899671656555e+00 -1.0676068520283346e+00 -4.9314581704448948e+00 + -1.9034098653033233e+00 -1.3269412901696374e+00 -5.3524127336711880e+00 + -2.2251354488676713e+00 -1.2124264929808204e+00 -5.4776562687754140e+00 + -2.5752588124742530e+00 -1.0763835085289757e+00 -5.4103061154744703e+00 + -2.9782834333092154e+00 -1.0048480533924546e+00 -5.3357314136432699e+00 + -3.9030549846546827e+00 -9.9741961977127369e-01 -5.9113503486759083e+00 + id 13604 + loc 9.6766775846481323e-01 7.9555529356002808e-01 412 + blend 0.0000000000000000e+00 + interp 5.5022126432217022e-01:3.4346846520758001e-01:3.4320026423175287e-01:4.3848880767360415e-01:1.0132628467613534e+00:4.0308559207988259e-01:1.5382212526380912e+00:4.5791719308789369e-01:1.9966529262264894e+00:4.6884199665406917e-01:2.7788379457756722e+00:3.1663180749337300e-01:3.0230734704383666e+00:5.5021576210952705e-01:3.6503750507467960e+00 + CVs 20 + 8.1915443653188058e-01 1.0940663281582627e-01 -2.2392215233559842e-01 + 1.3711233153497484e+00 8.1544493657189465e-02 -3.9634993209442576e-01 + 1.8606861679832705e+00 -7.7863931956279053e-03 -5.5549657870817448e-01 + 2.3790986056554861e+00 -1.2649707887943074e-01 -7.1392781243367098e-01 + 2.9164020343561572e+00 -2.7049928737924001e-01 -8.6702640371274231e-01 + 3.4636929537219769e+00 -4.3295192737224419e-01 -1.0076443366880452e+00 + 4.0146977757950717e+00 -6.0622304412490646e-01 -1.1275964148993274e+00 + 4.5651914093327859e+00 -7.8585862788738825e-01 -1.2212995442746335e+00 + 5.1091092450746158e+00 -9.7028321362657866e-01 -1.2850204238797807e+00 + 5.6377722246234203e+00 -1.1590076750887564e+00 -1.3168440580683380e+00 + 6.1399680181189211e+00 -1.3595144211815855e+00 -1.3244671757715611e+00 + 6.6052724319188556e+00 -1.6018819844860688e+00 -1.3382158930807100e+00 + 7.0274529829868637e+00 -1.9213824947641869e+00 -1.3966097953068675e+00 + 7.4047065520975046e+00 -2.3140229268516324e+00 -1.5078245961193331e+00 + 7.7379236996991736e+00 -2.7524853220743841e+00 -1.6623828013568693e+00 + 8.0202808004996875e+00 -3.2155238681416449e+00 -1.8670146177700382e+00 + 8.2426250148377775e+00 -3.6776812557497180e+00 -2.1343935535477754e+00 + 8.4079634800510039e+00 -4.1022466034265506e+00 -2.4490429682651698e+00 + 8.6318091264755914e+00 -4.3748112859394377e+00 -2.6442362636232803e+00 + id 13605 + loc 6.2962365336716175e-03 7.1685332059860229e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3134862843219920e-01:2.6044348388432409e-01:5.1568203171184113e-01:3.3134531494591490e-01:1.1445848857498375e+00:2.6372898007679929e-01:2.3450673338575880e+00:2.8108759640692793e-01:3.4938555594295391e+00 + CVs 20 + -1.8217187737783996e-01 2.0999656664493371e-01 3.3419808280052382e-01 + -2.8962963985642165e-01 3.1780562411011970e-01 4.7742117114655269e-01 + -3.7299660518002642e-01 3.8865842196184097e-01 5.4753034542293044e-01 + -4.6138853823455822e-01 4.5948906469173190e-01 6.2291122968608503e-01 + -5.6304155042034199e-01 5.3142559976898696e-01 7.0304327430861047e-01 + -6.8865722143570796e-01 6.0266689310903987e-01 7.8688629014172984e-01 + -8.4910005864015214e-01 6.6805483381927333e-01 8.7260766053954186e-01 + -1.0526514726062699e+00 7.2039041123507319e-01 9.5876221141797535e-01 + -1.3039628730965154e+00 7.5225683263455578e-01 1.0457007182429288e+00 + -1.6037069949224574e+00 7.5768219884539501e-01 1.1356838903596389e+00 + -1.9487449269597581e+00 7.3272524432860653e-01 1.2324839778695882e+00 + -2.3325225632678119e+00 6.7399504092466178e-01 1.3391576272407995e+00 + -2.7448340524348285e+00 5.7916316326648054e-01 1.4565778352762653e+00 + -3.1723639777611750e+00 4.5638447294668527e-01 1.5874097621484053e+00 + -3.6007366545267070e+00 3.3034855384648260e-01 1.7392171266804555e+00 + -4.0148205346547696e+00 2.2799004327792516e-01 1.9188342470949409e+00 + -4.3997606326505876e+00 1.6329534956440317e-01 2.1258186085153499e+00 + -4.7490518483067978e+00 1.3773543587546000e-01 2.3505996110744354e+00 + -5.1052861518832398e+00 1.0015410101359401e-01 2.5667313302930599e+00 + id 13606 + loc 8.9652734994888306e-01 3.9194309711456299e-01 399 + blend 0.0000000000000000e+00 + interp 4.8729755233755684e-01:4.8729267936203347e-01:9.2523232208105766e-01:2.7505311609651151e-01:1.6257225423372159e+00:2.5612263867673729e-01:2.9457709957482958e+00:4.2583252547318112e-01:3.1226068210262996e+00:3.5840729735367804e-01:3.9920449119286210e+00 + CVs 20 + 8.1986760264764619e-02 2.4556440521015530e-01 2.6703378648210074e-01 + 1.6134386675585283e-01 4.6694562805891004e-01 5.1423129823435365e-01 + 2.2376507494184883e-01 6.5714399863629769e-01 7.8230300486711246e-01 + 2.7029932353114405e-01 8.1898569380432029e-01 1.1035829867306330e+00 + 3.1300209121581957e-01 9.5274228552757556e-01 1.4818630598135143e+00 + 3.6589575935662833e-01 1.0560061025022431e+00 1.9094412847560873e+00 + 4.4167739508846304e-01 1.1223042066123603e+00 2.3724702215978333e+00 + 5.5045663332671801e-01 1.1400903528762321e+00 2.8487659796031330e+00 + 6.9692957196055505e-01 1.0937571134677120e+00 3.3042121216479159e+00 + 8.7511174711033990e-01 9.7133650207574451e-01 3.6955814573729899e+00 + 1.0727254731320024e+00 7.7576097595547255e-01 3.9914176688238423e+00 + 1.2901426994251544e+00 5.2373284971019896e-01 4.2019233846120994e+00 + 1.5431604582245495e+00 2.3182734526589543e-01 4.3688358652580748e+00 + 1.8503832682862738e+00 -8.3729213017451398e-02 4.5475972300631939e+00 + 2.2178319408109144e+00 -3.9306146970085154e-01 4.8061048821085492e+00 + 2.6001764519576653e+00 -6.4384759240646194e-01 5.2044495846182128e+00 + 2.8913325911811105e+00 -7.8074085377898439e-01 5.7799263124530667e+00 + 3.0195030871277169e+00 -7.7178819598957626e-01 6.4402401241087661e+00 + 3.2274331004258840e+00 -7.8067025614598529e-01 6.8577763759599044e+00 + id 13607 + loc 2.9762476682662964e-02 2.1240903064608574e-02 400 + blend 0.0000000000000000e+00 + interp 5.0788889196934739e-01:2.1147356277429449e-01:2.5795450066074921e-01:4.2442371364469017e-01:1.0708843692600158e+00:5.0788381308042774e-01:1.7515030749026581e+00:4.2964907106028077e-01:1.9993905817538815e+00:3.6951690881394023e-01:2.3843926968402966e+00:2.8773309929404473e-01:3.1671500319093200e+00 + CVs 20 + -8.7212158538504073e-02 2.4181118623570802e-01 2.4257826400604093e-01 + -2.1308955371023547e-01 4.9155272734794481e-01 4.7728696310495367e-01 + -3.6388907347951949e-01 7.4215415750608704e-01 7.0133891316977692e-01 + -5.3311612919464846e-01 9.8677921320791606e-01 9.1723912522936613e-01 + -7.2122353382008497e-01 1.2185965015472808e+00 1.1301521908991625e+00 + -9.2934087996983528e-01 1.4273228534390183e+00 1.3429174332106477e+00 + -1.1592815272794261e+00 1.6019259679029176e+00 1.5560817264020601e+00 + -1.4130121162025850e+00 1.7330885629985291e+00 1.7685223843065077e+00 + -1.6910886368623377e+00 1.8139382396155377e+00 1.9758689396787421e+00 + -1.9899764990009259e+00 1.8428511402728291e+00 2.1712467147786145e+00 + -2.3013881421130011e+00 1.8251050473703789e+00 2.3441876433637949e+00 + -2.6089753814498806e+00 1.7764856758461580e+00 2.4778043667483578e+00 + -2.8946246256503754e+00 1.7204787932765009e+00 2.5592220586593610e+00 + -3.1576373013370018e+00 1.6676449419677755e+00 2.5976173051786198e+00 + -3.4045932697339274e+00 1.6128204860229722e+00 2.6062815558417669e+00 + -3.5736558572210555e+00 1.5871409313171747e+00 2.5631729917890507e+00 + -3.4612793417648557e+00 1.6499276844348916e+00 2.4168817253718098e+00 + -2.9960501559631512e+00 1.6051019262690793e+00 2.1930217366014149e+00 + -3.2410294268801749e+00 1.6882131000524088e+00 2.1518640526465038e+00 + id 13608 + loc 9.0782201290130615e-01 6.2459594011306763e-01 415 + blend 0.0000000000000000e+00 + interp 4.9576102222471513e-01:3.1845808352073202e-01:6.5783211734595204e-01:4.3182257570000515e-01:1.5094954575037363e+00:4.9575606461449290e-01:1.9828489099558440e+00:4.5782361113460218e-01:2.1782038989751933e+00:2.6280387724653326e-01:2.9928003067061733e+00:3.2578729470170487e-01:3.7466106135052559e+00 + CVs 20 + 2.8039686969799360e-01 1.8067608944454294e-01 9.6464861494467702e-04 + 5.0526074018072875e-01 3.2597611532905729e-01 -1.4349523157898225e-02 + 7.1245775936209643e-01 4.6279824026509658e-01 -2.8743688906056497e-02 + 9.3213508146058388e-01 6.1224974429943579e-01 -2.9174220504224024e-02 + 1.1649701223565518e+00 7.7086525254111682e-01 -1.2611786758358667e-02 + 1.4088226612910599e+00 9.3376238660485700e-01 2.4779691796835035e-02 + 1.6612117356344920e+00 1.0969256217885883e+00 8.8598150791250108e-02 + 1.9199857075160676e+00 1.2567482633886251e+00 1.8352119171262615e-01 + 2.1805923350456435e+00 1.4090324480428207e+00 3.0956919344793488e-01 + 2.4365001964125885e+00 1.5503130379498720e+00 4.6319290667603408e-01 + 2.6915815934172933e+00 1.6792047731714730e+00 6.4562069486768292e-01 + 2.9778082580350675e+00 1.7901265386675045e+00 8.6773563998494807e-01 + 3.3411568063521364e+00 1.8603335271002486e+00 1.1184779721366260e+00 + 3.7817369784604709e+00 1.8631729318836836e+00 1.3332796959549302e+00 + 4.2480051541938089e+00 1.8011799432388242e+00 1.4604246555368725e+00 + 4.7040568922622485e+00 1.6904866484482803e+00 1.4978855840398353e+00 + 5.1320126453958412e+00 1.5456206388024922e+00 1.4531947381035279e+00 + 5.5109835596465642e+00 1.3876103240027164e+00 1.3352661772152441e+00 + 5.7460359645653103e+00 1.3125908517457217e+00 1.2385157621663105e+00 + id 13609 + loc 2.3904095869511366e-03 6.3980668783187866e-01 382 + blend 0.0000000000000000e+00 + interp 4.6007078420317904e-01:3.6388459852248850e-01:2.5955849282163923e-01:2.7259352905573664e-01:1.0158717356894262e+00:3.5126757971058981e-01:1.9327544482794805e+00:3.6100820888829710e-01:2.4024983767957151e+00:3.4508032656428750e-01:3.0060416906238832e+00:4.6006618349533701e-01:3.9846680548822420e+00 + CVs 20 + 8.6937373208086199e-01 1.5440592026620492e-01 -4.4434191565788489e-01 + 1.4171216935548079e+00 1.7997527777369687e-01 -7.6416036202877402e-01 + 1.8779005198901895e+00 1.7271296925811219e-01 -1.0421424709195506e+00 + 2.3452348740842135e+00 1.7587854391678365e-01 -1.3061668459429605e+00 + 2.8273899101830211e+00 1.8432984197087010e-01 -1.5588262568277411e+00 + 3.3334224136428428e+00 1.8656342610052967e-01 -1.8063580571886257e+00 + 3.8661962368017586e+00 1.6586504760831300e-01 -2.0609944177177737e+00 + 4.4199295971436534e+00 1.0040620733381522e-01 -2.3351634310671918e+00 + 4.9815347729223820e+00 -3.7899797869196838e-02 -2.6323864123119876e+00 + 5.5276714959372812e+00 -2.7752139728192793e-01 -2.9471800665016756e+00 + 6.0175662086556736e+00 -6.3251700184471660e-01 -3.2702133699076281e+00 + 6.4017076335904424e+00 -1.0848269610224817e+00 -3.5824492630680194e+00 + 6.6543298276950757e+00 -1.5904929142506987e+00 -3.8576072650373998e+00 + 6.7832790197177895e+00 -2.1042059297766933e+00 -4.0770032089379544e+00 + 6.8140480281209115e+00 -2.5887315886786837e+00 -4.2353353558235280e+00 + 6.7786293374271338e+00 -3.0137183552394946e+00 -4.3367905656074992e+00 + 6.7105902059648024e+00 -3.3593439098922637e+00 -4.3899888377250429e+00 + 6.6348846548775207e+00 -3.6301590819789009e+00 -4.4041451712957205e+00 + 6.5011688752678314e+00 -3.9267140383724746e+00 -4.3579264644177726e+00 + id 13610 + loc 6.3798356056213379e-01 8.4192174673080444e-01 403 + blend 0.0000000000000000e+00 + interp 3.8100787744342446e-01:3.0356982668068488e-01:3.4486726284584579e-01:3.8100406736465003e-01:9.9737338737641590e-01:2.9933926203239769e-01:1.9993970446232967e+00:3.3817484748813326e-01:2.8961852189923416e+00:2.8968651581913574e-01:3.7562876409182957e+00 + CVs 20 + -7.1068096996736690e-02 -2.7815428748888149e-02 9.8456978625615477e-02 + -1.2022276216174613e-01 -6.5341974190438815e-02 1.9399336556620381e-01 + -1.5426405457146455e-01 -9.3792643406582110e-02 2.9131285157397407e-01 + -1.7296129511186234e-01 -1.1591159950474347e-01 3.8258421404604986e-01 + -1.7668698592346527e-01 -1.3030028009591466e-01 4.6601544629640546e-01 + -1.6446871330248719e-01 -1.3941682001302677e-01 5.3787864627700077e-01 + -1.3429666762595571e-01 -1.4760319721315582e-01 5.9354474938004553e-01 + -8.5173950792862330e-02 -1.5727087691706898e-01 6.2946912525774334e-01 + -1.8043997534365766e-02 -1.6740791081177026e-01 6.4406222413233882e-01 + 6.5676455994817529e-02 -1.7618477432730939e-01 6.3587732072928316e-01 + 1.6487188511666323e-01 -1.8418037777164176e-01 6.0095333225147674e-01 + 2.7833523006754574e-01 -1.9338166033749854e-01 5.3211088542634277e-01 + 4.0245704408770344e-01 -2.0611315971315997e-01 4.1935064660634291e-01 + 5.2823364026985464e-01 -2.2461213173487707e-01 2.5148554468986584e-01 + 6.3950092220891896e-01 -2.5087802639254564e-01 1.7410888690196497e-02 + 7.1270466283432332e-01 -2.8230732719742679e-01 -2.8840951362124301e-01 + 7.2141039338360424e-01 -3.1130099776377418e-01 -6.4844796756412260e-01 + 6.5270843056582861e-01 -3.3081543124035762e-01 -1.0247644299727945e+00 + 6.9926051238321285e-01 -3.5146200086629426e-01 -1.0421341305458682e+00 + id 13611 + loc 1.0867171920835972e-02 4.0050815790891647e-02 395 + blend 0.0000000000000000e+00 + interp 4.7358748896907604e-01:3.2680966480997703e-01:6.9135032830700327e-01:2.9505271351328755e-01:1.5673218448989696e+00:4.7358275309418635e-01:2.1918599137903345e+00:3.0497047063530941e-01:2.9870079495698727e+00:3.7360831380308879e-01:3.4814287858700421e+00:3.0253811709795519e-01:3.9999225908940104e+00 + CVs 20 + -2.1927688275039492e-01 1.1272131162143736e-01 -1.4730610987693704e-01 + -4.3035748799346957e-01 2.4957695014567510e-01 -3.1052153735023680e-01 + -6.3397614495148191e-01 4.0796007358000830e-01 -4.8333400509468977e-01 + -8.3127403436114955e-01 5.8529319654677603e-01 -6.6413762589380121e-01 + -1.0208346916726332e+00 7.7830863813623163e-01 -8.5497681682480708e-01 + -1.2029291297326596e+00 9.8307254157621637e-01 -1.0577664722979276e+00 + -1.3810276599451163e+00 1.1971356973585072e+00 -1.2780178010260785e+00 + -1.5608582239625712e+00 1.4155890824481410e+00 -1.5287668228132141e+00 + -1.7462297594747800e+00 1.6240136497454065e+00 -1.8258370976104419e+00 + -1.9409614654894947e+00 1.7977076642593151e+00 -2.1773807692461085e+00 + -2.1533977635930603e+00 1.9063594499261141e+00 -2.5785646570909178e+00 + -2.3866063717200898e+00 1.9241506664219890e+00 -3.0093605237621075e+00 + -2.6295463306593274e+00 1.8444701800266061e+00 -3.4433349314461390e+00 + -2.8683783718038582e+00 1.6764231845686575e+00 -3.8620882616804137e+00 + -3.0953823194978609e+00 1.4307330399520140e+00 -4.2550421502365783e+00 + -3.3050660860323058e+00 1.1116921355646245e+00 -4.6163516900781634e+00 + -3.4844306408942383e+00 7.2324478702022299e-01 -4.9402706742304119e+00 + -3.6124918992713742e+00 2.9316023312078343e-01 -5.2185107813102505e+00 + -3.6605210141400217e+00 4.0804170727115618e-03 -5.4455328377098144e+00 + id 13612 + loc 8.7278790771961212e-02 1.6431647539138794e-01 407 + blend 0.0000000000000000e+00 + interp 4.3163700824670986e-01:3.6974970277464453e-01:8.3681797435307981e-01:4.0952146286166041e-01:1.4452005931056739e+00:2.9460285753639759e-01:1.9756573439506577e+00:2.7476645457620980e-01:2.0000737498096970e+00:4.3163269187662739e-01:3.9896707801965907e+00 + CVs 20 + 3.1732592369268432e-02 3.4003926037583970e-01 -3.7931529403154501e-01 + 5.2175405904193173e-02 5.3817129411183739e-01 -5.5917435958085404e-01 + 7.8646323124656220e-02 6.7950942278687210e-01 -6.7155641296855217e-01 + 1.1960879031855325e-01 8.0371836594767621e-01 -8.0077044733683866e-01 + 1.7728812619353190e-01 9.0878303978277575e-01 -9.4301070057419012e-01 + 2.5483240506718902e-01 9.9212691389006802e-01 -1.0950584003076482e+00 + 3.5539623605758813e-01 1.0495392053408581e+00 -1.2540436302463061e+00 + 4.8022255475277853e-01 1.0756859786888411e+00 -1.4173585927911436e+00 + 6.2814377736838367e-01 1.0661348741955847e+00 -1.5837926419650421e+00 + 7.9667308156269967e-01 1.0189152911631270e+00 -1.7538133673228149e+00 + 9.8309280571565494e-01 9.3482724757201685e-01 -1.9288385001214683e+00 + 1.1852821770483868e+00 8.1635562290015939e-01 -2.1098935859794348e+00 + 1.4011788061657446e+00 6.6649623235678079e-01 -2.2955779618143564e+00 + 1.6290779837509224e+00 4.9055052042309166e-01 -2.4832026334556505e+00 + 1.8686274627081001e+00 3.0186178425551868e-01 -2.6732365394094240e+00 + 2.1170764990647872e+00 1.2211718292609142e-01 -2.8687254980250971e+00 + 2.3660751981840935e+00 -2.9421062774378615e-02 -3.0701642670788805e+00 + 2.6086173924954132e+00 -1.4503939083733020e-01 -3.2748163222801057e+00 + 2.8812872746877924e+00 -2.6400709682073664e-01 -3.4734787248071779e+00 + id 13613 + loc 1.7878903448581696e-01 1.0274982452392578e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4447212928991481e-01:2.5877208084927988e-01:8.1557483423115129e-01:3.0922161008846960e-01:1.7368970438551217e+00:2.5871883984865818e-01:2.7648934823957227e+00:4.1071266386461902e-01:3.0291851773960392e+00:4.4446768456862190e-01:3.5126011326453463e+00:3.3098548608256267e-01:3.9971441193850592e+00 + CVs 20 + -1.4349658838725571e-01 2.0212330088487990e-01 -2.3053244718229196e-01 + -2.9437961825442027e-01 4.2647809330907421e-01 -4.2234843855587240e-01 + -4.4523384604284821e-01 6.5735975528875357e-01 -5.9414503773847471e-01 + -5.8948760467274974e-01 8.8139512249867846e-01 -7.4990362684160505e-01 + -7.2483072710581964e-01 1.0951013048783389e+00 -8.8543957399299467e-01 + -8.4807028003329621e-01 1.2980601386735888e+00 -1.0019760890959521e+00 + -9.6315171424748436e-01 1.4980301430278855e+00 -1.1052676605203564e+00 + -1.0884324065480138e+00 1.7094391893177079e+00 -1.1986955245683912e+00 + -1.2533525154277281e+00 1.9344719218338193e+00 -1.2819147282978987e+00 + -1.4837400368349236e+00 2.1463466826554964e+00 -1.3526397910514218e+00 + -1.7854500659717256e+00 2.2980304281996293e+00 -1.4001775358943638e+00 + -2.1351295548829019e+00 2.3422125805767919e+00 -1.4076456405498083e+00 + -2.4937285535784857e+00 2.2583258900484546e+00 -1.3777347965540265e+00 + -2.8370953387188611e+00 2.0589837250648895e+00 -1.3380327872169060e+00 + -3.1626239222868247e+00 1.7685256199565274e+00 -1.3149936648733145e+00 + -3.4830620990031500e+00 1.4124847778356764e+00 -1.3249381981010404e+00 + -3.7946718653784752e+00 1.0302036813209101e+00 -1.4091650230687389e+00 + -4.0261657516470821e+00 7.1786048865575225e-01 -1.6619920146320435e+00 + -4.1143219184011377e+00 5.5970831104411456e-01 -2.1646533079596026e+00 + id 13614 + loc 6.2179547548294067e-01 3.2424494624137878e-02 393 + blend 0.0000000000000000e+00 + interp 4.9732803189279479e-01:4.5082871345134018e-01:6.9906658161027235e-01:4.9732305861247589e-01:1.4172370771687026e+00:3.0224034686624834e-01:1.9953538104410729e+00:2.7979222055707281e-01:3.0001324376803038e+00:2.5158996974445985e-01:3.9273497063050553e+00 + CVs 20 + 4.1838228125459198e-01 3.8605529212366213e-01 1.4541199134727420e-01 + 8.1200605536941806e-01 7.8820796402420112e-01 2.7051843163366834e-01 + 1.1839190545429561e+00 1.2276984758612299e+00 3.9957543990394406e-01 + 1.5341507046294360e+00 1.6938572290160390e+00 5.7510114092078102e-01 + 1.8529950821422370e+00 2.1482490082601542e+00 8.3859669754679156e-01 + 2.1235235631084666e+00 2.5555214537747646e+00 1.1984595377358089e+00 + 2.3314546725132335e+00 2.8964222702357665e+00 1.6294058421094770e+00 + 2.4764736945060726e+00 3.1630062046961758e+00 2.0965968352137558e+00 + 2.5689762450317088e+00 3.3555494932299736e+00 2.5756566684801041e+00 + 2.6227835514416311e+00 3.4804909487961293e+00 3.0582546646905775e+00 + 2.6555177958635481e+00 3.5469853529910877e+00 3.5490929188265441e+00 + 2.6933952035265341e+00 3.5624727144907555e+00 4.0593207561326405e+00 + 2.7671387254571025e+00 3.5236941506880299e+00 4.6036669821269616e+00 + 2.9020604668961827e+00 3.3996404192781551e+00 5.2023677772384715e+00 + 3.1176966224337641e+00 3.1252183347312306e+00 5.8500740267407831e+00 + 3.4167095333287385e+00 2.6449784309608164e+00 6.4397180322962084e+00 + 3.7833795752626225e+00 2.0191648074279973e+00 6.8112028589897617e+00 + 4.2222537443334236e+00 1.4362355949364289e+00 6.8861505832512746e+00 + 4.7098112415256912e+00 1.2121706403338028e+00 6.6034286271757354e+00 + id 13615 + loc 2.6717789471149445e-02 7.0987373590469360e-01 376 + blend 0.0000000000000000e+00 + interp 5.0201216383692171e-01:2.8310837861522770e-01:6.5642769660859579e-01:2.9365715356761596e-01:1.6611988609346544e+00:3.4452274067827482e-01:2.0000122215657665e+00:5.0200714371528332e-01:2.6633173715789296e+00:3.4717201773778861e-01:3.0095922914244997e+00:4.1457323421475467e-01:3.8104820965705239e+00 + CVs 20 + -1.1551330630560623e-01 4.8041317044997650e-01 7.2894618748071394e-01 + -1.0581565632068385e-01 7.6623636614372781e-01 1.3397151417169297e+00 + 2.4188753463585400e-03 8.8118472766120304e-01 1.9265263887434501e+00 + 1.6073057862170348e-01 9.1008587054545687e-01 2.5228188151090034e+00 + 3.1245612985441895e-01 9.3269719561960496e-01 3.1281066009284642e+00 + 4.0060139674024653e-01 9.8416609215847850e-01 3.7423763776881360e+00 + 3.8491999495180973e-01 1.0620773853502381e+00 4.3471575787214674e+00 + 2.6032874136550221e-01 1.1563237716048922e+00 4.9107445677390098e+00 + 5.0187923544722901e-02 1.2616591417559468e+00 5.4141551065302380e+00 + -2.2018502752859948e-01 1.3764194110569745e+00 5.8640616597736459e+00 + -5.3611621187145964e-01 1.4967197296336396e+00 6.2804050832849043e+00 + -8.9353927325447502e-01 1.6120114637691976e+00 6.6786978065859870e+00 + -1.3006817846838568e+00 1.7004043142553511e+00 7.0596756653047725e+00 + -1.7652098033431454e+00 1.7271764428837508e+00 7.4201105451585443e+00 + -2.2983880859041301e+00 1.6607761150622968e+00 7.7357417651411033e+00 + -2.9123595273326695e+00 1.4893083682860144e+00 7.9060115415564578e+00 + -3.5828172007141283e+00 1.1979801123174685e+00 7.8132230348148735e+00 + -4.1291249790307871e+00 7.0426612858708149e-01 7.5774403349017367e+00 + -4.0912703619954289e+00 2.4455628767208637e-01 7.5956561131425460e+00 + id 13616 + loc 6.6439485549926758e-01 6.7443853616714478e-01 396 + blend 0.0000000000000000e+00 + interp 4.1145651543928963e-01:2.8624404796468911e-01:9.8164746686445548e-01:3.5765776128276178e-01:1.9816111125401101e+00:4.1145240087413526e-01:2.5360975435905702e+00:3.2235778139575105e-01:3.0364615240491140e+00:3.0336196993878856e-01:3.9572513038492376e+00 + CVs 20 + 8.1263829197535375e-01 2.7409296608722650e-01 -2.9100269721283006e-01 + 1.3424444318603657e+00 3.8690960273235669e-01 -5.2800093224586786e-01 + 1.7868472815290743e+00 4.2682415538328206e-01 -7.6249581628355545e-01 + 2.2386944970476041e+00 4.3746997557231676e-01 -1.0158447418779262e+00 + 2.6990376135994696e+00 4.1299612800053653e-01 -1.2851336298577225e+00 + 3.1677777995665677e+00 3.4955556004403732e-01 -1.5690028443066459e+00 + 3.6414949806379768e+00 2.4674347831614163e-01 -1.8722998804142117e+00 + 4.1136895775767695e+00 1.0351197002127011e-01 -2.2020836051220205e+00 + 4.5752784261626367e+00 -8.6349154549424600e-02 -2.5573165437245473e+00 + 5.0099898810208288e+00 -3.3052686306956680e-01 -2.9293960591667254e+00 + 5.3948688391959054e+00 -6.3291700776049331e-01 -3.3138310275989031e+00 + 5.7139548241105409e+00 -9.9647923919523773e-01 -3.7128090920701444e+00 + 5.9661365953906715e+00 -1.4254114278457950e+00 -4.1237396130893185e+00 + 6.1537379417203413e+00 -1.9148699198489454e+00 -4.5324242872496896e+00 + 6.2749463270205510e+00 -2.4449013003537035e+00 -4.9217385066679373e+00 + 6.3281023961127421e+00 -2.9944947875729682e+00 -5.2782588682542562e+00 + 6.3150112193912493e+00 -3.5486750211409062e+00 -5.5879046759474598e+00 + 6.2483284373865562e+00 -4.0860739851003656e+00 -5.8427482549624683e+00 + 6.2221269678595919e+00 -4.5588352945699091e+00 -6.0914779190915054e+00 + id 13617 + loc 4.8604488372802734e-01 7.2267127037048340e-01 402 + blend 0.0000000000000000e+00 + interp 5.1286231870624721e-01:4.8878757814992352e-01:2.1780863999002886e-01:4.0419042100790520e-01:9.2430158252500083e-01:3.9745266477030267e-01:1.5934243728703328e+00:4.9399006820692520e-01:1.9999297324252248e+00:5.1285719008306019e-01:2.2816723098067859e+00:4.1249425595644096e-01:2.9772460101476721e+00:3.7147065137529783e-01:3.7860357270381919e+00 + CVs 20 + -1.1753538770584376e-01 1.5747434523200435e-01 -1.5283528940255142e-01 + -1.8343084914338559e-01 3.3652115059950005e-01 -3.0478616625405985e-01 + -2.2900110622159553e-01 5.2116079175957863e-01 -4.6156233459253726e-01 + -2.6862893014682537e-01 7.0502216250114946e-01 -6.2375437571734038e-01 + -3.1185199502379080e-01 8.9131726017912882e-01 -7.9285134404507862e-01 + -3.7048580002110487e-01 1.0806037477649939e+00 -9.6912194142675934e-01 + -4.5446899536218788e-01 1.2702537433622589e+00 -1.1524711753166186e+00 + -5.7021497032075774e-01 1.4561539153551957e+00 -1.3418755186558413e+00 + -7.2090648804130175e-01 1.6339130840391900e+00 -1.5337855132726577e+00 + -9.0785823349160411e-01 1.7998182472775039e+00 -1.7229508616436739e+00 + -1.1313018758671509e+00 1.9498225782239946e+00 -1.9037864483119273e+00 + -1.3859325311431148e+00 2.0801104264432118e+00 -2.0675499544746971e+00 + -1.6643184445941950e+00 2.1896573336503025e+00 -2.2059848416016772e+00 + -1.9497834992929914e+00 2.2817945562042778e+00 -2.3039836351334411e+00 + -2.2142230473222879e+00 2.3660794132666920e+00 -2.3426200190005462e+00 + -2.4406028215571247e+00 2.4476903993248325e+00 -2.3236791924618796e+00 + -2.6555202357529279e+00 2.5189900732346491e+00 -2.2727312242967344e+00 + -2.8874531153044734e+00 2.5702081045674623e+00 -2.2002302350578251e+00 + -3.0951735787718095e+00 2.6072367542186212e+00 -2.1079436254675441e+00 + id 13618 + loc 7.5715744495391846e-01 3.6239573359489441e-01 409 + blend 0.0000000000000000e+00 + interp 5.1606046512356196e-01:3.5411908453944541e-01:3.4555824679800862e-01:3.0844794976487921e-01:1.0068451501845255e+00:5.1605530451891080e-01:1.5422595852145369e+00:5.1200034683953710e-01:1.9830569514535665e+00:2.7103085275584671e-01:2.6574942000412052e+00:3.1512993770640807e-01:3.8474484823780104e+00 + CVs 20 + -2.9217425992403490e-01 9.8396449064505842e-02 1.4392592729334866e-01 + -5.6557077263088162e-01 1.7659412456092347e-01 2.9019276149439233e-01 + -8.3526631815457364e-01 2.4541579305537292e-01 4.2962724800160584e-01 + -1.1063717366063464e+00 3.1071695616502859e-01 5.5879420861918994e-01 + -1.3756997840244392e+00 3.7368912679895405e-01 6.8190234667766791e-01 + -1.6415517081495217e+00 4.3636588544986621e-01 8.0382421215711752e-01 + -1.9031092774991989e+00 5.0197843394347763e-01 9.2853554133215011e-01 + -2.1615646930189714e+00 5.7247961662067270e-01 1.0586509287396324e+00 + -2.4224217950784253e+00 6.4497700051863049e-01 1.1947825770328155e+00 + -2.6904770045378656e+00 7.1118983859175233e-01 1.3363139475306269e+00 + -2.9641050005940608e+00 7.5929742062786132e-01 1.4852427418606586e+00 + -3.2398565400153654e+00 7.7362245111363048e-01 1.6479858871742410e+00 + -3.5148330359072650e+00 7.3833131456235668e-01 1.8310191577866628e+00 + -3.7825468923174741e+00 6.4603689794751418e-01 2.0363158127495535e+00 + -4.0326084791444377e+00 4.9768249298105927e-01 2.2617416719450638e+00 + -4.2559549349011947e+00 2.9447476507991466e-01 2.5036107220888288e+00 + -4.4468225926230032e+00 3.1001456271515959e-02 2.7549552072360699e+00 + -4.5970766266754133e+00 -2.9133959314085978e-01 3.0011032155963360e+00 + -4.7193131749672679e+00 -6.1366120938217206e-01 3.2288233503802930e+00 + id 13619 + loc 5.6745320558547974e-01 7.6942288875579834e-01 401 + blend 0.0000000000000000e+00 + interp 4.3671305339484989e-01:4.3670868626431597e-01:6.0895473629130914e-01:3.4283649037267583e-01:1.2440614502155305e+00:3.8944666003055456e-01:2.1898976149298339e+00:3.7459260011734746e-01:3.0081562159091044e+00:3.3715080989799961e-01:3.9921715313886228e+00 + CVs 20 + -1.0881119472551445e-01 3.1120575980987986e-01 -2.2322347433856027e-01 + -2.0832694574197522e-01 6.1431735794821518e-01 -4.4913760545710124e-01 + -3.0006816362231936e-01 9.0651101515538213e-01 -6.8276282881281070e-01 + -3.7860647224668154e-01 1.1791420172904938e+00 -9.2892500327071026e-01 + -4.2655278734462637e-01 1.4126290241108230e+00 -1.1898079844378759e+00 + -4.3074356842178385e-01 1.5949573173469624e+00 -1.4644285670873227e+00 + -4.0334293107835084e-01 1.7398202535550251e+00 -1.7612532062056725e+00 + -3.7975683571654495e-01 1.8716301488659752e+00 -2.0953330103007706e+00 + -4.0777629578107832e-01 1.9980630508279207e+00 -2.4738172897273309e+00 + -5.3418314917501053e-01 2.1062329532776500e+00 -2.8825324487223734e+00 + -7.8326304732559016e-01 2.1845970557922154e+00 -3.2868365384834939e+00 + -1.1530993011218866e+00 2.2274185458956959e+00 -3.6515519456380519e+00 + -1.6215723296041096e+00 2.2179008879087099e+00 -3.9772334467105384e+00 + -2.1628177226184544e+00 2.1226687045939063e+00 -4.2925800276983779e+00 + -2.7491051304963898e+00 1.9253692833903873e+00 -4.5836051413623622e+00 + -3.3206536648605227e+00 1.6796431594664596e+00 -4.8108164708882279e+00 + -3.7980335880506741e+00 1.4931418790657325e+00 -5.0165399606807366e+00 + -4.1796564962878398e+00 1.4061272389865267e+00 -5.3107587150850613e+00 + -4.6540502825926735e+00 1.2618008135232772e+00 -5.8460452916850247e+00 + id 13620 + loc 1.4792175590991974e-01 2.0199792087078094e-01 374 + blend 0.0000000000000000e+00 + interp 3.6903722255845545e-01:2.9532416236393044e-01:5.3705057171694781e-01:3.6903353218622986e-01:1.0064535148600255e+00:3.1555411619769580e-01:1.5262088178419357e+00:2.5564805665691348e-01:2.0009889608638631e+00:3.4376502856223401e-01:3.1927186953620108e+00:2.3931161391944991e-01:3.9438986443135149e+00 + CVs 20 + -3.7282709211204668e-01 2.8156607952548823e-01 6.2874732006822298e-01 + -6.1608787011503108e-01 4.5561953806326261e-01 1.0851552777241977e+00 + -7.5354910000937836e-01 5.3084973779026456e-01 1.5421269766820085e+00 + -7.8947625250649600e-01 5.2729374193051581e-01 2.0483736003966566e+00 + -7.5267316659409456e-01 5.2156875794106483e-01 2.5606601459412839e+00 + -6.9245127825768171e-01 5.6909304274249917e-01 3.0633608101882510e+00 + -6.6874956042341172e-01 6.6677624550615455e-01 3.5870016756688017e+00 + -7.3658637735556165e-01 7.9637475010048409e-01 4.1471043764709226e+00 + -9.3045454156841412e-01 9.5172064616544971e-01 4.7198496002793719e+00 + -1.2602640622473245e+00 1.1215900563212711e+00 5.2724006957906742e+00 + -1.7058667322653140e+00 1.2748744645636418e+00 5.7880974026564607e+00 + -2.2493889698425940e+00 1.3660229990664829e+00 6.2631884304900467e+00 + -2.8675296433984379e+00 1.3382111684473288e+00 6.6746370498698937e+00 + -3.5156282956850475e+00 1.1575919827216703e+00 6.9841223968146249e+00 + -4.1542142866492853e+00 8.3650939152490178e-01 7.1520260853190472e+00 + -4.7561011111394116e+00 3.8900806158861334e-01 7.1512061360566976e+00 + -5.2562309716783187e+00 -2.1013653115396025e-01 7.0581170546844252e+00 + -5.5169292019332374e+00 -9.0016644322454686e-01 7.0674448457788115e+00 + -5.5523439427450052e+00 -1.4138300009971907e+00 7.2679111053721286e+00 + id 13621 + loc 9.5337235927581787e-01 7.9756683111190796e-01 375 + blend 0.0000000000000000e+00 + interp 3.3508260405593010e-01:3.3507925322988957e-01:9.2380690327560910e-01:2.4997026834498848e-01:1.7249815488639952e+00:1.7763364001580734e-01:2.1895302851313603e+00:2.3600430221827604e-01:3.0919211964856714e+00:2.2421351713495560e-01:3.8757864539403943e+00 + CVs 20 + -4.1193680193536814e-01 3.4352179571131458e-01 -1.9557076435387599e-01 + -7.8908020994218342e-01 5.8617677871355611e-01 -3.0543389796749343e-01 + -1.2030314366400283e+00 7.1331083885716051e-01 -3.4511816210332930e-01 + -1.6859392362905110e+00 7.5305615634531231e-01 -3.2211889396072113e-01 + -2.2323377500746280e+00 7.8026787983225776e-01 -2.5039512622200044e-01 + -2.8471413006577615e+00 8.5839740452195668e-01 -1.7943558427866924e-01 + -3.5295127822626693e+00 1.0114157180071470e+00 -1.8849682109099630e-01 + -4.2471637062390037e+00 1.2423321996458312e+00 -3.4555192828408066e-01 + -4.9408134428725425e+00 1.5441271233144460e+00 -6.7974971679463825e-01 + -5.5537329287983752e+00 1.8784781429937691e+00 -1.1739305544084508e+00 + -6.0711261211443102e+00 2.1803303588640484e+00 -1.7975088707276545e+00 + -6.4934939572104415e+00 2.3788563103744611e+00 -2.5424103845605681e+00 + -6.7993742064511480e+00 2.3959640563094267e+00 -3.3908996748014735e+00 + -6.9517037361693532e+00 2.1732766960968539e+00 -4.2776523722613380e+00 + -6.9332428266784447e+00 1.7163708111491163e+00 -5.0739716721191410e+00 + -6.8513635874623713e+00 1.1991792880632022e+00 -5.5537562890825374e+00 + -6.8909829039687986e+00 1.0057236747836935e+00 -5.6273290376419478e+00 + -6.9248602906328820e+00 1.2092544610572835e+00 -5.5746231055970092e+00 + -7.0221529312596154e+00 8.1275042708141321e-01 -5.5649143898340840e+00 + id 13622 + loc 1.1478263884782791e-01 2.0261202752590179e-01 380 + blend 0.0000000000000000e+00 + interp 4.0015400139045748e-01:3.7395855355009699e-01:9.4745771315922211e-02:3.0893275026887712e-01:7.3122055222267157e-01:3.4268231099391888e-01:1.0422488775821286e+00:2.5048841073038269e-01:1.8058630346273969e+00:4.0014999985044358e-01:2.4716843136264850e+00:2.5071535523204391e-01:2.9780618627394206e+00:3.3632366669631708e-01:3.5811847256946563e+00 + CVs 20 + -3.7526848996871631e-01 3.6847461697203632e-01 5.7710840777653116e-01 + -6.2470526126129600e-01 6.4809595580299639e-01 1.0764133966288689e+00 + -8.3385085476321652e-01 8.9201421420590454e-01 1.5703330616663169e+00 + -1.0511192696341949e+00 1.1292849995460612e+00 2.0892830803932561e+00 + -1.3010772548514691e+00 1.3551832130956687e+00 2.6251688487404108e+00 + -1.6073182389383549e+00 1.5504196645469488e+00 3.1723863178174918e+00 + -1.9853622277647360e+00 1.6859035981558412e+00 3.7230326720768110e+00 + -2.4378953641741665e+00 1.7341075610648491e+00 4.2586186179028811e+00 + -2.9509635434942698e+00 1.6772523034124642e+00 4.7548331888285880e+00 + -3.4959414186530537e+00 1.5086282375381925e+00 5.1965174728090426e+00 + -4.0402217814051795e+00 1.2254779724462241e+00 5.5836511300684322e+00 + -4.5508830676177947e+00 8.2598952715444440e-01 5.9168957213981521e+00 + -4.9907538354454761e+00 3.3576397450663720e-01 6.1854584569684636e+00 + -5.3453324084160583e+00 -1.6852878594026954e-01 6.3910619735578447e+00 + -5.6375453283268939e+00 -5.9496789940892914e-01 6.5607079087347877e+00 + -5.8928094476405404e+00 -8.9871192767954122e-01 6.7198177330286510e+00 + -6.1199653611656357e+00 -1.0907014650487143e+00 6.8706146681934861e+00 + -6.3307880129699710e+00 -1.2179348168146205e+00 7.0208038302245726e+00 + -6.5511606586797573e+00 -1.3618934096703690e+00 7.2311043837417550e+00 + id 13623 + loc 3.5270014405250549e-01 2.7765870094299316e-01 400 + blend 0.0000000000000000e+00 + interp 4.7084401884656873e-01:2.5287994700287958e-01:6.3751487808129892e-02:4.2650635017674621e-01:9.1681294635162114e-01:3.1345193680485728e-01:1.2326058178711454e+00:4.7083931040638027e-01:1.8833798965129911e+00:4.0114311008518116e-01:2.4918362401694378e+00:4.6776679519536418e-01:3.0178474110170566e+00:3.0503664847336820e-01:3.5033495449293817e+00 + CVs 20 + -1.6935333154939120e-01 1.7623154909292932e-01 1.7115250951273031e-01 + -3.4276984221470641e-01 3.4839710463838824e-01 3.7945488406198291e-01 + -5.3247633112190362e-01 5.1017843612185199e-01 6.0231110223951079e-01 + -7.4168381922806093e-01 6.5170294606631463e-01 8.2644775946203186e-01 + -9.6347219613349044e-01 7.5962565303530960e-01 1.0473679781064726e+00 + -1.1814275781638228e+00 8.1776992091711542e-01 1.2577940446094829e+00 + -1.3722833431371551e+00 8.1353040838734048e-01 1.4472829926073660e+00 + -1.5170397553628923e+00 7.4728565422789572e-01 1.6062664988785378e+00 + -1.6247387729679357e+00 6.3060474690324853e-01 1.7442156445059056e+00 + -1.7419822629271784e+00 4.6070842092462105e-01 1.8915019652052325e+00 + -1.8682021945314780e+00 2.4381717434743888e-01 2.0145497217969166e+00 + -1.9397986702834540e+00 2.9949551451712741e-02 2.0834351536144502e+00 + -2.0221343786078911e+00 -2.1601650658925409e-01 2.1658292471138298e+00 + -2.1396262235011370e+00 -5.0029639362678724e-01 2.2638966895517507e+00 + -2.3200987717916881e+00 -8.2900105699249116e-01 2.3725295793284973e+00 + -2.7403167618840394e+00 -1.2913499466185452e+00 2.5667787169265428e+00 + -3.6883013770206348e+00 -1.7432174453468849e+00 2.9139232854387438e+00 + -4.7668569297659626e+00 -1.7173124437246914e+00 3.1925528555739242e+00 + -5.0857487909572203e+00 -1.6551556655878104e+00 3.2241536487760607e+00 + id 13624 + loc 5.6284826993942261e-01 7.8366708755493164e-01 373 + blend 0.0000000000000000e+00 + interp 4.3849339666467924e-01:2.8011927759704786e-01:7.3601163141135850e-02:3.6922611439149472e-01:8.0908159375955857e-01:3.6754240222227308e-01:1.2173407082371299e+00:3.9677006346286248e-01:1.9760342493813114e+00:4.2211712526995265e-01:2.3028459784394366e+00:4.3848901173071259e-01:2.9157680067167240e+00:3.5449699591262279e-01:3.6614107823854449e+00 + CVs 20 + -2.8351480553502262e-01 2.2534652645675232e-01 2.0628197487170818e-03 + -5.4687245803464157e-01 4.7706914461717437e-01 -2.7658064451009920e-02 + -7.7782132727504905e-01 7.5778886415692104e-01 -8.9214595963911097e-02 + -9.6867350242113570e-01 1.0716758512116544e+00 -1.8608095885248793e-01 + -1.1043726838853405e+00 1.4157457880435822e+00 -3.2277006590453455e-01 + -1.1750794945096079e+00 1.7768914371642599e+00 -5.0254927577354158e-01 + -1.1886369303564621e+00 2.1274514620914169e+00 -7.3779418780702644e-01 + -1.1618317615977851e+00 2.4265695921553987e+00 -1.0420571401332008e+00 + -1.1075094483955570e+00 2.6372209003584905e+00 -1.4093291390917206e+00 + -1.0302101346276809e+00 2.7422995750461969e+00 -1.8115873007374510e+00 + -9.2719972841532194e-01 2.7473779723432146e+00 -2.2132513997742622e+00 + -7.9607647454008734e-01 2.6631360070542107e+00 -2.5846940987620686e+00 + -6.4626663740145063e-01 2.4778684555310919e+00 -2.9158118014350753e+00 + -5.1184902107379360e-01 2.1522101505428064e+00 -3.2330392301494246e+00 + -4.8545670708338368e-01 1.6583177436979737e+00 -3.5811836397463130e+00 + -7.3474522541771892e-01 1.0615340303489791e+00 -3.9668845660065535e+00 + -1.3734020125636781e+00 5.7473213781413213e-01 -4.3051852292925306e+00 + -2.2095963705844492e+00 4.0092746958951619e-01 -4.4822757775615507e+00 + -2.6692683463811395e+00 2.8572413503586080e-01 -4.5658796278738354e+00 + id 13625 + loc 1.9590218365192413e-01 8.8543897867202759e-01 1078 + blend 0.0000000000000000e+00 + interp 2.9461324499613689e-01:2.9461029886368695e-01:3.0676431431661999e-01:2.9175947507842270e-01:1.4077846140832133e+00:2.8906768503968344e-01:2.0103034335743839e+00:2.9376353739260436e-01:2.8626304845588773e+00:2.8027318078658942e-01:3.2912121625810724e+00 + CVs 20 + 1.2119678781141603e-01 2.5324341506577941e-01 -7.2845670420021671e-02 + 2.6969667265001296e-01 4.4921110730225011e-01 -1.9037753145602795e-01 + 4.1514444367295755e-01 6.3000973448716224e-01 -3.3005422136249596e-01 + 5.4572984117832679e-01 7.8367841399838356e-01 -4.8680337244252136e-01 + 6.5727426296910718e-01 9.0808895123759537e-01 -6.6013951595238873e-01 + 7.4475146216277521e-01 1.0042297201822994e+00 -8.4861340437866883e-01 + 8.0387218578143627e-01 1.0768237083982419e+00 -1.0501524179795347e+00 + 8.3085282219356726e-01 1.1335252734458605e+00 -1.2630335336363252e+00 + 8.2396075691289994e-01 1.1748374114420965e+00 -1.4830550687778261e+00 + 7.9013288553180183e-01 1.1884906819261003e+00 -1.6983152292061796e+00 + 7.4622509311843865e-01 1.1604895341228794e+00 -1.8922559019562049e+00 + 7.1337345357312720e-01 1.0882314923581617e+00 -2.0497727424313079e+00 + 6.9999937177970950e-01 9.8564567989937879e-01 -2.1675104126896336e+00 + 6.8808266995836209e-01 8.7187119745023489e-01 -2.2609630337201647e+00 + 6.4308320382498130e-01 7.5463681653109960e-01 -2.3552121841411759e+00 + 5.4628050915447324e-01 6.2746372663999761e-01 -2.4560395415887539e+00 + 4.0956245516262146e-01 4.8626441628690120e-01 -2.5449784255688139e+00 + 2.5719013039861094e-01 3.3969572304463802e-01 -2.6091371929280358e+00 + 4.1399968207027973e-02 2.0152031549032734e-01 -2.7025070537354980e+00 + id 13626 + loc 2.6821531355381012e-03 7.9222694039344788e-02 412 + blend 0.0000000000000000e+00 + interp 6.2611535523792994e-01:3.2681590220387441e-01:3.7610486393012232e-02:5.1908225569528588e-01:7.2070072142821462e-01:6.2610909408437754e-01:1.0700842700617739e+00:5.1245724849131724e-01:1.7200526655113637e+00:3.9923024911473554e-01:2.1531819164980566e+00:4.2251355187653417e-01:2.9408303276190875e+00:2.6200445820860313e-01:3.4365389175526500e+00 + CVs 20 + -1.1044155631928733e-01 1.8061506164882971e-01 -4.5343649713757517e-01 + -2.3781933762286547e-01 2.8157651799268429e-01 -7.8123535851078563e-01 + -3.6403220874777387e-01 3.6042695912915407e-01 -1.0932171767101089e+00 + -4.7716511330321948e-01 4.4013581154952142e-01 -1.4327360093947186e+00 + -5.7001277726431210e-01 5.1473368238531869e-01 -1.7978790916985201e+00 + -6.3368915741063669e-01 5.7931144049939531e-01 -2.1848487297726207e+00 + -6.5898929687585039e-01 6.3078063752426150e-01 -2.5867004069341508e+00 + -6.4089947021326177e-01 6.6734367000956096e-01 -2.9943198440568946e+00 + -5.7958524356457231e-01 6.8873653336018914e-01 -3.3983175255870455e+00 + -4.7831053852517458e-01 6.9622720005149996e-01 -3.7890281846827256e+00 + -3.4678487961806626e-01 6.8963058434913327e-01 -4.1557674286531370e+00 + -2.0821399478081204e-01 6.6190205937264546e-01 -4.4952838360651866e+00 + -9.1713686679985029e-02 5.9804032676191099e-01 -4.8196407870565121e+00 + -1.5917924601534295e-02 4.8461075551229205e-01 -5.1437715899644374e+00 + 1.2895995956977324e-02 3.2027363659754338e-01 -5.4651717494096879e+00 + -6.7034794288467481e-03 1.1771739086555533e-01 -5.7643579286227826e+00 + -7.4352342774623770e-02 -1.0432210634145811e-01 -6.0226517815812866e+00 + -1.8315692460467869e-01 -3.2920314478450896e-01 -6.2337726250660186e+00 + -3.0083299451540380e-01 -5.4954780642547130e-01 -6.4201164766285634e+00 + id 13627 + loc 1.6052716970443726e-01 8.0778193473815918e-01 1080 + blend 0.0000000000000000e+00 + interp 4.1182119597523098e-01:2.7592725067390445e-01:1.7338315180934760e-03:4.1181707776327126e-01:9.5650484299564753e-01:2.6159115176327880e-01:1.7079193420442171e+00:3.8669940413964005e-01:2.1860784132031217e+00:2.6159983288788491e-01:2.9837261444158556e+00 + CVs 20 + -1.4593882818162576e-01 2.1857818258190198e-01 2.4051308904981777e-01 + -2.3112924332635310e-01 3.5676224057784511e-01 3.4349734453810776e-01 + -2.9612931843602819e-01 4.6024204597524526e-01 3.9159252995777266e-01 + -3.6867644430880886e-01 5.6304356203784911e-01 4.4939477644474290e-01 + -4.5443586861706436e-01 6.6711951098818822e-01 5.1602584042735944e-01 + -5.5979175332839903e-01 7.7218537427661271e-01 5.9030225839578943e-01 + -6.9004790082514511e-01 8.7566700227172412e-01 6.7082876345695974e-01 + -8.4780841564040965e-01 9.7387522179177188e-01 7.5630780309686763e-01 + -1.0328078058777390e+00 1.0633776734925029e+00 8.4623202671408881e-01 + -1.2422136347478065e+00 1.1419075243244392e+00 9.4060515961596769e-01 + -1.4724844054908843e+00 1.2089092832414683e+00 1.0396380092426623e+00 + -1.7219380133761519e+00 1.2643367151617886e+00 1.1436757750881996e+00 + -1.9864292001645847e+00 1.3059832850369080e+00 1.2503621348543903e+00 + -2.2498405446533276e+00 1.3290758150822168e+00 1.3511393206372329e+00 + -2.4879762130281375e+00 1.3334009475541371e+00 1.4346395904322207e+00 + -2.6906634905375593e+00 1.3284198195949704e+00 1.4952742393002014e+00 + -2.8657537610312049e+00 1.3271016394364030e+00 1.5352588286656996e+00 + -3.0235702115173475e+00 1.3381034494763266e+00 1.5621704783528731e+00 + -3.2561043631435660e+00 1.3843455688144972e+00 1.6760238572448813e+00 + id 13628 + loc 9.1367490589618683e-02 3.7869533896446228e-01 399 + blend 0.0000000000000000e+00 + interp 4.3995828467830400e-01:4.2746564069881099e-01:2.3565490263172684e-01:2.9367265329006048e-01:1.1226383762808050e+00:3.5469520145870309e-01:1.6799944423632034e+00:3.5953480100645185e-01:2.1601135244868317e+00:3.4474544739904028e-01:3.0932654762003673e+00:4.3995388509545724e-01:3.9435823108635293e+00 + CVs 20 + -1.4368857587756081e-01 1.4611129213908677e-01 1.8124943768792745e-01 + -3.0499950064399500e-01 2.7879738146006228e-01 3.5970157035676698e-01 + -4.7779725530508421e-01 3.9595270967559987e-01 5.2296878310118489e-01 + -6.6005701993366650e-01 4.9970644606172626e-01 6.6110870372489405e-01 + -8.5047522912501239e-01 5.9459343207749527e-01 7.7004418832277377e-01 + -1.0352764110123134e+00 6.8319681595998105e-01 8.4756346303693708e-01 + -1.1951082446166537e+00 7.6749821422300846e-01 8.9095462666198222e-01 + -1.3082108086985544e+00 8.5375108420242529e-01 8.8976446461031322e-01 + -1.3584386608829413e+00 9.6371551579082004e-01 8.3072605509678610e-01 + -1.3499453591236887e+00 1.1422923450696156e+00 7.1732341678091283e-01 + -1.3290791618847866e+00 1.4221785988121058e+00 5.9697165463601176e-01 + -1.3641806041027296e+00 1.7094618952063532e+00 5.5392398707629564e-01 + -1.4471070905350212e+00 1.8454773690510824e+00 5.9695557106770647e-01 + -1.5197240606845950e+00 1.7713909494945883e+00 6.8051223013123119e-01 + -1.5408720630136528e+00 1.4732222696386872e+00 7.9646377965974635e-01 + -1.5209780607300276e+00 9.8842765811964461e-01 9.9674117578330779e-01 + -1.5188372442979490e+00 3.8765931417396282e-01 1.3683638115650751e+00 + -1.7017186711835153e+00 -2.1508917335825956e-01 1.8562444498475374e+00 + -1.9231874695548847e+00 -3.1301407288248506e-01 1.8409177155738670e+00 + id 13629 + loc 9.1966348886489868e-01 8.3216148614883423e-01 415 + blend 0.0000000000000000e+00 + interp 6.2611535523792994e-01:3.0014205606279154e-01:6.8622079486050702e-01:4.2713516223737652e-01:1.5366137816339300e+00:6.2610909408437754e-01:2.0393152222991486e+00:4.6934433206508347e-01:2.8306943745711575e+00:2.6924615123154244e-01:3.1201021251634886e+00:4.9575606461449290e-01:3.9951041328118322e+00 + CVs 20 + 3.6443050405043947e-01 1.6457958895128119e-01 -3.4325729952431980e-02 + 6.4551901406596035e-01 2.6663742074187902e-01 -7.6310203613408678e-02 + 8.9893892804260100e-01 3.4129472162559604e-01 -1.0967936931839059e-01 + 1.1583344500996386e+00 4.0923332933269529e-01 -1.2448239392124505e-01 + 1.4174927533257022e+00 4.6475490732947417e-01 -1.2187453960023426e-01 + 1.6692695084557136e+00 5.0301020952139819e-01 -1.0512568419388801e-01 + 1.9087425191529119e+00 5.2171696975537474e-01 -7.8010001752495395e-02 + 2.1341095881988550e+00 5.2052474471868426e-01 -4.4646561856917621e-02 + 2.3451485898661599e+00 4.9958620947507260e-01 -1.1094259957768249e-02 + 2.5431706219743093e+00 4.5972119862605987e-01 1.6114773013168771e-02 + 2.7281014960474650e+00 4.0696126605016947e-01 3.9165232645888670e-02 + 2.8852397914832228e+00 3.5989563886509979e-01 7.7072728055419204e-02 + 2.9903558101716938e+00 3.4001493354933676e-01 1.4986028146220198e-01 + 3.0524726818086769e+00 3.4146291267562789e-01 2.4662620652283068e-01 + 3.1008662494586945e+00 3.3898171822287426e-01 3.2819979546774264e-01 + 3.1392640520827890e+00 3.2873934799800542e-01 3.8166135782579941e-01 + 3.1584253750015945e+00 3.2271420298772346e-01 4.3241432782613931e-01 + 3.1575920304900302e+00 3.2288581785856496e-01 5.0039863479946511e-01 + 3.1426625509636810e+00 1.8016810478602352e-01 3.2326835709276452e-01 + id 13630 + loc 1.7079511284828186e-01 6.0171592235565186e-01 1068 + blend 0.0000000000000000e+00 + interp 4.0460364934798265e-01:2.9681535244916080e-01:3.4668035662054242e-01:4.0398283330802109e-01:1.0106280052985186e+00:2.7516232944682373e-01:1.7566231782157775e+00:3.0921881467057932e-01:2.3871034087410772e+00:4.0459960331148920e-01:2.9988608217707053e+00:2.6722156541053221e-01:3.5199437761271666e+00 + CVs 20 + -5.2199717185176499e-02 3.0812323985709072e-01 -1.4432577498287047e-01 + -6.5591313494714129e-02 6.1604819799946242e-01 -3.0915808043904663e-01 + -6.9154963887316748e-02 9.2067989336086420e-01 -4.9716561540828969e-01 + -7.7801235640959809e-02 1.2212017430995048e+00 -7.1578459981425446e-01 + -9.1374422182713369e-02 1.5052892204383284e+00 -9.7078138322965390e-01 + -1.1054795359489185e-01 1.7559420837534920e+00 -1.2635990079584225e+00 + -1.3602325950570321e-01 1.9565727069090006e+00 -1.5876517111245130e+00 + -1.6773194142726777e-01 2.0937294924734617e+00 -1.9283723140664490e+00 + -2.0710673165303101e-01 2.1562897956387177e+00 -2.2823885488844926e+00 + -2.5262614595123994e-01 2.1396210547375429e+00 -2.6660790358006672e+00 + -2.8138371428855341e-01 2.0621062694772219e+00 -3.0656178747296483e+00 + -2.6461973573356234e-01 1.9634328829985159e+00 -3.4144418492903101e+00 + -2.0309483427020100e-01 1.8703897140157852e+00 -3.6735117045586678e+00 + -1.0487956390011405e-01 1.7713099417116673e+00 -3.8812096677973460e+00 + 4.8437318211438041e-02 1.6376737487549535e+00 -4.0758269755677983e+00 + 2.8561344922092446e-01 1.4394494394481439e+00 -4.2769683883796628e+00 + 5.8142611173630454e-01 1.1286905094889925e+00 -4.5341454500218630e+00 + 8.4023736420668460e-01 6.9925781538956100e-01 -4.8875825619103743e+00 + 1.0447640133117124e+00 2.3753804487390451e-01 -5.2906125317598640e+00 + id 13631 + loc 8.7095850706100464e-01 2.9763793945312500e-01 403 + blend 0.0000000000000000e+00 + interp 3.5526560349422059e-01:2.7753079753910531e-01:3.6979756890253446e-01:2.7704647768053542e-01:1.1071128980088418e+00:3.5526205083818568e-01:1.9812491894678139e+00:3.0329791994111488e-01:2.4344900426863232e+00:2.8935536898311059e-01:3.0335577118069490e+00:3.0773905133389229e-01:3.9467534826972290e+00 + CVs 20 + -8.8171621275855046e-03 2.4935274081798010e-02 4.6935948591690604e-02 + -1.9265026450131773e-02 4.9815162315855657e-02 9.2918160781149117e-02 + -3.0936236826347063e-02 7.2725017821904964e-02 1.3511383111008013e-01 + -3.9774508520708830e-02 8.9698057174854934e-02 1.6856963435993441e-01 + -4.8628836549591770e-02 1.0207495327854818e-01 1.9290343450243810e-01 + -6.1423428513439543e-02 1.1177572434529862e-01 2.0801050481186995e-01 + -8.2819314002928648e-02 1.2151112642987000e-01 2.1449440125611693e-01 + -1.1866798636764925e-01 1.3539883467891936e-01 2.1473850277746515e-01 + -1.7403846399065345e-01 1.5922520387841599e-01 2.1357564731497788e-01 + -2.4835811262231550e-01 1.9854115706760395e-01 2.1848807426180791e-01 + -3.3203859793018686e-01 2.5442787624141505e-01 2.3688036493618531e-01 + -4.1142787671824055e-01 3.2280010554030159e-01 2.7183756340491289e-01 + -4.7682408227694989e-01 3.9971598222633908e-01 3.2276635494162942e-01 + -5.2210233716746213e-01 4.8294470909634613e-01 3.8868756643873781e-01 + -5.4180323810403619e-01 5.6956928254947548e-01 4.6940805662685087e-01 + -5.3042947249215455e-01 6.5546310056123047e-01 5.6485440500225237e-01 + -4.8309355069251092e-01 7.3899204515965267e-01 6.7399592129361363e-01 + -3.9559171681205485e-01 8.2588131782176788e-01 7.9319187695364235e-01 + -2.6634986529125704e-01 8.7687102845132436e-01 7.6830779616679690e-01 + id 13632 + loc 9.9284335970878601e-02 3.4454014897346497e-01 402 + blend 0.0000000000000000e+00 + interp 4.4767598527113034e-01:4.1569093791394873e-01:7.3100541333501279e-01:4.3079153995539360e-01:1.0440845697208085e+00:3.4660302261837844e-01:1.9999988314202763e+00:2.9501819089349757e-01:2.8279689725880863e+00:4.4767150851127763e-01:3.0494841727246236e+00:3.6108711256026588e-01:3.9786948727868352e+00 + CVs 20 + -1.2831957667872876e-01 3.1045919232202612e-01 1.7954891338785156e-01 + -2.6963576185292787e-01 6.0706283549188245e-01 3.2687280927581991e-01 + -4.2347113157220651e-01 8.8668351365034104e-01 4.2745071203965124e-01 + -5.8408148442789809e-01 1.1486583621123057e+00 4.7859631897758026e-01 + -7.4673422412202162e-01 1.3970912479767026e+00 4.9042784097145409e-01 + -9.1321431662897878e-01 1.6397865990381080e+00 4.7288716317064355e-01 + -1.0938368974436954e+00 1.8841449102229819e+00 4.2669327405440427e-01 + -1.3045308328412872e+00 2.1331846282349174e+00 3.5508842525013418e-01 + -1.5552766883177815e+00 2.3854880580373883e+00 2.8576349206222679e-01 + -1.8451441568086944e+00 2.6337197095888745e+00 2.5451164063860754e-01 + -2.1773500673206985e+00 2.8677147616582883e+00 2.6694660111443647e-01 + -2.5686279498423703e+00 3.0681497304181962e+00 3.0361856633448414e-01 + -3.0292491232284444e+00 3.1751393898251372e+00 3.4496237771607141e-01 + -3.5254152877637184e+00 3.1021070339123540e+00 3.8141685697561878e-01 + -3.9867312715798100e+00 2.8160859030299159e+00 4.3718534715278123e-01 + -4.3501728528348309e+00 2.3564374099726471e+00 5.7446229983516073e-01 + -4.5962350995830494e+00 1.8325495370594411e+00 8.6678589899775238e-01 + -4.7335930672727544e+00 1.4512243755653913e+00 1.3310603070014944e+00 + -4.7530577725231424e+00 1.3981553502573196e+00 1.8320459165484646e+00 + id 13633 + loc 2.6500526070594788e-01 1.7231997847557068e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4690339651548383e-01:4.4689892748151872e-01:3.6578546815843049e-03:3.6006316503395008e-01:4.8913585708061202e-01:3.6237859281304652e-01:1.0026118784202591e+00:3.0242811857260427e-01:1.7036617151365725e+00:3.6349321625217029e-01:2.3016925018367362e+00:3.1598068712078059e-01:3.0283531368695571e+00:4.1887356531986564e-01:3.6515561882386001e+00 + CVs 20 + -2.9484158717380649e-01 2.3399453072759324e-01 -5.7067564695437750e-02 + -5.5720019497781414e-01 4.7333379723811381e-01 -8.2702042223429806e-02 + -8.0027880561445286e-01 7.2074756279349073e-01 -8.3897473711352311e-02 + -1.0380822806851921e+00 9.7015225653585457e-01 -8.0618973889557410e-02 + -1.2857738848151627e+00 1.2032469267812198e+00 -1.0519020960361314e-01 + -1.5518207430154969e+00 1.3967796226048255e+00 -1.7636347512307382e-01 + -1.8391361078364798e+00 1.5321967712065983e+00 -2.9630293277924324e-01 + -2.1453676474833836e+00 1.5891944880812403e+00 -4.7782721851697374e-01 + -2.4292979493535727e+00 1.5422249552462188e+00 -7.3531574190026316e-01 + -2.6244521352744510e+00 1.3904665411618209e+00 -1.0408717393011095e+00 + -2.7146080945183146e+00 1.1634181316513144e+00 -1.3485804428921484e+00 + -2.7182543181418519e+00 8.8232879612173454e-01 -1.6301731341113528e+00 + -2.6493557977951196e+00 5.5784523945171560e-01 -1.8556746028689481e+00 + -2.5319902989727141e+00 2.1245564636430814e-01 -2.0177483504319942e+00 + -2.4084758700410291e+00 -1.2970635592255186e-01 -2.1834486346909654e+00 + -2.3168837062857963e+00 -4.4221948550069867e-01 -2.4530431130558066e+00 + -2.3126250907649704e+00 -6.2071342232178517e-01 -2.8711828780437081e+00 + -2.4391230853744958e+00 -5.8948317268498729e-01 -3.3220691114901721e+00 + -2.6065831327934599e+00 -5.2366987179196711e-01 -3.7943195727743024e+00 + id 13634 + loc 3.3994814753532410e-01 5.0411086529493332e-02 382 + blend 0.0000000000000000e+00 + interp 3.9699951863543631e-01:2.3162018179654445e-01:5.2739946784483993e-01:3.9699554864025000e-01:1.0016669117002104e+00:2.7640305446549140e-01:1.8248623195343550e+00:2.7934659243653698e-01:2.4432506891231234e+00:3.2184127093987092e-01:3.0030365827009082e+00:3.4719168483482743e-01:3.9591627963748524e+00 + CVs 20 + -4.1127278707903053e-01 1.9033279325978403e-01 -7.4085501382821950e-01 + -7.5147613044493156e-01 2.6391562255128231e-01 -1.2866426326574745e+00 + -1.0677919211211548e+00 2.7560799151739568e-01 -1.7996983851903228e+00 + -1.3780334980297724e+00 2.4697296010956782e-01 -2.3548392557566582e+00 + -1.6745241812386966e+00 1.7195795830041205e-01 -2.9405663379979092e+00 + -1.9495746119168031e+00 4.5335575106967507e-02 -3.5355609827777466e+00 + -2.1961404510120293e+00 -1.3558164140678697e-01 -4.1111619040934473e+00 + -2.4072619462489504e+00 -3.6485470684641674e-01 -4.6391895406719694e+00 + -2.5821775179575814e+00 -6.2518803706919712e-01 -5.1025514387077084e+00 + -2.7290201379594143e+00 -8.9416056126031251e-01 -5.4985569837713486e+00 + -2.8564102675580170e+00 -1.1530191306821109e+00 -5.8324927460636609e+00 + -2.9675829172737398e+00 -1.3936602051552955e+00 -6.1157359645390876e+00 + -3.0656156472143912e+00 -1.6303071655754611e+00 -6.3713598700880141e+00 + -3.1554644326745986e+00 -1.9094043593402383e+00 -6.6270118977846622e+00 + -3.2372708595305788e+00 -2.2736037978059342e+00 -6.8900964282679062e+00 + -3.3129451235311023e+00 -2.7083879575301584e+00 -7.1551732922505247e+00 + -3.4013126574007453e+00 -3.1675213028637828e+00 -7.4220812610534708e+00 + -3.5422850057715962e+00 -3.6061232571947430e+00 -7.6813073902896312e+00 + -3.7395493542372771e+00 -3.9700115064480808e+00 -7.9127595103516306e+00 + id 13635 + loc 5.7624214887619019e-01 4.3492218852043152e-01 378 + blend 0.0000000000000000e+00 + interp 4.9652243462659634e-01:3.4951726370540981e-01:2.4241633997370970e-01:4.2569392382412469e-01:9.1721139132665208e-01:3.1360772350417598e-01:1.8455526947111220e+00:4.0455324625144928e-01:2.2409774986178976e+00:4.9651746940225011e-01:2.8473021426748923e+00:4.5327186306154860e-01:3.0648266206812695e+00:2.6734158539563085e-01:3.5837520996934389e+00 + CVs 20 + -4.2300701150053616e-01 3.8702941611012848e-01 -1.4805217764290696e-01 + -8.0710241039989705e-01 7.2341914462821943e-01 -2.5227603322676967e-01 + -1.1807315419878752e+00 1.0244240179030477e+00 -3.2585931078943137e-01 + -1.5499033575128838e+00 1.3058275159229691e+00 -3.8296635164763443e-01 + -1.9132821821517578e+00 1.5727522126042306e+00 -4.3987078437582716e-01 + -2.2837533304002857e+00 1.8240336599251803e+00 -5.1568537053270469e-01 + -2.6746524009225729e+00 2.0479921533317995e+00 -6.2912727844099958e-01 + -3.0875144993491750e+00 2.2268063680325767e+00 -7.9546730764733387e-01 + -3.5122927360129204e+00 2.3433705027482126e+00 -1.0256738734208264e+00 + -3.9328984806089879e+00 2.3819740616164182e+00 -1.3223382344806769e+00 + -4.3348962437562406e+00 2.3267549774314538e+00 -1.6742909491934723e+00 + -4.7052797258351093e+00 2.1591001936242957e+00 -2.0570772948254583e+00 + -5.0218533786551802e+00 1.8633118873059011e+00 -2.4354636807535330e+00 + -5.2632927976223076e+00 1.4518459611975558e+00 -2.7794302414922871e+00 + -5.4481900796720328e+00 9.7142616674026439e-01 -3.0984792787098598e+00 + -5.6394035313278499e+00 4.7466058069618899e-01 -3.4294126098738085e+00 + -5.9117952912312237e+00 -1.5297151336381987e-03 -3.7789557356732910e+00 + -6.3030770605494428e+00 -4.3323093635046117e-01 -4.1065992462800969e+00 + -6.6243536405157073e+00 -8.3491250306570075e-01 -4.4321170719779710e+00 + id 13636 + loc 3.8728293776512146e-01 3.0497097969055176e-01 396 + blend 0.0000000000000000e+00 + interp 4.6752769818709661e-01:3.6637057543151946e-01:1.5247660211494007e-01:2.4928602643988074e-01:1.0032312530417626e+00:3.9460313310104922e-01:1.9812803776379573e+00:4.5917705174347073e-01:2.3543490173870718e+00:4.2499305043433744e-01:3.0453897467139068e+00:4.6752302291011477e-01:3.9432200767386587e+00 + CVs 20 + -2.4507051300033303e-01 2.0876971040170095e-01 -7.5140812162974902e-01 + -4.3465320375058880e-01 2.8944262347053867e-01 -1.3140454392247574e+00 + -5.9712233100263723e-01 3.2994412635340536e-01 -1.8169026032429185e+00 + -7.4457994209081824e-01 3.5909281553775829e-01 -2.3057700727218502e+00 + -8.7820071664680932e-01 3.7153722052593818e-01 -2.7713966831209311e+00 + -1.0036286593993102e+00 3.6390093918227295e-01 -3.2099951919611374e+00 + -1.1271728134788801e+00 3.3455545571685086e-01 -3.6205804994801913e+00 + -1.2534352490356104e+00 2.8254190229531950e-01 -4.0047283971200143e+00 + -1.3846302619041961e+00 2.0408001139497012e-01 -4.3711433627876701e+00 + -1.5205790289700243e+00 8.9107200234711970e-02 -4.7324875240909803e+00 + -1.6631497234761419e+00 -7.6868044459432294e-02 -5.0890155096617544e+00 + -1.8174360411386288e+00 -3.0605348038344848e-01 -5.4231656088211837e+00 + -1.9817856587551059e+00 -6.0468616887443116e-01 -5.7186525239791717e+00 + -2.1436364085188400e+00 -9.7512560200195031e-01 -5.9720454028051133e+00 + -2.2893575922042850e+00 -1.4093380925915606e+00 -6.1812965987289870e+00 + -2.4099299568285182e+00 -1.8787631381752012e+00 -6.3383999832605866e+00 + -2.5003668741251612e+00 -2.3563121947274142e+00 -6.4380738662498267e+00 + -2.5603162622478353e+00 -2.8430145102461450e+00 -6.4781281442689451e+00 + -2.6038087633148237e+00 -3.3970226944982929e+00 -6.4519282349631926e+00 + id 13637 + loc 3.8732370734214783e-01 3.4760892391204834e-01 376 + blend 0.0000000000000000e+00 + interp 4.5995195480562262e-01:3.1233587354988379e-01:7.6531451043626575e-03:4.4011736715898386e-01:4.6403483042353455e-01:2.9567321318483386e-01:1.0743292644233411e+00:4.0308952683867255e-01:1.8251555018521151e+00:3.3896051220217854e-01:2.1228318927597774e+00:4.5994735528607461e-01:2.9461815893662444e+00:2.9442893374315593e-01:3.4468278068949800e+00 + CVs 20 + 6.1418873168287957e-01 4.1442554841261359e-01 2.0864175471211760e-01 + 1.1676763132871124e+00 6.8207134235645495e-01 2.8602855729199239e-01 + 1.7404386216963736e+00 7.9369457363192275e-01 2.4249270496127076e-01 + 2.3520660853737230e+00 8.1712095682611996e-01 1.1945361013845873e-01 + 2.9927067586232083e+00 8.3459461631328224e-01 -1.5335515645391595e-02 + 3.6608765039691615e+00 8.7385645591889460e-01 -8.0206980775669456e-02 + 4.3500791337339786e+00 9.2143188918684693e-01 -1.0531060860892616e-02 + 5.0345734511766613e+00 9.6321145242123274e-01 2.2447910938719917e-01 + 5.6748449799002323e+00 9.7983438835997316e-01 6.2267706367697329e-01 + 6.2395485539406916e+00 9.3098678786012989e-01 1.1481818738625718e+00 + 6.6987446152063228e+00 7.6217775559058110e-01 1.7444890510178259e+00 + 6.9998495095293993e+00 4.2342620444658108e-01 2.3345174491872687e+00 + 7.0875105499222339e+00 -8.4625242633108222e-02 2.8246102900288452e+00 + 6.9384781975790393e+00 -6.8811945991840240e-01 3.1397886284995948e+00 + 6.5984357951438284e+00 -1.2772377927705794e+00 3.1859147395304168e+00 + 6.2941226336166594e+00 -1.7473251880733054e+00 2.8731966674162619e+00 + 6.2675584807570681e+00 -1.9752689394186493e+00 2.2046330688349318e+00 + 6.3718948243097566e+00 -2.0010431295593194e+00 1.5290167924785416e+00 + 6.2707682253512980e+00 -2.5684998515424597e+00 1.2994289580390517e+00 + id 13638 + loc 2.3062781989574432e-01 2.1641334891319275e-01 393 + blend 0.0000000000000000e+00 + interp 4.5031106842011198e-01:2.7154153862588792e-01:5.7186260912398534e-03:4.0391963889414778e-01:5.1212030344754966e-01:4.5030656530942781e-01:9.9812012925124693e-01:4.2347332312643393e-01:1.4246309194182964e+00:4.1741385306392426e-01:1.9952996189707821e+00:3.9724414355062182e-01:2.5760453504817731e+00:3.2806793234855752e-01:3.0488416172079278e+00 + CVs 20 + -3.6730908670290205e-02 3.5025581244126175e-01 3.6035818493866573e-01 + -7.9159705158447488e-02 7.0364012521707853e-01 7.1921511204196920e-01 + -1.1982483840645511e-01 1.0673892160236840e+00 1.0682400023440564e+00 + -1.7607616178257410e-01 1.4345947886197012e+00 1.4054891796519606e+00 + -2.8012882319542820e-01 1.7890307305429818e+00 1.7332826984004046e+00 + -4.5251717247921286e-01 2.1177708467573142e+00 2.0488038913487108e+00 + -6.8556351001037585e-01 2.4124119174085155e+00 2.3357313791373970e+00 + -9.5217493351581806e-01 2.6662450121651213e+00 2.5775982047162307e+00 + -1.2291624548526978e+00 2.8794864184835030e+00 2.7719050356125132e+00 + -1.5084465582521229e+00 3.0607515971401758e+00 2.9258591376581040e+00 + -1.8003680834906257e+00 3.2187979909873832e+00 3.0578746893035396e+00 + -2.1243842008120835e+00 3.3490886972045351e+00 3.1947464369700880e+00 + -2.4900103150197039e+00 3.4333521757934871e+00 3.3449696540766602e+00 + -2.8959695312450684e+00 3.4478458329958932e+00 3.4956393185473855e+00 + -3.3123394228384706e+00 3.3477689337242569e+00 3.6330762997161554e+00 + -3.6553594193514543e+00 3.0965682524567431e+00 3.7403142698325347e+00 + -3.8391267173210020e+00 2.7298246233071231e+00 3.8406557635625180e+00 + -3.7794962965991714e+00 2.3510528299145741e+00 4.0191183508504178e+00 + -3.4026074233910526e+00 2.0654107048787602e+00 4.3579349724644283e+00 + id 13639 + loc 8.5647833347320557e-01 2.3983910679817200e-01 375 + blend 0.0000000000000000e+00 + interp 4.2686777598697973e-01:3.1925957729047827e-01:6.5336083398706890e-02:2.9622176845522230e-01:1.0419076370464671e+00:2.7207432089924766e-01:1.8023482739443186e+00:3.8776460148778824e-01:2.2221435981385618e+00:4.2686350730921985e-01:2.9139310888424106e+00:3.2192853338006022e-01:3.2342013555420546e+00 + CVs 20 + 6.4101264514667022e-01 4.0062875392859815e-01 4.7560720274418822e-02 + 1.1271540318603537e+00 6.2216579949955020e-01 9.1057113086854824e-03 + 1.5632733078725798e+00 7.0346051700686552e-01 -1.0003064877691598e-01 + 1.9990325341476116e+00 6.9707865769452493e-01 -2.7190641905185275e-01 + 2.4418950276095757e+00 6.6828045164557115e-01 -5.0066979127582634e-01 + 2.9224990250450427e+00 6.7172827314364614e-01 -7.7210356380049450e-01 + 3.4842727331447199e+00 7.2843054384533124e-01 -1.0378901210954641e+00 + 4.1459492706521637e+00 8.4275796744866405e-01 -1.2285642759753377e+00 + 4.8818510552676635e+00 1.0253820544208385e+00 -1.2853972934414173e+00 + 5.6334365645671047e+00 1.2748472395624093e+00 -1.1829379042208128e+00 + 6.3805663118021467e+00 1.5603231317501092e+00 -9.3196330118508852e-01 + 7.1510159242720812e+00 1.8275760648720087e+00 -5.1447886663173259e-01 + 7.9338426681058323e+00 1.9700243225142275e+00 1.0933953782700234e-01 + 8.6464692794276097e+00 1.8542046994939905e+00 9.3428205042104961e-01 + 9.1535453143958811e+00 1.4272554828194659e+00 1.8408861034856558e+00 + 9.3897523765825497e+00 8.7377831618673119e-01 2.5005777830680036e+00 + 9.5081091399690401e+00 5.8807173990848227e-01 2.7044794952327651e+00 + 9.6077229998543281e+00 5.0432110983005884e-01 2.6783793414186476e+00 + 9.8140745394849525e+00 -1.7436986710238767e-01 2.5112992198279045e+00 + id 13640 + loc 2.6998308300971985e-01 7.8541111946105957e-01 400 + blend 0.0000000000000000e+00 + interp 4.9587210608333565e-01:4.4281919397593567e-01:7.7873728657110286e-02:3.0452186821032085e-01:9.9715272466819671e-01:2.7955186572133300e-01:1.9451462850454910e+00:2.8074832747527928e-01:2.4426800325051601e+00:4.9586714736227483e-01:3.0411808515807484e+00:4.3064917827601829e-01:3.5212952646068985e+00 + CVs 20 + -1.7558458091609550e-01 3.8055217799854441e-01 -1.3164852365028007e-01 + -3.5096334500533161e-01 7.5768550916126909e-01 -2.8568805942927755e-01 + -5.1422659082677247e-01 1.1213980780096491e+00 -4.9092578720058089e-01 + -6.6762880458424456e-01 1.4622709233532023e+00 -7.5767153055084324e-01 + -8.1694031867045347e-01 1.7704137403451909e+00 -1.0846156724964846e+00 + -9.6448773619004391e-01 2.0379177233740600e+00 -1.4682687239678240e+00 + -1.1086027912360883e+00 2.2569366052796456e+00 -1.9062135163639313e+00 + -1.2426292303582591e+00 2.4170455452346391e+00 -2.3967199001541788e+00 + -1.3536559625074998e+00 2.5057583602965576e+00 -2.9360937077840390e+00 + -1.4260021697495604e+00 2.5100095768721142e+00 -3.5147473073977058e+00 + -1.4610339315622116e+00 2.4210429485903733e+00 -4.1120627700075492e+00 + -1.4933968465417324e+00 2.2402496046471647e+00 -4.6988351181230401e+00 + -1.5662247785124404e+00 1.9696824830330202e+00 -5.2409782413124724e+00 + -1.7088212411721744e+00 1.5988401942803403e+00 -5.6887181374119180e+00 + -1.9325607895794561e+00 1.1413286501109605e+00 -5.9788011201674154e+00 + -2.2158233350247341e+00 6.7508806580277847e-01 -6.0967767801179438e+00 + -2.5122521791027053e+00 2.7034999253140080e-01 -6.1111805284698208e+00 + -2.7701618163805204e+00 -8.4475550374342179e-02 -6.1079618570996450e+00 + -2.8400433149593796e+00 -4.8999182248571382e-01 -6.2803297795943216e+00 + id 13641 + loc 3.2551038265228271e-01 2.2365878522396088e-01 395 + blend 0.0000000000000000e+00 + interp 4.4766582606087840e-01:3.1085214141788392e-01:1.4792593534832121e-01:3.8158181279531667e-01:1.0356631680032931e+00:4.4766134940261781e-01:1.7345836810644133e+00:3.9223058826849444e-01:2.0498702706760845e+00:3.8814905094426116e-01:2.9765496302705770e+00:3.6666921556172077e-01:3.8336022429152781e+00 + CVs 20 + -3.1784685260355300e-01 1.3400837568045917e-01 -1.6444597355451712e-01 + -5.9135670620976144e-01 2.4682136077466196e-01 -3.2278942844366870e-01 + -8.4909467904990765e-01 3.4937556138397918e-01 -4.8920479869961842e-01 + -1.1035939880528720e+00 4.4721285497941476e-01 -6.7135303859125361e-01 + -1.3484971660735661e+00 5.3703868506169772e-01 -8.6982092344054995e-01 + -1.5783305537949659e+00 6.1497169059532497e-01 -1.0825345312050652e+00 + -1.7928361856505641e+00 6.8043536634572144e-01 -1.3052335364900860e+00 + -1.9946940224770282e+00 7.3512172153137101e-01 -1.5325818013947812e+00 + -2.1818706061959565e+00 7.7926754661953979e-01 -1.7606639175819945e+00 + -2.3483799822969225e+00 8.1105563362169186e-01 -1.9877940048602962e+00 + -2.4989481277460186e+00 8.2444632925891548e-01 -2.2132145496111360e+00 + -2.6530043117524622e+00 8.0560254901662764e-01 -2.4340210452408657e+00 + -2.8251495084568923e+00 7.4296683445237233e-01 -2.6439461338321739e+00 + -3.0142091115912928e+00 6.3748684488711516e-01 -2.8386684701491314e+00 + -3.2149100536370550e+00 4.9850774863425817e-01 -3.0156398563108238e+00 + -3.4283302379846705e+00 3.3735609652243692e-01 -3.1706597331244497e+00 + -3.6554654554929953e+00 1.5843565498053458e-01 -3.2994143553061046e+00 + -3.8852743379828341e+00 -4.8272090107992938e-02 -3.3968657079981379e+00 + -4.0706449933599993e+00 -3.2618343078339374e-01 -3.4376686341721383e+00 + id 13642 + loc 2.9280292987823486e-01 7.9888415336608887e-01 373 + blend 0.0000000000000000e+00 + interp 4.2757050554417153e-01:3.5576593418714469e-01:5.0122700419472010e-01:2.7272968725388291e-01:1.3198947613768959e+00:3.6587980998424219e-01:2.1094594770689548e+00:3.8443584829819327e-01:2.9005633262984132e+00:3.9249911769522211e-01:3.2859295674555984e+00:4.2756622983911613e-01:3.9892521520772788e+00 + CVs 20 + -3.9774986851513172e-01 5.3720375904340600e-01 -1.8747533388682955e-01 + -7.2463211599681765e-01 1.0440448453266535e+00 -3.9132655739514277e-01 + -9.7878433924035235e-01 1.5330227601756845e+00 -6.4169716709588842e-01 + -1.1653328279266126e+00 2.0038254165517122e+00 -9.6242017636179211e-01 + -1.2944244224500352e+00 2.4235806530961099e+00 -1.3597153756013256e+00 + -1.3989579884391772e+00 2.7473538187170341e+00 -1.8177655873669258e+00 + -1.5169167098139080e+00 2.9434399939425315e+00 -2.2992687213801246e+00 + -1.6731976268073776e+00 3.0070417533771718e+00 -2.7532049706738939e+00 + -1.8713608383754037e+00 2.9642771710804730e+00 -3.1357353966036907e+00 + -2.0978895369633896e+00 2.8590879066906716e+00 -3.4290920516160290e+00 + -2.3300896138790854e+00 2.7305064859509285e+00 -3.6414837535883655e+00 + -2.5536902159304580e+00 2.6026504956197449e+00 -3.8100323543426833e+00 + -2.7780239410851610e+00 2.4840482909093837e+00 -3.9793372663474700e+00 + -3.0291319519019426e+00 2.3676550363831765e+00 -4.1811186793386561e+00 + -3.3362854472009777e+00 2.2330373913079353e+00 -4.4270100644583845e+00 + -3.7055312172007184e+00 2.0726042085194454e+00 -4.7017452399843416e+00 + -4.1134022384661515e+00 1.9029406842303769e+00 -4.9738713683518680e+00 + -4.5509956786463981e+00 1.7130265491426608e+00 -5.2069859737575364e+00 + -4.9945839905296818e+00 1.3522462156017880e+00 -5.2325387728220907e+00 + id 13643 + loc 7.6922804117202759e-02 7.3770207166671753e-01 402 + blend 0.0000000000000000e+00 + interp 4.3604586491919778e-01:2.8234307407365655e-01:9.0223272136576671e-01:2.7138362869908628e-01:1.9788979173294248e+00:2.7853086833425017e-01:2.6056185818905377e+00:4.3604150446054862e-01:3.2205051861946634e+00:2.7920794116392128e-01:3.9746250616485632e+00 + CVs 20 + -3.5231207651284305e-02 3.0548569208955278e-01 -5.3068814806463985e-02 + -9.6030683447546894e-02 6.1855370910285856e-01 -1.1068908920301254e-01 + -1.4854983212887629e-01 9.6243800713482008e-01 -1.9117620929167900e-01 + -1.6502442785376104e-01 1.3309028318781666e+00 -3.0319042143209818e-01 + -1.4411728640236410e-01 1.7046967391421788e+00 -4.5297329882272791e-01 + -9.3149229800761457e-02 2.0657219346229483e+00 -6.4083529961645502e-01 + -2.3374555429433230e-02 2.4055212106348223e+00 -8.6319365015598493e-01 + 5.3682018261356323e-02 2.7232131026408215e+00 -1.1156554047956764e+00 + 1.2079492853132034e-01 3.0251796848102943e+00 -1.4009087863132850e+00 + 1.5580020360282731e-01 3.3152513800873615e+00 -1.7342524889581192e+00 + 1.5458005167264721e-01 3.5808334738479477e+00 -2.1320826451042114e+00 + 1.4023825435706838e-01 3.7836975025259756e+00 -2.5964536137061005e+00 + 1.4385689923131828e-01 3.8662648255787140e+00 -3.0857352951210046e+00 + 1.9070072812917038e-01 3.8008856870264531e+00 -3.5156248009045106e+00 + 2.9657452937438622e-01 3.6119667850618971e+00 -3.8330518008870378e+00 + 4.6129335187836829e-01 3.3128034841700753e+00 -4.0363384355289558e+00 + 6.4551008559171486e-01 2.8635554063448643e+00 -4.1594593788385570e+00 + 6.7867976113057205e-01 2.3102302145105131e+00 -4.2773657442866613e+00 + 4.1393372344435309e-01 2.1488186137029963e+00 -4.3011734304565161e+00 + id 13644 + loc 1.0691341012716293e-01 9.6599483489990234e-01 374 + blend 0.0000000000000000e+00 + interp 5.4413421854624799e-01:5.4412877720406261e-01:7.8904050974937345e-01:1.7825614034527784e-01:1.8796690049282596e+00:2.7440836438518168e-01:2.2723034894978036e+00:3.9820222216368939e-01:2.8200619253221717e+00:4.5428707118890865e-01:3.1652553004579587e+00:3.5350525005509115e-01:3.9312482960650565e+00 + CVs 20 + -6.0755437034990245e-01 3.7845445240092113e-01 -9.8276452312050649e-02 + -1.1308704928766549e+00 6.5704683363752470e-01 -1.5796556945237727e-01 + -1.6518049448372820e+00 8.7013048162817486e-01 -1.7360722908363047e-01 + -2.2011446698843793e+00 1.0545905599299108e+00 -1.5575823784416659e-01 + -2.7741234421480843e+00 1.2294566771523523e+00 -1.2911983026864360e-01 + -3.3756216024518748e+00 1.3896505269736950e+00 -1.3130301450928272e-01 + -4.0092291095962240e+00 1.5083137887825817e+00 -2.0163203587843270e-01 + -4.6595031258114252e+00 1.5547935283661545e+00 -3.6820632293071243e-01 + -5.2926614060228614e+00 1.5054685583346545e+00 -6.3689316483460634e-01 + -5.8741606497205900e+00 1.3438910874998529e+00 -9.8349926241461749e-01 + -6.3797105511302901e+00 1.0590992875396457e+00 -1.3615411115788494e+00 + -6.7877530298165452e+00 6.4959334514589040e-01 -1.7222211839194850e+00 + -7.0851474489705044e+00 1.4301659870203309e-01 -2.0319136826586730e+00 + -7.3052741585679097e+00 -3.8990107814752051e-01 -2.2935472140832753e+00 + -7.5268121852955003e+00 -8.7122427000143565e-01 -2.5428906953067951e+00 + -7.8113664006190380e+00 -1.2578610175734051e+00 -2.7874408561871342e+00 + -8.1830828110959253e+00 -1.5484625264338692e+00 -2.9807711058737936e+00 + -8.6081265177744282e+00 -1.7585039764535502e+00 -3.0927846317492365e+00 + -8.9262963963602395e+00 -1.9538579576980353e+00 -3.2176844583164472e+00 + id 13645 + loc 8.8813550770282745e-02 1.5713571012020111e-01 409 + blend 0.0000000000000000e+00 + interp 4.1246835883086880e-01:4.1246423414728051e-01:3.4504640920149154e-02:2.7948865766102443e-01:9.6941763674917270e-01:4.1212393067510777e-01:1.3544004747110876e+00:3.0110485963695333e-01:1.9970412847807189e+00:3.0025509771750136e-01:2.5395029409544181e+00:2.6970531179438795e-01:3.0293204443373649e+00 + CVs 20 + -2.7674351873559272e-01 2.2997894628644305e-01 -2.6074059698623492e-01 + -5.3710218118194031e-01 4.8091500355104411e-01 -4.9996501626609713e-01 + -7.9553146220720072e-01 7.6520817917204809e-01 -7.5162379607263741e-01 + -1.0669879923543304e+00 1.0682937708826967e+00 -1.0217098519101351e+00 + -1.3773488859276370e+00 1.3566394936231716e+00 -1.3000857691525038e+00 + -1.7553671849047283e+00 1.5955978392569790e+00 -1.5807553950711246e+00 + -2.2182275788985311e+00 1.7488421976234512e+00 -1.8659102284798728e+00 + -2.7596845265331948e+00 1.7736069720582091e+00 -2.1666532291778822e+00 + -3.3363908489580383e+00 1.6280374911039706e+00 -2.4940979198482891e+00 + -3.8741543536607939e+00 1.2869313398383917e+00 -2.8422760901717550e+00 + -4.2885891756043275e+00 7.7724837657991297e-01 -3.1757742777658269e+00 + -4.5588690822595881e+00 2.0415213949973476e-01 -3.4556807490570369e+00 + -4.7631592401725973e+00 -3.4835941097268397e-01 -3.6838594365519706e+00 + -4.9830612675261792e+00 -8.7364357343647647e-01 -3.8885227048147000e+00 + -5.2626409142446056e+00 -1.3886362621172079e+00 -4.0992991490280000e+00 + -5.5961192351092874e+00 -1.9045803610451233e+00 -4.3427261119503493e+00 + -5.9298349074037464e+00 -2.4223332039008474e+00 -4.6335098451903418e+00 + -6.2053149873097766e+00 -2.9124274092527132e+00 -4.9451720719283978e+00 + -6.4259015575701701e+00 -3.3497648058055294e+00 -5.1910543676630798e+00 + id 13646 + loc 8.4305071830749512e-01 1.5480656921863556e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7744625993116354e-01:2.7997913290441157e-01:1.6371656364317033e-02:2.7792005672596160e-01:1.0650636693034190e+00:3.0965012111798668e-01:1.8866618232695544e+00:2.7409371173985358e-01:2.4584504209297258e+00:3.7744248546856424e-01:3.1656674305335883e+00 + CVs 20 + -1.9977873261318557e-02 4.9685809194087260e-01 1.2730060333210408e-01 + -6.8990280206033539e-02 9.8928752938768094e-01 2.3703585038925193e-01 + -1.6558588302397154e-01 1.4716840306862515e+00 3.1714361914081490e-01 + -3.3547821618921825e-01 1.9344100118056347e+00 3.6699861635235864e-01 + -6.0113627216964094e-01 2.3538560016535364e+00 3.9195298605543960e-01 + -9.6487497433496860e-01 2.6997789737704219e+00 4.0617196397672978e-01 + -1.4107559655694608e+00 2.9481734095864049e+00 4.3640761894269064e-01 + -1.8980324005198632e+00 3.0846091245556688e+00 5.0948598524187472e-01 + -2.3823220080870087e+00 3.1145603704601723e+00 6.4877643898946413e-01 + -2.8607976786623124e+00 3.0171706208894817e+00 9.0503745016536052e-01 + -3.2786804495471564e+00 2.6612272146721074e+00 1.3392607856099086e+00 + -3.4167672009390611e+00 2.0561482124855841e+00 1.7605011122665482e+00 + -3.3187592926711980e+00 1.4671720014225087e+00 1.9871065900367872e+00 + -3.0809825044391093e+00 9.1231951994083205e-01 2.0836734182788543e+00 + -2.7386674136422324e+00 4.0283284926546636e-01 2.0694834257947941e+00 + -2.3903055674842908e+00 -1.6181725423103716e-02 1.9612076980228927e+00 + -2.1328181224359972e+00 -3.5093132140560013e-01 1.8052579158291338e+00 + -2.0197999418669661e+00 -6.2177768296650227e-01 1.6579456820245657e+00 + -1.8445744801493007e+00 -9.1067672495733265e-01 1.5436561773661204e+00 + id 13647 + loc 7.1815854310989380e-01 4.9972665309906006e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9799376749138732e-01:2.7607804452650303e-01:4.5589303212443477e-01:3.6230290963635930e-01:1.0360670592451342e+00:2.6235686870380492e-01:1.8083474651025995e+00:3.1004666447977530e-01:2.3194027783440649e+00:3.9798978755371245e-01:2.8980380859758865e+00:3.2282273379034715e-01:3.6818586738250363e+00 + CVs 20 + -1.2951485152401546e-01 2.1575897177444617e-01 2.2051766331887362e-01 + -2.7088690415509414e-01 4.4037709121980417e-01 4.3206125164114828e-01 + -4.4506815619577955e-01 6.6689307017994115e-01 6.2967523434421480e-01 + -6.6367844877078319e-01 8.9127803991046517e-01 7.9901921558706956e-01 + -9.1625035330272919e-01 1.1178257418707847e+00 9.2281400165647554e-01 + -1.1556125946797651e+00 1.3663426941126826e+00 9.9852919640590820e-01 + -1.3203537058401273e+00 1.6550275374235373e+00 1.0428642006527724e+00 + -1.3852119335400657e+00 1.9819358258011270e+00 1.0822144010529138e+00 + -1.3521644666111277e+00 2.3311614756314918e+00 1.1465819314919161e+00 + -1.2203547682832512e+00 2.6700105906698681e+00 1.2903916683235419e+00 + -9.8021969089747829e-01 2.9056642220097060e+00 1.5763429023004383e+00 + -6.6933189992140729e-01 2.9323082737364206e+00 1.9386655588089752e+00 + -3.5116704841403457e-01 2.7739972538195334e+00 2.2913298193209375e+00 + -6.8944588579421096e-02 2.4684641963696961e+00 2.6243910423108625e+00 + 1.3806997967371437e-01 2.0462860366291435e+00 2.9380939510518607e+00 + 2.3366726597882437e-01 1.5059394874338150e+00 3.2043931320964356e+00 + 1.7274250017841286e-01 8.4410259295718815e-01 3.3368492391178450e+00 + -3.8623209509771717e-02 1.7821992677691068e-01 3.2787635965333575e+00 + -8.7128176161863191e-02 -1.6725638382240515e-01 3.3675754948354304e+00 + id 13648 + loc 9.0767776966094971e-01 7.1818053722381592e-02 407 + blend 0.0000000000000000e+00 + interp 4.2914783140223184e-01:2.4632336521010062e-01:6.6312037468651885e-01:3.4631129715000025e-01:1.1495151750330252e+00:3.5806390843121172e-01:1.8476963901049097e+00:4.2914353992391785e-01:2.5322798760991847e+00:3.7637277720875484e-01:2.9621526137154586e+00:3.4083621838209327e-01:3.3766559758068615e+00 + CVs 20 + -3.3988781329350470e-01 4.3412674774218662e-01 5.4270422809014902e-02 + -5.0047241450250457e-01 7.3361904637809094e-01 1.0386817229760938e-01 + -6.2318240854167528e-01 9.6709806602370296e-01 1.4702444365116674e-01 + -7.6803997798059342e-01 1.1821922106011036e+00 1.8736105904133871e-01 + -9.2955800491451424e-01 1.3707301715414000e+00 2.1481154395085522e-01 + -1.1059688474902578e+00 1.5205787785389879e+00 2.1341770113600483e-01 + -1.2964807842882098e+00 1.6088128131541437e+00 1.5957553895103524e-01 + -1.4856298114478363e+00 1.5943435615414048e+00 3.0591417003609372e-02 + -1.6234963688018285e+00 1.4511987573114102e+00 -1.5456296631002542e-01 + -1.6874300447886108e+00 1.2402701533850511e+00 -3.2579139896353426e-01 + -1.7300542230203286e+00 1.0348516913344319e+00 -4.5656740999466572e-01 + -1.7909843948966906e+00 8.4247564852339440e-01 -5.6385524453593872e-01 + -1.8801141816497136e+00 6.5556999918925241e-01 -6.6031430591047324e-01 + -2.0110571098529553e+00 4.8920747448302049e-01 -7.5579156315972340e-01 + -2.2013479624217736e+00 3.7444150509213825e-01 -8.5798109407627976e-01 + -2.4474503610274523e+00 3.3511678004899381e-01 -9.5758485673218874e-01 + -2.7198094343860313e+00 3.7200260474680336e-01 -1.0321982000187617e+00 + -2.9818223207870975e+00 4.6796184810252572e-01 -1.0727275892233772e+00 + -3.1759031873395571e+00 4.7119373100676687e-01 -1.1307762708037279e+00 + id 13649 + loc 3.7596625089645386e-01 7.4011904001235962e-01 412 + blend 0.0000000000000000e+00 + interp 3.8016753765653288e-01:3.4379542148196585e-01:2.5665833181355402e-02:3.1534376669707670e-01:9.2393946963904749e-01:3.8016373598115633e-01:1.4369002641536603e+00:3.5407958272705475e-01:2.0016216540995626e+00:2.6371398620074910e-01:2.9992713463068248e+00:3.7431970241239559e-01:3.5712607947522796e+00 + CVs 20 + 7.6810681226874100e-01 1.3118567207724852e-01 -1.8311467717007618e-01 + 1.2516113220248573e+00 1.1517062071669271e-01 -3.4720479806557081e-01 + 1.6581386061945365e+00 4.5896391965023653e-02 -4.9307678201129451e-01 + 2.0545817837824591e+00 -4.1573189394083498e-02 -6.1964135247951557e-01 + 2.4262438134187367e+00 -1.4615938900362890e-01 -7.2828720192888252e-01 + 2.7635678173873446e+00 -2.6458423370333417e-01 -8.2343394079171284e-01 + 3.0622360433640829e+00 -3.9302765182189159e-01 -9.1026611397488055e-01 + 3.3235046014671710e+00 -5.2482401832908954e-01 -9.9451440622217646e-01 + 3.5554039389464540e+00 -6.5219786345587549e-01 -1.0825926309593441e+00 + 3.7679585766301980e+00 -7.6838508705282860e-01 -1.1766182493050663e+00 + 3.9577580820275018e+00 -8.5099873857186359e-01 -1.2609069393968833e+00 + 4.1079303234645490e+00 -8.5498385614986405e-01 -1.2963849091736634e+00 + 4.2376164956621238e+00 -7.7205293354506077e-01 -1.2581397270316659e+00 + 4.4026172651945235e+00 -6.6808329349043771e-01 -1.1773290331988560e+00 + 4.6242605126104595e+00 -5.9223477194912610e-01 -1.0933462084249594e+00 + 4.8920709094280568e+00 -5.4027457847859983e-01 -9.9786908944556707e-01 + 5.1996098672190953e+00 -5.1663486004307013e-01 -8.7568359171808208e-01 + 5.5323095376064648e+00 -5.4554973636935977e-01 -7.5306568631287729e-01 + 5.7547443206179274e+00 -6.9553610420065226e-01 -8.2840581307644512e-01 + id 13650 + loc 2.0001048687845469e-03 7.8838855028152466e-02 401 + blend 0.0000000000000000e+00 + interp 3.7928145001589941e-01:2.8817206084427960e-01:9.7690664666727256e-01:2.8027757089901367e-01:1.5946698181520040e+00:2.8078206130813738e-01:2.1544684523537034e+00:3.5731989344738285e-01:2.8950194387198569e+00:3.7927765720139928e-01:3.1743922322055362e+00:2.7958390928705684e-01:3.9200004511642130e+00 + CVs 20 + -2.5252929704146415e-01 2.6619080771834203e-01 8.4809036352768721e-02 + -4.9348833776879297e-01 5.2056203168218984e-01 2.2797864717060398e-01 + -7.2761907968882256e-01 7.6903622292872398e-01 4.0329548754484446e-01 + -9.5496099239571886e-01 1.0125049910012636e+00 5.9184945258275934e-01 + -1.1684851990553040e+00 1.2465786826180629e+00 7.8536549096129005e-01 + -1.3475250359586344e+00 1.4574240610811193e+00 9.7196481138138213e-01 + -1.4631845754921948e+00 1.6359033525385551e+00 1.1362771421548017e+00 + -1.4899169023737935e+00 1.7901244541255585e+00 1.2360205019356261e+00 + -1.4460226037782555e+00 1.9651268433148892e+00 1.2469243143420081e+00 + -1.3851947733019987e+00 2.1579181011733524e+00 1.2890008820381706e+00 + -1.2853176797744099e+00 2.2332669537165550e+00 1.4732452202100914e+00 + -1.0968529875275670e+00 2.0600856030363199e+00 1.7820388152823665e+00 + -8.5052767715731947e-01 1.5845455326755982e+00 2.1786452168899992e+00 + -6.6392611047549643e-01 8.7257028822220739e-01 2.6748988939475979e+00 + -6.4102457440600802e-01 1.1870444657857432e-01 3.3494453976920968e+00 + -8.1049054377578489e-01 -3.7699059080965097e-01 4.2902373890178866e+00 + -1.0998467717403477e+00 -2.2611631533819287e-01 5.4051913739428095e+00 + -1.2518747525801470e+00 6.0316984811586816e-01 6.1982841052296163e+00 + -1.2489693289656436e+00 1.0607340055953296e+00 6.6801769852347954e+00 + id 13651 + loc 6.7338746786117554e-01 8.7604515254497528e-02 399 + blend 0.0000000000000000e+00 + interp 4.5714312785325378e-01:2.7012510680716489e-01:7.9704230254901021e-01:4.2945942711936158e-01:1.0218433518521859e+00:4.5713855642197526e-01:1.7005058735030771e+00:4.4115600394587207e-01:2.0086457205380430e+00:2.8714646995392734e-01:2.3967371753406326e+00:2.7707122431072206e-01:3.0207224314157255e+00:3.0085096017605306e-01:3.9945957890192307e+00 + CVs 20 + 1.7104649072408187e-01 2.4141117091250605e-01 2.5370487077731413e-01 + 3.3142440948372132e-01 4.5502476531473079e-01 4.8444464462866776e-01 + 4.8908006129653980e-01 6.4795950623844645e-01 7.1800594223595127e-01 + 6.5501101193504918e-01 8.2722133165642964e-01 9.7153908601117323e-01 + 8.3958645809835064e-01 9.9578687772493313e-01 1.2419630424485333e+00 + 1.0512784523643797e+00 1.1534625583289619e+00 1.5196839211976765e+00 + 1.2925169102200207e+00 1.2975538040350818e+00 1.7988971594466134e+00 + 1.5626235917588278e+00 1.4215005160260690e+00 2.0779767210301086e+00 + 1.8626701247599540e+00 1.5121455064864426e+00 2.3573003968180899e+00 + 2.1952175488646386e+00 1.5486241291437097e+00 2.6350737900689740e+00 + 2.5604776516576915e+00 1.5026251093973753e+00 2.9006736511387134e+00 + 2.9552174348809599e+00 1.3514606990246114e+00 3.1365703570925607e+00 + 3.3766596717294943e+00 1.0977715873407035e+00 3.3309178949986493e+00 + 3.8279634227835597e+00 7.6901015175049303e-01 3.4986078753489718e+00 + 4.3211886412471774e+00 4.0532646547392859e-01 3.7017359831540637e+00 + 4.8559263847142944e+00 4.7817162106646771e-02 4.0491659835507390e+00 + 5.3658766411095788e+00 -2.5468989561261246e-01 4.6992651832035452e+00 + 5.6844065304843516e+00 -3.8164456371304523e-01 5.6691376696263678e+00 + 6.0035651200759581e+00 -4.8645049731886081e-01 6.1828007482934053e+00 + id 13652 + loc 3.3533683419227600e-01 2.1500761806964874e-01 1078 + blend 0.0000000000000000e+00 + interp 3.6468635724984722e-01:2.7261281198229037e-01:7.9386733686013145e-01:2.7130322385266198e-01:1.2602514714452184e+00:3.6468271038627476e-01:1.9141446157350994e+00:2.6545187264727377e-01:2.4538113335469443e+00:3.1366245172525109e-01:3.1237328957279646e+00:2.9337636528764965e-01:3.9889218858406417e+00 + CVs 20 + 9.2999212021711922e-02 3.2848600562583102e-01 -1.6095622346379548e-01 + 1.4087309522827737e-01 6.0927710226961129e-01 -3.2061393015376943e-01 + 1.7421261818453171e-01 8.6291339478671536e-01 -4.9258164712130298e-01 + 2.0614429027437153e-01 1.0963894193377408e+00 -6.8113301220420619e-01 + 2.3436972444029758e-01 1.3091800612303659e+00 -8.8341427523497207e-01 + 2.5650705244010080e-01 1.5026261243273673e+00 -1.0954461106073294e+00 + 2.6606780238515959e-01 1.6781156130882868e+00 -1.3144395769109809e+00 + 2.5448003460960145e-01 1.8355166110650569e+00 -1.5381548116634169e+00 + 2.1567948861566399e-01 1.9738121496771663e+00 -1.7618747435003659e+00 + 1.4617151515909566e-01 2.0902864761285889e+00 -1.9799231676186189e+00 + 4.3639992944846995e-02 2.1775182308404926e+00 -2.1902681914271334e+00 + -9.2500355034836557e-02 2.2237437610881523e+00 -2.3934210668108826e+00 + -2.6115767539143120e-01 2.2220850350019732e+00 -2.5887261318055685e+00 + -4.6348802016144219e-01 2.1787924762128252e+00 -2.7729346168831865e+00 + -7.1005465451702765e-01 2.1185775941693636e+00 -2.9394027760241181e+00 + -1.0361036604076515e+00 2.0735044483094063e+00 -3.0878725579579620e+00 + -1.4888204990999852e+00 1.9904819313238558e+00 -3.2487105536513519e+00 + -1.9074816687458147e+00 1.6912771719962965e+00 -3.4406001064116407e+00 + -1.9630500509520852e+00 1.3624054151768430e+00 -3.5275609920344912e+00 + id 13653 + loc 1.3997372984886169e-01 4.9519518017768860e-01 382 + blend 0.0000000000000000e+00 + interp 4.4011094048541133e-01:3.9288062589089634e-01:4.1650929301585804e-01:3.6582544853691074e-01:9.8118231288360491e-01:4.4010653937600647e-01:1.7586403741540675e+00:3.3930639288174869e-01:1.9730061748159393e+00:3.6306495875045602e-01:2.9930796276921341e+00:4.1547549995168792e-01:3.4411936904657905e+00:3.4618211853004216e-01:3.9998197095683090e+00 + CVs 20 + -4.8149891938674927e-01 1.7398437728928212e-01 -8.0761764577168127e-01 + -8.5707053779632858e-01 2.3959699587249689e-01 -1.3483605756781607e+00 + -1.2095475132629812e+00 2.7044706459315682e-01 -1.8137567301869859e+00 + -1.5742039147083637e+00 2.9996821989207678e-01 -2.2861766502032950e+00 + -1.9454592969503732e+00 3.1555769206654616e-01 -2.7597476538076968e+00 + -2.3199839394657782e+00 2.9963929070237993e-01 -3.2280873611681784e+00 + -2.6987466323780316e+00 2.3472716253326764e-01 -3.6844759894626842e+00 + -3.0835784474698982e+00 1.0356462081027695e-01 -4.1222770581439185e+00 + -3.4702313264443108e+00 -1.1018920286814460e-01 -4.5327132262859262e+00 + -3.8464480265560788e+00 -4.1676507646069982e-01 -4.9015969258868024e+00 + -4.1982540353901427e+00 -8.1418220933241892e-01 -5.2116369444782737e+00 + -4.5161669440612338e+00 -1.2897753171815276e+00 -5.4545419269694237e+00 + -4.7961210051054044e+00 -1.8284476233625127e+00 -5.6357617293826472e+00 + -5.0375378313789039e+00 -2.4144027339646992e+00 -5.7687225139040192e+00 + -5.2458061154716935e+00 -3.0310502136685251e+00 -5.8647284160468995e+00 + -5.4266692395619982e+00 -3.6609582811750498e+00 -5.9285919460914887e+00 + -5.5758213403687336e+00 -4.2867588974164610e+00 -5.9621154048059850e+00 + -5.6881127770252391e+00 -4.8969666450029372e+00 -5.9723080399046573e+00 + -5.8702555564394352e+00 -5.5186423775101456e+00 -6.0398356174618044e+00 + id 13654 + loc 6.3484472036361694e-01 5.5118024349212646e-02 403 + blend 0.0000000000000000e+00 + interp 4.6055935509606427e-01:3.0503692033146701e-01:5.8172633063596657e-01:3.0634205592076991e-01:1.1345898469455373e+00:3.3905717414467496e-01:1.8894183490026610e+00:3.3145139256099648e-01:2.4266404257725043e+00:3.0705393954759674e-01:3.0000143482336696e+00:4.6055474950251335e-01:3.8713544764975891e+00 + CVs 20 + -4.9878881526482816e-02 2.8343957362024863e-01 2.3902372597573698e-01 + -6.7457262579598748e-02 5.5421494916568603e-01 4.6485237252349115e-01 + -7.3173923736507107e-02 8.2452619725453680e-01 6.8862234052674554e-01 + -7.7542117428311463e-02 1.0909944790583135e+00 9.1955063941880755e-01 + -8.4993563102083503e-02 1.3397338930127447e+00 1.1659909290793091e+00 + -9.2847104123938595e-02 1.5601299306803080e+00 1.4270683557714960e+00 + -8.7210459413498809e-02 1.7560350589761538e+00 1.6934041817588141e+00 + -5.2033352658898080e-02 1.9374623450572626e+00 1.9577920902626789e+00 + 2.9727143442361714e-02 2.1065055904445926e+00 2.2190769374197550e+00 + 1.8067101420245080e-01 2.2563484659810782e+00 2.4749122688164564e+00 + 4.2175344109387747e-01 2.3807356165018931e+00 2.7145885069374547e+00 + 7.6792065674148524e-01 2.4702287061676760e+00 2.9280560749703843e+00 + 1.2082541471676673e+00 2.5040205895801648e+00 3.1198205939181252e+00 + 1.7008263773632284e+00 2.4655688703662593e+00 3.2975722986671281e+00 + 2.2209042238516687e+00 2.3487408917354959e+00 3.4489279396033168e+00 + 2.7841633244115807e+00 2.1408921768020592e+00 3.5702139651448381e+00 + 3.3838255173222120e+00 1.8635612017469678e+00 3.7388971521359804e+00 + 3.9328526107543778e+00 1.6169261571557287e+00 4.0517582094525988e+00 + 4.3363669910249580e+00 1.4874874489365084e+00 4.4560484493635704e+00 + id 13655 + loc 5.4883873462677002e-01 8.3853340148925781e-01 380 + blend 0.0000000000000000e+00 + interp 4.6694723668363264e-01:3.7302906681777870e-01:1.2585002898375386e-03:4.1711704386401705e-01:4.9995779278862262e-01:3.6377617922326905e-01:1.3666728182998962e+00:3.8820555652107891e-01:2.0025466520436539e+00:4.1630766207785080e-01:2.5854272167184043e+00:4.6694256721126581e-01:3.1601377829352431e+00 + CVs 20 + -3.3646360210848003e-01 2.3347486044354254e-01 -5.6558271782439251e-01 + -6.1311083946302436e-01 3.9078045701327724e-01 -9.8195277389050317e-01 + -8.6141592943964329e-01 5.1931527415586676e-01 -1.3613316852810529e+00 + -1.0983713966685729e+00 6.4293974995212144e-01 -1.7491106742039362e+00 + -1.3281166827941495e+00 7.6602271493343121e-01 -2.1444062118229272e+00 + -1.5540733738781656e+00 8.9292009132201799e-01 -2.5497610734025851e+00 + -1.7888063049657916e+00 1.0188616985928594e+00 -2.9660229575811754e+00 + -2.0457764528977789e+00 1.1304147637483237e+00 -3.3937476998832952e+00 + -2.3351538580762394e+00 1.2066884241058757e+00 -3.8469501386468044e+00 + -2.6611625858100858e+00 1.2185207726996468e+00 -4.3380242561480440e+00 + -3.0246778752824173e+00 1.1338495071845813e+00 -4.8597451785698373e+00 + -3.4179374622599150e+00 9.1686934140298915e-01 -5.3883384818741487e+00 + -3.8088144114411469e+00 5.3653163912763802e-01 -5.8745344501676957e+00 + -4.1563488254349510e+00 1.3882184092991245e-02 -6.2482768064688168e+00 + -4.4530671597496916e+00 -5.6829734918403663e-01 -6.4958322034082041e+00 + -4.7185146671792282e+00 -1.1169866628324590e+00 -6.6702304867463553e+00 + -4.9724769625986847e+00 -1.5390265728433583e+00 -6.8023450909456233e+00 + -5.2287690763091641e+00 -1.8072054788839491e+00 -6.8889038704252954e+00 + -5.5539572186587511e+00 -2.2121170220343553e+00 -7.0520404210250964e+00 + id 13656 + loc 2.3052716255187988e-01 2.2341725230216980e-01 376 + blend 0.0000000000000000e+00 + interp 4.8392975096249291e-01:3.0811476048522368e-01:1.3068969806173458e-01:3.0483497448201580e-01:1.0204712480292513e+00:3.2804143225512244e-01:1.9995648258724719e+00:4.8392491166498330e-01:2.5338285251539725e+00:2.9137425946023576e-01:3.0228041051591958e+00:4.0308952683867255e-01:3.8128624974162095e+00 + CVs 20 + 5.3955208131820731e-01 4.4815012765869072e-01 3.2625646996686020e-01 + 1.0449971519387025e+00 8.0795475744271394e-01 5.3920676753725094e-01 + 1.6023300303829522e+00 1.0365308939004743e+00 6.2676218048566168e-01 + 2.1646136133825968e+00 1.1604658465958746e+00 6.1755302217422181e-01 + 2.6795413404917685e+00 1.2613399627654063e+00 5.6260705513440945e-01 + 3.1529456560766289e+00 1.3874945553961280e+00 5.0787425582826629e-01 + 3.6168014647279136e+00 1.5397971809400106e+00 4.9419903677640709e-01 + 4.0872770008470498e+00 1.6989597754904218e+00 5.5178611925075294e-01 + 4.5657228433549193e+00 1.8510840168575762e+00 6.9833367360490761e-01 + 5.0598581148694057e+00 1.9835499380384705e+00 9.5247195588941813e-01 + 5.5684366620009866e+00 2.0679356771226676e+00 1.3116214553205394e+00 + 6.0801978203045239e+00 2.0673918887668585e+00 1.7491684703718429e+00 + 6.5713645141792094e+00 1.9451373124564169e+00 2.2301945804527250e+00 + 7.0096572971290430e+00 1.6764394076340234e+00 2.7148183874295131e+00 + 7.3551065460560299e+00 1.2681455382004838e+00 3.1782024939952733e+00 + 7.5444141568822616e+00 7.8025360939053012e-01 3.5776729258462519e+00 + 7.5833047581635862e+00 3.4536393643731600e-01 3.8468734377752392e+00 + 7.5991802103638273e+00 -1.5829918912591889e-02 3.9465558000679279e+00 + 7.8128593074091643e+00 -5.4632426428468639e-01 3.7199603378602193e+00 + id 13657 + loc 8.8149768114089966e-01 4.0912893414497375e-01 396 + blend 0.0000000000000000e+00 + interp 4.3149932299425708e-01:3.0447654062778962e-01:1.4979435961382681e-01:3.1830119787766276e-01:1.0064282300066534e+00:4.2150666064302067e-01:1.4124819344395361e+00:3.2224796482553891e-01:2.0035070947294860e+00:4.3149500800102714e-01:2.7312215167864933e+00:3.2617354263255094e-01:3.0411801467881401e+00:4.2819004104927044e-01:3.7726563927564651e+00 + CVs 20 + -6.7570070092039702e-01 3.2849573400241167e-02 3.8769867399332003e-01 + -1.1170597741007753e+00 -5.5739962050139313e-02 6.6370187438841999e-01 + -1.5025620544763059e+00 -1.7996115047275474e-01 9.1824913162073207e-01 + -1.8885302937946342e+00 -2.8479981037547153e-01 1.1704318843057449e+00 + -2.2644275801379425e+00 -3.6040205059660835e-01 1.4205314191035237e+00 + -2.6250238659776901e+00 -4.0276859858702241e-01 1.6733656833140971e+00 + -2.9656208989282087e+00 -4.1157652052933547e-01 1.9365697668149124e+00 + -3.2835783575513715e+00 -3.9124408431523938e-01 2.2179096218333454e+00 + -3.5847658859601923e+00 -3.5545156733551408e-01 2.5200758604858633e+00 + -3.8784836410484687e+00 -3.2558899675507202e-01 2.8382671257141996e+00 + -4.1633178323512743e+00 -3.2398823299502455e-01 3.1732004118637480e+00 + -4.4239090461169743e+00 -3.6768814371144765e-01 3.5430769826185289e+00 + -4.6423078270262534e+00 -4.7260619434811924e-01 3.9572033853910336e+00 + -4.8068944587474753e+00 -6.4992086985612008e-01 4.3922031816436826e+00 + -4.9116338402941269e+00 -8.9369163383296613e-01 4.8154939796735130e+00 + -4.9524895110181530e+00 -1.1888098290169273e+00 5.2084920387514480e+00 + -4.9248336419383820e+00 -1.5225096788276267e+00 5.5626468249946930e+00 + -4.8216069174935470e+00 -1.8863195839918883e+00 5.8598555459556803e+00 + -4.5813464982274930e+00 -2.3229477650252783e+00 6.0372456638836427e+00 + id 13658 + loc 4.0703573822975159e-01 2.3913776874542236e-01 415 + blend 0.0000000000000000e+00 + interp 5.1177720181618391e-01:3.6520188228092576e-01:4.3310652911674241e-01:4.9068523063147740e-01:9.9678272136970869e-01:4.3850521750763405e-01:1.4300855310301479e+00:4.8358524204907560e-01:1.9824360415315891e+00:3.6765912228115116e-01:2.1948938133402596e+00:3.0694527222790025e-01:3.1269502895421937e+00:5.1177208404416574e-01:3.9866442550174397e+00 + CVs 20 + 7.4366160432690648e-02 2.3227420104625235e-01 -9.7217323968631308e-02 + 1.0100877435199579e-01 4.2783825578693768e-01 -1.6060434157527270e-01 + 1.2664875363028927e-01 6.2978736771299626e-01 -2.3023133943402918e-01 + 1.8755937553513174e-01 8.5437656646361937e-01 -3.1835181174630084e-01 + 2.8888704367556878e-01 1.0970895332490112e+00 -4.2583541605009506e-01 + 4.3456651763592585e-01 1.3509074609707352e+00 -5.5135387953054815e-01 + 6.2797879231925491e-01 1.6075520071182232e+00 -6.8993701149897957e-01 + 8.6985149792986394e-01 1.8589756059721778e+00 -8.3472024597825989e-01 + 1.1569933216981014e+00 2.0978550001087211e+00 -9.7916532679824719e-01 + 1.4839855301987792e+00 2.3186812304765603e+00 -1.1183594649038637e+00 + 1.8541377038920137e+00 2.5182822129658371e+00 -1.2534450547240659e+00 + 2.2889385533841886e+00 2.6913421730246672e+00 -1.4046445822921814e+00 + 2.7993917942273905e+00 2.8223393989174035e+00 -1.6224448275902257e+00 + 3.3339040438330145e+00 2.8915929601758372e+00 -1.9583526732132592e+00 + 3.8107867783883078e+00 2.8937400782461276e+00 -2.4121869513104426e+00 + 4.1872022497021497e+00 2.8328914173732969e+00 -2.9552950115555365e+00 + 4.4390907828725359e+00 2.7178698656283009e+00 -3.5596527658379813e+00 + 4.5444941448116838e+00 2.5740473340902237e+00 -4.1794086693788799e+00 + 4.5807161243904240e+00 2.5384115126695805e+00 -4.5148589913959736e+00 + id 13659 + loc 4.9904000759124756e-01 9.8189854621887207e-01 393 + blend 0.0000000000000000e+00 + interp 4.8291122119848917e-01:3.0198786317069753e-01:6.9456011064688461e-02:2.8155849363397412e-01:9.2501403875376598e-01:3.6709759807857678e-01:1.8317480669176689e+00:2.7677169217269698e-01:2.1123351183767487e+00:4.0720608629608729e-01:2.7091007589855360e+00:4.8290639208627723e-01:2.9999479054414842e+00:4.1102784714040180e-01:3.3221354959114726e+00 + CVs 20 + -1.9551122313440811e-01 2.8978595811090818e-01 -2.0689088105485867e-01 + -3.8857267949619190e-01 5.8980158180897602e-01 -4.1810040150903560e-01 + -5.5546567223333509e-01 9.0410740007290979e-01 -6.5631780453509092e-01 + -6.9503551772164052e-01 1.2344538033601054e+00 -9.2579706660172756e-01 + -8.2985523859892352e-01 1.5853866040163904e+00 -1.2161690906789895e+00 + -9.8773199242072507e-01 1.9581226345498077e+00 -1.5142442139922516e+00 + -1.1972512719165209e+00 2.3455113669302063e+00 -1.8062783360596666e+00 + -1.4839911914486965e+00 2.7234996234075037e+00 -2.0790117467620499e+00 + -1.8483277249420973e+00 3.0476994858850111e+00 -2.3204627003811185e+00 + -2.2479991519412001e+00 3.2864298254634088e+00 -2.5292796182062638e+00 + -2.6668201649204928e+00 3.4453005503896170e+00 -2.7384023933790917e+00 + -3.1491876527265159e+00 3.5167942012697226e+00 -2.9926501822665035e+00 + -3.7050658256933136e+00 3.4626406550692690e+00 -3.2740769773735052e+00 + -4.2853014318362899e+00 3.2627588132206822e+00 -3.5306111348506048e+00 + -4.8415028377185223e+00 2.9265141954741525e+00 -3.7410139473706789e+00 + -5.3500082797780708e+00 2.4874722247857903e+00 -3.8778926369043667e+00 + -5.7919023315167903e+00 2.0265655190794201e+00 -3.8771665735815031e+00 + -6.1516597807682949e+00 1.6118261928563979e+00 -3.7345393604661066e+00 + -6.4770770303509124e+00 1.1608777271395434e+00 -3.5745124254231260e+00 + id 13660 + loc 6.0776835680007935e-01 6.2157750129699707e-01 400 + blend 0.0000000000000000e+00 + interp 4.8984298006798105e-01:3.6168578921872985e-01:2.9192778723554302e-01:2.5014628110164427e-01:1.1053493128707990e+00:4.0475686183085324e-01:1.7934543552371427e+00:4.8983808163818038e-01:2.2751056717290949e+00:4.5677836365098196e-01:2.8969565109765538e+00:4.0381781997593813e-01:3.2213211718275199e+00:3.6655895296621382e-01:3.9427692184583192e+00 + CVs 20 + -1.0730568573004304e-01 1.8832331737584768e-01 -2.6725641095046471e-01 + -1.9629722007894948e-01 3.7438735983599364e-01 -5.6489439944233655e-01 + -2.5947261597673577e-01 5.4356595374164618e-01 -8.8530642066658727e-01 + -2.9599481010579670e-01 6.9213578094718686e-01 -1.2219696274558856e+00 + -3.0997714986165947e-01 8.2521660200167879e-01 -1.5709914669573379e+00 + -3.0560586844117477e-01 9.5082793766478835e-01 -1.9278343414572960e+00 + -2.8721947261080971e-01 1.0689278765306733e+00 -2.2886660881230232e+00 + -2.5935964260401329e-01 1.1641092196553042e+00 -2.6506896835517693e+00 + -2.2456315055393344e-01 1.2160578040146519e+00 -3.0095242835706006e+00 + -1.8222053604046884e-01 1.2110095735569777e+00 -3.3564062785408444e+00 + -1.3124672920601027e-01 1.1402511168085816e+00 -3.6784832151747473e+00 + -7.2083067598651074e-02 9.9818545931738845e-01 -3.9572645797384585e+00 + -5.1885806857894234e-03 7.8877836970587611e-01 -4.1674649146153442e+00 + 6.8702680254612541e-02 5.3114809476688762e-01 -4.2830633308428725e+00 + 1.4164539382565422e-01 2.5440200318257755e-01 -4.2855684693411797e+00 + 1.9308832041162199e-01 -8.9099204619069727e-03 -4.1720496855228033e+00 + 2.0420414823317290e-01 -2.2947708645826803e-01 -3.9747032769911792e+00 + 1.8815376443074294e-01 -4.2523909397917570e-01 -3.7815403090977497e+00 + 2.2192007533299335e-01 -7.5129661824399618e-01 -3.7636581805313831e+00 + id 13661 + loc 6.8523740768432617e-01 4.4387839734554291e-02 1080 + blend 0.0000000000000000e+00 + interp 5.6579855494200437e-01:3.5969320079469491e-01:8.6301496834333524e-02:2.9321678081454078e-01:9.3441739688345249e-01:5.6579289695645496e-01:1.6496016228416504e+00:5.0919957127397564e-01:1.9999484644164245e+00:5.1693814197519961e-01:2.3582051183221231e+00:4.1942271899337596e-01:3.0001984789238318e+00:2.3982940192912730e-01:3.4288615918974679e+00 + CVs 20 + -1.3046036882638398e-01 4.5204358790732779e-01 -3.6855557621118884e-01 + -2.6567102518577107e-01 7.9840188027088388e-01 -5.7921153324421304e-01 + -4.1088728233615257e-01 1.1205172140474584e+00 -7.5480088718538951e-01 + -5.6522090752830745e-01 1.4391342388219828e+00 -9.3938535514685351e-01 + -7.3263795907020746e-01 1.7442850706340676e+00 -1.1223589764212081e+00 + -9.1668820449218036e-01 2.0240030369607878e+00 -1.2859340374987058e+00 + -1.1214661379730515e+00 2.2648816550585047e+00 -1.4063586050748580e+00 + -1.3489475793340446e+00 2.4491209801421912e+00 -1.4623731332900352e+00 + -1.5917945945456402e+00 2.5503773782967829e+00 -1.4408335632945701e+00 + -1.8254682976541905e+00 2.5443274224361678e+00 -1.3485896617939970e+00 + -2.0275874484803502e+00 2.4384083052508725e+00 -1.2181742772109079e+00 + -2.2053267370384204e+00 2.2583343108572382e+00 -1.0753846494115094e+00 + -2.3751865799307268e+00 2.0149051372705737e+00 -9.2938772106257150e-01 + -2.5466472831495870e+00 1.7090221235753553e+00 -7.9212971032332735e-01 + -2.7206994063987904e+00 1.3396131932130819e+00 -7.0320098929819852e-01 + -2.8820509112494812e+00 9.2332266798383933e-01 -7.6093890759938432e-01 + -3.0076738832760763e+00 5.3967064773797913e-01 -1.0326007370898085e+00 + -3.1156010558499294e+00 1.9312445780890292e-01 -1.3839214335076593e+00 + -3.2732332517949767e+00 -2.8327892919851844e-01 -1.5930840380741129e+00 + id 13662 + loc 2.7200452983379364e-02 2.1240903064608574e-02 402 + blend 0.0000000000000000e+00 + interp 5.5333343897705989e-01:2.5376474090513207e-01:4.2001112535943586e-01:5.5332790564267009e-01:1.1715943001167630e+00:4.0623219703362229e-01:1.8487361358195100e+00:2.6155744839324341e-01:2.2578699231031147e+00:4.3485301407274041e-01:2.9921994536496963e+00:5.2124220338541571e-01:3.3415176128807436e+00:4.6097999512162452e-01:3.9633907380191378e+00 + CVs 20 + -2.1376600130662179e-01 3.6321720616170805e-01 1.6741148402466541e-01 + -4.3622662770992393e-01 7.0908060334590650e-01 3.4433330649148008e-01 + -7.1215164694871524e-01 1.0277131197802358e+00 5.2151458245967419e-01 + -1.0537389386878959e+00 1.2963292467886369e+00 7.0207080293317536e-01 + -1.4486774910971587e+00 1.4861267855105154e+00 8.9418312699121771e-01 + -1.8744393345061403e+00 1.5742518623666095e+00 1.1027499482841252e+00 + -2.3047155405127526e+00 1.5519536704153574e+00 1.3302791219527710e+00 + -2.7158782732034532e+00 1.4295345841754969e+00 1.5791569111999146e+00 + -3.0880118816166351e+00 1.2238704871569899e+00 1.8462468273746246e+00 + -3.3955595205697597e+00 9.4395215693497658e-01 2.1141019965792052e+00 + -3.6199243147313283e+00 6.0875234727614425e-01 2.3697205961505632e+00 + -3.7733949645314486e+00 2.5855066799979975e-01 2.6366190749649374e+00 + -3.8718931700629677e+00 -6.3489295575025917e-02 2.9460365128393944e+00 + -3.9067462617649347e+00 -3.2581301001929541e-01 3.2854186993184977e+00 + -3.8816483876074259e+00 -5.2254017559644228e-01 3.6261482738294037e+00 + -3.8354755624414634e+00 -6.4863439528260303e-01 3.9831435503310884e+00 + -3.7975260472202845e+00 -6.4802020588230402e-01 4.3619198344929195e+00 + -3.7613095997950792e+00 -4.9959290046981469e-01 4.6865454168183360e+00 + -3.7659267993382959e+00 -3.9581712220567428e-01 5.0942237096322103e+00 + id 13663 + loc 1.6493457555770874e-01 2.6514989137649536e-01 375 + blend 0.0000000000000000e+00 + interp 5.2228513008028099e-01:3.1458363419450841e-01:4.2830968382588841e-01:5.2227990722898021e-01:1.2108246549959509e+00:4.8682453140419207e-01:1.9928404405785978e+00:4.2152293877213126e-01:2.2334714076561983e+00:5.1167360145166452e-01:2.9952982369116490e+00:3.5289553646076410e-01:3.5768061940043063e+00 + CVs 20 + -1.1832047003491619e-01 4.1054580687567771e-01 5.5573077259005033e-01 + -1.6120059412954901e-01 7.5220103424049511e-01 1.0667043506568472e+00 + -1.6057670696903029e-01 1.0376329691415140e+00 1.6186581990633453e+00 + -1.7307980850234048e-01 1.3049687368836946e+00 2.2096532101848245e+00 + -3.1585918996098794e-01 1.6071752852969285e+00 2.7537415861642964e+00 + -7.3551400217159113e-01 1.9415695029942899e+00 3.0786407974367962e+00 + -1.3564668905950727e+00 2.1704067697396106e+00 2.9987046152533225e+00 + -2.0012413865076923e+00 2.1978966130028925e+00 2.5540199827103280e+00 + -2.5844424462815723e+00 1.9743940147012231e+00 1.8488652696068226e+00 + -3.0329547203684446e+00 1.4623591941170482e+00 1.0273295068805488e+00 + -3.2963665373133733e+00 7.1211918710009192e-01 2.6001393338470558e-01 + -3.3878428487239272e+00 -1.0838899417612205e-01 -3.8028632163028958e-01 + -3.3882796298323643e+00 -7.9492689368849057e-01 -9.6672271761593076e-01 + -3.4138926699219527e+00 -1.1822318786351202e+00 -1.5784180948038440e+00 + -3.5114401563049324e+00 -1.2551640031327045e+00 -2.1930556684314317e+00 + -3.6304220364481896e+00 -1.0914822019007513e+00 -2.8572432195377999e+00 + -3.7765345213269592e+00 -6.1252356723771839e-01 -3.6027532314974864e+00 + -4.0142732017083054e+00 2.0822008413646054e-01 -4.3316682700187545e+00 + -4.3516323387636051e+00 1.2065027714320486e+00 -5.0397031885270902e+00 + id 13664 + loc 8.6642873287200928e-01 4.3398278951644897e-01 373 + blend 0.0000000000000000e+00 + interp 4.1003166097317484e-01:3.9810015839145541e-01:7.8157242831283780e-03:3.2410506694911090e-01:9.8620909301925308e-01:4.1002756065656515e-01:1.6746678405809010e+00:3.0588186083561503e-01:2.1908352696267048e+00:3.4137537635283077e-01:2.8550158210027994e+00:2.8336622894135877e-01:3.1723875347653703e+00 + CVs 20 + 3.5206534900542075e-01 3.5098106385120625e-01 1.3570551225295457e-01 + 6.7035561017574596e-01 6.3703126579409408e-01 2.5668300620926954e-01 + 9.8902551972919550e-01 8.7312857523926757e-01 3.7512728246220894e-01 + 1.3177522981419010e+00 1.0814916852298744e+00 5.0020003066908691e-01 + 1.6421162369587159e+00 1.2856900737745209e+00 6.3658136581676861e-01 + 1.9483917370429729e+00 1.4915559832897514e+00 7.9390188569709741e-01 + 2.2308758982719517e+00 1.6788127759498390e+00 9.9993021855804765e-01 + 2.4782731082245126e+00 1.8174826783522868e+00 1.2826965808640112e+00 + 2.6698794186373727e+00 1.8838654643977057e+00 1.6418340087378045e+00 + 2.7900154139709405e+00 1.8666650774932487e+00 2.0523075602414327e+00 + 2.8336430941014235e+00 1.7706752350377213e+00 2.4671750959232845e+00 + 2.8113446284297190e+00 1.6119639825513579e+00 2.8199850895268561e+00 + 2.7450913201335410e+00 1.3966845946470701e+00 3.0825924638994580e+00 + 2.6638118795244785e+00 1.1073481486713337e+00 3.3048968316376208e+00 + 2.6427054887300745e+00 7.4941447929929050e-01 3.5528762115682238e+00 + 2.7880148018500703e+00 3.9800082789946911e-01 3.8428240524825759e+00 + 3.1436637323510759e+00 1.7619777830430206e-01 4.1201644162789135e+00 + 3.6041275824717331e+00 1.3732940035974472e-01 4.3210658153759720e+00 + 4.0014494712671365e+00 8.9194504222604110e-02 4.5613202346939481e+00 + id 13665 + loc 5.5049657821655273e-01 4.0795075893402100e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7609612500486772e-01:3.7609236404361768e-01:3.3038936594420087e-01:2.8256663805370286e-01:9.5580906826715573e-01:2.6134359933926249e-01:1.9655115086763768e+00:2.6467537428957560e-01:2.9102967429358060e+00:2.6673710635051234e-01:3.7790408512819251e+00 + CVs 20 + -9.3043141024447523e-02 2.6175449724884392e-01 2.0164445073054388e-01 + -2.0644715454764584e-01 5.1148487896919759e-01 4.0918792747666233e-01 + -3.2253811485332656e-01 7.5691959357130567e-01 6.1527261862709470e-01 + -4.3031649190629156e-01 1.0014606893239060e+00 8.1304846961045929e-01 + -5.2617297224224302e-01 1.2471115822889505e+00 9.9703303066641480e-01 + -6.0608577556899290e-01 1.4938817431411207e+00 1.1629638694731024e+00 + -6.7018585579437584e-01 1.7417070401989889e+00 1.3194769308716969e+00 + -7.2014837445793534e-01 1.9917806388074903e+00 1.4798637816454696e+00 + -7.5944535253928080e-01 2.2491715594556223e+00 1.6564132494230623e+00 + -8.0275464181109468e-01 2.5027544442219432e+00 1.8752198915746374e+00 + -8.6899598674832401e-01 2.7040964982828326e+00 2.1487857981535701e+00 + -9.6209541474317406e-01 2.8173758356790874e+00 2.4447328432591564e+00 + -1.0882351822183340e+00 2.8641573857445772e+00 2.7261587406053960e+00 + -1.2819912851619129e+00 2.8893628946757817e+00 2.9863442505097684e+00 + -1.5757285455844625e+00 2.8992979497415434e+00 3.2339692831504459e+00 + -1.9550682973792224e+00 2.8469944252274821e+00 3.4610173334542171e+00 + -2.3792835400922190e+00 2.6896370032260020e+00 3.6660458509542844e+00 + -2.7538090559845445e+00 2.4669150664186219e+00 3.9115275292336178e+00 + -2.7220429254770853e+00 2.4501818439815470e+00 4.1869392983065419e+00 + id 13666 + loc 6.1549419164657593e-01 4.5985504984855652e-02 1069 + blend 0.0000000000000000e+00 + interp 4.5388335707420635e-01:3.7190339328653571e-01:1.0091602290503987e-03:4.2860658093967569e-01:7.8354001346148883e-01:3.7323155353763032e-01:1.1023548806547649e+00:4.4645123240455548e-01:1.8180925985817891e+00:3.8379917056650464e-01:2.0625427701037973e+00:4.5387881824063564e-01:2.8656241784788969e+00:2.6571985571102913e-01:3.2029189565214207e+00 + CVs 20 + 1.2918944476230054e-01 3.7063575074302202e-01 2.1592536611793040e-01 + 1.9222486479006629e-01 7.2105410020124294e-01 4.3187107437913519e-01 + 1.9444624852958758e-01 1.0632052234554725e+00 6.2726708578205059e-01 + 1.1296996188837727e-01 1.4003951874781364e+00 7.9135907600353150e-01 + -1.3206482399805930e-02 1.7091650375519922e+00 8.9676040135460999e-01 + -7.8929172960682581e-02 1.9809736266274720e+00 9.3791958961459243e-01 + -3.5610747871672288e-02 2.2085888172511670e+00 9.3716049579943483e-01 + 7.3062577227336778e-02 2.4054762134305139e+00 9.3070823181140361e-01 + 2.1893591491007913e-01 2.5993216094580172e+00 9.5262231534196073e-01 + 4.1973696163359997e-01 2.7655574924810162e+00 1.0364328127803613e+00 + 6.8120786755594920e-01 2.8234648631528052e+00 1.1974980359900882e+00 + 9.5116639917463952e-01 2.7333008180803855e+00 1.3848842496348177e+00 + 1.1968061104926508e+00 2.5535716362245267e+00 1.5571778165785402e+00 + 1.4307232401434304e+00 2.3137771630572082e+00 1.7389279773497677e+00 + 1.6511461844666424e+00 2.0040635057305023e+00 1.9481520090946018e+00 + 1.8306753870654477e+00 1.6043701159517529e+00 2.1571671957651741e+00 + 1.9240617075825837e+00 1.0925138659913565e+00 2.2997420790673910e+00 + 1.8940008756504136e+00 5.0192683825920681e-01 2.3134090931200149e+00 + 1.9920853760640753e+00 1.5393064321516992e-01 2.3940406778839929e+00 + id 13667 + loc 9.2515903711318970e-01 1.4203469455242157e-01 378 + blend 0.0000000000000000e+00 + interp 6.4791856003036430e-01:6.4791208084476404e-01:6.5411331702500619e-01:5.3939760779946000e-01:1.0395837742157612e+00:3.1530284979815554e-01:1.8380129549721338e+00:3.6475418054018333e-01:2.4556311124617323e+00:3.8738487778407804e-01:3.1296171456058577e+00:4.5333981268732715e-01:3.9877768326193417e+00 + CVs 20 + -3.1744873858435202e-01 3.6223141711287393e-01 1.9273459633144800e-02 + -6.4346281883929812e-01 7.0702513915299403e-01 3.1699752165682049e-02 + -9.7946337614737211e-01 1.0270818767343024e+00 5.0286539004472414e-02 + -1.3153660008400960e+00 1.3247517049253190e+00 6.6932282717272945e-02 + -1.6450171536581160e+00 1.5983004966620218e+00 6.6306949711132268e-02 + -1.9727334539696777e+00 1.8361351823053016e+00 3.9296326529238645e-02 + -2.3013528368305849e+00 2.0244090444118159e+00 -1.5192819960572146e-02 + -2.6262662554870273e+00 2.1557523637039657e+00 -9.1950318882642101e-02 + -2.9400210866755123e+00 2.2304887897541432e+00 -1.8372538433648272e-01 + -3.2332682571856175e+00 2.2529933175992563e+00 -2.8438241605375419e-01 + -3.4922864337895385e+00 2.2313311754378766e+00 -3.8703348404004334e-01 + -3.7069739578611776e+00 2.1793396615674903e+00 -4.8528213467500675e-01 + -3.8829792079970225e+00 2.0982929592930826e+00 -5.8204591106146730e-01 + -4.0287157561613638e+00 1.9510424671579152e+00 -6.8273187928301693e-01 + -4.1433165033472337e+00 1.7035977609508193e+00 -7.8950545382422233e-01 + -4.2429264300255829e+00 1.3612510506485132e+00 -9.2395981518173009e-01 + -4.3705026258413247e+00 9.5673832262123826e-01 -1.1104668808262768e+00 + -4.5601998519676519e+00 5.5849169523603925e-01 -1.3095507915817413e+00 + -4.7431126787163764e+00 2.9598591800286034e-01 -1.4268179453386878e+00 + id 13668 + loc 6.6633033752441406e-01 9.7559458017349243e-01 409 + blend 0.0000000000000000e+00 + interp 2.9980902319525021e-01:2.9980602510501825e-01:4.4290993299188475e-01:2.9345529799385550e-01:1.7919314891840994e+00:2.6410986157544619e-01:2.9870247675358135e+00:2.8790886352430817e-01:3.6810997102325880e+00 + CVs 20 + 4.8673952644473562e-01 1.9928976247859448e-01 -1.1858203070930423e-01 + 8.6793743324669914e-01 3.4360802735486223e-01 -2.4228828212134529e-01 + 1.2296948373181107e+00 4.6580938905771008e-01 -3.6395114207864987e-01 + 1.6133263036574585e+00 5.7747283463444021e-01 -4.7943844847680550e-01 + 2.0155046017207532e+00 6.6543017043972397e-01 -5.8810065706924042e-01 + 2.4291484498625868e+00 7.1828839588229854e-01 -6.9127295826426449e-01 + 2.8469959160496092e+00 7.2866901977849630e-01 -7.9161022361633759e-01 + 3.2606444479700025e+00 6.9057297682561580e-01 -8.9068723845214848e-01 + 3.6563383117078505e+00 5.9877408118668596e-01 -9.8758872591367175e-01 + 4.0126712615697047e+00 4.5505655127492473e-01 -1.0814899949905121e+00 + 4.3065547497423289e+00 2.7220891480391107e-01 -1.1743858571945318e+00 + 4.5269824055053078e+00 6.6832911940727158e-02 -1.2696102209374107e+00 + 4.6794279506191776e+00 -1.4817447362546066e-01 -1.3680250121347233e+00 + 4.7774940217059498e+00 -3.6007363052173513e-01 -1.4666872370475754e+00 + 4.8386117292199078e+00 -5.5490631806704327e-01 -1.5632562772273308e+00 + 4.8837181849709799e+00 -7.2464888894098856e-01 -1.6613670141218555e+00 + 4.9310896605399686e+00 -8.7443019287566948e-01 -1.7666620380312783e+00 + 4.9851739257380672e+00 -1.0218040236495822e+00 -1.8735103854173563e+00 + 4.9808451255945965e+00 -1.2770304758081052e+00 -1.9813823888570252e+00 + id 13669 + loc 8.7714833021163940e-01 4.0555644780397415e-02 374 + blend 0.0000000000000000e+00 + interp 4.3557608259699232e-01:4.3557172683616635e-01:8.4377021589954526e-02:2.1266622016438480e-01:9.8693211344623288e-01:2.1230436256014779e-01:1.2515212857893483e+00:3.1229529973197101e-01:2.0079577825600574e+00:4.0768347379523434e-01:2.8721354572652529e+00:2.9449497796894247e-01:3.3092162315450855e+00 + CVs 20 + 8.9711286422587944e-01 3.9327239163015054e-01 3.9148777659067890e-01 + 1.5689673329492335e+00 5.9181583775763502e-01 5.6114197715601755e-01 + 2.1887532874210844e+00 6.7699523438852227e-01 6.0548398465691100e-01 + 2.8349017306334003e+00 7.1082189131299134e-01 5.8387428010524323e-01 + 3.5060683666095080e+00 7.2150653370153273e-01 5.3259301856322505e-01 + 4.1915283515280262e+00 7.1919508112812769e-01 4.9434132617975779e-01 + 4.8801351604637251e+00 6.9418134763187722e-01 5.0903262987655173e-01 + 5.5514327087016619e+00 6.2606464967936426e-01 6.0753431282901404e-01 + 6.1790605141070785e+00 5.0010088146372600e-01 8.0858148730522372e-01 + 6.7401768220987428e+00 3.0716555956491320e-01 1.1210251613541597e+00 + 7.2146364089942168e+00 3.7262733226916644e-02 1.5385563563712248e+00 + 7.5931277522922436e+00 -3.3282694589468731e-01 2.0354410941910848e+00 + 7.8687926590482844e+00 -8.4121855044573790e-01 2.5610787892540712e+00 + 8.0353122641838635e+00 -1.5107256047714310e+00 3.0490732538062613e+00 + 8.1213841061935543e+00 -2.3121776681149226e+00 3.4592705436292781e+00 + 8.2008644015189454e+00 -3.1798807467468171e+00 3.7946730076595743e+00 + 8.3490535098034897e+00 -4.0468992550926615e+00 4.0559869439996046e+00 + 8.5825283129803207e+00 -4.8553980329605304e+00 4.2311234160692912e+00 + 8.7674007563281400e+00 -5.5472207088655896e+00 4.3768131543488789e+00 + id 13670 + loc 6.7529082298278809e-01 8.7338489294052124e-01 412 + blend 0.0000000000000000e+00 + interp 4.3447366243863156e-01:3.7032082465627020e-01:2.2400464628748895e-02:4.3446931770200720e-01:7.7262815946517172e-01:3.5937655801817719e-01:1.5144971242298255e+00:3.7694310327219116e-01:2.0474586013329561e+00:3.0648891538862344e-01:2.8857669013424787e+00:2.9219126055679717e-01:3.6685199215608759e+00 + CVs 20 + 8.2083389627082504e-01 1.3129431085854709e-01 -2.0524383240818361e-01 + 1.3285617396383487e+00 1.2265683714880968e-01 -3.9370600570221981e-01 + 1.7466449237730854e+00 5.9180095887372830e-02 -5.7439188509609673e-01 + 2.1585487842964532e+00 -2.3566925463045119e-02 -7.4941786280670242e-01 + 2.5502119372966048e+00 -1.2447041228982159e-01 -9.1628274195198722e-01 + 2.9126307956174475e+00 -2.3830870832779882e-01 -1.0745254660462416e+00 + 3.2421881376449062e+00 -3.5691744010653348e-01 -1.2248897238742662e+00 + 3.5399913830002592e+00 -4.7185164449060557e-01 -1.3692336932590199e+00 + 3.8126187030446621e+00 -5.7663944228370934e-01 -1.5068168929016266e+00 + 4.0680426307619282e+00 -6.6613234570920565e-01 -1.6328225353830228e+00 + 4.3054368906508875e+00 -7.2301939527275150e-01 -1.7311314664273521e+00 + 4.5195308254239954e+00 -7.1284905993687520e-01 -1.7691657959631444e+00 + 4.7349852714969023e+00 -6.3764204738527486e-01 -1.7295800417741110e+00 + 4.9946375230808453e+00 -5.6704841063507794e-01 -1.6465554347564211e+00 + 5.3070154081365271e+00 -5.5183767799991301e-01 -1.5586037685644232e+00 + 5.6569617166535409e+00 -5.8944266739926299e-01 -1.4630419674180206e+00 + 6.0296048641029092e+00 -6.7341854836751658e-01 -1.3508330941474100e+00 + 6.4058917802575088e+00 -8.1023479523478859e-01 -1.2448189599532122e+00 + 6.6374859285106167e+00 -1.0086621481502565e+00 -1.2815025620188030e+00 + id 13671 + loc 5.6116050481796265e-01 6.3994318246841431e-01 403 + blend 0.0000000000000000e+00 + interp 4.6804333558188072e-01:3.1576768094330737e-01:2.1709207336101766e-01:4.6803865514852494e-01:9.9133206599729551e-01:2.8940647285871335e-01:1.7638055073172498e+00:2.6711781446911387e-01:2.2786820309600486e+00:2.9188718629216126e-01:2.9926461601550263e+00:2.6829376616371819e-01:3.6557252905597477e+00 + CVs 20 + 2.8655642080135386e-02 1.1770676194589209e-01 -1.7100750291189976e-01 + 4.1258245875822969e-02 2.3543171985162506e-01 -3.1244960802889932e-01 + 4.1087804052720917e-02 3.4693085575022348e-01 -4.3855750425819634e-01 + 2.6089265691229324e-02 4.5601761251454159e-01 -5.6056978098744092e-01 + -5.7067422855089367e-03 5.6083176521164546e-01 -6.7823960125468985e-01 + -5.4951916504262455e-02 6.5963081910953858e-01 -7.9089813527034414e-01 + -1.2109161754430214e-01 7.5080131177052256e-01 -8.9763277008781994e-01 + -2.0254090039368877e-01 8.3306841508476115e-01 -9.9762411273892337e-01 + -2.9723140619851179e-01 9.0592623046054799e-01 -1.0906607548217717e+00 + -4.0300026192289679e-01 9.6956861201952926e-01 -1.1770849910926557e+00 + -5.1790100551706630e-01 1.0244860899231136e+00 -1.2575096061882092e+00 + -6.4090978242173280e-01 1.0711066746749434e+00 -1.3326528858465279e+00 + -7.7248435258309245e-01 1.1095719282565069e+00 -1.4030273025270921e+00 + -9.1407068043016859e-01 1.1397115202880235e+00 -1.4683122738526011e+00 + -1.0672560046240951e+00 1.1607529769975851e+00 -1.5268462417183393e+00 + -1.2328852561258348e+00 1.1702389841072574e+00 -1.5757661179677271e+00 + -1.4080673030673387e+00 1.1656747580811790e+00 -1.6101733848338577e+00 + -1.5853722705407649e+00 1.1453972781265851e+00 -1.6249714347296971e+00 + -1.7511251405353228e+00 1.1015178455954615e+00 -1.6090414202986616e+00 + id 13672 + loc 6.9590753316879272e-01 6.4500999450683594e-01 380 + blend 0.0000000000000000e+00 + interp 4.6696472805856082e-01:4.2436398986476387e-01:6.6665866591789102e-01:3.9023048791721354e-01:1.2049859515885517e+00:3.6855132483198688e-01:2.0678892133962243e+00:4.6696005841128024e-01:2.9677758169385475e+00:2.8012404940918934e-01:3.1931791218633361e+00:3.5661286049878194e-01:3.9869822515601880e+00 + CVs 20 + -4.4295304654532192e-01 2.3291820462742571e-01 -5.6453554302535658e-01 + -8.3274506505543044e-01 3.7538083434870706e-01 -9.8006195734035095e-01 + -1.2125543738413254e+00 4.8068021311271381e-01 -1.3772985994895535e+00 + -1.5975609777624231e+00 5.7609789470515560e-01 -1.8147924029305853e+00 + -1.9787748775604577e+00 6.6116057246946980e-01 -2.2884313586024847e+00 + -2.3483532223340537e+00 7.3095408701165321e-01 -2.7900985305501935e+00 + -2.7026753545165763e+00 7.7578976012159195e-01 -3.3126899495734947e+00 + -3.0370235612728305e+00 7.8281409860423601e-01 -3.8512083821093350e+00 + -3.3434097946175432e+00 7.3703945675241900e-01 -4.3989845378659851e+00 + -3.6123965673703795e+00 6.2085154919027419e-01 -4.9443095654163551e+00 + -3.8376659715524335e+00 4.1649645931629165e-01 -5.4727307956588191e+00 + -4.0103866920964482e+00 1.1451368132999962e-01 -5.9607123986551205e+00 + -4.1157926297739742e+00 -2.6551938071507131e-01 -6.3737364449304401e+00 + -4.1474256975540342e+00 -6.7417202038366497e-01 -6.6934707786324985e+00 + -4.1116749660523508e+00 -1.0565901115597116e+00 -6.9285009412779850e+00 + -4.0240414899174111e+00 -1.3919736805894165e+00 -7.1033870290663828e+00 + -3.9021566409054218e+00 -1.7014737297243450e+00 -7.2480942495337022e+00 + -3.7747713675291390e+00 -2.0235370134643524e+00 -7.3981545326432760e+00 + -3.7633369103949423e+00 -2.2767705537903886e+00 -7.5275720930308871e+00 + id 13673 + loc 7.3512917757034302e-01 4.6624380350112915e-01 401 + blend 0.0000000000000000e+00 + interp 3.8401907446498434e-01:3.6737449331115207e-01:2.8396882404463919e-02:3.3762892105608772e-01:9.4877448222716465e-01:3.3135762129274038e-01:1.8649553726659107e+00:3.0534951167051261e-01:2.4567325879297859e+00:3.0298066684574132e-01:2.9998526958911738e+00:3.8401523427423973e-01:3.4070119415841997e+00 + CVs 20 + 7.4124029256513735e-03 2.7198893045617983e-01 1.4189424379206292e-01 + 7.4466381651920321e-03 5.5155921993130230e-01 2.9979091470734925e-01 + -1.3399939117966025e-02 8.3049808659888347e-01 4.5239543774539676e-01 + -6.2803160799635077e-02 1.1037611202230466e+00 5.8854830199548347e-01 + -1.3967460044824984e-01 1.3737409036897352e+00 7.1636966007481040e-01 + -2.3914241157499483e-01 1.6462715343543919e+00 8.4718584695592569e-01 + -3.5292416736811205e-01 1.9283492409630345e+00 9.9079141932618264e-01 + -4.7025968086271475e-01 2.2270632059317683e+00 1.1560870393192766e+00 + -5.7438328158520524e-01 2.5440202934045235e+00 1.3433537321307689e+00 + -6.4464388395647709e-01 2.8745761939382897e+00 1.5377635596254295e+00 + -6.7096118179011899e-01 3.2231312171482878e+00 1.7395911001826012e+00 + -6.5601665726438962e-01 3.5979333178388475e+00 2.0116842415906637e+00 + -6.0672556263488531e-01 3.9368835078249096e+00 2.4555412011838254e+00 + -5.4026400234749827e-01 4.0766465320829850e+00 3.0761501879566646e+00 + -4.6209751334132410e-01 3.9229132204104724e+00 3.7518207427390937e+00 + -3.2870700131756436e-01 3.5301779694739897e+00 4.3676170154079692e+00 + -9.0910193421325891e-02 3.0218032745902215e+00 4.8623163522449238e+00 + 2.8226467276377987e-01 2.5768701144273010e+00 5.2292097998019313e+00 + 6.5410075759500308e-01 2.6323141758837920e+00 5.3859831944420549e+00 + id 13674 + loc 4.3957326561212540e-02 1.6981753706932068e-01 399 + blend 0.0000000000000000e+00 + interp 4.5059421437247194e-01:4.5058970843032825e-01:8.2162030251704810e-01:3.0923586975756001e-01:1.1421129596248945e+00:2.2301579670921390e-01:1.9037554986543876e+00:2.6496935038396663e-01:3.0114673442765905e+00:4.0857646835754141e-01:3.9976553020367529e+00 + CVs 20 + -1.1113061330187671e-01 1.6392595121000605e-01 2.3278492764480149e-01 + -2.3149323144665260e-01 3.3142130890226718e-01 4.4082168777963704e-01 + -3.5661340551094400e-01 5.0792548151114292e-01 6.2329020114951272e-01 + -4.8495989653723004e-01 6.9772244918733783e-01 7.8113603336085335e-01 + -6.1572625364546507e-01 9.0553451387421213e-01 9.2127496299247658e-01 + -7.4184918979956893e-01 1.1349526322281767e+00 1.0555424240239790e+00 + -8.6057736405517238e-01 1.3874148235849861e+00 1.1944589456296753e+00 + -9.7791732070808224e-01 1.6603036551195660e+00 1.3523326280130190e+00 + -1.1102744181982875e+00 1.9403374726977085e+00 1.5557705205864254e+00 + -1.2785496084267081e+00 2.1933143093936440e+00 1.8346935409253118e+00 + -1.4915996455320575e+00 2.3581920229631295e+00 2.2009456212845802e+00 + -1.7268421403191083e+00 2.3781323145120079e+00 2.6303496297963682e+00 + -1.9482237092395944e+00 2.2543509251476879e+00 3.0798149784506541e+00 + -2.1434019486753706e+00 2.0397562478674995e+00 3.5150976245136625e+00 + -2.3397224857295953e+00 1.8118887728833049e+00 3.9170726532822804e+00 + -2.6021152915194072e+00 1.6360495381135998e+00 4.2792818879425782e+00 + -3.0169630425890506e+00 1.5611551323159580e+00 4.5655812259038511e+00 + -3.5593330670868673e+00 1.6339453273780729e+00 4.6970218854252206e+00 + -4.0137342592123000e+00 1.6608031743109413e+00 4.8379559753315959e+00 + id 13675 + loc 9.6535325050354004e-01 7.5738322734832764e-01 382 + blend 0.0000000000000000e+00 + interp 4.4047021811926940e-01:2.7600703605962018e-01:1.4095955266816151e-01:3.2637400503796182e-01:1.0032160901591858e+00:3.1423878711021958e-01:1.9580145125749762e+00:4.4046581341708824e-01:2.4777500470209235e+00:3.4196352223984156e-01:2.9700563298870537e+00:2.3824661876308231e-01:3.4977750717985039e+00 + CVs 20 + 1.0451279453464954e+00 1.8458994581804389e-01 -5.8868957113850395e-01 + 1.7316241045493548e+00 2.0628618155760364e-01 -9.9785699766072877e-01 + 2.3329023468070740e+00 1.7174477016580658e-01 -1.3427968456159491e+00 + 2.9769763736410022e+00 1.2336301374768294e-01 -1.6616564204431636e+00 + 3.6609882853304452e+00 5.2466960607195245e-02 -1.9439205560053601e+00 + 4.3773829423960136e+00 -4.9489930062219134e-02 -2.1878847907395103e+00 + 5.1103263780664614e+00 -1.9227818768260208e-01 -2.3997720208921165e+00 + 5.8325219354526983e+00 -3.9020098018303795e-01 -2.5941642482701726e+00 + 6.5157559945584191e+00 -6.5921052092136057e-01 -2.7921181790270388e+00 + 7.1347245258090410e+00 -1.0153271316825723e+00 -3.0188939922062414e+00 + 7.6576098195443558e+00 -1.4680741240266735e+00 -3.2920670467515736e+00 + 8.0470484499587513e+00 -2.0136859456932656e+00 -3.6099701517819893e+00 + 8.2743888752159087e+00 -2.6363252451372903e+00 -3.9541750893164727e+00 + 8.3311377864233318e+00 -3.2939308112113643e+00 -4.3031474467181248e+00 + 8.2516966615909819e+00 -3.9209503773904171e+00 -4.6469590698005927e+00 + 8.1072184330385646e+00 -4.4786239643526766e+00 -4.9829791229616553e+00 + 7.9631979926249556e+00 -4.9426453116877749e+00 -5.3075612471480413e+00 + 7.8468590814002708e+00 -5.2877445867744779e+00 -5.6058207294940949e+00 + 7.7475128593589462e+00 -5.6097708944287072e+00 -5.9120581534339998e+00 + id 13676 + loc 4.0323561429977417e-01 3.0132384970784187e-02 415 + blend 0.0000000000000000e+00 + interp 4.9069013753285268e-01:3.3761182053092631e-01:2.4063354379545199e-01:1.6042602458411837e-01:9.5901477340223018e-01:2.5010123293373288e-01:1.8715198633044703e+00:3.5287373387282039e-01:2.1861414380095496e+00:4.9068523063147740e-01:2.9941270806354039e+00:3.5117140348932802e-01:3.4757037606159691e+00 + CVs 20 + -5.0206096568654060e-02 6.0249017200617892e-02 -1.2303683972674165e-01 + -9.7121718009703137e-02 1.3207939706381888e-01 -2.2088356662868594e-01 + -1.3978601570051580e-01 2.0574962289189572e-01 -3.0108324408759413e-01 + -1.8431271998503737e-01 2.8135156927121596e-01 -3.8032972653271835e-01 + -2.2710561125086198e-01 3.6057306464591338e-01 -4.6137275624109836e-01 + -2.6276373404458730e-01 4.4413452843983658e-01 -5.4567693703587428e-01 + -2.8504520406634298e-01 5.3220440406560932e-01 -6.3428361669227429e-01 + -2.8700145262566379e-01 6.2418860672203502e-01 -7.2698281028285283e-01 + -2.6201765350211004e-01 7.1849522708307434e-01 -8.2134186079728744e-01 + -2.0522369720940814e-01 8.1248593673241642e-01 -9.1234625565624694e-01 + -1.1512949640963077e-01 9.0247957193763317e-01 -9.9332448313114940e-01 + 6.3457307172057886e-03 9.8060209938590093e-01 -1.0603993162879850e+00 + 1.5251541838432670e-01 1.0357182350909067e+00 -1.1160960365858927e+00 + 3.1286080255127158e-01 1.0592994852290014e+00 -1.1682882829622065e+00 + 4.7895053965625978e-01 1.0529175802628286e+00 -1.2214995324829245e+00 + 6.4791950391391440e-01 1.0259943459223584e+00 -1.2738347081400461e+00 + 8.1869299675606710e-01 9.8523440459043532e-01 -1.3251033705708331e+00 + 9.8796238071233489e-01 9.3207029395420471e-01 -1.3810304644634237e+00 + 1.1608297116979225e+00 9.3698749242984036e-01 -1.4303593950372744e+00 + id 13677 + loc 1.7365807294845581e-01 2.3844288289546967e-01 1078 + blend 0.0000000000000000e+00 + interp 4.3451483222052756e-01:2.7248474048514709e-01:3.4780390417825724e-01:3.8090258737877580e-01:1.0294057303577140e+00:2.8122259471006561e-01:1.9856512665956929e+00:4.3451048707220535e-01:2.4430277918795502e+00:2.8386537640447140e-01:3.0843143964580877e+00:3.9557800933363546e-01:3.9030671852763841e+00 + CVs 20 + 2.3599238339465770e-01 3.7168102938214698e-01 -2.3254137268770214e-01 + 3.8900897917723898e-01 7.1058158306082198e-01 -4.5578065816118218e-01 + 5.1346853823241478e-01 1.0364134371847886e+00 -6.7801717968935049e-01 + 6.2031978491843565e-01 1.3612414055129491e+00 -9.0788426731345673e-01 + 6.9932052010639589e-01 1.6788803330949813e+00 -1.1492080716208155e+00 + 7.3448855214969089e-01 1.9814885877819024e+00 -1.4093093999859012e+00 + 7.0904426154423261e-01 2.2549935083522739e+00 -1.6941130704181917e+00 + 6.1431693339740312e-01 2.4801891084723175e+00 -2.0025912653016169e+00 + 4.5304053842891689e-01 2.6370295775724886e+00 -2.3271544555155153e+00 + 2.4141249360257233e-01 2.7131121182551627e+00 -2.6539845402020705e+00 + 3.2419157688432509e-03 2.7155810706556736e+00 -2.9678388394593771e+00 + -2.4362237716500956e-01 2.6680732146695902e+00 -3.2606073807503813e+00 + -4.9316593712174017e-01 2.5927450481401895e+00 -3.5329182728007318e+00 + -7.4538483864517147e-01 2.4987302308660575e+00 -3.7886150045344413e+00 + -1.0028982548077192e+00 2.3758172412873191e+00 -4.0337271911064132e+00 + -1.2751976200059219e+00 2.1754755841698747e+00 -4.2825154990584533e+00 + -1.5352595739547015e+00 1.8063611118952303e+00 -4.5488207918167607e+00 + -1.6608616153271707e+00 1.3064173705111084e+00 -4.7905272851713843e+00 + -1.6952844384220909e+00 1.0987399721837234e+00 -4.8999993909294286e+00 + id 13678 + loc 5.7539188861846924e-01 9.7965157032012939e-01 395 + blend 0.0000000000000000e+00 + interp 4.4399718641571106e-01:4.3556582558168155e-01:2.1708860433099708e-01:3.2617327786211542e-01:9.7962572433438733e-01:2.4119930196294034e-01:1.9326874894050114e+00:4.4399274644384695e-01:2.4146741212678515e+00:3.1300723196181213e-01:3.2925977296443403e+00:4.1686819954348975e-01:3.9286216067513315e+00 + CVs 20 + 6.0370909454547717e-01 1.1677447267377700e-01 -3.8876474653099669e-01 + 1.0539416034757203e+00 1.3098917815526367e-01 -7.0270633155707685e-01 + 1.4629534963140645e+00 1.1813119307770958e-01 -9.8913165570847861e-01 + 1.8631254427283253e+00 1.0498625594622280e-01 -1.2587358430469733e+00 + 2.2497614000397941e+00 9.4926747305853487e-02 -1.5087947748619706e+00 + 2.6216086235131004e+00 9.1301070417896257e-02 -1.7421363180723124e+00 + 2.9795467174782830e+00 9.5862806650811816e-02 -1.9645132072691032e+00 + 3.3273169701995484e+00 1.0607680340191972e-01 -2.1824515344282638e+00 + 3.6732970829893636e+00 1.1238141800056223e-01 -2.4022538258402673e+00 + 4.0251584032187235e+00 9.7477486408953151e-02 -2.6301916296767103e+00 + 4.3791873488076476e+00 3.9351606357467706e-02 -2.8738960763980672e+00 + 4.7177497903874155e+00 -7.8738640360914935e-02 -3.1356378830499159e+00 + 5.0237329645499464e+00 -2.6195643861381024e-01 -3.4062337245718455e+00 + 5.2883178981064844e+00 -5.0903898544914483e-01 -3.6703827882688023e+00 + 5.5043601394410731e+00 -8.1192836303416716e-01 -3.9140243440494573e+00 + 5.6654301953342099e+00 -1.1565690020683763e+00 -4.1289625211684013e+00 + 5.7682385750970422e+00 -1.5258648058080104e+00 -4.3062701897364093e+00 + 5.8136895922566731e+00 -1.9032012786684138e+00 -4.4324799310182232e+00 + 5.7913880685895052e+00 -2.2841617648510271e+00 -4.4812686606484480e+00 + id 13679 + loc 2.0166849717497826e-02 4.0387708693742752e-02 376 + blend 0.0000000000000000e+00 + interp 4.4084660919008156e-01:2.2286216423523802e-01:9.5581343039336408e-02:2.7238444191524114e-01:9.5378588770284545e-01:4.4084220072398966e-01:1.6084077345446386e+00:3.9159239355849895e-01:1.9991421864230492e+00:1.6886300178483715e-01:2.3938539045024818e+00:2.8873172281780191e-01:3.2700437964659761e+00 + CVs 20 + 7.6921372039172831e-01 4.1118082822986768e-01 2.5366310178695534e-01 + 1.3519675652247858e+00 6.3933032267420775e-01 3.4521235590189053e-01 + 1.8893276035432367e+00 7.2794573151765296e-01 3.2794096897395530e-01 + 2.4447525022872343e+00 7.4291696644641136e-01 2.5093917659664555e-01 + 3.0152569450162230e+00 7.4955649806037028e-01 1.6354496993647394e-01 + 3.5969936627399530e+00 7.8145517261028674e-01 1.1891753852338238e-01 + 4.1840124517693962e+00 8.3248065151978268e-01 1.6385309023623051e-01 + 4.7560351999331987e+00 8.9070135188443433e-01 3.2478641540748199e-01 + 5.2807908817880360e+00 9.5954187646563227e-01 6.0200124517772879e-01 + 5.7311299478107252e+00 1.0430641231957307e+00 9.7238059531843013e-01 + 6.1053516798369740e+00 1.1342828532581797e+00 1.3926850607290944e+00 + 6.4279076092699698e+00 1.2224536618943385e+00 1.8225166899782388e+00 + 6.7303645163922514e+00 1.2898576993841075e+00 2.2473104183260229e+00 + 7.0323468892386467e+00 1.3051548036080183e+00 2.6691969718975268e+00 + 7.3188971218486696e+00 1.2476954146712234e+00 3.1086847973705782e+00 + 7.4775076721646574e+00 1.1166965102524324e+00 3.6194314388921338e+00 + 7.3598772004909074e+00 9.0273210082531863e-01 4.2312177064341459e+00 + 7.1041191747963124e+00 5.1993962214211509e-01 4.7443078096265028e+00 + 7.2395505077521838e+00 2.0145949325822921e-01 4.5558176729899733e+00 + id 13680 + loc 9.4099849462509155e-01 2.0047250390052795e-01 402 + blend 0.0000000000000000e+00 + interp 5.1434944597225007e-01:3.8962560244644973e-01:6.3158010929043051e-05:3.5640057087843885e-01:9.9659102571324043e-01:5.1434430247779039e-01:1.3566112328530411e+00:4.7231927721669958e-01:1.9923836820665950e+00:4.3326247275782775e-01:2.4709629089648200e+00:2.7128674508266415e-01:3.3459241097322323e+00 + CVs 20 + 1.9736514867618277e-01 2.7574993818483928e-01 2.6873920573960997e-01 + 3.7669483433970152e-01 5.5786552240336784e-01 5.4043483197185460e-01 + 5.4075780504263382e-01 8.5038517455330409e-01 8.2750588315004392e-01 + 7.1491922131647834e-01 1.1390398423885386e+00 1.1236627612473320e+00 + 9.3438884531666511e-01 1.4024648849116559e+00 1.4148383000946181e+00 + 1.2199917181735385e+00 1.6204171143610282e+00 1.6905184248751806e+00 + 1.5718182294701815e+00 1.7717655260177445e+00 1.9496229607890319e+00 + 1.9741260265413514e+00 1.8329173868961610e+00 2.2020927177552787e+00 + 2.3988134856864440e+00 1.7796616826006697e+00 2.4615466976639189e+00 + 2.8054692066122882e+00 1.5903119824343446e+00 2.7298462670627579e+00 + 3.1437782708467621e+00 1.2700098915578080e+00 2.9827236424581627e+00 + 3.3991272499980973e+00 8.7202233750293923e-01 3.1851059784422553e+00 + 3.6143299119923040e+00 4.4794895415102132e-01 3.3255344656423396e+00 + 3.8446204693472601e+00 1.8784008258842189e-02 3.4169350539370278e+00 + 4.1364340828182646e+00 -4.1408788986335587e-01 3.4903582574096479e+00 + 4.5258321472089671e+00 -8.5894986634762971e-01 3.5885310839923577e+00 + 5.0052474337732047e+00 -1.3174134715152213e+00 3.7472940541535187e+00 + 5.5119211328889302e+00 -1.7732243964530099e+00 3.9750895687095187e+00 + 5.9621126442259653e+00 -2.1909912940885619e+00 4.2069787105559975e+00 + id 13681 + loc 6.0364711284637451e-01 2.3274829983711243e-01 396 + blend 0.0000000000000000e+00 + interp 4.7869826920659075e-01:2.8606069072783680e-01:1.3887519773072088e-01:4.6705402760986625e-01:8.1065769917089103e-01:4.7869348222389874e-01:1.0448270178966910e+00:3.9457617855937588e-01:1.6551056831073010e+00:4.4677364698241051e-01:2.0662646778207203e+00:4.4744824420327012e-01:2.8364884989428427e+00:3.4073746513637682e-01:3.0561833801014506e+00:3.8844593714738007e-01:3.7234553598183195e+00 + CVs 20 + -7.2126453504948529e-01 2.9619237373252405e-01 3.4157853277158506e-01 + -1.2679726757342646e+00 4.5135165927564658e-01 6.3937957152837399e-01 + -1.7666390849507609e+00 5.4778746635057796e-01 9.2564708164878828e-01 + -2.2793032558009783e+00 6.0884909702958190e-01 1.2220819673692429e+00 + -2.8015993771739858e+00 6.2963080321512943e-01 1.5274661377718748e+00 + -3.3247738995744744e+00 6.0919886198002648e-01 1.8444940278544841e+00 + -3.8370152655493972e+00 5.4749743858578137e-01 2.1767901442605364e+00 + -4.3259126382902444e+00 4.4100321725249181e-01 2.5253064315446441e+00 + -4.7776564020146131e+00 2.8404352969696922e-01 2.8906977370289728e+00 + -5.1742104959466584e+00 7.5966618720828105e-02 3.2749368033520736e+00 + -5.4990938587267433e+00 -1.7418412702041008e-01 3.6770404242848351e+00 + -5.7523630106060626e+00 -4.5151390116239520e-01 4.0903182385822827e+00 + -5.9486463822416455e+00 -7.4526119636127630e-01 4.5089100100765531e+00 + -6.1001854077390814e+00 -1.0485635002397595e+00 4.9297647173608095e+00 + -6.2133330163550342e+00 -1.3567549639159187e+00 5.3491898991320426e+00 + -6.2938924949379125e+00 -1.6777796564084078e+00 5.7628625308850330e+00 + -6.3449968694608643e+00 -2.0303571537549727e+00 6.1648944012836173e+00 + -6.3663687951044103e+00 -2.4128406260234176e+00 6.5423636102710194e+00 + -6.3859576771276405e+00 -2.6647182372312335e+00 6.8564783604116579e+00 + id 13682 + loc 3.5923695564270020e-01 6.4022529125213623e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0977408842277094e-01:4.0972641760343209e-01:1.7250166275744050e-02:5.0976899068188675e-01:7.8178140507133542e-01:3.7263283918261120e-01:1.2022992907213439e+00:4.1905640839749403e-01:2.0301773129489082e+00:4.3297302492962830e-01:2.8934611536838575e+00:2.7679840958321550e-01:3.4031919584325672e+00 + CVs 20 + 7.4799823987979949e-02 2.9007312315749373e-01 -1.3800067924733381e-01 + 1.6059424278509538e-01 5.8498498690643608e-01 -2.6281033253670688e-01 + 2.5783761413276274e-01 8.9462570321385282e-01 -3.7864928581714352e-01 + 3.7068304955715731e-01 1.2241801480825361e+00 -4.9657322161643336e-01 + 4.9527050368257330e-01 1.5696307099104254e+00 -6.2908006728891197e-01 + 6.1380287258969868e-01 1.9316068525412318e+00 -7.9339326691660994e-01 + 6.9758212751064430e-01 2.3047772729422249e+00 -1.0264231634007885e+00 + 7.1366637396728971e-01 2.6565316351336898e+00 -1.3762411751861872e+00 + 6.4092394561506261e-01 2.9141718300535850e+00 -1.8608545633358999e+00 + 4.8561325211530315e-01 3.0028662545187896e+00 -2.4287486065158101e+00 + 2.8152997745049357e-01 2.9079549976015677e+00 -3.0022606882999390e+00 + 7.2664323422150900e-02 2.6592011135115619e+00 -3.5383380790141885e+00 + -9.6208048751454056e-02 2.2923501120811891e+00 -4.0261751591514781e+00 + -1.8170702702944297e-01 1.8382669430849874e+00 -4.4694111767138720e+00 + -1.3596619007271538e-01 1.3250494610353387e+00 -4.8751795031719398e+00 + 1.1431059074821370e-01 7.9662720689151656e-01 -5.2354321142009193e+00 + 6.2454150441899170e-01 3.5755608487338075e-01 -5.4829789234960193e+00 + 1.2166191150454977e+00 8.5634448456750945e-02 -5.5309035091230339e+00 + 1.5504604289446158e+00 -1.7638682089705504e-01 -5.4822870562155765e+00 + id 13683 + loc 6.5891975164413452e-01 4.6781966090202332e-01 1080 + blend 0.0000000000000000e+00 + interp 3.3094423146878937e-01:2.6141757271625865e-01:2.2985854695397567e-01:2.9077507582008955e-01:1.0020858726302224e+00:2.7499594856325044e-01:1.8073586530400241e+00:2.6391370975397832e-01:2.3990096038450632e+00:3.3094092202647468e-01:3.0050571431927002e+00:3.2989832471232111e-01:3.7338203094303566e+00 + CVs 20 + -2.1770794910616342e-02 3.9918419697813945e-01 -3.4060850535541465e-01 + -6.3284288843607817e-02 7.0767235542521367e-01 -5.0382847805064335e-01 + -1.1524336227442089e-01 9.8954294048464209e-01 -5.9789305639780310e-01 + -1.7514960865484369e-01 1.2738155896101409e+00 -6.6817030143495315e-01 + -2.4131662288641881e-01 1.5443739172467370e+00 -7.0738137767988141e-01 + -3.0805205942274838e-01 1.7786372586620478e+00 -7.1127482852880941e-01 + -3.6124412890627933e-01 1.9469268877708799e+00 -6.8264571713528743e-01 + -3.6616966800240941e-01 2.0186951510484832e+00 -6.5166636815826995e-01 + -2.9077564881448786e-01 2.0382613558014366e+00 -6.9562893725611552e-01 + -2.2626217043906777e-01 2.1007531107717483e+00 -7.5135579239976058e-01 + -1.9159157193549872e-01 2.1256595135486753e+00 -7.2909948228273280e-01 + -1.4310783940730870e-01 2.0685317027431660e+00 -6.6186686767822756e-01 + -6.5150882912202224e-02 1.9214805735031564e+00 -5.8172104358052878e-01 + 3.2577912074267093e-02 1.6976490243136435e+00 -5.0708791765757766e-01 + 1.2828211149847568e-01 1.4359427143406123e+00 -4.4023619288249116e-01 + 2.1794341467765699e-01 1.1731529353166212e+00 -3.5235880431467870e-01 + 3.2462277518456961e-01 9.4717396926444875e-01 -2.8133191051988693e-02 + 2.3075074738425327e-01 1.3378300181972980e+00 4.8407655228235125e-01 + 2.0584251663302153e-01 1.4679360986859062e+00 4.8538780406932125e-01 + id 13684 + loc 5.6442666053771973e-01 1.9493657350540161e-01 375 + blend 0.0000000000000000e+00 + interp 4.9521027294785125e-01:3.0801456708953490e-01:1.6067862565942725e-01:4.2686350730921985e-01:9.0826896604398277e-01:3.1257410704147620e-01:1.4712022838663104e+00:4.9520532084512181e-01:2.2762492590434258e+00:3.1516248105928835e-01:2.9619520121639646e+00:4.6151227384545745e-01:3.6546555605786355e+00 + CVs 20 + 6.2886925156159867e-01 4.0508073450813309e-01 5.8927040614779713e-02 + 1.1650683797100923e+00 6.2236863272160159e-01 7.4502782513205634e-02 + 1.6882064980222349e+00 6.6232369506217570e-01 3.7116740525039937e-02 + 2.2336049081803941e+00 5.8431054487007517e-01 -4.7136319065325505e-02 + 2.7868100568988554e+00 4.6685758970586544e-01 -1.5694350544776053e-01 + 3.3301799177535636e+00 3.6033809263964045e-01 -2.5258857134169932e-01 + 3.8593474494608273e+00 2.7811950854322975e-01 -3.0291076107500048e-01 + 4.3797292579887150e+00 2.2595125812885719e-01 -2.9128306443491614e-01 + 4.8800035550052154e+00 2.1523144353580803e-01 -2.1406333433207214e-01 + 5.3295307370307770e+00 2.5518930229959658e-01 -8.1139199771570580e-02 + 5.7051015190946153e+00 3.4259341643529106e-01 7.9585948708335907e-02 + 6.0090227427415579e+00 4.7011226888276925e-01 2.3113124934212270e-01 + 6.2703971668789773e+00 6.3193503052337174e-01 3.6750499217082599e-01 + 6.5245823836759875e+00 8.0090415945448390e-01 5.3243877344454749e-01 + 6.7649727498273275e+00 9.4317727614166902e-01 7.6103004233108362e-01 + 6.9069424928693088e+00 1.0552884824598254e+00 1.0636317209285406e+00 + 6.8460802044423943e+00 1.1318592860251524e+00 1.4360971617892009e+00 + 6.6569961901966517e+00 1.0167241120063126e+00 1.8005708647743677e+00 + 6.6860129755143038e+00 5.4511746551143414e-01 1.8127073730193133e+00 + id 13685 + loc 5.4389588534832001e-02 7.0949095487594604e-01 373 + blend 0.0000000000000000e+00 + interp 4.8709967395297760e-01:3.5630425645164476e-01:1.2202359786382888e-01:3.8100085666288053e-01:7.0187069743146702e-01:3.1766596014208759e-01:1.6909329218340012e+00:3.8562363987977560e-01:2.0785959764712540e+00:3.3853473100888032e-01:2.9531824847330999e+00:4.8709480295623808e-01:3.7107842987120927e+00 + CVs 20 + -3.7773747103733279e-01 6.2304502433888853e-01 -1.2660007486912284e-01 + -6.8850090464790048e-01 1.2012425282906776e+00 -2.9211535461500548e-01 + -9.1711290920382560e-01 1.7571921410529268e+00 -4.9929154740698750e-01 + -1.0598073958017089e+00 2.2935594764139595e+00 -7.5240285402211271e-01 + -1.1265322292627316e+00 2.7778864915778487e+00 -1.0495112490947707e+00 + -1.1550485163741278e+00 3.1711180321053187e+00 -1.3718582673750050e+00 + -1.1860469063933716e+00 3.4558193485202127e+00 -1.6933020892706958e+00 + -1.2419802458348186e+00 3.6466220441352539e+00 -2.0015090431135678e+00 + -1.3348460877567367e+00 3.7720606147333560e+00 -2.3107982783243930e+00 + -1.4795430552923043e+00 3.8516745859842314e+00 -2.6392450822590385e+00 + -1.6977358245419580e+00 3.8949498210371485e+00 -2.9910159253047395e+00 + -2.0198457051532026e+00 3.8983615844171959e+00 -3.3584214874677039e+00 + -2.4607313625330329e+00 3.8424911661470982e+00 -3.7198677771652351e+00 + -2.9939758766868128e+00 3.7078815389582283e+00 -4.0481460407916900e+00 + -3.5794288019575040e+00 3.4947072836618451e+00 -4.3141440857786932e+00 + -4.2035595836399793e+00 3.2310620823344074e+00 -4.4884816400203160e+00 + -4.9060119829346718e+00 2.9636301942864871e+00 -4.5809765074949711e+00 + -5.7249348729307705e+00 2.6392823624599711e+00 -4.6275903976440294e+00 + -6.2305331501599230e+00 2.3538924909982351e+00 -4.4191944300147101e+00 + id 13686 + loc 4.0079042315483093e-01 7.0591740310192108e-02 378 + blend 0.0000000000000000e+00 + interp 4.5165463271823136e-01:3.0790891184879349e-01:9.0934219117694570e-01:4.5165011617190420e-01:1.7989156690207411e+00:3.2079694744442622e-01:2.4857872506736847e+00:3.5019905368364812e-01:3.2583498851939776e+00:3.7671329736319364e-01:3.9909981447548977e+00 + CVs 20 + 1.5184278533211770e-01 3.1934908104775961e-01 -2.2257847927726834e-01 + 2.6873373620870289e-01 6.1708593089901009e-01 -4.2835915851167228e-01 + 3.6907517663130585e-01 8.9825656433562062e-01 -6.2644016728845964e-01 + 4.5989526557919258e-01 1.1690467424066349e+00 -8.2021795058258429e-01 + 5.4419229045462902e-01 1.4418924670965034e+00 -1.0110280731602586e+00 + 6.3269844357460947e-01 1.7308603139568166e+00 -1.2072194979633348e+00 + 7.3751268604222409e-01 2.0334645820059087e+00 -1.4218874448744028e+00 + 8.6837135800395671e-01 2.3386652785176536e+00 -1.6647277203212649e+00 + 1.0401385906443803e+00 2.6405801215842004e+00 -1.9353266669978468e+00 + 1.2732381977606768e+00 2.9385850650094820e+00 -2.2266395385339406e+00 + 1.5879191106491057e+00 3.2336919841250733e+00 -2.5436743048701791e+00 + 2.0034275113483471e+00 3.5083395878228889e+00 -2.9080604652652005e+00 + 2.4926517898112812e+00 3.6895288206479027e+00 -3.3082755181491450e+00 + 2.9098877674021240e+00 3.7042624929660746e+00 -3.6520336096442518e+00 + 3.1226211008368825e+00 3.5816875830326040e+00 -3.8502837659184106e+00 + 3.1745527493885657e+00 3.3863634302803285e+00 -3.8653183709085601e+00 + 3.2165664365369757e+00 3.1589423982721430e+00 -3.6761002366317408e+00 + 3.3469722513407243e+00 2.9266534087972373e+00 -3.4183619695881298e+00 + 3.4277132613952128e+00 2.8433568057547474e+00 -3.6345171354481218e+00 + id 13687 + loc 7.9913991689682007e-01 8.0265635251998901e-01 1068 + blend 0.0000000000000000e+00 + interp 4.4488572288564587e-01:4.4488127402841704e-01:5.8202900620490094e-01:2.5299882546564856e-01:1.0877110665957508e+00:2.5361137807735834e-01:2.1688978835688744e+00:3.9233118666366051e-01:2.7495830010383155e+00:4.0203288289667616e-01:3.0178993047455185e+00:2.6187780709203684e-01:3.9861984221785671e+00 + CVs 20 + 1.3753873372249806e-01 4.2662369060769834e-01 -2.9667000175340663e-01 + 3.0024100116249675e-01 8.3939499406322093e-01 -5.5623782524598075e-01 + 4.9660368739714550e-01 1.2292888315187034e+00 -7.8972518393027724e-01 + 7.3303924306227675e-01 1.5783891862756203e+00 -1.0113281155749867e+00 + 1.0117109084796017e+00 1.8618329473091519e+00 -1.2360833391670702e+00 + 1.3260031991639072e+00 2.0558023830923480e+00 -1.4730937990403667e+00 + 1.6619783737614973e+00 2.1489488242970474e+00 -1.7159113913465949e+00 + 2.0023340989569287e+00 2.1481000735107361e+00 -1.9460050948680701e+00 + 2.3335654104384598e+00 2.0744338879758661e+00 -2.1492920683601691e+00 + 2.6493456475596915e+00 1.9520575857736489e+00 -2.3269479645118771e+00 + 2.9467137499440450e+00 1.7975679415794148e+00 -2.4912756931954609e+00 + 3.2254342786363090e+00 1.6165319876215589e+00 -2.6586398869529355e+00 + 3.4945641719354490e+00 1.4168719789355109e+00 -2.8423215331043470e+00 + 3.7818265671571512e+00 1.2028239411398820e+00 -3.0643506553308288e+00 + 4.1062591510836892e+00 9.4471299066525216e-01 -3.3546420608638101e+00 + 4.4503405292805303e+00 5.8418719587620105e-01 -3.7424709773954965e+00 + 4.7498057056377814e+00 1.3543419542596258e-01 -4.2482324370607145e+00 + 4.9211932037478139e+00 -2.3314792828130027e-01 -4.7776846655745109e+00 + 4.9110848579214945e+00 -2.6580942369830662e-01 -5.0562873659924801e+00 + id 13688 + loc 3.3494952321052551e-01 3.6744678020477295e-01 393 + blend 0.0000000000000000e+00 + interp 4.0474646828319555e-01:3.0034076286835198e-01:4.3833020225416686e-03:4.0048685126442757e-01:9.5167593818544349e-01:3.6201544467567459e-01:1.3831183232924236e+00:2.8560650038254554e-01:2.0232214368969719e+00:4.0474242081851275e-01:2.6422672775817899e+00:3.1120817176987647e-01:3.3081300858316682e+00 + CVs 20 + -1.3544302103500780e-01 2.1571790641260569e-01 2.9801323685298170e-01 + -2.8448212434185721e-01 4.6563653121059767e-01 6.1262126087342195e-01 + -4.3073277263976639e-01 7.4754625272039144e-01 9.0848807699671341e-01 + -5.7192884325586069e-01 1.0336221051272301e+00 1.1605598404807560e+00 + -7.3589212885372191e-01 1.3019431723138064e+00 1.3810173939839556e+00 + -9.5596867098964899e-01 1.5446435058659500e+00 1.5855352725608693e+00 + -1.2386809744726603e+00 1.7551665765117666e+00 1.7617904749735349e+00 + -1.5685925075953753e+00 1.9234255746015796e+00 1.8920127332531975e+00 + -1.9309845211424534e+00 2.0390261562606953e+00 1.9793392675440553e+00 + -2.3129770475555582e+00 2.0952079240138155e+00 2.0350286939736137e+00 + -2.6987005646048261e+00 2.0871798807930020e+00 2.0682103417837014e+00 + -3.0698272936049373e+00 2.0127855132463912e+00 2.0818339542656825e+00 + -3.4099783833821271e+00 1.8731049557174935e+00 2.0749002482326970e+00 + -3.7055197330410152e+00 1.6650082653805223e+00 2.0564937931658864e+00 + -3.9447296369785239e+00 1.3597156989867663e+00 2.0622849163580299e+00 + -4.0962325059440587e+00 8.9130558910765201e-01 2.1654855397546529e+00 + -4.0735344327864462e+00 2.6218482888556993e-01 2.4380890975523348e+00 + -3.8668611747894559e+00 -3.7526253991076042e-01 2.8479316101855705e+00 + -3.7583105915129575e+00 -8.7918059781237412e-01 3.1517260088045713e+00 + id 13689 + loc 3.2649952173233032e-01 6.5290576219558716e-01 409 + blend 0.0000000000000000e+00 + interp 4.9324727192893758e-01:2.7373036062236106e-01:1.4463201546355264e-01:4.9324233945621831e-01:8.6521439524738319e-01:4.1276489549012557e-01:1.2132494176859918e+00:2.7442735776899846e-01:1.9907664826529050e+00:2.6595402524052830e-01:2.9752289031215478e+00:2.8722448795118888e-01:3.6078404027685371e+00 + CVs 20 + 5.4200478843165323e-01 3.7348101208514534e-02 -1.6511759141650190e-01 + 1.0262934705356415e+00 3.8014309711024596e-02 -3.5307285357685714e-01 + 1.5157591320590824e+00 3.0376079385113997e-02 -5.0314086953084947e-01 + 2.0067653859061507e+00 1.6175244809288447e-02 -6.0960134811684963e-01 + 2.4886743769075736e+00 -5.5716814591260100e-03 -6.7929680783099999e-01 + 2.9550964743446153e+00 -3.4817119481081349e-02 -7.1483062498876404e-01 + 3.3960193841570145e+00 -7.7907041009496636e-02 -7.1737681843269530e-01 + 3.7984637718476408e+00 -1.4603559912797448e-01 -6.9128452651521088e-01 + 4.1521306344617859e+00 -2.4549008892828628e-01 -6.4731017428768900e-01 + 4.4455485877406478e+00 -3.7741747458477226e-01 -6.0201032303283264e-01 + 4.6665963059214937e+00 -5.3741989460643769e-01 -5.7235244014746001e-01 + 4.8193881359458990e+00 -7.1092970822365187e-01 -5.6594169335432687e-01 + 4.9267481610606021e+00 -8.8299356898072867e-01 -5.7767912747368200e-01 + 5.0088775318729031e+00 -1.0478714020356801e+00 -5.9938652509665935e-01 + 5.0738817028735852e+00 -1.2046957726005569e+00 -6.2525930125079277e-01 + 5.1272253002979529e+00 -1.3547609453802809e+00 -6.4889166773579632e-01 + 5.1809041504000870e+00 -1.5000598379281311e+00 -6.6860557029883194e-01 + 5.2547469398820930e+00 -1.6398466421297473e+00 -6.9458507076613007e-01 + 5.4074148249774243e+00 -1.8086951751008877e+00 -7.3013892198898711e-01 + id 13690 + loc 3.5101705789566040e-01 3.7958565354347229e-01 380 + blend 0.0000000000000000e+00 + interp 3.5623065683070976e-01:3.4616684287769556e-01:6.9030984179222765e-01:3.5622709452414147e-01:1.4763930296235417e+00:2.9454756074442401e-01:2.2335164226459217e+00:3.4731552339240140e-01:2.9940233244551040e+00:3.3518173178060812e-01:3.9042477199441867e+00 + CVs 20 + -4.7030853408452544e-01 3.8149690263599167e-01 5.2342922999500430e-01 + -7.9383140337089586e-01 6.7309918525670109e-01 9.4713332773785375e-01 + -1.0709368405911053e+00 9.3169502627364387e-01 1.3313037655263329e+00 + -1.3501597918241406e+00 1.1885651749653801e+00 1.7100515293314560e+00 + -1.6451075275225386e+00 1.4471976568322622e+00 2.0922150010180425e+00 + -1.9779430110481038e+00 1.7034326810212672e+00 2.4922838302450634e+00 + -2.3731728496153468e+00 1.9376765958118667e+00 2.9222494710727860e+00 + -2.8455161964417535e+00 2.1181437576792117e+00 3.3784035986605350e+00 + -3.3901669153872622e+00 2.2128525003132431e+00 3.8350115033354237e+00 + -3.9927086127581504e+00 2.1991121664164681e+00 4.2672259977227345e+00 + -4.6366853034852227e+00 2.0590100285930157e+00 4.6673383760587743e+00 + -5.2988626824160301e+00 1.7721054297604006e+00 5.0342759404636581e+00 + -5.9304276921475836e+00 1.3304307072151880e+00 5.3453238260220646e+00 + -6.4442433595690618e+00 7.9090390022124035e-01 5.5543670710979391e+00 + -6.7849752985524567e+00 2.6705694173808681e-01 5.6467491371696692e+00 + -6.9852899128540704e+00 -1.8979299089589752e-01 5.6589432798274215e+00 + -7.1160468050899714e+00 -6.0795484270383282e-01 5.6405446564638382e+00 + -7.2277666855625515e+00 -1.0220142008889517e+00 5.6541927716262972e+00 + -7.3028034817586889e+00 -1.4234412946776498e+00 5.8223301678422690e+00 + id 13691 + loc 3.5814166069030762e-01 7.6932996511459351e-01 374 + blend 0.0000000000000000e+00 + interp 4.5076751824394412e-01:3.0509610055953140e-01:5.6906629711155654e-01:3.6273594546784305e-01:1.1647183598778803e+00:3.2803352194294383e-01:1.9956001479802239e+00:4.5076301056876172e-01:2.6415434285988604e+00:3.1463544248701936e-01:3.4002687939981620e+00 + CVs 20 + -6.4936098798315534e-01 3.1915509234406941e-01 -1.4812994519615041e-01 + -1.1671920448780881e+00 5.1074326191309516e-01 -2.4215172693765122e-01 + -1.6700241962411382e+00 6.2297426992626392e-01 -3.0076031170402945e-01 + -2.2069941452981610e+00 6.9468983290829756e-01 -3.3922525859069175e-01 + -2.7633752053905245e+00 7.5146896009977826e-01 -3.6791686806630775e-01 + -3.3226658762326782e+00 8.0556390951363865e-01 -3.9882196612154897e-01 + -3.8851173404341424e+00 8.4921336804392178e-01 -4.4313062380212032e-01 + -4.4581845512423879e+00 8.6648559896432764e-01 -5.1359800598704064e-01 + -5.0364159446343706e+00 8.4205801723013840e-01 -6.2492725815189876e-01 + -5.5974945957220568e+00 7.6398158434675656e-01 -7.8161621307522522e-01 + -6.1200577119996380e+00 6.2748178180428793e-01 -9.6201775478355023e-01 + -6.5905597842971639e+00 4.3182975487326969e-01 -1.1385759975211747e+00 + -7.0016513830902980e+00 1.7370054596135409e-01 -1.2947820893597211e+00 + -7.3467140854696673e+00 -1.5209634430505359e-01 -1.4250390178390231e+00 + -7.6200889207710389e+00 -5.3144026942657252e-01 -1.5303112183459040e+00 + -7.8208109029690043e+00 -9.1524321761103744e-01 -1.6210846511820045e+00 + -7.9504552238854949e+00 -1.2453831140748091e+00 -1.7122651618936424e+00 + -8.0391920128345902e+00 -1.5144739045017399e+00 -1.8149084328884433e+00 + -8.2285112097058430e+00 -1.7889103868152376e+00 -1.9188125737781632e+00 + id 13692 + loc 2.3041105270385742e-01 5.8949196338653564e-01 412 + blend 0.0000000000000000e+00 + interp 4.4379062684738529e-01:3.1858913659855298e-01:1.3846699950975039e-01:3.6982773239607802e-01:1.0217963537496315e+00:2.9398156198546960e-01:1.7076105513642037e+00:3.3265855661200350e-01:2.0533039649148637e+00:3.3414904913998561e-01:2.9528071491978518e+00:4.4378618894111682e-01:3.7724437513280100e+00 + CVs 20 + 6.7757941588967541e-01 1.8180205648223757e-01 -1.4459957667623075e-01 + 1.1417310679977182e+00 2.3596050458134890e-01 -3.0349542078763625e-01 + 1.5609623365702647e+00 2.4264087507434498e-01 -4.6651990113752434e-01 + 2.0061909590173617e+00 2.3344752922210443e-01 -6.3097606003146600e-01 + 2.4675119714122409e+00 2.0440148891647403e-01 -7.9069365675169268e-01 + 2.9356477101985079e+00 1.5458753070010101e-01 -9.3863293377602197e-01 + 3.4014732764973505e+00 8.5424890682305077e-02 -1.0702954933690085e+00 + 3.8562817274820702e+00 -9.5862971698990052e-04 -1.1874641894514630e+00 + 4.2952024007347562e+00 -1.0197072873283708e-01 -1.2945385043938911e+00 + 4.7154957467952370e+00 -2.1436735978968602e-01 -1.3948179284692790e+00 + 5.1001121593275212e+00 -3.3071980665196854e-01 -1.4954650641932803e+00 + 5.4075918293924454e+00 -4.3089096130783622e-01 -1.6137080663837566e+00 + 5.6175202265030935e+00 -4.9020565366612612e-01 -1.7573874581265696e+00 + 5.7730788295853639e+00 -5.1643842962729458e-01 -1.9151367319991834e+00 + 5.9156723043083161e+00 -5.3350754485358998e-01 -2.0797820762478416e+00 + 6.0418358936998775e+00 -5.3307671376569576e-01 -2.2371411271319959e+00 + 6.1453918942161927e+00 -5.0104654419862782e-01 -2.3655031015344679e+00 + 6.2380952731697565e+00 -4.5662151524188799e-01 -2.4640008486736327e+00 + 6.3523769384215836e+00 -5.7841178817431693e-01 -2.6756883414801758e+00 + id 13693 + loc 9.2563647031784058e-01 5.6534755229949951e-01 400 + blend 0.0000000000000000e+00 + interp 4.9843644323665415e-01:4.2615172929019385e-01:4.7640962674539322e-02:3.1896757753804250e-01:6.4802885283325151e-01:2.5936981732853109e-01:1.1435408281610968e+00:3.8956587437568896e-01:1.9911165192611275e+00:4.9843145887222179e-01:2.6730560962995464e+00:3.6096669143437132e-01:3.0813600871615447e+00:2.8727000421358062e-01:3.6160744647852474e+00 + CVs 20 + -1.6835384143466253e-01 1.8636695399661066e-01 -2.9697289408186284e-01 + -3.2047655517683177e-01 3.7872307455762233e-01 -5.8958957901775344e-01 + -4.5315222422852758e-01 5.8159556258224665e-01 -8.9606188975539125e-01 + -5.7080096138983194e-01 7.9313178117608074e-01 -1.2238260835108878e+00 + -6.7727169385779029e-01 1.0083275773497036e+00 -1.5713735355236285e+00 + -7.6988065495074287e-01 1.2266212556210885e+00 -1.9362649703813877e+00 + -8.4336554698764377e-01 1.4472208731113261e+00 -2.3236036005545446e+00 + -8.9340061129739479e-01 1.6609714278522960e+00 -2.7481882835940121e+00 + -9.1488688720721323e-01 1.8518083084680328e+00 -3.2215112168095796e+00 + -9.0291294006359357e-01 2.0001313291400966e+00 -3.7436193202899943e+00 + -8.5442045904261454e-01 2.0834583103450210e+00 -4.3089185104271817e+00 + -7.6618729378559802e-01 2.0743394503853141e+00 -4.9072982125240259e+00 + -6.2847604708623150e-01 1.9481720478741194e+00 -5.5130777201907684e+00 + -4.2570147932602020e-01 1.6948639948288817e+00 -6.0821214067338918e+00 + -1.4934939896370758e-01 1.3152646990960934e+00 -6.5648328916744969e+00 + 1.8841046556718094e-01 8.1292143592678778e-01 -6.9152054942059280e+00 + 5.4982990131092069e-01 2.1663027089527231e-01 -7.0957019290946821e+00 + 8.7420638454683497e-01 -3.8116272057101730e-01 -7.1232218284754820e+00 + 1.0595037160182459e+00 -7.5048333656454114e-01 -7.2154500974090849e+00 + id 13694 + loc 8.6249583959579468e-01 2.5733861327171326e-01 415 + blend 0.0000000000000000e+00 + interp 4.9173257122541070e-01:3.3441814630648053e-01:2.9007334717838029e-01:3.2794918670565609e-01:1.0021572736489561e+00:3.4816685411836779e-01:1.9308953278147434e+00:4.9172765389969847e-01:2.2680405703398918e+00:3.9892325089145880e-01:2.9371326717952346e+00:3.6461891867422180e-01:3.4976161568290252e+00 + CVs 20 + -1.8293360705447531e-01 3.6126206879039648e-02 8.0791281173208898e-02 + -3.4235138412010940e-01 5.5507834507893969e-02 1.7589356636833148e-01 + -5.1154035277129839e-01 8.2728208736309067e-02 2.7927908560251263e-01 + -6.9906632345058728e-01 1.3078890155218600e-01 3.7201276403317257e-01 + -9.0821495722727441e-01 1.9921829780966238e-01 4.4731681099569776e-01 + -1.1440786494957278e+00 2.8558138599039196e-01 4.9667724381607270e-01 + -1.4065639545932473e+00 3.8486529855915241e-01 5.0703617144066060e-01 + -1.6878667592027206e+00 4.8893123674962585e-01 4.6577927319624673e-01 + -1.9793095550218962e+00 5.8920743016709087e-01 3.6693990131559051e-01 + -2.2742834317011713e+00 6.7878921390837943e-01 2.0928527144504983e-01 + -2.5583116816361295e+00 7.5103535216886641e-01 -9.3778724803639246e-04 + -2.8057713189936861e+00 7.9566421408028509e-01 -2.2893879922857396e-01 + -3.0084045405428999e+00 8.0029649145080461e-01 -4.1015898876891310e-01 + -3.1876094344325248e+00 7.6092492455492722e-01 -5.0302966175051023e-01 + -3.3773675456025085e+00 6.8151512159859351e-01 -5.2041541733744789e-01 + -3.5913253318061287e+00 5.6364288441286603e-01 -4.7852423944684297e-01 + -3.7999406873633896e+00 4.1501233231127999e-01 -3.6541291476808979e-01 + -3.9653125616064626e+00 2.5489012499346253e-01 -1.7109829115969355e-01 + -4.3119368562549711e+00 6.4377082304261091e-02 -5.2867565721612442e-02 + id 13695 + loc 3.2233887910842896e-01 2.7765870094299316e-01 402 + blend 0.0000000000000000e+00 + interp 4.5114930068169073e-01:4.5114478918868395e-01:2.0965516492999525e-01:3.9404703865943108e-01:9.1429902451490908e-01:2.8923465479410582e-01:1.2354985341790641e+00:4.3826089251673062e-01:1.8869866695267667e+00:3.7248901404009394e-01:2.4851400834116499e+00:4.3125871114679110e-01:3.0181803159899419e+00:2.8277468300802089e-01:3.5076314944873328e+00 + CVs 20 + -1.7461555847758639e-01 3.6758511689139950e-01 2.1047500506968131e-01 + -3.5602166695517756e-01 7.1714604994475084e-01 3.9107656699341203e-01 + -5.6954649203755880e-01 1.0530976000093717e+00 5.3785519113551139e-01 + -8.2359747621607737e-01 1.3719406139270554e+00 6.6211562005308067e-01 + -1.1150567185914695e+00 1.6643767353616445e+00 7.8406132177198562e-01 + -1.4433049784257763e+00 1.9223658053913382e+00 9.1373290179362354e-01 + -1.8112130996363587e+00 2.1380562530873006e+00 1.0479050833934129e+00 + -2.2174691536619808e+00 2.3038186070524089e+00 1.1852259033394048e+00 + -2.6560046614100528e+00 2.4159235740926914e+00 1.3298827633594847e+00 + -3.1184339177851719e+00 2.4695916911349811e+00 1.4780014542086450e+00 + -3.5857583103442794e+00 2.4559289128695090e+00 1.6162175601395106e+00 + -4.0260940876206011e+00 2.3667843725392865e+00 1.7401379055100836e+00 + -4.4121082239296925e+00 2.2059654097866797e+00 1.8621924362647131e+00 + -4.7314319943044909e+00 1.9998436192026032e+00 2.0038540555282705e+00 + -4.9808710204358153e+00 1.7971723734907139e+00 2.1823111422237051e+00 + -5.1672121256980708e+00 1.6565909284660310e+00 2.3931502330317187e+00 + -5.3040944339709286e+00 1.6131802363898315e+00 2.5983911840390674e+00 + -5.4234312294930955e+00 1.6142368613349547e+00 2.7911342617730388e+00 + -5.5720846382593523e+00 1.5807313826869134e+00 3.0854385244573277e+00 + id 13696 + loc 7.1689319610595703e-01 6.7721688747406006e-01 382 + blend 0.0000000000000000e+00 + interp 4.1898226137601402e-01:3.2664307428321204e-01:3.2103429691627616e-01:3.0514896376984352e-01:1.4746189333474344e+00:4.1897807155340028e-01:2.0000062688176738e+00:2.9935210803060408e-01:2.5134274863956243e+00:3.2127457788930852e-01:3.4515452371362310e+00 + CVs 20 + 1.0232205890255213e+00 2.1185429704806844e-01 -4.9930018613450922e-01 + 1.7263375345529666e+00 2.7441541172621703e-01 -8.6560804626964472e-01 + 2.3449054879922802e+00 2.6351823794264717e-01 -1.2012613937700756e+00 + 2.9808750069837298e+00 2.0901042474439691e-01 -1.5589665492123035e+00 + 3.6137068306795923e+00 1.0436957262769364e-01 -1.9468605920536095e+00 + 4.2227500348154638e+00 -5.4408982871703149e-02 -2.3717184869365391e+00 + 4.7889389755754417e+00 -2.7380590326307575e-01 -2.8311290877699631e+00 + 5.3006112670382457e+00 -5.6649315432925440e-01 -3.3047507206468127e+00 + 5.7520031017873645e+00 -9.4133165380465789e-01 -3.7585133272804807e+00 + 6.1384102584853464e+00 -1.3865022454585785e+00 -4.1614002547977726e+00 + 6.4552785536918442e+00 -1.8803805615753206e+00 -4.4893251308422135e+00 + 6.6978847151384153e+00 -2.4031624681909753e+00 -4.7278274830420397e+00 + 6.8605072726935168e+00 -2.9433194897794674e+00 -4.8758176603690373e+00 + 6.9457041757761537e+00 -3.5065566751005357e+00 -4.9554769600363180e+00 + 6.9754816032285341e+00 -4.1147550265793811e+00 -5.0061442671409795e+00 + 7.0081478882247463e+00 -4.7525588941926404e+00 -5.0463214937731600e+00 + 7.0791040807197003e+00 -5.3479415793123923e+00 -5.0980751815352967e+00 + 7.1776658448826405e+00 -5.8389673998637335e+00 -5.1777579081685436e+00 + 7.3024554251768485e+00 -6.3384263838323545e+00 -5.2286038062443012e+00 + id 13697 + loc 1.0741888731718063e-01 2.6819017529487610e-01 401 + blend 0.0000000000000000e+00 + interp 5.6003592145222814e-01:4.1084706401905730e-01:1.0482195621951063e-01:2.6943322462642488e-01:8.6218818766014826e-01:4.0656905511175800e-01:1.1798899877460187e+00:5.6003032109301365e-01:1.9615855445302435e+00:3.2048186074986534e-01:2.7391678561158179e+00:3.7246765292592843e-01:3.1486259332083497e+00:3.3934551237895055e-01:3.8642069853104282e+00 + CVs 20 + -2.5651313472188392e-01 2.7118611773116230e-01 1.6346977508229249e-01 + -5.0051515684762971e-01 5.5590122615621584e-01 2.8056020023399492e-01 + -7.5375962037181499e-01 8.4527241896067307e-01 3.8651704637950163e-01 + -1.0297855213202529e+00 1.1315207871435076e+00 5.0311431220422509e-01 + -1.3371999315236107e+00 1.4072081510531471e+00 6.4476873456330441e-01 + -1.6803707350637378e+00 1.6592039455507481e+00 8.3080675053640984e-01 + -2.0536577841610590e+00 1.8673477459209966e+00 1.0813033735537712e+00 + -2.4393935940424720e+00 2.0076143433474702e+00 1.4070334442205714e+00 + -2.8126790823702317e+00 2.0600019993912237e+00 1.8020669209100662e+00 + -3.1498104409987411e+00 2.0153005148986902e+00 2.2439154169060669e+00 + -3.4368343658401690e+00 1.8762542150775223e+00 2.7022334820357323e+00 + -3.6694666302573404e+00 1.6518317922634553e+00 3.1506961650830143e+00 + -3.8430035137471124e+00 1.3555291876135853e+00 3.5726593127274686e+00 + -3.9455822526816955e+00 1.0086379583215532e+00 3.9648126892095581e+00 + -3.9561885629038884e+00 6.4044359521665961e-01 4.3382642777446865e+00 + -3.8429657444845615e+00 2.9218460305645994e-01 4.6965460393350877e+00 + -3.5920217085833652e+00 1.9470567719851117e-02 5.0143345809343414e+00 + -3.2418413803996016e+00 -1.3129469062267263e-01 5.2481506993452971e+00 + -2.9557308303404786e+00 -1.7900226407336683e-01 5.3657336588104103e+00 + id 13698 + loc 8.8294708728790283e-01 6.5993940830230713e-01 399 + blend 0.0000000000000000e+00 + interp 4.4373519359565827e-01:2.6444042983019073e-01:1.0228245010253323e-02:2.6470380157965340e-01:8.0573521289594496e-01:4.1630964685060234e-01:1.3361783337107564e+00:4.4373075624372232e-01:2.0003026669392261e+00:3.8022666064507660e-01:2.4456708543925072e+00:3.9316582629281066e-01:3.1342265997911967e+00:3.9384415976579873e-01:3.7076222795938900e+00 + CVs 20 + -2.2875763978888125e-01 1.9158097651043715e-01 3.4979398541545831e-02 + -4.7368960462729309e-01 4.1017664039051654e-01 2.3018172814691359e-02 + -7.2907047187252338e-01 6.4008746961062102e-01 -3.2528098373743264e-02 + -9.9241357513756956e-01 8.7088537325895832e-01 -1.3051927326651247e-01 + -1.2584644160030805e+00 1.0936866822787490e+00 -2.7290640956643170e-01 + -1.5218860931109883e+00 1.3013950263758154e+00 -4.5748233763729645e-01 + -1.7768317186197329e+00 1.4892516643751814e+00 -6.8108059777865670e-01 + -2.0176509256040105e+00 1.6549140599345713e+00 -9.4121850585400491e-01 + -2.2389023763709037e+00 1.7979953408034142e+00 -1.2376981591229694e+00 + -2.4313467424458359e+00 1.9158967669389608e+00 -1.5722454239423085e+00 + -2.5757304551671165e+00 1.9978751365340806e+00 -1.9345804324486160e+00 + -2.6552867780162797e+00 2.0336428248194869e+00 -2.2876366813612741e+00 + -2.6768152169844246e+00 2.0294424040530306e+00 -2.5940925244879249e+00 + -2.6594653723938038e+00 2.0010981366330256e+00 -2.8401663332735891e+00 + -2.6150686459871673e+00 1.9609731396081576e+00 -3.0247230326646006e+00 + -2.5491507048718387e+00 1.9043163604827162e+00 -3.1738676706338191e+00 + -2.4758326602835243e+00 1.8018038179347926e+00 -3.3311458837858194e+00 + -2.4215656189631458e+00 1.6301972175728263e+00 -3.5175901810107053e+00 + -2.4508875847650136e+00 1.3485523898134351e+00 -3.7678327900373807e+00 + id 13699 + loc 6.7143164575099945e-02 7.9218101501464844e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7805722812853230e-01:4.4117114780853101e-01:2.7358031978079067e-01:2.7653204959576350e-01:8.8642682655086402e-01:3.9118709623534731e-01:1.6129523823123948e+00:4.1850851849687676e-01:2.0088315472196818e+00:4.1959424577466697e-01:2.4532502840206041e+00:4.7805244755625104e-01:2.9945461455170728e+00:3.6179800725161759e-01:3.4240172128373509e+00:4.4584504371434863e-01:3.9834510926411753e+00 + CVs 20 + 1.0818154404595610e-01 2.3339597827023634e-01 -4.5426313346225641e-02 + 2.2299249443293315e-01 4.7056785869148221e-01 -1.2016434313366064e-01 + 3.4732903921156993e-01 7.0545617622271628e-01 -2.0787990326868877e-01 + 4.8465726927603997e-01 9.3733988070572261e-01 -3.0040804426795731e-01 + 6.2966582289524986e-01 1.1690600821305990e+00 -4.0176207623266869e-01 + 7.6962557461634473e-01 1.4041983765050614e+00 -5.1631679158743649e-01 + 8.8556519238821585e-01 1.6489662397141496e+00 -6.5240615694552950e-01 + 9.5733643034932647e-01 1.9043639883821259e+00 -8.2460696895231012e-01 + 9.7290110843590805e-01 2.1488139671172481e+00 -1.0518299799950528e+00 + 9.2878265963905182e-01 2.3279165533544983e+00 -1.3393405644777323e+00 + 8.2682576511232331e-01 2.3865926634756356e+00 -1.6568036670630462e+00 + 6.7532529484410819e-01 2.3097603565345639e+00 -1.9643481086318608e+00 + 4.9070835502497967e-01 2.1129716881399476e+00 -2.2465451887234114e+00 + 2.9619305365396897e-01 1.8186346681495613e+00 -2.5124998899901647e+00 + 1.2066050490131064e-01 1.4407588550029811e+00 -2.7883497922353091e+00 + 1.4885095326980902e-02 9.7399882960406248e-01 -3.1156093357119672e+00 + 1.0786713491530553e-01 4.1722409783865433e-01 -3.5195304442132747e+00 + 5.0345688360836105e-01 -7.9351492736854046e-02 -3.8847819310942859e+00 + 7.5812726928495822e-01 -3.0537032926996993e-01 -4.0432927487933235e+00 + id 13700 + loc 4.4997996091842651e-01 1.7526097595691681e-02 403 + blend 0.0000000000000000e+00 + interp 4.0442166882268848e-01:3.7587601407516519e-01:7.6025428454980615e-02:4.0441762460600028e-01:7.7287299104624019e-01:2.0800997348607966e-01:1.3688079285091561e+00:3.1976991774053087e-01:2.1385057944582302e+00:3.6852801024120224e-01:2.9589178572283030e+00:3.0778618782520656e-01:3.7683055389075588e+00 + CVs 20 + -2.2176791536086307e-01 2.8283158502022754e-01 8.2984186903482249e-03 + -4.6014059675939145e-01 5.5902264506675259e-01 4.2464564253080178e-02 + -7.1381882663404894e-01 8.3492744698784527e-01 8.7423668129968324e-02 + -9.8358891362727263e-01 1.0995562324338375e+00 1.3275771765480093e-01 + -1.2723261709303293e+00 1.3322851444078068e+00 1.7498456132787621e-01 + -1.5740789273424598e+00 1.5180236666445848e+00 2.2262937352836154e-01 + -1.8727893271998906e+00 1.6522755984184849e+00 2.9618220092216729e-01 + -2.1469169178668817e+00 1.7319402137482536e+00 4.0992502234166317e-01 + -2.3790614553215659e+00 1.7527610039067980e+00 5.6360651813371387e-01 + -2.5660250969256668e+00 1.7150426314339609e+00 7.5338227919448575e-01 + -2.7131021029085933e+00 1.6213903260018163e+00 9.7320926006008890e-01 + -2.8304570825718165e+00 1.4719658772213831e+00 1.2111340146773604e+00 + -2.9352437254784025e+00 1.2638207485289255e+00 1.4523589374633346e+00 + -3.0393403431586830e+00 9.9643264123896857e-01 1.6858969721408499e+00 + -3.1507271136906172e+00 6.6944912516358945e-01 1.9220287886577045e+00 + -3.3125923904808441e+00 2.7158682622549773e-01 2.1983011792558718e+00 + -3.6228326685944996e+00 -1.7753714028264100e-01 2.5309726773193528e+00 + -4.1095915267425651e+00 -5.7426011895404361e-01 2.8482829230068099e+00 + -4.4989772802313182e+00 -8.8684209139518055e-01 3.0988964987029588e+00 + id 13701 + loc 3.6439219117164612e-01 4.0323707461357117e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0077673596435442e-01:3.7218225623275841e-01:1.1091682569861439e-01:2.9190559201319488e-01:1.0009409425198890e+00:4.0077272819699478e-01:1.8450968482145575e+00:2.7564302281683789e-01:2.0894539541673747e+00:3.2574377861474774e-01:2.9005679695509254e+00:2.8282712808032751e-01:3.3345888376551236e+00 + CVs 20 + 1.5653220358437775e-02 3.0678772193451065e-01 -5.8056541615078519e-02 + 1.0920196968977058e-03 5.6578973075901906e-01 -1.2729183591183429e-01 + -2.2217539041636813e-02 7.9860024550318742e-01 -2.0161525924033574e-01 + -3.7043821173558200e-02 1.0162432665933554e+00 -2.7527766934140441e-01 + -3.7256597417044901e-02 1.2265469374215958e+00 -3.5102915025322334e-01 + -2.0158277470051833e-02 1.4475414544829346e+00 -4.3936262171884466e-01 + -1.3220902430315373e-03 1.7019117395393777e+00 -5.6179804610380080e-01 + -2.3207621590455307e-02 2.0025511591184562e+00 -7.4560181540733406e-01 + -1.5421538337035323e-01 2.3270815970984522e+00 -9.9718812407520541e-01 + -4.4229261990474433e-01 2.6069698923444511e+00 -1.2690601940868862e+00 + -8.6141036862943121e-01 2.7795311151510376e+00 -1.4806326423733926e+00 + -1.3278299404291225e+00 2.8272604709477047e+00 -1.5776128186882195e+00 + -1.7293590915639796e+00 2.7600333752527502e+00 -1.5788226630660103e+00 + -1.9092271562940497e+00 2.5993220453188752e+00 -1.5705019326853218e+00 + -1.6748125744243438e+00 2.3134372929471119e+00 -1.6271315485792155e+00 + -1.0754765045916250e+00 1.6346495682314113e+00 -1.6793963975053774e+00 + -7.4851885051704437e-01 1.8844773571370821e-01 -1.4819302437475186e+00 + -1.6807245873899355e+00 -1.2563109248428657e+00 -9.6373355237314173e-01 + -1.6117027520857548e+00 -1.1397242027647576e+00 -1.0436625002334385e+00 + id 13702 + loc 9.0165781974792480e-01 6.4741706848144531e-01 396 + blend 0.0000000000000000e+00 + interp 3.5771233382883910e-01:3.4635662493975222e-01:4.4998140418404520e-01:3.4223527764178224e-01:1.0132103777643977e+00:2.7033535296909245e-01:1.9231326924545173e+00:3.5372840696502950e-01:2.2405721113245205e+00:2.7259352905573664e-01:3.0114795271907324e+00:3.5770875670550084e-01:3.9344392724453074e+00 + CVs 20 + 8.5582771602197094e-01 2.3876761265571261e-01 -3.5201769125550164e-01 + 1.4306170168459031e+00 3.3006757309310969e-01 -5.8598534103690658e-01 + 1.9428190999677568e+00 3.6562605334121845e-01 -7.7243591806269574e-01 + 2.4881292742702366e+00 3.8775090284013403e-01 -9.3141755599048903e-01 + 3.0721105785427212e+00 3.9298949135926692e-01 -1.0651464481732464e+00 + 3.7006765896416276e+00 3.7378013996226611e-01 -1.1877709226896263e+00 + 4.3732731808643370e+00 3.1666079198378250e-01 -1.3221869620316311e+00 + 5.0780197574864019e+00 1.9969003387376283e-01 -1.4895649625012901e+00 + 5.7986846740221996e+00 3.7972169723854421e-04 -1.7103697445509527e+00 + 6.5131905373418117e+00 -3.1135736692928506e-01 -2.0037096025909218e+00 + 7.1722889465858159e+00 -7.5354979412763989e-01 -2.3772959276903514e+00 + 7.7152522064921492e+00 -1.3067029703640272e+00 -2.8119374429790893e+00 + 8.1146528782049216e+00 -1.9307725239077524e+00 -3.2738272647609237e+00 + 8.3768179443863016e+00 -2.5942404499610099e+00 -3.7373737448425786e+00 + 8.5170831123168007e+00 -3.2731062404945002e+00 -4.1837392452558690e+00 + 8.5520403710272301e+00 -3.9473286247107651e+00 -4.5886178318713453e+00 + 8.5010604383253838e+00 -4.6065876975781119e+00 -4.9261942636978144e+00 + 8.3907720240242405e+00 -5.2354298112032929e+00 -5.1842854835548824e+00 + 8.3232743159695382e+00 -5.7231082982374790e+00 -5.4012642230424204e+00 + id 13703 + loc 7.6661658287048340e-01 7.8141117095947266e-01 376 + blend 0.0000000000000000e+00 + interp 2.5140155345995713e-01:2.1081128614390687e-01:2.8073745070166556e-01:2.3602638597825226e-01:1.4220355212368427e+00:1.9956376675093360e-01:2.2226837001184454e+00:2.5139903944442255e-01:3.1368375705428502e+00 + CVs 20 + -3.7058151056980265e-02 4.0870992155031710e-01 5.1157608802089583e-01 + 1.3489609970266020e-02 7.1711445246876704e-01 9.9187188123568859e-01 + 1.5186336839373005e-01 9.0426052712342098e-01 1.4915445080601493e+00 + 3.4449917599750002e-01 1.0298845498949918e+00 2.0055608218048624e+00 + 5.3829765207784275e-01 1.1682982838656106e+00 2.5163734180166633e+00 + 6.7723483248101424e-01 1.3488099004338987e+00 3.0296166921801615e+00 + 7.1897500842945083e-01 1.5665827075606278e+00 3.5490564807055662e+00 + 6.4608071950166979e-01 1.8105756367453196e+00 4.0590875037515897e+00 + 4.6102573658087731e-01 2.0692809080381900e+00 4.5450249211666138e+00 + 1.7247116243021665e-01 2.3257627147545410e+00 5.0106740019755422e+00 + -2.1646819574758924e-01 2.5475116007234853e+00 5.4672996698357110e+00 + -7.0719935116873622e-01 2.6818000768105925e+00 5.9159790408948272e+00 + -1.2818304377972924e+00 2.6696658630312262e+00 6.3294562588251697e+00 + -1.8934566567901880e+00 2.4821044363513098e+00 6.6607052417943287e+00 + -2.4828389528481680e+00 2.1258062472131014e+00 6.8794118578192425e+00 + -2.9605509354583313e+00 1.6376451397898446e+00 7.0111765117010911e+00 + -3.2231856684468223e+00 1.1116384132148989e+00 7.1380006076478457e+00 + -3.2783211334011306e+00 6.9781436879946313e-01 7.3014682622249687e+00 + -3.2391127698360886e+00 3.9462991607621900e-01 7.4876986209792573e+00 + id 13704 + loc 1.7856700718402863e-01 5.9582918882369995e-01 375 + blend 0.0000000000000000e+00 + interp 4.8776356576684499e-01:3.3382036766411016e-01:8.5237761906728604e-02:4.0137520914323221e-01:9.3367322784257778e-01:2.9124983598805276e-01:1.2896143049023274e+00:4.8775868813118733e-01:2.1933534854574672e+00:3.1009373259265166e-01:3.0000101418307654e+00 + CVs 20 + -4.7892036950757877e-01 3.9202213745099629e-01 5.0749058231060185e-04 + -9.2736822174832556e-01 6.2542352297550841e-01 5.7326980108326236e-02 + -1.3991596785808047e+00 6.8942744669747125e-01 1.7242432614653236e-01 + -1.9264364910478746e+00 6.4971206045038055e-01 3.4525243486051022e-01 + -2.5066275786500283e+00 6.1086054102659870e-01 5.5475116613254793e-01 + -3.1332736508764061e+00 6.4632704856891299e-01 7.4715542005882551e-01 + -3.7896695154868336e+00 7.8200158902947381e-01 8.4587203686091739e-01 + -4.4283933781918483e+00 1.0154239446537887e+00 7.9487552763792946e-01 + -4.9822379512631532e+00 1.3166200582223262e+00 5.8622538749381470e-01 + -5.4071281826096342e+00 1.6272160347088973e+00 2.5237366513149406e-01 + -5.7042258955335843e+00 1.8867772991111731e+00 -1.6217540265915509e-01 + -5.8901893620620207e+00 2.0490797125601174e+00 -6.1179939647204928e-01 + -5.9792396722620786e+00 2.0925287159347556e+00 -1.0433966785672546e+00 + -5.9913692216644803e+00 2.0318144509427674e+00 -1.4098651486875062e+00 + -5.9511109962306206e+00 1.9142504947622281e+00 -1.6769619973040335e+00 + -5.8642875908379049e+00 1.8017259483240220e+00 -1.8510687637051189e+00 + -5.7244995854083722e+00 1.7085534410612233e+00 -1.9834911144795513e+00 + -5.6240314650862260e+00 1.5069980920983559e+00 -2.0751526239917588e+00 + -5.7537851700956297e+00 1.1373970340225026e+00 -2.0026454415758232e+00 + id 13705 + loc 8.9383697509765625e-01 3.1554365158081055e-01 395 + blend 0.0000000000000000e+00 + interp 3.4466864613614634e-01:2.6462069136469496e-01:2.7942185100857198e-01:3.3063014730480578e-01:9.9948572071269948e-01:3.3687221938008599e-01:1.7605588479259482e+00:3.3922512296572538e-01:2.1434217009593848e+00:2.9125796055264852e-01:2.9796153359896289e+00:3.4466519944968499e-01:3.8630997343496274e+00 + CVs 20 + -4.4487730081608701e-01 4.2979423415488482e-01 4.7886186538166831e-01 + -8.2380127777869383e-01 7.5407891524800363e-01 9.0065331022059913e-01 + -1.2039361135670927e+00 1.0149246104893750e+00 1.3022400055981789e+00 + -1.6175494807312512e+00 1.2210257118464187e+00 1.7030952967907551e+00 + -2.0556462753727454e+00 1.3611514754430323e+00 2.0922366783911501e+00 + -2.5010661879834610e+00 1.4313586556464764e+00 2.4633052129766133e+00 + -2.9411533400659762e+00 1.4298106513813520e+00 2.8157197771285514e+00 + -3.3690992084938656e+00 1.3502305372932868e+00 3.1458218888839928e+00 + -3.7743103977363983e+00 1.1881788676604705e+00 3.4423087995660926e+00 + -4.1430314898801957e+00 9.5035085279915199e-01 3.6933763050596768e+00 + -4.4686669489477389e+00 6.5387711372878465e-01 3.8919174969152688e+00 + -4.7552045938576333e+00 3.1890928689152620e-01 4.0347908495613281e+00 + -5.0119620112415131e+00 -3.7182948678545547e-02 4.1262091644600734e+00 + -5.2502722925279866e+00 -4.0443964904292784e-01 4.1801068922767204e+00 + -5.4788363371051680e+00 -7.7957657401241143e-01 4.2150054375241677e+00 + -5.6940284879042462e+00 -1.1494931007713376e+00 4.2419990927336384e+00 + -5.8893537779446152e+00 -1.4951504418600816e+00 4.2673771318373674e+00 + -6.0607239095722143e+00 -1.8242417165663274e+00 4.3009740814892536e+00 + -6.1538578610387891e+00 -2.1780415968086819e+00 4.3346414722075348e+00 + id 13706 + loc 3.8810902833938599e-01 1.3972263038158417e-01 1068 + blend 0.0000000000000000e+00 + interp 3.8437996309456801e-01:2.5467958756927589e-01:1.3127387117000022e-01:3.3731830351742637e-01:9.9552027149802447e-01:2.7121454656140870e-01:1.8157759032014926e+00:3.8437611929493709e-01:2.4483695275964124e+00:2.5750178358165154e-01:2.9975905223987604e+00 + CVs 20 + -1.7760961406700349e-01 2.5337683108800829e-01 -3.3427922070351940e-01 + -3.4699077101113174e-01 5.0722580781876581e-01 -6.4074163640847348e-01 + -5.2314282766284670e-01 7.5459137706248891e-01 -9.4022667390020254e-01 + -7.2185447118279333e-01 1.0015517939893217e+00 -1.2286203493809573e+00 + -9.5386930741873011e-01 1.2512672574985493e+00 -1.4858369174587358e+00 + -1.2226934661203619e+00 1.4963173492937856e+00 -1.6916892750015382e+00 + -1.5215108692150663e+00 1.7216781549368307e+00 -1.8328808743763769e+00 + -1.8380973480814475e+00 1.9137711207879957e+00 -1.9099436853683449e+00 + -2.1649259670984433e+00 2.0650737045516605e+00 -1.9343152264659274e+00 + -2.4991311626420316e+00 2.1691594155796001e+00 -1.9178950802871615e+00 + -2.8338392982757412e+00 2.2179556809793537e+00 -1.8662665249639947e+00 + -3.1554614322566419e+00 2.2057870296760487e+00 -1.7805504106461807e+00 + -3.4519089347997225e+00 2.1333117364644094e+00 -1.6664391833364536e+00 + -3.7189321622554088e+00 2.0039391850483570e+00 -1.5353571587108670e+00 + -3.9682455043472533e+00 1.8166517161116988e+00 -1.3901361333405491e+00 + -4.2420033965031925e+00 1.5541626160826438e+00 -1.2107397540516414e+00 + -4.5978747817255803e+00 1.1813590569798142e+00 -1.0252545714293284e+00 + -4.9556108960667764e+00 7.8706296457286817e-01 -1.0206116919131794e+00 + -4.9829370177895855e+00 7.0577197164037986e-01 -1.3000274598278563e+00 + id 13707 + loc 4.9120658636093140e-01 9.7868937253952026e-01 373 + blend 0.0000000000000000e+00 + interp 5.2551884119346282e-01:5.2073375638837904e-01:5.9162828169271164e-01:5.2551358600505094e-01:1.0511873719001723e+00:2.7609874848968335e-01:1.6010953879091394e+00:2.2811932134565743e-01:2.1302809266632847e+00:3.8910968706982413e-01:3.0633536393421634e+00:3.6064212371471921e-01:3.8820265067984749e+00 + CVs 20 + -3.6264712724415926e-01 3.4852855577776998e-01 -1.3022739779709414e-01 + -7.1002065506035295e-01 7.1134989386576097e-01 -2.7780634713959312e-01 + -1.0161280292937547e+00 1.1067079490292888e+00 -4.7367089779647575e-01 + -1.2584848826162505e+00 1.5268936389884387e+00 -7.4661985179324897e-01 + -1.4176897471094789e+00 1.9324286326795799e+00 -1.1098178390619116e+00 + -1.4920711295013271e+00 2.2784535849256358e+00 -1.5548349533095696e+00 + -1.4972372096757038e+00 2.5316376478199061e+00 -2.0563113605835017e+00 + -1.4584187817169756e+00 2.6736144452985871e+00 -2.5818487863923472e+00 + -1.4051005548744411e+00 2.7011070546454969e+00 -3.1066334412966441e+00 + -1.3669259251943700e+00 2.6371821457255988e+00 -3.6159162453892479e+00 + -1.3698986710191456e+00 2.5189452451229379e+00 -4.0954911258907423e+00 + -1.4283054981012198e+00 2.3833654770533528e+00 -4.5266584037802362e+00 + -1.5460962127229525e+00 2.2528580063250532e+00 -4.9091408507018812e+00 + -1.7408751314284103e+00 2.1180358872169656e+00 -5.2662754893756265e+00 + -2.0415236431258701e+00 1.9575555206693012e+00 -5.6089323276744620e+00 + -2.4529801772125461e+00 1.7841170777807887e+00 -5.9291601147667166e+00 + -2.9550901753110113e+00 1.6257576180652729e+00 -6.2328213074964225e+00 + -3.5556112297708165e+00 1.3875294501363886e+00 -6.4858955279937716e+00 + -4.0849942129115355e+00 9.5064485390469322e-01 -6.4543724791246380e+00 + id 13708 + loc 6.4051926136016846e-01 4.1142067313194275e-01 380 + blend 0.0000000000000000e+00 + interp 4.5751294740231147e-01:3.3613020889712281e-01:2.9057976907071770e-01:2.9308157137297397e-01:1.0606232201970551e+00:3.1023424549539597e-01:1.9091432075236860e+00:3.1019181991711309e-01:2.3280486707210599e+00:3.2910828978679352e-01:3.0012196220134473e+00:4.5750837227283747e-01:3.8087441451817314e+00 + CVs 20 + 6.5629274328122389e-01 2.8891809726359663e-01 5.9103762224807610e-01 + 1.2160480343689499e+00 4.6152932649662448e-01 1.0275078251439549e+00 + 1.7319694140284736e+00 5.8332492442456485e-01 1.4514474280313827e+00 + 2.2199246220372935e+00 6.6993262153053168e-01 1.9100978055902662e+00 + 2.6670866890778102e+00 7.0821895291555448e-01 2.3948747600618776e+00 + 3.0663290429494321e+00 6.8381122273351558e-01 2.8934105636816976e+00 + 3.4141669286896308e+00 5.8676328947906975e-01 3.3933521562956850e+00 + 3.7052901650132792e+00 4.1689804573918177e-01 3.8764387338451658e+00 + 3.9309321494547032e+00 1.9190061433471950e-01 4.3077106886145611e+00 + 4.0917809401244618e+00 -5.1947373628037141e-02 4.6558525641327613e+00 + 4.2003913358179643e+00 -2.7265319352255402e-01 4.9147725851638171e+00 + 4.2784430994321347e+00 -4.3722960453145721e-01 5.1058815038432694e+00 + 4.3513991422935190e+00 -5.5128520491005206e-01 5.2661502653605812e+00 + 4.4185890661329497e+00 -6.7784778440844295e-01 5.4045906577135625e+00 + 4.4627246709016806e+00 -8.7247386830918083e-01 5.4887467967038681e+00 + 4.4672377943611350e+00 -1.1397926898483268e+00 5.5190453963221326e+00 + 4.4115411476330557e+00 -1.4521145607948802e+00 5.5487084432319431e+00 + 4.3427422196795975e+00 -1.7644193979355718e+00 5.6170414399779887e+00 + 4.5499034935406701e+00 -1.9691210593888417e+00 5.6423029653497592e+00 + id 13709 + loc 4.0478903055191040e-01 8.1395649909973145e-01 415 + blend 0.0000000000000000e+00 + interp 2.9421147734562697e-01:2.3073755005824303e-01:6.2843081534516876e-01:2.8056242716274632e-01:1.9234388994135823e+00:2.9420853523085355e-01:2.3657615991316465e+00:2.7235010974041746e-01:3.0188441711284209e+00:2.6844110024521273e-01:3.7148844585036049e+00 + CVs 20 + 4.4856096726069361e-01 2.0704361479890071e-01 4.9061615055609492e-02 + 7.8601082456626303e-01 3.1302596933899812e-01 3.2102955523634347e-02 + 1.1019490669023482e+00 3.8651044248262556e-01 9.2592391696157961e-03 + 1.4295764514226978e+00 4.5464990692085827e-01 3.8545699921909149e-03 + 1.7674196942784257e+00 5.1737463120430172e-01 1.7571963500220056e-02 + 2.1146121271990168e+00 5.7564849365239801e-01 5.4295108817834614e-02 + 2.4678999623753430e+00 6.3073842372464517e-01 1.1888627432295384e-01 + 2.8217339134363049e+00 6.8381699072906321e-01 2.1368734583495297e-01 + 3.1720722008063191e+00 7.3587058288923934e-01 3.3844558856893636e-01 + 3.5144983216797385e+00 7.8764223878054040e-01 4.9095361799018167e-01 + 3.8318784367679015e+00 8.4247273515511023e-01 6.5902012698052514e-01 + 4.0930256975866870e+00 9.1046428242531063e-01 8.1408032235957006e-01 + 4.2808527408617838e+00 1.0017505480059290e+00 9.3963778706595624e-01 + 4.4289881976249887e+00 1.1062640432003492e+00 1.0547539155463737e+00 + 4.5880344986108437e+00 1.1992008170072843e+00 1.1737911561023768e+00 + 4.7579634414858694e+00 1.2735640292940238e+00 1.2985144581841526e+00 + 4.9154427304188406e+00 1.3350284063750086e+00 1.4378410419186898e+00 + 5.0571180833783362e+00 1.3796496728615968e+00 1.5943395160629996e+00 + 5.2373058047053789e+00 1.3375621339276906e+00 1.6039594611287031e+00 + id 13710 + loc 9.2908442020416260e-01 9.1196560859680176e-01 400 + blend 0.0000000000000000e+00 + interp 3.4727299183493926e-01:2.6335192659020756e-01:6.4172474965935045e-01:3.4726951910502091e-01:1.4335251432928762e+00:2.8966357956272853e-01:2.0982701150312395e+00:3.3050742073911055e-01:3.0015846530621584e+00:3.0134459210358988e-01:3.8732343763157076e+00 + CVs 20 + -2.3139336723085951e-01 2.5537746463109484e-01 -3.8068953070916589e-01 + -4.4539483764655352e-01 5.2192266484545291e-01 -7.5660273580963522e-01 + -6.8600972199746602e-01 8.0254715598211934e-01 -1.1372079365715786e+00 + -9.9708175889663853e-01 1.0740304666054277e+00 -1.5095760848974993e+00 + -1.4000793821805873e+00 1.2896600776758340e+00 -1.8416901757608608e+00 + -1.8760092059468525e+00 1.4069127453558790e+00 -2.1057016987118211e+00 + -2.3772887997146825e+00 1.4065099384399016e+00 -2.2989825920303728e+00 + -2.8588591268349495e+00 1.2937660045802652e+00 -2.4454548528446827e+00 + -3.2952426985442345e+00 1.0823395922834096e+00 -2.5712868981334678e+00 + -3.6657899745536002e+00 7.8369655781963965e-01 -2.6872011367184987e+00 + -3.9689755846144461e+00 4.2813479453114134e-01 -2.7951573172846480e+00 + -4.2547588065200648e+00 6.5455842540007136e-02 -2.9018717116518653e+00 + -4.5690562487142712e+00 -2.5882159107543168e-01 -3.0151655315760761e+00 + -4.9113505318227153e+00 -5.0952116981119233e-01 -3.1365301177415663e+00 + -5.2524765191354019e+00 -6.7946568269998608e-01 -3.2619710027246867e+00 + -5.5804126770743103e+00 -7.9877257371369692e-01 -3.4002984340709665e+00 + -5.9075447187267232e+00 -8.7896648583127779e-01 -3.5735892937343925e+00 + -6.2235792062135751e+00 -9.0801082905318653e-01 -3.7839151473628645e+00 + -6.4859590948417924e+00 -8.6913871838020884e-01 -4.0519304517990404e+00 + id 13711 + loc 7.1753180027008057e-01 1.3126380741596222e-01 407 + blend 0.0000000000000000e+00 + interp 3.9587129407571708e-01:3.1634347510672800e-01:9.9770311064464023e-01:3.4498976614477983e-01:1.6025595225226776e+00:3.5680171462514437e-01:2.0639507325338400e+00:3.3145758637115336e-01:3.0000164204124609e+00:3.9586733536277635e-01:3.4048603083244644e+00 + CVs 20 + -3.6888911662489021e-01 4.1637398547415422e-01 5.3208104067319330e-02 + -5.3334381939374442e-01 6.6757724276193264e-01 9.0094705088430718e-02 + -6.4890364554598268e-01 8.5207118275010951e-01 1.1486732293906608e-01 + -7.7891743281034009e-01 1.0132211121787016e+00 1.2794050572724866e-01 + -9.1629463971075298e-01 1.1434739273803145e+00 1.2313357892898595e-01 + -1.0528119176102091e+00 1.2332033600079002e+00 9.4533537283490648e-02 + -1.1767483081810550e+00 1.2710504098577475e+00 4.0544684529166083e-02 + -1.2752533227027203e+00 1.2527256532545850e+00 -2.9381375551282951e-02 + -1.3488043970349961e+00 1.1913500848310246e+00 -1.0116504604022200e-01 + -1.4128303198694674e+00 1.1013846497550603e+00 -1.7297773100695946e-01 + -1.4778603829294126e+00 9.8387320172059423e-01 -2.4876600639046265e-01 + -1.5449675928877336e+00 8.3531241925447630e-01 -3.2775979195666044e-01 + -1.6161325060215579e+00 6.5484606519635025e-01 -4.1015942095940255e-01 + -1.7022856753642248e+00 4.4392393560929211e-01 -5.0515029870164263e-01 + -1.8188862439576445e+00 2.0943393821426043e-01 -6.2360364428887993e-01 + -1.9741473354207439e+00 -3.2199928705205272e-02 -7.6338173163993162e-01 + -2.1656578778745925e+00 -2.6364293053380405e-01 -9.1344874682031230e-01 + -2.3853668902048493e+00 -4.7532797781856650e-01 -1.0743636978628655e+00 + -2.5412229446818606e+00 -6.7846292189974666e-01 -1.1873175519853822e+00 + id 13712 + loc 5.8348141610622406e-02 3.3773574233055115e-01 409 + blend 0.0000000000000000e+00 + interp 4.3606219342358038e-01:2.8257471081122670e-01:5.9570272188875362e-01:2.7359330642187818e-01:1.0655433154052725e+00:2.8886506653341343e-01:2.0566502282506240e+00:2.8173138925890368e-01:3.0052233581668339e+00:4.3605783280164617e-01:3.7487297015787835e+00 + CVs 20 + -1.8901656744766837e-01 2.3690399636846785e-01 -4.8534478287118465e-01 + -3.4854891668020271e-01 4.3877604670906639e-01 -9.1302294958390084e-01 + -4.9585172948622375e-01 6.2949574913143647e-01 -1.3280354440771258e+00 + -6.5156045193583800e-01 8.0825079594591531e-01 -1.7433031619779136e+00 + -8.3047844932968862e-01 9.6067968689558847e-01 -2.1492202136394463e+00 + -1.0383024785158197e+00 1.0774267666447259e+00 -2.5369215724102290e+00 + -1.2697579599536852e+00 1.1564017102125370e+00 -2.8982166985304483e+00 + -1.5150561621606105e+00 1.2032914851868233e+00 -3.2258722440003424e+00 + -1.7750443681430883e+00 1.2289451416344910e+00 -3.5243786367717047e+00 + -2.0643882607495736e+00 1.2332809049203641e+00 -3.8129868704694942e+00 + -2.3845541601688129e+00 1.1746396873542444e+00 -4.1117018231482376e+00 + -2.6817651702363916e+00 9.8070136386492313e-01 -4.4219735677178651e+00 + -2.9048400238333358e+00 6.5164607202420610e-01 -4.7258324002805896e+00 + -3.0849003639264123e+00 2.4376973078368636e-01 -5.0207273000381551e+00 + -3.2926370935386879e+00 -1.8125495931265956e-01 -5.3136581321491514e+00 + -3.5950377782100991e+00 -5.5240768184811362e-01 -5.6032367168381150e+00 + -4.0168739293056896e+00 -8.3658838790970025e-01 -5.8972543626539089e+00 + -4.5329283539485257e+00 -1.0878278785310269e+00 -6.2433313551507075e+00 + -5.1576075142719882e+00 -1.4297202606948489e+00 -6.7578019896769526e+00 + id 13713 + loc 1.9346570968627930e-01 6.6220092773437500e-01 393 + blend 0.0000000000000000e+00 + interp 4.0204633436638004e-01:2.6550544863802555e-01:2.3542703756479033e-01:2.7489224497932219e-01:1.0014477882350865e+00:2.4257546108762593e-01:1.9677482773839701e+00:3.4841966125757712e-01:2.9636119835485397e+00:4.0204231390303641e-01:3.4204732175855641e+00 + CVs 20 + -3.5296211636917385e-01 3.1349738427596224e-01 -7.0790606578760490e-02 + -6.9275028506490510e-01 6.3914966087124170e-01 -1.4717759848556980e-01 + -1.0197153683729350e+00 9.8670129990182120e-01 -2.3184826373485373e-01 + -1.3386240001442622e+00 1.3499772744585270e+00 -3.2422321027487672e-01 + -1.6647052950795977e+00 1.7164451861858843e+00 -4.2198437290872298e-01 + -2.0168895680267016e+00 2.0743009103985792e+00 -5.1810822063475825e-01 + -2.4143405340607931e+00 2.4102059963075684e+00 -6.0315406879579891e-01 + -2.8802747597145530e+00 2.7010848267115812e+00 -6.7397662744531894e-01 + -3.4383293352110940e+00 2.9168818161188130e+00 -7.4161443299148622e-01 + -4.0949332667428635e+00 3.0423334523018681e+00 -8.3590686650515478e-01 + -4.8231469498894901e+00 3.0766052158883315e+00 -9.9039994201205306e-01 + -5.5761427318195569e+00 3.0025756468235665e+00 -1.2061505480112444e+00 + -6.3157883608093774e+00 2.7854849586071051e+00 -1.4570210568599988e+00 + -7.0130738233925971e+00 2.4121180557959097e+00 -1.7364973334716385e+00 + -7.6365733556785536e+00 1.9159466673134886e+00 -2.0277834909329613e+00 + -8.1835595863722350e+00 1.3977644153156668e+00 -2.2065051685790249e+00 + -8.6929354343293816e+00 9.9176970515321616e-01 -2.1279194330087909e+00 + -9.1824951444302734e+00 7.1686273609538897e-01 -1.8789065165266767e+00 + -9.7389082062875172e+00 3.2695527029011151e-01 -1.8491012542924019e+00 + id 13714 + loc 7.5927776098251343e-01 8.4659832715988159e-01 378 + blend 0.0000000000000000e+00 + interp 3.4261080351385209e-01:2.6054640377277505e-01:1.5517979540797078e-01:2.3966902150274824e-01:1.0556621436829459e+00:3.3411935884390809e-01:1.8691216404161333e+00:2.6674163883653890e-01:2.1326569864175813e+00:2.3423941538788051e-01:2.9994584113122049e+00:3.4260737740581698e-01:3.6545269679283940e+00 + CVs 20 + 6.0807978050096922e-01 3.5227437858795391e-01 1.7008498973001662e-02 + 1.1138413700134027e+00 6.4397133446566501e-01 -1.1322000516416131e-02 + 1.6006512069475090e+00 9.1334027903139192e-01 -6.2550731254644720e-02 + 2.0974161700959448e+00 1.1921500093421586e+00 -1.0699812291859878e-01 + 2.5980681921727520e+00 1.4814563525192832e+00 -1.1292905406280440e-01 + 3.1064462939512474e+00 1.7615842788961760e+00 -5.5346954110022550e-02 + 3.6243934579871504e+00 2.0014231640550082e+00 7.9360670052864624e-02 + 4.1401641707240353e+00 2.1723253576520802e+00 2.9075347396746620e-01 + 4.6366754950863935e+00 2.2560544478170135e+00 5.6685086469230717e-01 + 5.1021154074628328e+00 2.2436867332638251e+00 8.9080701487830738e-01 + 5.5319190247393806e+00 2.1309344879755523e+00 1.2447812330955810e+00 + 5.9217503021787259e+00 1.9159026013265761e+00 1.6074271767209427e+00 + 6.2504190007336931e+00 1.6010377894170578e+00 1.9488691119966211e+00 + 6.4828191264029709e+00 1.2096750027293139e+00 2.2337598326422707e+00 + 6.6198959269246282e+00 7.7998869985741637e-01 2.4549703847282158e+00 + 6.7114037688309480e+00 3.2514387991640747e-01 2.6432234941877857e+00 + 6.8281247402590779e+00 -1.5398020745412211e-01 2.8271589772866648e+00 + 7.0146880019800673e+00 -6.2377613472426674e-01 2.9873712409276996e+00 + 7.2320486613497899e+00 -1.0155125760894510e+00 3.0867613446157511e+00 + id 13715 + loc 7.9994201660156250e-01 3.2204800844192505e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0873549888486077e-01:4.0699690726656723e-01:5.8534503829185680e-02:3.2877949364493186e-01:6.6909295999565654e-01:4.0873141152987191e-01:1.0121485048413119e+00:3.9588616200799370e-01:1.5166955334473293e+00:3.5361778216971584e-01:1.9875516154479032e+00:3.7457143947509708e-01:2.4238518460632554e+00:3.4950258026096359e-01:2.9917733947544223e+00:2.6770878453394359e-01:3.7192010843710728e+00 + CVs 20 + -7.8932608663402529e-02 2.1706938071595600e-01 2.3879457551359801e-01 + -1.8049175055527578e-01 4.0251435923309031e-01 4.4292476039232376e-01 + -2.9945723189147011e-01 5.6301007210448939e-01 6.1870408351273831e-01 + -4.3220119999366913e-01 7.0268174318382060e-01 7.6962863287214212e-01 + -5.9484350481847503e-01 8.2170968272114431e-01 8.9442718921619657e-01 + -8.0870151803395929e-01 9.2751631232268683e-01 9.8960381327550895e-01 + -1.0637778018022659e+00 1.0597819780090050e+00 1.0557881177293018e+00 + -1.3025278033511063e+00 1.2657574187447771e+00 1.0945537735216544e+00 + -1.4786774538386676e+00 1.5561370083681556e+00 1.1038736539536793e+00 + -1.5812336263904496e+00 1.9422142625059930e+00 1.0928808663857135e+00 + -1.5769822138222294e+00 2.4310715744120310e+00 1.1260220416449127e+00 + -1.4196942439581515e+00 2.9113894865414176e+00 1.2982477893934632e+00 + -1.1316854722537069e+00 3.2451060026622049e+00 1.5999546064495449e+00 + -7.5613950685641984e-01 3.3905821977356387e+00 1.9585858108424938e+00 + -3.3498191347508821e-01 3.3471608484173458e+00 2.3104087809384359e+00 + 9.9361803826203632e-02 3.1365450816881562e+00 2.6520661473019973e+00 + 5.1339431510102851e-01 2.7551457296664146e+00 3.0109282962654484e+00 + 8.3464739284453704e-01 2.1908736512881584e+00 3.3279289463928183e+00 + 9.4728378779383826e-01 1.8495458303953836e+00 3.3062587738880671e+00 + id 13716 + loc 1.1938803072553128e-04 6.6141468286514282e-01 412 + blend 0.0000000000000000e+00 + interp 5.3903816595766274e-01:4.4660671777040095e-01:9.4488587206110330e-01:5.3903277557600315e-01:1.3568287855064018e+00:4.3064519977339971e-01:1.9318079119328426e+00:4.5568421149104221e-01:2.0957571677015303e+00:2.6728582028086662e-01:2.9158031510178732e+00:3.7104261911132919e-01:3.3493863066522893e+00:3.1015226242111466e-01:3.9808779182885798e+00 + CVs 20 + 6.6984591849076824e-01 2.5334433092710257e-01 -7.7262095392129554e-02 + 1.1325180588851416e+00 3.8014161036609428e-01 -1.7514602475371430e-01 + 1.5462300529719974e+00 4.4911394586038211e-01 -2.7779182204482294e-01 + 2.0051320270911979e+00 4.9738533708188587e-01 -3.7576292872101386e-01 + 2.5015113220093421e+00 5.1635380838657352e-01 -4.5766100920240094e-01 + 3.0246624623663587e+00 5.0030444270250052e-01 -5.0945780504399973e-01 + 3.5642500706459037e+00 4.4699462200682016e-01 -5.1695604672606976e-01 + 4.1096835793212714e+00 3.5622417302846521e-01 -4.7047594173639212e-01 + 4.6409925473532869e+00 2.3236581120704991e-01 -3.6736274205323827e-01 + 5.1370347762270576e+00 8.4542762909880498e-02 -2.1193518403898193e-01 + 5.5869579593088066e+00 -8.3076308212679084e-02 -2.0766601370889926e-02 + 5.9985169298511520e+00 -2.8511874204536647e-01 1.7021125942710724e-01 + 6.3831555854790176e+00 -5.4006200298051588e-01 3.2110806244046741e-01 + 6.7346960517639491e+00 -8.3546974636360605e-01 4.2157581701632019e-01 + 7.0450978942688440e+00 -1.1414485196378064e+00 4.8848016708617981e-01 + 7.3174753749427106e+00 -1.4405458252755927e+00 5.3212690981518118e-01 + 7.5607063339420630e+00 -1.7265804691840572e+00 5.5468639129738528e-01 + 7.7827278849403889e+00 -1.9941058576650754e+00 5.6536222974123707e-01 + 7.9419565055365471e+00 -2.1218158201940316e+00 6.3171630548569391e-01 + id 13717 + loc 9.6489250659942627e-01 6.5526843070983887e-01 402 + blend 0.0000000000000000e+00 + interp 5.5432471543242379e-01:5.5431917218526949e-01:1.0304228083039535e-01:4.6651920252366491e-01:5.2264314105616339e-01:3.6707450497271116e-01:1.0084926686880509e+00:3.3849278847084713e-01:1.6614292897876575e+00:4.1054214324485672e-01:2.0111208237816722e+00:4.1320090346063237e-01:2.6170549496174593e+00:3.2393447969713624e-01:3.0722655948145139e+00:4.9812126353071062e-01:3.6183027657406956e+00 + CVs 20 + -1.7176265232788368e-01 6.3469827851014446e-02 -4.2234162825438230e-02 + -3.1469010053154162e-01 1.4580306707073984e-01 -1.0355890076207425e-01 + -4.3133725942492185e-01 2.3871522424955061e-01 -1.7699912895336686e-01 + -5.3440371789036234e-01 3.3774168352409317e-01 -2.6163623569346084e-01 + -6.2464479997401900e-01 4.4317677908311148e-01 -3.5778971308005103e-01 + -7.0818244025919164e-01 5.5478272462861866e-01 -4.6479095993544023e-01 + -7.9037414228138236e-01 6.7194334142180689e-01 -5.8025874536731104e-01 + -8.7033388776519094e-01 7.9417855382762903e-01 -7.0086679798190388e-01 + -9.4173604800738575e-01 9.2177748071996979e-01 -8.2462497243633726e-01 + -9.8860198157935508e-01 1.0513217373050008e+00 -9.5066886217344504e-01 + -9.9443803315952639e-01 1.1635936352946485e+00 -1.0717735757660622e+00 + -9.9483505244105086e-01 1.2444764830346766e+00 -1.1789272392812866e+00 + -9.5376356379323757e-01 1.3842657481086238e+00 -1.2808710875553753e+00 + -7.8844421786013186e-01 1.5654799566829969e+00 -1.4045856780123609e+00 + -5.5794699590180885e-01 1.7187624377546304e+00 -1.5993050850063142e+00 + -3.4569586485547166e-01 1.8187027371589044e+00 -1.8763918207612864e+00 + -1.8962989080559556e-01 1.8618804909076885e+00 -2.2220256943990888e+00 + -1.1611276841665075e-01 1.8496867733904907e+00 -2.6067612840764389e+00 + -1.1728127889467965e-01 1.8268548440336905e+00 -2.8367420820962352e+00 + id 13718 + loc 3.7448656558990479e-01 4.7111847996711731e-01 401 + blend 0.0000000000000000e+00 + interp 3.8230492127160126e-01:3.2728619835667178e-01:3.4188998060301101e-01:3.8230109822238856e-01:9.9951533717458285e-01:2.6658979572656943e-01:1.4455442448380311e+00:3.6831264420952259e-01:2.0000018423414110e+00:3.1026879634411969e-01:2.5937423125060453e+00:3.0137466338454866e-01:3.1071854595298198e+00:3.7025725523270231e-01:3.8816096505846800e+00 + CVs 20 + -2.2886401702723932e-01 1.6557315725513005e-01 1.9024768110694021e-01 + -4.5398553212873477e-01 3.6026474373333600e-01 3.3815078508126162e-01 + -6.5723230815732625e-01 5.7446645869287094e-01 4.6396607766815678e-01 + -8.3722101392562642e-01 8.0997334852395764e-01 5.8116028202815873e-01 + -1.0160469104206740e+00 1.0718311277725454e+00 6.8571088648348355e-01 + -1.2250478826261733e+00 1.3606013995805348e+00 7.8325679949381066e-01 + -1.4846521709453631e+00 1.6736038191714846e+00 9.0748306237007614e-01 + -1.7973469990644173e+00 1.9987081800142728e+00 1.1091320168251098e+00 + -2.1472096026170759e+00 2.3039413746751842e+00 1.4348688284703988e+00 + -2.5028855586289822e+00 2.5457644676075653e+00 1.9085989083812305e+00 + -2.8313459626773545e+00 2.6869031515744939e+00 2.5245282494259431e+00 + -3.1139177216469287e+00 2.6953857918728099e+00 3.2543552163997354e+00 + -3.3574070806098018e+00 2.5439218657896903e+00 4.0460629240797283e+00 + -3.5656409493356294e+00 2.2275782749933075e+00 4.8302648934303898e+00 + -3.7290421628907193e+00 1.7890344903970443e+00 5.5434185153476339e+00 + -3.9041407965158581e+00 1.3246481820472888e+00 6.1385895188066470e+00 + -4.2144055026846168e+00 9.5691395295544324e-01 6.5768898056313336e+00 + -4.6463347084052247e+00 7.2167600847272073e-01 6.8584616485846928e+00 + -4.9459747126045279e+00 3.8873048340102201e-01 7.1796901019902206e+00 + id 13719 + loc 2.8481453657150269e-01 9.2720645666122437e-01 380 + blend 0.0000000000000000e+00 + interp 4.6223533708715614e-01:4.4088860987245038e-01:4.8307830968100773e-01:4.6223071473378530e-01:1.0440424154523131e+00:4.5369320942576452e-01:1.8328791810009575e+00:2.6085443313860701e-01:2.1752303376094453e+00:3.4603613972118141e-01:3.0048022164010706e+00:3.7069365472403415e-01:3.9371495046311873e+00 + CVs 20 + -2.9160463546449999e-01 2.6658865869521076e-01 -5.8244443140479607e-01 + -5.7158064490707849e-01 4.6698760761851665e-01 -1.0738835414254126e+00 + -8.4248736957239012e-01 6.2976008444861264e-01 -1.5606299440388316e+00 + -1.1130820037276679e+00 7.6411534132679293e-01 -2.0784056527819641e+00 + -1.3805013821205525e+00 8.5664932815824024e-01 -2.6231615886325295e+00 + -1.6445582837162207e+00 8.8722456968557384e-01 -3.1830989827091023e+00 + -1.9001475856177112e+00 8.3564355562302484e-01 -3.7373161737520553e+00 + -2.1390985871338555e+00 6.9288580936226118e-01 -4.2594551798694154e+00 + -2.3660177921632575e+00 4.6550454584833023e-01 -4.7244733149780984e+00 + -2.5936662731257929e+00 1.6775735179534967e-01 -5.1060723700542088e+00 + -2.8173243320578258e+00 -1.8128572448013713e-01 -5.3746518376551542e+00 + -3.0201358783714802e+00 -5.5423193286581851e-01 -5.5160265236298738e+00 + -3.2147865369423330e+00 -9.2055653416392014e-01 -5.5717134327071314e+00 + -3.4516609666402283e+00 -1.2746467885533836e+00 -5.6510115529031815e+00 + -3.7642950538588016e+00 -1.6192299880085210e+00 -5.8306272524047493e+00 + -4.1569187338883236e+00 -1.9032848680872125e+00 -6.0839802886619037e+00 + -4.6121611092031962e+00 -2.0430410767054830e+00 -6.3130092494244963e+00 + -5.0530821685793095e+00 -2.0350066871673111e+00 -6.4537262691712076e+00 + -5.3872744511985644e+00 -2.1416039975075027e+00 -6.6574712817043995e+00 + id 13720 + loc 2.5174996256828308e-01 9.8639123141765594e-02 399 + blend 0.0000000000000000e+00 + interp 4.6517021567545291e-01:4.2785952437609626e-01:3.8398554291929254e-01:4.0194348824950765e-01:1.0567525171677115e+00:4.5091003635348720e-01:1.9235421976708631e+00:3.7163305756554105e-01:2.6656357723900395e+00:4.6516556397329617e-01:3.1533323315607342e+00:2.9276204932042649e-01:3.8179194192917842e+00 + CVs 20 + -1.3763573653595357e-01 3.4042135011326574e-01 2.3916269691751374e-01 + -3.1605862259255679e-01 6.7755209219952905e-01 4.4577563774071710e-01 + -5.3658470706614891e-01 1.0059310207169978e+00 6.2673681013669669e-01 + -7.9298531006975626e-01 1.3221829618033343e+00 7.9825249156971045e-01 + -1.0760137878214366e+00 1.6245893306306209e+00 9.8247842411861863e-01 + -1.3802647365680043e+00 1.9060247052530224e+00 1.1976670394726967e+00 + -1.7038883136660734e+00 2.1476932520376062e+00 1.4607133057986141e+00 + -2.0447779403405653e+00 2.3093158624467987e+00 1.7898226011291214e+00 + -2.4046886939958614e+00 2.3425884151608098e+00 2.1694741752029638e+00 + -2.7763288652123355e+00 2.2208913492120277e+00 2.5633668028748247e+00 + -3.1237301275620171e+00 1.9389468232616551e+00 2.9424414908914804e+00 + -3.4215649709231917e+00 1.5480306014983700e+00 3.2852774229996271e+00 + -3.7000825063453719e+00 1.1330663320281138e+00 3.5923789517232967e+00 + -4.0264210127429338e+00 7.8403596553894372e-01 3.8666783471436363e+00 + -4.4611015868734585e+00 6.0420643298443211e-01 4.0892430583025865e+00 + -5.0012045453074450e+00 6.7801632191291605e-01 4.1753721176666208e+00 + -5.5319211025609052e+00 1.0513979201124364e+00 3.9698735768663895e+00 + -5.8660920674117634e+00 1.5522903498158920e+00 3.5637583449542687e+00 + -6.3611278264524991e+00 1.6468788543354900e+00 3.5880549386760028e+00 + id 13721 + loc 7.1871656179428101e-01 8.4344708919525146e-01 382 + blend 0.0000000000000000e+00 + interp 4.1898226137601402e-01:3.0489871648955008e-01:5.0876671958262032e-01:2.7035739352183824e-01:1.1361642459877421e+00:3.3447453726248799e-01:1.9983997685434809e+00:2.5243095465625737e-01:2.7741817338776604e+00:2.9952671198766118e-01:3.4696965458602116e+00:4.1897807155340028e-01:3.9995975062892768e+00 + CVs 20 + 1.1058842783789062e+00 1.3877739989913224e-01 -5.4160643926258489e-01 + 1.8110333416546021e+00 1.7436455912615115e-01 -9.0325887655630654e-01 + 2.4191117811449332e+00 1.9604808266010418e-01 -1.2036239646686120e+00 + 3.0653126142204519e+00 2.4447321847775644e-01 -1.4938660961324708e+00 + 3.7612007776801337e+00 3.0269531770107783e-01 -1.7853607238410873e+00 + 4.5151703948681643e+00 3.4102282998339578e-01 -2.0920853072567831e+00 + 5.3202204452283031e+00 3.1975896330171855e-01 -2.4245784936713526e+00 + 6.1631812275032853e+00 1.9426779705769737e-01 -2.7868562853780561e+00 + 7.0326988160638724e+00 -9.0582939075314783e-02 -3.1695137219110951e+00 + 7.8926237976928508e+00 -5.7649244041443604e-01 -3.5480928339814302e+00 + 8.6830795115569863e+00 -1.2802828005976647e+00 -3.8931869032492976e+00 + 9.3201167651509245e+00 -2.1962446468349510e+00 -4.1806097850354149e+00 + 9.7224305354996954e+00 -3.2678651507258212e+00 -4.3923016395219863e+00 + 9.8829392262777418e+00 -4.3631427921691888e+00 -4.5424958486960056e+00 + 9.9151346927721296e+00 -5.3488511267578183e+00 -4.6809112205360552e+00 + 9.9495026397945026e+00 -6.1761268297066874e+00 -4.8550177201565790e+00 + 1.0026800701715336e+01 -6.8415737671197254e+00 -5.1119627452594409e+00 + 1.0112575766677008e+01 -7.3569958633950128e+00 -5.4745377113570939e+00 + 1.0207069609349958e+01 -7.9269684492453694e+00 -5.6826532616761583e+00 + id 13722 + loc 2.8003066778182983e-01 3.4320205450057983e-02 396 + blend 0.0000000000000000e+00 + interp 4.2778804568719003e-01:3.1643494528776522e-01:6.5709512824258354e-01:2.7039559542302977e-01:1.2785773567832996e+00:4.2778376780673316e-01:2.0074345634465827e+00:4.0772463120556252e-01:2.5152614680505692e+00:3.6371030955117079e-01:3.0138499635729672e+00:4.0542820127512125e-01:3.9999402449335264e+00 + CVs 20 + -2.8912141997601792e-01 2.0708430957149176e-01 -5.1649719699174146e-01 + -5.4324973704387647e-01 3.0419863093393640e-01 -9.1221037486614431e-01 + -7.8227107777120186e-01 3.5205793414695108e-01 -1.2902386372430339e+00 + -1.0031462022754156e+00 3.7231863481195077e-01 -1.6865161388838952e+00 + -1.1928515943879689e+00 3.5988864673834453e-01 -2.0914249645003307e+00 + -1.3443073514112975e+00 3.1455062513482090e-01 -2.4932053075180147e+00 + -1.4546054954435728e+00 2.3590698224666129e-01 -2.8811576548562070e+00 + -1.5219008849319160e+00 1.2541973203688817e-01 -3.2440148950300594e+00 + -1.5428101808556840e+00 -1.1499402985086338e-02 -3.5730358001331024e+00 + -1.5161907582619574e+00 -1.6622229560674207e-01 -3.8677686413370109e+00 + -1.4532390164632476e+00 -3.3212972336140845e-01 -4.1325112349007327e+00 + -1.3761685288179113e+00 -5.0665216226100163e-01 -4.3659481009586187e+00 + -1.3031315371458541e+00 -6.8582099029247456e-01 -4.5661036861664872e+00 + -1.2442695134846000e+00 -8.6785242192682044e-01 -4.7417938857248805e+00 + -1.2099158616184835e+00 -1.0494520683373800e+00 -4.9025342115088391e+00 + -1.2146128950853494e+00 -1.2125050153345192e+00 -5.0480691189176623e+00 + -1.2700864758253883e+00 -1.3463135374454458e+00 -5.1748259546007951e+00 + -1.3729361990805065e+00 -1.4866376750871604e+00 -5.2705670198248828e+00 + -1.4860044822773781e+00 -1.7886262512518663e+00 -5.2453884613656072e+00 + id 13723 + loc 1.6896642744541168e-01 4.0773510932922363e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4430468778749577e-01:3.6333485209233285e-01:1.8292038875265182e-01:2.6778866524866107e-01:8.9857014324479934e-01:3.9760793950378437e-01:1.6530907321559800e+00:3.2769888659571617e-01:2.0805186249027150e+00:3.5328690748612818e-01:2.7807938358399311e+00:2.8190801429317153e-01:3.1083609114570465e+00:4.4430024474061791e-01:3.9645262882509487e+00 + CVs 20 + 9.6333063040317496e-02 3.3986067574526940e-01 -4.6334545632392407e-02 + 1.2716878926910624e-01 6.2576906513535335e-01 -9.6755509744361201e-02 + 1.3010738430148444e-01 8.9504556028277715e-01 -1.4896438759863978e-01 + 1.2535557778787926e-01 1.1603237078732662e+00 -2.0060009239160304e-01 + 1.1056058717156569e-01 1.4175018214563688e+00 -2.5575682434355196e-01 + 8.3618299776056171e-02 1.6655448354644722e+00 -3.1913318368001842e-01 + 3.5430694451466960e-02 1.9070676469487400e+00 -3.9779045437925947e-01 + -5.5729379042244176e-02 2.1400261852071631e+00 -4.9951450582226897e-01 + -2.2166839374296310e-01 2.3406689851889788e+00 -6.2083270940554880e-01 + -4.7497529453941356e-01 2.4604109013025162e+00 -7.3658616734550320e-01 + -7.8540680657151107e-01 2.4555955620830185e+00 -8.1182451419430879e-01 + -1.0949162752174426e+00 2.3115043310434555e+00 -8.2397475232240402e-01 + -1.3506030707420433e+00 2.0504782569910396e+00 -7.9027229788002840e-01 + -1.5223823165211336e+00 1.7283601035424643e+00 -7.5901566733172321e-01 + -1.5982956080767139e+00 1.4223837864412356e+00 -7.6227967582921541e-01 + -1.5885985894797638e+00 1.1617923386718807e+00 -7.9001563781551054e-01 + -1.5586468181227742e+00 8.5548594627136088e-01 -7.9544220472818639e-01 + -1.7026039091051033e+00 5.7504749965577162e-01 -7.5004332036910426e-01 + -1.7052628163240671e+00 7.7444879657200627e-01 -8.7458508774244703e-01 + id 13724 + loc 1.1168795824050903e-01 9.5151531696319580e-01 415 + blend 0.0000000000000000e+00 + interp 2.9642122412273603e-01:1.7143488831943982e-01:5.3860535516806318e-01:1.7230184646532029e-01:9.8952790124384538e-01:1.6301641854503471e-01:1.3119435485414888e+00:1.5893693549811450e-01:2.7156690648396338e+00:2.1103534473485197e-01:3.1460037737398947e+00:2.9641825991049481e-01:3.9298264620241183e+00 + CVs 20 + 4.5567684902703098e-01 2.6018103756272803e-01 1.7608535290898258e-01 + 7.8863182433242907e-01 4.2662889303003793e-01 2.9071998479543798e-01 + 1.0821024846108853e+00 5.5604826134493324e-01 4.1120689932123866e-01 + 1.3835993530861057e+00 6.7899259840117199e-01 5.7725373931270707e-01 + 1.6858308549136123e+00 7.8686817766644435e-01 7.9073630927717820e-01 + 1.9769566154254663e+00 8.7106852423558379e-01 1.0515527231132222e+00 + 2.2457975572020477e+00 9.2530999224056965e-01 1.3577712349379840e+00 + 2.4848578066310369e+00 9.4582480068401620e-01 1.7032910575070590e+00 + 2.6876642545751710e+00 9.3159970748307697e-01 2.0756841879487653e+00 + 2.8512663378116674e+00 8.8474976313224607e-01 2.4601025806917241e+00 + 2.9964947707043863e+00 8.0364780587990370e-01 2.8551015105536308e+00 + 3.1827038511261927e+00 6.6881547242119543e-01 3.2792740578506665e+00 + 3.4715615296539362e+00 4.4882257068687048e-01 3.7226982421853463e+00 + 3.8546985871656716e+00 1.4348789795193539e-01 4.1082032304617639e+00 + 4.2646531984979701e+00 -2.0664998727619155e-01 4.3736495432978861e+00 + 4.6693011822280193e+00 -5.7484329695004854e-01 4.5169953410295527e+00 + 5.0715226843719901e+00 -9.5472595935646787e-01 4.5451169916887064e+00 + 5.4607379640073326e+00 -1.3275688726459083e+00 4.4603738179803791e+00 + 5.6412753309422152e+00 -1.5001703994132805e+00 4.4094864151274447e+00 + id 13725 + loc 6.5433835983276367e-01 7.4945169687271118e-01 374 + blend 0.0000000000000000e+00 + interp 4.0772825085492442e-01:3.0058824226713127e-01:7.6903498500516898e-01:3.7216373322872826e-01:1.7869127659573647e+00:3.0617149586842246e-01:2.9045629541648346e+00:4.0772417357241592e-01:3.7771991759194199e+00 + CVs 20 + -6.5670668941188426e-01 3.3001193708212834e-01 -2.3652570215670068e-01 + -1.1427994442925473e+00 5.4812393491793854e-01 -3.9094716483765540e-01 + -1.5897750095322298e+00 7.1577082258666525e-01 -5.1558071091328150e-01 + -2.0441780046248792e+00 8.7101436318611791e-01 -6.3870662521300359e-01 + -2.4981309106029079e+00 1.0319514980064721e+00 -7.7149234487844787e-01 + -2.9554363602744935e+00 1.2049022961061411e+00 -9.2823809250685052e-01 + -3.4308063576755723e+00 1.3678316171291476e+00 -1.1270267832029190e+00 + -3.9266481908201927e+00 1.4810469112749733e+00 -1.3865460805783165e+00 + -4.4229998810205986e+00 1.5086191319017286e+00 -1.7211818990613823e+00 + -4.8898784112029023e+00 1.4283615609136506e+00 -2.1272730755243421e+00 + -5.3096648573050080e+00 1.2293124022798632e+00 -2.5770412730294954e+00 + -5.6744852200964333e+00 9.0561686037040001e-01 -3.0252976296472389e+00 + -5.9630750170607154e+00 4.5692284428269847e-01 -3.4193918013813844e+00 + -6.1547903983225112e+00 -1.0566823831836825e-01 -3.7183594615671369e+00 + -6.2718030769638577e+00 -7.5251578079448311e-01 -3.9252381129038909e+00 + -6.3797692286416279e+00 -1.4602329627281732e+00 -4.0865910022276717e+00 + -6.5485852108893354e+00 -2.2061519832272327e+00 -4.2228741988658705e+00 + -6.7963447689697318e+00 -2.9141551049009000e+00 -4.2971301890516873e+00 + -7.0028511917078680e+00 -3.4542825073337728e+00 -4.2735217570303226e+00 + id 13726 + loc 9.4924986362457275e-01 1.5098848938941956e-01 373 + blend 0.0000000000000000e+00 + interp 3.9343441375219673e-01:3.9343047940805925e-01:3.0100871816621932e-01:1.5901988311811618e-01:1.0890906912869778e+00:2.8448866723089922e-01:2.0044457450079904e+00:2.3911254377618849e-01:2.8076393429728941e+00:2.0924760625071967e-01:3.3229296146963301e+00:2.7371188745898728e-01:3.9850750943737143e+00 + CVs 20 + 1.6945832845909120e-01 3.6830087053079469e-01 1.3178353103487647e-01 + 4.2381826916493404e-01 7.2486427269944220e-01 2.5645047198730320e-01 + 7.9223505518193349e-01 9.8195936101211034e-01 3.5559848909480946e-01 + 1.2267969776644883e+00 1.1212235189230570e+00 4.1097380481321782e-01 + 1.6659846937767337e+00 1.2115198723622354e+00 4.1786307904662134e-01 + 2.0839185098491826e+00 1.3134007905279765e+00 4.0361616779412046e-01 + 2.4866047402139362e+00 1.4671823268553119e+00 4.0991502000062252e-01 + 2.8744492761510747e+00 1.6903487680774414e+00 4.6348712315689794e-01 + 3.2312072900361120e+00 1.9865005253641190e+00 5.8178331214037748e-01 + 3.5434938357164261e+00 2.3367698246750006e+00 7.7056129557439923e-01 + 3.8153242670366248e+00 2.6965125260259408e+00 1.0222625952611120e+00 + 4.0517545487834585e+00 3.0196731126811209e+00 1.3319949862577984e+00 + 4.2492695060402541e+00 3.2709477802841591e+00 1.7116057428159122e+00 + 4.3927857628887619e+00 3.4148057321633725e+00 2.1787271778450359e+00 + 4.4606151525399840e+00 3.4167997901039415e+00 2.6875233541498504e+00 + 4.4686360776873775e+00 3.3462947400529748e+00 3.0768259047443363e+00 + 4.4051953986567467e+00 3.3917362882671038e+00 3.2775391881222218e+00 + 4.2893748128250770e+00 3.4091385002356924e+00 3.4223482114275354e+00 + 4.4631020659613494e+00 3.1439198221421183e+00 3.4626292952613111e+00 + id 13727 + loc 5.4293662309646606e-01 7.5952547788619995e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8501953898685063e-01:4.6627924160097345e-01:1.3117332539759607e-01:4.3030381119193029e-01:6.7178110707344496e-01:3.8134628655187697e-01:1.0680223726917590e+00:3.7787693513639120e-01:1.8947708333319691e+00:3.0955769038475028e-01:2.2361787022815660e+00:4.1696438528327284e-01:2.8603685146757503e+00:4.8501468879146076e-01:3.0603744917747240e+00:3.6135150363589869e-01:3.9044827450744064e+00 + CVs 20 + 2.4933959088671989e-01 2.1783241758432495e-01 -2.0137557085642016e-01 + 4.7096524715570653e-01 4.3870830791163540e-01 -3.9873480292564573e-01 + 6.8693890152693315e-01 6.2041859962324430e-01 -5.6597981388868279e-01 + 9.0524476709704293e-01 7.4150818767853865e-01 -6.9647473076626909e-01 + 1.1360511951698784e+00 8.2248136319919873e-01 -8.0437360697932581e-01 + 1.3992586429634903e+00 9.0466334588280550e-01 -9.0746428022956738e-01 + 1.6902127244481924e+00 1.0260149935773684e+00 -1.0116657937798015e+00 + 1.9728765825359620e+00 1.2078131704708999e+00 -1.1108621168655921e+00 + 2.2044606844728003e+00 1.4377623292426556e+00 -1.1974864879461915e+00 + 2.3649150692009786e+00 1.6802123972477336e+00 -1.2705443936211012e+00 + 2.4625218525768711e+00 1.9201731780272384e+00 -1.3412402815345104e+00 + 2.4920297317910443e+00 2.1593500222754951e+00 -1.4498632778147365e+00 + 2.4449681682245208e+00 2.3752442269078227e+00 -1.6147139151952175e+00 + 2.3283176655038824e+00 2.5560456563434970e+00 -1.8133194205381082e+00 + 2.1477587728736660e+00 2.6929372242616680e+00 -2.0235941662050232e+00 + 1.9022044866289771e+00 2.7684341230742828e+00 -2.2752848300621205e+00 + 1.6136928092295311e+00 2.7154521375659648e+00 -2.6263429485481846e+00 + 1.3922245276755678e+00 2.4835860263154679e+00 -3.0198808489569609e+00 + 1.3460835893062106e+00 2.3846400393150615e+00 -3.1289684414936803e+00 + id 13728 + loc 9.5228171348571777e-01 5.4505777359008789e-01 375 + blend 0.0000000000000000e+00 + interp 4.1258576297799043e-01:3.6231863083587845e-01:1.6762151582090934e-02:2.6627690444915969e-01:9.9775718441039651e-01:2.1277441414507764e-01:2.0117048475701775e+00:3.8172684383998023e-01:2.9558083275135676e+00:4.1258163712036067e-01:3.7576407098815663e+00 + CVs 20 + -5.2167463398174108e-01 3.8511116739502038e-01 -1.1137681435225757e-01 + -1.0130504688613167e+00 6.4277617799435494e-01 -1.3651484460251195e-01 + -1.5384409429884383e+00 7.4924082751708121e-01 -7.2533381686046894e-02 + -2.1169577962468926e+00 7.7318908076545956e-01 5.9586722216522614e-02 + -2.7268858180105418e+00 8.0974129315042342e-01 2.1199751810032164e-01 + -3.3507715137526679e+00 9.0559573777458624e-01 3.1458356171716328e-01 + -3.9724780493368161e+00 1.0610025511230912e+00 3.0885668076753148e-01 + -4.5683447211686286e+00 1.2671461738974974e+00 1.6961062864075127e-01 + -5.1149027697991123e+00 1.5123939125802373e+00 -1.0529691388164286e-01 + -5.5966760487339764e+00 1.7720132781042335e+00 -5.0429486493169617e-01 + -6.0131670913432478e+00 2.0086744602908597e+00 -1.0169472707972518e+00 + -6.3613857528491318e+00 2.1658401782345402e+00 -1.6434410414723557e+00 + -6.6155941269692047e+00 2.1706023283928118e+00 -2.3721739570761513e+00 + -6.7277397229462688e+00 1.9694598355827413e+00 -3.1492719495072690e+00 + -6.6601554016140030e+00 1.5488861872214028e+00 -3.8750233077663880e+00 + -6.4888811014023124e+00 9.2364965668984889e-01 -4.4078674859887110e+00 + -6.4614767824165833e+00 1.3933528499040904e-01 -4.6055021346179768e+00 + -6.7142370164827749e+00 -5.8320531374219042e-01 -4.4527848434494519e+00 + -6.7941580856336881e+00 -1.1512579285284583e+00 -4.5015026337018584e+00 + id 13729 + loc 3.8245940208435059e-01 6.9698649644851685e-01 400 + blend 0.0000000000000000e+00 + interp 4.3668854189857786e-01:3.2769768474019123e-01:1.7949230716713149e-01:4.3668417501315893e-01:9.3560727281709954e-01:4.3064917827601829e-01:1.5299612462146330e+00:2.8172811925940011e-01:2.4521439665006612e+00:4.0091495292399915e-01:3.1647064601416073e+00:3.8900104610545616e-01:3.8013505591975729e+00 + CVs 20 + -1.8039996026442348e-01 3.4693259544106492e-01 -1.8601545224609106e-01 + -3.4336117536484256e-01 6.7398801829456845e-01 -3.7158322302273250e-01 + -4.8693386249044995e-01 9.8162438173582245e-01 -5.7994510031940505e-01 + -6.1603650095999496e-01 1.2707517465410565e+00 -8.1896207001071175e-01 + -7.3707695123844674e-01 1.5397654384888104e+00 -1.0872006810611996e+00 + -8.5442894805600167e-01 1.7872997899711129e+00 -1.3827903824814309e+00 + -9.6922265119146578e-01 2.0120838887415693e+00 -1.7060926219486838e+00 + -1.0792133221110072e+00 2.2109391722574112e+00 -2.0607742560377118e+00 + -1.1787567360358830e+00 2.3775652635545410e+00 -2.4517277987524109e+00 + -1.2586055707776842e+00 2.5034026730879231e+00 -2.8816659685030950e+00 + -1.3076671234048476e+00 2.5794002390505844e+00 -3.3492068996808433e+00 + -1.3227680357730449e+00 2.5986095199573471e+00 -3.8471283306780761e+00 + -1.3161869381468509e+00 2.5564738558089610e+00 -4.3673556605497117e+00 + -1.3112872512425171e+00 2.4399157508077018e+00 -4.9107848179085947e+00 + -1.3395608560204493e+00 2.2265975572301122e+00 -5.4657993776300566e+00 + -1.4323433984940630e+00 1.9165914730368383e+00 -5.9943701511421246e+00 + -1.6049584281106200e+00 1.5476771653641239e+00 -6.4691879255486420e+00 + -1.8448223232950185e+00 1.1590833049960159e+00 -6.8911455701486082e+00 + -2.0467264264759191e+00 8.0360838076738306e-01 -7.2729337046883558e+00 + id 13730 + loc 3.3778712153434753e-01 4.7238031029701233e-01 409 + blend 0.0000000000000000e+00 + interp 3.8753475911797780e-01:2.9884825342567706e-01:5.9434693532396388e-03:3.8753088377038664e-01:6.4638325717514422e-01:2.5500743497677913e-01:1.2741655212330283e+00:3.2035971873112745e-01:2.0042992718851469e+00:2.8694052193579189e-01:2.6650162379735249e+00:2.8710678353532115e-01:3.1690613691688299e+00 + CVs 20 + -1.7164446114433918e-01 2.0759381495046114e-01 -4.1276659973751634e-01 + -3.1903270252694926e-01 3.6303653122206381e-01 -7.4765522136463802e-01 + -4.3589520941071674e-01 4.9990747689069004e-01 -1.0692580124674318e+00 + -5.1887857225909972e-01 6.3110952236353701e-01 -1.3973250248531728e+00 + -5.7312894000274350e-01 7.5286074752889520e-01 -1.7263338291100399e+00 + -6.0529396653773493e-01 8.6539057279833875e-01 -2.0532769809637945e+00 + -6.2153113961409590e-01 9.7746174101788907e-01 -2.3815907545128887e+00 + -6.2695531986203923e-01 1.0986054797442726e+00 -2.7228239425109990e+00 + -6.2436760752971632e-01 1.2254898104246588e+00 -3.0914683436723802e+00 + -6.1532766520112392e-01 1.3443960626061546e+00 -3.4988912334254563e+00 + -5.9936713068358904e-01 1.4404638315165743e+00 -3.9543456639465329e+00 + -5.7175522943791524e-01 1.4956440264390649e+00 -4.4645783247366309e+00 + -5.2319202208705895e-01 1.4857441357675436e+00 -5.0249331843208900e+00 + -4.4021803737127968e-01 1.3874549361304611e+00 -5.6144601354509982e+00 + -3.0186826570007830e-01 1.1874127148305047e+00 -6.2024589511759700e+00 + -8.3127285365690806e-02 8.8165386345832042e-01 -6.7510987368485980e+00 + 2.2431188228198223e-01 4.7926330118126304e-01 -7.2043843975150619e+00 + 5.9436698931861875e-01 1.8895364973362749e-02 -7.4943276845546514e+00 + 9.5720182696874700e-01 -3.9418876404502123e-01 -7.5412290369596127e+00 + id 13731 + loc 4.9164029955863953e-01 5.7078087329864502e-01 395 + blend 0.0000000000000000e+00 + interp 4.4383860870476155e-01:3.4601622029019902e-01:1.3359144144731161e-04:4.2485150833850233e-01:9.4597680319099198e-01:2.8945168484335365e-01:1.2314204470808086e+00:3.6143803228693722e-01:1.9270395624798473e+00:4.4383417031867450e-01:2.1716038368030688e+00:4.1789992872981974e-01:2.8196017303525638e+00:2.5772827975389617e-01:3.0510010180485359e+00 + CVs 20 + 4.7286714612697028e-01 6.2023956649805978e-02 -4.2504683039679159e-01 + 8.7530196036589325e-01 5.8260426589539227e-02 -7.7225525169929132e-01 + 1.2572884290863637e+00 3.3219354144763291e-02 -1.0849531518451379e+00 + 1.6342356687578696e+00 1.7309093468883541e-03 -1.3752971119514501e+00 + 1.9992996336766735e+00 -3.6326348333546976e-02 -1.6406795176497435e+00 + 2.3468920414163486e+00 -8.0365396343822670e-02 -1.8841966592488875e+00 + 2.6719321880036246e+00 -1.3127441209228530e-01 -2.1097070575262356e+00 + 2.9684464449087815e+00 -1.9335948219516608e-01 -2.3170413421645066e+00 + 3.2313943014479456e+00 -2.7246572497709964e-01 -2.5059334372799995e+00 + 3.4582107213805120e+00 -3.7396043201347173e-01 -2.6817497539974813e+00 + 3.6497535177306961e+00 -5.0253600181917712e-01 -2.8541734744817813e+00 + 3.8118982975300377e+00 -6.6280085283082002e-01 -3.0328811836687182e+00 + 3.9514863987191546e+00 -8.6017550696428202e-01 -3.2231374408999409e+00 + 4.0701123333843467e+00 -1.1004975587045700e+00 -3.4207799566013772e+00 + 4.1639068001284345e+00 -1.3837204243856724e+00 -3.6151668401179533e+00 + 4.2276821537690434e+00 -1.7002638604927927e+00 -3.7882572906224050e+00 + 4.2593363701349141e+00 -2.0343759373510455e+00 -3.9177292466949063e+00 + 4.2670165318757682e+00 -2.3743091770381155e+00 -3.9941949687658140e+00 + 4.3256232156292800e+00 -2.7862242677664550e+00 -4.1123891914255095e+00 + id 13732 + loc 1.9253300130367279e-01 2.4283780157566071e-01 1068 + blend 0.0000000000000000e+00 + interp 4.1071677103232934e-01:2.6537145082953573e-01:1.3000990793689249e-01:4.1071266386461902e-01:1.0310696739524807e+00:2.6473324439142726e-01:1.5513439317836266e+00:3.2774086458701951e-01:2.1555150272956967e+00:2.6845714665138054e-01:3.0075848281830382e+00:3.1391712597586313e-01:3.7413850235736916e+00 + CVs 20 + -2.5257688554804103e-01 3.3402744455363487e-01 -2.5160422583257991e-01 + -4.9518729920881160e-01 6.6363209972237114e-01 -4.9264984185274896e-01 + -7.6716595875239157e-01 9.8973976547956666e-01 -7.1469989726705674e-01 + -1.0833820193996864e+00 1.3036694902198165e+00 -9.0767653121383407e-01 + -1.4458803824651445e+00 1.5893935087751270e+00 -1.0628237448272329e+00 + -1.8506641112392244e+00 1.8273390822662285e+00 -1.1740645046465121e+00 + -2.2865244300263821e+00 1.9988967637963213e+00 -1.2400368066356473e+00 + -2.7361706236591474e+00 2.0897974198072267e+00 -1.2644254518688807e+00 + -3.1781352067106807e+00 2.0922959918364317e+00 -1.2542989366662918e+00 + -3.5893954119628586e+00 2.0067262836136424e+00 -1.2197382729274990e+00 + -3.9501526635488866e+00 1.8426555077851676e+00 -1.1738637658821471e+00 + -4.2513331260247460e+00 1.6164152298427854e+00 -1.1303395211988525e+00 + -4.4905286848614141e+00 1.3458432089381644e+00 -1.0992850558889449e+00 + -4.6628123299350301e+00 1.0512346508844930e+00 -1.0853699192104396e+00 + -4.7602892740128686e+00 7.5781458275756519e-01 -1.0862934868227725e+00 + -4.7769242138826238e+00 4.9619356452051999e-01 -1.0920290093370086e+00 + -4.7206715510852515e+00 2.9398506684361281e-01 -1.0902391829673173e+00 + -4.6224525940612038e+00 1.2145573214349170e-01 -1.0861157224200522e+00 + -4.4976913245356620e+00 -2.4610478554042120e-01 -1.1386580659389742e+00 + id 13733 + loc 7.4285417795181274e-01 6.7792731523513794e-01 403 + blend 0.0000000000000000e+00 + interp 4.3213837629825402e-01:3.0248187490873146e-01:8.3188892371253120e-01:4.3213405491449108e-01:1.0328618247443659e+00:3.6225718593919998e-01:1.7904291276640967e+00:2.8946004494164973e-01:2.2069805868568424e+00:2.7915917786298278e-01:3.0016040339147541e+00:2.8302117550048445e-01:3.9857953356621785e+00 + CVs 20 + -6.4049896906142975e-02 3.0483614555300062e-02 -1.1998381824255989e-01 + -1.1948890900666373e-01 7.3816346619888118e-02 -2.2242645377146261e-01 + -1.8488689459014165e-01 1.0874827550312680e-01 -3.1385148879934910e-01 + -2.6729081540362826e-01 1.2801626431402138e-01 -3.9512483276906779e-01 + -3.6384863521584182e-01 1.3120087257981039e-01 -4.6247106728594645e-01 + -4.7132643529977336e-01 1.1905230009974938e-01 -5.1220897586003467e-01 + -5.8622404485100121e-01 9.3192342658058924e-02 -5.4101406293227683e-01 + -7.0411501642114649e-01 5.5533934597042978e-02 -5.4640229894029113e-01 + -8.1896915882983712e-01 7.5720896574770213e-03 -5.2754968099734212e-01 + -9.2384605059195912e-01 -4.9266916460390109e-02 -4.8605027433009668e-01 + -1.0119340604855596e+00 -1.1324038970304590e-01 -4.2607853968456977e-01 + -1.0775084052692692e+00 -1.8226527438900630e-01 -3.5431193918380088e-01 + -1.1165769040293552e+00 -2.5430497396339213e-01 -2.7964746155979825e-01 + -1.1279437996615347e+00 -3.2776206099964228e-01 -2.1264538544296618e-01 + -1.1141268476604211e+00 -4.0186811413635742e-01 -1.6438457543455345e-01 + -1.0815616084332973e+00 -4.7684060937710165e-01 -1.4513042248958874e-01 + -1.0391849645884095e+00 -5.5326279346766971e-01 -1.6328985009184094e-01 + -9.9867975593477842e-01 -6.3095408542854825e-01 -2.2395327025263292e-01 + -9.7584926880872502e-01 -6.8365369075762661e-01 -2.3550326309468558e-01 + id 13734 + loc 5.5607402324676514e-01 6.6412830352783203e-01 412 + blend 0.0000000000000000e+00 + interp 4.1560355512371211e-01:3.5252406046275803e-01:2.2587006244765284e-03:3.0421329535669800e-01:9.9864685876448211e-01:3.9716294196383134e-01:1.4923401732366031e+00:4.1559939908816090e-01:1.9703925247138132e+00:3.5757287686568900e-01:2.5088016724723610e+00:4.0692867814838074e-01:3.4025235291965004e+00 + CVs 20 + 7.2647863124886780e-01 1.0719546844739297e-01 -2.2890244054100423e-01 + 1.2049783502748250e+00 8.9114642962668189e-02 -4.6028178641609679e-01 + 1.6360762620266673e+00 2.8538007856677539e-02 -6.9590589889793142e-01 + 2.0972474364389377e+00 -4.5048275257432047e-02 -9.3557978138737985e-01 + 2.5853681907248895e+00 -1.3496165074985589e-01 -1.1672088441596127e+00 + 3.0964150741257228e+00 -2.4261402545719057e-01 -1.3741763325018523e+00 + 3.6207228472072943e+00 -3.6769472961588601e-01 -1.5390576907853222e+00 + 4.1425795420713749e+00 -5.0892601933702464e-01 -1.6498749872751388e+00 + 4.6466644558436556e+00 -6.6364172375025365e-01 -1.7011894318956176e+00 + 5.1185708147372901e+00 -8.2792553634211230e-01 -1.6933873671869626e+00 + 5.5326980365374530e+00 -1.0016602689580738e+00 -1.6430440747045783e+00 + 5.8551528114074012e+00 -1.1920995107876589e+00 -1.5915988715949863e+00 + 6.0856209019406204e+00 -1.4016780955700243e+00 -1.5675929586076713e+00 + 6.2732704021071557e+00 -1.6291340450087843e+00 -1.5527198731184861e+00 + 6.4538893769997312e+00 -1.8797165296468983e+00 -1.5272736498838415e+00 + 6.6237879731161886e+00 -2.1501961645354495e+00 -1.4975553335776781e+00 + 6.7752696106696861e+00 -2.4316135334067859e+00 -1.4783093692033051e+00 + 6.9111488369048164e+00 -2.7182293248075324e+00 -1.4759389546318427e+00 + 7.0776678795356744e+00 -2.9975387090548873e+00 -1.4450564534644035e+00 + id 13735 + loc 1.8286579847335815e-01 7.1081387996673584e-01 380 + blend 0.0000000000000000e+00 + interp 4.6557915201614297e-01:3.4314204144261135e-01:9.1086024353848094e-01:2.9952176402697828e-01:1.3214342556395793e+00:3.6088747322280895e-01:1.9901483080432678e+00:4.6557449622462282e-01:2.5996126347990050e+00:3.3475984470746623e-01:3.1595377086311034e+00:3.8019746849988278e-01:3.9314336001770034e+00 + CVs 20 + -4.1152794977131235e-01 2.5712936170394896e-01 -3.0505510926586077e-01 + -7.9140528943837107e-01 4.5439336891605842e-01 -5.0816184277495913e-01 + -1.1782950389473612e+00 6.3025853174820345e-01 -6.8999735892573333e-01 + -1.5871011024319839e+00 8.0963305923993856e-01 -8.9760913283207611e-01 + -2.0103186493792680e+00 9.9585100594638010e-01 -1.1454490599754465e+00 + -2.4380240467821155e+00 1.1822044014167641e+00 -1.4445947646456265e+00 + -2.8679585713209272e+00 1.3515330742406908e+00 -1.8039691799916835e+00 + -3.2978681895238497e+00 1.4797108078417460e+00 -2.2279144971982259e+00 + -3.7152758308194804e+00 1.5438393735468772e+00 -2.7094554573653347e+00 + -4.1017930546100132e+00 1.5322989454904974e+00 -3.2300418559282473e+00 + -4.4502035973882785e+00 1.4371416429902089e+00 -3.7689909081396591e+00 + -4.7635872857991171e+00 1.2444296867126186e+00 -4.3128683513419608e+00 + -5.0377134491364597e+00 9.3645118559233875e-01 -4.8448533553466779e+00 + -5.2603356373303978e+00 5.3150361586271488e-01 -5.3375250627651267e+00 + -5.4351188418134448e+00 1.1022476658089042e-01 -5.7847365726221867e+00 + -5.5856717114195185e+00 -2.3618842165602594e-01 -6.2059944206268192e+00 + -5.7371120769578843e+00 -4.5095325026323163e-01 -6.5972175030422804e+00 + -5.9058825004571007e+00 -5.3751716409689188e-01 -6.9344770135499409e+00 + -6.1170093179035110e+00 -7.6433114679958880e-01 -7.3386077791239526e+00 + id 13736 + loc 7.0386087894439697e-01 5.6775033473968506e-01 415 + blend 0.0000000000000000e+00 + interp 4.3359949115558799e-01:2.6814979717172249e-01:3.5917521897546600e-01:3.2828865001212515e-01:1.6336207139457724e+00:4.3359515516067648e-01:2.2956787125484244e+00:3.2291234267963353e-01:3.1593411265380373e+00 + CVs 20 + 3.2514189196566134e-01 1.6321651152358860e-01 -1.0711096964116096e-03 + 5.8597660871072521e-01 2.6361685445752558e-01 -2.6410310212709620e-02 + 8.2864397992848882e-01 3.3958819694725034e-01 -4.5983816034202929e-02 + 1.0761899158491766e+00 4.1047156388789374e-01 -4.2453335226449174e-02 + 1.3270797197938702e+00 4.7357416050138113e-01 -1.4625214773623108e-02 + 1.5793955301415523e+00 5.2643918909686382e-01 3.8752343775133036e-02 + 1.8304065939738026e+00 5.6738865308679631e-01 1.1979267224936974e-01 + 2.0769951675097191e+00 5.9520914813791537e-01 2.2999854714642404e-01 + 2.3168182718594226e+00 6.0897575399147186e-01 3.6849339270140913e-01 + 2.5483273953192702e+00 6.0828532376597266e-01 5.3294132970884833e-01 + 2.7682536605161010e+00 5.9364540677882549e-01 7.2041125476554568e-01 + 2.9713204164459848e+00 5.6550965963154876e-01 9.2213864067331086e-01 + 3.1605336762276721e+00 5.2075916942646794e-01 1.1166456363381019e+00 + 3.3521575732254392e+00 4.5241257984092753e-01 1.2770609109359679e+00 + 3.5612708434572702e+00 3.5472006232172903e-01 1.3868516463395104e+00 + 3.7858302148461842e+00 2.2775633077978941e-01 1.4408140064147934e+00 + 4.0078037429597488e+00 7.8702509560627743e-02 1.4362157222121197e+00 + 4.2082604332099613e+00 -8.0983129156998679e-02 1.3712086064168070e+00 + 4.4645834934630919e+00 -2.7196171686721859e-01 1.3009631031931082e+00 + id 13737 + loc 9.4996905326843262e-01 6.6605895757675171e-01 393 + blend 0.0000000000000000e+00 + interp 5.2599941324381061e-01:2.6400045756711682e-01:2.2948791332449670e-01:4.1383798393381965e-01:1.0077937269371913e+00:4.4048658306676147e-01:1.8953114663796951e+00:5.2599415324967824e-01:2.0519739993056438e+00:1.4002983268425631e-01:3.0010400767282452e+00 + CVs 20 + -1.5212843907752632e-01 2.1350760898023574e-01 -1.6185187812477578e-01 + -2.9474039397424101e-01 4.4996821769043882e-01 -3.4800551272417279e-01 + -4.3055989070293832e-01 7.0936123747125124e-01 -5.3469666761673151e-01 + -5.6380778469690007e-01 9.8498938480650400e-01 -7.1199489201158328e-01 + -6.9995499857978705e-01 1.2653296427251053e+00 -8.8448189959194234e-01 + -8.4048291351891358e-01 1.5307608776178001e+00 -1.0617072923844917e+00 + -9.8450711958092918e-01 1.7617345465261960e+00 -1.2543653451942469e+00 + -1.1349892102941923e+00 1.9483602944587877e+00 -1.4679017447970959e+00 + -1.2930376971639626e+00 2.0803548107091583e+00 -1.6994713556585810e+00 + -1.4343976268545893e+00 2.1258862633588267e+00 -1.9332124829248019e+00 + -1.5037597922036823e+00 2.0513357501086737e+00 -2.1292504004667534e+00 + -1.4683615971420323e+00 1.8824003655095649e+00 -2.2351048902215553e+00 + -1.3648149009105099e+00 1.6902287705988219e+00 -2.2477149461582435e+00 + -1.2464107446261954e+00 1.5034120876424470e+00 -2.2200846683461943e+00 + -1.1410545994696824e+00 1.2936659931013170e+00 -2.2045099523600031e+00 + -1.0724770332256999e+00 1.0046824156837504e+00 -2.2338190309560439e+00 + -1.1088374599158246e+00 5.6100134439156479e-01 -2.3430405462411112e+00 + -1.3441849017724332e+00 -1.5282776321411395e-02 -2.5151149408390836e+00 + -1.3986975410579630e+00 -3.4707009836978198e-01 -2.5595461084648981e+00 + id 13738 + loc 5.1950627565383911e-01 3.3219984173774719e-01 376 + blend 0.0000000000000000e+00 + interp 3.9395379909074718e-01:2.6227203800822901e-01:6.0739954398741203e-01:3.9394985955275630e-01:1.1018760741566704e+00:2.7267497240760463e-01:1.9995470024119695e+00:3.1233587354988379e-01:3.0115083266434510e+00:2.7149839429888784e-01:3.8379114268405465e+00 + CVs 20 + 2.1417836463617482e-01 3.5810683484917682e-01 -6.4609541991493602e-01 + 2.8756001567692624e-01 5.9110928047232081e-01 -1.2270163320344569e+00 + 2.4760545427734010e-01 6.9698865494222795e-01 -1.8074226932699777e+00 + 1.4534984118547617e-01 7.5340139899613146e-01 -2.4156785645202268e+00 + 5.0982728455829074e-02 8.2851254655819340e-01 -3.0337876361266898e+00 + 3.6260355715674097e-02 9.3360303244810594e-01 -3.6442224758089194e+00 + 1.4672571341672147e-01 1.0477981761278632e+00 -4.2354566670709106e+00 + 3.9441494993574344e-01 1.1536101716842313e+00 -4.7860962618165859e+00 + 7.6410130034684376e-01 1.2314159689039628e+00 -5.2688868292936268e+00 + 1.2182418382075242e+00 1.2519960917630286e+00 -5.6719912106366577e+00 + 1.7122010179893059e+00 1.1849789022533841e+00 -5.9921731099921800e+00 + 2.1955941414230811e+00 1.0080947502696391e+00 -6.2115706828541688e+00 + 2.6128865478603194e+00 7.2708118395456189e-01 -6.3090297747410871e+00 + 2.9353863793992696e+00 3.8549532338997228e-01 -6.2864430594367526e+00 + 3.1604019812392572e+00 2.6890746991923731e-02 -6.1679819995901770e+00 + 3.2820508337524781e+00 -3.4626980216343028e-01 -6.0282054713816429e+00 + 3.2506081829429352e+00 -7.6883068359479312e-01 -6.0094886166580022e+00 + 3.0209903920660168e+00 -1.1672830248409416e+00 -6.2017700003316385e+00 + 3.1113767156684933e+00 -1.7059875186448736e+00 -6.3048689709623851e+00 + id 13739 + loc 5.7881563901901245e-01 4.4721183180809021e-01 382 + blend 0.0000000000000000e+00 + interp 4.0281535769990873e-01:3.2259554801158630e-01:1.5093470902470141e-01:4.0281132954633175e-01:9.9203932255550642e-01:3.1133855771987518e-01:1.8748633523956013e+00:3.1410324383925398e-01:2.5509630251058146e+00:3.1071153930551060e-01:3.1004857196720983e+00 + CVs 20 + -9.9553869632180492e-01 2.7185130715017053e-01 4.7746042604583222e-01 + -1.6676503625806358e+00 3.9675003354528382e-01 8.4087440402518687e-01 + -2.2195623756755971e+00 4.5354259808742137e-01 1.1543599335220565e+00 + -2.7495479808204109e+00 4.6640065584845813e-01 1.4579545943317784e+00 + -3.2615891110941493e+00 4.3475580732158875e-01 1.7527951694369570e+00 + -3.7683530097108977e+00 3.6564268243141762e-01 2.0415787304088417e+00 + -4.2855271078103749e+00 2.6757168107646723e-01 2.3275916683944393e+00 + -4.8272857050896416e+00 1.3914506636775292e-01 2.6144185612220334e+00 + -5.3984768295839594e+00 -4.0231164199478808e-02 2.9078470565277055e+00 + -5.9822622409453832e+00 -3.0088210018416861e-01 3.2154043764912017e+00 + -6.5400491111377779e+00 -6.5561922059632360e-01 3.5366756119058236e+00 + -7.0362995765209035e+00 -1.1088922349014001e+00 3.8673776523806902e+00 + -7.4405172800329167e+00 -1.6687324145184350e+00 4.1939657258696945e+00 + -7.7206664285388937e+00 -2.3190735325591980e+00 4.4984559606314569e+00 + -7.8834869700713144e+00 -3.0102496985882077e+00 4.7815018325409548e+00 + -7.9880663543342667e+00 -3.6847945597154519e+00 5.0596229024302808e+00 + -8.0872497283372340e+00 -4.2779084481527372e+00 5.3450556031041323e+00 + -8.1874122262455558e+00 -4.7403826100415891e+00 5.6449290433284141e+00 + -8.3071043737945161e+00 -5.2980113623376033e+00 5.9394940026966871e+00 + id 13740 + loc 2.0621101558208466e-01 5.4632252454757690e-01 396 + blend 0.0000000000000000e+00 + interp 4.6168649336625933e-01:2.5261482783042744e-01:1.1492117414117486e-02:3.7499789866769806e-01:6.8288412311670177e-01:3.1696544932366422e-01:1.1450369803177463e+00:3.7605585194807678e-01:1.9107206044890090e+00:4.6168187650132569e-01:2.2052746119205633e+00:3.9450498791787980e-01:2.8761988074027292e+00:3.8738358364605385e-01:3.1959249795279558e+00 + CVs 20 + 8.7137206651060728e-01 1.0624495820577140e-01 -3.7381157610815485e-01 + 1.5069613198200924e+00 5.4134293094896646e-02 -6.8920888668391878e-01 + 2.0944985937464304e+00 -3.4285354900438825e-02 -9.6921485863933321e-01 + 2.6885942974738137e+00 -1.2652887814387703e-01 -1.2161435156332860e+00 + 3.2748840872301983e+00 -2.2604962840078913e-01 -1.4265588981059230e+00 + 3.8395160719124251e+00 -3.2291638688149815e-01 -1.6116366798213564e+00 + 4.3746635183347085e+00 -4.0803096739142619e-01 -1.7871321278378443e+00 + 4.8811078845763927e+00 -4.8139573298681637e-01 -1.9644640840291163e+00 + 5.3681641826435813e+00 -5.5176112460309357e-01 -2.1520073224644269e+00 + 5.8441951844301183e+00 -6.3668024859676708e-01 -2.3645909914701475e+00 + 6.3110625095766455e+00 -7.6052126510381357e-01 -2.6176906121461148e+00 + 6.7684914831164642e+00 -9.4756627470979993e-01 -2.9129011657726620e+00 + 7.2101203518803665e+00 -1.2153338737078294e+00 -3.2394482138743452e+00 + 7.6145986050346863e+00 -1.5663655859508960e+00 -3.5832351134766283e+00 + 7.9517548758153822e+00 -1.9845437817328295e+00 -3.9296004036827008e+00 + 8.1995333180489212e+00 -2.4522292320002568e+00 -4.2617072492989383e+00 + 8.3491366852224509e+00 -2.9595969050069049e+00 -4.5613103710628753e+00 + 8.4040316619374753e+00 -3.4752382402111879e+00 -4.8144152384247629e+00 + 8.4513968041488408e+00 -3.7695344535416617e+00 -5.0080147779551947e+00 + id 13741 + loc 3.1524220108985901e-01 3.1308534741401672e-01 399 + blend 0.0000000000000000e+00 + interp 4.5566946139786735e-01:2.6082735010904895e-01:7.2920536657631807e-01:3.6572490146776426e-01:1.4872681376575023e+00:3.0697020010092751e-01:2.0240892834069464e+00:4.3695791626270231e-01:2.6766522099458872e+00:4.5566490470325338e-01:3.0004003900898777e+00:3.1863222914785561e-01:3.3699908864755015e+00:4.4977218224257282e-01:3.9717637252551130e+00 + CVs 20 + -1.7582033229978186e-01 4.1325292704063010e-01 1.0690692865501972e-01 + -4.0034911797578826e-01 8.2173117565295595e-01 2.0192016699706786e-01 + -6.7712705198450984e-01 1.2112272605910896e+00 2.7641410318140835e-01 + -9.9203931834048442e-01 1.5803085562980361e+00 3.4943327779899719e-01 + -1.3322776178136528e+00 1.9318163255006795e+00 4.5059443754023198e-01 + -1.6964208815261850e+00 2.2579828678920268e+00 6.0280246386183745e-01 + -2.0905265675043698e+00 2.5365156321767022e+00 8.2313375688797941e-01 + -2.5184734485455271e+00 2.7276130626862956e+00 1.1261549282887393e+00 + -2.9683245723262868e+00 2.7739913086912926e+00 1.5132813268556202e+00 + -3.4018852460281406e+00 2.6151188724803149e+00 1.9568047627858409e+00 + -3.7536523770372683e+00 2.2278257433108442e+00 2.3921851343885772e+00 + -3.9763521594051343e+00 1.6969659205721890e+00 2.7465640056810554e+00 + -4.1101618387155279e+00 1.1603872961616710e+00 3.0132564150565733e+00 + -4.2487095230657630e+00 7.0673946151261113e-01 3.2312216221284236e+00 + -4.4978479477621125e+00 4.0579115209779248e-01 3.4242673584317220e+00 + -4.9188870015368300e+00 3.0453622851907802e-01 3.5406226265230902e+00 + -5.4873897537260641e+00 4.4797977046490534e-01 3.4099926403897833e+00 + -5.9719440453793329e+00 8.2263001902674182e-01 2.9413137834563945e+00 + -6.2990654283118364e+00 7.2409194248476227e-01 2.9423297719830384e+00 + id 13742 + loc 4.6451979875564575e-01 1.9476762413978577e-01 407 + blend 0.0000000000000000e+00 + interp 4.9210706429137641e-01:2.5867883855871859e-01:1.1408887583921457e-01:3.4012684228618251e-01:9.9551004689974265e-01:3.2523470427626650e-01:1.9998164111065577e+00:4.9210214322073353e-01:3.9917927271719380e+00 + CVs 20 + -4.6272372540314417e-02 3.9252907080400723e-01 -3.7527445095208084e-01 + -7.9400941300769495e-02 6.2214469083471546e-01 -5.2954354159060446e-01 + -1.0019855216491470e-01 7.9539572927173641e-01 -6.1678566201457419e-01 + -1.0814795277528225e-01 9.5655965225166739e-01 -7.1346616629283788e-01 + -1.0035844340834904e-01 1.1034100489715948e+00 -8.1630403631896153e-01 + -7.3794643114698300e-02 1.2346253096820670e+00 -9.2365579839032486e-01 + -2.4105586468494214e-02 1.3476514909046944e+00 -1.0345316169180898e+00 + 5.3184134870602973e-02 1.4359378873850450e+00 -1.1457734628878864e+00 + 1.5847034489059864e-01 1.4904090774087730e+00 -1.2508088762137595e+00 + 2.8724729701841339e-01 1.5050498106654140e+00 -1.3428720260060478e+00 + 4.3344976094250270e-01 1.4786494915561650e+00 -1.4182332420957229e+00 + 5.9085906636700236e-01 1.4124344085067673e+00 -1.4752421205367456e+00 + 7.5257449100914331e-01 1.3067228966620419e+00 -1.5111076504206311e+00 + 9.1333634555919485e-01 1.1582174811844146e+00 -1.5222894094195278e+00 + 1.0755477538638485e+00 9.6366104151330323e-01 -1.5115742195827484e+00 + 1.2485979606800675e+00 7.2978638454760580e-01 -1.4922724325890619e+00 + 1.4391879076437699e+00 4.7139107749359177e-01 -1.4787695260445297e+00 + 1.6442900458279446e+00 2.0188775500010106e-01 -1.4817270183351428e+00 + 1.7987790979930260e+00 -6.7417275195513771e-03 -1.4864349933824836e+00 + id 13743 + loc 2.4674229323863983e-01 7.8541111946105957e-01 402 + blend 0.0000000000000000e+00 + interp 4.6618434423933497e-01:4.1181504132910463e-01:7.9500051402005667e-02:2.8488926119468977e-01:9.9704571646522133e-01:4.3216215635405958e-01:1.3810615392258252e+00:4.6617968239589258e-01:2.0845012288904163e+00:4.2806443720652015e-01:2.9044657065595167e+00:3.9943939244784438e-01:3.5160301203452589e+00 + CVs 20 + -2.8572506157789529e-02 1.7801929031482211e-01 -2.1928327298377862e-01 + 1.2624459528142673e-02 3.5603258501311791e-01 -4.6264486906598801e-01 + 7.5834941277347023e-02 5.1514574376521938e-01 -7.2511329160119664e-01 + 1.5159192128510632e-01 6.4690051932753234e-01 -9.9720371050789347e-01 + 2.2175459416998314e-01 7.6400931192703114e-01 -1.2850831855447660e+00 + 2.6284311139437566e-01 8.7591483937584580e-01 -1.5968024037418143e+00 + 2.5180181491275350e-01 9.8328925759245167e-01 -1.9353759942428508e+00 + 1.7239412352032074e-01 1.0778307716898159e+00 -2.2942744627227127e+00 + 1.8343557424727708e-02 1.1493333631007996e+00 -2.6594031285960820e+00 + -2.0416952589434467e-01 1.1854016341209221e+00 -3.0136146028866646e+00 + -4.8233246943810637e-01 1.1790109032568477e+00 -3.3418251726908244e+00 + -7.9981137811121095e-01 1.1330006943643309e+00 -3.6339754064427159e+00 + -1.1543719622842006e+00 1.0588119563540626e+00 -3.8863448433534038e+00 + -1.5778370748494557e+00 9.7982761700010934e-01 -4.0948539135169622e+00 + -2.1046005236763072e+00 9.0826643431979504e-01 -4.2375242862930698e+00 + -2.6939989936607986e+00 8.1811973672577420e-01 -4.2821479028945237e+00 + -3.2509803378315567e+00 6.6563990851897514e-01 -4.2310569248329024e+00 + -3.7141931837416564e+00 4.6182741631416513e-01 -4.1323595901832526e+00 + -4.0124604338693715e+00 3.7970010251512870e-01 -4.1528878093590853e+00 + id 13744 + loc 3.3408498764038086e-01 5.0293701887130737e-01 1078 + blend 0.0000000000000000e+00 + interp 3.2574703608510858e-01:2.7761845493906073e-01:3.3757019368833019e-01:2.9692257017496004e-01:1.5514887342890205e+00:2.9663178608285246e-01:2.2453781518878499e+00:2.7760030142170383e-01:3.0820878313886206e+00:3.2574377861474774e-01:3.9031482412057947e+00 + CVs 20 + 5.5748024585522186e-02 2.8472253497392908e-01 8.6971966792709507e-02 + 1.2262590045373785e-01 5.4391232331096162e-01 1.2578076700465152e-01 + 1.9997118485821302e-01 7.8785883351083774e-01 1.3009145459060967e-01 + 2.8732931495047664e-01 1.0281597032758287e+00 1.1513369706951676e-01 + 3.8525487719054552e-01 1.2606241337386943e+00 8.0912845309230375e-02 + 4.9420478424652714e-01 1.4830571883394170e+00 2.8808784800860354e-02 + 6.1540119584827724e-01 1.6953931856585145e+00 -4.2975717086482734e-02 + 7.5094778097539672e-01 1.8951598298757055e+00 -1.4268646471424729e-01 + 8.9887722298618256e-01 2.0712822008471035e+00 -2.8299752209849072e-01 + 1.0460455138550950e+00 2.2035275829185261e+00 -4.7215704631421240e-01 + 1.1750029116875305e+00 2.2768673479011445e+00 -7.0471680252180302e-01 + 1.2627562616664418e+00 2.2783944990932969e+00 -9.5855603677430323e-01 + 1.2785622343296239e+00 2.1931097736708600e+00 -1.1846052337704771e+00 + 1.2210791587836252e+00 2.0172631277499957e+00 -1.3231677813316929e+00 + 1.1224744068417460e+00 1.7352556679447508e+00 -1.3255557104456668e+00 + 9.9513546119789964e-01 1.2716432144745444e+00 -1.1978161507366882e+00 + 7.8577069483507589e-01 5.5010060513738901e-01 -1.1688208756240688e+00 + 4.3585654674830476e-01 -2.6449765421719085e-01 -1.6912808968498423e+00 + 3.9700258864874938e-01 -2.0349547956656144e-01 -1.7535234373417750e+00 + id 13745 + loc 8.8859790563583374e-01 8.1564851105213165e-02 380 + blend 0.0000000000000000e+00 + interp 5.1906975708055925e-01:4.2194810308458391e-01:1.0017205057448915e+00:4.2452607221393773e-01:1.2411984919449635e+00:5.1906456638298848e-01:1.8257774185821072e+00:4.5116403391325655e-01:2.0287746410460121e+00:4.5201176505661622e-01:2.5463741900360013e+00:3.0342304164175216e-01:3.0478777974271720e+00:3.8363052201680170e-01:3.9746109692875637e+00 + CVs 20 + 5.7720231452080695e-01 2.4023806732537278e-01 7.0585448723744049e-01 + 1.0183643193519674e+00 3.7934304189018392e-01 1.2091395445571049e+00 + 1.4245768749052847e+00 4.8563635371304381e-01 1.6718220548358766e+00 + 1.8362956759573874e+00 5.8793092931788471e-01 2.1710237202340368e+00 + 2.2447151868574493e+00 6.7131497401298734e-01 2.7097268929069496e+00 + 2.6468103396515348e+00 7.0585202305983208e-01 3.2805756540422308e+00 + 3.0365144845169243e+00 6.5519951211998984e-01 3.8645323937016354e+00 + 3.3956460866986014e+00 4.9117078348110654e-01 4.4310321488324051e+00 + 3.7025965367854550e+00 2.0640274800452030e-01 4.9472278108164680e+00 + 3.9466011540779649e+00 -1.8642025979109089e-01 5.3888760788204255e+00 + 4.1222201587731773e+00 -6.5683202804351160e-01 5.7348829916979520e+00 + 4.2226540540983244e+00 -1.1559069273660261e+00 5.9673188961050290e+00 + 4.2513191528584011e+00 -1.6397217256230650e+00 6.0924012880951066e+00 + 4.2308050589923649e+00 -2.1122234460043345e+00 6.1463760741982902e+00 + 4.1920221177915167e+00 -2.6196698528134372e+00 6.1750188967459687e+00 + 4.1647885314220918e+00 -3.1880525204215622e+00 6.2252760594405583e+00 + 4.1786972476417574e+00 -3.8090251181589125e+00 6.3346108281184277e+00 + 4.2563616867676686e+00 -4.4348920619932057e+00 6.5016778989657027e+00 + 4.3241817740237796e+00 -4.8291530037896022e+00 6.6633168388941098e+00 + id 13746 + loc 2.4343313276767731e-01 4.7315385937690735e-01 409 + blend 0.0000000000000000e+00 + interp 3.4988355858075482e-01:3.2035971873112745e-01:2.6549150120686038e-03:3.0233819083845326e-01:6.0734180598334542e-01:2.4839555685852605e-01:1.8143201259641486e+00:3.4988005974516900e-01:2.6571890542823819e+00:2.6258252941602594e-01:3.3287622228882130e+00 + CVs 20 + -2.7694029697107153e-01 2.3208972718832624e-01 -4.4343077398486991e-01 + -4.8743054074449582e-01 4.4013378013560833e-01 -8.4471090037562613e-01 + -6.7099098818448133e-01 6.5860575662442056e-01 -1.2709275527804209e+00 + -8.6324854132378726e-01 8.8658333947988011e-01 -1.7417781335286004e+00 + -1.1068778561447001e+00 1.0942319937554912e+00 -2.2407976253589288e+00 + -1.4313248836523271e+00 1.2430517252874169e+00 -2.7388538828453477e+00 + -1.8289300674302946e+00 1.2985133486935605e+00 -3.2000261940624251e+00 + -2.2580930112753337e+00 1.2441017069655482e+00 -3.5957108342869355e+00 + -2.6724088998433428e+00 1.0848613127422386e+00 -3.9172719238760263e+00 + -3.0384913680818721e+00 8.4136901750040627e-01 -4.1687768990002052e+00 + -3.3305173836216491e+00 5.3446950136760085e-01 -4.3609143090003748e+00 + -3.5279432541418219e+00 1.5779012656130531e-01 -4.5148869075172646e+00 + -3.6420674023068207e+00 -3.0480824396925055e-01 -4.6580741906714245e+00 + -3.7355581878859776e+00 -8.4960017717599090e-01 -4.8197568618041338e+00 + -3.8911524727399489e+00 -1.4345970861582202e+00 -5.0209377283128394e+00 + -4.1598493538619428e+00 -1.9710336463738307e+00 -5.2658503238034875e+00 + -4.5216401624269293e+00 -2.4051283869714473e+00 -5.5616338917939832e+00 + -4.9303114597748863e+00 -2.7681670090375472e+00 -5.9395865165492978e+00 + -5.3849241985792728e+00 -3.1485665410573529e+00 -6.4542233413976628e+00 + id 13747 + loc 3.7119889259338379e-01 7.8802770376205444e-01 378 + blend 0.0000000000000000e+00 + interp 3.7911838181140517e-01:2.9038486739815317e-01:2.7834653648996299e-01:2.5715884892314717e-01:9.9949066567662959e-01:3.7911459062758707e-01:1.9290235298358778e+00:2.3651577673954796e-01:2.8757462320219815e+00:3.2846589397424769e-01:3.5923947450277440e+00 + CVs 20 + 5.0858374731548128e-01 3.6510493311227543e-01 2.3488509167523436e-01 + 9.6167390748813641e-01 6.7559826080048002e-01 4.3642741203773677e-01 + 1.4246299707750065e+00 9.5504927748817603e-01 6.3356571432760378e-01 + 1.9117788988940627e+00 1.2202538546687340e+00 8.5187876171114196e-01 + 2.4007955540854091e+00 1.4611296714466864e+00 1.1076144304852789e+00 + 2.8804013648062767e+00 1.6515496632230597e+00 1.4120961642836731e+00 + 3.3414516665639136e+00 1.7587710046183369e+00 1.7636980363715333e+00 + 3.7676698889602180e+00 1.7611086380284535e+00 2.1459816265961908e+00 + 4.1474077302387453e+00 1.6541352216649747e+00 2.5345019059974399e+00 + 4.4815740633356320e+00 1.4438078693852940e+00 2.9044390758828529e+00 + 4.7682880026176049e+00 1.1407472820453037e+00 3.2292829757599577e+00 + 4.9908255768500061e+00 7.6517325899093880e-01 3.4806099088599041e+00 + 5.1357200513268877e+00 3.4893566200387305e-01 3.6445044935939857e+00 + 5.2271958402499985e+00 -8.3660920540293837e-02 3.7342631484574627e+00 + 5.3222960190604365e+00 -5.3752487927008552e-01 3.7772651982818810e+00 + 5.4727609937731900e+00 -1.0246476843507555e+00 3.7992323843516962e+00 + 5.7125509412242117e+00 -1.5312967871323631e+00 3.8073680419603617e+00 + 6.0233387059551777e+00 -1.9926236670895054e+00 3.7798247340499369e+00 + 6.2550186201162337e+00 -2.2867474530047951e+00 3.6778007270528232e+00 + id 13748 + loc 7.4218648672103882e-01 4.4186291098594666e-01 379 + blend 0.0000000000000000e+00 + interp 4.4244120499453599e-01:4.0724198333834644e-01:8.1830435631640164e-03:2.9172212458403352e-01:9.6534126307897739e-01:3.3601982789268076e-01:1.8063588231757486e+00:4.0158292891315278e-01:2.0787777454781375e+00:4.4243678058248603e-01:2.6592157524732172e+00:4.2536062991411999e-01:2.9974004894675623e+00:4.0222877204041957e-01:3.4194739620334156e+00 + CVs 20 + 4.3348788338923122e-01 3.3947370167711688e-01 -2.2191402473528837e-01 + 8.4054071705076461e-01 6.1919020885105214e-01 -4.3929099918061715e-01 + 1.2624478106564301e+00 8.5244027353898433e-01 -6.9035723602227439e-01 + 1.7190819932175843e+00 1.0732528423063694e+00 -9.7197325727412220e-01 + 2.2097418837853615e+00 1.2997675191249332e+00 -1.2460926624860724e+00 + 2.7401085947703256e+00 1.5179621032688120e+00 -1.4721905718721544e+00 + 3.3148675365563829e+00 1.6984232849787138e+00 -1.6213168613327504e+00 + 3.9220328657475365e+00 1.8160481094857821e+00 -1.6791480220372865e+00 + 4.5324543644941278e+00 1.8477632465346472e+00 -1.6503869471112258e+00 + 5.1112545362242638e+00 1.7693406862375500e+00 -1.5657063506084408e+00 + 5.6243377295625123e+00 1.5584911590853006e+00 -1.4691261569531766e+00 + 6.0349409394421940e+00 1.2099112351308778e+00 -1.3920609556027457e+00 + 6.3387577032581461e+00 7.7078803426060860e-01 -1.3422313730390316e+00 + 6.6228326693287496e+00 3.2308883705865199e-01 -1.2994466871891461e+00 + 6.9982962563515745e+00 -7.3420915701075895e-02 -1.2374501594108129e+00 + 7.4953837042801954e+00 -3.6773796631825428e-01 -1.1825697624968208e+00 + 8.0670975091455297e+00 -5.2552797849323296e-01 -1.2024190984467196e+00 + 8.6379077684326422e+00 -5.8643864370763943e-01 -1.2678642896895649e+00 + 9.1508461193307973e+00 -7.4116005940646357e-01 -1.2102085595858298e+00 + id 13749 + loc 5.8023703098297119e-01 2.8379455208778381e-01 373 + blend 0.0000000000000000e+00 + interp 3.0087286058122431e-01:3.0086985185261850e-01:1.6982777195043597e-02:2.3791890208135513e-01:7.5594968402611895e-01:2.7061128262880507e-01:1.4840692025396058e+00:2.8603268861902753e-01:2.4356936727581555e+00:2.4151474044687099e-01:3.4457991556788925e+00 + CVs 20 + 2.6084107296107212e-01 4.5254060154426817e-01 4.5109797292921541e-02 + 5.4289957798865018e-01 8.5141751327226245e-01 1.1390193794353985e-01 + 8.1442038922511406e-01 1.1557268344926273e+00 2.1046182627258153e-01 + 1.0306717980371212e+00 1.3865891796278462e+00 3.1634645941709683e-01 + 1.1854994748876027e+00 1.5612047193448100e+00 3.7744881299933242e-01 + 1.3280400624583717e+00 1.6839530327898806e+00 3.8980730922385320e-01 + 1.5197759586289634e+00 1.7904924556507433e+00 3.8613327323720387e-01 + 1.7846367098742608e+00 1.9142510892361098e+00 4.0710299306715086e-01 + 2.0990757292908118e+00 2.0726736020741066e+00 4.8534956662702400e-01 + 2.4157815065745698e+00 2.2556289594552119e+00 6.3175389950523408e-01 + 2.6920469067008623e+00 2.4246654660804903e+00 8.3190642555031047e-01 + 2.8958494686431564e+00 2.5254993621885200e+00 1.0444605440297043e+00 + 3.0047239203701022e+00 2.5197335354104129e+00 1.1883210256247021e+00 + 3.0235014140772356e+00 2.4439421434326967e+00 1.1555717580674676e+00 + 2.9897008160136291e+00 2.4422614176899420e+00 8.9767986346263950e-01 + 2.8947725614489057e+00 2.5851721497800662e+00 5.9796620541815626e-01 + 2.6875818074191358e+00 2.6816175580428840e+00 4.4093154995666106e-01 + 2.5061955418966781e+00 2.5129361697798145e+00 4.1185524557378539e-01 + 2.6076283536558651e+00 1.9696490589000839e+00 4.0680952570710083e-01 + id 13750 + loc 3.3348748087882996e-01 9.4077676534652710e-01 395 + blend 0.0000000000000000e+00 + interp 4.4402660663372640e-01:4.4042066551842873e-01:2.0259569353067197e-01:3.2907879728166456e-01:1.0091281334889368e+00:3.1643494528776522e-01:1.6704033483042242e+00:3.4038222641363580e-01:2.4322945364010025e+00:4.4402216636766006e-01:2.9977810863013907e+00:3.6209461737103110e-01:3.6775998721087992e+00 + CVs 20 + 5.1200339208598167e-01 2.1565166816754186e-01 -2.6910393925536541e-01 + 9.1850500881053876e-01 3.5376179192801277e-01 -5.2607676090013933e-01 + 1.2998012771034058e+00 4.6550189251293722e-01 -7.9555910568417154e-01 + 1.6906126073949592e+00 5.7169913881509493e-01 -1.0895928565434745e+00 + 2.0837427083792295e+00 6.6475405058041659e-01 -1.4052248218518097e+00 + 2.4686247559038490e+00 7.3842703640189133e-01 -1.7404287350946341e+00 + 2.8363169738900909e+00 7.8792899224511226e-01 -2.0940402881476960e+00 + 3.1847124762368715e+00 8.0680882971366297e-01 -2.4636981923293755e+00 + 3.5118188906056633e+00 7.8649393787920885e-01 -2.8431286182871656e+00 + 3.8054509909318783e+00 7.2158035364683282e-01 -3.2215678606217377e+00 + 4.0525241055505319e+00 6.1241923935163944e-01 -3.5899332426911115e+00 + 4.2541751608236904e+00 4.5711889823717322e-01 -3.9477584691386829e+00 + 4.4159116969965018e+00 2.4928591318747362e-01 -4.2974450782038822e+00 + 4.5305627592822617e+00 -5.6649747337882417e-03 -4.6312127193715460e+00 + 4.5947636280995177e+00 -2.8841160934064991e-01 -4.9340564498484802e+00 + 4.6170333200292273e+00 -5.9001272148290651e-01 -5.2023026907684802e+00 + 4.6074179133434257e+00 -9.1557450574837329e-01 -5.4402003761676738e+00 + 4.5688152148589056e+00 -1.2597965970941831e+00 -5.6436811210417064e+00 + 4.4929153109664783e+00 -1.5889786904467940e+00 -5.7928753902112389e+00 + id 13751 + loc 7.4999436736106873e-02 3.1179493665695190e-01 415 + blend 0.0000000000000000e+00 + interp 4.3302170637900317e-01:3.1360170421993738e-01:1.1566163592296896e-02:3.1093480836060283e-01:6.7970269080890766e-01:2.4988810710503490e-01:1.2238199275497228e+00:4.3301737616193942e-01:2.2171890485094474e+00:3.5812042511627828e-01:2.9532222102057224e+00:2.8201236152652476e-01:3.3783071369636408e+00 + CVs 20 + 1.2574865923623479e-01 1.1672900739224040e-01 -2.3746867172722386e-01 + 2.1875943233465894e-01 2.0886478340084574e-01 -4.0779018947411544e-01 + 3.0471996216715347e-01 2.6736143920106098e-01 -5.3467225574860233e-01 + 3.9661056636924713e-01 3.1126426922723688e-01 -6.4390673718290414e-01 + 4.9278009967519715e-01 3.3923737904885587e-01 -7.3372337230443074e-01 + 5.8995036957897706e-01 3.4990643500274621e-01 -8.0254696341628007e-01 + 6.8365043414260285e-01 3.4317130644160820e-01 -8.4989541422156245e-01 + 7.6894793175289333e-01 3.2090258742376310e-01 -8.7726996916937161e-01 + 8.4112222391174229e-01 2.8589700501599769e-01 -8.8762742816689633e-01 + 8.9545023326435280e-01 2.3978417500417976e-01 -8.8331749515444558e-01 + 9.2749370001390841e-01 1.8441838290427559e-01 -8.6628314715499688e-01 + 9.3664522170051256e-01 1.2340860266253506e-01 -8.3924259206943896e-01 + 9.2719393861366473e-01 5.9703659079580196e-02 -8.0549433940922932e-01 + 9.0440946460402660e-01 -6.8144963126559599e-03 -7.6738994646664427e-01 + 8.7111853183597443e-01 -7.7007642218005268e-02 -7.2398026525850101e-01 + 8.2653594156644994e-01 -1.4962105927175062e-01 -6.7212472001056567e-01 + 7.6458555841666853e-01 -2.2098465951322827e-01 -6.1117638089617021e-01 + 6.7545293731235478e-01 -2.8558499477706956e-01 -5.4587379181989237e-01 + 6.1842184006608281e-01 -3.9816165707211981e-01 -4.9591321347854922e-01 + id 13752 + loc 6.1097222566604614e-01 3.4924149513244629e-02 412 + blend 0.0000000000000000e+00 + interp 5.3681456063568145e-01:2.6523060321164416e-01:2.9556788056101624e-02:4.0220484955116359e-01:6.2378497828785728e-01:5.1976467063639797e-01:1.1393395073272705e+00:3.6675349282548647e-01:1.6708662953071884e+00:5.3680919249007508e-01:2.0757038840899273e+00:3.7145159054372417e-01:2.7651903226267800e+00:3.3326295564065961e-01:3.0566888752840242e+00:3.7586069219284829e-01:3.6075270756357525e+00 + CVs 20 + -4.2940809545815128e-01 7.4526336265017173e-02 2.1314613512055516e-01 + -7.3722422189246384e-01 1.0217969643250474e-01 3.9424732257609962e-01 + -1.0171441614595764e+00 1.1776446350454733e-01 5.7019159950722476e-01 + -1.3074710621558046e+00 1.4279909342622771e-01 7.4781858114760635e-01 + -1.6042947757837758e+00 1.7810715675344002e-01 9.2547205232742447e-01 + -1.9039553374364444e+00 2.2298755516188784e-01 1.1023279457291932e+00 + -2.2035008310100581e+00 2.7564815826581057e-01 1.2763121458767790e+00 + -2.5012135752148472e+00 3.3321832743609558e-01 1.4441909635043826e+00 + -2.7970465010321659e+00 3.9147170618628058e-01 1.6034684365131406e+00 + -3.0917683863424834e+00 4.4587251910869985e-01 1.7519594075614933e+00 + -3.3846332545494398e+00 4.9566966467067664e-01 1.8842605141177513e+00 + -3.6700354332381702e+00 5.4687991490636612e-01 1.9905226081747158e+00 + -3.9400825724893132e+00 6.0274734715819123e-01 2.0686664374996151e+00 + -4.1953945760915836e+00 6.5022865217570991e-01 2.1377739363459507e+00 + -4.4362687377104928e+00 6.7371837181285610e-01 2.2214097464872973e+00 + -4.6501778536633127e+00 6.7531641518105001e-01 2.3225680201651135e+00 + -4.8206492404394758e+00 6.6836265433118025e-01 2.4290562136708558e+00 + -4.9400042687144143e+00 6.5961458149422381e-01 2.5377643871079205e+00 + -4.9872379327950611e+00 5.7422340760155532e-01 2.7627676960193215e+00 + id 13753 + loc 5.7301420718431473e-02 5.3926122188568115e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7507292425256342e-01:4.7506817352332092e-01:4.8897326576679356e-01:3.0563332897901041e-01:9.8526728549568021e-01:3.5744963750946157e-01:1.8264153335398028e+00:2.9488520026238874e-01:2.2234371873100258e+00:3.6890163382492008e-01:3.0435151153310498e+00:4.3242620799317594e-01:3.9915438811662911e+00 + CVs 20 + 2.0579017153333168e-01 2.5599499351406413e-01 -2.6827141915204894e-01 + 4.4066778352281377e-01 5.1799954056804520e-01 -5.4495510110089262e-01 + 6.8661200983044679e-01 7.9765363948457091e-01 -8.0748148135051556e-01 + 9.2613057753287009e-01 1.0827420803872903e+00 -1.0633943441165394e+00 + 1.1368367338513408e+00 1.3793744304981914e+00 -1.3400776020797485e+00 + 1.2822755916926036e+00 1.6825752554358246e+00 -1.6631184530680163e+00 + 1.3293868479656414e+00 1.9442368626379478e+00 -2.0441251450734685e+00 + 1.2730366919450355e+00 2.0714935987056022e+00 -2.4707195599370229e+00 + 1.1315852586519026e+00 1.9597345501547021e+00 -2.8918555214547683e+00 + 9.4764064026560924e-01 1.5925948216454155e+00 -3.2018161053288043e+00 + 7.8880986927571228e-01 1.1306614828057935e+00 -3.3633780703618847e+00 + 6.8487406150944741e-01 7.1618672395448579e-01 -3.4865711802085557e+00 + 6.3995350027604370e-01 3.6407623061323247e-01 -3.6578895576282573e+00 + 6.7877552623608028e-01 6.7136984351658269e-02 -3.8892742864172858e+00 + 8.4720660334452458e-01 -1.5409128269212330e-01 -4.1554285935820809e+00 + 1.2213766226017246e+00 -2.3941594656652390e-01 -4.3852106894538760e+00 + 1.8610406291874964e+00 -3.7330386595780030e-02 -4.4163981943789876e+00 + 2.4668846045675341e+00 4.8497307696047043e-01 -4.1760437268611525e+00 + 2.6612539579684107e+00 3.8918054876356178e-01 -4.4328895437705622e+00 + id 13754 + loc 1.8186901509761810e-01 5.5097740888595581e-01 401 + blend 0.0000000000000000e+00 + interp 4.0346724912025655e-01:2.9587963250298316e-01:4.7885878377113111e-02:2.9518902220028820e-01:9.7358577522663658e-01:3.2152389969138417e-01:1.6322666665376153e+00:3.2204688671042003e-01:2.3114776652073852e+00:4.0346321444776539e-01:3.0135280111605116e+00:3.6855233139098742e-01:3.6047337693837078e+00 + CVs 20 + -7.0506101758875520e-02 2.6611542480774780e-01 -2.7607224323364921e-01 + -1.2665499643458100e-01 5.4449353373506848e-01 -5.4032254028159798e-01 + -1.7866556263593764e-01 8.3363268745860764e-01 -8.1477614994109215e-01 + -2.3750738057321358e-01 1.1272685396461597e+00 -1.1160427920333496e+00 + -3.1864134284026169e-01 1.4160854279112030e+00 -1.4527279558060271e+00 + -4.4703306478891947e-01 1.6882534896989843e+00 -1.8274187689295427e+00 + -6.5255803867462348e-01 1.9277254179673471e+00 -2.2318288907164225e+00 + -9.5601023406199714e-01 2.1149319449533364e+00 -2.6450799199553687e+00 + -1.3595390109765941e+00 2.2313819172830711e+00 -3.0392945731784420e+00 + -1.8462570572840340e+00 2.2633456478106528e+00 -3.3887716459975366e+00 + -2.3878167396903036e+00 2.2021914118851100e+00 -3.6776910553351105e+00 + -2.9555733583454042e+00 2.0393509741951759e+00 -3.8961673390884703e+00 + -3.5209156596120721e+00 1.7699125076234661e+00 -4.0262681092991004e+00 + -4.0514619525879363e+00 1.4198900916555306e+00 -4.0313681928610645e+00 + -4.5150566802335677e+00 1.0696162537454610e+00 -3.8625579157730359e+00 + -4.8701446909614692e+00 8.2948720092619666e-01 -3.5043858070795917e+00 + -5.0621795352238292e+00 7.9006394241034861e-01 -3.0190200300621362e+00 + -5.0571994019585000e+00 9.3849336510509729e-01 -2.5279519871207121e+00 + -5.1503932185599695e+00 8.7695292535553060e-01 -2.1887437707792801e+00 + id 13755 + loc 5.5545020103454590e-01 6.2157750129699707e-01 402 + blend 0.0000000000000000e+00 + interp 4.5703254993000464e-01:3.3690673706139768e-01:2.9733200606942201e-01:4.1287900129179322e-01:9.4434323817868437e-01:3.7147065137529783e-01:1.7977639498640983e+00:4.5702797960450536e-01:2.2797052596634990e+00:4.2467601977797342e-01:2.8894255545316225e+00:3.6904332649450522e-01:3.2133794873737620e+00:3.3668024606578684e-01:3.9460109964056533e+00 + CVs 20 + 7.7128872543511820e-02 3.5195275962423095e-01 -2.9470864253310386e-01 + 1.3476975503659377e-01 7.0226614406254106e-01 -6.1093755781416026e-01 + 1.8792416694914268e-01 1.0515974579472678e+00 -9.4245951220323199e-01 + 1.9164843599674508e-01 1.4047295626517546e+00 -1.2934881262575952e+00 + 9.9022965042225741e-02 1.7364592963094911e+00 -1.6541447936519951e+00 + -1.0632915985656843e-01 2.0019834699795411e+00 -2.0051336927190677e+00 + -3.9441543380691690e-01 2.1516407741933330e+00 -2.3240332857469426e+00 + -6.6308202529394689e-01 2.1689793112813334e+00 -2.5902207188837769e+00 + -8.5689150244578516e-01 2.1023439762645175e+00 -2.8065310836560120e+00 + -9.9660894354022989e-01 1.9861221770471285e+00 -2.9853847388818036e+00 + -1.1373331118698720e+00 1.8250774751155909e+00 -3.1550524127391619e+00 + -1.3392684553766654e+00 1.5965259703339085e+00 -3.3512362427933802e+00 + -1.6101963983041210e+00 1.3373828940758559e+00 -3.5530392705549558e+00 + -1.9096946541779372e+00 1.1450421567977216e+00 -3.7078558476750638e+00 + -2.1791149082876404e+00 1.0503648347413077e+00 -3.7913024036653926e+00 + -2.4180628643744435e+00 1.0137421884080613e+00 -3.8221144019960467e+00 + -2.6655637854172571e+00 1.0038510249663504e+00 -3.8394694576378194e+00 + -2.9275471958348787e+00 1.0034519164074047e+00 -3.9007579922634261e+00 + -3.1586811850550345e+00 1.0069341875281941e+00 -4.0997231874037077e+00 + id 13756 + loc 3.3611303567886353e-01 5.8485233783721924e-01 403 + blend 0.0000000000000000e+00 + interp 3.8378509991157017e-01:2.9700219739602773e-01:5.0924510849876814e-02:3.8378126206057106e-01:9.9984043983374482e-01:3.0673417566548639e-01:1.8462059304352736e+00:2.9425651433436989e-01:2.6837133856739039e+00:3.7451795399800131e-01:3.4550463466984862e+00 + CVs 20 + -1.2282939295819792e-02 1.4565808945948730e-01 -1.2103922759570142e-01 + -3.2695999179474244e-02 2.9642988791344188e-01 -2.3824945201600400e-01 + -6.8921543193181251e-02 4.4603682872917183e-01 -3.5573243066220239e-01 + -1.2496521597973498e-01 5.8873385182589488e-01 -4.7471755189870962e-01 + -2.0140663353441735e-01 7.1931088287705625e-01 -5.9331056394538362e-01 + -2.9744394935780277e-01 8.3378946101763884e-01 -7.0877369574669546e-01 + -4.1025155023579385e-01 9.2925744494386431e-01 -8.1788011796231352e-01 + -5.3453892642092060e-01 1.0041794358732696e+00 -9.1804215146868062e-01 + -6.6378177727752141e-01 1.0586174275576741e+00 -1.0078957011038918e+00 + -7.9141696825744101e-01 1.0936018765736615e+00 -1.0871886796210051e+00 + -9.1136161164655904e-01 1.1115533712993524e+00 -1.1566850253792647e+00 + -1.0193591306914103e+00 1.1170903147940172e+00 -1.2182800266677130e+00 + -1.1147725056856386e+00 1.1163988202604291e+00 -1.2747360173494362e+00 + -1.1998806211642865e+00 1.1154874016875367e+00 -1.3290922126733076e+00 + -1.2770248433661158e+00 1.1188900372812913e+00 -1.3846742586995526e+00 + -1.3494322436620263e+00 1.1295952875981727e+00 -1.4444958913749473e+00 + -1.4159100665134456e+00 1.1517717490230253e+00 -1.5085336629304547e+00 + -1.4701045028606692e+00 1.1907734446477258e+00 -1.5720490932426390e+00 + -1.4517573688124559e+00 1.1888109435698451e+00 -1.5794485741727153e+00 + id 13757 + loc 6.4666157960891724e-01 4.9583002924919128e-02 376 + blend 0.0000000000000000e+00 + interp 5.7089755024919708e-01:3.0966564980965722e-01:4.4691328094994098e-02:5.7089184127369463e-01:8.3485486836415879e-01:5.6611687514050402e-01:1.3750907190673327e+00:4.4140344610101673e-01:1.9532624635446840e+00:1.2060287853717425e-01:2.2173851633937298e+00:3.3866171250400240e-01:3.2075935299166618e+00 + CVs 20 + 1.5491165432084458e-01 3.8721917005907841e-01 -4.6327091267389958e-01 + 2.4205946459785971e-01 6.7684185029334587e-01 -8.5404620567712786e-01 + 2.8540309490002475e-01 8.6011394802841457e-01 -1.2582991053266241e+00 + 3.0283949911589381e-01 9.3754276613040655e-01 -1.6929964467926397e+00 + 3.1434444392755528e-01 9.6155434801980921e-01 -2.1474128983138954e+00 + 3.5595344398270828e-01 9.8303085789728495e-01 -2.6161789406142528e+00 + 4.7192079411989762e-01 1.0101309774318945e+00 -3.0892481855950673e+00 + 6.8727492650159538e-01 1.0366123020361815e+00 -3.5449328528268014e+00 + 9.9971348584938569e-01 1.0676521173985845e+00 -3.9529227693494460e+00 + 1.3877660896394906e+00 1.1080482413139721e+00 -4.2953555759096798e+00 + 1.8046742727027030e+00 1.1437960846862874e+00 -4.5754740840800956e+00 + 2.1945470279816250e+00 1.1593250717472969e+00 -4.8017188019941850e+00 + 2.5347815513044507e+00 1.1463087803743561e+00 -4.9849899261959782e+00 + 2.8301969878525006e+00 1.0940625822137966e+00 -5.1350807448348839e+00 + 3.1072680084006228e+00 9.9195042097010910e-01 -5.2508858914840655e+00 + 3.4121532102334315e+00 7.8811585885892832e-01 -5.3051750841340919e+00 + 3.7031743782328812e+00 4.2360413065387093e-01 -5.2931013650555094e+00 + 3.8338195756159719e+00 -6.3822442221905362e-02 -5.3169979832089087e+00 + 3.7636629008422604e+00 -4.6692380208712825e-01 -5.4531632211344778e+00 + id 13758 + loc 1.3806749880313873e-01 3.8843885064125061e-01 393 + blend 0.0000000000000000e+00 + interp 4.0256992440667250e-01:2.8082081336054238e-01:1.9216218186862699e-02:3.8154778830547775e-01:9.9999992060306575e-01:2.8167449002279366e-01:1.5307353428009192e+00:3.9171480191130592e-01:2.4715842226136431e+00:2.9317061190350846e-01:3.0070143615471077e+00:4.0256589870742843e-01:3.6406213979050390e+00 + CVs 20 + -1.6907863524337360e-01 3.5339630743855788e-01 2.7047719839523354e-01 + -3.2625380714490887e-01 7.1991148961792739e-01 5.2695579978371598e-01 + -4.9355835474033122e-01 1.0924945320360340e+00 7.6472950035205578e-01 + -6.8376544147353813e-01 1.4586479912605836e+00 9.9135031805677698e-01 + -9.0154697725118205e-01 1.8051242180942455e+00 1.2209569523296695e+00 + -1.1465609894858377e+00 2.1189158665566108e+00 1.4664274653995117e+00 + -1.4155094404006969e+00 2.3863548691990304e+00 1.7373672967160139e+00 + -1.7055183760944386e+00 2.5949220279005241e+00 2.0395583650737450e+00 + -2.0124574659397161e+00 2.7360314689013396e+00 2.3735485943196384e+00 + -2.3265714224699923e+00 2.8085333844642406e+00 2.7337532160716029e+00 + -2.6308199661403191e+00 2.8215749748154506e+00 3.1080168093563727e+00 + -2.9053032389903910e+00 2.7944847363208360e+00 3.4775000211011760e+00 + -3.1468173694915000e+00 2.7519430276037413e+00 3.8233437109566784e+00 + -3.3780186686705593e+00 2.7150656438055529e+00 4.1285968880490849e+00 + -3.6189118643209035e+00 2.6967523284764052e+00 4.3584709138862321e+00 + -3.8778230967058023e+00 2.6884339614843262e+00 4.4480118889941176e+00 + -4.1856472905377711e+00 2.6404108246740261e+00 4.3782099250722082e+00 + -4.4994174534260907e+00 2.5263739611939533e+00 4.3187437728051785e+00 + -4.4475833490033718e+00 2.5607990387867599e+00 4.5534214302244385e+00 + id 13759 + loc 2.6354792714118958e-01 1.3745422661304474e-01 400 + blend 0.0000000000000000e+00 + interp 4.8512164282728248e-01:2.7328687445408356e-01:1.6158276899889901e-01:4.8511679161085425e-01:9.8981049486372974e-01:4.4162459924296865e-01:1.1951521536901355e+00:3.5481213357946789e-01:1.9906295282809148e+00:4.3372197809385538e-01:2.8570443603204683e+00:3.1100673888841007e-01:3.1642645739234165e+00 + CVs 20 + -1.3771791496333680e-01 1.4615631958313882e-01 2.1216799964709124e-01 + -2.6863901982607630e-01 3.0127105016630118e-01 4.2704255428356991e-01 + -3.9428695977689410e-01 4.6529967067758576e-01 6.3271058081450104e-01 + -5.1676060017359970e-01 6.3815111449497475e-01 8.2345909484018776e-01 + -6.3877063072280338e-01 8.1933495960378866e-01 1.0016021974623350e+00 + -7.6435546867772297e-01 1.0075614246427969e+00 1.1722417391091442e+00 + -9.0145037271544015e-01 1.1987778496881534e+00 1.3456727401691420e+00 + -1.0627926637721323e+00 1.3819959984366035e+00 1.5342217383419274e+00 + -1.2617143967557285e+00 1.5366120740376983e+00 1.7432322199478247e+00 + -1.5007439125894075e+00 1.6395393206365241e+00 1.9668879067877250e+00 + -1.7649323021176913e+00 1.6760430604696468e+00 2.1968012206916119e+00 + -2.0310754728927232e+00 1.6442229015543830e+00 2.4256419127066482e+00 + -2.2884574524723407e+00 1.5578383112125258e+00 2.6416454848307671e+00 + -2.5426349677710447e+00 1.4356619494523424e+00 2.8293661544117144e+00 + -2.7777169519787508e+00 1.2801826457502452e+00 2.9690898477473091e+00 + -2.9152987014320488e+00 1.0711934389485629e+00 3.0355498067892532e+00 + -2.8785553827650894e+00 7.2538292769677915e-01 3.0308147676933861e+00 + -2.8875594255855317e+00 2.5529713139152044e-01 3.0397377576083717e+00 + -3.0949400312563440e+00 2.5801283833782929e-01 3.0173025107179963e+00 + id 13760 + loc 9.5409709215164185e-01 2.3286901414394379e-01 374 + blend 0.0000000000000000e+00 + interp 4.4922523086102883e-01:3.0322156380778337e-01:5.7445733129387277e-02:2.2682021719503498e-01:9.6754070374427881e-01:3.7303429552804857e-01:1.1989005875833585e+00:4.0147898740566040e-01:1.9437505642296575e+00:4.3557172683616635e-01:2.0701585458058407e+00:4.4922073860872025e-01:2.6580830462555061e+00:3.0050757177156423e-01:3.1606239206823168e+00 + CVs 20 + 7.4871027173083471e-01 4.1272124826425366e-01 4.6008629825178970e-01 + 1.3206614868354891e+00 6.7259554538875055e-01 7.6217486699263515e-01 + 1.8955006331940825e+00 8.3335659536066731e-01 9.7436722926625263e-01 + 2.5333812181383233e+00 9.3217034716478775e-01 1.1385458041546115e+00 + 3.2120269849179142e+00 9.8500566759400343e-01 1.2792475943689607e+00 + 3.9083937229103736e+00 9.9301639622157711e-01 1.4282492905224562e+00 + 4.5992575382727514e+00 9.2996478503765967e-01 1.6080348411538241e+00 + 5.2599210796813667e+00 7.6574853284038080e-01 1.8275817427323391e+00 + 5.8698714118004069e+00 4.8931053483669995e-01 2.0837004025494967e+00 + 6.4171321066426410e+00 1.0634816299404148e-01 2.3655845229566861e+00 + 6.8827670654459947e+00 -3.5892077314351356e-01 2.6440218248478820e+00 + 7.2528696366948679e+00 -8.6260972693280280e-01 2.8806873817458070e+00 + 7.5361394741558758e+00 -1.3613562425584429e+00 3.0627548740819477e+00 + 7.7575093059354066e+00 -1.8351841554564068e+00 3.2105734897732336e+00 + 7.9320312145615270e+00 -2.2829262260152441e+00 3.3434228430648480e+00 + 8.0716779278970598e+00 -2.6882651259728223e+00 3.4816950430587750e+00 + 8.1893070650673607e+00 -3.0353745748970313e+00 3.6339979894198984e+00 + 8.2931110873881799e+00 -3.3333982371984905e+00 3.8030911306589372e+00 + 8.4429016838640489e+00 -3.6062374139954319e+00 3.9590712529323362e+00 + id 13761 + loc 4.0746515989303589e-01 4.1120257228612900e-02 396 + blend 0.0000000000000000e+00 + interp 5.0956913950430149e-01:3.2212593907348408e-01:5.3832366627563644e-01:3.4038222641363580e-01:1.4360609473302040e+00:4.0542820127512125e-01:2.0001070155406202e+00:5.0956404381290643e-01:2.5117844463791910e+00:4.7498173927091447e-01:2.9492085462541962e+00:3.4381140167916813e-01:3.2524329944992529e+00:4.7334034734470509e-01:3.9884572097104645e+00 + CVs 20 + -2.7027215727827608e-01 1.9095544991816632e-01 -5.7198955156441000e-01 + -4.8344128999773711e-01 2.8528869854077321e-01 -1.0234210589525796e+00 + -6.7457538629994773e-01 3.4800051283129441e-01 -1.4528965638791418e+00 + -8.5800275714280416e-01 4.0940985274488917e-01 -1.9067792468711273e+00 + -1.0361794857045006e+00 4.6772793111954902e-01 -2.3836197864552870e+00 + -1.2167975655400849e+00 5.2020104968995939e-01 -2.8809530429279788e+00 + -1.4104359315442425e+00 5.6187969308243790e-01 -3.3939495362836820e+00 + -1.6250674808855485e+00 5.8141096744702847e-01 -3.9166208871496351e+00 + -1.8656324962313831e+00 5.5890525865738483e-01 -4.4445580262835245e+00 + -2.1390790111622184e+00 4.7051448354274750e-01 -4.9701012011069174e+00 + -2.4549314533390056e+00 3.0577214536780017e-01 -5.4739288632717056e+00 + -2.8090926671526182e+00 7.1904891175590180e-02 -5.9323756214773109e+00 + -3.1856685660641784e+00 -2.1238402496844522e-01 -6.3353905776419701e+00 + -3.5727822835899614e+00 -5.3185595194170299e-01 -6.6862675309350159e+00 + -3.9633074319154424e+00 -8.7799910180852914e-01 -6.9890210060827673e+00 + -4.3470717472767539e+00 -1.2497561868604143e+00 -7.2462417597373889e+00 + -4.7091884911278035e+00 -1.6530438374212748e+00 -7.4606493011994193e+00 + -5.0319288655623975e+00 -2.0783966466202566e+00 -7.6344607628389607e+00 + -5.2615571264234635e+00 -2.3026582008485699e+00 -7.7912177191198673e+00 + id 13762 + loc 9.1822499036788940e-01 2.0898211002349854e-01 382 + blend 0.0000000000000000e+00 + interp 4.0744068797887578e-01:2.9172484319981429e-01:3.7406849423054633e-01:3.9531923326892804e-01:9.1637537128285596e-01:4.0743661357199601e-01:1.7378757614043834e+00:3.0522116104535041e-01:1.9972519388980512e+00:2.9401314497617603e-01:2.6510068029921605e+00:3.7062708722452214e-01:3.6047495917866508e+00 + CVs 20 + -8.0148171061403606e-01 1.4862437625191149e-01 5.5717241214061186e-01 + -1.3378893787316146e+00 2.0497608249247545e-01 9.8305785529260070e-01 + -1.8044025808292758e+00 2.3940075487234264e-01 1.3857698944979857e+00 + -2.2817273514526941e+00 2.8294520560580605e-01 1.8093827631582706e+00 + -2.7648184949889618e+00 3.1811225702032575e-01 2.2524518140992793e+00 + -3.2500977078306965e+00 3.1995953724403503e-01 2.7121301609285542e+00 + -3.7343435086247774e+00 2.5751652499569377e-01 3.1798053335503100e+00 + -4.2125547819390388e+00 1.0136185601341463e-01 3.6320984243282819e+00 + -4.6669235551492951e+00 -1.6881980978038591e-01 4.0352022762803879e+00 + -5.0696229249118812e+00 -5.4799102973323421e-01 4.3539788684236269e+00 + -5.3940016008117917e+00 -1.0038975292074492e+00 4.5673734394653707e+00 + -5.6246319323292990e+00 -1.4896281315457445e+00 4.6724676447837554e+00 + -5.7652302980769505e+00 -1.9691634277765571e+00 4.6818133896354244e+00 + -5.8389518107223894e+00 -2.4595034522224584e+00 4.6253988654788909e+00 + -5.8729190591284510e+00 -3.0207309618876739e+00 4.5465061913363698e+00 + -5.8995195097946223e+00 -3.6704327832364751e+00 4.4903872945128374e+00 + -5.9482336738627044e+00 -4.3601144218621464e+00 4.4900856862294924e+00 + -6.0149740382522587e+00 -5.0196992027255405e+00 4.5540428687435224e+00 + -6.0702765145409057e+00 -5.5262330433934865e+00 4.6284473291862120e+00 + id 13763 + loc 9.0496903657913208e-01 3.6099666357040405e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6300229050054720e-01:4.0880013208096094e-01:4.8256085905443713e-01:2.7333448697274010e-01:1.0382112691646506e+00:4.6299766047764224e-01:1.9568280888491136e+00:2.8514310780161656e-01:2.6172918242012972e+00:3.5410664286745086e-01:3.1489060368862032e+00:2.9042668212876971e-01:3.9067384539543903e+00 + CVs 20 + -1.3573372218670832e-01 3.2182985819009258e-01 1.5916866284993211e-01 + -2.9246899417161387e-01 6.5886011318606630e-01 3.2660064499404562e-01 + -4.6255957154348076e-01 9.7994610532476112e-01 5.3919672662721596e-01 + -6.3701013662423989e-01 1.2543524565007687e+00 8.1502080725010173e-01 + -8.0590041723748440e-01 1.4559477227834623e+00 1.1519680449676650e+00 + -9.5440732391397365e-01 1.5626726969686442e+00 1.5347946356321245e+00 + -1.0632998334648187e+00 1.5632859054541477e+00 1.9365649702763235e+00 + -1.1111169634837734e+00 1.4615507774139957e+00 2.3211399601686145e+00 + -1.0827429655556873e+00 1.2784840200867982e+00 2.6466906205256415e+00 + -9.8063451155314352e-01 1.0513739216086020e+00 2.8763743992201096e+00 + -8.2686545398915190e-01 8.2624281000851496e-01 2.9905781299158605e+00 + -6.5499385221962769e-01 6.3879173743853546e-01 3.0055192053974698e+00 + -4.8333231115906145e-01 4.8173551367808876e-01 2.9765369873867602e+00 + -2.9857275580998632e-01 3.0026229771796531e-01 2.9606853660986054e+00 + -6.9391904611369987e-02 2.0928385746863398e-02 3.0100579004230918e+00 + 2.2821057428974653e-01 -3.5316840192697474e-01 3.2123905496117673e+00 + 5.5982169581248675e-01 -6.5327093544705583e-01 3.6216290852386965e+00 + 8.8514018742464828e-01 -6.8875743680957568e-01 4.2438292550557080e+00 + 9.8915295618865229e-01 -6.2687488816667347e-01 4.3314634017651210e+00 + id 13764 + loc 9.5218795537948608e-01 1.3383752107620239e-01 375 + blend 0.0000000000000000e+00 + interp 3.1918273384739465e-01:2.4909463138907045e-01:4.6885161184078672e-01:2.5637772549716370e-01:1.7797016558132897e+00:3.1917954202005622e-01:2.9098333669060112e+00:2.7207432089924766e-01:3.8090762190726641e+00 + CVs 20 + 6.8471778949725903e-01 4.1533606040938215e-01 9.3527010176933364e-02 + 1.2480996487078833e+00 6.4508988846285720e-01 1.0794237000454218e-01 + 1.8006497957788208e+00 7.1746657805670422e-01 4.0704201387545713e-02 + 2.3876425277021895e+00 7.0572038556356875e-01 -9.4724135983155711e-02 + 3.0039323620227325e+00 6.9160238072337732e-01 -2.6171507593324883e-01 + 3.6539902231001817e+00 7.1563803508353308e-01 -3.9691317177399132e-01 + 4.3434768600709015e+00 7.7786310201503528e-01 -4.3755553133878566e-01 + 5.0563608611973612e+00 8.7201407750438786e-01 -3.4086477796501069e-01 + 5.7604019837368741e+00 9.8980815560593438e-01 -8.9994808769898738e-02 + 6.4312259918580672e+00 1.1002336507562758e+00 3.0912977079021409e-01 + 7.0463675623188733e+00 1.1416732555518401e+00 8.3161898783955701e-01 + 7.5630792510336216e+00 1.0369224754601376e+00 1.4413329499278209e+00 + 7.9182344547116204e+00 7.3379682305813354e-01 2.0793743371068993e+00 + 8.0596334057361219e+00 2.4822439951011965e-01 2.6687948960419519e+00 + 7.9903456550448198e+00 -3.5926880863124921e-01 3.0922978836220150e+00 + 7.9095024340541462e+00 -9.8119298341811279e-01 3.1749433321612397e+00 + 8.0793801351142047e+00 -1.4170866973546676e+00 2.8578922525777313e+00 + 8.3699828814503299e+00 -1.6052433258812124e+00 2.4955623501884503e+00 + 8.4713798856143718e+00 -2.0757106308363218e+00 2.5400283585348880e+00 + id 13765 + loc 9.3149209022521973e-01 2.6503002643585205e-01 399 + blend 0.0000000000000000e+00 + interp 5.2717289788342880e-01:2.9093477939953927e-01:9.0410808820364785e-02:4.3845038097280065e-01:1.0788571338668942e+00:5.2716762615445001e-01:1.8570658702539080e+00:4.2575492532511344e-01:2.1024561115047513e+00:3.0372689264516872e-01:2.8274650229970559e+00:4.0500760772635275e-01:3.1325710284252186e+00 + CVs 20 + 2.6857285859898894e-01 3.2026670653121664e-01 2.3321962691949111e-01 + 5.0835738035869438e-01 6.1726721562627251e-01 4.7283258810129680e-01 + 7.0788031772680449e-01 8.8489532972627472e-01 7.6945714411375188e-01 + 8.6686476177662908e-01 1.1164638715650530e+00 1.1229789706467144e+00 + 9.9447066591548250e-01 1.3106311100373031e+00 1.5139876998539459e+00 + 1.0997125217767345e+00 1.4672025465994101e+00 1.9236653685133094e+00 + 1.1884191446600667e+00 1.5868740490223692e+00 2.3349461026617266e+00 + 1.2656572797324874e+00 1.6731983963012542e+00 2.7338046102774030e+00 + 1.3403095839486674e+00 1.7321887413860737e+00 3.1122630342277993e+00 + 1.4232429844663845e+00 1.7716909390036073e+00 3.4717955631132229e+00 + 1.5261229535719794e+00 1.7914874140379831e+00 3.8214502693144636e+00 + 1.6558009451065545e+00 1.7748773437135446e+00 4.1604882643013159e+00 + 1.8074766770072437e+00 1.7083812248858583e+00 4.4627523923661796e+00 + 1.9653657073594522e+00 1.5945155853768049e+00 4.6786262368038098e+00 + 2.1313910592851957e+00 1.4432679690278474e+00 4.7619678522691604e+00 + 2.3711027985715925e+00 1.2515934712786614e+00 4.7036459251977680e+00 + 2.7724182546612415e+00 9.8389172806394587e-01 4.5849126464131116e+00 + 3.2335414901959321e+00 7.0456307630435111e-01 4.6549578520333110e+00 + 3.3896649130805732e+00 6.8528807652028645e-01 4.9973631773187295e+00 + id 13766 + loc 5.6953501701354980e-01 5.7269185781478882e-02 380 + blend 0.0000000000000000e+00 + interp 4.2105623054482388e-01:3.1182962523215813e-01:9.5332797510113476e-02:4.0944656001282514e-01:9.1883450657796151e-01:4.2105201998251846e-01:1.3584641833141671e+00:2.8933453893121802e-01:2.0451224159729859e+00:2.9423467815147619e-01:3.2761178308481722e+00 + CVs 20 + 6.5302019545428258e-01 2.6008811692519906e-01 5.5041388049247186e-01 + 1.1579495173665975e+00 3.9432662944204555e-01 9.2645745096717136e-01 + 1.6092223884170258e+00 4.7780304404257024e-01 1.2522376813792575e+00 + 2.0502219186048150e+00 5.4587733010621631e-01 1.5790999793277469e+00 + 2.4832181718320738e+00 6.0085643439078651e-01 1.9061002057808250e+00 + 2.9134685272627134e+00 6.4233515952649445e-01 2.2380914646745289e+00 + 3.3499689639700474e+00 6.6299961457083945e-01 2.5849382370928260e+00 + 3.7964390996172472e+00 6.4672621465535762e-01 2.9590933952935865e+00 + 4.2417583878662244e+00 5.7152400929049252e-01 3.3704686481457804e+00 + 4.6644769660773679e+00 4.1781403677712214e-01 3.8167030179921135e+00 + 5.0467207121650901e+00 1.7365225202039314e-01 4.2787904724792991e+00 + 5.3736218322806844e+00 -1.6811177853643811e-01 4.7269974928450837e+00 + 5.6215851175222848e+00 -6.0881378665618779e-01 5.1272825263939588e+00 + 5.7670423352356046e+00 -1.1320085180176034e+00 5.4513853947619140e+00 + 5.8141586145199469e+00 -1.6980135809924550e+00 5.6995883346703629e+00 + 5.7985012517585552e+00 -2.2613794875159057e+00 5.9011187740334758e+00 + 5.7671764532142289e+00 -2.7956776887730235e+00 6.0795156963227335e+00 + 5.7631400473038550e+00 -3.2949792258532731e+00 6.2359065254850385e+00 + 5.7761155436758642e+00 -3.6792877721144817e+00 6.3389657114802276e+00 + id 13767 + loc 1.2697117030620575e-01 5.1304286718368530e-01 409 + blend 0.0000000000000000e+00 + interp 3.0297441462597913e-01:2.4796117077759594e-01:5.3096646586902474e-01:3.0297138488183289e-01:1.6878057804452116e+00:2.4367783182903152e-01:2.5937514030437825e+00:2.9389483993668514e-01:3.6429190769946436e+00 + CVs 20 + 4.9935084375034033e-01 2.1526107319646820e-01 -2.7432105246501015e-01 + 9.4356141330455401e-01 3.8255867320921422e-01 -5.2863201557079653e-01 + 1.3988164230373530e+00 5.3879101724259471e-01 -7.8062924860590832e-01 + 1.8698345088298265e+00 6.7424071282303599e-01 -1.0465357784623983e+00 + 2.3291155829709576e+00 7.5903327024638312e-01 -1.3411805286288865e+00 + 2.7551446028889242e+00 7.7378536783633600e-01 -1.6697705563007508e+00 + 3.1398841822790393e+00 7.1067876666939411e-01 -2.0192079667096947e+00 + 3.4894352898963428e+00 5.7110953091050387e-01 -2.3626614831574160e+00 + 3.8130388001658861e+00 3.6351942385099312e-01 -2.6716780938533367e+00 + 4.1064522098465055e+00 9.8373253131513572e-02 -2.9270645902344850e+00 + 4.3612017501808866e+00 -2.2360788464206216e-01 -3.1393643097346722e+00 + 4.5793919820002955e+00 -6.2671341679820136e-01 -3.3519139694630828e+00 + 4.7521945228136779e+00 -1.1155881121573299e+00 -3.6078793406800829e+00 + 4.8638687700527576e+00 -1.6498786316016623e+00 -3.9431064773679583e+00 + 4.9105937144389618e+00 -2.1810595566243740e+00 -4.3760926417707955e+00 + 4.9094749593949008e+00 -2.6897107602806916e+00 -4.9011503081120997e+00 + 4.9062970795291978e+00 -3.2024571924791072e+00 -5.4960364890894153e+00 + 4.9505712106929876e+00 -3.7450437523027640e+00 -6.1159460979360549e+00 + 5.0292316900397367e+00 -4.2930456815914670e+00 -6.6996388232517887e+00 + id 13768 + loc 7.4870014190673828e-01 2.9561021924018860e-01 378 + blend 0.0000000000000000e+00 + interp 3.6979323756211813e-01:3.0069080515262697e-01:1.8340545031805189e-01:3.6348799634141954e-01:1.0005985915597733e+00:3.6978953962974254e-01:1.9343368238700522e+00:3.0883506659538473e-01:2.3789944149470346e+00:3.1502161769922948e-01:3.1763815005311820e+00 + CVs 20 + -3.8925770112292130e-01 3.8318674395732072e-01 -7.4248627338989404e-02 + -7.7482599899012172e-01 7.2436871981490170e-01 -1.3020378138470301e-01 + -1.1711715013544557e+00 1.0326095874965993e+00 -1.6566265626015150e-01 + -1.5745723492011525e+00 1.3242785360457783e+00 -1.9129829383680358e-01 + -1.9786226071148512e+00 1.6046469222035602e+00 -2.2577705051171998e-01 + -2.3924331396283272e+00 1.8645132314430004e+00 -2.8756829473675877e-01 + -2.8279093317455022e+00 2.0849830600174561e+00 -3.9065317135008581e-01 + -3.2840870069699903e+00 2.2439646416980219e+00 -5.4190494387141164e-01 + -3.7490309326568489e+00 2.3200096490239930e+00 -7.3761900290383275e-01 + -4.2046566322848449e+00 2.2929858641551935e+00 -9.5822729077150504e-01 + -4.6258593720627044e+00 2.1480311010493489e+00 -1.1710680830308380e+00 + -4.9795721966498530e+00 1.8857819655221419e+00 -1.3395178327153243e+00 + -5.2405570200155021e+00 1.5399015669308267e+00 -1.4379243100536494e+00 + -5.4276237568405623e+00 1.1613119283516391e+00 -1.4800748263233787e+00 + -5.5934848309093681e+00 7.6815434757953716e-01 -1.5091582465313449e+00 + -5.7791473202480663e+00 3.7350056481060534e-01 -1.5462487365112174e+00 + -5.9994714735832586e+00 1.6894408955678841e-02 -1.5718932646964796e+00 + -6.2445157837197254e+00 -2.8904963163951614e-01 -1.5707346991422075e+00 + -6.4849535786335251e+00 -6.2233565341882402e-01 -1.5986145706173980e+00 + id 13769 + loc 8.8581097126007080e-01 8.7428021430969238e-01 1068 + blend 0.0000000000000000e+00 + interp 3.9233511001476062e-01:3.9233118666366051e-01:7.4375793989069794e-01:2.3800448332457105e-01:1.0195682322437984e+00:3.5275877385268911e-01:1.9978110124925750e+00:2.4498384353911229e-01:2.4042910051363804e+00:3.0382647666310569e-01:3.1132399789548590e+00:2.5690605042074427e-01:3.9446327958907514e+00 + CVs 20 + 1.6731067660555604e-01 4.0440784964685822e-01 -3.6150730023582556e-01 + 3.4664355558773391e-01 7.7249948359815523e-01 -6.8273011087506219e-01 + 5.4198377733852099e-01 1.1058003000857715e+00 -9.8096957228742521e-01 + 7.5333328672921995e-01 1.3909345241889213e+00 -1.2668490876509031e+00 + 9.7377100468451183e-01 1.6020128965069631e+00 -1.5409110058179305e+00 + 1.1909884098572481e+00 1.7206406871971374e+00 -1.8011245134171574e+00 + 1.3987142659165810e+00 1.7496877133586790e+00 -2.0472978329364655e+00 + 1.5971523404209322e+00 1.7062254716177720e+00 -2.2852869328300320e+00 + 1.7863837812226899e+00 1.6092391008880886e+00 -2.5254855657815174e+00 + 1.9672444414571701e+00 1.4729467336214515e+00 -2.7835945558400246e+00 + 2.1395040978347111e+00 1.3047938122787488e+00 -3.0812342540976831e+00 + 2.3039157536201191e+00 1.1040718915609857e+00 -3.4446461172425553e+00 + 2.4491592954678230e+00 8.8237040094773711e-01 -3.8774086555727232e+00 + 2.5486949434808110e+00 6.6655773844991417e-01 -4.3566341438260654e+00 + 2.5709325158371517e+00 4.7025411725892452e-01 -4.8669946961664881e+00 + 2.4852304227595079e+00 3.0781340708598126e-01 -5.4044057848567624e+00 + 2.2783427057189987e+00 2.2392129266232641e-01 -5.9358874733998848e+00 + 1.9832336972822056e+00 2.2616949270383158e-01 -6.4361026757783897e+00 + 1.6605260398758608e+00 1.7270725408880061e-01 -7.0455275537351909e+00 + id 13770 + loc 5.7166647911071777e-01 5.2470877766609192e-02 407 + blend 0.0000000000000000e+00 + interp 4.2757193829521628e-01:3.2313079184033694e-01:1.7640862165715587e-01:3.8128019621995507e-01:1.0192086246374166e+00:2.1245963460898706e-01:2.0143438085408052e+00:4.2756766257583334e-01:2.9098338398021295e+00:3.4887880039105829e-01:3.2178269462382527e+00:4.2241153203493126e-01:3.9582152862580937e+00 + CVs 20 + -3.0434611634727787e-01 3.6290412773639147e-01 4.1479765470947824e-02 + -4.1778532065396290e-01 5.8668949675683590e-01 6.3526835761201189e-02 + -4.7291463534045475e-01 7.5869427453622662e-01 7.1240243602700842e-02 + -5.3458580219310103e-01 9.2005836613833014e-01 6.4076786066361274e-02 + -5.9990406888416437e-01 1.0653125536604815e+00 3.8973855985170808e-02 + -6.6584811404969269e-01 1.1886846965356046e+00 -6.7537467535690177e-03 + -7.2940500194586677e-01 1.2843766616383006e+00 -7.5088363368214922e-02 + -7.8830729979393288e-01 1.3476037747331604e+00 -1.6677601045449542e-01 + -8.4229105455879527e-01 1.3755043544859800e+00 -2.8169597799069462e-01 + -8.9325131676632119e-01 1.3662827224993370e+00 -4.1959247125123988e-01 + -9.4396840747974631e-01 1.3178736215846529e+00 -5.7888883673273483e-01 + -9.9678245060273085e-01 1.2280858799209948e+00 -7.5522252009367152e-01 + -1.0542029862391284e+00 1.0958957638494784e+00 -9.4296321657330562e-01 + -1.1233825150362093e+00 9.2443351426134002e-01 -1.1404607238666999e+00 + -1.2194488201792213e+00 7.2501559686605954e-01 -1.3521371509194033e+00 + -1.3589774046934540e+00 5.1744655719682919e-01 -1.5793582699346520e+00 + -1.5496135654007324e+00 3.2259996117436640e-01 -1.8131330872120015e+00 + -1.7851471370098244e+00 1.5668873595339111e-01 -2.0410299977817865e+00 + -1.9924905407299356e+00 -6.3689920194739402e-03 -2.2318030814201362e+00 + id 13771 + loc 7.6557683944702148e-01 7.2112478315830231e-02 415 + blend 0.0000000000000000e+00 + interp 4.9173257122541070e-01:4.9172765389969847e-01:2.3253359361929649e-01:3.5624859985317692e-01:9.2315269680111944e-01:4.4921613723643800e-01:1.4310875619920318e+00:3.2705924758631472e-01:1.9766728955248345e+00:3.5650008566933489e-01:2.5573635861361055e+00:4.3760377754766810e-01:2.9969697691076549e+00:3.4645188320315001e-01:3.8256511334992576e+00 + CVs 20 + -1.4565070289228926e-01 1.0756861479225840e-01 1.6656698409486706e-02 + -2.7083613070457158e-01 1.9276573519932896e-01 5.1331980316934769e-02 + -3.9183450680353071e-01 2.7397185725085993e-01 8.7664199867786424e-02 + -5.1229543095238972e-01 3.5762656887898681e-01 1.1291539227735342e-01 + -6.3266065714038877e-01 4.4228408176130829e-01 1.2768272686598786e-01 + -7.5442567347731671e-01 5.2644575681022376e-01 1.3284391846613092e-01 + -8.7732599601372629e-01 6.0798734635124119e-01 1.2643747024134283e-01 + -9.9859793479621883e-01 6.8378037719337259e-01 1.0545429722980798e-01 + -1.1166495080724488e+00 7.5093890394229279e-01 7.0092031266283106e-02 + -1.2305039422927300e+00 8.0747738067627028e-01 2.1891473879054102e-02 + -1.3222380978235035e+00 8.5359123165585760e-01 -4.4759589438501002e-02 + -1.3401165239846919e+00 8.9638152218227973e-01 -1.4942508895821144e-01 + -1.2446621223431045e+00 9.5070020115345610e-01 -3.2894551794288418e-01 + -1.1003845267681485e+00 1.0197599181851738e+00 -6.0644469934704659e-01 + -1.0149649965935577e+00 1.0836431995316240e+00 -9.3724790022195381e-01 + -1.0134332942756001e+00 1.1262330078818619e+00 -1.2826138545664683e+00 + -1.0875431750687661e+00 1.1355590331585406e+00 -1.6454951298936114e+00 + -1.2381571502596460e+00 1.0973066144563863e+00 -2.0039599470176026e+00 + -1.3606311016717858e+00 9.8908206667697529e-01 -2.0336509847241220e+00 + id 13772 + loc 1.9859462976455688e-01 3.5388472676277161e-01 412 + blend 0.0000000000000000e+00 + interp 3.7703994569711813e-01:3.1493400175710579e-01:6.6714563477329325e-01:3.3708453328917143e-01:1.6224177736932159e+00:3.0843940045756257e-01:2.0839025588047755e+00:3.7703617529766115e-01:2.9309719802962837e+00:3.6010245256451301e-01:3.4175721839203530e+00:2.7413082122621218e-01:3.9962184962379901e+00 + CVs 20 + -1.2736435152835113e-01 1.7024104347283447e-01 -5.7640891061412891e-01 + -2.3808346247067011e-01 2.3891587186676955e-01 -9.9075726429297217e-01 + -3.2592569899901802e-01 2.7629356998467669e-01 -1.3843527829875006e+00 + -3.8403039892076551e-01 3.0800989166865839e-01 -1.8144068256310013e+00 + -4.0704001118235605e-01 3.2769959648876235e-01 -2.2742294708591855e+00 + -3.8867922097579349e-01 3.3052332763979708e-01 -2.7541130853434947e+00 + -3.2470319027214278e-01 3.1314289610813573e-01 -3.2440389336648741e+00 + -2.1640849886987534e-01 2.7256773263281708e-01 -3.7348177215663574e+00 + -6.8293619963558094e-02 2.0774339470327541e-01 -4.2163875703615741e+00 + 1.1229234118069364e-01 1.1814831322421648e-01 -4.6810923249517069e+00 + 2.9975523815957639e-01 -1.5473221183271546e-02 -5.1408221292654535e+00 + 4.3440290345964022e-01 -2.4363569504800919e-01 -5.6251937247355777e+00 + 4.5636096117332015e-01 -5.9259963279314665e-01 -6.1228178404200095e+00 + 3.6781331237906351e-01 -1.0237626471175596e+00 -6.5851343823499509e+00 + 1.9719721103521159e-01 -1.4978145798265636e+00 -6.9881853647846315e+00 + -5.8045008754175620e-02 -1.9947007257523452e+00 -7.3198267866273277e+00 + -4.0096307616588500e-01 -2.4875039723632990e+00 -7.5663926345223658e+00 + -7.8646823369894758e-01 -2.9407519999507676e+00 -7.7389592779329721e+00 + -9.9543949766755335e-01 -3.3036560937184705e+00 -7.9765370428599773e+00 + id 13773 + loc 9.5536291599273682e-01 4.2721423506736755e-01 402 + blend 0.0000000000000000e+00 + interp 3.8799949487135632e-01:2.2787633613647010e-01:1.0331017413248595e+00:3.8799561487640760e-01:2.0564000242758018e+00:2.7999172342148704e-01:2.6911022896871550e+00:3.5502885670410783e-01:3.0244243060772908e+00:2.5047140474241614e-01:3.8505363583873189e+00 + CVs 20 + 3.2336111114857562e-02 2.2228584887442981e-01 2.8696356865598277e-01 + 8.1506781719404731e-02 4.6687281467619296e-01 5.5088911628800252e-01 + 1.3493025634623590e-01 7.4386244087033560e-01 8.0251574654747948e-01 + 1.9268788910734766e-01 1.0405507782398116e+00 1.0256904278501104e+00 + 2.4375878054413647e-01 1.3647330307201719e+00 1.2016776862432414e+00 + 2.7938103396472891e-01 1.7209180055562645e+00 1.5137004548222910e+00 + 4.5579305389519442e-01 1.9808944684494980e+00 1.9030634290242634e+00 + 7.7472714309936741e-01 2.1604599646745402e+00 2.2247506550417135e+00 + 1.1756359590485914e+00 2.2665173012075299e+00 2.4935597332999229e+00 + 1.6144460019434992e+00 2.2643343364462494e+00 2.7661429748942257e+00 + 2.0125223865581821e+00 2.1131442860161367e+00 3.0460584946047420e+00 + 2.2749920788720814e+00 1.8284900575781291e+00 3.2827097341527738e+00 + 2.4063211970846319e+00 1.4683378629693173e+00 3.4534248820102693e+00 + 2.4889568791992120e+00 1.0662491260715932e+00 3.5811797699173016e+00 + 2.6196602307552137e+00 6.4534604789781524e-01 3.6983887723208850e+00 + 2.8875408350406446e+00 2.5351862819199278e-01 3.8301312123493041e+00 + 3.3021597968194523e+00 -7.0046017004950167e-02 4.0067650141154498e+00 + 3.7889506060795171e+00 -3.2693388957214498e-01 4.2748601464408793e+00 + 4.2619568036473465e+00 -5.2579927468758569e-01 4.6678988416597385e+00 + id 13774 + loc 3.1350529193878174e-01 9.2365908622741699e-01 401 + blend 0.0000000000000000e+00 + interp 4.8334115254469773e-01:2.9111822396644216e-01:4.1995899260832226e-01:3.2931323652272526e-01:1.0213399679436350e+00:4.1431941185632060e-01:1.7990161304673231e+00:4.8333631913317232e-01:2.0783200752233002e+00:3.5519817829959188e-01:2.7431286032685152e+00:3.1001671043486689e-01:3.2496148862233287e+00 + CVs 20 + -7.2841931103587498e-02 2.9498478711862314e-01 -1.2227859807766453e-01 + -1.2641248521197365e-01 5.9471894532660385e-01 -2.6536507504072915e-01 + -1.5558800581187215e-01 9.0746689702234762e-01 -4.1772748878735971e-01 + -1.5797903981202333e-01 1.2358135695902019e+00 -5.8091029403505390e-01 + -1.2934355537080711e-01 1.5653035091944951e+00 -7.6767385769180563e-01 + -7.4219773783724130e-02 1.8853252392746498e+00 -9.9037649718824161e-01 + -2.4663944243455083e-02 2.2052984897784258e+00 -1.2637062112735180e+00 + -3.1631345235670794e-02 2.5337378110735593e+00 -1.5992487245049001e+00 + -1.4663410026300916e-01 2.8522295506371083e+00 -1.9922961207722210e+00 + -4.0076864732352457e-01 3.1206264979090079e+00 -2.4123728303184118e+00 + -7.9243067635907538e-01 3.3080008986604241e+00 -2.8219957905976258e+00 + -1.2912231947178290e+00 3.3936534663430891e+00 -3.1993356382111608e+00 + -1.8381444584487234e+00 3.3569141313546784e+00 -3.5615011004127783e+00 + -2.3745777542304767e+00 3.1846344482716393e+00 -3.9420489011003372e+00 + -2.8518204156881626e+00 2.9060143237583160e+00 -4.3236613795276639e+00 + -3.1795663175469739e+00 2.6439544377290733e+00 -4.6533831841473257e+00 + -3.2859096213737864e+00 2.5258737726691791e+00 -4.9093807342448574e+00 + -3.2967152924200112e+00 2.4678745494402561e+00 -5.1806335387398041e+00 + -3.5154935852297982e+00 2.2070310012991428e+00 -5.7670386280228252e+00 + id 13775 + loc 7.3789134621620178e-03 6.4545303583145142e-01 395 + blend 0.0000000000000000e+00 + interp 4.5952646917191048e-01:3.4144085560726534e-01:6.6604236892931934e-02:4.5952187390721877e-01:7.8213223438584700e-01:2.8332942377873183e-01:1.1431687322555173e+00:3.4043036719824121e-01:2.2619568180276968e+00:3.7084153430990835e-01:2.9972016619877841e+00:3.5100599830421303e-01:3.4771964799021107e+00 + CVs 20 + 3.9863760228847228e-01 1.4819756251759303e-01 -2.2510800893710609e-01 + 7.4224221805590673e-01 2.5206449531895048e-01 -4.3639181938110372e-01 + 1.0771686600892700e+00 3.4489026879899620e-01 -6.3707056240226223e-01 + 1.4241907644394951e+00 4.4042981643672752e-01 -8.2669075705094563e-01 + 1.7823265802045754e+00 5.3306786417672503e-01 -1.0012507214362110e+00 + 2.1491026479040682e+00 6.1667345255115136e-01 -1.1592465048832703e+00 + 2.5220253113922322e+00 6.8451475336561218e-01 -1.3010249287007702e+00 + 2.8992345951605003e+00 7.2704770416151354e-01 -1.4269271137575648e+00 + 3.2773679861777167e+00 7.3205982403881786e-01 -1.5373529714405909e+00 + 3.6482821899370057e+00 6.8763758492343086e-01 -1.6355812799504532e+00 + 3.9981822464192476e+00 5.8543491543008397e-01 -1.7273433208557309e+00 + 4.3116366193282598e+00 4.2519487789556853e-01 -1.8142048236989079e+00 + 4.5778419339443914e+00 2.1570044665971899e-01 -1.8920894761508400e+00 + 4.7920910952483240e+00 -3.0047832327135371e-02 -1.9565874699703789e+00 + 4.9526262741594103e+00 -2.9807835533184601e-01 -2.0056410423654336e+00 + 5.0586718000632693e+00 -5.7194206715030615e-01 -2.0378690990991615e+00 + 5.1120370813849956e+00 -8.3227080324750213e-01 -2.0518991312265680e+00 + 5.1200315532224669e+00 -1.0660093288597920e+00 -2.0485773918806185e+00 + 5.0798209748423648e+00 -1.3278008826060361e+00 -2.0336033157097271e+00 + id 13776 + loc 1.0603331774473190e-01 5.9649723768234253e-01 379 + blend 0.0000000000000000e+00 + interp 4.6440577758380353e-01:2.1799112132870677e-01:1.0580403441059738e-01:4.3934265332188482e-01:7.7802209139413125e-01:3.1265744906373827e-01:1.6678312698753062e+00:3.4897093030563908e-01:2.0921818369788521e+00:4.6440113352602769e-01:2.6942461153262505e+00:3.8503578402177269e-01:3.0052168039776248e+00:4.2370409235979328e-01:3.3316273143483928e+00:3.8435433246496009e-01:3.9160604857010952e+00 + CVs 20 + -2.1642365213616430e-01 2.3238180921486584e-01 2.8077729107221128e-01 + -4.0756405542050150e-01 3.9755276549726798e-01 5.4251928174950759e-01 + -5.8988088169205666e-01 4.7676301843965835e-01 8.3557325139083760e-01 + -7.7286795697305666e-01 4.7889666065266967e-01 1.2228484366336017e+00 + -9.4411985130442744e-01 4.6052864843489350e-01 1.6875987382721052e+00 + -1.1125090173638517e+00 4.7726208436085826e-01 2.1711063440828502e+00 + -1.3204748108769910e+00 5.5292408278928251e-01 2.6374866321060511e+00 + -1.6105727527889933e+00 6.9974144629241564e-01 3.0666792269477323e+00 + -1.9857033834587101e+00 9.1224591297201507e-01 3.4161914831740514e+00 + -2.4041917333633132e+00 1.1461004167344362e+00 3.6461115059282463e+00 + -2.8126976848557752e+00 1.3340173896930636e+00 3.7603654207850070e+00 + -3.1624282819802074e+00 1.4248503039283382e+00 3.7905239644526709e+00 + -3.4067020696520327e+00 1.4033868425419469e+00 3.7698732094493406e+00 + -3.5323175217767608e+00 1.3044428225147688e+00 3.7310309866751563e+00 + -3.5605174708189296e+00 1.1821360762871103e+00 3.7013892981436651e+00 + -3.5036147310996100e+00 1.0932883363899477e+00 3.7348286535591311e+00 + -3.3506358431661578e+00 1.1591403470324844e+00 3.9177977172382423e+00 + -3.1771795837688384e+00 1.4797363166883435e+00 4.1417691623998696e+00 + -3.3607803248393893e+00 1.1767324630996265e+00 4.2865404841970776e+00 + id 13777 + loc 8.2998555898666382e-01 9.1554528474807739e-01 374 + blend 0.0000000000000000e+00 + interp 5.4462531599983621e-01:3.1123767753156623e-01:3.3038482930696222e-03:5.0002446284515845e-01:9.6333806681600176e-01:3.2943008621527703e-01:1.3713173318222744e+00:3.4539735416790546e-01:2.1504673064911453e+00:3.6455428511158966e-01:2.7512781654110938e+00:5.4461986974667620e-01:3.0320248206511824e+00 + CVs 20 + -6.3025998512421233e-01 3.1442527157651301e-01 -2.8404399056129520e-01 + -1.1331081218868775e+00 5.0352870380485304e-01 -4.9015594196192352e-01 + -1.6217506767322685e+00 6.2795899836701374e-01 -6.8047828728390103e-01 + -2.1351035677425201e+00 7.2396833613078437e-01 -8.9411129808286716e-01 + -2.6509356858976920e+00 8.0368636874807953e-01 -1.1465911281486181e+00 + -3.1460149471646899e+00 8.6603544371142127e-01 -1.4447110193813173e+00 + -3.6108582703023626e+00 8.9860847832394386e-01 -1.7839796264400993e+00 + -4.0443420988917360e+00 8.9165427189135382e-01 -2.1507188942898674e+00 + -4.4535915902859955e+00 8.4144347352494586e-01 -2.5293055651410077e+00 + -4.8551113641767021e+00 7.4241621178225881e-01 -2.9051013461306701e+00 + -5.2606113374869317e+00 5.8591396472542767e-01 -3.2566343788194754e+00 + -5.6680432920407693e+00 3.6568553740043264e-01 -3.5604623635206591e+00 + -6.0687707356696947e+00 7.7774047057289852e-02 -3.8056943975032365e+00 + -6.4518268257588183e+00 -2.6744952292145729e-01 -3.9908404642211606e+00 + -6.8083220485132312e+00 -6.2886875277074683e-01 -4.1253837553816073e+00 + -7.1355248360665149e+00 -9.5663876907328005e-01 -4.2419525188294713e+00 + -7.4323359676967238e+00 -1.2190351645261210e+00 -4.3693235390646796e+00 + -7.7267417891259917e+00 -1.4166105065850112e+00 -4.5089743191748504e+00 + -8.1274731559461415e+00 -1.6042908304786940e+00 -4.6426237685577618e+00 + id 13778 + loc 6.0757821798324585e-01 9.3540722131729126e-01 1069 + blend 0.0000000000000000e+00 + interp 5.5866187412467849e-01:2.9297116046878552e-01:2.7866879970574121e-01:4.5451489081634339e-01:8.7959707691539368e-01:5.5865628750593732e-01:1.2718167597274093e+00:4.5922922075601974e-01:2.0011381597577609e+00:3.5274748939187567e-01:2.4409504241593081e+00:3.4756237315112509e-01:3.2259587577846820e+00:3.7565305422502548e-01:3.9547051800065534e+00 + CVs 20 + 1.6105930494619353e-01 2.3349627371267662e-01 -1.0107877048592512e-01 + 2.9509661084746475e-01 4.6662285270124848e-01 -2.2707097960947165e-01 + 4.3276920176790723e-01 6.9000559016749818e-01 -3.7479209461426788e-01 + 5.9987123782022578e-01 8.8354565849573941e-01 -5.3605213961749354e-01 + 8.0240917461962780e-01 1.0202016986600693e+00 -7.0179323389779680e-01 + 1.0293651808355437e+00 1.0805585412788683e+00 -8.6679013161097973e-01 + 1.2717972334101328e+00 1.0845625762824411e+00 -1.0414217213060415e+00 + 1.5267722690569208e+00 1.0811342071243515e+00 -1.2351196912894018e+00 + 1.7739320369530969e+00 1.1035773425376525e+00 -1.4229307438585075e+00 + 1.9834442363647271e+00 1.1303856612788359e+00 -1.5356204673917691e+00 + 2.1775043526207849e+00 1.1325930554454646e+00 -1.4842328276192580e+00 + 2.4075276951846294e+00 1.1963782641018159e+00 -1.3024513789725054e+00 + 2.6097356402462588e+00 1.3680126051517041e+00 -1.1620220629505504e+00 + 2.7194581503997819e+00 1.5783140808024219e+00 -1.1057601269460324e+00 + 2.7277803456889842e+00 1.7517511052616963e+00 -1.1097626288653824e+00 + 2.6720931208894392e+00 1.8899325002462863e+00 -1.1501537794543863e+00 + 2.5760800353119948e+00 2.0536777917245281e+00 -1.2432149997449007e+00 + 2.4640958666473147e+00 2.1828897671792529e+00 -1.4064382746683324e+00 + 2.5545027108098717e+00 1.9091955309840776e+00 -1.3883438038576708e+00 + id 13779 + loc 2.2929564118385315e-01 9.1354680061340332e-01 396 + blend 0.0000000000000000e+00 + interp 4.8829201616864204e-01:3.6953791582831397e-01:4.1763381757516149e-02:3.8608103434930047e-01:9.0160480001946763e-01:4.8828713324848039e-01:1.1541999290485094e+00:4.5040098682086843e-01:1.6385287794534649e+00:2.8544961754358966e-01:2.0111198324505231e+00:2.6340692141115296e-01:2.7715022922704975e+00:3.7033093699651909e-01:3.5578731871260429e+00 + CVs 20 + 9.3322046165006234e-01 3.1693518685588301e-01 -2.1510192036445594e-01 + 1.5782106950589063e+00 4.5178765926001896e-01 -3.8267937927083301e-01 + 2.1737649009756623e+00 5.2238189516807343e-01 -5.4355067088284470e-01 + 2.8201602555201841e+00 5.7600993587119986e-01 -7.1719088800677600e-01 + 3.5046562388882605e+00 5.9828596267401135e-01 -9.0829701465944179e-01 + 4.2072336572791631e+00 5.7351681355103379e-01 -1.1240004533187016e+00 + 4.9031903665755348e+00 4.8697032337617496e-01 -1.3702253907051127e+00 + 5.5664628544234818e+00 3.2425180432163370e-01 -1.6448109278784839e+00 + 6.1684836828629095e+00 7.6940108471997615e-02 -1.9377933102984981e+00 + 6.6763692043054608e+00 -2.4679795571129537e-01 -2.2365449540672544e+00 + 7.0658072202477786e+00 -6.2008788145086524e-01 -2.5255318669147631e+00 + 7.3400482414932222e+00 -1.0136993757260457e+00 -2.7871578067083851e+00 + 7.5220721538207007e+00 -1.4094847840583056e+00 -3.0068660709828468e+00 + 7.6361364226869002e+00 -1.7941956024284720e+00 -3.1735760860658333e+00 + 7.7057214196022548e+00 -2.1620350403636373e+00 -3.2830412185710003e+00 + 7.7509092581112098e+00 -2.5221321582455856e+00 -3.3434266804778154e+00 + 7.7784671218640344e+00 -2.8850078565970207e+00 -3.3658432869015993e+00 + 7.7753161655959033e+00 -3.2480998495338436e+00 -3.3467408424031797e+00 + 7.6643777164165652e+00 -3.6035873654404424e+00 -3.2642655758830372e+00 + id 13780 + loc 7.9805600643157959e-01 1.5391421318054199e-01 403 + blend 0.0000000000000000e+00 + interp 3.6460415179908584e-01:2.9007104842691722e-01:1.7879617066870579e-02:3.2878577232451739e-01:7.5841440003522964e-01:2.7365435024973878e-01:1.8469229820041493e+00:3.2514201839596985e-01:2.7312020035910014e+00:3.6460050575756786e-01:3.2598156302903174e+00 + CVs 20 + -9.0875003957574710e-02 3.1778066569304453e-01 2.3379915172227922e-01 + -1.4812349537714362e-01 6.1650323338650415e-01 4.4368887887115699e-01 + -2.0964939016582335e-01 9.1910602013998466e-01 6.6106699365831822e-01 + -2.8855088777451482e-01 1.2221863016339916e+00 9.0468505718650127e-01 + -3.8111043844860631e-01 1.5083969766942136e+00 1.1818182277434026e+00 + -4.7471537944448605e-01 1.7670146520303367e+00 1.4925618525166957e+00 + -5.5022129252456220e-01 1.9992227777838192e+00 1.8380031113462205e+00 + -5.8497542381617029e-01 2.2070318605966528e+00 2.2223058588438716e+00 + -5.5432700640311017e-01 2.3829090387984855e+00 2.6445947223813513e+00 + -4.3752208340739052e-01 2.5110928552362557e+00 3.0915631579066383e+00 + -2.2703387288452226e-01 2.5752638852082206e+00 3.5385330330329539e+00 + 6.6342272168575578e-02 2.5624515177834164e+00 3.9571189778658553e+00 + 4.1481011330056328e-01 2.4594038509765905e+00 4.3315491725267483e+00 + 7.8849128509346311e-01 2.2554273058501324e+00 4.6559953175282764e+00 + 1.1587131012204859e+00 1.9607119229936107e+00 4.9002668309836999e+00 + 1.4967356953862352e+00 1.6123794730027001e+00 5.0269997654466376e+00 + 1.8155711479579324e+00 1.2322458106448915e+00 5.0882261640678639e+00 + 2.1503972078069689e+00 8.2291736584617026e-01 5.2264676910780619e+00 + 2.4861679343367746e+00 4.1242753976458285e-01 5.4967824615483662e+00 + id 13781 + loc 7.3637646436691284e-01 4.5776432752609253e-01 400 + blend 0.0000000000000000e+00 + interp 5.0898829770636711e-01:3.9209271914593041e-01:1.3108857033745758e-02:3.5875707435112164e-01:5.8304444828595692e-01:2.7698306987872889e-01:1.5042195946715440e+00:3.9141804622480675e-01:2.0057051861428277e+00:5.0898320782339002e-01:2.5394092740867711e+00:4.3943413241419388e-01:2.9984228584438455e+00:3.2192753894999371e-01:3.5039139815523899e+00 + CVs 20 + 1.2946699876877207e-01 1.3712459163657795e-01 2.5040343882797661e-01 + 2.5485603095234532e-01 2.7305221497936599e-01 5.1528865148440339e-01 + 3.8176105931066351e-01 4.0664729674992695e-01 7.9574521836374035e-01 + 5.1329815135654955e-01 5.3819058986813306e-01 1.0920812624422407e+00 + 6.5143504751762205e-01 6.7044747824334028e-01 1.4050942343767336e+00 + 7.9793610131695825e-01 8.0830133709100016e-01 1.7325287120141826e+00 + 9.5243882389770462e-01 9.5363197852788895e-01 2.0701646236121363e+00 + 1.1126515361388858e+00 1.0979442546826514e+00 2.4172204045775532e+00 + 1.2752774948822161e+00 1.2260106268766726e+00 2.7777292484317706e+00 + 1.4347196033874288e+00 1.3240513764563271e+00 3.1555579882135740e+00 + 1.5805598503665745e+00 1.3806909572613157e+00 3.5526607595873472e+00 + 1.6973755409521287e+00 1.3838671588162412e+00 3.9689995581487292e+00 + 1.7687012560148796e+00 1.3209503439472561e+00 4.3982388025334238e+00 + 1.7809476701833149e+00 1.1825029783771523e+00 4.8251326298024644e+00 + 1.7257941646343333e+00 9.6338662190870661e-01 5.2264497602863882e+00 + 1.6060497019823055e+00 6.6404382982123877e-01 5.5720016108118999e+00 + 1.4378610706734376e+00 3.0420003398370499e-01 5.8352617414969794e+00 + 1.2466805405457200e+00 -5.6800221887939983e-02 6.0227399431694240e+00 + 1.0853032205808684e+00 -2.7576486750286300e-01 6.2093768153962756e+00 + id 13782 + loc 2.3017965257167816e-01 8.4877055883407593e-01 393 + blend 0.0000000000000000e+00 + interp 4.2848537172434098e-01:3.1804300215144787e-01:2.9590165086528053e-01:4.2848108687062375e-01:9.5522604660871069e-01:3.9715526681054475e-01:1.4339042765512273e+00:3.5479817890501125e-01:2.0311529937923019e+00:3.0555146261084914e-01:3.0299392346939245e+00:3.9433496652363603e-01:3.9086114394244640e+00 + CVs 20 + -2.2905817408714155e-01 4.3096160555761742e-01 -3.1077420684419171e-01 + -4.3607115833200771e-01 8.7213215101378705e-01 -6.1933988459841927e-01 + -6.2897891484808488e-01 1.3223890163409426e+00 -9.2049081656979970e-01 + -8.4995627458566769e-01 1.7752781512601443e+00 -1.2056327502540536e+00 + -1.1372360051274641e+00 2.2080294572379033e+00 -1.4588299062331418e+00 + -1.5020914320280383e+00 2.5838284847679751e+00 -1.6659195876837400e+00 + -1.9258433147583407e+00 2.8609307508183384e+00 -1.8237582665309420e+00 + -2.3686413220813320e+00 3.0120955603146138e+00 -1.9369996209585376e+00 + -2.7842407944158332e+00 3.0387403994592468e+00 -2.0103108471450013e+00 + -3.1288916121923296e+00 2.9670254968196410e+00 -2.0474870841935409e+00 + -3.4130891829401593e+00 2.8324565358898215e+00 -2.0512216067057452e+00 + -3.6632367102800711e+00 2.6620215797008910e+00 -2.0308481307074833e+00 + -3.8680883941886202e+00 2.4845123156921067e+00 -1.9870071399125739e+00 + -4.0334505470042545e+00 2.3191501519991098e+00 -1.9173274110744873e+00 + -4.1899529738855046e+00 2.1507391190112219e+00 -1.8502039570192639e+00 + -4.3248231209779631e+00 1.9557654561221796e+00 -1.8497070657430092e+00 + -4.4109892946885338e+00 1.7213499496676281e+00 -1.9578890061518111e+00 + -4.5080276730687876e+00 1.4163053913458878e+00 -2.1116820874533446e+00 + -4.7517184265417667e+00 9.9164490551828965e-01 -2.1103979771098347e+00 + id 13783 + loc 3.1312844157218933e-01 6.8069881200790405e-01 373 + blend 0.0000000000000000e+00 + interp 4.6985788148325541e-01:4.6094131501529839e-01:5.3137216649324681e-01:3.4349168886755332e-01:1.2498016862169541e+00:4.2756622983911613e-01:1.9876211917652595e+00:3.5906238092085224e-01:2.6331107487926069e+00:4.6985318290444061e-01:3.1191138615780942e+00:3.4031277747120769e-01:3.9773451963652215e+00 + CVs 20 + -4.2430177955994575e-01 5.9655102178804720e-01 -1.6923623295921744e-01 + -7.7711129929188183e-01 1.1472989315433881e+00 -3.5957677742330374e-01 + -1.0491634467344322e+00 1.6772050914669863e+00 -5.9039688594199635e-01 + -1.2352040367748200e+00 2.1947712576732687e+00 -8.7327080655458644e-01 + -1.3433207876495550e+00 2.6773092688535658e+00 -1.2008361035764186e+00 + -1.4106963632006051e+00 3.0984639935545477e+00 -1.5539770063894247e+00 + -1.4770294938553448e+00 3.4482922779825849e+00 -1.9153754212867662e+00 + -1.5673281907053060e+00 3.7366628491286384e+00 -2.2755214651727718e+00 + -1.6923459278255615e+00 3.9787381897296070e+00 -2.6306040379676769e+00 + -1.8564552264369985e+00 4.1852437068978459e+00 -2.9780522381676917e+00 + -2.0768219422316911e+00 4.3594561814617574e+00 -3.3312765842662841e+00 + -2.3963818597169579e+00 4.4866444616052252e+00 -3.7159476842167836e+00 + -2.8299094116340426e+00 4.5322893746798023e+00 -4.1296956421223303e+00 + -3.3285987712165852e+00 4.4681115773681324e+00 -4.5454593924914954e+00 + -3.8361302664603683e+00 4.3075684065329227e+00 -4.9339849518564209e+00 + -4.3486579780928665e+00 4.0695532061233832e+00 -5.2984989467279888e+00 + -4.9273112359995359e+00 3.6986586246485094e+00 -5.6842541221236456e+00 + -5.6548862208812762e+00 3.0956330175004920e+00 -6.0661420674011604e+00 + -5.7781538884753232e+00 2.5237690483470221e+00 -5.9335659484955015e+00 + id 13784 + loc 6.1086249351501465e-01 6.2453347444534302e-01 375 + blend 0.0000000000000000e+00 + interp 5.0939164505004830e-01:4.0704068956015005e-01:9.4737008682148849e-02:2.8546925465439338e-01:8.9394089684560574e-01:5.0938655113359788e-01:1.4552834296371173e+00:4.4461260474774411e-01:1.9344065863203150e+00:2.5616442814957330e-01:2.0789370636949491e+00:4.4581966639090531e-01:2.9858022067610595e+00:2.5023871173318962e-01:3.5569599223576298e+00 + CVs 20 + -4.8784704617623859e-01 4.4249600228644465e-01 -1.2577750037272728e-01 + -1.0048107056813433e+00 7.6059914746513968e-01 -1.8234437097974929e-01 + -1.5869607318871501e+00 9.1215452149461196e-01 -1.6195155347978879e-01 + -2.2044208413742563e+00 9.7870943028109836e-01 -8.9220454460951504e-02 + -2.8139335359537059e+00 1.0557390818782055e+00 -1.5650472291510842e-02 + -3.3929537251117048e+00 1.1761821670827892e+00 -8.6748979771171797e-03 + -3.9334151185253781e+00 1.3340096220803019e+00 -1.1507875584548266e-01 + -4.4186746449866430e+00 1.5202529987427091e+00 -3.4825876215714446e-01 + -4.8287770015853138e+00 1.7168188546514649e+00 -6.9965905565209652e-01 + -5.1636676309939187e+00 1.8845133436757233e+00 -1.1486895239097112e+00 + -5.4241029781476620e+00 1.9684828293782120e+00 -1.6658175273297315e+00 + -5.5771684095926535e+00 1.9213803938607239e+00 -2.1982631337904568e+00 + -5.5847161903711200e+00 1.7353603831291045e+00 -2.6639862422814344e+00 + -5.4420230745820612e+00 1.4726066820120987e+00 -2.9909492431067726e+00 + -5.1908172506732591e+00 1.2173110530344724e+00 -3.1483427316852564e+00 + -4.9323870661625220e+00 9.9651859406402288e-01 -3.1918290017091588e+00 + -4.7449712300356763e+00 7.0668860129018185e-01 -3.2352473104510460e+00 + -4.6356638138729718e+00 2.6260758096556458e-01 -3.3017475958318530e+00 + -4.4089913766791584e+00 -6.8218323718308493e-02 -3.4605871188697366e+00 + id 13785 + loc 2.5689068436622620e-01 2.9526728391647339e-01 1068 + blend 0.0000000000000000e+00 + interp 4.2756184025886607e-01:3.0074009103299898e-01:3.2588453068117418e-01:2.5632988498281450e-01:1.0081188647933066e+00:3.1391712597586313e-01:1.7425464131293777e+00:2.6940636141853341e-01:2.1611002530211261e+00:4.2755756464046352e-01:3.0223047212640006e+00:2.6079974481317508e-01:3.7392285060675401e+00 + CVs 20 + -1.8514402286885867e-01 2.0649341278956412e-01 -2.8494842304026946e-01 + -3.9652287985731322e-01 4.2919889646992393e-01 -5.4285837728418063e-01 + -6.3220828743684176e-01 6.4307750987146417e-01 -8.0650906982789472e-01 + -8.9274290456162997e-01 8.3685337731294385e-01 -1.0772126670464390e+00 + -1.1778069148947223e+00 1.0057082836534466e+00 -1.3372814391131256e+00 + -1.4805835711517232e+00 1.1380610066393424e+00 -1.5678713233609671e+00 + -1.7864073636531410e+00 1.2186949361449888e+00 -1.7548987094707396e+00 + -2.0726498650676222e+00 1.2351233488200983e+00 -1.8942140548015252e+00 + -2.3139925579237328e+00 1.1855936267622511e+00 -1.9918816728938793e+00 + -2.4980806028616995e+00 1.0846910044143447e+00 -2.0617129547126396e+00 + -2.6394431400731486e+00 9.5113967973278546e-01 -2.1208230958646208e+00 + -2.7734615829837148e+00 7.8842299985451159e-01 -2.1840246570409767e+00 + -2.9221363198701740e+00 5.9304657471310884e-01 -2.2627974816466994e+00 + -3.0836752523633582e+00 3.7693206534287338e-01 -2.3697767640057554e+00 + -3.2371532477176928e+00 1.7553930048105443e-01 -2.5176116829768844e+00 + -3.3310136424668149e+00 6.0269387609192038e-02 -2.6989922890011262e+00 + -3.3294094943019661e+00 8.6841539796480460e-02 -2.8437975186075350e+00 + -3.3128099311183798e+00 1.6266727139454934e-01 -2.9612242009938607e+00 + -3.3611659901768962e+00 1.6457151457164304e-01 -3.3073401663836282e+00 + id 13786 + loc 9.9664956331253052e-01 9.0324503183364868e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9421883580492939e-01:2.7759652616118047e-01:1.7505962200553304e-01:2.8657556763759962e-01:1.0260902897435769e+00:3.4178739478570208e-01:1.9937209776035756e+00:3.3680124894067209e-01:2.3836331446010033e+00:3.9421489361657136e-01:3.1128768884646729e+00:2.7823636965581716e-01:3.9229563299679175e+00 + CVs 20 + 2.0959390674008019e-01 2.0396312770940708e-01 -1.7534481167757643e-01 + 4.4059910352763920e-01 4.1843393320599370e-01 -3.4043472244486228e-01 + 6.8395005402524189e-01 6.1981381176633610e-01 -5.2675150965647721e-01 + 9.3243489948741642e-01 7.9277230945029975e-01 -7.5339329310085756e-01 + 1.1776773110537750e+00 9.2704324843473751e-01 -1.0278609979876052e+00 + 1.4063879157690553e+00 1.0108520228977671e+00 -1.3543939932650826e+00 + 1.6008577011822109e+00 1.0313827664949442e+00 -1.7307168409968186e+00 + 1.7411640729623166e+00 9.7597356344643593e-01 -2.1442282143122684e+00 + 1.8094704404538617e+00 8.3556753518380211e-01 -2.5696910505341037e+00 + 1.7979828788449708e+00 6.1153412192994916e-01 -2.9745468139411604e+00 + 1.7135611957729013e+00 3.1691552241230303e-01 -3.3266922024600043e+00 + 1.5835757210584782e+00 -2.6151947143810972e-02 -3.6019309079313588e+00 + 1.4496091094210395e+00 -3.9171943664832409e-01 -3.8013101549727089e+00 + 1.3360562421393527e+00 -7.6128844166912435e-01 -3.9397119340613354e+00 + 1.2428917065195000e+00 -1.1234840344046921e+00 -4.0262646848213137e+00 + 1.1689428067275667e+00 -1.4699779654693774e+00 -4.0911736353453936e+00 + 1.1221802957998728e+00 -1.8032654653028299e+00 -4.2379412824832521e+00 + 1.1305417108661278e+00 -2.1161550923725962e+00 -4.5744079579399086e+00 + 1.0544860255672508e+00 -2.4134807878773912e+00 -4.7808915422561373e+00 + id 13787 + loc 8.4595549106597900e-01 5.6534755229949951e-01 402 + blend 0.0000000000000000e+00 + interp 4.6652386776234250e-01:2.9745263980118769e-01:6.4069979654931886e-01:2.3385317002301920e-01:1.1380735722283288e+00:3.5716636872337998e-01:1.9950204943019956e+00:4.6651920252366491e-01:2.5314049382737656e+00:2.5772907447319954e-01:3.6271325331067006e+00 + CVs 20 + -5.8542858882309923e-02 2.7953559586407439e-01 -2.4993046057134885e-01 + -1.5460583959609581e-01 5.5240014825384665e-01 -5.0185483312330592e-01 + -2.6665769724671756e-01 8.2918530262232526e-01 -7.6718575297116853e-01 + -4.0422167501974049e-01 1.1000282513663029e+00 -1.0368554693980321e+00 + -5.9090494567359342e-01 1.3434388311284360e+00 -1.2887056884403878e+00 + -8.3170366220368286e-01 1.5421078416577307e+00 -1.4994477904147447e+00 + -1.0604084340920401e+00 1.6725726200407705e+00 -1.6273756656313569e+00 + -1.1957803102737679e+00 1.7030684882177631e+00 -1.7351861923121359e+00 + -1.4457673651267342e+00 1.6228215241704311e+00 -1.9284792324189992e+00 + -1.7672637928649988e+00 1.4386533613334855e+00 -2.1273503093705823e+00 + -2.0547540716995796e+00 1.1348790065021634e+00 -2.3134352742598692e+00 + -2.3058078111190947e+00 7.0860377796468188e-01 -2.4965630772719489e+00 + -2.5894460072554737e+00 2.1072427637622915e-01 -2.6875237087315651e+00 + -2.9751436479593503e+00 -2.7761515179985985e-01 -2.9011609956300166e+00 + -3.4826256142773842e+00 -6.9327500069286552e-01 -3.1589657726467331e+00 + -4.0783602824394798e+00 -1.0371404349055031e+00 -3.5060349307118623e+00 + -4.6950801341085322e+00 -1.3443097043302259e+00 -3.9870384689045073e+00 + -5.2519697538699859e+00 -1.6277352859533114e+00 -4.5629426634745425e+00 + -5.7160777988373752e+00 -1.8996220126442558e+00 -5.0933826243298022e+00 + id 13788 + loc 3.2642412930727005e-02 2.3556947708129883e-01 409 + blend 0.0000000000000000e+00 + interp 4.2817131821197141e-01:3.0025509771750136e-01:5.3110974836396685e-01:2.5595020630252308e-01:1.1376287764069006e+00:4.2816703649878929e-01:2.0160463732312248e+00:3.9411415013351442e-01:2.7108627757835588e+00:2.7359330642187818e-01:3.0636023006137294e+00:2.5395311858845870e-01:3.9652954273867862e+00 + CVs 20 + -2.2862856059184736e-01 2.4446180985607557e-01 -3.3143189195111744e-01 + -4.2636076496569958e-01 4.9797959471944475e-01 -6.2819052739695969e-01 + -6.1025265174997179e-01 7.8210631701479361e-01 -9.3620613899371841e-01 + -8.0583773992838648e-01 1.0942080951643072e+00 -1.2742008192319438e+00 + -1.0545324758461785e+00 1.4103869172884012e+00 -1.6384904027616258e+00 + -1.3947111294261543e+00 1.6971375509898257e+00 -2.0218051539992672e+00 + -1.8408037099744903e+00 1.9126294175045067e+00 -2.4238399113083711e+00 + -2.3757850895227817e+00 2.0093374030570468e+00 -2.8549278834298089e+00 + -2.9487114069753901e+00 1.9412364241023421e+00 -3.3311269072189860e+00 + -3.4841012718971491e+00 1.6738856084297564e+00 -3.8530976315608712e+00 + -3.8882092406696689e+00 1.2292907931580537e+00 -4.3812322428930992e+00 + -4.1161035001287347e+00 7.2828309476864472e-01 -4.8604565888699796e+00 + -4.2168522399402404e+00 2.7060633276113366e-01 -5.2742598490957420e+00 + -4.2533350379185624e+00 -1.4084209488354338e-01 -5.6254918125178968e+00 + -4.2655840822320190e+00 -5.4255397367244207e-01 -5.9096583912807095e+00 + -4.2790576753128002e+00 -9.5803072737063699e-01 -6.1111844175710175e+00 + -4.3078169087753748e+00 -1.3736542254848065e+00 -6.2024618176942923e+00 + -4.3833577530554990e+00 -1.7749517800782613e+00 -6.1832519178792866e+00 + -4.5853754055740463e+00 -2.1939673077357051e+00 -6.1716699653245461e+00 + id 13789 + loc 7.3759949207305908e-01 6.5770410001277924e-02 378 + blend 0.0000000000000000e+00 + interp 5.5457967119104590e-01:4.5252661391605914e-01:1.3015964597483698e-01:3.7186559783733752e-01:9.8163302301730526e-01:2.8956135502241853e-01:1.6375485024666756e+00:3.7732775565950000e-01:2.2548027014773910e+00:5.5457412539433404e-01:3.0000617906214773e+00:5.3357071581167959e-01:3.4480297931893942e+00:5.2339906811635872e-01:3.9366570569335355e+00 + CVs 20 + -2.8917048699376735e-01 2.6841512721671601e-01 -4.4567575424316747e-02 + -5.7590253672722780e-01 5.1579535464624127e-01 -6.0965695936253950e-02 + -8.6400315972713138e-01 7.4145217563372257e-01 -5.1599264598796629e-02 + -1.1583669214475407e+00 9.5729323340952888e-01 -2.3122742894691850e-02 + -1.4535885479297121e+00 1.1768142656906817e+00 1.2662678951630646e-02 + -1.7451243428636567e+00 1.4076038255636976e+00 4.1652029352412856e-02 + -2.0368183198544960e+00 1.6480438597862603e+00 4.8555905640441321e-02 + -2.3313711209550645e+00 1.8931527602612102e+00 2.0193005855744239e-02 + -2.6202588059016305e+00 2.1410371310857546e+00 -5.3458897973620134e-02 + -2.8905646834980283e+00 2.3951583919485544e+00 -1.8086789182329743e-01 + -3.1480827039110486e+00 2.6627412635457763e+00 -3.7411646476951399e-01 + -3.4251488799038934e+00 2.9326434805516195e+00 -6.5455942162092728e-01 + -3.7344202747485520e+00 3.1331970390460206e+00 -1.0237848741379680e+00 + -4.0107127312292814e+00 3.1747859525067721e+00 -1.4063018094104269e+00 + -4.1785233675972240e+00 3.0662947787833912e+00 -1.7191446361975475e+00 + -4.2200093031846420e+00 2.8790953854759138e+00 -1.9792695657284374e+00 + -4.1616935506808197e+00 2.6637591513088821e+00 -2.2649372701662398e+00 + -4.1378680499438580e+00 2.4467277598476809e+00 -2.6004532122432029e+00 + -4.4164651887189432e+00 2.3212478637648508e+00 -2.8765954273821706e+00 + id 13790 + loc 2.4834305047988892e-01 2.8203085064888000e-01 382 + blend 0.0000000000000000e+00 + interp 4.0883058439278058e-01:3.8626012693748529e-01:4.4970085649532365e-01:4.0882649608693666e-01:9.7390113334767758e-01:3.0325236252614463e-01:1.3270244735265169e+00:3.3295296101881594e-01:2.3640192215667568e+00:2.9912904535570611e-01:2.9986031067755055e+00:3.1048795290901221e-01:3.7433526765225276e+00 + CVs 20 + -5.5707367870544144e-01 1.2500725039499949e-01 -6.8631304708043306e-01 + -1.0020513957265527e+00 1.1344795908799399e-01 -1.1149863806945528e+00 + -1.4280875945000200e+00 4.6668149976183293e-02 -1.4528810076014851e+00 + -1.8698768622263029e+00 -3.5632900899524644e-02 -1.7706644369963951e+00 + -2.3140061910085388e+00 -1.2417852621392844e-01 -2.0717767000976801e+00 + -2.7502517782919300e+00 -2.1073200321400865e-01 -2.3620526620727715e+00 + -3.1750695485987821e+00 -2.8949804333180307e-01 -2.6483011033518156e+00 + -3.5916537541928149e+00 -3.6108641300638444e-01 -2.9377019794922097e+00 + -4.0036884119442506e+00 -4.3610095497587520e-01 -3.2351247913256578e+00 + -4.4117818621435863e+00 -5.3212163086357234e-01 -3.5370396114164491e+00 + -4.8205570236030137e+00 -6.6957282882984726e-01 -3.8308319835968643e+00 + -5.2327756336240894e+00 -8.7343112038474358e-01 -4.1078103125641467e+00 + -5.6424177823434363e+00 -1.1629564461139799e+00 -4.3597194066052882e+00 + -6.0286885114779043e+00 -1.5395956289818116e+00 -4.5772513578259932e+00 + -6.3675837770767991e+00 -1.9886777030954588e+00 -4.7507183730588727e+00 + -6.6423809389321402e+00 -2.4897848838668653e+00 -4.8714340944261734e+00 + -6.8392105116116744e+00 -3.0211120712038535e+00 -4.9344449829000894e+00 + -6.9463601387793812e+00 -3.5556839883307965e+00 -4.9438586488835767e+00 + -7.0040828543348219e+00 -4.0733300123528764e+00 -4.9367924882052669e+00 + id 13791 + loc 2.3370371758937836e-01 4.3264064192771912e-01 380 + blend 0.0000000000000000e+00 + interp 4.2893858440685312e-01:2.9454756074442401e-01:2.4435244936006806e-01:4.0020839958969162e-01:9.9971518842248674e-01:3.2671210270874518e-01:1.8308777136518124e+00:3.3187690761739214e-01:2.5044866559078454e+00:4.2893429502100905e-01:2.9999961214820026e+00:3.0811739878324512e-01:3.5742669533136224e+00 + CVs 20 + -4.2765280129701316e-01 2.4441856487709424e-01 4.9054985707470100e-01 + -7.5761670964933781e-01 3.8999945611271153e-01 9.2986247994665328e-01 + -1.0692828513523740e+00 4.8499105997883485e-01 1.3715293209870631e+00 + -1.4070185394143331e+00 5.5767930927846932e-01 1.8363901194836969e+00 + -1.7748866054268289e+00 6.0730481354470001e-01 2.3029589057743456e+00 + -2.1683514118120364e+00 6.2363565191261383e-01 2.7459350796367596e+00 + -2.5768476626550085e+00 5.9494482787560754e-01 3.1458115235458401e+00 + -2.9859758418542444e+00 5.1823868438664222e-01 3.4859968980328548e+00 + -3.3779998510849811e+00 4.0220892554557475e-01 3.7557077833663719e+00 + -3.7356570083526992e+00 2.6354724400079199e-01 3.9554149156614935e+00 + -4.0472014022931262e+00 1.2122709297918632e-01 4.0922001188018777e+00 + -4.3120145666173517e+00 -7.0087539376340047e-03 4.1760892450562590e+00 + -4.5491450618496909e+00 -1.1604632529146874e-01 4.2266573678045249e+00 + -4.7884187514014727e+00 -2.3802936398989649e-01 4.2674929923221097e+00 + -5.0302851202949741e+00 -4.2214905567970762e-01 4.3022543635276813e+00 + -5.2562520227995755e+00 -6.7884244914943004e-01 4.3230172998125109e+00 + -5.4777915821675709e+00 -1.0024123735621258e+00 4.3284157228402709e+00 + -5.7182294779693841e+00 -1.3800086556918449e+00 4.3408790298103686e+00 + -5.8800687982424744e+00 -1.6093143710164091e+00 4.4530161633888827e+00 + id 13792 + loc 9.3538796901702881e-01 7.9914259910583496e-01 395 + blend 0.0000000000000000e+00 + interp 3.9646427837087522e-01:3.5870452609057490e-01:7.1008646862763092e-02:2.9443746133460336e-01:9.9448050598155446e-01:3.7635203887941854e-01:1.7129352320182991e+00:3.9646031372809154e-01:2.5200575583479066e+00:3.0961703443131444e-01:3.0178393156006287e+00 + CVs 20 + 5.0095331573896906e-01 1.7582228999548616e-01 -5.1685078648222349e-01 + 8.8463965643217601e-01 2.8668524238043691e-01 -9.4187445575631312e-01 + 1.2453438230923219e+00 3.8594882442839606e-01 -1.3542708274376059e+00 + 1.6210764179644677e+00 4.9460233922389107e-01 -1.7851959477883950e+00 + 2.0084839789759665e+00 6.0476598005907056e-01 -2.2290015590074259e+00 + 2.4009201976334573e+00 7.0517918410785363e-01 -2.6817243083773876e+00 + 2.7915879168397315e+00 7.8163481226249010e-01 -3.1418240243510764e+00 + 3.1765673143683162e+00 8.1444955926724272e-01 -3.6076226580126196e+00 + 3.5503110146460584e+00 7.7947401704916963e-01 -4.0755080909641030e+00 + 3.8964366479338510e+00 6.5570266018430523e-01 -4.5388141466463878e+00 + 4.1908246279408212e+00 4.3578717091761243e-01 -4.9848787950998306e+00 + 4.4172780345378388e+00 1.2867132457402874e-01 -5.3960471731166981e+00 + 4.5727644569946255e+00 -2.4967968564949539e-01 -5.7567192615244931e+00 + 4.6588887075710534e+00 -6.8193106896953104e-01 -6.0569502774888058e+00 + 4.6785583931354164e+00 -1.1505857813239255e+00 -6.2927304729278060e+00 + 4.6381897718514633e+00 -1.6417609200650212e+00 -6.4643029398939555e+00 + 4.5460489967857356e+00 -2.1418309742586081e+00 -6.5721449372086811e+00 + 4.4081705506412874e+00 -2.6332777810005799e+00 -6.6200141269374857e+00 + 4.2668786507612566e+00 -3.0962626335124268e+00 -6.6689590072830267e+00 + id 13793 + loc 4.8836731910705566e-01 3.1895112991333008e-01 401 + blend 0.0000000000000000e+00 + interp 4.9799885989381865e-01:3.3900287077526231e-01:3.4124451345991891e-01:3.0259592075902592e-01:1.0029754086604497e+00:4.9799387990521971e-01:1.5872717510040530e+00:3.7771964293226523e-01:2.2112788566247881e+00:3.7075778659712727e-01:2.9568301069069705e+00:4.9107025229922735e-01:3.2288395489435455e+00:3.9663078644906663e-01:3.9569051244004161e+00 + CVs 20 + -2.1809965489874847e-01 2.6860396396983055e-01 4.2336113820601637e-02 + -4.5835234465541952e-01 5.4189773081422099e-01 1.0118125138888442e-01 + -7.1076106358497948e-01 8.1185622918999190e-01 1.5177463508470962e-01 + -9.6963515008195855e-01 1.0606096718317466e+00 1.8299598979733001e-01 + -1.2388182852044680e+00 1.2730539301830994e+00 1.9915871579619759e-01 + -1.5237419345419960e+00 1.4422248094297474e+00 2.1032710207566097e-01 + -1.8345468822050415e+00 1.5659009831509103e+00 2.3367467188993696e-01 + -2.1794161323675425e+00 1.6407375821684591e+00 2.8620495528876028e-01 + -2.5430237025647426e+00 1.6694275619384369e+00 3.6832152085659559e-01 + -2.9000189484131744e+00 1.6587213453521326e+00 4.6322959752703879e-01 + -3.2511756023296843e+00 1.5969244323303049e+00 5.6300670527209973e-01 + -3.6175706758297159e+00 1.4536679674377870e+00 6.8042577192824294e-01 + -4.0005689465722059e+00 1.2307362199410521e+00 8.3711168881760400e-01 + -4.3766287205665000e+00 9.7048355325329116e-01 1.0519751245477265e+00 + -4.7169641739049339e+00 7.0259527007307288e-01 1.3242789046252608e+00 + -5.0026170615573573e+00 4.3279826425060558e-01 1.6406424458559357e+00 + -5.2289692403681034e+00 1.9465173694334359e-01 1.9877367950126881e+00 + -5.4003571541486766e+00 9.3384890649988672e-02 2.3242210630684363e+00 + -5.5104759281571898e+00 2.2037908873159295e-01 2.5808646736165040e+00 + id 13794 + loc 9.1801381111145020e-01 7.8812932968139648e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3114032904186537e-01:4.4291442703021883e-01:4.6654273352804809e-02:4.9163670337291049e-01:7.0271023025313317e-01:4.1091806442846313e-01:1.0491883018562651e+00:4.1428780897668427e-01:2.0042764327586418e+00:5.3113501763857496e-01:2.9981711614144655e+00:2.4438522289780917e-01:3.7467626615646807e+00 + CVs 20 + 5.2590731462831983e-02 3.3113974755264663e-01 -1.0389089444114577e-01 + 1.0591352875952750e-01 6.8191679337445188e-01 -2.1942422512312840e-01 + 1.7838144929097804e-01 1.0563551487283782e+00 -3.3148984065820092e-01 + 3.0602950830199882e-01 1.4566614825120778e+00 -4.3151878041043029e-01 + 5.2641035338881548e-01 1.8609068265766571e+00 -5.1334265790388911e-01 + 8.5194559952587856e-01 2.2359323801315263e+00 -5.8289785269621297e-01 + 1.2829708142636180e+00 2.5469352216591510e+00 -6.5822266603855284e-01 + 1.8146137892330634e+00 2.7448663038388963e+00 -7.4997931742500257e-01 + 2.4208109107831297e+00 2.7723146880549630e+00 -8.4861798448153536e-01 + 3.0483552294896521e+00 2.5846072371376865e+00 -9.3050333988769995e-01 + 3.6146053957584101e+00 2.1702395344580103e+00 -9.6549990552372589e-01 + 4.0320308055579277e+00 1.5746124029491706e+00 -9.2614892842222196e-01 + 4.2520894126565221e+00 9.0058103887154362e-01 -8.0160969340004273e-01 + 4.3020514811381299e+00 2.9299597666991850e-01 -6.0781133581370739e-01 + 4.2832564777159803e+00 -1.6770135032733391e-01 -3.6522518969579876e-01 + 4.2799236639903571e+00 -4.9140605925666692e-01 -5.3402589032427117e-02 + 4.3302949816894998e+00 -6.7415492947104694e-01 3.6059138623392295e-01 + 4.4355478413717675e+00 -7.1318787558772923e-01 8.6768469720774455e-01 + 4.5526983774066956e+00 -7.4658316655118728e-01 1.4175427750364480e+00 + id 13795 + loc 1.4861947298049927e-01 5.8512818813323975e-01 400 + blend 0.0000000000000000e+00 + interp 4.8780232593326378e-01:4.8779744791000446e-01:6.0876957911110996e-01:4.0258620664028916e-01:1.0739797804276805e+00:2.9463189043635185e-01:1.8609158950287283e+00:4.2825297433869225e-01:2.3543130571574977e+00:3.8487235722488783e-01:3.1113192211997642e+00:2.5555297185428305e-01:3.8071566460099149e+00 + CVs 20 + -2.4950451806498450e-01 2.7422770221504467e-01 -9.0214529926304354e-03 + -4.7693198931643893e-01 5.6920222344508187e-01 -3.6531668600163519e-02 + -6.9057255043007237e-01 8.8463403863029832e-01 -9.6161542954024903e-02 + -8.9523112095916813e-01 1.2176781668388206e+00 -1.9800579807582080e-01 + -1.0942196681351299e+00 1.5619806817076396e+00 -3.4775693253172557e-01 + -1.2924335579857542e+00 1.9085749961438387e+00 -5.4914252089504034e-01 + -1.4953157851461707e+00 2.2469518754158018e+00 -8.0649258403149648e-01 + -1.7056343427605312e+00 2.5644513997839100e+00 -1.1257824492023838e+00 + -1.9202664053586367e+00 2.8454703044509611e+00 -1.5143588844940317e+00 + -2.1267869125486238e+00 3.0706490382344764e+00 -1.9768110923046156e+00 + -2.3030561624758001e+00 3.2176232395184292e+00 -2.4989186836814143e+00 + -2.4395336753044377e+00 3.2722745168437477e+00 -3.0404386838285165e+00 + -2.5586426437000394e+00 3.2348888970384460e+00 -3.5712826918929617e+00 + -2.6916287745009533e+00 3.1032948719297315e+00 -4.0873211703616468e+00 + -2.8468747237867533e+00 2.8728155410821308e+00 -4.5506770031343082e+00 + -3.0134728681848761e+00 2.5749883445964432e+00 -4.8883657505256615e+00 + -3.1849798296464069e+00 2.2542939114634328e+00 -5.0906511220690414e+00 + -3.3683774978303980e+00 1.9158626216859318e+00 -5.2092898425036553e+00 + -3.5937547133611667e+00 1.4975890031503654e+00 -5.3433989745274033e+00 + id 13796 + loc 8.8261222839355469e-01 5.7698923349380493e-01 412 + blend 0.0000000000000000e+00 + interp 4.9861309267591575e-01:4.9860810654498899e-01:3.8710335805746121e-03:3.9793912984969987e-01:7.7102480737642054e-01:3.0929458767516421e-01:1.0937068872595221e+00:3.6971084984918134e-01:2.0029600288266352e+00:4.1657020592349581e-01:3.0021965105248034e+00:3.1462997922902158e-01:3.6827341864317682e+00 + CVs 20 + 7.3447764688613337e-01 5.3305042974546107e-02 -2.9180785578631330e-01 + 1.2250553834505069e+00 7.0508705446822306e-03 -5.3488909942367602e-01 + 1.6664009155435950e+00 -7.1961852361355549e-02 -7.5961481916447959e-01 + 2.1338100868389498e+00 -1.5947681499723321e-01 -9.7266041672756409e-01 + 2.6257311419401863e+00 -2.5611123650747358e-01 -1.1656330048049384e+00 + 3.1369254853996997e+00 -3.6097949546541686e-01 -1.3312768093315159e+00 + 3.6604603739509765e+00 -4.7320196324069852e-01 -1.4651698350391507e+00 + 4.1879129484269360e+00 -5.9391831469660739e-01 -1.5663458100986856e+00 + 4.7096727791577724e+00 -7.2530085473797912e-01 -1.6356110470264578e+00 + 5.2156376354523815e+00 -8.6879958966168291e-01 -1.6746602259770993e+00 + 5.6926428944991070e+00 -1.0324447720872216e+00 -1.6939802597308482e+00 + 6.1249225425466758e+00 -1.2449053591953927e+00 -1.7276106827346258e+00 + 6.5007643450809818e+00 -1.5365949485452572e+00 -1.8171872370942668e+00 + 6.8206316382429080e+00 -1.8994510802813636e+00 -1.9689521847404687e+00 + 7.0912460252933940e+00 -2.3075572172394963e+00 -2.1682266637532615e+00 + 7.3074397119769161e+00 -2.7408699326048129e+00 -2.4135682570107000e+00 + 7.4612783219489014e+00 -3.1753444144546998e+00 -2.7065295194864332e+00 + 7.5614843793015210e+00 -3.5852980289495751e+00 -3.0257684053696123e+00 + 7.7687580742639852e+00 -3.9229966865977355e+00 -3.2172497352283811e+00 + id 13797 + loc 4.3106749653816223e-01 1.3042467832565308e-01 399 + blend 0.0000000000000000e+00 + interp 4.5954300572343509e-01:4.5323565550150502e-01:6.5063824612676235e-02:2.6715313971893417e-01:9.7885591167912778e-01:2.7332393822889550e-01:1.9982129308501282e+00:4.5953841029337789e-01:2.4029662210708715e+00:4.0282633973554505e-01:3.0059945288197092e+00:4.3106684338092011e-01:3.8737537806019127e+00 + CVs 20 + -2.1111729369756285e-01 1.3721061257861303e-01 2.3596129197640392e-01 + -4.2646731948810057e-01 2.5420646104929545e-01 4.4195049472523257e-01 + -6.5342875829169789e-01 3.4938879402595296e-01 6.1119693892650628e-01 + -8.9772300681400452e-01 4.2427304228547025e-01 7.4089701441025946e-01 + -1.1515157269892307e+00 4.8341377111508371e-01 8.3543474366340431e-01 + -1.3963060994739831e+00 5.3116217452976255e-01 9.0211447363012431e-01 + -1.6125401818820073e+00 5.7229412971177285e-01 9.3885168262755303e-01 + -1.7846486926097338e+00 6.1849861264559802e-01 9.3646833490268300e-01 + -1.9101999971482997e+00 6.9110325476370804e-01 8.9333148032930365e-01 + -2.0046439299466705e+00 8.1576449323304834e-01 8.2203024040461614e-01 + -2.1074576718071483e+00 9.9521883838008807e-01 7.5636066298287319e-01 + -2.2626027592922648e+00 1.1615280257804055e+00 7.4628277118249042e-01 + -2.4607283461201037e+00 1.2182952240098144e+00 8.1515089353783310e-01 + -2.6471646445443135e+00 1.1091971096401116e+00 9.5782260522934881e-01 + -2.7808433728796662e+00 8.3281113615768543e-01 1.1687609542485944e+00 + -2.8562718523417145e+00 4.6658873418910396e-01 1.4590605472617786e+00 + -2.8712193207435353e+00 8.3237541813516502e-02 1.8609318182302350e+00 + -2.9538239602609542e+00 -2.5234034249675902e-01 2.3274837592899940e+00 + -3.2913687454192706e+00 -1.6236544140992237e-01 2.4050362124656064e+00 + id 13798 + loc 4.0690359473228455e-01 3.0262789130210876e-01 374 + blend 0.0000000000000000e+00 + interp 3.2333005313725405e-01:2.7134726572911982e-01:7.4460155013101925e-01:2.5123748819675490e-01:1.4745391781828203e+00:2.6998711406950149e-01:2.0630859225730092e+00:3.0826742710263544e-01:2.9995425643989462e+00:3.2332681983672268e-01:3.8047313802612313e+00 + CVs 20 + -4.0340609245143089e-01 4.4590654858254208e-01 6.4548024457084097e-01 + -6.4610124127818280e-01 7.6594081187048735e-01 1.1851100789716282e+00 + -7.6623976408041028e-01 9.7398004995100096e-01 1.7287549848844470e+00 + -8.2108739013054099e-01 1.1271627620846569e+00 2.2653373908033538e+00 + -8.6298908887912784e-01 1.2787835910194281e+00 2.7464756432002981e+00 + -9.2577703168417225e-01 1.4459838737169335e+00 3.1703460139973130e+00 + -1.0203190151714199e+00 1.6205339575106423e+00 3.5584592335897627e+00 + -1.1489806304175887e+00 1.7932215938677631e+00 3.9283254810064143e+00 + -1.3235715241500086e+00 1.9735706132886681e+00 4.2982028760682036e+00 + -1.5826680676413674e+00 2.1532933807755645e+00 4.7012157632570766e+00 + -1.9650755219219327e+00 2.2942662216323013e+00 5.1615725118776279e+00 + -2.4832973399692175e+00 2.3377916582260210e+00 5.6834866499516474e+00 + -3.1147175336445616e+00 2.2042791674886431e+00 6.2337055891352930e+00 + -3.7865272752458159e+00 1.8219993708517555e+00 6.7368753514833184e+00 + -4.4113345609847183e+00 1.1888645954280390e+00 7.0953652909089264e+00 + -4.8835936665470836e+00 4.0091591491651757e-01 7.2192676412612311e+00 + -5.0836843947675625e+00 -3.5355428240090747e-01 7.1685231603237796e+00 + -4.9869617401151354e+00 -9.3183828367977783e-01 7.1390863418023054e+00 + -4.6696036828221565e+00 -1.6165570202908177e+00 7.2150918295766573e+00 + id 13799 + loc 8.4910660982131958e-01 9.1196560859680176e-01 402 + blend 0.0000000000000000e+00 + interp 3.8689379362530085e-01:3.8688992468736461e-01:1.2348844631786771e-01:3.8329796124659615e-01:9.9240851699974586e-01:3.1150310334391895e-01:1.4450941747213188e+00:2.6958481113823379e-01:2.1054508322840730e+00:2.9233137647304325e-01:3.0913866870803801e+00 + CVs 20 + -7.9073993686967992e-02 1.0451072152439617e-01 -1.4203678450778309e-01 + -1.4526692514363271e-01 2.1592076909738739e-01 -2.9871455801881364e-01 + -2.0107992231298649e-01 3.2617623207600377e-01 -4.6120227866259284e-01 + -2.5014671578917380e-01 4.3204126515473285e-01 -6.2433633405936129e-01 + -2.9508551951138740e-01 5.3363304578220661e-01 -7.8646448921980849e-01 + -3.3534119260492801e-01 6.3127652483430974e-01 -9.4601608627800760e-01 + -3.6618721546038069e-01 7.2649208340427085e-01 -1.1015481517571077e+00 + -3.7952795661558969e-01 8.2110104723345867e-01 -1.2504012752870559e+00 + -3.6434857559532341e-01 9.1466194383229971e-01 -1.3890359321495229e+00 + -3.1114895836693279e-01 1.0046250271292387e+00 -1.5159562667037720e+00 + -2.1947587598676077e-01 1.0875592693202720e+00 -1.6295591155279441e+00 + -1.0652028243307776e-01 1.1580664797861495e+00 -1.7279066352945613e+00 + -9.7795811082024287e-04 1.2104706343215526e+00 -1.8159407968851671e+00 + 8.1350341709669927e-02 1.2436524307023709e+00 -1.9067050533745880e+00 + 1.4322329363693198e-01 1.2591763667599574e+00 -2.0171364163550209e+00 + 1.8469833298653993e-01 1.2540359935967029e+00 -2.1482852953384572e+00 + 2.0189639114665026e-01 1.2251169477703949e+00 -2.2906049287079151e+00 + 1.9183318946500538e-01 1.1715422616075153e+00 -2.4427458339617329e+00 + 1.7384786172067868e-01 1.0956354688535572e+00 -2.6372850832980586e+00 + id 13800 + loc 5.0518155097961426e-01 9.3928313255310059e-01 415 + blend 0.0000000000000000e+00 + interp 4.8497089754823042e-01:2.9420853523085355e-01:4.5479161248318334e-01:2.5785878701538895e-01:1.0512792651195420e+00:3.3107485642100598e-01:1.9918328740156448e+00:3.3666920730946714e-01:2.7618719274313408e+00:4.8496604783925495e-01:3.1709928692106635e+00:2.8671016329147075e-01:3.9453348583048018e+00 + CVs 20 + 4.6541644426371748e-01 2.0064730215561730e-01 1.3922278177489728e-02 + 8.1461183939482096e-01 3.0952124201482495e-01 -4.6476678867285459e-04 + 1.1325367843896017e+00 3.8215827068149089e-01 -2.2249144244016472e-03 + 1.4605645003658583e+00 4.4497477400580271e-01 2.9416145748201783e-02 + 1.7926765259738304e+00 4.9318187033663458e-01 9.4428053561228742e-02 + 2.1223313267901571e+00 5.2209766593597873e-01 1.9207272174210710e-01 + 2.4437890566655884e+00 5.2831142735199887e-01 3.2078075900386976e-01 + 2.7535170282403474e+00 5.0966013524692166e-01 4.7669906668044215e-01 + 3.0497092001187789e+00 4.6509295182586285e-01 6.5366538057067891e-01 + 3.3315323842155262e+00 3.9501435045537314e-01 8.4514841695608767e-01 + 3.6004209980639788e+00 3.0045247815857090e-01 1.0444611559997028e+00 + 3.8618054632490511e+00 1.7986277905067327e-01 1.2376763045871215e+00 + 4.1205428773346178e+00 2.9117233526968711e-02 1.3944695054369907e+00 + 4.3716495968267015e+00 -1.4984020095532635e-01 1.4822009262360498e+00 + 4.6019916372663801e+00 -3.4511749130872493e-01 1.4919833266868525e+00 + 4.7965741011166587e+00 -5.3962844305115620e-01 1.4329980222194634e+00 + 4.9389863128288347e+00 -7.1202500658540213e-01 1.3186985375372191e+00 + 5.0202409040551528e+00 -8.4286737191265448e-01 1.1686649501687962e+00 + 5.1545819289725472e+00 -1.0102504584738323e+00 1.0094202487986323e+00 + id 13801 + loc 6.5078312158584595e-01 8.0344986915588379e-01 396 + blend 0.0000000000000000e+00 + interp 4.5805261396795421e-01:4.5804803344181455e-01:2.4949766008248697e-01:4.2478339907090917e-01:8.2550838714589814e-01:3.8412389308147388e-01:1.6409448645410207e+00:3.0633644964118206e-01:2.0691303137628108e+00:3.7225387830433587e-01:2.7410842508904025e+00:3.5747542180496578e-01:3.0366253198210362e+00:3.5765776128276178e-01:3.9770346578575491e+00 + CVs 20 + 9.7727813136204078e-01 1.3853809359064156e-01 -3.9647654170540370e-01 + 1.6254553932394380e+00 6.9152214558697356e-02 -7.3461201118453612e-01 + 2.1901748041172002e+00 -7.3432593931723522e-02 -1.0616143313956306e+00 + 2.7486149010884859e+00 -2.4312891820313565e-01 -1.3886815305170552e+00 + 3.2892267118931868e+00 -4.3478034485617711e-01 -1.7062581103622083e+00 + 3.8035649771267197e+00 -6.4231378689477070e-01 -2.0077875277441199e+00 + 4.2848919593201282e+00 -8.6290186975090588e-01 -2.2874369312854093e+00 + 4.7273416022786954e+00 -1.1005618042074887e+00 -2.5373721834200746e+00 + 5.1238630146835664e+00 -1.3638761482613229e+00 -2.7501799467944799e+00 + 5.4627867046370655e+00 -1.6591937703554722e+00 -2.9232466831822963e+00 + 5.7332909931862641e+00 -1.9861159314480019e+00 -3.0590327023914572e+00 + 5.9343558416568891e+00 -2.3357711484782877e+00 -3.1606292119310435e+00 + 6.0767328676856280e+00 -2.6929246896070138e+00 -3.2346599243424530e+00 + 6.1746320509878645e+00 -3.0374184611894703e+00 -3.2954677429345409e+00 + 6.2415147697809426e+00 -3.3552171039371168e+00 -3.3588148094797909e+00 + 6.2906348538240522e+00 -3.6406258409123176e+00 -3.4323160928219236e+00 + 6.3382499540809674e+00 -3.8991017874403808e+00 -3.5144228009985881e+00 + 6.4012983277659536e+00 -4.1572130930429694e+00 -3.6002922634513372e+00 + 6.4767228529713767e+00 -4.5228524364159544e+00 -3.7069523768073402e+00 + id 13802 + loc 2.2271831333637238e-01 7.7839982509613037e-01 403 + blend 0.0000000000000000e+00 + interp 2.9445711848410938e-01:2.9445417391292456e-01:3.0473635621242534e-01:2.9042694679251613e-01:1.4107154895052227e+00:2.8883062339335941e-01:2.0115917495368603e+00:2.9325098551250478e-01:2.8588386668538686e+00:2.7830928795421794e-01:3.2895489386459538e+00 + CVs 20 + -2.9760189076493866e-02 1.5033237884755291e-01 -3.4428515876640128e-02 + -7.4807099089113940e-02 2.6076618468089219e-01 -7.5115123439346260e-02 + -1.2458537251736751e-01 3.4722330566356807e-01 -1.2638898391131673e-01 + -1.6747720727087603e-01 4.1676600765469957e-01 -1.8944271498341064e-01 + -2.0165597296564830e-01 4.7171497341921703e-01 -2.6743804710144142e-01 + -2.2606979511063285e-01 5.1623671021476913e-01 -3.6436143247287134e-01 + -2.4357784025947166e-01 5.5689422163374436e-01 -4.8402921626539469e-01 + -2.6178064644639532e-01 6.0165874222652405e-01 -6.2891525353610789e-01 + -2.8819295082904450e-01 6.5929817863852591e-01 -7.9783231854555914e-01 + -3.2596761512006012e-01 7.3954863944324323e-01 -9.8554353926842320e-01 + -3.7845883779229139e-01 8.5185048033993183e-01 -1.1845463211087304e+00 + -4.5423559060597912e-01 9.9917687504877772e-01 -1.3821202539239534e+00 + -5.5771808513480847e-01 1.1719306427704876e+00 -1.5600850016860031e+00 + -6.6936625374742409e-01 1.3485442996962864e+00 -1.7007049742078602e+00 + -7.4727275436656226e-01 1.5003415672131872e+00 -1.7966829054837037e+00 + -8.0765934609161694e-01 1.6001509990536023e+00 -1.8693850321237624e+00 + -9.1960847130228418e-01 1.6353317913242731e+00 -1.9527001474687111e+00 + -1.0852167055996293e+00 1.6000216940577476e+00 -2.0475074543577261e+00 + -1.2355729544598575e+00 1.5370769273098974e+00 -2.1295044954671152e+00 + id 13803 + loc 1.0840942710638046e-01 2.2080571949481964e-01 373 + blend 0.0000000000000000e+00 + interp 4.1146364229150084e-01:3.7479758888467746e-01:4.9473534453694112e-01:2.8435620600322331e-01:1.0971085842075099e+00:3.4158560966465218e-01:1.9087572144189013e+00:4.1145952765507793e-01:2.3567253680175764e+00:3.2159048459005823e-01:2.9978309275827688e+00:2.7899777930328540e-01:3.7232938222677379e+00 + CVs 20 + -8.2586395010861277e-02 9.3295060523945605e-01 3.2300739600778716e-01 + -2.1671301004202345e-01 1.8400650436827830e+00 5.5226523181040577e-01 + -4.1740846704874435e-01 2.6864045728436876e+00 6.3128633145474533e-01 + -6.8978021528297329e-01 3.4180485411898687e+00 5.3246678256037239e-01 + -1.0373525790406972e+00 4.0000408271828762e+00 2.6332868327028702e-01 + -1.4657998587799226e+00 4.4111326474950641e+00 -1.6961220018637779e-01 + -1.9523572174489463e+00 4.5412430994695674e+00 -7.8598751077641493e-01 + -2.4350447123625716e+00 4.2777752994624434e+00 -1.5263188386936000e+00 + -2.8665022726449316e+00 3.6317238439708186e+00 -2.2917461038123319e+00 + -3.1739063283422895e+00 2.6424744658207335e+00 -2.9633096479915877e+00 + -3.3053494520528326e+00 1.4067661304610692e+00 -3.3945788268959811e+00 + -3.2578598562409224e+00 1.1377090288688319e-01 -3.5128440666764607e+00 + -3.0684084760836692e+00 -1.0489949307463293e+00 -3.4185186961792082e+00 + -2.7705461686873076e+00 -1.9987097881277356e+00 -3.2859196675182467e+00 + -2.4015084544809233e+00 -2.7952841602417062e+00 -3.3219608651779788e+00 + -2.1037274875590697e+00 -3.4831395221790671e+00 -3.6956485139588562e+00 + -1.8844067771134705e+00 -3.8792047499472329e+00 -4.1036613978017709e+00 + -1.5905199643461643e+00 -4.0798851723797060e+00 -4.6287392591994498e+00 + -2.0027985680469826e+00 -4.0994224735340872e+00 -5.2722432460716320e+00 + id 13804 + loc 4.4616695493459702e-02 3.3238399028778076e-01 1068 + blend 0.0000000000000000e+00 + interp 4.7717985817547892e-01:3.1796177176272650e-01:1.2375442198547726e-01:2.5143232140803373e-01:1.0010728077507147e+00:3.0691376743669196e-01:1.6977677802820428e+00:3.0877260767675058e-01:2.1882538534878471e+00:4.7717508637689721e-01:3.0014467162198586e+00:2.5579950015874370e-01:3.5726324844851329e+00 + CVs 20 + -2.7021192352641787e-01 2.0700985227854818e-01 -6.1876866581402214e-02 + -5.3954303660356051e-01 4.2249187780941494e-01 -1.3378066972427460e-01 + -8.1379808753578708e-01 6.4427579123993084e-01 -2.1858089520294377e-01 + -1.0958735114806666e+00 8.6757894845015693e-01 -3.1486550259923829e-01 + -1.3831394801075623e+00 1.0857005202006125e+00 -4.1720123708468115e-01 + -1.6752658881665101e+00 1.2920255206870113e+00 -5.2015740672501432e-01 + -1.9773603376788440e+00 1.4817414079350222e+00 -6.2027026096900340e-01 + -2.2952429989475300e+00 1.6481594085902120e+00 -7.1487024695252810e-01 + -2.6320748061099644e+00 1.7814181232979032e+00 -8.0225428905477070e-01 + -2.9891375740508974e+00 1.8706613188169907e+00 -8.8334892891573147e-01 + -3.3634209606591732e+00 1.9044098425787575e+00 -9.6236917351058127e-01 + -3.7480813329721219e+00 1.8735104200199877e+00 -1.0480297080429106e+00 + -4.1290787691902429e+00 1.7762633558572554e+00 -1.1528057401564837e+00 + -4.4831610482241429e+00 1.6221191415058920e+00 -1.2877291256459151e+00 + -4.7876591209370458e+00 1.4295221865600691e+00 -1.4571637035520546e+00 + -5.0283601622107374e+00 1.2198749119810419e+00 -1.6569735706493920e+00 + -5.2039548107889519e+00 1.0107606504598805e+00 -1.8765799857658716e+00 + -5.3238353099357534e+00 8.1153666868089935e-01 -2.1056896385050625e+00 + -5.3732181295320158e+00 6.2452762000802098e-01 -2.3404961349010165e+00 + id 13805 + loc 8.9518773555755615e-01 5.7349973917007446e-01 378 + blend 0.0000000000000000e+00 + interp 4.6110436964715168e-01:2.5846714949021909e-01:9.5408019187234960e-02:2.6783233215928626e-01:9.9573326010532315e-01:4.2552431473471725e-01:1.3574293843004357e+00:4.6109975860345526e-01:1.9881009033362802e+00:3.5107450446701349e-01:2.4985757515805744e+00:2.6348497354824635e-01:3.5952979906249052e+00 + CVs 20 + 3.3725756252863370e-01 3.6152572854130760e-01 6.2807817215458070e-02 + 6.3354248357426979e-01 6.7379048539861452e-01 1.1580365904871946e-01 + 9.3816343658122159e-01 9.4065472588953081e-01 1.4892074266728492e-01 + 1.2635720698507973e+00 1.1655725127222238e+00 1.6068412538494514e-01 + 1.6050986386635022e+00 1.3692572608431037e+00 1.6331985166375002e-01 + 1.9685224026220616e+00 1.5696553074227695e+00 1.7671457960848913e-01 + 2.3664477564046504e+00 1.7558108792052987e+00 2.2645052526800979e-01 + 2.8021284758995577e+00 1.9029160022908793e+00 3.3526731065590976e-01 + 3.2662037152226269e+00 1.9900524516236773e+00 5.1954601541824941e-01 + 3.7449411716754262e+00 1.9938189504061756e+00 7.8152444988381409e-01 + 4.2181543194073665e+00 1.8834840302763038e+00 1.0938746283532239e+00 + 4.6518575715219583e+00 1.6359774417335937e+00 1.4057511659796083e+00 + 5.0115718802069562e+00 1.2446445190832467e+00 1.6702029726846157e+00 + 5.3079129763593436e+00 7.3244689391765894e-01 1.8748974865972343e+00 + 5.6138122670379733e+00 1.5086235372413137e-01 2.0485126786160155e+00 + 6.0186748558379506e+00 -4.3591672628400913e-01 2.2126237702868918e+00 + 6.5699601031342105e+00 -9.6076794538662336e-01 2.3295887478984039e+00 + 7.1879815621800169e+00 -1.3611052204326626e+00 2.3629330542127103e+00 + 7.6180558813833121e+00 -1.6640308083614812e+00 2.4070797793743792e+00 + id 13806 + loc 3.7285986542701721e-01 1.3603833317756653e-01 379 + blend 0.0000000000000000e+00 + interp 4.4566628816049569e-01:3.8743857107101498e-01:7.6612579071699827e-04:4.4566183149761412e-01:9.4471839147845060e-01:3.0614497089247411e-01:1.5879517068445863e+00:1.9910960137624870e-01:2.0326045972440281e+00:2.9327564255548461e-01:3.0000075362902718e+00:2.7013485895948064e-01:3.7226260684545185e+00 + CVs 20 + -3.2644927490060482e-02 2.4182332141968921e-01 4.0438320512217518e-01 + -2.8401631384628673e-02 4.6237659370928025e-01 7.6581865368621771e-01 + 3.0173525401540502e-02 6.3533035120934034e-01 1.1208531444732079e+00 + 1.4676673732673987e-01 7.5112116509200577e-01 1.4779503406905361e+00 + 2.9397479113591918e-01 8.4172439177177094e-01 1.8005579556957088e+00 + 4.4106518208593259e-01 9.4289515969232252e-01 2.0690253153099736e+00 + 5.7112260996371889e-01 1.0675907828082538e+00 2.3069068786242979e+00 + 6.6888186837526720e-01 1.2151235217776590e+00 2.5455230317662645e+00 + 7.1641295998565058e-01 1.3876197011034179e+00 2.7904000100755573e+00 + 6.9740751266378043e-01 1.5959857048389137e+00 3.0348554047695879e+00 + 6.2117961298308666e-01 1.8427911346206076e+00 3.2744194657020080e+00 + 5.2681789348255159e-01 2.1208759667419637e+00 3.5155333629551779e+00 + 4.3154851581113951e-01 2.4208629568050979e+00 3.7885728780188694e+00 + 3.0696011834946063e-01 2.7009065422294762e+00 4.1409712210978045e+00 + 9.5297730636765610e-02 2.8857411948042513e+00 4.5914992336981415e+00 + -2.9720407273190630e-01 2.8690613501819398e+00 5.0899269899712660e+00 + -8.6941504971497585e-01 2.5260795811987249e+00 5.5397500858322779e+00 + -1.3001803413212607e+00 1.8508084740975894e+00 5.9376089408184463e+00 + -1.2139852561885114e+00 1.4074455979974343e+00 6.3333342389447393e+00 + id 13807 + loc 1.5564013272523880e-02 5.7307821512222290e-01 380 + blend 0.0000000000000000e+00 + interp 4.9002564676037458e-01:2.1077296830183051e-01:7.2957732350519278e-02:2.3843502840710121e-01:9.9904939262350012e-01:3.2819049839702719e-01:2.0559676548766070e+00:4.9002074650390698e-01:2.9960585123728727e+00:2.9808234437356668e-01:3.2812497868951591e+00 + CVs 20 + -4.3218617461415443e-01 3.3828925679344224e-01 -4.2531986641655956e-01 + -8.2596195989332366e-01 5.8185925707295016e-01 -7.7245005493260988e-01 + -1.2179506989153248e+00 7.6520368958485951e-01 -1.0951899959160216e+00 + -1.6255493271929815e+00 9.0965722083914669e-01 -1.4198147105898526e+00 + -2.0416026051905583e+00 1.0143674676941785e+00 -1.7481039411199095e+00 + -2.4625997070591028e+00 1.0705989241181300e+00 -2.0781947936084002e+00 + -2.8858186637196139e+00 1.0683366250495423e+00 -2.4027418121051385e+00 + -3.3055161967502973e+00 1.0060529197902615e+00 -2.7111886182895675e+00 + -3.7165582387954030e+00 8.9285397111309184e-01 -2.9917976497708403e+00 + -4.1139545445372043e+00 7.4518834093834041e-01 -3.2288601036818525e+00 + -4.4887570377556063e+00 5.8403290330185254e-01 -3.4073744640774590e+00 + -4.8346495082679244e+00 4.2830826883433382e-01 -3.5295930825128727e+00 + -5.1606734300693269e+00 2.8177172347716439e-01 -3.6225522116734088e+00 + -5.4853234856654716e+00 1.2282778741069267e-01 -3.7188273409927568e+00 + -5.8085505264229518e+00 -6.6780961132108185e-02 -3.8164590194606376e+00 + -6.0996204124680702e+00 -2.4561249995644863e-01 -3.8915110405138087e+00 + -6.3011315563405041e+00 -3.3144508454175847e-01 -3.9203952972229437e+00 + -6.3717039539887796e+00 -3.0618729010863266e-01 -3.9117858640343526e+00 + -6.6060920588707681e+00 -3.9424858468026125e-01 -3.9783722253184575e+00 + id 13808 + loc 1.1761908978223801e-01 8.1437671184539795e-01 375 + blend 0.0000000000000000e+00 + interp 4.7064706622481844e-01:4.4589973557968710e-01:1.5501911420829939e-01:4.7064235975415619e-01:7.3313402798186778e-01:3.4678816126388395e-01:1.5058530985999652e+00:3.1178065832701179e-01:2.0964352524009175e+00:2.7987478775733043e-01:3.1178391553733600e+00 + CVs 20 + -3.7619676279201658e-01 3.6091625668378696e-01 2.1708572026404749e-02 + -7.3107680121395302e-01 6.1475969585139190e-01 9.6022170083908814e-02 + -1.1299008597671736e+00 7.3134041833379526e-01 2.2464438559425498e-01 + -1.6034680546168933e+00 7.4378468717220492e-01 4.1214806574834495e-01 + -2.1525940537903119e+00 7.4570183631187059e-01 6.4553836953154486e-01 + -2.7876737844493893e+00 8.2199546693636727e-01 8.7096020869843793e-01 + -3.4945645864378241e+00 1.0159455832289515e+00 1.0012898937965331e+00 + -4.2163400720454574e+00 1.3379564432273934e+00 9.7284321137038510e-01 + -4.8789267232328015e+00 1.7684145194793424e+00 7.6803934550867081e-01 + -5.4350346825119331e+00 2.2476156348314413e+00 4.0809179511456750e-01 + -5.8899244752568274e+00 2.7078974963704709e+00 -9.0993824175521265e-02 + -6.2569519786141381e+00 3.0826802309027164e+00 -7.5417153613211740e-01 + -6.5108511412466870e+00 3.2750921389308472e+00 -1.5956143797123132e+00 + -6.5919068013409108e+00 3.1915599181122394e+00 -2.5545891656980722e+00 + -6.4731002852224684e+00 2.7888010791552200e+00 -3.4577638885512103e+00 + -6.3407894773646918e+00 2.1658252498989610e+00 -4.0239883288495326e+00 + -6.4883709737171920e+00 1.5972600693181533e+00 -4.1180588482518115e+00 + -6.7845594276229901e+00 1.2457255214488065e+00 -4.0074319167118535e+00 + -6.8864597371462235e+00 7.0664650538072893e-01 -4.1427777212742027e+00 + id 13809 + loc 5.3928035497665405e-01 6.5755087137222290e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6264901609699943e-01:3.2766352727252090e-01:1.7161787075730417e-01:3.1584538752462321e-01:9.6468882317418370e-01:2.7375468021331023e-01:1.6457629101522904e+00:2.7700333624630824e-01:2.2362206276318872e+00:4.6264438960683846e-01:2.9718664747143624e+00:2.8797364905067713e-01:3.5788213165677756e+00 + CVs 20 + 1.2395083035557936e-02 2.4618205127363590e-01 8.3852305624853268e-02 + 3.4137677103868343e-02 5.0943452481609863e-01 1.5879853498418051e-01 + 7.5631667186131180e-02 8.0449202961182109e-01 2.1896779665608462e-01 + 1.5400581755643006e-01 1.1446288157164461e+00 2.5523207268527853e-01 + 2.8639627567123427e-01 1.5268609823592183e+00 2.4510021847988572e-01 + 4.8665771400527735e-01 1.9325230426866904e+00 1.6163753166652095e-01 + 7.5619102202532096e-01 2.3287213577646884e+00 -2.0895855922036466e-02 + 1.0816174900296776e+00 2.6774009670952963e+00 -3.2191273588703706e-01 + 1.4340133093090170e+00 2.9405126261573926e+00 -7.5318921484317736e-01 + 1.7689986488277583e+00 3.0800919719279469e+00 -1.3115068662072038e+00 + 2.0384803748671216e+00 3.0639737168030221e+00 -1.9680644885747249e+00 + 2.2008664577010415e+00 2.8829866501485717e+00 -2.6452771247006615e+00 + 2.2544117031298501e+00 2.5934963440920282e+00 -3.2181579060877015e+00 + 2.2625392646243454e+00 2.3285148503356448e+00 -3.5648505440784590e+00 + 2.3012433477202769e+00 2.2445021643578791e+00 -3.5394793747406337e+00 + 2.3576375718531164e+00 2.2749790206993241e+00 -2.9481601788136622e+00 + 2.2525272709619539e+00 1.9440333996133470e+00 -1.9343447233758710e+00 + 1.7266376709046793e+00 7.6719308319824453e-01 -1.0460742037396051e+00 + 1.8147005941897201e+00 9.0663612289011630e-01 -1.0503232759046632e+00 + id 13810 + loc 9.1017264127731323e-01 4.9458846449851990e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5792163220409154e-01:4.5791705298776952e-01:2.1019892012136498e-02:4.4192376199576106e-01:6.5208373296660138e-01:4.1666247061394301e-01:9.4622172073050459e-01:3.1878060986871942e-01:1.1935623688732870e+00:2.3152091572604372e-01:1.9113769248607571e+00:3.4663860500079940e-01:2.1985304645609629e+00:3.5573420667093975e-01:2.8957450847676243e+00:3.7855661386078521e-01:3.4587617068306429e+00 + CVs 20 + -1.5918140399495506e-01 1.9023638797148287e-01 2.4910374939281865e-01 + -3.1433248757284266e-01 3.5445343421132147e-01 4.5476033475419314e-01 + -4.6702749672656657e-01 4.9580935032382484e-01 6.3288289322612534e-01 + -6.2025463240527978e-01 6.1671023577836237e-01 7.9542639109058533e-01 + -7.9395497720463237e-01 7.1285470434179909e-01 9.4253719252278567e-01 + -1.0160855880768529e+00 7.7804092443458805e-01 1.0686774661638077e+00 + -1.2932792200231851e+00 8.2972590410111324e-01 1.1732590174087063e+00 + -1.5944093466957834e+00 9.1057666373076607e-01 1.2619002069436862e+00 + -1.8760844073760232e+00 1.0490883969611065e+00 1.3169548820352381e+00 + -2.1397258833249526e+00 1.2737449452777483e+00 1.2843441124862611e+00 + -2.4181018961810268e+00 1.6807242611541238e+00 1.1662054199511465e+00 + -2.6294461002293126e+00 2.2794326265515350e+00 1.1573302555557241e+00 + -2.6566773392046859e+00 2.8402841240319807e+00 1.3472451438133377e+00 + -2.5086041041110541e+00 3.2378227214117778e+00 1.6222364577240445e+00 + -2.2362825986052233e+00 3.4679208362340295e+00 1.8951963190713323e+00 + -1.8876668607596709e+00 3.5761186608459155e+00 2.1818461048636895e+00 + -1.4965536126611276e+00 3.5993912367552721e+00 2.5693345694684080e+00 + -1.1167499283062874e+00 3.4939772930902375e+00 3.0785553805701449e+00 + -1.1915908584490926e+00 3.2234208620511726e+00 3.0835775773873904e+00 + id 13811 + loc 6.7081332206726074e-01 6.9157111644744873e-01 393 + blend 0.0000000000000000e+00 + interp 4.2749663372355018e-01:3.9399627912869739e-01:2.7638191688357738e-01:3.7918248211117472e-01:9.0003964207535980e-01:3.8578785019428119e-01:1.4593736132431163e+00:2.7514575877399489e-01:2.0035489399056310e+00:4.2749235875721298e-01:2.6207253134939776e+00:3.8990703984475761e-01:3.0148470593740271e+00:3.7406757026705567e-01:3.5412232220248048e+00:4.2683781402355819e-01:3.9899043188038608e+00 + CVs 20 + -2.7667437737448719e-01 3.4710885974134165e-01 -3.0790932828552342e-01 + -5.2006876163112903e-01 7.0152476990318791e-01 -5.7612839642364277e-01 + -7.3772666098821715e-01 1.0774986764598384e+00 -8.3333113862332708e-01 + -9.4396523166474633e-01 1.4760142951329607e+00 -1.0940161014065266e+00 + -1.1572707811123317e+00 1.8897112353485079e+00 -1.3629486037923892e+00 + -1.3960040534837148e+00 2.3100099747302112e+00 -1.6429049345591649e+00 + -1.6795298985410139e+00 2.7258371172193065e+00 -1.9353589780464517e+00 + -2.0322931162736699e+00 3.1167499577145166e+00 -2.2404323418901821e+00 + -2.4568780971829067e+00 3.4464235923758171e+00 -2.5443733705708542e+00 + -2.9174499707978052e+00 3.6917333447414924e+00 -2.8257836993934848e+00 + -3.3960815434049723e+00 3.8560994745548465e+00 -3.0867808385833109e+00 + -3.9093691093719496e+00 3.9364512935767562e+00 -3.3520765865039146e+00 + -4.4508047226403082e+00 3.9095268977560522e+00 -3.6203105633399213e+00 + -4.9738749013055674e+00 3.7578275436023856e+00 -3.8530671480849912e+00 + -5.4230670288245193e+00 3.4834594537530359e+00 -4.0415726562618524e+00 + -5.7351845237409202e+00 3.0992555387427561e+00 -4.2328598401677624e+00 + -5.8953392419457833e+00 2.6226711316369653e+00 -4.4481138766632364e+00 + -5.9865433550264449e+00 2.0749283448287144e+00 -4.6011613494792529e+00 + -6.0726970571507479e+00 1.5148810667464543e+00 -4.5024183488567671e+00 + id 13812 + loc 8.1891268491744995e-01 9.7049809992313385e-02 409 + blend 0.0000000000000000e+00 + interp 5.6689842936504453e-01:3.4722535634731633e-01:7.1670858299312634e-02:2.7689412199394281e-01:9.9729930024657543e-01:5.6689276038075087e-01:1.7670367731013716e+00:5.4049890959000668e-01:1.9985669985872494e+00:4.8106615555128468e-01:2.2374816356743303e+00:2.7276789798591877e-01:2.9195860438307104e+00:2.8597013196693166e-01:3.5500661070777584e+00 + CVs 20 + -1.9298875903168750e-01 1.8286934993327619e-03 1.5506307882874437e-01 + -4.0449181865026929e-01 1.9168762508926490e-02 3.1227227529102952e-01 + -6.2520713825298246e-01 4.7909187863771352e-02 4.6042333079862613e-01 + -8.4703169476925000e-01 8.3296207993319049e-02 5.9327472357508038e-01 + -1.0647981199404901e+00 1.2218244144005463e-01 7.1175989249033644e-01 + -1.2742516826448700e+00 1.6238574829046326e-01 8.1911267739180138e-01 + -1.4681152896527090e+00 2.0447965564349568e-01 9.1785629599415175e-01 + -1.6374455448243754e+00 2.5110669487397108e-01 1.0092281766037969e+00 + -1.7816487018700631e+00 3.0484176792511553e-01 1.0923580974359046e+00 + -1.9079660761791351e+00 3.6686440917479968e-01 1.1628850751512050e+00 + -2.0229069567165965e+00 4.3712042000239992e-01 1.2191448496275215e+00 + -2.1369370573542579e+00 5.0660430404244194e-01 1.2715372089259942e+00 + -2.2625318520970095e+00 5.5249573867183432e-01 1.3367293606456672e+00 + -2.4013810392610617e+00 5.5450571970606211e-01 1.4233354799824962e+00 + -2.5452038372680570e+00 5.0527954303670763e-01 1.5317745714791058e+00 + -2.6820720111306353e+00 4.0769665082027351e-01 1.6622217644023518e+00 + -2.8018051226688163e+00 2.6408555780374487e-01 1.8142159724409495e+00 + -2.8982553817068268e+00 6.5493603393949273e-02 1.9773492451529953e+00 + -2.9741151056724382e+00 -2.8986764333465542e-01 2.1491660228373464e+00 + id 13813 + loc 8.7409466505050659e-01 3.3488109707832336e-01 400 + blend 0.0000000000000000e+00 + interp 4.1963475304740755e-01:2.9869216017738159e-01:5.6399471771044118e-01:3.2784540369856063e-01:1.8047635345890884e+00:4.1963055669987709e-01:2.1533796636528644e+00:3.7825661221740914e-01:3.0128118338452845e+00:2.7693114213202075e-01:3.7113514077758212e+00 + CVs 20 + 2.9972529430517381e-01 1.7683519629238403e-01 2.5182003342391923e-01 + 5.4526985117314508e-01 3.1192472992891540e-01 4.9557550944484685e-01 + 7.5123139925470728e-01 4.1225279954666161e-01 7.3773636581357693e-01 + 9.2501997822580428e-01 4.8113949326870964e-01 9.7689596336513662e-01 + 1.0712617924120447e+00 5.2118210195072479e-01 1.2095137829104154e+00 + 1.1966307130756375e+00 5.3784642683163819e-01 1.4350617087287221e+00 + 1.3057055002937914e+00 5.4094251365886414e-01 1.6496709723952259e+00 + 1.4000731241461251e+00 5.4279809767666198e-01 1.8449547175419569e+00 + 1.4812319874448963e+00 5.5115295640114037e-01 2.0184130841793535e+00 + 1.5521373136696826e+00 5.6817570202222056e-01 2.1752520449132464e+00 + 1.6155118643856299e+00 5.9733799954331146e-01 2.3196279127515895e+00 + 1.6741864734893293e+00 6.4385312134432882e-01 2.4543740595204611e+00 + 1.7396721369007340e+00 7.1063316728875270e-01 2.5863100002499664e+00 + 1.8311844764186564e+00 7.9328985290212395e-01 2.7283143791103228e+00 + 1.9591265857920810e+00 8.8674903448483988e-01 2.8966938948029730e+00 + 2.1100129342190419e+00 9.9208325312843137e-01 3.1110381425241975e+00 + 2.2492307981061503e+00 1.0934525820031378e+00 3.3833337469206199e+00 + 2.3335840858797763e+00 1.1207833560987810e+00 3.6746621404763697e+00 + 2.2452912017275359e+00 8.5970614127633915e-01 3.7546190143399292e+00 + id 13814 + loc 9.5019258558750153e-02 7.4854761362075806e-01 382 + blend 0.0000000000000000e+00 + interp 3.6741456336406314e-01:3.6100820888829710e-01:4.0725165009592568e-01:3.2569142442335247e-01:1.0359693505691279e+00:3.1826166924593668e-01:2.0255163242497116e+00:3.6741088921842951e-01:3.0138049260749762e+00:3.2677239672425584e-01:3.8792316428718161e+00 + CVs 20 + 8.7784185498299372e-01 2.9031440371864647e-01 -3.7344827189781732e-01 + 1.4608638912679817e+00 4.5190169126771634e-01 -6.3619361086913484e-01 + 1.9676746329040296e+00 5.4907895939084339e-01 -8.7226712368588322e-01 + 2.5092392648352839e+00 6.1009022271118507e-01 -1.1191250794350724e+00 + 3.0819530213076498e+00 6.1235383839324964e-01 -1.3789881407557831e+00 + 3.6768624673086778e+00 5.3798919457143435e-01 -1.6563236069691536e+00 + 4.2788839245710184e+00 3.7912071405691028e-01 -1.9586319557028746e+00 + 4.8668742280482382e+00 1.3422322535559950e-01 -2.2879805974968876e+00 + 5.4184518148628822e+00 -1.9949716552975882e-01 -2.6320967765834169e+00 + 5.9113203190432593e+00 -6.2728066532134408e-01 -2.9680316179228141e+00 + 6.3185061665780458e+00 -1.1467142612460330e+00 -3.2709632743453851e+00 + 6.6199772386949327e+00 -1.7360792821298856e+00 -3.5226365159731658e+00 + 6.8184742153042066e+00 -2.3685090564911127e+00 -3.7158518606136530e+00 + 6.9270236811030266e+00 -3.0207498710993095e+00 -3.8548994162926360e+00 + 6.9507820398838067e+00 -3.6591634705433691e+00 -3.9489273330315946e+00 + 6.9081047485024127e+00 -4.2418039396852691e+00 -4.0026356980885245e+00 + 6.8325990725614130e+00 -4.7312703022274363e+00 -4.0159801902179764e+00 + 6.7584350873050782e+00 -5.1216103841421274e+00 -4.0015766816749840e+00 + 6.6995651794519251e+00 -5.5416977404353789e+00 -4.0310503752772853e+00 + id 13815 + loc 9.8520916700363159e-01 8.4938561916351318e-01 401 + blend 0.0000000000000000e+00 + interp 4.1938863452081776e-01:3.0718155668650660e-01:3.7868953626421675e-01:3.6852957105343975e-01:9.9544089253778156e-01:2.6284473282298743e-01:1.9983878249114997e+00:4.1938444063447256e-01:2.9635637538407389e+00:2.4085073032040030e-01:3.2126397285690200e+00 + CVs 20 + -1.2624667733983144e-02 3.0404376859110316e-01 -2.9891363957953709e-01 + -1.0165193555345897e-02 6.0333166295333196e-01 -5.8497536584455634e-01 + 1.4916071827551669e-02 9.0176420186706130e-01 -9.0190607145531332e-01 + 6.2025815420192199e-02 1.1860444143978568e+00 -1.2732226618225659e+00 + 1.1829504378658356e-01 1.4344600142633153e+00 -1.7104647167451810e+00 + 1.5160174531889348e-01 1.6310988464125087e+00 -2.2193724011459919e+00 + 1.1357386414430160e-01 1.7634751991191604e+00 -2.7910449379230218e+00 + -3.8941397722430215e-02 1.8129198158519166e+00 -3.3942273229122182e+00 + -3.2263548423468902e-01 1.7599611435941318e+00 -3.9787277625112041e+00 + -7.1713210922135018e-01 1.5995745493474127e+00 -4.4927557845827693e+00 + -1.1714004617846898e+00 1.3435475430626957e+00 -4.9033335737052637e+00 + -1.6204511501667005e+00 1.0136211025498962e+00 -5.2076021508969843e+00 + -2.0238853804320542e+00 6.3722927644853955e-01 -5.4252297338885356e+00 + -2.3838676067223319e+00 2.4388939449524638e-01 -5.5740024503995640e+00 + -2.7038820824939012e+00 -1.3007044989740882e-01 -5.6853643203045010e+00 + -2.9684263581933221e+00 -4.4199865881867839e-01 -5.8296512588442440e+00 + -3.1634703250774039e+00 -6.6709760913864402e-01 -6.0352995660678976e+00 + -3.3174226706721264e+00 -8.3463113455510629e-01 -6.2513462905093400e+00 + -3.5007318623045420e+00 -1.0071141658975846e+00 -6.4645965618875616e+00 + id 13816 + loc 3.8202768564224243e-01 6.2575763463973999e-01 415 + blend 0.0000000000000000e+00 + interp 2.8343678241290182e-01:2.6109194916428985e-01:2.9248697567550541e-01:2.7372061827327226e-01:1.5810633835673711e+00:2.2017109285514941e-01:2.5023822076695819e+00:2.8343394804507771e-01:3.1277070601944756e+00 + CVs 20 + 4.0450957755527650e-01 2.1955744973810598e-01 8.5013779295459668e-02 + 7.1875801726000543e-01 3.4723753623562720e-01 1.1057833375775900e-01 + 1.0131523437138275e+00 4.4661531656699882e-01 1.4724486111631352e-01 + 1.3078028268439930e+00 5.3668578455296656e-01 2.1834239926828625e-01 + 1.5986663870373974e+00 6.1388460051847571e-01 3.2288672159068538e-01 + 1.8815993665821547e+00 6.7633911882613484e-01 4.6020130569489820e-01 + 2.1517929513913900e+00 7.2358333655208407e-01 6.2877535564176823e-01 + 2.4055522654322234e+00 7.5644235418487393e-01 8.2511347722474060e-01 + 2.6416022269467718e+00 7.7664386230355531e-01 1.0449979394912958e+00 + 2.8584717930283565e+00 7.8615679946391437e-01 1.2842617879913381e+00 + 3.0500915519797065e+00 7.8738048937767169e-01 1.5353882552947946e+00 + 3.2115364486696949e+00 7.8244244255438034e-01 1.7860387516524718e+00 + 3.3558170850930420e+00 7.6908972551477706e-01 2.0264637592986219e+00 + 3.5143803072667250e+00 7.3784541233910472e-01 2.2511981437038551e+00 + 3.7054327403172964e+00 6.8093873895620072e-01 2.4515294825077047e+00 + 3.9209147739168291e+00 6.0066733831623420e-01 2.6220236014508158e+00 + 4.1497762663275104e+00 5.0219828955450252e-01 2.7597348853969663e+00 + 4.3875618872598832e+00 3.8975087653913487e-01 2.8568391957448038e+00 + 4.6181432296731808e+00 2.7799056193821059e-01 2.8891503213523189e+00 + id 13817 + loc 5.0536066293716431e-01 8.2852381467819214e-01 395 + blend 0.0000000000000000e+00 + interp 4.3557018128349440e-01:3.4311785924117782e-01:9.9959512689294372e-02:3.6934233245283671e-01:1.0058275010983353e+00:3.5944649079992552e-01:1.8891390932601693e+00:4.3556582558168155e-01:2.2177828992401269e+00:3.1463754943874972e-01:3.0027834806001517e+00:3.1527145937612439e-01:3.7028213903243108e+00 + CVs 20 + 5.0626767825623276e-01 1.2691739486497494e-01 -3.7142722808102169e-01 + 8.7585323198621479e-01 1.8084075649828379e-01 -6.8590291099193956e-01 + 1.1974881412443281e+00 2.1664704247939265e-01 -9.7887890902139230e-01 + 1.5064278671677003e+00 2.5700108361529661e-01 -1.2593077829214754e+00 + 1.8062507182580734e+00 3.0064487719072175e-01 -1.5190370469558079e+00 + 2.1016773701184981e+00 3.4543941291816371e-01 -1.7529419095616263e+00 + 2.3985946416630854e+00 3.8917557020460303e-01 -1.9605709169793375e+00 + 2.7039373010201038e+00 4.2850141016338283e-01 -2.1458799757880369e+00 + 3.0251441822436047e+00 4.5606252191173313e-01 -2.3128499900487083e+00 + 3.3686493035233100e+00 4.5882253608065482e-01 -2.4637643333887764e+00 + 3.7344418218446127e+00 4.1749610079826627e-01 -2.6068725806202258e+00 + 4.1082249564711404e+00 3.1058377890513733e-01 -2.7573526536849045e+00 + 4.4672336635578267e+00 1.2751272809216552e-01 -2.9230767460234337e+00 + 4.7970851257646787e+00 -1.2683829717487249e-01 -3.0997730516419182e+00 + 5.0941410189376901e+00 -4.4024279848012826e-01 -3.2812780013005209e+00 + 5.3591252190318039e+00 -7.9534816611302528e-01 -3.4664807015814438e+00 + 5.5900630441304635e+00 -1.1747183707762190e+00 -3.6549392786939707e+00 + 5.7839734945157852e+00 -1.5691690531312017e+00 -3.8395084590401871e+00 + 5.9259025045515061e+00 -1.9764070634591109e+00 -3.9953028629708278e+00 + id 13818 + loc 9.6724396944046021e-01 6.1294045299291611e-02 402 + blend 0.0000000000000000e+00 + interp 4.7874778997236894e-01:4.0558981248222847e-01:8.5235996260019686e-01:2.7612797868884831e-01:1.7490976531590452e+00:2.5281782357602772e-01:2.0316248223196709e+00:4.7874300249446922e-01:2.8925422898931892e+00:3.7243199387583698e-01:3.1887589096796001e+00:4.7231927721669958e-01:3.9954066231622809e+00 + CVs 20 + 2.9294073817811733e-01 2.8883397934241944e-01 2.7156488844273557e-01 + 5.6930242451189728e-01 6.0152961417882778e-01 5.4042043475458956e-01 + 8.4730076846319746e-01 9.3084252150894486e-01 8.1378114993965500e-01 + 1.1567352623029250e+00 1.2416305254334168e+00 1.0720071035496948e+00 + 1.5187334577373006e+00 1.4909990716069370e+00 1.2882762467908047e+00 + 1.9305013326659279e+00 1.6508283138127333e+00 1.4543714768512530e+00 + 2.3777467089880902e+00 1.7070536539443826e+00 1.5874771335909967e+00 + 2.8455319344814374e+00 1.6481206910243185e+00 1.7189418994375156e+00 + 3.3025947624184462e+00 1.4597754781350631e+00 1.8678556190787674e+00 + 3.6940456177014700e+00 1.1410352950312641e+00 2.0283447188472827e+00 + 3.9680017485768566e+00 7.3796970314655908e-01 2.1736101346856964e+00 + 4.1252828302099998e+00 3.2859673786003873e-01 2.2858843025552438e+00 + 4.2119854893444977e+00 -6.7436918635229826e-02 2.3879343925291394e+00 + 4.2900477783136584e+00 -4.8590758462379113e-01 2.5232949975391898e+00 + 4.4368873614195028e+00 -9.4940240374941109e-01 2.7303141516107798e+00 + 4.7071711009428991e+00 -1.4284072834016106e+00 3.0296631486397447e+00 + 5.0633862176205700e+00 -1.8568752385907719e+00 3.4132241982816294e+00 + 5.3976594924123367e+00 -2.1865512383141277e+00 3.8393658117463461e+00 + 5.6159385219865143e+00 -2.4079207331169910e+00 4.2554060564615295e+00 + id 13819 + loc 7.6854890584945679e-01 4.8948374390602112e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7814016992079669e-01:2.5294825686491484e-01:9.8049278015840491e-01:2.4771124384165100e-01:1.7805466248143915e+00:2.7770453495729153e-01:2.2345908424308778e+00:3.7813638851909748e-01:2.9407296139607180e+00:2.4397741092102190e-01:3.9722106585179580e+00 + CVs 20 + -8.5399499279239677e-02 4.3705897578093628e-01 2.7770490420526622e-01 + -2.3747609903970501e-01 8.5874676883983825e-01 5.2595473236863355e-01 + -4.3770043896357080e-01 1.2641258737422216e+00 7.6030195667134204e-01 + -6.7402276899362856e-01 1.6463315439110995e+00 1.0039150072373033e+00 + -9.3567555586925821e-01 1.9911147479003792e+00 1.2869515402954379e+00 + -1.2073300289483107e+00 2.2741599445069558e+00 1.6336609688010726e+00 + -1.4720144960703061e+00 2.4701799449742783e+00 2.0406253955492253e+00 + -1.7164484602900387e+00 2.5651452933790209e+00 2.4780281074954855e+00 + -1.9337711035722969e+00 2.5553876049207020e+00 2.9066654367307141e+00 + -2.1238914297223244e+00 2.4546965210072011e+00 3.2941182186456119e+00 + -2.2941927991707969e+00 2.2991442562103082e+00 3.6262477054040403e+00 + -2.4570572677204350e+00 2.1274966918262708e+00 3.9072741941629645e+00 + -2.6215604116760121e+00 1.9524970268827850e+00 4.1588886155345985e+00 + -2.7954058904737034e+00 1.7549788284978363e+00 4.4187640752247175e+00 + -2.9815948992158070e+00 1.5110260252144010e+00 4.7223819316897826e+00 + -3.1663471453854113e+00 1.2075342555438213e+00 5.0963256477782668e+00 + -3.3127189982453400e+00 8.5342944946581412e-01 5.5616664963885132e+00 + -3.3797378745820543e+00 5.1125081512243220e-01 6.0737525023293708e+00 + -3.4009183540658263e+00 3.0184851233221832e-01 6.4081495103107722e+00 + id 13820 + loc 3.7544307112693787e-01 9.9168580770492554e-01 403 + blend 0.0000000000000000e+00 + interp 4.4852681301099945e-01:4.1656491360055792e-01:6.7980223679830420e-01:2.6734575128986604e-01:1.0109975453050886e+00:2.5210003867951170e-01:2.1366779369588174e+00:4.4852232774286938e-01:3.0308386177165665e+00:2.8236051961757347e-01:3.9249017190437772e+00 + CVs 20 + -3.0736419650974948e-02 1.8291219692984636e-02 4.0389120748685045e-02 + -5.2646850239036508e-02 2.4787634658744003e-02 7.4630030114633969e-02 + -7.6052762448954481e-02 2.1914875956172794e-02 9.6760927881553327e-02 + -8.7811569453900132e-02 1.7739984365959680e-02 1.1195745788411651e-01 + -8.7787885474143096e-02 1.5461608038656330e-02 1.1955050701409456e-01 + -7.7782812356784317e-02 1.7403087870554945e-02 1.1736499195090656e-01 + -6.1284449853854991e-02 2.5253818656460023e-02 1.0184550808333376e-01 + -4.3250584424457658e-02 4.1407315778270767e-02 7.0060506425993069e-02 + -3.0710551162275942e-02 6.9138830397172585e-02 2.2219600592581622e-02 + -3.2992297476916968e-02 1.1069633609127774e-01 -3.6990975647889106e-02 + -5.9821735136176640e-02 1.6540747981888615e-01 -9.8363984688212724e-02 + -1.1767948162489436e-01 2.2989467635646221e-01 -1.4885075163994926e-01 + -2.0701934676450934e-01 2.9892650190069997e-01 -1.7290705939955359e-01 + -3.2138694308214599e-01 3.6649858102803884e-01 -1.5551718149884047e-01 + -4.4775839374414689e-01 4.2679099312574226e-01 -8.4894342089945368e-02 + -5.7029743911798347e-01 4.7323964896715831e-01 4.4677255472328398e-02 + -6.7614315982301543e-01 4.9780146541373127e-01 2.3122590038358787e-01 + -7.5684255600260886e-01 4.9184420825877601e-01 4.6699231781203770e-01 + -8.2975971889041911e-01 4.5668849219423041e-01 7.2637787226216433e-01 + id 13821 + loc 4.4449105858802795e-01 1.8620461225509644e-02 407 + blend 0.0000000000000000e+00 + interp 4.2757193829521628e-01:3.9118160372718253e-01:4.3312735941362313e-02:2.1179396220544378e-01:8.2173189320336126e-01:2.7829300594269230e-01:1.6682485269837364e+00:3.6690190353077484e-01:1.9974046549823659e+00:3.8756753427186180e-01:2.3725746716581915e+00:3.0765444138560877e-01:3.1022455717939157e+00:4.2756766257583334e-01:3.9081112390484645e+00 + CVs 20 + 5.0810980086653940e-03 3.5102613755147583e-01 -3.3846707024285394e-01 + 1.5824254994786971e-02 5.7115140037122414e-01 -4.9810960345452204e-01 + 3.5618907160668289e-02 7.1505927299370486e-01 -6.0109595272422789e-01 + 6.3217713714671581e-02 8.3164322520771616e-01 -7.0342959766115343e-01 + 9.8177931614899905e-02 9.1896432668006867e-01 -7.9821697047800444e-01 + 1.3740924104014826e-01 9.7773918704838259e-01 -8.8093994052295499e-01 + 1.7665628897224145e-01 1.0146454528733568e+00 -9.5121830091651183e-01 + 2.1624917204970737e-01 1.0416382160050686e+00 -1.0136302273932343e+00 + 2.6349254981795511e-01 1.0685615668717963e+00 -1.0740723087792181e+00 + 3.2585010376486429e-01 1.0994893830964565e+00 -1.1348497253680341e+00 + 4.0657480853499095e-01 1.1368966822380233e+00 -1.1946940071497862e+00 + 5.0713157613083404e-01 1.1841215517652035e+00 -1.2512040187437956e+00 + 6.2856635734153421e-01 1.2425450085026952e+00 -1.3003404036749171e+00 + 7.6641694865867749e-01 1.3073501386231636e+00 -1.3320075910411908e+00 + 9.0750743776056952e-01 1.3706894371898968e+00 -1.3297900597919892e+00 + 1.0431686090918615e+00 1.4286069187446158e+00 -1.2818879509820076e+00 + 1.1784215755416523e+00 1.4793229670683659e+00 -1.1893780325011938e+00 + 1.3181004892592290e+00 1.5181068458926643e+00 -1.0656612297632067e+00 + 1.4719443785062918e+00 1.6140951485509465e+00 -1.0122524442908138e+00 + id 13822 + loc 3.6380460858345032e-01 1.8075862526893616e-01 373 + blend 0.0000000000000000e+00 + interp 3.7610594486599880e-01:2.8361052189647667e-01:6.7739344769089649e-01:2.5795742075082967e-01:1.6946459140578609e+00:3.7610218380655014e-01:2.4989318444271058e+00:3.6031261635635287e-01:3.0067522782841309e+00:2.5643906511179598e-01:3.7908252145874930e+00 + CVs 20 + -6.4449863248848535e-02 8.5101979109386849e-01 3.5656667169474426e-01 + -1.4961295469107672e-01 1.6951346552646236e+00 6.7481073013905402e-01 + -3.0573759986197641e-01 2.5195966474574658e+00 8.9913627342217650e-01 + -5.6797770822786209e-01 3.2920291959384711e+00 9.3231675565208105e-01 + -9.3168504632359239e-01 3.9517347977982782e+00 7.1158029983788373e-01 + -1.3709781280186637e+00 4.4093627591400661e+00 2.4968423337329471e-01 + -1.8361338024095304e+00 4.5639956101630643e+00 -3.8379883915351076e-01 + -2.2758840595818381e+00 4.3842306051851452e+00 -1.0776430096514120e+00 + -2.6464301127889822e+00 3.8955342748931598e+00 -1.7420585930205945e+00 + -2.8824489656224470e+00 3.1383990359226814e+00 -2.3084948781498689e+00 + -2.9078446954165202e+00 2.1952114234818838e+00 -2.7303484293403972e+00 + -2.6792567959226674e+00 1.1840107659800703e+00 -2.9854127824254171e+00 + -2.2246785751875700e+00 2.0972869216674206e-01 -3.1556884525197182e+00 + -1.6227339160012015e+00 -6.5704584745547012e-01 -3.3967567911105192e+00 + -1.0175627887874894e+00 -1.3707089524825067e+00 -3.8752774201900180e+00 + -6.9786087857449619e-01 -1.8026474505196024e+00 -4.7447849501405104e+00 + -9.2508936110253170e-01 -1.8745771255317760e+00 -5.8544335162909151e+00 + -1.8240791156891785e+00 -1.7847021451550065e+00 -6.8281985987725227e+00 + -2.7940875392440279e+00 -1.7680937453587875e+00 -7.5372761428041759e+00 + id 13823 + loc 9.7278684377670288e-02 9.2993885278701782e-01 412 + blend 0.0000000000000000e+00 + interp 4.7670761881918711e-01:3.5049391357201670e-01:2.6393808056493495e-02:4.7670285174299892e-01:4.2417708440097501e-01:4.2864587564802814e-01:1.0673740223443737e+00:3.7739003335746096e-01:1.6337393075422633e+00:3.7679273652481687e-01:2.2357206891276631e+00:3.3975155974976978e-01:3.2401650466526997e+00 + CVs 20 + 9.1623334846794657e-01 1.2006246128097517e-01 -2.2064228747599945e-01 + 1.4850387832043135e+00 7.4481997959785384e-02 -4.2423475721933235e-01 + 1.9791007244015808e+00 -1.4656105195336333e-02 -5.9794554883271089e-01 + 2.4757235695015654e+00 -1.0464258218645645e-01 -7.3495495830394730e-01 + 2.9596413647489612e+00 -1.9142202152475207e-01 -8.3245927992349966e-01 + 3.4190820718955890e+00 -2.6967874723222607e-01 -8.9246561094962917e-01 + 3.8457916916958523e+00 -3.3489734731088605e-01 -9.2300165555133373e-01 + 4.2373762597160010e+00 -3.8553126126514792e-01 -9.3684791051805205e-01 + 4.5986237212657093e+00 -4.2448223224921677e-01 -9.4716621869015150e-01 + 4.9365295857624769e+00 -4.5747108036204409e-01 -9.6294864150854165e-01 + 5.2510891731515157e+00 -4.8289421333796567e-01 -9.8194841472678684e-01 + 5.5357315371127758e+00 -4.8443564951260609e-01 -9.8461155503827924e-01 + 5.7986261958409839e+00 -4.5953089957679882e-01 -9.5139888819196217e-01 + 6.0653122357142149e+00 -4.4788023082053807e-01 -9.0207905809948352e-01 + 6.3443117412438781e+00 -4.8236716971392135e-01 -8.7265966404296202e-01 + 6.6273193795959031e+00 -5.5618083825642195e-01 -8.6461848577623002e-01 + 6.9000207498752237e+00 -6.5515903359458560e-01 -8.6307061536234841e-01 + 7.1400797256675883e+00 -7.7771148094006026e-01 -8.7309884176971009e-01 + 7.2485534566833678e+00 -9.7997223936941080e-01 -1.0600654764452697e+00 + id 13824 + loc 8.6387717723846436e-01 8.7123566865921021e-01 396 + blend 0.0000000000000000e+00 + interp 4.1665474720337392e-01:3.2027297131692722e-01:4.6340272627376833e-01:2.4217377568855841e-01:1.0098118591572214e+00:3.6999043911828944e-01:1.6345398708754491e+00:2.7946372908705730e-01:2.0266167174077943e+00:3.2087507765830214e-01:2.7962473361880331e+00:4.1665058065590188e-01:3.4894805734950016e+00:3.5164777391966534e-01:3.9790187115807449e+00 + CVs 20 + 9.7405828624343738e-01 2.3559711205007927e-01 -3.5643936565112899e-01 + 1.6493593066545871e+00 2.8943531122974830e-01 -6.4366173464583920e-01 + 2.2530673693340422e+00 2.5980267491136771e-01 -9.1290654495855250e-01 + 2.8852828873192933e+00 1.8459834572765166e-01 -1.1843082755531305e+00 + 3.5251385707763201e+00 5.6333984448585173e-02 -1.4540060957535879e+00 + 4.1493422647839333e+00 -1.2453428694657598e-01 -1.7254826878605010e+00 + 4.7350640544919109e+00 -3.5116889893709380e-01 -2.0061358691316586e+00 + 5.2623549739130873e+00 -6.1579875082917424e-01 -2.2998532392351096e+00 + 5.7183060632129159e+00 -9.1325061701109722e-01 -2.6070438026092866e+00 + 6.0961410784196763e+00 -1.2415497900320795e+00 -2.9289739269819757e+00 + 6.3903261615376596e+00 -1.6008955063451520e+00 -3.2639775120479664e+00 + 6.6010142595210413e+00 -1.9896233505232805e+00 -3.6056324194218812e+00 + 6.7429405191258249e+00 -2.3995228986190327e+00 -3.9555037725791298e+00 + 6.8317072928831619e+00 -2.8283492660605436e+00 -4.3150938726204551e+00 + 6.8749379448717702e+00 -3.2724618064576632e+00 -4.6806757360088689e+00 + 6.8745608903853226e+00 -3.7244254124563092e+00 -5.0401621389824189e+00 + 6.8312838138344816e+00 -4.1897319065071503e+00 -5.3783579389198488e+00 + 6.7459821793287391e+00 -4.6767970033066932e+00 -5.6816704010137640e+00 + 6.6943031462303191e+00 -5.1631559086247973e+00 -5.9883567734212999e+00 + id 13825 + loc 4.5241606235504150e-01 8.1982809305191040e-01 379 + blend 0.0000000000000000e+00 + interp 5.2573083780199004e-01:3.1103089874874518e-01:1.8925765598951982e-02:5.2572558049361207e-01:9.2000202685260823e-01:5.2317128320393225e-01:1.0596993272975643e+00:4.7245468889912923e-01:1.3694843762652358e+00:2.7426964074494509e-01:2.0012415149995384e+00:4.7841999369975308e-01:2.8865523621824334e+00:3.3807426605504770e-01:3.1533263537477598e+00 + CVs 20 + -2.6578933394202603e-01 2.8654565455490194e-01 3.0567817144690329e-01 + -4.9824367408289816e-01 5.0509356521518600e-01 5.6460280154126485e-01 + -7.2654197161848111e-01 6.8661749581806863e-01 8.1973349499444570e-01 + -9.5647760843257623e-01 8.6444723396623790e-01 1.0839577103045230e+00 + -1.1633350556707525e+00 1.0667394994236412e+00 1.3295920415968769e+00 + -1.3365764962700948e+00 1.3078520356753391e+00 1.5348596166656963e+00 + -1.5162436442135558e+00 1.5828978442579344e+00 1.6956322551549574e+00 + -1.7555174273356029e+00 1.8673652746799139e+00 1.8002389830868171e+00 + -2.0729530532134857e+00 2.1272350030798490e+00 1.8283973004388665e+00 + -2.4558984306402358e+00 2.3315217220739450e+00 1.7681742795276738e+00 + -2.8780878989599556e+00 2.4655928894637080e+00 1.6223014125085087e+00 + -3.3175928914811035e+00 2.5173266536516796e+00 1.3993108883235794e+00 + -3.7569824849403357e+00 2.4362637338411401e+00 1.1088543064823964e+00 + -4.1804148683424804e+00 2.1562416641620330e+00 7.8533061387207659e-01 + -4.6015574177057452e+00 1.6746386841352612e+00 5.1832372699425799e-01 + -5.0557945307605285e+00 1.0720244733890953e+00 4.2841424656032712e-01 + -5.5465108892079140e+00 4.8164976731675635e-01 6.0559705363176342e-01 + -5.9705738117933773e+00 7.6651978939948240e-02 1.0261733437361267e+00 + -6.1139396138607989e+00 -5.0399668761789140e-02 1.4288588882318001e+00 + id 13826 + loc 7.8730022907257080e-01 8.7028247117996216e-01 380 + blend 0.0000000000000000e+00 + interp 4.3428494045730498e-01:3.3319503181549315e-01:2.0071803719132686e-01:3.1429927537467278e-01:1.2363896210677803e+00:2.7321611142005997e-01:2.0023977853385837e+00:4.3428059760790044e-01:2.5772574880489625e+00:3.1511531191854164e-01:3.2145137273135500e+00 + CVs 20 + -3.4167096949314535e-01 2.1768838788827399e-01 -6.3258932124397238e-01 + -6.5057764240133031e-01 3.6068512567763689e-01 -1.0862857110491042e+00 + -9.4911010775528992e-01 4.7185999198331763e-01 -1.5024712839523160e+00 + -1.2444739909481928e+00 5.7074915560074446e-01 -1.9483801408849635e+00 + -1.5277931971297447e+00 6.5085344282080382e-01 -2.4281878075538543e+00 + -1.7887328046943742e+00 7.0220070784094446e-01 -2.9417007723958668e+00 + -2.0180777027713779e+00 7.1151907803704417e-01 -3.4837220996785696e+00 + -2.2045588750096488e+00 6.6610518030403032e-01 -4.0426640566566974e+00 + -2.3371911772071265e+00 5.6001097925482712e-01 -4.6011714070492440e+00 + -2.4139125239565589e+00 3.9685791480958432e-01 -5.1406188166929514e+00 + -2.4439811810101535e+00 1.8574547040963596e-01 -5.6438395376694492e+00 + -2.4372179732024315e+00 -6.2974456308764193e-02 -6.0966483517655323e+00 + -2.3901324667828807e+00 -3.4193764403348847e-01 -6.4967815323465139e+00 + -2.2927152784213414e+00 -6.5904742577562692e-01 -6.8403375615084645e+00 + -2.1356213683924627e+00 -1.0174980815181969e+00 -7.1113678722553573e+00 + -1.9250305927722065e+00 -1.4135793246955184e+00 -7.3080612134439367e+00 + -1.6843273921376656e+00 -1.8794784708196444e+00 -7.4647272145062651e+00 + -1.4664946180851990e+00 -2.4544711123147582e+00 -7.6329052976220026e+00 + -1.3274567925748602e+00 -2.7911811436992071e+00 -7.6974998290302725e+00 + id 13827 + loc 3.7636092305183411e-01 2.3456862568855286e-01 378 + blend 0.0000000000000000e+00 + interp 4.8563866389751520e-01:3.1693601925523701e-01:5.2974418278723046e-01:3.5179356076724178e-01:1.3017334379080545e+00:3.4457183363151145e-01:1.9981746269418370e+00:4.8563380751087626e-01:2.7066541939033817e+00:4.1275120004587063e-01:3.0078967133929138e+00:4.2087363357179869e-01:3.5476620103834065e+00 + CVs 20 + 1.7652174828181846e-01 3.1083480365085714e-01 -3.5550187606240402e-01 + 2.9280280777128670e-01 5.6839438847895296e-01 -6.9000163835273554e-01 + 3.7789835918542475e-01 7.9253851656971130e-01 -1.0280513376511649e+00 + 4.5142862379929938e-01 1.0032672143892722e+00 -1.3829520849027208e+00 + 5.2889245331854373e-01 1.2137173957970302e+00 -1.7524862047442249e+00 + 6.2816672788173389e-01 1.4288707804382876e+00 -2.1362607444005306e+00 + 7.6831336341083911e-01 1.6413151081326285e+00 -2.5399239700846463e+00 + 9.7086759321211424e-01 1.8340521014317994e+00 -2.9616630132818487e+00 + 1.2484660459321206e+00 1.9869599906780224e+00 -3.3828404164964287e+00 + 1.5961023374779653e+00 2.0814740851259455e+00 -3.7781434225381463e+00 + 1.9964893241251507e+00 2.1016066749791094e+00 -4.1345549095511069e+00 + 2.4294885406672675e+00 2.0258956438753644e+00 -4.4504670493712286e+00 + 2.8661382425181414e+00 1.8288625207812403e+00 -4.7159527827103176e+00 + 3.2718720352483386e+00 1.5145488457684038e+00 -4.9130022107342484e+00 + 3.6401956645134597e+00 1.1349264788210252e+00 -5.0463512803463786e+00 + 3.9869931386338004e+00 7.5486428865995991e-01 -5.1506076898527926e+00 + 4.3119735620688990e+00 4.1325993057748045e-01 -5.2763796670964425e+00 + 4.6026363191309221e+00 1.0647266063994199e-01 -5.4712662127070111e+00 + 4.8903008518089948e+00 -2.2685296669698563e-01 -5.7004858529186535e+00 + id 13828 + loc 6.5168422460556030e-01 2.2220560908317566e-01 374 + blend 0.0000000000000000e+00 + interp 3.4601804616409976e-01:2.6839812862748191e-01:7.2643046332143379e-01:2.6760438883579918e-01:1.7920170524009074e+00:2.5627704484368119e-01:2.9577189127666310e+00:3.4601458598363816e-01:3.9013991870707017e+00 + CVs 20 + 7.9382009321203884e-01 3.7222707293927992e-01 3.3730429690067193e-01 + 1.3795217668038049e+00 5.4260611659327862e-01 5.2471239782028734e-01 + 1.9279144343078631e+00 5.9543779379940820e-01 6.3583915982891237e-01 + 2.5089603370352522e+00 5.8912774370914178e-01 7.1898037340248266e-01 + 3.1148516448750372e+00 5.6810531950962528e-01 8.0569687759003439e-01 + 3.7237201507731763e+00 5.5559177684882166e-01 9.2520783249605887e-01 + 4.3196197015347986e+00 5.4413644193686816e-01 1.1003033416520369e+00 + 4.8997010157521350e+00 5.1870379437942149e-01 1.3563795369009104e+00 + 5.4621343540322744e+00 4.5292687790452191e-01 1.7108771721009477e+00 + 5.9981667156351204e+00 3.1363050214603172e-01 2.1623611110036660e+00 + 6.4934903687193302e+00 5.9955083229605410e-02 2.6817886592302180e+00 + 6.9240523465370094e+00 -3.4468570900803464e-01 3.2109449778876060e+00 + 7.2585269127547418e+00 -8.9798826849868574e-01 3.6788497659993391e+00 + 7.4877911335210108e+00 -1.5305175488177079e+00 4.0374446579578018e+00 + 7.6487157104668571e+00 -2.1485577770249891e+00 4.2736302473623669e+00 + 7.7855919888790002e+00 -2.7130052950658161e+00 4.3953766993475298e+00 + 7.9230629703259439e+00 -3.2309365552901608e+00 4.4192571474668325e+00 + 8.0575616108716943e+00 -3.6832455762434240e+00 4.3633762721575433e+00 + 8.1643144760305528e+00 -3.9858870580549235e+00 4.2181339750207609e+00 + id 13829 + loc 5.9388244152069092e-01 3.2646432518959045e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3088377797558719e-01:4.1287483022855548e-01:9.6769881144954883e-02:4.1255229188437964e-01:6.1843765041737631e-01:3.9661891924501719e-01:9.9886137314869428e-01:2.7580498632242845e-01:1.4083614083789986e+00:3.7290971554594610e-01:1.9914180842834321e+00:4.3087946913780745e-01:2.3939093054605012e+00:3.5509529068756523e-01:2.9992498760345851e+00:3.1109234792886714e-01:3.7141402380202955e+00 + CVs 20 + -6.6377099532555134e-02 2.2814047575779389e-01 1.9495889659115845e-01 + -1.3268020056761001e-01 4.3825439456637250e-01 3.9469967262877381e-01 + -2.0081539306562773e-01 6.3362444731177647e-01 5.9347866278401895e-01 + -2.8294029250498043e-01 8.1696899770377163e-01 7.9051300326626261e-01 + -3.9313601880644272e-01 9.7755794225991943e-01 9.7949245137703522e-01 + -5.2377812449446137e-01 1.0973169493576855e+00 1.1489786826908772e+00 + -6.5577894158598427e-01 1.1861247610951491e+00 1.2950358131004052e+00 + -7.6588285467393635e-01 1.2718679273948554e+00 1.4131360711416079e+00 + -8.5597488417442247e-01 1.3417652960088398e+00 1.4817894688636111e+00 + -9.8310294915704355e-01 1.3781873688459103e+00 1.4482172647617011e+00 + -1.1926456917366708e+00 1.4613622865050215e+00 1.2864405835811503e+00 + -1.4111218226199447e+00 1.6817930963850714e+00 1.1094533804301705e+00 + -1.5560148091863830e+00 1.9906595740219595e+00 1.0164300104451693e+00 + -1.5994252328368201e+00 2.2940875467623583e+00 9.9852542648851839e-01 + -1.5584828957788701e+00 2.5561912448958903e+00 1.0181315360154159e+00 + -1.4428717816533461e+00 2.8551045789385348e+00 1.1014522332315007e+00 + -1.2253594847763458e+00 3.2011668064308401e+00 1.3244920932043502e+00 + -1.0098665930751098e+00 3.3946760199775867e+00 1.5844901576473163e+00 + -1.1822969158444854e+00 3.2418767690167645e+00 1.4414780770762645e+00 + id 13830 + loc 4.1798579692840576e-01 6.7784732580184937e-01 399 + blend 0.0000000000000000e+00 + interp 4.4437452826077800e-01:4.4344814785840253e-01:2.6370935055464073e-01:3.4506513956614748e-01:1.0369119979511903e+00:4.0928576263658278e-01:1.9147817458215923e+00:3.4107546894380292e-01:2.6166749492457413e+00:4.4437008451549542e-01:3.0674860559069592e+00:2.7098849101188544e-01:3.9101621730187217e+00 + CVs 20 + -2.3832545833428204e-01 2.9759432401634844e-01 -1.7313100327514130e-01 + -4.2870544308097241e-01 5.9319911299579753e-01 -3.7106691537521769e-01 + -6.0049247022900498e-01 8.7954244729715392e-01 -5.8373831779317353e-01 + -7.7555703771865525e-01 1.1520900371252354e+00 -8.0778247532097969e-01 + -9.6977909676932816e-01 1.4056804032904233e+00 -1.0464864909137284e+00 + -1.2001798061112574e+00 1.6274915540479695e+00 -1.3015629060252432e+00 + -1.4791323659499296e+00 1.7938123322633843e+00 -1.5709956002125598e+00 + -1.8073020246294527e+00 1.8784101307436878e+00 -1.8450927674258841e+00 + -2.1799913921147911e+00 1.8728999426394730e+00 -2.1060427575296372e+00 + -2.5914359585064486e+00 1.7796098061450667e+00 -2.3387097377793258e+00 + -3.0175607017547668e+00 1.5860624435114341e+00 -2.5356902413561961e+00 + -3.4288526211160280e+00 1.2894942263588827e+00 -2.6896342994758613e+00 + -3.8386762964860637e+00 9.2781550386445044e-01 -2.7972145933810530e+00 + -4.2832204702694483e+00 5.4610181402991032e-01 -2.8581558613710158e+00 + -4.7642316116728605e+00 1.6103579776021243e-01 -2.8661730822344640e+00 + -5.2653175763137483e+00 -1.8319688836341361e-01 -2.8186989452482023e+00 + -5.7800158556385766e+00 -3.1522156995013612e-01 -2.7300405045742941e+00 + -6.2236268669433565e+00 -1.2449734000585033e-01 -2.6211377960524240e+00 + -6.7880503314491083e+00 -1.1120892437895785e-01 -2.5761190406153314e+00 + id 13831 + loc 9.6535481512546539e-02 9.7426509857177734e-01 400 + blend 0.0000000000000000e+00 + interp 5.4171959796961056e-01:5.4171418077363087e-01:6.1186010761023146e-01:2.5376474090513207e-01:1.4242748946393351e+00:3.6194415774747307e-01:2.5174480205826200e+00:3.0254981116408508e-01:3.0395214826131802e+00:4.0374602859629388e-01:3.9439453538521416e+00 + CVs 20 + -2.8829575808958757e-01 3.0723136965334175e-01 -7.5392674911454974e-02 + -5.4537552732309047e-01 6.0709851328580955e-01 -1.7043486105270553e-01 + -7.8817759582890001e-01 8.9790587140713363e-01 -3.0090068435807432e-01 + -1.0234408165007847e+00 1.1730707767355066e+00 -4.7547480295552325e-01 + -1.2508387434336699e+00 1.4232643397254936e+00 -6.9670990049826398e-01 + -1.4683464088207188e+00 1.6406702593022902e+00 -9.6313122873989421e-01 + -1.6694953562937265e+00 1.8187641023836527e+00 -1.2691816980851112e+00 + -1.8492343451846984e+00 1.9516825300118885e+00 -1.6038944611330890e+00 + -2.0133160960238676e+00 2.0368391234715721e+00 -1.9542616389578888e+00 + -2.1683267598873632e+00 2.0725568317994734e+00 -2.3075661628726336e+00 + -2.3032814866008793e+00 2.0561032161939869e+00 -2.6434469284547486e+00 + -2.4025327431016570e+00 1.9901234062349233e+00 -2.9369598373130286e+00 + -2.4750708293928079e+00 1.8722156305754647e+00 -3.1910264900504584e+00 + -2.5593478151653311e+00 1.6760051169432244e+00 -3.4347952171046083e+00 + -2.7214034013743289e+00 1.3772886792942178e+00 -3.6829043222433193e+00 + -3.0533677097155580e+00 1.0074665393771034e+00 -3.9243101685022621e+00 + -3.6191669746361126e+00 6.9751838686401513e-01 -4.1370097159314714e+00 + -4.3263947282607935e+00 5.8101270886204603e-01 -4.3094521531890875e+00 + -4.9464374555461177e+00 4.8272145366463981e-01 -4.4965042658851804e+00 + id 13832 + loc 5.2878028154373169e-01 4.6796852350234985e-01 415 + blend 0.0000000000000000e+00 + interp 4.9079212867589744e-01:4.8452122298598632e-01:2.0882540811296524e-01:2.9386564478967359e-01:1.0198573292878255e+00:4.9078722075461073e-01:1.8166582267433216e+00:2.5227620740186135e-01:2.4555535433721358e+00:3.0949592189875824e-01:3.7768318968197154e+00 + CVs 20 + -3.0230802597194950e-01 3.0941472071805454e-01 -1.8565490295786261e-01 + -5.4914751549052621e-01 5.4190096819813538e-01 -3.2670311550373254e-01 + -7.6071109276733839e-01 7.3024602420133067e-01 -4.8215107942121760e-01 + -9.6857819307547599e-01 8.9139842893994159e-01 -6.6439970373568480e-01 + -1.1693841508778071e+00 1.0178672986253858e+00 -8.6957762363883329e-01 + -1.3563878310311008e+00 1.1040286836160851e+00 -1.0921720426999442e+00 + -1.5280371178722167e+00 1.1489497004115896e+00 -1.3253713602755575e+00 + -1.6874501807379936e+00 1.1547671120861858e+00 -1.5624952223413884e+00 + -1.8352477799527607e+00 1.1246710614828097e+00 -1.7967642479636254e+00 + -1.9734151316206519e+00 1.0635169104308793e+00 -2.0235450511759852e+00 + -2.1233984592180359e+00 9.7549074157726756e-01 -2.2496766850136471e+00 + -2.3262998990284709e+00 8.5719786051261448e-01 -2.4878057458444629e+00 + -2.6052991998099575e+00 6.9986573497803173e-01 -2.7164888668084077e+00 + -2.9284277056604449e+00 5.0798415831550403e-01 -2.8803183546821165e+00 + -3.2447868673451872e+00 3.0051470954671533e-01 -2.9566991010594963e+00 + -3.5387075912686519e+00 9.0597487237489283e-02 -2.9571900795860806e+00 + -3.8099133490512260e+00 -1.1376831161425294e-01 -2.8916294797881252e+00 + -4.0504193342112362e+00 -3.0166050591465332e-01 -2.7703422981198909e+00 + -4.2288533940378965e+00 -4.4588924039435884e-01 -2.6741219733450809e+00 + id 13833 + loc 1.8479819595813751e-01 5.7676303386688232e-01 1078 + blend 0.0000000000000000e+00 + interp 3.3470522045136858e-01:3.1915390840524771e-01:5.3040701380816513e-01:2.8466056197112366e-01:1.0131137410583175e+00:2.7856763013889196e-01:2.0044111984019324e+00:3.3470187339916407e-01:3.0000587141786523e+00:2.6695143065337901e-01:3.9908176964718249e+00 + CVs 20 + -2.4815294243761641e-02 2.3174539436509917e-01 1.9500699724724033e-01 + -2.3780781412338359e-02 4.5448502905010818e-01 3.5279858304928641e-01 + 1.3271052502295752e-03 6.6772713982337950e-01 4.7664967190851498e-01 + 5.5567625828707834e-02 9.0689946207230632e-01 5.9875761994423871e-01 + 1.4376241330716200e-01 1.1793928219357375e+00 7.1409753358848838e-01 + 2.7525070200989232e-01 1.4957038894646233e+00 8.1080396555300682e-01 + 4.6615696770919901e-01 1.8646779619437839e+00 8.6139399044655418e-01 + 7.3423997701315469e-01 2.2710592048679104e+00 8.1775007148118184e-01 + 1.0788963405225067e+00 2.6568170034454157e+00 6.3015604376507595e-01 + 1.4565848073632923e+00 2.9376170436254698e+00 2.8728389837367230e-01 + 1.8048041426633052e+00 3.0568366342937021e+00 -1.6984837785503704e-01 + 2.0735254563133014e+00 3.0030529756113209e+00 -6.6942946136097814e-01 + 2.2326264067531945e+00 2.8044199330325004e+00 -1.1106052460838214e+00 + 2.2902700211066818e+00 2.5214982950908587e+00 -1.3969107280670268e+00 + 2.2869583946625216e+00 2.2012218897156206e+00 -1.4767907994811731e+00 + 2.2582338964298905e+00 1.8306265061531581e+00 -1.3283843583660988e+00 + 2.1893787702555283e+00 1.2944632193165164e+00 -1.0263930901953213e+00 + 2.0020717596369790e+00 5.0365702177901428e-01 -8.9179860290728696e-01 + 1.9844072898518244e+00 4.3733034422850581e-01 -1.0331394890077723e+00 + id 13834 + loc 8.3440029621124268e-01 5.7875353097915649e-01 393 + blend 0.0000000000000000e+00 + interp 4.7685782085335865e-01:4.0303338619614149e-01:1.6119512321964902e-01:4.7685305227515012e-01:7.3845904692239062e-01:4.1922817898435816e-01:1.0075620220284682e+00:2.7785358028371065e-01:1.4457225361146600e+00:4.1915024553885000e-01:1.9699714819574803e+00:2.6116091853774021e-01:2.6819840715455943e+00:3.9168838368212161e-01:3.0073324914011148e+00:4.6219059740671092e-01:3.7292234634708330e+00 + CVs 20 + -2.0450868605331646e-01 2.0451075881629022e-01 -7.7746848853062905e-02 + -3.8994996056423803e-01 4.2150543578232647e-01 -1.7081234555768535e-01 + -5.5996752336765643e-01 6.4165768110765853e-01 -2.5054235745179809e-01 + -7.1778786394070559e-01 8.5785031185517657e-01 -3.0709811549461941e-01 + -8.6522357678108841e-01 1.0647353462154927e+00 -3.4453096917197334e-01 + -1.0042497044321008e+00 1.2576370422989378e+00 -3.6757311873456838e-01 + -1.1339784120547760e+00 1.4341247895038067e+00 -3.8245983339331607e-01 + -1.2483479868594838e+00 1.5939519208431883e+00 -3.9711666991546035e-01 + -1.3418460425992911e+00 1.7463095659183203e+00 -4.0921490522404702e-01 + -1.4207419962224774e+00 1.9211228074048210e+00 -3.9716579627629267e-01 + -1.5103159110743383e+00 2.1647560454001789e+00 -3.4996283208289819e-01 + -1.6455155815846532e+00 2.4945120272363921e+00 -3.2011403285829704e-01 + -1.8248845790753165e+00 2.8345811934277050e+00 -3.8734968380150986e-01 + -1.9880633416712090e+00 3.0690109486884318e+00 -5.4761158704843393e-01 + -2.0614563439994535e+00 3.1606696264090850e+00 -7.4082997370124903e-01 + -1.9692979992892718e+00 3.1169569716598504e+00 -9.4040994013084567e-01 + -1.6634927246928015e+00 2.8894557446108533e+00 -1.1573016988725280e+00 + -1.3207560152491351e+00 2.4600104213112108e+00 -1.3866491594298671e+00 + -1.3398142826746162e+00 2.2617233474506806e+00 -1.4753891741451166e+00 + id 13835 + loc 3.4953638911247253e-01 6.9698649644851685e-01 402 + blend 0.0000000000000000e+00 + interp 4.3860185304223565e-01:3.0463913984071433e-01:1.8359927847936419e-01:4.0846942492094757e-01:9.3578551499571039e-01:3.9943939244784438e-01:1.5282216366487453e+00:4.3859746702370522e-01:2.0940472577499110e+00:4.0419042100790520e-01:2.9237409848452787e+00:3.5886975369504787e-01:3.7997316551178031e+00 + CVs 20 + 6.6605349544517078e-03 3.4318300948750491e-01 -1.8952229022031647e-01 + 1.2242357341444216e-02 6.6608908505128084e-01 -3.7892986775208448e-01 + 5.3441049450109634e-02 9.8301418306265098e-01 -5.9190187783955928e-01 + 1.4237614131614523e-01 1.2927985594346829e+00 -8.3714542457518748e-01 + 2.6373842731444447e-01 1.5873934794452711e+00 -1.1105176770075949e+00 + 4.0167154786685999e-01 1.8587381105283685e+00 -1.4053320037293016e+00 + 5.4564110099677920e-01 2.1029152020397692e+00 -1.7175345863643781e+00 + 6.8692260525640225e-01 2.3206547159086108e+00 -2.0475473960614958e+00 + 8.1474039404314402e-01 2.5123608962500130e+00 -2.3926190314350060e+00 + 9.2224515370873572e-01 2.6775198994369367e+00 -2.7432958704037453e+00 + 1.0181495559349720e+00 2.8178178757549421e+00 -3.1020972805469578e+00 + 1.1212697931671010e+00 2.9255921606466808e+00 -3.4972295659824031e+00 + 1.2382696178865156e+00 2.9635586913932830e+00 -3.9625906266194786e+00 + 1.3579930242596119e+00 2.8671176106829943e+00 -4.5075302367073267e+00 + 1.4424715486877639e+00 2.5842382015761816e+00 -5.1091400543710535e+00 + 1.4182841609541508e+00 2.1157842316492816e+00 -5.7236294953715507e+00 + 1.1933855702555043e+00 1.5406732874080986e+00 -6.3136991012550876e+00 + 7.3384105785376663e-01 1.0638625044647050e+00 -6.8504996956929860e+00 + 4.5989173133191663e-01 9.9623706672449863e-01 -7.1413229545959203e+00 + id 13836 + loc 6.0253435373306274e-01 5.1421540975570679e-01 1068 + blend 0.0000000000000000e+00 + interp 3.7609612500486772e-01:3.7609236404361768e-01:3.3361148459838075e-01:3.4910345765689144e-01:9.5848175382583345e-01:2.5572993569423508e-01:1.6695174901659000e+00:2.5082139889153221e-01:2.8287191653936627e+00:3.5051094838972785e-01:3.2136581454231243e+00:2.5551846318592797e-01:3.9462352271018166e+00 + CVs 20 + 4.9040504356305158e-02 3.4233814084135822e-01 -1.6345864294668583e-01 + 1.4704323590620291e-01 6.6878307579264673e-01 -3.2264766470750289e-01 + 2.8029292005937073e-01 9.7726014361589952e-01 -4.7776662273234610e-01 + 4.3878697954725721e-01 1.2697857078100510e+00 -6.3219537336159126e-01 + 6.1424914219142002e-01 1.5519561306437815e+00 -7.9011524742317341e-01 + 7.9512000789019466e-01 1.8266176798841296e+00 -9.5680203948985176e-01 + 9.6893869943443189e-01 2.0832116000947405e+00 -1.1404845200244254e+00 + 1.1224465919204221e+00 2.3107437891061071e+00 -1.3400815228968408e+00 + 1.2489059930797364e+00 2.5125191723535059e+00 -1.5487531756865336e+00 + 1.3578517686043690e+00 2.6781227983305027e+00 -1.7679734040304034e+00 + 1.4599983457296930e+00 2.7633227762220312e+00 -1.9863454808837082e+00 + 1.5569448350601143e+00 2.7346728723711187e+00 -2.1790913231817379e+00 + 1.6752206382684385e+00 2.6073136918156292e+00 -2.3465303625768863e+00 + 1.8725818743394198e+00 2.4179614567637966e+00 -2.5135036066960712e+00 + 2.1701483296691304e+00 2.1549850163622137e+00 -2.7080733589489636e+00 + 2.5174551599799067e+00 1.7534493490502139e+00 -2.9634506095538189e+00 + 2.8023576020185890e+00 1.2224559467510097e+00 -3.3333614412340791e+00 + 2.8673666636876787e+00 7.4323192738502941e-01 -3.8123846793785612e+00 + 2.5783085768148744e+00 5.5416425310630202e-01 -4.2497888347799959e+00 + id 13837 + loc 4.8208630084991455e-01 3.5904985666275024e-01 382 + blend 0.0000000000000000e+00 + interp 3.5261874304082497e-01:3.5261521685339459e-01:4.8167754655295325e-02:3.0976499266784019e-01:9.7080011845608860e-01:3.2844810848587602e-01:1.9989476640241546e+00:3.1503491946924594e-01:2.9579472665322921e+00:3.1410324383925398e-01:3.5412116295519667e+00 + CVs 20 + -4.4861237807958820e-01 1.5369067259815389e-01 -8.9473592545123370e-01 + -8.2429832748831300e-01 1.9633931258966092e-01 -1.4969349178513691e+00 + -1.1831231849654542e+00 2.0490162345765039e-01 -2.0261312218594982e+00 + -1.5494258710891353e+00 2.1481131958401489e-01 -2.5845754006481547e+00 + -1.9152546444579119e+00 2.2764501999050446e-01 -3.1800548147213950e+00 + -2.2791173619010827e+00 2.4344416765206955e-01 -3.8160161515936326e+00 + -2.6431031832541980e+00 2.4510698778763107e-01 -4.4947984785491677e+00 + -3.0058538760537417e+00 1.9510860358591753e-01 -5.2152683333901777e+00 + -3.3603395439831023e+00 4.7045975320008537e-02 -5.9612233313422003e+00 + -3.6987460673496195e+00 -2.3766286512958112e-01 -6.6928817578513353e+00 + -4.0125687646124266e+00 -6.8161412114254727e-01 -7.3524791585403335e+00 + -4.2861105016621925e+00 -1.2859239673202567e+00 -7.8754975895150450e+00 + -4.5009571211081258e+00 -2.0074396371913883e+00 -8.2032188863653310e+00 + -4.6553824170822526e+00 -2.7421135723909260e+00 -8.3219642959261932e+00 + -4.7669959379657065e+00 -3.3914298045759832e+00 -8.2959184209546830e+00 + -4.8599394732008694e+00 -3.9341459961383736e+00 -8.2021755499571967e+00 + -4.9663780018566897e+00 -4.3780132509174550e+00 -8.0704516790553527e+00 + -5.0995464345735444e+00 -4.7271521676947579e+00 -7.9087898087907949e+00 + -5.2177379599455680e+00 -5.1573682496632358e+00 -7.7507996079224206e+00 + id 13838 + loc 2.4653550982475281e-01 1.3121542520821095e-02 401 + blend 0.0000000000000000e+00 + interp 4.8404499259911271e-01:3.7630162265027856e-01:3.7441042116020729e-01:2.8625120335407922e-01:1.1501236184233543e+00:3.5060918396122526e-01:2.0546039225163883e+00:4.8404015214918672e-01:2.7848585847171377e+00:2.9342151014618584e-01:3.4066916749164888e+00 + CVs 20 + -1.6264895448663297e-01 2.4512712021438396e-01 1.6175691330565675e-01 + -3.5342613355097346e-01 4.8858745417617239e-01 3.2947152033724619e-01 + -5.4821872054709064e-01 7.1903243251253035e-01 4.9802413070721507e-01 + -7.3361438542740331e-01 9.2551211550091550e-01 6.6051104648066183e-01 + -9.0933111501123731e-01 1.1010455513803679e+00 8.0914941995257361e-01 + -1.0740213283844990e+00 1.2438717622626538e+00 9.3779891856557784e-01 + -1.2333670654280344e+00 1.3571944939023988e+00 1.0520609049970711e+00 + -1.3998281681717932e+00 1.4390081925570541e+00 1.1677902612731976e+00 + -1.5679297789056768e+00 1.4945707513998467e+00 1.2894068236711902e+00 + -1.7181930650552695e+00 1.5538670812181470e+00 1.4081013819227393e+00 + -1.8602801966650553e+00 1.6146359464547859e+00 1.5274882449894547e+00 + -2.0305484171644963e+00 1.5927324591818055e+00 1.6353563935324604e+00 + -2.2474289144954014e+00 1.4455656771036776e+00 1.7025327792748586e+00 + -2.5130639889589506e+00 1.2384977370486576e+00 1.7528488395335613e+00 + -2.8147899526447979e+00 1.0340632742849252e+00 1.8243545700520116e+00 + -3.1272398030088566e+00 7.4434573109519664e-01 1.9088138139037567e+00 + -3.4327731975292779e+00 1.4931866576462449e-01 2.0196354120343498e+00 + -3.7355866117177214e+00 -6.3155039452513373e-01 2.3792988068365082e+00 + -3.9241111473036310e+00 -6.2437924052596938e-01 2.5870425108226489e+00 + id 13839 + loc 5.4852181673049927e-01 9.6741503477096558e-01 380 + blend 0.0000000000000000e+00 + interp 5.1962518332857122e-01:3.8820555652107891e-01:7.3189132978834781e-04:3.5150691811747231e-01:7.5331671784462939e-01:1.9040762015218063e-01:1.8102846545510256e+00:5.1961998707673795e-01:2.3449817184164186e+00:3.2197889905628002e-01:3.1222187559005894e+00 + CVs 20 + -2.8151103194454258e-01 2.2056855518629162e-01 -6.1031224724443545e-01 + -5.4597481132797987e-01 3.7313020855636714e-01 -1.0843727734622228e+00 + -7.9005425918335104e-01 4.9164051774535800e-01 -1.5212419075875294e+00 + -1.0164871937388134e+00 5.9071250821079946e-01 -1.9634427244226269e+00 + -1.2202325844463728e+00 6.6393779897512140e-01 -2.4003200576537589e+00 + -1.3992939997299458e+00 7.0505376515236917e-01 -2.8197458692785493e+00 + -1.5524383267417505e+00 7.0602987096723369e-01 -3.2111190153053109e+00 + -1.6774216903564001e+00 6.6186208918494494e-01 -3.5654860886238358e+00 + -1.7687472385826903e+00 5.7713484049029717e-01 -3.8695459736313995e+00 + -1.8209970980571251e+00 4.7028131473802448e-01 -4.1122005356805822e+00 + -1.8367354597182832e+00 3.7555177016341346e-01 -4.2901097861225876e+00 + -1.8327162672448556e+00 3.3723710493511749e-01 -4.4135159241974380e+00 + -1.8310999182505237e+00 3.6998616576050547e-01 -4.5187878682861609e+00 + -1.8323394120949570e+00 3.8868023021772680e-01 -4.6358325943011298e+00 + -1.8110564215481306e+00 2.4968582965545849e-01 -4.7277948984897886e+00 + -1.7512930067608461e+00 -1.0065425965257724e-01 -4.7715328276442897e+00 + -1.6412982136299548e+00 -6.2346759241683314e-01 -4.8325308749112548e+00 + -1.4996091299785492e+00 -1.2368040904172390e+00 -4.9862487764149446e+00 + -1.6374345922647271e+00 -1.5521347474492933e+00 -5.1032252714609703e+00 + id 13840 + loc 3.8123950362205505e-01 1.8901573121547699e-01 403 + blend 0.0000000000000000e+00 + interp 3.6586062805673780e-01:2.8523168208858868e-01:7.9118812690320572e-01:3.6585696945045726e-01:1.9223493884851268e+00:2.7505513652371966e-01:2.4713401238579591e+00:3.1885430372568757e-01:3.1130079833043887e+00:2.9422731304062971e-01:3.9906196439124431e+00 + CVs 20 + -1.8192816093570879e-01 2.5826629507242932e-01 -2.1678869122321198e-02 + -3.9228620825383032e-01 5.0859782473200632e-01 -5.2494230114375484e-03 + -6.2787332012254304e-01 7.7139571180638933e-01 2.2119086062623805e-02 + -8.8227444269221023e-01 1.0370852033642886e+00 4.4700794900793650e-02 + -1.1555942101080385e+00 1.2835347506219086e+00 6.0220853923594109e-02 + -1.4424976945951504e+00 1.4933020804808841e+00 7.6868950069253095e-02 + -1.7290114854886789e+00 1.6586330325030210e+00 1.1581201368597849e-01 + -1.9934358172628994e+00 1.7710663832725648e+00 1.9473032348101516e-01 + -2.2157376205912040e+00 1.8221247726537331e+00 3.1608667608317409e-01 + -2.3954675329170478e+00 1.8164683723569883e+00 4.7543984854957355e-01 + -2.5487579502636377e+00 1.7637310836060065e+00 6.7034602409123789e-01 + -2.6983837831740050e+00 1.6660491639651840e+00 8.9612680978002879e-01 + -2.8670189576594236e+00 1.5212496619238338e+00 1.1482726658027662e+00 + -3.0574992876702041e+00 1.3321913187324426e+00 1.4278097471150777e+00 + -3.2668628453732618e+00 1.1106192532664194e+00 1.7408436669081528e+00 + -3.5390461085304650e+00 8.8144454358310431e-01 2.0820339095332390e+00 + -3.9438609720489315e+00 7.0358852716303344e-01 2.4008624967288634e+00 + -4.4290505886110481e+00 6.3137625879555914e-01 2.6237694503652458e+00 + -4.8059471038923816e+00 5.4699693625734347e-01 2.8291319003392710e+00 + id 13841 + loc 5.0010251998901367e-01 8.1550872325897217e-01 375 + blend 0.0000000000000000e+00 + interp 5.1455906462598489e-01:2.7567766043127889e-01:8.2737122907969141e-01:5.1455391903533865e-01:1.2700698064733105e+00:2.4682522107821603e-01:2.0441935176929023e+00:4.3841628340756639e-01:2.9150891218702997e+00:2.6152141286071007e-01:3.3833436287938508e+00:4.4461260474774411e-01:3.8683797948438707e+00 + CVs 20 + -4.0516848224166380e-01 4.3977732186270391e-01 -1.6092025516560304e-01 + -8.5468548550410206e-01 7.7377989051254947e-01 -2.7432696685160535e-01 + -1.3812151322636985e+00 9.5934785666843592e-01 -3.3870564918232465e-01 + -1.9453565808864068e+00 1.0597096146559222e+00 -3.7062650363770838e-01 + -2.4926379859266761e+00 1.1594197156917554e+00 -4.0587826099573371e-01 + -2.9845213938675608e+00 1.2903699637420316e+00 -4.9457388492854387e-01 + -3.4031266267887554e+00 1.4450447165348810e+00 -6.6816812722945429e-01 + -3.7436352661849455e+00 1.6138159417746412e+00 -9.2604351332254864e-01 + -4.0110884235672781e+00 1.7906485247384691e+00 -1.2550434530347017e+00 + -4.2291393339209034e+00 1.9596904746695885e+00 -1.6471041822803549e+00 + -4.4204948291493009e+00 2.0805238254842395e+00 -2.0921259142131428e+00 + -4.5823830094759463e+00 2.0923677181350842e+00 -2.5564322756715652e+00 + -4.7001292867672841e+00 1.9540391244475681e+00 -2.9855466468695724e+00 + -4.7643157752739569e+00 1.6803717185467413e+00 -3.3365669939033351e+00 + -4.7847875880351820e+00 1.3047645910321677e+00 -3.5809689388535801e+00 + -4.8636546190128627e+00 8.5977485113119112e-01 -3.6813137074330644e+00 + -5.1889459331448204e+00 4.7424667255208020e-01 -3.5557340539644668e+00 + -5.6788604653328951e+00 3.4054726205193298e-01 -3.3018918852098000e+00 + -5.9599521960175386e+00 -1.1863275965251940e-01 -3.4008828911544282e+00 + id 13842 + loc 6.3011884689331055e-01 9.5492523908615112e-01 373 + blend 0.0000000000000000e+00 + interp 4.2788563549517805e-01:3.4901304860879945e-01:4.8605760332375791e-01:3.8910968706982413e-01:1.0461257767060672e+00:4.2788135663882310e-01:1.4892775260483597e+00:3.0224034686624834e-01:1.9926063223243160e+00:3.5958458324128534e-01:3.0013783610024505e+00:2.9499136579398616e-01:3.9709774171154057e+00 + CVs 20 + -2.0623816570134984e-01 3.4337057592909931e-01 -1.8514391968941840e-01 + -4.1133890082723373e-01 7.1395710397084955e-01 -3.7436701795021676e-01 + -5.7857822266320502e-01 1.1010309009966119e+00 -5.6377051816442691e-01 + -6.9463715924875125e-01 1.4889803785714222e+00 -7.6290441945672516e-01 + -7.6241974014653868e-01 1.8576046217942259e+00 -9.8807946906778055e-01 + -7.9559448837302404e-01 2.1787220629735584e+00 -1.2539405841776563e+00 + -8.1014509450067429e-01 2.4237924461518485e+00 -1.5631452136540351e+00 + -8.1839755223027499e-01 2.5781553646498088e+00 -1.9001619242049439e+00 + -8.2767556964870492e-01 2.6452224667935473e+00 -2.2403234447153806e+00 + -8.4076219605523073e-01 2.6388601665446103e+00 -2.5624640158512664e+00 + -8.6241756026443106e-01 2.5681704697211565e+00 -2.8549367674863553e+00 + -9.0467180109962764e-01 2.4354192757624440e+00 -3.1043685237857392e+00 + -9.8268094287719854e-01 2.2626788513085900e+00 -3.2938368821974588e+00 + -1.0991983351512289e+00 2.0878187699654163e+00 -3.4181113347823691e+00 + -1.2301623850890391e+00 1.9451890167016077e+00 -3.4609543516294106e+00 + -1.3092938302901775e+00 1.8615654811256399e+00 -3.4028127576008425e+00 + -1.2480588010435647e+00 1.7945933527028461e+00 -3.2736675591275759e+00 + -1.1265867527343723e+00 1.6547235261453592e+00 -3.1703155790074300e+00 + -1.3426587307094486e+00 1.6380070903632311e+00 -3.0500109392129344e+00 + id 13843 + loc 5.4322886466979980e-01 1.6634729504585266e-01 395 + blend 0.0000000000000000e+00 + interp 5.5172980833303220e-01:3.2741469345331581e-01:2.8971601027845684e-02:3.6927410467733740e-01:7.7181884216030860e-01:3.5280765845842743e-01:1.1898317933579365e+00:2.9801910776523671e-01:1.8961696288660606e+00:3.4246650006744689e-01:2.8071076403949204e+00:4.9336898730513679e-01:3.0273185123251314e+00:5.5172429103494891e-01:3.3989119493076583e+00 + CVs 20 + -3.3930525237414300e-01 1.4148464243115055e-01 3.0222146506171854e-01 + -6.0469369737933709e-01 2.2050330657033745e-01 5.4598118505601323e-01 + -8.4868331607580005e-01 2.7751913348113660e-01 7.6031412062321013e-01 + -1.0887714234330907e+00 3.3462413011994885e-01 9.5200912863846421e-01 + -1.3275895831678675e+00 3.9615656609422778e-01 1.1182466849630002e+00 + -1.5702786708377414e+00 4.6698232946830809e-01 1.2601374632385327e+00 + -1.8139917088844095e+00 5.5993387842803222e-01 1.3857260757878462e+00 + -2.0548064891068702e+00 6.9208197868697918e-01 1.5079165586078103e+00 + -2.3103801396374242e+00 8.6421348134309595e-01 1.6383187774011678e+00 + -2.6099480617815578e+00 1.0536156591578552e+00 1.7872795752315924e+00 + -2.9607310264926321e+00 1.2274420910728561e+00 1.9751184419333814e+00 + -3.3475539214578309e+00 1.3578556438577962e+00 2.2221181600147792e+00 + -3.7633178725265708e+00 1.4296129280699976e+00 2.5210797339829614e+00 + -4.2141622675661878e+00 1.4361899251543844e+00 2.8425218135212242e+00 + -4.7018294439555959e+00 1.3810723439012200e+00 3.1755624831929525e+00 + -5.2203750676379936e+00 1.2675935036613484e+00 3.5503228919413146e+00 + -5.7413884160868669e+00 1.0699873926518078e+00 3.9916466346635158e+00 + -6.1763610663145254e+00 7.6945740819896358e-01 4.4518529698988942e+00 + -6.3134010315930489e+00 5.0401351900188285e-01 4.7694173056728939e+00 + id 13844 + loc 4.3375650048255920e-01 4.8741647601127625e-01 400 + blend 0.0000000000000000e+00 + interp 5.0088982322804088e-01:3.8683843184636746e-01:4.3963226982369208e-02:3.5333083991311820e-01:8.9328964404980704e-01:4.0571006406583338e-01:1.2576244716664831e+00:5.0088481432980858e-01:1.9126200722147020e+00:2.5793935035807408e-01:2.7119559679765053e+00:4.3241045382088594e-01:3.0300959262148131e+00:3.7894471928052181e-01:3.6595014020824896e+00 + CVs 20 + -1.9863297505657931e-01 2.0124115094888798e-01 2.6771408711671263e-01 + -3.8356803852072219e-01 3.8091018689628647e-01 5.2903121171615652e-01 + -5.7590144978789892e-01 5.4756684339941364e-01 7.9467925177579490e-01 + -7.8720495039231786e-01 7.0413585906889731e-01 1.0685672991659363e+00 + -1.0195995250104892e+00 8.4976397811123050e-01 1.3473341818103710e+00 + -1.2748975593911589e+00 9.8376652895539896e-01 1.6274425976943059e+00 + -1.5565554818585157e+00 1.1049463037941103e+00 1.9055321506139511e+00 + -1.8713335433642606e+00 1.2127401136045994e+00 2.1792338125923036e+00 + -2.2308979635904294e+00 1.3076651384665781e+00 2.4467833540957939e+00 + -2.6490384871904027e+00 1.3857090989134795e+00 2.7011648412064639e+00 + -3.1289448159159043e+00 1.4385974718935630e+00 2.9291437495485870e+00 + -3.6543166847088830e+00 1.4612471014277153e+00 3.1251013143969280e+00 + -4.1951733538633693e+00 1.4545808668227291e+00 3.3053406631120463e+00 + -4.7159978017117119e+00 1.4117836654303964e+00 3.5008203687177297e+00 + -5.1816988603901217e+00 1.3185470704975621e+00 3.7428836033795552e+00 + -5.5683857582471532e+00 1.1839320159474798e+00 4.0510817754052235e+00 + -5.8728650967575877e+00 1.0404473522685014e+00 4.4219842377711975e+00 + -6.1266665780749054e+00 8.8398763566129723e-01 4.8338181324505349e+00 + -6.4787194013306690e+00 5.9951010888905021e-01 5.2585124018179830e+00 + id 13845 + loc 4.0491628646850586e-01 3.7848210334777832e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1329914064299988e-01:3.5414007882280168e-01:7.4027254742770943e-02:4.0066130949199585e-01:9.5499080124192437e-01:4.1329500765159349e-01:1.3015376639800436e+00:2.9917456258208230e-01:1.9901488328626002e+00:3.4731271353034920e-01:2.7404918013678254e+00:2.9229915670721951e-01:3.0680247206716338e+00 + CVs 20 + -2.0714256066090478e-01 3.2523643611026914e-01 -1.7272784857214590e-02 + -3.8795300532547061e-01 6.1724721512782543e-01 -7.8653529888910723e-02 + -5.5044634705822726e-01 8.9180807704380016e-01 -1.6340376331750417e-01 + -7.0674497127217362e-01 1.1544596383947268e+00 -2.6841717290673228e-01 + -8.7294523107914956e-01 1.4064661506579694e+00 -3.9802061506001352e-01 + -1.0666466006186925e+00 1.6488662583053904e+00 -5.3908540765009316e-01 + -1.3012464465481637e+00 1.8718551554329861e+00 -6.6169153325335683e-01 + -1.5778483902972971e+00 2.0500869806360482e+00 -7.3859544698307389e-01 + -1.8819914004792559e+00 2.1530526618995367e+00 -7.6272088006903149e-01 + -2.1943606781926928e+00 2.1618590901342869e+00 -7.4416561522292723e-01 + -2.5019781664672069e+00 2.0735336792699779e+00 -6.9647480076478308e-01 + -2.7944974205077515e+00 1.8967545776800188e+00 -6.3187977208576573e-01 + -3.0611592545627540e+00 1.6521724646068909e+00 -5.6424905457455099e-01 + -3.2950516742033837e+00 1.3700772383170927e+00 -5.0909550126379988e-01 + -3.4947047758391392e+00 1.0818471145797823e+00 -4.7926327435815808e-01 + -3.6538381296670326e+00 8.1916181834273971e-01 -4.7898145352007682e-01 + -3.7524273212993999e+00 6.1463072486092063e-01 -4.8995254287713508e-01 + -3.8039527818568590e+00 4.5674867499197591e-01 -4.9217271899949033e-01 + -3.9028634120762935e+00 2.9537707485643838e-01 -7.1180075514425623e-01 + id 13846 + loc 8.6874711513519287e-01 2.8568375110626221e-01 396 + blend 0.0000000000000000e+00 + interp 3.7456579199246981e-01:3.2224796482553891e-01:4.7381532029154849e-03:3.4591937384194044e-01:9.8105943480621993e-01:3.0364890326760752e-01:1.3786379982920349e+00:3.6114073213870290e-01:1.9982036436449704e+00:3.7456204633454993e-01:2.7006180466850189e+00:3.6330157735793611e-01:3.0776813116702013e+00 + CVs 20 + -7.2355534960470103e-01 2.2108944359279795e-01 3.9330700267557550e-01 + -1.2578049487072089e+00 3.2272239112533979e-01 6.7804060290821777e-01 + -1.7377575582968798e+00 3.7073743201825038e-01 9.1897660719135010e-01 + -2.2232253596889140e+00 3.8785503236817970e-01 1.1452047814464723e+00 + -2.7009189231478437e+00 3.6481909592149608e-01 1.3592048245262442e+00 + -3.1590741900603954e+00 2.9793242902088146e-01 1.5671894340987003e+00 + -3.5880461473519882e+00 1.9109787309997950e-01 1.7747430064674010e+00 + -3.9820362734265902e+00 5.5495629266988367e-02 1.9809421066874788e+00 + -4.3429849918569072e+00 -9.8563432715363053e-02 2.1819687393964666e+00 + -4.6791632380675106e+00 -2.7100197478578458e-01 2.3769776203635180e+00 + -4.9954820452007516e+00 -4.7020627671999748e-01 2.5643486782337135e+00 + -5.2829916163429758e+00 -7.0686615302612510e-01 2.7392727623628703e+00 + -5.5311157296697697e+00 -9.8476880407368106e-01 2.8932544802896887e+00 + -5.7422082702424202e+00 -1.3027127196178008e+00 3.0154681017452116e+00 + -5.9247792597922500e+00 -1.6549017400165844e+00 3.0975884498226911e+00 + -6.0834500618797680e+00 -2.0188349585181609e+00 3.1378759749465974e+00 + -6.2211614784443787e+00 -2.3605393362951985e+00 3.1413757904508177e+00 + -6.3384309360612789e+00 -2.6658901358717162e+00 3.1145035531650831e+00 + -6.3447508529326608e+00 -3.0826669286609318e+00 3.0265164731660978e+00 + id 13847 + loc 6.9561630487442017e-01 1.4081791043281555e-01 409 + blend 0.0000000000000000e+00 + interp 4.2243023289343951e-01:2.6515988064583201e-01:9.2543633555106197e-01:2.8974766523341527e-01:1.5673834403107476e+00:3.0090858785926106e-01:2.4408396312083402e+00:2.8352117246342312e-01:3.2767818303848308e+00:4.2242600859111057e-01:3.9944190181094794e+00 + CVs 20 + -2.4071193195467475e-01 1.2479778271434791e-01 1.1977608886773296e-01 + -4.9729867385696719e-01 2.4795457908286908e-01 2.4498516655102018e-01 + -7.6434616394890642e-01 3.6373409257607786e-01 3.5597785199556853e-01 + -1.0343943971167211e+00 4.6763167858933052e-01 4.4646651177924690e-01 + -1.2998743617067476e+00 5.5743560650673274e-01 5.1979018935568833e-01 + -1.5534885662524240e+00 6.3292409022385776e-01 5.7923032120915741e-01 + -1.7883226177988369e+00 6.9571176429541692e-01 6.2729693137953502e-01 + -1.9981330993503339e+00 7.4861113984820726e-01 6.6624861011393821e-01 + -2.1816659715682705e+00 7.9694568593050186e-01 6.9851065525866085e-01 + -2.3437653365237603e+00 8.4909000960711767e-01 7.2543147670507480e-01 + -2.4922581437515499e+00 9.1468835934630166e-01 7.4763475763827647e-01 + -2.6395523049635354e+00 9.9752367890763671e-01 7.6898685038871073e-01 + -2.7990228287967271e+00 1.0904021363690153e+00 7.9716511603803542e-01 + -2.9784326532975314e+00 1.1850293818210258e+00 8.3846316000828780e-01 + -3.1817069503180324e+00 1.2785972215631414e+00 8.9701243622794880e-01 + -3.4108002306706742e+00 1.3717839646027001e+00 9.8286023605405337e-01 + -3.6639691984502072e+00 1.4606084604890615e+00 1.1127876045188301e+00 + -3.9283589675836352e+00 1.5295278909334200e+00 1.2856470154363011e+00 + -4.0421111242822576e+00 1.5454597491826292e+00 1.4193882499805661e+00 + id 13848 + loc 2.3502869904041290e-01 1.8503461778163910e-01 415 + blend 0.0000000000000000e+00 + interp 4.8359007794985509e-01:3.2842150614972249e-01:6.0279883633754816e-01:4.1541997522439811e-01:1.1256133656647866e+00:3.0439433100858249e-01:2.0397225886895476e+00:3.1433787744160036e-01:2.7696423974703670e+00:2.7126243506815717e-01:3.2499234422391146e+00:4.8358524204907560e-01:3.9634375183420820e+00 + CVs 20 + -4.2827884936155886e-02 9.2198146185231575e-02 -7.9652584317057032e-02 + -9.2518661180484102e-02 1.4757017813570963e-01 -1.1594010626970072e-01 + -1.5469605897750466e-01 1.9742360016352722e-01 -1.3370819334165984e-01 + -2.2646421097162125e-01 2.4388877494153408e-01 -1.5804898785386889e-01 + -3.0866189370773667e-01 2.9125767436750927e-01 -1.9254689449914983e-01 + -4.0081100789046387e-01 3.4495845853752660e-01 -2.4110692465752720e-01 + -5.0006278447630970e-01 4.1007901476955555e-01 -3.0832884322773957e-01 + -6.0006942572305244e-01 4.8891052615911823e-01 -3.9780420003729328e-01 + -6.9234174746311150e-01 5.7953021391752269e-01 -5.1015454750931288e-01 + -7.6928172925865401e-01 6.7995643794592175e-01 -6.4202558793679920e-01 + -8.2490480448583969e-01 7.9171081907521379e-01 -7.8452096417746031e-01 + -8.5538541626013398e-01 9.1576411460689222e-01 -9.2352642321175382e-01 + -8.6103866799957396e-01 1.0438351386621010e+00 -1.0501230575397484e+00 + -8.4590196694341502e-01 1.1635587635490565e+00 -1.1621407775590489e+00 + -8.1552392175291633e-01 1.2696829139984833e+00 -1.2540054058209804e+00 + -7.7445604052563233e-01 1.3654110878635461e+00 -1.3164717805944224e+00 + -7.2254373900382995e-01 1.4575978601592974e+00 -1.3493611593518886e+00 + -6.5402083152347501e-01 1.5504077671386478e+00 -1.3733104771992197e+00 + -5.9996823102358188e-01 1.5804260540527806e+00 -1.3920340758369103e+00 + id 13849 + loc 9.8431289196014404e-01 2.9191458225250244e-01 412 + blend 0.0000000000000000e+00 + interp 3.9840214933311663e-01:3.4605796974740066e-01:5.2296646934991409e-01:3.8892293182454740e-01:1.0624082125112133e+00:3.9839816531162331e-01:1.8062544395692486e+00:2.5642800281375222e-01:2.0923648239217822e+00:3.6257335035283828e-01:3.0100305244489647e+00:3.2822843236812482e-01:3.9757166751761153e+00 + CVs 20 + -6.9494593010477190e-01 1.4332223918234460e-01 2.2474631483716548e-01 + -1.1910941742383740e+00 1.6703846143534118e-01 4.4004035583229140e-01 + -1.6742598182557571e+00 1.6299464041976941e-01 6.5386361737570375e-01 + -2.1801239374344976e+00 1.5663585674357239e-01 8.5456439962195274e-01 + -2.6698611841668822e+00 1.3113936961879802e-01 1.0404955493558856e+00 + -3.1140363609628943e+00 7.3617966351094744e-02 1.2230144691965159e+00 + -3.5139490545663739e+00 -2.1136717044437647e-02 1.4167088169409652e+00 + -3.8930608199957071e+00 -1.6515422368483357e-01 1.6439210083581672e+00 + -4.2656479814699617e+00 -3.7226383532235841e-01 1.9018443466111048e+00 + -4.6314920296237077e+00 -6.4502665303655560e-01 2.1517288536301020e+00 + -4.9878521992405327e+00 -9.8429720683591859e-01 2.3529223232842296e+00 + -5.3384228210686135e+00 -1.3979815043339032e+00 2.4901719818709247e+00 + -5.6834006024515009e+00 -1.8727848987092495e+00 2.5671642485410251e+00 + -6.0090986679050244e+00 -2.3722309314257197e+00 2.5971575248361005e+00 + -6.2883212353228561e+00 -2.8573917841826577e+00 2.5966309647001360e+00 + -6.4889710538045993e+00 -3.2684263953947372e+00 2.5939413280674364e+00 + -6.5913974273279585e+00 -3.5576508015859214e+00 2.6279220023866774e+00 + -6.6356962699137778e+00 -3.7703624775152416e+00 2.7311317816305554e+00 + -6.7610453540784707e+00 -4.0167625208246145e+00 2.9027606240904644e+00 + id 13850 + loc 3.5824048519134521e-01 2.7114665135741234e-04 374 + blend 0.0000000000000000e+00 + interp 4.5062393234228054e-01:2.1704540699646635e-01:6.9735257439513565e-01:4.5061942610295713e-01:1.4913105749854076e+00:3.4828959654107539e-01:2.0534722504036824e+00:2.6047136637301094e-01:2.8190300133778146e+00:2.5339963536443211e-01:3.7420350419894843e+00 + CVs 20 + -3.6583175896609094e-01 3.9471443721725752e-01 7.5856996431775947e-01 + -5.2116591980241778e-01 5.9605678959675801e-01 1.3307923733481313e+00 + -5.3595681137872198e-01 6.3792536255306809e-01 1.8517436689719646e+00 + -4.6138796659141967e-01 5.7044837697099327e-01 2.3971704608079136e+00 + -3.4871143469053756e-01 4.6165775855614943e-01 2.9862177892376609e+00 + -2.6657609092309753e-01 3.6177380625277633e-01 3.6256298376387832e+00 + -2.8520367306253624e-01 2.7746484676994831e-01 4.3106759085641242e+00 + -4.5527340714166198e-01 2.0763713265707318e-01 5.0170181021517237e+00 + -7.8819330320331260e-01 1.6468767331335488e-01 5.6910353309467130e+00 + -1.2502194175762105e+00 1.5683175091959622e-01 6.2818127911624302e+00 + -1.7895019463474089e+00 1.7092224238791243e-01 6.7848115352823806e+00 + -2.3743002467870893e+00 1.6671464739214059e-01 7.2241658275716158e+00 + -2.9971933176759498e+00 7.7251463825949607e-02 7.6056065981700565e+00 + -3.6450106970979865e+00 -1.5910586606190824e-01 7.8992780146267343e+00 + -4.2650466630170349e+00 -5.4280374656100427e-01 8.0659424898002854e+00 + -4.7732177986970994e+00 -9.9525466707388821e-01 8.1105386393019288e+00 + -5.1051244155460651e+00 -1.4144969987331013e+00 8.1286462671314226e+00 + -5.2972507035875971e+00 -1.8091478781537313e+00 8.1828850394738399e+00 + -5.4299293306687684e+00 -2.3153304061565598e+00 8.2508843535308003e+00 + id 13851 + loc 1.7916484177112579e-01 6.9304686784744263e-01 378 + blend 0.0000000000000000e+00 + interp 4.4997466119936713e-01:4.4997016145275515e-01:6.4644160336524914e-01:3.3349573696865059e-01:1.0016793411684537e+00:2.9341339549006856e-01:1.5423667593841632e+00:2.8288349308048494e-01:2.2218551975892948e+00:2.5208283002221610e-01:2.9962511310770763e+00:4.3174732043181546e-01:3.2796218004835191e+00:4.0046703558589292e-01:3.9990744783998693e+00 + CVs 20 + 6.8832036345596748e-01 3.5016427339454892e-01 1.7856003428390349e-01 + 1.2901225745775711e+00 6.0736329887357288e-01 2.8138754989082437e-01 + 1.8697579916926013e+00 8.3310916387963985e-01 3.7570701074425983e-01 + 2.4509757265766998e+00 1.0689906877783948e+00 5.0971179758543228e-01 + 3.0199263414207342e+00 1.3132729545593951e+00 7.1007626167107629e-01 + 3.5666302681414064e+00 1.5400207773355339e+00 9.9060337216464533e-01 + 4.0887484350466794e+00 1.7201000354419864e+00 1.3553152577551382e+00 + 4.5807866099466992e+00 1.8285108970928459e+00 1.7980260075252248e+00 + 5.0328543019961280e+00 1.8427866344533173e+00 2.2957901087471155e+00 + 5.4362792376660103e+00 1.7445037760140538e+00 2.8116517135195429e+00 + 5.7827296690732792e+00 1.5208524721202337e+00 3.3107650375623194e+00 + 6.0573637345067706e+00 1.1713907924769695e+00 3.7685035054275957e+00 + 6.2419981940933962e+00 7.2860378830225825e-01 4.1693506436735017e+00 + 6.3363694218315247e+00 2.6564900777498446e-01 4.5130852100366479e+00 + 6.3650503474941438e+00 -1.4436430899040120e-01 4.8254626623906702e+00 + 6.3614867221958935e+00 -4.8636981603181129e-01 5.1236515348867417e+00 + 6.3675943083543487e+00 -8.0294520875187736e-01 5.4068904135672398e+00 + 6.4195004237405504e+00 -1.1441298947617957e+00 5.6759726664768486e+00 + 6.4211941678635753e+00 -1.4749512790396135e+00 5.9229711941035852e+00 + id 13852 + loc 6.3108369708061218e-02 8.6210213601589203e-02 379 + blend 0.0000000000000000e+00 + interp 3.2262865357609405e-01:1.8335539138938636e-01:1.4661506758465781e-01:3.2262542728955829e-01:8.4923027494288184e-01:3.0084174281142595e-01:1.3327693908425799e+00:2.1599457609199074e-01:1.9750449094727716e+00:1.8493570953618510e-01:3.0978406911617742e+00 + CVs 20 + 2.6995755190268278e-01 3.7013896321981971e-01 3.6302971520328070e-01 + 5.8800962175943572e-01 6.3866204510128355e-01 6.7256902207033675e-01 + 9.6781438549526533e-01 7.8588831150305771e-01 9.5953098416748051e-01 + 1.3946109391630399e+00 8.7091102200405812e-01 1.2490854796786173e+00 + 1.8232978576769656e+00 9.6999327058294016e-01 1.5600638317756081e+00 + 2.1911820595577640e+00 1.1147786473492087e+00 1.9139888719726272e+00 + 2.4455038561846267e+00 1.2917824207070503e+00 2.3142035699100836e+00 + 2.5658895617214670e+00 1.4738303496500458e+00 2.7328166167327046e+00 + 2.5688457840272836e+00 1.6328248772537042e+00 3.1298960185277265e+00 + 2.4997005551236344e+00 1.7488801290672169e+00 3.4831932790576809e+00 + 2.4087246401154907e+00 1.8142667091529889e+00 3.7808387492263500e+00 + 2.3464126174889559e+00 1.8373435986093678e+00 4.0015455758046512e+00 + 2.3585188094912208e+00 1.8569122384208596e+00 4.1459281957270591e+00 + 2.4599802261725547e+00 1.9122345259635205e+00 4.2775668581616220e+00 + 2.6106873910481951e+00 2.0031893479594634e+00 4.4806273183049319e+00 + 2.6835341059964066e+00 2.1098146819311250e+00 4.7536855892261540e+00 + 2.5241597156130489e+00 2.2745901602505190e+00 4.9809115141197848e+00 + 2.1364123302480222e+00 2.3791262874785524e+00 5.1302119392163714e+00 + 2.3589010343839649e+00 2.0491216300663080e+00 5.2170334314342526e+00 + id 13853 + loc 4.8961618542671204e-01 5.4712110757827759e-01 399 + blend 0.0000000000000000e+00 + interp 4.0871397287432104e-01:2.6649314628539189e-01:8.5056828317569089e-01:2.7723729019891519e-01:1.7946372599766789e+00:2.6440554859870491e-01:2.8086420156403449e+00:4.0870988573459233e-01:3.4736304609325184e+00:2.5923117878124552e-01:3.9998913387764139e+00 + CVs 20 + -1.3106454215796895e-01 2.6816324767535787e-01 -1.5810420804423958e-01 + -2.9637253163981325e-01 5.4081477246383436e-01 -3.2498690886233972e-01 + -4.6839173006434370e-01 8.0687135821469635e-01 -5.2436026205997477e-01 + -6.3236582615456904e-01 1.0486698611437744e+00 -7.5748931729275726e-01 + -7.9305365993282018e-01 1.2575078371469119e+00 -1.0122893818370042e+00 + -9.5713349566754480e-01 1.4293353246892047e+00 -1.2742614205776019e+00 + -1.1272215814783957e+00 1.5601908029439875e+00 -1.5279553105742580e+00 + -1.2988644910929490e+00 1.6466827489012035e+00 -1.7529560244161777e+00 + -1.4629764029932411e+00 1.6930546823522450e+00 -1.9269053025650809e+00 + -1.6099645800920772e+00 1.7172950869937356e+00 -2.0353280014474491e+00 + -1.7328956386290311e+00 1.7345883890198093e+00 -2.0829936341736839e+00 + -1.8380418436662462e+00 1.7177510857472620e+00 -2.0953733566796950e+00 + -1.9407310012177994e+00 1.6117474533464129e+00 -2.0862178702905436e+00 + -2.0713051159050813e+00 1.3579585593195516e+00 -2.0660030485279903e+00 + -2.2978361741073758e+00 9.0013303381144072e-01 -2.0929769897500292e+00 + -2.7134188917395874e+00 2.3471296415886178e-01 -2.3354789233201929e+00 + -3.2566131403580347e+00 -5.0169978530258064e-01 -3.0403188418978551e+00 + -3.5665771958536392e+00 -9.9281547147729310e-01 -3.9879840990859345e+00 + -3.5600113895900747e+00 -1.1809271260489527e+00 -4.3074096723475250e+00 + id 13854 + loc 2.4086110293865204e-01 1.3745422661304474e-01 402 + blend 0.0000000000000000e+00 + interp 4.0608214352984201e-01:2.5496290638862551e-01:1.6087858271169320e-01:4.0607808270840673e-01:1.1957113404234099e+00:3.3092459458154605e-01:1.9915868145082771e+00:4.0133197500303791e-01:2.8512112165392454e+00:2.8638342293701974e-01:3.1651848033827221e+00 + CVs 20 + -1.1069563382750980e-01 3.9604710001923904e-01 2.5106272475048103e-01 + -2.3862948182559046e-01 8.0417329239108359e-01 4.7415161397425631e-01 + -4.2148674954358728e-01 1.2196920801719173e+00 6.6748984154307200e-01 + -6.7571949387199970e-01 1.6250077170286490e+00 8.3579494646045460e-01 + -1.0015893324779364e+00 1.9960351318935385e+00 9.8486583787408311e-01 + -1.3916145940018594e+00 2.3110624213149089e+00 1.1151216307888681e+00 + -1.8324555268557265e+00 2.5538163542633363e+00 1.2265798808611972e+00 + -2.3064677376561207e+00 2.7135040758214402e+00 1.3266434502829498e+00 + -2.7946128161862402e+00 2.7858902649703907e+00 1.4220181516206742e+00 + -3.2777826944387263e+00 2.7722804860541048e+00 1.5091676882699665e+00 + -3.7363380039170728e+00 2.6765136741742075e+00 1.5856829284961436e+00 + -4.1521923985028071e+00 2.5035043037466043e+00 1.6646300171797919e+00 + -4.5139797799635000e+00 2.2635353102029425e+00 1.7706451651106514e+00 + -4.8231955702098555e+00 1.9772119910682115e+00 1.9357484968315952e+00 + -5.0832352532587199e+00 1.6781393757395322e+00 2.1959595405992318e+00 + -5.2900413189777815e+00 1.4312646305554320e+00 2.5713923650640877e+00 + -5.4407818813260755e+00 1.3313468709836596e+00 3.0309333159843885e+00 + -5.5440118381205732e+00 1.4042095208508973e+00 3.4836124647939726e+00 + -5.6623346764264326e+00 1.4561632645509475e+00 3.9359159097823606e+00 + id 13855 + loc 9.1798549890518188e-01 3.7970894575119019e-01 1068 + blend 0.0000000000000000e+00 + interp 4.5974618518137222e-01:3.7723150821202944e-01:6.5906084561265033e-01:3.2287615117105006e-01:1.0348876311311495e+00:2.6250114085721654e-01:1.7960691857108726e+00:4.5974158771952045e-01:2.3243567545557977e+00:2.5432560573936075e-01:3.0108887590352822e+00:2.4296112995069830e-01:3.9976091904423723e+00 + CVs 20 + -1.9753719098365888e-01 2.2168573698295591e-01 2.3517481573203597e-01 + -3.9409151310293267e-01 4.4668948098708805e-01 4.6683090197959265e-01 + -5.9074754414894837e-01 6.7193531692607333e-01 6.8242098906283455e-01 + -7.8091431907239917e-01 8.8553265686638083e-01 8.6935319620245055e-01 + -9.5653109549638005e-01 1.0724610221822126e+00 1.0167288155207588e+00 + -1.1183331379479315e+00 1.2232193309227626e+00 1.1178238428562171e+00 + -1.2728137072832453e+00 1.3340068671005845e+00 1.1778819212807738e+00 + -1.4273835218834114e+00 1.4024968443313313e+00 1.2145538796948174e+00 + -1.5488662104163144e+00 1.4500055868030566e+00 1.2338386910765888e+00 + -1.5642336493359847e+00 1.5691688839710047e+00 1.2089969669410585e+00 + -1.5388553600926864e+00 1.7854153845109744e+00 1.1882937866125123e+00 + -1.5864551479638451e+00 1.8710317589203838e+00 1.2123338946362341e+00 + -1.7500897260130901e+00 2.0558675808941653e+00 1.1561185075512141e+00 + -1.9483929431575471e+00 2.1477814675012299e+00 1.2529334420178753e+00 + -1.8939460564453920e+00 1.9886601860006772e+00 1.4774569547077587e+00 + -1.5784522432043484e+00 1.6419252581112662e+00 1.6763715288877343e+00 + -1.1717740641670464e+00 1.1818654615848887e+00 1.8115266468974569e+00 + -8.0456692314207601e-01 5.8298628463352453e-01 2.0279568740781118e+00 + -6.7532134130324317e-01 3.7350987006027969e-01 2.1489648866099795e+00 + id 13856 + loc 7.8924137353897095e-01 5.4137308150529861e-02 407 + blend 0.0000000000000000e+00 + interp 3.7637654097416456e-01:2.9959171088138148e-01:1.1046310056034947e-01:3.7637277720875484e-01:9.6150606778463998e-01:2.2728507704590931e-01:1.9383641692234428e+00:3.1727918523663323e-01:2.9421886194791438e+00:3.4498976614477983e-01:3.6062217153556668e+00 + CVs 20 + -3.1731524571318309e-01 2.6069984579884431e-01 1.1111826143567888e-01 + -4.6801501765093767e-01 3.8396653786365587e-01 1.9259143986471705e-01 + -5.1935723964815206e-01 4.4562745916549829e-01 2.6254895133215927e-01 + -5.5804683883803252e-01 5.0174018372956308e-01 3.2733016977801527e-01 + -5.8103615449117818e-01 5.5532149419110255e-01 3.9441000427480044e-01 + -5.8489453071723629e-01 6.1521445707808886e-01 4.7793923756251117e-01 + -5.7218512887026773e-01 7.0428657568859010e-01 5.9722444317943013e-01 + -5.6488769175805476e-01 8.6047096255199695e-01 7.5735948691335508e-01 + -6.0331080376265678e-01 1.0922195708417617e+00 9.1241180514406728e-01 + -6.8783568016042862e-01 1.3355624056955964e+00 9.9821948925429049e-01 + -7.7644176446557300e-01 1.5352780500110685e+00 1.0068199278322592e+00 + -8.4691830159883896e-01 1.6898077107511149e+00 9.5803760913416725e-01 + -8.9647757309162779e-01 1.8094505491936719e+00 8.6526252899769607e-01 + -9.1454200319127543e-01 1.8848300513946843e+00 7.4228366808627155e-01 + -8.8083057645793106e-01 1.8959821493784585e+00 6.0848476379255390e-01 + -7.8819815359342049e-01 1.8373061771083923e+00 4.7348856226234382e-01 + -6.5502601663622317e-01 1.7251996604704993e+00 3.2765490184007562e-01 + -5.1352430472569566e-01 1.5813240175384040e+00 1.5904441737578792e-01 + -4.9505371221019179e-01 1.5704784008342227e+00 -1.7007461737021945e-03 + id 13857 + loc 7.6647144556045532e-01 3.8328844308853149e-01 380 + blend 0.0000000000000000e+00 + interp 4.3037704176843067e-01:2.5257741662207900e-01:1.9654411413171025e-01:2.9995632380522080e-01:9.9990924906669054e-01:4.3037273799801301e-01:1.7682388404143521e+00:2.9376736623532140e-01:2.4089117102271631e+00:2.9308157137297397e-01:3.0551796752471683e+00:3.6982829308872917e-01:3.9164693059205877e+00 + CVs 20 + 5.4021732786944521e-01 2.4101041347644017e-01 6.5941689083484700e-01 + 9.7702059109668804e-01 3.6285637207434984e-01 1.1665542959031030e+00 + 1.3729449370351436e+00 4.3772031405985634e-01 1.6509480654848205e+00 + 1.7605851516970656e+00 4.9940529322334348e-01 2.1693594426063454e+00 + 2.1430576375762258e+00 5.4552271391073592e-01 2.7127581505856404e+00 + 2.5263465370636351e+00 5.5932672081198165e-01 3.2723177594307473e+00 + 2.9110176003038006e+00 5.0883024431671608e-01 3.8369430685610695e+00 + 3.2979351595544091e+00 3.7424681682300642e-01 4.3821033972649426e+00 + 3.6904838941265896e+00 1.5139160223159287e-01 4.8764911397724635e+00 + 4.0919166590092129e+00 -1.5169971293788054e-01 5.2865843015235159e+00 + 4.4956529632857647e+00 -5.1485240321872583e-01 5.5808846625827648e+00 + 4.8838870554179330e+00 -9.0859609917894923e-01 5.7441256556460925e+00 + 5.2449638068657531e+00 -1.2985326583102244e+00 5.7891793913765532e+00 + 5.5862700315066647e+00 -1.6555544528375346e+00 5.7572492860541287e+00 + 5.9166507353075506e+00 -1.9729128910722227e+00 5.6920313197531343e+00 + 6.2222196444984146e+00 -2.2401768993298945e+00 5.6069229259151010e+00 + 6.4625041306382602e+00 -2.4019978146533747e+00 5.4922188429726502e+00 + 6.5851178588451287e+00 -2.4169540522784203e+00 5.3423850082236726e+00 + 6.8118749245960561e+00 -2.5777023938953225e+00 5.2323240111880729e+00 + id 13858 + loc 5.0550371408462524e-01 2.8729224205017090e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9385208061779825e-01:2.7326001739755190e-01:6.2527128511452279e-01:3.9384814209699209e-01:1.1341674392401075e+00:2.6636499182385243e-01:1.9999940288818643e+00:3.8101768030662209e-01:2.6974255188779290e+00:2.6599193303070756e-01:3.7067625566088278e+00 + CVs 20 + -1.1352717653377127e-01 2.5598758003098415e-01 3.6277606881509550e-02 + -2.4335621055334858e-01 4.9194909528262248e-01 8.0692132249365806e-02 + -3.7814176732623361e-01 7.2197819040471611e-01 1.2877645614991295e-01 + -5.0929950577636007e-01 9.4751193822187108e-01 1.7872366527240025e-01 + -6.4022157495539700e-01 1.1684243580476088e+00 2.3906022345432720e-01 + -7.7595692711201769e-01 1.3856395453071060e+00 3.2559579509170827e-01 + -9.1904909295956594e-01 1.5929198450203050e+00 4.6440813128524061e-01 + -1.0608691079442152e+00 1.7708080427183832e+00 6.7851738551572793e-01 + -1.1782980497614561e+00 1.8924899428615323e+00 9.7168163954240661e-01 + -1.2458113316619033e+00 1.9360065638593282e+00 1.3245395277561272e+00 + -1.2456030264117233e+00 1.8895888062092920e+00 1.7005183320554682e+00 + -1.1697553835833809e+00 1.7521923689596020e+00 2.0511323458064008e+00 + -1.0322374983643758e+00 1.5356469190965474e+00 2.3292092561724878e+00 + -8.7181887697715765e-01 1.2674842591051296e+00 2.5026203190691829e+00 + -7.2902763309593721e-01 9.8334243674319355e-01 2.5690611115604378e+00 + -6.0853816899233182e-01 6.9296102348197863e-01 2.5929755626465067e+00 + -4.8589161343066573e-01 3.7102833669284019e-01 2.6824692223372244e+00 + -3.3000250508972062e-01 1.2388172481235049e-01 2.9586982064148497e+00 + -3.1420146915737723e-01 3.0419706452674466e-01 2.9688120659854249e+00 + id 13859 + loc 6.4595174789428711e-01 1.5007610619068146e-01 393 + blend 0.0000000000000000e+00 + interp 4.4025687275894521e-01:4.1815517003270641e-01:2.2074673670576805e-03:3.9996512395940698e-01:5.7305816369001850e-01:4.4025247019021763e-01:9.9974754079376393e-01:3.8814761331485481e-01:1.3564216328380194e+00:2.6190384711443671e-01:2.2592827675049003e+00:3.5463065481780653e-01:3.0250267107051201e+00:3.8624836679532598e-01:3.5817542524862271e+00 + CVs 20 + 3.6579545845353645e-01 3.5929032193917970e-01 1.5684085933070099e-01 + 7.4404140849835809e-01 7.1692186896599841e-01 3.1421257756456522e-01 + 1.1343938059413503e+00 1.0886370394622960e+00 4.9059403625824982e-01 + 1.5305178962599744e+00 1.4488528642864362e+00 7.1894610497649558e-01 + 1.9232631194179972e+00 1.7571634491970367e+00 1.0349509648940272e+00 + 2.2997728583623349e+00 1.9975509394053197e+00 1.4566069350385549e+00 + 2.6424023381984978e+00 2.1628897658766011e+00 1.9683003751189148e+00 + 2.9453474697600264e+00 2.2395341512113136e+00 2.5201715528122786e+00 + 3.2170648669975259e+00 2.2183569263850220e+00 3.0525265371298342e+00 + 3.4631594705949365e+00 2.1024648993044890e+00 3.5102231833484536e+00 + 3.6798201208595751e+00 1.9152852640403744e+00 3.8521166087140064e+00 + 3.8631582789129109e+00 1.7070624777664074e+00 4.0648259094001169e+00 + 4.0127517708804161e+00 1.5362720539375014e+00 4.1578810092794578e+00 + 4.1294792120473449e+00 1.4623226919194550e+00 4.1571890644110026e+00 + 4.2160479661874346e+00 1.5182507709519328e+00 4.1350993814391641e+00 + 4.2821250915050690e+00 1.6579072389980147e+00 4.1885538225838346e+00 + 4.3336776040471845e+00 1.7757009905045433e+00 4.3481606799295438e+00 + 4.4340045630290934e+00 1.7752768787186581e+00 4.5348151652585731e+00 + 4.7202469596178105e+00 1.6592599322344754e+00 4.5513582902801897e+00 + id 13860 + loc 1.9742931425571442e-01 2.0961794257164001e-01 403 + blend 0.0000000000000000e+00 + interp 4.5384586732895799e-01:2.8469842010971141e-01:3.5940345957280440e-01:3.9267657456052529e-01:1.0204331782271148e+00:2.8440608856232963e-01:1.9912936073147307e+00:4.5384132887028472e-01:2.4596979140427191e+00:2.8871581765457943e-01:3.0730591354608703e+00:3.9631552759001870e-01:3.9066687343618400e+00 + CVs 20 + -2.0948147122036209e-01 1.8266779426399773e-01 1.1507086575839298e-01 + -3.9014561305236750e-01 3.7955803092638962e-01 2.4131206429261143e-01 + -5.5043514562690821e-01 5.8370074640496905e-01 3.8729200627767024e-01 + -6.9490750288181879e-01 7.8744101506607822e-01 5.5796338190262418e-01 + -8.2024825118500033e-01 9.7974515358550707e-01 7.5379700124161675e-01 + -9.1668143947651393e-01 1.1479554827329892e+00 9.7478477371168459e-01 + -9.7257528807555071e-01 1.2824827318753431e+00 1.2208955608012528e+00 + -9.7866325757008632e-01 1.3745798051764475e+00 1.4861577086810056e+00 + -9.2985401066402174e-01 1.4159230364594004e+00 1.7579872015444735e+00 + -8.2678076411100754e-01 1.4017617379733325e+00 2.0238050602053206e+00 + -6.7611104895641105e-01 1.3294224002141202e+00 2.2779063866692710e+00 + -4.9142925780964059e-01 1.1898433603470044e+00 2.5365712716942102e+00 + -2.9138452312241103e-01 9.6877652140668902e-01 2.8118508889510201e+00 + -9.5702465706355738e-02 6.6765982186960215e-01 3.0763892522058160e+00 + 8.1145847449935998e-02 2.9921448913883819e-01 3.3160293498177058e+00 + 2.1975780198035333e-01 -1.3428212014926522e-01 3.6183212086230756e+00 + 2.7513884570701008e-01 -5.9768002695304312e-01 4.1320209165521646e+00 + 2.1571063099214016e-01 -9.8074133231982774e-01 4.8145818898194177e+00 + 2.1188978531210964e-01 -1.3385978464146109e+00 5.1875848595886795e+00 + id 13861 + loc 9.7298008203506470e-01 2.6330241560935974e-01 415 + blend 0.0000000000000000e+00 + interp 4.3559660638816788e-01:4.3559225042210403e-01:2.1684091854199461e-01:4.0598470629605504e-01:8.8122133542903325e-01:2.3777481930561134e-01:1.1280867638938104e+00:4.0303003171428281e-01:1.8843264329366836e+00:3.9811508517164118e-01:2.3728862998827438e+00:3.2794918670565609e-01:3.0047828359639412e+00:3.3151489209324242e-01:3.8203087981847421e+00 + CVs 20 + -1.7888214071808264e-01 2.7702884883456201e-02 9.4770225919487056e-02 + -3.2617926716313733e-01 3.9610132241397700e-02 2.0075731558499635e-01 + -4.6893126182293027e-01 5.3056924107673292e-02 3.1772986256948099e-01 + -6.1574777985042950e-01 7.8631859117496566e-02 4.3620599215121908e-01 + -7.7031889802349840e-01 1.1673232662530153e-01 5.5562488236053209e-01 + -9.4021943183185708e-01 1.6728378923328957e-01 6.7545642886849233e-01 + -1.1306433299272343e+00 2.2936176455801827e-01 7.8933575787516075e-01 + -1.3391363908597067e+00 2.9936380913811511e-01 8.8623821750284237e-01 + -1.5615884400313629e+00 3.7173772956721890e-01 9.5908010781901365e-01 + -1.7973377666022561e+00 4.4077945716674966e-01 1.0055271745083225e+00 + -2.0269334567845334e+00 5.0241388354616812e-01 1.0227425176581757e+00 + -2.1696689457225578e+00 5.5960389726365523e-01 1.0123610858375538e+00 + -2.1233984984434522e+00 6.3012266946263051e-01 9.7295964815977576e-01 + -1.9093644206639098e+00 7.3654435074336866e-01 8.6626152080212826e-01 + -1.6882410873527838e+00 8.6227037101088544e-01 6.8437976401917133e-01 + -1.5473821850947038e+00 9.7385103624640501e-01 4.7452958631274433e-01 + -1.4635149873788467e+00 1.0648055013374482e+00 2.4351145969067656e-01 + -1.4179417147889248e+00 1.1316191280226093e+00 -1.7669573079639678e-02 + -1.5085955468446746e+00 1.0160826804833865e+00 5.4566938194218539e-02 + id 13862 + loc 9.9218910932540894e-01 3.2541468739509583e-01 373 + blend 0.0000000000000000e+00 + interp 4.7245941349326415e-01:3.8498893822409602e-01:4.3480958321781671e-02:4.7245468889912923e-01:5.4417714831466579e-01:2.0690259472709857e-01:1.5835074742691608e+00:2.6229701937611388e-01:2.1735418086340146e+00:3.8789822958272707e-01:2.7148086320791087e+00:3.7257460758155470e-01:3.0209580681407484e+00:4.1002756065656515e-01:3.6550856418333995e+00 + CVs 20 + 2.6290144412211325e-01 3.2308990424350953e-01 8.8414657421436726e-02 + 5.6164152990101857e-01 5.9071232591563749e-01 1.7353249137081864e-01 + 8.9124116922851715e-01 7.7424627441825455e-01 2.5180835324572298e-01 + 1.2513974156889995e+00 9.0639039280361489e-01 3.2539842636448985e-01 + 1.6301663878533739e+00 1.0431031545547582e+00 4.0375360286802187e-01 + 1.9978624261958933e+00 1.2211230801925279e+00 5.0622629487368653e-01 + 2.3275442181618056e+00 1.4484125105886401e+00 6.5118263052533365e-01 + 2.6052947976115006e+00 1.7177992414271470e+00 8.4796653147183909e-01 + 2.8139647541926500e+00 2.0155614444768348e+00 1.0968918775718892e+00 + 2.9346552239154251e+00 2.3166853198982462e+00 1.3884763500082333e+00 + 2.9650706623167045e+00 2.5901866255519903e+00 1.7022115940767775e+00 + 2.9191681697709519e+00 2.8070708739379064e+00 2.0048228552013758e+00 + 2.8181676629412005e+00 2.9486413481697333e+00 2.2586843323680585e+00 + 2.6846087656841533e+00 3.0259916403842775e+00 2.4427993672889081e+00 + 2.5321000825044857e+00 3.0710784891897469e+00 2.5634841663874663e+00 + 2.3370171204346830e+00 3.0926412906489382e+00 2.6703310954822612e+00 + 2.0498751331706724e+00 3.0022744317129155e+00 2.8321600395852973e+00 + 1.7777874163437812e+00 2.6432300602843064e+00 3.0513491413046649e+00 + 1.6731454351499724e+00 2.2938575012871549e+00 3.1686408686216896e+00 + id 13863 + loc 6.0632747411727905e-01 8.7923789024353027e-01 382 + blend 0.0000000000000000e+00 + interp 4.0754716808828539e-01:4.0754309261660454e-01:8.0978931372389740e-01:2.9770635153390917e-01:1.4125966493388054e+00:3.3399773241363051e-01:2.4791338890803853e+00:2.7035739352183824e-01:3.1174504509578842e+00:3.1527081891131203e-01:3.9817491335575226e+00 + CVs 20 + 9.6806240713739589e-01 2.4882810681729384e-01 -5.6724864528041663e-01 + 1.5460736886441122e+00 3.5396862684198838e-01 -9.8807489442745666e-01 + 2.0032364639824798e+00 3.7816739548234213e-01 -1.3936862848442755e+00 + 2.4576499821599893e+00 3.4365022564481279e-01 -1.8390055295244350e+00 + 2.9126887066703433e+00 2.3486385490816541e-01 -2.3190439835707828e+00 + 3.3735396511724147e+00 4.6903501182732565e-02 -2.8265752151215402e+00 + 3.8441920705277806e+00 -2.1386733721059203e-01 -3.3570106120907202e+00 + 4.3241321243025688e+00 -5.4314133435842149e-01 -3.9025187865489213e+00 + 4.8026441404868212e+00 -9.5259756734377310e-01 -4.4382639804373127e+00 + 5.2482318904439307e+00 -1.4566362278367140e+00 -4.9335669163043940e+00 + 5.6085414496448411e+00 -2.0553514666609169e+00 -5.3752752047626888e+00 + 5.8460063782590606e+00 -2.7244223190094807e+00 -5.7604707216805355e+00 + 5.9644456342116525e+00 -3.4209876926838434e+00 -6.0854867402995207e+00 + 5.9839665641231070e+00 -4.1021261687325632e+00 -6.3538441524486835e+00 + 5.9287049058527010e+00 -4.7346780501472177e+00 -6.5737940569700051e+00 + 5.8230619702477533e+00 -5.3023362897811870e+00 -6.7466862344444838e+00 + 5.6908641065273633e+00 -5.8093815247241753e+00 -6.8699014751755412e+00 + 5.5559472866863926e+00 -6.2825533404472340e+00 -6.9561707481527009e+00 + 5.4768080165335249e+00 -6.7812765936213300e+00 -7.1307524404205633e+00 + id 13864 + loc 3.0406746268272400e-01 9.2755359411239624e-01 412 + blend 0.0000000000000000e+00 + interp 5.6507126857753553e-01:3.4363439064103457e-01:8.1359183433016291e-03:3.2103370080940014e-01:8.7554944531376255e-01:5.6506561786484977e-01:1.4569814127282668e+00:3.3503922425497934e-01:2.0064856628915946e+00:2.6531269222974435e-01:2.9705004700646218e+00:3.5907406174796891e-01:3.4421112856120315e+00 + CVs 20 + 8.2194656722150894e-01 1.7655821701946928e-01 -1.6367273099125160e-01 + 1.3100155133143765e+00 1.9576260775896859e-01 -3.3887010757031222e-01 + 1.7085839679155417e+00 1.5523489696533876e-01 -5.1679372707397198e-01 + 2.1192722971351943e+00 1.0265149692316539e-01 -6.8924822780875417e-01 + 2.5425208527587109e+00 3.9145038802223586e-02 -8.4825077433344509e-01 + 2.9803054460881748e+00 -3.5352476932751231e-02 -9.8792166422503436e-01 + 3.4324632731669729e+00 -1.2235058882921579e-01 -1.1056533560287727e+00 + 3.8953053486605800e+00 -2.2425300847836893e-01 -1.1991868388758449e+00 + 4.3620486303100217e+00 -3.4364086592832721e-01 -1.2651801170187829e+00 + 4.8206827255023930e+00 -4.8059155378325169e-01 -1.3019491677257164e+00 + 5.2495195034056117e+00 -6.2563937579069129e-01 -1.3081116873235932e+00 + 5.6212464618234463e+00 -7.6115087011337401e-01 -1.2868853102091005e+00 + 5.9296912044758994e+00 -8.8395397748266391e-01 -1.2498367543955835e+00 + 6.2001466319868275e+00 -1.0223969638229491e+00 -1.2142123918150536e+00 + 6.4473651044137652e+00 -1.1991719093212005e+00 -1.1925170899605151e+00 + 6.6621837231093952e+00 -1.4024119736776746e+00 -1.1794435292267642e+00 + 6.8358515830998225e+00 -1.6114406377749571e+00 -1.1630422146145414e+00 + 6.9694273779282030e+00 -1.8196840817053030e+00 -1.1423212038125072e+00 + 7.0412129202510636e+00 -2.0852004392064929e+00 -1.1978091046558657e+00 + id 13865 + loc 7.0670908689498901e-01 8.3682030439376831e-01 399 + blend 0.0000000000000000e+00 + interp 4.2979185336741288e-01:2.6906391452510275e-01:3.5003899955308060e-02:4.2978755544887920e-01:8.5737460264864462e-01:2.8397279666257563e-01:1.2146389275904745e+00:2.7685925229474967e-01:2.0533669237717964e+00:4.2350457710949735e-01:2.8613863234893198e+00:2.8498415121951975e-01:3.2673372477586349e+00 + CVs 20 + -2.2437230478463943e-01 2.8109975677063298e-01 -1.1947230956001716e-01 + -4.5246519382798717e-01 5.7225176334083627e-01 -2.4608341319364946e-01 + -6.9348664578349661e-01 8.6894041718951809e-01 -3.9473797879658357e-01 + -9.5373985636790948e-01 1.1616328769609194e+00 -5.7597845815371984e-01 + -1.2357893771318986e+00 1.4362299559092218e+00 -7.9720263812408909e-01 + -1.5412724467203796e+00 1.6752972215000157e+00 -1.0631099614922577e+00 + -1.8672644868158388e+00 1.8599013684372852e+00 -1.3708543330646812e+00 + -2.2057818964023057e+00 1.9811237535774127e+00 -1.7071642606009167e+00 + -2.5569252474609598e+00 2.0454960067646266e+00 -2.0648147092185130e+00 + -2.9322780481333184e+00 2.0467318506490848e+00 -2.4540395613812356e+00 + -3.3203206442514435e+00 1.9609473042541250e+00 -2.8655618088349923e+00 + -3.6735193750290760e+00 1.8125353921531886e+00 -3.2455634804353881e+00 + -3.9718463204303824e+00 1.6683333765396540e+00 -3.5617070021758028e+00 + -4.2619066117926190e+00 1.5300882548992507e+00 -3.8428447509563468e+00 + -4.6038613729037774e+00 1.3546944194596504e+00 -4.1150315494923211e+00 + -4.9446198345771020e+00 1.1901274827613173e+00 -4.3460051265472508e+00 + -5.0829471122606433e+00 1.2126953037789505e+00 -4.4929133422338277e+00 + -4.9149291115075124e+00 1.3953511277757724e+00 -4.5678529723977519e+00 + -5.4311805289221864e+00 1.4538708001285447e+00 -4.7674771686725093e+00 + id 13866 + loc 5.4084903001785278e-01 5.9436243772506714e-01 378 + blend 0.0000000000000000e+00 + interp 4.1977680117988209e-01:2.7949484757771081e-01:1.2675429671393745e-01:4.1977260341187028e-01:1.0165750106277323e+00:3.2094894838202909e-01:1.7999253883327804e+00:2.5910224550300254e-01:2.1884759238585287e+00:2.9331598030984823e-01:3.3019906194993931e+00 + CVs 20 + 4.2982264542452259e-01 3.3331846225657785e-01 1.4349771173739129e-01 + 8.1363587160193296e-01 5.9961625248335626e-01 2.3819076076425466e-01 + 1.1987069118624563e+00 8.3040645701963034e-01 3.0053731313941057e-01 + 1.6047600914203519e+00 1.0537997020676992e+00 3.4596763850041601e-01 + 2.0249662574075442e+00 1.2853977525013625e+00 3.9382371006310640e-01 + 2.4602106666426633e+00 1.5255777674064139e+00 4.6929157907530855e-01 + 2.9176163706308218e+00 1.7535238655388437e+00 5.9653198604358471e-01 + 3.3939871049348840e+00 1.9396466044342993e+00 7.9174520979195040e-01 + 3.8720070111809837e+00 2.0568071186162324e+00 1.0586841755078544e+00 + 4.3303135512268440e+00 2.0834170375587933e+00 1.3855246698042922e+00 + 4.7534574997171966e+00 2.0028773882992614e+00 1.7454506935616467e+00 + 5.1297409364973507e+00 1.8014967723497484e+00 2.1041404221285789e+00 + 5.4395524733753815e+00 1.4734022892256018e+00 2.4239674836433620e+00 + 5.6655896038256284e+00 1.0356075607246180e+00 2.6766838272302742e+00 + 5.8271778729376891e+00 5.2049520794711013e-01 2.8708196356585720e+00 + 5.9819235062062326e+00 -4.1640967166663323e-02 3.0429019630640908e+00 + 6.1978642534220043e+00 -6.1728345268981366e-01 3.2083010075177301e+00 + 6.5075313265296622e+00 -1.1666097960552135e+00 3.3416067333172177e+00 + 6.7581662176760693e+00 -1.6818477120441568e+00 3.4585061953060716e+00 + id 13867 + loc 6.7266815900802612e-01 2.5602564215660095e-01 400 + blend 0.0000000000000000e+00 + interp 4.7902455279461470e-01:4.1237817586462405e-01:2.0259937075956302e-01:3.9657693756385759e-01:1.0255718429185161e+00:4.1801250904262977e-01:1.7181334816619322e+00:4.0341422858395620e-01:2.0932302823847864e+00:4.7901976254908679e-01:2.8384220863378586e+00:4.1981092326716635e-01:3.1497723153329615e+00:4.5001850172285468e-01:3.8775863057955986e+00 + CVs 20 + 1.4827576046508706e-01 8.6605437826890425e-02 1.0101360572799008e-01 + 3.0698672624916096e-01 2.2806410942846289e-01 2.3421344768146291e-01 + 4.6361882990174375e-01 3.8786702829672792e-01 3.7062061134790247e-01 + 6.1396772105778818e-01 5.4820502474575006e-01 5.0139259837894778e-01 + 7.5953105486062333e-01 7.0572682317279711e-01 6.2959975042507543e-01 + 9.0218403526061386e-01 8.5693909698144755e-01 7.5634535557238747e-01 + 1.0450098983519935e+00 1.0007310327138854e+00 8.8300722312950208e-01 + 1.1911559652650108e+00 1.1373469365344790e+00 1.0137464718815008e+00 + 1.3397150851208699e+00 1.2630452318287499e+00 1.1523660436635752e+00 + 1.4849900936400293e+00 1.3692532588316855e+00 1.2953076824633372e+00 + 1.6239024016106276e+00 1.4486591447085657e+00 1.4341811452140747e+00 + 1.7615471851654181e+00 1.4944342372379584e+00 1.5657107662734027e+00 + 1.9010394879787635e+00 1.4986409488260370e+00 1.6871290381582649e+00 + 2.0334751326902643e+00 1.4631166489149903e+00 1.7895483742586671e+00 + 2.1505492755870872e+00 1.3982204484435421e+00 1.8675914096818846e+00 + 2.2584464277011911e+00 1.3076369432680610e+00 1.9254183905605118e+00 + 2.3674186679830549e+00 1.1839342177749779e+00 1.9666443945638958e+00 + 2.4699621478321441e+00 1.0178380985185578e+00 1.9856213205225983e+00 + 2.5399603250498033e+00 7.7873586124309202e-01 1.9631537621325341e+00 + id 13868 + loc 6.7384022474288940e-01 9.6463251113891602e-01 401 + blend 0.0000000000000000e+00 + interp 4.5698210027141922e-01:3.9820298627113160e-01:1.9399751359768147e-01:3.3630407739416968e-01:1.0442019939383393e+00:3.3905717414467496e-01:1.8932061876905644e+00:2.6954389529523998e-01:2.4143609254622138e+00:3.6406544824018955e-01:3.0370358459668569e+00:4.5697753045041650e-01:3.8230406062640436e+00 + CVs 20 + 3.0741796010054154e-02 3.0387817853623555e-01 -2.9551775363755040e-01 + 3.0678867777400864e-02 6.0958894958382126e-01 -6.0419957180392081e-01 + 1.1453702454996828e-02 9.1640735200257128e-01 -9.4419248920130006e-01 + -2.5913733392689653e-02 1.2026018961974725e+00 -1.3292923940345647e+00 + -9.8183801634363133e-02 1.4405419875806240e+00 -1.7577552250391604e+00 + -2.4148481657611565e-01 1.6133985943076516e+00 -2.1992975921574920e+00 + -4.8341075815863666e-01 1.7097775941488937e+00 -2.6002381718614291e+00 + -8.1347762776305221e-01 1.7198754207154314e+00 -2.9051297101967859e+00 + -1.1883209857573904e+00 1.6508230354735769e+00 -3.0844646675529774e+00 + -1.5647969336877776e+00 1.5301452013827248e+00 -3.1548962071896560e+00 + -1.9211220405929743e+00 1.3802085987828725e+00 -3.1616784808629452e+00 + -2.2570407427340782e+00 1.2059301044964910e+00 -3.1582476127505479e+00 + -2.5775375613061873e+00 1.0089182635630121e+00 -3.1718501508755654e+00 + -2.8805635725903329e+00 8.0714207196527477e-01 -3.1940997741823565e+00 + -3.1968503427384589e+00 6.0356297882146670e-01 -3.2496580383710509e+00 + -3.6030297185700904e+00 3.5012767436596626e-01 -3.4375216245460334e+00 + -4.0913211349482133e+00 5.7386747035251040e-02 -3.8447163068973476e+00 + -4.5194045141121917e+00 -1.5171785046287112e-01 -4.3701931407845303e+00 + -4.8149240836938532e+00 -2.2938769081176291e-01 -4.7079348112371351e+00 + id 13869 + loc 4.3874666094779968e-01 6.2983715534210205e-01 380 + blend 0.0000000000000000e+00 + interp 4.3297708831820986e-01:4.3297275854732670e-01:2.9686550894296848e-01:2.9811077158309013e-01:1.0861423446190990e+00:3.3008233627996653e-01:1.9984171670456803e+00:3.5483735841812986e-01:2.5536273390168871e+00:3.0959301851093179e-01:3.3543863249827508e+00:3.2849376221023846e-01:3.9938154665650809e+00 + CVs 20 + -4.1231809652111734e-01 2.6049177507654631e-01 -5.6617461566929816e-01 + -7.6705074184116973e-01 4.3279449771730960e-01 -9.9433201921671899e-01 + -1.0900742046531757e+00 5.6537866689255323e-01 -1.3812163902846877e+00 + -1.3986732233785772e+00 6.8321108119131579e-01 -1.7742841559362843e+00 + -1.6867627446489726e+00 7.8423812369477031e-01 -2.1745127784828369e+00 + -1.9515454521982121e+00 8.6271352607809904e-01 -2.5828813114229834e+00 + -2.1941625280720136e+00 9.0964330370338842e-01 -2.9993143728965759e+00 + -2.4145767165975704e+00 9.1553856612443241e-01 -3.4220142475979332e+00 + -2.6108853078829233e+00 8.7269633854684625e-01 -3.8481576211113335e+00 + -2.7829841158952879e+00 7.7864407664226132e-01 -4.2697034615284783e+00 + -2.9393492247245225e+00 6.3919755503497289e-01 -4.6738216610658343e+00 + -3.0933057143710876e+00 4.5575766476069379e-01 -5.0521206741313831e+00 + -3.2493992627519583e+00 2.1613111783191430e-01 -5.3966462561704134e+00 + -3.4008128505157216e+00 -1.1225559178042310e-01 -5.6967486200519195e+00 + -3.5416913087069335e+00 -5.5068058926008101e-01 -5.9395178377823390e+00 + -3.6856184088912438e+00 -1.0775231666080063e+00 -6.1434539124890355e+00 + -3.8622193427937548e+00 -1.6492129211315776e+00 -6.3484764889598750e+00 + -4.1104484266274977e+00 -2.2067869023436297e+00 -6.5598617002371515e+00 + -4.3787578639350118e+00 -2.6544731543850277e+00 -6.7255245207130860e+00 + id 13870 + loc 7.2626298666000366e-01 7.8493762016296387e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4013048629300588e-01:3.7618166121785118e-01:5.5059234915253463e-01:3.7407959384413580e-01:1.0026337276856045e+00:2.8224250624981956e-01:1.6820205567339626e+00:3.1602673803841058e-01:2.1934689304496917e+00:4.4012608498814298e-01:2.8240109609020214e+00:4.0668683372615283e-01:3.1816756028037618e+00:3.6618343245137663e-01:3.9846789900030455e+00 + CVs 20 + 1.9531527562062861e-01 2.7471043228758452e-01 -2.1125633697151097e-01 + 3.6092036561889895e-01 5.4191701639620704e-01 -4.1425415570761615e-01 + 5.2876372730933352e-01 7.8217969709222746e-01 -6.0331845851053323e-01 + 7.2595458991244510e-01 9.8475154944267262e-01 -7.7892909044757563e-01 + 9.5936558447080178e-01 1.1478928734544946e+00 -9.4695702657836289e-01 + 1.2039815261590892e+00 1.2815649232191477e+00 -1.1186894040538105e+00 + 1.4131989335655726e+00 1.4026066755276363e+00 -1.3015366583026593e+00 + 1.5502147880624118e+00 1.5170194535135513e+00 -1.4889404139198297e+00 + 1.5954276691532208e+00 1.5999172339108914e+00 -1.6517879787111613e+00 + 1.5594696559981172e+00 1.5794739235916555e+00 -1.7195069299383792e+00 + 1.5429965148546210e+00 1.4304565645950222e+00 -1.6102419605344891e+00 + 1.6065315317670388e+00 1.3086395159917241e+00 -1.3803478602991988e+00 + 1.6647421491900936e+00 1.2990235738688574e+00 -1.1524590651896798e+00 + 1.6596183337740567e+00 1.3457317681653802e+00 -9.9375267732775929e-01 + 1.5874120054849665e+00 1.3642628802232026e+00 -9.2431357837876815e-01 + 1.4917180590477384e+00 1.3473629300483339e+00 -9.0844680268047373e-01 + 1.4041075534484486e+00 1.3697971708365322e+00 -9.1115902646731639e-01 + 1.3191962743571017e+00 1.4792984996226035e+00 -9.4773503833032668e-01 + 1.4033379930155556e+00 1.2351396229687817e+00 -9.6010015431960172e-01 + id 13871 + loc 1.8881273269653320e-01 3.0470234155654907e-01 415 + blend 0.0000000000000000e+00 + interp 4.8961834551999461e-01:2.8930345896686877e-01:1.7716542539737423e-02:3.1433787744160036e-01:7.6305491571621142e-01:2.6071692727482293e-01:1.3127285444025443e+00:3.1360170421993738e-01:2.0234935305451680e+00:2.9096716650580223e-01:2.8117856968495456e+00:4.8961344933653944e-01:3.3397445485697368e+00 + CVs 20 + -4.4627899751054835e-02 1.3833870491753408e-01 -8.3544658611838435e-02 + -9.4571223191452905e-02 2.5316386960919418e-01 -1.0390164384283923e-01 + -1.4804283156752485e-01 3.7918129605186535e-01 -1.0966560484469910e-01 + -1.9163943069722084e-01 5.1767529317750349e-01 -1.2233092988550189e-01 + -2.2257315813469020e-01 6.6878169166713453e-01 -1.4184934963865395e-01 + -2.3850243063286997e-01 8.3188171411303646e-01 -1.6827607788416302e-01 + -2.3741500336138227e-01 1.0043148792383043e+00 -2.0088202694374974e-01 + -2.1818520913226408e-01 1.1806074045051205e+00 -2.3661056772171096e-01 + -1.8113448328288329e-01 1.3541221060771473e+00 -2.7020587817983005e-01 + -1.2423194295781426e-01 1.5231351035914529e+00 -2.9794427959798364e-01 + -3.9306760871502200e-02 1.6895079585307018e+00 -3.1819274268903042e-01 + 7.8560931463433459e-02 1.8475563345731181e+00 -3.2680491830371661e-01 + 2.2150770055887392e-01 1.9854293866090644e+00 -3.1736036082022900e-01 + 3.8222389852003869e-01 2.0970596945996194e+00 -2.8545363594142648e-01 + 5.6786997336856060e-01 2.1833403732595080e+00 -2.3146893319444906e-01 + 7.8769696073226192e-01 2.2450872709095631e+00 -1.6190110641300071e-01 + 1.0293034901492568e+00 2.2812378243291955e+00 -8.6483944945861868e-02 + 1.2601517746672555e+00 2.2929632994103955e+00 -7.9096545195324053e-03 + 1.4385039260272472e+00 2.2524142156781286e+00 1.1170625370740139e-01 + id 13872 + loc 4.1427215933799744e-01 3.5449045896530151e-01 403 + blend 0.0000000000000000e+00 + interp 3.9925149906342794e-01:3.7279554828535305e-01:1.1509768204924753e-01:2.9774748654032102e-01:1.0003212717007066e+00:3.9924750654843733e-01:1.8485080845822850e+00:2.7729501626992631e-01:2.0993618067419075e+00:3.3105360553672780e-01:2.9031933785719981e+00:2.8342463675248070e-01:3.3250869441796675e+00 + CVs 20 + -1.2427106101420855e-01 8.5793942153208000e-03 1.0789617997910859e-01 + -2.4344306486868370e-01 3.5942092948448252e-02 1.9445753422140860e-01 + -3.4663245702175088e-01 6.3396688438645210e-02 2.5976592542041471e-01 + -4.3992089985011440e-01 8.3908175151858153e-02 3.1768850459323300e-01 + -5.2273769583589047e-01 1.0019156500117740e-01 3.6522615308469752e-01 + -5.9878197676302769e-01 1.1645652242438287e-01 4.0128778630426420e-01 + -6.7549591685151622e-01 1.3706148476226832e-01 4.2960122583895777e-01 + -7.5884312671880250e-01 1.6494607482338114e-01 4.5957823021399480e-01 + -8.4897292359709764e-01 2.0201426069423392e-01 5.0140693637249989e-01 + -9.4080636008680751e-01 2.5153285625394572e-01 5.6008356128401815e-01 + -1.0285950453730504e+00 3.1649128415865208e-01 6.3765193599088033e-01 + -1.1070426739155164e+00 3.9645753884812540e-01 7.3752578963556992e-01 + -1.1713908641128805e+00 4.8832379868512094e-01 8.6298933683556533e-01 + -1.2179939078216249e+00 5.8760558299552024e-01 1.0152228068855262e+00 + -1.2440013108520231e+00 6.8738195360173604e-01 1.1935928960341284e+00 + -1.2447126720886574e+00 7.8189842189322356e-01 1.3935581986394998e+00 + -1.2113699270205676e+00 8.6957473121414197e-01 1.6063383581906387e+00 + -1.1338764554386325e+00 9.4844937454420686e-01 1.8219004090970683e+00 + -9.2075354169186485e-01 9.4890749756940052e-01 2.0293994073243962e+00 + id 13873 + loc 5.5863863229751587e-01 6.7098423838615417e-02 396 + blend 0.0000000000000000e+00 + interp 4.7334508079551302e-01:4.4677364698241051e-01:6.9532645946357663e-02:3.6443875528461350e-01:9.0880171155281175e-01:2.4119930196294034e-01:1.9279633498208990e+00:3.8188876919845205e-01:2.4553331586201912e+00:4.7334034734470509e-01:2.9925123458745455e+00:3.8656068116501241e-01:3.4270620662261639e+00 + CVs 20 + -5.5664883629908257e-01 1.3277930612095329e-01 3.1757795910237185e-01 + -9.6972342129187084e-01 2.0399822428266190e-01 5.5744465845775015e-01 + -1.3629800813721542e+00 2.7480996085383680e-01 7.7570414496991735e-01 + -1.7821804880975778e+00 3.7290535304309558e-01 9.8791480024385148e-01 + -2.2270017576541128e+00 4.8821007569313779e-01 1.1974640128982639e+00 + -2.6951410024174680e+00 6.0837891024284629e-01 1.4137270056705251e+00 + -3.1817541609437221e+00 7.1899633472787017e-01 1.6502559005773794e+00 + -3.6823586888510760e+00 7.9896799637318594e-01 1.9186466350676379e+00 + -4.1935953907944246e+00 8.1838531450423635e-01 2.2240123053493854e+00 + -4.7029673814662436e+00 7.4348530174863914e-01 2.5657717935593460e+00 + -5.1767551206612881e+00 5.4981245118028910e-01 2.9360732082444096e+00 + -5.5723493443418439e+00 2.3613523615108223e-01 3.3128514483403699e+00 + -5.8654920474447945e+00 -1.7962490986560509e-01 3.6644029911921021e+00 + -6.0515411790694866e+00 -6.7138866636407490e-01 3.9613559804859895e+00 + -6.1345544275347548e+00 -1.2089103855841783e+00 4.1840331303259166e+00 + -6.1203646871827502e+00 -1.7602520756163793e+00 4.3215281599600388e+00 + -6.0195402105863147e+00 -2.2895365186443475e+00 4.3663046237783387e+00 + -5.8547297697503575e+00 -2.7659277401846967e+00 4.3221455294451054e+00 + -5.6641293147534473e+00 -3.2154394598858120e+00 4.2317417106222033e+00 + id 13874 + loc 1.6290731728076935e-01 4.2717453092336655e-02 393 + blend 0.0000000000000000e+00 + interp 3.9478185939497551e-01:3.8903548285186051e-01:9.0474506916253583e-02:3.9477791157638159e-01:7.4412269221231686e-01:2.9230557348709757e-01:1.3683681958568070e+00:3.6301196621927695e-01:1.9642514473630301e+00:2.4875871280361678e-01:2.2999158698769597e+00:3.6668587082167925e-01:2.9415043480034360e+00:3.0623276941009003e-01:3.4542224793934500e+00 + CVs 20 + -1.2168485174356157e-01 3.3938866938410878e-01 3.3890772582848172e-01 + -2.6154485855603671e-01 6.9911948070718488e-01 6.6913956543308784e-01 + -4.2694539500984091e-01 1.0899871400004217e+00 9.6775806550093391e-01 + -6.3630311880463630e-01 1.5102530555192721e+00 1.2240974104762661e+00 + -9.0835265656386310e-01 1.9347619022337628e+00 1.4321134282824648e+00 + -1.2452384948738175e+00 2.3304959845499287e+00 1.5979966023115189e+00 + -1.6300866962861060e+00 2.6677952770489259e+00 1.7385366644293374e+00 + -2.0315972489737666e+00 2.9264134289540733e+00 1.8773913375299340e+00 + -2.4164910048961996e+00 3.1032212107778276e+00 2.0376633248176370e+00 + -2.7490182705316424e+00 3.2125839879533329e+00 2.2296638579067891e+00 + -3.0026030461366950e+00 3.2808840487037658e+00 2.4476744063394094e+00 + -3.1866203395971975e+00 3.3333173372628755e+00 2.6894995935736423e+00 + -3.3266359219320139e+00 3.3836745003455064e+00 2.9679619167952596e+00 + -3.4358693427698555e+00 3.4261576628343398e+00 3.2948644104809004e+00 + -3.5133883754886748e+00 3.4499241985710154e+00 3.6791456078811802e+00 + -3.5604466336894194e+00 3.4535822421071902e+00 4.1307735636800418e+00 + -3.6071247971926979e+00 3.4276233314213793e+00 4.6670513121014983e+00 + -3.6206528058086733e+00 3.2512345261574627e+00 5.2925428207782463e+00 + -3.4084837274084450e+00 2.9028487524176336e+00 5.7256979563957451e+00 + id 13875 + loc 2.5218394398689270e-01 6.1911672353744507e-01 382 + blend 0.0000000000000000e+00 + interp 4.1547965474823539e-01:4.1547549995168792e-01:4.4873408776329549e-01:3.1037204006948726e-01:1.0297703589499769e+00:3.0827591269571275e-01:1.9806493787350372e+00:3.1907116429164484e-01:2.8275943445021801e+00:3.5130132102644235e-01:3.2373641926210626e+00:3.1388076733835790e-01:3.9532047422734036e+00 + CVs 20 + 8.7715766988558441e-01 1.7127972467408201e-01 -4.9103845867457468e-01 + 1.4733607050968427e+00 2.0693748914910254e-01 -8.4094942968281761e-01 + 2.0048059825803368e+00 1.8390697159324765e-01 -1.1606000742277345e+00 + 2.5541729295545745e+00 1.2995184248112090e-01 -1.4886842753432767e+00 + 3.1057322898405579e+00 3.5299295690631727e-02 -1.8230314232348239e+00 + 3.6442472677362208e+00 -1.0480497584644599e-01 -2.1634835968012158e+00 + 4.1554238714445715e+00 -2.8899427952547518e-01 -2.5094692081824452e+00 + 4.6275446420174902e+00 -5.1315598547011310e-01 -2.8547533181991591e+00 + 5.0568044227339612e+00 -7.7475409526933969e-01 -3.1886660696619202e+00 + 5.4473676843917156e+00 -1.0745452155318629e+00 -3.5035442439791056e+00 + 5.8033381715814043e+00 -1.4147413271562264e+00 -3.7979368314409445e+00 + 6.1261185512019614e+00 -1.7962452062324665e+00 -4.0731094272420059e+00 + 6.4183332795718275e+00 -2.2196336774234942e+00 -4.3294691497658100e+00 + 6.6797487607678976e+00 -2.6900255175184951e+00 -4.5646769940635314e+00 + 6.8960954802096568e+00 -3.2132241615997277e+00 -4.7678650040631867e+00 + 7.0480972852176080e+00 -3.7739804467697704e+00 -4.9256253829134371e+00 + 7.1259244359607052e+00 -4.3379769416010392e+00 -5.0229234583852493e+00 + 7.1339491338664995e+00 -4.8708240551694644e+00 -5.0515509520884265e+00 + 7.0819172585636174e+00 -5.4054630791953544e+00 -5.0444505503254495e+00 + id 13876 + loc 4.3587002158164978e-01 8.3298110961914063e-01 373 + blend 0.0000000000000000e+00 + interp 3.8443969269512018e-01:3.3270646000777543e-01:4.0122851979152996e-03:3.8443584829819327e-01:8.7787032497000828e-01:3.3105696041449723e-01:1.4221714973878874e+00:3.4382399702228089e-01:2.6293350673431113e+00:3.6754240222227308e-01:3.2532049918776567e+00 + CVs 20 + -3.6974835825616881e-01 4.8202394852471353e-01 -2.4626436025128320e-01 + -6.5052126931241117e-01 9.5110979145260222e-01 -4.8724017982451739e-01 + -8.3576220903960519e-01 1.4013086297232877e+00 -7.4476726458271580e-01 + -9.3376301976800624e-01 1.8196289005594353e+00 -1.0307635372537356e+00 + -9.5608431019452733e-01 2.1869870392986681e+00 -1.3476238278559425e+00 + -9.2445851007854263e-01 2.4934799037419522e+00 -1.6971218131614316e+00 + -8.6417560567005869e-01 2.7365875957357773e+00 -2.0857299340556068e+00 + -7.9851164180458978e-01 2.9123910038590624e+00 -2.5200429161478337e+00 + -7.5008771110501005e-01 3.0098373768330773e+00 -2.9981596560488382e+00 + -7.3862112586948481e-01 3.0204226981442202e+00 -3.5065793692364853e+00 + -7.7958146551910390e-01 2.9529908239072489e+00 -4.0149674587746915e+00 + -8.8409393950932369e-01 2.8419384841307314e+00 -4.4757003477311157e+00 + -1.0568345954710727e+00 2.7132888632115413e+00 -4.8643631788503328e+00 + -1.3085099377836855e+00 2.5449292214842836e+00 -5.1838959960286246e+00 + -1.6548685056116630e+00 2.3084555001242810e+00 -5.4299466481385412e+00 + -2.0983303047215975e+00 2.0381551970437446e+00 -5.6124894721585834e+00 + -2.6085247072877538e+00 1.8451628629505836e+00 -5.8046043685678326e+00 + -3.1713650863648999e+00 1.7196116251592937e+00 -6.0378621962352588e+00 + -3.6049823010336559e+00 1.1240921894666849e+00 -5.7280298313828801e+00 + id 13877 + loc 5.1391685009002686e-01 3.7124863266944885e-01 412 + blend 0.0000000000000000e+00 + interp 4.3965449008022733e-01:4.2169262971673982e-01:6.6398442997381046e-01:3.8728991520763800e-01:1.0440953881170718e+00:3.6925109177658760e-01:2.0168238462725632e+00:4.3965009353532652e-01:2.9148997101807224e+00:3.9796047153341813e-01:3.2090247105891305e+00:2.7901578201276128e-01:3.9404142925176702e+00 + CVs 20 + -4.9297947519925084e-01 3.0533771695044287e-02 2.0545373536610778e-01 + -7.9509155376533724e-01 -8.4230410632490926e-03 3.8721999756947600e-01 + -1.0723058453662153e+00 -6.7336117237455528e-02 5.7174672011440308e-01 + -1.3825505903149273e+00 -1.1179801036865727e-01 7.5061863491642100e-01 + -1.7276983921380891e+00 -1.4379216422276364e-01 9.1573150094401545e-01 + -2.1076835038221251e+00 -1.6721674177251511e-01 1.0586655643195231e+00 + -2.5170982717827890e+00 -1.8561088058873121e-01 1.1688609808571717e+00 + -2.9454460394485960e+00 -2.0259748559289825e-01 1.2378818110810081e+00 + -3.3807478541884484e+00 -2.2256679228296083e-01 1.2634460184444474e+00 + -3.8097164516499840e+00 -2.4794142047948275e-01 1.2471569265188762e+00 + -4.2157102468678413e+00 -2.7651308319428547e-01 1.1922196014912698e+00 + -4.5916265060311163e+00 -3.1199543321652601e-01 1.1094445762358649e+00 + -4.9571780893914914e+00 -3.7806052137124890e-01 1.0214520829608489e+00 + -5.3351109972142696e+00 -5.0274767748322802e-01 9.5293044709443697e-01 + -5.7214222321857777e+00 -6.9123099986071312e-01 9.1607273314027726e-01 + -6.0954658874995520e+00 -9.3075158499440480e-01 9.1535788340037194e-01 + -6.4378476273275851e+00 -1.2039010565255008e+00 9.5597774729720464e-01 + -6.7349961708551387e+00 -1.4868316066689427e+00 1.0348783565740378e+00 + -6.9699707904654016e+00 -1.7054788261245046e+00 1.0951088569871656e+00 + id 13878 + loc 6.9722115993499756e-01 6.1640048027038574e-01 1068 + blend 0.0000000000000000e+00 + interp 3.4519314852700139e-01:2.4655928198891167e-01:4.0867704567832319e-01:3.4518969659551613e-01:1.2295904027797981e+00:2.4748073366809525e-01:2.0718808335173846e+00:2.7085621220993933e-01:3.1866023949695967e+00 + CVs 20 + 1.6345857395911426e-01 3.7641936931213615e-01 -3.3694665646604433e-01 + 3.5716713945990708e-01 7.4241577244529844e-01 -6.5819842389727956e-01 + 5.7321003335050835e-01 1.0962011076430782e+00 -9.7255811645607482e-01 + 8.0574301954580874e-01 1.4310989888179668e+00 -1.2891380788708733e+00 + 1.0483835381724413e+00 1.7314755403477089e+00 -1.6193475928079879e+00 + 1.2967566905970556e+00 1.9733854327151839e+00 -1.9727622481055409e+00 + 1.5502698761601836e+00 2.1400821743725253e+00 -2.3482124397567321e+00 + 1.8090789557582125e+00 2.2210517507293197e+00 -2.7284773211826430e+00 + 2.0694900980686350e+00 2.2056538423938066e+00 -3.0903152420683746e+00 + 2.3249606474347528e+00 2.1012995301062563e+00 -3.4251807277197668e+00 + 2.5739985037959494e+00 1.9424734267559813e+00 -3.7459867849225796e+00 + 2.8162492178661971e+00 1.7657870297929477e+00 -4.0744366800692138e+00 + 3.0339909850468945e+00 1.5732161665487201e+00 -4.4317142641369696e+00 + 3.1878681870888186e+00 1.3346254302546403e+00 -4.8391518268713547e+00 + 3.2293648778406512e+00 1.0509155824373178e+00 -5.3039628425173042e+00 + 3.1195031826703641e+00 7.8442440241924682e-01 -5.8057670057180522e+00 + 2.8638995081271559e+00 5.9919482945891178e-01 -6.2836678647861515e+00 + 2.5497098286584952e+00 4.7132785593248361e-01 -6.6684077358763387e+00 + 2.3167373914398550e+00 2.8892502768205630e-01 -6.9516025804221542e+00 + id 13879 + loc 7.1195262670516968e-01 1.7990569770336151e-01 395 + blend 0.0000000000000000e+00 + interp 4.5580489750933445e-01:3.9760876849200250e-01:5.3630110033104672e-01:4.5580033946035936e-01:9.9999221937969540e-01:3.4172085515531825e-01:1.6544840607927458e+00:3.0570448632609876e-01:2.7451647161813373e+00:3.0338880178220368e-01:3.3344649248244620e+00:3.1605563085010607e-01:3.9999668675824855e+00 + CVs 20 + -3.7938691536063462e-01 2.9070014514090292e-01 3.7971077217300064e-01 + -7.1507293409335426e-01 5.0742301222402175e-01 6.9832768820860025e-01 + -1.0574913685865048e+00 6.8536267748922675e-01 9.8850891183621681e-01 + -1.4253126030090097e+00 8.3599420734161112e-01 1.2600750500140081e+00 + -1.8095168790730276e+00 9.5388395512556057e-01 1.5064052691794254e+00 + -2.1986738614993011e+00 1.0390131069606188e+00 1.7288114810729631e+00 + -2.5811464550522851e+00 1.0954430908818000e+00 1.9344290240845039e+00 + -2.9459866432360964e+00 1.1277448278770672e+00 2.1306040383226854e+00 + -3.2898833255120530e+00 1.1400561386450350e+00 2.3269508566790460e+00 + -3.6191317146189155e+00 1.1340357395698784e+00 2.5372545300302987e+00 + -3.9363435819019070e+00 1.1083365338155700e+00 2.7749581182343688e+00 + -4.2363995165051485e+00 1.0607357080747319e+00 3.0499398987842974e+00 + -4.5220842030847752e+00 9.8545159305627950e-01 3.3652170056924882e+00 + -4.8075099667859398e+00 8.7011914917306088e-01 3.7117969503714292e+00 + -5.1007824582688652e+00 7.0586056062584701e-01 4.0816354431295228e+00 + -5.3979049187868871e+00 4.9014076090099312e-01 4.4902272644838188e+00 + -5.6792742157987171e+00 2.0303817882130470e-01 4.9489213187526708e+00 + -5.8935864134588316e+00 -1.7065814732562323e-01 5.4243938015202655e+00 + -5.9527061312577176e+00 -5.2200988078963206e-01 5.8091539642436283e+00 + id 13880 + loc 6.7298740148544312e-01 4.5776432752609253e-01 402 + blend 0.0000000000000000e+00 + interp 4.7433177689935535e-01:3.6270076514516020e-01:1.6251380113569858e-02:3.3483006400067705e-01:5.7759004640994960e-01:3.9805042296911824e-01:9.9946842715519058e-01:2.5186602513676931e-01:1.5056064068410526e+00:3.6222898825776073e-01:2.0074263825616874e+00:4.7432703358158640e-01:2.5404737043186585e+00:4.0645003381692113e-01:2.9978023414711199e+00:2.9368757833017356e-01:3.5054532842304496e+00 + CVs 20 + 1.4974585784867314e-01 3.4510024868015193e-01 1.6917054151325026e-01 + 2.9221779194404279e-01 7.1004644505225578e-01 3.7426833705758100e-01 + 4.1263975309819778e-01 1.0863477883000103e+00 6.1479148543823581e-01 + 5.4075015860061160e-01 1.4544571278760636e+00 8.8409536684332868e-01 + 7.2050826350876984e-01 1.7899836517496930e+00 1.1757901440819853e+00 + 9.7590985079121872e-01 2.0639515785233526e+00 1.4800257664097862e+00 + 1.3088160772766293e+00 2.2424026462983950e+00 1.7935537043102312e+00 + 1.6745943934761578e+00 2.2970623201201743e+00 2.1407422184806837e+00 + 2.0062582668184414e+00 2.2123762086138794e+00 2.5408924345592681e+00 + 2.2391251397234204e+00 1.9799285830771702e+00 2.9768456524553812e+00 + 2.3474079796268299e+00 1.6393237208966662e+00 3.4056779050847075e+00 + 2.4137925259709156e+00 1.2547055948917043e+00 3.8246403904747495e+00 + 2.5512731192626870e+00 8.7214808224855767e-01 4.2607096981328105e+00 + 2.8175686839172114e+00 5.6407059081957556e-01 4.7081308381623934e+00 + 3.1780616663176344e+00 3.9211676242259252e-01 5.1379445454589829e+00 + 3.5377631054421688e+00 3.3948190011636648e-01 5.5409897089515638e+00 + 3.8518430358084106e+00 3.4006155381016745e-01 5.9265625296865272e+00 + 4.1744974015898579e+00 3.3660199440762018e-01 6.3028488978357302e+00 + 4.6487104355845243e+00 2.6209672571113596e-01 6.6818021797033502e+00 + id 13881 + loc 2.0384867489337921e-01 9.7579783201217651e-01 1078 + blend 0.0000000000000000e+00 + interp 4.6698111786766971e-01:2.8906768503968344e-01:1.0817709622377936e-02:2.7330117279353688e-01:8.6453587755268524e-01:3.8149158771773606e-01:1.4793466332397034e+00:3.2229650438575969e-01:2.0847669933706783e+00:4.6697644805649108e-01:2.7972540744230239e+00:3.0201334431457910e-01:3.3523329761652012e+00 + CVs 20 + 3.8519920110395324e-02 1.9553297551558224e-01 1.9989019573672495e-02 + 9.8095333952054192e-02 3.7126025866082846e-01 2.4895677068195343e-02 + 1.6089731958200229e-01 5.4016352342040908e-01 3.0310050374907305e-02 + 2.1758193686809285e-01 7.1071802511853666e-01 4.2910763812703034e-02 + 2.6659927283812995e-01 8.8644889205696498e-01 5.9239212078274095e-02 + 3.0593596065198997e-01 1.0718359016343486e+00 7.4429551197900012e-02 + 3.3216030262078106e-01 1.2691926292802305e+00 8.2812269596885035e-02 + 3.4077230699385852e-01 1.4765472501430010e+00 8.0939123769200427e-02 + 3.2704980864426048e-01 1.6915657495853647e+00 6.7704762955952846e-02 + 2.8489417754895113e-01 1.9162012908204722e+00 3.9075785483750791e-02 + 2.0507138879191511e-01 2.1523141293430532e+00 -1.4824663104150648e-02 + 7.8380719737057430e-02 2.3917136355683888e+00 -1.0355946194844257e-01 + -9.4028603059990931e-02 2.6153058399174984e+00 -2.2548595094456547e-01 + -2.9312455345260968e-01 2.8044669327879239e+00 -3.5838137152929028e-01 + -4.9489145520827282e-01 2.9561000310718324e+00 -4.7087165474934989e-01 + -7.0361313514470325e-01 3.0794231420578946e+00 -5.6114998899242252e-01 + -9.4007623805207519e-01 3.1732118781638583e+00 -6.4206580589238493e-01 + -1.2007930298771445e+00 3.2254891012831663e+00 -7.0420704489112040e-01 + -1.4069672245943889e+00 3.2453695513358385e+00 -7.0724181741204317e-01 + id 13882 + loc 2.5632134079933167e-01 1.0702168941497803e-01 407 + blend 0.0000000000000000e+00 + interp 4.7167183544230068e-01:3.0055750489706773e-01:5.6179298045072157e-02:2.9786494231506083e-01:1.0054387554047881e+00:4.1933289530993390e-01:1.8951059980820446e+00:2.6923344841662245e-01:2.8216834688446051e+00:4.7166711872394629e-01:3.5402333921925355e+00 + CVs 20 + 5.7540099417252230e-04 3.4017120348051766e-01 -3.2579224538486740e-01 + -1.0063828018748791e-04 5.3538152100371483e-01 -4.5003027146401847e-01 + 5.3226725891776516e-03 6.8169844584399408e-01 -5.0110277127924152e-01 + 1.8412940911154019e-02 8.1943364386363271e-01 -5.5436026051453879e-01 + 3.8858791316156188e-02 9.5107440219155515e-01 -6.0834623103504182e-01 + 6.9106144176843548e-02 1.0804035493813278e+00 -6.6369852569606358e-01 + 1.1665154606757044e-01 1.2087355909634885e+00 -7.2156578828414708e-01 + 1.9169684328121228e-01 1.3311443668708987e+00 -7.8027227683889233e-01 + 3.0084481680586644e-01 1.4381606787024164e+00 -8.3489441023699373e-01 + 4.4522760539098677e-01 1.5217846384272509e+00 -8.8009505814959499e-01 + 6.2357201331780510e-01 1.5787547764466279e+00 -9.1309139341748535e-01 + 8.3447720246564971e-01 1.6090550518210285e+00 -9.3431680064805867e-01 + 1.0757656665870239e+00 1.6106855693426603e+00 -9.4337588334075662e-01 + 1.3413384896014069e+00 1.5752203943864420e+00 -9.3472466008601862e-01 + 1.6244571750052537e+00 1.4963539208774048e+00 -9.0381845425418383e-01 + 1.9272984639639237e+00 1.3826175585631792e+00 -8.5849629581109943e-01 + 2.2565355903456559e+00 1.2530551749443628e+00 -8.1660009325273375e-01 + 2.6071488734069668e+00 1.1255563225605041e+00 -7.9430902682430182e-01 + 2.9279298951973214e+00 1.0565303070024481e+00 -8.1331417738896428e-01 + id 13883 + loc 1.3492755591869354e-01 4.2156592011451721e-02 374 + blend 0.0000000000000000e+00 + interp 4.0245600658304992e-01:3.4828959654107539e-01:6.2520578496406687e-02:4.0245198202298410e-01:9.9862837198125176e-01:2.7238444191524114e-01:1.9486460910029182e+00:2.4973658420662634e-01:2.3658077106517204e+00:3.6903353218622986e-01:3.0068507662318393e+00:2.7580120537290670e-01:3.7011613351420980e+00 + CVs 20 + -3.0358098697650626e-01 4.9180462928808483e-01 7.6890805617167923e-01 + -4.2844296146250443e-01 7.9660505111569313e-01 1.4170068016945450e+00 + -4.1883567571257618e-01 9.4451546783607265e-01 2.0472524150790856e+00 + -3.4492184595480635e-01 1.0265963137747298e+00 2.6863571988745951e+00 + -2.7617596643256781e-01 1.1182368254997124e+00 3.3269156818249752e+00 + -2.7723711658038641e-01 1.2424645907424325e+00 3.9759489493660904e+00 + -4.0093452134381691e-01 1.3928036875423135e+00 4.6278908358287012e+00 + -6.8487964760123843e-01 1.5582234823326038e+00 5.2462381993880340e+00 + -1.1409057725874749e+00 1.7251607413644137e+00 5.7822776730269965e+00 + -1.7600535105851218e+00 1.8675253454729526e+00 6.2087180443159014e+00 + -2.5252297724566817e+00 1.9413244676942527e+00 6.5219812694803379e+00 + -3.4024082336179644e+00 1.8855536644283628e+00 6.7155475215383094e+00 + -4.3147783809269731e+00 1.6482808401909295e+00 6.7602396852013955e+00 + -5.1442123242542168e+00 1.2407876783169760e+00 6.6200790260185682e+00 + -5.7999024287035130e+00 7.1708076992837277e-01 6.3066229873694040e+00 + -6.2940657274383334e+00 6.5657022519882702e-03 5.9170324695638472e+00 + -6.5931425997613156e+00 -1.1603552869620737e+00 5.6063033267151008e+00 + -6.4574394285180938e+00 -2.6199065898819636e+00 5.5846154733616364e+00 + -6.4647853139877753e+00 -3.1342158342402380e+00 5.5405558261151047e+00 + id 13884 + loc 1.4676295220851898e-01 6.6108739376068115e-01 409 + blend 0.0000000000000000e+00 + interp 2.7828573426702297e-01:2.5502316147241566e-01:6.9347562099341076e-01:2.7807610032881647e-01:1.7915878402918430e+00:2.6462684397211972e-01:2.7347315369158984e+00:2.7828295140968029e-01:3.7304121791307661e+00 + CVs 20 + 5.8416893735296316e-01 1.7480663267274049e-01 -3.1277454307693553e-01 + 1.0819035980002560e+00 2.9209394802770239e-01 -6.0254075199428303e-01 + 1.5700495700995512e+00 4.0055767302550427e-01 -8.9448785061268177e-01 + 2.0503987668475476e+00 4.9949879471730296e-01 -1.2136040179961292e+00 + 2.4862894200235344e+00 5.6542583940713964e-01 -1.5803173498426095e+00 + 2.8515858853377445e+00 5.8122443955436798e-01 -2.0045350448606150e+00 + 3.1434593873179795e+00 5.3522239515711179e-01 -2.4820425575800416e+00 + 3.3860172756539817e+00 4.1068046177984496e-01 -3.0031000186048793e+00 + 3.6059062902370456e+00 1.7612318309289288e-01 -3.5504180441271838e+00 + 3.8068014466189424e+00 -2.0663650389432076e-01 -4.0820789266862887e+00 + 3.9740650394786590e+00 -7.3649834259770119e-01 -4.5510850299865790e+00 + 4.1002825548413950e+00 -1.3273554946510810e+00 -4.9792453942761092e+00 + 4.1968433735095214e+00 -1.8656630756011434e+00 -5.4525854939654037e+00 + 4.2789942936246614e+00 -2.2772297023811339e+00 -6.0123488230332960e+00 + 4.3634025884714118e+00 -2.5699439488969547e+00 -6.6047512208651726e+00 + 4.4860487502704398e+00 -2.8617986925695624e+00 -7.1717684095768846e+00 + 4.6894840527823600e+00 -3.2850196367236326e+00 -7.6900789287609719e+00 + 4.9618304504685256e+00 -3.8492113373198746e+00 -8.1216754633123767e+00 + 5.1469942175064176e+00 -4.4415904582303067e+00 -8.4048451498231014e+00 + id 13885 + loc 1.3373845815658569e-01 9.5685482025146484e-01 379 + blend 0.0000000000000000e+00 + interp 3.8180209856599567e-01:3.6141958810623631e-01:4.8473915912601262e-01:2.9159112520672531e-01:1.3232310846075384e+00:1.5901988311811618e-01:2.0776750817839278e+00:3.8179828054501003e-01:3.0218008241571837e+00:2.2093098046630505e-01:3.9646487579714842e+00 + CVs 20 + -3.8312184437766558e-02 4.3096179957153108e-01 2.7734183254202371e-01 + -4.4913201962671873e-02 7.8700602979054379e-01 6.0820140634658593e-01 + -1.7581597602885968e-02 1.0353314352446945e+00 9.9224375092222716e-01 + 4.1768648334741365e-02 1.2169647117051352e+00 1.3817834799861095e+00 + 1.2166014044455598e-01 1.3961224368334757e+00 1.7449687088105794e+00 + 1.9890418663899201e-01 1.6111316625377006e+00 2.0832113205041036e+00 + 2.4239289233748640e-01 1.8662557667081605e+00 2.3849794487996325e+00 + 2.3786391411249297e-01 2.1459000589963950e+00 2.6247744803839521e+00 + 1.9357141749442230e-01 2.4516545321775207e+00 2.8042016957259510e+00 + 1.0427576075240541e-01 2.7901533727454226e+00 2.9207867612375580e+00 + -3.8146675689071596e-02 3.1753716115425132e+00 2.9803975700992771e+00 + -2.5105502828592530e-01 3.6304588469615644e+00 3.0103719807572977e+00 + -5.7512586257866893e-01 4.1368810066142832e+00 3.0380962787921302e+00 + -1.0381797090610108e+00 4.6090461743983235e+00 3.0749407798588986e+00 + -1.6717254930615493e+00 4.9549022387168860e+00 3.0290435314958222e+00 + -2.4875307128684012e+00 5.0041726952346082e+00 2.6337806115856806e+00 + -3.4267574294039491e+00 4.4560275643721328e+00 1.8903194649110573e+00 + -4.0418190931748601e+00 3.4947320783073281e+00 1.5256809303418830e+00 + -4.0140960509606920e+00 3.0623004202924315e+00 1.7622725462607831e+00 + id 13886 + loc 8.7997518479824066e-02 4.2721047997474670e-01 378 + blend 0.0000000000000000e+00 + interp 4.7665245688426561e-01:4.3647052203885656e-01:1.2707384297427993e-01:4.7664769035969679e-01:9.9426563102588905e-01:4.5410574057498038e-01:1.5061437317536976e+00:2.3843502840710121e-01:1.9999297869273676e+00:2.6673848795072941e-01:2.5601646354072352e+00:4.2710867147200282e-01:3.2647083028306199e+00:4.2752700495197404e-01:3.8791077331486057e+00 + CVs 20 + 2.3030573307686653e-01 3.8301515390612223e-01 -3.3179538148663268e-01 + 4.2942310427762453e-01 7.0826136841592480e-01 -6.0773759218556800e-01 + 6.3890146048459040e-01 1.0016450632595233e+00 -8.7378708508083702e-01 + 8.8061492251807238e-01 1.2792422222042310e+00 -1.1431428194852586e+00 + 1.1583826276525941e+00 1.5466545355797627e+00 -1.4080026716661145e+00 + 1.4803087212275532e+00 1.8051253405048533e+00 -1.6690605818474864e+00 + 1.8490212413296021e+00 2.0403578150622455e+00 -1.9307711787634054e+00 + 2.2596112160948461e+00 2.2330132123871818e+00 -2.1933625963984085e+00 + 2.7123344149996162e+00 2.3687964332113158e+00 -2.4552521216468985e+00 + 3.2137750585518301e+00 2.4338451435310477e+00 -2.7158748154231835e+00 + 3.7584928656004140e+00 2.4112221823636251e+00 -2.9721851148350296e+00 + 4.3183311389366290e+00 2.2921279263353762e+00 -3.2265306583921203e+00 + 4.8516476472026326e+00 2.0696548577044305e+00 -3.4747856303163167e+00 + 5.2976939631589541e+00 1.7529986200945697e+00 -3.6891570432526275e+00 + 5.6128114639970921e+00 1.3883118046218823e+00 -3.8572167299964137e+00 + 5.8331611394813851e+00 9.9483110870711000e-01 -4.0078504797572831e+00 + 6.0423755575909333e+00 5.5788924030146125e-01 -4.1862652686250099e+00 + 6.2632176566170745e+00 1.1501604830128542e-01 -4.4508019158340257e+00 + 6.3681218944434708e+00 -1.5625930985815506e-01 -4.8406772065646901e+00 + id 13887 + loc 6.6067969799041748e-01 5.6894850730895996e-01 399 + blend 0.0000000000000000e+00 + interp 4.3880491729828502e-01:4.3880052924911206e-01:2.5088614840995227e-01:2.7845547491964229e-01:1.0038363766002740e+00:4.1185284067037081e-01:1.4968535661197493e+00:3.5301075227477574e-01:2.2597655683769853e+00:4.1077554910198705e-01:3.0029825996757076e+00:3.0796599160952515e-01:3.9164210963307959e+00 + CVs 20 + -1.1544420333491512e-01 2.7052930108291862e-01 -1.7671452752517794e-01 + -2.6545386953713557e-01 5.3277642523565527e-01 -3.4333386855614745e-01 + -4.2599647177931621e-01 7.8773262958203394e-01 -5.3604280652100611e-01 + -5.8085158158547257e-01 1.0269266519711424e+00 -7.6634795646531839e-01 + -7.3031652455078910e-01 1.2489668577803266e+00 -1.0289967762989434e+00 + -8.7515317187919650e-01 1.4566945627671484e+00 -1.3173652732038041e+00 + -1.0137607902637553e+00 1.6513679689059650e+00 -1.6259678662830463e+00 + -1.1450285756168463e+00 1.8307924266021662e+00 -1.9498801125680303e+00 + -1.2740352365072094e+00 1.9884072276948177e+00 -2.2890960191001462e+00 + -1.4108878268244707e+00 2.1067323072109438e+00 -2.6491888357319238e+00 + -1.5593006410086399e+00 2.1497454525584949e+00 -3.0233024280636775e+00 + -1.7119732063055346e+00 2.0843255486678092e+00 -3.3795459926170608e+00 + -1.8623121390612007e+00 1.9152590820429292e+00 -3.6903775595129513e+00 + -2.0103572318346883e+00 1.6775299445962228e+00 -3.9557205256183510e+00 + -2.1593391227853211e+00 1.4168368069132073e+00 -4.2035547241426068e+00 + -2.3118347843033860e+00 1.1728666755017736e+00 -4.4903408846090711e+00 + -2.4319157462392287e+00 9.8945778781504801e-01 -4.8711862305264022e+00 + -2.4383490320363408e+00 9.2009370132290957e-01 -5.3140796840536408e+00 + -2.3746617403088526e+00 9.1325456624814794e-01 -5.7215373260767270e+00 + id 13888 + loc 6.6347211599349976e-01 6.0127967596054077e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8020895192963864e-01:4.3930254176843897e-01:2.0946180647004442e-01:4.8020414984011939e-01:7.5756732715552044e-01:3.3006947139907777e-01:1.0304959859036102e+00:2.9770671077927430e-01:2.0064267632602482e+00:3.9466568775629618e-01:2.7789213388412759e+00:3.7379264387545463e-01:3.0334784081663084e+00:3.2282273379034715e-01:3.6957339656505508e+00 + CVs 20 + 5.3388867366802886e-02 2.8016273541002934e-01 -9.3792177299750853e-02 + 9.4406727865763318e-02 5.6796780418326975e-01 -1.7741949035193677e-01 + 1.4269612530970915e-01 8.6736024254136723e-01 -2.5267440917009598e-01 + 2.3918376643307221e-01 1.1756138366075275e+00 -3.2102300556448832e-01 + 4.0849761581474886e-01 1.4517283317182932e+00 -3.7075195510579234e-01 + 6.1368006863406244e-01 1.6599801770447113e+00 -3.9678470725115961e-01 + 8.0360171193161534e-01 1.8066754533285145e+00 -4.1240806387164269e-01 + 9.5912467268591839e-01 1.9127497242495053e+00 -4.3019191720004057e-01 + 1.0937663818881465e+00 1.9850736638732080e+00 -4.4160801885420714e-01 + 1.2287222928574799e+00 2.0733557060085093e+00 -4.4166392359763296e-01 + 1.2645287817498709e+00 2.2849708019411099e+00 -4.8931759733864993e-01 + 1.1099736103994640e+00 2.5529442601778269e+00 -6.5245082416266098e-01 + 8.7722817371273443e-01 2.7104432579586852e+00 -9.2690808078079012e-01 + 6.8276820273024275e-01 2.6879211988774507e+00 -1.2338366646544845e+00 + 5.4234372802594577e-01 2.5071035030634703e+00 -1.5404865931315055e+00 + 4.8002488976421365e-01 2.2216801945713818e+00 -1.8232864156794437e+00 + 5.1261450608235981e-01 1.8963176037665745e+00 -2.0532769082637969e+00 + 6.3256366370368533e-01 1.5823282935931202e+00 -2.1965356000096832e+00 + 8.4984047761975134e-01 1.2800827600196985e+00 -2.1918186556348975e+00 + id 13889 + loc 2.4373470246791840e-01 3.5446795821189880e-01 400 + blend 0.0000000000000000e+00 + interp 4.9851789521704359e-01:4.0114311008518116e-01:4.8406882556998876e-01:4.6889401485802712e-01:1.1068434188554985e+00:3.8628629864528158e-01:1.9780260900024129e+00:4.9851291003809145e-01:2.6978480239445854e+00:3.9700608208453364e-01:3.0371760007760926e+00:3.9319166057610000e-01:3.7784689187263085e+00 + CVs 20 + -1.3772633708381385e-01 2.0577939627312453e-01 3.1570717677132593e-01 + -2.9309923909896723e-01 3.9647644610017152e-01 6.0182673935618869e-01 + -4.7133903724566545e-01 5.6754609150748203e-01 8.7406251956415737e-01 + -6.7113066400907728e-01 7.1225218728246165e-01 1.1393335506874105e+00 + -8.8341716470110043e-01 8.2470222508920754e-01 1.3938019899490333e+00 + -1.0960327949078972e+00 9.0354256751229789e-01 1.6364679044058879e+00 + -1.2974418203675919e+00 9.5271044148617334e-01 1.8697839128539258e+00 + -1.4801800816957027e+00 9.8018995619897142e-01 2.0990620174483081e+00 + -1.6450406833131679e+00 9.9556730806672200e-01 2.3317603341906969e+00 + -1.8013884505282067e+00 1.0070621470820755e+00 2.5745977569527865e+00 + -1.9617293148405004e+00 1.0184299183066683e+00 2.8242408259414744e+00 + -2.1305111222449966e+00 1.0296276930654114e+00 3.0605498249861847e+00 + -2.2924290834905818e+00 1.0493513605581644e+00 3.2597658063923611e+00 + -2.4245534905970691e+00 1.1045388468931834e+00 3.4106681930307099e+00 + -2.5306929519238066e+00 1.2113552308628774e+00 3.5091700934516705e+00 + -2.6437162292882448e+00 1.3277266902652014e+00 3.5590617890038621e+00 + -2.7786202325736200e+00 1.3840744027133305e+00 3.5813909782032001e+00 + -2.9258039313101940e+00 1.3512968727245187e+00 3.6260302079833591e+00 + -3.0737328834727222e+00 1.1018537443962726e+00 3.9470648317318777e+00 + id 13890 + loc 5.5553231388330460e-02 4.8319739103317261e-01 415 + blend 0.0000000000000000e+00 + interp 3.8963427454901883e-01:2.8123103639933023e-01:1.9908495107859037e-01:3.5812042511627828e-01:9.5037568188268706e-01:3.3939571498971716e-01:1.8061277453812898e+00:3.8963037820627339e-01:2.0734440100277425e+00:2.6378019341188552e-01:2.8711814126575783e+00:3.6912097248977799e-01:3.6275401295023939e+00 + CVs 20 + -6.3792370275222568e-02 2.1600049300082896e-01 -5.5687697510578851e-02 + -1.6386304183600978e-01 3.9061211271156437e-01 -4.0227720350055535e-02 + -2.9031836479974826e-01 5.6822343678479814e-01 -2.8687717229397176e-02 + -4.1598096319453337e-01 7.5221503865571360e-01 -4.8430251002723940e-02 + -5.3508700548329324e-01 9.4223636775510677e-01 -1.0412089132735992e-01 + -6.4075988148663288e-01 1.1381175648814068e+00 -2.0019929570506179e-01 + -7.2526367749675202e-01 1.3375483992825510e+00 -3.3941221519488374e-01 + -7.8099978216586941e-01 1.5348030017954357e+00 -5.2058352752137538e-01 + -8.0155871329480799e-01 1.7230365698722336e+00 -7.3856305091367935e-01 + -7.8005349685411474e-01 1.8981465016818382e+00 -9.8422778590934556e-01 + -7.1120734384017681e-01 2.0551281480241883e+00 -1.2429713423102098e+00 + -6.0167000065473419e-01 2.1803322347081187e+00 -1.4975120135264313e+00 + -4.6899164695633933e-01 2.2594088623482573e+00 -1.7373823541994939e+00 + -3.2837166817092900e-01 2.2890956343071522e+00 -1.9569715965603973e+00 + -1.8915322180917804e-01 2.2768251023571779e+00 -2.1462767761978445e+00 + -5.8812257044588367e-02 2.2326255813954541e+00 -2.2970531304698190e+00 + 5.9612223234817074e-02 2.1620089313825761e+00 -2.4202429398059770e+00 + 1.6743178015328564e-01 2.0647231064488785e+00 -2.5417233345094257e+00 + 2.0482801557932628e-01 1.9032382419599871e+00 -2.6304164889941548e+00 + id 13891 + loc 9.2374372482299805e-01 7.6666504144668579e-02 382 + blend 0.0000000000000000e+00 + interp 6.2437312926362354e-01:1.9780891404176704e-01:1.0592832761817184e+00:4.2194810308458391e-01:2.0005226006312133e+00:6.2436688553233088e-01:2.3848325400025687e+00:4.9518545260102087e-01:3.0024654425542137e+00:2.8511890395450767e-01:3.2238984994076798e+00:3.0522116104535041e-01:3.9986175985624950e+00 + CVs 20 + -7.2942489985766423e-01 1.1977660667862716e-01 5.4169449193015240e-01 + -1.1699380944274671e+00 1.3644798721953116e-01 9.2605760577795071e-01 + -1.5302207145808102e+00 1.2822022580647591e-01 1.2856627969879966e+00 + -1.8853517124277548e+00 1.3092561327758467e-01 1.6653652553693989e+00 + -2.2439802380525973e+00 1.4003702431628795e-01 2.0676522709070788e+00 + -2.6145877131760766e+00 1.4842702444112621e-01 2.4901920447326744e+00 + -3.0008399685876137e+00 1.3867034110041931e-01 2.9316449528424515e+00 + -3.4015223624021189e+00 8.3785611870166088e-02 3.3807166715264425e+00 + -3.8079094612003188e+00 -3.5920575798260579e-02 3.8071352991959242e+00 + -4.2025305889041826e+00 -2.1230410435678060e-01 4.1860806955346099e+00 + -4.5692496635890176e+00 -4.2379924678559511e-01 4.5219371782643156e+00 + -4.9136066894956310e+00 -6.7243685730532410e-01 4.8329158284333689e+00 + -5.2533370595401623e+00 -1.0044279684026627e+00 5.1148073822527298e+00 + -5.5621595206272270e+00 -1.4937176084050234e+00 5.3483949369934134e+00 + -5.8304754980752538e+00 -2.1475159631825926e+00 5.5363176094009070e+00 + -6.1123782692190201e+00 -2.8767436087655800e+00 5.7034042033173851e+00 + -6.4494903991503838e+00 -3.5640825364992570e+00 5.8842240076225840e+00 + -6.8286084811709760e+00 -4.1696465438884278e+00 6.1280034715318976e+00 + -7.2368573838137449e+00 -4.7649869964889238e+00 6.4573010358738321e+00 + id 13892 + loc 1.9209544360637665e-01 3.5844472050666809e-01 403 + blend 0.0000000000000000e+00 + interp 4.4408350432084381e-01:3.7097248651446652e-01:1.9099722032422983e-01:2.7646989020278012e-01:8.9127872755372706e-01:3.9583292981426776e-01:1.6557439444222060e+00:3.3379580499095662e-01:2.0931429564404587e+00:3.6299078295576798e-01:2.7809710246745696e+00:2.8394324957949341e-01:3.0997988965206811e+00:4.4407906348580062e-01:3.9663783399063570e+00 + CVs 20 + -1.9252003933045289e-01 5.6370968743632517e-02 1.2444674288025442e-01 + -3.5520414521676480e-01 1.0580431013565347e-01 2.5400680742937276e-01 + -4.9071211029260242e-01 1.5363493897277408e-01 3.8186765172411474e-01 + -5.9944990326439018e-01 1.9776805258600519e-01 4.9178751253751096e-01 + -6.8086503210367255e-01 2.3541200739072513e-01 5.6790099308995501e-01 + -7.4123953990359970e-01 2.6927290928970288e-01 5.9206556618110917e-01 + -7.9346978738952112e-01 3.1279365262014330e-01 5.5511290738286878e-01 + -8.5596203693994755e-01 3.8722777833192745e-01 4.6228605348257368e-01 + -9.5021286299605401e-01 5.1290790824939392e-01 3.3506331631459008e-01 + -1.0908649247897921e+00 6.9712634669596263e-01 2.1765965281440347e-01 + -1.2699721394891728e+00 9.2882020073972460e-01 1.6021478692259461e-01 + -1.4480707973485631e+00 1.1839714147396292e+00 1.9757023887712177e-01 + -1.5686361566899039e+00 1.4282768721367234e+00 3.3918601449961905e-01 + -1.6161361422941400e+00 1.6431951559985500e+00 5.6763177396063680e-01 + -1.6140279754941975e+00 1.8229095869951544e+00 8.6544475423549794e-01 + -1.5604942713231125e+00 1.9293967066776840e+00 1.2077971932269782e+00 + -1.4223845256553069e+00 1.8854932849080903e+00 1.5267092009339338e+00 + -1.2064946367430622e+00 1.6698972922853348e+00 1.7737524953914061e+00 + -1.1737826559453159e+00 1.6393543246525999e+00 2.1173087375623063e+00 + id 13893 + loc 2.2124892473220825e-01 2.4175388738512993e-02 412 + blend 0.0000000000000000e+00 + interp 4.4207832550429216e-01:4.4207390472103714e-01:1.6545334810477341e-01:3.4125331677304588e-01:9.6497539711928670e-01:4.1802650158333621e-01:1.7164143195011259e+00:3.4152212366438417e-01:2.2042344428968761e+00:4.2915507079426218e-01:2.9139699783736899e+00:2.6576663990211075e-01:3.7274014390026005e+00 + CVs 20 + -6.0423900257016216e-02 9.8552401721491045e-02 -5.4054497210276997e-01 + -1.0281120942182984e-01 1.1380396195301223e-01 -9.4980401622633748e-01 + -1.1530836477071552e-01 1.0236975518207453e-01 -1.3122890087345913e+00 + -1.0085138625435661e-01 7.9783238919380217e-02 -1.6612890178095108e+00 + -6.1221255184528200e-02 4.2669924284677418e-02 -1.9876751409846931e+00 + 6.6621263601762681e-04 -1.0081815110838055e-02 -2.2831030575507039e+00 + 7.9504700920793037e-02 -7.7156442750565324e-02 -2.5448061605155847e+00 + 1.6889502931895586e-01 -1.5628786188549038e-01 -2.7757201408745922e+00 + 2.6340238538858762e-01 -2.4495645833932556e-01 -2.9794076639478808e+00 + 3.5961075869292769e-01 -3.4040846309199368e-01 -3.1598584542123187e+00 + 4.5880729549176130e-01 -4.4062611579073541e-01 -3.3292086752839278e+00 + 5.6536878368606247e-01 -5.4875279781620145e-01 -3.5097305460948207e+00 + 6.6844211861370195e-01 -6.7758926711850531e-01 -3.7149395035585382e+00 + 7.4013616039527275e-01 -8.3720494068871609e-01 -3.9334379795375187e+00 + 7.6670369418596340e-01 -1.0223489567457820e+00 -4.1474306444878835e+00 + 7.5259958595057030e-01 -1.2242139020585128e+00 -4.3508161541481982e+00 + 7.0191081020920787e-01 -1.4387727367905512e+00 -4.5430833337512233e+00 + 6.1539229166120812e-01 -1.6575568183597293e+00 -4.7166647173269389e+00 + 4.9551754770762269e-01 -1.8610965630469769e+00 -4.8506951891212866e+00 + id 13894 + loc 2.2831071913242340e-01 5.8433401584625244e-01 380 + blend 0.0000000000000000e+00 + interp 5.0221201304156282e-01:3.0246713008654480e-01:5.6818545873750859e-01:4.9002074650390698e-01:9.8880444007152546e-01:5.0220699092143239e-01:1.2897246637445030e+00:3.8019746849988278e-01:1.9383439598363208e+00:3.1200092482687963e-01:2.4555699149528776e+00:3.2684364063599480e-01:3.4616209473222179e+00:4.2893429502100905e-01:3.9993084599547228e+00 + CVs 20 + -4.4756958001600566e-01 2.7784479448020938e-01 -4.2643955753881363e-01 + -8.4405767421721023e-01 4.6457658855928419e-01 -7.6866196172448698e-01 + -1.2249381195711746e+00 6.0965269161471891e-01 -1.1060661108498036e+00 + -1.6024476254149340e+00 7.4256785565423877e-01 -1.4793157020722656e+00 + -1.9613291499095116e+00 8.6525074352852849e-01 -1.8864169047411614e+00 + -2.2912400027641944e+00 9.7028288526900408e-01 -2.3166123060192607e+00 + -2.5853246090936377e+00 1.0558901715748417e+00 -2.7595641086504057e+00 + -2.8406817203822694e+00 1.1280111773716355e+00 -3.2071065799117973e+00 + -3.0651130403580686e+00 1.1949287344181063e+00 -3.6570771824394717e+00 + -3.2776707017131681e+00 1.2579344424377952e+00 -4.1150505258016281e+00 + -3.4993171595542427e+00 1.3042961569246816e+00 -4.5884006424994137e+00 + -3.7463409937481487e+00 1.3063779604266470e+00 -5.0829474635521521e+00 + -4.0227453797472004e+00 1.2270484564596305e+00 -5.5946404688784082e+00 + -4.3034256768388870e+00 1.0599289354457833e+00 -6.0776878337954230e+00 + -4.5489308427622053e+00 8.7028202467586446e-01 -6.4565411999588953e+00 + -4.7369500634845494e+00 7.1790374881905850e-01 -6.7031467256611235e+00 + -4.8513476243441342e+00 5.9630357623966557e-01 -6.8594203541185230e+00 + -4.9056692382757934e+00 4.7785385710475214e-01 -6.9909444411746327e+00 + -5.1873492483938533e+00 3.7549614864273462e-01 -7.0859275433459734e+00 + id 13895 + loc 8.1092739105224609e-01 7.7454710006713867e-01 1078 + blend 0.0000000000000000e+00 + interp 2.8246513388063615e-01:2.8246230922929738e-01:9.8556968829012881e-01:2.6655209082254394e-01:2.0456955262563752e+00:2.7083212159669945e-01:3.0114374740250112e+00:2.7670581665227439e-01:3.9997030204407586e+00 + CVs 20 + 1.1063905974566809e-01 2.7022598860919422e-01 -8.5452691151813365e-02 + 2.6036470916377913e-01 5.4640548119507559e-01 -1.6953306914917052e-01 + 4.3625847714783056e-01 8.2076778199458666e-01 -2.7057246406758217e-01 + 6.3069521670087636e-01 1.0877273509908170e+00 -4.0290968739745026e-01 + 8.4004673941626773e-01 1.3420088097347640e+00 -5.7807777597674148e-01 + 1.0564937932128493e+00 1.5756715406684156e+00 -8.0863299678101153e-01 + 1.2662245345892993e+00 1.7763804838774522e+00 -1.1074099507438084e+00 + 1.4481533743078816e+00 1.9259634892419131e+00 -1.4836290778359333e+00 + 1.5748673011675800e+00 2.0010223288907416e+00 -1.9334084690114364e+00 + 1.6226439367113263e+00 1.9818045875209476e+00 -2.4310423941641699e+00 + 1.5871406244735973e+00 1.8632191185063172e+00 -2.9330040080128934e+00 + 1.4965242379218395e+00 1.6605822207236185e+00 -3.3929639361498642e+00 + 1.3973788842303441e+00 1.4007208170961745e+00 -3.7892280521492920e+00 + 1.3205686698869696e+00 1.1014973949665694e+00 -4.1266005054499990e+00 + 1.2815945465430842e+00 7.7951489996409662e-01 -4.4142522235493296e+00 + 1.3067350307445007e+00 4.8664122903868878e-01 -4.6590078648796052e+00 + 1.4301604319110497e+00 3.0552907430289467e-01 -4.8627046789450112e+00 + 1.6259687260425963e+00 2.2780406262439001e-01 -5.0279036663561980e+00 + 1.7339551834607414e+00 -3.6767576461293583e-02 -5.3248551519918452e+00 + id 13896 + loc 5.8904290199279785e-01 1.6023756563663483e-01 373 + blend 0.0000000000000000e+00 + interp 3.0578904473695245e-01:2.6760479361175099e-01:4.8632516197578368e-01:2.1818030941655478e-01:1.1260662630731022e+00:2.6650684872291813e-01:1.9894960986422872e+00:3.0578598684650510e-01:2.6478902397965718e+00:2.6163005526210559e-01:3.4331631772523350e+00 + CVs 20 + 3.4278175522600030e-01 4.7236580815547813e-01 1.7700976001311791e-03 + 7.0765936504422988e-01 8.8622518128413230e-01 2.6942200784853987e-02 + 1.0606688879012798e+00 1.2009088543914399e+00 5.8421197771270111e-02 + 1.3608788945051109e+00 1.4237302503676867e+00 4.7666083509141033e-02 + 1.6193079141097051e+00 1.5793272452534715e+00 -1.7759929346097825e-02 + 1.8920166298066974e+00 1.7216962823719466e+00 -9.6650461752576911e-02 + 2.2142597372861119e+00 1.9056733285959968e+00 -1.5254077334562688e-01 + 2.5744104856297052e+00 2.1628561763606182e+00 -1.5604957895051752e-01 + 2.9316306286533185e+00 2.4916855734056758e+00 -8.7036964417984808e-02 + 3.2513855890432235e+00 2.8592159563568065e+00 5.9133034321226075e-02 + 3.5233079529410833e+00 3.2234805791973566e+00 2.8345291737505590e-01 + 3.7470746121366338e+00 3.5444995886039070e+00 6.0149338732610769e-01 + 3.9137972820805604e+00 3.7643483799305431e+00 1.0256374041117478e+00 + 4.0097772794889819e+00 3.8064341812912970e+00 1.5218651321546024e+00 + 4.0494922413437857e+00 3.6410661276277465e+00 1.9721840005842748e+00 + 4.1169476137600505e+00 3.4076238025744967e+00 2.2554775886328740e+00 + 4.2490659557283319e+00 3.2283900904761214e+00 2.4151816556507888e+00 + 4.4412032330945994e+00 3.0208282377190177e+00 2.5559316650080008e+00 + 4.7417044384489602e+00 2.6377913409353706e+00 2.7310518842883695e+00 + id 13897 + loc 8.4033626317977905e-01 7.3982632160186768e-01 401 + blend 0.0000000000000000e+00 + interp 4.7236447948133692e-01:3.3089945164689255e-01:3.7780741650805916e-02:2.6340492117845415e-01:7.7174602564700179e-01:4.6055888095755299e-01:1.0113838905233845e+00:4.7235975583654211e-01:1.6205925901108387e+00:3.8815309437019241e-01:2.0439479953034834e+00:3.0549557137679223e-01:2.7200616853195658e+00:3.1665840776700976e-01:3.5724635054811902e+00 + CVs 20 + -1.6720854467664376e-01 2.9711419678918100e-01 -1.4217992544662839e-01 + -3.2963767368160030e-01 6.1801942752111416e-01 -2.7832792298106246e-01 + -4.8463225015949418e-01 9.7784242652691156e-01 -4.4317002183682841e-01 + -6.2562868469129640e-01 1.3707081260955096e+00 -6.6325735932711039e-01 + -7.4148621868745623e-01 1.7648864721526643e+00 -9.4533040565070470e-01 + -8.3303798981893573e-01 2.1251172559266007e+00 -1.2736138208747914e+00 + -9.2400688734768999e-01 2.4415726015790615e+00 -1.6355865145375192e+00 + -1.0524520468103560e+00 2.7136136226108705e+00 -2.0335179728706350e+00 + -1.2575072907191656e+00 2.9262607798059905e+00 -2.4652527371286883e+00 + -1.5690688683115355e+00 3.0538004910361378e+00 -2.9167999028414142e+00 + -2.0044595378824779e+00 3.0704222352379782e+00 -3.3708883011370658e+00 + -2.5620165531357766e+00 2.9489272794873020e+00 -3.8119138363839062e+00 + -3.2013450058515622e+00 2.6672584476865269e+00 -4.2314807271560086e+00 + -3.8523497216725593e+00 2.2335578731637891e+00 -4.6267728708304237e+00 + -4.4691196470151171e+00 1.6902095524449905e+00 -5.0009417837906716e+00 + -5.0183725315174001e+00 1.1152325311561775e+00 -5.4251916321597635e+00 + -5.4122228446445275e+00 6.4850052490702714e-01 -6.0430988416722284e+00 + -5.5748607881082739e+00 3.8360700222032273e-01 -6.8319746560134975e+00 + -5.8319803286525040e+00 1.5237310305736051e-02 -7.5089259746968793e+00 + id 13898 + loc 4.6173509955406189e-01 8.4735798835754395e-01 396 + blend 0.0000000000000000e+00 + interp 4.2498061316717423e-01:3.8841976086194097e-01:2.3060611901111328e-01:4.2497636336104255e-01:9.7526782016246893e-01:3.4610009567349420e-01:1.7723137185994038e+00:3.9688246724002813e-01:2.0464417450063750e+00:3.3435157906397334e-01:2.7453350647085717e+00:3.5482652330870862e-01:3.8208019274339673e+00 + CVs 20 + 9.7462459301274251e-01 1.7814070875283311e-01 -3.6336146839745914e-01 + 1.5990132521410281e+00 1.8000034971639994e-01 -6.6162080220146291e-01 + 2.1234408499604518e+00 1.3987882856613293e-01 -9.3132420438488350e-01 + 2.6304642928947013e+00 1.1021081447745956e-01 -1.1796352374981898e+00 + 3.1188286133811949e+00 9.2182201714909318e-02 -1.4005833632500684e+00 + 3.5931555588705244e+00 8.3818341180043276e-02 -1.5941190090221760e+00 + 4.0626258509735580e+00 7.6472594436605812e-02 -1.7655572255145122e+00 + 4.5398175528580351e+00 5.4963339145198242e-02 -1.9208637482558930e+00 + 5.0376495158330563e+00 -1.8225504328293063e-03 -2.0568555048632682e+00 + 5.5586625047789164e+00 -1.2145139943996197e-01 -2.1689720076500416e+00 + 6.0880435050360493e+00 -3.3327471601213898e-01 -2.2626038099280965e+00 + 6.5916141380961371e+00 -6.5747747809183843e-01 -2.3522826325570287e+00 + 7.0297773621960626e+00 -1.0916264763094081e+00 -2.4426502810016952e+00 + 7.3759572419469084e+00 -1.6130705647212320e+00 -2.5240001790747177e+00 + 7.6181482790732851e+00 -2.1888762350562692e+00 -2.5896664188050988e+00 + 7.7542790059873248e+00 -2.7816873639323019e+00 -2.6442846134470566e+00 + 7.7906320097725157e+00 -3.3553825919738243e+00 -2.6923612728942743e+00 + 7.7413923736175922e+00 -3.8876781451520217e+00 -2.7326643631858527e+00 + 7.6130080624721526e+00 -4.3942437572796447e+00 -2.7664526060876464e+00 + id 13899 + loc 1.3582594692707062e-01 5.8512818813323975e-01 402 + blend 0.0000000000000000e+00 + interp 4.5412531885621360e-01:4.2565119252080202e-01:1.1659109228197240e-02:4.5412077760302505e-01:6.1477397889837959e-01:3.7678221792044880e-01:1.0729055829467535e+00:2.7327767911835493e-01:1.8583326899204786e+00:3.9828813804897073e-01:2.3591342985335957e+00:3.5951575299814748e-01:3.1075329056380601e+00 + CVs 20 + -3.0761032569895860e-02 3.5839278502501160e-01 -1.6070872550315204e-01 + -6.6716947238857460e-02 7.2207560339058841e-01 -3.2197159092702354e-01 + -7.5564518206021003e-02 1.0987926451321357e+00 -4.9746772767169267e-01 + -5.0390744340274796e-02 1.4861731442972865e+00 -6.9582125724779909e-01 + -2.6753679527501406e-03 1.8758341429315792e+00 -9.2124592195335753e-01 + 5.4662503876270141e-02 2.2599924558691771e+00 -1.1759889718604446e+00 + 1.1056624564021800e-01 2.6329851152688528e+00 -1.4631812203434782e+00 + 1.5419977574653065e-01 2.9887828425931353e+00 -1.7887874617369552e+00 + 1.7490775930404978e-01 3.3180078363706085e+00 -2.1616990184061713e+00 + 1.6913278698030598e-01 3.6045500086011608e+00 -2.5945272520110318e+00 + 1.4411455385499916e-01 3.8204138759777644e+00 -3.1042542606048662e+00 + 1.0534215404225922e-01 3.9190765583472094e+00 -3.7001496468355333e+00 + 4.5522711120043580e-02 3.8511933114915697e+00 -4.3416003768307547e+00 + -5.5305328211991966e-02 3.6223381309808165e+00 -4.9409889575091626e+00 + -2.2154252621099624e-01 3.3107338873472250e+00 -5.4247362003132702e+00 + -4.4025833552308402e-01 3.0434877185080649e+00 -5.7475274035562718e+00 + -6.3782530575965035e-01 2.9149763003454687e+00 -5.9139576653152304e+00 + -8.3462060178291186e-01 2.9001596643875356e+00 -5.9959072498443682e+00 + -1.2687657691954568e+00 2.9712958840202535e+00 -6.0736439983419883e+00 + id 13900 + loc 7.8124082088470459e-01 9.9606335163116455e-01 395 + blend 0.0000000000000000e+00 + interp 4.6417195857720617e-01:3.0387269602497641e-01:1.5016748480322306e-01:4.1614622676810947e-01:8.1653066722343248e-01:1.6980747616879596e-01:1.9930602549514578e+00:4.6416731685762042e-01:2.9039564186007336e+00:3.5467257779256606e-01:3.3384936960631211e+00 + CVs 20 + 5.9002138918961788e-01 1.3762660681337946e-01 -4.4321624089721623e-01 + 1.0428980959559211e+00 1.6221844991915485e-01 -8.2086330236075389e-01 + 1.4667796186842130e+00 1.3402781766134075e-01 -1.1830518422605629e+00 + 1.9051280930247729e+00 7.2345695809802879e-02 -1.5422984261537094e+00 + 2.3467146229099218e+00 -2.6645009304755662e-02 -1.8804490527709981e+00 + 2.7766557553508395e+00 -1.6032768324720759e-01 -2.1842691772145280e+00 + 3.1791259736467055e+00 -3.2052690990335875e-01 -2.4448405066683581e+00 + 3.5387123601734354e+00 -4.9589950939862604e-01 -2.6536804494288204e+00 + 3.8439608054370127e+00 -6.7114662449892637e-01 -2.8064075239434407e+00 + 4.0946413946009557e+00 -8.2771871416842968e-01 -2.9102886112930646e+00 + 4.3063028992476653e+00 -9.5057905714781099e-01 -2.9841968392368257e+00 + 4.5016852223000994e+00 -1.0356018464781691e+00 -3.0527992840921852e+00 + 4.6966590001274806e+00 -1.0889927104289661e+00 -3.1399396643486788e+00 + 4.9010810865239005e+00 -1.1241438709326932e+00 -3.2634128847917196e+00 + 5.1232741331637746e+00 -1.1607033980864534e+00 -3.4326637539304947e+00 + 5.3541100535789585e+00 -1.2166938262612916e+00 -3.6518318837579011e+00 + 5.5704140943899567e+00 -1.3019196499769925e+00 -3.9218459671514792e+00 + 5.7462616465532665e+00 -1.4287139754899583e+00 -4.2313768558368006e+00 + 5.7763580376959940e+00 -1.6473834185138219e+00 -4.4733586069321110e+00 + id 13901 + loc 9.2225122451782227e-01 4.8086774349212646e-01 393 + blend 0.0000000000000000e+00 + interp 4.8838786388642924e-01:3.9089170637759907e-01:1.6106968323157567e-01:4.0680171769707718e-01:3.8161354123471314e-01:4.8838298000779040e-01:1.0002402976349305e+00:4.7534015447368794e-01:1.9990350174974845e+00:4.2455739451267510e-01:2.2308862477652118e+00:4.0310165137086917e-01:3.0068883395514154e+00:4.6219059740671092e-01:3.7466624514732652e+00 + CVs 20 + 2.3520617316298364e-01 2.1705992057510409e-01 8.4327004530469735e-02 + 4.5702825596150420e-01 4.4040933412004479e-01 1.9152495861827826e-01 + 6.7987928630832550e-01 6.7506791617665640e-01 2.9536653695619042e-01 + 9.0996000362378504e-01 9.2102272150101805e-01 3.8309671442510301e-01 + 1.1477392476245520e+00 1.1712212087305667e+00 4.5680616314183164e-01 + 1.3940652649160081e+00 1.4145871199947910e+00 5.2478513531494131e-01 + 1.6494121780130266e+00 1.6407500556885193e+00 5.9816852468255244e-01 + 1.9135961346806234e+00 1.8402640249255162e+00 6.8292541317037825e-01 + 2.1870671094434515e+00 2.0048529647814597e+00 7.7751756501251545e-01 + 2.4696860205846236e+00 2.1235768748561790e+00 8.8370539131881642e-01 + 2.7530710043090427e+00 2.1747673136782106e+00 1.0089176534649269e+00 + 3.0162490501841397e+00 2.1337148372541854e+00 1.1470691881755908e+00 + 3.2437091174831338e+00 1.9950910733326568e+00 1.2778079695135078e+00 + 3.4406370693218715e+00 1.7697451183100832e+00 1.3911557323146755e+00 + 3.6204766250596800e+00 1.4860481524546683e+00 1.4763690068244286e+00 + 3.8082662529891707e+00 1.2083015735716909e+00 1.5114333592819302e+00 + 4.0371914062679046e+00 9.9728945148369186e-01 1.4919003711696326e+00 + 4.3281405460265274e+00 8.0957655303160792e-01 1.4624116771718403e+00 + 4.6793423952553495e+00 4.6868569339482824e-01 1.4985671502663753e+00 + id 13902 + loc 7.9684084653854370e-01 4.1258504986763000e-01 1068 + blend 0.0000000000000000e+00 + interp 2.8752973129437376e-01:2.8752685599706085e-01:2.2711491581190990e-01:2.4586115642453008e-01:1.0821242960928765e+00:2.7648267140293808e-01:2.0229463273685058e+00:2.5168756222229338e-01:2.9926491848905803e+00:2.4771124384165100e-01:3.7889062585600377e+00 + CVs 20 + -1.3316062696975756e-01 4.1555119999943219e-01 1.5315172299143523e-01 + -2.7171025476387789e-01 8.5590094943159023e-01 3.0816836957320665e-01 + -4.5272051574909489e-01 1.3094305201968290e+00 4.4221884821449647e-01 + -7.0951663964657752e-01 1.7529461702237548e+00 5.4501798597559004e-01 + -1.0663005620238273e+00 2.1498837255471606e+00 6.2137088561152265e-01 + -1.5244144269301301e+00 2.4542434949790355e+00 6.9209993933266911e-01 + -2.0515409393171282e+00 2.6289471301489655e+00 7.8824383706998791e-01 + -2.5855173621840302e+00 2.6678540990182400e+00 9.2995745474836899e-01 + -3.0762455706269791e+00 2.5852690965182425e+00 1.1264046925925446e+00 + -3.4911791578068101e+00 2.3314923477596596e+00 1.3999934619872323e+00 + -3.7155647691464910e+00 1.8275011884833496e+00 1.7065558970448242e+00 + -3.6938007660315644e+00 1.2403378468633415e+00 1.8817295290371203e+00 + -3.5307293809034181e+00 6.9826012528692605e-01 1.8986872487173441e+00 + -3.2669744645669110e+00 2.3224351279372143e-01 1.7701072796497821e+00 + -3.0224600869855474e+00 -9.8107752476181365e-02 1.5453973637987155e+00 + -2.9106910576010483e+00 -3.1390618682055288e-01 1.3121327394600264e+00 + -2.9439095247625202e+00 -4.3801106812148249e-01 1.1245297800006755e+00 + -3.1399974590389301e+00 -4.1883503777885828e-01 1.0468108186698148e+00 + -3.1790035600624305e+00 -5.1855096182081883e-01 9.4841111548533497e-01 + id 13903 + loc 2.1965209394693375e-02 2.9907722491770983e-03 407 + blend 0.0000000000000000e+00 + interp 4.3454762786478907e-01:2.4819724113298447e-01:2.8374171257367686e-01:2.9537610744653503e-01:1.6318081685973111e+00:2.5379397116529251e-01:2.0561335334233202e+00:2.7305912465996351e-01:2.9106924505513088e+00:2.8047419907054283e-01:2.9523443268085705e+00:4.3454328238851042e-01:3.6917774818783631e+00 + CVs 20 + 1.1376631979424263e-01 3.0687824829488458e-01 -3.5660487314028672e-01 + 2.0463253605305501e-01 5.0829135255394287e-01 -5.2121126071620427e-01 + 2.9225570867375972e-01 6.3829985493826980e-01 -6.2757565547863325e-01 + 3.9128441700466582e-01 7.4439670740802433e-01 -7.3518997806164244e-01 + 5.0229602326639311e-01 8.2684803056881762e-01 -8.4028332649049142e-01 + 6.2542159229940064e-01 8.8725330150282766e-01 -9.4152336026177086e-01 + 7.6113372362583398e-01 9.2868159329602107e-01 -1.0398987120702943e+00 + 9.1051169899556916e-01 9.5447163701756088e-01 -1.1377179061241556e+00 + 1.0750014946363691e+00 9.6710415089200952e-01 -1.2373971557565482e+00 + 1.2554701353142372e+00 9.6773927218458700e-01 -1.3406514217331702e+00 + 1.4517726841470442e+00 9.5628579627343224e-01 -1.4482580026374978e+00 + 1.6635211359979314e+00 9.3143631950015504e-01 -1.5602429341719155e+00 + 1.8891015534201427e+00 8.9154602182702625e-01 -1.6760919879121821e+00 + 2.1228067640354613e+00 8.3797642897942326e-01 -1.7952133040384790e+00 + 2.3553638688299472e+00 7.7897104138092277e-01 -1.9183263512732027e+00 + 2.5798486947060906e+00 7.2834621609267258e-01 -2.0471735242257600e+00 + 2.7929940119413250e+00 6.9599816953125837e-01 -2.1818927547792089e+00 + 2.9941586919840852e+00 6.8490583685876261e-01 -2.3216983220209717e+00 + 3.2438390754732489e+00 6.7101052726573340e-01 -2.4919239169682910e+00 + id 13904 + loc 5.8232331275939941e-01 7.6942288875579834e-01 378 + blend 0.0000000000000000e+00 + interp 3.0419966117461683e-01:3.0419661917800511e-01:5.7214550677020559e-01:2.3943995525891729e-01:1.3216110599714854e+00:2.8006982703105987e-01:2.1321159812439143e+00:2.4965331366458723e-01:3.0121391437166567e+00:2.5904080083711295e-01:3.9908270375385944e+00 + CVs 20 + 5.6222841285897307e-01 3.4684842798747428e-01 9.0765312401855147e-02 + 1.0502477222948641e+00 6.3446674195168884e-01 1.3440703972694901e-01 + 1.5341458112009443e+00 8.9854410345131175e-01 1.5347210837898240e-01 + 2.0410334430577781e+00 1.1739771144198874e+00 1.7502559285895913e-01 + 2.5641141030749837e+00 1.4743007191828501e+00 2.3012200256513515e-01 + 3.1053758587841314e+00 1.7924449903540962e+00 3.5160957692242811e-01 + 3.6704545643092108e+00 2.1032924767951626e+00 5.6662514729863511e-01 + 4.2525658746269457e+00 2.3745733097672437e+00 8.8968794837436416e-01 + 4.8361903346543773e+00 2.5713913736581961e+00 1.3164337310866610e+00 + 5.4121687184974130e+00 2.6557670438402372e+00 1.8221006545533029e+00 + 5.9792215485273177e+00 2.5845693382014341e+00 2.3697598998076734e+00 + 6.5239823795123533e+00 2.3152157516060372e+00 2.9158010028866785e+00 + 7.0013979147286527e+00 1.8486869113748035e+00 3.4019764589544064e+00 + 7.3573867853643637e+00 1.2989164964168793e+00 3.7706813285825520e+00 + 7.5875837903388605e+00 8.3684892730538341e-01 4.0127938080750001e+00 + 7.7331890835944748e+00 5.2241267252361379e-01 4.1505904213995262e+00 + 7.8418568830921220e+00 2.9917320318018081e-01 4.2017684281914223e+00 + 7.9449790327098482e+00 9.6384874675708332e-02 4.1950140549122050e+00 + 8.0610734917389983e+00 -1.7099217401005440e-01 4.1842334044706373e+00 + id 13905 + loc 4.6013444662094116e-01 9.7479897737503052e-01 374 + blend 0.0000000000000000e+00 + interp 3.2149884030045056e-01:2.7684988279944661e-01:5.1015739815486572e-01:3.2149562531204756e-01:1.2289544332727875e+00:2.8222702473679456e-01:2.0054810995703178e+00:2.5808208574103819e-01:2.7375247322324778e+00:3.0826104470192811e-01:3.6368171051049787e+00 + CVs 20 + -5.6557166862574237e-01 2.8615700685064677e-01 -8.4594281852608422e-02 + -9.9727688984692886e-01 4.9362206535426129e-01 -1.1738064085858896e-01 + -1.4124293753816843e+00 6.6393584879794021e-01 -1.2511354038587180e-01 + -1.8711851147625107e+00 8.2846246006634372e-01 -1.2171370210925392e-01 + -2.3785318630315939e+00 1.0061395062393839e+00 -1.2057757249135581e-01 + -2.9372776449499405e+00 1.2082307053656720e+00 -1.4809111678672926e-01 + -3.5558160514338004e+00 1.4237366218335437e+00 -2.3889970503307434e-01 + -4.2344356686957729e+00 1.6231442817473827e+00 -4.2589248573754857e-01 + -4.9544347864231089e+00 1.7700773735347102e+00 -7.2874997355601945e-01 + -5.6870345948978311e+00 1.8241606989788957e+00 -1.1405047916671163e+00 + -6.4089951101203102e+00 1.7407002585056546e+00 -1.6240440119596029e+00 + -7.0961613593806785e+00 1.4743363119693438e+00 -2.1262426506996488e+00 + -7.7039788489793928e+00 1.0127768263268253e+00 -2.5862852179024869e+00 + -8.1874119711392481e+00 4.4203474124530473e-01 -2.9517941121951536e+00 + -8.5505079598384768e+00 -8.2192726388377935e-02 -3.2166132039005144e+00 + -8.8284996289584523e+00 -4.6306212749924747e-01 -3.3960220621337012e+00 + -9.0457848595356563e+00 -6.9912063638681943e-01 -3.4850053816626332e+00 + -9.2187727599428015e+00 -8.6889437433573846e-01 -3.5015517582586972e+00 + -9.4060963833243836e+00 -1.2012126598091353e+00 -3.5554227457695067e+00 + id 13906 + loc 7.5160819292068481e-01 3.0205124616622925e-01 412 + blend 0.0000000000000000e+00 + interp 4.2959872993970000e-01:4.2417533136264457e-01:5.4823359148844397e-01:3.5896565067281622e-01:1.0128050224457965e+00:2.8762103336810857e-01:1.8888131393281358e+00:4.2959443395240060e-01:2.8531036802825325e+00:3.9331800641869435e-01:3.2018216208748971e+00:3.2155464736768519e-01:3.9246114171192832e+00 + CVs 20 + -6.4405070192118841e-01 2.5943904829761216e-01 1.8543110370761939e-01 + -1.1277438387427252e+00 4.4484057347593464e-01 3.3414942449155949e-01 + -1.5476993947718829e+00 6.0778007403460210e-01 4.5678595473412054e-01 + -1.9700034032516522e+00 7.6620707853519154e-01 5.7191223204911534e-01 + -2.3925327611012941e+00 9.1460944033987790e-01 6.7929147543922908e-01 + -2.8111449571781448e+00 1.0469846336652027e+00 7.7879205334356261e-01 + -3.2213397195618363e+00 1.1576025876676310e+00 8.7068751349598772e-01 + -3.6190900869186899e+00 1.2412530686216534e+00 9.5573621355501293e-01 + -3.9974888192555933e+00 1.2948839712769515e+00 1.0336391874400737e+00 + -4.3507825124684274e+00 1.3183673039757360e+00 1.1040386973919620e+00 + -4.6874806415606303e+00 1.3104698647185820e+00 1.1694454171138498e+00 + -5.0460311569449017e+00 1.2580931406337590e+00 1.2379332991505612e+00 + -5.4602945266713778e+00 1.1332977129119535e+00 1.3235806782451558e+00 + -5.8900199436472827e+00 9.2078443896373807e-01 1.4434805401040429e+00 + -6.2693277942116010e+00 6.3433251577945726e-01 1.6045190862584187e+00 + -6.5718301108401764e+00 2.9463618964936966e-01 1.8027701181741693e+00 + -6.7910130135021998e+00 -7.4860362751608012e-02 2.0308042763816241e+00 + -6.9251742678631807e+00 -4.4501659028018103e-01 2.2790090272417762e+00 + -6.9624414669747035e+00 -7.4271798708026626e-01 2.5005742244450637e+00 + id 13907 + loc 7.5013421475887299e-02 2.6791346073150635e-01 382 + blend 0.0000000000000000e+00 + interp 3.8293567775913029e-01:3.8293184840235273e-01:3.6813301093957695e-01:3.7554942246281076e-01:1.1375626541759323e+00:3.6855401559733764e-01:1.9104597149213447e+00:2.6786262374730518e-01:2.2007722810925632e+00:2.9207387875044805e-01:3.4618183476204845e+00 + CVs 20 + -4.5313043044939011e-01 1.5393666297403424e-01 -7.8176060090928579e-01 + -7.9275965031947304e-01 1.8555023016593569e-01 -1.3280855818599926e+00 + -1.1060522231021104e+00 1.7418655917083714e-01 -1.7854239328936607e+00 + -1.4327704549863367e+00 1.5082032397253631e-01 -2.2056618489967779e+00 + -1.7772429864008517e+00 1.1791966084464656e-01 -2.5793417239783079e+00 + -2.1452120072096861e+00 7.8811992515411822e-02 -2.9047685245201387e+00 + -2.5409643870366416e+00 3.6923971460780303e-02 -3.1860164193693903e+00 + -2.9670982030893400e+00 -7.3421880663144812e-03 -3.4337495804681257e+00 + -3.4218671185658098e+00 -6.2207602837129228e-02 -3.6652232260892514e+00 + -3.8951147393267869e+00 -1.4490174912289500e-01 -3.8938965261852099e+00 + -4.3766014825554116e+00 -2.7755641418593990e-01 -4.1185041329371943e+00 + -4.8632789573661288e+00 -4.8408703237681228e-01 -4.3261430868456463e+00 + -5.3447426979116139e+00 -7.7906237851589122e-01 -4.4999251354285565e+00 + -5.7936652450291186e+00 -1.1536307536811869e+00 -4.6193439009583228e+00 + -6.1847636535358435e+00 -1.5827885581841588e+00 -4.6634056450834684e+00 + -6.5044047688971052e+00 -2.0375531307482948e+00 -4.6222713223604162e+00 + -6.7456523629104943e+00 -2.4926338141005604e+00 -4.4998936149490643e+00 + -6.9078199961288824e+00 -2.9263580587805018e+00 -4.3130668304457771e+00 + -7.0244529217163514e+00 -3.3441691433306846e+00 -4.0933126776716122e+00 + id 13908 + loc 8.9962579309940338e-02 8.4094315767288208e-01 409 + blend 0.0000000000000000e+00 + interp 2.9836960205997637e-01:2.5866596692835830e-01:8.5702240396854679e-01:2.9836661836395578e-01:1.7184081894722376e+00:2.4004086712499523e-01:2.8116157438307350e+00:2.6468223685461495e-01:3.8964853003094424e+00 + CVs 20 + 5.6584469946060323e-01 2.7277162901126761e-01 -1.9622274084273050e-01 + 1.0213000868954891e+00 4.7464710774761093e-01 -3.6212116067085864e-01 + 1.4800239896517711e+00 6.6220029275507142e-01 -5.2033017204742327e-01 + 1.9800149602497408e+00 8.4255835029794834e-01 -6.9327744791191637e-01 + 2.5052760342221010e+00 9.8673307854988901e-01 -9.1252390489980151e-01 + 3.0246623435874471e+00 1.0616873484860367e+00 -1.2078868832985228e+00 + 3.4936497596810270e+00 1.0416326293604055e+00 -1.5845749347778189e+00 + 3.8742840229015241e+00 9.1530868882062144e-01 -2.0155833862653627e+00 + 4.1517539164204784e+00 6.8512491508707951e-01 -2.4554281974138545e+00 + 4.3240836913956802e+00 3.7071725473729034e-01 -2.8556660560116787e+00 + 4.3944508988158475e+00 1.3866534896238569e-03 -3.1738800417005835e+00 + 4.3734746062768686e+00 -4.0969649705376798e-01 -3.3816242612599132e+00 + 4.2823849751984362e+00 -8.6825713412228089e-01 -3.4832244438777225e+00 + 4.1514012082118139e+00 -1.3919356598761450e+00 -3.5278661178539443e+00 + 4.0067773526976289e+00 -1.9841796922433894e+00 -3.6021899354539735e+00 + 3.8536567422812533e+00 -2.5923964441550300e+00 -3.8047989708925845e+00 + 3.7019958117257410e+00 -3.1609546156597936e+00 -4.1653158695948562e+00 + 3.6134993025053479e+00 -3.6778598810994447e+00 -4.6155441384412850e+00 + 3.6507583838104485e+00 -4.1222036333357366e+00 -5.0354574434600625e+00 + id 13909 + loc 8.1285953521728516e-01 4.0809780359268188e-01 1078 + blend 0.0000000000000000e+00 + interp 3.7747534541216998e-01:2.7604399020787662e-01:7.4837234347664450e-01:3.5410664286745086e-01:1.1532917362051491e+00:3.2940500884714630e-01:1.9065931985234754e+00:2.7931641854957240e-01:2.3825541937981152e+00:2.6420752091973848e-01:3.0929091014797363e+00:3.7747157065871589e-01:3.9992661734395534e+00 + CVs 20 + -1.3341646733838361e-01 3.2611449692073508e-01 1.2421641365169932e-01 + -2.7366027586211195e-01 6.6385845447083591e-01 2.5336631216381295e-01 + -4.2045426579056677e-01 9.9491103772760470e-01 4.1573264529378562e-01 + -5.7549449551506604e-01 1.3006158493652009e+00 6.2844836231377044e-01 + -7.4078162941335857e-01 1.5626238282190148e+00 8.9738078222691120e-01 + -9.1367170932323483e-01 1.7607334053675991e+00 1.2210359293852349e+00 + -1.0859452698569307e+00 1.8765125078883460e+00 1.5892223376506867e+00 + -1.2440925101714100e+00 1.8972792931469489e+00 1.9838400868196664e+00 + -1.3725161049005117e+00 1.8181494159572513e+00 2.3812434976262522e+00 + -1.4593436842340624e+00 1.6424410228086948e+00 2.7546934214830672e+00 + -1.5005428682190747e+00 1.3815741055192412e+00 3.0760430364596014e+00 + -1.5037695970839589e+00 1.0568989215637341e+00 3.3201131898408183e+00 + -1.4886987260425661e+00 6.9755213219434942e-01 3.4780943211849076e+00 + -1.4697601071852002e+00 3.2455770420888852e-01 3.5724189866960501e+00 + -1.4333199158872254e+00 -6.5145113475792105e-02 3.6665712786211850e+00 + -1.3457294355685177e+00 -4.5524503212043466e-01 3.8729001724081158e+00 + -1.2085289954456744e+00 -7.2707245995252823e-01 4.2882334745076411e+00 + -1.0692895622066971e+00 -6.1911756337735158e-01 4.9393448361482006e+00 + -1.0645902993691396e+00 -6.0255661283127582e-01 5.1307783380835756e+00 + id 13910 + loc 9.6033948659896851e-01 5.7127445936203003e-01 399 + blend 0.0000000000000000e+00 + interp 4.2602164578965851e-01:4.2601738557320062e-01:3.3025616768841848e-01:2.4922022342156455e-01:1.0780743233743997e+00:3.9384415976579873e-01:1.7130715232096838e+00:2.4169334748257326e-01:2.4059582830295665e+00:2.7950561645097027e-01:3.6668257483141189e+00 + CVs 20 + -2.1901063486778838e-01 3.3222273399711588e-01 -9.3628171016521447e-02 + -4.2269802332892903e-01 6.7266451794594451e-01 -2.1033233216922592e-01 + -6.2129292485176946e-01 1.0093231445847612e+00 -3.4841200561534819e-01 + -8.1904346285404406e-01 1.3339971377468967e+00 -5.0682641236998771e-01 + -1.0180406568984988e+00 1.6427560083613759e+00 -6.8340060766509536e-01 + -1.2194675055159725e+00 1.9328007390254549e+00 -8.7500598875530977e-01 + -1.4239780997528155e+00 2.2031460949898065e+00 -1.0810039917121546e+00 + -1.6315788890458003e+00 2.4537119066857045e+00 -1.3046310748480292e+00 + -1.8413611554071903e+00 2.6841448271060537e+00 -1.5547009318927429e+00 + -2.0494414671961971e+00 2.8913415344041811e+00 -1.8452146288727294e+00 + -2.2445139613009562e+00 3.0660996465257186e+00 -2.1826713778062641e+00 + -2.4145277171932329e+00 3.1981302818549815e+00 -2.5511088086512430e+00 + -2.5620030373766496e+00 3.2848001299645286e+00 -2.9348404979968299e+00 + -2.7006953954338520e+00 3.3221033724097757e+00 -3.3398937679971130e+00 + -2.8435000527475762e+00 3.2940228534399614e+00 -3.7527919698507084e+00 + -2.9915564360354816e+00 3.1965937191338978e+00 -4.1115482873633473e+00 + -3.1366868566209378e+00 3.0519614746642096e+00 -4.3740816998726793e+00 + -3.2958944795370839e+00 2.8645108340509049e+00 -4.5612786595319399e+00 + -3.5581274152725531e+00 2.5796396279263760e+00 -4.7321878889859335e+00 + id 13911 + loc 6.8239104747772217e-01 3.3257171511650085e-01 415 + blend 0.0000000000000000e+00 + interp 5.0751912063317839e-01:5.0751404544197209e-01:3.2161870826791161e-01:2.7983045290070768e-01:9.9299921650131695e-01:3.7424727229480687e-01:1.8130596373528656e+00:3.9565855067609734e-01:2.0915088504336734e+00:2.6718391856813273e-01:2.8883856034522206e+00:3.5235739367604801e-01:3.7817184295254025e+00 + CVs 20 + -2.2765986339711336e-01 1.2746141889274831e-01 1.4284541353890456e-02 + -4.1531710568205060e-01 2.1788609165253453e-01 5.9321732987463738e-02 + -6.0597174701806711e-01 3.0904348678295723e-01 1.0418784937496572e-01 + -8.0907623308426335e-01 4.1358671207418152e-01 1.2801266739659140e-01 + -1.0241945870655460e+00 5.2865068936545923e-01 1.2686041337101472e-01 + -1.2501549464414570e+00 6.5082843134198309e-01 9.5980291375317661e-02 + -1.4812622864982681e+00 7.7583217424570661e-01 2.9834345847460364e-02 + -1.7094557768117287e+00 8.9940796227666786e-01 -7.3395226104845501e-02 + -1.9290755775587975e+00 1.0185990627575290e+00 -2.1070748969677100e-01 + -2.1335434855128828e+00 1.1318212578220468e+00 -3.7698704849977627e-01 + -2.3045351237982219e+00 1.2402226304118029e+00 -5.6568725975721434e-01 + -2.4207154204820780e+00 1.3485013988427283e+00 -7.7178697204569158e-01 + -2.4970397314251649e+00 1.4584373978264418e+00 -9.9985248915633029e-01 + -2.5931715266193307e+00 1.5589558653863342e+00 -1.2469217555231185e+00 + -2.7459781301258124e+00 1.6373256462362227e+00 -1.4913412631737002e+00 + -2.9469649056138869e+00 1.6897083967455382e+00 -1.7254384782013088e+00 + -3.1840945006887527e+00 1.7127007926037066e+00 -1.9480666291688888e+00 + -3.4468189988491025e+00 1.7044093172865464e+00 -2.1381537560982227e+00 + -3.6497555196993354e+00 1.6918884299938308e+00 -2.1866699916888459e+00 + id 13912 + loc 3.7981632351875305e-01 4.4213783740997314e-01 403 + blend 0.0000000000000000e+00 + interp 3.3105691610588883e-01:2.7692085766360225e-01:8.4771488426407249e-02:3.3105360553672780e-01:9.0068436613759362e-01:2.7796765038980675e-01:1.3280782339365411e+00:2.9961209522247945e-01:2.5621195299778838e+00:2.9723019575113341e-01:3.2394607029334250e+00 + CVs 20 + -1.2423619073435616e-01 6.1532749926083069e-02 8.6286893261865588e-02 + -2.4806485919357030e-01 1.3515415016040452e-01 1.5382313142037138e-01 + -3.7048849103775350e-01 2.0743673136536758e-01 2.1099007754154583e-01 + -4.9673133818429843e-01 2.7325521537459480e-01 2.6868311454121230e-01 + -6.2857607517769321e-01 3.3295403318159011e-01 3.2878520407049028e-01 + -7.7036623200568388e-01 3.8800091951458537e-01 3.9605865107273819e-01 + -9.2665039940673055e-01 4.4043801466956678e-01 4.8034043921744041e-01 + -1.0984891964927632e+00 4.9119881399512305e-01 5.9453112762427485e-01 + -1.2823499346893239e+00 5.3972756260564658e-01 7.4855532734649577e-01 + -1.4717315563547619e+00 5.8409719404649352e-01 9.4659621524160176e-01 + -1.6587938915257112e+00 6.2019485701135502e-01 1.1897678391509465e+00 + -1.8350638858464308e+00 6.4192256590303010e-01 1.4783872702148551e+00 + -1.9911528634540332e+00 6.4264440856573235e-01 1.8112880620355580e+00 + -2.1160455108612619e+00 6.1606717129444377e-01 2.1854312310447672e+00 + -2.1964616310852789e+00 5.5733102857523908e-01 2.5968023364155659e+00 + -2.2193619059876215e+00 4.6343136938834928e-01 3.0329632835613465e+00 + -2.1828361502964166e+00 3.3431572122951381e-01 3.4672452691927651e+00 + -2.1008534777338443e+00 1.7653456868349382e-01 3.8736756973704818e+00 + -2.0761483194873449e+00 6.7686401925453055e-02 4.2146194868757716e+00 + id 13913 + loc 5.6030166149139404e-01 3.1734147667884827e-01 380 + blend 0.0000000000000000e+00 + interp 3.8321218510962701e-01:3.1019181991711309e-01:3.5521245888458353e-01:2.7431776136321884e-01:1.0323286186240914e+00:3.8320835298777595e-01:1.9025302749699970e+00:2.8853630628770877e-01:2.8146968928657179e+00:3.0576369189766817e-01:3.7794230473150461e+00 + CVs 20 + 5.5064841401048414e-01 2.7052693767650360e-01 5.6076104288985373e-01 + 1.0030211153798612e+00 4.3247548506788913e-01 9.8512844633660290e-01 + 1.4250229234610845e+00 5.3603057377311103e-01 1.3855187224543535e+00 + 1.8519374484396891e+00 6.0091469834062561e-01 1.8126650228766628e+00 + 2.2803400041659407e+00 6.1607703730677676e-01 2.2576342433655352e+00 + 2.7050208346877320e+00 5.7014745868048311e-01 2.7071390481651645e+00 + 3.1190705367031528e+00 4.5329647261205586e-01 3.1461876805070261e+00 + 3.5093539989535678e+00 2.6105699072596056e-01 3.5616427095515113e+00 + 3.8551205854109760e+00 -2.1090145147915074e-03 3.9464954389428977e+00 + 4.1340672302021515e+00 -3.2404311675890973e-01 4.2941310824272803e+00 + 4.3300003580938480e+00 -6.8277798625199182e-01 4.5917413597211016e+00 + 4.4337853513970256e+00 -1.0499152280756032e+00 4.8271342305824181e+00 + 4.4517965377234416e+00 -1.4030394929790599e+00 5.0056172034573194e+00 + 4.4169339315561134e+00 -1.7537408097835279e+00 5.1662531411921178e+00 + 4.3730618597552926e+00 -2.1486685121436095e+00 5.3622630793819770e+00 + 4.3537705952847929e+00 -2.5925563655672161e+00 5.6159179192410527e+00 + 4.3927163944499608e+00 -3.0500751984920753e+00 5.9149403073492435e+00 + 4.5139563572527450e+00 -3.4856341432220725e+00 6.2241178551464937e+00 + 4.6074986558250188e+00 -3.7325435537694895e+00 6.4725828985453617e+00 + id 13914 + loc 3.9155805110931396e-01 7.2267127037048340e-01 396 + blend 0.0000000000000000e+00 + interp 3.8842364509839195e-01:3.6879134892356463e-01:1.8537219561002383e-01:3.2141518310270628e-01:9.6694498846572063e-01:3.5967665571020269e-01:1.5818761987846917e+00:3.8841976086194097e-01:2.2325100902452757e+00:3.3723904408916366e-01:2.9970028857352435e+00:3.3285295303315776e-01:3.7257502883649689e+00 + CVs 20 + 8.5988761059150520e-01 2.3150144856838861e-01 -2.9175830858065122e-01 + 1.4347703032685291e+00 3.0786593767052872e-01 -5.1224548186138785e-01 + 1.9251573345863600e+00 3.2736987829654363e-01 -6.9751541106136639e-01 + 2.4174430718799087e+00 3.3506694742265219e-01 -8.5788853637968199e-01 + 2.9135180950129524e+00 3.2679369159886296e-01 -9.8418776873165581e-01 + 3.4195100269308862e+00 3.0042483985268265e-01 -1.0705483009154220e+00 + 3.9432671056581361e+00 2.5482078017701948e-01 -1.1198800832132778e+00 + 4.4908802160309023e+00 1.8654552898101628e-01 -1.1427159566793161e+00 + 5.0659393561991894e+00 8.5045362647513389e-02 -1.1516860559079070e+00 + 5.6681367330207424e+00 -6.8157237007767435e-02 -1.1606617748159058e+00 + 6.2819592016096362e+00 -2.9134366590567362e-01 -1.1883261471959010e+00 + 6.8734374700086560e+00 -5.8903571351493356e-01 -1.2530488842333092e+00 + 7.4089662830865777e+00 -9.4631440310472725e-01 -1.3600668103709135e+00 + 7.8764823944862608e+00 -1.3488231658747269e+00 -1.5040094148505188e+00 + 8.2744069723602411e+00 -1.7933352126531017e+00 -1.6774786190660627e+00 + 8.5957265894544381e+00 -2.2731139408116774e+00 -1.8714090386929674e+00 + 8.8317431292464654e+00 -2.7719558627488863e+00 -2.0727763952078120e+00 + 8.9783346740486305e+00 -3.2733344138163063e+00 -2.2615949515142399e+00 + 8.9990089277599132e+00 -3.6642852850836176e+00 -2.3747583518812418e+00 + id 13915 + loc 8.2396399974822998e-01 5.9230411052703857e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9693326915070426e-01:3.7577734488267150e-01:3.1742572052225859e-02:2.6735671187347637e-01:8.4903634502020431e-01:3.1585964729783950e-01:1.2217460843586967e+00:3.5656403676720405e-01:2.0089886336953144e+00:3.9692929981801278e-01:2.7742191343550893e+00:3.7855661386078521e-01:3.4821242429200701e+00 + CVs 20 + 2.4795925518674050e-01 2.5653692551011525e-01 -3.4645786272719981e-01 + 5.0421263270713690e-01 4.9348006836633174e-01 -6.5324224679727172e-01 + 7.9648538556349446e-01 6.9433312329626906e-01 -9.1519996624082445e-01 + 1.1356596657248070e+00 8.6171742692812281e-01 -1.1248781044452461e+00 + 1.5108783136613964e+00 1.0267942422947545e+00 -1.2939717217498057e+00 + 1.8867915184236943e+00 1.2524273205823253e+00 -1.4621523790939126e+00 + 2.1878649047616499e+00 1.5768304501323489e+00 -1.6679617916239371e+00 + 2.3383053667104718e+00 1.9604302357096033e+00 -1.9242893729094446e+00 + 2.3141481200081198e+00 2.3121891484997694e+00 -2.2250438692119761e+00 + 2.1363696748315277e+00 2.4968183454302020e+00 -2.5650190019150885e+00 + 1.8870587798466734e+00 2.3619046179321734e+00 -2.8847624723044145e+00 + 1.7046012602053491e+00 1.9794841950040150e+00 -3.0542360850896748e+00 + 1.6304496556022570e+00 1.5714593487747774e+00 -3.0961857308963854e+00 + 1.6549614710618510e+00 1.2049564245580604e+00 -3.0941094921300394e+00 + 1.7775063860590685e+00 8.8824162206300794e-01 -3.0739406270318312e+00 + 1.9974191782662025e+00 6.4218309071752699e-01 -2.9900325301603736e+00 + 2.2860677265683695e+00 5.3391303540075086e-01 -2.7886939888023026e+00 + 2.5551216573185007e+00 5.9006591251703178e-01 -2.5453552366662411e+00 + 2.7211668514307195e+00 3.9179565960319968e-01 -2.5617894248488513e+00 + id 13916 + loc 7.9885059595108032e-01 3.3488109707832336e-01 402 + blend 0.0000000000000000e+00 + interp 3.9209744802663754e-01:2.7896610897193203e-01:5.5451864264326400e-01:3.4807267808729370e-01:1.0109741684401801e+00:3.0006920074967336e-01:1.8165533297172713e+00:3.9209352705215728e-01:2.1571773963603600e+00:3.4633527280739179e-01:3.0110602818045140e+00:2.5222849024118527e-01:3.7226299042956938e+00 + CVs 20 + 1.3039377264290866e-01 2.8272990002920134e-01 2.4208798055723019e-01 + 2.5636308028620025e-01 5.5700490357106891e-01 4.9457025347302652e-01 + 3.6921926192335858e-01 8.3234466804604845e-01 7.6814928431334617e-01 + 4.8496113595674617e-01 1.1153179446166765e+00 1.0675224000829775e+00 + 6.4306821831147476e-01 1.3912429044443551e+00 1.3748578295793186e+00 + 8.2996870733367434e-01 1.6189822438553847e+00 1.6002066324781308e+00 + 1.0014859773032689e+00 1.8471754581078978e+00 1.8895424066275535e+00 + 1.2583081068382662e+00 2.0046681893487972e+00 2.1766314092106107e+00 + 1.5581301503694744e+00 2.1265775247940355e+00 2.4248668776455746e+00 + 1.8609058598526764e+00 2.2028081946214035e+00 2.7020703324996691e+00 + 2.1281041536843825e+00 2.1672981673984579e+00 3.0512259097906407e+00 + 2.2750758647524845e+00 1.9504064389708862e+00 3.4758626566377644e+00 + 2.3089816081862984e+00 1.5728918516747230e+00 3.9487311640871661e+00 + 2.3404604255274237e+00 1.1104552815500450e+00 4.4459764132645327e+00 + 2.4583513159365733e+00 6.6405413944280212e-01 4.9380782532498912e+00 + 2.6557935275282527e+00 3.3364295073893535e-01 5.3806593853520122e+00 + 2.8634961246037052e+00 1.4160595999213843e-01 5.7463535757743589e+00 + 3.0686929238782028e+00 2.7562638230495651e-02 6.0672411836493936e+00 + 3.3797249242279968e+00 -1.0201581318784214e-01 6.4745057893974849e+00 + id 13917 + loc 7.2767382860183716e-01 5.4761957377195358e-02 373 + blend 0.0000000000000000e+00 + interp 5.1980634273194548e-01:2.4923517706989218e-01:4.4950901904789309e-01:3.4672763100242948e-01:1.0009272125984894e+00:5.1980114466851823e-01:1.5713492880053788e+00:3.1301190807704021e-01:2.0948910899831579e+00:2.1118814350288187e-01:3.0408479961090298e+00:2.3391590921041774e-01:3.9816143236954904e+00 + CVs 20 + 2.6264483626397861e-01 4.1878699282538379e-01 5.7536286555953109e-02 + 5.4475378193864998e-01 7.7037562909258517e-01 1.1988911634003448e-01 + 8.5906144692933062e-01 1.0097775968299745e+00 1.8207735760223731e-01 + 1.1958415388796364e+00 1.1370921859302534e+00 2.3486606311197494e-01 + 1.5351698873022108e+00 1.1961929267899993e+00 2.6827378101179650e-01 + 1.8652191329860670e+00 1.2271796396373618e+00 2.8500033581168727e-01 + 2.1959613619983207e+00 1.2475242630840049e+00 3.0805399936493127e-01 + 2.5454180658632435e+00 1.2705239455150164e+00 3.6506351085366395e-01 + 2.9043694001287941e+00 1.3098540972328743e+00 4.7154663515460710e-01 + 3.2330902380221045e+00 1.3619388180238918e+00 6.2167590197539824e-01 + 3.4956749949093360e+00 1.3946900450998185e+00 7.7526031449190613e-01 + 3.6870649616493871e+00 1.3742021488532743e+00 8.4196104921058901e-01 + 3.8338710387566071e+00 1.3298065124043370e+00 7.0800654315778089e-01 + 3.9947674952887242e+00 1.3911865697489998e+00 3.3626507604272432e-01 + 4.2085078237110594e+00 1.7080842556231095e+00 -1.5043896380436139e-01 + 4.3251503804810225e+00 2.2572195432847018e+00 -5.3008980020150598e-01 + 4.0766357446935348e+00 2.9231115426151719e+00 -7.1458223146279076e-01 + 3.5621789614517132e+00 3.3756281612933097e+00 -6.4407280223384977e-01 + 3.7553121355236150e+00 3.0525706226621434e+00 -7.0424968327287540e-01 + id 13918 + loc 6.7432963848114014e-01 9.8679316043853760e-01 400 + blend 0.0000000000000000e+00 + interp 4.0541733496418103e-01:2.6553116594623050e-01:4.5579663419613725e-03:3.7541180768794441e-01:8.5965538019773846e-01:3.5829957021882497e-01:1.7120523106103889e+00:2.9506416838187205e-01:2.0578410121321320e+00:3.8314666721243923e-01:2.8364805685236067e+00:4.0541328079083139e-01:2.9994898345956966e+00:3.5468921200328840e-01:3.5034580463362199e+00 + CVs 20 + -2.6939963434040870e-01 3.1323318748970136e-01 -2.4238564815418417e-01 + -5.1141655114309070e-01 6.1742828005837502e-01 -5.2874937938283284e-01 + -7.5231173367838311e-01 8.9817798884081013e-01 -8.5498839162794193e-01 + -1.0221619636148433e+00 1.1330855784447429e+00 -1.2031450704360005e+00 + -1.3386821756202556e+00 1.2915744324720380e+00 -1.5430529491824418e+00 + -1.6869469741761141e+00 1.3465383597079916e+00 -1.8447493935295647e+00 + -2.0215761256161673e+00 1.2907739099685553e+00 -2.0882662617011123e+00 + -2.2942775858073912e+00 1.1447951227891415e+00 -2.2634972824985264e+00 + -2.4798891847568156e+00 9.4954763071457537e-01 -2.3620977543616029e+00 + -2.5786733652228309e+00 7.5825464262474718e-01 -2.3730916575197241e+00 + -2.6475688213637443e+00 5.8325202874814441e-01 -2.3212772401876061e+00 + -2.7557576528429717e+00 3.1721793746487204e-01 -2.2805604606198706e+00 + -2.9227455211313655e+00 -1.0975949805549823e-01 -2.2819602673566655e+00 + -3.1844786348804868e+00 -6.3478249470685388e-01 -2.3111968223527755e+00 + -3.5711108693642619e+00 -1.1404574162791070e+00 -2.3453301326873333e+00 + -4.0697829176966032e+00 -1.5210355926192034e+00 -2.3664748049221425e+00 + -4.6429671074143828e+00 -1.7427261508632030e+00 -2.3935857965237934e+00 + -5.2309350292084593e+00 -1.8271642082669435e+00 -2.4805817295235393e+00 + -5.7002486154934253e+00 -1.7713212409810137e+00 -2.6824240923500331e+00 + id 13919 + loc 8.6754870414733887e-01 5.9266902506351471e-02 1068 + blend 0.0000000000000000e+00 + interp 4.2982418152768215e-01:2.7523017147906015e-01:3.1750889915727287e-01:4.0932911404031591e-01:9.9801953565371015e-01:4.2981988328586690e-01:1.8842869726688405e+00:3.5683046382648781e-01:2.3112338711008320e+00:3.0341720127449534e-01:3.0653751937400369e+00:3.0965012111798668e-01:3.8586730602340014e+00 + CVs 20 + -5.9570460700962363e-02 3.8722545583982532e-01 1.6983975928879508e-01 + -1.4941301048011199e-01 7.7384324886010181e-01 3.0553921608366008e-01 + -2.6988077722303233e-01 1.1506920859180876e+00 3.9133170330448702e-01 + -4.2000937875168959e-01 1.5001947331333465e+00 4.1876165690136885e-01 + -6.0233289202821594e-01 1.8039108667372017e+00 3.8925733366134024e-01 + -8.2068969486371857e-01 2.0571795915821647e+00 3.1204047887571812e-01 + -1.0839568741773982e+00 2.2648076812909061e+00 2.0351319873848461e-01 + -1.4032029469648946e+00 2.4255011552918830e+00 8.8238345869028567e-02 + -1.7943007179077459e+00 2.5356926441445657e+00 -1.9035921432065672e-03 + -2.2947400784233940e+00 2.5978623489266068e+00 -7.3182509330963486e-03 + -2.8869594095765692e+00 2.5411964401237985e+00 1.7170987621833489e-01 + -3.3353047464906806e+00 2.2837700077052010e+00 4.5262671460880854e-01 + -3.5755729373994241e+00 1.8959164413085343e+00 6.8320495134356130e-01 + -3.6614323315482267e+00 1.4169035684284392e+00 8.6441376176242735e-01 + -3.6171780267502998e+00 9.4449378875663081e-01 9.9217900052748553e-01 + -3.5028295872942072e+00 6.0938505428562006e-01 1.0567583171431325e+00 + -3.3759865915692329e+00 4.5068985326888777e-01 1.0765899534286825e+00 + -3.2505910793057233e+00 4.4733505638805349e-01 1.0316425710125934e+00 + -3.1491585573129468e+00 2.4600953471777881e-01 1.0192948639558586e+00 + id 13920 + loc 7.7172470092773438e-01 1.8350879848003387e-01 401 + blend 0.0000000000000000e+00 + interp 4.9771734737411494e-01:4.7329150706942874e-01:4.1345279972071736e-01:4.9771237020064124e-01:9.1015729844036009e-01:4.0664338865585098e-01:1.1166952076976511e+00:4.6115151088997863e-01:1.8413898814478886e+00:4.7486015347489430e-01:2.1306229212989507e+00:2.9409958643647766e-01:2.7779731420021836e+00:3.4149433935094509e-01:3.1390794749774393e+00:4.2472452739903188e-01:3.9291278691221576e+00 + CVs 20 + 6.6614261481272169e-02 3.3898085819279467e-01 2.3604026576396375e-01 + 1.3716248901626543e-01 6.7721773129453400e-01 4.9050901486500176e-01 + 1.9770274730907725e-01 1.0040843689562102e+00 7.8214728169120484e-01 + 2.5478940706492959e-01 1.2993852462761446e+00 1.1238979314610340e+00 + 3.2821576577131706e-01 1.5342878805458158e+00 1.5198203821642982e+00 + 4.3732591171523144e-01 1.6793095636835909e+00 1.9614137776647080e+00 + 5.9613550435993301e-01 1.7151391512942817e+00 2.4269569427197872e+00 + 8.0973668273027610e-01 1.6436713640528806e+00 2.8895209686343715e+00 + 1.0653464568644146e+00 1.4722812967234740e+00 3.3207039756677439e+00 + 1.3242593387392732e+00 1.1944961612705589e+00 3.6880526566313550e+00 + 1.5558982584390735e+00 8.2010395955571747e-01 3.9741702204107137e+00 + 1.7973952513746585e+00 3.9069767238008901e-01 4.2030120684431687e+00 + 2.1118092454288080e+00 -5.6294266549720695e-02 4.3947235957611879e+00 + 2.4945996476139163e+00 -4.9783144919820005e-01 4.5165861640685181e+00 + 2.9042053754030603e+00 -9.2314661855183822e-01 4.5410375975596136e+00 + 3.4133879663560864e+00 -1.2771844101048060e+00 4.5303321501684710e+00 + 4.2000860427829805e+00 -1.3373650549616263e+00 4.5845142643716477e+00 + 5.0428024084590870e+00 -8.9986241499430819e-01 4.6579035696732154e+00 + 5.5099888126783085e+00 -9.2799337342255417e-01 4.6484703699400240e+00 + id 13921 + loc 8.0504286289215088e-01 6.2639009952545166e-01 395 + blend 0.0000000000000000e+00 + interp 4.0478829229333296e-01:2.9660916158350775e-01:4.3258044108254190e-01:3.5895649961214110e-01:1.0022094961327148e+00:3.2160932595982478e-01:1.5620921724567554e+00:4.0478424441041005e-01:2.0471460688423915e+00:2.9648723375339830e-01:2.9405956570180463e+00:3.4071669032278795e-01:3.3767469866731199e+00 + CVs 20 + 4.0344497038296495e-01 1.8901346749046180e-01 -4.4723481365532858e-01 + 7.2671406527865390e-01 3.0461303285112273e-01 -7.9006779966982887e-01 + 1.0358199592804960e+00 3.8356646836615671e-01 -1.0938181973051060e+00 + 1.3577307216759815e+00 4.3796984698818298e-01 -1.3782886157311189e+00 + 1.6879892548592845e+00 4.6086447994639079e-01 -1.6322342938433814e+00 + 2.0203213244137657e+00 4.4871823776720987e-01 -1.8482082913069688e+00 + 2.3473582138044824e+00 4.0423601036423573e-01 -2.0239010690258303e+00 + 2.6597115557410014e+00 3.3730361000812570e-01 -2.1591007256256529e+00 + 2.9529556943504174e+00 2.6348832404040956e-01 -2.2552194821440645e+00 + 3.2327235913246328e+00 1.9117478208005378e-01 -2.3221281240645379e+00 + 3.5038415073954057e+00 1.1434459057245427e-01 -2.3776163065269551e+00 + 3.7524134525109143e+00 1.8689849164195582e-02 -2.4391145834907446e+00 + 3.9542301583797621e+00 -1.0466212747306036e-01 -2.5152329547667858e+00 + 4.0985267422082829e+00 -2.5656157319784434e-01 -2.6035768553495959e+00 + 4.1880144844658860e+00 -4.3018680835244050e-01 -2.6913602832850940e+00 + 4.2260632395439561e+00 -5.9659772241644315e-01 -2.7629625175405348e+00 + 4.2145090237421510e+00 -7.1823260660818011e-01 -2.8266698149828469e+00 + 4.1528130099912355e+00 -8.1326555372665910e-01 -2.8956751650787114e+00 + 3.9588315405138870e+00 -1.1581291647349166e+00 -2.9050291630795306e+00 + id 13922 + loc 5.9481894969940186e-01 5.1264178752899170e-01 393 + blend 0.0000000000000000e+00 + interp 4.5927632255378292e-01:4.5927172979055741e-01:3.3583411079264003e-01:2.8965241360984412e-01:8.9924284358843709e-01:3.7132942084276388e-01:1.6310315270550533e+00:4.1235667399150699e-01:2.0038825061796084e+00:4.2618908619661089e-01:2.4209486096214281e+00:2.9072157533991538e-01:2.9769638438501120e+00:3.8091127339147468e-01:3.8243775962611117e+00 + CVs 20 + -2.4181098091953429e-01 2.3301328945697614e-01 -5.3726856717414541e-02 + -5.1526132598547991e-01 4.9927452879346745e-01 -1.2457450373768363e-01 + -7.9237319684663254e-01 8.1471955297683807e-01 -2.1408404213122204e-01 + -1.0556656535958973e+00 1.1681939180729086e+00 -3.3142999464933015e-01 + -1.3137869062400322e+00 1.5280088807476999e+00 -5.0300798567792260e-01 + -1.5664544704735448e+00 1.8625004010145989e+00 -7.5308996626097047e-01 + -1.7905856391299459e+00 2.1508102948012882e+00 -1.0794075309990752e+00 + -1.9633345665966533e+00 2.3791708275136565e+00 -1.4545270579075709e+00 + -2.0852616825283921e+00 2.5440468654425543e+00 -1.8516933124274311e+00 + -2.1705584525136201e+00 2.6511733361799315e+00 -2.2613399156209910e+00 + -2.2341871551748618e+00 2.7059136371123977e+00 -2.6899838742223139e+00 + -2.2914073345482873e+00 2.7015108807372861e+00 -3.1511835332256544e+00 + -2.3529794727043600e+00 2.6114189707665072e+00 -3.6440815855249933e+00 + -2.4207244558740362e+00 2.3967750434170405e+00 -4.1344865858491779e+00 + -2.4989922329481300e+00 2.0288818539989752e+00 -4.5488961680212814e+00 + -2.6149680038939485e+00 1.5131830062908742e+00 -4.7950145624362852e+00 + -2.8223072919693157e+00 9.1197143609087927e-01 -4.8027919663149916e+00 + -3.1449523099427816e+00 3.2569707401659564e-01 -4.5732539133762611e+00 + -3.4511051012296190e+00 -2.8382210980391487e-01 -4.3462644447559891e+00 + id 13923 + loc 8.2256287336349487e-01 8.0336362123489380e-01 412 + blend 0.0000000000000000e+00 + interp 4.3849319260553021e-01:4.3098086119398199e-01:3.0921584653933143e-01:2.8608803681871531e-01:1.0002396225075569e+00:3.7998679866638535e-01:1.8231149840415131e+00:2.9368690335274922e-01:2.2865809618968127e+00:4.3848880767360415e-01:3.0094964039360144e+00:4.0378347890705973e-01:3.6463565527663562e+00 + CVs 20 + 7.8123802944035992e-01 1.3104594285908411e-01 -2.2032555117284813e-01 + 1.2654340174632330e+00 1.5012744076222667e-01 -4.0584829979841675e-01 + 1.6709852038284900e+00 1.2830440269085014e-01 -5.7984631232166794e-01 + 2.0921179172590749e+00 9.8931613168151689e-02 -7.4844684648840920e-01 + 2.5286135147760844e+00 5.7685106465753200e-02 -9.0854567249646367e-01 + 2.9807623467602693e+00 -7.9521411789906793e-05 -1.0574945827623190e+00 + 3.4481922017815414e+00 -7.8283578109432095e-02 -1.1917636366818616e+00 + 3.9280725686503746e+00 -1.8051652687204378e-01 -1.3082201268342843e+00 + 4.4137964107162375e+00 -3.0980696016548492e-01 -1.4057371096686266e+00 + 4.8949843215534798e+00 -4.6619832744880352e-01 -1.4843980248510125e+00 + 5.3586759953667018e+00 -6.4760287421854978e-01 -1.5466489205873184e+00 + 5.7940909409367682e+00 -8.6297736639343703e-01 -1.6067234577618030e+00 + 6.1953991979834591e+00 -1.1368933435731370e+00 -1.6939987865463295e+00 + 6.5595330804522973e+00 -1.4859135790022167e+00 -1.8337073816986960e+00 + 6.8825041630764305e+00 -1.9074724472656173e+00 -2.0356410592265388e+00 + 7.1467657783917797e+00 -2.3792032519644084e+00 -2.3030560825725308e+00 + 7.3320437281360169e+00 -2.8636220548926126e+00 -2.6363391644221577e+00 + 7.4390868447376395e+00 -3.3258662330119675e+00 -3.0201515973735487e+00 + 7.6036582189203576e+00 -3.7742600586435193e+00 -3.3651201473547068e+00 + id 13924 + loc 2.6134833693504333e-01 8.3749747276306152e-01 1078 + blend 0.0000000000000000e+00 + interp 4.1003791194781114e-01:2.6329630874780063e-01:1.5389493414397215e-04:4.1003381156869168e-01:9.4639627822953132e-01:2.8027318078658942e-01:1.2893371621533736e+00:2.6270194372498901e-01:2.0191700597733320e+00:3.3718527644624807e-01:2.9925000662293679e+00 + CVs 20 + -6.4729356387328157e-02 1.6214109958147954e-01 7.3146365134096891e-02 + -9.9297412949306801e-02 3.3396821641995417e-01 1.3733726674945393e-01 + -1.2181111752623816e-01 5.0528929707640879e-01 1.9769515633057039e-01 + -1.4750666401724319e-01 6.9044664806260037e-01 2.5470786405120760e-01 + -1.7692651383587762e-01 8.8797117778010848e-01 3.0222731651428819e-01 + -2.1180885598153493e-01 1.0934006150003737e+00 3.3577968514240297e-01 + -2.5569810070523546e-01 1.2975110365958860e+00 3.5337787053534642e-01 + -3.1168719051449201e-01 1.4891063783718603e+00 3.5809264814243946e-01 + -3.8374717308965850e-01 1.6653803034097159e+00 3.5365657199468781e-01 + -4.8062080597387558e-01 1.8324496449204144e+00 3.3794795511441356e-01 + -6.1393286749434428e-01 1.9936543373769355e+00 3.0485323058436686e-01 + -7.9223247707863498e-01 2.1419674616850921e+00 2.4949789472728845e-01 + -1.0115512480218525e+00 2.2629725297606047e+00 1.7419827248808861e-01 + -1.2507171917303643e+00 2.3449291747915399e+00 9.3311866658672082e-02 + -1.4861619356182634e+00 2.3889796547268718e+00 2.4922691758535009e-02 + -1.7159308295778195e+00 2.4072970891784218e+00 -2.9150802698316935e-02 + -1.9549870256368294e+00 2.4069131016834695e+00 -7.8437810985475087e-02 + -2.2181886932078960e+00 2.3813365901369332e+00 -1.2893231995425869e-01 + -2.4447325002469671e+00 2.3423337358335408e+00 -1.3775263159214779e-01 + id 13925 + loc 2.0525176078081131e-03 7.8838855028152466e-02 378 + blend 0.0000000000000000e+00 + interp 4.9458114057195351e-01:3.6247682294550965e-01:1.1143288413393282e-01:4.7333450294394663e-01:5.5558238403711191e-01:4.2886663567128791e-01:1.0000252341612739e+00:3.0330094155130810e-01:1.7527803609371047e+00:4.7345391898149147e-01:2.3239896024897186e+00:4.9457619476054782e-01:2.8675234660006277e+00:3.2451011257355167e-01:3.1766392621880932e+00 + CVs 20 + 4.3022051529301097e-01 2.3856534147669209e-01 -4.0817208498592217e-01 + 7.6669898046262674e-01 4.3934889613825723e-01 -8.1421989947103235e-01 + 1.0775152782976669e+00 6.3029791351700459e-01 -1.2167374146919336e+00 + 1.3927081005244357e+00 8.2750482828458449e-01 -1.6120645066446460e+00 + 1.7181385293479416e+00 1.0209348502096887e+00 -1.9868058943967002e+00 + 2.0552437613392103e+00 1.1900737461006221e+00 -2.3356079141920461e+00 + 2.4067332312311112e+00 1.3173393125019137e+00 -2.6585973893124502e+00 + 2.7727775869248896e+00 1.3898589991316714e+00 -2.9540005005042218e+00 + 3.1423417853747506e+00 1.3979308151122909e+00 -3.2190435113101161e+00 + 3.4937515970658430e+00 1.3367023437337278e+00 -3.4515784844257666e+00 + 3.8041807315140899e+00 1.2082918064633947e+00 -3.6483594041300327e+00 + 4.0538505684388078e+00 1.0268924433313571e+00 -3.8049326238663856e+00 + 4.2375060488581404e+00 8.2055414360633305e-01 -3.9246350086236257e+00 + 4.3734348044359370e+00 6.0505366370300750e-01 -4.0220981445390187e+00 + 4.4709626847445652e+00 3.7300011899363117e-01 -4.0994832301862729e+00 + 4.5257632402672154e+00 1.3312882210638799e-01 -4.1421997110295763e+00 + 4.5454654124460223e+00 -8.8915128566996238e-02 -4.1244834578092133e+00 + 4.5594550267978784e+00 -2.9167348529347548e-01 -4.0562366932622984e+00 + 4.5710284404699211e+00 -4.7909856972120490e-01 -4.1444183861983870e+00 + id 13926 + loc 3.7055066227912903e-01 5.5539160966873169e-01 382 + blend 0.0000000000000000e+00 + interp 3.7246912726513831e-01:2.7453350256337172e-01:7.8264410290758613e-01:3.5130132102644235e-01:1.2636565920065068e+00:3.0407733306975399e-01:1.9994260751856885e+00:3.7246540257386568e-01:2.7753711724329673e+00:3.0137764721899629e-01:3.4143017581792225e+00 + CVs 20 + 7.7837018441502748e-01 2.2707722611035344e-01 -5.0537178972290164e-01 + 1.2826039012107555e+00 3.2403554012107461e-01 -8.9311923855464170e-01 + 1.7051711039322666e+00 3.5383389403527110e-01 -1.2661430525759347e+00 + 2.1511534424190395e+00 3.5096046406726356e-01 -1.6727722488218184e+00 + 2.6225042977001811e+00 3.0792637117908150e-01 -2.1038619239802201e+00 + 3.1138247454496839e+00 2.1704065784854376e-01 -2.5517504876957564e+00 + 3.6076156295010979e+00 7.0579559071137998e-02 -3.0156505567622851e+00 + 4.0748560323696719e+00 -1.3796101593605203e-01 -3.4905430970113591e+00 + 4.4838100505869756e+00 -4.1069450122663698e-01 -3.9571646934198594e+00 + 4.8062784350414427e+00 -7.3908994048470755e-01 -4.3884530349992650e+00 + 5.0232257616863363e+00 -1.0987983441120801e+00 -4.7601758122964419e+00 + 5.1355144528438954e+00 -1.4573809248331622e+00 -5.0577660180051387e+00 + 5.1648063271890594e+00 -1.7863165272392179e+00 -5.2784544194991359e+00 + 5.1431571054327785e+00 -2.0659930401896078e+00 -5.4276687827338588e+00 + 5.1040655728726865e+00 -2.2875876038499934e+00 -5.5159079123129686e+00 + 5.0759776481797720e+00 -2.4511034107482392e+00 -5.5616413560384181e+00 + 5.0758936770161025e+00 -2.5617859220566421e+00 -5.5930739980138533e+00 + 5.1006185348839406e+00 -2.6373478462203948e+00 -5.6357294454483773e+00 + 4.9984500053091416e+00 -2.8365167540188412e+00 -5.6046568832678361e+00 + id 13927 + loc 7.9983517527580261e-02 3.4454014897346497e-01 396 + blend 0.0000000000000000e+00 + interp 4.1170934535354597e-01:3.5835315243477889e-01:6.3997776412097052e-01:3.6857301979956814e-01:1.5519310976784579e+00:3.8617403016810781e-01:1.9999650099593405e+00:4.1170522826009248e-01:2.3111000721703396e+00:3.3859266476314287e-01:3.0272059380103973e+00:3.0787333815462803e-01:3.9966484550482781e+00 + CVs 20 + -2.1036598670989387e-01 2.1273489838521609e-01 -6.7419691105854740e-01 + -3.3497865996354248e-01 2.8283814583155931e-01 -1.1780333098532931e+00 + -4.0882178397843183e-01 2.9653956738935894e-01 -1.6415774823208953e+00 + -4.4326731092839128e-01 2.9048411862348422e-01 -2.1135677604606480e+00 + -4.4588004613817123e-01 2.6488608252287282e-01 -2.5880351792613476e+00 + -4.2871811032252322e-01 2.2078272165568824e-01 -3.0646787254156136e+00 + -4.0358136217304164e-01 1.6025400004095403e-01 -3.5429421908111727e+00 + -3.7467098928347292e-01 8.4281605522150915e-02 -4.0214038175391922e+00 + -3.4731974557629097e-01 -1.6078855420419425e-02 -4.5040720927273803e+00 + -3.3802480061307671e-01 -1.6275995364350226e-01 -4.9934378698480346e+00 + -3.6439467481439081e-01 -3.7522187390587658e-01 -5.4698379705681202e+00 + -4.3543115574248137e-01 -6.5471479569002633e-01 -5.8944246389593742e+00 + -5.4670504019302302e-01 -9.8864880728418214e-01 -6.2413919775543247e+00 + -6.9071712989985756e-01 -1.3690353476648052e+00 -6.5099956372710093e+00 + -8.6521859942326595e-01 -1.7834286945500248e+00 -6.7071595662376744e+00 + -1.0661290232867737e+00 -2.2063962048482044e+00 -6.8362141497472475e+00 + -1.2835615421493332e+00 -2.6173936968626386e+00 -6.9040691366799392e+00 + -1.5084072989365784e+00 -3.0196252429766153e+00 -6.9240663293631259e+00 + -1.7421913585944111e+00 -3.4315436290288321e+00 -6.9209425496769299e+00 + id 13928 + loc 2.3267820943146944e-03 1.6487905383110046e-01 407 + blend 0.0000000000000000e+00 + interp 1.1698390469078355e+00:2.7476645457620980e-01:1.8511166720580619e-05:5.0977804735403538e-02:1.0989255033315342e+00:4.3570325749585193e-01:1.5295592029559053e+00:8.4533486504471078e-01:1.8769548878579840e+00:1.1698290469078354e+00:3.9883660768691795e+00:7.0532238053688812e-01:3.9960152584937378e+00 + CVs 20 + 1.2341029165271708e-01 3.5577564387531579e-01 -4.7119765048995210e-01 + 2.3480679362852894e-01 5.7219030553196082e-01 -6.9436023242863576e-01 + 3.5249052627126876e-01 7.0926361866306198e-01 -8.5052944703074318e-01 + 4.8908060151296873e-01 8.1375813941528385e-01 -1.0020300507914630e+00 + 6.4354488588846614e-01 8.8334676250445088e-01 -1.1410167732401526e+00 + 8.1372382373251140e-01 9.1912148831341223e-01 -1.2639570867002035e+00 + 9.9862654962555097e-01 9.2665678426434095e-01 -1.3728097406734778e+00 + 1.2008389456112203e+00 9.1388147128415786e-01 -1.4736620295186000e+00 + 1.4260066143203280e+00 8.8787188560205244e-01 -1.5733977608105891e+00 + 1.6794523576108009e+00 8.5313020255007666e-01 -1.6771654298808381e+00 + 1.9640133505868107e+00 8.1122809067472090e-01 -1.7870835769830515e+00 + 2.2801533367117770e+00 7.6181064444818203e-01 -1.9030159559244979e+00 + 2.6261988449183158e+00 7.0880383820242221e-01 -2.0266071484424781e+00 + 2.9949591086000074e+00 6.6817952023377647e-01 -2.1634444806002593e+00 + 3.3698843219997365e+00 6.6138503837459905e-01 -2.3180408821645582e+00 + 3.7306944522228735e+00 6.9740233345815184e-01 -2.4887739959459632e+00 + 4.0625408675193757e+00 7.7124828220148967e-01 -2.6686670954422995e+00 + 4.3603093602473209e+00 8.7434796353212851e-01 -2.8434052676265673e+00 + 4.6790114188540119e+00 9.3218150007335643e-01 -3.0002889196108780e+00 + id 13929 + loc 8.8225483894348145e-02 9.7426509857177734e-01 402 + blend 0.0000000000000000e+00 + interp 4.4068912694671053e-01:3.8383809184113948e-01:7.5883086952610179e-01:2.3027512367684633e-01:1.5366571516617200e+00:4.4068472005544107e-01:2.1848415955983711e+00:4.2121527649189350e-01:2.9224106725034393e+00:2.8258792197259891e-01:3.0391011578577425e+00:3.7843200823218642e-01:3.9442862055121934e+00 + CVs 20 + -9.0755236847383638e-02 1.0886600012753372e-01 -2.0988801286822088e-02 + -1.7156464918633674e-01 2.5998702206292634e-01 -7.6309127106622410e-02 + -2.5051510558339196e-01 4.2908934124197717e-01 -1.4490813720806570e-01 + -3.3362351036666560e-01 6.0737003186398197e-01 -2.1955958704227979e-01 + -4.1929150209440302e-01 7.8811740155886822e-01 -2.9487594546113999e-01 + -5.0867373865606291e-01 9.5792238699456500e-01 -3.5812753714091494e-01 + -6.0483223511378537e-01 1.1008031363588884e+00 -3.9428145587628494e-01 + -7.0848905051454514e-01 1.2075142021615757e+00 -3.9514780688950030e-01 + -8.1612075441208964e-01 1.2785872742634548e+00 -3.6153239898094203e-01 + -9.2494395266333707e-01 1.3232164337895584e+00 -3.0097078834462410e-01 + -1.0356476288242598e+00 1.3510452969335489e+00 -2.2197099844725862e-01 + -1.1530346988527569e+00 1.3687767082037730e+00 -1.3266227660698776e-01 + -1.2711756809580592e+00 1.3753257088017279e+00 -3.4268751353002808e-02 + -1.3662917865739390e+00 1.3675353748329047e+00 7.7310396179080726e-02 + -1.4004335174948055e+00 1.3481235861734375e+00 2.0454364438499462e-01 + -1.3618088317106321e+00 1.3283930486056577e+00 3.3334698986323208e-01 + -1.2810355122969950e+00 1.3217516780410765e+00 4.4407471065138582e-01 + -1.2230849277412617e+00 1.3339711345175516e+00 5.3475870048114815e-01 + -1.4123302061041123e+00 1.3221990585897232e+00 6.5497001142711575e-01 + id 13930 + loc 2.9741123318672180e-01 2.2530533373355865e-01 374 + blend 0.0000000000000000e+00 + interp 3.1449082518440374e-01:3.1448768027615193e-01:3.1976343377026928e-02:2.7488153194971371e-01:1.0101209396895097e+00:2.3931161391944991e-01:1.9373042381084340e+00:2.6501755093957263e-01:2.8971691408696163e+00:2.5123748819675490e-01:3.4878377630630069e+00 + CVs 20 + -3.3387099422736555e-01 5.0724831178905938e-01 7.2531482503569988e-01 + -4.4575439376163639e-01 8.0802970314950140e-01 1.3483456644969958e+00 + -3.9375852192387384e-01 9.2993646810708130e-01 1.9363799678252211e+00 + -2.5441407696974661e-01 9.6018116791905306e-01 2.5102395409767722e+00 + -9.3430992815344505e-02 9.6864347316221167e-01 3.0883524985157003e+00 + 2.6981387508636212e-02 9.8309624463202561e-01 3.6981668062616748e+00 + 5.1563879881438845e-02 1.0018526587444154e+00 4.3378131503962232e+00 + -5.3158153389768037e-02 1.0178942224432268e+00 4.9730044664311279e+00 + -2.9100366985666692e-01 1.0265230031812440e+00 5.5497541528035637e+00 + -6.3506068099566582e-01 1.0163005891901427e+00 6.0156524985627220e+00 + -1.0508435290609879e+00 9.9203914805364524e-01 6.3521109745250293e+00 + -1.5120458199855675e+00 9.8066568295836554e-01 6.5779523067484593e+00 + -2.0036679474356758e+00 9.8845719734172754e-01 6.7297014774318082e+00 + -2.5135611193998013e+00 9.9321598000657474e-01 6.8424379567190847e+00 + -3.0441932909665663e+00 1.0005191078726612e+00 6.9220278837331817e+00 + -3.6758718451922792e+00 9.9139308972428086e-01 6.8591633602623050e+00 + -4.4655671453414607e+00 8.2473266340373197e-01 6.5242198456503262e+00 + -5.1385273820037298e+00 2.5429227547505784e-01 6.1322891545568536e+00 + -5.1775647105915379e+00 -3.5088256809107632e-01 6.1775330143877687e+00 + id 13931 + loc 2.2817274928092957e-01 6.4158505201339722e-01 399 + blend 0.0000000000000000e+00 + interp 4.2362204420070670e-01:2.6992012351277123e-01:7.0285622896203792e-01:4.0603408247948758e-01:1.4666727515185158e+00:4.0909822257784767e-01:1.9850320883772166e+00:3.2535257236607529e-01:2.5594980588585536e+00:4.2361780798026472e-01:3.2963101609777210e+00:2.6942634978853375e-01:3.9329941456595812e+00 + CVs 20 + -2.2527582104148652e-01 3.1606938677279917e-01 -2.2946125499622230e-01 + -4.3676413274335218e-01 6.4673739451940171e-01 -4.4430776789439963e-01 + -6.3624619836560525e-01 9.9144059642604143e-01 -6.8077257757154985e-01 + -8.2349229350188369e-01 1.3458029670193787e+00 -9.5651690670536671e-01 + -1.0039133145328953e+00 1.7070095342098954e+00 -1.2751831060938625e+00 + -1.2000471276545435e+00 2.0710338965114623e+00 -1.6364262000831455e+00 + -1.4632732460952531e+00 2.4278595263298830e+00 -2.0378129240237106e+00 + -1.8660335283826264e+00 2.7306502375761998e+00 -2.4672440666988797e+00 + -2.4435872010002226e+00 2.8657574395221368e+00 -2.8700833762919791e+00 + -3.1124343634615217e+00 2.7420481792756424e+00 -3.1621237550628711e+00 + -3.7401802766197383e+00 2.3868049568871013e+00 -3.3120177311457262e+00 + -4.2435872076468044e+00 1.9016693223950649e+00 -3.3558470220611660e+00 + -4.6203036952560517e+00 1.3957578886032249e+00 -3.3595451245550891e+00 + -4.9225767392016690e+00 9.5470112478471969e-01 -3.3676020531796249e+00 + -5.2060344855413980e+00 6.3789664697456261e-01 -3.3881354545981086e+00 + -5.4866359581528297e+00 4.7821527307881689e-01 -3.4170665381192862e+00 + -5.7069231604887607e+00 5.0375055648118283e-01 -3.4322528013817779e+00 + -5.8927624240700789e+00 6.3686738956897970e-01 -3.4489559711847395e+00 + -6.3285291006511946e+00 7.8189234945057207e-01 -3.6018052242419403e+00 + id 13932 + loc 1.9558047875761986e-02 5.1012450456619263e-01 400 + blend 0.0000000000000000e+00 + interp 4.9853605672697809e-01:4.2359283815250254e-01:9.2153448143397776e-01:2.7950561645097027e-01:1.6711164316869218e+00:4.1456706760412071e-01:1.9998303057505629e+00:4.8779744791000446e-01:2.6122656173073264e+00:4.9853107136641084e-01:2.9781581517109457e+00:3.6432058163154057e-01:3.1793483935494273e+00:3.5303018514148782e-01:3.9273760335287036e+00 + CVs 20 + -2.6724989937657728e-01 2.7133747386225504e-01 -4.9002143612451338e-02 + -5.2342990695817426e-01 5.4182489792617317e-01 -1.5255355521243399e-01 + -7.7332739118079652e-01 7.9354480358678725e-01 -3.1117845673988553e-01 + -1.0152473702872522e+00 1.0104452840144789e+00 -5.2089976839612939e-01 + -1.2441664429233250e+00 1.1793875478333700e+00 -7.7126589939012191e-01 + -1.4566404903948507e+00 1.2910730800256818e+00 -1.0456390874754748e+00 + -1.6507469681401266e+00 1.3422645931513206e+00 -1.3257930359437617e+00 + -1.8258993655818891e+00 1.3356137268600579e+00 -1.5938850529320712e+00 + -1.9833353852132944e+00 1.2787413022381817e+00 -1.8338916499375468e+00 + -2.1263336667476991e+00 1.1830108302539653e+00 -2.0347717548072271e+00 + -2.2554207549630130e+00 1.0599241995514990e+00 -2.1976618927790854e+00 + -2.3616385077433533e+00 9.1604618897356271e-01 -2.3300354988524239e+00 + -2.4327021146529870e+00 7.6428516050286688e-01 -2.4134985914224965e+00 + -2.4645782828319751e+00 6.5192537719429000e-01 -2.4024541626038660e+00 + -2.4555692561234808e+00 6.2657744193240328e-01 -2.3009330732024234e+00 + -2.4207699553775073e+00 6.4388142529372594e-01 -2.2005727228519105e+00 + -2.3957389864384004e+00 6.1349941056282387e-01 -2.1625113241810507e+00 + -2.4364401111622223e+00 5.1191431927835418e-01 -2.1779227828506973e+00 + -2.7134490985548112e+00 3.1113957010313709e-01 -2.2278120649930853e+00 + id 13933 + loc 4.0864485502243042e-01 4.8233294486999512e-01 379 + blend 0.0000000000000000e+00 + interp 3.4736157284196378e-01:3.4735809922623540e-01:4.8655993380435636e-01:3.1446516025408555e-01:1.1702452798614336e+00:2.6529675105850975e-01:1.8382569191905027e+00:2.9636965631391177e-01:2.1384857492124718e+00:3.2944923340900867e-01:3.1370851176254093e+00:2.4843038677172591e-01:3.9998357847808759e+00 + CVs 20 + -8.1617252975128285e-03 2.3879870309306855e-01 3.2907882647858694e-01 + 4.0943015097251734e-03 4.7277584803985839e-01 6.4886646988564889e-01 + 5.5403964926992733e-02 6.7074200588736121e-01 9.7378200590029240e-01 + 1.5706882909452188e-01 8.0343835301643884e-01 1.2995028453900235e+00 + 2.8429798732996497e-01 8.8171985422975629e-01 1.5773591667506783e+00 + 4.1370145047529738e-01 9.3324181033836473e-01 1.7716304390754982e+00 + 5.5644461185082505e-01 9.8421559551302340e-01 1.9122316260749310e+00 + 7.2204700881433925e-01 1.0667416266021008e+00 2.0657144979136710e+00 + 8.9225393009183085e-01 1.2121269321845460e+00 2.2591207240960829e+00 + 1.0463896900629808e+00 1.4326778250769312e+00 2.4880105929334899e+00 + 1.1718976820277365e+00 1.7166158294301850e+00 2.7501151053237458e+00 + 1.2679721363183296e+00 2.0364656210249290e+00 3.0301929331147166e+00 + 1.3403428560279202e+00 2.3586484630925515e+00 3.3186739058941059e+00 + 1.3725211171318192e+00 2.6380041035644997e+00 3.6444107711944072e+00 + 1.3146658222182626e+00 2.8129200176777909e+00 4.0243810824656974e+00 + 1.1106090202937120e+00 2.8222753356151200e+00 4.4056969260994787e+00 + 8.0156633797384869e-01 2.6460021359385602e+00 4.7122916048646282e+00 + 5.8740645307170813e-01 2.2935686666134152e+00 4.9422378294618809e+00 + 6.6509262153250837e-01 1.8452709718576334e+00 5.1435125906642725e+00 + id 13934 + loc 5.3085374832153320e-01 4.4914874434471130e-01 373 + blend 0.0000000000000000e+00 + interp 4.4453419167409913e-01:3.0069131373720021e-01:1.5380690826285959e-01:4.4452974633218240e-01:9.7843368440278933e-01:3.8802948482012067e-01:1.1962266647426414e+00:2.6892273296011066e-01:1.7727985259225356e+00:3.8499301068920666e-01:2.0550341025719767e+00:3.1969430596904763e-01:2.6713340145090392e+00:2.8814006997357755e-01:3.5324303001120647e+00 + CVs 20 + 3.2016658073424425e-01 4.8349906468328929e-01 1.0697651141279374e-01 + 5.9880356515998223e-01 8.8122984053020992e-01 2.4756471296694296e-01 + 8.4419235107848034e-01 1.1967576329545355e+00 4.1127856628571297e-01 + 1.0505938226351583e+00 1.4463302855691575e+00 5.8793840003541886e-01 + 1.1962490270418864e+00 1.6388465387898730e+00 7.5883792583065635e-01 + 1.2732247556106993e+00 1.7662662934703524e+00 8.8008972684852171e-01 + 1.2995492753098299e+00 1.8448102800051067e+00 9.3853075224175031e-01 + 1.3209733922777178e+00 1.9009033958449315e+00 9.8456796024330218e-01 + 1.3697638399897303e+00 1.9355281875273165e+00 1.0511184183224938e+00 + 1.4519476205996804e+00 1.9510602738010148e+00 1.1293592335428029e+00 + 1.5509674953019137e+00 1.9846785233578574e+00 1.1801791290535015e+00 + 1.6455797556075764e+00 2.1088100094375308e+00 1.1761824234437879e+00 + 1.7078664215691706e+00 2.3017272280279917e+00 1.1917469118018675e+00 + 1.6769283144937726e+00 2.3635264135488976e+00 1.3026919251244589e+00 + 1.5603661679515668e+00 2.1710284534931916e+00 1.4921385931906956e+00 + 1.4454150763380682e+00 1.7872629840568734e+00 1.7647011946002735e+00 + 1.4052039133821155e+00 1.3233170132113137e+00 2.1452594356008130e+00 + 1.5224338867347065e+00 9.1714298934047533e-01 2.5775137929912146e+00 + 1.8416345751286007e+00 9.0851301793535932e-01 2.7611454475147790e+00 + id 13935 + loc 6.1309987306594849e-01 5.7806074619293213e-01 403 + blend 0.0000000000000000e+00 + interp 4.5171424107373725e-01:3.2777753350536332e-01:1.6812809929512440e-01:3.1079356036630523e-01:9.6188201626282932e-01:2.6829376616371819e-01:1.6604178203571873e+00:2.7656254608531888e-01:2.2369203793790291e+00:4.5170972393132652e-01:2.9655277816745187e+00:2.8164903984547507e-01:3.5860211509259727e+00 + CVs 20 + -1.0608663964884595e-01 1.0879065710068342e-01 4.3749910744129965e-03 + -2.0621730316016898e-01 2.1923123309189793e-01 5.4022710968434688e-02 + -3.0064545360922146e-01 3.5231313904868400e-01 1.2778210382275748e-01 + -3.8632517741550615e-01 5.0071381273640680e-01 2.1317197684504025e-01 + -4.6136312352502556e-01 6.6218215851364659e-01 3.0701041930104567e-01 + -5.2414339606893301e-01 8.3287955772495503e-01 4.0563057622317639e-01 + -5.7581815615020393e-01 1.0101245976277067e+00 5.0451229412604526e-01 + -6.2156334125042179e-01 1.1921964390940785e+00 5.9855943229619335e-01 + -6.6632127044958456e-01 1.3769148694168831e+00 6.8386062023203809e-01 + -7.1234356443892177e-01 1.5640583841523541e+00 7.5763971801926122e-01 + -7.6134454961711362e-01 1.7537710577720975e+00 8.1817019340767927e-01 + -8.1567503893548987e-01 1.9431237963289902e+00 8.6613350764578445e-01 + -8.7501875007097440e-01 2.1277576828606932e+00 9.0497470448963468e-01 + -9.3190788758091503e-01 2.3048918790360826e+00 9.3953317370511757e-01 + -9.7297828772122585e-01 2.4716735347963592e+00 9.7151197883776630e-01 + -9.9393183734378099e-01 2.6271986819953548e+00 9.9799901476533037e-01 + -1.0148428848012321e+00 2.7714452961848548e+00 1.0227244607502171e+00 + -1.0576038054160506e+00 2.8962370976415812e+00 1.0581430099966331e+00 + -1.2304638922078901e+00 2.9053896128615144e+00 1.2121418324399083e+00 + id 13936 + loc 4.9203544855117798e-01 4.9098249524831772e-02 1068 + blend 0.0000000000000000e+00 + interp 5.5866187412467849e-01:5.5865628750593732e-01:3.0146132005974458e-01:4.5177708020425267e-01:9.9379833967492748e-01:2.6872372285747415e-01:1.3988100874154330e+00:2.4172992489459427e-01:2.3837402892652384e+00:2.7876932718530406e-01:3.3092962805795381e+00:5.1986214668827135e-01:3.9150412533487935e+00 + CVs 20 + -2.4212613865141377e-01 2.3870940212137773e-01 -2.3296788666274337e-01 + -4.5549727513291971e-01 4.6406361940749813e-01 -4.7367956706974684e-01 + -6.5679702585344035e-01 6.6686044203728922e-01 -7.4621593637009875e-01 + -8.5956350866192976e-01 8.4643305614573394e-01 -1.0556167596992161e+00 + -1.0780440527007278e+00 1.0097895654510891e+00 -1.3917409931031037e+00 + -1.3312357047275643e+00 1.1625655792339691e+00 -1.7361161209591689e+00 + -1.6329986622246062e+00 1.2997449294633263e+00 -2.0608953814264090e+00 + -1.9785243041588265e+00 1.4031792635635081e+00 -2.3397058711522090e+00 + -2.3483572826364671e+00 1.4500272128959004e+00 -2.5610084820191235e+00 + -2.7278321782691219e+00 1.4215079417926084e+00 -2.7260034579877854e+00 + -3.1092247623930511e+00 1.3066832268197111e+00 -2.8385695917232083e+00 + -3.4820086262645460e+00 1.1118378340810107e+00 -2.9068251141277028e+00 + -3.8388203500939073e+00 8.6234646356289346e-01 -2.9490498945612647e+00 + -4.1798067838367645e+00 5.9197230540907653e-01 -2.9931980932461677e+00 + -4.4947694935787910e+00 3.4668839027667242e-01 -3.0783589713656729e+00 + -4.7164396449942076e+00 2.1566745388190856e-01 -3.2534943345462595e+00 + -4.7326238248884618e+00 3.1404057308846745e-01 -3.5031322117562480e+00 + -4.6411878902748986e+00 5.3719927431553993e-01 -3.7414716041600049e+00 + -4.9174854548601994e+00 3.8983495631209586e-01 -4.2444299189399244e+00 + id 13937 + loc 7.2317683696746826e-01 1.3297057151794434e-01 412 + blend 0.0000000000000000e+00 + interp 4.7035008562883512e-01:2.5063427245507996e-01:3.3842085048679482e-01:3.1858683710460961e-01:1.3510963418831212e+00:4.7034538212797888e-01:1.8880929749775746e+00:4.0220484955116359e-01:2.6400180833649065e+00:2.7240880136119794e-01:3.0049375402501246e+00:4.6415531889966544e-01:3.4396935545159515e+00 + CVs 20 + -5.3019827940665998e-01 1.5692424609795558e-01 2.3906319145224847e-01 + -9.4335164747414257e-01 2.3363348719207327e-01 4.7182133163371209e-01 + -1.3225867441679426e+00 2.7037380356447799e-01 7.1333513946734906e-01 + -1.7138350174527515e+00 2.8366401437809091e-01 9.7856925673427142e-01 + -2.1102890641490766e+00 2.7320581874056127e-01 1.2611268277728711e+00 + -2.5086417820435969e+00 2.4059804486259662e-01 1.5511224406271482e+00 + -2.9104345027766958e+00 1.8840790922268158e-01 1.8356857702830196e+00 + -3.3196973495115851e+00 1.1796693300152361e-01 2.1013980292484020e+00 + -3.7414828191297924e+00 2.9442171097568304e-02 2.3354403775374943e+00 + -4.1785293616461985e+00 -7.5399021680656597e-02 2.5252264263894166e+00 + -4.6213684170415332e+00 -1.9722044270331329e-01 2.6647415405665527e+00 + -5.0319989312634998e+00 -3.5191445652212283e-01 2.7768006920560091e+00 + -5.3521631055700540e+00 -5.6084171761881851e-01 2.9179829054806619e+00 + -5.5632729905849274e+00 -8.1186679710209209e-01 3.1175209477718777e+00 + -5.6969686551111636e+00 -1.0768305275282417e+00 3.3583733331241121e+00 + -5.7679868668642049e+00 -1.3383565159840316e+00 3.6287343072077389e+00 + -5.7657959211997829e+00 -1.5730394597037873e+00 3.9249505891393692e+00 + -5.6964769399491075e+00 -1.7609788289210366e+00 4.2315059658340823e+00 + -5.8351865485277949e+00 -2.0086561432783050e+00 4.4760981340528438e+00 + id 13938 + loc 1.2113720178604126e-01 5.0861418247222900e-01 1078 + blend 0.0000000000000000e+00 + interp 3.9525443955644768e-01:2.6490695589655761e-01:3.2027961704306007e-01:3.9525048701205212e-01:1.0422854963914099e+00:2.5627275153573831e-01:1.9616520147991985e+00:3.1915390840524771e-01:2.5311386133936988e+00:2.6225276950551957e-01:3.0324365508184861e+00:3.5328690748612818e-01:3.7848937532248401e+00 + CVs 20 + 4.0254853824138126e-02 2.9194084183525915e-01 1.6863521714134483e-01 + 9.6640169442742729e-02 5.6377032973415697e-01 2.9126641554379773e-01 + 1.6842765242418956e-01 8.3292898701339035e-01 3.8608959888660921e-01 + 2.5989606025439421e-01 1.1297975000031413e+00 4.7676278949184481e-01 + 3.7915228007312329e-01 1.4556500380213508e+00 5.4730469322211617e-01 + 5.3683321684080587e-01 1.8090313664976569e+00 5.7202385230636144e-01 + 7.4459663645989582e-01 2.1796057934704205e+00 5.1029024551515556e-01 + 1.0057355363799743e+00 2.5303962188633409e+00 3.0976392214507298e-01 + 1.2961332191029225e+00 2.7865294108388676e+00 -6.4399086768646363e-02 + 1.5587911650326842e+00 2.8660659973694216e+00 -5.8092435518223384e-01 + 1.7429236661156777e+00 2.7377064928490968e+00 -1.1552326891791935e+00 + 1.8300516890140821e+00 2.4226406925763526e+00 -1.7022810331367273e+00 + 1.8373184369217850e+00 1.9894954306712076e+00 -2.1563943499116558e+00 + 1.8101983571695373e+00 1.5404906430912977e+00 -2.5058355920033279e+00 + 1.7893997478445676e+00 1.1907516101736113e+00 -2.7929414705951174e+00 + 1.8088311370943857e+00 1.1178478752944818e+00 -3.0488750230074757e+00 + 1.9364465976024212e+00 1.5296627828491434e+00 -3.1133718482023545e+00 + 2.2239338910647737e+00 2.2172225818045272e+00 -2.4916813099487372e+00 + 2.2814847993627589e+00 2.3277362033854843e+00 -2.6958876780809287e+00 + id 13939 + loc 8.8882371783256531e-02 8.2720053195953369e-01 393 + blend 0.0000000000000000e+00 + interp 6.3827263541630697e-01:5.6625470857887272e-01:9.5582223849606729e-01:6.3826625268995285e-01:1.2112958790004180e+00:3.7209443880676468e-01:2.1044147329135683e+00:4.2848108687062375e-01:2.9556184844212519e+00:3.0240430365079440e-01:3.3404733035131113e+00:3.9250425151443025e-01:3.9983596894594453e+00 + CVs 20 + -2.6206387537169284e-01 3.4711565846350767e-01 -1.4780588113793161e-01 + -5.1312816162661035e-01 6.9527688464377579e-01 -3.1839473972713028e-01 + -7.5037543623142478e-01 1.0463213971205230e+00 -5.0191177437866297e-01 + -9.8375887605694978e-01 1.3960967176085559e+00 -6.8817682958774051e-01 + -1.2291534133703301e+00 1.7359455217700790e+00 -8.6760415713513606e-01 + -1.4969170738350916e+00 2.0554309888893614e+00 -1.0329778147246351e+00 + -1.7889666825345822e+00 2.3442611089950751e+00 -1.1816357381849618e+00 + -2.1004615046789588e+00 2.5924607074761479e+00 -1.3119752918334504e+00 + -2.4232640848229705e+00 2.7876043907253791e+00 -1.4230076857795046e+00 + -2.7451238415578869e+00 2.9235702097468126e+00 -1.5169679973331442e+00 + -3.0573745472573908e+00 3.0193600365270048e+00 -1.6093497005928219e+00 + -3.3677729416363107e+00 3.1049491085550907e+00 -1.7297243786459202e+00 + -3.6886150091282923e+00 3.1821910694763309e+00 -1.8925276948162639e+00 + -4.0174819841053919e+00 3.2256277465094207e+00 -2.0816990665678814e+00 + -4.3484154525502259e+00 3.2046738886927026e+00 -2.3080894688942073e+00 + -4.6742676236031464e+00 3.0684648608680360e+00 -2.6419391489432922e+00 + -5.0086601578352896e+00 2.7662315917572768e+00 -3.0885105203353791e+00 + -5.3935347838153396e+00 2.3432785425787115e+00 -3.4928319490099873e+00 + -5.7746696385515577e+00 2.0057887273406756e+00 -3.6797104982084976e+00 + id 13940 + loc 4.2791116237640381e-01 7.4378180503845215e-01 380 + blend 0.0000000000000000e+00 + interp 5.1516168361806480e-01:3.6413286790826338e-01:5.3892295682071034e-01:2.9666009959367051e-01:1.3806091437961170e+00:5.1515653200122868e-01:2.0019937328649622e+00:4.1711704386401705e-01:2.5343128294495800e+00:2.9223819580540111e-01:3.0897192618042153e+00:3.3008233627996653e-01:3.9966009328338759e+00 + CVs 20 + -4.3543704880795753e-01 2.5300251900991982e-01 -4.3983824104842478e-01 + -8.5572517037894880e-01 4.4899876748048956e-01 -7.6001175081917349e-01 + -1.2934619169462318e+00 6.4345909133761836e-01 -1.0833798705489746e+00 + -1.7557611235984565e+00 8.6172538559176837e-01 -1.4655829730395142e+00 + -2.2288571219848121e+00 1.0954567668358317e+00 -1.9198979459017722e+00 + -2.7003152234529262e+00 1.3170301580904675e+00 -2.4567415252524492e+00 + -3.1586355067859193e+00 1.4815600938245419e+00 -3.0844190034587884e+00 + -3.5826028341157192e+00 1.5359154764891965e+00 -3.7958000317906757e+00 + -3.9466794445709983e+00 1.4361728935302605e+00 -4.5511497029817560e+00 + -4.2345738385356286e+00 1.1599800081741507e+00 -5.2888745495864136e+00 + -4.4296840354466918e+00 7.0239032542513247e-01 -5.9532488817846758e+00 + -4.5029937697334548e+00 8.0581612426145366e-02 -6.4971076912206573e+00 + -4.4429092293927432e+00 -6.2837854890493716e-01 -6.8864920984962001e+00 + -4.2930229044394226e+00 -1.2910607334654358e+00 -7.1686141620863264e+00 + -4.1271174975630514e+00 -1.8365632883424778e+00 -7.4466568251201029e+00 + -4.0229548135526114e+00 -2.2882687329689442e+00 -7.7590727206168157e+00 + -4.0668037681394864e+00 -2.7057991829661256e+00 -8.0779721993798983e+00 + -4.2573912720363740e+00 -3.1209524181694817e+00 -8.3599282979596818e+00 + -4.2436111412443775e+00 -3.5061457728658354e+00 -8.5977332379617319e+00 + id 13941 + loc 9.1667371988296509e-01 6.5291380882263184e-01 382 + blend 0.0000000000000000e+00 + interp 4.8005147150304789e-01:4.8004667098833287e-01:2.8260171007343793e-04:2.6412161552656455e-01:6.7702820723017643e-01:3.5302713152595222e-01:1.6078038635172727e+00:2.7600703605962018e-01:2.1438997214017812e+00:2.8623197880517215e-01:2.9085445970137478e+00:4.3569624032970128e-01:3.6766696851226692e+00 + CVs 20 + 9.9518426363799306e-01 2.4562638490974514e-01 -5.3622903983761738e-01 + 1.6500210890059595e+00 3.2723068692348778e-01 -8.8542754520141131e-01 + 2.2347418179306429e+00 3.3154937824997643e-01 -1.1888561385335388e+00 + 2.8623889564749252e+00 2.8984064641295992e-01 -1.5092444634663524e+00 + 3.5320258551173676e+00 1.8720814187400403e-01 -1.8592146363888786e+00 + 4.2319241208011986e+00 1.7009831012438692e-02 -2.2530377143924523e+00 + 4.9343566063329671e+00 -2.2494115212359889e-01 -2.6986501739073785e+00 + 5.6092719770301365e+00 -5.4802496866389694e-01 -3.1827105768597153e+00 + 6.2346799813082754e+00 -9.5685897601779168e-01 -3.6769229427056094e+00 + 6.7908116642378120e+00 -1.4433367620503430e+00 -4.1506198510839960e+00 + 7.2581540317777078e+00 -1.9914027085903057e+00 -4.5725150261031819e+00 + 7.6261601556717249e+00 -2.5906427683022542e+00 -4.9124048902477373e+00 + 7.8993842734916928e+00 -3.2373289893592716e+00 -5.1542181602216655e+00 + 8.1016212246179045e+00 -3.9206133177779323e+00 -5.3035058970988889e+00 + 8.2582435383960515e+00 -4.5989673095939150e+00 -5.3762330005675976e+00 + 8.3692144374256277e+00 -5.2335043738667348e+00 -5.4041383721598821e+00 + 8.4121369332470035e+00 -5.8126089125514184e+00 -5.4347151649310357e+00 + 8.3715964319287384e+00 -6.3614832174088960e+00 -5.4937030758696288e+00 + 8.2667237428025153e+00 -6.9293402191169973e+00 -5.5018460481494369e+00 + id 13942 + loc 9.9456197023391724e-01 5.6884175539016724e-01 1069 + blend 0.0000000000000000e+00 + interp 5.3117180300190947e-01:4.4192376199576106e-01:6.1046438982817286e-01:3.4842560319996052e-01:1.2661081726774022e+00:3.3154389086801156e-01:2.0075465504536094e+00:5.3116649128387949e-01:2.5583804776170940e+00:4.6994470259944476e-01:2.9953187417347475e+00:4.1345747020627449e-01:3.2913237810938223e+00:1.7103762931814481e-01:3.8947523073442318e+00 + CVs 20 + 1.2210540587622983e-01 3.2894914207696752e-01 -1.6423066249793078e-01 + 2.7662078973144544e-01 6.6682593629995091e-01 -3.1880971506844025e-01 + 4.6056544392937776e-01 1.0124082270892711e+00 -4.5468967582205877e-01 + 6.7871538098987649e-01 1.3556762128254447e+00 -5.6714327581559787e-01 + 9.3826808974902465e-01 1.6799946112244222e+00 -6.5526579591063860e-01 + 1.2410754900485714e+00 1.9628331657189382e+00 -7.2141500310627804e-01 + 1.5859086398200324e+00 2.1690019265813092e+00 -7.6608567190490695e-01 + 1.9622493994077166e+00 2.2523201194888731e+00 -7.8149767391098290e-01 + 2.3424426439624138e+00 2.1843176416069143e+00 -7.6159903368745230e-01 + 2.6830765067593201e+00 1.9630940147121358e+00 -7.0465720649208130e-01 + 2.9118132610757028e+00 1.6258422140305240e+00 -5.9814440200675834e-01 + 2.9928594665399864e+00 1.2507278673420066e+00 -4.3954263005925343e-01 + 2.9523353518001287e+00 9.0536189586228910e-01 -2.4382953161260401e-01 + 2.8548828502773063e+00 6.3368784318519689e-01 -2.7607886755490307e-02 + 2.7642120257470060e+00 4.4526625411665732e-01 2.0173693263398335e-01 + 2.7064856552923637e+00 3.4038445863536793e-01 4.3494644362063239e-01 + 2.6804427401829365e+00 3.0296792801593164e-01 6.6654926761277966e-01 + 2.6763246018014715e+00 2.9306966844693050e-01 9.4358864706649703e-01 + 2.6899189520257503e+00 2.8287738550152675e-01 1.3252031212741355e+00 + id 13943 + loc 9.5288193225860596e-01 5.1077228784561157e-01 415 + blend 0.0000000000000000e+00 + interp 5.4806067746408282e-01:2.9180334269900288e-01:3.7203918617076948e-03:5.4805519685730819e-01:6.9515333355259745e-01:4.3270913200402533e-01:1.0438758710815290e+00:3.2578729470170487e-01:1.7377059684770377e+00:3.1920663917747466e-01:2.0882771246038065e+00:4.1498308954820262e-01:2.9905690790547221e+00:3.8596124278970018e-01:3.2875426897403042e+00 + CVs 20 + 2.1980408145047778e-01 1.8297214316890492e-01 1.6691015218262537e-02 + 3.7778562991111314e-01 3.2107268284250029e-01 2.0408279714111882e-02 + 5.0578783975346042e-01 4.3749361065172288e-01 1.8607929596161588e-02 + 6.2664843211055266e-01 5.5034587653473355e-01 1.6991602559171815e-02 + 7.4154573639945975e-01 6.5834769062509979e-01 1.0464477277810857e-02 + 8.5248006353572858e-01 7.5991589737822529e-01 -6.3995671121478970e-03 + 9.6532341827694745e-01 8.5642660683856620e-01 -3.1268764592445375e-02 + 1.0858666065635327e+00 9.4936684711681552e-01 -5.6009926855483227e-02 + 1.2167624143040203e+00 1.0364841374516123e+00 -7.7316313039304529e-02 + 1.3583007847407171e+00 1.1170885860780151e+00 -8.9068633813669917e-02 + 1.4986865203320587e+00 1.2093379085341422e+00 -4.4711056092156198e-02 + 1.6157303777961567e+00 1.3452376525901253e+00 1.4177695180820482e-01 + 1.7437539891592992e+00 1.5162267914708387e+00 4.9523985289252609e-01 + 1.9569962790838429e+00 1.6575089996034464e+00 8.9889996563751995e-01 + 2.2590588078533420e+00 1.7325152608896326e+00 1.2397107073235267e+00 + 2.6240362356207649e+00 1.7432180512753626e+00 1.5163905630799606e+00 + 3.0327838083169869e+00 1.6898723462847274e+00 1.7396279163520036e+00 + 3.4450701772186330e+00 1.5807080293497533e+00 1.8751259048886759e+00 + 3.6767992261068638e+00 1.4670284718107873e+00 1.7835448777106269e+00 + id 13944 + loc 4.5930403470993042e-01 6.9574403762817383e-01 401 + blend 0.0000000000000000e+00 + interp 4.4511275915904464e-01:2.8465837517620041e-01:6.2417642773994531e-02:2.6563577011910455e-01:9.5735833245133384e-01:4.4510830803145307e-01:1.5512115378705260e+00:4.4445913665364745e-01:2.0091740205139388e+00:4.3670868626431597e-01:2.6088856900175545e+00:3.7583225036749801e-01:3.0278855402112228e+00:4.1663261630251819e-01:3.7605617394159174e+00 + CVs 20 + -3.0250768381665322e-02 3.0756786515076379e-01 -3.5410487039081762e-01 + -4.3781358997783321e-02 6.0280705475302465e-01 -7.0999134142007669e-01 + -5.2378566917045177e-02 8.7126954652603994e-01 -1.0610596532344203e+00 + -5.6676512977090421e-02 1.0958223824678734e+00 -1.4029556690166496e+00 + -6.1384321364090388e-02 1.2797659034348228e+00 -1.7463828830533816e+00 + -8.5458925467091273e-02 1.4398181832333468e+00 -2.1130456648726015e+00 + -1.5742786796577612e-01 1.5829244518584462e+00 -2.5107021187474725e+00 + -3.0159944867224664e-01 1.7020723869804104e+00 -2.9251421752438422e+00 + -5.2847861463056223e-01 1.7827222198164332e+00 -3.3329934023417476e+00 + -8.3124371585940582e-01 1.8122304585140308e+00 -3.7076710321729469e+00 + -1.1830930393606240e+00 1.7953492944346057e+00 -4.0229892030676808e+00 + -1.5427348388527993e+00 1.7524820596353972e+00 -4.2641580234680090e+00 + -1.8883229147689167e+00 1.7040375246801136e+00 -4.4403357247811215e+00 + -2.2371062070650880e+00 1.6457294110627099e+00 -4.5807902289320461e+00 + -2.5975155188945105e+00 1.5625207330559365e+00 -4.6966672487577474e+00 + -2.9221868872518444e+00 1.4813453796577978e+00 -4.7440898507809379e+00 + -3.1591205356396430e+00 1.4430229552153380e+00 -4.6541105716539928e+00 + -3.3668532313986157e+00 1.3995903608815352e+00 -4.4685718294131558e+00 + -3.6630600813168392e+00 1.2982359529890863e+00 -4.6351492832528045e+00 + id 13945 + loc 3.9641773700714111e-01 4.8741647601127625e-01 402 + blend 0.0000000000000000e+00 + interp 4.9646289679265138e-01:3.5867568595620641e-01:4.0518988588825966e-02:3.2541073843552232e-01:8.9264049216241348e-01:3.7604805786505163e-01:1.2626081429273865e+00:4.6759522396350728e-01:1.9139679486251944e+00:4.2750496890353490e-01:2.1874595682911004e+00:4.9645793216368345e-01:2.8066457748042652e+00:3.9983206174746366e-01:3.0321376558979769e+00:3.5335657550355820e-01:3.6603183366536003e+00 + CVs 20 + -2.3073227445997108e-01 2.7114810177536591e-01 1.5628904868223031e-01 + -4.3576615490081194e-01 5.3740014290759985e-01 3.3423437610175349e-01 + -6.4371481952701515e-01 8.1211055028894075e-01 5.0041899317140248e-01 + -8.6319767654533897e-01 1.0889461882408402e+00 6.3655073102876436e-01 + -1.0954740307923410e+00 1.3630677564857085e+00 7.4944614463024195e-01 + -1.3522867632629898e+00 1.6348387775923297e+00 8.4444204288984070e-01 + -1.6490314638746923e+00 1.8983655903718610e+00 9.1429043009120003e-01 + -1.9994720973191655e+00 2.1406822444474312e+00 9.5040764992603310e-01 + -2.4168974530395158e+00 2.3459302053689406e+00 9.5567664838394828e-01 + -2.9048729501906752e+00 2.4916964778654482e+00 9.3401070477159209e-01 + -3.4432314980829677e+00 2.5481058617888879e+00 8.7849180054392240e-01 + -3.9967350466542957e+00 2.4846359263449926e+00 7.9063837955370608e-01 + -4.5316766717779444e+00 2.2754121601880497e+00 6.9655051519630595e-01 + -5.0251613793551249e+00 1.9157973998831406e+00 6.4278717741400326e-01 + -5.4725568676235570e+00 1.4382620632889214e+00 6.9725649864227601e-01 + -5.8936918169740666e+00 9.2519615263488375e-01 9.5022928836225129e-01 + -6.3138139187907507e+00 5.3866068776742315e-01 1.4837561360551796e+00 + -6.7051545771718750e+00 4.1063222476080563e-01 2.1850048517163931e+00 + -7.0860171676865482e+00 1.8081316539829317e-01 2.5630196252349293e+00 + id 13946 + loc 7.5439321994781494e-01 4.6624380350112915e-01 378 + blend 0.0000000000000000e+00 + interp 4.9963974314864301e-01:2.9115186265310505e-01:2.6286329217733662e-02:2.5905355246171402e-01:9.2374866284087487e-01:2.6975383309513085e-01:1.8740393675753384e+00:4.9963474675121156e-01:2.4154226198590552e+00:4.2569392382412469e-01:2.9617596031300844e+00:2.9753171614491991e-01:3.4668752289752578e+00 + CVs 20 + -4.1118073040008452e-01 2.9166623785121509e-01 4.6011819321495478e-03 + -7.6031709102635681e-01 5.4464681958138850e-01 1.1884209448375205e-02 + -1.0936116724196927e+00 7.7950353150787122e-01 1.9229911065570815e-02 + -1.4301373744444517e+00 1.0166244406414706e+00 1.9594105512130755e-02 + -1.7609390134222549e+00 1.2703892073176450e+00 -3.6476152287523433e-07 + -2.0856125715222498e+00 1.5483201291522410e+00 -5.4808216377548957e-02 + -2.4181255559939476e+00 1.8406453425849567e+00 -1.6137391787480793e-01 + -2.7697860301195809e+00 2.1260581289469238e+00 -3.3356559924468210e-01 + -3.1439189708194268e+00 2.3824858701599672e+00 -5.8215485553995261e-01 + -3.5453565765010628e+00 2.5855232680220439e+00 -9.1403862240881784e-01 + -3.9838597383228187e+00 2.7007602256710870e+00 -1.3223175930123547e+00 + -4.4598031315474769e+00 2.6798471506301769e+00 -1.7793058033941476e+00 + -4.9346848444793023e+00 2.4784460867215392e+00 -2.2314868579646729e+00 + -5.3354348870849755e+00 2.1194057082693605e+00 -2.6087351583453264e+00 + -5.6349716218540049e+00 1.6970880169711267e+00 -2.8818877183830613e+00 + -5.8816426175082768e+00 1.2746116668981111e+00 -3.0809832906850350e+00 + -6.1495805668370425e+00 8.6176911453455451e-01 -3.2401163138155669e+00 + -6.4727738628046962e+00 4.8019047449132257e-01 -3.3518670636776653e+00 + -6.7688092851357489e+00 1.6543161429655573e-01 -3.4042625213473405e+00 + id 13947 + loc 7.6618027687072754e-01 4.0703091025352478e-01 395 + blend 0.0000000000000000e+00 + interp 3.4509534613396370e-01:3.0047838438532659e-01:9.4723242278929420e-01:3.3097948284545525e-01:1.8106394009297708e+00:2.9751072872584194e-01:2.2528573373106058e+00:2.7026454226781715e-01:3.2108304391798885e+00:3.4509189518050237e-01:3.9189586108212842e+00 + CVs 20 + -3.1716937032377923e-01 2.7660441971388772e-01 4.8549319116659384e-01 + -6.0400997454288541e-01 4.7954004277288426e-01 8.9280772054823776e-01 + -8.9223614082107650e-01 6.3759259727548778e-01 1.2850310078332821e+00 + -1.2007790362879029e+00 7.5902857883525165e-01 1.6881592857678376e+00 + -1.5268136772490004e+00 8.3775682183895617e-01 2.0938467703959218e+00 + -1.8627795163970866e+00 8.7066535331181605e-01 2.4944508799498251e+00 + -2.2004155307816631e+00 8.5777215779175719e-01 2.8856263955575594e+00 + -2.5332904905313414e+00 7.9867749968326196e-01 3.2634873339156947e+00 + -2.8539854261685189e+00 6.9104272584841775e-01 3.6244327371194061e+00 + -3.1500182310841316e+00 5.3256113210444878e-01 3.9696057299901519e+00 + -3.4081081616964823e+00 3.2485706981383000e-01 4.3050288487314745e+00 + -3.6242593789823006e+00 7.4470402289854132e-02 4.6376596006882522e+00 + -3.8023498579690211e+00 -2.1357676171987272e-01 4.9737927373187620e+00 + -3.9404784178395857e+00 -5.4080016463140623e-01 5.3169771933631962e+00 + -4.0264800482562020e+00 -9.1098851111175971e-01 5.6636160397623199e+00 + -4.0468417309451894e+00 -1.3258181137132090e+00 5.9983163676495206e+00 + -3.9953722497452384e+00 -1.7825326025256754e+00 6.2959113685040640e+00 + -3.8797156773640142e+00 -2.2635130126002405e+00 6.5389532476276990e+00 + -3.7765930128780552e+00 -2.6818953348799455e+00 6.8237471226064699e+00 + id 13948 + loc 5.4143595695495605e-01 1.6882164776325226e-01 407 + blend 0.0000000000000000e+00 + interp 4.2241575619249316e-01:2.7969269514036743e-01:7.8003687197031646e-01:2.5250931961711726e-01:1.2240038611196062e+00:4.2241153203493126e-01:1.9569123428426454e+00:3.3494546444019169e-01:2.4369469243809725e+00:2.5867883855871859e-01:3.1160218075629649e+00 + CVs 20 + -3.9107187204812244e-01 3.5409761436849113e-01 6.4532617749708310e-02 + -5.7347036107094906e-01 5.4770985532417393e-01 1.0977396087715637e-01 + -6.8373679376123864e-01 6.7798222889112070e-01 1.4338743119259648e-01 + -7.9885070415055504e-01 7.9383650987430276e-01 1.6784541371582989e-01 + -9.1325958656706152e-01 8.9393527122323624e-01 1.8399346208735631e-01 + -1.0232869768714550e+00 9.7934424020547717e-01 1.9357363574822298e-01 + -1.1285502259882376e+00 1.0529270541416269e+00 1.9594008251241971e-01 + -1.2312745592363308e+00 1.1145681319616583e+00 1.8401655299893332e-01 + -1.3317601834709940e+00 1.1568787342666940e+00 1.4744029206328538e-01 + -1.4265088416378233e+00 1.1715084294060960e+00 8.1503616531891740e-02 + -1.5128866171914215e+00 1.1568448574331875e+00 -1.1952118355642694e-02 + -1.5906829031790430e+00 1.1161859869408388e+00 -1.2905295837594480e-01 + -1.6590854770325483e+00 1.0503978310200492e+00 -2.6683851875392117e-01 + -1.7160652544734210e+00 9.5608801848127345e-01 -4.2365869677296486e-01 + -1.7627374355841654e+00 8.3721894137293018e-01 -5.9761045646012900e-01 + -1.8052104525140362e+00 7.1287267862163051e-01 -7.8473521918809719e-01 + -1.8497284372990137e+00 6.0330798464152791e-01 -9.7800792434938022e-01 + -1.9022068249534763e+00 5.1648580380063236e-01 -1.1667528934247977e+00 + -1.9760750961493017e+00 5.0382402167337170e-01 -1.3270389167632752e+00 + id 13949 + loc 1.3766568899154663e-01 1.3339664041996002e-01 400 + blend 0.0000000000000000e+00 + interp 4.7507382940910364e-01:3.9482145394840990e-01:8.3860908958332536e-01:2.8969653738020562e-01:1.5228458120075412e+00:3.6659686250786522e-01:2.0004060783386173e+00:3.9521568244737343e-01:2.8737813115911588e+00:4.7506907867080955e-01:3.1568831130903021e+00:3.5481213357946789e-01:3.9902610444998965e+00 + CVs 20 + -1.2502467961973496e-01 1.1579701034474145e-01 2.1425912837417585e-01 + -2.7220085445171649e-01 2.2447467299745913e-01 4.2327552389211198e-01 + -4.3265896160942041e-01 3.1672425009033767e-01 6.1335260630790045e-01 + -5.9563576120777528e-01 3.8863193109445382e-01 7.7499272857789125e-01 + -7.4950136629046304e-01 4.4172229036532173e-01 9.0275392692829481e-01 + -8.7959090569079035e-01 4.8179432007325534e-01 9.9107985381978958e-01 + -9.7731455651933863e-01 5.2093991615926949e-01 1.0414704762428588e+00 + -1.0455567767138039e+00 5.7381536872577066e-01 1.0656159829164540e+00 + -1.1009580084092900e+00 6.4629904545191308e-01 1.0849224063293481e+00 + -1.1654091603613197e+00 7.2532090516601389e-01 1.1243943408639117e+00 + -1.2433314028164151e+00 7.8567681608595241e-01 1.2044366178440418e+00 + -1.3210022146284144e+00 8.0506663661027222e-01 1.3383736480742712e+00 + -1.3954808551881097e+00 7.8421320009680384e-01 1.5236230700058693e+00 + -1.4887092577031549e+00 7.4172680855935780e-01 1.7416828748718423e+00 + -1.6214027542001941e+00 6.3986209938914784e-01 1.9774817305320189e+00 + -1.7948271403020262e+00 3.3993677735233829e-01 2.2247042185814490e+00 + -2.1119957866315104e+00 -2.7304886774113646e-01 2.4958148763229593e+00 + -2.7158493116762021e+00 -7.9504711063367683e-01 2.7798754665623746e+00 + -2.9857039969230805e+00 -6.6158937152116071e-01 2.9234262694711419e+00 + id 13950 + loc 7.3362451791763306e-01 7.7482086420059204e-01 379 + blend 0.0000000000000000e+00 + interp 4.7706738310173141e-01:3.8470466381769691e-01:3.0709368618252353e-02:4.6544886377825101e-01:8.9888250895027433e-01:4.0200382180812777e-01:1.1744090447430975e+00:4.0834754441928478e-01:2.0324197302945262e+00:4.5237926723935235e-01:2.9819821191600222e+00:4.7706261242790043e-01:3.6692149091379127e+00 + CVs 20 + -3.2200259153324812e-01 3.7435018124728747e-01 1.8536820702476708e-01 + -6.0269380469758027e-01 7.0489449346718114e-01 3.9427082869989727e-01 + -8.7377224927627783e-01 1.0082388981104975e+00 6.2494436215727434e-01 + -1.1510968251848892e+00 1.3116582648227557e+00 8.6014012180448218e-01 + -1.4476445114342644e+00 1.6360455248037951e+00 1.0707822616630027e+00 + -1.7909102464860613e+00 1.9822016440652184e+00 1.2274039025492738e+00 + -2.2057720142842054e+00 2.3214023264155514e+00 1.3011422095058816e+00 + -2.6900603088835267e+00 2.6117130171705254e+00 1.2701881417950247e+00 + -3.2160699594361217e+00 2.8212667354537304e+00 1.1268908175385444e+00 + -3.7487079301561792e+00 2.9345175346923318e+00 8.7735497430877074e-01 + -4.2627872948482119e+00 2.9460940892729393e+00 5.3393234347425733e-01 + -4.7447721273192744e+00 2.8435069692413748e+00 1.1250121971813953e-01 + -5.1760534740758235e+00 2.6047826589467897e+00 -3.4579847004649134e-01 + -5.5467381279549617e+00 2.2395735218154700e+00 -7.6187449985984490e-01 + -5.8950071411082234e+00 1.8076580238307756e+00 -1.0526174477610293e+00 + -6.2717749521824819e+00 1.4009183886229226e+00 -1.1537735296110756e+00 + -6.6667029077102438e+00 1.1358060447711371e+00 -1.0418491201298870e+00 + -7.0066097062430783e+00 1.0777329939822669e+00 -7.7604871530118957e-01 + -7.3449749943136977e+00 1.0007793249749124e+00 -5.0567699345547079e-01 + id 13951 + loc 6.1969053000211716e-02 7.3770207166671753e-01 396 + blend 0.0000000000000000e+00 + interp 4.7491136964519320e-01:3.6667881670351093e-01:1.6689742127850860e-01:4.7490662053149679e-01:9.1508328213190482e-01:3.7379564211893135e-01:1.2385014893309110e+00:3.7970934925038757e-01:2.0721013221867559e+00:4.1432418638576762e-01:2.9062871109982469e+00:3.7988086645463870e-01:3.2456469166326003e+00:4.6152759321829462e-01:3.8816783952068246e+00 + CVs 20 + 8.9589509261335853e-01 1.7297568753471998e-01 -2.9128537681663613e-01 + 1.5122464757400294e+00 1.5691053800188590e-01 -5.1850339754407038e-01 + 2.0620933767157745e+00 6.9409842528726062e-02 -7.0458087237376799e-01 + 2.6205583853721719e+00 -4.6978530404056640e-02 -8.5123140955902432e-01 + 3.1797212972729367e+00 -1.9255701186710472e-01 -9.5237515017037178e-01 + 3.7328169343338691e+00 -3.6662820710083566e-01 -1.0110961976639390e+00 + 4.2724518864759649e+00 -5.6945350879008960e-01 -1.0362056981512024e+00 + 4.7886559492585095e+00 -8.0433995354670662e-01 -1.0337699493572250e+00 + 5.2717352733204583e+00 -1.0788315290102555e+00 -1.0059478424113768e+00 + 5.7107291691846926e+00 -1.4053595910137890e+00 -9.6089819834224044e-01 + 6.0910693959257083e+00 -1.7921776875937399e+00 -9.1314874197048201e-01 + 6.4015863795255834e+00 -2.2324545838491163e+00 -8.7273650258962876e-01 + 6.6399648572581036e+00 -2.7093662703815884e+00 -8.3932493721892687e-01 + 6.8103233422610057e+00 -3.2073619393426891e+00 -8.1621043331770493e-01 + 6.9146934638936068e+00 -3.7153135978540215e+00 -8.1472423110898895e-01 + 6.9492162083678499e+00 -4.2170554869046502e+00 -8.3839833834097066e-01 + 6.9134396129406177e+00 -4.6954654231859330e+00 -8.7888491545359149e-01 + 6.8228118596481577e+00 -5.1516851846221163e+00 -9.3790611897277454e-01 + 6.8313508624312478e+00 -5.6892658205899211e+00 -1.0708691032295106e+00 + id 13952 + loc 2.9196906089782715e-01 4.6068355441093445e-01 412 + blend 0.0000000000000000e+00 + interp 4.7651660564032039e-01:3.4609926763514837e-01:1.5628146774108298e-01:2.6117601580705618e-01:9.7864317964544700e-01:3.6010245256451301e-01:1.4282340829367499e+00:3.4338586324781262e-01:2.0727601381705996e+00:4.4378618894111682e-01:2.7682315776449915e+00:4.7651184047426398e-01:3.0555288189078702e+00:3.9827126408712998e-01:3.7798228805074578e+00 + CVs 20 + -1.4282292239583905e-01 1.7474652860889520e-01 -6.0171543076040312e-01 + -2.7410140146139317e-01 2.6197355360046132e-01 -1.0319266662048430e+00 + -3.9017175750624089e-01 3.2499063587385724e-01 -1.4295423609019267e+00 + -4.8642688110950538e-01 3.9502850729946748e-01 -1.8669865654774935e+00 + -5.5539169747131856e-01 4.6258193132066439e-01 -2.3392094096392073e+00 + -5.8656801574456807e-01 5.1721885285171743e-01 -2.8362961045939379e+00 + -5.6925087264192842e-01 5.5012203889102118e-01 -3.3446173742540104e+00 + -4.9993199973846747e-01 5.5395767888404712e-01 -3.8483781465999858e+00 + -3.8272148868833883e-01 5.2465602294286795e-01 -4.3303302754579187e+00 + -2.2625274589832645e-01 4.6256875636719652e-01 -4.7747927096447711e+00 + -4.8244130584977230e-02 3.6171313505549429e-01 -5.1823074457174645e+00 + 1.1773792898601732e-01 1.9286083242783980e-01 -5.5815687491923569e+00 + 2.2924867748568278e-01 -7.6202501775582299e-02 -5.9888958863135340e+00 + 2.6639888493357311e-01 -4.2893116094683448e-01 -6.3656223879463143e+00 + 2.4142713863845927e-01 -8.2088356726980605e-01 -6.6727371201574801e+00 + 1.6257634279492472e-01 -1.2246360738186697e+00 -6.9035850143064916e+00 + 3.0428913506359345e-02 -1.6198538077935529e+00 -7.0626611982151459e+00 + -1.4300880088625945e-01 -1.9811981702846131e+00 -7.1561365075719268e+00 + -2.5798723647858612e-01 -2.2203522885044391e+00 -7.2026265118372654e+00 + id 13953 + loc 8.8954067230224609e-01 1.6493365168571472e-01 399 + blend 0.0000000000000000e+00 + interp 4.5137260444561711e-01:4.2575492532511344e-01:1.0493860622727236e-01:3.4608154600075691e-01:1.0619384328286479e+00:3.4195189653432229e-01:1.9358162737253926e+00:4.5136809071957268e-01:2.2276838988313825e+00:4.5121179365514935e-01:2.7808367467872950e+00:3.9627209363486993e-01:3.0320576996879915e+00:3.1052551541242618e-01:3.7999647272929487e+00 + CVs 20 + 2.2777471783403319e-01 2.3734528789083598e-01 3.9933273539330433e-02 + 4.5392236414167697e-01 5.0687791003785787e-01 1.1545604545450720e-01 + 6.6473954708052641e-01 7.8859270258828695e-01 2.0675660835535192e-01 + 8.6593989897255164e-01 1.0721559934255667e+00 3.0678057850574691e-01 + 1.0735347390609231e+00 1.3525547989041236e+00 4.1885919996043908e-01 + 1.3027467021246495e+00 1.6190862399986921e+00 5.5135702179002166e-01 + 1.5649580796809386e+00 1.8536129659344431e+00 7.1433892268448906e-01 + 1.8638331962339774e+00 2.0335629993595687e+00 9.1363210320519561e-01 + 2.1904673693173167e+00 2.1402180974185407e+00 1.1456768854687518e+00 + 2.5258835663073675e+00 2.1697250296981370e+00 1.3987289527861047e+00 + 2.8484673631641493e+00 2.1348919613039614e+00 1.6617965980596767e+00 + 3.1374562883267312e+00 2.0590209691370949e+00 1.9300455400780177e+00 + 3.3827726870681163e+00 1.9603769273886675e+00 2.2045192277801275e+00 + 3.5864778610605947e+00 1.8440076493967903e+00 2.4869354341859671e+00 + 3.7349730210126424e+00 1.7462988837983802e+00 2.7476972940562581e+00 + 3.7831341359857915e+00 1.7829691680990065e+00 2.8536910970212630e+00 + 3.6861680808727901e+00 1.9342581454346863e+00 2.5123971682494508e+00 + 3.5891837192868383e+00 1.8481278386221156e+00 2.0441461704092072e+00 + 3.6089319514244136e+00 1.9985574375782120e+00 2.1701968758096841e+00 + id 13954 + loc 2.6218286156654358e-01 3.5564255714416504e-01 1078 + blend 0.0000000000000000e+00 + interp 4.0077673596435442e-01:3.8361844058797445e-01:1.2496313792735314e-01:2.5307949461822682e-01:9.5877586269177273e-01:2.6230631995435272e-01:1.8544901310065192e+00:3.6333485209233285e-01:2.1778839613740009e+00:2.6226260070056501e-01:3.1646087900463975e+00:4.0077272819699478e-01:3.8481475500477904e+00 + CVs 20 + 6.9709546113459142e-02 3.3611043420464620e-01 -4.7843534428831776e-02 + 9.5852554036666371e-02 6.4285570825869931e-01 -1.0847223509323903e-01 + 9.9847804985784216e-02 9.4783391176251386e-01 -1.7539395745170147e-01 + 8.8225774420241931e-02 1.2627688151594576e+00 -2.4586102931039877e-01 + 4.4506089992993658e-02 1.5808732335531857e+00 -3.2419942211768726e-01 + -5.0331725415793227e-02 1.8903635426022563e+00 -4.1244002595736406e-01 + -2.1511995907871051e-01 2.1712832456811793e+00 -5.0616627132248393e-01 + -4.5842852797905786e-01 2.3949220876738764e+00 -5.8989542632281333e-01 + -7.6879927281324612e-01 2.5314072569573431e+00 -6.3756563068846717e-01 + -1.1146902337905282e+00 2.5628400951912966e+00 -6.2311090288488324e-01 + -1.4587863541044916e+00 2.4883202639528532e+00 -5.3336666844216618e-01 + -1.7680823458843189e+00 2.3168797827287251e+00 -3.7133249739857727e-01 + -2.0123831619771737e+00 2.0743658920913979e+00 -1.6059231473231150e-01 + -2.1631018363753149e+00 1.8313391063394435e+00 5.1916115684873081e-02 + -2.1820015094735696e+00 1.7003160446333145e+00 2.0884969917039381e-01 + -1.9933051390855028e+00 1.6924230038561898e+00 2.7302716659049103e-01 + -1.5732205591713726e+00 1.5560019857915719e+00 2.8156878842831179e-01 + -1.2297397056523303e+00 9.2222036805536134e-01 3.9039941673186773e-01 + -1.2387080714669121e+00 1.0394015203627789e+00 4.7200410380446839e-01 + id 13955 + loc 8.3222377300262451e-01 8.8952302932739258e-01 403 + blend 0.0000000000000000e+00 + interp 4.0913238546874653e-01:2.9389648285130349e-01:9.3297943668825833e-01:3.7185016748868610e-01:1.4575535584038246e+00:2.7900666199591745e-01:2.1083379356317140e+00:4.0912829414489188e-01:2.9908143936896243e+00:2.6149744907919109e-01:3.9690278203409326e+00 + CVs 20 + -1.1901029710406753e-01 -7.2103171878764027e-03 -5.2027632548042810e-03 + -2.2341664439828274e-01 -1.6645685996981158e-03 -1.6261421042565935e-03 + -3.2926902989814211e-01 4.4372420161150061e-03 7.4324134663392855e-03 + -4.4525850369049541e-01 2.5729780038449834e-03 2.1033223159607359e-02 + -5.6934288489395701e-01 -8.6720939858300761e-03 4.0128121756866988e-02 + -6.9845096517053618e-01 -3.0448905633754408e-02 6.5696473870060806e-02 + -8.2918807988350762e-01 -6.3522838537138526e-02 9.8575077107798573e-02 + -9.5823680393151411e-01 -1.0852682677624842e-01 1.3887976293649557e-01 + -1.0825317140311692e+00 -1.6605525855338349e-01 1.8578970857335242e-01 + -1.1979509066595240e+00 -2.3456522577462080e-01 2.3709707675463981e-01 + -1.2982587535713765e+00 -3.1001428695731037e-01 2.8806690310338201e-01 + -1.3777599214646576e+00 -3.8697920355030924e-01 3.3127404839814312e-01 + -1.4398097817775353e+00 -4.6207189085407774e-01 3.6149027203025852e-01 + -1.5057062034846664e+00 -5.4088588090409928e-01 3.8835274971988182e-01 + -1.5999193538212320e+00 -6.3361554033119982e-01 4.3811993180861530e-01 + -1.7208985288082828e+00 -7.3198803489859110e-01 5.2620656657415221e-01 + -1.8472494377551283e+00 -8.1443874027873486e-01 6.3704037851189699e-01 + -1.9634364452369883e+00 -8.6955809874442636e-01 7.3796863852574202e-01 + -1.9508627191601224e+00 -8.6329516510500592e-01 7.4526979771880220e-01 + id 13956 + loc 8.0375719070434570e-01 2.6242223381996155e-01 373 + blend 0.0000000000000000e+00 + interp 3.8790210860381308e-01:3.8789822958272707e-01:8.0045445647115165e-01:2.2089267150633546e-01:1.0576335538224779e+00:2.1793808021451233e-01:1.8828498477750693e+00:2.4924387522408653e-01:2.7258896560807382e+00:2.8178179851784446e-01:3.3877657300350186e+00:2.6420696558987533e-01:3.9970258231959281e+00 + CVs 20 + 3.5198419648469359e-01 3.6412243563355773e-01 5.9916043368331701e-03 + 7.0421376440223493e-01 6.6721622793408653e-01 2.4188501035294296e-02 + 1.0569060519464351e+00 8.8605395613966531e-01 4.8517148608822697e-02 + 1.4048576477367245e+00 1.0652614516158707e+00 7.7403311326475821e-02 + 1.7206545035132232e+00 1.2535617228351961e+00 1.0334117245044966e-01 + 2.0090088715045282e+00 1.4763993492796015e+00 1.3412519814829427e-01 + 2.2822893408183478e+00 1.7436154452471122e+00 1.9708406219511776e-01 + 2.5261388029890397e+00 2.0527748544232853e+00 3.1201824513618481e-01 + 2.7185280463888821e+00 2.3973631325451628e+00 4.8169543717329177e-01 + 2.8504274788889754e+00 2.7725056952314731e+00 7.0567856348697566e-01 + 2.9289652878458563e+00 3.1673975118021214e+00 9.9423905291675341e-01 + 2.9650311806387668e+00 3.5443682664639313e+00 1.3732691660334129e+00 + 2.9496415758892796e+00 3.8246994657971349e+00 1.8678461442032233e+00 + 2.8416282749849668e+00 3.9095853629890263e+00 2.4458179251934649e+00 + 2.6120706700133725e+00 3.7348131428644167e+00 3.0141808665722802e+00 + 2.3770147704518867e+00 3.2440036620580499e+00 3.5497650381908539e+00 + 2.4894015300238976e+00 2.3581516362308621e+00 3.9849960247290817e+00 + 3.0556696945369319e+00 1.5149334628188025e+00 4.1761102994199826e+00 + 3.3323430874248330e+00 9.4816061486875691e-01 4.4681288597283420e+00 + id 13957 + loc 7.1913039684295654e-01 8.0556631088256836e-02 382 + blend 0.0000000000000000e+00 + interp 5.2530224754345411e-01:2.6723861121013714e-01:7.9568154536391100e-01:4.9518545260102087e-01:1.0000394996381121e+00:5.2529699452097867e-01:1.9394825317243543e+00:4.9176785234042381e-01:2.2632176979307888e+00:5.1994923637488799e-01:2.8076881553587150e+00:3.0140233729653348e-01:3.1881386853420768e+00:3.5124122936698704e-01:3.9841644885036875e+00 + CVs 20 + -7.2022159992246149e-01 7.5645716030533827e-02 5.2641304948211287e-01 + -1.1947342724387222e+00 3.0709213890423082e-02 9.3911652760766484e-01 + -1.6202753242277097e+00 -4.9824859466098270e-02 1.3225409249949938e+00 + -2.0754003473932512e+00 -1.1731949798843877e-01 1.6920561329498813e+00 + -2.5656289323967014e+00 -1.6042452931770423e-01 2.0298046127321419e+00 + -3.0990691080638681e+00 -1.7623575901376554e-01 2.3266774291404677e+00 + -3.6824775951788395e+00 -1.7952563200019234e-01 2.5847605100913857e+00 + -4.3160555970845751e+00 -2.0526847477201504e-01 2.8082482499600459e+00 + -4.9867163353161734e+00 -2.9949435067250785e-01 2.9967965428701859e+00 + -5.6611508615878234e+00 -5.0182934379086142e-01 3.1491945881551575e+00 + -6.2856477303298082e+00 -8.2806847094520464e-01 3.2625079724935495e+00 + -6.8071603181065461e+00 -1.2602741382326053e+00 3.3246274798927216e+00 + -7.2119082957733536e+00 -1.7572686396668917e+00 3.3210869994336485e+00 + -7.5160903634240528e+00 -2.2887199664243298e+00 3.2563400869154862e+00 + -7.7326487689495051e+00 -2.8320630448120632e+00 3.1485524440592600e+00 + -7.8806086153265635e+00 -3.3800373301002429e+00 3.0269291648318162e+00 + -7.9818010835413817e+00 -3.9741158373852095e+00 2.9332862810725757e+00 + -8.0496332885468842e+00 -4.6211529683958501e+00 2.9096314641182497e+00 + -8.0169154050982758e+00 -4.9821843882843657e+00 2.8711016874597202e+00 + id 13958 + loc 1.5581199899315834e-02 4.7211450338363647e-01 380 + blend 0.0000000000000000e+00 + interp 2.9805195272029417e-01:2.9804897220076698e-01:6.4279295213889265e-01:1.9896448834436539e-01:1.1148791975184145e+00:1.0399120499265628e-01:2.7285002878425093e+00:2.8655210724249408e-01:3.7991406708754161e+00 + CVs 20 + -3.4377065395254858e-01 3.9120059735959534e-01 5.0659536118656256e-01 + -6.0431907413894281e-01 6.8113214206499595e-01 9.7207513572079984e-01 + -8.4542767019535070e-01 9.1568112170949945e-01 1.4368004550466482e+00 + -1.0990520769889525e+00 1.1211820177587311e+00 1.9087517592039756e+00 + -1.3731094295365229e+00 1.2994202515567703e+00 2.3683941868604124e+00 + -1.6688122041950395e+00 1.4446006695254763e+00 2.8029326648515291e+00 + -1.9820359072267826e+00 1.5536056627994768e+00 3.2065006495011055e+00 + -2.3077029776225988e+00 1.6317381554823012e+00 3.5772224177756171e+00 + -2.6446917169385578e+00 1.6888433226116191e+00 3.9182323129710901e+00 + -2.9996374205397784e+00 1.7315016435045150e+00 4.2383202841761332e+00 + -3.3867369615296425e+00 1.7541761852632733e+00 4.5540272011211664e+00 + -3.8194037073894229e+00 1.7297954904928126e+00 4.8855186350222892e+00 + -4.2832088147552696e+00 1.6186879689088367e+00 5.2281982221392456e+00 + -4.7174500106431685e+00 1.4299293550295311e+00 5.5329322527610110e+00 + -5.0666060064301943e+00 1.2395487876661599e+00 5.7471489229157076e+00 + -5.3486147942502766e+00 1.0974185800659231e+00 5.8418612240411489e+00 + -5.6286163670825804e+00 9.9110375282743757e-01 5.8086102959669432e+00 + -5.9571324294913826e+00 8.6704718368986189e-01 5.7475238851158874e+00 + -6.2765997809205878e+00 7.2400977984498960e-01 5.9470816461828928e+00 + id 13959 + loc 6.2963771820068359e-01 1.6552996635437012e-01 415 + blend 0.0000000000000000e+00 + interp 3.9566250730117036e-01:3.9565855067609734e-01:7.1530372290113275e-02:2.8419394954134897e-01:9.6933799865325054e-01:2.9519333484068072e-01:2.0003257886957169e+00:3.9123912252577098e-01:2.9998823220192805e+00:3.1664483920626157e-01:3.7972764111931592e+00 + CVs 20 + -1.6588841130665927e-01 1.1319994845602893e-01 6.7748125093722716e-03 + -3.0703765332566119e-01 2.0579430447840064e-01 4.5643941289060158e-02 + -4.5689434531358020e-01 3.1167416694871231e-01 8.9736007709386223e-02 + -6.2297187161488266e-01 4.4267526316367811e-01 1.1219462180722467e-01 + -8.0790722749929067e-01 5.9750228806907835e-01 1.0505251698897383e-01 + -1.0141925705173527e+00 7.7295405341990231e-01 5.8521258071738247e-02 + -1.2396604401645051e+00 9.6292998131015373e-01 -3.8401806362778235e-02 + -1.4777300744663107e+00 1.1594827991157490e+00 -1.9314921241410943e-01 + -1.7214199584368262e+00 1.3552738430528446e+00 -4.0799874882377274e-01 + -1.9633614570202107e+00 1.5440542216564812e+00 -6.8184624527978721e-01 + -2.1950840535691478e+00 1.7196999077876454e+00 -1.0053813419667046e+00 + -2.4219556638107136e+00 1.8745899008785381e+00 -1.3489857742400848e+00 + -2.6803655669006594e+00 1.9978027840702661e+00 -1.6645188981457193e+00 + -3.0065762489796439e+00 2.0796341922631947e+00 -1.9110913561866487e+00 + -3.3994790351819333e+00 2.1178720136550964e+00 -2.0793670392865407e+00 + -3.8361118899154589e+00 2.1149485699012214e+00 -2.1684053335351003e+00 + -4.2846083264858814e+00 2.0805131651654341e+00 -2.1580848601414888e+00 + -4.7063648256826882e+00 2.0359012929004283e+00 -2.0356281950065958e+00 + -5.0834932193823867e+00 2.0289732395223119e+00 -2.0648181004267818e+00 + id 13960 + loc 5.2569133043289185e-01 2.1010282635688782e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3088377797558719e-01:4.3087946913780745e-01:4.1518221678509903e-01:3.0701074098703318e-01:1.0191426401225763e+00:2.9838713046052184e-01:1.9672663251597171e+00:3.4591776978365096e-01:2.4133343259623530e+00:3.2956021663300095e-01:3.0072481326713905e+00:3.3650687319536748e-01:3.9469174335926223e+00 + CVs 20 + 1.1505098132556235e-03 3.2108270031562014e-01 1.6003502768510339e-01 + -3.1988449870060442e-02 6.2546928031201587e-01 3.1965026831832377e-01 + -9.1103245784327935e-02 9.1040536571979813e-01 4.6279104029851781e-01 + -1.8241273321791318e-01 1.1717418382359934e+00 5.8644664904226618e-01 + -2.9067405278469871e-01 1.3964689323067203e+00 6.8385570691862818e-01 + -3.7048558524692221e-01 1.5718421714861073e+00 7.4910419859405553e-01 + -4.0356665292691585e-01 1.6939300657218221e+00 7.9066705815025040e-01 + -4.1222761855917367e-01 1.7952023638797638e+00 8.2905729692538910e-01 + -4.0329333526847000e-01 1.9041403536705650e+00 8.7354889384082712e-01 + -3.8696853497284667e-01 2.0069515701742811e+00 9.1350100979835092e-01 + -3.9378252653688461e-01 2.0979193809768830e+00 9.2625220526118424e-01 + -4.2883489947366793e-01 2.2074825675870202e+00 9.2129810115477606e-01 + -4.6051276793453855e-01 2.3413641264996916e+00 9.4057291739371485e-01 + -4.6126727041383453e-01 2.4640182564080066e+00 9.9481112593760512e-01 + -4.3553513048901804e-01 2.5480886750029108e+00 1.0644141903428521e+00 + -3.9423155429525791e-01 2.6417030707961047e+00 1.1587082493184284e+00 + -3.0844816249742335e-01 2.7904473230435132e+00 1.3368956534692606e+00 + -1.9297594349106384e-01 2.9002244384289146e+00 1.5865637978269587e+00 + -3.8944995999640319e-01 2.7887574300848836e+00 1.5427172066591259e+00 + id 13961 + loc 6.1476325988769531e-01 2.5602564215660095e-01 402 + blend 0.0000000000000000e+00 + interp 4.4430024422129344e-01:3.8376942146348436e-01:2.0487372929343317e-01:3.6413540804207511e-01:1.0232303534145624e+00:3.8529733563110680e-01:1.7231437654071440e+00:3.7476312903217357e-01:2.0948231411279332e+00:4.4429580121885126e-01:2.8380824155824795e+00:3.8726087394227093e-01:3.1483396523269054e+00:4.1432337402413050e-01:3.8812287673158785e+00 + CVs 20 + 3.6094617059143497e-01 3.9331737482379714e-01 8.7998203768849648e-02 + 7.1171025063400606e-01 8.0703769387594215e-01 2.1079464704759224e-01 + 1.0503910416283693e+00 1.1966806481458516e+00 3.5733018830574875e-01 + 1.3918629880781612e+00 1.4977727476067408e+00 4.9113652078782044e-01 + 1.7390778722669453e+00 1.6759070085795951e+00 5.8742552986519292e-01 + 2.0832867003976738e+00 1.7414695903033257e+00 6.5687556839595396e-01 + 2.4249146370949455e+00 1.7154481184673860e+00 7.2928867057925628e-01 + 2.7672770058653318e+00 1.6040513663123146e+00 8.3368828054519029e-01 + 3.0831916498744731e+00 1.4031697051696037e+00 9.7891595641061180e-01 + 3.3154486960012686e+00 1.1284596120579868e+00 1.1423217475547405e+00 + 3.4305871190819435e+00 8.2517694596937730e-01 1.2874473539440503e+00 + 3.4505597507450174e+00 5.1076763092156208e-01 1.4144854508457723e+00 + 3.4212356906911525e+00 1.4838398274719822e-01 1.5576025023344005e+00 + 3.4169427731250814e+00 -3.0021209797643533e-01 1.7496888347176907e+00 + 3.5282666166812677e+00 -8.3243651760321780e-01 2.0133301085877497e+00 + 3.7927037877435925e+00 -1.3892620211514215e+00 2.3553987546534119e+00 + 4.1412014341763914e+00 -1.9095800927671145e+00 2.7712375281051065e+00 + 4.4567108803115110e+00 -2.3806842132161776e+00 3.2473342220012653e+00 + 4.6335328084217471e+00 -2.7991132648832520e+00 3.7146989003294673e+00 + id 13962 + loc 8.6927992105484009e-01 2.7964940667152405e-01 401 + blend 0.0000000000000000e+00 + interp 4.7329624003182902e-01:4.4141993323367995e-01:4.6692183962822598e-02:4.2862754255642865e-01:6.2666302134588436e-01:2.7300881061003657e-01:1.6064408748078298e+00:4.7329150706942874e-01:2.4100237310462704e+00:4.1994835233161182e-01:3.0117782293760391e+00:4.4283627041763329e-01:3.6574554277776681e+00 + CVs 20 + 3.3073573427113173e-01 4.3323526721107825e-01 4.0687100854972874e-02 + 6.3486203393067786e-01 8.9275924049465638e-01 1.3913920054074430e-01 + 9.0531746594362494e-01 1.3602010203292751e+00 2.9968692661197116e-01 + 1.1435287497150586e+00 1.8077806727130787e+00 5.3292590101860715e-01 + 1.3563421958150310e+00 2.2044789706330112e+00 8.3707488258720353e-01 + 1.5522988097629120e+00 2.5272515841374288e+00 1.1967838745299013e+00 + 1.7423730725853179e+00 2.7604151627028348e+00 1.5874242416078865e+00 + 1.9371219396890458e+00 2.8956376361500871e+00 1.9820614247251269e+00 + 2.1327233239713612e+00 2.9350370501253709e+00 2.3731570044125752e+00 + 2.3100036251918032e+00 2.8768611342531889e+00 2.7694989559944174e+00 + 2.4479197801843768e+00 2.7008835995359228e+00 3.1468970640136162e+00 + 2.5354178742739575e+00 2.3931465249074737e+00 3.4242331312542280e+00 + 2.5780248483965678e+00 2.0055424366590269e+00 3.5203755909669328e+00 + 2.6143117206207203e+00 1.6476082491017947e+00 3.4583651080458315e+00 + 2.7129608963019454e+00 1.3732815532698979e+00 3.3475344363436315e+00 + 2.9529294395029604e+00 1.1897799792840065e+00 3.2688614664156290e+00 + 3.3849016549338256e+00 1.1585477859487443e+00 3.2363373272384148e+00 + 3.9074721146467821e+00 1.2747701520348755e+00 3.2379001116286843e+00 + 4.3557551791514690e+00 1.1134913685964734e+00 3.3599138983718482e+00 + id 13963 + loc 1.1023379862308502e-01 2.6819017529487610e-01 378 + blend 0.0000000000000000e+00 + interp 4.9012129521345527e-01:3.2508235128236929e-01:9.2769313220995353e-02:4.5949896758725278e-01:8.9881062590369143e-01:3.4067098849120342e-01:1.1982550541116324e+00:4.7319346208272728e-01:1.9353136835696865e+00:3.9156574771525704e-01:2.1416923435476454e+00:4.7664769035969679e-01:2.9901178122852210e+00:4.9011639400050316e-01:3.5515925448700454e+00 + CVs 20 + 3.0368771147762175e-01 2.9468570017224111e-01 -3.7553045651421091e-01 + 5.5174080714157858e-01 5.2047073199439042e-01 -7.0859810093443043e-01 + 7.8989094131410065e-01 7.0827810149594728e-01 -1.0239239017159003e+00 + 1.0426575921009431e+00 8.8124323177073327e-01 -1.3311182960840560e+00 + 1.3123078372457044e+00 1.0495526644654949e+00 -1.6239249235872919e+00 + 1.6025261402215170e+00 1.2179854002835397e+00 -1.9030899508699877e+00 + 1.9205996039912288e+00 1.3828571851480036e+00 -2.1801792403974223e+00 + 2.2767951563125965e+00 1.5332506721290893e+00 -2.4677896925583629e+00 + 2.6831335071051088e+00 1.6517588093554030e+00 -2.7737932809458146e+00 + 3.1440655768411006e+00 1.7122499157614501e+00 -3.1030541148388644e+00 + 3.6437409663005544e+00 1.6799386684799562e+00 -3.4561444608822987e+00 + 4.1482899044647148e+00 1.5159510153198412e+00 -3.8214663726775315e+00 + 4.6153871709389991e+00 1.1953746187185597e+00 -4.1734053119002930e+00 + 5.0126975174295483e+00 7.5214630341168931e-01 -4.4921810208561501e+00 + 5.3530754410128942e+00 2.8442867502514035e-01 -4.7878838373652242e+00 + 5.6578670119059105e+00 -1.2181484685599209e-01 -5.0896687868550021e+00 + 5.8997016177845545e+00 -4.2833873079396545e-01 -5.4272779615831341e+00 + 6.0372849733388563e+00 -6.3975437994496964e-01 -5.7989854178255325e+00 + 6.1713966082443266e+00 -9.3696665911457933e-01 -6.0730876966938059e+00 + id 13964 + loc 2.7008208632469177e-01 5.4658818244934082e-01 395 + blend 0.0000000000000000e+00 + interp 5.0976972211440741e-01:3.1442368011826516e-01:4.3607176601830344e-01:3.6545189731150557e-01:1.0095194073687392e+00:3.4392784185140185e-01:1.5509506075010078e+00:4.1060259352487782e-01:2.3540198941790185e+00:3.4213698815191634e-01:3.0485148606371779e+00:5.0976462441718629e-01:3.8742944299593414e+00 + CVs 20 + 3.0192539632280130e-01 2.4780225494075572e-01 -1.8801362833343088e-01 + 5.6887099284465747e-01 4.5851527594033048e-01 -3.4332061733085706e-01 + 8.3923616767223341e-01 6.5287209988338202e-01 -4.8870700321702576e-01 + 1.1373947062324028e+00 8.4299649300760948e-01 -6.3428572626205915e-01 + 1.4668903328530514e+00 1.0228614945253129e+00 -7.7716628044065983e-01 + 1.8293334554702023e+00 1.1865443528822190e+00 -9.1705721955638053e-01 + 2.2246370754739941e+00 1.3307891150177553e+00 -1.0593307623452271e+00 + 2.6531629287412821e+00 1.4514541738225453e+00 -1.2115479253186892e+00 + 3.1197166638027438e+00 1.5377629602057075e+00 -1.3793404513403655e+00 + 3.6302321394356336e+00 1.5700092656093869e+00 -1.5701791125398588e+00 + 4.1721092602977841e+00 1.5234466551139687e+00 -1.7932651640214095e+00 + 4.7069571331555515e+00 1.3852980213086468e+00 -2.0454255420246739e+00 + 5.2020629015715603e+00 1.1640710035231410e+00 -2.3097245152137620e+00 + 5.6491853315636789e+00 8.7183784171455958e-01 -2.5731233349889306e+00 + 6.0473346987426861e+00 5.1471826777104868e-01 -2.8300010042282313e+00 + 6.3897695313460678e+00 1.0071493322363878e-01 -3.0753178091370881e+00 + 6.6675293481741917e+00 -3.5410968160158030e-01 -3.2993491851817844e+00 + 6.8757148609276433e+00 -8.2182078101843192e-01 -3.4855152026262752e+00 + 7.0087349648954884e+00 -1.1629921018971863e+00 -3.5933404010490047e+00 + id 13965 + loc 5.3999072313308716e-01 8.4937846660614014e-01 393 + blend 0.0000000000000000e+00 + interp 4.6914583120005127e-01:4.6914113974173927e-01:1.8050112732362378e-01:3.9143373858766162e-01:7.5664241706685087e-01:3.1208059981486969e-01:1.6356586243783986e+00:3.8284878014009904e-01:2.3599893475504565e+00:4.1552288316164909e-01:2.9404550001138983e+00:2.7395288287358793e-01:3.2504879446281949e+00:3.8951587190627696e-01:3.9560907946551676e+00 + CVs 20 + -2.3958515600372768e-01 2.8762496918671682e-01 -2.1403942059354861e-01 + -4.7594804899399590e-01 5.6447991726703828e-01 -4.1074166554832020e-01 + -7.0649395959871675e-01 8.4260179526058032e-01 -6.1351992992370219e-01 + -9.3498787308800901e-01 1.1238839289894094e+00 -8.2958765689228053e-01 + -1.1746280713337602e+00 1.4049827046512657e+00 -1.0532294129618114e+00 + -1.4366879773795387e+00 1.6801844583548551e+00 -1.2775632316501562e+00 + -1.7269530694442494e+00 1.9404022326496440e+00 -1.4948158159235740e+00 + -2.0493287444754245e+00 2.1695303768351497e+00 -1.6980284524341935e+00 + -2.4166062706604556e+00 2.3446703951522112e+00 -1.8898484222101930e+00 + -2.8429303881490364e+00 2.4483477187458358e+00 -2.0907749980561907e+00 + -3.3158939540097827e+00 2.4800219627993840e+00 -2.3305856246629357e+00 + -3.8064086973782656e+00 2.4380617536993281e+00 -2.6209502435470169e+00 + -4.3007519072168696e+00 2.2971909140354390e+00 -2.9518806251800807e+00 + -4.7836594259136263e+00 2.0285525533824140e+00 -3.3133277699948822e+00 + -5.2333761036209392e+00 1.6292324593907774e+00 -3.6948433607254034e+00 + -5.6714201559362838e+00 1.1179761361405074e+00 -4.0348663331861818e+00 + -6.1614518330979795e+00 5.3821697189230022e-01 -4.2099475332636738e+00 + -6.6904746654752270e+00 -2.9446705821460029e-02 -4.1809885207596649e+00 + -7.1319046468857543e+00 -5.5784401886793566e-01 -4.2753935542145527e+00 + id 13966 + loc 6.2340229749679565e-01 1.2534606456756592e-01 379 + blend 0.0000000000000000e+00 + interp 5.0771617189038887e-01:3.6571679889625053e-01:2.0492046421531462e-01:1.8456710730425507e-01:1.1136976838954298e+00:5.0771109472866993e-01:2.1764634521395378e+00:3.8743857107101498e-01:2.9840947833562828e+00:2.1964443158965533e-01:3.3342494651914176e+00 + CVs 20 + 5.3305592943487778e-01 3.0259160029105714e-01 -5.5216536181914681e-02 + 9.7525801371179677e-01 5.2504447006076305e-01 -1.8901112702271289e-01 + 1.3691392184799855e+00 6.7644235705467137e-01 -3.6829900365108859e-01 + 1.7526426156274559e+00 8.1951316753647152e-01 -5.6871514997640504e-01 + 2.1364536044368792e+00 1.0012207043536026e+00 -7.5699298931293668e-01 + 2.5265814928101515e+00 1.2346961005350450e+00 -8.9819933813553798e-01 + 2.9260190479453785e+00 1.5159004006850039e+00 -9.6881253510405407e-01 + 3.3256276037025496e+00 1.8335293955408654e+00 -9.5786824460311681e-01 + 3.7126119269468512e+00 2.1711769590958703e+00 -8.6662839147319759e-01 + 4.0880756834919199e+00 2.5115008846111468e+00 -7.0269718007709403e-01 + 4.4760562392455991e+00 2.8374210727178806e+00 -4.6857875529544907e-01 + 4.9159259374950031e+00 3.1244861136884188e+00 -1.4368806398274031e-01 + 5.4176448039083906e+00 3.3091856442608156e+00 3.0284896386952337e-01 + 5.9314293369876800e+00 3.2979575166596442e+00 8.7074103397532743e-01 + 6.3577028617998295e+00 3.0354171102147860e+00 1.5143268108468759e+00 + 6.6174804382149368e+00 2.5463334752891971e+00 2.1299551656234637e+00 + 6.7714554795344917e+00 1.9044429942985763e+00 2.5465125218529483e+00 + 6.9497294194935417e+00 1.2928861442753332e+00 2.5832444261388101e+00 + 7.1871139495402394e+00 8.2029265435419996e-01 2.3308039440948454e+00 + id 13967 + loc 2.1912701427936554e-02 2.1240903064608574e-02 396 + blend 0.0000000000000000e+00 + interp 4.5810274903755177e-01:3.3239460502838342e-01:9.0568978878152184e-01:3.0281370297983584e-01:1.8321017778653685e+00:4.5809816801006142e-01:2.2741696586551425e+00:3.3126681680537673e-01:2.9639349478936556e+00:3.8316225090204237e-01:3.4052169187778105e+00:4.0741869282627557e-01:3.9919255690591120e+00 + CVs 20 + -2.1303694225895023e-01 1.9696930885766598e-01 -5.4694752429742599e-01 + -3.9558644156616907e-01 3.0921656620905508e-01 -9.4905030751246333e-01 + -5.6618685614127617e-01 4.0136821650869015e-01 -1.3009738640020414e+00 + -7.3214163191544734e-01 4.9912450895942273e-01 -1.6378100274975336e+00 + -8.9306294935749775e-01 6.0181730607346706e-01 -1.9622110380628406e+00 + -1.0486029724971975e+00 7.0979645617060372e-01 -2.2794711943181261e+00 + -1.2012599604143595e+00 8.2542847816912279e-01 -2.5990829011100169e+00 + -1.3543909195715871e+00 9.4840297104652604e-01 -2.9367087592699019e+00 + -1.5048878999304782e+00 1.0690108667996334e+00 -3.3101846786819964e+00 + -1.6501983939585796e+00 1.1677407307173198e+00 -3.7318125786079799e+00 + -1.8072762758792202e+00 1.2131489460351665e+00 -4.1987526076040362e+00 + -1.9983900001777342e+00 1.1694673193407596e+00 -4.6862616892529818e+00 + -2.2180975041277589e+00 1.0185152893117853e+00 -5.1636188619300549e+00 + -2.4427782454512474e+00 7.6371486637632380e-01 -5.6090689023078424e+00 + -2.6624817080385710e+00 4.1826399168196104e-01 -6.0078182239924542e+00 + -2.8832694778595815e+00 -4.7498561206031908e-03 -6.3470618653791391e+00 + -3.0998705792075913e+00 -4.8787889641489368e-01 -6.6096773211314552e+00 + -3.2864771246305033e+00 -9.9377627302267957e-01 -6.7756067535298810e+00 + -3.4070511696221075e+00 -1.4333729790503584e+00 -6.8024482361142065e+00 + id 13968 + loc 9.6491569280624390e-01 9.4398015737533569e-01 412 + blend 0.0000000000000000e+00 + interp 6.0532492267708782e-01:2.9539502395284623e-01:6.9069815293505066e-01:4.3073271510783256e-01:1.1807506516770605e+00:6.0531886942786106e-01:2.6176347068007635e+00:3.6907332399622306e-01:2.9467737504686156e+00:4.9974523956515438e-01:3.2142219438741515e+00:4.5791719308789369e-01:3.9951568481812862e+00 + CVs 20 + 8.6114897401083745e-01 1.7047873177835104e-01 -2.0750883382891444e-01 + 1.4280136884081924e+00 2.1888215936222791e-01 -3.9281391134505189e-01 + 1.9251355185418331e+00 2.1370478576508528e-01 -5.7746026538269946e-01 + 2.4626585804395842e+00 1.8666973241420121e-01 -7.6934723415388429e-01 + 3.0301401830476564e+00 1.3284614082785062e-01 -9.5955281850931839e-01 + 3.6137102740568077e+00 5.0843205288038540e-02 -1.1387002664821630e+00 + 4.1984690897017760e+00 -5.6969484015639282e-02 -1.2986561578984941e+00 + 4.7705074725172611e+00 -1.8614904267821464e-01 -1.4338495075150393e+00 + 5.3175506796945218e+00 -3.3116223329591121e-01 -1.5421973805365881e+00 + 5.8300114123906415e+00 -4.8617984733106256e-01 -1.6240061028746868e+00 + 6.3037286145525169e+00 -6.5421299168259095e-01 -1.6859896488652877e+00 + 6.7427746614508743e+00 -8.5724473841839499e-01 -1.7484880459547472e+00 + 7.1504316711775333e+00 -1.1170337544078484e+00 -1.8342794642817120e+00 + 7.5243594019125792e+00 -1.4257655112440559e+00 -1.9469726734903401e+00 + 7.8659856918583282e+00 -1.7651682272707954e+00 -2.0798523394675699e+00 + 8.1758137973180869e+00 -2.1247321058023854e+00 -2.2326487203593004e+00 + 8.4516403136689959e+00 -2.4942137571748386e+00 -2.4082012151077965e+00 + 8.6938678785717940e+00 -2.8580515417165682e+00 -2.6004148034071362e+00 + 8.9214770803087529e+00 -3.1260505149747972e+00 -2.7303912147700564e+00 + id 13969 + loc 1.5728652477264404e-01 2.7698315680027008e-03 407 + blend 0.0000000000000000e+00 + interp 3.1124180688063952e-01:3.0860537884056655e-01:9.5032883910330712e-01:2.6365521430167244e-01:1.7466451991148049e+00:2.5114420943651844e-01:2.9123660592236797e+00:3.1123869446257074e-01:3.9344162264942906e+00 + CVs 20 + -9.1249981860107281e-03 2.9669079701061152e-01 -2.2737482585011032e-01 + -2.6629869116098857e-02 4.6506980783144025e-01 -2.9976966877033340e-01 + -3.3861234882822493e-02 6.1307760311821380e-01 -3.1035130306473946e-01 + -2.3570310992251015e-02 7.6193246018452865e-01 -3.3734484971828405e-01 + 7.1988632374670285e-03 9.0861549222976179e-01 -3.7966797647804701e-01 + 6.3856042438530547e-02 1.0481582368684486e+00 -4.3500715647832594e-01 + 1.5250876285936754e-01 1.1705237791122940e+00 -4.9921893674888940e-01 + 2.7595673579327129e-01 1.2616963231603040e+00 -5.6656271505094136e-01 + 4.3163473461283858e-01 1.3083406435053129e+00 -6.3260824319102782e-01 + 6.1405461695074737e-01 1.3015314842267269e+00 -6.9601465489336833e-01 + 8.1750845569085728e-01 1.2376455154073307e+00 -7.5836856462592517e-01 + 1.0362438863961450e+00 1.1172303784196327e+00 -8.2292790425417062e-01 + 1.2645543947211795e+00 9.4204069476847718e-01 -8.9116888881448730e-01 + 1.5011622469785084e+00 7.1217986336698713e-01 -9.6267266084398673e-01 + 1.7557784300660026e+00 4.3207649530357128e-01 -1.0422941162370825e+00 + 2.0430652345613707e+00 1.2158767519820562e-01 -1.1436090767828830e+00 + 2.3661569580851189e+00 -1.8728363936465270e-01 -1.2804030989225041e+00 + 2.7138931381466316e+00 -4.6642021044760873e-01 -1.4573576620194046e+00 + 3.0258899581784253e+00 -7.0416988318130613e-01 -1.6165631058074839e+00 + id 13970 + loc 5.3196889162063599e-01 7.9927587509155273e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4754224892463623e-01:2.6732858613975180e-01:2.7939068334571204e-01:2.8953412048415533e-01:1.0097669980490374e+00:2.6651860923011589e-01:1.9308882581527596e+00:3.5680330241755004e-01:2.5314169308498053e+00:4.4753777350214702e-01:3.0367924308882177e+00:2.5876140498529382e-01:3.6348837713445334e+00 + CVs 20 + 9.4404675522791040e-02 2.5727868956949007e-01 4.0724156764856509e-02 + 1.7911061701364248e-01 5.2169668933721969e-01 6.9020400735443410e-02 + 2.6975808612338215e-01 8.0497090189417964e-01 8.0195415777107981e-02 + 3.8359784881994802e-01 1.1129089388744262e+00 6.8394135434330428e-02 + 5.2989680825715013e-01 1.4412176207943115e+00 1.6867253412000460e-02 + 7.1527774209520034e-01 1.7768754450328978e+00 -9.2622829880738111e-02 + 9.3946633729774764e-01 2.0984746761262221e+00 -2.7623959803557052e-01 + 1.1934180322369057e+00 2.3800163259453786e+00 -5.4439343569995757e-01 + 1.4597725742062695e+00 2.5955907439624486e+00 -9.0178775607233230e-01 + 1.7112014415190999e+00 2.7194074163847830e+00 -1.3457255576477083e+00 + 1.9173038800016045e+00 2.7280297132506361e+00 -1.8603717951200773e+00 + 2.0491114633278316e+00 2.6062234860740765e+00 -2.4037130610898569e+00 + 2.0929838974556607e+00 2.3705488557334724e+00 -2.8974798080776365e+00 + 2.0793140756090631e+00 2.0940228524498679e+00 -3.2512547040911901e+00 + 2.0625627100115174e+00 1.8940894633521486e+00 -3.3810756223968546e+00 + 2.0566385979218760e+00 1.8339728266026822e+00 -3.1739381534162723e+00 + 1.9716986286500147e+00 1.7069656684419592e+00 -2.6094193010438276e+00 + 1.6497165947428454e+00 1.1955498249670475e+00 -2.0088819821158759e+00 + 1.7403309462509673e+00 1.3025442001171377e+00 -2.1072432174935836e+00 + id 13971 + loc 2.6342454552650452e-01 4.5519816875457764e-01 400 + blend 0.0000000000000000e+00 + interp 5.0088982322804088e-01:3.3896803782533935e-01:3.5572501815001789e-01:3.9700608208453364e-01:1.0340809014455516e+00:3.5158832214972940e-01:2.0046766107450789e+00:3.1232753443327865e-01:2.6449131962812218e+00:3.5517524527968986e-01:3.0341816931365351e+00:4.9932421949802241e-01:3.4658032975529687e+00:5.0088481432980858e-01:3.9138530559014924e+00 + CVs 20 + -1.2811035157643902e-01 2.5507816952429363e-01 2.9311449929616029e-01 + -2.8542864620480612e-01 4.9975852030692747e-01 5.5446007673444175e-01 + -4.8450454093597384e-01 7.3247611985573990e-01 7.8991222332667022e-01 + -7.2720706761340681e-01 9.4961881478806731e-01 9.9698847418091496e-01 + -1.0063894870191539e+00 1.1480823187257827e+00 1.1693717832744999e+00 + -1.3132117933494802e+00 1.3268116137973978e+00 1.3049359175987989e+00 + -1.6395377584426687e+00 1.4845038499684446e+00 1.4032944321110639e+00 + -1.9782174995244954e+00 1.6164463319359470e+00 1.4619574430528743e+00 + -2.3209288243331789e+00 1.7160131320149623e+00 1.4767143972912369e+00 + -2.6575323659051864e+00 1.7784367271028145e+00 1.4448090396961022e+00 + -2.9906375593710184e+00 1.8005518940108827e+00 1.3680542393160084e+00 + -3.3461816869855738e+00 1.7747493642672769e+00 1.2546541125781845e+00 + -3.7483950698633475e+00 1.6864433593627772e+00 1.1220845494049425e+00 + -4.1992289905164482e+00 1.5146705750585148e+00 9.9992687597843288e-01 + -4.6839618188294949e+00 1.2294272524698822e+00 9.2717099003869574e-01 + -5.1762918912577716e+00 8.1119984060119199e-01 9.4674378422033956e-01 + -5.6419233524592194e+00 2.9027173384580252e-01 1.0869432129215961e+00 + -6.0400831901809742e+00 -2.4678653752532242e-01 1.3253288838645578e+00 + -6.3301826559494137e+00 -6.6698642058524427e-01 1.5378518793926113e+00 + id 13972 + loc 2.1009436249732971e-01 5.0703918933868408e-01 403 + blend 0.0000000000000000e+00 + interp 3.3425515217297824e-01:3.1760951552809469e-01:5.2750073048937618e-01:2.8589313570902802e-01:1.0166107624209848e+00:2.8047998325863993e-01:2.0036536677841852e+00:3.3425180962145651e-01:3.0001366216164942e+00:2.7074540016266929e-01:3.9885265324475920e+00 + CVs 20 + -3.2546438099685826e-02 1.5247146247018495e-01 -1.2649766230053472e-01 + -6.2383767913707755e-02 3.1793258192546447e-01 -2.5903073700886042e-01 + -1.0968296724759774e-01 4.8961018633230258e-01 -3.9767766148315675e-01 + -1.8453521907057885e-01 6.5748596797286241e-01 -5.3991099459237712e-01 + -2.9168519266388182e-01 8.1502386662248871e-01 -6.8407311139718374e-01 + -4.3426889853109063e-01 9.5555164826504013e-01 -8.2716377696464360e-01 + -6.1354926384065056e-01 1.0735013530784496e+00 -9.6428012489930337e-01 + -8.2753501597986201e-01 1.1652231852645145e+00 -1.0894657111419881e+00 + -1.0715754415120624e+00 1.2293325221301981e+00 -1.1971779016689572e+00 + -1.3401494045699855e+00 1.2639916903058124e+00 -1.2825798143238758e+00 + -1.6263050928108749e+00 1.2656944035572868e+00 -1.3412602323902933e+00 + -1.9209480664047136e+00 1.2318372253028438e+00 -1.3697142440241812e+00 + -2.2143681793240413e+00 1.1630242152611898e+00 -1.3655413040934632e+00 + -2.4977832566081446e+00 1.0626466854765990e+00 -1.3268334459257123e+00 + -2.7638173892907365e+00 9.3647259254045900e-01 -1.2518950000803224e+00 + -3.0065354214842968e+00 7.9227152844953874e-01 -1.1398744926119795e+00 + -3.2168946011491304e+00 6.3606982167933568e-01 -9.9663070225367678e-01 + -3.3855964486186148e+00 4.7414021224483283e-01 -8.3893074450566130e-01 + -3.5464228728190528e+00 3.7490189306620691e-01 -7.3950532341704356e-01 + id 13973 + loc 9.9862325191497803e-01 7.5319647789001465e-01 380 + blend 0.0000000000000000e+00 + interp 3.6616150706849865e-01:3.6615784545342800e-01:5.7685160978161543e-01:2.8165160581020832e-01:1.3495696304950315e+00:1.5734612088328961e-01:2.0111014650022900e+00:3.0463372911237174e-01:3.0162467623717428e+00:2.7640305446549140e-01:3.8153862804306775e+00 + CVs 20 + -4.2238367385210779e-01 2.2821027239237626e-01 -6.5720005713735452e-01 + -7.8914316466276502e-01 3.7526072390483622e-01 -1.0851012403093114e+00 + -1.1379753103920389e+00 4.8633975313920985e-01 -1.4624459963033818e+00 + -1.4734519953262315e+00 5.7999290611559795e-01 -1.8602082392502959e+00 + -1.7825257578921225e+00 6.4904622057432004e-01 -2.2799863512260186e+00 + -2.0556948986836567e+00 6.9006307550838786e-01 -2.7224029890053005e+00 + -2.2922039972397124e+00 7.0040231375356976e-01 -3.1882002611477636e+00 + -2.4932636088700679e+00 6.7405963214314557e-01 -3.6766180089626599e+00 + -2.6534867883567896e+00 5.9909841608131065e-01 -4.1833942198960550e+00 + -2.7668043233778885e+00 4.6074970228665091e-01 -4.6983248594168394e+00 + -2.8426426878082434e+00 2.5290755594638559e-01 -5.2026567416246694e+00 + -2.8978629073783275e+00 -1.9132707535702398e-02 -5.6701904133325272e+00 + -2.9319193551954279e+00 -3.5352854933425837e-01 -6.0688495475238931e+00 + -2.9311034090407357e+00 -7.7338511582824854e-01 -6.3635524071432821e+00 + -2.8970172133536956e+00 -1.2967522346828022e+00 -6.5475043261703076e+00 + -2.8544768081608289e+00 -1.8990636089658826e+00 -6.6748602342540337e+00 + -2.8423620030862695e+00 -2.5274209465126742e+00 -6.8083761139833534e+00 + -2.9108923539624438e+00 -3.1134868196045877e+00 -6.9673031030716706e+00 + -3.1521092008127489e+00 -3.5442983098064906e+00 -7.1014296286907141e+00 + id 13974 + loc 1.2638883292675018e-01 5.1368165016174316e-01 373 + blend 0.0000000000000000e+00 + interp 4.5113581125980173e-01:2.6932586596988728e-01:9.5519236690798426e-01:4.5113129990168915e-01:1.5905739540914423e+00:2.9317080381075400e-01:2.1138244351965567e+00:4.0038140808621153e-01:3.1054103814393623e+00:2.7647950868231519e-01:3.9510510095881366e+00 + CVs 20 + -3.0721896431488760e-01 8.8426748761765361e-01 -2.0862925191321738e-01 + -5.3199836983356641e-01 1.8008112519869941e+00 -4.6371566417670862e-01 + -5.6827326782645937e-01 2.7060076625203928e+00 -8.2069557568531160e-01 + -3.4097411116624765e-01 3.4948845679153040e+00 -1.2843234901583669e+00 + 1.4651532998924210e-01 4.0430054849765451e+00 -1.7989421961196064e+00 + 8.0736927085366306e-01 4.2639360930642107e+00 -2.2747973658619935e+00 + 1.5418452329332075e+00 4.1504874502606155e+00 -2.6441770147663459e+00 + 2.2825328882073714e+00 3.7542197250004730e+00 -2.8788290186436587e+00 + 2.9650756795858029e+00 3.1708211621331461e+00 -2.9596008972923773e+00 + 3.5321776044652666e+00 2.5440529015544624e+00 -2.8816953324123329e+00 + 3.9643117576528808e+00 1.9912727865383097e+00 -2.6831993738763482e+00 + 4.2810064954384215e+00 1.5291061572459679e+00 -2.4106249328817202e+00 + 4.4846362116943483e+00 1.1248030529562005e+00 -2.0575521107621877e+00 + 4.4924880984896216e+00 7.7149561257598509e-01 -1.5686546604714469e+00 + 4.2108077969713307e+00 4.0779708663699776e-01 -7.4732879797526053e-01 + 3.9451661984754178e+00 -4.7368779071750300e-01 4.0520911879594124e-01 + 4.2328172461423419e+00 -1.9192496210713756e+00 9.4375432499610412e-01 + 4.9460548025576649e+00 -3.0766468109530800e+00 5.2035160221200782e-01 + 5.7023150922654242e+00 -3.3370583449365205e+00 -1.6647478773597582e-01 + id 13975 + loc 4.3884694576263428e-01 2.3004770278930664e-01 399 + blend 0.0000000000000000e+00 + interp 4.4709962165114070e-01:4.4709515065492422e-01:3.0757316117807465e-01:4.0282633973554505e-01:1.0058221876324924e+00:4.0156572972688342e-01:1.9246025442214387e+00:2.5250349833378444e-01:2.1681255225850640e+00:4.0851874423763718e-01:3.0366360680975140e+00:3.9934470875198319e-01:3.8932369258712094e+00 + CVs 20 + -1.9973840619901545e-01 3.7343889451951368e-01 1.4845127677882411e-01 + -4.1667115990458781e-01 7.2796521903648992e-01 2.8167002152026915e-01 + -6.5815152503633823e-01 1.0585066288239144e+00 3.9830046264226449e-01 + -9.1083246973150134e-01 1.3666277007702043e+00 5.1347169601179465e-01 + -1.1598203136024599e+00 1.6565801761750947e+00 6.4457079837838194e-01 + -1.4018655748354965e+00 1.9303896792922774e+00 8.0099609711331565e-01 + -1.6431382110402846e+00 2.1872667536862034e+00 9.8756014107173051e-01 + -1.8938404887942828e+00 2.4228854188046092e+00 1.2099371139676141e+00 + -2.1644308646487227e+00 2.6271860820327348e+00 1.4757491205993056e+00 + -2.4628069845985734e+00 2.7821427862662591e+00 1.7931536458022639e+00 + -2.7821204564819797e+00 2.8625433763695818e+00 2.1600427150758823e+00 + -3.0875759939079450e+00 2.8590482856668857e+00 2.5466999292005905e+00 + -3.3404727841147874e+00 2.8024104746121088e+00 2.9099669127684820e+00 + -3.5104689278303902e+00 2.7444472583629871e+00 3.2113954229004316e+00 + -3.5623254213203670e+00 2.7178712718887272e+00 3.4278899335288688e+00 + -3.4786075616557168e+00 2.6876184528445810e+00 3.6086678451184584e+00 + -3.3001826571300579e+00 2.5662612877444340e+00 3.8903351060466229e+00 + -3.2217678660908744e+00 2.3524780061973471e+00 4.3126270616139850e+00 + -3.3909965001738920e+00 2.4262478477473253e+00 4.4241321853204427e+00 + id 13976 + loc 2.1659997105598450e-01 9.1486203670501709e-01 382 + blend 0.0000000000000000e+00 + interp 4.8128685671959343e-01:2.6335562787470829e-01:8.0275787436387824e-01:3.5604963422686015e-01:1.1775496093673319e+00:3.8861521120167059e-01:1.7507895043679844e+00:3.2841952764472804e-01:2.2373984183618916e+00:2.7123109611208235e-01:3.1041878494206179e+00:4.8128204385102624e-01:3.9742548482417210e+00 + CVs 20 + 1.0314913395748724e+00 1.8848737353964645e-01 -4.8562122615346076e-01 + 1.7057563414150112e+00 2.3967050395961881e-01 -8.8153236168754379e-01 + 2.2741207667927434e+00 2.5646455344346719e-01 -1.2670150098510495e+00 + 2.8361067945818248e+00 2.8238224177353832e-01 -1.6719202482181768e+00 + 3.3812922375353667e+00 3.1126948012539613e-01 -2.0857873299768004e+00 + 3.9140070965738358e+00 3.3239635967420011e-01 -2.5049350932658312e+00 + 4.4465667546939684e+00 3.2965724365936555e-01 -2.9305545235545285e+00 + 4.9936576697243691e+00 2.7951655661053887e-01 -3.3665735117054227e+00 + 5.5634461754104443e+00 1.5186983455305669e-01 -3.8139384212413847e+00 + 6.1458892831091712e+00 -7.9698480270333327e-02 -4.2671863140862181e+00 + 6.7129469460791702e+00 -4.2444827708028154e-01 -4.7239971133774272e+00 + 7.2287490773215248e+00 -8.8308699417337788e-01 -5.1772725873510979e+00 + 7.6607214597768483e+00 -1.4504300102337975e+00 -5.6026463350821336e+00 + 7.9892857869898721e+00 -2.1027034315271123e+00 -5.9740661156760000e+00 + 8.2068980787461498e+00 -2.8065670401307696e+00 -6.2732273520619746e+00 + 8.3153218038705816e+00 -3.5300292368218784e+00 -6.4921979238159766e+00 + 8.3255734976871079e+00 -4.2391851375575618e+00 -6.6253026275150395e+00 + 8.2642782491331293e+00 -4.8860482192150503e+00 -6.6671920663654163e+00 + 8.2091208779304736e+00 -5.3201429056730927e+00 -6.6037186343999803e+00 + id 13977 + loc 4.3550559878349304e-01 2.3061124980449677e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0066531614515727e-01:3.2956021663300095e-01:1.0266446448825906e-02:3.1157115781538014e-01:8.9457852376940250e-01:2.9764170987407834e-01:1.4296431962269893e+00:3.1526376056199945e-01:2.0211504728812417e+00:4.0066130949199585e-01:2.9547068429776693e+00:3.9055881550559440e-01:3.4283889199580520e+00 + CVs 20 + -1.1833876906264609e-01 3.4083997845921543e-01 -1.2403135970999177e-01 + -2.5602629573055702e-01 6.5968015402529767e-01 -2.7236881063233365e-01 + -3.8003908687072369e-01 9.4281328993061730e-01 -4.4366370632684543e-01 + -4.7982298852414718e-01 1.1732498667057583e+00 -6.4998962986355568e-01 + -5.6203167791433140e-01 1.3826158852132990e+00 -8.7883265220434859e-01 + -6.3503831156384938e-01 1.6536185506275058e+00 -1.0829665208049639e+00 + -6.9413059936919175e-01 2.0299164782572543e+00 -1.1838458820955271e+00 + -7.5477631841347148e-01 2.4618155050164581e+00 -1.1429033049741444e+00 + -8.7058994294696013e-01 2.8967987476918120e+00 -9.6626127155455688e-01 + -1.1125463319876423e+00 3.2660007304286975e+00 -6.2601066503599534e-01 + -1.5156586625327515e+00 3.3934023385341221e+00 -1.1714581849667560e-01 + -1.9554135433800792e+00 3.1226004568135100e+00 4.1054696808606850e-01 + -2.2659295796643266e+00 2.5528444838654529e+00 7.7427674928728385e-01 + -2.4395754449861888e+00 1.8843146574921958e+00 9.1469827964326889e-01 + -2.5333583410905760e+00 1.2236787430778548e+00 8.6175538117350037e-01 + -2.5099040388783078e+00 5.6250889224353040e-01 6.2867637786289587e-01 + -2.2720411216545831e+00 -5.1521209590583594e-02 1.9298674075353425e-01 + -1.9095195302374730e+00 -4.8423343308572198e-01 -3.5348972138759061e-01 + -1.8829723406291470e+00 -8.8702826866678230e-01 -5.9418142601850554e-01 + id 13978 + loc 2.2275343537330627e-01 3.5446795821189880e-01 402 + blend 0.0000000000000000e+00 + interp 4.6213100604476509e-01:3.7248901404009394e-01:4.7624605025804179e-01:4.3190295577440191e-01:1.1081060485303591e+00:3.6108711256026588e-01:1.9790967823987753e+00:4.6212638473470469e-01:2.6910414358006980e+00:3.6602171863374294e-01:3.0378608730687988e+00:3.6609711341337337e-01:3.7821673237960614e+00 + CVs 20 + -1.4970065673936489e-01 3.7567598468171787e-01 1.7399853355295802e-01 + -3.3612910226893189e-01 7.5365755803179446e-01 3.3638413064241579e-01 + -5.7932799360108922e-01 1.1274059723407461e+00 4.6397045526147673e-01 + -8.8261509570748831e-01 1.4815640134905546e+00 5.6037701258931927e-01 + -1.2396994999644058e+00 1.7989894538238356e+00 6.4230717650079228e-01 + -1.6423513022618237e+00 2.0630177085849630e+00 7.1874347543511807e-01 + -2.0794828426596941e+00 2.2570263752864417e+00 7.9399315934116466e-01 + -2.5324023262484663e+00 2.3690704417033648e+00 8.7580732725598998e-01 + -2.9787459275269375e+00 2.3943130403051667e+00 9.6466829854788894e-01 + -3.3951586151859372e+00 2.3329105980157769e+00 1.0447688862142899e+00 + -3.7489448768055440e+00 2.1908750129131311e+00 1.1004050652736521e+00 + -4.0013041682798018e+00 1.9898336338848406e+00 1.1317040767477766e+00 + -4.1453030546723895e+00 1.7748428333063901e+00 1.1515760874499192e+00 + -4.2332303050598412e+00 1.5833667896657750e+00 1.1803496057560940e+00 + -4.3295425177876785e+00 1.4109259667198115e+00 1.2403659490875352e+00 + -4.4692228440148307e+00 1.2291197116052575e+00 1.3602639025584731e+00 + -4.6478540311507315e+00 1.0304544225422672e+00 1.5751894990526754e+00 + -4.8279555696968108e+00 8.6983172466535508e-01 1.8541272759681835e+00 + -4.9517922043249500e+00 8.6075125621752857e-01 2.0121509999451082e+00 + id 13979 + loc 4.5744106173515320e-01 7.1029520034790039e-01 415 + blend 0.0000000000000000e+00 + interp 4.8388738503918516e-01:2.2017109285514941e-01:5.6590608113973873e-01:3.3737415501267087e-01:1.0489397047004823e+00:2.6844110024521273e-01:1.6826198906082497e+00:2.2782969270341136e-01:2.2762968550127849e+00:4.8388254616533477e-01:3.0657904529406013e+00:2.7860228246886359e-01:3.8903372870412696e+00 + CVs 20 + 3.6338461032576908e-01 2.1754451132922331e-01 1.0425122368397427e-01 + 6.5407741170611255e-01 3.4270193722044440e-01 1.5891781929594698e-01 + 9.3367374791491875e-01 4.2686241042042339e-01 2.1407060621377788e-01 + 1.2370287949507430e+00 4.9371008524712046e-01 2.9868092040266070e-01 + 1.5602646348574796e+00 5.3707850272330082e-01 4.1676316721030410e-01 + 1.8959475752394894e+00 5.5166881443870419e-01 5.7373004671678329e-01 + 2.2349188409171927e+00 5.3446195834151966e-01 7.7573967676295230e-01 + 2.5674974580478982e+00 4.8457420087227132e-01 1.0252414039861382e+00 + 2.8829317468454319e+00 4.0379992334174863e-01 1.3197527728925678e+00 + 3.1705374887896687e+00 2.9676589853694879e-01 1.6534082519531799e+00 + 3.4325608659571945e+00 1.6520926793546042e-01 2.0083025126571603e+00 + 3.7023473336215575e+00 -1.6129278557088789e-03 2.3399409593424600e+00 + 4.0184603178375262e+00 -2.1870017273624054e-01 2.5859085372969934e+00 + 4.3662887718373709e+00 -4.7850256971564598e-01 2.7177207506923660e+00 + 4.7036570482970674e+00 -7.5880440300444496e-01 2.7622406987150767e+00 + 5.0147669519107936e+00 -1.0461510741929105e+00 2.7327407780697550e+00 + 5.2990078611727753e+00 -1.3277738282861269e+00 2.6151203551416220e+00 + 5.5556159011208841e+00 -1.5854447473412177e+00 2.4166779579616824e+00 + 5.8326238827114363e+00 -1.7942889367699513e+00 2.4452723631604449e+00 + id 13980 + loc 9.7110733389854431e-02 9.5897424221038818e-01 401 + blend 0.0000000000000000e+00 + interp 4.0977966464125959e-01:4.0348809520404644e-01:1.3256861226567440e-01:3.5241895033547210e-01:9.8218657319955394e-01:3.3039410321797419e-01:1.3244466258255787e+00:2.6814234608523674e-01:2.3116980267551486e+00:3.6308270561904499e-01:3.0421608441165739e+00:4.0977556684461319e-01:3.7584055636916043e+00 + CVs 20 + 3.6560162777242611e-02 3.2683466338389827e-01 -2.2874255588030706e-01 + 6.9581844779957408e-02 6.5112122079024171e-01 -5.1136582629977378e-01 + 1.0574617643726408e-01 9.7283829284982437e-01 -8.1825977720763721e-01 + 1.4105346986286643e-01 1.2687014177556208e+00 -1.1411620711701058e+00 + 1.5924966035995525e-01 1.5259098043131498e+00 -1.4818186619988931e+00 + 1.3088953873302256e-01 1.7497255156696547e+00 -1.8392648241137401e+00 + 2.7349487582994270e-02 1.9387840725113348e+00 -2.2009404652463433e+00 + -1.5987787969370404e-01 2.0764761023400515e+00 -2.5405829339952204e+00 + -4.1121343458221526e-01 2.1487663668312011e+00 -2.8296229854438364e+00 + -6.8504988074565754e-01 2.1604090142782439e+00 -3.0503809943438429e+00 + -9.3249151128800112e-01 2.1348154777412129e+00 -3.1992152087206454e+00 + -1.1163578449940408e+00 2.1109117033847027e+00 -3.2812701384719580e+00 + -1.2540144524003929e+00 2.1218150891846741e+00 -3.3105545280377369e+00 + -1.4009969120499410e+00 2.1560498480460439e+00 -3.3112912277973483e+00 + -1.5615502300724375e+00 2.1832566645802283e+00 -3.2776040894467586e+00 + -1.6921725275817709e+00 2.1913760635495310e+00 -3.1206684780560692e+00 + -1.8252337690258216e+00 2.1260303965468164e+00 -2.7818862933556971e+00 + -2.0520972112117590e+00 1.9695460355919678e+00 -2.4703897244705502e+00 + -2.2836329322737066e+00 1.9333316015709920e+00 -2.5506547816935501e+00 + id 13981 + loc 2.1399641036987305e-01 1.2673164904117584e-01 395 + blend 0.0000000000000000e+00 + interp 4.8172507119586222e-01:3.4324592855614511e-01:1.6775894842194305e-01:3.0750075018742334e-01:1.1770583356192026e+00:4.6074593579928153e-01:1.8427621542685326e+00:4.6719076842371232e-01:2.0328819810153966e+00:4.8172025394515028e-01:2.5632024720268616e+00:3.1823374718584085e-01:2.9999485319755097e+00:4.4766134940261781e-01:3.7246440206411382e+00 + CVs 20 + -2.8376940441990078e-01 1.0526508584518664e-01 -1.0938628254722975e-01 + -5.3747662837735855e-01 1.9955755295626959e-01 -2.3530568017248213e-01 + -7.7489484581754653e-01 2.8704973977013581e-01 -3.8154349957528810e-01 + -1.0063072916116549e+00 3.7203703424540369e-01 -5.5189947208621148e-01 + -1.2256897853924995e+00 4.5329343509222242e-01 -7.4769974152407581e-01 + -1.4280100646535092e+00 5.2849382017218960e-01 -9.6818521936688351e-01 + -1.6126799417081148e+00 5.9762397177107529e-01 -1.2107033927122810e+00 + -1.7812211084586147e+00 6.6130248678531367e-01 -1.4711525587001466e+00 + -1.9314650547019037e+00 7.1611589366248274e-01 -1.7464258150456180e+00 + -2.0596419379543311e+00 7.5421498548230981e-01 -2.0357396675398420e+00 + -2.1721193376620582e+00 7.6419970489913047e-01 -2.3391287071111098e+00 + -2.2867362695965685e+00 7.2998957153616573e-01 -2.6551804035548967e+00 + -2.4156805442197626e+00 6.3848128007672145e-01 -2.9799398325040474e+00 + -2.5586452877763715e+00 4.8766301823374159e-01 -3.3094870633352302e+00 + -2.7134515999329372e+00 2.8156561732493124e-01 -3.6391112288011485e+00 + -2.8779880090686394e+00 2.7210389975687033e-02 -3.9589348503054889e+00 + -3.0432439689314119e+00 -2.6613730512080336e-01 -4.2567317644867710e+00 + -3.1970331707924213e+00 -5.8997062051645877e-01 -4.5264133736419430e+00 + -3.3603259037497870e+00 -9.1217496215159910e-01 -4.7974545985470298e+00 + id 13982 + loc 3.8429999351501465e-01 4.7111847996711731e-01 378 + blend 0.0000000000000000e+00 + interp 4.5327639582550683e-01:4.5327186306154860e-01:3.5511539498233713e-02:3.0993700519389039e-01:9.9994990121990313e-01:4.2134570118590720e-01:1.4980129262877520e+00:2.7726017534898062e-01:2.0003296044549428e+00:4.0689262546841976e-01:2.9627161893701253e+00:2.8028290008435219e-01:3.8552963621149479e+00 + CVs 20 + 2.6985417939252077e-01 2.9345895345879508e-01 -5.6453590163178924e-01 + 4.8264803648653587e-01 5.0309450497307417e-01 -1.0983408519105957e+00 + 6.7016855563130562e-01 6.6117048737634010e-01 -1.6307756863649461e+00 + 8.5761890831807897e-01 7.9484815960984379e-01 -2.1617088524804773e+00 + 1.0572093789738219e+00 8.9786328186493936e-01 -2.6606744278650316e+00 + 1.2668186419385064e+00 9.5070214930973451e-01 -3.1040874220464909e+00 + 1.4770415121369855e+00 9.5028190106071131e-01 -3.4866050419012105e+00 + 1.6793593501245434e+00 9.0970412287853497e-01 -3.8123158752430379e+00 + 1.8654496881577050e+00 8.4432784277754092e-01 -4.0874048606042450e+00 + 2.0273149184032642e+00 7.6682050720119532e-01 -4.3165351537464165e+00 + 2.1593038932943376e+00 6.8830112600901661e-01 -4.4998390236543830e+00 + 2.2654485138550262e+00 6.1869307814486296e-01 -4.6416046923534182e+00 + 2.3738216571407253e+00 5.4635990683510860e-01 -4.7659611522477991e+00 + 2.5195252975148383e+00 4.1424734030278998e-01 -4.9029291238474046e+00 + 2.7062493952373949e+00 1.7750824644980501e-01 -5.0575073570039111e+00 + 2.9190699007691427e+00 -1.3261631401559582e-01 -5.2200519543899677e+00 + 3.1412775976581822e+00 -4.5461459715780705e-01 -5.3900862894758852e+00 + 3.3473378830774347e+00 -7.4788594296515276e-01 -5.5882865229908312e+00 + 3.5060105286168186e+00 -9.8823808249966971e-01 -5.8361501415063870e+00 + id 13983 + loc 5.4166829586029053e-01 7.9756683111190796e-01 412 + blend 0.0000000000000000e+00 + interp 5.0688384143674869e-01:2.4857637081966916e-01:7.1990272002352929e-01:5.0687877259833436e-01:1.1824162696554741e+00:4.2865097316280365e-01:1.7922243294353939e+00:4.8312575278795672e-01:2.0713075753973218e+00:4.3446931770200720e-01:2.7683518552177340e+00:3.6306650509233074e-01:3.1878081753169063e+00:4.1559939908816090e-01:3.9689549023828681e+00 + CVs 20 + 7.6151627298345748e-01 1.9224100267667790e-01 -1.7183322158125930e-01 + 1.2368673271307147e+00 2.7221954565718254e-01 -3.4938386494423396e-01 + 1.6488501275787533e+00 3.1541655436464761e-01 -5.4158794151753831e-01 + 2.0933379561835679e+00 3.5564342575600028e-01 -7.5320868483732817e-01 + 2.5735617891416211e+00 3.8530918810959058e-01 -9.7969616959804806e-01 + 3.0915068325203010e+00 3.9143010948751578e-01 -1.2081306369501521e+00 + 3.6432254389143677e+00 3.5967666503674367e-01 -1.4186916342126419e+00 + 4.2157144424528177e+00 2.7854792244630455e-01 -1.5923319878030515e+00 + 4.7898733128077442e+00 1.4201949703826111e-01 -1.7155531854665937e+00 + 5.3437876472979973e+00 -4.8472436178435885e-02 -1.7812383000892549e+00 + 5.8485481057128723e+00 -2.8823206288536030e-01 -1.7971324911256765e+00 + 6.2687086927201427e+00 -5.7747072289953350e-01 -1.7961928266585994e+00 + 6.5913750932871391e+00 -9.1951428050373507e-01 -1.8096052154314746e+00 + 6.8394607159914225e+00 -1.3206237567101267e+00 -1.8369058911749363e+00 + 7.0309671778872902e+00 -1.7817361318932949e+00 -1.8706258480242370e+00 + 7.1643997803047048e+00 -2.2850178013579914e+00 -1.9179080564941522e+00 + 7.2409613529196211e+00 -2.8072371630752375e+00 -1.9935782030942300e+00 + 7.2800128792718066e+00 -3.3360557364142363e+00 -2.1012278199816503e+00 + 7.3956168006707239e+00 -3.8916101241716063e+00 -2.1779845867703420e+00 + id 13984 + loc 7.5806897878646851e-01 2.0047250390052795e-01 396 + blend 0.0000000000000000e+00 + interp 4.7869826920659075e-01:3.7456204633454993e-01:6.9051196914749302e-01:3.6384136934336886e-01:1.1751386371395915e+00:3.7474730041287935e-01:1.9494151757421581e+00:3.2136822477677851e-01:2.5674522220195937e+00:4.7869348222389874e-01:3.0570568371805842e+00:3.0823794408907029e-01:3.9841566046087742e+00 + CVs 20 + -6.1184794430161937e-01 1.0068721896388258e-01 3.5074731928271480e-01 + -1.0556211240913755e+00 1.1623720338577953e-01 5.9292344228397387e-01 + -1.4628147497270940e+00 1.0808679690639961e-01 8.0088649001974344e-01 + -1.8832653527485776e+00 1.1300851637779641e-01 9.9565040125280413e-01 + -2.3109151367411211e+00 1.3143252716755971e-01 1.1767339746549801e+00 + -2.7450375243531155e+00 1.6467853938724997e-01 1.3460634734484480e+00 + -3.1806065212601906e+00 2.1026900589517838e-01 1.5159207773216843e+00 + -3.6110489657143319e+00 2.6296235349286290e-01 1.7014369572736867e+00 + -4.0373563079976531e+00 3.1044976076939768e-01 1.9152823173424958e+00 + -4.4669113042860387e+00 3.3044075457960442e-01 2.1660182746959538e+00 + -4.8922765393681038e+00 2.9661001082693850e-01 2.4583948791927019e+00 + -5.2809142158209141e+00 1.9259805805430519e-01 2.7906957560624730e+00 + -5.6007175827998585e+00 1.8286892135594979e-02 3.1503595282216237e+00 + -5.8421520489166046e+00 -2.1787692807169545e-01 3.5149085705030640e+00 + -6.0100828133363580e+00 -5.0102900046609156e-01 3.8603987886816098e+00 + -6.1142996358897657e+00 -8.0962364390162067e-01 4.1753515262873417e+00 + -6.1666187147651188e+00 -1.1237320393520336e+00 4.4595690937553840e+00 + -6.1745279054753510e+00 -1.4336342500028101e+00 4.7052101267299449e+00 + -6.0550974268758182e+00 -1.7487508988682152e+00 4.8077801979813639e+00 + id 13985 + loc 2.9825198650360107e-01 1.4017470180988312e-01 1078 + blend 0.0000000000000000e+00 + interp 4.4210442176935799e-01:2.6233432892675412e-01:1.3763660539128919e-03:2.4867926576274055e-01:9.7618022116265368e-01:4.4210000072514033e-01:1.3938864345239712e+00:2.4537308140051250e-01:2.2660611858585318e+00:2.7130322385266198e-01:3.2607528048686634e+00 + CVs 20 + -1.2773688409144779e-02 3.2403656446534784e-01 2.0506193815981604e-02 + -6.9736016305834259e-02 6.2033437099363109e-01 5.9294503476992506e-02 + -1.4415837567693462e-01 9.2789349502288165e-01 9.2336873692264079e-02 + -2.1739179004765774e-01 1.2528038952174785e+00 1.1064039206346706e-01 + -2.9150027252644628e-01 1.5889141074873752e+00 1.0703110774668785e-01 + -3.6904594890283027e-01 1.9261945591987772e+00 7.8809456449318693e-02 + -4.6369918544127164e-01 2.2531474889401952e+00 2.2461912023702929e-02 + -5.9656489386899081e-01 2.5561905662818614e+00 -6.5520610750548491e-02 + -7.8918190218829731e-01 2.8193703843062861e+00 -1.8659702363960787e-01 + -1.0584907583809402e+00 3.0148537743393211e+00 -3.3797375320966627e-01 + -1.3969906026799470e+00 3.1049081329048178e+00 -5.0450943597002151e-01 + -1.7709288487321024e+00 3.0674013210271740e+00 -6.6381816801840265e-01 + -2.1470293353580923e+00 2.9059479187905595e+00 -8.0223728941638728e-01 + -2.5135912199389043e+00 2.6290917276560983e+00 -9.2135865647640691e-01 + -2.8836418943163835e+00 2.2120350910085609e+00 -1.0402837578279036e+00 + -3.2385971639897249e+00 1.5531240306827219e+00 -1.1852858403376441e+00 + -3.3593379071685656e+00 5.9614108105037356e-01 -1.3242001341635588e+00 + -3.0928342223915868e+00 -2.6084162269180222e-01 -1.3420724071450048e+00 + -2.8794493865482726e+00 -6.6092670098588302e-01 -1.2760606977244429e+00 + id 13986 + loc 3.3025684952735901e-01 1.4808909967541695e-02 407 + blend 0.0000000000000000e+00 + interp 4.4394241532315526e-01:1.9836418956203317e-01:5.0592924211612700e-01:4.4393797589900202e-01:1.1244017368394110e+00:2.5822809780679967e-01:2.0143091454762101e+00:2.6206505395158453e-01:3.0497804882540400e+00:3.6690190353077484e-01:3.9970248525308891e+00 + CVs 20 + -7.8728737841749122e-02 3.1367281231360572e-01 -2.1298968947179292e-01 + -1.6615271604973961e-01 4.8864856965748077e-01 -2.6817801085371246e-01 + -2.5087896530343679e-01 6.6175761852011028e-01 -2.7756305226821415e-01 + -3.2691084762744266e-01 8.5951087380498592e-01 -3.1752612708140926e-01 + -3.7955938223181068e-01 1.0893501274889488e+00 -3.9338653636890841e-01 + -3.8251315133579494e-01 1.3509342988762139e+00 -5.1026620844047743e-01 + -3.0825681259668830e-01 1.6217694169950208e+00 -6.6392031786253858e-01 + -1.5173565974085773e-01 1.8633438945316567e+00 -8.3798170865343935e-01 + 6.6582750600291549e-02 2.0477853224689611e+00 -1.0158816131911466e+00 + 3.2304623829519519e-01 2.1688746522778000e+00 -1.1905680965230787e+00 + 6.0596380165919284e-01 2.2315071331420926e+00 -1.3636382534779341e+00 + 9.1193323465237963e-01 2.2395643649919106e+00 -1.5378033721538913e+00 + 1.2261834008336387e+00 2.1953150487306852e+00 -1.7067079108739769e+00 + 1.5171208146891499e+00 2.1108961210332602e+00 -1.8567189192592681e+00 + 1.7654416026720159e+00 2.0079490501435338e+00 -1.9834841320235226e+00 + 1.9823742885704860e+00 1.9007528373032425e+00 -2.1004188763934284e+00 + 2.1865131739869459e+00 1.7942865736361371e+00 -2.2258615645998279e+00 + 2.3873596481794594e+00 1.6910076503042517e+00 -2.3716271922785648e+00 + 2.6738606930273217e+00 1.5568699793247107e+00 -2.5856084978183467e+00 + id 13987 + loc 5.1452606916427612e-01 2.1222957968711853e-01 400 + blend 0.0000000000000000e+00 + interp 4.7902455279461470e-01:3.5859689536294725e-01:2.2339807561255864e-02:4.7901976254908679e-01:8.4284981637744361e-01:3.6907505213521113e-01:1.2751846896251344e+00:3.9061701905220514e-01:2.0400797075884958e+00:3.5875793419361862e-01:2.7429252491193874e+00:2.4595275709822492e-01:3.4328271847868477e+00 + CVs 20 + 2.9029611058066379e-01 2.9771923787046722e-01 1.9076302066567655e-01 + 5.9090378272611022e-01 5.8401498647559935e-01 3.5644089964888620e-01 + 8.8591364056779009e-01 8.6477672349326695e-01 5.3170161481368405e-01 + 1.1709976026986020e+00 1.1287554700782947e+00 7.2375479388222663e-01 + 1.4504554055474757e+00 1.3614262505052381e+00 9.3290924801145847e-01 + 1.7292944431844972e+00 1.5462884533511221e+00 1.1576094216010389e+00 + 2.0102009903337601e+00 1.6664009825562933e+00 1.3920403616937864e+00 + 2.2899727044575204e+00 1.7118834377567038e+00 1.6222339017768546e+00 + 2.5643807690696567e+00 1.6854904154916115e+00 1.8400587318119035e+00 + 2.8264121506163415e+00 1.5980110506964198e+00 2.0366552688458568e+00 + 3.0730514838646101e+00 1.4665277558486571e+00 2.2093768001808232e+00 + 3.3137284593490204e+00 1.2966186863519138e+00 2.3752167980202445e+00 + 3.5552730042197944e+00 1.0855608983051748e+00 2.5468172406278327e+00 + 3.7929690084460814e+00 8.3952928224863377e-01 2.7209487176172646e+00 + 4.0208314197520858e+00 5.6466350404329080e-01 2.8911256576706608e+00 + 4.2438988303193330e+00 2.4524750781085092e-01 3.0664160568406524e+00 + 4.4852102400474081e+00 -1.3076267138266462e-01 3.3121990073850989e+00 + 4.7528504859773397e+00 -4.3530233316722833e-01 3.7209676576297328e+00 + 4.9288242123392463e+00 -4.9173351934049103e-01 3.9980934158597634e+00 + id 13988 + loc 9.8290163278579712e-01 6.0377722978591919e-01 380 + blend 0.0000000000000000e+00 + interp 3.6879152762314443e-01:3.6878783970786821e-01:3.2651683473159387e-03:2.9403199353238602e-01:5.1689447586886128e-01:2.8806575158884068e-01:1.3876221503216490e+00:2.3162018179654445e-01:2.5446098010234750e+00:2.9916952788970080e-01:3.3820361981965847e+00 + CVs 20 + -4.1454575907022473e-01 1.8959327825588770e-01 -7.2308740218893819e-01 + -7.3887641400636539e-01 2.6028295054211459e-01 -1.2225247342664705e+00 + -1.0288983135257008e+00 2.7813131162307742e-01 -1.6650733261671506e+00 + -1.3100173952969891e+00 2.7386152474013237e-01 -2.1277095037306282e+00 + -1.5793758089512471e+00 2.4944101162640187e-01 -2.6077429692081906e+00 + -1.8308063643268919e+00 2.0656898090183451e-01 -3.0921814392480407e+00 + -2.0634094337482303e+00 1.4603527159451590e-01 -3.5645933288290648e+00 + -2.2810058678586356e+00 6.8486794362599079e-02 -4.0132310970356482e+00 + -2.4895830208880687e+00 -2.6638833618486624e-02 -4.4367389131672299e+00 + -2.6962974722054227e+00 -1.4260348720945037e-01 -4.8401500309562975e+00 + -2.9098055151552948e+00 -2.8346140482709448e-01 -5.2240264796084110e+00 + -3.1378998886393781e+00 -4.5611270006062954e-01 -5.5838272507699216e+00 + -3.3776279507917568e+00 -6.8341268443638592e-01 -5.9126925404370390e+00 + -3.6082853182898789e+00 -1.0078106009335315e+00 -6.1860860807692593e+00 + -3.8072689227860605e+00 -1.4521859836691742e+00 -6.3656894342815775e+00 + -3.9706748183009712e+00 -1.9864896315451590e+00 -6.4549984857049871e+00 + -4.1046278426999692e+00 -2.5457072021221880e+00 -6.4990583524851084e+00 + -4.2289523688097450e+00 -3.0585831823539422e+00 -6.5295273496289568e+00 + -4.4542142266020743e+00 -3.5346975798884479e+00 -6.5573234941125964e+00 + id 13989 + loc 5.7469975948333740e-01 2.5256198644638062e-01 403 + blend 0.0000000000000000e+00 + interp 3.9256855343101094e-01:2.7212631365757622e-01:6.1244412943913440e-01:3.9256462774547662e-01:1.1397656118922326e+00:2.7308056709593814e-01:1.9998364066801968e+00:3.7997959055747527e-01:2.6917072125798729e+00:2.7037573079009136e-01:3.7201311575211635e+00 + CVs 20 + -3.6704791458849445e-02 4.5199057932486031e-01 1.5502396749590636e-01 + -2.3343847519970373e-02 8.8639642766590532e-01 3.0684949792486849e-01 + -1.9587653680806616e-02 1.3339469913226456e+00 4.8308978617126497e-01 + -4.5688183079424238e-02 1.7896061581681235e+00 7.1702287464263459e-01 + -9.0720406105721185e-02 2.2206442951240541e+00 1.0218651115098210e+00 + -1.1644853636275787e-01 2.5950255925908294e+00 1.3814332797457538e+00 + -8.3933964053092724e-02 2.8968665282292001e+00 1.7792332958091239e+00 + 3.4642088403625149e-02 3.1099229326967990e+00 2.2065763918970114e+00 + 2.5303808065564670e-01 3.2127219210261169e+00 2.6403325357360927e+00 + 5.5533500704284977e-01 3.1975344131039884e+00 3.0516740418801929e+00 + 9.0692227550484450e-01 3.0670724807207099e+00 3.4403452078481007e+00 + 1.2688410678910544e+00 2.8175614441638102e+00 3.8290574884300557e+00 + 1.6025551449331927e+00 2.4537778233219374e+00 4.2227468980061147e+00 + 1.8973499036046391e+00 2.0040451935384036e+00 4.5926689997808552e+00 + 2.1597779876276038e+00 1.5165348902119193e+00 4.9274651385997226e+00 + 2.3507022984810177e+00 1.0767318577275460e+00 5.2971185288616569e+00 + 2.3908222228954896e+00 7.8583475262471236e-01 5.7778994493791522e+00 + 2.3018257358526659e+00 6.1283821859065568e-01 6.2904548294879508e+00 + 2.3838382948838421e+00 2.6220083142164585e-01 6.7296917713731315e+00 + id 13990 + loc 1.9477374851703644e-01 3.2986098527908325e-01 379 + blend 0.0000000000000000e+00 + interp 3.8435817604672057e-01:2.9672843000285382e-01:2.0278002979670084e-03:1.9630276921684114e-01:9.7989180474192361e-01:2.3618684646864219e-01:1.5960129905948814e+00:2.4365847427563164e-01:2.2189614513411557e+00:3.8435433246496009e-01:2.7420663306808919e+00:2.6543875672023692e-01:3.5629269970616266e+00 + CVs 20 + 2.5333158318135662e-01 3.6334373848899987e-01 2.9088829119811643e-01 + 5.4451296177793806e-01 6.4376162744191734e-01 5.2282197737102343e-01 + 8.7983904553393466e-01 8.1864754675939522e-01 7.1961997523620658e-01 + 1.2492030368012581e+00 9.1927581310503081e-01 8.9254385277645065e-01 + 1.6377174591683554e+00 9.9937870396495709e-01 1.0508046020996262e+00 + 2.0373309557049293e+00 1.0992009680227923e+00 1.2191976484777949e+00 + 2.4351080086197401e+00 1.2346519326955712e+00 1.4310537908373799e+00 + 2.8087145774516356e+00 1.4071706582777921e+00 1.7077511743062277e+00 + 3.1290329779876975e+00 1.6142986953781500e+00 2.0444916585181017e+00 + 3.3726686511361699e+00 1.8504560388157651e+00 2.4145117765671293e+00 + 3.5461642934465747e+00 2.1102991065191130e+00 2.7982136508515940e+00 + 3.6752621461999047e+00 2.3943296567980683e+00 3.2096257913396671e+00 + 3.7589189250383992e+00 2.6834550326270676e+00 3.6908483628693363e+00 + 3.7639176354858987e+00 2.9079160728654077e+00 4.2804973087134757e+00 + 3.6459402448607965e+00 2.9947390826381595e+00 4.9330293314694718e+00 + 3.3912530594922963e+00 2.9868412994245901e+00 5.4649339674402277e+00 + 3.0009914749388922e+00 3.0718969499915594e+00 5.7635433096459581e+00 + 2.5497725482749769e+00 3.0959868700303783e+00 5.9477107607534698e+00 + 2.7272573112852250e+00 2.6303965626381105e+00 6.1125677201392534e+00 + id 13991 + loc 9.4953663647174835e-02 2.5343549251556396e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7077992849708505e-01:3.5285014348894073e-01:9.4283684878360274e-01:3.6343276754380222e-01:1.6615735571165220e+00:4.7077522069780009e-01:2.0720319774982685e+00:3.4047939391730397e-01:2.9752107683079227e+00:4.5684260321679088e-01:3.3948462720380843e+00:3.2413578919073338e-01:3.9942505591711419e+00 + CVs 20 + -2.4198760150594448e-01 2.7386320073394504e-01 -1.4175300321332407e-01 + -4.5230843548403321e-01 5.7573282755556177e-01 -2.3534796890480036e-01 + -6.3495420785954793e-01 8.9081295210259026e-01 -3.0318739788969618e-01 + -8.0765013626740534e-01 1.2078086139100419e+00 -3.7369950778098426e-01 + -9.9575029289051531e-01 1.5134891889324453e+00 -4.7982207682865807e-01 + -1.2136665135770246e+00 1.7819991391654391e+00 -6.4736696955524708e-01 + -1.4511217930151201e+00 1.9731559758915673e+00 -8.8849934858319968e-01 + -1.6665225718264980e+00 2.0444667610069445e+00 -1.1981545926525938e+00 + -1.8077994847041630e+00 1.9870857324332114e+00 -1.5400629150758449e+00 + -1.8632728823974141e+00 1.8448454910954366e+00 -1.8698058435681322e+00 + -1.8474817840192812e+00 1.6550766850743368e+00 -2.1828506143352104e+00 + -1.7463115228039578e+00 1.4195786030487174e+00 -2.4854735790808329e+00 + -1.5371197151682563e+00 1.1487384703620906e+00 -2.7443342436248428e+00 + -1.2713666933037455e+00 8.8703165611254065e-01 -2.9309724067174026e+00 + -1.0411876612140287e+00 6.7144823274629162e-01 -3.0918341289638858e+00 + -9.1340034606795606e-01 5.5994593408529048e-01 -3.2682134715297280e+00 + -9.2994759589773290e-01 6.2931758586374997e-01 -3.4011376156684934e+00 + -9.9755168919141268e-01 7.7086098610363185e-01 -3.5010238251634229e+00 + -9.2273307122056591e-01 8.2570980129189198e-01 -3.9535728946726341e+00 + id 13992 + loc 9.5957845449447632e-02 9.8207008838653564e-01 373 + blend 0.0000000000000000e+00 + interp 7.2161433721777823e-01:7.2160712107440605e-01:7.1998181605036893e-01:5.5110982463040570e-01:1.0101170259710197e+00:2.4257735058747390e-01:1.4647511299693701e+00:2.9230557348709757e-01:2.3777530576951715e+00:3.9230452922003478e-01:3.0814433542770545e+00:3.0426630876505445e-01:3.8443130468939679e+00 + CVs 20 + -2.8689446146349268e-01 5.3711911379495203e-01 -2.1239831805609835e-01 + -5.0035873235366779e-01 1.0626805432275912e+00 -4.3117770126952076e-01 + -6.3283973632522839e-01 1.5703771277678602e+00 -6.5780106313314735e-01 + -7.0829387247348252e-01 2.0550128054111028e+00 -9.1382352790876964e-01 + -7.5975600351010497e-01 2.5074028931441426e+00 -1.2276590573409223e+00 + -8.1873462269439190e-01 2.9108666706727431e+00 -1.6193368665269083e+00 + -9.1275490439043261e-01 3.2431336803459225e+00 -2.0943989125066591e+00 + -1.0728863943928055e+00 3.4810110986045522e+00 -2.6428142630635132e+00 + -1.3323531323340640e+00 3.6054922471531428e+00 -3.2337208413352818e+00 + -1.7175854883275501e+00 3.6121280824513624e+00 -3.8107474247502919e+00 + -2.2264444319336278e+00 3.5032993906877694e+00 -4.3035325619503206e+00 + -2.8076163348059842e+00 3.2772585726274341e+00 -4.6658255802487920e+00 + -3.3987829498460846e+00 2.9364786170123081e+00 -4.8987632152096721e+00 + -3.9693151715556541e+00 2.5113741895606938e+00 -5.0259027583875371e+00 + -4.5123578269824467e+00 2.0434725953075228e+00 -5.0853855878135992e+00 + -5.0066205312830929e+00 1.5328459257381297e+00 -5.0935206933956154e+00 + -5.3539138270660942e+00 9.0933976969241748e-01 -4.9410331737060407e+00 + -5.3617113087421870e+00 1.9192931446755290e-01 -4.4917770373590900e+00 + -5.6313327916451108e+00 -2.9662256505743501e-01 -4.4008041494790149e+00 + id 13993 + loc 3.7979080807417631e-03 1.1933866143226624e-01 393 + blend 0.0000000000000000e+00 + interp 4.3762548246252841e-01:2.7160329888925311e-01:3.3996287714545681e-01:3.6586044408654483e-01:9.6602638211146896e-01:2.3735526040470176e-01:1.4554842655248894e+00:3.5275877385268911e-01:1.9958345560988193e+00:3.8707709712873722e-01:2.3041766001448800e+00:4.3762110620770384e-01:2.9519374642339109e+00:4.1321978946461047e-01:3.2641566775739181e+00:3.5013906576764942e-01:3.9722357305236167e+00 + CVs 20 + -1.1771441696423535e-01 4.2010001204058517e-01 3.3518098695485393e-01 + -2.1445031875598197e-01 8.2981826762564126e-01 5.9432086739078571e-01 + -3.1201150822846363e-01 1.2403755995462704e+00 8.0648535574274260e-01 + -4.2857591214910401e-01 1.6577469008170758e+00 9.9847666481736008e-01 + -5.8675173932886349e-01 2.0806934613048771e+00 1.1950580652994802e+00 + -8.1335945654229469e-01 2.4957873047382662e+00 1.4276522698004404e+00 + -1.1255584876527132e+00 2.8662442082617439e+00 1.7231026975654218e+00 + -1.5194529114413029e+00 3.1413461276533732e+00 2.0883935151748028e+00 + -1.9714539739874450e+00 3.2777395441228285e+00 2.5072491409766959e+00 + -2.4466449807847099e+00 3.2533183113130626e+00 2.9498988581523919e+00 + -2.9075836098166330e+00 3.0718210713652887e+00 3.3853577474615792e+00 + -3.3254189209234406e+00 2.7610308103492311e+00 3.7905264421280043e+00 + -3.6944821033097837e+00 2.3586331238461016e+00 4.1655715624396263e+00 + -4.0210703873521672e+00 1.8917071056932762e+00 4.5347781241208143e+00 + -4.2921706411172540e+00 1.3776666431508089e+00 4.9247222013484233e+00 + -4.4760220601722178e+00 8.4507899720072932e-01 5.3582163965405423e+00 + -4.5458700133302461e+00 3.4470497816041101e-01 5.8582961916254837e+00 + -4.5002412631527893e+00 -6.5240217093062824e-02 6.4053296466156278e+00 + -4.4400003775096994e+00 -3.4768187166644005e-01 6.8277700850582095e+00 + id 13994 + loc 2.3213522136211395e-01 2.3169265687465668e-01 401 + blend 0.0000000000000000e+00 + interp 4.3752438587489462e-01:3.8899106478350276e-01:7.1902516375759551e-01:4.3752001063103590e-01:1.1849216310534632e+00:3.1154532980741745e-01:1.8608730867155043e+00:4.1084706401905730e-01:2.1068814893456365e+00:2.6823885312216639e-01:2.9272336789928080e+00:3.8854760386800330e-01:3.4986254944912063e+00:4.1894863453359099e-01:3.9984396404725948e+00 + CVs 20 + -2.7670247412543225e-01 1.0402967900317438e-01 2.2087238110491439e-01 + -5.3376310328138599e-01 2.2277885334592873e-01 4.1848079996585541e-01 + -7.7975164231419269e-01 3.4231431402414458e-01 6.0940878174532398e-01 + -1.0261833840995767e+00 4.5506800214212761e-01 8.0901526295217507e-01 + -1.2721459533502013e+00 5.5454683541276251e-01 1.0141289361351902e+00 + -1.5157744059082925e+00 6.3338326615916785e-01 1.2225812869489909e+00 + -1.7546134894601537e+00 6.8508846774052823e-01 1.4374050800302778e+00 + -1.9879012050030382e+00 7.0366646671971378e-01 1.6675361768422567e+00 + -2.2136149185982954e+00 6.8249825472304526e-01 1.9198369153498802e+00 + -2.4279113321109214e+00 6.1589652494659486e-01 2.1941913972592237e+00 + -2.6266458523530707e+00 5.0208858587935346e-01 2.4802302247407511e+00 + -2.8053489307614705e+00 3.4675178526113271e-01 2.7548192959826867e+00 + -2.9592247902136406e+00 1.6247048375169937e-01 2.9927409436774073e+00 + -3.0855739478130806e+00 -3.7943021004429534e-02 3.1851944335979052e+00 + -3.1827719997135913e+00 -2.4732431319171927e-01 3.3452228031854427e+00 + -3.2444375822639637e+00 -4.5558751254633612e-01 3.4905562347031793e+00 + -3.2664616926114909e+00 -6.5431538104795961e-01 3.6334421307188705e+00 + -3.2516921271854229e+00 -8.3494394318570631e-01 3.7779125655753578e+00 + -3.1101997155428389e+00 -9.2234057754234833e-01 3.8980433994841182e+00 + id 13995 + loc 3.9193399250507355e-02 2.4842356145381927e-01 395 + blend 0.0000000000000000e+00 + interp 4.3519841126345948e-01:3.3589716613766329e-01:6.8654320397363588e-01:2.6812363491715824e-01:1.1566373332835722e+00:3.7833130015940591e-01:2.0243910959618758e+00:4.3519405927934685e-01:2.8044241535352756e+00:3.1766716340805612e-01:3.2230145634986629e+00:3.2009372854024915e-01:3.9999159976136607e+00 + CVs 20 + -2.5507559261618978e-01 1.2081892609581246e-01 -1.7124236956592181e-01 + -5.0174994417075636e-01 2.2469165805873184e-01 -3.3776252997059486e-01 + -7.4638849855513167e-01 3.1711283220075015e-01 -5.1314074608412974e-01 + -9.8854032985916984e-01 3.9792666495119211e-01 -7.0176577478622804e-01 + -1.2231439764577545e+00 4.6148153830084082e-01 -9.0090252981918051e-01 + -1.4469524380727847e+00 5.0401965586393238e-01 -1.1059200347802700e+00 + -1.6598355352368341e+00 5.2754311993798741e-01 -1.3109442791978236e+00 + -1.8599422116182949e+00 5.3588793320191042e-01 -1.5083750496702018e+00 + -2.0342146223725948e+00 5.3023607502530301e-01 -1.6861655450855477e+00 + -2.1644458666014073e+00 5.1613583682026698e-01 -1.8283145013092093e+00 + -2.2515882428500329e+00 5.0255198376663590e-01 -1.9314521377729237e+00 + -2.3190904244796275e+00 4.8431348281359710e-01 -2.0109322602714381e+00 + -2.3827087378058418e+00 4.4893791190694921e-01 -2.0797026118029600e+00 + -2.4396816627356905e+00 3.9674751931542507e-01 -2.1416699265840689e+00 + -2.4901210369670927e+00 3.3858468954507415e-01 -2.1991930811911837e+00 + -2.5481962960619668e+00 2.8454551120369542e-01 -2.2545204532298699e+00 + -2.6263629118217193e+00 2.2843710706367348e-01 -2.3073972774828353e+00 + -2.7172022451095725e+00 1.2977804587561459e-01 -2.3483394295458866e+00 + -2.7844281788206651e+00 -1.4263150197128005e-01 -2.3342263063492954e+00 + id 13996 + loc 2.5967639684677124e-01 2.7765870094299316e-01 396 + blend 0.0000000000000000e+00 + interp 4.2413569975461851e-01:4.2413145839762101e-01:1.9788032713346837e-01:3.2600663163891630e-01:8.2856850281946393e-01:4.1792284301675597e-01:1.2071036827555897e+00:3.6540646646482411e-01:1.9528358120552163e+00:3.3821726598733814e-01:2.4314844247304244e+00:3.2804986069530367e-01:3.0025310028408656e+00:3.9460313310104922e-01:3.9765570567816502e+00 + CVs 20 + -2.0642414606654907e-01 1.9059411208993599e-01 -7.4192897637092481e-01 + -3.5944679692844206e-01 2.3139614902960676e-01 -1.3186383282931280e+00 + -4.8209323233924073e-01 2.0586242020890366e-01 -1.8469277338868786e+00 + -5.8454518290249191e-01 1.3766152286775313e-01 -2.3682810974747839e+00 + -6.6848188255245689e-01 2.1797175078807296e-02 -2.8665628279314799e+00 + -7.4157966561820887e-01 -1.3961223447265825e-01 -3.3280219753302607e+00 + -8.1094540443340868e-01 -3.3822630631650230e-01 -3.7367955128645449e+00 + -8.7834021804368811e-01 -5.5978028949166858e-01 -4.0741614315272452e+00 + -9.4363105987146945e-01 -7.8494390937667524e-01 -4.3309659937505973e+00 + -1.0075084890224943e+00 -9.9334900057685593e-01 -4.5146904063493896e+00 + -1.0706013976387747e+00 -1.1673498770480575e+00 -4.6409162967066049e+00 + -1.1379123315594406e+00 -1.2967358338419666e+00 -4.7261737955535299e+00 + -1.2197298197154427e+00 -1.3820059741198356e+00 -4.7867017228936763e+00 + -1.3228295719432319e+00 -1.4323548870509495e+00 -4.8380079277483681e+00 + -1.4464881215160288e+00 -1.4591159486396958e+00 -4.8914022249519693e+00 + -1.5864295684354088e+00 -1.4629959849382355e+00 -4.9541527919660417e+00 + -1.7442511279228579e+00 -1.4460445821496437e+00 -5.0309282960971675e+00 + -1.9146918806222226e+00 -1.4409451940221905e+00 -5.1160188060767275e+00 + -2.0457988985500108e+00 -1.6417393483802223e+00 -5.0642103757902817e+00 + id 13997 + loc 6.1628174781799316e-01 9.8679316043853760e-01 402 + blend 0.0000000000000000e+00 + interp 4.9552361470287343e-01:4.9551865946672641e-01:8.8564565886146251e-02:3.4943654679178043e-01:8.5394524051246157e-01:3.3933225823663310e-01:1.8148121032643656e+00:3.5487050707886786e-01:2.7643042161834268e+00:3.7108808412420408e-01:2.9984918209920886e+00:3.2289106920306321e-01:3.5079174949280860e+00 + CVs 20 + -6.9073317734983361e-02 1.5551481983044319e-01 -1.5740123831394970e-01 + -1.2290731792211412e-01 3.1905202774272579e-01 -3.0711356124281886e-01 + -1.6544884436510518e-01 4.8799447154087328e-01 -4.5865180481462370e-01 + -2.0148236366050226e-01 6.5937577149676208e-01 -6.1439153274816038e-01 + -2.3370322561743412e-01 8.3323236429883274e-01 -7.7182701795599717e-01 + -2.6461608850465868e-01 1.0099227124772328e+00 -9.3092970310220324e-01 + -2.9691169158707775e-01 1.1871704709494060e+00 -1.0938823240222986e+00 + -3.3479725609142597e-01 1.3605742119469622e+00 -1.2628578241699620e+00 + -3.8182079989676543e-01 1.5249941579537043e+00 -1.4364467510640426e+00 + -4.4066478053149138e-01 1.6782288474763436e+00 -1.6125747500245775e+00 + -5.1263409405581595e-01 1.8188366786416603e+00 -1.7877977763009953e+00 + -6.0172418055855614e-01 1.9447076723428935e+00 -1.9601912245668065e+00 + -7.1339182693613923e-01 2.0540000596150523e+00 -2.1294427822762314e+00 + -8.3940905262660204e-01 2.1441075311291860e+00 -2.2858558896506933e+00 + -9.6335410961029999e-01 2.2193227538569378e+00 -2.4208474748883559e+00 + -1.0990470780983133e+00 2.2915482225290713e+00 -2.5415969196540300e+00 + -1.2938994823563768e+00 2.3660483195465898e+00 -2.6515913864011642e+00 + -1.5573534245508409e+00 2.4243192717522986e+00 -2.7299606130080312e+00 + -1.8142264491586548e+00 2.4441037411746738e+00 -2.7444702742102809e+00 + id 13998 + loc 4.4444841146469116e-01 1.4576184749603271e-01 1078 + blend 0.0000000000000000e+00 + interp 2.8909439728591990e-01:2.5572555446097806e-01:8.9045493206088833e-01:2.5730239730536852e-01:1.9701960368482534e+00:2.4728273170633447e-01:2.8727509840956196e+00:2.8909150634194708e-01:3.6365387131483855e+00 + CVs 20 + 3.3172917442332348e-02 3.2169058723070565e-01 -1.3262539719852245e-01 + 1.4669026152850095e-02 6.2274665527175233e-01 -2.6006742450279319e-01 + -3.9668384065847384e-02 9.1283945994182680e-01 -3.9586395273997632e-01 + -1.2240416257422448e-01 1.1896481565919435e+00 -5.4579358077704088e-01 + -2.3564272669115549e-01 1.4411087105302478e+00 -7.0846963587481282e-01 + -3.7868410138457720e-01 1.6506183801219949e+00 -8.7599116475496419e-01 + -5.4775763213476047e-01 1.8015913222323872e+00 -1.0355932984590663e+00 + -7.3388881920875471e-01 1.8851972569692110e+00 -1.1742339843336160e+00 + -9.2314621021642851e-01 1.9025124447229844e+00 -1.2815621618030248e+00 + -1.1019094705300942e+00 1.8617850787881234e+00 -1.3529330678371814e+00 + -1.2621041330482203e+00 1.7733293607474656e+00 -1.3903758901877468e+00 + -1.4017142601438268e+00 1.6454595603534610e+00 -1.4008608350245804e+00 + -1.5224295227230702e+00 1.4827097589717673e+00 -1.3930638022962278e+00 + -1.6235271271464387e+00 1.2894557690142037e+00 -1.3733217607747858e+00 + -1.6979555694575135e+00 1.0772290814747660e+00 -1.3447374857503298e+00 + -1.7242375286582574e+00 8.8618367316168656e-01 -1.3019525416581352e+00 + -1.6871020175704337e+00 8.1841116002374503e-01 -1.2288668937637255e+00 + -1.6675048413486362e+00 9.3313150740983497e-01 -1.1386265614047328e+00 + -1.4846142690175217e+00 7.4902078364550861e-01 -1.0963155407017302e+00 + id 13999 + loc 1.8663489818572998e-01 5.5097740888595581e-01 378 + blend 0.0000000000000000e+00 + interp 4.3016620083254520e-01:4.2710867147200282e-01:3.0442910993058214e-01:4.3016189917053688e-01:8.8014135945312888e-01:3.9674118000957448e-01:1.1009842443686304e+00:4.0046703558589292e-01:1.9977399620328316e+00:3.9369667408349940e-01:2.7959710233290833e+00:2.8307756894691127e-01:3.6334224966420976e+00 + CVs 20 + 4.9935311542426569e-01 3.3182576450176277e-01 2.4765948135884783e-01 + 9.3737498683261122e-01 5.7051153966854340e-01 4.2506027936715851e-01 + 1.3606225904794007e+00 7.5527304321268418e-01 5.7218840296447548e-01 + 1.7858035400211838e+00 9.1343335607100840e-01 7.0923551736577062e-01 + 2.2063057415863745e+00 1.0492970977679272e+00 8.3883447856053306e-01 + 2.6236537701199998e+00 1.1607933185120478e+00 9.6273914193051102e-01 + 3.0489526362074066e+00 1.2414637205414571e+00 1.0838764664278773e+00 + 3.4926586393873222e+00 1.2840947362015840e+00 1.2081458616065310e+00 + 3.9504634090723734e+00 1.2836685303147042e+00 1.3424507229247657e+00 + 4.4009352105197932e+00 1.2414640907634937e+00 1.4854849394969931e+00 + 4.8236653605897946e+00 1.1693663636335898e+00 1.6254657051956984e+00 + 5.2143075691686338e+00 1.0793626055050263e+00 1.7546678993125280e+00 + 5.5749333421353393e+00 9.5327410689650938e-01 1.8764683665383526e+00 + 5.8985342800331075e+00 7.2784226548782494e-01 1.9899156556286761e+00 + 6.1761102166821615e+00 3.6498149283996995e-01 2.0910885820765648e+00 + 6.4048165090303737e+00 -6.1609852100842577e-02 2.1937902295127905e+00 + 6.5713475354213795e+00 -4.0811292248971487e-01 2.2967402595138182e+00 + 6.6938442169948260e+00 -6.2316158536697541e-01 2.3879074288529378e+00 + 7.0200293165710352e+00 -8.8927220433482734e-01 2.5245668022510666e+00 + id 14000 + loc 2.6475900784134865e-02 2.0453657209873199e-01 415 + blend 0.0000000000000000e+00 + interp 4.9807009139204350e-01:2.9634309496208000e-01:1.0678364671894314e-02:1.4562654309255446e-01:1.2044066875992427e+00:3.7113743119952630e-01:2.0565689991246048e+00:4.9806511069112963e-01:2.6987968226180334e+00:2.4988810710503490e-01:3.2078481206125016e+00 + CVs 20 + 1.9947968114106801e-01 1.4253286166561505e-01 -2.5706001112996385e-01 + 3.6941646409167916e-01 2.6899592072869716e-01 -4.6345998818377110e-01 + 5.3803085365796555e-01 3.2875323579386656e-01 -6.3985930567398031e-01 + 7.1819794820613991e-01 3.5252628140822256e-01 -8.0362789077676000e-01 + 9.0606803226741861e-01 3.3995776574940079e-01 -9.4954396855769319e-01 + 1.0968689935225189e+00 2.9393630353706968e-01 -1.0737166630005259e+00 + 1.2869264037445576e+00 2.2325878180747039e-01 -1.1754531909040171e+00 + 1.4761376460860738e+00 1.4235518070664932e-01 -1.2578935715610635e+00 + 1.6650670524448101e+00 6.0013747383668381e-02 -1.3236858869982440e+00 + 1.8458877005819871e+00 -2.9218632096965402e-02 -1.3761723129543508e+00 + 2.0069261865303027e+00 -1.3187388526663213e-01 -1.4263391735428668e+00 + 2.1490300599547165e+00 -2.3936222293616982e-01 -1.4884985943233335e+00 + 2.2871027551539083e+00 -3.3528253306986056e-01 -1.5677731622168900e+00 + 2.4339835035633879e+00 -4.1280271048140382e-01 -1.6573593222477401e+00 + 2.5906404527749758e+00 -4.7811646978585109e-01 -1.7463594914471627e+00 + 2.7516262937623672e+00 -5.4060296088421955e-01 -1.8291880511686629e+00 + 2.9151139591939494e+00 -6.0655396478878676e-01 -1.9004966725610437e+00 + 3.0847819551489222e+00 -6.8034577877298363e-01 -1.9474182774943127e+00 + 3.3015856984940113e+00 -6.7822259890738956e-01 -2.0420166179202668e+00 + id 14001 + loc 8.7945324182510376e-01 7.7628600597381592e-01 399 + blend 0.0000000000000000e+00 + interp 5.6971318654634662e-01:4.4373075624372232e-01:1.2405576214946645e-04:4.0151872866403360e-01:7.4098483762649614e-01:2.6940731594206707e-01:1.0594584942975125e+00:3.8594725661232776e-01:1.9182384155108494e+00:4.9268635467727212e-01:2.2335633687745688e+00:5.6970748941448113e-01:2.9131986483103578e+00:2.9383303475676203e-01:3.2927263664561486e+00 + CVs 20 + -2.4234727856421731e-01 2.9699548569475376e-01 -1.5699781510002409e-01 + -4.6902335789417893e-01 5.8901347051981801e-01 -3.4100599216644156e-01 + -6.9293799335627548e-01 8.6303755487852318e-01 -5.7513576967137503e-01 + -9.2088392662282781e-01 1.1013359038120092e+00 -8.6098421624125776e-01 + -1.1554731540072336e+00 1.2871976044286844e+00 -1.1852273141101959e+00 + -1.4003785059604339e+00 1.4088293077328331e+00 -1.5332145234557444e+00 + -1.6605863633202236e+00 1.4592971399966719e+00 -1.8939342556957246e+00 + -1.9420822831430997e+00 1.4396103201916051e+00 -2.2578544813357659e+00 + -2.2489937748351858e+00 1.3597504597404340e+00 -2.6138860014786305e+00 + -2.5765064848442027e+00 1.2237649637406145e+00 -2.9505689029979010e+00 + -2.9124645289063986e+00 1.0241638105725044e+00 -3.2590220123495159e+00 + -3.2529087607780913e+00 7.7140293588845710e-01 -3.5304326914241888e+00 + -3.6077068014142553e+00 5.0733447673757404e-01 -3.7579159148635926e+00 + -3.9825573533235517e+00 2.6064559621370054e-01 -3.9425806629601219e+00 + -4.3703178125387696e+00 2.5057306873241925e-02 -4.0910418682397589e+00 + -4.7439102579368875e+00 -1.7354410616610094e-01 -4.2062773415567722e+00 + -5.0381909609930045e+00 -2.4102749695918890e-01 -4.2913752371193006e+00 + -5.2223524673205501e+00 -1.9286071665503557e-01 -4.3631733124385734e+00 + -5.6245019604424202e+00 -2.2565541982953763e-01 -4.5005424054405161e+00 + id 14002 + loc 1.9182632863521576e-01 1.0249727964401245e-01 380 + blend 0.0000000000000000e+00 + interp 3.0893583962727339e-01:2.5237213484579268e-01:6.0903658910755776e-01:2.4130725540007494e-01:1.9119857299645764e+00:3.0893275026887712e-01:2.7299841485550909e+00:2.4589385688204571e-01:3.6317767624701558e+00 + CVs 20 + -4.1299372665206890e-01 3.7332028608594237e-01 6.1897442972423211e-01 + -6.7924627790695857e-01 6.3266128367343044e-01 1.1256260872422243e+00 + -9.0261367665201508e-01 8.4729307531047038e-01 1.6044283573832103e+00 + -1.1328748386846570e+00 1.0522309059014163e+00 2.0879543766873376e+00 + -1.3868656057424669e+00 1.2515220145545989e+00 2.5688454096512761e+00 + -1.6790076511085132e+00 1.4401379876546336e+00 3.0482944318391580e+00 + -2.0210981984418184e+00 1.6013712093101307e+00 3.5346037775313661e+00 + -2.4288098758907446e+00 1.7021306580602626e+00 4.0207700655222904e+00 + -2.9084098788327228e+00 1.7064631994380566e+00 4.4813322836432308e+00 + -3.4472855469722656e+00 1.5873500729520793e+00 4.8886238156976596e+00 + -4.0141647364777251e+00 1.3293715092667968e+00 5.2284192734966144e+00 + -4.5629954425178232e+00 9.2991378866729812e-01 5.4901824447658623e+00 + -5.0394626557773510e+00 4.1067206451888838e-01 5.6485979821283312e+00 + -5.4060175169850311e+00 -1.7301473738277950e-01 5.6845100815265788e+00 + -5.6813550192708071e+00 -7.6895681327370324e-01 5.6283680594674950e+00 + -5.9275575921017243e+00 -1.3706989929063447e+00 5.5520852105443819e+00 + -6.1882190006283349e+00 -1.9939349410548810e+00 5.5411180063499259e+00 + -6.4442299300377615e+00 -2.5992990517646288e+00 5.6462157929843144e+00 + -6.6254972942294588e+00 -3.0206024328825269e+00 5.7665221642251154e+00 + id 14003 + loc 7.6309889554977417e-01 5.0462681055068970e-01 412 + blend 0.0000000000000000e+00 + interp 4.4238301407199160e-01:2.9163144745613240e-01:7.6539339622339941e-02:3.8128077939369542e-01:9.4866735083772236e-01:4.2996103718260753e-01:1.3767569088222678e+00:2.9034018633724445e-01:2.0317196346654178e+00:3.9793912984969987e-01:2.7614571360929352e+00:4.4237859024185089e-01:3.4711880967885858e+00 + CVs 20 + 6.7903179524368729e-01 8.6384299822483357e-02 -2.4947756550806149e-01 + 1.1183910227550840e+00 8.0907500407835731e-02 -4.5343914187559914e-01 + 1.4982607994324271e+00 4.8697578863732827e-02 -6.3571744810201214e-01 + 1.8837709555007152e+00 1.4860589969654558e-02 -7.9678228900156878e-01 + 2.2744900879945233e+00 -2.3205245827363719e-02 -9.2657002464592042e-01 + 2.6698731139326495e+00 -6.8383253064909777e-02 -1.0176517838861825e+00 + 3.0676326081194256e+00 -1.2299480911449623e-01 -1.0656013187578028e+00 + 3.4635879739725999e+00 -1.8909657219121012e-01 -1.0697000367921761e+00 + 3.8519138157478503e+00 -2.6872874459293916e-01 -1.0330024389818182e+00 + 4.2257043362215434e+00 -3.6257198668018065e-01 -9.6066408556820426e-01 + 4.5842515938979984e+00 -4.7041213869215537e-01 -8.5895061016077967e-01 + 4.9454310097577610e+00 -6.0330555289426702e-01 -7.3916821382919640e-01 + 5.3289194454107820e+00 -7.9347331989814940e-01 -6.2452842900099348e-01 + 5.7226983842143264e+00 -1.0676336308934011e+00 -5.4203811825374593e-01 + 6.1006611371203405e+00 -1.4253947308890860e+00 -5.0805050130552076e-01 + 6.4450106845507484e+00 -1.8549919135994071e+00 -5.3625706600841583e-01 + 6.7383243141155020e+00 -2.3345563755994290e+00 -6.3998259807102564e-01 + 6.9623330563935077e+00 -2.8176758610273729e+00 -8.1038826129839991e-01 + 7.1193268519459245e+00 -3.1860876018853905e+00 -9.4805033130607219e-01 + id 14004 + loc 1.2358006834983826e-01 8.6980156600475311e-02 382 + blend 0.0000000000000000e+00 + interp 3.9407194677223523e-01:2.9615873786606356e-01:5.4039173215739456e-01:3.0400406484800857e-01:1.7789719594298743e+00:3.2370969858153897e-01:2.1441758260054722e+00:2.7103221594422766e-01:3.2945955532710993e+00:3.9406800605276754e-01:3.9649183033118844e+00 + CVs 20 + -5.2256476601752777e-01 1.5707354473371499e-01 -6.2710662127437833e-01 + -9.0686815953519861e-01 1.8298979974533258e-01 -1.0467928715936949e+00 + -1.2499774119402365e+00 1.5476805407885558e-01 -1.3971357833727929e+00 + -1.5828488400177918e+00 1.0847963273159422e-01 -1.7285591618809453e+00 + -1.8992496692885430e+00 5.6914612491376304e-02 -2.0423501674236917e+00 + -2.1986896198460841e+00 1.3424879498716402e-02 -2.3476165803029589e+00 + -2.4876325320338895e+00 -9.9822180960846829e-03 -2.6577080651607554e+00 + -2.7780279685829412e+00 -6.8629188946329744e-03 -2.9870679495005623e+00 + -3.0826998395843059e+00 1.5006487764635201e-02 -3.3540699055204044e+00 + -3.4135000583453152e+00 2.6566018332550678e-02 -3.7770666541895652e+00 + -3.7847833525034824e+00 -1.8834168023050157e-02 -4.2532462921387726e+00 + -4.2056053315960913e+00 -1.6471962304275323e-01 -4.7486947351824309e+00 + -4.6675060871158198e+00 -4.3054658690308445e-01 -5.2211958744424756e+00 + -5.1514293762641739e+00 -8.1217439913693656e-01 -5.6395108909917386e+00 + -5.6445831847576784e+00 -1.2891646350041071e+00 -5.9805189937435923e+00 + -6.1378928175056373e+00 -1.8376798264298331e+00 -6.2291457372113879e+00 + -6.6144758006366118e+00 -2.4406806200654989e+00 -6.3843868749673227e+00 + -7.0467228454380981e+00 -3.0716554111818652e+00 -6.4644613833055011e+00 + -7.4063258276521555e+00 -3.5846966409790211e+00 -6.5274323346325467e+00 + id 14005 + loc 4.2539489269256592e-01 9.5961219072341919e-01 400 + blend 0.0000000000000000e+00 + interp 3.8850494747319120e-01:2.6993756169647959e-01:5.6893672779611215e-02:3.7541500609254097e-01:7.5571527818366380e-01:3.2802404744867281e-01:1.6252583779448446e+00:3.8817752594589416e-01:2.3824255115395392e+00:3.3973581473477527e-01:3.0000711513646889e+00:3.8850106242371646e-01:3.6432988620674314e+00 + CVs 20 + -1.6328275818352753e-01 3.3281211755421530e-01 -1.5850467205170599e-01 + -3.5108150662241544e-01 6.4960182614437745e-01 -3.3713601669116533e-01 + -5.3139763379931904e-01 9.4419068935306694e-01 -5.6772306793319705e-01 + -6.9664889526163742e-01 1.1959905927209620e+00 -8.5385030792017114e-01 + -8.5460578837861512e-01 1.3866828213629203e+00 -1.1826102985448377e+00 + -1.0064793850149816e+00 1.5077478732156242e+00 -1.5413589030371746e+00 + -1.1472209128723756e+00 1.5575725809362551e+00 -1.9193267927695836e+00 + -1.2709661854201519e+00 1.5380313228977593e+00 -2.3084660762997555e+00 + -1.3722321133099378e+00 1.4533614584722030e+00 -2.7047944550139671e+00 + -1.4438761611419637e+00 1.3090303062636415e+00 -3.1010237943483006e+00 + -1.4814209483656993e+00 1.1127916704882468e+00 -3.4774366390991189e+00 + -1.4923305942853231e+00 8.7779833001206353e-01 -3.8047078344324023e+00 + -1.4939056487270834e+00 6.2478166852675909e-01 -4.0449177477479905e+00 + -1.4995238004798142e+00 3.9248758656974525e-01 -4.1525308610304732e+00 + -1.4985963166848137e+00 2.1944594911429416e-01 -4.1226361303653904e+00 + -1.4701999841398667e+00 8.9413519035525635e-02 -4.0307322283463005e+00 + -1.4222200359711097e+00 -5.2278880830056718e-02 -3.9534944135097350e+00 + -1.3940210391882069e+00 -2.4529532687781108e-01 -3.9252425321831748e+00 + -1.5017594472278775e+00 -5.7797290291072390e-01 -4.0053640616138741e+00 + id 14006 + loc 9.8037946224212646e-01 3.4611502289772034e-01 379 + blend 0.0000000000000000e+00 + interp 5.4394077896437454e-01:4.5894769292150195e-01:5.6801298646265819e-02:3.5107450446701349e-01:5.6331088378280358e-01:3.6461683017446400e-01:1.3935309399653719e+00:5.4393533955658491e-01:1.8544423390419245e+00:2.8903833449165450e-01:2.8371809315339531e+00:3.2529476642018929e-01:3.6356194478166262e+00 + CVs 20 + 4.3747887585677081e-01 3.5242903075072707e-01 -3.1114731192967968e-02 + 8.5159416410183042e-01 6.5572491965076429e-01 -7.2971145683333405e-02 + 1.2909308297954856e+00 9.1910610772488988e-01 -1.5250325972082726e-01 + 1.7718359346116344e+00 1.1602437166605628e+00 -2.7018095321272212e-01 + 2.2887633411857480e+00 1.3897166017566915e+00 -4.0104400480515501e-01 + 2.8460971469568972e+00 1.5954020249738685e+00 -5.1209531162495270e-01 + 3.4463309324450009e+00 1.7454125084135201e+00 -5.7163954486357182e-01 + 4.0709497951282740e+00 1.8092359116158383e+00 -5.5682075850788681e-01 + 4.6793902199443238e+00 1.7659623343108926e+00 -4.6443188848852146e-01 + 5.2212037789380457e+00 1.6051799899545602e+00 -3.1901943976795799e-01 + 5.6485029092102668e+00 1.3315120018783109e+00 -1.6302450960004078e-01 + 5.9223221940412056e+00 9.7156441983926500e-01 -3.3173436088993258e-02 + 6.0367620503638886e+00 5.7993969514984078e-01 5.9778001809120740e-02 + 6.0600221388442108e+00 2.0385798706409552e-01 1.4739439903793361e-01 + 6.0922050703804089e+00 -1.6858010778593480e-01 2.7715326480122227e-01 + 6.1840818965809294e+00 -5.5826529424567939e-01 4.5601534516037701e-01 + 6.3514141592137969e+00 -9.5747124068832701e-01 6.4786372284273863e-01 + 6.5789851730115485e+00 -1.3455670019544379e+00 8.2090003471605189e-01 + 6.6792648285343788e+00 -1.6416416210171390e+00 9.9594945239109034e-01 + id 14007 + loc 1.6374287009239197e-01 3.7904006242752075e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5684717168850775e-01:4.5630568782146846e-01:2.3790027960981897e-01:3.3278847980794890e-01:9.8544377095180369e-01:4.5684260321679088e-01:1.3832109384247140e+00:3.4113453201799743e-01:1.9953707597458585e+00:3.3595856374566679e-01:2.9946747138861167e+00:3.6473776904990263e-01:3.3805470314510657e+00:3.3818060502465780e-01:3.9489630960805666e+00 + CVs 20 + -2.6820965560284010e-01 1.8835514092239575e-01 -1.0193875684519943e-01 + -5.0824404297157122e-01 4.1167714163027241e-01 -1.5086295706188213e-01 + -7.2840722711035677e-01 6.6599476398224344e-01 -1.6940076788778102e-01 + -9.4245899869325844e-01 9.5309800680192358e-01 -1.8002124016533289e-01 + -1.1750475449495694e+00 1.2685519820631126e+00 -2.1624138566955931e-01 + -1.4523800638463822e+00 1.5876917275541256e+00 -3.1597420384615693e-01 + -1.7969614030967807e+00 1.8664968900939005e+00 -5.1564158399212578e-01 + -2.1955781048016529e+00 2.0253219195138006e+00 -8.5271352651439247e-01 + -2.5429180958473876e+00 1.9869924435875639e+00 -1.3002982342923755e+00 + -2.7424645768201978e+00 1.7821394003077076e+00 -1.7479660475562011e+00 + -2.8085268202719513e+00 1.4738302360040532e+00 -2.1567982788706010e+00 + -2.7525014992742007e+00 1.0795630617103873e+00 -2.5439585968617733e+00 + -2.5573530606330110e+00 6.4800316938059366e-01 -2.8652564420751414e+00 + -2.2827574482464890e+00 2.8682903239809077e-01 -3.0506903788750517e+00 + -2.0117307160184583e+00 1.7807352959953282e-02 -3.1424480914628536e+00 + -1.7538402554072579e+00 -1.9918140534433415e-01 -3.2537185393069841e+00 + -1.5260710655109504e+00 -3.2129912593555532e-01 -3.4858972978919747e+00 + -1.3386074604756613e+00 -3.1364949046152768e-01 -3.8645339279218343e+00 + -1.0873408001877094e+00 -3.1407454888486441e-01 -4.3609888862878785e+00 + id 14008 + loc 2.3175255954265594e-01 8.5783541202545166e-01 403 + blend 0.0000000000000000e+00 + interp 2.9871248101574716e-01:2.8883062339335941e-01:1.1261519649042429e-02:2.7337056732253817e-01:8.6247264623703168e-01:2.7309088244467822e-01:1.5511236167979727e+00:2.7706736143826488e-01:2.1780296599323936e+00:2.9870949389093704e-01:3.3493344001907399e+00 + CVs 20 + 7.7430394183219259e-03 1.7555057043129363e-01 -4.5331245033943750e-02 + -1.7535360642877029e-02 3.2158063968448825e-01 -7.2559506545934752e-02 + -6.0863573030220636e-02 4.5231242940505356e-01 -8.3526397965460186e-02 + -1.0620995485336493e-01 5.7481227003566426e-01 -7.6914423258252179e-02 + -1.4986208733151751e-01 6.8515207841038195e-01 -5.3628199496157158e-02 + -1.8603696008172094e-01 7.7873889354656178e-01 -1.6251127209062161e-02 + -2.0781689143552756e-01 8.5181622547608626e-01 3.0762436963964464e-02 + -2.0926207708427919e-01 9.0277337919834189e-01 8.0856829619499276e-02 + -1.8472435976420032e-01 9.3263987687833605e-01 1.2562510960954903e-01 + -1.2659025597965823e-01 9.4848798831520753e-01 1.5608761146260908e-01 + -2.6058166429538399e-02 9.6654737403909929e-01 1.6287057979168221e-01 + 1.1748729197695218e-01 1.0146958545685103e+00 1.4006628059936663e-01 + 2.8157707233380486e-01 1.1242756474438540e+00 9.6025400873020486e-02 + 4.2155585316982791e-01 1.3029846764539412e+00 5.8588404642963360e-02 + 4.9840081627055538e-01 1.5143211215718957e+00 5.9608042060014535e-02 + 5.0720759339297483e-01 1.7009295851301911e+00 1.0786377552789031e-01 + 4.7162356771406533e-01 1.8373935988008241e+00 1.7623475874325997e-01 + 4.1176934855805691e-01 1.9303193006652479e+00 2.3489718393002032e-01 + 3.4377663313907636e-01 1.9275964883203092e+00 2.9355412551734683e-01 + id 14009 + loc 9.7161293029785156e-01 1.1049962043762207e-01 407 + blend 0.0000000000000000e+00 + interp 4.7431031037220278e-01:1.1329186254255671e-01:9.2814667738170242e-01:3.0127216383901467e-01:1.8442392097419247e+00:2.4632336521010062e-01:2.6628281450200366e+00:4.7430556726909906e-01:3.0194305623408413e+00 + CVs 20 + -3.8802549653911383e-01 2.8638812759053012e-01 1.3802974128882489e-01 + -5.8736865771774416e-01 4.1680470358788857e-01 2.5084678986853276e-01 + -7.0338404517178987e-01 4.7973976946950919e-01 3.5347280669452452e-01 + -8.1736906631781647e-01 5.2751095635949286e-01 4.5078178844816774e-01 + -9.1934269239176225e-01 5.5830601132104296e-01 5.4260233759833332e-01 + -9.9651458650468072e-01 5.7231433948087140e-01 6.3285671262271281e-01 + -1.0326046680935077e+00 5.7668169744875475e-01 7.3310889551682290e-01 + -1.0191159016684355e+00 5.9617285211641169e-01 8.6399807743691881e-01 + -9.9192159449278561e-01 6.6151765526989781e-01 1.0284227839809619e+00 + -1.0058558449357504e+00 7.4797355474620442e-01 1.1780686668429550e+00 + -1.0559127205869359e+00 8.0800296393015392e-01 1.2754950952706854e+00 + -1.1192345035021611e+00 8.3359367237492865e-01 1.3218114978939128e+00 + -1.1882114417200846e+00 8.2123576193155723e-01 1.3209007878451118e+00 + -1.2605885558007199e+00 7.5052177970872058e-01 1.2701137482897678e+00 + -1.3374050758431497e+00 6.1598300692457997e-01 1.1693605696505842e+00 + -1.4253016145656707e+00 4.5318504016408967e-01 1.0274656888044560e+00 + -1.5302714017626300e+00 3.0713936386673968e-01 8.6054785572056547e-01 + -1.6623958924453732e+00 1.9578033837122893e-01 6.8566778942473339e-01 + -1.7968753025629736e+00 2.1977933019273349e-01 5.5077021845285867e-01 + id 14010 + loc 8.2243785262107849e-02 7.7106177806854248e-01 401 + blend 0.0000000000000000e+00 + interp 4.1112275768164680e-01:3.3619502036935300e-01:3.2450436499637980e-01:2.8290968585124160e-01:1.0421698169328768e+00:3.2261466482338563e-01:1.9081347046345623e+00:4.1111864645406998e-01:2.3713764739937822e+00:2.5455453128243866e-01:3.0144203298777570e+00:4.0482358638960825e-01:3.4868829120895128e+00 + CVs 20 + -5.2370851732038037e-02 2.8016529824977660e-01 -1.9450484509168578e-01 + -1.0902026070126494e-01 5.4872320189543111e-01 -3.7616048040319483e-01 + -1.5980223768520999e-01 8.1253972047350742e-01 -5.6171022926402547e-01 + -1.9954227782513323e-01 1.0697834577740308e+00 -7.6047472296687202e-01 + -2.3211851349533280e-01 1.3130088573512642e+00 -9.7713423466459959e-01 + -2.6701855855915757e-01 1.5364747271674126e+00 -1.2139253596332820e+00 + -3.2352895428044826e-01 1.7372080787697686e+00 -1.4713061877070444e+00 + -4.2251829032023114e-01 1.9052870912626378e+00 -1.7464842752591789e+00 + -5.7437473333738320e-01 2.0252101214152582e+00 -2.0288358293011890e+00 + -7.7615630468468544e-01 2.0821283296442479e+00 -2.3019754243346844e+00 + -1.0114079362719521e+00 2.0677348242518852e+00 -2.5512772801201207e+00 + -1.2542396289076332e+00 1.9825541760126617e+00 -2.7698352390063596e+00 + -1.4755160276157555e+00 1.8316289807469945e+00 -2.9580930009919721e+00 + -1.6503485128951525e+00 1.6171243283099985e+00 -3.1225830129696042e+00 + -1.7749858795857210e+00 1.3371563318889428e+00 -3.2690037432728762e+00 + -1.8743955954335176e+00 9.9363336607124486e-01 -3.3811069675725518e+00 + -1.9788448070852389e+00 5.9920478977680913e-01 -3.4208154251176182e+00 + -2.0890723096203101e+00 1.9415422299035329e-01 -3.3401523764743954e+00 + -2.0730380910028301e+00 -4.2425126679267455e-02 -3.0939473282878298e+00 + id 14011 + loc 7.7731794118881226e-01 6.5526843070983887e-01 396 + blend 0.0000000000000000e+00 + interp 3.4598768089540610e-01:3.4598422101859716e-01:5.5861500924483121e-01:3.2235778139575105e-01:1.0447599458068164e+00:3.4213560482475264e-01:1.9994592624218490e+00:3.4468000358424916e-01:2.5689129245656175e+00:3.4223527764178224e-01:3.0085663037160941e+00:3.1514873614101624e-01:3.8685654456621701e+00 + CVs 20 + 8.7146185626191275e-01 2.0885304225160295e-01 -3.9223639073274763e-01 + 1.4418950378758204e+00 2.6694409922655848e-01 -7.2618684353769392e-01 + 1.9251099812184640e+00 2.7128622158465227e-01 -1.0497882934574756e+00 + 2.3997576409269574e+00 2.5614671792508459e-01 -1.3761604184631069e+00 + 2.8635077709419936e+00 2.1269273666702349e-01 -1.6947660964019136e+00 + 3.3156750904105610e+00 1.3460886167450958e-01 -1.9980885487568445e+00 + 3.7569602208486650e+00 1.8861485830306668e-02 -2.2839105289462500e+00 + 4.1881987643430669e+00 -1.3711201115508942e-01 -2.5535853223484528e+00 + 4.6065938333939300e+00 -3.3783310925399723e-01 -2.8065273039586529e+00 + 5.0029416929506159e+00 -5.8801459896043573e-01 -3.0415972136808125e+00 + 5.3628626310357408e+00 -8.9190646585804068e-01 -3.2668724109519776e+00 + 5.6711125645671601e+00 -1.2528821860769388e+00 -3.4974922302899323e+00 + 5.9163814611045780e+00 -1.6673850704718283e+00 -3.7404580774551097e+00 + 6.0924463903986048e+00 -2.1216785422239850e+00 -3.9912733928608191e+00 + 6.1954956485524191e+00 -2.5946290070833027e+00 -4.2418641584745416e+00 + 6.2243360617217265e+00 -3.0635513293762724e+00 -4.4796512908169488e+00 + 6.1867509597670534e+00 -3.5098047704404416e+00 -4.6874737702315805e+00 + 6.1053881101162339e+00 -3.9226964758909606e+00 -4.8663709095702599e+00 + 6.0120069170849630e+00 -4.3413113927472686e+00 -5.0520552151022553e+00 + id 14012 + loc 7.8032433986663818e-01 7.4970138072967529e-01 373 + blend 0.0000000000000000e+00 + interp 3.8784063532154595e-01:3.6799961754766441e-01:7.7015147267372408e-01:2.9446266122414910e-01:1.7546726754619053e+00:3.1524739899193566e-01:2.8808486708897796e+00:3.8783675691519276e-01:3.2142754789722385e+00:3.0418451978126892e-01:3.9033013713844142e+00 + CVs 20 + -2.5818241404026099e-01 2.8801747463246397e-01 -1.4699633460503139e-01 + -5.1112770112203476e-01 6.0092624830952768e-01 -3.0962535972330174e-01 + -7.4508238650131475e-01 9.4396022892260101e-01 -4.9052345979683259e-01 + -9.4641671078732692e-01 1.3180718586824189e+00 -6.9637363124839435e-01 + -1.1062184214803026e+00 1.7133682751965724e+00 -9.4246068029010388e-01 + -1.2259250549553646e+00 2.0965323772408113e+00 -1.2574262076325340e+00 + -1.3105888931027765e+00 2.4153862027428463e+00 -1.6631618589968482e+00 + -1.3588826214177199e+00 2.6291194386641452e+00 -2.1493851787797382e+00 + -1.3618373868231446e+00 2.7231114055620624e+00 -2.6821164839026599e+00 + -1.3081105842345715e+00 2.6995036617524573e+00 -3.2217406345504194e+00 + -1.2005976434393442e+00 2.5539903657119654e+00 -3.7297983315732348e+00 + -1.0798260066190233e+00 2.2598315401268887e+00 -4.1557816285954878e+00 + -1.0334261606665542e+00 1.8292307499247682e+00 -4.4428331921766659e+00 + -1.1570941745067311e+00 1.3703003758945387e+00 -4.6038643549689313e+00 + -1.4926849715884849e+00 1.0095636375048516e+00 -4.6926585616399841e+00 + -1.9841684266831525e+00 8.4224389013731971e-01 -4.7027898375105712e+00 + -2.5028008047797146e+00 9.0455749964590337e-01 -4.6021423446448324e+00 + -2.9113645084395330e+00 1.1014949274069745e+00 -4.4083026398681291e+00 + -3.2520443281407223e+00 1.0347210112784209e+00 -4.3490837353528340e+00 + id 14013 + loc 8.0437231063842773e-01 2.9219922423362732e-01 395 + blend 0.0000000000000000e+00 + interp 3.9761274461944868e-01:3.9586113149624286e-01:1.5470388442573280e-01:2.9125796055264852e-01:9.7553003045608577e-01:3.1578480394856973e-01:1.7318647175003039e+00:3.9760876849200250e-01:2.5407131504258977e+00:2.9639365121171468e-01:3.0246935245686934e+00:3.3097948284545525e-01:3.8258257819310861e+00 + CVs 20 + -3.8870169899370310e-01 1.9107682664441983e-01 3.8898521428167687e-01 + -6.8014052012920456e-01 3.2412376387730724e-01 7.0987657391037962e-01 + -9.4454222790214237e-01 4.4429465257266293e-01 1.0211367297753342e+00 + -1.2112304806272889e+00 5.7232783059468662e-01 1.3472176901281330e+00 + -1.4859152740824109e+00 7.0192029376352949e-01 1.6899566757370943e+00 + -1.7723956228124162e+00 8.2575716074413485e-01 2.0506581281731395e+00 + -2.0695704948454758e+00 9.4113858457343968e-01 2.4345608298590253e+00 + -2.3760075078438372e+00 1.0467572814325641e+00 2.8509640537463885e+00 + -2.6922502973221105e+00 1.1322115937830541e+00 3.3048549120293256e+00 + -3.0117405411553908e+00 1.1804925938440949e+00 3.7923671716909113e+00 + -3.3177717724222422e+00 1.1761884883500726e+00 4.3126676347530797e+00 + -3.5972892976367050e+00 1.1065788933201839e+00 4.8667400086635313e+00 + -3.8402016995868458e+00 9.6856792905964273e-01 5.4379416750077247e+00 + -4.0271485516329362e+00 7.8358656005599814e-01 5.9864387664966001e+00 + -4.1425448873940365e+00 5.8532127309038806e-01 6.4787406510645216e+00 + -4.1956984236585413e+00 3.8057900270025868e-01 6.9127556051694121e+00 + -4.1986005643993831e+00 1.5549527442436650e-01 7.2931943713021319e+00 + -4.1442684089769113e+00 -8.4186737600443262e-02 7.6015978247207503e+00 + -3.9926480885744553e+00 -3.7994851062002244e-01 7.8311467667110284e+00 + id 14014 + loc 4.3876245617866516e-01 1.9599965214729309e-01 393 + blend 0.0000000000000000e+00 + interp 3.6069695030934978e-01:2.7000783634033837e-01:2.2713401795238586e-01:2.6048327127837351e-01:1.0217109825919981e+00:3.6037423810453745e-01:1.6621742762831806e+00:3.1703750769922784e-01:2.0342666964376392e+00:3.5862424572815776e-01:2.6770418116932131e+00:2.7817805159796161e-01:3.0897845076925177e+00:3.6069334333984671e-01:3.9122427759165008e+00 + CVs 20 + -8.3592716128984640e-02 3.8108910397190510e-01 3.7381470812784334e-01 + -1.8394235275472787e-01 7.7597343730191981e-01 7.1329388722491527e-01 + -3.1175786686795048e-01 1.1893711612177702e+00 1.0117898591858128e+00 + -4.9836643339594278e-01 1.5966464577893651e+00 1.2722932947158252e+00 + -7.7501755699666164e-01 1.9549451781185330e+00 1.4984914269748217e+00 + -1.1447326334929850e+00 2.2407566085863659e+00 1.6902178502087608e+00 + -1.5877812523355930e+00 2.4534034006026606e+00 1.8475835663733213e+00 + -2.0770880931341176e+00 2.5932920253573339e+00 1.9838911352407607e+00 + -2.5835198425866865e+00 2.6541329100888196e+00 2.1259734316197787e+00 + -3.0732361670274799e+00 2.6277592018786904e+00 2.2976559650070012e+00 + -3.5102146108179979e+00 2.5099589678837981e+00 2.5060100965475991e+00 + -3.8680905594198283e+00 2.3022868827815444e+00 2.7391921024361263e+00 + -4.1322387070743964e+00 2.0053614362170191e+00 2.9775744204036045e+00 + -4.2749504965710505e+00 1.6289219086932816e+00 3.2085897219573685e+00 + -4.2594250956104034e+00 1.2026754755171416e+00 3.4344611715423761e+00 + -4.0774833576751819e+00 7.6164408668723915e-01 3.6927370855932953e+00 + -3.7411915529361179e+00 3.4429762639940709e-01 4.0459484387976161e+00 + -3.2937169256837149e+00 -1.5184740979443223e-02 4.5030360010983266e+00 + -2.9489028677994877e+00 -5.4373899174907314e-01 4.9901045493541449e+00 + id 14015 + loc 3.2172068953514099e-01 9.2365908622741699e-01 378 + blend 0.0000000000000000e+00 + interp 4.4599105448522919e-01:4.0262502696495195e-01:1.4659105802455008e-01:3.4826991221173625e-01:7.9480842520658990e-01:4.4598659457468437e-01:1.0602719128015663e+00:2.2009335343285186e-01:1.9755233245175308e+00:2.2720685522990339e-01:2.6830714782122715e+00:3.9630614243369522e-01:3.0006856749891799e+00:4.2825460475476590e-01:3.4280456754765209e+00:3.7911459062758707e-01:3.9262499717032164e+00 + CVs 20 + 4.8482415733836387e-01 3.5772768533452293e-01 2.8240256085227444e-01 + 8.7875130879618202e-01 6.2036123830060286e-01 4.7900851331911426e-01 + 1.2629637833584080e+00 8.2163649276400830e-01 6.1948345672284044e-01 + 1.6630198182645890e+00 9.8786944252733211e-01 7.1664984973413359e-01 + 2.0751332026103251e+00 1.1328933169032047e+00 7.7810853516020306e-01 + 2.5086020685477908e+00 1.2616513034366599e+00 8.1918413694098779e-01 + 2.9781645786577844e+00 1.3603762821437317e+00 8.5525518332621409e-01 + 3.4921632205404887e+00 1.4110067344970854e+00 8.9581748796737792e-01 + 4.0401125733241940e+00 1.4047151874652033e+00 9.5484811975453376e-01 + 4.5910589907345560e+00 1.3455918626588150e+00 1.0410633129486355e+00 + 5.1165348092382938e+00 1.2521884616673462e+00 1.1443169307959651e+00 + 5.6096148586479515e+00 1.1409581997607892e+00 1.2518444420342085e+00 + 6.0667514843941106e+00 9.8731187984776891e-01 1.3599969733246888e+00 + 6.4633193852112178e+00 7.2333424029717985e-01 1.4546356768361910e+00 + 6.7759194172656736e+00 3.3003290482140102e-01 1.5294573792533177e+00 + 6.9956199754336330e+00 -1.0229312374924504e-01 1.6189756370978543e+00 + 7.1198614085024055e+00 -4.5104421416722307e-01 1.7519617835806982e+00 + 7.2254688169950878e+00 -7.0812725556255662e-01 1.9209302544191775e+00 + 7.5512180570842222e+00 -9.8121324574261548e-01 2.0901250749626641e+00 + id 14016 + loc 8.0395954847335815e-01 5.9821569919586182e-01 380 + blend 0.0000000000000000e+00 + interp 3.5033740943587827e-01:3.1290230704939537e-01:4.4915910893975342e-01:2.8012404940918934e-01:1.1892855893657837e+00:2.9319958152628084e-01:2.4975220752641838e+00:2.7629235375347350e-01:3.4061892024787310e+00:3.5033390606178394e-01:3.9982566231119900e+00 + CVs 20 + -3.9987072312225092e-01 2.1217871958199561e-01 -8.3747924428889242e-01 + -7.4027459340643631e-01 2.9633474986361036e-01 -1.4896362592630092e+00 + -1.0438315647179679e+00 3.1920980828067003e-01 -2.0848431707470403e+00 + -1.3286319009848153e+00 3.0114140018141766e-01 -2.6728974919144433e+00 + -1.5827100565428953e+00 2.3424723949648274e-01 -3.2376983126456347e+00 + -1.7998736470729708e+00 1.1149648982413773e-01 -3.7592864464607088e+00 + -1.9782551591931055e+00 -6.6848326611448794e-02 -4.2150947729804473e+00 + -2.1216819827243949e+00 -2.8664274564136139e-01 -4.5887184683387208e+00 + -2.2448536416250584e+00 -5.2458607189878470e-01 -4.8816032948315087e+00 + -2.3643207295574018e+00 -7.5738387378148309e-01 -5.1056923908084944e+00 + -2.4853900135349223e+00 -9.5569279979331778e-01 -5.2627845411957814e+00 + -2.6125992658928192e+00 -1.0880274853400609e+00 -5.3628081458500976e+00 + -2.7625588097090885e+00 -1.1662210133226845e+00 -5.4511309496274700e+00 + -2.9458160050202924e+00 -1.2817561691481223e+00 -5.5706847935208446e+00 + -3.1476670210970070e+00 -1.5248744625012511e+00 -5.7090581298201553e+00 + -3.3438615619336334e+00 -1.8848022542773837e+00 -5.8452846029072498e+00 + -3.5096505182807798e+00 -2.2895433767394238e+00 -5.9872688043981839e+00 + -3.6426130851916518e+00 -2.6641456264408490e+00 -6.1397980985607568e+00 + -3.8883505520767416e+00 -2.9043964392725012e+00 -6.2581704383686443e+00 + id 14017 + loc 8.2171583175659180e-01 8.9154559373855591e-01 382 + blend 0.0000000000000000e+00 + interp 3.2525437114291511e-01:3.2525111859920369e-01:6.9573930959565544e-04:2.5243095465625737e-01:7.8593613461297307e-01:3.1835525508937396e-01:1.4671032854267421e+00:2.7897384502468481e-01:2.0594158304524104e+00:2.3888089710926161e-01:3.0093450816722713e+00 + CVs 20 + 1.2069713430225968e+00 6.9373087925985039e-02 -6.2255955564082022e-01 + 2.0078273736744667e+00 -4.0754981489223963e-02 -1.0468925933955988e+00 + 2.7323483737741729e+00 -1.9824308695843867e-01 -1.4102569453320228e+00 + 3.4803764425952277e+00 -3.5313810497730858e-01 -1.7608486620891985e+00 + 4.2290828645160436e+00 -4.9247352403558875e-01 -2.1030338212707855e+00 + 4.9554181861431417e+00 -6.1333738960943796e-01 -2.4413880482000656e+00 + 5.6341296392873375e+00 -7.3862674520834304e-01 -2.7931266383404014e+00 + 6.2525090040828379e+00 -9.0276402186211924e-01 -3.1669793662821402e+00 + 6.8067580845856366e+00 -1.1390503747334377e+00 -3.5562766779034307e+00 + 7.2881172084002452e+00 -1.4675949813120894e+00 -3.9391060321075897e+00 + 7.6852197612620774e+00 -1.8855142706589632e+00 -4.2881684055074167e+00 + 8.0035203766237775e+00 -2.3687184138372261e+00 -4.5930854534508816e+00 + 8.2591852407554320e+00 -2.8947281674993692e+00 -4.8520149433319517e+00 + 8.4535435227484346e+00 -3.4399221528001740e+00 -5.0438241274700122e+00 + 8.6030317843172242e+00 -3.9757933694350784e+00 -5.1576316293318811e+00 + 8.7371702774850402e+00 -4.4822687183332786e+00 -5.1934879230508031e+00 + 8.8811161627108763e+00 -4.9425116475631032e+00 -5.1650869676112112e+00 + 9.0449357000223465e+00 -5.3894718135642954e+00 -5.1167769553599740e+00 + 9.2216674540411887e+00 -5.9113770802198164e+00 -5.1321840191777266e+00 + id 14018 + loc 7.6497685909271240e-01 6.5524572134017944e-01 400 + blend 0.0000000000000000e+00 + interp 4.5678293148029675e-01:3.4500291060831434e-01:4.6740898157434208e-02:4.5677836365098196e-01:8.9406268458012761e-01:3.2243840845214483e-01:1.6992700362222748e+00:3.2499167245221949e-01:2.2198422794334736e+00:3.8359603494346051e-01:2.9447982695852764e+00:2.6517744759452422e-01:3.5772126852541080e+00 + CVs 20 + -1.3949122036035755e-01 1.4537092772991794e-01 -2.1800287685509348e-01 + -2.8547796978619455e-01 2.7557135466390181e-01 -4.5229571667177093e-01 + -4.2963605388495962e-01 3.8635465865700080e-01 -7.0491700029295945e-01 + -5.6949177207836221e-01 4.7223365616870289e-01 -9.7346126012243772e-01 + -7.0928630672122117e-01 5.2953324850012440e-01 -1.2560997216292484e+00 + -8.5233195425163055e-01 5.5876204323463252e-01 -1.5540940627534687e+00 + -9.9777022952295136e-01 5.6220364911666854e-01 -1.8657157273755893e+00 + -1.1420481468474619e+00 5.3638717911526068e-01 -2.1800784978637102e+00 + -1.2830047847132902e+00 4.7162731332424923e-01 -2.4828454680910492e+00 + -1.4208926894409144e+00 3.6073375720666512e-01 -2.7633127261771859e+00 + -1.5563597812772039e+00 2.0439906141979081e-01 -3.0094386321539806e+00 + -1.6907253079898439e+00 1.2065783669725105e-02 -3.2037911154654983e+00 + -1.8280000086015593e+00 -1.9883523280632431e-01 -3.3332189196041417e+00 + -1.9735726049043976e+00 -4.0835755851992128e-01 -3.4008330337166934e+00 + -2.1309966926618622e+00 -5.9833801369494899e-01 -3.4194641025984178e+00 + -2.3032563610088475e+00 -7.4324481332922132e-01 -3.3937646620100024e+00 + -2.4936327910339320e+00 -8.1109055808208186e-01 -3.3322470171115377e+00 + -2.6842645837417414e+00 -8.2305799728996221e-01 -3.2755715333664526e+00 + -2.7003178004903807e+00 -1.1944955510530302e+00 -3.3076156089365409e+00 + id 14019 + loc 8.2265788316726685e-01 7.1418249607086182e-01 1069 + blend 0.0000000000000000e+00 + interp 4.9164161978910836e-01:3.5656403676720405e-01:1.1002706544498642e-02:3.7431795865241180e-01:7.0593735630033261e-01:4.0668683372615283e-01:1.1514079735782401e+00:3.5935800396926421e-01:2.0022767380560982e+00:4.9163670337291049e-01:2.7172016851189600e+00:3.5661365390154587e-01:3.2258005766118165e+00 + CVs 20 + 1.4656390157325505e-01 3.0049186661768490e-01 -2.2686273113210947e-01 + 2.7021367416090780e-01 5.9788973338879337e-01 -4.2412072409015533e-01 + 4.0767100152366054e-01 8.8733792753420804e-01 -5.9447546781003213e-01 + 5.9670947787840967e-01 1.1611786151464405e+00 -7.3839368121477400e-01 + 8.4899111727981791e-01 1.4040857285150734e+00 -8.4957579389926652e-01 + 1.1311193150143890e+00 1.6159245561173763e+00 -9.3215112468072159e-01 + 1.3905597318429619e+00 1.8163174055031905e+00 -1.0011459282018635e+00 + 1.5878905220520130e+00 2.0205139213891465e+00 -1.0666783897938743e+00 + 1.7054870287933550e+00 2.2262832729307269e+00 -1.1277432178765046e+00 + 1.7462752989188997e+00 2.4312086924674059e+00 -1.1927941001226310e+00 + 1.7075972204061562e+00 2.6505612769320450e+00 -1.3254825407028250e+00 + 1.5615194676067645e+00 2.8219560642509007e+00 -1.5972213231010939e+00 + 1.3429165349932881e+00 2.8416985522574003e+00 -1.9619870963036843e+00 + 1.1134280603382289e+00 2.6925745184089003e+00 -2.3721240961557672e+00 + 9.3390111026015710e-01 2.3828716555297085e+00 -2.8041938133167541e+00 + 8.6469004928739368e-01 1.9321373488537839e+00 -3.2151853713257856e+00 + 9.4535827070222189e-01 1.3649485446529175e+00 -3.5294959435327176e+00 + 1.1756056786905333e+00 7.5184784000550731e-01 -3.6549472464484727e+00 + 1.3585375057186606e+00 3.7390617634007173e-01 -3.7489062173076064e+00 + id 14020 + loc 9.1868990659713745e-01 9.3044811487197876e-01 379 + blend 0.0000000000000000e+00 + interp 5.8183865885662100e-01:4.8832781617865068e-01:1.9966972062967969e-01:5.8183284047003248e-01:9.8172408366402575e-01:5.7438899387220554e-01:1.3810447965991577e+00:4.9752393330270001e-01:1.9994765644040178e+00:5.3413931528609337e-01:2.3797741321739605e+00:4.4065997246491001e-01:3.0021975856882142e+00:5.3939760779946000e-01:3.3874948791861410e+00 + CVs 20 + -2.0137198812914242e-01 3.3520369104404651e-01 2.0927699410259282e-01 + -4.2302487108378856e-01 6.6009240541297354e-01 4.0458094551169455e-01 + -6.5313654467732951e-01 9.6301387889066614e-01 6.0833391683199856e-01 + -8.8457787854405123e-01 1.2487131764568697e+00 8.1509063855498254e-01 + -1.1191872449868276e+00 1.5250180885351008e+00 1.0098853481535146e+00 + -1.3679861201880141e+00 1.7895926726954745e+00 1.1855925512129759e+00 + -1.6431799511708565e+00 2.0317362900235989e+00 1.3402134798676988e+00 + -1.9487689291834123e+00 2.2411966200489726e+00 1.4734229279471345e+00 + -2.2823486165828926e+00 2.4113007713610077e+00 1.5863369957812634e+00 + -2.6399362137510574e+00 2.5347866441710547e+00 1.6834021243366717e+00 + -3.0188450211269493e+00 2.5997378766641370e+00 1.7735311241050133e+00 + -3.4122173141044265e+00 2.5867297855331488e+00 1.8671678599102983e+00 + -3.8024909344465141e+00 2.4776243924116561e+00 1.9742373403261824e+00 + -4.1696856228035211e+00 2.2819354610521501e+00 2.1043659082507458e+00 + -4.5174384116651787e+00 2.0468537171872030e+00 2.2625964357750608e+00 + -4.8561489432520144e+00 1.8418004881235146e+00 2.4458628280405446e+00 + -5.1670657047996027e+00 1.7289693001599029e+00 2.6517589088675249e+00 + -5.4568630655765640e+00 1.6984775890091792e+00 2.8817992246671205e+00 + -5.8640700087523463e+00 1.6265016488774595e+00 3.1521861487837519e+00 + id 14021 + loc 7.7774286270141602e-01 9.6770000457763672e-01 399 + blend 0.0000000000000000e+00 + interp 4.2375188438686079e-01:2.8442331042935820e-01:3.3260977270692715e-01:2.7552257898105775e-01:1.1686824851698652e+00:3.9789791723530060e-01:1.8292722128898491e+00:4.2374764686801691e-01:2.2032614181098342e+00:3.7478607641086953e-01:2.9660918863352981e+00:3.8033079470040404e-01:3.8103218992746282e+00 + CVs 20 + -1.6240520965662436e-01 2.9893578252266800e-01 -1.7918842992473355e-01 + -3.1171262931344090e-01 5.7417409646478001e-01 -3.6446699547611361e-01 + -4.4680145305138624e-01 8.2435121038814974e-01 -5.6515743202675983e-01 + -5.6709532503690074e-01 1.0474808989662836e+00 -7.8226108521218352e-01 + -6.7526551313242344e-01 1.2434511833288826e+00 -1.0140943341966535e+00 + -7.7649356010569226e-01 1.4137027175569359e+00 -1.2625211800601219e+00 + -8.7836327256456714e-01 1.5532219098078466e+00 -1.5361535076269697e+00 + -9.9038432099552520e-01 1.6486029921118117e+00 -1.8434917840322211e+00 + -1.1251974263332039e+00 1.7024293557625185e+00 -2.1795334520434220e+00 + -1.2983761971670353e+00 1.7349757578280740e+00 -2.5338480338870362e+00 + -1.5124920441436298e+00 1.7287806450816383e+00 -2.9073403244022886e+00 + -1.7408048850986757e+00 1.6167476630262572e+00 -3.2952047947784977e+00 + -1.9703727078469648e+00 1.3798032203711863e+00 -3.6752572492733746e+00 + -2.2450397270736064e+00 1.0800387902054052e+00 -4.0324065300460763e+00 + -2.6020571163482673e+00 7.7352064726505465e-01 -4.3499213579372507e+00 + -3.0077014222482692e+00 4.5940018831026175e-01 -4.5958394309040553e+00 + -3.3787923597966021e+00 1.6167677885170395e-01 -4.7464063064607798e+00 + -3.6784522665786956e+00 -3.6314183215748641e-02 -4.8239234152662389e+00 + -4.1431930462839617e+00 -1.6169580837107955e-02 -4.9103837651867526e+00 + id 14022 + loc 1.7874443903565407e-02 5.1012450456619263e-01 402 + blend 0.0000000000000000e+00 + interp 4.5412531885621360e-01:3.5945372647186163e-01:1.6858691523596758e-01:2.0842934512159561e-01:8.5848584931094218e-01:3.7710053390966036e-01:1.9176831403295864e+00:3.8357423163250048e-01:1.9997961104784934e+00:4.5412077760302505e-01:2.6181809845980339e+00:3.4070670444144047e-01:3.1748187412972788e+00:3.2647058460806017e-01:3.9238549216441498e+00 + CVs 20 + -1.4074631211452659e-01 2.9311056053877638e-01 -2.2233063694653853e-02 + -2.9571121260831879e-01 6.0427640646212866e-01 -6.4859791978581494e-02 + -4.3848703019142582e-01 9.4105822222524360e-01 -1.4099386289354249e-01 + -5.4990553873810244e-01 1.2892295280161796e+00 -2.5698222587733749e-01 + -6.2659389568809731e-01 1.6246455224974943e+00 -4.1380549035517389e-01 + -6.6815244462623702e-01 1.9261413769505498e+00 -6.0327069599643812e-01 + -6.7193964173193643e-01 2.1830830807966222e+00 -8.1084583887195660e-01 + -6.3503224177045536e-01 2.3982958735580957e+00 -1.0227241681175978e+00 + -5.7020478648565798e-01 2.5920405680259631e+00 -1.2365198968574811e+00 + -5.0468639528858095e-01 2.7898433637377229e+00 -1.4571411037102511e+00 + -4.4483449271631947e-01 3.0117167040315458e+00 -1.6865682334489265e+00 + -3.6470819594605242e-01 3.2702019579313197e+00 -1.9402551667514434e+00 + -2.1911499095554487e-01 3.5224722376842363e+00 -2.2536301199053588e+00 + 4.7188317251507517e-02 3.6527364978381449e+00 -2.6401685364680416e+00 + 4.4664933942245133e-01 3.5379201549076713e+00 -3.0894857723616052e+00 + 8.8693039439951515e-01 3.0560165282749097e+00 -3.5815226668307152e+00 + 1.1383958462298638e+00 2.1605211991974631e+00 -4.1015729833410663e+00 + 9.8078112155746078e-01 1.2230788754972937e+00 -4.6064419223501405e+00 + 8.1715193425732702e-01 1.0587378322682095e+00 -4.8497244441773981e+00 + id 14023 + loc 1.9877573847770691e-01 7.8541111946105957e-01 396 + blend 0.0000000000000000e+00 + interp 4.1432832966906430e-01:3.2164009637379998e-01:4.6215035348692202e-02:4.1432418638576762e-01:9.1475956383196189e-01:3.7765151756313853e-01:1.4148827218185378e+00:3.6953791582831397e-01:2.0454921216462258e+00:3.3281368302591574e-01:2.9390389993697434e+00:3.5661916149559675e-01:3.5048650542321425e+00 + CVs 20 + 8.5489963222551069e-01 2.5828318635009045e-01 -2.6205809077266190e-01 + 1.4290444199842802e+00 3.4269673559392688e-01 -5.0649464080666751e-01 + 1.9312705928047769e+00 3.5928152492527043e-01 -7.6066094322177169e-01 + 2.4563396863650691e+00 3.5804617239509245e-01 -1.0333998808532416e+00 + 2.9982663326353740e+00 3.3369612126696080e-01 -1.3079303443159076e+00 + 3.5455772672555805e+00 2.8132092159765032e-01 -1.5681289888962628e+00 + 4.0863934600262946e+00 1.9671674505468428e-01 -1.8040216942313303e+00 + 4.6114348692858007e+00 7.2817277716420659e-02 -2.0122409725951735e+00 + 5.1082695365886810e+00 -1.0100174822334451e-01 -2.1955368105839517e+00 + 5.5567668724531334e+00 -3.3152974279001191e-01 -2.3589164013954780e+00 + 5.9408568265155282e+00 -6.1679908562505004e-01 -2.5016340095516520e+00 + 6.2559704379090917e+00 -9.5674437773696264e-01 -2.6272295820797340e+00 + 6.5037138768167182e+00 -1.3531328979210797e+00 -2.7373805573851495e+00 + 6.6833377610706375e+00 -1.7975033516130334e+00 -2.8260122932054217e+00 + 6.7940640518742299e+00 -2.2717261368590527e+00 -2.8875521316549717e+00 + 6.8363051868344851e+00 -2.7593840959599616e+00 -2.9229755842493192e+00 + 6.8052799831171686e+00 -3.2475977854253770e+00 -2.9301141432276934e+00 + 6.7006762140736917e+00 -3.7213308504672531e+00 -2.9051715409741945e+00 + 6.5508958548167620e+00 -4.2550231797921736e+00 -2.8725640972985560e+00 + id 14024 + loc 5.2680283784866333e-01 7.2305500507354736e-02 401 + blend 0.0000000000000000e+00 + interp 5.8054953502144757e-01:4.2665212602303765e-01:1.1206216526624513e-01:3.0232051310996166e-01:9.4999537855105509e-01:5.8054372952609734e-01:1.6406630846566568e+00:2.8477556939714227e-01:2.3976186362451308e+00:4.1900051633648672e-01:2.9988897729077735e+00:3.8791942702920368e-01:3.6816282450600513e+00 + CVs 20 + 1.3734476908858467e-01 3.3549076299157909e-01 2.1644639275821603e-01 + 2.9217800631261265e-01 6.6720736320160490e-01 4.5876674763959246e-01 + 4.5839510329170408e-01 9.8535290147680976e-01 7.2299335422726230e-01 + 6.3450181148127627e-01 1.2731144334672357e+00 1.0110464112941886e+00 + 8.2266645042426279e-01 1.5110208031210346e+00 1.3251944542258265e+00 + 1.0257333410853473e+00 1.6823379859562479e+00 1.6609861349514132e+00 + 1.2454098450118587e+00 1.7813265484141303e+00 2.0099101226934803e+00 + 1.4815331997693957e+00 1.8179742739594418e+00 2.3634044119232724e+00 + 1.7296767054328912e+00 1.8007190801168991e+00 2.7158965044848706e+00 + 1.9752401665455217e+00 1.7197887287820999e+00 3.0678376924036628e+00 + 2.2040192257479720e+00 1.5704765487923520e+00 3.4187727984446754e+00 + 2.4257758848969102e+00 1.3881817767573004e+00 3.7672070973765091e+00 + 2.6666238834133864e+00 1.2162962487149660e+00 4.1150028684698041e+00 + 2.9440464331960183e+00 1.0546229969774445e+00 4.4626760456610395e+00 + 3.2661093287469098e+00 8.8174592093637738e-01 4.8061876666922574e+00 + 3.5959873329981034e+00 7.6311610604723257e-01 5.1203703511372156e+00 + 3.7753876941531721e+00 8.6904919717627749e-01 5.3580834884143318e+00 + 3.6542976963545106e+00 1.1116774124585878e+00 5.5057699997141896e+00 + 3.9305353456668701e+00 1.2813311092818958e+00 5.7300712738478214e+00 + id 14025 + loc 4.8661696910858154e-01 2.3983910679817200e-01 412 + blend 0.0000000000000000e+00 + interp 5.1282242907247211e-01:3.9284562761890363e-01:1.9562467867549560e-02:3.6467568689932317e-01:7.2903241663737450e-01:4.0349626092546353e-01:1.1697115864247389e+00:2.3669740295588429e-01:1.8106019404889377e+00:4.4199280918089395e-01:2.2828659757561431e+00:3.6925109177658760e-01:3.0150824793956690e+00:5.1281730084818145e-01:3.6856258013195911e+00 + CVs 20 + -1.5550247214992488e-01 1.2277325752089141e-01 -5.2726775949328941e-01 + -2.7165963401446874e-01 1.5832625190462227e-01 -9.1934361901542005e-01 + -3.6229221099051595e-01 1.5831883951804648e-01 -1.2810643889822386e+00 + -4.2977699093909105e-01 1.4425579060150562e-01 -1.6611312909279350e+00 + -4.7296352447272094e-01 1.1137262503568779e-01 -2.0489382296852918e+00 + -4.9284061869481399e-01 5.8963866647100072e-02 -2.4327801428973830e+00 + -4.9229679030782192e-01 -1.0159989467740660e-02 -2.8033319976390216e+00 + -4.7642340180727244e-01 -9.1686194373056917e-02 -3.1547559987343488e+00 + -4.5149650974979272e-01 -1.8046754757507055e-01 -3.4810401557188544e+00 + -4.2381186110572761e-01 -2.7057551895951160e-01 -3.7780490596374801e+00 + -3.9953625211162602e-01 -3.5779117603874000e-01 -4.0466188202468949e+00 + -3.8746841215237188e-01 -4.4488375235651922e-01 -4.2959428700875621e+00 + -4.0103593025441642e-01 -5.3975662678252379e-01 -4.5363560369314815e+00 + -4.5450690934433885e-01 -6.4317737482670689e-01 -4.7677891802134935e+00 + -5.5507287541514128e-01 -7.4510510659158458e-01 -4.9862142275984258e+00 + -6.9791228867601585e-01 -8.3227569944477664e-01 -5.1895642145140730e+00 + -8.6924605226009199e-01 -8.9340061764784062e-01 -5.3759521809214865e+00 + -1.0575015723858419e+00 -9.2032990471745579e-01 -5.5413033649775887e+00 + -1.2954732143020076e+00 -9.2698966006245453e-01 -5.6596091641947393e+00 + id 14026 + loc 7.0464426279067993e-01 1.3366009294986725e-01 373 + blend 0.0000000000000000e+00 + interp 3.1262884548301201e-01:3.1262571919455717e-01:6.8195660804357972e-01:2.0423962876422616e-01:1.0460346447736544e+00:2.3391590921041774e-01:1.9773745325342684e+00:2.5769025965171288e-01:2.4469440974583092e+00:2.1818030941655478e-01:3.1112803393759005e+00:2.6980415008348230e-01:3.9924406053419514e+00 + CVs 20 + 2.8198893826511662e-01 4.2692853857523549e-01 4.0439288338696922e-02 + 5.8727705171520406e-01 8.1706558951855057e-01 8.7802547155142560e-02 + 9.1664042856600547e-01 1.1219093600254979e+00 1.3661031915604077e-01 + 1.2415397259881309e+00 1.3545244459525787e+00 1.6228805878361055e-01 + 1.5492183608447034e+00 1.5570736795052262e+00 1.4877003878746536e-01 + 1.8510266143583944e+00 1.7614069938417170e+00 1.2440470238494172e-01 + 2.1556754842200010e+00 1.9870762656397145e+00 1.3267839569894363e-01 + 2.4541352708750512e+00 2.2469302581458068e+00 2.0515265725758530e-01 + 2.7264695760293720e+00 2.5430920797265677e+00 3.5864874768470029e-01 + 2.9596774259743155e+00 2.8594152644114015e+00 6.0242761694349345e-01 + 3.1486446073412693e+00 3.1518385873603760e+00 9.4061196190898611e-01 + 3.2817060589651526e+00 3.3414014931030422e+00 1.3618126985143970e+00 + 3.3351026263560719e+00 3.3457983343337805e+00 1.8115108795493806e+00 + 3.2981216074820985e+00 3.1355416480632696e+00 2.1830766439208498e+00 + 3.2196182173636592e+00 2.7524182770621772e+00 2.3612804844060742e+00 + 3.2571080766510230e+00 2.2905928975539993e+00 2.3509520135721296e+00 + 3.5362892872976710e+00 1.8532914049306675e+00 2.1980094574378026e+00 + 3.9268908031979333e+00 1.5276167412082950e+00 1.9805771999239856e+00 + 4.2265626235048233e+00 1.0696537095707392e+00 1.9550937257404648e+00 + id 14027 + loc 9.3928617238998413e-01 2.0100012421607971e-01 395 + blend 0.0000000000000000e+00 + interp 4.5369774640322852e-01:3.4382504841589756e-01:2.5270543064932816e-01:4.5369320942576452e-01:8.2199004024996736e-01:4.1401747143717149e-01:1.4001720243930085e+00:3.0863555556718431e-01:2.0229192737321724e+00:2.9393147993671770e-01:2.9979500222370072e+00:3.3687221938008599e-01:3.7803717764033835e+00 + CVs 20 + -4.5928948265608371e-01 3.6893839737313328e-01 2.5565515542626399e-01 + -8.1415270209225066e-01 6.7849326362784712e-01 5.2883401658958173e-01 + -1.1422582652889706e+00 9.5390669968541497e-01 8.0032975159736419e-01 + -1.4821305688773005e+00 1.2087005982562580e+00 1.0696254074009697e+00 + -1.8438621655093037e+00 1.4384963195944507e+00 1.3353899226198163e+00 + -2.2370227160048475e+00 1.6313498906538009e+00 1.6014393921265691e+00 + -2.6688743098283871e+00 1.7703534709475555e+00 1.8692981845412269e+00 + -3.1404054415769735e+00 1.8359703607598119e+00 2.1333548687040373e+00 + -3.6414477881994696e+00 1.8097768872200790e+00 2.3831442549840847e+00 + -4.1493904096586380e+00 1.6790289954262385e+00 2.6093494178554191e+00 + -4.6336726001886577e+00 1.4382390111506482e+00 2.8053938831983869e+00 + -5.0588347791730905e+00 1.0893544082941502e+00 2.9614291280936564e+00 + -5.3875965325502495e+00 6.5175500107268736e-01 3.0638590158459080e+00 + -5.6099479465927917e+00 1.7260648552724822e-01 3.1134619515904483e+00 + -5.7748606009984345e+00 -3.0381194939865841e-01 3.1365822865059076e+00 + -5.9423196699911802e+00 -7.5560646991635672e-01 3.1676507443333612e+00 + -6.1278601432620565e+00 -1.1579839820086399e+00 3.2427541588663527e+00 + -6.3050247725792525e+00 -1.4860402677107620e+00 3.3864807103986863e+00 + -6.4599999916740627e+00 -1.7759687291036905e+00 3.4764575454821731e+00 + id 14028 + loc 7.3736143112182617e-01 2.0861615240573883e-01 380 + blend 0.0000000000000000e+00 + interp 2.8035515393175653e-01:2.7822363743967865e-01:9.4580487069304620e-01:2.5208337835136507e-01:1.9774031418794773e+00:2.8035235038021722e-01:2.9084484263058519e+00:2.5935160378702937e-01:3.7908520634445781e+00 + CVs 20 + 6.0898456738605256e-01 2.4041144042910328e-01 6.1361221990942716e-01 + 1.0874670536620532e+00 3.4295123515192283e-01 1.0154483728096817e+00 + 1.5219969516416683e+00 3.9009103974585896e-01 1.3609178084150870e+00 + 1.9460068284502037e+00 4.1910063559340471e-01 1.7150461956259067e+00 + 2.3534891080029201e+00 4.3637454863366920e-01 2.0846873327957183e+00 + 2.7407103893665989e+00 4.4515367170348008e-01 2.4769043317469261e+00 + 3.1115318865480939e+00 4.3889947116047345e-01 2.8990563243581526e+00 + 3.4701300018538976e+00 3.9752631499209223e-01 3.3545370721565257e+00 + 3.8097316768925267e+00 2.9547914358170213e-01 3.8403102185729336e+00 + 4.1169310140964495e+00 1.1443763891219350e-01 4.3422724393842955e+00 + 4.3829551697323597e+00 -1.5252076189245356e-01 4.8301055435847378e+00 + 4.5987188464103337e+00 -5.0091733730199284e-01 5.2654359010591012e+00 + 4.7491592944503358e+00 -9.2016167902204726e-01 5.6152111734196843e+00 + 4.8249233513274383e+00 -1.3990456438569212e+00 5.8627291463068385e+00 + 4.8369981420947035e+00 -1.9194168363307265e+00 6.0194193169380146e+00 + 4.8126250472453558e+00 -2.4552375737741574e+00 6.1228831969231816e+00 + 4.7822172806742982e+00 -2.9873542151391392e+00 6.2107892902333370e+00 + 4.7762493435148237e+00 -3.4966596032858672e+00 6.2974426300464730e+00 + 4.8092074814061538e+00 -3.8566625532332988e+00 6.3372724868095052e+00 + id 14029 + loc 9.2193144559860229e-01 6.8091350793838501e-01 403 + blend 0.0000000000000000e+00 + interp 4.7365417956716993e-01:2.6959222461186200e-01:1.9952478181206601e-05:2.7096721757348480e-01:9.7895486500801276e-01:4.7364944302537426e-01:1.2367381847056194e+00:2.6186725282100748e-01:2.0567541691194302e+00:2.7313241992171994e-01:3.2381908157317412e+00 + CVs 20 + 6.5362278916330507e-03 8.1927611801140637e-02 3.1628929613857992e-02 + -1.1086526291583500e-02 1.3116100133860439e-01 6.0676192828634123e-02 + -5.1539314670067310e-02 1.7049777059484952e-01 8.1769266455360715e-02 + -9.4464918814021220e-02 2.0498242883129081e-01 9.8375893987795018e-02 + -1.3510823158068036e-01 2.3035045240181556e-01 1.1528735857742162e-01 + -1.7091368428530310e-01 2.4457474339988822e-01 1.3682379346063667e-01 + -1.9872403364632882e-01 2.4826554755068711e-01 1.6721808920898851e-01 + -2.1449794354193333e-01 2.4438575027534590e-01 2.1062758183388686e-01 + -2.1272171808430723e-01 2.3743723493773769e-01 2.7126294890630187e-01 + -1.8647060884356509e-01 2.3311907257241168e-01 3.5233616296835235e-01 + -1.2779689824210716e-01 2.3809812235881361e-01 4.5417662519859370e-01 + -2.8849702307811788e-02 2.5972634207014705e-01 5.7239708154326563e-01 + 1.1717675610427562e-01 3.0585620808166325e-01 6.9717790209495156e-01 + 3.1568713498795792e-01 3.8305750821275136e-01 8.1244987007529446e-01 + 5.6826563506578531e-01 4.9496603479980683e-01 8.9556195100505620e-01 + 8.6797797738542759e-01 6.3880753059555417e-01 9.1835647183059732e-01 + 1.1940906176577342e+00 7.9866985828832149e-01 8.5312131072716268e-01 + 1.5154337649518688e+00 9.5116938324412581e-01 6.8423637589597841e-01 + 1.5546536265615702e+00 9.5632971083985618e-01 6.2197778119605718e-01 + id 14030 + loc 5.0116497278213501e-01 3.1895112991333008e-01 378 + blend 0.0000000000000000e+00 + interp 5.2221960376158072e-01:4.0455324625144928e-01:1.9781792227984873e-01:3.2813019145841449e-01:9.3943985917482031e-01:4.7760588165639606e-01:1.8295004627551195e+00:5.2221438156554312e-01:2.0575011500424267e+00:4.2087363357179869e-01:2.6080071116551116e+00:3.0312784467641452e-01:3.2277105648571136e+00 + CVs 20 + -3.9045499163080899e-01 3.1306673446103706e-01 -1.1295818882402081e-01 + -7.6066315349771130e-01 5.7976948928093064e-01 -1.6926959715521492e-01 + -1.1367714374389735e+00 8.2229066039784549e-01 -1.9021205796445390e-01 + -1.5328086468995192e+00 1.0663156206499527e+00 -1.9606598951690613e-01 + -1.9450323357428647e+00 1.3255769177332097e+00 -2.0964414394466468e-01 + -2.3730636504978975e+00 1.5992872338131341e+00 -2.5720638697835962e-01 + -2.8215065521700851e+00 1.8719571771695296e+00 -3.6215032732199615e-01 + -3.2888587634060569e+00 2.1215488662539896e+00 -5.3866167052825453e-01 + -3.7634259521274469e+00 2.3269353814708609e+00 -7.8529677890330352e-01 + -4.2315742865400603e+00 2.4758816467856093e+00 -1.0846041635831858e+00 + -4.6888520149902142e+00 2.5584128241163078e+00 -1.4193852945722196e+00 + -5.1408719921966011e+00 2.5560734020965068e+00 -1.7819742907236362e+00 + -5.5823419899259896e+00 2.4438079544213127e+00 -2.1579876531868489e+00 + -5.9753666371921241e+00 2.2338116675467914e+00 -2.5031974732392905e+00 + -6.2784041292582344e+00 2.0024520358662072e+00 -2.7755980557658155e+00 + -6.4759717566064632e+00 1.8249482023609529e+00 -2.9728858394570565e+00 + -6.5546258785258562e+00 1.7357087415804626e+00 -3.1108508802407124e+00 + -6.5336943854957426e+00 1.6993880728648794e+00 -3.2250359450509918e+00 + -6.7188209210878487e+00 1.5299799731442438e+00 -3.4107094611757716e+00 + id 14031 + loc 2.4829535186290741e-01 3.9971369504928589e-01 382 + blend 0.0000000000000000e+00 + interp 3.9288455473644368e-01:3.1274341846968884e-01:1.9513276916709488e-01:2.9912904535570611e-01:9.9753695922829211e-01:2.7257622826637778e-01:1.8623929806662778e+00:3.9288062589089634e-01:2.4468765379131820e+00:2.6226760316187953e-01:3.0423236216601097e+00 + CVs 20 + -5.3818502363009368e-01 1.6141206611885306e-01 -7.7706001868783015e-01 + -9.5611726514901996e-01 2.1017011266654001e-01 -1.2661227144909213e+00 + -1.3576208749058498e+00 2.1555179629651411e-01 -1.6673246493375626e+00 + -1.7785295735449704e+00 2.0089264047885946e-01 -2.0581542865750371e+00 + -2.2086392501992078e+00 1.5595493867388033e-01 -2.4412267339603413e+00 + -2.6404797311865806e+00 7.2782565322364934e-02 -2.8157038631419558e+00 + -3.0741513889696792e+00 -5.4484189794869353e-02 -3.1738276673756465e+00 + -3.5113729088095536e+00 -2.3006421860433890e-01 -3.5024094064720028e+00 + -3.9431828628189938e+00 -4.5338924193831742e-01 -3.7868994866418424e+00 + -4.3523876476682819e+00 -7.1365816017641426e-01 -4.0116275658544165e+00 + -4.7343917884678586e+00 -9.9853028731073890e-01 -4.1708466192528544e+00 + -5.1027406115250047e+00 -1.3078150782274935e+00 -4.2727226634531963e+00 + -5.4676878404728360e+00 -1.6461479161975718e+00 -4.3302492189451041e+00 + -5.8263554099255295e+00 -2.0119236275832870e+00 -4.3561329589298259e+00 + -6.1708955429026409e+00 -2.3969598531040810e+00 -4.3596016462823366e+00 + -6.4941143439394589e+00 -2.7953393008272909e+00 -4.3455368308820619e+00 + -6.7851172365927788e+00 -3.2082932923737619e+00 -4.3150403202094640e+00 + -7.0335384311359377e+00 -3.6421002214704803e+00 -4.2693890806435038e+00 + -7.2686801630018500e+00 -4.1104345995349956e+00 -4.2285076012308123e+00 + id 14032 + loc 8.3325779438018799e-01 9.5987778902053833e-01 1069 + blend 0.0000000000000000e+00 + interp 5.0198551559783533e-01:3.8030071177193370e-01:6.9942491251465788e-02:4.4282437064880076e-01:6.5439619697855111e-01:5.0198049574267933e-01:9.9471119495112581e-01:3.8540685521325252e-01:1.8984002610783686e+00:3.5683046382648781e-01:2.2424508019645986e+00:3.6175304289294835e-01:3.0504265091764680e+00 + CVs 20 + 1.5152029328680250e-01 3.2823348012298503e-01 -1.0489875601614718e-01 + 3.0667634100835189e-01 6.6787368120034662e-01 -2.0385572141407862e-01 + 4.8978349902835772e-01 9.9540043551266910e-01 -2.7125716993630689e-01 + 7.2001604103679040e-01 1.2914731272579465e+00 -2.9768833193861410e-01 + 1.0125847305400864e+00 1.5389645207152367e+00 -2.8623516494952822e-01 + 1.3673471920735558e+00 1.7218216132009188e+00 -2.5214900379590632e-01 + 1.7609777065022825e+00 1.8219361197135107e+00 -2.1936882979181882e-01 + 2.1542471879005682e+00 1.8243833517719628e+00 -2.0004508360615841e-01 + 2.5098981133935583e+00 1.7278503122322393e+00 -1.8614020518055113e-01 + 2.8020976805178139e+00 1.5432109314534799e+00 -1.6255880650467291e-01 + 3.0117108195717641e+00 1.2924646556684654e+00 -1.1781191602856748e-01 + 3.1269557744359173e+00 1.0123559510572255e+00 -4.6824126030053939e-02 + 3.1508866761459333e+00 7.5624673824131117e-01 4.4478834095155517e-02 + 3.1165712838611124e+00 5.4386250513477630e-01 1.5149461468066172e-01 + 3.0718217767584863e+00 3.6124473557463244e-01 2.8611713999007848e-01 + 3.0546117638367880e+00 2.1217831911971863e-01 4.5242054586866082e-01 + 3.0832596574406494e+00 9.7965505130933050e-02 6.6131017787657298e-01 + 3.1794404247364754e+00 2.0500755396598569e-02 9.6439307615968040e-01 + 3.3592844988945005e+00 -1.4384021134067337e-02 1.4007514211461045e+00 + id 14033 + loc 4.4747102260589600e-01 6.2157750129699707e-01 396 + blend 0.0000000000000000e+00 + interp 4.4249325830404501e-01:4.4248883337146200e-01:1.4135059560548391e-02:3.3669010657555654e-01:9.8368845959199935e-01:3.3285295303315776e-01:1.7425073625515868e+00:3.4292115273391599e-01:2.2404517412057050e+00:3.3829898309992196e-01:2.9417323777577575e+00:3.4164507538656752e-01:3.2379873125441123e+00 + CVs 20 + 7.9759922183515441e-01 2.6675879390529228e-01 -2.7283191159535386e-01 + 1.3233076945036848e+00 3.9381892880293873e-01 -4.8412637779128259e-01 + 1.7812924221919031e+00 4.7778402141420118e-01 -6.8276868462283369e-01 + 2.2605060787151947e+00 5.6345291761360894e-01 -8.8767533650811070e-01 + 2.7716485306386489e+00 6.4689325165834966e-01 -1.1014108558744973e+00 + 3.3245011993396671e+00 7.2214946810795855e-01 -1.3282582803081500e+00 + 3.9266116814210776e+00 7.7911579810880183e-01 -1.5765573474306891e+00 + 4.5827848039725678e+00 7.9713405406316218e-01 -1.8543611097161892e+00 + 5.2894199711233210e+00 7.4217570597466254e-01 -2.1626555979129214e+00 + 6.0233652070697214e+00 5.7677265883442908e-01 -2.4990889150195450e+00 + 6.7385184089919248e+00 2.7711720440982401e-01 -2.8620884411290515e+00 + 7.3866527138906681e+00 -1.5433028802902671e-01 -3.2399315593374762e+00 + 7.9405654721203085e+00 -6.9306103740761582e-01 -3.6063538956467784e+00 + 8.3914040627995785e+00 -1.3050227343390839e+00 -3.9363383210525766e+00 + 8.7390181396076052e+00 -1.9588741562007956e+00 -4.2186213967312165e+00 + 8.9860004346632891e+00 -2.6354165479624867e+00 -4.4521374374226870e+00 + 9.1283430395131990e+00 -3.3116368992647134e+00 -4.6417661750449524e+00 + 9.1756950200656640e+00 -3.9333767530761397e+00 -4.7915708145049312e+00 + 9.2007488645312439e+00 -4.2846553997777344e+00 -4.8912993184229903e+00 + id 14034 + loc 1.2581510841846466e-01 1.3339664041996002e-01 402 + blend 0.0000000000000000e+00 + interp 5.2124741585957424e-01:3.6587810514128039e-01:8.3153164047503614e-01:5.2124220338541571e-01:1.3350957226160709e+00:3.4310919027174325e-01:2.0005343494826260e+00:3.6548358811032067e-01:2.8673812103895724e+00:4.3699009065675348e-01:3.1585984291581459e+00:3.3092459458154605e-01:3.9913501891152174e+00 + CVs 20 + -1.2396270113322025e-01 3.1626200029010965e-01 2.5169329223542675e-01 + -2.7560399087722703e-01 6.4044507040975429e-01 4.8563770086796515e-01 + -4.7166421432091143e-01 9.6568149374688828e-01 6.9989997583274721e-01 + -7.1688218988646790e-01 1.2792727753399882e+00 8.9541981142758220e-01 + -1.0059447402696382e+00 1.5675148126886893e+00 1.0767048368738921e+00 + -1.3292601189758413e+00 1.8208211928048099e+00 1.2488725926077369e+00 + -1.6735293113988736e+00 2.0325342526570682e+00 1.4162063220390051e+00 + -2.0218700673310601e+00 2.1977848698570646e+00 1.5873201763454245e+00 + -2.3629112198842961e+00 2.3156489928973754e+00 1.7741782338877181e+00 + -2.6966578508673940e+00 2.3849697190127452e+00 1.9831025650933560e+00 + -3.0141125862457443e+00 2.3978705972200212e+00 2.2082650959874299e+00 + -3.2849520770428176e+00 2.3500520079025091e+00 2.4395566452019173e+00 + -3.4822652943279677e+00 2.2558118893351917e+00 2.6743203587909186e+00 + -3.5991588185649079e+00 2.1496882151467531e+00 2.9165355131882791e+00 + -3.6404841977163040e+00 2.0812855864816950e+00 3.1634687895418421e+00 + -3.6235641428918455e+00 2.0998057050559131e+00 3.3932261387320883e+00 + -3.5770501153438983e+00 2.2278807087712114e+00 3.5666999101640493e+00 + -3.5462790101709252e+00 2.4090531665676682e+00 3.7282342557671848e+00 + -3.6006175246152998e+00 2.5487092379586835e+00 4.1963175492979738e+00 + id 14035 + loc 6.3563430309295654e-01 5.3578972816467285e-01 401 + blend 0.0000000000000000e+00 + interp 4.8077958865370601e-01:2.4875417180981618e-01:5.5267935111258382e-04:4.8077478085781949e-01:9.3236120867404459e-01:3.8797500969720283e-01:1.2815693453075863e+00:2.7824519432207617e-01:2.0001596876063763e+00:3.7625387515576958e-01:2.8995760615106323e+00:3.8401523427423973e-01:3.4014059595461750e+00 + CVs 20 + -2.2326266181929749e-01 2.5968248496462010e-01 -1.3636060760091756e-01 + -4.1422850054636084e-01 5.2680980358865093e-01 -2.8384886947987464e-01 + -5.8342228315567868e-01 7.9889416251551237e-01 -4.5056050099314326e-01 + -7.3431606906589630e-01 1.0708820074710235e+00 -6.4557472699585428e-01 + -8.4899235690294694e-01 1.3261828758877963e+00 -8.7417397269168129e-01 + -9.1232203481413565e-01 1.5483279311333229e+00 -1.1371156342567292e+00 + -9.3495812948906099e-01 1.7408258758478319e+00 -1.4396956737742228e+00 + -9.5659003645949703e-01 1.9169582958256073e+00 -1.7989387820477973e+00 + -1.0342982951180955e+00 2.0725200026312853e+00 -2.2232709133117337e+00 + -1.2223197519368942e+00 2.1809491272263064e+00 -2.6939100856367579e+00 + -1.5480684095250949e+00 2.2152001277752791e+00 -3.1693217489789398e+00 + -2.0080992568540847e+00 2.1596060820117651e+00 -3.6057284926109228e+00 + -2.5709138354382621e+00 2.0032577171545221e+00 -3.9889710156855487e+00 + -3.1934748320506507e+00 1.7355198536590768e+00 -4.3382335337091753e+00 + -3.8395206011296046e+00 1.3594121678956601e+00 -4.6508914101191356e+00 + -4.4597370995412611e+00 9.3036232321787238e-01 -4.9257066667179084e+00 + -4.9748597015031013e+00 5.6667764109290142e-01 -5.2452696138269435e+00 + -5.3394957343236698e+00 3.4690861312505816e-01 -5.6819397004227010e+00 + -5.7895242128198161e+00 4.1439330352438963e-02 -6.1820531982819951e+00 + id 14036 + loc 9.3709267675876617e-02 2.6514989137649536e-01 412 + blend 0.0000000000000000e+00 + interp 4.5035761404481928e-01:4.5035311046867887e-01:9.6752357431569846e-03:4.1405902763785213e-01:4.4321033142838073e-01:2.6297066622445137e-01:1.0031332411433671e+00:2.8581493157779952e-01:1.9804399010049893e+00:2.9788714252061843e-01:2.9875123222870061e+00:3.3708453328917143e-01:3.6095320965435231e+00 + CVs 20 + -1.2709599331352717e-01 1.7612398834207355e-01 -5.0331123356778495e-01 + -2.5159205807636464e-01 2.5889828935503884e-01 -8.4393857238054193e-01 + -3.6540569431544617e-01 3.1135789468323072e-01 -1.1484703522418140e+00 + -4.5731340274329224e-01 3.6525668980839415e-01 -1.4690854170020984e+00 + -5.2141860836443876e-01 4.1874530920681324e-01 -1.8003589620134937e+00 + -5.5236153686691947e-01 4.7033942239562776e-01 -2.1349533168806443e+00 + -5.4483588846285080e-01 5.1993072516207794e-01 -2.4641072609653878e+00 + -4.9662624964676866e-01 5.6785639386259068e-01 -2.7789064899990139e+00 + -4.1160555145052091e-01 6.1366804246720519e-01 -3.0708965036268023e+00 + -2.9614343113585523e-01 6.5789623364221517e-01 -3.3334104830099727e+00 + -1.4193007121124135e-01 7.0752866079935273e-01 -3.5718535595227334e+00 + 8.5808735497962085e-02 7.6907603366198596e-01 -3.8181637228701018e+00 + 3.9936802631989432e-01 8.1798532672340762e-01 -4.1179112174968502e+00 + 7.3838014744923219e-01 8.0916844081413686e-01 -4.4778325713599667e+00 + 1.0451313856363404e+00 7.3222503682961593e-01 -4.8679220360364113e+00 + 1.3159906468938694e+00 5.9467762857840278e-01 -5.2770020343073618e+00 + 1.5562338840731949e+00 3.9544904249402690e-01 -5.7036965805346860e+00 + 1.7515620433255616e+00 1.4822536412976106e-01 -6.1203821072269120e+00 + 1.8306079589410054e+00 2.6226570914717140e-02 -6.2810127025613411e+00 + id 14037 + loc 7.5676894187927246e-01 8.2032161951065063e-01 400 + blend 0.0000000000000000e+00 + interp 3.7766930458157055e-01:3.7766552788852475e-01:2.5181838356682062e-01:3.5317233633040662e-01:1.0469178019656469e+00:3.7628205314182450e-01:1.7066567729691062e+00:3.3044644861523298e-01:2.0378414703619532e+00:3.3378675581116518e-01:2.6597508464346475e+00:3.3983227579903313e-01:3.0131475125233336e+00:3.3319541581929379e-01:3.8252697476414550e+00 + CVs 20 + -1.0774900427164781e-01 1.8740638393291162e-01 -2.2393364989376680e-01 + -2.1510733350027145e-01 3.6128069672049945e-01 -4.6251008027747054e-01 + -2.9570596786190501e-01 5.1407500151008900e-01 -7.1650284381458818e-01 + -3.4376175818027133e-01 6.4159561268752308e-01 -9.8128815507213674e-01 + -3.6625075650113526e-01 7.4255720786449442e-01 -1.2502193580110008e+00 + -3.6646954828691281e-01 8.1923234981173154e-01 -1.5175230090007357e+00 + -3.4223862900310331e-01 8.7763980823469490e-01 -1.7774017326683427e+00 + -2.9035606606891434e-01 9.2300740172777795e-01 -2.0242170928069618e+00 + -2.0837248072527020e-01 9.5593667231584611e-01 -2.2563415743845328e+00 + -9.4050070883447884e-02 9.7512946062787176e-01 -2.4740007900869898e+00 + 5.5861711607173709e-02 9.8234071854664329e-01 -2.6764540209182437e+00 + 2.4279807172125500e-01 9.8150651829272539e-01 -2.8623156911946355e+00 + 4.5845108071261581e-01 9.7550686033093781e-01 -3.0251592131927496e+00 + 6.8558739722326789e-01 9.6850286490905990e-01 -3.1520572614142957e+00 + 9.1051567368767239e-01 9.6939858753968733e-01 -3.2343102472666914e+00 + 1.1326148757591552e+00 9.8254928195238311e-01 -3.2786847953343199e+00 + 1.3647572864672362e+00 9.8542039597073838e-01 -3.3005476101102804e+00 + 1.6365578494071071e+00 9.0312849887831859e-01 -3.3060553632378200e+00 + 2.0148280650664252e+00 5.5549549553109423e-01 -3.3021346836333274e+00 + id 14038 + loc 8.7395584583282471e-01 1.1120109260082245e-01 393 + blend 0.0000000000000000e+00 + interp 4.3361902279490516e-01:3.9228125482411635e-01:6.4148403214847649e-01:4.3361468660467722e-01:1.0855015202138405e+00:4.1505811080230748e-01:1.7778153694995471e+00:3.2648580418372625e-01:2.2325088714031947e+00:3.6822155861885703e-01:2.9765049083924873e+00:2.9809091978580587e-01:3.3751500375449495e+00:3.7658464456996926e-01:3.9973279049696191e+00 + CVs 20 + 1.9559844106766985e-01 3.0611275830134443e-01 2.7795685248627189e-01 + 3.8185035924381522e-01 5.9084070688590007e-01 5.1454841248021999e-01 + 5.6825570333123543e-01 8.7525122549683276e-01 7.1445876930334118e-01 + 7.5963355335072569e-01 1.1685448982931816e+00 8.7698103358976121e-01 + 9.6503007962618814e-01 1.4661834424788998e+00 1.0151221397686894e+00 + 1.1982142638167435e+00 1.7634302667517670e+00 1.1662022834799546e+00 + 1.4556697941942796e+00 2.0600632484264048e+00 1.3695263705925818e+00 + 1.7148846636590227e+00 2.3557451860483449e+00 1.6488178505830304e+00 + 1.9552800708402258e+00 2.6439155583936333e+00 2.0100502467091843e+00 + 2.1764251316505381e+00 2.9125417619809468e+00 2.4681276450611245e+00 + 2.4042672116061294e+00 3.1298971541047647e+00 3.0439285844511748e+00 + 2.6908369149769955e+00 3.2390587925692298e+00 3.7333993962695873e+00 + 3.0748138317836125e+00 3.1686424495917578e+00 4.4917531176001919e+00 + 3.5578986944856039e+00 2.8650791006682974e+00 5.2230503212257915e+00 + 4.1144431014304175e+00 2.3399844340848848e+00 5.7788478597142525e+00 + 4.6989161633302761e+00 1.7235606963166612e+00 6.0081032656125144e+00 + 5.2661545744876896e+00 1.2350796061713152e+00 5.8902044483900902e+00 + 5.8052682047141966e+00 9.6364263635849934e-01 5.5433196751254732e+00 + 6.4432180950938367e+00 5.6495516032332649e-01 5.0845365734938923e+00 + id 14039 + loc 2.2100631892681122e-01 2.7010745834559202e-03 399 + blend 0.0000000000000000e+00 + interp 4.5933749120825740e-01:2.9170121535041205e-01:9.1580434546662937e-01:4.5933289783334535e-01:1.3632731990781681e+00:3.5531154795980013e-01:1.9556124409342104e+00:4.2955766635852111e-01:2.3823263008663074e+00:4.0194348824950765e-01:3.0567369543112077e+00:4.4933680613767873e-01:3.9223839568947856e+00 + CVs 20 + -1.6024410125639188e-01 4.1611506999883985e-01 1.6482873123621222e-01 + -3.3700417733636817e-01 8.3005578586533268e-01 3.3485706724354436e-01 + -5.3359991221165592e-01 1.2376300653695709e+00 4.9480454363146681e-01 + -7.4571750975637052e-01 1.6348728582116028e+00 6.6488955860073595e-01 + -9.6526141340690463e-01 2.0107598596531502e+00 8.7096738943994390e-01 + -1.1839317376956993e+00 2.3451910313866975e+00 1.1216118670244211e+00 + -1.3951559937380096e+00 2.6183663094262406e+00 1.4097586451502189e+00 + -1.5916626018115794e+00 2.8153018171928474e+00 1.7166315805805215e+00 + -1.7652489051092353e+00 2.9303506949161902e+00 2.0116036135414510e+00 + -1.9077057071408003e+00 2.9744369599910137e+00 2.2667596169705986e+00 + -2.0164649453046932e+00 2.9791748167967169e+00 2.4767257652071843e+00 + -2.1042696933718856e+00 2.9906661549842357e+00 2.6556478369609966e+00 + -2.1790995008457137e+00 3.0367434157229871e+00 2.8290474517832886e+00 + -2.2322120420607550e+00 3.0996637161187053e+00 3.0309591925227939e+00 + -2.3009228700704316e+00 3.1296158975886228e+00 3.2755995334277634e+00 + -2.4888340290192259e+00 3.0683831281810612e+00 3.5220883056302745e+00 + -2.7954583727307609e+00 2.8882782618069252e+00 3.7561659693753091e+00 + -3.0343579243293335e+00 2.6371370375121179e+00 4.0533197177801359e+00 + -2.9911157178106023e+00 2.4124560198602270e+00 4.4749787958763374e+00 + id 14040 + loc 8.3514130115509033e-01 1.5129464864730835e-01 379 + blend 0.0000000000000000e+00 + interp 4.9706363337670689e-01:3.7868406245657882e-01:4.2869533736205057e-03:4.9705866274037314e-01:1.0002719175713159e+00:4.8864149704928428e-01:1.3906908804164748e+00:2.2290623949265020e-01:2.5993828389595781e+00:3.2568612580749728e-01:3.5661988272331633e+00 + CVs 20 + 6.3804140887445093e-01 2.9984969652746379e-01 -1.6590230605552156e-01 + 1.2058392437851584e+00 4.8471045190427708e-01 -3.4889875969847028e-01 + 1.7710319363241096e+00 5.8983645062514678e-01 -5.5718458753628641e-01 + 2.3698186226775295e+00 6.6788294800395964e-01 -7.6753403708938184e-01 + 2.9802397530699380e+00 7.3420364218716871e-01 -9.3479950789278332e-01 + 3.5629004291464650e+00 7.6920445037870522e-01 -1.0244982116759387e+00 + 4.0844988030378504e+00 7.5706779915426448e-01 -1.0327792787249488e+00 + 4.5227191484603875e+00 7.0370176022538522e-01 -9.8022311148059105e-01 + 4.8600557283238874e+00 6.2646834879816682e-01 -8.9669187484552648e-01 + 5.0872431833279279e+00 5.5077319499235156e-01 -8.0678003020423839e-01 + 5.2146611244756294e+00 5.0789771306191511e-01 -7.2244617052156612e-01 + 5.2811076334034723e+00 5.2248294731340517e-01 -6.3656685800033708e-01 + 5.3570337452217291e+00 5.7002135789021180e-01 -5.2396800566837842e-01 + 5.4940741616720654e+00 5.4375933526205245e-01 -3.6804286927152263e-01 + 5.6786075075157338e+00 3.6176104666650577e-01 -1.8629202928888755e-01 + 5.8986181724072271e+00 5.4372079820768526e-02 1.1377394064557400e-02 + 6.1688033358964702e+00 -2.9642333078494687e-01 2.2368883690419972e-01 + 6.5071685973821038e+00 -6.0180416026652805e-01 4.0118648027413850e-01 + 6.9137315658539755e+00 -7.6150436875250582e-01 4.7284336742058597e-01 + id 14041 + loc 6.3872313499450684e-01 3.5986518859863281e-01 395 + blend 0.0000000000000000e+00 + interp 3.1244461110221933e-01:2.8036533902899019e-01:3.7740615451073012e-01:3.1244148665610832e-01:1.2570734855949812e+00:3.0795543296469624e-01:1.9916354558302962e+00:2.8960412871492752e-01:2.6912745320778408e+00:2.8426761631603947e-01:3.1384864344992249e+00:3.0048776061389026e-01:3.8940823440309824e+00 + CVs 20 + -2.9528137192258497e-01 2.2980411790371988e-01 4.1416895285795363e-01 + -5.6013548670368407e-01 4.1039491074343482e-01 7.5129406487666883e-01 + -8.1366252671065109e-01 5.6348713126044547e-01 1.0689409635575153e+00 + -1.0632166583586169e+00 6.9733769203394114e-01 1.3934802778585063e+00 + -1.3017336383368925e+00 8.0729519690697493e-01 1.7238553010976960e+00 + -1.5222810733390786e+00 8.9032714906788168e-01 2.0590965595241997e+00 + -1.7202790857455139e+00 9.4620805831388810e-01 2.3995210664815287e+00 + -1.8952660027102488e+00 9.7634525967930530e-01 2.7459312542387044e+00 + -2.0504335432322445e+00 9.8205352918596822e-01 3.0969706715467398e+00 + -2.1884408704697762e+00 9.6403475085962764e-01 3.4454359264935288e+00 + -2.3097606800807822e+00 9.2287775649901316e-01 3.7824462255979485e+00 + -2.4182261779300802e+00 8.5545754597097012e-01 4.1093292388865059e+00 + -2.5232708915294610e+00 7.5243909452680824e-01 4.4356015429854558e+00 + -2.6359960286865380e+00 6.0545677126828279e-01 4.7636688180665949e+00 + -2.7658432540893698e+00 4.1135131947405279e-01 5.0868219931699459e+00 + -2.9190427518876474e+00 1.6613715066729506e-01 5.4005169845161900e+00 + -3.0960957677887713e+00 -1.4089245477662304e-01 5.7017623054430153e+00 + -3.2896606221175464e+00 -5.1742092390656502e-01 5.9753037559693025e+00 + -3.4835879535432488e+00 -9.2187555743758942e-01 6.1817453305328049e+00 + id 14042 + loc 6.1842411756515503e-01 2.0393833518028259e-01 407 + blend 0.0000000000000000e+00 + interp 1.2299105619435586e+00:1.2299005619435586e+00:1.0458987679957945e+00:6.6489395967688703e-01:1.1238253865181349e+00:3.9586733536277635e-01:1.4006541582361869e+00:2.5187973744043013e-01:2.0098556053307171e+00:2.7969269514036743e-01:2.7814793323518803e+00:4.9210214322073353e-01:2.9926553440979591e+00:8.1668697064716167e-01:2.9969693357776701e+00 + CVs 20 + -4.0043419061463259e-01 4.5665334800532531e-01 2.6159791903376493e-02 + -5.6778821615042330e-01 7.3680719250698301e-01 3.0130355891094827e-02 + -6.8171162769714222e-01 9.4742397596596883e-01 1.6926053134484809e-02 + -8.0509169569073968e-01 1.1306075721393860e+00 -1.3878813459828609e-02 + -9.2863009990089185e-01 1.2777418476607103e+00 -6.6751148091540979e-02 + -1.0419694543746081e+00 1.3800077723638400e+00 -1.4365315606475648e-01 + -1.1337571110095175e+00 1.4315326872899590e+00 -2.4038167447822387e-01 + -1.1975460754862248e+00 1.4366877637006281e+00 -3.4591748692833996e-01 + -1.2397199912302652e+00 1.4095947297101761e+00 -4.5263501179737486e-01 + -1.2725238703686526e+00 1.3596129873890024e+00 -5.6301117379490129e-01 + -1.3010679954239275e+00 1.2872084176463050e+00 -6.8009978307756602e-01 + -1.3234912405584194e+00 1.1917864929017923e+00 -8.0168391879880430e-01 + -1.3378802830223486e+00 1.0742024370098175e+00 -9.2560550796129948e-01 + -1.3459189250394941e+00 9.3285708133618050e-01 -1.0554455288242020e+00 + -1.3517967800949562e+00 7.6496850540571959e-01 -1.1979500133101029e+00 + -1.3604601969112002e+00 5.7442407927599870e-01 -1.3569467126233823e+00 + -1.3755812170916100e+00 3.7140280197197928e-01 -1.5306175531467245e+00 + -1.3964461247594839e+00 1.6716693362417584e-01 -1.7079198527631856e+00 + -1.3831008632758748e+00 2.3985657057448317e-02 -1.8255473201440411e+00 + id 14043 + loc 2.5299596786499023e-01 1.3121542520821095e-02 378 + blend 0.0000000000000000e+00 + interp 5.0462952847579368e-01:5.0462448218050893e-01:1.7470597069024874e-02:2.2540892720912387e-01:9.1033873694537781e-01:3.6233017130481232e-01:1.7762102189203435e+00:2.9228561720237228e-01:2.0414044200427592e+00:3.9989027465140825e-01:2.8041220592357785e+00:4.6004767855886913e-01:3.1097883119047025e+00:4.5165011617190420e-01:3.7581658056834746e+00 + CVs 20 + 3.7774586566296664e-01 2.2627184037751644e-01 -3.9618973515001654e-01 + 7.0407823805177128e-01 4.1749283746999122e-01 -8.0698639246746295e-01 + 1.0236178412436856e+00 5.9799272116479030e-01 -1.2206609926281102e+00 + 1.3586579490758184e+00 7.8426159427839637e-01 -1.6243459008043042e+00 + 1.7119114364736658e+00 9.6105910426753660e-01 -1.9952426035888013e+00 + 2.0758173733181664e+00 1.0979050018139251e+00 -2.3206709972243695e+00 + 2.4407325054735631e+00 1.1785712931172172e+00 -2.5982534367011958e+00 + 2.7943065627232961e+00 1.2020619312626888e+00 -2.8273131936225275e+00 + 3.1160333795340991e+00 1.1721921977936702e+00 -3.0126124708830666e+00 + 3.3808140881404967e+00 1.0947591719691261e+00 -3.1638495395227313e+00 + 3.5670709094842179e+00 9.7934613850124674e-01 -3.2831917057592501e+00 + 3.6671229276539332e+00 8.4827479819648666e-01 -3.3672095277042073e+00 + 3.7124409648550172e+00 7.3388360654868556e-01 -3.4311913799968345e+00 + 3.7710256332860523e+00 6.3287128031977602e-01 -3.5089600551642812e+00 + 3.8681489693721094e+00 5.1015862346556107e-01 -3.6091351277062049e+00 + 3.9805758827425644e+00 3.6827897838521695e-01 -3.7115433361382508e+00 + 4.0922952325511455e+00 2.4132531752551545e-01 -3.7869453387697254e+00 + 4.2099361709958201e+00 1.5200596274652334e-01 -3.8277182561921723e+00 + 4.3196179569825928e+00 1.3758398505455816e-01 -3.9721210424461169e+00 + id 14044 + loc 2.4074834585189819e-01 4.5519816875457764e-01 402 + blend 0.0000000000000000e+00 + interp 4.6759989996250689e-01:3.1489582908138203e-01:3.4813021110300335e-01:3.6602171863374294e-01:1.0345225942502996e+00:3.2900034140967832e-01:2.0046050380296592e+00:3.2798838888113352e-01:3.0352199453437527e+00:4.6759522396350728e-01:3.9139621887813090e+00 + CVs 20 + -1.6721917946199760e-01 3.2382629176282768e-01 1.2906969210575497e-01 + -3.2511670372959700e-01 6.5501958711874320e-01 2.5820039267087525e-01 + -4.9782977079059376e-01 1.0023777186518739e+00 3.6333288703658095e-01 + -6.9865614167922274e-01 1.3606679746051451e+00 4.3700169314558263e-01 + -9.3322460646224248e-01 1.7179333027666086e+00 4.8911892869884671e-01 + -1.2076912695003870e+00 2.0621531604924930e+00 5.2775286511413211e-01 + -1.5262351779609817e+00 2.3797414193739019e+00 5.5484273983925236e-01 + -1.8873565346371750e+00 2.6555459503793557e+00 5.7307847262128497e-01 + -2.2864244027228926e+00 2.8764151299966882e+00 5.8865808409014841e-01 + -2.7155091021973350e+00 3.0302704869301369e+00 6.0303026762773526e-01 + -3.1593055580098657e+00 3.1057734657231504e+00 6.0793248144714462e-01 + -3.5977741936587710e+00 3.0964719091908091e+00 5.9465404990889348e-01 + -4.0132711701540620e+00 3.0021962876786681e+00 5.6336636270852891e-01 + -4.3954773325138552e+00 2.8255632422822305e+00 5.2170017700896532e-01 + -4.7389033136949354e+00 2.5613625825814146e+00 4.8230262994936324e-01 + -5.0388387048001553e+00 2.2023244604500354e+00 4.7263281029417004e-01 + -5.2972549340714128e+00 1.7472016659553427e+00 5.4845250444570703e-01 + -5.5216539198652956e+00 1.2635180214662507e+00 7.8518017539800800e-01 + -5.6077315373774770e+00 1.0317040633901664e+00 9.9907854671420360e-01 + id 14045 + loc 7.4218648672103882e-01 4.5313373208045959e-01 1079 + blend 0.0000000000000000e+00 + interp 4.6141955736552331e-01:3.7027150141647058e-01:4.1369779256164230e-01:4.6141494316994969e-01:9.7690882067474405e-01:2.7724608696407921e-01:1.9570707918108372e+00:3.1439917237239245e-01:2.4416717076285286e+00:3.5795940943348437e-01:2.9939156432174210e+00:3.4045161243407096e-01:3.5955041521080466e+00 + CVs 20 + 1.3098538750645133e-01 4.7600938328743192e-01 -5.6977843037221032e-02 + 2.0353880148807760e-01 9.2599961891311144e-01 -6.8932684011611456e-02 + 2.5042155697210333e-01 1.3484252522215456e+00 -3.4456420358815909e-02 + 2.7292610096968867e-01 1.7487325526801027e+00 5.1591069349289809e-02 + 2.6571332878358778e-01 2.1215493859380299e+00 1.9455919327534610e-01 + 2.2656874437527502e-01 2.4575134919897881e+00 4.0071254048994487e-01 + 1.6086657565855739e-01 2.7376597514409848e+00 6.6433998612120382e-01 + 8.1017661903416860e-02 2.9466208324036494e+00 9.6362699824341780e-01 + -2.0313914704896963e-03 3.0847088659323187e+00 1.2752932079727826e+00 + -8.2480987030965625e-02 3.1620342566707782e+00 1.5833148549262626e+00 + -1.5894162388511524e-01 3.1904400795462244e+00 1.8817495615495912e+00 + -2.3156484745336270e-01 3.1781781425060203e+00 2.1735460811195026e+00 + -2.9923034546410943e-01 3.1278800636943198e+00 2.4658098117671106e+00 + -3.5914508148730950e-01 3.0365629466731838e+00 2.7691571309690657e+00 + -4.1296280511025774e-01 2.8929870887153992e+00 3.1115043454887505e+00 + -4.7756031905052065e-01 2.6476806888411595e+00 3.5704161722288590e+00 + -5.6452085841400224e-01 2.1405491633564155e+00 4.1659503440434307e+00 + -6.2571550811229570e-01 1.4431885067174666e+00 4.5263000166652407e+00 + -6.5094506202820401e-01 1.2842228352191409e+00 4.4074450977519923e+00 + id 14046 + loc 3.2068479061126709e-01 1.9493657350540161e-01 412 + blend 0.0000000000000000e+00 + interp 3.5481011530075085e-01:2.6284338728494616e-01:1.0269082196479817e-02:2.9208290074926896e-01:1.0010708767020475e+00:3.5480656719959786e-01:1.9990358820606606e+00:3.0689627280882636e-01:2.5122621610988505e+00:3.2293571809909516e-01:3.0859997211062726e+00 + CVs 20 + -1.1663651130428285e-01 1.0925808804920334e-01 -5.6487368562511664e-01 + -2.3537600627676053e-01 1.2868363033079555e-01 -9.9497629170748036e-01 + -3.4115571288872071e-01 1.2031928291355942e-01 -1.3932529528463242e+00 + -4.3156123485845144e-01 1.0588591257708424e-01 -1.8082526859831907e+00 + -4.9729363671252347e-01 8.3581218925106948e-02 -2.2321531088101709e+00 + -5.2824630577460852e-01 5.3886753793635056e-02 -2.6551973619201692e+00 + -5.1767217744208494e-01 1.8509947473472677e-02 -3.0666556196392851e+00 + -4.6560154711571949e-01 -2.0985983115595408e-02 -3.4564723940510520e+00 + -3.7617480650665064e-01 -6.2289377612016583e-02 -3.8162956008749482e+00 + -2.5542207701880426e-01 -1.0245326815297218e-01 -4.1396200016797637e+00 + -1.1818776149185012e-01 -1.4573939484972631e-01 -4.4267889663301263e+00 + 5.7844699466699234e-03 -2.1315972528675409e-01 -4.6967802080413827e+00 + 8.9126454146046807e-02 -3.2710252247206584e-01 -4.9750543306625827e+00 + 1.3217828034203921e-01 -4.8122750465766284e-01 -5.2614954194486874e+00 + 1.5016188187776891e-01 -6.5605484281286452e-01 -5.5455581317082556e+00 + 1.4430315665030324e-01 -8.4669827859472635e-01 -5.8245185774862227e+00 + 1.0624867026146556e-01 -1.0567006806153136e+00 -6.0960937224005232e+00 + 3.4093231554685022e-02 -1.2816685541498165e+00 -6.3516935511383927e+00 + 6.8365911407785029e-03 -1.4276752006886122e+00 -6.5485623773266290e+00 + id 14047 + loc 9.2852121591567993e-01 5.1807433366775513e-01 396 + blend 0.0000000000000000e+00 + interp 3.6546696242940580e-01:3.0447654062778962e-01:1.4787422745475243e-01:3.3586587091268033e-01:1.0797043347147151e+00:3.5770875670550084e-01:1.9432557455322976e+00:3.6388459852248850e-01:2.2592281609221132e+00:2.8155327370318056e-01:3.2592278283703013e+00:3.6546330775978153e-01:3.6996333886395556e+00 + CVs 20 + 7.4916778239548720e-01 2.5355725582487565e-01 -3.7584741500638891e-01 + 1.2280722119507710e+00 3.6505010954912220e-01 -6.9665766827068110e-01 + 1.6162798228860666e+00 4.1328595867579287e-01 -1.0309103154338339e+00 + 1.9969540389178331e+00 4.4057680375524644e-01 -1.4068397036679783e+00 + 2.3700827332560572e+00 4.4757681180023934e-01 -1.8125964200185809e+00 + 2.7365481503416595e+00 4.3632271657756155e-01 -2.2341018421127696e+00 + 3.0980050588018062e+00 4.0946798987314248e-01 -2.6644650855437257e+00 + 3.4550889538264498e+00 3.5852773024335738e-01 -3.1057404613973327e+00 + 3.7995420233437547e+00 2.6326927970200176e-01 -3.5561997504043639e+00 + 4.1185955604541773e+00 1.1165446853118599e-01 -3.9924915511991057e+00 + 4.3961041669861372e+00 -1.0029537543657674e-01 -4.3938480773423132e+00 + 4.6233176601411810e+00 -3.7759323883267681e-01 -4.7574512470475474e+00 + 4.8006387651310058e+00 -7.2259096215491003e-01 -5.0818328649734728e+00 + 4.9336727580676731e+00 -1.1219367770012489e+00 -5.3527323856702527e+00 + 5.0318541969469734e+00 -1.5518176621117141e+00 -5.5586664222837054e+00 + 5.1052918299528276e+00 -1.9938056570456308e+00 -5.7055984988209136e+00 + 5.1593070569775294e+00 -2.4369571045318166e+00 -5.8062096246222517e+00 + 5.1934911623494227e+00 -2.8741255682447426e+00 -5.8670298971926087e+00 + 5.1814956441959010e+00 -3.3451094209005148e+00 -5.8859657977082867e+00 + id 14048 + loc 4.1136592626571655e-03 1.6151970624923706e-01 380 + blend 0.0000000000000000e+00 + interp 3.9072727964710224e-01:2.7286526221720936e-01:7.0685431561337264e-01:3.7382720047260670e-01:1.2794561977751184e+00:3.4725148539636636e-01:1.9687477176048409e+00:2.5872017084326970e-01:2.4904584154049352e+00:3.9072337237430577e-01:2.9801928852547075e+00:2.5048841073038269e-01:3.8282571992269334e+00 + CVs 20 + -3.4894769360398659e-01 1.9985931206050950e-01 5.1794306364138221e-01 + -5.8856901363232550e-01 3.2382187188764439e-01 9.3170262800838222e-01 + -7.8617499910933741e-01 4.2402469955800198e-01 1.3387048413367832e+00 + -9.7860772953470077e-01 5.3533708486280340e-01 1.7808715559514283e+00 + -1.1812300030043457e+00 6.6493334329252418e-01 2.2470572007587335e+00 + -1.4134151483596662e+00 8.0627092548148815e-01 2.7236763052329880e+00 + -1.6927582609370386e+00 9.3477892259943829e-01 3.2072193056913836e+00 + -2.0295336422397163e+00 1.0189446037227874e+00 3.6918205253521763e+00 + -2.4246367764744718e+00 1.0310945382521748e+00 4.1648832188229230e+00 + -2.8698821740973486e+00 9.4730367435579788e-01 4.6209894795798725e+00 + -3.3417063339449724e+00 7.4093273229243195e-01 5.0560116770873300e+00 + -3.7989930051997742e+00 3.8707331854635907e-01 5.4524754109579030e+00 + -4.1972647808027457e+00 -1.2387947561155288e-01 5.7813160016008034e+00 + -4.5119447738488017e+00 -7.6837439267183205e-01 6.0320327073150013e+00 + -4.7733223721242695e+00 -1.4847229489495408e+00 6.2435653683572667e+00 + -5.0233562053688088e+00 -2.2045562341505924e+00 6.4876159193481229e+00 + -5.2374780905716793e+00 -2.8683200066361154e+00 6.8403347079652956e+00 + -5.3526492186723900e+00 -3.4368590271659056e+00 7.3096151249933703e+00 + -5.4681408798935713e+00 -4.0160001894852186e+00 7.5933540475056942e+00 + id 14049 + loc 4.8788875341415405e-01 3.3588162064552307e-01 373 + blend 0.0000000000000000e+00 + interp 3.8499686065781324e-01:2.4151474044687099e-01:4.6639152681211060e-01:3.7620170381226253e-01:1.0020036612418186e+00:2.6801640377623875e-01:1.7132017486245974e+00:2.5672526226211390e-01:2.5769572408100401e+00:3.8499301068920666e-01:3.0665276913417192e+00:2.5833066164336826e-01:3.7368498784136994e+00 + CVs 20 + -9.3870543689504954e-02 7.5653875452484243e-01 2.5664620620610173e-01 + -1.9659241142397477e-01 1.5382382979280591e+00 4.8063108380524677e-01 + -3.6048076142623797e-01 2.2970063616511482e+00 6.0573626135731884e-01 + -6.0607953869713549e-01 2.9483252521743042e+00 5.5819655739436280e-01 + -9.1561219153123496e-01 3.4190778070735450e+00 3.2962617108118697e-01 + -1.2483589366722758e+00 3.6625868895363887e+00 -2.0069344129335365e-02 + -1.5808381848599811e+00 3.6714981378392384e+00 -4.2905265947966309e-01 + -1.9191560785355262e+00 3.4657496789730509e+00 -8.4895744010082730e-01 + -2.2706607181042640e+00 3.0726229098649180e+00 -1.2332605237979941e+00 + -2.6310945866597097e+00 2.5003732449650280e+00 -1.5309363171601043e+00 + -2.9532387277381056e+00 1.7881201910089466e+00 -1.7198035682815478e+00 + -3.1455039420163091e+00 9.6805864504414951e-01 -1.8135875931924261e+00 + -3.0950649896669304e+00 1.0555423996331637e-02 -1.8908108193844615e+00 + -2.6992111581876803e+00 -1.0507793310036981e+00 -2.0888537515212899e+00 + -1.9330976378114872e+00 -2.1006476032030283e+00 -2.5777298831129363e+00 + -1.1707366172204015e+00 -2.7896714452232541e+00 -3.6062590937029610e+00 + -8.7724132926920462e-01 -2.8315468767718972e+00 -4.9893213521140716e+00 + -1.2838170446236497e+00 -2.4898535976400229e+00 -6.3570701615528948e+00 + -2.1030191517378403e+00 -2.0929516852166303e+00 -7.3684157230959748e+00 + id 14050 + loc 4.5413380861282349e-01 9.7835922241210938e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5921827682044666e-01:3.5811402616823368e-01:3.3673184553316049e-01:3.5921468463767847e-01:9.4215311088941578e-01:2.5649353401462899e-01:1.1802272970126788e+00:3.5864605184273241e-01:1.9959084922714188e+00:2.6872372285747415e-01:2.3910094626176401e+00:3.1735866395468371e-01:3.5738575519475528e+00 + CVs 20 + 3.0970512398443234e-01 2.3706070844280783e-01 -2.9348557848208223e-01 + 6.0558102822672599e-01 4.8539240296881420e-01 -5.8532046554872397e-01 + 8.9934316174461748e-01 7.3748501837996305e-01 -8.9153940071797222e-01 + 1.1754090792763177e+00 9.9488028934193484e-01 -1.2258341656164367e+00 + 1.3985899175963286e+00 1.2483966308036896e+00 -1.5951875484999676e+00 + 1.5328554347572676e+00 1.4706182257499956e+00 -1.9968202115671358e+00 + 1.5649022703481545e+00 1.6227367997325965e+00 -2.4126534822089489e+00 + 1.5135156411086454e+00 1.6696892915749639e+00 -2.8156140016245446e+00 + 1.4096661198673104e+00 1.5957137454106745e+00 -3.1788237907941941e+00 + 1.2802830616055891e+00 1.4191127364824909e+00 -3.4900583429688417e+00 + 1.1484319662263114e+00 1.1782491107929716e+00 -3.7691684633286773e+00 + 1.0350930226002557e+00 8.9824869346834979e-01 -4.0548851712963225e+00 + 9.6428137451416074e-01 5.9000318881672897e-01 -4.3700143631206476e+00 + 9.6660529976103993e-01 2.7095317357278104e-01 -4.7219228323704305e+00 + 1.0888273575761449e+00 -3.8884595952785483e-02 -5.1053296302891376e+00 + 1.4170566281137675e+00 -3.0908843509532646e-01 -5.4816990585058862e+00 + 1.9955928415733211e+00 -4.4891001814416032e-01 -5.7444555261022519e+00 + 2.5892871023521784e+00 -4.1488370907978167e-01 -5.8503545683302596e+00 + 2.8716876332302754e+00 -4.3473689042944552e-01 -6.0405099756033076e+00 + id 14051 + loc 2.7364995330572128e-02 2.4660063907504082e-02 382 + blend 0.0000000000000000e+00 + interp 5.0798484610636130e-01:4.7498553074632832e-01:2.1339623652288364e-02:2.8367900129052592e-01:9.8005343392813249e-01:5.0797976625790031e-01:1.7766427300223246e+00:2.9945963787937641e-01:2.1198970753626227e+00:2.6765077004736060e-01:2.9835975980677398e+00:3.0400406484800857e-01:3.7692618070901491e+00 + CVs 20 + -4.8839475651737119e-01 1.9312640430916378e-01 -6.5505365478805389e-01 + -8.7833839773450917e-01 2.9422484982164493e-01 -1.1450810930745727e+00 + -1.2506133556087065e+00 3.6473331089496458e-01 -1.5895322076096237e+00 + -1.6406323249630392e+00 4.2314724904295220e-01 -2.0372353605385771e+00 + -2.0435871003116084e+00 4.5743635950798378e-01 -2.4820717187723700e+00 + -2.4562985567621700e+00 4.5581964059539937e-01 -2.9167123885748762e+00 + -2.8761698849308730e+00 4.0765013452268151e-01 -3.3338156932926166e+00 + -3.2980411336415472e+00 3.0191379144510910e-01 -3.7269784223964977e+00 + -3.7148446296025446e+00 1.2841057688407465e-01 -4.0886966347412752e+00 + -4.1208624762196973e+00 -1.1691647545116535e-01 -4.4052637170396949e+00 + -4.5068961777624219e+00 -4.3010353882147578e-01 -4.6600122613880979e+00 + -4.8514155654192699e+00 -8.0585258499613177e-01 -4.8477145399565398e+00 + -5.1353700071048536e+00 -1.2339748702356834e+00 -4.9760071455033081e+00 + -5.3470106325561293e+00 -1.7019169788977200e+00 -5.0564923473158423e+00 + -5.4818511278602617e+00 -2.1951423127487302e+00 -5.0985856872534825e+00 + -5.5384893181005417e+00 -2.6969996448570197e+00 -5.1092449117832235e+00 + -5.5165147745593073e+00 -3.1870680115191132e+00 -5.0953104147032624e+00 + -5.4269654232906896e+00 -3.6497234869875115e+00 -5.0679398159057882e+00 + -5.3682693349088559e+00 -4.1591799095465261e+00 -5.0650054590731957e+00 + id 14052 + loc 9.2412811517715454e-01 3.5876360535621643e-01 403 + blend 0.0000000000000000e+00 + interp 3.7302365577934266e-01:2.6893856026506124e-01:7.2688063136288494e-01:3.2457864264112840e-01:1.9161046619488262e+00:2.7753079753910531e-01:2.3668566851864581e+00:2.5246853846904860e-01:3.0964677202472366e+00:3.7301992554278490e-01:3.9999901276125169e+00 + CVs 20 + 1.0848631454264165e-02 8.7597480654105386e-02 6.1260890466043973e-02 + 2.6868464339727199e-02 1.8388223113177796e-01 1.3409047030243657e-01 + 4.9678963658127295e-02 2.8789179070759507e-01 2.1399430092340102e-01 + 8.2064155466038430e-02 3.9710619901799676e-01 2.9664832967399296e-01 + 1.2899947657609379e-01 5.0812385258070858e-01 3.7895614141862383e-01 + 1.9674603871724294e-01 6.1568521247327013e-01 4.5654778633305165e-01 + 2.9024728522670101e-01 7.1302918092541046e-01 5.2340450269918182e-01 + 4.1167191970860567e-01 7.9132216442071657e-01 5.7172778355360221e-01 + 5.5833616548411191e-01 8.4033892957789280e-01 5.9252361368557582e-01 + 7.2059436962529033e-01 8.5237494679991577e-01 5.7767524908904433e-01 + 8.8334961406738111e-01 8.2648611190391486e-01 5.2337943810647181e-01 + 1.0311293762170504e+00 7.6710681128334179e-01 4.3158026817717943e-01 + 1.1508873787044467e+00 6.7886194831805147e-01 3.0826291773577402e-01 + 1.2310255011688997e+00 5.6536705019100852e-01 1.6119088246321589e-01 + 1.2606571754968803e+00 4.3106237034446954e-01 -2.5426538004248711e-04 + 1.2308288799606444e+00 2.8163148433483842e-01 -1.6374919736816690e-01 + 1.1349989200127726e+00 1.2201230759885412e-01 -3.1326528683362354e-01 + 9.6603785488728255e-01 -4.4549430945012958e-02 -4.2868728553770097e-01 + 9.8709637305649700e-01 -1.8772294285693980e-01 -4.7625731846058578e-01 + id 14053 + loc 6.1417943239212036e-01 3.3882808685302734e-01 401 + blend 0.0000000000000000e+00 + interp 4.5666428261309888e-01:3.0555258121592627e-01:3.2702853962619483e-01:3.7742708515482326e-01:1.1548408643453292e+00:4.5665971597027277e-01:1.8976296224401223e+00:3.0219345310392226e-01:2.1407003411584484e+00:3.9663078644906663e-01:2.9577134682913409e+00:3.8094809399702190e-01:3.8402976069616215e+00 + CVs 20 + -2.9712519879171388e-02 2.7384338490060767e-01 2.2643785474446770e-01 + -3.7155643676477765e-02 5.1514766311247173e-01 4.6616681446364372e-01 + -4.7678735791064977e-02 7.1996884515572646e-01 7.0809666013160733e-01 + -7.6026027441484095e-02 8.8886323912607090e-01 9.4127650290930232e-01 + -1.2306111477475475e-01 1.0270426517166531e+00 1.1619838929559887e+00 + -1.8711280082139373e-01 1.1465213775916026e+00 1.3782842992336810e+00 + -2.5499229661980521e-01 1.2518679058751365e+00 1.6117997516318243e+00 + -3.0233509666580549e-01 1.3286699406168996e+00 1.8829506734086403e+00 + -3.1495534290062649e-01 1.3736557783639978e+00 2.1767580486030806e+00 + -2.9973158700369956e-01 1.4177558600497910e+00 2.4554233676184829e+00 + -2.6331008025729247e-01 1.4609641449640225e+00 2.7195628350641701e+00 + -2.0571871908704020e-01 1.4108472749178871e+00 3.0110245570157068e+00 + -1.2912970376771465e-01 1.1904911914084126e+00 3.3493907226114712e+00 + -1.1443287810755487e-02 8.5678511846382710e-01 3.7230489687981709e+00 + 1.6778600873483721e-01 5.0763910375174892e-01 4.1005625668077057e+00 + 4.2156684880731304e-01 1.0528716780494218e-01 4.4578495511448546e+00 + 8.4135476869930292e-01 -4.9540438208693371e-01 4.8047300479181381e+00 + 1.6172163695202488e+00 -1.1215605509174733e+00 5.1816952401548750e+00 + 1.9340902860894726e+00 -1.1022714585245859e+00 5.4014985476021113e+00 + id 14054 + loc 1.1459147185087204e-01 9.7536170482635498e-01 399 + blend 0.0000000000000000e+00 + interp 4.7299838941010508e-01:4.0050677662739348e-01:2.4506751697062101e-01:4.7299365942621102e-01:7.5612533354702094e-01:3.2430317355748278e-01:1.1106151123663746e+00:2.3879901266291639e-01:2.0842026930812043e+00:3.2201447154949220e-01:3.1314252354684360e+00:4.0258494715299420e-01:3.9519141949646110e+00 + CVs 20 + -1.0569838915885982e-01 3.4242646280241851e-01 -2.6630942448381983e-01 + -2.5118846497214092e-01 6.8990433319799449e-01 -5.3850627861582001e-01 + -4.2089075902113005e-01 1.0360286603865307e+00 -8.3847531560218291e-01 + -6.1375011418824155e-01 1.3712097303591375e+00 -1.1734874313995922e+00 + -8.4278622649421842e-01 1.6845093152640809e+00 -1.5343368979539207e+00 + -1.1293042986379871e+00 1.9562352024670593e+00 -1.8908814867238473e+00 + -1.4881387929252963e+00 2.1443508668723892e+00 -2.1942627325120889e+00 + -1.8860093535917530e+00 2.1753164882735563e+00 -2.3817577177447453e+00 + -2.2235555325567899e+00 2.0160412569878643e+00 -2.4099811858615006e+00 + -2.4511295940952968e+00 1.7303213028744266e+00 -2.3177009979330334e+00 + -2.6150663775628873e+00 1.3558419129846095e+00 -2.1689042827574090e+00 + -2.7892132891846102e+00 8.6754867339617003e-01 -2.0185578941028033e+00 + -3.0555959493438389e+00 2.4905559583872008e-01 -1.9311982061743045e+00 + -3.5263467760269109e+00 -4.2189934200886892e-01 -1.9747101607107502e+00 + -4.3199483080094989e+00 -9.3087190540367482e-01 -2.1969225427667003e+00 + -5.4276350254378922e+00 -9.0266103958000754e-01 -2.5865390019996530e+00 + -6.4352779615984499e+00 -9.8663501344323223e-03 -2.9493639984899631e+00 + -6.8960526198598808e+00 1.0526049119676515e+00 -3.0642538177818337e+00 + -7.2724984178804961e+00 1.4803033321278787e+00 -3.1270758324087700e+00 + id 14055 + loc 5.9206372499465942e-01 5.9494543075561523e-01 379 + blend 0.0000000000000000e+00 + interp 4.0223279436836323e-01:3.0582920108817463e-01:3.1416370653197712e-01:3.2038074337238082e-01:1.0159237004568118e+00:2.9543183662298639e-01:1.9971868800942678e+00:3.7246125547374898e-01:2.9591836245802128e+00:4.0222877204041957e-01:3.6152039105057518e+00 + CVs 20 + -3.7355665057890963e-01 2.5607199541123088e-01 2.1415648809098520e-01 + -6.9708317947598886e-01 4.6825839569987238e-01 3.8938766125143570e-01 + -1.0183317551509590e+00 6.5835293104963966e-01 5.5732579353270517e-01 + -1.3496787064688873e+00 8.4829282147190443e-01 7.2306225905211097e-01 + -1.6606736836376832e+00 1.0509090233703666e+00 8.6219473280637948e-01 + -1.9285522112387365e+00 1.2697566052397935e+00 9.5396390913484097e-01 + -2.1681731479326265e+00 1.4981908837218683e+00 9.9466520614957254e-01 + -2.4108550948672374e+00 1.7219554325763284e+00 9.8191701198557557e-01 + -2.6719476491554577e+00 1.9240866355791006e+00 9.1157899505732720e-01 + -2.9515894865523111e+00 2.0902614396323278e+00 7.8433864031697409e-01 + -3.2445493487463546e+00 2.2205967551130428e+00 6.0593375935665172e-01 + -3.5514743193721765e+00 2.3226930548220692e+00 3.7143737015615319e-01 + -3.8692863552687582e+00 2.3523552350368258e+00 5.3243708828854763e-02 + -4.1654110178579344e+00 2.2005353019536273e+00 -3.6268907865838018e-01 + -4.4302100014346282e+00 1.7957053241988503e+00 -8.2559131291195065e-01 + -4.7345304534811348e+00 1.1593127625938719e+00 -1.2259098705038589e+00 + -5.1733837673593133e+00 3.8489789163638921e-01 -1.4378132348358745e+00 + -5.7340705058783801e+00 -2.9661984919858320e-01 -1.3569993237505678e+00 + -5.9827947849714755e+00 -4.3667414281773409e-01 -1.0713400672135596e+00 + id 14056 + loc 8.8634157180786133e-01 5.4762828350067139e-01 395 + blend 0.0000000000000000e+00 + interp 4.6424514027429653e-01:2.7829081057549776e-01:7.2867770580407609e-02:4.6424049782289378e-01:9.9993155674545264e-01:3.4071669032278795e-01:1.3988238835968201e+00:2.8199225217242019e-01:2.0078334407359262e+00:3.0160805049341383e-01:3.1110149097644375e+00 + CVs 20 + 4.0121637302360169e-01 1.3965997536800978e-01 -5.2215835420559897e-01 + 7.2865013620519026e-01 2.1198910984660468e-01 -9.4494149404250294e-01 + 1.0407908722236183e+00 2.6601272118439334e-01 -1.3454734532267327e+00 + 1.3673680072308465e+00 3.2574877044007500e-01 -1.7548226271754643e+00 + 1.7130825807381638e+00 3.9283710375002734e-01 -2.1670040242173112e+00 + 2.0810976548351139e+00 4.6534827891981401e-01 -2.5781374553171439e+00 + 2.4730311953910205e+00 5.3762147151133921e-01 -2.9875617682704334e+00 + 2.8906238235075330e+00 5.9720330132201749e-01 -3.3961437749397785e+00 + 3.3352054881983006e+00 6.2272988970435339e-01 -3.8093756094707878e+00 + 3.7988364746546663e+00 5.8594901636037333e-01 -4.2403632049595563e+00 + 4.2619290629835502e+00 4.5941656542612463e-01 -4.7033314701034223e+00 + 4.7016041932024688e+00 2.3072615769366234e-01 -5.1964191802744093e+00 + 5.1013993849501436e+00 -9.3518288064423416e-02 -5.7007771252817712e+00 + 5.4485153281973968e+00 -5.0002599903930278e-01 -6.1951407111164256e+00 + 5.7281488814790800e+00 -9.7608083432310222e-01 -6.6610933743937313e+00 + 5.9280542884843408e+00 -1.5128249542666703e+00 -7.0758856523701219e+00 + 6.0462811796521310e+00 -2.0996346497884883e+00 -7.4094456027289972e+00 + 6.0968350298079912e+00 -2.6984324512228759e+00 -7.6422870630545017e+00 + 6.1855888315229492e+00 -3.0407228423318582e+00 -7.8584055058644280e+00 + id 14057 + loc 1.0603331774473190e-01 6.1171239614486694e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5005047102987972e-01:4.5004597052516943e-01:5.9656844567374523e-02:3.6119219259569041e-01:7.7524232927053693e-01:3.4704330732089339e-01:1.2346919092544675e+00:3.5802929980276971e-01:2.0035991385708076e+00:3.7790067910060898e-01:2.5980340851002071e+00:3.8049296748354478e-01:3.4901620557360276e+00 + CVs 20 + 1.3116343672676678e-01 5.3066078436263930e-01 1.9824751840016447e-01 + 3.0723339179325648e-01 9.4363037869427302e-01 2.7730419932457034e-01 + 4.9879640793087676e-01 1.3013019235005086e+00 3.1326598111773829e-01 + 6.9441700629478986e-01 1.6100322796089246e+00 3.2415779449769433e-01 + 8.8810626557259420e-01 1.8557232886208506e+00 3.0301713255885399e-01 + 1.0663293631058195e+00 2.0140089643963037e+00 2.4275499127171529e-01 + 1.2079725881307377e+00 2.0596166509552818e+00 1.5175059073091135e-01 + 1.2924349132394912e+00 1.9901367281518336e+00 6.7059750322667644e-02 + 1.3140408803570751e+00 1.8406688605209203e+00 3.8486162204578012e-02 + 1.2949459831516554e+00 1.6763927988707783e+00 8.5624729405609612e-02 + 1.2716210675941095e+00 1.5462113644172526e+00 1.7221259885782286e-01 + 1.2632814980780145e+00 1.4507443648425111e+00 2.4775362599547340e-01 + 1.2695696895061439e+00 1.3679424705257897e+00 2.8652356616999902e-01 + 1.2839513272105718e+00 1.2805881361576681e+00 2.8702749139077471e-01 + 1.3002813705821161e+00 1.1887903070914410e+00 2.6704301911500250e-01 + 1.3102510823441349e+00 1.1315756377258912e+00 2.7277402864669631e-01 + 1.3076135343536970e+00 1.1862380958672110e+00 3.3496967470436090e-01 + 1.2936313519923472e+00 1.2709055712415191e+00 3.8133270831613209e-01 + 1.2512272040342780e+00 8.7828314148582376e-01 4.1757178068918266e-01 + id 14058 + loc 7.6964092254638672e-01 4.2721423506736755e-01 396 + blend 0.0000000000000000e+00 + interp 4.6562091603232136e-01:3.3090424832939219e-01:1.0787550217584285e-01:3.2617354263255094e-01:1.0332638766590312e+00:2.9411516622520656e-01:2.0219039850883949e+00:4.2226161742536955e-01:2.7142251918447853e+00:3.2456579687176046e-01:3.0650977897298333e+00:4.6561625982316107e-01:3.6816569758616504e+00 + CVs 20 + -6.7012447932051811e-01 9.8749153961599084e-02 3.5237951567164327e-01 + -1.0992818006225371e+00 9.9246641877446085e-02 6.0613906730239675e-01 + -1.4674605923098134e+00 7.0728162987421017e-02 8.4222875524855279e-01 + -1.8469990836554921e+00 5.7731135879438900e-02 1.0864026740527035e+00 + -2.2381903838363861e+00 5.2841411783148606e-02 1.3448458917810699e+00 + -2.6399092822483805e+00 4.4779294709672790e-02 1.6229755503877619e+00 + -3.0456351757869085e+00 2.3818377250345746e-02 1.9256782780872483e+00 + -3.4450831160474147e+00 -1.8430064672878110e-02 2.2543499415482318e+00 + -3.8284532034109122e+00 -9.2678178558587954e-02 2.6002206900344609e+00 + -4.1842322312380196e+00 -2.0867447931894145e-01 2.9439572833927539e+00 + -4.4974457487571682e+00 -3.6962131342262450e-01 3.2683869885728409e+00 + -4.7579775053568119e+00 -5.7492943044480649e-01 3.5690738959442760e+00 + -4.9681712821709789e+00 -8.2302257823013636e-01 3.8466739840360527e+00 + -5.1416118628639715e+00 -1.1100139787787482e+00 4.0976866500243707e+00 + -5.2948618507098386e+00 -1.4293173402368395e+00 4.3213630655094768e+00 + -5.4415216289054307e+00 -1.7703391315449875e+00 4.5323153285145521e+00 + -5.5873322032068735e+00 -2.1295309670084048e+00 4.7499755948680100e+00 + -5.7269248186501285e+00 -2.5136922583757260e+00 4.9784849915823042e+00 + -5.8158128700067948e+00 -2.9547769029067235e+00 5.1868921940126427e+00 + id 14059 + loc 8.7637549638748169e-01 2.4834712967276573e-02 400 + blend 0.0000000000000000e+00 + interp 4.1804423475253499e-01:3.6095374884941694e-01:1.2300737406468598e-01:2.6304655957733780e-01:8.0219876559773939e-01:3.2700048363266582e-01:1.7685608074684809e+00:2.9990314291168441e-01:2.1171115377932237e+00:4.1804005431018748e-01:2.8822760516114796e+00:3.3599671084120791e-01:3.1710096989350340e+00 + CVs 20 + 2.9305858514494221e-01 1.2599086631345269e-01 1.4098646953696134e-01 + 5.8169655440339596e-01 2.8733469930837879e-01 3.2227631301420684e-01 + 8.6164332886809381e-01 4.6364861867222901e-01 5.2309326425060465e-01 + 1.1302370587806632e+00 6.4486775745962388e-01 7.3859495826551647e-01 + 1.3865932721787244e+00 8.2556797161826978e-01 9.6855498280111552e-01 + 1.6312830881213378e+00 1.0013490193029191e+00 1.2132013969315056e+00 + 1.8656763795782221e+00 1.1645126492598048e+00 1.4796937671651791e+00 + 2.0899083029043437e+00 1.2978016909196457e+00 1.7801404283681626e+00 + 2.3053666401452939e+00 1.3743348243338287e+00 2.1134423633731996e+00 + 2.5199366342961427e+00 1.3649146175122113e+00 2.4570216420254520e+00 + 2.7387097668976184e+00 1.2524973723678006e+00 2.7821937737935682e+00 + 2.9546531365819373e+00 1.0468223915600958e+00 3.0732267374301063e+00 + 3.1615330639710342e+00 7.7248953902431028e-01 3.3288826040189869e+00 + 3.3622545970089823e+00 4.4705997522891794e-01 3.5484102570157097e+00 + 3.5560222936388213e+00 7.4679234016339358e-02 3.7318097181675509e+00 + 3.7246413428800769e+00 -3.5161074021745975e-01 3.8861546678793015e+00 + 3.8453533631223453e+00 -8.2883971783161869e-01 4.0225849217927259e+00 + 3.9265217311724361e+00 -1.3196411528401637e+00 4.1663955772514836e+00 + 4.0734070670095743e+00 -1.7121765689389745e+00 4.4019713803218607e+00 + id 14060 + loc 4.7023442387580872e-01 2.1222957968711853e-01 402 + blend 0.0000000000000000e+00 + interp 4.5145114117464730e-01:3.4124455248432883e-01:2.7427085001569440e-01:3.6136446734184791e-01:1.0400537309312903e+00:3.3249861191286550e-01:1.7455791473076436e+00:4.5114478918868395e-01:2.2169248983887004e+00:4.5144662666323560e-01:2.8117699387101807e+00:3.3152004809457553e-01:3.0229658775949440e+00:4.4429580121885126e-01:3.8402805419590540e+00 + CVs 20 + -6.5432546327886032e-02 3.7769787573135705e-01 2.4345150193446147e-01 + -1.7748860421305679e-01 7.7919012669394927e-01 4.8411743139151009e-01 + -3.2780220556440692e-01 1.1790990706286035e+00 7.2460599423194871e-01 + -4.9935254515179606e-01 1.5411373553866852e+00 9.8937089643284881e-01 + -6.7059139665560141e-01 1.8269502426220599e+00 1.3036353183724283e+00 + -8.3116937028914839e-01 2.0130352854592721e+00 1.6712512960801431e+00 + -9.9089133628474457e-01 2.0922436724982547e+00 2.0829407238954527e+00 + -1.1764575906984573e+00 2.0612638334283342e+00 2.5262052348699067e+00 + -1.4158393649912142e+00 1.9073276482509962e+00 2.9723436967654049e+00 + -1.7149335402988952e+00 1.6137282897169571e+00 3.3612261901526264e+00 + -2.0391710071926767e+00 1.2106194877656653e+00 3.6344676960001987e+00 + -2.3534718560722871e+00 7.8433394844365090e-01 3.8295693515692344e+00 + -2.6600373455800215e+00 3.9740134141837496e-01 4.0491484254004035e+00 + -2.9693812072582131e+00 8.9420449557164550e-02 4.3636293888542603e+00 + -3.3026354981132933e+00 -1.2436771829064752e-01 4.7793429773010576e+00 + -3.7105973306872659e+00 -2.8129634434919015e-01 5.2541235186171118e+00 + -4.2291849854992023e+00 -4.2523826957219302e-01 5.7252591213112876e+00 + -4.8216948687395895e+00 -5.8754032708328707e-01 6.1581988009701316e+00 + -5.3463522104155690e+00 -8.2975059766977843e-01 6.6668732356250171e+00 + id 14061 + loc 9.1515249013900757e-01 7.0485606789588928e-02 412 + blend 0.0000000000000000e+00 + interp 4.3814770578333556e-01:3.8552467288489123e-01:6.4353638000412383e-02:4.3814332430627773e-01:6.4490605457299643e-01:3.2312940914095500e-01:1.2352643211157865e+00:2.7063424963508498e-01:1.9880551352065325e+00:3.5414879427270901e-01:3.0078096769172173e+00:3.7513571202535878e-01:3.7543095523892687e+00 + CVs 20 + -7.2364452505012267e-01 4.0160996037119229e-01 1.1929649612094594e-01 + -1.2839996489502636e+00 6.9832200829649138e-01 2.0530328115851257e-01 + -1.8110822979540770e+00 9.4692255467794939e-01 2.6889398074327120e-01 + -2.3613660193213946e+00 1.1490150059001538e+00 3.3827868003332995e-01 + -2.9243506879098358e+00 1.2798332970888806e+00 4.3755366413260377e-01 + -3.4815261650476836e+00 1.3258600279872095e+00 5.7960283275232283e-01 + -4.0083620822425621e+00 1.2873667449418744e+00 7.6059761690385896e-01 + -4.4671453795498035e+00 1.1750631553518163e+00 9.7427409824297739e-01 + -4.8232087666047301e+00 1.0096269305634775e+00 1.2168899098844406e+00 + -5.0656952998351628e+00 8.1925607446885751e-01 1.4941824358754743e+00 + -5.1979726511517308e+00 6.0107335340166634e-01 1.8026937319365173e+00 + -5.2111246251285790e+00 2.9307234587354491e-01 2.0852946629298383e+00 + -5.0963469067689067e+00 -1.4181992134655186e-01 2.2941191861861432e+00 + -4.8756991704589261e+00 -6.7794817849862921e-01 2.4644761310417191e+00 + -4.5924829471979161e+00 -1.2529444906617404e+00 2.6724822140651581e+00 + -4.3040554401131068e+00 -1.8168148953084451e+00 3.0309140006792807e+00 + -4.0847100951272619e+00 -2.3519575532816885e+00 3.6046911880452877e+00 + -4.0219118715453837e+00 -2.8910022915853206e+00 4.3101505576958514e+00 + -4.1741949213123100e+00 -3.4243132746975413e+00 4.9579571992846532e+00 + id 14062 + loc 6.9149816036224365e-01 9.6463251113891602e-01 378 + blend 0.0000000000000000e+00 + interp 3.9820620422573161e-01:2.7843967319585861e-01:1.3835439684539386e-01:3.2889437745723504e-01:8.7818681944053645e-01:3.2149562531204756e-01:1.2652749978998095e+00:3.5768187411814062e-01:1.9620095425496602e+00:3.9820222216368939e-01:2.7859917442687863e+00:2.2694148157961569e-01:3.0604538785819555e+00:3.3411935884390809e-01:3.8460442210476882e+00 + CVs 20 + 6.9520494514928033e-01 3.1685153829865387e-01 2.2441727545998352e-02 + 1.2657936264117731e+00 5.0555507502711439e-01 -3.4338105665355390e-02 + 1.8055578729730237e+00 6.2876118485036303e-01 -1.3737294862045379e-01 + 2.3650938770972498e+00 7.3848532120287380e-01 -2.5266819791624939e-01 + 2.9444400333404870e+00 8.5428905414610101e-01 -3.4257473306437869e-01 + 3.5350962414831191e+00 9.7036854185315824e-01 -3.7037467521507317e-01 + 4.1302063895220513e+00 1.0658384590855245e+00 -3.0642212166868554e-01 + 4.7131556121014411e+00 1.1167549692553858e+00 -1.3337969488668344e-01 + 5.2496207346328996e+00 1.1030566745574542e+00 1.4351921022064107e-01 + 5.7061404358267787e+00 1.0138242664908423e+00 4.9337511003229251e-01 + 6.0720310048650576e+00 8.4520383411417255e-01 8.7509651113622977e-01 + 6.3533826424476914e+00 5.9702190584628534e-01 1.2550406521272464e+00 + 6.5693692531711738e+00 2.7576393976610136e-01 1.6212574343700896e+00 + 6.7572477597706495e+00 -1.1002219355399845e-01 1.9865402522697688e+00 + 6.9558527454800831e+00 -5.2442594951000965e-01 2.3687035247213042e+00 + 7.1884587972663265e+00 -9.0910776579939645e-01 2.7640035269545704e+00 + 7.4607621761362326e+00 -1.2392966885436443e+00 3.1481660999956835e+00 + 7.7480091979550494e+00 -1.5245634824336998e+00 3.5119679236974655e+00 + 7.9563579969854237e+00 -1.7638708286542535e+00 3.8824397735376701e+00 + id 14063 + loc 8.5345111787319183e-02 9.6509444713592529e-01 382 + blend 0.0000000000000000e+00 + interp 3.5605319475880770e-01:2.8202653868120203e-01:8.9743045303715019e-01:2.6122907130157852e-01:1.3404114046535600e+00:2.2687257443926886e-01:2.2941103038370971e+00:3.5604963422686015e-01:3.1544916091010231e+00:2.8078068236369907e-01:3.8851280096271306e+00 + CVs 20 + 1.0001188237547891e+00 2.3015234161881393e-01 -4.1220311325205544e-01 + 1.6269372067437895e+00 3.0120672360177786e-01 -7.5141225713579185e-01 + 2.1593869758601016e+00 3.1040510977254887e-01 -1.0936151533459646e+00 + 2.7217627970249465e+00 2.9776854506170863e-01 -1.4664071665582292e+00 + 3.3093905949023008e+00 2.4652364585987308e-01 -1.8563054812235609e+00 + 3.9116156105523965e+00 1.3882837305406359e-01 -2.2544095494998881e+00 + 4.5216656023612378e+00 -4.1004806507059732e-02 -2.6592834378803745e+00 + 5.1302437063242818e+00 -3.0508702360072293e-01 -3.0604423415893756e+00 + 5.7160682853077800e+00 -6.6465272761999405e-01 -3.4397007800516399e+00 + 6.2448776645802697e+00 -1.1199581737940556e+00 -3.7786489778759127e+00 + 6.6820712600227194e+00 -1.6521747922179817e+00 -4.0692477930113204e+00 + 7.0120967914183847e+00 -2.2276375703015958e+00 -4.3109878374212443e+00 + 7.2421415982605399e+00 -2.8087264546214690e+00 -4.5056241008968474e+00 + 7.3897821715162468e+00 -3.3626090406947062e+00 -4.6612352409462918e+00 + 7.4729226713818537e+00 -3.8666963338279832e+00 -4.7921460916732990e+00 + 7.5066395466500948e+00 -4.3091610369862261e+00 -4.9092057729574794e+00 + 7.5039839207742167e+00 -4.6864261485858636e+00 -5.0171113223782866e+00 + 7.4760135471099094e+00 -5.0036662634688920e+00 -5.1199953842953949e+00 + 7.4321407289369334e+00 -5.2732599561664513e+00 -5.2233069863029797e+00 + id 14064 + loc 6.0182881355285645e-01 9.9525588750839233e-01 403 + blend 0.0000000000000000e+00 + interp 4.3968759568021282e-01:2.9064195787541619e-01:8.7020413795531992e-01:2.9130696340886142e-01:1.3535651523146051e+00:4.2893240832600682e-01:1.9977197530876780e+00:3.9002650597058602e-01:2.8117882160919874e+00:4.3968319880425605e-01:3.0541748731846727e+00:2.6027924596401475e-01:3.8737040031173260e+00 + CVs 20 + -1.1789956885315502e-01 2.9963578073984816e-02 9.7013753274777029e-03 + -2.2283468708261700e-01 7.3691430376094436e-02 2.0469957630622371e-02 + -3.1982178497497815e-01 1.2554240237213676e-01 3.6194969752979714e-02 + -4.1407732826155408e-01 1.8158770471375640e-01 5.9574888418101671e-02 + -5.0484781006698254e-01 2.4165335288424358e-01 8.9637981096604369e-02 + -5.9104151545290440e-01 3.0555072142402856e-01 1.2484492312377472e-01 + -6.7193819385926545e-01 3.7323828550797256e-01 1.6350073953740307e-01 + -7.4748671043913473e-01 4.4468542192357174e-01 2.0371785264604225e-01 + -8.1812082934011698e-01 5.1973088620440211e-01 2.4316266122672969e-01 + -8.8493339317499209e-01 5.9829209577645748e-01 2.7984606963831909e-01 + -9.4970399484142276e-01 6.8130811512631506e-01 3.1343017064283407e-01 + -1.0145836907979560e+00 7.7223029795091169e-01 3.4752635064339837e-01 + -1.0818436174028441e+00 8.7305237848126360e-01 3.8663099061021861e-01 + -1.1519157704392411e+00 9.7198582627011731e-01 4.2480332293709533e-01 + -1.2246622809996315e+00 1.0449636983404660e+00 4.3903974404236723e-01 + -1.3065085862497889e+00 1.0721589052412737e+00 4.1378932602198359e-01 + -1.4055256704187651e+00 1.0542752929930410e+00 3.6857228274383330e-01 + -1.5179050036652300e+00 1.0106387406457640e+00 3.3943846050918464e-01 + -1.4927698593459053e+00 1.0839778122579364e+00 4.5111945551901877e-01 + id 14065 + loc 7.5453883409500122e-01 8.9868181943893433e-01 393 + blend 0.0000000000000000e+00 + interp 4.6128167514317459e-01:3.5719022952639717e-01:8.4995957744536943e-02:2.5621390184595760e-01:7.8675715150166825e-01:4.0899690438732877e-01:1.0456293815405331e+00:4.1071304919001272e-01:1.6190838645929824e+00:3.7977980269422407e-01:2.0100485429500607e+00:4.6127706232642318e-01:2.6401545700142508e+00:3.6964052867262936e-01:3.0486191130951621e+00:3.7405588994178368e-01:3.7333202520613575e+00 + CVs 20 + -2.1742606144506094e-01 2.7535783923519908e-01 -2.3602531140380267e-01 + -4.1945619911434906e-01 5.5012809480341118e-01 -4.3751168933602780e-01 + -5.9613760331903798e-01 8.3450837538404110e-01 -6.4040517693388077e-01 + -7.4138529656732710e-01 1.1242340568308944e+00 -8.5981935259698183e-01 + -8.5856632269600908e-01 1.4114529422174178e+00 -1.0970658088168372e+00 + -9.4775124009767464e-01 1.6944476292240933e+00 -1.3566787945156251e+00 + -1.0091533022526700e+00 1.9852263340800087e+00 -1.6462787736583282e+00 + -1.0589654280076000e+00 2.3040391429963871e+00 -1.9710580052656739e+00 + -1.1346387231660060e+00 2.6425656367742576e+00 -2.3212962018566472e+00 + -1.2567324298602804e+00 2.9555499001886671e+00 -2.6690227748125843e+00 + -1.4225262405442822e+00 3.2340067252283569e+00 -3.0195870227816521e+00 + -1.6569278884227652e+00 3.4996198333964053e+00 -3.4327755989935422e+00 + -1.9984647344626365e+00 3.7167537992356445e+00 -3.9292579916611272e+00 + -2.4436312194197853e+00 3.8052942857740137e+00 -4.4416244884974247e+00 + -2.9580016496848995e+00 3.6971946229645249e+00 -4.9443996000467862e+00 + -3.5187579648523069e+00 3.3066314273564847e+00 -5.5038369925447563e+00 + -4.1498830892429215e+00 2.6114844033559534e+00 -6.0506550974968656e+00 + -4.8556315077188357e+00 1.8121119246603976e+00 -6.3151552399678890e+00 + -5.4543858866676560e+00 1.2780361084687986e+00 -6.1235587647457885e+00 + id 14066 + loc 6.8542575836181641e-01 3.2103618979454041e-01 373 + blend 0.0000000000000000e+00 + interp 3.0604998987615434e-01:2.4985793363603148e-01:2.8934267061097807e-02:2.2419065871243149e-01:8.6356388366101955e-01:2.8178179851784446e-01:1.4140157809088001e+00:3.0604692937625561e-01:2.0000001294728520e+00:2.3791890208135513e-01:2.7205522378878100e+00:2.4652601932186910e-01:3.4975077438297895e+00 + CVs 20 + 1.3251757575184120e-01 3.7576417966324671e-01 1.2308446730975052e-01 + 2.7910960646319316e-01 7.4053418061159459e-01 2.3656448137812425e-01 + 4.2801311771707340e-01 1.0327939259200114e+00 3.3469298154137594e-01 + 5.6089163777411466e-01 1.2254592608309298e+00 4.5715991064264472e-01 + 6.6038873755434091e-01 1.4323016001802509e+00 5.9578136743805687e-01 + 7.3622976482445457e-01 1.6623292652771247e+00 6.2720972706198963e-01 + 8.2988816830494361e-01 1.8510110226583403e+00 5.6284245687774348e-01 + 9.7233163629326447e-01 2.0113268202297157e+00 4.6567519102051558e-01 + 1.1628953916883575e+00 2.1904890441433333e+00 3.7287709505438049e-01 + 1.3790010279020590e+00 2.4362573514878325e+00 3.1359995551161124e-01 + 1.5970567625095871e+00 2.7670989276968725e+00 3.0822207613604874e-01 + 1.8141889562598217e+00 3.1732332748835450e+00 3.6640087749721045e-01 + 2.0345453224994245e+00 3.6274254346663488e+00 5.2364431664026811e-01 + 2.2451178796519797e+00 4.0629844520345513e+00 8.3837766049663753e-01 + 2.3920048189700625e+00 4.3820290886886211e+00 1.3466528667757403e+00 + 2.3287065024143567e+00 4.4313883664670692e+00 2.0068591827519056e+00 + 2.0777113647782404e+00 4.0689821504837225e+00 2.6464810271733832e+00 + 2.0465196916919206e+00 3.4565536543120512e+00 3.0116729375599847e+00 + 2.3732724727157395e+00 2.9998694682895120e+00 3.0541045496021075e+00 + id 14067 + loc 6.8150222301483154e-01 5.6534755229949951e-01 396 + blend 0.0000000000000000e+00 + interp 4.6562091603232136e-01:3.0592684983257501e-01:1.9371148498341650e-02:3.8379247150089008e-01:1.0017455652573890e+00:4.3186429198256077e-01:1.3703836962408678e+00:3.0336196993878856e-01:1.9627505529534082e+00:3.4598422101859716e-01:2.5518000126757201e+00:3.7823530601631661e-01:3.0262742674167695e+00:4.6561625982316107e-01:3.6549641290221047e+00 + CVs 20 + 8.0040600917847105e-01 2.2731002791774657e-01 -3.1143187709477033e-01 + 1.3760945872166137e+00 2.9094177368029162e-01 -5.4455748194126086e-01 + 1.9106649175609520e+00 2.7791077534885833e-01 -7.5263065645068028e-01 + 2.4873005980556075e+00 2.2388057034741515e-01 -9.5662529907826477e-01 + 3.0952356518661288e+00 1.2202257985378018e-01 -1.1598143107822094e+00 + 3.7173467327853489e+00 -3.0567690186047436e-02 -1.3725831396919230e+00 + 4.3284458977308686e+00 -2.3309119784391674e-01 -1.6078051052471909e+00 + 4.8965085786283975e+00 -4.8438807894069180e-01 -1.8712695502383256e+00 + 5.3910830603861424e+00 -7.8315927223966630e-01 -2.1625266020255198e+00 + 5.7867687496674733e+00 -1.1231929403071221e+00 -2.4825229517336926e+00 + 6.0640691389337151e+00 -1.4865221841950571e+00 -2.8283830673409289e+00 + 6.2232611055235880e+00 -1.8462998780883360e+00 -3.1871077436317332e+00 + 6.2891469782656841e+00 -2.1853628733919015e+00 -3.5473075017938491e+00 + 6.2934647024120549e+00 -2.5059184604670177e+00 -3.9075840130550139e+00 + 6.2573958524019950e+00 -2.8088145043748636e+00 -4.2634964169922061e+00 + 6.1986546960397249e+00 -3.0872277295094452e+00 -4.6078787989945340e+00 + 6.1343432361423433e+00 -3.3487285626421546e+00 -4.9349587991128478e+00 + 6.0756392688893284e+00 -3.6110000365560158e+00 -5.2420106990218303e+00 + 6.0516107397281953e+00 -3.8862344745491404e+00 -5.5458918324381763e+00 + id 14068 + loc 7.8707104921340942e-01 9.6299934387207031e-01 380 + blend 0.0000000000000000e+00 + interp 5.0453070998601479e-01:2.7321611142005997e-01:1.0466807997067118e-03:3.1204747805266619e-01:8.3998108682675077e-01:5.0452566467891491e-01:1.6546310467845580e+00:3.0961703443131444e-01:2.0233257883552680e+00:3.1671632651324683e-01:2.9978187414685715e+00 + CVs 20 + -5.3410887391846362e-01 1.9836609715702191e-01 -4.1117196896239744e-01 + -9.4492155809742906e-01 3.3440962468669883e-01 -6.9557975481089640e-01 + -1.3300292294170968e+00 4.5295867986084293e-01 -9.5665686877412126e-01 + -1.7261922227197890e+00 5.7133910215225914e-01 -1.2415500684754111e+00 + -2.1295159924974278e+00 6.7712797571127459e-01 -1.5584990181337071e+00 + -2.5355375964388793e+00 7.5722901478603988e-01 -1.9120469082710414e+00 + -2.9438104687613107e+00 8.0441416222105833e-01 -2.3038585203910706e+00 + -3.3578731378297113e+00 8.1600621927460804e-01 -2.7339652339175475e+00 + -3.7740640264249805e+00 7.7498855754409846e-01 -3.2051133180305444e+00 + -4.1824153770604369e+00 6.5084955006302181e-01 -3.7141340445896081e+00 + -4.5760404816523064e+00 4.1583739425284438e-01 -4.2403429751641388e+00 + -4.9446935165164216e+00 5.8882608067036823e-02 -4.7534128096460000e+00 + -5.2721455881624069e+00 -4.0956812740263038e-01 -5.2279124569158348e+00 + -5.5453437857985213e+00 -9.6647733638779076e-01 -5.6454983081111010e+00 + -5.7592248268820292e+00 -1.5848617911300149e+00 -5.9896100605622244e+00 + -5.9079437279973703e+00 -2.2337259705131558e+00 -6.2456625220537321e+00 + -5.9822448123620076e+00 -2.8736548207397257e+00 -6.4086275336612202e+00 + -5.9867765756795688e+00 -3.4588052814728467e+00 -6.4934541821027283e+00 + -6.0040725514850894e+00 -3.9387598631234515e+00 -6.5601548438421169e+00 + id 14069 + loc 9.3278110027313232e-02 7.8350949287414551e-01 399 + blend 0.0000000000000000e+00 + interp 4.1726016344215777e-01:3.3715525323302870e-01:2.6495989174092238e-01:4.1725599084052339e-01:9.8117022343153615e-01:4.1004098723556454e-01:1.9013240877096820e+00:3.7871581641472685e-01:2.1734214272550041e+00:2.7449288221086138e-01:2.8638874726659163e+00:3.8763076366104388e-01:3.1341742009618905e+00:2.9481773031821201e-01:3.8485729695467201e+00 + CVs 20 + -2.0267083958408874e-01 3.1893049628835446e-01 -1.9859785234673211e-01 + -4.0342701005399018e-01 6.4600791775631594e-01 -4.1089927735661591e-01 + -5.9648392504815662e-01 9.7774054026657808e-01 -6.5762933917617716e-01 + -7.7900208594440967e-01 1.3084567475076661e+00 -9.4758068413176588e-01 + -9.5531484853140225e-01 1.6358928911961108e+00 -1.2786618639110738e+00 + -1.1444350586515484e+00 1.9607314406924699e+00 -1.6406288999500054e+00 + -1.3884663693186221e+00 2.2804515071352203e+00 -2.0181187991250602e+00 + -1.7464900279384112e+00 2.5567848935472202e+00 -2.3931641206701784e+00 + -2.2546728540515728e+00 2.6881989706955420e+00 -2.7290491919825364e+00 + -2.8522158555968509e+00 2.5933486728809920e+00 -2.9789295141637697e+00 + -3.4379169397870459e+00 2.2987267938214258e+00 -3.1406279708664102e+00 + -3.9466746432941249e+00 1.9024980139380381e+00 -3.2594555286586515e+00 + -4.3625146224653220e+00 1.5341946836008891e+00 -3.3907828004687040e+00 + -4.6898730873651164e+00 1.3270185593269406e+00 -3.5393752832342127e+00 + -4.8970211650144018e+00 1.3571514652645040e+00 -3.6421381400888797e+00 + -4.8679037764425113e+00 1.5782339224974047e+00 -3.6110084661276218e+00 + -4.4761187482479361e+00 1.7415031027866803e+00 -3.3881355614254156e+00 + -4.1674148303412206e+00 1.6915054787643957e+00 -3.1923065641842516e+00 + -4.4473752626296363e+00 2.0248583337191470e+00 -3.2396685774001162e+00 + id 14070 + loc 3.7285986542701721e-01 1.3950832188129425e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4664081837600994e-01:3.2915652574123194e-01:2.3668670073273557e-01:2.9531449385856895e-01:9.7691304246032773e-01:2.9419313910168060e-01:1.4749159660593427e+00:4.2445765045146505e-01:2.0486509606587231e+00:4.4663635196782620e-01:2.6265390397629882e+00:2.9338354239703612e-01:3.2942781217227672e+00 + CVs 20 + 3.1473172536993405e-01 4.6221478011720007e-01 -5.5601887098948810e-02 + 5.0890544191662290e-01 8.8254494023277963e-01 -1.2615213399105368e-01 + 6.5962742823660958e-01 1.2846214152970066e+00 -2.0226724742399377e-01 + 7.8521933177025738e-01 1.6828615505755442e+00 -2.9146691100379918e-01 + 8.6466193976415195e-01 2.0699175931849814e+00 -4.1291785840118977e-01 + 8.6547782052908406e-01 2.4294002029553008e+00 -5.9329640819117291e-01 + 7.5732389140822698e-01 2.7156370855807892e+00 -8.5538744408291278e-01 + 5.5264129606479606e-01 2.8594376577054677e+00 -1.1862694895651149e+00 + 3.1285817569612406e-01 2.8385371519175222e+00 -1.5335107224680760e+00 + 7.8712207365050579e-02 2.7010538940653137e+00 -1.8582702507721605e+00 + -1.5541807894782977e-01 2.4865522597304550e+00 -2.1544031848877840e+00 + -4.0394682618880801e-01 2.1968004804926462e+00 -2.4151344940749087e+00 + -6.7803109416087914e-01 1.8177315393238100e+00 -2.6135920880950536e+00 + -9.8695776804240198e-01 1.3331902070311035e+00 -2.6927390950256549e+00 + -1.3245417210671824e+00 7.5330692216221051e-01 -2.5507925945540961e+00 + -1.6609079694285205e+00 2.1733716538989145e-01 -2.1176742744926202e+00 + -2.0016708837567823e+00 -5.6366287812614768e-02 -1.4868745479397423e+00 + -2.3506671522353448e+00 5.6409918268502945e-03 -8.9121997066052372e-01 + -2.5761762269984949e+00 -3.6380984175755859e-02 -6.2240697120893862e-01 + id 14071 + loc 4.5075935125350952e-01 8.0600756406784058e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8135010005287751e-01:3.3924911896856319e-01:9.4848315749654832e-01:2.5258376871778432e-01:1.5848355027869148e+00:3.5614524673295578e-01:2.4972123616255120e+00:3.8134628655187697e-01:3.0795062898826631e+00:3.4630509666357390e-01:3.9994947547935658e+00 + CVs 20 + 1.8246260931544978e-01 2.5939207495445715e-01 -2.0307101229630792e-01 + 3.6472442870794231e-01 4.9515730548909065e-01 -3.9401375318041376e-01 + 5.4960815177577382e-01 7.0953648640592215e-01 -5.8291044734082587e-01 + 7.3595765073347608e-01 9.0144861461587289e-01 -7.7892463355057706e-01 + 9.1825564187665720e-01 1.0680432332354313e+00 -9.8706819830611847e-01 + 1.0829432717535723e+00 1.2063881276599275e+00 -1.2055194267426890e+00 + 1.2112738520981667e+00 1.3143046252731512e+00 -1.4228928562652379e+00 + 1.2915001760501128e+00 1.3929803384275736e+00 -1.6221910766729060e+00 + 1.3269141482212761e+00 1.4492480297550860e+00 -1.7922335018899043e+00 + 1.3263847891542471e+00 1.4878114798686826e+00 -1.9457233188576570e+00 + 1.2880055974738471e+00 1.4957781650465813e+00 -2.1115235993394506e+00 + 1.2021500905701983e+00 1.4485223429538352e+00 -2.3067274789949335e+00 + 1.0683230014920093e+00 1.3281596967350899e+00 -2.5330109365985156e+00 + 9.0210743552410011e-01 1.1293315234326715e+00 -2.7889505966382835e+00 + 7.2840794574023437e-01 8.5255333349392171e-01 -3.0775878351727837e+00 + 5.7756630430901734e-01 4.9988225677040310e-01 -3.4086371786936032e+00 + 5.0139100023568206e-01 7.2902663726248429e-02 -3.7986372869880181e+00 + 6.0248254063010798e-01 -3.8215993135163695e-01 -4.2152963228552514e+00 + 8.1567760173332626e-01 -6.0442765523013398e-01 -4.4017554500436260e+00 + id 14072 + loc 6.5534883737564087e-01 5.8494645357131958e-01 412 + blend 0.0000000000000000e+00 + interp 5.1218674857663493e-01:3.5171665122093360e-01:6.2370481733865502e-03:3.4431018130498126e-01:9.3003608434315288e-01:4.0692867814838074e-01:1.4111508934398680e+00:5.1218162670914924e-01:1.9885052612021257e+00:3.4927515811873838e-01:2.3933053709171497e+00:3.9170773485756089e-01:2.9954143909110451e+00:4.2996103718260753e-01:3.3651265741987499e+00 + CVs 20 + 7.1778728943212600e-01 6.3886748698725626e-02 -2.4989653637502537e-01 + 1.1883026909830092e+00 9.9785357473974878e-04 -4.7163117446197778e-01 + 1.6066636619997468e+00 -1.0373684232785663e-01 -6.8044712629075321e-01 + 2.0302877770158645e+00 -2.2024985392394192e-01 -8.7734442157537806e-01 + 2.4445348008749832e+00 -3.4295911942519253e-01 -1.0558409642629956e+00 + 2.8363745851952116e+00 -4.6329921014393016e-01 -1.2117150048377199e+00 + 3.1944071093185920e+00 -5.7165602398871762e-01 -1.3442105532879944e+00 + 3.5106356522549684e+00 -6.5981458530245152e-01 -1.4569940505139944e+00 + 3.7839492063254054e+00 -7.2291759676946010e-01 -1.5568120417006801e+00 + 4.0171836392372855e+00 -7.5956904222407595e-01 -1.6503110767968594e+00 + 4.2050041092598036e+00 -7.6262546671209597e-01 -1.7384451827804519e+00 + 4.3380757063156095e+00 -7.0681585501962996e-01 -1.8071929771703683e+00 + 4.4410899963558270e+00 -5.7880951146391801e-01 -1.8383173252932803e+00 + 4.5628545342247451e+00 -4.1789234297489619e-01 -1.8461088118196836e+00 + 4.7174269858909019e+00 -2.6462093631830519e-01 -1.8559017700342682e+00 + 4.8945805892896344e+00 -1.2657086779131088e-01 -1.8598834251919971e+00 + 5.0841317520324321e+00 -7.4826167025232593e-03 -1.8401985689868570e+00 + 5.2689767538257284e+00 7.7019034169728773e-02 -1.8186781737995723e+00 + 5.3127838677560639e+00 4.6129664797537773e-02 -1.9910151624197288e+00 + id 14073 + loc 3.8877588510513306e-01 9.5961219072341919e-01 402 + blend 0.0000000000000000e+00 + interp 4.8514686624919834e-01:4.8514201478053587e-01:3.5779346385738098e-03:3.5167995609658387e-01:7.5336524232124202e-01:4.7369471943012587e-01:1.0659373595391732e+00:3.1404788721872839e-01:2.0320312853186207e+00:3.1541239869142679e-01:2.9999999881095611e+00:3.5948090316391340e-01:3.6449739283691329e+00 + CVs 20 + -8.9113346465646961e-02 1.3030909483622066e-01 -5.2772768589775046e-02 + -1.6851051862539176e-01 2.7880958442492682e-01 -1.2973356992146901e-01 + -2.3917348694852456e-01 4.3190722502723938e-01 -2.2509061991265994e-01 + -3.0562498445712022e-01 5.8018646014856701e-01 -3.3528406598144567e-01 + -3.6732073147648059e-01 7.1873528024541367e-01 -4.5378500646541109e-01 + -4.2645284420026980e-01 8.4463345183802796e-01 -5.7293239680682428e-01 + -4.8698042556749715e-01 9.5653856573611207e-01 -6.8747658427131564e-01 + -5.5494737054882204e-01 1.0541787587808371e+00 -7.9772579031665658e-01 + -6.3665577031782106e-01 1.1358224019882726e+00 -9.0566035211175122e-01 + -7.3641872355756788e-01 1.1990686487354076e+00 -1.0107998079082090e+00 + -8.5686177989811130e-01 1.2438327303721968e+00 -1.1112639582940114e+00 + -9.9658632913938749e-01 1.2668726502345127e+00 -1.2017970929364532e+00 + -1.1536106676159834e+00 1.2658835123914887e+00 -1.2790998639175526e+00 + -1.3197128488046306e+00 1.2395502401886835e+00 -1.3355864691094266e+00 + -1.4798232907762932e+00 1.1936559543164871e+00 -1.3589464570520329e+00 + -1.6180021779437841e+00 1.1400374975964809e+00 -1.3389181450816905e+00 + -1.7207434712189675e+00 1.0840558488313257e+00 -1.2758834158979566e+00 + -1.7868274721956938e+00 1.0230015603557530e+00 -1.1836717339273304e+00 + -2.0910411080545277e+00 9.6154303628969484e-01 -1.1206404530609950e+00 + id 14074 + loc 2.9946434497833252e-01 1.4301764965057373e-01 401 + blend 0.0000000000000000e+00 + interp 4.8079708396830778e-01:3.8652331717364069e-01:4.8138568051759856e-01:2.6714691788193190e-01:9.9579498248653775e-01:3.9962713580330383e-01:1.9742928697087638e+00:3.8899106478350276e-01:2.7216945617159416e+00:4.0629360920827318e-01:3.2761735799862124e+00:4.8079227599746810e-01:3.9803771964463208e+00 + CVs 20 + -1.6108136680469512e-01 3.2062992482056363e-01 7.6255621924342293e-02 + -3.4291964012354786e-01 6.3716034085078832e-01 1.6214408346559739e-01 + -5.2808610748917717e-01 9.4173899462076782e-01 2.4622805745076931e-01 + -7.1592802762296182e-01 1.2283213199068328e+00 3.2598903174183153e-01 + -9.1761155885589196e-01 1.4930508097073334e+00 4.0628449245946108e-01 + -1.1444337731290157e+00 1.7322254212316088e+00 4.9741646131556400e-01 + -1.4035748608280634e+00 1.9329954120726656e+00 6.1370508719193884e-01 + -1.6909032280043168e+00 2.0738835448232775e+00 7.6150781066759643e-01 + -1.9914666442398326e+00 2.1497789687831865e+00 9.3802879631573610e-01 + -2.2918470774833115e+00 2.1699740422046192e+00 1.1377341514767596e+00 + -2.5862505138875429e+00 2.1156082257695221e+00 1.3351256416933825e+00 + -2.8716397683062946e+00 1.9450470504097817e+00 1.4845002220812162e+00 + -3.1573971322384664e+00 1.6498706408176012e+00 1.5894140469310691e+00 + -3.4535891638355913e+00 1.2636813359899379e+00 1.7151312241927668e+00 + -3.7371764010512698e+00 8.1891988759026590e-01 1.8974805279723452e+00 + -3.9832878844966517e+00 2.9452043412011020e-01 2.1455302335985365e+00 + -4.2183088194807077e+00 -2.9917720461104086e-01 2.6008959065624331e+00 + -4.4601050413472070e+00 -6.5057448703253984e-01 3.3696091416037777e+00 + -4.6207362180444047e+00 -7.7987657426207291e-01 3.8618388637412391e+00 + id 14075 + loc 6.0429149866104126e-01 3.7095490097999573e-01 400 + blend 0.0000000000000000e+00 + interp 5.0898829770636711e-01:5.0898320782339002e-01:5.5063866901762260e-01:3.4715932653227988e-01:1.0197863681233452e+00:4.5001850172285468e-01:1.8690513808119524e+00:3.4617359407414627e-01:2.4274062776707810e+00:3.3683020337920705e-01:3.0549673271170379e+00:3.3432580049651556e-01:3.9660570538186883e+00 + CVs 20 + 3.1911782297641350e-01 1.9734561068694012e-01 1.3558013534973479e-01 + 6.1399547749877437e-01 3.9330007220434138e-01 3.0587839568817221e-01 + 8.9052572322810053e-01 5.7561621172800870e-01 5.0322846399370436e-01 + 1.1498295067886608e+00 7.4148425702759047e-01 7.2608604543152910e-01 + 1.3890009511338812e+00 8.9052859441207743e-01 9.6972122916544790e-01 + 1.6084131793395717e+00 1.0252825509107988e+00 1.2284827115042944e+00 + 1.8106825848242971e+00 1.1477937747594176e+00 1.5015138072184850e+00 + 1.9985462174360584e+00 1.2546754845178461e+00 1.7924371596585607e+00 + 2.1721415146964027e+00 1.3383550288862687e+00 2.1044879143931419e+00 + 2.3283308205295858e+00 1.3918032735370964e+00 2.4393783695012501e+00 + 2.4616132817419940e+00 1.4081265028452823e+00 2.7995735811758760e+00 + 2.5622416530820806e+00 1.3771851547372544e+00 3.1859759269791068e+00 + 2.6166641408634121e+00 1.2865308978865642e+00 3.5918171699411898e+00 + 2.6098037921623227e+00 1.1250018230552681e+00 4.0001648891068378e+00 + 2.5326523472210960e+00 8.8810209286314534e-01 4.3797407062427425e+00 + 2.3901144535907224e+00 5.7943735365714621e-01 4.6954373174346618e+00 + 2.1973615492068843e+00 2.0973399007706517e-01 4.9169273855496751e+00 + 1.9787130525946246e+00 -1.9391434144157804e-01 5.0430955805036746e+00 + 1.7802670944830263e+00 -5.4281124433059258e-01 5.2473986399892292e+00 + id 14076 + loc 2.6500526070594788e-01 1.2159448117017746e-01 382 + blend 0.0000000000000000e+00 + interp 4.0883058439278058e-01:2.7934659243653698e-01:4.2234709646359636e-01:3.0463372911237174e-01:1.0141534165474151e+00:3.4595514134248467e-01:1.3108216974090685e+00:3.9406800605276754e-01:1.9728173809457021e+00:2.8503378172786387e-01:2.3121365486074748e+00:4.0882649608693666e-01:2.9796847082611553e+00:2.6358479481099645e-01:3.7173789549600462e+00 + CVs 20 + -5.9769680536853587e-01 1.5077547160875865e-01 -5.0797232162086003e-01 + -1.0529876671533331e+00 1.7510407789791915e-01 -8.2922594978576103e-01 + -1.4741795906119153e+00 1.2480386720651215e-01 -1.1095536642346098e+00 + -1.8938231382570574e+00 2.4702588758543254e-02 -1.4104599642693989e+00 + -2.2948140461611710e+00 -1.2504815644059852e-01 -1.7247567487953939e+00 + -2.6637124500884219e+00 -3.1613989614204685e-01 -2.0416745989976706e+00 + -2.9967716478340556e+00 -5.3157372119164914e-01 -2.3494596261451730e+00 + -3.2963585156159949e+00 -7.4887908438125739e-01 -2.6347548720634637e+00 + -3.5633866180469154e+00 -9.4484733854382497e-01 -2.8848252814183080e+00 + -3.8029275165053278e+00 -1.1025616416154684e+00 -3.0972222786992876e+00 + -4.0335688598546220e+00 -1.2200721279610414e+00 -3.2788953450098410e+00 + -4.2851031916180498e+00 -1.3146313948003308e+00 -3.4359753072421912e+00 + -4.5776175451433154e+00 -1.4130530927170932e+00 -3.5690944189576963e+00 + -4.9048988147446986e+00 -1.5399472540988792e+00 -3.6806367766821610e+00 + -5.2509930175796420e+00 -1.7053102766371873e+00 -3.7794857767835373e+00 + -5.6067166843957548e+00 -1.9073156808667899e+00 -3.8715015573497671e+00 + -5.9640887335984516e+00 -2.1472095407238028e+00 -3.9554740370159447e+00 + -6.3080268709574936e+00 -2.4376045818018914e+00 -4.0222166335320981e+00 + -6.5911197367573759e+00 -2.8595399444561695e+00 -4.0219227858787754e+00 + id 14077 + loc 8.6235725879669189e-01 7.3982632160186768e-01 378 + blend 0.0000000000000000e+00 + interp 4.6110436964715168e-01:3.5502413505190233e-01:6.3597597008071927e-01:3.0630198401845848e-01:1.0310398127237939e+00:3.4260737740581698e-01:1.7047931139749100e+00:2.8451143410099600e-01:2.0284887355318366e+00:3.6461683017446400e-01:3.2970281226164486e+00:4.6109975860345526e-01:3.9789358049741961e+00 + CVs 20 + 5.6167170567221669e-01 3.3716927600015273e-01 -2.1517360876136982e-02 + 1.0760151527996751e+00 6.0740835057598797e-01 -8.0783442959105722e-02 + 1.5925637250318931e+00 8.3565271365906812e-01 -1.7833036432056687e-01 + 2.1314687909819714e+00 1.0573073954061609e+00 -2.9583500792857792e-01 + 2.6837905784537783e+00 1.2813766925583183e+00 -4.0258666496708428e-01 + 3.2514060351756577e+00 1.4927491990727679e+00 -4.6999703736207143e-01 + 3.8445069071049351e+00 1.6695056711839109e+00 -4.7704182183399879e-01 + 4.4611008835259662e+00 1.7924734444223356e+00 -4.1010444252996048e-01 + 5.0818916639276424e+00 1.8426451344758545e+00 -2.6885857656784462e-01 + 5.6786719613537677e+00 1.7999821960865408e+00 -7.4430680377181924e-02 + 6.2258842528799097e+00 1.6463148898390019e+00 1.3810649817817722e-01 + 6.7012206838431236e+00 1.3681279077613695e+00 3.3576880276389409e-01 + 7.0840387460670478e+00 9.7617375338617451e-01 4.9411538445359482e-01 + 7.3827667576120550e+00 5.2560142404820853e-01 6.1281395130207650e-01 + 7.6459878481147090e+00 8.0060130405620544e-02 7.1980121070462277e-01 + 7.9124568099913510e+00 -3.1225852116747665e-01 8.2005511903923267e-01 + 8.1850127705360656e+00 -6.0933725576360986e-01 8.6823279530163155e-01 + 8.4467245212991244e+00 -8.3324748349962796e-01 8.4741907441592557e-01 + 8.6989546330147629e+00 -1.1988369938587233e+00 8.8250333654235025e-01 + id 14078 + loc 1.1681197583675385e-01 6.5810990333557129e-01 395 + blend 0.0000000000000000e+00 + interp 3.7084524276233594e-01:2.8682270620288097e-01:1.7557441243143479e-01:3.7084153430990835e-01:9.9848789357199397e-01:3.3600155897057804e-01:1.6726663614161121e+00:3.4409591872517731e-01:2.5863871678200230e+00:3.0928167897322906e-01:3.0441980371956863e+00:3.3760618596975783e-01:3.7296941781771276e+00 + CVs 20 + 4.7236164704864370e-01 1.0600505373346186e-01 -2.9114726579801309e-01 + 8.8722042021688874e-01 1.6314788401052582e-01 -5.5169643566561233e-01 + 1.2973662807371060e+00 2.1354832543245050e-01 -7.8870378741468905e-01 + 1.7161194031202682e+00 2.6542662249777071e-01 -1.0008635137455997e+00 + 2.1355240265447271e+00 3.1106116956463814e-01 -1.1860568592949639e+00 + 2.5472521263114185e+00 3.4403674604559153e-01 -1.3472583745857734e+00 + 2.9436250516160598e+00 3.5668117440153835e-01 -1.4867230375837817e+00 + 3.3180637485332740e+00 3.3942677869452642e-01 -1.6032772352682649e+00 + 3.6650948701953965e+00 2.8466994496516884e-01 -1.6982934878913118e+00 + 3.9799102377607500e+00 1.8855187531957007e-01 -1.7780402207288466e+00 + 4.2597429189295388e+00 5.1759848961939969e-02 -1.8460770446295713e+00 + 4.5059685356579315e+00 -1.1977568053679333e-01 -1.8999540283574863e+00 + 4.7218678317328830e+00 -3.1947541470174512e-01 -1.9379667168294676e+00 + 4.9090931132006679e+00 -5.4482235698792403e-01 -1.9631936426895451e+00 + 5.0649101463298942e+00 -7.9399086893430226e-01 -1.9792590243244026e+00 + 5.1814358932524636e+00 -1.0569591514387215e+00 -1.9861344607869624e+00 + 5.2523869631883890e+00 -1.3180800385303986e+00 -1.9829616893818112e+00 + 5.2779093296805684e+00 -1.5774543978868096e+00 -1.9716969581759107e+00 + 5.2635488557759942e+00 -1.9068403922487334e+00 -1.9699725107474797e+00 + id 14079 + loc 2.6112499833106995e-01 7.6454371213912964e-01 379 + blend 0.0000000000000000e+00 + interp 5.2573083780199004e-01:4.6440113352602769e-01:6.5892666088243734e-01:2.9087570527307838e-01:1.0500780253482178e+00:2.7638233095987563e-01:2.0075579595126918e+00:5.2572558049361207e-01:2.9650445733895721e+00:4.8807848337501430e-01:3.1751081588170704e+00:2.8443077763858676e-01:3.9992172302064612e+00 + CVs 20 + -1.9878865757477718e-01 2.0627032079448110e-01 2.3457323436610014e-01 + -3.6344757869979039e-01 3.7491848532991823e-01 4.6225844724389725e-01 + -5.0700627291848610e-01 4.8739626196378183e-01 7.1089734053353604e-01 + -6.3929529602060575e-01 5.5116720588041712e-01 1.0318934917329670e+00 + -7.4493673506449198e-01 6.1036055885453955e-01 1.4158857445117192e+00 + -8.2677059659750141e-01 7.1335783466492841e-01 1.8226765199084327e+00 + -9.3401102380707435e-01 8.8788712487470745e-01 2.2287749620997941e+00 + -1.1172014636829983e+00 1.1464573524382884e+00 2.5932708613691089e+00 + -1.3667062232489262e+00 1.4769062451699306e+00 2.8633766658683002e+00 + -1.6594584902892431e+00 1.8473569028248358e+00 3.0160718730464460e+00 + -1.9776307722788569e+00 2.2224355641253175e+00 3.0574301223851927e+00 + -2.2943659080379897e+00 2.5655335892142905e+00 3.0143975743833593e+00 + -2.5928159950954486e+00 2.8427766712312597e+00 2.9202454210360513e+00 + -2.8682907884784310e+00 3.0347169642831315e+00 2.7992844976934315e+00 + -3.1168154763126550e+00 3.1428062552156453e+00 2.6577948128185809e+00 + -3.3473687522704600e+00 3.1677557671493002e+00 2.4619050765882449e+00 + -3.5752930503270335e+00 3.0680275736500873e+00 2.1689745443456756e+00 + -3.7954508292805698e+00 2.7613619241179270e+00 1.8771579867588235e+00 + -3.8559218301198275e+00 2.4763438515954679e+00 1.8891537756127543e+00 + id 14080 + loc 6.8404078483581543e-01 9.1196560859680176e-01 396 + blend 0.0000000000000000e+00 + interp 4.2784509942882631e-01:3.0633644964118206e-01:6.5811331139950080e-02:3.1092209375838697e-01:1.0010226529593074e+00:4.2784082097783205e-01:2.0120810499639412e+00:2.9898640645646513e-01:2.6892585711660173e+00:2.6232655595400650e-01:3.1587518600387381e+00 + CVs 20 + 9.4753069625421737e-01 2.5581242185128855e-01 -2.6730004729191542e-01 + 1.5507674516874175e+00 3.2520536520529686e-01 -4.1979204672787784e-01 + 2.0528185007780895e+00 3.1399536696388103e-01 -5.2609391251485571e-01 + 2.5594721933243103e+00 2.7711278171217513e-01 -6.0966583911997807e-01 + 3.0706886391647559e+00 2.1644320638443820e-01 -6.7934931464609760e-01 + 3.5911978618029083e+00 1.3574677807035163e-01 -7.4554060307282644e-01 + 4.1248947724139349e+00 4.3159989911022434e-02 -8.1875726930205128e-01 + 4.6732070029691597e+00 -5.2368714470438671e-02 -9.0537422046299809e-01 + 5.2403603745055038e+00 -1.5506894536313054e-01 -1.0096822389583613e+00 + 5.8336559006344286e+00 -2.8759992834803838e-01 -1.1356893185625097e+00 + 6.4438808882039460e+00 -4.8176475257845475e-01 -1.2944898940103522e+00 + 7.0346520521267077e+00 -7.6047043145432758e-01 -1.5023184242841328e+00 + 7.5643035463107333e+00 -1.1260134916097988e+00 -1.7632347165895730e+00 + 8.0111763388052530e+00 -1.5751379383731918e+00 -2.0669725427134371e+00 + 8.3623255759335375e+00 -2.1006646079599012e+00 -2.3984379706831085e+00 + 8.6047971975490558e+00 -2.6782054086528668e+00 -2.7452133362703734e+00 + 8.7308482845551314e+00 -3.2747064415015545e+00 -3.0908187450088169e+00 + 8.7413101961742097e+00 -3.8613618421004707e+00 -3.4077863061095570e+00 + 8.6215179895804077e+00 -4.3589692362053150e+00 -3.6366518925118467e+00 + id 14081 + loc 4.5241606235504150e-01 8.4073984622955322e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9013169891923181e-01:4.3650152996766139e-01:5.3527481196709414e-01:3.4741990645015858e-01:1.0748686192616261e+00:4.9012679760224265e-01:1.6772127349171253e+00:4.4717249516451985e-01:2.0031052682547923e+00:3.1549857776326556e-01:2.4753395291382931e+00:4.6040969112803087e-01:3.2085422827025667e+00:2.7128721250160448e-01:3.7783273651376614e+00 + CVs 20 + 8.0851160422341209e-02 3.6533537912606173e-01 1.1357688643170247e-01 + 2.0010714033705279e-01 7.0468884850046010e-01 1.8682758799430152e-01 + 3.5108007245797362e-01 1.0330885990976129e+00 2.3234732306338057e-01 + 5.3181998388775997e-01 1.3535514645480338e+00 2.5138731477040482e-01 + 7.4227177182291926e-01 1.6562729232412474e+00 2.3381320126763383e-01 + 9.7921667516852395e-01 1.9265572475296153e+00 1.6553447996073711e-01 + 1.2332575662673091e+00 2.1429918301477784e+00 3.4500689950138330e-02 + 1.4892120033261305e+00 2.2865814527232389e+00 -1.5648838247083807e-01 + 1.7317629322462529e+00 2.3485135454077932e+00 -3.9036028257198063e-01 + 1.9499639675163301e+00 2.3294409812394137e+00 -6.4409031622725355e-01 + 2.1392918415197242e+00 2.2373649508108073e+00 -8.9505932281033385e-01 + 2.3007887464261065e+00 2.0848283818185163e+00 -1.1241227483776943e+00 + 2.4389145221335515e+00 1.8879776882455064e+00 -1.3158722639876002e+00 + 2.5602165668127168e+00 1.6662571983000629e+00 -1.4572821231423374e+00 + 2.6702278734420566e+00 1.4442725904686466e+00 -1.5340620451997105e+00 + 2.7690531081012342e+00 1.2707313302543226e+00 -1.5261991739922074e+00 + 2.8588242806258055e+00 1.2224393295206211e+00 -1.4574893098229653e+00 + 2.9539982737472372e+00 1.2243821750223269e+00 -1.4011373179595521e+00 + 3.0455184501386157e+00 1.0557164947944400e+00 -1.2208682315256647e+00 + id 14082 + loc 2.9712310433387756e-01 7.3625391721725464e-01 403 + blend 0.0000000000000000e+00 + interp 4.0848713691902544e-01:2.6337000954271339e-01:1.5257904833998470e-04:4.0848305204765628e-01:9.4644660757466459e-01:2.7830928795421794e-01:1.2924819854370768e+00:2.6256765522484615e-01:2.0210034215519217e+00:3.3444871990753733e-01:2.9910160621321573e+00 + CVs 20 + 4.5089383149442899e-02 1.8964609560532472e-01 -1.5955854070607059e-01 + 7.2329841879231943e-02 3.7414510653118227e-01 -3.3551288867353662e-01 + 9.2310234753281262e-02 5.5700633265454758e-01 -5.2608617518319700e-01 + 1.0231061969983413e-01 7.4549320152962362e-01 -7.3374758159273656e-01 + 9.6243662188700674e-02 9.4006684902191173e-01 -9.5616625398711241e-01 + 6.6780006238812417e-02 1.1434246699411303e+00 -1.1887145095441107e+00 + 5.2407981251649804e-03 1.3588400073539590e+00 -1.4243283981701700e+00 + -9.6026147193855715e-02 1.5877328554330337e+00 -1.6536424554018938e+00 + -2.4326004273915014e-01 1.8286280187550288e+00 -1.8661132785351466e+00 + -4.4279301994200881e-01 2.0730319954098406e+00 -2.0530872826782258e+00 + -7.0141688804785030e-01 2.3012196326324572e+00 -2.2111311969959537e+00 + -1.0171932339141665e+00 2.4791086591971014e+00 -2.3460839389962995e+00 + -1.3595400260530126e+00 2.5710820597821673e+00 -2.4751045383600849e+00 + -1.6796747195428492e+00 2.5820161040446119e+00 -2.6107702412262657e+00 + -1.9749321996579021e+00 2.5611873939761671e+00 -2.7379461530117299e+00 + -2.2920238500795467e+00 2.5361602526145219e+00 -2.8282165172672493e+00 + -2.6630117334450576e+00 2.4900009150055604e+00 -2.8625780323238645e+00 + -3.0715461044669654e+00 2.4024328048540324e+00 -2.8363808844709593e+00 + -3.2289807795532948e+00 2.4223165633210257e+00 -2.8954386597016950e+00 + id 14083 + loc 8.9596092700958252e-01 7.0038342475891113e-01 412 + blend 0.0000000000000000e+00 + interp 5.5482043809385573e-01:3.6971084984918134e-01:2.4983485606016043e-03:4.1744831547647326e-01:5.6353320358412207e-01:4.8086932408624172e-01:9.9688871615338936e-01:4.0378347890705973e-01:1.6599847369597600e+00:3.4346846520758001e-01:2.3402426657028723e+00:5.5182732199677331e-01:3.0882197172796131e+00:5.5481488988947480e-01:3.4859394255941289e+00 + CVs 20 + 6.8322110182982476e-01 2.4788684733941960e-01 -1.3616423228164537e-01 + 1.1468750088943447e+00 4.1015103741886827e-01 -2.4167058546188508e-01 + 1.5457509407800165e+00 5.2131422549811979e-01 -3.4633992728476493e-01 + 1.9791582237446612e+00 6.0677200797694042e-01 -4.6509991650953053e-01 + 2.4378298157313743e+00 6.5195925517718323e-01 -5.9537280819249272e-01 + 2.9068030987139091e+00 6.4515550344938755e-01 -7.3252323765680516e-01 + 3.3707736548217087e+00 5.8144640185429552e-01 -8.7052531556564683e-01 + 3.8166601461891205e+00 4.6290305864964454e-01 -1.0032360254950177e+00 + 4.2326922975984598e+00 2.9709142268495392e-01 -1.1254613840862833e+00 + 4.6101570035006025e+00 9.5909521733456016e-02 -1.2331266705981299e+00 + 4.9508539368014608e+00 -1.2715129554902038e-01 -1.3230504544226149e+00 + 5.2673160750185204e+00 -3.6451338295518054e-01 -1.3942763448435798e+00 + 5.5625333052403301e+00 -6.2211404488449151e-01 -1.4541220464523543e+00 + 5.8195074762137446e+00 -9.1274780394238753e-01 -1.5183789679807462e+00 + 6.0246935384882869e+00 -1.2406889833091681e+00 -1.5950503010270514e+00 + 6.1767880272502413e+00 -1.5999903185146698e+00 -1.6772915761080462e+00 + 6.2781980702187088e+00 -1.9809052264710805e+00 -1.7559354050809142e+00 + 6.3333374660358999e+00 -2.3720682983929247e+00 -1.8303582239257596e+00 + 6.3399463477516909e+00 -2.7719375399074138e+00 -1.9164763360245733e+00 + id 14084 + loc 9.5904392004013062e-01 8.7612313032150269e-01 402 + blend 0.0000000000000000e+00 + interp 4.9677890255197243e-01:3.0049231107391056e-01:2.4283179105411001e-04:4.9677393476294696e-01:7.0662523079780715e-01:2.9233137647304325e-01:1.0983753935183653e+00:3.9288852917701811e-01:1.7738741470885491e+00:3.2023969785356904e-01:2.0303328920100756e+00:2.7730461425303859e-01:2.7584620820790491e+00:2.1402060374479104e-01:3.7085417661808719e+00 + CVs 20 + -1.5854647702675845e-01 8.6727538410160482e-02 -3.1688390643331218e-02 + -3.2011701796282338e-01 1.8065342257856762e-01 -6.4415019401864101e-02 + -4.8219540854742721e-01 2.7792999391529338e-01 -9.7361381381560780e-02 + -6.4635124748515294e-01 3.7741298521874289e-01 -1.3250760021295216e-01 + -8.1909371753692017e-01 4.8304900165055975e-01 -1.7736620234831524e-01 + -1.0093245768024177e+00 6.0364925386582591e-01 -2.4642861402714841e-01 + -1.2062186930540792e+00 7.4083003548815474e-01 -3.4781185807630188e-01 + -1.3933496312453082e+00 8.6881980161376426e-01 -4.8161010368897555e-01 + -1.6076127351826872e+00 1.0046228814871772e+00 -7.1141658984629341e-01 + -1.8063846396089498e+00 1.2350144270697587e+00 -1.0752251562503421e+00 + -1.8713164369492925e+00 1.5012395389583275e+00 -1.3795774899555133e+00 + -1.8400446065746916e+00 1.6975240665680462e+00 -1.4704986493322567e+00 + -1.7249780719650873e+00 1.8603278990664167e+00 -1.3193018453136900e+00 + -1.4900235234983077e+00 2.0437658351664378e+00 -1.0692909841756773e+00 + -1.1932405747787915e+00 2.2340528902019927e+00 -9.2187252585323765e-01 + -8.8456361506056702e-01 2.4039431715107478e+00 -8.9506383923877297e-01 + -5.5910574244674827e-01 2.5417988406778420e+00 -9.4989410634125793e-01 + -2.5955566835583643e-01 2.6263094999804482e+00 -1.0782257216005857e+00 + -2.9777599622172946e-01 2.5576985138082802e+00 -1.2329534633943222e+00 + id 14085 + loc 1.8572178483009338e-01 7.9590922594070435e-01 1069 + blend 0.0000000000000000e+00 + interp 4.7805722812853230e-01:3.3799543652034242e-01:3.4630779665790890e-01:4.7805244755625104e-01:9.9265767040953001e-01:3.3663286215842986e-01:1.6559021509878340e+00:3.7340711299119778e-01:2.5749298602604620e+00:3.9986384763258431e-01:3.3013131928254627e+00:3.8398833999945092e-01:3.9690147452109943e+00 + CVs 20 + 3.1412603733991140e-01 1.9353672561349661e-01 -2.4505642949462048e-01 + 6.2229906492637954e-01 4.0404153250354991e-01 -5.0458067106451432e-01 + 9.2000258665492163e-01 6.3302521971290482e-01 -7.7371201111371557e-01 + 1.1873912804319364e+00 8.8290098866132594e-01 -1.0628274431866247e+00 + 1.3942765178483234e+00 1.1472670780689722e+00 -1.3869154238505041e+00 + 1.5064303392076446e+00 1.3965756302729631e+00 -1.7516283384281210e+00 + 1.5074141228021527e+00 1.5735729707049093e+00 -2.1421413156180460e+00 + 1.4206092051601789e+00 1.6132828164989772e+00 -2.5213139525401758e+00 + 1.2925889789419935e+00 1.4856102837758705e+00 -2.8402818581296976e+00 + 1.1595185443904583e+00 1.2292736544103167e+00 -3.0665083853475954e+00 + 1.0401306957912630e+00 9.2052433205623996e-01 -3.2221267491519390e+00 + 9.4758874770436008e-01 6.0654096948953562e-01 -3.3684349499128428e+00 + 8.9632718294452374e-01 2.9821998287527235e-01 -3.5565435478150746e+00 + 9.0689774744154361e-01 -2.5537672525244304e-04 -3.8060425414633743e+00 + 1.0172048247854109e+00 -2.7290424856883161e-01 -4.1118779545587101e+00 + 1.3095428972844423e+00 -4.8266964391853412e-01 -4.4312917664177069e+00 + 1.8901221618476836e+00 -5.2739763629979863e-01 -4.6439606508399711e+00 + 2.6029417351642512e+00 -3.0489342739373637e-01 -4.6389441283641837e+00 + 2.8453068148183540e+00 -4.0750253576104822e-01 -4.9336286239385689e+00 + id 14086 + loc 9.7662949562072754e-01 4.6536099910736084e-01 380 + blend 0.0000000000000000e+00 + interp 5.1995443591924717e-01:3.6878783970786821e-01:7.0815010344278395e-03:3.1502542626375796e-01:6.8703641520027781e-01:4.0866887178362188e-01:1.2075212035165361e+00:5.1994923637488799e-01:1.7866124467803537e+00:2.8954882776833796e-01:2.4232446944852088e+00:2.5110289891942816e-01:3.4523728560779556e+00 + CVs 20 + 4.5842844617556622e-01 2.2628597576261111e-01 7.1186439277072877e-01 + 8.4195416085542174e-01 3.7328940751329609e-01 1.1695915259944694e+00 + 1.2154373788183883e+00 5.0058959110736190e-01 1.5546596929241492e+00 + 1.6071911037859361e+00 6.3712676324413398e-01 1.9492746508847172e+00 + 2.0117295116505240e+00 7.7507968873899302e-01 2.3673525905772799e+00 + 2.4252557113585329e+00 9.0386387748239405e-01 2.8209006616410059e+00 + 2.8508663432489745e+00 1.0112622814354908e+00 3.3155155463254458e+00 + 3.2946344430350343e+00 1.0810152530804602e+00 3.8555938533762344e+00 + 3.7519612441263508e+00 1.0856916435114443e+00 4.4417924473347954e+00 + 4.2125864317024977e+00 9.9726556424360102e-01 5.0616814478629895e+00 + 4.6728580590255957e+00 7.8805543655805299e-01 5.6949464478784879e+00 + 5.1282530619175448e+00 4.2521415608334756e-01 6.3136028137890730e+00 + 5.5500408936585970e+00 -1.0368672475041807e-01 6.8595108239753193e+00 + 5.8949417835095215e+00 -7.3089971291477962e-01 7.2502177956986564e+00 + 6.1526495488042414e+00 -1.3362382856027195e+00 7.4600455040364153e+00 + 6.3422194020901630e+00 -1.8388988237178348e+00 7.5392146638454589e+00 + 6.4749823027429736e+00 -2.1888714641880278e+00 7.5459155920718874e+00 + 6.5675627299994748e+00 -2.4001072497072151e+00 7.5207007638449488e+00 + 6.8261676077031748e+00 -2.8156947727418475e+00 7.5511849665164874e+00 + id 14087 + loc 8.6258041858673096e-01 8.4611409902572632e-01 401 + blend 0.0000000000000000e+00 + interp 4.5843890591071607e-01:3.8815309437019241e-01:4.1314078043966695e-02:3.7231266284078074e-01:9.9932423322458996e-01:3.8966930071443867e-01:1.7290997016750456e+00:4.5413455417697590e-01:2.0991569044835221e+00:4.5843432152165697e-01:2.6034692457895998e+00:3.6852957105343975e-01:2.9950022485536780e+00:2.8124032794574433e-01:3.5935826366711057e+00 + CVs 20 + -7.7396098790519230e-04 2.9938442350667516e-01 -3.2706862979928297e-01 + 1.7210745577505016e-03 5.6937718422505290e-01 -6.5419095214587386e-01 + 1.2163545541343135e-02 8.0667501867174585e-01 -1.0050590611681545e+00 + 2.9561290469932500e-02 9.9936092441220026e-01 -1.3854771355636448e+00 + 4.6631536716583266e-02 1.1393005337903963e+00 -1.7949481316138987e+00 + 4.4611422019038005e-02 1.2305451913457572e+00 -2.2353484173927800e+00 + -6.2029460744290610e-03 1.2795879986730201e+00 -2.6986015604311313e+00 + -1.3160219971523990e-01 1.2863002518197906e+00 -3.1635143085743245e+00 + -3.4443048015630384e-01 1.2452445299284349e+00 -3.6076643568481974e+00 + -6.4432250054915963e-01 1.1512113052749950e+00 -4.0150015465690609e+00 + -1.0116098854360076e+00 1.0001235009102434e+00 -4.3727598790345121e+00 + -1.4075748958555994e+00 7.8665670736330584e-01 -4.6791353998320124e+00 + -1.8037669193134518e+00 5.0945604700042091e-01 -4.9481762396387339e+00 + -2.2070247933643667e+00 1.7247621927783108e-01 -5.1885458542263612e+00 + -2.6275937730073005e+00 -2.0751492196308774e-01 -5.4085968676285257e+00 + -3.0388213290850894e+00 -5.7799618001304320e-01 -5.6779891089928238e+00 + -3.3794288719606858e+00 -8.6115735010821270e-01 -6.0891781383874672e+00 + -3.6431461666191507e+00 -1.0514491276894722e+00 -6.5942626961671209e+00 + -4.0389093801493221e+00 -1.3332878223486584e+00 -7.0090133574404536e+00 + id 14088 + loc 7.6237022876739502e-01 1.5739347040653229e-01 400 + blend 0.0000000000000000e+00 + interp 4.2297702167971790e-01:3.3655635339071671e-01:2.6341379479570137e-01:3.8034305872253732e-01:9.0080548848256459e-01:4.2297279190950110e-01:1.1002022400254137e+00:3.4057422617234456e-01:2.0068885102768199e+00:3.4637897686055585e-01:2.9942647217206897e+00:4.1801250904262977e-01:3.7279378652717030e+00 + CVs 20 + 1.9265485111547467e-01 9.2973784307498544e-02 1.2064889194225803e-01 + 3.9421219966872756e-01 2.3274337079877230e-01 2.7437995290136152e-01 + 5.9509303501592759e-01 3.9582156648807693e-01 4.4047079972564029e-01 + 7.9013522549306858e-01 5.6763629899794932e-01 6.0959886775549810e-01 + 9.7919288094613288e-01 7.4492862462350562e-01 7.8309334334774761e-01 + 1.1619570632718712e+00 9.2528656359872297e-01 9.6248400753100860e-01 + 1.3379570943517181e+00 1.1064888111165254e+00 1.1529690983802656e+00 + 1.5067091952826792e+00 1.2822102333080547e+00 1.3662798050492451e+00 + 1.6678022920433848e+00 1.4378959072711353e+00 1.6141915916991154e+00 + 1.8247709361333104e+00 1.5512672154348144e+00 1.8970300094270485e+00 + 1.9864591955890021e+00 1.5974795317563895e+00 2.2023124328129393e+00 + 2.1577577847515004e+00 1.5609434525760439e+00 2.5095669437079069e+00 + 2.3354390467654218e+00 1.4473308708506707e+00 2.7993018224216444e+00 + 2.5167338234052079e+00 1.2730347184991293e+00 3.0613211656857562e+00 + 2.7014895878696135e+00 1.0499971555722878e+00 3.2911851939951045e+00 + 2.8845804261090304e+00 7.8033797939145244e-01 3.4888167426851107e+00 + 3.0515889549729089e+00 4.6084014676896778e-01 3.6572901146278847e+00 + 3.1886402165744445e+00 1.0330740642297043e-01 3.7981452130421420e+00 + 3.3233123381048495e+00 -1.5943381887617303e-01 3.9556490366994166e+00 + id 14089 + loc 2.5028696656227112e-01 9.3404030799865723e-01 393 + blend 0.0000000000000000e+00 + interp 5.3272655022881821e-01:3.5479817890501125e-01:3.1296599198004538e-02:3.7188844716045932e-01:9.4473962825862934e-01:2.9170121535041205e-01:1.9158135703260981e+00:5.3272122296331592e-01:2.4241619682695399e+00:4.8661850994350142e-01:2.9291632710547235e+00:3.6268652602966978e-01:3.0960694032332832e+00:4.6738986442951991e-01:3.7403327301146327e+00 + CVs 20 + -2.2197628710927511e-01 3.3886435865972608e-01 -1.9800085808100332e-01 + -4.4481708814577225e-01 7.0118757718494029e-01 -4.2056073708930952e-01 + -6.5447665949544209e-01 1.0897435924824117e+00 -6.7131718712213162e-01 + -8.7138195560052478e-01 1.5006870889059938e+00 -9.4046244100731002e-01 + -1.1326058918381099e+00 1.9197527338316926e+00 -1.2112548595871877e+00 + -1.4631068832450240e+00 2.3198395363600772e+00 -1.4712535711153862e+00 + -1.8677513357994080e+00 2.6642357989835861e+00 -1.7174801418092329e+00 + -2.3362217502204814e+00 2.9120730625579916e+00 -1.9494474607934629e+00 + -2.8314306069382638e+00 3.0328529333583969e+00 -2.1723630359334565e+00 + -3.2954782492039763e+00 3.0417070564151309e+00 -2.4170460223225758e+00 + -3.7073359199922735e+00 2.9645314440471662e+00 -2.7053272405832383e+00 + -4.0667117378859334e+00 2.7907385384494070e+00 -3.0176596387450956e+00 + -4.3483438182071863e+00 2.5180381204435953e+00 -3.3222817113289862e+00 + -4.5177369819706232e+00 2.1970286917330624e+00 -3.6060350693311243e+00 + -4.6187612271068099e+00 1.8660441235311582e+00 -3.8629916173901453e+00 + -4.7727487303777858e+00 1.4812220013824027e+00 -4.0829083955167658e+00 + -5.0268187928309240e+00 1.0180683818499854e+00 -4.2436124972724043e+00 + -5.2854594031489430e+00 5.7373411829267051e-01 -4.3495400227566279e+00 + -5.3832086955560285e+00 3.0894969812527528e-01 -4.4673620664624698e+00 + id 14090 + loc 3.5135617852210999e-01 7.7192658185958862e-01 382 + blend 0.0000000000000000e+00 + interp 3.0590124960655335e-01:2.8618813854450736e-01:9.1527190025389438e-01:3.0589819059405732e-01:1.9359499166982790e+00:2.3683515309629075e-01:2.8833570193321529e+00:2.6316065533137406e-01:3.9494417028010029e+00 + CVs 20 + 9.3642201736782038e-01 1.1154696273532216e-01 -5.3026511835764545e-01 + 1.5218945162884854e+00 4.7549157623902882e-02 -9.2560053632103045e-01 + 2.0015926315912047e+00 -9.4379911957919171e-02 -1.2996091438049753e+00 + 2.4758153344590483e+00 -2.7088186901691469e-01 -1.6995109479667097e+00 + 2.9346046539221051e+00 -4.7712523380495775e-01 -2.1279303073852693e+00 + 3.3696605418886150e+00 -7.0489595550756878e-01 -2.5833376076421359e+00 + 3.7733198996246986e+00 -9.4221520662855263e-01 -3.0563067957698795e+00 + 4.1406274374554819e+00 -1.1785950006512516e+00 -3.5276721081153557e+00 + 4.4735667237385082e+00 -1.4099630256522420e+00 -3.9726754507296964e+00 + 4.7790796677583671e+00 -1.6355931962807111e+00 -4.3709613114576200e+00 + 5.0682434275867987e+00 -1.8545157152680438e+00 -4.7186519045171291e+00 + 5.3577730658005152e+00 -2.0708915082876236e+00 -5.0306796945012486e+00 + 5.6608738343541880e+00 -2.2976128296829446e+00 -5.3238109185394817e+00 + 5.9780414337315975e+00 -2.5472013368666073e+00 -5.6045848805803606e+00 + 6.2978741581538618e+00 -2.8280076245866499e+00 -5.8711491335589203e+00 + 6.6015935947525630e+00 -3.1450606616853491e+00 -6.1191045474354020e+00 + 6.8684273583297433e+00 -3.4983999484199635e+00 -6.3441930171175756e+00 + 7.0845838413544815e+00 -3.8689121091136105e+00 -6.5339567344007463e+00 + 7.2246303546406736e+00 -4.1656925907197246e+00 -6.5979794474687949e+00 + id 14091 + loc 5.6448411941528320e-01 2.6045152544975281e-01 399 + blend 0.0000000000000000e+00 + interp 4.7668594118762131e-01:3.8214699532663549e-01:3.3372133391930914e-01:3.3813463134683996e-01:9.9990218146861154e-01:4.7668117432820944e-01:1.6539793098389810e+00:3.7841979664419145e-01:2.0002316521904620e+00:3.9934470875198319e-01:2.8939766762182275e+00:4.0332688622127127e-01:3.4510715912375334e+00:3.5391319602521748e-01:3.9868648892470757e+00 + CVs 20 + 1.3935211223080340e-01 2.6492814471280141e-01 2.1980408829278381e-01 + 2.4972170994555831e-01 5.2037655332205623e-01 4.5310418354843668e-01 + 3.2306560637969478e-01 7.5887972366786405e-01 7.1835651179181892e-01 + 3.6757169477300622e-01 9.8309932408589717e-01 1.0231396633685592e+00 + 4.0184779752658811e-01 1.1979463547024425e+00 1.3627587453571530e+00 + 4.4316021860878368e-01 1.4014911288760434e+00 1.7300889287803578e+00 + 5.0407999893770294e-01 1.5838445858681789e+00 2.1211657000108493e+00 + 5.9551013655734075e-01 1.7279799678269065e+00 2.5330893225273878e+00 + 7.2597299661705228e-01 1.8093512176467350e+00 2.9574839202915406e+00 + 8.9594849726878434e-01 1.7998089069692891e+00 3.3750615104836754e+00 + 1.0939226612004322e+00 1.6781968507497576e+00 3.7554465600042697e+00 + 1.3028508971173918e+00 1.4462499337908747e+00 4.0704284379115148e+00 + 1.5138767679569527e+00 1.1303431318881143e+00 4.3125933382705295e+00 + 1.7278291359941749e+00 7.6959409999297801e-01 4.4996478824118027e+00 + 1.9502924362516931e+00 4.0871186279203287e-01 4.6774115236145688e+00 + 2.1660409757713341e+00 9.6703730770257179e-02 4.9010384345801761e+00 + 2.2986010057010455e+00 -1.0673699153632055e-01 5.1960789799447662e+00 + 2.2815877453120157e+00 -1.7968244881841511e-01 5.5324276612507033e+00 + 2.4033326246580153e+00 -3.9310459368984652e-01 5.9428370505270287e+00 + id 14092 + loc 3.9950451254844666e-01 4.0893509984016418e-01 395 + blend 0.0000000000000000e+00 + interp 3.3922280501368124e-01:3.3921941278563111e-01:9.0390705051439912e-01:3.0295092923820016e-01:1.9131203493012268e+00:3.3167623277872954e-01:2.8587618512956587e+00:2.9139404229455707e-01:3.9564185958931670e+00 + CVs 20 + -3.2944420457135687e-01 1.6693235128075767e-01 -2.9169336250602546e-01 + -6.0841937039971516e-01 2.9586698678967105e-01 -5.3716386550378226e-01 + -8.7810333105583105e-01 4.1170835946390116e-01 -7.7220781280463702e-01 + -1.1545681907594514e+00 5.2349317483317004e-01 -1.0121856551195929e+00 + -1.4361408347517157e+00 6.2618324049550789e-01 -1.2590627897900502e+00 + -1.7217796062743131e+00 7.1325606788877627e-01 -1.5128862773799219e+00 + -2.0133814802082264e+00 7.7895801954293609e-01 -1.7722723587295910e+00 + -2.3130206448333941e+00 8.1613340301541348e-01 -2.0359593127161912e+00 + -2.6160910848845318e+00 8.1316755315991207e-01 -2.3005878827655106e+00 + -2.9113271361281030e+00 7.5669017003071981e-01 -2.5539047958651651e+00 + -3.1920982938985714e+00 6.3655328111757670e-01 -2.7778146789119917e+00 + -3.4606352621762113e+00 4.4596214429370784e-01 -2.9615198174704536e+00 + -3.7152569293570306e+00 1.8392311912543913e-01 -3.1021326168724781e+00 + -3.9437478191113220e+00 -1.3886400375743868e-01 -3.1964172374352886e+00 + -4.1344495174713574e+00 -5.0447634442705658e-01 -3.2406820676553432e+00 + -4.2798054335824700e+00 -8.9588312740373288e-01 -3.2333470401403024e+00 + -4.3732659743601374e+00 -1.2992681660217889e+00 -3.1772395841081589e+00 + -4.4214802600328280e+00 -1.7145473874458668e+00 -3.0862321284939864e+00 + -4.4915727591307952e+00 -2.2067397802535460e+00 -3.0097944031008397e+00 + id 14093 + loc 5.6483244895935059e-01 3.4414020180702209e-01 379 + blend 0.0000000000000000e+00 + interp 4.4244120499453599e-01:4.4243678058248603e-01:7.1816944718324427e-01:2.7728740655284151e-01:1.2648004575122389e+00:3.0986677528886236e-01:2.1945916731117370e+00:3.8095958366392496e-01:2.8993582609480288e+00:3.4735809922623540e-01:3.2877796377853326e+00:2.4544132591428167e-01:3.9576382723159731e+00 + CVs 20 + 4.0853194302305396e-01 3.1574525632959982e-01 -9.3991872239915703e-02 + 7.5035563764540847e-01 5.8590027095869424e-01 -2.4579729404265491e-01 + 1.0533734177528380e+00 7.9791781642279624e-01 -4.3685458515133835e-01 + 1.3333959748016697e+00 9.8385038725449436e-01 -6.5039953765559877e-01 + 1.5949603532964418e+00 1.1797271746459019e+00 -8.6254276909221128e-01 + 1.8539840594543990e+00 1.4041300939312242e+00 -1.0525213470481605e+00 + 2.1298908371656253e+00 1.6573545192340458e+00 -1.2037772547614889e+00 + 2.4296884856451633e+00 1.9280516743266873e+00 -1.3033119035709499e+00 + 2.7519320714841333e+00 2.2074436194125546e+00 -1.3457080647956670e+00 + 3.0970617026095533e+00 2.4904710749784096e+00 -1.3312264785285066e+00 + 3.4665487128576697e+00 2.7674524600507651e+00 -1.2678383913508871e+00 + 3.8619703334926863e+00 3.0357455388092145e+00 -1.1706476801745143e+00 + 4.2981434972165182e+00 3.2942775769324428e+00 -1.0445879095521735e+00 + 4.8005054616286111e+00 3.5069991942772671e+00 -8.7556296526160160e-01 + 5.3416552134580275e+00 3.6233600756941522e+00 -6.2944358399757094e-01 + 5.7685388530441202e+00 3.6744304175514646e+00 -2.6204783538582921e-01 + 5.9468995397684115e+00 3.7752463426430101e+00 3.6387566299753493e-01 + 5.9775637994683866e+00 3.6970595078198327e+00 1.1200423230562930e+00 + 6.1426532242018004e+00 3.5307795719919994e+00 9.2785746151821025e-01 + id 14094 + loc 7.9194772243499756e-01 1.8350879848003387e-01 378 + blend 0.0000000000000000e+00 + interp 4.5253113922745142e-01:4.3996516196582891e-01:3.7091698255098082e-01:3.8738487778407804e-01:1.0554756302208725e+00:4.2448789394006603e-01:1.8447470212909707e+00:4.5252661391605914e-01:2.2039860677015923e+00:3.0686808975406382e-01:3.1366675125048249e+00:3.6978953962974254e-01:3.9333522897346702e+00 + CVs 20 + -3.3795821291141426e-01 2.6268129027818599e-01 2.2408822749765356e-02 + -6.6076495126455570e-01 4.8805509755572973e-01 4.9044718109972379e-02 + -9.8435422828348595e-01 6.8378214664134684e-01 7.6826237678957826e-02 + -1.3155896961849529e+00 8.6594320398310176e-01 9.7618120108445838e-02 + -1.6359583518158607e+00 1.0438938184431243e+00 9.7103669158010220e-02 + -1.9250269194752319e+00 1.2165329371997275e+00 6.4535862621139417e-02 + -2.1767299564982272e+00 1.3765557148049139e+00 -5.1497346064289240e-03 + -2.3895258949213911e+00 1.5192434577192511e+00 -1.1066564234611453e-01 + -2.5568718021267003e+00 1.6488351937102921e+00 -2.4792628965538183e-01 + -2.6748838147527518e+00 1.7791364156432639e+00 -4.1571997704000979e-01 + -2.7539821179399029e+00 1.9301331215972517e+00 -6.1337898387572243e-01 + -2.8243493872261167e+00 2.1127359870509697e+00 -8.4377574638320574e-01 + -2.9199136939697605e+00 2.2711953696253051e+00 -1.1155714409325048e+00 + -3.0256735582016745e+00 2.2682902536557434e+00 -1.3991766630001186e+00 + -3.1016924508049875e+00 2.0305413384523914e+00 -1.6423710832556480e+00 + -3.1666536433132775e+00 1.5902460116944872e+00 -1.8741864012521390e+00 + -3.2902797932005932e+00 1.0229333820213697e+00 -2.1663385097402017e+00 + -3.5352787998935584e+00 4.7248322682134392e-01 -2.4650752827281091e+00 + -3.8228607358941051e+00 2.0639446402998862e-01 -2.5542647272451835e+00 + id 14095 + loc 7.0395553112030029e-01 3.9811921119689941e-01 373 + blend 0.0000000000000000e+00 + interp 3.8803336515377218e-01:2.5429100571631663e-01:9.4324992767259919e-02:3.4137537635283077e-01:9.0814648049870261e-01:2.3280061863522156e-01:1.4706322366744460e+00:2.4985793363603148e-01:2.0220417898983092e+00:2.2896298645577692e-01:2.8867726392100659e+00:3.8802948482012067e-01:3.1526553374407991e+00 + CVs 20 + 3.3136946760825359e-01 4.2966190969184509e-01 1.4566892266689321e-02 + 6.9688860763567728e-01 8.1999010550929075e-01 4.3579888499953118e-02 + 1.0711348808916916e+00 1.1346598741383247e+00 9.7348449823593697e-02 + 1.3961352411282637e+00 1.4192634312590788e+00 1.5179622990722896e-01 + 1.6226951378273193e+00 1.6272475312886421e+00 1.0060681521792925e-01 + 1.8434699569371567e+00 1.7670319180739389e+00 2.0833173927999105e-02 + 2.1308487202443898e+00 1.9804937207030500e+00 -2.4473122548639425e-03 + 2.4618373889990268e+00 2.2992362290115906e+00 5.4769564080966338e-02 + 2.7818832823550075e+00 2.6931406553953172e+00 2.0581459503461275e-01 + 3.0564347267100338e+00 3.1075149882888740e+00 4.4714062739348193e-01 + 3.2823824974193703e+00 3.4892937554299581e+00 7.7377568661949025e-01 + 3.4649412341530956e+00 3.7958634285639179e+00 1.2003546606781801e+00 + 3.5956026991234804e+00 3.9669456743881879e+00 1.7314546216520805e+00 + 3.6558950247925646e+00 3.9382090706927828e+00 2.3179714718057540e+00 + 3.6465049522902726e+00 3.6868488842422451e+00 2.8437648913430662e+00 + 3.6743933656903227e+00 3.3751794579127141e+00 3.0938861618192579e+00 + 3.7993558556499969e+00 3.3768602882718408e+00 3.0428610562301808e+00 + 3.8499087020306884e+00 3.5482777355614048e+00 3.0075610152114534e+00 + 4.1040744731470955e+00 3.2944000931826172e+00 3.0694499567186369e+00 + id 14096 + loc 7.7921235561370850e-01 6.1294045299291611e-02 396 + blend 0.0000000000000000e+00 + interp 5.0167002294399432e-01:3.2544629811798098e-01:5.8756996173391440e-01:4.5614634663302639e-01:1.0024700535582582e+00:1.6980747616879596e-01:1.9920769750964764e+00:5.0166500624376487e-01:2.5148158221189933e+00:3.6073415096867317e-01:3.1937198863952698e+00:3.7474730041287935e-01:3.9559737056134807e+00 + CVs 20 + -6.4081449676515323e-01 2.5284333082232874e-01 4.3297322056413268e-01 + -1.1395876593682228e+00 3.9666634067423701e-01 8.2695317475004027e-01 + -1.6041162978239190e+00 4.9770275662811669e-01 1.2315521613070672e+00 + -2.0798177977648686e+00 5.7062165204384629e-01 1.6745673828064525e+00 + -2.5509906515644407e+00 6.0128973628520133e-01 2.1479516644977057e+00 + -2.9968606850119679e+00 5.7907400174471801e-01 2.6411499203469058e+00 + -3.3997275734438923e+00 4.9601629059268904e-01 3.1396049190292503e+00 + -3.7502859448735908e+00 3.4408748618345419e-01 3.6227968831362309e+00 + -4.0386817241073070e+00 1.2075779280214682e-01 4.0670846575526136e+00 + -4.2476183179117744e+00 -1.6100168538829163e-01 4.4498078332119420e+00 + -4.3739234013987085e+00 -4.7341445373125035e-01 4.7536447214562738e+00 + -4.4482942175604574e+00 -7.9334077805577463e-01 4.9748306139767893e+00 + -4.5106546514318442e+00 -1.1145272526276160e+00 5.1223439140096465e+00 + -4.5824251921143064e+00 -1.4352120604774177e+00 5.2065898727527093e+00 + -4.6708602083111952e+00 -1.7526596394471214e+00 5.2366800901125057e+00 + -4.7767960977414585e+00 -2.0659171689639129e+00 5.2209089560598230e+00 + -4.8957535363699520e+00 -2.3668513408795264e+00 5.1643089370026960e+00 + -5.0226957378634811e+00 -2.6429404795462008e+00 5.0728565309157112e+00 + -5.1452831693720027e+00 -2.9434045281076937e+00 4.9653701485045074e+00 + id 14097 + loc 7.1001881361007690e-01 9.9301481246948242e-01 412 + blend 0.0000000000000000e+00 + interp 3.7694687274091854e-01:3.7694310327219116e-01:4.5226480847984085e-02:3.5023599771970382e-01:8.9809088220710254e-01:3.2927888943888839e-01:1.5647369130100084e+00:1.2680398054819381e-01:2.4337570891111691e+00:3.3528096092451809e-01:3.6160346147425679e+00 + CVs 20 + 8.8472486029786979e-01 1.7991977810312609e-01 -1.6433568971277585e-01 + 1.4508695852167761e+00 2.0103201861079062e-01 -3.2770285789297782e-01 + 1.9412897750824847e+00 1.4885908526409752e-01 -4.9801250966363908e-01 + 2.4555465844174136e+00 5.2858054956934020e-02 -6.7887215414136870e-01 + 2.9779833440440999e+00 -9.2486525751306892e-02 -8.6359367263067222e-01 + 3.4938894450566385e+00 -2.8551786042138450e-01 -1.0437984427929350e+00 + 3.9893679591607976e+00 -5.1968148914698675e-01 -1.2171871373628098e+00 + 4.4533577748960740e+00 -7.8497348935954725e-01 -1.3837345758388697e+00 + 4.8803606492464366e+00 -1.0698238720834907e+00 -1.5429712474236448e+00 + 5.2673734605928502e+00 -1.3621009425377277e+00 -1.6924146405245870e+00 + 5.5935759150157311e+00 -1.6460174342478253e+00 -1.8335109356945238e+00 + 5.8191854105874716e+00 -1.8983747146075580e+00 -1.9787460665054346e+00 + 5.9509834351299791e+00 -2.1076081275445402e+00 -2.1349037918033194e+00 + 6.0547840520651581e+00 -2.2998979829265105e+00 -2.2959201772385605e+00 + 6.1696573195676807e+00 -2.5010159464646096e+00 -2.4556200533711818e+00 + 6.2939579088426933e+00 -2.7077400414394490e+00 -2.6064568174487559e+00 + 6.4234571839578578e+00 -2.9171516220218314e+00 -2.7456254644390077e+00 + 6.5654335051458670e+00 -3.1495372351918332e+00 -2.8803391954594542e+00 + 6.7822649046889065e+00 -3.5090921109425688e+00 -3.0381847520436569e+00 + id 14098 + loc 8.0149954557418823e-01 7.4188441038131714e-02 1069 + blend 0.0000000000000000e+00 + interp 5.1277793465871413e-01:3.1254363561939824e-01:6.3826474934105981e-02:4.3476999969653946e-01:9.3762320429960855e-01:4.4627299514879337e-01:1.1644842389549401e+00:5.0344138489737167e-01:1.9558426912899236e+00:5.1277280687936755e-01:2.1097926209223927e+00:3.7492530709427668e-01:2.6053827577094713e+00:2.9112587895643033e-01:3.0833886111794406e+00 + CVs 20 + 2.3868151008366034e-04 2.6141628880393880e-01 2.7604119568464758e-01 + -6.4005013419760559e-02 4.8938643787057512e-01 5.3755361862243800e-01 + -1.8416547111569981e-01 6.9972262882718694e-01 7.8400160009799813e-01 + -3.5794136243091801e-01 9.0227853874963415e-01 1.0025378301171464e+00 + -5.8030109982880484e-01 1.1208562271313962e+00 1.1851931736213825e+00 + -8.0592512616533130e-01 1.4097759397321026e+00 1.3433315111982291e+00 + -9.4509771892465610e-01 1.7905987377123422e+00 1.4952235369390976e+00 + -9.4949134545118308e-01 2.2064827921428773e+00 1.6642100452329682e+00 + -8.3201324338927440e-01 2.5852167760136542e+00 1.8833670414507391e+00 + -6.2551413286262503e-01 2.8428661458691145e+00 2.1804138961372872e+00 + -3.9349218744696435e-01 2.9070636779268977e+00 2.5355228022129821e+00 + -1.9470598552662932e-01 2.7973128243092882e+00 2.8889534603446503e+00 + -4.9112102254946111e-02 2.5712836821381870e+00 3.2014753667041624e+00 + 2.6955081391061730e-02 2.2891870945571315e+00 3.4483077760336878e+00 + 3.6943636813842273e-02 2.0106565499841889e+00 3.6281612675873460e+00 + 1.7379885949138085e-03 1.7483968955557858e+00 3.7484170810268957e+00 + -6.5796922089494503e-02 1.4876119110812358e+00 3.8094448171247928e+00 + -1.4875647934024938e-01 1.2370212736217532e+00 3.8256803732303686e+00 + -1.7307348004737699e-01 1.0667697305544446e+00 3.8625171416474569e+00 + id 14099 + loc 7.7286824584007263e-02 7.7010500431060791e-01 380 + blend 0.0000000000000000e+00 + interp 4.9458114057195351e-01:2.8390425551407278e-01:8.5443026025450841e-02:4.7319346208272728e-01:9.1205249278097134e-01:3.5739299573391015e-01:1.2295230750773194e+00:4.9457619476054782e-01:1.8783233524215297e+00:2.8336911115981622e-01:2.5614718190229122e+00:2.9952176402697828e-01:3.3289022514728552e+00 + CVs 20 + -3.7877580057941507e-01 2.5984103121765512e-01 -3.1884293602148162e-01 + -7.2529810684788898e-01 4.3934276064988420e-01 -5.4104263742096792e-01 + -1.0672232145519629e+00 5.7864645577872376e-01 -7.3257611230495878e-01 + -1.4145924293939014e+00 7.0416253049988986e-01 -9.2809218856944609e-01 + -1.7562820283217868e+00 8.2714623890912309e-01 -1.1352360167772160e+00 + -2.0783908439930792e+00 9.5383669371218094e-01 -1.3604367578865058e+00 + -2.3759491088407039e+00 1.0841601134478014e+00 -1.6114122639534214e+00 + -2.6471908270943656e+00 1.2123323388318399e+00 -1.8971744779878887e+00 + -2.8841029206420181e+00 1.3275953428532841e+00 -2.2244254259247391e+00 + -3.0785050653506234e+00 1.4172773880511607e+00 -2.5924092589029120e+00 + -3.2319974237928575e+00 1.4770425528649953e+00 -2.9963369060913227e+00 + -3.3547814444776023e+00 1.5060969932666857e+00 -3.4357770386169206e+00 + -3.4498689361209536e+00 1.4781483039153029e+00 -3.9070445346903035e+00 + -3.4923006621635331e+00 1.3400113003047265e+00 -4.3777420032430232e+00 + -3.4506534072734611e+00 1.0742204624334177e+00 -4.7952513080773560e+00 + -3.3254525512888842e+00 7.1925732147604959e-01 -5.1611578424370821e+00 + -3.1454844098672599e+00 2.9726507046247841e-01 -5.5386153739699964e+00 + -2.9891704523250020e+00 -1.8822550065435628e-01 -5.9795762897326705e+00 + -2.9819124829333306e+00 -4.6159439954834625e-01 -6.3131040163350978e+00 + id 14100 + loc 6.3108369708061218e-02 8.8409222662448883e-02 1079 + blend 0.0000000000000000e+00 + interp 4.4186342441849835e-01:2.3229699497915168e-01:3.9491706423355122e-01:2.6354134078371710e-01:1.4356798912503494e+00:4.4185900578425419e-01:1.9780552058994012e+00:2.9648722945620509e-01:2.6780568882382596e+00:4.1053708997677524e-01:3.0964132758497054e+00:3.1685728068649122e-01:3.9008658754247425e+00 + CVs 20 + 4.3862294655554190e-01 4.7144173399715583e-01 -5.1548139353983696e-02 + 6.9777617927671165e-01 8.4299481172366497e-01 -1.4725460758699832e-01 + 8.9206881730903020e-01 1.1576414460463642e+00 -2.6201899502972475e-01 + 1.0636970947383348e+00 1.4300264780595207e+00 -3.8562927519572726e-01 + 1.2081659562999387e+00 1.6501878385985318e+00 -5.1220708889887212e-01 + 1.3261338185904308e+00 1.8092453582639796e+00 -6.2933159557030882e-01 + 1.4309310357652274e+00 1.9048755754164861e+00 -7.1252992444614660e-01 + 1.5501701566208499e+00 1.9675637241589072e+00 -7.3390753708294332e-01 + 1.6826725753894807e+00 2.0592632834516236e+00 -7.2640297645346008e-01 + 1.7829644913395020e+00 2.1624424315024484e+00 -7.7072352888242623e-01 + 1.8440619326643406e+00 2.2220617803374889e+00 -8.8155763536286824e-01 + 1.8827676288761146e+00 2.2272153503690801e+00 -1.0449387223799207e+00 + 1.9073354852776787e+00 2.1763819684589949e+00 -1.2606908308056060e+00 + 1.9126101762981973e+00 2.0546536726864306e+00 -1.5380711421472566e+00 + 1.8793407535344522e+00 1.8218028553341854e+00 -1.8737341545803547e+00 + 1.8026261953271026e+00 1.3880341148179918e+00 -2.1729085511722515e+00 + 1.7180934092339526e+00 6.9097951689405612e-01 -2.2220497640523971e+00 + 1.6395360271858381e+00 -9.1632881455662396e-02 -1.8332105700918306e+00 + 1.6490320963096428e+00 -2.9893600480231747e-01 -1.5750710210728880e+00 + id 14101 + loc 6.9912582635879517e-01 6.5524572134017944e-01 402 + blend 0.0000000000000000e+00 + interp 4.2468026658063923e-01:3.2007291213816241e-01:5.2207438554790708e-02:4.2467601977797342e-01:8.8949690386882641e-01:2.9328960122107112e-01:1.7075378859068966e+00:3.0330285879788926e-01:2.2257115363538502e+00:3.5390758935647054e-01:2.9353919171901048e+00:2.3986888121772168e-01:3.5810290869645955e+00 + CVs 20 + -2.9951828185394921e-02 2.5816547679447144e-01 -1.3370377966377003e-01 + -8.2296325288785582e-02 5.2051450331351712e-01 -2.7114093424471719e-01 + -1.2237699472581931e-01 7.9247047047509545e-01 -4.1345327911281737e-01 + -1.3386371019478893e-01 1.0715006591824467e+00 -5.5586735142483890e-01 + -1.3462004269303279e-01 1.3680804259445707e+00 -6.9832670935618479e-01 + -1.7702815441294667e-01 1.7000531619188697e+00 -8.4460001740853541e-01 + -3.1610217703245025e-01 2.0249889582566292e+00 -9.9447711493628410e-01 + -2.2526832227014459e-01 2.2843140076984039e+00 -1.2962330962536783e+00 + -3.7225248393288368e-01 2.6224880867808129e+00 -1.5733894091317455e+00 + -8.3266257183480230e-01 2.8915178880439210e+00 -1.8181630044937287e+00 + -1.3336366688731336e+00 2.9708209253494258e+00 -2.2316298516037869e+00 + -1.6464480011806200e+00 2.8417639261156298e+00 -2.6935347917423282e+00 + -1.7419210598829147e+00 2.5952103174178980e+00 -3.1068969450877693e+00 + -1.7401365787688192e+00 2.2893569917089764e+00 -3.4710883853571000e+00 + -1.7788426994536719e+00 1.9613548511242502e+00 -3.8158084953296019e+00 + -1.9579683578741642e+00 1.6656052274202131e+00 -4.1634646353777613e+00 + -2.2848255910780022e+00 1.4358793682034876e+00 -4.5327041491805016e+00 + -2.6955038658703594e+00 1.2494906464656754e+00 -4.9572858286563912e+00 + -3.1826993580378615e+00 1.0548361318497825e+00 -5.5000743620631720e+00 + id 14102 + loc 5.4164808988571167e-01 5.4230356216430664e-01 400 + blend 0.0000000000000000e+00 + interp 3.8769824309525797e-01:3.7894471928052181e-01:6.5410869256694837e-01:3.0993192168107325e-01:1.4309616922529627e+00:3.8769436611282704e-01:1.9904812109854961e+00:3.6168578921872985e-01:2.2999604727453078e+00:2.8774553465774771e-01:3.0353575812980997e+00:3.1028601985279086e-01:3.9457564355757864e+00 + CVs 20 + -2.0756307275765740e-01 1.3188504549114347e-01 -2.3714427603653394e-02 + -4.1825011744955271e-01 2.9624574501691736e-01 -8.6878430580180493e-02 + -6.1960742554054427e-01 4.7339395419023522e-01 -1.8986903431513114e-01 + -8.0747530350438557e-01 6.4684143421361129e-01 -3.2942880567869220e-01 + -9.9009929526560514e-01 8.1620085877359594e-01 -5.0098682852711374e-01 + -1.1608476514992547e+00 9.9087840540546623e-01 -6.9979908021912851e-01 + -1.2935309439800484e+00 1.1758888868364936e+00 -9.2028310974776839e-01 + -1.3772892227132492e+00 1.3743391146042363e+00 -1.1600400669658866e+00 + -1.4185315686705002e+00 1.5843461562696877e+00 -1.4245720591639843e+00 + -1.4240981847857650e+00 1.7948662553475110e+00 -1.7214587060061939e+00 + -1.3956973560080836e+00 1.9929096555204708e+00 -2.0555692191655686e+00 + -1.3318934436693004e+00 2.1657623116269020e+00 -2.4293902449190083e+00 + -1.2289382196296541e+00 2.2932678712952246e+00 -2.8398181139334882e+00 + -1.0817579663727699e+00 2.3514475534424069e+00 -3.2698920792615462e+00 + -8.8441063713715851e-01 2.3259436150914801e+00 -3.6910673543898804e+00 + -6.3008623547865039e-01 2.2126024228722807e+00 -4.0717076785718920e+00 + -3.2126081209044766e-01 2.0144791955901984e+00 -4.3703623819208177e+00 + 1.9366630995436840e-02 1.7555087874172255e+00 -4.5325372163438047e+00 + 3.6737060239946540e-01 1.4655259910914995e+00 -4.5045381203574157e+00 + id 14103 + loc 1.3771910965442657e-01 4.4712874293327332e-01 403 + blend 0.0000000000000000e+00 + interp 4.0032738013929525e-01:2.6458779445184188e-01:3.6507837189983072e-02:3.6299078295576798e-01:7.7839766442468217e-01:2.6422003581957315e-01:1.3109222639406282e+00:4.0032337686549385e-01:2.0511873085158210e+00:2.6056403190379596e-01:2.9583386655373816e+00:3.1760951552809469e-01:3.5262331476195756e+00 + CVs 20 + -1.4802865440677382e-01 3.1554745681784752e-01 -4.0364459601184635e-02 + -3.0042907096524185e-01 6.0618618056389839e-01 -4.6726150904616903e-02 + -4.6718786433852100e-01 8.8146577021275441e-01 -3.0938521554663589e-02 + -6.5498472154800425e-01 1.1448910977724558e+00 1.0870497229821807e-02 + -8.6348513130855742e-01 1.3911615180586341e+00 9.0358450072949958e-02 + -1.0873943480356656e+00 1.6113908731750526e+00 2.2067610196737364e-01 + -1.3153233810029630e+00 1.7913652986850734e+00 4.1269823252748450e-01 + -1.5299029835463689e+00 1.9120798690283412e+00 6.6950800523512743e-01 + -1.7095536518580174e+00 1.9541205436347144e+00 9.8090376338540974e-01 + -1.8352815513592233e+00 1.9063695845348845e+00 1.3220508893295930e+00 + -1.8994463910921742e+00 1.7707056719798790e+00 1.6588353392912376e+00 + -1.9133778505653447e+00 1.5624865258707612e+00 1.9563813964808012e+00 + -1.9005489491711822e+00 1.3034069098307268e+00 2.1970978709441518e+00 + -1.8758626040645550e+00 1.0088854018517652e+00 2.3802763189296319e+00 + -1.8461337271608307e+00 6.9112275055003547e-01 2.5117951320207315e+00 + -1.8235995156021705e+00 3.6277267145684489e-01 2.6254793028421766e+00 + -1.8297357398523615e+00 3.0809284654167879e-02 2.8028343470684063e+00 + -1.8864238783826899e+00 -2.8343499020009078e-01 3.0961053435096222e+00 + -1.9124373451134660e+00 -6.1150964662964413e-01 3.3151743865149368e+00 + id 14104 + loc 6.1960911750793457e-01 8.6598026752471924e-01 401 + blend 0.0000000000000000e+00 + interp 5.0157355342175680e-01:3.8944666003055456e-01:1.8754450917700261e-01:5.0156853768622256e-01:8.6774154610468768e-01:3.6961207500518312e-01:1.2338872854492311e+00:4.5479056160066200e-01:1.8883203698768685e+00:3.9820298627113160e-01:2.1968087686793463e+00:3.7193621929752302e-01:3.0247471514501321e+00:4.3477202665259257e-01:3.7785421412838502e+00 + CVs 20 + 2.0515227487921742e-02 3.3529134174851455e-01 -3.5210709650713246e-01 + 3.2285190755038773e-02 6.8269334292113371e-01 -7.0549219801072438e-01 + 3.9397827406172925e-02 1.0263950372623634e+00 -1.0742239367909734e+00 + 4.0452826410986520e-02 1.3387194273487404e+00 -1.4743176888516172e+00 + 1.4570337832554903e-02 1.5989224709556042e+00 -1.9136176821673818e+00 + -8.2244203580109310e-02 1.7993121987223488e+00 -2.3770371155863899e+00 + -2.8474097594365300e-01 1.9280472246462970e+00 -2.8220240376540899e+00 + -5.8682300443550595e-01 1.9677545371097289e+00 -3.1972548505496881e+00 + -9.4543526814542800e-01 1.9138618603020927e+00 -3.4686707566546549e+00 + -1.3088701911661693e+00 1.7817960022230457e+00 -3.6369136263437434e+00 + -1.6396043890038476e+00 1.5901595514149931e+00 -3.7276302445226643e+00 + -1.9167365240296106e+00 1.3521669041906312e+00 -3.7723727086816710e+00 + -2.1318759020713158e+00 1.0829832913357706e+00 -3.7883018819246459e+00 + -2.2889576779165246e+00 8.0371799154838541e-01 -3.7737133059727328e+00 + -2.4124330173499797e+00 5.2472359694567527e-01 -3.7353452662883417e+00 + -2.5613859412952729e+00 2.1661072341790621e-01 -3.6982064990397419e+00 + -2.8025204613225827e+00 -1.7006182695539762e-01 -3.6969343689234360e+00 + -3.1079709385858014e+00 -5.9897417361836003e-01 -3.7741101466183595e+00 + -3.2547373247727558e+00 -8.5953599340230735e-01 -3.8356299637214701e+00 + id 14105 + loc 8.8026523590087891e-01 6.0536986589431763e-01 379 + blend 0.0000000000000000e+00 + interp 4.8324510336128107e-01:4.2415502891069357e-01:4.8566317780711965e-02:3.4188411715709638e-01:9.7115668581861170e-01:4.7706261242790043e-01:1.4683664064590336e+00:4.8324027091024746e-01:2.0267996371248906e+00:4.5344176322137647e-01:3.0147590031716915e+00:3.8252792494673060e-01:3.5926751651420612e+00 + CVs 20 + -3.4767998495940727e-01 2.3338611293681491e-01 2.1441929959616690e-01 + -6.6633412851953933e-01 4.2867911368376133e-01 4.2686145705829021e-01 + -9.8391665194730771e-01 5.9374367752606871e-01 6.6783189581581859e-01 + -1.3222286981429470e+00 7.5295050857681500e-01 9.4984419282462640e-01 + -1.6775903736420612e+00 9.2447528354114472e-01 1.2487413594331005e+00 + -2.0463628104042200e+00 1.1072358351886185e+00 1.5327975879979827e+00 + -2.4327561550937453e+00 1.2896067897588679e+00 1.7797839892085014e+00 + -2.8372121044477456e+00 1.4624632848800054e+00 1.9774415692640355e+00 + -3.2447519283441864e+00 1.6207319442758925e+00 2.1203425595729222e+00 + -3.6286670581806115e+00 1.7640092877054563e+00 2.2120868134087184e+00 + -3.9717647228255801e+00 1.9003405564265463e+00 2.2646271538359497e+00 + -4.2877024154913030e+00 2.0404452156808697e+00 2.2884354013156396e+00 + -4.6155898041635091e+00 2.1715912079856716e+00 2.2857442618209456e+00 + -4.9695490637636084e+00 2.2423139310822879e+00 2.2607703431620894e+00 + -5.3030116488485763e+00 2.2190529002011909e+00 2.2306204123225046e+00 + -5.5579299275514842e+00 2.1391315371925312e+00 2.2028293346476615e+00 + -5.6939907015763493e+00 2.0678591028796030e+00 2.1495236810800988e+00 + -5.7391050339293503e+00 2.0164311712688869e+00 2.0557430613978367e+00 + -6.0047246225088315e+00 1.9558470152943532e+00 2.0898742263539281e+00 + id 14106 + loc 1.2941126525402069e-01 2.5531676411628723e-01 395 + blend 0.0000000000000000e+00 + interp 4.8172507119586222e-01:3.1898472347096374e-01:1.3395172200137528e-02:4.8172025394515028e-01:5.4309586312616998e-01:3.1069309719781990e-01:1.1902969203568008e+00:3.2009372854024915e-01:2.0000114196696246e+00:3.2510841525471973e-01:2.7374893223513022e+00:2.7614052683013818e-01:3.1893627783907141e+00 + CVs 20 + -2.7791781631034046e-01 1.2185092034639315e-01 -1.3248567839237582e-01 + -5.3693328940562102e-01 2.3809813708784280e-01 -2.5073411364892195e-01 + -7.9082115554453192e-01 3.5731087302720249e-01 -3.7184852302970683e-01 + -1.0464161222237105e+00 4.8378756360236219e-01 -5.0637591390884173e-01 + -1.2998397734931930e+00 6.1282271259254117e-01 -6.5811218676233674e-01 + -1.5481697636643064e+00 7.3840491594953450e-01 -8.2893172935344972e-01 + -1.7943480826174767e+00 8.5868344748530523e-01 -1.0213710465294075e+00 + -2.0442035489202404e+00 9.7249050400690162e-01 -1.2405455034063153e+00 + -2.2931112079972440e+00 1.0698261407859420e+00 -1.4882969798444861e+00 + -2.5264062580413817e+00 1.1339555456745580e+00 -1.7546496586533706e+00 + -2.7414573038485130e+00 1.1478791247763787e+00 -2.0238369041648694e+00 + -2.9529342130137701e+00 1.0914785062568713e+00 -2.2851118465309290e+00 + -3.1676414121341558e+00 9.4944374091337735e-01 -2.5289733608143310e+00 + -3.3738975361904249e+00 7.2584888858923358e-01 -2.7427203816269516e+00 + -3.5608312093013255e+00 4.3775931674388868e-01 -2.9147893818374797e+00 + -3.7285600484399413e+00 1.0015567479819310e-01 -3.0389088345768323e+00 + -3.8764839010018139e+00 -2.7805497764551079e-01 -3.1121998480825219e+00 + -3.9988500050321627e+00 -6.8911618195924262e-01 -3.1360501557441558e+00 + -4.1298353719639813e+00 -1.1584101848841395e+00 -3.1500071494426631e+00 + id 14107 + loc 4.7134011983871460e-01 6.9574403762817383e-01 378 + blend 0.0000000000000000e+00 + interp 3.6292067592613836e-01:3.5860667418838216e-01:5.6087326758629286e-01:3.6291704671937913e-01:1.0016825341959339e+00:3.2846589397424769e-01:1.6163255771870766e+00:3.3634481570620278e-01:2.0035048405275693e+00:3.0419661917800511e-01:2.5338052751319076e+00:2.6159454564423379e-01:3.0351221542361668e+00:3.2094894838202909e-01:3.7854942490591554e+00 + CVs 20 + 6.1635329920139093e-01 3.1612062012576414e-01 8.2183700929555459e-02 + 1.1601236004507243e+00 5.1982358352467561e-01 1.0069848993778763e-01 + 1.6897253524503377e+00 6.6242454730712264e-01 9.0802485642249631e-02 + 2.2388050966568365e+00 7.8705058363816838e-01 8.5255580257614261e-02 + 2.7997248677085032e+00 9.0453124413116093e-01 1.1079712790510177e-01 + 3.3547799905039857e+00 1.0020060840732492e+00 1.8741084285618681e-01 + 3.8905801827681668e+00 1.0594528314534286e+00 3.2562846695508274e-01 + 4.3913891017720257e+00 1.0612177962824354e+00 5.2527877383941568e-01 + 4.8292848257034784e+00 9.9854659868329776e-01 7.6724737609371252e-01 + 5.1754947627855525e+00 8.7565020693978157e-01 1.0138910351523034e+00 + 5.4155590166152106e+00 7.1239426318091859e-01 1.2269351750115278e+00 + 5.5529818201108316e+00 5.3779882656922151e-01 1.3854041549398273e+00 + 5.6124272870525473e+00 3.7438359419583911e-01 1.4968268758500078e+00 + 5.6404350398001419e+00 1.9598808537541190e-01 1.5974897953613818e+00 + 5.6743498869454942e+00 -7.1158401441667074e-02 1.7167293966946455e+00 + 5.7264554050907313e+00 -4.4806787226815414e-01 1.8595665513347728e+00 + 5.8018922650960487e+00 -8.8026314801715655e-01 2.0263648275076798e+00 + 5.9122794696289933e+00 -1.3069370297925187e+00 2.2060764226188043e+00 + 6.0631683731766062e+00 -1.6464126066840756e+00 2.3478229603717660e+00 + id 14108 + loc 8.7926810979843140e-01 9.6317869424819946e-01 393 + blend 0.0000000000000000e+00 + interp 5.0788889196934739e-01:3.5825352804105470e-01:6.4452538018600070e-04:4.6127706232642318e-01:6.4176070190029799e-01:3.4609673527386919e-01:1.0864663593905073e+00:2.4274826070519651e-01:2.0017958224226318e+00:5.0788381308042774e-01:2.7497866052429258e+00:3.6252230706702099e-01:3.1836403398995698e+00 + CVs 20 + -2.3649020775331886e-01 3.0943657825232146e-01 -1.7209230829155309e-01 + -4.6665597418551819e-01 6.2767075289829122e-01 -3.5677049090982171e-01 + -7.0976827439087042e-01 9.4532468327416308e-01 -5.2567896310509310e-01 + -9.7703492952740678e-01 1.2463951985907653e+00 -6.7460054719496243e-01 + -1.2771957761058434e+00 1.5133077399351897e+00 -8.1340148593157058e-01 + -1.6105268899622602e+00 1.7239639962256383e+00 -9.5524757326030241e-01 + -1.9699421787340068e+00 1.8578471987342764e+00 -1.1102246375439524e+00 + -2.3409742284390731e+00 1.9011642107398194e+00 -1.2811319793649365e+00 + -2.7033994074178991e+00 1.8529935273685543e+00 -1.4653090393052368e+00 + -3.0414797605175443e+00 1.7264450072101030e+00 -1.6592196139004551e+00 + -3.3463518203514999e+00 1.5406330632464151e+00 -1.8623244033120940e+00 + -3.6080783398152736e+00 1.3151123587989848e+00 -2.0790298833439746e+00 + -3.8142982095681499e+00 1.0612522808558864e+00 -2.3140051915462978e+00 + -3.9573558958796733e+00 7.8152060639725218e-01 -2.5639971492449600e+00 + -4.0445293797745769e+00 5.0844661568841598e-01 -2.8300650185721321e+00 + -4.0973555354601459e+00 3.7112082658221057e-01 -3.1447920413517441e+00 + -4.0998768635164842e+00 5.9444577039866919e-01 -3.4636417333428331e+00 + -4.0297990097756040e+00 9.7355922539709505e-01 -3.6361024796334998e+00 + -4.0542172144770170e+00 1.0621617049521634e+00 -4.0091686648162650e+00 + id 14109 + loc 2.8158670663833618e-01 6.9698649644851685e-01 396 + blend 0.0000000000000000e+00 + interp 4.6168649336625933e-01:4.6168187650132569e-01:2.0234072166094341e-01:3.2577433757194812e-01:9.7265124730619823e-01:3.5661916149559675e-01:1.5262560431094805e+00:3.4310463601341901e-01:2.0526945302217938e+00:3.2141518310270628e-01:2.9617110486001548e+00:3.1630041938283232e-01:3.7404929569699332e+00 + CVs 20 + 9.2194856964330074e-01 1.5439020506153533e-01 -3.5044388772974056e-01 + 1.5505853152765818e+00 1.2169697295143372e-01 -6.2978882680506576e-01 + 2.1219868434133464e+00 3.3317445362460729e-02 -8.7486241247925900e-01 + 2.7068780308389986e+00 -7.3821756546067707e-02 -1.0935886435949436e+00 + 3.3026404070005144e+00 -2.0573686568995087e-01 -1.2871430438268154e+00 + 3.9048244106249381e+00 -3.7003380709041367e-01 -1.4650341087773855e+00 + 4.5023194944107932e+00 -5.7757029129732018e-01 -1.6383105583774780e+00 + 5.0740460169423303e+00 -8.4209714190472007e-01 -1.8099337680831398e+00 + 5.5933733458797530e+00 -1.1745442706692673e+00 -1.9771679877379067e+00 + 6.0305289807211802e+00 -1.5798521853701271e+00 -2.1473735249787396e+00 + 6.3603087840457526e+00 -2.0498495673169788e+00 -2.3251375171724340e+00 + 6.5812630526860838e+00 -2.5657856905018726e+00 -2.4976176495335629e+00 + 6.7073537315255951e+00 -3.1061993470634417e+00 -2.6472348441722020e+00 + 6.7490461314893571e+00 -3.6468549263285523e+00 -2.7706582885222382e+00 + 6.7125580224879924e+00 -4.1627472650121007e+00 -2.8702011859477130e+00 + 6.6051775660367280e+00 -4.6342966855603036e+00 -2.9343851075645979e+00 + 6.4459071662314802e+00 -5.0498070980056200e+00 -2.9545240414681455e+00 + 6.2743749024353228e+00 -5.4180718120980504e+00 -2.9531315577849253e+00 + 6.2293646773786957e+00 -5.8382128833015354e+00 -3.0109260755483573e+00 + id 14110 + loc 1.0145467519760132e-01 5.9582918882369995e-01 412 + blend 0.0000000000000000e+00 + interp 4.2870546922929087e-01:3.4720198455343765e-01:3.0493708505678341e-02:2.7098538159286539e-01:8.8967339906119369e-01:3.7104261911132919e-01:1.3414641022460247e+00:3.0001824284506595e-01:1.9765713119058321e+00:2.8264114556942199e-01:2.5360674669150693e+00:3.6982773239607802e-01:3.0220648967470711e+00:4.2870118217459857e-01:3.6685941019113124e+00 + CVs 20 + 6.4351778273761040e-01 2.0402057590130418e-01 -8.7475809907546220e-02 + 1.0696258738522899e+00 2.9064421405969282e-01 -1.6066738897997751e-01 + 1.4257038656344179e+00 3.3125298023953220e-01 -2.2115560827774242e-01 + 1.7906764509175375e+00 3.6923707283050000e-01 -2.6661522713990249e-01 + 2.1548689017164002e+00 4.0453053282138729e-01 -2.9984445466096227e-01 + 2.5097455734285519e+00 4.3740790551733461e-01 -3.2438968649456434e-01 + 2.8515942784166577e+00 4.6833632545036363e-01 -3.4234659756418540e-01 + 3.1808599967169062e+00 4.9594257002891651e-01 -3.5409177468829822e-01 + 3.4976801034003659e+00 5.1560586779193995e-01 -3.6027482103624708e-01 + 3.8012680365660820e+00 5.2228927745102116e-01 -3.6101605239595330e-01 + 4.0962224375615710e+00 5.1665258942639980e-01 -3.4400961157414806e-01 + 4.3962244061614602e+00 5.0698034979036821e-01 -2.7370316943002715e-01 + 4.7146882465868796e+00 4.8665950088028764e-01 -1.2693764922114170e-01 + 5.0467015170868299e+00 4.1839697858130931e-01 5.0887135330232591e-02 + 5.3674232115047973e+00 2.7791248498277343e-01 1.9290697901981613e-01 + 5.6572846302620343e+00 7.3211943313701511e-02 2.8542607135313813e-01 + 5.9054459867796147e+00 -1.7911395667889440e-01 3.4388356517433771e-01 + 6.0995243978879188e+00 -4.6165834586811449e-01 3.7139296458752358e-01 + 6.1110650629702015e+00 -7.5568243422648895e-01 2.2764929485625784e-01 + id 14111 + loc 9.7065702080726624e-02 2.9472336173057556e-01 380 + blend 0.0000000000000000e+00 + interp 2.9506524743111279e-01:2.9506229677863849e-01:8.6381433338642566e-03:2.5071535523204391e-01:9.7521380777702726e-01:2.5516115652748184e-01:2.0092520609418716e+00:2.5289514116861145e-01:3.0001007492426019e+00 + CVs 20 + -3.7942042736484016e-01 3.6253739033374732e-01 5.4452095675397549e-01 + -6.5267771689785148e-01 6.0938487336229652e-01 1.0013648846060239e+00 + -8.9440756864492910e-01 7.9280002035174424e-01 1.4394704523645818e+00 + -1.1399620878441448e+00 9.3835468284841816e-01 1.8858611051575476e+00 + -1.3994453007458798e+00 1.0482569649743199e+00 2.3341350943070047e+00 + -1.6830015857009182e+00 1.1184682647703481e+00 2.7803286531748777e+00 + -1.9993447921849015e+00 1.1380096578512759e+00 3.2232774799826869e+00 + -2.3557055315521214e+00 1.0945574475579689e+00 3.6571820151000680e+00 + -2.7558195062684412e+00 9.7756953639407196e-01 4.0683159299927185e+00 + -3.1910219918788303e+00 7.7853081529824486e-01 4.4415595700915631e+00 + -3.6337565611685925e+00 4.9068286032686492e-01 4.7654222398623922e+00 + -4.0456645959717212e+00 1.0924623094621744e-01 5.0254822085643482e+00 + -4.4033175299901481e+00 -3.6815828329585054e-01 5.2117635947327345e+00 + -4.7322833734038205e+00 -9.5018407009977679e-01 5.3486901521537078e+00 + -5.0876778824867426e+00 -1.6194483638929076e+00 5.4867108050255737e+00 + -5.4971108911291875e+00 -2.3214231132483447e+00 5.6941915022029397e+00 + -5.9238409752234951e+00 -2.9866157547736543e+00 6.0554225223153786e+00 + -6.3070452091103686e+00 -3.5672030906725998e+00 6.5589276087709614e+00 + -6.7299745938583024e+00 -4.1072686683728516e+00 6.8626438666083303e+00 + id 14112 + loc 1.3373845815658569e-01 9.8126184940338135e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7737071173027901e-01:3.3549565084486122e-01:5.5665252163243639e-01:4.3437772515871809e-01:1.0286110180338914e+00:1.2572075085028853e-01:1.9770754215382531e+00:3.5311330795049151e-01:2.7989352482524090e+00:4.7736593802316174e-01:3.0164049767437717e+00:4.1927434080701914e-01:3.9904999636121565e+00 + CVs 20 + 1.6691910468539350e-01 4.4473593883768314e-01 1.7257746975997740e-01 + 3.3955188078632514e-01 8.1419038516696096e-01 2.3781570297303548e-01 + 5.1480332807868656e-01 1.1546920167062833e+00 2.6554082771738841e-01 + 6.9083968870864643e-01 1.4719121256075347e+00 2.7433981680828934e-01 + 8.6643187261360599e-01 1.7533252869752050e+00 2.5960068912538237e-01 + 1.0352834493868639e+00 1.9818262476307296e+00 2.1356952528581064e-01 + 1.1877596650253537e+00 2.1466256065892475e+00 1.3347967458250942e-01 + 1.3179333925810506e+00 2.2498123938375443e+00 2.6068529964980436e-02 + 1.4261798068649574e+00 2.3018666069587095e+00 -9.9091300291685447e-02 + 1.5208980251272877e+00 2.3161111489230515e+00 -2.3861498200757414e-01 + 1.6140463852662927e+00 2.3007818105783389e+00 -3.9815052968641107e-01 + 1.7145667711702841e+00 2.2555036758585238e+00 -5.8564939301896091e-01 + 1.8277717640570972e+00 2.1744475186088024e+00 -8.0539956181761385e-01 + 1.9577584979841474e+00 2.0482886754352725e+00 -1.0561444357077652e+00 + 2.1090860592514131e+00 1.8536390683675681e+00 -1.3285339003384236e+00 + 2.2838369811284882e+00 1.5236654044495910e+00 -1.5871644883133644e+00 + 2.4672088438956510e+00 1.0036856486047570e+00 -1.7250068847893361e+00 + 2.6414781034791268e+00 4.3814947278637206e-01 -1.7004533337156325e+00 + 2.8291192768464883e+00 6.6566547096544637e-02 -1.7405803581409423e+00 + id 14113 + loc 6.9162446260452271e-01 8.2032161951065063e-01 402 + blend 0.0000000000000000e+00 + interp 3.5283796262273376e-01:3.5283443424310756e-01:2.5681588517425613e-01:3.2341766287680807e-01:1.0436108715145231e+00:3.0727159478524835e-01:2.0432576862539813e+00:3.0915736022063395e-01:3.0092752885007119e+00:3.0326134238146751e-01:3.8345151092725649e+00 + CVs 20 + -4.7436127792389635e-02 1.0084175259399986e-01 -1.5852411601155519e-01 + -6.8743365080285959e-02 2.0389531800508717e-01 -3.3158808056804834e-01 + -8.5140580578819930e-02 2.9813141477010352e-01 -5.1046168019110705e-01 + -1.0026849425018955e-01 3.7274239002988074e-01 -6.8285769056398860e-01 + -1.1564534338847460e-01 4.2820853007639970e-01 -8.4814124244846223e-01 + -1.2900145931182819e-01 4.6190590505103607e-01 -1.0031001458805564e+00 + -1.3679748679720100e-01 4.6913552566094374e-01 -1.1426308028063292e+00 + -1.4051020308314088e-01 4.4717016509702889e-01 -1.2639452356478280e+00 + -1.5046147219433864e-01 3.9486780843511782e-01 -1.3683093033955536e+00 + -1.9148692741934481e-01 3.0987935902756836e-01 -1.4593490614228404e+00 + -2.9863281685955678e-01 2.0301691746504691e-01 -1.5461260101123970e+00 + -4.6492021794648447e-01 1.0733555936567707e-01 -1.6307982801755010e+00 + -6.4421118046811365e-01 2.2755635014583053e-02 -1.6675617181917879e+00 + -8.2096664791245910e-01 -7.2289427916673754e-02 -1.5775124526939537e+00 + -9.6275221234238917e-01 -1.5956642875784233e-01 -1.3138872323101805e+00 + -1.0111038718581902e+00 -1.9979421872926154e-01 -9.2998567343837646e-01 + -9.3562463426272746e-01 -1.7900165888631792e-01 -5.0586306039725626e-01 + -7.1815250383899565e-01 -1.0561727131858037e-01 -9.8824941842228384e-02 + -7.8105745027428641e-01 -2.0510785807398518e-01 -4.9228899335035575e-02 + id 14114 + loc 9.6622550487518311e-01 9.7338700294494629e-01 373 + blend 0.0000000000000000e+00 + interp 5.9883876280701309e-01:3.4906595329647999e-01:3.1899829867540341e-01:5.9883277441938509e-01:9.7670958769248495e-01:5.0008777792322157e-01:1.2958195218405455e+00:2.4415161767590374e-01:1.9409363447109116e+00:3.4851910093212868e-01:2.7561688865905984e+00:4.5500748971834609e-01:3.0170786915751693e+00:5.3413931528609337e-01:3.7457954908626472e+00 + CVs 20 + -2.4464084126604063e-01 2.9693278356044805e-01 -1.3633987592288682e-01 + -5.0470697341333104e-01 5.9527088783080562e-01 -3.0761410921928622e-01 + -7.8293128542287893e-01 8.7989462438501986e-01 -4.9605784794455760e-01 + -1.0680508750650417e+00 1.1462620903164460e+00 -7.0099779587764388e-01 + -1.3429825446206713e+00 1.3888928692091391e+00 -9.3338363368205024e-01 + -1.5922265617922213e+00 1.5873180176297716e+00 -1.2012590443300484e+00 + -1.8066643612717519e+00 1.7204811404464944e+00 -1.5029162240446374e+00 + -1.9812405272162203e+00 1.7786083225737639e+00 -1.8243671351707231e+00 + -2.1116422004527200e+00 1.7573558115877395e+00 -2.1401530322588647e+00 + -2.1961568754432363e+00 1.6543240560707217e+00 -2.4137688076397663e+00 + -2.2330687398696778e+00 1.4744938408838872e+00 -2.5981918251739380e+00 + -2.2153835589369959e+00 1.2471446177070002e+00 -2.6448243774485145e+00 + -2.1532325888950421e+00 1.0385711830510433e+00 -2.5664132741961163e+00 + -2.1072210252737715e+00 8.6908704759776501e-01 -2.5036711216477272e+00 + -2.1401615243107965e+00 6.6411288319757333e-01 -2.5918107347898434e+00 + -2.2694882078973815e+00 4.0393952269823918e-01 -2.8419890170511426e+00 + -2.5007540765506597e+00 1.4739707087668052e-01 -3.2001614573737456e+00 + -2.8048820282051530e+00 -3.5571246235528209e-02 -3.5754866287787497e+00 + -2.9608750724888075e+00 -9.2450385115545597e-02 -3.7853501840542156e+00 + id 14115 + loc 4.8214459419250488e-01 3.9685219526290894e-01 400 + blend 0.0000000000000000e+00 + interp 3.6464600295998656e-01:3.3683020337920705e-01:5.3869645195614768e-02:3.5555621379853364e-01:9.1792432711832161e-01:3.0746174504718282e-01:1.2870860484940996e+00:3.2169743637453957e-01:1.9984318562056347e+00:3.5333083991311820e-01:2.8989137205224020e+00:3.6464235649995697e-01:3.5287759961076013e+00 + CVs 20 + -9.5995440232310256e-02 2.1140687005874670e-01 2.2472536583377753e-01 + -2.2457959445232079e-01 4.4575665479620313e-01 4.2833700091485138e-01 + -3.7972475449999743e-01 6.8915232677431748e-01 6.2047397139167626e-01 + -5.5929457629629220e-01 9.3424324328587716e-01 8.0394893325700534e-01 + -7.6028211765678466e-01 1.1787871967885004e+00 9.7814325188219509e-01 + -9.7326355628069972e-01 1.4223307742203439e+00 1.1448606843378162e+00 + -1.1912911211478705e+00 1.6662268670801390e+00 1.3085630056131008e+00 + -1.4164368160869474e+00 1.9103805071130924e+00 1.4739915531128469e+00 + -1.6570348120482512e+00 2.1508963700735420e+00 1.6426851762810939e+00 + -1.9244613249908091e+00 2.3813917324818421e+00 1.8128158351505383e+00 + -2.2348566972247204e+00 2.5944028520633218e+00 1.9815127397709060e+00 + -2.6068069429975145e+00 2.7785910324890732e+00 2.1441138098237369e+00 + -3.0500322018751005e+00 2.9158677780595079e+00 2.2917030952919832e+00 + -3.5596577224785868e+00 2.9851244740780101e+00 2.4130711437303010e+00 + -4.1264051079078357e+00 2.9661065771471868e+00 2.4970326111067145e+00 + -4.7382192854911320e+00 2.8383657902289334e+00 2.5293585692898284e+00 + -5.3602711819976587e+00 2.5907924189944622e+00 2.4987722415052334e+00 + -5.9117407592532505e+00 2.2646151739826190e+00 2.4274171487735119e+00 + -6.1045860906474037e+00 2.1811305114070048e+00 2.4738239199558580e+00 + id 14116 + loc 4.7207483649253845e-01 8.4547829627990723e-01 399 + blend 0.0000000000000000e+00 + interp 4.4734043310146338e-01:3.9422394822550511e-01:5.6843153516190492e-01:2.8344341156836933e-01:1.0975469886778744e+00:3.5368070074021246e-01:1.9168661640400928e+00:3.5581410530258395e-01:2.4069660087130851e+00:3.5876140467829243e-01:3.2449759618702565e+00:4.4733595969713236e-01:3.9589108264423261e+00 + CVs 20 + -2.2029877460734645e-01 2.7566235364572245e-01 -1.2988401427678073e-01 + -4.2344112872154543e-01 5.5334457901628531e-01 -2.9673977856130090e-01 + -6.1239671295293296e-01 8.2295082647506668e-01 -4.8998388038230273e-01 + -7.8958053886281454e-01 1.0781336105690642e+00 -7.0478661906235773e-01 + -9.5458420219455298e-01 1.3130446589379645e+00 -9.4244664096525299e-01 + -1.1106701853082315e+00 1.5216210751298367e+00 -1.2059697672396459e+00 + -1.2643742608123041e+00 1.6947063438357466e+00 -1.5008845350552829e+00 + -1.4196919400090100e+00 1.8216572282247967e+00 -1.8302232983106299e+00 + -1.5787092211767739e+00 1.9065998514675380e+00 -2.1867289468630693e+00 + -1.7460321666625291e+00 1.9673741481670004e+00 -2.5583796680587567e+00 + -1.9159689163345657e+00 1.9949065666698200e+00 -2.9421781042173492e+00 + -2.0526450582393756e+00 1.9387179438897491e+00 -3.3396428907845883e+00 + -2.1412851102865065e+00 1.7727029272859585e+00 -3.7521440306267899e+00 + -2.2460625498507900e+00 1.5290382723518052e+00 -4.1861844336802898e+00 + -2.4258367328161570e+00 1.2388011446167668e+00 -4.6296288865014406e+00 + -2.6383010502981996e+00 8.4995660034768206e-01 -5.0367821951816696e+00 + -2.8345484646629986e+00 2.7411817593519583e-01 -5.3691810616932205e+00 + -3.1725925119452802e+00 -3.4776588692843857e-01 -5.6423113762442592e+00 + -3.6029860579033737e+00 -4.0685038372527227e-01 -5.8381523225646044e+00 + id 14117 + loc 5.4369497299194336e-01 4.2849150300025940e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3150819514262092e-01:3.0123413613798072e-01:7.7855828388661452e-02:3.2188433020702040e-01:8.4265748894181647e-01:3.1109234792886714e-01:1.7198839608591325e+00:3.3150488006066953e-01:2.3299587740926091e+00:2.9736368760687021e-01:3.4563773968565386e+00 + CVs 20 + -4.3716865270560429e-02 3.5379146972475778e-01 1.4876853239989951e-01 + -1.1748719529609097e-01 6.9154396873321677e-01 3.0914912685299473e-01 + -2.4066159874821669e-01 9.9788919628196238e-01 4.6914804044578140e-01 + -4.2537232135872705e-01 1.2492319815313875e+00 6.1452983128099792e-01 + -6.3910041655083005e-01 1.4376162857877619e+00 7.1528657993638478e-01 + -8.2863267392508011e-01 1.5935192540207854e+00 7.6702265437852657e-01 + -9.7277243684628123e-01 1.7521885940613600e+00 7.9865764988527066e-01 + -1.0753798407300657e+00 1.9341400674343743e+00 8.4505886818891351e-01 + -1.1344340417100449e+00 2.1362354238738357e+00 9.3628224012939498e-01 + -1.1469210942482233e+00 2.3198051512132656e+00 1.0860005435402424e+00 + -1.1274850112470556e+00 2.4408425994251304e+00 1.2769922828866309e+00 + -1.0968810503062425e+00 2.4863667722755363e+00 1.4772811441241585e+00 + -1.0681643618130372e+00 2.4679699359446849e+00 1.6619708979862373e+00 + -1.0486163598642420e+00 2.4026429714891986e+00 1.8160631277946848e+00 + -1.0468255237645985e+00 2.2975014435406109e+00 1.9259889382005790e+00 + -1.0692358679433691e+00 2.1763568475343256e+00 1.9886879353625107e+00 + -1.1063207679744427e+00 2.0781166783921976e+00 2.0348147882045282e+00 + -1.1581718185095777e+00 2.0044043572340007e+00 2.0851484192177061e+00 + -1.3568925998850503e+00 1.8122203066632436e+00 2.0050552950257607e+00 + id 14118 + loc 2.9807186126708984e-01 3.1264954805374146e-01 403 + blend 0.0000000000000000e+00 + interp 3.9925149906342794e-01:3.8932045136514432e-01:1.3203278101158988e-01:2.6108573908108335e-01:9.5353721736146557e-01:2.6187169320013631e-01:1.8604712276194193e+00:3.7097248651446652e-01:2.1944698990938005e+00:2.6436691131339396e-01:3.1547581793255137e+00:3.9924750654843733e-01:3.8467831542888327e+00 + CVs 20 + -2.1354312464617134e-01 2.3620692296652923e-01 3.3251995111667543e-02 + -3.9110228022064308e-01 4.6096797211833468e-01 8.4257345882100071e-02 + -5.5305377801480127e-01 6.7817752155096689e-01 1.4990854654102381e-01 + -7.0792981721377779e-01 8.8749706406745643e-01 2.2801542798581792e-01 + -8.5595498980376961e-01 1.0860421486471390e+00 3.1726452768801439e-01 + -9.9588031371952601e-01 1.2716363983854813e+00 4.1745303086108715e-01 + -1.1257249911140452e+00 1.4444100334555365e+00 5.3276946409236059e-01 + -1.2427375743582685e+00 1.6035021076255043e+00 6.6919026530928039e-01 + -1.3424122516051411e+00 1.7435970029264236e+00 8.3036478492509691e-01 + -1.4174632073470146e+00 1.8554474926227944e+00 1.0163469854135438e+00 + -1.4573676206201787e+00 1.9308079322590395e+00 1.2227085388984809e+00 + -1.4459638835530646e+00 1.9606667256180876e+00 1.4453790948518295e+00 + -1.3727744858876736e+00 1.9347389466023259e+00 1.6764393568902065e+00 + -1.2521486396844164e+00 1.8535283209914493e+00 1.8988789428988770e+00 + -1.1030390085553479e+00 1.7196438973447070e+00 2.0953520120458653e+00 + -9.1710861949996869e-01 1.5007532785563031e+00 2.2589210221579350e+00 + -6.8195093287711983e-01 1.1350419186314364e+00 2.4163693818805716e+00 + -4.4876273485178741e-01 6.5546573948529652e-01 2.6421856385979443e+00 + -3.3970963160989676e-01 3.7879207241904722e-01 2.8197722925363422e+00 + id 14119 + loc 3.6711864173412323e-02 7.8497391939163208e-01 379 + blend 0.0000000000000000e+00 + interp 5.0658045904276572e-01:5.0657539323817535e-01:2.6814230768340175e-01:2.8042653104258519e-01:1.0438591848479584e+00:4.2528708763949757e-01:2.0008470689348408e+00:3.6141958810623631e-01:2.4865874761656559e+00:2.9621330462853152e-01:2.9800621565361949e+00:3.1265744906373827e-01:3.7764772602393704e+00 + CVs 20 + -2.1689742915075416e-02 5.1742517869123672e-01 3.1718505987580214e-01 + -9.3797108130757034e-03 9.3607714561120858e-01 7.2449952999625755e-01 + 4.1166242162978317e-02 1.2133970247015506e+00 1.2066750517945213e+00 + 1.2225974154743269e-01 1.4203657333185529e+00 1.6760426194183853e+00 + 2.0864650666977735e-01 1.6350724879094169e+00 2.0907073723938669e+00 + 2.6548052343383688e-01 1.8881668801734879e+00 2.4584628477793506e+00 + 2.6592231940854971e-01 2.1807029844706736e+00 2.7813205112401818e+00 + 2.0549185570958639e-01 2.4962053158608750e+00 3.0418123584003283e+00 + 8.8089913790680985e-02 2.8227791794413148e+00 3.2385343557715602e+00 + -9.9351748462380707e-02 3.1679958730436586e+00 3.3839965284283609e+00 + -3.7797216481385010e-01 3.5358258727657397e+00 3.4795228774805853e+00 + -7.6630988102507791e-01 3.9130640185517302e+00 3.5221675646010673e+00 + -1.2732616756172566e+00 4.2580293567703151e+00 3.5044349545366948e+00 + -1.8600961877653335e+00 4.4975225897419389e+00 3.4134747059994233e+00 + -2.4713695825586783e+00 4.5863140813411647e+00 3.2349744877083761e+00 + -3.1222073030872837e+00 4.4720346261698705e+00 2.8993733451812043e+00 + -3.8727898157745861e+00 3.9457150578175306e+00 2.3438752817660147e+00 + -4.5447791201292631e+00 2.8559952351442184e+00 1.9174970701356986e+00 + -4.6028357917244413e+00 2.3691631803968547e+00 1.8484142282041416e+00 + id 14120 + loc 6.5644276142120361e-01 9.1882091760635376e-01 395 + blend 0.0000000000000000e+00 + interp 5.0947061880450772e-01:2.7766543354116074e-01:3.1547684777888962e-01:3.1300723196181213e-01:1.3086970078906206e+00:5.0946552409831969e-01:2.0038441145227370e+00:5.0166500624376487e-01:2.5064028758443109e+00:4.1614622676810947e-01:2.8055690584723250e+00:2.7761796914869030e-01:3.1252123118710764e+00 + CVs 20 + 4.8435292704640670e-01 2.4460320303654032e-01 -3.3381769170917341e-01 + 8.4313331476753728e-01 4.0384240428559293e-01 -6.1139850424581077e-01 + 1.1758366676616852e+00 5.2136286799589859e-01 -8.8336035122048551e-01 + 1.5334515061195904e+00 6.1601937191554401e-01 -1.1703350045931000e+00 + 1.9208840327068497e+00 6.7909775013582840e-01 -1.4655920263793103e+00 + 2.3380453643814452e+00 7.0454415810253668e-01 -1.7635467861872645e+00 + 2.7805142340612816e+00 6.9091793314719874e-01 -2.0633413223554280e+00 + 3.2424072760157094e+00 6.3362278025180330e-01 -2.3629042081904945e+00 + 3.7161273721632253e+00 5.2182542015860078e-01 -2.6546756535431482e+00 + 4.1887396430910302e+00 3.4365618531453612e-01 -2.9324038776924555e+00 + 4.6406013536896600e+00 9.2508438601034193e-02 -3.1961483822078671e+00 + 5.0532211997735548e+00 -2.2626321349562240e-01 -3.4447735637872703e+00 + 5.4187859513462007e+00 -5.9541252588443205e-01 -3.6719339430492166e+00 + 5.7369540076517200e+00 -9.9505371312341229e-01 -3.8750620135066445e+00 + 6.0074316130770971e+00 -1.4082710307882600e+00 -4.0585207865348396e+00 + 6.2284119021073998e+00 -1.8190163196788340e+00 -4.2249196788701449e+00 + 6.3998660503556390e+00 -2.2109488824585219e+00 -4.3722303154333639e+00 + 6.5280722990054754e+00 -2.5690751549567663e+00 -4.5010075502829725e+00 + 6.6325429617997234e+00 -2.8521569948180314e+00 -4.6176246361521356e+00 + id 14121 + loc 1.9403785467147827e-01 1.3745422661304474e-01 396 + blend 0.0000000000000000e+00 + interp 4.1792702228697881e-01:4.0772463120556252e-01:4.9577579355945012e-01:2.9271505025479361e-01:1.2201713509363639e+00:2.9521725618093397e-01:2.0000953192597968e+00:3.3682594047422804e-01:2.7568603316685372e+00:4.1792284301675597e-01:3.2083750259467552e+00:3.3374928297253098e-01:3.9496647087103613e+00 + CVs 20 + -2.6277170946865036e-01 2.1799018190016967e-01 -5.4776288168761866e-01 + -4.7817928419060135e-01 3.2450313475517722e-01 -9.5640949058864655e-01 + -6.7550547186358778e-01 3.8933253412453522e-01 -1.3403264433108111e+00 + -8.6162276627307843e-01 4.4271159905471197e-01 -1.7459162250217279e+00 + -1.0336106461095285e+00 4.8077487672673025e-01 -2.1735944540455683e+00 + -1.1920453592159670e+00 5.0037067733388452e-01 -2.6232807199068411e+00 + -1.3431702667851191e+00 4.9914322558665680e-01 -3.0941666524401712e+00 + -1.4942967063222814e+00 4.7060791630875864e-01 -3.5847283490336590e+00 + -1.6494596789717555e+00 4.0045915459332448e-01 -4.0917664327808243e+00 + -1.8138068445101512e+00 2.6977753843156949e-01 -4.6047421525174839e+00 + -1.9967009670323943e+00 6.1182819342757711e-02 -5.1025867585609967e+00 + -2.2002040273214476e+00 -2.3362682601765172e-01 -5.5620696850833458e+00 + -2.4147387782312433e+00 -6.0640099869338426e-01 -5.9700614023513054e+00 + -2.6343994065568586e+00 -1.0375183207148946e+00 -6.3253502346704202e+00 + -2.8587645347825221e+00 -1.5085831329102506e+00 -6.6268036309797553e+00 + -3.0834444396803131e+00 -2.0051580584302400e+00 -6.8711195480759777e+00 + -3.2965327937475011e+00 -2.5148409429382350e+00 -7.0573325736773391e+00 + -3.4911537569944775e+00 -3.0149786267667622e+00 -7.1956472715733106e+00 + -3.6797498975280676e+00 -3.4015959896208678e+00 -7.3558675190169742e+00 + id 14122 + loc 5.4104858636856079e-01 5.4505777359008789e-01 412 + blend 0.0000000000000000e+00 + interp 4.4577581735377936e-01:2.5232025468472885e-01:1.7402495456620626e-01:3.5300512553091101e-01:1.0003554725440893e+00:4.4577135959560582e-01:1.5846098375922679e+00:3.5252406046275803e-01:2.0022592893775624e+00:3.4431018130498126e-01:2.9257133081265341e+00:3.9988327029277082e-01:3.4131122264084075e+00 + CVs 20 + 7.0285213052379325e-01 9.1275331594469933e-02 -2.2768696300341451e-01 + 1.2035792667364060e+00 6.5940635922185686e-02 -4.2979124793145884e-01 + 1.6820061636959889e+00 5.2952896749067779e-03 -6.0531424859083871e-01 + 2.1987672514181020e+00 -6.8975461552474249e-02 -7.4864844678697562e-01 + 2.7393213425670062e+00 -1.6326348378358424e-01 -8.4721942445530318e-01 + 3.2845541515233574e+00 -2.8118565182654476e-01 -8.8947914789408344e-01 + 3.8116973373970309e+00 -4.2351653354640817e-01 -8.7138450974501858e-01 + 4.2994214579132430e+00 -5.8884337105795836e-01 -8.0005009308925812e-01 + 4.7326832850162823e+00 -7.7198256127037412e-01 -6.8822151644035168e-01 + 5.1026808922887215e+00 -9.6669121207984476e-01 -5.5200784326823626e-01 + 5.4049491666414795e+00 -1.1809597445755018e+00 -4.2409123013112210e-01 + 5.6410931833070332e+00 -1.4390599628096483e+00 -3.5574383712368773e-01 + 5.8159276274143750e+00 -1.7398495792761230e+00 -3.7040835105198561e-01 + 5.9405550478527385e+00 -2.0489654768655305e+00 -4.4276829259949835e-01 + 6.0260870697265299e+00 -2.3437253959339905e+00 -5.5309859513269166e-01 + 6.0750183868718164e+00 -2.6147508177914194e+00 -7.0381080589297229e-01 + 6.0908821743137027e+00 -2.8533802039486416e+00 -8.9314688617493476e-01 + 6.0853291679503592e+00 -3.0539891071366156e+00 -1.1034900545806774e+00 + 6.1254642747033863e+00 -3.2445760791326022e+00 -1.2986940588813205e+00 + id 14123 + loc 8.9205938577651978e-01 2.7964940667152405e-01 378 + blend 0.0000000000000000e+00 + interp 5.7825199602088451e-01:3.7766572907790280e-01:5.5109034077777785e-02:5.7824621350092431e-01:1.0113907723857509e+00:4.5333981268732715e-01:1.9847940915351314e+00:4.3996516196582891e-01:2.4876507500696330e+00:3.6348799634141954e-01:3.0197873364582430e+00:3.6574264185814359e-01:3.7001904522521318e+00 + CVs 20 + -3.5270174824425038e-01 2.0959481484287473e-01 1.1824658771954016e-01 + -6.7426376735741200e-01 3.9745798324105502e-01 2.2544634881251352e-01 + -1.0004329788851343e+00 5.7374606535885797e-01 3.3452210460564979e-01 + -1.3550485501268810e+00 7.5922793397868926e-01 4.4894284642387294e-01 + -1.7271470627254693e+00 9.6836273795472905e-01 5.5144263572022190e-01 + -2.1074816665990550e+00 1.1985477108852884e+00 6.1965033090558053e-01 + -2.5050923720986225e+00 1.4286283697514395e+00 6.3228846953275220e-01 + -2.9215820187226695e+00 1.6310905860947786e+00 5.6822648054606550e-01 + -3.3341836646870715e+00 1.7801232237715632e+00 4.1703051635590627e-01 + -3.7110004224552995e+00 1.8566696743366400e+00 1.8960825505651624e-01 + -4.0299716545323800e+00 1.8503731135832808e+00 -8.4290074183691499e-02 + -4.2801463465643828e+00 1.7557675674696762e+00 -3.7159090782197890e-01 + -4.4649326310342783e+00 1.5635938813371895e+00 -6.5520170466062155e-01 + -4.6126063676846085e+00 1.2551674196969804e+00 -9.4151895796292551e-01 + -4.7691422204608385e+00 8.3476675349258178e-01 -1.2446939051944996e+00 + -4.9977680701381608e+00 3.4391144115896832e-01 -1.5659363695727389e+00 + -5.3593247475054095e+00 -1.6151931147252396e-01 -1.8676009915116425e+00 + -5.8130240703372760e+00 -6.1172122652236149e-01 -2.0998847430075616e+00 + -6.1148490190759857e+00 -9.5654449555765320e-01 -2.2911178830971295e+00 + id 14124 + loc 4.0864485502243042e-01 4.9463605880737305e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1257268133471356e-01:3.9935590793221643e-01:7.6383003233537750e-07:3.5206490177914829e-01:8.0432132165771553e-01:5.1256755560790024e-01:1.1196943934611658e+00:4.2540594568601076e-01:1.8666763596420703e+00:4.9094052222260121e-01:2.2681847165592628e+00:3.2211175597094927e-01:2.9072429012139680e+00:4.2854046459042111e-01:3.5979115991041848e+00 + CVs 20 + 8.6104329005089825e-02 3.8802049959075596e-01 4.6051379036684978e-02 + 1.1149698710663064e-01 7.2975489414461681e-01 6.5678719411421393e-02 + 1.0110968700920031e-01 1.0518836784082533e+00 7.9646528493762581e-02 + 6.8156315514249055e-02 1.3657379574101878e+00 9.8094181532917463e-02 + 1.0825092078033949e-02 1.6622879334639629e+00 1.1683973960780691e-01 + -7.0469662580121550e-02 1.9269632932032086e+00 1.3512162496242602e-01 + -1.7466182495695626e-01 2.1463231542093748e+00 1.5462124873074734e-01 + -2.9846135716339350e-01 2.3152155034226691e+00 1.7764144419800815e-01 + -4.3721103903223701e-01 2.4368518376507078e+00 2.0595590627462124e-01 + -5.8988526227081495e-01 2.5163009751063603e+00 2.3971281855187043e-01 + -7.5687413395791381e-01 2.5543523007287003e+00 2.7832317979980692e-01 + -9.3524013339604772e-01 2.5490048090990158e+00 3.2114703368278713e-01 + -1.1204549345599792e+00 2.4980523779414483e+00 3.6692513617127348e-01 + -1.3082614089532210e+00 2.3999550164747525e+00 4.1340812208886285e-01 + -1.4935757976951578e+00 2.2594410825931641e+00 4.5644179089132486e-01 + -1.6751343010982771e+00 2.1018620581186447e+00 4.8844622550697198e-01 + -1.8721789937729241e+00 1.9546624847412968e+00 5.0280905824534394e-01 + -2.0499474741905432e+00 1.7700846297084163e+00 5.0820815539306707e-01 + -1.9383502546077664e+00 1.5530924834707547e+00 5.2920816928221348e-01 + id 14125 + loc 8.0093502998352051e-01 2.4834712967276573e-02 402 + blend 0.0000000000000000e+00 + interp 4.7874778997236894e-01:3.3935024730103486e-01:1.2114848302537806e-01:4.7874300249446922e-01:8.9515197637665678e-01:4.1754740169496729e-01:1.0503431565104311e+00:1.5573931844379202e-01:1.8729046836977519e+00:3.8314666721243923e-01:2.8333609552334629e+00:3.0881858139768192e-01:3.1781725754851280e+00 + CVs 20 + 3.9333590737548907e-01 3.3108148076646488e-01 1.9542502794183989e-01 + 7.4818436739993899e-01 6.9481032918880248e-01 4.2204070502388696e-01 + 1.0791999431861448e+00 1.0630403575499716e+00 6.6754796250987058e-01 + 1.4149426461628749e+00 1.3946065827258891e+00 9.0315111403065640e-01 + 1.7786424386599071e+00 1.6602113021625744e+00 1.1128820649573790e+00 + 2.1763824445684095e+00 1.8497569547985717e+00 1.3076779449905160e+00 + 2.6039075758616059e+00 1.9574310408995537e+00 1.5129211243522815e+00 + 3.0466578905792856e+00 1.9736278028537551e+00 1.7517003094416717e+00 + 3.4770363024513093e+00 1.8864254840077403e+00 2.0289603538164727e+00 + 3.8635803474854979e+00 1.6881526615216398e+00 2.3317153120698841e+00 + 4.1687780505687169e+00 1.4088305013123983e+00 2.6231347378166419e+00 + 4.3702621091845684e+00 1.1288002867452167e+00 2.8530922984669198e+00 + 4.4778523032851067e+00 8.8864470829174746e-01 3.0016869953870393e+00 + 4.5171004528852725e+00 6.6185331378979739e-01 3.0776775088861248e+00 + 4.5376389928932959e+00 4.0673617918792937e-01 3.0968255201908792e+00 + 4.6250164386521444e+00 1.1038203730641216e-01 3.0703328497978970e+00 + 4.8251332965738474e+00 -2.0562398037671792e-01 3.0136538790492424e+00 + 5.0823279602230711e+00 -5.2864844777923525e-01 2.9819337505305539e+00 + 5.2494138685725975e+00 -8.2542776745791424e-01 3.0753905027840718e+00 + id 14126 + loc 8.0852217972278595e-02 2.2878427803516388e-01 400 + blend 0.0000000000000000e+00 + interp 5.2109387526120710e-01:3.9521568244737343e-01:8.6841257042006503e-01:4.2679257492160189e-01:1.2735905037590409e+00:4.3845038097280065e-01:2.0817289790906557e+00:5.2108866432245449e-01:2.5963269957513369e+00:4.6825924161896748e-01:3.0474759457239204e+00:3.3526660309100864e-01:3.9570279618047270e+00 + CVs 20 + -9.9925230295356104e-02 1.5331177383561917e-01 1.9189529386434787e-01 + -2.2207282476224952e-01 3.1853308218151921e-01 4.0175618979835692e-01 + -3.6443642640100038e-01 4.8401448715436246e-01 6.0836076951603735e-01 + -5.2494866772375604e-01 6.4216751279715212e-01 8.0065807419204882e-01 + -7.0085018716071812e-01 7.8690013490780308e-01 9.7722553154661251e-01 + -8.8610034432132667e-01 9.0844043026734322e-01 1.1357861239211400e+00 + -1.0755647438384721e+00 9.9716318693385952e-01 1.2743593459369456e+00 + -1.2660979774579584e+00 1.0474673720598826e+00 1.3920471334681155e+00 + -1.4590104197303908e+00 1.0573360753787933e+00 1.4914679934316029e+00 + -1.6585559133922247e+00 1.0247655161701152e+00 1.5784032979011393e+00 + -1.8636273577923763e+00 9.4857994832857473e-01 1.6555239148016125e+00 + -2.0676494776952876e+00 8.3506700470665884e-01 1.7179295057727955e+00 + -2.2631305833450841e+00 7.0233982258271377e-01 1.7537508560824415e+00 + -2.4471385809744572e+00 5.6738155079124708e-01 1.7558414366514141e+00 + -2.6302595985709951e+00 4.1723900180119589e-01 1.7327414835256680e+00 + -2.8371517659115146e+00 2.0751625656252004e-01 1.7015665395891739e+00 + -3.1391137768095811e+00 -6.9615147543323319e-02 1.6851524978055279e+00 + -3.5407299743238307e+00 -2.3107777849376920e-01 1.6652398035194684e+00 + -3.7755225473152771e+00 -1.9393516205584471e-01 1.5690134223478531e+00 + id 14127 + loc 3.7888807058334351e-01 3.6734366416931152e-01 401 + blend 0.0000000000000000e+00 + interp 4.9563965628144546e-01:3.7771964293226523e-01:2.0812042597000002e-01:4.9563469988488268e-01:1.0080383971628673e+00:3.0139199503086656e-01:1.3917001266474682e+00:3.8247189187301872e-01:2.0001863236043165e+00:2.6166646426657114e-01:2.4955149835735355e+00:3.8230109822238856e-01:2.9996293306030353e+00:3.2014433362688299e-01:3.6475199528066957e+00 + CVs 20 + -3.2235615079835483e-01 1.5005922217869833e-01 1.5837968675137593e-01 + -6.2848528065276033e-01 3.0288760884858867e-01 2.7979504923138376e-01 + -9.3577705229792740e-01 4.5080391187024010e-01 3.7693282868157618e-01 + -1.2592714719986053e+00 5.9180827988788931e-01 4.6030984947597786e-01 + -1.6040779764842625e+00 7.2688693940267934e-01 5.3584633678283122e-01 + -1.9806580417435613e+00 8.5637038782569141e-01 6.1987102541048722e-01 + -2.3968659496251203e+00 9.7535726153219549e-01 7.4204938443383528e-01 + -2.8484760672021427e+00 1.0705363011313695e+00 9.3793634263818437e-01 + -3.3149891463194279e+00 1.1233025041003990e+00 1.2333592832177092e+00 + -3.7645385819921922e+00 1.1157359562108846e+00 1.6332524386995715e+00 + -4.1661206468087659e+00 1.0347547129542352e+00 2.1201484638309478e+00 + -4.4973686539303701e+00 8.6973899567513879e-01 2.6642500678551229e+00 + -4.7373074906803128e+00 6.1071713184305554e-01 3.2360685191451961e+00 + -4.8530779328301001e+00 2.6228044308201892e-01 3.8177639276293527e+00 + -4.7871077129252111e+00 -1.3230664065411019e-01 4.4070981187231038e+00 + -4.4726340101399584e+00 -4.7867644356840944e-01 4.9793108809808428e+00 + -3.8982592004929710e+00 -6.4676424585105496e-01 5.4588816915295588e+00 + -3.1718519783517003e+00 -5.4696907851346466e-01 5.7390409640901812e+00 + -2.8199155172915549e+00 -5.7174228831917051e-01 5.9935291115099751e+00 + id 14128 + loc 8.7081015110015869e-01 1.9700953364372253e-01 393 + blend 0.0000000000000000e+00 + interp 4.2160122843316805e-01:3.9966365982655511e-01:9.9840074488785069e-03:4.2159701242088377e-01:7.2942506424700992e-01:3.6228483562879282e-01:1.1820925559597393e+00:3.7658464456996926e-01:1.9998772140604939e+00:2.9010995619518432e-01:2.5953663521264874e+00:3.5915715112245689e-01:3.0435459253916268e+00 + CVs 20 + 3.3368090182304655e-01 3.6607030420638381e-01 2.1478333019141860e-01 + 6.4305780715991934e-01 7.4488520446345563e-01 4.2602566419599225e-01 + 9.2295950584168185e-01 1.1472404650480417e+00 6.6354204066863343e-01 + 1.1701034885285710e+00 1.5491668082729397e+00 9.5498458258387608e-01 + 1.3819142008339336e+00 1.9092991330629467e+00 1.3210734830915085e+00 + 1.5566789311649547e+00 2.2060617686900601e+00 1.7691149502032302e+00 + 1.6971311416235828e+00 2.4409096951170897e+00 2.2978293292934762e+00 + 1.8224304908716209e+00 2.6157975259735609e+00 2.9050665868498284e+00 + 1.9788580983500039e+00 2.7107202627903844e+00 3.5815324664391364e+00 + 2.2162280191233172e+00 2.6886054010061766e+00 4.2978762752159225e+00 + 2.5666110582760648e+00 2.5101285950882328e+00 4.9949980433388648e+00 + 3.0288585262902790e+00 2.1544692848230826e+00 5.5898859491094877e+00 + 3.5751509443509608e+00 1.6364613093097415e+00 5.9912071012683263e+00 + 4.1642847877577527e+00 1.0230151807658197e+00 6.1028822990512328e+00 + 4.7441266343948545e+00 4.6719310692229143e-01 5.8623978825661318e+00 + 5.2689602557902520e+00 1.8427158586208225e-01 5.3482940314889982e+00 + 5.6903679377610583e+00 2.5341226754081791e-01 4.7777055054006743e+00 + 6.0107567865212879e+00 4.4241605044779675e-01 4.3206042300982990e+00 + 6.4246730136237931e+00 3.0681433424240145e-01 3.9861780246758873e+00 + id 14129 + loc 4.5168271660804749e-01 5.1351487636566162e-01 380 + blend 0.0000000000000000e+00 + interp 3.2849704718071027e-01:2.6413009902362261e-01:9.8633244649369434e-01:3.2849376221023846e-01:1.9963495038165013e+00:2.6492285101747393e-01:2.7245523004226198e+00:2.7553420476712942e-01:3.8869790143518488e+00 + CVs 20 + -4.4908748156187484e-01 2.7730657036660372e-01 -5.8340787555803830e-01 + -8.0086969435938327e-01 4.5836518238866708e-01 -1.0394309848242602e+00 + -1.1066792167216746e+00 5.9334540115054135e-01 -1.4726984172711552e+00 + -1.3937069525714236e+00 6.9968197530993304e-01 -1.9301013151572135e+00 + -1.6630675885530315e+00 7.6642513638026388e-01 -2.4093060086679654e+00 + -1.9175232638063209e+00 7.7998723161969696e-01 -2.9024276010014338e+00 + -2.1565697817876508e+00 7.2673320563847921e-01 -3.3901831550295651e+00 + -2.3778330673174857e+00 6.0127433853362477e-01 -3.8495062806055946e+00 + -2.5850389217286107e+00 4.0844005512088488e-01 -4.2680686497825011e+00 + -2.7842680606157346e+00 1.5983761860946144e-01 -4.6381465382632232e+00 + -2.9737499506150220e+00 -1.2345776811235964e-01 -4.9428605734845226e+00 + -3.1444390480615101e+00 -4.1235214007867249e-01 -5.1671884785638538e+00 + -3.2971213252645524e+00 -6.9844938039686566e-01 -5.3278687917616923e+00 + -3.4478950446419061e+00 -1.0250733009750643e+00 -5.4701482498579139e+00 + -3.6104085378895414e+00 -1.4357950696968831e+00 -5.6301655736061811e+00 + -3.7945544714302621e+00 -1.9113578775416582e+00 -5.8264213864531635e+00 + -4.0162902827061426e+00 -2.3993754244980270e+00 -6.0516326285626914e+00 + -4.2850192593667078e+00 -2.8371101655649662e+00 -6.2679518290461331e+00 + -4.5223167824851807e+00 -3.1112893954580634e+00 -6.4217592629095144e+00 + id 14130 + loc 6.0478764772415161e-01 7.0265281200408936e-01 403 + blend 0.0000000000000000e+00 + interp 4.3213837629825402e-01:2.6711781446911387e-01:2.7684160836196137e-01:2.8284168347805089e-01:1.0081421053272261e+00:2.6161594079387540e-01:1.9409565444578512e+00:3.5570457383761572e-01:2.5246987231293136e+00:4.3213405491449108e-01:3.0308377195106893e+00:2.5133481801879048e-01:3.6427070298674975e+00 + CVs 20 + -6.7197167620116377e-02 4.1300303638262884e-03 -3.9256367300051298e-03 + -1.2445363614869337e-01 1.7216113383750391e-02 -2.0030738149072729e-04 + -1.6529136472236469e-01 4.2047010731415063e-02 1.3461922196782635e-02 + -2.0525211288587100e-01 6.8768728752329200e-02 3.4485551559012347e-02 + -2.4824706007332925e-01 9.6114034779913746e-02 6.3118873162238354e-02 + -2.9611498255494545e-01 1.2281821418874882e-01 1.0015743331619251e-01 + -3.4937818975409529e-01 1.4677555674389287e-01 1.4665520768436716e-01 + -4.0694651784151042e-01 1.6573421081831735e-01 2.0382262192460118e-01 + -4.6699845873304724e-01 1.7834280980227812e-01 2.7293419781140599e-01 + -5.2747870943280306e-01 1.8399128152861011e-01 3.5493460773441587e-01 + -5.8559037069977560e-01 1.8217481979698699e-01 4.4996856640108496e-01 + -6.3716642360828668e-01 1.7230011023410524e-01 5.5702363165768221e-01 + -6.7614903089896539e-01 1.5386302543656039e-01 6.7358245637587810e-01 + -6.9529465860199569e-01 1.2662829934031489e-01 7.9546376978288369e-01 + -6.8684194571350732e-01 9.0555333997380749e-02 9.1652745959954429e-01 + -6.4348489908972850e-01 4.5687408824607922e-02 1.0284020567726107e+00 + -5.6050843996379962e-01 -7.5594935047186285e-03 1.1208623127296842e+00 + -4.3937028586101601e-01 -6.8285038120979635e-02 1.1838847438375641e+00 + -4.9892375113425524e-01 -7.3974896022136694e-02 1.3707876597801323e+00 + id 14131 + loc 2.7319943904876709e-01 2.8729343414306641e-01 1069 + blend 0.0000000000000000e+00 + interp 4.5631025092397770e-01:2.9202406805451270e-01:4.6138296428901104e-02:3.1598068712078059e-01:1.0267313947179897e+00:3.7399905050575227e-01:1.9079112719828832e+00:4.5630568782146846e-01:2.2244432691128875e+00:3.0680590232233512e-01:2.9424132082078223e+00:3.3825421470435557e-01:3.4329432689727821e+00 + CVs 20 + -2.6015032215510259e-01 3.0918239151318938e-01 -1.6414612016528385e-01 + -4.6745111149961416e-01 6.3455107480905926e-01 -2.6349679237913970e-01 + -6.4477518997220051e-01 9.6365609323164425e-01 -3.2398739176691238e-01 + -8.2076217483088731e-01 1.2916604415741388e+00 -3.7761764900789641e-01 + -1.0282826122445714e+00 1.6137841847139567e+00 -4.6107102400650857e-01 + -1.2908192030071679e+00 1.9085423378158977e+00 -6.0390622544841388e-01 + -1.6095013479496476e+00 2.1373128096776322e+00 -8.2266102813754116e-01 + -1.9565432387985093e+00 2.2572151769575517e+00 -1.1257636271488072e+00 + -2.2771555089128377e+00 2.2390368143904085e+00 -1.5086328410117256e+00 + -2.5146791237202515e+00 2.0864537025690355e+00 -1.9342513019419736e+00 + -2.6514535399188244e+00 1.8280819744045831e+00 -2.3573134989273212e+00 + -2.6904548679087879e+00 1.4806329678995360e+00 -2.7542841863821397e+00 + -2.6375483050510686e+00 1.0773608394934879e+00 -3.0857378243635889e+00 + -2.5573707491723265e+00 7.3521294087790845e-01 -3.2949983349302361e+00 + -2.5429141333137775e+00 5.5481233338229674e-01 -3.3709131543822037e+00 + -2.5970919853475620e+00 4.9637038008044648e-01 -3.3080383509605742e+00 + -2.6630394162596644e+00 4.4544395246414270e-01 -3.0823790092324974e+00 + -2.6607956762792564e+00 2.8847797278110976e-01 -2.8717704586008987e+00 + -2.6786694201391792e+00 2.4608776354842654e-01 -3.1698921457028844e+00 + id 14132 + loc 5.5385631322860718e-01 7.2992169857025146e-01 395 + blend 0.0000000000000000e+00 + interp 4.4383860870476155e-01:4.4383417031867450e-01:1.6906789483647267e-01:2.8691827245074547e-01:9.6065078614947919e-01:3.1527145937612439e-01:1.7168061926798996e+00:2.8568384242322242e-01:2.2617858132427360e+00:3.2672753111186109e-01:2.9984750948062935e+00:2.9849873726531506e-01:3.5720899555070718e+00 + CVs 20 + 4.6555547873237441e-01 1.4970111452142704e-01 -3.8285899881682228e-01 + 8.3451960927387214e-01 2.3291488332116683e-01 -7.1709995349381572e-01 + 1.1794216891426470e+00 2.9558515187863493e-01 -1.0467384501000354e+00 + 1.5310764494610707e+00 3.5454524925471986e-01 -1.3891296608804979e+00 + 1.8874223178248908e+00 4.0376567220025084e-01 -1.7397012211385858e+00 + 2.2422159338664902e+00 4.3864167806564369e-01 -2.0971527203859748e+00 + 2.5874876668716964e+00 4.5620472252922539e-01 -2.4636864203233357e+00 + 2.9182963972721248e+00 4.4964665063732223e-01 -2.8411593115718481e+00 + 3.2297927394731802e+00 4.0695580053803049e-01 -3.2293374782968387e+00 + 3.5048828791331395e+00 3.1690658784263182e-01 -3.6232302449689620e+00 + 3.7216449299393433e+00 1.7797069894693696e-01 -4.0150971122279611e+00 + 3.8759221242870501e+00 -2.9009025433417435e-03 -4.3983533665472603e+00 + 3.9799396043427704e+00 -2.1887897781148080e-01 -4.7675885805843903e+00 + 4.0423145651676631e+00 -4.6049641641672423e-01 -5.1132991214070396e+00 + 4.0668674497740769e+00 -7.1250441777317430e-01 -5.4228414124002846e+00 + 4.0630704915116160e+00 -9.6707883128667316e-01 -5.6876785837210511e+00 + 4.0453546943649377e+00 -1.2290966301763109e+00 -5.9055314164392856e+00 + 4.0260495208705827e+00 -1.4995145117414119e+00 -6.0768473991317098e+00 + 4.0253066312504107e+00 -1.7427150873680013e+00 -6.2082907172349620e+00 + id 14133 + loc 2.2248829901218414e-01 3.0484478920698166e-02 379 + blend 0.0000000000000000e+00 + interp 4.1361366124373800e-01:4.1360952510712556e-01:3.0230060295215511e-01:2.3134151239041303e-01:9.8686112444795382e-01:1.8335539138938636e-01:2.0076476138024453e+00:2.6989555712043589e-01:2.5545665879756791e+00:2.3564274757539205e-01:3.0186970916036984e+00:3.0614497089247411e-01:3.5599392508888297e+00 + CVs 20 + 9.2642654118600246e-02 3.5110078951166745e-01 4.4130729353892562e-01 + 2.5112706511895860e-01 6.1685859406005550e-01 8.4046232837171642e-01 + 4.8872735375667575e-01 7.6741946811576878e-01 1.2340119160458616e+00 + 7.9080283196086654e-01 8.3925083864586036e-01 1.6325319923971653e+00 + 1.1187622760010805e+00 8.9851966956598606e-01 2.0376869282806140e+00 + 1.4264948813328355e+00 9.8244953900795018e-01 2.4709392295980379e+00 + 1.6730793736924403e+00 1.0966591898059108e+00 2.9606008123030869e+00 + 1.8248844401462760e+00 1.2395199270160038e+00 3.5152524368503562e+00 + 1.8576451804086482e+00 1.4010695259479296e+00 4.1132654014068013e+00 + 1.7723148025402589e+00 1.5500143208024273e+00 4.7157583059289179e+00 + 1.5930065270398699e+00 1.6406816557081698e+00 5.2848737284632410e+00 + 1.3494417245825754e+00 1.6273372995595135e+00 5.7809561970893286e+00 + 1.0715017426145801e+00 1.4868459346838456e+00 6.1684323241435575e+00 + 7.8151524281938989e-01 1.2294305257945966e+00 6.4324093507093849e+00 + 5.4488773870096296e-01 8.9245346426995331e-01 6.5551105938547005e+00 + 5.1260536597603801e-01 5.9128222398325203e-01 6.5534470426894158e+00 + 7.8197252307730303e-01 5.7357628202842115e-01 6.4888873477892410e+00 + 1.0346233323865168e+00 7.8463146480335366e-01 6.3971466006873596e+00 + 1.1932525786011818e+00 4.2869310810287065e-01 6.3730208663975336e+00 + id 14134 + loc 2.3963291943073273e-01 9.5337694883346558e-01 373 + blend 0.0000000000000000e+00 + interp 4.2581051361491379e-01:4.2580625550977763e-01:4.8691209357468290e-02:3.0592497714515371e-01:6.7466969305374569e-01:3.9230452922003478e-01:1.0672894854522132e+00:3.9477791157638159e-01:1.7291632192325950e+00:2.8160156720576723e-01:2.3538663232804438e+00:3.4387905120415901e-01:3.4487999740283160e+00 + CVs 20 + -3.9077128937270472e-01 3.3306957274335602e-01 -1.9404215802781191e-02 + -7.5657927610668330e-01 6.7820569457298285e-01 -4.9643012509436563e-02 + -1.0913119604733748e+00 1.0654522243845166e+00 -1.0923234985073599e-01 + -1.3883430247139521e+00 1.5148273073730638e+00 -2.2460967494607456e-01 + -1.6264927910830176e+00 2.0102012855419042e+00 -4.2161124269030509e-01 + -1.7961435786654563e+00 2.5136536491250658e+00 -7.1438409928798519e-01 + -1.9068356993219666e+00 2.9827332222663072e+00 -1.1022646166909749e+00 + -1.9842498754922733e+00 3.3789263748806944e+00 -1.5692933023532887e+00 + -2.0638788780061090e+00 3.6705278716572360e+00 -2.0836615713969708e+00 + -2.1732321085518431e+00 3.8506968229952121e+00 -2.5964373410623898e+00 + -2.3315122563372102e+00 3.9440380179338250e+00 -3.0694350022515393e+00 + -2.5591650816438296e+00 3.9772438724765093e+00 -3.4915635451849978e+00 + -2.8591803889270140e+00 3.9597975675199311e+00 -3.8584390009376301e+00 + -3.2014567467901824e+00 3.8936510796931825e+00 -4.1579212022754044e+00 + -3.5503121821614041e+00 3.7892601512980697e+00 -4.3841190535881340e+00 + -3.9074723858738341e+00 3.6710233558136016e+00 -4.5544209596292795e+00 + -4.3346298503340677e+00 3.5596428039355921e+00 -4.7258456761256022e+00 + -4.9494192879076913e+00 3.3911912417161947e+00 -4.9451440079817282e+00 + -5.2323471551893439e+00 3.1899223525654472e+00 -4.8346936255645021e+00 + id 14135 + loc 5.4099535942077637e-01 1.3383752107620239e-01 412 + blend 0.0000000000000000e+00 + interp 3.7586445083735665e-01:3.2464729663817937e-01:3.7688288038256712e-01:2.8280481816638070e-01:1.0117917248526707e+00:3.7586069219284829e-01:1.6042096434002568e+00:2.3109913606769836e-01:2.1434262643769633e+00:3.6039300982790118e-01:2.9756124168045321e+00:3.6467568689932317e-01:3.7293249809090567e+00 + CVs 20 + -5.2079519440135269e-01 1.5807717275805483e-01 1.8209959441313850e-01 + -9.1219991656920951e-01 2.4156595997933195e-01 3.4645187918759202e-01 + -1.2729164916221121e+00 2.9596861662549701e-01 5.0293815538985931e-01 + -1.6477915173300577e+00 3.3892538281861695e-01 6.5799515846826218e-01 + -2.0311465355732512e+00 3.6809246810565555e-01 8.0766303951763097e-01 + -2.4169471056278873e+00 3.8292332345224012e-01 9.4666362756792766e-01 + -2.7999892941570375e+00 3.8455880842772683e-01 1.0692005380768039e+00 + -3.1759771315588505e+00 3.7454551712264617e-01 1.1711362551807178e+00 + -3.5411818411763907e+00 3.5494479169213888e-01 1.2504598313517039e+00 + -3.8923531722205125e+00 3.2887604793035718e-01 1.3068020675770042e+00 + -4.2276162541434683e+00 2.9652447830153905e-01 1.3449437030924043e+00 + -4.5470487482898827e+00 2.4844655944662453e-01 1.3819585786587667e+00 + -4.8485443729417925e+00 1.7270810600149478e-01 1.4424648473469683e+00 + -5.1300270542587132e+00 6.9900706765170906e-02 1.5396863964302050e+00 + -5.3939409662223374e+00 -5.2983243914094036e-02 1.6744579624717202e+00 + -5.6346386839706000e+00 -1.8640546376970102e-01 1.8444385317650158e+00 + -5.8401744269508651e+00 -3.1585930662478390e-01 2.0433231185851763e+00 + -6.0089321579760835e+00 -4.3075770479993647e-01 2.2617882535107854e+00 + -6.1832987061569042e+00 -5.5093763600360512e-01 2.4909505363405913e+00 + id 14136 + loc 5.4215908050537109e-01 4.5776432752609253e-01 396 + blend 0.0000000000000000e+00 + interp 3.5494070761827101e-01:2.8625575922926855e-01:2.9869776589186436e-04:3.5082486300153976e-01:1.0066578236200114e+00:2.8315463381799100e-01:1.9995051001210773e+00:3.5493715821119487e-01:3.0047300237165717e+00 + CVs 20 + -7.5165394777787309e-01 2.1779445983224940e-01 2.8749750233349508e-01 + -1.2738959308763116e+00 2.6692538576151703e-01 4.9099610690320777e-01 + -1.7259445332579788e+00 2.4082000578148832e-01 6.5692019613529518e-01 + -2.1779743895810086e+00 1.8202289612730671e-01 8.0115265834588212e-01 + -2.6264816330844578e+00 9.2996093473562857e-02 9.2740115140163248e-01 + -3.0687159012523373e+00 -2.3975211506002903e-02 1.0461001136940755e+00 + -3.4965242627373856e+00 -1.6487721494835017e-01 1.1701609023737805e+00 + -3.8917476402444793e+00 -3.2376528078970890e-01 1.3079854108047089e+00 + -4.2371909223880575e+00 -4.9603193356008157e-01 1.4597279661573976e+00 + -4.5275392175272442e+00 -6.8257825758118340e-01 1.6206271681372593e+00 + -4.7559205707632497e+00 -8.8533588764296001e-01 1.7848309173434325e+00 + -4.9137003387895062e+00 -1.0951787945023965e+00 1.9581258621868722e+00 + -5.0024120319830905e+00 -1.3016171768101603e+00 2.1516948184367823e+00 + -5.0382666983185098e+00 -1.4997972144375036e+00 2.3698045883701351e+00 + -5.0424092386582853e+00 -1.6863943537187200e+00 2.6103985035709645e+00 + -5.0322141563744545e+00 -1.8522262264005478e+00 2.8740721946555530e+00 + -5.0208108860563856e+00 -1.9937213565976166e+00 3.1661982186678022e+00 + -5.0112016141851354e+00 -2.1351242562077974e+00 3.4855522508559904e+00 + -4.9073411379500111e+00 -2.4514757837366448e+00 3.8041304186038443e+00 + id 14137 + loc 9.9655523896217346e-02 9.5897424221038818e-01 378 + blend 0.0000000000000000e+00 + interp 4.4599105448522919e-01:3.7382720047260670e-01:3.1259473904666890e-01:3.5631210734344110e-01:9.5541393581489953e-01:2.2748810858239712e-01:1.3354956971987204e+00:3.4539735416790546e-01:2.1326746747516130e+00:4.1221728325815898e-01:2.9043391018704021e+00:4.4598659457468437e-01:3.0389051588194067e+00:2.9369182106719460e-01:3.7892460174278435e+00 + CVs 20 + 6.3774004935213791e-01 3.2264297077043658e-01 3.0631598911455626e-01 + 1.1859995551936251e+00 5.1343779364088893e-01 5.1590623298003524e-01 + 1.7212149538631887e+00 6.3595063546399300e-01 6.8952992361759380e-01 + 2.2718001837066053e+00 7.2972343338850942e-01 8.6947080464741378e-01 + 2.8160994146517551e+00 7.9936305047062350e-01 1.0741012072942464e+00 + 3.3335526261624517e+00 8.3113164169660592e-01 1.3117909183271517e+00 + 3.8132907515932115e+00 8.0829094670792689e-01 1.5827419919823962e+00 + 4.2487369192190352e+00 7.2046319708260786e-01 1.8814981300465241e+00 + 4.6335883022056272e+00 5.6466220804678380e-01 2.1976070824956326e+00 + 4.9648729110172658e+00 3.4210703644124685e-01 2.5152957209368960e+00 + 5.2421282548303578e+00 5.5651341383899045e-02 2.8113119372092470e+00 + 5.4619373217703480e+00 -2.9027227053188387e-01 3.0581996607001893e+00 + 5.6253024854004252e+00 -6.9667592069818296e-01 3.2424214335474613e+00 + 5.7588007439535680e+00 -1.1885274327950968e+00 3.3855322716219707e+00 + 5.9118657930498895e+00 -1.7936719849836296e+00 3.5348231937036232e+00 + 6.1380912148253248e+00 -2.4773837885375962e+00 3.7210855145291273e+00 + 6.4843747138673518e+00 -3.1466606851884515e+00 3.9124583171854992e+00 + 6.9329131860295217e+00 -3.7141098650965430e+00 4.0408052728768631e+00 + 7.2286484692473731e+00 -4.1961666041245831e+00 4.1616743829336418e+00 + id 14138 + loc 9.3416321277618408e-01 2.5194072723388672e-01 400 + blend 0.0000000000000000e+00 + interp 5.4024079881352960e-01:4.9767367567694359e-01:2.8565384798598936e-02:5.4023539640554152e-01:3.9820158140594519e-01:3.4385878846375512e-01:9.9305689128121055e-01:4.8106615555128468e-01:1.2339411110161682e+00:2.8157431276110817e-01:2.1786977453043819e+00:3.2258060747947248e-01:2.9235488871226742e+00:3.2784540369856063e-01:3.8121229061069708e+00 + CVs 20 + 8.6645573342116061e-02 7.3835376422328666e-02 1.8614460570260877e-01 + 1.7326136186958130e-01 1.6855557609178001e-01 3.9435687566155087e-01 + 2.4458340416265767e-01 2.7050511290265006e-01 6.0605956208558287e-01 + 2.9553430480361970e-01 3.7278772985746972e-01 8.1097270690234657e-01 + 3.2822285031409953e-01 4.7529172400684855e-01 1.0049978688473264e+00 + 3.4530314089709574e-01 5.7850663587003603e-01 1.1827551272389969e+00 + 3.4899444606916896e-01 6.8744941387365055e-01 1.3367772295844760e+00 + 3.4192674727652816e-01 8.1227096911557684e-01 1.4630883213112398e+00 + 3.2533784212986649e-01 9.6558480614842690e-01 1.5762687080976061e+00 + 2.9726507977657435e-01 1.1568514358020452e+00 1.7103415074276502e+00 + 2.6018185071892735e-01 1.3823054650558790e+00 1.9027411443245392e+00 + 2.2769598637582439e-01 1.6123665002870948e+00 2.1756330904650438e+00 + 2.1544547299097122e-01 1.8059236117593285e+00 2.5224651919117012e+00 + 2.3198189178518397e-01 1.9403137686406851e+00 2.9240863929294627e+00 + 2.8367918441279283e-01 2.0117468310042756e+00 3.3632839025242376e+00 + 3.8175326055287023e-01 2.0290340708965315e+00 3.8193654398200780e+00 + 5.3420089500341450e-01 2.0038481792427763e+00 4.2697496057255080e+00 + 7.2036783951930805e-01 1.9354934785959128e+00 4.6899329685589777e+00 + 8.2825572186396379e-01 1.8602887646379347e+00 4.9447751515448051e+00 + id 14139 + loc 7.3362451791763306e-01 7.9458463191986084e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7836774057551618e-01:4.7836295689811043e-01:2.9417747954396667e-05:3.6344433136191534e-01:4.6310981887610814e-01:2.7458023055626213e-01:1.0002178687378649e+00:2.9671413721501988e-01:1.7706787721231889e+00:4.4591928480303061e-01:2.5626366340461306e+00:3.3980175315517080e-01:3.4215316338094137e+00 + CVs 20 + 4.0811346997273394e-02 3.0923840395026142e-01 3.4752922734483938e-03 + 8.9108163230809972e-02 6.0832430947238936e-01 -1.1089425444977652e-02 + 1.4067357785285955e-01 9.0178713053397330e-01 -5.0193902813390756e-02 + 1.9429999067766868e-01 1.1939332759439489e+00 -1.1894365624695902e-01 + 2.5385953645934872e-01 1.4858166946273617e+00 -2.2126078663458637e-01 + 3.2328393796697613e-01 1.7743286636929190e+00 -3.6301890982382556e-01 + 4.0438084343953251e-01 2.0456366584480068e+00 -5.5519988993077996e-01 + 4.9301512277475734e-01 2.2786923529609870e+00 -8.0543901384392091e-01 + 5.8012947203827581e-01 2.4565010185305844e+00 -1.1108965050316317e+00 + 6.5598631883083935e-01 2.5681929663220551e+00 -1.4621443188580479e+00 + 7.1273122768769603e-01 2.6063614341875398e+00 -1.8471367666768503e+00 + 7.4541837098583796e-01 2.5657728332503345e+00 -2.2524633880258134e+00 + 7.5268625977993264e-01 2.4419679288663136e+00 -2.6643882248330413e+00 + 7.3784319243013363e-01 2.2293924439879338e+00 -3.0695284911567593e+00 + 7.0972646630041558e-01 1.9179360028650618e+00 -3.4529723232026837e+00 + 6.7919555468630921e-01 1.4815957574967760e+00 -3.7856434332136759e+00 + 6.4302455256379032e-01 8.7696205659473980e-01 -3.9689468641050101e+00 + 5.7487986790188539e-01 2.2850009240029290e-01 -3.8410092033174399e+00 + 5.1481341866047725e-01 -9.2804674225193562e-02 -3.7151359872688552e+00 + id 14140 + loc 8.1227535009384155e-01 4.6858611702919006e-01 380 + blend 0.0000000000000000e+00 + interp 3.5033740943587827e-01:2.6374336858555197e-01:5.8797136091834989e-01:2.9205475838330319e-01:1.5642928130918763e+00:2.5257741662207900e-01:2.1796082876970417e+00:2.5336493171106983e-01:3.2353146698446738e+00:3.5033390606178394e-01:3.9996502734927080e+00 + CVs 20 + 4.7647422365146225e-01 2.1222206432284935e-01 6.7791079087454986e-01 + 8.9974010548918537e-01 2.8767432784376690e-01 1.1491750403966612e+00 + 1.3214864901631309e+00 2.9303145058309543e-01 1.5682386278276625e+00 + 1.7617783305138071e+00 2.5551178868047075e-01 2.0011957539336511e+00 + 2.2001820528503546e+00 1.7641754974702906e-01 2.4495553408608313e+00 + 2.6107018360592873e+00 5.6386958156329214e-02 2.9074979415654427e+00 + 2.9695950092631032e+00 -1.0468456528798198e-01 3.3669209134109064e+00 + 3.2580030855094364e+00 -3.0509616129427419e-01 3.8190881351387191e+00 + 3.4737493923319462e+00 -5.3652773347503002e-01 4.2505114794458265e+00 + 3.6353317448038309e+00 -7.9174029108919486e-01 4.6406274734170205e+00 + 3.7541923327430213e+00 -1.0515510062645266e+00 4.9821633935178529e+00 + 3.8345021731878974e+00 -1.2999320504862206e+00 5.2874370057676963e+00 + 3.8895378535030440e+00 -1.5593683029303236e+00 5.5846856206940156e+00 + 3.9382496868764680e+00 -1.8957741325911766e+00 5.9074803987753555e+00 + 3.9944754816120023e+00 -2.3370359792684767e+00 6.2682978254727848e+00 + 4.0766467714506964e+00 -2.8316818159019141e+00 6.6630721986070318e+00 + 4.2142025626572854e+00 -3.3179158882012416e+00 7.0681345117383314e+00 + 4.4263312924693290e+00 -3.7603349453553645e+00 7.4460475046523236e+00 + 4.6220448996992314e+00 -4.1171356765261322e+00 7.7760303096209382e+00 + id 14141 + loc 1.7924764752388000e-01 1.7417614161968231e-01 399 + blend 0.0000000000000000e+00 + interp 4.8036893401489589e-01:3.7163305756554105e-01:6.6485569251553367e-01:4.8036413032555575e-01:1.2062274856082524e+00:4.0857646835754141e-01:1.9977603361671936e+00:4.5115418656751216e-01:2.2927695995046085e+00:3.8205874760020286e-01:2.8853436837240709e+00:3.4062232429361561e-01:3.2238164607036159e+00:4.1616832212017035e-01:3.9094671746954579e+00 + CVs 20 + -1.1311202099489159e-01 3.1958850622521967e-01 2.1379508562631555e-01 + -2.5431687470945780e-01 6.3233804826184503e-01 4.0418632306589608e-01 + -4.1981768174897827e-01 9.3182250545257406e-01 5.6983252899492287e-01 + -6.0126878725297139e-01 1.2133261225101597e+00 7.1882422589891759e-01 + -7.8979468316317347e-01 1.4750737644916123e+00 8.6384150783102409e-01 + -9.8184937307463149e-01 1.7158180188712739e+00 1.0149474737775359e+00 + -1.1802047260086301e+00 1.9324945893054073e+00 1.1778294126895097e+00 + -1.3896403789440781e+00 2.1189041696962176e+00 1.3569235208681254e+00 + -1.6132297670045397e+00 2.2646458977311932e+00 1.5566496348598491e+00 + -1.8499542393697159e+00 2.3564681226983017e+00 1.7775602907061043e+00 + -2.0929804833715711e+00 2.3762125302294326e+00 2.0096487753991745e+00 + -2.3252928278573011e+00 2.3052316172327734e+00 2.2303268803432594e+00 + -2.5233725919180574e+00 2.1430185692370043e+00 2.4183291903616677e+00 + -2.6638391310992793e+00 1.9031760901891677e+00 2.5638502677640753e+00 + -2.7445627830252386e+00 1.5991804917708929e+00 2.6820434301010194e+00 + -2.8009616989752857e+00 1.2484461929567954e+00 2.8215506636171237e+00 + -2.9082487627389217e+00 8.8263318507058286e-01 3.0155256045072374e+00 + -3.1809315974466985e+00 5.9143113206868847e-01 3.1789026859979699e+00 + -3.5978523783565932e+00 4.7522113758113371e-01 3.1568869415801584e+00 + id 14142 + loc 4.5313686132431030e-01 1.5880228579044342e-01 401 + blend 0.0000000000000000e+00 + interp 4.8079708396830778e-01:3.8791942702920368e-01:6.7780684161204818e-01:3.8938758309317956e-01:1.2600606876523053e+00:4.8079227599746810e-01:1.9811613452742978e+00:3.8254845889082523e-01:2.5321931786003655e+00:3.1313085469055402e-01:3.1093482763707287e+00:3.7078196485261455e-01:3.9494956691056435e+00 + CVs 20 + -2.0861131883538170e-01 2.4471216533709519e-01 1.0204425703870108e-01 + -4.2545958571735110e-01 4.9438225884580350e-01 2.2713637396691999e-01 + -6.3691918485585119e-01 7.4199696746850241e-01 3.6696833266978635e-01 + -8.3577408065462400e-01 9.7636857416245937e-01 5.1462278483054336e-01 + -1.0248670177142587e+00 1.1873472360011224e+00 6.6818171279587935e-01 + -1.2071704713371829e+00 1.3677136629995132e+00 8.2715970512873738e-01 + -1.3901829835147685e+00 1.5129547802132308e+00 9.9785963339353545e-01 + -1.5836944180298154e+00 1.6181045304959141e+00 1.1901282845980459e+00 + -1.7885541810016692e+00 1.6859284486565536e+00 1.4076309370631104e+00 + -2.0054552898898539e+00 1.7222320030401972e+00 1.6494685009432639e+00 + -2.2430374968268603e+00 1.7078960422786442e+00 1.9076313414339574e+00 + -2.4994584992319151e+00 1.6186631310863446e+00 2.1547008571839381e+00 + -2.7642725412461129e+00 1.4802183591005598e+00 2.3728887106216154e+00 + -3.0402671472168459e+00 1.3371141900890462e+00 2.5852783144024429e+00 + -3.3337797636705506e+00 1.1996967064665616e+00 2.8282808454996560e+00 + -3.6260243570803992e+00 1.0747172444647239e+00 3.0845823786059219e+00 + -3.8691704655139159e+00 1.0355870394017126e+00 3.2240904399908406e+00 + -4.0367994330749202e+00 1.0702002702571898e+00 3.1152546995192383e+00 + -4.2896013834434230e+00 1.2355567891907100e+00 3.3849784408157291e+00 + id 14143 + loc 5.5227267742156982e-01 3.7095490097999573e-01 402 + blend 0.0000000000000000e+00 + interp 4.7433177689935535e-01:4.7432703358158640e-01:5.4854678686656522e-01:3.1987639578674737e-01:1.0172256908495907e+00:4.1432337402413050e-01:1.8716043912594988e+00:3.2169588818051315e-01:2.4305010594289027e+00:3.1174868196173583e-01:3.0528015088005582e+00:3.0777848001792768e-01:3.9681910220462764e+00 + CVs 20 + 1.9608099346808786e-01 3.5053706361352271e-01 1.3149880414935955e-01 + 3.9645776579241720e-01 7.2650456114800543e-01 3.2134482001906772e-01 + 5.9344813401598684e-01 1.1008236211779052e+00 5.6034992391266003e-01 + 8.1932185854487394e-01 1.4300653631058484e+00 8.2386420639257341e-01 + 1.1081571024759209e+00 1.6668219272693205e+00 1.0817299807365823e+00 + 1.4529054057733901e+00 1.7769761790275302e+00 1.3162875100523310e+00 + 1.8153547847831368e+00 1.7509489438377057e+00 1.5307205471617809e+00 + 2.1518724926834762e+00 1.5988077642030363e+00 1.7420283578452471e+00 + 2.4135408842496857e+00 1.3332319091725751e+00 1.9547678378281352e+00 + 2.5441044091318625e+00 9.7916465446738110e-01 2.1399918047466926e+00 + 2.5686307366960577e+00 5.8640261115121861e-01 2.2784310932703176e+00 + 2.6241871953728109e+00 1.5148758130771744e-01 2.4222073538465270e+00 + 2.8224510966759997e+00 -3.3872275233310811e-01 2.6170894240677951e+00 + 3.2181969797253775e+00 -8.1145236685953104e-01 2.8616339981421319e+00 + 3.7739822332602868e+00 -1.1661331489199702e+00 3.1419090422045950e+00 + 4.3568730776896620e+00 -1.3852670039695920e+00 3.4689594377975808e+00 + 4.8697481353625651e+00 -1.5157683830057431e+00 3.8620443623044629e+00 + 5.3007938630058202e+00 -1.5798281591874821e+00 4.2789641224810699e+00 + 5.7021528749686441e+00 -1.5941944096019225e+00 4.5901319896989587e+00 + id 14144 + loc 3.2684367895126343e-01 3.7639674544334412e-01 1069 + blend 0.0000000000000000e+00 + interp 3.5005135981072538e-01:3.2354994257143227e-01:9.5818456861595824e-01:3.3825421470435557e-01:1.4221060618025110e+00:2.9927116435828699e-01:2.0177764406054632e+00:3.2485530295619702e-01:2.8270077602972030e+00:3.5004785929712728e-01:3.1284871153688258e+00:2.9917456258208230e-01:3.9927919783816255e+00 + CVs 20 + -2.0961911668446384e-01 2.6667908325561634e-01 2.4195336255430563e-02 + -4.1403063345909852e-01 4.9626592629761612e-01 1.8609390555587385e-02 + -6.0882092496417228e-01 7.0415704932158518e-01 4.2781110419402024e-03 + -7.9278147036019642e-01 8.9723774317577087e-01 -1.1275320490129470e-02 + -9.6348050057840151e-01 1.0679064423954019e+00 -3.7820992787158669e-02 + -1.1063753937253697e+00 1.2060443165118466e+00 -7.8520997760241351e-02 + -1.1947867104685537e+00 1.3133160511121862e+00 -1.2910035711931434e-01 + -1.2099177577429709e+00 1.4185651158678834e+00 -1.8801807527655201e-01 + -1.1746454525802650e+00 1.5709723548995940e+00 -2.5286906922869068e-01 + -1.1757337406653825e+00 1.7762645370493457e+00 -2.9625620757861171e-01 + -1.2811510538900133e+00 1.9593088570023707e+00 -2.7745055724953938e-01 + -1.4868643704307782e+00 2.0513742631985843e+00 -1.8101804436725688e-01 + -1.7687774372249812e+00 2.0309149778260047e+00 -1.4535499480502700e-02 + -2.1130353560118795e+00 1.9037978993512408e+00 1.9870197339194406e-01 + -2.5162347147955417e+00 1.6876367171153783e+00 4.2137323822841233e-01 + -2.9790187685743899e+00 1.4047480384713640e+00 6.1673690584094942e-01 + -3.5003311608666587e+00 1.0696830783287825e+00 7.4848135647540470e-01 + -4.0398752950475902e+00 7.4356148488214657e-01 7.1261718500489224e-01 + -4.3306118463113332e+00 7.3080213682727890e-01 4.0007519367110433e-01 + id 14145 + loc 6.4127284288406372e-01 2.4136008322238922e-01 395 + blend 0.0000000000000000e+00 + interp 3.6927779745531192e-01:2.8306037693594183e-01:7.3660233635143557e-01:3.0338880178220368e-01:1.3165795510649347e+00:3.3016797081529797e-01:2.0009386970813603e+00:3.6927410467733740e-01:2.7802454224550210e+00:3.0585997840585999e-01:3.2371625811363032e+00:3.0795543296469624e-01:3.9936968950085956e+00 + CVs 20 + -4.1049912316013432e-01 3.3474925415459578e-01 3.6019609646137829e-01 + -7.6272345319582491e-01 5.7666357057367301e-01 6.7423673156701991e-01 + -1.1160910092098266e+00 7.6884619981891489e-01 9.7134250677604517e-01 + -1.4998840489554470e+00 9.2651602077099227e-01 1.2647856164150468e+00 + -1.9153638833744679e+00 1.0466264361182365e+00 1.5502287664956391e+00 + -2.3604005434453503e+00 1.1284256760021649e+00 1.8274525675624047e+00 + -2.8333846739293893e+00 1.1683578879067569e+00 2.0985824017700749e+00 + -3.3318853635658692e+00 1.1506656379432381e+00 2.3602654878304916e+00 + -3.8458181651115404e+00 1.0523900189910067e+00 2.6065039644893830e+00 + -4.3548997494733293e+00 8.5738099432618364e-01 2.8379658192545021e+00 + -4.8383829933146423e+00 5.6869573356312175e-01 3.0504948915601813e+00 + -5.2860392722625500e+00 2.0858794450020790e-01 3.2275726748242173e+00 + -5.6975347857138434e+00 -1.9639198397516644e-01 3.3603605501493412e+00 + -6.0748155723980997e+00 -6.3121185252452738e-01 3.4671382812742055e+00 + -6.4116619605073577e+00 -1.0965779079393987e+00 3.5766841933357529e+00 + -6.6833522817467106e+00 -1.5959902030890598e+00 3.6904347814004304e+00 + -6.8622974254545257e+00 -2.1197163096509835e+00 3.7858102181737880e+00 + -6.9632312243779033e+00 -2.6383014492277601e+00 3.8607727055264460e+00 + -7.1528388001418666e+00 -3.0238906637016099e+00 3.9395203120188667e+00 + id 14146 + loc 6.0329145193099976e-01 8.8738042116165161e-01 379 + blend 0.0000000000000000e+00 + interp 5.9023403413430031e-01:3.2485714943319477e-01:1.5038178055733076e-01:4.7841999369975308e-01:8.5649157387756503e-01:4.5497687469523801e-01:1.0418530453649124e+00:4.8543576854258497e-01:1.8846629084789726e+00:5.9022813179395894e-01:2.4091670503489064e+00:4.9699896619304784e-01:2.8959127128237991e+00:4.0200382180812777e-01:3.3117354352419159e+00 + CVs 20 + -2.6369154653043814e-01 3.8864322125242651e-01 2.6994644930210032e-01 + -5.1467373980216602e-01 7.1149155152071508e-01 5.5305814962159316e-01 + -7.7924873054614785e-01 9.8733269110055244e-01 8.6009716130710878e-01 + -1.0743185316267296e+00 1.2492803682340887e+00 1.1790868266482715e+00 + -1.4149148498845447e+00 1.5154558259547806e+00 1.4763424802449228e+00 + -1.8183501426211137e+00 1.7650577482975272e+00 1.7133718161219544e+00 + -2.2864527979012004e+00 1.9536554888011159e+00 1.8605496782387361e+00 + -2.7944747722589534e+00 2.0500969554576827e+00 1.9056280048264378e+00 + -3.3014720802594217e+00 2.0472616174545557e+00 1.8527461155739164e+00 + -3.7670073624531826e+00 1.9559058144811008e+00 1.7180417071246019e+00 + -4.1503651732130304e+00 1.7929015246093534e+00 1.5299399757888181e+00 + -4.4106400192613275e+00 1.5823960315512953e+00 1.3365640287421343e+00 + -4.5537830122977478e+00 1.3670073522977195e+00 1.1815720919513801e+00 + -4.6479556935358364e+00 1.1720975141765195e+00 1.0646688106560009e+00 + -4.7475263967185519e+00 9.8739344068368284e-01 9.6420634759877921e-01 + -4.8767464341089966e+00 7.9159000879863184e-01 8.7297484316959073e-01 + -5.0593681911190380e+00 5.6318441391099006e-01 8.0950652564562586e-01 + -5.2944456004302607e+00 3.3398103168438142e-01 8.1175700551810293e-01 + -5.4358831822343365e+00 2.7469170267680987e-01 8.6870314244695901e-01 + id 14147 + loc 3.4706780314445496e-01 6.2453347444534302e-01 412 + blend 0.0000000000000000e+00 + interp 4.7651660564032039e-01:4.7651184047426398e-01:5.9057210270684779e-02:3.3414904913998561e-01:9.5417397279707761e-01:3.5382539524576750e-01:1.5068662626817551e+00:3.4379542148196585e-01:2.0251595695916302e+00:3.0538565144756724e-01:2.9653601502249982e+00:3.6545475513663944e-01:3.5782671517132396e+00 + CVs 20 + 7.1894813887946807e-01 1.3318227919971687e-01 -1.8525989723150399e-01 + 1.2045935006548514e+00 1.2643709242336262e-01 -3.7356356470887880e-01 + 1.6496497722746049e+00 7.3147032856303529e-02 -5.6069932592184524e-01 + 2.1231006559512182e+00 5.7492236145667563e-03 -7.4610959553792577e-01 + 2.6188347421899736e+00 -7.5097228795440563e-02 -9.2455194899002568e-01 + 3.1325979138368503e+00 -1.6701697158537776e-01 -1.0887222461373947e+00 + 3.6588813434304566e+00 -2.6783733976140756e-01 -1.2322932887469467e+00 + 4.1905105062809165e+00 -3.7698710218379250e-01 -1.3525503833980705e+00 + 4.7221987395434208e+00 -4.9479944516659269e-01 -1.4476072020263298e+00 + 5.2467767478058365e+00 -6.2237560882265686e-01 -1.5163884483136820e+00 + 5.7367547312035878e+00 -7.6527041728948264e-01 -1.5770367028841228e+00 + 6.1438430311621701e+00 -9.3014762089739533e-01 -1.6806295992314972e+00 + 6.4523100427803115e+00 -1.1087074136078421e+00 -1.8577016928819190e+00 + 6.7100852682886112e+00 -1.2955447246735889e+00 -2.0801668668687485e+00 + 6.9548301959352123e+00 -1.4992186470509374e+00 -2.3216253981652493e+00 + 7.1758437054857058e+00 -1.7081582841370537e+00 -2.5803815854243597e+00 + 7.3629344379953610e+00 -1.8981244620704034e+00 -2.8569181381747519e+00 + 7.5398889060144691e+00 -2.0687813716109629e+00 -3.1424992526859956e+00 + 7.8605259692855363e+00 -2.3183156847122803e+00 -3.3821554849216127e+00 + id 14148 + loc 1.0942146927118301e-01 5.8512818813323975e-01 396 + blend 0.0000000000000000e+00 + interp 4.6153220854038002e-01:3.3230806510901889e-01:1.0928653587167769e-03:3.4542473958755560e-01:6.6376847661466931e-01:3.2389732699285817e-01:1.1058094847630651e+00:4.6152759321829462e-01:1.8953476984174746e+00:2.9897700572673702e-01:2.3485600488316001e+00:3.1696544932366422e-01:3.1328948419171594e+00 + CVs 20 + 8.1916707943984102e-01 1.9529229935712339e-01 -2.8603922729569758e-01 + 1.4131132560753281e+00 2.4920408855207940e-01 -5.2832468977806779e-01 + 1.9523033754967252e+00 2.6280205066408091e-01 -7.5618173239364928e-01 + 2.5057347218322601e+00 2.7404543266745596e-01 -9.8457868831343154e-01 + 3.0669306107039742e+00 2.7376439054594059e-01 -1.2151418722804666e+00 + 3.6293858046743526e+00 2.5370337356423545e-01 -1.4528481402757931e+00 + 4.1886932320843648e+00 2.0496254829018135e-01 -1.7033214472549383e+00 + 4.7418002306562688e+00 1.1183237547885594e-01 -1.9673599757798157e+00 + 5.2798583644649488e+00 -4.6274506304873952e-02 -2.2411592091291634e+00 + 5.7786880114257357e+00 -2.8585460063069212e-01 -2.5205883229355317e+00 + 6.2056345160879935e+00 -6.1155710848519695e-01 -2.8005969554041767e+00 + 6.5428535884099253e+00 -1.0186352713131761e+00 -3.0685777044969829e+00 + 6.7901330596310565e+00 -1.4986800895432413e+00 -3.3041997444539719e+00 + 6.9441961030943817e+00 -2.0315865909701389e+00 -3.4886138829643474e+00 + 6.9982002215722261e+00 -2.5839118396159115e+00 -3.6118970506935888e+00 + 6.9541651824030204e+00 -3.1277717766362594e+00 -3.6694796802602161e+00 + 6.8236680463347916e+00 -3.6445618466583332e+00 -3.6571850208196226e+00 + 6.6290757402642777e+00 -4.1103454651775380e+00 -3.5814333335354780e+00 + 6.5033193893919901e+00 -4.5518389484438728e+00 -3.5031241621615274e+00 + id 14149 + loc 9.9326157569885254e-01 2.4190187454223633e-01 393 + blend 0.0000000000000000e+00 + interp 4.2160122843316805e-01:3.9915519351974038e-01:3.0135439852400914e-01:1.9891081443536543e-01:1.0975814151139838e+00:3.4225117592937448e-01:1.9983426136204661e+00:3.7522608986593725e-01:2.0233107255789564e+00:4.2159701242088377e-01:2.7866079779001081e+00:3.6645698465532356e-01:3.2961487716487183e+00:3.4961338865120112e-01:3.9999923820223553e+00 + CVs 20 + 2.1725456926953846e-01 3.0911857664257253e-01 2.6469125288951728e-01 + 4.3416805292207861e-01 6.1760853292379836e-01 4.7520077378585918e-01 + 6.4659169976766506e-01 9.4512556561813754e-01 6.5122233629854676e-01 + 8.5440915472534895e-01 1.2981180292962362e+00 8.0907352532418342e-01 + 1.0650874118614959e+00 1.6663476250608755e+00 9.7537257880717476e-01 + 1.2856545395513561e+00 2.0319844209911895e+00 1.1857266705180458e+00 + 1.5109297398941892e+00 2.3809405192434423e+00 1.4634420100682999e+00 + 1.7304806607705836e+00 2.7069120864498051e+00 1.8175394599443351e+00 + 1.9454109481392010e+00 3.0080063487763833e+00 2.2484276865664361e+00 + 2.1681155228974682e+00 3.2748833003639146e+00 2.7585537725667102e+00 + 2.4165440180108702e+00 3.4811310648226632e+00 3.3504583469776597e+00 + 2.7101634949918036e+00 3.5841966322039536e+00 4.0164933681147463e+00 + 3.0530171560914301e+00 3.5324815502324296e+00 4.7305385311589294e+00 + 3.4258545367619186e+00 3.2836328103305097e+00 5.4440381673608957e+00 + 3.7949306207615843e+00 2.8254429165357631e+00 6.0752206147203101e+00 + 4.1136872745291599e+00 2.2080388115380694e+00 6.5114748736407044e+00 + 4.3713060969874746e+00 1.5414068836749921e+00 6.6876234921975115e+00 + 4.6365021232948962e+00 9.3979470090958328e-01 6.5891521095277561e+00 + 4.9590306485757747e+00 5.3678519435014138e-01 6.1804482266946241e+00 + id 14150 + loc 2.0375308394432068e-01 8.4205979108810425e-01 373 + blend 0.0000000000000000e+00 + interp 4.2581051361491379e-01:4.0636845025510665e-01:7.8048624776682063e-03:2.9087262999784624e-01:8.4421836951793228e-01:2.8762967569338604e-01:1.7045021795649899e+00:4.2580625550977763e-01:2.0504364001472899e+00:3.9516933075255745e-01:2.7844558190574373e+00:2.7272968725388291e-01:3.3404784428858694e+00 + CVs 20 + -3.8184066928013971e-01 4.8319496352577257e-01 -1.4194554558083022e-01 + -6.5587239214775828e-01 9.3333430827866926e-01 -3.0017777374065657e-01 + -8.2700562450061699e-01 1.3678113363001809e+00 -4.7904412387771578e-01 + -9.0905110841025194e-01 1.7986373049992512e+00 -6.8201213155618534e-01 + -9.1083919428428384e-01 2.2217643468220931e+00 -9.1360663416112931e-01 + -8.5737159349744618e-01 2.6311562792037133e+00 -1.1825486470268849e+00 + -7.8375785912808527e-01 3.0248384823020875e+00 -1.5086821230802916e+00 + -7.2796232663653426e-01 3.3952868362759343e+00 -1.9165603404179776e+00 + -7.3338654241890344e-01 3.7156760410843699e+00 -2.4176122131338813e+00 + -8.4101289131887480e-01 3.9580149352748943e+00 -2.9884118198566969e+00 + -1.0836953662957278e+00 4.1203568499898147e+00 -3.5748667867729327e+00 + -1.4850957354486811e+00 4.2161338092865126e+00 -4.1056056736077968e+00 + -2.0393462820685788e+00 4.2420633078358865e+00 -4.5295405597624541e+00 + -2.7072022065691672e+00 4.1701443175833983e+00 -4.8186238414704610e+00 + -3.4409347878573682e+00 3.9891950449718059e+00 -4.9495507643668208e+00 + -4.2129546545603205e+00 3.7161932701227625e+00 -4.9380832609584759e+00 + -5.0207516108233907e+00 3.3603708301983830e+00 -4.8348533156375684e+00 + -5.8073471448581762e+00 2.8839440892845207e+00 -4.6098613342926065e+00 + -6.2139880891819281e+00 2.4614771734678293e+00 -4.1242030757061077e+00 + id 14151 + loc 2.3821832239627838e-01 2.3169265687465668e-01 378 + blend 0.0000000000000000e+00 + interp 4.3056217994982293e-01:3.1744594158362965e-01:7.4050897206725730e-01:3.7411075790502357e-01:1.2087951815728732e+00:3.2508235128236929e-01:2.1065285135820808e+00:4.3055787432802345e-01:3.0223700332980830e+00:3.4457183363151145e-01:3.9933261886972389e+00 + CVs 20 + 2.0578840405425558e-01 3.4122312764567553e-01 -2.9921012986944318e-01 + 3.8246883294982165e-01 6.3874623150936960e-01 -5.6435370253355044e-01 + 5.6100773122943703e-01 9.1055493655580844e-01 -8.2076372285658306e-01 + 7.5550210846051891e-01 1.1692367591581672e+00 -1.0752606572535752e+00 + 9.6767171547852260e-01 1.4214123149934594e+00 -1.3234576912917340e+00 + 1.2035351669617957e+00 1.6693564727064634e+00 -1.5705982434706696e+00 + 1.4672110624395642e+00 1.9009085505842416e+00 -1.8284663996062278e+00 + 1.7590783790045399e+00 2.0969894848490829e+00 -2.1053627572136837e+00 + 2.0828980494451992e+00 2.2396027557673812e+00 -2.4014829187326567e+00 + 2.4408031302152757e+00 2.3105451648261122e+00 -2.7083285440572964e+00 + 2.8153663901968082e+00 2.3005365933601123e+00 -3.0198622045633150e+00 + 3.1759650996813718e+00 2.2093706456450928e+00 -3.3343750219594122e+00 + 3.4874120200604741e+00 2.0299205957890369e+00 -3.6385757717174032e+00 + 3.7031137235711094e+00 1.7507894812208207e+00 -3.9047103837769508e+00 + 3.8027171035294369e+00 1.3820645245474865e+00 -4.1207098003778846e+00 + 3.8332728307648418e+00 9.5957685617970689e-01 -4.2978912983735871e+00 + 3.8596774936980740e+00 5.4260529875733710e-01 -4.4418362562242821e+00 + 3.8993291401071541e+00 1.8855101639544980e-01 -4.5768852971660579e+00 + 3.9055599637347562e+00 -6.6835828701735434e-02 -4.8705649484488607e+00 + id 14152 + loc 2.3900705575942993e-01 7.8354382514953613e-01 401 + blend 0.0000000000000000e+00 + interp 3.8959672337996465e-01:3.8959282741273088e-01:2.7769784006149800e-01:2.5418388613804971e-01:9.0326946761050153e-01:3.6824261940280051e-01:1.5678151477136009e+00:2.9331389838213551e-01:2.0300726231391746e+00:3.8575455283236015e-01:2.9969177255479762e+00:3.4970477964164215e-01:3.7926671018087519e+00 + CVs 20 + -3.8594249911230755e-02 2.9775701757511791e-01 -2.3842755874028429e-01 + -5.8926266101854113e-02 6.0103713261682934e-01 -5.1408717472373677e-01 + -6.8152676117749555e-02 8.9741776210237134e-01 -8.0674701162475526e-01 + -6.9062690224395984e-02 1.1664165112971783e+00 -1.1076966480823118e+00 + -6.9307700075275147e-02 1.4015018099648366e+00 -1.4218190484037747e+00 + -9.1337382486530783e-02 1.6129313814896569e+00 -1.7584933634402609e+00 + -1.6571325181731411e-01 1.8063271316325378e+00 -2.1152404614405702e+00 + -3.1391073253275070e-01 1.9753758872375289e+00 -2.4734343893306208e+00 + -5.3955051178906122e-01 2.1090899607524185e+00 -2.8082395516202108e+00 + -8.2961702888486744e-01 2.2007943637500151e+00 -3.0967278825618560e+00 + -1.1593400547324553e+00 2.2539756871575989e+00 -3.3227719776734226e+00 + -1.5004007882732560e+00 2.2807566173867686e+00 -3.4783344887303120e+00 + -1.8438250865453303e+00 2.2890885740134319e+00 -3.5710240375503854e+00 + -2.2031566542353520e+00 2.2663485074791518e+00 -3.6247951899586615e+00 + -2.5739437755472476e+00 2.1994327701778218e+00 -3.6473488709301560e+00 + -2.9199451712459807e+00 2.0996697070026813e+00 -3.6012737080756891e+00 + -3.2230516616716205e+00 1.9678378157810958e+00 -3.4555572729790645e+00 + -3.5329011352312705e+00 1.7761661979062906e+00 -3.3301876544175517e+00 + -3.8462830893096598e+00 1.5875193443450326e+00 -3.5624706076815760e+00 + id 14153 + loc 6.9674360752105713e-01 1.5739347040653229e-01 402 + blend 0.0000000000000000e+00 + interp 3.8688250394436463e-01:3.1416911555975546e-01:2.6161629747237325e-01:3.8687863511932519e-01:1.0994441032214246e+00:3.1797062736034343e-01:2.0075181868039489e+00:3.1939769322907108e-01:2.9939298716993834e+00:3.8529733563110680e-01:3.7346864184510848e+00 + CVs 20 + 3.1955851547522757e-01 3.4044376460418879e-01 1.4965999509511174e-01 + 6.2796749962368337e-01 6.7927093718412290e-01 3.2152854860311841e-01 + 9.2547066165748948e-01 9.9390286831563057e-01 5.0993801939871430e-01 + 1.2201312180907142e+00 1.2508959180225432e+00 6.9046489498996499e-01 + 1.5218434664842397e+00 1.4314202064201389e+00 8.4376534705895989e-01 + 1.8395387419343217e+00 1.5375932992840242e+00 9.7198597749724847e-01 + 2.1817941307271731e+00 1.5732522601314769e+00 1.0904902396229179e+00 + 2.5505602888489038e+00 1.5318122882659930e+00 1.2204517456535153e+00 + 2.9192434862193957e+00 1.4021898818037311e+00 1.3800300449721563e+00 + 3.2314138487007087e+00 1.1862827004112637e+00 1.5670162074971621e+00 + 3.4393901017679873e+00 9.0100750556485154e-01 1.7599980791956291e+00 + 3.5474465097273105e+00 5.5539468316549256e-01 1.9499468391124122e+00 + 3.6097567004802458e+00 1.5179940599545427e-01 2.1420770977575057e+00 + 3.7032520516395557e+00 -2.9481056899403135e-01 2.3393689704604164e+00 + 3.8884533087800661e+00 -7.5433148961667706e-01 2.5401107457789425e+00 + 4.1797206925375994e+00 -1.1846001215910040e+00 2.7354860499306266e+00 + 4.5439977255494455e+00 -1.5569026849454244e+00 2.9155211536043080e+00 + 4.9284886678307656e+00 -1.8696180852399773e+00 3.0792032652129753e+00 + 5.2222587498506305e+00 -2.0962297418802436e+00 3.2081168525549542e+00 + id 14154 + loc 5.1567620038986206e-01 8.6942994594573975e-01 400 + blend 0.0000000000000000e+00 + interp 3.8850494747319120e-01:3.3324451364560348e-01:6.2095634861973359e-01:3.0050307570805002e-01:1.0302950188115276e+00:3.8850106242371646e-01:1.6526702960353292e+00:3.2690048991897686e-01:2.1147691419448433e+00:3.0616685904117097e-01:3.0404786117342981e+00:2.6788115513717914e-01:3.9718355461504808e+00 + CVs 20 + -8.8151050675286377e-02 4.0031294416586111e-01 -4.0770098973788604e-01 + -1.6938847880273189e-01 7.4427338348526140e-01 -8.1032609497352037e-01 + -2.2065337081438727e-01 1.0178403655294546e+00 -1.2304155316214971e+00 + -2.5832312943111069e-01 1.2220703336565424e+00 -1.6684723560279555e+00 + -2.8778478465773211e-01 1.3504019990317295e+00 -2.1041995447306010e+00 + -3.0163556314809481e-01 1.4005044234392461e+00 -2.5103055791547479e+00 + -2.9435286209811296e-01 1.3795149852868263e+00 -2.8622710718841153e+00 + -2.6959426915919371e-01 1.3050382529772233e+00 -3.1445634738017469e+00 + -2.3908727892731765e-01 1.2023122484426387e+00 -3.3558252185556467e+00 + -2.1817112695278124e-01 1.0944640327345561e+00 -3.5102096090033230e+00 + -2.1936065954892014e-01 9.9391097937804340e-01 -3.6463804271026805e+00 + -2.4060775462935352e-01 8.9638172296732921e-01 -3.8043928659259700e+00 + -2.7045049688475808e-01 7.9752465664367045e-01 -3.9806613190145228e+00 + -2.9612839662961854e-01 7.1128183163057668e-01 -4.1444418087490540e+00 + -3.0114291470655191e-01 6.4551130620329067e-01 -4.2944612108252329e+00 + -2.8183285681073589e-01 5.5901641525229984e-01 -4.4668396501973691e+00 + -2.6838811136052243e-01 3.9936286665431053e-01 -4.6786797037167638e+00 + -3.1042194796624739e-01 1.7025237808911053e-01 -4.9090251144424695e+00 + -5.0060174806521052e-01 -8.5834947150581264e-02 -5.0935251509543589e+00 + id 14155 + loc 6.5564554929733276e-01 7.4032485485076904e-01 395 + blend 0.0000000000000000e+00 + interp 4.3366357167961406e-01:2.7223492399254634e-01:2.4533272562193387e-01:3.2672753111186109e-01:9.9943597635663173e-01:2.9437687429514015e-01:1.6396386562231613e+00:4.3365923504389731e-01:2.3085285575790069e+00:2.8452628456122003e-01:3.0683627508474616e+00:3.3313139255002439e-01:3.8309418544721652e+00 + CVs 20 + 5.2866291165124002e-01 9.8170957157313277e-02 -4.4056896642698928e-01 + 9.8049145581189856e-01 1.2893505275702843e-01 -7.8680403378282604e-01 + 1.4253628298559351e+00 1.4304514065837393e-01 -1.0914379751667820e+00 + 1.8937850798081315e+00 1.5694988497030615e-01 -1.3738996552496172e+00 + 2.3790327750429268e+00 1.6199390882495734e-01 -1.6313780837836565e+00 + 2.8727065484926912e+00 1.4744350099053993e-01 -1.8655549745765416e+00 + 3.3648427254233608e+00 1.0207171861558773e-01 -2.0780977378492498e+00 + 3.8433399605164773e+00 1.4692260505237975e-02 -2.2630067480631348e+00 + 4.2979937013067495e+00 -1.2103081636614643e-01 -2.4108681805473893e+00 + 4.7249144445304720e+00 -3.0554981935371073e-01 -2.5242991699347437e+00 + 5.1244769610853593e+00 -5.3684584199646057e-01 -2.6169226005396711e+00 + 5.4973909561524685e+00 -8.0454262254976960e-01 -2.6924022647819061e+00 + 5.8442607828300250e+00 -1.0889371491706195e+00 -2.7433638804187344e+00 + 6.1677696060168614e+00 -1.3754094062668769e+00 -2.7715721181891704e+00 + 6.4698028471186912e+00 -1.6632359304696327e+00 -2.7915387752173135e+00 + 6.7448982306907421e+00 -1.9513228450509552e+00 -2.8109818526369184e+00 + 6.9834012782354442e+00 -2.2243456910700843e+00 -2.8250553276645620e+00 + 7.1817192757081862e+00 -2.4684296714916458e+00 -2.8331167434353759e+00 + 7.3429266880722830e+00 -2.7114379063869074e+00 -2.8515114618028599e+00 + id 14156 + loc 2.7781876921653748e-01 5.8200705051422119e-01 379 + blend 0.0000000000000000e+00 + interp 4.4248588220831758e-01:2.1929583373055139e-01:4.4560929686077166e-04:3.8503578402177269e-01:9.9395070799598328e-01:2.8443077763858676e-01:1.9809238746058242e+00:4.4248145734949551e-01:2.9175780568535301e+00:2.9636965631391177e-01:3.2724520935336914e+00 + CVs 20 + -2.2034677064244132e-01 4.3589885905631109e-01 2.0039410079104308e-01 + -4.2760464234790602e-01 8.4115620718454964e-01 4.6588689330267641e-01 + -6.2981004335559598e-01 1.1767845893571827e+00 8.0173890538700943e-01 + -8.0985806395236404e-01 1.4627713492016783e+00 1.1476661559431411e+00 + -9.6951297190876540e-01 1.7421445323993816e+00 1.4447015184212906e+00 + -1.1347711758171311e+00 2.0278369168971810e+00 1.6722641951057766e+00 + -1.3217945768744634e+00 2.3086177301611244e+00 1.8296923983173203e+00 + -1.5273876230365855e+00 2.5689547857279740e+00 1.9307661292089442e+00 + -1.7582722059694467e+00 2.8056029857942191e+00 2.0061926812634283e+00 + -2.0293685236984271e+00 3.0187293927232695e+00 2.0806107938780931e+00 + -2.3533576586842173e+00 3.2055276570885414e+00 2.1666568044548513e+00 + -2.7335921434895565e+00 3.3594179234167352e+00 2.2644740466302871e+00 + -3.1541288900953974e+00 3.4647662539463546e+00 2.3667958011513099e+00 + -3.6010552738107604e+00 3.5017814336785573e+00 2.4642543641461505e+00 + -4.0745392380095140e+00 3.4497273783570650e+00 2.5355437456456476e+00 + -4.5256866290146940e+00 3.3041818513246879e+00 2.5508220224647493e+00 + -4.8436100274520815e+00 3.1794380677060907e+00 2.5113312757185264e+00 + -5.0210771185629222e+00 3.1717293516978495e+00 2.4068051992213468e+00 + -5.1434065929027479e+00 2.9229818679366182e+00 2.7109334177731332e+00 + id 14157 + loc 6.6826492547988892e-02 8.1437671184539795e-01 412 + blend 0.0000000000000000e+00 + interp 4.5568876837872596e-01:4.5568421149104221e-01:9.8901428482388920e-02:2.5398981198530513e-01:9.9592858360693437e-01:3.5049391357201670e-01:2.0261425862267801e+00:3.9597209325936600e-01:2.7945336885879044e+00:3.5442055724166643e-01:3.1928780453649144e+00:3.7378694188048289e-01:3.9087103548339108e+00 + CVs 20 + 7.8951326097099772e-01 2.0508590169456803e-01 -1.5535854672414601e-01 + 1.2873869156089321e+00 2.7741775778998007e-01 -3.2470173135428021e-01 + 1.7169452654015547e+00 3.0145558219484392e-01 -4.9864483714831243e-01 + 2.1710828381001779e+00 3.1143900517572243e-01 -6.7283613123429931e-01 + 2.6440370750034923e+00 2.9696209854605632e-01 -8.3784770900345928e-01 + 3.1275640558419382e+00 2.5298994296675559e-01 -9.8073582898818457e-01 + 3.6115123472801582e+00 1.8327131932790630e-01 -1.0882750397952647e+00 + 4.0844177190633726e+00 9.4867014130297633e-02 -1.1507821795435038e+00 + 4.5360585478375173e+00 -7.5955659094804062e-03 -1.1631054805234076e+00 + 4.9576988134082214e+00 -1.1861447850681794e-01 -1.1237524354660844e+00 + 5.3364593956889266e+00 -2.2758352662643588e-01 -1.0333303615936020e+00 + 5.6626706803452223e+00 -3.2190200678340464e-01 -8.9301482170093138e-01 + 5.9549337506176814e+00 -4.1174411148766077e-01 -7.0587456145100214e-01 + 6.2498114018882518e+00 -5.3964522504084944e-01 -4.8940719997132753e-01 + 6.5596493906029183e+00 -7.3646702771362427e-01 -2.6846458421155628e-01 + 6.8751617320048073e+00 -1.0033008226065929e+00 -5.5804652001248289e-02 + 7.1843363053722520e+00 -1.3349222973943282e+00 1.3598765818714564e-01 + 7.4713627283704236e+00 -1.7205353007591702e+00 2.8432606486077217e-01 + 7.6571051030614843e+00 -2.0680996222990449e+00 3.5422841701196695e-01 + id 14158 + loc 8.8046455383300781e-01 4.8373687267303467e-01 399 + blend 0.0000000000000000e+00 + interp 5.4834238374765121e-01:4.1828161345750381e-01:2.7946442164605845e-04:4.2601738557320062e-01:3.3362763442122800e-01:4.2359283815250254e-01:9.2122035959044923e-01:5.4833690032381377e-01:1.1626460554369955e+00:3.5840729735367804e-01:1.9911555886327021e+00:4.2165958796910319e-01:2.7529969324056118e+00:3.6543208334310351e-01:3.6172112036660575e+00 + CVs 20 + 2.3377016124146199e-01 2.6971006315688711e-01 4.9705417495085322e-02 + 4.4469790536880205e-01 5.5095986041852052e-01 1.3161445333784497e-01 + 6.4754590585547744e-01 8.3344724189243280e-01 2.3939121684590983e-01 + 8.5103161736748301e-01 1.1093941195191492e+00 3.7275922272850276e-01 + 1.0576980572467398e+00 1.3742282544949502e+00 5.3723106770661178e-01 + 1.2679230115417526e+00 1.6213236383094611e+00 7.3712163848837986e-01 + 1.4788544073113292e+00 1.8425875062496666e+00 9.7682569486301185e-01 + 1.6836459287498378e+00 2.0287716410365153e+00 1.2594625503186878e+00 + 1.8701746080754580e+00 2.1692776883367286e+00 1.5851107751363460e+00 + 2.0212344053389781e+00 2.2503372446617229e+00 1.9485344002566862e+00 + 2.1184260170732014e+00 2.2586458459141130e+00 2.3383190424601188e+00 + 2.1609604270348055e+00 2.1873655560384160e+00 2.7441794478214390e+00 + 2.1757631489942248e+00 2.0309434062836194e+00 3.1619873769114304e+00 + 2.1997400457360046e+00 1.7726301911649296e+00 3.5699580338022390e+00 + 2.2627571450638757e+00 1.3961944866651752e+00 3.9124159259327365e+00 + 2.3841941014271066e+00 9.2086218795347996e-01 4.1491686664590191e+00 + 2.5874627371059282e+00 3.8983513844817019e-01 4.3041707696142950e+00 + 2.8872335891523182e+00 -1.6213897357117846e-01 4.4143967745425314e+00 + 3.1254259279792604e+00 -7.1781639318548462e-01 4.6113447888984531e+00 + id 14159 + loc 6.2340229749679565e-01 1.2854333221912384e-01 1079 + blend 0.0000000000000000e+00 + interp 3.8897335151648971e-01:3.0426795313308475e-01:7.3232590736726610e-01:3.4727044897151615e-01:1.0266760351118231e+00:2.6004802861591347e-01:1.9866185696096150e+00:2.8016819682161670e-01:2.5894177018707092e+00:3.8896946178297453e-01:3.1956670137553824e+00:3.0439864246401649e-01:3.9962297931513664e+00 + CVs 20 + 9.3489102162319468e-02 4.8850273558281365e-01 -2.3046680693014943e-01 + 1.6168801641085340e-01 9.4768275795934698e-01 -3.4944676347371939e-01 + 2.1112392615799197e-01 1.3847327765987223e+00 -4.1297221302873494e-01 + 2.3187376434875978e-01 1.8182859737570916e+00 -4.2855515205822658e-01 + 2.0554119188424469e-01 2.2477929856462948e+00 -3.8182757017882307e-01 + 1.0733698472595321e-01 2.6659770307297102e+00 -2.5307664000593555e-01 + -8.4537735043650031e-02 3.0418271267062380e+00 -2.7199538573769333e-02 + -3.6662134809382874e-01 3.3240662929515139e+00 2.8334395441923910e-01 + -7.0141495101435813e-01 3.4793306908163881e+00 6.3592971884666771e-01 + -1.0364629031876467e+00 3.5189623721476093e+00 9.8376409701735812e-01 + -1.3432132279407978e+00 3.4785509642746133e+00 1.3060410195359262e+00 + -1.6226695192701492e+00 3.3810725775857930e+00 1.6053691917574402e+00 + -1.8838764655666433e+00 3.2326739631642285e+00 1.8872897028749072e+00 + -2.1383304469824336e+00 3.0283398749514925e+00 2.1538395944726876e+00 + -2.3949259252823283e+00 2.7472961212134526e+00 2.4098331940282169e+00 + -2.6313722445978418e+00 2.4064391272926957e+00 2.6189497631665954e+00 + -2.8690471944300269e+00 2.0466823123693780e+00 2.6886055894317979e+00 + -3.0834508617027043e+00 1.6268648878788003e+00 2.6167961587193971e+00 + -2.9601945600234258e+00 1.5920820778869704e+00 2.6635829769852997e+00 + id 14160 + loc 9.3211144208908081e-01 5.9025999158620834e-02 396 + blend 0.0000000000000000e+00 + interp 4.6417195857720617e-01:4.0486789747473356e-01:5.3048580197541106e-03:2.9495684869644573e-01:6.8077378074439254e-01:2.9945963787937641e-01:1.1072298602780861e+00:3.8208461654886211e-01:2.1751024741844200e+00:4.6416731685762042e-01:2.9156012957592958e+00:4.5614634663302639e-01:3.0057588144403313e+00:3.1008387144046101e-01:3.5841833838650232e+00 + CVs 20 + -6.3479781360888576e-01 2.1535600760294268e-01 4.6775180024807339e-01 + -1.1224801926010870e+00 3.1140226259352333e-01 8.3160115228829112e-01 + -1.5837702011978871e+00 3.5296207283697334e-01 1.1620380408026125e+00 + -2.0660034476263598e+00 3.5886584547475564e-01 1.4811258758008048e+00 + -2.5566206999884109e+00 3.2463879414536878e-01 1.7777230137731683e+00 + -3.0411297006461977e+00 2.5229060150065608e-01 2.0467791877728985e+00 + -3.5055644770677135e+00 1.4943749821957475e-01 2.2880715808430860e+00 + -3.9376123178199651e+00 2.6539599368581301e-02 2.5020052519031868e+00 + -4.3328688225510428e+00 -1.0571092642762925e-01 2.6935775150231440e+00 + -4.6987993752356942e+00 -2.4203516387284441e-01 2.8782089430752458e+00 + -5.0406577383466473e+00 -3.8640435740844659e-01 3.0754621532192088e+00 + -5.3507756119084862e+00 -5.4304672800283038e-01 3.2965585433990032e+00 + -5.6186577673524170e+00 -7.1276067064741611e-01 3.5443494281555594e+00 + -5.8422404764448359e+00 -8.9909652949618701e-01 3.8167505037969227e+00 + -6.0226623893137115e+00 -1.1026452458720661e+00 4.1049339115908445e+00 + -6.1604255200359823e+00 -1.3124641344004222e+00 4.3986487712477444e+00 + -6.2572464306617164e+00 -1.5269707157202181e+00 4.6950768224625676e+00 + -6.3057595702912028e+00 -1.7533235399776079e+00 4.9793200499304424e+00 + -6.2343304058948714e+00 -2.0073985200687083e+00 5.1414617069897837e+00 + id 14161 + loc 8.0509699881076813e-02 2.1026742458343506e-01 393 + blend 0.0000000000000000e+00 + interp 4.1741802724419669e-01:3.2452984584928801e-01:8.2582577702544457e-01:4.1321978946461047e-01:1.2565481797220115e+00:3.1670617153295300e-01:2.0486937491782582e+00:2.7146341213962027e-01:2.9350333397063286e+00:3.6583444723410019e-01:3.1991628416325049e+00:4.1741385306392426e-01:3.9973296163749641e+00 + CVs 20 + -1.9631236994536116e-01 2.0794888563851355e-01 3.2709236112957224e-01 + -3.7843181000831072e-01 4.1908203486497086e-01 5.9627936365935674e-01 + -5.5183256790018997e-01 6.3203388304383346e-01 8.0963706429914151e-01 + -7.1669950984269204e-01 8.4650222035584266e-01 9.7344145177521701e-01 + -8.7111932505290335e-01 1.0663996484413767e+00 1.0919444322617764e+00 + -1.0217990075713979e+00 1.3042251904502460e+00 1.1773245252033417e+00 + -1.1858872647585319e+00 1.5728041833775226e+00 1.2532752018121136e+00 + -1.3918338888422834e+00 1.8684651801428034e+00 1.3560016536903872e+00 + -1.6701583584850705e+00 2.1586861345074624e+00 1.5227256762270960e+00 + -2.0338726523829482e+00 2.3915379786059678e+00 1.7752445337427933e+00 + -2.4630935051285689e+00 2.5186056517031910e+00 2.1154272624958157e+00 + -2.9120644634458928e+00 2.5170327396241308e+00 2.5296038464182029e+00 + -3.3417540095691391e+00 2.4047623782127125e+00 3.0016736683540159e+00 + -3.7375307191835940e+00 2.2136975256686906e+00 3.5241944230301825e+00 + -4.0694471016112113e+00 1.9555917516887005e+00 4.0840882970844969e+00 + -4.2709741977882185e+00 1.6508535968778804e+00 4.6401880944876313e+00 + -4.2963190925981536e+00 1.3657634022987801e+00 5.1418112936988249e+00 + -4.1439150767672759e+00 1.1758687166005684e+00 5.5802562478968607e+00 + -3.7693458170588787e+00 1.0998445029341921e+00 6.0684925674708570e+00 + id 14162 + loc 9.2105835676193237e-01 7.0192891359329224e-01 373 + blend 0.0000000000000000e+00 + interp 5.9023403413430031e-01:5.4227865315173251e-01:4.1874042527473399e-02:2.7220320033335799e-01:7.8208172614657367e-01:3.8783675691519276e-01:1.1588404056919794e+00:2.9227252261892306e-01:1.9453755904116750e+00:3.0764360915493638e-01:2.9886514482200548e+00:5.9022813179395894e-01:3.6081762336563790e+00 + CVs 20 + -2.5246001376154997e-01 2.8606752347540482e-01 -1.1016056255323936e-01 + -4.9264357981094542e-01 5.5779244856619770e-01 -1.9944278728348716e-01 + -7.3469321959643619e-01 8.1734473723537882e-01 -2.8292491216824200e-01 + -9.8327024494658954e-01 1.0743872003599593e+00 -3.7064002297221588e-01 + -1.2320708909655969e+00 1.3503144882449856e+00 -4.7056500554814484e-01 + -1.4714635192474774e+00 1.6630627390851991e+00 -6.0173698285132748e-01 + -1.6911058053708967e+00 1.9993402942250831e+00 -7.9873454725105941e-01 + -1.8784461815954936e+00 2.3160515874745577e+00 -1.0897480016138661e+00 + -2.0202341052833317e+00 2.5699066735866953e+00 -1.4759321844857365e+00 + -2.1056543116976516e+00 2.7332129883797314e+00 -1.9383401815950818e+00 + -2.1264027037349349e+00 2.7975194924435316e+00 -2.4511682227275493e+00 + -2.0758194766951146e+00 2.7679788577887519e+00 -2.9820935119236323e+00 + -1.9605846523510428e+00 2.6376112982583972e+00 -3.4798587048351877e+00 + -1.8143533202527338e+00 2.3905369244547465e+00 -3.8814355169587778e+00 + -1.6910157914929438e+00 2.0484434117474812e+00 -4.1635862307095417e+00 + -1.6530387757007956e+00 1.6703998056743818e+00 -4.3642549446317558e+00 + -1.7502170194541977e+00 1.3282364266833877e+00 -4.5251762824942894e+00 + -1.9936500954115408e+00 1.0960612708765032e+00 -4.6507668724473916e+00 + -2.4000977311228429e+00 8.5853285898567511e-01 -4.8634572917562400e+00 + id 14163 + loc 8.4398984909057617e-02 7.7106177806854248e-01 378 + blend 0.0000000000000000e+00 + interp 3.3338200438698923e-01:2.4308425205526013e-01:2.9479834232948277e-01:2.5872017084326970e-01:1.5022364873952583e+00:2.8893377539747028e-01:2.3067055139941237e+00:3.3337867056694537e-01:2.9869473426974800e+00:2.9341339549006856e-01:3.5287634657442641e+00 + CVs 20 + 5.1333437405439497e-01 3.2419650891045948e-01 3.2009230805732980e-01 + 9.3205570237505753e-01 5.3026951731809158e-01 5.5363652975087185e-01 + 1.3315580008447714e+00 6.7212024796435443e-01 7.5811731574507035e-01 + 1.7399270273550960e+00 7.8120050556088860e-01 9.6096765947418405e-01 + 2.1447900464062553e+00 8.7096248544102617e-01 1.1686299214723450e+00 + 2.5361674961268581e+00 9.4879186127626902e-01 1.3872882297826861e+00 + 2.9154403283148684e+00 1.0093340536126263e+00 1.6212021325055530e+00 + 3.2861416368825207e+00 1.0400400909804155e+00 1.8714422745985715e+00 + 3.6438660895730051e+00 1.0294252566368045e+00 2.1381723258224770e+00 + 3.9778893220797720e+00 9.7312962568313699e-01 2.4187694884391182e+00 + 4.2837314278412624e+00 8.7239139269638022e-01 2.7055187115060884e+00 + 4.5611717516277333e+00 7.2935436148478816e-01 2.9830737940393961e+00 + 4.8145130040162734e+00 5.2387137682656260e-01 3.2405347423324100e+00 + 5.0414528687647273e+00 2.0150769442638561e-01 3.4694117738368293e+00 + 5.2467547402557919e+00 -2.5543899284640759e-01 3.6721802642601284e+00 + 5.4555845813135058e+00 -7.8802437962477168e-01 3.8841111004177584e+00 + 5.6991617790889979e+00 -1.3032994492260959e+00 4.1256735687853352e+00 + 6.0019765887154097e+00 -1.7252532979799517e+00 4.3648634440988667e+00 + 6.3662112359665670e+00 -2.0143387936814197e+00 4.5599196415133179e+00 + id 14164 + loc 9.5345389842987061e-01 4.9034535884857178e-01 401 + blend 0.0000000000000000e+00 + interp 4.4774796909371567e-01:4.4774349161402477e-01:3.5903878153281665e-02:2.0842934512159561e-01:8.5851835452332659e-01:2.5346364459987930e-01:1.9678204111577564e+00:3.8741352320638195e-01:2.2243648909148011e+00:3.3072139490072494e-01:2.9900453893211969e+00:3.6985659618290012e-01:3.6143343492621409e+00 + CVs 20 + 1.2573880924057951e-01 3.8451258083140988e-01 1.0266238882448177e-01 + 2.5095161370376262e-01 7.8043333436876949e-01 2.3095764281532830e-01 + 3.4734522240534532e-01 1.1890367559775656e+00 3.8833115584707445e-01 + 4.0587031393135098e-01 1.5994763673974048e+00 5.7867754908802338e-01 + 4.3230007093432199e-01 1.9987817067438922e+00 8.0375604620893426e-01 + 4.3645220489237346e-01 2.3781304821169025e+00 1.0606762327109334e+00 + 4.2984917228752395e-01 2.7338266572763739e+00 1.3458866348828038e+00 + 4.2597318523518390e-01 3.0643840564308245e+00 1.6588005512862050e+00 + 4.3721240701820119e-01 3.3676506848526251e+00 2.0067760945424911e+00 + 4.6848295660734374e-01 3.6343039255995144e+00 2.4067215185517661e+00 + 5.1731446128883007e-01 3.8389816578423206e+00 2.8771792930358893e+00 + 5.8325921074265719e-01 3.9361545539167699e+00 3.4276128019221153e+00 + 6.7364741372967507e-01 3.8740840803411594e+00 4.0317535107775804e+00 + 8.0468588030284571e-01 3.6581652074517303e+00 4.6085313692527974e+00 + 1.0023718702410489e+00 3.3776374402075535e+00 5.0877724249296623e+00 + 1.2705699356714057e+00 3.1597344175862094e+00 5.4409718083434893e+00 + 1.5282894000484806e+00 3.1358713944187411e+00 5.6599060679726865e+00 + 1.6684655360656349e+00 3.2838645050944075e+00 5.7859438869683730e+00 + 1.9965018919333426e+00 3.3324562031815335e+00 5.9774225935164829e+00 + id 14165 + loc 4.9502176046371460e-01 5.4230356216430664e-01 402 + blend 0.0000000000000000e+00 + interp 3.5336010910464921e-01:3.5335657550355820e-01:6.5665006241178991e-01:2.8551700647781525e-01:1.4272311473376895e+00:3.3690673706139768e-01:2.3045840737328378e+00:2.6574720283334530e-01:3.0315157540765019e+00:2.8540442504430180e-01:3.9475982898459985e+00 + CVs 20 + -7.6103294684522552e-02 3.0030129627323293e-01 -9.3269440349467561e-02 + -1.5474359299093748e-01 6.2633865190267424e-01 -2.2465801305778813e-01 + -2.0920501377924469e-01 9.6953912704744150e-01 -3.8664928528671466e-01 + -2.5106594606162685e-01 1.3202273834005021e+00 -5.7394304046384170e-01 + -3.2716138977973075e-01 1.6682201857037626e+00 -7.8381255468541022e-01 + -4.8628327472347499e-01 1.9926694475685032e+00 -1.0143784479802262e+00 + -7.5342688703765270e-01 2.2543552344094460e+00 -1.2669603952666253e+00 + -1.1117377274071076e+00 2.4097357573211884e+00 -1.5504961991161106e+00 + -1.5151664602751780e+00 2.4263992835225840e+00 -1.8822978298744277e+00 + -1.8990628702938301e+00 2.2721056532401547e+00 -2.2668653090020370e+00 + -2.1928703234472948e+00 1.9530374940343993e+00 -2.6653821495294823e+00 + -2.4133672609354782e+00 1.5535265125890305e+00 -3.0264732442130726e+00 + -2.6517821569298521e+00 1.1696426759079430e+00 -3.3256456523847939e+00 + -2.9563691780886976e+00 8.8632766482353920e-01 -3.5456918816676923e+00 + -3.2933408768940344e+00 7.2871014240890342e-01 -3.6926367110541163e+00 + -3.6232502072692672e+00 6.2125848943213302e-01 -3.8161859449891598e+00 + -3.9487133669634900e+00 4.9605910608063142e-01 -3.9581684504682668e+00 + -4.2689670160218238e+00 3.4137739072246420e-01 -4.1127176008129247e+00 + -4.5728849885209648e+00 1.6345511417288183e-01 -4.2317928478929607e+00 + id 14166 + loc 2.8413835167884827e-01 8.1550872325897217e-01 412 + blend 0.0000000000000000e+00 + interp 3.8016753765653288e-01:3.3868973767336663e-01:2.6595428414749600e-03:3.1986065073416214e-01:8.9019086467813691e-01:3.5352325305971655e-01:1.4207603323824454e+00:3.4363439064103457e-01:2.0084187971164504e+00:3.1653964207361224e-01:2.8942607217839385e+00:3.8016373598115633e-01:3.4356291161735690e+00 + CVs 20 + 8.5922581160103750e-01 1.0612015904235203e-01 -2.2321858508181433e-01 + 1.4331870199855181e+00 6.4369288932362267e-02 -4.2721559207081333e-01 + 1.9557870524547150e+00 -1.8129671724850083e-02 -5.9712401105906754e-01 + 2.5018607844929286e+00 -1.1105883474647038e-01 -7.2515210586438339e-01 + 3.0568183300851035e+00 -2.1927131809325506e-01 -8.0351441076690355e-01 + 3.6056447600359891e+00 -3.4358510704705614e-01 -8.2514584816137704e-01 + 4.1325169070541845e+00 -4.8165557384736890e-01 -7.8766586338360689e-01 + 4.6240797472012343e+00 -6.2978550161178060e-01 -6.9711191848500165e-01 + 5.0731276161905026e+00 -7.8301226250139044e-01 -5.6343191289129346e-01 + 5.4770426959566176e+00 -9.3663326515037615e-01 -3.9822496871747792e-01 + 5.8360143862673617e+00 -1.0955779584632663e+00 -2.2443077274394041e-01 + 6.1598755752059660e+00 -1.2823352417833067e+00 -8.1211492798955343e-02 + 6.4663871163080380e+00 -1.5167168518799916e+00 2.4465022628640254e-03 + 6.7671161850693746e+00 -1.7917374699090227e+00 3.2190900044981374e-02 + 7.0636982460108610e+00 -2.0920265962973650e+00 2.2168448198897850e-02 + 7.3487235865624179e+00 -2.4081577814498565e+00 -3.0634563942806836e-02 + 7.6125038327474748e+00 -2.7285951086889169e+00 -1.3297304144956879e-01 + 7.8500650578188367e+00 -3.0346281532535579e+00 -2.7619207333440798e-01 + 8.0887556481067300e+00 -3.2430163396014882e+00 -3.5699682145853506e-01 + id 14167 + loc 1.9477374851703644e-01 3.3827492594718933e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7193134330859821e-01:2.8534719976231948e-01:1.8326341548210978e-01:3.9055857606563260e-01:9.2617898999604509e-01:4.3860161845446249e-01:1.5781832917254417e+00:3.6644524101278136e-01:1.9999815358151707e+00:4.5944438581123576e-01:2.4089432205293528e+00:4.7192662399516516e-01:3.0028167855884975e+00:4.5959132493178789e-01:3.5241258539216838e+00 + CVs 20 + 1.2110001983287513e-01 3.9932957885789777e-01 1.3298099643985742e-01 + 1.6170077303968811e-01 7.0641405121266077e-01 2.0787192313606223e-01 + 1.6907966656506851e-01 9.7454728992275597e-01 2.5212772000866757e-01 + 1.7680852770838362e-01 1.2223101156024510e+00 2.8839657043344591e-01 + 1.9225928698632833e-01 1.4398613228554065e+00 3.1828890859804732e-01 + 2.3446242649913251e-01 1.6140807097335055e+00 3.4793824371333132e-01 + 3.2659730543056908e-01 1.7508266806482802e+00 3.8184484910187411e-01 + 4.7444525523971903e-01 1.8901029120547519e+00 4.1183050050501790e-01 + 6.3757094698074901e-01 2.0801781568942994e+00 4.1914522303262047e-01 + 7.3696962092196039e-01 2.3185525540473795e+00 3.9327204990857501e-01 + 7.2633142218967073e-01 2.5479540358232886e+00 3.4260852760734328e-01 + 6.1464215555430424e-01 2.7178877226263571e+00 2.8151227138323726e-01 + 4.2893184408882057e-01 2.8079604749188753e+00 2.2004614947442502e-01 + 1.9141648222816254e-01 2.8186994727241901e+00 1.6290338296631224e-01 + -8.9191857251129214e-02 2.7701029647958046e+00 1.0608787847846979e-01 + -4.3583649927012380e-01 2.6984819862384679e+00 3.5651831873036166e-02 + -8.8139477287043966e-01 2.5728229786157732e+00 -5.3786222453953536e-02 + -1.2667789246061907e+00 2.2652195700102808e+00 -1.3968909592907952e-01 + -1.2336834694342222e+00 1.8888895254958447e+00 -2.1292998763081361e-01 + id 14168 + loc 7.3272639513015747e-01 7.5721013545989990e-01 404 + blend 0.0000000000000000e+00 + interp 4.3093998261282973e-01:3.1748789619752299e-01:3.5470531564693264e-02:3.1976079231392646e-01:9.4849432476764617e-01:4.2699776208551188e-01:1.5217043680129534e+00:3.8380185176568610e-01:1.9989554806055772e+00:4.3093567321300363e-01:2.5497042007962540e+00:3.3448374069163755e-01:2.9880104519856516e+00:3.5736320487211370e-01:3.4007344274771829e+00 + CVs 20 + -4.1264820753435932e-03 1.2115462893863371e-01 -5.9392914984173636e-02 + -7.9239063566219209e-03 2.4145041853796820e-01 -8.6055630817271037e-02 + -1.2371931883273901e-02 3.5429988383179667e-01 -9.9313042723291001e-02 + -1.3983463222995152e-02 4.6337272984623296e-01 -1.0535222096136079e-01 + -7.0763614974894140e-03 5.7126909411518878e-01 -1.0615309576596686e-01 + 1.3835825589735840e-02 6.8019115674147979e-01 -1.0301398947046052e-01 + 5.2655591092111376e-02 7.9124395643641954e-01 -9.6187409274861482e-02 + 1.0888967151972284e-01 9.0497317624033435e-01 -8.4101807872045797e-02 + 1.7917762719520686e-01 1.0211936981680290e+00 -6.4981203768931989e-02 + 2.6193488394502734e-01 1.1380404536948006e+00 -4.2141384164368967e-02 + 3.5915349768086996e-01 1.2525159044762963e+00 -2.5747671429499130e-02 + 4.7177126227861332e-01 1.3619861249663057e+00 -2.6233509612437089e-02 + 5.9477326979806111e-01 1.4663324572683720e+00 -4.4617587467395803e-02 + 7.2227970950287546e-01 1.5670372392788776e+00 -7.4541762307475834e-02 + 8.5466223655480156e-01 1.6635245165246557e+00 -1.1179009045290977e-01 + 9.9609046596803807e-01 1.7526513383484963e+00 -1.5856277547426423e-01 + 1.1515186047761583e+00 1.8302697252678553e+00 -2.1865229352710219e-01 + 1.3268128751042814e+00 1.8921448110514039e+00 -2.9025601900382464e-01 + 1.4723198352551670e+00 1.9808065117624896e+00 -3.3383416876207705e-01 + id 14169 + loc 6.4355450868606567e-01 3.3488109707832336e-01 396 + blend 0.0000000000000000e+00 + interp 4.2226584008377038e-01:3.1153652899315726e-01:1.5870313627327159e-02:4.2226161742536955e-01:7.0318878017070574e-01:3.1999497330367410e-01:1.0367192686970290e+00:2.8606069072783680e-01:2.1370596211131501e+00:3.1755133342920216e-01:3.0408312434335816e+00 + CVs 20 + -7.1293503015603821e-01 1.8061477405208659e-01 3.3849961398570710e-01 + -1.2409073715460552e+00 2.1588698483870278e-01 5.9868468931444729e-01 + -1.7404021112980346e+00 1.9109237138910384e-01 8.2606767487761723e-01 + -2.2728820935247005e+00 1.3958890886149322e-01 1.0310049757484725e+00 + -2.8293179023924715e+00 6.0181410167330252e-02 1.2098506926412727e+00 + -3.3985647639703860e+00 -4.6509350211358047e-02 1.3693063817124878e+00 + -3.9650729074858218e+00 -1.8038205348710590e-01 1.5214825485123451e+00 + -4.5085226144623487e+00 -3.4636143860609692e-01 1.6746839885939910e+00 + -5.0115441148827191e+00 -5.5706675599666378e-01 1.8331941553035738e+00 + -5.4607103571067448e+00 -8.3004085412567830e-01 2.0012537386767519e+00 + -5.8392693696829125e+00 -1.1663710283316675e+00 2.1812955895355040e+00 + -6.1361319002216721e+00 -1.5457422943369221e+00 2.3620669729788673e+00 + -6.3610228211745419e+00 -1.9424374358248109e+00 2.5281637999006614e+00 + -6.5316407493579005e+00 -2.3447748423970074e+00 2.6791204511341826e+00 + -6.6616896017102745e+00 -2.7489514401538186e+00 2.8199648580467160e+00 + -6.7575393123035692e+00 -3.1438653991197532e+00 2.9473090517936726e+00 + -6.8256866545783401e+00 -3.5149068605081322e+00 3.0528100887874845e+00 + -6.8771667172558102e+00 -3.8631246644379260e+00 3.1374845873647610e+00 + -6.9378430847390380e+00 -4.2461255046157032e+00 3.2402452741002268e+00 + id 14170 + loc 1.1854162812232971e-01 4.5992875099182129e-01 395 + blend 0.0000000000000000e+00 + interp 4.6950577571173513e-01:3.0620827158500219e-01:1.0904850171976177e-02:3.4861873873369398e-01:7.1210321303963164e-01:2.8552874419610408e-01:1.1228155648994087e+00:4.6950108065397805e-01:1.8881219292876104e+00:3.0837118847725620e-01:2.7591339133737791e+00:2.7749077293272106e-01:3.2693248656629321e+00 + CVs 20 + -2.8038948329674934e-01 1.3992398656511729e-01 -1.8435471475941306e-01 + -5.4478335776299969e-01 2.4647655649197928e-01 -3.4930547383026378e-01 + -8.0864266576679200e-01 3.4179981256398184e-01 -5.2854597219309407e-01 + -1.0739143761797136e+00 4.3921552440329120e-01 -7.3780691455189251e-01 + -1.3357000768800411e+00 5.3534486224299604e-01 -9.7604522797966076e-01 + -1.5913884403254301e+00 6.2470853075040056e-01 -1.2395348987826034e+00 + -1.8430528082581314e+00 7.0352220098715235e-01 -1.5255895812458780e+00 + -2.0932537111250333e+00 7.6537662705605958e-01 -1.8339513757766168e+00 + -2.3363457368711629e+00 7.9588794609289670e-01 -2.1593688883090860e+00 + -2.5608662126892772e+00 7.7813244699241668e-01 -2.4837107259208104e+00 + -2.7641052232647620e+00 7.0018652396001047e-01 -2.7854517603720055e+00 + -2.9538896497057023e+00 5.5267371791557829e-01 -3.0556825195571591e+00 + -3.1319706064838297e+00 3.3101072411793497e-01 -3.2929350080112769e+00 + -3.2884517552286798e+00 4.4322885607943174e-02 -3.4913130612124634e+00 + -3.4154068894315337e+00 -2.9029053467847143e-01 -3.6442295776584066e+00 + -3.5115807870107796e+00 -6.6068518939902954e-01 -3.7500926458536616e+00 + -3.5737724439734810e+00 -1.0610112175019442e+00 -3.8101735222713549e+00 + -3.5960299323959646e+00 -1.4785070844501478e+00 -3.8280892340108528e+00 + -3.6427393253625810e+00 -1.9498643034699898e+00 -3.8791608376087758e+00 + id 14171 + loc 9.0124934911727905e-01 9.8266464471817017e-01 399 + blend 0.0000000000000000e+00 + interp 4.5856179114219281e-01:4.5855720552428142e-01:1.9612463894808618e-01:3.7478607641086953e-01:9.6651192440116551e-01:3.5641485190539246e-01:1.7537766218384783e+00:3.2669647537031948e-01:2.2081172634745747e+00:4.0623219703362229e-01:2.8491018771508045e+00:3.7476219341881456e-01:3.8509670097623996e+00 + CVs 20 + -1.7979732119957464e-01 3.3829716198699883e-01 -1.8412064070568968e-01 + -3.5245133899632552e-01 6.7617805155714084e-01 -3.9022534256137414e-01 + -5.1717166017412608e-01 1.0023686703740131e+00 -6.5059687180051096e-01 + -6.8198544394763383e-01 1.2919835567607179e+00 -9.7601787192271472e-01 + -8.5931423174677857e-01 1.5137963191077874e+00 -1.3592520416608325e+00 + -1.0572725052879028e+00 1.6396227138855850e+00 -1.7806459371033321e+00 + -1.2792538698380627e+00 1.6550630137570277e+00 -2.2117994093583309e+00 + -1.5271857686647918e+00 1.5674500371651301e+00 -2.6243840605194015e+00 + -1.7951726785752919e+00 1.3932998545664419e+00 -2.9924784292702484e+00 + -2.0615137452271517e+00 1.1448117308976009e+00 -3.2896554604669914e+00 + -2.3113141752412676e+00 8.4404779117571715e-01 -3.5032969236651756e+00 + -2.5612172240170463e+00 5.2547041844759557e-01 -3.6482045261164147e+00 + -2.8257585273731327e+00 2.2411077732363771e-01 -3.7391086149586696e+00 + -3.0882215263479589e+00 -3.2288140825978084e-02 -3.7809155404726873e+00 + -3.3345837136672545e+00 -2.4221669605209784e-01 -3.7945856804330012e+00 + -3.5814976450044123e+00 -4.3428479867762648e-01 -3.8119782190938070e+00 + -3.8464055435240190e+00 -6.2220205784091420e-01 -3.8480874712302979e+00 + -4.1471922356142645e+00 -7.5157177945465248e-01 -3.9130964179393830e+00 + -4.4554649842045979e+00 -7.1672848999844796e-01 -4.0172768685788078e+00 + id 14172 + loc 1.4800766110420227e-01 1.6266095638275146e-01 381 + blend 0.0000000000000000e+00 + interp 4.5647523622205394e-01:4.5647067146969172e-01:1.7096994487551076e-01:3.5123329916796436e-01:9.0403980436434828e-01:4.0883164500554814e-01:1.0284898191811294e+00:4.1015749545181196e-01:1.6439636529222730e+00:2.4866376391549563e-01:2.7097031358115897e+00:4.2775776727670772e-01:3.0188228825967629e+00:4.4488802697359636e-01:3.8078988854825773e+00 + CVs 20 + -6.5053091998884882e-01 1.8283351788339142e-01 -7.0403094992827397e-01 + -1.1209110397184583e+00 2.3011319780739781e-01 -1.1481859277538813e+00 + -1.5478154161314117e+00 2.2505076741478502e-01 -1.5436608023042795e+00 + -1.9805404506350741e+00 2.1463687993823199e-01 -1.9826843862412034e+00 + -2.4182058944295286e+00 2.0309650316031347e-01 -2.4662743143984600e+00 + -2.8618817648172907e+00 1.8609083359551992e-01 -2.9903423846684127e+00 + -3.3110502763625189e+00 1.3499934465513574e-01 -3.5470457647959082e+00 + -3.7461977120335930e+00 1.6800894340194272e-03 -4.1215599823508118e+00 + -4.1295844950982872e+00 -2.4671494992186394e-01 -4.6833762446217362e+00 + -4.4263386223962300e+00 -6.0594556721243498e-01 -5.1910436600386216e+00 + -4.6231135454667101e+00 -1.0358480319487828e+00 -5.6081602142756015e+00 + -4.7277217714333473e+00 -1.4785429051053856e+00 -5.9221686737385983e+00 + -4.7652516844811927e+00 -1.8946166078689599e+00 -6.1538944088930156e+00 + -4.7717451053639843e+00 -2.3039382899460015e+00 -6.3328609577553436e+00 + -4.7794185036162302e+00 -2.7536164598016564e+00 -6.4675668427052386e+00 + -4.8128104663561366e+00 -3.2500773955839728e+00 -6.5696987882655344e+00 + -4.8868539969925804e+00 -3.7757718705414529e+00 -6.6726648399915884e+00 + -5.0197716788683548e+00 -4.2916747582591706e+00 -6.7992682881780482e+00 + -5.2719713595912454e+00 -4.6582886637643446e+00 -6.9204909557492407e+00 + id 14173 + loc 3.6405616998672485e-01 3.1338128447532654e-01 379 + blend 0.0000000000000000e+00 + interp 3.8096339329785794e-01:2.7404685141214186e-01:4.5259983298481765e-01:2.9327564255548461e-01:1.0248393605347377e+00:3.2373380147905045e-01:1.5231943359256568e+00:2.9672843000285382e-01:1.9847604999850970e+00:2.1234161536647389e-01:2.6396840468304306e+00:3.1446516025408555e-01:3.1136388653254761e+00:3.8095958366392496e-01:3.9619348377870427e+00 + CVs 20 + 1.0354646617025615e-01 3.0370960402642089e-01 3.4752508844360230e-01 + 2.4875389958784366e-01 5.4059903002081588e-01 6.4465202291116697e-01 + 4.3241729636672649e-01 6.9102351343720780e-01 9.1120624408992901e-01 + 6.5686529200562194e-01 7.6299340834749629e-01 1.1589634487350322e+00 + 9.1907631682523006e-01 7.9514082466947333e-01 1.3802267785875091e+00 + 1.2158425634007293e+00 8.3136836649763812e-01 1.5777580789111971e+00 + 1.5426913888491405e+00 8.9874745727243743e-01 1.7866185730384347e+00 + 1.8828310892904092e+00 1.0138195319289216e+00 2.0469310051579219e+00 + 2.2047323613941083e+00 1.1978885273658924e+00 2.3594065633999275e+00 + 2.4825410657814238e+00 1.4727458691673394e+00 2.6939176764473611e+00 + 2.7147957881767768e+00 1.8493820815763375e+00 3.0490075457447463e+00 + 2.8993215354683226e+00 2.3353329936923002e+00 3.4673625172382936e+00 + 2.9946978809349494e+00 2.9089668719150565e+00 4.0286033371283558e+00 + 2.9170406249293999e+00 3.4479507863733732e+00 4.8127335640500295e+00 + 2.5949907669381012e+00 3.7844790266079205e+00 5.7599437427014735e+00 + 2.0471458147139474e+00 3.9039730512606510e+00 6.6125411802210099e+00 + 1.3088788734469674e+00 3.9931010975120915e+00 7.1832412580581657e+00 + 4.9880046911835452e-01 3.9517472389108832e+00 7.5546303532526951e+00 + 6.0216839382004572e-01 3.6634212737688276e+00 7.9204171466633877e+00 + id 14174 + loc 4.2780539393424988e-01 3.4841336309909821e-02 393 + blend 0.0000000000000000e+00 + interp 3.7509682416422152e-01:2.5671431752248525e-01:6.4626577090065584e-04:2.7609874848968335e-01:6.2093767398906929e-01:3.5068498862496156e-01:1.9367092316493619e+00:2.7592318009110617e-01:2.3009336613966305e+00:3.7509307319597990e-01:2.9994393840191087e+00:3.3140904223711892e-01:3.4456927274990163e+00 + CVs 20 + -8.1021084300356122e-02 4.0854322450122749e-01 4.1281159078814739e-01 + -1.4004114283095906e-01 8.2700163998450582e-01 7.3816322870576301e-01 + -1.8697925446920488e-01 1.2714861478800248e+00 9.9416864064362254e-01 + -2.5431028229695396e-01 1.7518276128892869e+00 1.2082541058607048e+00 + -3.9276695150981356e-01 2.2522685033551020e+00 1.3995123210718967e+00 + -6.3664846204700987e-01 2.7350501403351357e+00 1.5738396047115706e+00 + -9.9386172799836991e-01 3.1687508284757877e+00 1.7303719363822121e+00 + -1.4638319276180698e+00 3.5315810565396335e+00 1.8775481485717445e+00 + -2.0358530853697197e+00 3.7953724759047271e+00 2.0391539231465745e+00 + -2.6813249207045358e+00 3.9283565585134532e+00 2.2455822271794208e+00 + -3.3503107469908744e+00 3.9035726551403300e+00 2.5195574763784472e+00 + -3.9781785871098823e+00 3.7005181767685542e+00 2.8560995317419167e+00 + -4.5024742411364302e+00 3.3169677651895104e+00 3.2195059573405240e+00 + -4.8685462441752447e+00 2.7801365364465358e+00 3.5694178614517549e+00 + -5.0182811481727949e+00 2.1490414288172275e+00 3.8805305035456401e+00 + -4.9236453559016793e+00 1.5127338902940735e+00 4.1472103393319761e+00 + -4.6150205439417853e+00 9.5433400969314053e-01 4.3935752338606333e+00 + -4.1647319859706169e+00 5.2137135687047387e-01 4.6444459646911751e+00 + -3.6862356633024396e+00 1.4761387180491781e-01 4.9039805617870202e+00 + id 14175 + loc 4.9333149194717407e-01 1.1347692459821701e-01 400 + blend 0.0000000000000000e+00 + interp 4.6271735071619996e-01:4.3911165296282401e-01:7.2126777919697349e-02:3.0609558040174900e-01:7.6607766043315351e-01:4.5687589917536514e-01:1.0293122166638760e+00:4.6271272354269283e-01:1.4997610747306969e+00:3.8196885097677669e-01:1.9807049507495447e+00:3.0608492001076909e-01:2.4411624826957974e+00:3.9061701905220514e-01:3.0444927194072289e+00:4.3556654063924266e-01:3.8201122812238948e+00 + CVs 20 + -2.1965354674794518e-01 3.1334313351990800e-01 1.8845103958639309e-01 + -4.1291154143897257e-01 6.2304720074529274e-01 3.7855336343093554e-01 + -6.0169841808322244e-01 9.3301804943093958e-01 5.6480334228401108e-01 + -7.9742728765253446e-01 1.2407623828092995e+00 7.5122178701131870e-01 + -1.0087606828970348e+00 1.5395458928494345e+00 9.4909028438550247e-01 + -1.2460317243116850e+00 1.8183608536433431e+00 1.1753706682702423e+00 + -1.5095972783192722e+00 2.0587811661311068e+00 1.4430988092623760e+00 + -1.7962249706818434e+00 2.2424810902246963e+00 1.7575006001070566e+00 + -2.0988360262455945e+00 2.3523290965363302e+00 2.1122325433255562e+00 + -2.3961836738185736e+00 2.3814121840142448e+00 2.4878868062929329e+00 + -2.6650587353599029e+00 2.3398895709349743e+00 2.8659769236279615e+00 + -2.8965286401129040e+00 2.2424280664860117e+00 3.2381013960310678e+00 + -3.1034645914888426e+00 2.0951225263223305e+00 3.6035437823344116e+00 + -3.3068797933270520e+00 1.8990778369813730e+00 3.9554092419695839e+00 + -3.4792155917547891e+00 1.6722778818019464e+00 4.2588831545207793e+00 + -3.5067025307491662e+00 1.4514450150107878e+00 4.4570955144903071e+00 + -3.2920998758048512e+00 1.1778853764515653e+00 4.5399010858951705e+00 + -3.1326680721371201e+00 7.8892681817476906e-01 4.6359906525542254e+00 + -3.4129010654543830e+00 7.5600721937078452e-01 4.7651245148811618e+00 + id 14176 + loc 5.3304904699325562e-01 7.0940452814102173e-01 373 + blend 0.0000000000000000e+00 + interp 2.8287522056802833e-01:2.6934603517157124e-01:7.7864208371153154e-02:2.7805278692801483e-01:1.1557121982728722e+00:2.8011927759704786e-01:2.0766650986187223e+00:2.8287239181582269e-01:3.0051873329148089e+00 + CVs 20 + -2.9739364717607697e-01 3.1437635661630614e-01 -5.8750958745250499e-02 + -5.6299132830922960e-01 5.9965400016672199e-01 -1.5384053778974183e-01 + -7.9497802528701000e-01 8.6352094933511725e-01 -2.7825288628793865e-01 + -9.9252895567863009e-01 1.1169691281801739e+00 -4.2720643063289648e-01 + -1.1404063857012041e+00 1.3621377606545704e+00 -5.8872770338236757e-01 + -1.2260414845975502e+00 1.5917788273272102e+00 -7.3581093911942941e-01 + -1.2567791515334097e+00 1.8029769273013714e+00 -8.5355428363093933e-01 + -1.2582081279650494e+00 1.9989995108015033e+00 -9.6777449694240159e-01 + -1.2614892031044089e+00 2.1704060943357657e+00 -1.1211782563089687e+00 + -1.2850465583140622e+00 2.3014571536982289e+00 -1.3298473348435813e+00 + -1.3225334381524301e+00 2.4002355863810041e+00 -1.5758035433071769e+00 + -1.3455335674317679e+00 2.4990721242916409e+00 -1.8318967367703456e+00 + -1.3195879318521286e+00 2.5745208031076188e+00 -2.1065713746785293e+00 + -1.2291851884239970e+00 2.5065592733376771e+00 -2.4164367727369225e+00 + -1.1363720490801850e+00 2.2300303243601558e+00 -2.7523667135149426e+00 + -1.1803631519349476e+00 1.8149829137415698e+00 -3.1066403846164996e+00 + -1.4572049068312021e+00 1.4129895885179506e+00 -3.4457526655787554e+00 + -1.9337337964476731e+00 1.1811406458402616e+00 -3.6992915115638301e+00 + -2.4470443574397684e+00 1.1562362325450479e+00 -3.8231863393148844e+00 + id 14177 + loc 4.4064044952392578e-01 3.9685219526290894e-01 402 + blend 0.0000000000000000e+00 + interp 3.3938337881797970e-01:3.1174868196173583e-01:5.0568878036286624e-02:3.2763497595687885e-01:9.1801620447541621e-01:2.8495858989094652e-01:1.2915193546399206e+00:2.9968564191252262e-01:1.9982979960914131e+00:3.2541073843552232e-01:2.8991830430321328e+00:3.3937998498419153e-01:3.5307257154244005e+00 + CVs 20 + -2.3727115208674171e-01 2.8063509104231277e-01 1.9113814647527944e-01 + -4.3550713341454839e-01 5.5351529033905156e-01 3.8543729684813360e-01 + -6.2366086595396730e-01 8.2928899255360589e-01 5.5911727651593146e-01 + -8.0819494422620575e-01 1.1017944743423265e+00 7.0364643154148365e-01 + -9.8509099557883562e-01 1.3681283647819809e+00 8.3577911522989401e-01 + -1.1596277382089166e+00 1.6362792750255721e+00 9.7287404168473746e-01 + -1.3441447903698127e+00 1.9156233807259648e+00 1.1167287333829752e+00 + -1.5561871271648697e+00 2.2108646370738469e+00 1.2598367052736950e+00 + -1.8202137532260994e+00 2.5244346539227092e+00 1.3991470407510616e+00 + -2.1638931972412121e+00 2.8527853258578482e+00 1.5330557239485398e+00 + -2.6049224568540397e+00 3.1810678675976933e+00 1.6322220088184771e+00 + -3.1517409692174385e+00 3.4785571109814537e+00 1.6555300755088398e+00 + -3.7943672543881135e+00 3.6787036191241183e+00 1.5856831612975699e+00 + -4.4713259066681772e+00 3.7080648016805453e+00 1.4227972935600057e+00 + -5.0997899340106105e+00 3.5404648496275044e+00 1.1794970363189108e+00 + -5.6071130348647849e+00 3.1795850003223860e+00 8.8062035789301307e-01 + -5.9909054346959500e+00 2.6300247013579003e+00 5.9611482053187692e-01 + -6.3304102489987786e+00 2.0328567676818015e+00 5.5976897719083496e-01 + -6.5567138572169288e+00 1.8202540891842740e+00 8.8205645842976443e-01 + id 14178 + loc 5.4060769081115723e-01 7.2305500507354736e-02 378 + blend 0.0000000000000000e+00 + interp 5.5457967119104590e-01:3.8640286104367150e-01:1.1555287461861452e-01:5.5457412539433404e-01:9.9559358009328647e-01:4.9143850029773772e-01:1.3783953868290051e+00:3.0845747801714374e-01:1.8884892531057735e+00:4.3372727466767702e-01:2.4618376159485837e+00:3.7671329736319364e-01:2.9968357361603939e+00:3.3087657888618660e-01:3.6823255610563059e+00 + CVs 20 + -2.9505977498758473e-01 2.5514709158063875e-01 -1.1266286091483982e-01 + -5.8150600138107500e-01 4.7165769362844145e-01 -1.9336864623221267e-01 + -8.6842759912604994e-01 6.6127189984276191e-01 -2.5508427392294830e-01 + -1.1631862014578829e+00 8.3974145823586943e-01 -3.0603671484517747e-01 + -1.4603296393018863e+00 1.0200914828491157e+00 -3.5161498946466430e-01 + -1.7547646814835796e+00 1.2088249236933595e+00 -3.9926219180801870e-01 + -2.0545530881383716e+00 1.4030327063536907e+00 -4.5902796649181776e-01 + -2.3687508063853615e+00 1.5963711123420288e+00 -5.4225633462862666e-01 + -2.6924541128054975e+00 1.7842224583800583e+00 -6.5753368550398161e-01 + -3.0101042402245932e+00 1.9660978629161416e+00 -8.0690353885619470e-01 + -3.3150566386133726e+00 2.1482680357703288e+00 -9.8832241406517407e-01 + -3.6205730590397902e+00 2.3315163790921805e+00 -1.2087445763301343e+00 + -3.9387377450341372e+00 2.4727782059923689e+00 -1.4762994758940375e+00 + -4.2420059435397466e+00 2.4919721369197552e+00 -1.7510690784156151e+00 + -4.4820938024379320e+00 2.3780919914662593e+00 -1.9675141977743151e+00 + -4.6225838099148415e+00 2.2130004383240323e+00 -2.1191319256868772e+00 + -4.6211592323565043e+00 2.0876362758998495e+00 -2.2452536014351674e+00 + -4.5268408709831842e+00 2.0171636852960972e+00 -2.3916723461214677e+00 + -4.7664079928958616e+00 1.9954257396802650e+00 -2.5506997175962938e+00 + id 14179 + loc 6.4842349290847778e-01 7.5293171405792236e-01 412 + blend 0.0000000000000000e+00 + interp 5.1218674857663493e-01:3.5757287686568900e-01:5.1263773097314469e-01:3.6306650509233074e-01:1.1944599257929724e+00:3.7032082465627020e-01:2.0235382277304224e+00:2.5729507145326141e-01:2.7587728189367882e+00:3.6230863491786619e-01:3.4230027728608068e+00:5.1218162670914924e-01:3.9873174211502769e+00 + CVs 20 + 7.4428400697004649e-01 1.7311234760656014e-01 -1.7536693636952991e-01 + 1.2440327074239497e+00 2.2560947854410940e-01 -3.3687820887808495e-01 + 1.6877022483092596e+00 2.2300843785245089e-01 -4.9212733646911466e-01 + 2.1661447989443898e+00 1.9042353298706810e-01 -6.4150305163046673e-01 + 2.6699371922036215e+00 1.1734681329807750e-01 -7.7374065246674573e-01 + 3.1869312363202464e+00 -3.4444308545222846e-04 -8.7518023621181951e-01 + 3.7036984143221798e+00 -1.5954303089784705e-01 -9.3411094294215302e-01 + 4.2056787410963379e+00 -3.5726323348559053e-01 -9.4418934763314144e-01 + 4.6783604462225492e+00 -5.9016317741252378e-01 -9.0472490706665243e-01 + 5.1097099697853068e+00 -8.5089017792701638e-01 -8.2025536679874667e-01 + 5.4902487041744941e+00 -1.1370991376260584e+00 -7.0697909391306579e-01 + 5.8144591090860462e+00 -1.4635813189010927e+00 -6.0161091751381113e-01 + 6.0844663950185680e+00 -1.8463759923198830e+00 -5.4065333869271970e-01 + 6.3122874952686221e+00 -2.2787357500201528e+00 -5.2835758948367506e-01 + 6.5099981399339102e+00 -2.7444204752766188e+00 -5.5763014943523070e-01 + 6.6793409978488283e+00 -3.2278898641335130e+00 -6.3808853364511764e-01 + 6.8194387882305083e+00 -3.7126010538138372e+00 -7.8514152603727017e-01 + 6.9354316469455215e+00 -4.1777877102255507e+00 -9.9352326225448939e-01 + 7.1347679924720175e+00 -4.5861849653392017e+00 -1.1504856044785186e+00 + id 14180 + loc 9.8037946224212646e-01 3.5494354367256165e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1960251021936743e-01:3.2181654892246675e-01:7.8013491866398832e-03:4.4064396834133718e-01:4.0335661305618942e-01:3.0970401415856069e-01:1.0159513656397205e+00:4.7824115876273415e-01:1.4835171138366758e+00:5.1959731419426525e-01:1.9755807839816115e+00:4.1021604086940927e-01:2.1777039868471251e+00:4.7581716623338466e-01:2.9143940597120706e+00:4.2614094787948087e-01:3.4448967740808416e+00 + CVs 20 + -1.9931194471349029e-02 4.3293302586768051e-01 -4.7821991428085894e-02 + -4.2276121337912032e-02 8.5669694376021344e-01 -3.7006517849422244e-02 + -9.3374019395393526e-02 1.2685778572209867e+00 1.7760047535490986e-02 + -1.9073132257045811e-01 1.6619900592200629e+00 1.2108319188292488e-01 + -3.4603526919250949e-01 2.0203222524251574e+00 2.8177790661331792e-01 + -5.6510920321603797e-01 2.3180736228348442e+00 5.0086228410421096e-01 + -8.4230430870303963e-01 2.5262417067652505e+00 7.6444701508188662e-01 + -1.1612668785697733e+00 2.6259922490408831e+00 1.0456203645248738e+00 + -1.5009472073411114e+00 2.6147728219771156e+00 1.3167041447267591e+00 + -1.8399567914122836e+00 2.5026156368837462e+00 1.5597812753092517e+00 + -2.1626359271880515e+00 2.3026371169373521e+00 1.7716197436706858e+00 + -2.4565010402355019e+00 2.0225739170962500e+00 1.9578669148678234e+00 + -2.7035583451295180e+00 1.6640734893734337e+00 2.1273055685908293e+00 + -2.8717048189345094e+00 1.2244819965347680e+00 2.2919060328774830e+00 + -2.9027088548342657e+00 7.1636464212092998e-01 2.4643652291557725e+00 + -2.7424633099486035e+00 2.1096789563054896e-01 2.6527178547708177e+00 + -2.3977545333460628e+00 -1.9737405567510313e-01 2.8839427500918582e+00 + -1.9515911709594493e+00 -4.5378921301371578e-01 3.1586448425745095e+00 + -1.6565816722963105e+00 -6.8021124685972012e-01 3.3008085051925478e+00 + id 14181 + loc 7.9138839244842529e-01 9.4174844026565552e-01 401 + blend 0.0000000000000000e+00 + interp 5.2193187922355355e-01:3.8194619010219805e-01:1.9016524846272498e-01:3.6406544824018955e-01:1.0388955905585160e+00:3.3182508842401931e-01:1.6980025745376062e+00:5.2192665990476139e-01:2.0860997043924683e+00:3.5942927750192122e-01:2.9205172344084129e+00:3.8966930071443867e-01:3.7215662700498409e+00 + CVs 20 + 3.7736654891510124e-02 3.0398560615483378e-01 -3.0094753672475555e-01 + 5.6711809351306458e-02 6.1700620461647138e-01 -5.8912656124038654e-01 + 7.0448036711383943e-02 9.4350849830630623e-01 -8.9080288036254640e-01 + 8.1321207689372010e-02 1.2740933057184176e+00 -1.2258598685794007e+00 + 7.6865000726762944e-02 1.5919393532849162e+00 -1.6039535987797557e+00 + 2.6585617056770761e-02 1.8846851746558306e+00 -2.0174301357755713e+00 + -1.0484674268932392e-01 2.1428574801637605e+00 -2.4434250282927827e+00 + -3.3802879174774525e-01 2.3533642057888642e+00 -2.8544968914817255e+00 + -6.7235820697569126e-01 2.5027997253599548e+00 -3.2236895756488151e+00 + -1.0909158894846005e+00 2.5859233563543178e+00 -3.5341434026944167e+00 + -1.5740737650508789e+00 2.5994102757470396e+00 -3.7868511986771560e+00 + -2.1072383491160975e+00 2.5314931517603219e+00 -3.9987234079488330e+00 + -2.6690514877990124e+00 2.3701632904032066e+00 -4.1835419853476594e+00 + -3.2250835847183592e+00 2.1262993423268597e+00 -4.3316042561739350e+00 + -3.7542954732237988e+00 1.8295551352498238e+00 -4.4480820843717712e+00 + -4.2641684317602184e+00 1.5031808242093971e+00 -4.6131669429335194e+00 + -4.7447834658790908e+00 1.1839653548603384e+00 -4.9406194677829918e+00 + -5.1519442211419149e+00 9.2156970066221888e-01 -5.4146726121035291e+00 + -5.5353911342149145e+00 6.7145309489933003e-01 -5.7919540179699904e+00 + id 14182 + loc 7.1074500679969788e-02 9.7426509857177734e-01 396 + blend 0.0000000000000000e+00 + interp 4.8829201616864204e-01:2.5789916688318393e-01:9.5309297829120998e-01:3.6771025067469626e-01:1.7128914206434276e+00:2.4508228323156755e-01:2.4993700857403773e+00:4.8828713324848039e-01:3.1333186814428440e+00:3.2352993854928958e-01:3.9195900725363373e+00 + CVs 20 + 1.0491312826484374e+00 1.8178428658342699e-01 -3.0958814960167735e-01 + 1.7803608030839251e+00 1.8682553480478026e-01 -5.4149739975715483e-01 + 2.4383417980720870e+00 1.4237981585650461e-01 -7.1957200715293645e-01 + 3.1164555519763875e+00 9.1268480964742493e-02 -8.4584181993843588e-01 + 3.8021854505237171e+00 1.8733835739582871e-02 -9.1345925607261957e-01 + 4.4832012334544533e+00 -9.3472233421694195e-02 -9.2689201816378586e-01 + 5.1394915953391092e+00 -2.6420462846612114e-01 -8.9655389997267709e-01 + 5.7417921213929519e+00 -5.0872260079628551e-01 -8.3177672416557547e-01 + 6.2609750784190323e+00 -8.3246172294542164e-01 -7.4009836110088845e-01 + 6.6761306374349951e+00 -1.2268539310268503e+00 -6.2747288029747195e-01 + 6.9773343522096507e+00 -1.6688110243438268e+00 -4.9455489330542179e-01 + 7.1600297255118477e+00 -2.1236344620387131e+00 -3.4856047593084938e-01 + 7.2314957179575874e+00 -2.5519357997977750e+00 -1.9618170345507335e-01 + 7.2136803937267251e+00 -2.9299412326173293e+00 -5.1228772020193269e-02 + 7.1339256502955326e+00 -3.2531299097593380e+00 6.7429329309994013e-02 + 7.0144137342416562e+00 -3.5139896994224129e+00 1.4648647428954875e-01 + 6.8755426793019749e+00 -3.6988956374504385e+00 1.7876713302515901e-01 + 6.7360264395537106e+00 -3.8269031875128450e+00 1.6058300455689589e-01 + 6.5429542918219212e+00 -4.1121642085561625e+00 8.6346523421915400e-02 + id 14183 + loc 2.4451714754104614e-01 5.5823969841003418e-01 405 + blend 0.0000000000000000e+00 + interp 5.1255223078890011e-01:4.1208848078159244e-01:8.1161868086985889e-02:3.0075073530236973e-01:7.3521657523881490e-01:3.9329061303882623e-01:1.0579516693334301e+00:5.1110299707127305e-01:1.8335979939794700e+00:4.2239290033560134e-01:2.1347849415162656e+00:3.9039007284249960e-01:2.9200832412778208e+00:4.2248464247299461e-01:3.1626867466191926e+00:5.1254710526659220e-01:3.7424618542155792e+00 + CVs 20 + 7.5231681106721418e-02 2.0638851096027605e-01 4.5015847861074300e-02 + 5.2846025936815144e-02 3.6432044473568703e-01 7.7257432739341783e-02 + -5.2191270497271847e-03 4.9938420346389167e-01 1.2019972596392758e-01 + -7.0528018738689080e-02 6.2617282372196625e-01 1.8894405895393285e-01 + -1.4442605440543213e-01 7.3649013870035140e-01 2.8722175224510627e-01 + -2.2684304460153268e-01 8.2215111090618975e-01 4.1564003376524794e-01 + -3.1646584137161615e-01 8.7735376101007623e-01 5.7212993150695046e-01 + -4.1127375647109599e-01 8.9955082243720574e-01 7.5399036484906790e-01 + -5.0881092764436342e-01 8.8807153996691823e-01 9.5891532595197959e-01 + -6.0619638528869324e-01 8.4297826274212573e-01 1.1844166373425919e+00 + -6.9990485045813844e-01 7.6434696298464433e-01 1.4265532693887182e+00 + -7.8675045012203126e-01 6.5195452095884010e-01 1.6772370480703569e+00 + -8.6393277147947045e-01 5.0783247372080220e-01 1.9252838200670930e+00 + -9.2572067724346585e-01 3.4200365510174624e-01 2.1664158208029756e+00 + -9.6060822051152417e-01 1.7260952709700600e-01 2.4116176787728172e+00 + -9.5486599109334980e-01 1.7930481850292113e-02 2.6746401869361631e+00 + -9.0183444646995548e-01 -1.1084974771120221e-01 2.9494188515427737e+00 + -8.0672191000879334e-01 -2.1013498960573024e-01 3.2134914183404675e+00 + -7.7169258087269488e-01 -3.0281377882547089e-01 3.3394063503306768e+00 + id 14184 + loc 2.9030963778495789e-01 4.9554440379142761e-01 399 + blend 0.0000000000000000e+00 + interp 5.2350774330818617e-01:3.7409311321592359e-01:1.8240102399185043e-01:2.7766286217287678e-01:9.2812533701149125e-01:4.0755613785990907e-01:1.2014394237710389e+00:5.2350250823075306e-01:1.9287721285924391e+00:3.8525714984899095e-01:2.1856412602882518e+00:3.3071718018987273e-01:2.8828130891760400e+00:3.8084012119810612e-01:3.2051606134316302e+00:3.7884470148591970e-01:3.9146642536430019e+00 + CVs 20 + -1.8767212010557865e-01 3.3177576052530688e-01 8.7972267860007392e-02 + -4.0903712488706895e-01 6.4506979754440252e-01 1.9747010731121617e-01 + -6.6610519175478222e-01 9.2720220257137409e-01 3.0094553703715843e-01 + -9.5398510525816349e-01 1.1755390173399407e+00 3.9417830851230762e-01 + -1.2645786462557684e+00 1.3937461342448674e+00 4.8860008286467688e-01 + -1.5887106714401784e+00 1.5812258978065568e+00 5.9662070030993108e-01 + -1.9174304981493662e+00 1.7281584120353344e+00 7.2711369827745154e-01 + -2.2380052210824264e+00 1.8125074159519949e+00 8.8197649463958872e-01 + -2.5277705027316717e+00 1.8031082572054618e+00 1.0506043631111843e+00 + -2.7511742249824267e+00 1.6770471440225190e+00 1.2027990197766203e+00 + -2.8770900737668383e+00 1.4528712728178395e+00 1.2997987111820424e+00 + -2.9317604733390277e+00 1.1857388429401241e+00 1.3458164691630319e+00 + -2.9845523529760887e+00 8.8887794126431663e-01 1.3907320969635690e+00 + -3.0924013702918902e+00 5.4525032145832852e-01 1.4742947900940899e+00 + -3.3223649052048057e+00 1.6508418005594366e-01 1.6171486396001000e+00 + -3.7408910502938517e+00 -1.8002005038819180e-01 1.7727835185484613e+00 + -4.3450102553225856e+00 -3.6888476503717005e-01 1.7719605977141093e+00 + -4.9415493271354585e+00 -3.6302624276419315e-01 1.5051177587958930e+00 + -5.3754876482026495e+00 -5.3525469207891163e-01 1.4033450537785159e+00 + id 14185 + loc 4.1390806436538696e-01 1.8135191500186920e-01 404 + blend 0.0000000000000000e+00 + interp 4.4754563594561181e-01:2.7933312597221538e-01:2.3581368503060363e-02:4.4754116048925235e-01:1.0176721838862615e+00:3.7056591386891347e-01:1.6481947322049650e+00:2.6072590890880765e-01:2.0481896731062301e+00:2.8494601877546288e-01:2.9560661527588730e+00:3.5803417722315223e-01:3.3102612272000407e+00 + CVs 20 + -1.4479246532937717e-01 1.4669798164269038e-01 -1.0972385431838490e-01 + -2.9365801232592204e-01 3.0450383871071340e-01 -2.0814267428694244e-01 + -4.4614328446252716e-01 4.7419856366167423e-01 -2.9570669281816198e-01 + -6.0214961889917307e-01 6.5673084564309592e-01 -3.7088865743572652e-01 + -7.6201077919461713e-01 8.5075429648174494e-01 -4.2878925036497040e-01 + -9.2804881686696084e-01 1.0512882087892581e+00 -4.6059283472118606e-01 + -1.1014647783230591e+00 1.2488746987325374e+00 -4.5494449030828482e-01 + -1.2778409846094712e+00 1.4318191402411093e+00 -4.0407395119024975e-01 + -1.4478921316202733e+00 1.5895140686334588e+00 -3.0766277882417958e-01 + -1.6019428569735825e+00 1.7141650149592520e+00 -1.7154870055559590e-01 + -1.7348560145192000e+00 1.8025101107095216e+00 -5.7650374366288171e-03 + -1.8413960212248064e+00 1.8537060811543662e+00 1.7728101094790027e-01 + -1.9224623330724819e+00 1.8724586066269642e+00 3.6529982665453331e-01 + -1.9760435640900478e+00 1.8662215440294039e+00 5.4672202748714938e-01 + -1.9935256837550568e+00 1.8461266364445847e+00 7.0739702599888976e-01 + -1.9728509526410389e+00 1.8204598582410956e+00 8.3407988452268977e-01 + -1.9313345290630219e+00 1.7861434774345077e+00 9.2614790436453931e-01 + -1.8927126831217549e+00 1.7359942164243796e+00 9.9831873333874777e-01 + -1.9266110521650506e+00 1.7007355747813264e+00 1.1723929381068556e+00 + id 14186 + loc 2.5228482484817505e-01 7.4801796674728394e-01 381 + blend 0.0000000000000000e+00 + interp 5.1054679493160400e+00:3.1539849073780901e-01:2.4467528659867532e-01:2.6269845650026735e-01:1.0765477967257231e+00:4.2789323542000318e-01:1.6069026866379392e+00:1.0601658855424050e+00:1.6876359840307811e+00:5.1054579493160404e+00:3.6032769102354325e+00:4.3163345966840660e+00:3.6443282188525039e+00:4.0853718126154409e-01:3.7333363352329179e+00 + CVs 20 + 1.0373839011348764e+00 2.7458457118196755e-01 -6.5822819940203936e-01 + 1.7462674928343194e+00 3.4427363829263258e-01 -1.1389388730801795e+00 + 2.3727224744132314e+00 2.9902110815248639e-01 -1.5754142977145484e+00 + 3.0349438195953300e+00 1.6910994248437106e-01 -2.0326993972328058e+00 + 3.7032511659334726e+00 -5.3488883271943122e-02 -2.4981316030621001e+00 + 4.3345414476883990e+00 -3.6501423551900980e-01 -2.9557069805137708e+00 + 4.8805309819818445e+00 -7.4773042846667270e-01 -3.3835991706465394e+00 + 5.3092308670325625e+00 -1.1651975221155995e+00 -3.7578854085131677e+00 + 5.6226061469579989e+00 -1.5710409221445905e+00 -4.0674465974411049e+00 + 5.8521788817074203e+00 -1.9295366651328578e+00 -4.3176323577766738e+00 + 6.0391957574903019e+00 -2.2290073357621205e+00 -4.5203170089829099e+00 + 6.2177309345589480e+00 -2.4873182562568332e+00 -4.6896084480744324e+00 + 6.4002593246761359e+00 -2.7616613893507269e+00 -4.8410297795517137e+00 + 6.5553334079965300e+00 -3.1453358786052963e+00 -4.9830941612428994e+00 + 6.6279741558042460e+00 -3.7025807871195981e+00 -5.1140536161671548e+00 + 6.6098498455198564e+00 -4.4098264179464408e+00 -5.2441458350111043e+00 + 6.5433178809417232e+00 -5.1732534910246866e+00 -5.3956361407315043e+00 + 6.4582155061604203e+00 -5.8802574490963719e+00 -5.5896983488721483e+00 + 6.3590364316646646e+00 -6.4823070186336764e+00 -5.8069437194923239e+00 + id 14187 + loc 8.7168258428573608e-01 3.8621905446052551e-01 1069 + blend 0.0000000000000000e+00 + interp 3.4664207142151360e-01:3.4663860500079940e-01:2.2316455743617136e-01:2.4054002642162772e-01:8.8231970245839964e-01:2.7145001216341152e-01:1.7185886728772612e+00:3.2877949364493186e-01:2.6418634111346750e+00:2.6722712105032614e-01:3.5648504280857165e+00 + CVs 20 + -1.1623583112653475e-01 2.4983039319155939e-01 2.6746615689855058e-01 + -2.7082125011050739e-01 4.7761217952159007e-01 5.1489574528605953e-01 + -4.6972590723096802e-01 6.8085509261918786e-01 7.4812478631422497e-01 + -7.1680539928317999e-01 8.5791074744861340e-01 9.5979767467627530e-01 + -1.0123972992000785e+00 1.0237544032073191e+00 1.1447085044404539e+00 + -1.3361517124460920e+00 1.2276717122987888e+00 1.3172490303176354e+00 + -1.6260194543450903e+00 1.5212797788954058e+00 1.4994234964859363e+00 + -1.8140374848926015e+00 1.8916876453202509e+00 1.7076454636293921e+00 + -1.8735672054023271e+00 2.2714440483492959e+00 1.9651450347017874e+00 + -1.7996366172667151e+00 2.5580750666790113e+00 2.3014279826883230e+00 + -1.6232095458121700e+00 2.6283135916393978e+00 2.6905391174444873e+00 + -1.4220549660543633e+00 2.4716889773567630e+00 3.0425383839312090e+00 + -1.2453167220037666e+00 2.1639063021012137e+00 3.3150509884476480e+00 + -1.1238906452579427e+00 1.7647544119901135e+00 3.5012702716984916e+00 + -1.0766154845042846e+00 1.3164930037135862e+00 3.6049657600453449e+00 + -1.1216203950443342e+00 8.3937753830177897e-01 3.5907246109705504e+00 + -1.2775334728947558e+00 3.9137346226490299e-01 3.3782314479169688e+00 + -1.4835638948989049e+00 5.8907936662831839e-02 2.9974474641549675e+00 + -1.4901648245023402e+00 -4.0083919707869842e-01 2.8571044322691765e+00 + id 14188 + loc 7.3892273008823395e-02 2.2878427803516388e-01 402 + blend 0.0000000000000000e+00 + interp 4.9256790524658794e-01:3.6548358811032067e-01:8.6178213473179155e-01:3.9311776172194596e-01:1.2779101601198675e+00:4.2723193633715700e-01:1.9860606027420333e+00:4.9256297956753547e-01:2.7369855244455716e+00:4.3079153995539360e-01:3.0476659988845016e+00:3.1297283826513594e-01:3.9594001194744646e+00 + CVs 20 + -4.3069263553981926e-02 4.6531987739229769e-01 1.6658222548625584e-01 + -1.2303183252818976e-01 9.1418116365526458e-01 2.9553962954439816e-01 + -2.5111078347212690e-01 1.3392232423896391e+00 3.8944819127927155e-01 + -4.2744938160748736e-01 1.7319500014530889e+00 4.5973137386939977e-01 + -6.4404755397707947e-01 2.0836404923858569e+00 5.1749412486493518e-01 + -8.8886951526967273e-01 2.3891739272400030e+00 5.6892358113499908e-01 + -1.1527066567028053e+00 2.6502538926076604e+00 6.1586935933585329e-01 + -1.4301615937278598e+00 2.8718092036608005e+00 6.5770311262888770e-01 + -1.7158682598108292e+00 3.0601043726857342e+00 6.9741444369505889e-01 + -2.0047574267902561e+00 3.2238814796142323e+00 7.4538577762551550e-01 + -2.3010069721569151e+00 3.3742874487762942e+00 8.0813997426820705e-01 + -2.6273894501639354e+00 3.5203905867359113e+00 8.7600122867572683e-01 + -3.0102797729303874e+00 3.6457345427890568e+00 9.3049476554432575e-01 + -3.4386670616970787e+00 3.6907555953162738e+00 9.4954778076229773e-01 + -3.8617839273484096e+00 3.5972280316904093e+00 9.0902643054578403e-01 + -4.2259007217761875e+00 3.3337380746212237e+00 8.0550326543341721e-01 + -4.4962063222604103e+00 2.8770065979772625e+00 6.7542586152540973e-01 + -4.6764246100842826e+00 2.3275814963846670e+00 6.5380419109579391e-01 + -4.6794618992868440e+00 2.3106084690109019e+00 9.0490018837804054e-01 + id 14189 + loc 9.4123959541320801e-01 4.0816706418991089e-01 395 + blend 0.0000000000000000e+00 + interp 4.4303298841917294e-01:2.7046326981667329e-01:1.2660727728483234e-01:4.4302855808928876e-01:9.9533991848893477e-01:2.8894816249867683e-01:1.5617259289178738e+00:2.6462069136469496e-01:2.2770000017417393e+00:2.8391540193371667e-01:3.1117383384691881e+00 + CVs 20 + -4.3415756575191033e-01 2.3650243262509454e-01 4.3324396390193587e-01 + -7.5695224575569675e-01 3.9517866265595236e-01 7.7359014424770933e-01 + -1.0554431242535545e+00 5.2620348790081728e-01 1.0785546245780522e+00 + -1.3707253380956670e+00 6.5468207909897047e-01 1.3694601234984458e+00 + -1.7074492167758608e+00 7.7563316115277858e-01 1.6400161654984782e+00 + -2.0684674991490701e+00 8.8331142864810819e-01 1.8866713819957501e+00 + -2.4535975502578027e+00 9.7583290358006458e-01 2.1128269197405367e+00 + -2.8605912457473264e+00 1.0527153368033073e+00 2.3262503600575299e+00 + -3.2903636880980831e+00 1.1059836058533046e+00 2.5326128490925561e+00 + -3.7477494544750254e+00 1.1191049700415512e+00 2.7335408570515924e+00 + -4.2306266126420713e+00 1.0774352076223566e+00 2.9298569634446179e+00 + -4.7226251739702825e+00 9.7783585812589191e-01 3.1214561101758038e+00 + -5.2071062921804216e+00 8.2629751016148756e-01 3.3053388608478844e+00 + -5.6893403045379571e+00 6.2192806977825654e-01 3.4806172243453188e+00 + -6.1830979777821122e+00 3.4982399636496408e-01 3.6596437171939664e+00 + -6.6829927960826279e+00 1.9574399628008443e-03 3.8719994480356110e+00 + -7.1600963988629349e+00 -4.2166487644770623e-01 4.1444711436114616e+00 + -7.5532143910251843e+00 -9.1852525673780239e-01 4.4549525489188913e+00 + -7.6497533326873883e+00 -1.2892568706830336e+00 4.5998481708820709e+00 + id 14190 + loc 4.5360985398292542e-01 6.4866775274276733e-01 379 + blend 0.0000000000000000e+00 + interp 4.8808336420865639e-01:3.2944923340900867e-01:1.8718030831684229e-01:4.4248145734949551e-01:8.5604827017321494e-01:4.8807848337501430e-01:1.0497229863850881e+00:3.1103089874874518e-01:2.0009986980290129e+00:3.9496469378128229e-01:2.7117807489942685e+00:3.2038074337238082e-01:3.0663378944580444e+00:3.2808862306928521e-01:3.8963577454108096e+00 + CVs 20 + -2.4517736668156176e-01 2.0182044726031068e-01 1.6470891603520327e-01 + -4.4859800041642672e-01 3.8882089893168570e-01 3.4345193311650180e-01 + -6.3045757539595049e-01 5.3762670112006750e-01 5.5050616510249406e-01 + -8.1353807004038392e-01 6.5285142270671814e-01 8.2124677396513390e-01 + -9.9261103839539033e-01 7.7502762998490082e-01 1.1570746314964269e+00 + -1.1791370770421736e+00 9.5048995413134629e-01 1.5282496471310023e+00 + -1.4200364956383100e+00 1.2048294552065739e+00 1.8936981700965325e+00 + -1.7429897247156316e+00 1.5418171512603354e+00 2.1987106711940640e+00 + -2.1296689994652769e+00 1.9440087186023449e+00 2.3993626089389761e+00 + -2.5585317682753166e+00 2.3761996004294130e+00 2.4816545492775446e+00 + -3.0255805264289357e+00 2.7968745800262429e+00 2.4513940461746340e+00 + -3.5326154516560275e+00 3.1538552699638238e+00 2.3175063706907792e+00 + -4.0656296885526855e+00 3.3719488000402427e+00 2.0854430569970934e+00 + -4.5755813242945012e+00 3.3860438292325834e+00 1.7606120838969859e+00 + -4.9735011691979158e+00 3.1879398893408304e+00 1.3787432882912403e+00 + -5.2072350118496482e+00 2.8487441146516788e+00 1.0526922794181655e+00 + -5.3206780487167640e+00 2.4737352417335514e+00 9.3054793340241138e-01 + -5.3730665041576522e+00 2.1818306750410401e+00 1.0250794591553309e+00 + -5.4504567088637508e+00 1.8676716081874054e+00 1.0171161034000509e+00 + id 14191 + loc 6.5229105949401855e-01 5.3578972816467285e-01 378 + blend 0.0000000000000000e+00 + interp 4.1623279054497314e-01:3.4951726370540981e-01:2.7852179215875483e-01:3.5874288189728804e-01:9.4299059086974379e-01:2.9331598030984823e-01:1.3407999826421191e+00:4.1622862821706769e-01:1.9224277144081166e+00:3.9085230471480625e-01:2.1544322784168890e+00:2.7742946694896298e-01:2.8745550461858156e+00:2.9753171614491991e-01:3.4129953988416255e+00 + CVs 20 + 3.8554058084725701e-01 3.4674680924703205e-01 1.2280863348001805e-01 + 7.1251052743548449e-01 6.5611730031925264e-01 2.3457748368349451e-01 + 1.0234411397562315e+00 9.4722286115368970e-01 3.3425485743903183e-01 + 1.3256687816961588e+00 1.2338466682900284e+00 4.2029064278943223e-01 + 1.6118652960396267e+00 1.5272279227892980e+00 4.9265334087627266e-01 + 1.8984382833584479e+00 1.8387422355535246e+00 5.5780616828739393e-01 + 2.2157245442162319e+00 2.1618338560860275e+00 6.2908451273968746e-01 + 2.5868723839490260e+00 2.4745916988903449e+00 7.2232042557703025e-01 + 3.0232468299253670e+00 2.7536065600772490e+00 8.5812124663807143e-01 + 3.5256048296874187e+00 2.9747633555761994e+00 1.0581278847491995e+00 + 4.0883090942826126e+00 3.1117551077091341e+00 1.3275722011332525e+00 + 4.7026922280097025e+00 3.1342186117240356e+00 1.6496564619910647e+00 + 5.3317986165926090e+00 3.0100985286827395e+00 1.9786726289440884e+00 + 5.8871890714439008e+00 2.7526672891951831e+00 2.2321210185388485e+00 + 6.3001594743714406e+00 2.4474253454406405e+00 2.3602932740505507e+00 + 6.5718189541281244e+00 2.1720868478925262e+00 2.4044378788348353e+00 + 6.7217185545920390e+00 1.9627434149625458e+00 2.4442435234159738e+00 + 6.8158784019166827e+00 1.8110842114679793e+00 2.5190783549638982e+00 + 7.1449338698444791e+00 1.6521623188849319e+00 2.5920610525670544e+00 + id 14192 + loc 8.4719401597976685e-01 1.9352874159812927e-01 373 + blend 0.0000000000000000e+00 + interp 3.1262884548301201e-01:2.0634232666891653e-01:4.6687362515420172e-01:2.0924760625071967e-01:1.3370672157942638e+00:2.2780890030759154e-01:2.0409434233520729e+00:3.1262571919455717e-01:2.6280831149501753e+00:2.9638499796285561e-01:3.0664392036134775e+00:2.1793808021451233e-01:3.8876592949681879e+00 + CVs 20 + 3.8304628888869746e-01 3.6886180627677723e-01 -2.0455185306429549e-02 + 7.8649410406923292e-01 6.4543418170621880e-01 -4.6306206771029035e-02 + 1.2127881884351277e+00 8.1385085540536450e-01 -8.6536319937831951e-02 + 1.6648973740141570e+00 9.5775716075619832e-01 -1.3973820431158018e-01 + 2.1126012753386272e+00 1.1550643374428964e+00 -1.9577285264659244e-01 + 2.5387771969520618e+00 1.4340953292854068e+00 -2.1785439104994386e-01 + 2.9301157753621307e+00 1.7988656324405423e+00 -1.6487582410371515e-01 + 3.2474058463882209e+00 2.2359395865971301e+00 -2.3972639265901208e-02 + 3.4622737534721377e+00 2.7121234252054260e+00 1.9363152674138262e-01 + 3.5839448739365429e+00 3.1892695500576753e+00 4.7463245867957227e-01 + 3.6357945118022643e+00 3.6371893201329835e+00 8.2587299075001153e-01 + 3.6262439901776711e+00 4.0155492969977296e+00 1.2773749957291523e+00 + 3.5404802350635545e+00 4.2556271393500626e+00 1.8339970312467950e+00 + 3.3555831314933728e+00 4.2995640873307543e+00 2.4196026279777003e+00 + 3.0878093858936246e+00 4.1463316253997915e+00 2.9352655118728670e+00 + 2.7945782624624531e+00 3.7942466146446359e+00 3.3732343463313774e+00 + 2.5768968182851753e+00 3.1627556710204026e+00 3.7452214005812015e+00 + 2.5483926562942338e+00 2.4848560567220312e+00 3.9078963359925005e+00 + 2.5199966825036419e+00 2.1936882196487915e+00 3.8121653192037228e+00 + id 14193 + loc 5.4754775762557983e-01 6.6430860757827759e-01 393 + blend 0.0000000000000000e+00 + interp 4.6117265830779564e-01:3.4419102741483554e-01:8.2337405145982756e-02:4.6116804658121258e-01:7.6909064604189614e-01:3.8019982926220836e-01:1.0925979625263222e+00:3.9501304192368142e-01:1.7279495882815010e+00:3.8881812470862481e-01:2.0370013955645887e+00:3.7918248211117472e-01:2.8981280905351356e+00:2.6385714417591843e-01:3.6626877080141118e+00 + CVs 20 + -3.4407984313086792e-01 2.6132202743169597e-01 -1.1676839765270880e-01 + -6.6283793577734040e-01 5.2529236354946240e-01 -2.4023666426316903e-01 + -9.4930217804514971e-01 8.1265069625550812e-01 -3.8713987403596373e-01 + -1.1940927280549005e+00 1.1213349101163039e+00 -5.6311508928590370e-01 + -1.4012668458797166e+00 1.4423942470012889e+00 -7.6746927234062690e-01 + -1.5825293527931947e+00 1.7720109710036762e+00 -1.0002794464931015e+00 + -1.7527482233966780e+00 2.1127789292313075e+00 -1.2635113926939079e+00 + -1.9442155865968558e+00 2.4651011201339816e+00 -1.5602787403692666e+00 + -2.2037246273674946e+00 2.7998661236246773e+00 -1.8847851145736265e+00 + -2.5424736666277807e+00 3.0649984199767157e+00 -2.2190638826483990e+00 + -2.9327925140655902e+00 3.2424087319280481e+00 -2.5607564193797927e+00 + -3.3650986797790643e+00 3.3401878786341057e+00 -2.9292081039729356e+00 + -3.8450829354422975e+00 3.3408616188918314e+00 -3.3172486201899196e+00 + -4.3520996166910910e+00 3.2118427292535365e+00 -3.6714996766745656e+00 + -4.8523756557437396e+00 2.9418197513386941e+00 -3.9631090575198562e+00 + -5.3347404503358984e+00 2.5227141361063934e+00 -4.2244974901920784e+00 + -5.8186682174558308e+00 1.9696539921097991e+00 -4.4473269678604987e+00 + -6.3228230980731555e+00 1.3646235264771764e+00 -4.5099676321333124e+00 + -6.8048813027336372e+00 8.1737478282672660e-01 -4.3325997607481623e+00 + id 14194 + loc 8.1497853994369507e-01 7.3292106389999390e-01 400 + blend 0.0000000000000000e+00 + interp 4.0362862448200976e-01:3.2499167245221949e-01:2.1171900954717615e-01:3.2963549808994869e-01:9.9608496248388667e-01:3.3319541581929379e-01:1.8331902118531653e+00:3.2990418589103793e-01:2.3715729718832153e+00:4.0362458819576497e-01:2.9725959016602284e+00:2.9561232830514456e-01:3.4337879066557804e+00 + CVs 20 + -1.3705110652904376e-01 1.8446640012002374e-01 -2.5377556373841903e-01 + -2.8546462213517887e-01 3.6188236086544012e-01 -4.8564115669951158e-01 + -4.3119988560843592e-01 5.3476404507189768e-01 -7.0180235738768326e-01 + -5.7321677097502544e-01 7.0414924934405276e-01 -9.0239257390627281e-01 + -7.1970572115744980e-01 8.7055064945403027e-01 -1.0872027979652132e+00 + -8.7766387485099095e-01 1.0377748902804129e+00 -1.2620334327177583e+00 + -1.0499413699451030e+00 1.2168885832903187e+00 -1.4397489494676274e+00 + -1.2345209907014649e+00 1.4209809445288997e+00 -1.6410585913217968e+00 + -1.4225964521696448e+00 1.6499355691751825e+00 -1.8887347402473607e+00 + -1.6006555360955368e+00 1.8897195643951261e+00 -2.1984990238423561e+00 + -1.7506012494088339e+00 2.1248049277690710e+00 -2.5769229634902779e+00 + -1.8560258251872692e+00 2.3397729910992542e+00 -3.0293593315007090e+00 + -1.9098647662576731e+00 2.5088110453756607e+00 -3.5693746896565135e+00 + -1.9052250882266553e+00 2.5890239860687889e+00 -4.2061578940186761e+00 + -1.8200443565158244e+00 2.5335583610177563e+00 -4.9193565322880186e+00 + -1.6239805872929933e+00 2.3107769377005392e+00 -5.6490092810541519e+00 + -1.3114751383211587e+00 1.9187866883829723e+00 -6.2988730050202024e+00 + -9.3413594302198044e-01 1.4175760617447870e+00 -6.7553850352741591e+00 + -6.5504515935204899e-01 1.0317292338899939e+00 -6.8708119227128073e+00 + id 14195 + loc 5.2691664546728134e-02 1.7009226977825165e-01 401 + blend 0.0000000000000000e+00 + interp 4.5678259984832825e-01:4.0705217684119255e-01:1.5498571041244835e-01:2.8732617809691402e-01:8.5472822809388282e-01:3.7927765720139928e-01:1.1751968010474043e+00:2.7421145495308374e-01:1.9994796709435305e+00:4.5677803202232981e-01:2.3188503775345106e+00:4.0656905511175800e-01:3.1792533677528527e+00:2.9690122553482018e-01:3.8414686647971354e+00 + CVs 20 + -2.4614911921910126e-01 2.0490188540177459e-01 2.2217396648426224e-01 + -4.8275133899540845e-01 4.2529035001457832e-01 3.9376270690274839e-01 + -7.2135684926478894e-01 6.5059777129593444e-01 5.4983643809404481e-01 + -9.7027693166882789e-01 8.7795250479737219e-01 7.0949486792921845e-01 + -1.2348988132098544e+00 1.1076297076615969e+00 8.7942962681906378e-01 + -1.5203306851344123e+00 1.3365967319152854e+00 1.0726685706678483e+00 + -1.8283911473377865e+00 1.5561276053836717e+00 1.3098167462379009e+00 + -2.1580352625184260e+00 1.7510132646537924e+00 1.6173859361769887e+00 + -2.5002394898957916e+00 1.8989320021833909e+00 2.0155841196456965e+00 + -2.8390035608142954e+00 1.9764738598905236e+00 2.5085624830106816e+00 + -3.1619132946652200e+00 1.9643857573378884e+00 3.0855050799665218e+00 + -3.4617566544874290e+00 1.8421417687982249e+00 3.7278745359520440e+00 + -3.7209280040776616e+00 1.5894157131632030e+00 4.4109714707761025e+00 + -3.8904816664584225e+00 1.2136223415285592e+00 5.1096547232758605e+00 + -3.8815722626532683e+00 7.7673697750727011e-01 5.8095451056070715e+00 + -3.6023942650699823e+00 3.9721188728856921e-01 6.4819941134697725e+00 + -3.0314825149779203e+00 2.1708782367342705e-01 7.0520845251760926e+00 + -2.3139979870588268e+00 2.8611585624017677e-01 7.4449568983054615e+00 + -1.8523708576852378e+00 2.7329161151354742e-01 7.8535685453631903e+00 + id 14196 + loc 1.1819081753492355e-01 6.9760143756866455e-02 412 + blend 0.0000000000000000e+00 + interp 3.8010481513805749e-01:3.4152212366438417e-01:2.0251769602805214e-01:3.8010101408990615e-01:1.0162691699248414e+00:3.2681590220387441e-01:2.0400726082113438e+00:2.9893373432650544e-01:2.7621610552909344e+00:3.1218542653763265e-01:3.3256455096941617e+00 + CVs 20 + -1.0770221208465305e-01 1.6258921149349806e-01 -4.4940074029254984e-01 + -2.1108025068966396e-01 2.5810970120068416e-01 -7.8557944956997794e-01 + -2.9804840276394207e-01 3.3204115400887024e-01 -1.1021067178447665e+00 + -3.5841953277540789e-01 4.0387293310609113e-01 -1.4437878565420290e+00 + -3.8524891200281586e-01 4.6378895176800078e-01 -1.8051205294048662e+00 + -3.7139006794926260e-01 5.0308382483205438e-01 -2.1759131469217041e+00 + -3.1163122656414577e-01 5.1580195732656153e-01 -2.5433182441506430e+00 + -2.0628471380645669e-01 4.9848059733926853e-01 -2.8943878352246344e+00 + -6.1326850319091131e-02 4.5044343304035639e-01 -3.2164525945164586e+00 + 1.1400754854484862e-01 3.7433424067118914e-01 -3.4989938805812435e+00 + 3.0900548077518458e-01 2.7205112524948549e-01 -3.7448538726487026e+00 + 5.1186805169621796e-01 1.3572350409513700e-01 -3.9802672005104998e+00 + 7.0304761547023853e-01 -5.1314892720464966e-02 -4.2297264417351537e+00 + 8.5845653406811606e-01 -2.9240902546546388e-01 -4.4785336132945055e+00 + 9.7211037262459188e-01 -5.7010793703719909e-01 -4.6983518505452970e+00 + 1.0498557888337938e+00 -8.6661581425673595e-01 -4.8839346090475804e+00 + 1.0951378048034184e+00 -1.1715122923566077e+00 -5.0438545146060516e+00 + 1.1110358079213636e+00 -1.4727630632060531e+00 -5.1809900869441163e+00 + 1.1237463296136225e+00 -1.7051389011829763e+00 -5.2421513288038106e+00 + id 14197 + loc 8.5374826192855835e-01 2.5194072723388672e-01 402 + blend 0.0000000000000000e+00 + interp 4.8096345090685444e-01:3.2000179946663504e-01:4.7469664511033183e-01:2.7128674508266415e-01:1.3381407221473833e+00:4.8095864127234539e-01:2.0238427715146221e+00:2.9749463688101219e-01:2.9174191901736215e+00:3.0006920074967336e-01:3.8257764553229996e+00 + CVs 20 + 2.8184525514765246e-01 3.4001527480088267e-01 2.1025222918925993e-01 + 5.4334196428771220e-01 6.9125436734986323e-01 4.3500998388084477e-01 + 7.9229203234598133e-01 1.0348095627861036e+00 6.7746146694754628e-01 + 1.0579937694603920e+00 1.3412053281056875e+00 9.0894343507544961e-01 + 1.3653664625587660e+00 1.5892389164799019e+00 1.1100227195396546e+00 + 1.7266301185086224e+00 1.7719176618580528e+00 1.2873959243372961e+00 + 2.1474858497574725e+00 1.8790194363140846e+00 1.4658411585576963e+00 + 2.6231943091711987e+00 1.8859542093547703e+00 1.6782656541430245e+00 + 3.1215783033092781e+00 1.7550512157604019e+00 1.9483159277772282e+00 + 3.5784451643821149e+00 1.4497681042571371e+00 2.2707442307419905e+00 + 3.9276022647031583e+00 9.9361512754286063e-01 2.5964618123717305e+00 + 4.1983531524987132e+00 5.1193833450681026e-01 2.8662443622139251e+00 + 4.4935212314699156e+00 1.1768766269960818e-01 3.0691236880769446e+00 + 4.8577752403238321e+00 -1.3489446889749734e-01 3.2220910575023209e+00 + 5.2684488024837623e+00 -2.3882151222705028e-01 3.3595484240378011e+00 + 5.7018101037761024e+00 -2.5540552336662525e-01 3.5453372911804832e+00 + 6.1619362546628791e+00 -2.4983744007633280e-01 3.8483347882837675e+00 + 6.6172068296413045e+00 -2.1942075144394102e-01 4.2612032801643442e+00 + 7.0290279087498089e+00 -1.5908705174444915e-01 4.6564402581789919e+00 + id 14198 + loc 6.4063847064971924e-01 7.1405315399169922e-01 399 + blend 0.0000000000000000e+00 + interp 4.1247442242630133e-01:3.6784909806917188e-01:4.5533604597283217e-01:4.1247029768207710e-01:1.0181181441128782e+00:3.6538580390541975e-01:1.7410351233514905e+00:2.6585413511378769e-01:2.3682161930727323e+00:3.7626260171844950e-01:2.9771009061147931e+00:3.3964813110564374e-01:3.5659884151259598e+00 + CVs 20 + -2.0357572802714563e-01 3.6303671054058340e-01 -3.0127478626823406e-01 + -3.8703378145032324e-01 6.9332995548231402e-01 -6.3394750990823212e-01 + -5.7689863927785801e-01 9.7080661367786203e-01 -1.0024065369942350e+00 + -7.7906211596639496e-01 1.1736803983859478e+00 -1.3992251305919150e+00 + -9.8621810012160582e-01 1.2822301782518006e+00 -1.8081457461957633e+00 + -1.1822059795538433e+00 1.2870339891655576e+00 -2.2067540612980148e+00 + -1.3553607478979719e+00 1.2023499121091976e+00 -2.5801840478344245e+00 + -1.5093355488407900e+00 1.0573378259966011e+00 -2.9314869383317257e+00 + -1.6360974046307530e+00 8.7523808661311620e-01 -3.2561787541340523e+00 + -1.7094991116746447e+00 6.8305424797401648e-01 -3.5357773307305349e+00 + -1.7537896829796900e+00 4.9464636669220707e-01 -3.7945095523236629e+00 + -1.8496991467860153e+00 2.6081645668477671e-01 -4.0985767840226126e+00 + -2.0378724882716552e+00 -4.2131330049138271e-02 -4.4592162246843934e+00 + -2.2953438485835211e+00 -3.4680762746379251e-01 -4.8306873809350188e+00 + -2.6162909862172112e+00 -6.3282228132895846e-01 -5.1929782769945962e+00 + -3.0630975720213143e+00 -9.8752495565161613e-01 -5.5510457933854784e+00 + -3.7083601318480874e+00 -1.3985826118714617e+00 -5.8926713152312438e+00 + -4.4243976089377233e+00 -1.5820112796257719e+00 -6.1872621569268809e+00 + -4.8548435490343085e+00 -1.4327257086098841e+00 -6.3983329264588749e+00 + id 14199 + loc 1.5725228190422058e-01 6.3348311185836792e-01 404 + blend 0.0000000000000000e+00 + interp 4.5693960753446194e-01:3.6018488241728586e-01:4.4786396946789964e-01:4.5693503813838660e-01:1.0000429463448290e+00:4.0541554882120662e-01:1.9240592836899864e+00:2.8874370885960088e-01:2.1869526721684842e+00:4.0624413869950343e-01:3.0043545517159695e+00:2.9085798847292160e-01:3.6578985609789276e+00 + CVs 20 + 3.0550166053325552e-02 -7.0549301943791054e-02 3.8771989981117500e-02 + -7.3460123778955902e-02 -1.5007619137278175e-01 9.5277773912069347e-02 + -1.3195274604443133e-01 -2.0206707770336654e-01 1.3783821310010808e-01 + -1.2580163133464531e-01 -2.8667039765913882e-01 1.5530911554876070e-01 + -9.9179410977343396e-02 -3.7387450740580208e-01 1.5911152893727509e-01 + -5.9346537389609239e-02 -4.5562657456056144e-01 1.5564716190591560e-01 + -1.0041384114623519e-02 -5.2855630940467679e-01 1.5079782515479942e-01 + 4.7666649978452935e-02 -5.9086648148202747e-01 1.4893434262886812e-01 + 1.1393914085254192e-01 -6.4059651616442648e-01 1.5360574614772243e-01 + 1.8931987074977058e-01 -6.7494639269116896e-01 1.6811587153399288e-01 + 2.7386192084246552e-01 -6.9031068292115538e-01 1.9517464256384934e-01 + 3.6641528952652613e-01 -6.8256824960983031e-01 2.3675572197355349e-01 + 4.6451943609719248e-01 -6.4793356933942825e-01 2.9240134663602468e-01 + 5.6437742546484082e-01 -5.8371786189461683e-01 3.6043268169010234e-01 + 6.6152769223570895e-01 -4.8964408538799209e-01 4.3660190459014986e-01 + 7.5156802012914314e-01 -3.6789473460363964e-01 5.1663317029838407e-01 + 8.3094564812492777e-01 -2.2361957522329037e-01 5.9535102252197847e-01 + 8.9754878385539438e-01 -6.3339116755368630e-02 6.6844022893879518e-01 + 9.5787705017647551e-01 1.3612292623800498e-01 7.3128158601675419e-01 + id 14200 + loc 6.9272494316101074e-01 6.2445694208145142e-01 395 + blend 0.0000000000000000e+00 + interp 4.5691271833437919e-01:4.5690814920719586e-01:2.7091249604441625e-01:4.3502021210065156e-01:8.6403020450446610e-01:2.7994607826440693e-01:1.0655445808149653e+00:3.3313139255002439e-01:1.8432279762324906e+00:2.6743415635037249e-01:2.2799257919483686e+00:3.5895649961214110e-01:3.0008000431573345e+00:2.9063156079027774e-01:3.6661005888622364e+00 + CVs 20 + 4.4950932626937284e-01 1.3033424145499622e-01 -4.6281890683509563e-01 + 8.0574793589018379e-01 2.0667039062412607e-01 -8.3507205221037850e-01 + 1.1373071363802953e+00 2.7195229269691090e-01 -1.1746712063253828e+00 + 1.4711955661167682e+00 3.4059017472529118e-01 -1.4979696627473904e+00 + 1.8072995861154166e+00 4.0648844844529664e-01 -1.7966172924638983e+00 + 2.1444974087386783e+00 4.6381386247227707e-01 -2.0664231942240070e+00 + 2.4819585053190791e+00 5.0820222977664553e-01 -2.3068901692756301e+00 + 2.8195293759650459e+00 5.3614061023747506e-01 -2.5187949928611895e+00 + 3.1586281276972574e+00 5.4373376219272651e-01 -2.7052974686828613e+00 + 3.5036793505218995e+00 5.2472176850037577e-01 -2.8749746880688378e+00 + 3.8559426177059324e+00 4.6854027382730923e-01 -3.0407604487719277e+00 + 4.2030064860424750e+00 3.6550772602491888e-01 -3.2131724901369840e+00 + 4.5241307712854244e+00 2.1537635096143903e-01 -3.3962350237225483e+00 + 4.8040526040276408e+00 2.4551171409853190e-02 -3.5903806054803553e+00 + 5.0324679227293210e+00 -1.9628576255428110e-01 -3.7954991085549969e+00 + 5.2002704988187167e+00 -4.3096604329835175e-01 -4.0139089350426005e+00 + 5.3017415231968563e+00 -6.6952969190473155e-01 -4.2509134735641068e+00 + 5.3303322495140462e+00 -9.1250213460937912e-01 -4.4999341531173798e+00 + 5.2415686183210592e+00 -1.1880445983412811e+00 -4.6911813175062749e+00 + id 14201 + loc 9.1868990659713745e-01 9.5418155193328857e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4867876478411622e-01:3.8820965545954922e-01:7.2218345980195453e-01:4.4779440187616432e-01:1.4210919385979714e+00:3.1139884434945875e-01:2.0210548347043629e+00:4.4867427799646842e-01:2.7047904561625398e+00:4.1334389605503330e-01:3.2064583242683056e+00:3.1849514309450655e-01:3.7872989592829160e+00 + CVs 20 + 6.6961841360242608e-02 2.5219295025870170e-01 -6.7442597438873847e-02 + 1.4463110455723602e-01 5.1866734833328709e-01 -1.1386793366584552e-01 + 2.4264840333121082e-01 7.9793947436296953e-01 -1.5920512367807260e-01 + 3.6765240551567402e-01 1.0832350124543186e+00 -2.1866496622833026e-01 + 5.2524436826890186e-01 1.3732870190100812e+00 -2.9983762040593293e-01 + 7.2201050868938355e-01 1.6639694449662028e+00 -4.1249751133140239e-01 + 9.6359290898506811e-01 1.9408962206134681e+00 -5.6870971336428811e-01 + 1.2491768516741302e+00 2.1803827336173875e+00 -7.7651542579375110e-01 + 1.5698030284585351e+00 2.3603144613973512e+00 -1.0365701108994319e+00 + 1.9109717794626284e+00 2.4644104846277655e+00 -1.3443307538244571e+00 + 2.2547506732278015e+00 2.4811349961904781e+00 -1.6911858356389642e+00 + 2.5810544327501148e+00 2.4046755981535126e+00 -2.0638643140432045e+00 + 2.8700975828590352e+00 2.2365831617175811e+00 -2.4435597172534926e+00 + 3.1060576486576679e+00 1.9876282760412711e+00 -2.8064848584511819e+00 + 3.2817017985314001e+00 1.6769437897869728e+00 -3.1283744077515840e+00 + 3.4009183924665938e+00 1.3231401488544048e+00 -3.3895336212195146e+00 + 3.4724631441733589e+00 9.4125893641983605e-01 -3.5565962940572988e+00 + 3.4986837869277916e+00 5.7552134238620178e-01 -3.5593999602157549e+00 + 3.4909604929402431e+00 2.6790198553196953e-01 -3.4765148281207066e+00 + id 14202 + loc 7.1028482913970947e-01 2.7076262235641479e-01 379 + blend 0.0000000000000000e+00 + interp 4.0158694478260060e-01:4.0158292891315278e-01:4.4475914911174308e-02:2.7356126927294555e-01:8.6062950399755345e-01:3.2568612580749728e-01:1.6864845589814206e+00:3.8835015120329830e-01:2.0002895262587446e+00:3.6571679889625053e-01:2.2367774392150395e+00:3.9801118612258396e-01:2.7827066229149353e+00:2.7728740655284151e-01:3.1540565543798245e+00 + CVs 20 + 3.6067991392954146e-01 3.8365832458476756e-01 -8.5140648083221068e-02 + 6.7606958095793435e-01 7.1835629232121112e-01 -1.7006318293677739e-01 + 9.9831919289546811e-01 9.9775557180675145e-01 -2.8894731149793607e-01 + 1.3387722210302233e+00 1.2190650920769135e+00 -4.4717231526679202e-01 + 1.6936040019602405e+00 1.4006691912130016e+00 -6.2779430934655855e-01 + 2.0696970268472956e+00 1.5605909507870233e+00 -8.1520806758519293e-01 + 2.4759375423271783e+00 1.6897503381001080e+00 -9.9591724236432688e-01 + 2.9119632839884346e+00 1.7672647792531537e+00 -1.1587640083577810e+00 + 3.3637798142987538e+00 1.7848437110793820e+00 -1.2956374296908020e+00 + 3.8061213530736913e+00 1.7489851898728541e+00 -1.4009201867524668e+00 + 4.2082994413772576e+00 1.6768221324679358e+00 -1.4799160743603501e+00 + 4.5499033579661843e+00 1.5939258287892468e+00 -1.5492482249930228e+00 + 4.8358101150087300e+00 1.5099238314506109e+00 -1.6204468267495906e+00 + 5.0846412440437341e+00 1.3788967371735672e+00 -1.6953678537363073e+00 + 5.3043600168735505e+00 1.1337332753336358e+00 -1.7751504547643542e+00 + 5.5037646082317977e+00 7.8391876649281667e-01 -1.8425133252162764e+00 + 5.6839763564600752e+00 4.1509147072492514e-01 -1.8562045407274472e+00 + 5.8501262152583742e+00 9.7781745409628584e-02 -1.8166547520248326e+00 + 6.1125737338891701e+00 -9.6944044235820037e-02 -1.8535389844990113e+00 + id 14203 + loc 6.3027399778366089e-01 3.3882808685302734e-01 378 + blend 0.0000000000000000e+00 + interp 5.2960817345988709e-01:4.9963474675121156e-01:3.3369604014081056e-01:4.3743714681414664e-01:8.5842366411107984e-01:3.1502161769922948e-01:1.1322582950845508e+00:3.8766450416142095e-01:1.9066190615498069e+00:5.2960287737815248e-01:2.0826083190102493e+00:3.2813019145841449e-01:2.9654912058801468e+00:3.1360772350417598e-01:3.8526997909141603e+00 + CVs 20 + -4.0547613464342774e-01 4.3927053753825934e-01 -1.8398422319173252e-01 + -8.0302621610375480e-01 8.3172979622243648e-01 -3.3701693502236196e-01 + -1.2013477384753486e+00 1.1845039841563452e+00 -4.6801752644187233e-01 + -1.5866421433062190e+00 1.5083805456170127e+00 -5.9333743214346468e-01 + -1.9481713202127620e+00 1.8008179065841650e+00 -7.3054361937968748e-01 + -2.2949947270669693e+00 2.0517695334249799e+00 -8.9204377834363879e-01 + -2.6356054117900762e+00 2.2520967476897300e+00 -1.0799086172249714e+00 + -2.9736665640369488e+00 2.4002526659844019e+00 -1.2849539881497725e+00 + -3.3191395391568506e+00 2.4999566938708022e+00 -1.4996313704181961e+00 + -3.6875027612611011e+00 2.5512247871457947e+00 -1.7238611031287228e+00 + -4.0876604636944904e+00 2.5433199639066388e+00 -1.9589659570725328e+00 + -4.5168662963433688e+00 2.4552134149526088e+00 -2.2002114141513931e+00 + -4.9565295577115549e+00 2.2673366424705472e+00 -2.4282852128999082e+00 + -5.3723628305764191e+00 1.9953520487739800e+00 -2.6069925679780859e+00 + -5.7461200752703423e+00 1.6963765672529805e+00 -2.7208643091138525e+00 + -6.0879402813059578e+00 1.4257192746162271e+00 -2.7963025039110541e+00 + -6.4055158393900964e+00 1.2271853678000433e+00 -2.8556844055192343e+00 + -6.7122972644909424e+00 1.1078251133982175e+00 -2.9028113053721913e+00 + -7.1438761048892943e+00 9.1882852900513479e-01 -3.0113241038081004e+00 + id 14204 + loc 6.5001451969146729e-01 8.7875455617904663e-01 373 + blend 0.0000000000000000e+00 + interp 4.2212134648341748e-01:4.2211712526995265e-01:2.8740087003437720e-01:2.9634151414630278e-01:1.0136350231876396e+00:2.9499136579398616e-01:1.9639469127285762e+00:4.1523602942853249e-01:2.5343541972157784e+00:2.9286460106413276e-01:3.5741552914703085e+00 + CVs 20 + -2.3639489096736965e-01 3.1194287946510951e-01 -1.5594447329928757e-01 + -4.7953687471265671e-01 6.4367515332333924e-01 -3.2007633822219961e-01 + -7.0718653664117670e-01 9.9530910190500821e-01 -4.9245181835346097e-01 + -9.0928667773383187e-01 1.3644101441458247e+00 -6.8399656139182730e-01 + -1.0831945803752223e+00 1.7392838759863791e+00 -9.1247685210808305e-01 + -1.2320518931180036e+00 2.0903313888754949e+00 -1.1970557740706638e+00 + -1.3625507537922492e+00 2.3775356064635362e+00 -1.5481042872215816e+00 + -1.4792024848068410e+00 2.5727063323596040e+00 -1.9563341409613129e+00 + -1.5799145159306947e+00 2.6715161904264502e+00 -2.4005815641800567e+00 + -1.6537843666323242e+00 2.6841623343265604e+00 -2.8627573708216425e+00 + -1.6914962082695486e+00 2.6097848135299828e+00 -3.3228030106579420e+00 + -1.7073170112234550e+00 2.4311790325887737e+00 -3.7355244781663779e+00 + -1.7492162832240012e+00 2.1761132671821040e+00 -4.0410093395765951e+00 + -1.8672409817384850e+00 1.9532135713924383e+00 -4.2203843933616429e+00 + -2.0574134276357952e+00 1.8791306568882247e+00 -4.2764069053669260e+00 + -2.2191120228173493e+00 2.0167758997495620e+00 -4.1885433479518595e+00 + -2.1722695723224392e+00 2.3005183140038938e+00 -3.9732197379257572e+00 + -1.9655966345205185e+00 2.4769073741258643e+00 -3.8131298656820802e+00 + -2.1569621274497575e+00 2.4912242564781906e+00 -3.8737611133139596e+00 + id 14205 + loc 1.0512611269950867e-01 6.5847194194793701e-01 400 + blend 0.0000000000000000e+00 + interp 4.6754597767746109e-01:3.2227420758565239e-01:7.3655430863089144e-01:4.6754130221768436e-01:1.3142411507249963e+00:3.0062711150610777e-01:1.9771147519968566e+00:3.7156114297231302e-01:2.9614297920172259e+00:2.9463189043635185e-01:3.8568553116396433e+00 + CVs 20 + -2.1130947438195669e-01 3.0918243752327673e-01 -7.1836094181724180e-02 + -4.1985113622331921e-01 6.0536452564257848e-01 -1.8474129663813743e-01 + -6.2314981099173150e-01 8.7903041368112977e-01 -3.4934550811855336e-01 + -8.1703920091326376e-01 1.1223587282569749e+00 -5.6918449794374826e-01 + -9.9651628268242931e-01 1.3296305008251628e+00 -8.4194857162240999e-01 + -1.1567959990750454e+00 1.4961932460782756e+00 -1.1606946516566858e+00 + -1.2931184862880489e+00 1.6185061674708596e+00 -1.5157890177306093e+00 + -1.3993143566660542e+00 1.6933903344368644e+00 -1.8946753579828908e+00 + -1.4685030587260144e+00 1.7194246714020196e+00 -2.2859826363571449e+00 + -1.4931506793612344e+00 1.6956741806520594e+00 -2.6799735259964663e+00 + -1.4715888135162223e+00 1.6228652707299669e+00 -3.0712797639794820e+00 + -1.4192858687276055e+00 1.5042332294482714e+00 -3.4670706216939124e+00 + -1.3663763134518589e+00 1.3374728546914394e+00 -3.8712464409336151e+00 + -1.3462698067736931e+00 1.1080076550241116e+00 -4.2569368249401895e+00 + -1.3898629242592178e+00 8.0205077532052638e-01 -4.5843702427994151e+00 + -1.5234016999830724e+00 4.3137288008640473e-01 -4.8544351925496976e+00 + -1.7668191992894708e+00 2.7068169060782576e-02 -5.1007702967019304e+00 + -2.1061357829235297e+00 -3.7542986886965335e-01 -5.3330265479358747e+00 + -2.3461668646462397e+00 -7.4846069137818483e-01 -5.6389289259156463e+00 + id 14206 + loc 3.6062443256378174e-01 4.1411975026130676e-01 381 + blend 0.0000000000000000e+00 + interp 4.3717236951021715e-01:3.8780438571500042e-01:3.2342676192940467e-01:3.9399750427846097e-01:1.0327082923281545e+00:4.3716799778652204e-01:1.8759238994075016e+00:3.5296408767733523e-01:2.3038277161296334e+00:4.0770761887467022e-01:3.0014396434212189e+00 + CVs 20 + -7.2942077426356744e-01 2.0259184899417690e-01 -8.5315709237416648e-01 + -1.2583608789570484e+00 2.6146574369065995e-01 -1.3582855948896673e+00 + -1.7306059848465503e+00 2.5975202591271129e-01 -1.7708975591255125e+00 + -2.1957781472008495e+00 2.3843720993526241e-01 -2.2093519171236502e+00 + -2.6369117873398769e+00 1.9596027641922104e-01 -2.6948765280100409e+00 + -3.0463750428331964e+00 1.3212608541777693e-01 -3.2456621050980003e+00 + -3.4335968984164880e+00 3.7211145145718882e-02 -3.8698027483146320e+00 + -3.8148047495384314e+00 -1.0899489142512198e-01 -4.5589317669545535e+00 + -4.2003241346794775e+00 -3.3183728719052241e-01 -5.2901550457907600e+00 + -4.5955741685221474e+00 -6.5990578959388491e-01 -6.0289076598244442e+00 + -5.0043081120435753e+00 -1.1168667180412855e+00 -6.7238688914917724e+00 + -5.4175632697086495e+00 -1.7138403068455021e+00 -7.3113095863986466e+00 + -5.8109212935310204e+00 -2.4343764743786398e+00 -7.7317413828165922e+00 + -6.1634607414990006e+00 -3.2099138901863302e+00 -7.9599188260285096e+00 + -6.4769377051185817e+00 -3.9485481687024011e+00 -8.0338770821370282e+00 + -6.7654637460957678e+00 -4.6152315804035586e+00 -8.0248094538059593e+00 + -7.0410856560462642e+00 -5.2144650532395049e+00 -7.9866324354003044e+00 + -7.3141468267391669e+00 -5.7583811830744258e+00 -7.9226100818263525e+00 + -7.5344749909286231e+00 -6.3202234148555849e+00 -7.8305841658099649e+00 + id 14207 + loc 7.5167906284332275e-01 5.6594973802566528e-01 401 + blend 0.0000000000000000e+00 + interp 3.9097297171154466e-01:3.6737449331115207e-01:2.6771977351596532e-02:3.7625387515576958e-01:9.0032731080401174e-01:3.8742814971681944e-01:1.1694188976337516e+00:3.5917193226207877e-01:1.8756174396822209e+00:3.7947528792592616e-01:2.3478750647460935e+00:3.6690168843838233e-01:2.9883916930163332e+00:3.9096906198182757e-01:3.5286834512476348e+00 + CVs 20 + -1.2764593963850496e-01 3.4570052918819494e-01 -3.3709858805392084e-01 + -2.3740841859393577e-01 6.8826867639734379e-01 -6.5709307660546379e-01 + -3.5216916123904851e-01 1.0122442843749044e+00 -9.8655090459719608e-01 + -4.8194866307985484e-01 1.3027610083960943e+00 -1.3414876281879704e+00 + -6.3550851021245314e-01 1.5487736551090490e+00 -1.7294243964269369e+00 + -8.3083742584522202e-01 1.7438365337126867e+00 -2.1429806687979687e+00 + -1.0858772825721701e+00 1.8841059709387955e+00 -2.5593763581758457e+00 + -1.4069434720097889e+00 1.9669693045695811e+00 -2.9531016194981778e+00 + -1.7887685720054214e+00 1.9935979186491388e+00 -3.3080077489002218e+00 + -2.2222340491236019e+00 1.9683629658729560e+00 -3.6240187036076290e+00 + -2.6977679702651942e+00 1.8898485438093791e+00 -3.9116091170940388e+00 + -3.2047364403670953e+00 1.7483926962439957e+00 -4.1841970960562911e+00 + -3.7282503895394821e+00 1.5304574172298848e+00 -4.4456813160599449e+00 + -4.2495004971856494e+00 1.2334791591789811e+00 -4.6753977597501164e+00 + -4.7494679758612461e+00 8.7712597176726348e-01 -4.8536205441700391e+00 + -5.2026094716498106e+00 5.0645640487570098e-01 -5.0213292261804376e+00 + -5.5748536989462067e+00 1.8246920188519350e-01 -5.2702170499414809e+00 + -5.8578373430744950e+00 -7.8324052198202931e-02 -5.6026635475388495e+00 + -6.1955740572316635e+00 -4.2243230499207329e-01 -5.7938539208451960e+00 + id 14208 + loc 8.8788354396820068e-01 8.4592801332473755e-01 405 + blend 0.0000000000000000e+00 + interp 5.2036919370162193e-01:3.1361521864264125e-01:2.7627989996276348e-01:3.7583412773411096e-01:9.9994611548193157e-01:4.7023824943975046e-01:1.3217776888188177e+00:3.1332132011244623e-01:1.9899761750349241e+00:5.2036399000968492e-01:2.1890378979794907e+00:2.7748222124430283e-01:3.4460031588592694e+00 + CVs 20 + 2.1185031889748415e-01 3.2314580825177130e-01 -1.0077639745174610e-01 + 2.5671303152335062e-01 5.1822889087254798e-01 -1.9913248921819787e-01 + 2.5343394225918098e-01 6.7015524321217279e-01 -2.9720710760871494e-01 + 2.4798302588645521e-01 8.1634658025952833e-01 -3.9679066572702365e-01 + 2.4248480927635235e-01 9.6208718175158081e-01 -4.9322582114617658e-01 + 2.4498263317052932e-01 1.1218401442490116e+00 -5.8031333871170510e-01 + 2.7777521327449872e-01 1.3267132376517430e+00 -6.3775995706601885e-01 + 3.8558924168126330e-01 1.5987984638078905e+00 -5.9489734751859480e-01 + 5.6515640425952374e-01 1.8330952617286935e+00 -3.8913662339653843e-01 + 7.2717171752489784e-01 1.9426067420436708e+00 -1.3823442269292846e-01 + 8.5640929589581227e-01 1.9910847619154990e+00 8.9081003122895408e-02 + 9.7424703176516547e-01 2.0151436077256837e+00 3.1147983914742561e-01 + 1.0864982120690079e+00 2.0273425570355057e+00 5.3447615449837571e-01 + 1.1823667774420672e+00 2.0526425532111139e+00 7.3392553382768222e-01 + 1.2464759772835587e+00 2.1164402107433071e+00 8.8271316712644832e-01 + 1.2749975125248090e+00 2.2111396482622032e+00 9.8258304631243953e-01 + 1.2813295974675503e+00 2.3084041262310420e+00 1.0588075643988510e+00 + 1.2793199467532850e+00 2.3906443200574250e+00 1.1287741742763360e+00 + 1.3913603004525541e+00 2.4087929120316884e+00 1.3163320185399536e+00 + id 14209 + loc 9.9347311258316040e-01 3.1824433803558350e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1967714201929224e-01:3.1686398933564974e-01:1.2140708291024205e-02:4.1967294524787208e-01:7.9097292573549249e-01:2.7259604411583443e-01:1.3162721929206846e+00:3.1494975306492295e-01:2.2251019293883347e+00:2.6959854327480365e-01:2.9152998503408449e+00:2.9866575821972091e-01:3.6240921146385965e+00 + CVs 20 + -7.9398055490504632e-02 3.4969690655649638e-01 3.0579336492633613e-01 + -2.1352522226425852e-01 6.7832731961236137e-01 5.8407166480523565e-01 + -4.0744736311535390e-01 9.9230995259141608e-01 8.4974686537182209e-01 + -6.6402947556433045e-01 1.2915419026251782e+00 1.0901133532635119e+00 + -9.5328331293369450e-01 1.5867342564141291e+00 1.2872192870198156e+00 + -1.1999584076368621e+00 1.9147362331918343e+00 1.4476447801640624e+00 + -1.3319981826622684e+00 2.2932329782851637e+00 1.5922047597840665e+00 + -1.3383026154451478e+00 2.6976174264380521e+00 1.7536263641334462e+00 + -1.2287414601995217e+00 3.0861970536551970e+00 1.9955780796730784e+00 + -9.7967719733622927e-01 3.3590467140076581e+00 2.3978126424855852e+00 + -6.0821599433686213e-01 3.3535431337708763e+00 2.9230287022917407e+00 + -2.3778080259678092e-01 3.0727153557284130e+00 3.4050805305885543e+00 + 4.6676436200492111e-02 2.6451797650390825e+00 3.7989216777396537e+00 + 2.0930122280764096e-01 2.1502084513146409e+00 4.1360035782654414e+00 + 2.3518059197690211e-01 1.6243517144583941e+00 4.4243446514850682e+00 + 1.2302064374537824e-01 1.0587141071170842e+00 4.6180858041029138e+00 + -1.2759767978282466e-01 4.6446964346935982e-01 4.6445915054186528e+00 + -4.4569626254182437e-01 -3.0379092380002692e-02 4.5311917376605741e+00 + -5.5333720857327351e-01 -2.2567705548809824e-01 4.5980920524233992e+00 + id 14210 + loc 2.5622478127479553e-01 2.9691481590270996e-01 393 + blend 0.0000000000000000e+00 + interp 3.9398786119710816e-01:3.2971711390375708e-01:1.0558675441824084e-01:3.9398392131849619e-01:7.4757530515560944e-01:3.2806793234855752e-01:1.0492585177107410e+00:3.3165477893750006e-01:1.9970239594804602e+00:3.3295434015644720e-01:2.9702373362244656e+00:3.6201544467567459e-01:3.3854098413910525e+00 + CVs 20 + -7.6839245797146599e-02 2.8328773254518153e-01 3.0721422322961783e-01 + -1.6600089442342722e-01 5.7119317539452819e-01 6.0300116069511511e-01 + -2.5084579944241570e-01 8.6456331106975925e-01 8.6690187874462254e-01 + -3.2355885785376720e-01 1.1544768239161411e+00 1.0872512252662883e+00 + -4.0238968491535942e-01 1.4349444183503901e+00 1.2767096581748241e+00 + -5.1732095646098442e-01 1.7046289664362888e+00 1.4540641126759533e+00 + -6.8622027904534422e-01 1.9664973490618300e+00 1.6152779942562083e+00 + -9.1773184844525235e-01 2.2252111481402825e+00 1.7443134104284530e+00 + -1.2237657747816320e+00 2.4751010077892213e+00 1.8438453930750787e+00 + -1.6123685919324917e+00 2.6959445655469820e+00 1.9390215280457994e+00 + -2.0767643496604355e+00 2.8533353827515255e+00 2.0631587426533713e+00 + -2.5919301135124799e+00 2.9023400156841328e+00 2.2396410122876453e+00 + -3.1179582082399522e+00 2.7976990904647212e+00 2.4666734335173066e+00 + -3.5850531541169630e+00 2.5033711013901212e+00 2.7335619169379290e+00 + -3.8787867301159444e+00 2.0201185138158610e+00 3.0401496420653080e+00 + -3.8955568888909888e+00 1.4286470510709424e+00 3.4048356957443708e+00 + -3.6232256240118543e+00 8.8541069486241231e-01 3.8545507210847698e+00 + -3.1681425439142723e+00 5.0696218584400987e-01 4.3639759597937795e+00 + -2.7598047082118171e+00 1.2889754377962448e-01 4.8556309741601078e+00 + id 14211 + loc 6.3902294635772705e-01 3.5336518287658691e-01 412 + blend 0.0000000000000000e+00 + interp 5.1282242907247211e-01:2.9455803615478532e-01:7.8793598154905675e-01:3.9331800641869435e-01:1.1923235180722136e+00:3.4431922450374580e-01:2.0144535910682233e+00:5.1281730084818145e-01:2.7013790850130741e+00:3.8728991520763800e-01:3.0486124989977563e+00:3.2761983514471693e-01:3.9907760974278785e+00 + CVs 20 + -6.3555479131005610e-01 1.8854589091031720e-01 1.9489402617551721e-01 + -1.0848224001267641e+00 2.7292082475016610e-01 3.8033690198568937e-01 + -1.4821216862076099e+00 3.1688770515029241e-01 5.6468068700330665e-01 + -1.8851707344906503e+00 3.3951769470604953e-01 7.5619886844569295e-01 + -2.2904103462286214e+00 3.3914057832797340e-01 9.4829593025523906e-01 + -2.6950458175325762e+00 3.1679717201033075e-01 1.1332725923700138e+00 + -3.0968284684799094e+00 2.7567070240078229e-01 1.3031957792437379e+00 + -3.4917736455452895e+00 2.1989847021342390e-01 1.4512330617422220e+00 + -3.8717953050651044e+00 1.5506940097228261e-01 1.5723876353214901e+00 + -4.2284182095627125e+00 8.7890025636778280e-02 1.6650091311349811e+00 + -4.5530623891111022e+00 2.3167851177267273e-02 1.7330849834154818e+00 + -4.8384596586668902e+00 -3.8089626962494849e-02 1.7869558796001228e+00 + -5.0897217894879736e+00 -9.6446465368267065e-02 1.8361282223420483e+00 + -5.3265908559774440e+00 -1.5611546417568611e-01 1.8858561933025495e+00 + -5.5618717580418497e+00 -2.1970739586117616e-01 1.9386243778612045e+00 + -5.7953193730108126e+00 -2.8149694652198720e-01 1.9907800828850355e+00 + -6.0241651973605510e+00 -3.3718434599075220e-01 2.0387005498723219e+00 + -6.2417408001733277e+00 -3.9007574623991204e-01 2.0928844657296479e+00 + -6.3939057381474580e+00 -4.4395380993802203e-01 2.2040193105080359e+00 + id 14212 + loc 8.8475340604782104e-01 9.7297227382659912e-01 396 + blend 0.0000000000000000e+00 + interp 3.1370200123483399e-01:2.7946372908705730e-01:2.3978639865013807e-02:2.6991831417576484e-01:1.0038608503061177e+00:3.1369886421482168e-01:1.7249602807039797e+00:2.5821913449976946e-01:2.1798772159976338e+00:3.1013176419368832e-01:2.8605782021753399e+00:2.7399341992169979e-01:3.2210670621752731e+00 + CVs 20 + 1.0669390794447420e+00 1.4268986331804689e-01 -4.6873938112914948e-01 + 1.7303925379430216e+00 9.5895059433713181e-02 -8.9558503815451251e-01 + 2.3036825103248111e+00 -1.3873104858781682e-02 -1.3342529363435403e+00 + 2.8874024908230917e+00 -1.4885703387700555e-01 -1.7954000507108776e+00 + 3.4720293786394616e+00 -3.1386069162108976e-01 -2.2588245469060855e+00 + 4.0421005923234530e+00 -5.1628566516452468e-01 -2.7057456513009357e+00 + 4.5760023677374164e+00 -7.6604222301296887e-01 -3.1196719498452308e+00 + 5.0491646658694362e+00 -1.0706603996006399e+00 -3.4863059283044198e+00 + 5.4316852177404789e+00 -1.4261888124096316e+00 -3.7946825008871850e+00 + 5.6927662606766907e+00 -1.8069652497037576e+00 -4.0415879983410896e+00 + 5.8265926188678048e+00 -2.1746035166359543e+00 -4.2324444800405470e+00 + 5.8655997204363555e+00 -2.5019194618403535e+00 -4.3782770513952620e+00 + 5.8601757597493256e+00 -2.7790007982055887e+00 -4.4895900533562507e+00 + 5.8657434028933597e+00 -3.0052817000182639e+00 -4.5695348747933755e+00 + 5.9252583075553193e+00 -3.1932530819634986e+00 -4.6255441631033349e+00 + 6.0611835032218560e+00 -3.3696952716621058e+00 -4.6736514427182554e+00 + 6.2706351854546734e+00 -3.5674600587150174e+00 -4.7346005516867757e+00 + 6.5251652680247743e+00 -3.8168470846656413e+00 -4.8193855708239042e+00 + 6.7418952499988336e+00 -4.1585741760400525e+00 -4.8984038212570855e+00 + id 14213 + loc 2.3825818207114935e-03 1.9857356324791908e-02 399 + blend 0.0000000000000000e+00 + interp 3.7320344453223830e-01:3.3757804257278584e-01:1.7644906642272318e-01:8.2797707966089221e-02:1.1942694994375607e+00:2.2052040114959320e-01:2.6186991897553811e+00:3.2080387020942508e-01:3.0007960202246009e+00:3.7319971249779299e-01:3.7166437260255969e+00 + CVs 20 + -1.3048065149690258e-01 2.1616343716789840e-01 1.8485451216655135e-01 + -2.7867415767900883e-01 4.5314622665435533e-01 3.7218625307771164e-01 + -4.3756741664739518e-01 7.1573562153420145e-01 5.4021826946188523e-01 + -5.9930912140576154e-01 1.0073666918031443e+00 6.7845154704184218e-01 + -7.5684547111127776e-01 1.3317622100287010e+00 7.9671332430938535e-01 + -9.0150923815569306e-01 1.6894850275613016e+00 9.0922494155636202e-01 + -1.0258838745416372e+00 2.0822985263694775e+00 1.0327646619437703e+00 + -1.1234062123090802e+00 2.5107659033095722e+00 1.1969756007539896e+00 + -1.1840067420540688e+00 2.9486129783954040e+00 1.4442543398747030e+00 + -1.2035481198869036e+00 3.3439251460033517e+00 1.7917924265938288e+00 + -1.2109447139405705e+00 3.6752695920842475e+00 2.2276720782319814e+00 + -1.2628468602689689e+00 3.9455292820503596e+00 2.7556760929607735e+00 + -1.3986945487953255e+00 4.1180981664112952e+00 3.3793725935546339e+00 + -1.6114989853562174e+00 4.1272816302164683e+00 4.0504368292004838e+00 + -1.8825574569049959e+00 3.9531371098615424e+00 4.6825013189698250e+00 + -2.1929883740135514e+00 3.6317433669566777e+00 5.2103584263686624e+00 + -2.4771276362956596e+00 3.2203803898395429e+00 5.6329933319837240e+00 + -2.6524141638607071e+00 2.7696103114128903e+00 6.0042853388488275e+00 + -2.7367492772555000e+00 2.2923301224060824e+00 6.3585451072736552e+00 + id 14214 + loc 7.4744164943695068e-01 9.4019353389739990e-01 379 + blend 0.0000000000000000e+00 + interp 5.8183865885662100e-01:4.0834754441928478e-01:9.4851257349256812e-02:4.9699896619304784e-01:8.7783308117952519e-01:3.0764360915493638e-01:1.8920266533619463e+00:4.5072709815698547e-01:2.1266235113993766e+00:5.8183284047003248e-01:2.9973449336744906e+00:5.0654169803243809e-01:3.5838429772498750e+00 + CVs 20 + -2.5564751926085383e-01 4.7025027020312038e-01 1.7770622949762377e-01 + -5.0438285341683886e-01 9.0207862225494317e-01 3.6423234136490662e-01 + -7.5350648510111196e-01 1.2952773688887906e+00 5.5078609260328060e-01 + -9.9895687959874868e-01 1.6575720908102169e+00 7.1528960056010316e-01 + -1.2538758325242707e+00 1.9957332864911130e+00 8.4829904747178575e-01 + -1.5492197413214805e+00 2.3084017552810359e+00 9.5236298602203706e-01 + -1.9026616368725804e+00 2.5790177804845116e+00 1.0270791226399303e+00 + -2.3090069856112554e+00 2.7891396875929138e+00 1.0726061190336837e+00 + -2.7542339451469822e+00 2.9310772624782544e+00 1.0925295159989736e+00 + -3.2220392748887567e+00 3.0059529540960481e+00 1.0917580083473077e+00 + -3.6990261634115793e+00 3.0216224337585875e+00 1.0738432809794336e+00 + -4.1759162664265395e+00 2.9907077971804532e+00 1.0363597102693656e+00 + -4.6189072671865965e+00 2.9311328479600114e+00 9.8195545771338644e-01 + -4.9466353439574977e+00 2.8809465131984355e+00 9.2424029192083457e-01 + -5.0648235090388987e+00 2.8937269346696559e+00 8.3568339923771284e-01 + -4.9371643333879494e+00 2.9486599590632867e+00 6.0924195456115871e-01 + -4.6285150868039997e+00 2.8836870604006708e+00 1.3263340672718660e-01 + -4.3886681993782464e+00 2.5444960571785034e+00 -4.7895717310424879e-01 + -4.4381813218647173e+00 2.5305915249304745e+00 -3.5901506409315109e-01 + id 14215 + loc 9.6513682603836060e-01 3.2832995057106018e-01 404 + blend 0.0000000000000000e+00 + interp 3.5650365070584195e-01:2.8015710211370581e-01:2.7114962810956711e-02:2.7297302278438579e-01:5.8048104034759840e-01:3.5650008566933489e-01:1.5292550855829772e+00:3.2749127711903259e-01:2.0555512223821655e+00:2.9662820388610389e-01:3.0303204744743306e+00 + CVs 20 + 2.6882976147630952e-02 2.6505721474830068e-01 9.6858950282919992e-02 + 7.7469957985941446e-02 5.0568331874667016e-01 1.8692647482948199e-01 + 1.0447130284546868e-01 7.4617606170902195e-01 2.8540427374880134e-01 + 9.8971913421187385e-02 9.8527843192256270e-01 3.9543711227931883e-01 + 6.0032138937017199e-02 1.2171325504779256e+00 5.1691338482508109e-01 + -1.2205984256508096e-02 1.4355489525669860e+00 6.4665014711706914e-01 + -1.1327553889443376e-01 1.6343063721612210e+00 7.7913615657667046e-01 + -2.3426098486658697e-01 1.8087977789732961e+00 9.0874301741694130e-01 + -3.6605345624345553e-01 1.9577576629578293e+00 1.0321097237218657e+00 + -5.0143648101989979e-01 2.0826768646386484e+00 1.1484239428285434e+00 + -6.3518900905135434e-01 2.1862534664867663e+00 1.2568969333072295e+00 + -7.6812458894524782e-01 2.2726367721171536e+00 1.3482402653342793e+00 + -9.1122292749364198e-01 2.3490475523380714e+00 1.4024740240633351e+00 + -1.0814595978636745e+00 2.4233453189523333e+00 1.4208502050697265e+00 + -1.2785437895270171e+00 2.4951390461436285e+00 1.4445722079184324e+00 + -1.4861200753241006e+00 2.5577053606339426e+00 1.5037974563873167e+00 + -1.7031566814322252e+00 2.6055223183614520e+00 1.5964364262606643e+00 + -1.9301381892056333e+00 2.6322296161761649e+00 1.7186103546146012e+00 + -1.9199706553571678e+00 2.6154009181967552e+00 1.8336744679698018e+00 + id 14216 + loc 4.7128561139106750e-01 8.6942994594573975e-01 402 + blend 0.0000000000000000e+00 + interp 4.9399500815700675e-01:3.1200758507157572e-01:6.2028032353173201e-01:3.5948090316391340e-01:1.6582617501678953e+00:3.0590494382950534e-01:2.1184598250916826e+00:2.8252948703451591e-01:3.0365822903497928e+00:4.9399006820692520e-01:3.9992801045240096e+00 + CVs 20 + -7.4380994257135791e-02 1.4813227257735279e-01 -1.5073521456579780e-01 + -1.2101849386425544e-01 2.9959319399208062e-01 -3.1224784119467169e-01 + -1.5699249324717515e-01 4.3984493867489771e-01 -4.8522252928886211e-01 + -1.9236073181007968e-01 5.6393791619223821e-01 -6.6817576117539801e-01 + -2.3288837594491379e-01 6.7196221472029538e-01 -8.5749800958473421e-01 + -2.8470650262278807e-01 7.6198931696839522e-01 -1.0477711496324469e+00 + -3.5143836374339343e-01 8.3059638908860389e-01 -1.2344985548290963e+00 + -4.3430569579766715e-01 8.7512128390528288e-01 -1.4151748475000010e+00 + -5.3300334001551308e-01 8.9418780603013437e-01 -1.5870796374033833e+00 + -6.4576191825573903e-01 8.8734949343391067e-01 -1.7461452155603969e+00 + -7.6770053285466522e-01 8.5411942208768177e-01 -1.8861316024933401e+00 + -8.9399657823681222e-01 7.9587022201536828e-01 -2.0035140355909054e+00 + -1.0216779162214720e+00 7.1677112962563405e-01 -2.0981549112391820e+00 + -1.1543560001195241e+00 6.2087400079419863e-01 -2.1760376333998219e+00 + -1.2945850132442176e+00 5.1363235016372366e-01 -2.2383220155561143e+00 + -1.4183464118512716e+00 4.0862159744643656e-01 -2.2710069017751815e+00 + -1.4852769924520786e+00 3.2384526149656806e-01 -2.2692802461895831e+00 + -1.5150151292565079e+00 2.6165649069149072e-01 -2.2465611132078225e+00 + -1.7103669280069156e+00 1.4496018897246371e-01 -2.1578484109885716e+00 + id 14217 + loc 3.3761486411094666e-01 6.1939376592636108e-01 400 + blend 0.0000000000000000e+00 + interp 3.3911957103296569e-01:3.3331876288473755e-01:2.7178746848445823e-01:3.3911617983725539e-01:1.3070936312271852e+00:3.2769768474019123e-01:2.1848721816115044e+00:3.1639059309030987e-01:3.0287298028363558e+00:2.8330974274642728e-01:3.8726077939486023e+00 + CVs 20 + -2.0558177889638832e-01 3.6635954571985024e-01 -1.9129031754398407e-01 + -4.0261074204930231e-01 7.1582934141361221e-01 -4.1622826451059608e-01 + -5.8745517196670005e-01 1.0304120951476035e+00 -6.9787774725113316e-01 + -7.6020866021737710e-01 1.2963164743666606e+00 -1.0347945436440806e+00 + -9.2218140987222186e-01 1.5029098322710031e+00 -1.4093402727743976e+00 + -1.0762777448477003e+00 1.6455406557027432e+00 -1.7994805677584949e+00 + -1.2235607441522780e+00 1.7240834194578727e+00 -2.1836963981658721e+00 + -1.3623532384219812e+00 1.7434210294945636e+00 -2.5442189508897410e+00 + -1.4914817761194008e+00 1.7154847686375776e+00 -2.8713415499784221e+00 + -1.6124334056067706e+00 1.6563266959144638e+00 -3.1664534616754465e+00 + -1.7303397179606397e+00 1.5807529062975345e+00 -3.4418115069678912e+00 + -1.8510699207021628e+00 1.4984973446821996e+00 -3.7111325810934677e+00 + -1.9765396237637520e+00 1.4147637421827211e+00 -3.9762166637142293e+00 + -2.1047526664575344e+00 1.3349836843882279e+00 -4.2239650373238273e+00 + -2.2325238717047782e+00 1.2634695740764070e+00 -4.4468096398509012e+00 + -2.3637934904652487e+00 1.1887046849947966e+00 -4.6642132213857268e+00 + -2.5185597473236450e+00 1.0861467998776146e+00 -4.9026007608020894e+00 + -2.7228107894381108e+00 9.4194354252304624e-01 -5.1727580414200807e+00 + -3.0113450649785882e+00 6.9975182652433299e-01 -5.5291197166371813e+00 + id 14218 + loc 3.0731180310249329e-01 1.4301764965057373e-01 378 + blend 0.0000000000000000e+00 + interp 4.6005227908165991e-01:3.2079694744442622e-01:4.8121201295085358e-01:4.6004767855886913e-01:1.1395269128168639e+00:3.3792277028568474e-01:1.9679578362274830e+00:3.1744594158362965e-01:2.7384539145408411e+00:3.5179356076724178e-01:3.2648420499046837e+00:4.1538875027073047e-01:3.9629022191326069e+00 + CVs 20 + 2.2727250180723707e-01 2.8804517323598322e-01 -3.1528392410717321e-01 + 4.0722287365490317e-01 5.3222013934100609e-01 -6.0481039365506484e-01 + 5.7312447096319619e-01 7.4872110294372229e-01 -8.8200431770121246e-01 + 7.4472627437797578e-01 9.5080177820763001e-01 -1.1518728924322192e+00 + 9.2732546223272749e-01 1.1413334542681697e+00 -1.4073474860288053e+00 + 1.1241719597919957e+00 1.3181236886910870e+00 -1.6428272966197000e+00 + 1.3374241947917573e+00 1.4743403631101246e+00 -1.8622394343728170e+00 + 1.5677518109980912e+00 1.6020092416489276e+00 -2.0724697024426799e+00 + 1.8160645012309358e+00 1.6965296470764331e+00 -2.2759023286974793e+00 + 2.0839087408764487e+00 1.7566651860346645e+00 -2.4710289092336706e+00 + 2.3652016842015620e+00 1.7837429101911852e+00 -2.6578471336601890e+00 + 2.6455396497636778e+00 1.7800551885343812e+00 -2.8405094328744491e+00 + 2.9139562544541473e+00 1.7314603664926906e+00 -3.0218015944251895e+00 + 3.1573885496216967e+00 1.5847061033290124e+00 -3.1929730636769862e+00 + 3.3538138177598853e+00 1.2884917524418962e+00 -3.3391598840127950e+00 + 3.5169903851425639e+00 8.6344418974614134e-01 -3.4697675190872439e+00 + 3.6944053971254727e+00 3.7959689628862847e-01 -3.6075385294840774e+00 + 3.8958825188877948e+00 -8.1746075140840979e-02 -3.7793856258043323e+00 + 4.0146780597600547e+00 -3.7081147142180182e-01 -4.0243993571157768e+00 + id 14219 + loc 5.6136703491210938e-01 1.1864195764064789e-01 381 + blend 0.0000000000000000e+00 + interp 2.4434954948824124e+00:2.4434854948824123e+00:1.7366873306793638e+00:2.1854799484606544e+00:1.7875120035463239e+00:7.8230958556356811e-01:1.9843811377901992e+00:3.9828846874939683e-01:2.0000683469703207e+00:3.0787283499015183e-01:2.5414562469721127e+00:2.4827523736848117e-01:3.3961497982132749e+00:1.0897098377610781e+00:3.9182344570485634e+00:3.9995550424694937e-01:3.9814943812925723e+00 + CVs 20 + -7.8047007752735109e-01 1.2833607567074262e-01 7.2206521649891486e-01 + -1.2882962585095086e+00 1.1310703649008705e-01 1.2247165613044024e+00 + -1.7378487222985277e+00 4.7860620612546922e-02 1.6692828677263860e+00 + -2.2176483696190088e+00 -2.1995252170468493e-02 2.1101464098682898e+00 + -2.7211649303186047e+00 -1.0089556149974654e-01 2.5404173820222224e+00 + -3.2357279345330783e+00 -1.9695309637266123e-01 2.9631662649197397e+00 + -3.7409430873327341e+00 -3.2359610387469984e-01 3.3886594797251681e+00 + -4.2181311263638825e+00 -4.9508838688988810e-01 3.8205444263632091e+00 + -4.6679143105834582e+00 -7.2004318073848017e-01 4.2501125053961859e+00 + -5.1028022030018700e+00 -1.0054748621856164e+00 4.6658396861583906e+00 + -5.5200780343254339e+00 -1.3626621235532435e+00 5.0596533898795153e+00 + -5.8973405191889690e+00 -1.8047709382891237e+00 5.4214251909288445e+00 + -6.2011243828903426e+00 -2.3462540583626312e+00 5.7357368130210444e+00 + -6.4000875215875226e+00 -2.9897916672204721e+00 5.9901692681143537e+00 + -6.4917994661870733e+00 -3.7064184256676098e+00 6.1929132680080619e+00 + -6.5102802816226806e+00 -4.4503261199687429e+00 6.3796534394810038e+00 + -6.4857310915809965e+00 -5.1842788571953307e+00 6.6109109922810152e+00 + -6.4197515925690247e+00 -5.8525836519507788e+00 6.9261284094347983e+00 + -6.3232311704957853e+00 -6.3770707649915019e+00 7.2356775750956688e+00 + id 14220 + loc 5.7491981424391270e-03 1.5339325368404388e-01 395 + blend 0.0000000000000000e+00 + interp 4.0596044158265038e-01:2.9587593329678719e-01:1.1783453193466298e-02:3.0497047063530941e-01:9.8562591082547624e-01:4.0245167561179696e-01:1.9410011294971634e+00:4.0595638197823458e-01:2.5653072184868271e+00:2.6812363491715824e-01:3.1566059673340301e+00 + CVs 20 + -2.4062541310842472e-01 1.0706231617598812e-01 -1.2926085525351674e-01 + -4.7253122689928184e-01 2.0864499159784833e-01 -2.6070188922491289e-01 + -6.9714277202664976e-01 3.0637442051123021e-01 -3.9683550759035169e-01 + -9.1413685124401400e-01 4.0120998210730452e-01 -5.3824976574329908e-01 + -1.1193579069732673e+00 4.9171977086400631e-01 -6.8372199843422610e-01 + -1.3108029623869644e+00 5.7785753793126171e-01 -8.3175315456797672e-01 + -1.4908739597620502e+00 6.6597965728247033e-01 -9.8144328400771541e-01 + -1.6636917281285974e+00 7.6616541458544996e-01 -1.1340407754029249e+00 + -1.8242030737296182e+00 8.8313151553830482e-01 -1.2933357625858930e+00 + -1.9594076700424050e+00 1.0163425148417331e+00 -1.4635399234573070e+00 + -2.0723568409976139e+00 1.1596654024156345e+00 -1.6530861551302267e+00 + -2.1901558885679417e+00 1.2882811883644445e+00 -1.8731144378808913e+00 + -2.3332324794885855e+00 1.3691786830735595e+00 -2.1241841451654935e+00 + -2.4986558333471076e+00 1.3867372756611795e+00 -2.3987789288970474e+00 + -2.6816018751825799e+00 1.3391221746263406e+00 -2.6892933600524951e+00 + -2.8905700070445368e+00 1.2239192561428835e+00 -2.9877443202725624e+00 + -3.1298565177483262e+00 1.0311530082429283e+00 -3.2807501435049602e+00 + -3.3726999268849545e+00 7.5271995318766649e-01 -3.5448534088214330e+00 + -3.5435746005655013e+00 4.0457916692236040e-01 -3.7168847815742936e+00 + id 14221 + loc 8.1291162967681885e-01 3.6565080285072327e-01 405 + blend 0.0000000000000000e+00 + interp 4.0209240882715164e-01:4.0208838790306339e-01:2.2502986729117347e-01:3.3031247707958672e-01:9.9497738897437582e-01:3.0479140500460250e-01:1.8886763091394836e+00:3.6581253295744792e-01:2.5070991571336858e+00:3.4353246216422628e-01:2.9999631103247077e+00:3.3912495317201558e-01:3.7401191058235326e+00 + CVs 20 + -1.1787521768843415e-02 1.5565213644240528e-01 4.8149905857426192e-02 + 5.4689432120528791e-03 2.8528092142570549e-01 8.5921894160958037e-02 + 3.1437122028170478e-02 3.9451969080628035e-01 1.1506801337700409e-01 + 4.9538355758484337e-02 5.0473845077668367e-01 1.4086159381504859e-01 + 6.4521947765230681e-02 6.1666281876769713e-01 1.6438162233315687e-01 + 8.1660738037942660e-02 7.3132454439589689e-01 1.8618861317408578e-01 + 1.0651759353148099e-01 8.4992937357398846e-01 2.0544259234064882e-01 + 1.4414436452998958e-01 9.7206325323692855e-01 2.1861855922848009e-01 + 1.9697729185309004e-01 1.0943486225842989e+00 2.1960254822932701e-01 + 2.6223818130379045e-01 1.2099206623572658e+00 2.0156393568325187e-01 + 3.3284736435098933e-01 1.3113161038695185e+00 1.6056957154362550e-01 + 4.0126407735578523e-01 1.3941822001465438e+00 9.3962669820561812e-02 + 4.6054441966127196e-01 1.4548376231003810e+00 1.0844629063778213e-03 + 5.0636750870604341e-01 1.4867860689254775e+00 -1.0562707717639655e-01 + 5.4257744300885991e-01 1.4839980008799143e+00 -1.9590488904276496e-01 + 5.8087300311539714e-01 1.4454028657640277e+00 -2.4619423750866021e-01 + 6.2741125262502917e-01 1.3757960810974337e+00 -2.7057598923911158e-01 + 6.7351784899474432e-01 1.2877490688005053e+00 -3.0208876620530467e-01 + 6.1753604827090058e-01 1.2482464307545538e+00 -4.1570574633276797e-01 + id 14222 + loc 6.8902474641799927e-01 7.5721251964569092e-01 401 + blend 0.0000000000000000e+00 + interp 4.6056348659241891e-01:4.5711676227210640e-01:5.6729353251610304e-01:3.7459260011734746e-01:1.0088715759160791e+00:4.3477202665259257e-01:1.7847310507281287e+00:3.6350062855045429e-01:2.2065268540353751e+00:4.6055888095755299e-01:3.0103380784500140e+00:2.8623948825160617e-01:3.3688631387370966e+00:3.4937920408739287e-01:3.9837672753554374e+00 + CVs 20 + -1.1841063990563329e-01 3.1422103246170191e-01 -2.1983134054502051e-01 + -2.5085252703385280e-01 6.4096467284735259e-01 -4.3342447101633075e-01 + -3.9999986721728165e-01 9.8275705277900516e-01 -6.6176507643178750e-01 + -5.6377312378487554e-01 1.3318259731545750e+00 -9.2695617556045240e-01 + -7.3597292588120711e-01 1.6595025843626856e+00 -1.2351683235646163e+00 + -9.2100165201946582e-01 1.9324392348451416e+00 -1.5614286427052333e+00 + -1.1343494448823772e+00 2.1380676338053859e+00 -1.8734848472171901e+00 + -1.3896296633762040e+00 2.2754372687099349e+00 -2.1551311800395427e+00 + -1.6933583283562876e+00 2.3388307836609585e+00 -2.4013773971543957e+00 + -2.0486130792357748e+00 2.3183080643623133e+00 -2.6148090447711136e+00 + -2.4545728946767578e+00 2.2018301305686712e+00 -2.8026513181936448e+00 + -2.9029356212261899e+00 1.9720026339948546e+00 -2.9775009936103953e+00 + -3.3601711887723438e+00 1.6160250750417895e+00 -3.1477699643857697e+00 + -3.7673789874721697e+00 1.1564306656955734e+00 -3.2964857979726316e+00 + -4.1061602884763575e+00 6.3852016326873495e-01 -3.4119727631853940e+00 + -4.4312642221296663e+00 6.5621280159809947e-02 -3.5716809077992653e+00 + -4.7858096518233388e+00 -5.6633783589396203e-01 -3.9427001241080575e+00 + -5.0742954295291147e+00 -1.1534109082106996e+00 -4.5669370367480155e+00 + -5.1924045877240541e+00 -1.6397214306934407e+00 -4.9117600049799677e+00 + id 14223 + loc 8.3514130115509033e-01 1.5515379607677460e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3813531972965519e-01:4.3813093837645789e-01:1.8913201624977449e-02:3.9281538611857092e-01:7.4660360114756097e-01:3.5256901797037454e-01:1.4130406806302638e+00:2.6346137123921237e-01:2.0816592201931052e+00:3.7461466865549697e-01:2.7647220050149084e+00:2.4154199809815699e-01:3.6166230917755882e+00 + CVs 20 + -3.6382658518454944e-02 3.1882040154532165e-01 -4.8394189105850222e-03 + -6.5313096314244395e-02 5.8812813978783995e-01 2.6521995024162887e-02 + -8.3987606924430747e-02 8.2758979136925848e-01 7.0048544927153511e-02 + -8.7503248386689991e-02 1.0444546727177209e+00 1.0390345093971110e-01 + -7.5220804275377029e-02 1.2481487132297133e+00 1.2624568263798602e-01 + -4.9077137487358979e-02 1.4568878812846739e+00 1.3995773077242729e-01 + -2.0999635867910871e-02 1.6903761261782595e+00 1.6272702989770327e-01 + -1.4315673293941344e-02 1.9503142322601195e+00 2.2443960998554335e-01 + -5.3357797067447255e-02 2.2132423184052019e+00 3.4263039972459242e-01 + -1.5356565001956235e-01 2.4440394550725708e+00 5.0500057167584445e-01 + -3.1409951520632207e-01 2.6202114408916835e+00 6.8258878267838141e-01 + -5.2481944682293957e-01 2.7443159580883716e+00 8.5893010694190630e-01 + -7.8354444415803193e-01 2.8285990442497901e+00 1.0309260856353937e+00 + -1.1052253241707666e+00 2.8752918520529356e+00 1.1916454514584767e+00 + -1.5246920740056411e+00 2.8651373797189343e+00 1.3385515171274953e+00 + -2.0342409047490095e+00 2.7345963595657361e+00 1.4712690056621844e+00 + -2.5216518314112930e+00 2.4186373805954298e+00 1.5388949295557177e+00 + -2.8835643095111760e+00 1.9052620160136695e+00 1.4902225760684451e+00 + -2.7474245428408612e+00 1.9010109306834080e+00 1.6122809298675587e+00 + id 14224 + loc 3.9808997511863708e-01 4.2324760556221008e-01 412 + blend 0.0000000000000000e+00 + interp 3.9796445117792989e-01:3.9796047153341813e-01:2.0404009776166054e-01:3.1723215230249213e-01:1.0416771503306690e+00:3.0497723795081871e-01:1.8433928289643868e+00:3.4609926763514837e-01:2.1585611686698893e+00:3.2543021560782509e-01:3.0114913213821453e+00:2.9922424088810379e-01:3.9087236087827972e+00 + CVs 20 + -2.2410686506307792e-01 1.9895018396009140e-01 -4.5528861605209492e-01 + -4.2268413293611168e-01 3.1814676309946044e-01 -7.2334113200710803e-01 + -6.1454707448761792e-01 4.0206057295027314e-01 -9.5667094863629298e-01 + -7.8749744694844415e-01 4.8689753492172733e-01 -1.2270303284923871e+00 + -9.3382311686184649e-01 5.6705098511716789e-01 -1.5382434155178364e+00 + -1.0458031381590087e+00 6.3589705717201350e-01 -1.8909623222699103e+00 + -1.1122573498283592e+00 6.8913200679800912e-01 -2.2811133323182773e+00 + -1.1233696226559851e+00 7.2395521560477882e-01 -2.7003488862005809e+00 + -1.0775752396191742e+00 7.3684823219237905e-01 -3.1373484345042510e+00 + -9.7810678527968453e-01 7.2672800356295919e-01 -3.5795609895353566e+00 + -8.2098326863392534e-01 6.9927772323041104e-01 -4.0245398357599713e+00 + -6.0018492408673052e-01 6.4745258020049323e-01 -4.4970701642901458e+00 + -3.4992419881595493e-01 5.2132347544568791e-01 -5.0276771364101069e+00 + -1.4503735272250062e-01 2.6905205362316464e-01 -5.5964795762735786e+00 + -2.8263036814258458e-02 -1.0862364215065945e-01 -6.1549006787700771e+00 + -7.9445886925454401e-03 -5.8478005230161001e-01 -6.6689137637525882e+00 + -9.1205661116829373e-02 -1.1240490751702548e+00 -7.1129540635705375e+00 + -2.7150107451718153e-01 -1.6761051068554429e+00 -7.4648400530539840e+00 + -4.1646926157586506e-01 -2.0898403833626160e+00 -7.7144725726054721e+00 + id 14225 + loc 8.4351003170013428e-01 3.0982109904289246e-01 379 + blend 0.0000000000000000e+00 + interp 6.0972329940450287e-01:3.8204475195429527e-01:5.8278055382437799e-02:2.8903833449165450e-01:8.8208920804710667e-01:6.0971720217150882e-01:1.4655611560374449e+00:3.7868406245657882e-01:2.0173651224973335e+00:2.7356126927294555e-01:2.8187495772559568e+00:3.3601982789268076e-01:3.6960619380200299e+00 + CVs 20 + 4.6603788079415148e-01 3.5489240368082309e-01 -1.1209067633408726e-01 + 8.7210530646687534e-01 6.6248977365980433e-01 -2.1395760800512176e-01 + 1.2820497505575592e+00 9.4061449456611834e-01 -3.3356452372431566e-01 + 1.7170042950133293e+00 1.2110899207189207e+00 -4.6524659461356055e-01 + 2.1754084770910609e+00 1.4855347896077251e+00 -5.8008233475535553e-01 + 2.6685312479959680e+00 1.7533517349204164e+00 -6.4826800509859328e-01 + 3.2067162875259934e+00 1.9806689660793180e+00 -6.4321267840484841e-01 + 3.7791734239955161e+00 2.1294629093401731e+00 -5.4832807743933554e-01 + 4.3590541462740546e+00 2.1695248162292655e+00 -3.6442984676195400e-01 + 4.9182314649234593e+00 2.0768539139653068e+00 -1.1400054823526207e-01 + 5.4245142012073018e+00 1.8322695232767499e+00 1.6326836101303377e-01 + 5.8306724190436787e+00 1.4346056927990887e+00 4.2362293346213642e-01 + 6.0997482804574394e+00 9.2507075240579439e-01 6.3822175592031627e-01 + 6.2609562759911075e+00 3.7134023772809011e-01 8.1550799355120918e-01 + 6.4001586980121541e+00 -1.8943846416593768e-01 9.8264574677276650e-01 + 6.6051429156403092e+00 -7.6369560114972357e-01 1.1318990420751820e+00 + 6.9313949965862145e+00 -1.3546429753925233e+00 1.2176199559377716e+00 + 7.3075835374416851e+00 -1.9119675727579035e+00 1.2327371240136249e+00 + 7.4796670767678766e+00 -2.3827013200218614e+00 1.2652913651916657e+00 + id 14226 + loc 8.2507354021072388e-01 9.8203057050704956e-01 400 + blend 0.0000000000000000e+00 + interp 4.0541733496418103e-01:3.0350447991041946e-01:2.6271345329042006e-01:4.0541328079083139e-01:9.9953711242233512e-01:1.5573931844379202e-01:1.8766143265927817e+00:3.5518839340519226e-01:2.9803629116442649e+00:3.4726951910502091e-01:3.4243707325725272e+00:3.8950159996149691e-01:3.9808567502744783e+00 + CVs 20 + -2.5702682169446767e-01 2.4236917801698402e-01 -2.3137693350787281e-01 + -4.7610471069575794e-01 4.9340141110438729e-01 -4.7825993405093692e-01 + -6.7802715591937290e-01 7.5471697470026822e-01 -7.4371056061155438e-01 + -8.9052687254976926e-01 1.0178001214593220e+00 -1.0197310417427650e+00 + -1.1484296051594949e+00 1.2641399229669519e+00 -1.2881574999697001e+00 + -1.4757502087147321e+00 1.4692444139583007e+00 -1.5291309854934776e+00 + -1.8745762846837251e+00 1.6077793831662968e+00 -1.7305983318705802e+00 + -2.3320745900842335e+00 1.6552013201468379e+00 -1.8980938019366977e+00 + -2.8236864383005398e+00 1.5872260958323063e+00 -2.0548433139783651e+00 + -3.3099456816074699e+00 1.3843265792488193e+00 -2.2166795883978745e+00 + -3.7369798619745116e+00 1.0419021507995323e+00 -2.3767429918535448e+00 + -4.0841619795885800e+00 6.0028434190136060e-01 -2.5115027851481111e+00 + -4.4032586516204821e+00 1.3187098599520786e-01 -2.6081569352393119e+00 + -4.7574414588201224e+00 -2.9953210781059958e-01 -2.6745947554165799e+00 + -5.1742556982316330e+00 -6.6361208420823581e-01 -2.7361222689457607e+00 + -5.6612227292184203e+00 -9.7660890027328751e-01 -2.8414341621107591e+00 + -6.1961018962205916e+00 -1.2616508170593255e+00 -3.0445186873386216e+00 + -6.7013531716852706e+00 -1.5148457474738450e+00 -3.3543603316595201e+00 + -7.0769468861795684e+00 -1.7115099895206076e+00 -3.6897477516740604e+00 + id 14227 + loc 9.8664081096649170e-01 3.2224339246749878e-01 393 + blend 0.0000000000000000e+00 + interp 3.4961688482004932e-01:2.2065873125747582e-01:1.0039446103496386e+00:3.4961338865120112e-01:1.9998492204125835e+00:3.4128919610270880e-01:2.7988380205949328e+00:2.4388023593686214e-01:3.6513873759649211e+00 + CVs 20 + 1.8742589485944181e-01 3.0277812206326338e-01 2.7045770458625940e-01 + 3.9329014199272494e-01 6.2778384749029914e-01 4.9905517293670387e-01 + 6.0300256129080565e-01 9.8810335748950151e-01 7.0671052691714498e-01 + 8.1009506675833343e-01 1.3779217137839179e+00 9.1816027512844822e-01 + 1.0149488160950746e+00 1.7696124902033379e+00 1.1630094114226477e+00 + 1.2176675776491346e+00 2.1370420317649188e+00 1.4687857431810771e+00 + 1.4158139265952692e+00 2.4680885972830686e+00 1.8460713949294505e+00 + 1.6132578450563444e+00 2.7628222063044383e+00 2.2917373386962252e+00 + 1.8250695920687985e+00 3.0219446096895970e+00 2.7991756347983152e+00 + 2.0710151039882785e+00 3.2362151560251036e+00 3.3645890020885556e+00 + 2.3683895701533020e+00 3.3813650691800596e+00 3.9848308029310688e+00 + 2.7279957831055004e+00 3.4173897596947400e+00 4.6501740111436414e+00 + 3.1486016092865921e+00 3.2933484323282962e+00 5.3342557769821113e+00 + 3.6142029184880888e+00 2.9632230929925489e+00 5.9802361965782502e+00 + 4.0986993630199073e+00 2.4198831497261395e+00 6.4877701444814386e+00 + 4.5648423275579884e+00 1.7568141002055864e+00 6.7331414447411877e+00 + 4.9824224660467484e+00 1.1529727743574476e+00 6.6773732812456137e+00 + 5.3654457566790716e+00 6.9975364963562781e-01 6.3838652133217284e+00 + 5.7579201583883037e+00 2.6401489976744852e-01 5.9459432856534082e+00 + id 14228 + loc 5.4240512847900391e-01 4.8104491829872131e-01 404 + blend 0.0000000000000000e+00 + interp 3.9788812539287083e-01:3.4295902372192572e-01:6.7032709162652404e-01:3.8275476666457586e-01:1.0443344599729911e+00:3.9788414651161691e-01:1.9844632517469762e+00:3.5493158969122174e-01:2.8891283729989370e+00:3.5635540994647408e-01:3.4125057236478034e+00:2.8612310392942980e-01:3.9994436791349921e+00 + CVs 20 + -1.2654020004028574e-01 8.3335505847877384e-02 1.2108271843368086e-01 + -2.0303694104534808e-01 1.3708779230442317e-01 2.2820567633411648e-01 + -2.5553826594065210e-01 1.8646625407774536e-01 3.3656491987723214e-01 + -3.0235832838433807e-01 2.4584438058123489e-01 4.5277595239799734e-01 + -3.4430626571428730e-01 3.1502034202658302e-01 5.7368616443515186e-01 + -3.8089955527476238e-01 3.9051647958862423e-01 6.9088342329208130e-01 + -4.1149530487387753e-01 4.6625943219823596e-01 7.9404959290495047e-01 + -4.3633732169575079e-01 5.3642099749160566e-01 8.7366790131494843e-01 + -4.6075089189233914e-01 5.9948407021005634e-01 9.1733639689845536e-01 + -4.9781238979923426e-01 6.5946551414652532e-01 9.1268696318682352e-01 + -5.6307608199621040e-01 7.3155296988604679e-01 8.5671955001324418e-01 + -6.7804022608288217e-01 8.2639232388207073e-01 7.6385014618476754e-01 + -8.3979768622237216e-01 9.5206897355567666e-01 6.7319438998280123e-01 + -1.0303034585552084e+00 1.0957599038142145e+00 6.2131730939837893e-01 + -1.2451699445597066e+00 1.2271045502155515e+00 6.2439446181910652e-01 + -1.5026616022569521e+00 1.3416591634058359e+00 6.8623972469874117e-01 + -1.8043617488077761e+00 1.4973735407791835e+00 8.1633450794011553e-01 + -2.0960602974962814e+00 1.7628627896890385e+00 1.0234896530911455e+00 + -1.9772723534704246e+00 1.9168575484288453e+00 9.9046012286527385e-01 + id 14229 + loc 1.2536062300205231e-01 4.6127253770828247e-01 399 + blend 0.0000000000000000e+00 + interp 5.2350774330818617e-01:3.9215979841381093e-01:3.2560754707025508e-01:3.4474544739904028e-01:1.0933919577879812e+00:4.7223896929439874e-01:1.8477768093862061e+00:3.4971801825772825e-01:2.1232284607590413e+00:2.9283407157928965e-01:2.8654818065675158e+00:3.4355847519701599e-01:3.2064903140740624e+00:5.2350250823075306e-01:3.9275901737486931e+00 + CVs 20 + -1.3237905356760682e-01 3.2777157050952904e-01 1.2785305845500783e-01 + -3.0606589492218178e-01 6.2885475945674796e-01 2.5418665758460796e-01 + -5.0620387147723311e-01 8.8768598599047910e-01 3.5761926205734818e-01 + -7.2222113672935750e-01 1.1026017478136776e+00 4.3821144115661220e-01 + -9.4789367157136784e-01 1.2799018681020957e+00 5.0669091278524547e-01 + -1.1748878232679840e+00 1.4251285875348767e+00 5.7235398574534335e-01 + -1.3903822494848164e+00 1.5408942613786916e+00 6.3938745696162602e-01 + -1.5755248911807134e+00 1.6303605848607559e+00 7.0160230187048633e-01 + -1.7095636420843163e+00 1.7063780884698618e+00 7.4414605578028414e-01 + -1.7844320810671919e+00 1.8011523302891679e+00 7.5878304642743544e-01 + -1.8289175370233395e+00 1.9279599624377060e+00 7.6966496523615024e-01 + -1.8741313480329131e+00 2.0039027996008980e+00 8.0962343871269848e-01 + -1.8986843471612755e+00 1.9463932140357738e+00 8.6775451506833567e-01 + -1.8747514942159684e+00 1.7232370002436057e+00 9.3878013292051321e-01 + -1.8111032708432357e+00 1.3168827753419703e+00 1.0655789860882556e+00 + -1.7748346823903680e+00 7.5824562704364484e-01 1.3399409982254955e+00 + -1.9219684802334527e+00 1.2369169713946623e-01 1.8034640087011253e+00 + -2.3366063581265091e+00 -3.6776696709407292e-01 2.2120725063563609e+00 + -2.6140985552806320e+00 -5.1382105909428377e-01 2.2759629218427917e+00 + id 14230 + loc 1.6734455525875092e-01 3.5183545947074890e-01 395 + blend 0.0000000000000000e+00 + interp 5.1024312704771158e-01:3.4671378095398742e-01:6.7798829357993984e-01:2.7614052683013818e-01:1.1893222951180318e+00:2.8831584824236761e-01:2.0112569086548873e+00:3.4861873873369398e-01:2.7241282081819342e+00:2.8733219165362939e-01:3.1774061219116883e+00:5.1023802461644108e-01:3.9983253023576490e+00 + CVs 20 + -2.4858603601193213e-01 1.6096960147396092e-01 -3.3215830447436212e-01 + -4.8804313252181386e-01 3.1745385256388448e-01 -6.4936806326645058e-01 + -7.2836337822637254e-01 4.8332383217822711e-01 -9.7137824845074261e-01 + -9.7227810721849195e-01 6.6140212037267199e-01 -1.3082846839876723e+00 + -1.2158274522706121e+00 8.4355597289657680e-01 -1.6582933600364633e+00 + -1.4585079426819629e+00 1.0213875194171593e+00 -2.0172679440980308e+00 + -1.7015252862371351e+00 1.1848934222368954e+00 -2.3833147931932799e+00 + -1.9455511503691694e+00 1.3187557041472173e+00 -2.7602702303932709e+00 + -2.1938411620270224e+00 1.4033156314354807e+00 -3.1511857799689444e+00 + -2.4557388822529376e+00 1.4186941235232076e+00 -3.5484733688217212e+00 + -2.7368608134286490e+00 1.3514031907335591e+00 -3.9346619298839673e+00 + -3.0259920014453661e+00 1.2051143575248366e+00 -4.2936708622362429e+00 + -3.3055478878515325e+00 9.9807046213634543e-01 -4.6194948521859871e+00 + -3.5687619769640042e+00 7.4760898915735519e-01 -4.9102907040245256e+00 + -3.8167452105820732e+00 4.6451080890731111e-01 -5.1638490680469848e+00 + -4.0487697678662915e+00 1.4970501878420883e-01 -5.3814042042002050e+00 + -4.2589028373305871e+00 -2.0012218894162448e-01 -5.5661282236085121e+00 + -4.4384802202965572e+00 -5.6603624154567767e-01 -5.7187697355145737e+00 + -4.5688505873668479e+00 -7.6174670057669935e-01 -5.8517048116991806e+00 + id 14231 + loc 8.8518428802490234e-01 8.4611409902572632e-01 378 + blend 0.0000000000000000e+00 + interp 6.0972329940450287e-01:2.8451143410099600e-01:2.5348802965997286e-02:2.3423941538788051e-01:1.0004540222840821e+00:2.7892050000886148e-01:1.7959134936627941e+00:3.1881405504896509e-01:2.0650980210460581e+00:4.9705866274037314e-01:2.9908227034065491e+00:6.0971720217150882e-01:3.2941286521333875e+00:5.4393533955658491e-01:3.7672626253740207e+00 + CVs 20 + 6.5294935059430714e-01 3.2424062132287623e-01 -5.0163768267749015e-02 + 1.2338612295949314e+00 5.6563677167848780e-01 -1.3404094309100600e-01 + 1.8135114346882657e+00 7.6624937158440898e-01 -2.4452688119338756e-01 + 2.4216472868789349e+00 9.7398019573278116e-01 -3.5234298415252918e-01 + 3.0418322852710058e+00 1.1938735939821092e+00 -4.1785374265202879e-01 + 3.6581129806671160e+00 1.3954850570271478e+00 -4.1090062115939097e-01 + 4.2569210796571193e+00 1.5460187424252876e+00 -3.2193591002972233e-01 + 4.8186137876122359e+00 1.6283143476663140e+00 -1.6104911815785794e-01 + 5.3216293110367028e+00 1.6376584527923945e+00 4.4112600321033257e-02 + 5.7545192272162691e+00 1.5823629934361816e+00 2.5671534383796757e-01 + 6.1241403439410700e+00 1.4844271219984191e+00 4.5320973958609878e-01 + 6.4556086855454122e+00 1.3636289765324241e+00 6.3490811372609213e-01 + 6.7818823722889663e+00 1.2245145197083831e+00 8.1638408273058349e-01 + 7.1200019405356318e+00 1.0676775890497376e+00 1.0054670552023059e+00 + 7.4561168439303511e+00 9.1375258466369935e-01 1.1919168291534052e+00 + 7.7607811163382934e+00 8.0220945584956516e-01 1.3619992495140620e+00 + 8.0100637283396097e+00 7.5461327961032199e-01 1.5160362311884144e+00 + 8.2374536642265923e+00 7.3717397604355561e-01 1.6573838119213791e+00 + 8.6225364763740231e+00 6.4823796908660292e-01 1.7700058264289771e+00 + id 14232 + loc 1.7784482240676880e-01 4.8137682676315308e-01 412 + blend 0.0000000000000000e+00 + interp 4.2870546922929087e-01:3.4338586324781262e-01:7.2031411577450855e-02:3.7703617529766115e-01:9.3594251111983717e-01:3.3730921368217942e-01:1.3478534778411708e+00:3.0747123824106143e-01:2.0003839258046785e+00:4.2870118217459857e-01:2.6606043175911873e+00:3.1858913659855298e-01:3.1337057918586524e+00 + CVs 20 + -1.0992391684451985e-01 1.5971814551009261e-01 -6.4996334051334337e-01 + -2.0847990017154061e-01 2.0098393982095233e-01 -1.1052344478175671e+00 + -2.8344623306915118e-01 2.0051311943555783e-01 -1.5069985218440931e+00 + -3.2937609347551888e-01 1.8873521057697512e-01 -1.9151946150058667e+00 + -3.4163079131010826e-01 1.6286868773085084e-01 -2.3143352007811768e+00 + -3.1692543678157903e-01 1.2388820586878824e-01 -2.6886302666961566e+00 + -2.5608904347243799e-01 7.5854267226139749e-02 -3.0257444665602646e+00 + -1.6491858610579385e-01 2.3964760087787473e-02 -3.3194910782999072e+00 + -5.2554449483448118e-02 -2.6959085800227767e-02 -3.5689600489722455e+00 + 7.1272587549295219e-02 -7.2566716350382698e-02 -3.7761707074828341e+00 + 2.0588878138254041e-01 -1.0766471721717985e-01 -3.9537328834175622e+00 + 3.7320573335397389e-01 -1.2976734953255731e-01 -4.1372986612370459e+00 + 5.9046701708919791e-01 -1.5436420160881648e-01 -4.3661787201004678e+00 + 8.2214068094098924e-01 -2.1023948582205443e-01 -4.6414149962715765e+00 + 1.0219039019947997e+00 -3.0453876494497645e-01 -4.9371201027761318e+00 + 1.1827804318648667e+00 -4.3453791665217012e-01 -5.2460568182773670e+00 + 1.3109239845102256e+00 -6.0637091339737048e-01 -5.5692997428994229e+00 + 1.3970635237921258e+00 -8.1585015576506503e-01 -5.8877199597877787e+00 + 1.3467827839415505e+00 -9.5156074848722549e-01 -6.0077251068857507e+00 + id 14233 + loc 7.3546230792999268e-01 2.2351738810539246e-01 1069 + blend 0.0000000000000000e+00 + interp 3.7457518522694933e-01:3.7457143947509708e-01:4.5074992552495818e-01:2.9110963341948870e-01:1.0659834065937812e+00:3.0388258825840070e-01:2.0618765027288419e+00:2.8394014879635754e-01:3.0469062713557120e+00:2.7325461804489581e-01:3.8730450399016676e+00 + CVs 20 + -7.0622302096729789e-02 1.6418034051656361e-01 2.4289720972977727e-01 + -1.5616017711353447e-01 2.9540319563695566e-01 4.5830751943474146e-01 + -2.5106786129833991e-01 4.0929546006641804e-01 6.5565963057401089e-01 + -3.6651345433888721e-01 5.1571225629471207e-01 8.4217797798555283e-01 + -5.5487179861981406e-01 6.2465238491447550e-01 1.0162445993138531e+00 + -8.4693839990457642e-01 7.7173815535890156e-01 1.1649652314091998e+00 + -1.1668022142249088e+00 1.0202985388301511e+00 1.2778587195474125e+00 + -1.3972765672856844e+00 1.3715949590543124e+00 1.3520990078901900e+00 + -1.5025157377327341e+00 1.7849360922916255e+00 1.3961859429854708e+00 + -1.4831373163435881e+00 2.2369622825702939e+00 1.4420696331107958e+00 + -1.3178888823127644e+00 2.6673702186199320e+00 1.5709824806039407e+00 + -1.0171399516387774e+00 2.9450552738809628e+00 1.8251509044108118e+00 + -6.4289762320571486e-01 3.0023336494079977e+00 2.1414435369616158e+00 + -2.6111334600121205e-01 2.8492031230627926e+00 2.4373656102685173e+00 + 7.8584763852977302e-02 2.5266530281423636e+00 2.6776508726340142e+00 + 3.3496367444405006e-01 2.0692503790615473e+00 2.8533348374415524e+00 + 4.5859702786493550e-01 1.5236598366076355e+00 2.9131866128912098e+00 + 4.4799472334173918e-01 9.9435788229194355e-01 2.8106907068556031e+00 + 4.1587598900236300e-01 5.6750166661745827e-01 2.6436456019904506e+00 + id 14234 + loc 2.2993119060993195e-01 1.0624536871910095e-01 405 + blend 0.0000000000000000e+00 + interp 4.8793869450878308e-01:4.2524223882037188e-01:7.9470452302247607e-01:3.5928156199344491e-01:1.0888451681467468e+00:4.4940845868129603e-01:1.7317469211050556e+00:4.1918000060594818e-01:2.0185982306066133e+00:4.8793381512183803e-01:2.4950525307295792e+00:4.3039880257044644e-01:3.0096556281037463e+00:3.4517602271207543e-01:3.8875401488976555e+00 + CVs 20 + -7.5486266045886458e-02 1.1893674472318937e-02 5.3859444097772109e-02 + -1.6477305246451085e-01 -3.6300551541132098e-02 9.7181669598052994e-02 + -2.8002233625404760e-01 -5.4024447693830746e-02 1.8186320241471438e-01 + -4.0554913333784570e-01 -5.6592879015689115e-02 2.6416323011885168e-01 + -5.4097737568721571e-01 -4.2216142648477867e-02 3.3973352558243874e-01 + -6.8586490182301363e-01 -2.7754351080406248e-03 4.0969434448035147e-01 + -8.3503320747842280e-01 7.3425466396436184e-02 4.8087241275166970e-01 + -9.7572112194713545e-01 1.9348487587215585e-01 5.6334984441799285e-01 + -1.0903915409885045e+00 3.5266628485300988e-01 6.6621826668717110e-01 + -1.1625848858925596e+00 5.3617885782486729e-01 7.9619434123278143e-01 + -1.1810168272306425e+00 7.2625052090606046e-01 9.5474436349682013e-01 + -1.1402276560948550e+00 9.0819468433780060e-01 1.1354880256687740e+00 + -1.0394379885885490e+00 1.0726220628743124e+00 1.3250917512316103e+00 + -8.8266389259323141e-01 1.2150883994708734e+00 1.5051189243605996e+00 + -6.8228741526710224e-01 1.3344685069997222e+00 1.6527256511335617e+00 + -4.5261549045293259e-01 1.4302980842723538e+00 1.7496924384313264e+00 + -1.9516822635080613e-01 1.5000959522792892e+00 1.7906095361957681e+00 + 9.3620686211814769e-02 1.5390104617051059e+00 1.7750459394174463e+00 + 2.8142836635916268e-01 1.5326510619954108e+00 1.6502415596715247e+00 + id 14235 + loc 2.6102753356099129e-02 5.0248521566390991e-01 381 + blend 0.0000000000000000e+00 + interp 4.7050536349002647e-01:4.6523003223329623e-01:1.8423442006919366e-02:2.8321783326164246e-01:8.4876420481094250e-01:4.3569624032970128e-01:1.7174230354610609e+00:4.4565141766466415e-01:2.0101177292393353e+00:4.5388652096750448e-01:2.5130847002784344e+00:4.0185160481874532e-01:2.9995787414479018e+00:4.7050065843639161e-01:3.5487154208012694e+00 + CVs 20 + 9.2721560481971055e-01 2.0839347729629579e-01 -6.1074418431852062e-01 + 1.5202828019645589e+00 3.0401838123521419e-01 -1.0326173675111736e+00 + 2.0326813270997053e+00 3.6697356469362274e-01 -1.3844460696510033e+00 + 2.5730223853979659e+00 4.3248683916103164e-01 -1.7093950610118573e+00 + 3.1393670385409571e+00 4.8799194060004064e-01 -2.0035817914166540e+00 + 3.7335436277321596e+00 5.1995821449237889e-01 -2.2792396154490593e+00 + 4.3527049124828503e+00 5.0926130129599034e-01 -2.5591425072051539e+00 + 4.9841901780826516e+00 4.2848449463460958e-01 -2.8591333360269680e+00 + 5.6117185783454548e+00 2.4726924591950672e-01 -3.1769814887289782e+00 + 6.2179019791496737e+00 -4.9714216407456879e-02 -3.5055478849305191e+00 + 6.7806420559443916e+00 -4.6165353441869628e-01 -3.8392340730530261e+00 + 7.2729444159399668e+00 -9.7761187463212718e-01 -4.1698948953764035e+00 + 7.6612891425680019e+00 -1.5837636764320249e+00 -4.4789739715081112e+00 + 7.9067651438162461e+00 -2.2472349070093491e+00 -4.7450065325534228e+00 + 8.0078553427125279e+00 -2.9065854702453420e+00 -4.9662005899351387e+00 + 8.0182939067171031e+00 -3.5109077224560115e+00 -5.1557984421266028e+00 + 8.0023165294676968e+00 -4.0379119803051067e+00 -5.3170444367059160e+00 + 7.9949155297529231e+00 -4.4848237357081615e+00 -5.4589986677726356e+00 + 7.9819121281662788e+00 -4.8586210911950509e+00 -5.6763659240335107e+00 + id 14236 + loc 4.5086437463760376e-01 1.1347692459821701e-01 402 + blend 0.0000000000000000e+00 + interp 4.2697258481356087e-01:4.0644634751195485e-01:7.3042171541053857e-02:2.8456448472882023e-01:7.6573155766203760e-01:4.2696831508771277e-01:1.5014864262410754e+00:3.5431876116398564e-01:1.9818296411687502e+00:2.8431335305004102e-01:2.4394173326471127e+00:3.6136446734184791e-01:3.0441665679060930e+00:4.0308855320141979e-01:3.8189842083362029e+00 + CVs 20 + -1.2843051983929973e-01 1.8537188931651402e-01 2.7864169360496094e-01 + -2.9428741615746623e-01 4.0342207999790519e-01 5.4908210552847769e-01 + -4.8175643199498619e-01 6.2744739935566962e-01 7.9607582090003326e-01 + -6.6655209810785132e-01 8.2854194820202065e-01 1.0127929469885861e+00 + -8.2538883506188920e-01 9.9090766502650462e-01 1.2083038150594854e+00 + -9.4671849070651670e-01 1.1172964838419610e+00 1.4010617840692656e+00 + -1.0354194805391357e+00 1.2163911798040257e+00 1.6203343222971731e+00 + -1.1106607537008872e+00 1.2838315878800814e+00 1.9020523557166211e+00 + -1.2029684878708831e+00 1.3037907667908593e+00 2.2560055047464851e+00 + -1.3454874341496641e+00 1.2481804214155101e+00 2.6556215957457536e+00 + -1.5685351377839860e+00 1.0594067523820894e+00 3.0578247585494776e+00 + -1.8752442380248051e+00 7.1837397299840711e-01 3.4432918790280627e+00 + -2.2326358441214698e+00 3.1978831361532123e-01 3.8697391703208175e+00 + -2.6023900378898595e+00 7.2386521470121368e-03 4.4036220260712131e+00 + -2.9756968627810312e+00 -1.2769932784568006e-01 5.0306265760106559e+00 + -3.3957328596554235e+00 -1.0625368716516326e-01 5.6849866160799998e+00 + -3.8991933892494135e+00 6.3349075039419445e-03 6.3007902962992075e+00 + -4.4482717421501752e+00 1.5258853163694708e-01 6.8373215437429371e+00 + -4.8973582128144963e+00 2.6398832913548920e-01 7.3850859377175491e+00 + id 14237 + loc 5.9206372499465942e-01 6.1012101173400879e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0588966996248530e-01:4.2670995644346216e-01:2.8729061255600796e-01:3.1568869857431797e-01:9.1920126716516959e-01:4.7516965602973416e-01:1.0686240473109603e+00:5.0588461106578575e-01:1.6168234510683028e+00:4.3421222399953530e-01:1.9945752852466665e+00:3.9261347140445074e-01:2.4532100828067827e+00:2.9449769093447264e-01:3.2365222607685489e+00:4.4351989372693651e-01:3.9395108955720928e+00 + CVs 20 + -3.1887281112379248e-02 3.1897614192618196e-01 9.2675593751041480e-02 + -2.9550900929691593e-02 6.1557676331503552e-01 1.6344876667155150e-01 + -6.4798555160617000e-03 9.0001255460031016e-01 2.1841501000181968e-01 + 2.8701024344150727e-02 1.1872417918213092e+00 2.6201596410689321e-01 + 8.0186259982223784e-02 1.4836841025689331e+00 2.9086480405140291e-01 + 1.5500661580293640e-01 1.7992748980810915e+00 2.9764044309685322e-01 + 2.6188824423184626e-01 2.1323839243364477e+00 2.6262085285742698e-01 + 4.0374245952060661e-01 2.4601337157970207e+00 1.6420539191267769e-01 + 5.7391392704745214e-01 2.7542895382050645e+00 -5.2589002331444590e-03 + 7.5976510174313749e-01 2.9929089925114072e+00 -2.4045096183540604e-01 + 9.4613501648789666e-01 3.1610506396035887e+00 -5.2814984282340172e-01 + 1.1177566361152715e+00 3.2522570476111037e+00 -8.5160427415495799e-01 + 1.2608592490529462e+00 3.2670466382721202e+00 -1.1936644289734115e+00 + 1.3640135659411043e+00 3.2117110471928525e+00 -1.5407078720017346e+00 + 1.4218781224339967e+00 3.0969261556089287e+00 -1.8923755460868801e+00 + 1.4462199153519892e+00 2.9308353538581384e+00 -2.2896675574486278e+00 + 1.4651781405907829e+00 2.6703287982054831e+00 -2.8201881046489556e+00 + 1.4733567886544268e+00 2.1996972155486105e+00 -3.3706233614892032e+00 + 1.3798805670733103e+00 1.9826050500314498e+00 -3.2781226588485550e+00 + id 14238 + loc 3.1935435533523560e-01 4.8741647601127625e-01 396 + blend 0.0000000000000000e+00 + interp 3.8738745752062903e-01:3.2399585580104168e-01:6.8504482867396965e-02:2.7825303614917429e-01:1.2636485397265844e+00:3.8282273122466903e-01:1.9652295987854602e+00:3.8738358364605385e-01:2.2137998808029407e+00:3.1104297723591140e-01:3.0085696575173020e+00 + CVs 20 + -2.8661110460426009e-01 2.4490086890964488e-01 -7.2998164815458810e-01 + -5.1077925063646168e-01 3.4232653015414427e-01 -1.2607176102395030e+00 + -6.9990975960345891e-01 3.8406401789544464e-01 -1.7589420008255341e+00 + -8.5606526300060803e-01 4.0688952089641123e-01 -2.2906813295241837e+00 + -9.7307377728133504e-01 4.0454503915438389e-01 -2.8476554059799812e+00 + -1.0554808275984269e+00 3.7299079509279998e-01 -3.4207456158526739e+00 + -1.1172583927593309e+00 3.0950181859564141e-01 -4.0006682989590576e+00 + -1.1749248998833552e+00 2.0884339115519657e-01 -4.5771977509327506e+00 + -1.2448321901867567e+00 6.0678919590698932e-02 -5.1426124315388710e+00 + -1.3459916409681476e+00 -1.4993171058277022e-01 -5.6902536565877817e+00 + -1.4954366609751693e+00 -4.3370527647112112e-01 -6.2011344515666753e+00 + -1.6964246633341333e+00 -7.8428855968813105e-01 -6.6461600764623805e+00 + -1.9394150510682251e+00 -1.1856569085978359e+00 -7.0104514653116254e+00 + -2.2125991747686444e+00 -1.6290073597947745e+00 -7.2986415473970823e+00 + -2.5026359892635481e+00 -2.1093311913015884e+00 -7.5201238054192938e+00 + -2.7959778000972593e+00 -2.6178633242213829e+00 -7.6761530481499189e+00 + -3.0780292037404271e+00 -3.1443531702304535e+00 -7.7646180380736523e+00 + -3.3312546693097347e+00 -3.6746327657087696e+00 -7.7870467025293433e+00 + -3.5476750117152411e+00 -4.1279901552398286e+00 -7.7924858875894474e+00 + id 14239 + loc 2.0145981013774872e-01 9.5403259992599487e-01 400 + blend 0.0000000000000000e+00 + interp 5.2997751435473406e-01:3.8811052851983285e-01:2.7016839460410802e-01:3.0254981116408508e-01:1.0406427478109517e+00:3.1362450513223405e-01:1.9874229349610066e+00:5.2997221457959054e-01:2.6514778721904948e+00:3.3069405631691212e-01:3.1600769129224329e+00:3.5538019250855735e-01:3.9246268186743718e+00 + CVs 20 + -1.5587424208788075e-01 3.3227573077594991e-01 -5.9354592454037361e-02 + -3.3169461652389343e-01 6.8238545324967537e-01 -1.4227741813816053e-01 + -4.9853939041894346e-01 1.0421929646500767e+00 -2.7837344391342422e-01 + -6.4541532447745997e-01 1.3917044897210042e+00 -4.8353731819864548e-01 + -7.7414201355896650e-01 1.7083624537381881e+00 -7.5985687233720522e-01 + -8.8370677093637739e-01 1.9734734993144429e+00 -1.1002592167933507e+00 + -9.7085764042586575e-01 2.1744270092262266e+00 -1.4922665042640006e+00 + -1.0318641236332875e+00 2.3034403724180459e+00 -1.9209851696638993e+00 + -1.0606911502192056e+00 2.3561445742184928e+00 -2.3705567388815210e+00 + -1.0491698382876136e+00 2.3309534666540785e+00 -2.8208333375236974e+00 + -9.9793482582068305e-01 2.2328781800868640e+00 -3.2461493904398484e+00 + -9.2449820507735125e-01 2.0763663087207727e+00 -3.6262869171673797e+00 + -8.5311066388545453e-01 1.8800113554089506e+00 -3.9473870398045885e+00 + -8.0196208094238886e-01 1.6654399440169310e+00 -4.1897197268351016e+00 + -7.7253711524885682e-01 1.4587329546534367e+00 -4.3464105349652540e+00 + -7.5402236399117295e-01 1.2679791587800058e+00 -4.4554298756649224e+00 + -7.4657238477639387e-01 1.0765753495243675e+00 -4.5637449232435277e+00 + -7.6324988945098249e-01 8.7549245289667699e-01 -4.6904873743191713e+00 + -8.3749411534386364e-01 6.6900629441419501e-01 -4.8319991098108996e+00 + id 14240 + loc 2.5646764039993286e-01 4.7237247228622437e-01 401 + blend 0.0000000000000000e+00 + interp 3.7840448315963054e-01:2.7537888134359195e-01:5.1928726318113083e-01:3.7840069911479896e-01:1.0001598060367174e+00:2.9643232846862227e-01:1.9999835826461156e+00:3.6855233139098742e-01:2.6078066531247286e+00:2.9324285080301016e-01:3.3352930040490323e+00:3.6831264420952259e-01:3.9999974032270220e+00 + CVs 20 + -3.0830588774397594e-01 3.0899709822739918e-01 7.1894695189653884e-02 + -5.9390338366426865e-01 6.1041580055566491e-01 1.2647732616772936e-01 + -8.8758234057138063e-01 8.9703672577872884e-01 1.7980474020005296e-01 + -1.2040075982643481e+00 1.1604685765545668e+00 2.4204529206565389e-01 + -1.5484118597144065e+00 1.3919754789916632e+00 3.2291178069545029e-01 + -1.9215730229405090e+00 1.5816617338818877e+00 4.3705496480270106e-01 + -2.3153187516794733e+00 1.7175013267597306e+00 6.0074344568090843e-01 + -2.7111435526991623e+00 1.7865112221545516e+00 8.2357361912529181e-01 + -3.0844559988425182e+00 1.7791755066228869e+00 1.1023572307668981e+00 + -3.4103249621049385e+00 1.6931954840225372e+00 1.4202918993969944e+00 + -3.6709746331821291e+00 1.5347292398952854e+00 1.7528546831425185e+00 + -3.8610214704382315e+00 1.3130113537524344e+00 2.0814544941338609e+00 + -3.9793172402165133e+00 1.0358099050250387e+00 2.3932584770484122e+00 + -4.0232134943394255e+00 7.0802478075432562e-01 2.6827626072497650e+00 + -3.9807844723674468e+00 3.3896109423999560e-01 2.9530703630359967e+00 + -3.8259208010002879e+00 -3.6131170223469344e-02 3.2015347777404521e+00 + -3.5394198214076882e+00 -3.5716030130720888e-01 3.4072691523047434e+00 + -3.1450479006161802e+00 -5.6402832494506194e-01 3.5283565807363870e+00 + -2.7107046281181106e+00 -7.1591785429717247e-01 3.6069634016919219e+00 + id 14241 + loc 8.8531845808029175e-01 7.7478867769241333e-01 379 + blend 0.0000000000000000e+00 + interp 6.4823649674956019e-01:4.8324027091024746e-01:7.7976438194832798e-02:4.5237926723935235e-01:9.5267489796848248e-01:5.0654169803243809e-01:1.3697911429701064e+00:4.8832781617865068e-01:2.1064803033049055e+00:6.4791208084476404e-01:2.9201190695668142e+00:5.7824621350092431e-01:3.1996676798648664e+00:6.4823001438459271e-01:3.7777862631279922e+00 + CVs 20 + -2.7856808736515370e-01 3.7895005367151979e-01 2.0709553470464448e-01 + -5.6326639964087444e-01 7.3880512471253024e-01 4.0690038418030144e-01 + -8.5266635295746918e-01 1.0722853013203952e+00 6.2369849791522747e-01 + -1.1385058775781602e+00 1.3900574542467365e+00 8.4740421677626854e-01 + -1.4204388959895153e+00 1.7009944127499501e+00 1.0556218054858790e+00 + -1.7142362352240901e+00 2.0027104016785855e+00 1.2361963716226851e+00 + -2.0366719110725420e+00 2.2855813999368952e+00 1.3828517317992632e+00 + -2.3940363932123772e+00 2.5392378894915875e+00 1.4903230575496664e+00 + -2.7800484741304357e+00 2.7519568934428316e+00 1.5546777920488992e+00 + -3.1832979077910668e+00 2.9128211814941065e+00 1.5779364367803872e+00 + -3.5967507632264404e+00 3.0140657582212045e+00 1.5665980423836288e+00 + -4.0177489833864133e+00 3.0495428911209084e+00 1.5266468789895828e+00 + -4.4322417529694818e+00 3.0159624597844230e+00 1.4628959324084683e+00 + -4.7890734057510542e+00 2.9290580962813975e+00 1.3798692676159194e+00 + -5.0204583674043022e+00 2.8272810797863812e+00 1.2787738807039695e+00 + -5.1039825747246956e+00 2.7243871978787717e+00 1.1491154018478289e+00 + -5.0814091895499995e+00 2.5864274369140103e+00 9.5223662571598500e-01 + -5.0476119669649879e+00 2.3789288490058023e+00 6.7375655051203398e-01 + -5.1234026225845932e+00 2.2642591605420690e+00 5.2575753396827718e-01 + id 14242 + loc 2.2825270891189575e-02 1.2865385413169861e-01 404 + blend 0.0000000000000000e+00 + interp 5.1098183930890717e-01:3.7849803480051131e-01:1.1191740200411160e-01:3.6176060541297145e-01:9.9844731511082185e-01:4.0542963830807416e-01:1.5016792064492961e+00:2.1860773343298689e-01:2.0000043560525627e+00:5.1097672949051409e-01:2.8930701974110073e+00:3.2939457100864017e-01:3.6813334772684252e+00 + CVs 20 + -6.0382834726036463e-02 -6.4781266289728662e-02 7.3841212984896973e-02 + -1.3509731247756632e-01 -1.1143542420901487e-01 1.4116969981931393e-01 + -1.9971707124319293e-01 -1.5668454474280630e-01 1.9216719177471692e-01 + -2.6067654138497237e-01 -2.0602168027165446e-01 2.4128921500549338e-01 + -3.1596780126528645e-01 -2.5928914577697038e-01 2.8362316389930620e-01 + -3.6354485216297056e-01 -3.1590539667169043e-01 3.1405977463432522e-01 + -4.0210299530337346e-01 -3.7439683758404335e-01 3.2659006053310091e-01 + -4.3229252616678954e-01 -4.3156130204374427e-01 3.1395857335363675e-01 + -4.6018532259796130e-01 -4.8247705120362822e-01 2.7253351805963622e-01 + -4.9803043205597997e-01 -5.2290027585844678e-01 2.0849535946209538e-01 + -5.5716397168673371e-01 -5.5124610210915448e-01 1.3478396669729745e-01 + -6.4357845327415764e-01 -5.6684997274321025e-01 6.1771041616979688e-02 + -7.5994318732548705e-01 -5.6863959623684623e-01 -3.3504219587005835e-03 + -9.0905272926375469e-01 -5.5721658683498310e-01 -5.2136059955446595e-02 + -1.0937492378076414e+00 -5.3557000448203362e-01 -7.3895800695848293e-02 + -1.3147735458495551e+00 -5.0461638347001925e-01 -5.9672793633597274e-02 + -1.5703512615246280e+00 -4.6001566298483104e-01 -2.9455288773949165e-03 + -1.8504416472046012e+00 -3.9874179400430865e-01 1.0542342875799596e-01 + -1.9283558318731913e+00 -3.7758242858376029e-01 1.9411094262209419e-01 + id 14243 + loc 3.7777507305145264e-01 4.2366310954093933e-02 395 + blend 0.0000000000000000e+00 + interp 4.6205301291066458e-01:4.6204839238053552e-01:1.8878647198099063e-01:3.5645220950529621e-01:7.7149558019198317e-01:3.4267003293280784e-01:1.1609827321839652e+00:3.1416047332575558e-01:2.1447881069306494e+00:3.7426312031203640e-01:3.0389883599180783e+00:2.9198167240020290e-01:3.7755335947515674e+00 + CVs 20 + -2.6199940571913982e-01 2.5131750195047270e-01 -3.7221787645007975e-01 + -5.1723478139940704e-01 4.7530227857154050e-01 -7.0056043426991110e-01 + -7.7012480673227679e-01 6.9247421325425629e-01 -1.0261821094168107e+00 + -1.0205973034956166e+00 9.0745025929326650e-01 -1.3709052384852725e+00 + -1.2631671997597538e+00 1.1115178803149797e+00 -1.7390980899625212e+00 + -1.4981700205950168e+00 1.2979052613351096e+00 -2.1288522909147658e+00 + -1.7291416733995773e+00 1.4582542111527290e+00 -2.5395334151105393e+00 + -1.9595020282234339e+00 1.5772742612495758e+00 -2.9752257858785605e+00 + -2.1962941315392133e+00 1.6388603417937002e+00 -3.4351350234966773e+00 + -2.4513726187131288e+00 1.6321749153721454e+00 -3.9101093676034413e+00 + -2.7313858670959990e+00 1.5530154153753353e+00 -4.3882131730437957e+00 + -3.0321063763814431e+00 1.4030062591449814e+00 -4.8605619664924813e+00 + -3.3506783161858542e+00 1.1851640539691615e+00 -5.3181817581841804e+00 + -3.6973815685900981e+00 9.0067840428182144e-01 -5.7420276109493571e+00 + -4.0861976195208261e+00 5.4314371258631899e-01 -6.1033262649712210e+00 + -4.5124963028990042e+00 8.4821902380848524e-02 -6.3690633868815087e+00 + -4.9418504051954590e+00 -4.9254104293360790e-01 -6.4979529968197127e+00 + -5.3297616133063261e+00 -1.1110353205928334e+00 -6.4831143868121526e+00 + -5.6540341945417092e+00 -1.5144830182727973e+00 -6.5422521235726601e+00 + id 14244 + loc 6.3584601879119873e-01 8.6598026752471924e-01 378 + blend 0.0000000000000000e+00 + interp 3.2410302432831306e-01:2.8006982703105987e-01:1.4191892097578906e-01:3.2409978329806977e-01:8.6110106472412418e-01:2.5001253873799867e-01:1.3219261952748940e+00:2.7843967319585861e-01:2.1325491301567827e+00:2.3966902150274824e-01:3.0383405769866583e+00:3.2338835030056018e-01:3.8065331012809427e+00 + CVs 20 + 5.1999135909563909e-01 3.4061496034767252e-01 1.4029478192826045e-01 + 9.7836675189377298e-01 5.9794689798149725e-01 2.3857208991525189e-01 + 1.4479278030190434e+00 8.0503194693297075e-01 3.0352244642428838e-01 + 1.9595467990990887e+00 9.9159309812061114e-01 3.4993322647835701e-01 + 2.5031034526416693e+00 1.1697911437867028e+00 4.0017638872082839e-01 + 3.0707241225654252e+00 1.3306437559533628e+00 4.8243757775011398e-01 + 3.6582273420334093e+00 1.4464729005940895e+00 6.1264953495456664e-01 + 4.2543859350692692e+00 1.4896035854213834e+00 7.9154554405880939e-01 + 4.8373978463652989e+00 1.4411601000685583e+00 1.0054675721606563e+00 + 5.3806170005876446e+00 1.2916690741857402e+00 1.2229823700794658e+00 + 5.8549637856407006e+00 1.0443376030130551e+00 1.4003002970155700e+00 + 6.2303546427122072e+00 7.2146980081701972e-01 1.4996264492323901e+00 + 6.4928052093563577e+00 3.6692344899928564e-01 1.5086012859714908e+00 + 6.6692436652498337e+00 2.0002853925695785e-02 1.4535978375907435e+00 + 6.8068751475240878e+00 -3.2616680940615295e-01 1.3809187537966408e+00 + 6.9264196756300560e+00 -6.8903320205943297e-01 1.3159433675390462e+00 + 7.0180871524628579e+00 -1.0365710012484937e+00 1.2590218234464636e+00 + 7.0747924538081417e+00 -1.3372140724370030e+00 1.2157593314357344e+00 + 7.1647193803244793e+00 -1.6286047473443834e+00 1.1947326553373852e+00 + id 14245 + loc 9.7340470552444458e-01 4.0270528197288513e-01 412 + blend 0.0000000000000000e+00 + interp 4.2274537313683069e-01:2.8005400414092868e-01:1.5295180450975587e-01:3.1316499637911760e-01:1.0712412781896719e+00:3.2822843236812482e-01:1.9741098129642820e+00:4.2274114568309934e-01:2.5314293726520987e+00:3.4404299614877620e-01:3.0117979408878752e+00:3.0044538874999116e-01:3.8145539749191228e+00 + CVs 20 + -7.5285455859419548e-01 1.8901644210313151e-01 2.0733008884844686e-01 + -1.2636109514662213e+00 2.6759025843538697e-01 4.0794071704323898e-01 + -1.7371932283267413e+00 3.3886483725206851e-01 6.1471900234259547e-01 + -2.2361352495322060e+00 4.4172485447013327e-01 8.2306546452838014e-01 + -2.7559408535813432e+00 5.5715590455269026e-01 1.0313394740058481e+00 + -3.2974749876978251e+00 6.5352539810963151e-01 1.2577452720503153e+00 + -3.8639978367924432e+00 6.9440515015724169e-01 1.5475442064078517e+00 + -4.4513779073997872e+00 6.2803109923898903e-01 1.9514609007059136e+00 + -5.0390048672092487e+00 3.9248797587331752e-01 2.4817604722298516e+00 + -5.5818572257192347e+00 -7.3892941610172125e-02 3.0843370276777744e+00 + -6.0114357379031347e+00 -7.7751047389836048e-01 3.6453635768665129e+00 + -6.2911922364939565e+00 -1.5995536922313260e+00 4.0767580039728779e+00 + -6.4374348071763006e+00 -2.3937007697233925e+00 4.3993068721107234e+00 + -6.4720786814292843e+00 -3.0953301631030077e+00 4.6687658233217268e+00 + -6.4128008019568696e+00 -3.7185935368057574e+00 4.9144792078019917e+00 + -6.2807316191218128e+00 -4.3323672611642223e+00 5.1512642432696545e+00 + -6.1034206528057728e+00 -4.9792452127292348e+00 5.3990363427453838e+00 + -5.9079095909459562e+00 -5.6378464863342224e+00 5.6774533671109237e+00 + -5.6934108304587951e+00 -6.2526865152042896e+00 5.9750494329280750e+00 + id 14246 + loc 7.1792513132095337e-01 6.4594841003417969e-01 399 + blend 0.0000000000000000e+00 + interp 4.7220725933531660e-01:3.5301075227477574e-01:2.5796159157248133e-01:4.7220253726272327e-01:9.9908452479264787e-01:3.3964813110564374e-01:1.5697022393745423e+00:3.4577273981155704e-01:2.1866456941678218e+00:2.5585296918150663e-01:3.0323235715541488e+00:3.9919374377056871e-01:3.6652708941439909e+00 + CVs 20 + -2.2003723259363508e-01 3.4512133896501163e-01 -2.4447472751177834e-01 + -3.8583134081829551e-01 6.8320912983985171e-01 -4.9323909329998095e-01 + -5.3699753169054887e-01 1.0156375025129147e+00 -7.6412802256098622e-01 + -6.9986951100043782e-01 1.3411498825491639e+00 -1.0676282417148253e+00 + -8.9516031391661832e-01 1.6502439752283942e+00 -1.4136692371587072e+00 + -1.1416382836420880e+00 1.9215193139750744e+00 -1.8115048795269921e+00 + -1.4509146695477222e+00 2.1263466045915185e+00 -2.2615916951593369e+00 + -1.8255801675551422e+00 2.2448107365863099e+00 -2.7475186592288470e+00 + -2.2689263883586595e+00 2.2658420939923913e+00 -3.2515878663725202e+00 + -2.7817245230213405e+00 2.1580763563554402e+00 -3.7656945827272881e+00 + -3.3358418793720896e+00 1.8932720002830088e+00 -4.2590240848525278e+00 + -3.8961316745449972e+00 1.5299037027172155e+00 -4.6726535988540876e+00 + -4.4702396818357686e+00 1.1652105851323973e+00 -4.9786767890010974e+00 + -5.0797701914869338e+00 8.0487475944223963e-01 -5.1911965598003764e+00 + -5.7163892129208698e+00 4.2298518530184670e-01 -5.3204878274858967e+00 + -6.3182179440615798e+00 1.7766620799151678e-01 -5.3628184758921060e+00 + -6.7467379980834101e+00 3.7902689155351799e-01 -5.3334118926731993e+00 + -6.8964232377265358e+00 8.8771850746568881e-01 -5.2597846638205983e+00 + -7.5177136335369914e+00 8.8002538480356862e-01 -5.2632638183604357e+00 + id 14247 + loc 9.9632906913757324e-01 9.2113333940505981e-01 393 + blend 0.0000000000000000e+00 + interp 4.2442795792426941e-01:3.9297711175863848e-01:7.3933828291384884e-01:3.6252230706702099e-01:1.1887526999031917e+00:4.2442371364469017e-01:2.0734692802812225e+00:4.2205409473992839e-01:2.4940787637638158e+00:4.0534436684219183e-01:2.9802672075654644e+00:2.4192956800701840e-01:3.4506333279277808e+00 + CVs 20 + -2.5369486137582636e-01 1.7444066115122156e-01 -3.0853958967488618e-02 + -4.9259134682786992e-01 3.5401946867665796e-01 -6.9934402077416413e-02 + -7.1851523045643195e-01 5.3382971976102267e-01 -1.0413904860783829e-01 + -9.3803228356559831e-01 7.1375026558890653e-01 -1.2770894673250605e-01 + -1.1558266338970595e+00 8.9510908157776692e-01 -1.4426057496471714e-01 + -1.3783705059624138e+00 1.0774303708859705e+00 -1.5980503596113382e-01 + -1.6119500513626288e+00 1.2550730187154338e+00 -1.8481517220964971e-01 + -1.8612147374770718e+00 1.4164880266310382e+00 -2.3096914571971372e-01 + -2.1291898627456738e+00 1.5458066966096340e+00 -3.0559092202450627e-01 + -2.4135801662457093e+00 1.6240841269856281e+00 -4.1126909241872034e-01 + -2.7025934848391611e+00 1.6364641207956372e+00 -5.4619444577044851e-01 + -2.9837424743342500e+00 1.5776867852398546e+00 -7.0351973205774532e-01 + -3.2510075268661880e+00 1.4532191374259944e+00 -8.7634197700901950e-01 + -3.4961699718199228e+00 1.2839062025539643e+00 -1.0642548321988903e+00 + -3.7051686137021997e+00 1.0827159925492227e+00 -1.2679217419162230e+00 + -3.8650322797623113e+00 8.0935860557921369e-01 -1.4732065306568085e+00 + -3.9866944645163103e+00 3.7779670417073286e-01 -1.6832012083396342e+00 + -4.1383629100212831e+00 -1.6892259858968117e-01 -2.0386370333889845e+00 + -4.1693041754671993e+00 -2.0830397325056471e-01 -2.3310190363761909e+00 + id 14248 + loc 4.5724064111709595e-01 8.8070011138916016e-01 405 + blend 0.0000000000000000e+00 + interp 5.1796880917550481e-01:3.4689457273597307e-01:8.0932186239108139e-02:3.1979411519088069e-01:8.7571148160868495e-01:4.2185482173773198e-01:1.6224121237486426e+00:3.0561127830601909e-01:2.0355373559037999e+00:3.6713736653631168e-01:3.0470065953335927e+00:5.1796362948741304e-01:3.8007640971040031e+00 + CVs 20 + 2.8751900090455323e-01 3.2688973399761012e-01 -6.7852204636209917e-02 + 4.2044046034052829e-01 5.5293893366784008e-01 -1.2268253619356888e-01 + 5.1718458142141932e-01 7.1516355698276057e-01 -1.5970320857412465e-01 + 6.2170316999846786e-01 8.6591780258831652e-01 -1.7436687544587615e-01 + 7.3219308105869207e-01 1.0072280942103731e+00 -1.5951095030674067e-01 + 8.4767724962250290e-01 1.1364889974892525e+00 -1.0730827946607019e-01 + 9.6532874589617201e-01 1.2434456104321701e+00 -1.7133766798244313e-02 + 1.0804345369763833e+00 1.3181441466110388e+00 9.6702280775443530e-02 + 1.1902705207354536e+00 1.3627178018547152e+00 2.1541365555939371e-01 + 1.2951998215165645e+00 1.3870306862079855e+00 3.2981086002005000e-01 + 1.3973154347230554e+00 1.3998298285376407e+00 4.4126395320547523e-01 + 1.4996703117368684e+00 1.4060801418994417e+00 5.5618314934048230e-01 + 1.6033035049545612e+00 1.4085034375117884e+00 6.7560853055179981e-01 + 1.7029780103698013e+00 1.4103306850348427e+00 7.8695623117211932e-01 + 1.7895702930178143e+00 1.4158079475320413e+00 8.7274568203903824e-01 + 1.8594458044881710e+00 1.4280147940844912e+00 9.2992733630920388e-01 + 1.9178044307569873e+00 1.4478603113504365e+00 9.6919236819150456e-01 + 1.9785544815458473e+00 1.4722142109952607e+00 1.0030979316509214e+00 + 2.1534547339970413e+00 1.5126281487286848e+00 1.1310983387827234e+00 + id 14249 + loc 7.4482327699661255e-01 7.3292106389999390e-01 402 + blend 0.0000000000000000e+00 + interp 3.6993356733756855e-01:3.0330285879788926e-01:2.1815832939419366e-01:3.0333898803915682e-01:9.9431682364277352e-01:3.0326134238146751e-01:1.8451585554870422e+00:3.0835369252547445e-01:2.3715385214712796e+00:3.6992986800189520e-01:2.9643526934986864e+00:2.6564346407134282e-01:3.4341979596922605e+00 + CVs 20 + -1.0954981462751953e-01 7.9330410829286449e-02 -7.5004323141824841e-02 + -1.8229472103711997e-01 1.7318490693176156e-01 -1.5323748926046693e-01 + -2.2913960215287477e-01 2.6548150207929661e-01 -2.2100939786026919e-01 + -2.5971641681122937e-01 3.4797034897134349e-01 -2.7270956629012949e-01 + -2.7613527513482755e-01 4.2226933210853279e-01 -3.1135646281554441e-01 + -2.8641103405735618e-01 4.8734370952852413e-01 -3.3614167597065647e-01 + -3.0246361072444494e-01 5.3982466881208790e-01 -3.4289619231667046e-01 + -3.3451650135198607e-01 5.7374657501620563e-01 -3.3122120364986590e-01 + -3.9991459535921003e-01 5.7005630162461474e-01 -3.0847835075210372e-01 + -5.6428194521297048e-01 5.0031274982159746e-01 -2.8756052546000266e-01 + -9.1628959792939857e-01 4.3899897889564321e-01 -2.9419346004333963e-01 + -1.2503386147518833e+00 5.5834353166957951e-01 -2.8904969064721436e-01 + -1.3234033105739396e+00 7.9878283919656634e-01 -1.7184982811455971e-01 + -1.1357644394520878e+00 1.0929383971604301e+00 1.8393848987692918e-02 + -7.7248481930778701e-01 1.4141019000808210e+00 1.5087491123445890e-01 + -3.2093785038843786e-01 1.7341109717673835e+00 1.4589876839929539e-01 + 1.7195571880889327e-01 2.0291479201047764e+00 -2.3750126001674698e-02 + 6.3681534389155114e-01 2.2688495791709138e+00 -3.5156648247037958e-01 + 6.7319923051220554e-01 2.3488238635623588e+00 -4.3750005102767497e-01 + id 14250 + loc 2.6632341742515564e-01 3.6837819963693619e-02 1069 + blend 0.0000000000000000e+00 + interp 3.9832291421752464e-01:3.9831893098838250e-01:1.8839707029341701e-01:2.6569936233803709e-01:1.0095562819300024e+00:3.0158945091192563e-01:1.8695328336782113e+00:3.0695457621195155e-01:2.4190797988958872e+00:3.6237859281304652e-01:3.0032947862913417e+00:2.9695485150932727e-01:3.8670361416801073e+00 + CVs 20 + -3.0527716048187714e-01 2.1689845586129117e-01 1.8898183205050351e-02 + -5.7787919974457858e-01 4.2734286703836999e-01 7.0073379750898224e-02 + -8.2713566107635972e-01 6.4737484470723028e-01 1.6363101699063037e-01 + -1.0721892540885143e+00 8.8988051300314619e-01 2.8549113624740763e-01 + -1.3407259902727533e+00 1.1471886806421314e+00 3.8815002297303813e-01 + -1.6531236237461493e+00 1.3956799664068245e+00 4.3474101871884163e-01 + -2.0359273696867031e+00 1.6140196672367624e+00 3.9858543913013245e-01 + -2.5108207332636061e+00 1.7555631195387091e+00 2.1655007035238594e-01 + -2.9898560413136503e+00 1.7403589522857565e+00 -1.6124251498718745e-01 + -3.3137393412229668e+00 1.5626833900725396e+00 -6.4112661072417354e-01 + -3.4560805804202901e+00 1.2944620690056765e+00 -1.1122955449091940e+00 + -3.4546973381106092e+00 9.7652581909272651e-01 -1.5354558889460472e+00 + -3.3533434683265355e+00 6.5502163379965395e-01 -1.8445894425692604e+00 + -3.2291567902090303e+00 4.1709359512784278e-01 -1.9791997667199888e+00 + -3.1115262260269865e+00 2.5603176621447898e-01 -1.9717746126823177e+00 + -2.9686099680852709e+00 6.0022849260415928e-02 -1.9329375296806452e+00 + -2.8001125473658552e+00 -1.7851136381998045e-01 -1.9906657615823100e+00 + -2.6579087083046553e+00 -2.9004608357511164e-01 -2.2208300353465571e+00 + -2.5834397626640597e+00 -1.4106039681125393e-01 -2.5992717390082851e+00 + id 14251 + loc 6.4702582359313965e-01 5.2324599027633667e-01 400 + blend 0.0000000000000000e+00 + interp 3.6656261859239975e-01:3.2488957965706500e-01:4.2055971793791003e-01:2.8774553465774771e-01:1.0359831769196925e+00:3.6655895296621382e-01:1.9477207636976095e+00:3.1573692106392803e-01:2.7337012845682995e+00:3.2192753894999371e-01:3.4969912310310978e+00 + CVs 20 + -1.6949062226799710e-01 1.5373534689789070e-01 -1.6705625523673684e-01 + -3.3379662489032480e-01 3.1162835999221639e-01 -3.4955735867800064e-01 + -4.9215378816059668e-01 4.6775769557877889e-01 -5.4875984786137155e-01 + -6.4456957004904514e-01 6.1878044956214795e-01 -7.6468089430736641e-01 + -7.9146295235912900e-01 7.6173988621681965e-01 -9.9488672237321107e-01 + -9.4666072534268542e-01 8.9215546845542826e-01 -1.2354427452870422e+00 + -1.1285854716595105e+00 1.0262236730339733e+00 -1.4860274913972629e+00 + -1.3146855677554963e+00 1.1816106752997155e+00 -1.7554278345172223e+00 + -1.4718543114856233e+00 1.3410686193689365e+00 -2.0456936215386237e+00 + -1.6099187678353934e+00 1.4836450483181329e+00 -2.3662634402702984e+00 + -1.7336727901384081e+00 1.5942248840687996e+00 -2.7231764538377714e+00 + -1.8395014310588063e+00 1.6571900574070446e+00 -3.1173446061958106e+00 + -1.9197158970535666e+00 1.6550006543688376e+00 -3.5438241919391951e+00 + -1.9639104844298858e+00 1.5705869560158503e+00 -3.9893858571532324e+00 + -1.9608187865029754e+00 1.3922725385180650e+00 -4.4309647821216647e+00 + -1.9041186871282549e+00 1.1181604020805729e+00 -4.8344313196553568e+00 + -1.8007886243056230e+00 7.5981487437065276e-01 -5.1589487741140818e+00 + -1.6718608734614673e+00 3.4941885430965369e-01 -5.3760472642064112e+00 + -1.5738091479472667e+00 2.4958618559977719e-02 -5.5405765957040902e+00 + id 14252 + loc 9.7563701868057251e-01 6.1289387941360474e-01 401 + blend 0.0000000000000000e+00 + interp 4.4774796909371567e-01:4.4774349161402477e-01:3.2864655719153091e-02:3.4828430350843120e-01:8.0886880804052375e-01:2.6751315965155636e-01:1.5414303188824490e+00:3.6937027888095841e-01:2.0184461541379846e+00:1.0508672828937361e-01:2.9513136217956886e+00:3.7710053390966036e-01:3.9128484613025005e+00 + CVs 20 + 9.4167522202605269e-02 4.0893646097408748e-01 -3.0149241277501188e-01 + 1.8363007254132585e-01 8.0207923436121875e-01 -6.0902606930768244e-01 + 3.0044463910372121e-01 1.1662182445376943e+00 -9.1913776515725720e-01 + 4.3342896718461299e-01 1.4970735725403679e+00 -1.2412712372143127e+00 + 5.5792115266833342e-01 1.7956074980228975e+00 -1.5829276739412328e+00 + 6.5072325537368914e-01 2.0657965852105487e+00 -1.9448238725823748e+00 + 6.9347580353985594e-01 2.3062562522731902e+00 -2.3225143909268020e+00 + 6.7471973945134944e-01 2.5062965409023072e+00 -2.7067476263279331e+00 + 6.0100824315129875e-01 2.6422467680880777e+00 -3.0778653666661286e+00 + 5.0334673082632286e-01 2.6875347385370310e+00 -3.4091330601720014e+00 + 4.1173624519946028e-01 2.6290750054116554e+00 -3.6789624770529201e+00 + 3.2970438203351504e-01 2.4739123841632358e+00 -3.8717517514523321e+00 + 2.3318843614777529e-01 2.2584483706894272e+00 -3.9979906705731763e+00 + 7.9358130924847670e-02 2.0161795382937622e+00 -4.1087501024939499e+00 + -1.7394613412200854e-01 1.7588505683374041e+00 -4.2276629558413701e+00 + -5.5579874600501911e-01 1.5321753877742712e+00 -4.3410699201364862e+00 + -1.0667299793488862e+00 1.4347466140615182e+00 -4.4296883771736049e+00 + -1.5864301140157997e+00 1.5142004161909348e+00 -4.4573338306596186e+00 + -1.9198829434630673e+00 1.4899381581389108e+00 -4.4626570664871190e+00 + id 14253 + loc 7.4128413200378418e-01 6.1198216676712036e-01 379 + blend 0.0000000000000000e+00 + interp 4.3925151551053154e-01:4.0724198333834644e-01:3.8466501432399047e-02:3.7246125547374898e-01:9.1693444814429914e-01:4.3924712299537644e-01:1.1776254748250734e+00:3.8470466381769691e-01:2.0034999045932977e+00:3.4188411715709638e-01:2.9931875914724118e+00:4.3093441784816933e-01:3.7602331171596499e+00 + CVs 20 + -3.1773722321861664e-01 2.4252909730606559e-01 2.4957745706924295e-01 + -5.8369656756207955e-01 4.4064138213039650e-01 4.5625755145832864e-01 + -8.2737974887920052e-01 6.0897043353585334e-01 6.6750468338012103e-01 + -1.0660459146737837e+00 7.6930670108615029e-01 9.1226873540705111e-01 + -1.2940613189866326e+00 9.4768333211124134e-01 1.1828543794250332e+00 + -1.5164688344586050e+00 1.1655802431430924e+00 1.4656106141636389e+00 + -1.7659187901882112e+00 1.4241355748731763e+00 1.7462141626745222e+00 + -2.0771633160745053e+00 1.7058146502791782e+00 2.0037032982598348e+00 + -2.4605284539284682e+00 1.9876863612463411e+00 2.2103793638934750e+00 + -2.9039575318590756e+00 2.2464990205561048e+00 2.3422161319214188e+00 + -3.3912374332123267e+00 2.4586717052521490e+00 2.3951989032247840e+00 + -3.9148875970258836e+00 2.5932013460283443e+00 2.3847658713194799e+00 + -4.4546681072762890e+00 2.6007751993280728e+00 2.3315333613246469e+00 + -4.9497160892148369e+00 2.4464276004143226e+00 2.2549164153800305e+00 + -5.3498773858346080e+00 2.1626834264865478e+00 2.1661616875835321e+00 + -5.6703222567431624e+00 1.8226534020313663e+00 2.0615022537745955e+00 + -5.9582750960367763e+00 1.4842760960011638e+00 1.9402349832653345e+00 + -6.2672439243905131e+00 1.1674170858196393e+00 1.8356901130743568e+00 + -6.6542712638338744e+00 8.6156098414867133e-01 1.7879346484727723e+00 + id 14254 + loc 3.3908674120903015e-01 6.6408485174179077e-02 381 + blend 0.0000000000000000e+00 + interp 4.5647523622205394e-01:2.5960279247823620e-01:8.1014675379185053e-02:2.9175877765739672e-01:8.6260569145496169e-01:3.6226052331003999e-01:1.4853501896889172e+00:3.3940840345459439e-01:1.8532735846045187e+00:4.5647067146969172e-01:2.2094416511806481e+00:3.8400893503891093e-01:3.0000692311852752e+00:3.9723180379423967e-01:3.4603392790568708e+00 + CVs 20 + -7.2893329455880951e-01 2.0174266303449687e-01 -6.7981969959197031e-01 + -1.2848440981484983e+00 2.7678847819783720e-01 -1.0862974582124347e+00 + -1.8206658484705693e+00 3.1055168829745744e-01 -1.4456250740112488e+00 + -2.3794101678552835e+00 3.4253690141001425e-01 -1.8466237818745164e+00 + -2.9422817829842507e+00 3.7197932580815662e-01 -2.2942473500943343e+00 + -3.4963621016695989e+00 3.9631531377005969e-01 -2.7857831905806916e+00 + -4.0466655108274319e+00 4.0481750479562073e-01 -3.3185806603909573e+00 + -4.6074740925504738e+00 3.7709090765758480e-01 -3.8955475694357951e+00 + -5.1906649880154223e+00 2.7533304887800436e-01 -4.5250268690262487e+00 + -5.8007893977894840e+00 4.6812281143158385e-02 -5.1998993238737512e+00 + -6.4334820756717521e+00 -3.6866617373046418e-01 -5.8824173829128794e+00 + -7.0620603073687453e+00 -1.0221697350316665e+00 -6.5011341443982724e+00 + -7.6314827128265890e+00 -1.8947425376066587e+00 -6.9643782264842287e+00 + -8.1041669573752255e+00 -2.8449637533819385e+00 -7.2366597188125397e+00 + -8.5014563404344159e+00 -3.7091419892784518e+00 -7.3900150248297685e+00 + -8.8686102524014476e+00 -4.3921949326667500e+00 -7.5092632866983582e+00 + -9.2374254340314383e+00 -4.8697689411327332e+00 -7.6179122580095573e+00 + -9.6045159057510912e+00 -5.2439870570261515e+00 -7.7132743983240406e+00 + -9.9319242427923218e+00 -5.7543174837747593e+00 -7.8329623988823673e+00 + id 14255 + loc 4.1719496250152588e-01 6.1830949783325195e-01 395 + blend 0.0000000000000000e+00 + interp 2.9077846567483728e-01:2.8646948213050488e-01:2.9590402755628842e-01:2.9077555789018056e-01:1.3277922844105503e+00:2.6070666115240781e-01:2.3440812244720388e+00:2.8945168484335365e-01:3.2186415689962189e+00 + CVs 20 + 4.3196727677824526e-01 1.6047181855872020e-01 -3.3796534516840698e-01 + 8.0797231424281324e-01 2.6583319314008647e-01 -6.3404275520172315e-01 + 1.1833632386376429e+00 3.5716397980122871e-01 -9.2223654127120613e-01 + 1.5789498986844173e+00 4.4547989851808822e-01 -1.2102321816776962e+00 + 1.9895025784427891e+00 5.2367111173267611e-01 -1.4911178904639266e+00 + 2.4053598366311291e+00 5.8791682853614691e-01 -1.7641034991485742e+00 + 2.8167574349005124e+00 6.3434297176418841e-01 -2.0309357853933356e+00 + 3.2168637516866672e+00 6.5520038573331973e-01 -2.2915394649906071e+00 + 3.6007257372254702e+00 6.4020892191911294e-01 -2.5478497483891047e+00 + 3.9616567817315715e+00 5.8038462197662111e-01 -2.8075970863934296e+00 + 4.2943584761420874e+00 4.7384236431257776e-01 -3.0750969580802447e+00 + 4.6045631924991444e+00 3.2926004421269139e-01 -3.3437224795896707e+00 + 4.9041956006261831e+00 1.5533242873446484e-01 -3.6059768534715850e+00 + 5.2017864858908744e+00 -4.5645312386729753e-02 -3.8591961320334818e+00 + 5.5000745002074787e+00 -2.7860002354609970e-01 -4.1026907069230640e+00 + 5.7966423813364187e+00 -5.5456457949004179e-01 -4.3341813566376075e+00 + 6.0826349838003306e+00 -8.8043572323323094e-01 -4.5467144571177647e+00 + 6.3456223229156157e+00 -1.2371571988604360e+00 -4.7254463644617113e+00 + 6.5747232498109582e+00 -1.5050110761891844e+00 -4.8351145006226828e+00 + id 14256 + loc 8.6757373809814453e-01 2.9573023319244385e-01 412 + blend 0.0000000000000000e+00 + interp 4.2274537313683069e-01:4.2274114568309934e-01:5.1957503277049777e-01:3.6257335035283828e-01:1.0069922189466844e+00:3.9837676004353273e-01:1.4795681724408196e+00:3.2554478238744289e-01:1.9998407705148651e+00:3.4802691405058089e-01:2.5756026940586514e+00:3.5896565067281622e-01:3.0162855680178735e+00:3.2847929273326759e-01:3.9867726638996528e+00 + CVs 20 + -7.1948847830424201e-01 2.5416940302719360e-01 1.6160856734503015e-01 + -1.2111652341775720e+00 4.1399013493255771e-01 3.1817320942017202e-01 + -1.6560858577114475e+00 5.6224873474232395e-01 4.7716422061720593e-01 + -2.1066569967199120e+00 7.2318265146961003e-01 6.3757556990698261e-01 + -2.5508778897493194e+00 8.8726885318046866e-01 7.9812869952368970e-01 + -2.9911439355011922e+00 1.0522110341534190e+00 9.6399814363296088e-01 + -3.4498148717624408e+00 1.2056375147924534e+00 1.1592942739247381e+00 + -3.9476766227204791e+00 1.3113892782273839e+00 1.4387126200341629e+00 + -4.4873031594251893e+00 1.3140447895483938e+00 1.8535338494614655e+00 + -5.0504246706291216e+00 1.1394142580706856e+00 2.4062048111782333e+00 + -5.5689994328931673e+00 7.2286545467681806e-01 3.0032953917631167e+00 + -5.9507301937610775e+00 1.0867532078348496e-01 3.4857373007162984e+00 + -6.1675902591356504e+00 -5.8910608661175212e-01 3.7977217016281810e+00 + -6.2410558350537331e+00 -1.3101557357504756e+00 4.0028177051294396e+00 + -6.2050555694096889e+00 -2.0490683348123788e+00 4.1997871816071859e+00 + -6.1035403871279721e+00 -2.8276235876786870e+00 4.4849151583986675e+00 + -5.9854255576485969e+00 -3.6613305678180081e+00 4.8903392835555746e+00 + -5.8882126769122412e+00 -4.5389520993647627e+00 5.3783869869738243e+00 + -5.7948084654882699e+00 -5.4088842681009073e+00 5.8906833784319579e+00 + id 14257 + loc 5.9174340963363647e-01 1.1592964082956314e-01 405 + blend 0.0000000000000000e+00 + interp 4.5326523025932158e-01:3.2270283535116301e-01:1.0758963208170813e-01:3.8075697796753299e-01:8.8719373942831892e-01:4.5326069760701904e-01:1.3201729819439729e+00:4.2893240832600682e-01:1.9969976586728393e+00:3.3288200129920131e-01:2.4053770866768476e+00:3.4535079980464278e-01:3.0112301265950112e+00:4.1764703008894999e-01:3.8050779508970050e+00 + CVs 20 + 1.3736614944594772e-01 6.5503659409625353e-02 -3.0615638537628543e-02 + 2.8522751194078488e-01 1.1489882123720958e-01 -6.1786872254834244e-02 + 4.3543115090119011e-01 1.5008487053372746e-01 -1.0247961642698190e-01 + 5.8173996448779497e-01 1.6973328310825972e-01 -1.5502415245602286e-01 + 7.2020712139605370e-01 1.7275002756875879e-01 -2.1879044323800106e-01 + 8.4715464755744163e-01 1.5921053872200142e-01 -2.9255292684246875e-01 + 9.6055343454054887e-01 1.2999137369509350e-01 -3.7406018837293764e-01 + 1.0607958497873726e+00 8.6542026878170586e-02 -4.6031829397580348e-01 + 1.1497697096727266e+00 3.0387040210361649e-02 -5.4861162710571854e-01 + 1.2308022640164467e+00 -3.7252113837600187e-02 -6.3742786758876080e-01 + 1.3070089795295523e+00 -1.1613668978589287e-01 -7.2590985393008034e-01 + 1.3789178532485638e+00 -2.0760111014708593e-01 -8.0990776047987434e-01 + 1.4471258722254829e+00 -3.1262577909923350e-01 -8.8282561735936615e-01 + 1.5154513817359505e+00 -4.2854814095681060e-01 -9.4542986605868307e-01 + 1.5907762831736882e+00 -5.5042438004485561e-01 -1.0202021366147562e+00 + 1.6744071265121379e+00 -6.7597376957484645e-01 -1.1439449491912428e+00 + 1.7549690521059969e+00 -8.0198483607023840e-01 -1.3295680950374009e+00 + 1.8195132903238258e+00 -9.2235597604040842e-01 -1.5580492734937867e+00 + 1.8846459932795936e+00 -1.0476311197715855e+00 -1.6156912295464567e+00 + id 14258 + loc 3.7997078895568848e-01 8.8365846872329712e-01 404 + blend 0.0000000000000000e+00 + interp 4.5820505616197693e-01:3.3930698884457050e-01:6.2136580285254972e-01:3.6056947312299409e-01:1.0583398165714228e+00:3.1579983662712174e-01:2.0177591692455383e+00:3.5504618148561345e-01:2.7024939932793473e+00:4.5820047411141535e-01:3.2569537485629265e+00:3.7442968797595960e-01:3.9542851802642671e+00 + CVs 20 + -4.0818072105165151e-02 1.6548329464615930e-02 7.0510080059998481e-02 + -8.4340840867021039e-02 5.1831577086513127e-02 1.4114929080603675e-01 + -1.2590229106185918e-01 1.0981399144130341e-01 2.1516973813349008e-01 + -1.5816848021274024e-01 1.9291909016814596e-01 2.9752126068135187e-01 + -1.7327450045797041e-01 3.0172510637613670e-01 3.8788184377624491e-01 + -1.6336514144389727e-01 4.3413012793083200e-01 4.8480282043437883e-01 + -1.2228684926545492e-01 5.8509761690117601e-01 5.8651860709203196e-01 + -4.7888985047617127e-02 7.4722180742135169e-01 6.9235929916449501e-01 + 5.8832908467458478e-02 9.1406098615129916e-01 8.0498997349843759e-01 + 2.0145165327917519e-01 1.0824978503110403e+00 9.2682220767209766e-01 + 3.8999848853736274e-01 1.2489987531919842e+00 1.0511004693033512e+00 + 6.2820692656740518e-01 1.4064399106074825e+00 1.1634285744465527e+00 + 9.0318318397877773e-01 1.5491644574358108e+00 1.2560076551423491e+00 + 1.1977486482389703e+00 1.6785269839560382e+00 1.3313920942776849e+00 + 1.5073372335109634e+00 1.7980858047327148e+00 1.3858212503342369e+00 + 1.8344820325442603e+00 1.9072912144126954e+00 1.4037003907833205e+00 + 2.1747800867025222e+00 2.0010292073819542e+00 1.3767117931606503e+00 + 2.5169539687481781e+00 2.0740157540987219e+00 1.3152767715152747e+00 + 2.7440252681267632e+00 2.2304655931458988e+00 1.3297487219052218e+00 + id 14259 + loc 2.6112499833106995e-01 7.8404533863067627e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1071289684225674e-01:3.8429985035061626e-01:4.5324043867611119e-01:3.9594569890682046e-01:1.1315600711678480e+00:5.1070778971328834e-01:2.0124965088210391e+00:4.4439342332860055e-01:2.5636183159939532e+00:3.5493219061950837e-01:3.0782458407139899e+00:2.8195617682732010e-01:3.8683154824274064e+00 + CVs 20 + 1.2721648481405418e-01 4.6677015235132369e-01 1.3985972830158594e-01 + 2.7880936347452284e-01 8.7218049454395030e-01 1.8526587972389869e-01 + 4.4411875356455321e-01 1.2504605790121850e+00 1.8733218206863267e-01 + 6.2194124159374908e-01 1.5995137390647971e+00 1.5719640488905628e-01 + 8.1109806950151264e-01 1.8978016271147695e+00 8.6757456201374872e-02 + 1.0001112291284797e+00 2.1145663903948599e+00 -3.4335559460186627e-02 + 1.1691196690318257e+00 2.2255514073277460e+00 -2.0170437517943329e-01 + 1.3002583867158468e+00 2.2306151920731327e+00 -3.8931129656749552e-01 + 1.3868120467076335e+00 2.1498269123553664e+00 -5.6556052698169890e-01 + 1.4366539257537041e+00 2.0129757362542189e+00 -7.1044356086299887e-01 + 1.4661540519842842e+00 1.8468870699761779e+00 -8.2133472215645065e-01 + 1.4910549077299102e+00 1.6671455757105793e+00 -9.0576260170933487e-01 + 1.5231891275843359e+00 1.4799308424238209e+00 -9.7074019704993464e-01 + 1.5703202649451156e+00 1.2891254613503258e+00 -1.0147463521006954e+00 + 1.6313787408528375e+00 1.1088624383669412e+00 -1.0118699046067823e+00 + 1.6949715001875347e+00 9.9491456068834516e-01 -9.1192291878571274e-01 + 1.7604170233181697e+00 1.0076199662179004e+00 -7.6013413752612169e-01 + 1.8460841526194567e+00 9.9651116777008564e-01 -6.6887157297957056e-01 + 1.9500394941963382e+00 7.8283786871454386e-01 -5.7447202201453174e-01 + id 14260 + loc 9.6076607704162598e-02 6.5847194194793701e-01 402 + blend 0.0000000000000000e+00 + interp 3.6446923162690442e-01:3.0079257762962247e-01:7.4045516702424241e-01:3.6446558693458819e-01:1.2704484449863189e+00:2.7920794116392128e-01:1.9768598150352328e+00:3.4775646542678917e-01:2.9614656065700746e+00:2.7327767911835493e-01:3.8532044813340378e+00 + CVs 20 + -3.3325685933645002e-02 3.1710471458371298e-01 -1.0594260537411647e-01 + -8.9222471443324292e-02 6.3549287981375757e-01 -2.1822595887980689e-01 + -1.3422705036579857e-01 9.6981258665394188e-01 -3.5334659421419590e-01 + -1.4979074286013777e-01 1.3143953380711344e+00 -5.2179185603119471e-01 + -1.4006350691401009e-01 1.6542307818085122e+00 -7.3096841785179101e-01 + -1.1582204842403876e-01 1.9746089317020823e+00 -9.8368052264466477e-01 + -9.0431527654972643e-02 2.2646335973352043e+00 -1.2780022615783020e+00 + -7.8034793694519378e-02 2.5149625134096225e+00 -1.6075071905483895e+00 + -9.5049565935393932e-02 2.7179557463300696e+00 -1.9644814258699255e+00 + -1.5316770509608180e-01 2.8647856395090479e+00 -2.3435893579192868e+00 + -2.4564523365940305e-01 2.9380725124018108e+00 -2.7344265402051366e+00 + -3.5302667167162771e-01 2.9155956993211642e+00 -3.1077345394452984e+00 + -4.6402509887856336e-01 2.7901655614103955e+00 -3.4165746275245263e+00 + -5.8320620931674538e-01 2.5880525028614256e+00 -3.6237734047644223e+00 + -7.2187537469363894e-01 2.3658424757362098e+00 -3.7184200953192068e+00 + -8.8313716682846011e-01 2.1827854608375681e+00 -3.7157595933943064e+00 + -1.0566419683076818e+00 2.0733832173902829e+00 -3.6477645463848587e+00 + -1.2354137499868045e+00 2.0369111479050037e+00 -3.5474264476719055e+00 + -1.6034264542444414e+00 2.0133522072854708e+00 -3.4961190152627148e+00 + id 14261 + loc 4.9525365233421326e-01 2.5602564215660095e-01 396 + blend 0.0000000000000000e+00 + interp 3.6703364564826052e-01:3.4073746513637682e-01:4.7787629596809378e-02:2.7314396729727958e-01:1.0719367179280410e+00:3.6702997531180404e-01:1.9278554513394925e+00:3.6637057543151946e-01:2.1675403342286228e+00:2.7997613543143868e-01:3.1898848248764748e+00 + CVs 20 + -3.1038800594570098e-01 2.0666571104718789e-01 -6.7747304656298379e-01 + -5.8521072648156358e-01 2.9150078090958409e-01 -1.1451284218328606e+00 + -8.6279614509590086e-01 3.3633113528931891e-01 -1.5443346698145435e+00 + -1.1567667659656908e+00 3.7252626684291995e-01 -1.9273109729467941e+00 + -1.4572958611103530e+00 3.9686318483008998e-01 -2.2887951325012628e+00 + -1.7521130584936004e+00 4.0827958194017566e-01 -2.6237016751861275e+00 + -2.0309034809120430e+00 4.0955638056598898e-01 -2.9319302795224123e+00 + -2.2869771017799394e+00 4.0494438389670573e-01 -3.2218602884711904e+00 + -2.5114657877748372e+00 3.9597834591743131e-01 -3.5071192162483031e+00 + -2.6923971063889964e+00 3.7951730445361909e-01 -3.8019857928200707e+00 + -2.8336189070227316e+00 3.4053958727975142e-01 -4.1188681008363623e+00 + -2.9603957409360242e+00 2.4893213581985085e-01 -4.4581204725674333e+00 + -3.0893383826023291e+00 7.8937462710300776e-02 -4.8059919377507887e+00 + -3.2135792274973145e+00 -1.7741857443896913e-01 -5.1480624147702123e+00 + -3.3263773247301405e+00 -5.1485920204096969e-01 -5.4722517194575975e+00 + -3.4360569967827388e+00 -9.1852105655122962e-01 -5.7634222732286373e+00 + -3.5453810595868243e+00 -1.3686523089524973e+00 -6.0033038717435865e+00 + -3.6342722907799212e+00 -1.8499984655466748e+00 -6.1740686033120511e+00 + -3.6477970895866796e+00 -2.3775601698007787e+00 -6.2220881621882285e+00 + id 14262 + loc 5.0770592689514160e-01 4.1374552249908447e-01 399 + blend 0.0000000000000000e+00 + interp 4.4614574287623132e-01:3.5047514252415163e-01:5.2445264103391720e-01:4.4614128141880260e-01:9.9843714475644796e-01:2.7843004924531889e-01:1.8320030925059405e+00:3.6520760623276893e-01:2.1550675089620737e+00:4.2381926089825711e-01:2.8607963121316260e+00:3.4799907223889592e-01:3.1893991664320533e+00:2.6779033851926010e-01:3.9777578777838993e+00 + CVs 20 + 1.0901073816262517e-01 2.6685069082887991e-01 2.1253316586221613e-01 + 2.1985335890214636e-01 5.2088742683089329e-01 4.1569064176185028e-01 + 3.1809502499990949e-01 7.5809466874506015e-01 6.2563749203308439e-01 + 4.0089583330887407e-01 9.7852089507043183e-01 8.4771213345125929e-01 + 4.7615091002983806e-01 1.1851345193426501e+00 1.0763152560932001e+00 + 5.5189329116498331e-01 1.3813016492274324e+00 1.3052405245906511e+00 + 6.3273706914292471e-01 1.5692512661552134e+00 1.5320462058407192e+00 + 7.2046720345687199e-01 1.7507582947972367e+00 1.7573899219530866e+00 + 8.1844560953165191e-01 1.9273045892845531e+00 1.9847050344768840e+00 + 9.3464438139746742e-01 2.0976690461195404e+00 2.2214582363867947e+00 + 1.0771616900352285e+00 2.2462248145588064e+00 2.4766259078135477e+00 + 1.2424331682387397e+00 2.3267792994988881e+00 2.7399161538979322e+00 + 1.4104170858595304e+00 2.2992797707421730e+00 2.9695784411594617e+00 + 1.5641214383126245e+00 2.1633017961911691e+00 3.1235200320562511e+00 + 1.7062821335940295e+00 1.9230330137375116e+00 3.1767829145442827e+00 + 1.8877122759499605e+00 1.5788285504944755e+00 3.1512756184710700e+00 + 2.2050452420748092e+00 1.1332423463383134e+00 3.1273904171079456e+00 + 2.6550700062140868e+00 6.3580423708866007e-01 3.2719006582332728e+00 + 2.7137758336598123e+00 5.0845728235748588e-01 3.5072836220786496e+00 + id 14263 + loc 3.8881683349609375e-01 3.6734366416931152e-01 378 + blend 0.0000000000000000e+00 + interp 4.9652243462659634e-01:3.0312784467641452e-01:2.0297450879497037e-01:4.1275120004587063e-01:1.0144519161608634e+00:2.9972973321299323e-01:2.0004908210084178e+00:4.2098312251938602e-01:2.5440416414232354e+00:3.0993700519389039e-01:2.9994876755449180e+00:4.9651746940225011e-01:3.7832384564552983e+00 + CVs 20 + 8.4155263855476461e-02 3.8585474197573155e-01 -2.9467242985687264e-01 + 1.4432598125839030e-01 7.4394233429351997e-01 -5.6192407229714925e-01 + 2.0569471546150875e-01 1.0891989781714990e+00 -8.4300727992352664e-01 + 2.8711082613032113e-01 1.4326408802526762e+00 -1.1515749875416581e+00 + 4.0921462667742148e-01 1.7818029560817410e+00 -1.4852100380175075e+00 + 6.0005603935795715e-01 2.1311118041497643e+00 -1.8482022844822918e+00 + 8.7947907504544498e-01 2.4466879962966002e+00 -2.2391873200752883e+00 + 1.2500609687544384e+00 2.6867367397005513e+00 -2.6431730283172530e+00 + 1.7017349541826896e+00 2.8207097357090403e+00 -3.0389605488462905e+00 + 2.2107358481098438e+00 2.8304838902774572e+00 -3.4090377841814048e+00 + 2.7398265002395985e+00 2.7080762540641947e+00 -3.7464661108793558e+00 + 3.2402834153439528e+00 2.4546899998229019e+00 -4.0416325670209767e+00 + 3.6559474098859193e+00 2.0906732464703777e+00 -4.2686593608442553e+00 + 3.9448583897215217e+00 1.6675218506206262e+00 -4.4038561583039435e+00 + 4.1202657635231912e+00 1.2335501940517082e+00 -4.4642476388636174e+00 + 4.2462937714921374e+00 7.9458400330493895e-01 -4.4989743307441117e+00 + 4.3891783675282552e+00 3.4064002221376732e-01 -4.5585491631021675e+00 + 4.5519662734550641e+00 -9.7220297705819192e-02 -4.6744523513140042e+00 + 4.6196643510880131e+00 -3.7545542855076830e-01 -4.7943393166356003e+00 + id 14264 + loc 3.1027171015739441e-01 6.7789143323898315e-01 393 + blend 0.0000000000000000e+00 + interp 4.2226282998607761e-01:3.2909397617621572e-01:1.1543109915263972e-02:3.4841966125757712e-01:9.6298398970019339e-01:4.2225860735777776e-01:1.1650776997157819e+00:3.4056045060527873e-01:1.8953770390276847e+00:3.3567446685455204e-01:2.2715716482621064e+00:3.3534054833506510e-01:2.9574532158536417e+00:3.9177620649134282e-01:3.4682538194491590e+00 + CVs 20 + -3.2619123599980188e-01 3.6129522408767806e-01 -2.0044666998188365e-01 + -6.3540258865570898e-01 7.1868588712426729e-01 -4.1502743548143750e-01 + -9.3084185653615248e-01 1.0738450522722265e+00 -6.4811655170204274e-01 + -1.2226430344518753e+00 1.4121366577174077e+00 -8.9946468191948814e-01 + -1.5215094130892193e+00 1.7144739409778684e+00 -1.1605916695140723e+00 + -1.8311051993282010e+00 1.9683573270114554e+00 -1.4172803324925594e+00 + -2.1438462759298615e+00 2.1650367685554830e+00 -1.6520714227294486e+00 + -2.4433224433318697e+00 2.2997361901689342e+00 -1.8487655992860113e+00 + -2.7188853326118330e+00 2.3811495578259660e+00 -1.9969237269417566e+00 + -2.9821003702648645e+00 2.4258564508902425e+00 -2.0903550235856114e+00 + -3.2551620383325255e+00 2.4558585199487970e+00 -2.1317087792540601e+00 + -3.5583933180901859e+00 2.5005099877305343e+00 -2.1410824608464560e+00 + -3.9142312932481560e+00 2.5709103004019020e+00 -2.1397177414440685e+00 + -4.3519013797683783e+00 2.6340362292378137e+00 -2.1341362161903854e+00 + -4.8801183062911306e+00 2.6323551234637392e+00 -2.1438936927319006e+00 + -5.4444194915571771e+00 2.5348010515712511e+00 -2.2152323015702877e+00 + -5.9657105092231069e+00 2.3730772680884304e+00 -2.3459684308635240e+00 + -6.4588668036490517e+00 2.1853301178630744e+00 -2.4501415688398023e+00 + -7.0733594254766485e+00 1.8907930213223774e+00 -2.3917784311505952e+00 + id 14265 + loc 8.7343985214829445e-03 4.9664059281349182e-01 401 + blend 0.0000000000000000e+00 + interp 3.5180714655397316e-01:3.5180362848250762e-01:5.2797177380831761e-01:3.3352960868450615e-01:1.0080240726589129e+00:2.6159423810734272e-01:2.0179981455524718e+00:1.4901853495160350e-01:2.9530824390883783e+00:2.9637425321677185e-01:3.7302662877579809e+00 + CVs 20 + -2.6816039081666015e-01 2.5255666391943249e-01 9.0928577790198917e-02 + -5.4435935443817951e-01 5.1420113036723758e-01 1.6111280382212634e-01 + -8.3692327712887737e-01 7.7745425395081436e-01 2.2736564305857973e-01 + -1.1511155530676176e+00 1.0337466455267474e+00 3.0450800161271985e-01 + -1.4886647452734445e+00 1.2730155818435582e+00 4.0808708583240944e-01 + -1.8460179674565049e+00 1.4831225957171168e+00 5.5738559486343497e-01 + -2.2118190545421887e+00 1.6494988543271516e+00 7.6810287405628652e-01 + -2.5692391754020174e+00 1.7586338058696303e+00 1.0429090589668042e+00 + -2.9010676958649806e+00 1.8023364941687858e+00 1.3681673690740537e+00 + -3.1955606674330066e+00 1.7812577948368205e+00 1.7180088221077043e+00 + -3.4479776331250105e+00 1.7063789439141703e+00 2.0693947000945729e+00 + -3.6584431128326758e+00 1.5887626371053356e+00 2.4131183888019576e+00 + -3.8276309933100658e+00 1.4333977709248082e+00 2.7553068396128193e+00 + -3.9529216230182231e+00 1.2370151553756275e+00 3.1149151100345982e+00 + -4.0209159672472499e+00 9.9746426054412196e-01 3.5065515479812377e+00 + -4.0056709085962519e+00 7.3395517679277333e-01 3.9248802908010894e+00 + -3.8841212047682481e+00 4.8140483640080456e-01 4.3541885971717953e+00 + -3.6742693742876198e+00 3.0705570963690332e-01 4.7440493096319800e+00 + -3.5229656776121341e+00 3.6423363262016384e-01 4.9280339378529927e+00 + id 14266 + loc 1.1215522140264511e-01 8.8674455881118774e-01 381 + blend 0.0000000000000000e+00 + interp 8.3447628521463457e-01:4.4046581341708824e-01:4.8890150014414291e-01:3.6896801949465735e-01:9.9967881201105679e-01:6.3493984908272227e-01:1.6919470061489303e+00:4.2789323542000318e-01:3.5551498238836712e+00:8.3446794045178241e-01:3.6199649041109483e+00:2.6114675117157565e-01:3.9872599226376138e+00 + CVs 20 + 1.1516315239696329e+00 1.2873401952740596e-01 -7.0595558416215343e-01 + 1.8688293444285655e+00 9.4121469604457969e-02 -1.1954967164454131e+00 + 2.4775903076092720e+00 1.1957784432322816e-02 -1.6198091675986068e+00 + 3.0990151785489819e+00 -7.7122091153048911e-02 -2.0339272890036462e+00 + 3.7330495033394504e+00 -1.8277450497089259e-01 -2.4373253147819969e+00 + 4.3772410931206460e+00 -3.1761606984253177e-01 -2.8277578418151541e+00 + 5.0168145105486950e+00 -4.9701058116477825e-01 -3.1959934806717527e+00 + 5.6175234886169489e+00 -7.2909761755311275e-01 -3.5227713292711704e+00 + 6.1482652773654722e+00 -1.0049742736014218e+00 -3.7933080152251595e+00 + 6.5955850053964742e+00 -1.3027927879684671e+00 -4.0086985660101115e+00 + 6.9640094997152211e+00 -1.5985217799944869e+00 -4.1832536709941284e+00 + 7.2730866099244729e+00 -1.8795464164062945e+00 -4.3371903888758769e+00 + 7.5422226641071815e+00 -2.1635774939709975e+00 -4.4831584196064522e+00 + 7.7522965701542690e+00 -2.4971203738490226e+00 -4.6102397097372760e+00 + 7.8603992758354577e+00 -2.9051673812772396e+00 -4.7112376609074129e+00 + 7.8793728132978877e+00 -3.3748771883595685e+00 -4.8044569202306384e+00 + 7.8763423140121152e+00 -3.8723714723035974e+00 -4.8902165291972617e+00 + 7.9084174779944698e+00 -4.3526677933672095e+00 -4.9867125909216137e+00 + 7.9475136803677948e+00 -4.7750434312586307e+00 -5.2866176483439498e+00 + id 14267 + loc 2.7110281586647034e-01 9.3149334192276001e-01 379 + blend 0.0000000000000000e+00 + interp 5.2317651496908191e-01:2.7638233095987563e-01:2.4999943561367921e-02:3.7244978435807469e-01:7.4651734880767651e-01:3.8179828054501003e-01:1.0044340949357398e+00:3.9343047940805925e-01:1.2123289563251611e+00:2.5574403377137123e-01:1.8964330522823021e+00:2.0690259472709857e-01:2.5759134049387260e+00:5.2317128320393225e-01:3.1633928748388573e+00 + CVs 20 + -1.7220239458724687e-01 2.0308246000531255e-01 2.4036074136974581e-01 + -3.2582690395988195e-01 3.6794957442325793e-01 4.7385981978937947e-01 + -4.6772071230092299e-01 4.7375117741228562e-01 7.3314983007489931e-01 + -5.9550682129143984e-01 5.2910740976781190e-01 1.0746468937109026e+00 + -6.8921645431779766e-01 5.8119912138223206e-01 1.4743693838174039e+00 + -7.6081234195555680e-01 6.7798407849317555e-01 1.8837128244725638e+00 + -8.5826360387710521e-01 8.5337566504313456e-01 2.2680274993264469e+00 + -9.9884035166662055e-01 1.1166839220406202e+00 2.5909147272891717e+00 + -1.1775975360278319e+00 1.4541905425284081e+00 2.8215071523438642e+00 + -1.3897475368714522e+00 1.8425880889814226e+00 2.9339045543798790e+00 + -1.6253636069485979e+00 2.2511864088922939e+00 2.9344450482943119e+00 + -1.8760305042282037e+00 2.6415730033437850e+00 2.8578751181065729e+00 + -2.1504742503995731e+00 2.9694110439049175e+00 2.7362311244517317e+00 + -2.4529008758652884e+00 3.1888048601219809e+00 2.5819859080544560e+00 + -2.7682369398878754e+00 3.2698564926021740e+00 2.3819455237663019e+00 + -3.1227206482706151e+00 3.1438250107497980e+00 2.1114895464531451e+00 + -3.5040803582038693e+00 2.6808762989163664e+00 1.8968416307957787e+00 + -3.7808791646360489e+00 2.0174149081961854e+00 1.9847565671723550e+00 + -3.9684279092680770e+00 1.5448876467817063e+00 2.1086910450164638e+00 + id 14268 + loc 4.0479654073715210e-01 1.8376165628433228e-01 395 + blend 0.0000000000000000e+00 + interp 4.9337392104434719e-01:4.9336898730513679e-01:1.9770539885241467e-02:2.9293075284192416e-01:6.0270847238460501e-01:3.7426312031203640e-01:1.0366587434158889e+00:4.4041397549328637e-01:1.6791577199112711e+00:3.1085214141788392e-01:2.1593273063087493e+00:2.7334149056071444e-01:3.0363446584104494e+00 + CVs 20 + -3.1534100033434537e-01 1.8927321595363689e-01 -3.1895743621007333e-01 + -5.7732837715326690e-01 3.4281526293457298e-01 -6.3529666831311560e-01 + -8.2696032316444623e-01 4.6974125639189090e-01 -9.5484671171055335e-01 + -1.0755689771535115e+00 5.6898427066757518e-01 -1.2796502286191698e+00 + -1.3194982584138937e+00 6.3358472681504352e-01 -1.6068610705737298e+00 + -1.5580836220252257e+00 6.5850386118797855e-01 -1.9319082565545225e+00 + -1.7902160343400504e+00 6.3957080580828962e-01 -2.2483176180251050e+00 + -2.0084138330797838e+00 5.7119647844915500e-01 -2.5464483265862370e+00 + -2.2021808907026177e+00 4.4897652036723645e-01 -2.8146745606250692e+00 + -2.3659668922131125e+00 2.7375191606076665e-01 -3.0418215521877214e+00 + -2.4978456201459034e+00 5.3457309987837265e-02 -3.2194533906875806e+00 + -2.5958087956494231e+00 -1.9754596722705076e-01 -3.3481619078407494e+00 + -2.6599470954787305e+00 -4.6518990654610426e-01 -3.4394544089879098e+00 + -2.6928916832491137e+00 -7.3982968827679096e-01 -3.5062891749291087e+00 + -2.6973599000920396e+00 -1.0135311571682093e+00 -3.5572818125415404e+00 + -2.6692041892205287e+00 -1.2717260214134229e+00 -3.5939583594310114e+00 + -2.6010431582898033e+00 -1.4918416969589465e+00 -3.6152250381516109e+00 + -2.5035429681457435e+00 -1.6701380029737367e+00 -3.6286083973038403e+00 + -2.4840623767922465e+00 -1.9923985631605929e+00 -3.6938688312300396e+00 + id 14269 + loc 6.2024158239364624e-01 6.0344249010086060e-01 405 + blend 0.0000000000000000e+00 + interp 3.8298339645424362e-01:3.2213447421130714e-01:3.7480797910349417e-01:3.8297956662027910e-01:1.0288067311258886e+00:2.9492843659711671e-01:1.8603716425196262e+00:3.7746321811261191e-01:2.2383287550077000e+00:3.6306689641907558e-01:2.9666461285769739e+00:3.1933695214969721e-01:3.6455156577377417e+00 + CVs 20 + 1.0771696903674950e-01 2.6337681149326508e-01 -6.8903820337962080e-02 + 1.0965077305513748e-01 4.6362267761490428e-01 -1.3494025631124937e-01 + 8.8955811882954372e-02 6.3561392401177597e-01 -1.8827217366012558e-01 + 6.5807284148478751e-02 8.1300316676484008e-01 -2.2071098610233364e-01 + 3.5631808950387589e-02 9.9659052432788964e-01 -2.1633740804634019e-01 + -3.9609035848394702e-03 1.1798352742076736e+00 -1.5417045138298058e-01 + -4.8212579001440270e-02 1.3408584346987160e+00 -1.8287894727294481e-02 + -8.2663613819431547e-02 1.4503524902066953e+00 1.8073803022565149e-01 + -9.3450868334873705e-02 1.4987054276119829e+00 4.0850958496858392e-01 + -7.6015905759815428e-02 1.4978662148100981e+00 6.3913430213381006e-01 + -3.0714456363566733e-02 1.4585059323394405e+00 8.6632247488327563e-01 + 4.1639193333678715e-02 1.3808780333435495e+00 1.0913405238469538e+00 + 1.4282853323676031e-01 1.2643647866260215e+00 1.3107179363020853e+00 + 2.8000433489261572e-01 1.1257541167697118e+00 1.5133239043426729e+00 + 4.6351301989137456e-01 9.9723836744770233e-01 1.6917707852625294e+00 + 6.9932938648655152e-01 8.9967301462008031e-01 1.8460713912052638e+00 + 9.8445855119216008e-01 8.3295182293346881e-01 1.9762047911021314e+00 + 1.3059743726838089e+00 7.8944203149037318e-01 2.0859028288340578e+00 + 1.5994341269043457e+00 6.4438923532469738e-01 2.2874002820818458e+00 + id 14270 + loc 3.0855217576026917e-01 6.1939376592636108e-01 402 + blend 0.0000000000000000e+00 + interp 4.9646289679265138e-01:3.0959431844054813e-01:2.7673093065068766e-01:3.1541799321630326e-01:1.3026285213911455e+00:3.0463913984071433e-01:2.1891526036933415e+00:2.9465353107538589e-01:3.0263425661579015e+00:4.9645793216368345e-01:3.7938700933527980e+00 + CVs 20 + -7.4003271627539335e-02 3.3536065920999164e-01 -1.3040912311983807e-01 + -1.7260541318719522e-01 6.6851118470459536e-01 -2.6156386119913477e-01 + -2.5878363641045243e-01 1.0209881964614553e+00 -4.2530042163645781e-01 + -3.1043366286358798e-01 1.3855342554279060e+00 -6.3450778912258055e-01 + -3.3018574503001841e-01 1.7476646600727781e+00 -8.9156601237703914e-01 + -3.2068583943294915e-01 2.0921819980907195e+00 -1.1976577356399654e+00 + -2.7984631512006242e-01 2.4036454169573576e+00 -1.5534667381223914e+00 + -2.0766485724807660e-01 2.6663808382606353e+00 -1.9578645526748921e+00 + -1.1014143847922864e-01 2.8624087307185926e+00 -2.4094182072481312e+00 + 9.3727871895666892e-03 2.9689758981110987e+00 -2.8963945684460164e+00 + 1.5569290843216621e-01 2.9638589826347101e+00 -3.3884621582835655e+00 + 3.2917648247584053e-01 2.8347415578981261e+00 -3.8488971445095794e+00 + 5.1566001905047165e-01 2.5809243061608598e+00 -4.2510837408637823e+00 + 6.8596705771750155e-01 2.2043530752495140e+00 -4.5961649117323553e+00 + 7.8399841591913610e-01 1.6971412201727107e+00 -4.9134316658365442e+00 + 7.0546444500363881e-01 1.0575314009634498e+00 -5.2403198536774775e+00 + 2.9181233936114059e-01 3.5127005532353506e-01 -5.6103701428401420e+00 + -4.5823075891817855e-01 -1.8662457406547972e-01 -5.9645132027777628e+00 + -7.5288055175661084e-01 -4.4632572212672783e-01 -6.0509530584191875e+00 + id 14271 + loc 8.3322727680206299e-01 5.1724332571029663e-01 400 + blend 0.0000000000000000e+00 + interp 4.3549525375544074e-01:4.3549089880290320e-01:2.9826461206882260e-02:3.5875707435112164e-01:5.7468524126806830e-01:2.7815538692829128e-01:1.3143928099523687e+00:2.8794783694602616e-01:2.0042840268553843e+00:3.1896757753804250e-01:2.6551175073267785e+00:2.7959360548482931e-01:3.6643268620187861e+00 + CVs 20 + -1.3521256472437262e-01 1.9380217354493642e-01 -4.0494961963248222e-01 + -2.4299445656837659e-01 3.8476973358475647e-01 -8.1127995427893818e-01 + -3.2691912839310289e-01 5.6971446978094975e-01 -1.2248362849985481e+00 + -4.0003908750051786e-01 7.4417907630386149e-01 -1.6478992777743255e+00 + -4.6632438558954820e-01 9.0546094776975539e-01 -2.0758518822942529e+00 + -5.1834715974090284e-01 1.0555418896650932e+00 -2.5026421465216098e+00 + -5.4715660306181624e-01 1.1871577126989414e+00 -2.9256502309316748e+00 + -5.4963395280746641e-01 1.2778946847216992e+00 -3.3468894062728811e+00 + -5.2871462321580853e-01 1.3085449615021836e+00 -3.7657751513393807e+00 + -4.9026972011061137e-01 1.2748062875220854e+00 -4.1738888970043053e+00 + -4.4270455541253845e-01 1.1763752287793308e+00 -4.5591086111394592e+00 + -3.9478839271443589e-01 1.0100440391258829e+00 -4.9068653323196711e+00 + -3.4647147417337787e-01 7.8081665616851748e-01 -5.1952937239795833e+00 + -2.8890953995305685e-01 5.1166630646823563e-01 -5.4016214472610571e+00 + -2.2018480299230148e-01 2.3131875989263673e-01 -5.5168092160101070e+00 + -1.5525133896378979e-01 -4.2481224528665429e-02 -5.5487960488552792e+00 + -1.1661813247947930e-01 -2.9946586350754600e-01 -5.5224103120596082e+00 + -1.1538706070235370e-01 -5.2656236352491304e-01 -5.4910001441725731e+00 + -1.5262378283381375e-01 -6.9393278470971165e-01 -5.6540790780254184e+00 + id 14272 + loc 5.9557205438613892e-01 9.5080935955047607e-01 412 + blend 0.0000000000000000e+00 + interp 5.0363992705444560e-01:4.8312575278795672e-01:6.9094150389507947e-02:3.3503376529203877e-01:9.3505155102309334e-01:5.0363489065517508e-01:1.3841306679491745e+00:4.3324679739586086e-01:1.8720693678039351e+00:3.7708448095719949e-01:2.0895281151190788e+00:3.5023599771970382e-01:2.8950713170526026e+00:3.5937655801817719e-01:3.5045879110489428e+00 + CVs 20 + 8.1752119410835100e-01 2.1302617100613572e-01 -1.2906713859984242e-01 + 1.3276022726682108e+00 2.8831230495584770e-01 -2.5966426665961972e-01 + 1.7460024173028483e+00 2.9676621859101265e-01 -3.9940341728251655e-01 + 2.1798757906149500e+00 2.7162597745148809e-01 -5.5055431621916173e-01 + 2.6190762931088223e+00 2.0071653962035335e-01 -7.0945622736591041e-01 + 3.0538499626453612e+00 7.6879535906965280e-02 -8.6959784575814481e-01 + 3.4764122172238268e+00 -9.9262631750846264e-02 -1.0194061353738342e+00 + 3.8791873267979629e+00 -3.1979878633398562e-01 -1.1439401952414490e+00 + 4.2545199303057704e+00 -5.7281833225188339e-01 -1.2322660271540689e+00 + 4.5958303376376781e+00 -8.4321850040609725e-01 -1.2775819443375402e+00 + 4.8909931532095339e+00 -1.1074607941737353e+00 -1.2733921068021052e+00 + 5.1229091354516862e+00 -1.3366208754851665e+00 -1.2149572697059590e+00 + 5.3031536414451086e+00 -1.5298587655311366e+00 -1.1069805522833915e+00 + 5.4775219225718441e+00 -1.7315686955062939e+00 -9.6821538046179245e-01 + 5.6779307355643471e+00 -1.9798478462017697e+00 -8.1775813809830722e-01 + 5.9105152925240976e+00 -2.2804779828394954e+00 -6.6467716511413921e-01 + 6.1714988035164158e+00 -2.6356331646278104e+00 -5.2369684940377903e-01 + 6.4477373627267838e+00 -3.0449884250718329e+00 -4.1967639603978357e-01 + 6.7062008426694506e+00 -3.4874010972736098e+00 -3.7677974426993904e-01 + id 14273 + loc 5.4636424779891968e-01 9.8053731024265289e-02 1069 + blend 0.0000000000000000e+00 + interp 3.5428328014900823e-01:3.5427973731620677e-01:5.0241829896550150e-01:2.6571985571102913e-01:1.2098500340362028e+00:3.4069742918668494e-01:2.3030891892912471e+00:2.7780465003231170e-01:3.0113321667052446e+00:2.9838713046052184e-01:3.9686893680395015e+00 + CVs 20 + 3.2512788484865163e-02 3.0275770109718325e-01 1.8915213027650596e-01 + 1.3812553016932738e-02 5.9521384547134926e-01 3.8446865568422783e-01 + -4.5275253858185593e-02 8.7710094988333775e-01 5.6607391032307808e-01 + -1.5802568977818476e-01 1.1393515706419879e+00 7.2429965546688446e-01 + -3.1492904627700224e-01 1.3815612154214909e+00 8.5472783460345192e-01 + -4.5871047375464868e-01 1.6363238152569064e+00 9.6202528879430171e-01 + -5.2303236127782848e-01 1.9269257625930072e+00 1.0548781284908779e+00 + -4.8677859539397805e-01 2.2376961306104901e+00 1.1524824077708622e+00 + -3.5629131736142550e-01 2.5373324094809497e+00 1.2895570786815060e+00 + -1.3259223798339592e-01 2.7530629340212855e+00 1.5042088272406615e+00 + 1.4464263655977239e-01 2.7641518385360917e+00 1.7931161538070644e+00 + 3.7571834952978356e-01 2.5347883377140188e+00 2.0692638148674409e+00 + 5.0082600537293853e-01 2.1623111803737265e+00 2.2693102485756311e+00 + 5.0880647768085918e-01 1.7392809306346035e+00 2.4092239500258170e+00 + 4.0660569871384311e-01 1.3126817735791270e+00 2.5164401784205706e+00 + 1.9127839543046965e-01 8.9405410347395975e-01 2.5564968118157561e+00 + -1.4872118994784467e-01 5.2380477686573390e-01 2.4506322629743011e+00 + -5.5800067368087880e-01 2.7055282096981687e-01 2.2246865291091877e+00 + -7.5339219613543362e-01 -1.1917370163134483e-01 2.2234007176007666e+00 + id 14274 + loc 1.7894548177719116e-01 3.5507187247276306e-01 404 + blend 0.0000000000000000e+00 + interp 4.7901188959284408e-01:3.9294821131880658e-01:3.4209202299017738e-01:2.9966502860273525e-01:9.9117858146523041e-01:4.1989700702966071e-01:1.4407941574266887e+00:3.3113607036152515e-01:2.0490645225376758e+00:4.7900709947394815e-01:2.9993195475719370e+00:3.7880283382446639e-01:3.7994499285392016e+00 + CVs 20 + -9.7101244153417782e-02 1.6940774947070167e-01 -1.4079922544271198e-01 + -1.8145284228731384e-01 3.4243692570798423e-01 -2.8038794446675858e-01 + -2.7441008781524789e-01 5.1991869100940935e-01 -4.1747965354999944e-01 + -3.8484403552577373e-01 7.0412953170400316e-01 -5.4874448066106618e-01 + -5.2068726147986344e-01 8.9641977343327861e-01 -6.6691296631029962e-01 + -6.8999841956732211e-01 1.0957537287158512e+00 -7.6258191076434834e-01 + -8.9935127389813907e-01 1.2975053731671586e+00 -8.2523581792429046e-01 + -1.1520514748069333e+00 1.4939060593259272e+00 -8.4344017078090805e-01 + -1.4448254287021891e+00 1.6745762613474766e+00 -8.0701180208475587e-01 + -1.7660737842174210e+00 1.8285134959220215e+00 -7.1148247251979679e-01 + -2.0986078003273994e+00 1.9475479793854742e+00 -5.6200634161136287e-01 + -2.4270368969736480e+00 2.0285649361562386e+00 -3.7060044705514361e-01 + -2.7430016786014932e+00 2.0716344352397429e+00 -1.4618105904108880e-01 + -3.0406530512243419e+00 2.0782496740549092e+00 1.0762668489458216e-01 + -3.3125709083960384e+00 2.0527620074490152e+00 3.8862022309771938e-01 + -3.5494335722981449e+00 2.0035454571579279e+00 6.9663682680097572e-01 + -3.7404494909187154e+00 1.9401648397053433e+00 1.0369703804991897e+00 + -3.8722507245746476e+00 1.8647514434853503e+00 1.4239067148423952e+00 + -4.0663326800782444e+00 1.8187338485847171e+00 1.5023073538012297e+00 + id 14275 + loc 1.7945030331611633e-01 3.5446795821189880e-01 396 + blend 0.0000000000000000e+00 + interp 4.0396988969272163e-01:3.3821726598733814e-01:4.1384136941214167e-01:3.1819321247601634e-01:1.0915893478861252e+00:3.0787333815462803e-01:1.9979869617441415e+00:4.0396584999382473e-01:2.6250743047633902e+00:2.7789381033630722e-01:3.0157806923522528e+00:2.9127380444606382e-01:3.8565738857316827e+00 + CVs 20 + -2.5587985050892592e-01 2.1489015416018126e-01 -6.7481929822039743e-01 + -4.7603967413166537e-01 2.8252507627597789e-01 -1.1519128598909292e+00 + -6.8695854612086105e-01 2.9495933473843383e-01 -1.5770324117424777e+00 + -8.9437678563727441e-01 2.9245033676723248e-01 -2.0056115866363151e+00 + -1.0904628841414739e+00 2.7839892678487221e-01 -2.4360549978763451e+00 + -1.2696924636738851e+00 2.5714668989666434e-01 -2.8675864780334486e+00 + -1.4309772362693269e+00 2.3306535957266317e-01 -3.3008886541195595e+00 + -1.5755326794177504e+00 2.0567236287578883e-01 -3.7396045930541497e+00 + -1.7027022323723739e+00 1.6486322988053503e-01 -4.1893793238541788e+00 + -1.8159381213872621e+00 9.8493282933852733e-02 -4.6546648181801276e+00 + -1.9330274798556455e+00 -6.8907088738738853e-03 -5.1364178903304074e+00 + -2.0760788828283405e+00 -1.6944309712425420e-01 -5.6269643720851370e+00 + -2.2480935549642762e+00 -3.9858474606810157e-01 -6.1176664378927104e+00 + -2.4368276574203986e+00 -6.9475222718127627e-01 -6.6020359257329266e+00 + -2.6310059900464950e+00 -1.0549895387920025e+00 -7.0712834073042750e+00 + -2.8259997504639318e+00 -1.4761931045526504e+00 -7.5114496944129154e+00 + -3.0143604730908353e+00 -1.9517415425653222e+00 -7.9042374735380756e+00 + -3.1786225333999560e+00 -2.4541585176193981e+00 -8.2321395506034829e+00 + -3.2722555562394184e+00 -2.8133014280536828e+00 -8.4749326438319610e+00 + id 14276 + loc 5.6483244895935059e-01 3.5291835665702820e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4974431569512685e-01:3.7963285957631782e-01:4.2426709788246530e-01:3.9805799827390226e-01:9.6190655809705838e-01:2.9934236668885661e-01:1.8327850014601581e+00:4.4973981825196990e-01:2.2193587577263671e+00:3.2670839684985253e-01:3.0103188555269793e+00:3.6713754375789609e-01:3.9386738054525465e+00 + CVs 20 + 5.7739096478266846e-02 4.0380917393774352e-01 -6.2330490092783158e-02 + 4.6110359292347497e-02 7.4643067970592036e-01 -7.9165633800147961e-02 + 5.9792373899819617e-04 1.0521931414223962e+00 -7.1365041535341123e-02 + -6.5700732978536902e-02 1.3287710861027073e+00 -4.8945410487815533e-02 + -1.5342877101553187e-01 1.5741845368148750e+00 -1.5307330267638086e-02 + -2.6058938902785139e-01 1.7894205589095717e+00 2.4863318673122969e-02 + -3.8694245935715171e-01 1.9785534958182365e+00 7.4571793363415018e-02 + -5.3568694770262903e-01 2.1432427337144349e+00 1.4605685735888718e-01 + -7.0818527496749062e-01 2.2775605040037257e+00 2.5120138973392758e-01 + -9.0077007296594136e-01 2.3682304085573405e+00 3.9546980374520879e-01 + -1.1047564656518487e+00 2.4008390745201962e+00 5.7482089287464710e-01 + -1.3089476293275832e+00 2.3671489654280062e+00 7.7673418070619904e-01 + -1.5028233640664914e+00 2.2677808357994227e+00 9.8451799378026172e-01 + -1.6788304697961065e+00 2.1139590855124188e+00 1.1814287476988743e+00 + -1.8366080818035821e+00 1.9328026530627320e+00 1.3584150122509389e+00 + -1.9827628258859571e+00 1.7769219796599347e+00 1.5207767225759397e+00 + -2.1189951008895735e+00 1.6737337514797421e+00 1.6751581660919475e+00 + -2.2279784530930700e+00 1.5114869031301159e+00 1.7181769223820247e+00 + -2.2882942739806240e+00 1.1237627555410148e+00 1.4348124747001822e+00 + id 14277 + loc 5.0469809770584106e-01 7.3097193241119385e-01 399 + blend 0.0000000000000000e+00 + interp 4.4734043310146338e-01:3.4107546894380292e-01:6.1677697775471618e-01:4.2718730709772712e-01:1.1783236847144432e+00:4.4733595969713236e-01:1.9603568166809895e+00:3.4159855987416088e-01:2.4224165712988439e+00:4.1247029768207710e-01:3.0174131240694839e+00:3.6422110276208414e-01:3.8038833927901106e+00 + CVs 20 + -2.4206953038779727e-01 2.9077163100644327e-01 -1.5671373496344476e-01 + -4.7135783807810783e-01 5.8256422397603369e-01 -3.4014903234650506e-01 + -7.0858056272773295e-01 8.6611905742194761e-01 -5.4535082311786842e-01 + -9.6883745592296511e-01 1.1314462866797761e+00 -7.6979892668420513e-01 + -1.2607784122990742e+00 1.3636873996700272e+00 -1.0128186884223196e+00 + -1.5918766453385773e+00 1.5411902349561275e+00 -1.2713215109095095e+00 + -1.9650559212002567e+00 1.6406596757377818e+00 -1.5389982273237697e+00 + -2.3779073541453526e+00 1.6500894766094776e+00 -1.8044275641320724e+00 + -2.8252838539186698e+00 1.5670487288058661e+00 -2.0582990596247694e+00 + -3.2899632134447261e+00 1.3726392783069441e+00 -2.2988821912261037e+00 + -3.7350273472852482e+00 1.0502331107384228e+00 -2.5156730991797831e+00 + -4.1505928877848310e+00 6.4930000580744995e-01 -2.6895797582111571e+00 + -4.5752196921799637e+00 2.4472417274284086e-01 -2.8146630581147161e+00 + -5.0184591954767264e+00 -1.5436869869247496e-01 -2.8878146947612024e+00 + -5.4520237919043462e+00 -5.7387660705966881e-01 -2.9122368489348629e+00 + -5.9088192001570485e+00 -9.2881544375880365e-01 -2.9162935879721648e+00 + -6.4968372049102552e+00 -9.4529611039682293e-01 -2.9449002251171010e+00 + -7.0864234147175260e+00 -4.9315755497194425e-01 -3.0055600722191307e+00 + -7.6298046335477903e+00 -6.0001130725911445e-01 -3.1745711755125963e+00 + id 14278 + loc 4.3872077018022537e-02 6.8724775314331055e-01 381 + blend 0.0000000000000000e+00 + interp 4.4565587422340636e-01:4.4565141766466415e-01:6.3105978549818920e-03:2.8623197880517215e-01:9.2155405795976586e-01:2.3824661876308231e-01:1.5254219537673477e+00:2.8259220070439794e-01:2.3799836046986269e+00:3.0753433272491182e-01:3.1538726184284185e+00 + CVs 20 + 1.0506626516392945e+00 1.6603786127498776e-01 -6.2892429927986004e-01 + 1.7492788822939418e+00 1.6101066250433776e-01 -1.0676017917953762e+00 + 2.3584105925160381e+00 1.0749069199288658e-01 -1.4504149200944996e+00 + 2.9881786487026809e+00 6.4027378321606931e-02 -1.8335892166027530e+00 + 3.6314535649746031e+00 4.1469259124865654e-02 -2.2202716901720394e+00 + 4.2841069920911705e+00 3.6564320527531335e-02 -2.6194014442100642e+00 + 4.9458064216588156e+00 2.4693906895796092e-02 -3.0410677819047121e+00 + 5.6176119293373503e+00 -3.8393184856917784e-02 -3.4852642403569698e+00 + 6.2927207712488915e+00 -2.0470123282238162e-01 -3.9350136010227752e+00 + 6.9458541292530835e+00 -5.1577561171888431e-01 -4.3600591275606257e+00 + 7.5349285560493531e+00 -9.8909815017550273e-01 -4.7270070425405848e+00 + 8.0133674422320311e+00 -1.6122841234308760e+00 -5.0084883802002258e+00 + 8.3449673398841195e+00 -2.3355781869554404e+00 -5.1941055439447137e+00 + 8.5243345688284435e+00 -3.0806459605840528e+00 -5.2958586321211989e+00 + 8.5738292673295575e+00 -3.7890728548218728e+00 -5.3101021918642024e+00 + 8.5410329418353061e+00 -4.4450710854566715e+00 -5.2543241002463592e+00 + 8.4694830481571302e+00 -5.0693698307424953e+00 -5.1714551303270992e+00 + 8.3833765759267322e+00 -5.6993843757584957e+00 -5.1207885346992681e+00 + 8.2839756706326035e+00 -6.3002791353501255e+00 -5.1095449359442799e+00 + id 14279 + loc 4.7629299759864807e-01 3.6547169089317322e-01 405 + blend 0.0000000000000000e+00 + interp 3.3224153222347758e-01:3.2909500445612755e-01:4.0465917178744704e-04:2.9518372633450285e-01:6.3774270271325972e-01:3.1998081623723135e-01:1.0849059478716585e+00:3.0997550759250886e-01:2.0003792797234010e+00:3.3139410716068546e-01:2.7481935990959760e+00:3.3223820980815538e-01:3.1568095391166646e+00 + CVs 20 + 8.5891262038419916e-02 2.4716130120688359e-01 -3.7508962211328670e-02 + 1.7917534532884963e-01 4.6534671031933100e-01 1.2490443738485985e-02 + 2.9782341877049595e-01 6.4904755238249789e-01 5.7240699969431652e-02 + 4.4803794154924920e-01 8.0701606013709093e-01 1.0025890285925410e-01 + 6.3078912846323842e-01 9.2815877072466080e-01 1.3606503817674226e-01 + 8.4029581751712323e-01 1.0057593471396806e+00 1.5430746698820053e-01 + 1.0647475388767131e+00 1.0434514865601248e+00 1.4676405599744680e-01 + 1.2927931911486910e+00 1.0530150913411174e+00 1.1152634942367801e-01 + 1.5182086578038450e+00 1.0477737764570942e+00 5.2473632155303651e-02 + 1.7404009422036086e+00 1.0380094529759774e+00 -2.3028876433430101e-02 + 1.9630161471703969e+00 1.0270925300513440e+00 -1.0548410068001318e-01 + 2.1914251648223391e+00 1.0110607047150324e+00 -1.8376310600525986e-01 + 2.4242130952632421e+00 9.9195291891015414e-01 -2.5347132225313290e-01 + 2.6422836826659721e+00 1.0025583641092433e+00 -3.2471018675961533e-01 + 2.8159609705376050e+00 1.0917808679274807e+00 -4.0858697759125046e-01 + 2.9242675417318233e+00 1.2639632006090258e+00 -4.9782502455628030e-01 + 2.9710367080799172e+00 1.4745408248210938e+00 -5.7266941614796463e-01 + 2.9852890932781504e+00 1.6781892934151061e+00 -6.1541045543402784e-01 + 3.1902619034178143e+00 1.7472974556506939e+00 -5.6231847969692295e-01 + id 14280 + loc 2.9058933258056641e-01 6.9742429256439209e-01 401 + blend 0.0000000000000000e+00 + interp 4.0217022302262151e-01:3.1828888641908748e-01:2.7305709740083806e-01:3.6501441884533514e-01:9.9737911425561943e-01:3.4970477964164215e-01:1.7952465279694545e+00:4.0216620132039133e-01:2.3187445053938758e+00:2.7249823661604200e-01:3.0380957639683110e+00:3.5171891353018853e-01:3.8220380870106054e+00 + CVs 20 + -4.9983622691355561e-02 2.9800760028314460e-01 -2.6849503371079908e-01 + -8.1161383617353922e-02 5.9549339009193702e-01 -5.5104882395834487e-01 + -1.0958919321995880e-01 8.7942853383303687e-01 -8.3420459223914223e-01 + -1.3953393231554878e-01 1.1333598533761942e+00 -1.1135915192967323e+00 + -1.7400076148124427e-01 1.3542860395437901e+00 -1.3976860906970452e+00 + -2.2621144891607198e-01 1.5500170695970981e+00 -1.6986098285581164e+00 + -3.1965280828462284e-01 1.7257005370012841e+00 -2.0178683328818519e+00 + -4.7697948116128519e-01 1.8784508792664147e+00 -2.3422989493344892e+00 + -7.1212091442489767e-01 1.9980132662480479e+00 -2.6507409318410140e+00 + -1.0278028146363678e+00 2.0717946169362369e+00 -2.9176210602903985e+00 + -1.4134732722327292e+00 2.0950218467979091e+00 -3.1199349353049901e+00 + -1.8525611906177371e+00 2.0686219918014368e+00 -3.2479894848627091e+00 + -2.3360167051017102e+00 1.9841138040701742e+00 -3.3171884573380042e+00 + -2.8590007729442459e+00 1.8206737443199028e+00 -3.3535070374179425e+00 + -3.4085948616215687e+00 1.5712757204203096e+00 -3.3599735873878900e+00 + -3.9756264577286737e+00 1.2573277474848297e+00 -3.3533773616620026e+00 + -4.5580375503467616e+00 9.2240402540725508e-01 -3.4405151161431999e+00 + -5.1284842058417537e+00 6.3063922745994783e-01 -3.7217506813018488e+00 + -5.6956183938827145e+00 3.4884714675415518e-01 -3.9972330110817675e+00 + id 14281 + loc 7.5404930114746094e-01 9.8203057050704956e-01 402 + blend 0.0000000000000000e+00 + interp 3.7109179504215450e-01:2.8385939547913330e-01:2.6456745714613661e-01:3.7108808412420408e-01:9.9900836758491462e-01:1.6906605151963758e-01:1.8767190206109796e+00:3.2300003263784649e-01:2.9737456282519332e+00:3.1150310334391895e-01:3.4292662845082384e+00 + CVs 20 + -4.0335933798980261e-02 1.0263102252230355e-01 -1.3300314967624260e-01 + -7.6431949734271962e-02 2.1410176086662344e-01 -2.7149965347009686e-01 + -1.1172604092978644e-01 3.2751399668867820e-01 -4.0272923175444275e-01 + -1.5012817103976347e-01 4.3975257813423801e-01 -5.2015699897250012e-01 + -1.9539845540102080e-01 5.5163108715596054e-01 -6.2371975256433476e-01 + -2.5016822503385516e-01 6.6451271172141890e-01 -7.1529364337960710e-01 + -3.1428447608010901e-01 7.8258250263360540e-01 -8.0055013355814686e-01 + -3.8312914928940084e-01 9.1445697543339022e-01 -8.8932964259977099e-01 + -4.4316203001176624e-01 1.0713823537686509e+00 -9.9309164423913399e-01 + -4.7099711428438740e-01 1.2574118339828995e+00 -1.1153740459888595e+00 + -4.4917791066319379e-01 1.4621480284796802e+00 -1.2413245279870795e+00 + -3.8568464314643691e-01 1.6681598872672865e+00 -1.3433474302779849e+00 + -3.0682253172327822e-01 1.8644441227318211e+00 -1.4096819797195801e+00 + -2.3084161734264530e-01 2.0491772914993489e+00 -1.4590542544565164e+00 + -1.6716697571400085e-01 2.2240147571648867e+00 -1.5352910722072532e+00 + -1.2892870315554583e-01 2.3832708697155596e+00 -1.6570699862896123e+00 + -1.2489163577735840e-01 2.5181542244025588e+00 -1.7991902720377773e+00 + -1.5784861032281117e-01 2.6260236843303693e+00 -1.9307059590892051e+00 + -2.7995288614075431e-01 2.6824226147243428e+00 -2.1173096582291238e+00 + id 14282 + loc 2.6816862821578979e-01 7.0239984989166260e-01 412 + blend 0.0000000000000000e+00 + interp 3.6707805237846775e-01:3.3265855661200350e-01:5.5058290707187707e-02:2.4779586512956009e-01:9.0736124614781422e-01:3.6707438159794398e-01:1.3990007884048175e+00:3.3868973767336663e-01:2.0025583014731301e+00:3.1534376669707670e-01:2.9229573610466377e+00:3.5382539524576750e-01:3.5070451963349458e+00 + CVs 20 + 7.0590642234083967e-01 2.0026041957806040e-01 -1.1730754120517974e-01 + 1.1758337558023919e+00 2.6341112391184962e-01 -2.3022738359057149e-01 + 1.5869863694173159e+00 2.6866479905385598e-01 -3.3288795681072669e-01 + 2.0235118608409675e+00 2.5303461056086418e-01 -4.1785414608363480e-01 + 2.4730547483627277e+00 2.1302926362071783e-01 -4.7722117435131378e-01 + 2.9206810454041410e+00 1.4841795981599915e-01 -5.0345115083459890e-01 + 3.3519716808087954e+00 6.2351637753048528e-02 -4.9118045637481433e-01 + 3.7551902839546081e+00 -4.0707471155356889e-02 -4.4020577726956572e-01 + 4.1222280938992428e+00 -1.5658026406901104e-01 -3.5533731259378470e-01 + 4.4499489073961342e+00 -2.8195658072804441e-01 -2.4285764093611567e-01 + 4.7419106725265028e+00 -4.1239703607754685e-01 -1.0692610484036735e-01 + 5.0159012075023961e+00 -5.4846921993056874e-01 5.1915291993793189e-02 + 5.2945131362852189e+00 -7.0630982856315794e-01 2.2619571517142928e-01 + 5.5788103128576267e+00 -9.0235199192356963e-01 3.9103378239122955e-01 + 5.8573181406959733e+00 -1.1341795508306107e+00 5.2839332817014928e-01 + 6.1293136856425452e+00 -1.3957104148044903e+00 6.3960907454141569e-01 + 6.3971900891074105e+00 -1.6891157393316063e+00 7.2503164002252785e-01 + 6.6507821624106098e+00 -2.0089317449978359e+00 7.7566338057179873e-01 + 6.7944034800623774e+00 -2.2594487138913140e+00 7.7170376508909500e-01 + id 14283 + loc 8.0501623451709747e-02 4.4582301378250122e-01 379 + blend 0.0000000000000000e+00 + interp 3.1658211490720356e-01:2.4365847427563164e-01:3.9148185543008496e-01:2.6609350354138595e-01:1.0042796743263112e+00:3.1657894908605450e-01:1.9969783665114780e+00:2.1799112132870677e-01:3.0765676979283683e+00 + CVs 20 + 1.1478388636280529e-01 3.2186606759189262e-01 3.1361599484657326e-01 + 2.8987524136765130e-01 6.4266527388236039e-01 6.1707033105359921e-01 + 5.7065093099796582e-01 8.9110470310108636e-01 9.0952044958665323e-01 + 9.2692412598175622e-01 1.0337046921937179e+00 1.1688131669546582e+00 + 1.2858284671045210e+00 1.1251676218650730e+00 1.3679846572477261e+00 + 1.5979891397627670e+00 1.2184486062359716e+00 1.5069793232379662e+00 + 1.8640460037329938e+00 1.3343804290400922e+00 1.6192042397182740e+00 + 2.0965682427509886e+00 1.4829202485173709e+00 1.7428300655886289e+00 + 2.2907920124714094e+00 1.6721431336038926e+00 1.8954350241602786e+00 + 2.4437607106998076e+00 1.9038637370713629e+00 2.0869853341505280e+00 + 2.5686117454000721e+00 2.1541138932382751e+00 2.3178034847049598e+00 + 2.6887295293852587e+00 2.3817378440449524e+00 2.5715725159413965e+00 + 2.8233902419497188e+00 2.5596216653142858e+00 2.8435466107053053e+00 + 2.9765594205983685e+00 2.6703541689398453e+00 3.1552546668633719e+00 + 3.1282476249120128e+00 2.6939355678028076e+00 3.5310537589854576e+00 + 3.2208990205662387e+00 2.6004507966708656e+00 3.9597688637427075e+00 + 3.2498091424090303e+00 2.4250213897094537e+00 4.3387755120646148e+00 + 3.2997330519371397e+00 2.2772866380852310e+00 4.5913363294486587e+00 + 3.6546300794445665e+00 1.9157965132663386e+00 4.7671198504918522e+00 + id 14284 + loc 4.6501129865646362e-01 1.5880228579044342e-01 378 + blend 0.0000000000000000e+00 + interp 5.2221960376158072e-01:3.3087657888618660e-01:6.8640597612481458e-01:3.5019905368364812e-01:1.2973153032553011e+00:4.1538875027073047e-01:1.9790403103358627e+00:3.1693601925523701e-01:2.5377430366328939e+00:5.2221438156554312e-01:3.0355110334621300e+00:3.3033755867695486e-01:3.9277937307217630e+00 + CVs 20 + 1.2775761067802546e-01 3.1916082534273776e-01 -2.8943069847943143e-01 + 2.2421200689710113e-01 6.1052085157263292e-01 -5.7461360200709755e-01 + 3.1555101897064719e-01 8.8673599545750470e-01 -8.6976101555085461e-01 + 4.2403586534475979e-01 1.1629864185324201e+00 -1.1774999710133476e+00 + 5.7129487877218987e-01 1.4480141084378650e+00 -1.4881825461212914e+00 + 7.8160796868671101e-01 1.7361959781798801e+00 -1.7961433610496216e+00 + 1.0734645188989969e+00 2.0033401130852155e+00 -2.0974928893248106e+00 + 1.4514041523104755e+00 2.2197350661574413e+00 -2.3807278183048401e+00 + 1.9062250132453931e+00 2.3614146873156976e+00 -2.6314693756533649e+00 + 2.4192147803859259e+00 2.4098173775229235e+00 -2.8454091797337204e+00 + 2.9618145633548658e+00 2.3459395682782862e+00 -3.0277683828550850e+00 + 3.4923735351856617e+00 2.1511415896616759e+00 -3.1776266266884772e+00 + 3.9628850069860411e+00 1.8264188982223573e+00 -3.2824091078677049e+00 + 4.3492274944250386e+00 1.4141628401779021e+00 -3.3415245755588905e+00 + 4.6750524846345689e+00 9.6902718041760494e-01 -3.3910467993004936e+00 + 4.9857111668501570e+00 5.0759288939676983e-01 -3.4988408215331548e+00 + 5.3070200161414629e+00 2.0545185103368890e-02 -3.7509118559961863e+00 + 5.5962851658394417e+00 -4.4320729515768065e-01 -4.1608644819848930e+00 + 5.7565351625311791e+00 -7.5755670916505480e-01 -4.4018867853340664e+00 + id 14285 + loc 1.6382667422294617e-01 5.5213999748229980e-01 395 + blend 0.0000000000000000e+00 + interp 3.6545555186702422e-01:2.7749077293272106e-01:2.7013506924774500e-01:2.9698179528401175e-01:1.0114483198354576e+00:3.3760618596975783e-01:1.7411242102647972e+00:2.5688381650598163e-01:2.2551869364235713e+00:3.6545189731150557e-01:3.0067115131036806e+00:3.1340420900727700e-01:3.7383018159693799e+00 + CVs 20 + 4.0033137313959166e-01 1.2625973864537354e-01 -2.6145797801312692e-01 + 7.5526446652815382e-01 2.0305060248236734e-01 -4.9205626803699787e-01 + 1.1049235720113972e+00 2.6208219277187145e-01 -7.0446023322035145e-01 + 1.4636875347369782e+00 3.1287833510410745e-01 -9.0139300396234667e-01 + 1.8282822141874868e+00 3.5095082888837392e-01 -1.0815989176475926e+00 + 2.1952455939861952e+00 3.7239674244213028e-01 -1.2479219484875390e+00 + 2.5598539769202153e+00 3.7238115294272145e-01 -1.4039621520439849e+00 + 2.9152236223067183e+00 3.4491725855084887e-01 -1.5517875977108377e+00 + 3.2547798933792063e+00 2.8416538185309359e-01 -1.6948470749783442e+00 + 3.5718020907381360e+00 1.8416597412467306e-01 -1.8411212594286908e+00 + 3.8572950947798090e+00 4.0493233358428249e-02 -1.9999525467089025e+00 + 4.1066570220780969e+00 -1.4716699865603688e-01 -2.1762250942759729e+00 + 4.3230783115598257e+00 -3.7619875101525269e-01 -2.3716880863673655e+00 + 4.5084778324675820e+00 -6.4278958214755777e-01 -2.5890417514587476e+00 + 4.6586586822272409e+00 -9.4082832779960102e-01 -2.8299051696794781e+00 + 4.7681772121589923e+00 -1.2643447553776177e+00 -3.0878898644765900e+00 + 4.8369999016491558e+00 -1.6110594877635163e+00 -3.3485039832814896e+00 + 4.8759953507813236e+00 -1.9812277162302276e+00 -3.6056311342053347e+00 + 4.9707229411401315e+00 -2.3538783552537472e+00 -3.9194112394589453e+00 + id 14286 + loc 9.2878937721252441e-03 5.3174823522567749e-01 393 + blend 0.0000000000000000e+00 + interp 5.1524508899468358e-01:1.2699533390445453e-01:5.1235750597559027e-01:4.4319956003377081e-01:1.0412350822952927e+00:5.1523993654379363e-01:1.5952733141834727e+00:3.4792600928970113e-01:2.1212072500917500e+00:4.2970658387905580e-01:2.9978431817060116e+00:3.1962245145658952e-01:3.9307120171264240e+00 + CVs 20 + -2.2466662421989392e-01 3.1620084860523667e-01 -9.3655702649075606e-02 + -4.5792882388710265e-01 6.6543042410143327e-01 -1.6872551924619947e-01 + -6.9194847911960866e-01 1.0408688537620654e+00 -2.4335922044304675e-01 + -9.3436276964013543e-01 1.4295202502504567e+00 -3.3159176321148204e-01 + -1.2060036538554830e+00 1.8155666128650134e+00 -4.4395372503381381e-01 + -1.5275049390176960e+00 2.1739673353795608e+00 -5.9202862052004179e-01 + -1.9131795184035423e+00 2.4678099255733912e+00 -7.8743834557960113e-01 + -2.3606717911744384e+00 2.6552762472263987e+00 -1.0368471362176688e+00 + -2.8453605584636819e+00 2.7058895438519648e+00 -1.3329716382343761e+00 + -3.3340363226740077e+00 2.6175158836646206e+00 -1.6531520043090202e+00 + -3.8049010733273940e+00 2.4167665835947032e+00 -1.9733201947470591e+00 + -4.2531561464596646e+00 2.1476989753493498e+00 -2.2803409810948825e+00 + -4.6838991674145705e+00 1.8574944571723708e+00 -2.5601899308769034e+00 + -5.0986021817181344e+00 1.5877549059078357e+00 -2.7657656153985513e+00 + -5.4848556400625439e+00 1.3890935541310550e+00 -2.8207255064562697e+00 + -5.8009834560068780e+00 1.3542467812825658e+00 -2.6801904700776067e+00 + -5.9689135031164984e+00 1.5657059174972188e+00 -2.3993201895177023e+00 + -6.0395856944630832e+00 1.8938303482349683e+00 -2.1359234511025642e+00 + -6.6076221363940881e+00 1.8767691329032674e+00 -2.0077492123313800e+00 + id 14287 + loc 4.1720896959304810e-01 5.7116055488586426e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9356034864871103e-01:2.4992704790395406e-01:2.0840042618712751e-03:3.5313397810052560e-01:5.6144267737299058e-01:2.7679840958321550e-01:1.3906940517612592e+00:3.7244924124130202e-01:2.2641729181788999e+00:3.9355641304522454e-01:2.8937116911893401e+00:2.8387338027756004e-01:3.2951742331092251e+00 + CVs 20 + 1.2342786115211152e-01 2.9909079211334266e-01 -2.3488083474704835e-01 + 2.9242644748694291e-01 5.8380902230487641e-01 -4.4945433715588373e-01 + 4.9536922067536221e-01 8.5780196872952930e-01 -6.4796854225313816e-01 + 7.2752870370785272e-01 1.1175834320735514e+00 -8.4205409253210584e-01 + 9.7893341522376986e-01 1.3692335503688531e+00 -1.0547794750251194e+00 + 1.2199113891949558e+00 1.6187590616994749e+00 -1.3166013707842543e+00 + 1.4085182593829970e+00 1.8436156867660598e+00 -1.6508521060367123e+00 + 1.5181790310286154e+00 1.9895610354050721e+00 -2.0495601013286167e+00 + 1.5552430798792467e+00 2.0114300820918061e+00 -2.4692600694225755e+00 + 1.5450561035374166e+00 1.9161003575609374e+00 -2.8680874892677899e+00 + 1.5093806279055251e+00 1.7442902456941405e+00 -3.2318802990932065e+00 + 1.4630359768923542e+00 1.5384162324040389e+00 -3.5585257857428587e+00 + 1.4176121860963771e+00 1.3377447301979588e+00 -3.8431609304137164e+00 + 1.3782594971698545e+00 1.1745951750593209e+00 -4.0797862837167900e+00 + 1.3396568346417157e+00 1.0665448703926479e+00 -4.2634330590745453e+00 + 1.2864144001255213e+00 1.0214757262071608e+00 -4.3823923379341529e+00 + 1.1814579715151434e+00 1.0210937711874746e+00 -4.4418579978101720e+00 + 1.0484062117393556e+00 9.7222803335508112e-01 -4.5351825919422390e+00 + 1.1220353843130511e+00 8.5102208029448445e-01 -4.7158922557853371e+00 + id 14288 + loc 3.5860347747802734e-01 5.9293919801712036e-01 381 + blend 0.0000000000000000e+00 + interp 4.7154663690387366e+00:4.0770761887467022e-01:1.8687694684638156e-04:3.7599668095245753e-01:6.5679719689869631e-01:3.7468789957340454e-01:1.0604892713580614e+00:8.3446794045178241e-01:1.7117063395252430e+00:1.4680855635465107e+00:1.7407384419548571e+00:4.0853718126154409e-01:1.7721540276121939e+00:4.7154563690387370e+00:3.6376675178823517e+00:6.9739513563093802e-01:3.7910734383785432e+00:1.0897098377610781e+00:3.8574401103505291e+00 + CVs 20 + 9.6837875063077616e-01 2.0588230841710486e-01 -7.3099885029704847e-01 + 1.5415245151217638e+00 2.3415813705121460e-01 -1.2478966330330852e+00 + 2.0033815489847839e+00 1.9713235208704466e-01 -1.7079000265353879e+00 + 2.4668811569472644e+00 1.3891941874528158e-01 -2.1579224407770465e+00 + 2.9390048722720348e+00 5.9597820371176280e-02 -2.5788630054430004e+00 + 3.4177013524722009e+00 -3.8087433181193342e-02 -2.9616819803484740e+00 + 3.8858809862096355e+00 -1.5406789715877256e-01 -3.3163360433007516e+00 + 4.3464608515939398e+00 -2.9368766289995762e-01 -3.6716124251783810e+00 + 4.8182168965463132e+00 -4.8043506320956375e-01 -4.0531464327624258e+00 + 5.3117958883296659e+00 -7.5142038067710870e-01 -4.4703638221532298e+00 + 5.8099586945178157e+00 -1.1438836225786064e+00 -4.9228987147250542e+00 + 6.2638413000307729e+00 -1.6899189960940704e+00 -5.3950768210826929e+00 + 6.6022270012178694e+00 -2.4095081555735152e+00 -5.8493905879010857e+00 + 6.7711088967851483e+00 -3.2824133913039719e+00 -6.2574388411598854e+00 + 6.8028580249822852e+00 -4.2359784699699228e+00 -6.6379892988738547e+00 + 6.7916400555718646e+00 -5.1636250574105409e+00 -7.0363379352549416e+00 + 6.7870972019589946e+00 -5.9431609341657925e+00 -7.4820665121410759e+00 + 6.7737726049211364e+00 -6.5292918062529717e+00 -7.9529718706778478e+00 + 6.7671538937749069e+00 -7.1214124795556311e+00 -8.3417006690268174e+00 + id 14289 + loc 6.5204930305480957e-01 7.5562328100204468e-02 400 + blend 0.0000000000000000e+00 + interp 4.3911604412326521e-01:2.8639242286319061e-01:1.0024764488924343e+00:3.5772940988708773e-01:1.6880837552626926e+00:3.1318593864794242e-01:2.7737217119627915e+00:4.3911165296282401e-01:3.0740860406936408e+00:3.0390582477096251e-01:3.9919141915481138e+00 + CVs 20 + 1.5433459168190888e-01 2.0308024482509751e-01 2.9146079594995677e-01 + 3.0437278409382307e-01 3.7748956959171154e-01 5.4340604079059163e-01 + 4.4839161855590381e-01 5.3784344208741053e-01 7.7706025938601564e-01 + 5.8464778277210794e-01 6.9107257857185289e-01 1.0013908655585255e+00 + 7.1277125626282634e-01 8.3898281028538679e-01 1.2159149779880765e+00 + 8.3498999287066233e-01 9.8377894118452547e-01 1.4236693906258919e+00 + 9.5947766906070087e-01 1.1256065927293928e+00 1.6257053611750294e+00 + 1.0965726124316075e+00 1.2628146870229180e+00 1.8221009727362629e+00 + 1.2535951720861496e+00 1.3855511279607660e+00 2.0211423580927965e+00 + 1.4351673979806217e+00 1.4724636045276582e+00 2.2305196151418487e+00 + 1.6468705858670663e+00 1.5021503658827446e+00 2.4393245035994280e+00 + 1.8941622730514611e+00 1.4659429117112635e+00 2.6256581307912414e+00 + 2.1745137551133742e+00 1.3730197177886483e+00 2.7874520521787156e+00 + 2.4734985731284080e+00 1.2406030901664482e+00 2.9463002432442025e+00 + 2.7655426057111963e+00 1.0550947464611198e+00 3.0926642661777581e+00 + 3.0182977266875572e+00 7.3932544883675644e-01 3.1442694358386123e+00 + 3.2396718597148149e+00 1.6286702521562946e-01 3.0744442902027940e+00 + 3.5073178421810485e+00 -5.5010714450932197e-01 3.1537917991761062e+00 + 3.6853880939370969e+00 -5.7911150961357594e-01 3.4147028905268639e+00 + id 14290 + loc 7.2118294239044189e-01 1.3170826435089111e-01 404 + blend 0.0000000000000000e+00 + interp 4.5303366459316186e-01:4.5302913425651592e-01:4.7705774078944752e-01:3.5243246844111931e-01:1.1445393279382692e+00:3.2107686105199795e-01:2.0006557484240526e+00:2.6902135131461596e-01:3.0161610599999711e+00:3.1629342240243308e-01:3.9933750794285983e+00 + CVs 20 + -4.4385140178930575e-02 4.5169420700506072e-02 9.1257578844769149e-02 + -8.1220978618127271e-02 1.0413528826646559e-01 1.9634053350452058e-01 + -1.1273843586792023e-01 1.7336566534210318e-01 3.0185604475326383e-01 + -1.4249687673225997e-01 2.5248648152595599e-01 3.9801492175094827e-01 + -1.6857590921563409e-01 3.4212518938429903e-01 4.8305925788212623e-01 + -1.8854685702127708e-01 4.4244853546227558e-01 5.5622926299060760e-01 + -2.0152142685346064e-01 5.5455364949638053e-01 6.1888772720020846e-01 + -2.0902978134829536e-01 6.8041831963893795e-01 6.7449991459216430e-01 + -2.1410225909199651e-01 8.2171424244938440e-01 7.2696025642630291e-01 + -2.2244679489423874e-01 9.7986544380541551e-01 7.7943906910772986e-01 + -2.4534762863829968e-01 1.1562258537536065e+00 8.3081276600065479e-01 + -3.0500803362019457e-01 1.3519124288317097e+00 8.6577166071040379e-01 + -4.2133068510515165e-01 1.5652973247530100e+00 8.7316145944993007e-01 + -5.9824775315089584e-01 1.7904481518926627e+00 8.8052004177630228e-01 + -8.0449522001054707e-01 2.0127378324673981e+00 9.4353956986629151e-01 + -9.9430398547244014e-01 2.2143388022699688e+00 1.0844529805280019e+00 + -1.1509965405406182e+00 2.3829562053321589e+00 1.2871245534392441e+00 + -1.2667884328897414e+00 2.5097999241458075e+00 1.5257798001420877e+00 + -1.2435917281348718e+00 2.5793989802820367e+00 1.6863718945080080e+00 + id 14291 + loc 3.9022812247276306e-01 8.5668665170669556e-01 412 + blend 0.0000000000000000e+00 + interp 5.0688384143674869e-01:3.5407958272705475e-01:1.5175624272617538e-03:3.1653964207361224e-01:8.9449961602329719e-01:3.5907406174796891e-01:1.4444437574262043e+00:2.8438755779467528e-01:1.9995353804218432e+00:3.1038561229890221e-01:2.7107539018928981e+00:5.0687877259833436e-01:3.1769057915080103e+00:4.2700296129022297e-01:3.6576026030260165e+00 + CVs 20 + 8.8475155307018272e-01 6.9222889969567603e-02 -2.5215498025629901e-01 + 1.4554468200221806e+00 -1.7528411386843135e-02 -4.7660153123943033e-01 + 1.9547510830683690e+00 -1.4880542885219727e-01 -6.5828948162176415e-01 + 2.4520514077823319e+00 -2.9091746076365310e-01 -7.8687936328460606e-01 + 2.9297795464994749e+00 -4.4250069469482478e-01 -8.5447502276248233e-01 + 3.3737245828170117e+00 -5.9882265235046184e-01 -8.5931165934112941e-01 + 3.7724277641097244e+00 -7.5392584746072977e-01 -8.0788953142971409e-01 + 4.1201520459887249e+00 -9.0284785862488970e-01 -7.1421737909981320e-01 + 4.4189193707282026e+00 -1.0428235263313292e+00 -5.9499296886798092e-01 + 4.6739943844472629e+00 -1.1731231323662272e+00 -4.6596043643867657e-01 + 4.8878263228860881e+00 -1.2928097172584028e+00 -3.4066823434168747e-01 + 5.0644140906991870e+00 -1.3989348046726413e+00 -2.2655873320939363e-01 + 5.2190442554000516e+00 -1.4926504933595981e+00 -1.2344345491098541e-01 + 5.3688657443996544e+00 -1.5860087114049013e+00 -3.8299289744508191e-02 + 5.5129678231623638e+00 -1.6839593510049027e+00 1.2964669065005652e-02 + 5.6440861115694290e+00 -1.7775680329923969e+00 2.9256281663713191e-02 + 5.7609161521209531e+00 -1.8611972753077419e+00 2.4680173543018435e-02 + 5.8612992690740020e+00 -1.9360612241241963e+00 8.7641915852064711e-03 + 5.8580947621338861e+00 -2.0456866848359745e+00 -1.3108764303910836e-01 + id 14292 + loc 1.8411767482757568e-01 9.5403259992599487e-01 402 + blend 0.0000000000000000e+00 + interp 3.6393483802700494e-01:3.6393119867862467e-01:2.6996520659532186e-01:2.8258792197259891e-01:1.0410321994498355e+00:2.1508578185246940e-01:2.3565642983717376e+00:3.0836553206445289e-01:3.1584960232369110e+00 + CVs 20 + -1.5993557437741987e-03 1.1651998285147205e-01 -1.4557784217597300e-01 + 2.4259416858398081e-02 2.4131023547874997e-01 -3.1823738691736658e-01 + 6.0577739724434032e-02 3.5879928171437014e-01 -5.0979461015826000e-01 + 9.8168877860522086e-02 4.5957862089204049e-01 -7.1172691986964165e-01 + 1.3127824297942853e-01 5.4626633040767203e-01 -9.2430145707946010e-01 + 1.5079196377701989e-01 6.2084109180383040e-01 -1.1471514725768366e+00 + 1.4524360681416060e-01 6.8203951658926132e-01 -1.3778387392149731e+00 + 1.0551177933698302e-01 7.2462441673619538e-01 -1.6102987962499669e+00 + 2.9999567757304613e-02 7.4214678747531848e-01 -1.8358580824815314e+00 + -7.4691957890102412e-02 7.2937938405587344e-01 -2.0458048936675404e+00 + -1.9426197942738616e-01 6.8033300822734666e-01 -2.2308599317446518e+00 + -3.1146160918944332e-01 5.9574811004280714e-01 -2.3858548684722161e+00 + -4.1414313493555999e-01 4.8344635476381603e-01 -2.5113126216453461e+00 + -5.0456554648691787e-01 3.5711071970938713e-01 -2.6147974362422022e+00 + -6.1308497713977406e-01 2.3029886869992616e-01 -2.7136866910959907e+00 + -7.6116078690291611e-01 1.0722578668999272e-01 -2.8130255474162649e+00 + -9.0357808572798493e-01 -5.9725852138755031e-03 -2.8954653191078839e+00 + -9.6532726973197180e-01 -8.7775914330327109e-02 -2.9553135872795129e+00 + -1.0546848387112122e+00 -1.9944346526419543e-01 -2.9284419395772137e+00 + id 14293 + loc 8.8026523590087891e-01 6.2081134319305420e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2770178051765206e-01:4.2769750349984692e-01:6.6723665771610818e-03:3.3429601696258648e-01:5.8404732607037002e-01:3.2914537459951676e-01:1.5779563747098391e+00:3.3918611336745824e-01:2.4958842766907448e+00:2.5914371427608823e-01:3.5038374986180312e+00 + CVs 20 + -5.1660915546891020e-02 2.8090953184548917e-01 3.4377702557885637e-03 + -6.7278288910062503e-02 5.5973613971327052e-01 2.0405219368478389e-02 + -5.6776257023231996e-02 8.4106413146398329e-01 3.6130498500869357e-02 + -2.8653868236171887e-02 1.1299408655628558e+00 3.6281121351176837e-02 + 2.0506755966617440e-02 1.4322185211055405e+00 1.3303364672976548e-02 + 9.6360363987090081e-02 1.7537551612661484e+00 -4.3685928322665268e-02 + 2.0463776432033393e-01 2.0824000076739599e+00 -1.5155559424706522e-01 + 3.4442890404723936e-01 2.3880613780776985e+00 -3.2115721222620996e-01 + 5.0661656125337373e-01 2.6446285080484140e+00 -5.5062060290653880e-01 + 6.7709233956029780e-01 2.8359337558486382e+00 -8.3077847566462426e-01 + 8.3831252356883790e-01 2.9525714136573953e+00 -1.1495085127223397e+00 + 9.7101571836287603e-01 2.9921291729727573e+00 -1.4938239762475698e+00 + 1.0572330119552160e+00 2.9577027782206695e+00 -1.8505856224347661e+00 + 1.0828653453513926e+00 2.8567432870545852e+00 -2.2093953935910244e+00 + 1.0439591302224904e+00 2.7033793906457606e+00 -2.5730822447330284e+00 + 9.6020505168631565e-01 2.5247357391591896e+00 -2.9851453275090014e+00 + 8.7744719523594394e-01 2.3164547286216406e+00 -3.5517342799660905e+00 + 8.0233069284635428e-01 1.9292105205659811e+00 -4.1672073540636028e+00 + 6.0177798940959271e-01 1.6935043759892443e+00 -4.0194125870352888e+00 + id 14294 + loc 4.9647691845893860e-01 9.8679316043853760e-01 396 + blend 0.0000000000000000e+00 + interp 3.9736884961040486e-01:3.9688246724002813e-01:4.2299361885081765e-02:2.6416715615350245e-01:8.9424274135115356e-01:3.9736487592190878e-01:1.3957108561545568e+00:2.4496304609649039e-01:2.0418557572677525e+00:2.9856252464368044e-01:3.5270903925541943e+00 + CVs 20 + 9.5645901660719446e-01 3.4457115588813636e-01 -2.2268630015660953e-01 + 1.6237062573229974e+00 5.1988113308917883e-01 -3.8902984074960206e-01 + 2.2247557132233191e+00 6.1084616664803104e-01 -5.4213872806967123e-01 + 2.8770867144899825e+00 6.5461350054570322e-01 -7.0243660932763297e-01 + 3.5624315353789444e+00 6.2458790967585509e-01 -8.6921892658273092e-01 + 4.2521054003102607e+00 5.0303485892128985e-01 -1.0448151085252715e+00 + 4.9111389512878345e+00 2.8642147889130321e-01 -1.2339157528170592e+00 + 5.5029170556341622e+00 -1.5292007695401399e-02 -1.4365458544449587e+00 + 5.9970817644599510e+00 -3.7970419142080947e-01 -1.6462854833672815e+00 + 6.3770689937474128e+00 -7.7294839338729915e-01 -1.8558454356926846e+00 + 6.6431573938784707e+00 -1.1551313795498956e+00 -2.0589167700067534e+00 + 6.8136690473869210e+00 -1.4958252117590878e+00 -2.2509472218727042e+00 + 6.9137611967615316e+00 -1.7909429063943445e+00 -2.4324493890234473e+00 + 6.9582687553647444e+00 -2.0487019164835640e+00 -2.6056521770554779e+00 + 6.9744760199167635e+00 -2.2543984821513714e+00 -2.7642614341259595e+00 + 7.0015283707150884e+00 -2.4012596281257022e+00 -2.9052533960553886e+00 + 7.0719178739405431e+00 -2.5015236661299198e+00 -3.0395450928471792e+00 + 7.1937925939956902e+00 -2.5877907994224243e+00 -3.1735388550142880e+00 + 7.1940982451846320e+00 -2.7414605756774026e+00 -3.2400455460644055e+00 + id 14295 + loc 2.5503650307655334e-02 5.7670718431472778e-01 399 + blend 0.0000000000000000e+00 + interp 4.1262523753328012e-01:3.3240245117085931e-01:4.8245557113031357e-03:1.5798296319243374e-01:1.2144708727964377e+00:2.8524169198932237e-01:1.9312425832066191e+00:3.5383239267757954e-01:2.2965406555387813e+00:4.1262111128090478e-01:2.9276680425763155e+00:2.6764360895333467e-01:3.4599620618785334e+00 + CVs 20 + -2.7638906472432978e-01 2.8099449088055439e-01 -1.4809057837988238e-01 + -5.2563823256602615e-01 5.4489977061353256e-01 -3.1566938942144779e-01 + -7.5157022697195119e-01 7.8913425521018821e-01 -5.1793310382723601e-01 + -9.5281036979886302e-01 1.0107244756937541e+00 -7.6168017318814185e-01 + -1.1209222468629692e+00 1.2128298899505352e+00 -1.0472910316606907e+00 + -1.2545568078086005e+00 1.4085137301826729e+00 -1.3722052808378415e+00 + -1.3698802094419755e+00 1.6261060906051434e+00 -1.7265102556997467e+00 + -1.5032629900701844e+00 1.8940897054934425e+00 -2.1010998334357383e+00 + -1.7397174122762360e+00 2.1772359864657109e+00 -2.4890628105478880e+00 + -2.1333875650891798e+00 2.3555559520397766e+00 -2.8452068149337202e+00 + -2.6221211080302016e+00 2.3669513255007084e+00 -3.1132877938163199e+00 + -3.1020896603268935e+00 2.2405919584454423e+00 -3.2714862069778583e+00 + -3.4936036364780731e+00 2.0328982036043071e+00 -3.3518210136805728e+00 + -3.7517022637764148e+00 1.7790059705499019e+00 -3.4223886002546142e+00 + -3.8702702231060342e+00 1.4914577896229586e+00 -3.5325663055235235e+00 + -3.8846377163945767e+00 1.1724057254251303e+00 -3.6798360640588719e+00 + -3.8272642411306816e+00 7.7178025178017651e-01 -3.8401823261962145e+00 + -3.8715805989313172e+00 4.4628512792633951e-01 -4.0582602970845461e+00 + -4.1089561094762130e+00 9.4099297820836891e-01 -4.3182275357519222e+00 + id 14296 + loc 4.1043159365653992e-01 9.7225445508956909e-01 401 + blend 0.0000000000000000e+00 + interp 3.7147047550349510e-01:3.3699167065622565e-01:1.2773737049711298e-02:3.5519817829959188e-01:7.4443115623654832e-01:3.3144679952573364e-01:1.7356721613655359e+00:2.0800997348607966e-01:2.3691898089961581e+00:3.7146676079874008e-01:3.2629141945678621e+00 + CVs 20 + 1.9070459562009437e-02 3.2545422197764795e-01 -2.6248269968527033e-01 + 1.6363559182590970e-02 6.5960318094766701e-01 -5.2571938644158567e-01 + 1.3922502815496562e-03 9.9902880270457173e-01 -7.8713175035721961e-01 + -2.3360983721845141e-02 1.3281248236088652e+00 -1.0561543403347915e+00 + -6.5182773792621163e-02 1.6288318028641218e+00 -1.3436380348089731e+00 + -1.4360381221701446e-01 1.8867413938099904e+00 -1.6444133191206207e+00 + -2.7883534736219684e-01 2.0891048522165008e+00 -1.9364223897664106e+00 + -4.7307092035868981e-01 2.2239288057071414e+00 -2.1929198443394857e+00 + -7.0808558431682178e-01 2.2848545888619478e+00 -2.3935756811627602e+00 + -9.6089132766156571e-01 2.2768943793336791e+00 -2.5344742133198501e+00 + -1.2189417582185205e+00 2.2100461975717063e+00 -2.6259750702137663e+00 + -1.4803212124482212e+00 2.0900167951549125e+00 -2.6830784019285949e+00 + -1.7407165335213683e+00 1.9169346126985851e+00 -2.7207204919750523e+00 + -1.9843457020745556e+00 1.6947538016839263e+00 -2.7511766180611432e+00 + -2.2157443707464841e+00 1.4249093740185099e+00 -2.7834286912051223e+00 + -2.4916812563834188e+00 1.0777688149969353e+00 -2.8348724679172146e+00 + -2.8681166981566930e+00 6.3265349550492522e-01 -2.9705488111105587e+00 + -3.2838727418525888e+00 1.8797029715264968e-01 -3.2686620382011768e+00 + -3.5573634759928812e+00 -7.5008737720462015e-02 -3.5632970813699938e+00 + id 14297 + loc 2.4527023732662201e-01 7.8354382514953613e-01 378 + blend 0.0000000000000000e+00 + interp 4.0262905325548448e-01:2.8288349308048494e-01:2.4465074322779989e-01:3.3337867056694537e-01:9.9462592666076055e-01:2.6513069074229734e-01:1.6236976869276241e+00:4.0262502696495195e-01:2.1262459214869009e+00:2.5715884892314717e-01:2.9967612623742648e+00:2.6230570558582472e-01:3.8175746674150326e+00 + CVs 20 + 5.4707747742210411e-01 3.3696750261342151e-01 2.1866018830860906e-01 + 1.0189372456040886e+00 5.8443755770172545e-01 3.3785408559165664e-01 + 1.4810265892893637e+00 7.9025185985182522e-01 4.0289963203034257e-01 + 1.9666358016409136e+00 9.9415142345023644e-01 4.4499943335697612e-01 + 2.4726022694146139e+00 1.2117142037252930e+00 4.8798299098354359e-01 + 2.9970599173215442e+00 1.4438807814926249e+00 5.6098439990755544e-01 + 3.5406117401506618e+00 1.6751977808374505e+00 6.9208133310892928e-01 + 4.0958460782533370e+00 1.8818047910733335e+00 9.0303128889689543e-01 + 4.6411817727976139e+00 2.0397032483180157e+00 1.2030696758462471e+00 + 5.1493644860121064e+00 2.1299680462192199e+00 1.5849176575165971e+00 + 5.6077490592881825e+00 2.1377703930311256e+00 2.0321706700378215e+00 + 6.0227884000874949e+00 2.0429737472263385e+00 2.5277342965384468e+00 + 6.3922644733415135e+00 1.8224729481927602e+00 3.0416149875856204e+00 + 6.6809692352941292e+00 1.4871943357920436e+00 3.5152688655145625e+00 + 6.8553567395207207e+00 1.1045689903302689e+00 3.8929761528063627e+00 + 6.9301167376696373e+00 7.3801794656507536e-01 4.1737632972239354e+00 + 6.9467590045698042e+00 4.0318717425400807e-01 4.4002306164755352e+00 + 6.9652155607104635e+00 8.3844862818533095e-02 4.6105406340046553e+00 + 7.1479602851919877e+00 -2.5065638529424472e-01 4.7926197856442529e+00 + id 14298 + loc 5.0806391239166260e-01 2.0316417515277863e-01 379 + blend 0.0000000000000000e+00 + interp 3.9801516627424666e-01:3.0986677528886236e-01:1.5003418158593973e-01:3.9801118612258396e-01:8.4448371449326864e-01:2.1964443158965533e-01:1.4504752480567618e+00:2.7013485895948064e-01:2.6920653029835928e+00:2.7404685141214186e-01:3.2736522656851430e+00 + CVs 20 + 4.7579111506410582e-01 3.0631453244844892e-01 -1.1294896052607861e-01 + 8.8360421486874619e-01 5.4992750788938982e-01 -2.9653710486682588e-01 + 1.2581848246256957e+00 7.2131486142398604e-01 -5.3508073721342164e-01 + 1.6308322553473322e+00 8.7740117003817597e-01 -8.1067693112557693e-01 + 2.0173988159542371e+00 1.0732504921003954e+00 -1.0860207241919002e+00 + 2.4352331603600144e+00 1.3261718507773341e+00 -1.3124197876365751e+00 + 2.8919537033227956e+00 1.6327717481622721e+00 -1.4524136758589266e+00 + 3.3711090949279261e+00 1.9856283484233685e+00 -1.4847144113423956e+00 + 3.8512133903663681e+00 2.3577884361364330e+00 -1.4018418797243786e+00 + 4.3286714591666531e+00 2.7039225427035589e+00 -1.2108419100822398e+00 + 4.8160265515468206e+00 2.9721516371451013e+00 -9.1795772232414685e-01 + 5.3127049543936149e+00 3.1007787805729157e+00 -5.2317283995982988e-01 + 5.7775173709889787e+00 3.0201861492067161e+00 -4.5867929078405423e-02 + 6.1259500146968913e+00 2.7005172686717884e+00 4.4973546845064039e-01 + 6.2897053802512524e+00 2.1869407074456744e+00 8.6774077534553973e-01 + 6.2939730054600460e+00 1.5679975092447473e+00 1.0830016511827329e+00 + 6.2555897766501012e+00 9.7940252156361352e-01 9.2900457336258691e-01 + 6.2487699108095081e+00 7.0693926036722443e-01 3.9003581148715866e-01 + 6.2693353385997721e+00 2.6858279364620463e-01 1.3185703847520774e-01 + id 14299 + loc 1.6945023834705353e-01 3.4882247447967529e-01 381 + blend 0.0000000000000000e+00 + interp 4.7050536349002647e-01:4.1067976905249720e-01:2.9443593163031223e-01:4.2775776727670772e-01:1.0145420733221615e+00:2.8812485936854854e-01:1.4305793281566146e+00:3.9547753897004617e-01:1.9444805597969892e+00:4.7050065843639161e-01:2.5986066444559981e+00:3.6689673351017327e-01:3.0797748335608288e+00:4.3716799778652204e-01:3.8545604399772735e+00 + CVs 20 + -6.4903871803083335e-01 1.7240663132056361e-01 -9.3708734719332398e-01 + -1.1284580135737385e+00 1.8054531080725003e-01 -1.5192595370406299e+00 + -1.5666061794663722e+00 1.2778135117295425e-01 -1.9870835144340846e+00 + -2.0077063931773975e+00 5.6036914067598920e-02 -2.4277362461604306e+00 + -2.4361474036065358e+00 -2.5417555928173852e-02 -2.8435566576194899e+00 + -2.8382064204955766e+00 -1.0200451291194457e-01 -3.2430640252047023e+00 + -3.2113662050826211e+00 -1.6085864496883928e-01 -3.6427287074463148e+00 + -3.5640939621092822e+00 -2.0182770176511089e-01 -4.0682359001468384e+00 + -3.9032973015244834e+00 -2.4503348241747402e-01 -4.5477006258885497e+00 + -4.2314387579131871e+00 -3.2561726669415592e-01 -5.0965348840183644e+00 + -4.5561404977373385e+00 -4.8334254417665390e-01 -5.7047414291007685e+00 + -4.8818434862496671e+00 -7.5567099443085972e-01 -6.3443904450246240e+00 + -5.1908071829771245e+00 -1.1752206484098509e+00 -6.9642720116220200e+00 + -5.4454734484760587e+00 -1.7285136822797369e+00 -7.4767268549926866e+00 + -5.6284499859189729e+00 -2.3255039390041583e+00 -7.8238302705990250e+00 + -5.7527028441870005e+00 -2.8851645505900616e+00 -8.0253754352794004e+00 + -5.8377842099381576e+00 -3.3949633103696035e+00 -8.1397404682932777e+00 + -5.9331290766399665e+00 -3.8625984957343107e+00 -8.2088939569610417e+00 + -6.1736671797965368e+00 -4.2596296027465623e+00 -8.2031532601989472e+00 + id 14300 + loc 4.0948146581649780e-01 6.1187750101089478e-01 393 + blend 0.0000000000000000e+00 + interp 4.6117265830779564e-01:4.4373830479498233e-01:1.1829192158964719e-02:3.2642760545357991e-01:9.6621727154748760e-01:3.9177620649134282e-01:1.4655868416390205e+00:3.3988063180477868e-01:2.0149539594840231e+00:4.6116804658121258e-01:2.7674034948928137e+00:3.2422502050431673e-01:3.1100120510762750e+00 + CVs 20 + -3.6216843544482902e-01 2.9684143938796442e-01 -8.8028506750237878e-02 + -6.8821263177311309e-01 6.0957904538089724e-01 -1.4668901362104989e-01 + -9.8353233307676002e-01 9.5371397767123378e-01 -1.9526210012379663e-01 + -1.2540046550507638e+00 1.3276450026849966e+00 -2.5252626598798905e-01 + -1.5080609882977938e+00 1.7180859287475765e+00 -3.3652042922296538e-01 + -1.7563518492127999e+00 2.1126843165528655e+00 -4.5974080393115502e-01 + -2.0169524326842527e+00 2.5092107334000371e+00 -6.2832486531843434e-01 + -2.3308016902318047e+00 2.8999249408636221e+00 -8.4646537202824645e-01 + -2.7456374420474852e+00 3.2405575141360110e+00 -1.1116769886111064e+00 + -3.2612334664577274e+00 3.4711778258012851e+00 -1.4178294410553551e+00 + -3.8303383967359173e+00 3.5710147842885864e+00 -1.7718852822387992e+00 + -4.4130243961361337e+00 3.5406658579073089e+00 -2.1791122077189642e+00 + -4.9813086291726725e+00 3.3622351663715357e+00 -2.6111973937636463e+00 + -5.4872135427933761e+00 3.0236074506566091e+00 -3.0171340544512195e+00 + -5.8748701051096379e+00 2.5506214515065646e+00 -3.3701926185515370e+00 + -6.1320437183787861e+00 1.9781859216786251e+00 -3.6694617494031001e+00 + -6.3164604042327621e+00 1.3227456620646716e+00 -3.8931518586925358e+00 + -6.4838320357431964e+00 6.1789620570017378e-01 -4.0027139771742561e+00 + -6.5983606000939492e+00 -4.6712348420731908e-02 -4.0359336406877597e+00 + id 14301 + loc 9.6277046203613281e-01 7.4518048763275146e-01 400 + blend 0.0000000000000000e+00 + interp 4.0362862448200976e-01:3.1494130419929800e-01:3.0821253846814267e-01:4.0362458819576497e-01:9.7168362479754300e-01:2.7695106681833664e-01:1.4917193583698782e+00:3.0237148831282101e-01:2.0315455512361869e+00:9.9835077393879090e-02:3.0151630837741283e+00 + CVs 20 + -1.3728757719774101e-01 1.7149194315753846e-01 -2.6626099403992481e-01 + -2.7683038827738804e-01 3.1556562132015398e-01 -5.1867298676841356e-01 + -4.0294178968546063e-01 4.3985247838501129e-01 -7.7391319259416713e-01 + -5.1208823066398002e-01 5.4559160435233545e-01 -1.0342275636239897e+00 + -6.1220601797941832e-01 6.3132931700539352e-01 -1.2970663864749139e+00 + -7.0930979130936223e-01 6.9882947919422922e-01 -1.5647165587093244e+00 + -8.0345914854748146e-01 7.5469433907605776e-01 -1.8402492699963906e+00 + -8.9139902680005256e-01 8.0572849635925303e-01 -2.1254794997657118e+00 + -9.6958876743444666e-01 8.4989704543257749e-01 -2.4255637455765839e+00 + -1.0345199056097329e+00 8.7939105147573771e-01 -2.7467875327917177e+00 + -1.0813789024751903e+00 8.8805887371872050e-01 -3.0898833899099047e+00 + -1.1066882015342874e+00 8.7029601939960255e-01 -3.4517693260322080e+00 + -1.1103660081842610e+00 8.1455232522827514e-01 -3.8318319050941203e+00 + -1.0885521479388629e+00 7.0217650827092837e-01 -4.2283794786665805e+00 + -1.0275902960770638e+00 5.1672089522473730e-01 -4.6252066146373663e+00 + -9.1310532210895423e-01 2.5372053521321858e-01 -4.9857256114292987e+00 + -7.4518673060187479e-01 -7.8801626194985097e-02 -5.2647155043095095e+00 + -5.3730325384733890e-01 -4.6770563777392438e-01 -5.4353865586825165e+00 + -2.7659352227290801e-01 -9.3607258779067282e-01 -5.5628997352031089e+00 + id 14302 + loc 1.9676592946052551e-01 8.8361513614654541e-01 412 + blend 0.0000000000000000e+00 + interp 5.0859562452406892e-01:3.3686911180026002e-01:9.6864411020400887e-03:3.9597209325936600e-01:7.9137584758994750e-01:3.3975155974976978e-01:1.2366292852374927e+00:5.0859053856782366e-01:1.9487650755386854e+00:3.2103370080940014e-01:2.8770072504814466e+00:3.5352325305971655e-01:3.4218219034175670e+00 + CVs 20 + 8.5371794864399630e-01 1.9511067719206035e-01 -1.8723578916494105e-01 + 1.4068247675780952e+00 2.4504820321199389e-01 -3.9881604490381461e-01 + 1.9155110573550145e+00 2.4912248999662229e-01 -6.1216150964654337e-01 + 2.4741354292503051e+00 2.3713892320751728e-01 -8.1600543121719760e-01 + 3.0776885231783258e+00 1.9513963119454480e-01 -9.9160671424599534e-01 + 3.7154627108735814e+00 1.1152562383731335e-01 -1.1172415206540660e+00 + 4.3678181577570347e+00 -2.1132107429693958e-02 -1.1753425052039745e+00 + 5.0094391757002201e+00 -2.0538125482923886e-01 -1.1595121458004392e+00 + 5.6169407737628312e+00 -4.3757000372413346e-01 -1.0725473307142344e+00 + 6.1700616372109405e+00 -7.0996022630402233e-01 -9.2708336932382096e-01 + 6.6466196179319219e+00 -1.0239706317733237e+00 -7.6544129899322166e-01 + 7.0277203259123802e+00 -1.3923095269099073e+00 -6.5863514298461623e-01 + 7.3149997640465179e+00 -1.8092901495128855e+00 -6.3866567443350297e-01 + 7.5354036222733747e+00 -2.2536310676816669e+00 -6.6974100336053166e-01 + 7.7091281646058158e+00 -2.7132746497290396e+00 -7.2283801001877446e-01 + 7.8364341977964562e+00 -3.1738513356846894e+00 -8.0736844232662741e-01 + 7.9157615692761203e+00 -3.6090087635970862e+00 -9.3371279217536240e-01 + 7.9670116546869023e+00 -3.9981314078797103e+00 -1.0813755997326062e+00 + 8.1073639853525705e+00 -4.3454627792167759e+00 -1.1184408720973886e+00 + id 14303 + loc 5.9132832288742065e-01 5.2324599027633667e-01 402 + blend 0.0000000000000000e+00 + interp 3.3668361290191584e-01:3.0276276213447018e-01:4.2420377591175085e-01:2.6574720283334530e-01:1.0331780059610953e+00:3.3668024606578684e-01:1.9517892805227239e+00:2.9436176632435651e-01:2.7277508184963795e+00:2.9368757833017356e-01:3.4952151998598513e+00 + CVs 20 + -5.3557257997458835e-02 3.1354691167270965e-01 -1.9201165522842320e-01 + -1.2481657402866955e-01 6.2288946627050612e-01 -4.1196324498308723e-01 + -1.9928467160060365e-01 9.2428981846209546e-01 -6.5090237503104853e-01 + -2.9290531173511730e-01 1.2073870687523107e+00 -8.9587236000547144e-01 + -4.2834079659643032e-01 1.4518820911922516e+00 -1.1271969445060044e+00 + -6.0770501932687138e-01 1.6387651040729412e+00 -1.3259876645774378e+00 + -8.1751639893774264e-01 1.7603486164728157e+00 -1.4797456775492761e+00 + -1.0536414246904433e+00 1.8215064644345809e+00 -1.5917330961813998e+00 + -1.3190825777564965e+00 1.8274828881647458e+00 -1.6837616482551696e+00 + -1.6041605041778617e+00 1.7746934980431730e+00 -1.7801051888966197e+00 + -1.8867664236619168e+00 1.6319367898070303e+00 -1.9048248371391854e+00 + -2.1340118922113893e+00 1.3624262456450109e+00 -2.0660919590034896e+00 + -2.3547123431682824e+00 9.9865363461562728e-01 -2.2481050250493690e+00 + -2.6076374515957230e+00 6.1447377102456469e-01 -2.4413740107594162e+00 + -2.9483333152967970e+00 2.7244550018255231e-01 -2.6541770150016948e+00 + -3.3957529887715148e+00 3.8254959176702297e-03 -2.9158043121534361e+00 + -3.9112706308051819e+00 -1.9637342473235719e-01 -3.2692233985390766e+00 + -4.4123613309496612e+00 -3.5413659442677536e-01 -3.7322955323096001e+00 + -4.8427588585312868e+00 -5.0163156384207874e-01 -4.2406948348133984e+00 + id 14304 + loc 6.9444906711578369e-01 4.4974997639656067e-01 395 + blend 0.0000000000000000e+00 + interp 3.9182409227816595e-01:2.5072395277021625e-01:3.0443475058585323e-01:2.7026454226781715e-01:1.1972088510340460e+00:3.9182017403724317e-01:1.9388075598095122e+00:2.8036533902899019e-01:2.3780371100823574e+00:2.7721190824177777e-01:3.0518255546857578e+00 + CVs 20 + -3.3307226560997349e-01 1.3083214157649328e-01 4.0757886033405405e-01 + -6.2876721453213880e-01 2.1339590929091812e-01 7.3208890338374966e-01 + -9.3046571946213252e-01 2.7945854503272860e-01 1.0420307340228696e+00 + -1.2538720433454862e+00 3.4072846407000046e-01 1.3606372297695890e+00 + -1.5956825449866177e+00 3.9139970012060799e-01 1.6831531197932481e+00 + -1.9516538767807481e+00 4.2526294405913967e-01 2.0081900828942425e+00 + -2.3159118411595867e+00 4.3636420670147635e-01 2.3371447464674837e+00 + -2.6804896098306132e+00 4.1589002339737324e-01 2.6681680693074261e+00 + -3.0371702653495207e+00 3.5095798150502278e-01 2.9969680778604619e+00 + -3.3747806314017379e+00 2.2708162742995919e-01 3.3229311446323715e+00 + -3.6776250362626106e+00 3.5302360919807096e-02 3.6468518501689204e+00 + -3.9352855642302114e+00 -2.2017803972320715e-01 3.9637941507162120e+00 + -4.1483004566595714e+00 -5.2529069660174388e-01 4.2639573714590169e+00 + -4.3214671316669326e+00 -8.6504397026598090e-01 4.5364087568064235e+00 + -4.4579500665143197e+00 -1.2249219644280318e+00 4.7682592652396156e+00 + -4.5612410492381237e+00 -1.5887921257957132e+00 4.9427356731476433e+00 + -4.6402751400296296e+00 -1.9392240645010705e+00 5.0486794565650941e+00 + -4.7132019392540734e+00 -2.2616508470485734e+00 5.0973197708895537e+00 + -4.8217749057475867e+00 -2.5622903032660580e+00 5.1619214326987031e+00 + id 14305 + loc 1.9918054342269897e-01 1.1767173558473587e-01 1069 + blend 0.0000000000000000e+00 + interp 3.6769206172320407e-01:3.0695457621195155e-01:4.2580807135845633e-01:3.1124724115679342e-01:1.0252197570230095e+00:2.8001382249931178e-01:1.9996714394999380e+00:3.6768838480258687e-01:2.9847409359531363e+00:3.0242811857260427e-01:3.7153284216584881e+00 + CVs 20 + -2.7575300481914378e-01 3.3536640144245650e-01 -1.4139180581568070e-01 + -5.2259656390028275e-01 6.8235789753680232e-01 -2.5885564577932052e-01 + -7.5191387074053184e-01 1.0251870426113003e+00 -3.7005348937598648e-01 + -9.7766472151279460e-01 1.3177237293160022e+00 -5.1916771014334395e-01 + -1.2027539679255561e+00 1.5114138903770207e+00 -7.3137902852170777e-01 + -1.4029429982687045e+00 1.5779011214362217e+00 -9.8884914530973822e-01 + -1.5126888063926174e+00 1.5105059401999592e+00 -1.2403806264341617e+00 + -1.4637828815246634e+00 1.3576578797267282e+00 -1.4057084447353090e+00 + -1.2905110123304315e+00 1.2144623772162944e+00 -1.4260355648031469e+00 + -1.1134062509002867e+00 1.1152244005701624e+00 -1.3646158741645460e+00 + -9.6771345220748328e-01 1.0273616685153106e+00 -1.2931464483850841e+00 + -8.4559426151091399e-01 9.5478053286234499e-01 -1.2073239951992178e+00 + -7.3530185818744886e-01 8.9115396632032640e-01 -1.1301117161276815e+00 + -5.7191231838189982e-01 7.4141351543826983e-01 -1.1273733570986821e+00 + -3.0612762088766404e-01 4.4694461500819815e-01 -1.2549458477836670e+00 + 2.1687297960564400e-02 8.0806758189437722e-02 -1.5982037494434453e+00 + 3.1009213915039235e-01 -1.7429600068570428e-01 -2.2311202512802675e+00 + 4.4207086586271155e-01 -1.6834630114829330e-01 -2.8873505984046117e+00 + 4.9348699781179028e-01 -1.1873510697126877e-01 -3.1550573130017598e+00 + id 14306 + loc 1.3648545742034912e-01 3.5325177013874054e-02 401 + blend 0.0000000000000000e+00 + interp 4.1529177795005534e-01:3.5060918396122526e-01:5.3426392350797491e-02:4.1528762503227584e-01:6.9104296394849807e-01:2.3879901266291639e-01:1.0842239114006633e+00:3.9404362936376880e-01:1.9063347349530910e+00:2.8501806734361551e-01:2.7244925907469453e+00:3.6586302375277557e-01:3.0994572503755364e+00 + CVs 20 + -2.7770856718380732e-01 3.2388537807417384e-01 7.2491228006787381e-02 + -5.1486912914304739e-01 6.4250699985604587e-01 1.9133842229197062e-01 + -7.3062213463650461e-01 9.6071329325273325e-01 3.3054060705266175e-01 + -9.3541138784728561e-01 1.2822816806752950e+00 4.7881279698667278e-01 + -1.1310912093253149e+00 1.6074702209876321e+00 6.3263405003655881e-01 + -1.3109137830165152e+00 1.9323804113286089e+00 7.8523884781170850e-01 + -1.4673728416215666e+00 2.2649143654748021e+00 9.3565819399414918e-01 + -1.6136110169927900e+00 2.6313914965627569e+00 1.1013912914293393e+00 + -1.7812038342900101e+00 3.0183150002294004e+00 1.3666299979383856e+00 + -1.9342235518746171e+00 3.2912194888080295e+00 1.8121392116921251e+00 + -1.9851181981466601e+00 3.3398163671089089e+00 2.3657215620790812e+00 + -1.8937783944350195e+00 3.1695417349180555e+00 2.8971884968223809e+00 + -1.6950897642747011e+00 2.8518953155787803e+00 3.3188836678098412e+00 + -1.4509757310155778e+00 2.4833569256134025e+00 3.5747241856485190e+00 + -1.1757575997053502e+00 2.0973093143086619e+00 3.6283826158739809e+00 + -8.7335542667233124e-01 1.5590843926504601e+00 3.5284104278790904e+00 + -6.5818554307293486e-01 7.4518304657978018e-01 3.5659032957318391e+00 + -6.5108417771303262e-01 2.6733192763034919e-01 3.9838616854919522e+00 + -6.6647175199635234e-01 6.4353630139353424e-01 4.3241860839168158e+00 + id 14307 + loc 9.6657299995422363e-01 5.9031414985656738e-01 404 + blend 0.0000000000000000e+00 + interp 3.6993842568870533e-01:2.6185145058396697e-01:9.4093726163224645e-04:3.1331203130423874e-01:8.1463477815231045e-01:3.6993472630444846e-01:1.4425005470448715e+00:2.7435793784863882e-01:2.0593371336361757e+00:1.6042602458411837e-01:2.9581727276658958e+00 + CVs 20 + -1.9431861895420705e-02 8.7843846480133242e-02 -2.0980187079803667e-01 + -2.2813279055354990e-02 1.9944207270212969e-01 -3.7453075032838701e-01 + -2.0730927556153550e-02 3.0292917643393025e-01 -5.1332373619438698e-01 + -1.6706869280903258e-02 4.0361664186290902e-01 -6.3407469498692759e-01 + -5.6968464826460674e-03 5.0300311179101398e-01 -7.3618893579806299e-01 + 1.7643392804048252e-02 5.9994354431003882e-01 -8.2005027391888397e-01 + 5.8816283207725029e-02 6.9227702198955798e-01 -8.8581581620540684e-01 + 1.2241632107909772e-01 7.7715908619326546e-01 -9.3235865021848374e-01 + 2.0950917838660477e-01 8.5250925726964499e-01 -9.5686811952269180e-01 + 3.1609879044646022e-01 9.1784695365156277e-01 -9.5585790301177620e-01 + 4.3503370079749115e-01 9.6971847833940195e-01 -9.2946186441453249e-01 + 5.5658764894316803e-01 1.0023341898166558e+00 -8.8708793756155802e-01 + 6.7200470190998673e-01 1.0126551285331060e+00 -8.4682280840602875e-01 + 7.7782909045795856e-01 1.0105474954259490e+00 -8.1661521199036757e-01 + 8.7485333189308356e-01 1.0100680312806685e+00 -7.9250588774536046e-01 + 9.6490529645185963e-01 1.0203372504058772e+00 -7.6882174628528621e-01 + 1.0483620663619411e+00 1.0410290219200053e+00 -7.5078817338252390e-01 + 1.1261067786468890e+00 1.0650295298319001e+00 -7.4741594860868521e-01 + 1.1922757070893411e+00 1.1459906770135153e+00 -6.9974480063063438e-01 + id 14308 + loc 3.6711864173412323e-02 8.0499666929244995e-01 1079 + blend 0.0000000000000000e+00 + interp 4.1577597816123790e-01:3.8800300495514672e-01:6.6111131851931626e-02:3.8428602762358938e-01:8.4374239145655949e-01:3.9830074973816160e-01:1.8340044452986326e+00:3.3370237716920964e-01:2.1050369036615932e+00:4.1577182040145633e-01:2.9167525231799400e+00:2.9634773427976563e-01:3.4099998691559268e+00 + CVs 20 + 6.6873330579903453e-02 4.2699981892557859e-01 2.7808525432512154e-01 + 1.7364061180703119e-01 7.7790488984817818e-01 4.3388391374907676e-01 + 3.0475992521756534e-01 1.0954868848892858e+00 5.2554718278169799e-01 + 4.4997058872512286e-01 1.3959857848827113e+00 5.7961453544726338e-01 + 6.0121420370718559e-01 1.6656923249063169e+00 5.9238148454086159e-01 + 7.4284013490510659e-01 1.8843535319083364e+00 5.6434344628168431e-01 + 8.5318460972039900e-01 2.0322210414755446e+00 5.0482733567269999e-01 + 9.1328667931666008e-01 2.1061888352841573e+00 4.3795359638550613e-01 + 9.1680986116735896e-01 2.1280477521069896e+00 3.9476566979136174e-01 + 8.7801276743039480e-01 2.1357275844852985e+00 3.8705535322945728e-01 + 8.2210694630342585e-01 2.1530373525953288e+00 3.9130036066931073e-01 + 7.6165796954307075e-01 2.1739887529840796e+00 3.7526950568772099e-01 + 6.9408144324324328e-01 2.1814237640600780e+00 3.2197013644197836e-01 + 6.1285644178591281e-01 2.1636253261724274e+00 2.2669700200094045e-01 + 5.1546003427488118e-01 2.1222728557242454e+00 8.8966194904144480e-02 + 4.0837493550034448e-01 2.0834643250575176e+00 -9.7026421813108277e-02 + 3.0638880285725789e-01 2.0513116595947172e+00 -3.6036797365504381e-01 + 2.1356948322842897e-01 1.9086623926670923e+00 -6.5769464471302896e-01 + 1.0565793382329655e-01 1.6232869718383027e+00 -7.1692254365289365e-01 + id 14309 + loc 9.4839972257614136e-01 2.1710990369319916e-01 396 + blend 0.0000000000000000e+00 + interp 4.0487194619419548e-01:2.5618234001094015e-01:1.7783783452934399e-01:3.6855401559733764e-01:8.9996071591649884e-01:3.1930916309779528e-01:1.5399813984161981e+00:4.0486789747473356e-01:2.0037646426052609e+00:2.8366366468941934e-01:2.6433726263415789e+00:3.0364890326760752e-01:3.3984431404900564e+00 + CVs 20 + -7.3630751266838335e-01 3.0986793116067579e-01 4.8341027667381087e-01 + -1.2704159133542838e+00 4.9298706559084826e-01 9.0843772953744528e-01 + -1.7430070504587047e+00 6.1479057624328526e-01 1.3298740297326646e+00 + -2.2233647911009053e+00 6.8425550816173664e-01 1.7796742450330822e+00 + -2.7088008084152171e+00 6.8570890403699591e-01 2.2462295950656701e+00 + -3.1902014978520254e+00 6.1192733131284127e-01 2.7173531819088059e+00 + -3.6561327453837462e+00 4.6221132627956418e-01 3.1800318805432122e+00 + -4.0954148856788075e+00 2.3845036042510448e-01 3.6175168220086800e+00 + -4.4923725393314431e+00 -5.1811345422100308e-02 4.0118293118409518e+00 + -4.8265902206352163e+00 -3.8948019709231629e-01 4.3508733960550208e+00 + -5.0914197220816044e+00 -7.4739276764361851e-01 4.6301603293960465e+00 + -5.3058878253396404e+00 -1.1041851309540793e+00 4.8482312626597448e+00 + -5.4957933500491212e+00 -1.4508797348188271e+00 5.0044007787939400e+00 + -5.6745070033853739e+00 -1.7777457363005955e+00 5.1094520001489698e+00 + -5.8462113144893166e+00 -2.0794380966464092e+00 5.1802128897123456e+00 + -6.0245239105040369e+00 -2.3558276881205127e+00 5.2312008983415996e+00 + -6.2221587225608506e+00 -2.6099701105458779e+00 5.2770848776275487e+00 + -6.4381554495813873e+00 -2.8465892900725378e+00 5.3294652232687225e+00 + -6.6331075129234955e+00 -3.0566761478771793e+00 5.3446365931737017e+00 + id 14310 + loc 9.5478743314743042e-01 8.8849729299545288e-01 399 + blend 0.0000000000000000e+00 + interp 5.5333343897705989e-01:4.9268635467727212e-01:2.2903116707372151e-01:3.5380708800662991e-01:9.6798795175363395e-01:3.7476219341881456e-01:1.8555076350283750e+00:5.5332790564267009e-01:2.1773114956058071e+00:5.4171418077363087e-01:2.6155535674003518e+00:5.2211309828366204e-01:3.0118774509887936e+00:4.0397221409225564e-01:3.4195299859902750e+00 + CVs 20 + -1.6908287926550120e-01 3.6153011064352936e-01 -2.6879927340363963e-01 + -3.1353270110821341e-01 6.8235885892001324e-01 -5.5296507542827933e-01 + -4.3632572608317777e-01 9.4761614268401839e-01 -8.7770366458289906e-01 + -5.4312701017582887e-01 1.1444786172469250e+00 -1.2435474010857139e+00 + -6.3672393300627206e-01 1.2610644262723159e+00 -1.6343429025879255e+00 + -7.1772423303864297e-01 1.2937583830136261e+00 -2.0311945413274715e+00 + -7.8874980946292073e-01 1.2493329033883971e+00 -2.4234028235195479e+00 + -8.5796633179461701e-01 1.1399282888823565e+00 -2.8138637120192680e+00 + -9.2709955761383389e-01 9.7952176705977290e-01 -3.1961495106376132e+00 + -9.8129602838739782e-01 7.8873523519924549e-01 -3.5436033015879955e+00 + -1.0175627325029437e+00 5.7564541618493792e-01 -3.8567124620488680e+00 + -1.0749174974689926e+00 2.9403045246069393e-01 -4.1895997487939258e+00 + -1.2062149024019682e+00 -1.0715305378958784e-01 -4.5744082288529411e+00 + -1.4296371198950997e+00 -5.8649015930537540e-01 -4.9745807130512985e+00 + -1.7175328116598276e+00 -1.0765116023232484e+00 -5.3367253483456265e+00 + -2.0956337565787759e+00 -1.5969382245993440e+00 -5.6607483346980700e+00 + -2.7314131564676583e+00 -2.1978154362875291e+00 -5.9890350058614379e+00 + -3.7096405684363534e+00 -2.6534347329517320e+00 -6.3392247275636366e+00 + -4.1483399042929392e+00 -2.7772996510911043e+00 -6.5370091806781350e+00 + id 14311 + loc 5.2062016725540161e-01 3.0502748489379883e-01 381 + blend 0.0000000000000000e+00 + interp 4.0531928925445664e+00:4.0531828925445668e+00:1.6795036407352106e+00:3.2428039238457189e+00:1.7202132847994400e+00:2.8106785227460009e+00:1.7582839353969533e+00:3.9995550424694937e-01:1.9729567738542664e+00:2.7707986149834496e-01:2.2255095993421738e+00:4.2441400889594905e-01:2.8756591627314378e+00:3.8780438571500042e-01:3.3652611841074846e+00:6.9739513563093802e-01:3.8439402281658563e+00 + CVs 20 + -8.1650853552860847e-01 9.5497593779672124e-02 7.3306466837105555e-01 + -1.3126548015135253e+00 5.3026494112354050e-02 1.2729556685078010e+00 + -1.7462460265247908e+00 -2.2130579516867588e-02 1.7992233785490945e+00 + -2.2211162193052036e+00 -7.1391483822915047e-02 2.3723578221454305e+00 + -2.7361686358498876e+00 -9.5802784158159460e-02 2.9787615166553061e+00 + -3.2752441889077253e+00 -1.1254336529553799e-01 3.6041269918855239e+00 + -3.8137650884164409e+00 -1.5726451717468326e-01 4.2372559986638674e+00 + -4.3265062674578587e+00 -2.7007977046289677e-01 4.8583333051367124e+00 + -4.7865941106582248e+00 -4.6904009768829247e-01 5.4367161597743721e+00 + -5.1763247974929687e+00 -7.3080856899155355e-01 5.9500558648601434e+00 + -5.5192679168654557e+00 -1.0092328220346185e+00 6.3999898851005277e+00 + -5.8679363913481861e+00 -1.3043560266095502e+00 6.7958888918861113e+00 + -6.2494989177255302e+00 -1.6581438058477043e+00 7.1407287182859154e+00 + -6.6396545898178658e+00 -2.1015531844910820e+00 7.4088476143892308e+00 + -6.9908171510160040e+00 -2.6176534302593022e+00 7.5641560136819974e+00 + -7.2844615479089327e+00 -3.1671563381434122e+00 7.5959833607613065e+00 + -7.5356971581216747e+00 -3.7417431062651034e+00 7.5298308864984005e+00 + -7.7530155016925981e+00 -4.3758869462324483e+00 7.4451701651409419e+00 + -7.9035915438615794e+00 -5.0738394293202838e+00 7.4665807727433924e+00 + id 14312 + loc 9.7843915224075317e-01 4.9034535884857178e-01 378 + blend 0.0000000000000000e+00 + interp 4.5895228244432640e-01:4.5894769292150195e-01:6.5392848007634008e-02:3.5796425849269625e-01:7.4491551905836229e-01:3.8252792494673060e-01:1.4041641412194763e+00:3.1571880838846855e-01:2.2479188114468740e+00:2.5107502916465352e-01:2.9922995167779902e+00:2.6348497354824635e-01:3.6745867593785482e+00 + CVs 20 + -4.5814250767878045e-01 4.9261134518919208e-01 -8.5328715242584396e-03 + -9.0597517334034350e-01 9.2081164511194979e-01 -1.5864451231624305e-02 + -1.3600838426196824e+00 1.2931404914015623e+00 -1.2216883761564656e-02 + -1.8025311694366688e+00 1.6245201722025238e+00 -1.8132714239396330e-02 + -2.2209683493693064e+00 1.9153530121734730e+00 -5.4534768492635943e-02 + -2.6234399127635517e+00 2.1534430102611779e+00 -1.2784432268238688e-01 + -3.0154536781475310e+00 2.3275126581164503e+00 -2.3327297260859708e-01 + -3.3953208131056574e+00 2.4350734072178799e+00 -3.5987896507989708e-01 + -3.7674570485738439e+00 2.4800456332921912e+00 -4.9634784045730584e-01 + -4.1437055537907987e+00 2.4647941051596649e+00 -6.3545836827416069e-01 + -4.5257362492787454e+00 2.3852700470909074e+00 -7.7082244484173612e-01 + -4.8965920493981265e+00 2.2387859231906062e+00 -8.9136922622530046e-01 + -5.2345369713180201e+00 2.0352646632429057e+00 -9.8502315017124398e-01 + -5.5237138621782726e+00 1.7993058638991068e+00 -1.0432282163235742e+00 + -5.7610322874680282e+00 1.5568560513320526e+00 -1.0665081939990853e+00 + -5.9601776165584344e+00 1.3186591540892438e+00 -1.0728166902251672e+00 + -6.1432158614852401e+00 1.0866013277382192e+00 -1.0924072851159563e+00 + -6.3312240993965121e+00 8.8013913371310171e-01 -1.1248240286622018e+00 + -6.5695878944125754e+00 7.6915173471636589e-01 -1.0915488146816665e+00 + id 14313 + loc 2.3748600482940674e-01 1.8654440343379974e-01 379 + blend 0.0000000000000000e+00 + interp 3.2373703884943894e-01:1.9910960137624870e-01:1.1059600950877579e-01:2.3564274757539205e-01:1.1015369344069967e+00:2.1470281953999540e-01:2.0013280448185222e+00:1.9630276921684114e-01:2.9055858790693891e+00:3.2373380147905045e-01:3.5235949836004683e+00 + CVs 20 + 1.2982350832366593e-01 3.2715823083884765e-01 3.8859383130058878e-01 + 3.0276612399551778e-01 5.8766553776895514e-01 7.4212384820034960e-01 + 5.3495908517122848e-01 7.5824579275252413e-01 1.0888479920534986e+00 + 8.1449900317581159e-01 8.6799702550103652e-01 1.4354466164950594e+00 + 1.0953222813914898e+00 9.7819082154600334e-01 1.7682870993367796e+00 + 1.3274366429446027e+00 1.1242916592570578e+00 2.0841659805770676e+00 + 1.4816216549998877e+00 1.3101749377441645e+00 2.3925166681908734e+00 + 1.5448461200869417e+00 1.5291169790969155e+00 2.6896823825040395e+00 + 1.5168339628720431e+00 1.7740313792805922e+00 2.9559241283579878e+00 + 1.4096264403210017e+00 2.0442760026097808e+00 3.1841084223684453e+00 + 1.2466362459403999e+00 2.3348318180719581e+00 3.3787492478172263e+00 + 1.0597228571558575e+00 2.6355284013290854e+00 3.5490144165423301e+00 + 8.6716445328875968e-01 2.9349004600359145e+00 3.7217624547493031e+00 + 6.6868301747125591e-01 3.2053596437534457e+00 3.9284461418962078e+00 + 4.0602730521054631e-01 3.3952067462130042e+00 4.2004164544508411e+00 + -1.0935523771361488e-01 3.3318646192360375e+00 4.5303232025532134e+00 + -8.9760869229500950e-01 2.6903337774765337e+00 4.8562388297188575e+00 + -1.3216850218113210e+00 1.5789094619920037e+00 5.1064846878755752e+00 + -1.1667117633933528e+00 1.1150291699630306e+00 5.1465273865744905e+00 + id 14314 + loc 4.5219486951828003e-01 6.5212774276733398e-01 412 + blend 0.0000000000000000e+00 + interp 4.4577581735377936e-01:3.4053969121166261e-01:3.5320799179168971e-02:3.0538565144756724e-01:9.6682651093787286e-01:3.7431970241239559e-01:1.5740736318194011e+00:2.9061377495451807e-01:2.0044462479971870e+00:3.0421329535669800e-01:2.9982131930367664e+00:4.4577135959560582e-01:3.5795870366182987e+00 + CVs 20 + 7.1911347980426121e-01 1.3232339530024706e-01 -2.1916025841677078e-01 + 1.1814266661993458e+00 1.6820441216156584e-01 -4.3464995126348410e-01 + 1.5947669522067274e+00 1.8726972114543633e-01 -6.4269407020607472e-01 + 2.0400913441245918e+00 2.2105938743767783e-01 -8.3825560014188027e-01 + 2.5214489366751671e+00 2.6063571095977661e-01 -1.0095694875844721e+00 + 3.0398136122926354e+00 2.9511698223739158e-01 -1.1424451697450961e+00 + 3.5886633147840299e+00 3.1337132517639987e-01 -1.2229879771179613e+00 + 4.1537581508616048e+00 3.0526072273172855e-01 -1.2430550959627618e+00 + 4.7167803225583853e+00 2.6405613986603149e-01 -1.2014014871723055e+00 + 5.2632610864807781e+00 1.8616089335695052e-01 -1.1021503994175945e+00 + 5.7856802970362837e+00 6.1019553993248765e-02 -9.6219873008398604e-01 + 6.2892339549331115e+00 -1.4423575861666427e-01 -8.2292984934722169e-01 + 6.7749814053835289e+00 -4.6214398695265224e-01 -7.3076393955824559e-01 + 7.2274082317478836e+00 -8.8440884120867502e-01 -6.9240710199206890e-01 + 7.6343604092080257e+00 -1.3854271865511008e+00 -6.8794375779894534e-01 + 7.9860153490522503e+00 -1.9448243891571142e+00 -7.1713321357928950e-01 + 8.2748493440436270e+00 -2.5380974141697048e+00 -7.9273916763596475e-01 + 8.5044162465288284e+00 -3.1307530785622952e+00 -9.0456993089025672e-01 + 8.7548716107413629e+00 -3.5808609223401446e+00 -8.6096930185396781e-01 + id 14315 + loc 9.9700409173965454e-01 4.9941095709800720e-01 400 + blend 0.0000000000000000e+00 + interp 4.9561514578246857e-01:2.0789469024242005e-01:6.5989680912505089e-01:4.0597093299333153e-01:1.0345895174470805e+00:4.9561018963101078e-01:1.9376589182385511e+00:4.3873066983421610e-01:2.0951806710958598e+00:3.3118672845349095e-01:2.6761040035627088e+00:2.8727000421358062e-01:3.6231794396636996e+00 + CVs 20 + 2.0302255816205084e-01 1.8754960205608145e-01 3.0420577593758957e-01 + 3.9102748870024928e-01 3.6054099333112122e-01 5.9808962182934422e-01 + 5.6354979306193376e-01 5.2492285060274591e-01 9.0596408026247000e-01 + 7.2320292471239622e-01 6.7736963322488886e-01 1.2351290658463645e+00 + 8.7228655194192706e-01 8.1094910322138059e-01 1.5831673468238625e+00 + 1.0098679186134067e+00 9.2382500985034555e-01 1.9490318874608299e+00 + 1.1324452043405722e+00 1.0139677044194690e+00 2.3347542465924427e+00 + 1.2358418709664207e+00 1.0709693053703138e+00 2.7425069817724146e+00 + 1.3166460576053316e+00 1.0789777916184351e+00 3.1690070058752848e+00 + 1.3731504658283911e+00 1.0257288329832615e+00 3.6033986369943989e+00 + 1.4051393932251932e+00 9.0456370762649452e-01 4.0287275862669372e+00 + 1.4130826671680614e+00 7.1352786658604272e-01 4.4245836019903404e+00 + 1.3958123278306156e+00 4.5795563338695144e-01 4.7713203798046040e+00 + 1.3499964368999509e+00 1.5180054480578509e-01 5.0537149557272585e+00 + 1.2758751187291060e+00 -1.8559876159025057e-01 5.2589291006599215e+00 + 1.1852903677758673e+00 -5.3238462623016325e-01 5.3772610393593521e+00 + 1.0972208826926435e+00 -8.6852524614650717e-01 5.4194876456329482e+00 + 1.0172046458670434e+00 -1.1944896481912690e+00 5.4409246305097234e+00 + 9.2269536141486808e-01 -1.5568757494745413e+00 5.5954934367744436e+00 + id 14316 + loc 9.4107739627361298e-02 4.7111716121435165e-02 395 + blend 0.0000000000000000e+00 + interp 4.6075054330471454e-01:3.0892552616820257e-01:8.9068146828420014e-02:2.8206407930421212e-01:7.6912742150837432e-01:2.9987220483045390e-01:1.1713603485848503e+00:3.0253811709795519e-01:2.0000079428210382e+00:2.6989703933267373e-01:2.9778177378304491e+00:4.6074593579928153e-01:3.8326475760388501e+00 + CVs 20 + -2.2608354300752814e-01 1.5253585019704696e-01 -2.7453835417174044e-01 + -4.3247976774930008e-01 3.0349229309761672e-01 -5.6480917224852667e-01 + -6.3538318089343948e-01 4.5253564801139889e-01 -8.6171850732886801e-01 + -8.3842220953307078e-01 5.9719902268159653e-01 -1.1607157544648667e+00 + -1.0432827401005051e+00 7.3479774648679796e-01 -1.4603508510113210e+00 + -1.2532564474665246e+00 8.6259628329372162e-01 -1.7587301856951076e+00 + -1.4696422419404471e+00 9.7417049045862969e-01 -2.0550720145398573e+00 + -1.6911611525835037e+00 1.0565901913732485e+00 -2.3515657488982948e+00 + -1.9220905824857084e+00 1.0934560734324095e+00 -2.6498993358330081e+00 + -2.1726635490459305e+00 1.0671816892826229e+00 -2.9408038732913715e+00 + -2.4440292235412340e+00 9.6893678959062424e-01 -3.2054751104117050e+00 + -2.7250517350884524e+00 8.1029650843216094e-01 -3.4350597204241744e+00 + -3.0089302295164191e+00 6.1077843907138085e-01 -3.6343442510872630e+00 + -3.2968731872884973e+00 3.8458773931871537e-01 -3.8059995913765947e+00 + -3.5850938625373727e+00 1.3861044743736217e-01 -3.9498985788769927e+00 + -3.8597128252125232e+00 -1.2884164451948710e-01 -4.0707587784146053e+00 + -4.1070632526672277e+00 -4.1669191237232006e-01 -4.1773810355486933e+00 + -4.3262150011991958e+00 -6.9960856687731710e-01 -4.2835142555414665e+00 + -4.5408457822636219e+00 -8.8354415065604419e-01 -4.4166054353665922e+00 + id 14317 + loc 7.8528410196304321e-01 7.5261503458023071e-01 393 + blend 0.0000000000000000e+00 + interp 4.2749663372355018e-01:4.2749235875721298e-01:6.2509169370646633e-01:3.2061489633999363e-01:1.0016088687185396e+00:3.1052092591382835e-01:1.6881309498966819e+00:3.0436816412856388e-01:2.1658587962661042e+00:3.2325247413966152e-01:2.9509545497395449e+00:3.1476216589426131e-01:3.9759434189996572e+00 + CVs 20 + -2.6229861204684446e-01 2.9561420796730808e-01 -2.5213124080509708e-01 + -4.9718145771721534e-01 6.0594257185277223e-01 -4.6734629437999653e-01 + -7.1396931668772279e-01 9.5162586502259883e-01 -6.7764881787556308e-01 + -9.2456692163984555e-01 1.3362629243950546e+00 -8.9457811046917479e-01 + -1.1492104469991404e+00 1.7541411364115853e+00 -1.1171336400619341e+00 + -1.4069351352975419e+00 2.1970514154559169e+00 -1.3471411801471507e+00 + -1.7165871885514012e+00 2.6549169279219322e+00 -1.5919443353336522e+00 + -2.1061879907319065e+00 3.1036687772232918e+00 -1.8659737049529848e+00 + -2.5931215444902977e+00 3.4952156946238526e+00 -2.1824280502384328e+00 + -3.1492371442378162e+00 3.7872009039695591e+00 -2.5491627816121900e+00 + -3.7280623664596826e+00 3.9656879073176943e+00 -2.9834858668795445e+00 + -4.3076724052801483e+00 4.0127597654924791e+00 -3.5000375593679496e+00 + -4.8642645263408157e+00 3.8963048111108725e+00 -4.0763894278686816e+00 + -5.3403568318823496e+00 3.6152141322698785e+00 -4.6530031365749789e+00 + -5.6912023344204563e+00 3.2086552694269175e+00 -5.1815892265014671e+00 + -5.9410253809884725e+00 2.6943408556074235e+00 -5.6517438824989163e+00 + -6.1663805079470455e+00 2.0621101343905397e+00 -6.0455722513066341e+00 + -6.4038704325936129e+00 1.3803862197699552e+00 -6.2915337550757577e+00 + -6.5180258546278402e+00 8.9370055035933360e-01 -6.3250692557777013e+00 + id 14318 + loc 4.7010949254035950e-01 8.1790059804916382e-01 401 + blend 0.0000000000000000e+00 + interp 5.0157355342175680e-01:4.4445913665364745e-01:8.4215133144595056e-03:3.5858926727312690e-01:9.0035219441413439e-01:3.0758087599836736e-01:1.5103499440846069e+00:3.8864900146074760e-01:2.1350540925747516e+00:5.0156853768622256e-01:2.8662455385799008e+00:3.4283649037267583e-01:3.2400679787972781e+00 + CVs 20 + -4.9960467828651392e-02 3.2065029466772305e-01 -2.6784848294198538e-01 + -8.5687082736999848e-02 6.4052946999472493e-01 -5.4438914220076740e-01 + -1.0992617687797801e-01 9.5374793788403367e-01 -8.3222448580510378e-01 + -1.2233949315974574e-01 1.2457136672192686e+00 -1.1414656467945046e+00 + -1.2533057396183811e-01 1.4994890275236044e+00 -1.4873490336989335e+00 + -1.4208709922526819e-01 1.7079234696638783e+00 -1.8781502879946095e+00 + -2.1699682618430749e-01 1.8698183004327067e+00 -2.3048790185485215e+00 + -3.8689505445811134e-01 1.9754594438400985e+00 -2.7391318010418333e+00 + -6.6030402210071026e-01 2.0066722125010545e+00 -3.1414694253568087e+00 + -1.0184739795046469e+00 1.9516644734845481e+00 -3.4765089959049909e+00 + -1.4256838772108815e+00 1.8112132951735900e+00 -3.7277614950184925e+00 + -1.8369818316549156e+00 1.5912398656819744e+00 -3.9035617280539334e+00 + -2.2213602317031982e+00 1.2956848864625399e+00 -4.0293479697007086e+00 + -2.5792794313227523e+00 9.2516963416620168e-01 -4.1202041830912428e+00 + -2.9232759642351089e+00 4.8958451528826019e-01 -4.1853290337993236e+00 + -3.2564257345382899e+00 2.2921108598063622e-02 -4.2977735212656984e+00 + -3.5628267481970850e+00 -4.0329166096557567e-01 -4.5928892961437455e+00 + -3.8147009544678352e+00 -7.3137692098227458e-01 -5.0611839848868874e+00 + -4.1307274804890053e+00 -1.1057257773617504e+00 -5.4295456391311694e+00 + id 14319 + loc 7.6150113344192505e-01 5.1724332571029663e-01 402 + blend 0.0000000000000000e+00 + interp 3.9625795800299241e-01:3.3483006400067705e-01:5.7209730834624639e-01:2.5207586073490829e-01:1.3129260279288406e+00:2.6598811730285599e-01:2.0068638389387257e+00:2.9745263980118769e-01:2.6446412930603653e+00:3.9625399542341239e-01:3.0048141658899818e+00:2.5301739210940472e-01:3.6730070102507932e+00 + CVs 20 + -9.6434760742643025e-02 2.8918857076636006e-01 -2.0450067078378609e-01 + -2.3956236794366159e-01 5.8572063661086149e-01 -4.2534314655232364e-01 + -4.1039450287617285e-01 8.8286630161824409e-01 -6.6397838650954788e-01 + -6.1433711535200475e-01 1.1472616721482904e+00 -8.9746613905513450e-01 + -8.5967508743817911e-01 1.3435448219446857e+00 -1.0970339667283215e+00 + -1.1520700530227128e+00 1.4678330337273449e+00 -1.2699962141191214e+00 + -1.4737946315181605e+00 1.5168237164368841e+00 -1.4619821542899474e+00 + -1.4795736242362520e+00 1.4884485767206841e+00 -1.4037865409976202e+00 + -1.6866295335888752e+00 1.4373026603239625e+00 -1.4130707999229830e+00 + -1.9713033602265047e+00 1.3264369031097145e+00 -1.4568230361419927e+00 + -2.2002900172759179e+00 1.1683902439150637e+00 -1.5153316098191048e+00 + -2.3499874008733141e+00 9.2109949780356759e-01 -1.6052962981392880e+00 + -2.4233594620759304e+00 5.6994577686031844e-01 -1.7378737841809011e+00 + -2.4917366461341235e+00 1.2636417704747449e-01 -1.9344762786329677e+00 + -2.6533350463863075e+00 -3.7018118464391292e-01 -2.2135846606315188e+00 + -2.9652712222160100e+00 -8.4234816016649749e-01 -2.5702815724544457e+00 + -3.3825255096559017e+00 -1.2387837486257738e+00 -2.9970764765966154e+00 + -3.7957314121739945e+00 -1.5551016803253541e+00 -3.5022577394563541e+00 + -4.1148467164343181e+00 -1.7962305168339046e+00 -4.0570134967235090e+00 + id 14320 + loc 4.1755533218383789e-01 2.0442200824618340e-02 1069 + blend 0.0000000000000000e+00 + interp 3.9134247501035285e-01:2.8979344374663835e-01:2.7268328934568098e-02:3.9133856158560276e-01:9.9559890383595728e-01:2.4669752892713748e-01:1.5586165522737501e+00:2.9683203845234252e-01:2.1505830733302669e+00:3.5450345842375192e-01:2.9373146138738355e+00:3.3872057317943710e-01:3.3711933800638847e+00 + CVs 20 + -3.3929767081664386e-01 3.6714680075758566e-01 -8.5437914325641434e-02 + -6.1096580734355466e-01 7.4146456487447332e-01 -1.2625906515392166e-01 + -8.4865977467926257e-01 1.1260460560180272e+00 -1.3164971494890787e-01 + -1.0947902327963810e+00 1.5146837809797891e+00 -1.4747370627490120e-01 + -1.3918205425709853e+00 1.8877441968661963e+00 -2.2235853305556319e-01 + -1.7591955115475866e+00 2.2052826200626328e+00 -3.8241703159730678e-01 + -2.1754811193123063e+00 2.4104363989591149e+00 -6.5106889781296307e-01 + -2.5642822561202734e+00 2.4484789673777390e+00 -1.0528745862545226e+00 + -2.8156283852947728e+00 2.2968429546693070e+00 -1.5634589400686441e+00 + -2.8848316608131448e+00 2.0030254285993170e+00 -2.0827959319155780e+00 + -2.8100541943013106e+00 1.6102166155740392e+00 -2.5482439024020165e+00 + -2.6105051335966349e+00 1.1130545848932654e+00 -2.9256622510956412e+00 + -2.3549976485114734e+00 5.9106530480844022e-01 -3.1807385363912211e+00 + -2.2323147806512842e+00 2.4292219964589312e-01 -3.4116184470204320e+00 + -2.3701523219278990e+00 2.3435554498434363e-01 -3.7091493444883907e+00 + -2.7390560380973721e+00 6.4541391658819158e-01 -3.8980702691947822e+00 + -3.2037957625471711e+00 1.3068883577553561e+00 -3.6613566616164421e+00 + -3.5598642529589357e+00 1.7212637760086356e+00 -3.2931151613358973e+00 + -3.8013221085808144e+00 1.8598519304301595e+00 -3.6921368054872254e+00 + id 14321 + loc 7.7463304996490479e-01 9.1200011968612671e-01 412 + blend 0.0000000000000000e+00 + interp 3.7999059857237105e-01:3.6295823043347925e-01:1.1340564445533030e-01:3.0648891538862344e-01:8.8954701480914755e-01:3.3528096092451809e-01:1.6272752030271822e+00:3.7947802214947118e-01:1.8998948339747188e+00:3.0214102034414231e-01:2.3059839882655919e+00:3.3141291179694654e-01:3.0785313686133717e+00:3.7998679866638535e-01:3.8139491907038865e+00 + CVs 20 + 7.9971088754232522e-01 1.9516946221368092e-01 -1.4871687213617274e-01 + 1.2769258799978136e+00 2.4956032360673325e-01 -2.7842950379624071e-01 + 1.6714864264811535e+00 2.4446737769764068e-01 -4.1846083385586030e-01 + 2.0865252901142992e+00 2.1948011540334950e-01 -5.7923327552308534e-01 + 2.5204976889582431e+00 1.7371776788437171e-01 -7.6236982897287042e-01 + 2.9729053609553899e+00 1.0667451437745701e-01 -9.6351103108306457e-01 + 3.4429888767740322e+00 1.8835834104322435e-02 -1.1705288513322076e+00 + 3.9251650710367865e+00 -8.9658530266628289e-02 -1.3691786068852358e+00 + 4.4084580074759332e+00 -2.1918895896123547e-01 -1.5484510269690137e+00 + 4.8791437336161234e+00 -3.6673077146157484e-01 -1.6990731699652586e+00 + 5.3203958112009797e+00 -5.2208412647348301e-01 -1.8122050248175086e+00 + 5.7156657099921659e+00 -6.8003662209763238e-01 -1.8899982114036775e+00 + 6.0647652841807060e+00 -8.6032026684001184e-01 -1.9539065511575637e+00 + 6.3778046566978013e+00 -1.0915660945964638e+00 -2.0256164570941650e+00 + 6.6537266981370173e+00 -1.3783895546695952e+00 -2.1062577652929617e+00 + 6.8800112408815757e+00 -1.7010563683360140e+00 -2.1849369657701270e+00 + 7.0471502231231051e+00 -2.0354457125118683e+00 -2.2550957647538303e+00 + 7.1572073827891245e+00 -2.3711185288138235e+00 -2.3203104335361688e+00 + 7.2137096391000384e+00 -2.7176726802273929e+00 -2.3970419138173864e+00 + id 14322 + loc 3.3180582523345947e-01 2.4240434169769287e-01 381 + blend 0.0000000000000000e+00 + interp 4.4489247589835534e-01:2.8176354945205773e-01:9.4304563570671296e-02:3.8400893503891093e-01:9.9984161906184821e-01:4.4488802697359636e-01:1.8299975680639968e+00:4.1067976905249720e-01:2.3371072909102755e+00:3.9399750427846097e-01:3.0382512975246545e+00:4.2441400889594905e-01:3.8561133648140680e+00 + CVs 20 + -7.0992461238550741e-01 1.9007344104581589e-01 -7.7072253545639902e-01 + -1.2234970604191229e+00 2.2618124046630425e-01 -1.2627218745736990e+00 + -1.6783018571563026e+00 1.9051251127200691e-01 -1.6947643787759379e+00 + -2.1206537330893638e+00 1.2435020587537893e-01 -2.1631801304187190e+00 + -2.5391228184003340e+00 3.2104041183466325e-02 -2.6655857195554704e+00 + -2.9317795118003152e+00 -7.5415069407084978e-02 -3.1944113222181323e+00 + -3.3103257876851431e+00 -1.8884961659185262e-01 -3.7381027799946742e+00 + -3.6904748211793836e+00 -3.0757001620095581e-01 -4.2877638061676144e+00 + -4.0803378650952284e+00 -4.4721575434789407e-01 -4.8447228871151973e+00 + -4.4721404269784610e+00 -6.4412071166335139e-01 -5.4139794986762055e+00 + -4.8508919918570284e+00 -9.3555906573990111e-01 -5.9857371127877768e+00 + -5.2103891904385762e+00 -1.3427035892716914e+00 -6.5353948863739078e+00 + -5.5337301146555262e+00 -1.8816806264489190e+00 -7.0334199030404463e+00 + -5.7972436446946176e+00 -2.5398600917163150e+00 -7.4410450137801059e+00 + -5.9926371484813101e+00 -3.2533817786155597e+00 -7.7400397564838510e+00 + -6.1430197813492997e+00 -3.9731611986018089e+00 -7.9506673055877544e+00 + -6.2930962995759607e+00 -4.6975771442047458e+00 -8.0962901397294971e+00 + -6.4966470815509556e+00 -5.4325934171141670e+00 -8.1772697212465104e+00 + -6.7086708914951476e+00 -6.1311322644814776e+00 -8.1891749402083587e+00 + id 14323 + loc 8.1212669610977173e-01 9.4174844026565552e-01 378 + blend 0.0000000000000000e+00 + interp 2.7892328924175391e-01:2.6674163883653890e-01:1.3500762213537476e-01:2.2694148157961569e-01:1.0792146428773561e+00:2.7440836438518168e-01:2.2673801105789626e+00:2.1564682340747743e-01:2.9005077839378792e+00:2.7892050000886148e-01:3.7614848353249259e+00 + CVs 20 + 5.7832458758167060e-01 3.2480053304852263e-01 6.8830815369728071e-02 + 1.0734756682200191e+00 5.4301308534789172e-01 1.0531726391529997e-01 + 1.5494373175275356e+00 6.9403328224613148e-01 1.1044547839302327e-01 + 2.0295274187038368e+00 8.1598544053285071e-01 9.3973762462115473e-02 + 2.4937973869621275e+00 9.2921525633201230e-01 6.8367944047645346e-02 + 2.9303584204708151e+00 1.0377555182803002e+00 4.3819015567328701e-02 + 3.3464506521294184e+00 1.1302857437203455e+00 2.6921647942979576e-02 + 3.7480615117935776e+00 1.1917288779703128e+00 2.2673742802355235e-02 + 4.1276687622773007e+00 1.2150663873348784e+00 3.5537724309914198e-02 + 4.4662452174232321e+00 1.2068812426217392e+00 7.1055392172938880e-02 + 4.7460019624932599e+00 1.1874889329927070e+00 1.3188945573152977e-01 + 4.9683535901549050e+00 1.1820513003839761e+00 2.1815101247561686e-01 + 5.1523217478257681e+00 1.1830187035054853e+00 3.3541657451649531e-01 + 5.2996894828768779e+00 1.1040885722928728e+00 4.8249649989771304e-01 + 5.3822502886955839e+00 8.3667936008682364e-01 6.3818535062935067e-01 + 5.4010360371460191e+00 3.6711185932950707e-01 8.1488442184802601e-01 + 5.4049146618756438e+00 -2.3433375363526832e-01 1.0705633964050660e+00 + 5.4786767852911167e+00 -8.6961175589818884e-01 1.3959565535762781e+00 + 5.6862547430838086e+00 -1.2878631786503694e+00 1.6118315300145019e+00 + id 14324 + loc 6.7873078584671021e-01 2.5885608792304993e-01 399 + blend 0.0000000000000000e+00 + interp 4.6820043039821774e-01:4.2588965029242215e-01:1.3965477367952328e-01:4.1103989303809740e-01:7.6724559299484907e-01:4.6819574839391376e-01:1.0255835517145131e+00:3.5451914410516966e-01:1.6398356324216861e+00:3.9304237335890302e-01:2.0220031737231521e+00:3.3813463134683996e-01:2.9999344630135476e+00:3.3011976654396780e-01:3.8749527033146269e+00 + CVs 20 + 9.2320551501229808e-02 2.3197135874091751e-01 2.3901231037213366e-01 + 1.8739316531510330e-01 4.5805676834103176e-01 4.4999421846698712e-01 + 2.8040792411306226e-01 6.8208766576191504e-01 6.6817052996362503e-01 + 3.7518321103736985e-01 9.1136085533347866e-01 9.1910773103337207e-01 + 4.8181139271007711e-01 1.1480770872548258e+00 1.2011635846704878e+00 + 6.0951320777765805e-01 1.3889083277343834e+00 1.5063936510265705e+00 + 7.6295556467812087e-01 1.6244857641564130e+00 1.8321412844295821e+00 + 9.4537834145790678e-01 1.8385517524984123e+00 2.1786552091610787e+00 + 1.1588835047709591e+00 2.0084295304112474e+00 2.5441745999862531e+00 + 1.3985610862300513e+00 2.1107049503453568e+00 2.9233143662794516e+00 + 1.6523900820793176e+00 2.1224997156450538e+00 3.3014895567967795e+00 + 1.8995496334603903e+00 2.0329569704599479e+00 3.6516673582608670e+00 + 2.1165585854713025e+00 1.8593886651636984e+00 3.9497248544062860e+00 + 2.2857634330811329e+00 1.6378451558273233e+00 4.1847961438379890e+00 + 2.4040235115970980e+00 1.4021859268785279e+00 4.3573689041772274e+00 + 2.4939945487075041e+00 1.1764321759286647e+00 4.4746234234412618e+00 + 2.5926771024359034e+00 9.7432852016704552e-01 4.5294167170096307e+00 + 2.7057197942887505e+00 8.0086996763818452e-01 4.5829653611042644e+00 + 2.6404568328535287e+00 7.9426909132470325e-01 4.8878573248034298e+00 + id 14325 + loc 9.5606124401092529e-01 9.8982357978820801e-01 400 + blend 0.0000000000000000e+00 + interp 4.1755157721073938e-01:2.8966357956272853e-01:9.2041965375696644e-02:3.5518839340519226e-01:9.8012280915909566e-01:4.1754740169496729e-01:1.0525748936373540e+00:2.5281782357602772e-01:2.0351757582239012e+00:1.8352730998428907e-01:2.9981169956237803e+00:3.7466461935594469e-01:3.5810370975714449e+00 + CVs 20 + -2.0008575363445694e-01 2.5160422714881825e-01 -3.6455075046888374e-01 + -3.7508615469435785e-01 5.0875237464508993e-01 -7.2234448714058153e-01 + -5.5427105042776037e-01 7.7465787067346958e-01 -1.0875281431526540e+00 + -7.7654919803123001e-01 1.0359867272543957e+00 -1.4580106407835922e+00 + -1.0732818752884017e+00 1.2622981646221858e+00 -1.8141220618716909e+00 + -1.4469739597299345e+00 1.4184866582996696e+00 -2.1325722212847618e+00 + -1.8696292944752453e+00 1.4781912750308046e+00 -2.4022086395421036e+00 + -2.3010683707434900e+00 1.4307137584906715e+00 -2.6307686043010343e+00 + -2.7092866176671380e+00 1.2752211773449642e+00 -2.8356683286142448e+00 + -3.0643904037940444e+00 1.0112096115445297e+00 -3.0254813605244726e+00 + -3.3447797701556419e+00 6.5113116129334081e-01 -3.1964144074126977e+00 + -3.5822759971320486e+00 2.2040468051201856e-01 -3.3495753699785094e+00 + -3.8434000799132182e+00 -2.5435627955271789e-01 -3.4923692617382875e+00 + -4.1772425570051244e+00 -7.2918384562737493e-01 -3.6292821253773275e+00 + -4.5967891079848258e+00 -1.1557624438815157e+00 -3.7666341071234344e+00 + -5.0709075941666581e+00 -1.5178220215399048e+00 -3.9255849517972243e+00 + -5.5463355336357232e+00 -1.8349217909852573e+00 -4.1432246248007605e+00 + -5.9734856856405907e+00 -2.1179219241225891e+00 -4.4367490263974370e+00 + -6.3251396067649726e+00 -2.3668130125780755e+00 -4.7597679415289758e+00 + id 14326 + loc 1.4399663545191288e-02 5.1012450456619263e-01 396 + blend 0.0000000000000000e+00 + interp 3.4542819386949425e-01:2.7336819964194986e-01:2.0501419883335126e-01:3.2222787623920329e-01:1.1352346432294624e+00:3.0666306783626335e-01:1.9923664894890305e+00:3.4542473958755560e-01:2.6578641193253016e+00:3.0083501477038649e-01:3.1871546207164174e+00 + CVs 20 + 7.9791132723114078e-01 1.8721744119228997e-01 -2.8137539287706215e-01 + 1.3937878050969261e+00 2.1691450995538630e-01 -5.3507908071475874e-01 + 1.9481437494786518e+00 1.8906188601520063e-01 -7.7758419821327762e-01 + 2.5121345067105620e+00 1.3618702751284995e-01 -1.0158368929059640e+00 + 3.0663349185086846e+00 5.6690166815258403e-02 -1.2480961220750078e+00 + 3.5915492027234901e+00 -4.6276845633045127e-02 -1.4780413968368786e+00 + 4.0731199243320093e+00 -1.6763146659205908e-01 -1.7091550224770877e+00 + 4.5041381923002497e+00 -3.0335099550905475e-01 -1.9404441842338827e+00 + 4.8828137695687346e+00 -4.4912105862409080e-01 -2.1686427605921108e+00 + 5.2076791458042697e+00 -5.9782687406467239e-01 -2.3901941679434979e+00 + 5.4882763727929378e+00 -7.4539221067073580e-01 -2.6011085146505866e+00 + 5.7521133409677638e+00 -9.0427039899826900e-01 -2.7996931881790665e+00 + 6.0187345013115454e+00 -1.0942304892882635e+00 -2.9845306747551361e+00 + 6.2876687800157116e+00 -1.3240561581817758e+00 -3.1500510698050452e+00 + 6.5513298109264166e+00 -1.5998302111682059e+00 -3.2918813228398163e+00 + 6.7989198996049307e+00 -1.9340864068257972e+00 -3.4118668512400077e+00 + 7.0128753086755360e+00 -2.3373347413099124e+00 -3.5127632581012538e+00 + 7.1716537421029347e+00 -2.7920901338793165e+00 -3.5895326445019480e+00 + 7.2674066763771537e+00 -3.2310682813276808e+00 -3.6351802144759082e+00 + id 14327 + loc 5.6153637170791626e-01 3.9424011111259460e-01 395 + blend 0.0000000000000000e+00 + interp 5.1971837607633009e-01:2.4368900392208662e-01:4.4815797009411440e-01:2.8426761631603947e-01:1.1274522706757701e+00:2.6769007033946052e-01:1.9895319999291434e+00:5.1971317889256941e-01:2.7713510540826700e+00:2.9612430879244384e-01:3.1919047390262416e+00:4.1065468673018057e-01:3.9999230371922696e+00 + CVs 20 + -3.1006760990082682e-01 1.5516429877092297e-01 3.8050282452370221e-01 + -5.9364706460008509e-01 2.6326402541497990e-01 7.0564312673514484e-01 + -8.8418700160315566e-01 3.5325864396804607e-01 1.0204836534802491e+00 + -1.1968847921029018e+00 4.3756962162061563e-01 1.3388858349851320e+00 + -1.5291872927707497e+00 5.1350576283321958e-01 1.6498698346844334e+00 + -1.8750707598063074e+00 5.7797853019018186e-01 1.9457693022514908e+00 + -2.2268157052060600e+00 6.2838347210083367e-01 2.2230629833827744e+00 + -2.5768533473732580e+00 6.6042771388163080e-01 2.4788355070959169e+00 + -2.9192214981906726e+00 6.6813498799150350e-01 2.7122339494303254e+00 + -3.2501137496930861e+00 6.4565835607723199e-01 2.9300963273754244e+00 + -3.5677494314491338e+00 5.8938088962545399e-01 3.1437389810245637e+00 + -3.8719836940154368e+00 5.0129186015432570e-01 3.3592238785356034e+00 + -4.1635032187470191e+00 3.8737307036774959e-01 3.5768436415342570e+00 + -4.4443381027621438e+00 2.5171634843402479e-01 3.7968685501823951e+00 + -4.7158564700538292e+00 9.3369432089617899e-02 4.0200131824854708e+00 + -4.9763474733265998e+00 -9.0571643629783427e-02 4.2433616717423455e+00 + -5.2213325984669172e+00 -3.0151617934996588e-01 4.4582342426117298e+00 + -5.4428323094049116e+00 -5.3265934689390493e-01 4.6491316217653127e+00 + -5.6063903350076076e+00 -7.2949596888858581e-01 4.7508108439122836e+00 + id 14328 + loc 9.4962403178215027e-02 2.3353011906147003e-01 379 + blend 0.0000000000000000e+00 + interp 3.8811597308528906e-01:2.1470281953999540e-01:6.4895470253872878e-02:2.6989555712043589e-01:9.0052502112510813e-01:1.8493570953618510e-01:1.1690153278107573e+00:3.4263456236681622e-01:1.7249095346525918e+00:3.8811209192555823e-01:2.2743568773941791e+00:2.6609350354138595e-01:2.9943667585307638e+00:2.3618684646864219e-01:3.6443943969619093e+00 + CVs 20 + 3.1124131065553690e-01 3.7407062986559853e-01 2.7840771726501229e-01 + 6.5427416637735769e-01 6.4594019363861377e-01 4.8536958976895006e-01 + 1.0413750124014987e+00 7.9736346714594075e-01 6.5549185947284672e-01 + 1.4634989930511932e+00 8.7236019864765613e-01 8.1384386050587509e-01 + 1.8959109376210712e+00 9.3276783993049106e-01 9.8101435680582971e-01 + 2.3111643690136932e+00 1.0152579206634436e+00 1.1839601145638734e+00 + 2.6786824366007620e+00 1.1225273534819344e+00 1.4421557925258295e+00 + 2.9750379774639444e+00 1.2420028833871983e+00 1.7539529516874273e+00 + 3.1895209300310929e+00 1.3644829814079207e+00 2.0971319121828240e+00 + 3.3207750827460245e+00 1.4899710971440441e+00 2.4376661085819782e+00 + 3.3873212587174812e+00 1.6301556944649005e+00 2.7426059755013781e+00 + 3.4311226620341597e+00 1.8140676990379649e+00 2.9969186746064782e+00 + 3.4859190968484830e+00 2.0723166601057987e+00 3.2380528306928711e+00 + 3.5420785251410232e+00 2.3833759604496234e+00 3.5630320359590746e+00 + 3.5371117233350624e+00 2.6746626137448786e+00 4.0380628988310363e+00 + 3.3455200867791666e+00 2.8820367411601899e+00 4.6062743501713506e+00 + 2.8675512008509525e+00 2.9788554726871102e+00 5.1473915389894147e+00 + 2.2717340597432485e+00 2.8091284393866141e+00 5.6271134261677496e+00 + 2.3717153744673398e+00 2.3826493118108174e+00 5.9453961407968619e+00 + id 14329 + loc 8.3739852905273438e-01 6.7440927028656006e-02 401 + blend 0.0000000000000000e+00 + interp 4.6115612245120313e-01:3.4651196409620999e-01:3.3513815458265972e-01:3.2640022899271010e-01:1.0026396291626527e+00:3.5641485190539246e-01:1.7487672349696615e+00:4.2374764686801691e-01:2.1999383656696612e+00:3.5575931957803253e-01:2.9976384577964383e+00:4.6115151088997863e-01:3.8466653907803994e+00 + CVs 20 + 7.4293910715934372e-02 2.9333322251763216e-01 2.2194535425464279e-01 + 1.6270072379914596e-01 5.6617094965411097e-01 4.1596700861249708e-01 + 2.5646427475669142e-01 8.2490687389519957e-01 6.0241016453792140e-01 + 3.5374574173809248e-01 1.0737506086625392e+00 7.9593067500191417e-01 + 4.6008881351599157e-01 1.3099920590012857e+00 1.0071595763937295e+00 + 5.8241829194894690e-01 1.5250003200543956e+00 1.2470461627675316e+00 + 7.2810930591786904e-01 1.6986409945441725e+00 1.5243375210712493e+00 + 9.0525258011673249e-01 1.8086001390436941e+00 1.8351642345573798e+00 + 1.1258488182606625e+00 1.8617875909759571e+00 2.1640425363362294e+00 + 1.4014949684657241e+00 1.8742203141273186e+00 2.5033334875048814e+00 + 1.7157393156182987e+00 1.8117210706000653e+00 2.8459258970063588e+00 + 2.0216782481947289e+00 1.6313423928124611e+00 3.1581186114042019e+00 + 2.3091039963278610e+00 1.3666595914300945e+00 3.4141174225001079e+00 + 2.6195141608361778e+00 1.0861031619213328e+00 3.6192696042071644e+00 + 2.9695368136178821e+00 8.1549343346769776e-01 3.7642064259193826e+00 + 3.2975556580851206e+00 5.5334203307436236e-01 3.8108597468888927e+00 + 3.5129016829014854e+00 3.2773254425240222e-01 3.7499906843578965e+00 + 3.7023607333362185e+00 1.6274976994624191e-01 3.6424702885803679e+00 + 4.1697833132665068e+00 2.0545956880579680e-01 3.5690534966989924e+00 + id 14330 + loc 5.9591937065124512e-01 7.5562328100204468e-02 402 + blend 0.0000000000000000e+00 + interp 4.6948327154131014e-01:2.6369676328127922e-01:1.0024371010341331e+00:3.5829957021882497e-01:1.7021370361645960e+00:4.6947857670859477e-01:2.1035918322023894e+00:2.8923288458054752e-01:2.7731179542845608e+00:4.0644634751195485e-01:3.0759460204154414e+00:2.8251716793011222e-01:3.9922385601172747e+00 + CVs 20 + 2.5150937936581491e-01 2.9515412716060396e-01 1.2949536820821267e-01 + 4.8255376568241054e-01 5.9582760869145523e-01 2.7137109022842776e-01 + 7.0364030908174691e-01 8.9048882552706954e-01 4.1994384816359071e-01 + 9.2512695711893256e-01 1.1642801121006350e+00 5.6403813252790980e-01 + 1.1610426615149601e+00 1.4034752062548383e+00 6.8866954668701608e-01 + 1.4279686328566261e+00 1.6017978319153297e+00 7.8264769924899069e-01 + 1.7456927817266825e+00 1.7557720095320892e+00 8.4280207144178565e-01 + 2.1373931172889749e+00 1.8537356171886277e+00 8.7760373570665540e-01 + 2.6105449301288544e+00 1.8794419648524490e+00 9.1458178897122844e-01 + 3.1444144074233837e+00 1.8135345905266345e+00 9.9096375613150278e-01 + 3.6583643383918325e+00 1.6217893674537165e+00 1.1220462972872454e+00 + 4.0344380679484759e+00 1.3241628418313245e+00 1.2696927146884676e+00 + 4.2655145435032100e+00 1.0024346118627281e+00 1.3970116782654891e+00 + 4.4386384749750265e+00 7.0366846917205983e-01 1.5067042635821484e+00 + 4.6642931601841218e+00 4.3965030073191880e-01 1.6171060242397521e+00 + 5.0577581736904200e+00 2.2788247720926885e-01 1.7526147600565221e+00 + 5.6456645658616562e+00 9.7393042342816760e-02 1.9431367739435279e+00 + 6.3252261181358058e+00 5.9523351080047748e-02 2.2088867799743124e+00 + 6.8939932690968453e+00 1.4032193755054534e-01 2.4987357298336548e+00 + id 14331 + loc 4.3830025196075439e-01 6.7360121011734009e-01 404 + blend 0.0000000000000000e+00 + interp 4.6900755697642138e-01:3.9366065859198934e-01:3.4214490482725735e-03:4.5763425292014825e-01:7.9731274191025814e-01:4.6900286690085163e-01:1.1552687961427546e+00:3.2597794573185079e-01:1.9818206917576147e+00:2.8399327076088265e-01:2.9350915980781220e+00:4.0672111004106187e-01:3.6476429849455156e+00 + CVs 20 + -1.1396099822515160e-04 1.2191471881716093e-01 -5.1235286595677360e-03 + 4.9219164533190751e-02 2.3553702179412461e-01 -3.8936961544693068e-02 + 9.2004370334343277e-02 3.7179702023588634e-01 -5.3377556089206080e-02 + 1.4057889280474498e-01 5.0411084175077947e-01 -6.1769170601167794e-02 + 1.9984596106621488e-01 6.2619585368369346e-01 -6.8656247663151732e-02 + 2.7034804122823047e-01 7.3518833994557775e-01 -7.6391286661578628e-02 + 3.5085457472246823e-01 8.2905235200284344e-01 -8.6593839080913448e-02 + 4.3919651602571330e-01 9.0804763623610463e-01 -9.8152087280415107e-02 + 5.3337429101762812e-01 9.7574841527230216e-01 -1.0616146575955127e-01 + 6.3295937393870783e-01 1.0343891728195311e+00 -1.0760488315491659e-01 + 7.3762065414783473e-01 1.0755166956635893e+00 -1.1229546909602628e-01 + 8.4350596492398555e-01 1.0860500700419400e+00 -1.3648381081363353e-01 + 9.4057882175391561e-01 1.0569398112525967e+00 -1.9238941228914133e-01 + 1.0177669982628710e+00 9.9332862611559780e-01 -2.7460327867802453e-01 + 1.0748246635719894e+00 9.0983110190657346e-01 -3.6373139368773361e-01 + 1.1158153126616606e+00 8.1325826993522998e-01 -4.4910735865519769e-01 + 1.1366013011062772e+00 7.0001028888672079e-01 -5.3255899347336633e-01 + 1.1226141537663707e+00 5.6403548395352265e-01 -6.1981085088560317e-01 + 1.2182274593383080e+00 4.5686396138887642e-01 -6.2619526553064642e-01 + id 14332 + loc 2.2248829901218414e-01 3.1262062489986420e-02 1079 + blend 0.0000000000000000e+00 + interp 4.8955749806615168e-01:4.6824869884928855e-01:8.9683899879877171e-01:4.8955260249117105e-01:1.5028367516492502e+00:2.9315173278102541e-01:1.9774111176359450e+00:2.7369771859126457e-01:2.5684141669900011e+00:4.1216139413593500e-01:3.0346044228070399e+00:2.9330311017516986e-01:3.9018517768365806e+00 + CVs 20 + 2.6843446770350293e-01 4.5502605905022936e-01 4.8406002679665550e-02 + 3.6975893149295669e-01 8.2703415746298925e-01 6.3387109726422419e-02 + 4.0257767843026404e-01 1.1663663854095869e+00 6.3793423099309854e-02 + 4.0963641921562094e-01 1.4760620903684192e+00 6.2206872880980868e-02 + 3.9618752754856046e-01 1.7370899757511584e+00 6.5203932301791223e-02 + 3.7720576990525456e-01 1.9342273826244771e+00 9.0352123225492131e-02 + 3.7677775301658267e-01 2.0877199352487232e+00 1.5926141698999913e-01 + 3.9067057783900228e-01 2.2702110779945999e+00 2.5408911570608916e-01 + 3.5251214886757598e-01 2.4969377892849458e+00 2.9702963018412420e-01 + 2.3917592936355314e-01 2.6772182017344197e+00 2.6167259502191809e-01 + 9.4222039327777951e-02 2.7759086631474386e+00 1.8260589565926422e-01 + -5.0395131579511254e-02 2.8171113468027649e+00 7.9538805201621710e-02 + -1.7679076436838859e-01 2.8319841175859022e+00 -4.8255403696061516e-02 + -2.7731346869139828e-01 2.8461561178973556e+00 -2.2103324903854626e-01 + -3.5797611365200965e-01 2.8622404385181501e+00 -4.7309938224837111e-01 + -4.1337567744143378e-01 2.8274080622223927e+00 -7.9545976797842644e-01 + -3.9623859358995328e-01 2.6872907355428177e+00 -1.1525987111756761e+00 + -3.2031553912225375e-01 2.4188017803915578e+00 -1.4172189248557152e+00 + -4.1530514476050229e-01 2.3537838714435857e+00 -1.0874767594671133e+00 + id 14333 + loc 3.0686259269714355e-01 8.5948988795280457e-02 412 + blend 0.0000000000000000e+00 + interp 4.4489741136685024e-01:3.6449679476763458e-01:7.7586598568491660e-01:2.6576663990211075e-01:1.7405287097444415e+00:4.4489296239273657e-01:2.3872152133451738e+00:2.9208290074926896e-01:3.0004614598623771e+00:3.7923418339729131e-01:3.4997901131660489e+00:3.2202173090109615e-01:3.9997713276502189e+00 + CVs 20 + -1.5587047177713817e-01 1.4955394570732258e-01 -4.2171364408494844e-01 + -3.0471512432454706e-01 2.4424507147920468e-01 -7.4252738015936448e-01 + -4.4734185132948212e-01 3.2391434964726662e-01 -1.0492330928829454e+00 + -5.7942759109536968e-01 4.1403326925205286e-01 -1.3908338266414133e+00 + -6.9471926730447420e-01 5.1115170309351132e-01 -1.7648997378304747e+00 + -7.8529217959295072e-01 6.1137973582497662e-01 -2.1660633319303804e+00 + -8.4435826376355738e-01 7.1072137500152388e-01 -2.5859445465933231e+00 + -8.6936638074145889e-01 8.0462343184014140e-01 -3.0144378366131881e+00 + -8.6224008640874006e-01 8.8872962331380212e-01 -3.4407462535677209e+00 + -8.2704674213532448e-01 9.6039740995512257e-01 -3.8539413721290261e+00 + -7.7211180238376520e-01 1.0152257225504899e+00 -4.2486214650474468e+00 + -7.1833965117684584e-01 1.0364375805051897e+00 -4.6356192463578330e+00 + -6.9918305529565583e-01 9.9931865914388740e-01 -5.0267574988020733e+00 + -7.3544908223184036e-01 9.0221971226882536e-01 -5.4025813714260540e+00 + -8.1887324791292659e-01 7.6550004392952964e-01 -5.7366812716780640e+00 + -9.3484882327327068e-01 6.0610088831180686e-01 -6.0152323402524202e+00 + -1.0704846933225893e+00 4.4102330869692485e-01 -6.2270617337634970e+00 + -1.2083288838220336e+00 2.8768455037365337e-01 -6.3688813804232609e+00 + -1.3160346033843204e+00 1.6975342409544636e-01 -6.4438384735444227e+00 + id 14334 + loc 2.9504176974296570e-01 9.7174113988876343e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1100828170790593e-01:3.3483587362593703e-01:3.2385730137012159e-01:1.1394768320471012e-01:1.6629136691766435e+00:4.1100417162508890e-01:2.1547445686799462e+00:3.1415930102211381e-01:3.0112998055020417e+00:3.0406071749964503e-01:3.8645608683682680e+00 + CVs 20 + 2.5137556937038991e-01 2.3708199852923650e-01 -1.3596907356571913e-01 + 4.9922038666715940e-01 4.8765950398918267e-01 -2.6219242746959065e-01 + 7.5636846165072513e-01 7.5349910212952143e-01 -3.8544526475716123e-01 + 1.0222602049243994e+00 1.0444446752686911e+00 -5.1951155469578869e-01 + 1.2841567568297458e+00 1.3731327849505175e+00 -6.8779687371012987e-01 + 1.5241742624486898e+00 1.7404632378965648e+00 -9.2285863115082645e-01 + 1.7205184711163350e+00 2.1243191800408305e+00 -1.2613311207936502e+00 + 1.8564451588127764e+00 2.4747607179084943e+00 -1.7310728985541894e+00 + 1.9244948542494611e+00 2.7206090722565572e+00 -2.3360186645650831e+00 + 1.9230455180885691e+00 2.7938701066992992e+00 -3.0380938320738218e+00 + 1.8670358492335581e+00 2.6694529099533240e+00 -3.7584008931014443e+00 + 1.8037423985848493e+00 2.3898928554475423e+00 -4.4183316824774703e+00 + 1.7899901475820275e+00 2.0304574611666757e+00 -4.9866031932593122e+00 + 1.8652737750110637e+00 1.6536531707931137e+00 -5.4625563097514505e+00 + 2.0647392025235654e+00 1.3094087493850770e+00 -5.8387503261831908e+00 + 2.4479062718253575e+00 1.0746334454658346e+00 -6.0615119538446462e+00 + 2.9954361754255716e+00 1.0964735263273271e+00 -6.0250384076932351e+00 + 3.4620331685504486e+00 1.2987312268208480e+00 -5.8253108602311467e+00 + 3.8517689334219622e+00 1.1182822386038385e+00 -5.8972527149546323e+00 + id 14335 + loc 3.0310529470443726e-01 2.0880420506000519e-01 400 + blend 0.0000000000000000e+00 + interp 4.1324595995514440e-01:3.0507709056602372e-01:1.9726804555354194e-01:4.1324182749554489e-01:9.0618935618645291e-01:3.1100673888841007e-01:1.1598535097969576e+00:3.1281517940626169e-01:2.1363812065215315e+00:3.1345193680485728e-01:3.2377286539790173e+00 + CVs 20 + -1.6958427874154877e-01 9.0124089856036677e-02 1.8896263379893657e-01 + -3.3830898146379146e-01 1.8141571633634992e-01 3.8785628563940988e-01 + -5.0353094536712040e-01 2.6990293374253749e-01 5.7945264959978759e-01 + -6.6032900982392828e-01 3.5278996911832350e-01 7.4969369814230813e-01 + -7.9952432397713313e-01 4.2960908486180072e-01 8.9164730440715301e-01 + -9.0926160322201866e-01 5.0544228109999234e-01 9.9688853205027650e-01 + -9.8079338098952062e-01 5.9449228861683301e-01 1.0639991994718283e+00 + -1.0202392557069140e+00 7.1478877415138986e-01 1.1104389404926152e+00 + -1.0571002538447152e+00 8.6516400287249406e-01 1.1709145424634764e+00 + -1.1331887655974082e+00 1.0250412909332607e+00 1.2461875525352846e+00 + -1.2710871698241295e+00 1.1749286057903663e+00 1.3082868972440036e+00 + -1.4469455988495459e+00 1.2817623609095348e+00 1.3790564954272990e+00 + -1.6223256958340539e+00 1.3466646929691797e+00 1.4910345928144777e+00 + -1.8079041393172641e+00 1.4028028106737449e+00 1.6314127929746300e+00 + -1.9988122452938413e+00 1.4124674972385998e+00 1.7732001330294951e+00 + -2.0808511721663407e+00 1.2118886912447298e+00 1.8806301751851864e+00 + -1.9765465007133334e+00 5.3766681026484520e-01 1.9697099843524901e+00 + -2.0598797096691217e+00 -3.5293351254828120e-01 2.1545244341088940e+00 + -2.2219780003869793e+00 -2.1219468546972797e-01 2.1723235895889745e+00 + id 14336 + loc 8.4233438968658447e-01 8.6418949067592621e-02 395 + blend 0.0000000000000000e+00 + interp 5.0392453635390622e-01:2.5947157267384113e-01:9.5472095198145812e-04:2.5806150838883135e-01:1.0147796050563116e+00:5.0391949710854267e-01:1.9383266681766123e+00:3.3807460745633938e-01:2.5228883267693840e+00:2.5685655645205796e-01:2.9987521345656338e+00 + CVs 20 + -3.1544676729006377e-01 1.3850387346087054e-01 3.8660141671029313e-01 + -5.6255309889523686e-01 2.2885466945273109e-01 6.9233402276865252e-01 + -7.8855744897685076e-01 3.1326152616041725e-01 9.7816779804172083e-01 + -1.0139528199588148e+00 4.1665050001702464e-01 1.2670362086487974e+00 + -1.2466960192622909e+00 5.4086558612468361e-01 1.5560508443354650e+00 + -1.4985003186333048e+00 6.8312687836573405e-01 1.8435275288515867e+00 + -1.7759885274371310e+00 8.3988142556567502e-01 2.1317628400849946e+00 + -2.0829922866410304e+00 1.0029150311776651e+00 2.4254888784062860e+00 + -2.4295268080812487e+00 1.1495923846183769e+00 2.7279565682867766e+00 + -2.8229093867760113e+00 1.2463471748469335e+00 3.0395632453878934e+00 + -3.2494121443295811e+00 1.2643544641426741e+00 3.3645261028879423e+00 + -3.6756869385208981e+00 1.1925661653216697e+00 3.7119357949461853e+00 + -4.0720030326217724e+00 1.0382170844875098e+00 4.0859617380929665e+00 + -4.4230863524204214e+00 8.1582310118014467e-01 4.4838322152982624e+00 + -4.7155519187114425e+00 5.4246481693916504e-01 4.9060930401577778e+00 + -4.9337181011961206e+00 2.3167238248168909e-01 5.3574182561184287e+00 + -5.0623945436276028e+00 -1.1686610186204183e-01 5.8292090453638847e+00 + -5.0856614055045117e+00 -4.9814255823842535e-01 6.2880149054112175e+00 + -5.0055909099794569e+00 -8.4140572585800566e-01 6.6835174945503653e+00 + id 14337 + loc 2.3861485719680786e-01 1.0151137411594391e-01 393 + blend 0.0000000000000000e+00 + interp 4.5031106842011198e-01:3.0467925101284421e-01:1.2158822270255198e-01:3.8065377291896613e-01:8.0530214229302843e-01:3.0623276941009003e-01:1.4446830240354116e+00:3.2224809766712181e-01:2.1547643609762286e+00:4.5030656530942781e-01:2.9975419385006754e+00:3.0791787269376814e-01:3.7217724534457082e+00 + CVs 20 + -1.2588447268549557e-01 2.4590879880469721e-01 4.0927031999212965e-01 + -2.6864238499479354e-01 5.1273447062250610e-01 7.9848266653175926e-01 + -4.0776651879119069e-01 8.1129695270259061e-01 1.1525092991094379e+00 + -5.3891988267969293e-01 1.1216660640748632e+00 1.4532151535691860e+00 + -6.8578072595431971e-01 1.4218016039318506e+00 1.7011566139314245e+00 + -8.7812725860866669e-01 1.7065390355686672e+00 1.9120957751596084e+00 + -1.1239224330703557e+00 1.9728982885317365e+00 2.0884586318864056e+00 + -1.4098344112216445e+00 2.2149890055751800e+00 2.2304807132941749e+00 + -1.7217200314082917e+00 2.4273702463216971e+00 2.3541640491692739e+00 + -2.0440515859137736e+00 2.6089636951027662e+00 2.4847333813738901e+00 + -2.3616344209041666e+00 2.7628034310311498e+00 2.6484734774669074e+00 + -2.6695285076113442e+00 2.8901501132679179e+00 2.8663544445317126e+00 + -2.9796352494361686e+00 2.9864118272362807e+00 3.1462266577501277e+00 + -3.3141361985709987e+00 3.0353009534716437e+00 3.4828855174127584e+00 + -3.6734978264925440e+00 2.9996861456059580e+00 3.8672287217859367e+00 + -4.0116863529413163e+00 2.8559462329844076e+00 4.2726981088597249e+00 + -4.2862885417519898e+00 2.6462682622823612e+00 4.6667464866386537e+00 + -4.4639219330438031e+00 2.4353114447485211e+00 5.0718466214082696e+00 + -4.4218812441430426e+00 2.3128979036953643e+00 5.5749438534307387e+00 + id 14338 + loc 8.7989294528961182e-01 7.4518048763275146e-01 402 + blend 0.0000000000000000e+00 + interp 3.6993356733756855e-01:2.9436867954044715e-01:3.1174048473386795e-01:3.6992986800189520e-01:9.6579030780894914e-01:2.4741145494931222e-01:1.5021194763344758e+00:2.7452804715871670e-01:2.7501392533610960e+00:3.3849278847084713e-01:3.6448067338616044e+00 + CVs 20 + -3.6852744531255935e-02 1.6771369336198097e-01 -3.3780132873410962e-01 + -2.1113336081808237e-02 3.4340096560755373e-01 -6.6717611889063422e-01 + 2.1308339648417052e-03 5.2291097095646089e-01 -9.9078363653665535e-01 + 2.8328983924913675e-02 7.0002562461233986e-01 -1.2994898883468911e+00 + 5.2836264500204289e-02 8.7437850877430456e-01 -1.5922142678970275e+00 + 9.3231093300492229e-02 1.0362967669988352e+00 -1.8598798832076699e+00 + 1.8089116477092310e-01 1.1686932218057897e+00 -2.0880400198247964e+00 + 3.2592016148035352e-01 1.2607320065144600e+00 -2.2670882021990701e+00 + 5.0150650395264740e-01 1.3335921048085455e+00 -2.4000089322278941e+00 + 7.2829767166649617e-01 1.4209887623968558e+00 -2.4349881612969799e+00 + 1.1119808372130817e+00 1.3338882719017391e+00 -2.1643546434384087e+00 + 1.3994133022217357e+00 9.5887791539536993e-01 -1.6968591633124608e+00 + 1.5217610751443555e+00 6.7982399042803165e-01 -1.5011144625054724e+00 + 1.6596862800862409e+00 5.7039673079536213e-01 -1.6115426248767886e+00 + 1.7922553424873271e+00 5.0924050715468483e-01 -1.9446495288556847e+00 + 1.8565678612542813e+00 4.2981396536209560e-01 -2.3704552736130884e+00 + 1.8391935049466306e+00 3.2159199883862888e-01 -2.8013083049007266e+00 + 1.7414451795391370e+00 1.9002478753635144e-01 -3.2236955353409540e+00 + 1.8167055343655560e+00 1.9723620346079906e-01 -3.3389935211308535e+00 + id 14339 + loc 7.7826821804046631e-01 3.8031405210494995e-01 401 + blend 0.0000000000000000e+00 + interp 4.4284069882462151e-01:4.3675326153279748e-01:2.2961751788444640e-01:3.6170923101713237e-01:9.5734989179624552e-01:4.4283627041763329e-01:1.6502507881282762e+00:3.5111284331529502e-01:2.1973064628725050e+00:3.3845603933819940e-01:3.0628471726856414e+00:3.3135762129274038e-01:3.8687015801383247e+00 + CVs 20 + 9.9550893205088906e-02 3.0752903528424208e-01 1.1245215345761814e-01 + 1.9565819221167630e-01 6.1555939371009460e-01 2.4018420041515864e-01 + 2.8236287858495424e-01 9.2097279049351866e-01 3.7030327284681519e-01 + 3.5743538128607727e-01 1.2215968527611736e+00 5.0026672864713195e-01 + 4.2274957889124282e-01 1.5160213082089788e+00 6.3865772774721652e-01 + 4.8201856427850792e-01 1.8019020516635638e+00 7.9256161778133949e-01 + 5.3949083706451162e-01 2.0772563115291187e+00 9.6593069155223288e-01 + 6.0003707309558041e-01 2.3398368069689122e+00 1.1598535097849418e+00 + 6.7384493878513496e-01 2.5879299529380804e+00 1.3721984530969003e+00 + 7.7482784847018205e-01 2.8202174383053995e+00 1.6015135276869803e+00 + 9.0473067536717233e-01 3.0306824781174169e+00 1.8539908896554147e+00 + 1.0476459205188469e+00 3.2032510776779231e+00 2.1408621916667183e+00 + 1.1859715675752966e+00 3.3043826243017755e+00 2.4626316832554696e+00 + 1.3064049496518422e+00 3.2900813118175956e+00 2.7852783417238580e+00 + 1.4015628884928839e+00 3.1588439321780060e+00 3.0557737266522729e+00 + 1.4830428101606197e+00 2.9537274192896215e+00 3.2516325994175830e+00 + 1.5708272702190786e+00 2.7200013421921998e+00 3.3806391506706257e+00 + 1.7109890020696066e+00 2.5021459555473076e+00 3.4713462941853539e+00 + 2.0501220085885774e+00 2.3930392761404997e+00 3.5438715587891081e+00 + id 14340 + loc 5.4072450846433640e-02 1.7009226977825165e-01 378 + blend 0.0000000000000000e+00 + interp 4.6335504624753970e-01:3.2521817571545081e-01:1.3935739827136429e-01:4.6335041269707727e-01:8.2535513640104807e-01:3.2451011257355167e-01:1.1984808191816281e+00:3.5739299573391015e-01:2.2399985970479808e+00:3.4067098849120342e-01:3.1741903966113423e+00 + CVs 20 + 3.7271094681968842e-01 2.4544592300270751e-01 -4.1723694334393724e-01 + 6.5770458739920856e-01 4.2203818401216170e-01 -8.2384053899322440e-01 + 9.1924892650503576e-01 5.6370254190813140e-01 -1.2257997674064103e+00 + 1.1905437520788986e+00 6.9302959314467738e-01 -1.6189737073736885e+00 + 1.4769529833301303e+00 8.0925995951444862e-01 -1.9793656470058960e+00 + 1.7733511899276326e+00 9.0317330270397989e-01 -2.2859044294585225e+00 + 2.0723431942240529e+00 9.7135991200794036e-01 -2.5292360967332286e+00 + 2.3671443711314173e+00 1.0196210139578108e+00 -2.7078624464570926e+00 + 2.6526164517692141e+00 1.0588863333255862e+00 -2.8261797880123867e+00 + 2.9300083833020736e+00 1.1006485417979015e+00 -2.8953753017514154e+00 + 3.2063573129576675e+00 1.1530871729085135e+00 -2.9337302055950678e+00 + 3.4932298099889221e+00 1.2167491496830793e+00 -2.9657633203841622e+00 + 3.8104202722370681e+00 1.2639171036877435e+00 -3.0139955090061443e+00 + 4.1596314052565626e+00 1.2221487359589305e+00 -3.0781643158223999e+00 + 4.5057838398690802e+00 1.0450687127524443e+00 -3.1348333280220335e+00 + 4.8383767957305270e+00 7.6056123620024030e-01 -3.1733619393667305e+00 + 5.1904611013253428e+00 4.0818384474890523e-01 -3.2050739054138138e+00 + 5.5790820670244869e+00 2.9154187997231684e-02 -3.2783972248635025e+00 + 5.8635502252003295e+00 -1.7381085284824405e-01 -3.4850823266312272e+00 + id 14341 + loc 8.7700426578521729e-01 7.4304813146591187e-01 396 + blend 0.0000000000000000e+00 + interp 3.5165129043256965e-01:3.4468000358424916e-01:5.7665413649304054e-01:2.9182865536339853e-01:1.1630422958020903e+00:3.5164777391966534e-01:1.9835897850370412e+00:2.5312191410888746e-01:2.9574293153550570e+00:2.7033535296909245e-01:3.9150480182839296e+00 + CVs 20 + 9.4922031442883237e-01 1.3117686630891404e-01 -4.1700014706088123e-01 + 1.5621181280512177e+00 9.8772498391490771e-02 -7.1644777608911381e-01 + 2.0757491535867501e+00 1.5763593870848303e-02 -9.7052679414064080e-01 + 2.5694586989236288e+00 -6.3675837625922105e-02 -1.2023010814493824e+00 + 3.0386605575788237e+00 -1.2356425340753807e-01 -1.4201095136179074e+00 + 3.4865920354706956e+00 -1.5288143355677475e-01 -1.6439184466375256e+00 + 3.9212123653601623e+00 -1.4799474769004917e-01 -1.8971571353194192e+00 + 4.3533562814348583e+00 -1.1639754179040773e-01 -2.2015315016919303e+00 + 4.7967355163132899e+00 -8.2100534656008861e-02 -2.5705526079791881e+00 + 5.2558754870296909e+00 -8.1920999143321183e-02 -3.0033347737530285e+00 + 5.7094125474881556e+00 -1.4902749197733955e-01 -3.4878002954629501e+00 + 6.1217934268041585e+00 -3.0333915252548893e-01 -4.0097014454152102e+00 + 6.4739370431830414e+00 -5.6895582643438636e-01 -4.5584141912885787e+00 + 6.7518145796768847e+00 -9.5717850758034539e-01 -5.1061479717363074e+00 + 6.9442008504803399e+00 -1.4592629997714768e+00 -5.6183887396337040e+00 + 7.0444128469352307e+00 -2.0589478736103040e+00 -6.0731189836997981e+00 + 7.0494599873049699e+00 -2.7367310606037432e+00 -6.4531734610332574e+00 + 6.9665295275372499e+00 -3.4515449461780769e+00 -6.7354877708361176e+00 + 6.8550271100412843e+00 -4.0626421653817637e+00 -6.9006857655969922e+00 + id 14342 + loc 5.5199796333909035e-03 5.4221726953983307e-02 381 + blend 0.0000000000000000e+00 + interp 4.9433140939567416e-01:3.0440276971763852e-01:2.5343588541118656e-01:4.2452607221393773e-01:1.2421426265538607e+00:1.9780891404176704e-01:2.0691213579980166e+00:4.0743661357199601e-01:2.7685199714202531e+00:4.9432646608158021e-01:3.1420860706515401e+00:4.1015749545181196e-01:3.6255309837974270e+00 + CVs 20 + -5.7013545904529450e-01 1.9201958543339287e-01 -8.2444230216148939e-01 + -9.7919519261112375e-01 2.6857536223179279e-01 -1.4104643749015919e+00 + -1.3327371436321720e+00 3.1859300126149703e-01 -1.9372143332136180e+00 + -1.6704869382286620e+00 3.7700458834302530e-01 -2.4743728654382298e+00 + -1.9919645085437065e+00 4.4376243969687779e-01 -3.0225278713532053e+00 + -2.3042204475036203e+00 5.1610778316369421e-01 -3.5932830576594372e+00 + -2.6221354685067486e+00 5.7680622292933748e-01 -4.1987921207183865e+00 + -2.9591982115597157e+00 5.8952077321848428e-01 -4.8444873579750576e+00 + -3.3214926631575525e+00 5.0358958499248185e-01 -5.5262063498757463e+00 + -3.7091564240110872e+00 2.6893897568925085e-01 -6.2190606161817739e+00 + -4.1120534065767487e+00 -1.4533605071389211e-01 -6.8661117305653789e+00 + -4.5072940496025700e+00 -7.4929615806350514e-01 -7.3965596252951205e+00 + -4.8589304828076427e+00 -1.5146444522537403e+00 -7.7390799441947511e+00 + -5.1380379301009613e+00 -2.3415270839012670e+00 -7.8551140366841983e+00 + -5.3574533847796166e+00 -3.1264866995798650e+00 -7.7925741750954129e+00 + -5.5563994408424682e+00 -3.8397299616627536e+00 -7.6453491002407077e+00 + -5.7744369655230532e+00 -4.4846658991614303e+00 -7.4795249158794519e+00 + -6.0207264467084922e+00 -5.0546125660702712e+00 -7.3118823306395520e+00 + -6.2143818692279567e+00 -5.5609069462581555e+00 -7.1488835849171473e+00 + id 14343 + loc 2.6962906122207642e-01 8.1547784805297852e-01 399 + blend 0.0000000000000000e+00 + interp 4.7244106334504948e-01:3.2750393464535826e-01:3.1951338892957426e-01:2.9118967304563548e-01:9.9165916315994285e-01:4.4317435804267974e-01:1.2392912162128142e+00:3.2425900499083032e-01:2.0638624740260969e+00:4.1286922330551956e-01:2.7311572903844441e+00:3.5238357602225895e-01:3.1435814668023045e+00:4.7243633893441606e-01:3.9471712449912921e+00 + CVs 20 + -1.0757250958618364e-01 3.6960488728926888e-01 -4.1016861533260335e-01 + -2.5360292130303136e-01 7.4395186037756100e-01 -7.9366447127194317e-01 + -4.3079802178258270e-01 1.1081878566809167e+00 -1.1793174634464108e+00 + -6.4776888179043368e-01 1.4591947618644063e+00 -1.5730882016082521e+00 + -9.2206386001589458e-01 1.7922039437003423e+00 -1.9622902591175542e+00 + -1.2731683365280428e+00 2.0889320090333321e+00 -2.3199653145429919e+00 + -1.7069808754019000e+00 2.3053801473494429e+00 -2.6110665529560482e+00 + -2.1962282744537198e+00 2.3737202408940132e+00 -2.7990473807756873e+00 + -2.6634247439286098e+00 2.2605428491649073e+00 -2.8558036067764232e+00 + -3.0467650647358426e+00 2.0185585887103445e+00 -2.8062412199984794e+00 + -3.3563075159485094e+00 1.6975311976895535e+00 -2.7108170579178483e+00 + -3.6266744961445947e+00 1.3046117345422004e+00 -2.6287399055195411e+00 + -3.8850248793454956e+00 8.5324232930692689e-01 -2.6122476966315267e+00 + -4.1561487117115403e+00 4.1015636477734962e-01 -2.6962424702587513e+00 + -4.4668249515978378e+00 6.2547069889317949e-02 -2.8818509538117687e+00 + -4.8275109721307752e+00 -1.1834754184632194e-01 -3.1464048496771864e+00 + -5.2001564628208632e+00 -6.0744068992019395e-02 -3.4451284936723381e+00 + -5.4906111146638725e+00 1.7838273370412422e-01 -3.7215446874722771e+00 + -5.6970257539176856e+00 3.9323500867659295e-01 -3.9884193856377834e+00 + id 14344 + loc 8.7978845834732056e-01 8.8678979873657227e-01 412 + blend 0.0000000000000000e+00 + interp 4.0308962297611234e-01:2.9368690335274922e-01:2.8720697291144648e-01:3.3141291179694654e-01:1.0855878351272563e+00:3.7618964790653969e-01:1.8483079088317331e+00:2.9539502395284623e-01:2.6851342562617107e+00:4.0308559207988259e-01:3.5208046794839927e+00 + CVs 20 + 8.6033582504392581e-01 8.6133675052887410e-02 -2.4203194521831306e-01 + 1.4376383081331703e+00 4.6155181797284561e-02 -4.3801881262751069e-01 + 1.9507911526285941e+00 -3.2966876348941576e-02 -6.0450624846807666e-01 + 2.4956134741838452e+00 -1.1827804216158466e-01 -7.4248417672222400e-01 + 3.0577503101447876e+00 -2.1416486916782429e-01 -8.4137490354157751e-01 + 3.6202515166728406e+00 -3.2072291976846934e-01 -8.9390655782762507e-01 + 4.1659397523440829e+00 -4.3583000654991466e-01 -8.9898765012075610e-01 + 4.6810064284332418e+00 -5.5790034876031114e-01 -8.6370505062884861e-01 + 5.1566934094178718e+00 -6.8562924324387775e-01 -7.9973782562976381e-01 + 5.5885853811740391e+00 -8.1754064512540303e-01 -7.1898954420683459e-01 + 5.9799974534031062e+00 -9.5982834983367016e-01 -6.3631098589479818e-01 + 6.3495615454181857e+00 -1.1391171856924698e+00 -5.7574132618347629e-01 + 6.7149386879252866e+00 -1.3868763734132550e+00 -5.6315942412326048e-01 + 7.0647821180945689e+00 -1.6992817580762976e+00 -6.0725970648631922e-01 + 7.3803811664210039e+00 -2.0516586122627571e+00 -7.0364797203129670e-01 + 7.6527260763992606e+00 -2.4298937891579717e+00 -8.5081295674105450e-01 + 7.8752875003345508e+00 -2.8208459610564574e+00 -1.0463335144482870e+00 + 8.0435115877424899e+00 -3.1998946884471442e+00 -1.2752891509912936e+00 + 8.1663708447041543e+00 -3.4555572834982122e+00 -1.4427973264497105e+00 + id 14345 + loc 8.7852579355239868e-01 4.5698988437652588e-01 379 + blend 0.0000000000000000e+00 + interp 4.3093872723544169e-01:4.2415502891069357e-01:1.4004969781698073e-02:3.5796425849269625e-01:8.1634197905648587e-01:3.2529476642018929e-01:1.7330934939511966e+00:3.8204475195429527e-01:2.0788930791402356e+00:2.9172212458403352e-01:2.9268825735044395e+00:4.3093441784816933e-01:3.5807661250808485e+00 + CVs 20 + 3.4820344054306457e-01 3.7415105323614944e-01 -7.1394666216291675e-02 + 6.6424088356147659e-01 7.1071507819858315e-01 -1.4087299304556603e-01 + 9.8975720674324041e-01 1.0138273898448296e+00 -2.4468353330026946e-01 + 1.3327426702239971e+00 1.2937855916315855e+00 -3.9060274630317293e-01 + 1.6969595639157862e+00 1.5751673207027790e+00 -5.6250540030071650e-01 + 2.1090606575946893e+00 1.8702139493426879e+00 -7.3575821314221501e-01 + 2.6000324815775198e+00 2.1574978976430290e+00 -8.7592230161582529e-01 + 3.1773589773856670e+00 2.3992885452568098e+00 -9.4839026393485404e-01 + 3.8231536934911068e+00 2.5584849098188966e+00 -9.3087396661539756e-01 + 4.5057706935537141e+00 2.5970268181019831e+00 -8.2793789374669102e-01 + 5.1867631321476715e+00 2.4745925141073073e+00 -6.7559271495391693e-01 + 5.8128596533018335e+00 2.1598378028077367e+00 -5.2687598037579986e-01 + 6.3197868738093117e+00 1.6761638536844923e+00 -4.3015637631248665e-01 + 6.7029749846364535e+00 1.1265813214402400e+00 -4.0016966448790564e-01 + 7.0391201036226576e+00 6.0942445121801869e-01 -4.1747841554618959e-01 + 7.3925148582750211e+00 1.8170117432222721e-01 -4.8650128080176624e-01 + 7.7608748342829426e+00 -1.2497268674577544e-01 -6.4038533655680052e-01 + 8.1084508618396605e+00 -3.5623149233012663e-01 -8.4382817702073754e-01 + 8.4255739239896759e+00 -6.6949383640548321e-01 -9.9077235634680738e-01 + id 14346 + loc 8.4231668710708618e-01 9.7461831569671631e-01 404 + blend 0.0000000000000000e+00 + interp 4.7205810089853328e-01:4.0430719967428086e-01:3.1852420705469342e-04:4.7205338031752431e-01:5.2779728920519764e-01:3.2898881707014171e-01:9.8322811650237696e-01:3.4355771091620729e-01:1.2432002368514845e+00:2.4491591649794725e-01:1.9837819940208892e+00:4.1995300351702108e-01:2.4498522793571178e+00:3.7684823028168513e-01:3.3632779784523414e+00 + CVs 20 + 1.3423856639165765e-01 1.7410692549613260e-01 -7.7228708438416588e-02 + 2.3876569314913570e-01 3.4570224768044011e-01 -1.2214503758348061e-01 + 3.4083477802903378e-01 4.8543807917584536e-01 -1.7710262484196304e-01 + 4.5470669387649348e-01 6.1188765827497982e-01 -2.4181547722460794e-01 + 5.8435924440340237e-01 7.2335652567060782e-01 -3.1320140869120050e-01 + 7.3263893506751143e-01 8.1927427230839245e-01 -3.8742970964578655e-01 + 9.0194365187669845e-01 9.0171946362285016e-01 -4.5854997400266201e-01 + 1.0945193990522539e+00 9.7612543791263706e-01 -5.1746796895889813e-01 + 1.3100761197421578e+00 1.0431780729585691e+00 -5.5729551175393144e-01 + 1.5408184198214538e+00 1.0910569391300546e+00 -5.8618108433624605e-01 + 1.7761525713712765e+00 1.1092156005778444e+00 -6.2304601049098651e-01 + 2.0140760561220183e+00 1.1056846492043382e+00 -6.7120587427239520e-01 + 2.2624780796375363e+00 1.1003050638692182e+00 -7.1188720330155209e-01 + 2.5258831570909233e+00 1.1042140255613009e+00 -7.2938869241307136e-01 + 2.7970783576529357e+00 1.1143118483836334e+00 -7.3042900703433677e-01 + 3.0674176902343846e+00 1.1238801785578554e+00 -7.3167716911588920e-01 + 3.3368631393767125e+00 1.1284318869638177e+00 -7.3109022551359049e-01 + 3.6083543111825120e+00 1.1246939308641548e+00 -7.0741613635401668e-01 + 3.8656687841263229e+00 1.2254967616424806e+00 -6.1967168139729711e-01 + id 14347 + loc 6.0329145193099976e-01 9.1001528501510620e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5245207392471992e-01:4.5244754940398069e-01:6.6568538927799348e-02:3.1480079258409116e-01:9.9998951662488988e-01:2.8163354669772495e-01:1.7659728371458621e+00:3.7506822548057989e-01:2.1501379732266148e+00:2.9845078792852914e-01:3.0369425978467466e+00:3.4839966325241534e-01:3.7993646679806443e+00 + CVs 20 + 1.2260900485167436e-01 3.4835544919575978e-01 1.8030973540854950e-02 + 2.5719115793764380e-01 6.7342391174325433e-01 -3.0089161393031527e-03 + 4.0441862427379438e-01 9.7687442375693767e-01 -5.8285116130898873e-02 + 5.6463597003165866e-01 1.2516450738121543e+00 -1.4592661764658782e-01 + 7.3512668039100815e-01 1.4834372622026797e+00 -2.6404103917157146e-01 + 9.0671596054726955e-01 1.6553325690065621e+00 -4.0664650567063243e-01 + 1.0690379161561878e+00 1.7572662375068142e+00 -5.6423132136878384e-01 + 1.2158817362972791e+00 1.7912161439621093e+00 -7.2455908207617381e-01 + 1.3441629569965083e+00 1.7667248681368382e+00 -8.7330158863567142e-01 + 1.4539772027791886e+00 1.6970519632788073e+00 -9.9777739866813664e-01 + 1.5487457724075369e+00 1.5966746630254713e+00 -1.0897136134880476e+00 + 1.6339282638279438e+00 1.4794526294819075e+00 -1.1460259173544214e+00 + 1.7154409624484985e+00 1.3566234402040487e+00 -1.1697139266297856e+00 + 1.7969072191078173e+00 1.2396369844339412e+00 -1.1652566239981665e+00 + 1.8783446452037622e+00 1.1689831847495198e+00 -1.1285657344336824e+00 + 1.9580259865675387e+00 1.2829360060570774e+00 -1.0677147303589134e+00 + 2.0552753366141676e+00 1.6947590385598010e+00 -1.1282221403455077e+00 + 2.1905944083392370e+00 1.9983712576428658e+00 -1.2951115555374670e+00 + 2.3044986717420262e+00 1.7711993822481067e+00 -9.8845680849264150e-01 + id 14348 + loc 4.2690008878707886e-01 3.3088818192481995e-01 400 + blend 0.0000000000000000e+00 + interp 3.0746481969537975e-01:2.7863365137285695e-01:8.8468407294479245e-02:2.8022321408096224e-01:9.8879891079005588e-01:3.0503664847336820e-01:1.4984444121548475e+00:2.9238275457898744e-01:2.7187219920937347e+00:3.0746174504718282e-01:3.2931704023060355e+00 + CVs 20 + -1.1375918609308755e-01 6.6947476949043544e-02 2.2342012341663972e-01 + -2.6027300864770514e-01 1.4371418491949364e-01 4.1401194636625815e-01 + -4.2565862335228410e-01 2.1976866427819530e-01 5.7799887197557831e-01 + -5.9925315050579631e-01 2.8939326647232000e-01 7.2549596701242203e-01 + -7.8615523113727981e-01 3.5542959772693544e-01 8.5981826529807959e-01 + -9.9143624164482214e-01 4.2177471851708992e-01 9.8612094319145849e-01 + -1.2127109945754040e+00 4.9331294009738719e-01 1.1084283537010200e+00 + -1.4400882060586440e+00 5.7326475585352976e-01 1.2277734250366479e+00 + -1.6663917516087792e+00 6.5959975939807447e-01 1.3425297714403537e+00 + -1.8924518277101590e+00 7.4634109656836001e-01 1.4491353411451522e+00 + -2.1194805855242702e+00 8.2740823342956094e-01 1.5416573530277242e+00 + -2.3456069229002208e+00 8.9705162790597459e-01 1.6118442380309665e+00 + -2.5709318999093673e+00 9.4803834210507776e-01 1.6511253702287942e+00 + -2.7987489936248213e+00 9.7000645656818851e-01 1.6513748406837374e+00 + -3.0258306667393295e+00 9.5183153176951252e-01 1.6046085798399918e+00 + -3.2361939167369020e+00 8.8606602093536813e-01 1.5042838772968752e+00 + -3.4099451978965143e+00 7.6670628366948956e-01 1.3487682074770007e+00 + -3.5374783200579367e+00 5.8373126783985896e-01 1.1401800193383960e+00 + -3.7771811856211706e+00 2.5917991443615196e-01 8.4802358724206317e-01 + id 14349 + loc 1.9844962656497955e-01 7.4560421705245972e-01 395 + blend 0.0000000000000000e+00 + interp 4.5890274335313791e-01:3.4409591872517731e-01:5.9220489716293634e-01:4.5889815432570441e-01:1.0154342398596468e+00:2.8636628654191715e-01:1.7501317542331170e+00:2.4662163667654757e-01:2.8151529057463360e+00:2.8895230851252729e-01:3.9834003345077145e+00 + CVs 20 + 4.9257916469376756e-01 1.3628106397947309e-01 -2.8852370367106067e-01 + 9.2175640509819279e-01 2.1613662773048486e-01 -5.4683085244693641e-01 + 1.3486605977418833e+00 2.8576732286306317e-01 -7.8441599418722763e-01 + 1.7925309311252664e+00 3.5583536877723576e-01 -9.9979384673572569e-01 + 2.2442459748096524e+00 4.1718740150670852e-01 -1.1890083267306730e+00 + 2.6937294870219608e+00 4.6232247135831650e-01 -1.3562533884675601e+00 + 3.1327213895730379e+00 4.8275181447971427e-01 -1.5079270389651289e+00 + 3.5561138451333125e+00 4.6672514433724444e-01 -1.6483704009384665e+00 + 3.9609135040726957e+00 4.0176029825177717e-01 -1.7844539153773376e+00 + 4.3379510097933656e+00 2.7802428172072990e-01 -1.9254649028169031e+00 + 4.6742500514085306e+00 9.3950974220171179e-02 -2.0733176889606924e+00 + 4.9634490660216528e+00 -1.3904153440015765e-01 -2.2162123277046684e+00 + 5.2106568176736490e+00 -4.0426467339297778e-01 -2.3413045890471587e+00 + 5.4192237062889195e+00 -6.9258524279321598e-01 -2.4502378741508251e+00 + 5.5857708844669967e+00 -9.9946675691006792e-01 -2.5498783695919989e+00 + 5.7031506312228215e+00 -1.3166657953103700e+00 -2.6402250164020042e+00 + 5.7663984614775661e+00 -1.6311570521926884e+00 -2.7170935422243847e+00 + 5.7788485680892201e+00 -1.9343166975922079e+00 -2.7827041951463460e+00 + 5.7669613081916307e+00 -2.2387980800950151e+00 -2.8620093850448405e+00 + id 14350 + loc 9.1117966175079346e-01 4.9941095709800720e-01 402 + blend 0.0000000000000000e+00 + interp 5.5432471543242379e-01:5.5431917218526949e-01:1.1623768773280818e-01:5.0343923073952224e-01:9.4062228480909182e-01:4.2090647643192924e-01:1.4073225903645237e+00:2.5047140474241614e-01:1.8421250655749501e+00:3.0855465761296946e-01:2.6659357556793051e+00:3.9625399542341239e-01:3.0058115194840660e+00:2.5772907447319954e-01:3.6382327150795901e+00 + CVs 20 + 1.4133264448420468e-01 3.1404632630600171e-01 2.5630790496116246e-01 + 3.1513154095232382e-01 6.2999019249224719e-01 5.1089421344097563e-01 + 5.0309931989247736e-01 9.5392639410332181e-01 7.7354469775230017e-01 + 7.1258230311460569e-01 1.2660056072836323e+00 1.0241590424825631e+00 + 9.4571138434185231e-01 1.5577966857803693e+00 1.2533228961085103e+00 + 1.1785832173280777e+00 1.7914852843508871e+00 1.5294113738968920e+00 + 1.3843281670149052e+00 1.8234784635244605e+00 1.6949373045312408e+00 + 1.6370657268456961e+00 1.7924099491490599e+00 1.8379062033148030e+00 + 1.9731239535802518e+00 1.6854178418404724e+00 2.0235563978095659e+00 + 2.3093808902249680e+00 1.4738454153221774e+00 2.2211560037326947e+00 + 2.5897988000579728e+00 1.1678386719858209e+00 2.3999173649420347e+00 + 2.8226779665982753e+00 8.1061205942562975e-01 2.5366766624659669e+00 + 3.0527096940263583e+00 4.4018450746874005e-01 2.6299097621692962e+00 + 3.3238402318009990e+00 7.8725492901569938e-02 2.6934746161641652e+00 + 3.6726270508593828e+00 -2.6665565294341997e-01 2.7556728663627981e+00 + 4.1380046923549898e+00 -6.0610407142801614e-01 2.8675885126568592e+00 + 4.7224868308093546e+00 -9.4408694470579213e-01 3.0863223158053059e+00 + 5.3376301618154107e+00 -1.2627634555258225e+00 3.4177506871374121e+00 + 5.8313958536081163e+00 -1.5215177317313469e+00 3.7373640363932941e+00 + id 14351 + loc 2.1732717752456665e-02 6.9536507129669189e-01 401 + blend 0.0000000000000000e+00 + interp 4.8147688714459419e-01:3.7264760068995967e-01:3.6533956007034352e-03:3.7699012623031058e-01:4.8644348054620823e-01:2.4624516987689801e-01:1.0019902374433756e+00:3.4510925730594239e-01:1.9380547799472467e+00:3.3619502036935300e-01:2.3231600001437469e+00:4.8147207237572276e-01:3.0001354510650158e+00:4.0920690651584374e-01:3.4378740696700678e+00 + CVs 20 + -1.8867256911549168e-04 2.6919373024930471e-01 -2.9517030905306768e-01 + -1.2979913122403819e-02 5.2205755544171573e-01 -5.8244983059677502e-01 + -3.8319696059891412e-02 7.6048397986255067e-01 -8.6618511184489888e-01 + -8.1305467555253086e-02 9.8313744583162843e-01 -1.1476975593266172e+00 + -1.5066894390203878e-01 1.1869353620166030e+00 -1.4254613557858498e+00 + -2.5549089900172933e-01 1.3692297528077755e+00 -1.6956727178073241e+00 + -4.0304623304595455e-01 1.5269535123289413e+00 -1.9515887631319013e+00 + -5.9539737016823424e-01 1.6575009912331273e+00 -2.1863288232512925e+00 + -8.2910775416357807e-01 1.7594500992594015e+00 -2.3951017478180625e+00 + -1.0983592838796095e+00 1.8317842550222097e+00 -2.5765092226579696e+00 + -1.3970874040606571e+00 1.8726688705338423e+00 -2.7340745688331878e+00 + -1.7203200112426589e+00 1.8781367397689244e+00 -2.8748034908900704e+00 + -2.0635831985996949e+00 1.8408566960741093e+00 -3.0040473934434937e+00 + -2.4159002104919987e+00 1.7534644996729698e+00 -3.1197792975590262e+00 + -2.7601108411710173e+00 1.6236504364574198e+00 -3.2099978816671801e+00 + -3.0858959557728713e+00 1.4747335115134068e+00 -3.2569877359074204e+00 + -3.3943637749509525e+00 1.3283374741787228e+00 -3.2476861369584618e+00 + -3.6888138382727691e+00 1.2022188699060823e+00 -3.1682059342797775e+00 + -3.9356220902623544e+00 1.1647001122000016e+00 -2.9752421115890333e+00 + id 14352 + loc 6.6268372535705566e-01 7.0582997798919678e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8501953898685063e-01:2.9770671077927430e-01:7.5377113529448980e-03:4.2290588414666636e-01:6.8674055766404885e-01:4.8501468879146076e-01:1.0450261229364513e+00:2.8733622642718326e-01:1.8957780174697363e+00:3.7618166121785118e-01:2.5569081337638684e+00:3.4295355190929527e-01:3.1090842734195396e+00 + CVs 20 + 1.2254313490559382e-01 2.8078747574189855e-01 -1.3814587826022084e-01 + 2.2312706246983535e-01 5.7636191983364671e-01 -2.8633480330427996e-01 + 3.3850910262412842e-01 8.7823864615824820e-01 -4.3821338225007905e-01 + 5.1398429062507933e-01 1.1707762130937520e+00 -5.8900570213760794e-01 + 7.5269474310951789e-01 1.4259032429195893e+00 -7.3366817970656029e-01 + 9.9334435473219285e-01 1.6419049832824220e+00 -8.7752461825219974e-01 + 1.1663025323208180e+00 1.8418608971065280e+00 -1.0270315812833517e+00 + 1.2350326915268885e+00 2.0326944046125268e+00 -1.1736922751298418e+00 + 1.1760936655010235e+00 2.1658067320670660e+00 -1.2873454476901978e+00 + 1.0140377198572375e+00 2.1370247392044557e+00 -1.3126534598321296e+00 + 8.6453137044761164e-01 1.9936558213379962e+00 -1.2627745082897088e+00 + 7.2194927581939783e-01 1.8511122139024554e+00 -1.2566712541833982e+00 + 5.8101418927204651e-01 1.6583190962185212e+00 -1.3077318773794724e+00 + 4.7703303518831741e-01 1.3912216023052575e+00 -1.3856238069351741e+00 + 4.2185063436770948e-01 1.0616410017022793e+00 -1.4804109978744029e+00 + 4.3874423784970540e-01 7.0392182643857226e-01 -1.5401193939951394e+00 + 5.2097884159721874e-01 3.9603466445837049e-01 -1.4937531110410456e+00 + 6.1629791162031999e-01 1.7980072817601017e-01 -1.3649580788126734e+00 + 6.9790945855394448e-01 -1.7758788640456116e-01 -1.4144935661062232e+00 + id 14353 + loc 7.7137684822082520e-01 5.6594973802566528e-01 378 + blend 0.0000000000000000e+00 + interp 2.9539667345873927e-01:2.9115186265310505e-01:2.6617871462047527e-02:2.7742946694896298e-01:9.0903270270768777e-01:2.8176709430713498e-01:1.8955036811770565e+00:2.6783233215928626e-01:2.9834090047737600e+00:2.9539371949200471e-01:3.5343728426618224e+00 + CVs 20 + 4.4961916925265050e-01 3.4202906590780452e-01 2.4027582942440187e-02 + 8.6595521602094461e-01 6.3477903576394468e-01 9.7532542737080175e-03 + 1.2928432323326635e+00 8.8911059324319996e-01 -3.3655035480768980e-02 + 1.7512968958172150e+00 1.1243025213779847e+00 -8.5342473761576110e-02 + 2.2347782792293414e+00 1.3446250870951364e+00 -1.1293637056611594e-01 + 2.7329998922406515e+00 1.5337486361373831e+00 -8.5460696887293963e-02 + 3.2297495851763300e+00 1.6631163847723311e+00 1.4923089258701006e-02 + 3.6972064178144688e+00 1.7116258194431277e+00 1.8749379709904446e-01 + 4.1017580252719466e+00 1.6744997175085843e+00 4.1273310749139092e-01 + 4.4170591443585367e+00 1.5630423800727389e+00 6.5800588615981970e-01 + 4.6312118016122277e+00 1.4016634251724627e+00 8.8980304990068237e-01 + 4.7450066681052299e+00 1.2237663652003032e+00 1.0847244157221512e+00 + 4.7790405234400417e+00 1.0553200342402627e+00 1.2414454336076179e+00 + 4.7757672000868494e+00 8.6815611782060342e-01 1.3819970768491288e+00 + 4.7632684805744976e+00 5.8140066648368682e-01 1.5202685535706477e+00 + 4.7549146885471707e+00 1.4975794576848767e-01 1.6656158609566842e+00 + 4.7925667476196798e+00 -4.1762118922047664e-01 1.8383917671686452e+00 + 4.9227082090141732e+00 -1.0524038556803514e+00 2.0197106090245915e+00 + 4.9965139332349722e+00 -1.4855113871818915e+00 2.0732134728882228e+00 + id 14354 + loc 9.5916651189327240e-02 6.9726216793060303e-01 412 + blend 0.0000000000000000e+00 + interp 3.7379067978728076e-01:2.6728582028086662e-01:9.1493796906837166e-01:3.7378694188048289e-01:1.9050374991040742e+00:2.8715889751654955e-01:2.5057742346277392e+00:2.7336345401479650e-01:3.1489724059863433e+00:3.0001824284506595e-01:3.9784499298983178e+00 + CVs 20 + 7.6939413010562263e-01 1.6634297909858894e-01 -1.4756091308322189e-01 + 1.3022342335752084e+00 1.8010011319012220e-01 -2.8286365383274736e-01 + 1.7940481238266108e+00 1.3710243704804093e-01 -3.9251765163069979e-01 + 2.3173870118097164e+00 6.6913739101582159e-02 -4.6913001944352228e-01 + 2.8553171235502988e+00 -3.5612822809061528e-02 -5.0539224437244346e-01 + 3.3888943838752090e+00 -1.7063327547425078e-01 -4.9401669508866464e-01 + 3.8993691700009201e+00 -3.3431262703092468e-01 -4.3251648984849339e-01 + 4.3711155572736198e+00 -5.2067602634317334e-01 -3.2601223950357694e-01 + 4.7936047683450003e+00 -7.2158560229954483e-01 -1.8285273709097505e-01 + 5.1611494109867708e+00 -9.2904164820163393e-01 -1.3456489555899842e-02 + 5.4732332743240919e+00 -1.1460981547438021e+00 1.5775390784752097e-01 + 5.7376115607967364e+00 -1.3910510827703868e+00 2.8958047835035883e-01 + 5.9641420200390565e+00 -1.6727121285875879e+00 3.5489711133352492e-01 + 6.1584323591014005e+00 -1.9762172117064738e+00 3.6250957895303826e-01 + 6.3216102207975275e+00 -2.2858878296548126e+00 3.2618555206262478e-01 + 6.4482679221212713e+00 -2.5919529730083868e+00 2.4219958047517648e-01 + 6.5316336364346634e+00 -2.8819897919472961e+00 1.0784762290843952e-01 + 6.5723301276074517e+00 -3.1402152154342877e+00 -6.2803162061939921e-02 + 6.6267890926601778e+00 -3.3787891390738043e+00 -2.0973185692120622e-01 + id 14355 + loc 4.5406734943389893e-01 9.6649146080017090e-01 379 + blend 0.0000000000000000e+00 + interp 4.5894165336440673e-01:2.7426964074494509e-01:1.5721101795155956e-02:3.8498893822409602e-01:1.0155403184061458e+00:3.2410506694911090e-01:1.9511292917914225e+00:4.5893706394787309e-01:2.5059742043511242e+00:4.5497687469523801e-01:3.1117109345459855e+00 + CVs 20 + -1.8628000481943910e-01 4.3400947776714838e-01 3.4433486069464081e-01 + -3.8174819443270913e-01 8.0034213927952769e-01 7.0068713382098924e-01 + -5.9976748010476588e-01 1.1059253196860661e+00 1.0864072888827336e+00 + -8.4999377581072899e-01 1.3813485069558689e+00 1.4862507027049785e+00 + -1.1511378028839712e+00 1.6407046784578232e+00 1.8689638973484071e+00 + -1.5281501939003137e+00 1.8578350636205712e+00 2.2008986596945750e+00 + -1.9786753421644165e+00 1.9904322618892294e+00 2.4528189693606657e+00 + -2.4688306701581038e+00 2.0209149072202193e+00 2.6166357967789367e+00 + -2.9601343237540156e+00 1.9582552513902174e+00 2.7028057832346652e+00 + -3.4253377423568425e+00 1.8235661845193070e+00 2.7275309341922771e+00 + -3.8422701537903237e+00 1.6350600288938339e+00 2.7062090403039454e+00 + -4.1738667845694604e+00 1.4039077659680281e+00 2.6632978769123126e+00 + -4.3963822531534467e+00 1.1581594744420463e+00 2.6372304381904028e+00 + -4.5497090284759478e+00 9.3928944640144829e-01 2.6532669615381006e+00 + -4.6823504123810578e+00 7.7229829610677392e-01 2.7212054452837311e+00 + -4.7901167728690250e+00 6.7671075861601926e-01 2.8440456892497430e+00 + -4.8494307940830490e+00 6.6310923809472300e-01 3.0037934905864274e+00 + -4.8650414450708777e+00 6.9969500125355699e-01 3.1683038974620752e+00 + -5.0797193616955507e+00 5.4297603690951401e-01 3.4116767644097905e+00 + id 14356 + loc 2.2535893321037292e-01 2.3836318869143724e-03 404 + blend 0.0000000000000000e+00 + interp 5.4697944799477061e-01:4.7369471943012587e-01:6.0850215992245382e-02:3.3321591375709891e-01:7.8206005732836348e-01:2.1508578185246940e-01:1.3531024753520784e+00:4.2121527649189350e-01:1.9232704752376657e+00:3.5343148118726486e-01:2.6317601376322930e+00:5.0273108753475693e-01:3.3018792486241173e+00:5.4697397820029070e-01:3.8757209018330805e+00 + CVs 20 + -1.1016476104776363e-01 1.9544104563034262e-01 -4.4472336404072089e-02 + -2.2929476584857333e-01 3.9939172799003336e-01 -1.1169951955889622e-01 + -3.5074278274999499e-01 6.0203119917067083e-01 -1.8589418264733518e-01 + -4.6766631724454943e-01 7.9824719432569968e-01 -2.5875605049777300e-01 + -5.8102231854295838e-01 9.9250393253883629e-01 -3.2412033359841858e-01 + -6.9546492125928983e-01 1.1905716806347573e+00 -3.7340884356384491e-01 + -8.1684458326155729e-01 1.3966863789884110e+00 -3.9605485091861714e-01 + -9.4532671816924274e-01 1.6091902116719237e+00 -3.8240637925912541e-01 + -1.0742788294780408e+00 1.8211023477137720e+00 -3.2773691479054201e-01 + -1.1977395743727248e+00 2.0257047406283943e+00 -2.3210502006155820e-01 + -1.3144092184859029e+00 2.2187662303807572e+00 -9.6214845901784085e-02 + -1.4205057120068831e+00 2.3936728299843493e+00 7.4869889706111969e-02 + -1.5131926972375105e+00 2.5453472632097363e+00 2.7420299838865914e-01 + -1.5839012022303183e+00 2.6677167465762150e+00 4.8222693314646459e-01 + -1.6243126284697631e+00 2.7587759361323179e+00 6.6726896779661127e-01 + -1.6439594439020113e+00 2.8262340406767574e+00 8.2639713529223013e-01 + -1.6558414872189808e+00 2.8820250932844091e+00 1.0095537102909906e+00 + -1.6507214182139451e+00 2.9209367011211977e+00 1.2450246442425363e+00 + -1.6078052043126996e+00 2.9049116723541641e+00 1.3966588847944819e+00 + id 14357 + loc 9.9487161636352539e-01 4.0387016534805298e-01 396 + blend 0.0000000000000000e+00 + interp 4.5742106770917584e-01:1.6769933633225281e-01:7.4767481986367512e-02:4.4010653937600647e-01:7.4374439239843348e-01:4.5741649349849878e-01:1.0919258998959902e+00:2.4525806132294675e-01:1.9999901617647939e+00:3.1830119787766276e-01:3.0101488348884540e+00:3.6546330775978153e-01:3.7209845778089825e+00 + CVs 20 + -7.1219210265702482e-01 1.0072862637593705e-01 4.5128180582773447e-01 + -1.1622424757202023e+00 8.1101581916124099e-02 7.9799083108395763e-01 + -1.5537088397165650e+00 2.3377565571034542e-02 1.1228760454445972e+00 + -1.9597970247512160e+00 -3.5814069646597058e-02 1.4395429382709484e+00 + -2.3832758360510509e+00 -1.0190890704802491e-01 1.7350517064981887e+00 + -2.8222469436982882e+00 -1.8285282770889999e-01 2.0068479445149388e+00 + -3.2665289900668966e+00 -2.8207343134116347e-01 2.2646280970690125e+00 + -3.7015737422172865e+00 -3.9601880111910082e-01 2.5221083242424611e+00 + -4.1160054396773154e+00 -5.2445359048656726e-01 2.7897444682422625e+00 + -4.5020231269382434e+00 -6.7359603271758584e-01 3.0764700974310308e+00 + -4.8452912351380046e+00 -8.5218457700488504e-01 3.3950535809388906e+00 + -5.1259948937485644e+00 -1.0645108225903634e+00 3.7567005446384565e+00 + -5.3330972407273105e+00 -1.3071878566786639e+00 4.1614944157461906e+00 + -5.4676106984440729e+00 -1.5715921806367510e+00 4.5984283968691795e+00 + -5.5356400897238336e+00 -1.8444028839137601e+00 5.0532437456202688e+00 + -5.5462023801753908e+00 -2.1151302102993990e+00 5.5152266266812369e+00 + -5.5092346963217800e+00 -2.3877478594866988e+00 5.9737618970081305e+00 + -5.4300453288103059e+00 -2.6746140327101484e+00 6.4105441989139065e+00 + -5.2971556316175565e+00 -2.9569144393960873e+00 6.7685774780160486e+00 + id 14358 + loc 5.4459166526794434e-01 9.1603946685791016e-01 399 + blend 0.0000000000000000e+00 + interp 4.5941928745997801e-01:3.5581410530258395e-01:4.0614926496776371e-01:3.3522771901601650e-01:1.0369343760279472e+00:4.3008161045061577e-01:1.7380752071282763e+00:3.2986280345500163e-01:2.8611948992617107e+00:2.7838343226146151e-01:3.3174050606673351e+00:4.5941469326710344e-01:3.9656087521495111e+00 + CVs 20 + -1.3585615887270008e-01 3.1968222985328426e-01 -2.5265583795373331e-01 + -2.5343594265678870e-01 6.3108681008176315e-01 -5.2671316849143679e-01 + -3.6533925255009914e-01 9.2766172985699880e-01 -8.2150884999055196e-01 + -4.8220685107901229e-01 1.1992408470659570e+00 -1.1396569825569409e+00 + -6.1429901585271895e-01 1.4331650790313464e+00 -1.4865000468661282e+00 + -7.7107412308617973e-01 1.6126827785643714e+00 -1.8629820880526624e+00 + -9.5899077921438136e-01 1.7207556593741933e+00 -2.2640367588411090e+00 + -1.1807743587390029e+00 1.7490876235594854e+00 -2.6779302586722276e+00 + -1.4293802834701606e+00 1.6985498720458614e+00 -3.0838574733459154e+00 + -1.6792771303408887e+00 1.5679323785965393e+00 -3.4560760671411757e+00 + -1.9046149936576964e+00 1.3540050864851598e+00 -3.7789840979170637e+00 + -2.1225340696504076e+00 1.0590507497470003e+00 -4.0609497666037244e+00 + -2.3814836915444957e+00 6.9406482409585901e-01 -4.3131653628058118e+00 + -2.6980183266968232e+00 2.9015951370382420e-01 -4.5199776465453230e+00 + -3.0419852389366793e+00 -1.2625557404514010e-01 -4.6581109983260758e+00 + -3.4189161707116607e+00 -5.3995048514912214e-01 -4.7361079726351658e+00 + -3.9378937001829435e+00 -8.8574804661451423e-01 -4.7946998185108356e+00 + -4.6310209570517360e+00 -9.7819312289511351e-01 -4.8502169414528868e+00 + -5.0343255271062937e+00 -1.0987005139964003e+00 -4.8331878479476824e+00 + id 14359 + loc 8.1313109397888184e-01 4.0091982483863831e-01 400 + blend 0.0000000000000000e+00 + interp 4.3549525375544074e-01:4.3549089880290320e-01:3.5064258010691796e-02:3.1093100299339860e-01:5.9650302502905306e-01:3.7483397872559748e-01:1.0080174047254780e+00:2.7693114213202075e-01:1.7047572584686979e+00:2.9651345033447579e-01:2.5792843288294347e+00:2.7698306987872889e-01:3.5101675137018535e+00 + CVs 20 + 1.1302136148198028e-01 1.3143300177860229e-01 2.5908904411317984e-01 + 2.0221207140200084e-01 2.5285303824837546e-01 5.0329964776762348e-01 + 2.7987971600248568e-01 3.7056853896647168e-01 7.4295197676100355e-01 + 3.5462929475045046e-01 4.8681309518692029e-01 9.8306709529825986e-01 + 4.3173732147147448e-01 5.9867940581322676e-01 1.2243501208580714e+00 + 5.1509012414106947e-01 7.0447310759303572e-01 1.4646660364447999e+00 + 6.0514105330126911e-01 8.1044057026807192e-01 1.7015207683445623e+00 + 7.0017367127947994e-01 9.2495028785366240e-01 1.9374428316298511e+00 + 7.9844955684394847e-01 1.0462550638684016e+00 2.1840877153583271e+00 + 8.9820756299091775e-01 1.1635063345999486e+00 2.4537187437893877e+00 + 9.9714635729484025e-01 1.2664319800341093e+00 2.7520850303295963e+00 + 1.0946723514639918e+00 1.3470745632804098e+00 3.0812450353787790e+00 + 1.1929010272001070e+00 1.3934764717725514e+00 3.4409682252874041e+00 + 1.2909990416798514e+00 1.3896210981182819e+00 3.8286572759697499e+00 + 1.3774599045034845e+00 1.3201331645273735e+00 4.2422785177776454e+00 + 1.4299154894267374e+00 1.1674901711252446e+00 4.6758814037143068e+00 + 1.4292282055307099e+00 9.1300787031376096e-01 5.1048044160519277e+00 + 1.3793206866138825e+00 5.5935543695415024e-01 5.4853439052843775e+00 + 1.3332192939695255e+00 2.0095510507864622e-01 5.7800827338393184e+00 + id 14360 + loc 5.6636470556259155e-01 5.5282223224639893e-01 395 + blend 0.0000000000000000e+00 + interp 4.3502456234627501e-01:3.8454726322305166e-01:4.5331191853354103e-01:2.5772827975389617e-01:1.0570720055820555e+00:2.6787616330184011e-01:2.2371077470389702e+00:4.3502021210065156e-01:2.8542021405502593e+00:2.8375585273520398e-01:3.6421314591295748e+00:4.1065468673018057e-01:3.9995122452069376e+00 + CVs 20 + 2.7198460510828421e-01 2.7865034984816900e-01 -2.6082920620453409e-01 + 4.8917538256892767e-01 5.1031290725064482e-01 -4.5150823181377031e-01 + 7.0175629953566110e-01 7.2127071741170101e-01 -6.2149918559300765e-01 + 9.4244005717026358e-01 9.2861558751295536e-01 -7.9825302066964743e-01 + 1.2202022023112156e+00 1.1258351255625412e+00 -9.8249527081519838e-01 + 1.5414026890536101e+00 1.3024574512791098e+00 -1.1739937232559823e+00 + 1.9077770231058813e+00 1.4491332797723571e+00 -1.3770525656706618e+00 + 2.3161674090731972e+00 1.5577486518971080e+00 -1.5997140291616581e+00 + 2.7628991942320074e+00 1.6161486409005714e+00 -1.8460260476249177e+00 + 3.2443677356472445e+00 1.6046637218949646e+00 -2.1142161447049781e+00 + 3.7412350749777832e+00 1.4995379051425302e+00 -2.4008205809077379e+00 + 4.2083839978271467e+00 1.2878103946418611e+00 -2.6972673014949713e+00 + 4.6027317203046243e+00 9.8009039234123141e-01 -2.9880569372515713e+00 + 4.9113288790015375e+00 5.9840370154211442e-01 -3.2618232682986026e+00 + 5.1404396146176712e+00 1.5931472464277885e-01 -3.5181091659327848e+00 + 5.2949827673211969e+00 -3.2309027580309158e-01 -3.7612246978278718e+00 + 5.3744924155921474e+00 -8.3089510553908852e-01 -3.9881889891879938e+00 + 5.3810784000740401e+00 -1.3483566203419399e+00 -4.1873098828388509e+00 + 5.3360843709998438e+00 -1.8722371162353939e+00 -4.3677684168907858e+00 + id 14361 + loc 8.7376129627227783e-01 9.8982357978820801e-01 402 + blend 0.0000000000000000e+00 + interp 3.9289245810159912e-01:2.6958481113823379e-01:9.8698382089773107e-02:3.2300003263784649e-01:9.7544132427602182e-01:3.9262014753767094e-01:1.0757156527194018e+00:2.8686398898082971e-01:1.9828657112658714e+00:2.9774350026560154e-01:2.4820140910594191e+00:2.4446439904967560e-01:3.0100053091491308e+00:3.9288852917701811e-01:3.7537235073953177e+00 + CVs 20 + -1.0326937340834480e-02 1.1451225935949717e-01 -2.4476533105967824e-01 + -4.3407854094300868e-03 2.3051780537024211e-01 -4.9098515430794298e-01 + 1.9909256664384589e-02 3.4443982452344141e-01 -7.2870102875534548e-01 + 6.0558615563677809e-02 4.5210366742197156e-01 -9.5149042342955004e-01 + 1.1749385792302358e-01 5.4810371998293383e-01 -1.1528971593992567e+00 + 1.9398728710562402e-01 6.2399126964300577e-01 -1.3223703715874058e+00 + 2.8819795614190247e-01 6.7188185766001174e-01 -1.4513624121764290e+00 + 3.8875843877316307e-01 6.8979774569982022e-01 -1.5399604914302294e+00 + 4.8211712110767185e-01 6.8699155509237808e-01 -1.5991058020436804e+00 + 5.6279517668695211e-01 6.8091182452579169e-01 -1.6476153425141364e+00 + 6.3188663575933757e-01 6.8626018719522408e-01 -1.7109871015094127e+00 + 6.8283323212080427e-01 7.0416194388728681e-01 -1.8102894539778451e+00 + 6.8793995552657539e-01 7.1951290733283302e-01 -1.9352543167742720e+00 + 6.3194223202503208e-01 7.2339841740279487e-01 -2.0408788134193099e+00 + 5.3775983009255868e-01 7.2714908614432172e-01 -2.1041946535077201e+00 + 4.2356157214866641e-01 7.4012818436561412e-01 -2.1276569176320566e+00 + 3.0327713566397085e-01 7.6593995217530986e-01 -2.1091921276326766e+00 + 1.8561232079582507e-01 8.0292995156546620e-01 -2.0604812489740976e+00 + -1.4608560033421369e-02 8.0466434453062252e-01 -2.1110119341008691e+00 + id 14362 + loc 2.7106487751007080e-01 5.2485519647598267e-01 393 + blend 0.0000000000000000e+00 + interp 4.4506523368609618e-01:3.1780528233413186e-01:3.8013665094764004e-02:4.4506078303375934e-01:6.5353726428414216e-01:3.3125932317891876e-01:1.0196731092998017e+00:3.1097294202785403e-01:2.0722861173239737e+00:3.6536913042675884e-01:3.0499286931871779e+00 + CVs 20 + -3.9116891739037529e-01 3.5071392646322275e-01 -1.2696865497833626e-01 + -7.3900394230872801e-01 6.6900576573223669e-01 -2.4839188718652111e-01 + -1.0626073844707258e+00 9.7322830788961268e-01 -3.7145690125143349e-01 + -1.3727613076939875e+00 1.2700938664584229e+00 -5.0271436402783642e-01 + -1.6794260423609670e+00 1.5601761365667910e+00 -6.4952595417480485e-01 + -1.9937587538566497e+00 1.8468037911543074e+00 -8.1254703819931584e-01 + -2.3274004891107811e+00 2.1349908819102170e+00 -9.8231335997695712e-01 + -2.7070240104273706e+00 2.4181097705784502e+00 -1.1490920212668398e+00 + -3.1773993991340483e+00 2.6635632245247809e+00 -1.3108202923884187e+00 + -3.7625691543544226e+00 2.8361926204356736e+00 -1.4781207764175366e+00 + -4.4420934701111108e+00 2.9272693572794459e+00 -1.6768326704305090e+00 + -5.1769414680203756e+00 2.9213404698779604e+00 -1.9198148579123828e+00 + -5.9256388451057447e+00 2.7770947934167869e+00 -2.1898398724790544e+00 + -6.6341769101775387e+00 2.4750331908123337e+00 -2.4687397407493701e+00 + -7.2493542926020442e+00 2.0546779731678133e+00 -2.7367545584675486e+00 + -7.7661455429702286e+00 1.6113947612561024e+00 -2.9257387070714893e+00 + -8.2192610319762025e+00 1.2382761421624995e+00 -2.9827752479023308e+00 + -8.6272979772100484e+00 9.4117307679659934e-01 -2.9766547601870523e+00 + -9.0056469742701690e+00 6.7013444152909285e-01 -3.0324868674229757e+00 + id 14363 + loc 4.8582121729850769e-01 5.0416880846023560e-01 401 + blend 0.0000000000000000e+00 + interp 4.8077958865370601e-01:3.2914829258069384e-01:6.3030946179980063e-02:3.7025725523270231e-01:8.8272350241009245e-01:2.9451697601418253e-01:1.2871086831017557e+00:3.5747785879911309e-01:2.1416109702633834e+00:4.8077478085781949e-01:2.9311756676389056e+00:4.7472632119075792e-01:3.0667103730201606e+00:3.3745467600229984e-01:3.5400952524191376e+00 + CVs 20 + -1.7893365293415614e-01 2.7540170521051704e-01 -1.9868234030856297e-01 + -3.0828003172084528e-01 5.7660223079664741e-01 -4.1376817140643146e-01 + -4.1256008765594210e-01 8.9137188142545098e-01 -6.4515178210898816e-01 + -5.0415924961840419e-01 1.2087039684290417e+00 -9.0075685454919030e-01 + -5.8469194256731560e-01 1.5167001305313412e+00 -1.1951781299362263e+00 + -6.6906432518099357e-01 1.8055703754876595e+00 -1.5405065423084372e+00 + -7.9181709012545054e-01 2.0691036374688418e+00 -1.9385524750893208e+00 + -9.9106512307972472e-01 2.2961983358246325e+00 -2.3769338472045982e+00 + -1.2902823287838321e+00 2.4666133582789223e+00 -2.8291803647734239e+00 + -1.6886950685007074e+00 2.5611668192236694e+00 -3.2626717093474666e+00 + -2.1665014291034437e+00 2.5746992810981775e+00 -3.6548155199738770e+00 + -2.6992437304450934e+00 2.5081776657624513e+00 -3.9899517243536766e+00 + -3.2624538955563489e+00 2.3578679859297713e+00 -4.2671800818152281e+00 + -3.8369111386039343e+00 2.1130588894150462e+00 -4.4947919718616767e+00 + -4.3893325936293595e+00 1.7836673361029627e+00 -4.6612016001962511e+00 + -4.8566389608288807e+00 1.4366621314438686e+00 -4.7596032238373196e+00 + -5.1989866610843203e+00 1.1479077535097117e+00 -4.8381844956487665e+00 + -5.4766541678732565e+00 8.9043275010020728e-01 -4.9841465366508331e+00 + -5.8691218260979410e+00 4.8993984879486380e-01 -5.2862355022720200e+00 + id 14364 + loc 2.1395842730998993e-01 5.0024640560150146e-01 381 + blend 0.0000000000000000e+00 + interp 4.0185562337497904e-01:3.6689673351017327e-01:7.4636732185076715e-02:4.0185160481874532e-01:1.0004253972972108e+00:3.1783409334682999e-01:1.9596437579140218e+00:3.7599668095245753e-01:2.6404017149612633e+00:3.5296408767733523e-01:3.2666252304930228e+00 + CVs 20 + 9.1106207519235138e-01 2.8781471611175763e-01 -6.2923010956439929e-01 + 1.4877818531883300e+00 4.2858391813635283e-01 -1.0566824191243733e+00 + 1.9802787006737057e+00 4.9942156063776522e-01 -1.4248966686693576e+00 + 2.4980198384344208e+00 5.3462181378047635e-01 -1.7850041632058160e+00 + 3.0442625546445514e+00 5.2820454030928543e-01 -2.1326786150648132e+00 + 3.6124148061014836e+00 4.7437810943996939e-01 -2.4793495633114837e+00 + 4.1826564345665824e+00 3.6719719187262412e-01 -2.8398136525597399e+00 + 4.7306886244224335e+00 1.9816841934660434e-01 -3.2123073083216749e+00 + 5.2434185946056360e+00 -4.6934543040381804e-02 -3.5638312818791462e+00 + 5.7138400481467357e+00 -3.7090784943758592e-01 -3.8456664879678479e+00 + 6.1363318835719403e+00 -7.4199341734209923e-01 -4.0330973687876019e+00 + 6.5173701571129019e+00 -1.1181307929153146e+00 -4.1321959454414579e+00 + 6.8675851974633453e+00 -1.4980255614119022e+00 -4.1598480359540542e+00 + 7.1624651349155943e+00 -1.9483954176123446e+00 -4.1268375122994039e+00 + 7.3640856623080708e+00 -2.5314569043066752e+00 -4.0549197352790163e+00 + 7.5042572288030414e+00 -3.2585844837850146e+00 -3.9850217565737651e+00 + 7.6604308775018630e+00 -4.1127097217559045e+00 -3.9703509482427455e+00 + 7.8606746938725767e+00 -5.0061926801536414e+00 -4.0887501259038785e+00 + 8.0598459501108817e+00 -5.7073149597195023e+00 -4.3765944392664551e+00 + id 14365 + loc 2.7781876921653748e-01 5.9685260057449341e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9094543167691795e-01:3.9098990021320446e-01:5.6505788548685065e-01:3.7855612357938767e-01:1.4308282714311660e+00:2.8271963069267553e-01:2.0709019033880809e+00:3.2611286644341020e-01:2.9804941506661193e+00:4.9094052222260121e-01:3.2877762015668264e+00:4.1014865497899106e-01:3.9986918727228900e+00 + CVs 20 + -4.1298066543541609e-02 3.5981532209358624e-01 2.1484226401198342e-01 + -4.4481659814388147e-02 6.8512094706991866e-01 3.5523612886055866e-01 + -2.6373131107013170e-02 1.0025371026059959e+00 4.4999474046030474e-01 + 4.3072766855516420e-03 1.3360221593375257e+00 5.1786667596563007e-01 + 5.2671553697880846e-02 1.6833688154576378e+00 5.5159067121449878e-01 + 1.2387067717857903e-01 2.0377727297271182e+00 5.3801329054886537e-01 + 2.1995609236985331e-01 2.3788961603997381e+00 4.5291375688589575e-01 + 3.3274789731150756e-01 2.6702268862977103e+00 2.7640513218675200e-01 + 4.4276831402786448e-01 2.8736051175926485e+00 1.2011066058490005e-02 + 5.2824166195242361e-01 2.9645319934985794e+00 -3.1457419449315394e-01 + 5.7438610714843419e-01 2.9374838017220446e+00 -6.6931123956778027e-01 + 5.7576169257917664e-01 2.8005326856061075e+00 -1.0230723009977156e+00 + 5.3407958817918921e-01 2.5655912617346313e+00 -1.3562750260537360e+00 + 4.5638344225279537e-01 2.2412584172046084e+00 -1.6557550097657878e+00 + 3.5224613333013066e-01 1.8275916397747647e+00 -1.9033975393200449e+00 + 2.2441380968021729e-01 1.3134863796772795e+00 -2.0406012613333573e+00 + 6.2399924628311398e-02 7.3021688193237766e-01 -1.9262598127046249e+00 + -1.3122438439001147e-01 2.5069625943193841e-01 -1.5335469612369330e+00 + -3.1051857233452052e-01 -1.6295667742286757e-01 -1.3734149400633033e+00 + id 14366 + loc 7.2979235649108887e-01 4.0690246224403381e-01 412 + blend 0.0000000000000000e+00 + interp 4.0301111171317650e-01:2.9163144745613240e-01:7.5493050403912187e-02:4.0300708160205939e-01:1.0031848815883679e+00:3.2155464736768519e-01:1.9230096579553855e+00:2.9455803615478532e-01:2.7954650623543138e+00:3.4936357046507571e-01:3.3058073367458181e+00 + CVs 20 + -6.1152300296163664e-01 1.3906304559516974e-01 1.9526481202805968e-01 + -1.0376638273031913e+00 1.8940408889639099e-01 3.5085198147150748e-01 + -1.4073310915729058e+00 2.0298380580971853e-01 4.8933019164339675e-01 + -1.7846658604773538e+00 2.0495210224697857e-01 6.1946470331752634e-01 + -2.1629010105194402e+00 1.9377727172717729e-01 7.3683912740782864e-01 + -2.5347077055187750e+00 1.6888243187534613e-01 8.3773826932055317e-01 + -2.8933705717005731e+00 1.3137115895408868e-01 9.1936717526353195e-01 + -3.2335353355756342e+00 8.3332236729086295e-02 9.8034769252951992e-01 + -3.5508377763823882e+00 2.6891249230091674e-02 1.0209658749274593e+00 + -3.8416892589358498e+00 -3.6008718795921490e-02 1.0424902811200436e+00 + -4.1072650197986249e+00 -1.0282269657940102e-01 1.0447780387663852e+00 + -4.3620039434630229e+00 -1.7014844247283634e-01 1.0237242846103924e+00 + -4.6288197608326520e+00 -2.4429289742439364e-01 9.7737896780813704e-01 + -4.9120689343687589e+00 -3.4915629300143491e-01 9.2079795229004513e-01 + -5.1962602450489443e+00 -5.0440989220256549e-01 8.7285822408670977e-01 + -5.4721842781809764e+00 -7.1387279539881110e-01 8.3557435344746533e-01 + -5.7373744432089939e+00 -9.7652025226103301e-01 8.0544966610309743e-01 + -5.9830584960251816e+00 -1.2849684205630287e+00 7.8670616413888128e-01 + -6.1119509139903005e+00 -1.5709169457219754e+00 7.9536886665914952e-01 + id 14367 + loc 7.0708066225051880e-01 7.5721251964569092e-01 378 + blend 0.0000000000000000e+00 + interp 3.2339158421640235e-01:3.2079265233299381e-01:5.2831872547322267e-01:2.4965331366458723e-01:1.0236456981365740e+00:3.2338835030056018e-01:1.8297651224630376e+00:2.6054640377277505e-01:2.1475784373955600e+00:3.0630198401845848e-01:3.0127251238166055e+00:2.6877279762144296e-01:3.9826176848603327e+00 + CVs 20 + 4.5601230710014223e-01 3.4967650294904856e-01 1.1019305657077363e-01 + 8.6713432180152727e-01 6.3479021346247932e-01 1.7369225107383282e-01 + 1.2934027822469367e+00 8.7525368508482038e-01 1.9704831616412388e-01 + 1.7552360749115825e+00 1.0921143164106448e+00 1.9124652413625692e-01 + 2.2424291882104352e+00 1.2990717214136327e+00 1.7732634931982605e-01 + 2.7524773710916168e+00 1.4964617124398287e+00 1.8128909687496386e-01 + 3.2866711341077188e+00 1.6669046873625990e+00 2.2569419614163055e-01 + 3.8376878942832482e+00 1.7904330472778600e+00 3.2459663609319001e-01 + 4.3875244224730512e+00 1.8542190290668163e+00 4.8133096297907207e-01 + 4.9151974502729932e+00 1.8514528859294630e+00 6.8606079167943290e-01 + 5.4065745313777400e+00 1.7783820714629004e+00 9.1821290033313852e-01 + 5.8568402821607348e+00 1.6299223937442755e+00 1.1565559127156300e+00 + 6.2625753143158391e+00 1.3993214121060125e+00 1.3839020805272335e+00 + 6.6179035445174765e+00 1.0928304859200177e+00 1.5862996480193143e+00 + 6.9266591577094658e+00 7.4293159119162455e-01 1.7599596571031615e+00 + 7.2106393279113323e+00 4.0265123225191202e-01 1.9157468451313235e+00 + 7.4941191262036053e+00 1.3005807673314962e-01 2.0608448194782540e+00 + 7.7963041897335525e+00 -5.7611666884324730e-02 2.1876579703329497e+00 + 8.2055658266458664e+00 -2.7939528507524258e-01 2.3324113770506876e+00 + id 14368 + loc 5.7574081420898438e-01 7.4343687295913696e-01 379 + blend 0.0000000000000000e+00 + interp 4.6545351831343412e-01:2.9543183662298639e-01:2.9286664069607671e-03:3.9496469378128229e-01:6.8822268360431527e-01:3.3807426605504770e-01:1.0717458336030385e+00:3.2485714943319477e-01:2.0947722567128562e+00:4.6544886377825101e-01:2.9404153002832425e+00:4.3924712299537644e-01:3.3473588877060232e+00 + CVs 20 + -3.1871166023717917e-01 3.4172058821129209e-01 2.4614509893316555e-01 + -6.0325637550797973e-01 6.1646136719864231e-01 4.7416191905804178e-01 + -8.9022445742763656e-01 8.5234997118719313e-01 7.0279711267906142e-01 + -1.1959778530657217e+00 1.0784416964430710e+00 9.2540597469912533e-01 + -1.5144945924715647e+00 1.3101236540279100e+00 1.1096603864412737e+00 + -1.8428097097427447e+00 1.5379581749244600e+00 1.2255500767301051e+00 + -2.1904665694511318e+00 1.7329150041020656e+00 1.2568334937475885e+00 + -2.5629337706309636e+00 1.8663091899433264e+00 1.1971404313831833e+00 + -2.9497474094949387e+00 1.9208483801257163e+00 1.0484712163223417e+00 + -3.3334528984147989e+00 1.8913729051577000e+00 8.2312094377642120e-01 + -3.6922467028829837e+00 1.7819564050635268e+00 5.4549633931021568e-01 + -4.0068679186474068e+00 1.5928828382374052e+00 2.5288992100968566e-01 + -4.2983835285547292e+00 1.3039051442949061e+00 -2.0197030552074779e-02 + -4.6485614038441021e+00 8.8088877427603007e-01 -2.3807529550159856e-01 + -5.1376700051562088e+00 3.5020569823813874e-01 -3.0165907824748339e-01 + -5.7639587767323786e+00 -1.3336384812009294e-01 -8.1181724819173517e-02 + -6.4077931954745662e+00 -3.5118050838302617e-01 4.5005798456142121e-01 + -6.8608640130963252e+00 -2.3213394218492756e-01 1.0844071041059087e+00 + -7.1434403502782198e+00 -1.4828510576187304e-01 1.4504871111996986e+00 + id 14369 + loc 7.5514632463455200e-01 4.1024214029312134e-01 1069 + blend 0.0000000000000000e+00 + interp 3.3083578266372687e-01:2.9310780441184275e-01:6.7332824849270256e-01:2.6770878453394359e-01:1.7207074757837637e+00:3.3083247430590024e-01:2.3902925521465983e+00:2.9072988022903823e-01:2.9949994166494789e+00:2.6235686870380492e-01:3.8066736229838005e+00 + CVs 20 + -1.0976381409738303e-01 2.0304309658701591e-01 2.4202916694266491e-01 + -2.4602901419219106e-01 3.8929932538997941e-01 4.7655100180423010e-01 + -4.1931482538431408e-01 5.5716538895445733e-01 6.9917523068278808e-01 + -6.3832225293782052e-01 7.0873407421209667e-01 8.9988033931970968e-01 + -9.1071254286559800e-01 8.6032185194038102e-01 1.0703139838499656e+00 + -1.2197279738614721e+00 1.0570841193399991e+00 1.2146647376833810e+00 + -1.4980185348524822e+00 1.3443638782980640e+00 1.3463382029060413e+00 + -1.6730819385838922e+00 1.7039517496383410e+00 1.4828867664197976e+00 + -1.7253698898140724e+00 2.0722125499361326e+00 1.6479059720123823e+00 + -1.6668638606359312e+00 2.3693464993537958e+00 1.8655035317699076e+00 + -1.5336529148845930e+00 2.5138579549926980e+00 2.1296539247891397e+00 + -1.3750316984338238e+00 2.4930761032712323e+00 2.3989918115908218e+00 + -1.2219292243467552e+00 2.3405000019357169e+00 2.6402572375470177e+00 + -1.1053211913177630e+00 2.0938383640020581e+00 2.8264742225582351e+00 + -1.0469674581660811e+00 1.7945059570287354e+00 2.9488529172305542e+00 + -1.0620951650237240e+00 1.4730795811388786e+00 2.9909954106431043e+00 + -1.1606516071405713e+00 1.1786236964078460e+00 2.9156203588715277e+00 + -1.3101418524501240e+00 9.5778444519287320e-01 2.7399482248900529e+00 + -1.4262289357887996e+00 6.2606670598971614e-01 2.6307345942563694e+00 + id 14370 + loc 1.4071837067604065e-01 8.6745530366897583e-01 404 + blend 0.0000000000000000e+00 + interp 4.4371876664391263e-01:4.2459051536142517e-01:5.5805491564249632e-02:2.9051391334452403e-01:7.7140360192242086e-01:3.4541808224178921e-01:1.9141249716817001e+00:3.8704739862793058e-01:2.7903394236265906e+00:4.4371432945624623e-01:3.0711338911227961e+00:3.2411218838163613e-01:3.7011096895081379e+00 + CVs 20 + 1.0985951207586490e-02 5.1689497476372220e-02 2.5911660815190599e-02 + 1.5856118566216860e-02 1.1270956910559210e-01 4.9408219933046178e-02 + 1.6716802075179629e-02 1.8014160795441125e-01 6.8029354824641716e-02 + 1.6936219110642386e-02 2.5546927961033888e-01 8.0448853391937164e-02 + 1.6767288539682984e-02 3.3870224811918220e-01 8.6522918238490495e-02 + 1.5784575531107486e-02 4.2870286403830293e-01 8.5839447405314143e-02 + 1.3242012333687603e-02 5.2428789028252687e-01 7.8443620344334081e-02 + 8.1911804287592704e-03 6.2429883913340189e-01 6.4844052669689331e-02 + -4.3504610791789133e-04 7.2770004056962478e-01 4.5988723203067336e-02 + -1.3620144966600412e-02 8.3371865167929426e-01 2.3270218907739254e-02 + -3.2055104940589108e-02 9.4187607644804949e-01 -1.8169665841327454e-03 + -5.5935069127383275e-02 1.0520034066151069e+00 -2.8095150279242101e-02 + -8.4802562129351555e-02 1.1642378694489617e+00 -5.5295092317615285e-02 + -1.1763689899387908e-01 1.2792231252464408e+00 -8.4250661532157323e-02 + -1.5275193388720743e-01 1.3976250232573988e+00 -1.1555890495208845e-01 + -1.8755175538555602e-01 1.5191548490595097e+00 -1.4784097413705852e-01 + -2.1857156004828449e-01 1.6434013251557225e+00 -1.7962803163045168e-01 + -2.4256065826292050e-01 1.7691865931583730e+00 -2.1008308590620012e-01 + -2.8156909446518907e-01 1.8848351031265964e+00 -2.3230871413251508e-01 + id 14371 + loc 2.7701330184936523e-01 2.0880420506000519e-01 402 + blend 0.0000000000000000e+00 + interp 3.8229135444783147e-01:2.8412556365050151e-01:1.9491382230641308e-01:3.8228753153428702e-01:9.0252619343086649e-01:2.8638342293701974e-01:1.1608079333960646e+00:2.9212159298531326e-01:2.1343299099677684e+00:2.8923465479410582e-01:3.2404667267897853e+00 + CVs 20 + -1.7039036380532463e-01 2.7178947894481753e-01 2.5077754773385463e-01 + -3.4272787538873217e-01 5.3237740342969386e-01 4.8010353788589777e-01 + -5.3751154759013331e-01 7.8547447142055493e-01 6.7302899835348218e-01 + -7.6356522555990058e-01 1.0275637633494157e+00 8.2219173105649479e-01 + -1.0182746397449531e+00 1.2528941919022207e+00 9.3304334640231246e-01 + -1.3000958251457373e+00 1.4588279223652421e+00 1.0138659987057763e+00 + -1.6090169745016201e+00 1.6438956244476381e+00 1.0655067781450571e+00 + -1.9473494047392481e+00 1.8065448975337020e+00 1.0905618463451385e+00 + -2.3176153433063575e+00 1.9429176494610867e+00 1.1029700941329503e+00 + -2.7133538758699594e+00 2.0448461733811660e+00 1.1164931612907283e+00 + -3.1194793508916137e+00 2.1019569192825958e+00 1.1312741530090287e+00 + -3.5239569622821403e+00 2.1012127754605396e+00 1.1463760578830717e+00 + -3.9246298037602618e+00 2.0195890136344516e+00 1.1786938794868560e+00 + -4.3216033586740208e+00 1.8255937124281467e+00 1.2660879167716463e+00 + -4.6944597719573053e+00 1.5094953721965738e+00 1.4661633892628996e+00 + -5.0011771683806927e+00 1.1254488271118959e+00 1.8454905356308147e+00 + -5.2101117888772830e+00 8.1352537689560678e-01 2.4424079012833801e+00 + -5.3070597671307675e+00 7.3635286663669963e-01 3.1734380964620326e+00 + -5.3583454483023107e+00 6.7340551066023213e-01 3.7917704611651208e+00 + id 14372 + loc 5.6512564420700073e-01 6.0204148292541504e-02 395 + blend 0.0000000000000000e+00 + interp 5.5937416383588767e-01:2.5605235194842246e-01:7.6033246930422682e-01:5.5936857009424934e-01:1.2270244736038525e+00:5.2989954394122563e-01:1.6330833326574643e+00:4.1568299621299376e-01:2.0351265119457782e+00:3.2714659001726037e-01:2.6003686945114231e+00:4.2458492904885808e-01:3.1042297405862502e+00:2.9801910776523671e-01:3.9042830973188138e+00 + CVs 20 + -3.1976591093693152e-01 2.8643943932841698e-01 3.3875878567421736e-01 + -5.9293964160237778e-01 5.0142738647525431e-01 6.5921331307013364e-01 + -8.6048779217446936e-01 6.7363907464376438e-01 9.8530412961658365e-01 + -1.1446103029209724e+00 8.1414937822081834e-01 1.3293034564729982e+00 + -1.4476951943278893e+00 9.1867691477799074e-01 1.6862350005619586e+00 + -1.7657284876865882e+00 9.8482248900574199e-01 2.0515794861130119e+00 + -2.0930579141877321e+00 1.0108453960516806e+00 2.4222895322292728e+00 + -2.4248565600058707e+00 9.8951028567201083e-01 2.7911800276308552e+00 + -2.7509114327308914e+00 9.1011261224867779e-01 3.1458707635974501e+00 + -3.0561792033601725e+00 7.6878634104248889e-01 3.4780567594692764e+00 + -3.3338486051567982e+00 5.6961615020551104e-01 3.7894440024920737e+00 + -3.5936133327720401e+00 3.1466875070556810e-01 4.0881270253002890e+00 + -3.8406538109698882e+00 1.5589827455642080e-03 4.3796446433717353e+00 + -4.0495772962182492e+00 -3.6396630930756890e-01 4.6653982615659020e+00 + -4.1776374844296882e+00 -7.6290975933581606e-01 4.9469743877597052e+00 + -4.1847518653289795e+00 -1.1785499855985639e+00 5.2127151412018717e+00 + -4.0424641127118850e+00 -1.5946581215135591e+00 5.4250650320190115e+00 + -3.7721171222836514e+00 -1.9853891043401461e+00 5.5698678915102491e+00 + -3.6891327659709168e+00 -2.4961975702722703e+00 5.8685110481435645e+00 + id 14373 + loc 9.4801467657089233e-01 5.9581693261861801e-02 401 + blend 0.0000000000000000e+00 + interp 3.5371813094395527e-01:3.5371459376264586e-01:2.7555429282678812e-01:2.6155744839324341e-01:1.2545964239984781e+00:3.2669647537031948e-01:2.2049583196914275e+00:3.2640022899271010e-01:3.0028782652370003e+00:3.2447208228933833e-01:3.8525189509449094e+00 + CVs 20 + 1.2655402635510166e-01 3.3457784319734118e-01 2.1958894375472082e-01 + 2.6384902739066846e-01 6.3912800382253321e-01 4.3748914493174962e-01 + 4.0114506878649214e-01 9.1149864436147099e-01 6.8281125012026933e-01 + 5.4205911983917265e-01 1.1401156835497075e+00 9.6331648866870945e-01 + 6.9770479254066253e-01 1.3090837668682960e+00 1.2690590710276033e+00 + 8.7647787986527170e-01 1.4062978866538633e+00 1.5849050963282640e+00 + 1.0844271144089221e+00 1.4249230355903131e+00 1.8979184643380154e+00 + 1.3287451099607679e+00 1.3660911341366115e+00 2.1987606913383568e+00 + 1.6115274310014767e+00 1.2456420971468933e+00 2.4723876310593731e+00 + 1.9211089919484658e+00 1.0806685708080406e+00 2.7043941783662691e+00 + 2.2410852366026468e+00 8.6585807502876144e-01 2.8984255759826398e+00 + 2.5680131965080779e+00 5.9677389477026133e-01 3.0671805877626852e+00 + 2.9106565097008308e+00 3.1582675102190000e-01 3.2134964886746213e+00 + 3.2682819213445029e+00 7.4901710703366986e-02 3.3342436954466881e+00 + 3.6382856783725357e+00 -1.2769806704251641e-01 3.4388564535739925e+00 + 4.0358088168803281e+00 -2.8237586651933222e-01 3.5484511864617674e+00 + 4.4277703424140364e+00 -2.6364802180842595e-01 3.6678775862660769e+00 + 4.7551315110034817e+00 -6.3845949137700975e-02 3.7975444959418851e+00 + 5.2471092763351139e+00 6.2163498172084997e-02 4.0167172601540280e+00 + id 14374 + loc 1.0135672241449356e-01 1.3339664041996002e-01 396 + blend 0.0000000000000000e+00 + interp 4.9771332196527096e-01:3.0534332392592767e-01:7.2161199601236081e-01:3.8316225090204237e-01:1.4082618774634184e+00:3.0819699619850827e-01:2.0099116487986803e+00:4.9770834483205134e-01:2.4694890242051182e+00:3.1758064570506078e-01:3.1561237990884159e+00:2.9521725618093397e-01:3.9999925748382004e+00 + CVs 20 + -2.4217402049613032e-01 2.1569832306151848e-01 -5.5274547153994846e-01 + -4.3976645357638355e-01 3.3070771979410418e-01 -9.8692975225319146e-01 + -6.1218782710608044e-01 4.0856108782932543e-01 -1.4089243398381150e+00 + -7.6118452399381475e-01 4.7612137655914144e-01 -1.8677083111043997e+00 + -8.8101139971837683e-01 5.2436748266350364e-01 -2.3623450410849083e+00 + -9.7265478309470332e-01 5.4406439724077016e-01 -2.8890126024791289e+00 + -1.0431568156738678e+00 5.2557329542434861e-01 -3.4407513081021612e+00 + -1.0997548077274129e+00 4.5554445840560343e-01 -4.0069653294773380e+00 + -1.1498140362250111e+00 3.1672512604120739e-01 -4.5752926736578825e+00 + -1.2060778570758641e+00 9.1964416734120036e-02 -5.1289355716073199e+00 + -1.2790375313370532e+00 -2.2605651553646222e-01 -5.6394442998016858e+00 + -1.3600441469561799e+00 -6.2124877354941077e-01 -6.0751501211026344e+00 + -1.4301993003005911e+00 -1.0616161074356310e+00 -6.4235722592459013e+00 + -1.4837115984031799e+00 -1.5214399391562945e+00 -6.6908025570445346e+00 + -1.5239151504871842e+00 -1.9829102343513347e+00 -6.8847765423585221e+00 + -1.5455168089918980e+00 -2.4245593844898536e+00 -7.0095241117796849e+00 + -1.5374112738626204e+00 -2.8220036489466764e+00 -7.0736713397579418e+00 + -1.5025973509362027e+00 -3.1643280233975624e+00 -7.0989535483924646e+00 + -1.4731207220934714e+00 -3.4469078651447300e+00 -7.1531939561676525e+00 + id 14375 + loc 9.5149256289005280e-02 3.7432956695556641e-01 412 + blend 0.0000000000000000e+00 + interp 5.0783998722686630e-01:3.0843940045756257e-01:8.3658100462714602e-02:2.9788714252061843e-01:9.9029695240980964e-01:4.1856760978170149e-01:1.3689702113553870e+00:5.0783490882699400e-01:1.9527255907738166e+00:2.9877168511952806e-01:2.8605342369544289e+00:3.3730921368217942e-01:3.3374554449144052e+00 + CVs 20 + -7.1290048877634279e-02 1.2730721649752896e-01 -6.4818500859959527e-01 + -1.5712784374961802e-01 1.3194718544106621e-01 -1.1098044841182861e+00 + -2.3918632417976818e-01 9.2529308067842875e-02 -1.5178130723505583e+00 + -3.1954744546389280e-01 3.5832887117894674e-02 -1.9356060143757507e+00 + -3.9546956610959438e-01 -4.1458207207024311e-02 -2.3604367401302597e+00 + -4.6046862358154439e-01 -1.4134066549774327e-01 -2.7900890224078290e+00 + -5.0692373721955941e-01 -2.6533686937723755e-01 -3.2219226543299824e+00 + -5.3065769733384194e-01 -4.1215996525533094e-01 -3.6513112460874222e+00 + -5.3058746005740376e-01 -5.7786592662715996e-01 -4.0730425908521095e+00 + -5.0790985079981177e-01 -7.5740418895571460e-01 -4.4822618102185467e+00 + -4.7886375262752712e-01 -9.4953012454166608e-01 -4.8661614488634326e+00 + -4.9562785032081780e-01 -1.1596945761657047e+00 -5.1930412983930117e+00 + -6.1583268796896851e-01 -1.3817403755313928e+00 -5.4275274945550800e+00 + -8.3003195436573129e-01 -1.5904786638855335e+00 -5.5775536825652079e+00 + -1.0941819752754740e+00 -1.7748323458862039e+00 -5.6843539236241174e+00 + -1.3918490359828826e+00 -1.9258320639682485e+00 -5.7560167654038938e+00 + -1.7144701377553768e+00 -2.0195441326972201e+00 -5.7773786474105258e+00 + -2.0408359190946017e+00 -2.0425436854573484e+00 -5.7526704351791125e+00 + -2.3455878108768138e+00 -2.1957094774146935e+00 -5.9080483615768369e+00 + id 14376 + loc 9.5367956161499023e-01 3.8589233160018921e-01 400 + blend 0.0000000000000000e+00 + interp 5.2925121918533014e-01:4.3873066983421610e-01:1.0466026703647702e-01:2.6653826162265021e-01:1.0626748379036157e+00:5.2924592667313830e-01:1.7458207519726883e+00:4.9767367567694359e-01:2.0228670982990655e+00:2.9869216017738159e-01:2.5557033106874809e+00:3.7483397872559748e-01:3.0078744981727543e+00:2.6668708567159427e-01:3.7500241569863744e+00 + CVs 20 + 3.3349707205037560e-01 2.0866579389384465e-01 2.7932753765415080e-01 + 6.3547547989399200e-01 3.9297459785024047e-01 5.5839420074743729e-01 + 9.1042243979663584e-01 5.6074082215741017e-01 8.5230127998600569e-01 + 1.1612062204562279e+00 7.1282501517796371e-01 1.1613868180518558e+00 + 1.3877127463900052e+00 8.5032896230225274e-01 1.4801634996528630e+00 + 1.5888510820329891e+00 9.7905475491539473e-01 1.8076424258352930e+00 + 1.7631492177931380e+00 1.1015230986187892e+00 2.1470824170302998e+00 + 1.9098544988091954e+00 1.2123743417388952e+00 2.5039057395774771e+00 + 2.0287214807680130e+00 1.3028112689360745e+00 2.8803508927701618e+00 + 2.1214395918565510e+00 1.3650949009141751e+00 3.2745087723204405e+00 + 2.1916075237676940e+00 1.3916314293756065e+00 3.6842446514539198e+00 + 2.2424451604590141e+00 1.3725153920887159e+00 4.1093103974319458e+00 + 2.2737277338418602e+00 1.2948725107557184e+00 4.5502064384719514e+00 + 2.2787994305481778e+00 1.1440726018831713e+00 5.0039730905838304e+00 + 2.2447882659880602e+00 9.0533932868633471e-01 5.4586468940743336e+00 + 2.1587061537870298e+00 5.6644048100416500e-01 5.8879562022203631e+00 + 2.0189606891583773e+00 1.2733737545096302e-01 6.2513269576921715e+00 + 1.8467009614811964e+00 -3.7688641597763439e-01 6.5153159224884334e+00 + 1.7411950780513976e+00 -7.6241120693722664e-01 6.7371935067883406e+00 + id 14377 + loc 1.9850698113441467e-01 9.4336206093430519e-03 381 + blend 0.0000000000000000e+00 + interp 3.5123681153607972e-01:1.4353715514533624e-01:8.0146346894284370e-01:1.9070855324766850e-01:1.8864007129454246e+00:3.5123329916796436e-01:2.9191752970826079e+00:3.3940840345459439e-01:3.8374223321225278e+00 + CVs 20 + -6.3241745202416944e-01 1.9696866757969131e-01 -7.6373409612921617e-01 + -1.0858246389366055e+00 2.8133765385357179e-01 -1.2853496624257978e+00 + -1.4900961444278542e+00 3.4613217738887414e-01 -1.7549915580121265e+00 + -1.8949937109724553e+00 4.3311805593116681e-01 -2.2517934039634868e+00 + -2.3041998237655266e+00 5.3793960048148226e-01 -2.7780766294114012e+00 + -2.7305669936960255e+00 6.4386876621122835e-01 -3.3358467029890528e+00 + -3.1895531210275747e+00 7.1720863830272530e-01 -3.9205073002567836e+00 + -3.6820958861035411e+00 7.1350555603552301e-01 -4.5183574740022507e+00 + -4.1903696781881372e+00 5.9398673750914588e-01 -5.1082889049800864e+00 + -4.6929435732229363e+00 3.4231547695219944e-01 -5.6616611644071311e+00 + -5.1762762212665194e+00 -3.3746010498608037e-02 -6.1475327692873485e+00 + -5.6189849709758954e+00 -5.1804153496318417e-01 -6.5413541488057785e+00 + -5.9907417270779240e+00 -1.0738086793031498e+00 -6.8227395086254505e+00 + -6.2614243645575876e+00 -1.6333510473501618e+00 -6.9816623958688186e+00 + -6.4251361285590640e+00 -2.1353139566793891e+00 -7.0417718253708843e+00 + -6.4953528512706908e+00 -2.5655886460097030e+00 -7.0591054141084966e+00 + -6.4933161394982601e+00 -2.9571930401849245e+00 -7.0960412817166256e+00 + -6.4858352403186146e+00 -3.3630900731963225e+00 -7.1831361213029403e+00 + -6.6269212909437885e+00 -3.7852642722075496e+00 -7.2787196218432850e+00 + id 14378 + loc 7.4367821216583252e-01 3.8959532976150513e-01 393 + blend 0.0000000000000000e+00 + interp 4.4464445169164540e-01:4.4464000524712849e-01:6.6646544748189873e-02:3.2524021589386132e-01:9.9174647506965086e-01:3.0741181287539115e-01:1.7883161121218845e+00:3.2571028074683633e-01:2.2594035256512761e+00:4.4281298718925294e-01:2.9691766565602711e+00:3.0857610442706945e-01:3.2775652010842755e+00 + CVs 20 + 3.4134660886194296e-01 3.5582317270714137e-01 1.4227924109257059e-01 + 7.0976320638773016e-01 7.1866616359728530e-01 2.6790702992325555e-01 + 1.0916754710002139e+00 1.1027495522483028e+00 4.0370836549774142e-01 + 1.4839499009213157e+00 1.4910304090533730e+00 5.8368781122923763e-01 + 1.8819822537899709e+00 1.8533536103057402e+00 8.4452046943901027e-01 + 2.2694080248076047e+00 2.1680949576449056e+00 1.2059012335054669e+00 + 2.6262975597688332e+00 2.4227258934333378e+00 1.6577501645937081e+00 + 2.9408641162641045e+00 2.6035965187837506e+00 2.1637670436558629e+00 + 3.2147350423659020e+00 2.7033397184284449e+00 2.6877094262790298e+00 + 3.4549695921325845e+00 2.7192778458119702e+00 3.2088102066462874e+00 + 3.6691847655785481e+00 2.6459318101917724e+00 3.7158178790204137e+00 + 3.8649706606590826e+00 2.4708791129284657e+00 4.1991531416130838e+00 + 4.0486543871302434e+00 2.1804057555819489e+00 4.6288879964574630e+00 + 4.2261542940373147e+00 1.7836476406346036e+00 4.9360307383827182e+00 + 4.4046477917381832e+00 1.3426538569905353e+00 5.0375187114640285e+00 + 4.5969565843703766e+00 9.7882828935417177e-01 4.9188354503365819e+00 + 4.8174408598681335e+00 7.8080602854117043e-01 4.6745135644949753e+00 + 5.0673045202121951e+00 6.6425033043221271e-01 4.4160235847745462e+00 + 5.4008577578851922e+00 2.2662421888632078e-01 4.2532821381638497e+00 + id 14379 + loc 2.6318836212158203e-01 4.7237247228622437e-01 378 + blend 0.0000000000000000e+00 + interp 4.4134802387009997e-01:4.2098312251938602e-01:5.2288620723745360e-01:3.0419976088644129e-01:1.0008632988761033e+00:4.2752700495197404e-01:1.9112218165782195e+00:2.8307756894691127e-01:2.6422166745531839e+00:4.4134361038986131e-01:3.1731732621656246e+00:2.7726017534898062e-01:3.9996381461874182e+00 + CVs 20 + 1.9302232537505778e-01 3.6478164354033338e-01 -3.9419248431710907e-01 + 3.6773865795818439e-01 6.6407171445468305e-01 -7.6888990625873310e-01 + 5.5466861398157019e-01 9.2031842466646596e-01 -1.1689459296697222e+00 + 7.7794327897046966e-01 1.1505902428294843e+00 -1.6065039531585352e+00 + 1.0525137220863718e+00 1.3542159692167435e+00 -2.0626891833828389e+00 + 1.3899046721737611e+00 1.5130823628385803e+00 -2.5195446308773426e+00 + 1.7896674160759158e+00 1.5981170752233469e+00 -2.9603931144078905e+00 + 2.2367548881871890e+00 1.5875706074117732e+00 -3.3646805088832563e+00 + 2.7037566540756939e+00 1.4719592074250278e+00 -3.7170790459378029e+00 + 3.1551633343687970e+00 1.2488842003839837e+00 -4.0158981026107314e+00 + 3.5520495612203140e+00 9.2087861454791176e-01 -4.2590504484299530e+00 + 3.8570702431027160e+00 4.9823788729811458e-01 -4.4311063035019878e+00 + 4.0557151338082349e+00 1.4658964056580182e-02 -4.5232019094128804e+00 + 4.2045912555009499e+00 -4.9092657122603400e-01 -4.5801699729220964e+00 + 4.3989511524977853e+00 -1.0064360271712061e+00 -4.6772295432491937e+00 + 4.6742769915964084e+00 -1.5138901138604846e+00 -4.8774156191779809e+00 + 4.9811562449563418e+00 -1.9782323179677941e+00 -5.2300749221842704e+00 + 5.2430123980389354e+00 -2.3555779768499114e+00 -5.6978993885907050e+00 + 5.4803073095184134e+00 -2.6192733293446078e+00 -5.9074618895017448e+00 + id 14380 + loc 3.6405616998672485e-01 3.2137486338615417e-01 1079 + blend 0.0000000000000000e+00 + interp 5.1257268133471356e-01:2.7243202318018006e-01:6.9099457742566428e-01:3.0259317787948253e-01:1.8542261300299798e+00:3.9212284632452332e-01:2.6901404040440955e+00:5.1256755560790024e-01:3.1206749185940845e+00:3.7170138603606545e-01:3.8039513032586290e+00 + CVs 20 + 1.2066172008957052e-01 3.9527082259258300e-01 8.2014113954328324e-02 + 1.9021515447972259e-01 7.1962169548495569e-01 1.0216363680358281e-01 + 2.3932995472474655e-01 1.0081486290845083e+00 9.6543392262225525e-02 + 2.8837654790206241e-01 1.2790006760424373e+00 8.7640917543602648e-02 + 3.3808510087748361e-01 1.5339926979507732e+00 7.6402426853376781e-02 + 3.9069777287653118e-01 1.7818134399117582e+00 6.2804657161039945e-02 + 4.3708641290770689e-01 2.0398695180496169e+00 4.1870818090534390e-02 + 4.4828970310015581e-01 2.3197603129195845e+00 3.6376739101212641e-03 + 3.9005177107448596e-01 2.6100021763677028e+00 -5.7136353059725087e-02 + 2.4487084706689810e-01 2.8790200633492864e+00 -1.3442122851866645e-01 + 2.0068974456926014e-02 3.0942978879095682e+00 -2.1676537000870288e-01 + -2.6309276659471137e-01 3.2371242317451276e+00 -2.9495416513197126e-01 + -5.8266092420993254e-01 3.3010425184452155e+00 -3.6317449779208844e-01 + -9.2237274368991029e-01 3.2860735861412422e+00 -4.1845364300910426e-01 + -1.2789398488682788e+00 3.1939419717451694e+00 -4.6323201944443548e-01 + -1.6839996578237419e+00 3.0156431151418501e+00 -5.1201749548987685e-01 + -2.1774040779802690e+00 2.6852463646315279e+00 -5.7930487081897719e-01 + -2.5864096139055879e+00 2.1455865336986295e+00 -6.4501267577288568e-01 + -2.4843589411642641e+00 1.8500699519811272e+00 -6.8893006382790500e-01 + id 14381 + loc 3.0673819780349731e-01 6.9623911380767822e-01 399 + blend 0.0000000000000000e+00 + interp 4.7244106334504948e-01:3.2535257236607529e-01:5.6014029457467407e-01:3.4958047649664414e-01:1.2963865585020458e+00:4.7243633893441606e-01:1.9482797600477850e+00:3.9208355559450597e-01:2.3101199504659027e+00:3.4506513956614748e-01:3.0360798551781691e+00:4.6032090801766540e-01:3.9410271072607399e+00 + CVs 20 + -1.3490098309290260e-01 3.4843229137458265e-01 -4.0556782919503953e-01 + -2.5817508061877203e-01 6.8016510024194998e-01 -8.0273733787243384e-01 + -3.6973649909175671e-01 9.7604898628402770e-01 -1.2196214075748546e+00 + -4.7981495730359225e-01 1.2292170434085639e+00 -1.6632446325063819e+00 + -6.0660458430471298e-01 1.4378324560147013e+00 -2.1271265481098700e+00 + -7.7398021856574273e-01 1.6007156720253393e+00 -2.6008353383748917e+00 + -9.9660295697174861e-01 1.7079698409580364e+00 -3.0590378245245828e+00 + -1.2595250174870698e+00 1.7438734852907645e+00 -3.4608657142636359e+00 + -1.5215525498240206e+00 1.7068266957747400e+00 -3.7728099552672987e+00 + -1.7555865133295614e+00 1.6128324742024580e+00 -3.9869205752275816e+00 + -1.9578799414366870e+00 1.4823707640653176e+00 -4.1037470615459561e+00 + -2.1359734355979669e+00 1.3205292802426867e+00 -4.1196129879803447e+00 + -2.3136934890336867e+00 1.0809710160730095e+00 -4.0459577320608719e+00 + -2.5318233246281676e+00 6.8053791491425208e-01 -3.9478941349866621e+00 + -2.8613482051550800e+00 1.0363298915712466e-01 -3.9279566530140864e+00 + -3.3973683002557871e+00 -5.1289998853523189e-01 -4.0494445971216715e+00 + -4.1874444406115545e+00 -9.4086931536460328e-01 -4.3140920004634458e+00 + -5.0301712388593138e+00 -8.8877324761010823e-01 -4.6214816903943214e+00 + -5.4342746127443444e+00 -4.8192941774012138e-01 -4.7239519233188663e+00 + id 14382 + loc 3.9015150070190430e-01 3.3088818192481995e-01 402 + blend 0.0000000000000000e+00 + interp 4.5145114117464730e-01:2.5848022725473857e-01:8.5590479364771710e-02:4.5144662666323560e-01:8.0088804412290615e-01:2.8277468300802089e-01:1.5033978658183429e+00:2.7005299252293130e-01:2.7148379336598407e+00:2.8495858989094652e-01:3.2970820911365237e+00 + CVs 20 + -1.6619028176265660e-01 5.0476672097791087e-01 1.6329503805347934e-01 + -3.3175135478004752e-01 9.9958957683104810e-01 3.2569024163202709e-01 + -5.4626553647307874e-01 1.4943584660661020e+00 4.7613110291621136e-01 + -8.2861292504064277e-01 1.9775737272521117e+00 6.3020176086826107e-01 + -1.1832529674748946e+00 2.4246715102413123e+00 8.0108353397328724e-01 + -1.6136255392220091e+00 2.8111733904469798e+00 9.8528399847745318e-01 + -2.1160186820058930e+00 3.1128912795377048e+00 1.1784492719252782e+00 + -2.6729489329495530e+00 3.3080359160193851e+00 1.3821637207396749e+00 + -3.2621740738905434e+00 3.3823243516773895e+00 1.5925970699811254e+00 + -3.8625903565320234e+00 3.3259233883489507e+00 1.7947888686456062e+00 + -4.4353693423549565e+00 3.1308051270876773e+00 1.9811740550908605e+00 + -4.9155915312681708e+00 2.8063258938270210e+00 2.1629304923114754e+00 + -5.2391241810576137e+00 2.4108556333461779e+00 2.3570570148981922e+00 + -5.3866192477823258e+00 2.0507774534914254e+00 2.5736380893208475e+00 + -5.3934332924142447e+00 1.8286466350757196e+00 2.8004360881787109e+00 + -5.3228626745673324e+00 1.8055457613922976e+00 2.9886185152369174e+00 + -5.2297951460092573e+00 1.9588588488765262e+00 3.0583828017871104e+00 + -5.1824970050931780e+00 2.1138100576835983e+00 3.0417028252003462e+00 + -5.2993511373952860e+00 2.1087928897145201e+00 3.3121053963722162e+00 + id 14383 + loc 7.3110949993133545e-01 3.2988169789314270e-01 404 + blend 0.0000000000000000e+00 + interp 4.3350537359017649e-01:3.5102979708678356e-01:2.1679604507723693e-01:3.2628996408444760e-01:9.1085122177918332e-01:3.8468495687081133e-01:1.6243868323129933e+00:3.4307629692552083e-01:2.0889325904553377e+00:2.6782506933031153e-01:2.8399341313151059e+00:4.3350103853644062e-01:3.0224422582851869e+00:3.7991699397506645e-01:3.9391371261339994e+00 + CVs 20 + -7.1112709817823125e-02 1.0016653613733005e-01 7.2027485176776748e-02 + -1.1168585240619489e-01 2.0715425512755201e-01 1.6146194184079843e-01 + -1.4288445264984490e-01 3.2757788868999937e-01 2.6314806892453535e-01 + -1.8299846361550876e-01 4.6572106511409794e-01 3.7259369782310781e-01 + -2.3716091542179210e-01 6.2101247263407033e-01 4.9059593695332526e-01 + -3.1144628491831594e-01 7.9085203067262788e-01 6.1701107090259577e-01 + -4.1295617585523542e-01 9.7106895444194630e-01 7.5003592916101836e-01 + -5.4796864100383869e-01 1.1566282508967007e+00 8.8555256866149135e-01 + -7.2045756479579071e-01 1.3424112520445777e+00 1.0170275466942760e+00 + -9.3170542249274435e-01 1.5241188421472134e+00 1.1365579928545728e+00 + -1.1787831360572638e+00 1.6988005126312751e+00 1.2374577634435033e+00 + -1.4455962630239982e+00 1.8651381269454397e+00 1.3287226443172433e+00 + -1.7037192211904910e+00 2.0235873255235490e+00 1.4476649972111184e+00 + -1.9191127631210758e+00 2.1707371274713805e+00 1.6386416629893481e+00 + -2.0667318640981787e+00 2.2999384816519632e+00 1.9070483744473097e+00 + -2.1524252493181177e+00 2.4101368067455340e+00 2.2209557094404850e+00 + -2.1775011431854443e+00 2.5044499950333332e+00 2.5597083027206624e+00 + -2.1231485003408719e+00 2.5917439087600762e+00 2.9036212953025085e+00 + -2.2072293158300220e+00 2.7459938124873799e+00 3.1414618966086909e+00 + id 14384 + loc 5.7935017347335815e-01 6.7609691619873047e-01 401 + blend 0.0000000000000000e+00 + interp 4.5712133348544126e-01:3.4366443149897147e-01:2.3832854842052131e-01:3.7583225036749801e-01:1.0291986618911924e+00:3.3715080989799961e-01:1.9929228719278724e+00:4.5711676227210640e-01:2.5682767092430483e+00:3.9143349954716833e-01:3.0139813511604610e+00:2.7856384291537795e-01:3.6531777544609780e+00 + CVs 20 + -5.1953656558286959e-02 3.3908620351983010e-01 -3.6486199000120423e-01 + -8.9367975769211294e-02 6.7181908629681941e-01 -7.1154094587789329e-01 + -1.2660167583421744e-01 9.8185905919439398e-01 -1.0429871800506145e+00 + -1.6784895344674955e-01 1.2564474029108588e+00 -1.3630550307877911e+00 + -2.2072662799356990e-01 1.4991164417554794e+00 -1.6836441991302813e+00 + -3.0052085293262720e-01 1.7180933341109774e+00 -2.0143008341861086e+00 + -4.2283886611218657e-01 1.9137765604577046e+00 -2.3495929475275767e+00 + -5.9720732196048032e-01 2.0814947327104876e+00 -2.6769232265126419e+00 + -8.2854544431409582e-01 2.2111742604270948e+00 -2.9817918031205441e+00 + -1.1155466149504598e+00 2.2897447126536847e+00 -3.2453595061755758e+00 + -1.4488263345748746e+00 2.3102556375107151e+00 -3.4488458082284663e+00 + -1.8174408642224638e+00 2.2711479562368675e+00 -3.5790868806613543e+00 + -2.2052968783688014e+00 2.1665307943616821e+00 -3.6453074367305649e+00 + -2.5822294587985111e+00 1.9873677721204812e+00 -3.6756849655885322e+00 + -2.9303285349113208e+00 1.7260076361025471e+00 -3.6649004677820844e+00 + -3.2806336488921510e+00 1.3568676911363022e+00 -3.5683126297191596e+00 + -3.6916981835396960e+00 8.5810699154030556e-01 -3.4368643574867792e+00 + -4.1263940651568012e+00 3.2774153365736536e-01 -3.4585650146000062e+00 + -4.3745079517613918e+00 1.0516463797811682e-03 -3.6894436166569227e+00 + id 14385 + loc 2.9040476679801941e-01 4.3750947713851929e-01 379 + blend 0.0000000000000000e+00 + interp 4.2370832944308767e-01:2.1234161536647389e-01:7.7713578002283967e-01:2.6543875672023692e-01:1.5478313450686452e+00:4.2370409235979328e-01:2.1254326163950670e+00:2.1929583373055139e-01:2.9938449737911594e+00:2.6529675105850975e-01:3.8859328936195756e+00 + CVs 20 + 2.2871555729818094e-01 3.6204565378670506e-01 2.7305161536539180e-01 + 4.9796896971307847e-01 6.6120480107874369e-01 5.0944195235818879e-01 + 8.1218167483316905e-01 8.7447432568644645e-01 7.2869216952797145e-01 + 1.1568339181781333e+00 1.0329585652489213e+00 9.3816960377050007e-01 + 1.5077025038569407e+00 1.1877823818564262e+00 1.1468200145742768e+00 + 1.8422616508449168e+00 1.3688806085331668e+00 1.3805041758837846e+00 + 2.1388243974376433e+00 1.5802888077175736e+00 1.6674863628939061e+00 + 2.3778688722955330e+00 1.8157282468244840e+00 2.0190967568745712e+00 + 2.5458334942594663e+00 2.0660535839162968e+00 2.4302037033567334e+00 + 2.6359305014026946e+00 2.3116504793760368e+00 2.8912102646200126e+00 + 2.6506052121695634e+00 2.5183529698457292e+00 3.3928864118333464e+00 + 2.6062819752374322e+00 2.6417387158595096e+00 3.9162516993168937e+00 + 2.5243776238803157e+00 2.6356892873906452e+00 4.4189020880835628e+00 + 2.4228930363227028e+00 2.4801842030958059e+00 4.8642297626140767e+00 + 2.3190791502387054e+00 2.1811205442862605e+00 5.2269961415066231e+00 + 2.3045065737833381e+00 1.7924364800287105e+00 5.4586973280815165e+00 + 2.5780007608384174e+00 1.5467022745988621e+00 5.5016191160124954e+00 + 3.0398042243639454e+00 1.7190330765701134e+00 5.4049375512837692e+00 + 3.3938414641662531e+00 1.2467755254516391e+00 5.5519096123639393e+00 + id 14386 + loc 2.0893944799900055e-01 6.5791738033294678e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8399217992125012e-01:2.8708525361915005e-01:6.3590932609424344e-01:2.8629580362057055e-01:1.1286903053669437e+00:3.8398833999945092e-01:1.9663930288908624e+00:3.1014660422693513e-01:2.7325330214534471e+00:2.7880709034699125e-01:3.7557340891705988e+00 + CVs 20 + 2.2810202604213389e-01 2.3385620283580486e-01 -2.5038150087213201e-01 + 4.6843189729257395e-01 4.7357817942231578e-01 -5.1383523938254072e-01 + 7.0809916613070389e-01 7.2566429567080615e-01 -7.8307815015471061e-01 + 9.2631651202973575e-01 9.9004653539818466e-01 -1.0650348073165503e+00 + 1.0934016036516447e+00 1.2629150228788020e+00 -1.3743590064636795e+00 + 1.1731890063243804e+00 1.5210509243494084e+00 -1.7173604882478046e+00 + 1.1472803628320820e+00 1.7154326859772699e+00 -2.0816208176199842e+00 + 1.0259218420677580e+00 1.7809057506554433e+00 -2.4359539560152745e+00 + 8.3842402718445364e-01 1.6598233230436348e+00 -2.7209154837265359e+00 + 6.3947458613668351e-01 1.3959833648748317e+00 -2.8894136991380135e+00 + 4.5790409208829475e-01 1.0982541871124734e+00 -2.9996353377900542e+00 + 2.8794040058696346e-01 7.9783176480053108e-01 -3.1337340474493143e+00 + 1.4075775698246956e-01 4.8301365103840488e-01 -3.3299114678304260e+00 + 5.1899810222001741e-02 1.4874510525172491e-01 -3.5973775050975259e+00 + 7.9665674328827651e-02 -1.9620665841831297e-01 -3.9294500370864300e+00 + 3.2962860308123532e-01 -5.2745049020482737e-01 -4.2937409708876064e+00 + 9.2645910198558412e-01 -7.5226311603836993e-01 -4.5887767822399637e+00 + 1.6665276030305731e+00 -7.6064902119788425e-01 -4.6946278988271102e+00 + 1.8556308298332498e+00 -9.0409791784953686e-01 -4.8874535133628250e+00 + id 14387 + loc 8.3352392911911011e-01 5.9645563364028931e-01 400 + blend 0.0000000000000000e+00 + interp 3.5378428946051999e-01:2.8794783694602616e-01:3.0902482281617294e-03:2.8165965575370827e-01:7.7435017709939935e-01:2.6517744759452422e-01:1.5837298572461049e+00:3.5378075161762540e-01:2.3273594556603383e+00:2.5936981732853109e-01:3.1416276801258225e+00 + CVs 20 + -1.8549807141549274e-01 1.5990257836599497e-01 -2.3715008524307596e-01 + -3.7014663032569373e-01 2.9862168189912597e-01 -4.8857238551492949e-01 + -5.4404593059833561e-01 4.1712484207693101e-01 -7.6364838963661630e-01 + -7.0444483115609491e-01 5.1244744289789523e-01 -1.0619663222787579e+00 + -8.5393617479992334e-01 5.8340601803605718e-01 -1.3817726178993697e+00 + -9.9131887490647508e-01 6.3487845298571499e-01 -1.7245597300064952e+00 + -1.1090747222310227e+00 6.7085804280210870e-01 -2.0878129910499892e+00 + -1.1991195593398676e+00 6.8493098954210541e-01 -2.4629640052927861e+00 + -1.2582413069298091e+00 6.6541409639562277e-01 -2.8424692075310998e+00 + -1.2855246434082963e+00 6.0570278545207956e-01 -3.2186158445846162e+00 + -1.2826950078311616e+00 5.0387428786164978e-01 -3.5760835032144174e+00 + -1.2546261813718540e+00 3.6122314560337743e-01 -3.8951620889449998e+00 + -1.2048325647187801e+00 1.8361797069845509e-01 -4.1612898977202377e+00 + -1.1327877193295515e+00 -1.8386552215060803e-02 -4.3665815345840047e+00 + -1.0410967638191078e+00 -2.3025369976497667e-01 -4.5013415356307611e+00 + -9.4338450295946452e-01 -4.3359261604697252e-01 -4.5564659380956050e+00 + -8.5488968100786400e-01 -6.1584653124855682e-01 -4.5447903601963047e+00 + -7.6810461872322888e-01 -7.9738338303260736e-01 -4.5197712614744523e+00 + -6.1628479799075575e-01 -1.0942597319387508e+00 -4.6029177043331435e+00 + id 14388 + loc 7.7107988297939301e-02 1.6431647539138794e-01 412 + blend 0.0000000000000000e+00 + interp 3.4855397450498049e-01:3.2389984208819056e-01:6.7026853216678450e-04:2.9893373432650544e-01:7.7225274353446727e-01:2.6200445820860313e-01:1.4552551929486963e+00:3.4855048896523544e-01:2.3927052446414638e+00:2.6297066622445137e-01:3.0016791339501134e+00 + CVs 20 + -1.4734710669794682e-01 1.8056867065566401e-01 -4.1980676749805745e-01 + -3.0319835161979042e-01 2.7228363413071499e-01 -7.1615478224012108e-01 + -4.6177638448389868e-01 3.2111440254973306e-01 -9.9603198690678219e-01 + -6.0813573043459990e-01 3.5416265099240007e-01 -1.3128620124385295e+00 + -7.3262613854752634e-01 3.6513320745777306e-01 -1.6648206667660306e+00 + -8.2396622315256973e-01 3.4912744915678129e-01 -2.0472068379888935e+00 + -8.6926875232823686e-01 3.0440620400340146e-01 -2.4501667582179829e+00 + -8.5908956920179780e-01 2.3192428256589293e-01 -2.8588956609762954e+00 + -7.9110965678502798e-01 1.3460803277088629e-01 -3.2586693953850721e+00 + -6.6802417023660732e-01 1.7754592555073723e-02 -3.6367543034631757e+00 + -4.9839087509990176e-01 -1.1103413931504091e-01 -3.9769266574635802e+00 + -3.0505645180547492e-01 -2.4755028027126547e-01 -4.2619711340785900e+00 + -1.1875871488050849e-01 -3.9941666680261401e-01 -4.4981832026446540e+00 + 4.5673275672824754e-02 -5.8419153260220180e-01 -4.7220175160361411e+00 + 1.8690590206615576e-01 -8.1444282062868001e-01 -4.9601084137362923e+00 + 3.0022926318226795e-01 -1.0880137431493127e+00 -5.2093780616577234e+00 + 3.7289120111283947e-01 -1.3979363499134256e+00 -5.4575231659274248e+00 + 3.9257801497089639e-01 -1.7376934362380607e+00 -5.6940589436811475e+00 + 4.3913490070103500e-01 -2.0642838637212306e+00 -5.9434950697758753e+00 + id 14389 + loc 1.7845049500465393e-01 6.3324761390686035e-01 381 + blend 0.0000000000000000e+00 + interp 4.5389105987810324e-01:4.5388652096750448e-01:5.2862184618208907e-01:3.0753433272491182e-01:1.1815183912948575e+00:3.5994132826600317e-01:1.9290266587840388e+00:3.1539849073780901e-01:2.2460774266788572e+00:3.7468789957340454e-01:3.0415532054078636e+00:3.1783409334682999e-01:3.9488616101139935e+00 + CVs 20 + 9.5584881056335536e-01 2.3870873952495542e-01 -6.6449342198175232e-01 + 1.5363176040444417e+00 3.6250434597094061e-01 -1.1473509087213642e+00 + 2.0207450531064759e+00 4.5008111238295512e-01 -1.5849765834245855e+00 + 2.5566653198528675e+00 5.4087948424455734e-01 -2.0315886753203216e+00 + 3.1780905980222189e+00 6.1471720319290102e-01 -2.4743033179970446e+00 + 3.9065794407598302e+00 6.3887604586964830e-01 -2.9077840184140729e+00 + 4.7352785770691241e+00 5.6358933048103110e-01 -3.3352534399888043e+00 + 5.6185519745725561e+00 3.3523928230841193e-01 -3.7504491865684413e+00 + 6.4793084378134731e+00 -7.5960162553981192e-02 -4.1331870870858456e+00 + 7.2310242312924569e+00 -6.6182821242130774e-01 -4.4668291903752904e+00 + 7.7957506180445764e+00 -1.3848321733996030e+00 -4.7354797033689433e+00 + 8.1174674137690292e+00 -2.1795523640067560e+00 -4.9117431342987841e+00 + 8.1891575411383410e+00 -2.9457006327082098e+00 -4.9862409542315547e+00 + 8.0717694185171407e+00 -3.5956724243751550e+00 -4.9851095054967649e+00 + 7.8551844348926450e+00 -4.1261114135538524e+00 -4.9530506644294006e+00 + 7.5954726373674131e+00 -4.6071006993527632e+00 -4.9272116485703750e+00 + 7.3184733233420065e+00 -5.0968495259156219e+00 -4.9353109370947621e+00 + 7.0464203309093030e+00 -5.5955281976962663e+00 -4.9941180970455115e+00 + 6.7831893355917803e+00 -6.0014643382238386e+00 -5.1065124497912571e+00 + id 14390 + loc 1.9394701719284058e-01 4.5519816875457764e-01 396 + blend 0.0000000000000000e+00 + interp 3.8282655949026390e-01:2.8707888992291530e-01:3.2546949319791096e-01:2.7789381033630722e-01:1.0141450912586332e+00:2.8559880991669595e-01:2.0214462873853156e+00:2.5261482783042744e-01:3.0129487770337740e+00:3.8282273122466903e-01:3.9593689494193338e+00 + CVs 20 + -2.6420705345415596e-01 2.1346001555246447e-01 -7.5149425096238398e-01 + -5.1398678559181810e-01 2.6914124316226218e-01 -1.2727253449213811e+00 + -7.7259755685171494e-01 2.7573144220802248e-01 -1.7366878406511679e+00 + -1.0454191231784238e+00 2.7482019639726230e-01 -2.2072285352455747e+00 + -1.3205178268800992e+00 2.6644578117610473e-01 -2.6854433285781236e+00 + -1.5880398766255626e+00 2.4830946993796221e-01 -3.1693024384459858e+00 + -1.8425263107160963e+00 2.1539575859687066e-01 -3.6557465533575271e+00 + -2.0812147072142784e+00 1.5744370422102549e-01 -4.1430099229047919e+00 + -2.3023281761610010e+00 6.1088456260813162e-02 -4.6251861769349141e+00 + -2.5090128250360575e+00 -8.2249449188068313e-02 -5.0880108784982276e+00 + -2.7128233791620184e+00 -2.7805488325365957e-01 -5.5185446410107897e+00 + -2.9172432198934386e+00 -5.3982673163464123e-01 -5.9092929735204409e+00 + -3.1053036229867876e+00 -8.7052622597472684e-01 -6.2583511975778183e+00 + -3.2540504165844801e+00 -1.2561543878813639e+00 -6.5608533101113071e+00 + -3.3489490198900560e+00 -1.6773266207246365e+00 -6.8141172826859409e+00 + -3.3871554303022480e+00 -2.1222874891674843e+00 -7.0198601297904748e+00 + -3.3697988926473039e+00 -2.5785049688951611e+00 -7.1797625031821104e+00 + -3.2989237930236199e+00 -3.0232786119968771e+00 -7.2976855100962332e+00 + -3.1753980270341455e+00 -3.4059531355017523e+00 -7.3822509243050973e+00 + id 14391 + loc 7.4313485622406006e-01 4.0091982483863831e-01 402 + blend 0.0000000000000000e+00 + interp 3.4170662602125235e-01:2.9016567329631721e-01:5.8840096966148492e-01:3.4170320895499218e-01:1.0052516446046695e+00:2.5222849024118527e-01:1.7137611305970135e+00:2.7644465282078834e-01:2.5761825039313986e+00:2.5186602513676931e-01:3.5145573288750382e+00 + CVs 20 + 2.6828162740691136e-01 3.9508466328484826e-01 1.6833133134843103e-01 + 5.3920485915318861e-01 8.0920167843398838e-01 3.6607169670694895e-01 + 8.0445982879775446e-01 1.2230369506702210e+00 5.8812794126547574e-01 + 1.0951993111774954e+00 1.5954264629675872e+00 8.1116684285237095e-01 + 1.4402742974343110e+00 1.9047361839471655e+00 1.0378955743834299e+00 + 1.8302688295917711e+00 2.1334333232798692e+00 1.2423408220390009e+00 + 2.2571118877741587e+00 2.2291987448516020e+00 1.3792703363716021e+00 + 2.7789040199274355e+00 2.2013139780379531e+00 1.6296501209528751e+00 + 3.3269193323410260e+00 1.9859292254015792e+00 2.0426180259552056e+00 + 3.7558867104596576e+00 1.5303177125781089e+00 2.5581693335258642e+00 + 3.9898557256776166e+00 9.2112756987345490e-01 3.0694705960779274e+00 + 4.1704685113555415e+00 3.7397185190975368e-01 3.5086334734104394e+00 + 4.4769849859726927e+00 9.8696219410430164e-03 3.8963409652637631e+00 + 4.9322437101463281e+00 -1.2225632108776574e-01 4.2426161570374905e+00 + 5.4435313099667892e+00 -4.4269540048873512e-02 4.5592558280335380e+00 + 5.9168244132457142e+00 9.6706225614557217e-02 4.9207046579927232e+00 + 6.3351162224895488e+00 1.7468264838562697e-01 5.3881112388994081e+00 + 6.7252967168416031e+00 1.6899183028209896e-01 5.8961015238416108e+00 + 7.1915125220734355e+00 3.8159525611857203e-02 6.2759171966731246e+00 + id 14392 + loc 8.9632831513881683e-03 4.9664059281349182e-01 378 + blend 0.0000000000000000e+00 + interp 4.3016620083254520e-01:2.6673848795072941e-01:5.5415593255063178e-01:2.1077296830183051e-01:1.0818774194924412e+00:3.1285871785773833e-01:1.9839420006339141e+00:1.0399120499265628e-01:2.7287043139706584e+00:2.7625812366306968e-01:3.0023311333667011e+00:4.3016189917053688e-01:3.8452806346903676e+00 + CVs 20 + 2.1250752894143127e-01 3.8977602696717500e-01 -3.5278901710004834e-01 + 3.3424427398991308e-01 6.9057149610171731e-01 -6.6852444994583704e-01 + 4.1325855958309959e-01 9.3396560969789655e-01 -9.9946983044963078e-01 + 4.7893408377352825e-01 1.1438137014648235e+00 -1.3735858443366853e+00 + 5.5039354841222277e-01 1.3371092681072949e+00 -1.7920355551970497e+00 + 6.5616931671675771e-01 1.5256713705011569e+00 -2.2504711412058320e+00 + 8.2265804852813806e-01 1.6984239963793617e+00 -2.7438998866212367e+00 + 1.0672380597366948e+00 1.8247660836215700e+00 -3.2612965033535484e+00 + 1.3923105290631941e+00 1.8701214497770728e+00 -3.7715281557142268e+00 + 1.7831347755793159e+00 1.8219585216816512e+00 -4.2279348388028897e+00 + 2.2107013144213719e+00 1.6857962140340441e+00 -4.6059002836004979e+00 + 2.6441870761621247e+00 1.4686140328961010e+00 -4.9058374243411000e+00 + 3.0509371398203369e+00 1.1624596466403974e+00 -5.1214627916871187e+00 + 3.3994280526288185e+00 7.4553262623708472e-01 -5.2352459218174303e+00 + 3.6926141085516324e+00 2.1300570126437046e-01 -5.2561760285274524e+00 + 3.9803545657539408e+00 -3.8974734777562903e-01 -5.2342144555640360e+00 + 4.2996579954864353e+00 -9.8999987255873867e-01 -5.2379095337776889e+00 + 4.6332049143741569e+00 -1.5407942987037484e+00 -5.3369703039425751e+00 + 4.9453521759190355e+00 -2.0197432644613880e+00 -5.5110240181602173e+00 + id 14393 + loc 3.9484718441963196e-01 4.3100714683532715e-01 393 + blend 0.0000000000000000e+00 + interp 4.1994890303566973e-01:3.1542121540717327e-01:1.1238392172035483e-02:3.0626397378900239e-01:8.2874765368294079e-01:3.1120817176987647e-01:1.3088133557314530e+00:4.1994470354663938e-01:2.0246076301367255e+00:2.9962551653917863e-01:3.0000187782367882e+00:3.9338419605033748e-01:3.5996477947279129e+00 + CVs 20 + -1.6023470124002875e-01 1.9447832851732824e-01 2.7348833760369085e-01 + -3.2711092732038083e-01 4.3452449566264206e-01 5.6957724915320918e-01 + -4.8617224700444794e-01 7.1329757334984389e-01 8.4844515556159705e-01 + -6.3611208403006891e-01 9.9847961964719834e-01 1.0849147436596931e+00 + -8.0436832997862151e-01 1.2634105025095397e+00 1.2932091636052374e+00 + -1.0214798812409740e+00 1.4967233506284026e+00 1.4885357347658266e+00 + -1.2880431295363015e+00 1.6934389844034330e+00 1.6584288610499336e+00 + -1.5830983961962932e+00 1.8529470083061066e+00 1.7892033485185852e+00 + -1.8938284839856498e+00 1.9788024959105170e+00 1.8920425742568603e+00 + -2.2216473293651493e+00 2.0759103597576698e+00 1.9921589337972085e+00 + -2.5742528427195648e+00 2.1417558690093204e+00 2.1153999754458148e+00 + -2.9529767335425183e+00 2.1599979239894727e+00 2.2816215850884980e+00 + -3.3440698643491631e+00 2.1011754999191083e+00 2.4995834704209416e+00 + -3.7008100656175444e+00 1.9348631135019470e+00 2.7721007034579479e+00 + -3.9468994089572633e+00 1.6528736836100035e+00 3.1112057320043021e+00 + -4.0245505962398473e+00 1.3087366805917080e+00 3.5500480941803110e+00 + -3.9480905367793202e+00 1.0174120905487256e+00 4.1034185369833143e+00 + -3.8193400226383525e+00 7.9603094238265104e-01 4.7321203525041913e+00 + -3.7966489653630227e+00 4.3996521884498230e-01 5.3758721529426641e+00 + id 14394 + loc 9.6566557884216309e-01 1.3296359777450562e-01 404 + blend 0.0000000000000000e+00 + interp 4.4922062944273239e-01:4.4921613723643800e-01:4.4254796381427786e-01:3.9360901825744782e-01:1.0004281475037888e+00:4.1798746745907500e-01:1.9506417671938658e+00:2.6711518187087663e-01:2.0699905396279039e+00:3.6995894932718149e-01:2.7304604925155669e+00:4.2007680062596753e-01:3.4121817929425733e+00:2.9019594629692830e-01:3.9925889031812947e+00 + CVs 20 + 1.2186717498579025e-02 1.1223570821433501e-01 1.3950577533329583e-01 + 2.7701968000576949e-02 2.1529158534283996e-01 2.7563714150270191e-01 + 3.1803294761662493e-02 3.1545423034370312e-01 4.0964869825413025e-01 + 1.7874797502879125e-02 4.1413431242870280e-01 5.4151944031667387e-01 + -1.3115311285623266e-02 5.0824348176871281e-01 6.6965971259853707e-01 + -5.9481020082153169e-02 5.9498535914483885e-01 7.9210826433527970e-01 + -1.2089720354617844e-01 6.7332534114184395e-01 9.0756314542691330e-01 + -1.9722670554052041e-01 7.4325367812625520e-01 1.0154463379982155e+00 + -2.8622407939745209e-01 8.0474554205822102e-01 1.1156275243172462e+00 + -3.8665539044752173e-01 8.5851915450831562e-01 1.2074205569949439e+00 + -5.0776324775775539e-01 9.0850373361562697e-01 1.2832293312331002e+00 + -6.6941270749695947e-01 9.6130952829002880e-01 1.3306198876042736e+00 + -8.8389899393315019e-01 1.0200631364757551e+00 1.3639668559673892e+00 + -1.1247819078161454e+00 1.0748101020928873e+00 1.4341783766023899e+00 + -1.3458988982378708e+00 1.1112670382849157e+00 1.5656097884525235e+00 + -1.5373297143651072e+00 1.1232118329930343e+00 1.7502356443776965e+00 + -1.6968293953651286e+00 1.1050525317091560e+00 1.9815062074974039e+00 + -1.8013333608635138e+00 1.0559162530454171e+00 2.2396515634685379e+00 + -1.7866710741929546e+00 9.9309796445933940e-01 2.4153112082991770e+00 + id 14395 + loc 4.6184408664703369e-01 1.9573166966438293e-01 381 + blend 0.0000000000000000e+00 + interp 3.9723577615200117e-01:2.4827523736848117e-01:3.7022128891694006e-01:3.6626637620073477e-01:1.0042659460499148e+00:3.9723180379423967e-01:1.4694175593639438e+00:2.8176354945205773e-01:2.1127773442373234e+00:2.7707986149834496e-01:3.2270696382143553e+00 + CVs 20 + -7.5520684002983007e-01 2.0187603347707658e-01 -7.4588338850798164e-01 + -1.3093179682383811e+00 2.7422502405349858e-01 -1.2078355264221807e+00 + -1.8099032265585391e+00 3.0500793271124993e-01 -1.6065080535697982e+00 + -2.3049078124078082e+00 3.3465260976540251e-01 -2.0337740516795453e+00 + -2.7829057500196273e+00 3.5180827347591870e-01 -2.4883574753033866e+00 + -3.2462753937683417e+00 3.4042297716896641e-01 -2.9690770196291107e+00 + -3.7096260510024983e+00 2.7679642914555369e-01 -3.4683417013874127e+00 + -4.1820944076090516e+00 1.3220633855908082e-01 -3.9705803027256144e+00 + -4.6506376437189489e+00 -1.1668765147071092e-01 -4.4568273635997491e+00 + -5.0879348034634075e+00 -4.7474007223670234e-01 -4.9101884569500500e+00 + -5.4870072575574103e+00 -9.1945869888224152e-01 -5.3104651411248369e+00 + -5.8622677760716693e+00 -1.4257723471589010e+00 -5.6295708799475062e+00 + -6.2227991255940891e+00 -1.9811135650322658e+00 -5.8444032685879641e+00 + -6.5768601021355853e+00 -2.5807940099661177e+00 -5.9418949596754507e+00 + -6.9447359712183392e+00 -3.2051306691602375e+00 -5.9384646046503260e+00 + -7.3462565116408545e+00 -3.8021471937260634e+00 -5.8862876528158878e+00 + -7.7759654547524635e+00 -4.2918744234919144e+00 -5.8342261633642929e+00 + -8.2136003559912467e+00 -4.6328540656473276e+00 -5.7957547488103156e+00 + -8.7086379968561136e+00 -4.9937169500273590e+00 -5.7605327883739594e+00 + id 14396 + loc 4.5360985398292542e-01 6.6521364450454712e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7517440777381187e-01:3.3240524502287871e-01:6.9851910213163682e-01:3.6253417770593177e-01:1.3325688255699868e+00:3.0904425108684619e-01:2.2373803660101159e+00:4.7516965602973416e-01:3.0788841305305357e+00:2.6493785253893221e-01:3.6722982056605304e+00 + CVs 20 + 6.0939209631024213e-02 4.0939895834874201e-01 7.9384034515588342e-02 + 1.3957731702649581e-01 7.7360052960555081e-01 1.0037062789303819e-01 + 2.2248986196836401e-01 1.1195588761452022e+00 9.0824455391619541e-02 + 3.0843528047302737e-01 1.4550577867306771e+00 5.8820611701836167e-02 + 4.0264614824022060e-01 1.7747655061143699e+00 -2.5485242719365253e-03 + 5.0717446738013172e-01 2.0668220639744002e+00 -1.0771813677851771e-01 + 6.2040548910334625e-01 2.3136256385825975e+00 -2.7299583684696804e-01 + 7.3505300348285596e-01 2.4980077324349415e+00 -5.0316517489108248e-01 + 8.4089224488064429e-01 2.6073067569871138e+00 -7.9037985455962179e-01 + 9.2952748711702071e-01 2.6338138878278015e+00 -1.1204505395985178e+00 + 9.9584242839372705e-01 2.5738888444869978e+00 -1.4769784322533617e+00 + 1.0378183844679947e+00 2.4268469883304702e+00 -1.8428564398931768e+00 + 1.0574042515867101e+00 2.1941105706392716e+00 -2.2001941155783737e+00 + 1.0612651527342523e+00 1.8762685093171902e+00 -2.5291191946485641e+00 + 1.0546758343748488e+00 1.4595942292875468e+00 -2.7959056531036359e+00 + 1.0278074849855778e+00 9.0378656285992964e-01 -2.9051178605642556e+00 + 9.5707003185316808e-01 2.6600759266263951e-01 -2.6884861810854548e+00 + 8.6121465891089621e-01 -2.0848078819813365e-01 -2.2648933608152482e+00 + 8.0066847733532587e-01 -5.2998155269096947e-01 -2.1255718227058558e+00 + id 14397 + loc 6.6542851924896240e-01 2.2033187747001648e-01 401 + blend 0.0000000000000000e+00 + interp 4.5666428261309888e-01:3.4791417692139476e-01:3.3915393758041534e-01:3.4149433935094509e-01:1.1364795267912067e+00:2.7204486334928663e-01:1.9538854651294004e+00:3.3476460639890543e-01:2.7693479675370667e+00:3.0095419559232578e-01:3.2621141597571230e+00:4.5665971597027277e-01:3.9012988876923127e+00 + CVs 20 + -1.0350033103025541e-02 2.6861409551786142e-01 2.3161634107717027e-01 + -6.5642024317205810e-03 5.2174218712838816e-01 4.4783921140459981e-01 + -8.1873898211206331e-03 7.6074977049103787e-01 6.4332453294608249e-01 + -2.2976648848603898e-02 9.9644695094509839e-01 8.1986619169782304e-01 + -4.5762954629399527e-02 1.2418356507142059e+00 9.9282466392567414e-01 + -6.4751476888980947e-02 1.5041888884351795e+00 1.1906793072564783e+00 + -5.7647942993385909e-02 1.7643981494953969e+00 1.4416715960662103e+00 + -1.0397370446426635e-03 1.9857012372633025e+00 1.7452883246305504e+00 + 1.2469144176322683e-01 2.1726178569197940e+00 2.0751935408416298e+00 + 3.4212382693534787e-01 2.3511414600254734e+00 2.4243166476447806e+00 + 6.4051727466621344e-01 2.4638329399021623e+00 2.7980505757445302e+00 + 9.4061029543228958e-01 2.4150935585814701e+00 3.1579073169757188e+00 + 1.1992544312235585e+00 2.2194811340100342e+00 3.4706147645124341e+00 + 1.4723512131894170e+00 1.9634797984598542e+00 3.7512500198048770e+00 + 1.7899791541766432e+00 1.6813185010963017e+00 3.9831808319023634e+00 + 2.0377893437504522e+00 1.3264410735031498e+00 4.0911691656270497e+00 + 2.0986914645532404e+00 8.3035070491221630e-01 4.0615540534342314e+00 + 2.2610656222296317e+00 3.3363550444903872e-01 4.0105894271334437e+00 + 2.7518341267337947e+00 3.8919094335109028e-01 3.9842355529606515e+00 + id 14398 + loc 5.2991682291030884e-01 4.7420242428779602e-01 379 + blend 0.0000000000000000e+00 + interp 4.2536488356295560e-01:3.0582920108817463e-01:2.8746476518588227e-01:4.2536062991411999e-01:1.0139497255540977e+00:2.4544132591428167e-01:1.9900107869196595e+00:2.4843038677172591e-01:2.9879043421622535e+00:3.2808862306928521e-01:3.7767857349454714e+00 + CVs 20 + 1.8501037297539694e-01 3.4908544942059672e-01 4.2788677455460417e-02 + 3.7987057289663489e-01 7.0979815009477443e-01 4.0132103772883676e-02 + 5.9652767885259739e-01 1.0361655291779992e+00 -1.5894494042404284e-02 + 8.0406105881650047e-01 1.2727048014420674e+00 -1.0764837536645666e-01 + 9.6763433203895111e-01 1.4320088536588136e+00 -2.2354230263765740e-01 + 1.0918679024093947e+00 1.5625184545188848e+00 -3.7222276459401160e-01 + 1.2186968120876362e+00 1.6906523385570436e+00 -5.4926114379381463e-01 + 1.3912714837478153e+00 1.8245915555825634e+00 -7.3060369872383335e-01 + 1.6249629256399989e+00 1.9888267785328384e+00 -8.8749070772024918e-01 + 1.9128486041851964e+00 2.2078065313439597e+00 -9.9520593146982694e-01 + 2.2414751920483460e+00 2.4872068986408857e+00 -1.0456870400997875e+00 + 2.6017427241374511e+00 2.8303352161439621e+00 -1.0450401884182994e+00 + 3.0101576537092711e+00 3.2220347140685845e+00 -9.9011167395271693e-01 + 3.5009733553578366e+00 3.5824619933813153e+00 -8.5418534723107298e-01 + 4.0536333736570480e+00 3.7928538134719982e+00 -5.8158039449299093e-01 + 4.5453520563223737e+00 3.7474671748183570e+00 -1.0386969324180528e-01 + 4.8808947538636804e+00 3.3698842181202364e+00 5.4884320828642086e-01 + 5.1087372672357212e+00 2.6394931331864870e+00 1.0149510583199715e+00 + 5.2218173378596440e+00 2.1406801818455903e+00 8.7226381254181018e-01 + id 14399 + loc 3.7882113456726074e-01 2.1222957968711853e-01 396 + blend 0.0000000000000000e+00 + interp 4.7498648913580582e-01:3.2500058068878535e-01:2.4424278757274398e-01:4.7498173927091447e-01:9.4131856174027839e-01:2.6766773223823687e-01:1.8533804668054135e+00:4.2413145839762101e-01:2.2163007380509723e+00:2.4928602643988074e-01:3.0040011103527231e+00:3.6702997531180404e-01:3.9204523943166261e+00 + CVs 20 + -2.8884206049529659e-01 2.1404637056109171e-01 -6.0150233635942574e-01 + -5.1973016505155978e-01 3.0434526227038883e-01 -1.0574464154767034e+00 + -7.2547179801282169e-01 3.4139580101487882e-01 -1.4906511448206143e+00 + -9.1105439236365870e-01 3.5459479252216586e-01 -1.9531929979755869e+00 + -1.0694596969757340e+00 3.3785541726274082e-01 -2.4388663892273748e+00 + -1.1999449440461571e+00 2.8776292502677703e-01 -2.9397178134363409e+00 + -1.3071607857893746e+00 2.0402644740714315e-01 -3.4441402314378897e+00 + -1.3961461145980394e+00 8.6849396945278379e-02 -3.9377449897803833e+00 + -1.4711828035744479e+00 -6.5187882045935064e-02 -4.4095077432066683e+00 + -1.5405186514624676e+00 -2.5572464200057698e-01 -4.8550998609548657e+00 + -1.6154713141262980e+00 -4.8816796746671876e-01 -5.2684467156036154e+00 + -1.7012918883541457e+00 -7.5826806047871820e-01 -5.6368057447044482e+00 + -1.7952809304493857e+00 -1.0547058698607086e+00 -5.9527337696707532e+00 + -1.8950837869714365e+00 -1.3718845792952266e+00 -6.2212144439898722e+00 + -2.0000682877036455e+00 -1.7101190542439819e+00 -6.4484731990309268e+00 + -2.1056490223856659e+00 -2.0611368634935823e+00 -6.6335004228361587e+00 + -2.2029547250097119e+00 -2.4100532176548581e+00 -6.7741516709065408e+00 + -2.2839373673346031e+00 -2.7550914078550535e+00 -6.8723265341219673e+00 + -2.3421412205911833e+00 -3.1320359024227340e+00 -6.9182038505941348e+00 + id 14400 + loc 6.4643301069736481e-02 8.1493437290191650e-01 400 + blend 0.0000000000000000e+00 + interp 5.6971318654634662e-01:4.4178331972037954e-01:4.5295009983270529e-01:5.6970748941448113e-01:9.1328272758338958e-01:4.0397221409225564e-01:1.4257573269456947e+00:2.9411897186659297e-01:2.5222947218257405e+00:2.9175156673920072e-01:3.1148502231197548e+00:2.9127664620801896e-01:3.9772024639410053e+00 + CVs 20 + -2.0975444490361611e-01 2.3367872740679904e-01 3.0158997466950006e-02 + -4.3240178996041773e-01 4.8848515048082586e-01 1.9032253818724726e-02 + -6.5017564235946090e-01 7.5434099932722598e-01 -4.1200540910794337e-02 + -8.4906691228411224e-01 1.0173550217178549e+00 -1.5276508655262711e-01 + -1.0231264178572153e+00 1.2642176634783981e+00 -3.1229687726977062e-01 + -1.1699716794579149e+00 1.4861314479613355e+00 -5.1063060308855723e-01 + -1.2910864458100240e+00 1.6808368154549616e+00 -7.3709010205966230e-01 + -1.3925444138605232e+00 1.8513253583932037e+00 -9.8272430905229791e-01 + -1.4849171242757353e+00 2.0046150472280142e+00 -1.2422623637416375e+00 + -1.5750828538662955e+00 2.1468540082864980e+00 -1.5151449144209690e+00 + -1.6488776785876380e+00 2.2757009086732172e+00 -1.7998877071885118e+00 + -1.6781159697628085e+00 2.3868701162500776e+00 -2.0858276091141090e+00 + -1.6517148272839621e+00 2.4943874203180898e+00 -2.3642469767047607e+00 + -1.5738214408270514e+00 2.6285532247285883e+00 -2.6460267268003039e+00 + -1.4478861349771934e+00 2.7882304187283973e+00 -2.9610375545764080e+00 + -1.2936427206220975e+00 2.9071307849885368e+00 -3.3229749525703349e+00 + -1.1495690212740532e+00 2.9265825894000002e+00 -3.7039402880497825e+00 + -1.0684603591513850e+00 2.8561978429224402e+00 -4.0740358233663807e+00 + -1.2035229983974234e+00 2.7446438524741348e+00 -4.3560249625224454e+00 + id 14401 + loc 9.6615451574325562e-01 7.3172122240066528e-01 399 + blend 0.0000000000000000e+00 + interp 4.6754597767746109e-01:3.8022666064507660e-01:4.4278550037444153e-01:2.9383303475676203e-01:1.2961535848264107e+00:4.4178331972037954e-01:2.4570189290817783e+00:3.4348452638808546e-01:2.9881574286153390e+00:4.6754130221768436e-01:3.3081305642184611e+00:4.4150875375801846e-01:3.9341238300448760e+00 + CVs 20 + -1.4011828094095438e-01 3.6096923520954960e-01 -1.3599604639789714e-01 + -2.6716918019082625e-01 7.2769504273316388e-01 -2.9676085552381337e-01 + -3.8011550398474930e-01 1.0898757835030537e+00 -4.7998201727463841e-01 + -4.8027325250630754e-01 1.4402427795761492e+00 -6.8598679572351640e-01 + -5.7058164434627789e-01 1.7758301083441899e+00 -9.1561332834382103e-01 + -6.5148566826766285e-01 2.0918347758048541e+00 -1.1660611502225131e+00 + -7.2180614511975705e-01 2.3837638302020783e+00 -1.4329794477281208e+00 + -7.7852740794187969e-01 2.6474677332861454e+00 -1.7110822988839671e+00 + -8.1633166052884387e-01 2.8783047887661040e+00 -1.9946951674272659e+00 + -8.2965102308399008e-01 3.0720501351977507e+00 -2.2790135791156265e+00 + -8.2010942036892254e-01 3.2291392722614005e+00 -2.5653728267446780e+00 + -7.9788201518804436e-01 3.3533891001088185e+00 -2.8674757452561179e+00 + -7.7137315594141076e-01 3.4425019137955317e+00 -3.2032496361280751e+00 + -7.4573298188700321e-01 3.4847791493284372e+00 -3.5907309713675040e+00 + -7.2972133270447515e-01 3.4599724151525137e+00 -4.0429092336771495e+00 + -7.3529882038211181e-01 3.3551882671055506e+00 -4.5221051067379534e+00 + -7.6120895061707383e-01 3.1919307070558030e+00 -4.9541411255721508e+00 + -7.9474054441930719e-01 3.0073052174621639e+00 -5.3050253958925051e+00 + -8.3697677285825856e-01 2.9323544607224776e+00 -5.4272629747560863e+00 + id 14402 + loc 5.9739351272583008e-01 9.4981825351715088e-01 404 + blend 0.0000000000000000e+00 + interp 4.0822479540152684e-01:3.2307219127573295e-01:9.6565593611544598e-01:4.0822071315357283e-01:1.2512970525230693e+00:3.3171496988174820e-01:2.0033374751851678e+00:3.2916565230444972e-01:2.9428220711104172e+00:3.6383199668825683e-01:3.3113409288933147e+00:2.8985012896659362e-01:3.9941515992201868e+00 + CVs 20 + 6.2543266722936308e-02 1.2948283069490463e-01 3.1693192959410928e-02 + 1.0640361375056413e-01 2.3465341803709808e-01 7.5314919520525145e-02 + 1.4395281725831088e-01 3.1862427749868216e-01 1.1901861568943964e-01 + 1.7918308798491867e-01 3.8804397294981396e-01 1.6302715110438720e-01 + 2.1013647434790034e-01 4.4497392658256302e-01 2.0970634114121908e-01 + 2.3521392627431637e-01 4.9307074711364951e-01 2.6168835054704309e-01 + 2.5391843692199434e-01 5.3633976046893750e-01 3.2072216210925886e-01 + 2.6610090743551318e-01 5.7727373785973635e-01 3.8638332528143415e-01 + 2.7077210253825756e-01 6.1760463312578484e-01 4.5791755267192963e-01 + 2.7004256291058742e-01 6.6250984876313490e-01 5.4014264720371230e-01 + 2.7288802780715132e-01 7.1791960172188141e-01 6.4017408012624211e-01 + 2.8660733478091849e-01 7.8144845362417525e-01 7.5221627586560535e-01 + 3.0766039617394264e-01 8.4533801277374554e-01 8.6108106001351858e-01 + 3.3333204815360279e-01 9.0684269538071427e-01 9.6192382915715913e-01 + 3.7142774879790297e-01 9.6736519073321203e-01 1.0615998007998968e+00 + 4.2876259927097032e-01 1.0278115311653655e+00 1.1612321694937568e+00 + 4.9882564377974226e-01 1.0890829267745747e+00 1.2468343129891271e+00 + 5.6764471816087358e-01 1.1503878147218898e+00 1.3018112478746016e+00 + 5.8787589658934580e-01 1.1566013840022991e+00 1.3013287789778130e+00 + id 14403 + loc 4.5753228664398193e-01 2.4663029238581657e-02 381 + blend 0.0000000000000000e+00 + interp 3.6627003890112375e-01:2.9299585953626817e-01:4.1146817725079476e-01:2.4215417083206170e-01:1.3630428519212989e+00:2.5960279247823620e-01:2.0961864051511134e+00:3.6626637620073477e-01:3.0069272775041327e+00:3.0787283499015183e-01:3.5330422131036201e+00 + CVs 20 + -7.4976035730283674e-01 1.7431443876891720e-01 -7.4158999247056090e-01 + -1.3128010796006206e+00 1.7931355842853297e-01 -1.2393772107721397e+00 + -1.8392987064603648e+00 1.1725177613414062e-01 -1.6994872562112142e+00 + -2.3714436375562951e+00 2.5266938079702705e-02 -2.1941193775902126e+00 + -2.8800279574474787e+00 -8.8193889461121722e-02 -2.7097937840313833e+00 + -3.3380292711105177e+00 -2.0908679963904953e-01 -3.2311878833761374e+00 + -3.7319832567710924e+00 -3.2792362431985689e-01 -3.7460965618831272e+00 + -4.0613610526314190e+00 -4.4172123495473747e-01 -4.2499714188352664e+00 + -4.3396195218354148e+00 -5.5892690235146358e-01 -4.7457087810644936e+00 + -4.5901670662877025e+00 -7.0539288078197271e-01 -5.2387913196049114e+00 + -4.8334826675204594e+00 -9.2025791866797713e-01 -5.7235981887832654e+00 + -5.0740019411789881e+00 -1.2453922760886509e+00 -6.1734294643019885e+00 + -5.2883958603316152e+00 -1.7153962598628445e+00 -6.5353100787822918e+00 + -5.4337800593171472e+00 -2.3322030461466126e+00 -6.7370112799229753e+00 + -5.5001136364358620e+00 -3.0593580695111875e+00 -6.7483461927490112e+00 + -5.5481969650747436e+00 -3.8686735222891908e+00 -6.6197026805876069e+00 + -5.6805465337263499e+00 -4.7215380244955067e+00 -6.4252295904131742e+00 + -5.9522813305431352e+00 -5.5217087522745718e+00 -6.1944903168664300e+00 + -6.3090502681922729e+00 -6.1602688272688333e+00 -5.9290589950477433e+00 + id 14404 + loc 3.8642185926437378e-01 1.5214096009731293e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4690339651548383e-01:3.0435635869295041e-01:5.8693248495580774e-02:3.5450345842375192e-01:9.3593968200134414e-01:2.9350933242820065e-01:1.3938289934955916e+00:4.4689892748151872e-01:2.0016467080263833e+00:2.9475685525649331e-01:2.8520449555855238e+00:2.9764170987407834e-01:3.4423750308641883e+00 + CVs 20 + -3.1228104205008217e-01 3.5957914527289359e-01 -2.0096957958535433e-01 + -5.7404360321356518e-01 7.3259773429149488e-01 -3.6311272050544702e-01 + -8.1708620958053380e-01 1.1097122258311070e+00 -5.0411381742425432e-01 + -1.0672044965085699e+00 1.4634190867031958e+00 -6.6359613525040728e-01 + -1.3483920455514413e+00 1.7587228734397859e+00 -8.7632830715865628e-01 + -1.6642336397171202e+00 1.9544430570135436e+00 -1.1522516271815206e+00 + -1.9637806058074780e+00 2.0006434213796851e+00 -1.4841268241151546e+00 + -2.1391955081874388e+00 1.8778174716355123e+00 -1.8424327558004943e+00 + -2.1102548009068016e+00 1.6351492450647496e+00 -2.1605912709086130e+00 + -1.9351142049263845e+00 1.3530137110364659e+00 -2.3895167560510449e+00 + -1.7087460855992778e+00 1.0468052707508479e+00 -2.5451484762233161e+00 + -1.4498606463300554e+00 7.0550552061872374e-01 -2.6217843515492092e+00 + -1.1768122045062370e+00 3.6265932389356581e-01 -2.6259591165226923e+00 + -9.4549668165548895e-01 6.8145872990569178e-02 -2.7006382354076495e+00 + -8.0186379035310407e-01 -1.2815437046350087e-01 -3.0062544481150413e+00 + -7.7315222198459121e-01 -1.0458801166848208e-01 -3.5113312509136652e+00 + -8.9847357790917237e-01 2.7248856214859773e-01 -4.0297497126879680e+00 + -1.1177520140639148e+00 8.0007544381354623e-01 -4.3408161236906233e+00 + -1.0630214486871812e+00 8.0644394764888405e-01 -4.7197259750326932e+00 + id 14405 + loc 8.7158459424972534e-01 3.8589233160018921e-01 402 + blend 0.0000000000000000e+00 + interp 3.4170662602125235e-01:2.7999172342148704e-01:6.9461836128841270e-01:2.6215413163592050e-01:1.7161044196181097e+00:2.7896610897193203e-01:2.5490973434118374e+00:3.4170320895499218e-01:3.0059762308664402e+00:2.4177119108751730e-01:3.7652224071341456e+00 + CVs 20 + 2.2646026548019335e-01 3.3817787309834091e-01 2.2552957786451516e-01 + 4.7347991586323140e-01 6.7879225094707896e-01 4.3957774571442737e-01 + 7.2927100477477735e-01 1.0202319050021309e+00 6.4210178745469249e-01 + 9.9264685269507613e-01 1.3530624419792485e+00 8.2210382904791512e-01 + 1.2719003543904179e+00 1.6750799812184201e+00 1.0405552183111528e+00 + 1.5030971629122545e+00 1.8133724583988338e+00 1.1416531616881611e+00 + 1.7604659625496444e+00 1.8910914310755449e+00 1.1995275377083392e+00 + 2.1366241229716425e+00 1.9368033252029688e+00 1.3008233095265109e+00 + 2.5939078383228154e+00 1.9062708153683781e+00 1.4551347462112489e+00 + 3.0713857025131182e+00 1.7562599857403933e+00 1.6726446779780848e+00 + 3.4849826964592578e+00 1.4844123452587474e+00 1.9233814821428510e+00 + 3.7675909415829660e+00 1.1794561171171849e+00 2.1384174126089084e+00 + 3.9241052426490830e+00 9.2663396711759305e-01 2.2920305693380918e+00 + 3.9864089733096839e+00 7.2419058503745104e-01 2.4067466615846671e+00 + 4.0081168631952062e+00 5.1632401063069955e-01 2.5238398566319771e+00 + 4.0882976233374180e+00 2.6231722755595388e-01 2.6895288775056390e+00 + 4.2821298944672144e+00 -1.1183206428547310e-02 2.9218896551151068e+00 + 4.5195600735277663e+00 -2.5237000075589022e-01 3.2124191693618869e+00 + 4.6634661192882225e+00 -3.9945979612803462e-01 3.5645176816037947e+00 + id 14406 + loc 8.0190396308898926e-01 7.1818053722381592e-02 412 + blend 0.0000000000000000e+00 + interp 4.8846850164485167e-01:3.3844772056203448e-01:2.2893779872199316e-01:3.5414879427270901e-01:1.0052066689203301e+00:4.8613106168195092e-01:1.3659177306978685e+00:4.8846361695983526e-01:1.8711427751976866e+00:2.7319076112155061e-01:2.1384537188404336e+00:3.1858683710460961e-01:3.3601177183279760e+00:4.0793873161823818e-01:3.9310815873132041e+00 + CVs 20 + -6.5510958063940694e-01 2.4678243573271111e-01 1.5871547298827660e-01 + -1.1449358961380383e+00 3.8290913519212227e-01 3.0436119770877157e-01 + -1.6031799308142201e+00 4.8972214479919551e-01 4.3643734482718022e-01 + -2.0585934641095007e+00 5.9129189482544486e-01 5.5543411796358688e-01 + -2.4870682811088174e+00 6.8374927836432220e-01 6.7001725593804884e-01 + -2.8805292947420020e+00 7.6638859307835028e-01 7.9175962026702718e-01 + -3.2469831995490757e+00 8.3499480933028569e-01 9.4037244051928481e-01 + -3.5901189060157646e+00 8.7764628377846399e-01 1.1465338554483078e+00 + -3.9074038386284142e+00 8.8450212224785807e-01 1.4336156449294419e+00 + -4.2073288849077981e+00 8.3779850340519491e-01 1.8083081023900949e+00 + -4.4880744457439627e+00 6.8211512553718756e-01 2.2296488677460311e+00 + -4.7188529369015813e+00 3.6827548300951118e-01 2.5922106561894118e+00 + -4.8820551511337174e+00 -8.9231876484682005e-02 2.8368500985727469e+00 + -4.9905740506606264e+00 -6.6566054670536468e-01 3.0049993389059475e+00 + -5.0768624093973447e+00 -1.3411227844024938e+00 3.1976931845218255e+00 + -5.1853055466641447e+00 -2.0771519091353503e+00 3.5212050058726847e+00 + -5.3594969519980440e+00 -2.8382433499806963e+00 3.9693563624948456e+00 + -5.6200322454429399e+00 -3.6071660076159042e+00 4.4282766048965225e+00 + -5.9447928936395460e+00 -4.3548687492820193e+00 4.8112077819277470e+00 + id 14407 + loc 8.4342575073242188e-01 4.8441338539123535e-01 401 + blend 0.0000000000000000e+00 + interp 4.3675762910908855e-01:3.3778942907460130e-01:8.5260515479007148e-02:3.3072139490072494e-01:9.8963980953278607e-01:3.4080119133075465e-01:1.8162623920911982e+00:4.3675326153279748e-01:2.2257684938984621e+00:3.3762892105608772e-01:2.9493835855980706e+00:3.9096906198182757e-01:3.5355132118936772e+00 + CVs 20 + 1.5029665931085501e-01 3.9910116635405279e-01 9.4774829289333812e-02 + 3.2120424128952418e-01 8.2785337449396557e-01 2.2278768349523798e-01 + 4.8719067731648563e-01 1.2842589364608363e+00 3.8348780020079642e-01 + 6.3964278408841035e-01 1.7491833808629875e+00 5.8533592562018155e-01 + 7.8463729770334367e-01 2.1955584023114798e+00 8.3011885522876616e-01 + 9.3281294046062802e-01 2.5993799274277682e+00 1.1045013302853863e+00 + 1.0932299499305862e+00 2.9447592307294128e+00 1.3883062209675685e+00 + 1.2693627747444221e+00 3.2224957649259549e+00 1.6624333205146140e+00 + 1.4541702112738295e+00 3.4354518447646480e+00 1.9272680394053596e+00 + 1.6350594073065343e+00 3.5942601877847187e+00 2.2143163035562505e+00 + 1.8048418086391611e+00 3.6913265856099118e+00 2.5515670240038029e+00 + 1.9601569577890849e+00 3.6994587874816691e+00 2.9219874593999116e+00 + 2.0956700313330723e+00 3.6205669471882942e+00 3.2583438160386029e+00 + 2.1966402905619757e+00 3.5355203427753170e+00 3.4836869104045149e+00 + 2.2236750722868135e+00 3.5479895092832141e+00 3.5882625295105517e+00 + 2.1001448652039509e+00 3.6818941142483266e+00 3.6173862289130296e+00 + 1.7270394966503686e+00 3.8435513406062904e+00 3.6148247463528818e+00 + 1.2244668014667592e+00 3.8232981578560081e+00 3.6602302133105566e+00 + 1.3367294339829088e+00 3.8042474413608627e+00 3.7954007761343611e+00 + id 14408 + loc 2.9820421338081360e-01 6.9742429256439209e-01 378 + blend 0.0000000000000000e+00 + interp 3.6292067592613836e-01:2.5208283002221610e-01:9.9916642536977995e-01:2.6230570558582472e-01:1.8220443815889880e+00:2.9038486739815317e-01:2.2534620009890971e+00:3.6291704671937913e-01:2.9998772364923152e+00:2.6944370590999334e-01:3.8423402351181561e+00 + CVs 20 + 4.6304181585064758e-01 3.3252137361359169e-01 2.5684936777711015e-01 + 8.5921876629709959e-01 5.6782423222778200e-01 4.6457133166146003e-01 + 1.2487268934899620e+00 7.4206149172503899e-01 6.5287105012604996e-01 + 1.6491869424537196e+00 8.7888647059102176e-01 8.3704694759491916e-01 + 2.0403235325284235e+00 9.8891965478711996e-01 1.0194896932949464e+00 + 2.4051808273367135e+00 1.0790498976702361e+00 1.2012169517230660e+00 + 2.7391524466779038e+00 1.1500790577028979e+00 1.3799995321940850e+00 + 3.0435520025073393e+00 1.2058077242977183e+00 1.5522171880639943e+00 + 3.3203231363739807e+00 1.2580610039524081e+00 1.7214463831189333e+00 + 3.5717197760220412e+00 1.3218688427375653e+00 1.9021757467855518e+00 + 3.8053616285018146e+00 1.4106214029480151e+00 2.1104788481172099e+00 + 4.0486382615819547e+00 1.5256677746243450e+00 2.3600303470923878e+00 + 4.3350938298751043e+00 1.6181829544039896e+00 2.6578864552920556e+00 + 4.6475436992180112e+00 1.5824054330960227e+00 2.9675714956516006e+00 + 4.9344351869485941e+00 1.3687893854962301e+00 3.2210752333303865e+00 + 5.1765959986555536e+00 1.0228450386054475e+00 3.4266306275021785e+00 + 5.3892769068319772e+00 6.2123745351556092e-01 3.6541324751903748e+00 + 5.6456067642318626e+00 2.4518255350791218e-01 3.9057753119395557e+00 + 6.1400622547288091e+00 -2.8123395048167410e-03 4.0537700057775368e+00 + id 14409 + loc 4.7400361299514771e-01 9.1098970174789429e-01 393 + blend 0.0000000000000000e+00 + interp 4.6732851907016659e-01:4.6732384578497593e-01:1.0543011195303864e-01:3.1706123788026830e-01:9.9248102577983932e-01:2.8712506044326758e-01:1.5565659461096018e+00:3.0198786317069753e-01:2.0694913413628688e+00:4.2198452951335780e-01:2.9811448794800919e+00:3.1208059981486969e-01:3.6347111276519959e+00 + CVs 20 + -1.8760222859102432e-01 3.4023602499962752e-01 -2.8255672893500822e-01 + -3.6506768836433312e-01 6.8940354522238612e-01 -5.3011645427271514e-01 + -5.2081957499711806e-01 1.0509396316142348e+00 -7.5606484400238216e-01 + -6.6596339182429309e-01 1.4284630775205702e+00 -9.6126119537946308e-01 + -8.1875004406013852e-01 1.8196330654262760e+00 -1.1393306119539783e+00 + -9.9410389853546222e-01 2.2189558485389491e+00 -1.2880848941243488e+00 + -1.2061076861438369e+00 2.6218083229138696e+00 -1.4115300868269716e+00 + -1.4743309908713162e+00 3.0224571321676210e+00 -1.5186867507946060e+00 + -1.8165425342854824e+00 3.3982287911883660e+00 -1.6171199558327403e+00 + -2.2280111242226397e+00 3.7129346608280178e+00 -1.7131757702085126e+00 + -2.6934663885550409e+00 3.9518849404206833e+00 -1.8326429770742698e+00 + -3.2113542838197060e+00 4.1169704454243199e+00 -2.0213620256687737e+00 + -3.7776533892509172e+00 4.1854516859196647e+00 -2.2988628185814406e+00 + -4.3603891503189249e+00 4.1138411562825166e+00 -2.6356355229857242e+00 + -4.8988696407686829e+00 3.8869191500110638e+00 -3.0029400822551677e+00 + -5.3283283179065579e+00 3.5313420964104232e+00 -3.4023326014746771e+00 + -5.6470074411770161e+00 3.0795013168608749e+00 -3.8141254600335590e+00 + -5.9444169488619654e+00 2.5479974932547167e+00 -4.1493670771956950e+00 + -6.2597890018519298e+00 2.0135926359725342e+00 -4.2790477181642395e+00 + id 14410 + loc 7.1028482913970947e-01 2.7766910195350647e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4563245825106498e-01:2.8975431661181644e-01:4.6237472497674414e-01:2.4739266014304509e-01:1.1698382386927419e+00:2.5898287047010426e-01:2.0335291266067039e+00:3.4562900192648249e-01:2.8982025196131822e+00:2.5745358767064597e-01:3.9271791083750953e+00 + CVs 20 + -1.8152665093781523e-02 4.2160610871790938e-01 -1.4133326060175108e-01 + -7.3070463408655528e-02 8.1588618287286163e-01 -1.8615459932347697e-01 + -1.6697686523499122e-01 1.1788022484793372e+00 -1.7568496346493684e-01 + -3.0128881117713713e-01 1.5021971382384984e+00 -1.2385520832554575e-01 + -4.7062945367914477e-01 1.7629952803698123e+00 -3.2178752221316276e-02 + -6.6107931281793697e-01 1.9383632901990455e+00 8.8387324568337644e-02 + -8.5082974025808722e-01 2.0175008193031143e+00 2.1558393593425429e-01 + -1.0190966033687219e+00 2.0132368350684420e+00 3.2418553054015220e-01 + -1.1564292470725397e+00 1.9546584646256613e+00 4.0003089279675647e-01 + -1.2678321596392670e+00 1.8686623971638312e+00 4.4329853872385239e-01 + -1.3655831748791043e+00 1.7696487042531279e+00 4.5766318719249305e-01 + -1.4588556872447325e+00 1.6680715238591701e+00 4.4193545487541408e-01 + -1.5595588036889909e+00 1.5771522421609174e+00 3.9669186645528909e-01 + -1.6939794380500472e+00 1.4982581597260625e+00 3.2843595703002681e-01 + -1.9012426799611597e+00 1.4062241232048580e+00 2.5296217613373095e-01 + -2.1902898886273658e+00 1.2163979096363182e+00 2.0273538644602704e-01 + -2.4331881200380732e+00 7.9443189241566459e-01 2.0560514221117468e-01 + -2.4102334836368939e+00 1.2895623996574035e-01 2.8095911867125589e-01 + -2.3577875718205097e+00 -4.2203760387144240e-02 2.8969331719172542e-01 + id 14411 + loc 3.1319808959960938e-01 9.5961219072341919e-01 396 + blend 0.0000000000000000e+00 + interp 4.0278328173103439e-01:2.6340692141115296e-01:7.7787175788059748e-01:2.5583253223504016e-01:1.3885911230156651e+00:3.6238607470536560e-01:2.2615586192755250e+00:2.5407681070393173e-01:3.0080692202814525e+00:4.0277925389821712e-01:3.9991362097121188e+00 + CVs 20 + 1.0485875672400096e+00 1.7462756532273430e-01 -3.6751778552087400e-01 + 1.7439549072357212e+00 1.6466402279853115e-01 -6.8258210191390756e-01 + 2.3502489480101945e+00 1.0801694170769449e-01 -9.6930606911714046e-01 + 2.9621184313431179e+00 5.3848892941503745e-02 -1.2257995416540839e+00 + 3.5755193706441890e+00 1.0933614684361936e-03 -1.4332144218514811e+00 + 4.1757467265353441e+00 -4.7107781434762130e-02 -1.5784273024264495e+00 + 4.7502232404675127e+00 -8.8387548573047869e-02 -1.6566720812805493e+00 + 5.2989823628570534e+00 -1.2650196705946848e-01 -1.6707616183484653e+00 + 5.8330681875901353e+00 -1.7245645033255075e-01 -1.6303832141787726e+00 + 6.3699878330386372e+00 -2.4664454465651642e-01 -1.5513826676317497e+00 + 6.9227552724894448e+00 -3.8004892716180239e-01 -1.4550312870489284e+00 + 7.4796035951006994e+00 -6.0093218924446168e-01 -1.3653831399333889e+00 + 8.0059113382297831e+00 -9.1810996526882982e-01 -1.3002597296557454e+00 + 8.4713344287775456e+00 -1.3298109555845401e+00 -1.2656661587041973e+00 + 8.8573409024538101e+00 -1.8337680044189546e+00 -1.2620460601780761e+00 + 9.1502953744929751e+00 -2.4147243008806907e+00 -1.2914859694794023e+00 + 9.3429580488673505e+00 -3.0410075062527877e+00 -1.3499152354503308e+00 + 9.4379945960059004e+00 -3.6822941995202640e+00 -1.4147695278843917e+00 + 9.4084765548499636e+00 -4.2266804055467890e+00 -1.4303713918366840e+00 + id 14412 + loc 1.5128922462463379e-01 8.1928229331970215e-01 379 + blend 0.0000000000000000e+00 + interp 3.7245350889316359e-01:3.4897093030563908e-01:1.3019197429864027e-01:2.9621330462853152e-01:9.5988128647550386e-01:2.2093098046630505e-01:1.9403692230649201e+00:3.7244978435807469e-01:2.7676074855434898e+00:2.9087570527307838e-01:3.1006166204696752e+00 + CVs 20 + -1.3476222038331112e-01 3.3722888284710789e-01 2.6403595450167799e-01 + -2.4870626704581605e-01 6.3386324402739891e-01 5.4004548436679245e-01 + -3.4729812584578584e-01 8.6208934977854879e-01 8.6274334297423794e-01 + -4.2960609669072114e-01 1.0337744075235817e+00 1.2210622972848133e+00 + -4.9297553231378649e-01 1.1930591833491841e+00 1.5635391344738103e+00 + -5.4693327721053420e-01 1.3658291232896620e+00 1.8534111197391643e+00 + -6.1460325936214977e-01 1.5501120871345790e+00 2.0837558498061770e+00 + -7.1697488737819981e-01 1.7380286349748464e+00 2.2597448976549956e+00 + -8.4822600901721112e-01 1.9271091214819209e+00 2.3866344203589556e+00 + -1.0175031506541170e+00 2.1240934665455113e+00 2.4691794710710058e+00 + -1.2195705319467158e+00 2.3358255397453869e+00 2.5117302188961608e+00 + -1.4109668240701321e+00 2.5555847999271899e+00 2.5382345521250689e+00 + -1.5602428336295482e+00 2.7771440547531672e+00 2.5851596781971100e+00 + -1.6904497036048662e+00 3.0006569828432386e+00 2.6788023465366706e+00 + -1.8838814977085745e+00 3.2156667354094823e+00 2.7766661031480337e+00 + -2.2181617430258811e+00 3.3336731360529672e+00 2.7051122340607892e+00 + -2.6662004218020789e+00 3.2067098825030573e+00 2.3770168643105856e+00 + -3.0670020492326771e+00 2.7589440733282347e+00 2.1319875061764599e+00 + -3.1868500648163725e+00 2.4004677362684066e+00 2.3615884111688881e+00 + id 14413 + loc 3.2224404811859131e-01 5.0107216835021973e-01 404 + blend 0.0000000000000000e+00 + interp 4.5727058827924283e-01:3.6230989454106144e-01:7.7094141855995835e-02:4.5726601557336005e-01:9.9122070264753614e-01:3.4270144139281739e-01:1.3104620816623216e+00:3.9754526190204753e-01:1.9872427913710091e+00:3.9238191342454382e-01:2.7380844673765399e+00:3.1577394241059437e-01:3.2164540997392814e+00 + CVs 20 + 6.6888673597231343e-02 1.0914231376240383e-01 -7.8728795736760365e-02 + 1.0955087294978194e-01 2.0758371085807517e-01 -1.2998069449585198e-01 + 1.3923354143114669e-01 3.0586576434294782e-01 -1.7026277018844715e-01 + 1.6504031761759830e-01 4.1424507676051592e-01 -2.1237426192131004e-01 + 1.8632202628927927e-01 5.3339092148800138e-01 -2.5812352679956646e-01 + 2.0155947908376567e-01 6.6305546337138799e-01 -3.0930573492947089e-01 + 2.0844231264938379e-01 8.0197153667849519e-01 -3.6803547715720164e-01 + 2.0367534413128574e-01 9.4772236854423830e-01 -4.3607508667872807e-01 + 1.8347056317598592e-01 1.0968791815716865e+00 -5.1372930256630023e-01 + 1.4423048966704688e-01 1.2452819604901872e+00 -5.9929217369608878e-01 + 8.2919014397019986e-02 1.3886251117041433e+00 -6.8935824120565148e-01 + -1.9075291451571275e-03 1.5232836419482574e+00 -7.7926740445798859e-01 + -1.0779991430094427e-01 1.6463436979295329e+00 -8.6154703368189844e-01 + -2.2956569993099352e-01 1.7564173162824768e+00 -9.2782257124341727e-01 + -3.5946807535940650e-01 1.8532708757553964e+00 -9.6951313188576616e-01 + -4.8666621882897865e-01 1.9378855173280092e+00 -9.7757932684243531e-01 + -5.9760608490980771e-01 2.0130177013129611e+00 -9.4485079123747640e-01 + -6.7984155053273876e-01 2.0830725352412602e+00 -8.7056812502166403e-01 + -8.9025145477278866e-01 2.1434998957018028e+00 -8.4613702711105798e-01 + id 14414 + loc 5.7773511856794357e-02 4.2098724842071533e-01 400 + blend 0.0000000000000000e+00 + interp 5.4834238374765121e-01:3.1873342685853540e-01:8.2942243605206278e-01:4.6184448175100434e-01:1.4239482336349243e+00:4.8729267936203347e-01:1.9257188632413564e+00:5.4833690032381377e-01:2.1673900297644102e+00:3.5303018514148782e-01:2.9306161167049978e+00:2.9939513224234748e-01:3.6217248680447018e+00 + CVs 20 + 5.0377120932603298e-03 4.2127026618682539e-01 2.9139963446899858e-01 + -3.4865835913430010e-02 8.4364464369775671e-01 5.5272855326427162e-01 + -1.2892556079684139e-01 1.2542402084585005e+00 8.0638375828742714e-01 + -2.8020975585397340e-01 1.6381818083097786e+00 1.0548967985929867e+00 + -4.8481955521884557e-01 1.9815343361830218e+00 1.2931905874064564e+00 + -7.3351034328867448e-01 2.2734168025583443e+00 1.5146685763797385e+00 + -1.0138915877915069e+00 2.5081310568437152e+00 1.7120250293550183e+00 + -1.3118739208360695e+00 2.6856713524990830e+00 1.8790219784539832e+00 + -1.6127566940500353e+00 2.8111233878606434e+00 2.0125782839438240e+00 + -1.9033220585615216e+00 2.8937945837119066e+00 2.1145123997245192e+00 + -2.1775240567403369e+00 2.9446520804432903e+00 2.1875202124799582e+00 + -2.4444577087650354e+00 2.9716048276322944e+00 2.2246422124896954e+00 + -2.7300242693509547e+00 2.9827602070736203e+00 2.2124711813281341e+00 + -3.0717450960312567e+00 2.9886180216371505e+00 2.1487829475726095e+00 + -3.4925781769891939e+00 2.9757208805859809e+00 2.0551333562461158e+00 + -3.9685740191424626e+00 2.8921930190360792e+00 1.9593868185761858e+00 + -4.4236365866848857e+00 2.6916014296066217e+00 1.8811268781664716e+00 + -4.7748414521833968e+00 2.4107636766355012e+00 1.8717386275246637e+00 + -4.9823502066908176e+00 2.1380046707724589e+00 1.9605040763940702e+00 + id 14415 + loc 2.5360786914825439e-01 2.6729410886764526e-01 412 + blend 0.0000000000000000e+00 + interp 4.5035761404481928e-01:3.0689627280882636e-01:5.1424782704664840e-01:2.6996377352003453e-01:1.2720617148842073e+00:4.5035311046867887e-01:2.0111581658335091e+00:3.1493400175710579e-01:2.6621049271915389e+00:2.8907037419465292e-01:3.0980096075533465e+00:3.2157251631928196e-01:3.9242192121662911e+00 + CVs 20 + -1.6122549649430767e-01 1.5500618727585855e-01 -5.3127952859722205e-01 + -3.3610291215908844e-01 2.1136008394455832e-01 -9.1059479642398522e-01 + -5.1375248846142374e-01 2.3194958300420665e-01 -1.2720850471132104e+00 + -6.8639001240291031e-01 2.3684283551001012e-01 -1.6671142274057194e+00 + -8.4415110517537051e-01 2.1804524877565001e-01 -2.0926781093784008e+00 + -9.7664112042406392e-01 1.6962045015641602e-01 -2.5448458417055244e+00 + -1.0752712735748668e+00 8.8402336502870105e-02 -3.0118134022489835e+00 + -1.1345276681709511e+00 -2.4537341276930968e-02 -3.4766600630601667e+00 + -1.1525965730707646e+00 -1.6555541747225422e-01 -3.9237574310350181e+00 + -1.1317278007610139e+00 -3.3159569806686018e-01 -4.3361487486492756e+00 + -1.0950565578830576e+00 -5.2056292776478919e-01 -4.6780348861911341e+00 + -1.0898279773048507e+00 -7.2669520650449004e-01 -4.8975603100991076e+00 + -1.1261627028453183e+00 -9.3080073591651091e-01 -4.9863508908128296e+00 + -1.1628747030636841e+00 -1.1268519782445390e+00 -5.0018979616704762e+00 + -1.1740764387272333e+00 -1.3198766597499136e+00 -4.9833845134358938e+00 + -1.1518511736900470e+00 -1.4972807372796206e+00 -4.9325699178665605e+00 + -1.0909886972477751e+00 -1.6523326778071747e+00 -4.8613948445157371e+00 + -9.9987353966840820e-01 -1.8072344247877303e+00 -4.8000483162335197e+00 + -9.4738043403618577e-01 -2.0574552816074085e+00 -4.8052159189383303e+00 + id 14416 + loc 9.2411613464355469e-01 8.1341087818145752e-02 399 + blend 0.0000000000000000e+00 + interp 4.0891531937167480e-01:3.4874500446972789e-01:5.1290213315709199e-01:4.0891123021848108e-01:9.9213364002056503e-01:3.6951690881394023e-01:1.3779513558107763e+00:2.7733427428678303e-01:2.2477122495834880e+00:3.0909093783516928e-01:2.9565110757584887e+00:3.4195189653432229e-01:3.9381877496735940e+00 + CVs 20 + 2.5541379804742420e-01 2.2939604363992921e-01 5.9299988847421888e-02 + 4.9543212494755406e-01 4.7276549425884834e-01 1.5774300378021824e-01 + 7.1348165423613841e-01 7.1381545811329128e-01 2.7626455607642297e-01 + 9.1547316225801578e-01 9.4422269282591009e-01 4.0757871920050970e-01 + 1.1122937377171784e+00 1.1593660502803822e+00 5.5212208349799885e-01 + 1.3108840837409015e+00 1.3508948879934672e+00 7.1011357484354187e-01 + 1.5134948232928662e+00 1.5084524398896297e+00 8.8112081936539732e-01 + 1.7191737778301235e+00 1.6230064412965459e+00 1.0630806115873424e+00 + 1.9252551910381839e+00 1.6880943174365612e+00 1.2522796289637763e+00 + 2.1280383029646610e+00 1.7004003144214566e+00 1.4433915965679303e+00 + 2.3207813775326165e+00 1.6618440249952195e+00 1.6258174963939549e+00 + 2.4954324462775190e+00 1.5820203410405711e+00 1.7846843443888978e+00 + 2.6509137310136150e+00 1.4753928814364290e+00 1.9151703688921287e+00 + 2.7927449752621545e+00 1.3489720316803320e+00 2.0317840646210152e+00 + 2.9167621181520627e+00 1.1889687567298242e+00 2.1402244375183441e+00 + 3.0099192636525207e+00 9.6152456612102455e-01 2.2072517373032099e+00 + 3.0830442136433280e+00 6.0956072287505181e-01 2.2502834982311954e+00 + 3.1755867623221317e+00 2.9550003844440553e-01 2.4638382050868248e+00 + 3.2577787148690280e+00 3.3151714420009437e-01 2.7401212948864120e+00 + id 14417 + loc 1.1233671568334103e-02 6.8120187520980835e-01 393 + blend 0.0000000000000000e+00 + interp 3.1985350103039184e-01:7.4106059471478844e-02:1.0009042514398245e+00:3.1985030249538154e-01:2.5897588185660534e+00:2.6687275146258499e-01:3.0606466580355951e+00:3.0523904934158436e-01:3.8573531675297579e+00 + CVs 20 + -2.7974030248273463e-01 4.2946867879145029e-01 -1.8334958063009643e-01 + -5.3634682388325494e-01 8.6115582309108452e-01 -3.8383691064858805e-01 + -7.9817018890040026e-01 1.3051237657599117e+00 -5.8418961050945550e-01 + -1.0970924603304455e+00 1.7590122403738884e+00 -7.7075484850440334e-01 + -1.4635643145165889e+00 2.2058433716244026e+00 -9.2972113441798721e-01 + -1.9159269190324173e+00 2.6143285257286961e+00 -1.0470459886416510e+00 + -2.4543515756657488e+00 2.9433394486653066e+00 -1.1150417744888517e+00 + -3.0564450269097376e+00 3.1502629171179723e+00 -1.1386122250646926e+00 + -3.6748884632817060e+00 3.2189083278651078e+00 -1.1394832965909223e+00 + -4.2683594578740003e+00 3.1805234516873728e+00 -1.1526486186238694e+00 + -4.8245344191451327e+00 3.0684634830709818e+00 -1.2028621484351603e+00 + -5.3325098270964038e+00 2.8830530735473574e+00 -1.2826900856273511e+00 + -5.7709750958778558e+00 2.6270917348791967e+00 -1.3706421947020824e+00 + -6.1352804796093388e+00 2.3327403886080482e+00 -1.4652712009128930e+00 + -6.4473734926914155e+00 2.0362157174298412e+00 -1.5608375594392629e+00 + -6.7268782645120000e+00 1.7755506983675835e+00 -1.6160419128406038e+00 + -6.9678664312363852e+00 1.5922740049740989e+00 -1.6061301332101290e+00 + -7.1693088837240051e+00 1.4646645760342589e+00 -1.5876986272988969e+00 + -7.4073658527784136e+00 1.2721995490916045e+00 -1.6330392326953913e+00 + id 14418 + loc 1.2672701478004456e-01 7.7880495786666870e-01 381 + blend 0.0000000000000000e+00 + interp 3.5994492771528031e-01:2.8259220070439794e-01:3.8401320055802790e-01:3.4196352223984156e-01:9.7996785095448669e-01:2.6114675117157565e-01:1.9915164878074969e+00:2.6269845650026735e-01:3.0606458777081187e+00:3.5994132826600317e-01:3.9111484884991139e+00 + CVs 20 + 1.0697214273318971e+00 2.1035542581163408e-01 -6.7614313525172154e-01 + 1.7598103635591678e+00 2.2483695986967173e-01 -1.2069610032158249e+00 + 2.3688052912794686e+00 1.5358293806884260e-01 -1.7376216133786153e+00 + 3.0225654295622735e+00 2.3629677167367635e-02 -2.3160968017409100e+00 + 3.7166764047873011e+00 -1.8559231471081272e-01 -2.9036395760007538e+00 + 4.4250012937880170e+00 -4.8874146573004140e-01 -3.4503141029562259e+00 + 5.1059298595371612e+00 -8.8614716591437415e-01 -3.9050698355702633e+00 + 5.7188124356632013e+00 -1.3505178063176935e+00 -4.2285699555950664e+00 + 6.2386883319351680e+00 -1.8292885628865272e+00 -4.4171414069072865e+00 + 6.6662235117540138e+00 -2.2731773521121643e+00 -4.5095330771609241e+00 + 7.0221028452030048e+00 -2.6642835671139768e+00 -4.5608731463097190e+00 + 7.3347561107469277e+00 -3.0204596098889094e+00 -4.6168856616940239e+00 + 7.6380947923796638e+00 -3.3883017296632074e+00 -4.7058206831356291e+00 + 7.9407542979431875e+00 -3.8131577583072538e+00 -4.8422354653704955e+00 + 8.2103353049878383e+00 -4.2621580163829256e+00 -5.0288161976122332e+00 + 8.4195122159817881e+00 -4.6589040923293989e+00 -5.2576753777577583e+00 + 8.5577934645094018e+00 -4.9629234065145136e+00 -5.5097803200604831e+00 + 8.6348167313643103e+00 -5.1793647894270656e+00 -5.7642882059045029e+00 + 8.6458243896055578e+00 -5.3559184068307530e+00 -6.1021219339624491e+00 + id 14419 + loc 3.2649138569831848e-01 8.6924463510513306e-01 1069 + blend 0.0000000000000000e+00 + interp 5.1991532543890939e-01:5.1991012628565503e-01:2.2321431367574540e-01:3.0250366898796271e-01:1.0001755691580749e+00:3.0406071749964503e-01:1.8569096062608770e+00:3.1991570989650120e-01:2.3820557908595630e+00:3.4115300293140555e-01:2.9819369278102785e+00:2.7486283891088292e-01:3.6429146012581559e+00 + CVs 20 + 2.8700230071510274e-01 2.3135683042005128e-01 -2.1037637522103464e-01 + 5.4468661882375480e-01 4.7072208430374379e-01 -4.3617094735359674e-01 + 7.7289227743460320e-01 7.1239538055703555e-01 -6.8269208983391572e-01 + 9.5722803952035695e-01 9.4999383143329486e-01 -9.5374079558818681e-01 + 1.0769618623143464e+00 1.1691986966863275e+00 -1.2465191405439575e+00 + 1.1175626848117290e+00 1.3458670814228424e+00 -1.5477202561374590e+00 + 1.0803359743078000e+00 1.4576772577146879e+00 -1.8365031788866233e+00 + 9.8195299458068752e-01 1.4957222077881487e+00 -2.0931222121191357e+00 + 8.4178225744110924e-01 1.4641575648658207e+00 -2.3010637345582836e+00 + 6.7339265030121520e-01 1.3787706376483531e+00 -2.4510573757908274e+00 + 4.8208324933141966e-01 1.2566923388881310e+00 -2.5582551724513820e+00 + 2.6467799893710159e-01 1.0922556984052820e+00 -2.6649811971928394e+00 + 2.2403255778813469e-02 8.5909488293681613e-01 -2.8068995441865865e+00 + -2.2577190898050536e-01 5.3608140374758873e-01 -3.0014316233566327e+00 + -4.4237796396352230e-01 1.0542556882029708e-01 -3.2691904496693738e+00 + -5.4241801002700529e-01 -4.8095335698256869e-01 -3.6625370091700811e+00 + -3.1284962408212963e-01 -1.2569295431210168e+00 -4.2165591710775123e+00 + 3.1038581244717811e-01 -1.9735269079595017e+00 -4.7105086181098708e+00 + 4.4347573271196139e-01 -2.2588259272098372e+00 -4.8498632041058150e+00 + id 14420 + loc 4.2118695378303528e-01 9.7225445508956909e-01 378 + blend 0.0000000000000000e+00 + interp 3.7986191907651540e-01:2.2720685522990339e-01:7.0694443601127399e-01:2.3953422885242232e-01:1.1580477745329321e+00:3.7985812045732464e-01:2.0043996817247827e+00:2.5808208574103819e-01:2.7126101171763679e+00:2.5011076318945197e-01:3.3296477017889989e+00 + CVs 20 + 5.9261059161218921e-01 3.6108570089930825e-01 2.1423713766443458e-01 + 1.0859255155917231e+00 6.4471563839894730e-01 3.7888776472191998e-01 + 1.5656131620423335e+00 8.9579302926016680e-01 5.2374414095526267e-01 + 2.0554799377561879e+00 1.1467965264244921e+00 6.6999585854750365e-01 + 2.5446965040491940e+00 1.4031982836620520e+00 8.2828067534474736e-01 + 3.0451895389764840e+00 1.6540801132707768e+00 1.0105750928025574e+00 + 3.5796443533399067e+00 1.8704793708737188e+00 1.2293007614905238e+00 + 4.1594949184897194e+00 2.0146070393862283e+00 1.4943653181501846e+00 + 4.7812341845842887e+00 2.0495148263307770e+00 1.8107779040147225e+00 + 5.4298192706044182e+00 1.9435814725723195e+00 2.1697653678145739e+00 + 6.0799801308040546e+00 1.6767348641360242e+00 2.5412546502447078e+00 + 6.6959280468083113e+00 1.2390126807229094e+00 2.8801888624434184e+00 + 7.2360687565479953e+00 6.5039877288648462e-01 3.1358899305942773e+00 + 7.6913611380894924e+00 6.9850515199831875e-04 3.2867680170794156e+00 + 8.1087739149425033e+00 -5.9840646910390571e-01 3.3709140925692123e+00 + 8.5415232846906353e+00 -1.0674138627362662e+00 3.4245163852992020e+00 + 8.9976419798428360e+00 -1.3521400218591664e+00 3.4257237273618926e+00 + 9.4404857267354920e+00 -1.4911041763266599e+00 3.3749555362084140e+00 + 9.8790616023989237e+00 -1.7873945894259720e+00 3.4359708817532524e+00 + id 14421 + loc 7.7260637283325195e-01 8.7612313032150269e-01 396 + blend 0.0000000000000000e+00 + interp 3.7225760088034465e-01:3.7225387830433587e-01:7.5193644674663451e-01:2.6232655595400650e-01:1.1730370781609747e+00:2.7129216668898143e-01:2.0022375087650435e+00:2.4217377568855841e-01:3.0068293973707845e+00:2.5961670485359339e-01:3.9890121508423970e+00 + CVs 20 + 1.0048600978814615e+00 1.9963900944769186e-01 -3.7341119358941305e-01 + 1.6811403760180617e+00 2.6129949557914312e-01 -6.5260610123202734e-01 + 2.2692514842050429e+00 2.9654011391669277e-01 -8.9283870632894724e-01 + 2.8642220503429501e+00 3.4986043183533200e-01 -1.1140655956765717e+00 + 3.4569902819768625e+00 4.0829301534743084e-01 -1.3184671262406793e+00 + 4.0413605880578238e+00 4.5528446497452324e-01 -1.5131040826462789e+00 + 4.6134659347610443e+00 4.7308002849781711e-01 -1.7071027539224040e+00 + 5.1701223108556791e+00 4.4475850382814264e-01 -1.9075985100985966e+00 + 5.7094153304557560e+00 3.5617532646790129e-01 -2.1169772283994872e+00 + 6.2370059051198803e+00 1.9382256885374760e-01 -2.3373131273008649e+00 + 6.7530610361616219e+00 -5.0453058655298033e-02 -2.5737479654890376e+00 + 7.2381115832707028e+00 -3.8500638844943280e-01 -2.8306645126066741e+00 + 7.6510331954506725e+00 -8.1959534333730022e-01 -3.1074564631502417e+00 + 7.9606755305146208e+00 -1.3531884981891413e+00 -3.3914248123610831e+00 + 8.1492116768208653e+00 -1.9740842725948788e+00 -3.6641739255638948e+00 + 8.2067845428047104e+00 -2.6560902998098452e+00 -3.9117745780949686e+00 + 8.1327914295227330e+00 -3.3610823395576408e+00 -4.1177683129082423e+00 + 7.9403843527580724e+00 -4.0472907158436984e+00 -4.2574810561954273e+00 + 7.6612474169714408e+00 -4.6737306527773868e+00 -4.3147075597746696e+00 + id 14422 + loc 5.0955235958099365e-02 8.5559844970703125e-01 401 + blend 0.0000000000000000e+00 + interp 5.1685460164901431e-01:3.0697658137748229e-01:3.3916123778343221e-01:5.1684943310299780e-01:9.2245345291331504e-01:3.8600065462975686e-01:1.7243480260554591e+00:4.0348809520404644e-01:2.1320636209857406e+00:3.4876057169444480e-01:2.9970006124394182e+00:3.2261466482338563e-01:3.9073267930797293e+00 + CVs 20 + 6.2114773555877051e-03 2.8343587561236794e-01 -2.3664235180293550e-01 + -7.4504972164174399e-03 5.5061874467903926e-01 -4.6062467750539871e-01 + -2.4804014404489594e-02 8.1208088983378857e-01 -6.8333446721337887e-01 + -3.9295367746692178e-02 1.0709343183356259e+00 -9.1349915308435103e-01 + -5.7785224287149661e-02 1.3236881293073279e+00 -1.1582018476826401e+00 + -9.3891897252925460e-02 1.5659151885914535e+00 -1.4233905678158743e+00 + -1.6865386308236419e-01 1.7912304096867768e+00 -1.7115289229196877e+00 + -3.0314202590675854e-01 1.9879520160623325e+00 -2.0194360874826338e+00 + -5.0911171970949609e-01 2.1394656919000345e+00 -2.3373392298427613e+00 + -7.8479296695990131e-01 2.2283017170057926e+00 -2.6520309744394570e+00 + -1.1156998517425312e+00 2.2404467449335304e+00 -2.9537027123218205e+00 + -1.4822562676987965e+00 2.1648780314853222e+00 -3.2382786846344103e+00 + -1.8671523298671455e+00 1.9908302211653353e+00 -3.4992817559506766e+00 + -2.2615588041842982e+00 1.7154838667675629e+00 -3.7136508902288630e+00 + -2.6747836226654416e+00 1.3561463482390046e+00 -3.8297341804868057e+00 + -3.1125673682074546e+00 9.6079410888351369e-01 -3.7735274673179129e+00 + -3.5467158163680934e+00 6.0985334861705154e-01 -3.4912127656236818e+00 + -3.9161401567610659e+00 3.9039065296471587e-01 -2.9977101003698627e+00 + -4.1756970968636580e+00 2.0969883348120977e-01 -2.7881826550368687e+00 + id 14423 + loc 7.6177221536636353e-01 5.9645563364028931e-01 402 + blend 0.0000000000000000e+00 + interp 3.3070020141750434e-01:2.6598811730285599e-01:5.1929640345003136e-03:2.6216166687288317e-01:7.6715626351926769e-01:2.3986888121772168e-01:1.5909996942153479e+00:3.3069689441549016e-01:2.3295695101003111e+00:2.3385317002301920e-01:3.1331986820963453e+00 + CVs 20 + -8.1620541793090695e-03 2.8538612419221077e-01 -2.4233962288469402e-01 + -3.0169911104499625e-02 5.8037956846342498e-01 -4.8889693371138065e-01 + -4.3629676411570617e-02 8.9287631098710474e-01 -7.5135030679442660e-01 + -6.8483159611182287e-02 1.2241368571651334e+00 -1.0390309945262712e+00 + -1.4817644118997891e-01 1.5573062518517604e+00 -1.3513588169681667e+00 + -2.9527209310650349e-01 1.8466066319222225e+00 -1.6691467844682704e+00 + -3.4736423322555954e-01 1.9563726496769336e+00 -1.8151547487977138e+00 + -5.0383707344835826e-01 2.1172988842284814e+00 -2.2681029283713343e+00 + -7.3717837627395766e-01 2.1289702993535613e+00 -2.6032157197256947e+00 + -9.5187548140168277e-01 2.0636413960047824e+00 -2.8640738539101163e+00 + -1.1069591768072384e+00 1.9010170510385689e+00 -3.1158360127494760e+00 + -1.2111410173021950e+00 1.6136104325592198e+00 -3.3685272445133165e+00 + -1.3066143463484530e+00 1.1923372327448629e+00 -3.6329205485027960e+00 + -1.4719492109733663e+00 6.8798130292707205e-01 -3.9148537390445783e+00 + -1.7672089680852532e+00 1.8698283344033206e-01 -4.2143889716710632e+00 + -2.1813869100867485e+00 -2.3218437075488896e-01 -4.5199238711378040e+00 + -2.6569019890820678e+00 -5.5819633318255679e-01 -4.8370755248082649e+00 + -3.1601085900376114e+00 -8.3755250283836324e-01 -5.1988160612377321e+00 + -3.7101266665342907e+00 -1.1379263985572128e+00 -5.6039524330245074e+00 + id 14424 + loc 7.4744164943695068e-01 9.6417552232742310e-01 1079 + blend 0.0000000000000000e+00 + interp 3.9998706626958230e-01:3.2142889249914380e-01:4.4234632984778277e-01:3.9998306639891962e-01:1.1627838256339567e+00:3.8468929872711033e-01:1.9945627210111430e+00:3.8770582044089635e-01:2.4488750622114437e+00:3.3490102330361471e-01:3.3836934114169375e+00 + CVs 20 + 1.5811305728736458e-01 3.0038631155041318e-01 -5.4062761871987261e-02 + 3.2401541652696897e-01 5.7499559809697920e-01 -1.2043009565730364e-01 + 4.9783258751152587e-01 8.1210971982610225e-01 -2.0512316059020402e-01 + 6.7561748016466538e-01 1.0023785382028831e+00 -3.0632902652589356e-01 + 8.4881994836020169e-01 1.1384738519747530e+00 -4.1483003676225949e-01 + 1.0051214251296179e+00 1.2171858826804169e+00 -5.1461610651849332e-01 + 1.1358400353375557e+00 1.2458185917155362e+00 -5.8966395150259898e-01 + 1.2413117749663560e+00 1.2403376165486573e+00 -6.3241356313540531e-01 + 1.3252451268557923e+00 1.2184412500321857e+00 -6.4030468557732689e-01 + 1.3907189066023762e+00 1.1983660124533753e+00 -6.1277810253493248e-01 + 1.4413899605222855e+00 1.1970992613140292e+00 -5.5441905445187167e-01 + 1.4815406370275948e+00 1.2283764206804835e+00 -4.7510137669879171e-01 + 1.5134065989849481e+00 1.3010315173419846e+00 -3.8948975543089887e-01 + 1.5333434967489945e+00 1.4208170837636711e+00 -3.1547121115251148e-01 + 1.5308208656940518e+00 1.6019134616713888e+00 -2.7396967974110586e-01 + 1.4995476846664377e+00 1.9237405922454380e+00 -3.0690832721733130e-01 + 1.4634879900666120e+00 2.5892963425055511e+00 -5.9394712086621237e-01 + 1.5056346877428433e+00 3.4924183698147400e+00 -1.4981145106304763e+00 + 1.4066983683785181e+00 3.4080050853408848e+00 -1.3456694454858875e+00 + id 14425 + loc 4.2704087682068348e-03 5.5404007434844971e-01 412 + blend 0.0000000000000000e+00 + interp 5.1804338785915194e-01:3.4305906092074140e-01:5.8765567835690247e-01:5.1803820742527340e-01:1.1450429646645679e+00:3.1015226242111466e-01:1.9780788207055617e+00:2.7098538159286539e-01:2.8890073963273464e+00:3.1846648335648076e-01:3.6245274751663876e+00 + CVs 20 + 7.1020109171284729e-01 1.4042865530845569e-01 -1.6664819031429901e-01 + 1.1778250486016453e+00 1.4272886421152786e-01 -3.1979469164809099e-01 + 1.5915281100708423e+00 1.0093377834414780e-01 -4.4380948815077370e-01 + 2.0063003311963685e+00 4.4352818686092088e-02 -5.2949154872810478e-01 + 2.4090765077370029e+00 -3.1237797040476911e-02 -5.7191823050849044e-01 + 2.7877386886116282e+00 -1.2763061199025350e-01 -5.6862928780427990e-01 + 3.1312461974292365e+00 -2.4392682506217600e-01 -5.2078414024035746e-01 + 3.4320789378648859e+00 -3.7741784851182869e-01 -4.3388922662148355e-01 + 3.6880261916817769e+00 -5.2485456774693340e-01 -3.1655104582245758e-01 + 3.9000943207567977e+00 -6.8185089170492219e-01 -1.7693852994068854e-01 + 4.0692500175812869e+00 -8.3824676418522137e-01 -1.5004600774931431e-02 + 4.2039713716021012e+00 -9.8335543312213236e-01 1.8108251431217293e-01 + 4.3321476214471719e+00 -1.1322452663954807e+00 4.1287138621940689e-01 + 4.4789663231930890e+00 -1.3227551208751074e+00 6.4984242124104097e-01 + 4.6439419735687162e+00 -1.5711989421210586e+00 8.6337008163056850e-01 + 4.8194587113184859e+00 -1.8745893947107062e+00 1.0426158203931077e+00 + 4.9966736378455803e+00 -2.2295979204374321e+00 1.1715172998046630e+00 + 5.1580707489544695e+00 -2.6238959757622151e+00 1.2271106411045833e+00 + 5.2623989426312212e+00 -3.0195833163075565e+00 1.1806226429130176e+00 + id 14426 + loc 1.6237013041973114e-01 7.8501528501510620e-01 400 + blend 0.0000000000000000e+00 + interp 4.4699548047208565e-01:2.9809940804123536e-01:6.0089239124219695e-01:2.9175156673920072e-01:1.1169674155115286e+00:3.0840735024864185e-01:1.9610475743960891e+00:3.7398786074837564e-01:2.4058771449576528e+00:3.0452186821032085e-01:2.9970504155440487e+00:4.4699101051728096e-01:3.8365337792414649e+00 + CVs 20 + -1.5943209563524358e-01 3.8622104887110187e-01 -1.2340072441781930e-01 + -3.2134995040787773e-01 7.5468809876575893e-01 -2.7337826057311987e-01 + -4.7410402097917942e-01 1.0929166361590104e+00 -4.6427341942156175e-01 + -6.1597543921270015e-01 1.3956588531055960e+00 -6.9880805037229876e-01 + -7.5059904567371527e-01 1.6602161621624751e+00 -9.7220756966411315e-01 + -8.8350290573912393e-01 1.8849547951705317e+00 -1.2731979998881593e+00 + -1.0209353485871073e+00 2.0722287551825982e+00 -1.5891870666890604e+00 + -1.1674803991037961e+00 2.2263887449650785e+00 -1.9108960367606702e+00 + -1.3245843477679158e+00 2.3526776445938022e+00 -2.2351971548600145e+00 + -1.4909026365596021e+00 2.4560655773992401e+00 -2.5669380754941469e+00 + -1.6646660673754290e+00 2.5395049658193227e+00 -2.9123477987801096e+00 + -1.8461455620553766e+00 2.6048955714596809e+00 -3.2623421481891830e+00 + -2.0365803406119656e+00 2.6580016285675026e+00 -3.5919720523627587e+00 + -2.2314924710074164e+00 2.7097387550553096e+00 -3.8822858720261055e+00 + -2.4170544499177042e+00 2.7724309446864406e+00 -4.1264227140270444e+00 + -2.5757468828208427e+00 2.8495407995194126e+00 -4.3200716680061921e+00 + -2.6945430296765984e+00 2.9292817142083472e+00 -4.4617209419413166e+00 + -2.7827128530284830e+00 2.9837964582490857e+00 -4.5725331672797864e+00 + -3.0326089474121281e+00 2.8747132530608210e+00 -4.7313985171442106e+00 + id 14427 + loc 7.3515820503234863e-01 9.4011440873146057e-02 379 + blend 0.0000000000000000e+00 + interp 5.7775156825031659e-01:2.2290623949265020e-01:6.1584157191718436e-01:5.7774579073463417e-01:1.0906649801452812e+00:5.1837618899773130e-01:1.9843459818487075e+00:5.5537648164708797e-01:2.4136887075998805e+00:1.8456710730425507e-01:3.0725544962624110e+00:3.8835015120329830e-01:3.9916104177406693e+00 + CVs 20 + 5.2187258703781370e-01 3.3850905526327585e-01 -8.4434647039654184e-02 + 9.7860773500004794e-01 5.9581674134837459e-01 -1.6825124555164023e-01 + 1.4366188423838793e+00 7.8831921164997665e-01 -2.8623386735157319e-01 + 1.9193197942029829e+00 9.4294536546162955e-01 -4.4271104734793554e-01 + 2.4129924592678185e+00 1.0831197734662714e+00 -6.1618899858825271e-01 + 2.9103428636692503e+00 1.2155423593703589e+00 -7.8030497461767845e-01 + 3.4130477398923578e+00 1.3283715537586998e+00 -9.1198342204267691e-01 + 3.9182310002365792e+00 1.4066602766438283e+00 -9.9767681721926993e-01 + 4.4107824492950591e+00 1.4426475519473738e+00 -1.0327553464180839e+00 + 4.8681335448277618e+00 1.4367902309047567e+00 -1.0216717220401017e+00 + 5.2714919085492848e+00 1.3977432345850354e+00 -9.7648502252384595e-01 + 5.6172787519668077e+00 1.3393329330630683e+00 -9.0862288580009831e-01 + 5.9179369374463100e+00 1.2648223497061686e+00 -8.2058162548966440e-01 + 6.1761357234726706e+00 1.1464296140370518e+00 -7.1177100365898716e-01 + 6.3612654070166528e+00 9.5116526018010372e-01 -5.9072002836192750e-01 + 6.4442559168090252e+00 6.8981118737131375e-01 -4.5654081097363308e-01 + 6.4309323083933467e+00 3.8512696058624574e-01 -2.7646443771442686e-01 + 6.3787775438123777e+00 4.7990460417698166e-02 -4.5947681808014729e-02 + 6.4003641464117109e+00 -1.8169390251261985e-01 7.9656493369483994e-02 + id 14428 + loc 7.4914765357971191e-01 5.6789082288742065e-01 404 + blend 0.0000000000000000e+00 + interp 4.5635717446571233e-01:4.4731533833207415e-01:1.9820660905287191e-01:3.1916942755066968e-01:8.4996557226483083e-01:4.1785232049281024e-01:1.1597355578188802e+00:2.9306301383409694e-01:1.9595664484874347e+00:4.5635261089396773e-01:2.3776928250955400e+00:2.7729118333962582e-01:3.0057253376090705e+00:4.3860926657387750e-01:3.4581838669390734e+00:4.5132344036891064e-01:3.9821924665694763e+00 + CVs 20 + -7.2884894321533958e-02 3.6371373911204631e-02 -4.2141924383782441e-02 + -1.3335751104466628e-01 9.6002448808296920e-02 -9.2894442510449871e-02 + -1.8206239443183003e-01 1.7396629404256778e-01 -1.4915302298693878e-01 + -2.2904504502845691e-01 2.6611886011538932e-01 -2.1514227670632743e-01 + -2.6723434365170140e-01 3.7483549370856145e-01 -2.8936632532998452e-01 + -2.8739486985049401e-01 5.0051157592296458e-01 -3.6938180005209559e-01 + -2.8054454155729369e-01 6.4118198762501621e-01 -4.5155189798039364e-01 + -2.4105699471467246e-01 7.9377493492448181e-01 -5.2947765447079975e-01 + -1.7040626058133396e-01 9.5809706517716797e-01 -5.9103080953066223e-01 + -7.4308281214660599e-02 1.1376044521600295e+00 -6.1814671472745508e-01 + 4.5067099941849986e-02 1.3258539961727096e+00 -6.0306158766927898e-01 + 1.9197335739524513e-01 1.5048875199885792e+00 -5.6269728423386256e-01 + 3.7327256021506816e-01 1.6571919217307791e+00 -5.3414676026314245e-01 + 5.7912693136447924e-01 1.7807939708537379e+00 -5.4596763827495831e-01 + 7.8956098490217952e-01 1.8877022187136216e+00 -5.9994952611890529e-01 + 9.9613264858271267e-01 1.9869673500513971e+00 -6.8428582455636300e-01 + 1.2082816690672418e+00 2.0719405332138043e+00 -7.8860837155278551e-01 + 1.4445845021115069e+00 2.1171055028808601e+00 -9.1495785455219347e-01 + 1.6140905874294056e+00 2.2592114268018424e+00 -9.9747919411817465e-01 + id 14429 + loc 1.4642451703548431e-01 4.6087542176246643e-01 393 + blend 0.0000000000000000e+00 + interp 4.4506523368609618e-01:3.0195643079774814e-01:2.8548188493147775e-02:2.9317061190350846e-01:1.0071504844054808e+00:3.1015673652801184e-01:1.9945686012489654e+00:3.1002953315862047e-01:3.0113955385828386e+00:4.4506078303375934e-01:3.6575271933417377e+00 + CVs 20 + -1.6047689645938762e-01 3.6845489887680200e-01 2.3896802336733103e-01 + -3.0798148359344546e-01 7.2578398534449029e-01 4.7399436023312691e-01 + -4.6757962105438755e-01 1.0650661709228939e+00 6.9414023472839781e-01 + -6.5142235875613075e-01 1.3759662316004149e+00 8.9904115937811158e-01 + -8.6050715635132813e-01 1.6495009390410431e+00 1.0925286049067087e+00 + -1.0902542037172887e+00 1.8806955969282051e+00 1.2751533809068765e+00 + -1.3328429669308746e+00 2.0699562564483203e+00 1.4462808715872129e+00 + -1.5841062089088340e+00 2.2215173822150360e+00 1.6093952007303955e+00 + -1.8489723958302211e+00 2.3368419622278345e+00 1.7736128197503529e+00 + -2.1374389732183325e+00 2.4094600395400083e+00 1.9489127781627664e+00 + -2.4530836777125811e+00 2.4290608500639173e+00 2.1419735502790367e+00 + -2.7939203382381468e+00 2.3939750165574001e+00 2.3541489837252092e+00 + -3.1657814251404224e+00 2.3202824983621335e+00 2.5861085978682619e+00 + -3.5911111928097101e+00 2.2314928768408913e+00 2.8472359459847771e+00 + -4.0854145827643595e+00 2.1236392237430639e+00 3.1579514625409706e+00 + -4.6064051014273826e+00 1.9633287362590339e+00 3.5348933265464582e+00 + -5.0667929163230454e+00 1.7539124414589093e+00 3.9714664321505229e+00 + -5.3899593023158179e+00 1.5755579417079453e+00 4.4574245674515618e+00 + -5.4248783549476194e+00 1.6471199752784345e+00 4.9265108009063727e+00 + id 14430 + loc 8.5098296403884888e-02 2.5520077347755432e-01 381 + blend 0.0000000000000000e+00 + interp 4.9433140939567416e-01:2.4866376391549563e-01:6.8786657458201572e-01:4.9432646608158021e-01:1.1390980794600920e+00:3.9531923326892804e-01:1.9331237779429675e+00:2.3143107930813078e-01:2.2814028841475684e+00:2.8812485936854854e-01:3.4233944552908087e+00 + CVs 20 + -6.4401912840452058e-01 1.7299352650095629e-01 -8.3551108798197848e-01 + -1.1501970409642746e+00 1.8998946639446329e-01 -1.3991781991697514e+00 + -1.6261088797826617e+00 1.4400412860830214e-01 -1.8992665577715273e+00 + -2.1064105943823663e+00 7.3738165082051110e-02 -2.4219498973908262e+00 + -2.5659444470149313e+00 -1.9660815788542063e-02 -2.9567647082936834e+00 + -2.9804841166021023e+00 -1.3427138633403513e-01 -3.4872239558302969e+00 + -3.3316500480742133e+00 -2.6601361761924291e-01 -3.9982399993339435e+00 + -3.6094631009254075e+00 -4.0508948199249417e-01 -4.4835911328898073e+00 + -3.8177905061704029e+00 -5.3987792109317279e-01 -4.9484686573252796e+00 + -3.9764141991913409e+00 -6.6932087372188032e-01 -5.4077752929818956e+00 + -4.1107570108348979e+00 -8.0648380688848298e-01 -5.8846856876701565e+00 + -4.2401916469234449e+00 -9.7968483926017336e-01 -6.4096256894072052e+00 + -4.3738107680914915e+00 -1.2502069041740989e+00 -6.9773787126235884e+00 + -4.4890955793120622e+00 -1.6682599452904707e+00 -7.5182723833721994e+00 + -4.5530639278255656e+00 -2.1924522930037655e+00 -7.9385880165963103e+00 + -4.5605263511800169e+00 -2.7312116453132171e+00 -8.2088247976835778e+00 + -4.5280123335587588e+00 -3.2708835564348226e+00 -8.3652647137783038e+00 + -4.5019096355353980e+00 -3.8276612944392054e+00 -8.4554485652307427e+00 + -4.6103608885471203e+00 -4.2068697346227726e+00 -8.4567311702816532e+00 + id 14431 + loc 5.5932301282882690e-01 5.3169971704483032e-01 1069 + blend 0.0000000000000000e+00 + interp 4.8020895192963864e-01:3.0123413613798072e-01:7.4322194097673266e-02:3.1587260221504260e-01:9.1817328640113360e-01:2.6505397194628505e-01:1.5486177628830526e+00:3.0841311135511601e-01:2.1074128936459822e+00:4.8020414984011939e-01:2.7809804228280397e+00:2.6609968748221541e-01:3.3621684500864348e+00 + CVs 20 + 1.9828837275344485e-01 2.7423119841885690e-01 -2.6243313287609982e-01 + 3.9760676382927956e-01 5.4189508359730088e-01 -5.2000024508399867e-01 + 6.2239288818494720e-01 7.6886921531351371e-01 -7.2692628250606761e-01 + 8.8819948542687110e-01 8.9283537985513484e-01 -8.3826968658971590e-01 + 1.1823954927510396e+00 9.7139748416905247e-01 -9.0750949336999365e-01 + 1.5302127863826824e+00 1.1418385901034362e+00 -9.8311710399333108e-01 + 1.8870503880722302e+00 1.4797303315937715e+00 -1.0570553446308857e+00 + 2.1180417279361956e+00 1.9892958568200496e+00 -1.1570178399280069e+00 + 2.0339233901875735e+00 2.5274115214140389e+00 -1.4443875190483464e+00 + 1.7009485858379256e+00 2.7220542349770458e+00 -1.9025424279812109e+00 + 1.4422265024650960e+00 2.6375011713681022e+00 -2.3077204080930653e+00 + 1.4582861418982533e+00 2.4987241018308217e+00 -2.6350439272386019e+00 + 6.5163693131922829e-02 2.0167238971041344e+00 -2.2825823398529064e+00 + 1.8726061287481288e-01 1.4663398217301142e+00 -2.2527456858361754e+00 + 7.0628083466964420e-01 1.4709362180982977e+00 -2.8731197808756925e+00 + 7.9779864222949914e-01 9.8867826566647699e-01 -2.9157908446281429e+00 + 9.6711924020169415e-01 4.7398167486896492e-01 -2.7610756149824591e+00 + 1.1604912386619686e+00 7.0916248190813380e-02 -2.4674339392022402e+00 + 1.1759301580817338e+00 -1.9307662289475302e-01 -2.4142342910120891e+00 + id 14432 + loc 2.1479234099388123e-01 3.2588431239128113e-01 399 + blend 0.0000000000000000e+00 + interp 4.8130331538433585e-01:3.0697020010092751e-01:2.3661837575531863e-02:3.1319177960547923e-01:9.7617310725398010e-01:3.4814049674281589e-01:1.4839168662050803e+00:4.8129850235118204e-01:1.9807831194148515e+00:4.2746564069881099e-01:2.2372721463854761e+00:3.1654316441941682e-01:3.0294028966546951e+00 + CVs 20 + -1.5197662158563341e-01 2.9989050078493168e-01 1.5631181062588076e-01 + -3.4361439231372298e-01 6.0177374097685143e-01 3.0528642766473763e-01 + -5.7680351216051196e-01 8.9219887914741081e-01 4.2907617464036690e-01 + -8.4342041951052016e-01 1.1659185762444442e+00 5.2870304888412356e-01 + -1.1324914338746774e+00 1.4236886826998678e+00 6.1882208419818441e-01 + -1.4360590704153846e+00 1.6614952999881996e+00 7.1523197996859267e-01 + -1.7505559252128702e+00 1.8669293585394551e+00 8.3017834277005598e-01 + -2.0726772402563305e+00 2.0201957333481491e+00 9.6917519098333926e-01 + -2.3946145126213065e+00 2.0976332532306450e+00 1.1287032373966177e+00 + -2.7018142183505538e+00 2.0811162710463851e+00 1.2928593687440877e+00 + -2.9773239326513679e+00 1.9738060815751373e+00 1.4372031763800597e+00 + -3.2199706124614518e+00 1.8064560538664756e+00 1.5471193392047271e+00 + -3.4442407515273659e+00 1.6123619049193927e+00 1.6246718144611441e+00 + -3.6570428118824561e+00 1.4259959255357968e+00 1.6692017097783769e+00 + -3.8427589244966884e+00 1.2917591100243131e+00 1.6653747131456575e+00 + -3.9336865123269229e+00 1.2529275930039157e+00 1.5828081130250546e+00 + -3.7834809469311916e+00 1.2952885990592466e+00 1.4322582137396895e+00 + -3.4846180173669055e+00 1.2882895921779631e+00 1.3580365190367321e+00 + -3.6942846469508370e+00 1.3514399533692829e+00 1.2559075258752035e+00 + id 14433 + loc 5.6321620941162109e-01 6.5524572134017944e-01 396 + blend 0.0000000000000000e+00 + interp 4.5805261396795421e-01:2.5013691055998077e-01:1.8210321673255314e-02:3.3829898309992196e-01:9.4853888010379139e-01:2.6985526664968928e-01:1.6620898351391871e+00:4.5804803344181455e-01:2.2507016673973146e+00:2.8624404796468911e-01:2.9775330862388740e+00:4.3186429198256077e-01:3.3431095446951344e+00 + CVs 20 + 8.1211632199941108e-01 2.4594076150835589e-01 -2.7083360965359110e-01 + 1.3561329464586425e+00 3.4083671828273787e-01 -4.5274507319087753e-01 + 1.8228101412618807e+00 3.8032761390656145e-01 -5.9559810563681004e-01 + 2.3055028470015779e+00 4.1858512909252876e-01 -7.1657316568323659e-01 + 2.8102224737692580e+00 4.5675597363416476e-01 -8.2029259784761643e-01 + 3.3448773054090770e+00 4.9205834734135317e-01 -9.1873740987754737e-01 + 3.9142881603838942e+00 5.1861902848323782e-01 -1.0318093720297610e+00 + 4.5175481008267591e+00 5.2479404349831638e-01 -1.1820215191123027e+00 + 5.1513748544560913e+00 4.8760054919108908e-01 -1.3864170464342280e+00 + 5.8069796442409798e+00 3.7393752829822802e-01 -1.6555373219050507e+00 + 6.4534725645935875e+00 1.5500291017039358e-01 -1.9963869751919139e+00 + 7.0394756861251047e+00 -1.7433147573593222e-01 -2.4071844005400735e+00 + 7.5277387507915501e+00 -5.9936401886052493e-01 -2.8721055726038385e+00 + 7.9017780452637583e+00 -1.1083158629264820e+00 -3.3564509891253884e+00 + 8.1526926499542789e+00 -1.6829080712343618e+00 -3.8189731069560491e+00 + 8.2789391003280866e+00 -2.2961813446213961e+00 -4.2263269016637466e+00 + 8.2874134715982155e+00 -2.9196142104102973e+00 -4.5516834772937456e+00 + 8.1943456906093299e+00 -3.5141159434357019e+00 -4.7741108268621497e+00 + 8.0496259874590645e+00 -3.9289601078384702e+00 -4.8710831358348408e+00 + id 14434 + loc 1.4006206393241882e-01 3.5325177013874054e-02 378 + blend 0.0000000000000000e+00 + interp 4.6335504624753970e-01:2.9228561720237228e-01:3.5167256027385907e-02:2.3318902910731826e-01:1.0158428407412348e+00:3.6247682294550965e-01:2.1207774334215506e+00:4.6335041269707727e-01:2.8155003199833084e+00:3.1835618001408889e-01:3.1070782239536991e+00 + CVs 20 + 3.3119546817421980e-01 2.4838026401254382e-01 -3.2452143333771555e-01 + 5.8365677447672237e-01 4.2952765837809986e-01 -6.4451261588771191e-01 + 8.0331317236842614e-01 5.7090316795731155e-01 -9.6044609729344788e-01 + 1.0097904717327364e+00 6.9379827982719222e-01 -1.2736217263695249e+00 + 1.2025594835905715e+00 8.0814011293395238e-01 -1.5753246379033758e+00 + 1.3795145518705645e+00 9.2080777571442285e-01 -1.8582264052136837e+00 + 1.5451378124357356e+00 1.0393061531280121e+00 -2.1267746202957665e+00 + 1.7127267906541563e+00 1.1700099735030669e+00 -2.3898260415759465e+00 + 1.8993576897102356e+00 1.3136071723772700e+00 -2.6472123401410559e+00 + 2.1175419431093014e+00 1.4657210010519888e+00 -2.8911022599880525e+00 + 2.3746588350005049e+00 1.6199387245930512e+00 -3.1227982979809630e+00 + 2.6805740604933437e+00 1.7578562928136918e+00 -3.3565978663040328e+00 + 3.0346128408410005e+00 1.8231566800134260e+00 -3.5952901312738916e+00 + 3.3845830723234123e+00 1.7377451123148608e+00 -3.8086210059989094e+00 + 3.6623937986700597e+00 1.4941272849869516e+00 -3.9622247205481180e+00 + 3.8655628397705417e+00 1.1685803401880133e+00 -4.0410772733796918e+00 + 4.0317701206715295e+00 8.4875813534686939e-01 -4.0337557833629836e+00 + 4.1988631052183667e+00 5.6466469525642982e-01 -3.9877407469442323e+00 + 4.3692733570848397e+00 3.0779877629646046e-01 -4.1756205520695771e+00 + id 14435 + loc 5.9078648686408997e-02 8.1493437290191650e-01 402 + blend 0.0000000000000000e+00 + interp 4.2378974909230860e-01:4.2378551119481772e-01:2.8512268478598013e-01:4.2349912309212251e-01:9.0696754713720829e-01:2.4085073032040030e-01:1.2166537082644111e+00:2.7514686991232729e-01:2.5227637006442647e+00:2.7271283019520787e-01:3.1130970124119517e+00:2.7138362869908628e-01:3.9768131187839257e+00 + CVs 20 + -1.0441636890093127e-01 3.0492149121630374e-01 -2.0899539677282686e-01 + -2.1619805262939634e-01 6.1691976369846213e-01 -4.0046370189936686e-01 + -3.2799057941406562e-01 9.4573825361820252e-01 -6.2796884426653976e-01 + -4.3383109589388807e-01 1.2721436183563730e+00 -9.1371911766731650e-01 + -5.2863238788551636e-01 1.5577225096804441e+00 -1.2481281919360234e+00 + -6.1013015901148659e-01 1.7681331873924557e+00 -1.6003630672338276e+00 + -6.7999480912618770e-01 1.8964665432044809e+00 -1.9430771879586577e+00 + -7.3858647796317312e-01 1.9543899175981949e+00 -2.2667268814856580e+00 + -7.8931130393305360e-01 1.9545751072209854e+00 -2.5775060421267622e+00 + -8.4831695695876863e-01 1.9050030210694631e+00 -2.8902381672434023e+00 + -9.3873851978517764e-01 1.8154851144289212e+00 -3.2114054801048835e+00 + -1.0834617653176313e+00 1.6974330454677178e+00 -3.5335584337027419e+00 + -1.2814707749905181e+00 1.5547651780965155e+00 -3.8522035001653641e+00 + -1.5106308112690929e+00 1.3792148898581096e+00 -4.1794949521942968e+00 + -1.7760743204162670e+00 1.1415852266620607e+00 -4.4971977586717298e+00 + -2.0994017068935245e+00 7.9859726301999667e-01 -4.7280039277030124e+00 + -2.4633815563181889e+00 3.6838209427764956e-01 -4.8813710906618262e+00 + -2.7882307676615485e+00 -4.2217605776708828e-02 -5.1242175453310130e+00 + -2.9624769886160451e+00 -3.2913812355113148e-01 -5.6436756174975278e+00 + id 14436 + loc 9.3565475940704346e-01 4.9241682887077332e-01 412 + blend 0.0000000000000000e+00 + interp 3.3892698312325931e-01:3.3892359385342807e-01:5.0732451329687422e-01:2.3925695178200590e-01:1.0022389116256656e+00:3.0044538874999116e-01:1.8077747212098152e+00:3.1599843776230413e-01:2.4442798500469181e+00:3.1462997922902158e-01:3.6923077372152471e+00 + CVs 20 + -7.8707966924211015e-01 2.2021186962009551e-01 1.8014823791673079e-01 + -1.3063546060281703e+00 3.1958976970695729e-01 3.4128302037006175e-01 + -1.7787615718720824e+00 3.9356656196847767e-01 4.9441911510902337e-01 + -2.2766900017950098e+00 4.7687283175577233e-01 6.3359591415858685e-01 + -2.7870841695648632e+00 5.5287366943916028e-01 7.5600956842929601e-01 + -3.2963217490500889e+00 6.0025777726288665e-01 8.6912860258637337e-01 + -3.7942615854027606e+00 5.9916152748926088e-01 9.9011384630308097e-01 + -4.2732428536409071e+00 5.3366633902113536e-01 1.1440174008487876e+00 + -4.7224621495767360e+00 3.9866756188541208e-01 1.3460069888369843e+00 + -5.1340522364714127e+00 2.0206953064581512e-01 1.5887986416168789e+00 + -5.4987958125441123e+00 -6.4216364581546781e-02 1.8419092311312792e+00 + -5.7944708295520115e+00 -4.4185595156485769e-01 2.0407440434831949e+00 + -6.0083849328070595e+00 -9.6116902812751714e-01 2.1436534590685565e+00 + -6.1571856090337853e+00 -1.6179167638873335e+00 2.2041684100703813e+00 + -6.2704302035824950e+00 -2.3688506189568623e+00 2.3316146363464365e+00 + -6.3846229645976749e+00 -3.1157193822288662e+00 2.6248963980416993e+00 + -6.5364058547674411e+00 -3.7739820431373281e+00 3.0991365872237018e+00 + -6.7597310005572817e+00 -4.3565211025695660e+00 3.6822957638769109e+00 + -7.0901438212074916e+00 -4.9250710370921240e+00 4.2958604607320447e+00 + id 14437 + loc 8.2233357429504395e-01 6.4945387840270996e-01 401 + blend 0.0000000000000000e+00 + interp 3.7947908271675329e-01:3.7947528792592616e-01:3.4486052828001290e-01:3.5168623006420313e-01:1.0066199263391662e+00:2.5962484116512735e-01:1.5909958713014518e+00:3.3089945164689255e-01:2.0398227812769880e+00:2.8432918059498685e-01:2.9137479772272474e+00:3.0180056774942837e-01:3.7791379681271766e+00 + CVs 20 + -1.3864819705061388e-01 3.1047947522360192e-01 -2.3686645640454657e-01 + -2.5094514052044864e-01 6.2054187763012103e-01 -4.5644544780916552e-01 + -3.4987615073161138e-01 9.3121455259785713e-01 -6.8961532303779705e-01 + -4.4224357699305616e-01 1.2364260094869355e+00 -9.5624471592859495e-01 + -5.2837065971071628e-01 1.5206065648043028e+00 -1.2671596194224199e+00 + -6.1583507309337648e-01 1.7671580200366559e+00 -1.6212800613663827e+00 + -7.2816868721813532e-01 1.9700410724784774e+00 -2.0063295175175457e+00 + -8.9449390519483818e-01 2.1263743379327402e+00 -2.4016865490073478e+00 + -1.1385003139248746e+00 2.2284079812281128e+00 -2.7854357766554330e+00 + -1.4741439824769427e+00 2.2649303257605080e+00 -3.1346398090280649e+00 + -1.9001223194620618e+00 2.2290979981890207e+00 -3.4271858912729285e+00 + -2.4060592177132030e+00 2.1147985219783618e+00 -3.6512845796255817e+00 + -2.9677240075131888e+00 1.9196782002918429e+00 -3.8094086427555123e+00 + -3.5485450849841480e+00 1.6620700978212253e+00 -3.9050502417621278e+00 + -4.1342915952538526e+00 1.3645235464257437e+00 -3.9390560804270915e+00 + -4.7620066078401404e+00 1.0180807535227163e+00 -3.9546904756776744e+00 + -5.4573592309955785e+00 6.1723734086553361e-01 -4.0726124715066110e+00 + -6.1369675490777276e+00 2.4258255502910897e-01 -4.3586746490383454e+00 + -6.6394618612481917e+00 3.4702536290251662e-02 -4.5595430147876446e+00 + id 14438 + loc 3.5628092288970947e-01 1.0553989559412003e-01 400 + blend 0.0000000000000000e+00 + interp 4.2361688099724726e-01:2.7889230593869757e-01:9.6650446008344382e-01:4.2361264482843730e-01:1.2289153610492374e+00:2.7328687445408356e-01:2.1646469444391001e+00:4.1324182749554489e-01:2.9121703006071558e+00:2.9669027368338119e-01:3.2536971720870023e+00:3.8196885097677669e-01:3.9807306051513400e+00 + CVs 20 + -1.2875326837408652e-01 4.1509719193260691e-01 2.1602222795199133e-01 + -2.6034551604530426e-01 8.2212696296179122e-01 4.5017951164839387e-01 + -4.1670480798387716e-01 1.2185348452560296e+00 6.9520432277333544e-01 + -6.1350587815999047e-01 1.5952563587416546e+00 9.5602981354330419e-01 + -8.6199197949426631e-01 1.9355584325629658e+00 1.2437960426054078e+00 + -1.1691389710469400e+00 2.2159229692421993e+00 1.5633289494739626e+00 + -1.5356002374823059e+00 2.4033500759061832e+00 1.9214922200235831e+00 + -1.9486536589307171e+00 2.4632298537590231e+00 2.3085744131096386e+00 + -2.3777380388358704e+00 2.3801076324472668e+00 2.6949644726078454e+00 + -2.7797014152279642e+00 2.1713811302262580e+00 3.0549970383486329e+00 + -3.1339687644196186e+00 1.8800624338030847e+00 3.3693281830253232e+00 + -3.4523863373548007e+00 1.5486915354366948e+00 3.6216544347935709e+00 + -3.7570784677543871e+00 1.1989097019024284e+00 3.8018780606555449e+00 + -4.0547635106092885e+00 8.2670328961612083e-01 3.9119421703157951e+00 + -4.3422302213764015e+00 4.4925030553926115e-01 3.9568385147793346e+00 + -4.6410560599153134e+00 1.8062194760568584e-01 3.9425594279527516e+00 + -4.9637040678987638e+00 2.3800868895826266e-01 3.8672010930023708e+00 + -5.1555047723242504e+00 6.4077424971527286e-01 3.6945222602052779e+00 + -5.5350814492319023e+00 5.8438281781799528e-01 3.6348483724372249e+00 + id 14439 + loc 1.6862647607922554e-02 4.6664789319038391e-01 404 + blend 0.0000000000000000e+00 + interp 5.3430658948493637e-01:3.2349778666781892e-01:8.1369601419298387e-01:2.5465482129783368e-01:1.0619049696431919e+00:2.9562137458570359e-01:1.9972271783147566e+00:5.3430124641904153e-01:2.7720336763451425e+00:3.8390022979633054e-01:3.2726175682023051e+00:4.5874088545004499e-01:3.9327950298885002e+00 + CVs 20 + -4.8649727036308064e-02 1.4682618754340362e-01 -1.2123232854366572e-01 + -1.0310761725828058e-01 2.9204418572126678e-01 -2.3666588544121991e-01 + -1.6095309267448249e-01 4.3462863396393075e-01 -3.5304217787238140e-01 + -2.3323914839851229e-01 5.8380858705298788e-01 -4.6725931153695888e-01 + -3.2698647688152660e-01 7.4136003851584253e-01 -5.6981129884066950e-01 + -4.4643838882347342e-01 9.0412390933683262e-01 -6.5176031842046922e-01 + -5.9374541269791581e-01 1.0662367037655516e+00 -7.0480757148800344e-01 + -7.6887340271387838e-01 1.2210446223253464e+00 -7.1969743659922036e-01 + -9.6731788656338336e-01 1.3604807856728254e+00 -6.8723450034274258e-01 + -1.1769070014053988e+00 1.4753942737302836e+00 -6.0377945997755900e-01 + -1.3808751377418429e+00 1.5593353556279590e+00 -4.7445308743996528e-01 + -1.5660341706387313e+00 1.6102849474128544e+00 -3.0728880950847393e-01 + -1.7240575333089416e+00 1.6282176977927205e+00 -1.0803384000101635e-01 + -1.8467226524207478e+00 1.6144265634752504e+00 1.1811508568625617e-01 + -1.9228296027236729e+00 1.5733652269426723e+00 3.6168081517766493e-01 + -1.9428417241195142e+00 1.5119986457386263e+00 6.1116907222172190e-01 + -1.9019857764276329e+00 1.4321211199279018e+00 8.5647001109575638e-01 + -1.7984545375375562e+00 1.3297276596779999e+00 1.0849402038211979e+00 + -1.7912181781063459e+00 1.2594556923024740e+00 1.1639190187014905e+00 + id 14440 + loc 8.8670410215854645e-02 6.3103580474853516e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4584950220937070e-01:2.9488520026238874e-01:2.2123037452396588e-01:2.9552734506367290e-01:1.0474435815867869e+00:4.4584504371434863e-01:1.9819185063815912e+00:2.9971349695768745e-01:2.5193668354722227e+00:2.5953198560073315e-01:3.0700158018424015e+00:4.0303550146392553e-01:3.6956018685349683e+00 + CVs 20 + 1.2314849643395122e-01 2.4020975114810339e-01 -1.4860828481985436e-01 + 2.6264938080260997e-01 4.7778217358922781e-01 -3.3008334497270247e-01 + 4.1291516661503996e-01 7.1389426620866314e-01 -5.2536133971581978e-01 + 5.6703145805803179e-01 9.4756518864874006e-01 -7.3232679535179646e-01 + 7.1308998565135129e-01 1.1760772088070131e+00 -9.6033199557391824e-01 + 8.2916438221698407e-01 1.3876741439341105e+00 -1.2136879473139850e+00 + 8.9355817847805730e-01 1.5542304705755936e+00 -1.4851361371507044e+00 + 9.0310065057202549e-01 1.6334385496194928e+00 -1.7494839923383319e+00 + 8.7828592126374172e-01 1.5931304524394991e+00 -1.9610224918611785e+00 + 8.4923701404044605e-01 1.4561179987067432e+00 -2.0890558303514148e+00 + 8.2818126108007828e-01 1.2743781539958892e+00 -2.1775146326595549e+00 + 8.1181441893914708e-01 1.0549273772420269e+00 -2.2912961331589443e+00 + 8.1194537018951007e-01 7.9138694069598825e-01 -2.4518323649606653e+00 + 8.5878546639365783e-01 5.0261671613225278e-01 -2.6548332256703508e+00 + 9.9298258828234220e-01 2.3285718468255062e-01 -2.8808348359221929e+00 + 1.2640032369258196e+00 6.5773217272105111e-02 -3.0661452491121959e+00 + 1.6547944524915332e+00 1.3661439298703920e-01 -3.0813164707305192e+00 + 1.9774578177247102e+00 3.9557410966725648e-01 -2.9481062771502407e+00 + 2.3618838766590153e+00 3.4825120505733809e-01 -3.1046758114732742e+00 + id 14441 + loc 8.4351003170013428e-01 3.1772387027740479e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7582192445262916e-01:4.4505708598452204e-01:1.0649015382846994e-01:4.7581716623338466e-01:9.2467549609890165e-01:3.6561973639858053e-01:1.4241643412870593e+00:4.3813093837645789e-01:2.0209964922186434e+00:3.2198034908732120e-01:2.4318623255456879e+00:2.5621723440129485e-01:3.0770090313278491e+00 + CVs 20 + -1.0814826564628784e-01 2.7865267405510985e-01 1.5931762543473491e-02 + -1.9905146713817909e-01 5.2770512629867561e-01 6.4638002940400008e-02 + -2.7620506570574388e-01 7.6039424722051518e-01 1.2547084195456118e-01 + -3.4003077532466519e-01 9.7848958343102765e-01 1.8106057006436121e-01 + -3.9175469070145286e-01 1.1859803824554145e+00 2.3382645033894639e-01 + -4.3768360924160127e-01 1.3903510638603129e+00 2.9082789760713629e-01 + -4.9408987848782826e-01 1.5965185804631390e+00 3.7027799801628625e-01 + -5.8380339535692682e-01 1.7947567988210191e+00 4.9482898106789114e-01 + -7.2511082594735043e-01 1.9596640037587325e+00 6.7282022984874457e-01 + -9.2392035245985471e-01 2.0619682051509369e+00 8.9303447452727092e-01 + -1.1685364856196505e+00 2.0840770526699095e+00 1.1372177500843690e+00 + -1.4349935401372729e+00 2.0232660546110219e+00 1.3928452694709073e+00 + -1.6952550308986232e+00 1.8822915029307083e+00 1.6514091096636174e+00 + -1.9157504595430745e+00 1.6667428609161716e+00 1.9051512946305826e+00 + -2.0499385727318256e+00 1.3950735425108829e+00 2.1474418034731029e+00 + -2.0496496495778658e+00 1.1193036103768033e+00 2.3663233880022871e+00 + -1.9224989948274251e+00 9.2120907482589631e-01 2.5555920602563842e+00 + -1.7369531701352445e+00 8.5189500172043708e-01 2.7279462831133223e+00 + -1.4389078295734796e+00 7.4617062471959028e-01 2.9598048103936740e+00 + id 14442 + loc 2.1157118678092957e-01 9.4411790370941162e-01 399 + blend 0.0000000000000000e+00 + interp 4.1529177795005534e-01:3.4792706234231424e-01:3.7269310744544071e-01:3.2201447154949220e-01:1.1330112078602024e+00:4.1528762503227584e-01:1.6933725820878418e+00:2.8625120335407922e-01:2.1502671958958830e+00:4.0989486710044654e-01:2.9933288375579306e+00:3.1125288125740319e-01:3.3246083679531031e+00 + CVs 20 + -1.0410915477386615e-01 3.3307670628275965e-01 -3.1224296175022997e-01 + -2.4345719971930482e-01 6.5545830154981133e-01 -6.2326697079331350e-01 + -3.9213653645149826e-01 9.5879647620841590e-01 -9.5442869438676647e-01 + -5.3604249801961712e-01 1.2371495081269623e+00 -1.3108811746885107e+00 + -6.7311293841046305e-01 1.4901143778367014e+00 -1.6852910353762778e+00 + -8.0939852561981152e-01 1.7210847465317483e+00 -2.0650658658616337e+00 + -9.5694213297509689e-01 1.9326623786281494e+00 -2.4337869933760805e+00 + -1.1280347326807423e+00 2.1236830481360869e+00 -2.7795703905947762e+00 + -1.3484870844005843e+00 2.2819358491098694e+00 -3.1045814130415499e+00 + -1.6421815269765481e+00 2.3658728897556260e+00 -3.4014539820477911e+00 + -1.9778863972528611e+00 2.3496556969079188e+00 -3.6430399274601135e+00 + -2.2895663123423891e+00 2.2601366476465183e+00 -3.8061368974156276e+00 + -2.5181092323697207e+00 2.1376125684170786e+00 -3.8853763284479492e+00 + -2.6137431562948210e+00 1.9836333608057952e+00 -3.8910340039909297e+00 + -2.5369887860180236e+00 1.7427159813137258e+00 -3.8329001735210708e+00 + -2.3201276533008022e+00 1.2816837104923131e+00 -3.7270828532854448e+00 + -2.1846598469960523e+00 4.2432282724969783e-01 -3.6598480576681145e+00 + -2.4620145941588238e+00 -3.9511515711015388e-01 -3.7821997276468649e+00 + -2.5979293495224218e+00 -2.1935885689770987e-01 -3.8607222133340868e+00 + id 14443 + loc 7.9403293132781982e-01 3.2467713952064514e-01 393 + blend 0.0000000000000000e+00 + interp 4.8947115442801287e-01:3.5323217228921377e-01:2.6537956005602004e-01:4.5332284591563476e-01:7.9269905675020791e-01:3.0139967890316666e-01:1.2520032795373177e+00:4.8946625971646862e-01:2.0737444902988713e+00:3.0740180967762332e-01:2.9993380911318459e+00:3.0741181287539115e-01:3.7869393555093689e+00 + CVs 20 + 3.0324517908410326e-01 3.4568338371332913e-01 1.7463754835015619e-01 + 6.3003573796271417e-01 7.0368034388275069e-01 3.2423056552763563e-01 + 9.6688468980321152e-01 1.0949221002721516e+00 4.7515830890123156e-01 + 1.3065905635940120e+00 1.5113256036742131e+00 6.6639555408236051e-01 + 1.6405031862632744e+00 1.9216555749605750e+00 9.4421207102937099e-01 + 1.9504319601913807e+00 2.2982293491922792e+00 1.3379333083442546e+00 + 2.2152911099365258e+00 2.6230549677788479e+00 1.8463254998872265e+00 + 2.4274097696497363e+00 2.8769267720949170e+00 2.4454815547253208e+00 + 2.5976392428844726e+00 3.0371825765289238e+00 3.1082366043890302e+00 + 2.7448301716655252e+00 3.0761126061119848e+00 3.8097301247812485e+00 + 2.8868151870571577e+00 2.9627746411350500e+00 4.5190208833980945e+00 + 3.0327794937707777e+00 2.6710164444017321e+00 5.1922695943385566e+00 + 3.1836269853530981e+00 2.1927012614006500e+00 5.7668882845734588e+00 + 3.3445234147190739e+00 1.5494051913359277e+00 6.1644261935857836e+00 + 3.5319714116463570e+00 8.0391734822489314e-01 6.3121453155619305e+00 + 3.7872473577775199e+00 6.7738380629485562e-02 6.2009198952579130e+00 + 4.1683360966966196e+00 -5.5674953950895567e-01 5.8946238936522146e+00 + 4.6451035428535681e+00 -1.0395245326080953e+00 5.5057099256135835e+00 + 4.9750515087971738e+00 -1.5260804193058879e+00 5.4226659812430826e+00 + id 14444 + loc 4.8242869973182678e-01 8.1790059804916382e-01 378 + blend 0.0000000000000000e+00 + interp 4.2825888734363932e-01:3.3634481570620278e-01:4.5645422642712763e-03:2.3651577673954796e-01:8.9686094998449184e-01:4.2825460475476590e-01:1.4670295214297291e+00:2.7922186303266666e-01:2.0880593342054761e+00:3.2409978329806977e-01:2.8283694141199986e+00:2.3943995525891729e-01:3.2933875106369408e+00 + CVs 20 + 6.2239581250222553e-01 3.4210723631466239e-01 1.1410121434922627e-01 + 1.1577919972478714e+00 5.9370205063813242e-01 1.7533906602380694e-01 + 1.6769665213009357e+00 7.9753836057579286e-01 2.2650168267151827e-01 + 2.2037645153581353e+00 9.8856992377938968e-01 3.0515905121996989e-01 + 2.7154120931071879e+00 1.1750242827656945e+00 4.3513832721576973e-01 + 3.1903536597398525e+00 1.3517225195609166e+00 6.2342230298219847e-01 + 3.6215589659363951e+00 1.5132619939803349e+00 8.6223225392299041e-01 + 4.0133721250406911e+00 1.6608377838002863e+00 1.1371029025646433e+00 + 4.3803451761046972e+00 1.7969478863106592e+00 1.4347520995561762e+00 + 4.7473860214171903e+00 1.9168426251829205e+00 1.7513107127441692e+00 + 5.1419846227431387e+00 2.0017349280147361e+00 2.0909861869221729e+00 + 5.5835396441398695e+00 2.0167793529864375e+00 2.4561498188376967e+00 + 6.0627503671998708e+00 1.9203969761572921e+00 2.8303577039170884e+00 + 6.5202165266391683e+00 1.7109425252228814e+00 3.1586950853450073e+00 + 6.8881901334628974e+00 1.4555040902057979e+00 3.3847420528135772e+00 + 7.1416043920465304e+00 1.2162530266564029e+00 3.5147899767879895e+00 + 7.2852255529372831e+00 1.0070127084581881e+00 3.6071955078580986e+00 + 7.3753028705458865e+00 8.1063982422629710e-01 3.7031611781128393e+00 + 7.6351358005565135e+00 5.9068459381968985e-01 3.7626245566916694e+00 + id 14445 + loc 5.2800234407186508e-02 4.2098724842071533e-01 402 + blend 0.0000000000000000e+00 + interp 3.5002423551353490e-01:2.9501819089349757e-01:8.2272362702889601e-01:3.5002073527117977e-01:1.4037871281133441e+00:2.3805397993583094e-01:1.9973667189033135e+00:3.2647058460806017e-01:2.9278195282947959e+00:2.7834121792946814e-01:3.6287188076061829e+00 + CVs 20 + -1.1706513937904295e-01 3.8896303710436031e-01 1.0710811528399997e-01 + -2.5991327327852376e-01 7.7875922089274630e-01 1.9819440211820985e-01 + -4.4005550279702121e-01 1.1667740121682246e+00 2.5542184982762617e-01 + -6.6616617001518508e-01 1.5453466215269691e+00 2.8188083753714860e-01 + -9.4214185554982399e-01 1.9031285175877237e+00 2.9279204142424503e-01 + -1.2668732151065367e+00 2.2297969737459455e+00 3.0339975263484892e-01 + -1.6364853615563091e+00 2.5171535329197554e+00 3.2821584779874813e-01 + -2.0433588519992951e+00 2.7553724201981566e+00 3.8332938657208859e-01 + -2.4762881690771579e+00 2.9304073781140048e+00 4.7888037829077557e-01 + -2.9257372248421589e+00 3.0237926963323596e+00 6.0768228510376809e-01 + -3.3790287933742928e+00 3.0107627736187839e+00 7.5356184502716539e-01 + -3.8032509654306419e+00 2.8647954564043068e+00 9.1044051365503365e-01 + -4.1475470116038826e+00 2.5900693858876900e+00 1.0913289915641595e+00 + -4.3781036566366298e+00 2.2449818637576247e+00 1.3342892708371439e+00 + -4.4895482153650548e+00 1.9220041212385957e+00 1.6819640931512896e+00 + -4.5007146600371799e+00 1.7386534925532542e+00 2.1481210939396003e+00 + -4.4361727597029574e+00 1.7990139803110372e+00 2.6737927111127711e+00 + -4.3352772604789589e+00 2.0037000108512171e+00 3.1751899277597331e+00 + -4.3067530010278299e+00 2.0031427306153180e+00 3.7680135046624090e+00 + id 14446 + loc 7.8657937049865723e-01 6.0205209255218506e-01 412 + blend 0.0000000000000000e+00 + interp 4.1745249000137324e-01:2.9034018633724445e-01:3.1587323012301827e-02:3.9170773485756089e-01:9.9689677078889460e-01:2.9961750209190302e-01:1.6827685477981060e+00:4.1744831547647326e-01:2.5557048835608560e+00:3.0929458767516421e-01:3.0868449844571240e+00 + CVs 20 + 7.4427388349190182e-01 5.4873679336605419e-02 -2.7090229629673135e-01 + 1.2397641188441364e+00 8.3536992735466220e-03 -4.9121009090810952e-01 + 1.6797416390012385e+00 -6.8067463827213015e-02 -6.8538121236424177e-01 + 2.1345487634039042e+00 -1.5041593604736547e-01 -8.5809386329867343e-01 + 2.5999811070165730e+00 -2.4440198118715051e-01 -1.0046326826372851e+00 + 3.0725665354134439e+00 -3.5588528744113712e-01 -1.1225583198148994e+00 + 3.5467952167051084e+00 -4.8965373605530971e-01 -1.2109287766008612e+00 + 4.0148236606291059e+00 -6.4866149124826489e-01 -1.2711340678017473e+00 + 4.4686519673108096e+00 -8.3284703806422034e-01 -1.3066340727215966e+00 + 4.8997917595531701e+00 -1.0438710130972906e+00 -1.3193873364349029e+00 + 5.2942612347534634e+00 -1.2871066823541431e+00 -1.3151540288087697e+00 + 5.6276414799011318e+00 -1.5778070651077571e+00 -1.3165055733652309e+00 + 5.8762256077921702e+00 -1.9324501903337996e+00 -1.3537874927591171e+00 + 6.0434854505967674e+00 -2.3460295394434842e+00 -1.4313015009457979e+00 + 6.1475503553221316e+00 -2.8046010339110579e+00 -1.5345290857962874e+00 + 6.1899697114909484e+00 -3.2918535121540300e+00 -1.6593588134123085e+00 + 6.1682302745513642e+00 -3.7846381754281611e+00 -1.8104467921634995e+00 + 6.0968157994463352e+00 -4.2618210279778612e+00 -1.9794694426551289e+00 + 6.1490494960253432e+00 -4.7473111361684888e+00 -2.0699116501207677e+00 + id 14447 + loc 5.3728890419006348e-01 7.9579842090606689e-01 400 + blend 0.0000000000000000e+00 + interp 4.5809656804421156e-01:2.6989115944795383e-01:1.1650795790453805e-02:3.1349091710332644e-01:6.7353233464659135e-01:3.1312376444762552e-01:1.0382870885844147e+00:2.6788115513717914e-01:1.9743853616506231e+00:3.2554171680668803e-01:2.6210437121011760e+00:4.5809198707853116e-01:3.1969013669296498e+00 + CVs 20 + -1.1041445827906540e-01 1.9824306857236917e-01 -1.4624592996057822e-01 + -2.2729298024272671e-01 3.8746995243124965e-01 -3.2589231412643477e-01 + -3.3229557725777981e-01 5.4902202442471704e-01 -5.2901356759472473e-01 + -4.2224859663401204e-01 6.7688346377045150e-01 -7.4622075382774522e-01 + -5.0336019314162161e-01 7.7487000427425701e-01 -9.7144748765357036e-01 + -5.8061500269081379e-01 8.5095990701524737e-01 -1.2004269082598988e+00 + -6.5603954408142684e-01 9.1490302914113442e-01 -1.4296399638896746e+00 + -7.3020695611919029e-01 9.7451636378226403e-01 -1.6523352418498267e+00 + -8.0478282762932796e-01 1.0356192559748443e+00 -1.8631502369701272e+00 + -8.8210126140337264e-01 1.1041479289873903e+00 -2.0649458547367607e+00 + -9.6235065821296395e-01 1.1868453193882784e+00 -2.2662571072053943e+00 + -1.0411852676436621e+00 1.2906698582960465e+00 -2.4761005620519461e+00 + -1.1101180352073008e+00 1.4197950161878459e+00 -2.7054724214307995e+00 + -1.1602275879001291e+00 1.5699803563651997e+00 -2.9728209703645554e+00 + -1.1823836122026938e+00 1.7246265711883408e+00 -3.3023550705836957e+00 + -1.1599815526069446e+00 1.8566632367880960e+00 -3.7101249572547590e+00 + -1.0695426978674960e+00 1.9290977499294852e+00 -4.1886593973353321e+00 + -9.0198930593073456e-01 1.9023493105732623e+00 -4.6799812533554865e+00 + -7.3649461734483868e-01 1.7944760843888625e+00 -4.9202370199542944e+00 + id 14448 + loc 1.5273509919643402e-01 3.6027967929840088e-01 401 + blend 0.0000000000000000e+00 + interp 4.1693787551124839e-01:2.7807010467420962e-01:6.1823732863796410e-01:3.7246765292592843e-01:1.1488641667473800e+00:3.1470231203495902e-01:1.9533176985735661e+00:3.2340132190554055e-01:2.5843704378968111e+00:4.1693370613249331e-01:3.0056705266230153e+00:3.2577434933580729e-01:3.9857535196925209e+00 + CVs 20 + -2.8953928544739710e-01 3.8941408249003923e-01 1.0126093984954394e-01 + -5.7358382294215993e-01 7.8020682323720281e-01 1.7370196604365992e-01 + -8.8031015642124755e-01 1.1580873687723479e+00 2.5436282828882206e-01 + -1.2181486902020318e+00 1.5089675700692851e+00 3.6138708691659893e-01 + -1.5881960747372708e+00 1.8209060181636585e+00 5.1115674727585803e-01 + -1.9848045211417717e+00 2.0805725753015176e+00 7.2293358547676034e-01 + -2.3939776515179614e+00 2.2708880000050087e+00 1.0093410344876159e+00 + -2.7940700658539339e+00 2.3745753376958407e+00 1.3666507441921025e+00 + -3.1636407317312818e+00 2.3816323773593715e+00 1.7767922750965108e+00 + -3.4883026786579516e+00 2.2913446581426768e+00 2.2133222864128843e+00 + -3.7642141247924337e+00 2.1086464353262704e+00 2.6530412379908115e+00 + -3.9924193071998801e+00 1.8379907748043591e+00 3.0826455300840965e+00 + -4.1682590490897207e+00 1.4841738375406868e+00 3.4950507708795278e+00 + -4.2729131357292687e+00 1.0592290794821260e+00 3.8935530883304343e+00 + -4.2652117097496633e+00 5.8784381668065266e-01 4.2984400399855840e+00 + -4.0844454867468354e+00 1.2301326820384140e-01 4.7208546350841338e+00 + -3.6838949374505394e+00 -2.5218737664540003e-01 5.1332013306051989e+00 + -3.1209203199227122e+00 -4.6801634753430021e-01 5.4637987879955521e+00 + -2.7358625902552780e+00 -6.3297838490509506e-01 5.7090487532776546e+00 + id 14449 + loc 5.0947004556655884e-01 6.0843312740325928e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6628390444001783e-01:3.1257261625341365e-01:1.6845336157432511e-01:3.9355641304522454e-01:8.8164342173301757e-01:2.6300824382187254e-01:1.5093491788696949e+00:4.6627924160097345e-01:2.1298247264569450e+00:2.9486027658336128e-01:2.9036641901497715e+00:2.6505397194628505e-01:3.5612892541850831e+00 + CVs 20 + 4.7250841944658992e-02 2.5669570282033533e-01 -4.0479157748750730e-02 + 7.8236917489892394e-02 5.3187037518433045e-01 -9.1209285976343465e-02 + 1.0077080844456060e-01 8.2379924956851480e-01 -1.5155735008370178e-01 + 1.4790347109552182e-01 1.1380300669855155e+00 -2.2531813972650847e-01 + 2.5839151766422597e-01 1.4312564796704093e+00 -2.9390464108134845e-01 + 3.9675678591888441e-01 1.6394134946811030e+00 -3.3388747159966353e-01 + 5.1328297414526436e-01 1.7565083965639343e+00 -3.4976317896334291e-01 + 6.1070062187312057e-01 1.8140838134102406e+00 -3.4154482566290267e-01 + 7.1816401552985121e-01 1.8755612701737041e+00 -2.9452601867614991e-01 + 8.2375630529054134e-01 2.0374376473187876e+00 -2.3349577844260594e-01 + 8.3191960662740039e-01 2.3095188593836613e+00 -2.7629159247120821e-01 + 7.0739641333595304e-01 2.5216522538831634e+00 -4.7356098003042718e-01 + 5.2069713968786646e-01 2.5710160754346245e+00 -7.4971669405359653e-01 + 3.2128003346407241e-01 2.4396064288984691e+00 -1.0401002161896178e+00 + 1.5138581366082315e-01 2.0938301869024869e+00 -1.3327265019234316e+00 + 1.6571542401494210e-01 1.5541363508319552e+00 -1.5639288748283908e+00 + 3.3831012141984884e-01 1.2856522953169129e+00 -1.4625544731675191e+00 + 5.0096754572303159e-01 9.6678105554032778e-01 -1.3877492679898014e+00 + 7.3864575981383362e-01 5.4600350849552437e-01 -1.2955877578879891e+00 + id 14450 + loc 9.6192395687103271e-01 7.6171427965164185e-01 404 + blend 0.0000000000000000e+00 + interp 3.4810185537130905e-01:2.4991351076120574e-01:9.9270208265760806e-01:3.4809837435275537e-01:1.4414347747517700e+00:2.4103588565499670e-01:2.3214682093429966e+00:3.1404462923225535e-01:3.2415525568171462e+00:2.5248764944240437e-01:3.9800715388522940e+00 + CVs 20 + -8.6880552918550930e-02 6.7378420971676359e-02 1.3341245540239424e-02 + -1.9405918541191114e-01 1.1166591520234737e-01 6.0181876374006002e-02 + -3.2650087229472580e-01 1.7764449079200720e-01 1.2139687984221853e-01 + -4.8335380188431037e-01 2.6899123907179923e-01 1.7314634492041145e-01 + -6.5924046609129328e-01 3.9972102640211082e-01 2.0621448347763077e-01 + -8.4176619802514052e-01 5.8124273820768080e-01 2.1084142451718510e-01 + -1.0127577538843868e+00 8.1127187254202560e-01 1.8159312976602993e-01 + -1.1589064448256701e+00 1.0688669564080027e+00 1.2118898096171513e-01 + -1.2755193357122048e+00 1.3373992989207721e+00 3.7429792028497465e-02 + -1.3506225203642681e+00 1.6245897107977125e+00 -5.3151848166716670e-02 + -1.3692463484911166e+00 1.9354313359631206e+00 -1.2531383807481664e-01 + -1.3427332241837227e+00 2.2413758493357645e+00 -1.7025626311662020e-01 + -1.3024995495644429e+00 2.5084254466933884e+00 -1.9854518174040431e-01 + -1.2636718095746369e+00 2.7311271185470738e+00 -2.1995070526270050e-01 + -1.2174920973944461e+00 2.9243144593405344e+00 -2.4052696236196652e-01 + -1.1503312980791844e+00 3.1012600921291757e+00 -2.7325236279861675e-01 + -1.0573145953634886e+00 3.2634296667218581e+00 -3.4026712686160143e-01 + -9.4499614808464227e-01 3.3998858049503986e+00 -4.5481895755042034e-01 + -9.5871316315682287e-01 3.3928258073790545e+00 -4.9660678653310841e-01 + id 14451 + loc 8.2368302345275879e-01 4.2745195329189301e-02 393 + blend 0.0000000000000000e+00 + interp 5.0009277885101000e-01:3.2648580418372625e-01:1.8591275653286543e-01:3.6200616939260455e-01:1.0272282451701968e+00:5.0008777792322157e-01:1.3595724860163980e+00:4.0199606750759304e-01:2.2388325271208931e+00:3.0872520476160048e-01:3.4955214532142991e+00 + CVs 20 + 4.4167503855398915e-01 3.8780976743307727e-01 1.7051346767717523e-01 + 8.5006731649430045e-01 7.7604888859398002e-01 3.0223183524228880e-01 + 1.2392374799293484e+00 1.1880011182721044e+00 4.3531016116489174e-01 + 1.6197536789499027e+00 1.6205586935452545e+00 6.1215563522246041e-01 + 1.9920790751685509e+00 2.0466480078649321e+00 8.7205290170027416e-01 + 2.3461764316108309e+00 2.4368539060678729e+00 1.2350502826402694e+00 + 2.6621975900834318e+00 2.7739619312617370e+00 1.6943501220207278e+00 + 2.9253854976959781e+00 3.0520296884888793e+00 2.2273587781724520e+00 + 3.1365777576074660e+00 3.2705897458137629e+00 2.8157115570558924e+00 + 3.3086808686659621e+00 3.4251171106362062e+00 3.4551480575325897e+00 + 3.4580032764436455e+00 3.4903026541832531e+00 4.1496402216974895e+00 + 3.5972987208327041e+00 3.4154885267453805e+00 4.8925852570617696e+00 + 3.7349543197643000e+00 3.1503280290534219e+00 5.6417573004745005e+00 + 3.8771368644685280e+00 2.6712586800352933e+00 6.3170241091047403e+00 + 4.0367923680394124e+00 1.9983354249216330e+00 6.8212351499694179e+00 + 4.2284649904454712e+00 1.2157851980105274e+00 7.0729100292576526e+00 + 4.4676075864993914e+00 4.3603750470288194e-01 7.0569792715076911e+00 + 4.7501484680920552e+00 -2.6604406777713718e-01 6.8193118698669517e+00 + 4.9118618848687898e+00 -8.2394050569557287e-01 6.5397411625294035e+00 + id 14452 + loc 3.7813255190849304e-01 3.7580198049545288e-01 399 + blend 0.0000000000000000e+00 + interp 4.2382349913324840e-01:3.0613875979060651e-01:3.3543171728768550e-01:3.1863222914785561e-01:1.3700782333787167e+00:2.7418873375801395e-01:2.5465483800282565e+00:3.1968248182189896e-01:3.0618580490230087e+00:4.2381926089825711e-01:3.8599991552763324e+00 + CVs 20 + -2.1143597479000195e-01 3.7127384695900129e-01 1.0231976947458318e-01 + -4.4843472268341428e-01 7.4059729132563334e-01 2.0624659944545315e-01 + -7.2301623477447252e-01 1.0960810066195878e+00 2.9342318539115009e-01 + -1.0289971476887014e+00 1.4350916936322267e+00 3.7196743224908801e-01 + -1.3578457393532597e+00 1.7588934036177872e+00 4.6287097605359473e-01 + -1.7101447279901425e+00 2.0608374885129175e+00 5.8494143665085119e-01 + -2.0935071738758424e+00 2.3217224826935445e+00 7.5394638093125999e-01 + -2.5140409715977379e+00 2.5064784675938077e+00 9.8320651760004418e-01 + -2.9634250773333974e+00 2.5632616752136785e+00 1.2758405698618307e+00 + -3.4072180497070308e+00 2.4357359620404049e+00 1.6102347814920301e+00 + -3.7812055352656886e+00 2.1107693062216044e+00 1.9317408591346426e+00 + -4.0474263411865650e+00 1.6749592392906651e+00 2.1883497243530021e+00 + -4.2475553592235551e+00 1.2360224988376132e+00 2.3830666973190464e+00 + -4.4597264829435366e+00 8.6692453647908518e-01 2.5409286765581118e+00 + -4.7570583608293875e+00 6.3011686707551462e-01 2.6595950994963369e+00 + -5.1595510838811460e+00 5.7660966596661112e-01 2.6545910713249188e+00 + -5.5619079704832037e+00 7.5386757366486656e-01 2.3769483856230456e+00 + -5.7914956549281680e+00 1.0147561488846559e+00 1.9452816651011546e+00 + -6.2053838456724426e+00 9.5320554394063750e-01 1.8691124583538161e+00 + id 14453 + loc 1.4839293062686920e-01 7.8501528501510620e-01 402 + blend 0.0000000000000000e+00 + interp 4.1522659615200486e-01:2.7853086833425017e-01:6.0335849949892228e-01:2.7271283019520787e-01:1.1163618398602360e+00:2.8764952153303180e-01:1.9615734918061900e+00:2.8488926119468977e-01:2.9967436548095550e+00:4.1522244388604335e-01:3.8339137487909460e+00 + CVs 20 + 2.1232002508182635e-02 3.2343220083297503e-01 -1.2651659026615972e-01 + 1.0610434655942691e-03 6.4620890691340171e-01 -2.5053282269540478e-01 + -1.6681012118434091e-02 9.8624122572557238e-01 -3.8956211297092408e-01 + -5.8575542536928316e-03 1.3338163097780300e+00 -5.5110048784032806e-01 + 3.3577880116874792e-02 1.6685284693172515e+00 -7.3769720694363250e-01 + 9.7184599463683963e-02 1.9727639401303414e+00 -9.4790429685543998e-01 + 1.8010335426987378e-01 2.2369796628126117e+00 -1.1774703671624445e+00 + 2.7809354303237177e-01 2.4591834141154099e+00 -1.4202578394433882e+00 + 3.8123106020448050e-01 2.6470279630305726e+00 -1.6709168700738086e+00 + 4.7170045359977042e-01 2.8144449232388924e+00 -1.9251972505879580e+00 + 5.4295277005270182e-01 2.9740395979600245e+00 -2.1784974296738753e+00 + 6.1289622872993954e-01 3.1303479443783448e+00 -2.4358729095986704e+00 + 7.0979819469163707e-01 3.2558965709312138e+00 -2.7132350871652458e+00 + 8.5796821567078507e-01 3.2837959110936321e+00 -3.0114050876886624e+00 + 1.0633774260157778e+00 3.1536862660419391e+00 -3.3156692533438066e+00 + 1.2880559103015512e+00 2.8140774938819439e+00 -3.6144278733685091e+00 + 1.4251908306129706e+00 2.2154638138298073e+00 -3.9111098057003000e+00 + 1.2978186765250961e+00 1.5217594869078277e+00 -4.2263743653530508e+00 + 1.0172068242090508e+00 1.4578188808543124e+00 -4.3286991607566705e+00 + id 14454 + loc 8.8531845808029175e-01 7.9455161094665527e-01 1079 + blend 0.0000000000000000e+00 + interp 4.0403893820388587e-01:3.5876535682852378e-01:5.2284932301992615e-01:3.3013025218271203e-01:1.6630758412892273e+00:3.4373134537296568e-01:2.6889566227767694e+00:4.0403489781450386e-01:2.9978852083622964e+00:3.2365966190338458e-01:3.6436663932810029e+00 + CVs 20 + 6.4131012585715574e-02 2.8824395495033656e-01 -1.0954110244137703e-01 + 1.4620874147009394e-01 5.8692015217484972e-01 -2.2574396226771676e-01 + 2.4410082314255285e-01 8.8408027623223562e-01 -3.6942353006630463e-01 + 3.5981395316870435e-01 1.1677016659801485e+00 -5.5030654996156103e-01 + 4.9698406812690632e-01 1.4235676994742092e+00 -7.7023230038743296e-01 + 6.5546528414249849e-01 1.6306546050499153e+00 -1.0291360007788122e+00 + 8.2943860879051534e-01 1.7675991022046758e+00 -1.3233935026423009e+00 + 1.0083792579544086e+00 1.8224563875188506e+00 -1.6441498284540947e+00 + 1.1798300725382034e+00 1.7924394500606677e+00 -1.9788499506944057e+00 + 1.3318144938948606e+00 1.6803320768135916e+00 -2.3142262111618392e+00 + 1.4556060506318547e+00 1.4912959365151093e+00 -2.6370132016644021e+00 + 1.5478019413399917e+00 1.2307038123725471e+00 -2.9324945852744460e+00 + 1.6106470388192879e+00 9.0510288956055174e-01 -3.1843402954405655e+00 + 1.6525870179512461e+00 5.2335869002697843e-01 -3.3718024075668285e+00 + 1.6813221634834787e+00 9.8138973322095646e-02 -3.4535702980584739e+00 + 1.6820155416605984e+00 -3.2362147009074915e-01 -3.3125046048121689e+00 + 1.6042126123295142e+00 -5.2183904977794349e-01 -2.7777498148916857e+00 + 1.4721174631343157e+00 -3.1312527145309543e-01 -2.1451406245326448e+00 + 1.4388425546083397e+00 -5.8602323709271520e-01 -1.8573084812605254e+00 + id 14455 + loc 4.9886038899421692e-01 4.6336299180984497e-01 412 + blend 0.0000000000000000e+00 + interp 4.1249754324491428e-01:4.1249341826948183e-01:4.0790626991273893e-03:2.7901578201276128e-01:9.4081968369727176e-01:2.9922424088810379e-01:1.9129203161422919e+00:3.4207000633286866e-01:2.4719965333704206e+00:2.5232025468472885e-01:3.1713265900055054e+00 + CVs 20 + -1.5096834035820628e-01 1.3671586528161905e-01 -6.2318783779456244e-01 + -2.8540789084256607e-01 1.9650443802521730e-01 -1.0357516202751518e+00 + -4.0852327731283811e-01 2.3765804351394626e-01 -1.3782585103207199e+00 + -5.2530280611395208e-01 2.9101450315523103e-01 -1.7199453047570346e+00 + -6.3446601500786415e-01 3.5196896123546223e-01 -2.0583792462044328e+00 + -7.3485762205930372e-01 4.1501285146596628e-01 -2.3912154003123440e+00 + -8.2457905373503837e-01 4.7503221698496789e-01 -2.7168647547775606e+00 + -9.0149300482750494e-01 5.2759194697228162e-01 -3.0335249128771000e+00 + -9.6539866917277273e-01 5.6886952054327966e-01 -3.3364114411293970e+00 + -1.0180652223328122e+00 5.9632800686577658e-01 -3.6212656697295835e+00 + -1.0537294107832116e+00 6.1338505641146490e-01 -3.8945268030899416e+00 + -1.0466812450004235e+00 6.3315194888025217e-01 -4.1767032530569344e+00 + -9.7715161004310569e-01 6.5312401059898417e-01 -4.4895154407109308e+00 + -8.8169273429569384e-01 6.3273436528447946e-01 -4.8283039082782366e+00 + -8.1145003370547952e-01 5.4055694983727864e-01 -5.1677071750604924e+00 + -7.7419400307583930e-01 3.7855628876712544e-01 -5.4931550024873976e+00 + -7.5815511308550720e-01 1.5860772525301936e-01 -5.7982672212108062e+00 + -7.6718834903218269e-01 -1.0659351298490050e-01 -6.0716635076868348e+00 + -8.9621360685456330e-01 -3.9123785350868490e-01 -6.1861369988812900e+00 + id 14456 + loc 8.5934257507324219e-01 6.7440927028656006e-02 378 + blend 0.0000000000000000e+00 + interp 4.4019048893484136e-01:3.6475418054018333e-01:3.1439224863576531e-01:3.7359920077029185e-01:9.9130019389204282e-01:4.4018608702995204e-01:1.2952090410638846e+00:3.4196784590426227e-01:2.4020923925033850e+00:3.7186559783733752e-01:2.9972430634562492e+00:4.2448789394006603e-01:3.8332631993039246e+00 + CVs 20 + -2.8747767823505604e-01 3.3672221891606213e-01 -3.8089043548015407e-02 + -5.8121997969482908e-01 6.7163817440556950e-01 -5.4343352003522194e-02 + -8.8065785720388812e-01 9.9717814582171316e-01 -4.4415455119140967e-02 + -1.1827107067275435e+00 1.3183883700661674e+00 -1.8912390907327992e-02 + -1.4920427232556075e+00 1.6416110296894251e+00 1.0133405235064896e-03 + -1.8255878822892559e+00 1.9635028700485080e+00 -8.3748991568862730e-03 + -2.1976960440928694e+00 2.2683697004951822e+00 -6.8270913663344701e-02 + -2.6090597984767170e+00 2.5342454063418018e+00 -1.9225269509143617e-01 + -3.0512016753537670e+00 2.7369352565282936e+00 -3.8302579901639000e-01 + -3.5131309314997505e+00 2.8489224816490579e+00 -6.2837624092468514e-01 + -3.9829370661508472e+00 2.8398598566506150e+00 -9.0325362852118418e-01 + -4.4405282779109783e+00 2.6818982673694318e+00 -1.1751211480708688e+00 + -4.8513784777492210e+00 2.3826570584142575e+00 -1.4036873363350828e+00 + -5.1983915841383546e+00 2.0231292900540638e+00 -1.5689362524905479e+00 + -5.5091934852911777e+00 1.7008198715434966e+00 -1.6999504144397566e+00 + -5.8117163382332979e+00 1.4732783733134065e+00 -1.8176477656860472e+00 + -6.1021524717870381e+00 1.3687104188824106e+00 -1.8935232435354190e+00 + -6.3678761321774644e+00 1.3458961598270394e+00 -1.9225650110233532e+00 + -6.6847427043026393e+00 1.1789959036721114e+00 -2.0591582195226250e+00 + id 14457 + loc 2.4148295819759369e-01 8.5975682735443115e-01 400 + blend 0.0000000000000000e+00 + interp 3.7399160066438225e-01:3.7398786074837564e-01:4.0072681390794906e-01:2.9943621257969943e-01:1.0017556899136051e+00:3.5538019250855735e-01:1.9289204418351933e+00:2.9336285562585318e-01:2.4989825986691065e+00:2.5980216687548308e-01:3.0542080735104284e+00:2.7955186572133300e-01:3.9421182629524703e+00 + CVs 20 + -1.7205210855144004e-01 3.5456018268448097e-01 -1.1074703838928358e-01 + -3.6839000466846533e-01 6.9983023364359698e-01 -2.5144388682408125e-01 + -5.6525063848932477e-01 1.0250596481984973e+00 -4.4752865191863905e-01 + -7.5585484743796094e-01 1.3157138744381720e+00 -7.0779463972360945e-01 + -9.3950301600189356e-01 1.5582792904927354e+00 -1.0284697821787454e+00 + -1.1115937358065451e+00 1.7447947720053150e+00 -1.4015011073643677e+00 + -1.2646394033222590e+00 1.8718024987505082e+00 -1.8179751952834715e+00 + -1.3887332605775604e+00 1.9376092612822622e+00 -2.2689044639045224e+00 + -1.4698969423528283e+00 1.9413199775696812e+00 -2.7452283615522965e+00 + -1.4916155839889433e+00 1.8824758337322378e+00 -3.2336415565358316e+00 + -1.4506120183701554e+00 1.7650795303563585e+00 -3.7114294222163946e+00 + -1.3718717333059376e+00 1.6021778127867645e+00 -4.1558750122407968e+00 + -1.2932730882744286e+00 1.4055026069552163e+00 -4.5515601790593880e+00 + -1.2446971134185412e+00 1.1742735393115604e+00 -4.8760244724319621e+00 + -1.2432264658064915e+00 9.1175856434404889e-01 -5.1069591409790016e+00 + -1.2873717216130689e+00 6.4310582329401256e-01 -5.2689068572188642e+00 + -1.3685306628830787e+00 3.8723349872366719e-01 -5.4257434863406298e+00 + -1.4742043707202133e+00 1.4166996515503416e-01 -5.6126184922340707e+00 + -1.4847952242522391e+00 -1.0327665741687442e-01 -5.8936151461216859e+00 + id 14458 + loc 4.6095469594001770e-01 4.1770422458648682e-01 401 + blend 0.0000000000000000e+00 + interp 3.7076149421206939e-01:3.7075778659712727e-01:9.5528244247833138e-01:3.2014433362688299e-01:1.6479859143806133e+00:3.2728619835667178e-01:2.3453152892340778e+00:3.2914829258069384e-01:3.0641251465901718e+00:3.1934955223244083e-01:3.9521679720897431e+00 + CVs 20 + -2.3149104941294313e-01 3.6561883359988717e-01 1.7282592899344329e-01 + -4.9025059452093478e-01 7.5615516005585948e-01 3.1042557929827430e-01 + -7.8740437468723534e-01 1.1491570397355406e+00 4.6223415937101697e-01 + -1.1368539743311266e+00 1.5166909301645886e+00 6.4462031014674714e-01 + -1.5447488014070736e+00 1.8315797975997656e+00 8.6835178765251797e-01 + -1.9929763171197661e+00 2.0713780419855619e+00 1.1588175636069460e+00 + -2.4457820956905607e+00 2.2189034674013435e+00 1.5423602477715896e+00 + -2.8616372074477563e+00 2.2558303444248988e+00 2.0263234426195949e+00 + -3.2017995461351441e+00 2.1671563051626519e+00 2.5912142609183695e+00 + -3.4432167114958330e+00 1.9527561225763337e+00 3.1989256017729604e+00 + -3.5837903261805533e+00 1.6206951334792508e+00 3.8079602301446043e+00 + -3.6462787417735325e+00 1.1796633866280235e+00 4.3767532447293336e+00 + -3.6556432502735010e+00 6.4316441642595223e-01 4.8723248816652109e+00 + -3.6041336950583172e+00 4.6232916605614682e-02 5.2800018835294562e+00 + -3.5127192581575195e+00 -5.5627300513513611e-01 5.6170689283233166e+00 + -3.5417123614884729e+00 -1.1298562427923049e+00 5.9494139150073009e+00 + -3.9087546300007454e+00 -1.6426846032317783e+00 6.3212430943788798e+00 + -4.5430671533462359e+00 -2.0187589661528906e+00 6.6435659396649491e+00 + -4.7389054089437233e+00 -2.3631681494122052e+00 6.9413712986163043e+00 + id 14459 + loc 1.7224763333797455e-01 7.8386133909225464e-01 393 + blend 0.0000000000000000e+00 + interp 3.1804618261327400e-01:3.1509835661984381e-01:5.2990946887557677e-01:3.0240430365079440e-01:1.3392788305704431e+00:3.1804300215144787e-01:2.2958014504693578e+00:3.1187302549880197e-01:3.1221842458946787e+00:2.5935388411569976e-01:3.9961658826667152e+00 + CVs 20 + -2.7152050108145404e-01 4.4486282818872841e-01 -2.8104914486244853e-01 + -5.3139503581846403e-01 8.8982699487305905e-01 -5.5567020393233502e-01 + -7.9287729760494763e-01 1.3398033854241256e+00 -8.1537236884338471e-01 + -1.0875174147821143e+00 1.7848904912874792e+00 -1.0474309157780572e+00 + -1.4380133856486550e+00 2.1985886208572900e+00 -1.2366029352626102e+00 + -1.8438176018724364e+00 2.5472954764293325e+00 -1.3732966023148983e+00 + -2.2840742901564184e+00 2.7988443062902366e+00 -1.4598118423841706e+00 + -2.7201845699053493e+00 2.9359578545711766e+00 -1.5087388402797408e+00 + -3.1093665739738041e+00 2.9756976646189099e+00 -1.5347972614750978e+00 + -3.4397036369771596e+00 2.9595220299093192e+00 -1.5447635702689992e+00 + -3.7308580308427386e+00 2.9228299137577145e+00 -1.5405234930115848e+00 + -4.0013860681185927e+00 2.8965277379316587e+00 -1.5320289169606671e+00 + -4.2679235727621698e+00 2.9029706654493275e+00 -1.5320383386496830e+00 + -4.5609492892335544e+00 2.9313117013650221e+00 -1.5490971235397124e+00 + -4.8830034301946750e+00 2.9518361544782525e+00 -1.6145901357879824e+00 + -5.1661747052014722e+00 2.9561154540854808e+00 -1.7991865590458493e+00 + -5.3733932637748287e+00 2.9329804564650463e+00 -2.1323740206672639e+00 + -5.6023256978623888e+00 2.8430748132697348e+00 -2.4895873350341460e+00 + -5.9679393644448249e+00 2.7074735427012104e+00 -2.6009298933338525e+00 + id 14460 + loc 3.2561144232749939e-01 1.0553989559412003e-01 402 + blend 0.0000000000000000e+00 + interp 4.8916664934081422e-01:2.5829207990032182e-01:9.6432778599924562e-01:4.8916175767432085e-01:1.7166414004622901e+00:2.5496290638862551e-01:2.1638199249994732e+00:3.8228753153428702e-01:2.9085398718741349e+00:2.7364409294488334e-01:3.2543882372409771e+00:3.5431876116398564e-01:3.9816635677878285e+00 + CVs 20 + -1.1773515658685939e-01 4.5372057045063752e-01 2.5372056251901248e-01 + -2.5148853598678145e-01 8.9008453553684008e-01 4.6368256120595813e-01 + -4.2783030520782506e-01 1.3058723872390310e+00 6.3700189165657983e-01 + -6.4717961534426571e-01 1.6924267635385706e+00 7.8621829609313720e-01 + -8.9825593187840003e-01 2.0405925593171803e+00 9.2109737839298611e-01 + -1.1724094929508451e+00 2.3449721328700459e+00 1.0453118756815629e+00 + -1.4672808440954488e+00 2.6051695749496813e+00 1.1597079337020493e+00 + -1.7849677475771242e+00 2.8208800589090628e+00 1.2684866442600535e+00 + -2.1268142891520290e+00 2.9882017484784145e+00 1.3810685112699848e+00 + -2.4925717711690440e+00 3.1015864579335912e+00 1.5089301662233547e+00 + -2.8854118671779059e+00 3.1558759265148737e+00 1.6522571810307680e+00 + -3.3070800825913733e+00 3.1415893074078980e+00 1.7965140066832923e+00 + -3.7379966271094340e+00 3.0378866175017194e+00 1.9316676446556151e+00 + -4.1299373656904441e+00 2.8232121416897060e+00 2.0606869424023300e+00 + -4.4307595113541431e+00 2.5058566786557992e+00 2.1941072153738217e+00 + -4.6101886166980410e+00 2.1285841238601524e+00 2.3525566914919818e+00 + -4.6723074209839535e+00 1.7514148495131274e+00 2.5613699430994403e+00 + -4.6580429147695463e+00 1.4553090810943246e+00 2.8734267489007368e+00 + -4.6057135443852246e+00 1.3364210325892800e+00 3.4390281756894314e+00 + id 14461 + loc 5.3780265152454376e-03 9.8932065069675446e-02 399 + blend 0.0000000000000000e+00 + interp 3.3023698761248282e-01:3.3023368524260671e-01:1.3644799167032307e-01:3.2080387020942508e-01:1.0007967229062722e+00:2.0678831537930598e-01:1.4931959587256096e+00:2.3726601441484088e-01:2.8380394062973875e+00:3.0923586975756001e-01:3.1419629138367546e+00 + CVs 20 + -1.0672912527558966e-01 3.1592382089793969e-01 1.4608559567027360e-01 + -2.6649573767870044e-01 6.5422617374218561e-01 3.2870142830690185e-01 + -4.7403496295641179e-01 1.0130300669152670e+00 5.1886612897866358e-01 + -7.1666528852045053e-01 1.3867542910124855e+00 7.2063143309424149e-01 + -9.7671616411390849e-01 1.7656774343436199e+00 9.5807572829317289e-01 + -1.2325387504569438e+00 2.1313712496968766e+00 1.2515169650307152e+00 + -1.4624443591336331e+00 2.4519515441527031e+00 1.6136050672746922e+00 + -1.6509419606985729e+00 2.6771595913981083e+00 2.0420171790892363e+00 + -1.8056097766247770e+00 2.7673784461771218e+00 2.5027544132303654e+00 + -1.9646346943782937e+00 2.7388113016511557e+00 2.9442348858444864e+00 + -2.1608754756281643e+00 2.6284830176938683e+00 3.3326074367293819e+00 + -2.3864184577182219e+00 2.4357851918563922e+00 3.6418737047023004e+00 + -2.6123234182427293e+00 2.1611609785442822e+00 3.8422787966127760e+00 + -2.8289382571994075e+00 1.8592342206220440e+00 3.9246442432043467e+00 + -3.0362033782930795e+00 1.5844180098119969e+00 3.9520467922496194e+00 + -3.2056114742882609e+00 1.3036383414640391e+00 4.0799879373403867e+00 + -3.2847612656177896e+00 9.6228435199096540e-01 4.4336191635192401e+00 + -3.2670037352054084e+00 6.5840952350953019e-01 4.9347941726904407e+00 + -3.3354988358731927e+00 5.6238513445435812e-01 5.3191507857361042e+00 + id 14462 + loc 1.1178280413150787e-01 2.5602696463465691e-02 1069 + blend 0.0000000000000000e+00 + interp 3.8278757884570191e-01:2.8937214318317112e-01:2.1686407987923095e-02:2.9347026589623099e-01:7.5183831039983617e-01:3.8278375096991346e-01:1.1318871392401491e+00:3.0916137578601866e-01:2.0001704415939185e+00:2.7060181580232745e-01:3.0508779026656088e+00 + CVs 20 + -2.6239142497398049e-01 1.9033632427398750e-01 3.4142706900928008e-02 + -5.0434147637604476e-01 3.8536241575735258e-01 7.5566696792994631e-02 + -7.1577600166636424e-01 5.9812642375540581e-01 1.4194723676569865e-01 + -8.9716843365225341e-01 8.2666178563961590e-01 2.2543106446090655e-01 + -1.0741851061460352e+00 1.0596382085475078e+00 2.8268475900518819e-01 + -1.2726038135888418e+00 1.2806018761191287e+00 2.7785525414041545e-01 + -1.5072060671274383e+00 1.4715372603165142e+00 2.0295388054846741e-01 + -1.7825698463890789e+00 1.6079775787419703e+00 4.5491981387602354e-02 + -2.0497427374420565e+00 1.6601415056768354e+00 -2.1235043723771119e-01 + -2.2171990579066305e+00 1.6264652753522113e+00 -5.4203811908520805e-01 + -2.2582715701124401e+00 1.5429303886433252e+00 -8.9251296659835322e-01 + -2.1984041401550058e+00 1.4299316437878118e+00 -1.2425926821197404e+00 + -2.0536581241213248e+00 1.2824751771205971e+00 -1.5545218616896135e+00 + -1.8526017491759041e+00 1.1185951381091181e+00 -1.7621505988063721e+00 + -1.6456026755947080e+00 9.7415520776227238e-01 -1.8651964758364972e+00 + -1.4708938813499886e+00 8.5135922351978144e-01 -1.9088574871727704e+00 + -1.3445411306189765e+00 7.2573884354264373e-01 -1.8764267040941394e+00 + -1.2534559071999452e+00 6.1120895011834286e-01 -1.8653402008123381e+00 + -1.3141224147172303e+00 8.1154062617445022e-01 -2.1675251395568953e+00 + id 14463 + loc 9.5452904701232910e-01 2.0493149757385254e-01 412 + blend 0.0000000000000000e+00 + interp 3.9838074385097122e-01:2.5642800281375222e-01:9.0940542595335239e-02:2.7749983552862534e-01:1.1654306183972136e+00:3.8552467288489123e-01:2.0666094843360208e+00:2.8756154421243224e-01:2.9746936616485220e+00:3.9837676004353273e-01:3.4933593881647931e+00 + CVs 20 + -6.8106286438931540e-01 1.9987831507774223e-01 1.9267861257303182e-01 + -1.1796384138339047e+00 3.1085270140966698e-01 3.4907606865725838e-01 + -1.6672733784579177e+00 4.0957528026625412e-01 4.8311722172560573e-01 + -2.1943183044510719e+00 5.0984003478124806e-01 5.9514776601374042e-01 + -2.7476362170588655e+00 5.7991473970808805e-01 7.0064279991822453e-01 + -3.3104685370044340e+00 5.8416241209554454e-01 8.3025703583506427e-01 + -3.8536177536419265e+00 4.9137996875758594e-01 1.0172394334621653e+00 + -4.3332455767415823e+00 2.8557354117622569e-01 1.2742999373639503e+00 + -4.7099117307739613e+00 -2.7048825039267754e-02 1.5806861552149631e+00 + -4.9547396124153318e+00 -4.1369444733242222e-01 1.8885568641742663e+00 + -5.0656545501906720e+00 -8.3955915256693836e-01 2.1610299364198142e+00 + -5.0711738707836602e+00 -1.3109076442795651e+00 2.4043598550539333e+00 + -5.0045989141920231e+00 -1.8277763732539858e+00 2.6466307971487750e+00 + -4.9031469933466729e+00 -2.3576604615024461e+00 2.9154668330094293e+00 + -4.8059611404730180e+00 -2.8666122954545870e+00 3.2300141953774770e+00 + -4.7431746241947099e+00 -3.3263750901410711e+00 3.6139772503404100e+00 + -4.7313118037924102e+00 -3.7397292401624678e+00 4.0811592839156843e+00 + -4.7876759364561092e+00 -4.1375277035622613e+00 4.6047596480136237e+00 + -4.9789987072312876e+00 -4.5371414163174171e+00 5.0924332624734747e+00 + id 14464 + loc 2.1288825571537018e-01 1.8014778196811676e-01 404 + blend 0.0000000000000000e+00 + interp 3.9232920795820275e-01:3.3245718052990814e-01:3.0193679012370922e-01:3.9232528466612321e-01:1.2867482618342529e+00:2.9512793529027415e-01:1.9959935561758257e+00:2.9939181864774161e-01:2.9823061254323475e+00:3.3347787226765985e-01:3.9194149497486541e+00 + CVs 20 + -1.0245356445014436e-01 1.7071120267925297e-01 -1.3227698808273960e-01 + -2.0397098651885776e-01 3.4787051363527405e-01 -2.6370251462072952e-01 + -2.8962322090762138e-01 5.2724941522840374e-01 -3.9497992319135594e-01 + -3.5862054574138269e-01 7.0999937162803839e-01 -5.2541427919264017e-01 + -4.1804053722011358e-01 9.0183371036412296e-01 -6.5353456725242043e-01 + -4.8044031392923719e-01 1.1119630712113540e+00 -7.7637190419135971e-01 + -5.5839586144997733e-01 1.3477058864300948e+00 -8.8687369430878149e-01 + -6.5795274372148094e-01 1.6086886216415159e+00 -9.7429729686908628e-01 + -7.8187086994983823e-01 1.8907713075274863e+00 -1.0277323358908481e+00 + -9.3258016821699996e-01 2.1888975565138624e+00 -1.0366922683479054e+00 + -1.1141300675877377e+00 2.4973103906451821e+00 -9.8888846959647259e-01 + -1.3249195390188782e+00 2.8022477117836759e+00 -8.7410631530847305e-01 + -1.5545669534413364e+00 3.0837866904877171e+00 -6.9276353149244130e-01 + -1.7772105772637889e+00 3.3211916055327078e+00 -4.6793245791216398e-01 + -1.9675282558378822e+00 3.5097538862633346e+00 -2.3228500359998927e-01 + -2.1312819725744685e+00 3.6648863229663284e+00 3.9505924613826515e-02 + -2.2702096027974958e+00 3.7896484260202317e+00 4.3108608654509784e-01 + -2.3554908527651124e+00 3.8481989686452658e+00 9.1830314885845898e-01 + -2.4152641614607067e+00 3.8675534138639183e+00 1.1088220689525661e+00 + id 14465 + loc 7.9866272211074829e-01 3.8031405210494995e-01 378 + blend 0.0000000000000000e+00 + interp 4.3744152122935892e-01:3.5813677447881953e-01:2.0257911498549208e-01:2.9526464492760213e-01:9.2447991942009167e-01:3.6574264185814359e-01:1.6344107197446440e+00:3.0069080515262697e-01:2.2212572223669014e+00:4.3743714681414664e-01:2.9251832367229764e+00:2.6975383309513085e-01:3.8899086572439066e+00 + CVs 20 + -3.9028128377264781e-01 3.7021605027408894e-01 -3.3816621315433101e-02 + -7.4884091994810786e-01 6.9672385419164895e-01 -5.4888658800064327e-02 + -1.1055340600390711e+00 9.8630855010873197e-01 -6.3695191580516231e-02 + -1.4687785411564771e+00 1.2499638505738955e+00 -6.9806353461698833e-02 + -1.8342040302081273e+00 1.4912291255830836e+00 -8.8380412427009891e-02 + -2.2030730855155567e+00 1.7042182390970335e+00 -1.3247049504725605e-01 + -2.5788735811861989e+00 1.8747423064205897e+00 -2.0936389227664404e-01 + -2.9589536223677331e+00 1.9891124717939963e+00 -3.1934445847814230e-01 + -3.3351221320999116e+00 2.0412879231892642e+00 -4.5710383427819512e-01 + -3.6978584455292722e+00 2.0318673446177966e+00 -6.1325404955286933e-01 + -4.0366184980851525e+00 1.9653462883823896e+00 -7.7195202735067414e-01 + -4.3405442589618364e+00 1.8504938897665710e+00 -9.1237714241683543e-01 + -4.6066156277597496e+00 1.6952952256383567e+00 -1.0202717140083299e+00 + -4.8490975048474905e+00 1.4894410229932538e+00 -1.0965356250183571e+00 + -5.0937386292687616e+00 1.2100100632383386e+00 -1.1502877122446171e+00 + -5.3661073429473500e+00 8.7316605305348416e-01 -1.1962271138530141e+00 + -5.6761460597438926e+00 5.4436296075795809e-01 -1.2450917689649939e+00 + -6.0098017179072531e+00 2.9175513603036007e-01 -1.2806271316690663e+00 + -6.3887638322769735e+00 1.1095793158568457e-01 -1.2886107215737421e+00 + id 14466 + loc 7.4128413200378418e-01 6.2759232521057129e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7836774057551618e-01:3.3162723171904740e-01:5.4676158379267004e-01:3.2377958042582328e-01:1.4220174257184621e+00:4.7836295689811043e-01:1.9999984919998979e+00:3.6676680815371815e-01:2.4998636037882136e+00:2.9362888564238310e-01:3.4905454196720682e+00 + CVs 20 + 5.4659426382371118e-02 3.6307479177639235e-01 -5.2624882367859754e-02 + 1.4243664954534876e-01 6.9956054929399381e-01 -1.2237003642512190e-01 + 2.4441607200591359e-01 1.0136903135539712e+00 -2.1303894275816188e-01 + 3.5388173853839577e-01 1.3024916149398096e+00 -3.2543361789616299e-01 + 4.7082716559218346e-01 1.5599101804000655e+00 -4.5985293909017200e-01 + 5.9308437199266018e-01 1.7783179714749198e+00 -6.1709298497526366e-01 + 7.1794686286246567e-01 1.9530426171895625e+00 -7.9888565603517736e-01 + 8.4288280370911295e-01 2.0843448961097586e+00 -1.0061316395046176e+00 + 9.6476795921944347e-01 2.1738593433659279e+00 -1.2373157714189225e+00 + 1.0805447142353248e+00 2.2228045247319201e+00 -1.4897819435223378e+00 + 1.1880999375626196e+00 2.2315866355091649e+00 -1.7611170549948167e+00 + 1.2863763965793988e+00 2.1993891805719517e+00 -2.0487167061115845e+00 + 1.3755499771131272e+00 2.1239745434259478e+00 -2.3491494204232053e+00 + 1.4573651620076111e+00 2.0015640194971942e+00 -2.6575879526218982e+00 + 1.5357587514085094e+00 1.8240472169276545e+00 -2.9683475182280259e+00 + 1.6162367518397265e+00 1.5636835019671456e+00 -3.2739587560516039e+00 + 1.6974590900801656e+00 1.1514751683765316e+00 -3.5277423302035809e+00 + 1.7604700201847665e+00 6.1632120089026543e-01 -3.5871566537283539e+00 + 1.8190684671224573e+00 3.1322389315400612e-01 -3.5517441219856893e+00 + id 14467 + loc 6.7327791452407837e-01 9.1239482164382935e-01 400 + blend 0.0000000000000000e+00 + interp 3.7628581599998451e-01:2.7811535599469517e-01:2.4742807188999649e-01:3.5273863391442506e-01:1.1298427048705846e+00:2.6553116594623050e-01:2.0058224714268702e+00:2.6818061766134910e-01:2.9983650622540456e+00:3.7628205314182450e-01:3.6965491550951550e+00 + CVs 20 + -2.8868454500315799e-01 2.7284587394507420e-01 -1.7955917699534321e-01 + -5.4251061083986374e-01 5.6594353975285094e-01 -3.7354908488685967e-01 + -7.8512233971108936e-01 8.7101476903699571e-01 -5.7946844825963462e-01 + -1.0369586380353930e+00 1.1742472326738906e+00 -7.8948203498131475e-01 + -1.3215685240700434e+00 1.4598529034097765e+00 -9.9506066392127202e-01 + -1.6611511807556540e+00 1.7123690074008857e+00 -1.1927361934304992e+00 + -2.0698375268089286e+00 1.9141368383214656e+00 -1.3870002631072533e+00 + -2.5494112149993517e+00 2.0415329517952090e+00 -1.5923421822924988e+00 + -3.0853777471953503e+00 2.0675998972535616e+00 -1.8346996952705843e+00 + -3.6457997099210271e+00 1.9596213998392580e+00 -2.1372067127685872e+00 + -4.1572969082443185e+00 1.7016779092761656e+00 -2.4882102443605345e+00 + -4.5488488049535079e+00 1.3672432027280399e+00 -2.8333892236672678e+00 + -4.8474023226910408e+00 1.0638194379837811e+00 -3.1298857543586820e+00 + -5.1139952578751604e+00 8.4021509855276344e-01 -3.3637818564808706e+00 + -5.3932019895815886e+00 6.8593459733932161e-01 -3.5366115361757213e+00 + -5.7391532455660244e+00 5.5277108094918370e-01 -3.6647156579771885e+00 + -6.1762577721673830e+00 3.9690782582245965e-01 -3.7701424261213941e+00 + -6.6732010520344707e+00 1.8809818329495442e-01 -3.8728054267120942e+00 + -7.1706238122256059e+00 -8.3994138014516828e-02 -3.9649242073930724e+00 + id 14468 + loc 2.3845294117927551e-01 6.2350875139236450e-01 401 + blend 0.0000000000000000e+00 + interp 3.8405926774385196e-01:3.2204688671042003e-01:3.1186476634109139e-01:3.7484976482846089e-01:9.9908438628430130e-01:3.2112538801288809e-01:1.6188840561820452e+00:3.1828888641908748e-01:2.2730751076241926e+00:3.1822232197606470e-01:3.0223522523237016e+00:3.8405542715117452e-01:3.6691111816991331e+00 + CVs 20 + -8.1947289122290504e-02 2.6523920760482722e-01 -2.5819085081074433e-01 + -1.8298338460195315e-01 5.2368711971911852e-01 -5.0067923155573169e-01 + -3.0372442578012904e-01 7.7166784157368462e-01 -7.5007287518518428e-01 + -4.4650118896109209e-01 9.9757518801656286e-01 -1.0148268887068168e+00 + -6.1337637289062030e-01 1.1850226672139306e+00 -1.2889417734053152e+00 + -8.0536927598737496e-01 1.3178575696489236e+00 -1.5574299487276777e+00 + -1.0230893207751182e+00 1.3870054695952885e+00 -1.8011059405716618e+00 + -1.2666107795685098e+00 1.3921337630567550e+00 -2.0078457232693800e+00 + -1.5334251100270049e+00 1.3368630009116580e+00 -2.1740651376693738e+00 + -1.8189146629308097e+00 1.2247433113790758e+00 -2.3028493249295456e+00 + -2.1148490277754162e+00 1.0574252072935861e+00 -2.4014874058536573e+00 + -2.4004334256922166e+00 8.3681921012239169e-01 -2.4737369956138324e+00 + -2.6434326853796244e+00 5.7184027888001454e-01 -2.5155684695656437e+00 + -2.8213469252417194e+00 2.9058258791520375e-01 -2.5156939549798492e+00 + -2.9377818680823689e+00 4.7063348756645973e-02 -2.4550295225080174e+00 + -3.0074623372379867e+00 -1.0788452661857251e-01 -2.3230182119107656e+00 + -3.0519432513400777e+00 -1.4900386604893789e-01 -2.1330758994352892e+00 + -3.0920843039412409e+00 -8.7341868705057557e-02 -1.9154499396286666e+00 + -3.4132797135163839e+00 -2.8863364751092302e-01 -1.7099272750986909e+00 + id 14469 + loc 3.3224862813949585e-01 8.3512908220291138e-01 393 + blend 0.0000000000000000e+00 + interp 4.6739453837490363e-01:3.7060422093569606e-01:2.4015981372491668e-01:3.0555146261084914e-01:1.0298856230587579e+00:4.6738986442951991e-01:1.7400409536465860e+00:3.0871464488307809e-01:2.1191409940887045e+00:2.9843646590637185e-01:3.1741824828053380e+00:3.7400699454645697e-01:3.9235826873973698e+00 + CVs 20 + -2.7746386037545356e-01 2.7898771221275526e-01 -1.2526930623805518e-01 + -5.5304002889333881e-01 5.4793515446371499e-01 -2.3492150807732615e-01 + -8.1146653083347264e-01 8.1557116323734546e-01 -3.3473184595238947e-01 + -1.0391078418927906e+00 1.0799261963974924e+00 -4.2212556821737524e-01 + -1.2354128787166818e+00 1.3413274352747164e+00 -4.9186685287450166e-01 + -1.4072454209619885e+00 1.6083703215894651e+00 -5.4265989870955789e-01 + -1.5675967871923950e+00 1.8986426839162520e+00 -5.7400242556518000e-01 + -1.7484697401620743e+00 2.2296108575401172e+00 -5.8619242407244587e-01 + -2.0164468086377276e+00 2.5840227018198845e+00 -5.8538065345399670e-01 + -2.4266809566586960e+00 2.8999454684050501e+00 -5.9023189484355099e-01 + -2.9602493841747166e+00 3.1412332515140906e+00 -6.4187800044416443e-01 + -3.5557390535910520e+00 3.3122953580568164e+00 -7.8391202325358733e-01 + -4.1738251462607723e+00 3.3905523486893330e+00 -1.0204494573984766e+00 + -4.7924703508578599e+00 3.3165278255092376e+00 -1.3179071079813827e+00 + -5.3471904091775047e+00 3.0702751911062034e+00 -1.6418530212359235e+00 + -5.7442527114195681e+00 2.7176168659817974e+00 -1.9547673655769513e+00 + -5.9645595015925874e+00 2.3420899374032405e+00 -2.2035016593795613e+00 + -6.1099257149621042e+00 1.9358301163096552e+00 -2.3470074335383697e+00 + -6.3713423591638580e+00 1.3553173328377479e+00 -2.3505290606603810e+00 + id 14470 + loc 6.5695041418075562e-01 4.1513839364051819e-01 399 + blend 0.0000000000000000e+00 + interp 4.4614574287623132e-01:3.2965622477175605e-01:1.2763201349113029e-01:3.1199412326902404e-01:9.3146306896328224e-01:3.0207213920302195e-01:1.5409884146421611e+00:3.1785184942570871e-01:2.0495879497416101e+00:4.2866109586440160e-01:2.6005744063888052e+00:4.4614128141880260e-01:2.9986014429948407e+00:2.9503128390358518e-01:3.5788317565552683e+00 + CVs 20 + 9.4643565120422157e-02 2.6509822204560229e-01 2.2036621498071313e-01 + 1.8876570269829807e-01 5.2464493289673131e-01 4.2673415321759839e-01 + 2.6603097031469558e-01 7.7638384357198842e-01 6.4814348353178330e-01 + 3.2498682878727730e-01 1.0250897346998693e+00 9.0047527473041755e-01 + 3.7636043285384246e-01 1.2765238496735458e+00 1.1822018684844420e+00 + 4.3176052531406706e-01 1.5341939987509279e+00 1.4908516012258590e+00 + 5.0122882082968012e-01 1.7967715414850529e+00 1.8302673636232079e+00 + 5.9660332355972812e-01 2.0567362802852536e+00 2.2099389482975855e+00 + 7.3437417682793138e-01 2.2944400649737089e+00 2.6426624621430754e+00 + 9.3273456413248268e-01 2.4700519499457472e+00 3.1391702683065343e+00 + 1.2012955723976595e+00 2.5232581252459294e+00 3.6852829792137562e+00 + 1.5235212613178621e+00 2.4190602530058678e+00 4.2182284283933171e+00 + 1.8650450657049620e+00 2.2010044304961349e+00 4.6729848032612482e+00 + 2.1891638148538468e+00 1.9676648328096691e+00 5.0300601832682910e+00 + 2.4560080740541830e+00 1.8229166067484450e+00 5.3052151889743246e+00 + 2.6326443527707371e+00 1.8133417698689325e+00 5.5217863725857415e+00 + 2.6902388638811527e+00 1.9295428952211968e+00 5.6735180395056188e+00 + 2.6668282268257446e+00 2.0983250602141155e+00 5.7848169575074353e+00 + 2.7406868178885220e+00 2.1413466183164402e+00 6.2362381574348689e+00 + id 14471 + loc 7.2663944959640503e-01 7.9888248443603516e-01 412 + blend 0.0000000000000000e+00 + interp 3.6557965779074125e-01:2.5729507145326141e-01:7.6240555021170386e-01:2.9219126055679717e-01:1.6763042468578231e+00:3.6295823043347925e-01:2.1150427397838385e+00:2.8608803681871531e-01:3.0000416387147180e+00:3.6557600199416335e-01:3.9815864458880443e+00 + CVs 20 + 7.1771056165506408e-01 2.5625110966361431e-01 -9.3050790250013837e-02 + 1.1785850375339813e+00 4.0013192426760225e-01 -1.5122722160948826e-01 + 1.5734669258213956e+00 4.9415695146121924e-01 -2.0206379781608544e-01 + 2.0063990525803050e+00 5.7456447032333124e-01 -2.5218709746843815e-01 + 2.4707510211384318e+00 6.3431095199427412e-01 -3.0020264036151428e-01 + 2.9563350812821612e+00 6.6859954659021203e-01 -3.4083003434848347e-01 + 3.4559739464615999e+00 6.7628493482573382e-01 -3.6491977237619710e-01 + 3.9632542312139156e+00 6.5762543602892087e-01 -3.6447871422699502e-01 + 4.4671309925947167e+00 6.1363660525024943e-01 -3.3689338516416006e-01 + 4.9640129570173430e+00 5.4490819335184726e-01 -2.8464992964767893e-01 + 5.4906566263436698e+00 4.3796958502102223e-01 -2.0878162442251019e-01 + 6.1027783161994069e+00 2.4207210638580912e-01 -1.2403555119031034e-01 + 6.7751873182293814e+00 -9.7754797922224856e-02 -8.4148031196539852e-02 + 7.4211138264876233e+00 -5.7440623365131960e-01 -1.3813265391051571e-01 + 7.9959966826469318e+00 -1.1541494632673781e+00 -2.9807625864428289e-01 + 8.4814731726638506e+00 -1.8074764882863033e+00 -5.6671428633576204e-01 + 8.8563421906120823e+00 -2.4876188078164057e+00 -9.3936684998279851e-01 + 9.1147789292415702e+00 -3.1246715684013115e+00 -1.3739641983662092e+00 + 9.3168711973827580e+00 -3.5867121733139662e+00 -1.7207976703352998e+00 + id 14472 + loc 4.1692787408828735e-01 3.4826534986495972e-01 404 + blend 0.0000000000000000e+00 + interp 4.3889779439882931e-01:3.0190323838406286e-01:7.3517219956157354e-01:3.0149136535295212e-01:1.1174476247324321e+00:4.3889340542088534e-01:1.6887787248465813e+00:3.7386116691789500e-01:2.1706155604828918e+00:3.4956527113913871e-01:3.0159840702613940e+00:4.2951437758534561e-01:3.9772052243527365e+00 + CVs 20 + -1.4630470597360162e-01 7.0904585440220255e-02 3.3953109808133798e-02 + -2.9710259879361045e-01 1.2804986546848793e-01 8.1842680861934081e-02 + -4.6451540806353403e-01 1.9048190254940406e-01 1.2416061859141597e-01 + -6.4375022875595489e-01 2.5847397851826354e-01 1.5069220031004210e-01 + -8.2432779586179605e-01 3.2666370290832025e-01 1.6144797981233094e-01 + -9.8894135540199923e-01 3.8548973635139427e-01 1.5919063124016786e-01 + -1.1243394755305725e+00 4.2734968609213908e-01 1.4616966318182956e-01 + -1.2260205264017101e+00 4.5149875185760524e-01 1.2174151807690875e-01 + -1.2893738098035223e+00 4.5910015941007920e-01 8.1209563643378724e-02 + -1.3156550280971646e+00 4.5886248184695377e-01 1.8050017308257060e-02 + -1.3139748043399260e+00 4.6190389975397272e-01 -7.5638105766093311e-02 + -1.3174312142949272e+00 4.8090299981261136e-01 -1.9742594078900771e-01 + -1.3707196494053477e+00 5.2019487425407884e-01 -3.2651690719563914e-01 + -1.5067892755512615e+00 5.6776921984034445e-01 -4.3521679952932318e-01 + -1.7260592828546206e+00 6.1560827603420498e-01 -5.0133831759196856e-01 + -1.9888238518063155e+00 6.7578741977356871e-01 -5.2063012012279952e-01 + -2.2548351666783812e+00 7.6024481584959025e-01 -5.0140449652195340e-01 + -2.5176155976925503e+00 8.4959546907466965e-01 -4.1471732357029695e-01 + -2.7442158922735382e+00 8.8375523094822239e-01 -1.8078369949220763e-01 + id 14473 + loc 8.8557857275009155e-01 2.0752541720867157e-01 1069 + blend 0.0000000000000000e+00 + interp 3.9589012090920278e-01:2.7300714092105166e-01:2.2621676627651655e-01:2.3168552660986724e-01:9.7525629516473722e-01:2.7374412811868204e-01:1.8276606328008689e+00:2.4498055600010721e-01:2.9228593569241386e+00:3.9588616200799370e-01:3.5115537095531053e+00 + CVs 20 + -5.7354403537908868e-02 2.1416584075468165e-01 2.7119214860135921e-01 + -1.4970381672367339e-01 3.8473335766394656e-01 5.1110579245269905e-01 + -2.7278973689554742e-01 5.2858261728166567e-01 7.2890905338798717e-01 + -4.2563854958429659e-01 6.5524436939255426e-01 9.2445987657855633e-01 + -6.2991607451924525e-01 7.7478273292659050e-01 1.0937317879339938e+00 + -9.0547907943757622e-01 9.2041796093014550e-01 1.2390385530266734e+00 + -1.2177072922348238e+00 1.1502413610182363e+00 1.3678407295603057e+00 + -1.4812455219784724e+00 1.4852874093700617e+00 1.4838169651170932e+00 + -1.6496112369862366e+00 1.8985815539319235e+00 1.5950993458335474e+00 + -1.7117798882060011e+00 2.3685808942765236e+00 1.7342442797087481e+00 + -1.6441968765229671e+00 2.8546728150326350e+00 1.9683634738490914e+00 + -1.4416252237093403e+00 3.2456469885266808e+00 2.3458218626784628e+00 + -1.1495070515314323e+00 3.4523195420419319e+00 2.8326832931766734e+00 + -8.2396630367554646e-01 3.4615189231604586e+00 3.3563972341202657e+00 + -5.1923930369571747e-01 3.3063405321420261e+00 3.8507767222045000e+00 + -2.6186813089192729e-01 3.0120452350660334e+00 4.3079761124958100e+00 + -7.7140168161211387e-02 2.5371835877615734e+00 4.7409318620847447e+00 + -3.0753911966213465e-02 1.8693277979569998e+00 5.0803078112800550e+00 + -6.7906060172054472e-02 1.5861547544918664e+00 5.1924869548668093e+00 + id 14474 + loc 3.9978331327438354e-01 8.7965124845504761e-01 401 + blend 0.0000000000000000e+00 + interp 4.6203114670759682e-01:3.5559540210855450e-01:1.2104026066493223e-01:4.6202652639612979e-01:9.8011563315432282e-01:3.1001671043486689e-01:1.2529251137857487e+00:3.3699167065622565e-01:2.0133887092160268e+00:3.8503267523745016e-01:2.8615275884008264e+00:3.0758087599836736e-01:3.5062113362012792e+00 + CVs 20 + -9.2407330089497364e-02 3.1174334012176808e-01 -1.7133376601393430e-01 + -1.9649987195074969e-01 6.3798669921036355e-01 -3.6954711255968176e-01 + -3.0918324531836960e-01 9.7856326104132629e-01 -5.9485811464467420e-01 + -4.2490538967596397e-01 1.3187272112933937e+00 -8.5647152105496172e-01 + -5.3929485563631618e-01 1.6197565408262602e+00 -1.1529587878032348e+00 + -6.6144857705497562e-01 1.8475106649472040e+00 -1.4552256939897033e+00 + -8.0917445955066047e-01 1.9965712275842389e+00 -1.7334629841674958e+00 + -9.9244918287911332e-01 2.0733425440259894e+00 -1.9726746298887472e+00 + -1.2124870807252321e+00 2.0803351050127201e+00 -2.1669798657412498e+00 + -1.4726029906969909e+00 2.0175875637720662e+00 -2.3178683689679240e+00 + -1.7742853889516583e+00 1.8819953988405274e+00 -2.4286332265719310e+00 + -2.1078381415683891e+00 1.6647737206423414e+00 -2.5101318042799670e+00 + -2.4420066990169698e+00 1.3602302186167989e+00 -2.5775773794944010e+00 + -2.7447107091976819e+00 9.8658363517656256e-01 -2.6308123066144655e+00 + -3.0413796413181649e+00 5.6024937474139413e-01 -2.6789196285005912e+00 + -3.4143599925177455e+00 5.7784307689993986e-02 -2.8154303685240372e+00 + -3.8813364835428961e+00 -4.9413505345799447e-01 -3.2038809928881884e+00 + -4.2973356245582242e+00 -9.5302863043741470e-01 -3.8081422638629108e+00 + -4.5626811794798376e+00 -1.3051117092420397e+00 -4.1433659356210830e+00 + id 14475 + loc 2.2302223369479179e-02 6.9536507129669189e-01 378 + blend 0.0000000000000000e+00 + interp 4.0015400139045748e-01:2.8260959047821405e-01:4.1490482158602626e-03:3.4338091787773400e-01:5.8182698986441839e-01:2.5516115652748184e-01:1.0145098033130648e+00:4.0014999985044358e-01:1.4871071006268419e+00:3.9072337237430577e-01:1.9764593806411268e+00:2.4308425205526013e-01:2.2730113040352569e+00:3.3349573696865059e-01:3.0000134185116485e+00 + CVs 20 + 6.0416996394639744e-01 3.3557512279380758e-01 2.6883138091620995e-01 + 1.1312103425050715e+00 5.7107740351308445e-01 4.3942783473042579e-01 + 1.6532758874128923e+00 7.5220458678014079e-01 5.8969352994674573e-01 + 2.2063615526275790e+00 9.0574774424917615e-01 7.7195690653748850e-01 + 2.7824696527324102e+00 1.0256266220448857e+00 1.0148023520907503e+00 + 3.3622622290113782e+00 1.0874813272834909e+00 1.3356560212113504e+00 + 3.9226683000237959e+00 1.0596526641595658e+00 1.7376066533653836e+00 + 4.4341535537039247e+00 9.1871140676996088e-01 2.2083643507731425e+00 + 4.8639352773789266e+00 6.5642573337558163e-01 2.7150425238147928e+00 + 5.1890852666999852e+00 2.7979951505667255e-01 3.2055774543593758e+00 + 5.3938412834661378e+00 -1.9467611822054876e-01 3.6246490543773406e+00 + 5.4566205553619564e+00 -7.3797708235510084e-01 3.9274593480251028e+00 + 5.3726696386821331e+00 -1.2971682735844214e+00 4.1018420272420819e+00 + 5.2053334443341992e+00 -1.8255120980502206e+00 4.2157342074600361e+00 + 5.0659932310720368e+00 -2.3388127435409167e+00 4.3948994389199108e+00 + 5.0362636503981779e+00 -2.8654019521701022e+00 4.6923962029045603e+00 + 5.1825584374525064e+00 -3.4022633272795995e+00 5.0506810641372351e+00 + 5.5288136478375147e+00 -3.9210425404889935e+00 5.3774255551906878e+00 + 5.6185806966666760e+00 -4.2956253475050685e+00 5.6509140878043329e+00 + id 14476 + loc 2.7110281586647034e-01 9.5525348186492920e-01 1079 + blend 0.0000000000000000e+00 + interp 5.6020309995882545e-01:5.1070778971328834e-01:1.3300741489051804e-02:5.6019749792782592e-01:5.8203780365652058e-01:4.7736593802316174e-01:1.0130903915381344e+00:2.7029573135053808e-01:1.6461233914054676e+00:3.5253735628913274e-01:2.1927057550285753e+00:3.5033424443735806e-01:2.9307287409632785e+00:3.4956674268566623e-01:3.3776526327357539e+00 + CVs 20 + 1.2928395084836847e-01 4.0075674383633464e-01 1.5204535955306897e-01 + 2.7704253774933968e-01 7.5980180380774653e-01 2.4063123301479622e-01 + 4.4008293047393343e-01 1.1046140007108294e+00 3.0491773945381556e-01 + 6.1948233829682620e-01 1.4419365862370275e+00 3.5588972507930061e-01 + 8.1863871968760682e-01 1.7635120473925936e+00 3.8319280751532792e-01 + 1.0409010734171298e+00 2.0580899605151970e+00 3.6858275089611514e-01 + 1.2849829690659353e+00 2.3106073561266198e+00 2.9249011582929596e-01 + 1.5418258606708357e+00 2.5056366219114810e+00 1.4718606307104964e-01 + 1.7987926848015587e+00 2.6309643245764924e+00 -6.1551493003908941e-02 + 2.0439736121754235e+00 2.6806608704295618e+00 -3.1884214983887538e-01 + 2.2692349361761517e+00 2.6573640675033601e+00 -6.0647408425069194e-01 + 2.4710917739912439e+00 2.5701519414026142e+00 -9.0903387506689104e-01 + 2.6497772872635497e+00 2.4301171277223550e+00 -1.2156669216009022e+00 + 2.8079512051975777e+00 2.2456731060901856e+00 -1.5189062636029020e+00 + 2.9495271830781262e+00 2.0074859096704407e+00 -1.8140308994197516e+00 + 3.0772348570839121e+00 1.6543084288857939e+00 -2.0853389773239854e+00 + 3.1821447308649002e+00 1.1066799731587180e+00 -2.2459905424662066e+00 + 3.2401628282813735e+00 4.9898946913213726e-01 -2.2182148462000475e+00 + 3.2587537088014913e+00 1.7998944389560823e-01 -2.2688016975966505e+00 + id 14477 + loc 1.8255271017551422e-01 6.6948676109313965e-01 412 + blend 0.0000000000000000e+00 + interp 3.1108075677217961e-01:2.8264114556942199e-01:5.3897267176305730e-01:2.7336345401479650e-01:1.1468044116088221e+00:3.1107764596461190e-01:1.9753474008684448e+00:2.4779586512956009e-01:2.9069045282523089e+00:2.9398156198546960e-01:3.7107180195728660e+00 + CVs 20 + 7.0850040467660780e-01 2.2309610322892276e-01 -1.1870529981284619e-01 + 1.1912987374705839e+00 3.2526827638850581e-01 -2.4548982244599651e-01 + 1.6302117909616203e+00 3.8302096340566927e-01 -3.7130532774602465e-01 + 2.1076386422469517e+00 4.2601931180704644e-01 -4.9249696495195372e-01 + 2.6140911426300684e+00 4.4247364879814310e-01 -6.0207382725517267e-01 + 3.1370264068123785e+00 4.2412939038545694e-01 -6.9016742891129368e-01 + 3.6624068951476154e+00 3.6753838807022055e-01 -7.4733731355501476e-01 + 4.1753346225598698e+00 2.7377106766804060e-01 -7.6913256307234090e-01 + 4.6621339176316932e+00 1.4899051932278806e-01 -7.5573454890937874e-01 + 5.1125871255119009e+00 1.9353252109928221e-03 -7.1051924259807941e-01 + 5.5186547174274025e+00 -1.6612868837281414e-01 -6.4566581921970378e-01 + 5.8735369776169657e+00 -3.6093412261474911e-01 -5.8757095600629439e-01 + 6.1744726015112770e+00 -5.8426509900116419e-01 -5.5863106416893671e-01 + 6.4290099120554016e+00 -8.3285571146554993e-01 -5.6041655832464232e-01 + 6.6442425649437116e+00 -1.1019228514100545e+00 -5.8871731542449290e-01 + 6.8200377308041800e+00 -1.3783171908034288e+00 -6.3417727273013413e-01 + 6.9598662558125604e+00 -1.6494481883713299e+00 -6.8413855418089031e-01 + 7.0735030355676143e+00 -1.9125992542647792e+00 -7.3205171228226540e-01 + 7.1747268555082524e+00 -2.1769493355600340e+00 -7.7884224597330731e-01 + id 14478 + loc 6.9343143701553345e-01 4.9268296360969543e-01 399 + blend 0.0000000000000000e+00 + interp 4.2105498875390057e-01:4.2105077820401304e-01:5.8492002528322651e-01:2.9116960514369178e-01:1.6014297574137586e+00:3.2965622477175605e-01:2.1262442963823998e+00:3.2027986195237285e-01:2.9311340961535026e+00:3.0796599160952515e-01:3.9181736997558616e+00 + CVs 20 + 1.1203816452530876e-01 2.9074316362839076e-01 2.2619978624529188e-01 + 2.3731412379737943e-01 5.6985019034390638e-01 4.5162102301087087e-01 + 3.5058206767965688e-01 8.3033926324761964e-01 7.0500295497423404e-01 + 4.4843255051489228e-01 1.0716835412906083e+00 9.9013287809711414e-01 + 5.4255875932506892e-01 1.2983021800368044e+00 1.2949027860443569e+00 + 6.4397171314858770e-01 1.5137074350787447e+00 1.6079686914938229e+00 + 7.6001869222805518e-01 1.7171268627882967e+00 1.9227140117386030e+00 + 8.9558307484967403e-01 1.9050392079482501e+00 2.2359639002692075e+00 + 1.0565086755591093e+00 2.0767252848035889e+00 2.5487445535675182e+00 + 1.2503339549847163e+00 2.2264983823637938e+00 2.8721178015372208e+00 + 1.4825464562409638e+00 2.3323110979171582e+00 3.2161678483236829e+00 + 1.7483845758895862e+00 2.3647402758066960e+00 3.5623666079844813e+00 + 2.0335593348853780e+00 2.3243933159009922e+00 3.8711337936668104e+00 + 2.3195760938897680e+00 2.2447586838950562e+00 4.1115280886281118e+00 + 2.5902989138798120e+00 2.1632197987200228e+00 4.2703573943818665e+00 + 2.8695230365470845e+00 2.0799470179740651e+00 4.3793197264181041e+00 + 3.2074960989878525e+00 1.9690311013585582e+00 4.5365330725634410e+00 + 3.5342765791978961e+00 1.8838548223385660e+00 4.8627581859069124e+00 + 3.6422965776019613e+00 1.9750507323621029e+00 5.2751837327175624e+00 + id 14479 + loc 4.0700909495353699e-01 8.8833338022232056e-01 400 + blend 0.0000000000000000e+00 + interp 3.0050608076885771e-01:2.8724819198201623e-01:5.6370548697887668e-01:2.7292599680534840e-01:1.0824102709839538e+00:2.6993756169647959e-01:2.0601392353934367e+00:3.0050307570805002e-01:3.0294448521575728e+00:2.5958058505937953e-01:3.9829478346994236e+00 + CVs 20 + -2.0342162642037775e-01 2.8142828901048528e-01 -7.0930115487005035e-02 + -4.3423198925831674e-01 5.7439980885189013e-01 -1.5204028681324025e-01 + -6.7086590114704636e-01 8.8455223615176182e-01 -2.7835717776534774e-01 + -8.9643460113791362e-01 1.1946337659116302e+00 -4.6354703038864009e-01 + -1.1129411079380389e+00 1.4878276487973936e+00 -7.0738800546508307e-01 + -1.3206124872923126e+00 1.7531625555093209e+00 -1.0107363788941448e+00 + -1.5126754516439280e+00 1.9826374643537370e+00 -1.3759479702679416e+00 + -1.6777064018121337e+00 2.1665874836444270e+00 -1.8037571620558350e+00 + -1.8021340694469963e+00 2.2934420135948530e+00 -2.2906278215696325e+00 + -1.8709436667195689e+00 2.3530523004705435e+00 -2.8238126956724283e+00 + -1.8735441698931465e+00 2.3404344324299244e+00 -3.3709739396269689e+00 + -1.8194924773803298e+00 2.2620314563261781e+00 -3.8894483120521048e+00 + -1.7388761037917657e+00 2.1325909463579524e+00 -4.3548217873416677e+00 + -1.6640334247139363e+00 1.9632711655328872e+00 -4.7607830297791711e+00 + -1.6180860525602490e+00 1.7601823797814182e+00 -5.0984337115124063e+00 + -1.6113770393561606e+00 1.5311022296484653e+00 -5.3631123648725980e+00 + -1.6479689778708930e+00 1.2836948608048286e+00 -5.5682885616666908e+00 + -1.7326429564235004e+00 1.0191384778413111e+00 -5.7358154180941030e+00 + -1.8814093358247606e+00 6.7267226987592021e-01 -5.9484661119323166e+00 + id 14480 + loc 6.5496402978897095e-01 2.5194695591926575e-01 393 + blend 0.0000000000000000e+00 + interp 4.7515644291045306e-01:3.1044591889559109e-01:9.0741812549181011e-02:3.2341330555864473e-01:1.2526245896397306e+00:4.1815517003270641e-01:2.0047779361165152e+00:2.9620810821858606e-01:2.8438415702959956e+00:4.7515169134602397e-01:3.3483761579263369e+00 + CVs 20 + 2.5204590371833857e-01 3.4130220044315790e-01 1.9015195068898783e-01 + 4.9437707239449058e-01 6.9181718185027274e-01 3.8259414185864460e-01 + 7.1313193032879518e-01 1.0626976251619413e+00 5.8114978263691208e-01 + 9.0137694859761353e-01 1.4381859242681687e+00 8.0081156779916296e-01 + 1.0647571041234793e+00 1.7885858647039741e+00 1.0728665718381551e+00 + 1.2089284549060593e+00 2.1015175400957706e+00 1.4231349769275539e+00 + 1.3344584236421713e+00 2.3835279737821278e+00 1.8596839190085683e+00 + 1.4538705549441022e+00 2.6376579236054969e+00 2.3803529620868749e+00 + 1.5965798087722916e+00 2.8503082285728865e+00 2.9719559519499423e+00 + 1.7935557890101834e+00 2.9957728001313026e+00 3.6089338637211985e+00 + 2.0628365577971941e+00 3.0457291039000558e+00 4.2561009301784649e+00 + 2.4028981049911966e+00 2.9788356906694702e+00 4.8752343985319744e+00 + 2.7989127981552344e+00 2.7844709344589043e+00 5.4354304349535791e+00 + 3.2399844467238061e+00 2.4557360986148895e+00 5.9046781298940809e+00 + 3.7183796071264936e+00 2.0084902959355548e+00 6.2362747803055374e+00 + 4.2131194086157171e+00 1.5282795710826185e+00 6.3959711469417506e+00 + 4.6832891972557888e+00 1.1295420553643880e+00 6.4206822737933864e+00 + 5.1083283869121425e+00 8.4753761254294124e-01 6.3918767997018930e+00 + 5.4654517106902336e+00 7.1503101994925089e-01 6.3661790475052449e+00 + id 14481 + loc 5.8783918619155884e-01 2.3592934012413025e-01 404 + blend 0.0000000000000000e+00 + interp 4.0105379975265559e-01:2.8008740722528785e-01:3.4153636686308864e-01:3.0513295924372080e-01:9.9963464488902953e-01:2.8940557474988216e-01:1.9406318006039078e+00:3.3731560866601945e-01:2.4202214594039062e+00:3.0674144093023975e-01:3.0739680765245443e+00:4.0104978921465806e-01:3.9979173016825111e+00 + CVs 20 + -3.4630534230589247e-02 2.3372208841158493e-01 1.8161108363124950e-01 + -6.4948201963236724e-02 4.5940743365243042e-01 3.5315762376123072e-01 + -1.0533698354987253e-01 6.8704137184169967e-01 5.2806474820437299e-01 + -1.5867627859927275e-01 9.1989622442841879e-01 7.1240250039855701e-01 + -2.2009046398911264e-01 1.1546316636601184e+00 9.0778029198623544e-01 + -2.7935983900529870e-01 1.3848151085949392e+00 1.1173395630766441e+00 + -3.2150938214682312e-01 1.6011235208904933e+00 1.3423607603689425e+00 + -3.3188758529877360e-01 1.7937515567320657e+00 1.5788626526390637e+00 + -2.9881622868925151e-01 1.9534902858110617e+00 1.8163427849715501e+00 + -2.1794843685818743e-01 2.0733718069105214e+00 2.0432034215628097e+00 + -9.2695494448390869e-02 2.1483424750741720e+00 2.2491237379791187e+00 + 6.4035344945071238e-02 2.1794401605278808e+00 2.4225013518498657e+00 + 2.3184549758615502e-01 2.1762068418007621e+00 2.5640878765425583e+00 + 3.9205238311599055e-01 2.1530670957978599e+00 2.6687797687973149e+00 + 5.2827973264769446e-01 2.1238890421435048e+00 2.7276088241726009e+00 + 6.3577602547969270e-01 2.0878727462831068e+00 2.7529709674605178e+00 + 7.3116845141250053e-01 2.0316784491979281e+00 2.7759848149408226e+00 + 8.2610603464549937e-01 1.9553211350285236e+00 2.8126992037489673e+00 + 9.3437342261275247e-01 1.8875635173839531e+00 2.9001154867133532e+00 + id 14482 + loc 1.1924482882022858e-01 6.2096279859542847e-01 401 + blend 0.0000000000000000e+00 + interp 4.0921099862582999e-01:3.1851492578521778e-01:9.0048240467372143e-02:3.4446609313460563e-01:9.1540940421576578e-01:4.0920690651584374e-01:1.4410088073871681e+00:3.1747365132380873e-01:2.3056934783933003e+00:3.7484976482846089e-01:2.9988788715188330e+00:3.2152389969138417e-01:3.6298896626809194e+00 + CVs 20 + -4.6320444970388966e-02 2.6797358740407551e-01 -2.9379757613776375e-01 + -1.1333910115191739e-01 5.1782632325397526e-01 -5.7931026490849813e-01 + -2.0379981045160173e-01 7.4258792705540477e-01 -8.6799638119477551e-01 + -3.1953927984542596e-01 9.3136623546585595e-01 -1.1602571199901164e+00 + -4.6035205296084375e-01 1.0720100628187896e+00 -1.4466414339385447e+00 + -6.2323594541466343e-01 1.1563834227957144e+00 -1.7124039906872512e+00 + -8.0273200728168081e-01 1.1841893289663541e+00 -1.9438313384000512e+00 + -9.9203201321730661e-01 1.1620905590651804e+00 -2.1353167089855716e+00 + -1.1833119216377965e+00 1.0993377895262084e+00 -2.2876359667080686e+00 + -1.3704343850230158e+00 1.0042935891659606e+00 -2.4062691624938042e+00 + -1.5463995961398611e+00 8.8278511814848404e-01 -2.4988417586100060e+00 + -1.6976928608459179e+00 7.4363741204719558e-01 -2.5704813526787968e+00 + -1.8147836324076001e+00 6.0036433813596679e-01 -2.6259795619753192e+00 + -1.9059277787245068e+00 4.5379187839682616e-01 -2.6734553990771306e+00 + -1.9878695542194269e+00 2.9764267434425701e-01 -2.7107513480290546e+00 + -2.0936366097652166e+00 1.1665051138113991e-01 -2.7074308902585771e+00 + -2.2017030293836384e+00 -4.9158624912937321e-02 -2.6625107748624370e+00 + -2.3030926558555107e+00 -1.6268386136345780e-01 -2.5696334048310763e+00 + -2.4841009822032780e+00 -2.4144381768107182e-01 -2.2375677277812187e+00 + id 14483 + loc 7.5423866510391235e-01 8.7874603271484375e-01 1069 + blend 0.0000000000000000e+00 + interp 4.4282879893679011e-01:3.1602673803841058e-01:2.0507190983852430e-01:3.0240874208060303e-01:9.7649465888043130e-01:2.6528495206992914e-01:1.6990864791613283e+00:4.4282437064880076e-01:2.6412926058149395e+00:2.7875057763701572e-01:3.1362707163803361e+00 + CVs 20 + 2.2479609988929403e-01 3.2131077058282759e-01 -1.6554722596452848e-01 + 4.5082622954351215e-01 6.5548652374262018e-01 -3.4870669559212331e-01 + 6.9858534957641383e-01 9.6676786109196866e-01 -5.1046377951287947e-01 + 9.7295787656965294e-01 1.2211614812013867e+00 -6.4478436466361022e-01 + 1.2630363916757694e+00 1.4043137188358190e+00 -7.6656943594499427e-01 + 1.5426505010188232e+00 1.5122868779531775e+00 -8.9273991086503846e-01 + 1.7879685717839644e+00 1.5485720732146362e+00 -1.0297224740903699e+00 + 2.0036793417695518e+00 1.5245720154417186e+00 -1.1738680514052433e+00 + 2.2168967516182709e+00 1.4420955770645953e+00 -1.3212903122020778e+00 + 2.4497505731636902e+00 1.2829595047340152e+00 -1.4671173523394874e+00 + 2.7053328921784887e+00 1.0147357999295368e+00 -1.5973174366858298e+00 + 2.9606912142432020e+00 6.0789342982888006e-01 -1.6803773617668918e+00 + 3.1738100555088242e+00 5.7353953426791893e-02 -1.6622131249050225e+00 + 3.3179245267426931e+00 -5.9385468978148936e-01 -1.4796771814979368e+00 + 3.4278991080872245e+00 -1.2523379285443488e+00 -1.0882793823228005e+00 + 3.5826717281746281e+00 -1.8081570241567677e+00 -4.7520740701746378e-01 + 3.8383048022128232e+00 -2.1415859995163125e+00 2.9487375263877413e-01 + 4.1654101138083686e+00 -2.2025808735436878e+00 1.0265726231110042e+00 + 4.4446240832583497e+00 -2.1121541209491967e+00 1.4404757787589140e+00 + id 14484 + loc 4.9855217337608337e-01 5.0416880846023560e-01 378 + blend 0.0000000000000000e+00 + interp 4.4684769603492863e-01:2.8028290008435219e-01:8.8524733941396871e-01:4.4684322755796829e-01:1.4734364990637387e+00:2.7949484757771081e-01:2.1112853972485000e+00:3.5874288189728804e-01:2.9091425235234794e+00:2.6734158539563085e-01:3.5604515756007267e+00 + CVs 20 + 4.5800746918927454e-01 3.3718171560033816e-01 1.1869730203212425e-01 + 8.8298561687780763e-01 6.1373885316287735e-01 1.7917085527761836e-01 + 1.3184527455225181e+00 8.5337610482578596e-01 2.0582890345998794e-01 + 1.7853721754681551e+00 1.0804028160561643e+00 2.2284387878189083e-01 + 2.2797100705575919e+00 1.3014244090360807e+00 2.5750968174560263e-01 + 2.7978660793863139e+00 1.5044135367378082e+00 3.3798145712010497e-01 + 3.3358050635744148e+00 1.6634997903888489e+00 4.8519104384009848e-01 + 3.8794946151084968e+00 1.7522504898444713e+00 7.0783140081981410e-01 + 4.4037996511761177e+00 1.7481067816026779e+00 9.9570689815230085e-01 + 4.8860072636606882e+00 1.6293939254592935e+00 1.3161929502355303e+00 + 5.3061635489937009e+00 1.3821749363589442e+00 1.6201609344783843e+00 + 5.6402710977352202e+00 1.0077237356017914e+00 1.8543286790577933e+00 + 5.8705646606748259e+00 5.3493989931336161e-01 1.9819551611457573e+00 + 6.0307135314820890e+00 6.2567202069718775e-03 2.0253393749235982e+00 + 6.2051074824128989e+00 -5.6356645202871691e-01 2.0611220308660050e+00 + 6.4617983982153513e+00 -1.1401545211166679e+00 2.1309157330743482e+00 + 6.8189009904909241e+00 -1.6307549789818103e+00 2.1860779469124765e+00 + 7.2225250075479757e+00 -1.9863876839923815e+00 2.1699355085527086e+00 + 7.5074935562975291e+00 -2.4069711326121044e+00 2.2346937028900014e+00 + id 14485 + loc 2.9641163349151611e-01 3.7027084827423096e-01 412 + blend 0.0000000000000000e+00 + interp 3.0498028775369623e-01:2.8703135318161721e-01:4.2969418753382449e-01:2.8907037419465292e-01:1.1041436853524371e+00:2.7413082122621218e-01:1.9968324963650899e+00:2.6117601580705618e-01:2.9771099420169440e+00:3.0497723795081871e-01:3.8375516896075430e+00 + CVs 20 + -1.1992987599573629e-01 1.3882891085988569e-01 -5.7931872553245589e-01 + -2.1078576834850887e-01 1.7103208303327230e-01 -9.7851073368741326e-01 + -2.7301021595718289e-01 1.6238890216928697e-01 -1.3234073594855720e+00 + -3.0269872191186387e-01 1.4327255311136777e-01 -1.6691772826260913e+00 + -2.9830094026894938e-01 1.1417726785924298e-01 -2.0054973225478046e+00 + -2.6115017447772926e-01 7.7647577883661945e-02 -2.3224127452840451e+00 + -1.9491975919555810e-01 3.7921198698657843e-02 -2.6140592663911630e+00 + -1.0549688961037867e-01 -1.1643015839755133e-03 -2.8803123848258574e+00 + -1.2198112336654354e-03 -3.8038212193626020e-02 -3.1235448691063010e+00 + 1.0989671613267099e-01 -7.2581223513751292e-02 -3.3475307840139736e+00 + 2.3172247072147512e-01 -1.0299171909304428e-01 -3.5682041319856062e+00 + 3.8669615227802612e-01 -1.3246497226126408e-01 -3.8257759510948275e+00 + 5.7485289731328570e-01 -1.9140072909742178e-01 -4.1590997667656957e+00 + 7.3574859527366787e-01 -3.2134904900602357e-01 -4.5530223880790466e+00 + 8.1457831984827300e-01 -5.2911586031037761e-01 -4.9616492237415173e+00 + 8.0164778961889149e-01 -8.0449078806701824e-01 -5.3599087513424442e+00 + 6.9901242468327407e-01 -1.1365736531691364e+00 -5.7291017144377694e+00 + 5.0804386555197256e-01 -1.4986526380640941e+00 -6.0405974236867639e+00 + 2.5576265498790141e-01 -1.8035706899685151e+00 -6.2281215412613431e+00 + id 14486 + loc 2.3177911341190338e-01 2.4843384325504303e-01 399 + blend 0.0000000000000000e+00 + interp 3.9296157667720716e-01:2.9350289767160609e-01:3.5505433563883793e-01:3.4062232429361561e-01:1.2240114275787950e+00:2.9650842716821774e-01:2.0402644176103459e+00:3.1319177960547923e-01:2.9763753935961663e+00:3.6572490146776426e-01:3.4867459871076116e+00:3.9295764706144043e-01:3.9899887605277771e+00 + CVs 20 + -1.7970529864414514e-01 1.1679426199509603e-01 2.0839251972474421e-01 + -3.6448879750395574e-01 2.3496704174262809e-01 3.9949612219544295e-01 + -5.6356623745245871e-01 3.5404001802249230e-01 5.6093879317753936e-01 + -7.8632805792565230e-01 4.7607247474754821e-01 6.8523657196239085e-01 + -1.0285801228728650e+00 6.0696204105818619e-01 7.7932206281928484e-01 + -1.2760793791708089e+00 7.5044898669301763e-01 8.5476817687259488e-01 + -1.5171279914135127e+00 9.0455704274854409e-01 9.1638564417596513e-01 + -1.7455926283962326e+00 1.0632157722454481e+00 9.6576432106906251e-01 + -1.9654881250017431e+00 1.2178235529096959e+00 1.0114717773942619e+00 + -2.1893220063557779e+00 1.3545878161657199e+00 1.0672329498342636e+00 + -2.4378056494681370e+00 1.4379265416723446e+00 1.1564074675903557e+00 + -2.7221935121576455e+00 1.4078915588190881e+00 1.3013359737486638e+00 + -3.0271766167860301e+00 1.2419254967098778e+00 1.4947677959587953e+00 + -3.3447160047946434e+00 9.8213994868928800e-01 1.7161298868155730e+00 + -3.6936737987710382e+00 7.2981332706835744e-01 1.9340159539318491e+00 + -4.0577148021522955e+00 6.2246565308322710e-01 2.0598247610890175e+00 + -4.3115486645180043e+00 7.2608762094872403e-01 1.9880654569270046e+00 + -4.4771440335149624e+00 9.1248770412448132e-01 1.8216338554843758e+00 + -4.9848620445433713e+00 1.0556489405177825e+00 1.7449066235928909e+00 + id 14487 + loc 3.7892752885818481e-01 5.4727053642272949e-01 400 + blend 0.0000000000000000e+00 + interp 4.9932921279015030e-01:4.9932421949802241e-01:4.5819990414159062e-01:2.7558239949422897e-01:9.9575373818966928e-01:2.8330974274642728e-01:1.8771412469349198e+00:2.9816751027076382e-01:2.5062367277285937e+00:2.5793935035807408e-01:3.7065715610058656e+00 + CVs 20 + -2.4530232515453995e-01 3.2258032414891102e-01 -1.5013696778407179e-01 + -4.7970609511315243e-01 6.5256197475860478e-01 -2.9896211326832145e-01 + -7.1078510533560224e-01 9.9152982022669556e-01 -4.7795836126687069e-01 + -9.4033688856954412e-01 1.3343585521113741e+00 -7.0159106266022953e-01 + -1.1661902637177384e+00 1.6707598286699710e+00 -9.7176846344964329e-01 + -1.3865394791095040e+00 1.9901238069059692e+00 -1.2871285703827373e+00 + -1.5990695933978285e+00 2.2823438161569114e+00 -1.6478284754654529e+00 + -1.7976930113730583e+00 2.5367732278809805e+00 -2.0565759437831188e+00 + -1.9696032641877490e+00 2.7435305269131014e+00 -2.5150645239716347e+00 + -2.0994559291353649e+00 2.8933325287698994e+00 -3.0197629080950801e+00 + -2.1759846077922567e+00 2.9790350681153401e+00 -3.5568560814431449e+00 + -2.2014272366933580e+00 2.9984937969847496e+00 -4.1072469357465753e+00 + -2.1941289515215918e+00 2.9464984976283213e+00 -4.6680496792214443e+00 + -2.1850371095268826e+00 2.7998670488214166e+00 -5.2517354943087371e+00 + -2.2152342108338896e+00 2.5297609055270813e+00 -5.8436584618484311e+00 + -2.3200290976713633e+00 2.1463522614374808e+00 -6.3866182457637990e+00 + -2.5128273357051518e+00 1.6989788960247401e+00 -6.8382324570755344e+00 + -2.7823789984929457e+00 1.2300121573060920e+00 -7.1967586105139389e+00 + -3.0253738095057785e+00 7.9428951596953867e-01 -7.4888290242053799e+00 + id 14488 + loc 1.0487198829650879e-01 9.8484307527542114e-01 393 + blend 0.0000000000000000e+00 + interp 3.5531510111081122e-01:3.4942025086393919e-01:1.0372555803624692e+00:3.3757804257278584e-01:1.1763848508358086e+00:3.4056471888172729e-01:2.0007938051381977e+00:3.5531154795980013e-01:2.9555152116671310e+00:3.0003606115715964e-01:3.9447969867014647e+00 + CVs 20 + -2.0496447445380234e-01 2.8722469878609735e-01 -9.2585069752407920e-02 + -4.1088904547858174e-01 5.8063668728093032e-01 -1.9382030261881394e-01 + -5.9335295288228052e-01 8.7983139963187273e-01 -3.0212305867506223e-01 + -7.4439748811737427e-01 1.1823519576989230e+00 -4.1374575253784918e-01 + -8.7490634762179353e-01 1.4890763449930637e+00 -5.2491872600108558e-01 + -9.9944256099418283e-01 1.8041388074043436e+00 -6.3278835634273833e-01 + -1.1328319842790209e+00 2.1359807269555486e+00 -7.3398783534839696e-01 + -1.3015596511880154e+00 2.4902861564429180e+00 -8.2118685584491646e-01 + -1.5528501279018041e+00 2.8395430576500864e+00 -8.7925680861130384e-01 + -1.9137053855624178e+00 3.1278364180888198e+00 -9.0067943989853838e-01 + -2.3660283744642130e+00 3.3383913856202998e+00 -9.1776200775167149e-01 + -2.8787852222931396e+00 3.4841241697449337e+00 -9.8157115793481364e-01 + -3.4286257211087259e+00 3.5415930392256572e+00 -1.1032201891993434e+00 + -3.9847641573160506e+00 3.4592595681947640e+00 -1.2559247833098857e+00 + -4.4823469115827566e+00 3.2286534615252203e+00 -1.4275476781259182e+00 + -4.8440030754489785e+00 2.9114840126026307e+00 -1.6077565013395614e+00 + -5.0717565342037760e+00 2.5773001363330716e+00 -1.7492508704470480e+00 + -5.2704040703087118e+00 2.2259095527657577e+00 -1.7945818981750450e+00 + -5.5715235842042308e+00 1.8017698519351959e+00 -1.7035384848703050e+00 + id 14489 + loc 8.0501623451709747e-02 4.5719486474990845e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5944898030103876e-01:4.5944438581123576e-01:4.3044963453564100e-01:2.9560384299802644e-01:1.0044354291031732e+00:3.2932919972823271e-01:1.9997396833616414e+00:3.3702966461614370e-01:2.6200966044282250e+00:4.5004597052516943e-01:3.0603531364987195e+00:4.1768742477911391e-01:3.8356604605215336e+00 + CVs 20 + 2.9347761796357114e-01 4.7990740192624315e-01 -9.9999423858865288e-04 + 4.8356640838374493e-01 8.7800175867527663e-01 -6.8687265526453628e-02 + 6.3633343552532118e-01 1.2467512933104099e+00 -1.6428477307575240e-01 + 7.7030963450486190e-01 1.6046303332461380e+00 -2.7507493455995857e-01 + 8.6976152288684427e-01 1.9457118547513583e+00 -4.0127631370025252e-01 + 9.1082455486748382e-01 2.2633388511581769e+00 -5.4281662942429221e-01 + 8.6410664451278729e-01 2.5427058337922075e+00 -6.9783144402952113e-01 + 7.1122574482120693e-01 2.7539308155447015e+00 -8.5681105518706790e-01 + 4.6785013486064875e-01 2.8577199822528638e+00 -9.9937698630933769e-01 + 1.9090319319357452e-01 2.8415964558137148e+00 -1.1060841860869979e+00 + -7.1495403501910193e-02 2.7359867130901909e+00 -1.1749371964938788e+00 + -3.0717347658726646e-01 2.5733645999187718e+00 -1.2125587582677078e+00 + -5.1667806165952335e-01 2.3699652192212932e+00 -1.2228786445090967e+00 + -6.9822786639701429e-01 2.1312521981474974e+00 -1.2065687617915550e+00 + -8.3936660062294455e-01 1.8513380995026216e+00 -1.1604868471348915e+00 + -8.9746203338021813e-01 1.5232247200196873e+00 -1.0785662230515554e+00 + -8.2320983712222395e-01 1.1908248065403542e+00 -9.5959330447189284e-01 + -6.6477719056728724e-01 9.1459377696361444e-01 -8.0357149336501887e-01 + -5.1470813911765068e-01 6.6674092647027972e-01 -5.9945756927254645e-01 + id 14490 + loc 5.5374348163604736e-01 8.2733944058418274e-02 404 + blend 0.0000000000000000e+00 + interp 4.7544980591199398e-01:3.0352220047679268e-01:4.3221662890677137e-01:4.7544505141393489e-01:1.0705739946906889e+00:3.3933225823663310e-01:1.8019889671673486e+00:4.7398323824094174e-01:2.1284355006277087e+00:4.5285359043261314e-01:2.9098840580751557e+00:2.7336639085972725e-01:3.8938093831157818e+00 + CVs 20 + 6.2301168947568042e-03 1.8371287609942266e-01 2.0538436186655812e-01 + 7.7339628472773425e-03 3.6344642184128240e-01 4.1090469572457616e-01 + 6.6669566930988577e-03 5.3954678023287661e-01 6.2236314408558191e-01 + 5.7953447849898310e-03 7.1378131978513848e-01 8.4139869833446612e-01 + 9.3727639513912497e-03 8.8572845758120211e-01 1.0653950961498215e+00 + 2.5074835033670917e-02 1.0508109018477385e+00 1.2919014100702531e+00 + 6.2774935173368185e-02 1.2013429384580125e+00 1.5181204467727072e+00 + 1.2990867489433533e-01 1.3305155032624452e+00 1.7395746559444145e+00 + 2.2914499485903739e-01 1.4337255038946624e+00 1.9492346902345203e+00 + 3.5927659888115637e-01 1.5076361332280510e+00 2.1387731476906491e+00 + 5.1580563105860633e-01 1.5488906795184225e+00 2.3029927298318080e+00 + 6.9111933052864682e-01 1.5545684047718074e+00 2.4359191064974852e+00 + 8.7564176757644729e-01 1.5281446147054676e+00 2.5424821424693929e+00 + 1.0625610624889057e+00 1.4779847537574822e+00 2.6260096420449193e+00 + 1.2478252715408804e+00 1.4164325457727722e+00 2.6795156323999674e+00 + 1.4260406576325866e+00 1.3471947109892015e+00 2.6942133551153495e+00 + 1.5864022807102083e+00 1.2519884409039719e+00 2.6736261050768944e+00 + 1.7136760672856257e+00 1.1071675826901077e+00 2.6338124834101624e+00 + 1.9212124456702067e+00 9.7957774903182382e-01 2.7150391339757505e+00 + id 14491 + loc 2.8467711526900530e-03 7.6422905921936035e-01 1069 + blend 0.0000000000000000e+00 + interp 4.2030867779187903e-01:4.2030447470510113e-01:2.1888373494704771e-01:3.8289835904014546e-01:9.8042358410937624e-01:3.8655914552108950e-01:1.5641051246852236e+00:3.9980220252886234e-01:2.0022618475462788e+00:2.7653204959576350e-01:2.8896913023852218e+00:2.8438375441377595e-01:3.9902259137946947e+00 + CVs 20 + 2.0031873595184790e-01 2.1616341270627376e-01 -1.4684438155138146e-01 + 3.9244361764702601e-01 4.5721328730960226e-01 -3.1327335856383370e-01 + 5.7709262126980687e-01 7.1518503371185416e-01 -4.7277837632418174e-01 + 7.4654147223173173e-01 9.8345518640641016e-01 -6.2330385327655857e-01 + 8.8783454521272542e-01 1.2570570327324162e+00 -7.7633662408716142e-01 + 9.8446166423920034e-01 1.5225820532485455e+00 -9.4113324967067935e-01 + 1.0251372235458187e+00 1.7572943696840528e+00 -1.1226767872135295e+00 + 1.0114555524764581e+00 1.9345574312326546e+00 -1.3214908077706897e+00 + 9.5373719886243469e-01 2.0300613667819158e+00 -1.5291627772789878e+00 + 8.6540451868378065e-01 2.0369614671306544e+00 -1.7249978685011877e+00 + 7.5738891607510339e-01 1.9725093249488475e+00 -1.8997664462669763e+00 + 6.3417622347318836e-01 1.8469072398355080e+00 -2.0634283301280716e+00 + 5.0466848186011237e-01 1.6573382888781749e+00 -2.2221187185968230e+00 + 3.8829704424998646e-01 1.4033622550351366e+00 -2.3775501718210745e+00 + 3.1287097816808856e-01 1.0880892360717775e+00 -2.5354066097255292e+00 + 3.1923246002443351e-01 7.1819991120005411e-01 -2.7038615479067496e+00 + 4.7041158614872003e-01 3.2863405892377434e-01 -2.8704533118103894e+00 + 7.7161350668368689e-01 2.1924617731344853e-02 -2.9594176489450525e+00 + 1.0508139564818109e+00 -1.4362483967483811e-01 -2.9088611525471859e+00 + id 14492 + loc 9.8052316904067993e-01 3.4841808676719666e-01 401 + blend 0.0000000000000000e+00 + interp 5.0332482746524310e-01:3.5002073527117977e-01:4.0763602032454682e-01:3.4660302261837844e-01:9.9998691331545675e-01:4.9256297956753547e-01:1.7277567584086841e+00:5.0331979421696849e-01:2.1098686312656110e+00:4.2862754255642865e-01:2.6244176509310595e+00:2.9675115149045467e-01:3.3226725431532547e+00:2.5848855224589629e-01:3.9969276267344442e+00 + CVs 20 + 5.4151493824983195e-02 2.9777571162881317e-01 1.6198264869932633e-01 + 8.7861278645650256e-02 5.9790215205917685e-01 3.3887781975078013e-01 + 9.0733950190326262e-02 8.9735312170274384e-01 5.2659391087972052e-01 + 6.3072695237707505e-02 1.1965914166085132e+00 7.2743035246426913e-01 + 1.6251397179948779e-02 1.4946531977551258e+00 9.4982427391647628e-01 + -3.5480191455673993e-02 1.7882690748762500e+00 1.2015296514909284e+00 + -7.8988522317146148e-02 2.0751092700440430e+00 1.4911901559277778e+00 + -9.8870622980712086e-02 2.3487202580297968e+00 1.8247061020086974e+00 + -7.8114350165902624e-02 2.5930427554023781e+00 2.1877897537032478e+00 + -1.2354364644839189e-02 2.7914205763849260e+00 2.5498874938205454e+00 + 8.7664696564286104e-02 2.9374392888210483e+00 2.8988163435488818e+00 + 2.1232989300042804e-01 3.0257179675882089e+00 3.2504389010259329e+00 + 3.6139485041022013e-01 3.0331393663254866e+00 3.6232207409913499e+00 + 5.4290102542592966e-01 2.9277204151803882e+00 4.0090730955352951e+00 + 7.6958936044124127e-01 2.7161324531922686e+00 4.3655262995849409e+00 + 1.0435815629338605e+00 2.4646917108844235e+00 4.6462387764899145e+00 + 1.3337764073868521e+00 2.2527269532477390e+00 4.8336293413214566e+00 + 1.6035630736013879e+00 2.1288922605965257e+00 4.9437296278777456e+00 + 1.8901383488584709e+00 2.1935286911913936e+00 4.9812751629080765e+00 + id 14493 + loc 3.9498069882392883e-01 9.4812965393066406e-01 412 + blend 0.0000000000000000e+00 + interp 3.7159506824774818e-01:2.6531269222974435e-01:9.7043289278216305e-01:3.7159135229706575e-01:1.6021627404559773e+00:3.4094276869483009e-01:2.3235244487083166e+00:2.9237573592096822e-01:3.1589763896648826e+00:2.8438755779467528e-01:3.9994050373193883e+00 + CVs 20 + 8.8724826118396916e-01 1.6731866708994969e-01 -1.8013996841460453e-01 + 1.4548401011446395e+00 2.0552586707816620e-01 -3.4188483899529554e-01 + 1.9502700151614802e+00 2.1169096600376353e-01 -4.7709549906761406e-01 + 2.4711333588887361e+00 2.2326209753873660e-01 -5.7946491318296123e-01 + 3.0111106993727286e+00 2.2932649490379214e-01 -6.4384827253301691e-01 + 3.5648854946273656e+00 2.1674227178453742e-01 -6.6633573782001054e-01 + 4.1254762397673632e+00 1.7144258561945913e-01 -6.4484602275202429e-01 + 4.6834574502631261e+00 7.9794105339945687e-02 -5.8126263395257571e-01 + 5.2259623156303405e+00 -6.7924927841099381e-02 -4.8069171117450227e-01 + 5.7389939855962755e+00 -2.7523189048107044e-01 -3.5025151443693614e-01 + 6.2171334633247488e+00 -5.4970821253974100e-01 -2.0576050589409123e-01 + 6.6634054441178003e+00 -9.1688848133528555e-01 -8.4746539235478813e-02 + 7.0633691088108987e+00 -1.3931013340116101e+00 -3.6283163928862439e-02 + 7.3883117562037377e+00 -1.9482343283374282e+00 -7.7096784482843073e-02 + 7.6282083490780490e+00 -2.5380570118121168e+00 -1.9025965956160040e-01 + 7.7862304435993002e+00 -3.1276371800030667e+00 -3.6639678592149194e-01 + 7.8690186988245472e+00 -3.6826750840473164e+00 -6.0806252460567678e-01 + 7.8955405933195024e+00 -4.1720981905982999e+00 -8.9775965672409408e-01 + 7.9966239994387962e+00 -4.5762358189042116e+00 -1.0962979165264768e+00 + id 14494 + loc 9.7285741567611694e-01 5.9581693261861801e-02 378 + blend 0.0000000000000000e+00 + interp 4.5501203983874444e-01:4.4065997246491001e-01:8.6680420216514287e-01:4.5500748971834609e-01:1.6175040673442471e+00:2.7397898503209006e-01:2.0410429795307126e+00:3.7359920077029185e-01:3.0103731945465722e+00:3.1530284979815554e-01:3.8731502702519425e+00 + CVs 20 + -2.6803032944488203e-01 2.7880296701732865e-01 7.5345531507733682e-02 + -5.3925954288137046e-01 5.3441990409276907e-01 1.5032800378453770e-01 + -8.0971142120791950e-01 7.5985916820362132e-01 2.3867824317923508e-01 + -1.0777659031426898e+00 9.6239685461135294e-01 3.4327648857597171e-01 + -1.3386065381726282e+00 1.1539815895633927e+00 4.5747086326390546e-01 + -1.5902296316091378e+00 1.3427121815743148e+00 5.7493330495335981e-01 + -1.8414282721840545e+00 1.5316625607737682e+00 6.9031497138868203e-01 + -2.1042385075196597e+00 1.7216483597440613e+00 7.9732085882264492e-01 + -2.3813251596023175e+00 1.9138907021441818e+00 8.8675311045228034e-01 + -2.6647251924523765e+00 2.1102682340157988e+00 9.4821088276136123e-01 + -2.9502718074734613e+00 2.3151420000781378e+00 9.7595663568795632e-01 + -3.2555573729481813e+00 2.5268384677328553e+00 9.6625727557444863e-01 + -3.6052793794096845e+00 2.6993985799498068e+00 9.1591007892135834e-01 + -3.9736313725882373e+00 2.7425538409314276e+00 8.4553533158903038e-01 + -4.2986511269082062e+00 2.6265250053408207e+00 7.9030969611294233e-01 + -4.5518857354907265e+00 2.4205094958642341e+00 7.4648781959774591e-01 + -4.7204490529752841e+00 2.2234811990931442e+00 6.8034728484432649e-01 + -4.8531663436898782e+00 2.0751604101073928e+00 5.9294675893206183e-01 + -5.2310267770948542e+00 1.9659715782409961e+00 5.7377400693429625e-01 + id 14495 + loc 6.2170648574829102e-01 8.7319630384445190e-01 399 + blend 0.0000000000000000e+00 + interp 3.4437188046619932e-01:3.2824974859742112e-01:1.9658375019658625e-01:2.7838343226146151e-01:1.3199993792679774e+00:2.8988141695649500e-01:2.0704298257632914e+00:3.4436843674739470e-01:2.8377216644604628e+00:2.8397279666257563e-01:3.2123460776765835e+00 + CVs 20 + -2.2555759977722176e-01 2.7066826898496887e-01 -1.0471858527240488e-01 + -4.5492795072136560e-01 5.4445363548206294e-01 -2.1886236585644850e-01 + -6.8974022434823290e-01 8.1699153827680548e-01 -3.4587990671654101e-01 + -9.3095681505361416e-01 1.0847732495622979e+00 -4.9064424308367288e-01 + -1.1784181536599490e+00 1.3428472899166324e+00 -6.6080075135555028e-01 + -1.4348331662353468e+00 1.5832541144020249e+00 -8.6549508363937977e-01 + -1.7024097348760159e+00 1.7898339265405472e+00 -1.1122597590831989e+00 + -1.9795963967836381e+00 1.9467528470793143e+00 -1.3996928793908807e+00 + -2.2745065050712920e+00 2.0535031331125597e+00 -1.7284156841375578e+00 + -2.6057665845617586e+00 2.0999441936403636e+00 -2.1109161621553989e+00 + -2.9503682442108112e+00 2.0450995619652903e+00 -2.5357194505492036e+00 + -3.2340162778980095e+00 1.8820329417394519e+00 -2.9476495873788862e+00 + -3.4369884098162200e+00 1.6525129389202173e+00 -3.3191836419753757e+00 + -3.6252325563341903e+00 1.3654404824674096e+00 -3.6718175737241339e+00 + -3.8436440095155966e+00 1.0079111025422991e+00 -4.0069317009174350e+00 + -4.0413985538076949e+00 6.1075207151921040e-01 -4.2902089600217970e+00 + -4.1746636917861419e+00 2.4958962164872123e-01 -4.5153425260586131e+00 + -4.3560079634379418e+00 -3.9192626633450467e-02 -4.7293200038557419e+00 + -4.7699325954757947e+00 -2.5411173262744124e-01 -4.9930235250074286e+00 + id 14496 + loc 9.7556102275848389e-01 8.2916980981826782e-01 400 + blend 0.0000000000000000e+00 + interp 3.4889903627944530e-01:3.0237148831282101e-01:2.7705985708478154e-02:2.7157347082302469e-01:8.4717365699237679e-01:3.4151439689478214e-01:1.1391026120639074e+00:3.0134459210358988e-01:1.8804211603493703e+00:3.4889554728908251e-01:2.4192375035720399e+00:1.0297865327569082e-01:3.0113313328305127e+00:3.1315513004808171e-01:3.9756344211384751e+00 + CVs 20 + -1.2461017225303042e-01 1.8183516851312576e-01 -2.3671387810952069e-01 + -2.5976075148100009e-01 3.4968783617503080e-01 -4.5878884774940965e-01 + -3.8655620002484908e-01 5.0615553657337087e-01 -6.8746283249711138e-01 + -4.9586829253803194e-01 6.4654839907816686e-01 -9.2627313525525001e-01 + -5.9522022749862669e-01 7.6368353096340968e-01 -1.1713697229436044e+00 + -6.9137593783898366e-01 8.5494219999771048e-01 -1.4226381133776762e+00 + -7.8548304068901664e-01 9.2473776424943821e-01 -1.6821762440910657e+00 + -8.7474267228452163e-01 9.7923786953193070e-01 -1.9509618215047273e+00 + -9.5637051763033942e-01 1.0167848772910859e+00 -2.2282205547349219e+00 + -1.0294468417605052e+00 1.0302910006901846e+00 -2.5112470716763111e+00 + -1.0927667868185360e+00 1.0172293802311567e+00 -2.7926179988867528e+00 + -1.1454330277466476e+00 9.8135252789108685e-01 -3.0612539713092497e+00 + -1.1937447347359951e+00 9.2886564815022821e-01 -3.3121588192555667e+00 + -1.2499793541638353e+00 8.6153647799039312e-01 -3.5521821453013755e+00 + -1.3198609158520977e+00 7.7962931939960933e-01 -3.7908718628651186e+00 + -1.3952658036599874e+00 6.9281941644961176e-01 -4.0302920196809620e+00 + -1.4596726925876709e+00 6.1625583624411040e-01 -4.2666581974789910e+00 + -1.4922616233475603e+00 5.3993990797179325e-01 -4.4830485967157570e+00 + -1.4126450070227579e+00 2.2374944945701136e-01 -4.4729030521042557e+00 + id 14497 + loc 4.3997582793235779e-01 3.6243638396263123e-01 393 + blend 0.0000000000000000e+00 + interp 4.2692812314742179e-01:2.8820687828550923e-01:3.4543961711013760e-01:4.1385025997790659e-01:9.6491218508287158e-01:4.2692385386619036e-01:1.2399476468700157e+00:3.0034076286835198e-01:2.0035615490872218e+00:3.0626397378900239e-01:2.8233739160092508e+00:3.0842936172443580e-01:3.3604390684095864e+00 + CVs 20 + -7.5150004938737372e-02 4.1502275543639744e-01 2.8900233932462793e-01 + -1.6515996208620620e-01 8.5023635580985923e-01 5.7214453310114100e-01 + -2.8072734707993097e-01 1.3059010875044448e+00 8.3243103266824092e-01 + -4.5624350829252647e-01 1.7572635311115945e+00 1.0791178226812330e+00 + -7.1830105420936108e-01 2.1601349981346898e+00 1.3173402676283783e+00 + -1.0606541534934202e+00 2.4873466797455857e+00 1.5379652999860371e+00 + -1.4638572306107780e+00 2.7343227596139434e+00 1.7367056446225591e+00 + -1.9087888861928339e+00 2.8942822957339418e+00 1.9227535865813299e+00 + -2.3691352759406978e+00 2.9565679684240838e+00 2.1123457045945404e+00 + -2.8102092684215507e+00 2.9190958147473047e+00 2.3182051735695643e+00 + -3.1975887246484818e+00 2.7919919208740804e+00 2.5421407448555589e+00 + -3.5061882901823722e+00 2.5978949102494262e+00 2.7762201193313776e+00 + -3.7220431551683282e+00 2.3683881432200637e+00 3.0088960068290547e+00 + -3.8373890314478918e+00 2.1440252065209835e+00 3.2288068503255842e+00 + -3.8660058377076512e+00 1.9675250828038093e+00 3.4304941117756620e+00 + -3.8538504871457997e+00 1.8470866473668206e+00 3.6275580167745511e+00 + -3.8337934453745879e+00 1.7558556619021737e+00 3.8442297937549599e+00 + -3.7941245001885884e+00 1.6415473236252698e+00 4.1237869402003593e+00 + -3.6588289814913826e+00 1.3907567909389011e+00 4.5697885046744560e+00 + id 14498 + loc 6.8365556001663208e-01 8.7157106399536133e-01 1069 + blend 0.0000000000000000e+00 + interp 4.3485504430475186e-01:3.0285657045534770e-01:5.2896878137394410e-01:3.4756237315112509e-01:1.2038268950464877e+00:4.3485069575430885e-01:1.9635609440729556e+00:3.0889318096921381e-01:2.2574472792671965e+00:3.0240874208060303e-01:2.9802289357739831e+00:2.8224250624981956e-01:3.7073985361607131e+00 + CVs 20 + 7.7020903261396323e-02 2.9148615691020757e-01 -4.4955350667973126e-02 + 1.3153442643513061e-01 6.0309220405689556e-01 -1.0320393964796673e-01 + 2.0745424250639627e-01 9.5071611877053874e-01 -1.8523809876152775e-01 + 3.6212448863786745e-01 1.3138927370624103e+00 -2.8509074838996507e-01 + 6.0668864980021975e-01 1.6247504012661553e+00 -3.7564134975621188e-01 + 8.7956699203554622e-01 1.8432969247558566e+00 -4.4093422834357754e-01 + 1.1192790569491040e+00 1.9971889258532158e+00 -4.9304247842457816e-01 + 1.3066927784672075e+00 2.1364881429437412e+00 -5.4239136354926931e-01 + 1.4495333919278610e+00 2.3057365940337595e+00 -5.8334882638169572e-01 + 1.5474166671764675e+00 2.5438933610035712e+00 -6.3396384644800419e-01 + 1.5292647385031466e+00 2.8433348260228088e+00 -7.9086019809357344e-01 + 1.2992258375641614e+00 3.0641560971841102e+00 -1.1145101365224912e+00 + 8.9064293174874654e-01 3.0595001718013455e+00 -1.5637710390315651e+00 + 4.3832617279774411e-01 2.7542617440755630e+00 -2.0639468117115909e+00 + 9.2851483470155372e-02 2.1885737230565097e+00 -2.5268244944913203e+00 + -7.4229211250513072e-02 1.4411709224095031e+00 -2.8840803453436816e+00 + -5.5296839066174830e-02 6.0827135874012261e-01 -3.0411238528401148e+00 + 5.3814549536358336e-02 -1.2546570317455252e-01 -2.9697026519081917e+00 + 6.5545895378630523e-02 -5.8444728244133692e-01 -2.9309269729455703e+00 + id 14499 + loc 5.0806391239166260e-01 2.0834638178348541e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4974431569512685e-01:4.4973981825196990e-01:2.2224046849181367e-01:3.5538423373025879e-01:8.8029070289017119e-01:3.8896946178297453e-01:1.2172867244178753e+00:3.7610922152731113e-01:1.8910133817090167e+00:3.9621708884278545e-01:2.1327401661417604e+00:2.8478548069657805e-01:3.0145455674362487e+00:4.4539450889249599e-01:3.9356447523111608e+00 + CVs 20 + -1.6933584930598766e-03 4.5703081799651263e-01 -2.5057964513208764e-01 + -4.7711592094680344e-02 8.7445125868275886e-01 -3.9202564497401421e-01 + -1.3135444882273106e-01 1.2695691116250223e+00 -4.8739646304202938e-01 + -2.5836778548763017e-01 1.6508368182925037e+00 -5.4761185102845422e-01 + -4.3790591583834193e-01 2.0024398962946806e+00 -5.5524927779062661e-01 + -6.7757337344732660e-01 2.2930446569493932e+00 -4.9200162765742095e-01 + -9.7005898659493972e-01 2.4732242736489023e+00 -3.5763682517410089e-01 + -1.2835720009864402e+00 2.5062325678842239e+00 -1.8835881797606435e-01 + -1.5825580158245645e+00 2.4019517312150538e+00 -2.8323521991232115e-02 + -1.8519501293149225e+00 2.1943947879397689e+00 1.1011421186961901e-01 + -2.0855297160981792e+00 1.9007069172370823e+00 2.3468935329666812e-01 + -2.2640508461817372e+00 1.5235024146870995e+00 3.4908859880437559e-01 + -2.3499919776337448e+00 1.0657584595968386e+00 4.5588871067320269e-01 + -2.2799811857698984e+00 5.4136242466326412e-01 5.5675204816467805e-01 + -1.9689569183131772e+00 1.4289607973915541e-02 6.4078442288493664e-01 + -1.3984296105250391e+00 -3.9191163762214754e-01 7.2536860322047925e-01 + -6.0463797392748908e-01 -5.5643321838212856e-01 9.0007223274120196e-01 + 2.2716204215308550e-01 -4.3255521291754984e-01 1.1525004723166989e+00 + 7.0105336778952498e-01 -5.4892377999850761e-01 1.2193372884076330e+00 + id 14500 + loc 2.0979392528533936e-01 9.3768322467803955e-01 401 + blend 0.0000000000000000e+00 + interp 3.6308633648240979e-01:3.2151535044389429e-01:2.3212976696345933e-01:3.6308270561904499e-01:1.0436682942399260e+00:3.6122764098776933e-01:1.6795392336615476e+00:3.5132590071560527e-01:2.1561830405341764e+00:3.2931323652272526e-01:3.0203603389353990e+00:3.0264428112444203e-01:3.7920662987773213e+00 + CVs 20 + -1.0108662676427529e-02 3.0765653355580846e-01 -2.0823338135763345e-01 + -4.5985780274102300e-02 6.0229510486435278e-01 -4.4068813034482146e-01 + -1.0269084715637805e-01 8.8631900927473639e-01 -6.7506975460748098e-01 + -1.7787793271544028e-01 1.1518648212291449e+00 -9.0349466226510911e-01 + -2.6957251498983292e-01 1.3886419190819654e+00 -1.1256423144099612e+00 + -3.7616133961937859e-01 1.5871899035227464e+00 -1.3317386598150751e+00 + -4.9504161116810075e-01 1.7442922792687952e+00 -1.5035521449732785e+00 + -6.1654689690520392e-01 1.8675576916258247e+00 -1.6298086958953084e+00 + -7.3512200912194481e-01 1.9709101991402282e+00 -1.7162494437685278e+00 + -8.6737625183339773e-01 2.0647125887366613e+00 -1.7776764503158458e+00 + -1.0402637608563841e+00 2.1516452992087602e+00 -1.8188529697820632e+00 + -1.2817048521403203e+00 2.2237379120682332e+00 -1.8377300621703831e+00 + -1.5961839242071783e+00 2.2540456009056418e+00 -1.8486735038593649e+00 + -1.9454548919280978e+00 2.2119529206196020e+00 -1.8832057058536631e+00 + -2.3107890255747541e+00 2.0697445946414716e+00 -1.9449124544725909e+00 + -2.7309639377498454e+00 1.7854188329855805e+00 -2.0139872317468241e+00 + -3.2124079263110281e+00 1.3857040883291409e+00 -2.1524787673304413e+00 + -3.6411440067738798e+00 1.0303873738101657e+00 -2.4560540366004666e+00 + -3.8751189035392373e+00 8.5259186809314758e-01 -2.8718323594929731e+00 + id 14501 + loc 5.2649605274200439e-01 8.0515015125274658e-01 404 + blend 0.0000000000000000e+00 + interp 4.5820505616197693e-01:3.4196081247658916e-01:8.5820509501249842e-01:4.5820047411141535e-01:1.2702470222932394e+00:4.3684739870558825e-01:1.9568014342708291e+00:3.0936467620694391e-01:2.6202585097870243e+00:3.0097381368745207e-01:3.4007136569104048e+00:3.7394880013970694e-01:3.9997369632177771e+00 + CVs 20 + 6.1193526495693699e-02 1.8037619259530713e-01 -3.4484526291875470e-03 + 1.4552273544436056e-01 3.5907252461223399e-01 -1.4765434421263948e-02 + 2.4869863465097686e-01 5.3222573271484930e-01 -3.6976737427595052e-02 + 3.7311360809269389e-01 6.8676975618700808e-01 -7.7739747331901546e-02 + 5.1602342593778938e-01 8.1498353811989399e-01 -1.4104023661375872e-01 + 6.7033657251877243e-01 9.1384510976683564e-01 -2.2661757614938152e-01 + 8.2825631757574203e-01 9.8643459073127626e-01 -3.2906189406171371e-01 + 9.8596661434496147e-01 1.0460298562501871e+00 -4.3455835586797692e-01 + 1.1454588275875053e+00 1.1064208401135498e+00 -5.2936421523197763e-01 + 1.3029625146437778e+00 1.1633475692570290e+00 -6.1940561305551789e-01 + 1.4388083450823101e+00 1.1963024204662001e+00 -7.3392825147331886e-01 + 1.5267029722620173e+00 1.1944653136333405e+00 -8.9572707608165603e-01 + 1.5631113795280354e+00 1.1780790827921293e+00 -1.0860682266874944e+00 + 1.5752704230709049e+00 1.1753688097342909e+00 -1.2692896742329340e+00 + 1.5788293189706222e+00 1.1925413919648362e+00 -1.4366542799957540e+00 + 1.5569413730308224e+00 1.2208102444710216e+00 -1.6007341099691135e+00 + 1.4863969169260514e+00 1.2549572619322982e+00 -1.7690811454824489e+00 + 1.3751141335159653e+00 1.3000492848729597e+00 -1.9312055152964409e+00 + 1.3816192402325522e+00 1.3970461320441929e+00 -2.0476025339174457e+00 + id 14502 + loc 4.6662276983261108e-01 7.4920248985290527e-01 412 + blend 0.0000000000000000e+00 + interp 4.2700723136253660e-01:2.9061377495451807e-01:4.4065107548776350e-03:2.6371398620074910e-01:9.9941666891455694e-01:4.2700296129022297e-01:1.6618797470427062e+00:2.4857637081966916e-01:2.7178630737631679e+00:3.9716294196383134e-01:3.4862245997213281e+00 + CVs 20 + 7.8620290515384939e-01 1.4780319698995975e-01 -1.7975403800793799e-01 + 1.3449319619663014e+00 1.7040315490709712e-01 -3.3348671461445167e-01 + 1.8652974174009631e+00 1.4915949731800665e-01 -4.5412594064232814e-01 + 2.4296872127628175e+00 1.1196970151375840e-01 -5.3632569647969541e-01 + 3.0196753482502823e+00 5.2584207926938298e-02 -5.7239641506870420e-01 + 3.6121175179686165e+00 -3.0951756748968551e-02 -5.5641293643513434e-01 + 4.1835117363900958e+00 -1.3770460182554856e-01 -4.8920453032999467e-01 + 4.7149029251520380e+00 -2.6592602633750251e-01 -3.8108885235252299e-01 + 5.1931756320463842e+00 -4.1186484751460184e-01 -2.4592362152866720e-01 + 5.6115061054242528e+00 -5.7093816145036591e-01 -9.7494953907218129e-02 + 5.9763690391797724e+00 -7.5283987411942621e-01 4.0722655983473188e-02 + 6.3103575573451494e+00 -9.9290996672472476e-01 1.2791371326057288e-01 + 6.6207974719781992e+00 -1.3127639679387650e+00 1.3038079939335023e-01 + 6.8845781882758237e+00 -1.6786738508873733e+00 5.6458731132027207e-02 + 7.0879520829722988e+00 -2.0512685427321111e+00 -6.6802033701145347e-02 + 7.2319228768184836e+00 -2.4190341093764474e+00 -2.3026249785560493e-01 + 7.3191930700429193e+00 -2.7748599310325792e+00 -4.3075670427609936e-01 + 7.3544740462940688e+00 -3.1041187621125670e+00 -6.5249763497546098e-01 + 7.3891188386370175e+00 -3.3626905274497965e+00 -8.1008663489302335e-01 + id 14503 + loc 6.6270726919174194e-01 1.6222056746482849e-01 399 + blend 0.0000000000000000e+00 + interp 4.7668594118762131e-01:3.9304237335890302e-01:2.2723804119665680e-02:2.9071071078479849e-01:8.7097819872856475e-01:3.1798140519838236e-01:1.3125330984982604e+00:3.0085096017605306e-01:1.9942842583439802e+00:3.6222052220667478e-01:2.4822055614510350e+00:2.8623998771610909e-01:3.0008188475787656e+00:4.7668117432820944e-01:3.6576783969272766e+00 + CVs 20 + 2.2906418081710372e-01 2.9138615696498738e-01 2.2918241372963991e-01 + 4.4279497648083038e-01 5.7858075367374728e-01 4.4610971200802946e-01 + 6.3998848405085362e-01 8.6000975932947044e-01 6.8438255880185295e-01 + 8.2642391426640138e-01 1.1318356577299358e+00 9.5088825832013446e-01 + 1.0118055187784907e+00 1.3902161183589821e+00 1.2383276239642103e+00 + 1.2019585742397436e+00 1.6294625262844220e+00 1.5433862258064874e+00 + 1.3970764854482685e+00 1.8407082222039552e+00 1.8667808294822601e+00 + 1.5961707639202531e+00 2.0140674671428127e+00 2.2086576050783888e+00 + 1.8004849636255729e+00 2.1419063705342500e+00 2.5673362320124622e+00 + 2.0117756410837018e+00 2.2161822785882133e+00 2.9417254085649516e+00 + 2.2270722082829351e+00 2.2270186431511583e+00 3.3251804997598322e+00 + 2.4336706672136463e+00 2.1733985298854730e+00 3.6979082160666916e+00 + 2.6117820101823623e+00 2.0757283606536951e+00 4.0311376908160286e+00 + 2.7361541385867789e+00 1.9710083704915535e+00 4.2831203765913211e+00 + 2.7961203565924873e+00 1.8860891601285639e+00 4.4045644538385478e+00 + 2.8431096104618949e+00 1.8100686918813222e+00 4.3460969937297858e+00 + 2.9927091989546311e+00 1.6809320538379964e+00 4.0978037634456586e+00 + 3.2418869984601280e+00 1.5036016644179735e+00 3.9125712964157509e+00 + 3.2125446458553548e+00 1.5774725459173398e+00 4.1140693476686856e+00 + id 14504 + loc 5.9453207254409790e-01 6.7609691619873047e-01 378 + blend 0.0000000000000000e+00 + interp 4.1623279054497314e-01:2.5910224550300254e-01:2.0725341284979093e-01:2.6159454564423379e-01:1.0520774069174639e+00:2.5904080083711295e-01:1.9914825191290217e+00:3.2079265233299381e-01:2.4881912035888329e+00:2.7251107982823225e-01:3.0167969191340078e+00:4.1622862821706769e-01:3.9123159099134801e+00 + CVs 20 + 4.9548195610138568e-01 3.4058768941600726e-01 1.1362459383380669e-01 + 9.4151877532771322e-01 5.9317823830498817e-01 1.6650617244373445e-01 + 1.3941677612518124e+00 7.9229335820953795e-01 1.7370479995156030e-01 + 1.8763328855280341e+00 9.7038626843786324e-01 1.4985011701386985e-01 + 2.3814272314599454e+00 1.1469948605448823e+00 1.1729232958293179e-01 + 2.9073031049954814e+00 1.3247349492350060e+00 1.0411541650188927e-01 + 3.4575750740155353e+00 1.4900551567141382e+00 1.3865142686904108e-01 + 4.0259489233049495e+00 1.6246658570234311e+00 2.4458098843577647e-01 + 4.5868383208320171e+00 1.7109058337374397e+00 4.3219496676370617e-01 + 5.1080060680492263e+00 1.7345113034135944e+00 6.9071386123432132e-01 + 5.5722666231913909e+00 1.6834941369354515e+00 9.9752784124115468e-01 + 5.9769084329705295e+00 1.5409267466728589e+00 1.3315151399214482e+00 + 6.3150757638446251e+00 1.2923980308079228e+00 1.6715487945582932e+00 + 6.5773477853759852e+00 9.5414297529603154e-01 2.0003319420351922e+00 + 6.7726974195934169e+00 5.7854804538103943e-01 2.3158441480386216e+00 + 6.9281025660932816e+00 2.2209806865324921e-01 2.6160739875003109e+00 + 7.0819459567720475e+00 -9.6309228970727023e-02 2.8863079907224867e+00 + 7.2742252794083022e+00 -4.0387581744331102e-01 3.1206718623309921e+00 + 7.5037322769210064e+00 -7.4260604965483301e-01 3.3388255939142661e+00 + id 14505 + loc 8.9453345537185669e-01 1.8430484831333160e-01 400 + blend 0.0000000000000000e+00 + interp 5.4050431463315296e-01:2.8157431276110817e-01:1.8641455295581000e-01:5.4049890959000668e-01:9.9900165978744249e-01:2.5677006664067265e-01:1.9733258982211712e+00:3.8034305872253732e-01:2.8968967976399393e+00:2.5303231910819846e-01:3.4401781936678892e+00 + CVs 20 + 1.6377987343437833e-01 9.0972042874318995e-02 1.6566700295981190e-01 + 3.3542352639798956e-01 2.0354446166150339e-01 3.6003848188132553e-01 + 5.0691650594857673e-01 3.1889339630675856e-01 5.7046801755085108e-01 + 6.7492898558956282e-01 4.2486984399665001e-01 7.8973365610547153e-01 + 8.4061005091757490e-01 5.1788022409949608e-01 1.0174933978063831e+00 + 1.0045017237611822e+00 5.9559743143312749e-01 1.2529385070864658e+00 + 1.1648144503564415e+00 6.5524738392206561e-01 1.4944683793609532e+00 + 1.3165143460598405e+00 6.8904998865818079e-01 1.7384721750708620e+00 + 1.4535813533042725e+00 6.8449912832686566e-01 1.9775051865369910e+00 + 1.5729290938544733e+00 6.2999702929086954e-01 2.1953317539247816e+00 + 1.6741836052457333e+00 5.2182396000942455e-01 2.3660805963217584e+00 + 1.7584564722182925e+00 3.7059956305414166e-01 2.4736650776293212e+00 + 1.8306957904827850e+00 1.9301013122506250e-01 2.5289183692793742e+00 + 1.8972921548713999e+00 -1.2913700249508331e-03 2.5497756925593178e+00 + 1.9609915926981014e+00 -2.0628703934639181e-01 2.5441226897462386e+00 + 2.0178998212050394e+00 -4.1466014059136080e-01 2.5139039473300313e+00 + 2.0603162686416532e+00 -6.2024413775290366e-01 2.4645880024786608e+00 + 2.0898123753030577e+00 -8.2523500632383329e-01 2.4114557859189842e+00 + 2.1908851264885270e+00 -1.1293201151618293e+00 2.4610086614845024e+00 + id 14506 + loc 5.9284168481826782e-01 3.7123736739158630e-01 393 + blend 0.0000000000000000e+00 + interp 4.4281741536340657e-01:2.9646600167152198e-01:3.3246369767306094e-01:4.4281298718925294e-01:9.6518463806538612e-01:3.3756426068209472e-01:1.3494369206139984e+00:2.9135479141566989e-01:2.4951123067575338e+00:3.2921391486394169e-01:3.4024853224169855e+00 + CVs 20 + 3.1702240423632361e-01 3.5242073756581210e-01 1.2740689482548179e-01 + 6.2446937911328559e-01 7.2058628838699001e-01 2.5025379385015079e-01 + 9.0006001256415658e-01 1.0986685429447274e+00 3.7826855370933454e-01 + 1.1436011160168738e+00 1.4622956487390926e+00 5.3018866008633514e-01 + 1.3639941112775291e+00 1.7835100884660204e+00 7.2251837305352296e-01 + 1.5637335989885459e+00 2.0463653831643498e+00 9.5591540890130688e-01 + 1.7354946689048110e+00 2.2514561647624425e+00 1.2146597736690028e+00 + 1.8690521011483097e+00 2.4089615483729538e+00 1.4758819361694766e+00 + 1.9628607429523135e+00 2.5354142589849631e+00 1.7241657802295332e+00 + 2.0219953490785079e+00 2.6512815715928664e+00 1.9598355832830916e+00 + 2.0559283301651829e+00 2.7738023354732677e+00 2.1995315174232597e+00 + 2.0808134124026347e+00 2.9098011907714216e+00 2.4700619802962662e+00 + 2.1033854997169033e+00 3.0500261107079498e+00 2.8022151668153628e+00 + 2.1099439489785570e+00 3.1693424297671768e+00 3.2299753891604732e+00 + 2.0852226048660292e+00 3.1892137977566630e+00 3.7646160983066546e+00 + 2.0296987048262052e+00 2.9689727794311920e+00 4.3089096948759957e+00 + 2.0028096069426415e+00 2.4840686414166444e+00 4.6833600165447358e+00 + 2.1211601706015526e+00 1.9207582251842612e+00 4.7395965638024258e+00 + 2.4536338322188165e+00 1.5378795955789595e+00 4.3745194266984164e+00 + id 14507 + loc 6.7581015825271606e-01 4.1259935498237610e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1255641744855409e-01:3.1004666447977530e-01:3.3715135887372283e-01:2.9072988022903823e-01:9.9754839169312581e-01:2.5193812669773397e-01:1.9035870606323768e+00:4.1255229188437964e-01:2.5931191011871464e+00:2.3944759251541259e-01:3.3059790808898888e+00 + CVs 20 + -1.2307968132289353e-01 1.0167964527380434e-01 2.0565916169194387e-01 + -2.4439798035850935e-01 2.0518641030542972e-01 3.9011372559462554e-01 + -3.6683576559459696e-01 3.0948084288745992e-01 5.5241511571094060e-01 + -5.0184796048755098e-01 4.1564547219638215e-01 6.9432597943863039e-01 + -6.8683689589084440e-01 5.2485148068371157e-01 8.1173165761108645e-01 + -9.5162025761012070e-01 6.4915735172808331e-01 8.9239523835327783e-01 + -1.2623511210345431e+00 8.3267446875965700e-01 9.2906640434715704e-01 + -1.5273826465782352e+00 1.1075392724531918e+00 9.2245949521798043e-01 + -1.6931161946091957e+00 1.4621188215493877e+00 8.7982662650597709e-01 + -1.7583699691649883e+00 1.8970242125141545e+00 8.2264419427242652e-01 + -1.7026121023306489e+00 2.4205557221491860e+00 8.2038511814737092e-01 + -1.4893962303202564e+00 2.9226378586012611e+00 9.6799531529328331e-01 + -1.1563967434664686e+00 3.2556376307983728e+00 1.2468130156548809e+00 + -7.6344022274603995e-01 3.3848511548434677e+00 1.5751422069551209e+00 + -3.6047863153173010e-01 3.3233723392413137e+00 1.8850666066096058e+00 + 2.1141364785653316e-02 3.1072511556009981e+00 2.1711367487464193e+00 + 3.5886552381205417e-01 2.7541346691659006e+00 2.4649485715844546e+00 + 6.0247706673638390e-01 2.2733596087237533e+00 2.7256853955319893e+00 + 6.2158692363538592e-01 1.9910024389428698e+00 2.6651231177736339e+00 + id 14508 + loc 6.2298452854156494e-01 8.8409483432769775e-02 401 + blend 0.0000000000000000e+00 + interp 5.3490165480134855e-01:3.0353842587595942e-01:4.3520551907814675e-01:2.9740856175480296e-01:1.0657002237127444e+00:3.8396173141672324e-01:1.7213616406341301e+00:5.3489630578480052e-01:1.9902235869023746e+00:3.0232051310996166e-01:2.9505280770910773e+00:3.6725579217162391e-01:3.8302025497541381e+00 + CVs 20 + 4.5993874598435888e-02 2.8247087919649660e-01 2.3602584556960232e-01 + 1.0254067102416062e-01 5.7656372686212576e-01 4.7833994525161172e-01 + 1.6444693402952790e-01 8.8168849880689038e-01 7.3062684402444733e-01 + 2.3606578842424183e-01 1.1918703494055523e+00 1.0049362517332554e+00 + 3.3177565992908653e-01 1.4923830699135920e+00 1.3207850321782941e+00 + 4.6971474161290139e-01 1.7585249214788825e+00 1.6946926206194513e+00 + 6.6689270783822596e-01 1.9583852648346989e+00 2.1275823185185874e+00 + 9.2961546262459627e-01 2.0713783459793715e+00 2.5977063335846240e+00 + 1.2515971176886440e+00 2.0886870509328594e+00 3.0769573646335728e+00 + 1.6126776767586160e+00 1.9826971235087978e+00 3.5454873976045000e+00 + 1.9756836609949142e+00 1.7287700247037430e+00 3.9719568591580021e+00 + 2.3247539015304564e+00 1.3755589450269876e+00 4.3162825092969177e+00 + 2.6858229025859468e+00 9.9788272045332826e-01 4.5632787629697091e+00 + 3.0680316537190531e+00 6.1210630760058593e-01 4.7098162133170680e+00 + 3.4464049637219998e+00 2.1793086731187933e-01 4.7530369828938479e+00 + 3.8149357697807287e+00 -9.1049499957581381e-02 4.7144387088058126e+00 + 4.1914873913478550e+00 -1.3690212267234139e-01 4.6436222160051503e+00 + 4.5000858996218573e+00 4.1934244572705781e-02 4.5622424218013480e+00 + 4.8638795137873361e+00 -5.4353915387562346e-02 4.4867696737676832e+00 + id 14509 + loc 7.7638298273086548e-01 2.0928145945072174e-01 412 + blend 0.0000000000000000e+00 + interp 5.0401376066067127e-01:3.4802691405058089e-01:5.6444080790232198e-01:2.8571839149858003e-01:1.1123858902290449e+00:4.0793873161823818e-01:1.9299245444569477e+00:2.5063427245507996e-01:2.3455206893670804e+00:5.0400872052306467e-01:3.0457253894520488e+00:2.8762103336810857e-01:3.8906477755311242e+00 + CVs 20 + -5.5085783882380102e-01 1.3859302025662423e-01 2.3094272306859129e-01 + -9.4180062220371086e-01 1.9716076797666968e-01 4.0928397281035095e-01 + -1.2910625751150502e+00 2.1962119995554991e-01 5.6709258729035261e-01 + -1.6455517774280715e+00 2.2248538859594102e-01 7.1404251364408755e-01 + -2.0000596810006552e+00 2.0497989145927098e-01 8.4458185330805047e-01 + -2.3485585201347949e+00 1.6874521429813161e-01 9.5352817366250386e-01 + -2.6847070381632463e+00 1.1798491663954080e-01 1.0367656960974152e+00 + -3.0022019619270721e+00 5.8193829972539302e-02 1.0925169122824290e+00 + -3.2946055516248052e+00 -5.4159014354095980e-03 1.1220462412588155e+00 + -3.5569480267487639e+00 -6.8005569581886638e-02 1.1287056814940044e+00 + -3.7946613530036060e+00 -1.2355626840350120e-01 1.1144885987203355e+00 + -4.0344740001661341e+00 -1.6978755488978892e-01 1.0773151490026460e+00 + -4.3049048060572446e+00 -2.2275104709912008e-01 1.0239725563398503e+00 + -4.6033908619236019e+00 -3.0805273237445729e-01 9.7992049403388959e-01 + -4.9137214862072991e+00 -4.3590124587504886e-01 9.6688824619415137e-01 + -5.2276797081171953e+00 -6.0713148895860858e-01 9.9410781253837133e-01 + -5.5319895440752616e+00 -8.1650451737800944e-01 1.0686400225345138e+00 + -5.7979115790755609e+00 -1.0402086132572097e+00 1.1954454455460621e+00 + -5.9515867114644889e+00 -1.2146576576699921e+00 1.3669822596692784e+00 + id 14510 + loc 2.3748600482940674e-01 1.9130268692970276e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4883376628091892e-01:4.2445765045146505e-01:6.2647171816225922e-02:3.7245261643334870e-01:7.0688168794452033e-01:4.1216139413593500e-01:1.0349313342602566e+00:3.2432046843455986e-01:1.6261069554854735e+00:4.4882927794325611e-01:2.0362719339110531e+00:3.9055857606563260e-01:2.9198493162023613e+00:2.9558274515415761e-01:3.2532352746080222e+00 + CVs 20 + 2.0274949850206697e-01 4.4881108422201599e-01 1.1129702663095872e-01 + 3.1318149817941782e-01 8.0020818205280686e-01 1.5532815154656904e-01 + 3.9206393302435649e-01 1.1083579032307935e+00 1.7725504242506010e-01 + 4.6738485596317614e-01 1.3964183684973950e+00 1.9611578141799207e-01 + 5.4032247992443527e-01 1.6675390376670887e+00 2.0925287729613468e-01 + 6.1078151753272614e-01 1.9304467399757663e+00 2.1587530877730365e-01 + 6.6603109934473936e-01 2.2034819522742533e+00 2.1266733544274208e-01 + 6.6927729120717849e-01 2.5006577090399755e+00 1.9321717695168950e-01 + 5.7423098873068512e-01 2.8027059488208170e+00 1.5745014913226041e-01 + 3.6549606289042158e-01 3.0579355047689871e+00 1.1618622402779044e-01 + 6.7035688186841469e-02 3.2273357629857524e+00 8.1172016401343638e-02 + -2.9144917063744002e-01 3.3006108547131134e+00 5.8437995953110611e-02 + -6.9162525133908881e-01 3.2794010424454987e+00 4.9835317525225520e-02 + -1.1255924958363033e+00 3.1633318009972076e+00 5.3916688150570879e-02 + -1.6007863519680861e+00 2.9323449128148265e+00 6.3684963355040647e-02 + -2.1226759040202814e+00 2.4975997848020954e+00 7.2632281809546145e-02 + -2.5461033966438276e+00 1.7471356587524078e+00 9.0719909513896774e-02 + -2.6521082768706719e+00 8.9982800661063234e-01 1.2399892031095205e-01 + -2.6512461388411124e+00 4.2916314996701088e-01 1.3655644469537831e-01 + id 14511 + loc 4.4307774305343628e-01 2.5734385848045349e-01 400 + blend 0.0000000000000000e+00 + interp 3.6535435613771783e-01:2.4595275709822492e-01:4.2802642048919204e-01:3.6535070259415647e-01:1.1122239798493048e+00:2.5287994700287958e-01:2.0649286218116454e+00:2.8022321408096224e-01:2.9903296889881501e+00:3.0689551508991791e-01:3.6005912084691420e+00 + CVs 20 + -1.8920016907057413e-01 3.2342310324249379e-01 1.3701703060211051e-01 + -3.7600593562184043e-01 6.2536969412203314e-01 3.0399598659485716e-01 + -5.7993141634123357e-01 9.0252589789981363e-01 4.7902789438325971e-01 + -8.0740374254486080e-01 1.1485231982218782e+00 6.5765851021832755e-01 + -1.0554339160203656e+00 1.3531712749781690e+00 8.4349432892526321e-01 + -1.3163283441383311e+00 1.5039398025384529e+00 1.0389681752053259e+00 + -1.5765723486391332e+00 1.5879109940940779e+00 1.2423783047767585e+00 + -1.8153722156997856e+00 1.5984200297042062e+00 1.4462436690764653e+00 + -2.0152142695816861e+00 1.5433200842564263e+00 1.6360297171260341e+00 + -2.1688119707215288e+00 1.4412310491990310e+00 1.7952660633477511e+00 + -2.2755432591757621e+00 1.3114761002094901e+00 1.9170275227085258e+00 + -2.3498456369758225e+00 1.1532654433918488e+00 2.0037880592067356e+00 + -2.3901624039745690e+00 9.7334090597397704e-01 2.0870197340183783e+00 + -2.3979449865585081e+00 7.8960051966222178e-01 2.1668362158945298e+00 + -2.3815697396647506e+00 6.1232053574389633e-01 2.2361881450330303e+00 + -2.3474659791331267e+00 3.7016140160997923e-01 2.3016399259997682e+00 + -2.3308197567668811e+00 -1.4712203147268132e-01 2.4037414751143489e+00 + -2.5662740453527619e+00 -1.0253699370650746e+00 2.6391142101970457e+00 + -2.6204023873506186e+00 -1.1809144469832966e+00 2.6748836310908382e+00 + id 14512 + loc 6.8286603689193726e-01 2.2033187747001648e-01 378 + blend 0.0000000000000000e+00 + interp 5.2340430215938027e-01:3.0883506659538473e-01:3.1973893576269274e-01:3.0686808975406382e-01:1.0982138567409339e+00:5.2339906811635872e-01:1.9547482189606606e+00:3.0385528009262347e-01:2.7920110832807130e+00:3.8766450416142095e-01:3.9058568281619070e+00 + CVs 20 + -3.4725925221769527e-01 3.1016092993881783e-01 -6.2379028527952379e-02 + -6.7362495995354932e-01 5.9111808713880065e-01 -1.1763915580767811e-01 + -1.0008288863987775e+00 8.4798037128672998e-01 -1.7310970520414859e-01 + -1.3351154121145983e+00 1.0896557433742360e+00 -2.3967349492467876e-01 + -1.6668214073684329e+00 1.3173257010620076e+00 -3.3084846335475465e-01 + -1.9896001415733537e+00 1.5218294109401467e+00 -4.5816568273250957e-01 + -2.3017625380044349e+00 1.6856488304816921e+00 -6.2699062801002881e-01 + -2.5975433159265253e+00 1.7936885267966218e+00 -8.3334341431814618e-01 + -2.8662008348778296e+00 1.8409519411404194e+00 -1.0654929035717149e+00 + -3.0980191235911452e+00 1.8322325445701138e+00 -1.3071020712193779e+00 + -3.2857465794589387e+00 1.7805727006506946e+00 -1.5361670486190024e+00 + -3.4261759716521416e+00 1.7071974657427300e+00 -1.7309667220276270e+00 + -3.5319835180208479e+00 1.6222793555412867e+00 -1.8906236719675893e+00 + -3.6303169592150910e+00 1.4861379595162680e+00 -2.0337422636310034e+00 + -3.7382535361043878e+00 1.2483728987055405e+00 -2.1687655995277542e+00 + -3.8676791640553114e+00 9.2009421902090605e-01 -2.3112298811317835e+00 + -4.0314829040422859e+00 5.5232001864713487e-01 -2.4911125231246229e+00 + -4.2364534431766394e+00 2.2035154715338878e-01 -2.6928464912596035e+00 + -4.4442401066677188e+00 1.1017033120808151e-01 -2.7735821172596982e+00 + id 14513 + loc 5.0000715255737305e-01 4.9112743139266968e-01 393 + blend 0.0000000000000000e+00 + interp 3.9338812993163680e-01:3.8998870445271894e-01:1.5580131782244488e-02:2.8965241360984412e-01:8.9866077192646254e-01:2.8245930172334355e-01:1.9990438991514470e+00:3.9338419605033748e-01:2.6006703509698701e+00:3.0752978792483904e-01:3.0275699830779041e+00 + CVs 20 + 1.3141157162134859e-01 2.9570105947947523e-01 1.8799359721483916e-01 + 2.8598662575883993e-01 6.3297198906780294e-01 3.7040984928916015e-01 + 4.2695859292745081e-01 1.0130289048239522e+00 5.3880694638333437e-01 + 5.4626827619706986e-01 1.4255657583415045e+00 7.0723055227296472e-01 + 6.5696013742544423e-01 1.8408264439647288e+00 9.0953959867465095e-01 + 7.5880493088612955e-01 2.2326946980397819e+00 1.1708964127012769e+00 + 8.4043534371572060e-01 2.5965370442276132e+00 1.5035843220809926e+00 + 9.0389326875306875e-01 2.9300679778446392e+00 1.9235950229296885e+00 + 9.6884753017290970e-01 3.2125977610802754e+00 2.4426912515981143e+00 + 1.0586500157813983e+00 3.4103021803156572e+00 3.0572240799318529e+00 + 1.1909246982094974e+00 3.4858727329098378e+00 3.7464151219055259e+00 + 1.3728077095453863e+00 3.4025581551319508e+00 4.4730183904170673e+00 + 1.6081741657931874e+00 3.1218885638139886e+00 5.1921009013403197e+00 + 1.9169704056662900e+00 2.5902847087005965e+00 5.8416441376990313e+00 + 2.3311279045723730e+00 1.7905664400329542e+00 6.2908787749963500e+00 + 2.8764193817490775e+00 8.6569998232928569e-01 6.3990471372946196e+00 + 3.5303803348872154e+00 6.6853666780723353e-02 6.1749491350671404e+00 + 4.1530335223831996e+00 -4.4991985223188546e-01 5.8288352648511994e+00 + 4.4884159933355878e+00 -6.9630857227777199e-01 5.7297409274209148e+00 + id 14514 + loc 7.2841304540634155e-01 3.5716211795806885e-01 399 + blend 0.0000000000000000e+00 + interp 4.2589390923151443e-01:3.1877241860678346e-01:9.3376549478271564e-02:2.6514341666633723e-01:8.7160938358372742e-01:2.8114641123912959e-01:1.4869901599047624e+00:4.2588965029242215e-01:2.1379713800401605e+00:2.8904215670212230e-01:2.9096373371666875e+00:3.0207213920302195e-01:3.5440158768482002e+00 + CVs 20 + 2.6361479902530038e-01 3.4751262436784275e-01 1.8792517873228365e-01 + 5.2835843055189247e-01 6.9215149613845606e-01 3.9479481551079043e-01 + 7.7635699079204312e-01 1.0217994325019939e+00 6.6372507551357929e-01 + 1.0069437798905434e+00 1.3192200354996380e+00 9.8359981711238631e-01 + 1.2311621854205412e+00 1.5751705089899199e+00 1.3313655907479240e+00 + 1.4572763557371660e+00 1.7803530781379957e+00 1.6926450151450931e+00 + 1.6883133467752667e+00 1.9208549535338713e+00 2.0549969926143321e+00 + 1.9226072120897262e+00 1.9805634313446530e+00 2.4008117229096824e+00 + 2.1519868541414322e+00 1.9484853405000102e+00 2.7067116195313536e+00 + 2.3604479740438542e+00 1.8275208139949368e+00 2.9454726983938984e+00 + 2.5264749820868300e+00 1.6440544796127745e+00 3.0900416851168542e+00 + 2.6361423540487467e+00 1.4423511656357693e+00 3.1393600449144889e+00 + 2.6980057357499430e+00 1.2398938611599792e+00 3.1311878872228363e+00 + 2.7398854714197234e+00 1.0057432487649294e+00 3.1090781076811052e+00 + 2.8095967657980250e+00 6.7557536044353705e-01 3.1133055146639350e+00 + 2.9699817752374535e+00 2.0202223347802417e-01 3.2063527036551895e+00 + 3.2678066763824907e+00 -4.0039241601928321e-01 3.5077055461599471e+00 + 3.6050916973488119e+00 -9.9985754224720236e-01 4.1091168147287549e+00 + 3.5965838884190644e+00 -1.2298834833044392e+00 4.2917007045792523e+00 + id 14515 + loc 5.7487446069717407e-01 8.5125970840454102e-01 1069 + blend 0.0000000000000000e+00 + interp 3.0956078599261022e-01:3.0955769038475028e-01:2.4053621348076881e-01:2.8648171891220803e-01:1.0950713453535073e+00:2.9297116046878552e-01:2.2697328156062815e+00:2.6269101145272306e-01:3.1946534105570574e+00 + CVs 20 + 2.7087275334617322e-01 2.0857884561994788e-01 -2.0795590729473271e-01 + 5.3233599910364549e-01 4.2593823171170797e-01 -4.2291731517572567e-01 + 8.1164955358920354e-01 6.0351682441555099e-01 -6.1596111229328288e-01 + 1.1176650116392206e+00 7.1082302768928041e-01 -7.7466405998545540e-01 + 1.4523631623422708e+00 7.6708046197360136e-01 -9.1189342245882798e-01 + 1.8301915287045185e+00 8.4057610914597691e-01 -1.0570327755408608e+00 + 2.2418673906092543e+00 1.0085251854818631e+00 -1.2267062505236792e+00 + 2.6288778708130440e+00 1.3133344152114310e+00 -1.4154549367319325e+00 + 2.9057244978663963e+00 1.7283716418117927e+00 -1.6327065405536927e+00 + 2.9888946509804057e+00 2.1443696454244363e+00 -1.9390847840221461e+00 + 2.8330819261560052e+00 2.3554650441483882e+00 -2.3765265721156341e+00 + 2.5564326869233835e+00 2.2112476710000193e+00 -2.7964570444225636e+00 + 2.3532589622409295e+00 1.8578679395578352e+00 -3.0555152579839224e+00 + 2.2932461620098019e+00 1.4503455103626497e+00 -3.1697644384542651e+00 + 2.3801860184284074e+00 1.0907939001811719e+00 -3.1937118713083579e+00 + 2.5683790696756841e+00 8.0625210720818952e-01 -3.1582067112026735e+00 + 2.8170882715687133e+00 5.7615035756531063e-01 -3.0272448539611250e+00 + 3.0644394740845384e+00 3.9571361652143372e-01 -2.8041172295584871e+00 + 3.0995887075601982e+00 1.3576314389293545e-01 -2.8458970677520301e+00 + id 14516 + loc 2.8189682960510254e-01 7.3544543981552124e-01 404 + blend 0.0000000000000000e+00 + interp 4.6900755697642138e-01:2.7651803736463476e-01:8.5412010890680767e-01:2.6522755343430837e-01:1.3550764031453566e+00:3.0879226723247083e-01:2.0171189925127138e+00:4.1095220531642751e-01:2.8785160746154119e+00:4.6900286690085163e-01:3.1459983768451805e+00:3.9139699416471985e-01:3.9951264146408820e+00 + CVs 20 + -2.0288470445217619e-02 -5.5600275005185211e-03 2.0202766188001625e-02 + -3.5347903194078094e-02 -5.8854737539261945e-03 4.4439881366828360e-02 + -3.5337151095693124e-02 -2.6529821966881188e-03 7.9148186782032184e-02 + -2.1474460262382960e-02 4.8024545426362079e-03 1.2281717562564319e-01 + 3.9365594855952854e-03 1.7593604486779921e-02 1.7284258828311705e-01 + 4.1921685527009617e-02 3.7243019332886436e-02 2.2829765517474435e-01 + 9.3640490236192767e-02 6.5168596181263472e-02 2.8739695556316325e-01 + 1.6008077247552366e-01 1.0266408030986250e-01 3.4756682697956148e-01 + 2.4179078134207121e-01 1.5105866307112778e-01 4.0557064522777597e-01 + 3.3865857393195486e-01 2.1152411469310883e-01 4.5747494955864687e-01 + 4.4968268337275075e-01 2.8441770754615348e-01 4.9885467636769615e-01 + 5.7288650459686952e-01 3.6885884562065840e-01 5.2538922635115537e-01 + 7.0527058597043468e-01 4.6231368474227652e-01 5.3396683790542565e-01 + 8.4331458137291537e-01 5.6104351576581091e-01 5.2324425374310901e-01 + 9.8337150841072885e-01 6.6078989163024726e-01 4.9384272947192642e-01 + 1.1223407157570433e+00 7.5665969030365754e-01 4.4789587782788493e-01 + 1.2577431308273423e+00 8.4402854542553496e-01 3.8871267960699224e-01 + 1.3882259097932854e+00 9.1755840206964512e-01 3.2097627383722005e-01 + 1.4971125262539218e+00 9.9181842999184533e-01 3.0398216176932036e-01 + id 14517 + loc 9.2477893829345703e-01 7.8282272815704346e-01 401 + blend 0.0000000000000000e+00 + interp 4.2350335812570372e-01:4.0455721491323177e-01:1.6392905389623236e-02:3.0549557137679223e-01:7.1940316316609654e-01:2.8124032794574433e-01:1.5996647203245591e+00:3.0718155668650660e-01:2.3820187898489156e+00:4.2349912309212251e-01:2.9063382873321064e+00:2.8950345042959919e-01:3.6254407213568691e+00 + CVs 20 + -3.8562241442253953e-02 3.3178993755658642e-01 -3.0530139232308406e-01 + -4.5019679809963603e-02 6.7656241793259619e-01 -5.9473563654099859e-01 + -1.8584193897147383e-02 1.0294186691608893e+00 -9.1159729819235591e-01 + 3.4553674332142681e-02 1.3740557019864830e+00 -1.2829199806278881e+00 + 9.4227411250822568e-02 1.6889056344108071e+00 -1.7257207411714557e+00 + 1.1780469456535603e-01 1.9571914477021100e+00 -2.2474701834509370e+00 + 4.8948839915901265e-02 2.1610626374245325e+00 -2.8352057433816698e+00 + -1.5638645013362473e-01 2.2741873501980328e+00 -3.4487528262500815e+00 + -5.0609722620117925e-01 2.2715918915466902e+00 -4.0249162723735301e+00 + -9.6795220537337423e-01 2.1468479036702530e+00 -4.5043292175324652e+00 + -1.4887451976157466e+00 1.9107041287691215e+00 -4.8562855726187326e+00 + -2.0136111803621226e+00 1.5803204901184431e+00 -5.0838165542607490e+00 + -2.5121102819101178e+00 1.1724526262847799e+00 -5.2117199473353422e+00 + -2.9864935285439427e+00 7.0496118488108539e-01 -5.2478492326400650e+00 + -3.4450662925461253e+00 2.0451536926757696e-01 -5.2016334446858794e+00 + -3.9084513853575764e+00 -3.1769401277610487e-01 -5.1764461708971812e+00 + -4.4044512147915906e+00 -8.6676587980094966e-01 -5.3291409506024578e+00 + -4.9082102585804819e+00 -1.4214255301937762e+00 -5.6497501644071839e+00 + -5.4151866008300358e+00 -1.9686365944773403e+00 -5.8182507303247002e+00 + id 14518 + loc 6.3391613960266113e-01 1.3126380741596222e-01 412 + blend 0.0000000000000000e+00 + interp 2.9840376980524036e-01:2.7240880136119794e-01:1.0035435362747134e+00:2.6523060321164416e-01:2.0317624175307736e+00:2.8280481816638070e-01:3.0140815367534279e+00:2.9840078576754231e-01:3.9301388400618400e+00 + CVs 20 + -5.1073837147017176e-01 1.3341188107167878e-01 2.1143110484418015e-01 + -8.8074573686149904e-01 1.8952546231090414e-01 4.0025655449567821e-01 + -1.2175925608275195e+00 2.1285977604589795e-01 5.9123008312985526e-01 + -1.5654808904345334e+00 2.2137857748378131e-01 7.9562814862976383e-01 + -1.9217481351446724e+00 2.1437418958052101e-01 1.0111387752684180e+00 + -2.2852050695232329e+00 1.9210608078230174e-01 1.2321975350581562e+00 + -2.6561442739308214e+00 1.5578933888127300e-01 1.4491762151576910e+00 + -3.0343123085938211e+00 1.0636914552530685e-01 1.6504983528378820e+00 + -3.4183584098859114e+00 4.4491770768820604e-02 1.8252216546399145e+00 + -3.8045712915698822e+00 -2.8355076025121662e-02 1.9644004242607553e+00 + -4.1770845610567449e+00 -1.1211932412535885e-01 2.0672340711472756e+00 + -4.5000387911922246e+00 -2.1230975368753913e-01 2.1546455854234265e+00 + -4.7466175981637777e+00 -3.3115738832682506e-01 2.2579958911473454e+00 + -4.9329114950564668e+00 -4.6324480638969678e-01 2.3868810127930677e+00 + -5.0816038934291452e+00 -6.0469508300243113e-01 2.5385594652793206e+00 + -5.1867298978614116e+00 -7.4230477440427589e-01 2.7102895214964819e+00 + -5.2386612616299661e+00 -8.5596481921284351e-01 2.8941861064610821e+00 + -5.2528062073435144e+00 -9.4451406571706431e-01 3.0820378855050752e+00 + -5.3270102560243471e+00 -1.0994689252961880e+00 3.3041417126250354e+00 + id 14519 + loc 8.3760678768157959e-01 2.3592649400234222e-01 399 + blend 0.0000000000000000e+00 + interp 4.6820043039821774e-01:3.0372689264516872e-01:8.2712261137585408e-01:3.1052551541242618e-01:1.7965547757200331e+00:3.2517266233030795e-01:2.5916632920399971e+00:4.6819574839391376e-01:3.0267371118849371e+00:2.9161196456445182e-01:3.8798132490867623e+00 + CVs 20 + 2.7159182069207577e-01 3.1134465772662401e-01 2.0572554520374647e-01 + 5.1168980758071059e-01 6.0279341299554023e-01 4.0456353839859827e-01 + 7.1753417908627926e-01 8.7281084900179540e-01 6.3793820320802008e-01 + 8.9129076313548139e-01 1.1171047461189616e+00 9.0836390438248504e-01 + 1.0400735160212173e+00 1.3343507272873478e+00 1.2027712867889280e+00 + 1.1695415423047513e+00 1.5239080190680550e+00 1.5099065906611506e+00 + 1.2814652034417437e+00 1.6851206670081651e+00 1.8205224054000830e+00 + 1.3751311059377140e+00 1.8206060743087189e+00 2.1273654004544533e+00 + 1.4504573688359579e+00 1.9388286385023572e+00 2.4285186333321009e+00 + 1.5115541206472718e+00 2.0527146221648374e+00 2.7316569974424150e+00 + 1.5673856122561405e+00 2.1666870827067344e+00 3.0526655217058805e+00 + 1.6237186926806548e+00 2.2555798540638063e+00 3.3961141844327591e+00 + 1.6720502308322243e+00 2.2814352346200213e+00 3.7335324318671410e+00 + 1.6926854683702308e+00 2.2224731636748691e+00 4.0065501821498053e+00 + 1.6754683854341974e+00 2.0676004934113048e+00 4.1401379972896901e+00 + 1.6765360959420403e+00 1.8227410975315796e+00 4.0863257740061059e+00 + 1.8334477998199834e+00 1.4933184496966161e+00 3.8265274838908416e+00 + 2.2060035692846776e+00 1.0811543743517951e+00 3.5232460967005643e+00 + 2.1312635488046605e+00 1.1004029981904133e+00 3.7849612322974782e+00 + id 14520 + loc 8.6552768945693970e-01 4.8441338539123535e-01 378 + blend 0.0000000000000000e+00 + interp 3.5814035588237836e-01:2.5846714949021909e-01:9.7758758710697835e-02:2.5107502916465352e-01:9.7264877296103758e-01:2.6834810638824591e-01:1.8249901379263291e+00:3.5813677447881953e-01:2.2385122975971692e+00:2.5905355246171402e-01:2.9559164340748341e+00:2.9539371949200471e-01:3.6011602918743595e+00 + CVs 20 + -4.5199087989398812e-01 3.4511895453551811e-01 3.4111142493344002e-02 + -8.9070297488320160e-01 6.4151484048485685e-01 9.9269248444672359e-02 + -1.3540367819017973e+00 9.0142492455079781e-01 2.0057756227201523e-01 + -1.8551289025169040e+00 1.1500208834896091e+00 3.2292036571710964e-01 + -2.3875601526221071e+00 1.3950512063900116e+00 4.3321931348286208e-01 + -2.9505434048446268e+00 1.6178286773957267e+00 4.9822826106823392e-01 + -3.5411261622044643e+00 1.7910368574044795e+00 4.9505877336026771e-01 + -4.1436085083307130e+00 1.8948356380043965e+00 4.1347587770591943e-01 + -4.7316437010262185e+00 1.9131626210369526e+00 2.6030376171356939e-01 + -5.2785419043991650e+00 1.8298021892503893e+00 6.2464920487601217e-02 + -5.7607115762673162e+00 1.6270479033328971e+00 -1.4497779880922590e-01 + -6.1532985237833282e+00 1.2923333715852663e+00 -3.3211102938590076e-01 + -6.4490437590068179e+00 8.4954851151782940e-01 -4.8748618445273173e-01 + -6.7114364169690912e+00 3.6486289039150144e-01 -6.5024035769346222e-01 + -7.0332711250393674e+00 -1.0190431201173267e-01 -8.7303694016388222e-01 + -7.4601159821629501e+00 -4.8139558988146636e-01 -1.1256851458915986e+00 + -7.9821636136385719e+00 -7.2476789122127938e-01 -1.3091016343400337e+00 + -8.5319648625041360e+00 -8.9423100994726701e-01 -1.4318381685055988e+00 + -8.9988334608962077e+00 -1.2083388598493294e+00 -1.6804332176260921e+00 + id 14521 + loc 6.6744081676006317e-02 8.5600547492504120e-02 400 + blend 0.0000000000000000e+00 + interp 4.0891531937167480e-01:4.0190877809684333e-01:1.6277814580425587e-01:3.7556162578113306e-01:9.6940227647538701e-01:2.8773309929404473e-01:1.1648461680578961e+00:4.0891123021848108e-01:1.9927959911688728e+00:2.6021968683954738e-01:2.6373125290049066e+00:2.8969653738020562e-01:3.5245706316155956e+00 + CVs 20 + -1.8749097348756141e-02 4.2116781174908291e-01 2.4543573872941876e-01 + -8.4334212032529637e-02 8.4589959646551649e-01 4.8995499830956485e-01 + -1.9357499199278078e-01 1.2599412796130081e+00 7.3336946400206648e-01 + -3.5277138016712806e-01 1.6519071178620424e+00 9.8956528506785113e-01 + -5.7246468713960263e-01 2.0067071005308037e+00 1.2764138973093584e+00 + -8.6131557178528828e-01 2.2987934860867818e+00 1.6045980543033269e+00 + -1.2174462181034797e+00 2.4956727612976022e+00 1.9698300057633058e+00 + -1.6242368969985104e+00 2.5703662219621930e+00 2.3516416744297555e+00 + -2.0518623461265602e+00 2.5173628803383554e+00 2.7179255758043990e+00 + -2.4696710416652197e+00 2.3596311103997962e+00 3.0381331270210046e+00 + -2.8614302295379037e+00 2.1382968563828997e+00 3.2865725253574558e+00 + -3.2249053222279151e+00 1.9003513338153744e+00 3.4391962354593031e+00 + -3.5629444523806790e+00 1.6694003557308783e+00 3.4922973871873886e+00 + -3.8767052566913653e+00 1.4378576484027266e+00 3.4657891878402385e+00 + -4.1489319727224467e+00 1.2523898116812129e+00 3.3663209183687544e+00 + -4.2980394776801258e+00 1.2900617017860445e+00 3.1743498877639729e+00 + -4.0805918767391063e+00 1.6419506826795431e+00 2.8640713315886428e+00 + -3.6703859841760123e+00 1.8316246770571962e+00 2.5379665319767755e+00 + -3.9596870479048745e+00 1.8660182384851169e+00 2.3522864100882597e+00 + id 14522 + loc 4.6837091445922852e-01 2.6213505864143372e-01 393 + blend 0.0000000000000000e+00 + interp 4.1385439852189176e-01:3.0549989576215808e-01:2.7295938284364307e-01:2.7817805159796161e-01:1.0922003962844926e+00:2.8867842695044010e-01:2.0114764244969772e+00:4.1385025997790659e-01:2.9604704150098797e+00:2.8364093465923379e-01:3.2904430309269754e+00 + CVs 20 + -2.6985746552243450e-02 5.0431397441932002e-01 3.4736093687658537e-01 + -5.8528205785500109e-02 1.0273028967031677e+00 6.6031126945899499e-01 + -1.2089305518927920e-01 1.5704640802636063e+00 9.3416450675994933e-01 + -2.7577737751872988e-01 2.1157541059654950e+00 1.1906020733511677e+00 + -5.5647951538669926e-01 2.6119325231908590e+00 1.4234554319318473e+00 + -9.3221134031505670e-01 3.0202969066608896e+00 1.6051995125731542e+00 + -1.3667037741881809e+00 3.3385482802882409e+00 1.7322223956533847e+00 + -1.8509229103059881e+00 3.5726124043690977e+00 1.8241356070591710e+00 + -2.3841628062787565e+00 3.7187867213199737e+00 1.9021185408777179e+00 + -2.9591797670637034e+00 3.7647293888137261e+00 1.9820009857564780e+00 + -3.5563097131496590e+00 3.6949707889621877e+00 2.0727368339304597e+00 + -4.1399621580783146e+00 3.4997136411771166e+00 2.1716563889431857e+00 + -4.6695410824556811e+00 3.1855241207815910e+00 2.2658705735077138e+00 + -5.1237258440719167e+00 2.7671184600928891e+00 2.3498991489981513e+00 + -5.4933337126204034e+00 2.2474890618221699e+00 2.4351386057850721e+00 + -5.7531149919193858e+00 1.6193065718914856e+00 2.5402227693479782e+00 + -5.8626439313018368e+00 8.9366820373498213e-01 2.6866744727210898e+00 + -5.8149848237033970e+00 1.6836969722613260e-01 2.8783263757641544e+00 + -5.7457890756847174e+00 -1.8556729800062444e-01 2.9319511590051617e+00 + id 14523 + loc 6.5627884864807129e-01 2.5506335496902466e-01 1069 + blend 0.0000000000000000e+00 + interp 4.0893992058178502e-01:2.6439188025711585e-01:4.7717059825806951e-01:2.8394014879635754e-01:1.0532971138589555e+00:4.0893583118257920e-01:1.7694547344679172e+00:2.6377604461330090e-01:2.4444212242698571e+00:2.7580498632242845e-01:3.3998740319108691e+00 + CVs 20 + -6.1401460855604773e-02 1.8279265607796744e-01 2.0923930714417976e-01 + -1.2768828672776372e-01 3.5821898042695383e-01 3.9670613354123913e-01 + -1.9555156932176759e-01 5.3325092401365481e-01 5.6311356477705288e-01 + -2.7179187999559706e-01 7.1228320525697408e-01 7.0973451461700743e-01 + -3.8302576471170252e-01 8.9108891121107059e-01 8.3193740769602265e-01 + -5.3344938713346224e-01 1.0612429123477360e+00 9.1672855387602858e-01 + -6.8826968604254279e-01 1.2368599594812566e+00 9.5937368678012669e-01 + -7.9692299021962587e-01 1.4488507811365587e+00 9.6377382737426287e-01 + -8.3104846966185320e-01 1.7065470058500627e+00 9.3610930158102779e-01 + -7.9101410309433218e-01 2.0058051113493574e+00 8.9085803572601285e-01 + -6.6814248233485463e-01 2.3344057423713633e+00 8.7170663599518372e-01 + -4.4532665309198571e-01 2.6179929243611193e+00 9.3597369261901597e-01 + -1.4800835859313022e-01 2.7682706491683939e+00 1.0723113565778886e+00 + 1.8566276022836781e-01 2.7570770236409037e+00 1.2291235310507678e+00 + 5.1761111214328615e-01 2.5861500498888725e+00 1.3659685900138387e+00 + 8.0717604978298740e-01 2.2998531966517399e+00 1.4645791650630384e+00 + 1.0273006335254640e+00 1.9741671993087500e+00 1.5137416041337399e+00 + 1.1714054784361005e+00 1.6651584148742986e+00 1.4936373428023288e+00 + 1.1764696425960013e+00 1.3677843223079489e+00 1.3088400670034144e+00 + id 14524 + loc 9.4962403178215027e-02 2.3948690295219421e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4883376628091892e-01:4.4882927794325611e-01:4.8617330308838858e-02:3.3816834913467669e-01:7.3193340204265067e-01:4.1053708997677524e-01:1.0928331724335230e+00:3.2975592921692409e-01:1.7990445064546374e+00:3.8526671820538927e-01:2.0193638501916160e+00:2.8513065787889119e-01:2.9903922537430518e+00:4.3860161845446249e-01:3.5956803967937043e+00 + CVs 20 + 2.1749778209821907e-01 4.4668743612119760e-01 1.1724659879342464e-01 + 3.2265208349198476e-01 7.9347002934321642e-01 1.6850481169759149e-01 + 3.8245098990409138e-01 1.0940060044408237e+00 1.8958091790560289e-01 + 4.3724749645357153e-01 1.3677814391088465e+00 2.0331969600753758e-01 + 4.9233780386545212e-01 1.6058866922114681e+00 2.0994139176295770e-01 + 5.5965088195702062e-01 1.7992173204923931e+00 2.1293394991356329e-01 + 6.5669704592668054e-01 1.9538945521482749e+00 2.1564636640957779e-01 + 7.9391560897944591e-01 2.1086239233341240e+00 2.1347175246924172e-01 + 9.3809102456242666e-01 2.3213452125673593e+00 1.9275157075194976e-01 + 1.0016279880340906e+00 2.5957112848225732e+00 1.4759360905107199e-01 + 9.3634950545336615e-01 2.8611960419434412e+00 9.0911479259208394e-02 + 7.6401850119228731e-01 3.0655801023274272e+00 3.7144519109235774e-02 + 5.1595370265237328e-01 3.1988506904813239e+00 -5.8597114484163493e-03 + 2.0797665327957238e-01 3.2677456003803140e+00 -3.3163461533646688e-02 + -1.6525385030648243e-01 3.2806152348714095e+00 -4.3152140034063979e-02 + -6.5272837610621193e-01 3.2258584317331458e+00 -4.2699766552677543e-02 + -1.3119035607715144e+00 2.9944560291196964e+00 -3.6210008679635863e-02 + -1.9518768778902325e+00 2.4629901390209374e+00 -5.0326493041079057e-03 + -2.1357274391547398e+00 2.1732539006974845e+00 4.3043365352729200e-02 + id 14525 + loc 5.6668877601623535e-01 9.8645222187042236e-01 401 + blend 0.0000000000000000e+00 + interp 4.5479510955175750e-01:3.0305971268945658e-01:3.1360726434855457e-01:3.7587601407516519e-01:1.0786250109435680e+00:2.6788667897170154e-01:1.8864838746362094e+00:3.3145139256099648e-01:2.4279491205153945e+00:3.3630407739416968e-01:3.0424365299064382e+00:4.5479056160066200e-01:3.8836636729785128e+00 + CVs 20 + 4.1756945200515955e-02 3.1286203968606791e-01 -2.8485421815773093e-01 + 6.8435560261950690e-02 6.2473488224404450e-01 -5.5811321851909246e-01 + 9.4166835998475584e-02 9.3644373848323370e-01 -8.2727226951579502e-01 + 1.2396319472310685e-01 1.2369681585325880e+00 -1.1062673106859198e+00 + 1.5119083644032749e-01 1.5149569370770051e+00 -1.4120096921023093e+00 + 1.5294435499147851e-01 1.7647860698439175e+00 -1.7507390743223075e+00 + 9.6921817673201516e-02 1.9798369848816026e+00 -2.1096104028283937e+00 + -3.8320850480015101e-02 2.1477885908139056e+00 -2.4647552251330027e+00 + -2.5477168235021586e-01 2.2529032278732064e+00 -2.7900139789259111e+00 + -5.3843873234558581e-01 2.2842963394193871e+00 -3.0630633803727885e+00 + -8.6685674035301441e-01 2.2395474954704375e+00 -3.2715822212389334e+00 + -1.2157471173103287e+00 2.1193192415627733e+00 -3.4152391631047458e+00 + -1.5604751251959401e+00 1.9234826461749281e+00 -3.5044633261954967e+00 + -1.8765494151854987e+00 1.6573683175791756e+00 -3.5489374717691531e+00 + -2.1600607160594278e+00 1.3301494197426407e+00 -3.5535189277995971e+00 + -2.4547454918550775e+00 9.2749296875004150e-01 -3.5462453793735444e+00 + -2.8075569001790992e+00 4.3882877291473910e-01 -3.6120071946118029e+00 + -3.1577697080201008e+00 -5.1403433722080449e-02 -3.8202262316576254e+00 + -3.3467942141125260e+00 -3.9621456943668465e-01 -4.0407510977655399e+00 + id 14526 + loc 8.8288187980651855e-01 4.6314537525177002e-01 404 + blend 0.0000000000000000e+00 + interp 4.3861365271040459e-01:2.7397969378141235e-01:7.2369630271364782e-01:2.4596327820075020e-01:1.2312608626001913e+00:3.7215939185932306e-01:2.0955186649628850e+00:3.0249399679628203e-01:2.7759804497621023e+00:4.3860926657387750e-01:3.4856945062292475e+00:2.7976908617280133e-01:3.9808501796402651e+00 + CVs 20 + -4.7166870371507241e-02 3.0083238315930960e-01 4.0772870259378688e-02 + -4.9356315062846434e-02 5.7976217505306327e-01 8.4644734368338803e-02 + -7.3569527583455918e-02 8.6191995632078622e-01 1.3916078834810480e-01 + -1.3140377399087283e-01 1.1504714784038785e+00 2.0983376737829279e-01 + -2.2629083050226906e-01 1.4408115739064726e+00 2.9931890940919315e-01 + -3.6209283231545186e-01 1.7263358168862213e+00 4.0739208991380604e-01 + -5.3950715297041774e-01 1.9991171910089163e+00 5.3113916315539056e-01 + -7.5422823986515131e-01 2.2515800820297427e+00 6.6620107664815853e-01 + -1.0007947640723036e+00 2.4777138506889225e+00 8.0823958139860808e-01 + -1.2746052232876399e+00 2.6726814858065495e+00 9.5299206065917541e-01 + -1.5679659877735621e+00 2.8329309465078838e+00 1.0992635364471328e+00 + -1.8667378097381040e+00 2.9565036161612497e+00 1.2618349560913309e+00 + -2.1495830634528761e+00 3.0411155997013823e+00 1.4686862931930880e+00 + -2.3884886013823632e+00 3.0842390868529561e+00 1.7332539605743154e+00 + -2.5639099337993345e+00 3.0865471710909502e+00 2.0363693963716800e+00 + -2.6768031431681125e+00 3.0517777246840563e+00 2.3490684976054790e+00 + -2.7284592054789925e+00 2.9871944104065609e+00 2.6500299355858474e+00 + -2.7195087254963179e+00 2.9059743785187022e+00 2.9159512000122922e+00 + -2.7306871932828121e+00 2.8400943418246962e+00 3.0723099579089510e+00 + id 14527 + loc 4.1038823127746582e-01 1.9476762413978577e-01 412 + blend 0.0000000000000000e+00 + interp 3.7923797577704904e-01:2.6878985709497805e-01:9.6647050415475111e-01:3.7923418339729131e-01:1.5176903414144312e+00:2.6284338728494616e-01:2.0117422264931601e+00:3.7452144779529334e-01:2.8074454269247973e+00:2.3669740295588429e-01:3.8034687873140771e+00 + CVs 20 + -2.1798600854402839e-01 1.6052290585711693e-01 -4.1291700217781807e-01 + -4.2411859238517069e-01 2.3564388751278517e-01 -6.9301191491881764e-01 + -6.3016412355975482e-01 2.6985971037958728e-01 -9.5947697926240361e-01 + -8.2633581391585442e-01 2.8702039835148396e-01 -1.2597843607329946e+00 + -1.0009557388640313e+00 2.8436146862483491e-01 -1.5885258060429475e+00 + -1.1425289824669811e+00 2.6150900605597893e-01 -1.9378536966484616e+00 + -1.2396411356486960e+00 2.2159547023657877e-01 -2.2963254512238844e+00 + -1.2852152468029763e+00 1.6958471054607605e-01 -2.6507907822915957e+00 + -1.2796982020257797e+00 1.0982902829454644e-01 -2.9912078158899122e+00 + -1.2279332502612650e+00 4.7514837916184272e-02 -3.3080311235796991e+00 + -1.1310814126744109e+00 -4.3163184717498471e-03 -3.5873889061021447e+00 + -9.8278061482414936e-01 -2.9518275258418658e-02 -3.8242377735993287e+00 + -7.8649136548886678e-01 -4.1607669874885067e-02 -4.0535048480208600e+00 + -5.7488577163879395e-01 -8.7143198435992275e-02 -4.3203762121796219e+00 + -3.7930071554344719e-01 -1.9010898205216953e-01 -4.6305971829483914e+00 + -2.1011630981840418e-01 -3.4723356153236318e-01 -4.9725354731748590e+00 + -7.8731687622466406e-02 -5.5496710317910258e-01 -5.3339241041242493e+00 + -3.2699434661793703e-03 -7.9968633708371240e-01 -5.6887977802924388e+00 + 7.5190229347776860e-03 -1.0025897633179355e+00 -5.9327217985503031e+00 + id 14528 + loc 3.8350424170494080e-01 8.6983138322830200e-01 399 + blend 0.0000000000000000e+00 + interp 4.1287335203903991e-01:3.4860392191757933e-01:6.1191071454245183e-03:4.1286922330551956e-01:7.3214648350472422e-01:2.8880969704207099e-01:1.1198414299001733e+00:3.3146603646226397e-01:1.8749726570179477e+00:3.0089641208631185e-01:2.3069020053386651e+00:2.8344341156836933e-01:3.0962639379489874e+00 + CVs 20 + -1.9519437967979331e-01 3.0374631076766606e-01 -1.7177835857623475e-01 + -3.8759160880977084e-01 5.9160668234211777e-01 -3.6001175280813213e-01 + -5.8886997850961476e-01 8.5509401831295950e-01 -5.5012219472914048e-01 + -8.0478171947929689e-01 1.0885880638707508e+00 -7.3873377690841857e-01 + -1.0360046695425829e+00 1.2851741254005002e+00 -9.2889414416084914e-01 + -1.2832109851412308e+00 1.4344600866810384e+00 -1.1208315587105206e+00 + -1.5500771606267114e+00 1.5224099309420394e+00 -1.3154786915757146e+00 + -1.8405727038398272e+00 1.5358413469442154e+00 -1.5134822662942149e+00 + -2.1534446488352161e+00 1.4742864638404360e+00 -1.7087241114813747e+00 + -2.4711425302107570e+00 1.3378023336460971e+00 -1.8943030904945151e+00 + -2.7634782170199776e+00 1.1097641977568291e+00 -2.0722274725554293e+00 + -3.0308720908363287e+00 7.8340574924428652e-01 -2.2537691867558971e+00 + -3.3142308159563996e+00 3.9172946071666925e-01 -2.4437241323581813e+00 + -3.6304056104499227e+00 -2.0085690810876661e-02 -2.6231369951592169e+00 + -3.9609282059006552e+00 -4.4386233808535869e-01 -2.7758040074071055e+00 + -4.3758732018682185e+00 -8.5175862797201884e-01 -2.9219565134684693e+00 + -5.0416231511089364e+00 -1.0545563749131397e+00 -3.0877529148716301e+00 + -5.7905366267319769e+00 -9.0569811810304546e-01 -3.2519093732444415e+00 + -6.2655717439450234e+00 -1.0146366027142182e+00 -3.4246296967852676e+00 + id 14529 + loc 2.9004737734794617e-01 1.3692924752831459e-02 400 + blend 0.0000000000000000e+00 + interp 4.8512164282728248e-01:2.3347060951336501e-01:9.1724604863269943e-01:3.0065530862863771e-01:1.4072520456700610e+00:2.5889777244845669e-01:2.1189248767005759e+00:4.8511679161085425e-01:2.9920481701593982e+00:4.2361264482843730e-01:3.2357078173158627e+00:2.7190997127462113e-01:3.8760289229504190e+00 + CVs 20 + -8.5988412649634444e-02 3.1646506030433030e-01 2.7008166627234875e-01 + -1.7385516641515175e-01 6.3631762053234542e-01 5.5039000149067452e-01 + -2.7779946970388353e-01 9.5703425420508470e-01 8.4658754125258007e-01 + -4.1430905191639922e-01 1.2689620126020738e+00 1.1661329466315307e+00 + -5.9869714854670053e-01 1.5530175652396805e+00 1.5157508556874872e+00 + -8.4054481519987800e-01 1.7806805697906847e+00 1.8981453396324430e+00 + -1.1391913545939376e+00 1.9187881851027244e+00 2.3067056293044002e+00 + -1.4812977243361798e+00 1.9395197942890281e+00 2.7236108393936673e+00 + -1.8415277558079284e+00 1.8309752784665967e+00 3.1247727829582708e+00 + -2.1909398125115120e+00 1.6042473933543955e+00 3.4900850708147222e+00 + -2.5152265148555113e+00 1.2860539840734728e+00 3.8087384460078320e+00 + -2.8251515620412100e+00 9.0645352040122540e-01 4.0720638165858745e+00 + -3.1380986075177142e+00 4.8951185887071791e-01 4.2707920266503034e+00 + -3.4459378034292092e+00 4.2944897310725150e-02 4.4034850756660155e+00 + -3.7314887375306944e+00 -4.1688641583552832e-01 4.4838373419665150e+00 + -4.0624883975508927e+00 -8.0156797000414359e-01 4.5520618896572405e+00 + -4.6103503449433498e+00 -8.9216411463052170e-01 4.6600939097058953e+00 + -5.2869385688976198e+00 -4.3786296676341596e-01 4.7699239001846321e+00 + -5.6373955720325135e+00 -5.4665443004854897e-01 4.8595617925117836e+00 + id 14530 + loc 1.3415789604187012e-01 8.3022499084472656e-01 405 + blend 0.0000000000000000e+00 + interp 4.6587855585619226e-01:4.6587389707063370e-01:3.4274517236340563e-01:3.0514600596295555e-01:1.1745990556319539e+00:3.5085675589594856e-01:2.1751261978274323e+00:2.8702360530047677e-01:2.9628112402921163e+00:2.9902703295229710e-01:3.5197669130525862e+00 + CVs 20 + 2.4445694624986392e-01 2.9899089433665982e-01 4.1852225193859109e-02 + 3.2458209809517474e-01 5.2459220399987194e-01 8.2861811327652787e-02 + 3.6405034946463677e-01 7.0805456623678076e-01 1.4451041138867912e-01 + 4.0271628502884599e-01 8.8042735133902816e-01 2.4551115550528702e-01 + 4.3563877912806337e-01 1.0315515628580478e+00 3.9024924254975552e-01 + 4.5894713806755216e-01 1.1509857754462729e+00 5.7749307489155444e-01 + 4.7104910399665739e-01 1.2328497939405596e+00 8.0090371478765399e-01 + 4.7306720887093862e-01 1.2776098302990231e+00 1.0538654258802855e+00 + 4.6824996475375380e-01 1.2889912654676912e+00 1.3331440217419106e+00 + 4.6112005801268480e-01 1.2700669572432326e+00 1.6387359061995599e+00 + 4.5651900050944094e-01 1.2201746651134646e+00 1.9712098572687731e+00 + 4.5878574585964665e-01 1.1352934843195763e+00 2.3284735627504252e+00 + 4.7546299625144495e-01 1.0178755267645254e+00 2.7048052885282758e+00 + 5.2271055061968807e-01 8.8907558076252902e-01 3.0938611334827986e+00 + 6.2308567897609002e-01 7.8603892555525612e-01 3.4904436443462572e+00 + 7.9220381535423112e-01 7.3562514618632335e-01 3.8829210036421653e+00 + 1.0305122861210188e+00 7.4360292264829297e-01 4.2505399168151676e+00 + 1.3196839682007708e+00 8.0769764174795333e-01 4.5722445176433331e+00 + 1.5523396541859151e+00 8.1288235876629400e-01 4.8899782051223886e+00 + id 14531 + loc 7.1585848927497864e-02 9.4015103578567505e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1851270362391296e-01:4.1850851849687676e-01:9.7045148893197819e-03:3.0341261850322598e-01:8.7084461844255201e-01:2.8466811392360225e-01:1.3707200147345691e+00:3.7656828787126895e-01:2.2620076941914919e+00:2.6538252771418069e-01:3.1639366602974963e+00 + CVs 20 + 3.1750456227665130e-01 1.6476083987337642e-01 -1.8849013663521094e-01 + 6.0656813486993311e-01 3.4867600772862711e-01 -4.0825465571413966e-01 + 8.7249714631427544e-01 5.4272886469582482e-01 -6.4028626293104707e-01 + 1.1038858409610586e+00 7.4394626207023351e-01 -8.8111075344678946e-01 + 1.2817631290578519e+00 9.4490906208319991e-01 -1.1315392952080274e+00 + 1.3907356834098952e+00 1.1248854422082983e+00 -1.3848215716358283e+00 + 1.4275531946301245e+00 1.2559414347570719e+00 -1.6239255001957948e+00 + 1.4067873908901134e+00 1.3179181783694902e+00 -1.8232559863526991e+00 + 1.3534006840704931e+00 1.3155191679368223e+00 -1.9601440744611309e+00 + 1.2873217741063343e+00 1.2793167366598488e+00 -2.0334431521926342e+00 + 1.2153912211107112e+00 1.2396573486767684e+00 -2.0718317077788839e+00 + 1.1314661678755360e+00 1.1980612451308623e+00 -2.1213270828847528e+00 + 1.0260277707790975e+00 1.1289793116905704e+00 -2.2128216460769679e+00 + 9.0176475134001244e-01 1.0106673604565442e+00 -2.3486368770112986e+00 + 7.7377050158907057e-01 8.3275244294061557e-01 -2.5252765969328341e+00 + 6.6940491068060459e-01 5.8392472664361827e-01 -2.7482350390407402e+00 + 6.5382146898478910e-01 2.4203239457265413e-01 -3.0314617530451327e+00 + 8.3049042719675181e-01 -1.4720723763445742e-01 -3.3371663508198601e+00 + 9.5893921836614404e-01 -3.1315964364109133e-01 -3.5000894605918034e+00 + id 14532 + loc 3.1927755475044250e-01 3.0463632941246033e-01 401 + blend 0.0000000000000000e+00 + interp 3.8855148938289713e-01:2.9605514131621058e-01:7.6306467353175311e-01:3.8854760386800330e-01:1.4993371246497404e+00:3.4710666617681540e-01:1.9977273157321767e+00:3.0868027968957540e-01:2.6057262651389617e+00:3.0139199503086656e-01:3.3917614383610641e+00 + CVs 20 + -2.9851989820918190e-01 1.7889671315878347e-01 1.7594426257483056e-01 + -5.6769007666257709e-01 3.6663476267543421e-01 3.2760049290828569e-01 + -8.2808489099225691e-01 5.5353167607771669e-01 4.7894889909773175e-01 + -1.0940819619035835e+00 7.3259207366403001e-01 6.4739327873023933e-01 + -1.3665659969160064e+00 8.9673388257758180e-01 8.3772532582481385e-01 + -1.6430625047409047e+00 1.0363215886759878e+00 1.0555402351104133e+00 + -1.9153651253763742e+00 1.1409849217399182e+00 1.3080584296271287e+00 + -2.1720746651003577e+00 1.2018396354960119e+00 1.6021256642550386e+00 + -2.4014743583262828e+00 1.2132176783616990e+00 1.9391729996182956e+00 + -2.5951217282098735e+00 1.1735113084828459e+00 2.3148026949696594e+00 + -2.7507503314866115e+00 1.0853956186122478e+00 2.7224277779019217e+00 + -2.8694843246638251e+00 9.5245975322870047e-01 3.1484337547532197e+00 + -2.9494617724161749e+00 7.7990000922738800e-01 3.5704822033157364e+00 + -2.9803624376746085e+00 5.8423035118481437e-01 3.9621314489518737e+00 + -2.9431660544459177e+00 4.1026577926748586e-01 4.2946593003779086e+00 + -2.8315351359604124e+00 3.2259671470248996e-01 4.5360171207041473e+00 + -2.6838991828040455e+00 3.6341183724062937e-01 4.6592648317693008e+00 + -2.5742291636012946e+00 5.1187121404347302e-01 4.6656183510930767e+00 + -2.3526558704618132e+00 4.3304701118365829e-01 4.9281120010961086e+00 + id 14533 + loc 8.7852579355239868e-01 4.6864658594131470e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2470039271535174e-01:4.2769750349984692e-01:5.7772410273621011e-03:3.2555978300919497e-01:4.4052275206203173e-01:3.4774970397309513e-01:9.9272403265084108e-01:4.2614094787948087e-01:1.4642804157365701e+00:4.4505708598452204e-01:2.1075386023568479e+00:5.2469514571142462e-01:2.5581593166252796e+00:4.6141494316994969e-01:2.9709697106882809e+00:3.0495015246789747e-01:3.4711843940246805e+00 + CVs 20 + -1.5638260380420502e-01 2.5269805332434564e-01 3.3983710780866469e-02 + -3.0052240893193505e-01 4.9242239215991862e-01 1.1255471754177968e-01 + -4.4248817647411998e-01 7.1283206487769257e-01 2.1885951323538547e-01 + -5.8460411899601394e-01 8.9929482735463240e-01 3.3586028664289624e-01 + -7.1833657690770369e-01 1.0401280292775421e+00 4.5813215380715000e-01 + -8.3402204908033772e-01 1.1308490441079364e+00 5.7736909383964252e-01 + -9.2920692990107923e-01 1.1788647011166433e+00 6.9071353650722411e-01 + -1.0130998970419254e+00 1.1962620029519424e+00 8.0432915151270579e-01 + -1.0991045223682256e+00 1.1889864352272865e+00 9.2412892773092092e-01 + -1.1984697676473026e+00 1.1566586933643699e+00 1.0506221249495451e+00 + -1.3139515176468495e+00 1.0994106644564179e+00 1.1804483976927420e+00 + -1.4364370544681473e+00 1.0253791970880948e+00 1.3076534898494416e+00 + -1.5534947146745832e+00 9.4913381556538590e-01 1.4257964027927263e+00 + -1.6581204676565662e+00 8.8551253166469057e-01 1.5303681028806875e+00 + -1.7512958642751542e+00 8.4930175585284584e-01 1.6178991698090943e+00 + -1.8429380006967928e+00 8.3617442726350566e-01 1.6917427155102511e+00 + -1.9192208015812593e+00 7.8904275314618333e-01 1.7845716486660994e+00 + -1.9303586158776025e+00 6.9669195714420951e-01 1.9277537227757988e+00 + -1.8175089400601434e+00 6.1571365727975458e-01 2.1777583723471290e+00 + id 14534 + loc 8.2520401477813721e-01 8.1890195608139038e-01 393 + blend 0.0000000000000000e+00 + interp 3.7405963053808905e-01:3.0436816412856388e-01:1.6645106611129568e-01:2.9805423570367467e-01:9.9543660665165179e-01:3.7405588994178368e-01:1.7370655168867284e+00:2.9159699602798772e-01:2.3335074428776830e+00:2.8138551736379624e-01:3.5386993090397865e+00 + CVs 20 + -1.6594486009831430e-01 1.3932357847832105e-01 -1.9781481072993178e-02 + -3.5543837508770421e-01 3.1763462699936174e-01 -8.3013332335597573e-02 + -5.4885118005640443e-01 5.2612177240967195e-01 -1.6187122598145537e-01 + -7.3941761097591185e-01 7.6500718423498437e-01 -2.3840692901613453e-01 + -9.3047554449591496e-01 1.0349199880179119e+00 -3.0957556050611001e-01 + -1.1275581187082173e+00 1.3293124019737075e+00 -3.8254801956776385e-01 + -1.3349939554406833e+00 1.6318403385444660e+00 -4.7595269753721131e-01 + -1.5565643241064309e+00 1.9202053687528760e+00 -6.0572689896039378e-01 + -1.7962582871967170e+00 2.1715553779690309e+00 -7.8179712888403408e-01 + -2.0457444794312090e+00 2.3442947960910208e+00 -1.0296895031025681e+00 + -2.2587645043462894e+00 2.3520493018369475e+00 -1.3701027067348996e+00 + -2.3664866524427435e+00 2.1227236533151985e+00 -1.7239942898882092e+00 + -2.3672005277181714e+00 1.7242756365822614e+00 -1.9681155466240550e+00 + -2.3265285923291481e+00 1.2782868299563763e+00 -2.1238081340868118e+00 + -2.3091287664541991e+00 8.2656469758204687e-01 -2.2760670317220764e+00 + -2.4197844754895810e+00 3.9633493222891225e-01 -2.4437733314021135e+00 + -2.8201926657152483e+00 8.5864787184316338e-02 -2.5807178932570980e+00 + -3.4601861480127725e+00 6.5636930881205480e-03 -2.6236569397216960e+00 + -3.7425097216416008e+00 -3.1410460868531342e-01 -2.8493379151949405e+00 + id 14535 + loc 5.9949970245361328e-01 6.2788087129592896e-01 404 + blend 0.0000000000000000e+00 + interp 4.1785649905780081e-01:2.8428213980785655e-01:4.7450188516007619e-01:2.4935445654709829e-01:1.5999693736749916e+00:3.7685353139031796e-01:2.0394075203303630e+00:3.4555267273128731e-01:2.8681167783565131e+00:4.1785232049281024e-01:3.1476915295612033e+00:3.0385115010566216e-01:3.9052362005499703e+00 + CVs 20 + -5.5205134704070728e-02 3.0560032811998161e-02 6.7355312488424357e-03 + -8.6669758556105148e-02 8.2161829203467915e-02 2.3407704577173921e-02 + -9.8436127214977465e-02 1.4167319145385102e-01 5.0922526158053316e-02 + -1.0270004351837192e-01 2.0159859159721261e-01 8.6060921523826286e-02 + -9.7413219812038682e-02 2.6005227230851596e-01 1.2737189658194770e-01 + -8.0699874391500559e-02 3.1400882249515272e-01 1.7386556717963567e-01 + -5.1938996687374075e-02 3.5835924398195085e-01 2.2446593288969988e-01 + -1.2994190865105101e-02 3.8504581184059850e-01 2.7764604360651246e-01 + 3.2749057200613732e-02 3.8983704046538520e-01 3.3255696558459935e-01 + 8.7067235348472743e-02 3.8146806753078810e-01 3.9190992665900204e-01 + 1.5663424393585690e-01 3.6762405023127831e-01 4.5816500880476929e-01 + 2.4764792869322999e-01 3.5016780223919453e-01 5.2802785846231837e-01 + 3.5904591144274145e-01 3.2675836665000868e-01 5.9291047213172132e-01 + 4.8326794684650920e-01 2.9289079261812756e-01 6.4488018937385716e-01 + 6.1495985332988845e-01 2.4436280639267322e-01 6.7463613668667466e-01 + 7.5000540628709200e-01 1.7765056496470411e-01 6.6837243344652886e-01 + 8.7586079526822291e-01 9.1110317647378369e-02 6.1425989947024862e-01 + 9.7322473441648505e-01 -1.0652614407339056e-02 5.1057230301212930e-01 + 1.1338580654995418e+00 -2.7316459911992608e-02 4.3579482610357173e-01 + id 14536 + loc 5.0504887104034424e-01 5.2470877766609192e-02 412 + blend 0.0000000000000000e+00 + interp 4.5667572345670654e-01:2.3109913606769836e-01:1.3764150911438644e-01:3.3326295564065961e-01:1.0515546836528387e+00:2.5933404806922888e-01:1.9999596561851773e+00:4.5667115669947200e-01:2.8645061779474652e+00:3.1126435008942471e-01:3.2488460169679905e+00 + CVs 20 + -5.0724561623065045e-01 2.1736901859894750e-01 1.5865755016719496e-01 + -8.9852445735886932e-01 3.7151478152580103e-01 2.9257630368285042e-01 + -1.2485222387332144e+00 5.0173351056983817e-01 4.0597939552763485e-01 + -1.6044144186799003e+00 6.2605621245167453e-01 5.0959312128521561e-01 + -1.9637125659132515e+00 7.4254245942194952e-01 6.0263939291174962e-01 + -2.3218861692304822e+00 8.4980426638024120e-01 6.8174935270452997e-01 + -2.6743786443065645e+00 9.4736770729408915e-01 7.4190394198147036e-01 + -3.0178652671508468e+00 1.0350482671617458e+00 7.7887153959640543e-01 + -3.3475713502268643e+00 1.1131269484905151e+00 7.8989433814831966e-01 + -3.6552650280003833e+00 1.1834862892834896e+00 7.7409472668383805e-01 + -3.9418477134298220e+00 1.2474033705158785e+00 7.3468145742379076e-01 + -4.2442880854826939e+00 1.2962250439400385e+00 6.7731493739727666e-01 + -4.6193628409492558e+00 1.3044625621847554e+00 6.0934023167053408e-01 + -5.0612112213213356e+00 1.2482984096899359e+00 5.5377263111891672e-01 + -5.5113577715373445e+00 1.1323409385677570e+00 5.3292936754683728e-01 + -5.9370543102422904e+00 9.7192549894814695e-01 5.4914467728997884e-01 + -6.3283071432787903e+00 7.7649057771502150e-01 5.9913173024710631e-01 + -6.6712086968211270e+00 5.6037866825422533e-01 6.7883596614867725e-01 + -6.8182341331194261e+00 4.7156453243446839e-01 7.2888454355895460e-01 + id 14537 + loc 7.9008257389068604e-01 7.9593241214752197e-01 399 + blend 0.0000000000000000e+00 + interp 3.3949698505080134e-01:2.8288312044488068e-01:8.7736137296062111e-02:3.1664701668214906e-01:8.6560749648482382e-01:2.8498415121951975e-01:1.2700872110513481e+00:3.3949359008095087e-01:2.1955654583238591e+00:2.6940731594206707e-01:3.0583769978122475e+00 + CVs 20 + -1.5325454093529026e-01 3.9586345640073195e-01 -3.6460259386540256e-01 + -2.9519634070698481e-01 7.4821114538930023e-01 -7.4351936594069734e-01 + -4.5325307660053443e-01 1.0353487065882814e+00 -1.1532428645706077e+00 + -6.4128242525113655e-01 1.2352005460134838e+00 -1.5885049710100430e+00 + -8.6012245016022826e-01 1.3248851803482120e+00 -2.0292470953562334e+00 + -1.1003082562124884e+00 1.2913165553388084e+00 -2.4468028667171278e+00 + -1.3537045673277599e+00 1.1463176329523612e+00 -2.8173300103921521e+00 + -1.6213634062360411e+00 9.1931211076766439e-01 -3.1333379081354948e+00 + -1.8863205080856034e+00 6.2832269828697207e-01 -3.3808957797147765e+00 + -2.1050106051176343e+00 2.8748670345854177e-01 -3.5317000230375930e+00 + -2.2805592756768536e+00 -7.7366896006536678e-02 -3.5988774176230991e+00 + -2.4958652797461411e+00 -4.7043524951991844e-01 -3.6482826212180899e+00 + -2.8041724166076207e+00 -9.0273519556175186e-01 -3.6927585330606929e+00 + -3.1593750240000253e+00 -1.3390654892253360e+00 -3.6729509037935060e+00 + -3.5215621565812221e+00 -1.7599715629851849e+00 -3.5698741105710825e+00 + -4.0369424002485639e+00 -2.1945328266309905e+00 -3.4505232071581742e+00 + -4.9557569429769206e+00 -2.5390249231877409e+00 -3.3902593851067233e+00 + -6.0582482049131752e+00 -2.5371829422310213e+00 -3.3567168140163646e+00 + -6.6038901745794236e+00 -2.6331147629931615e+00 -3.2293157224706452e+00 + id 14538 + loc 9.6196877956390381e-01 5.2982531487941742e-02 400 + blend 0.0000000000000000e+00 + interp 4.5011737985298023e-01:4.5011287867918170e-01:7.9083273450124025e-01:2.9505271351328755e-01:1.5618337745933528e+00:4.1114520554158812e-01:2.0336968243537967e+00:2.6304655957733780e-01:2.7967571440548187e+00:2.4644738777756142e-01:3.7990893234175811e+00 + CVs 20 + 2.5500843146549873e-01 1.2268335282938203e-01 1.6449579679542067e-01 + 5.0589762586573539e-01 2.6325037838933335e-01 3.4228672847616254e-01 + 7.4957385003248023e-01 4.0562197637310310e-01 5.1824245550363424e-01 + 9.8485427078096366e-01 5.3975108271625727e-01 6.8534849238243378e-01 + 1.2116207142068269e+00 6.6079716920699916e-01 8.4109372487065048e-01 + 1.4304319413970739e+00 7.6639380797327705e-01 9.8368021830114016e-01 + 1.6433625147737023e+00 8.5764354604143578e-01 1.1143859934855871e+00 + 1.8533298491503614e+00 9.3789702521231733e-01 1.2370279970405449e+00 + 2.0582004389518929e+00 1.0085285763071794e+00 1.3510175780321436e+00 + 2.2468114732491689e+00 1.0702015263678215e+00 1.4455110827254769e+00 + 2.4092029115616778e+00 1.1308193385254148e+00 1.5102937722062653e+00 + 2.5522280401106747e+00 1.1972621282101115e+00 1.5533890275267652e+00 + 2.6922250980053923e+00 1.2614679261927373e+00 1.5900342949710748e+00 + 2.8339329535222793e+00 1.3147032002002215e+00 1.6243642943936576e+00 + 2.9752682171235056e+00 1.3573115703564089e+00 1.6566124360042118e+00 + 3.1285682338688265e+00 1.3879321636864188e+00 1.6925123154219084e+00 + 3.3186257454587937e+00 1.3934703157378954e+00 1.7374358273831401e+00 + 3.5471996310526226e+00 1.3533632697939784e+00 1.7826672641831642e+00 + 3.7195063842233358e+00 1.1950037357189514e+00 1.7346464401035901e+00 + id 14539 + loc 2.8630015254020691e-01 4.8896533250808716e-01 1069 + blend 0.0000000000000000e+00 + interp 3.2485855154171245e-01:3.2485530295619702e-01:8.3173537866560132e-01:3.0226716617906491e-01:1.2912511565561551e+00:2.7552943480931508e-01:1.9722621374179283e+00:2.4250487619114505e-01:2.6926686829492632e+00:2.6241184329918255e-01:3.9871372710944097e+00 + CVs 20 + -1.9163421904381539e-01 2.8208502447506295e-01 -6.4499889932482027e-02 + -3.8541872930365162e-01 5.3440240395890259e-01 -1.5777541887885183e-01 + -5.7770404045355006e-01 7.6644930146084822e-01 -2.6323992056484530e-01 + -7.7256095827881144e-01 9.7818887636276131e-01 -3.7510539966378847e-01 + -9.7813567363924592e-01 1.1659258195893125e+00 -4.9265720138486851e-01 + -1.1948651789299483e+00 1.3257785216777487e+00 -6.0675138548229257e-01 + -1.4019594429106126e+00 1.4480417224099398e+00 -7.0052949378396223e-01 + -1.5618493896399563e+00 1.5246590667205531e+00 -7.6545277099588227e-01 + -1.6543097117603554e+00 1.5725146733668152e+00 -8.1271121050109130e-01 + -1.7192381284814660e+00 1.6141936666002485e+00 -8.4612985618337400e-01 + -1.8101825897571109e+00 1.6285258664051405e+00 -8.4752274488970714e-01 + -1.9353730846166934e+00 1.5836162237374865e+00 -8.0326294855531610e-01 + -2.0819208593783056e+00 1.4727991285315509e+00 -7.1353958327826483e-01 + -2.2425186986284915e+00 1.3053913853054850e+00 -5.8752659406997987e-01 + -2.4180715625829268e+00 1.0932485889797403e+00 -4.3823902347013455e-01 + -2.6090533667347380e+00 8.4918421849946402e-01 -2.7010749835434023e-01 + -2.8259606891766893e+00 5.7120851143280027e-01 -8.6221324298249802e-02 + -3.0772763698724348e+00 2.7984454729105979e-01 -6.0694410268880006e-03 + -3.2014796869583440e+00 1.8596563650867415e-01 -2.7417554603955036e-01 + id 14540 + loc 6.6925036907196045e-01 4.0605354309082031e-01 401 + blend 0.0000000000000000e+00 + interp 4.3471119787193374e-01:3.0534951167051261e-01:4.5822953366806496e-01:3.3845603933819940e-01:1.0610932330702787e+00:4.3470685075995502e-01:1.8415776561714319e+00:3.0555258121592627e-01:2.3253831559871028e+00:3.4146422255732523e-01:3.0824313505859307e+00:2.4152191455376595e-01:3.8410675399793845e+00 + CVs 20 + 1.2385238523659063e-01 3.3969507057885201e-01 9.5183680066384752e-02 + 2.6565165612850661e-01 7.0487780183747795e-01 2.1476189791400366e-01 + 4.1639929648287333e-01 1.0885682901767684e+00 3.4117319287364478e-01 + 5.7148288532106117e-01 1.4811191161504433e+00 4.8171187200366117e-01 + 7.3215403058697626e-01 1.8672216914788480e+00 6.5066000837889904e-01 + 9.0327351823160851e-01 2.2285685325913094e+00 8.5094023270494346e-01 + 1.0902329218029889e+00 2.5490777605312718e+00 1.0770097133247554e+00 + 1.2957013118456984e+00 2.8145321630394715e+00 1.3197740089118939e+00 + 1.5176926997245919e+00 3.0173935996350365e+00 1.5801351433015964e+00 + 1.7470160526549745e+00 3.1498602216962261e+00 1.8767135251673246e+00 + 1.9642268919601209e+00 3.1786419916485693e+00 2.2106204600169712e+00 + 2.1449068010337196e+00 3.0597752518605770e+00 2.5182320487408059e+00 + 2.2769874996649953e+00 2.8247466840557403e+00 2.6929878500892448e+00 + 2.3763288883215550e+00 2.5986084190887322e+00 2.7066768301143447e+00 + 2.4633497747052391e+00 2.4654139615998472e+00 2.6276084988115693e+00 + 2.5399876644055408e+00 2.4423579167035712e+00 2.5236926347274684e+00 + 2.5934840648564688e+00 2.5139557659879714e+00 2.4330938637251371e+00 + 2.6779567554531929e+00 2.5592409337948867e+00 2.3966830453162666e+00 + 2.9857101987509678e+00 2.4071980201597762e+00 2.4684885376247538e+00 + id 14541 + loc 6.5690301358699799e-02 3.4050726890563965e-01 393 + blend 0.0000000000000000e+00 + interp 4.6872249630699964e-01:2.7877180095563220e-01:4.6281077554909877e-01:2.5547875306307932e-01:1.0122790901329597e+00:3.8445300938146515e-01:1.8554206242215372e+00:4.0038459839406232e-01:2.3790370548912172e+00:4.6871780908203658e-01:2.9728196037338206e+00:2.8167449002279366e-01:3.5357780070357192e+00 + CVs 20 + -1.2787454459977532e-01 3.9040763267249068e-01 2.7367974069464795e-01 + -2.4468013306932454e-01 7.7509964076024451e-01 5.2266539293817560e-01 + -3.6882939197227071e-01 1.1502524794509459e+00 7.5137242146529704e-01 + -5.1028158432334647e-01 1.5099189757437017e+00 9.7083871186003656e-01 + -6.7324610136920171e-01 1.8486843590651916e+00 1.1945973250221162e+00 + -8.6037162262366229e-01 2.1613382533014889e+00 1.4359991924154838e+00 + -1.0739325125526979e+00 2.4395090851214758e+00 1.7072280051424114e+00 + -1.3161043031561777e+00 2.6692193357390841e+00 2.0171372876082270e+00 + -1.5852505512949293e+00 2.8322422603378179e+00 2.3659095297739143e+00 + -1.8699215806061362e+00 2.9146825940084478e+00 2.7419143946847360e+00 + -2.1462815184717674e+00 2.9173260719873735e+00 3.1245618508424799e+00 + -2.3873585885973134e+00 2.8578777529759116e+00 3.4910921765092215e+00 + -2.5862032552271259e+00 2.7695885800300455e+00 3.8260702954377943e+00 + -2.7665703376473250e+00 2.6951362126378706e+00 4.1188077386493598e+00 + -2.9575754133402143e+00 2.6626785133015742e+00 4.3419275122218330e+00 + -3.1733416183544860e+00 2.6598288245193444e+00 4.4416448759746219e+00 + -3.4338585923301848e+00 2.6362334613407006e+00 4.3981469860035389e+00 + -3.6943634676942971e+00 2.5621487199322246e+00 4.3609286816204467e+00 + -3.5683695808175453e+00 2.5934143077498306e+00 4.7124300480990238e+00 + id 14542 + loc 9.4984221458435059e-01 6.0048413276672363e-01 405 + blend 0.0000000000000000e+00 + interp 4.3142284512469375e-01:3.1542217559801067e-01:5.1547603950496790e-01:3.1116324307376730e-01:1.0103277570861731e+00:4.3141853089624255e-01:1.9771566266909884e+00:2.7092677814296723e-01:2.3530250165114839e+00:2.2502648699262545e-01:3.4786560816190364e+00:3.1821442464665223e-01:3.9998778165883033e+00 + CVs 20 + 1.5386983102741980e-01 2.9071010066749048e-01 -1.4690889701434365e-01 + 1.7237644372860914e-01 5.3549050250934760e-01 -2.7313007533813632e-01 + 1.7576823202505620e-01 7.5453072656172337e-01 -3.7299777066648887e-01 + 1.7417787801460693e-01 9.8773073625152952e-01 -4.4983318046713505e-01 + 1.6025152416526067e-01 1.2341943273669922e+00 -4.9222759264908678e-01 + 1.2577197933286288e-01 1.4896870561718998e+00 -4.7736568985481387e-01 + 6.4381487276083282e-02 1.7381994460172205e+00 -3.5693691348682854e-01 + -7.6013731158245390e-03 1.9119883724744577e+00 -4.3473925725777379e-02 + 5.4529130932856607e-03 1.8290249672133605e+00 4.7554209597829006e-01 + 1.8817509215261730e-01 1.4717250583328760e+00 8.9668332909616610e-01 + 4.3477717401448668e-01 1.1124336881026811e+00 1.0988949420874794e+00 + 6.7566469862423251e-01 8.1005352715952506e-01 1.2125713963423159e+00 + 9.1671928282373338e-01 5.3322628349630075e-01 1.3007299323745702e+00 + 1.1938428085085608e+00 3.1120819142525247e-01 1.3833607759820583e+00 + 1.5466185277526912e+00 2.1287700278295607e-01 1.4699161586973641e+00 + 1.9787368508489682e+00 2.7389644931894563e-01 1.5354905882265526e+00 + 2.4482868292851938e+00 4.5758639677111690e-01 1.5369044873694895e+00 + 2.9051391789872194e+00 6.9205720515872127e-01 1.4789330747616074e+00 + 3.2621325849213600e+00 6.1235922490533923e-01 1.6221786021856381e+00 + id 14543 + loc 8.2954668998718262e-01 2.2708515822887421e-01 404 + blend 0.0000000000000000e+00 + interp 4.6166168374063071e-01:4.0836436669956805e-01:4.3629572957320839e-02:2.9768049820862352e-01:9.9160857114582257e-01:4.2007680062596753e-01:1.3864175218035459e+00:4.6165706712379334e-01:1.9985270006992502e+00:4.5302913425651592e-01:2.4673291254833871e+00:3.3881293059893386e-01:2.9978817404920211e+00:3.8468495687081133e-01:3.6472393165440984e+00 + CVs 20 + 2.3888304164224092e-02 2.1666530615062102e-01 9.7821229580680721e-02 + 5.7634806448252140e-02 4.2776456287127756e-01 2.0872951712501814e-01 + 6.7042917366445021e-02 6.4402273354869055e-01 3.3090864046707913e-01 + 4.2099504966829959e-02 8.6270676624660703e-01 4.6489921407377588e-01 + -2.2858897446699111e-02 1.0785090643121023e+00 6.1149584982332972e-01 + -1.3395659824142248e-01 1.2840435698689983e+00 7.6742309011627896e-01 + -2.9350751202640346e-01 1.4704976829976093e+00 9.2517792256994347e-01 + -4.9831877277761388e-01 1.6301555024858096e+00 1.0748836570970122e+00 + -7.4238684153193391e-01 1.7579685238409850e+00 1.2058189651949562e+00 + -1.0167146010916788e+00 1.8518439455738163e+00 1.3090615357534752e+00 + -1.3048294036086285e+00 1.9139760981715435e+00 1.3954466743004605e+00 + -1.5851947490660407e+00 1.9502971423545292e+00 1.5170191340585109e+00 + -1.8279854575090120e+00 1.9607964342972364e+00 1.7371262567198917e+00 + -1.9941037613974353e+00 1.9374222198287807e+00 2.0547262534623845e+00 + -2.0788988428375181e+00 1.8808265292467958e+00 2.4068409453197726e+00 + -2.0890453351836480e+00 1.8001296365326986e+00 2.7624349767390353e+00 + -2.0113531041527288e+00 1.7085871671782737e+00 3.1112870862507798e+00 + -1.8556096696504598e+00 1.6248210836999908e+00 3.4301047964691134e+00 + -1.8734755394795679e+00 1.6044108989786166e+00 3.6631191899727202e+00 + id 14544 + loc 4.5406734943389893e-01 9.9114429950714111e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4717696693418918e-01:4.4717249516451985e-01:3.6127975742241691e-03:3.0637720601992258e-01:9.8147730200291317e-01:2.1454490433005560e-01:1.1304551194352959e+00:2.3521657293582107e-01:2.0852362548469450e+00:3.7513008860541930e-01:2.9952747987387345e+00:2.9083193844841604e-01:3.5657692928251454e+00 + CVs 20 + 6.1669778934484970e-02 3.1476054985242075e-01 1.1762146734470480e-01 + 1.3530814940961877e-01 6.1625198452737595e-01 1.9499490311911083e-01 + 2.2193138177491586e-01 9.1574084052957239e-01 2.3986482450873389e-01 + 3.2287003097203071e-01 1.2215543213935935e+00 2.5604513408365748e-01 + 4.3947535994629006e-01 1.5307017065914739e+00 2.3719023215290103e-01 + 5.7282968452405414e-01 1.8380355538257553e+00 1.7647850884470262e-01 + 7.2142202173587355e-01 2.1303167533347453e+00 6.2837693427412855e-02 + 8.7816554380329959e-01 2.3882328644609467e+00 -1.1212887928362048e-01 + 1.0319528622133567e+00 2.5955779796366758e+00 -3.4838449861158383e-01 + 1.1709552676646935e+00 2.7404811515942322e+00 -6.4055642572444138e-01 + 1.2848243372731027e+00 2.8133943019991641e+00 -9.7899514830754775e-01 + 1.3653700416859871e+00 2.8076909607672875e+00 -1.3503953665342210e+00 + 1.4073699722952877e+00 2.7202609041792214e+00 -1.7412131899113856e+00 + 1.4102068639396519e+00 2.5487061596804699e+00 -2.1414771832367765e+00 + 1.3800989149566405e+00 2.2824993727804932e+00 -2.5468526233529327e+00 + 1.3326351260898210e+00 1.8794362665646558e+00 -2.9516832622622138e+00 + 1.2804571637578175e+00 1.2447133160891883e+00 -3.2796675803435749e+00 + 1.1899570568248521e+00 4.4476957660891170e-01 -3.3127888082014270e+00 + 1.0420009139633446e+00 3.2092610387695064e-02 -3.2805430173400545e+00 + id 14545 + loc 5.1902228593826294e-01 6.4724332094192505e-01 400 + blend 0.0000000000000000e+00 + interp 4.1121899637561077e-01:2.6768344261289645e-01:5.2490607653427845e-01:4.0091495292399915e-01:1.1686370805016106e+00:4.1121488418564706e-01:1.8190579629199539e+00:2.8423446334454494e-01:2.0332288991174394e+00:2.5014628110164427e-01:3.1037339450529018e+00:3.8769436611282704e-01:3.9882119452120253e+00 + CVs 20 + -1.4323537661252675e-01 1.8622668181809174e-01 -1.3987207565434168e-01 + -2.8064475658258364e-01 3.8669588125962590e-01 -3.2874444772627326e-01 + -3.9946690759537584e-01 5.8099203372040154e-01 -5.5888613760013484e-01 + -4.9139748610050865e-01 7.6025619380491105e-01 -8.2269558840367096e-01 + -5.5380789563491639e-01 9.2609250957369160e-01 -1.1147506686235911e+00 + -5.8636145312479837e-01 1.0847181240158004e+00 -1.4271992409733310e+00 + -5.9111752749706503e-01 1.2404901402093460e+00 -1.7525396696380788e+00 + -5.7254245318539732e-01 1.3869766488228112e+00 -2.0866228645168481e+00 + -5.3485778716846932e-01 1.5093550880018773e+00 -2.4269386535187820e+00 + -4.7996447582996393e-01 1.5939678692805865e+00 -2.7681341498448448e+00 + -4.0885453844423791e-01 1.6315862389321500e+00 -3.1013448323345774e+00 + -3.2394042290777125e-01 1.6163742468377575e+00 -3.4157732531427216e+00 + -2.2836257576809998e-01 1.5480890602879407e+00 -3.6982577350354742e+00 + -1.2415540842567652e-01 1.4355442925060824e+00 -3.9336244317596880e+00 + -1.4757724511035825e-02 1.2938718577893531e+00 -4.1108466005322395e+00 + 9.2383782871367476e-02 1.1376313275529268e+00 -4.2307764167639004e+00 + 1.9074801854861836e-01 9.7954443430012650e-01 -4.3077467501468050e+00 + 2.8113812325477983e-01 8.2695662848809670e-01 -4.3675816779766787e+00 + 3.7304089474564933e-01 6.7016395340449586e-01 -4.4384736545402070e+00 + id 14546 + loc 5.1171101629734039e-02 8.8459652662277222e-01 399 + blend 0.0000000000000000e+00 + interp 5.2941829604553736e-01:5.2941300186257689e-01:2.8777063667301095e-01:4.0436370636493058e-01:8.4479534532678568e-01:2.4177690207170202e-01:1.2228997879718730e+00:4.0050677662739348e-01:2.2442520347127712e+00:2.8999704533144366e-01:3.0236157802270025e+00:4.1004098723556454e-01:3.9005595107706617e+00 + CVs 20 + -1.1306869772744092e-01 3.6243088682776492e-01 -3.2202765458925281e-01 + -2.6841982757563854e-01 7.2030905809917911e-01 -6.4265757716395067e-01 + -4.5502952501561217e-01 1.0598710137183522e+00 -9.7462415752775533e-01 + -6.7360869281851687e-01 1.3757085242907459e+00 -1.3180431634879024e+00 + -9.3454511361221770e-01 1.6666112973974676e+00 -1.6590446136055788e+00 + -1.2496897161332532e+00 1.9237557686872335e+00 -1.9670922809205933e+00 + -1.6169537213890641e+00 2.1182111116259867e+00 -2.2001969977977827e+00 + -1.9994889833743505e+00 2.2039478689737946e+00 -2.3214470377806395e+00 + -2.3333163175090208e+00 2.1663686863670222e+00 -2.3244142023474570e+00 + -2.6102835830211202e+00 2.0502615133916531e+00 -2.2529412855222466e+00 + -2.8834953283615445e+00 1.8723219259462591e+00 -2.1517121243338471e+00 + -3.1907583273263072e+00 1.6093548847523567e+00 -2.0511922547011503e+00 + -3.5448148432899624e+00 1.2577990503061358e+00 -1.9927023681626177e+00 + -3.9406082094948274e+00 8.9014758191634502e-01 -2.0202055025219199e+00 + -4.3528973827311930e+00 6.4006568641393735e-01 -2.1345409735944449e+00 + -4.7131777784801994e+00 6.1007730445222041e-01 -2.2791375013821185e+00 + -4.8947236111524841e+00 7.9354034203159829e-01 -2.3680235756937944e+00 + -4.8888696360588426e+00 1.0293228081617358e+00 -2.3919366582841715e+00 + -5.0893079508030370e+00 1.4047143324807725e+00 -2.5577167312730866e+00 + id 14547 + loc 1.5356655418872833e-01 6.0057103633880615e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8739696174393817e-01:2.6894423470754791e-01:9.0737375528953113e-03:2.5953198560073315e-01:1.0657229394463499e+00:2.7856553178173626e-01:1.9827211318054263e+00:2.8708525361915005e-01:2.6418808131454128e+00:3.7316236239127309e-01:3.0366710645199801e+00:3.8739308777432074e-01:3.6662548687804781e+00 + CVs 20 + 6.6721960399536498e-02 2.5049359142251543e-01 -1.1208196696065525e-01 + 1.4212240734262943e-01 4.9561683370624232e-01 -2.3986529707554666e-01 + 2.1922041927508462e-01 7.3486865308959060e-01 -3.6870076446459643e-01 + 2.9587958350696880e-01 9.6985390858923093e-01 -4.9367949035785874e-01 + 3.7203140432351806e-01 1.1963230472148880e+00 -6.1558548604721697e-01 + 4.4366203319958464e-01 1.4099356010777910e+00 -7.3195062432517621e-01 + 5.0385732195318567e-01 1.6149703697396334e+00 -8.4134497553639653e-01 + 5.4671193057207934e-01 1.8253013986392705e+00 -9.4785776605641803e-01 + 5.7228198463598812e-01 2.0553620181646450e+00 -1.0666541932752631e+00 + 5.7317090914549418e-01 2.2907578784972311e+00 -1.2346302857806770e+00 + 5.2641988161742459e-01 2.4642178468318874e+00 -1.4696492662309151e+00 + 4.2660683809232847e-01 2.5260402777542108e+00 -1.7397384627759436e+00 + 2.9069659079017063e-01 2.4818876193041399e+00 -2.0138484537379697e+00 + 1.3709287002561510e-01 2.3587353462962946e+00 -2.2808527060311263e+00 + -2.7910738848188399e-02 2.1806137416220133e+00 -2.5417695625156207e+00 + -2.2650871911330805e-01 1.9542732444836255e+00 -2.8149028632744657e+00 + -4.9029742673987931e-01 1.6398424028623562e+00 -3.1531598024224712e+00 + -6.7355012440653073e-01 1.2386207498668347e+00 -3.5733023801021857e+00 + -4.7761989908608177e-01 1.2502222260726332e+00 -3.6723563526345329e+00 + id 14548 + loc 4.8483237624168396e-01 2.3753400146961212e-01 401 + blend 0.0000000000000000e+00 + interp 3.6553289991408922e-01:3.3382622560263742e-01:4.0209021227837738e-01:3.1313085469055402e-01:1.1082937535214976e+00:3.6552924458509012e-01:1.9978420287995633e+00:3.0259592075902592e-01:3.0032557241182247e+00:3.0964938212497922e-01:3.8886695562109663e+00 + CVs 20 + -1.9022309172844051e-01 3.6444308274400405e-01 2.0198130021438804e-02 + -3.9452603482896159e-01 7.2632375841984265e-01 6.8183312318296066e-02 + -6.0935256925456416e-01 1.0783411795080988e+00 1.2354015415535091e-01 + -8.4336024909830209e-01 1.4122220928534885e+00 1.8278771809448577e-01 + -1.1093832922268900e+00 1.7171395762707731e+00 2.5447087505063781e-01 + -1.4160073560203768e+00 1.9808476116529290e+00 3.5095319129072283e-01 + -1.7605282448258799e+00 2.1883755149997257e+00 4.8195374700821270e-01 + -2.1257705354850520e+00 2.3311788165052403e+00 6.4519352924539741e-01 + -2.4994020161002850e+00 2.4145850676173484e+00 8.3476946470568802e-01 + -2.8860160284970622e+00 2.4399496954674018e+00 1.0530712676839489e+00 + -3.2827529259345223e+00 2.3935824280505456e+00 1.2904445225185719e+00 + -3.6592485617106045e+00 2.2811312091886107e+00 1.5073961017021318e+00 + -3.9963980200745888e+00 2.1383917378923805e+00 1.6814229020355240e+00 + -4.3137614045609531e+00 1.9811157159704607e+00 1.8445849363687143e+00 + -4.6281817250328077e+00 1.8057988437271759e+00 2.0455056953268116e+00 + -4.9008214664387451e+00 1.6275339581409551e+00 2.2361848525265864e+00 + -5.0664082582902665e+00 1.4594364488972820e+00 2.2235972709810614e+00 + -5.1326634899498806e+00 1.1573440888859214e+00 1.9511221943018884e+00 + -5.2534655457855814e+00 1.1697867562865842e+00 2.1339861358575853e+00 + id 14549 + loc 2.3584784567356110e-01 3.7879079580307007e-01 393 + blend 0.0000000000000000e+00 + interp 4.4119616471259049e-01:2.8560650038254554e-01:2.5408841197411380e-02:3.3295434015644720e-01:9.7190125211595502e-01:4.4119175275094336e-01:1.3897882247579934e+00:2.8082081336054238e-01:2.0172913887612642e+00:2.8368274156233114e-01:3.0220567926359148e+00 + CVs 20 + -2.0348316894680041e-01 3.2548245738609266e-01 2.7684984908353860e-01 + -3.9692433898569401e-01 6.5956568736895904e-01 5.2489620588277086e-01 + -6.0711428346919227e-01 9.9043599583014541e-01 7.3771708352810061e-01 + -8.5231539030495285e-01 1.3021485295631228e+00 9.1775764574382079e-01 + -1.1403276724329463e+00 1.5770157822396347e+00 1.0707506322140210e+00 + -1.4660456623696514e+00 1.7963351358723199e+00 1.2006181445330588e+00 + -1.8100169337233045e+00 1.9473561263875538e+00 1.3065472318839886e+00 + -2.1486406053629592e+00 2.0286794553595247e+00 1.3867765309700526e+00 + -2.4682237593660550e+00 2.0478099693649265e+00 1.4452753142200512e+00 + -2.7669689372614847e+00 2.0102441637266848e+00 1.4935721301812066e+00 + -3.0446052423433390e+00 1.9134032566391408e+00 1.5468914527521886e+00 + -3.3015185416425039e+00 1.7483308364212724e+00 1.6225157028405346e+00 + -3.5522757058806134e+00 1.5198993576231519e+00 1.7380423930856614e+00 + -3.8321782860222195e+00 1.2542774597168127e+00 1.9064993140998379e+00 + -4.1678330094073228e+00 9.4861658074147048e-01 2.1384437043951867e+00 + -4.5348682713695956e+00 5.4405703806699979e-01 2.4590026970315750e+00 + -4.8401169087321003e+00 4.3898432448757241e-02 2.9078745634074172e+00 + -4.9514501942296931e+00 -3.6291689942053496e-01 3.4521575050777518e+00 + -4.7183824083825527e+00 -3.7533522372148198e-01 3.8960316533131789e+00 + id 14550 + loc 2.8223055414855480e-03 6.3980668783187866e-01 404 + blend 0.0000000000000000e+00 + interp 5.1828507458741624e-01:2.7562539974830880e-01:7.6081839330085621e-01:2.7313241992171994e-01:1.2435625352481003e+00:4.2568373231767603e-01:1.8338482315299327e+00:5.1827989173667044e-01:2.4375716472702145e+00:4.5693503813838660e-01:3.0000008471481676e+00:3.4614253530856748e-01:3.6057994163268035e+00 + CVs 20 + 3.0623748129910675e-02 9.1122972323199880e-02 9.6236618266680972e-03 + 2.9295521357215221e-02 1.6217159340039813e-01 3.4921058732071283e-02 + 7.3334905819272683e-03 2.2971322072001127e-01 6.7079675458344645e-02 + -1.7396012951386042e-02 3.0302738638760818e-01 1.0650552550082007e-01 + -4.0182704863347823e-02 3.8146339758538894e-01 1.5429485748718036e-01 + -5.7403124759257351e-02 4.6583515544399445e-01 2.1015178777764024e-01 + -6.5028176716946468e-02 5.5880459976386865e-01 2.7299591614629415e-01 + -5.8898001988243132e-02 6.6411287071303771e-01 3.4054960233834075e-01 + -3.5697257905736357e-02 7.8463785400721353e-01 4.0762137109175267e-01 + 6.0988801100065881e-03 9.2202812125392164e-01 4.6737916041823235e-01 + 6.6275112904686462e-02 1.0742569544954497e+00 5.1177975499080963e-01 + 1.4212951485623815e-01 1.2348672322082863e+00 5.3314061504673615e-01 + 2.2794198070411759e-01 1.3947928155968043e+00 5.2654859932883480e-01 + 3.1878112748267540e-01 1.5456613046980388e+00 4.9079527802066159e-01 + 4.1083709435447613e-01 1.6799819357644568e+00 4.2731302167371510e-01 + 5.0158482051922593e-01 1.7893554807900234e+00 3.4046609744568263e-01 + 5.9102320249730966e-01 1.8656217472885845e+00 2.3645973027280770e-01 + 6.8108804091044095e-01 1.9044668651419630e+00 1.1901710661093312e-01 + 6.1593338945830822e-01 1.8755410274393394e+00 5.2008480600880702e-02 + id 14551 + loc 3.3281937241554260e-01 8.3972179889678955e-01 400 + blend 0.0000000000000000e+00 + interp 4.3066631740028111e-01:2.8074832747527928e-01:4.3837746721458504e-01:2.5980216687548308e-01:1.0553533716635488e+00:2.7193496068312412e-01:1.9729724348238218e+00:2.8724819198201623e-01:2.5677539586537730e+00:2.5854691424118903e-01:3.0705452623654055e+00:4.3066201073710714e-01:3.5141508281562439e+00 + CVs 20 + -1.4143541434809748e-01 3.8942258222881554e-01 -2.0900313897789502e-01 + -2.7627365622350641e-01 7.5104722973740790e-01 -4.3779927185750511e-01 + -3.8548641023140329e-01 1.0738733742287365e+00 -7.0487401944145001e-01 + -4.7415359740272739e-01 1.3543474486816738e+00 -1.0106751264146259e+00 + -5.4932221944382142e-01 1.5881502103114129e+00 -1.3440186463580766e+00 + -6.1203418425299383e-01 1.7748672627945048e+00 -1.6926965095573898e+00 + -6.6063955729046908e-01 1.9175222699236192e+00 -2.0475890983520366e+00 + -6.9306220352538106e-01 2.0201681235860560e+00 -2.4030121428370661e+00 + -7.0715430681552549e-01 2.0872267185438367e+00 -2.7556271782142199e+00 + -6.9999001858807841e-01 2.1232373460917602e+00 -3.1042314460900498e+00 + -6.6881060717920626e-01 2.1331796876120914e+00 -3.4548012545106270e+00 + -6.1552498877652506e-01 2.1180008481855452e+00 -3.8185289005258776e+00 + -5.4545941005642284e-01 2.0722310328241083e+00 -4.1982286346997135e+00 + -4.6743406198401016e-01 1.9841823318980265e+00 -4.5879439486756182e+00 + -3.9425370253464581e-01 1.8373855802479500e+00 -4.9828834313332342e+00 + -3.4238099608039196e-01 1.6183139994568165e+00 -5.3762850325512614e+00 + -3.2685144341424832e-01 1.3272397918181045e+00 -5.7547297487553690e+00 + -3.5182999307993668e-01 9.8590151419511685e-01 -6.0998172993087456e+00 + -3.5575939674245333e-01 7.0769773378509537e-01 -6.3228447775682479e+00 + id 14552 + loc 9.5262652635574341e-01 2.1670569479465485e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1782296648730299e-01:3.1494975306492295e-01:2.5050575200117142e-01:3.9473776388474330e-01:9.1859580213030434e-01:4.1781878825763813e-01:1.8251697708426891e+00:3.0782480601661977e-01:2.1277826782304650e+00:2.3168552660986724e-01:2.9694214721007279e+00:2.2646549560911425e-01:3.7949415378631186e+00 + CVs 20 + -9.7606609678852249e-02 1.5610369634767912e-01 2.7689532282557833e-01 + -2.1112215722022815e-01 2.6304362467679687e-01 5.0776080771053966e-01 + -3.3468864362139533e-01 3.4186518329022009e-01 7.1794330671678541e-01 + -4.6863798812387886e-01 4.0453393097150253e-01 9.2314449041724345e-01 + -6.6083882430661856e-01 4.6280507974856339e-01 1.1320274479362231e+00 + -9.6657342546013392e-01 5.5075463011965653e-01 1.3498962805265700e+00 + -1.3534355458256786e+00 7.3533490731429196e-01 1.5778685996876165e+00 + -1.6997863407356653e+00 1.0375185710407600e+00 1.8019925444076814e+00 + -1.9386670919361291e+00 1.4043998653501184e+00 2.0028663831228526e+00 + -2.0821401805476749e+00 1.7884959531553970e+00 2.1748979829799819e+00 + -2.1456638443238671e+00 2.1648600052942202e+00 2.3487877635387462e+00 + -2.1156270845239420e+00 2.4752075501178488e+00 2.5960022852044622e+00 + -2.0039364627641723e+00 2.6433749450822344e+00 2.9264609895170119e+00 + -1.8591018155891081e+00 2.6575760255237650e+00 3.2758778027393816e+00 + -1.7297556181582376e+00 2.5540695058268050e+00 3.5915352249379220e+00 + -1.6439289900451961e+00 2.3800390680473207e+00 3.8692914250131194e+00 + -1.6171207044430234e+00 2.1598954974803179e+00 4.1154400517865630e+00 + -1.6677609537556561e+00 1.9012303708674969e+00 4.3012999808185555e+00 + -1.8316251851319210e+00 1.5246357754851052e+00 4.3832835171856468e+00 + id 14553 + loc 4.0470623970031738e-01 5.4843509197235107e-01 401 + blend 0.0000000000000000e+00 + interp 4.2055764385735361e-01:3.0137466338454866e-01:1.0634661448804084e-01:2.9989907604865063e-01:9.7642980660755174e-01:2.9799177533878080e-01:1.5449025346083669e+00:2.8474062677486695e-01:2.1435365953378280e+00:4.2055343828091507e-01:2.8273245780992573e+00:2.9451697601418253e-01:3.2840323802921283e+00 + CVs 20 + -1.1148607092437976e-01 2.9476843803874048e-01 -3.0044838953329472e-01 + -2.1426377288099180e-01 6.0056004297212673e-01 -6.0571619261084009e-01 + -3.3817365228037610e-01 8.9705385130056958e-01 -9.1257046499020522e-01 + -4.8855934038062060e-01 1.1618270617660986e+00 -1.2243262843204641e+00 + -6.6533553779631882e-01 1.3805057943260604e+00 -1.5471349889447477e+00 + -8.7807985441442027e-01 1.5446099829646247e+00 -1.8744535705308401e+00 + -1.1377734417406260e+00 1.6491316483071623e+00 -2.1861525182317920e+00 + -1.4439716966870091e+00 1.6902759786970427e+00 -2.4582344940956755e+00 + -1.7846684879688421e+00 1.6666817051501146e+00 -2.6718900952531168e+00 + -2.1465288536353730e+00 1.5808585222901255e+00 -2.8178627548721540e+00 + -2.5149391137442350e+00 1.4377490444793455e+00 -2.8939354317556334e+00 + -2.8737875513282423e+00 1.2438537267317336e+00 -2.9078787746687529e+00 + -3.2100996562684725e+00 1.0053339393231238e+00 -2.8733067441462774e+00 + -3.5116567570414934e+00 7.3417378816181911e-01 -2.7986217467301548e+00 + -3.7891178008260433e+00 4.3788109117189539e-01 -2.6941638246445350e+00 + -4.1139726749810848e+00 7.4585410712713518e-02 -2.5997640507484223e+00 + -4.5681363878803767e+00 -4.1472596346314194e-01 -2.6128833617183984e+00 + -5.0879880434011797e+00 -9.4652493457232345e-01 -2.8196622056579210e+00 + -5.3639018536239353e+00 -1.2287811868112408e+00 -2.8983089968246785e+00 + id 14554 + loc 5.7574081420898438e-01 7.6240015029907227e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7891133956046616e-01:2.8337009322470119e-01:9.8594600870452487e-01:4.6040969112803087e-01:1.1957110173878496e+00:4.7890655044707059e-01:1.8274926204170057e+00:4.5244754940398069e-01:2.0656767463912789e+00:3.0028959251688331e-01:2.8237440622968144e+00:3.2881441156184538e-01:3.1936859462949574e+00:4.3421222399953530e-01:3.9955704269808328e+00 + CVs 20 + 2.2386601438399323e-02 3.1338920233177697e-01 8.2798071181720501e-02 + 7.2621868597401384e-02 5.9761409321251335e-01 1.3301497913166391e-01 + 1.4471585363232120e-01 8.5854952250801364e-01 1.5837742233610824e-01 + 2.3409946336909501e-01 1.1023388960749310e+00 1.6717652791142157e-01 + 3.4117396219208762e-01 1.3284254794517023e+00 1.6467226549165698e-01 + 4.6592316524388094e-01 1.5403574647771050e+00 1.5836552052867037e-01 + 6.1010596307987686e-01 1.7397204173381187e+00 1.4665406256819113e-01 + 7.7574561857159097e-01 1.9204302318409885e+00 1.1899387118843507e-01 + 9.6070801569332187e-01 2.0744802473453556e+00 6.8359496099369088e-02 + 1.1584346389233284e+00 2.1966840492760400e+00 -5.9837769442061539e-03 + 1.3606902615999665e+00 2.2832668424224067e+00 -1.0118983427976624e-01 + 1.5592298390885380e+00 2.3325043065194180e+00 -2.1188064129860751e-01 + 1.7457601376923886e+00 2.3464021781654223e+00 -3.3165796156113880e-01 + 1.9114200927613834e+00 2.3332076918682070e+00 -4.5519596494078329e-01 + 2.0498030621125412e+00 2.3158510887406480e+00 -5.8344986910840224e-01 + 2.1689899272656841e+00 2.3630339252533292e+00 -7.4865097070022923e-01 + 2.2976363494889309e+00 2.5805280171686595e+00 -1.0773752216229604e+00 + 2.4562664809805743e+00 2.8072263698016720e+00 -1.6535877844494795e+00 + 2.5059367884765273e+00 2.5823924924904231e+00 -1.4742179303154477e+00 + id 14555 + loc 4.4628331065177917e-01 6.1099541187286377e-01 399 + blend 0.0000000000000000e+00 + interp 3.8643595857491536e-01:3.7017054676238736e-01:1.0407617291740401e-01:3.3214130119968521e-01:8.6631715591342440e-01:2.7098849101188544e-01:1.9112591470802478e+00:3.7614965903639214e-01:2.8567899952703382e+00:3.8643209421532965e-01:3.1143175465063466e+00:2.7723729019891519e-01:3.7929089029284535e+00 + CVs 20 + -5.7715114932362532e-02 2.7695230180739061e-01 -2.4709073279758259e-01 + -1.4314992858716485e-01 5.4240514737894729e-01 -5.0552472067625775e-01 + -2.1933258427444433e-01 7.8172044632891668e-01 -7.8232492830548916e-01 + -2.7505966426467843e-01 9.9173979872750395e-01 -1.0772738013119783e+00 + -3.1692642078147015e-01 1.1759478199635489e+00 -1.3834572869676232e+00 + -3.5211913699319702e-01 1.3359309200490845e+00 -1.6911956875981928e+00 + -3.8562382209362805e-01 1.4691442350222530e+00 -1.9901450070631042e+00 + -4.1908868532256699e-01 1.5704367119341873e+00 -2.2690861510772886e+00 + -4.5007452328235575e-01 1.6361961668608129e+00 -2.5150115220132423e+00 + -4.7237205561889745e-01 1.6716585054064812e+00 -2.7154557443062282e+00 + -4.8321721160282000e-01 1.6927152592338337e+00 -2.8738776598196747e+00 + -4.9483013491190608e-01 1.6950395833974312e+00 -3.0233867196730109e+00 + -5.1930345281919255e-01 1.6422440515563257e+00 -3.1836793429210095e+00 + -5.5779244966442820e-01 1.5154101767003021e+00 -3.3402620985177633e+00 + -6.1354062215922944e-01 1.3209020576041155e+00 -3.4713044909257622e+00 + -7.0126994637029094e-01 1.0943528077369282e+00 -3.5607742580720916e+00 + -8.5234556530305305e-01 8.7712219679377201e-01 -3.5923018292242515e+00 + -1.0664208488579192e+00 6.8265588287874746e-01 -3.6407528534112101e+00 + -1.0675623090726956e+00 6.9821905934400497e-01 -3.9178245288154541e+00 + id 14556 + loc 3.4373775124549866e-01 7.4602976441383362e-02 393 + blend 0.0000000000000000e+00 + interp 3.1496464817525982e-01:2.7592318009110617e-01:3.1831593541809589e-01:2.6307589873787823e-01:1.1852092772138683e+00:3.0467925101284421e-01:2.1098779245754642e+00:2.6969762111625917e-01:2.9885637437753072e+00:3.1496149852877808e-01:3.5145761600154275e+00 + CVs 20 + -6.6196091937642629e-02 3.9352094243647517e-01 4.1276762683707346e-01 + -1.3638855945605122e-01 7.8405905772737250e-01 7.5678662051112644e-01 + -2.1609470588321106e-01 1.1836779211689590e+00 1.0443728728459090e+00 + -3.2801288997127009e-01 1.5880329324931899e+00 1.2892581676961110e+00 + -5.0266028735591273e-01 1.9707315307475510e+00 1.4981763351049149e+00 + -7.5306356420985243e-01 2.3044407556255107e+00 1.6747574824116991e+00 + -1.0702949144641969e+00 2.5807409692545371e+00 1.8185823923842288e+00 + -1.4413936864083388e+00 2.8013104694279551e+00 1.9321187068598853e+00 + -1.8566312234056901e+00 2.9599601517866607e+00 2.0257451065940226e+00 + -2.3005268076410039e+00 3.0490006706104635e+00 2.1142826479057089e+00 + -2.7482085089197330e+00 3.0643866386601815e+00 2.2100555354520388e+00 + -3.1707579845793679e+00 3.0098513945929635e+00 2.3163795224650645e+00 + -3.5575121487078376e+00 2.8975108853403153e+00 2.4229512989639721e+00 + -3.9259190451449810e+00 2.7328419659522059e+00 2.5191653166971708e+00 + -4.2877738251672195e+00 2.4837949562759607e+00 2.6098878027960537e+00 + -4.5875357329214177e+00 2.0799879797221656e+00 2.7081672250905107e+00 + -4.7104341220334245e+00 1.5319335253282378e+00 2.8300014321605249e+00 + -4.5930425498119076e+00 1.0200944025652983e+00 2.9880462837549406e+00 + -4.2098451338793099e+00 8.3542837734810615e-01 3.1666074756161628e+00 + id 14557 + loc 4.0136951208114624e-01 5.0411086529493332e-02 404 + blend 0.0000000000000000e+00 + interp 5.4697944799477061e-01:4.0321638315529862e-01:5.7617368491354859e-01:3.1404788721872839e-01:1.0284287710371744e+00:5.4697397820029070e-01:1.8762529838683963e+00:3.2724538725754881e-01:2.4830270541398445e+00:4.4754116048925235e-01:3.0221052796534735e+00:5.2250616188091292e-01:3.4281629771151669e+00:4.5285359043261314e-01:3.9086842971515647e+00 + CVs 20 + -1.5516273506820849e-01 1.4746578172241669e-02 9.5987562678044092e-02 + -3.2224196800755550e-01 3.9587892974829911e-02 1.9025541473547852e-01 + -4.9265286451089252e-01 6.6130185802583633e-02 2.8138043524917850e-01 + -6.6319828954643190e-01 9.0303575725348112e-02 3.6902864498086163e-01 + -8.2232157895225266e-01 1.0843478858612821e-01 4.5035959249468288e-01 + -9.4930308395953567e-01 1.1534335246800287e-01 5.2295314036755436e-01 + -1.0272488270247340e+00 1.0957022768188288e-01 5.8356037342194211e-01 + -1.0598309376851689e+00 9.8080027680746334e-02 6.2968420514552981e-01 + -1.0643164331491282e+00 8.6287185233685726e-02 6.5701279242945809e-01 + -1.0583239299230649e+00 7.6712144826974527e-02 6.6339985340774155e-01 + -1.0496561786207861e+00 7.7449840995995736e-02 6.5768587777811005e-01 + -1.0364388762280607e+00 9.1769226531001918e-02 6.4545884246973473e-01 + -1.0168497657721960e+00 1.2309653944102764e-01 6.3411612204043610e-01 + -1.0025320951168692e+00 1.6214298489381132e-01 6.2683997470265940e-01 + -1.0068132765069606e+00 1.9439205295631745e-01 6.2208627605923561e-01 + -1.0239564974199888e+00 2.2237865343425728e-01 6.0158364842576373e-01 + -1.0358207030068607e+00 2.7599773704704544e-01 5.3347860123638657e-01 + -1.0394051608658588e+00 3.8046593370713239e-01 4.2341153864533149e-01 + -9.4545279484663436e-01 4.0275405091554345e-01 6.7384464705501013e-01 + id 14558 + loc 4.4686862826347351e-01 7.5086778402328491e-01 400 + blend 0.0000000000000000e+00 + interp 4.9587210608333565e-01:2.8172811925940011e-01:4.4719613288415716e-01:4.9586714736227483e-01:1.0428761076068631e+00:4.3066201073710714e-01:1.5232489682700376e+00:2.4545813171948994e-01:1.9605278949939193e+00:3.1349091710332644e-01:2.6776401349094150e+00:2.4495042847444895e-01:3.1356682329207426e+00:4.1121488418564706e-01:3.8107358086211489e+00 + CVs 20 + -1.7477155460201360e-01 3.2923737171763834e-01 -1.9799970444870940e-01 + -3.4634243577118795e-01 6.6376361711845544e-01 -3.9369670398214862e-01 + -5.0832160157632800e-01 1.0011909001044599e+00 -6.2101859274515614e-01 + -6.6295353145533109e-01 1.3320761838843818e+00 -8.9548891604682934e-01 + -8.1389623911833442e-01 1.6411306339888716e+00 -1.2174231406769234e+00 + -9.5954807578856249e-01 1.9151758355018587e+00 -1.5836237602622614e+00 + -1.0939544410691917e+00 2.1443037264043476e+00 -1.9908530967369797e+00 + -1.2078942500506300e+00 2.3204946445866259e+00 -2.4362529182177814e+00 + -1.2906362064535573e+00 2.4384716224194811e+00 -2.9148096092938371e+00 + -1.3339047553251886e+00 2.4966353465614266e+00 -3.4184438242585511e+00 + -1.3366658087311285e+00 2.4956959604660023e+00 -3.9380414362980325e+00 + -1.3134247862346076e+00 2.4382267236980661e+00 -4.4659480890895331e+00 + -1.2897193488923731e+00 2.3251066471966011e+00 -4.9923573407376969e+00 + -1.2898204048022577e+00 2.1474253971311841e+00 -5.5045390917835153e+00 + -1.3340397749509605e+00 1.8953887890178764e+00 -5.9814083201252242e+00 + -1.4323573860564955e+00 1.5902270451993901e+00 -6.3962162201117119e+00 + -1.5725341518774707e+00 1.2797843999331402e+00 -6.7418018803114999e+00 + -1.7241601520566425e+00 9.9101012052174964e-01 -7.0365751398054881e+00 + -1.7724426789266996e+00 7.6667076996449746e-01 -7.3042336692031427e+00 + id 14559 + loc 9.5620173215866089e-01 7.1263682842254639e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6994986383632265e-01:3.1104756959272106e-01:4.6208393847520179e-01:2.4438522289780917e-01:1.7187600056912671e+00:4.6994516433768430e-01:2.7251104590744384e+00:1.4776050321498921e-01:3.3429851080866824e+00 + CVs 20 + 1.3389996776149105e-01 3.3334523517637082e-01 -1.7527037280870036e-01 + 3.1030873335626719e-01 6.7191080506151102e-01 -3.5575159339687379e-01 + 5.4016206331559613e-01 1.0045313614452600e+00 -5.2008314665794841e-01 + 8.3020549718926562e-01 1.3119608729309045e+00 -6.5401208328011096e-01 + 1.1781201248548594e+00 1.5689075243083632e+00 -7.5676265958921618e-01 + 1.5658254286344502e+00 1.7446387207200091e+00 -8.4356862528805654e-01 + 1.9566736105039855e+00 1.7980312991213125e+00 -9.3548749397218711e-01 + 2.2915647956399110e+00 1.6933237210667145e+00 -1.0388083742492380e+00 + 2.5148681849419896e+00 1.4455245637739855e+00 -1.0908813291201165e+00 + 2.6183026882266924e+00 1.1280532770715381e+00 -1.0942858108373832e+00 + 2.6332538330650372e+00 7.7845576522347382e-01 -1.1056653912023267e+00 + 2.5736615596364150e+00 4.0484999792624682e-01 -1.0854541835162326e+00 + 2.4528121284531244e+00 3.4535490461358842e-02 -1.0148763540969552e+00 + 2.3117320795357781e+00 -3.2717303077124993e-01 -8.5955300639063836e-01 + 2.2003808611632660e+00 -6.9445953915136771e-01 -5.6377223282244060e-01 + 2.1413802147728025e+00 -1.0190492735638870e+00 -1.0015219962579014e-01 + 2.1426594588422510e+00 -1.2194760714280573e+00 4.9030354702249324e-01 + 2.1901769661518986e+00 -1.2832593175749567e+00 1.0749300618388642e+00 + 2.2013154581100780e+00 -1.3658732596991139e+00 1.2778811430414134e+00 + id 14560 + loc 8.6101639270782471e-01 1.3465858995914459e-01 405 + blend 0.0000000000000000e+00 + interp 4.1942118262513839e-01:2.6138772238909325e-01:2.2930832343600605e-03:3.2144309938698262e-01:7.7821242315971717e-01:2.6000656447991577e-01:1.5882984181151567e+00:3.1694043038737402e-01:2.0769813195775200e+00:2.7008990354056200e-01:2.8764090747942492e+00:4.1941698841331215e-01:3.6476120574462079e+00 + CVs 20 + -3.3071482962948470e-02 8.3209943597303687e-02 9.9207319684303935e-02 + -4.9292804912759641e-02 1.8071680533637630e-01 1.9438499900087769e-01 + -5.8145651525227937e-02 2.8351418933424843e-01 2.8511261669787219e-01 + -5.3929743516715228e-02 4.0606082441166769e-01 3.8267977223469601e-01 + -2.5922050038391931e-02 5.4996067644690083e-01 4.8787926020883010e-01 + 3.7610349251734121e-02 7.1392974355626859e-01 5.9863224913474455e-01 + 1.4730673226286090e-01 8.9308275962833683e-01 7.0867289437452496e-01 + 3.0971243578959107e-01 1.0792652523006290e+00 8.0718600633157844e-01 + 5.2484478927490752e-01 1.2629632101677375e+00 8.7994608588186196e-01 + 7.8557068359256821e-01 1.4353649267604620e+00 9.1172862470345417e-01 + 1.0816626217880110e+00 1.5908548016044699e+00 8.8794108771836289e-01 + 1.4002468903439182e+00 1.7258943622505709e+00 7.9442467741392464e-01 + 1.7190967881671295e+00 1.8306635983331887e+00 6.2942211653331026e-01 + 2.0084147143543185e+00 1.8875286187631655e+00 4.2855566276110513e-01 + 2.2513229669365624e+00 1.8915432217934021e+00 2.4742184064486566e-01 + 2.4549995117634396e+00 1.8607792215806480e+00 9.6737364220111491e-02 + 2.6231009545719708e+00 1.8303382761839466e+00 -6.4456573754767293e-02 + 2.7410740843868489e+00 1.8368233685073192e+00 -2.6442721072330316e-01 + 2.7618102163957023e+00 1.9251486160489319e+00 -4.6812173923462813e-01 + id 14561 + loc 7.2522336244583130e-01 9.0740388631820679e-01 399 + blend 0.0000000000000000e+00 + interp 3.5632344464539251e-01:2.7685925229474967e-01:5.2134205264312894e-02:3.4436843674739470e-01:8.3793746989675877e-01:2.7671586139043386e-01:1.2590844196051534e+00:3.5631988141094606e-01:1.9410147109421105e+00:2.8442331042935820e-01:2.3344521729787022e+00:3.4751950725920983e-01:3.1014902045602444e+00 + CVs 20 + -1.4414426791061508e-01 3.3803211122404214e-01 -2.5151734764526767e-01 + -2.6677428409279497e-01 6.7315532259830013e-01 -5.1121550580391051e-01 + -3.8308144697526042e-01 9.9877492774643828e-01 -7.9631568931331032e-01 + -5.0714855109791490e-01 1.3031368217253303e+00 -1.1193885963608623e+00 + -6.5152022137453425e-01 1.5679473414153542e+00 -1.4890041424828635e+00 + -8.2541888050946788e-01 1.7700079890183724e+00 -1.9073123790716024e+00 + -1.0338554130646711e+00 1.8882333432326650e+00 -2.3669091875350525e+00 + -1.2782285942082940e+00 1.9133251699688152e+00 -2.8508805689391368e+00 + -1.5533986050341480e+00 1.8396266378958412e+00 -3.3392801052601113e+00 + -1.8386047369111242e+00 1.6474285603324086e+00 -3.8099845990060710e+00 + -2.1071632590823972e+00 1.3257599874580412e+00 -4.2352315972138150e+00 + -2.3740024813771465e+00 9.0575116919548759e-01 -4.6022040703075682e+00 + -2.6867064601575579e+00 4.2936783793570554e-01 -4.9147702449722352e+00 + -3.0521664170000182e+00 -8.2252798022475759e-02 -5.1630916652761307e+00 + -3.4470397662788792e+00 -6.1443215292753040e-01 -5.3390817724420137e+00 + -3.9344085592862386e+00 -1.0900634153891586e+00 -5.4803373676339664e+00 + -4.6461514235080168e+00 -1.2999117278186112e+00 -5.6468817182665774e+00 + -5.3970982479814253e+00 -1.1425126599499393e+00 -5.8249988804070192e+00 + -5.8899751080565599e+00 -1.2234286466264399e+00 -5.9633925018897873e+00 + id 14562 + loc 6.2239056825637817e-01 8.1462615728378296e-01 393 + blend 0.0000000000000000e+00 + interp 2.9044855778849976e-01:2.8914667448206061e-01:2.9067440990189342e-01:2.7395288287358793e-01:1.2518554566404174e+00:2.9044565330292188e-01:2.3274421196848833e+00:2.9025623805671086e-01:2.9972831701621248e+00:2.7173686124773250e-01:3.7185217036764815e+00 + CVs 20 + -2.5519063033262651e-01 3.0595225591492514e-01 -2.2267715814649869e-01 + -5.1400004109712216e-01 6.3785345631388601e-01 -4.1241601250712046e-01 + -7.7309354085985027e-01 1.0026849143785370e+00 -5.9761142094504527e-01 + -1.0379001995434001e+00 1.3907902810050894e+00 -7.9008577135085911e-01 + -1.3226966897055477e+00 1.7828530630423127e+00 -9.9071531786361944e-01 + -1.6398778293868830e+00 2.1560867644881263e+00 -1.2006269322911538e+00 + -1.9973385032493693e+00 2.4856615232324528e+00 -1.4207067793645223e+00 + -2.3989572640656043e+00 2.7436234979043599e+00 -1.6523058537166275e+00 + -2.8393599773902225e+00 2.9065079843166872e+00 -1.9013474160494153e+00 + -3.3002073603980544e+00 2.9708945558011024e+00 -2.1836489364267093e+00 + -3.7554735049771137e+00 2.9471041961397866e+00 -2.5148326486912573e+00 + -4.1840745906220587e+00 2.8386960407115676e+00 -2.8927083247304601e+00 + -4.5757307572438943e+00 2.6382728949141478e+00 -3.3015404913322079e+00 + -4.9165730877591960e+00 2.3422256149855265e+00 -3.7308388380985029e+00 + -5.1969895667256463e+00 1.9609233481800730e+00 -4.1746937443098373e+00 + -5.4607476960120431e+00 1.4924133749278354e+00 -4.6125723258923488e+00 + -5.8102213595075805e+00 9.0734372242528516e-01 -4.9814579501192018e+00 + -6.2859892475055617e+00 2.3312065145832594e-01 -5.1883930497274653e+00 + -6.6864687992870593e+00 -3.4545086343065057e-01 -5.3971002191701558e+00 + id 14563 + loc 5.7922351360321045e-01 2.6364025473594666e-01 401 + blend 0.0000000000000000e+00 + interp 3.3900626083787067e-01:3.0219345310392226e-01:1.4226966089431781e-01:3.0095419559232578e-01:1.2590303732522306e+00:3.1677754504953987e-01:2.0115587045772094e+00:3.0964938212497922e-01:2.8893414497204821e+00:3.3900287077526231e-01:3.3449407387102452e+00 + CVs 20 + 8.5872706215077907e-02 3.7632352985153311e-01 1.9184752162547708e-01 + 1.8794491693065923e-01 7.4153740147394132e-01 4.0676348735896406e-01 + 2.8219805074721754e-01 1.0857820013463932e+00 6.5147174220359949e-01 + 3.6591032522942113e-01 1.3872569943900535e+00 9.3042691864558547e-01 + 4.4835066385788541e-01 1.6226630266772613e+00 1.2418290730626178e+00 + 5.3778248118478889e-01 1.7757348801974757e+00 1.5731084978607921e+00 + 6.3723424271384776e-01 1.8437205452378365e+00 1.9069877780982618e+00 + 7.4466750101834855e-01 1.8376814140833475e+00 2.2306010048115281e+00 + 8.5508053479001189e-01 1.7722128711514020e+00 2.5345396492288752e+00 + 9.5719048277207774e-01 1.6615885294388195e+00 2.8031024977910777e+00 + 1.0410935905965037e+00 1.5207605306829604e+00 3.0250031463182969e+00 + 1.1153665220191502e+00 1.3428264763996536e+00 3.2139232705076415e+00 + 1.1991898020392309e+00 1.1049108971895782e+00 3.3875031622206917e+00 + 1.3140151529972748e+00 8.2397725641350461e-01 3.5452611860890140e+00 + 1.4721283673076904e+00 5.4129489548545207e-01 3.6731398396353914e+00 + 1.6854736446586311e+00 2.3128096858126368e-01 3.7617272085449889e+00 + 2.0152407621251989e+00 -1.8779167871000907e-01 3.8230078707758901e+00 + 2.5717138603165228e+00 -5.8564868034340201e-01 3.8915577405016557e+00 + 2.9529014373008935e+00 -5.8178399103794498e-01 3.8801277481775229e+00 + id 14564 + loc 2.9040476679801941e-01 4.4866925477981567e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5959592089099677e-01:3.9212284632452332e-01:7.0521667459696946e-01:4.4545360427670128e-01:1.0238205826606861e+00:4.5959132493178789e-01:1.5104915801809864e+00:3.4408202578792679e-01:2.1903087612185086e+00:4.1014865497899106e-01:2.9982394225399198e+00:4.2540594568601076e-01:3.8779890495293801e+00 + CVs 20 + 1.5903451602974064e-01 4.0674603866994380e-01 4.2645291350637105e-02 + 2.6413327792444941e-01 7.3785788933976093e-01 3.9212114499760448e-02 + 3.5074765824103499e-01 1.0382795365644419e+00 1.8571407972349852e-02 + 4.3687600427804346e-01 1.3322929550294220e+00 -4.5663595299194615e-03 + 5.1632327987474103e-01 1.6260753531548136e+00 -3.3914773891037031e-02 + 5.7879975839313980e-01 1.9291350899788957e+00 -7.5684548641242189e-02 + 5.9876965217473177e-01 2.2482612406184268e+00 -1.3975592828851258e-01 + 5.3959697696823805e-01 2.5711028076301954e+00 -2.3326594818010637e-01 + 3.7672720671678994e-01 2.8618361303556439e+00 -3.5079488781904911e-01 + 1.1545502452530165e-01 3.0767603829885730e+00 -4.7495848912350425e-01 + -2.1307978453965393e-01 3.1868105766532349e+00 -5.8784062865607856e-01 + -5.7204291870283597e-01 3.1842351797711927e+00 -6.7916014480070164e-01 + -9.3106903969009169e-01 3.0732411192359579e+00 -7.4559165229177227e-01 + -1.2673290929402303e+00 2.8612707098071533e+00 -7.8870243790081496e-01 + -1.5650518547336545e+00 2.5518392982839897e+00 -8.1454672080726231e-01 + -1.8051530633004245e+00 2.1343819708871994e+00 -8.3014287886223703e-01 + -1.9116008006421725e+00 1.6110602960179379e+00 -8.3307356417856893e-01 + -1.7812008198445404e+00 1.1067611146431142e+00 -8.1709582517161894e-01 + -1.5168858337112074e+00 7.5101775365034429e-01 -7.9597847232479302e-01 + id 14565 + loc 1.6526399552822113e-01 4.9519518017768860e-01 404 + blend 0.0000000000000000e+00 + interp 5.1058493085081857e-01:4.6782555150493571e-01:4.2104309165132470e-01:4.7900709947394815e-01:9.9827778833469172e-01:5.1057982500151011e-01:1.3549656735108000e+00:4.5874088545004499e-01:1.9338949943685846e+00:3.1983924932534669e-01:2.4271536443834183e+00:2.8942617724721736e-01:3.3430336548474795e+00:4.5726601557336005e-01:3.9903075774187045e+00 + CVs 20 + -6.6761347769409507e-02 1.0688343644096127e-01 -8.1625969630519088e-02 + -1.2736187277251373e-01 2.0996249066482350e-01 -1.3816644268205164e-01 + -1.8861013279368941e-01 3.1374153296835727e-01 -1.7881904512870578e-01 + -2.5862533900887352e-01 4.2695126470881212e-01 -2.0982627507650758e-01 + -3.3867417351265339e-01 5.4974246961712847e-01 -2.2874187566650939e-01 + -4.2932176641346753e-01 6.8058102961113320e-01 -2.3185061558452635e-01 + -5.3064818789692336e-01 8.1669977499433555e-01 -2.1490588894171564e-01 + -6.4170238820188374e-01 9.5459966435137866e-01 -1.7339828026525655e-01 + -7.5972664962025971e-01 1.0902882385239852e+00 -1.0285844290302515e-01 + -8.7975998358745922e-01 1.2196369942341108e+00 5.6749408995071526e-04 + -9.9510526220733986e-01 1.3396485619276981e+00 1.3891406558803865e-01 + -1.0988737701974522e+00 1.4496197820246748e+00 3.1186530551064129e-01 + -1.1833402937183439e+00 1.5488983459298868e+00 5.1655480109469942e-01 + -1.2397534874498051e+00 1.6366072622167953e+00 7.4814239343080846e-01 + -1.2572806269600636e+00 1.7123107326694302e+00 9.9957023921094112e-01 + -1.2219617775822842e+00 1.7781935666840458e+00 1.2590557688327202e+00 + -1.1192802466189384e+00 1.8390167241179995e+00 1.5094337000566578e+00 + -9.4072517895005048e-01 1.8960431352364280e+00 1.7313042546816901e+00 + -9.5521624131186489e-01 1.9925448652431601e+00 1.9906013939328755e+00 + id 14566 + loc 8.5337376594543457e-01 8.7088692188262939e-01 400 + blend 0.0000000000000000e+00 + interp 3.8950549501644705e-01:3.3378675581116518e-01:6.5350103358446687e-01:2.4397926631438671e-01:1.2757009239704511e+00:3.8950159996149691e-01:1.9845914933848441e+00:2.6335192659020756e-01:2.6470759718709793e+00:3.4151439689478214e-01:3.1356915899398365e+00:2.4290031889610858e-01:3.9215320132252947e+00 + CVs 20 + -2.8790584439433275e-01 1.9827424949837547e-01 -1.9217441974199159e-01 + -5.3201785139832369e-01 4.0465228435079553e-01 -4.0219380614579858e-01 + -7.4539564212890030e-01 6.2340343587500757e-01 -6.3304504879849477e-01 + -9.3977487757610711e-01 8.5132093153042809e-01 -8.7998110908844751e-01 + -1.1396648984808386e+00 1.0838848085151653e+00 -1.1352979284319942e+00 + -1.3814691826025283e+00 1.3145376478769959e+00 -1.3912447894940121e+00 + -1.6950520385764731e+00 1.5292924317359009e+00 -1.6384673400548584e+00 + -2.0951286611889666e+00 1.7050237953642819e+00 -1.8745609182454737e+00 + -2.5809886368303832e+00 1.8133094841049935e+00 -2.1176584740949895e+00 + -3.1396856200462788e+00 1.8146609106494118e+00 -2.3966119278297668e+00 + -3.7183118301493976e+00 1.6539106703282964e+00 -2.7217426728771228e+00 + -4.2255547805914055e+00 1.3335377080744999e+00 -3.0609600588255512e+00 + -4.6485421016555426e+00 9.4897365522615940e-01 -3.3683652491283977e+00 + -5.0523906769059908e+00 5.9148033567133163e-01 -3.6203465476285004e+00 + -5.4908030951461049e+00 2.9893989189774528e-01 -3.8153473130565008e+00 + -5.9987902672243898e+00 4.5727911243687025e-02 -3.9815779565542440e+00 + -6.5828513099645418e+00 -2.2664577368738570e-01 -4.1742533272923747e+00 + -7.1928285954148601e+00 -5.5272177559664981e-01 -4.4329621297935571e+00 + -7.7942827635835501e+00 -9.4208352373678972e-01 -4.7011301178782956e+00 + id 14567 + loc 2.1681123971939087e-01 4.7965022921562195e-01 1069 + blend 0.0000000000000000e+00 + interp 3.8739696174393817e-01:2.3513929050807103e-01:7.9595898041072943e-01:3.6473776904990263e-01:1.3725103847368227e+00:2.5405134873227986e-01:2.0326952302975627e+00:3.8739308777432074e-01:2.6565308476850249e+00:2.8318714783553361e-01:3.2443459484977195e+00:2.7552943480931508e-01:3.9758027194195695e+00 + CVs 20 + -1.6678329762601996e-01 2.6335622929812830e-01 -4.6344811668040900e-02 + -3.1337943021776449e-01 5.1854339038149466e-01 -1.1420615976583942e-01 + -4.3027284332243065e-01 7.7181443448447573e-01 -1.8996920669350748e-01 + -5.2061578951017662e-01 1.0300419775301866e+00 -2.7144373911935310e-01 + -5.9509820227391297e-01 1.2965385693984532e+00 -3.6579390381437032e-01 + -6.6491902334399311e-01 1.5741631021227436e+00 -4.7415027366711404e-01 + -7.4440770908358012e-01 1.8705291849751990e+00 -5.9005357246426660e-01 + -8.6174827176634883e-01 2.2060338306656848e+00 -7.0301902653642490e-01 + -1.0793940881118651e+00 2.5975997741928829e+00 -7.8908137344391172e-01 + -1.4509830226146989e+00 2.9792011761894135e+00 -8.0210847889810633e-01 + -1.9125289341061209e+00 3.2400644656860393e+00 -7.3298849863560944e-01 + -2.3664366875533345e+00 3.3684862679851184e+00 -6.1978804663637854e-01 + -2.7653650503938665e+00 3.4089514472208085e+00 -4.9093103438691998e-01 + -3.0884303456455711e+00 3.4019413186818865e+00 -3.5060001191529633e-01 + -3.3267277863113454e+00 3.3703392137462069e+00 -1.7718105210323754e-01 + -3.4960038404890055e+00 3.3113727536825892e+00 1.0007386641395355e-01 + -3.6719170149042846e+00 3.1579429596559763e+00 6.0431683687623883e-01 + -3.9860455481124073e+00 2.8126540465262853e+00 1.1934430450609432e+00 + -4.0350081708828958e+00 2.8517323540225288e+00 9.9977589020033730e-01 + id 14568 + loc 3.3966448903083801e-01 1.2866818904876709e-01 399 + blend 0.0000000000000000e+00 + interp 4.0146483855287707e-01:4.0146082390449156e-01:3.9548416497361849e-01:3.9643939555622515e-01:9.6805955984455572e-01:2.9276204932042649e-01:1.8184268229912002e+00:3.1413957109765839e-01:2.9312589697828817e+00:2.7332393822889550e-01:3.9981267517739942e+00 + CVs 20 + -1.7075863236781430e-01 2.9672243544161786e-01 2.3068717272810471e-01 + -3.6428125938316458e-01 5.7525434104076378e-01 4.4614882163158986e-01 + -5.8560543566978474e-01 8.3409312714858641e-01 6.4875924494268644e-01 + -8.2827984825378032e-01 1.0713696336062215e+00 8.4722033587952550e-01 + -1.0772856384461043e+00 1.2864116387951763e+00 1.0542610359484583e+00 + -1.3194924556390810e+00 1.4763295908879226e+00 1.2788223948326429e+00 + -1.5493833578327416e+00 1.6336018463635442e+00 1.5225442514269913e+00 + -1.7680944514315684e+00 1.7489337797401872e+00 1.7828419868226517e+00 + -1.9782842609058746e+00 1.8144085787829338e+00 2.0551253653296024e+00 + -2.1781967889677678e+00 1.8239851360483301e+00 2.3331940363725332e+00 + -2.3662182886412038e+00 1.7759750936546952e+00 2.6143922600908676e+00 + -2.5508160678384675e+00 1.6754835828333612e+00 2.9066799839923814e+00 + -2.7457433343962800e+00 1.5353952515942353e+00 3.2178139637555137e+00 + -2.9653491327685448e+00 1.3846277493950754e+00 3.5425561083633799e+00 + -3.2189945489569789e+00 1.2710612150938969e+00 3.8587295513078432e+00 + -3.5067482216207608e+00 1.2302236329541218e+00 4.1371859601212471e+00 + -3.8223165149901015e+00 1.2687735235865003e+00 4.3522032025574777e+00 + -4.1295176055613458e+00 1.3832503417696433e+00 4.4879587821843154e+00 + -4.3943684938804628e+00 1.5579263523349556e+00 4.5556160810475399e+00 + id 14569 + loc 6.7410945892333984e-01 7.5783026218414307e-01 393 + blend 0.0000000000000000e+00 + interp 3.2061810252101880e-01:2.7514575877399489e-01:3.6632234568830802e-03:3.0033809705872316e-01:9.9816416229288829e-01:2.7173686124773250e-01:1.7195564776422312e+00:2.8543138075822849e-01:2.2615937153774861e+00:3.2061489633999363e-01:3.0013212317281801e+00 + CVs 20 + -2.6665423819752621e-01 2.9805245987711437e-01 -2.5384333909915030e-01 + -5.2475245313701402e-01 5.8452566419219965e-01 -4.8844025987055179e-01 + -7.8428662177558262e-01 8.7243173694383480e-01 -7.3615865673360359e-01 + -1.0562731550191975e+00 1.1564540756426613e+00 -1.0096417611490534e+00 + -1.3540285624009181e+00 1.4196239589658466e+00 -1.3040796614643102e+00 + -1.6847658689695686e+00 1.6418311226278044e+00 -1.6078974502237147e+00 + -2.0422917213181258e+00 1.8009490191885431e+00 -1.9015204112669852e+00 + -2.4071104906738472e+00 1.8750347112301045e+00 -2.1613913688229056e+00 + -2.7661908892720453e+00 1.8577656771992999e+00 -2.3785447741441921e+00 + -3.1284762459097886e+00 1.7630741033391137e+00 -2.5708789016048388e+00 + -3.4886441717255976e+00 1.6093348404006251e+00 -2.7597819392428602e+00 + -3.8059358157894092e+00 1.4112469625320623e+00 -2.9400082037874182e+00 + -4.0467270559700168e+00 1.1801987559796632e+00 -3.0877430982452263e+00 + -4.2162410720094687e+00 9.3047467897755443e-01 -3.1924099071256586e+00 + -4.3376550833541474e+00 6.7602524342307424e-01 -3.2652576260503161e+00 + -4.4346567632165552e+00 4.1993182774063564e-01 -3.3222246251195147e+00 + -4.5189277641370449e+00 1.6102707806581340e-01 -3.3768651301890653e+00 + -4.6002031361382549e+00 -9.5786960352859385e-02 -3.4222030307273963e+00 + -4.7420255562415043e+00 -3.7889755589616603e-01 -3.3774815942782515e+00 + id 14570 + loc 1.9214780628681183e-01 5.2330124378204346e-01 400 + blend 0.0000000000000000e+00 + interp 4.9853605672697809e-01:2.8020447533327703e-01:3.3950342549582990e-01:4.9853107136641084e-01:9.7848692832449180e-01:2.5555297185428305e-01:1.8112220542375410e+00:2.7024618713232818e-01:2.8635274734069935e+00:3.1232753443327865e-01:3.6389799159264715e+00 + CVs 20 + -2.6904191571722869e-01 3.2291250068552552e-01 -6.7540328425853585e-02 + -5.1478077653820575e-01 6.3790142904868685e-01 -1.6604496216970488e-01 + -7.4710139223493199e-01 9.3715872571885328e-01 -3.1083294383734739e-01 + -9.6925566828200926e-01 1.2135597477879581e+00 -5.0600810648979877e-01 + -1.1805651502110950e+00 1.4615165771780263e+00 -7.4784422176665910e-01 + -1.3814677597158969e+00 1.6773733714023820e+00 -1.0301839927663490e+00 + -1.5738729221722929e+00 1.8582691104336695e+00 -1.3476095879831385e+00 + -1.7581262012443013e+00 2.0012375170066252e+00 -1.6966061746074357e+00 + -1.9308149188552748e+00 2.1028779231416417e+00 -2.0760734156400189e+00 + -2.0841501004969372e+00 2.1590278886572873e+00 -2.4862666198031240e+00 + -2.2092216537930436e+00 2.1649324377490942e+00 -2.9250878167626251e+00 + -2.3095971226787624e+00 2.1174145909542483e+00 -3.3819613094018495e+00 + -2.4139494830356423e+00 2.0141526650164678e+00 -3.8317155614042306e+00 + -2.5619307100936339e+00 1.8511185054897108e+00 -4.2446270083535920e+00 + -2.7723572253655835e+00 1.6235437032648532e+00 -4.6155680579049534e+00 + -3.0573650770262928e+00 1.3452429955016303e+00 -4.9411667212731594e+00 + -3.4286637135727038e+00 1.0617750706004934e+00 -5.2020042837134186e+00 + -3.8724051140127518e+00 7.9980736624390025e-01 -5.4111625937479140e+00 + -4.3294153161545843e+00 4.8959983700765752e-01 -5.7234049316657885e+00 + id 14571 + loc 5.2991682291030884e-01 4.8629814386367798e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2671422358569799e-01:4.2670995644346216e-01:2.9103626564760099e-01:3.4483174404818634e-01:1.0425930578388667e+00:3.6713754375789609e-01:1.9437738209888902e+00:3.9843212954911922e-01:2.3556996570144211e+00:3.9935590793221643e-01:2.9996939614891884e+00:2.8039349437219474e-01:3.9324837578727068e+00 + CVs 20 + 6.4250987052153333e-02 4.6096998417491919e-01 -1.4095030735265990e-01 + 6.3361189010557512e-02 9.0677774140224421e-01 -2.2713203726940048e-01 + 2.8213338564380852e-02 1.3483116470048198e+00 -2.7227483407638209e-01 + -4.0448271555381443e-02 1.7975473080172673e+00 -2.6940080523662513e-01 + -1.5136539090144407e-01 2.2456244663702076e+00 -1.9513706755330107e-01 + -3.1103269226269703e-01 2.6703739128879525e+00 -1.2932207793893369e-02 + -5.1328938359465959e-01 3.0238659960021597e+00 3.0439067923297136e-01 + -7.3264353126687420e-01 3.2517953093841765e+00 7.4321409216194945e-01 + -9.3843259692230596e-01 3.3239040546987004e+00 1.2590281306038955e+00 + -1.1093216627422553e+00 3.2383239762966376e+00 1.7999700947730006e+00 + -1.2375340900765608e+00 3.0134584707405159e+00 2.3210972748581340e+00 + -1.3268676322580435e+00 2.6755124442893927e+00 2.7908952541324115e+00 + -1.3894278992270435e+00 2.2503277401768309e+00 3.1885174779382939e+00 + -1.4425539205470643e+00 1.7580818647592209e+00 3.4983411240951110e+00 + -1.4999688687807708e+00 1.1982193188324277e+00 3.6978422471119234e+00 + -1.5521960690869205e+00 5.2023995742973095e-01 3.7102348265447063e+00 + -1.5620061973745489e+00 -2.8668507451148750e-01 3.3285396820845667e+00 + -1.5348882879850683e+00 -8.9313982108267598e-01 2.5631254406466475e+00 + -1.5879595183625042e+00 -1.1696923200937088e+00 2.4456161093923736e+00 + id 14572 + loc 8.4642052650451660e-01 6.7721688747406006e-01 404 + blend 0.0000000000000000e+00 + interp 4.5635717446571233e-01:4.5635261089396773e-01:3.6067504982849108e-01:3.4707650940185286e-01:9.4840596511860997e-01:3.5736320487211370e-01:1.4206806365680145e+00:2.6866089825981060e-01:2.0519070352126554e+00:3.4356683226389306e-01:2.9930210397528487e+00:3.6993472630444846e-01:3.4176539911156545e+00:3.8094919201944860e-01:3.9999449005339183e+00 + CVs 20 + -1.7934244125733065e-02 1.0780269590639185e-01 -1.2468482041147486e-01 + -1.7273563679630011e-02 2.3054243187620344e-01 -2.1829024791612822e-01 + -2.8424813145360717e-03 3.4869134438553329e-01 -2.9736626154312051e-01 + 2.7970829056915114e-02 4.6172691831228230e-01 -3.6432926998551318e-01 + 8.1144720439034923e-02 5.6369878330168399e-01 -4.1561359582136381e-01 + 1.5938197565453266e-01 6.4634712169151176e-01 -4.4790108923418481e-01 + 2.5993451492744080e-01 7.0125429628970215e-01 -4.5797125316429688e-01 + 3.7262062200135604e-01 7.2635665889239864e-01 -4.4328229293616012e-01 + 4.8413151516733877e-01 7.2853048870937220e-01 -4.0307756108988035e-01 + 5.8399878731235655e-01 7.1638683783230050e-01 -3.4082712625056366e-01 + 6.6627938415683430e-01 6.9362628950723482e-01 -2.6802291222505742e-01 + 7.3097369795665834e-01 6.6480777621894915e-01 -1.9901020846897752e-01 + 7.8329245221376509e-01 6.4125083174150566e-01 -1.3678929010875199e-01 + 8.2898726128144895e-01 6.3470909975619971e-01 -7.5407151945621309e-02 + 8.7111735012312286e-01 6.5071721070145938e-01 -1.0449614086006309e-02 + 9.1052211063804656e-01 6.8761751070711941e-01 5.6353315410181959e-02 + 9.4694154655301943e-01 7.4071784141474395e-01 1.2271994040385598e-01 + 9.7694261832149043e-01 8.0742729454489059e-01 1.9151344709743434e-01 + 9.7813820237994964e-01 9.0236011352515422e-01 2.7900388064845372e-01 + id 14573 + loc 8.9256651699542999e-02 5.3825211524963379e-01 401 + blend 0.0000000000000000e+00 + interp 4.0968497314336866e-01:4.0968087629363725e-01:9.0456087483270498e-04:2.9637425321677185e-01:7.3207006146488618e-01:2.8566337585883994e-01:9.9924424841983450e-01:3.1017560732029004e-01:1.4306219328091692e+00:3.1851492578521778e-01:2.0899388518555932e+00:2.9518902220028820e-01:2.9728237638051596e+00:3.3052487667285907e-01:3.5281633327234712e+00 + CVs 20 + -2.1150723203249525e-02 2.7230302094809816e-01 -3.5071735538173837e-01 + -2.6656146758374993e-02 5.3033879844763776e-01 -6.9135734831392504e-01 + -3.1324131396519711e-02 7.6735170045045498e-01 -1.0345732418313855e+00 + -4.6918960526399184e-02 9.7801671454775885e-01 -1.3845348344558375e+00 + -8.5581330625414731e-02 1.1595107314693240e+00 -1.7406898799886361e+00 + -1.6172272018848799e-01 1.3113396042214962e+00 -2.1003975597190503e+00 + -2.8589004632655651e-01 1.4313755728859834e+00 -2.4539936629351362e+00 + -4.5886050712759874e-01 1.5176636671301911e+00 -2.7860240895619315e+00 + -6.7160909109009670e-01 1.5722366388123876e+00 -3.0802187042885034e+00 + -9.0953265478844225e-01 1.6023699244444369e+00 -3.3232285658499294e+00 + -1.1625318741812358e+00 1.6190290719354496e+00 -3.5112734446796114e+00 + -1.4329324373575767e+00 1.6302084324445705e+00 -3.6538835798593685e+00 + -1.7320635559690953e+00 1.6294985204194543e+00 -3.7709052044477365e+00 + -2.0654804180165383e+00 1.5836338803162833e+00 -3.8866286428317744e+00 + -2.4200986502688546e+00 1.4540423208580990e+00 -4.0137676116657648e+00 + -2.7808765164571283e+00 1.2344645930937479e+00 -4.1331683687228233e+00 + -3.1592021206458294e+00 9.4929212094406590e-01 -4.2070674325376727e+00 + -3.5490452382551001e+00 6.9249363796374808e-01 -4.1598915749026517e+00 + -3.7238756610244068e+00 7.6509936580564641e-01 -3.8594921024891962e+00 + id 14574 + loc 9.5774716138839722e-01 3.3461478352546692e-01 399 + blend 0.0000000000000000e+00 + interp 5.2109387526120710e-01:4.6184448175100434e-01:4.2748011846310641e-01:4.3649177690433522e-01:9.8195176430297049e-01:5.2108866432245449e-01:1.5875226716825024e+00:2.9093477939953927e-01:2.0885513520074044e+00:4.8249129812820873e-01:2.9257772522635124e+00:4.4620104955522155e-01:3.1279327562782946e+00:2.7505311609651151e-01:3.6296820878402700e+00 + CVs 20 + 2.2611726852520758e-01 3.2372658143844557e-01 2.3951506134593298e-01 + 4.3328458398618391e-01 6.3837212778885022e-01 4.8748096134909369e-01 + 6.0502780194200478e-01 9.3360000125991294e-01 8.0069079276224231e-01 + 7.4210283659934628e-01 1.2047329922284944e+00 1.1892238982632608e+00 + 8.5709886498023313e-01 1.4537895222905690e+00 1.6436517451473227e+00 + 9.6164861717707861e-01 1.6817447962090513e+00 2.1569816575194674e+00 + 1.0661078743968870e+00 1.8809609388977071e+00 2.7246357244818693e+00 + 1.1829717885770585e+00 2.0299012594361212e+00 3.3418056032535954e+00 + 1.3257988317889855e+00 2.0908001283583419e+00 3.9987015669845767e+00 + 1.5030765494815170e+00 2.0138404753089354e+00 4.6720036859417045e+00 + 1.7125226066053498e+00 1.7659530220490147e+00 5.3139426763072342e+00 + 1.9396478047282959e+00 1.3841606659539314e+00 5.8701885090056312e+00 + 2.1663410598671584e+00 9.6886068206962150e-01 6.3253504898076089e+00 + 2.3698640956194792e+00 6.4189523139215998e-01 6.7062794477805578e+00 + 2.5015902582764022e+00 5.0898802227018081e-01 7.0428618094974382e+00 + 2.4774806194762049e+00 5.9814258819264721e-01 7.3081579571335578e+00 + 2.2456193133029974e+00 8.6531213367802828e-01 7.3885795714850246e+00 + 1.9719111875207316e+00 1.1201340733953087e+00 7.2469026539272514e+00 + 1.9615956399232242e+00 1.0290193879507872e+00 7.4562609425246755e+00 + id 14575 + loc 4.1918787360191345e-01 4.8032194375991821e-01 1069 + blend 0.0000000000000000e+00 + interp 4.6177660107638535e-01:4.6177198331037461e-01:6.6740468845699552e-01:2.9229915670721951e-01:1.0658152489964035e+00:2.5366563068027265e-01:2.0037894170446093e+00:2.4992704790395406e-01:3.0020309416377882e+00:2.6732310246511842e-01:3.8722469928245054e+00 + CVs 20 + -1.8230052799137936e-01 3.9732485228874864e-01 -1.4927416572080371e-01 + -3.3252125740376054e-01 7.4894869120840701e-01 -3.2997106916221747e-01 + -4.6310591928698741e-01 1.0693141242861808e+00 -5.2543357952355252e-01 + -5.9297938814401197e-01 1.3636694822609980e+00 -7.3563004849908731e-01 + -7.5150566979031130e-01 1.6497787179300183e+00 -9.5763994589079837e-01 + -9.7339938999607867e-01 1.9444940266147728e+00 -1.1747594402333070e+00 + -1.2870551094749512e+00 2.2364683941413941e+00 -1.3573299774977663e+00 + -1.6970689618084180e+00 2.4812570381376782e+00 -1.4790572391424097e+00 + -2.1753916846257733e+00 2.6287091172979080e+00 -1.5353653403345953e+00 + -2.6692034031612502e+00 2.6621443430034692e+00 -1.5453933214514071e+00 + -3.1352367497610585e+00 2.6101862247436376e+00 -1.5382864831211354e+00 + -3.5533724432344198e+00 2.5211612285278453e+00 -1.5371724779430378e+00 + -3.9094951490390142e+00 2.4451197354382890e+00 -1.5530583613842341e+00 + -4.1859608791675704e+00 2.4256312371808266e+00 -1.5786898581662887e+00 + -4.3633060312519731e+00 2.4903748336586302e+00 -1.5802315371168465e+00 + -4.4149980692302053e+00 2.6543501713236561e+00 -1.4769746517634381e+00 + -4.3490165788699127e+00 2.8807970229379540e+00 -1.1209113083567348e+00 + -4.3524057859592347e+00 2.9991755512996372e+00 -5.8250269754320394e-01 + -4.5256210154919074e+00 3.0528733554371890e+00 -7.6669494277333050e-01 + id 14576 + loc 6.6359555721282959e-01 9.7964376211166382e-01 393 + blend 0.0000000000000000e+00 + interp 4.8291122119848917e-01:2.7732907965926407e-01:2.7384475306427669e-01:4.8290639208627723e-01:9.9998092644261127e-01:2.5749417343362463e-01:1.7071150915454243e+00:4.4115600394587207e-01:2.0090732861186749e+00:2.9663253227103814e-01:2.9644508901244606e+00:4.1071304919001272e-01:3.6151593119682368e+00 + CVs 20 + -2.7154291834513700e-01 3.1388011407310101e-01 -2.9001083646299697e-01 + -4.8396197934518553e-01 5.9378878370495713e-01 -5.7294861228889271e-01 + -6.6163305417656004e-01 8.4406211861298786e-01 -8.6674899931832894e-01 + -8.2674441023464684e-01 1.0698951950271200e+00 -1.1769563113605945e+00 + -9.9597417721632442e-01 1.2727699327848105e+00 -1.4998253833178004e+00 + -1.1799321461539720e+00 1.4493896529305061e+00 -1.8307216627140308e+00 + -1.3833693643262714e+00 1.5933038796554864e+00 -2.1673957528637353e+00 + -1.6078834042672940e+00 1.6945970567666158e+00 -2.5081011666742086e+00 + -1.8513529490327758e+00 1.7386338647335176e+00 -2.8464670919409101e+00 + -2.1040899772407906e+00 1.7121055016816706e+00 -3.1696615683370770e+00 + -2.3563795131201664e+00 1.6146928842193935e+00 -3.4615778276812463e+00 + -2.6091792350721108e+00 1.4635647977873858e+00 -3.7097601713131914e+00 + -2.8664502041937938e+00 1.2848708803802920e+00 -3.9076245288388707e+00 + -3.1272753746614894e+00 1.1082248960159466e+00 -4.0498221225025004e+00 + -3.3877084755309093e+00 9.5297921176395173e-01 -4.1288938317002826e+00 + -3.6589437272298482e+00 8.1533242531405836e-01 -4.1369098216743758e+00 + -3.9932423733681137e+00 6.5422630698779849e-01 -4.0882468989854841e+00 + -4.4222880762034178e+00 4.4507004141670947e-01 -4.0980115482287705e+00 + -4.6544915661694564e+00 4.5149296713504961e-01 -4.2220996829539494e+00 + id 14577 + loc 9.2953515052795410e-01 2.1957990527153015e-01 401 + blend 0.0000000000000000e+00 + interp 5.0332482746524310e-01:5.0331979421696849e-01:1.1469976897251921e-01:4.2723193633715700e-01:9.8561682310378995e-01:3.5705096343375420e-01:1.6291966538364298e+00:3.0256750397652271e-01:2.0941282408781676e+00:4.9771237020064124e-01:2.9106198480117929e+00:2.7300881061003657e-01:3.6111519040488251e+00 + CVs 20 + 1.2474964801559126e-01 3.1129703140636827e-01 1.4479811809769966e-01 + 2.3772674191705528e-01 6.4782990008232910e-01 3.1056009401010642e-01 + 3.3208540761632654e-01 1.0069305310362264e+00 4.9772346664451483e-01 + 4.0485103931075694e-01 1.3806664886755158e+00 7.1285334565996239e-01 + 4.6020523509165856e-01 1.7581435184233265e+00 9.6526976524962937e-01 + 5.0679500921155318e-01 2.1275496453713485e+00 1.2597290846108660e+00 + 5.5712249462158192e-01 2.4806114332014770e+00 1.5997041531202432e+00 + 6.2900885887214897e-01 2.8078034108253522e+00 1.9861329312972811e+00 + 7.3451790657868687e-01 3.0895089652771244e+00 2.4116954968440378e+00 + 8.6761183508093920e-01 3.2987470705367081e+00 2.8690923685914882e+00 + 1.0223219595787756e+00 3.4046069062333180e+00 3.3635389264099942e+00 + 1.2108928839368205e+00 3.3605487308351059e+00 3.8965054376825510e+00 + 1.4511725318905717e+00 3.1301952721583115e+00 4.4151808668473764e+00 + 1.7649879123858008e+00 2.7657302806558413e+00 4.8316287497616672e+00 + 2.1728424619560744e+00 2.4029390122980647e+00 5.0974359184234626e+00 + 2.6472846430095074e+00 2.2030895615726616e+00 5.2132514134804913e+00 + 3.0738445855844736e+00 2.2471790030402516e+00 5.2122439540021999e+00 + 3.3869880607378979e+00 2.3927207102035597e+00 5.1542776145857854e+00 + 3.7362170389509801e+00 2.4378006551445619e+00 5.0891886269812652e+00 + id 14578 + loc 8.4857332706451416e-01 8.4344708919525146e-01 404 + blend 0.0000000000000000e+00 + interp 4.3093998261282973e-01:4.3093567321300363e-01:5.3486710776821667e-01:3.4499534650882863e-01:1.0673917373941169e+00:4.0430719967428086e-01:2.0022592702623170e+00:3.5510010416963833e-01:2.7769662990834978e+00:3.9810754678257326e-01:3.0035526966230091e+00:3.4809837435275537e-01:3.4193074517390638e+00:2.5284516752429431e-01:3.9956047997761992e+00 + CVs 20 + -4.6795059210048132e-02 6.7262169798781163e-02 1.6104282897711208e-02 + -1.0009316774942281e-01 1.1591401669449237e-01 4.3209114038307794e-02 + -1.5744567473048598e-01 1.8053969258803526e-01 7.7981576478899930e-02 + -2.1102479624249387e-01 2.6035002794781192e-01 1.0298474795859762e-01 + -2.5558386589489057e-01 3.5615632672245906e-01 1.1694815040504249e-01 + -2.8481956102959588e-01 4.6442063787008048e-01 1.1876106013757373e-01 + -2.9354290940074401e-01 5.7497105635985213e-01 1.0744335783708189e-01 + -2.8083417164041968e-01 6.7408135659493484e-01 8.2092076886205179e-02 + -2.4849825015404992e-01 7.5612829820606675e-01 4.5288541356891393e-02 + -1.9559672797831168e-01 8.2630126447552765e-01 7.9123085908142654e-03 + -1.2084137101175013e-01 8.8535348667850378e-01 -1.9885150262953205e-02 + -2.8241217646075567e-02 9.2187498675575363e-01 -4.4243029233301534e-02 + 7.4732143870807566e-02 9.2600243208387600e-01 -8.0430204352172990e-02 + 1.8306992322433746e-01 8.9979825218163034e-01 -1.3610925482387176e-01 + 2.9508915577177808e-01 8.5137146856267687e-01 -2.0896886849798008e-01 + 4.0946735151177266e-01 7.8621737191993724e-01 -2.9661186954413871e-01 + 5.2516573295328139e-01 7.0572285119127642e-01 -4.0298331778598728e-01 + 6.4398212565744661e-01 6.0897144439744255e-01 -5.3200793831750470e-01 + 7.8938695980699325e-01 4.7835893050373246e-01 -6.8462579340519247e-01 + id 14579 + loc 1.5128922462463379e-01 8.4018015861511230e-01 1079 + blend 0.0000000000000000e+00 + interp 5.6020309995882545e-01:3.5347689687163769e-01:2.2229823825216977e-01:4.1577182040145633e-01:9.0998195924003378e-01:3.4978495704336293e-01:1.3021462984778669e+00:4.1927434080701914e-01:1.9894418514064851e+00:5.6019749792782592e-01:2.5911661755468200e+00:3.9594569890682046e-01:3.1409541665758263e+00:4.4167863377613370e-01:3.9443092816347898e+00 + CVs 20 + 9.7707431162910155e-02 4.1992877701183590e-01 2.1524057083357359e-01 + 2.2498845481777352e-01 7.5551258115984687e-01 3.2886586300410525e-01 + 3.6738159964023798e-01 1.0490168023329729e+00 3.9401856500992466e-01 + 5.1498913329613427e-01 1.3139267149044238e+00 4.3294794074597565e-01 + 6.6071761514406901e-01 1.5434397394863244e+00 4.4670065203450676e-01 + 7.9308524466454444e-01 1.7285656103715898e+00 4.4115438992822043e-01 + 9.0127475532198886e-01 1.8660698947630392e+00 4.2565096108958078e-01 + 9.8255511157978281e-01 1.9656489855934995e+00 4.0982394709859415e-01 + 1.0422705862245580e+00 2.0447504918153214e+00 3.9801046382103356e-01 + 1.0902179146261273e+00 2.1164602111598230e+00 3.8158258558306712e-01 + 1.1332680349738078e+00 2.1786951360723013e+00 3.4282487213851487e-01 + 1.1701111636557138e+00 2.2174999877163426e+00 2.6943554682857285e-01 + 1.1938705021918623e+00 2.2181924465607752e+00 1.5934342370088384e-01 + 1.1976376657339567e+00 2.1723873490225936e+00 1.6937262128617570e-02 + 1.1799860731712226e+00 2.0888333496857436e+00 -1.5059409741175134e-01 + 1.1485547756910872e+00 2.0076180319590446e+00 -3.4120155687287779e-01 + 1.1153809916544530e+00 1.9403774033942187e+00 -5.6167424395105847e-01 + 1.0771621916881928e+00 1.7688245183862596e+00 -7.1890555805429113e-01 + 1.0111356410208154e+00 1.3885751072974064e+00 -5.7857412239549477e-01 + id 14580 + loc 7.5464677810668945e-01 1.1585547029972076e-01 399 + blend 0.0000000000000000e+00 + interp 4.5121630581820749e-01:2.8226602585241339e-01:9.1739684985092662e-04:4.5121179365514935e-01:7.8003554341206149e-01:2.6074774218300295e-01:1.5048963096193304e+00:2.7012510680716489e-01:2.7976709736766505e+00:3.1798140519838236e-01:3.3153881271763446e+00 + CVs 20 + 3.6096697647795328e-01 3.3690343160765873e-01 2.1041306744809368e-01 + 6.6624500885029492e-01 6.6529008889456631e-01 4.2201003076054294e-01 + 9.1787177450246304e-01 9.8151564663399993e-01 6.6406796910577193e-01 + 1.1226836625495913e+00 1.2812892591650740e+00 9.3064757860900849e-01 + 1.2921707778422395e+00 1.5662331343799709e+00 1.2134390242606414e+00 + 1.4377737141045390e+00 1.8390685119092138e+00 1.5169035641783049e+00 + 1.5705289316458815e+00 2.0976301350094460e+00 1.8523667362479062e+00 + 1.7042859376101793e+00 2.3325950404094868e+00 2.2343191035885472e+00 + 1.8550394303092221e+00 2.5241203074524856e+00 2.6755702820679508e+00 + 2.0356457685817415e+00 2.6403350152930352e+00 3.1788975323626811e+00 + 2.2420404416092334e+00 2.6448551150343338e+00 3.7194695502719868e+00 + 2.4410735008083773e+00 2.5278101323247455e+00 4.2353175389509445e+00 + 2.5884766594633151e+00 2.3308875604278354e+00 4.6582243936471350e+00 + 2.6470937248265511e+00 2.1231907020372285e+00 4.9323698860124079e+00 + 2.6051459360971263e+00 1.9451968660357539e+00 5.0123506882455997e+00 + 2.5175952693670145e+00 1.7762205001351588e+00 4.8567553877431244e+00 + 2.5212983118689962e+00 1.5383358865685948e+00 4.4403752438640369e+00 + 2.6938152535513229e+00 1.1661906633441175e+00 4.0215350360957594e+00 + 2.5994120172744424e+00 9.9315013334847024e-01 4.1263458754780329e+00 + id 14581 + loc 4.0826079249382019e-01 8.7892949581146240e-01 1069 + blend 0.0000000000000000e+00 + interp 4.1808669423307199e-01:3.1794028260261392e-01:2.9017134721951188e-01:3.4115300293140555e-01:9.7933258445030047e-01:2.4893835835956160e-01:1.6735270016768191e+00:3.5811402616823368e-01:2.3305212152058599e+00:4.1808251336612967e-01:2.9833666959978058e+00:2.5258376871778432e-01:3.5979187835378510e+00 + CVs 20 + 1.9662888897898764e-01 2.5392521003971558e-01 -1.7107471040167982e-01 + 3.7487037640267989e-01 4.9760373958952003e-01 -3.3204203616018685e-01 + 5.4554981487114007e-01 7.2942423092039843e-01 -4.9076826890628844e-01 + 7.1066490391607173e-01 9.4650271949489628e-01 -6.5025130538914011e-01 + 8.6751546231242715e-01 1.1479898201333778e+00 -8.0871610095030855e-01 + 1.0142013163556789e+00 1.3365490424027939e+00 -9.6312746079550338e-01 + 1.1465319724409557e+00 1.5220491225693920e+00 -1.1168103585078770e+00 + 1.2556637472633423e+00 1.7169704868708286e+00 -1.2820214747369350e+00 + 1.3362727292185266e+00 1.9225974196965281e+00 -1.4753053539033569e+00 + 1.3884498668293923e+00 2.1163249301095433e+00 -1.7138259844651729e+00 + 1.4062669877628227e+00 2.2552338234450171e+00 -1.9989394796334103e+00 + 1.3792415781707632e+00 2.3039570815692345e+00 -2.3037298125250283e+00 + 1.3078112855031883e+00 2.2605290095274322e+00 -2.5940638622510015e+00 + 1.2008413361308596e+00 2.1434970741930393e+00 -2.8570439133503802e+00 + 1.0565453654359165e+00 1.9698801334700371e+00 -3.1003956095523133e+00 + 8.3877524352671018e-01 1.7475367076314687e+00 -3.3538543417958397e+00 + 5.1238015971014905e-01 1.4436211154506304e+00 -3.6804674800060928e+00 + 2.6788714356731835e-01 1.0557051623855400e+00 -4.0932442380024767e+00 + 5.4770803121219647e-01 1.0094622321835289e+00 -4.1953071982941017e+00 + id 14582 + loc 6.9417512416839600e-01 5.2221381664276123e-01 393 + blend 0.0000000000000000e+00 + interp 4.7685782085335865e-01:4.1032556132088027e-01:9.7915538527364565e-02:2.9072157533991538e-01:9.7753579245865985e-01:2.8037401156931485e-01:1.9986638906397254e+00:4.7685305227515012e-01:2.7309773722483794e+00:2.7780163564162758e-01:3.1966319803867256e+00 + CVs 20 + -1.5062205686074137e-01 3.6152734568718714e-01 -2.8531961504092718e-01 + -3.1146887288102038e-01 7.5256545354683790e-01 -5.3894431889035543e-01 + -4.4499006869830704e-01 1.1554279380301646e+00 -7.7404686516075949e-01 + -5.4955238312621313e-01 1.5413291419397144e+00 -1.0137748665228110e+00 + -6.3062136062933805e-01 1.8776875755337361e+00 -1.2746660644739904e+00 + -6.8700161562431339e-01 2.1482170319640552e+00 -1.5594128874493491e+00 + -7.1961805549364521e-01 2.3578123510266416e+00 -1.8694384351892248e+00 + -7.3364343973695545e-01 2.5154738460862363e+00 -2.2144542078386720e+00 + -7.3543697552264375e-01 2.6184801378969831e+00 -2.6014302001407197e+00 + -7.3099513284011253e-01 2.6546532893371593e+00 -3.0268196853111524e+00 + -7.2385535410723523e-01 2.6112764692055142e+00 -3.4768678584818966e+00 + -7.1382629650790552e-01 2.4846263658223497e+00 -3.9254043147416322e+00 + -7.0323135123042813e-01 2.2722005524819089e+00 -4.3626252011754421e+00 + -7.0002230840453616e-01 1.9530744608619695e+00 -4.7859515049282875e+00 + -7.2707421397373939e-01 1.4799911086432185e+00 -5.1692505510729152e+00 + -8.4361408285386152e-01 7.8378474446784385e-01 -5.4287613034168229e+00 + -1.1469166113187945e+00 -1.2379372993091353e-01 -5.4146473327529305e+00 + -1.6514697434360803e+00 -1.0193555322414183e+00 -5.0604056789909677e+00 + -2.0033243015858542e+00 -1.6582748984953732e+00 -4.7839638025338864e+00 + id 14583 + loc 5.4773841053247452e-02 3.4223383665084839e-01 401 + blend 0.0000000000000000e+00 + interp 5.4497927347513808e-01:3.2048186074986534e-01:7.3767028886559771e-01:5.4497382368240332e-01:1.4989279128593356e+00:3.8723145729261993e-01:1.9578005694957636e+00:2.9572505366544322e-01:2.6549341665683768e+00:3.3030448056451106e-01:3.0879996300453998e+00:3.1470231203495902e-01:3.9523248016498069e+00 + CVs 20 + -2.5655359064362121e-01 2.2686859954488658e-01 1.6305532470873560e-01 + -4.9893416909160343e-01 4.5555915935146513e-01 3.0324723100745948e-01 + -7.3497543948897315e-01 6.7410271677060363e-01 4.3905633508219377e-01 + -9.6828589394755860e-01 8.7667446823903161e-01 5.7794316229833520e-01 + -1.1990908466620771e+00 1.0618218423172863e+00 7.1790377364048152e-01 + -1.4285963878531303e+00 1.2308195937504169e+00 8.5965274938743397e-01 + -1.6597103931391530e+00 1.3867395015369375e+00 1.0108718009254274e+00 + -1.8951762850077183e+00 1.5304410586245913e+00 1.1847239578934774e+00 + -2.1332895457063645e+00 1.6593291846598615e+00 1.3938447379743883e+00 + -2.3668083069935943e+00 1.7694908293081921e+00 1.6466175054011503e+00 + -2.5899672064176920e+00 1.8597551398257832e+00 1.9447368751317406e+00 + -2.8067297144379206e+00 1.9293426653021095e+00 2.2872278674892463e+00 + -3.0291714076853542e+00 1.9671223734321996e+00 2.6713427844557169e+00 + -3.2723686865637518e+00 1.9466924759208082e+00 3.0790501428114387e+00 + -3.5437664347484352e+00 1.8462823603635936e+00 3.4854773419520595e+00 + -3.8194403896297935e+00 1.6604135388373162e+00 3.8925095001555619e+00 + -4.0425350690510253e+00 1.3992602978028086e+00 4.3281148780733174e+00 + -4.1055361424002887e+00 1.1393829032520919e+00 4.7902463363856356e+00 + -3.8566065763793556e+00 1.1714113334806640e+00 5.0812010312268718e+00 + id 14584 + loc 6.8339532613754272e-01 4.4721183180809021e-01 404 + blend 0.0000000000000000e+00 + interp 4.5161939810630475e-01:4.4731533833207415e-01:2.1314998643572269e-01:2.6347902874016338e-01:1.0383761209169258e+00:3.7991699397506645e-01:1.9279025737923390e+00:4.5161488191232368e-01:2.5275719298976886e+00:3.8275476666457586e-01:3.0493080230218599e+00:2.9275774851229630e-01:3.9054677320053401e+00 + CVs 20 + -9.9357617177815119e-02 2.8419484258529276e-01 1.4901675744007647e-01 + -1.8413517684561001e-01 5.4822928567515250e-01 2.8932519409549717e-01 + -2.9644542712648358e-01 8.1370218743700584e-01 4.4321048902597932e-01 + -4.4849072136176221e-01 1.0887344152958809e+00 6.2075718240429356e-01 + -6.3505715983612521e-01 1.3679319596357151e+00 8.2366902697953526e-01 + -8.4339147692062011e-01 1.6446518203537701e+00 1.0577620889036066e+00 + -1.0520786410343173e+00 1.9117280225237163e+00 1.3311177914015808e+00 + -1.2361956310972892e+00 2.1608437663274125e+00 1.6487044572685303e+00 + -1.3682842527976278e+00 2.3828817612908413e+00 2.0102068100886026e+00 + -1.4240255130240134e+00 2.5674944841853442e+00 2.4119287871764721e+00 + -1.3818644127724438e+00 2.7036710284970780e+00 2.8418671152964121e+00 + -1.2325341391919697e+00 2.7907902248023504e+00 3.2663860237885900e+00 + -1.0006877997238042e+00 2.8397192685144810e+00 3.6510723954440802e+00 + -7.1900393784688132e-01 2.8779849236319590e+00 3.9648803003153206e+00 + -4.0516965740811450e-01 2.9316143157198935e+00 4.1848243393076272e+00 + -5.6178773779065772e-02 2.9842052920362616e+00 4.3161677155838039e+00 + 3.4909178778059480e-01 2.9750796268732471e+00 4.3928422279285098e+00 + 7.8771902406744365e-01 2.8846234285608414e+00 4.4223699544018942e+00 + 9.5437992380991621e-01 2.8750339539026459e+00 4.5797182489296731e+00 + id 14585 + loc 3.7385575473308563e-02 7.0911478996276855e-01 399 + blend 0.0000000000000000e+00 + interp 3.3715862481927689e-01:2.6702564311514987e-01:1.7630869147434636e-01:1.5017615668210843e-01:9.8388329993979229e-01:3.3346558674364535e-01:1.4820669868369023e+00:3.3715525323302870e-01:2.2641777242509535e+00:2.8878471927974975e-01:2.9962402822897420e+00:2.7000116606918628e-01:3.6689407138412382e+00 + CVs 20 + -2.3837179586223972e-01 3.3646570272531962e-01 -2.2326575264645671e-01 + -4.9719405294304619e-01 6.6627423596905122e-01 -4.3900097280297840e-01 + -7.7191899967093180e-01 9.8517331319258483e-01 -6.6403962505546599e-01 + -1.0573926562639684e+00 1.2875415807799184e+00 -9.0225204832132677e-01 + -1.3456783253121201e+00 1.5628880734919817e+00 -1.1413949585873318e+00 + -1.6282461917944453e+00 1.7953294341241191e+00 -1.3545860806856098e+00 + -1.8939150359325847e+00 1.9759918310514775e+00 -1.5127449722487238e+00 + -2.1167789850643186e+00 2.1091529541461314e+00 -1.6005684595366776e+00 + -2.3120427725170276e+00 2.1995471365508794e+00 -1.6326575286196465e+00 + -2.5383767112726368e+00 2.2041223600442619e+00 -1.6139917045837839e+00 + -2.8007216932234411e+00 2.0648798760629932e+00 -1.5216809676165644e+00 + -3.0752280824476319e+00 1.7277198303977537e+00 -1.3500056645631680e+00 + -3.3463275596855202e+00 1.1746832756441086e+00 -1.1636788390512816e+00 + -3.6444680551996775e+00 4.5871683185626144e-01 -1.0692528121974487e+00 + -4.0721184552407568e+00 -3.0840119687776435e-01 -1.1365010432538685e+00 + -4.7695699390373036e+00 -9.6617510904030035e-01 -1.3919779375019172e+00 + -5.7482471943472131e+00 -1.2157396674675671e+00 -1.7944008485616150e+00 + -6.4994613674155204e+00 -9.4741226905414677e-01 -2.0882041592763807e+00 + -6.7000299949672151e+00 -5.8211146900368582e-01 -2.1537426172578416e+00 + id 14586 + loc 7.6141762733459473e-01 5.6596535444259644e-01 1069 + blend 0.0000000000000000e+00 + interp 3.7379638183927300e-01:2.7607804452650303e-01:4.4020360387599933e-01:3.7379264387545463e-01:1.0233772111672013e+00:2.5467113517500428e-01:1.9888748464256800e+00:2.6735671187347637e-01:2.8641342590318288e+00:3.2075283003695704e-01:3.7070185468304260e+00 + CVs 20 + 3.1311385772221173e-02 2.9295272989795429e-01 -1.3889974047912060e-01 + 5.1114643415134275e-02 5.9099608572890205e-01 -2.7678791328838109e-01 + 8.7213229931228098e-02 9.0782229814940074e-01 -4.2624896611390450e-01 + 1.7723179161100572e-01 1.2372123436004034e+00 -5.8394924880400778e-01 + 3.2451839429403484e-01 1.5281518244361203e+00 -7.1399226002382721e-01 + 4.7179281580840726e-01 1.7332518020799761e+00 -7.8777785137651379e-01 + 5.8113085544811771e-01 1.8582955012749101e+00 -8.0983376647865757e-01 + 6.6104848202557942e-01 1.9402082262739859e+00 -7.9998305168220762e-01 + 7.2530658606723730e-01 1.9929602563979361e+00 -7.6642650961763970e-01 + 7.6530852031620611e-01 2.1282354381421080e+00 -7.1663769766060248e-01 + 7.2057838790702700e-01 2.4178959947416261e+00 -7.1758042905157304e-01 + 5.6456839207636000e-01 2.6708705687646566e+00 -8.5431190843466287e-01 + 3.0778413355027767e-01 2.7364913086193816e+00 -1.1114942032677120e+00 + -2.0213048998915184e-02 2.5626292144264253e+00 -1.4567618668193361e+00 + -3.2456012996974137e-01 2.1623236211230061e+00 -1.8360857091382075e+00 + -5.1361978176781786e-01 1.5972261957410523e+00 -2.1756722227396654e+00 + -5.4051900460238378e-01 9.4477691912036965e-01 -2.3712454647539642e+00 + -4.3947987843263375e-01 3.2400669565328677e-01 -2.3736474417476261e+00 + -3.6986505969197414e-01 -1.7355398318282056e-01 -2.3823429095466597e+00 + id 14587 + loc 4.2530158162117004e-01 1.3094577193260193e-01 393 + blend 0.0000000000000000e+00 + interp 3.7509682416422152e-01:2.6343813897932200e-01:2.4637421126924419e-01:3.7509307319597990e-01:9.9984078702298018e-01:3.1496149852877808e-01:1.5070684941594883e+00:2.5938190176474996e-01:2.0325788370271565e+00:2.6048327127837351e-01:3.0202063524910701e+00:3.0440604251219600e-01:3.8165414344547366e+00 + CVs 20 + -9.5660615418475550e-02 3.8042423202458897e-01 3.9471149789391669e-01 + -1.9303378676359761e-01 7.7576512444234780e-01 7.2069407154206355e-01 + -2.9330149235317915e-01 1.1932571366295777e+00 9.7970096900375814e-01 + -4.1818179019895418e-01 1.6244405368731845e+00 1.1847351624787368e+00 + -6.0251303497081765e-01 2.0444354963134170e+00 1.3509761546057923e+00 + -8.6187747978989926e-01 2.4311532444956336e+00 1.4844970086008553e+00 + -1.1951609145515047e+00 2.7861257526829246e+00 1.5832086789182713e+00 + -1.6077818187959301e+00 3.1203007756105108e+00 1.6501413236217770e+00 + -2.1120247019610017e+00 3.4314854694555361e+00 1.7061548711465733e+00 + -2.7180173602116193e+00 3.6988362199606879e+00 1.7885221448749433e+00 + -3.4194673039212224e+00 3.8814003797121686e+00 1.9395460312003587e+00 + -4.1860011453652071e+00 3.9249332513578388e+00 2.1883553829820386e+00 + -4.9763739600939720e+00 3.7675819654537230e+00 2.5430439132214366e+00 + -5.7214778335780991e+00 3.3429741232645629e+00 3.0041478593719324e+00 + -6.2766409839221184e+00 2.6431094737820073e+00 3.5509997374856392e+00 + -6.4991296543662145e+00 1.8127475166691389e+00 4.1219311428426559e+00 + -6.3908967999962654e+00 1.0599417126852773e+00 4.6599021601775377e+00 + -6.0649176941053424e+00 5.2470150298069473e-01 5.1129598319609162e+00 + -5.6586972160143461e+00 2.4831464302221562e-01 5.4023021569581751e+00 + id 14588 + loc 7.3515820503234863e-01 9.6409440040588379e-02 1079 + blend 0.0000000000000000e+00 + interp 4.1179041075180939e-01:4.1178629284770191e-01:1.9831877481632443e-01:3.7461466865549697e-01:7.7708168209186768e-01:2.6201414536549555e-01:1.0808364644984643e+00:3.7524156824380311e-01:2.0840496231683456e+00:3.7182019152812346e-01:2.6841409240859240e+00:3.4727044897151615e-01:3.0195697764809912e+00:2.2935844955196050e-01:3.8553983178258280e+00 + CVs 20 + -1.1636909283707669e-02 3.6621299308614075e-01 -5.4890271679180619e-02 + -3.7419647758089869e-02 6.8291150861616257e-01 -5.3866520564397891e-02 + -6.9249394182072710e-02 9.7328498064485658e-01 -2.8647597921073575e-02 + -1.0131545532371067e-01 1.2386304528371554e+00 1.4120452633961666e-03 + -1.3293017960465847e-01 1.4749751645328704e+00 3.5938414050365741e-02 + -1.6229255582919644e-01 1.6859158806636736e+00 7.3148148629604726e-02 + -1.9278813508105386e-01 1.8830446331482120e+00 1.1918685875023538e-01 + -2.3771937358395767e-01 2.0731957572874196e+00 1.9041847349701913e-01 + -3.1458588946049948e-01 2.2463186584537942e+00 2.9797319466298300e-01 + -4.3463814871425377e-01 2.3813783003308258e+00 4.3460908970462520e-01 + -5.9463824776522389e-01 2.4667876542588494e+00 5.8335175588759480e-01 + -7.8471788753806437e-01 2.5071954060447927e+00 7.3453052059295032e-01 + -1.0021237421298417e+00 2.5099722584179505e+00 8.8463141576992088e-01 + -1.2557545246961985e+00 2.4729895767799901e+00 1.0299290047817000e+00 + -1.5618341196524126e+00 2.3782696571526949e+00 1.1715982695479172e+00 + -1.8896692206264287e+00 2.1826326745085134e+00 1.3013700004784354e+00 + -2.1542365630867546e+00 1.8590932884073659e+00 1.3694766397107154e+00 + -2.2831298231012891e+00 1.4314499461964432e+00 1.3605891224325846e+00 + -2.0963122983160956e+00 1.4364564859582134e+00 1.4610436153609483e+00 + id 14589 + loc 1.9633467495441437e-01 3.3365455269813538e-01 405 + blend 0.0000000000000000e+00 + interp 4.4176607129353163e-01:4.4176165363281872e-01:5.8029824477551784e-02:4.1349816996988220e-01:8.8018897789536255e-01:2.7151729554514453e-01:1.3222799508891776e+00:3.8067422390757411e-01:2.0146683736882722e+00:2.9333300001154300e-01:2.6593454422621852e+00:4.1494680341949119e-01:3.0108966644892878e+00:2.7739668871126699e-01:3.7828057475555861e+00 + CVs 20 + -8.7664643946604920e-02 3.5002677085457110e-02 5.5552287379646584e-02 + -2.1697110105990580e-01 2.6196146401389751e-02 9.5219667738528274e-02 + -3.6980434675605611e-01 5.4025018763832811e-02 1.9868998265642338e-01 + -5.2158304781556142e-01 1.0869599827467943e-01 3.1523261833706262e-01 + -6.6399007181792402e-01 1.8868791312711747e-01 4.5036929954606741e-01 + -7.8720721600341903e-01 2.8834020416488015e-01 6.1122321129693447e-01 + -8.8203068604852519e-01 3.9775685630797786e-01 8.0117285924739012e-01 + -9.4114043099829503e-01 5.0714399480548100e-01 1.0200274132219758e+00 + -9.5894237507668578e-01 6.0923426834264294e-01 1.2639923957056745e+00 + -9.3138403205353859e-01 6.9912065255854139e-01 1.5253673354740531e+00 + -8.5581522906621077e-01 7.7591345533509037e-01 1.7936297581094958e+00 + -7.3254202329933826e-01 8.4480128042332436e-01 2.0537985287314804e+00 + -5.6278978910904220e-01 9.1015457958921142e-01 2.2928535461251234e+00 + -3.4365684052514223e-01 9.5533600254742523e-01 2.5107319679672164e+00 + -6.9869278671539498e-02 9.4261040783989858e-01 2.7161039164939806e+00 + 2.6341996037811949e-01 8.5410938602850406e-01 2.9086774288904436e+00 + 6.5823492159748165e-01 7.2380007970699856e-01 3.0704749218580312e+00 + 1.1031403670634887e+00 6.0485674102564513e-01 3.1777254111155107e+00 + 1.3805363481534612e+00 6.6115670433127272e-01 3.0989989920725280e+00 + id 14590 + loc 6.3431507349014282e-01 6.1259800195693970e-01 401 + blend 0.0000000000000000e+00 + interp 3.8743202403705979e-01:2.7824519432207617e-01:8.2154663972322517e-05:3.4011300285415763e-01:9.5336840931868794e-01:2.7856384291537795e-01:1.6572267955947693e+00:2.8711341551265412e-01:2.6164257476136386e+00:3.8742814971681944e-01:3.1655082166627571e+00 + CVs 20 + -1.6999359598840164e-01 3.1354117148645239e-01 -2.1879932916026956e-01 + -3.2005827743899395e-01 6.4805260057539316e-01 -4.4527392886184430e-01 + -4.6108456313310098e-01 9.9025872105367940e-01 -6.9889824504411191e-01 + -5.9417345682943390e-01 1.3205715377288891e+00 -9.9653364221933982e-01 + -7.1621691437833501e-01 1.6125601134478484e+00 -1.3419470065928958e+00 + -8.3986878913308871e-01 1.8501981706314385e+00 -1.7211036586957786e+00 + -9.9343690122601036e-01 2.0331804934530529e+00 -2.1168400891682344e+00 + -1.2039707095992613e+00 2.1622180103058319e+00 -2.5122364024454260e+00 + -1.4865404841010363e+00 2.2316580013909775e+00 -2.8863900824968649e+00 + -1.8415842566893934e+00 2.2361238843348890e+00 -3.2171403397725062e+00 + -2.2573712222325186e+00 2.1759465272038172e+00 -3.4867452766140792e+00 + -2.7179687236529215e+00 2.0528172458891154e+00 -3.6874471688025987e+00 + -3.2023971444407251e+00 1.8679901110075159e+00 -3.8209547201363527e+00 + -3.6806246824166484e+00 1.6341145130738863e+00 -3.8858733652192603e+00 + -4.1386248256496332e+00 1.3708687872250367e+00 -3.8804443726262283e+00 + -4.6034548092362080e+00 1.0738944549817304e+00 -3.8316082685668440e+00 + -5.1101000515100177e+00 7.3112304231352443e-01 -3.8251177350984764e+00 + -5.6155432652763499e+00 4.0362283567625479e-01 -3.9396998244290842e+00 + -5.9829704767706149e+00 2.2460805677361917e-01 -4.0844845625350699e+00 + id 14591 + loc 3.1598642468452454e-01 4.2759516835212708e-01 399 + blend 0.0000000000000000e+00 + interp 4.5566946139786735e-01:2.7418873375801395e-01:5.4498743024937535e-01:4.5566490470325338e-01:1.0003513397257178e+00:2.7491792953929262e-01:1.8769846474865755e+00:2.7766286217287678e-01:2.9287507794770620e+00:2.8495505056247999e-01:3.8580214138748525e+00 + CVs 20 + -1.8965746943202566e-01 2.2881917569122712e-01 1.2782569909905381e-01 + -3.7290575010695576e-01 4.5176814398129805e-01 2.5309392766575645e-01 + -5.5250239259968204e-01 6.6719153821175414e-01 3.6114359937572499e-01 + -7.3058262618982150e-01 8.7763890540790979e-01 4.4591587454350695e-01 + -9.0422558720914015e-01 1.0896422567578563e+00 5.1196331473366119e-01 + -1.0686031792036290e+00 1.3113967380707918e+00 5.6659061642360065e-01 + -1.2242658207892150e+00 1.5520935248366803e+00 6.1806830539139457e-01 + -1.3810008381974475e+00 1.8218855399657705e+00 6.7643024698536935e-01 + -1.5618632287886636e+00 2.1264539870927330e+00 7.6145373813888972e-01 + -1.8021579846126019e+00 2.4510197427561335e+00 9.0896032900263579e-01 + -2.1269049742126223e+00 2.7321306465201598e+00 1.1513668551133189e+00 + -2.4957376051307540e+00 2.8732189911610773e+00 1.4655879371327967e+00 + -2.8257716636706833e+00 2.8552626472996523e+00 1.7818955437679100e+00 + -3.0660368504651667e+00 2.7379632127996718e+00 2.0525945180294585e+00 + -3.1904516273008547e+00 2.5844677164083034e+00 2.2602825888960720e+00 + -3.2112436828653337e+00 2.4158610844136552e+00 2.4464218029926097e+00 + -3.1952207625825602e+00 2.2106421149335578e+00 2.7015808379414530e+00 + -3.3034272523212720e+00 1.9958747050410697e+00 3.0072433653078567e+00 + -3.6650700986035072e+00 1.9937501522181833e+00 3.0530623633273093e+00 + id 14592 + loc 2.9321333765983582e-01 2.8203085064888000e-01 404 + blend 0.0000000000000000e+00 + interp 4.3889779439882931e-01:2.6370798697448894e-01:2.2203168189632860e-02:2.7306602753884834e-01:9.3441595765270669e-01:2.9849918826402100e-01:1.9526469405016851e+00:3.9294821131880658e-01:2.3538071306635748e+00:3.9990169279772270e-01:3.0039154466764066e+00:4.3889340542088534e-01:3.6919560623537619e+00 + CVs 20 + -8.7090235833667595e-02 1.3415344452397210e-01 -1.1680729631792278e-01 + -1.8490275064735243e-01 2.7922609315711072e-01 -2.2251610661921567e-01 + -2.8713052153732543e-01 4.4000839250443075e-01 -3.2635335238921936e-01 + -3.9239712769644397e-01 6.2070798174303343e-01 -4.2950742638607053e-01 + -5.0211518322071980e-01 8.2204103260083350e-01 -5.2603977866618479e-01 + -6.2065332064938539e-01 1.0417261432027547e+00 -6.0638237792388083e-01 + -7.5225319405040658e-01 1.2732078710879979e+00 -6.5790276326642383e-01 + -8.9601516833620487e-01 1.5059435243019330e+00 -6.6944849337164947e-01 + -1.0464283577916498e+00 1.7277558566028353e+00 -6.3421679922551044e-01 + -1.1977329536271526e+00 1.9279387959132099e+00 -5.5122187362649966e-01 + -1.3449628253264310e+00 2.0974448169038431e+00 -4.2355374324357009e-01 + -1.4799541614351996e+00 2.2284806438354474e+00 -2.5854238935155049e-01 + -1.5909310910094026e+00 2.3190069435379392e+00 -6.9085443152546722e-02 + -1.6518719805506534e+00 2.3751736948707767e+00 1.2183826164233991e-01 + -1.6393375502392935e+00 2.4090116657607168e+00 2.8099047046388259e-01 + -1.5712525615401620e+00 2.4243037361280835e+00 3.8925238748734103e-01 + -1.4936976193133678e+00 2.4198748576531006e+00 4.6607328079190902e-01 + -1.4275070341009886e+00 2.4013891408400276e+00 5.2851184962073905e-01 + -1.3763426521628486e+00 2.3612894981041985e+00 6.2387543764794984e-01 + id 14593 + loc 3.2775756716728210e-01 2.1144084632396698e-01 393 + blend 0.0000000000000000e+00 + interp 3.9398786119710816e-01:3.1703750769922784e-01:3.9604550418081752e-02:2.6873995249760851e-01:9.9710178663425841e-01:2.7154153862588792e-01:2.0041337965117365e+00:3.9398392131849619e-01:2.7369944596293312e+00:2.5977612030311398e-01:3.1827415904878400e+00 + CVs 20 + -4.6818661927160013e-02 3.8134027361026013e-01 3.4605723335894456e-01 + -1.0015246399491300e-01 7.6268236117996657e-01 6.4373590485957977e-01 + -1.5562274749305655e-01 1.1492830047805409e+00 8.9226313616338238e-01 + -2.2729445105912111e-01 1.5403808241352996e+00 1.1037107148526424e+00 + -3.4437866880518808e-01 1.9224511145704741e+00 1.2936202474429399e+00 + -5.2753329216213674e-01 2.2789350122823251e+00 1.4711723982154590e+00 + -7.8263555782610050e-01 2.6071067385540680e+00 1.6334388958130872e+00 + -1.1130229881560771e+00 2.9108900522684840e+00 1.7774296382724919e+00 + -1.5219142871078304e+00 3.1821523243141265e+00 1.9162459812418033e+00 + -2.0053071270779190e+00 3.3989595034662674e+00 2.0769858596245676e+00 + -2.5446731824961497e+00 3.5287292593137325e+00 2.2891493828234091e+00 + -3.1054552828725281e+00 3.5339967643095922e+00 2.5695693104940251e+00 + -3.6433409482726402e+00 3.3831047921471722e+00 2.9074437253609813e+00 + -4.1009047028795056e+00 3.0636165252813488e+00 3.2727296150806993e+00 + -4.4024826317342294e+00 2.6023664317700144e+00 3.6352655756554180e+00 + -4.4951564808999134e+00 2.0816949086943941e+00 3.9770104631264607e+00 + -4.4018807486988774e+00 1.6020456838350405e+00 4.3047901004751949e+00 + -4.1934622645373203e+00 1.2126437095124070e+00 4.6351706451660570e+00 + -3.9467872709358711e+00 8.7545205807472892e-01 4.9720163848098817e+00 + id 14594 + loc 9.3470746278762817e-01 4.1146677732467651e-01 1069 + blend 0.0000000000000000e+00 + interp 3.2317361110382764e-01:2.3184809902621792e-01:8.8338819542283065e-01:2.9866575821972091e-01:1.6233570258568706e+00:3.2317037936771664e-01:2.0533402368243943e+00:2.4054002642162772e-01:2.8669250531132642e+00:2.3152091572604372e-01:3.9153917888117249e+00 + CVs 20 + -9.6528213143876468e-02 3.4422481444735664e-01 2.7467264945398895e-01 + -2.2015638906110835e-01 6.8089133952003567e-01 5.2385406649471644e-01 + -3.8665165014720321e-01 1.0076591054564576e+00 7.6001900642648335e-01 + -6.0118929994723802e-01 1.3184578040135038e+00 9.7380175829181348e-01 + -8.3356082435982348e-01 1.6079337209474416e+00 1.1444579850073864e+00 + -1.0141046982662785e+00 1.8812278982379023e+00 1.2655296495375885e+00 + -1.0903515234229619e+00 2.1360716978018246e+00 1.3469890487767964e+00 + -1.0745138723459655e+00 2.3666393244898805e+00 1.4117606279077721e+00 + -9.9706452238830479e-01 2.5795256187078657e+00 1.4928678754340279e+00 + -8.5971394475685092e-01 2.7600269257429124e+00 1.6204568046262329e+00 + -6.6101299781798573e-01 2.8524418559004929e+00 1.7908470906592120e+00 + -4.3356371342211086e-01 2.8297786322262350e+00 1.9514135671496595e+00 + -2.0174870461088701e-01 2.7197841879027269e+00 2.0799241301498914e+00 + 3.4164112267429658e-02 2.5292836296680949e+00 2.1858682006606198e+00 + 2.6593211154121743e-01 2.2538673189462441e+00 2.2673354163957815e+00 + 4.7020476655789556e-01 1.9166313703350348e+00 2.3086782811199713e+00 + 6.2886426547620933e-01 1.5839725272423399e+00 2.2949380617730988e+00 + 7.4987383423911502e-01 1.3168412315764768e+00 2.2313502722726439e+00 + 7.7963688052573721e-01 1.0847307185198467e+00 2.0468532588613404e+00 + id 14595 + loc 2.5426152348518372e-01 8.6300009489059448e-01 401 + blend 0.0000000000000000e+00 + interp 4.6203114670759682e-01:2.9331389838213551e-01:2.9700151755628457e-02:2.9313534029501498e-01:9.9842355716140774e-01:3.0264428112444203e-01:1.7942798484620988e+00:2.9111822396644216e-01:2.4195820507400936e+00:4.6202652639612979e-01:2.9790273632482331e+00:4.2807341630398438e-01:3.3889300946604868e+00 + CVs 20 + -8.6916177497909003e-02 2.8928467173889733e-01 -1.2823339764444031e-01 + -1.7406773900778261e-01 5.8896341192902124e-01 -2.6889049568116541e-01 + -2.5764712759071468e-01 9.0367012837217264e-01 -4.0780332534125557e-01 + -3.3232464096970837e-01 1.2364667834960448e+00 -5.5030544561576611e-01 + -3.8785082059693937e-01 1.5715676382170012e+00 -7.1198405706788248e-01 + -4.2264442010586811e-01 1.8889857462573132e+00 -9.0013930416943366e-01 + -4.6089383122086169e-01 2.1875634363819048e+00 -1.1214077739605433e+00 + -5.4391946144740677e-01 2.4692982089371318e+00 -1.3830379528875203e+00 + -7.1259539956236817e-01 2.7145683999150716e+00 -1.6791856477078866e+00 + -9.8966237900197807e-01 2.8883544530933865e+00 -1.9863272657903035e+00 + -1.3707665543368921e+00 2.9623359433073997e+00 -2.2777388344054308e+00 + -1.8281673089583776e+00 2.9157336694496099e+00 -2.5377431583936128e+00 + -2.3124619863161913e+00 2.7325196239618137e+00 -2.7635152630235833e+00 + -2.7322063821799047e+00 2.4160999063465689e+00 -2.9539981636482655e+00 + -3.0337373639293226e+00 2.0065542203448032e+00 -3.1384115755270039e+00 + -3.2651388718447349e+00 1.5359524124679784e+00 -3.3344490362404309e+00 + -3.4435702070299463e+00 1.0575268254475896e+00 -3.5795532872578826e+00 + -3.5727746691680777e+00 5.9987024348937867e-01 -3.9257988866644000e+00 + -3.7139418879382822e+00 9.4067755762530902e-02 -4.3449503619969168e+00 + id 14596 + loc 1.3086062669754028e-01 7.1331077814102173e-01 399 + blend 0.0000000000000000e+00 + interp 4.3025869264663830e-01:2.7304253669971817e-01:2.3833449783910421e-01:2.8878471927974975e-01:9.9646030599098279e-01:2.9481773031821201e-01:1.8493936660023964e+00:2.7799997296906404e-01:2.7837873880412953e+00:4.0603408247948758e-01:3.4642625109288909e+00:4.3025439005971183e-01:3.9726075520871102e+00 + CVs 20 + -1.9673134999312122e-01 3.3570279888377347e-01 -2.6917524622459799e-01 + -3.8092592498473582e-01 6.5985760693611362e-01 -5.3648011859326428e-01 + -5.4321795200772294e-01 9.6591860361835158e-01 -8.2223748643223493e-01 + -6.7999142292819115e-01 1.2531607315476667e+00 -1.1334636496193320e+00 + -7.9599117092017035e-01 1.5277691296572014e+00 -1.4755540395904005e+00 + -9.1242382388653187e-01 1.8008984159495987e+00 -1.8573423336604993e+00 + -1.0743561775005974e+00 2.0818698102179383e+00 -2.2806790614181174e+00 + -1.3449779127675323e+00 2.3518074592948528e+00 -2.7350402906992697e+00 + -1.7702837104311002e+00 2.5144161869071424e+00 -3.1763330294075951e+00 + -2.2887313519983752e+00 2.4602483614419972e+00 -3.5253807360604057e+00 + -2.7687555217466397e+00 2.1956347199830359e+00 -3.7393542646313978e+00 + -3.1138377480753854e+00 1.8037976571290066e+00 -3.8338594447808956e+00 + -3.3235351624061593e+00 1.3403121795502240e+00 -3.8698616730088036e+00 + -3.4891838552113588e+00 7.9997133840333556e-01 -3.9264666272331761e+00 + -3.7662598544355754e+00 2.1965021615476085e-01 -4.0762219082371622e+00 + -4.2806314716757861e+00 -2.2151984566243521e-01 -4.3521712410945979e+00 + -4.9829980543660088e+00 -2.3777456210558801e-01 -4.7059601981961388e+00 + -5.5954749863828388e+00 1.7960256825502782e-01 -4.9977469448631258e+00 + -6.0983990194529980e+00 4.9502803618229035e-01 -5.2294345333970238e+00 + id 14597 + loc 1.1218722164630890e-01 7.4854761362075806e-01 404 + blend 0.0000000000000000e+00 + interp 5.1828507458741624e-01:5.1827989173667044e-01:4.3039962659203346e-01:5.1621953906186480e-01:9.9995279472917242e-01:3.1443170870619813e-01:1.7674689520699896e+00:4.2459051536142517e-01:2.0613815973567613e+00:3.1129920599618577e-01:2.8039580166949269e+00:2.6960166630789772e-01:3.2187658497814033e+00:4.0541554882120662e-01:3.9166796028476139e+00 + CVs 20 + -5.5321494688971393e-02 -6.5179624620624196e-02 2.2703687274333917e-02 + -1.1440459403323208e-01 -1.1351486593943164e-01 7.9673617405803004e-02 + -1.6162869237615782e-01 -1.6254936704102876e-01 1.2576461943632858e-01 + -2.0423538218582801e-01 -2.1043605016802130e-01 1.7624130379263114e-01 + -2.4379806717146890e-01 -2.5259239544308221e-01 2.3755593565507460e-01 + -2.8126752598120142e-01 -2.8539308572894451e-01 3.1015550958549837e-01 + -3.1818370080395836e-01 -3.0531923757917495e-01 3.9264049704591891e-01 + -3.5576093943893600e-01 -3.0966767845524268e-01 4.8257793564888868e-01 + -3.9469819019614938e-01 -2.9748916110340762e-01 5.7601519210201946e-01 + -4.3540917860609740e-01 -2.6942554494832194e-01 6.6859082167110206e-01 + -4.7815036289703694e-01 -2.2709308915151150e-01 7.5656260119245178e-01 + -5.2273103091237105e-01 -1.7196899937995280e-01 8.3787837209570815e-01 + -5.6972236483650318e-01 -1.0562044693387945e-01 9.1134836658405893e-01 + -6.2243186930697281e-01 -2.8639768549496125e-02 9.7731134581093260e-01 + -6.8379487700074504e-01 6.0921772762420168e-02 1.0382522820514526e+00 + -7.5545496675918233e-01 1.6690264411310807e-01 1.0973494035552518e+00 + -8.3652577150441876e-01 2.9309634749145946e-01 1.1580781612662780e+00 + -9.2407033338339983e-01 4.3664984676505525e-01 1.2233926341067232e+00 + -1.0556138922726694e+00 4.6566064064540080e-01 1.2463932162762186e+00 + id 14598 + loc 4.7118988633155823e-01 6.7692026495933533e-02 1079 + blend 0.0000000000000000e+00 + interp 4.2632616887490382e-01:3.3189167797347402e-01:2.8871348504514349e-01:2.7502631326399479e-01:1.5807499535010856e+00:2.7608953769691591e-01:1.7510064547193385e+00:3.2915652574123194e-01:2.2158846989076006e+00:4.2632190561321509e-01:2.8947833327775601e+00:3.9621708884278545e-01:3.1330017750864867e+00:2.6881364311533701e-01:3.9973747012452101e+00 + CVs 20 + 3.0450072315563137e-01 4.8635787429217503e-01 -6.5204101334042947e-02 + 4.8789350155585293e-01 9.2821266440664263e-01 -1.6573263303860092e-01 + 6.1829217020794369e-01 1.3390563772838511e+00 -2.8384542368670884e-01 + 7.0706561705931503e-01 1.7284792276892271e+00 -4.2309198305009144e-01 + 7.3697535174755591e-01 2.0785539596975524e+00 -5.9585369689577294e-01 + 6.9040472413463250e-01 2.3580129314548253e+00 -8.1411343158903138e-01 + 5.6943270670305268e-01 2.5162635693249538e+00 -1.0749800241584784e+00 + 4.2091027408577675e-01 2.5170471803991288e+00 -1.3430962134099151e+00 + 3.0064223350674568e-01 2.3934528951610607e+00 -1.5748855754551530e+00 + 2.0876473849685429e-01 2.2135811660800497e+00 -1.7642406323599531e+00 + 1.1458739676457802e-01 2.0037070969386357e+00 -1.9254959840880186e+00 + 4.9605477090562122e-03 1.7579400137454471e+00 -2.0564638863371427e+00 + -1.2139836163810297e-01 1.4685847045795715e+00 -2.1396796687556283e+00 + -2.6597474216178540e-01 1.1319489564576013e+00 -2.1475358421017461e+00 + -4.2287873777247131e-01 7.5844797845781597e-01 -2.0373416344589286e+00 + -5.8085407273731648e-01 4.0058883722974070e-01 -1.7811252900656422e+00 + -7.5370045608563718e-01 1.2488526776211772e-01 -1.3910722572003005e+00 + -9.5745787934687709e-01 -6.0643291282658218e-03 -9.1129237478755343e-01 + -1.0399207194134812e+00 -1.2647369399798269e-02 -7.0459677860134196e-01 + id 14599 + loc 7.9656976461410522e-01 1.5297335386276245e-01 393 + blend 0.0000000000000000e+00 + interp 4.4025687275894521e-01:2.9010995619518432e-01:5.5754762575438488e-01:2.9809091978580587e-01:1.3776455520016000e+00:2.7122318182756833e-01:2.2257936819173842e+00:4.4025247019021763e-01:2.9997610821633973e+00:2.8904950480346464e-01:3.7744839892002542e+00 + CVs 20 + 4.5678928465749119e-01 3.8886606594027184e-01 1.3285769059713001e-01 + 8.8630717080957955e-01 7.8397261127853302e-01 2.5417751889385393e-01 + 1.2849585179841152e+00 1.2047561973909373e+00 4.0481345062784307e-01 + 1.6485092898269129e+00 1.6350291384748954e+00 6.2846516588214596e-01 + 1.9643952965832838e+00 2.0368047265354385e+00 9.5575105174834729e-01 + 2.2140763106686245e+00 2.3817770052187131e+00 1.3872984182687293e+00 + 2.3856010121780873e+00 2.6575844923484797e+00 1.8995073171911019e+00 + 2.4875819841011770e+00 2.8608018250332790e+00 2.4646974167045341e+00 + 2.5492011513902044e+00 2.9909453708950653e+00 3.0686448943673392e+00 + 2.6103786436067162e+00 3.0397060664470388e+00 3.7074209900370141e+00 + 2.7134602066821252e+00 2.9861645079779016e+00 4.3709596996600890e+00 + 2.8927775823230983e+00 2.8030346629180141e+00 5.0282220867569674e+00 + 3.1680654559583195e+00 2.4713609647881833e+00 5.6237646345262302e+00 + 3.5540617363306075e+00 1.9828550162996330e+00 6.0922679765966317e+00 + 4.0529879366724035e+00 1.3694452991431723e+00 6.3424548239021767e+00 + 4.6472030836243654e+00 7.5882730271676735e-01 6.3061397339100251e+00 + 5.3052122645588788e+00 3.3161216456607079e-01 6.0222246803242454e+00 + 5.9695354773467777e+00 1.3643112253464285e-01 5.6256496158104961e+00 + 6.6049782923356517e+00 -1.6291986326875296e-01 5.3569451017268124e+00 + id 14600 + loc 3.0991283059120178e-01 5.3692191839218140e-01 401 + blend 0.0000000000000000e+00 + interp 4.0346724912025655e-01:2.9324285080301016e-01:3.3537427719365698e-01:4.0346321444776539e-01:1.0143705863879235e+00:3.8405542715117452e-01:1.6724858324513818e+00:2.8255276717565331e-01:2.1123548322457850e+00:2.9989907604865063e-01:2.9757807189863619e+00:3.1026879634411969e-01:3.5906001841670303e+00 + CVs 20 + -5.4108003476874542e-02 2.6498217742112001e-01 -3.3223884032011008e-01 + -9.7994701906860132e-02 5.4349178854768099e-01 -6.3101418222700123e-01 + -1.4416208142377288e-01 8.2818921969510217e-01 -9.2348049572910162e-01 + -2.0402546087459189e-01 1.1134658763507959e+00 -1.2265595608235906e+00 + -2.9042521978667085e-01 1.3922349315429288e+00 -1.5484275422206801e+00 + -4.2007021284544022e-01 1.6533815797484472e+00 -1.8902104598306577e+00 + -6.0888454561951466e-01 1.8830702025365806e+00 -2.2409357991319303e+00 + -8.6311354322888034e-01 2.0687455611295915e+00 -2.5806986316479468e+00 + -1.1750972408999587e+00 2.2029572694248616e+00 -2.8891809338079293e+00 + -1.5274500585627990e+00 2.2839405387286167e+00 -3.1528520215212104e+00 + -1.9012459757937596e+00 2.3136649696821774e+00 -3.3680525602803919e+00 + -2.2824326800389763e+00 2.2945814477132593e+00 -3.5397152515690160e+00 + -2.6587025776141653e+00 2.2289590552210981e+00 -3.6755277557474630e+00 + -3.0069493471232049e+00 2.1244833486174857e+00 -3.7815289186887164e+00 + -3.2873263744268293e+00 2.0007559712087479e+00 -3.8704364799939310e+00 + -3.4758685416023170e+00 1.8748554485933240e+00 -3.9749350927448948e+00 + -3.5898889770361833e+00 1.7323501294830388e+00 -4.1310746946997368e+00 + -3.6959692123995511e+00 1.5284232806261013e+00 -4.3343063558126245e+00 + -3.8032167731585678e+00 1.4421711752586370e+00 -4.1815671435492563e+00 + id 14601 + loc 2.5184229016304016e-01 5.7488518953323364e-01 399 + blend 0.0000000000000000e+00 + interp 3.3072048739474669e-01:2.7551244392613489e-01:7.2276750339615958e-01:3.1689203131737975e-01:1.1280959476480519e+00:2.6942634978853375e-01:1.9335669798507769e+00:2.8714272540671443e-01:2.9896033883144919e+00:3.3071718018987273e-01:3.8818143369351157e+00 + CVs 20 + -2.2491326928181116e-01 3.2334440757000371e-01 -2.8246240925395871e-01 + -4.3339605252224983e-01 6.4122451835708860e-01 -5.3443972349858726e-01 + -6.3829419557752287e-01 9.5485264564658379e-01 -7.9119957061565316e-01 + -8.4815041325794049e-01 1.2635102492347410e+00 -1.0678889265564706e+00 + -1.0693960867150958e+00 1.5651943374061683e+00 -1.3665493953436221e+00 + -1.3124748284714600e+00 1.8534026271003412e+00 -1.6840950635160410e+00 + -1.5971187477785167e+00 2.1179793355318028e+00 -2.0123441263395443e+00 + -1.9453344558441210e+00 2.3305253023454431e+00 -2.3379162983143642e+00 + -2.3665712007621291e+00 2.4241687097057021e+00 -2.6324648405398108e+00 + -2.8248144779238844e+00 2.3364729342913995e+00 -2.8565818664085452e+00 + -3.2474279658446195e+00 2.0702460378118115e+00 -2.9936352418048253e+00 + -3.5751067192248107e+00 1.6737957382781279e+00 -3.0630053488255915e+00 + -3.7919132864809248e+00 1.2020002068406572e+00 -3.1149637943162349e+00 + -3.9262293196978586e+00 6.8442337195661584e-01 -3.2024972804361882e+00 + -4.0473962769876453e+00 1.1840411422640440e-01 -3.3673226396214608e+00 + -4.2734488426281336e+00 -4.9483626510484757e-01 -3.6424746922382880e+00 + -4.7585317992679776e+00 -1.0577872339073364e+00 -4.0632192065796007e+00 + -5.3653136294855717e+00 -1.2805270664100101e+00 -4.5504041333372394e+00 + -5.5515985974318660e+00 -1.2146446889181717e+00 -4.8675271965152556e+00 + id 14602 + loc 5.6918901205062866e-01 3.5904985666275024e-01 404 + blend 0.0000000000000000e+00 + interp 4.7338277846868876e-01:4.5161488191232368e-01:5.3633126928570451e-01:4.3350103853644062e-01:1.0188147486172601e+00:2.5132980533418431e-01:1.4562692959358421e+00:4.0104978921465806e-01:1.9957806503065576e+00:4.2095657306980744e-01:2.4135867964018809e+00:4.2951437758534561e-01:2.9786718324819867e+00:4.7337804464090411e-01:3.3596227915127641e+00:3.9788414651161691e-01:3.9889520031742984e+00 + CVs 20 + -8.1540321861090698e-02 2.4492816967104478e-01 1.5027212676702437e-01 + -1.5438015438697755e-01 4.7401321773277999e-01 3.0484649690932264e-01 + -2.4393240787546241e-01 7.0237874949675838e-01 4.7473118464530151e-01 + -3.5682715576212071e-01 9.3663362784632520e-01 6.6663483975576709e-01 + -4.8690570608977390e-01 1.1736173454539527e+00 8.8120604409885495e-01 + -6.2174711163541307e-01 1.4070060469622963e+00 1.1211564122500357e+00 + -7.4298309022633680e-01 1.6280208833892307e+00 1.3890175836091956e+00 + -8.3134661952867273e-01 1.8272737039485674e+00 1.6829290550911589e+00 + -8.6812082432914606e-01 1.9953817489717240e+00 1.9955946579764059e+00 + -8.3856219570865720e-01 2.1227365776205489e+00 2.3166848040672603e+00 + -7.3628401485432304e-01 2.1986050570131241e+00 2.6340288616918519e+00 + -5.6359356561231344e-01 2.2212127997509952e+00 2.9249543124046413e+00 + -3.4718121144411263e-01 2.2022420269844898e+00 3.1767570335182089e+00 + -1.1128183190023733e-01 2.1679240781664424e+00 3.3821583703234808e+00 + 1.3760806657348290e-01 2.1472600232888714e+00 3.5307155125096155e+00 + 4.0280290745875225e-01 2.1371471084964155e+00 3.6183051658421888e+00 + 6.8690974212125733e-01 2.0897519085656162e+00 3.6607905592354895e+00 + 9.7753342459932990e-01 1.9752337881108564e+00 3.6775262915598939e+00 + 1.1289326152981927e+00 1.9406453584289194e+00 3.8606547472716146e+00 + id 14603 + loc 8.5685014724731445e-02 7.8638538718223572e-02 393 + blend 0.0000000000000000e+00 + interp 2.7160601494940256e-01:2.4875871280361678e-01:3.1142001428818666e-01:2.5291154463143400e-01:1.3559759301220409e+00:2.7160329888925311e-01:2.3292769655169403e+00:2.4994672371300894e-01:3.2388219925076438e+00 + CVs 20 + -6.9055285547556994e-02 4.3837420621165790e-01 2.8736126072274709e-01 + -1.7748826327570530e-01 8.8332593865224307e-01 5.5700339030869139e-01 + -3.3199816820384948e-01 1.3338920889478849e+00 7.8872296073480319e-01 + -5.5415012661558316e-01 1.7818906247266624e+00 9.8261214597230073e-01 + -8.6204010440853696e-01 2.1980236897015453e+00 1.1437353237694308e+00 + -1.2530204616983709e+00 2.5465189817959617e+00 1.2816592004033112e+00 + -1.7041038292484827e+00 2.7985056949541818e+00 1.4087486683743138e+00 + -2.1776517922585019e+00 2.9376091831948297e+00 1.5403979983263723e+00 + -2.6369462768032075e+00 2.9700845581976747e+00 1.6946901977410982e+00 + -3.0548217815898924e+00 2.9219364562235937e+00 1.8883610014388412e+00 + -3.4052214315907174e+00 2.8196061221318178e+00 2.1270070187957417e+00 + -3.6759397671271015e+00 2.6781082873601250e+00 2.3951923704136777e+00 + -3.8848110957391788e+00 2.5016511080689998e+00 2.6766319441477386e+00 + -4.0664231779717088e+00 2.2884871642702409e+00 2.9852017802004527e+00 + -4.2432158660394883e+00 2.0313089053988413e+00 3.3472638935914332e+00 + -4.3969157712411180e+00 1.7214552370379177e+00 3.7456497165387539e+00 + -4.4550013563758348e+00 1.3432594378542519e+00 4.0705466762342279e+00 + -4.3519809488880536e+00 8.9244576272100740e-01 4.1888371979842418e+00 + -4.3877485257719853e+00 3.3908218002566115e-01 4.5074270132897123e+00 + id 14604 + loc 9.1195660829544067e-01 6.7016494274139404e-01 401 + blend 0.0000000000000000e+00 + interp 4.0456126052583702e-01:3.7321777802087719e-01:1.2166490615504455e-01:2.8432918059498685e-01:9.1422971676617670e-01:3.1665840776700976e-01:1.5789244579275881e+00:4.0455721491323177e-01:2.0184115814210211e+00:2.8650997252995414e-01:2.6460300533752772e+00:2.6751315965155636e-01:3.5357714560139812e+00 + CVs 20 + -1.4057077897531034e-01 3.0235497515489768e-01 -2.3844708192538094e-01 + -2.5785686983970657e-01 6.0453614942760170e-01 -4.9078616389195556e-01 + -3.5397860168464890e-01 8.9448386006979241e-01 -7.8550968296926615e-01 + -4.3128538259049198e-01 1.1512726554763173e+00 -1.1307388182103550e+00 + -4.9370027499894498e-01 1.3557806568716368e+00 -1.5187307172555236e+00 + -5.5664905808928511e-01 1.5014271085578836e+00 -1.9368585409817041e+00 + -6.4732785742441179e-01 1.5955785379729326e+00 -2.3679262499628742e+00 + -7.9278966084093450e-01 1.6497231983224510e+00 -2.7903230758446047e+00 + -1.0099431790068498e+00 1.6730562023099129e+00 -3.1809440233549306e+00 + -1.3042449331074901e+00 1.6743349289395295e+00 -3.5213993113003514e+00 + -1.6696974560748070e+00 1.6633286876196069e+00 -3.7994169753268476e+00 + -2.0950133007946308e+00 1.6442509409840893e+00 -4.0125754523616255e+00 + -2.5668237088026329e+00 1.6075093206696507e+00 -4.1688792050205850e+00 + -3.0647986389799899e+00 1.5482767841258356e+00 -4.2768025232470732e+00 + -3.5711815715892410e+00 1.4733716314682490e+00 -4.3379004687328537e+00 + -4.0944921474981237e+00 1.3673729512169395e+00 -4.3471868408238317e+00 + -4.6652124651674525e+00 1.1891606691568333e+00 -4.3183890173531481e+00 + -5.2742309893544803e+00 9.3962098695000151e-01 -4.3308649522671523e+00 + -5.7047659693771768e+00 8.0997713292649465e-01 -4.4117529093924226e+00 + id 14605 + loc 9.3605840206146240e-01 2.2080378234386444e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2984505896780661e-01:4.1021604086940927e-01:1.7786236400859057e-01:2.9069766691037102e-01:1.2366482383089559e+00:4.2984076051721698e-01:2.0218219062482850e+00:3.9281538611857092e-01:2.7349755346382825e+00:3.6561973639858053e-01:3.4047019746406848e+00 + CVs 20 + -8.8895770926659762e-02 2.7340578807541216e-01 5.1759403656559733e-02 + -1.8145288215073613e-01 5.0015709427947752e-01 1.3230007741941066e-01 + -2.7405784318261439e-01 6.8937426492658238e-01 2.2064693383604200e-01 + -3.5788774902473819e-01 8.3890800173551550e-01 2.9340290240603861e-01 + -4.2270199347212278e-01 9.5232716625295522e-01 3.4004875560820946e-01 + -4.5954925609173725e-01 1.0447110209231034e+00 3.5338241015005512e-01 + -4.7136052380068616e-01 1.1388424848590630e+00 3.4258408061015388e-01 + -4.7709310034194546e-01 1.2477267720484959e+00 3.3158840333921602e-01 + -5.0503471277933554e-01 1.3647099981352353e+00 3.3695304937919612e-01 + -5.8686073351983015e-01 1.4667581403724610e+00 3.5731520894869034e-01 + -7.3857750283957513e-01 1.5317920322361767e+00 3.7994283690258568e-01 + -9.5583387472763492e-01 1.5541531852956305e+00 3.9506580167242739e-01 + -1.2352648532956800e+00 1.5309780056035902e+00 4.0051500038808496e-01 + -1.5836182643954075e+00 1.4342089532630045e+00 4.0411862008759425e-01 + -1.9901826319173561e+00 1.2000069995088056e+00 4.3056102874857233e-01 + -2.3429176726723862e+00 7.2683532295921038e-01 5.2066651564911060e-01 + -2.4085196584234296e+00 -2.1125516334554284e-02 7.1551526868510973e-01 + -2.0468305334312222e+00 -8.3426348173431886e-01 1.0640935486129901e+00 + -1.8587201283049084e+00 -1.1412907928533551e+00 1.2459931473251014e+00 + id 14606 + loc 7.1587795019149780e-01 8.7923789024353027e-01 404 + blend 0.0000000000000000e+00 + interp 4.7205810089853328e-01:2.9262852349666818e-01:9.2176478246685789e-01:3.6383199668825683e-01:1.3251947546206322e+00:2.8223710910328687e-01:2.0060454405523149e+00:4.7205338031752431e-01:2.5463992875278234e+00:3.4499534650882863e-01:3.0624155049535409e+00:3.8380185176568610e-01:3.9968130100682746e+00 + CVs 20 + -3.1212895218772498e-02 6.4049738490094085e-02 2.4509853340641794e-02 + -8.3397788773918513e-02 1.1418327106219724e-01 5.5117430532794727e-02 + -1.5310539781954421e-01 1.7672881534678217e-01 9.5992031983122200e-02 + -2.3224309700984092e-01 2.6147758661463477e-01 1.3780272705958679e-01 + -3.1297904578164959e-01 3.7698759537734905e-01 1.8151124364095794e-01 + -3.8419544126660721e-01 5.2681855444590941e-01 2.2646083120930119e-01 + -4.3558221712951917e-01 7.0542480622167647e-01 2.6981661125653683e-01 + -4.6343333945298898e-01 8.9915914005830899e-01 3.0784524210903796e-01 + -4.6769202797039244e-01 1.0992887877120849e+00 3.4220632581043214e-01 + -4.3925422785218404e-01 1.3097855904147560e+00 3.8606629649393054e-01 + -3.6303213949555202e-01 1.5312087429855594e+00 4.5077298716201053e-01 + -2.3995065551525430e-01 1.7462439548020634e+00 5.2590264349491123e-01 + -9.0769498680464689e-02 1.9346696289944301e+00 5.9187183491949713e-01 + 6.9257238086053885e-02 2.0902754421570728e+00 6.4263741798116958e-01 + 2.4346157427256954e-01 2.2159235567093472e+00 6.8409544290346613e-01 + 4.3949208500689474e-01 2.3127852226104326e+00 7.1907003257793911e-01 + 6.5331104130664863e-01 2.3780277145482454e+00 7.4029863826304265e-01 + 8.6971467144189396e-01 2.4076976141270876e+00 7.4069459568726459e-01 + 9.8029946102531329e-01 2.3754709806314396e+00 7.4000654642989461e-01 + id 14607 + loc 5.4777938127517700e-01 3.4894844889640808e-01 399 + blend 0.0000000000000000e+00 + interp 4.2866538251822678e-01:4.2866109586440160e-01:6.0078064355196048e-01:2.6429785849124549e-01:1.0218092159488010e+00:3.5391319602521748e-01:1.9863520743864682e+00:2.7056216295042684e-01:2.9098477909780298e+00:2.7843004924531889e-01:3.8335246204988485e+00 + CVs 20 + 1.9050072168737422e-01 3.0260853876607607e-01 1.8567373011413724e-01 + 3.8681871430039849e-01 5.8922866179432698e-01 3.8155104806883117e-01 + 5.7593293942885748e-01 8.5227584892776065e-01 6.1171324811322259e-01 + 7.5785986273735551e-01 1.0826348036031030e+00 8.7173561111837705e-01 + 9.4123423930317185e-01 1.2771156812018898e+00 1.1490251441518149e+00 + 1.1314709413906310e+00 1.4333351904733460e+00 1.4370609658712112e+00 + 1.3278203138076941e+00 1.5442449329377657e+00 1.7306283896511405e+00 + 1.5243436266062129e+00 1.5981323318520233e+00 2.0181377154959486e+00 + 1.7107507315724875e+00 1.5838031204045353e+00 2.2804902223825834e+00 + 1.8710767259368846e+00 1.4979512846016891e+00 2.4932902969479227e+00 + 1.9853472394907485e+00 1.3532464716167862e+00 2.6343309109305881e+00 + 2.0505085720515517e+00 1.1708767353559435e+00 2.7138874394996586e+00 + 2.0939022848112749e+00 9.4580920545481040e-01 2.7774485834759952e+00 + 2.1536713913709642e+00 6.4885811090239753e-01 2.8677884119365076e+00 + 2.2744414454046735e+00 2.5306143042854146e-01 3.0343257747753665e+00 + 2.4758923172598477e+00 -2.1654140300631919e-01 3.3430664612870231e+00 + 2.7056995906918835e+00 -6.6983733932209855e-01 3.8667131413021218e+00 + 2.8170619293384389e+00 -9.7365773920687160e-01 4.5877435022184727e+00 + 2.7752592566112679e+00 -1.1177573948437463e+00 4.9329050326903667e+00 + id 14608 + loc 1.4967325329780579e-01 6.0550063848495483e-01 393 + blend 0.0000000000000000e+00 + interp 4.3580585341200279e-01:2.8911119277420722e-01:1.0074833402406047e+00:2.8307931209533133e-01:1.7348040077400539e+00:2.6550544863802555e-01:2.2357740260392975e+00:4.3580149535346868e-01:3.0043584495946498e+00:2.8029088675895608e-01:3.9939491812208869e+00 + CVs 20 + -3.5119886178962789e-01 3.5409074757031761e-01 -1.1699102221792443e-01 + -6.6040037253344874e-01 6.9443065504829782e-01 -2.6508327341828175e-01 + -9.3905155159186471e-01 1.0322657283466798e+00 -4.3724197734185977e-01 + -1.1996418103375208e+00 1.3689209347383779e+00 -6.2618613044596327e-01 + -1.4600801480726635e+00 1.7017206480057647e+00 -8.2392190266435972e-01 + -1.7403949174277376e+00 2.0281352442269491e+00 -1.0176117721358704e+00 + -2.0568316216075608e+00 2.3427825769269983e+00 -1.1897989346045272e+00 + -2.4236289852887483e+00 2.6307055356973401e+00 -1.3248220999865292e+00 + -2.8524485080827757e+00 2.8620051302492961e+00 -1.4134096336944015e+00 + -3.3443201608715727e+00 3.0144874216714692e+00 -1.4591799120728846e+00 + -3.8950790621980853e+00 3.0997091545484756e+00 -1.4918949911348063e+00 + -4.4988653875575730e+00 3.1356174616378540e+00 -1.5517377612305210e+00 + -5.1497209698299349e+00 3.1088454083035990e+00 -1.6445303482716775e+00 + -5.8389611208415308e+00 2.9881442058348622e+00 -1.7574056366888171e+00 + -6.5353176575749501e+00 2.7638868325777342e+00 -1.8903510489140485e+00 + -7.1819598562129929e+00 2.4882052799768575e+00 -2.0125116529953480e+00 + -7.7505752411733715e+00 2.2510755989751843e+00 -2.0583104583474974e+00 + -8.2849127044131503e+00 2.0514798868369777e+00 -2.0229761931560004e+00 + -8.8755995045970355e+00 1.7676035175543610e+00 -1.9675092967153895e+00 + id 14609 + loc 4.3791472911834717e-01 6.2021625041961670e-01 401 + blend 0.0000000000000000e+00 + interp 3.1193431796582016e-01:2.8474062677486695e-01:1.4260927249132860e-01:3.1193119862264052e-01:9.8019126508870535e-01:2.9047251542757024e-01:1.5793969272443755e+00:2.8465837517620041e-01:2.0633567605670144e+00:2.8860856527171502e-01:3.0936358857798951e+00 + CVs 20 + -8.3121262146066410e-02 2.9918937029419046e-01 -2.9971240083123341e-01 + -1.3780869009636426e-01 6.0620039300899509e-01 -6.1130332779157326e-01 + -1.8534948131398721e-01 9.0361651521101916e-01 -9.3068079209257504e-01 + -2.3218673448570298e-01 1.1703049245237693e+00 -1.2581752666344297e+00 + -2.8456532340888990e-01 1.3970988006225511e+00 -1.6029186470458201e+00 + -3.6318005165515799e-01 1.5852166041209741e+00 -1.9744654918282303e+00 + -4.9597539482456221e-01 1.7327099685531411e+00 -2.3682165061080158e+00 + -7.0122308321375448e-01 1.8294782744302391e+00 -2.7629339307248464e+00 + -9.7914532628358220e-01 1.8622489747317625e+00 -3.1314584710589299e+00 + -1.3140628646424388e+00 1.8219921218915744e+00 -3.4503804238720686e+00 + -1.6783155314145819e+00 1.7092620276404937e+00 -3.7056425707072917e+00 + -2.0365768762204892e+00 1.5337354229417342e+00 -3.8951058259386544e+00 + -2.3633992629147071e+00 1.3061693840090545e+00 -4.0338471385383041e+00 + -2.6591499889141916e+00 1.0264304120227867e+00 -4.1475214565037666e+00 + -2.9348390197748939e+00 6.9466391601594912e-01 -4.2476135538128332e+00 + -3.1925006710647299e+00 3.4528255200578900e-01 -4.3319244859718662e+00 + -3.4215971804726331e+00 3.9034609582804913e-02 -4.4244155677732708e+00 + -3.6255527123704265e+00 -1.8572925983829425e-01 -4.5669489502346039e+00 + -3.8987997504871048e+00 -3.9305120245334246e-01 -4.8393554435770740e+00 + id 14610 + loc 1.9334864616394043e-01 5.1138007640838623e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0630840311746839e-01:4.7192662399516516e-01:3.2460220493536474e-03:4.1768742477911391e-01:8.2295346267463243e-01:3.8049296748354478e-01:1.4755076956539548e+00:5.0630334003343724e-01:2.0006931045081209e+00:3.9098990021320446e-01:2.5752037140556676e+00:3.4408202578792679e-01:3.2036019743567401e+00 + CVs 20 + 3.0210615255843440e-02 4.6590003874586416e-01 2.1515087552475071e-01 + 1.1172483704278094e-01 8.3423307972098781e-01 3.4157225335801433e-01 + 2.1500383601809336e-01 1.1566520705392473e+00 4.3555769353379259e-01 + 3.3017867300734960e-01 1.4476452882506776e+00 5.1764368571910202e-01 + 4.5736032259348663e-01 1.7045679365591384e+00 5.8674568501813928e-01 + 5.9471961335279322e-01 1.9287159532663809e+00 6.4146755052938664e-01 + 7.4264664085222232e-01 2.1287062387466369e+00 6.7547961665246059e-01 + 9.0606318693832399e-01 2.3155203119781800e+00 6.7379368528153682e-01 + 1.0881671264725603e+00 2.4871947082191479e+00 6.1628664466140270e-01 + 1.2833765516657478e+00 2.6236456090049494e+00 4.9354190372971241e-01 + 1.4817042871417916e+00 2.7048283973890808e+00 3.1617035116361092e-01 + 1.6759048955312110e+00 2.7244088102025144e+00 1.0345214194885410e-01 + 1.8616594473340957e+00 2.6875741568200251e+00 -1.2747524176962821e-01 + 2.0359177315746959e+00 2.6059405686467212e+00 -3.6575433530715118e-01 + 2.1990640476960048e+00 2.4897364973044489e+00 -6.1910715421326068e-01 + 2.3545676370034982e+00 2.3241900072300505e+00 -9.2235412686495466e-01 + 2.4960245759120698e+00 2.0367932571911500e+00 -1.2532287355344192e+00 + 2.6009835870828075e+00 1.6323264514185447e+00 -1.4321987305795947e+00 + 2.6590694430544768e+00 1.2921629461398236e+00 -1.3471120359493329e+00 + id 14611 + loc 2.9774820804595947e-01 6.1911672353744507e-01 404 + blend 0.0000000000000000e+00 + interp 4.5763882930844130e-01:3.1470797785461913e-01:5.6463684919676482e-01:4.0624413869950343e-01:1.0052076766598994e+00:4.0139154283659023e-01:1.5180746851822786e+00:3.9139699416471985e-01:1.9969779406237880e+00:4.5763425292014825e-01:2.7994759015507817e+00:4.2844831184871102e-01:3.1926740015965906e+00:3.9754526190204753e-01:3.9835350204422144e+00 + CVs 20 + -2.1766547132251058e-02 5.5420068579912246e-02 -6.1929171298355998e-02 + 1.5935041304243835e-02 1.2249876596984036e-01 -1.1175449076492555e-01 + 2.6431978233748793e-02 2.0906686028720387e-01 -1.6966779242848165e-01 + 2.1238899647627429e-02 3.0231937279263965e-01 -2.3372321445323946e-01 + 7.7074799654485715e-03 3.9602873835568586e-01 -3.0658575377930575e-01 + -1.1944201385149789e-02 4.8838457528144374e-01 -3.9146728893082405e-01 + -3.8070298130625846e-02 5.7834540739022777e-01 -4.9082547324130865e-01 + -7.2375294156596381e-02 6.6344231260440434e-01 -6.0690119168353607e-01 + -1.1661227302893717e-01 7.3964662604052989e-01 -7.4099226303560939e-01 + -1.7189285785078690e-01 8.0252399204877189e-01 -8.9208159984331337e-01 + -2.3848045875369261e-01 8.4858292773909438e-01 -1.0561667664636094e+00 + -3.1551659591302561e-01 8.7653538780123363e-01 -1.2264679793193698e+00 + -4.0017849755603779e-01 8.8648044748209998e-01 -1.3952825963258011e+00 + -4.8675301340631089e-01 8.7500887861354892e-01 -1.5571006471223066e+00 + -5.6860358302050407e-01 8.3824309499630556e-01 -1.7071167551798134e+00 + -6.4148070239185906e-01 7.7521903901093370e-01 -1.8401659840149831e+00 + -7.0989655913443217e-01 6.9144327507403391e-01 -1.9493825331214700e+00 + -7.8728370273165804e-01 5.9366686711080141e-01 -2.0273984964124674e+00 + -9.2452053732949968e-01 5.3930179577916926e-01 -2.0532978185058957e+00 + id 14612 + loc 5.7971608638763428e-01 9.9283955991268158e-02 399 + blend 0.0000000000000000e+00 + interp 4.5324018790338405e-01:3.6222052220667478e-01:4.8223120893684646e-01:2.7707122431072206e-01:1.0201951085490273e+00:2.7896699892284466e-01:1.8869932030833807e+00:2.7133602333198847e-01:2.3322095938801688e+00:4.2616548395841003e-01:2.8798038177977019e+00:4.5323565550150502e-01:3.0663036059772448e+00:2.7103298120455610e-01:3.9837066699763217e+00 + CVs 20 + 1.0859378737116268e-01 2.3188402935655661e-01 2.5483278701643308e-01 + 1.9273191622654379e-01 4.4530209537748539e-01 4.8418173933919484e-01 + 2.6559009827213537e-01 6.4798822862437899e-01 7.0825294735438726e-01 + 3.4384716362843892e-01 8.5065041607279845e-01 9.4693867278055965e-01 + 4.4473283535776498e-01 1.0575893668396201e+00 1.1990948768917120e+00 + 5.8281820222029190e-01 1.2662568971763046e+00 1.4514735608996829e+00 + 7.6499067022223111e-01 1.4725457859297724e+00 1.6958679500240375e+00 + 9.9356968526806932e-01 1.6709673654027783e+00 1.9323190366890981e+00 + 1.2707426432392668e+00 1.8499490182591387e+00 2.1652762683945705e+00 + 1.5973282931651742e+00 1.9916328140343689e+00 2.3993254189528512e+00 + 1.9671386066207290e+00 2.0685987906244732e+00 2.6327539330176379e+00 + 2.3628270885088578e+00 2.0481536260576423e+00 2.8450389268967671e+00 + 2.7613081256526342e+00 1.9206628302913558e+00 3.0011563569668480e+00 + 3.1462721137982781e+00 1.6992651637414693e+00 3.0807778571141649e+00 + 3.5273940935132075e+00 1.3916282461341389e+00 3.1018996791164808e+00 + 3.9581751091794191e+00 9.9498431939399046e-01 3.1448118755847791e+00 + 4.4912849412250164e+00 5.1556396527089254e-01 3.3671185640888877e+00 + 5.0020636744005786e+00 8.7935895406343390e-02 3.8858541515694345e+00 + 5.1892900754245090e+00 -2.8580340326968434e-02 4.2137355306292905e+00 + id 14613 + loc 5.2324408292770386e-01 1.6423407196998596e-01 393 + blend 0.0000000000000000e+00 + interp 3.5530020248606503e-01:2.5873320488543744e-01:1.6095236352103737e-01:3.5463065481780653e-01:1.0297960754994560e+00:3.5529664948404016e-01:1.6418594348249331e+00:2.6520919692397910e-01:2.0274863871786990e+00:3.0440604251219600e-01:2.8094209379441759e+00:2.7000783634033837e-01:3.2153334081892559e+00 + CVs 20 + 4.6244684703027295e-01 3.7497944601785849e-01 7.5018483482303472e-02 + 9.2282546891384776e-01 7.6545882949480126e-01 1.5092909039899499e-01 + 1.3694486943247315e+00 1.1828562119601855e+00 2.5114075524969087e-01 + 1.7949766927449380e+00 1.5960875419306053e+00 4.2242858049709364e-01 + 2.1876875557488398e+00 1.9615011420873913e+00 6.9443705837065250e-01 + 2.5326884461555212e+00 2.2657959297802321e+00 1.0528757366630390e+00 + 2.8169752278431579e+00 2.5095768339281053e+00 1.4498791924033989e+00 + 3.0381179034431200e+00 2.6944595090244050e+00 1.8243070111851389e+00 + 3.1995924369293149e+00 2.8342875460747918e+00 2.1384809866211079e+00 + 3.3023139505091228e+00 2.9546798313894183e+00 2.3933265826123824e+00 + 3.3525611252446552e+00 3.0803237025247898e+00 2.6234593119989533e+00 + 3.3738901992544141e+00 3.2168701869440666e+00 2.8806014121968628e+00 + 3.3904745778187828e+00 3.3464938690590160e+00 3.2021146252821069e+00 + 3.4033735806194532e+00 3.4401750251599008e+00 3.6089029312939327e+00 + 3.4044870789526396e+00 3.4417959816010599e+00 4.1092526785137196e+00 + 3.3838516983069704e+00 3.2533551419295690e+00 4.6421348642674758e+00 + 3.3483315190535432e+00 2.8200948468137526e+00 5.0733725952893360e+00 + 3.3874039921087977e+00 2.2203605972444929e+00 5.2690000976140254e+00 + 3.6332526189455865e+00 1.7430416635921975e+00 5.0378611001614688e+00 + id 14614 + loc 1.6184540092945099e-01 4.7262451052665710e-01 401 + blend 0.0000000000000000e+00 + interp 4.7673577509809245e-01:4.7673100774034149e-01:6.2364452369977297e-01:4.1693370613249331e-01:1.0055264125395971e+00:2.9314261185359142e-01:1.6687264127626515e+00:3.3052487667285907e-01:2.5306617199308605e+00:2.9587963250298316e-01:3.0480653228862633e+00:2.9643232846862227e-01:3.9999580258990926e+00 + CVs 20 + -2.7112556955059025e-01 2.2630822707469531e-01 1.1508330122664787e-01 + -5.0470717584470570e-01 4.5198931718536034e-01 2.2744084661353620e-01 + -7.1771743355335482e-01 6.7161265130527370e-01 3.4815854515535682e-01 + -9.2112636335670017e-01 8.8079649663994197e-01 4.8346295490730440e-01 + -1.1185451247080480e+00 1.0747224570008891e+00 6.3185151557604602e-01 + -1.3107326397854746e+00 1.2479314000346859e+00 7.9111942135870483e-01 + -1.4962357778715487e+00 1.3976343266004929e+00 9.6372060853079011e-01 + -1.6737956843700850e+00 1.5234943178494147e+00 1.1588674002657633e+00 + -1.8417799448857788e+00 1.6236335191083697e+00 1.3871228517465406e+00 + -1.9971190121108851e+00 1.6935763023439787e+00 1.6575411965894373e+00 + -2.1369971107069321e+00 1.7276002231110754e+00 1.9733373368086748e+00 + -2.2610357635593994e+00 1.7218347892555053e+00 2.3248423163845988e+00 + -2.3692859594667697e+00 1.6751263373444001e+00 2.6886874396268894e+00 + -2.4588724721744373e+00 1.5942917661980189e+00 3.0253486380298824e+00 + -2.5305055526632154e+00 1.5097693989353025e+00 3.2830686579247832e+00 + -2.6029281425664426e+00 1.4601021576985800e+00 3.4323896115344268e+00 + -2.7128678548870875e+00 1.4477551855786266e+00 3.4859538688748128e+00 + -2.8612435671053560e+00 1.4305949049821014e+00 3.5067057079832122e+00 + -2.5990227788393074e+00 1.3663472893565243e+00 3.6881282973815472e+00 + id 14615 + loc 8.8566750288009644e-02 2.6791346073150635e-01 404 + blend 0.0000000000000000e+00 + interp 5.0045055161491925e-01:3.1005036499413502e-01:9.6685114204474087e-01:3.8573091439199059e-01:1.9989601926655882e+00:5.0044554710940314e-01:2.7621946911459543e+00:3.8980132202401047e-01:2.9883783854809138e+00:4.1989700702966071e-01:3.4464277720204359e+00:3.0727959989050518e-01:3.9979574219521998e+00 + CVs 20 + -1.1843838215450730e-01 2.7415158681604623e-01 -1.5791943415277590e-01 + -2.1687608240801254e-01 5.5536306503496125e-01 -3.3431478516571905e-01 + -3.3445757412736221e-01 8.4715381209222329e-01 -5.0326217633742842e-01 + -4.7077308200939938e-01 1.1454069636579265e+00 -6.5632653405888897e-01 + -6.3732786604153113e-01 1.4519242456881729e+00 -7.7838178116370249e-01 + -8.4344812363922128e-01 1.7656453448643796e+00 -8.5130528194044464e-01 + -1.0950234959717657e+00 2.0814216394302352e+00 -8.5369771241042192e-01 + -1.3914848051977662e+00 2.3883692520854365e+00 -7.6166806991859759e-01 + -1.7154660497214764e+00 2.6685459010242267e+00 -5.6142029730509568e-01 + -2.0317992519726151e+00 2.9039612806232760e+00 -2.6663083066674820e-01 + -2.3089310996733925e+00 3.0865781833438222e+00 8.9949184091404399e-02 + -2.5323385410479071e+00 3.2166450721059134e+00 4.8208060885769943e-01 + -2.6956091144143750e+00 3.2977810785977364e+00 8.9271070430598765e-01 + -2.7917780152792337e+00 3.3386898383971717e+00 1.3043211872459091e+00 + -2.8138511937544317e+00 3.3517850863964371e+00 1.7036009109535795e+00 + -2.7572540272023423e+00 3.3427274780089400e+00 2.0936587566751461e+00 + -2.6147942915131193e+00 3.3069951179268875e+00 2.4875143366899604e+00 + -2.3864746370884236e+00 3.2428631539382158e+00 2.8719239002064905e+00 + -2.4005147918870291e+00 3.2246923840541215e+00 2.9897997725620153e+00 + id 14616 + loc 1.5485183894634247e-01 6.0445272922515869e-01 399 + blend 0.0000000000000000e+00 + interp 4.3025869264663830e-01:3.5472705057209614e-01:3.2221905709320975e-01:4.1262111128090478e-01:9.2882365846821391e-01:2.7645067823520447e-01:1.4539301129670557e+00:4.3025439005971183e-01:1.9729925428860664e+00:2.6992012351277123e-01:2.7019776874387320e+00:3.1689203131737975e-01:3.1268065318245677e+00:2.6572198300757649e-01:3.9452964390831720e+00 + CVs 20 + -2.2171515032725522e-01 3.3336801937277433e-01 -2.5989835739190104e-01 + -3.9958747865470562e-01 6.7887211644831413e-01 -5.2323159381252238e-01 + -5.3997014649607711e-01 1.0360035505381398e+00 -8.1399594167280753e-01 + -6.5190035332818430e-01 1.4058143289176033e+00 -1.1409823106835473e+00 + -7.5584218041439954e-01 1.7938709799693977e+00 -1.5075391647581748e+00 + -8.9682178928237044e-01 2.2050585574459682e+00 -1.9200460754947850e+00 + -1.1516185864643058e+00 2.6317793960491787e+00 -2.3828857775339554e+00 + -1.6189988817107162e+00 3.0165016245800640e+00 -2.8871306698211132e+00 + -2.3229584116707627e+00 3.2154613049438594e+00 -3.3608377239138258e+00 + -3.1187198817060082e+00 3.1382362089346074e+00 -3.7049329061015341e+00 + -3.8408979820752829e+00 2.8536803868442915e+00 -3.9040277482139656e+00 + -4.3934238691865994e+00 2.5026987252589170e+00 -3.9983735075133060e+00 + -4.7492646692937148e+00 2.2021047807184226e+00 -4.0279185405201039e+00 + -4.9075393962409128e+00 1.9993565921859617e+00 -4.0060285553415902e+00 + -4.8769669889804144e+00 1.8605951711301416e+00 -3.9176479614354984e+00 + -4.6672471933047062e+00 1.6807965250001633e+00 -3.7437349521748735e+00 + -4.3574522073732043e+00 1.2948689932875947e+00 -3.5177500109685265e+00 + -4.3843690288330217e+00 9.3310163533615276e-01 -3.4131032823016683e+00 + -4.8816491809756881e+00 1.2033150337239444e+00 -3.4281668177921620e+00 + id 14617 + loc 5.2137327194213867e-01 3.3774625509977341e-02 393 + blend 0.0000000000000000e+00 + interp 4.2788563549517805e-01:3.1948036909754018e-01:4.6132793260965577e-01:2.7979222055707281e-01:1.0010831121845341e+00:4.2788135663882310e-01:1.5287839047595020e+00:2.2811932134565743e-01:2.1314782600779796e+00:2.5671431752248525e-01:3.0000489801636796e+00:2.5570677824327104e-01:3.9755229968877464e+00 + CVs 20 + 4.9497171446324650e-01 4.0857174674973068e-01 9.8978100241022257e-02 + 9.6028599990571006e-01 8.4678442488082495e-01 2.1141765417184552e-01 + 1.3979244639268866e+00 1.3250813797547858e+00 3.6552634739856410e-01 + 1.8096555080700405e+00 1.8112594117651375e+00 6.1548140103374083e-01 + 2.1843687732032344e+00 2.2398299973411047e+00 9.9809773742050600e-01 + 2.5120710718184727e+00 2.5630029537572785e+00 1.4974281040179909e+00 + 2.7973867591991297e+00 2.7582716846139257e+00 2.0631762995865861e+00 + 3.0612248831651181e+00 2.8095788233367442e+00 2.6334389002776804e+00 + 3.3213743934172122e+00 2.7122243300837567e+00 3.1487056527488617e+00 + 3.5756382096767347e+00 2.4781322586167036e+00 3.5577447953356796e+00 + 3.8007662988895685e+00 2.1385173939289577e+00 3.8240997371553771e+00 + 3.9650439450798767e+00 1.7426418985492134e+00 3.9397720365404894e+00 + 4.0472378043899218e+00 1.3493654463307811e+00 3.9160151959218266e+00 + 4.0401951195716821e+00 1.0241032645908921e+00 3.7704720869342538e+00 + 3.9549837971358643e+00 8.1739172261761839e-01 3.5551752897142266e+00 + 3.8491059336842954e+00 6.8938074818465056e-01 3.3609897764474339e+00 + 3.8033605217146649e+00 5.1892848427785809e-01 3.2121573858368118e+00 + 3.8700682310923895e+00 2.4507801182405231e-01 3.0613394081267380e+00 + 4.0973592170724951e+00 -2.0100396399612452e-01 2.8987321254337757e+00 + id 14618 + loc 1.2876478955149651e-02 6.7737692594528198e-01 1079 + blend 0.0000000000000000e+00 + interp 3.8800688502399694e-01:3.3960643795493878e-01:3.1718246342977707e-03:3.6800601440878522e-01:9.4559360959044270e-01:3.3740669485938962e-01:1.4374052069421928e+00:3.8800300495514672e-01:2.0664776706460253e+00:3.7610523994936296e-01:2.7583351708243393e+00:3.4704330732089339e-01:3.2463228973719231e+00 + CVs 20 + 1.1512210242567800e-01 5.4085390626884355e-01 2.5272315653731592e-01 + 2.5057481211616717e-01 9.8310464550009180e-01 3.5824980153946684e-01 + 3.8209467244084083e-01 1.3867031458176733e+00 4.0263371846939033e-01 + 5.0147750210486663e-01 1.7596516649888290e+00 4.0502811382283976e-01 + 6.0651589175614107e-01 2.0827730143859773e+00 3.5577063544288146e-01 + 6.8592462035599611e-01 2.3226930325372246e+00 2.4487890800044654e-01 + 7.1632669415006545e-01 2.4416280396048444e+00 8.1835796251732651e-02 + 6.6814296799332418e-01 2.4242883183190838e+00 -8.5013064928395776e-02 + 5.2682323791348973e-01 2.3059679922235881e+00 -1.8225660777679664e-01 + 3.2441216203496748e-01 2.1760736546421899e+00 -1.7766458159318754e-01 + 1.1750366646041160e-01 2.0985863607641160e+00 -1.2624426766702923e-01 + -6.9944316520810401e-02 2.0632908110350843e+00 -9.7149888872380519e-02 + -2.4366938684345263e-01 2.0335739411961025e+00 -1.1914331438405423e-01 + -4.1474674067538481e-01 1.9804223204371036e+00 -1.9331327947626209e-01 + -5.9093051139231945e-01 1.8927089816485587e+00 -3.0400818696998655e-01 + -7.7448681162183719e-01 1.7853700681497902e+00 -4.2651975596255265e-01 + -9.6072301298154439e-01 1.6623400834950193e+00 -5.5275520861514937e-01 + -1.1484151916553529e+00 1.4660007287458501e+00 -6.5466073684671122e-01 + -1.3405408576960314e+00 1.2054905945641297e+00 -6.4123987074997879e-01 + id 14619 + loc 6.8698847293853760e-01 1.4818765223026276e-01 401 + blend 0.0000000000000000e+00 + interp 3.6732760866371761e-01:2.9409958643647766e-01:7.7806052884473964e-01:3.1657768882478410e-01:1.9233280043922365e+00:3.0353842587595942e-01:2.4339128251422317e+00:3.6732393538763097e-01:3.0834505357844821e+00:2.7204486334928663e-01:3.9553784443626423e+00 + CVs 20 + 2.3515920538975922e-02 2.7459163948221593e-01 2.2922412020735411e-01 + 5.3124250993416916e-02 5.3924738359639424e-01 4.5327831064725460e-01 + 7.9515948564593653e-02 7.9249717193278357e-01 6.7692773078537649e-01 + 1.0180395391793828e-01 1.0338139661648433e+00 9.0777366557811534e-01 + 1.2941550107196517e-01 1.2578992209859763e+00 1.1567884737046512e+00 + 1.7432966871623265e-01 1.4540160560627307e+00 1.4356830819926942e+00 + 2.5074991220843873e-01 1.6009006516267146e+00 1.7511865637143977e+00 + 3.7056799633080695e-01 1.6736728909797305e+00 2.0947688273582332e+00 + 5.3539160710034717e-01 1.6716339019457096e+00 2.4370674424154166e+00 + 7.3299230275380378e-01 1.6172384956144894e+00 2.7447478381526609e+00 + 9.4260467605304998e-01 1.5109578159066879e+00 3.0052621730258280e+00 + 1.1453200561127643e+00 1.3134476419226750e+00 3.2261577389488960e+00 + 1.3374890118678089e+00 1.0102809485097102e+00 3.4125200472755481e+00 + 1.5321751212967334e+00 6.6074695914379267e-01 3.5594835000151237e+00 + 1.7289193097994662e+00 3.3317128409827457e-01 3.6566124052946232e+00 + 1.9268133168573891e+00 -7.0408501233761300e-03 3.7070866960853608e+00 + 2.1933959373032628e+00 -4.9905866351382266e-01 3.7371474179542918e+00 + 2.7069914728956395e+00 -1.0943936435426975e+00 3.7974986865700227e+00 + 2.9656353475166162e+00 -1.2004005732978582e+00 3.7534036549111862e+00 + id 14620 + loc 4.0904903411865234e-01 5.2211499214172363e-01 399 + blend 0.0000000000000000e+00 + interp 3.7884848997081938e-01:2.7147543736128832e-01:8.0827305025052976e-03:3.7884470148591970e-01:9.1544947423612077e-01:2.9731300561065016e-01:1.5939791660583116e+00:3.7017054676238736e-01:2.1048377654153292e+00:2.6649314628539189e-01:2.8500764621293055e+00:2.9348440819102062e-01:3.2827049435344935e+00 + CVs 20 + -1.2637402647101936e-01 2.6055452192474082e-01 -1.5220679966051759e-01 + -2.7580881285037662e-01 5.4054598397057385e-01 -3.2154298437464196e-01 + -4.2077906296283635e-01 8.3212396785419562e-01 -5.2515033291809665e-01 + -5.4427822125113701e-01 1.1228930088458136e+00 -7.6373499068299999e-01 + -6.5074033127406927e-01 1.4089676361291597e+00 -1.0276339624629138e+00 + -7.5113529888309549e-01 1.6896403433494349e+00 -1.3077619863658430e+00 + -8.5830174172242057e-01 1.9607267520204137e+00 -1.6014574516885538e+00 + -9.8564064093911397e-01 2.2080261086155928e+00 -1.9141024926210690e+00 + -1.1473728422170888e+00 2.4041110808041175e+00 -2.2558063085730788e+00 + -1.3536641676850147e+00 2.5065575406874423e+00 -2.6328391164778795e+00 + -1.5945710071861121e+00 2.4673966045325040e+00 -3.0250499318296526e+00 + -1.8289965599817977e+00 2.2888064963510137e+00 -3.3770697975782817e+00 + -2.0215914641198829e+00 2.0444879453452747e+00 -3.6610297345470815e+00 + -2.1639456245957973e+00 1.8102110797761981e+00 -3.8968757027258212e+00 + -2.2486961893910427e+00 1.6440622272220307e+00 -4.1091661330957931e+00 + -2.2615068492035704e+00 1.5656460725817942e+00 -4.3047398000895702e+00 + -2.1880608409858264e+00 1.5596770138013532e+00 -4.4589255307699789e+00 + -2.0588229704662075e+00 1.5816980590288963e+00 -4.5323983955417466e+00 + -1.9448477628104566e+00 1.5422228110200458e+00 -4.7683554985215979e+00 + id 14621 + loc 4.3750128149986267e-01 5.5539160966873169e-01 404 + blend 0.0000000000000000e+00 + interp 4.2845259637467475e-01:3.5241328103550373e-01:2.5668818241280089e-02:3.9238191342454382e-01:7.3542983002305151e-01:4.2844831184871102e-01:1.2031771044458002e+00:3.9366065859198934e-01:2.0056435584345098e+00:2.7241040129234395e-01:2.9495950337066659e+00:3.5635540994647408e-01:3.3978566359585218e+00 + CVs 20 + -5.0838996875954813e-02 -1.1733688388060499e-02 1.4837965444081735e-02 + -8.0087937955785352e-02 2.7182906941055768e-03 2.3856278735529479e-02 + -8.8428008515348197e-02 2.1584052219641665e-02 2.7385090467635341e-02 + -9.6284797285078688e-02 3.3736244904686158e-02 2.8304425870000663e-02 + -1.0479633622601950e-01 4.0210650061650283e-02 2.4411555073465589e-02 + -1.1437998825941682e-01 4.2184708862536544e-02 1.3796313212670868e-02 + -1.2575510245270624e-01 4.1379584070908124e-02 -6.4105136756662812e-03 + -1.4052551622319459e-01 4.2066634463850422e-02 -4.2086254928748443e-02 + -1.6287115458529466e-01 5.1260630257480663e-02 -9.7314677633802679e-02 + -2.0117894109122328e-01 7.2208262807003487e-02 -1.6523015168738669e-01 + -2.6764898536164572e-01 1.0501421897155722e-01 -2.3547435060526506e-01 + -3.6869646609189238e-01 1.5163784223619353e-01 -2.9798078070411083e-01 + -4.9706621615739299e-01 2.1871140123841615e-01 -3.4669416458751245e-01 + -6.3702878258009299e-01 3.1310634763553657e-01 -3.8078186156027921e-01 + -7.8156453465864695e-01 4.3192721064887701e-01 -3.9539428076450761e-01 + -9.3648199521785813e-01 5.7072943451290403e-01 -3.8000213545470302e-01 + -1.0988299086467952e+00 7.3669671955788862e-01 -3.2359887658573333e-01 + -1.2434773108865382e+00 9.4187899906791095e-01 -2.2526581957020184e-01 + -1.2423594454416023e+00 1.0120395756647571e+00 -2.8427402553651565e-01 + id 14622 + loc 8.7998732924461365e-02 9.9534712731838226e-02 401 + blend 0.0000000000000000e+00 + interp 4.2749576765018982e-01:2.8501806734361551e-01:7.2313073373957726e-01:4.2749149269251335e-01:1.2771029447964517e+00:2.7958390928705684e-01:1.9210584985547232e+00:2.8732617809691402e-01:2.8555260054040836e+00:2.8486002158565826e-01:3.8640521088872948e+00 + CVs 20 + -2.8562101949999874e-01 1.9882259677572864e-01 1.0640203537401932e-01 + -5.5184711947126064e-01 3.9440829474930922e-01 2.5297734093773155e-01 + -8.1534394721633441e-01 5.9252292953997798e-01 4.1135423208020289e-01 + -1.0857697302541880e+00 7.9103191731709066e-01 5.6225223919486711e-01 + -1.3662336531618462e+00 9.8577325983045971e-01 6.9859404379982626e-01 + -1.6444632837279125e+00 1.1691119427069758e+00 8.1195339017612422e-01 + -1.8840462757811962e+00 1.3368872567163150e+00 8.8832500544513326e-01 + -2.0477399248066290e+00 1.5055992295389189e+00 8.8280381775740602e-01 + -2.1678382702101504e+00 1.7265471099739840e+00 8.0886268456530452e-01 + -2.2944578958181281e+00 1.9475670567703975e+00 8.2392754473131491e-01 + -2.3802956301717910e+00 2.0157041485225240e+00 9.8102158720516819e-01 + -2.3752346644514777e+00 1.8456166172890605e+00 1.2050947735972688e+00 + -2.3171376716056473e+00 1.4313093016724370e+00 1.4395845054140954e+00 + -2.3062748308366534e+00 7.9908942716359743e-01 1.7086532629723714e+00 + -2.4409520832551679e+00 3.3249426309747976e-02 2.1416826476023436e+00 + -2.7981530744807368e+00 -6.3170509623430160e-01 2.9311836027249472e+00 + -3.3386388318192339e+00 -7.2585530480642579e-01 4.0313291525330497e+00 + -3.7310316542036164e+00 -2.3979160943243932e-01 4.8198010603673183e+00 + -3.8736626050431946e+00 1.5858240071231394e-01 5.1461614727422438e+00 + id 14623 + loc 9.8519986867904663e-01 7.8769820928573608e-01 393 + blend 0.0000000000000000e+00 + interp 5.2599941324381061e-01:5.2599415324967824e-01:5.1965557188883627e-02:2.7920447474720667e-01:8.8343027055381496e-01:4.4852689492116865e-01:1.6070680961782537e+00:4.5120021329236654e-01:2.2742909697867368e+00:3.3916793206378082e-01:2.8574611737657234e+00:2.7472091263286863e-01:3.3679281496433773e+00:5.1703343354268883e-01:3.9984944332028238e+00 + CVs 20 + -1.6413355024266491e-01 1.5818930869436665e-01 -6.3478700416528797e-02 + -3.3814654174576053e-01 3.3829186579545156e-01 -1.4407751719034251e-01 + -5.0895810199913738e-01 5.3011189363015576e-01 -2.2297937307318882e-01 + -6.7378819107226295e-01 7.3099018024734619e-01 -2.9137570208897406e-01 + -8.3670109951373228e-01 9.4154287503073886e-01 -3.4882693468409381e-01 + -1.0018732857143338e+00 1.1598489948944990e+00 -3.9839092778501750e-01 + -1.1699966140935714e+00 1.3757841214712285e+00 -4.5164311722153772e-01 + -1.3382095934027041e+00 1.5736578034239026e+00 -5.2046246939860707e-01 + -1.5088845046718431e+00 1.7501001309795301e+00 -6.0195308010902193e-01 + -1.6941878061992592e+00 1.9185048957397297e+00 -6.8561361136508958e-01 + -1.9007312248726596e+00 2.0842628128256573e+00 -7.7906586840802583e-01 + -2.1099495230870176e+00 2.2234970249805244e+00 -9.0362639846933424e-01 + -2.2952524543365262e+00 2.3002948565282928e+00 -1.0587624432442651e+00 + -2.4441173627322250e+00 2.2801031463536749e+00 -1.2202183905368140e+00 + -2.5438265552596224e+00 2.1643288998658403e+00 -1.3492108951642701e+00 + -2.5703352778159774e+00 2.0173356727860527e+00 -1.4123769736020031e+00 + -2.4913179469448368e+00 1.9046345594372971e+00 -1.4018916812539119e+00 + -2.3593074695439435e+00 1.7912817675977533e+00 -1.3662490131620393e+00 + -2.5412765295999087e+00 1.5903021313390946e+00 -1.3631762919213954e+00 + id 14624 + loc 6.3412004709243774e-01 4.5304593443870544e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4352432897022620e-01:3.2268011271598068e-01:2.0145361854037902e-01:3.5795940943348437e-01:9.9613667196363254e-01:2.5439319269021821e-01:1.6771140815448158e+00:3.7963285957631782e-01:2.4177240921305847e+00:3.4483174404818634e-01:3.0360740013142418e+00:4.4351989372693651e-01:3.9337351099853990e+00 + CVs 20 + -2.7710964093610582e-02 3.0020670348766576e-01 4.3654941870690231e-02 + -7.8169651618893721e-02 5.4696550831050339e-01 1.1043329093831789e-01 + -1.3165888828538089e-01 7.6487148082769374e-01 1.8881977951735998e-01 + -1.6930063036077633e-01 9.5754900955217004e-01 2.6551201377886563e-01 + -1.9072643811821069e-01 1.1252074531267398e+00 3.3283324633799249e-01 + -1.9459562091569710e-01 1.2704940490306025e+00 3.7874926864487085e-01 + -1.8443180332031206e-01 1.4056230878393627e+00 4.0048209737076412e-01 + -1.7154138621998877e-01 1.5446078228391165e+00 4.1460700081343316e-01 + -1.6605290267044071e-01 1.6909305377195731e+00 4.4185154513465918e-01 + -1.7169490170469603e-01 1.8385932897315889e+00 4.9716242062336113e-01 + -1.8647427188175264e-01 1.9758033988552115e+00 5.9049324851038154e-01 + -2.0371400266972139e-01 2.0901316919705071e+00 7.2543194359717722e-01 + -2.1516154551142769e-01 2.1711988445459127e+00 9.0018580484730260e-01 + -2.1345971986160467e-01 2.2123211799819318e+00 1.1095999091754685e+00 + -1.9529216950399891e-01 2.2170000737439737e+00 1.3483647412794189e+00 + -1.6912625153935806e-01 2.2183930091033828e+00 1.6246698930735595e+00 + -1.5746116007931901e-01 2.2673796852219468e+00 2.0022404944845547e+00 + -1.6720686792386055e-01 2.2524496299384662e+00 2.5103233054501217e+00 + -1.2005477546832112e-01 2.0332224661199927e+00 2.4560748593224266e+00 + id 14625 + loc 5.7876646518707275e-02 3.0981630086898804e-01 399 + blend 0.0000000000000000e+00 + interp 4.8130331538433585e-01:2.9765259763648244e-01:3.7770751818030734e-01:2.9905609529324884e-01:1.0025357739116822e+00:4.2126716447654045e-01:1.7341417739148826e+00:2.0372001077132601e-01:2.1331938571395472e+00:2.9367265329006048e-01:3.1224316813886799e+00:4.8129850235118204e-01:3.9802498460257620e+00 + CVs 20 + -7.7954036823339901e-02 3.1022017612179714e-01 1.7625846575006762e-01 + -1.8888981618772524e-01 6.2426411698704842e-01 3.4166688650326260e-01 + -3.2592948840425273e-01 9.3465109566563265e-01 4.8541307904287700e-01 + -4.8231369835340177e-01 1.2377883963168399e+00 6.0860696249009005e-01 + -6.5138840837508427e-01 1.5332810248738735e+00 7.2173030779955782e-01 + -8.2926022659184218e-01 1.8203489218259894e+00 8.3841429578170446e-01 + -1.0193363091929726e+00 2.0954114242100315e+00 9.7339653112528035e-01 + -1.2309990023209298e+00 2.3489280723901378e+00 1.1436384115986067e+00 + -1.4747300690341463e+00 2.5587508806888857e+00 1.3674384218930429e+00 + -1.7539559706832237e+00 2.6848973935763421e+00 1.6548748734222101e+00 + -2.0477557629353749e+00 2.6795992606253076e+00 1.9835520600646930e+00 + -2.3107304248303371e+00 2.5400913801822629e+00 2.2888353480417991e+00 + -2.5226614196009267e+00 2.3217370322510535e+00 2.5249233270214355e+00 + -2.6919304198002600e+00 2.0841494627958750e+00 2.6843237135644777e+00 + -2.8314676579079583e+00 1.8702459575039267e+00 2.7744054561094136e+00 + -2.9535222526336158e+00 1.6949508392607453e+00 2.8132127375940912e+00 + -3.0566378468262720e+00 1.5607282909533025e+00 2.8132232434891309e+00 + -3.1810991241310327e+00 1.4516766967037942e+00 2.7857359888211306e+00 + -3.5023960535605210e+00 1.3755219320411443e+00 2.7031893638458149e+00 + id 14626 + loc 9.7779124975204468e-01 9.2440569400787354e-01 401 + blend 0.0000000000000000e+00 + interp 4.5995841546444755e-01:4.5843432152165697e-01:6.0096882396559193e-01:2.5623170712330767e-01:1.3063849219314116e+00:3.9887725803703045e-01:2.1989245724510380e+00:3.8383809184113948e-01:2.7596710466854502e+00:4.5995381588029294e-01:3.1527412469465617e+00:2.6284473282298743e-01:3.9978498543671179e+00 + CVs 20 + -1.0455040513854583e-02 2.9134741203022768e-01 -2.3682678165753654e-01 + -1.3805377626363580e-02 5.7591004831977455e-01 -4.5101054052052747e-01 + 4.7963812639923997e-03 8.7007529165045649e-01 -6.8635686192932943e-01 + 5.2215372550755201e-02 1.1684664180339512e+00 -9.6613683073959478e-01 + 1.2494278426608396e-01 1.4515222154256757e+00 -1.3017305200505063e+00 + 2.0438660659888419e-01 1.7024100702683049e+00 -1.7002117745158434e+00 + 2.5027334929208489e-01 1.9152903943553587e+00 -2.1622732827277655e+00 + 2.1451949002465498e-01 2.0829127224140702e+00 -2.6733352983502745e+00 + 6.2069362268850847e-02 2.1893793788564357e+00 -3.1953428537378610e+00 + -2.1431815362450735e-01 2.2235614630917850e+00 -3.6756480644832932e+00 + -5.9382758591173768e-01 2.1911491376002603e+00 -4.0684408127241563e+00 + -1.0432118637360630e+00 2.1068688314474668e+00 -4.3512185505021259e+00 + -1.5278484445839671e+00 1.9816411218386421e+00 -4.5313397435672913e+00 + -2.0096084059336734e+00 1.8241124735604761e+00 -4.6311426731809888e+00 + -2.4650293283277942e+00 1.6462016757007891e+00 -4.6599779635934695e+00 + -2.9262312457363251e+00 1.4436625059380113e+00 -4.6185797564554871e+00 + -3.4443222846488251e+00 1.1913719607958038e+00 -4.5530520779014791e+00 + -3.9803556194490151e+00 9.3882656119095653e-01 -4.5692914953670645e+00 + -4.3379838358133549e+00 8.5541353879386417e-01 -4.6980721426519878e+00 + id 14627 + loc 8.4906196594238281e-01 8.0556631088256836e-02 404 + blend 0.0000000000000000e+00 + interp 4.6166168374063071e-01:3.6995894932718149e-01:7.3185585238418560e-01:2.5409386243249876e-01:1.0673581634669957e+00:2.8686398898082971e-01:1.9782814072725565e+00:3.8284837710900682e-01:2.7745834415671098e+00:3.5243246844111931e-01:3.1558212269980563e+00:4.6165706712379334e-01:3.9998625965796837e+00 + CVs 20 + 1.0135074222881374e-02 9.1241774301548811e-02 1.1225975239143321e-01 + 1.0541608704849492e-02 1.8932911642680228e-01 2.2818595649830040e-01 + -7.2176392408696277e-03 2.9259299679662137e-01 3.4021277136693229e-01 + -4.9191249400670073e-02 3.9880621318413179e-01 4.4178804359105472e-01 + -1.1666046239902700e-01 5.0497389072028143e-01 5.2898672123319979e-01 + -2.0868545038587119e-01 6.0639047152265779e-01 5.9597316191850125e-01 + -3.2213722060999411e-01 6.9811625625726281e-01 6.3601650096289408e-01 + -4.5235209454719177e-01 7.7717884481986943e-01 6.4417720234197473e-01 + -5.9210229307148976e-01 8.4178172137545726e-01 6.1709474438526091e-01 + -7.3079858461324654e-01 8.9024929862108748e-01 5.5237950256143153e-01 + -8.6085620426913068e-01 9.2503430621958227e-01 4.5206740493460573e-01 + -1.0111006190019503e+00 9.6780550439241841e-01 3.3387328210909195e-01 + -1.2651804592979494e+00 1.0564099666452140e+00 2.3918413718576992e-01 + -1.6974265323555406e+00 1.2109762652919356e+00 2.5499661297559373e-01 + -2.2423988861395108e+00 1.3924071775550373e+00 4.7390496852714992e-01 + -2.7421456375533495e+00 1.5398219450825152e+00 8.6461512072844227e-01 + -3.1382429745128047e+00 1.6357907381574468e+00 1.3703148764673243e+00 + -3.4161183203684251e+00 1.6759590923200731e+00 1.9848247324902506e+00 + -3.5639994680422671e+00 1.7304391702794037e+00 2.1653982895150246e+00 + id 14628 + loc 3.6900532245635986e-01 7.4721783399581909e-01 393 + blend 0.0000000000000000e+00 + interp 3.7401073465380347e-01:3.3567446685455204e-01:2.7243665397622441e-01:2.8730630402550011e-01:1.0157576623982774e+00:3.7400699454645697e-01:1.9230523806453004e+00:2.8865277100248810e-01:2.3370551879968589e+00:3.0930921998535632e-01:2.9998520552164871e+00:2.6587887007852995e-01:3.6688647955111939e+00 + CVs 20 + -2.7878061498724110e-01 3.8383187100403537e-01 -2.7473685472963782e-01 + -5.2878230455133646e-01 7.5596594086712965e-01 -5.4367181295208522e-01 + -7.5713306862899932e-01 1.1189848416824870e+00 -8.1800939854091470e-01 + -9.8403144678566168e-01 1.4674231081418372e+00 -1.1013576288681213e+00 + -1.2291700687765705e+00 1.7909142244386123e+00 -1.3895009504346358e+00 + -1.5035129168260255e+00 2.0809417057944595e+00 -1.6746242136986071e+00 + -1.8077616366873399e+00 2.3292080778942781e+00 -1.9467692895073676e+00 + -2.1330870223393776e+00 2.5241201812543119e+00 -2.1961249558903480e+00 + -2.4649030236943910e+00 2.6537608199636953e+00 -2.4156086015743892e+00 + -2.7930846184021387e+00 2.7200198987488511e+00 -2.6069071932529591e+00 + -3.1286126374604608e+00 2.7439512371881936e+00 -2.7932591719617328e+00 + -3.4963417474924192e+00 2.7372626879330015e+00 -3.0106068656744949e+00 + -3.9013854289415448e+00 2.6784794758633321e+00 -3.2687937789938677e+00 + -4.3193372136738750e+00 2.5370646962233510e+00 -3.5520897488344936e+00 + -4.7363831444133453e+00 2.2855398145418908e+00 -3.8668271804080461e+00 + -5.1892586615281262e+00 1.8732844261070507e+00 -4.2274542378898223e+00 + -5.7356487342322460e+00 1.2938932495477198e+00 -4.5613684696578458e+00 + -6.3484123867687590e+00 6.7215330856946665e-01 -4.7643862071870480e+00 + -6.8481965201678801e+00 2.1943697500115933e-01 -4.9409741049697002e+00 + id 14629 + loc 8.7702560424804688e-01 5.9173530340194702e-01 399 + blend 0.0000000000000000e+00 + interp 4.1828579631546692e-01:4.1828161345750381e-01:1.2488637697538607e-04:2.6741365981329551e-01:7.5492575975557752e-01:2.5669737547479232e-01:1.3284777959049345e+00:2.6444042983019073e-01:2.0109384661547582e+00:2.4922022342156455e-01:3.0768418563340392e+00 + CVs 20 + -2.2228105702865128e-01 2.9200398623509827e-01 -6.7478313100594337e-02 + -4.5473826117705241e-01 5.9245133486717882e-01 -1.7623188449938321e-01 + -7.0229464497778427e-01 8.8769598414044015e-01 -3.2415906573086151e-01 + -9.6332724833032191e-01 1.1662434790721028e+00 -5.1555752036318947e-01 + -1.2321970387028107e+00 1.4180907434854038e+00 -7.5527238793723450e-01 + -1.5008099928881558e+00 1.6316739289257438e+00 -1.0437291443827952e+00 + -1.7600000247099621e+00 1.7952168579074776e+00 -1.3786546155935042e+00 + -1.9976010327242644e+00 1.8981718863371864e+00 -1.7556005301767823e+00 + -2.1918840583429371e+00 1.9323663104481679e+00 -2.1685914293734334e+00 + -2.3151789005434691e+00 1.8886357761809012e+00 -2.6044475800272804e+00 + -2.3587113828214186e+00 1.7644434055145617e+00 -3.0331822127564823e+00 + -2.3588236239123881e+00 1.5734556581273458e+00 -3.4246855834719714e+00 + -2.3627038782660863e+00 1.3242465600970981e+00 -3.7589215271652097e+00 + -2.3929022173567116e+00 1.0086084901606713e+00 -3.9937949238210266e+00 + -2.4564640126938699e+00 6.4561109589757493e-01 -4.0981434691183116e+00 + -2.5627534900683377e+00 2.8751513858875266e-01 -4.1373985534205957e+00 + -2.7308231933837752e+00 -4.5140584701986342e-02 -4.2110822337581872e+00 + -2.9455040263865091e+00 -3.6039777640752957e-01 -4.3677555706068594e+00 + -3.0529614015211299e+00 -6.8502117290257969e-01 -4.7012748773079922e+00 + id 14630 + loc 3.6298555135726929e-01 7.4446588754653931e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5081350730751946e-01:2.8906003978967704e-01:6.6805833597337161e-01:3.5493219061950837e-01:1.0714360879657050e+00:3.9283482126706348e-01:1.9990579725065203e+00:4.3650152996766139e-01:2.5424509833649180e+00:4.5080899917244638e-01:2.9851563217081871e+00:3.6253417770593177e-01:3.3453030449268519e+00:3.9195058794775828e-01:3.9989022168242419e+00 + CVs 20 + 1.2429852799963453e-01 4.4567701469612292e-01 8.2871157531648143e-02 + 2.7153134143690116e-01 8.2695504112640938e-01 7.3841297154322194e-02 + 4.2549828223920888e-01 1.1749959177820910e+00 1.2527984080358490e-02 + 5.7930471018692198e-01 1.4860405810398234e+00 -8.9951793590597018e-02 + 7.2639618290977759e-01 1.7376290876195579e+00 -2.3317467009327797e-01 + 8.4958988246627865e-01 1.8969861889979065e+00 -4.1099140759718344e-01 + 9.2893739893350136e-01 1.9478865913062084e+00 -6.0091241414966545e-01 + 9.5647336364722679e-01 1.9089730245002128e+00 -7.7163275026209344e-01 + 9.3916846419674938e-01 1.8157224525593598e+00 -9.0201706954818273e-01 + 8.9475097552626748e-01 1.7016366340839237e+00 -9.9104438861080357e-01 + 8.4281427809542731e-01 1.5865924151850130e+00 -1.0535474372949045e+00 + 7.9858049781575891e-01 1.4752071000101883e+00 -1.1080618971542848e+00 + 7.7300086864237705e-01 1.3622006246153786e+00 -1.1684133758017541e+00 + 7.7385800888328549e-01 1.2398546645206292e+00 -1.2374544009535033e+00 + 8.0235023151036211e-01 1.1149726261256672e+00 -1.2907717120103761e+00 + 8.5040139873638776e-01 1.0372810940709405e+00 -1.2764009735699249e+00 + 9.1535825897788203e-01 1.0518523650375462e+00 -1.2163089147907984e+00 + 1.0132838308035204e+00 1.0071264653115948e+00 -1.1860691153920260e+00 + 1.1520126047168473e+00 7.4584282790900747e-01 -1.1195221397312833e+00 + id 14631 + loc 4.6963548660278320e-01 1.4667268842458725e-02 401 + blend 0.0000000000000000e+00 + interp 5.8107633196483743e-01:5.8107052120151781e-01:1.7657135138625324e-01:4.3008161045061577e-01:7.3424201964278302e-01:3.2387257923874019e-01:1.1102983736805594e+00:4.6265601412321677e-01:1.7162779066321439e+00:3.1635038932202586e-01:2.4288216500455864e+00:2.8477556939714227e-01:3.3982736284059580e+00 + CVs 20 + -2.1639356347400154e-01 2.8925179356347530e-01 1.4230114394274307e-01 + -4.6496578421655138e-01 5.8471915823442833e-01 2.9384118538664333e-01 + -7.3273808706227050e-01 8.7743220878319439e-01 4.5430910169747751e-01 + -1.0159914948964217e+00 1.1538267808760445e+00 6.2548209761843554e-01 + -1.3184086177328465e+00 1.3981937943184726e+00 8.1327651140327450e-01 + -1.6410698973008502e+00 1.5933244846486940e+00 1.0267547534488823e+00 + -1.9817003951470447e+00 1.7260829503368025e+00 1.2750064103905243e+00 + -2.3328768257022032e+00 1.7956530231592387e+00 1.5616767516028780e+00 + -2.6845097747428035e+00 1.8024120887334518e+00 1.8780686592194415e+00 + -3.0331077160068221e+00 1.7255043652504751e+00 2.2024545467764787e+00 + -3.3724111226782050e+00 1.5523559126298281e+00 2.5138288399281565e+00 + -3.6871519141100451e+00 1.3332503179648962e+00 2.8208987808916643e+00 + -3.9636639047298292e+00 1.1295442784430589e+00 3.1505154140484462e+00 + -4.1934438906765807e+00 9.3581231645009444e-01 3.5069531949410360e+00 + -4.3714465860088172e+00 7.2805445639795185e-01 3.8779753328731190e+00 + -4.4833268576738012e+00 6.0324563490079464e-01 4.2186549118273220e+00 + -4.5112856301361361e+00 7.4251282399322327e-01 4.3867346194634331e+00 + -4.4790669075051044e+00 9.7395755113345805e-01 4.3040831593163231e+00 + -4.5154567557011909e+00 1.0058971790429532e+00 4.5949234675179627e+00 + id 14632 + loc 2.5573498010635376e-01 9.1486203670501709e-01 404 + blend 0.0000000000000000e+00 + interp 4.7081024747906908e-01:3.8704739862793058e-01:7.8823032319550046e-01:4.7080553937659431e-01:1.1041694324095472e+00:3.7184931200578164e-01:2.0095369987492377e+00:4.5234843764652727e-01:2.7445413065185353e+00:3.6056947312299409e-01:3.0551610496845547e+00:3.0711104643300996e-01:3.9244873078447999e+00 + CVs 20 + 5.2300157392887563e-02 7.8446259464148210e-02 9.7815695776643889e-03 + 1.0407445401654375e-01 1.4187343957484644e-01 3.7021006275858144e-02 + 1.6303760301375111e-01 1.8174001030327191e-01 6.3579926340437146e-02 + 2.3435505720742766e-01 2.0434748910977424e-01 8.7136086961956710e-02 + 3.1588821848412579e-01 2.0826232214231169e-01 1.0640347699071863e-01 + 4.0486584950651955e-01 1.9228471193479496e-01 1.2064511222055606e-01 + 4.9854741958863658e-01 1.5585317376708524e-01 1.2998353151063696e-01 + 5.9431429713812411e-01 9.8748034403066953e-02 1.3537665717116065e-01 + 6.8971387066575307e-01 2.1169251628807562e-02 1.3862378881544662e-01 + 7.8260819741466570e-01 -7.5629127531262774e-02 1.4116307271044659e-01 + 8.7079765569694034e-01 -1.8965966965634601e-01 1.4381555987634001e-01 + 9.5137172965883710e-01 -3.1866645641185737e-01 1.4712485393387065e-01 + 1.0204015196959899e+00 -4.6008652866261351e-01 1.5182701112165209e-01 + 1.0736782254750949e+00 -6.1042417221314760e-01 1.5926761236143733e-01 + 1.1097552100288783e+00 -7.6386775070337798e-01 1.7060409847836824e-01 + 1.1364469219226108e+00 -9.1095501797854850e-01 1.8271656044000936e-01 + 1.1680675423762212e+00 -1.0420740892287161e+00 1.8630013722213154e-01 + 1.2156897591151339e+00 -1.1504353205824966e+00 1.6998280957120579e-01 + 1.2633072321090542e+00 -1.2358098457788027e+00 1.3966084650830157e-01 + id 14633 + loc 9.9575519561767578e-02 6.6510832309722900e-01 393 + blend 0.0000000000000000e+00 + interp 3.2477416321509839e-01:2.5999773632064349e-01:3.0137925631600837e-01:2.6687275146258499e-01:1.0593130406626472e+00:2.7088117240135123e-01:1.9974219720067068e+00:3.2477091547346626e-01:2.5088150282141384e+00:2.7489224497932219e-01:3.0016408714679756e+00:2.8307931209533133e-01:3.7367357842099294e+00 + CVs 20 + -3.1068013503157871e-01 3.8861460362548345e-01 -1.3073468728074236e-01 + -5.7569588300942620e-01 7.9083058620208224e-01 -2.6181891396445678e-01 + -8.0680707452489564e-01 1.2149908342278448e+00 -3.8436254602580922e-01 + -1.0248846298629208e+00 1.6633970259955519e+00 -4.9186413664488154e-01 + -1.2575020438952136e+00 2.1313436404828150e+00 -5.7959808110681665e-01 + -1.5328378177928159e+00 2.6078398968086436e+00 -6.4272250825829269e-01 + -1.8799996560286685e+00 3.0768452469812964e+00 -6.7954234183093876e-01 + -2.3272690019674700e+00 3.5101641304055136e+00 -6.9406234637885245e-01 + -2.8751551063838248e+00 3.8600604451669724e+00 -6.9430646375449268e-01 + -3.4882943945319052e+00 4.0899668519404049e+00 -6.9612881991776121e-01 + -4.1408015732561516e+00 4.1962839677443213e+00 -7.3118922061744729e-01 + -4.8205654283102701e+00 4.1787234938000779e+00 -8.3333629616701832e-01 + -5.4928206260849928e+00 4.0203634488270703e+00 -1.0055715514864094e+00 + -6.1011053553449592e+00 3.7122802687782928e+00 -1.2227467375933128e+00 + -6.5831807372843567e+00 3.2898542626404099e+00 -1.4607361126075693e+00 + -6.8871517924345484e+00 2.8406690036103308e+00 -1.6896506705220502e+00 + -7.0366362155331306e+00 2.4290262373344715e+00 -1.8846139603338854e+00 + -7.1351955643880940e+00 2.0220349220096350e+00 -2.0373753786594957e+00 + -7.2780442376890244e+00 1.5504983358415310e+00 -2.1217596999545680e+00 + id 14634 + loc 1.3979034125804901e-01 2.0119850337505341e-01 401 + blend 0.0000000000000000e+00 + interp 3.1154844529187037e-01:2.9647932665335491e-01:8.8313988889836459e-01:2.9690122553482018e-01:1.8428396674747778e+00:2.6943322462642488e-01:2.8630821839198086e+00:3.1154532980741745e-01:3.8596340723843001e+00 + CVs 20 + -2.6942182423826772e-01 2.5822182620657658e-01 2.0794527515313219e-01 + -5.2836213898696005e-01 5.3401968255974874e-01 3.7732873187360494e-01 + -7.9969122081374511e-01 8.0900486790880466e-01 5.4727727850730934e-01 + -1.0944779327858487e+00 1.0692289114182763e+00 7.3579394202485493e-01 + -1.4150184414114308e+00 1.3016239158296747e+00 9.4952106167623584e-01 + -1.7574874217107015e+00 1.4908427138965754e+00 1.1972524669224403e+00 + -2.1113340507733089e+00 1.6214640469230306e+00 1.4867185075955922e+00 + -2.4628002370727531e+00 1.6817693053034277e+00 1.8190205876531100e+00 + -2.7993868784378315e+00 1.6668159783965664e+00 2.1865291363474615e+00 + -3.1144090805187896e+00 1.5792294106101579e+00 2.5755044757573167e+00 + -3.4066528257539326e+00 1.4249373682822823e+00 2.9705488425437103e+00 + -3.6741070483942684e+00 1.2085606305702672e+00 3.3576988353449848e+00 + -3.9085037797557347e+00 9.3147189605372449e-01 3.7316013467833038e+00 + -4.0899873783311786e+00 5.9217408662432103e-01 4.1046373058750625e+00 + -4.1764334945096353e+00 1.9436952416377518e-01 4.5019690232540572e+00 + -4.1046453960026898e+00 -2.2963989718612676e-01 4.9329923325482152e+00 + -3.8220271374298833e+00 -6.1096840508241557e-01 5.3695044464727637e+00 + -3.3779459677083192e+00 -8.6648287607139363e-01 5.7266709361746475e+00 + -3.0768444519315317e+00 -9.9490369986610017e-01 5.9047090051636086e+00 + id 14635 + loc 8.0344223976135254e-01 6.3181209564208984e-01 399 + blend 0.0000000000000000e+00 + interp 3.7215254758334299e-01:2.8034718338764586e-01:5.7085133702139412e-03:2.5585296918150663e-01:1.0329797733512558e+00:3.7214882605786714e-01:1.9255154521721356e+00:2.6470380157965340e-01:2.8059459708434997e+00:2.5669737547479232e-01:3.3256582216457899e+00 + CVs 20 + -2.6943812172022175e-01 3.0014329869449452e-01 -1.9347049297125624e-01 + -5.1038661389060147e-01 5.6473853286462161e-01 -3.9782290462916015e-01 + -7.4644544792085399e-01 7.8870280539966564e-01 -6.2629661787729529e-01 + -9.8485099372246654e-01 9.6756734534630762e-01 -8.7481131627083863e-01 + -1.2219752710583431e+00 1.1003933024018548e+00 -1.1308852728693455e+00 + -1.4548228605284965e+00 1.1908967954310219e+00 -1.3858360821739528e+00 + -1.6856600170061518e+00 1.2426470614761937e+00 -1.6433737937424306e+00 + -1.9227851774328115e+00 1.2561426549832948e+00 -1.9152191875246363e+00 + -2.1741273163894732e+00 1.2418871275509664e+00 -2.2044511226771499e+00 + -2.4448249346415785e+00 1.2109372350011951e+00 -2.5105973004910473e+00 + -2.7317844715110176e+00 1.1335050687112678e+00 -2.8415627369346552e+00 + -3.0200248948068578e+00 9.6303110712684470e-01 -3.1956656447791278e+00 + -3.3171968402119965e+00 7.1229181334428515e-01 -3.5567840309496677e+00 + -3.6583978264206962e+00 4.2928729733220028e-01 -3.9081727877238754e+00 + -4.0502537867439816e+00 1.2397995847170373e-01 -4.2256177891937146e+00 + -4.4465604846234656e+00 -2.0614876221204470e-01 -4.4733951057437729e+00 + -4.8057417742307651e+00 -4.9815192102407235e-01 -4.6365404736639126e+00 + -5.1876088532334084e+00 -6.6618416158293325e-01 -4.7447649687354989e+00 + -5.7166946813940962e+00 -6.6852597111001799e-01 -4.8322648559550645e+00 + id 14636 + loc 1.8888688087463379e-01 6.9068127870559692e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0630840311746839e-01:5.0630334003343724e-01:9.5256570797974671e-04:3.7790067910060898e-01:5.8879186629523961e-01:2.9523736101014908e-01:1.1524818311851246e+00:4.4167863377613370e-01:1.9406436621704670e+00:3.8429985035061626e-01:2.4596694111610238e+00:3.6163965433819945e-01:2.9972292808356014e+00:3.7855612357938767e-01:3.4447815342951058e+00 + CVs 20 + 4.5571108885321232e-02 4.1298636360800106e-01 2.2535364539251496e-01 + 1.3951854279580464e-01 7.4227011419492683e-01 3.6432726130135384e-01 + 2.6162847925763355e-01 1.0328009783009500e+00 4.6607564067017349e-01 + 4.0178857075170554e-01 1.3014996940548369e+00 5.5113562577821518e-01 + 5.5640996155082834e-01 1.5455079182978426e+00 6.1848739945910514e-01 + 7.2012342262507301e-01 1.7627065746976402e+00 6.6829495719885879e-01 + 8.8957647201223233e-01 1.9529849194622855e+00 6.9575717198961740e-01 + 1.0648935775728861e+00 2.1169203884516286e+00 6.9157492852848124e-01 + 1.2447359092969514e+00 2.2506846338321127e+00 6.4715533859280661e-01 + 1.4226197717816420e+00 2.3430322922384930e+00 5.5911729242223285e-01 + 1.5892688361537770e+00 2.3818306582552249e+00 4.3342829076699474e-01 + 1.7366529599158453e+00 2.3620774674591924e+00 2.8257399570726749e-01 + 1.8593059865529940e+00 2.2879152378470335e+00 1.1981334830584434e-01 + 1.9551137085089518e+00 2.1722986078340938e+00 -4.4386687094868371e-02 + 2.0278615217171172e+00 2.0433843268927596e+00 -2.0579015329388628e-01 + 2.0867981511035794e+00 1.9492162359318321e+00 -3.7384888691208001e-01 + 2.1391700142644434e+00 1.8724701573427938e+00 -5.6420652569158614e-01 + 2.1733208266971364e+00 1.6726862853059479e+00 -6.7786801795872254e-01 + 2.1727124179684933e+00 1.2965593930082320e+00 -5.6332638871895391e-01 + id 14637 + loc 4.0788418054580688e-01 9.6421414613723755e-01 393 + blend 0.0000000000000000e+00 + interp 4.8662337617726314e-01:2.7193633559156605e-01:2.0951321599683492e-01:4.8661850994350142e-01:9.2966246933216390e-01:3.0060880705267740e-01:1.8359104264037946e+00:4.2905115179671488e-01:2.0779010014745687e+00:2.8155849363397412e-01:2.9245057391975662e+00:2.8712506044326758e-01:3.5557025503958308e+00 + CVs 20 + -1.7025656902330200e-01 3.4055334914741420e-01 -2.8648318650465182e-01 + -3.4194602537200269e-01 6.8678959985390842e-01 -5.6511231295832853e-01 + -5.0520083646272518e-01 1.0474424681020145e+00 -8.4460777494711903e-01 + -6.8144789312665133e-01 1.4308685609378402e+00 -1.1175901349973048e+00 + -9.0048142375257445e-01 1.8307694625625786e+00 -1.3636825400042496e+00 + -1.1828506234258160e+00 2.2282188853129292e+00 -1.5645208277933105e+00 + -1.5379092140738218e+00 2.5946283562307233e+00 -1.7102093319468936e+00 + -1.9616907409977882e+00 2.8946208448819331e+00 -1.8022658374411000e+00 + -2.4266923333355335e+00 3.1060966380848187e+00 -1.8524444923733139e+00 + -2.8930214440356012e+00 3.2360038671128080e+00 -1.9232527382543272e+00 + -3.3616972867859229e+00 3.2843881701613835e+00 -2.0524983797840193e+00 + -3.8679916611500436e+00 3.2585047460753636e+00 -2.1678658631053827e+00 + -4.4244289623686939e+00 3.1486709905196593e+00 -2.2597744020266433e+00 + -4.9919661445655734e+00 2.9355655753306822e+00 -2.3592611604215645e+00 + -5.5258533420031215e+00 2.6300753259113590e+00 -2.4733987460063762e+00 + -5.9705996022461072e+00 2.3011141596802194e+00 -2.5509866429483838e+00 + -6.2804404250783286e+00 2.0560313697211789e+00 -2.5299632534030110e+00 + -6.4770825809181840e+00 1.8903450606413172e+00 -2.4596811505213241e+00 + -6.7577472102088869e+00 1.5405426607744628e+00 -2.4592263230740308e+00 + id 14638 + loc 1.5520061366260052e-02 6.2341731786727905e-01 405 + blend 0.0000000000000000e+00 + interp 3.8264286411637477e-01:3.2619242908809032e-01:2.6277480012441012e-03:1.1328431853100697e-01:4.9905129363357592e-01:3.5335054005937083e-01:1.4183551231460227e+00:3.8263903768773361e-01:2.0844223082689526e+00:2.9871840555281376e-01:2.8452128176371150e+00:3.7853806625944736e-01:3.1295685408722651e+00 + CVs 20 + 1.2895009901549179e-01 2.1893542466306543e-01 1.0060458060460324e-01 + 1.5213881037960936e-01 3.7568709133214184e-01 1.6162636828719873e-01 + 1.4830414704753153e-01 5.0533809064324453e-01 2.1936299611969140e-01 + 1.4933223924474004e-01 6.2972153800115416e-01 2.9267626109460970e-01 + 1.5254058329608849e-01 7.4862112129300207e-01 3.8365833642280395e-01 + 1.5623998608770362e-01 8.6084557349154656e-01 4.9360914050542892e-01 + 1.5943302427119838e-01 9.6453179959106761e-01 6.2235419691315075e-01 + 1.6163565044814915e-01 1.0579315825429447e+00 7.6830885042318031e-01 + 1.6279073703680158e-01 1.1396765068408947e+00 9.2921840987515636e-01 + 1.6299016464603056e-01 1.2088049046100449e+00 1.1029495413608332e+00 + 1.6298546563538796e-01 1.2649251943074049e+00 1.2889500633436861e+00 + 1.6419179939131878e-01 1.3069216807627413e+00 1.4875134624803970e+00 + 1.6538076456976747e-01 1.3289649041036358e+00 1.6923850967512473e+00 + 1.6029259358792736e-01 1.3201749872986386e+00 1.8862838577579317e+00 + 1.4349008122238516e-01 1.2745099111351370e+00 2.0567468223762750e+00 + 1.1755197827641189e-01 1.2000983547435728e+00 2.2134760185508537e+00 + 9.0180955200800661e-02 1.1130867842715080e+00 2.3745504023438255e+00 + 7.5835906672761022e-02 1.0272886378445292e+00 2.5475157444469478e+00 + 1.4917133937239913e-01 1.0014602223532876e+00 2.7524876203442856e+00 + id 14639 + loc 1.4590835571289063e-01 8.6980156600475311e-02 404 + blend 0.0000000000000000e+00 + interp 5.0991181175189360e-01:3.5343148118726486e-01:6.2084921118966574e-01:4.4068472005544107e-01:1.1779927598564253e+00:4.1515267817670393e-01:1.6872064910532982e+00:3.7849803480051131e-01:2.1169782432406730e+00:3.2382536512547050e-01:2.9355254682289935e+00:3.9232528466612321e-01:3.2933498155938694e+00:5.0990671263377607e-01:3.9192226071405090e+00 + CVs 20 + -1.1026295632082400e-01 1.3436997845930998e-01 -2.1292414881045330e-02 + -2.3480995171736868e-01 2.7390199732795584e-01 -4.5602825353311172e-02 + -3.5948253197719560e-01 4.0620043196991235e-01 -6.5141848663462398e-02 + -4.7914403807207112e-01 5.2549867435279485e-01 -7.6311004897026774e-02 + -5.9395055328572810e-01 6.2981738371829676e-01 -7.9218739328237614e-02 + -7.0111897286597613e-01 7.1544486027064225e-01 -7.5080006401563593e-02 + -7.9818164028304839e-01 7.7943006934371739e-01 -6.5744318466249452e-02 + -8.8650761175722126e-01 8.2178255071068729e-01 -5.2847815243552365e-02 + -9.6861451546730093e-01 8.4491250703819731e-01 -3.8330067905208820e-02 + -1.0460618986610464e+00 8.5317243625946393e-01 -2.3472928424334683e-02 + -1.1179803627379137e+00 8.5057454839522506e-01 -1.2729467543180439e-02 + -1.1835714957432482e+00 8.4066423717537186e-01 -8.1793396145478092e-03 + -1.2502358793774642e+00 8.2396488264571177e-01 -9.4984096335903878e-03 + -1.3395905628136393e+00 7.9259631400772723e-01 -8.5886336415392783e-03 + -1.4774747542645015e+00 7.3567649614337860e-01 1.3854989580590782e-02 + -1.6503198880810768e+00 6.6720964068435451e-01 6.4458541756448662e-02 + -1.8177263710860718e+00 6.2189033240784541e-01 1.1187699073590623e-01 + -1.9571940752835337e+00 5.9587279906725121e-01 1.5742973864063481e-01 + -1.9718251375270417e+00 4.1870946402493175e-01 3.8504887421332440e-01 + id 14640 + loc 1.6081560403108597e-02 3.8074511103332043e-03 401 + blend 0.0000000000000000e+00 + interp 4.2749576765018982e-01:3.2430317355748278e-01:1.0916913435528031e-01:3.5732788914792168e-01:1.0859119063646134e+00:2.8083941867359735e-01:2.1436709440952839e+00:2.8817206084427960e-01:2.9770173436592220e+00:4.2749149269251335e-01:3.2758856544639317e+00:3.9404362936376880e-01:3.9048331880330029e+00 + CVs 20 + -2.5366544480898795e-01 4.0749397749374972e-01 5.3862075755115188e-02 + -5.2294033363157111e-01 8.3202513078904494e-01 1.4666874528210455e-01 + -8.2317245668654593e-01 1.2649767296990664e+00 2.5331515278127453e-01 + -1.1615883337778756e+00 1.6982816487623260e+00 3.7080628127151211e-01 + -1.5347171176015562e+00 2.1253184657382476e+00 5.2054486375569753e-01 + -1.9270593115660526e+00 2.5343631820622350e+00 7.4825206961980628e-01 + -2.3150134125271573e+00 2.8865435260998025e+00 1.1141803107111699e+00 + -2.6628264610306376e+00 3.0806840821857553e+00 1.6699109664177878e+00 + -2.8927300239224634e+00 2.9671175102346270e+00 2.3661418390210427e+00 + -2.9491942852191064e+00 2.5409696457279036e+00 2.9899922073508209e+00 + -2.8977353962040397e+00 1.9717515396114329e+00 3.4152614776088077e+00 + -2.8484467771100070e+00 1.3992994359151121e+00 3.6832683619045916e+00 + -2.8749137974748700e+00 8.9651441289606748e-01 3.8927027104261351e+00 + -2.9826904183296397e+00 5.1886941699850420e-01 4.1390361132813833e+00 + -3.1375883170201497e+00 3.5919351138022138e-01 4.4884714716547931e+00 + -3.2901817738011112e+00 5.4588454150490828e-01 4.8948710750254083e+00 + -3.3359988888728895e+00 1.1594642346471926e+00 5.1192689269470835e+00 + -3.2178576095724800e+00 1.8435635053352777e+00 5.0048909767377889e+00 + -3.3230998494714781e+00 2.1153345280199076e+00 5.3462930818770316e+00 + id 14641 + loc 4.7472757101058960e-01 7.4699503183364868e-01 393 + blend 0.0000000000000000e+00 + interp 4.6914583120005127e-01:2.7083474590090778e-01:3.3334147416438775e-01:3.0930921998535632e-01:9.9986309038404542e-01:2.7121181431651187e-01:1.7275204043727714e+00:4.6914113974173927e-01:2.1791876498295251e+00:2.8432072032862910e-01:2.9757447658884355e+00:3.9501304192368142e-01:3.7288604261500944e+00 + CVs 20 + -2.7664808962168930e-01 3.4903152465501713e-01 -2.6047621773100504e-01 + -5.4055370129705560e-01 6.8779528720386685e-01 -4.9165975693838826e-01 + -7.8989075967612499e-01 1.0262069368371711e+00 -7.0888458016295752e-01 + -1.0294787780800470e+00 1.3651333625321209e+00 -9.1738692072749184e-01 + -1.2664221338273067e+00 1.7021608685180007e+00 -1.1159879384018021e+00 + -1.5080228572368179e+00 2.0392789136713141e+00 -1.3049656746555360e+00 + -1.7658166743238617e+00 2.3819778900660178e+00 -1.4874648881422901e+00 + -2.0649050336921846e+00 2.7306161105117974e+00 -1.6710118572349719e+00 + -2.4385274221635043e+00 3.0646255945022740e+00 -1.8646591128734613e+00 + -2.8967821394403206e+00 3.3517193502989828e+00 -2.0793676757769810e+00 + -3.4281600816449846e+00 3.5774525937563548e+00 -2.3418143538423077e+00 + -4.0314319663162985e+00 3.7241420440573023e+00 -2.6866719403703412e+00 + -4.6978133710307164e+00 3.7398241474052658e+00 -3.1160925410453508e+00 + -5.3684394412884195e+00 3.5799765184387438e+00 -3.5873810944500315e+00 + -5.9683501749432040e+00 3.2555501738768968e+00 -4.0534756386995889e+00 + -6.4797338544259597e+00 2.8033326363854547e+00 -4.4661179952220555e+00 + -6.9390489768668857e+00 2.2666794432995947e+00 -4.7507839866782824e+00 + -7.3512554439042841e+00 1.7207675728119551e+00 -4.8593534784401786e+00 + -7.6049303520056108e+00 1.2959016636731930e+00 -4.8830418088493106e+00 + id 14642 + loc 9.7018235921859741e-01 8.9154559373855591e-01 404 + blend 0.0000000000000000e+00 + interp 5.3880283601883827e-01:3.5510010416963833e-01:7.6912663603692855e-01:3.7684823028168513e-01:1.3838732607965432e+00:5.3879744799047813e-01:1.9998236686761468e+00:4.1096626053024166e-01:2.3895459215133603e+00:5.2843733468467258e-01:3.0013816427067836e+00:2.0917328297958535e-01:3.8300240215720058e+00 + CVs 20 + 4.3608984633564864e-02 1.2651618518615887e-01 -7.3247646709933528e-02 + 7.6367987311207960e-02 2.4721623697087419e-01 -1.0695091634147941e-01 + 1.1327408396048047e-01 3.6276735670939697e-01 -1.2288274275332264e-01 + 1.6726481967874701e-01 4.8088112549955314e-01 -1.3544437424315911e-01 + 2.4307699130902213e-01 5.9861116785564661e-01 -1.4459801934241368e-01 + 3.4423153066842582e-01 7.1170361550498118e-01 -1.4994741748684304e-01 + 4.7209674651744993e-01 8.1537519436425643e-01 -1.5080019697604091e-01 + 6.2452135928330399e-01 9.0637736752838405e-01 -1.4530169773163076e-01 + 7.9679739582706355e-01 9.8310855471678726e-01 -1.3144070946955949e-01 + 9.8577646919001638e-01 1.0431414807439496e+00 -1.1220330528795669e-01 + 1.1928923272594116e+00 1.0820724181799022e+00 -1.0028702930251004e-01 + 1.4198528493596414e+00 1.0962174928276953e+00 -1.1293912994229260e-01 + 1.6601635962170753e+00 1.0877050414984097e+00 -1.5688154855134456e-01 + 1.9025354222538140e+00 1.0623729778254736e+00 -2.2627952553566461e-01 + 2.1383751178278296e+00 1.0221940653846575e+00 -3.1441433684165249e-01 + 2.3622702039362014e+00 9.6428451651430114e-01 -4.2080713112292023e-01 + 2.5693810763921037e+00 8.8427699825353667e-01 -5.4750698202095438e-01 + 2.7544806407030227e+00 7.7955772380697308e-01 -6.8821298174736634e-01 + 2.9226112402614843e+00 7.3028069170466203e-01 -8.2950252659727985e-01 + id 14643 + loc 1.4175695832818747e-04 1.1137957125902176e-01 405 + blend 0.0000000000000000e+00 + interp 4.2917793367598889e-01:4.2917364189665214e-01:3.3564128527864068e-01:3.3360904931346508e-01:9.8529255499295354e-01:3.5636377205383407e-01:1.9766712057380591e+00:2.5370836157775611e-01:2.5751631986260515e+00:2.8566710569616277e-01:3.1659305139193856e+00:3.2002338770109073e-01:3.9835068256987358e+00 + CVs 20 + -6.3018650206525355e-03 7.3457048989738510e-02 1.9020922643896356e-02 + -4.6346784036869780e-02 9.9648028823476148e-02 5.2855148191314483e-02 + -9.5843415505492385e-02 1.5160544856141162e-01 1.1790756931893231e-01 + -1.3675348583074823e-01 2.1097055517037328e-01 1.8400593585146663e-01 + -1.6898999977182880e-01 2.7299834027710901e-01 2.4972745083386053e-01 + -1.9229125619499687e-01 3.3476225902567758e-01 3.1561312898179272e-01 + -2.0535827889875485e-01 3.9338652360248866e-01 3.8295989406627923e-01 + -2.0636288905895736e-01 4.4584029444412943e-01 4.5286600845981012e-01 + -1.9319111163519431e-01 4.8891983029369124e-01 5.2601162290647252e-01 + -1.6289761835492780e-01 5.1909488296953255e-01 6.0320487285897284e-01 + -1.1187084784062913e-01 5.3291158056737908e-01 6.8442392791032836e-01 + -3.6718898711073651e-02 5.2722917861002461e-01 7.6701923917966819e-01 + 6.4522777844505275e-02 4.9965367111862441e-01 8.4466772862788875e-01 + 1.9044857508239668e-01 4.4990195668087196e-01 9.0713546995908823e-01 + 3.3430255289078398e-01 3.8080149661134705e-01 9.4122318413917072e-01 + 4.8622941299068495e-01 2.9792163733998045e-01 9.3591512584756065e-01 + 6.3871812330522326e-01 2.0864912191863771e-01 8.8852522876532292e-01 + 7.8587375084284294e-01 1.2129481741786452e-01 8.0291475198895357e-01 + 9.0532942967207886e-01 2.9333335716093201e-02 6.4196536759931344e-01 + id 14644 + loc 6.9241052865982056e-01 7.6793432235717773e-01 399 + blend 0.0000000000000000e+00 + interp 3.6226067401675000e-01:2.6585413511378769e-01:3.6699503791322430e-01:3.6225705141000986e-01:1.0805829128726603e+00:2.6906391452510275e-01:2.0359729951826200e+00:3.1664701668214906e-01:2.8654446075899713e+00:2.6111760377811399e-01:3.3481530777901529e+00 + CVs 20 + -1.9281125769816959e-01 3.1540528844451965e-01 -2.1668092147530957e-01 + -3.5478972912240547e-01 6.0610621795156783e-01 -4.4871539978225777e-01 + -5.0562155158847244e-01 8.6337700365226433e-01 -7.0587926431440629e-01 + -6.5582721757148832e-01 1.0769786737831297e+00 -9.8796544615419379e-01 + -8.0777014145454107e-01 1.2363246565924895e+00 -1.2874703385302193e+00 + -9.5970373659252040e-01 1.3329120386635247e+00 -1.5915195705298533e+00 + -1.1105420798854437e+00 1.3635388743740371e+00 -1.8910826985214220e+00 + -1.2654325278436946e+00 1.3277772040854559e+00 -2.1866009031002727e+00 + -1.4277542554550642e+00 1.2338313672988128e+00 -2.4719661417469707e+00 + -1.5913139030335506e+00 1.1037146698809535e+00 -2.7263813924075380e+00 + -1.7537342442732169e+00 9.3827013669355175e-01 -2.9399968575467010e+00 + -1.9307117689447462e+00 6.8274752350943768e-01 -3.1346512690045190e+00 + -2.1545394765009185e+00 2.9173515538244232e-01 -3.3213249054539244e+00 + -2.4537874334873533e+00 -1.8029477295628493e-01 -3.4723984872526659e+00 + -2.8169531231510669e+00 -6.5674673694353847e-01 -3.5531191805091695e+00 + -3.2607612163732291e+00 -1.1629542757487101e+00 -3.5718538799145034e+00 + -3.9415880107147019e+00 -1.7338725850098196e+00 -3.5805877035192624e+00 + -4.9754553353975650e+00 -2.1016700714839756e+00 -3.6156053633295309e+00 + -5.6162394997234850e+00 -2.2264742116454395e+00 -3.5776208292524001e+00 + id 14645 + loc 9.2802500724792480e-01 5.9255030006170273e-02 1079 + blend 0.0000000000000000e+00 + interp 4.2984505896780661e-01:4.2984076051721698e-01:1.9495568180409095e-02:4.2566431135897653e-01:5.4811574241407257e-01:3.1059463688922850e-01:1.0248283642932641e+00:3.0944983009156657e-01:1.9988954387532090e+00:3.4630588200226375e-01:2.9905143554464804e+00:3.5256901797037454e-01:3.3909893170139433e+00 + CVs 20 + 5.1329920706123730e-02 4.0117922507903508e-01 -2.7691167731275182e-02 + 8.2044632590113853e-02 7.8034470660030786e-01 -1.3271180900942564e-02 + 9.7610678374084769e-02 1.1486086052316065e+00 2.7045399297714934e-02 + 9.4114763986053229e-02 1.5115746085078832e+00 9.5467826429094682e-02 + 5.9409615353184564e-02 1.8630571780891436e+00 2.0707224372948496e-01 + -2.0817090726026444e-02 2.1903024619614975e+00 3.7551292869562913e-01 + -1.5937027694196226e-01 2.4698911577904772e+00 6.0714684086622295e-01 + -3.5993598817866168e-01 2.6723395546802600e+00 8.9322681641840851e-01 + -6.1271595115716837e-01 2.7744811891156482e+00 1.2121176872987531e+00 + -8.9357880276503188e-01 2.7680584212568653e+00 1.5402179873515074e+00 + -1.1723358500429442e+00 2.6589339422035776e+00 1.8652855434324007e+00 + -1.4213861426712882e+00 2.4554712534136898e+00 2.1868409482176006e+00 + -1.6094817568730566e+00 2.1661738615754706e+00 2.5055080856496184e+00 + -1.6931812311879302e+00 1.8127299212464918e+00 2.8163884213702244e+00 + -1.6235048253959667e+00 1.4471576557068602e+00 3.1022671453773238e+00 + -1.3943956727793931e+00 1.1779375577625140e+00 3.3343504361633101e+00 + -1.1053106359175284e+00 1.1128278257486810e+00 3.5020599626894011e+00 + -8.7252190923776984e-01 1.2355884427555170e+00 3.6192071995788639e+00 + -4.8140748935564348e-01 1.1250815952429023e+00 3.8442434449091030e+00 + id 14646 + loc 6.0187304019927979e-01 6.1172157526016235e-01 393 + blend 0.0000000000000000e+00 + interp 4.1236079759948296e-01:4.1235667399150699e-01:4.5755370417798202e-03:2.7696593762242239e-01:8.2696199800009151e-01:2.6385714417591843e-01:1.6617014839061341e+00:3.9399627912869739e-01:2.2728151786223454e+00:2.6554897368490887e-01:3.1112036625875845e+00 + CVs 20 + -3.4055630701101502e-01 2.8293685816259145e-01 -1.4478622456758602e-01 + -6.3942745138865364e-01 5.5680023633259013e-01 -2.5316747109555776e-01 + -9.1714963549630457e-01 8.4643416835319907e-01 -3.5043923484636574e-01 + -1.1865720085359166e+00 1.1559339399734347e+00 -4.5277168892449032e-01 + -1.4644940302575191e+00 1.4718087819956722e+00 -5.6921105249815196e-01 + -1.7644986185378979e+00 1.7759890198372821e+00 -7.0118245588826866e-01 + -2.0881884354596805e+00 2.0553904295076926e+00 -8.3766541638848735e-01 + -2.4405704309730201e+00 2.2960860976983173e+00 -9.6260274731986806e-01 + -2.8539505057290597e+00 2.4689496019628292e+00 -1.0653036436266878e+00 + -3.3662398402561573e+00 2.5365996734467871e+00 -1.1493678159802205e+00 + -3.9597948312550328e+00 2.4905259154433428e+00 -1.2361293830155309e+00 + -4.5666775334401839e+00 2.3552902628231096e+00 -1.3394458315618967e+00 + -5.1405080841342121e+00 2.1487685085678940e+00 -1.4494955560448728e+00 + -5.6851385834681167e+00 1.8618530972829987e+00 -1.5627862514414370e+00 + -6.1860686926052617e+00 1.5012718327347272e+00 -1.6833059882245975e+00 + -6.5762966103474989e+00 1.1552346390071555e+00 -1.7780603949793670e+00 + -6.8224291883503581e+00 9.3157302441667000e-01 -1.8026514933914601e+00 + -6.9993487979114697e+00 7.8759796591939835e-01 -1.7775056701141276e+00 + -7.3724516680977761e+00 4.2576051957137784e-01 -1.7521250439001455e+00 + id 14647 + loc 2.0812426507472992e-01 3.0107793211936951e-01 401 + blend 0.0000000000000000e+00 + interp 3.4711013727818818e-01:2.6823885312216639e-01:9.2643058696151537e-01:3.3934551237895055e-01:1.8656376723678645e+00:2.7807010467420962e-01:2.6202289784836790e+00:2.9883140560537103e-01:3.2593732554264285e+00:3.4710666617681540e-01:3.9974784255359852e+00 + CVs 20 + -2.7853433354762935e-01 9.7481895756234144e-02 1.9554401950810521e-01 + -5.3084642385658687e-01 2.1386619676463386e-01 3.4111205741120926e-01 + -7.6673753071481332e-01 3.4530994166730677e-01 4.5290741971694398e-01 + -1.0010266661313698e+00 4.9672444411641459e-01 5.4814660978288821e-01 + -1.2454182363572861e+00 6.7417657727205316e-01 6.3583688096307012e-01 + -1.5168943453074319e+00 8.7815587959282793e-01 7.3509063443877209e-01 + -1.8281997687801379e+00 1.0982610224175506e+00 8.7880828855247806e-01 + -2.1795739230394369e+00 1.3116746223866931e+00 1.1038406473436231e+00 + -2.5583628814906705e+00 1.4904103147828276e+00 1.4328457130463044e+00 + -2.9424113786312627e+00 1.6063019650906076e+00 1.8688146098112326e+00 + -3.3095036935510840e+00 1.6350921596768262e+00 2.3945277895347026e+00 + -3.6447226428957253e+00 1.5566105071922318e+00 2.9787068647428918e+00 + -3.9286334740684437e+00 1.3543795654010293e+00 3.5854865161068536e+00 + -4.1225011708568573e+00 1.0340861150283973e+00 4.1826279356535290e+00 + -4.1637061655127683e+00 6.4479262831794115e-01 4.7504894844596119e+00 + -3.9923143396369567e+00 2.7501819421767959e-01 5.2670995481499912e+00 + -3.5987718112704421e+00 2.2676179915375960e-02 5.6873204737987084e+00 + -3.0759764445206090e+00 -7.3279141577684004e-02 5.9585130717866290e+00 + -2.7414837352571690e+00 -2.2017721764649223e-01 6.1630704160594192e+00 + id 14648 + loc 3.4367588162422180e-01 9.5146781206130981e-01 399 + blend 0.0000000000000000e+00 + interp 4.7849324300295865e-01:2.6030640107396558e-01:3.4654529631187581e-01:4.0989486710044654e-01:9.9373109372075574e-01:3.7630162265027856e-01:1.3773320742417832e+00:4.6942316681710416e-01:1.9460253945676311e+00:4.7848845807052864e-01:2.1008993054222991e+00:4.6265601412321677e-01:2.7154864282359616e+00:2.9005516735303788e-01:3.0411179141042428e+00:3.3146603646226397e-01:3.8733403600374179e+00 + CVs 20 + -1.5049637815709058e-01 3.2498399361075003e-01 -2.2371168288984505e-01 + -3.0943884463612092e-01 6.2955424113533553e-01 -5.0030065878256114e-01 + -4.8565212094324500e-01 8.9588748738163104e-01 -8.0954053018443750e-01 + -6.8028887445004160e-01 1.1005287252213714e+00 -1.1378692172320322e+00 + -8.9014303150092389e-01 1.2211685889782140e+00 -1.4728367567178764e+00 + -1.1059936970640558e+00 1.2402881271100863e+00 -1.7924443582428593e+00 + -1.3171408788545607e+00 1.1580426584887660e+00 -2.0769100988420144e+00 + -1.5239448021539590e+00 9.9362646781523067e-01 -2.3218994928273142e+00 + -1.7068906286839360e+00 7.6627411537561585e-01 -2.5147646607416099e+00 + -1.8034263793656709e+00 5.0312965475213611e-01 -2.6252310323732582e+00 + -1.8193247805948167e+00 2.3433878879019887e-01 -2.6673256504068998e+00 + -1.8894695624085538e+00 -8.5496506727282207e-02 -2.7264067550890694e+00 + -2.1035522325155154e+00 -5.0165428404235346e-01 -2.8383153722216283e+00 + -2.4158291692412321e+00 -9.4597016235982812e-01 -2.9377858434311306e+00 + -2.7591935146562969e+00 -1.3659434728943269e+00 -2.9767268787959327e+00 + -3.2758891703978152e+00 -1.7971918828125515e+00 -3.0155079530136373e+00 + -4.3011748140274451e+00 -2.1222893968198160e+00 -3.1335532233478074e+00 + -5.5759174408808123e+00 -1.9251718771888278e+00 -3.2568191954746872e+00 + -6.0433764320560108e+00 -1.9084603982461688e+00 -3.2419480391283986e+00 + id 14649 + loc 2.9315704107284546e-01 3.9971369504928589e-01 404 + blend 0.0000000000000000e+00 + interp 4.6783022980723377e-01:3.7386116691789500e-01:1.6225998295684418e-01:3.9990169279772270e-01:1.0023711861994331e+00:3.7880283382446639e-01:1.7987092935720437e+00:4.6782555150493571e-01:2.4361943172248841e+00:3.6230989454106144e-01:3.0832225449145767e+00:4.2998760192758428e-01:3.7907012001871245e+00 + CVs 20 + -5.2629072289223755e-02 1.3382679861754379e-01 -1.5289342806110473e-01 + -1.2946479343591255e-01 2.5934096611391233e-01 -2.9323515480437595e-01 + -2.2661310121705802e-01 3.8288747606235851e-01 -4.3997118460981399e-01 + -3.4835188728765731e-01 5.1153914428829028e-01 -6.0348110683447220e-01 + -4.9867837390109909e-01 6.4485235362803850e-01 -7.8084731567406229e-01 + -6.8254921344264874e-01 7.8007986290115472e-01 -9.6435217746999491e-01 + -9.0423679330100915e-01 9.1169296480200279e-01 -1.1408733813871084e+00 + -1.1632172897553168e+00 1.0314741430812711e+00 -1.2951362959914443e+00 + -1.4532261093614389e+00 1.1292599615829455e+00 -1.4128089435701272e+00 + -1.7644041019347254e+00 1.1933891694948997e+00 -1.4810560048225168e+00 + -2.0804548096085851e+00 1.2069010428017690e+00 -1.4941460351900442e+00 + -2.3820165247180065e+00 1.1610072374299811e+00 -1.4516254302793870e+00 + -2.6512436074174381e+00 1.0601358450843563e+00 -1.3663836336120088e+00 + -2.8892222818135163e+00 9.3118899619088780e-01 -1.2471278612161041e+00 + -3.1196431521536514e+00 8.1339059049515794e-01 -1.0749918532753642e+00 + -3.3437172427588964e+00 7.2034083006994920e-01 -8.2223784669937428e-01 + -3.5140266576937966e+00 6.2537206713233950e-01 -5.1674778792374088e-01 + -3.5965578427423264e+00 4.9790733817499944e-01 -2.4689525814115731e-01 + -3.7036230136764519e+00 4.3111237288042625e-01 -1.4619742573310968e-01 + id 14650 + loc 4.0745460987091064e-01 6.9116842746734619e-01 405 + blend 0.0000000000000000e+00 + interp 4.5941542502054944e-01:4.0248901120694547e-01:1.4407420678912086e-01:3.8253227711824395e-01:9.4511154806858078e-01:4.5941083086629925e-01:1.3603335990857759e+00:3.5505611393569952e-01:2.0406315901823393e+00:4.5516433105655474e-01:2.7758709023064325e+00:3.7514685222057359e-01:3.3928912641906055e+00 + CVs 20 + 6.4353784185889121e-02 2.0087735972906912e-01 5.5151260926942315e-02 + 4.2147089664177600e-02 2.9146879715963747e-01 9.5936142130576177e-02 + -3.1285313710218532e-02 3.5867338512749047e-01 1.2712562249053455e-01 + -1.0169509514303991e-01 4.1062540924659846e-01 1.4447043652673225e-01 + -1.7002954733641112e-01 4.4924274976890871e-01 1.4098214676926529e-01 + -2.3847901025120521e-01 4.8652632623451675e-01 1.1554237931008665e-01 + -3.1101432837662291e-01 5.3809161302042285e-01 8.3185341552861045e-02 + -3.9211581311501509e-01 6.0841741629715351e-01 7.1511848951137755e-02 + -4.8317728076775673e-01 6.8788774637592731e-01 1.0213131868885732e-01 + -5.8210469301374546e-01 7.6462718155964682e-01 1.8216908421323541e-01 + -6.8481845863403934e-01 8.3310731646340441e-01 3.0789804222439698e-01 + -7.8644606582508403e-01 8.9418781591646013e-01 4.6994110130060690e-01 + -8.8455376751625048e-01 9.4732280447785122e-01 6.6177200390827540e-01 + -9.8077358907224332e-01 9.8175331380949782e-01 8.8484772427713076e-01 + -1.0766028947514275e+00 9.8813075826038599e-01 1.1406708882421013e+00 + -1.1681049267332848e+00 9.7823895123604410e-01 1.4242997158532975e+00 + -1.2477445800012950e+00 9.7862999757224056e-01 1.7272983419595898e+00 + -1.3096345226578059e+00 1.0097457786015003e+00 2.0328711205148049e+00 + -1.3345466208678110e+00 1.1606315251014097e+00 2.2229546210078106e+00 + id 14651 + loc 4.6355086565017700e-01 3.7509679794311523e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4539896288212477e-01:3.2670839684985253e-01:1.4207366245733488e-02:4.4539450889249599e-01:9.4287589937175520e-01:4.3118211100547593e-01:1.1661439955329735e+00:3.7170138603606545e-01:1.7917404266067138e+00:3.5206490177914829e-01:2.7939696632947175e+00:3.9843212954911922e-01:3.3616327204169716e+00 + CVs 20 + 1.4142111075321212e-01 4.6414576977321026e-01 -1.0278602052470331e-03 + 1.9723153583758052e-01 8.9198473074962659e-01 -7.1282830393897295e-02 + 1.9553653645623598e-01 1.3080765729928290e+00 -1.7035487387449000e-01 + 1.3708039852100562e-01 1.7092408400103767e+00 -2.9140882697207843e-01 + 7.6035867133894541e-03 2.0709027368558814e+00 -4.3843662560033275e-01 + -2.0992605890429050e-01 2.3514139349930812e+00 -6.0842810603505948e-01 + -5.1079876647631728e-01 2.5009346260703316e+00 -7.8546399880346951e-01 + -8.5457637378259610e-01 2.4949983564508234e+00 -9.4436782876600556e-01 + -1.1887380097037286e+00 2.3452212290303507e+00 -1.0663365342232018e+00 + -1.4738667610933034e+00 2.0864377829191643e+00 -1.1474690828683347e+00 + -1.6924879367235615e+00 1.7572746522035452e+00 -1.1949307718837316e+00 + -1.8407537591825245e+00 1.3879062861757161e+00 -1.2200333450011687e+00 + -1.9177778668809558e+00 1.0005473337034698e+00 -1.2353893657850041e+00 + -1.9164617042425829e+00 6.1352940348865692e-01 -1.2530297473120635e+00 + -1.7966856618736493e+00 2.4665178017269607e-01 -1.2731832295319490e+00 + -1.4405878530488041e+00 -2.8174347572407443e-02 -1.2745735392677928e+00 + -8.2300425401457966e-01 -6.1093699478147467e-03 -1.2488512399833933e+00 + -3.1912317258079620e-01 2.2317717937995146e-01 -1.2377792214402878e+00 + -1.1417156352114477e-01 -1.9298945514341748e-02 -1.2284199076094018e+00 + id 14652 + loc 5.9910172224044800e-01 9.3676462769508362e-02 393 + blend 0.0000000000000000e+00 + interp 4.4476702098803783e-01:2.6190384711443671e-01:2.5264884145510347e-01:4.4476257331782798e-01:1.0000456683994228e+00:2.5158996974445985e-01:1.9365233269990698e+00:3.1948036909754018e-01:2.4583333568725050e+00:2.5762818853152730e-01:3.0045235216906234e+00:3.5529664948404016e-01:3.6202004073417311e+00 + CVs 20 + 4.0530660932238372e-01 3.7235645419125107e-01 1.5846263996828114e-01 + 7.8920521026551416e-01 7.3208146102810989e-01 3.4318963547121595e-01 + 1.1515573003852624e+00 1.0884141852698237e+00 5.6201949938875129e-01 + 1.4846459387566280e+00 1.4114147474943080e+00 8.2672979436487060e-01 + 1.7837051206478438e+00 1.6670661258999051e+00 1.1443423522847977e+00 + 2.0533167551342317e+00 1.8570700584417210e+00 1.5161605203361899e+00 + 2.2953990758673015e+00 1.9979389132766021e+00 1.9320700768039789e+00 + 2.5148861724498586e+00 2.0995921544908054e+00 2.3684464668796537e+00 + 2.7250663161148942e+00 2.1648229319569094e+00 2.8035213766911480e+00 + 2.9371251801782248e+00 2.1872108005355861e+00 3.2235399239291738e+00 + 3.1600764886532815e+00 2.1571304419148798e+00 3.6217843529547897e+00 + 3.4114726274948364e+00 2.0726766706827791e+00 3.9973797444887520e+00 + 3.7049845483603407e+00 1.9212110186124240e+00 4.3406597292869096e+00 + 4.0472561211965861e+00 1.6927956962288948e+00 4.6101224983606945e+00 + 4.4412229562495362e+00 1.4041163915902097e+00 4.7491587190845364e+00 + 4.8913817259424031e+00 1.1180777802004012e+00 4.7333273181323445e+00 + 5.3838117960928580e+00 9.0703680697232691e-01 4.5915779640943679e+00 + 5.8960362578134156e+00 7.2286619584464606e-01 4.3766990637571572e+00 + 6.4358230325039267e+00 3.6157370412121415e-01 4.1455630149836944e+00 + id 14653 + loc 5.6767022609710693e-01 5.7525956630706787e-01 399 + blend 0.0000000000000000e+00 + interp 4.0124094239856167e-01:2.6440554859870491e-01:8.0898033238594602e-01:3.8643209421532965e-01:1.1160864803304378e+00:2.7340842231045576e-01:1.9971072303705451e+00:2.7845547491964229e-01:3.0036439359687037e+00:4.0123692998913768e-01:3.9786259123565380e+00 + CVs 20 + -3.1475108542594554e-02 3.0908313378638119e-01 -3.5077808003383687e-01 + -9.2882754266292680e-02 5.8635716893843093e-01 -7.1104168183092464e-01 + -1.4565207363280430e-01 8.1241958984333440e-01 -1.0934261546444541e+00 + -1.9389246984100073e-01 9.9729327817495306e-01 -1.5004502302530356e+00 + -2.5347706539315129e-01 1.1522409521129333e+00 -1.9231365367539877e+00 + -3.3560607155248157e-01 1.2782398342265910e+00 -2.3474145720735908e+00 + -4.4661224800291344e-01 1.3657047341035160e+00 -2.7568264795791038e+00 + -5.8807326285724226e-01 1.3956340967888698e+00 -3.1308254893379339e+00 + -7.5080682976099300e-01 1.3440392087975275e+00 -3.4406396937498256e+00 + -9.1028031857903469e-01 1.1976074056594992e+00 -3.6498748935385028e+00 + -1.0439497586918915e+00 9.8337890512006598e-01 -3.7378610740743676e+00 + -1.1661848721978512e+00 7.6081904612289741e-01 -3.7527522130281410e+00 + -1.3170903922333119e+00 5.4895033248675840e-01 -3.7802439989609584e+00 + -1.5224290356623098e+00 3.3654429188388735e-01 -3.8789211575903004e+00 + -1.7839055484496689e+00 1.3311460643213124e-01 -4.0970341795879621e+00 + -2.0475496181061450e+00 -1.9069737762091865e-02 -4.4708473142509035e+00 + -2.1965815795810943e+00 -6.3029021550092157e-02 -5.0087917004108835e+00 + -2.1778950584933168e+00 2.4849493897119324e-02 -5.5785120351303128e+00 + -2.2899011004384358e+00 4.1665125207306919e-02 -5.9178464737597594e+00 + id 14654 + loc 3.2309267669916153e-02 2.4660063907504082e-02 404 + blend 0.0000000000000000e+00 + interp 4.4651245118516047e-01:2.3027512367684633e-01:5.3042362193798231e-01:3.9887725803703045e-01:1.1935471137518012e+00:4.4650798606064862e-01:1.7622418836639666e+00:3.1061526400640266e-01:2.0630532564536121e+00:3.6176060541297145e-01:2.9991007023307805e+00:4.1515267817670393e-01:3.6891862700898295e+00 + CVs 20 + -7.5779416965680219e-02 1.4920119500291501e-01 -6.3863812523264341e-03 + -1.8138696558462483e-01 3.1254488353279053e-01 -4.0742353685088759e-02 + -2.9770598049206465e-01 4.7485251517808558e-01 -9.0181044259132565e-02 + -4.1360047305547232e-01 6.2637306736705989e-01 -1.4734171507385355e-01 + -5.3023023407277670e-01 7.6946624741099678e-01 -2.0835354174683182e-01 + -6.5068917166083451e-01 9.0982086695851661e-01 -2.6598794940396975e-01 + -7.7892102677394948e-01 1.0540566031765604e+00 -3.0989419767367155e-01 + -9.1598836729706934e-01 1.2047114457344126e+00 -3.2926623564799884e-01 + -1.0585522786007111e+00 1.3585939313660473e+00 -3.1707298061183647e-01 + -1.2018951635116535e+00 1.5100852566538929e+00 -2.7232541788694625e-01 + -1.3435726042435212e+00 1.6550210337596138e+00 -1.9751715844435902e-01 + -1.4809344172178607e+00 1.7887924087733724e+00 -9.8738565587039195e-02 + -1.6138194300623709e+00 1.9103713655930934e+00 1.8406930050980153e-02 + -1.7431955885920885e+00 2.0204528429690991e+00 1.5044034306162768e-01 + -1.8727382302833511e+00 2.1202985474465890e+00 2.9967039478112478e-01 + -2.0050119383681175e+00 2.2137884308896951e+00 4.7760962076476543e-01 + -2.1310958491643648e+00 2.3104594970100392e+00 7.0112892152103423e-01 + -2.2314159784152925e+00 2.4124151985934614e+00 9.7751967626473235e-01 + -2.2819258850324142e+00 2.4581448076556787e+00 1.1321823801301014e+00 + id 14655 + loc 6.6416251659393311e-01 7.9143375158309937e-01 405 + blend 0.0000000000000000e+00 + interp 4.7830860993403718e-01:4.7830382684793787e-01:3.0483496144524136e-01:4.4937471363002401e-01:8.7562029509540884e-01:3.6716214570780031e-01:1.3738661002216506e+00:4.4440255144330698e-01:2.0108721739644571e+00:3.8830891811002366e-01:2.7084566682416877e+00:2.7579298379845030e-01:3.1345411297948442e+00:3.4237546814585368e-01:3.9923013652862420e+00 + CVs 20 + 2.4013520900668173e-01 3.2138866704733587e-01 -1.0794558196894172e-01 + 3.4186337822880347e-01 5.5580001728828543e-01 -2.1143712005357915e-01 + 4.1670296772398813e-01 7.3258093667471402e-01 -3.0123571293236417e-01 + 4.9661257850544005e-01 9.0764148825963242e-01 -3.7646910990432264e-01 + 5.8020821534848843e-01 1.0909807946876913e+00 -4.2362148968610946e-01 + 6.7048170643278793e-01 1.2918026322929164e+00 -4.1714710477173594e-01 + 7.7234248447738940e-01 1.5001542630207654e+00 -3.2075766017584267e-01 + 8.8462588879733417e-01 1.6684403342146719e+00 -1.2794510192497061e-01 + 9.9725487415335845e-01 1.7635563956064482e+00 1.0138793085306264e-01 + 1.1028755415391713e+00 1.8113338680900699e+00 3.1339576662539004e-01 + 1.1995166912475008e+00 1.8443327336509916e+00 5.0610705053369309e-01 + 1.2857983984921639e+00 1.8740352941278973e+00 6.9835125324338221e-01 + 1.3584005221927591e+00 1.9053842670815115e+00 8.9745486761765392e-01 + 1.4082981719714869e+00 1.9572732714141372e+00 1.0830453168738110e+00 + 1.4205925160680102e+00 2.0536142663195212e+00 1.2243772129505293e+00 + 1.3841792844913403e+00 2.1906640004262381e+00 1.3154862115703518e+00 + 1.3032733634747036e+00 2.3410673530592381e+00 1.3809183996558241e+00 + 1.1949077765056302e+00 2.4835667720938481e+00 1.4484427454531743e+00 + 1.1850432455230893e+00 2.5884785844637337e+00 1.6595390107713206e+00 + id 14656 + loc 3.0608865618705750e-01 7.2204835712909698e-02 401 + blend 0.0000000000000000e+00 + interp 4.6942786109571510e-01:2.6102130501169024e-01:5.9693654169135080e-05:4.6942316681710416e-01:9.4462322218409711e-01:2.9342151014618584e-01:1.4069493172786576e+00:4.5884897433019106e-01:2.1957449858464972e+00:2.6714691788193190e-01:2.9959804502465337e+00 + CVs 20 + -1.5862700470121197e-01 3.9400109932200877e-01 8.5334496633376000e-02 + -3.6006426642521766e-01 7.8111550115620221e-01 1.8278871199965882e-01 + -5.8233479159506640e-01 1.1475393927207267e+00 2.9362152624302168e-01 + -8.2333017663872665e-01 1.4813610370902375e+00 4.2322049406932261e-01 + -1.0866998765084817e+00 1.7700513934255471e+00 5.8138623031038361e-01 + -1.3694977668067949e+00 1.9990547086183272e+00 7.7822465298564802e-01 + -1.6588478272617400e+00 2.1548695855701703e+00 1.0139004765191499e+00 + -1.9351884129145032e+00 2.2363268083038581e+00 1.2751208158944540e+00 + -2.1882182206235252e+00 2.2550437711324132e+00 1.5503738716939219e+00 + -2.4214480536331773e+00 2.2181525766033738e+00 1.8375005468808441e+00 + -2.6341747008787650e+00 2.1246669642536711e+00 2.1216433458439186e+00 + -2.8115318699052869e+00 1.9895380733415915e+00 2.3713421285486080e+00 + -2.9508116628883925e+00 1.8408774713616696e+00 2.5830523292431580e+00 + -3.0744267764204443e+00 1.6925459391735205e+00 2.7989746511860347e+00 + -3.1906226220014950e+00 1.5482974788961592e+00 3.0528710202162324e+00 + -3.2612426534053740e+00 1.4223320761792841e+00 3.2657449293201841e+00 + -3.2441645247486282e+00 1.3144503246576043e+00 3.2329395193911163e+00 + -3.1834012345259057e+00 1.1284052392341759e+00 3.0461708924948292e+00 + -3.1834913041254498e+00 1.2912566637561960e+00 3.3558883358520166e+00 + id 14657 + loc 3.5402107238769531e-01 8.7914812564849854e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4439786730727360e-01:4.4439342332860055e-01:5.5616561769761752e-01:3.4956674268566623e-01:1.3675877730536925e+00:3.1321360842827728e-01:2.0355673591436769e+00:3.4741990645015858e-01:3.0809947079576863e+00:3.9283482126706348e-01:3.9993306055711866e+00 + CVs 20 + 1.6210925020429415e-01 4.2529071112339645e-01 8.5334476074785892e-02 + 3.3678058032803604e-01 7.9205286501131322e-01 9.4270219740929528e-02 + 5.1351114794309816e-01 1.1263466480497879e+00 5.9719828310277057e-02 + 6.8480525062639086e-01 1.4273738045139217e+00 -9.3954766149059177e-03 + 8.4301572005206749e-01 1.6807234641908375e+00 -1.1487606145302309e-01 + 9.7394856434180688e-01 1.8667559529088043e+00 -2.5476445626696220e-01 + 1.0629491081854476e+00 1.9765753124269665e+00 -4.1627010320728164e-01 + 1.1049501303109930e+00 2.0234075582586191e+00 -5.7982596686206656e-01 + 1.1049292238793553e+00 2.0306705301118733e+00 -7.3119671625436611e-01 + 1.0744643255222952e+00 2.0200194483825094e+00 -8.6820008268996995e-01 + 1.0263530899106539e+00 2.0048173013331754e+00 -9.9899310714059308e-01 + 9.7026120071190902e-01 1.9888976227846746e+00 -1.1350183910904823e+00 + 9.1273952897384336e-01 1.9686440469697124e+00 -1.2871751378176772e+00 + 8.5792621959636017e-01 1.9352507342067398e+00 -1.4635319645522706e+00 + 8.0835978504998640e-01 1.8789677241711247e+00 -1.6671798222250360e+00 + 7.6836655690432210e-01 1.7889978070924488e+00 -1.9037782696694070e+00 + 7.4512555403990777e-01 1.6194127049904552e+00 -2.1853292903608219e+00 + 7.3066027034697056e-01 1.3276499801467283e+00 -2.4320006830598944e+00 + 6.9986849288893538e-01 1.1645670988181973e+00 -2.4839891160484076e+00 + id 14658 + loc 1.7569263279438019e-01 8.0926686525344849e-01 399 + blend 0.0000000000000000e+00 + interp 2.9119258497148520e-01:2.7449288221086138e-01:8.6488934684790497e-01:2.6182763610255694e-01:1.8626911859374413e+00:2.9118967304563548e-01:2.9913414049220677e+00:2.6516132813129206e-01:3.8424905890607932e+00 + CVs 20 + -1.2336958949978818e-01 3.5034467341636971e-01 -3.6789247093879202e-01 + -2.7664347890340141e-01 6.7888315398139443e-01 -7.2543910097392661e-01 + -4.5320434951772243e-01 9.7704464819084447e-01 -1.0882581672304843e+00 + -6.5799898368378662e-01 1.2466261541078871e+00 -1.4578537668361524e+00 + -9.0303922215344778e-01 1.4914745220631631e+00 -1.8223806631501960e+00 + -1.1997295694219190e+00 1.7067734109148707e+00 -2.1563329998100400e+00 + -1.5423409173593587e+00 1.8692887674085252e+00 -2.4189392716203901e+00 + -1.8878516677295727e+00 1.9458754005823620e+00 -2.5690644399926197e+00 + -2.1778909817410179e+00 1.9380636442282291e+00 -2.6001401672633442e+00 + -2.4238074905714266e+00 1.8814509142679809e+00 -2.5547542899125482e+00 + -2.6810572276003652e+00 1.7723755501403566e+00 -2.4669023292750376e+00 + -2.9777821710524006e+00 1.5741674876049887e+00 -2.3526443466892579e+00 + -3.3129353907215546e+00 1.2620603033142703e+00 -2.2425890049154500e+00 + -3.6684279460264637e+00 8.7135259692436973e-01 -2.1882798020994807e+00 + -4.0256989932020684e+00 4.9356719381182035e-01 -2.2198941116096034e+00 + -4.3783887891406712e+00 2.0205657131599769e-01 -2.3219500074663126e+00 + -4.7301197298254865e+00 1.3867346770876001e-02 -2.4623314573771582e+00 + -5.0716012269995874e+00 -1.6844978677252081e-02 -2.6100656774097590e+00 + -5.2782075371724142e+00 2.5726059290135495e-01 -2.6913530568827135e+00 + id 14659 + loc 9.0836995840072632e-01 6.1211574077606201e-01 393 + blend 0.0000000000000000e+00 + interp 3.9194056161410745e-01:2.6116091853774021e-01:6.8710178087122420e-01:3.9193664220849134e-01:1.4646400708742162e+00:2.6400045756711682e-01:2.2263611398384482e+00:3.5014839335711095e-01:2.5752227323314356e+00:2.5133621399065459e-01:3.5229089103703428e+00 + CVs 20 + -2.0071908712392172e-01 1.8100050670798742e-01 -8.2342845527549668e-02 + -3.9979509579353090e-01 3.7730528946145503e-01 -1.9795909142497531e-01 + -5.9761991398764547e-01 5.8643773936307009e-01 -3.2046988438513901e-01 + -7.9669658558746459e-01 8.0655961281375577e-01 -4.3697099906209386e-01 + -9.9822178245089443e-01 1.0297572369987256e+00 -5.4790641639595994e-01 + -1.2020413063080300e+00 1.2427273447506730e+00 -6.5782135994250268e-01 + -1.4042372092308786e+00 1.4308483606248681e+00 -7.7388261569547212e-01 + -1.5989177923405351e+00 1.5821240686791147e+00 -8.9991832790890447e-01 + -1.7789786401386585e+00 1.6879332244792014e+00 -1.0279659545056874e+00 + -1.9286520900115576e+00 1.7402298419700122e+00 -1.1360371406088512e+00 + -2.0238351541620085e+00 1.7427660529335758e+00 -1.1956894080555243e+00 + -2.0604239712321633e+00 1.7272931813883812e+00 -1.1970648638253230e+00 + -2.0704937702752853e+00 1.7160357076574089e+00 -1.1777615987714700e+00 + -2.0830183071890267e+00 1.6753171147963624e+00 -1.1876427133114147e+00 + -2.0968171928612374e+00 1.5640270389225848e+00 -1.2355002689986965e+00 + -2.1052158551631290e+00 1.3650167815635337e+00 -1.3132705046479327e+00 + -2.1322427479241113e+00 1.0661125441859967e+00 -1.4202409574624100e+00 + -2.2350722250536781e+00 7.1335706558962753e-01 -1.5376386286101229e+00 + -2.3679359642788658e+00 4.7689198908901209e-01 -1.6010095482635216e+00 + id 14660 + loc 4.0257248282432556e-01 2.0061364769935608e-01 405 + blend 0.0000000000000000e+00 + interp 4.2515882922715548e-01:3.5571286880766551e-01:5.1396298344285818e-01:3.2279518025203180e-01:1.4953326619746943e+00:2.6389506403112351e-01:2.1301696081078347e+00:4.2515457763886322e-01:2.7284795223734895e+00:3.2344027907608541e-01:3.2144716416138852e+00:4.1285175376849476e-01:3.9581330809436115e+00 + CVs 20 + 4.2611086003607773e-02 1.0936129090510424e-01 4.8737898232729823e-02 + 7.5068795238904654e-02 2.0458809416703988e-01 1.1973030941216442e-01 + 1.1660215825602312e-01 2.9018211691842627e-01 1.9386604265757326e-01 + 1.7455829247942853e-01 3.6967277978872459e-01 2.6567313866632425e-01 + 2.4865899686130077e-01 4.4187308896829386e-01 3.3452390623563238e-01 + 3.3890188424958223e-01 5.0582301874166835e-01 3.9903795315582613e-01 + 4.4579235838484615e-01 5.6075854026836136e-01 4.5776487189688903e-01 + 5.6983393009750194e-01 6.0544528505871520e-01 5.0874746716268626e-01 + 7.1131186393915247e-01 6.3775317686938204e-01 5.4908306574932197e-01 + 8.6991532624073153e-01 6.5515044865036287e-01 5.7569794383289663e-01 + 1.0454301889043838e+00 6.5504819200050068e-01 5.8665420819727154e-01 + 1.2377446977534881e+00 6.3384230010062026e-01 5.8109319873002718e-01 + 1.4415897736611938e+00 5.8817611306660744e-01 5.5762448001141574e-01 + 1.6453970259663100e+00 5.2220820472195528e-01 5.1368355089638840e-01 + 1.8424888037052249e+00 4.5104117672917737e-01 4.4742657690390719e-01 + 2.0364592308998000e+00 3.9018894011918842e-01 3.5882703689881046e-01 + 2.2327727964237942e+00 3.4681404475632949e-01 2.4947070249156350e-01 + 2.4388220069780604e+00 3.2166638037770923e-01 1.2420126744367160e-01 + 2.7361967163396028e+00 2.7975066953104816e-01 1.6307390397425656e-02 + id 14661 + loc 1.0076515376567841e-01 9.6509444713592529e-01 404 + blend 0.0000000000000000e+00 + interp 5.2888999922611202e-01:4.9370786091472074e-01:9.0613451937649137e-02:4.8466752627613580e-01:7.2473279457131645e-01:2.5703380248747476e-01:1.2234898542992059e+00:3.8649884680908386e-01:2.1171807584523781e+00:5.2888471032611983e-01:2.8226195422333156e+00:4.7080553937659431e-01:3.0984589507534954e+00:3.4541808224178921e-01:3.9075619545378872e+00 + CVs 20 + 6.2324164949824179e-02 1.2334267150812424e-01 2.0055887625836270e-02 + 1.0560563594936935e-01 2.4905967217030944e-01 5.8445159754414278e-02 + 1.6214844541449491e-01 3.6453856598501655e-01 9.4560066422300110e-02 + 2.3794231724612364e-01 4.7989949878842808e-01 1.3124963365007553e-01 + 3.3324787137881023e-01 5.9429296153730493e-01 1.6494169111150597e-01 + 4.4670069317653965e-01 7.0696615447148026e-01 1.9145083059178097e-01 + 5.7570049705770987e-01 8.1713698508436550e-01 2.0670269414524814e-01 + 7.1657016748425029e-01 9.2371123883027040e-01 2.0723330184756561e-01 + 8.6470710910486803e-01 1.0252393451598230e+00 1.9046404381328935e-01 + 1.0149338439714006e+00 1.1197671254712795e+00 1.5419912578104222e-01 + 1.1617552488601459e+00 1.2044657246674626e+00 9.5543545192814050e-02 + 1.2991810664745933e+00 1.2756221107595291e+00 1.0888504762106954e-02 + 1.4206019805248045e+00 1.3303750505385905e+00 -1.0068370402506052e-01 + 1.5189366301945062e+00 1.3703396433175321e+00 -2.3431014806841427e-01 + 1.5851816486164678e+00 1.4052241202211289e+00 -3.8153529856961804e-01 + 1.6091034230855341e+00 1.4494183986202498e+00 -5.3352191777169478e-01 + 1.5808924014931789e+00 1.5122681367022806e+00 -6.8352714500726464e-01 + 1.4934435004992754e+00 1.5915286433573370e+00 -8.2591623330569619e-01 + 1.4951068429424319e+00 1.6884910079420825e+00 -8.8720626936972757e-01 + id 14662 + loc 3.7620180845260620e-01 6.8174630403518677e-01 401 + blend 0.0000000000000000e+00 + interp 3.8719581335619607e-01:2.9106895037772684e-01:1.6871416219879953e-01:2.7249823661604200e-01:1.0391476659882370e+00:3.8719194139806251e-01:1.9898204952876803e+00:2.6563577011910455e-01:2.9566262241652694e+00:2.9047251542757024e-01:3.5759585279160300e+00 + CVs 20 + -6.5562931305004929e-02 3.1758882989229337e-01 -3.0289315406389994e-01 + -1.2818479883723444e-01 6.5599498104596299e-01 -6.1851433576159331e-01 + -2.0442974323719909e-01 9.9745273896815800e-01 -9.3647352159477637e-01 + -2.9648252841509765e-01 1.3178483762566962e+00 -1.2604929899402009e+00 + -4.1207713897850845e-01 1.6009794623244669e+00 -1.5975506354330717e+00 + -5.7337670705963706e-01 1.8411400095613157e+00 -1.9367505630888577e+00 + -7.9746540138679045e-01 2.0365736811660957e+00 -2.2525924942157727e+00 + -1.0820915874221424e+00 2.1862917936990161e+00 -2.5220693892818002e+00 + -1.4125511408288440e+00 2.2937795151105176e+00 -2.7352746350797381e+00 + -1.7755559820979980e+00 2.3667625129177905e+00 -2.8971871848249102e+00 + -2.1569296527304287e+00 2.4117341710400542e+00 -3.0182535445853738e+00 + -2.5467781976120616e+00 2.4321740276477755e+00 -3.1138838160261120e+00 + -2.9345334985709668e+00 2.4291303353122728e+00 -3.2002746015572874e+00 + -3.2974961160881486e+00 2.4063086644957457e+00 -3.2927521027069870e+00 + -3.6138642963431145e+00 2.3642372557331504e+00 -3.3824582858615737e+00 + -3.8672574443392516e+00 2.2925745040239649e+00 -3.3900629925786139e+00 + -4.0706486308651124e+00 2.1632943957240265e+00 -3.2418912359027869e+00 + -4.2583685359950856e+00 1.9828664607086393e+00 -3.0929777493774488e+00 + -4.3141585282044534e+00 1.9171795553797326e+00 -3.2776151797253266e+00 + id 14663 + loc 8.1171703338623047e-01 3.7910249829292297e-01 399 + blend 0.0000000000000000e+00 + interp 4.4620551161033761e-01:2.5612263867673729e-01:9.4542083643160102e-01:4.4620104955522155e-01:1.1248303330504330e+00:2.9481750641735593e-01:2.0246262238132697e+00:2.6514341666633723e-01:2.8719119673607141e+00:2.5692898849751300e-01:3.6591616211582463e+00 + CVs 20 + 2.6869928017794154e-01 3.4919145257297257e-01 1.8964681836252389e-01 + 5.3623679974832805e-01 6.8593532713129146e-01 3.8114856723711205e-01 + 7.8240882979043080e-01 1.0064003187280686e+00 6.2282631944195965e-01 + 9.9960714756140490e-01 1.2989843035859205e+00 9.0516234262301909e-01 + 1.1907979105305273e+00 1.5609301848967290e+00 1.2060153130669031e+00 + 1.3580531892679424e+00 1.7929435454531408e+00 1.5136300087802508e+00 + 1.5011149022626586e+00 1.9949694143680583e+00 1.8241036294079545e+00 + 1.6198182724289365e+00 2.1670053784576484e+00 2.1391104309300819e+00 + 1.7176815771410303e+00 2.3100006144047116e+00 2.4679997591881548e+00 + 1.8048263022710778e+00 2.4216398528385366e+00 2.8271298672384360e+00 + 1.8937269304591129e+00 2.4872198217516095e+00 3.2263342271163458e+00 + 1.9862096243997667e+00 2.4795818081732923e+00 3.6466789099696819e+00 + 2.0713652599815626e+00 2.3838913665139385e+00 4.0446331685444035e+00 + 2.1379241698723592e+00 2.2134018188420361e+00 4.3767567450144149e+00 + 2.1804275899336534e+00 1.9963806528474464e+00 4.6061344439568463e+00 + 2.2261021673184334e+00 1.7543426921392729e+00 4.7306484824400101e+00 + 2.3341771134197646e+00 1.4990289698715127e+00 4.7755448626136747e+00 + 2.5180893153276118e+00 1.2403839158762344e+00 4.8174441122772205e+00 + 2.5164864499251069e+00 1.1431930168077074e+00 5.1789133095776281e+00 + id 14664 + loc 7.6096808910369873e-01 6.2395763397216797e-01 393 + blend 0.0000000000000000e+00 + interp 3.7407131098016544e-01:2.5814837617259301e-01:6.6562716467051442e-01:3.7406757026705567e-01:1.5423425013397307e+00:2.6397005367269244e-01:2.2573126368244392e+00:2.7785358028371065e-01:3.4444698930905009e+00 + CVs 20 + -3.1937488785490026e-01 3.2285323250022258e-01 -2.8498867198583683e-01 + -6.2064995279991897e-01 6.4879104007683930e-01 -5.4108369995597361e-01 + -9.1884696452175785e-01 9.9875284514338891e-01 -8.0511054572228025e-01 + -1.2293410880930873e+00 1.3668418181166360e+00 -1.0931371930393483e+00 + -1.5711547656398097e+00 1.7324168587605926e+00 -1.4036947004393956e+00 + -1.9622537435481067e+00 2.0730575471795891e+00 -1.7251934848239303e+00 + -2.4163397716700450e+00 2.3588450367366849e+00 -2.0353596212843859e+00 + -2.9391348672828745e+00 2.5489466073059477e+00 -2.3081229870933884e+00 + -3.5209271967188487e+00 2.6165467985123616e+00 -2.5337738781160679e+00 + -4.1473750750820235e+00 2.5675873262416955e+00 -2.7327662169360680e+00 + -4.8003782816006000e+00 2.4083238247735554e+00 -2.9211078431926065e+00 + -5.4425857806739151e+00 2.1278106453709702e+00 -3.0770815488045185e+00 + -6.0296355024046990e+00 1.7243415144131120e+00 -3.1779792098406316e+00 + -6.5387471113397009e+00 1.2182268981132278e+00 -3.2485856462335301e+00 + -6.9657849219805579e+00 6.4709092800970147e-01 -3.3089769750642075e+00 + -7.3227029947842883e+00 9.2563115496703041e-02 -3.2963696714019539e+00 + -7.6422113553228570e+00 -3.6503623648097916e-01 -3.1533045661795933e+00 + -7.9684585762587234e+00 -7.8140073802943455e-01 -2.9699629907622658e+00 + -8.4205238979501758e+00 -1.3899245041828416e+00 -3.0238702610506336e+00 + id 14665 + loc 1.2890697456896305e-02 5.5803811550140381e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5972124003723985e-01:2.9669475016974611e-01:1.7681255236789872e-01:4.5971664282483948e-01:9.5830837382707601e-01:4.2286418314484425e-01:1.3567961672929643e+00:3.3960643795493878e-01:2.0030020337546319e+00:3.6119219259569041e-01:2.7856565967870193e+00:3.3702966461614370e-01:3.6314505401115214e+00 + CVs 20 + -3.0920251580618896e-02 4.3980614435422932e-01 3.2466683585997441e-01 + -3.7018352355068618e-02 8.0873324339114738e-01 5.3623399297872931e-01 + -4.0465302678733162e-02 1.1571568986549696e+00 6.9964412359963357e-01 + -4.8847123855011443e-02 1.5148847071821616e+00 8.4565237152013939e-01 + -5.3448276200947331e-02 1.8818700191322302e+00 9.6684561196469199e-01 + -4.3080075924717132e-02 2.2595459946951375e+00 1.0498873961727517e+00 + -4.5124158194304043e-03 2.6462497851726710e+00 1.0669712716510136e+00 + 7.0946137294128686e-02 3.0253415844958438e+00 9.7785180132335814e-01 + 1.7497095065920565e-01 3.3508893047331076e+00 7.4715323876172812e-01 + 2.7200177830994532e-01 3.5561251206762634e+00 3.8851868530287614e-01 + 3.2596818409141837e-01 3.6157830768816086e+00 -2.8961764409787483e-02 + 3.2979629489044221e-01 3.5540341147657637e+00 -4.5213961907207634e-01 + 2.9317657565337507e-01 3.3949324594724071e+00 -8.6534702707887234e-01 + 2.2923593387345895e-01 3.1423189284287689e+00 -1.2685140360339733e+00 + 1.5104206076173021e-01 2.7654589539986585e+00 -1.6643993294920532e+00 + 6.5873329147732113e-02 2.1682163799381047e+00 -2.0247125777866808e+00 + -3.0786665102548877e-02 1.2957740477837352e+00 -2.1900603106550189e+00 + -1.3363267808938833e-01 4.3259383706211496e-01 -2.0527552399405042e+00 + -2.0457398592650594e-01 1.8444462438641729e-02 -1.9862396282087751e+00 + id 14666 + loc 9.9309056997299194e-01 4.3492183089256287e-01 405 + blend 0.0000000000000000e+00 + interp 4.0056469905110187e-01:2.9511362509562744e-01:7.8751607235965249e-01:4.0056069340411138e-01:1.2345988868389317e+00:3.3039717195759255e-01:2.4842491897930308e+00:3.8059676516889129e-01:3.0598736416139025e+00:2.7652141161615995e-01:3.8483402482785185e+00 + CVs 20 + -8.2930680729743633e-02 1.5277665919219807e-01 9.1635155071872768e-02 + -1.0373192549427093e-01 2.8409439500732797e-01 1.7525308850095878e-01 + -9.5621461343385672e-02 3.9773221572750772e-01 2.5400824796506999e-01 + -8.3731138378209280e-02 5.2370639994448009e-01 3.3814143902757671e-01 + -5.9911739135384001e-02 6.6310751779423194e-01 4.2396242670384787e-01 + -1.2182185026338332e-02 8.1770957090169660e-01 5.0421859353384380e-01 + 7.5691069813294487e-02 9.8765178225355665e-01 5.6448951490095356e-01 + 2.1973715600734461e-01 1.1651795189259477e+00 5.7645338708152993e-01 + 4.1724112687001752e-01 1.3243902372591028e+00 4.9763939242041266e-01 + 6.1947141480261081e-01 1.4243068020761884e+00 3.0412765771578049e-01 + 7.5989495072851510e-01 1.4468618153416606e+00 2.9411852505704147e-02 + 8.1771856516948604e-01 1.4075201024297512e+00 -2.7175026125233698e-01 + 8.0556747677868712e-01 1.3305014386267324e+00 -5.6958995900532361e-01 + 7.2510884269592002e-01 1.2572879438393425e+00 -8.5145467244775341e-01 + 5.6368734454148905e-01 1.2534716959120413e+00 -1.1020474942377911e+00 + 3.2190008473267351e-01 1.3680465780573416e+00 -1.2876836368460438e+00 + 3.0656350182814429e-02 1.5821223528666557e+00 -1.3771565596824904e+00 + -2.7388796845733698e-01 1.8345054936012144e+00 -1.3816995347913945e+00 + -5.3671317279829878e-01 1.9341616165245539e+00 -1.5570346032426163e+00 + id 14667 + loc 3.1288605928421021e-01 1.2159448117017746e-01 404 + blend 0.0000000000000000e+00 + interp 5.0991181175189360e-01:3.2724538725754881e-01:4.7118987114646893e-01:5.0273108753475693e-01:1.2926764583808472e+00:5.0990671263377607e-01:1.9203856735590090e+00:3.3245718052990814e-01:2.3112925278510907e+00:2.8047086228193874e-01:3.0255911991753255e+00:3.7056591386891347e-01:3.6513843129819641e+00 + CVs 20 + -1.3590933389694212e-01 1.2160497048424043e-01 -5.4749039027129361e-02 + -2.7029203480286212e-01 2.4650901945363865e-01 -1.1096822930615211e-01 + -4.0091947290435070e-01 3.7155517770634711e-01 -1.6726003913129597e-01 + -5.2794899461210587e-01 4.9562640276501257e-01 -2.2308113457696357e-01 + -6.5416087733986272e-01 6.2039043912365455e-01 -2.7925481888962644e-01 + -7.8269619690000236e-01 7.4792639164034946e-01 -3.3500343518508652e-01 + -9.1863256265123350e-01 8.8039386586549073e-01 -3.8558512858461053e-01 + -1.0681754177166345e+00 1.0186361947501608e+00 -4.2173792725313164e-01 + -1.2351715601190711e+00 1.1611120458475521e+00 -4.3314386690069429e-01 + -1.4201020201198524e+00 1.3045108782337578e+00 -4.1102145687288161e-01 + -1.6227910937426868e+00 1.4441974158560080e+00 -3.4802489399971182e-01 + -1.8392413886158454e+00 1.5709968157366561e+00 -2.3963772427855456e-01 + -2.0653206520284551e+00 1.6746368414378969e+00 -8.4178772086848319e-02 + -2.2945792891295631e+00 1.7473096754164854e+00 1.1756118561933593e-01 + -2.5140944193341959e+00 1.7908301172942696e+00 3.6785249279323429e-01 + -2.7021753564821265e+00 1.8158909222373663e+00 6.7563333490144406e-01 + -2.8349289097541321e+00 1.8188457242548206e+00 1.0439621059468080e+00 + -2.9022967319586535e+00 1.7653379262217892e+00 1.4546172015100343e+00 + -3.0271498159929995e+00 1.7483628639001929e+00 1.8019593410244397e+00 + id 14668 + loc 3.1825530529022217e-01 4.1786777973175049e-01 401 + blend 0.0000000000000000e+00 + interp 2.7538163515994352e-01:2.6166646426657114e-01:4.9288565833807085e-01:2.6583424420912372e-01:1.5443530316172576e+00:2.7537888134359195e-01:2.5218893850360593e+00:2.6658979572656943e-01:3.4454343702155770e+00 + CVs 20 + -3.0734126374461124e-01 1.8029728002289688e-01 1.3950842908478892e-01 + -5.9002637954050718e-01 3.6086868113218334e-01 2.5981174154635928e-01 + -8.6805284698337803e-01 5.3507164365274718e-01 3.7542598498092095e-01 + -1.1538699122613976e+00 6.9732126868435018e-01 4.9651945297286587e-01 + -1.4469550646851552e+00 8.4182080470687926e-01 6.2599658240870371e-01 + -1.7454373612845400e+00 9.6252264702106061e-01 7.6963180680814958e-01 + -2.0436725761692083e+00 1.0541635023314848e+00 9.3799078070187614e-01 + -2.3329045654240885e+00 1.1122154896137935e+00 1.1437758071030917e+00 + -2.6021866906801732e+00 1.1330042450179689e+00 1.3951733590865389e+00 + -2.8400872204759491e+00 1.1138378677409275e+00 1.6927222376105158e+00 + -3.0379991486356732e+00 1.0531021288618718e+00 2.0291323716762895e+00 + -3.1916056850194008e+00 9.5005718146714813e-01 2.3888133597524797e+00 + -3.2977639506559360e+00 8.0445876614679279e-01 2.7499928363612969e+00 + -3.3501130259040197e+00 6.2119627214392237e-01 3.0897307030608689e+00 + -3.3363558248769167e+00 4.2399976273751233e-01 3.3853188743556926e+00 + -3.2482941876098170e+00 2.5988459345060416e-01 3.6118986569523974e+00 + -3.1035073729477598e+00 1.7143510062206418e-01 3.7480002595955155e+00 + -2.9451401081535540e+00 1.6359119278254081e-01 3.7885405590113685e+00 + -2.6342094164570726e+00 6.0978149280611071e-02 3.9558106042481973e+00 + id 14669 + loc 6.7741328477859497e-01 8.7147510051727295e-01 393 + blend 0.0000000000000000e+00 + interp 4.1552703843203337e-01:2.9044565330292188e-01:3.2835838948690144e-01:4.1552288316164909e-01:9.4174350511171245e-01:2.6830637852976319e-01:1.5858815623918292e+00:2.5621390184595760e-01:2.7854291997181302e+00:2.5503689355489778e-01:3.7656864963784793e+00 + CVs 20 + -2.2933404101147969e-01 2.8172931409813851e-01 -2.3763733171231216e-01 + -4.6721428163053541e-01 5.6084470944407450e-01 -4.3891677898212339e-01 + -7.0285946491828910e-01 8.4758494957438990e-01 -6.3448252380310688e-01 + -9.2801664315036381e-01 1.1372494154177368e+00 -8.3236400360601559e-01 + -1.1408345393318842e+00 1.4209922694346102e+00 -1.0261057767371367e+00 + -1.3380385740173435e+00 1.6932021705767497e+00 -1.2118813872014571e+00 + -1.5150639970113517e+00 1.9566174069031610e+00 -1.3892880472453251e+00 + -1.6757471509466109e+00 2.2232629090457552e+00 -1.5604452578256580e+00 + -1.8491800075285285e+00 2.4970553735022438e+00 -1.7281703751431556e+00 + -2.0729101684054050e+00 2.7535677808111645e+00 -1.8906397800143160e+00 + -2.3516508333322408e+00 2.9750383616002383e+00 -2.0553179396543504e+00 + -2.6731729202946273e+00 3.1748280421924493e+00 -2.2540331293182740e+00 + -3.0415248484057820e+00 3.3460943194138704e+00 -2.5071185896616917e+00 + -3.4627764400173096e+00 3.4352916197342780e+00 -2.7871268851209496e+00 + -3.8992950492435803e+00 3.3915534485478762e+00 -3.0708520411675311e+00 + -4.2523558943017488e+00 3.1983412188029723e+00 -3.4022897808877879e+00 + -4.4566625264647621e+00 2.8586126238226841e+00 -3.8180248880566330e+00 + -4.5929602702072625e+00 2.3789386534657768e+00 -4.2163708206500337e+00 + -4.7950024943238914e+00 1.8494644570056518e+00 -4.2168314698987750e+00 + id 14670 + loc 1.0937234619632363e-03 6.4697724580764771e-01 399 + blend 0.0000000000000000e+00 + interp 3.2953801686975476e-01:2.1235929206109613e-01:9.4046622830684101e-02:3.2953472148958607e-01:1.0946118641929876e+00:2.2629554903544968e-01:1.9732764496265542e+00:2.6702564311514987e-01:2.1757961544753126e+00:2.6832678809380622e-01:2.9934760155035334e+00:2.8524169198932237e-01:3.9309848370091518e+00 + CVs 20 + -2.3842853812567572e-01 3.6248627873965711e-01 -2.6785875264667408e-01 + -4.7220320387981068e-01 7.1657714480555879e-01 -5.3677609470562804e-01 + -7.0763573938450508e-01 1.0564297438615107e+00 -8.2609332725647411e-01 + -9.5072995811862349e-01 1.3814859796398502e+00 -1.1414702436663711e+00 + -1.2129302905934662e+00 1.6932882937012173e+00 -1.4753883373177823e+00 + -1.5171032927448740e+00 1.9845717732179990e+00 -1.8050255240228468e+00 + -1.8869229607159272e+00 2.2296289592154332e+00 -2.0963102513600052e+00 + -2.3233828182738523e+00 2.3775063295522871e+00 -2.3163914757342527e+00 + -2.7961489704497806e+00 2.3784536191039192e+00 -2.4450200617827722e+00 + -3.2650231815462627e+00 2.2283823422480227e+00 -2.4878785927944564e+00 + -3.6995398020557930e+00 1.9597972830337840e+00 -2.4761725461376920e+00 + -4.0861031305444682e+00 1.6232471580952919e+00 -2.4603636040697747e+00 + -4.4232496884660257e+00 1.2915246491663324e+00 -2.4893261890727558e+00 + -4.6941680712831237e+00 1.0547183038920085e+00 -2.5716416777313231e+00 + -4.8445667185830565e+00 9.5379946334391519e-01 -2.6631780077500036e+00 + -4.7944947074332029e+00 9.0122053423943427e-01 -2.7049444764935102e+00 + -4.5741352393412500e+00 6.8300061539746815e-01 -2.7099728994649723e+00 + -4.4742163275210061e+00 4.7606990653404907e-01 -2.8053564026248754e+00 + -4.4270848996442540e+00 7.8699125300682071e-01 -2.9449701572701130e+00 + id 14671 + loc 4.1483876109123230e-01 7.7192658185958862e-01 404 + blend 0.0000000000000000e+00 + interp 4.1095631487957629e-01:4.1095220531642751e-01:8.7782433745715815e-01:3.8127695998362049e-01:1.1818121785713123e+00:3.7442968797595960e-01:1.9609265678757555e+00:3.4196081247658916e-01:2.8596164879977799e+00:4.0530928106200131e-01:3.3678990312525920e+00:3.2597794573185079e-01:3.9776977345148365e+00 + CVs 20 + 3.4771588477637318e-03 7.3188634797992397e-02 4.5860377973783041e-02 + 1.7575919904143283e-02 1.5308600152008239e-01 8.4063548549755562e-02 + 3.5096331565051486e-02 2.4068406496542710e-01 1.2687224993981605e-01 + 5.5441784281992701e-02 3.2855995525515430e-01 1.7212600576759429e-01 + 8.1080614172757734e-02 4.1519111529043096e-01 2.1827761225236403e-01 + 1.1352704473491607e-01 4.9913816600787864e-01 2.6442278624819632e-01 + 1.5320016830976974e-01 5.7856467128994293e-01 3.0966672243338095e-01 + 1.9928012474957774e-01 6.5169835203853510e-01 3.5368966786370448e-01 + 2.4964398594574866e-01 7.1727198336740516e-01 3.9759688551490896e-01 + 3.0175760568302951e-01 7.7430392496630918e-01 4.4206046089974943e-01 + 3.5392234231655056e-01 8.2142098509993433e-01 4.8316605684429487e-01 + 4.0462367103010571e-01 8.5756624390916136e-01 5.1424855083849907e-01 + 4.5003848674909985e-01 8.8357892462647292e-01 5.3085619619046953e-01 + 4.8389633334259008e-01 9.0451657070931046e-01 5.3648336965633414e-01 + 5.0230998443061636e-01 9.2793979958300477e-01 5.3906129564750471e-01 + 5.0406792990865446e-01 9.6051843163982975e-01 5.4388620470645310e-01 + 4.8805848911689065e-01 1.0070096445408330e+00 5.5369595869619292e-01 + 4.5374406415764623e-01 1.0717598533878829e+00 5.7351147169915095e-01 + 4.0081823542869205e-01 1.1460672502282991e+00 5.9414056057781695e-01 + id 14672 + loc 9.7193747758865356e-01 4.2027452588081360e-01 401 + blend 0.0000000000000000e+00 + interp 3.5945732104507205e-01:3.5945372647186163e-01:1.7280637569967916e-01:2.3805397993583094e-01:9.9720153597934325e-01:2.5848855224589629e-01:1.9963231635490613e+00:2.4669183399075587e-01:2.8648913861074572e+00:2.5346364459987930e-01:3.9696705235689582e+00 + CVs 20 + 1.5464111780552459e-01 3.8893976721310897e-01 1.0782167795121055e-01 + 2.8681326045478173e-01 7.9026987203215693e-01 2.5946657704081921e-01 + 3.7004943979110827e-01 1.1923188131696134e+00 4.6042146722461508e-01 + 3.9936168246538012e-01 1.5726673642410636e+00 7.1344000667096097e-01 + 3.8482247828342964e-01 1.9105294579036876e+00 1.0160611465399099e+00 + 3.4014197176139543e-01 2.1934453312253250e+00 1.3599073929276715e+00 + 2.8053320796652070e-01 2.4175094922473455e+00 1.7359858778908870e+00 + 2.2284606796291484e-01 2.5823485507822568e+00 2.1368411173726232e+00 + 1.7784139308868685e-01 2.6818795342643771e+00 2.5495306072203645e+00 + 1.3975385957679520e-01 2.7025354933578858e+00 2.9466644227280043e+00 + 9.4974062015972804e-02 2.6368292719634310e+00 3.2936681001513914e+00 + 4.0440010595431231e-02 2.4925839888815808e+00 3.5644619013935723e+00 + -8.4758488420580980e-03 2.2873301199183533e+00 3.7664331338204713e+00 + -1.1095735909877003e-02 2.0106037124555418e+00 3.9564398606659030e+00 + 1.0138898300094756e-01 1.6210210845771944e+00 4.1718737413578211e+00 + 4.2545907561017970e-01 1.1290784252346016e+00 4.3976319363630267e+00 + 1.0523943466552326e+00 6.5890724242941601e-01 4.5991207592520595e+00 + 1.8441193834828766e+00 4.1357174621598147e-01 4.7116843708166964e+00 + 2.2201370487004768e+00 3.1177824480706029e-01 4.6907226659882237e+00 + id 14673 + loc 8.2618474960327148e-01 8.9027625322341919e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2099877096144309e-01:5.2099356097373350e-01:1.9420389254989567e-02:4.4591928480303061e-01:5.5634955395110874e-01:4.7774213857627024e-01:9.9389578696703085e-01:3.3490102330361471e-01:1.3743212743360611e+00:4.9520215601007306e-01:1.9997546975112794e+00:3.8820965545954922e-01:2.7280693463188701e+00:4.8305363427547526e-01:3.0282834526766385e+00:3.3013025218271203e-01:3.6715546282358411e+00 + CVs 20 + 1.0544552049025022e-01 2.7490193356108444e-01 -1.0140652548291440e-01 + 2.2130856188557652e-01 5.4485763754363115e-01 -2.0409444228005763e-01 + 3.4919621233358150e-01 8.0008482562301475e-01 -3.1875107512043982e-01 + 4.8991128215996499e-01 1.0326059961909115e+00 -4.4845867124479227e-01 + 6.4247518168078710e-01 1.2350252734523623e+00 -5.9072621254804725e-01 + 8.0353731346973900e-01 1.3991268938102492e+00 -7.4257172256758697e-01 + 9.7101003607249781e-01 1.5202469934809861e+00 -9.0258128083980416e-01 + 1.1449930043586392e+00 1.5985877939441175e+00 -1.0704953244472102e+00 + 1.3244274569660224e+00 1.6362222076408295e+00 -1.2446980435758117e+00 + 1.5062684114587466e+00 1.6357397089763024e+00 -1.4230218905950582e+00 + 1.6866466556323714e+00 1.5997408559648840e+00 -1.6041643503461853e+00 + 1.8606886628924293e+00 1.5312271731676625e+00 -1.7860649649036873e+00 + 2.0232924948342976e+00 1.4348508050670969e+00 -1.9649402672905856e+00 + 2.1707341836009029e+00 1.3189646656521989e+00 -2.1354981189314408e+00 + 2.3002381070635831e+00 1.1975005576107045e+00 -2.2915914560643862e+00 + 2.4093275927435194e+00 1.1006675609821348e+00 -2.4274134948055917e+00 + 2.4942226514067096e+00 1.0969828930494148e+00 -2.5541551480707070e+00 + 2.5695463717042637e+00 1.1782514000580506e+00 -2.7411122212386170e+00 + 2.6425166843266386e+00 9.5137991837004343e-01 -2.6771491377143901e+00 + id 14674 + loc 6.4336335659027100e-01 2.8604692220687866e-01 405 + blend 0.0000000000000000e+00 + interp 4.4443629514768385e-01:3.5026652040708633e-01:2.9863936875985708e-01:2.7686527422548096e-01:9.8064439743713205e-01:4.4443185078473241e-01:1.1559053704228339e+00:3.1035658141080064e-01:2.0504423968868144e+00:4.3015983201043506e-01:2.7021869696371055e+00:3.4500085853887508e-01:3.0111328917351856e+00:3.2559437043856571e-01:3.6593847832214981e+00 + CVs 20 + 9.3571122363827031e-02 1.4390397129717070e-01 -1.5791362750916405e-02 + 2.1593617209335200e-01 2.3632224702143903e-01 -3.7745868215113172e-02 + 3.4437556533743324e-01 3.1162791307283771e-01 -6.7300660430384018e-02 + 4.6357258155526770e-01 3.6781343212735412e-01 -1.0785034170090955e-01 + 5.6898642200394145e-01 4.0052928985665104e-01 -1.6039441809740057e-01 + 6.5510228190709396e-01 4.0801638122219486e-01 -2.2327023179913502e-01 + 7.1740803477605342e-01 3.9205823370498749e-01 -2.9157069690014970e-01 + 7.5544628432654815e-01 3.5858187236645844e-01 -3.5859563982594339e-01 + 7.7299835576168352e-01 3.1533751099840807e-01 -4.1895048336996193e-01 + 7.7655024657111360e-01 2.6945119684424618e-01 -4.7057164022267822e-01 + 7.7236579652478343e-01 2.2562821479851858e-01 -5.1430298996277213e-01 + 7.6446014815730612e-01 1.8601475378951582e-01 -5.5139657811163456e-01 + 7.5507543902668661e-01 1.5182485387970068e-01 -5.8315850915265588e-01 + 7.4612245565222113e-01 1.2381733242601922e-01 -6.1528253175405245e-01 + 7.3936901455800652e-01 9.8871730384876788e-02 -6.6281517124198142e-01 + 7.3304437479818640e-01 7.0033644984970056e-02 -7.4189139091294387e-01 + 7.2008558901175646e-01 3.7447769884835724e-02 -8.5508626415755262e-01 + 6.9253176378245529e-01 1.1152786134011605e-02 -9.9274157633575244e-01 + 6.3564967669033767e-01 1.4147992835682688e-02 -1.1234808526488693e+00 + id 14675 + loc 9.3326276540756226e-01 3.6905285716056824e-01 393 + blend 0.0000000000000000e+00 + interp 6.6538068665775818e-01:6.6537403285089158e-01:5.1107459584350701e-01:5.8344821277340686e-01:9.8528654482338662e-01:4.2073922306829969e-01:1.2353992737782171e+00:2.4388023593686214e-01:1.6342364721967131e+00:3.8515651800016526e-01:2.1615211729333366e+00:4.5332284591563476e-01:2.8191291345061451e+00:2.4169520456969429e-01:3.1842319761324016e+00:4.7534015447368794e-01:3.9992952420690866e+00 + CVs 20 + 3.3625838948240927e-01 3.7769526308205048e-01 1.8339856079235092e-01 + 6.5185930390808133e-01 7.7040984036729099e-01 3.1965178011730916e-01 + 9.3985555857811576e-01 1.1951079323307923e+00 4.5259663502055864e-01 + 1.2060167584995285e+00 1.6481956546031882e+00 6.2065680469272300e-01 + 1.4576050933873652e+00 2.1101414470094308e+00 8.5828376623045288e-01 + 1.6950591498437011e+00 2.5578990713043006e+00 1.1846694058791285e+00 + 1.9181156192837685e+00 2.9770634880397546e+00 1.6054173333983357e+00 + 2.1341552982177738e+00 3.3523589280463684e+00 2.1232557640809189e+00 + 2.3609821182839754e+00 3.6559087714285696e+00 2.7429693949619383e+00 + 2.6198044799007953e+00 3.8410908059636606e+00 3.4605948041846437e+00 + 2.9263070532610005e+00 3.8487564971185422e+00 4.2463299177900753e+00 + 3.2820753491389114e+00 3.6252535898473770e+00 5.0376729235085591e+00 + 3.6673237365239295e+00 3.1482019882363463e+00 5.7372622959466142e+00 + 4.0499599513653273e+00 2.4546728115090763e+00 6.2249364593319028e+00 + 4.3975647731173151e+00 1.6715610820285676e+00 6.3903992111602808e+00 + 4.6855105278899938e+00 1.0106791744188546e+00 6.2254734969454821e+00 + 4.9099862396593288e+00 5.9309941398923360e-01 5.8725090012956898e+00 + 5.0874575299065281e+00 3.0834080306160017e-01 5.4780501664794956e+00 + 5.2546229456243667e+00 -9.9393874420969475e-02 5.1428609597689547e+00 + id 14676 + loc 8.9757137000560760e-02 5.3039240837097168e-01 399 + blend 0.0000000000000000e+00 + interp 3.5473059787807493e-01:2.6611671109059332e-01:6.8303639426522644e-01:2.6764360895333467e-01:1.4612177018860526e+00:3.5472705057209614e-01:2.3215153569954996e+00:2.6564130758952492e-01:2.9837451743367565e+00:2.9283407157928965e-01:3.8648875180691085e+00 + CVs 20 + -2.6522883666762370e-01 3.2264452905336494e-01 -2.4555512809172300e-01 + -5.2477098784495979e-01 6.2427996188145662e-01 -5.0234750811455364e-01 + -7.9312310705250322e-01 8.9778208138361204e-01 -7.9642912206660166e-01 + -1.0785158696014081e+00 1.1376720411702312e+00 -1.1362539616708656e+00 + -1.3863038433230619e+00 1.3380189120176742e+00 -1.5126153333266157e+00 + -1.7238821343989299e+00 1.4846815168864802e+00 -1.8975305899362724e+00 + -2.0837375509341518e+00 1.5483126518076336e+00 -2.2424739708885397e+00 + -2.4122431183139725e+00 1.4936839294697057e+00 -2.4928658245524082e+00 + -2.6562944069392675e+00 1.3300974582289176e+00 -2.6390211306808236e+00 + -2.8362490091429744e+00 1.0937973372343102e+00 -2.7193293298687378e+00 + -2.9833553872034337e+00 8.0330272643867817e-01 -2.7634719264626892e+00 + -3.1258073479981574e+00 4.5815352989951663e-01 -2.7923887693499037e+00 + -3.3165872584897835e+00 3.6555220721149778e-02 -2.8391467016614271e+00 + -3.6430946918887597e+00 -4.7923011111150887e-01 -2.9617112658410267e+00 + -4.1901236380485205e+00 -1.0065536639056776e+00 -3.2164685920106457e+00 + -4.9859031334234816e+00 -1.3379252583088543e+00 -3.6110833866385827e+00 + -5.9142199760000711e+00 -1.2220541518628105e+00 -4.0707231960538079e+00 + -6.5506312554700710e+00 -7.2357325165460329e-01 -4.4058437730437943e+00 + -6.7391026630768360e+00 -3.1735424065755741e-01 -4.5863593421894810e+00 + id 14677 + loc 8.4791451692581177e-01 3.5262307524681091e-01 404 + blend 0.0000000000000000e+00 + interp 4.2773097071778327e-01:3.7215939185932306e-01:1.0738994403027857e-01:4.0598034959986934e-01:6.8184917458004612e-01:2.9662820388610389e-01:1.0261556014281423e+00:4.2772669340807612e-01:1.7370783046258813e+00:4.0836436669956805e-01:2.0351042743487087e+00:3.2628996408444760e-01:2.9123569644949381e+00:2.5950198860384344e-01:3.6777991048687197e+00 + CVs 20 + -7.2816844779028292e-02 1.1371825928455395e-01 8.2783176375890166e-02 + -1.2365757317077938e-01 2.1897509569745011e-01 1.6184704807756645e-01 + -1.7277871877808992e-01 3.2254804486379490e-01 2.3665999876037364e-01 + -2.3810657859183104e-01 4.3065850666053684e-01 3.0617683327108058e-01 + -3.2076330153697707e-01 5.4158410008129965e-01 3.6957244947024603e-01 + -4.2074860308155615e-01 6.5226019338219210e-01 4.2532114498797124e-01 + -5.3794602017396831e-01 7.5939138041450271e-01 4.7139260468846350e-01 + -6.7213583874523319e-01 8.6012663234857056e-01 5.0582391069695509e-01 + -8.2107439908142543e-01 9.5196481071932781e-01 5.2664352816056503e-01 + -9.8032192649835292e-01 1.0330388878003574e+00 5.3207830362835851e-01 + -1.1486840043077540e+00 1.1035717120850252e+00 5.2178289754830631e-01 + -1.3458887819128411e+00 1.1693927092761851e+00 5.0001708502908238e-01 + -1.6131025548023603e+00 1.2374018201319528e+00 4.8394047403763601e-01 + -1.9734441902955357e+00 1.3051538924399022e+00 5.1638987341963838e-01 + -2.3841610083399480e+00 1.3578242982091271e+00 6.4366867541559070e-01 + -2.7714954044082889e+00 1.3827095534143390e+00 8.6576612905596484e-01 + -3.1081548361320772e+00 1.3751344062113380e+00 1.1685628541340687e+00 + -3.3842900247280547e+00 1.3301584029587459e+00 1.5520678546752644e+00 + -3.4958915418121737e+00 1.3059702232375385e+00 1.7081198093484284e+00 + id 14678 + loc 1.6245764493942261e-01 7.6226109266281128e-01 401 + blend 0.0000000000000000e+00 + interp 3.5652039555925363e-01:2.5455453128243866e-01:1.0150013832488709e+00:3.5651683035529808e-01:1.9999878754183835e+00:2.5418388613804971e-01:2.9021599272425007e+00:2.5464733113248700e-01:3.9792245483688036e+00 + CVs 20 + 5.3141652118952720e-02 2.9782786408188711e-01 -3.8985668491413072e-01 + 8.1020794262836954e-02 5.9705648767269648e-01 -7.4957844619137404e-01 + 9.0082713271770920e-02 8.9313707836760081e-01 -1.0991103637517339e+00 + 7.0320225903111877e-02 1.1795515765182638e+00 -1.4537894937583999e+00 + -2.2316900111279958e-04 1.4464595325286087e+00 -1.8200808393563885e+00 + -1.4813526263208077e-01 1.6815045776345094e+00 -2.1914196009629725e+00 + -3.8761532387065800e-01 1.8678326704028285e+00 -2.5449848513101636e+00 + -7.0962382482823649e-01 1.9928897091336686e+00 -2.8543170838111815e+00 + -1.0892395729827129e+00 2.0522430204635125e+00 -3.1034007661035510e+00 + -1.4974939310461455e+00 2.0476237717196462e+00 -3.2919692775543843e+00 + -1.9126401281604737e+00 1.9804603156792893e+00 -3.4309011949460837e+00 + -2.3211646427942174e+00 1.8466569790718261e+00 -3.5292397322084592e+00 + -2.7105078312284814e+00 1.6470176483120902e+00 -3.5805311810756089e+00 + -3.0641159691138333e+00 1.4118983767227031e+00 -3.5565711279413028e+00 + -3.3566214762763953e+00 1.2047900219128602e+00 -3.4289235705383567e+00 + -3.5586839042193521e+00 1.0862401854553239e+00 -3.2140762149591904e+00 + -3.6553076405006535e+00 1.0722015340546640e+00 -2.9737096117290225e+00 + -3.6854432443588436e+00 1.0945289516238768e+00 -2.7662400344635452e+00 + -3.7760323396717150e+00 9.9424113822910043e-01 -2.5565736773514476e+00 + id 14679 + loc 4.5481872558593750e-01 5.2444332838058472e-01 405 + blend 0.0000000000000000e+00 + interp 3.8771432578674719e-01:3.0056724838105836e-01:1.2933790840018833e-01:2.8984274315071795e-01:9.5929290836766734e-01:3.6888692946014850e-01:1.3632968281392901e+00:3.8771044864348936e-01:2.1527913207106866e+00:3.3407034638749855e-01:2.9875474482255675e+00:3.2194096208475381e-01:3.6530320308704542e+00 + CVs 20 + 1.1999464980122566e-01 2.8604307924279815e-01 -6.8729631550355733e-02 + 1.2040307421264129e-01 5.5511170950009336e-01 -1.2049072905306751e-01 + 1.1313048976645790e-01 7.9820404956564528e-01 -1.3684832337717079e-01 + 9.6704310365531954e-02 1.0477782743687609e+00 -9.9095227649962342e-02 + 6.6899147397983305e-02 1.2920746745568568e+00 1.0526230167631226e-02 + 2.8504879333926425e-02 1.5075573778620943e+00 2.0260653075525437e-01 + -3.8098079904856919e-03 1.6668801397143307e+00 4.6870577685322695e-01 + -1.1428467749635685e-02 1.7547253656017410e+00 7.8062817010516983e-01 + 1.7560121264798778e-02 1.7741730942153939e+00 1.1067111560172309e+00 + 8.5070378954473891e-02 1.7377599726173605e+00 1.4252002738891925e+00 + 1.8641705446063894e-01 1.6554815729448420e+00 1.7264051601247030e+00 + 3.1146581816925711e-01 1.5288531284151579e+00 2.0088235358963304e+00 + 4.4995209820952120e-01 1.3578086476923443e+00 2.2689786514234269e+00 + 5.9923212779935842e-01 1.1632924546218688e+00 2.4921085140350159e+00 + 7.6337209318532651e-01 9.9151368854893951e-01 2.6633340748673988e+00 + 9.4377471955792414e-01 8.7612622147523433e-01 2.7812059500762056e+00 + 1.1330357118753016e+00 8.0433874975702346e-01 2.8545901992771681e+00 + 1.3178503109074722e+00 7.4320723889569262e-01 2.8983993692299368e+00 + 1.4007526096230831e+00 5.3831808501973177e-01 3.0614378053162019e+00 + id 14680 + loc 4.9234914779663086e-01 4.8108232021331787e-01 399 + blend 0.0000000000000000e+00 + interp 2.9593351150218150e-01:2.9464368436793814e-01:5.8639187138109783e-03:2.6779033851926010e-01:9.7724505153096275e-01:2.9593055216706649e-01:1.8521683072906661e+00:2.9348440819102062e-01:2.2845887372850164e+00:2.5923117878124552e-01:2.9999216176540209e+00 + CVs 20 + -2.2332109061528352e-01 1.9666649769443839e-01 1.2252154522701302e-01 + -4.4012017206241194e-01 3.8706214116070592e-01 2.4232306989877087e-01 + -6.6444117425183002e-01 5.6526034895610333e-01 3.3777639435372586e-01 + -9.0560895678447006e-01 7.2947957065210478e-01 3.9669605802175084e-01 + -1.1623459780824570e+00 8.8358928596646524e-01 4.2316257604851892e-01 + -1.4279395098949217e+00 1.0323588353992892e+00 4.2517696061175081e-01 + -1.6951770989246178e+00 1.1788375719660105e+00 4.1025695763879227e-01 + -1.9574930668702164e+00 1.3252137982186118e+00 3.8389678338181144e-01 + -2.2113520533962894e+00 1.4750081729824192e+00 3.5280622788583155e-01 + -2.4606891482015278e+00 1.6322994434955418e+00 3.2803832217475792e-01 + -2.7233686856589987e+00 1.7858231599845595e+00 3.2405641975194144e-01 + -3.0177634206132797e+00 1.8752323625662612e+00 3.5468378990336724e-01 + -3.3190346741372680e+00 1.8329534125920377e+00 4.1618223867047410e-01 + -3.5822944494919429e+00 1.6546674429112003e+00 4.9452012946619844e-01 + -3.7827672529419982e+00 1.3757778635743509e+00 5.8209527380412651e-01 + -3.9220570768160021e+00 1.0679120519687137e+00 6.8282108049749135e-01 + -3.9771140965109444e+00 8.1197659115351994e-01 7.9683025398972818e-01 + -3.9809362316929287e+00 6.1739697340005373e-01 9.1608932148980315e-01 + -4.3866186020797775e+00 5.8525257859653557e-01 8.4450173183302357e-01 + id 14681 + loc 5.5707558989524841e-02 2.7675712108612061e-01 393 + blend 0.0000000000000000e+00 + interp 3.4453521881237908e-01:2.7146341213962027e-01:9.3663247321156851e-01:3.0749068112638422e-01:1.6109284658648038e+00:3.4453177346019098e-01:2.0979235986192069e+00:2.5547875306307932e-01:3.0123641500799350e+00:2.4133538977944191e-01:3.9293417636285284e+00 + CVs 20 + -1.6068683132995151e-01 2.8469872082482711e-01 3.1921127204490285e-01 + -3.0641647233733360e-01 5.5772373252320073e-01 6.1719958209101111e-01 + -4.5386914367705794e-01 8.2326448261635266e-01 8.9276674085930363e-01 + -6.1419089180648023e-01 1.0798753738332203e+00 1.1459330636215266e+00 + -7.9491535679212011e-01 1.3219901694383940e+00 1.3765799241062786e+00 + -1.0016816330676024e+00 1.5411651083954756e+00 1.5892896335670466e+00 + -1.2388866307471882e+00 1.7239550907137660e+00 1.7948565682735751e+00 + -1.5151873214071292e+00 1.8550152859300013e+00 2.0039292239295987e+00 + -1.8438027164005082e+00 1.9149861693978709e+00 2.2239862311768137e+00 + -2.2335071343899977e+00 1.8830580567625819e+00 2.4579776366603747e+00 + -2.6819167332482601e+00 1.7463894244948170e+00 2.7079837946524914e+00 + -3.1793300141618404e+00 1.5110534246924761e+00 2.9823537129436772e+00 + -3.7044706590642900e+00 1.2087311519170476e+00 3.3045248964470106e+00 + -4.2134886249204451e+00 8.6292423455063494e-01 3.7162504750739584e+00 + -4.6345748362748385e+00 4.7489597585943155e-01 4.2728711597972451e+00 + -4.8734171395303445e+00 9.1058198694391468e-02 5.0132609357718785e+00 + -4.8624349679590813e+00 -1.6434608610307055e-01 5.8802722013827191e+00 + -4.6688907644301256e+00 -2.2076509544969358e-01 6.7059762394005986e+00 + -4.5303576977027085e+00 -1.9879824063341145e-01 7.3511054203566299e+00 + id 14682 + loc 9.8221063613891602e-01 4.7157675027847290e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5499960186694460e-01:3.3381864829388619e-01:1.4659784360457495e-01:2.5217176322369961e-01:9.9447876914024047e-01:4.5499505187092598e-01:1.6289121733107463e+00:3.2181654892246675e-01:2.0086487526838535e+00:3.4774970397309513e-01:2.9901459516298763e+00:2.5043945382752109e-01:3.7166099864719717e+00 + CVs 20 + -4.9433217525585466e-02 4.5066716537966506e-01 -6.8639958248242428e-02 + -8.4905590454014634e-02 9.0220473544959190e-01 -7.6795073316485801e-02 + -1.4154801594881611e-01 1.3493136955551313e+00 -3.2871531058463022e-02 + -2.3692680612797073e-01 1.7851533566627125e+00 7.2418926650788640e-02 + -3.8214080206033130e-01 2.1967818882684611e+00 2.5283356787372124e-01 + -5.8526574927870734e-01 2.5624062191749792e+00 5.1635498682761038e-01 + -8.4473149753787147e-01 2.8540058464633833e+00 8.5735852673395729e-01 + -1.1491779419581767e+00 3.0494453927647638e+00 1.2567048135764551e+00 + -1.4818616413249512e+00 3.1389517450750581e+00 1.6908482462996650e+00 + -1.8172921350941975e+00 3.1264889403360643e+00 2.1355792860805476e+00 + -2.1291978587449472e+00 3.0284054457128731e+00 2.5734700277446971e+00 + -2.4015475218044107e+00 2.8623824084597884e+00 2.9972311972515380e+00 + -2.6219427220907234e+00 2.6455447016398299e+00 3.4007966465287800e+00 + -2.7753299726190850e+00 2.4074586353554799e+00 3.7706872857267633e+00 + -2.8598792278041891e+00 2.1974613177978717e+00 4.0853704478172164e+00 + -2.9196773038494030e+00 2.0987084602122863e+00 4.2970215667414466e+00 + -3.1050706641274060e+00 2.1677563529617396e+00 4.3137024763727787e+00 + -3.4982464302871721e+00 2.2248747535898263e+00 4.1272401315802512e+00 + -3.4084988227895563e+00 2.2471295692200215e+00 4.3053259858896533e+00 + id 14683 + loc 6.3566917181015015e-01 4.6743452548980713e-01 401 + blend 0.0000000000000000e+00 + interp 4.7473106850144292e-01:2.4875417180981618e-01:7.0729757112941716e-04:3.0298066684574132e-01:9.9979110924962378e-01:2.4152191455376595e-01:1.8384628522683442e+00:2.6173057956906809e-01:2.7747108960222318e+00:4.7472632119075792e-01:3.0692235153256497e+00 + CVs 20 + 2.5516174915231515e-01 3.4975204697385354e-01 2.3786913040267665e-01 + 4.6574673795363586e-01 7.2396291846184135e-01 4.9004325048141184e-01 + 6.5622601990260332e-01 1.0948338409782272e+00 7.7139377069473658e-01 + 8.3134781246483946e-01 1.4392852320260137e+00 1.0921214623210176e+00 + 9.9266796987756645e-01 1.7379549914391501e+00 1.4462481976868715e+00 + 1.1525155419284674e+00 1.9849183306280500e+00 1.8163013339597165e+00 + 1.3273612687057212e+00 2.1822270659110239e+00 2.1946481894599574e+00 + 1.5338375604982857e+00 2.3277158212788036e+00 2.5844117392895627e+00 + 1.7863211276256186e+00 2.4092804427341070e+00 2.9846640612662481e+00 + 2.0913008684933034e+00 2.4097665782823783e+00 3.3827211512075359e+00 + 2.4439651429162517e+00 2.3158139987301292e+00 3.7569210960299015e+00 + 2.8276998564193359e+00 2.1226399424158506e+00 4.0826440917486790e+00 + 3.2172871026336938e+00 1.8319932845574347e+00 4.3464216373981417e+00 + 3.5913576385458077e+00 1.4483491205507066e+00 4.5449290282874015e+00 + 3.9319624361680150e+00 9.9233046692234450e-01 4.6592428338887446e+00 + 4.2270286301906852e+00 5.0769451540813149e-01 4.6801780508449049e+00 + 4.5027199166427492e+00 2.6114412580631241e-02 4.6826040325136171e+00 + 4.7976142358176475e+00 -4.4409171014043858e-01 4.7935657049179445e+00 + 5.1240636285162857e+00 -9.0736894629652287e-01 5.0269253609969677e+00 + id 14684 + loc 7.2670084238052368e-01 3.2448839396238327e-02 404 + blend 0.0000000000000000e+00 + interp 4.7544980591199398e-01:3.2107686105199795e-01:1.7167060408395107e-03:3.8284837710900682e-01:7.7529423318725088e-01:3.9262014753767094e-01:1.0679785720709785e+00:1.6906605151963758e-01:1.8706207022126824e+00:3.5487050707886786e-01:2.7631240661624696e+00:4.7544505141393489e-01:3.0788521028764171e+00:4.3927756923912437e-01:3.6682629850615411e+00 + CVs 20 + 9.6101120334163598e-02 1.7496287136049762e-01 1.1231963356048458e-01 + 1.7299046956031655e-01 3.6242879404436379e-01 2.3781957441075907e-01 + 2.2827876005483247e-01 5.5336388694242888e-01 3.6201940437529956e-01 + 2.6269115846333274e-01 7.4134339587941844e-01 4.7964046985345626e-01 + 2.7560820207703135e-01 9.2530777897896099e-01 5.9440726923119269e-01 + 2.6114218959411634e-01 1.1049066323721219e+00 7.1091257963736543e-01 + 2.1050098110608906e-01 1.2772437086136030e+00 8.3014411791963694e-01 + 1.1542574650305859e-01 1.4350639452228044e+00 9.4736616555611364e-01 + -2.8179685464394533e-02 1.5670855154259264e+00 1.0525823250394364e+00 + -2.1339772415765468e-01 1.6613544215984042e+00 1.1339372154675256e+00 + -4.2116104128505460e-01 1.7141987485903203e+00 1.1918720914556327e+00 + -6.3234446130996202e-01 1.7378096819497464e+00 1.2658001131716790e+00 + -8.3186900833302269e-01 1.7431397432244176e+00 1.4126578799587706e+00 + -9.7646976944507680e-01 1.7201233859793292e+00 1.6576601105441977e+00 + -1.0172179573569653e+00 1.6507301981926179e+00 1.9528561274487530e+00 + -9.5862928228094513e-01 1.5369565102002420e+00 2.2240022775505111e+00 + -8.1748413469288816e-01 1.3939737761256490e+00 2.4365499419374310e+00 + -6.0578303972443914e-01 1.2436569593604216e+00 2.5673122436235478e+00 + -5.0274997630868667e-01 1.1511130111179231e+00 2.7097036648552173e+00 + id 14685 + loc 8.9479140937328339e-02 4.7064745426177979e-01 405 + blend 0.0000000000000000e+00 + interp 5.4580009171922206e-01:3.9002531172769955e-01:3.9025524418521584e-02:3.0374953704390517e-01:6.9160390256543469e-01:4.4707739908631872e-01:1.0069210326331663e+00:5.4579463371830494e-01:1.7707134471708659e+00:3.8654425222975985e-01:2.0347012653163050e+00:3.3830290149467712e-01:2.4370414294047644e+00:4.2813566117666735e-01:3.0742851004031526e+00:2.9113812185953042e-01:3.6869896320332849e+00 + CVs 20 + 2.0103285929674969e-01 1.9983663827187276e-01 -1.0870567420305617e-01 + 3.8183666150885875e-01 3.6119017931237474e-01 -1.0708786123863881e-01 + 5.6423778731507079e-01 4.5983485320085482e-01 -1.1195723146538800e-01 + 7.6293727675901546e-01 5.2181095830653967e-01 -1.2246096908248136e-01 + 9.7229709369008499e-01 5.4716533322036565e-01 -1.3814164369515808e-01 + 1.1869282001913022e+00 5.3997883208209840e-01 -1.6064225585844999e-01 + 1.4031470347495725e+00 5.0741408311493896e-01 -1.9201890607923774e-01 + 1.6182764301819459e+00 4.5690372595986523e-01 -2.3435145362544363e-01 + 1.8297247119562894e+00 3.9518690412843838e-01 -2.8883608456558590e-01 + 2.0344548580344064e+00 3.2812621725245283e-01 -3.5519562774908692e-01 + 2.2289338534545764e+00 2.5960028482370573e-01 -4.3076008140661115e-01 + 2.4103947135332482e+00 1.9167751113479192e-01 -5.1006728347146346e-01 + 2.5776633726547304e+00 1.3039087470170024e-01 -5.8898820695010135e-01 + 2.7316980921983056e+00 9.2018475673889044e-02 -6.6838151238706245e-01 + 2.8718991062180437e+00 9.3243760916458807e-02 -7.4962328911042264e-01 + 2.9911092163950044e+00 1.3366780993702698e-01 -8.2799957037187677e-01 + 3.0841381334457170e+00 1.9937730372501677e-01 -8.9493873755594577e-01 + 3.1586918291708179e+00 2.7635760942093079e-01 -9.4436942123639012e-01 + 3.3125251003991307e+00 3.2751513339658789e-01 -9.7764028791441648e-01 + id 14686 + loc 3.6139291524887085e-01 2.5686463713645935e-01 399 + blend 0.0000000000000000e+00 + interp 4.2850684743601108e-01:2.5250349833378444e-01:1.6714367765256788e-01:2.6454949478319095e-01:1.3458413283147810e+00:3.9295764706144043e-01:1.9902798654288323e+00:2.6082735010904895e-01:2.7302454492152086e+00:4.2850256236753675e-01:3.5167583022440798e+00 + CVs 20 + -1.9085139087956651e-01 3.7727475806459515e-01 1.1528038607771360e-01 + -4.1904493605310461e-01 7.4026245260561385e-01 2.0385763424342723e-01 + -6.8837881751238095e-01 1.0780851103965985e+00 2.6560550129384142e-01 + -9.8857323493029881e-01 1.3913314357959803e+00 3.2324194189678490e-01 + -1.3087603243699026e+00 1.6824257393690829e+00 4.0514205926436953e-01 + -1.6445481331550014e+00 1.9440025735675244e+00 5.2947061226075698e-01 + -1.9957201382698091e+00 2.1586934609870503e+00 7.0515458361022265e-01 + -2.3592073067014794e+00 2.2999528111736667e+00 9.3513689026269176e-01 + -2.7204056631973694e+00 2.3354962160549735e+00 1.2118193310730534e+00 + -3.0489861104742055e+00 2.2400944321699527e+00 1.5118279361446409e+00 + -3.3053157096936894e+00 2.0162190842064818e+00 1.7959230043306482e+00 + -3.4683282283481849e+00 1.7102134450539852e+00 2.0285540279303214e+00 + -3.5581551939076514e+00 1.3771989684468939e+00 2.2082507077209224e+00 + -3.6172633129602603e+00 1.0466482790535188e+00 2.3575179813976881e+00 + -3.6966544951736058e+00 7.2878317923607572e-01 2.5052699172200223e+00 + -3.8443885762021739e+00 4.3133289160497201e-01 2.6629218124183702e+00 + -4.0970529821403838e+00 1.8467839950019671e-01 2.7960858840632805e+00 + -4.4443736291752423e+00 2.3081793710689413e-02 2.8522811813988382e+00 + -4.7227009817173764e+00 -1.5873119574895533e-01 2.9286074269898288e+00 + id 14687 + loc 1.7820861935615540e-01 7.2059947252273560e-01 393 + blend 0.0000000000000000e+00 + interp 4.2226282998607761e-01:3.2477091547346626e-01:5.0755223803169280e-01:2.4913568817834711e-01:1.0292702425045723e+00:2.5935388411569976e-01:1.9960778918911548e+00:3.1416523283068215e-01:2.7719935807441991e+00:4.2225860735777776e-01:3.1669687050133688e+00:2.4257546108762593e-01:3.9681202560647444e+00 + CVs 20 + -3.3072602847002952e-01 3.4417623944713505e-01 -1.2317560554678209e-01 + -6.4594169272816937e-01 6.9947741644977501e-01 -2.6447164085905361e-01 + -9.4330669102508347e-01 1.0749264046047973e+00 -4.2138557168209800e-01 + -1.2327296350156731e+00 1.4652317154274979e+00 -5.8707730847530026e-01 + -1.5352477941125429e+00 1.8576828709486557e+00 -7.5167068178764906e-01 + -1.8707692849720141e+00 2.2377340612265342e+00 -9.0362449430119396e-01 + -2.2538038920210934e+00 2.5868752400084034e+00 -1.0343343188738894e+00 + -2.6935469703679651e+00 2.8792302697642622e+00 -1.1444422522949722e+00 + -3.1863135165300225e+00 3.0904766111779418e+00 -1.2460323155325470e+00 + -3.7118348463543116e+00 3.2159342941863267e+00 -1.3606392602512334e+00 + -4.2488102868204241e+00 3.2612690195884300e+00 -1.5082146544084147e+00 + -4.7856181976126164e+00 3.2166181401000604e+00 -1.6925803719339365e+00 + -5.3062212741233594e+00 3.0605598086708161e+00 -1.9011572248265323e+00 + -5.7825420442942903e+00 2.7894566617685892e+00 -2.1196331475764723e+00 + -6.1948805691912279e+00 2.4298830319735503e+00 -2.3326401894666851e+00 + -6.5460279227665561e+00 2.0285984724833162e+00 -2.4965816010743449e+00 + -6.8539184690859170e+00 1.6299816425967102e+00 -2.5599456028581242e+00 + -7.1427783839731589e+00 1.2339703920441540e+00 -2.5393736777870468e+00 + -7.4424079985995535e+00 7.8056182305581534e-01 -2.5238796713972262e+00 + id 14688 + loc 7.8410494327545166e-01 5.4101216793060303e-01 405 + blend 0.0000000000000000e+00 + interp 3.6680390347263370e-01:3.3977625058158145e-01:9.0090870055373862e-02:3.2134409490302251e-01:9.7720953916757425e-01:3.1119475323017515e-01:1.7713349557362181e+00:3.3013088895119330e-01:2.3955638101857764e+00:2.9065017236972018e-01:2.9996494068107777e+00:3.6680023543359896e-01:3.4940406372276778e+00 + CVs 20 + 5.4518723101677921e-02 2.1588815349411075e-01 -2.7267169627105112e-02 + 4.9285390622186953e-02 3.7270586337138240e-01 -4.6935830300088424e-02 + 2.5227519818163791e-02 5.0554117727104253e-01 -6.3570507470736698e-02 + 1.2077839175205329e-02 6.3604916141745238e-01 -7.7995337361054254e-02 + 5.4405968990173248e-03 7.6141999794014825e-01 -8.6389223406567434e-02 + 1.0719324266266206e-03 8.7942003713730299e-01 -8.3146449052825339e-02 + -3.6274660081554444e-03 9.8704152934918432e-01 -6.0764247441764480e-02 + -7.1856598767994218e-03 1.0788354986858277e+00 -1.2701965094120457e-02 + -3.9777405869566573e-03 1.1504300989368736e+00 6.0786455926135671e-02 + 1.0250340071601194e-02 1.2050164376185102e+00 1.5493660992980579e-01 + 3.6136363176067055e-02 1.2488388699949957e+00 2.6968085619523152e-01 + 7.3071242910459910e-02 1.2833084706790798e+00 4.1050286407990849e-01 + 1.2109558703018947e-01 1.3065676015928123e+00 5.7876683052536260e-01 + 1.8054912163066045e-01 1.3269915682687539e+00 7.5961019089091109e-01 + 2.4931710174734839e-01 1.3690831696947925e+00 9.2590094849770832e-01 + 3.2054229195171119e-01 1.4513639985964260e+00 1.0559249994007651e+00 + 3.8699724067420543e-01 1.5666193310737588e+00 1.1478510229540841e+00 + 4.4754280238160815e-01 1.6951559119758430e+00 1.2170859068349587e+00 + 5.4649882782586101e-01 1.7679925189753734e+00 1.4062953498794883e+00 + id 14689 + loc 6.1671626567840576e-01 7.4118852615356445e-01 404 + blend 0.0000000000000000e+00 + interp 3.8126877495439954e-01:3.7685353139031796e-01:3.2521461486129000e-02:2.9170896314640293e-01:6.1736618482475125e-01:3.0097381368745207e-01:1.4135380980959980e+00:3.8126496226665002e-01:2.0017034346943179e+00:3.1976079231392646e-01:2.9482430165824205e+00:3.4715193317361370e-01:3.4744704447849060e+00 + CVs 20 + -2.7746397249992401e-02 6.0078569879843599e-02 1.0618377366244547e-02 + -3.9557519968407451e-02 1.3451726767341685e-01 3.7334285388957451e-02 + -3.5429322332534610e-02 2.2032771602462284e-01 7.7788074111956151e-02 + -1.6650567006341738e-02 3.1089695975155773e-01 1.2602288524143845e-01 + 2.1464397518879130e-02 4.0125408600077106e-01 1.7823822149449647e-01 + 8.2042846319490575e-02 4.8550638522530165e-01 2.3029528455881881e-01 + 1.6464642456470180e-01 5.5733480506315969e-01 2.7865887698891856e-01 + 2.6423574676469230e-01 6.1156590284594503e-01 3.2231485877750010e-01 + 3.7235050411842391e-01 6.4590714523066595e-01 3.6402829429963873e-01 + 4.8148410031181316e-01 6.6035375538307950e-01 4.0754719343082269e-01 + 5.9057215927303197e-01 6.5485327272599303e-01 4.4960674810256729e-01 + 7.0149482057023183e-01 6.2829523916407015e-01 4.7988621082622784e-01 + 8.1267349599654182e-01 5.8089381049103894e-01 4.8869996358208651e-01 + 9.1640763895541255e-01 5.1722671664282016e-01 4.7663115308207582e-01 + 1.0043876409642962e+00 4.4384563342794203e-01 4.5367580480077252e-01 + 1.0723440644730879e+00 3.6318910156953299e-01 4.2561382844333284e-01 + 1.1164728844882776e+00 2.7450488255868338e-01 3.9167724933730985e-01 + 1.1307367827238053e+00 1.7767998461284229e-01 3.4955657376852534e-01 + 1.1580367647420946e+00 1.1301169305224629e-01 3.2316179674963746e-01 + id 14690 + loc 6.1384791135787964e-01 3.3809963613748550e-02 399 + blend 0.0000000000000000e+00 + interp 4.0721015839767127e-01:2.8714646995392734e-01:3.9682363848249391e-01:2.5749417343362463e-01:1.7052752902349790e+00:4.0720608629608729e-01:2.7100859787878138e+00:2.5349932120405011e-01:3.0267049783890014e+00:2.7896699892284466e-01:3.8881187342376702e+00 + CVs 20 + 3.8463208685355610e-01 3.2284031230783128e-01 1.7963175766240158e-01 + 7.3112818807843682e-01 6.3140555105206342e-01 3.8313780505900663e-01 + 1.0483723852641713e+00 9.1322445573553412e-01 6.3003494099423241e-01 + 1.3455453707854417e+00 1.1540145423878716e+00 9.1343843620027598e-01 + 1.6291259907198357e+00 1.3441555956954112e+00 1.2187850660377972e+00 + 1.8995622539044759e+00 1.4787471116597881e+00 1.5408415166909992e+00 + 2.1493396114759133e+00 1.5516196896451282e+00 1.8767966082286940e+00 + 2.3669014934904724e+00 1.5561755175685321e+00 2.2199668605128933e+00 + 2.5399733266171833e+00 1.4913307460177740e+00 2.5610001034244196e+00 + 2.6580231792781994e+00 1.3648986603769022e+00 2.8911443790341496e+00 + 2.7197669635551915e+00 1.1931236492477266e+00 3.2089961563080536e+00 + 2.7424942656841802e+00 9.9233993185142677e-01 3.5322971260424110e+00 + 2.7505401746349203e+00 7.6589997578644775e-01 3.8889794395951243e+00 + 2.7526787244757394e+00 5.2007771834450955e-01 4.2952827988263174e+00 + 2.7408918830044242e+00 2.9810238454071869e-01 4.7509119208486901e+00 + 2.6722553839845609e+00 1.8379159568091774e-01 5.2166304099572853e+00 + 2.4612935041428328e+00 2.6569134427770336e-01 5.5586060745810251e+00 + 2.1216678027228077e+00 5.0462492370063572e-01 5.6060816441021206e+00 + 1.9464079047024527e+00 5.9057585960286119e-01 6.0445681368453865e+00 + id 14691 + loc 8.1317794322967529e-01 7.1366310119628906e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2099877096144309e-01:4.6761373047192700e-01:1.0116481494994112e-02:3.6676680815371815e-01:4.9431779445384272e-01:3.3980175315517080e-01:1.4101592069492304e+00:5.2099356097373350e-01:2.0182224579188053e+00:3.5876535682852378e-01:2.5280442080369174e+00:4.5270622297651225e-01:3.0009997943229103e+00:3.2914537459951676e-01:3.5890280358911739e+00 + CVs 20 + 2.8767473872946703e-02 3.2072362984576280e-01 -3.7433071101510007e-02 + 7.9829743276254306e-02 6.5228487242283439e-01 -8.7245780669931633e-02 + 1.4736759582116293e-01 9.9035219755537351e-01 -1.6749763941547507e-01 + 2.3211864971069773e-01 1.3285756620818825e+00 -2.9157172929740233e-01 + 3.4063466722034869e-01 1.6552812167099540e+00 -4.6892074176875242e-01 + 4.7604716615344200e-01 1.9501152390789964e+00 -7.0947412780521257e-01 + 6.3439687025067160e-01 2.1849381149588738e+00 -1.0178544884407474e+00 + 8.0432574806650559e-01 2.3366040208994217e+00 -1.3858581766682934e+00 + 9.7199720994084582e-01 2.3938982505295354e+00 -1.7962162258700318e+00 + 1.1254623707260132e+00 2.3543692794532554e+00 -2.2291782832730931e+00 + 1.2571923002709195e+00 2.2211155862297138e+00 -2.6659368072648242e+00 + 1.3652502451139834e+00 1.9998608605806969e+00 -3.0893082551111357e+00 + 1.4536157858486758e+00 1.6973215961023256e+00 -3.4830149951859104e+00 + 1.5324137080124562e+00 1.3197083173691619e+00 -3.8303369385140629e+00 + 1.6146433605667310e+00 8.6629332471928677e-01 -4.1068761976805641e+00 + 1.7004295490495469e+00 3.0991501359255724e-01 -4.2456350892776271e+00 + 1.7545739138937209e+00 -3.7641566002075622e-01 -4.0505179426985105e+00 + 1.7410456162696741e+00 -9.5512491108157893e-01 -3.3834388213036526e+00 + 1.8181090314428547e+00 -1.3130461026213549e+00 -3.3164654932457074e+00 + id 14692 + loc 7.6517379283905029e-01 7.0665019750595093e-01 401 + blend 0.0000000000000000e+00 + interp 2.8624235067511289e-01:2.5150563816866334e-01:5.3327612434301042e-01:2.8623948825160617e-01:1.3735300425404626e+00:2.6340492117845415e-01:2.7718210517386890e+00:2.5962484116512735e-01:3.5861774235714625e+00 + CVs 20 + -7.5446206499440019e-02 3.2368007414306799e-01 -2.9160581730596563e-01 + -1.0830767324744001e-01 6.3963045505430915e-01 -5.7689907107253313e-01 + -1.0721218015394751e-01 9.3750227625811411e-01 -8.8052497293467824e-01 + -7.9796421916119409e-02 1.2018876640218157e+00 -1.2166151165015731e+00 + -3.7296585987281639e-02 1.4201204139924373e+00 -1.5981220532916423e+00 + -6.2407562469591893e-03 1.5866952125600302e+00 -2.0374144363167241e+00 + -2.9436509169320946e-02 1.6976797226501323e+00 -2.5306183303749559e+00 + -1.4742125911339954e-01 1.7435579118424092e+00 -3.0482772960575617e+00 + -3.7799837366948985e-01 1.7110434073629628e+00 -3.5395455352354883e+00 + -7.0949134273619474e-01 1.5955535658673843e+00 -3.9503415762927485e+00 + -1.1071832129832084e+00 1.4096729243086616e+00 -4.2416140040955366e+00 + -1.5295118146940510e+00 1.1767744836364737e+00 -4.3998198868558847e+00 + -1.9551187422517504e+00 9.1357775008525410e-01 -4.4446072130202703e+00 + -2.3843380552281115e+00 6.2478736953447433e-01 -4.4080486511601222e+00 + -2.8221557643633455e+00 3.1617019895418152e-01 -4.3129353735922455e+00 + -3.3020770481322952e+00 -2.5224985102451913e-02 -4.2075743049631651e+00 + -3.8656002392822923e+00 -4.2317093109432546e-01 -4.2076221212927525e+00 + -4.4489668994787719e+00 -8.1186384233830533e-01 -4.3973512111739490e+00 + -4.8909495570491925e+00 -1.0438439315040566e+00 -4.5810435986827258e+00 + id 14693 + loc 8.0928391218185425e-01 9.9158346652984619e-01 405 + blend 0.0000000000000000e+00 + interp 4.5423033740260116e-01:2.9054659211022293e-01:3.0022744567293891e-01:3.9175897154264783e-01:1.1364578099037299e+00:2.2728507704590931e-01:1.9395241484159880e+00:4.2914353992391785e-01:2.5332280328191725e+00:4.5422579509922717e-01:3.0065182454717592e+00:2.7711406092588964e-01:3.4979152151036086e+00 + CVs 20 + 3.2661698540886686e-01 3.4697722265097497e-01 -1.0490422089159762e-01 + 4.7861325480574080e-01 5.5310598358256391e-01 -1.8427148750300670e-01 + 5.7035606096636104e-01 6.7739378615874457e-01 -2.4317522605142988e-01 + 6.5994790141313375e-01 7.7444745473609444e-01 -2.8797928053190586e-01 + 7.4243579140889826e-01 8.4476697062672690e-01 -3.2087733545490016e-01 + 8.1231928811348642e-01 8.8974850613404644e-01 -3.4799833372896649e-01 + 8.6321845793737517e-01 9.1498927608295377e-01 -3.8161469238511769e-01 + 8.9221584638141793e-01 9.3710915385861948e-01 -4.3761082169549448e-01 + 9.1215313195834824e-01 9.7833870679550305e-01 -5.1344256762552076e-01 + 9.3763754371273778e-01 1.0324599930729570e+00 -5.7986901770269161e-01 + 9.6294834418109465e-01 1.0778711314359919e+00 -6.2267668274164512e-01 + 9.8015698739905677e-01 1.1097116356563144e+00 -6.4608568190762239e-01 + 9.8646112083646731e-01 1.1292491138469671e+00 -6.5401189147546601e-01 + 9.7654735334213727e-01 1.1229218701406660e+00 -6.4602585791268741e-01 + 9.4163179197870917e-01 1.0641405935694066e+00 -6.1998644010250903e-01 + 8.8198980320461762e-01 9.3934998743099030e-01 -5.6922755629463240e-01 + 8.1354356365872960e-01 7.6328652764087923e-01 -4.8318959799947869e-01 + 7.6009614994930308e-01 5.6298464527852199e-01 -3.5914083079598058e-01 + 7.7659483952832042e-01 4.8892836394023126e-01 -2.6587401326112203e-01 + id 14694 + loc 4.2414340376853943e-01 4.5176339149475098e-01 404 + blend 0.0000000000000000e+00 + interp 4.7338277846868876e-01:4.7337804464090411e-01:3.4110247430953866e-01:3.4956527113913871e-01:1.0127587207099142e+00:4.2998760192758428e-01:1.7893326437063743e+00:3.1577394241059437e-01:2.2249101836180780e+00:3.5241328103550373e-01:3.0302019470549366e+00:3.5493158969122174e-01:3.8887863233061282e+00 + CVs 20 + -7.8178348123995531e-02 1.4223736842511420e-01 -1.1990383020471673e-01 + -1.5345172714514127e-01 2.5895412807879520e-01 -2.1613885401779379e-01 + -2.3246730466685259e-01 3.6603770487465626e-01 -3.1295818331433284e-01 + -3.1814189150677663e-01 4.7138034029561232e-01 -4.2519792289476460e-01 + -4.0951244189657343e-01 5.7372525713078670e-01 -5.5335169391737804e-01 + -5.0510691501122162e-01 6.7175307398409045e-01 -6.9673728573884197e-01 + -6.0483193537731583e-01 7.6478620723309243e-01 -8.5349886973616251e-01 + -7.1100973560813552e-01 8.5335945149682724e-01 -1.0204886089173237e+00 + -8.2753079844747202e-01 9.3906946538160807e-01 -1.1939502709284473e+00 + -9.6058784918109352e-01 1.0246899001877701e+00 -1.3705554055125753e+00 + -1.1180759141441685e+00 1.1128380328215832e+00 -1.5437156838744646e+00 + -1.3115445342298315e+00 1.2033112222923137e+00 -1.7060113843581468e+00 + -1.5493645283726711e+00 1.2918981890966077e+00 -1.8428988238531865e+00 + -1.8347270602810593e+00 1.3704680039635204e+00 -1.9388000581372591e+00 + -2.1705829883930621e+00 1.4321576799872637e+00 -1.9786525663945194e+00 + -2.5547053774344048e+00 1.4820138893087984e+00 -1.9425581412362953e+00 + -2.9604601494598199e+00 1.5387299179844807e+00 -1.8113115063692724e+00 + -3.3412875259776009e+00 1.6126703092772701e+00 -1.5822769263103340e+00 + -3.5090796118201895e+00 1.6499592097033504e+00 -1.4262354784146236e+00 + id 14695 + loc 4.4578582048416138e-01 6.4939320087432861e-02 399 + blend 0.0000000000000000e+00 + interp 4.2905544235113835e-01:2.5434768346701669e-01:8.3867009029612416e-02:3.6709759807857678e-01:8.3065473527688882e-01:4.2905115179671488e-01:1.0777626149486728e+00:2.7774091865396061e-01:1.7559551889532603e+00:4.0146082390449156e-01:2.3971265961436448e+00:2.6715313971893417e-01:2.9790959852563592e+00:4.2616548395841003e-01:3.8788935127544120e+00 + CVs 20 + -1.8191078167543481e-01 2.2848932607708833e-01 2.4814115111216403e-01 + -3.6333120684591008e-01 4.1769754728225106e-01 4.6254248156662542e-01 + -5.4896703506102740e-01 5.7141565277267270e-01 6.5163172765002297e-01 + -7.3926031847033424e-01 6.9438796141470993e-01 8.2184480145888128e-01 + -9.2710094170846113e-01 7.9300917786482794e-01 9.7713442854434240e-01 + -1.0998852128573806e+00 8.7597211734079106e-01 1.1236670224682492e+00 + -1.2451555448147225e+00 9.5410576306875172e-01 1.2631830924465459e+00 + -1.3549056370891817e+00 1.0418261942492126e+00 1.3932113946330134e+00 + -1.4321557571957573e+00 1.1550732751719459e+00 1.5175923767344222e+00 + -1.4943065517611029e+00 1.3025367671299346e+00 1.6533522952490509e+00 + -1.5675786129078815e+00 1.4695129761448422e+00 1.8267695276818299e+00 + -1.6710270547113169e+00 1.5970120396279022e+00 2.0637980421477362e+00 + -1.7925212432875064e+00 1.6114773985785367e+00 2.3718492639389601e+00 + -1.9072781667225731e+00 1.4758375077799397e+00 2.7461271252983845e+00 + -2.0176262968462972e+00 1.1831379195508087e+00 3.1925931774596497e+00 + -2.1874817346515112e+00 7.7896702914064764e-01 3.7319784647001506e+00 + -2.5414081141290508e+00 3.3598009062060741e-01 4.3835528372422745e+00 + -3.2092665883183655e+00 -2.1391743501174343e-02 5.0427850361817974e+00 + -3.6249786403652222e+00 3.1396720375778786e-02 5.3179958835875425e+00 + id 14696 + loc 1.5870249271392822e-01 1.2115151435136795e-01 1079 + blend 0.0000000000000000e+00 + interp 3.3817173085198521e-01:2.7369771859126457e-01:5.8566633754658559e-01:2.7345907636471350e-01:1.1750992404582177e+00:3.1685728068649122e-01:1.8870071043362737e+00:3.3816834913467669e-01:2.7179840020159731e+00:3.2432046843455986e-01:3.6413864436228374e+00 + CVs 20 + 2.5053510346249708e-01 4.3854573943814679e-01 8.1398143429750935e-02 + 3.4497926835111070e-01 7.8998657809324291e-01 1.6117060918066989e-01 + 3.8225976456334926e-01 1.1172678669976661e+00 2.4293243396464398e-01 + 4.1325408877232939e-01 1.4318054701453595e+00 3.3446352842249655e-01 + 4.4688647171632712e-01 1.7318250796198487e+00 4.3516416593193114e-01 + 4.9884018950389319e-01 2.0339942590801048e+00 5.4660656120530726e-01 + 5.6941222464714858e-01 2.4031137384145875e+00 6.4443646604926019e-01 + 5.8332342830109019e-01 2.8982392664537513e+00 6.3061407905585121e-01 + 4.3390998766347444e-01 3.3936055658464488e+00 4.2471736307847946e-01 + 1.6594289439620025e-01 3.7122868349084026e+00 1.1488433800735853e-01 + -1.2217145459690748e-01 3.8558007618425991e+00 -2.0792943087407834e-01 + -3.9302510213030373e-01 3.8778009827351259e+00 -5.3208429317500749e-01 + -6.3332865546747641e-01 3.8096702587538096e+00 -8.7033913890852788e-01 + -8.4895032731068054e-01 3.6532828298906699e+00 -1.2457264869627480e+00 + -1.0602630039731555e+00 3.3767115472199927e+00 -1.6617212475567036e+00 + -1.2295289407380685e+00 2.9712629923766363e+00 -2.0498178089759929e+00 + -1.2690385475674566e+00 2.4633068975219361e+00 -2.3881088600034368e+00 + -1.2079773911765832e+00 1.8768132611015163e+00 -2.5623835834973532e+00 + -1.2465861470359911e+00 1.7123503359525181e+00 -2.2624569471852483e+00 + id 14697 + loc 7.9881000518798828e-01 6.9466865062713623e-01 405 + blend 0.0000000000000000e+00 + interp 4.0318561655248802e-01:3.4329184705357479e-01:3.7514111657302207e-01:3.8319547126609227e-01:9.9952508840213405e-01:2.7739698233553484e-01:1.6877686273638048e+00:3.0313659920988079e-01:2.1757279553735489e+00:4.0318158469632254e-01:2.9234514687378734e+00:3.2058756154923568e-01:3.7917469507927737e+00 + CVs 20 + 1.7913323279453358e-01 2.8452673459150335e-01 -1.0697364775364160e-01 + 2.3821692717293907e-01 4.9670513314171777e-01 -2.0512541070851217e-01 + 2.6757907546283866e-01 6.5412020339932764e-01 -2.8930689067347903e-01 + 2.9519888927053184e-01 8.0572075097151497e-01 -3.6453601741624703e-01 + 3.1778812752033092e-01 9.5777473990267736e-01 -4.2557723356876231e-01 + 3.3401546094527534e-01 1.1194685284113381e+00 -4.6102602495162243e-01 + 3.4447870378367840e-01 1.3011308263132348e+00 -4.4591255952148817e-01 + 3.5406430828766899e-01 1.4928849566426940e+00 -3.3903923091609589e-01 + 3.7338046214684462e-01 1.6369106036442562e+00 -1.3267864980407362e-01 + 4.0602161153427652e-01 1.6978875173010080e+00 9.5421171969097482e-02 + 4.4288375679799441e-01 1.7140706846328726e+00 2.9327186777981468e-01 + 4.7566973784166833e-01 1.7165573373766803e+00 4.7230032664210708e-01 + 5.0101362532241267e-01 1.7130039679960971e+00 6.5072022774742311e-01 + 5.1748783480945360e-01 1.7123290160813927e+00 8.2847349313574425e-01 + 5.2235341498963006e-01 1.7351668405277878e+00 9.8912215254606362e-01 + 5.1001859200749933e-01 1.7987396627621863e+00 1.1146269828718314e+00 + 4.7712780779890307e-01 1.8952728953111670e+00 1.2044287917389751e+00 + 4.2884224821514494e-01 2.0041989870120638e+00 1.2737905774751761e+00 + 4.3535685068412644e-01 2.0870144036477374e+00 1.4215815165130041e+00 + id 14698 + loc 4.8231062293052673e-01 9.3738973140716553e-01 404 + blend 0.0000000000000000e+00 + interp 4.3685176722326047e-01:3.5504618148561345e-01:6.9715514997397943e-01:2.8195249237833264e-01:1.1747361910421263e+00:2.6689063074716057e-01:1.9820587932764462e+00:3.2307219127573295e-01:2.9657525175796140e+00:4.0965303024748234e-01:3.3131852158927071e+00:4.3684739870558825e-01:3.9475760910327646e+00 + CVs 20 + 1.2353803314954531e-01 2.0346230519365366e-01 2.0555004992505448e-02 + 2.3968269665802930e-01 4.0249345454543006e-01 5.1812635651090511e-02 + 3.6642093824769117e-01 5.8026247813296450e-01 6.7169694540347463e-02 + 5.0651644907149596e-01 7.3994904864815159e-01 6.8569859089121998e-02 + 6.5858868032573936e-01 8.7835270572474911e-01 5.4819917417961328e-02 + 8.1897454441680251e-01 9.9447508757667025e-01 2.6738761720852655e-02 + 9.8327466980348588e-01 1.0901872713967649e+00 -1.1941989247198470e-02 + 1.1479044397056377e+00 1.1720502101416292e+00 -5.2219973971675437e-02 + 1.3116025403546272e+00 1.2485426827088517e+00 -8.2856782885977531e-02 + 1.4733274501937195e+00 1.3224841108658012e+00 -1.0093724310611435e-01 + 1.6264365502995768e+00 1.3850265031108870e+00 -1.2586673789582592e-01 + 1.7601089339285947e+00 1.4273231730541860e+00 -1.8023664136324680e-01 + 1.8672856671049429e+00 1.4520686663561908e+00 -2.6217330388698767e-01 + 1.9525359833893647e+00 1.4709615322022613e+00 -3.4546328336963467e-01 + 2.0268275990291840e+00 1.4916715703506989e+00 -4.0566195729486143e-01 + 2.0870197047861141e+00 1.5102709403376773e+00 -4.4552753711327264e-01 + 2.1207568349872874e+00 1.5206887031758785e+00 -4.7742654343827817e-01 + 2.1240652375484230e+00 1.5196643849482185e+00 -5.0233712661994889e-01 + 2.1500333184242506e+00 1.5442417358904870e+00 -4.5272804090610813e-01 + id 14699 + loc 6.9271397590637207e-01 9.9979954957962036e-01 399 + blend 0.0000000000000000e+00 + interp 3.8396557107243395e-01:2.5481464625019484e-01:3.4982192597276118e-01:3.8396173141672324e-01:1.7257267510209420e+00:2.6384915248556035e-01:2.1062922421244230e+00:2.7552257898105775e-01:3.1665267321619668e+00:3.5631988141094606e-01:3.9388432284406774e+00 + CVs 20 + -1.2421774281037942e-01 3.1976026836223226e-01 -2.5581264916680818e-01 + -2.6419122044083254e-01 6.1515874407824800e-01 -5.0499266419345457e-01 + -4.2039347136388427e-01 8.7773530339832107e-01 -7.4810723987822014e-01 + -5.9212899011626474e-01 1.0998092714641947e+00 -9.8335093351074276e-01 + -7.7636395006893688e-01 1.2764112275934485e+00 -1.2063762164509793e+00 + -9.6703050575593730e-01 1.4089922493128391e+00 -1.4112003950623504e+00 + -1.1588728894103255e+00 1.5033980601700634e+00 -1.5966672335482004e+00 + -1.3480282450561769e+00 1.5648114993351476e+00 -1.7652054607774736e+00 + -1.5334265537760456e+00 1.6119458752591025e+00 -1.9155746542351446e+00 + -1.7260219642108519e+00 1.6814691646869198e+00 -2.0533866301136730e+00 + -1.9333017334612821e+00 1.7726583550737287e+00 -2.2012982870111197e+00 + -2.1097965787682784e+00 1.8153605211758399e+00 -2.3653908427388899e+00 + -2.1992224166969705e+00 1.7672703033821358e+00 -2.5306450465297718e+00 + -2.2416953353516256e+00 1.6662654551175824e+00 -2.7136064696128344e+00 + -2.3143395530600053e+00 1.5522801659492989e+00 -2.9300885769876217e+00 + -2.3707456714019259e+00 1.3391304593421929e+00 -3.1320267848618242e+00 + -2.2798875475564433e+00 8.1573277476993411e-01 -3.2466740622622483e+00 + -2.2736009519487448e+00 -4.0091410430311225e-02 -3.3135028472192900e+00 + -2.6383685268147992e+00 -9.2602192142062167e-02 -3.4080825354833726e+00 + id 14700 + loc 6.6513484716415405e-01 7.0708936452865601e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3353786736976363e-01:4.3353353199108996e-01:1.0438674569357431e-04:3.9261347140445074e-01:4.4755285434059200e-01:3.2881441156184538e-01:1.1841640646265796e+00:2.7169450686339314e-01:1.9908743740209380e+00:3.6344433136191534e-01:2.4678645638849872e+00:3.2377958042582328e-01:3.4339469669198293e+00 + CVs 20 + 6.6425676518854143e-02 3.5676880105896486e-01 -3.6937004881040791e-03 + 1.5775462823937203e-01 6.9911070701967659e-01 -2.7497930915200641e-02 + 2.6440740223997683e-01 1.0328121734130686e+00 -7.1283486254208328e-02 + 3.8447161281564801e-01 1.3571110332919720e+00 -1.3676356353395414e-01 + 5.2165292674392105e-01 1.6653614324516433e+00 -2.3009436227862190e-01 + 6.7761492844046922e-01 1.9473241829444345e+00 -3.6161126566615209e-01 + 8.5047139689455120e-01 2.1894500824230780e+00 -5.4187517401834417e-01 + 1.0334661120574675e+00 2.3797801889482626e+00 -7.7304878755330209e-01 + 1.2170563208634300e+00 2.5110460314396099e+00 -1.0488089202730189e+00 + 1.3918552835373377e+00 2.5798068155771743e+00 -1.3588566778379547e+00 + 1.5501202698033918e+00 2.5857843512589040e+00 -1.6914476145791741e+00 + 1.6861049840798832e+00 2.5311607292948630e+00 -2.0345510826226021e+00 + 1.7960906652392761e+00 2.4200900025367336e+00 -2.3762885183139026e+00 + 1.8785030660579753e+00 2.2576438441236220e+00 -2.7058060353374951e+00 + 1.9336917791168826e+00 2.0446642517644098e+00 -3.0154330317980604e+00 + 1.9634154755362538e+00 1.7577828216796942e+00 -3.3035143253561898e+00 + 1.9685639874366558e+00 1.3238993298476089e+00 -3.5475579792872138e+00 + 1.9367918260187342e+00 7.4201231345625063e-01 -3.6293370128355669e+00 + 1.8658279951596970e+00 5.3513669869972968e-01 -3.6364556634966574e+00 + id 14701 + loc 6.2659764289855957e-01 4.4715809822082520e-01 405 + blend 0.0000000000000000e+00 + interp 3.9893805786499542e-01:3.4851147449116943e-01:2.7638591427818271e-01:3.9893406848441682e-01:9.9736595263346173e-01:3.5850816210711051e-01:1.5875234133547975e+00:3.4212119318009471e-01:2.1946112379588651e+00:3.4851901598906215e-01:3.0001747805930301e+00:3.6373848166398720e-01:3.6851096419970344e+00 + CVs 20 + -2.5234846940488012e-02 1.7672011927522308e-01 2.0277820964312569e-02 + -7.5857136102105427e-03 3.1245951684232282e-01 2.8039581150255021e-02 + 2.5420701668572993e-02 4.2102442672145363e-01 2.3414049653845526e-02 + 5.0285036800083588e-02 5.2305956736225512e-01 7.2098334352336327e-03 + 6.8606002370283442e-02 6.1642409372394402e-01 -1.9974801147457446e-02 + 8.1254120274696695e-02 6.9846151371830034e-01 -5.6746406528810994e-02 + 8.8200868773847918e-02 7.6676262176770860e-01 -1.0106538753488602e-01 + 8.9404136575690685e-02 8.1953673628406820e-01 -1.5109430654404193e-01 + 8.5385682825209808e-02 8.5568431723236371e-01 -2.0646081063077193e-01 + 7.7149599466417529e-02 8.7381197502018881e-01 -2.6936692866728756e-01 + 6.5446312820584329e-02 8.7133508758885092e-01 -3.4345256972747751e-01 + 5.0578427436124784e-02 8.4463293520242033e-01 -4.3303490059897620e-01 + 3.2876154742870090e-02 7.8848607970049711e-01 -5.4168398527968942e-01 + 1.3405259314191176e-02 6.9675782631704841e-01 -6.6998664523764639e-01 + -7.8851736242229187e-03 5.6807903653311254e-01 -8.1961451364792703e-01 + -3.8292640717439333e-02 4.1407834771119983e-01 -1.0029624570659221e+00 + -9.4415036952132089e-02 2.6008469246911603e-01 -1.2357695568243310e+00 + -1.9291790725085151e-01 1.3333960088035127e-01 -1.5194569319238231e+00 + -2.6367822849801081e-01 -2.2456294228780520e-02 -1.8569411456319427e+00 + id 14702 + loc 8.7936711311340332e-01 2.3008283227682114e-02 399 + blend 0.0000000000000000e+00 + interp 4.2965336759395667e-01:2.7733427428678303e-01:2.4897567764494977e-01:4.2964907106028077e-01:9.9912619804753200e-01:2.4274826070519651e-01:2.0015825457891565e+00:3.6897200184460677e-01:2.8526957160228537e+00:2.4080234647585469e-01:3.5360753359182238e+00 + CVs 20 + 1.6658180864870151e-01 2.0847224585063054e-01 1.0869587203128990e-01 + 3.2910961584936221e-01 4.2581825485139913e-01 2.5128893853936562e-01 + 4.9081644199683377e-01 6.4319797909388465e-01 4.0849125570152267e-01 + 6.5766789314105001e-01 8.5303064105170701e-01 5.6738917338879069e-01 + 8.3558481551014652e-01 1.0480379952998433e+00 7.2413666000732380e-01 + 1.0228586043450072e+00 1.2159287201621511e+00 8.7469181956436159e-01 + 1.2119036440465827e+00 1.3455730056507655e+00 1.0181928411010124e+00 + 1.3938248204783776e+00 1.4304938576157078e+00 1.1549179549642783e+00 + 1.5626802777168882e+00 1.4679107273097771e+00 1.2821828076389821e+00 + 1.7169067474801802e+00 1.4562780491286795e+00 1.3976566755061066e+00 + 1.8557287608973070e+00 1.3969355972330622e+00 1.4966190901940370e+00 + 1.9781386885330956e+00 1.2979424459025852e+00 1.5675808857261280e+00 + 2.0872081814329770e+00 1.1782059925792665e+00 1.6025127691671655e+00 + 2.1907925901578835e+00 1.0587070156688423e+00 1.6129917921431061e+00 + 2.2948291265853666e+00 9.1719090030902684e-01 1.6216385005402685e+00 + 2.4005558704282883e+00 6.4371565863764735e-01 1.6376958192751152e+00 + 2.5391657082923094e+00 7.6869754546556313e-02 1.7562584664972141e+00 + 2.7478528717074866e+00 -5.1492355245376698e-01 2.2191090577370645e+00 + 2.8279252640472285e+00 -5.1784851347962324e-01 2.4483893526960392e+00 + id 14703 + loc 2.7566093206405640e-01 1.7543345689773560e-01 394 + blend 0.0000000000000000e+00 + interp 5.3568975917702044e-01:2.6945380306660477e-01:8.3128104526714097e-01:3.2185027975853414e-01:1.6416100736878638e+00:5.0329922806836702e-01:2.4429119888110020e+00:3.1385271331718911e-01:2.9721167707325362e+00:4.7008854877946243e-01:3.3672764747227815e+00:5.3568440227942871e-01:3.9504937925047892e+00 + CVs 20 + -1.1865407875772328e-01 2.6439459022388861e-01 1.7731832777630299e-01 + -2.2326958141588710e-01 5.3551204786240236e-01 3.8386425078638414e-01 + -3.1492555374981918e-01 8.0329895468271095e-01 5.9765908064576134e-01 + -3.9980866349110439e-01 1.0691006259160505e+00 8.0786780898458421e-01 + -4.8748342009619905e-01 1.3390004468999090e+00 1.0115885051686844e+00 + -5.8967517974916261e-01 1.6148644027621590e+00 1.2110516644948079e+00 + -7.1873960573952911e-01 1.8922407041319813e+00 1.4138222576386721e+00 + -8.8478279308204988e-01 2.1628081169287960e+00 1.6262057329846993e+00 + -1.0953406463597262e+00 2.4174095389449990e+00 1.8499982291598966e+00 + -1.3562277444792030e+00 2.6444242628287884e+00 2.0850166857206927e+00 + -1.6713242918479567e+00 2.8267356746249090e+00 2.3343831874862930e+00 + -2.0417818274482817e+00 2.9366874378616403e+00 2.6050547960332469e+00 + -2.4483570551155784e+00 2.9351812446490806e+00 2.8928217503160614e+00 + -2.8284722068342791e+00 2.8144413050709258e+00 3.1662023275628486e+00 + -3.1253567714263752e+00 2.6373302911035257e+00 3.3930401960842613e+00 + -3.3412792283923629e+00 2.4744519095163882e+00 3.5661595689072998e+00 + -3.5054474571605492e+00 2.3586934751774917e+00 3.6849649686888641e+00 + -3.6496255269662203e+00 2.2831357432588928e+00 3.7748939606948202e+00 + -3.8690946123581256e+00 2.1649064254239607e+00 4.0451050182089823e+00 + id 14704 + loc 7.9274505376815796e-02 5.5898821353912354e-01 404 + blend 0.0000000000000000e+00 + interp 4.7708332931034331e-01:3.8390022979633054e-01:2.6666937807171354e-01:4.7707855847705022e-01:1.0851326902259633e+00:3.4614253530856748e-01:1.6158061854506878e+00:3.6018488241728586e-01:2.4529923793137218e+00:4.1233599924006104e-01:2.9948738358263958e+00:3.1983924932534669e-01:3.4178109987731125e+00 + CVs 20 + -1.8796565183009858e-02 1.1872417240592728e-01 4.2708420350373658e-02 + -3.7928190134110418e-02 2.1688283403912795e-01 8.8406612718424760e-02 + -5.1070516960790291e-02 3.0538933093924092e-01 1.2581079516070795e-01 + -4.1400593878929970e-02 3.8665666860309722e-01 1.5395710837478113e-01 + -6.2271178170350827e-03 4.5911544010421756e-01 1.7228317601882615e-01 + 5.4712430239358123e-02 5.2519012619413608e-01 1.7799695716466779e-01 + 1.3989074398258730e-01 5.8809502254479140e-01 1.6663759923782873e-01 + 2.4579194138803581e-01 6.4973009352472122e-01 1.3261089892228520e-01 + 3.6663981705223009e-01 7.1044379379373179e-01 7.0336950870460657e-02 + 4.9351558805778745e-01 7.6805393050000026e-01 -2.4996723852217212e-02 + 6.1478681508846222e-01 8.1747022505849154e-01 -1.5618558212510608e-01 + 7.2085219623821462e-01 8.5384911137772090e-01 -3.2293426487464982e-01 + 8.0545023706408092e-01 8.7485536061629199e-01 -5.2362256848798894e-01 + 8.6113251260006263e-01 8.7895051976871597e-01 -7.5578621164564475e-01 + 8.7803035939422802e-01 8.6354188289884426e-01 -1.0154310405866056e+00 + 8.4324732105321110e-01 8.2750889646690751e-01 -1.2962813934190642e+00 + 7.4178494131544814e-01 7.7439103551610189e-01 -1.5859276569011629e+00 + 5.6142937216487776e-01 7.0814455361578743e-01 -1.8625968769674741e+00 + 4.2119205763473350e-01 6.1731335191943582e-01 -2.0224294202570459e+00 + id 14705 + loc 6.1003667116165161e-01 2.4658374488353729e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4141606007442585e-01:4.4141164591382515e-01:3.5663632256643774e-01:3.4562900192648249e-01:9.0757567966681474e-01:3.1509787447223120e-01:1.2229541483152628e+00:3.0439864246401649e-01:1.9972482737603485e+00:3.5538423373025879e-01:2.8690484642913887e+00:2.9934236668885661e-01:3.8231311352148176e+00 + CVs 20 + -2.5921066036071999e-02 4.3291538755058206e-01 -1.8461430384030628e-01 + -1.0012245231287520e-01 8.3477887472564083e-01 -2.7699896329461587e-01 + -2.2204850702106038e-01 1.2137012765473096e+00 -3.2636264419454841e-01 + -3.9598580089722424e-01 1.5661569967147324e+00 -3.4139514857541137e-01 + -6.2304276999020669e-01 1.8661538519440266e+00 -3.1000520532393316e-01 + -8.9553738401412208e-01 2.0762493330431617e+00 -2.2769189601629602e-01 + -1.1899688973092091e+00 2.1594130566994729e+00 -1.1196970365254844e-01 + -1.4725379324532755e+00 2.1088190391081159e+00 -2.3999544448570775e-03 + -1.7217655417429258e+00 1.9552875580955382e+00 7.2740394983784984e-02 + -1.9406559080464207e+00 1.7346536806536133e+00 1.2081413528853324e-01 + -2.1343352602057108e+00 1.4592184049653274e+00 1.6281600738899413e-01 + -2.2885576937238299e+00 1.1291906957544966e+00 2.0952703301929942e-01 + -2.3729892308331832e+00 7.4449717618515510e-01 2.6874257467203994e-01 + -2.3384930682550191e+00 3.0903109202535883e-01 3.4955920255543038e-01 + -2.1101634282717949e+00 -1.4150738710247113e-01 4.4810137213581036e-01 + -1.6481691663909865e+00 -5.2693003731029708e-01 5.7459892490552156e-01 + -9.4976093093695058e-01 -7.5412255953963214e-01 8.0327111989465239e-01 + -1.4366315605535318e-01 -7.0580868351773329e-01 1.1348647684786273e+00 + 2.2772263111242075e-01 -7.8084542451467664e-01 1.2400130839770052e+00 + id 14706 + loc 5.6506085395812988e-01 9.9349611997604370e-01 405 + blend 0.0000000000000000e+00 + interp 4.8918954347653748e-01:3.1334223860536020e-01:8.7805280950625009e-01:3.9118160372718253e-01:1.0449404486583773e+00:2.1245963460898706e-01:2.0146293724419841e+00:4.3292057650889809e-01:2.8675831934286728e+00:4.3517857477327176e-01:3.3815270705720817e+00:4.8918465158110275e-01:3.9997827541267164e+00 + CVs 20 + 2.6729577689469181e-01 3.4822922796669398e-01 -2.7252759927882040e-02 + 3.7272017951889858e-01 5.6008284283693843e-01 -5.0038532288310518e-02 + 4.3213114822557108e-01 7.2061102342369754e-01 -6.6314394966144372e-02 + 5.0473869016139461e-01 8.6561969907636371e-01 -7.5482206945886754e-02 + 5.8581730201014159e-01 9.9126518632900518e-01 -7.3289185522967565e-02 + 6.7187072014692473e-01 1.0951695787595734e+00 -5.6089677389235065e-02 + 7.6085762118848632e-01 1.1753606356582504e+00 -2.1026792061343613e-02 + 8.5180141955287147e-01 1.2289394631663664e+00 3.2623065878184740e-02 + 9.4479432232424654e-01 1.2528939488998418e+00 1.0190089399130492e-01 + 1.0410844116544831e+00 1.2461545882053437e+00 1.8095479816503635e-01 + 1.1422671952532042e+00 1.2099709078342491e+00 2.6271034358059331e-01 + 1.2490408439301670e+00 1.1472502954319324e+00 3.3961728192996454e-01 + 1.3598605606687888e+00 1.0613405707602941e+00 4.0382921309852698e-01 + 1.4707687952379003e+00 9.5380148344716154e-01 4.4844925356729359e-01 + 1.5773454315473150e+00 8.2524673720679298e-01 4.6987816391542703e-01 + 1.6754156408393204e+00 6.8007487004191680e-01 4.6893221787805672e-01 + 1.7625971153363711e+00 5.2542320062501657e-01 4.4967730272484174e-01 + 1.8461166882512750e+00 3.6156519104489049e-01 4.2051640238025517e-01 + 1.9744115225537624e+00 2.4648821374921032e-01 3.8002755577643221e-01 + id 14707 + loc 5.3158547729253769e-02 2.3528015613555908e-01 399 + blend 0.0000000000000000e+00 + interp 4.5115869815449366e-01:4.5115418656751216e-01:2.9159418589996644e-01:2.6496935038396663e-01:1.0114769153555541e+00:4.1038973743663409e-01:1.3431631471685965e+00:3.5534008453816457e-01:2.0525053613893500e+00:2.9905609529324884e-01:3.0025381337607318e+00:2.7535925244509180e-01:3.8233988649403101e+00 + CVs 20 + -7.3162364073568256e-02 2.8585256560110378e-01 2.0051485417254244e-01 + -1.8164989138447055e-01 5.6274731451248905e-01 3.8936397568570225e-01 + -3.1529544358197209e-01 8.2375810541922789e-01 5.6106068595744130e-01 + -4.6319713809503199e-01 1.0650074292160703e+00 7.1792209960011910e-01 + -6.1576110446821075e-01 1.2850842349651592e+00 8.6656411832646052e-01 + -7.6337013901555284e-01 1.4832606878375891e+00 1.0127633751283711e+00 + -9.0033548479475745e-01 1.6591376124916550e+00 1.1580263966870672e+00 + -1.0241560747450023e+00 1.8141375624867757e+00 1.3004385227061079e+00 + -1.1357157616463867e+00 1.9529539565763354e+00 1.4396756806889766e+00 + -1.2406815404026925e+00 2.0817859109978505e+00 1.5808797746553074e+00 + -1.3496174308685902e+00 2.1985509718351741e+00 1.7332987368894885e+00 + -1.4683514409453087e+00 2.2722709447929477e+00 1.9018483073485424e+00 + -1.5825146149342801e+00 2.2622476760789412e+00 2.0728347762696400e+00 + -1.6656928503645101e+00 2.1512673492763286e+00 2.2286433753324020e+00 + -1.6940141121479488e+00 1.9237507945087513e+00 2.3700476506568484e+00 + -1.6819121597016853e+00 1.5706137556198665e+00 2.5421451856260395e+00 + -1.7049852593221326e+00 1.1024895158658274e+00 2.8372839900093210e+00 + -1.9191988960488084e+00 6.0621694043502994e-01 3.2470576263884179e+00 + -2.1694970385410359e+00 5.1542407801131362e-01 3.2512107474065619e+00 + id 14708 + loc 2.4843560159206390e-01 7.7198743820190430e-01 394 + blend 0.0000000000000000e+00 + interp 4.8200467603188452e-01:2.6581383467457576e-01:9.5578469327212479e-01:3.9491514276364009e-01:1.8122145572413468e+00:4.6568121700274506e-01:2.0607253751450285e+00:4.8199985598512424e-01:2.8266161965201868e+00:4.2961646076082322e-01:3.3422712691609577e+00:4.1100415451103312e-01:3.9998584749521697e+00 + CVs 20 + -1.7769709945240098e-01 1.6628167522280762e-01 -1.0616899139377911e-01 + -3.7641914536546162e-01 3.3321287725233018e-01 -2.1082681610777310e-01 + -5.8738543649341601e-01 5.0802934849914683e-01 -3.0993938236302643e-01 + -8.0491137688827519e-01 6.9759308891615790e-01 -4.0163619750662399e-01 + -1.0273655606669339e+00 9.0690052332078452e-01 -4.8797378437265670e-01 + -1.2521357536882600e+00 1.1330883930000939e+00 -5.7786405553029530e-01 + -1.4733396154069491e+00 1.3570127825709317e+00 -6.8734707217459934e-01 + -1.6839520318480097e+00 1.5564722164334661e+00 -8.2347090885299556e-01 + -1.8892109134981676e+00 1.7333561611804715e+00 -9.8296621319600375e-01 + -2.1044535147204702e+00 1.9002779613668914e+00 -1.1712407303866383e+00 + -2.3258042094552271e+00 2.0402612548968015e+00 -1.4013329574280093e+00 + -2.5214216812795174e+00 2.1160374709508574e+00 -1.6635979761182327e+00 + -2.6666567150353990e+00 2.1096978227738354e+00 -1.9270684739190687e+00 + -2.7550663115254062e+00 2.0149622508910534e+00 -2.1657790949339653e+00 + -2.7817996973995713e+00 1.8521624234741787e+00 -2.3564052311852919e+00 + -2.7426457264976087e+00 1.6854098582717341e+00 -2.4818970494974746e+00 + -2.6414838157881162e+00 1.5575441923212092e+00 -2.5500366836551756e+00 + -2.5446076615664928e+00 1.4136975794026672e+00 -2.6085088671267966e+00 + -2.6703289292404224e+00 1.1573641157410717e+00 -2.7079302895031536e+00 + id 14709 + loc 3.4033281262964010e-03 1.9091586768627167e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4208729051182127e-01:2.9648722945620509e-01:6.9104735283910612e-01:4.4208286963891619e-01:1.0007428287968061e+00:4.0987482974976663e-01:1.4442380180014878e+00:3.6248283532530629e-01:2.0054409401383864e+00:2.1928648957441310e-01:2.8571266520597334e+00:3.2975592921692409e-01:3.8143433989393878e+00 + CVs 20 + 1.9586803304838943e-01 4.4093373928638746e-01 1.9246908563521722e-01 + 2.6194737106962196e-01 7.5428733192755115e-01 3.1788752608696458e-01 + 2.7789713204729322e-01 1.0175564384193057e+00 4.0909639124375086e-01 + 2.8729746997582373e-01 1.2468786219784760e+00 4.8960064053818847e-01 + 2.9955211488401268e-01 1.4215385758207137e+00 5.5880760976954047e-01 + 3.4864023100779096e-01 1.5095131750189030e+00 6.2259407758353258e-01 + 5.0496695438080474e-01 1.4973978416350360e+00 6.8778221667496808e-01 + 8.6890536241406879e-01 1.4570899521532279e+00 7.4524773544494172e-01 + 1.4269050526671947e+00 1.5877309840666456e+00 7.6173034499987513e-01 + 1.8998728132404117e+00 1.9558216732366545e+00 7.2404646797163408e-01 + 2.1249754450483396e+00 2.3584080458967058e+00 6.6467913077538765e-01 + 2.1668606760915159e+00 2.6609672441393584e+00 6.0728508766718581e-01 + 2.1037867121889136e+00 2.8448973872463110e+00 5.5867361711881802e-01 + 1.9752460329420090e+00 2.9343015580116587e+00 5.1911879133466121e-01 + 1.7802456364626704e+00 3.0070680503501972e+00 4.7182275313013500e-01 + 1.4425679195335859e+00 3.1887924694366996e+00 3.8941593973989852e-01 + 9.0491680736796853e-01 3.3842640391247576e+00 2.7851500729758449e-01 + 5.0300910525731046e-01 3.2687099220877447e+00 1.7382903021995622e-01 + 7.0150352461033305e-01 2.7751747140031999e+00 5.3098010961193709e-02 + id 14710 + loc 9.4447451829910278e-01 2.2724735736846924e-01 404 + blend 0.0000000000000000e+00 + interp 4.2773097071778327e-01:3.2749127711903259e-01:6.4418433106335438e-02:3.2705924758631472e-01:9.7398884708822964e-01:2.9019594629692830e-01:1.9888927756193207e+00:2.9768049820862352e-01:2.9929373584699270e+00:4.2772669340807612e-01:3.7634732038157566e+00 + CVs 20 + 4.2524472276253625e-02 2.1019122557757505e-01 1.1821036331219600e-01 + 9.5742933431756133e-02 4.1183050044778757e-01 2.3338045470641341e-01 + 1.2580812505930494e-01 6.2109569122513497e-01 3.5404469399876248e-01 + 1.2105344005786772e-01 8.3765853083069963e-01 4.8179554646501316e-01 + 7.5953241553886164e-02 1.0565492601189292e+00 6.1569702751057032e-01 + -1.4579631766167389e-02 1.2709704606723589e+00 7.5083587516077366e-01 + -1.5100486047074824e-01 1.4727483373809185e+00 8.7865949695147272e-01 + -3.2784047440340935e-01 1.6547683625200851e+00 9.8986633113168465e-01 + -5.3664200429184528e-01 1.8124388678115875e+00 1.0761715586978724e+00 + -7.6730148657369890e-01 1.9437595090176236e+00 1.1312363037034405e+00 + -1.0131178225845994e+00 2.0512448742395257e+00 1.1610577955963814e+00 + -1.2869918932171831e+00 2.1429513417911696e+00 1.1987587190561069e+00 + -1.6117559174416687e+00 2.2227148502030691e+00 1.3004670314339308e+00 + -1.9659741520447649e+00 2.2786198578481081e+00 1.5065411085319063e+00 + -2.2947556222742760e+00 2.2963555619568896e+00 1.7987081135484693e+00 + -2.5738505458112444e+00 2.2724166949911959e+00 2.1515891934832738e+00 + -2.7918766558880144e+00 2.2059625909795337e+00 2.5618028934330570e+00 + -2.9340028076912930e+00 2.1021216258344166e+00 3.0060208401141528e+00 + -3.0667985368505803e+00 2.0483347770345697e+00 3.1719964559079434e+00 + id 14711 + loc 9.4646096229553223e-01 2.7894473075866699e-01 405 + blend 0.0000000000000000e+00 + interp 6.1989180640520525e-01:6.1988560748714128e-01:6.8437254747346699e-01:4.9252116268285040e-01:1.0029986316511086e+00:5.6522880434577427e-01:1.4433435867911173e+00:3.5966743423495356e-01:1.9996818737790778e+00:3.6650301008900582e-01:2.5254738787394979e+00:2.9865236215139163e-01:3.0001050527761333e+00:3.1904469838775779e-01:3.9545353350210228e+00 + CVs 20 + -2.3741003212519984e-02 1.0183484365356038e-01 7.7265615428761814e-02 + -7.1955964603476613e-03 1.9176923423238251e-01 1.6088623833423621e-01 + 3.8004941108104429e-02 2.6131289177215433e-01 2.4736075896995274e-01 + 9.6937058245905539e-02 3.3226270457557605e-01 3.4535379401716704e-01 + 1.7492044769453832e-01 4.0641575433288429e-01 4.5128064085275954e-01 + 2.7949299134745398e-01 4.8368746200440016e-01 5.5875413512129901e-01 + 4.1930303690188814e-01 5.6230811574106376e-01 6.5778347406557169e-01 + 6.0155458518814831e-01 6.3785754721382115e-01 7.3347852007484349e-01 + 8.2757560387804729e-01 7.0302719346060738e-01 7.6640897775479666e-01 + 1.0875862410071313e+00 7.4828147793980748e-01 7.3655643285301386e-01 + 1.3600690998926466e+00 7.6438782782069259e-01 6.3020787497248687e-01 + 1.6172467066286087e+00 7.4401259767792594e-01 4.4452465190816526e-01 + 1.8309599869206425e+00 6.8061843733311400e-01 1.9223531900001722e-01 + 1.9823233109343135e+00 5.7465908311797287e-01 -1.0150602468176512e-01 + 2.0649383848478604e+00 4.4870034683074411e-01 -4.2631040278361310e-01 + 2.0691419260503929e+00 3.4950415610965480e-01 -7.9782017059371357e-01 + 1.9716444570409428e+00 3.3589668917966953e-01 -1.2210144385773263e+00 + 1.7621491055707224e+00 4.3685291242622093e-01 -1.6415009916985168e+00 + 1.7162975737497170e+00 4.1607834702045110e-01 -1.8631099865308944e+00 + id 14712 + loc 9.6510732173919678e-01 8.5582190752029419e-01 1079 + blend 0.0000000000000000e+00 + interp 4.8305846486012383e-01:3.4373134537296568e-01:6.8325318350505637e-01:4.8305363427547526e-01:1.0236606488052820e+00:3.1849514309450655e-01:1.7812846035094889e+00:2.4073718881219539e-01:2.8399213274304600e+00:2.0965571804815766e-01:3.6756997643276392e+00 + CVs 20 + 3.2048123625690754e-02 2.5822193452524289e-01 -6.4009975379279882e-02 + 9.0485124964615971e-02 5.4113148467345251e-01 -1.0302365568833685e-01 + 1.8033302695036665e-01 8.4400087773745391e-01 -1.4451542290913594e-01 + 3.0233539185218050e-01 1.1534944995374756e+00 -2.0791414872028224e-01 + 4.5690772117134215e-01 1.4620110932512240e+00 -3.0116527914150293e-01 + 6.4389210260297569e-01 1.7602338982097554e+00 -4.3167099708110612e-01 + 8.6109831077824051e-01 2.0313384663058867e+00 -6.0459139325290645e-01 + 1.1004430920702133e+00 2.2556064969443108e+00 -8.1794662874719382e-01 + 1.3488519325763364e+00 2.4215178199173217e+00 -1.0640135837867972e+00 + 1.5922009552882161e+00 2.5268917256206853e+00 -1.3338031822489196e+00 + 1.8170205954444418e+00 2.5753923793932092e+00 -1.6187514617953211e+00 + 2.0105266434061031e+00 2.5755878512304013e+00 -1.9112120249490814e+00 + 2.1605777351972901e+00 2.5398364495006760e+00 -2.2049530128148906e+00 + 2.2554452975284303e+00 2.4828584360420014e+00 -2.4973645263582482e+00 + 2.2885467846903804e+00 2.4207051072950048e+00 -2.7995711389335463e+00 + 2.2728812868222708e+00 2.3699191199411787e+00 -3.1670896602023770e+00 + 2.2573745191419308e+00 2.3044953521154712e+00 -3.7552348722045457e+00 + 2.2969505880702474e+00 1.9795416312579852e+00 -4.5960394496923458e+00 + 2.1852142813398290e+00 1.8475084572513261e+00 -4.5924444020548716e+00 + id 14713 + loc 8.7271517515182495e-01 2.3186263442039490e-01 394 + blend 0.0000000000000000e+00 + interp 4.4689575572417983e-01:4.4689128676662260e-01:7.4244994240988960e-02:3.6574138488745489e-01:5.3144047438658870e-01:3.0732474816663491e-01:9.9257964130179899e-01:3.4336361715010738e-01:1.9809912504253231e+00:2.9086528051110239e-01:2.8363771269154672e+00:3.0037475166625949e-01:3.5324662650319509e+00 + CVs 20 + 3.9030304065855193e-01 2.5509858425881748e-01 2.3758686466736104e-01 + 7.0508727378969960e-01 4.5108516347346833e-01 4.4494446037149432e-01 + 9.9325189544690273e-01 6.1098362272217699e-01 6.4510083096867277e-01 + 1.2742624029189975e+00 7.4518393260470883e-01 8.4750813027161864e-01 + 1.5441970856966751e+00 8.5143121858055015e-01 1.0506962953367747e+00 + 1.8012562906755605e+00 9.2994666031719220e-01 1.2535563352950865e+00 + 2.0470784445416945e+00 9.8677262183051107e-01 1.4529176919048106e+00 + 2.2855293963080907e+00 1.0303311579484706e+00 1.6408473569503412e+00 + 2.5220521059475036e+00 1.0625625895938984e+00 1.8118667465253995e+00 + 2.7592709445104440e+00 1.0790656386049655e+00 1.9696429977970475e+00 + 3.0013340263104689e+00 1.0712398943585364e+00 2.1155198653172191e+00 + 3.2591320046354681e+00 1.0294845877876333e+00 2.2417107258688787e+00 + 3.5384456038700156e+00 9.4882722580686307e-01 2.3424558698107445e+00 + 3.8243110896829409e+00 8.3705295817509362e-01 2.4227500524288970e+00 + 4.0941192186325299e+00 7.1877405085173374e-01 2.4894881731635570e+00 + 4.3469745267955222e+00 6.3472570769334569e-01 2.5457458042516090e+00 + 4.6021701917436300e+00 6.1456025985643370e-01 2.6000315657561615e+00 + 4.8741494994453625e+00 6.1427463792838033e-01 2.6517069743453936e+00 + 5.1628267484010646e+00 3.2923754858326371e-01 2.5450967139683196e+00 + id 14714 + loc 6.4103370904922485e-01 5.3594541549682617e-01 404 + blend 0.0000000000000000e+00 + interp 3.4296245334645914e-01:3.4295902372192572e-01:6.6599049960876733e-01:3.0099902883149715e-01:1.0851633383054342e+00:3.0385115010566216e-01:1.9149548644395775e+00:3.1916942755066968e-01:2.8506079591525411e+00:2.9275774851229630e-01:3.8952957737919145e+00 + CVs 20 + -7.4315129635115329e-02 -1.7640649295890473e-03 1.7744078104834214e-02 + -1.5528530572109045e-01 7.2613703412097302e-03 3.5763171084566225e-02 + -2.1237296773541087e-01 1.8243976435760492e-02 6.5522292902305934e-02 + -2.7159096754918555e-01 1.9980314982851077e-02 9.8544305571693636e-02 + -3.3773902267286715e-01 1.3794862718491202e-02 1.2877086129381859e-01 + -4.1170082233243604e-01 1.7198115789144597e-03 1.5184828974970044e-01 + -4.9401682146178066e-01 -1.3837123358270836e-02 1.6418545308358712e-01 + -5.8404455221559159e-01 -3.0982003842328243e-02 1.6240851327923550e-01 + -6.7858189101422239e-01 -5.1879110199807288e-02 1.4033574609691812e-01 + -7.7648869706461721e-01 -7.4680835870741369e-02 9.0773473107286271e-02 + -8.8176875964680146e-01 -8.2133373929579923e-02 1.9356519157649937e-02 + -1.0015997890969262e+00 -4.8820565240963565e-02 -4.6846710039243761e-02 + -1.1380117024039957e+00 4.0833641819596200e-02 -7.8633798677865602e-02 + -1.2776451885452758e+00 1.8169724321868547e-01 -6.6003571242794157e-02 + -1.4048610417541734e+00 3.6043775734737893e-01 -1.9900624712085729e-02 + -1.5114528403797038e+00 5.6453753556900466e-01 3.8662916270587933e-02 + -1.5951269003187978e+00 7.9985733047105767e-01 1.0612289898838245e-01 + -1.6455837280836461e+00 1.0808289919889884e+00 1.9468407063167498e-01 + -1.7090804283408783e+00 1.2596045083436762e+00 1.8775516467994569e-01 + id 14715 + loc 2.8310993313789368e-01 8.9937371015548706e-01 405 + blend 0.0000000000000000e+00 + interp 4.6628891700214492e-01:2.8076651063075875e-01:5.0884754805456844e-01:3.4069234076582733e-01:1.0387674849516397e+00:4.5728955068364641e-01:1.9524382443810333e+00:4.4393797589900202e-01:2.1245811221240576e+00:4.0356007367896113e-01:2.5383228145356886e+00:3.1028815023439216e-01:3.3057283318491288e+00:4.6628425411297492e-01:3.9978311518520462e+00 + CVs 20 + 3.2129140936211231e-01 3.3387755598210866e-01 -4.4495479066521293e-02 + 4.8032047504387126e-01 5.9559546231780813e-01 -8.7381911786506325e-02 + 6.0791984067696681e-01 8.0285266881568051e-01 -1.1232254097869571e-01 + 7.4950696939525407e-01 1.0122964931910823e+00 -1.0008400304606879e-01 + 9.0268894185393100e-01 1.2210052901571045e+00 -3.2372535400824416e-02 + 1.0638543674386591e+00 1.4156693146325745e+00 1.0453428859261234e-01 + 1.2273711362442761e+00 1.5771080748240709e+00 3.0603691023093071e-01 + 1.3891385143965183e+00 1.6956593796810273e+00 5.4838813789945351e-01 + 1.5490756741415845e+00 1.7780310303198441e+00 8.0702011635207405e-01 + 1.7092981644628749e+00 1.8374603437702897e+00 1.0691204401028016e+00 + 1.8715481777791454e+00 1.8827781596154658e+00 1.3339929340452317e+00 + 2.0362498451954605e+00 1.9149096814698559e+00 1.6070389575889037e+00 + 2.2005027712040679e+00 1.9365602404221305e+00 1.8832978594188181e+00 + 2.3546949185204578e+00 1.9694594906700229e+00 2.1329143437423133e+00 + 2.4839398572674249e+00 2.0439690874388088e+00 2.3184235313397186e+00 + 2.5741123168643902e+00 2.1630744650888998e+00 2.4320789027094434e+00 + 2.6196817505502428e+00 2.3039578412366093e+00 2.4965548129581059e+00 + 2.6244091075822866e+00 2.4446997851813594e+00 2.5412020248655520e+00 + 2.6874310080994452e+00 2.5133171664479175e+00 2.7605159079947210e+00 + id 14716 + loc 8.0798882246017456e-01 5.5005550384521484e-01 1079 + blend 0.0000000000000000e+00 + interp 4.6761840665599352e-01:3.7027150141647058e-01:4.0863710062469227e-01:4.5507385758895808e-01:9.9744639858660733e-01:2.9362888564238310e-01:1.4790463974940500e+00:4.6761373047192700e-01:2.0090765837570443e+00:3.3429601696258648e-01:2.5904640255103510e+00:3.0495015246789747e-01:3.4840089808829067e+00 + CVs 20 + -1.0798257531505104e-01 2.8371075762014902e-01 5.8470955323988633e-02 + -1.8432845930783603e-01 5.7516493951929348e-01 1.1209934187534873e-01 + -2.4418073752225505e-01 8.7880784331171180e-01 1.4852369425281198e-01 + -2.9722501283456254e-01 1.2037452834549329e+00 1.5443353840122415e-01 + -3.3659898669689370e-01 1.5557595481733950e+00 1.2071251413079198e-01 + -3.5222065139559411e-01 1.9383665915548678e+00 3.4840551639994555e-02 + -3.3561529598710521e-01 2.3295200195836760e+00 -1.1983725398675649e-01 + -2.8821136891466592e-01 2.6896976630982423e+00 -3.4710858762554797e-01 + -2.1973283287210688e-01 2.9912724639864212e+00 -6.3517309354140283e-01 + -1.4282656566115304e-01 3.2205675171038886e+00 -9.6738491760419687e-01 + -7.1053783877630616e-02 3.3723656087001297e+00 -1.3302484420790857e+00 + -1.7152422485623098e-02 3.4457691647965065e+00 -1.7157514527131019e+00 + 8.2223231267642971e-03 3.4398564516465537e+00 -2.1196073690883290e+00 + -1.8734335978073946e-03 3.3523227818196366e+00 -2.5434746468384790e+00 + -4.0657321049583750e-02 3.1825040993439506e+00 -3.0125890196779830e+00 + -7.5337061323560772e-02 2.9097022995628876e+00 -3.6151512756132322e+00 + -7.9791741488361850e-02 2.3808795760793928e+00 -4.3801217553833620e+00 + -1.2298696457840153e-01 1.6349712609016509e+00 -4.8343819718814327e+00 + -2.5097019734362275e-01 1.4142961394969134e+00 -4.6337075958102858e+00 + id 14717 + loc 5.9597802162170410e-01 5.3668153285980225e-01 394 + blend 0.0000000000000000e+00 + interp 4.7697199774456722e-01:4.5267712083310407e-01:6.4540896702304562e-02:3.0504594828858705e-01:5.1315137281178969e-01:3.5143271922973157e-01:9.9945640491100507e-01:4.0930991646025200e-01:1.6039827625551060e+00:4.7387433214941582e-01:2.1131335796024993e+00:4.7696722802458980e-01:2.6070146075109273e+00:4.6767017704919905e-01:2.9829621373860356e+00:3.7661205226618610e-01:3.4395280623932525e+00 + CVs 20 + -2.8847631752783254e-01 1.4773310870633954e-01 -5.1221048845110181e-02 + -5.4886979649956302e-01 2.8735553898581501e-01 -1.0480975650566482e-01 + -7.9743403927874867e-01 4.2870324975899249e-01 -1.6272050311142716e-01 + -1.0501939015954638e+00 5.8410810070479924e-01 -2.2953837838553953e-01 + -1.3032934987505664e+00 7.5676925659394634e-01 -3.1244394430097383e-01 + -1.5499554025702291e+00 9.4378098564378421e-01 -4.1934465798966314e-01 + -1.7907481552174567e+00 1.1447873505398567e+00 -5.5690708311044723e-01 + -2.0329864579384682e+00 1.3622602225348781e+00 -7.3123766791604405e-01 + -2.2781201036471033e+00 1.5884678270196975e+00 -9.5194279251031433e-01 + -2.5179597346603475e+00 1.7980315383574836e+00 -1.2298512550411276e+00 + -2.7494478228557675e+00 1.9595838291552066e+00 -1.5676668070209696e+00 + -2.9755150834637796e+00 2.0461852243585459e+00 -1.9580112901460560e+00 + -3.1868756198313619e+00 2.0452088009310438e+00 -2.3864386590225477e+00 + -3.3640287143615475e+00 1.9606794427244705e+00 -2.8383670033731798e+00 + -3.5042003270247450e+00 1.7994864807445510e+00 -3.3047345670314918e+00 + -3.6325058447707397e+00 1.5594777323959246e+00 -3.7772169407147360e+00 + -3.7681567395445446e+00 1.2322794830079653e+00 -4.2313070815758564e+00 + -3.8850575734809514e+00 8.2021310736178510e-01 -4.6247146939866326e+00 + -3.8963661856760772e+00 3.8668274688758730e-01 -4.8993510932463433e+00 + id 14718 + loc 3.2700368762016296e-01 4.3411433696746826e-01 405 + blend 0.0000000000000000e+00 + interp 5.1255223078890011e-01:2.8339031957493188e-01:6.7479477013663969e-01:2.9345338262518011e-01:1.3573304032303568e+00:3.8030218394229098e-01:2.0161856466785357e+00:5.1254710526659220e-01:2.7466543041607325e+00:2.9924943217957850e-01:3.1824288903649576e+00:3.0750643195415339e-01:3.9749929886168176e+00 + CVs 20 + 8.0548658681410507e-02 1.8981099107913252e-01 -4.8796304862401343e-02 + 1.5532765798223705e-01 3.3090149048339840e-01 -1.8400573842288187e-02 + 2.4063255694685223e-01 4.3225721555422331e-01 2.0381824046360131e-02 + 3.4173884941557836e-01 5.0685515339105369e-01 5.4237005441177294e-02 + 4.5406272239787759e-01 5.5136732084682616e-01 8.2041466582704031e-02 + 5.7244771676719608e-01 5.6617333848610685e-01 1.0299336621688815e-01 + 6.9398654019794415e-01 5.5509234013307651e-01 1.1832643289243724e-01 + 8.1882338707556634e-01 5.2223545742625654e-01 1.3098070245999896e-01 + 9.4921439213109315e-01 4.7017756605819983e-01 1.4473447016076393e-01 + 1.0882370379098829e+00 3.9985328695472239e-01 1.6355118267552146e-01 + 1.2382155926514089e+00 3.1076478907540517e-01 1.9131249892795774e-01 + 1.3998976462848736e+00 2.0165279554389506e-01 2.3190069726164581e-01 + 1.5766493717714678e+00 7.3450519349872817e-02 2.8784169306304302e-01 + 1.7851952555100123e+00 -6.6498665468385371e-02 3.5615471430189127e-01 + 2.0511897432675990e+00 -2.0295869116165768e-01 4.2420639092666057e-01 + 2.3808462937804640e+00 -3.1648895673218325e-01 4.7416841300053153e-01 + 2.7549463227325668e+00 -3.9302066767090238e-01 4.9418261591142554e-01 + 3.1471202662390998e+00 -4.2861259686619479e-01 4.8582485425538424e-01 + 3.4593120282606562e+00 -4.8353393384782711e-01 5.5243926472112592e-01 + id 14719 + loc 6.7654564976692200e-02 3.8051992654800415e-01 404 + blend 0.0000000000000000e+00 + interp 5.2713981425265111e-01:3.3113607036152515e-01:4.6326077545276623e-02:3.8980132202401047e-01:9.8578207394386896e-01:5.2713454285450856e-01:1.4135405940817449e+00:2.0793469761303790e-01:2.0513913406216719e+00:3.2349778666781892e-01:2.8212685895824801e+00:5.1057982500151011e-01:3.3628890922915096e+00 + CVs 20 + -8.6628908858701434e-02 2.2363166104228723e-03 6.1411480811405739e-02 + -1.7039382793773467e-01 3.5465618239775287e-03 1.3248828742219748e-01 + -2.5018725171506573e-01 3.4269034923580730e-03 2.0933769701905205e-01 + -3.2386314139168854e-01 -2.4888408235864690e-03 2.8641662982672095e-01 + -3.8476992193913695e-01 -1.9566342923161256e-02 3.5953123845491897e-01 + -4.2835839120667607e-01 -4.9540352032124008e-02 4.2565123998228527e-01 + -4.5273443067365460e-01 -9.1509148909842936e-02 4.8138723090506208e-01 + -4.5830525155997237e-01 -1.4364969305226891e-01 5.2227177558549465e-01 + -4.4743859701542610e-01 -2.0303549285367981e-01 5.4381063679109576e-01 + -4.2578113637710674e-01 -2.6449948967786391e-01 5.4460655727988327e-01 + -4.0295106214842352e-01 -3.2196087704836401e-01 5.2984521604257395e-01 + -3.8687443837051422e-01 -3.7116399004799555e-01 5.0773981946354763e-01 + -3.7882560186352487e-01 -4.1010585400490529e-01 4.8218083101893616e-01 + -3.7749769459133153e-01 -4.3751183613916350e-01 4.5398240934992823e-01 + -3.8274609707853757e-01 -4.5310844422307295e-01 4.2445579078201434e-01 + -3.9545499012429269e-01 -4.5784361661318385e-01 3.9648471798241208e-01 + -4.1445181138579179e-01 -4.5240978219991745e-01 3.7040715634160420e-01 + -4.3674596607421906e-01 -4.3426385181739857e-01 3.3756596576679010e-01 + -4.3369180949736891e-01 -4.1261713968370872e-01 4.8710907181927221e-01 + id 14720 + loc 6.3941232860088348e-02 9.1026210784912109e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4978845492791222e-01:3.3370237716920964e-01:1.0460943748431961e-01:2.7464033498527862e-01:1.0304451458858572e+00:3.4599191698072529e-01:1.7401669598841978e+00:3.3549565084486122e-01:2.5616931079814469e+00:3.4978495704336293e-01:3.3121702651018392e+00 + CVs 20 + 1.7585340615888762e-01 4.9402490837576640e-01 1.9793593383103311e-01 + 3.6551365662181445e-01 9.1641644094259267e-01 2.6598636394892383e-01 + 5.6297342013267493e-01 1.3146966072185804e+00 2.7859369650398735e-01 + 7.6659059753084802e-01 1.6930127138648245e+00 2.5231968731643217e-01 + 9.7454033412323637e-01 2.0298247402818741e+00 1.7534013229894385e-01 + 1.1741278485280424e+00 2.2893936151213756e+00 2.9590325236887538e-02 + 1.3386413703309890e+00 2.4304235802750820e+00 -1.9162415041230474e-01 + 1.4339838140644370e+00 2.4290694930496688e+00 -4.6219329521113472e-01 + 1.4326171592351271e+00 2.2924626276962763e+00 -7.2892799155584409e-01 + 1.3331061381578246e+00 2.0640773525264731e+00 -9.3822698768757828e-01 + 1.1711987761728186e+00 1.8068043232400584e+00 -1.0733587821208241e+00 + 9.9324777999791747e-01 1.5589871797351900e+00 -1.1603683682392736e+00 + 8.3034976607343747e-01 1.3213458095120385e+00 -1.2352309501714929e+00 + 6.9738167126756145e-01 1.0730725488335213e+00 -1.3180274030758410e+00 + 5.9910637595282312e-01 7.8501245726077307e-01 -1.3990446709713382e+00 + 5.2409550153734075e-01 4.2453628119456588e-01 -1.4025137708094149e+00 + 4.4386754868913186e-01 3.2486858698979049e-03 -1.1763454249371579e+00 + 3.4755419662792481e-01 -3.5008969592140260e-01 -7.3793991774222500e-01 + 3.2924936372624702e-01 -7.4069748270884084e-01 -7.4996148694406606e-01 + id 14721 + loc 1.7814634740352631e-01 6.8860834836959839e-01 405 + blend 0.0000000000000000e+00 + interp 5.1110810815235452e-01:4.1028250041954017e-01:1.7542784583574111e-01:2.7615242975200288e-01:8.1586568710048923e-01:4.3204626261210233e-01:1.0916983301147138e+00:2.9959575846393177e-01:2.0524970159465310e+00:3.7089322313648476e-01:3.0379602425605863e+00:5.1110299707127305e-01:3.8306894156405042e+00 + CVs 20 + 2.0642608711003657e-01 2.9019795301632234e-01 9.9394570999512891e-03 + 2.7639167419608057e-01 5.4337582727238987e-01 1.2533249290859109e-02 + 3.2447957656294574e-01 7.6105544280245374e-01 3.1789589972046978e-02 + 3.7345160312817077e-01 9.8236100523194403e-01 9.3004493332982774e-02 + 4.1926462932592756e-01 1.2000508074637171e+00 2.0619022536358356e-01 + 4.6041365072319190e-01 1.4020974471311354e+00 3.7208119094283043e-01 + 4.9785114999751834e-01 1.5783654171914798e+00 5.7981345062118661e-01 + 5.3365004272017769e-01 1.7261223731191995e+00 8.1268152469484489e-01 + 5.6866253812415801e-01 1.8491841623180190e+00 1.0559728135839856e+00 + 6.0144414792926526e-01 1.9534975954000937e+00 1.3000732455125419e+00 + 6.2841447380799753e-01 2.0435503334972887e+00 1.5419393553652145e+00 + 6.4507776163491193e-01 2.1212818685841284e+00 1.7845234281102416e+00 + 6.4750668080537244e-01 2.1903649590333845e+00 2.0252180303084355e+00 + 6.2980921836280324e-01 2.2635784643692451e+00 2.2392475872350310e+00 + 5.8093106377738601e-01 2.3516437053798236e+00 2.3917967059052074e+00 + 4.9146906049704264e-01 2.4469754828838517e+00 2.4787466261763540e+00 + 3.6387515929863412e-01 2.5319417272678195e+00 2.5304209442826697e+00 + 2.1219197909972687e-01 2.5959183928593292e+00 2.5763330399291124e+00 + 1.5372326692670324e-01 2.6693982030803096e+00 2.7229075566046923e+00 + id 14722 + loc 6.8542122840881348e-01 9.1654479503631592e-01 394 + blend 0.0000000000000000e+00 + interp 4.6243540956084467e-01:3.1360342699218446e-01:6.5357518823114025e-02:4.5265648388607516e-01:6.8099352804216773e-01:3.4748346210239583e-01:1.0816860201714471e+00:3.3392773787911739e-01:2.1972037463295027e+00:4.6243078520674907e-01:2.8872632048101075e+00:4.0501544917489335e-01:3.1415041025678443e+00 + CVs 20 + -1.6782060059517007e-01 1.6357351915446650e-01 -2.1659200873034096e-01 + -3.5630925950019193e-01 3.2167037917673069e-01 -4.4166362664148345e-01 + -5.4876890437811610e-01 4.7244367345351679e-01 -6.8179329582691306e-01 + -7.3586789281713272e-01 6.1243812810120790e-01 -9.4023609629836657e-01 + -9.1624642836949866e-01 7.3899594164490767e-01 -1.2179162594109880e+00 + -1.0907880787007282e+00 8.5198132510308100e-01 -1.5138664268510853e+00 + -1.2608474227216093e+00 9.5012108923440564e-01 -1.8241672228348946e+00 + -1.4246591017844452e+00 1.0236217792671443e+00 -2.1426720755727047e+00 + -1.5790657081914465e+00 1.0559967050695296e+00 -2.4624241720219442e+00 + -1.7254982410694062e+00 1.0344109018917707e+00 -2.7746751336199802e+00 + -1.8686168577668263e+00 9.5494805246191317e-01 -3.0680718940808034e+00 + -2.0100349303073308e+00 8.2210818883008807e-01 -3.3352247606290852e+00 + -2.1495335150912007e+00 6.4432265200549366e-01 -3.5755743719583171e+00 + -2.2888909483931723e+00 4.3122185256022894e-01 -3.7821494801391240e+00 + -2.4321144120049158e+00 1.9614177176786640e-01 -3.9367144220900974e+00 + -2.5707983782960055e+00 -4.6817622648198221e-02 -4.0194813090244033e+00 + -2.6761050262668538e+00 -2.8626705022027221e-01 -4.0206356099623584e+00 + -2.7375928087361885e+00 -5.1545610092439365e-01 -3.9649532331691661e+00 + -2.8912905515458140e+00 -8.4547798647435046e-01 -4.0782519860487767e+00 + id 14723 + loc 8.0304764211177826e-02 3.4836223721504211e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2390442382690308e-01:3.6644524101278136e-01:2.8372579435398393e-04:2.8513065787889119e-01:9.9116166131167727e-01:4.2179988627068293e-01:1.7064347099801511e+00:3.3318677674992231e-01:2.0063817845178571e+00:4.2390018478266484e-01:2.4651855096091504e+00:2.9560384299802644e-01:3.0042675332880968e+00 + CVs 20 + 3.4907611319130405e-01 5.0020945609765011e-01 -1.2338145893825675e-02 + 5.7381462398344563e-01 9.0976406041321289e-01 -9.3016357451083054e-02 + 7.4842396408378398e-01 1.2803105939070170e+00 -1.9422743285501681e-01 + 8.9442196619991010e-01 1.6331221858609144e+00 -3.0216831594598526e-01 + 1.0010714669619940e+00 1.9661298083393752e+00 -4.1767534985723520e-01 + 1.0505069555340083e+00 2.2804901296914188e+00 -5.4210781800233498e-01 + 1.0162148969577496e+00 2.5722994053680703e+00 -6.7702524155710320e-01 + 8.7187638007924528e-01 2.8209425226554972e+00 -8.1911815259464582e-01 + 6.1741727431997695e-01 2.9816251329940560e+00 -9.5358863483536205e-01 + 3.0957475890672170e-01 3.0213089930665049e+00 -1.0598301236971699e+00 + 1.1984990741927604e-02 2.9625246755018866e+00 -1.1311060537293689e+00 + -2.5588933089629573e-01 2.8437532658108715e+00 -1.1716227804846280e+00 + -4.9656690397342029e-01 2.6875049341581438e+00 -1.1848548059064690e+00 + -7.1497903880407943e-01 2.5029969129960121e+00 -1.1718364406220787e+00 + -9.1801520503175837e-01 2.2820280037367597e+00 -1.1317211914865026e+00 + -1.1065476377044279e+00 1.9869310239062452e+00 -1.0634599391564872e+00 + -1.2357893006216620e+00 1.5848750684999982e+00 -9.6801219611400935e-01 + -1.2442486553326206e+00 1.1531005572507442e+00 -8.4464835109758318e-01 + -1.1963978327995921e+00 8.6951843735459944e-01 -6.9535684174283563e-01 + id 14724 + loc 7.1735465526580811e-01 6.6005319356918335e-01 404 + blend 0.0000000000000000e+00 + interp 3.4715540472766099e-01:3.4555267273128731e-01:8.6727619616286555e-01:3.4715193317361370e-01:1.4924021410586290e+00:3.1748789619752299e-01:2.0424075304892728e+00:3.4707650940185286e-01:2.9476788699164920e+00:2.9306301383409694e-01:3.9519310629376707e+00 + CVs 20 + -1.0573487417000806e-01 -3.8646747785940294e-02 1.0864309387612484e-01 + -2.3381173631961225e-01 -7.2401444592684772e-02 2.1357902775161164e-01 + -3.5062976899469378e-01 -9.1797368618639352e-02 3.3385586018454327e-01 + -4.8157801879860029e-01 -9.4090668447461112e-02 4.5308360067869768e-01 + -6.3030726709853968e-01 -6.7098222130553609e-02 5.6674645106203514e-01 + -7.9095151506116679e-01 6.1413091974427125e-04 6.7301404649435170e-01 + -9.5082060047214179e-01 1.1315556988234177e-01 7.7040794863253215e-01 + -1.0952814171256424e+00 2.5770212407084947e-01 8.5596802431878805e-01 + -1.2191427030200441e+00 4.0090098004919628e-01 9.2236070138724713e-01 + -1.3306937655093156e+00 5.1614977320858946e-01 9.6107118927332735e-01 + -1.4312263220157837e+00 6.1391424649671822e-01 9.7575632475862029e-01 + -1.5042730625232044e+00 7.2938070394035692e-01 9.8783723245777266e-01 + -1.5242363247224435e+00 8.9153419116997623e-01 1.0246144629386658e+00 + -1.4796879058892880e+00 1.0877792298168776e+00 1.0864683910089883e+00 + -1.3840314930065429e+00 1.2872328886259583e+00 1.1466263893400717e+00 + -1.2613960990999280e+00 1.4711305702116011e+00 1.1796164527559876e+00 + -1.1237018988362828e+00 1.6441855011457243e+00 1.1764226750521369e+00 + -9.5673020607203674e-01 1.8250658149021053e+00 1.1431471553382200e+00 + -8.4070805813960758e-01 1.9346838808407787e+00 1.0664449009836607e+00 + id 14725 + loc 4.0381512045860291e-01 5.6659400463104248e-02 405 + blend 0.0000000000000000e+00 + interp 4.6828449693632623e-01:3.8518824047716382e-01:7.8186183111265128e-03:4.6827981409135688e-01:4.4468320095897906e-01:2.5210003867951170e-01:1.1354777638738780e+00:4.1404527211578496e-01:1.7506161489478878e+00:3.6391627927827258e-01:2.6232856503694575e+00:3.6113276342655531e-01:3.4856756255529571e+00 + CVs 20 + -3.7317767832145923e-02 4.5675354968555924e-02 5.2574599411277789e-03 + -8.6240703227129956e-02 8.0546000441928362e-02 -8.6928168102814313e-04 + -1.5004038852956558e-01 1.1907091336040183e-01 -5.0901737935297175e-03 + -2.2445977145325743e-01 1.6980960765969666e-01 -2.3432058923283081e-02 + -3.0811847880814530e-01 2.3563945865819386e-01 -5.3176057295927170e-02 + -3.9994929411809893e-01 3.2049461298696158e-01 -8.7914625202176411e-02 + -4.9827246702516004e-01 4.3075933262735000e-01 -1.1805267670138261e-01 + -5.9847210944609963e-01 5.7483505348744512e-01 -1.3062944431833184e-01 + -6.8966738747177314e-01 7.6029567692989497e-01 -1.1013920809606959e-01 + -7.5261221899546060e-01 9.8801506325545907e-01 -4.2788742988481565e-02 + -7.6361107826882646e-01 1.2464768781328326e+00 7.4301830423879056e-02 + -7.0588065017798418e-01 1.5144775252877314e+00 2.2561530977790056e-01 + -5.7996290382555415e-01 1.7720139754060305e+00 3.8225497396337693e-01 + -4.0158530313578661e-01 2.0090914002062403e+00 5.1678558449940282e-01 + -1.8993574194113397e-01 2.2244118383991816e+00 6.1326789179681485e-01 + 4.1141983568752108e-02 2.4183388891707662e+00 6.6734820240668014e-01 + 2.8302738016135565e-01 2.5880085227531926e+00 6.8106308303761287e-01 + 5.3183485511027562e-01 2.7269309735699170e+00 6.5777853255507546e-01 + 6.8627467173163614e-01 2.8420158410077199e+00 6.2767499430463203e-01 + id 14726 + loc 3.7368786334991455e-01 6.0697329044342041e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3083600424420004e-01:3.2611286644341020e-01:9.7678444240220141e-01:3.3587960012952589e-01:1.4439699606148069e+00:3.9195058794775828e-01:1.9985212447424328e+00:3.3240524502287871e-01:2.7064516491297761e+00:4.3083169588415759e-01:3.0079909321942315e+00:3.2211175597094927e-01:3.9120965307684896e+00 + CVs 20 + -3.5347994293691426e-03 3.6448649485105400e-01 1.5765330302663028e-01 + 2.8248495201917245e-02 6.8114050442357121e-01 2.6458479078947067e-01 + 7.9438487205104463e-02 9.7562181740815279e-01 3.4665718335048334e-01 + 1.4165962584748520e-01 1.2691702399677998e+00 4.2091415623484230e-01 + 2.1955265903659033e-01 1.5674506917700857e+00 4.8441202994583410e-01 + 3.2049612173547504e-01 1.8795922707764379e+00 5.2791644509895552e-01 + 4.5457898226052640e-01 2.2083006314003213e+00 5.2569015969607580e-01 + 6.2681935347437956e-01 2.5356555747377127e+00 4.4347357385885244e-01 + 8.2977011993579852e-01 2.8276399508152812e+00 2.6056213753355761e-01 + 1.0463102752306082e+00 3.0488589652346896e+00 -2.1014794427760775e-02 + 1.2581267198028068e+00 3.1736647778053726e+00 -3.8051909150310936e-01 + 1.4523876122794417e+00 3.1908028201098775e+00 -7.8981460863472353e-01 + 1.6226116543052167e+00 3.0997138350704860e+00 -1.2218762849527049e+00 + 1.7684261825648715e+00 2.9046338619018242e+00 -1.6540426305650255e+00 + 1.8955719439048118e+00 2.6048658916462060e+00 -2.0689995200820057e+00 + 2.0123270434904224e+00 2.1647791239328926e+00 -2.4520453607997035e+00 + 2.1135955486944935e+00 1.4961266406575324e+00 -2.7226291827889493e+00 + 2.1764921908748978e+00 6.7190313152242487e-01 -2.6774914509698435e+00 + 2.2441173122736395e+00 2.3425915527755725e-01 -2.6103674163726751e+00 + id 14727 + loc 7.0118433237075806e-01 2.3036363720893860e-01 404 + blend 0.0000000000000000e+00 + interp 3.7022654161292867e-01:3.4307629692552083e-01:9.7638011689041071e-02:3.3881293059893386e-01:9.9708592876604130e-01:3.1629342240243308e-01:1.9903454703057522e+00:3.7022283934751254e-01:2.4074977218941043e+00:3.0513295924372080e-01:2.9998435091778255e+00:2.6270711667562135e-01:3.7165810768499723e+00 + CVs 20 + -5.7227603611218682e-02 7.5681333538098444e-02 7.4915876650112623e-02 + -9.5042171094275180e-02 1.6384730502755965e-01 1.5490516514243816e-01 + -1.2502753133474664e-01 2.6463011868419489e-01 2.2860245613385211e-01 + -1.5724916319328033e-01 3.8050769078148905e-01 2.9059329598701955e-01 + -1.9291312398357569e-01 5.1299106595240840e-01 3.4337021391856376e-01 + -2.3391677592913893e-01 6.6242352600369236e-01 3.9047885596300358e-01 + -2.8423195542826207e-01 8.2764783487036508e-01 4.3621850762613229e-01 + -3.4891976347617298e-01 1.0052723047137726e+00 4.8416133004387257e-01 + -4.3298870946074941e-01 1.1901191118875110e+00 5.3577750457176687e-01 + -5.4242780035063576e-01 1.3764404734525382e+00 5.9012307806335529e-01 + -6.8924081423241756e-01 1.5606124044193186e+00 6.4491610795546528e-01 + -8.9362558061938613e-01 1.7421688312209740e+00 7.0599930142144807e-01 + -1.1600086132563834e+00 1.9157789274164068e+00 8.0764774530017380e-01 + -1.4433849354081283e+00 2.0626008561106408e+00 1.0000481934514849e+00 + -1.6725404090957912e+00 2.1605143417872750e+00 1.2887532358473694e+00 + -1.8111845872105736e+00 2.2006804707261978e+00 1.6401596034616359e+00 + -1.8415933965850066e+00 2.1859344560755209e+00 2.0152141666418908e+00 + -1.7584608693907910e+00 2.1314413030849058e+00 2.3660097260844077e+00 + -1.6903852424744938e+00 2.0803304323461846e+00 2.6236972907224256e+00 + id 14728 + loc 1.2032224982976913e-01 2.0199792087078094e-01 405 + blend 0.0000000000000000e+00 + interp 4.8793869450878308e-01:4.8793381512183803e-01:4.9063076427153063e-01:2.9420842634402872e-01:1.0523498412685246e+00:2.7587896280707996e-01:1.9424850326017102e+00:2.8159723394315295e-01:2.6149109544223128e+00:2.6747817193363399e-01:3.1166974423244551e+00:3.9811093903075051e-01:3.9524744008790407e+00 + CVs 20 + -3.0852158726613257e-02 8.3061330807818523e-02 -8.5113900028396805e-04 + -9.3253027092967775e-02 1.0207951194233150e-01 2.2238979628346291e-02 + -1.7618920817487002e-01 1.4288750341413106e-01 8.1729018295688544e-02 + -2.6679056126151557e-01 1.9896952810945120e-01 1.4064760340849689e-01 + -3.6376632488119348e-01 2.7260014995781717e-01 1.9567326536486562e-01 + -4.6450453810095083e-01 3.6937099702879927e-01 2.4517157212775889e-01 + -5.6313100866641652e-01 4.9475887937451973e-01 2.8863072137356882e-01 + -6.5075672023777020e-01 6.5033335750759924e-01 3.2789799581736356e-01 + -7.1844935013991951e-01 8.3108045713589285e-01 3.6769178796665186e-01 + -7.6058600213906069e-01 1.0264579899525210e+00 4.1543222386578982e-01 + -7.7595122744678802e-01 1.2243878361613765e+00 4.7953589086321607e-01 + -7.6591990059512849e-01 1.4151121917608465e+00 5.6678587723854412e-01 + -7.3193409928744602e-01 1.5920935457927965e+00 6.8072597696103165e-01 + -6.7362010240551318e-01 1.7518285908819033e+00 8.2156438877020177e-01 + -5.9060192506098463e-01 1.8936060294731809e+00 9.8321452512605734e-01 + -4.8411296358385453e-01 2.0179231655931655e+00 1.1565939650876158e+00 + -3.5386605929861847e-01 2.1252585048786687e+00 1.3376445805450532e+00 + -1.9595584812989358e-01 2.2154376974908199e+00 1.5285142779792595e+00 + -1.4388438503746492e-01 2.2615208836602712e+00 1.6535111996288312e+00 + id 14729 + loc 9.4089917838573456e-02 4.7137963771820068e-01 394 + blend 0.0000000000000000e+00 + interp 6.6538068665775818e-01:3.8058197668124766e-01:2.7611375524866555e-01:4.0769805562421013e-01:9.4746424610522295e-01:6.6537403285089158e-01:1.5364352826172505e+00:4.8838298000779040e-01:2.0021139749418890e+00:4.0421654759881304e-01:2.6850500695559356e+00:2.9404572523121947e-01:3.2821250475618324e+00:4.5609748580183862e-01:3.9713412389771525e+00 + CVs 20 + -1.0482364708870777e-01 3.3089642496523464e-01 2.4324174575254093e-01 + -2.2501947776090148e-01 6.5063586980381316e-01 4.3336795499492919e-01 + -3.4394782782716565e-01 9.6511483111705099e-01 5.9249493167552503e-01 + -4.6384908415744086e-01 1.2790652283034756e+00 7.3432392165691041e-01 + -5.9599324404073295e-01 1.5923378860865520e+00 8.6638233366449491e-01 + -7.5325331592151690e-01 1.9001003819794628e+00 9.9526714014885298e-01 + -9.4558685738136417e-01 2.1931574647375482e+00 1.1255616233710315e+00 + -1.1767618841411980e+00 2.4626862403705418e+00 1.2620163916009686e+00 + -1.4490763979516916e+00 2.7047667436750515e+00 1.4149076567115935e+00 + -1.7640867127175843e+00 2.9085017031308116e+00 1.5925626422621115e+00 + -2.1228372844977912e+00 3.0478650157569587e+00 1.7915292063896628e+00 + -2.5259786424114012e+00 3.0865511115711888e+00 1.9986157655756240e+00 + -2.9522102005017139e+00 2.9920962928700892e+00 2.1882862882098575e+00 + -3.3522197688211364e+00 2.7709619983478921e+00 2.3302111773233136e+00 + -3.7033662712055593e+00 2.4557641290540388e+00 2.4273854431147521e+00 + -4.0187333694049201e+00 2.0572006557775540e+00 2.5240277002781619e+00 + -4.3019258306838557e+00 1.5995509054440604e+00 2.6934597463721279e+00 + -4.5288355472488320e+00 1.1804195610924804e+00 2.9689916985851594e+00 + -4.6805147009403996e+00 9.0421551145235246e-01 3.2344147450761924e+00 + id 14730 + loc 6.7201471328735352e-01 5.5386757850646973e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5507840837304181e-01:3.2268011271598068e-01:2.0034957500912465e-01:2.9449769093447264e-01:1.2258192046909047e+00:4.3353353199108996e-01:2.0000146838320205e+00:3.3162723171904740e-01:2.5529796611619524e+00:4.5507385758895808e-01:2.9989608759475681e+00:3.4045161243407096e-01:3.6091244662424331e+00 + CVs 20 + -6.1769238712089065e-02 3.0374412367790804e-01 6.1546459950505353e-02 + -9.0262607336323492e-02 5.8914336774764697e-01 9.1898520942432116e-02 + -9.9854020801295934e-02 8.6040211693719459e-01 9.3511416286760018e-02 + -1.0242476673801273e-01 1.1262274672748398e+00 7.0278354715219982e-02 + -9.5490140523425693e-02 1.3864887070731493e+00 2.4935511180755765e-02 + -7.6059026550943210e-02 1.6438115488296883e+00 -3.8041754539614447e-02 + -3.9898553519982838e-02 1.8949096483015375e+00 -1.2130033405354779e-01 + 1.6233848830164321e-02 2.1258750911940703e+00 -2.3233212247151747e-01 + 9.1230983177025049e-02 2.3221038430124858e+00 -3.7275069461300958e-01 + 1.8027003314875212e-01 2.4739006842632563e+00 -5.3868255070802673e-01 + 2.7609517481461893e-01 2.5731356221675958e+00 -7.2468027199288465e-01 + 3.6907872261539532e-01 2.6132100591540062e+00 -9.2377136077265309e-01 + 4.4854325726528527e-01 2.5898626582251612e+00 -1.1264203308886207e+00 + 5.0443609526227595e-01 2.5030906686054939e+00 -1.3211579243778613e+00 + 5.3056739433795119e-01 2.3642792163527555e+00 -1.4978390420258725e+00 + 5.3314078321267111e-01 2.2227316171803015e+00 -1.6591165541512423e+00 + 5.3329956673484746e-01 2.1925369917739603e+00 -1.8565605150882436e+00 + 5.4680611331926920e-01 2.2809405040764257e+00 -2.1621524995748480e+00 + 4.8866250513430631e-01 2.0262919671145534e+00 -1.8607394242305317e+00 + id 14731 + loc 4.7807604074478149e-01 2.6706904172897339e-01 404 + blend 0.0000000000000000e+00 + interp 4.2096078267763420e-01:3.0674144093023975e-01:6.9111692534705615e-02:3.4871387081812250e-01:9.4790739588254780e-01:3.5803417722315223e-01:1.3022900431497511e+00:2.5979356195468190e-01:1.9935040328981786e+00:3.0190323838406286e-01:2.7469853562683033e+00:4.2095657306980744e-01:3.4226551419817923e+00 + CVs 20 + -1.4429933768596481e-01 1.1022772097213662e-01 -3.4877510635153770e-02 + -2.8056454863065611e-01 2.1033163465102131e-01 -5.4489106921364147e-02 + -4.1820363181153841e-01 3.1146871617245453e-01 -7.2320054531581024e-02 + -5.5866781772063367e-01 4.1755870787957183e-01 -9.6332667352313717e-02 + -6.9750173527591286e-01 5.2710039620843774e-01 -1.2888232894875537e-01 + -8.2713319596560653e-01 6.3645893122643749e-01 -1.7112541715844914e-01 + -9.4336948596232872e-01 7.4230050785857771e-01 -2.2305408636650692e-01 + -1.0483354350428047e+00 8.4419727609125794e-01 -2.8375203604881977e-01 + -1.1456895350356200e+00 9.4345119234328445e-01 -3.5305142229938741e-01 + -1.2422685126747679e+00 1.0451808407843139e+00 -4.2953513681844296e-01 + -1.3477007022722991e+00 1.1552392059062297e+00 -5.0913008651716973e-01 + -1.4752717800041109e+00 1.2744393436498909e+00 -5.8095217823216005e-01 + -1.6378352881546947e+00 1.3989041052003974e+00 -6.2660638316572403e-01 + -1.8401536236315952e+00 1.5163265616368737e+00 -6.3427204790932246e-01 + -2.0790870726424657e+00 1.6192079095909262e+00 -5.9997732207270338e-01 + -2.3406160326599448e+00 1.7218801389930349e+00 -5.1152986208305951e-01 + -2.6001837954582676e+00 1.8446560857187717e+00 -3.4283600008475112e-01 + -2.8281052772653896e+00 1.9677172330767412e+00 -7.4650667462757836e-02 + -2.9594584987425212e+00 2.0335317542440761e+00 2.3048678519992327e-01 + id 14732 + loc 8.6965307593345642e-02 9.6599483489990234e-01 405 + blend 0.0000000000000000e+00 + interp 4.4729482752139482e-01:3.8144374618255339e-01:1.1005491602317730e-01:4.4729035457311961e-01:9.8952843927100520e-01:2.4819724113298447e-01:1.2863777610967846e+00:4.0294493016102062e-01:2.1432923099252550e+00:2.6365521430167244e-01:2.7445432587759258e+00:3.4091750108770763e-01:3.2412449882591217e+00 + CVs 20 + 2.2502469246737145e-01 2.7702038784090105e-01 8.8681196866828085e-02 + 2.8050520851750316e-01 4.2052237646335411e-01 1.3930882687913046e-01 + 2.7142067185754892e-01 5.3314622930673417e-01 1.8195977827632448e-01 + 2.6682506646277893e-01 6.3850231398107438e-01 2.1938872528851208e-01 + 2.6688800077729791e-01 7.4088738603288451e-01 2.5166904912171456e-01 + 2.7329258463568351e-01 8.4581211406775925e-01 2.8508129252763675e-01 + 2.8743412382827210e-01 9.5473774862598293e-01 3.3223709554298986e-01 + 3.0903799920666009e-01 1.0627306763935760e+00 4.0630321710607287e-01 + 3.3761007245261371e-01 1.1613829924006502e+00 5.1488337919052107e-01 + 3.7411264352697293e-01 1.2436765952134894e+00 6.5956309444713013e-01 + 4.2195971769796126e-01 1.3068239043969734e+00 8.3841888836580492e-01 + 4.8664864552733111e-01 1.3511057514123792e+00 1.0484965475507033e+00 + 5.7104430308361320e-01 1.3734634911676964e+00 1.2867619048812384e+00 + 6.7067324998601285e-01 1.3630131624616890e+00 1.5456324988727477e+00 + 7.7901696643104545e-01 1.3144647811780878e+00 1.8119292473406485e+00 + 8.9669247493150550e-01 1.2433166435481129e+00 2.0778005601998593e+00 + 1.0281290611105356e+00 1.1742492248267333e+00 2.3423005373160444e+00 + 1.1764063049187503e+00 1.1229629956948455e+00 2.6005693769113445e+00 + 1.3903258144173545e+00 1.1191635004627805e+00 2.8713968871306950e+00 + id 14733 + loc 5.9285670518875122e-01 9.9686361849308014e-02 394 + blend 0.0000000000000000e+00 + interp 3.5918011117987453e-01:3.3474152190703865e-01:3.8742358121623965e-07:3.5917651937876277e-01:4.9382347344974542e-01:3.4678963979961192e-01:1.1638470161381504e+00:3.1195270958504995e-01:2.1364440502178521e+00:2.6240637658675542e-01:3.1461322554040212e+00 + CVs 20 + 2.8564065803065142e-01 2.9294446307487709e-01 1.9001087856329216e-01 + 5.8055975871994148e-01 5.7288134637615473e-01 3.3519376672276285e-01 + 8.7094860946146979e-01 8.5480417298419886e-01 4.6834544245414600e-01 + 1.1482916739308009e+00 1.1517449463685248e+00 6.1036694477241060e-01 + 1.4084778827208182e+00 1.4669861253354726e+00 7.7740858412044112e-01 + 1.6550895735684859e+00 1.7931000399009966e+00 9.8671379414802096e-01 + 1.8969519922804077e+00 2.1160310033580081e+00 1.2546956074372231e+00 + 2.1387335334461257e+00 2.4165387330967016e+00 1.5924068821857102e+00 + 2.3810846265008361e+00 2.6713129635611330e+00 2.0021651938528597e+00 + 2.6269785966177590e+00 2.8534579961450035e+00 2.4781904824269514e+00 + 2.8834125361401002e+00 2.9306257296682690e+00 3.0101296039804208e+00 + 3.1524973168715862e+00 2.8627504749076227e+00 3.5800436578448549e+00 + 3.4169829670034604e+00 2.6261547170789070e+00 4.1416062411314130e+00 + 3.6453404548999373e+00 2.2829349131721881e+00 4.6258984485323307e+00 + 3.8306548729999337e+00 1.9638805902091754e+00 5.0073983470837060e+00 + 3.9958203152981264e+00 1.7444502885710698e+00 5.3026044998168409e+00 + 4.1685665008296926e+00 1.6253300213403423e+00 5.5198413726502542e+00 + 4.3676993129386030e+00 1.5690267570940999e+00 5.6654763163066040e+00 + 4.6271417370053278e+00 1.4039754083862088e+00 5.8660745080623187e+00 + id 14734 + loc 9.4632178544998169e-01 7.0087164640426636e-01 1079 + blend 0.0000000000000000e+00 + interp 4.5271075008401307e-01:4.2843250230407859e-01:1.5953441243976796e-02:3.3918611336745824e-01:4.9091280443955587e-01:4.5270622297651225e-01:1.0002578603829873e+00:3.2365966190338458e-01:1.6343237686103564e+00:3.4877290363845348e-01:2.3548321647259343e+00:4.1224150125511994e-01:2.9999842484078290e+00:3.9185078250583361e-01:3.7175555985805326e+00 + CVs 20 + 1.0461481780508347e-01 2.9190040974740356e-01 -1.9521340917458463e-01 + 2.3814987892112655e-01 5.5752475643620669e-01 -3.8496682906276719e-01 + 3.8711319776339925e-01 7.7863985636815047e-01 -5.8745032167823852e-01 + 5.4500530520926904e-01 9.4433303521195167e-01 -8.0160367048002035e-01 + 7.0579741375130656e-01 1.0457306940904203e+00 -1.0135940353767259e+00 + 8.5835040832016629e-01 1.0763134931437903e+00 -1.2031787577212165e+00 + 9.9207307520028942e-01 1.0445048447906442e+00 -1.3532213416848773e+00 + 1.1039592385405432e+00 9.7332318086997549e-01 -1.4599752816516840e+00 + 1.1965080062736646e+00 8.8609267423644522e-01 -1.5283905131794040e+00 + 1.2744683410734789e+00 8.0063063391043154e-01 -1.5670920788607479e+00 + 1.3434263380404909e+00 7.2851756487537123e-01 -1.5880610232520547e+00 + 1.4066369868002295e+00 6.7608042266526081e-01 -1.6034880806357601e+00 + 1.4638301138463963e+00 6.4577654559287545e-01 -1.6249454433399964e+00 + 1.5107042779071653e+00 6.3758546873070776e-01 -1.6625585267974226e+00 + 1.5394933204884658e+00 6.5962509338009745e-01 -1.7201309452711389e+00 + 1.5422462181382592e+00 7.6905310713665664e-01 -1.7924756294587441e+00 + 1.5180617635187998e+00 1.1275531562834304e+00 -1.9270528931631330e+00 + 1.5092503977967489e+00 1.6883532518003614e+00 -2.3395837021570531e+00 + 1.5045963412017131e+00 1.4378105305561080e+00 -2.2780758378243466e+00 + id 14735 + loc 8.5748326778411865e-01 5.5387705564498901e-01 404 + blend 0.0000000000000000e+00 + interp 3.8095300154946410e-01:2.7729118333962582e-01:1.0069978837164202e+00:3.8094919201944860e-01:2.0003607791123050e+00:3.1331203130423874e-01:2.8163185397160411e+00:3.0257506883009117e-01:3.1774892583351440e+00:2.7976908617280133e-01:3.9749593125627811e+00 + CVs 20 + -1.1322032075364807e-01 8.2058542876579585e-03 3.7123025919118043e-02 + -2.0794612863685658e-01 2.9408816833376511e-02 8.0315909732524060e-02 + -2.7820874299012976e-01 6.8828795683525387e-02 1.3173085106525728e-01 + -3.4447319510215152e-01 1.1501705486167538e-01 1.7741957715192364e-01 + -4.0793472413344367e-01 1.6735403624464462e-01 2.1631815508350671e-01 + -4.6977322233555963e-01 2.2505589911059243e-01 2.4769932065342395e-01 + -5.3023465677223036e-01 2.8572158809427339e-01 2.7085305613914396e-01 + -5.8687112424507470e-01 3.4165122696451733e-01 2.8513330378822194e-01 + -6.3711245846850562e-01 3.8105970078109630e-01 2.8983249481783924e-01 + -6.7995579037716358e-01 4.0654482551996529e-01 2.8745863271297833e-01 + -7.0867007849982555e-01 4.3707003330873828e-01 2.8954508394634659e-01 + -7.1500937866559233e-01 4.7806455288525984e-01 3.0537279606372891e-01 + -6.9799685726423055e-01 5.1307249662460785e-01 3.3053241347178364e-01 + -6.5976087674002182e-01 5.2760588819468379e-01 3.5967972217341315e-01 + -5.9754600860501483e-01 5.2552950055608805e-01 3.9797986332362079e-01 + -5.1308064152800925e-01 5.1682920182613656e-01 4.4770143295860765e-01 + -4.3012950720908183e-01 4.9945575753964522e-01 4.9331401539824998e-01 + -3.8240355790806174e-01 4.6473863291572975e-01 5.1808475578472912e-01 + -3.2527725635558458e-01 3.3240034012602848e-01 5.0792188827466966e-01 + id 14736 + loc 7.1348839998245239e-01 4.0555644780397415e-02 405 + blend 0.0000000000000000e+00 + interp 4.5326523025932158e-01:3.2748178832111036e-01:4.1843370909247557e-01:3.7813609092558170e-01:9.8901126917705662e-01:2.8200443052085128e-01:1.9269065527483737e+00:3.9002650597058602e-01:2.8118163152321993e+00:4.5326069760701904e-01:3.3272886765259222e+00:3.8461142885197563e-01:3.9990133336401104e+00 + CVs 20 + 8.5267051660693649e-02 6.8147476065569687e-02 4.4409506642096523e-02 + 1.7467991802253238e-01 1.4706360621442371e-01 9.3862243177784771e-02 + 2.7586269984363976e-01 2.3825935431058728e-01 1.4730523986098282e-01 + 3.9563262255600251e-01 3.4162113713972098e-01 2.0218343552010887e-01 + 5.3992485719255801e-01 4.5729729994201657e-01 2.5376622234646379e-01 + 7.1420124141847452e-01 5.8429218317911580e-01 2.9468379351672852e-01 + 9.2185753651256275e-01 7.2024065521014802e-01 3.1475541754166281e-01 + 1.1625867505424927e+00 8.6146695403436713e-01 3.0205868834573579e-01 + 1.4315681970674983e+00 1.0035046829896419e+00 2.4435312333448878e-01 + 1.7189869697504634e+00 1.1416739357321535e+00 1.3085561393892015e-01 + 2.0117812727184563e+00 1.2711573096235202e+00 -4.6284558254818822e-02 + 2.2974955142525024e+00 1.3847711085736583e+00 -2.9096059066570035e-01 + 2.5638515282543612e+00 1.4734564105435672e+00 -6.0038865571142230e-01 + 2.7903445538234064e+00 1.5424008877434137e+00 -9.5606231585666612e-01 + 2.9492768771140940e+00 1.6296163578742942e+00 -1.3194547654930946e+00 + 3.0254694060433867e+00 1.7825482534339714e+00 -1.6452370183547731e+00 + 3.0319372960789202e+00 2.0058185885819233e+00 -1.9083515425334752e+00 + 2.9958406587219173e+00 2.2658911647520070e+00 -2.1161168804952193e+00 + 3.0922217745746838e+00 2.4085038704741031e+00 -2.3413895110411067e+00 + id 14737 + loc 9.0285527706146240e-01 4.6518689393997192e-01 394 + blend 0.0000000000000000e+00 + interp 4.1568715308452459e-01:2.6722585850386693e-01:5.7637020918662540e-01:4.1568299621299376e-01:1.0381763691371331e+00:3.9895268537396428e-01:2.0017611361800731e+00:3.1312670901593126e-01:2.7380755435452513e+00:2.4066346553723569e-01:3.8901541208409149e+00 + CVs 20 + 2.9841341965861246e-01 2.4658537208346565e-01 2.8224952889195482e-01 + 5.5051665489985369e-01 4.6637130338361599e-01 5.5431700224322322e-01 + 7.8115636832173518e-01 6.7982184534276602e-01 8.4242663510387406e-01 + 9.9713057642157599e-01 8.9412606694449970e-01 1.1584447938637252e+00 + 1.1964492813985750e+00 1.1036873454602636e+00 1.5042834558040326e+00 + 1.3868911265173198e+00 1.3040870798361932e+00 1.8820360927366941e+00 + 1.5823058033573281e+00 1.4886628311161414e+00 2.2926761296057059e+00 + 1.7940634214097928e+00 1.6396196168387798e+00 2.7373410046046023e+00 + 2.0324117233469510e+00 1.7288614617041671e+00 3.2183320527518364e+00 + 2.3091096794161206e+00 1.7279128438317852e+00 3.7287282474904422e+00 + 2.6237568655085863e+00 1.6206868356151314e+00 4.2410391243647370e+00 + 2.9557065144777859e+00 1.4155894227794290e+00 4.7236542800694243e+00 + 3.2890673772099301e+00 1.1333530939329921e+00 5.1636255658244696e+00 + 3.6356457858233684e+00 7.8028253453514473e-01 5.5458348919628424e+00 + 4.0071340404735096e+00 3.5548984111160076e-01 5.8398636915236271e+00 + 4.3811932478377358e+00 -1.4163211583088353e-01 6.0065688461780358e+00 + 4.7104321135800058e+00 -6.8525552645726950e-01 6.0192552088939753e+00 + 4.9703891474534228e+00 -1.1905798921810842e+00 5.9098539905825564e+00 + 5.1897605093971100e+00 -1.5136191236151144e+00 5.8420418490737154e+00 + id 14738 + loc 3.1184864044189453e-01 6.1021856963634491e-02 1079 + blend 0.0000000000000000e+00 + interp 5.5027758768405211e-01:2.5978336815943925e-01:9.8084836440824774e-02:3.0099435680838671e-01:1.6621261969559054e-01:5.5027208490817525e-01:1.0448719639208401e+00:2.9330311017516986e-01:1.8891302212721819e+00:3.7245261643334870e-01:2.6877133646831179e+00:2.9419313910168060e-01:3.4854503878700127e+00 + CVs 20 + 2.6830533370354109e-01 4.4724311128862226e-01 2.4702196307192725e-02 + 4.0473201234854989e-01 8.3172610760021626e-01 2.2326984184296850e-02 + 4.8448464951229953e-01 1.1902951589999016e+00 4.0607336609417288e-03 + 5.3675746194955332e-01 1.5304051430924113e+00 -2.7386655534406446e-02 + 5.5398749626304400e-01 1.8352917083261318e+00 -7.5994354504212103e-02 + 5.3297546307320132e-01 2.0850610574755692e+00 -1.3879528670428831e-01 + 4.7872637521180850e-01 2.2669008216072606e+00 -2.0588051089949955e-01 + 4.0087585014837812e-01 2.3867744295006306e+00 -2.6992854097961472e-01 + 3.0189990352978580e-01 2.4544445704396134e+00 -3.3576568835287235e-01 + 1.8715672330643640e-01 2.4643040285962439e+00 -4.0518884871212169e-01 + 7.3535995336281412e-02 2.4175276502167486e+00 -4.6666989878859277e-01 + -2.1926919703785464e-02 2.3335653770788678e+00 -5.0732314629682163e-01 + -8.4041487570754692e-02 2.2440439588463184e+00 -5.2223580280936033e-01 + -9.8258471126777103e-02 2.1900890771817449e+00 -5.2507780717214569e-01 + -5.5569762033996217e-02 2.2153525425543306e+00 -5.6729515998946911e-01 + 3.8176116163467722e-02 2.2944757914199663e+00 -7.1760031645345812e-01 + 1.9139898302255598e-01 2.3063789882166561e+00 -9.7528892541553958e-01 + 4.0981943183063180e-01 2.1508974947816140e+00 -1.2290202550175051e+00 + 4.8940766187540014e-01 2.1938073448789068e+00 -1.0159250812765257e+00 + id 14739 + loc 6.1169677972793579e-01 8.5950481891632080e-01 404 + blend 0.0000000000000000e+00 + interp 4.2700203210583293e-01:3.8126496226665002e-01:4.2693449687458696e-04:3.0936467620694391e-01:6.1339518163478957e-01:4.0965303024748234e-01:1.3273888909803191e+00:2.8985012896659362e-01:1.9963364129833931e+00:2.9262852349666818e-01:2.9226189925787178e+00:4.2699776208551188e-01:3.4998116808404656e+00 + CVs 20 + 1.1009123000561627e-01 2.0376082452534947e-01 -3.7852609618413843e-02 + 2.2901464238163949e-01 3.9200832834272092e-01 -5.3413740599339371e-02 + 3.6756173069844067e-01 5.4201807628261145e-01 -7.6915626559256003e-02 + 5.2542979686400659e-01 6.4973152146057211e-01 -1.0823180368590204e-01 + 6.9614405769837362e-01 7.0788834926647526e-01 -1.4830955775989396e-01 + 8.6908742145326878e-01 7.1526807957623639e-01 -1.9520304677635383e-01 + 1.0337866811571690e+00 6.7924676720935251e-01 -2.4307748776191992e-01 + 1.1860297795586985e+00 6.1794458004871999e-01 -2.8098531796488829e-01 + 1.3274142239355871e+00 5.4630165548184073e-01 -3.0185773835503066e-01 + 1.4520784982896062e+00 4.6168362611331537e-01 -3.1622449901908406e-01 + 1.5438964281085172e+00 3.5466296028425448e-01 -3.4663079117160617e-01 + 1.5932418273327484e+00 2.2992690736881483e-01 -4.0210662295629163e-01 + 1.6168406819178081e+00 1.0958324107474615e-01 -4.6448172706468283e-01 + 1.6438164616090436e+00 1.0349611151467819e-02 -5.1540344556688744e-01 + 1.6807497569540502e+00 -6.9174947397788289e-02 -5.5894623302942836e-01 + 1.7152817765137800e+00 -1.3623215930713706e-01 -6.0918600154029567e-01 + 1.7393925202529537e+00 -1.9528839644252505e-01 -6.7248643172638101e-01 + 1.7603142921056256e+00 -2.4867820708761668e-01 -7.4283942594690200e-01 + 1.9034318097177649e+00 -2.4942826749761282e-01 -7.8915409173001516e-01 + id 14740 + loc 2.9131892323493958e-01 7.6932996511459351e-01 405 + blend 0.0000000000000000e+00 + interp 4.6628891700214492e-01:3.6538509683550741e-01:5.7747671451169325e-05:2.9728416163287102e-01:9.9998927861534437e-01:3.4876272093656746e-01:1.5972633454409970e+00:4.6628425411297492e-01:1.9980559527725799e+00:3.7766100439221112e-01:2.3957290626050431e+00:4.4480978349215966e-01:2.9722184292480538e+00:4.5941083086629925e-01:3.3557745875940728e+00 + CVs 20 + 8.0289366837284146e-02 1.9428073655018208e-01 1.0129441767319963e-01 + 7.9297897766086659e-02 2.5670218926480681e-01 1.8223457957753705e-01 + 2.3248088195745378e-02 2.9062515413730833e-01 2.4950186934032426e-01 + -2.0810482266979555e-02 2.9976017947128525e-01 2.9380526106633320e-01 + -5.4034149670449637e-02 2.8792624424054131e-01 3.0212943292240424e-01 + -7.6975642945660769e-02 2.7086053931504100e-01 2.7118529853985701e-01 + -8.9432469280328164e-02 2.6690107745521269e-01 2.1766391741796129e-01 + -9.1537734088397910e-02 2.8202615956811999e-01 1.7221116893836524e-01 + -8.2066737386061600e-02 3.0767513929103085e-01 1.6020815416131065e-01 + -5.7569452067140287e-02 3.3180414744111469e-01 1.9302051741762655e-01 + -1.3371192415823463e-02 3.4800295812209331e-01 2.7027362297113816e-01 + 5.5335505160532497e-02 3.5674604037729918e-01 3.8543332479833048e-01 + 1.4950283158831978e-01 3.5747118806657791e-01 5.3510456323582456e-01 + 2.6432983329956572e-01 3.3780239765282322e-01 7.2495931293665072e-01 + 3.9425322232836579e-01 2.8540900180934492e-01 9.5929189937216341e-01 + 5.3762987978753918e-01 2.1260357726382689e-01 1.2287969983888398e+00 + 6.9376286838592960e-01 1.4893674339223428e-01 1.5137526533193242e+00 + 8.5970897302489158e-01 1.1396163391088748e-01 1.7958927244991496e+00 + 1.0437717609791757e+00 1.2629421345249814e-01 2.0585962149644241e+00 + id 14741 + loc 6.4078521728515625e-01 2.5095757097005844e-02 1079 + blend 0.0000000000000000e+00 + interp 3.7182390976722113e-01:3.7182019152812346e-01:6.9737184320970114e-01:2.4905595534746283e-01:1.3775204002368846e+00:2.5449627350137588e-01:2.7947927832440924e+00:2.5749240006953145e-01:3.0876090211474905e+00:2.6004802861591347e-01:3.9842007075139922e+00 + CVs 20 + 1.2315767114721043e-02 4.0035991626838596e-01 -9.9547705054081254e-02 + -2.0654781959876911e-02 7.5144544890958542e-01 -1.1833151274327330e-01 + -8.3200285903437921e-02 1.0765137898539110e+00 -9.5295022112986127e-02 + -1.6627525651838682e-01 1.3709818278065005e+00 -5.2441616751173481e-02 + -2.6733191367225156e-01 1.6142976559943467e+00 9.9470195213017254e-03 + -3.7788277030864059e-01 1.7854006336019546e+00 8.4214278500430950e-02 + -4.8357013626582857e-01 1.8744792167086337e+00 1.5536417619899623e-01 + -5.7358627335839807e-01 1.8959398444651221e+00 2.1067590936338532e-01 + -6.5363263258678872e-01 1.8765012169851025e+00 2.5295850269066295e-01 + -7.4461458319929585e-01 1.8285148095442629e+00 2.9937151995322009e-01 + -8.6027372728615714e-01 1.7448574731285769e+00 3.6444128101605888e-01 + -9.9198489012604840e-01 1.6180205671835017e+00 4.5119950028357447e-01 + -1.1189864632091888e+00 1.4469300852318809e+00 5.5936296222344306e-01 + -1.2151338551644151e+00 1.2312675991646949e+00 6.9286371814592562e-01 + -1.2400865590762500e+00 9.7804077667024603e-01 8.5467392986090052e-01 + -1.1483729985270055e+00 7.1354070749668519e-01 1.0445246403316177e+00 + -9.2018105912199744e-01 4.8272592244421553e-01 1.2819352248489593e+00 + -5.7599440187592121e-01 3.7029883759847804e-01 1.5930587706875026e+00 + -3.4811678191464546e-01 2.3361214874347802e-01 1.8812452490823763e+00 + id 14742 + loc 5.1791435480117798e-01 3.1069543957710266e-01 394 + blend 0.0000000000000000e+00 + interp 5.0475180239947270e-01:4.6316026201413663e-01:1.3488702781070261e-01:3.2631279274316533e-01:8.9748256940722271e-01:2.6134929858940653e-01:1.3338605055862458e+00:4.3344454179724218e-01:1.8877352363629070e+00:4.9561230339866152e-01:2.1738692561991333e+00:5.0474675488144871e-01:2.8263246808341114e+00:3.2438373619239419e-01:3.3956507748353841e+00 + CVs 20 + 1.7767334849065672e-01 2.3261150502106914e-01 2.7190372545122132e-01 + 3.1922833875380563e-01 4.3651103828470972e-01 5.2943117695680741e-01 + 4.6018686410490506e-01 6.3926658113581702e-01 7.8748465942435675e-01 + 6.1176752912900656e-01 8.5572511422593256e-01 1.0444404011726185e+00 + 7.6558676921406976e-01 1.0893073873361980e+00 1.2938236187059202e+00 + 9.1789958985707920e-01 1.3387070582483098e+00 1.5384012475225770e+00 + 1.0766192488901900e+00 1.5944107926221069e+00 1.7948008839682463e+00 + 1.2563791865185419e+00 1.8424377812342292e+00 2.0823323591702865e+00 + 1.4682168546528098e+00 2.0695950549626811e+00 2.4044204760624086e+00 + 1.7159030008728657e+00 2.2584714003790816e+00 2.7537294107586767e+00 + 1.9973678618622623e+00 2.3757960305418528e+00 3.1314238015344342e+00 + 2.3046846842364808e+00 2.3720215924218642e+00 3.5435160639127128e+00 + 2.6146682282984690e+00 2.2020349946393809e+00 3.9684148654045464e+00 + 2.8923323630599480e+00 1.8643016384993423e+00 4.3559369790178524e+00 + 3.1308358465860060e+00 1.4013373752040348e+00 4.6800791416755549e+00 + 3.3831808527395082e+00 8.5223564597149126e-01 4.9511486562926557e+00 + 3.7502489944603714e+00 2.6873547887415405e-01 5.1708288224168477e+00 + 4.2641162284671328e+00 -2.4432181352207882e-01 5.3163382148898188e+00 + 4.6302829729355661e+00 -6.3646024213505070e-01 5.4380312721467341e+00 + id 14743 + loc 2.8974941372871399e-01 8.2581466436386108e-01 404 + blend 0.0000000000000000e+00 + interp 4.4371876664391263e-01:3.0879226723247083e-01:1.4372590261171991e-02:2.9346919169745544e-01:7.3584400419447471e-01:4.4371432945624623e-01:1.0757264391886130e+00:3.0711104643300996e-01:1.9306505553088544e+00:3.3930698884457050e-01:2.6266429393726218e+00:3.8127695998362049e-01:3.1737797750024193e+00 + CVs 20 + 1.7014920862023775e-01 1.6462291723448880e-01 -5.9789457394171928e-02 + 3.4455949309900380e-01 3.4537216338529958e-01 -7.6380372942359123e-02 + 5.3020519817062284e-01 4.9419462477508269e-01 -1.3385945318349268e-01 + 7.2589539918974755e-01 6.1106014704367062e-01 -2.2862565415619218e-01 + 9.2578792982732860e-01 6.9008438232219604e-01 -3.5776588451974112e-01 + 1.1215777243954879e+00 7.2479206286594400e-01 -5.1994503189272157e-01 + 1.3039063077320381e+00 7.1183384361277180e-01 -7.0978410984075424e-01 + 1.4639651664932880e+00 6.5088112215170069e-01 -9.1890903959140458e-01 + 1.5951249144273552e+00 5.4462430788591698e-01 -1.1364827553146051e+00 + 1.6942029032509585e+00 3.9946024012502046e-01 -1.3501433259418829e+00 + 1.7620829172796988e+00 2.2501242729944848e-01 -1.5479208667036179e+00 + 1.8021796795847844e+00 3.0547877391344569e-02 -1.7206925302356020e+00 + 1.8169540331076783e+00 -1.7866726890524665e-01 -1.8630297931351516e+00 + 1.8082577396201693e+00 -3.9909490505788336e-01 -1.9705797267540235e+00 + 1.7773969138836145e+00 -6.2734063751331059e-01 -2.0382807878065590e+00 + 1.7287044320875165e+00 -8.5307339557766615e-01 -2.0623395730437970e+00 + 1.6700795243781084e+00 -1.0564462995520276e+00 -2.0468537774104409e+00 + 1.6116926347514227e+00 -1.2146138802792166e+00 -2.0053173990668762e+00 + 1.6540873522814601e+00 -1.2309457336410439e+00 -1.9779647384731296e+00 + id 14744 + loc 9.5635324716567993e-01 9.7710424661636353e-01 405 + blend 0.0000000000000000e+00 + interp 6.6012262778870801e-01:6.5415210038726823e-01:6.3796684814765303e-04:5.2036399000968492e-01:1.8536233948040548e-01:3.0160653648090685e-01:7.2529924693818648e-01:4.5422579509922717e-01:1.0070251852340886e+00:3.5806390843121172e-01:1.8508419449588693e+00:2.6567401725728162e-01:2.4616130159154919e+00:4.9745388522832762e-01:3.0888845479616105e+00:6.6011602656243018e-01:3.7105335739672123e+00 + CVs 20 + 2.1566764062248267e-01 3.2702791599461822e-01 -3.6963929272261088e-02 + 2.8905423916555062e-01 5.1572964090736217e-01 -6.9427011746189413e-02 + 2.9450113028256947e-01 6.5638764158878660e-01 -1.1162210347387122e-01 + 3.0850184105477779e-01 7.8486744988844537e-01 -1.6718005115577894e-01 + 3.2853165717946392e-01 8.9915239731980356e-01 -2.3343917806331987e-01 + 3.5127476153021853e-01 1.0017237252523841e+00 -3.0901561744415518e-01 + 3.7625095344921478e-01 1.1025560208739926e+00 -3.9534696563709348e-01 + 4.1345265035369649e-01 1.2246639095308771e+00 -4.9503493761194722e-01 + 4.9851881323796188e-01 1.3931724058679631e+00 -5.9313856297668677e-01 + 6.5888999944756221e-01 1.5705814621939349e+00 -6.3874090003277639e-01 + 8.4445547221209627e-01 1.6820066448820472e+00 -6.2317296825401503e-01 + 1.0172713948332512e+00 1.7241602821450885e+00 -5.8535844248500279e-01 + 1.1813707223005496e+00 1.7177176750392924e+00 -5.4628691974331989e-01 + 1.3396405026057114e+00 1.6732980741264973e+00 -5.1730616100275806e-01 + 1.4825422244960229e+00 1.5974485292734228e+00 -5.1216230380492722e-01 + 1.5984714948927119e+00 1.4978654305599732e+00 -5.3952298834964585e-01 + 1.6866113894504113e+00 1.3828671945316859e+00 -5.9223160520835738e-01 + 1.7550996542658495e+00 1.2585611719620524e+00 -6.5538289253604209e-01 + 1.9066939921479458e+00 1.1560918959197082e+00 -6.7809906240872997e-01 + id 14745 + loc 4.1747263073921204e-01 2.3107990622520447e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4509235354092291e-01:2.8478548069657805e-01:1.9291797726961990e-02:4.2632190561321509e-01:9.0608533041989270e-01:2.9338354239703612e-01:1.2895115339994605e+00:4.4508790261738751e-01:2.0556463237976130e+00:2.7243202318018006e-01:2.6785798962235710e+00:4.3118211100547593e-01:3.1680135131384537e+00 + CVs 20 + 2.8178188672524118e-01 4.1607335799194933e-01 -7.9037847498453273e-02 + 4.6384311945664752e-01 7.6932972450595150e-01 -1.6873741160352035e-01 + 6.1064932540892491e-01 1.0866396345451270e+00 -2.6341413304344602e-01 + 7.4638281963531161e-01 1.3878399144420821e+00 -3.6471531936009749e-01 + 8.6173348101669534e-01 1.6770989716128071e+00 -4.7978326733758025e-01 + 9.4358185272606276e-01 1.9588818721258821e+00 -6.2060277110992046e-01 + 9.7321005174912989e-01 2.2264007172315168e+00 -8.0162394455609887e-01 + 9.3877901643480188e-01 2.4523965959127754e+00 -1.0263911447415173e+00 + 8.4854769273875275e-01 2.6081678481130535e+00 -1.2825855236030710e+00 + 7.1861579464305203e-01 2.6822033256433904e+00 -1.5571914386565375e+00 + 5.5784290611035248e-01 2.6743625843138994e+00 -1.8423278624199551e+00 + 3.6667251487180152e-01 2.5857967830837847e+00 -2.1300744021349027e+00 + 1.4077958621425068e-01 2.4102512560667417e+00 -2.4104667228831893e+00 + -1.2709118580738815e-01 2.1291844319787878e+00 -2.6657466339350067e+00 + -4.4557658836868042e-01 1.7162155392786866e+00 -2.8538996610858858e+00 + -7.9462622868939170e-01 1.1896135861602717e+00 -2.8848835273717466e+00 + -1.1206252173846603e+00 6.6496186001407565e-01 -2.6955842823339671e+00 + -1.4011042133290548e+00 2.7873261065180643e-01 -2.3396599955313264e+00 + -1.5837258864275650e+00 2.8649748564683053e-01 -2.1170238198271161e+00 + id 14746 + loc 5.3225070238113403e-01 7.4945169687271118e-01 405 + blend 0.0000000000000000e+00 + interp 5.1796880917550481e-01:4.6348706104177989e-01:5.5387444173502165e-02:4.5516433105655474e-01:7.7690952571960892e-01:3.5488222048796636e-01:1.1398421522696147e+00:5.1796362948741304e-01:1.8050944084826910e+00:4.0439948925585367e-01:2.1023044794705310e+00:4.4937471363002401e-01:2.8746720625026638e+00:2.8669716793940192e-01:3.7012686579803713e+00 + CVs 20 + 1.2345271767783400e-01 2.5899726217680574e-01 -6.7240281416448382e-03 + 1.3645320152216012e-01 4.1118729405803284e-01 -2.0594177537405164e-02 + 1.0672104482774947e-01 5.3358265698365148e-01 -3.8367954149753421e-02 + 8.2041416449149696e-02 6.5210990984504003e-01 -5.9819567729411660e-02 + 6.1251537490470243e-02 7.7171888788165832e-01 -8.1460925485824287e-02 + 4.3723259959842053e-02 9.0179815060821999e-01 -9.4158082591467157e-02 + 2.9279828577498945e-02 1.0485850830053383e+00 -7.8463467941235793e-02 + 1.8199835241937357e-02 1.2029590495731095e+00 -1.2715918717375839e-02 + 1.2518804185931209e-02 1.3463696459446783e+00 1.0974595186458097e-01 + 1.6375516879186036e-02 1.4685735959924886e+00 2.8356074393149250e-01 + 3.5308507533484912e-02 1.5686473271610519e+00 5.0448664813668431e-01 + 7.4811852684798619e-02 1.6465101924020753e+00 7.7242597331915197e-01 + 1.3767780363620452e-01 1.6991844372981999e+00 1.0850411843697987e+00 + 2.2297457338157944e-01 1.7309135423176114e+00 1.4257375350154109e+00 + 3.2958406152252495e-01 1.7661250894758880e+00 1.7666522711834323e+00 + 4.5894821951268649e-01 1.8333332600659964e+00 2.0887729789539855e+00 + 6.1266406208707191e-01 1.9426695146326107e+00 2.3865150231349910e+00 + 7.8466823395668839e-01 2.0904338183636746e+00 2.6559612156522494e+00 + 9.7430468636609313e-01 2.1895905667673778e+00 3.0029656689291668e+00 + id 14747 + loc 7.8334742784500122e-01 4.2428210377693176e-01 404 + blend 0.0000000000000000e+00 + interp 4.5132795364844713e-01:3.0249399679628203e-01:7.7755094100537270e-01:2.5950198860384344e-01:1.6616192813720883e+00:3.5102979708678356e-01:2.2054134348815797e+00:2.6347902874016338e-01:3.0420002438781708e+00:4.5132344036891064e-01:3.9889456292482599e+00 + CVs 20 + -6.4531174006226905e-02 2.8429184022132425e-01 3.6562339306626238e-02 + -9.2892246872897488e-02 5.5390286062418537e-01 8.8833355635353869e-02 + -1.4672937318562390e-01 8.2458086154677490e-01 1.5115924472918410e-01 + -2.3736254349680880e-01 1.0963431256059009e+00 2.2797218103523209e-01 + -3.6958130621519275e-01 1.3622601604646021e+00 3.2144876280395607e-01 + -5.4781596730618465e-01 1.6126428632762633e+00 4.3023127681972961e-01 + -7.7165372069376570e-01 1.8369394263799190e+00 5.4939551892430538e-01 + -1.0358380436838819e+00 2.0263278947509771e+00 6.7190172452721986e-01 + -1.3333663730256777e+00 2.1743824424827078e+00 7.9008743242029011e-01 + -1.6550579174673534e+00 2.2781433983986528e+00 8.9910205398013865e-01 + -1.9876809472852477e+00 2.3405261251835161e+00 1.0176065015548856e+00 + -2.3136835136985128e+00 2.3660985750663883e+00 1.1997285558878288e+00 + -2.5960501206441426e+00 2.3522838730949336e+00 1.4936809978496004e+00 + -2.7862280594233511e+00 2.2940452431406215e+00 1.8785047297992388e+00 + -2.8718062981452617e+00 2.1954152207641329e+00 2.2900850278127187e+00 + -2.8507405567522199e+00 2.0701419249770501e+00 2.6943279130011355e+00 + -2.7140758200909763e+00 1.9422583919497365e+00 3.0648129730494631e+00 + -2.4942063566936521e+00 1.8384800825725731e+00 3.3680747735890937e+00 + -2.4523094633213098e+00 1.7657025609639541e+00 3.6030134609638251e+00 + id 14748 + loc 1.0676714032888412e-01 7.3623609542846680e-01 1079 + blend 0.0000000000000000e+00 + interp 3.7610900103937334e-01:3.5802929980276971e-01:3.8742747633954133e-03:3.7610523994936296e-01:7.4900588948100266e-01:2.9634773427976563e-01:1.4005461941955777e+00:3.5347689687163769e-01:2.2246801854512093e+00:2.9523736101014908e-01:3.1606227696535401e+00 + CVs 20 + 7.5625237101679579e-02 4.5259367530269767e-01 2.2938464729593708e-01 + 1.6534550784227769e-01 8.0870350324253404e-01 3.4415336403329411e-01 + 2.5447511865495059e-01 1.1175674640423545e+00 4.0678106530427455e-01 + 3.3480480918408684e-01 1.3943250346074496e+00 4.4308913866093247e-01 + 4.0399648023794571e-01 1.6325973711053632e+00 4.5709084362883723e-01 + 4.5469778060362415e-01 1.8248351421516062e+00 4.6084229466779936e-01 + 4.8002999225653220e-01 1.9735424631336913e+00 4.7286499038606422e-01 + 4.8358398623874971e-01 2.1006909091932013e+00 5.0880749195461961e-01 + 4.8168255456677872e-01 2.2386469773987665e+00 5.6651327757310399e-01 + 4.9412574514738417e-01 2.4033510941167400e+00 6.1479687718301890e-01 + 5.2603138454927101e-01 2.5750802742987196e+00 6.1570447873380707e-01 + 5.6536398401085153e-01 2.7192813308447561e+00 5.5671540335071323e-01 + 5.9573139687800913e-01 2.8119504322114599e+00 4.4658826630715232e-01 + 6.0483632065815551e-01 2.8442886671221972e+00 2.9758323366733030e-01 + 5.9129394862452100e-01 2.8300077819984981e+00 1.0912424115010588e-01 + 5.7121261699744852e-01 2.8142898029958858e+00 -1.6010663693899874e-01 + 5.6397389588869773e-01 2.7845740655677371e+00 -5.6321743339125219e-01 + 5.5424533800501641e-01 2.6092883485415288e+00 -9.0801098933421542e-01 + 4.9923706102197629e-01 2.3245640313207381e+00 -7.0606509615493807e-01 + id 14749 + loc 3.8005360402166843e-03 7.9222694039344788e-02 394 + blend 0.0000000000000000e+00 + interp 5.5197609417342741e-01:3.7256661583315953e-01:9.5180422056038982e-01:3.2435292035716823e-01:1.5957548047335250e+00:4.3361468660467722e-01:2.1794947680228560e+00:3.7528595454887631e-01:2.9831717451581001e+00:3.9920019435628762e-01:3.0034623807630569e+00:5.5197057441248565e-01:3.3935598690716233e+00:5.2818970318938119e-01:3.9799865929369265e+00 + CVs 20 + -7.7545003031065429e-02 2.1783511980492873e-01 2.4116128335637382e-01 + -1.7360722579810078e-01 4.6238295614313252e-01 5.0323890425431050e-01 + -2.7065218395819979e-01 7.1988394724504334e-01 7.7515848438277590e-01 + -3.6561161317824609e-01 9.8698001354909193e-01 1.0489010391333933e+00 + -4.6887699159987695e-01 1.2616808578738152e+00 1.3145899170210180e+00 + -5.9313657807506537e-01 1.5339314654712246e+00 1.5672623632058555e+00 + -7.5026784156831949e-01 1.7911162915114565e+00 1.8103344049664518e+00 + -9.4541488812028862e-01 2.0208921240170938e+00 2.0461956824197243e+00 + -1.1743305992302191e+00 2.2095936048455487e+00 2.2723773817553172e+00 + -1.4242968803781353e+00 2.3419996343333653e+00 2.4860416640362848e+00 + -1.6770852379522516e+00 2.4033056653832885e+00 2.6859490929959864e+00 + -1.9144110046070026e+00 2.3841149623158286e+00 2.8700168721979802e+00 + -2.1271498151536132e+00 2.2914368812777193e+00 3.0379700097635958e+00 + -2.3226441918833172e+00 2.1505566093989721e+00 3.1964266716679077e+00 + -2.5079304132388827e+00 1.9939557435883315e+00 3.3481827553892796e+00 + -2.6766680306500592e+00 1.8541050598192004e+00 3.4859343991158678e+00 + -2.8223872822843190e+00 1.7447744015640732e+00 3.6010951933975788e+00 + -2.9542814569862643e+00 1.6553305488691950e+00 3.7032295273220699e+00 + -3.0892851772223588e+00 1.5794310614150451e+00 3.8471987502738090e+00 + id 14750 + loc 7.7607989311218262e-01 2.3286901414394379e-01 405 + blend 0.0000000000000000e+00 + interp 4.9454561038196720e-01:2.9226283062375913e-01:6.1450696923777470e-01:2.7241501286277464e-01:1.0739083255993291e+00:4.1941698841331215e-01:1.6389159728599814e+00:4.3246150102256992e-01:2.0000000008328342e+00:3.7555862698329701e-01:2.3604180368565366e+00:4.9454066492586340e-01:2.9370781491810636e+00:4.4443185078473241e-01:3.1603977490985740e+00:2.5256891270374127e-01:3.7234616531655833e+00 + CVs 20 + 1.4294754675501237e-01 1.3932714696542436e-01 -4.9561563731307648e-03 + 3.1507899114679561e-01 2.2971604742423996e-01 -7.2407880186395220e-03 + 4.9794790134413536e-01 3.0431361648864735e-01 -4.7396564668865521e-03 + 6.8186117194025453e-01 3.6044910089645488e-01 -5.1543941952591626e-03 + 8.6638929675404497e-01 3.9401129839399346e-01 -1.6879048961769415e-02 + 1.0489734926303906e+00 4.0213751862060682e-01 -4.7975439203575831e-02 + 1.2254136787569121e+00 3.8384536512752221e-01 -1.0512109141757224e-01 + 1.3908538402464590e+00 3.4034769502559792e-01 -1.9297664515058310e-01 + 1.5407905869748713e+00 2.7458830127285994e-01 -3.1370786952128360e-01 + 1.6716407066993941e+00 1.9010974136884529e-01 -4.6706875727935337e-01 + 1.7795736777233861e+00 8.7282046922822709e-02 -6.4834373809121659e-01 + 1.8634116641276128e+00 -3.6534283948819302e-02 -8.4523141383812861e-01 + 1.9267288099845543e+00 -1.7309848269976336e-01 -1.0568868832150418e+00 + 1.9645435590475770e+00 -2.8772138961397564e-01 -1.3246039669009348e+00 + 1.9472617480169161e+00 -3.2758270512118770e-01 -1.6978181824070580e+00 + 1.8419833383748101e+00 -2.5373215716860897e-01 -2.1483040666850672e+00 + 1.6554573783591335e+00 -7.3312805485541865e-02 -2.5870493413147475e+00 + 1.4373488361322933e+00 1.6951714993007971e-01 -2.9496220341685744e+00 + 1.4313646488428249e+00 2.5574692203874871e-01 -3.1720520618909762e+00 + id 14751 + loc 9.7283679246902466e-01 4.1794866323471069e-01 404 + blend 0.0000000000000000e+00 + interp 4.0598440944396375e-01:2.6284268688470680e-01:6.6894723790102972e-03:1.8997765813840742e-01:1.2579448974257355e+00:2.8015710211370581e-01:2.0214595160974538e+00:4.0598034959986934e-01:2.6770505786293430e+00:2.4596327820075020e-01:3.2442519811065855e+00 + CVs 20 + -1.3676384107899753e-01 -1.4190419962585771e-02 1.2897166332159063e-01 + -2.2280003671285858e-01 -5.6146882401137771e-02 2.3683988505369172e-01 + -2.5914965058456207e-01 -1.1363044564260674e-01 3.2806268526442689e-01 + -2.7234044720463446e-01 -1.6487785811739170e-01 4.0841134592440415e-01 + -2.6139253079589214e-01 -2.0241078306571952e-01 4.8127057795835237e-01 + -2.2865057676446626e-01 -2.1837702981322182e-01 5.5421228962675828e-01 + -1.8670789000341131e-01 -2.0676581518788337e-01 6.3455201813946305e-01 + -1.5274888360980957e-01 -1.6626798534847390e-01 7.2515897283540665e-01 + -1.3859744139795960e-01 -9.8609891930526050e-02 8.2669490007591406e-01 + -1.5317177392853931e-01 -6.9826300612221281e-03 9.3688340288178507e-01 + -2.0972526963709537e-01 1.0416440822195727e-01 1.0288962951139091e+00 + -3.2440853813680914e-01 2.3297343058966530e-01 1.0386156369853237e+00 + -5.2072760995959588e-01 3.8144952481433114e-01 9.2577976509521243e-01 + -8.1490410422200465e-01 5.4529611509750275e-01 7.6543464783396309e-01 + -1.1717193445471754e+00 7.0780374562718484e-01 6.7716837609688851e-01 + -1.5558145018137088e+00 8.5087229153363908e-01 6.9333898296560537e-01 + -1.9583962081880353e+00 9.5464091873353873e-01 8.0488471493837643e-01 + -2.3439971421843762e+00 1.0034451056929079e+00 1.0112892590586977e+00 + -2.4034828069021632e+00 1.0020468491796395e+00 1.2647723514601732e+00 + id 14752 + loc 2.7860519289970398e-01 2.8595995903015137e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4664081837600994e-01:4.4508790261738751e-01:6.9439380513847349e-02:4.4663635196782620e-01:6.4974670598708162e-01:2.9558274515415761e-01:1.2483983577752014e+00:2.8534719976231948e-01:2.1703672758051735e+00:4.4545360427670128e-01:3.0230626417634734e+00:3.0259317787948253e-01:3.8643876553791010e+00 + CVs 20 + 1.9479915315544749e-01 4.5144527475355906e-01 5.4298112599035164e-02 + 3.0460630959798496e-01 8.2375966374255394e-01 2.2651188576386316e-02 + 3.8149288905812528e-01 1.1625301699688484e+00 -4.8646513555359150e-02 + 4.4534509819273216e-01 1.4817283054862540e+00 -1.4188534152765081e-01 + 4.9236302441947127e-01 1.7768140098052316e+00 -2.5583030426019510e-01 + 5.1455397136533343e-01 2.0463168189398817e+00 -3.8728229774185918e-01 + 4.9504636408680158e-01 2.2926632539652978e+00 -5.3399601043016753e-01 + 4.1041676721522902e-01 2.5147168852560005e+00 -6.9517297784338161e-01 + 2.4495713265068086e-01 2.6949104570826226e+00 -8.6653194599168260e-01 + 7.4755684309195658e-03 2.8077844477215486e+00 -1.0394212126800175e+00 + -2.7750276657475392e-01 2.8417407492873732e+00 -1.2068574441262241e+00 + -5.8771679446900127e-01 2.8000799728446668e+00 -1.3653163979510232e+00 + -9.0714899501832491e-01 2.6926963346661905e+00 -1.5128000185419950e+00 + -1.2251570945060943e+00 2.5298823712399909e+00 -1.6477533688360333e+00 + -1.5436619549492645e+00 2.3029359808199970e+00 -1.7682988068562784e+00 + -1.8624452436633026e+00 1.9466506797907626e+00 -1.8688812034988964e+00 + -2.0854392084780438e+00 1.3898223538218932e+00 -1.9363279355282290e+00 + -2.0970225657116233e+00 7.8908636780252839e-01 -1.9635020775995220e+00 + -2.0594840761258739e+00 4.2231602426100023e-01 -1.9619213010129015e+00 + id 14753 + loc 5.3273367881774902e-01 7.4011904001235962e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927576418733897e-01:4.7927097142969710e-01:8.5342221282283526e-02:4.6517645452911538e-01:8.5298328828240355e-01:4.3198223648149287e-01:1.3985432847606871e+00:2.7499973622931190e-01:2.3543492009265119e+00:3.5689424246167939e-01:2.9726176643172235e+00:4.1654641716155344e-01:3.5732617721744417e+00 + CVs 20 + -2.1087373921694602e-01 1.5107615563274240e-01 -1.5650625521073191e-01 + -4.3230195103583424e-01 3.0495561209011879e-01 -3.2218072670984166e-01 + -6.6643501072286548e-01 4.6210622306683535e-01 -4.9271420868961469e-01 + -9.1370557032157329e-01 6.2253358663408132e-01 -6.7076411067352804e-01 + -1.1710252111385970e+00 7.8417383345699254e-01 -8.6321844974539674e-01 + -1.4355224779589337e+00 9.4272713613604830e-01 -1.0725067533154260e+00 + -1.7074845068774867e+00 1.0929248019442754e+00 -1.2976803326636788e+00 + -1.9853356577946184e+00 1.2228274011496825e+00 -1.5417933739761538e+00 + -2.2594517202846252e+00 1.3102218012479907e+00 -1.8074377424199148e+00 + -2.5160567288679543e+00 1.3336758003676104e+00 -2.0847857704691863e+00 + -2.7456017628015892e+00 1.2864280237247612e+00 -2.3563569348512807e+00 + -2.9433239098802342e+00 1.1757090908291161e+00 -2.6123690311464873e+00 + -3.1044962190813767e+00 1.0150072774739864e+00 -2.8486206243233090e+00 + -3.2243193891429272e+00 8.2293891507911798e-01 -3.0530978163681541e+00 + -3.3014950531166236e+00 6.2186591138963454e-01 -3.2088583532316513e+00 + -3.3349055404309840e+00 4.2441244849214765e-01 -3.3174622100121800e+00 + -3.3200834606081164e+00 2.3066575649820997e-01 -3.4007220173864670e+00 + -3.2673696957439589e+00 3.6223775989997709e-02 -3.4885053186349158e+00 + -3.2775278480288490e+00 -2.5414760305975448e-01 -3.6625648643122464e+00 + id 14754 + loc 6.7512536048889160e-01 9.1554528474807739e-01 405 + blend 0.0000000000000000e+00 + interp 4.4440699551326207e-01:4.4440255144330698e-01:1.0049238735146626e-02:4.0092899712553814e-01:7.0227593911870256e-01:4.3517857477327176e-01:1.3862208796478686e+00:4.3063190470364299e-01:2.0215013499247285e+00:2.7089484288401366e-01:2.9800016447085733e+00:3.6416737814995126e-01:3.4027353220560190e+00 + CVs 20 + 2.2060042372961897e-01 3.1139245658507897e-01 -7.4690630899830503e-03 + 3.1449247402082342e-01 4.9935347189890600e-01 2.0003186342205950e-02 + 3.5272760018497229e-01 6.2989021311933668e-01 6.5978746938626862e-02 + 3.9430898178563845e-01 7.3710888449906387e-01 1.2789290884200111e-01 + 4.2930246307332365e-01 8.0850334423820680e-01 2.0041160158141419e-01 + 4.4354253766941243e-01 8.2786599624595980e-01 2.6987129444506341e-01 + 4.1999857520125494e-01 7.8500727786490709e-01 3.0744473802941019e-01 + 3.5200911004495855e-01 7.0203602912991525e-01 2.8087511300901441e-01 + 2.6178409724420659e-01 6.2888080277935832e-01 2.0627918502194670e-01 + 1.7767567271548337e-01 5.7736350386223567e-01 1.4566694212269488e-01 + 1.0629917862671637e-01 5.2192522946832376e-01 1.3268875877020478e-01 + 4.3883876344393918e-02 4.4510810458420347e-01 1.6365833439684035e-01 + -1.0668867292670262e-02 3.4152783764986844e-01 2.2914036485704883e-01 + -4.8531684318800006e-02 1.9995365618321451e-01 3.3802633674914390e-01 + -4.9202722600090378e-02 4.4800605247723793e-03 5.1481492809451679e-01 + 1.3255986906067802e-02 -2.3766923045842051e-01 7.7382993145105872e-01 + 1.5515799157729507e-01 -4.8650315200637390e-01 1.0978050707304332e+00 + 3.7205354730603157e-01 -6.9940829965328744e-01 1.4480925177249202e+00 + 5.1573590176292694e-01 -8.2849751200987032e-01 1.6620670191623559e+00 + id 14755 + loc 6.8884050846099854e-01 8.8635158538818359e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7774691604543068e-01:2.8858391498132641e-01:2.1697020495300656e-01:2.9845078792852914e-01:1.0335794703368837e+00:4.2923274616093426e-01:1.8761226788887666e+00:3.2142889249914380e-01:2.4453955110126238e+00:4.7774213857627024e-01:2.9957869338642542e+00:2.9671413721501988e-01:3.7770134140112823e+00 + CVs 20 + 1.1964589066869197e-01 3.2555085714765375e-01 -1.9735540289014836e-02 + 2.5174186095577328e-01 6.4209895511794224e-01 -7.0324435139475422e-02 + 3.9563684067710653e-01 9.5033660550091359e-01 -1.5735675928951864e-01 + 5.5198449356031665e-01 1.2461649489470836e+00 -2.8537094916132683e-01 + 7.2112900858540696e-01 1.5179360527144814e+00 -4.5989827163174857e-01 + 8.9792809412360797e-01 1.7443833862321796e+00 -6.8738536455913302e-01 + 1.0717886010777993e+00 1.9016060669592865e+00 -9.7085657337707065e-01 + 1.2304299285924056e+00 1.9753294231573473e+00 -1.3045216014384113e+00 + 1.3622170550402359e+00 1.9600830164706693e+00 -1.6747245479623818e+00 + 1.4577021725824584e+00 1.8541637617596598e+00 -2.0632230968406877e+00 + 1.5110415087690279e+00 1.6590057291427782e+00 -2.4505044430543843e+00 + 1.5191764396384135e+00 1.3787345931044390e+00 -2.8169629323600884e+00 + 1.4835419905073666e+00 1.0199501275727756e+00 -3.1438486430349872e+00 + 1.4148003218185357e+00 5.9036888779558727e-01 -3.4131365652814525e+00 + 1.3292368068685139e+00 9.2383753824549775e-02 -3.5978448963118330e+00 + 1.2275630869752638e+00 -4.8163610211387531e-01 -3.6082612882445257e+00 + 1.0710973476369787e+00 -1.0808457919238041e+00 -3.1992907671751860e+00 + 8.3256770838668648e-01 -1.3913875374385647e+00 -2.2748743728399794e+00 + 7.5704314252342220e-01 -1.8512961286231306e+00 -2.1864673558862022e+00 + id 14756 + loc 3.8799276947975159e-01 9.7729432582855225e-01 404 + blend 0.0000000000000000e+00 + interp 4.5235296117613899e-01:3.1579983662712174e-01:1.4510912306866408e-02:4.5234843764652727e-01:7.3970684037031975e-01:3.8114485102389445e-01:1.1340142477112938e+00:3.6216584270825763e-01:1.9799234034551330e+00:2.6467946851487378e-01:2.6861304186534767e+00:2.8195249237833264e-01:3.1690885672487092e+00 + CVs 20 + 9.0763352486694968e-02 1.5156699364227677e-01 4.0990817273082521e-02 + 1.8241734488192318e-01 2.9602774090536454e-01 8.2061826991221123e-02 + 2.9274289197769454e-01 4.2046952974483059e-01 1.0908020908509153e-01 + 4.2475313175954932e-01 5.2723835271062769e-01 1.2299168651816839e-01 + 5.7508896958659139e-01 6.1212151120047675e-01 1.2096273433234062e-01 + 7.3852778393298346e-01 6.7275459857791053e-01 1.0187280547583477e-01 + 9.0945951154584037e-01 7.0965416827456518e-01 6.7209579582411499e-02 + 1.0844305291900538e+00 7.2801930162729478e-01 2.3170581374972188e-02 + 1.2626390338175746e+00 7.3397307341136642e-01 -2.3384592799918669e-02 + 1.4395990402844878e+00 7.2748566238865964e-01 -7.5305478973462459e-02 + 1.6019396023560695e+00 7.0341409105634656e-01 -1.4756104248204743e-01 + 1.7342729627160802e+00 6.6093764648533404e-01 -2.5163577538146176e-01 + 1.8380455381438505e+00 6.0883944606665130e-01 -3.7375353048713728e-01 + 1.9307639305616788e+00 5.5588059360204511e-01 -4.8975764227714103e-01 + 2.0192429574070410e+00 5.0197646346226388e-01 -5.9114335295891751e-01 + 2.0898078686693893e+00 4.4324856280736824e-01 -6.8494761793367021e-01 + 2.1273093684368045e+00 3.7732459320976242e-01 -7.7786064742500904e-01 + 2.1356672424341099e+00 3.0156144562936438e-01 -8.6468050922576656e-01 + 2.2874922898697343e+00 2.2720586706179180e-01 -8.6948522727036837e-01 + id 14757 + loc 9.5686823129653931e-01 8.7338489294052124e-01 394 + blend 0.0000000000000000e+00 + interp 3.9082390375941206e-01:2.6414459614149638e-01:3.9030896632854639e-01:3.4499035084628399e-01:9.8763357192373669e-01:3.9081999552037450e-01:1.4749684300493831e+00:2.6088021092042735e-01:1.9919528320073188e+00:2.8206407930421212e-01:2.7763237079864931e+00:2.2240203926093743e-01:3.5218876902894642e+00 + CVs 20 + -2.2176816501359825e-01 1.5391882539490989e-01 -2.6218921383888616e-01 + -4.1961015708915189e-01 2.9865395845702419e-01 -5.3896335542304208e-01 + -6.1496091689445587e-01 4.2800723724129264e-01 -8.1702733391861360e-01 + -8.1105732256641361e-01 5.3577354083773421e-01 -1.0887945076803032e+00 + -1.0093814744881651e+00 6.1959342039752185e-01 -1.3532391262948149e+00 + -1.2124670650365776e+00 6.7822865862744897e-01 -1.6082441084702206e+00 + -1.4199278700553304e+00 7.0854983884953571e-01 -1.8498274221863769e+00 + -1.6260177951120296e+00 7.0346872908842317e-01 -2.0718084748689130e+00 + -1.8251044542064883e+00 6.5598365568587691e-01 -2.2668635354249975e+00 + -2.0151398215036291e+00 5.6297145170479634e-01 -2.4240851376443104e+00 + -2.1930250917152905e+00 4.2839826747166865e-01 -2.5293407352141171e+00 + -2.3575470210683398e+00 2.6496861378894376e-01 -2.5807198554289306e+00 + -2.5160446874691784e+00 8.2977470614817417e-02 -2.5925654544984305e+00 + -2.6763457473458496e+00 -1.1472546183299048e-01 -2.5753442712015788e+00 + -2.8389238993223942e+00 -3.2512875953613474e-01 -2.5283434665488649e+00 + -2.9956590843548954e+00 -5.4172709141464748e-01 -2.4454545369752796e+00 + -3.1365962995209951e+00 -7.5950657545475342e-01 -2.3247347021820666e+00 + -3.2641276209331740e+00 -9.8564623021188702e-01 -2.1792124603243672e+00 + -3.4637504041537897e+00 -1.3234177898105211e+00 -2.0847633015279210e+00 + id 14758 + loc 3.3098277449607849e-01 3.0262789130210876e-01 405 + blend 0.0000000000000000e+00 + interp 4.4176607129353163e-01:3.7901584787100645e-01:3.8421634641442326e-02:4.2515457763886322e-01:7.2401115079380651e-01:2.6879093900362755e-01:1.0074882376146022e+00:4.0098720209254579e-01:1.5109511272020426e+00:4.4176165363281872e-01:2.0598754537924453e+00:2.9858168257725842e-01:2.6269121497655767e+00:2.8351177631095076e-01:3.2975784510046187e+00 + CVs 20 + 2.2233711760781830e-02 1.0958054516808943e-01 1.8022424153363747e-02 + 1.5402213686022093e-02 1.9516049551256981e-01 7.4116095840707302e-02 + -6.2863300599109127e-04 2.7694989861940689e-01 1.5587067530663809e-01 + -1.2178199940535815e-02 3.6266426530271129e-01 2.4890421181958869e-01 + -1.4763720132564044e-02 4.5267046261487509e-01 3.5734593919519303e-01 + -2.8450360418640483e-03 5.4642220337312175e-01 4.8478253919661962e-01 + 2.9240558158958145e-02 6.4217651951034149e-01 6.3286383950614189e-01 + 8.6253132290370932e-02 7.3755413978016204e-01 8.0109282868276266e-01 + 1.7165324797998041e-01 8.2978366115627189e-01 9.8697257597789845e-01 + 2.8721747959130012e-01 9.1579387330740702e-01 1.1860905317675836e+00 + 4.3293125968784624e-01 9.9298285976316547e-01 1.3922439410363214e+00 + 6.0600010381616709e-01 1.0591792793161732e+00 1.5977800666031963e+00 + 8.0069995651820236e-01 1.1112698340220573e+00 1.7956833394532941e+00 + 1.0083684231148320e+00 1.1419118497653251e+00 1.9821305502167417e+00 + 1.2191358990933305e+00 1.1412869866273394e+00 2.1561474843730486e+00 + 1.4306048064598780e+00 1.1065331911413043e+00 2.3164456212761184e+00 + 1.6455461434611198e+00 1.0470277243828199e+00 2.4589152604040061e+00 + 1.8592877146998923e+00 9.7597190391691802e-01 2.5793729918707022e+00 + 1.9340775059194806e+00 9.6589855397186908e-01 2.6285866838799237e+00 + id 14759 + loc 6.2067258358001709e-01 1.4825525879859924e-01 404 + blend 0.0000000000000000e+00 + interp 4.3928196205874492e-01:3.7022283934751254e-01:4.1597889809679178e-01:2.6902135131461596e-01:1.0142703305267884e+00:4.3927756923912437e-01:1.6464668821735748e+00:3.0352220047679268e-01:2.4259908456451509e+00:2.9011774484539665e-01:3.0092949513607556e+00:2.8940557474988216e-01:3.9473634001961719e+00 + CVs 20 + -6.0222185937276823e-02 8.6309290126558136e-02 1.8024711528645754e-01 + -1.1422394317805809e-01 1.5944998851262504e-01 3.3199221103292093e-01 + -1.6554684898850400e-01 2.2766220733541986e-01 4.6953176019192266e-01 + -2.1614466922450065e-01 2.9515658878483547e-01 6.0049361437082560e-01 + -2.6794851573433520e-01 3.6342660592583376e-01 7.2456123745080436e-01 + -3.2550688349962881e-01 4.3417301481487797e-01 8.3944384373887360e-01 + -3.9407026601545070e-01 5.0824434815975339e-01 9.4483046200691778e-01 + -4.7639087966730748e-01 5.8551853339223148e-01 1.0443273164690390e+00 + -5.7534487245797894e-01 6.6638972864781931e-01 1.1440679454323117e+00 + -6.8954769751316092e-01 7.5524460306798125e-01 1.2517428908421671e+00 + -8.1345853195781903e-01 8.5841659426854233e-01 1.3757989554717689e+00 + -9.2789345629029074e-01 9.7332714020946764e-01 1.5239732831502888e+00 + -1.0083174444097251e+00 1.0856767080339689e+00 1.6974551757694170e+00 + -1.0507727667962508e+00 1.1676502272000380e+00 1.9010283270086998e+00 + -1.0679806653294361e+00 1.2037473416560929e+00 2.1453019471387282e+00 + -1.0657802912420751e+00 1.2312732760644685e+00 2.4237230726995724e+00 + -1.0378719437865158e+00 1.3227969357939364e+00 2.7061651917105434e+00 + -9.6436100495216259e-01 1.4756783255456734e+00 2.9564868578754764e+00 + -8.1383429101807647e-01 1.4585770449515483e+00 2.9112930574557145e+00 + id 14760 + loc 3.2648602128028870e-01 5.8949196338653564e-01 394 + blend 0.0000000000000000e+00 + interp 4.0864460795550717e-01:3.1628411178698357e-01:7.6855821349740450e-01:3.5034473220643336e-01:1.7810551490817956e+00:2.8815479396189475e-01:2.5389334744021044e+00:4.0864052150942765e-01:3.1453792422327309e+00:3.0177869056927387e-01:3.9902323973868370e+00 + CVs 20 + -1.6538945179042774e-01 2.2714119065205274e-01 -2.6451809411916272e-01 + -3.0327048024797398e-01 4.5559695476754847e-01 -5.0745925652645285e-01 + -4.2164191075410101e-01 6.9658771430719191e-01 -7.2904697210528813e-01 + -5.2505354217452904e-01 9.5104768545710494e-01 -9.2977895104158359e-01 + -6.1728472346666097e-01 1.2129009697031830e+00 -1.1126576698887423e+00 + -7.0548883764757975e-01 1.4741584207459684e+00 -1.2848828250751709e+00 + -7.9966632131915993e-01 1.7256984024042210e+00 -1.4584021779394927e+00 + -9.0910760724675632e-01 1.9577413335856353e+00 -1.6425612558273808e+00 + -1.0386708421351634e+00 2.1658737409324700e+00 -1.8326450069864040e+00 + -1.1944947054975779e+00 2.3560296854256491e+00 -2.0491373011209495e+00 + -1.3836064969510300e+00 2.5012137401383399e+00 -2.3004188845096811e+00 + -1.6023784293955972e+00 2.5739247386174200e+00 -2.5631838122150019e+00 + -1.8302167958321340e+00 2.5517655428027384e+00 -2.8225214294297394e+00 + -2.0343687242933410e+00 2.4144014809904299e+00 -3.0510455665848326e+00 + -2.1949995748721847e+00 2.1727579837695883e+00 -3.2119564564090020e+00 + -2.3032172283776950e+00 1.8509955493078816e+00 -3.3073325106942923e+00 + -2.3661017565846705e+00 1.4662354761430287e+00 -3.3628840475569604e+00 + -2.4655177573674250e+00 1.0623740609150658e+00 -3.3843419778430608e+00 + -2.6884039620292706e+00 7.4612006655323748e-01 -3.3299091810755304e+00 + id 14761 + loc 5.1228022575378418e-01 9.1502511501312256e-01 1079 + blend 0.0000000000000000e+00 + interp 4.7891133956046616e-01:3.1549857776326556e-01:4.7150798671591909e-01:2.9083193844841604e-01:1.5580124891983116e+00:3.0515372341701896e-01:2.3507339351586505e+00:3.1480079258409116e-01:3.0000334887283540e+00:4.7890655044707059e-01:3.8360756276358208e+00 + CVs 20 + 1.8880606017170809e-01 3.8424627623243202e-01 7.2965078856455923e-03 + 3.8606158239957911e-01 7.1106832229439965e-01 -2.4128861417032743e-02 + 5.8845720148992398e-01 9.9722192926940134e-01 -7.4856924689254534e-02 + 7.9243681694179513e-01 1.2427215317568421e+00 -1.3854899765629358e-01 + 9.9272286453774305e-01 1.4404110375030674e+00 -2.1496675496801154e-01 + 1.1803726036649471e+00 1.5826702436822417e+00 -3.0197325195444719e-01 + 1.3505853966164396e+00 1.6727353359131492e+00 -3.9634864513060508e-01 + 1.5056785035841922e+00 1.7226984622823551e+00 -4.9709373387175998e-01 + 1.6488096223394435e+00 1.7420978060238161e+00 -6.0469286274773326e-01 + 1.7813855187521415e+00 1.7355865113783733e+00 -7.1966139329611178e-01 + 1.9038324679963041e+00 1.7042890459907345e+00 -8.4281501516267610e-01 + 2.0154008407211674e+00 1.6467127884576436e+00 -9.7415059189723452e-01 + 2.1139562172390924e+00 1.5604279355374364e+00 -1.1112078489678683e+00 + 2.1964985742985226e+00 1.4451982595880306e+00 -1.2472249283014130e+00 + 2.2597179615870306e+00 1.3126797707998688e+00 -1.3665830942511927e+00 + 2.2993176368718720e+00 1.2136518707128503e+00 -1.4405603192715715e+00 + 2.3168805819557927e+00 1.2296827387855611e+00 -1.4721187759282508e+00 + 2.3268198244768983e+00 1.2522121040703642e+00 -1.4963898287856701e+00 + 2.3124805067216374e+00 9.4563238291256257e-01 -1.3183740629300438e+00 + id 14762 + loc 5.3009176254272461e-01 2.2220560908317566e-01 405 + blend 0.0000000000000000e+00 + interp 4.3016413365177159e-01:2.7169231583140546e-01:4.1655719463825625e-03:4.3015983201043506e-01:7.0280514325450549e-01:2.9849525063697668e-01:1.0517155664390818e+00:4.1764703008894999e-01:1.7996447302158929e+00:3.7363367585604312e-01:2.1760235434775286e+00:4.1285175376849476e-01:2.9589564714795218e+00:3.2487295227494367e-01:3.3893685539671474e+00 + CVs 20 + 1.4112427766378619e-01 1.0862010127765924e-01 -6.4936145868888573e-02 + 3.1601860725067166e-01 1.7766127804225881e-01 -1.3117060736489106e-01 + 5.0121643186871245e-01 2.3267553289925083e-01 -2.1834968416825590e-01 + 6.8307811817001374e-01 2.6202591950847404e-01 -3.3227507212498641e-01 + 8.5359924729177994e-01 2.5791008396134990e-01 -4.7537955625805650e-01 + 1.0027617168151244e+00 2.1673680364286757e-01 -6.4777747707135480e-01 + 1.1217856223329070e+00 1.3984382888154157e-01 -8.4600532944181084e-01 + 1.2049935890074703e+00 3.2484132943616739e-02 -1.0642439192795499e+00 + 1.2477739413313587e+00 -9.8721998597464333e-02 -1.2961312669837803e+00 + 1.2464005360389652e+00 -2.4636553661974725e-01 -1.5346434717279740e+00 + 1.1982787484278294e+00 -4.0383883294833189e-01 -1.7707490916833448e+00 + 1.1045018642251525e+00 -5.6802638252997206e-01 -1.9906825669647987e+00 + 9.7155836773812920e-01 -7.3414094102592753e-01 -2.1816661314111951e+00 + 8.0630695240625394e-01 -8.8002327441351047e-01 -2.3505906448911689e+00 + 6.0738596218260610e-01 -9.6271681495022943e-01 -2.5298751959235797e+00 + 3.6469389363563659e-01 -9.4175799571426544e-01 -2.7400762784181603e+00 + 7.6465836341119586e-02 -8.1319806081934698e-01 -2.9465205508276271e+00 + -2.3757136212717594e-01 -6.0882950921754508e-01 -3.0950884319594834e+00 + -3.7889266851623904e-01 -5.1308081679215545e-01 -3.2573503289144425e+00 + id 14763 + loc 1.6916950698941946e-04 6.6141468286514282e-01 394 + blend 0.0000000000000000e+00 + interp 5.1703860392872814e-01:4.4661932047765790e-01:5.8247082615925372e-05:4.2011602770276663e-01:5.4280854098523346e-02:3.5014839335711095e-01:5.8955144913271562e-01:1.4002983268425631e-01:1.0018598604210522e+00:5.1703343354268883e-01:1.9992319433539461e+00:4.0227993676783741e-01:2.2526894944586315e+00:4.2606481613693958e-01:2.8405132522713119e+00:4.6310516703220678e-01:3.2789287901088886e+00 + CVs 20 + -1.6341571639475155e-01 2.1223819443017200e-01 -1.7074369388018681e-01 + -3.2813984513688932e-01 4.5082729271511973e-01 -3.6741792331569262e-01 + -4.9347467219378061e-01 7.2097137288806201e-01 -5.6551469102948881e-01 + -6.6159896881781433e-01 1.0195623277926620e+00 -7.5564645088609428e-01 + -8.3675946075234942e-01 1.3333607090389239e+00 -9.4382951803329429e-01 + -1.0210557566973597e+00 1.6382687615414628e+00 -1.1451220808533826e+00 + -1.2177942737492495e+00 1.9101088900434324e+00 -1.3747534051428976e+00 + -1.4377255882269475e+00 2.1343488395720618e+00 -1.6348933018856373e+00 + -1.6838470540722645e+00 2.2856992873272484e+00 -1.9204298881543926e+00 + -1.9190254870750678e+00 2.3026307954033243e+00 -2.2278326372779302e+00 + -2.0737635031755097e+00 2.1255997442324057e+00 -2.5260206758110408e+00 + -2.1204443645499542e+00 1.7762531090427274e+00 -2.7397409764807832e+00 + -2.1045308646475385e+00 1.3452558518469233e+00 -2.8302014515016620e+00 + -2.0916302154916711e+00 9.0545387896678164e-01 -2.8456185955994711e+00 + -2.1513088624543815e+00 4.6829934779402493e-01 -2.8534719017248800e+00 + -2.3976641951355924e+00 3.3263372250785350e-02 -2.8771149350604883e+00 + -2.9389219464215453e+00 -3.1759626856675838e-01 -2.8800784702422018e+00 + -3.6191088256330439e+00 -4.8268350519526737e-01 -2.8146744818024905e+00 + -3.9953945150126522e+00 -7.3041269444816992e-01 -2.8038488193709865e+00 + id 14764 + loc 5.1419216394424438e-01 1.6272665560245514e-01 404 + blend 0.0000000000000000e+00 + interp 5.2251138699478283e-01:3.3731560866601945e-01:4.2722893017261798e-01:2.9011774484539665e-01:1.0079946881187833e+00:2.7336639085972725e-01:1.8857648658197506e+00:5.2250616188091292e-01:2.4183283810415159e+00:2.7933312597221538e-01:3.0256634683426915e+00:3.4871387081812250e-01:3.9547573426375227e+00 + CVs 20 + -5.5438000026439394e-02 1.2078517158696049e-01 1.6783666337455516e-01 + -9.5839385630618237e-02 2.3284226311779430e-01 3.1968367077147686e-01 + -1.2574350755923591e-01 3.4092749532476274e-01 4.6205821463513191e-01 + -1.4788514276533427e-01 4.4763551138171059e-01 5.9836959428234759e-01 + -1.6423350566115291e-01 5.5285651055979534e-01 7.2678789774454677e-01 + -1.7767227173089201e-01 6.5538105454681483e-01 8.4273866246248752e-01 + -1.9110534240907634e-01 7.5336420708526874e-01 9.4257281813798155e-01 + -2.0582766428385946e-01 8.4562137533193504e-01 1.0269232187223984e+00 + -2.2279634578943758e-01 9.3195377535003110e-01 1.0982266517176522e+00 + -2.4292436237879433e-01 1.0145787922918845e+00 1.1598855918409212e+00 + -2.6455094376210520e-01 1.0987034074411830e+00 1.2166564501583648e+00 + -2.8203468045058144e-01 1.1848780978741384e+00 1.2738360809238345e+00 + -2.8138068792163318e-01 1.2681037118909229e+00 1.3374725246485824e+00 + -2.6115334238878662e-01 1.3308662524283963e+00 1.4095191656593422e+00 + -2.3952276668261707e-01 1.3522923402660718e+00 1.4918066455486443e+00 + -2.3389637691312948e-01 1.3399254382075567e+00 1.5842495370953293e+00 + -2.4426555856656451e-01 1.3379105904691577e+00 1.6784019274174309e+00 + -2.5514746493197149e-01 1.3730730559517177e+00 1.7618023814132342e+00 + -5.4125880221904010e-02 1.2774051701099345e+00 1.6945264045280439e+00 + id 14765 + loc 3.6724033951759338e-01 9.8182141780853271e-01 1079 + blend 0.0000000000000000e+00 + interp 4.9013169891923181e-01:3.1321360842827728e-01:3.6201824277534267e-02:3.5033424443735806e-01:9.2646682027937688e-01:2.8978117600595360e-01:1.5923984100316488e+00:1.5782492111622429e-01:2.4373543736812331e+00:3.0637720601992258e-01:2.9834871696676242e+00:4.9012679760224265e-01:3.6889852046276816e+00 + CVs 20 + 2.4171910747903502e-01 4.2801165361708837e-01 2.7303022069848859e-02 + 4.9101097375932984e-01 7.8037361010211703e-01 -1.9809831827594993e-02 + 7.4470382056123219e-01 1.0805817253504824e+00 -1.0218076816533445e-01 + 9.9368017855883428e-01 1.3185145540479364e+00 -2.1114221496932079e-01 + 1.2214531317114019e+00 1.4748059165755665e+00 -3.4457241479894790e-01 + 1.4007840530502809e+00 1.5289311020981429e+00 -4.9124109635506852e-01 + 1.5084154408754833e+00 1.4854189222300827e+00 -6.2313870350039791e-01 + 1.5412367459418208e+00 1.3810536149986605e+00 -7.0983380144030650e-01 + 1.5121881372207293e+00 1.2614518161981740e+00 -7.3537635600285289e-01 + 1.4435020885267600e+00 1.1662782591694587e+00 -7.0510506294283770e-01 + 1.3589854285597855e+00 1.1194683713172662e+00 -6.4402992083696853e-01 + 1.2755442856766457e+00 1.1251001626148769e+00 -5.8533769264304125e-01 + 1.1993859089462762e+00 1.1727900343060527e+00 -5.5872135941180423e-01 + 1.1267191505875775e+00 1.2485970748264463e+00 -5.8487419972406451e-01 + 1.0464537886872807e+00 1.3615155623018373e+00 -6.7324165274207970e-01 + 9.5287034474853538e-01 1.5701575938471082e+00 -8.5685334564520454e-01 + 8.7194678730519659e-01 1.8258579189726702e+00 -1.2441151556328296e+00 + 8.1085580632551291e-01 1.8198878257111912e+00 -1.6973584465623095e+00 + 6.8445259833792382e-01 1.5590161322453340e+00 -1.7891782536178966e+00 + id 14766 + loc 9.2328298091888428e-01 7.2293847799301147e-01 405 + blend 0.0000000000000000e+00 + interp 4.6430250298037939e-01:4.6429785995534961e-01:2.7020173202571240e-01:4.0318158469632254e-01:9.2381460869427334e-01:3.0751187314938738e-01:1.2838937238841919e+00:2.6727746393659030e-01:2.1746269844565393e+00:3.0763059597118603e-01:3.4517958577179302e+00:4.3141853089624255e-01:3.9747940217036994e+00 + CVs 20 + 2.1013677445477041e-01 2.8754844587935458e-01 -1.1315802549909681e-01 + 3.1488160811636079e-01 4.8969178098479327e-01 -2.1770663643152274e-01 + 4.0302715892982333e-01 6.3378230861386231e-01 -3.0881506175759865e-01 + 5.0651563888311912e-01 7.6706453524247908e-01 -3.9406146566729694e-01 + 6.1844641219899932e-01 8.9448961607175725e-01 -4.6982827736767308e-01 + 7.3408302687810512e-01 1.0240231554879304e+00 -5.2894936486228716e-01 + 8.5252717778089870e-01 1.1653320696062708e+00 -5.5319462477085191e-01 + 9.8008583373438318e-01 1.3110581259542387e+00 -4.9962987993079966e-01 + 1.1237270785336086e+00 1.3807578455538714e+00 -3.5360725196455323e-01 + 1.2679530959587209e+00 1.3477439856495108e+00 -2.4250594018225280e-01 + 1.4085443431868638e+00 1.3021847046468493e+00 -1.9173600080194930e-01 + 1.5530689472736037e+00 1.2594276319179183e+00 -1.5079235559729026e-01 + 1.7025970288483463e+00 1.2127371193538974e+00 -1.0254666231319370e-01 + 1.8505094974029406e+00 1.1779911486448980e+00 -5.8020950607164223e-02 + 1.9850728723992503e+00 1.1847373750418702e+00 -3.3697076572117735e-02 + 2.0933928430583295e+00 1.2428629533699125e+00 -3.3885196933096884e-02 + 2.1709971285719027e+00 1.3343184936831833e+00 -4.3299808039453547e-02 + 2.2306042481915478e+00 1.4362384291616537e+00 -2.6794778172050282e-02 + 2.3782750928551541e+00 1.4472152830785563e+00 1.9001179868706464e-01 + id 14767 + loc 7.8794139623641968e-01 6.6412830352783203e-01 394 + blend 0.0000000000000000e+00 + interp 4.3683622452174903e-01:2.8251466994201913e-01:4.1874928669893119e-01:4.0680995989348201e-01:9.6578320936698281e-01:4.3683185615950382e-01:1.4682976621743977e+00:2.7859833970814513e-01:2.0839798471371718e+00:3.5703349088269287e-01:2.9906505005264776e+00:2.6746293735610199e-01:3.8643925475760121e+00 + CVs 20 + -2.4554541168263458e-01 2.0986350224254774e-01 -2.4498460977738357e-01 + -4.9594362766754396e-01 3.9915937949824731e-01 -4.6813270752831948e-01 + -7.5542652992377357e-01 5.7965472162373222e-01 -6.8720777059754545e-01 + -1.0250665150117286e+00 7.5823718177317578e-01 -9.1487251983435613e-01 + -1.3003690323194705e+00 9.3349156348172124e-01 -1.1569476446988025e+00 + -1.5786141695606069e+00 1.1021978481123953e+00 -1.4138924952681000e+00 + -1.8604304340129127e+00 1.2604147351089576e+00 -1.6849786452136510e+00 + -2.1459756216939980e+00 1.3984693377781381e+00 -1.9746099114746758e+00 + -2.4313743777780505e+00 1.4978324548187225e+00 -2.2852715350918382e+00 + -2.7108552211191430e+00 1.5399588798157904e+00 -2.6070273566396009e+00 + -2.9811625934134525e+00 1.5171692404993511e+00 -2.9281884374405296e+00 + -3.2395858838926332e+00 1.4300307394243519e+00 -3.2500640177347968e+00 + -3.4780547369942534e+00 1.2825824900422536e+00 -3.5733573266288303e+00 + -3.6867019102190879e+00 1.0859881629215189e+00 -3.8804325127673169e+00 + -3.8650071616737831e+00 8.5428003044061329e-01 -4.1470819127506466e+00 + -4.0177311184565854e+00 5.8911248863233823e-01 -4.3628833844655697e+00 + -4.1396273593074415e+00 2.8287390795110223e-01 -4.5316647994509678e+00 + -4.2217299718684007e+00 -5.9479863733380878e-02 -4.6605207199999068e+00 + -4.2927714748263064e+00 -3.9005310639279722e-01 -4.8488541989927487e+00 + id 14768 + loc 7.1607208251953125e-01 9.6811753511428833e-01 404 + blend 0.0000000000000000e+00 + interp 3.9237990106283072e-01:2.8223710910328687e-01:3.6388226328072371e-03:3.2916565230444972e-01:9.4185538108993905e-01:3.9237597726382012e-01:1.4120531190990859e+00:2.1375254927008666e-01:2.0164479417560921e+00:3.2898881707014171e-01:2.9833790513817862e+00 + CVs 20 + 6.3149253794989896e-02 1.2787226437333180e-01 -4.8073417555546949e-04 + 1.0443046934517425e-01 2.3840959017077484e-01 1.1580437509606564e-02 + 1.3984524292201633e-01 3.3507230862622517e-01 2.1836132818608064e-02 + 1.8022768822404209e-01 4.2725793821267510e-01 2.5639338464184702e-02 + 2.2733260416622791e-01 5.1475919232205070e-01 2.4124730636038261e-02 + 2.8242377992000406e-01 5.9727254204440827e-01 1.8625268852930504e-02 + 3.4642490954027094e-01 6.7461797106289323e-01 1.0817949850893821e-02 + 4.1983587161266600e-01 7.4688584847974759e-01 2.9880287288742702e-03 + 5.0134707535960343e-01 8.1367982442710796e-01 -2.2149669146865336e-03 + 5.8664575650808515e-01 8.7351349466352368e-01 -2.9534294882130885e-03 + 6.7188746009044020e-01 9.2492950839725641e-01 1.0459060759033245e-03 + 7.5758014569457344e-01 9.6833819864305171e-01 9.6986742373006973e-03 + 8.4669975984746648e-01 1.0046504287261957e+00 2.3491376876359549e-02 + 9.3908065923052020e-01 1.0340965187376057e+00 4.3861000713869225e-02 + 1.0314027082569670e+00 1.0571650720125141e+00 7.3267602980818358e-02 + 1.1224487182559011e+00 1.0748269142360187e+00 1.1383783245086276e-01 + 1.2142727704992458e+00 1.0878046385983222e+00 1.6555475182881257e-01 + 1.3076295800479065e+00 1.0967079339604906e+00 2.2654782836813575e-01 + 1.3818044311180049e+00 1.0926604211378586e+00 2.9501814454112241e-01 + id 14769 + loc 5.0299537181854248e-01 5.8542078733444214e-01 1079 + blend 0.0000000000000000e+00 + interp 4.3083600424420004e-01:4.2854046459042111e-01:5.8767372515323113e-01:4.3083169588415759e-01:1.0050761554998886e+00:2.6493785253893221e-01:1.6637593144900760e+00:3.1568869857431797e-01:2.9250841843966939e+00:2.8039349437219474e-01:3.9361204775668877e+00 + CVs 20 + -3.1163457826525146e-02 3.3923324706533919e-01 1.1012466472812732e-01 + -3.0211280038746430e-02 6.5445445945620395e-01 1.6511046850583913e-01 + -9.4502279291558411e-03 9.5534015640713066e-01 1.7851252041443977e-01 + 2.3690863367160309e-02 1.2519546077066430e+00 1.6128069025129310e-01 + 7.2899614815924607e-02 1.5375877489669130e+00 1.1416120065713020e-01 + 1.3910201186733073e-01 1.8031478085001824e+00 3.9155005479189486e-02 + 2.2074876103508939e-01 2.0358672607490256e+00 -6.5216638669713833e-02 + 3.1465907583225755e-01 2.2225443624444416e+00 -2.0142961930564285e-01 + 4.1605164512012371e-01 2.3546045115664649e+00 -3.6706491224626625e-01 + 5.1981015814131537e-01 2.4282169886305827e+00 -5.5603349537853108e-01 + 6.2230595753541351e-01 2.4412288718258641e+00 -7.6148146941474248e-01 + 7.2176338970796317e-01 2.3926221267705965e+00 -9.7585665259681409e-01 + 8.1803649211455176e-01 2.2824546680322388e+00 -1.1914318825759744e+00 + 9.1292322246182367e-01 2.1124417755861833e+00 -1.4000131262657507e+00 + 1.0109643627228684e+00 1.8886334719180649e+00 -1.5905126274445323e+00 + 1.1183161200875718e+00 1.6311462378797579e+00 -1.7422907525909013e+00 + 1.2339463159257351e+00 1.3873938429160588e+00 -1.8175059497804915e+00 + 1.3504580565271815e+00 1.1951989876683100e+00 -1.7889968198576653e+00 + 1.4724295397856826e+00 8.2792732357327459e-01 -1.6541844617690189e+00 + id 14770 + loc 8.6573058366775513e-01 3.4924149513244629e-02 394 + blend 0.0000000000000000e+00 + interp 4.7333923633630998e-01:3.4375168778160969e-01:9.8326507923442219e-02:3.2669402816985754e-01:9.4414132078805302e-01:4.7333450294394663e-01:1.5523624485752254e+00:2.3318902910731826e-01:2.0117818452645162e+00:3.6233017130481232e-01:2.7477547872792685e+00:3.8914544564835851e-01:3.0062492685894653e+00:3.9693150841953084e-01:3.6447525005491412e+00 + CVs 20 + 2.4473628338444764e-01 2.6776108742975618e-01 3.0587966462824390e-01 + 4.9135957080348158e-01 5.0513810243833057e-01 5.5007562308052982e-01 + 7.3879408916192180e-01 7.2223836679426556e-01 7.7122453446915262e-01 + 9.8815170495078386e-01 9.2690003268060728e-01 9.9144001781041302e-01 + 1.2391573844346693e+00 1.1171989268650595e+00 1.2154659729283095e+00 + 1.4928459385958726e+00 1.2864971700073804e+00 1.4486300434651849e+00 + 1.7514137482362693e+00 1.4222192116807308e+00 1.6918824872060152e+00 + 2.0130344039120489e+00 1.5124168596160761e+00 1.9412926598273439e+00 + 2.2676246821519497e+00 1.5521795227195490e+00 2.1893049043817001e+00 + 2.5039142003421233e+00 1.5418987745347152e+00 2.4211441726887113e+00 + 2.7142568287113882e+00 1.4937738699758789e+00 2.6158062745028619e+00 + 2.8989263324791459e+00 1.4343143740900453e+00 2.7568894753994404e+00 + 3.0636525742654763e+00 1.3824522105485164e+00 2.8464607460924367e+00 + 3.2088991461027652e+00 1.2980749221396222e+00 2.8990437609094677e+00 + 3.3265114962934339e+00 1.0829471339989278e+00 2.9127836012209962e+00 + 3.4127128939934828e+00 6.9915012252351927e-01 2.8964777232350136e+00 + 3.4579041819355991e+00 2.1747180799292209e-01 2.8921852848363701e+00 + 3.4561964686064233e+00 -2.5255953698870037e-01 2.9245804554662902e+00 + 3.6481347929592798e+00 -5.9877773150899749e-01 2.9627884387292296e+00 + id 14771 + loc 1.1210976541042328e-01 1.7883217334747314e-01 404 + blend 0.0000000000000000e+00 + interp 5.2989265484371739e-01:3.2382536512547050e-01:9.3045561184714298e-01:3.2939457100864017e-01:1.6797795282372987e+00:5.2988735591716896e-01:2.3128122020320898e+00:3.1005036499413502e-01:2.9701362337982768e+00:4.0536850147187575e-01:3.3912436580733525e+00:2.9512793529027415e-01:3.9955581163863791e+00 + CVs 20 + -9.5080446596611898e-02 8.6269218712468732e-02 6.1996137696339049e-03 + -1.7142657399003422e-01 1.8957840272905083e-01 -6.6473929451839331e-03 + -2.4303775491758617e-01 3.0674502882096905e-01 -2.0491776189586669e-02 + -3.0885598830902905e-01 4.3130585187103565e-01 -2.7396381264456954e-02 + -3.6971306079054633e-01 5.6307115588723111e-01 -2.4900783478921384e-02 + -4.2662807390367019e-01 7.0184525084664162e-01 -1.0043763056950872e-02 + -4.8013508090148449e-01 8.4720375478682941e-01 2.0373120442618631e-02 + -5.3030468295117406e-01 9.9856458088268840e-01 6.9896040180940644e-02 + -5.7569765538252249e-01 1.1540548587395258e+00 1.4168143536002753e-01 + -6.1170645170628224e-01 1.3101115019889742e+00 2.3646658877507953e-01 + -6.3149956153171738e-01 1.4627099140232003e+00 3.5129506103261421e-01 + -6.2943093893615198e-01 1.6088167093449763e+00 4.8096787559982068e-01 + -6.0328425517403084e-01 1.7462957876300125e+00 6.2052211841839955e-01 + -5.5318070395163854e-01 1.8724782304999312e+00 7.6466778646385258e-01 + -4.8012411857496951e-01 1.9833979107818263e+00 9.0499298029613751e-01 + -3.8724416856127175e-01 2.0746498182190516e+00 1.0304818012654298e+00 + -2.8170801188219674e-01 2.1427190963651275e+00 1.1329965258966523e+00 + -1.7304839199957872e-01 2.1851414931361282e+00 1.2092694017768739e+00 + -7.1663684964635960e-02 2.2022661501991116e+00 1.4019480190610558e+00 + id 14772 + loc 2.9139930009841919e-01 2.7114665135741234e-04 405 + blend 0.0000000000000000e+00 + interp 5.1222135350929465e-01:2.6734575128986604e-01:1.0487738762322341e-02:2.7492488461470205e-01:1.0783974557697742e+00:3.0188444090289157e-01:2.0153466678967589e+00:4.2524223882037188e-01:2.7981936441050732e+00:5.1221623129575955e-01:3.0692260115729368e+00:4.1404527211578496e-01:3.7497976643818918e+00 + CVs 20 + -2.2499711331605964e-02 1.9859607738901761e-02 3.0671757868271293e-02 + -4.7286195479934519e-02 1.1178882311056647e-02 6.6401019371523068e-02 + -8.0547169040746047e-02 -5.3791511923097640e-03 1.2039029482430835e-01 + -1.1305516289030715e-01 -3.1786419601853202e-02 1.7258839751837524e-01 + -1.4703676099001248e-01 -6.8224470199281712e-02 2.1860031675359587e-01 + -1.8641577739621540e-01 -1.1223466119314984e-01 2.5756102793292834e-01 + -2.3525196734826673e-01 -1.5928401339529552e-01 2.9305980608490545e-01 + -2.9556113728528494e-01 -2.0475682662688438e-01 3.3080381565588779e-01 + -3.6590128601034405e-01 -2.4531668410767785e-01 3.7715146331333044e-01 + -4.4114388393401549e-01 -2.7926258974867707e-01 4.4063762325678613e-01 + -5.1261195220810762e-01 -3.0661070108560234e-01 5.3024947852281845e-01 + -5.6884390187859379e-01 -3.2844226123260839e-01 6.5159491696033944e-01 + -5.9722230164892642e-01 -3.4573942265789248e-01 8.0437993613431946e-01 + -5.8710961118142180e-01 -3.5793787644467079e-01 9.8114730740851852e-01 + -5.3492797637100176e-01 -3.6209826370158216e-01 1.1659840724618082e+00 + -4.4431171319685780e-01 -3.5395639488148245e-01 1.3421545314951233e+00 + -3.1808175531194571e-01 -3.2954806490035449e-01 1.5027629296838296e+00 + -1.5536939733596522e-01 -2.8711509448599748e-01 1.6466905226664330e+00 + -4.0556665024524069e-02 -2.4555623800849158e-01 1.6993409309779213e+00 + id 14773 + loc 1.9332771003246307e-01 2.6746276021003723e-01 404 + blend 0.0000000000000000e+00 + interp 4.1241899744539784e-01:4.1241487325542342e-01:2.3122808256519822e-01:2.9939181864774161e-01:9.7957097772115775e-01:4.0536850147187575e-01:1.3852139374546542e+00:3.0727959989050518e-01:1.9982773983530970e+00:2.9966502860273525e-01:2.9929214182701349e+00:2.9849918826402100e-01:3.9517888819934441e+00 + CVs 20 + -8.4719880726369282e-02 1.0317915246095927e-01 -6.3844010213576413e-02 + -1.8646957413892518e-01 2.1403117262078769e-01 -1.2151033103954162e-01 + -2.9687205244198467e-01 3.3504549072504863e-01 -1.8011332680022274e-01 + -4.0743295630011067e-01 4.6674740955095806e-01 -2.4207427098946982e-01 + -5.1532054062137655e-01 6.0928987309156946e-01 -3.0379615325487580e-01 + -6.1718498221645290e-01 7.6107890197411265e-01 -3.6009745147872951e-01 + -7.1054952159077867e-01 9.1902803475607575e-01 -4.0526758080406922e-01 + -7.9407814890024531e-01 1.0800319633446487e+00 -4.3501644264041406e-01 + -8.6620737585112761e-01 1.2413040787879868e+00 -4.4789360937471029e-01 + -9.2527242146358946e-01 1.4008539486449381e+00 -4.4528471496065086e-01 + -9.7229216028964116e-01 1.5601725999826743e+00 -4.2966944749775676e-01 + -1.0094107517520532e+00 1.7207733677474590e+00 -4.0352474069310207e-01 + -1.0414887899173730e+00 1.8860082761043848e+00 -3.6644824089645522e-01 + -1.0714941126571000e+00 2.0558516568266487e+00 -3.1854626797779428e-01 + -1.0955064284131382e+00 2.2223620932708466e+00 -2.7050093865537861e-01 + -1.1098382362488148e+00 2.3793726469533700e+00 -2.4386405263026656e-01 + -1.1264124498692165e+00 2.5407841904396884e+00 -2.3530425448921255e-01 + -1.1565973903696016e+00 2.7353527346165123e+00 -1.8946075360299242e-01 + -1.1051247633509504e+00 2.8778453600760434e+00 -1.0236421093706305e-01 + id 14774 + loc 1.0975252091884613e-01 4.2156592011451721e-02 405 + blend 0.0000000000000000e+00 + interp 4.4941295281082411e-01:2.9838535961484897e-01:1.3507452035349721e-01:2.7975720523151393e-01:1.0322045913499813e+00:3.2012489884279721e-01:1.9351930857460540e+00:4.2917364189665214e-01:2.3387937102244267e+00:2.9153021666637285e-01:2.9883712420147592e+00:4.4940845868129603e-01:3.7300507888938643e+00 + CVs 20 + 2.1057734735703151e-01 1.7364254615730051e-01 -1.1447940829478007e-01 + 3.9120688413158283e-01 3.9004320567777850e-01 -1.4194894869303565e-01 + 5.9141356492042141e-01 5.2924421427197366e-01 -1.9235201806982269e-01 + 8.0901823261881090e-01 6.3845635806046142e-01 -2.3428383794164956e-01 + 1.0400318941395408e+00 7.1830007437977794e-01 -2.6218796172752468e-01 + 1.2791182695220269e+00 7.6541097059250562e-01 -2.7985513138257356e-01 + 1.5185463560855392e+00 7.7908568867086647e-01 -2.9692546855293811e-01 + 1.7503984681864837e+00 7.6358227410564372e-01 -3.2187524586102567e-01 + 1.9676715234002489e+00 7.2576785664772103e-01 -3.6023704936918438e-01 + 2.1631907468925107e+00 6.7395016307567879e-01 -4.1736739285467456e-01 + 2.3294614109242140e+00 6.1680587637576756e-01 -4.9748673351098482e-01 + 2.4593983173876297e+00 5.6226137995696601e-01 -6.0028242661251097e-01 + 2.5475086205062119e+00 5.1637470053242418e-01 -7.1912258728930833e-01 + 2.5923332555344203e+00 4.8136941733850547e-01 -8.4109433470473760e-01 + 2.6006398442018415e+00 4.5462942634649078e-01 -9.4648532887864456e-01 + 2.5855738910230674e+00 4.3087538149799154e-01 -1.0176518298594566e+00 + 2.5560062370552648e+00 4.0436368619003182e-01 -1.0518170821900072e+00 + 2.5152181488099385e+00 3.7059505163461504e-01 -1.0568611312692560e+00 + 2.5806170131366137e+00 3.4859569922735634e-01 -9.5068719760903431e-01 + id 14775 + loc 6.8327176570892334e-01 3.7249094247817993e-01 1079 + blend 0.0000000000000000e+00 + interp 4.4141606007442585e-01:3.1439917237239245e-01:4.4697830295021346e-01:2.6881958264449213e-01:1.0197399970442218e+00:2.5745358767064597e-01:1.9317874282792036e+00:4.4141164591382515e-01:2.3506776398921230e+00:3.9805799827390226e-01:2.9546154840340844e+00:2.5439319269021821e-01:3.6667522968754511e+00 + CVs 20 + -3.5104850821581352e-02 4.1108033467477711e-01 -1.6268594036565798e-01 + -6.0376342735683375e-02 7.9318273654233706e-01 -2.4385276278113791e-01 + -9.1458639843567502e-02 1.1555853085494709e+00 -2.8551246134112285e-01 + -1.4227622752507335e-01 1.5097099934413858e+00 -2.9921362186704742e-01 + -2.2480096752686274e-01 1.8568456973672687e+00 -2.7609156119053724e-01 + -3.5188767889535777e-01 2.1934815523864413e+00 -2.0461220779287403e-01 + -5.3214078315806601e-01 2.5033789397664137e+00 -7.3592405578320252e-02 + -7.6207824991736772e-01 2.7603768217560556e+00 1.1764577357204220e-01 + -1.0272402512517422e+00 2.9433405532440409e+00 3.5415716562810773e-01 + -1.3072256705934777e+00 3.0466414994674587e+00 6.1087865778152650e-01 + -1.5857397492519323e+00 3.0816836757329922e+00 8.6765596456277416e-01 + -1.8594079177871019e+00 3.0658486219335179e+00 1.1185722297845511e+00 + -2.1376790742554439e+00 3.0103606975166839e+00 1.3639929438642218e+00 + -2.4408779906248652e+00 2.9138965814261022e+00 1.6022467025659741e+00 + -2.8013384241755368e+00 2.7497698489156250e+00 1.8382625310648395e+00 + -3.2080308179392025e+00 2.4729851781918093e+00 2.0563759422063175e+00 + -3.6031264487186592e+00 2.0716887169110167e+00 2.1633319066197547e+00 + -3.9214174202047185e+00 1.5331854950726942e+00 2.1183861416005034e+00 + -3.8612734446908341e+00 1.5614968737569832e+00 2.2036400808123116e+00 + id 14776 + loc 2.8140306472778320e-01 3.5388472676277161e-01 394 + blend 0.0000000000000000e+00 + interp 4.2794084696338458e-01:3.7343624035079354e-01:7.2225446009107541e-01:4.2793656755491499e-01:1.0994272817454243e+00:3.1160557857206939e-01:1.7374631310260469e+00:2.9417489796821744e-01:2.6597577769036880e+00:3.0971424612080251e-01:3.2437156076706666e+00:4.1004782498922304e-01:3.9407290357899312e+00 + CVs 20 + -1.3860905913422372e-01 3.3779194814416280e-01 2.9278577311419318e-01 + -2.8887287692061242e-01 6.5332058045738461e-01 5.3845246670282199e-01 + -4.4843437250841728e-01 9.6050768597234448e-01 7.6203183154807463e-01 + -6.2090112799120900e-01 1.2682637828157652e+00 9.7272533995790911e-01 + -8.1298737681927424e-01 1.5746537295552849e+00 1.1699423834710061e+00 + -1.0345269807393531e+00 1.8717058253778018e+00 1.3580378395943431e+00 + -1.2929474613779137e+00 2.1472187378564729e+00 1.5437243555841047e+00 + -1.5876036530956479e+00 2.3903362227785410e+00 1.7344133632017686e+00 + -1.9143934882116871e+00 2.5917886184024028e+00 1.9388746467195985e+00 + -2.2712806683328268e+00 2.7333114714368594e+00 2.1597250698255634e+00 + -2.6531309537186947e+00 2.7850297986578436e+00 2.3847013297014361e+00 + -3.0449303393115832e+00 2.7213089366998391e+00 2.5930898004513256e+00 + -3.4199613630599082e+00 2.5354094067898534e+00 2.7677851477082367e+00 + -3.7427083897325386e+00 2.2507394877877149e+00 2.8909256013682327e+00 + -3.9952606019134094e+00 1.9131269287715491e+00 2.9636106045893538e+00 + -4.1924674618663857e+00 1.5367331222462117e+00 3.0237397814029743e+00 + -4.3557423474578725e+00 1.1014411519791365e+00 3.1347962771039488e+00 + -4.4800210397339502e+00 6.2901235814986922e-01 3.3492497881575547e+00 + -4.5135861156019041e+00 3.1674027251315318e-01 3.4857284864974463e+00 + id 14777 + loc 3.7428170442581177e-01 9.7479897737503052e-01 405 + blend 0.0000000000000000e+00 + interp 4.4731861237454201e-01:4.4731413918841828e-01:7.2855482467769628e-03:4.0356007367896113e-01:5.3989759527101078e-01:1.9836418956203317e-01:1.5080191837920989e+00:2.7829300594269230e-01:2.6669698157172093e+00:3.1848567084006563e-01:3.0096514960230474e+00:4.2185482173773198e-01:3.6182139696144318e+00 + CVs 20 + 2.5350501142613613e-01 3.2487145452335564e-01 -4.2397104860076133e-03 + 3.2459111658466033e-01 5.1120613278678184e-01 -1.7549688060498107e-02 + 3.3671793175989972e-01 6.5782290656819364e-01 -3.2003293217953019e-02 + 3.4893102279561639e-01 8.0060806805192497e-01 -4.8339522212006922e-02 + 3.6218930910185854e-01 9.4753696710215141e-01 -6.4541683004200295e-02 + 3.8092545644745307e-01 1.1094907179676978e+00 -7.2370733602633117e-02 + 4.0883711141270157e-01 1.2907211321779164e+00 -5.4546471691867743e-02 + 4.4270776705080883e-01 1.4808786155754194e+00 5.4121728272457648e-03 + 4.7342081261219382e-01 1.6638417566446264e+00 1.1039561730381163e-01 + 4.9226761980688938e-01 1.8312514551231101e+00 2.5382176355223907e-01 + 4.9490468057601222e-01 1.9834001796939866e+00 4.3016901676002550e-01 + 4.7991193747075178e-01 2.1219626817369623e+00 6.3734347563805727e-01 + 4.3988296679254513e-01 2.2403795282980510e+00 8.6741450212239191e-01 + 3.5532952798456918e-01 2.3214999117043407e+00 1.0973043158926381e+00 + 2.0950619438925888e-01 2.3487085223717212e+00 1.3082181194826745e+00 + 1.1699251315297254e-02 2.3183668210005721e+00 1.5148552464657064e+00 + -2.0687876121887971e-01 2.2394719359304749e+00 1.7442131787928863e+00 + -4.1237821831600968e-01 2.1256829330770888e+00 1.9883718923616651e+00 + -5.0639635241578929e-01 2.1044966581171831e+00 2.2132728839783584e+00 + id 14778 + loc 9.7129464149475098e-01 5.0394999980926514e-01 404 + blend 0.0000000000000000e+00 + interp 4.2299067838602378e-01:2.6284268688470680e-01:3.9364585207195546e-03:2.7397969378141235e-01:7.2069017144440095e-01:3.0257506883009117e-01:1.1908903258032035e+00:2.6185145058396697e-01:2.0025712527388748e+00:3.3761182053092631e-01:2.2564396506542117e+00:4.2298644847923994e-01:2.9891210353666988e+00:3.8555613979832848e-01:3.8506881488460944e+00 + CVs 20 + 2.7880189437247127e-02 1.7838789070749458e-01 -1.1704033975061971e-02 + 1.0399310297233733e-02 3.3903096501812940e-01 -2.0805641474543765e-02 + -1.1695321212817217e-02 5.2164090020005660e-01 -5.3448781260192701e-02 + -5.4948799898780210e-03 7.3081915339904169e-01 -1.1594044002535317e-01 + 3.6990320074250627e-02 9.6004519490541451e-01 -2.1383818992706732e-01 + 1.2340238867587661e-01 1.1987279694460438e+00 -3.5070719768844882e-01 + 2.6017169352435932e-01 1.4327730100029374e+00 -5.2498453071816220e-01 + 4.4889992403207701e-01 1.6484988047404951e+00 -7.3153585131854537e-01 + 6.8667407554694482e-01 1.8358374522336558e+00 -9.6480294768077957e-01 + 9.6812779494006374e-01 1.9873773823446590e+00 -1.2175137662928490e+00 + 1.2794432524029118e+00 2.0975485021181424e+00 -1.4785545146287356e+00 + 1.5832195444753050e+00 2.1642317617438533e+00 -1.7420112101520933e+00 + 1.8234618145301269e+00 2.1912033695601125e+00 -2.0144559123616248e+00 + 1.9672438090381204e+00 2.1863049245746029e+00 -2.3031801646055108e+00 + 2.0171754194692988e+00 2.1555111323274181e+00 -2.6047845897951358e+00 + 1.9738440124691592e+00 2.1084574473987199e+00 -2.8892490873285501e+00 + 1.8401611272404756e+00 2.0651423768817128e+00 -3.1091804100074119e+00 + 1.6480703296039763e+00 2.0415919395243667e+00 -3.2462204251091640e+00 + 1.4851343128061738e+00 1.9710160373546133e+00 -3.5269909408305509e+00 + id 14779 + loc 1.2685334682464600e-01 2.3748688399791718e-02 1079 + blend 0.0000000000000000e+00 + interp 3.5839871252078304e-01:3.0666842252115062e-01:1.0449813979111822e+00:3.5839512853365785e-01:1.9738029325669504e+00:2.3229699497915168e-01:2.3786683897617515e+00:2.7345907636471350e-01:3.1799502134440827e+00:2.9315173278102541e-01:3.9840845141825545e+00 + CVs 20 + 3.8930103746112193e-01 4.8276528925884998e-01 2.1846620612509610e-02 + 6.3144917197671457e-01 8.8934475389156675e-01 1.4703397209235691e-02 + 8.2753153779769173e-01 1.2636685310053228e+00 -4.2952757421441112e-03 + 1.0105169038072188e+00 1.6225614519446305e+00 -3.4478104609242055e-02 + 1.1656352329331148e+00 1.9605702166477363e+00 -8.7314587965623414e-02 + 1.2748541195160215e+00 2.2770857724200884e+00 -1.7832047328420297e-01 + 1.3130921981844710e+00 2.5676994316377666e+00 -3.3233793794776978e-01 + 1.2556905251795385e+00 2.7927262266103980e+00 -5.7022533229778405e-01 + 1.1254503318093971e+00 2.8869748925793646e+00 -8.5375610366919974e-01 + 9.8222176424538499e-01 2.8603450272344455e+00 -1.1202386956955355e+00 + 8.4526136852492206e-01 2.7543295104193053e+00 -1.3605293730596209e+00 + 7.1148893138068403e-01 2.5835423139855784e+00 -1.5786894983942463e+00 + 5.7645308264582673e-01 2.3473521564093525e+00 -1.7702785685847311e+00 + 4.3395641623201986e-01 2.0352349000850642e+00 -1.9221909308119978e+00 + 2.8198229250997342e-01 1.6392155840612752e+00 -2.0028136408084878e+00 + 1.4373728689449455e-01 1.1888031579939695e+00 -1.9623014131307197e+00 + 4.7587130203156566e-02 7.2820799547722392e-01 -1.7650567058939752e+00 + -2.1026805850004882e-03 3.5257968213709062e-01 -1.4216027811972969e+00 + 1.9736848912241506e-02 3.3882418801463082e-01 -1.2018903254301214e+00 + id 14780 + loc 1.3784117996692657e-01 9.2993885278701782e-01 394 + blend 0.0000000000000000e+00 + interp 4.1608302198223063e-01:3.1207257360551877e-01:5.1074802854708357e-01:4.0534436684219183e-01:9.8155433660341362e-01:2.6478794158842850e-01:1.8473348089601214e+00:2.8138092980431340e-01:2.7988113535926935e+00:4.1607886115201081e-01:3.1500694397563249e+00:2.8077854222979698e-01:3.8737798365740588e+00 + CVs 20 + -2.6101895273281284e-01 2.1863154261512899e-01 -9.0415663654853373e-02 + -4.9593233360714456e-01 4.4430693538352650e-01 -1.9487940328167885e-01 + -7.1395085750654963e-01 6.7685596015763116e-01 -3.0715455060932528e-01 + -9.2195670917806738e-01 9.1293802354040521e-01 -4.2650211773727631e-01 + -1.1241991715647941e+00 1.1456757069818833e+00 -5.5720481525185095e-01 + -1.3247009265455674e+00 1.3655010228982745e+00 -7.0405382979439346e-01 + -1.5275707044064319e+00 1.5610233186177329e+00 -8.7275835770163823e-01 + -1.7350037963189027e+00 1.7203147167658805e+00 -1.0659357251386381e+00 + -1.9446867724904893e+00 1.8313085845955341e+00 -1.2789513262327574e+00 + -2.1488622325829567e+00 1.8832413895860052e+00 -1.5018281219444996e+00 + -2.3364426903796693e+00 1.8706008367787241e+00 -1.7187551564002908e+00 + -2.4986020949233794e+00 1.7975485889775058e+00 -1.9082961613035057e+00 + -2.6362085587257535e+00 1.6805643521323426e+00 -2.0625875832042597e+00 + -2.7541564904917406e+00 1.5365011094286398e+00 -2.1980648962644773e+00 + -2.8391332273421472e+00 1.3434698672185776e+00 -2.3086562899454557e+00 + -2.8633588817280078e+00 9.9911282784430222e-01 -2.3224798342080830e+00 + -2.8667669927948403e+00 3.4100864306576728e-01 -2.2810311757739434e+00 + -2.9587836750010186e+00 -3.6474693154858828e-01 -2.5227032135863992e+00 + -2.9893302133468169e+00 -4.4767002929179012e-01 -2.8585636909744703e+00 + id 14781 + loc 2.4191969633102417e-01 2.2530533373355865e-01 405 + blend 0.0000000000000000e+00 + interp 4.3040310660151243e-01:4.2152420616766184e-01:5.4706322597436319e-01:4.3039880257044644e-01:1.0091845288785073e+00:3.9811093903075051e-01:1.9535537294072449e+00:3.3967521850784432e-01:2.2370044643681966e+00:4.1349816996988220e-01:2.8823351630380891e+00:4.0098720209254579e-01:3.5108584475174558e+00:2.6365143150807402e-01:3.9976951838253600e+00 + CVs 20 + -3.1917185501782734e-02 8.7889283222580994e-02 -2.5605362509493121e-02 + -7.2066220386315494e-02 1.2180720336935436e-01 -3.3370445890721433e-02 + -1.2011286872900412e-01 1.5847532383664498e-01 -2.2944068713238189e-02 + -1.6846509982941194e-01 1.9890907503580618e-01 -2.8110818081280700e-02 + -2.1861560234042998e-01 2.4494812692131090e-01 -4.8433742803047408e-02 + -2.7190479845142140e-01 3.0319445104027298e-01 -8.3501171991448242e-02 + -3.2556316553377290e-01 3.8421840978948640e-01 -1.3353362083821183e-01 + -3.6841453673858904e-01 4.9628466283327655e-01 -1.9758386872012620e-01 + -3.8397273931027903e-01 6.3407908422747883e-01 -2.7101761224006338e-01 + -3.6455315863119647e-01 7.7583640708042689e-01 -3.4652876847687636e-01 + -3.1853657153656301e-01 8.9931114842855475e-01 -4.1987488310393972e-01 + -2.6002396816283851e-01 9.9495755576753608e-01 -4.9157815761313728e-01 + -1.9886919469217051e-01 1.0639411451494949e+00 -5.6285901938410587e-01 + -1.3736114822082940e-01 1.1118743490194842e+00 -6.3435215278878276e-01 + -7.3059715115193019e-02 1.1439921610607808e+00 -7.0361495464097046e-01 + -5.2383968979876558e-03 1.1638818317485466e+00 -7.6046745924527848e-01 + 6.3552642387419894e-02 1.1741396077977382e+00 -7.8845393314528689e-01 + 1.3401516132359165e-01 1.1758128382948998e+00 -7.7531741661411169e-01 + 2.2759041126377708e-01 1.1497032969144703e+00 -7.6273591051410539e-01 + id 14782 + loc 9.8380970954895020e-01 6.7732036113739014e-01 404 + blend 0.0000000000000000e+00 + interp 3.6503425502358111e-01:2.7435793784863882e-01:5.0288059574331689e-02:3.4356683226389306e-01:9.9397123956378108e-01:3.6503060468103088e-01:1.4130561095696246e+00:2.5248764944240437e-01:1.9856670228841733e+00:2.5630324067669930e-01:2.8757626959539433e+00:2.5010123293373288e-01:3.8561887400717150e+00 + CVs 20 + -2.4467908485339696e-02 7.6858611804060506e-02 -8.6666942171519240e-02 + -2.3644427214826944e-02 1.5028099376631643e-01 -1.2971179197511562e-01 + -5.3984873247671372e-03 2.1990400845934646e-01 -1.4126079818740683e-01 + 2.2970823437127114e-02 2.8211900558706754e-01 -1.3491046910566160e-01 + 5.6190990645864858e-02 3.3306061970442924e-01 -1.1058914996935926e-01 + 8.7104419968866351e-02 3.6991600262666641e-01 -6.8476263874032883e-02 + 1.0696424594520132e-01 3.9147271924705074e-01 -1.0079298110858378e-02 + 1.0736694347879977e-01 3.9893612927103739e-01 6.0726174432174568e-02 + 8.3075401430342477e-02 3.9543664792545902e-01 1.3729031709761741e-01 + 3.3517064715175682e-02 3.8509184725241685e-01 2.1175630903993081e-01 + -3.6606627393504246e-02 3.7814440557162743e-01 2.7985909013619964e-01 + -1.1324551242001153e-01 3.9125125255281973e-01 3.4433810138274090e-01 + -1.7727676349327093e-01 4.3497103842291879e-01 4.1121426346117551e-01 + -2.1751437606430288e-01 5.0349151715698359e-01 4.8038211106141904e-01 + -2.3445999860048658e-01 5.8206169497456717e-01 5.4581369058590645e-01 + -2.2792909346904722e-01 6.6456810919424425e-01 6.0568375016858178e-01 + -1.9706718299574164e-01 7.5211068307419882e-01 6.6012890250754985e-01 + -1.4772621394972013e-01 8.4744884820665534e-01 7.0551846075923930e-01 + -1.4270237142965364e-01 8.8664782382178253e-01 7.1481420886058622e-01 + id 14783 + loc 9.6926689147949219e-03 1.2814401648938656e-02 1079 + blend 0.0000000000000000e+00 + interp 4.4208729051182127e-01:3.7628386832995403e-01:4.4326193816496862e-01:2.8359472733828112e-01:1.1834698963788175e+00:2.9451334931888418e-01:2.2134291619134494e+00:4.4208286963891619e-01:3.0007130211183779e+00:2.6354134078371710e-01:3.4496154877980159e+00:3.5839512853365785e-01:3.9828517587032723e+00 + CVs 20 + 2.9777606849125565e-01 4.6063968932300320e-01 1.2071294612417718e-01 + 4.4316518934207338e-01 8.2409637769968236e-01 1.9844188812775271e-01 + 5.4235800374706600e-01 1.1659325310908417e+00 2.4870183415846672e-01 + 6.4507995763077552e-01 1.4986984736067264e+00 2.8525559833800751e-01 + 7.4236179093545251e-01 1.8126258150070911e+00 3.1101684703175042e-01 + 8.2983413290550456e-01 2.1025936911221397e+00 3.3360981327341660e-01 + 9.0753722086874478e-01 2.3940521871145859e+00 3.5357755189115775e-01 + 9.4715814249732755e-01 2.7440258011332119e+00 3.1768385785324316e-01 + 8.6259613661076306e-01 3.0849800804346037e+00 1.3814665187017416e-01 + 6.7070486653105243e-01 3.2504819232021047e+00 -1.1532328685237736e-01 + 4.5595347661404140e-01 3.2458662827146005e+00 -3.5253886614637342e-01 + 2.5029285011813762e-01 3.1236141054257494e+00 -5.5571326025380907e-01 + 6.8620947582870295e-02 2.9186907961851358e+00 -7.1628673215804439e-01 + -7.8260286360633202e-02 2.6587854612222257e+00 -8.2422996599989462e-01 + -1.7669176645385709e-01 2.3796955461642302e+00 -8.6732533121456845e-01 + -1.9772335790446294e-01 2.1373754763918651e+00 -8.4365517179058747e-01 + -1.2057177399427021e-01 1.9722394535262335e+00 -8.0583529733127524e-01 + 2.8457628292895887e-02 1.8463292202207144e+00 -7.5401965185332187e-01 + 1.4691130173320932e-01 1.7628593428320642e+00 -3.4940864499041674e-01 + id 14784 + loc 4.3085509538650513e-01 9.2755359411239624e-01 394 + blend 0.0000000000000000e+00 + interp 4.7470514368242595e-01:4.5792330778007589e-01:5.0709390098791385e-02:4.7470039663098912e-01:8.2173209533406522e-01:3.1550154645652567e-01:1.0868548181532298e+00:4.2480858851753844e-01:1.9323175953669534e+00:3.1318206769207591e-01:2.1879860409151108e+00:3.7178998601404162e-01:2.9241792742933526e+00:4.0543135747297276e-01:3.3882792393977734e+00 + CVs 20 + -2.5205975728528801e-01 2.5111953247401503e-01 -2.4416267417618945e-01 + -5.0992912410009827e-01 4.8976329846799116e-01 -4.7982961360982584e-01 + -7.8034125768976281e-01 7.2022460985849568e-01 -7.2098794873897420e-01 + -1.0653785273308087e+00 9.3584238859787350e-01 -9.7688460257870668e-01 + -1.3634635068658287e+00 1.1199996700570591e+00 -1.2502376308840488e+00 + -1.6716836981402337e+00 1.2511541122937215e+00 -1.5384472011845785e+00 + -1.9817225669613054e+00 1.3074315025027472e+00 -1.8332703570151141e+00 + -2.2797098641441442e+00 1.2752257237920133e+00 -2.1219176994518976e+00 + -2.5552424676990149e+00 1.1571774767072320e+00 -2.3897306463869255e+00 + -2.8089725898759168e+00 9.7077401578997780e-01 -2.6260986246340137e+00 + -3.0452325136268068e+00 7.3987292588003184e-01 -2.8295863827108731e+00 + -3.2650328736113710e+00 4.8789427492286874e-01 -3.0076208315849593e+00 + -3.4687347360018781e+00 2.3096783920071884e-01 -3.1664599690005573e+00 + -3.6600444368330161e+00 -2.3600735071353185e-02 -3.3033141172599918e+00 + -3.8533319697549890e+00 -2.6865522889609972e-01 -3.4286323390484794e+00 + -4.0748322671513160e+00 -4.9177158287528910e-01 -3.5957784118339799e+00 + -4.3363888763977005e+00 -6.4652530769394145e-01 -3.8765158103911732e+00 + -4.5949204898506775e+00 -6.5508589074587165e-01 -4.2232440444681352e+00 + -4.8021690434158772e+00 -6.4254434596221377e-01 -4.3973532176676722e+00 + id 14785 + loc 5.0008144229650497e-02 7.2524577379226685e-01 405 + blend 0.0000000000000000e+00 + interp 5.5448500505843590e-01:3.8263903768773361e-01:8.4678793299314381e-02:4.0471287822359231e-01:8.8489281988278112e-01:4.9928940919991782e-01:1.2457895658958302e+00:5.5447946020838534e-01:1.7621323243964175e+00:5.0516474635209574e-01:1.9998815333895266e+00:4.6587389707063370e-01:2.3410346909339466e+00:5.0654924553074732e-01:2.8966204876950834e+00:4.3204626261210233e-01:3.0892882020659549e+00:2.9750036235283939e-01:3.6985203030582485e+00 + CVs 20 + 2.1243701442567514e-01 2.7571555347319110e-01 7.2309151664042018e-02 + 2.7560072920483208e-01 4.8518028775001054e-01 1.4118326622540533e-01 + 3.0368485204530737e-01 6.4111731922612536e-01 2.2603346515581973e-01 + 3.2674620135233645e-01 7.7053966936235341e-01 3.4471591860519391e-01 + 3.4123895293833173e-01 8.6516733082836517e-01 4.9194858296568911e-01 + 3.4548092719834339e-01 9.1917346688006740e-01 6.5838112867048537e-01 + 3.3924931356148691e-01 9.3099760045656299e-01 8.3391012624541383e-01 + 3.2298905927037580e-01 9.0222615483583657e-01 1.0109384128027916e+00 + 2.9710229689679535e-01 8.3543293087874082e-01 1.1853122798228763e+00 + 2.6186753763286497e-01 7.3304190662147883e-01 1.3552529720690576e+00 + 2.1748447707747068e-01 5.9761893490069817e-01 1.5195235235714122e+00 + 1.6378658267237836e-01 4.3311363636776545e-01 1.6760963004160105e+00 + 9.9899668219209786e-02 2.4469434050863734e-01 1.8265694659779679e+00 + 2.5943212823010646e-02 3.3737585449159044e-02 1.9882840798573562e+00 + -5.2265706123396982e-02 -2.0212439069811827e-01 2.1933455063192393e+00 + -1.2249965586095110e-01 -4.5377257475790284e-01 2.4635676220051610e+00 + -1.7162518355021100e-01 -6.9900421455684092e-01 2.7977987450178654e+00 + -1.9062813163452508e-01 -9.1696234112865127e-01 3.1803503137521862e+00 + -2.3569743901595364e-01 -1.0701453131834111e+00 3.4632674572162849e+00 + id 14786 + loc 8.1821948289871216e-01 5.9389352798461914e-02 1079 + blend 0.0000000000000000e+00 + interp 4.5882951604215794e-01:2.6346137123921237e-01:8.0023893283504566e-02:3.4630588200226375e-01:9.9402185381151409e-01:4.4924279047597659e-01:1.3959712857332878e+00:4.2224249024485139e-01:1.9972755752196010e+00:4.5882492774699751e-01:2.5969912382869591e+00:2.6201414536549555e-01:3.0711622288275482e+00 + CVs 20 + 2.4451382081891487e-02 3.8422577929534596e-01 -3.8442653666567073e-02 + 1.5455977834056583e-02 7.1515350221075957e-01 -5.9360463080674053e-03 + -1.8504349761120475e-02 1.0034838306454947e+00 6.4013814255418522e-02 + -7.0081314960386221e-02 1.2425830046550810e+00 1.4897814212160504e-01 + -1.3058872135690280e-01 1.4196173003803507e+00 2.3624123107572031e-01 + -1.8221822368626267e-01 1.5330837295435522e+00 3.0617656870953253e-01 + -2.0641903453496746e-01 1.6019503575040897e+00 3.4444132450194009e-01 + -1.9869119548471864e-01 1.6575380441234693e+00 3.5610541640833182e-01 + -1.7389510475450132e-01 1.7203381471369390e+00 3.5743339660946416e-01 + -1.5994239882445982e-01 1.7880517238896352e+00 3.5569659204911064e-01 + -1.7719854017807657e-01 1.8514705782318290e+00 3.4319675716343434e-01 + -2.3293726778990176e-01 1.9165849612502752e+00 3.1169770035334110e-01 + -3.4225847777843221e-01 1.9963257693999155e+00 2.5840564258790233e-01 + -5.4311166477284467e-01 2.0855860707916221e+00 1.8253779097923961e-01 + -8.8918389886099081e-01 2.1449447632098702e+00 9.2294578590496390e-02 + -1.3546860877022251e+00 2.0445933828343872e+00 9.4017777610554409e-03 + -1.7385407733224976e+00 1.6322747347837558e+00 -7.1272477867379336e-02 + -1.8177543923818873e+00 9.5475901704271804e-01 -1.2634988794181326e-01 + -1.6077199029761651e+00 8.6884320252167047e-01 -7.4800630347057098e-02 + id 14787 + loc 5.3618609905242920e-01 6.9036149978637695e-01 404 + blend 0.0000000000000000e+00 + interp 4.0531333419534327e-01:4.0099708948152996e-01:6.9028441949717800e-03:2.8399327076088265e-01:9.3540144780405654e-01:4.0530928106200131e-01:1.3831666515370680e+00:3.7394880013970694e-01:2.0000048212456578e+00:2.9170896314640293e-01:2.6230323991551971e+00:2.4935445654709829e-01:3.5879297897649551e+00 + CVs 20 + -1.8411948622411557e-02 5.4807951063050628e-02 -1.0893489904732930e-02 + -1.2493265321187629e-02 1.0634402498309894e-01 -3.4112616050625919e-02 + 7.6791920223809318e-03 1.5198124077502184e-01 -6.9381381319975510e-02 + 3.2627798232205768e-02 1.8316130504212455e-01 -1.1592472999808059e-01 + 5.8514765454415682e-02 1.9983640916780043e-01 -1.7394955482289587e-01 + 8.1292729444914627e-02 2.0351381666791055e-01 -2.4329943875163201e-01 + 9.7919923324106303e-02 1.9783947801734278e-01 -3.2356477125267552e-01 + 1.1042975158881185e-01 1.9226893158818037e-01 -4.1569636536755128e-01 + 1.2471158071423265e-01 1.9787036793380897e-01 -5.2063548598293374e-01 + 1.3707911584305349e-01 2.1323848533900858e-01 -6.3355747218619574e-01 + 1.2464200064376263e-01 2.2294062952825644e-01 -7.4499395598964113e-01 + 6.1007030811994545e-02 2.1692670681525184e-01 -8.4477062199529296e-01 + -5.1046923009203965e-02 2.0050405580875963e-01 -9.2201426215225135e-01 + -1.8208241546304704e-01 1.8758010353799540e-01 -9.7470583497667396e-01 + -3.1854601951001399e-01 1.8361630966866896e-01 -1.0024031785121941e+00 + -4.7434423419071503e-01 1.9016295618430817e-01 -9.9247887312070193e-01 + -6.6242024616091133e-01 2.1440749562022826e-01 -9.2409648902587260e-01 + -8.6541137842798244e-01 2.6929353490519553e-01 -7.8908020808175183e-01 + -8.9851085147396526e-01 2.1869058808255384e-01 -7.2208550313979825e-01 + id 14788 + loc 7.2820585966110229e-01 3.7124863266944885e-01 394 + blend 0.0000000000000000e+00 + interp 4.6891223849926694e-01:3.0953800334037218e-01:5.2145670050956217e-01:4.6890754937688195e-01:1.0047653428099252e+00:2.8726473147318571e-01:1.7482492309122546e+00:3.2661699391195292e-01:2.7466802573715112e+00:4.5905552933344557e-01:3.1177972712960074e+00:3.3497571093629547e-01:3.9926122446138868e+00 + CVs 20 + 3.8894541120088610e-01 2.5090047181043085e-01 1.7938448028223114e-01 + 7.3799706424873990e-01 4.6453544829410498e-01 3.3242477817571203e-01 + 1.0808889110596600e+00 6.5126103252202605e-01 4.7511372991154721e-01 + 1.4316061117876053e+00 8.1614925748255129e-01 6.2355372225302386e-01 + 1.7835119487848337e+00 9.5224235902884824e-01 7.8811735092663082e-01 + 2.1290253037174982e+00 1.0503561634837155e+00 9.7286057543850113e-01 + 2.4635792941371770e+00 1.1031416475096938e+00 1.1768170120835117e+00 + 2.7810337317909299e+00 1.1048052343709727e+00 1.3946579612783725e+00 + 3.0681951911271970e+00 1.0504806194233098e+00 1.6141176261607799e+00 + 3.3104387636581931e+00 9.4089690383979852e-01 1.8186272323163939e+00 + 3.5054288798536501e+00 7.8390601592417419e-01 1.9984520454585946e+00 + 3.6658768702323625e+00 5.8616083187924106e-01 2.1560784153025114e+00 + 3.8022859359216725e+00 3.5117655793257274e-01 2.2943631785002987e+00 + 3.9111040317728181e+00 8.6950039651785049e-02 2.4062743890572191e+00 + 3.9817872520986590e+00 -1.8918555460384656e-01 2.4803793730650012e+00 + 4.0007067925507300e+00 -4.4511704403477625e-01 2.5027928717760584e+00 + 3.9601392770332704e+00 -6.3783179892950059e-01 2.4660481598515109e+00 + 3.8922287507245086e+00 -7.8860388872815368e-01 2.3927513533467462e+00 + 3.9931518452112869e+00 -1.2532618122049817e+00 2.3307220019754133e+00 + id 14789 + loc 8.7093925476074219e-01 4.6508923172950745e-01 405 + blend 0.0000000000000000e+00 + interp 4.0209240882715164e-01:2.6491664818287719e-01:1.3999889519807796e-02:3.0722806344637860e-01:7.1943397053167102e-01:3.8059676516889129e-01:1.0577734715616143e+00:3.5846879384951857e-01:1.8463050265375487e+00:4.0208838790306339e-01:2.2206249610804090e+00:3.6885857531664407e-01:2.9698152379182892e+00:3.6680023543359896e-01:3.5002409350383275e+00 + CVs 20 + 3.9762957204964131e-02 2.4877673040231926e-01 8.4429351617169839e-03 + 1.5150247004739167e-01 4.0080034431196382e-01 -1.8874554415238918e-03 + 2.7429101798584399e-01 5.2958287029633988e-01 -1.9111022423705978e-02 + 3.8741806290477876e-01 6.3374304239796031e-01 -4.9890205572259379e-02 + 4.8785059022950317e-01 7.0409486658626630e-01 -1.0025297986003005e-01 + 5.6815717644294139e-01 7.2981689759153623e-01 -1.7290019921654992e-01 + 6.1374904574941203e-01 6.9737990836583785e-01 -2.6320402202585724e-01 + 6.0381640039464979e-01 5.9716513243111691e-01 -3.5057458906628064e-01 + 5.2416971750513996e-01 4.3903778617693989e-01 -3.9406902515877662e-01 + 3.9452908452988472e-01 2.6633444626318081e-01 -3.5783439894655356e-01 + 2.6197398241124131e-01 1.2493755075942935e-01 -2.5327491097920557e-01 + 1.5485415017425649e-01 2.5304693892832089e-02 -1.1816003997366820e-01 + 7.4533488110500340e-02 -4.2404885741985247e-02 2.4031255074600237e-02 + 1.4184912165692780e-02 -8.9907540571440930e-02 1.5902155478502497e-01 + -3.2544752708181766e-02 -1.3701615124298577e-01 2.6466081175082451e-01 + -7.1314041818700755e-02 -2.1089139503600859e-01 3.2213631809549664e-01 + -1.0594726545056893e-01 -3.2224892149804574e-01 3.3338225547960404e-01 + -1.3647919583052376e-01 -4.6057685860706543e-01 3.1260492641065579e-01 + -1.7728883658491718e-01 -5.4781536495733008e-01 3.4651857331342473e-01 + id 14790 + loc 7.8348517417907715e-01 2.3283396661281586e-01 1079 + blend 0.0000000000000000e+00 + interp 4.1179041075180939e-01:3.2198034908732120e-01:4.3719007669178966e-01:2.4154199809815699e-01:1.6296061641703645e+00:4.1178629284770191e-01:2.1978048184353511e+00:3.1259016343767182e-01:2.7486619581853118e+00:2.4739266014304509e-01:3.1588770938008137e+00:3.1565258594815487e-01:3.9891202133278001e+00 + CVs 20 + -1.8238992637824997e-02 4.0284357108454338e-01 -9.1037931476911499e-02 + -6.2025736030256795e-02 7.8665202082089225e-01 -1.1481562112187887e-01 + -1.3693693256526218e-01 1.1572422506280926e+00 -1.0129249760258807e-01 + -2.5058719469873103e-01 1.5109095448279235e+00 -5.4990212009899397e-02 + -4.1022518600606717e-01 1.8293059278369865e+00 3.4549633599765484e-02 + -6.1917109935753833e-01 2.0858909954777989e+00 1.7228647801972474e-01 + -8.7241969069420289e-01 2.2516950447737614e+00 3.5008402332681188e-01 + -1.1562757586174590e+00 2.3102804209798511e+00 5.4551987880168451e-01 + -1.4548622917545615e+00 2.2644759443483369e+00 7.3684854468138861e-01 + -1.7556022002653737e+00 2.1281327105763488e+00 9.1977237884054919e-01 + -2.0466789879541190e+00 1.9114997920572554e+00 1.1044397096645728e+00 + -2.3082314998436138e+00 1.6162033118032941e+00 1.3010812219083652e+00 + -2.5061749789614414e+00 1.2391622210800308e+00 1.5192968411086296e+00 + -2.5836504266028468e+00 7.8079852585481546e-01 1.7730208629606485e+00 + -2.4486071809103636e+00 2.7190510449349947e-01 2.0687660568202757e+00 + -2.0444615784887041e+00 -1.6299534311188024e-01 2.4011071931442993e+00 + -1.4576694450363112e+00 -3.4531842856995176e-01 2.7987521312522832e+00 + -8.8811163519379743e-01 -1.9826214374668472e-01 3.2548042181303267e+00 + -6.1365658004995560e-01 -2.8183765982240772e-01 3.5690134289617319e+00 + id 14791 + loc 2.0881979167461395e-01 4.4847330451011658e-01 405 + blend 0.0000000000000000e+00 + interp 4.1495095292902046e-01:3.8030218394229098e-01:1.5403811115290988e-02:3.4806653180322317e-01:6.6107102595015887e-01:4.1494680341949119e-01:1.0105291939284331e+00:2.7650864656618646e-01:1.6001239259393798e+00:3.9002531172769955e-01:2.0403178991235245e+00:2.7829166202394373e-01:2.7461750010025199e+00:4.1208848078159244e-01:3.0818016296729844e+00 + CVs 20 + 1.7151854004301476e-01 2.1329962229345512e-01 -9.9598146366447343e-02 + 3.3216832650465267e-01 3.9851484216541277e-01 -9.3512885144144187e-02 + 4.9840963867878263e-01 5.2219555804094264e-01 -1.0046814569668577e-01 + 6.8087471091912533e-01 6.1084348814659395e-01 -1.1600173199625111e-01 + 8.7365277944308284e-01 6.6314394303777369e-01 -1.3929958448695129e-01 + 1.0694711531037535e+00 6.8238962550394433e-01 -1.7162017510844671e-01 + 1.2624291814944864e+00 6.7667883663811490e-01 -2.1332156194635044e-01 + 1.4490999119044052e+00 6.5531359971203118e-01 -2.6336243494118261e-01 + 1.6283322920346983e+00 6.2600421596959710e-01 -3.1902447437052939e-01 + 1.8011893079179002e+00 5.9409275757346358e-01 -3.7587819276955736e-01 + 1.9695112527795828e+00 5.6142420328096176e-01 -4.2872258249915918e-01 + 2.1361786205586326e+00 5.2589779230922251e-01 -4.7122020235984763e-01 + 2.3034452105943597e+00 4.8563934690791444e-01 -4.9936556350542077e-01 + 2.4697094830302380e+00 4.4937867138983800e-01 -5.1661849587800845e-01 + 2.6311634405832702e+00 4.3673411079827013e-01 -5.3219831288935482e-01 + 2.7829865317787883e+00 4.6092187998418988e-01 -5.5224951665583322e-01 + 2.9212831686757630e+00 5.1776386856815759e-01 -5.7524839472477751e-01 + 3.0473419609853503e+00 5.9516553930457072e-01 -5.9787417352480021e-01 + 3.2594769808642496e+00 6.3142131278647406e-01 -5.8981786866406771e-01 + id 14792 + loc 8.6182564496994019e-01 7.6091814041137695e-01 404 + blend 0.0000000000000000e+00 + interp 3.6503425502358111e-01:2.6866089825981060e-01:4.4364110360055165e-02:3.3448374069163755e-01:9.8870438079135681e-01:2.5284516752429431e-01:1.9977341933769095e+00:2.4991351076120574e-01:2.9921607805539203e+00:3.6503060468103088e-01:3.3892843636751522e+00 + CVs 20 + -7.3704091350224071e-02 5.0105494518831721e-02 1.2997535487054127e-02 + -1.6233559198085343e-01 8.5835675787679921e-02 3.9075696668820284e-02 + -2.6734497760271303e-01 1.4108869512195638e-01 7.3937612170402581e-02 + -3.8693328530264559e-01 2.2315813812136973e-01 9.7584172257310073e-02 + -5.1220178234774949e-01 3.4494399336244630e-01 1.0556176628299457e-01 + -6.2771379873663014e-01 5.1525322493583026e-01 9.4087438444863836e-02 + -7.1425179100556546e-01 7.3177516047669311e-01 6.2187208530513668e-02 + -7.5905232476631523e-01 9.7656182432585625e-01 1.3885877608048026e-02 + -7.6044889546675543e-01 1.2320938844199785e+00 -4.2716089701478374e-02 + -7.1450610065986975e-01 1.4965100090606049e+00 -9.6269491576726818e-02 + -6.1209420242648505e-01 1.7700414957746844e+00 -1.3810358063864858e-01 + -4.5556567640697421e-01 2.0389505495584981e+00 -1.7258377617349036e-01 + -2.6614936634540931e-01 2.2848295004052543e+00 -2.1268530447099948e-01 + -6.4604526778048177e-02 2.5013172016932028e+00 -2.6476254015159917e-01 + 1.4859498400664228e-01 2.6924775178316773e+00 -3.2797937912986053e-01 + 3.8528843350981679e-01 2.8602258872931787e+00 -4.0213360556344574e-01 + 6.5563547449474924e-01 2.9995622999627205e+00 -4.8848747435665757e-01 + 9.6558812327556431e-01 3.1005320067208415e+00 -5.8359213349267769e-01 + 1.1760814446525261e+00 3.1802106728506274e+00 -6.2729945795567765e-01 + id 14793 + loc 5.6116789579391479e-01 9.9514931440353394e-01 1079 + blend 0.0000000000000000e+00 + interp 3.7513383994381871e-01:3.0515372341701896e-01:3.4874945764057974e-01:3.7513008860541930e-01:9.9388116955979589e-01:3.6473254587590159e-01:1.2896699801539762e+00:2.0255043837271614e-01:1.9999246835861790e+00:2.9853685482675496e-01:2.8933581783072508e+00:2.8163354669772495e-01:3.7715271497995291e+00 + CVs 20 + 2.8789535758517087e-01 3.9036210975071362e-01 -9.1778179992637016e-02 + 5.7785801108763124e-01 7.2378967257341298e-01 -2.2605160722639447e-01 + 8.6951414458001675e-01 1.0045798935481867e+00 -3.8610423991841258e-01 + 1.1564268100872395e+00 1.2214737261145330e+00 -5.6556251189991957e-01 + 1.4256290556407805e+00 1.3569782834478559e+00 -7.6058805350348324e-01 + 1.6552970684017887e+00 1.3905284789833516e+00 -9.6224746953024110e-01 + 1.8283233535003889e+00 1.3245987329816733e+00 -1.1500946329798347e+00 + 1.9440416588058380e+00 1.1883786410559540e+00 -1.3024265050298860e+00 + 2.0112407355007855e+00 1.0132473294500923e+00 -1.4043873851271962e+00 + 2.0426993930360506e+00 8.2559964251149176e-01 -1.4486308244349415e+00 + 2.0540331308476021e+00 6.4778770727067325e-01 -1.4386705470872054e+00 + 2.0606933306115391e+00 4.9467209663820388e-01 -1.3881352676727490e+00 + 2.0734648723286635e+00 3.7133802100989954e-01 -1.3130783953953340e+00 + 2.0957994437422349e+00 2.7965199939901753e-01 -1.2208829211819656e+00 + 2.1189002896006013e+00 2.4091044818540797e-01 -1.0946358252209190e+00 + 2.1151460959816237e+00 3.6064870749171707e-01 -8.8726173839115496e-01 + 2.0678187222080422e+00 8.5066654549545950e-01 -6.6838452077236576e-01 + 2.0496254081853054e+00 1.4857690066374454e+00 -7.2094444540307878e-01 + 2.0720430274877959e+00 1.3368218570423676e+00 -5.9899226108622705e-01 + id 14794 + loc 3.1350353360176086e-01 2.4175388738512993e-02 394 + blend 0.0000000000000000e+00 + interp 4.9259912268081651e-01:2.8472489286902425e-01:1.6351935018037445e-03:4.9143850029773772e-01:3.7832982399916082e-01:3.7732775565950000e-01:1.1934087665406901e+00:3.7681822964729333e-01:1.8966766619516311e+00:4.4492749647912422e-01:2.0791488103357523e+00:4.9259419668958970e-01:2.6167740312496131e+00:3.1068990481809394e-01:3.0351097359079291e+00 + CVs 20 + -8.7754670560700548e-02 3.3107341578279753e-01 2.4633125194911704e-01 + -1.4516980110316008e-01 6.7444514326262939e-01 5.0708946629769036e-01 + -1.8256160166812521e-01 1.0254144799090168e+00 7.7407938516752561e-01 + -2.1791411348409262e-01 1.3890709685947604e+00 1.0431432622720109e+00 + -2.7845105551018762e-01 1.7698867236570464e+00 1.3195959264204213e+00 + -3.9628138166121896e-01 2.1595025078666019e+00 1.6185090374907698e+00 + -5.9661453637814688e-01 2.5320995300287614e+00 1.9472607700476074e+00 + -8.8917964984955000e-01 2.8552342376686575e+00 2.2965867897208665e+00 + -1.2686807003390812e+00 3.0998254061007695e+00 2.6511331737432222e+00 + -1.7161655833019946e+00 3.2366803774477848e+00 3.0036865632761871e+00 + -2.2043249225108790e+00 3.2342953107565866e+00 3.3537078095720196e+00 + -2.6959083332765204e+00 3.0634067156808769e+00 3.6912902892086783e+00 + -3.1277956382541170e+00 2.7358152336115493e+00 3.9819127565677768e+00 + -3.4439566815598823e+00 2.3559155018182718e+00 4.1908075120864261e+00 + -3.6548406115705410e+00 2.0329626893870638e+00 4.3237995355825438e+00 + -3.7969209122608136e+00 1.7842533021673184e+00 4.4124251204486811e+00 + -3.8964402656015720e+00 1.5747352231461713e+00 4.4924718876974783e+00 + -3.9793298972547566e+00 1.3648781582207068e+00 4.5934546269059000e+00 + -4.0811340579593365e+00 1.1043231687644304e+00 4.7212252239755053e+00 + id 14795 + loc 5.3220200538635254e-01 5.6874465942382813e-01 404 + blend 0.0000000000000000e+00 + interp 4.0672517729283481e-01:2.7241040129234395e-01:9.5027768009492219e-01:4.0672111004106187e-01:1.6654876665412122e+00:4.0099708948152996e-01:2.0103511371441263e+00:2.8428213980785655e-01:2.4813736468919521e+00:3.0099902883149715e-01:3.0798488246261124e+00:2.8612310392942980e-01:3.9986040794527682e+00 + CVs 20 + -4.4331826336269649e-02 3.6808252471639227e-02 -3.0791451062854826e-02 + -5.5805823520839300e-02 9.7573850911552074e-02 -5.7127406532981359e-02 + -6.4955953966921345e-02 1.7537163833637195e-01 -7.5258124752335898e-02 + -7.6774853175460830e-02 2.5443156192114569e-01 -7.9039367316649456e-02 + -8.8762855660402068e-02 3.3292321573180134e-01 -6.6393778188389568e-02 + -9.9695876848890030e-02 4.0862907963342532e-01 -3.6138276371478449e-02 + -1.0950666307977025e-01 4.7864470437990730e-01 1.2567547708637300e-02 + -1.1898607745289050e-01 5.3803400089899234e-01 8.1711388632827467e-02 + -1.2866184336523373e-01 5.7885042604620895e-01 1.7229559905905623e-01 + -1.3753480601050919e-01 5.9692774229164292e-01 2.8063629347641667e-01 + -1.4237051250074709e-01 5.9511723482771495e-01 4.0306086917483358e-01 + -1.3961371969087352e-01 5.7860192372075248e-01 5.3875297326000915e-01 + -1.2890440701198416e-01 5.5033886659438269e-01 6.8776338580634611e-01 + -1.1415561908641769e-01 5.0628591140117873e-01 8.4839841912704950e-01 + -9.6831937797118614e-02 4.4474221034306072e-01 1.0196916731128576e+00 + -7.0479018731348472e-02 3.6964059576722391e-01 1.2028374601659797e+00 + -2.7277963589844606e-02 2.8374973798799463e-01 1.3975141559737301e+00 + 3.0509562508858251e-02 1.8427815757670457e-01 1.5987389803756256e+00 + 1.7109960033104998e-02 9.0825058174397455e-02 1.8115127697471032e+00 + id 14796 + loc 7.8183934092521667e-02 3.4680840373039246e-01 405 + blend 0.0000000000000000e+00 + interp 4.7869714032246580e-01:3.8067422390757411e-01:1.3936147094550599e-02:3.5033836154511511e-01:5.8929298536506436e-01:3.0308349954634639e-01:1.0187711066043648e+00:3.3111454774379190e-01:1.6524317951641252e+00:4.7869235335106258e-01:2.1482575186283479e+00:4.4707739908631872e-01:3.0070667176676205e+00:2.8212527917981250e-01:3.5333652312769344e+00 + CVs 20 + 1.1690898727211263e-01 1.6154033276635452e-01 -1.9760857639429705e-01 + 2.3258210322394648e-01 3.0596464207543977e-01 -3.2362902385041975e-01 + 3.5305832076993032e-01 3.8503559033467594e-01 -4.3754004096933174e-01 + 4.8970958647540602e-01 4.3758364010905876e-01 -5.5894750768639700e-01 + 6.4082070553353876e-01 4.5905008685482368e-01 -6.8133732643430045e-01 + 8.0375315403178360e-01 4.4297304787470965e-01 -7.9695068726165519e-01 + 9.7461218988850629e-01 3.8486071798818322e-01 -8.9764047280828796e-01 + 1.1471195643972962e+00 2.8364084151437169e-01 -9.7757703150746600e-01 + 1.3131288412380246e+00 1.4355628244237623e-01 -1.0361931127651340e+00 + 1.4660269540646853e+00 -2.4419381853426736e-02 -1.0803404171932027e+00 + 1.6043063524568197e+00 -2.0583546578867151e-01 -1.1226668213180258e+00 + 1.7308848914735913e+00 -3.8799068205940945e-01 -1.1762431643335418e+00 + 1.8484464788495105e+00 -5.6128739674184747e-01 -1.2504646977681917e+00 + 1.9565681206993841e+00 -7.1906729496767685e-01 -1.3478636638933408e+00 + 2.0529436322763757e+00 -8.5643099614729312e-01 -1.4619909108866032e+00 + 2.1352358497801034e+00 -9.6804299198179855e-01 -1.5824078803810702e+00 + 2.1994907161085342e+00 -1.0471411386743767e+00 -1.7032484970910944e+00 + 2.2426740042006856e+00 -1.0870434044586395e+00 -1.8220300575757524e+00 + 2.3546132644902951e+00 -1.0678546534289923e+00 -1.8967575016319276e+00 + id 14797 + loc 7.6609176397323608e-01 3.5180726647377014e-01 1079 + blend 0.0000000000000000e+00 + interp 5.2470039271535174e-01:5.2469514571142462e-01:5.6937993348750726e-01:2.5621723440129485e-01:1.0845146646543347e+00:3.1565258594815487e-01:1.9908925598083664e+00:2.8975431661181644e-01:2.4569981488397659e+00:2.6881958264449213e-01:3.0160411048161357e+00:2.7724608696407921e-01:3.9536949410080435e+00 + CVs 20 + -8.0296274464127307e-02 3.5847414156515889e-01 -6.5235939549077443e-02 + -1.6532714454800509e-01 7.0268767415368560e-01 -6.0105606062568179e-02 + -2.6758957128772781e-01 1.0347608785363485e+00 -1.1440641174947197e-02 + -3.9442670534845986e-01 1.3428086164568871e+00 7.2063800302597514e-02 + -5.4695403886169924e-01 1.6037213407329474e+00 1.9608737348846605e-01 + -7.1937387417291054e-01 1.7910710881491829e+00 3.5859438322445902e-01 + -8.9973903287142731e-01 1.8862528472403119e+00 5.4784346668627903e-01 + -1.0758473399211157e+00 1.8877004733221396e+00 7.4670721560335906e-01 + -1.2374482172448502e+00 1.8060012432770065e+00 9.4026388449838916e-01 + -1.3737055674707657e+00 1.6574009027012173e+00 1.1210451465489404e+00 + -1.4705449560709027e+00 1.4609326306619681e+00 1.2866544670004467e+00 + -1.5098254961781719e+00 1.2397193117221907e+00 1.4318315968797330e+00 + -1.4728792788418614e+00 1.0261875368968316e+00 1.5465714088635254e+00 + -1.3491322339654654e+00 8.6791655135847823e-01 1.6177887634995669e+00 + -1.1531661570227498e+00 8.3484052153654731e-01 1.6230265366728662e+00 + -9.6456058829215985e-01 9.7101275489185834e-01 1.5523440931591861e+00 + -8.6544571087440936e-01 1.2001700158976973e+00 1.4466087867472395e+00 + -8.4007586806781498e-01 1.4224401641404472e+00 1.3419231235523283e+00 + -5.5847099705830050e-01 1.4773068290283862e+00 1.4179731637459732e+00 + id 14798 + loc 4.1371202468872070e-01 4.6068355441093445e-01 394 + blend 0.0000000000000000e+00 + interp 4.1892416914386066e-01:4.1891997990216923e-01:6.6128167365841928e-02:3.5065444304245674e-01:1.0005750983765169e+00:3.1781948195208565e-01:1.6545724650211939e+00:2.6052383043183286e-01:2.5497943382321537e+00:3.7183861704152071e-01:3.2278603231879686e+00:3.2857021337510156e-01:3.8679029090233890e+00 + CVs 20 + -2.2100145346518951e-01 1.6938690523617894e-01 2.4659089391632122e-01 + -4.3003986878827982e-01 3.3580267618505932e-01 4.6671688160692332e-01 + -6.3578023617296975e-01 5.1835385824050439e-01 6.8436742123571392e-01 + -8.3769789365241376e-01 7.2660939044797068e-01 9.0743362501618074e-01 + -1.0329446314409316e+00 9.5595935270399268e-01 1.1300099032188364e+00 + -1.2237884782995860e+00 1.1933784151111231e+00 1.3506105789812592e+00 + -1.4207489671630693e+00 1.4218964509110705e+00 1.5780270418337070e+00 + -1.6313577323280282e+00 1.6257244501014332e+00 1.8241730538847709e+00 + -1.8484499808506343e+00 1.7907795792381664e+00 2.0949931216802313e+00 + -2.0609873761414033e+00 1.8996273287699335e+00 2.3880698760083741e+00 + -2.2664778044123173e+00 1.9292142577267706e+00 2.6945767860010261e+00 + -2.4592202453010543e+00 1.8578991542597914e+00 3.0009894561971953e+00 + -2.6201254220707515e+00 1.6763809211015595e+00 3.2930046157602852e+00 + -2.7340010166686617e+00 1.3908306949166422e+00 3.5652786383015602e+00 + -2.7945879871687289e+00 1.0294981006412494e+00 3.8257560752046746e+00 + -2.7900214918509185e+00 6.6672538273735871e-01 4.1021362954829499e+00 + -2.7120022842752354e+00 4.0313133931680145e-01 4.4279693312403205e+00 + -2.5908657513817892e+00 2.3237689300453734e-01 4.7996621487665889e+00 + -2.5620312336963567e+00 -1.3238472331690376e-01 5.2345460555786865e+00 + id 14799 + loc 2.0520624518394470e-01 7.8510373830795288e-01 404 + blend 0.0000000000000000e+00 + interp 3.2411542953593148e-01:2.6705231737116175e-01:2.2947040737750446e-02:3.1129920599618577e-01:8.0293109918955086e-01:3.2411218838163613e-01:1.7111349098426725e+00:2.9346919169745544e-01:2.7381350774191349e+00:2.6522755343430837e-01:3.3473239261420136e+00 + CVs 20 + -3.9222330247062752e-02 -1.3514604853527509e-02 3.4493391704494905e-02 + -7.3302909251055204e-02 -2.2021986013680134e-02 7.8326317116663477e-02 + -9.9396571610094214e-02 -2.6217624424048874e-02 1.3213993862524170e-01 + -1.1718768521745500e-01 -2.3595030330459343e-02 1.9493939030098412e-01 + -1.2426700003947756e-01 -1.1751857579580957e-02 2.6537028635163235e-01 + -1.1831649082519591e-01 1.1039131681455469e-02 3.4034216624412211e-01 + -9.7660132059741375e-02 4.5739276047359556e-02 4.1563959964792502e-01 + -6.1831145350616179e-02 9.1809810629894628e-02 4.8580628326803160e-01 + -1.2028041394849108e-02 1.4660107098528813e-01 5.4500986703843501e-01 + 4.9102345675698864e-02 2.0581473331541211e-01 5.8871516898507292e-01 + 1.1835593270018299e-01 2.6493028544796932e-01 6.1479432300273684e-01 + 1.9210093138692302e-01 3.1891375087079255e-01 6.2303072686002081e-01 + 2.6618444326719326e-01 3.6185887832176716e-01 6.1506291485939524e-01 + 3.3615874037874943e-01 3.8828695750450759e-01 5.9450706611279225e-01 + 3.9824074786037944e-01 3.9499488238672664e-01 5.6610133999419388e-01 + 4.5143835035560997e-01 3.8225821985874203e-01 5.3365621844459921e-01 + 4.9894785579622858e-01 3.5335435130729420e-01 4.9816149412704630e-01 + 5.4412103741476125e-01 3.1327712366577698e-01 4.5964431405722717e-01 + 5.6895543570804130e-01 2.5531271798603977e-01 4.1753163508503044e-01 + id 14800 + loc 7.6672548055648804e-01 8.4815835952758789e-01 405 + blend 0.0000000000000000e+00 + interp 4.6640684566995033e-01:3.1865705496598912e-01:4.8531501225117957e-02:3.8830891811002366e-01:7.0834379299261552e-01:3.6416737814995126e-01:1.4069379728382090e+00:2.6973053944625897e-01:1.9979894253781716e+00:4.6640218160149366e-01:2.5429949992066323e+00:3.7583412773411096e-01:2.9999077918236301e+00:3.3795485915081297e-01:3.6082032514990026e+00 + CVs 20 + 2.2343845624695508e-01 3.2602477059113200e-01 -7.2559924748791832e-02 + 3.0449732001829699e-01 5.4609606472379335e-01 -1.3338675568441974e-01 + 3.4911622393158859e-01 7.1942452685048330e-01 -1.8181403021657258e-01 + 4.0258715856498872e-01 8.8671451915818178e-01 -2.1695029519312464e-01 + 4.6284261547455852e-01 1.0446519537597383e+00 -2.2967901337051089e-01 + 5.2955085776560673e-01 1.1866469393453207e+00 -2.0625313210101226e-01 + 6.0285141425764077e-01 1.2948176829614837e+00 -1.2875445201320332e-01 + 6.7631970971731636e-01 1.3343247618683918e+00 3.6614604655938743e-03 + 7.3768656259067145e-01 1.2962109407954556e+00 1.4827415633281127e-01 + 7.9003688144424056e-01 1.2199030421479922e+00 2.7776815491735979e-01 + 8.4288160189247840e-01 1.1259621291027999e+00 4.0455221370191968e-01 + 8.9843404575805597e-01 1.0104514096775010e+00 5.4025864823660563e-01 + 9.5741088052526313e-01 8.7057543063941978e-01 6.8769841004690702e-01 + 1.0289270441509812e+00 7.1799011208709895e-01 8.5077003732633238e-01 + 1.1308472260993634e+00 5.7476812716768722e-01 1.0369956716554929e+00 + 1.2764805853522860e+00 4.5883962423086866e-01 1.2444781355060923e+00 + 1.4661627618177793e+00 3.7627871270374014e-01 1.4600745989058017e+00 + 1.6878431197332588e+00 3.2686605499778021e-01 1.6762637592174512e+00 + 1.8541706788601027e+00 2.0766757192916446e-01 1.9014245896210764e+00 + id 14801 + loc 5.5840700864791870e-01 6.5149359405040741e-02 1079 + blend 0.0000000000000000e+00 + interp 3.7611298265713766e-01:2.8016819682161670e-01:5.9876448284318107e-01:2.5749240006953145e-01:1.0993111336655419e+00:1.9242977590604010e-01:1.9937846871104905e+00:2.6881364311533701e-01:2.9950592716136279e+00:3.7610922152731113e-01:3.8795757649493199e+00 + CVs 20 + 1.2136309042713662e-01 5.0490690825138973e-01 -2.7663103239748810e-01 + 2.0117958656016918e-01 9.9304075962642291e-01 -4.3822635704509805e-01 + 2.4990983706137176e-01 1.4704129577130951e+00 -5.4265758832255429e-01 + 2.5376024299183764e-01 1.9610703532583695e+00 -5.9169787062904367e-01 + 1.8584152457006509e-01 2.4579340027871437e+00 -5.5783830181445671e-01 + 9.7916815938069446e-03 2.9344500707235399e+00 -4.0413424952559518e-01 + -3.0408913608151777e-01 3.3199019328706338e+00 -1.0637799592078023e-01 + -7.3866655677828652e-01 3.5167394133638235e+00 3.0077950983267043e-01 + -1.2181959016573287e+00 3.4832613492072300e+00 7.3168160077181732e-01 + -1.6573065198009735e+00 3.2695810824805687e+00 1.1256766519622325e+00 + -2.0158642888548521e+00 2.9438708533831188e+00 1.4817270398478315e+00 + -2.2834567269859973e+00 2.5331180149478394e+00 1.8186546462692910e+00 + -2.4379107129001851e+00 2.0421060001426037e+00 2.1496368972170927e+00 + -2.4279952006017904e+00 1.4851537680392843e+00 2.4818802076605864e+00 + -2.1753771599973262e+00 9.1012488065950481e-01 2.8076679090182886e+00 + -1.6706856962389165e+00 4.8080839553272603e-01 3.0998200974322820e+00 + -1.0986388451882221e+00 3.9892664421121871e-01 3.3663472964916332e+00 + -7.0857164245999760e-01 6.5950036306051474e-01 3.6135348489688255e+00 + -5.1616069698443878e-01 5.9708534332606233e-01 3.8025258933051909e+00 + id 14802 + loc 7.6752883195877075e-01 7.9756683111190796e-01 394 + blend 0.0000000000000000e+00 + interp 4.1828916178261882e-01:3.6208189187194634e-01:6.8006056489820044e-01:3.0459138413988518e-01:1.1985087539402408e+00:3.3520636356061406e-01:2.3047099963926447e+00:3.7567709367769536e-01:2.9168157818666245e+00:4.1828497889100102e-01:3.1126068007186349e+00:2.5124053249032757e-01:3.8377156330683500e+00 + CVs 20 + -1.8364588925507691e-01 1.9187956181147475e-01 -2.9848521527999661e-01 + -3.6857849225378103e-01 3.7282289952415093e-01 -5.9706971199927672e-01 + -5.4557611991091781e-01 5.4903080720344066e-01 -9.0481434602808242e-01 + -7.1038647758037299e-01 7.2326382825303037e-01 -1.2263484592125284e+00 + -8.6327720999856128e-01 8.9667017183471742e-01 -1.5618887119663158e+00 + -1.0099449791355719e+00 1.0723827508869750e+00 -1.9104555778796208e+00 + -1.1557283802064555e+00 1.2469792714756687e+00 -2.2703986108558163e+00 + -1.3016699543584074e+00 1.4027013107508250e+00 -2.6442149186309205e+00 + -1.4512408371567154e+00 1.5146416054489398e+00 -3.0384031005347167e+00 + -1.6182500195239464e+00 1.5654768411623032e+00 -3.4526084563303066e+00 + -1.8169252692300053e+00 1.5491055037830908e+00 -3.8749081392301594e+00 + -2.0480495949045769e+00 1.4693392461056636e+00 -4.2895850322735161e+00 + -2.3110354357732117e+00 1.3366226622919943e+00 -4.6859144689334817e+00 + -2.6206631868005315e+00 1.1567619964846276e+00 -5.0517400886058539e+00 + -2.9947789078572100e+00 9.2949509750833359e-01 -5.3624893262351438e+00 + -3.4255125508804003e+00 6.4325304889083945e-01 -5.5884808738920206e+00 + -3.8776675424705118e+00 2.7293869544033589e-01 -5.7075876408275992e+00 + -4.3151476880858537e+00 -1.6082443735468122e-01 -5.7136295474218235e+00 + -4.7147625069325994e+00 -3.9775566090332770e-01 -5.7865027079671778e+00 + id 14803 + loc 5.6500207632780075e-02 8.3033263683319092e-01 404 + blend 0.0000000000000000e+00 + interp 4.9371279804270113e-01:4.5903376194951334e-01:6.2139511980947448e-01:3.4135321060407703e-01:1.4142585257409337e+00:4.9370786091472074e-01:2.0979828044121764e+00:2.9051391334452403e-01:2.7726518315456197e+00:3.1443170870619813e-01:3.7589538195646526e+00 + CVs 20 + -2.3390118391849766e-02 -7.3561573473896868e-03 3.1437367069282171e-02 + -5.5644605396660447e-02 -2.0616134643173724e-02 7.1535540845302323e-02 + -9.6379854832104317e-02 -3.7427277798593006e-02 1.1742424146944178e-01 + -1.4507403163537766e-01 -5.7110583537412343e-02 1.7363593411798503e-01 + -2.0091248909674514e-01 -7.7773286724329288e-02 2.4491657450295989e-01 + -2.6244726698974208e-01 -9.6855619556979133e-02 3.3349005770301776e-01 + -3.2745309932804012e-01 -1.1135763021350614e-01 4.4082703644733939e-01 + -3.9280734983543819e-01 -1.1808116149465220e-01 5.6757028646952534e-01 + -4.5452256929035384e-01 -1.1398976268002775e-01 7.1322254640903271e-01 + -5.0790320384156040e-01 -9.6491296124511960e-02 8.7597496094086336e-01 + -5.4781700018486656e-01 -6.3749700300191670e-02 1.0526112652300388e+00 + -5.6899610365464381e-01 -1.4927178198706259e-02 1.2385964091181649e+00 + -5.6624985627525426e-01 4.9833739303532298e-02 1.4284202649817828e+00 + -5.3506507799395542e-01 1.2886544420679008e-01 1.6155090496437097e+00 + -4.7332628729802728e-01 2.1753595970280537e-01 1.7917805124788586e+00 + -3.8164946207607697e-01 3.0908993624882192e-01 1.9489836292337281e+00 + -2.6339677652804450e-01 3.9558535454227728e-01 2.0798357123112932e+00 + -1.2441854271868920e-01 4.6905064265920882e-01 2.1788260970083382e+00 + -7.1022884422999283e-02 4.6391768220457286e-01 2.2259725942268265e+00 + id 14804 + loc 1.2533345818519592e-01 5.8513748645782471e-01 405 + blend 0.0000000000000000e+00 + interp 4.2813994257609311e-01:4.2813566117666735e-01:7.4146730968939201e-02:4.1556086231407624e-01:7.9472075425704158e-01:3.7853806625944736e-01:1.1318730916916451e+00:2.6563651444107073e-01:1.9145724602696725e+00:4.1028250041954017e-01:2.1753173232058653e+00:3.9329061303882623e-01:3.0563206982888120e+00:2.7846856280730015e-01:3.7994931785449704e+00 + CVs 20 + 1.0192550364473130e-01 2.1871283722546686e-01 7.1668949232089135e-02 + 1.0195475272782142e-01 3.9140987474446987e-01 1.1706086862799701e-01 + 7.4250181804261350e-02 5.4482510482087232e-01 1.6974181747282960e-01 + 4.6400574825134544e-02 6.9690300164020835e-01 2.4963857199158454e-01 + 1.6146071006537699e-02 8.4226844488763031e-01 3.6187063043427009e-01 + -1.6697333074500831e-02 9.7512013116038854e-01 5.0842073552469613e-01 + -5.0230155068946791e-02 1.0911439195512711e+00 6.8794563147899657e-01 + -8.0984034153610829e-02 1.1886106007801216e+00 8.9696470474482248e-01 + -1.0482286555102771e-01 1.2681879390358062e+00 1.1309312484847009e+00 + -1.1782924856196908e-01 1.3324027982169724e+00 1.3847210674223656e+00 + -1.1723251107345556e-01 1.3845502111233594e+00 1.6535653215238264e+00 + -1.0199496635254390e-01 1.4262905825045158e+00 1.9333704045040030e+00 + -7.2045919892306132e-02 1.4598977991193074e+00 2.2163610040223425e+00 + -2.7864854231902103e-02 1.4953697974086335e+00 2.4823896323066816e+00 + 2.6501033119327944e-02 1.5482732624617752e+00 2.7029850496593113e+00 + 8.2066508542731897e-02 1.6223637692629609e+00 2.8634438326779401e+00 + 1.2994326337240958e-01 1.7063421226781312e+00 2.9707814604358673e+00 + 1.6543538364023913e-01 1.7867022636958727e+00 3.0402631450412292e+00 + 2.3760729643248235e-01 1.8534670149600228e+00 3.1746193827894893e+00 + id 14805 + loc 4.9359464645385742e-01 7.5641119480133057e-01 1079 + blend 0.0000000000000000e+00 + interp 5.0588966996248530e-01:3.0904425108684619e-01:2.3570367178989826e-01:4.5080899917244638e-01:9.8134419362161840e-01:2.7128721250160448e-01:1.7723730308110475e+00:2.8337009322470119e-01:2.9880252201290514e+00:5.0588461106578575e-01:3.6332158119373603e+00 + CVs 20 + 9.6474735936121242e-02 3.7562227132848214e-01 4.3996588624867272e-02 + 2.0333307877517365e-01 6.9444412135682898e-01 2.8614905641301869e-02 + 3.0661583275441762e-01 9.7416849704786324e-01 -2.4152351896933433e-02 + 3.9664370907349933e-01 1.2185300258053311e+00 -1.0027838102479647e-01 + 4.6830936155070335e-01 1.4230415173777315e+00 -1.9106520334585586e-01 + 5.1397571661612662e-01 1.5838427957649297e+00 -2.8207547325825977e-01 + 5.3033758595282332e-01 1.7077952034166000e+00 -3.5953162707140562e-01 + 5.2418879153043330e-01 1.8131839812489159e+00 -4.2140186233777510e-01 + 5.0591350258774548e-01 1.9166373553622669e+00 -4.7613798082569581e-01 + 4.8339864783205733e-01 2.0265838757466836e+00 -5.3725930496509067e-01 + 4.6101648811956819e-01 2.1416280483920991e+00 -6.2041443242719840e-01 + 4.3937902689669345e-01 2.2524247041384569e+00 -7.3791315009991743e-01 + 4.1556108754998439e-01 2.3446633980708445e+00 -8.9762957919885211e-01 + 3.8392756179649973e-01 2.4020516819036377e+00 -1.1037583587984783e+00 + 3.3966262110158774e-01 2.4121467243565977e+00 -1.3584223040671062e+00 + 2.8841150940278665e-01 2.3835185424866001e+00 -1.6742780547276908e+00 + 2.4858025918495852e-01 2.3206306810415391e+00 -2.1000049519805848e+00 + 2.2012400976206348e-01 2.1149793702600141e+00 -2.5834726489923927e+00 + 1.1659671713669559e-01 1.8474876397802926e+00 -2.5340831970599371e+00 + id 14806 + loc 6.8952262401580811e-01 2.3983910679817200e-01 394 + blend 0.0000000000000000e+00 + interp 3.6283289242038080e-01:3.6282926409145660e-01:6.1401828213951348e-01:2.4352447394567348e-01:1.2046761761608895e+00:2.5880604468045137e-01:2.0345819411058583e+00:3.5764180277304175e-01:2.7228659610801351e+00:2.4536820682195276e-01:3.0790372889132134e+00:3.5268357516547122e-01:3.8448893141410383e+00 + CVs 20 + 2.3577405635711818e-01 2.8447823935297256e-01 2.4450183158818184e-01 + 5.0962095899741411e-01 5.5768547041909144e-01 4.4436147787223829e-01 + 7.9255854255134728e-01 8.3293588272923824e-01 6.3972505094096965e-01 + 1.0673942753989594e+00 1.1163674480133026e+00 8.5012916889016577e-01 + 1.3260605918477628e+00 1.4032125495042198e+00 1.0870929843558561e+00 + 1.5658070524988015e+00 1.6762507267033164e+00 1.3586033613869284e+00 + 1.7871324980411214e+00 1.9171369277046773e+00 1.6682429822628424e+00 + 1.9876200862893076e+00 2.1123585828592990e+00 2.0127828986613285e+00 + 2.1637576375231125e+00 2.2529558479919896e+00 2.3801356184036475e+00 + 2.3156068207314524e+00 2.3354970817553222e+00 2.7532166642864562e+00 + 2.4473820352128319e+00 2.3617714848541471e+00 3.1205480736722713e+00 + 2.5647143555074319e+00 2.3339202814150397e+00 3.4815806787815275e+00 + 2.6707338142800561e+00 2.2515287741513590e+00 3.8361526200335296e+00 + 2.7595891039933100e+00 2.1221172562756432e+00 4.1660310326651464e+00 + 2.8197000810154069e+00 1.9720839513543744e+00 4.4410823042786483e+00 + 2.8451475814619105e+00 1.8287198744646915e+00 4.6526882359431720e+00 + 2.8275322085545995e+00 1.7031022140908867e+00 4.8232571279293017e+00 + 2.7728258280972793e+00 1.5881101968420084e+00 4.9947484034214824e+00 + 2.8999347952600614e+00 1.4938256174599585e+00 5.2073690774787895e+00 + id 14807 + loc 2.1927776932716370e-01 5.6161892414093018e-01 404 + blend 0.0000000000000000e+00 + interp 4.1234012264128744e-01:2.8942617724721736e-01:3.3782165726156033e-01:4.1233599924006104e-01:9.9547966859096282e-01:2.9085798847292160e-01:1.6673489721532255e+00:3.1470797785461913e-01:2.5688188357692932e+00:3.4270144139281739e-01:3.3005535544474220e+00 + CVs 20 + 4.0126033362829119e-02 1.0642441830584884e-01 -2.6173012238539153e-02 + 6.1716439520719452e-02 1.8207821618349737e-01 -4.6459449680576845e-02 + 7.5207131989886433e-02 2.4030607532802509e-01 -6.7369151294230226e-02 + 9.4097266815388811e-02 2.8555684969216250e-01 -9.5177735139576725e-02 + 1.2047470084349379e-01 3.1479805077911632e-01 -1.2645583455326093e-01 + 1.5679371661944974e-01 3.2681572683538640e-01 -1.5674431632176344e-01 + 2.0673030838198786e-01 3.2234006227016038e-01 -1.8232637052701156e-01 + 2.7485682588387994e-01 3.0386381440571536e-01 -2.0203618746325436e-01 + 3.6587005615722312e-01 2.7550230072887272e-01 -2.1772877012028757e-01 + 4.8315887941101693e-01 2.4238566871235176e-01 -2.3459162557540406e-01 + 6.2604580401516163e-01 2.0886732807923303e-01 -2.6145766625639766e-01 + 7.8865714669170583e-01 1.7712058820634441e-01 -3.0837888347561426e-01 + 9.6545083906021101e-01 1.4859245695596479e-01 -3.8378334822952065e-01 + 1.1504489937732267e+00 1.2488519337404580e-01 -4.9533236619768817e-01 + 1.3357357667368950e+00 1.0672252854109954e-01 -6.5099451885096860e-01 + 1.5095234824930308e+00 9.1911630588180304e-02 -8.5942475634054483e-01 + 1.6561671419679094e+00 7.7386902149163328e-02 -1.1277962407373909e+00 + 1.7589517200716789e+00 6.6642093058726370e-02 -1.4568603562181035e+00 + 1.7806807147142747e+00 3.2101825540200135e-02 -1.5854028716232424e+00 + id 14808 + loc 3.9580065011978149e-01 2.0715801045298576e-02 1079 + blend 0.0000000000000000e+00 + interp 2.9531744703303925e-01:5.0063859191231866e-02:6.6304577602135373e-01:2.5978336815943925e-01:2.0855302334811383e+00:2.9531449385856895e-01:2.9736098572434262e+00:2.7608953769691591e-01:3.7637265952357892e+00 + CVs 20 + 3.0279811370944548e-01 4.6491649367618970e-01 -2.5369909983402578e-02 + 4.7697864588590427e-01 8.7237861407212614e-01 -8.2769264129659847e-02 + 5.9293064448926069e-01 1.2478819679815343e+00 -1.5194195264573740e-01 + 6.7332915794655968e-01 1.6038226961391735e+00 -2.2990340343038707e-01 + 7.0815646216799044e-01 1.9263290819441841e+00 -3.2395200688914261e-01 + 6.8729020733738722e-01 2.1959765507257067e+00 -4.4082252071432471e-01 + 6.0874650017227627e-01 2.3854381183712103e+00 -5.8109100853170814e-01 + 4.9375909727124245e-01 2.4732413637228943e+00 -7.3038564833024799e-01 + 3.7548409673617023e-01 2.4735517595953791e+00 -8.6808754300742152e-01 + 2.6207504096452572e-01 2.4235060301467088e+00 -9.9141838025452134e-01 + 1.4356649947900468e-01 2.3408272560301175e+00 -1.1079081698076001e+00 + 1.7430955907075441e-02 2.2287150442711998e+00 -1.2175715477928430e+00 + -1.1292631843852985e-01 2.0904903323831294e+00 -1.3164413928830501e+00 + -2.4440022904010883e-01 1.9286155607203550e+00 -1.4025468782342916e+00 + -3.7589014260574127e-01 1.7409319485041408e+00 -1.4762939509205386e+00 + -5.0525196964896257e-01 1.5195856363538527e+00 -1.5305172948573684e+00 + -6.1980956125967868e-01 1.2565713990331475e+00 -1.5380149667949057e+00 + -7.0485068946523532e-01 9.5598829099380167e-01 -1.4660434022357141e+00 + -7.6664133174071170e-01 8.8510248922716317e-01 -1.3316303382563797e+00 + id 14809 + loc 3.6120706796646118e-01 5.8773440122604370e-01 405 + blend 0.0000000000000000e+00 + interp 4.6569839704878063e-01:3.9039007284249960e-01:9.2126135187945912e-01:3.5766889120259504e-01:1.6261553534233784e+00:4.0248901120694547e-01:2.1452061227637818e+00:4.6569374006481018e-01:2.9142257755500744e+00:3.6888692946014850e-01:3.3594308103093806e+00:2.8100146033704626e-01:3.9983048103803176e+00 + CVs 20 + 9.9397400114335288e-02 2.3286469018620110e-01 1.2544886676942278e-03 + 9.3220227973486142e-02 4.0624136690619361e-01 3.5777628755523719e-04 + 5.5035368231060700e-02 5.4730168762539200e-01 9.7280493735796836e-03 + 1.0065890441343872e-02 6.7992096603413832e-01 3.7980283113678348e-02 + -4.3882074270605032e-02 8.0107003797890408e-01 8.8223850332698750e-02 + -1.0769368969238596e-01 9.0686522044941342e-01 1.6161716037401014e-01 + -1.8148317241866413e-01 9.9420013756158432e-01 2.5655454642911557e-01 + -2.6566455872891437e-01 1.0624289033297905e+00 3.7015260627803703e-01 + -3.6146972585151671e-01 1.1130406368562860e+00 5.0056538335939826e-01 + -4.7049791201435748e-01 1.1483254527314510e+00 6.4762588716224334e-01 + -5.9378982577370887e-01 1.1707415552460021e+00 8.1177746098656978e-01 + -7.3110119138220742e-01 1.1831376089502337e+00 9.9246821197138002e-01 + -8.8096758959352905e-01 1.1886482350373822e+00 1.1879376819406249e+00 + -1.0412984060314543e+00 1.1884916369933840e+00 1.3970734934780704e+00 + -1.2089326678623042e+00 1.1811843891736840e+00 1.6201090053289624e+00 + -1.3775744807332324e+00 1.1678431416985893e+00 1.8586880876822836e+00 + -1.5375134185421571e+00 1.1566432715618515e+00 2.1146366277783413e+00 + -1.6797499363515680e+00 1.1590891543804871e+00 2.3816009733997308e+00 + -1.7952198779215045e+00 1.2438369678953558e+00 2.5358811754453394e+00 + id 14810 + loc 1.3278341293334961e-01 2.6514989137649536e-01 394 + blend 0.0000000000000000e+00 + interp 5.4056867390083985e-01:3.2429223521679412e-01:1.7832469288447950e-04:5.0329922806836702e-01:3.7879024308636600e-01:5.4056326821410083e-01:9.2103590779441014e-01:4.4842044467955394e-01:1.0513670784735689e+00:3.0344745853412453e-01:1.6001534182101254e+00:2.7251213456673373e-01:2.5475720074653054e+00:3.1043004496818871e-01:3.3873917752838762e+00 + CVs 20 + -1.2261485583005854e-01 1.7618355197718949e-01 1.6521109711126064e-01 + -2.6099666783023506e-01 3.6254436888678415e-01 3.6765732428532366e-01 + -4.0457508330960107e-01 5.4114939993169342e-01 5.7928652620063636e-01 + -5.4811554390972905e-01 7.0407820062018067e-01 7.8685854195614113e-01 + -6.8922704771656829e-01 8.4687783612214329e-01 9.8286970635103210e-01 + -8.2117564184227443e-01 9.6333355934887988e-01 1.1570405711386198e+00 + -9.3822605266669656e-01 1.0523627899748178e+00 1.3069318585773591e+00 + -1.0351899718489466e+00 1.1199948446222339e+00 1.4352185625463882e+00 + -1.1024712778689358e+00 1.1781380029630666e+00 1.5398700766958098e+00 + -1.1277042423069767e+00 1.2472149513374675e+00 1.6120570996804817e+00 + -1.1012198057991494e+00 1.3628468109614795e+00 1.6437512271517847e+00 + -1.0388935675644919e+00 1.5729694482676186e+00 1.6440526722423936e+00 + -1.0215512071898862e+00 1.8565289019400613e+00 1.6554371912445807e+00 + -1.1116199635958339e+00 2.0313073487286144e+00 1.7156158623756914e+00 + -1.2598417710074963e+00 1.9613169136854629e+00 1.8131388868953793e+00 + -1.4332247972090972e+00 1.7071098794550403e+00 1.9182932116891305e+00 + -1.6455759806538832e+00 1.4040272353816110e+00 1.9914419813534239e+00 + -1.8811101066488902e+00 1.1669013416827561e+00 2.0518579574231577e+00 + -2.0218813001617448e+00 1.1778569099915401e+00 2.2905992065803362e+00 + id 14811 + loc 6.5341168642044067e-01 8.0130827426910400e-01 1079 + blend 0.0000000000000000e+00 + interp 3.4840314728388816e-01:3.0028959251688331e-01:8.1813698216394826e-01:3.4839966325241534e-01:1.7924320062314523e+00:2.8858391498132641e-01:2.2177274240785381e+00:2.7458023055626213e-01:3.0005570792411063e+00:2.7169450686339314e-01:3.9917024663061182e+00 + CVs 20 + 1.1209061072220619e-01 3.4843665243562694e-01 -1.0795979599113464e-02 + 2.4972628950734765e-01 6.7411186962735758e-01 -4.6470676352833001e-02 + 4.0730936478979207e-01 9.8134632532945298e-01 -1.0626607630964485e-01 + 5.8329709354863113e-01 1.2667901575224838e+00 -1.9059478937775676e-01 + 7.7815444158591152e-01 1.5205772240565771e+00 -3.0273028188507584e-01 + 9.8843069142142159e-01 1.7277212046110051e+00 -4.4739204580046582e-01 + 1.2077069275895469e+00 1.8738270817304035e+00 -6.2760756968669740e-01 + 1.4291243132655438e+00 1.9522236932709469e+00 -8.4039000641154882e-01 + 1.6459200348831553e+00 1.9614956318006156e+00 -1.0768570661702894e+00 + 1.8520166590313418e+00 1.9023557038887831e+00 -1.3241238316967401e+00 + 2.0436452568571091e+00 1.7781346565514016e+00 -1.5678837621586585e+00 + 2.2194593824044722e+00 1.5948845250311996e+00 -1.7935498794030484e+00 + 2.3807762889772692e+00 1.3618696165659019e+00 -1.9861874109784425e+00 + 2.5317906427909236e+00 1.0925380990054878e+00 -2.1293075249100264e+00 + 2.6772938068559600e+00 8.0636574784938220e-01 -2.2002406876187779e+00 + 2.8131298524551691e+00 5.3951498272808851e-01 -2.1512519404957215e+00 + 2.9205426187983301e+00 4.0090719718612799e-01 -1.9057681344102830e+00 + 3.0070460044126248e+00 5.1911812576464322e-01 -1.5589324425606972e+00 + 3.1386396209542289e+00 2.8056142243794535e-01 -1.3810926825225667e+00 + id 14812 + loc 9.4631350040435791e-01 5.2349731326103210e-02 404 + blend 0.0000000000000000e+00 + interp 2.9774647773037882e-01:2.6711518187087663e-01:7.6902965602078099e-02:2.2189547141116020e-01:1.4702277986688628e+00:2.4149081579288759e-01:1.9752415901286322e+00:2.9774350026560154e-01:2.4759656976929771e+00:2.5409386243249876e-01:3.0730426180797066e+00 + CVs 20 + 2.5806815121796466e-02 8.5061680430200445e-02 1.3996649376145523e-01 + 5.2831596548932644e-02 1.6625317266071737e-01 2.8949852478029514e-01 + 7.2118697896769252e-02 2.4695416848571286e-01 4.4650730123710197e-01 + 7.7116597680906812e-02 3.2824136871719650e-01 6.0883325546622991e-01 + 6.5596197313256055e-02 4.0804984551817336e-01 7.7373145172818003e-01 + 3.5911455496694056e-02 4.8402904044297812e-01 9.3732843313518643e-01 + -1.3499420929047712e-02 5.5501673210887359e-01 1.0952758616081082e+00 + -8.2918867739871505e-02 6.2132462389424092e-01 1.2438150165547481e+00 + -1.6988453418243660e-01 6.8439678780194579e-01 1.3800425526927060e+00 + -2.7051897581055950e-01 7.4673879086063866e-01 1.5017846739953218e+00 + -3.8048311905132470e-01 8.1126732176260508e-01 1.6064939112938397e+00 + -4.9212053716353754e-01 8.7984525010170866e-01 1.6899334787010361e+00 + -5.9578708064207930e-01 9.5388623750801727e-01 1.7507586064840042e+00 + -6.9010582112110730e-01 1.0366142389446682e+00 1.7993610888811071e+00 + -7.7775187110804167e-01 1.1317900936443681e+00 1.8605140757382055e+00 + -8.5407085949269013e-01 1.2408514771102377e+00 1.9496498763911267e+00 + -9.1870720489177959e-01 1.3632010284378486e+00 2.0645394053561810e+00 + -9.7294322008549261e-01 1.4956536525662978e+00 2.2006877430053500e+00 + -9.3966017395122203e-01 1.6196584264656286e+00 2.3231171218111353e+00 + id 14813 + loc 7.0580625534057617e-01 1.4952765405178070e-01 405 + blend 0.0000000000000000e+00 + interp 3.8461527500472564e-01:3.7555862698329701e-01:3.6408612273680085e-01:2.6126852486519009e-01:1.2591496487336957e+00:3.8461142885197563e-01:1.9984999531477632e+00:3.8075697796753299e-01:2.8876668819228506e+00:3.0854458441282789e-01:3.3296940123091812e+00 + CVs 20 + 1.9964923152293418e-01 9.2831501872307876e-02 -4.0539316888259333e-02 + 4.0939675052789648e-01 1.5720520488385992e-01 -8.5185211245079634e-02 + 6.2031462869267195e-01 2.1057030699498058e-01 -1.3701946329141101e-01 + 8.2118494422976007e-01 2.4793477127121533e-01 -2.0252697029867131e-01 + 1.0053291574453831e+00 2.6590625565086329e-01 -2.8647356687178127e-01 + 1.1649996974894932e+00 2.6293648036377959e-01 -3.9152592814204135e-01 + 1.2922510606729554e+00 2.3951719496496104e-01 -5.1703189114898496e-01 + 1.3811170538339677e+00 1.9900276677578277e-01 -6.5834755890462660e-01 + 1.4286920410699753e+00 1.4677709376779569e-01 -8.0778940318137082e-01 + 1.4375185648715916e+00 8.9809757864966810e-02 -9.5572279795851811e-01 + 1.4153947654601522e+00 3.4515792640454457e-02 -1.0933967691436111e+00 + 1.3742667882862070e+00 -1.6729780497344415e-02 -1.2134568260562728e+00 + 1.3293184031000163e+00 -6.3802321020699493e-02 -1.3126324811676509e+00 + 1.2943521749644327e+00 -9.9724885357504012e-02 -1.3997481842168700e+00 + 1.2742566130960282e+00 -1.0471910822550712e-01 -1.4995912775013038e+00 + 1.2626328403478393e+00 -5.7673338648852712e-02 -1.6342425945590990e+00 + 1.2514155106478819e+00 4.2214772587480631e-02 -1.7961808342259782e+00 + 1.2421932700848002e+00 1.7612323241441241e-01 -1.9655183678063259e+00 + 1.3581149844274352e+00 2.2259151147012801e-01 -2.1230395994608737e+00 + id 14814 + loc 4.5440140366554260e-01 1.9493657350540161e-01 394 + blend 0.0000000000000000e+00 + interp 5.4996240006655417e-01:2.3850090955727835e-01:7.7447762516360164e-01:4.1192541485399548e-01:1.0399873824492936e+00:5.4995690044255352e-01:1.5417163118537645e+00:5.3568440227942871e-01:1.9422728833000846e+00:3.4820336521788486e-01:2.5173176877415901e+00:4.9561230339866152e-01:3.2067739029581297e+00:3.5436696004047080e-01:3.9940916836467468e+00 + CVs 20 + -1.7329537232854941e-01 3.0665980772406015e-01 1.6090323194789763e-01 + -3.0724823973242466e-01 6.0461944414793045e-01 3.5302045121344700e-01 + -4.1490692518948252e-01 8.9245685579160938e-01 5.5022057769365562e-01 + -5.0764300683008945e-01 1.1761584305134878e+00 7.4299257858453238e-01 + -5.9839796041863513e-01 1.4645224333701177e+00 9.3280233812321656e-01 + -7.0451604009271651e-01 1.7628209753362365e+00 1.1260331207314072e+00 + -8.4366751477096247e-01 2.0662931628336638e+00 1.3307182385002392e+00 + -1.0299017713359762e+00 2.3621459078277094e+00 1.5507225482548832e+00 + -1.2739441461081646e+00 2.6357127810886731e+00 1.7833898767549263e+00 + -1.5826098009336980e+00 2.8705947775505583e+00 2.0220440989948387e+00 + -1.9582765110227003e+00 3.0475764584106901e+00 2.2643606704099302e+00 + -2.3974067831241475e+00 3.1394816661517337e+00 2.5138299968262108e+00 + -2.8645050334497508e+00 3.1076166186682359e+00 2.7581177732328470e+00 + -3.2678101870073633e+00 2.9420872534699614e+00 2.9527677195300326e+00 + -3.5383959389925730e+00 2.6907418756865065e+00 3.0635478838055055e+00 + -3.7026621482910720e+00 2.4010023080590868e+00 3.0958061677472299e+00 + -3.8345889164809748e+00 2.0972253089338326e+00 3.0687810364540766e+00 + -3.9904317158043012e+00 1.7915708747494592e+00 3.0399498965115272e+00 + -4.1560750949529321e+00 1.5248382684964916e+00 3.2117762728236001e+00 + id 14815 + loc 9.3827515840530396e-01 5.5144464969635010e-01 1079 + blend 0.0000000000000000e+00 + interp 4.2843678667194529e-01:3.2555978300919497e-01:4.3589995676059012e-01:2.5914371427608823e-01:1.4939924038605161e+00:4.2843250230407859e-01:2.0148832800031915e+00:2.7831512159863986e-01:2.8856262998972242e+00:2.5043945382752109e-01:3.7245765029853501e+00 + CVs 20 + 1.8494524441315768e-01 3.2572679167520552e-01 -2.8158450224173640e-02 + 3.5448727806702679e-01 6.3232427917242262e-01 -9.4694302159790245e-02 + 5.3279889491431676e-01 9.0640994942349906e-01 -1.8175840150132347e-01 + 7.2758418842813732e-01 1.1370152365092783e+00 -2.8181301435085593e-01 + 9.3424344047674290e-01 1.3149259425452988e+00 -3.9355072532527108e-01 + 1.1461781314180735e+00 1.4337323322428690e+00 -5.1230589752537570e-01 + 1.3585008887354872e+00 1.4935999008786729e+00 -6.3276074513139724e-01 + 1.5707315250792653e+00 1.4997770909716690e+00 -7.5141832616081339e-01 + 1.7849866719067169e+00 1.4572221305620996e+00 -8.6626716379910884e-01 + 2.0054432586015865e+00 1.3677091169602862e+00 -9.7888567171317309e-01 + 2.2343707592292885e+00 1.2286956306356032e+00 -1.0946341171217278e+00 + 2.4638812280149911e+00 1.0376043516253235e+00 -1.2161652231922409e+00 + 2.6771042055759522e+00 7.9335152565622358e-01 -1.3437293650967219e+00 + 2.8482674599870208e+00 4.9095687413517763e-01 -1.4835889867264180e+00 + 2.9300370630569388e+00 1.2512100661592918e-01 -1.6507276125169419e+00 + 2.8415091882020262e+00 -2.8257444287032385e-01 -1.8638239163981221e+00 + 2.5194545870409533e+00 -6.5802117456131981e-01 -2.1692333207386545e+00 + 1.9801345552099363e+00 -8.5507757457845179e-01 -2.6273819506374161e+00 + 1.7602296977850065e+00 -1.0884418825726421e+00 -2.9043425896691115e+00 + id 14816 + loc 5.7037514448165894e-01 8.5624849796295166e-01 405 + blend 0.0000000000000000e+00 + interp 4.8918954347653748e-01:4.0439948925585367e-01:1.0086012002522637e-01:3.6713736653631168e-01:1.0484887181880178e+00:4.8439147436326413e-01:1.6179483573312108e+00:4.8918465158110275e-01:1.9998809042588737e+00:4.0092899712553814e-01:2.7017739855627232e+00:3.6716214570780031e-01:3.3697909481487365e+00 + CVs 20 + 1.4709189020681968e-01 2.7491474861021653e-01 2.3101548647978254e-03 + 1.6619479637739437e-01 4.0474709180678398e-01 -5.1251693052380351e-03 + 1.2552860479413672e-01 4.9994431038560594e-01 -2.6308812520085000e-02 + 8.5747204951107936e-02 5.8674274935521442e-01 -6.7827755420073729e-02 + 4.6955108431712245e-02 6.7568081885742348e-01 -1.3569735724791612e-01 + 1.3004428744892382e-02 7.9128435722527990e-01 -2.3216363317457936e-01 + -7.0929130525320683e-03 9.6578107014479886e-01 -3.3571515397322410e-01 + -6.4078451247555623e-03 1.2007771884139045e+00 -3.9348759609992645e-01 + 1.0810216199328981e-02 1.4499524240022144e+00 -3.7026563369140403e-01 + 3.6704901261703893e-02 1.6724998897352212e+00 -2.7553772511033980e-01 + 7.0756170308316602e-02 1.8595025575932334e+00 -1.2980331432828790e-01 + 1.1853644676804209e-01 2.0150141832636144e+00 5.4838813384499294e-02 + 1.7978942094842332e-01 2.1361705525875090e+00 2.6683476231920911e-01 + 2.3774610801576079e-01 2.2098824128344492e+00 4.7774385576839307e-01 + 2.6964891352683651e-01 2.2306855265456322e+00 6.5227933128297189e-01 + 2.7036787009411889e-01 2.2105376618981709e+00 7.8466456405266949e-01 + 2.5519960727451985e-01 2.1676594386713406e+00 8.9588173974805807e-01 + 2.4591830795513048e-01 2.1177392881696178e+00 9.9420025171831650e-01 + 3.7417379385867711e-01 2.1592280276479010e+00 1.1135048838962420e+00 + id 14817 + loc 6.4192903041839600e-01 3.0235728621482849e-01 404 + blend 0.0000000000000000e+00 + interp 2.8009020812736912e-01:2.6782506933031153e-01:8.3984676275530001e-01:2.6270711667562135e-01:1.7033148204314916e+00:2.8008740722528785e-01:2.3343992028564653e+00:2.5132980533418431e-01:3.4684877126316991e+00 + CVs 20 + -6.3538611213645457e-02 2.0580302039101456e-01 1.6794325621638909e-01 + -1.2647655291237675e-01 3.8924544095325442e-01 3.1919015946024965e-01 + -2.0774709381110407e-01 5.6391159885701037e-01 4.6750057456042166e-01 + -3.1486801877243997e-01 7.3617065818942096e-01 6.1916398010328488e-01 + -4.4531374536164070e-01 9.0472517462945634e-01 7.7365260254553303e-01 + -5.9440592179359508e-01 1.0686603166423394e+00 9.3323862642162914e-01 + -7.5535878625066333e-01 1.2277079515139726e+00 1.1036633957391828e+00 + -9.1893114894906458e-01 1.3823186702154842e+00 1.2926178805062121e+00 + -1.0736333340967268e+00 1.5327495375015940e+00 1.5083865582730116e+00 + -1.2058298452134175e+00 1.6784515560814384e+00 1.7599649548987752e+00 + -1.2996854779150409e+00 1.8161518497188491e+00 2.0554934614867322e+00 + -1.3368339667481810e+00 1.9385277758024766e+00 2.3939973364031921e+00 + -1.3062754212507957e+00 2.0372177638323894e+00 2.7601113257920766e+00 + -1.2079570812249600e+00 2.1095801206346421e+00 3.1312836935527049e+00 + -1.0428358043557362e+00 2.1619771444772491e+00 3.4891666738081426e+00 + -8.0261422469423582e-01 2.2028802459481978e+00 3.8210941719824474e+00 + -4.7347074544350432e-01 2.2304996595548827e+00 4.1134297514120153e+00 + -6.1355888654404112e-02 2.2285019725551485e+00 4.3428073511008609e+00 + 1.5218125091212320e-01 2.2324116425804315e+00 4.4700886216499045e+00 + id 14818 + loc 9.2861098051071167e-01 5.8494645357131958e-01 394 + blend 0.0000000000000000e+00 + interp 3.5645577406303680e-01:2.6656381908824911e-01:4.1247611743576862e-01:2.5780976592286520e-01:1.0075977718737130e+00:3.0779315702427085e-01:1.9999424585264434e+00:3.5645220950529621e-01:2.7673934790401797e+00:2.7020635004262145e-01:3.8236740208887072e+00 + CVs 20 + -3.0757779054223100e-01 1.9039339556695101e-01 -1.4247074109880378e-01 + -5.9084691048075522e-01 3.4948336119673540e-01 -2.5746381551746433e-01 + -8.6859231839708950e-01 5.0028966000758601e-01 -3.8227814005043292e-01 + -1.1443356390085264e+00 6.5537081069392311e-01 -5.3803558786582240e-01 + -1.4066760813936170e+00 8.1131275460198082e-01 -7.3351429981002858e-01 + -1.6445008537447166e+00 9.6363553551313952e-01 -9.7238264163178001e-01 + -1.8606313081054879e+00 1.1177196231727227e+00 -1.2563703797011860e+00 + -2.0643517947689896e+00 1.2775052627731578e+00 -1.5899175346860361e+00 + -2.2540028178203242e+00 1.4228254877480744e+00 -1.9798722003763918e+00 + -2.4254353683561325e+00 1.5181196052087136e+00 -2.4265204173404493e+00 + -2.5901253851948089e+00 1.5313173710612407e+00 -2.9192925898425273e+00 + -2.7588052034168724e+00 1.4419960433589618e+00 -3.4379537008071162e+00 + -2.9224084544938549e+00 1.2495399048214726e+00 -3.9588393203718160e+00 + -3.0736302622798446e+00 9.6594799017167299e-01 -4.4608249055796989e+00 + -3.2282580736645570e+00 6.0030478580065028e-01 -4.9218932606414940e+00 + -3.4015851706869205e+00 1.5516501509235159e-01 -5.3081253522660639e+00 + -3.5788987203813076e+00 -3.6218250421523823e-01 -5.5760267741041689e+00 + -3.7392998879715349e+00 -9.2141972619767731e-01 -5.7135164102865659e+00 + -3.9023333785619334e+00 -1.4434356480207788e+00 -5.8336247199908833e+00 + id 14819 + loc 2.9564374685287476e-01 6.9129389524459839e-01 1079 + blend 0.0000000000000000e+00 + interp 3.6164327077090713e-01:2.8271963069267553e-01:7.0961434878980434e-02:3.6163965433819945e-01:9.9563214900885277e-01:2.8195617682732010e-01:1.8638423039706531e+00:2.8906003978967704e-01:2.6743939283049061e+00:3.3587960012952589e-01:3.4564449401388710e+00 + CVs 20 + 6.4667244869025420e-02 4.1525526643415511e-01 1.6318111164874982e-01 + 1.5943875434898508e-01 7.7367052891828036e-01 2.7209844505547676e-01 + 2.6798896764700708e-01 1.1099261614639366e+00 3.6190568712523008e-01 + 3.8541839133122330e-01 1.4404916515805233e+00 4.4745195950737421e-01 + 5.1737122050195561e-01 1.7672497097224888e+00 5.2041908252000968e-01 + 6.7306639377682542e-01 2.0943414711962296e+00 5.6197456038745519e-01 + 8.6328522475146974e-01 2.4199884454980207e+00 5.4015770029364385e-01 + 1.0908742179957316e+00 2.7258173063719005e+00 4.2364241794306345e-01 + 1.3458711955186831e+00 2.9805120714957010e+00 1.9853105669021986e-01 + 1.6102227217580161e+00 3.1530991764879928e+00 -1.2556577001378000e-01 + 1.8665498770868703e+00 3.2261964309270166e+00 -5.2083283890400534e-01 + 2.1047324940433549e+00 3.1987954805816505e+00 -9.5614290436816274e-01 + 2.3218906304983951e+00 3.0794057540396489e+00 -1.4054055277970217e+00 + 2.5202341738716356e+00 2.8778735337625414e+00 -1.8488513783843550e+00 + 2.7043238859377294e+00 2.5899748826986806e+00 -2.2744183661762754e+00 + 2.8756145874714329e+00 2.1479010498229236e+00 -2.6756535178944221e+00 + 3.0204746799364925e+00 1.4045946926259896e+00 -2.9681468457647213e+00 + 3.1111556249061767e+00 4.6632570246830185e-01 -2.9410853551099390e+00 + 3.1904766325236711e+00 1.3211076854484793e-01 -2.9723051818019783e+00 + id 14820 + loc 5.0040000677108765e-01 6.2375408411026001e-01 405 + blend 0.0000000000000000e+00 + interp 4.6569839704878063e-01:3.8771044864348936e-01:1.5111928479520376e-01:4.6569374006481018e-01:9.1540979564101577e-01:3.7514685222057359e-01:1.3969654129435056e+00:4.6348706104177989e-01:2.0569472434221376e+00:3.3895107837973337e-01:2.6181279084633671e+00:3.8297956662027910e-01:3.0277077843005711e+00:3.6697119339059497e-01:3.7561483508850593e+00 + CVs 20 + 1.2672322640628847e-01 2.3582744856137650e-01 -2.5090014043482236e-02 + 1.8217402365499388e-01 4.1641027453622348e-01 -4.2485936066130728e-02 + 2.2314308290135840e-01 5.5350261058143224e-01 -4.8759470533542973e-02 + 2.7989360285501935e-01 6.8410945391285860e-01 -4.1666027033653054e-02 + 3.4751678172260231e-01 8.1023525321869949e-01 -1.8751405607167641e-02 + 4.2247826449403686e-01 9.3170834176530959e-01 2.2928965798838172e-02 + 5.0382329944001758e-01 1.0444142024599898e+00 8.4531902982932131e-02 + 5.9346897833415690e-01 1.1414356913582397e+00 1.6129899126817915e-01 + 6.9421693207459501e-01 1.2192693178718894e+00 2.4425710739769702e-01 + 8.0737162168749066e-01 1.2791125696689174e+00 3.2614494152366175e-01 + 9.3191425231293623e-01 1.3237700689539134e+00 4.0389406120179322e-01 + 1.0652906901028658e+00 1.3551585680856357e+00 4.8095518944664761e-01 + 1.2036745043490109e+00 1.3724257956698904e+00 5.6142595574634524e-01 + 1.3389811040547748e+00 1.3732705492433215e+00 6.3599289701864392e-01 + 1.4570554465587717e+00 1.3578281497682902e+00 6.8147326867905700e-01 + 1.5433432176468798e+00 1.3275610980961923e+00 6.8314783484379116e-01 + 1.5941426664795486e+00 1.2823825593694966e+00 6.5436374594912095e-01 + 1.6204961304694054e+00 1.2235622450574914e+00 6.2306405743883841e-01 + 1.7583904765675773e+00 1.1605933904625410e+00 7.5974718084033532e-01 + id 14821 + loc 3.2256075739860535e-01 2.0272341370582581e-01 404 + blend 0.0000000000000000e+00 + interp 4.1241899744539784e-01:2.6072590890880765e-01:4.5561877444746268e-02:2.8047086228193874e-01:1.0227851887378421e+00:3.3347787226765985e-01:1.9202184723211735e+00:4.1241487325542342e-01:2.2414404445448355e+00:2.7306602753884834e-01:2.9394929262312455e+00:2.9474236672344434e-01:3.4296221125262658e+00 + CVs 20 + -1.2467889683728534e-01 1.3584441476200748e-01 -1.1537769922431156e-01 + -2.7017498028647569e-01 2.8199537970619160e-01 -2.2776983751277310e-01 + -4.3081078051439237e-01 4.4046679211506023e-01 -3.3925346744154905e-01 + -6.0415908779673511e-01 6.1487667923013600e-01 -4.4812406613464434e-01 + -7.9072522564227898e-01 8.0782249522594995e-01 -5.4722484080188472e-01 + -9.9404087858168877e-01 1.0178909126327684e+00 -6.2277462231408642e-01 + -1.2176930997967026e+00 1.2378661533819930e+00 -6.5561400528122959e-01 + -1.4582342522018701e+00 1.4560232553410888e+00 -6.2968698319298688e-01 + -1.7046126832043154e+00 1.6591493028974091e+00 -5.3766125093918393e-01 + -1.9439017665519809e+00 1.8332729062292648e+00 -3.7905832489897606e-01 + -2.1661722330030964e+00 1.9653474838803857e+00 -1.6156022865726061e-01 + -2.3609723761201358e+00 2.0420183991522896e+00 1.0335286855010861e-01 + -2.5211647491525708e+00 2.0586652557745073e+00 3.9682102183427070e-01 + -2.6360171050822392e+00 2.0235038844705402e+00 7.0280674513204655e-01 + -2.6830158146390755e+00 1.9652869455946438e+00 1.0127425826800680e+00 + -2.6388517844238666e+00 1.9101817409578179e+00 1.3208880805734831e+00 + -2.5073333593726561e+00 1.8380136109375553e+00 1.6081164924078424e+00 + -2.3255002811059873e+00 1.6985751616395772e+00 1.8469432707928990e+00 + -2.3240313322298531e+00 1.6711089677080548e+00 2.0609328911137501e+00 + id 14822 + loc 1.4375844597816467e-01 5.9582918882369995e-01 394 + blend 0.0000000000000000e+00 + interp 4.6875655282186929e-01:2.7530898873591497e-01:3.6734653147628693e-03:4.4511535799269664e-01:8.1028740857945869e-01:4.6310516703220678e-01:1.2977205266022982e+00:4.1463610925409666e-01:2.0002115634621047e+00:4.6875186525634110e-01:2.5322409669755599e+00:2.7499215158478518e-01:3.2693853437647786e+00 + CVs 20 + -2.3608551708131603e-01 1.5108909482787955e-01 -1.5429675974648047e-02 + -4.7117582678178593e-01 3.1163548360950633e-01 -2.8700603434371391e-02 + -6.9994717889495650e-01 4.8342557856281237e-01 -2.6178129514211335e-02 + -9.2607262484665231e-01 6.8015680193699890e-01 -1.9234576529840730e-03 + -1.1555929764574835e+00 9.1692342185401066e-01 4.0046287031979044e-02 + -1.3995907225725701e+00 1.2079716149260138e+00 8.3703538574076697e-02 + -1.6604215376399731e+00 1.5418964858457571e+00 9.9326527237487694e-02 + -1.9261105938753369e+00 1.8796833011261478e+00 6.7140267620772853e-02 + -2.2058999276234670e+00 2.2092625634749514e+00 -1.9248442882097705e-02 + -2.5535539533811109e+00 2.5450355767248825e+00 -1.9415412689004308e-01 + -3.0037961426166557e+00 2.8392706031095765e+00 -5.1872677663707600e-01 + -3.4913943306402277e+00 2.9730910762417579e+00 -9.9154566128279242e-01 + -3.9114249545329161e+00 2.8877733422239933e+00 -1.5089672505846274e+00 + -4.2194204290999835e+00 2.6316427534021805e+00 -1.9664555730574864e+00 + -4.4248223213700495e+00 2.3059100907276404e+00 -2.3199319366102453e+00 + -4.5508790348524810e+00 2.0514142568270257e+00 -2.5489777151253756e+00 + -4.6116961892020321e+00 1.9951839712427990e+00 -2.6532717383276543e+00 + -4.6482812975214900e+00 2.0369506528022527e+00 -2.7180949043995275e+00 + -4.9156428799829754e+00 1.7570300376996215e+00 -2.9307551964077905e+00 + id 14823 + loc 2.9160967469215393e-01 6.6739541292190552e-01 405 + blend 0.0000000000000000e+00 + interp 4.6849666667635526e-01:4.2239290033560134e-01:1.3412223681913127e-01:3.7089322313648476e-01:1.0392798597485515e+00:4.6849198170968853e-01:1.6066701975812712e+00:3.6538509683550741e-01:2.0000920121983068e+00:3.8253227711824395e-01:2.9440392826501389e+00:3.5766889120259504e-01:3.6227048795554526e+00 + CVs 20 + 1.3522861214040596e-01 2.4363484444987241e-01 2.5595012477197119e-02 + 1.5901863453254783e-01 4.1081704960353360e-01 4.3677491392071992e-02 + 1.5507888538766978e-01 5.4458518433528991e-01 6.9752026105775161e-02 + 1.5664111347842738e-01 6.6849769905499656e-01 1.1221555395340110e-01 + 1.6153581760669189e-01 7.8083205848731341e-01 1.7328845895361017e-01 + 1.6886096518791321e-01 8.7941836100548820e-01 2.5459072787483905e-01 + 1.7902875120148021e-01 9.6166680657435477e-01 3.5642484698221322e-01 + 1.9377116029377145e-01 1.0254971753980995e+00 4.7766847095726073e-01 + 2.1593078766119705e-01 1.0699015879245639e+00 6.1660194850466643e-01 + 2.4897863532222297e-01 1.0948166676619973e+00 7.7151056078834712e-01 + 2.9675546185392931e-01 1.1007403395012876e+00 9.4141329523543105e-01 + 3.6275735160286443e-01 1.0875219588145950e+00 1.1258000720221530e+00 + 4.4828842080547815e-01 1.0534419166631750e+00 1.3208120147940028e+00 + 5.5227693780140819e-01 9.9897203159707515e-01 1.5167248767077650e+00 + 6.7459534229554197e-01 9.3321625631246619e-01 1.7045988666061420e+00 + 8.1818485617033687e-01 8.7197981181215278e-01 1.8830597816072188e+00 + 9.8640874937478029e-01 8.2817739514344413e-01 2.0534736969215119e+00 + 1.1817152595666018e+00 8.0704011948003385e-01 2.2202367610730440e+00 + 1.4264447308060879e+00 7.9347238398245168e-01 2.4507564732353995e+00 + id 14824 + loc 7.0196700096130371e-01 1.8192620575428009e-01 1079 + blend 0.0000000000000000e+00 + interp 3.1510102548248603e-01:2.5898287047010426e-01:3.2198639839138510e-02:3.1259016343767182e-01:7.5857309850934085e-01:2.2935844955196050e-01:1.8633274979880379e+00:3.0426795313308475e-01:2.7218401917810020e+00:3.1509787447223120e-01:3.2064229184545541e+00 + CVs 20 + -1.5756210357036615e-02 3.8323466135181483e-01 -9.2666146790062520e-02 + -3.2952204021770015e-02 7.2561750817219606e-01 -1.1915995436253940e-01 + -5.2243747591944834e-02 1.0525933468696405e+00 -1.1634786715288375e-01 + -7.7223797352955481e-02 1.3733023507727662e+00 -9.6193771144592155e-02 + -1.1855627991101103e-01 1.6859963682463097e+00 -4.7736247333823312e-02 + -1.9015982309950374e-01 1.9836086987117794e+00 4.2428351610117376e-02 + -3.0712836520371112e-01 2.2482238321368779e+00 1.8836196523770299e-01 + -4.7766841404083038e-01 2.4503548983230092e+00 3.9346074541568032e-01 + -6.9595067376259689e-01 2.5611425083391639e+00 6.4238680589581265e-01 + -9.4081081374526665e-01 2.5668995018399619e+00 9.0929861731828110e-01 + -1.1846834376475961e+00 2.4725047636283830e+00 1.1755767478798704e+00 + -1.4009121528181110e+00 2.2894568957484642e+00 1.4324541153137427e+00 + -1.5596564166288638e+00 2.0327162787308262e+00 1.6711727462144061e+00 + -1.6252900190140751e+00 1.7292264225988361e+00 1.8800671111626501e+00 + -1.5643704873085416e+00 1.4343189755170762e+00 2.0413549002286429e+00 + -1.3874028201761561e+00 1.2302559509975199e+00 2.1390529995281367e+00 + -1.1671522724698895e+00 1.1682966910721482e+00 2.1831592452774720e+00 + -9.4039033872787958e-01 1.2032998305973612e+00 2.2097764138241556e+00 + -5.3088031199665275e-01 1.1291789871025195e+00 2.3138763078807942e+00 + id 14825 + loc 1.9537554681301117e-01 7.0814764499664307e-01 404 + blend 0.0000000000000000e+00 + interp 4.0139555679215816e-01:2.8874370885960088e-01:1.8148022456212065e-01:2.6960166630789772e-01:1.2245026925578599e+00:2.6705231737116175e-01:2.0255582914014441e+00:2.7651803736463476e-01:2.8545775346860065e+00:4.0139154283659023e-01:3.5043298146992510e+00 + CVs 20 + 3.9386167661178972e-02 7.6848103292241732e-02 -5.0305432610368607e-03 + 9.2483035336049804e-02 1.4544253925476483e-01 -2.6701867050034786e-02 + 1.3914809071424500e-01 2.2738683375938351e-01 -3.9614492643746377e-02 + 1.7578521066618535e-01 3.1079075617073204e-01 -5.4243554890440908e-02 + 1.9979905870764242e-01 3.9344247518534592e-01 -7.5063839110760727e-02 + 2.0844006893427300e-01 4.7427010963438326e-01 -1.0399347389501137e-01 + 1.9964644627566766e-01 5.5103593814939611e-01 -1.4192424805447784e-01 + 1.7277328880752599e-01 6.2108857333719270e-01 -1.8772084158207242e-01 + 1.2954866359756534e-01 6.8475940844423089e-01 -2.3495684523657440e-01 + 7.3816414967534827e-02 7.4494053973929619e-01 -2.7604817539689736e-01 + 1.0229739511028790e-02 8.0430609573841849e-01 -3.0697401447148670e-01 + -5.6171606596171986e-02 8.6346463124256845e-01 -3.2870396486025621e-01 + -1.2008647270327999e-01 9.2581950287952686e-01 -3.4060678099474068e-01 + -1.7663733762819983e-01 9.9346866429182135e-01 -3.4413572440742901e-01 + -2.2034493391547888e-01 1.0675048484380549e+00 -3.4179480562879272e-01 + -2.4543098594704943e-01 1.1480827349536709e+00 -3.3614694125344924e-01 + -2.5352567057120057e-01 1.2290425137079160e+00 -3.3241110516448436e-01 + -2.5583759622698854e-01 1.3009305918759795e+00 -3.3429679089543118e-01 + -3.1521008364817060e-01 1.3399280803629399e+00 -3.2556868047678950e-01 + id 14826 + loc 7.6665079593658447e-01 5.4505777359008789e-01 394 + blend 0.0000000000000000e+00 + interp 4.6767485379773699e-01:3.5986458494130025e-01:2.4086808940261473e-01:4.6767017704919905e-01:9.7852250396509377e-01:2.5510397726009576e-01:1.8588805863912370e+00:2.7096064853746071e-01:2.4653493040490986e+00:2.6613433916544682e-01:3.0134737695353286e+00:4.2881685658411212e-01:3.9642517533006054e+00 + CVs 20 + -2.8466132368602148e-01 2.4040823319504123e-01 -2.5847556899697943e-01 + -5.6166462696956776e-01 4.5879861678694117e-01 -4.9886420319656033e-01 + -8.5174432950222168e-01 6.6731241942684427e-01 -7.3897517808286572e-01 + -1.1626977249004367e+00 8.7066581567373857e-01 -9.9325929105972999e-01 + -1.4923237508301948e+00 1.0636754782168931e+00 -1.2708008390011989e+00 + -1.8421990045122345e+00 1.2390256644238824e+00 -1.5741256669942731e+00 + -2.2158076222830494e+00 1.3855729583887064e+00 -1.9028778903788877e+00 + -2.6111301974786736e+00 1.4812168228828742e+00 -2.2583266083593787e+00 + -3.0206585953181539e+00 1.4972901388460755e+00 -2.6308705682158204e+00 + -3.4371807794128153e+00 1.4173973693951203e+00 -2.9912261701178924e+00 + -3.8518866236411400e+00 1.2492353914637517e+00 -3.3160203916020023e+00 + -4.2520163802318294e+00 1.0156498549371804e+00 -3.6096987183496010e+00 + -4.6277196449456639e+00 7.4157474735246831e-01 -3.8757803866700056e+00 + -4.9789792722947119e+00 4.5579120706208176e-01 -4.0885990960904746e+00 + -5.3080287764421907e+00 1.8038357026387697e-01 -4.2188761031017936e+00 + -5.6020775324192034e+00 -9.6087606924209812e-02 -4.2640331203213462e+00 + -5.8438566027900407e+00 -3.9796245353335857e-01 -4.2421340427689973e+00 + -6.0478927518180647e+00 -7.0405813885197688e-01 -4.2014501837401790e+00 + -6.3088641422511929e+00 -9.1584254638265206e-01 -4.3413571558510977e+00 + id 14827 + loc 4.8217132687568665e-01 1.2797074019908905e-01 405 + blend 0.0000000000000000e+00 + interp 4.7582456570526749e-01:3.4535079980464278e-01:1.0557267547973370e-02:3.2137952057519309e-01:8.3036787104105314e-01:3.6113276342655531e-01:1.4846215232221445e+00:4.7581980745961044e-01:2.0034420004518068e+00:3.5571286880766551e-01:2.5188003113678166e+00:3.7363367585604312e-01:3.1784542405448901e+00 + CVs 20 + 8.5706971825258341e-02 1.6636644518015628e-01 8.6221962686342593e-02 + 1.5744286731678206e-01 3.2104682953028446e-01 1.9176162452294010e-01 + 2.3838707979946250e-01 4.5735834090507360e-01 2.9388649272828715e-01 + 3.3116267971346380e-01 5.7692090655201134e-01 3.9343294585521810e-01 + 4.3435037479069954e-01 6.7820702243097530e-01 4.8563703145965076e-01 + 5.4479934666114638e-01 7.6089136304530003e-01 5.6422447930212360e-01 + 6.5697404959813577e-01 8.2636549922517355e-01 6.2499492377369892e-01 + 7.6388237205813958e-01 8.7685495212057962e-01 6.6688445010640363e-01 + 8.5822818263068057e-01 9.1443370016864134e-01 6.9130507525378271e-01 + 9.3357592461276939e-01 9.4085352481276430e-01 7.0259747365307434e-01 + 9.8624766812650966e-01 9.5729487735431595e-01 7.0832401547444546e-01 + 1.0181139939959110e+00 9.6465022410978674e-01 7.1884226355875969e-01 + 1.0339418863815679e+00 9.6390321644166899e-01 7.4205422740025417e-01 + 1.0313344931773749e+00 9.5265169280108197e-01 7.7749141510983855e-01 + 9.9979989212367004e-01 9.1983475503862289e-01 8.2454977420245035e-01 + 9.4113234872613594e-01 8.4695112257934324e-01 8.8848807787512907e-01 + 8.8283890646391938e-01 7.2460748851374568e-01 9.7105354454886095e-01 + 8.5703309373325098e-01 5.6343032105008106e-01 1.0607849922982731e+00 + 9.1891662172816835e-01 4.7168531562722726e-01 1.0277731054461781e+00 + id 14828 + loc 7.6657533645629883e-01 1.3383752107620239e-01 394 + blend 0.0000000000000000e+00 + interp 3.9693547777430854e-01:2.4725474418367338e-01:2.5172985148612437e-02:3.4444742420576596e-01:9.9907490263845578e-01:3.9693150841953084e-01:1.6372999009122871e+00:3.2520062143765416e-01:2.2102656800789555e+00:2.5101064628618891e-01:3.1724872301039868e+00 + CVs 20 + 2.9526917167676203e-01 2.9821090605124134e-01 2.4634337224323721e-01 + 5.9633954955246415e-01 5.6653934647665249e-01 4.2096470753928206e-01 + 8.9161747478650732e-01 8.2335934938956501e-01 5.7466997601013126e-01 + 1.1769325114954872e+00 1.0792124468969251e+00 7.3271305813555820e-01 + 1.4525098399504799e+00 1.3357282205287093e+00 9.0908616633910277e-01 + 1.7195320001470316e+00 1.5857720106784396e+00 1.1151369453514857e+00 + 1.9812219620629192e+00 1.8165711038812593e+00 1.3587060646768150e+00 + 2.2389540059825466e+00 2.0141476067665840e+00 1.6430120332695974e+00 + 2.4907909866162528e+00 2.1664987800082010e+00 1.9683170978809306e+00 + 2.7314453487848915e+00 2.2625350482681452e+00 2.3275590179337335e+00 + 2.9610231895860664e+00 2.2933425058687251e+00 2.7112457451996557e+00 + 3.1856761737935448e+00 2.2462463263792509e+00 3.1103051407935660e+00 + 3.4033713148083224e+00 2.0992935883969182e+00 3.5024597472643761e+00 + 3.5988679659259448e+00 1.8400577731768109e+00 3.8431873316364089e+00 + 3.7692640085510467e+00 1.4927430487083932e+00 4.1084433703189642e+00 + 3.9352609223885029e+00 1.1166569449118926e+00 4.3251680400732013e+00 + 4.1147399704523906e+00 7.9794108750216974e-01 4.5125383500635881e+00 + 4.3162893193023137e+00 5.9502364574490407e-01 4.6531186491198948e+00 + 4.6600551272968032e+00 3.2492966646631727e-01 4.8841480400723274e+00 + id 14829 + loc 3.8589736819267273e-01 2.6559755206108093e-01 404 + blend 0.0000000000000000e+00 + interp 3.0149438029675507e-01:2.8494601877546288e-01:9.5108535517619863e-01:2.9474236672344434e-01:1.4244462769455495e+00:2.6370798697448894e-01:2.0238772599937276e+00:3.0149136535295212e-01:3.1235987970132943e+00:2.5979356195468190e-01:3.9929091965339767e+00 + CVs 20 + -9.7865776042190572e-02 1.6112871611310453e-01 -1.5703158058336322e-01 + -1.9464181018194493e-01 3.1392506961962169e-01 -2.9786109699812702e-01 + -2.8861967157960944e-01 4.6394877923446087e-01 -4.3120553049722643e-01 + -3.8256624863483940e-01 6.1674892321038344e-01 -5.5899102807888590e-01 + -4.7947241227147297e-01 7.7491470469233292e-01 -6.7844924755743674e-01 + -5.8435675263882558e-01 9.4062514422718146e-01 -7.8605698803567592e-01 + -7.0078756466291114e-01 1.1132726035453226e+00 -8.7686788294986029e-01 + -8.2817343205478011e-01 1.2887832091441100e+00 -9.4586066599867613e-01 + -9.6436170889043815e-01 1.4632484996642767e+00 -9.9070186979414465e-01 + -1.1078863190551378e+00 1.6347367237824391e+00 -1.0111065226932325e+00 + -1.2585596384466657e+00 1.8026659565851861e+00 -1.0077197480504485e+00 + -1.4137199722670779e+00 1.9634388097220299e+00 -9.8176924843858759e-01 + -1.5683562646312998e+00 2.1112400922304628e+00 -9.3673951519258458e-01 + -1.7170496062365688e+00 2.2343045017102785e+00 -8.8623697191696293e-01 + -1.8640408237971018e+00 2.3231790570856452e+00 -8.5022539467485270e-01 + -2.0291965890756289e+00 2.3939361111394390e+00 -8.2392437575922239e-01 + -2.2213667525620635e+00 2.4872509116792636e+00 -7.6423177832597566e-01 + -2.4136565843249156e+00 2.5999900186764204e+00 -6.4886437509304207e-01 + -2.4192340786834374e+00 2.5809733248463140e+00 -5.8237125509679544e-01 + id 14830 + loc 7.0215374231338501e-01 3.6771735548973083e-01 405 + blend 0.0000000000000000e+00 + interp 3.8249684306112042e-01:3.3976889915964925e-01:2.4999351790058610e-01:3.4353246216422628e-01:9.9992777105675068e-01:2.6791076881148035e-01:1.9026121281940305e+00:3.5026652040708633e-01:2.2956751253441063e+00:3.8249301809268982e-01:2.9937981387828092e+00:3.5850816210711051e-01:3.5931162680663258e+00 + CVs 20 + 6.2796304506978179e-02 1.7484966712528441e-01 3.4803558629186689e-03 + 1.7143500137076190e-01 2.7483711781281528e-01 -3.7582758617977947e-03 + 2.9273317836626200e-01 3.4322792209036945e-01 -1.7080563703597968e-02 + 4.0419529969920381e-01 3.8420361668688169e-01 -3.4915855099715801e-02 + 5.0037790287848405e-01 3.9571336791773171e-01 -5.3046131649888272e-02 + 5.7722426317088871e-01 3.8007965183430059e-01 -6.3725904216624843e-02 + 6.3588531381369306e-01 3.4588197594796738e-01 -5.7523740987795127e-02 + 6.8659864815564320e-01 3.0719962286838531e-01 -2.9131326840065759e-02 + 7.4626944709944931e-01 2.7749243096505061e-01 1.6449266986690969e-02 + 8.3025760463031206e-01 2.6316273301230936e-01 6.4232962754468159e-02 + 9.4531088446101807e-01 2.6331525024261465e-01 9.8293563978421733e-02 + 1.0894438211976498e+00 2.7522374561470725e-01 1.1026890454724661e-01 + 1.2598284621622866e+00 2.9476176020179867e-01 9.4454239988498834e-02 + 1.4573219339594479e+00 3.0660537303994062e-01 3.1852537656014979e-02 + 1.6783386070868560e+00 2.8351052057126680e-01 -1.0714838597838743e-01 + 1.9050306166595230e+00 2.1597047385114121e-01 -3.4152602077301297e-01 + 2.1105679230453602e+00 1.3528655322633742e-01 -6.6216246059068806e-01 + 2.2778295855745356e+00 8.5533782991239926e-02 -1.0306726576809089e+00 + 2.4306401982854857e+00 1.6633171445675643e-01 -1.1694110076878390e+00 + id 14831 + loc 4.9178537726402283e-01 6.2453347444534302e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927576418733897e-01:3.3942209084615926e-01:6.8573073624793923e-02:2.5733197226422949e-01:1.0082171472032231e+00:4.0282294070824165e-01:1.5033132956548099e+00:4.7927097142969710e-01:2.0970276777800030e+00:4.3618419578518153e-01:2.9048655065171660e+00:4.0930991646025200e-01:3.5893199527497499e+00 + CVs 20 + -1.5527998178050084e-01 2.4409333280458623e-01 -3.7224526201784036e-01 + -3.0529335052339102e-01 4.8716474239685725e-01 -7.1521444198638873e-01 + -4.4943338179279080e-01 7.4809665012911286e-01 -1.0376310189506315e+00 + -5.8743470255663155e-01 1.0330398675941517e+00 -1.3434518723469466e+00 + -7.1828683984210817e-01 1.3330035526879080e+00 -1.6369596075048558e+00 + -8.4614287833180990e-01 1.6320808111774729e+00 -1.9308779989638460e+00 + -9.7978112327249012e-01 1.9165549229426846e+00 -2.2404545119830952e+00 + -1.1303746453983441e+00 2.1790543292830629e+00 -2.5746764094552317e+00 + -1.3027705687414532e+00 2.4034072117582230e+00 -2.9389845377630559e+00 + -1.4851965498815189e+00 2.5494513806947046e+00 -3.3428939886100455e+00 + -1.6560927253288842e+00 2.5693101927597617e+00 -3.7885601638043043e+00 + -1.8056836773067868e+00 2.4388773923289726e+00 -4.2546446250181251e+00 + -1.9362556934750355e+00 2.1598748405557129e+00 -4.7043471678712283e+00 + -2.0482585417471495e+00 1.7743595061958410e+00 -5.1005183127305251e+00 + -2.1626072528356790e+00 1.3603150246897711e+00 -5.4388707956356921e+00 + -2.3385774848897078e+00 9.6724270219122443e-01 -5.7396660764859995e+00 + -2.6506638061832319e+00 6.3467540735028560e-01 -6.0055701206467145e+00 + -3.0814837355295301e+00 4.2236979464376612e-01 -6.2165806632046916e+00 + -3.3195423062789251e+00 2.6958060000031603e-01 -6.4188058917208313e+00 + id 14832 + loc 4.2802557349205017e-01 7.8814244270324707e-01 405 + blend 0.0000000000000000e+00 + interp 4.4481423163447598e-01:3.5505611393569952e-01:3.9852405370042199e-02:4.4480978349215966e-01:9.7326779562046994e-01:2.9755082195483934e-01:1.5470453031208558e+00:3.4689457273597307e-01:2.0817503107258206e+00:3.5488222048796636e-01:3.1373587364358020e+00 + CVs 20 + 6.3215364895715997e-02 2.1180129029328665e-01 8.0188125839449870e-02 + 2.7346689487636119e-02 2.7350668057272071e-01 1.3855024760544185e-01 + -7.2318521216460097e-02 3.1681919387283775e-01 1.7414715736114164e-01 + -1.6945912762193202e-01 3.4505196734052751e-01 1.7479087710754304e-01 + -2.6468698042219324e-01 3.6727460546759300e-01 1.2657020028755508e-01 + -3.5715152821492091e-01 4.0999590178328915e-01 2.7299687616096011e-02 + -4.4521054821766348e-01 5.0340745904838868e-01 -9.0675846033724805e-02 + -5.2892269682569792e-01 6.4809905234542131e-01 -1.6891774223951719e-01 + -6.0765685919383294e-01 8.1300317163409030e-01 -1.6650109044743819e-01 + -6.7692354731638849e-01 9.6765546700847127e-01 -7.4542587536265595e-02 + -7.2738266580417588e-01 1.0980802952627922e+00 9.8702771364687122e-02 + -7.4755155660766059e-01 1.1998253025032295e+00 3.4123923737740158e-01 + -7.3081086415475038e-01 1.2617006891982767e+00 6.4492223930480852e-01 + -6.7639896618903406e-01 1.2645972411618560e+00 1.0009671662954227e+00 + -5.7980170545038601e-01 1.2120885386525730e+00 1.3926997165371078e+00 + -4.2926249411287071e-01 1.1433486310184009e+00 1.7992811500571977e+00 + -2.1801501329407519e-01 1.0982566477133637e+00 2.1968894602183635e+00 + 4.4087836062746577e-02 1.0948791529498363e+00 2.5561312918272279e+00 + 3.2271907510503517e-01 1.1241573050444871e+00 2.8574699856675077e+00 + id 14833 + loc 9.4691276550292969e-02 8.1437671184539795e-01 394 + blend 0.0000000000000000e+00 + interp 3.3917132377701859e-01:3.0978820669380863e-01:9.8497770092099590e-02:3.3916793206378082e-01:8.6123419476929597e-01:2.6783616827192142e-01:1.9188322440749417e+00:3.2346527306413764e-01:2.5788530883173553e+00:2.5973226143739714e-01:3.6101520875777453e+00 + CVs 20 + -1.3452932838554027e-01 1.9609536698347180e-01 -1.5255148451897427e-01 + -2.7222569698142468e-01 4.0896579707608727e-01 -3.1150644310483777e-01 + -3.9889885313328682e-01 6.3187880658984441e-01 -4.6280269446982658e-01 + -5.1135109142103197e-01 8.5877013249907608e-01 -6.0152368122356259e-01 + -6.1210042330871040e-01 1.0831797429815821e+00 -7.2890725879126683e-01 + -7.0272170066650930e-01 1.2963463306792136e+00 -8.4729749630664597e-01 + -7.8505014114885407e-01 1.4914809448097293e+00 -9.6356664560828276e-01 + -8.6193249981924591e-01 1.6661028966523770e+00 -1.0862782167712979e+00 + -9.3667297846773090e-01 1.8216922322005091e+00 -1.2087878145734599e+00 + -1.0134184895529785e+00 1.9679784378645602e+00 -1.3045723745955522e+00 + -1.1001530367600372e+00 2.1266220564541305e+00 -1.3640711807621275e+00 + -1.2042488405978524e+00 2.3085896100410190e+00 -1.4302227163788559e+00 + -1.3203350117055479e+00 2.4801009685864774e+00 -1.5545647894009540e+00 + -1.4303663244658256e+00 2.5712144137033697e+00 -1.7325251107308357e+00 + -1.5055596346444244e+00 2.5440452634602653e+00 -1.9151967082257673e+00 + -1.5026049058666542e+00 2.4148587036912423e+00 -2.0744012362464623e+00 + -1.3855710403068309e+00 2.1992240580707136e+00 -2.2148956367643566e+00 + -1.2482396298678888e+00 1.9168081884309833e+00 -2.3457034031567350e+00 + -1.4282300442487310e+00 1.7868052345707266e+00 -2.3604669149055564e+00 + id 14834 + loc 6.7619389295578003e-01 6.9510686397552490e-01 405 + blend 0.0000000000000000e+00 + interp 3.8319930325912482e-01:3.7746321811261191e-01:2.3603998054222775e-01:2.9970332984155523e-01:9.6429963133115060e-01:3.4237546814585368e-01:1.9929890417850364e+00:3.2992941378292034e-01:2.4755013718263301e+00:3.8319547126609227e-01:2.9994167645766625e+00:3.1469921520953026e-01:3.6963240784065245e+00 + CVs 20 + 1.2798954444899197e-01 2.6963270609353807e-01 -4.2137703202403350e-02 + 1.4155978335502337e-01 4.3523913503981149e-01 -6.7894584782237366e-02 + 1.1865700410465052e-01 5.5989091520100154e-01 -8.2739687887512833e-02 + 9.5237719453590997e-02 6.7020141048795745e-01 -8.8298369647761332e-02 + 7.0335517189176910e-02 7.6324416645803383e-01 -8.5868128581905734e-02 + 4.3747512765910324e-02 8.3763648723209949e-01 -7.9672676509967122e-02 + 1.4708271783317295e-02 8.9770517488203971e-01 -7.3624629655447943e-02 + -1.8791165097593099e-02 9.5104283521526889e-01 -6.0361516767851058e-02 + -5.7486046568421711e-02 9.9342283066876369e-01 -2.3090588069590065e-02 + -9.9590170289002078e-02 1.0119959425474292e+00 4.5128284595516571e-02 + -1.4194510397959936e-01 9.9929283275937564e-01 1.4045048401967103e-01 + -1.8135889447733688e-01 9.5269079671687162e-01 2.5633939192348687e-01 + -2.1566551447376439e-01 8.6668397533300490e-01 3.9068505111158613e-01 + -2.4002432498174919e-01 7.3033895617536637e-01 5.5189211739784461e-01 + -2.4014260806855306e-01 5.4199414906408039e-01 7.5613476779456223e-01 + -1.9584400821790598e-01 3.2446447180134191e-01 1.0115532319542564e+00 + -9.5617305895128721e-02 1.0966010937451406e-01 1.3076619691379185e+00 + 5.5623650248397882e-02 -8.1132603907603698e-02 1.6222637910724480e+00 + 1.6423112674825860e-01 -2.4447787892859729e-01 1.8564935087387833e+00 + id 14835 + loc 4.0261614322662354e-01 8.1550872325897217e-01 394 + blend 0.0000000000000000e+00 + interp 5.0135244526253808e-01:4.6074092730963079e-01:3.7334070323025381e-02:4.8199985598512424e-01:8.2548504303933856e-01:4.0918285293680939e-01:1.3740249961135713e+00:4.5792330778007589e-01:2.0570370993067719e+00:4.6260112220519545e-01:2.8355933692478392e+00:5.0134743173808549e-01:3.0081773483889998e+00:4.3198223648149287e-01:3.3862326617010488e+00 + CVs 20 + -1.6329626940462755e-01 1.9522885595632539e-01 -2.2224937063801664e-01 + -3.2953198376434034e-01 4.0571061680892850e-01 -4.6290644309355811e-01 + -4.9214276554766623e-01 6.1696078448629654e-01 -7.0611612535904178e-01 + -6.4326091291513787e-01 8.1476626524632356e-01 -9.4697861740600964e-01 + -7.8082428263562464e-01 9.9256095078830142e-01 -1.1873126603894699e+00 + -9.0580253225913721e-01 1.1482558826620921e+00 -1.4265313286191001e+00 + -1.0188474749339504e+00 1.2791352462894399e+00 -1.6613158769242704e+00 + -1.1193527234687464e+00 1.3788364682153222e+00 -1.8863023649765063e+00 + -1.2087218530549757e+00 1.4430445448895506e+00 -2.0971487238352582e+00 + -1.2931053098735359e+00 1.4735398816220042e+00 -2.2955670544392461e+00 + -1.3795359393173938e+00 1.4728998242715750e+00 -2.4859035178196458e+00 + -1.4739137751829572e+00 1.4437213119641252e+00 -2.6673983329557389e+00 + -1.5812011865507261e+00 1.3889462408330444e+00 -2.8392728481852116e+00 + -1.7039084094663304e+00 1.3113080560052297e+00 -3.0039091618711447e+00 + -1.8398736394662973e+00 1.2196063498007184e+00 -3.1537215451331839e+00 + -1.9839158037443179e+00 1.1418881981953857e+00 -3.2671453931850198e+00 + -2.1385588048170532e+00 1.1049619603668281e+00 -3.3386707397265596e+00 + -2.3180723716648899e+00 1.0726463769523360e+00 -3.3721958516614783e+00 + -2.5299123715207514e+00 8.9561659352996736e-01 -3.2937724699809845e+00 + id 14836 + loc 7.5400161743164063e-01 4.4990557432174683e-01 405 + blend 0.0000000000000000e+00 + interp 3.9893805786499542e-01:3.3977625058158145e-01:9.2693115847767071e-02:3.6885857531664407e-01:9.6934651414639217e-01:3.3912495317201558e-01:1.7345657702039410e+00:3.3976889915964925e-01:2.2468972518044765e+00:3.9893406848441682e-01:2.9976108385254197e+00:3.4993222747923103e-01:3.6244084326486572e+00 + CVs 20 + -7.2261137177353163e-02 1.5454379208241753e-01 7.6343128841799654e-02 + -1.0199466872793041e-01 2.9015355566146239e-01 1.5562323681171561e-01 + -1.0637674990300949e-01 4.0164177901692999e-01 2.3248658504352432e-01 + -1.1008272894601701e-01 5.2863138496522166e-01 3.0927719958489036e-01 + -1.0607037646370071e-01 6.7820507027321031e-01 3.8136411177546503e-01 + -8.4358203891437555e-02 8.5665451037374019e-01 4.3974396081182332e-01 + -3.4236597072988095e-02 1.0658711478171123e+00 4.6764630663849238e-01 + 4.7409888995280203e-02 1.2944835141313444e+00 4.4157991853848760e-01 + 1.4574532547880181e-01 1.5161412114747077e+00 3.4508486376430536e-01 + 2.3116827439644216e-01 1.7041363457395688e+00 1.8528502008915085e-01 + 2.7906383570722837e-01 1.8494802573982991e+00 -1.4284074889007098e-02 + 2.7890715590330739e-01 1.9574146696887684e+00 -2.3653970118434348e-01 + 2.2729225457372604e-01 2.0339806511811012e+00 -4.7136907157479357e-01 + 1.2373043659487404e-01 2.0872092483791302e+00 -6.9184488664480093e-01 + -2.3441315504118876e-02 2.1396151907704435e+00 -8.4242715604346252e-01 + -1.8966253915798115e-01 2.2179488491177501e+00 -8.6643953292907383e-01 + -3.4273343402546164e-01 2.3193859088022428e+00 -7.5487628924302697e-01 + -4.6353155141467561e-01 2.4169363221890441e+00 -5.4446940707602387e-01 + -7.1808420145082297e-01 2.4913179205267673e+00 -5.4194924262496202e-01 + id 14837 + loc 9.1879796981811523e-01 7.5293171405792236e-01 394 + blend 0.0000000000000000e+00 + interp 4.4534835952226076e-01:3.1691996384486382e-01:1.7718681003443537e-03:3.0624743456360887e-01:9.1328100308179305e-01:4.1828497889100102e-01:1.1114369602710314e+00:2.5098754953806884e-01:1.9808098187625141e+00:4.0544296772603583e-01:2.4933023829845506e+00:4.4534390603866558e-01:3.1223694088063789e+00 + CVs 20 + -1.5618135677702766e-01 2.4676423912874848e-01 -4.7743038317151898e-01 + -2.9036511991806874e-01 4.6277109430248781e-01 -9.1604504872615156e-01 + -3.9926175278312720e-01 6.5843528879534241e-01 -1.3285820698923116e+00 + -4.9221479668724222e-01 8.3760049085356114e-01 -1.7169764332183663e+00 + -5.8538584456076004e-01 1.0037070103441517e+00 -2.0788732425975667e+00 + -6.9912549643306576e-01 1.1633804352870820e+00 -2.4146581144198422e+00 + -8.4479498337859704e-01 1.3146281603624339e+00 -2.7219692898012786e+00 + -1.0275328051650601e+00 1.4502237620359895e+00 -3.0030338532707823e+00 + -1.2564686293129039e+00 1.5679905513358448e+00 -3.2716621108836570e+00 + -1.5381370785309996e+00 1.6662505164378640e+00 -3.5389667141708503e+00 + -1.8674323827225696e+00 1.7425860600564316e+00 -3.8017969896001027e+00 + -2.2359732995603037e+00 1.7958773702725503e+00 -4.0574844216525472e+00 + -2.6360860424604358e+00 1.8213334995108428e+00 -4.3108073224225496e+00 + -3.0532625877081583e+00 1.8150341484837849e+00 -4.5586217683737553e+00 + -3.4781920146118637e+00 1.7744864225022483e+00 -4.7912461463110505e+00 + -3.9254791833464848e+00 1.6793381457924057e+00 -5.0140083460621021e+00 + -4.4038600180170970e+00 1.4958902450321450e+00 -5.2200875925491133e+00 + -4.8654561701775760e+00 1.2420571268196214e+00 -5.3516481011800021e+00 + -5.2189571411622504e+00 1.0303705374693131e+00 -5.3263631164547487e+00 + id 14838 + loc 5.1597386598587036e-01 4.5042428374290466e-01 405 + blend 0.0000000000000000e+00 + interp 3.6895800468143353e-01:3.2972553981284386e-01:1.8963458494278185e-01:3.4851901598906215e-01:1.0001153008133554e+00:3.6895431510138671e-01:1.7111979437437141e+00:3.3223820980815538e-01:2.1550117947827934e+00:2.9839452495218366e-01:2.9958928437765850e+00:3.2194096208475381e-01:3.6568718116642338e+00 + CVs 20 + 2.8864902266760251e-02 2.0100629024735014e-01 -2.9196732318645450e-02 + 1.3493594341387893e-01 3.2140850072887683e-01 -6.0673191404427909e-02 + 2.6482471881213032e-01 4.1783320656230405e-01 -1.0382115134027826e-01 + 3.9721023215077467e-01 4.8502462690392634e-01 -1.6297845713554557e-01 + 5.2757860645829835e-01 5.1191623228802252e-01 -2.3781190002625244e-01 + 6.4982169032022630e-01 4.9205045102846434e-01 -3.2292893015042973e-01 + 7.6023245289904895e-01 4.2807370649475218e-01 -4.0957435526810193e-01 + 8.6119982671093753e-01 3.3141686488741651e-01 -4.9246658885239036e-01 + 9.5899706981060673e-01 2.1384052247938962e-01 -5.7360829998740492e-01 + 1.0590884664697504e+00 8.1909489778133115e-02 -6.5912778309721387e-01 + 1.1628814934303515e+00 -6.3113305411178544e-02 -7.5308073498482764e-01 + 1.2683306194351862e+00 -2.2212541259064150e-01 -8.5060096322099477e-01 + 1.3725872158934209e+00 -3.9286369137827665e-01 -9.4412584123859522e-01 + 1.4708781436715088e+00 -5.6886092861124216e-01 -1.0486667624956179e+00 + 1.5500156314027134e+00 -7.4596064718768829e-01 -1.2122065923951792e+00 + 1.5856515572758521e+00 -9.1790953268742237e-01 -1.4781375847313245e+00 + 1.5557316374428143e+00 -1.0631685228493588e+00 -1.8325145915785337e+00 + 1.4578328968256473e+00 -1.1572422556211166e+00 -2.2179199141559760e+00 + 1.4376595922659514e+00 -1.2049685403651185e+00 -2.3473810208138657e+00 + id 14839 + loc 9.2008095979690552e-01 3.6917045712471008e-01 405 + blend 0.0000000000000000e+00 + interp 5.8191819090159380e-01:3.3039717195759255e-01:4.8769025608619954e-01:5.8191237171968480e-01:9.9500423857244746e-01:3.1904469838775779e-01:1.9513865980722258e+00:3.8525630525931565e-01:2.3513029579012681e+00:3.3031247707958672e-01:2.9952498826447136e+00:3.5846879384951857e-01:3.8517341044233322e+00 + CVs 20 + 6.5942210485156499e-02 2.0140797370369370e-01 -2.0676718140471180e-03 + 1.8685292510567236e-01 3.1280012097420268e-01 -3.3978551276157481e-02 + 3.2389900638650204e-01 4.0224750818075750e-01 -7.1791041430906616e-02 + 4.5618973046999928e-01 4.6456102453340775e-01 -1.1733492226972600e-01 + 5.7827512354178556e-01 4.9190306946410040e-01 -1.7293582118584278e-01 + 6.8026311625786873e-01 4.7776638978078190e-01 -2.3915056258873463e-01 + 7.4721455172924733e-01 4.1683798368985070e-01 -3.1290592507885706e-01 + 7.6245681440383506e-01 3.0943306084654532e-01 -3.8346415688297725e-01 + 7.1551322992878919e-01 1.6616890373584459e-01 -4.3080649059160114e-01 + 6.1552631475702646e-01 1.0044895908382201e-02 -4.3302008498705491e-01 + 4.9389588329800521e-01 -1.3322840974819067e-01 -3.8339299903460744e-01 + 3.8432856100817175e-01 -2.5010752592091401e-01 -2.9599366436444596e-01 + 3.0594924875609852e-01 -3.4055649142498789e-01 -1.9317206599280295e-01 + 2.6595056442395437e-01 -4.1070150582241516e-01 -1.0184459460013924e-01 + 2.6355123457484630e-01 -4.7130670219147164e-01 -6.5612974861333467e-02 + 2.8152543694023036e-01 -5.3122345325488463e-01 -1.3106058258392544e-01 + 2.8596865138391503e-01 -5.7679357312437585e-01 -3.1454333894738112e-01 + 2.4940583142614844e-01 -5.7439547241837585e-01 -5.7984553444879772e-01 + 2.8005927074873360e-01 -5.6522305619461766e-01 -7.6851668587951116e-01 + id 14840 + loc 1.6747309267520905e-01 6.9760143756866455e-02 394 + blend 0.0000000000000000e+00 + interp 6.2164618206702049e-01:4.4492749647912422e-01:7.5453905821856515e-02:2.5606983825767887e-01:9.2134488628227129e-01:6.2163996560519985e-01:1.6539320514637081e+00:5.2818970318938119e-01:2.0001323726233395e+00:3.9655959978668143e-01:2.9083072050128607e+00:2.8861961206815667e-01:3.1730701200899936e+00 + CVs 20 + -9.6468686440869908e-02 1.9648408145305873e-01 2.3498880437896374e-01 + -1.8514418662956972e-01 3.9312297682035069e-01 4.8521339014960252e-01 + -2.6107881194075144e-01 5.8043261009906288e-01 7.4346007734187958e-01 + -3.2509325214311102e-01 7.6052572778436578e-01 1.0076818392575086e+00 + -3.8377718681973971e-01 9.3771800518243364e-01 1.2680729971084783e+00 + -4.4349784088884636e-01 1.1100449588429246e+00 1.5160038002989369e+00 + -5.1215552221316729e-01 1.2711641493148509e+00 1.7573301339209495e+00 + -5.9654850822496130e-01 1.4130083660811903e+00 1.9999660068318748e+00 + -6.9614600583883135e-01 1.5280831534442143e+00 2.2391265130876397e+00 + -7.9952551436286168e-01 1.6127856219315688e+00 2.4593878815540382e+00 + -8.8432995093504529e-01 1.6745863714362290e+00 2.6464111175133169e+00 + -9.3504983011770704e-01 1.7313419030578123e+00 2.7991772708026001e+00 + -9.7034644942637616e-01 1.7643498520721390e+00 2.9419409213415326e+00 + -1.0169385440393186e+00 1.6743672312818165e+00 3.1074436660881908e+00 + -1.0751079683958102e+00 1.3961955495721501e+00 3.3087116718109160e+00 + -1.1515709747984906e+00 9.9596992186983013e-01 3.5435534368578496e+00 + -1.2361649895709965e+00 6.0549698570992971e-01 3.7918765412347790e+00 + -1.2922903787094637e+00 3.0232626443267407e-01 4.0559290347265433e+00 + -1.3065018486980451e+00 8.4740364537728929e-02 4.4147644354992011e+00 + id 14841 + loc 5.8061504364013672e-01 3.6167708039283752e-01 405 + blend 0.0000000000000000e+00 + interp 3.8249684306112042e-01:3.4212119318009471e-01:1.9705299192709558e-01:3.8249301809268982e-01:9.9343662078950046e-01:3.2559437043856571e-01:1.6544630010876196e+00:2.7457825125990659e-01:2.3060107306526594e+00:3.2909500445612755e-01:3.0005087348071875e+00:3.6895431510138671e-01:3.7159263449032141e+00 + CVs 20 + 2.4904065520335257e-02 1.5992634540963088e-01 1.0912607657106426e-02 + 1.0241518878939369e-01 2.7888726610397296e-01 3.0956884038835966e-02 + 2.0265196212761050e-01 3.8633680937607329e-01 5.3595683329781978e-02 + 3.1323957048638990e-01 4.9036671767728957e-01 7.1968441419782064e-02 + 4.3826620379034914e-01 5.8819850319008005e-01 7.7869058134560645e-02 + 5.8044834032778136e-01 6.7689374034058958e-01 6.1630193124451484e-02 + 7.3973073318735594e-01 7.5296492802326076e-01 1.4419388698112528e-02 + 9.1317255584996149e-01 8.1321687434936885e-01 -6.9168096384026656e-02 + 1.0962951285635918e+00 8.5552746943149272e-01 -1.9098889943088052e-01 + 1.2844409017131277e+00 8.7881239064715944e-01 -3.5030131726845948e-01 + 1.4732388452157137e+00 8.8154775839146149e-01 -5.4509642666741231e-01 + 1.6586906587854822e+00 8.5956648109308387e-01 -7.7051521522075084e-01 + 1.8367085046284468e+00 8.0862402376681686e-01 -1.0206186768823933e+00 + 1.9992082478910569e+00 7.3307934261303054e-01 -1.2973812422919462e+00 + 2.1297817340260394e+00 6.5023009892534323e-01 -1.6145855113937142e+00 + 2.2052838664955021e+00 5.8376851410640340e-01 -1.9856427107026862e+00 + 2.2060342534312976e+00 5.5167974772596340e-01 -2.4026955323465131e+00 + 2.1267899952401170e+00 5.6001532542380528e-01 -2.8377067096770907e+00 + 2.1376722233021375e+00 5.1670618549920533e-01 -3.1150292329678635e+00 + id 14842 + loc 9.0547770261764526e-01 3.5336518287658691e-01 394 + blend 0.0000000000000000e+00 + interp 5.5557965209024529e-01:3.9895268537396428e-01:3.9955255622886598e-03:5.2989954394122563e-01:6.6169173731204167e-01:5.5557409629372445e-01:9.7861897382123442e-01:2.3075053318794259e-01:1.5780700605907962e+00:4.4689128676662260e-01:2.0600985240083065e+00:3.8916031761763564e-01:2.6805731704725808e+00:4.6890754937688195e-01:3.0032753930478298e+00:3.4704132864197246e-01:3.4928765223219247e+00 + CVs 20 + 3.0913303730579911e-01 2.3862874290251396e-01 2.7981236928877246e-01 + 5.5752663113158940e-01 4.2055057333911200e-01 5.2746687640511558e-01 + 7.8176146879109543e-01 5.7611513748104981e-01 7.6589108284005225e-01 + 9.9306445067800819e-01 7.2129350764483569e-01 9.9969647108894377e-01 + 1.1883883457755493e+00 8.6124878491059698e-01 1.2267734732084730e+00 + 1.3705457804918764e+00 1.0022870604634213e+00 1.4493397399061376e+00 + 1.5481508022927091e+00 1.1543727303755396e+00 1.6662244320942174e+00 + 1.7334560843626319e+00 1.3290431885122711e+00 1.8765377976331954e+00 + 1.9386664904244606e+00 1.5266564874239177e+00 2.0970561626895590e+00 + 2.1712734386930759e+00 1.7286121663893930e+00 2.3544398380506095e+00 + 2.4387630182578635e+00 1.9048697329552600e+00 2.6533577643106590e+00 + 2.7477423707939455e+00 2.0271164759526830e+00 2.9732547686255431e+00 + 3.0880330609781703e+00 2.0785151896031415e+00 3.3007826705889554e+00 + 3.4318498959319581e+00 2.0533339081105693e+00 3.6409016690362499e+00 + 3.7694852435678046e+00 1.9581228123759304e+00 3.9972233448461747e+00 + 4.1313468312918236e+00 1.8038905726976577e+00 4.3642761109115842e+00 + 4.5328913133901647e+00 1.5814114532445718e+00 4.7109900173291344e+00 + 4.9143890451709700e+00 1.2815207165732541e+00 4.9524902007636893e+00 + 5.1401037068233393e+00 9.5352543977344562e-01 4.9169443388506160e+00 + id 14843 + loc 1.7914070188999176e-01 9.1876262426376343e-01 405 + blend 0.0000000000000000e+00 + interp 4.6511216878673761e-01:3.5085675589594856e-01:1.7554361023752052e-01:4.6510751766504976e-01:8.3166775276684668e-01:3.4091750108770763e-01:1.2445556558935329e+00:3.0860537884056655e-01:1.9510641295592688e+00:4.4570048315873056e-01:2.2727576758932719e+00:3.4069234076582733e-01:3.0373525078129915e+00:2.9578943078744685e-01:3.7926674370046811e+00 + CVs 20 + 2.2379924700401627e-01 2.7603488167512280e-01 6.6168538124453571e-02 + 2.9597627244493918e-01 4.2633226348111952e-01 1.1637135916101175e-01 + 3.1306172229531337e-01 5.3327960954545106e-01 1.6522135706479094e-01 + 3.3681489554211358e-01 6.2248087423709964e-01 2.1449873464496341e-01 + 3.6516204020098397e-01 6.9571460744864688e-01 2.6091984147672620e-01 + 3.9811944977701952e-01 7.5782844890766854e-01 3.0582395890788300e-01 + 4.3706256863029841e-01 8.1241445401067902e-01 3.5754156778945712e-01 + 4.8319757265003521e-01 8.5763136790921712e-01 4.2753372461171829e-01 + 5.3766970940453040e-01 8.8717000408508473e-01 5.2397888998934528e-01 + 6.0191366520319234e-01 8.9442454204463129e-01 6.4959878251684011e-01 + 6.7749831063535959e-01 8.7522024875030990e-01 8.0264017974804591e-01 + 7.6527195513100899e-01 8.2759180671396271e-01 9.7893414027032222e-01 + 8.6268485306219334e-01 7.4792163959139613e-01 1.1745251323719093e+00 + 9.6378519103906868e-01 6.2928789225677118e-01 1.3874523721769316e+00 + 1.0648193429033908e+00 4.7213312434301152e-01 1.6171232275317811e+00 + 1.1674392916298204e+00 2.9402472217599251e-01 1.8616584504658951e+00 + 1.2741506960680795e+00 1.1748086627361681e-01 2.1157131047960389e+00 + 1.3856977761077580e+00 -4.4249938003173450e-02 2.3731768814857221e+00 + 1.4933442488398887e+00 -1.7432846407773217e-01 2.6073100274871743e+00 + id 14844 + loc 5.6408238410949707e-01 4.2324760556221008e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927260421233370e-01:4.5267712083310407e-01:7.8752380713622339e-02:4.3924847521507804e-01:8.3746032567358775e-01:4.5905552933344557e-01:1.1165311716417452e+00:3.5467436880606451e-01:1.8222186429932763e+00:4.6316026201413663e-01:2.1135169516790895e+00:4.7926781148629161e-01:2.7486282051205810e+00:4.1891997990216923e-01:3.0693434022126049e+00:2.4764476344446970e-01:3.8457150630981687e+00 + CVs 20 + 3.6172647835481786e-01 2.6310905566762410e-01 2.0175556385164994e-01 + 6.9790836499490316e-01 4.7798593355630359e-01 3.6344024383078877e-01 + 1.0243549536675176e+00 6.7443996077528667e-01 5.0653050353946272e-01 + 1.3478840372480925e+00 8.7238488975875594e-01 6.4551544467523270e-01 + 1.6627059673458393e+00 1.0756595199779613e+00 7.8760732903324360e-01 + 1.9632987593358777e+00 1.2793205551757165e+00 9.4015257742320402e-01 + 2.2467117629814046e+00 1.4733250162274845e+00 1.1098972408165921e+00 + 2.5110968446152633e+00 1.6476231867186515e+00 1.2999246458025955e+00 + 2.7575760422431790e+00 1.7970743269720750e+00 1.5115161069577538e+00 + 2.9934656475118624e+00 1.9177860020461348e+00 1.7510032390689914e+00 + 3.2249628292699204e+00 1.9940249934229919e+00 2.0272077087542133e+00 + 3.4437942078772616e+00 1.9981233557231231e+00 2.3369445143255190e+00 + 3.6315059560398542e+00 1.9100854595713095e+00 2.6608203407463153e+00 + 3.7733640373462394e+00 1.7262337884618359e+00 2.9755116958727332e+00 + 3.8603239175022583e+00 1.4633794767227166e+00 3.2635615254444397e+00 + 3.8942742223213207e+00 1.1649167926417445e+00 3.5213151636440223e+00 + 3.9008940617859027e+00 8.7645648129821119e-01 3.7566629992316831e+00 + 3.9286799220403883e+00 6.0459243361595982e-01 3.9870971987684038e+00 + 4.0076576195195326e+00 2.8266389184966423e-01 4.2544095628101317e+00 + id 14845 + loc 2.5200113654136658e-01 4.8137682676315308e-01 394 + blend 0.0000000000000000e+00 + interp 4.5610204682230682e-01:3.0217121549553305e-01:5.9329616345603220e-01:3.0429262924189043e-01:1.1838355779007450e+00:4.5609748580183862e-01:1.9768482160239573e+00:3.4001969580437674e-01:2.2711264045911093e+00:3.0356928855236737e-01:2.9869063570490408e+00:3.0791424771226322e-01:3.7680022101807742e+00 + CVs 20 + -1.8712256258055371e-01 1.4205845186280383e-01 2.3023910099567280e-01 + -3.8797804269406605e-01 2.7012361018057796e-01 4.3568749223615694e-01 + -6.0104752187955923e-01 4.0092892817451398e-01 6.3465887021865464e-01 + -8.1962794507552750e-01 5.4336993806781753e-01 8.3633184049250064e-01 + -1.0358763395875552e+00 6.9424006046674669e-01 1.0357897874064907e+00 + -1.2435121275432324e+00 8.4222087256967304e-01 1.2249566902143159e+00 + -1.4456147032788444e+00 9.7550528015659643e-01 1.4005175407751957e+00 + -1.6554018739807017e+00 1.0878238008934922e+00 1.5674529597673783e+00 + -1.8754393868385264e+00 1.1725809463368093e+00 1.7284584678812900e+00 + -2.0784047066357862e+00 1.2188186375436383e+00 1.8688001472422651e+00 + -2.2279382396335770e+00 1.2211762575141725e+00 1.9590975405388982e+00 + -2.3137504645166880e+00 1.1949931936081519e+00 1.9865037832902124e+00 + -2.3590100813846013e+00 1.1593765897333759e+00 1.9703679942291448e+00 + -2.4065890930355840e+00 1.1006554015243573e+00 1.9474923057524751e+00 + -2.4986687256904343e+00 9.6341388847315090e-01 1.9495546689579504e+00 + -2.6497210373087992e+00 6.9870017912039217e-01 1.9989823393015245e+00 + -2.8564809227731911e+00 2.8533368250246105e-01 2.1534518394493687e+00 + -3.0799822727617272e+00 -2.0335398030239094e-01 2.4800381521061752e+00 + -3.2538114370990665e+00 -5.1668756825669937e-01 2.7102202786883720e+00 + id 14846 + loc 8.4390896558761597e-01 9.5080935955047607e-01 394 + blend 0.0000000000000000e+00 + interp 4.6243540956084467e-01:3.1335472545879772e-01:3.3922596057820664e-02:4.6243078520674907e-01:8.8191963556716768e-01:3.2137040417761054e-01:1.1941715644832742e+00:2.9990314291168441e-01:2.1244347312127241e+00:2.5998540783766072e-01:3.0009043296765139e+00:3.9081999552037450e-01:3.4686137994019974e+00 + CVs 20 + -2.1395041583342933e-01 1.4856421317400476e-01 -2.2473356931084196e-01 + -4.1439467452105305e-01 3.3220045725238906e-01 -4.7543759782795381e-01 + -6.1435655491403374e-01 5.3333039387863967e-01 -7.2917438374274557e-01 + -8.1490103113836732e-01 7.4005596625578329e-01 -9.7776142915953645e-01 + -1.0197761787994490e+00 9.4755686782804793e-01 -1.2224879023772985e+00 + -1.2328882636599541e+00 1.1514244546793446e+00 -1.4643426726530393e+00 + -1.4567872586744381e+00 1.3431563937388622e+00 -1.7095053663235795e+00 + -1.6936481179444773e+00 1.5065936500367696e+00 -1.9721205605284755e+00 + -1.9520351727039094e+00 1.6192567757073468e+00 -2.2642033354700049e+00 + -2.2464173080831102e+00 1.6518638596886157e+00 -2.5811630637087464e+00 + -2.5780066198454379e+00 1.5780380973494657e+00 -2.8977317472974047e+00 + -2.9276129426833295e+00 1.3984154135732447e+00 -3.1837431606139517e+00 + -3.2796951821347533e+00 1.1355518786553469e+00 -3.4224693518486342e+00 + -3.6324988889153058e+00 8.0917737899263464e-01 -3.6043281800235816e+00 + -3.9806815057237355e+00 4.2715314153271100e-01 -3.7247466268796723e+00 + -4.3026432589456070e+00 -1.6435424623042927e-02 -3.7913876151264536e+00 + -4.5726361710427241e+00 -5.2012295326658275e-01 -3.8188270729291292e+00 + -4.7927950264719321e+00 -1.0425235432365088e+00 -3.8329828805566182e+00 + -5.0581100547487372e+00 -1.4477265739738923e+00 -3.8963588252912569e+00 + id 14847 + loc 3.7998744845390320e-01 7.0239984989166260e-01 394 + blend 0.0000000000000000e+00 + interp 4.6518110634017878e-01:3.7879678379812243e-01:8.3312142236449216e-01:4.2961646076082322e-01:1.3560680668798011e+00:4.6074092730963079e-01:2.0438265631455175e+00:4.6517645452911538e-01:2.8560731926393395e+00:4.0282294070824165e-01:3.4878760717852515e+00:2.6387195247784534e-01:3.9855746958844973e+00 + CVs 20 + -1.4630372933674318e-01 2.0095371020291433e-01 -2.3044683876077116e-01 + -2.8281189789439298e-01 4.2042731557059931e-01 -4.3852552412920065e-01 + -4.0801835229512662e-01 6.6530498965056573e-01 -6.2430185286837347e-01 + -5.2249447296748597e-01 9.3710021674368271e-01 -7.9012107397094189e-01 + -6.3008614382649630e-01 1.2343520403326287e+00 -9.4351101905952628e-01 + -7.3740181343318900e-01 1.5551220104090620e+00 -1.1016511332781240e+00 + -8.5103132360145406e-01 1.8923929938258821e+00 -1.2864176272537899e+00 + -9.7686140508098429e-01 2.2346786075851792e+00 -1.5124304434928519e+00 + -1.1245765089181614e+00 2.5727210493670554e+00 -1.7911758147484615e+00 + -1.3069492213296443e+00 2.8899428816768618e+00 -2.1492741098056514e+00 + -1.5235253802304713e+00 3.1369140066451733e+00 -2.6232103678432459e+00 + -1.7494255485952253e+00 3.2352496992988335e+00 -3.2191478155255395e+00 + -1.9493410305889727e+00 3.1200899153712580e+00 -3.8865814075897962e+00 + -2.0894289916158115e+00 2.8021375576179448e+00 -4.5247699302805886e+00 + -2.1664512533613589e+00 2.3825779337922688e+00 -5.0631120896059878e+00 + -2.2290119341401997e+00 1.9465147349503424e+00 -5.5079240421212319e+00 + -2.3601542521813830e+00 1.5405806214497542e+00 -5.8803188438417244e+00 + -2.6042752187944105e+00 1.2004757012703604e+00 -6.1899020086861576e+00 + -2.7402326334025116e+00 8.9290973904275539e-01 -6.4747706022775651e+00 + id 14848 + loc 7.3359954357147217e-01 6.1955428123474121e-01 405 + blend 0.0000000000000000e+00 + interp 3.6340752400893389e-01:3.6340388993369382e-01:2.1187196618013482e-01:3.6306689641907558e-01:9.6719088422408217e-01:3.1469921520953026e-01:1.7004636168302385e+00:3.4329184705357479e-01:2.3775004857757911e+00:3.5679844095043289e-01:3.0017220298876870e+00:3.1119475323017515e-01:3.7671059605984105e+00 + CVs 20 + 5.0512595659743184e-02 2.1455144405904741e-01 -6.9281221997037363e-03 + 3.0182928195417902e-02 3.3614853631873465e-01 -1.8500112029524132e-02 + -2.9208796903341494e-02 4.3137784436930338e-01 -4.0201459495533373e-02 + -8.2087089344086622e-02 5.1747663460421478e-01 -7.2370141314747491e-02 + -1.2936552917272393e-01 5.9370493924801615e-01 -1.1420752836324419e-01 + -1.7344373104004487e-01 6.6566914709520475e-01 -1.6609972555147778e-01 + -2.1997113237032143e-01 7.4894537615377199e-01 -2.2405763123479261e-01 + -2.7855021072248609e-01 8.6163292600062502e-01 -2.6526027973213717e-01 + -3.5216294756353261e-01 9.9613483119803692e-01 -2.5250561753957002e-01 + -4.3065208195294419e-01 1.1235146724958749e+00 -1.7269914437977971e-01 + -5.0265829068020307e-01 1.2301586130322206e+00 -3.7372653996138108e-02 + -5.6127053566241603e-01 1.3181407621053176e+00 1.4085721919957600e-01 + -6.0422903654728266e-01 1.3901830715567476e+00 3.5377705894105216e-01 + -6.3393867794989522e-01 1.4453510507660345e+00 5.8946022218726857e-01 + -6.5562784203840374e-01 1.4887561749318043e+00 8.2626790409907891e-01 + -6.7440070304009203e-01 1.5325717124525882e+00 1.0435679128903115e+00 + -6.9264010654187236e-01 1.5839213506571250e+00 1.2339596667031263e+00 + -7.1102144704188930e-01 1.6414675777419807e+00 1.3956550437227064e+00 + -6.9645107940051898e-01 1.7361529131256432e+00 1.5196383493974670e+00 + id 14849 + loc 5.5294233560562134e-01 8.5668665170669556e-01 394 + blend 0.0000000000000000e+00 + interp 4.6260574826267803e-01:4.6260112220519545e-01:8.3219217301232484e-01:4.0543135747297276e-01:1.3980060396696057e+00:3.5719677405205941e-01:2.0150949816266905e+00:4.5265648388607516e-01:2.6897692180278963e+00:2.9722036601400664e-01:3.0286982918894862e+00:2.4505198616729687e-01:3.8998952144510257e+00 + CVs 20 + -2.0196392769247096e-01 1.3086705907009513e-01 -8.8344885444310281e-02 + -4.0683216996221100e-01 2.6778596259415810e-01 -1.9757784297188138e-01 + -6.0417458127500068e-01 4.0886542906213608e-01 -3.2520476599080655e-01 + -7.8596384078793080e-01 5.5275074637429500e-01 -4.7036696938321698e-01 + -9.4558339152900683e-01 6.9765655819681305e-01 -6.3489904325417790e-01 + -1.0779459743796251e+00 8.4281870518686719e-01 -8.1931658021519438e-01 + -1.1851240346903675e+00 9.9505080934572654e-01 -1.0207974780824438e+00 + -1.2742714314355348e+00 1.1645680168953900e+00 -1.2359715617304157e+00 + -1.3506586424232623e+00 1.3516878385299957e+00 -1.4704352229653408e+00 + -1.4171868948482911e+00 1.5425427376354102e+00 -1.7400801114333435e+00 + -1.4829071268892253e+00 1.7169426512725185e+00 -2.0580396307003204e+00 + -1.5638036910983060e+00 1.8531268922730855e+00 -2.4246999347390874e+00 + -1.6687189620860901e+00 1.9332012606229108e+00 -2.8318231833566450e+00 + -1.7975282829673320e+00 1.9475919068939858e+00 -3.2737537177967093e+00 + -1.9595632009952719e+00 1.8889262368610227e+00 -3.7432609685544591e+00 + -2.1805531635371640e+00 1.7495863299876240e+00 -4.2191849464544386e+00 + -2.4757347462569239e+00 1.5144461635883542e+00 -4.6690977345595615e+00 + -2.8189859747543942e+00 1.1694398868204905e+00 -5.0517342828052874e+00 + -3.0938426397051408e+00 8.8866753005057575e-01 -5.3124241672522547e+00 + id 14850 + loc 2.7881184220314026e-01 8.8361513614654541e-01 394 + blend 0.0000000000000000e+00 + interp 4.7470514368242595e-01:4.6568121700274506e-01:5.5046473599477230e-02:3.0137191862752860e-01:8.9241743933796092e-01:4.1607886115201081e-01:1.1563182938687599e+00:3.1627087590534098e-01:1.8321031915324912e+00:3.2038296407126077e-01:2.1634293839568928e+00:4.7470039663098912e-01:2.8235225922393083e+00:4.0918285293680939e-01:3.3632326403973170e+00 + CVs 20 + -2.4660184230537346e-01 2.5156671903131805e-01 -2.0300645009585880e-01 + -4.8075322175221979e-01 4.9315718564468419e-01 -3.9500462771116551e-01 + -7.1432085776269627e-01 7.2963319341218547e-01 -5.7524095463202363e-01 + -9.4954699767643236e-01 9.5751042419716170e-01 -7.4686509780775712e-01 + -1.1849154703600107e+00 1.1698518035078216e+00 -9.1490058220383441e-01 + -1.4220615102828682e+00 1.3605380068692288e+00 -1.0851954312401542e+00 + -1.6672123442834514e+00 1.5249213336002172e+00 -1.2646242308764077e+00 + -1.9289250517058225e+00 1.6576531051664238e+00 -1.4597104312210032e+00 + -2.2136451318145767e+00 1.7502632632335029e+00 -1.6740932180977042e+00 + -2.5230513153519940e+00 1.7921638015716228e+00 -1.9078411322415720e+00 + -2.8525557079085440e+00 1.7756345020038542e+00 -2.1566243848949771e+00 + -3.1918599558464495e+00 1.7002747875036865e+00 -2.4115332071725843e+00 + -3.5296556422105336e+00 1.5699410981079018e+00 -2.6649741903538908e+00 + -3.8574420585187745e+00 1.3864137863745101e+00 -2.9176982339238826e+00 + -4.1596151186597625e+00 1.1546065950424138e+00 -3.1582181941862997e+00 + -4.4048296528506716e+00 9.1617089631462334e-01 -3.3368977136462163e+00 + -4.5641156194923624e+00 7.3626016361738733e-01 -3.3822984857390304e+00 + -4.6753577551266794e+00 5.7509688862074948e-01 -3.3299200097984745e+00 + -4.8911951500681337e+00 5.0298685232843399e-01 -3.5534537831213120e+00 + id 14851 + loc 6.8260669708251953e-01 5.2965617179870605e-01 405 + blend 0.0000000000000000e+00 + interp 3.8731917183330666e-01:3.4851147449116943e-01:2.7385465274854726e-01:3.8731529864158837e-01:1.0000854872573526e+00:3.1933695214969721e-01:1.6498981670413477e+00:3.6340388993369382e-01:2.2146277692279930e+00:3.2134409490302251e-01:2.9767935696758361e+00:3.4993222747923103e-01:3.6189601625651280e+00 + CVs 20 + 3.4603425260531270e-02 2.1705434611289481e-01 -1.9679526910765049e-02 + -1.2111156409296886e-02 3.6503720936868056e-01 -2.7644512736987172e-02 + -8.6596180120297711e-02 4.9264590308900413e-01 -2.6687169612773256e-02 + -1.6026489007584399e-01 6.1250877637384205e-01 -1.3528161177388129e-02 + -2.3228213537530754e-01 7.1552978490363650e-01 1.7589189067901495e-02 + -2.9966124336237443e-01 7.9080783063492399e-01 7.1559118989713053e-02 + -3.5680245601810145e-01 8.2939957034753375e-01 1.4872837187169488e-01 + -3.9861849841676855e-01 8.3192730894326228e-01 2.4450326479667164e-01 + -4.2445402387166375e-01 8.0907090214876776e-01 3.5705780397017162e-01 + -4.3499798935999595e-01 7.7063642396086729e-01 4.9086913373458901e-01 + -4.2865257074603785e-01 7.1910661511369867e-01 6.4893233148092067e-01 + -4.0340764351964686e-01 6.5320956350701609e-01 8.2919291821798924e-01 + -3.5482334802269239e-01 5.7724089927154676e-01 1.0314409059829865e+00 + -2.7243808049468760e-01 5.1457203379198690e-01 1.2626199942251108e+00 + -1.4484055599608814e-01 5.0425560960507110e-01 1.5211005649439322e+00 + 2.3087802797401705e-02 5.7332294772670389e-01 1.7790192028829981e+00 + 2.0676016439658193e-01 7.1812070311469245e-01 2.0045702685478366e+00 + 3.7116735602137202e-01 9.1841306996051286e-01 2.1904015838711657e+00 + 4.5312951525159595e-01 1.0638109836879186e+00 2.4031288009936413e+00 + id 14852 + loc 6.4074754714965820e-01 6.5212774276733398e-01 394 + blend 0.0000000000000000e+00 + interp 4.7387907094012521e-01:4.7387433214941582e-01:9.8894826835229432e-02:4.3618419578518153e-01:9.0029080311896648e-01:4.1654641716155344e-01:1.5861903817322900e+00:3.8277586004185044e-01:2.0490609952144894e+00:4.0680995989348201e-01:2.9692459571043384e+00:2.5832091321148887e-01:3.3034224688588347e+00 + CVs 20 + -2.1943649709212301e-01 2.1922129601049384e-01 -2.5726967920445598e-01 + -4.2788178077731148e-01 4.4529034154411307e-01 -5.2513754062652152e-01 + -6.3228035173384967e-01 6.7935776624973154e-01 -8.0592777473700616e-01 + -8.3051481370133573e-01 9.1688403523040629e-01 -1.1041689967654094e+00 + -1.0209633263597286e+00 1.1493318833915929e+00 -1.4244725406879450e+00 + -1.2119231517051907e+00 1.3687544004190100e+00 -1.7687511893635510e+00 + -1.4139333690894940e+00 1.5626325683476185e+00 -2.1369390106231609e+00 + -1.6309711112583458e+00 1.7064112744963724e+00 -2.5285404095795192e+00 + -1.8651346364275678e+00 1.7709807597400946e+00 -2.9375328858721987e+00 + -2.1222953931039634e+00 1.7382516439785147e+00 -3.3456983852911870e+00 + -2.4005107794179503e+00 1.6094272208557199e+00 -3.7266640921314593e+00 + -2.6837035023317437e+00 1.4057086963581984e+00 -4.0612036069984274e+00 + -2.9623297631714025e+00 1.1545329840309551e+00 -4.3436197412348019e+00 + -3.2487722844754554e+00 8.7241094273963382e-01 -4.5650468576912013e+00 + -3.5549264206700744e+00 5.6740070702209389e-01 -4.7063294332588281e+00 + -3.8607444312217920e+00 2.4114562192159772e-01 -4.7485618534749330e+00 + -4.1242060386340436e+00 -1.0244348790658098e-01 -4.6882036886584801e+00 + -4.3329389407065033e+00 -4.3285683810303155e-01 -4.5572029015861633e+00 + -4.5775486503963050e+00 -6.7434955969546406e-01 -4.5252371408067908e+00 + id 14853 + loc 1.0279191657900810e-02 5.3283411264419556e-01 405 + blend 0.0000000000000000e+00 + interp 4.4280091622105505e-01:1.9710720428745021e-01:4.0587902948126875e-01:4.4279648821189288e-01:1.2591773619724862e+00:2.5361502916546325e-01:1.9378093333676993e+00:3.2619242908809032e-01:2.0026545249395649e+00:4.1556086231407624e-01:2.7924960799033212e+00:3.3830290149467712e-01:3.4345103211260630e+00 + CVs 20 + 9.2818238044260731e-02 1.9656549289191383e-01 1.0671152498442747e-01 + 9.4177458077434245e-02 3.4329431916407316e-01 1.6896800779543619e-01 + 7.1735786864547124e-02 4.6870845138385564e-01 2.2758674993964925e-01 + 5.0409974028151949e-02 5.8996111644106053e-01 3.0234053495799046e-01 + 2.8074782546229027e-02 7.0604851239763611e-01 3.9474882774552261e-01 + 3.7487585767344012e-03 8.1516192194345871e-01 5.0531575811180107e-01 + -2.2712207074484569e-02 9.1503226291551520e-01 6.3311420795149853e-01 + -5.0975802186552788e-02 1.0035557224757614e+00 7.7612581544646320e-01 + -8.0443287581450806e-02 1.0789519893933615e+00 9.3179688278200024e-01 + -1.1064719213698321e-01 1.1401774894459751e+00 1.0977869964962577e+00 + -1.4100918936497975e-01 1.1879978902755806e+00 1.2735360172912396e+00 + -1.7103960842489302e-01 1.2247566871271198e+00 1.4599731972267400e+00 + -2.0344227875188453e-01 1.2490456880908978e+00 1.6532167486705382e+00 + -2.4620696147592314e-01 1.2519133717576476e+00 1.8399762578908712e+00 + -3.0713180461093831e-01 1.2273487240941112e+00 2.0108497605883398e+00 + -3.8527108716733188e-01 1.1841171962497523e+00 2.1757716259247024e+00 + -4.7095473813226973e-01 1.1388748018664456e+00 2.3506362727900667e+00 + -5.4729759364889186e-01 1.1048853919160568e+00 2.5387297459282907e+00 + -5.3231255710241354e-01 1.1516443976225961e+00 2.7435076182092843e+00 + id 14854 + loc 3.3188733458518982e-01 1.3747660815715790e-01 405 + blend 0.0000000000000000e+00 + interp 5.1222135350929465e-01:4.7581980745961044e-01:2.9890148207911693e-03:3.6391627927827258e-01:6.1880257745034584e-01:5.1221623129575955e-01:1.0676241759455085e+00:3.4517602271207543e-01:1.8885886299614381e+00:4.2152420616766184e-01:2.5515951464991140e+00:3.2505811842036042e-01:2.9966442412045837e+00:3.2279518025203180e-01:3.4957896312848060e+00 + CVs 20 + -8.3377975083996206e-02 -4.2347529116485740e-03 5.7471967575769459e-02 + -1.6064387786454104e-01 -8.4554148059456588e-02 7.7834183551202807e-02 + -2.5896222892532528e-01 -1.5106017886853090e-01 1.3763445191057114e-01 + -3.6711323328394480e-01 -2.1290429479253065e-01 1.9211352164403805e-01 + -4.8487161802771089e-01 -2.7068700964172410e-01 2.3247056894266521e-01 + -6.1702540883187562e-01 -3.1872432578259513e-01 2.5652932092983444e-01 + -7.7241378266252059e-01 -3.4385641733598671e-01 2.6442281146680674e-01 + -9.5959941768945090e-01 -3.2397339364034999e-01 2.6050917237256171e-01 + -1.1771337764361298e+00 -2.3127430588583658e-01 2.5603315967950002e-01 + -1.4025099363106868e+00 -4.6519719041429486e-02 2.7023569771724487e-01 + -1.5952139390165019e+00 2.1963009942633477e-01 3.2619651428177460e-01 + -1.7213891655630045e+00 5.2279509876782870e-01 4.3383491589664636e-01 + -1.7733288326423544e+00 8.1388639556044784e-01 5.8376852912506427e-01 + -1.7614670492009947e+00 1.0643008746660374e+00 7.5866163840646084e-01 + -1.6983461708321932e+00 1.2663083151096979e+00 9.4368867533507050e-01 + -1.5944087656898314e+00 1.4237957306059355e+00 1.1234766605224364e+00 + -1.4590301168892239e+00 1.5426586004515839e+00 1.2867073312075115e+00 + -1.2990159751724888e+00 1.6272538834628854e+00 1.4332239187049465e+00 + -1.2377192213718562e+00 1.6240800505171373e+00 1.4663725424813450e+00 + id 14855 + loc 4.3481573462486267e-01 8.5948988795280457e-02 394 + blend 0.0000000000000000e+00 + interp 4.1192953414933697e-01:3.8069273520664554e-01:3.0139258175858485e-01:2.7006048031171920e-01:1.0820983883554869e+00:3.2391943972794923e-01:2.0192979351382521e+00:4.1192541485399548e-01:3.0584300057648637e+00:2.7530584652172629e-01:3.5476915755384546e+00 + CVs 20 + -1.7359428499530441e-01 2.0413747735138177e-01 2.2349692705947652e-01 + -3.1696411717526118e-01 3.9583873846357975e-01 4.7757231078637274e-01 + -4.3860190489944340e-01 5.7946200033474282e-01 7.5892552731075114e-01 + -5.4739581273574112e-01 7.6731902546431496e-01 1.0679333297404461e+00 + -6.5251326635992191e-01 9.6759935548698506e-01 1.3985471601633508e+00 + -7.6803207202627255e-01 1.1750882877711344e+00 1.7438530623750488e+00 + -9.1332194636753750e-01 1.3754662055887346e+00 2.1067276867134495e+00 + -1.1070210129964613e+00 1.5511764456466297e+00 2.4875585584850235e+00 + -1.3542404190671173e+00 1.6800549849257278e+00 2.8716894060539477e+00 + -1.6363569845396491e+00 1.7378292702167832e+00 3.2350164202627494e+00 + -1.9174769044513928e+00 1.7073981251951866e+00 3.5563492927302449e+00 + -2.1625369770143941e+00 1.5841599697614970e+00 3.8199222942388440e+00 + -2.3569474986936196e+00 1.3805316614493353e+00 4.0196689517838688e+00 + -2.5342873500602483e+00 1.1201905932940408e+00 4.1758554753122841e+00 + -2.7530738416675327e+00 8.2641476676964709e-01 4.3214301844747709e+00 + -3.0207613753872398e+00 5.5375676389473361e-01 4.4704586513992437e+00 + -3.2753126961890375e+00 3.7353900015922958e-01 4.6201179287326486e+00 + -3.4721765985260458e+00 2.8283631561984546e-01 4.7542944907580935e+00 + -3.7363921521257288e+00 1.1013792564106240e-01 4.8539989366052758e+00 + id 14856 + loc 5.5940955877304077e-01 5.3304535150527954e-01 405 + blend 0.0000000000000000e+00 + interp 3.8731917183330666e-01:3.2972553981284386e-01:1.8777610055483851e-01:3.3407034638749855e-01:9.8797591120275408e-01:3.6697119339059497e-01:1.7601002637907703e+00:3.2213447421130714e-01:2.3763770340110604e+00:3.8731529864158837e-01:3.0000431263126961e+00:3.6373848166398720e-01:3.6802977498299780e+00 + CVs 20 + 1.9959869468326452e-02 1.6744856496331961e-01 2.4021822104195262e-02 + -1.7790832942203239e-02 2.3771710371787652e-01 5.8404004591459058e-02 + -8.8483216442415399e-02 2.6551912573201791e-01 9.4663515717152438e-02 + -1.4676125448116223e-01 2.5999764576537249e-01 1.2239091189765373e-01 + -1.8709896211363858e-01 2.2034410170036633e-01 1.2271836236157781e-01 + -2.0950819402510207e-01 1.5829970783873984e-01 7.3923547773367043e-02 + -2.2630410578001314e-01 9.9149622481470648e-02 -3.0956938789376429e-02 + -2.5859481788886751e-01 6.3230448811356213e-02 -1.6983274320985597e-01 + -3.2017747463593815e-01 4.7679046887840359e-02 -3.0648451776265945e-01 + -4.1124643416211765e-01 3.4907637405420799e-02 -4.1617839826211345e-01 + -5.2360105881741115e-01 1.2097600684577464e-02 -4.9319564950729639e-01 + -6.4677804289170648e-01 -2.2891755814213710e-02 -5.4197856450806248e-01 + -7.7745822603857118e-01 -7.9105810348943317e-02 -5.5729495085750025e-01 + -9.2032936207782934e-01 -1.9875046548504843e-01 -5.0571818448452810e-01 + -1.0685134925365383e+00 -4.2804920026012977e-01 -3.3966251563940530e-01 + -1.1912513599239196e+00 -7.4471963815211817e-01 -3.6860913004522031e-02 + -1.2549153249567806e+00 -1.0737855874501667e+00 3.8101637899543317e-01 + -1.2406014583503688e+00 -1.3555580348648590e+00 8.6341905490940996e-01 + -1.2111442055041808e+00 -1.4718766414644020e+00 1.1209182514457350e+00 + id 14857 + loc 1.3591121137142181e-01 6.9726216793060303e-01 394 + blend 0.0000000000000000e+00 + interp 4.2606907682770784e-01:4.1463610925409666e-01:1.0054282704174966e-06:4.2606481613693958e-01:8.4605361629835274e-01:2.5891359808616776e-01:1.4783223426472323e+00:2.7660362942250855e-01:2.0709210910220137e+00:3.4883534012223627e-01:3.0656570871012381e+00 + CVs 20 + -1.1213162739841065e-01 2.2010732334852856e-01 -2.6839872282565252e-01 + -2.2397850387186688e-01 4.6070315424786051e-01 -5.4223738474441319e-01 + -3.3564428808986729e-01 7.2925709733446220e-01 -8.0441330190037164e-01 + -4.4728967504325723e-01 1.0196867523295723e+00 -1.0499354538841381e+00 + -5.5712241002435681e-01 1.3124948788663411e+00 -1.2856045690938496e+00 + -6.6108672999604079e-01 1.5798636270762310e+00 -1.5251703579225540e+00 + -7.6316467957214462e-01 1.8095778023895142e+00 -1.7824231157665209e+00 + -8.7841829176935926e-01 2.0085027216077145e+00 -2.0651500160711920e+00 + -1.0045900204729641e+00 2.1609310877440024e+00 -2.3680251950294604e+00 + -1.0978708473591903e+00 2.2180165006452022e+00 -2.6684814139303188e+00 + -1.1162973594889358e+00 2.1559936406982665e+00 -2.9359297186414479e+00 + -1.0768247037894958e+00 1.9988309629655079e+00 -3.1610560999792945e+00 + -1.0152003416732107e+00 1.7689611322694410e+00 -3.3566660831355564e+00 + -9.5525433997310283e-01 1.4860642032237434e+00 -3.5483424314862022e+00 + -9.3824155714307822e-01 1.1438802177375558e+00 -3.7781861182370484e+00 + -1.0588322182554304e+00 6.9675257258092493e-01 -4.0791227429934480e+00 + -1.4408255698355765e+00 1.6865084497917771e-01 -4.4297415770841218e+00 + -1.9929593427031818e+00 -2.6082076311002167e-01 -4.7419945401508938e+00 + -2.1913180265901424e+00 -4.9434236176815061e-01 -4.9861282117005263e+00 + id 14858 + loc 5.2574867010116577e-01 4.5115444809198380e-02 405 + blend 0.0000000000000000e+00 + interp 3.8519209239808777e-01:3.3288200129920131e-01:4.0741837593189612e-01:2.9130696340886142e-01:1.3491296226573830e+00:2.8034929413045151e-01:2.0161713818560045e+00:3.8518824047716382e-01:3.0084626010514981e+00:3.2137952057519309e-01:3.8341045239422975e+00 + CVs 20 + -2.4655985874329909e-02 7.3929868025569973e-02 3.0351644226622246e-02 + -4.1001549580777716e-02 1.4672378573113512e-01 4.3044865533017465e-02 + -5.3935887637379179e-02 2.1513610879270384e-01 3.6991946275779106e-02 + -7.1325117458819823e-02 2.9394883954269413e-01 1.5534609349512930e-02 + -8.9667982712013983e-02 3.8428511357421113e-01 -1.8261825366336047e-02 + -1.0620241852926413e-01 4.8470557306158402e-01 -6.0508697703591414e-02 + -1.2050239909621152e-01 5.9039034565207049e-01 -1.0838889387267064e-01 + -1.3484156707310646e-01 6.9485755949138917e-01 -1.6085314970327358e-01 + -1.5444133954429151e-01 7.9099080804670430e-01 -2.1710259880266361e-01 + -1.9019420512834334e-01 8.6880137350216302e-01 -2.7399470831339190e-01 + -2.5941271629599433e-01 9.1728327101812901e-01 -3.2011370996560196e-01 + -3.7660490555446996e-01 9.3177401141778748e-01 -3.2930116242421859e-01 + -5.3244429894716261e-01 9.2207540349499528e-01 -2.7042214704128958e-01 + -6.8845602588072285e-01 9.0827340042652660e-01 -1.4179827039896001e-01 + -8.1167897341781747e-01 9.0308001028087936e-01 1.4341556032285235e-02 + -9.0055649442646779e-01 9.0369963013438781e-01 1.5530438460275933e-01 + -9.6307480127638123e-01 9.0276661908924805e-01 2.7738600496260213e-01 + -9.9660210414603734e-01 8.9811961356195902e-01 3.9286884423747664e-01 + -1.0542148169709573e+00 8.6883508992678526e-01 3.5508770756104963e-01 + id 14859 + loc 8.4860378503799438e-01 6.1229246854782104e-01 405 + blend 0.0000000000000000e+00 + interp 4.6430250298037939e-01:3.3013088895119330e-01:3.9285784503233312e-01:3.5679844095043289e-01:1.0019370807513288e+00:3.2058756154923568e-01:1.7959755400900979e+00:4.6429785995534961e-01:2.2745540558596535e+00:3.1116324307376730e-01:3.0098330249645264e+00:2.6455286543739465e-01:3.8999403446943397e+00 + CVs 20 + 5.9222132729166030e-02 2.1501345509964950e-01 -6.0909912500217503e-03 + 5.5659445792760442e-02 3.5545372586194740e-01 1.6192770196807926e-02 + 1.0929956277581143e-02 4.6826951080037088e-01 5.2652542100297073e-02 + -2.4715864096620521e-02 5.7319844678628817e-01 1.0359809591263995e-01 + -4.8492179410350694e-02 6.5904505253340917e-01 1.6966201404820255e-01 + -5.7307984573861881e-02 7.0797010792595327e-01 2.4772824960463907e-01 + -4.3586784578626164e-02 6.9265881093199522e-01 3.2417761689205649e-01 + 5.3417669254416933e-03 5.8393863387242539e-01 3.5869694058778429e-01 + 9.3240779297804388e-02 3.9541054502323641e-01 2.8014399800116951e-01 + 1.8752696439886432e-01 2.2270525244472056e-01 8.1539651903529742e-02 + 2.5936759044129387e-01 1.1747517579009850e-01 -1.3071691693145582e-01 + 3.2261938999284828e-01 4.2952398931044897e-02 -2.9415837465315942e-01 + 3.9870569460992911e-01 -3.3453953994067143e-02 -4.1432268279997203e-01 + 4.9964261695173506e-01 -1.2579934265900289e-01 -5.0313265147045216e-01 + 6.3418828235515445e-01 -2.4855394699443176e-01 -5.5102161634898117e-01 + 8.1470324832359586e-01 -4.0881837592699904e-01 -5.4045342178175826e-01 + 1.0523592187285782e+00 -5.8351918919703250e-01 -4.7298196289896438e-01 + 1.3444805894636640e+00 -7.3006533014153696e-01 -3.7730694162534539e-01 + 1.6356982549350287e+00 -8.5599529751795400e-01 -2.8468789660779675e-01 + id 14860 + loc 1.3482384383678436e-01 3.7432956695556641e-01 394 + blend 0.0000000000000000e+00 + interp 5.8345404731387995e-01:2.5829666343337282e-01:6.6235989491523029e-01:3.4662029861377114e-01:1.4209146064142359e+00:5.8344821277340686e-01:1.9949739138959142e+00:4.0769805562421013e-01:2.9584006166973946e+00:3.0300189933514254e-01:3.6034469517695773e+00 + CVs 20 + -1.0640036496221575e-01 2.7318312664258637e-01 2.9141910090907730e-01 + -2.0928121492381097e-01 5.5651849839612710e-01 5.2810364418096711e-01 + -2.9574932789501468e-01 8.5858456162330909e-01 7.3364028554833960e-01 + -3.6140624227184670e-01 1.1834155245750193e+00 9.1987765517640074e-01 + -4.1183221397908437e-01 1.5294506866737780e+00 1.0940597677424790e+00 + -4.6028781775582195e-01 1.8955962609720043e+00 1.2706025032235861e+00 + -5.2407479750188801e-01 2.2770447760873855e+00 1.4660768744034294e+00 + -6.1538155577012166e-01 2.6612224518165135e+00 1.6926453798650298e+00 + -7.4617231076417889e-01 3.0397198907868668e+00 1.9705830468951806e+00 + -9.4744295156748770e-01 3.4034509471705419e+00 2.3409216889699787e+00 + -1.2639767366252372e+00 3.7032060500809219e+00 2.8346657153277217e+00 + -1.7072301136575159e+00 3.8427156082077869e+00 3.4231917521759785e+00 + -2.2058533014765689e+00 3.7508982334375514e+00 4.0147541056815363e+00 + -2.6323640846400398e+00 3.4718336376345520e+00 4.5034200121718655e+00 + -2.9097527693241894e+00 3.1406888613478494e+00 4.8370820491752768e+00 + -3.0276318526702899e+00 2.8937829190012314e+00 4.9971529677683453e+00 + -3.0272286303371363e+00 2.7683169392587343e+00 4.9896341750244257e+00 + -2.9883655663650126e+00 2.6250346798579818e+00 4.9556917347913734e+00 + -2.9663306060309171e+00 2.2860074499128218e+00 5.1973370750983072e+00 + id 14861 + loc 9.5241397619247437e-01 1.7531467974185944e-01 405 + blend 0.0000000000000000e+00 + interp 4.1557697527461707e-01:4.1557281950486435e-01:1.0024352854044782e+00:3.5633833959649619e-01:1.8407720635008777e+00:3.6969621851383033e-01:2.0989713895247091e+00:3.2144309938698262e-01:2.7773008636661602e+00:2.9238566993262743e-01:3.1400558897850748e+00:3.5966743423495356e-01:3.9999151467504630e+00 + CVs 20 + -2.1007471084328128e-02 7.5092855074222739e-02 8.3752625001139613e-02 + -2.9339830257917643e-02 1.3571156272511065e-01 1.5964309716758054e-01 + -3.8864530909680298e-02 1.7499785249956387e-01 2.2582166665757356e-01 + -5.6708037113804441e-02 2.1354233343151882e-01 2.9730571320042926e-01 + -7.9266497430257515e-02 2.5853155170812281e-01 3.7843296333392362e-01 + -9.9832659231399279e-02 3.1618610240965650e-01 4.7481464250271865e-01 + -1.0795987979663602e-01 3.9016877183575660e-01 5.9168196205270929e-01 + -9.0596604397585268e-02 4.8003229159227134e-01 7.3079305885850065e-01 + -3.5547833897422276e-02 5.8195272382653196e-01 8.8772180917692234e-01 + 6.4571659262431302e-02 6.9089956842462308e-01 1.0515731372515249e+00 + 2.1366876156216780e-01 8.0509996214445079e-01 1.2098104936199034e+00 + 4.1098653098742960e-01 9.2923383384287894e-01 1.3466463646866202e+00 + 6.4509672524623918e-01 1.0589152990260164e+00 1.4453666248315609e+00 + 9.0414984411997346e-01 1.1457810158983390e+00 1.5119756729467928e+00 + 1.1938328004427339e+00 1.1077165900315440e+00 1.5740652385527938e+00 + 1.5290612581487844e+00 9.0333073952566745e-01 1.6184847138942875e+00 + 1.8812025248695525e+00 5.9874812396154642e-01 1.5818301484206407e+00 + 2.1781193437573081e+00 3.1365670330757933e-01 1.4564226831909426e+00 + 2.1060802340538940e+00 3.2041749477367754e-01 1.4796090650945237e+00 + id 14862 + loc 1.0925986617803574e-01 1.6431647539138794e-01 394 + blend 0.0000000000000000e+00 + interp 5.5197609417342741e-01:2.6648007847770006e-01:1.1940790722088646e-01:3.9655959978668143e-01:8.4625258918310742e-01:5.5197057441248565e-01:1.4515968141881461e+00:3.2430525388360892e-01:1.9985680911944157e+00:2.7886373684991367e-01:2.8034995984184539e+00:4.4842044467955394e-01:3.0703136865829515e+00 + CVs 20 + -1.2663961531412626e-01 1.1922216602803090e-01 1.9227317240555827e-01 + -2.6195726595423474e-01 2.6519074953090988e-01 3.9122054544837626e-01 + -3.9524466034328459e-01 4.2495491034632932e-01 5.8019390122706282e-01 + -5.1741976799460654e-01 5.9048622157435804e-01 7.4872959509649739e-01 + -6.2615457561214605e-01 7.6001321141733946e-01 8.8700313808267350e-01 + -7.2118101420946323e-01 9.3378150864135046e-01 9.8493901934773032e-01 + -8.0922057225631949e-01 1.1147530742103877e+00 1.0464383365100636e+00 + -9.0197763074195181e-01 1.3040283296981223e+00 1.0836425971091721e+00 + -1.0080438136618364e+00 1.5015111363972689e+00 1.1030040129439582e+00 + -1.1358442078871669e+00 1.7110110505273306e+00 1.1039815829977184e+00 + -1.2964338953144510e+00 1.9405883200678740e+00 1.0873932372488446e+00 + -1.5041965925516005e+00 2.1970136443169874e+00 1.0645807937574239e+00 + -1.7851797596118280e+00 2.4523471833050601e+00 1.0593052517420665e+00 + -2.1424223099554913e+00 2.5964098423063451e+00 1.0791201403199793e+00 + -2.5087621259556929e+00 2.5328385531597517e+00 1.0901021557630015e+00 + -2.8474820649832782e+00 2.2888825594676816e+00 1.0734355963237563e+00 + -3.2250786251489569e+00 1.9148850646511888e+00 1.0559703763660095e+00 + -3.7077551158411186e+00 1.4687577208519447e+00 1.1106223925362662e+00 + -3.9995986919788393e+00 1.3439845254299794e+00 1.1869174880952591e+00 + id 14863 + loc 4.4836485385894775e-01 2.8019329905509949e-01 405 + blend 0.0000000000000000e+00 + interp 3.7994376201961483e-01:3.2487295227494367e-01:3.8514271907823905e-01:3.2344027907608541e-01:1.2128817969168177e+00:3.7901584787100645e-01:2.0397619497859956e+00:3.7993996258199464e-01:2.6771628440982354e+00:3.1998081623723135e-01:3.0864120213616650e+00:2.7986692816027980e-01:3.9381536206389129e+00 + CVs 20 + -9.3399033468265849e-03 8.4556995811178745e-02 3.4297417737144412e-02 + -2.9850941078354298e-02 1.4173026284281434e-01 9.6096783497771496e-02 + -5.1081573642709009e-02 1.8910316081722739e-01 1.7762674293961070e-01 + -6.5705274929113877e-02 2.3168768934826339e-01 2.6132390790160176e-01 + -7.2947785072216442e-02 2.6795709738122608e-01 3.4852698993771608e-01 + -7.1334931573928256e-02 2.9571306499922928e-01 4.4054647108875222e-01 + -5.8785999555710476e-02 3.1132070504306614e-01 5.3727359930261209e-01 + -3.4281087858907669e-02 3.1032125351831630e-01 6.3688411719695037e-01 + 1.1328206874183060e-03 2.8853970021910685e-01 7.3627921041663247e-01 + 4.4249845179940135e-02 2.4316144309736548e-01 8.3159850816168901e-01 + 8.8888361966612067e-02 1.7481093595797970e-01 9.1774855507312525e-01 + 1.2609367437387853e-01 8.9212305658133040e-02 9.8860515853356712e-01 + 1.5196457137309022e-01 -1.0575448079665317e-02 1.0441035862740058e+00 + 1.8132655792907926e-01 -1.4166663967694942e-01 1.0963965027842080e+00 + 2.4464400878517528e-01 -3.3234015681421569e-01 1.1572889682155680e+00 + 3.6099040779950625e-01 -5.7634805656786370e-01 1.2209490900242685e+00 + 5.2128708374149679e-01 -8.3241648029493898e-01 1.2716689407497535e+00 + 6.9774037639653663e-01 -1.0634207056802367e+00 1.2946320174249362e+00 + 7.0666073943241958e-01 -1.1438341518145416e+00 1.1907434923283176e+00 + id 14864 + loc 8.3522248268127441e-01 4.8533592373132706e-02 405 + blend 0.0000000000000000e+00 + interp 4.3205040821609481e-01:3.1694043038737402e-01:8.0253872981505103e-02:2.7556091335804489e-01:8.5895721100256217e-01:3.9966112264894493e-01:1.2140189746946564e+00:3.0111878951611992e-01:1.9533985963592517e+00:4.3204608771201264e-01:2.4838836900722927e+00:3.7813609092558170e-01:2.9895331179633535e+00:2.6664042707357055e-01:3.6233172568215788e+00 + CVs 20 + 1.4138637702394680e-01 5.9375035109531168e-02 -7.8714317635918511e-03 + 2.8258228278771313e-01 1.2179750016981565e-01 -3.1875479657003443e-02 + 4.2667823253959752e-01 1.8793602727170328e-01 -6.2424774427839926e-02 + 5.7030141934587508e-01 2.5569448896430047e-01 -9.9740106565755493e-02 + 7.1027196842890827e-01 3.2391298188529949e-01 -1.4661431122465979e-01 + 8.4258761721906217e-01 3.9212197194072129e-01 -2.0515885630800770e-01 + 9.6285567814476936e-01 4.6064044496130713e-01 -2.7593415390030179e-01 + 1.0671281966168036e+00 5.3062710518018652e-01 -3.5723936531909700e-01 + 1.1524373951524280e+00 6.0350015625907361e-01 -4.4521105925226617e-01 + 1.2179988300723184e+00 6.8038498694704286e-01 -5.3425357543570184e-01 + 1.2658455372772337e+00 7.6115469708033756e-01 -6.1849727370993124e-01 + 1.3029073187058051e+00 8.4345441928668830e-01 -6.9424708558803794e-01 + 1.3396606329426557e+00 9.2439255142507593e-01 -7.6186283299780078e-01 + 1.3783138664456671e+00 1.0056501012424806e+00 -8.1797832980619356e-01 + 1.4072053384326548e+00 1.0948153587800047e+00 -8.3860425656813842e-01 + 1.4240091362996090e+00 1.1895259891146586e+00 -7.8840090105951643e-01 + 1.4564852449799013e+00 1.2625933009438892e+00 -6.6724494442072135e-01 + 1.5365879142669185e+00 1.2928593521111791e+00 -5.2603333138109354e-01 + 1.6399843152090361e+00 1.3410246451798522e+00 -5.1841336320951914e-01 + id 14865 + loc 3.5935527086257935e-01 2.6729410886764526e-01 394 + blend 0.0000000000000000e+00 + interp 5.0475180239947270e-01:3.4820336521788486e-01:4.9606213225888007e-01:4.7008854877946243e-01:1.3300723218290860e+00:3.4338994292511055e-01:1.9489672699067055e+00:3.7343624035079354e-01:2.7519687896519698e+00:4.6296639351468011e-01:3.2155256174922093e+00:5.0474675488144871e-01:3.8413631110289059e+00 + CVs 20 + -1.7694231462242666e-01 1.3272676071254885e-01 1.4392364087706394e-01 + -3.3669662492308572e-01 2.6743544356825272e-01 3.1572310124397668e-01 + -4.7546989477726492e-01 3.9767915824555888e-01 4.9475139425828257e-01 + -5.8981166663658424e-01 5.2541528205544163e-01 6.7026925543483040e-01 + -6.7155434463480446e-01 6.5918154892798086e-01 8.3262344032610269e-01 + -7.1588301628911899e-01 8.1060699083933829e-01 9.6793861728631159e-01 + -7.3284896431421787e-01 9.9315072248662495e-01 1.0789687205786036e+00 + -7.4487778468381893e-01 1.2174619893307557e+00 1.1794968527250413e+00 + -7.7753127295580715e-01 1.4904529982111285e+00 1.2754736574013870e+00 + -8.5957870160802308e-01 1.8148703402467286e+00 1.3622192316955775e+00 + -1.0227995493241124e+00 2.1869572972891063e+00 1.4408868906446721e+00 + -1.3031137903900563e+00 2.5850404264593867e+00 1.5310422622211333e+00 + -1.7242378647364578e+00 2.9262682602985741e+00 1.6516421524787823e+00 + -2.2221854752825188e+00 3.0672936778384026e+00 1.7766670592116762e+00 + -2.6655329916697945e+00 2.9548307711332344e+00 1.8528286088721710e+00 + -3.0233252397736368e+00 2.6663537549742724e+00 1.8653414490473454e+00 + -3.3723366980949496e+00 2.2893574943194985e+00 1.8303983884635955e+00 + -3.7728265420423561e+00 1.8882913615219168e+00 1.8223495109763628e+00 + -4.0936204694045646e+00 1.6550258115182266e+00 2.0263077591291574e+00 + id 14866 + loc 1.2744967825710773e-02 1.9620131701231003e-02 405 + blend 0.0000000000000000e+00 + interp 4.8030542354592726e-01:3.2370573205539843e-01:3.5594023029148358e-01:2.6627733502688639e-01:1.0613063067404824e+00:4.7109067819963307e-01:1.9966515052311447e+00:4.8030062049169181e-01:2.3321873073435930e+00:3.3360904931346508e-01:2.9854385869032245e+00:3.2012489884279721e-01:3.9340331081609685e+00 + CVs 20 + -4.4884332218480177e-02 1.9124684554560412e-01 -5.3219593714216626e-02 + -1.0331038784014507e-01 3.5234102075696766e-01 -5.7273604223046920e-02 + -1.7170450722308953e-01 5.1457895727196157e-01 -3.9626047850672308e-02 + -2.4156696597845884e-01 6.8807433746780955e-01 -2.5577156880860930e-02 + -3.1109948729384501e-01 8.6816768703580205e-01 -1.3012847619314316e-02 + -3.7694918915030567e-01 1.0508525491517235e+00 1.8175880840155534e-03 + -4.3371534104537079e-01 1.2331486209269984e+00 2.3911633589339343e-02 + -4.7505270498735275e-01 1.4132163477332815e+00 5.8047635001966191e-02 + -4.9447999428319778e-01 1.5889483387740597e+00 1.0772467479331216e-01 + -4.8622366575087839e-01 1.7554324973595645e+00 1.7629988569489130e-01 + -4.4592176072715117e-01 1.9028933240280939e+00 2.6847335950147089e-01 + -3.7288968225730662e-01 2.0155644727252033e+00 3.8833271114763768e-01 + -2.7518387178638931e-01 2.0765718162612297e+00 5.3214805082697525e-01 + -1.6747903420886806e-01 2.0823072777246074e+00 6.8545717159826491e-01 + -5.8020376974301402e-02 2.0480110008134096e+00 8.3305015062317267e-01 + 5.5024268124282308e-02 1.9940572177995346e+00 9.6782475691028680e-01 + 1.7166296376881701e-01 1.9310236104331395e+00 1.0889049312328722e+00 + 2.8254273288262327e-01 1.8650108321900292e+00 1.1961036894026444e+00 + 3.6336723953410632e-01 1.8398573959749984e+00 1.2824992566769566e+00 + id 14867 + loc 6.0510500334203243e-03 5.5404007434844971e-01 394 + blend 0.0000000000000000e+00 + interp 4.4662378671552505e-01:4.0680171769707718e-01:3.8972973533720823e-01:1.0185020775744986e-01:1.1460132458862577e+00:4.4661932047765790e-01:2.0002811315042446e+00:4.4511535799269664e-01:2.8014700556177674e+00:3.9242275692552081e-01:3.0382100276010697e+00:4.0421654759881304e-01:3.6639171534690860e+00 + CVs 20 + -2.2551199517689022e-01 1.5967805553233447e-01 -3.1737599722271664e-02 + -4.3985426988519721e-01 3.4079748657430675e-01 -8.6662847893818395e-02 + -6.4019072999814830e-01 5.4200854281079880e-01 -1.4771366122339724e-01 + -8.3145520825069186e-01 7.6839241570166339e-01 -2.0445554270857158e-01 + -1.0162264680763842e+00 1.0207776487551581e+00 -2.5899462777394328e-01 + -1.2001998971661099e+00 1.2957368317878803e+00 -3.1995718130094053e-01 + -1.3876722051402932e+00 1.5834631732287971e+00 -4.0227984395748528e-01 + -1.5790040494349615e+00 1.8668397253170856e+00 -5.1945910546654828e-01 + -1.7782116355164970e+00 2.1319183419947736e+00 -6.7559175172330388e-01 + -1.9995701439431643e+00 2.3702938944995000e+00 -8.7478654452271198e-01 + -2.2530540129790868e+00 2.5566406364665899e+00 -1.1319672490893362e+00 + -2.5187831464091044e+00 2.6382603340401136e+00 -1.4539453215699676e+00 + -2.7535577094543680e+00 2.5740384544881065e+00 -1.8102333678159312e+00 + -2.9284769638654549e+00 2.3742014637784887e+00 -2.1494083017462127e+00 + -3.0490131994078533e+00 2.0867147431969819e+00 -2.4408554129668802e+00 + -3.1466169672615689e+00 1.7646141347577142e+00 -2.6756869946228412e+00 + -3.2700052907855559e+00 1.4662027552468482e+00 -2.8489163530166843e+00 + -3.4543696232508250e+00 1.2381495893800403e+00 -2.9666652301883176e+00 + -3.6301827981283736e+00 9.7171956161945627e-01 -3.1022846840892688e+00 + id 14868 + loc 6.2316858768463135e-01 2.0121145248413086e-01 405 + blend 0.0000000000000000e+00 + interp 4.9454561038196720e-01:3.1035658141080064e-01:5.2286913808760382e-02:4.9454066492586340e-01:9.3632418256069538e-01:3.0854458441282789e-01:1.3250114098185453e+00:3.2270283535116301e-01:2.1051667512290266e+00:2.9849525063697668e-01:3.0531444060818371e+00 + CVs 20 + 1.0044025239473778e-01 1.0881311339043778e-01 -1.0763123420178787e-02 + 2.1738251674415826e-01 2.0102959545208579e-01 -2.3177130972816734e-02 + 3.3824592066680703e-01 2.9127572046602940e-01 -4.3315272430750527e-02 + 4.5553936029405151e-01 3.7842764216246227e-01 -7.6476401927488169e-02 + 5.6785348458998253e-01 4.5881820114928445e-01 -1.2672545311406710e-01 + 6.7167852428675889e-01 5.2996502167854498e-01 -1.9716357229016321e-01 + 7.6226757527426692e-01 5.9121544788803648e-01 -2.8845911240720784e-01 + 8.3494497853165139e-01 6.4417037504119401e-01 -3.9833826670811556e-01 + 8.8528388012269521e-01 6.9174940118077055e-01 -5.2242749669167710e-01 + 9.0991759521755156e-01 7.3645854016550583e-01 -6.5467709959923204e-01 + 9.0718886431736245e-01 7.7991410273377182e-01 -7.8774112645617889e-01 + 8.7900966583510698e-01 8.2213858152235897e-01 -9.1450723911239840e-01 + 8.3001924917132541e-01 8.6266973280790105e-01 -1.0295317936733426e+00 + 7.6278620614117576e-01 9.0414734196605329e-01 -1.1241460728487498e+00 + 6.7823586236759659e-01 9.5223492115799679e-01 -1.1778398779865105e+00 + 5.8537132632255751e-01 1.0044408431543399e+00 -1.1635329100299039e+00 + 5.0475594980900917e-01 1.0403133030673255e+00 -1.0753421035857726e+00 + 4.5329837518638760e-01 1.0371411863975450e+00 -9.3895203784568082e-01 + 3.5497702148040799e-01 1.0361769712729008e+00 -9.3357588342629227e-01 + id 14869 + loc 7.0687127113342285e-01 4.6336299180984497e-01 394 + blend 0.0000000000000000e+00 + interp 4.3925286774375544e-01:3.5986458494130025e-01:2.6570707631389756e-01:2.7921672188267799e-01:1.1693492421735436e+00:3.3497571093629547e-01:1.9891136158454115e+00:4.3924847521507804e-01:2.8254263433063653e+00:3.7661205226618610e-01:3.4514420696550285e+00 + CVs 20 + 3.2356961560444308e-01 2.3034427915451419e-01 2.0057566495176354e-01 + 6.1273745146921699e-01 4.3564299872431078e-01 3.9212007608934629e-01 + 8.8592915578602027e-01 6.3057099119888593e-01 5.8063242108883717e-01 + 1.1473006826755332e+00 8.2536176186561061e-01 7.7216561286326013e-01 + 1.3882854667544713e+00 1.0211389669450697e+00 9.6935088069300845e-01 + 1.6055042896047607e+00 1.2186774791369821e+00 1.1737844529826724e+00 + 1.8022638281233521e+00 1.4210674982558502e+00 1.3872300540916060e+00 + 1.9860425633177550e+00 1.6322424492490279e+00 1.6143153471740597e+00 + 2.1664107093566964e+00 1.8523857592087998e+00 1.8659412579936965e+00 + 2.3525093109545372e+00 2.0733713792282025e+00 2.1569584613236499e+00 + 2.5535540562672976e+00 2.2789778850121687e+00 2.4966840869802809e+00 + 2.7763821587492243e+00 2.4498232542465428e+00 2.8797294743731285e+00 + 3.0194585908844802e+00 2.5708641665680689e+00 3.2939338494345112e+00 + 3.2752135144356043e+00 2.6308834722523677e+00 3.7370219154902165e+00 + 3.5437977794556579e+00 2.6154511586371099e+00 4.2146215320515186e+00 + 3.8526301014390683e+00 2.5026612720472485e+00 4.7281909088843577e+00 + 4.2409283248036509e+00 2.2580492861661039e+00 5.2578275609099077e+00 + 4.6831071328645715e+00 1.8609544455651013e+00 5.7329851544457879e+00 + 4.8930491042697657e+00 1.5605121811873852e+00 5.9318336374133835e+00 + id 14870 + loc 4.7352215647697449e-01 9.6442246437072754e-01 405 + blend 0.0000000000000000e+00 + interp 4.8439631832644736e-01:3.0561127830601909e-01:3.4999158311855405e-02:3.1848567084006563e-01:1.0102764209880295e+00:2.1179396220544378e-01:1.8232257577922184e+00:3.1334223860536020e-01:2.8768568351144213e+00:4.8439147436326413e-01:3.6128407130427620e+00 + CVs 20 + 3.7648848154113551e-01 3.5964192981183002e-01 -1.2239873743265578e-01 + 5.8527383911254272e-01 6.4135841837532570e-01 -2.4266458002774338e-01 + 7.6151809421021643e-01 8.5185338785993459e-01 -3.4174159751594202e-01 + 9.5687355511794991e-01 1.0651290028520819e+00 -4.0770528353153568e-01 + 1.1736039681633221e+00 1.2837882514204959e+00 -4.1526898672952162e-01 + 1.4140198475409262e+00 1.4962523516531869e+00 -3.3245396223299151e-01 + 1.6710994093515144e+00 1.6683467468170849e+00 -1.4038931864236617e-01 + 1.9252074800409866e+00 1.7616420893049343e+00 1.3388968531953768e-01 + 2.1600864561737607e+00 1.7754906631235863e+00 4.3093953423322673e-01 + 2.3742324522397515e+00 1.7420660273264810e+00 7.1175410344423762e-01 + 2.5721235839202947e+00 1.6887946895896517e+00 9.7227448329923116e-01 + 2.7549020498696724e+00 1.6244172484284902e+00 1.2262363641450507e+00 + 2.9204078100345394e+00 1.5532846091804808e+00 1.4807530238384774e+00 + 3.0674772806804196e+00 1.5032234769861919e+00 1.7203634624811786e+00 + 3.1970269692914304e+00 1.5205673811160152e+00 1.9185669462729076e+00 + 3.3065313944416252e+00 1.6251405060487445e+00 2.0588676762036733e+00 + 3.3859704339297765e+00 1.7904454929234961e+00 2.1432033803633344e+00 + 3.4285104970205440e+00 1.9771228515377663e+00 2.1912961289809334e+00 + 3.4960075950528782e+00 2.0350794228661107e+00 2.4098231349034420e+00 + id 14871 + loc 2.5867208838462830e-01 6.6948676109313965e-01 394 + blend 0.0000000000000000e+00 + interp 4.7544964497096004e-01:4.7544489047451033e-01:4.9281458490306962e-02:4.6875186525634110e-01:5.2934843964636924e-01:3.4883534012223627e-01:1.0712237838170644e+00:4.4289526852246153e-01:1.6566971086684805e+00:4.1100415451103312e-01:2.0000079028968631e+00:3.7879678379812243e-01:2.8336006357871533e+00:3.9235881338205908e-01:3.0751063183746981e+00:3.5034473220643336e-01:3.7668588423688560e+00 + CVs 20 + -5.1552226963778064e-02 2.2298194392135434e-01 -3.8469212820738635e-01 + -1.0859370414128769e-01 4.7996903135442071e-01 -7.4709721355236236e-01 + -1.7331207259120815e-01 7.7629575376197724e-01 -1.0698030200708362e+00 + -2.4086962667479092e-01 1.0904961577325656e+00 -1.3497418991188974e+00 + -3.0436494765643363e-01 1.3862898300823583e+00 -1.5984473310560019e+00 + -3.5923900287523514e-01 1.6314868253567696e+00 -1.8308770846463440e+00 + -4.1246788336294360e-01 1.8269904910031269e+00 -2.0552985226699843e+00 + -4.7955966331161237e-01 1.9951432955015205e+00 -2.2771796472898549e+00 + -5.5600878799114795e-01 2.1340696895239604e+00 -2.4876391596833640e+00 + -6.1264856835565373e-01 2.2299667438377040e+00 -2.6558347363154091e+00 + -6.4266043101373937e-01 2.3040082711263263e+00 -2.7684610125456119e+00 + -6.8112184030842648e-01 2.3870899434291442e+00 -2.8725744249076595e+00 + -7.5205441874817280e-01 2.4632562862972018e+00 -3.0251144235026448e+00 + -8.4755144036288588e-01 2.4895732979219662e+00 -3.2267258043273639e+00 + -9.4512240856136120e-01 2.4306750752957158e+00 -3.4480607179473877e+00 + -1.0168075286895506e+00 2.2529585850365850e+00 -3.6828298847430432e+00 + -1.0553991534545146e+00 1.9287034636802391e+00 -3.9346809946046335e+00 + -1.1260955606124023e+00 1.5316175626550872e+00 -4.1676746384872585e+00 + -1.2927532828014221e+00 1.4154053389668761e+00 -4.2297400038141735e+00 + id 14872 + loc 3.6425605416297913e-01 8.5043668746948242e-01 405 + blend 0.0000000000000000e+00 + interp 4.4731861237454201e-01:3.7766100439221112e-01:3.9616941630027802e-01:3.1028815023439216e-01:1.3087642175712837e+00:4.4731413918841828e-01:2.0076428634072343e+00:3.1979411519088069e-01:2.8744736255377576e+00:2.9755082195483934e-01:3.5439506370941882e+00 + CVs 20 + 3.2424698424459569e-01 3.5791060114664730e-01 -8.9153232077542638e-02 + 4.7392804293628066e-01 6.7030808508405815e-01 -1.6096000588697812e-01 + 6.0170135456288809e-01 9.2660784526001372e-01 -1.9743300483988607e-01 + 7.3697580910557503e-01 1.1883815050547706e+00 -1.7410312609877243e-01 + 8.7642207750203727e-01 1.4452721659748153e+00 -6.4830091796457670e-02 + 1.0150683284606936e+00 1.6694259796634752e+00 1.4772418593218109e-01 + 1.1457544474902512e+00 1.8251867874780672e+00 4.4856262656145396e-01 + 1.2644708892022238e+00 1.8989251073950992e+00 7.9085061671312762e-01 + 1.3725760238196685e+00 1.9087891039246112e+00 1.1330715591842235e+00 + 1.4733978453508159e+00 1.8807152089184833e+00 1.4603133695845281e+00 + 1.5684502633428556e+00 1.8289952435927499e+00 1.7757854912805369e+00 + 1.6564067805789955e+00 1.7560928957071744e+00 2.0876306909800681e+00 + 1.7362502277786980e+00 1.6677965914418451e+00 2.3924506168394108e+00 + 1.8095115251580409e+00 1.5941040690990573e+00 2.6665307006500272e+00 + 1.8756703293438919e+00 1.5745224673595075e+00 2.8840910512485278e+00 + 1.9267977800059302e+00 1.6081200346072495e+00 3.0393936718424897e+00 + 1.9556148916187375e+00 1.6575521104641777e+00 3.1459947596184792e+00 + 1.9571036979745473e+00 1.6908464026653718e+00 3.2257691580776626e+00 + 1.9266917891270827e+00 1.6026678515106401e+00 3.4007703028935117e+00 + id 14873 + loc 4.2000699043273926e-01 3.7027084827423096e-01 394 + blend 0.0000000000000000e+00 + interp 4.7927260421233370e-01:3.2438373619239419e-01:3.8258942516128680e-01:4.6296639351468011e-01:1.1888903146614813e+00:4.1004782498922304e-01:1.9411980358040579e+00:2.9778306610897581e-01:2.3251645571986153e+00:3.5065444304245674e-01:3.0023574505087716e+00:4.7926781148629161e-01:3.7646000794094987e+00 + CVs 20 + -2.0474503127004121e-01 1.9624676444440814e-01 2.8942138898794267e-01 + -3.9623463104653078e-01 3.4997654367339776e-01 5.6373315138716662e-01 + -5.8145170093506882e-01 4.8105743658904515e-01 8.4928194823767322e-01 + -7.6088461369997007e-01 6.0249198607046206e-01 1.1564899112298201e+00 + -9.2873206748205916e-01 7.1384229478121874e-01 1.4729740571683585e+00 + -1.0774328237278759e+00 8.0579461217912840e-01 1.7810015113284030e+00 + -1.2046288104245080e+00 8.6992174592435090e-01 2.0696465960234294e+00 + -1.3141606893290465e+00 9.0627147500528971e-01 2.3358256560648782e+00 + -1.4007158895870258e+00 9.2214666688148850e-01 2.5724558414807155e+00 + -1.4450859670990579e+00 9.3413802915004140e-01 2.7655542887124911e+00 + -1.4401663664696134e+00 9.6778431078735072e-01 2.9096296265740111e+00 + -1.4109630796278507e+00 1.0427384056570173e+00 3.0165655462278798e+00 + -1.4020414892700044e+00 1.1524446572871114e+00 3.1101542118403320e+00 + -1.4572589656612793e+00 1.2382594379268390e+00 3.2174059444051304e+00 + -1.5860105159925797e+00 1.2223403648497313e+00 3.3324087846289689e+00 + -1.7661409531006802e+00 1.0903259772261600e+00 3.4165936593134583e+00 + -1.9775517766872830e+00 8.6828624370123952e-01 3.4559754750325866e+00 + -2.2042936668632569e+00 5.9105474520894230e-01 3.5105570529115071e+00 + -2.4072838615103289e+00 3.2858643923832309e-01 3.7156208575697489e+00 + id 14874 + loc 8.3703994750976563e-01 7.7171128988265991e-01 405 + blend 0.0000000000000000e+00 + interp 3.8019158714171675e-01:3.0313659920988079e-01:1.7342877986652949e-01:2.8565090101219032e-01:9.7407684144306395e-01:3.3795485915081297e-01:1.6126933038384093e+00:3.1361521864264125e-01:2.2786113683867537e+00:3.8018778522584534e-01:2.9551970211170948e+00:3.0751187314938738e-01:3.2803316370831048e+00 + CVs 20 + 1.5549177258948882e-01 2.9850263824907697e-01 -5.7587301551679390e-02 + 1.7319557149630610e-01 5.0324746360351513e-01 -9.6541999264173312e-02 + 1.4268540877542918e-01 6.7293710135711371e-01 -1.2447783519045622e-01 + 1.0849417148075724e-01 8.3888855110032257e-01 -1.4095161862353739e-01 + 7.0252498834576071e-02 9.9435560550530067e-01 -1.4020050936354023e-01 + 2.8502829767054205e-02 1.1308831639537851e+00 -1.1487881462901930e-01 + -1.5165613036972003e-02 1.2356153966457415e+00 -5.5618753705006650e-02 + -5.9161511368146125e-02 1.2874483764862135e+00 4.2784859877193236e-02 + -1.0521530819434788e-01 1.2730400938818422e+00 1.6072042650731766e-01 + -1.5412627897774112e-01 1.2236835057169166e+00 2.7476010611037416e-01 + -2.0333533999300996e-01 1.1644360624000305e+00 3.9616267923622267e-01 + -2.5464819004927575e-01 1.0913533010267036e+00 5.3233130933986761e-01 + -3.1043198659535215e-01 9.9900781184889165e-01 6.8054881872321915e-01 + -3.6607458338348714e-01 8.8715592928913134e-01 8.4314797843436196e-01 + -4.0756069893823521e-01 7.5763772073903524e-01 1.0314692397092668e+00 + -4.1687949397139068e-01 6.1489551116479069e-01 1.2553540980778566e+00 + -3.8255822107056553e-01 4.6842677099412688e-01 1.5108436824029086e+00 + -3.0744044838635576e-01 3.2971497561130059e-01 1.7807885714116638e+00 + -3.3074057490523240e-01 2.1311923339810468e-01 1.9341893169987934e+00 + id 14875 + loc 5.5967664718627930e-01 9.4812965393066406e-01 394 + blend 0.0000000000000000e+00 + interp 5.2108042668191212e-01:3.5719677405205941e-01:1.2235960240313815e-02:3.7178998601404162e-01:9.2310813226783872e-01:2.8541931710634222e-01:1.3952237019339058e+00:3.5731026822480377e-01:2.0004756545970244e+00:5.2107521587764538e-01:2.8503101300255977e+00:3.4748346210239583e-01:3.0799136383882928e+00 + CVs 20 + -2.5767259562633282e-01 2.0858520079598386e-01 -1.6932242257223484e-01 + -5.0410432451807474e-01 4.0466813463572049e-01 -3.1172181868575005e-01 + -7.4729955550940053e-01 6.0079092319324756e-01 -4.5141236349121711e-01 + -9.8654661353026296e-01 7.9776144417893369e-01 -6.0200534478963175e-01 + -1.2180259522756343e+00 9.8761072640485548e-01 -7.6751406881003637e-01 + -1.4400266537448765e+00 1.1624453703494315e+00 -9.4910536110295429e-01 + -1.6559871523569274e+00 1.3163672044063299e+00 -1.1468489368482855e+00 + -1.8700265660326552e+00 1.4418957871899551e+00 -1.3623799162534374e+00 + -2.0787023043977371e+00 1.5258364954820200e+00 -1.5974487407746305e+00 + -2.2739939451187920e+00 1.5538976628995198e+00 -1.8506997413042063e+00 + -2.4541765210582693e+00 1.5174226396484116e+00 -2.1134802632856049e+00 + -2.6227953715735972e+00 1.4173298984856753e+00 -2.3702975872836163e+00 + -2.7791587802282134e+00 1.2700312949749328e+00 -2.6136616953047884e+00 + -2.9186114920039259e+00 1.0999647833732042e+00 -2.8540510611169996e+00 + -3.0338741501440332e+00 9.0338982295683401e-01 -3.0909469009103612e+00 + -3.1076123945816470e+00 6.2488118338038401e-01 -3.2698901707353216e+00 + -3.1381705321105464e+00 1.7815435368444343e-01 -3.3324247032418786e+00 + -3.1907830933248924e+00 -3.6709618973761193e-01 -3.4371065036264343e+00 + -3.1978586702686482e+00 -3.2113746855255632e-01 -3.7832242225296522e+00 + id 14876 + loc 9.5431756973266602e-01 5.0921595096588135e-01 405 + blend 0.0000000000000000e+00 + interp 3.8813634936647129e-01:3.0722806344637860e-01:7.1818690114284500e-01:2.5021673269539357e-01:1.1597586431025872e+00:3.1821442464665223e-01:1.9999757388729371e+00:2.2732240594790268e-01:2.4951293170412705e+00:3.8813246800297763e-01:3.0898526440104321e+00:2.7652141161615995e-01:3.8439416525095180e+00 + CVs 20 + 1.0940893410461890e-01 2.4040937091094039e-01 -1.5479068057275566e-01 + 1.0926526446353604e-01 4.3285363232725360e-01 -3.0285742899371354e-01 + 9.6290516730798581e-02 5.7865430788978478e-01 -4.3350567554088665e-01 + 8.0638441991473853e-02 7.1597195572494554e-01 -5.5439344640212407e-01 + 5.7101587990769476e-02 8.5104511743233857e-01 -6.6237260845218637e-01 + 1.9080455665497098e-02 9.9236431383389601e-01 -7.5312388855853840e-01 + -4.4926219455931227e-02 1.1521281912563799e+00 -8.1747732527507433e-01 + -1.5216489090660168e-01 1.3424000568868577e+00 -8.3234243853260748e-01 + -3.1740752017453644e-01 1.5594861109786162e+00 -7.4827422664500776e-01 + -5.1269650895324281e-01 1.7499314363397918e+00 -5.1593936248185690e-01 + -6.5625259539958203e-01 1.8455712207501804e+00 -1.8601666645134421e-01 + -7.1681854861224692e-01 1.8596369042055638e+00 1.3207551623502409e-01 + -7.2392685783043254e-01 1.8374221059288633e+00 4.0115518281778639e-01 + -7.0174652302648144e-01 1.8050403162716155e+00 6.2727925106660498e-01 + -6.5888198127010145e-01 1.7878910465048086e+00 8.0765293409200756e-01 + -6.0325768073641250e-01 1.8110101862440402e+00 9.3185023387955523e-01 + -5.4719003964708479e-01 1.8775148843849871e+00 9.9881721398491252e-01 + -4.9733516305345321e-01 1.9683585674569155e+00 1.0268342987921073e+00 + -4.1201284094736751e-01 2.0192674727894580e+00 1.1446584203121941e+00 + id 14877 + loc 6.6119146347045898e-01 7.4920248985290527e-01 394 + blend 0.0000000000000000e+00 + interp 4.3683622452174903e-01:3.8277586004185044e-01:4.2193603145005976e-02:3.5689424246167939e-01:9.7162841381472231e-01:2.4832764754901498e-01:1.4222863217297896e+00:3.4143548147236269e-01:2.0074159479753009e+00:3.6208189187194634e-01:2.6897013571529111e+00:4.0056773813330393e-01:3.0053674712306839e+00:4.3683185615950382e-01:3.4611798961899236e+00 + CVs 20 + -2.0882470627335548e-01 1.8099072877144962e-01 -2.3647399104995917e-01 + -4.2089699814479409e-01 3.6014792604134643e-01 -4.7448110667391341e-01 + -6.3232330695408789e-01 5.4265643549841291e-01 -7.1948709976879066e-01 + -8.3817157399551356e-01 7.3165976498615315e-01 -9.7725971082974417e-01 + -1.0347867134171782e+00 9.2915480619994495e-01 -1.2517825616749585e+00 + -1.2235251863144423e+00 1.1378484185370090e+00 -1.5427394072930061e+00 + -1.4089481592586548e+00 1.3563781497261118e+00 -1.8503770437824620e+00 + -1.5947432845421552e+00 1.5711842849896263e+00 -2.1843470138719692e+00 + -1.7852165709941743e+00 1.7581084728699690e+00 -2.5584178730149425e+00 + -1.9892502562240417e+00 1.8934679203763787e+00 -2.9757770680180884e+00 + -2.2148334051051095e+00 1.9616534335036864e+00 -3.4268516864122440e+00 + -2.4591909647354546e+00 1.9588564040364069e+00 -3.8970757368332896e+00 + -2.7180946814203777e+00 1.8913409880001633e+00 -4.3715546868067126e+00 + -3.0033767424055853e+00 1.7639440994553373e+00 -4.8317590035758773e+00 + -3.3353494088882165e+00 1.5721461762204409e+00 -5.2546391985787437e+00 + -3.7171089539658313e+00 1.2902329239779888e+00 -5.6206846305147948e+00 + -4.1244773155781367e+00 8.8123076940621869e-01 -5.9092326862888038e+00 + -4.5099311264755482e+00 3.8555789601304369e-01 -6.0986889053142228e+00 + -4.7786567078187812e+00 1.7883407560666686e-01 -6.2837578666953062e+00 + id 14878 + loc 5.8319163322448730e-01 6.8104606866836548e-01 405 + blend 0.0000000000000000e+00 + interp 4.7830860993403718e-01:3.3895107837973337e-01:6.1791586940392573e-01:2.8669716793940192e-01:1.7044211155821216e+00:4.7830382684793787e-01:2.3070202339718793e+00:2.9970332984155523e-01:2.9637893803521518e+00:2.9492843659711671e-01:3.8577179805993311e+00 + CVs 20 + 1.8855392349190192e-01 2.9829041326181965e-01 -9.3093933735460238e-02 + 2.5072646124391040e-01 5.4583751433955108e-01 -1.7103314392875479e-01 + 2.9314811704371846e-01 7.4481277343042507e-01 -2.2447153954987670e-01 + 3.3430059125052947e-01 9.4646781324466767e-01 -2.4678098081484084e-01 + 3.6925564876787303e-01 1.1521155813921546e+00 -2.2207176312534177e-01 + 3.9609471106368127e-01 1.3524926866819120e+00 -1.2870862537121608e-01 + 4.1772341332589713e-01 1.5192516680386832e+00 4.6549440685837828e-02 + 4.4271031503061020e-01 1.6165801876897254e+00 2.8155934779748998e-01 + 4.7743140512866011e-01 1.6381129172578339e+00 5.2720328907846503e-01 + 5.2001731073393942e-01 1.6066262549397119e+00 7.5188557300942949e-01 + 5.6432681882884839e-01 1.5411178732617565e+00 9.5225975909582605e-01 + 6.0301394832560440e-01 1.4451030482115943e+00 1.1356913760289327e+00 + 6.3043859951416159e-01 1.3169364512328283e+00 1.3038061116946142e+00 + 6.4560023719649706e-01 1.1671857369787246e+00 1.4477510555673911e+00 + 6.5224253881819494e-01 1.0169384212879879e+00 1.5620176193219293e+00 + 6.5585218958138813e-01 8.7583472665633733e-01 1.6552915125154641e+00 + 6.6038301428430024e-01 7.3437092561283235e-01 1.7441477992717740e+00 + 6.6649014071248924e-01 5.8135040343582256e-01 1.8427898546962445e+00 + 6.2947423655177592e-01 3.8222242737052692e-01 1.9538187168538532e+00 + id 14879 + loc 8.9824146032333374e-01 1.3126380741596222e-01 394 + blend 0.0000000000000000e+00 + interp 5.0392453635390622e-01:4.4868279136764311e-01:3.5019828445243328e-01:5.0391949710854267e-01:9.5197691356685399e-01:4.7518350429763412e-01:1.0929092740646296e+00:3.2564517621780703e-01:1.5592097064539447e+00:3.4375168778160969e-01:2.0830815537720948e+00:3.4444742420576596e-01:2.9976232951232338e+00:3.8423453857842843e-01:3.3523783755412322e+00:3.4336361715010738e-01:3.9856595219373037e+00 + CVs 20 + 2.3066814174617478e-01 2.6659592167206753e-01 3.2220795462910112e-01 + 4.7458211668742600e-01 5.0611438257696517e-01 5.7655344435246947e-01 + 7.1705957192687197e-01 7.3503946775930262e-01 8.1133273438601661e-01 + 9.5013687227781629e-01 9.6515236337806853e-01 1.0498674405258441e+00 + 1.1679724055767919e+00 1.1984675002221499e+00 1.2974415504739523e+00 + 1.3683876363385976e+00 1.4320754168038019e+00 1.5604093114972664e+00 + 1.5543911602323135e+00 1.6589070066879241e+00 1.8456872949925258e+00 + 1.7280538707538415e+00 1.8702328591941804e+00 2.1584962608718392e+00 + 1.8870235820913424e+00 2.0580140139161118e+00 2.5022152333221088e+00 + 2.0289258197610671e+00 2.2161177261775356e+00 2.8804789117574439e+00 + 2.1612727485820811e+00 2.3370944359506605e+00 3.3037104574438763e+00 + 2.2987831405252321e+00 2.4007785033966051e+00 3.7835310841218570e+00 + 2.4434288781301543e+00 2.3648697998466175e+00 4.3106120909104071e+00 + 2.5690567709809016e+00 2.1966231779776240e+00 4.8212806817345619e+00 + 2.6516227597104098e+00 1.9303053851437024e+00 5.2447770552598083e+00 + 2.6978669116172131e+00 1.6297478007166020e+00 5.5916067772933342e+00 + 2.7300249743948752e+00 1.3305734423574878e+00 5.9252743588304346e+00 + 2.8027739752010250e+00 1.0483250122518672e+00 6.2886333271171280e+00 + 3.0398389995289956e+00 8.3378391316960920e-01 6.6502386503505200e+00 + id 14880 + loc 4.2216190695762634e-01 4.4644543528556824e-01 405 + blend 0.0000000000000000e+00 + interp 3.3139742113489679e-01:3.3139410716068546e-01:7.4461072953679919e-01:3.1521103692125058e-01:1.2043664613913401e+00:3.0750643195415339e-01:1.9755523571109244e+00:2.8313468573869438e-01:2.6162835299191682e+00:3.0056724838105836e-01:3.1305971316486056e+00:2.9839452495218366e-01:3.9956440495575150e+00 + CVs 20 + 1.4028440622515740e-02 1.6989676148641664e-01 -3.2651880918342785e-02 + 2.2935216802266442e-02 2.9764642928500146e-01 -9.4886637386442652e-03 + 3.6976645995061522e-02 4.0653119787567754e-01 2.9104712856580894e-02 + 6.2765371546212617e-02 5.1261396251621094e-01 6.2116675886711575e-02 + 1.0280563237606069e-01 6.1506371191807419e-01 9.2283763881191527e-02 + 1.5994759283190285e-01 7.1239906831530830e-01 1.2128365374493491e-01 + 2.3660824511525450e-01 8.0227508252097457e-01 1.4917272459394912e-01 + 3.3369309896868732e-01 8.8210675649230752e-01 1.7454780029168326e-01 + 4.5057492416632883e-01 9.4990253477870257e-01 1.9541342253386013e-01 + 5.8580687104515150e-01 1.0043855247987807e+00 2.1022567445612966e-01 + 7.3816501421385250e-01 1.0446410250185292e+00 2.1862697813610799e-01 + 9.0755051569240941e-01 1.0690998429832157e+00 2.2163538114398529e-01 + 1.0911332181416034e+00 1.0747159998557403e+00 2.2155680908896619e-01 + 1.2770859433129294e+00 1.0598848865236985e+00 2.2195901377030047e-01 + 1.4516816535880650e+00 1.0290669921966575e+00 2.2699444997231624e-01 + 1.6153144210108039e+00 9.9006534206444308e-01 2.3880485031046533e-01 + 1.7812330844483428e+00 9.4901256881535578e-01 2.5490879724608284e-01 + 1.9616773489869317e+00 9.1017977515332338e-01 2.6920608288601766e-01 + 2.1870182534052183e+00 8.7673383315176645e-01 2.6487740237380458e-01 + id 14881 + loc 5.8150869607925415e-01 1.9476762413978577e-01 394 + blend 0.0000000000000000e+00 + interp 4.3344887628600504e-01:2.6621201499748226e-01:7.9398638383391340e-02:3.5764180277304175e-01:7.4498273467618270e-01:2.6432479933255593e-01:1.0751008974067069e+00:3.3474152190703865e-01:1.9993274244311210e+00:3.3739867370157145e-01:2.4908118534424974e+00:3.5436696004047080e-01:2.9915207901290204e+00:4.3344454179724218e-01:3.9042891854909385e+00 + CVs 20 + 2.2410672523847067e-01 2.7950901541943063e-01 2.1516051164911487e-01 + 4.8714564418946993e-01 5.6023928134994461e-01 3.9850915721665059e-01 + 7.6099925044536865e-01 8.4688778597831793e-01 5.7870510484764282e-01 + 1.0282228608227129e+00 1.1436306654263306e+00 7.7508048058266865e-01 + 1.2796533402815993e+00 1.4432920867072245e+00 1.0032374029300848e+00 + 1.5139310407039606e+00 1.7249827957586681e+00 1.2768401919037335e+00 + 1.7283249952383484e+00 1.9675372361642443e+00 1.6040688972710699e+00 + 1.9137669688867098e+00 2.1557498652744851e+00 1.9845626761666839e+00 + 2.0614739214876967e+00 2.2787992149501055e+00 2.4099723647902467e+00 + 2.1691749067660093e+00 2.3268936818179391e+00 2.8644835981931518e+00 + 2.2413303910213376e+00 2.2890832172933990e+00 3.3307394778767287e+00 + 2.2816469463246918e+00 2.1521778751878937e+00 3.7893270660011127e+00 + 2.2911722868480262e+00 1.9181380438579949e+00 4.2187190301127568e+00 + 2.2782495278600425e+00 1.6297907933363029e+00 4.6163414945002046e+00 + 2.2634441010281705e+00 1.3507937589703234e+00 5.0063610946247703e+00 + 2.2772975504718254e+00 1.1180591982052150e+00 5.4064104685511278e+00 + 2.3681493136344232e+00 9.1997646636954356e-01 5.8208477710373181e+00 + 2.5704212994459112e+00 7.4221009167429797e-01 6.2357529958019819e+00 + 2.6798746550423038e+00 6.4661432662905893e-01 6.5603473256788254e+00 + id 14882 + loc 1.9700975716114044e-01 1.1248648166656494e-02 405 + blend 0.0000000000000000e+00 + interp 3.7459735692249885e-01:3.0188444090289157e-01:1.4682842375444705e-02:3.7459361094892962e-01:6.4447116388254366e-01:3.5870257467728728e-01:1.0452725917178589e+00:3.6712193223533662e-01:1.7988129186401567e+00:2.9838535961484897e-01:2.1369759362556233e+00:3.5928156199344491e-01:3.0895500997733683e+00 + CVs 20 + -6.9983722524265615e-02 -1.6372409547463967e-02 5.1086238991667685e-02 + -1.4839674307899609e-01 -7.6592642325028326e-02 7.4689406566777999e-02 + -2.5481085057495517e-01 -1.1684881718014138e-01 1.1977186165003775e-01 + -3.6792065263817986e-01 -1.4968157200691309e-01 1.5259071359614818e-01 + -4.8674472272127317e-01 -1.7235325148707728e-01 1.7017978307212356e-01 + -6.1068443083174773e-01 -1.7927814331169104e-01 1.7746165241669629e-01 + -7.3713650196121694e-01 -1.6618807914284667e-01 1.8516099782924950e-01 + -8.6098981293344701e-01 -1.3300417574397513e-01 2.0271449632775246e-01 + -9.7574093462717981e-01 -8.3454673553257752e-02 2.3569966429185574e-01 + -1.0746213452019457e+00 -2.4417499160972772e-02 2.8852633888296331e-01 + -1.1517686966710965e+00 3.5741974753898592e-02 3.6355013095979666e-01 + -1.2032151029755913e+00 8.9016939398002731e-02 4.5841267637395733e-01 + -1.2284993314342603e+00 1.2946877328120079e-01 5.6565264481467536e-01 + -1.2303471216805244e+00 1.5533941526180278e-01 6.7443509787377232e-01 + -1.2101131641246434e+00 1.7016267621896602e-01 7.7085827921179317e-01 + -1.1680240079188193e+00 1.7885497075245954e-01 8.4238953900678593e-01 + -1.1005828671529978e+00 1.8425156810066334e-01 8.9071025127210945e-01 + -1.0016825283571609e+00 1.8502238551299260e-01 9.2469558123046247e-01 + -8.8179645339273216e-01 1.2760570955078399e-01 7.8226071049215573e-01 + id 14883 + loc 4.8042286187410355e-02 8.6583870649337769e-01 405 + blend 0.0000000000000000e+00 + interp 5.0516979805007622e-01:2.6569739101499246e-01:9.9360626398637442e-01:4.4717092784627011e-01:1.4921009497234823e+00:3.8144374618255339e-01:2.1095908934725278e+00:4.6510751766504976e-01:2.8285260286816847e+00:3.0514600596295555e-01:3.1721167273926123e+00:5.0516474635209574e-01:3.9998586480136060e+00 + CVs 20 + 1.9698434798455899e-01 2.6218166160491763e-01 9.6557740010077456e-02 + 2.3071537281018925e-01 4.1108412504746894e-01 1.5458361370292767e-01 + 2.1061377809901027e-01 5.3309243061740264e-01 2.1021553175344121e-01 + 1.9193066015678420e-01 6.4812326571620593e-01 2.7092775775862887e-01 + 1.7397250696967287e-01 7.5787460344843383e-01 3.3822227882231409e-01 + 1.5701096871160442e-01 8.6456716625659769e-01 4.1766380432434574e-01 + 1.4155715404065833e-01 9.6811036995631605e-01 5.1774977934209854e-01 + 1.2861979932213957e-01 1.0654612275508764e+00 6.4563819269074885e-01 + 1.2080190787174794e-01 1.1525983479425783e+00 8.0382116079432298e-01 + 1.2255663146338869e-01 1.2271082682355581e+00 9.9010784947900710e-01 + 1.4006053219179621e-01 1.2894974286925867e+00 1.1987848437603976e+00 + 1.7956711431444539e-01 1.3415669297717696e+00 1.4225737397517491e+00 + 2.4269033550530245e-01 1.3807175455596821e+00 1.6523359907972290e+00 + 3.2296397043046865e-01 1.3987453267199728e+00 1.8716192238159972e+00 + 4.1016099205623607e-01 1.3925786078576423e+00 2.0603102652462963e+00 + 4.9797000237600658e-01 1.3712329094964750e+00 2.2105248022548474e+00 + 5.8411476665308659e-01 1.3459363194553076e+00 2.3254232404990938e+00 + 6.7186880854963271e-01 1.3204048839680163e+00 2.4056283691624873e+00 + 8.4747359813682244e-01 1.3574392848291845e+00 2.4832506064196802e+00 + id 14884 + loc 7.1564012765884399e-01 5.2470877766609192e-02 394 + blend 0.0000000000000000e+00 + interp 4.5742522140502900e-01:3.2520062143765416e-01:2.3433828693974790e-01:3.8914544564835851e-01:1.0101252344625751e+00:2.2540892720912387e-01:1.9037027258391390e+00:4.5742064715281500e-01:2.8878650133538750e+00:3.4678963979961192e-01:3.1578523156840861e+00:4.0111235469020878e-01:3.9714042456036855e+00 + CVs 20 + 2.1985364970966215e-01 2.5677192272422378e-01 2.7224673074834232e-01 + 4.3812458550097205e-01 4.7104469095728763e-01 5.0459738205851146e-01 + 6.4980283845474784e-01 6.5318091037401449e-01 7.2667940979970336e-01 + 8.5289642203316907e-01 8.1263796958642842e-01 9.5248002527029774e-01 + 1.0406208903000624e+00 9.5405797977373563e-01 1.1810151056534133e+00 + 1.2074992690649684e+00 1.0796007326039418e+00 1.4113955256304489e+00 + 1.3565763819339161e+00 1.1861779393989100e+00 1.6441616801167274e+00 + 1.4922229700121672e+00 1.2696447382471834e+00 1.8807801363506413e+00 + 1.6113533101911843e+00 1.3292013933208024e+00 2.1262157528067545e+00 + 1.7056220109842202e+00 1.3649502564291871e+00 2.3852100652180335e+00 + 1.7688524867702018e+00 1.3775563574867038e+00 2.6492423324143006e+00 + 1.8013725549785100e+00 1.3708845037255240e+00 2.9001355353354237e+00 + 1.8104002865891426e+00 1.3219838128236123e+00 3.1384054881631478e+00 + 1.8051850605277862e+00 1.1417012784129024e+00 3.3787489846003256e+00 + 1.7986807453648610e+00 7.5928949965429116e-01 3.6276729195877300e+00 + 1.8242550518464389e+00 2.0414096987191677e-01 3.9192556299542214e+00 + 1.9401188238469784e+00 -4.4375197351357065e-01 4.2940971710144220e+00 + 2.1930496534598798e+00 -1.0654731615766579e+00 4.7045056761376198e+00 + 2.3819339541243982e+00 -1.4037406776163890e+00 4.9134718550456578e+00 + id 14885 + loc 1.9882206618785858e-01 7.6972788572311401e-01 405 + blend 0.0000000000000000e+00 + interp 5.0655431107385807e-01:2.9959575846393177e-01:5.2261240941077647e-02:5.0654924553074732e-01:8.9910691559537770e-01:2.9902703295229710e-01:1.5225215993716308e+00:2.8094984708337528e-01:2.0716194612592842e+00:2.9728416163287102e-01:2.9999647247524832e+00:4.6849198170968853e-01:3.6024553932194068e+00 + CVs 20 + 1.1758744769021695e-01 2.1371138367789771e-01 8.5111241221709932e-02 + 1.2048297152126816e-01 3.0483687874643983e-01 1.3556265103599804e-01 + 7.3840605479471300e-02 3.6884260495548643e-01 1.7165491913177958e-01 + 3.4657922136245078e-02 4.2002388075455510e-01 1.9008155688678580e-01 + 2.9329429359742643e-03 4.6760236004964695e-01 1.8724493120387894e-01 + -2.1056165453164410e-02 5.2416320769904079e-01 1.7053259371752391e-01 + -3.8018987892020017e-02 5.9600981750969295e-01 1.5818145073653067e-01 + -4.8977391157167066e-02 6.7894213791393798e-01 1.6836881228088441e-01 + -5.2888015812045330e-02 7.6383495489948650e-01 2.1045902813424994e-01 + -4.6333150648742716e-02 8.4416778730706521e-01 2.8516330858806094e-01 + -2.3442117223431980e-02 9.1980129443597036e-01 3.8798187209166823e-01 + 2.2124630670231127e-02 9.9374343530543208e-01 5.1393259228537624e-01 + 8.9993465708050668e-02 1.0587935179358745e+00 6.5981057389791542e-01 + 1.6915330127974726e-01 1.0918801725007632e+00 8.1679066731611871e-01 + 2.4698225711691901e-01 1.0787030167653870e+00 9.6830016019570675e-01 + 3.2018944247886949e-01 1.0357717148125849e+00 1.1034830445414752e+00 + 3.8992778814558710e-01 9.8942844202939984e-01 1.2196386270112363e+00 + 4.6498908463086353e-01 9.5118082870086740e-01 1.3130421962142220e+00 + 6.5113245825947830e-01 1.0186937961260083e+00 1.3951301668672578e+00 + id 14886 + loc 7.8873354196548462e-01 2.9856356978416443e-01 394 + blend 0.0000000000000000e+00 + interp 4.3453830007639044e-01:3.8916031761763564e-01:7.0164167898957086e-01:3.0037475166625949e-01:1.5273861338433719e+00:3.4219628265845881e-01:2.0296710836104799e+00:3.6282926409145660e-01:2.5902490765997292e+00:4.3453395469338968e-01:3.0415216077290324e+00:2.8726473147318571e-01:3.7573937539148021e+00 + CVs 20 + 3.9824869886758762e-01 2.6368099822872854e-01 2.1209977716952197e-01 + 7.6312872375866436e-01 4.9344312542026497e-01 3.9738814830008878e-01 + 1.1357239740297016e+00 7.0440353097495878e-01 5.7560710050975206e-01 + 1.5290095699235291e+00 9.0191192440404011e-01 7.6354604987568653e-01 + 1.9320757872312009e+00 1.0762174758771148e+00 9.7159060397700969e-01 + 2.3346016360162878e+00 1.2150338933480964e+00 1.2028375791098851e+00 + 2.7294392797791458e+00 1.3067086453781407e+00 1.4550657600124908e+00 + 3.1083629584212433e+00 1.3357591936530384e+00 1.7221948675085541e+00 + 3.4569599297526441e+00 1.2876250641154150e+00 1.9879502269839657e+00 + 3.7591899219406688e+00 1.1611258920687031e+00 2.2269827818206895e+00 + 4.0075011649048928e+00 9.7024687431557277e-01 2.4231276740278687e+00 + 4.2044465635129580e+00 7.3331773782730458e-01 2.5786558377438347e+00 + 4.3489002400874313e+00 4.7125011099660474e-01 2.6966132977405595e+00 + 4.4340586158173707e+00 2.1141882438899673e-01 2.7778268716706092e+00 + 4.4546571894299989e+00 -1.6585536724510241e-02 2.8302378552693250e+00 + 4.4111938233542975e+00 -1.8007999462306445e-01 2.8704479179287175e+00 + 4.3204596385288703e+00 -2.5602586477488742e-01 2.9255707753387146e+00 + 4.2303490009459281e+00 -3.0009026037099673e-01 3.0197476949578297e+00 + 4.2128723129705365e+00 -5.7961266039539039e-01 3.0928276826589425e+00 + id 14887 + loc 8.4860658645629883e-01 2.8265479207038879e-01 405 + blend 0.0000000000000000e+00 + interp 3.8526015786089424e-01:3.8525630525931565e-01:3.5582718212167530e-01:2.9865236215139163e-01:1.0000613824061784e+00:2.5763551868055590e-01:1.9830510344869698e+00:2.9226283062375913e-01:2.6127281711799575e+00:3.6343570153566335e-01:3.0081150244730583e+00:3.0479140500460250e-01:3.8926626604065464e+00 + CVs 20 + -3.1959561512918878e-02 1.0446333523784249e-01 7.3859165089768170e-02 + -4.2627955671379711e-02 2.0625342449553807e-01 1.4970879366345480e-01 + -3.9668257246728789e-02 2.9341041892312936e-01 2.2223989239236283e-01 + -3.5011719064353769e-02 3.9558156081964441e-01 2.9836615065697158e-01 + -2.0870602140061645e-02 5.1932530062075499e-01 3.7714009541828597e-01 + 1.3066003758956501e-02 6.6819808610364073e-01 4.5508466849429347e-01 + 7.8061253746952830e-02 8.4243521442026492e-01 5.2491105060653731e-01 + 1.8258406944725158e-01 1.0367590371312161e+00 5.7426267501858408e-01 + 3.2749883170676541e-01 1.2405817950863227e+00 5.8764448115547052e-01 + 5.0282454088137585e-01 1.4403029530515374e+00 5.5099576894230806e-01 + 6.8996959366581656e-01 1.6237432317172404e+00 4.5734916909676576e-01 + 8.6941550318554106e-01 1.7838257870975986e+00 3.0697625386383870e-01 + 1.0246482346221115e+00 1.9169646549847206e+00 1.0285908479354780e-01 + 1.1406238051123725e+00 2.0195344032854350e+00 -1.4172295849535479e-01 + 1.2022882757855686e+00 2.0941227994052833e+00 -3.8243398786637112e-01 + 1.2061278579897499e+00 2.1586228667262670e+00 -5.5384379592253641e-01 + 1.1701471954606024e+00 2.2272772230921034e+00 -6.1089557800528471e-01 + 1.1203823575068621e+00 2.2904672575745741e+00 -5.6513281244868507e-01 + 9.8474207070337383e-01 2.3553827296768093e+00 -6.7007047502377493e-01 + id 14888 + loc 4.6742036938667297e-01 5.4178631305694580e-01 394 + blend 0.0000000000000000e+00 + interp 4.0864460795550717e-01:3.7183861704152071e-01:2.1277234158659819e-01:3.7674954002874189e-01:8.6202832627089832e-01:4.0864052150942765e-01:1.1548454002357436e+00:3.8876255689774919e-01:1.8273972070741917e+00:3.3942209084615926e-01:2.0772549969171070e+00:3.5143271922973157e-01:2.9995496680994123e+00:2.4396270810849760e-01:3.7056212020790911e+00 + CVs 20 + -1.9990353465003438e-01 2.6551866346152364e-01 -3.1315007249396332e-01 + -3.8646117706789529e-01 5.2221974140232597e-01 -5.9205777644870139e-01 + -5.7215035984490215e-01 7.8768236528026658e-01 -8.4650046663161260e-01 + -7.6023125868305974e-01 1.0679008863880033e+00 -1.0810361317550403e+00 + -9.5099032719691845e-01 1.3570307490482105e+00 -1.3029276487054045e+00 + -1.1506224672162646e+00 1.6440108037267369e+00 -1.5274331093113656e+00 + -1.3691530954924898e+00 1.9156474188996706e+00 -1.7703459259344947e+00 + -1.6153749953671555e+00 2.1578094242755914e+00 -2.0390335548649796e+00 + -1.8931978070973654e+00 2.3500327080663395e+00 -2.3375004902483987e+00 + -2.1974233246053152e+00 2.4552504767556873e+00 -2.6752019089939676e+00 + -2.5075917777791199e+00 2.4269428602400467e+00 -3.0483603713932022e+00 + -2.7924377430192395e+00 2.2368259765148895e+00 -3.4198050777929927e+00 + -3.0214420992209075e+00 1.8979971637758444e+00 -3.7338236508893594e+00 + -3.1821372469889742e+00 1.4721712258264137e+00 -3.9568020720613299e+00 + -3.2995592460840824e+00 1.0290873452471807e+00 -4.0971400617238150e+00 + -3.4353606257243547e+00 6.2083078341591813e-01 -4.1731309649293813e+00 + -3.6492380987791817e+00 2.8538532228204172e-01 -4.1961967432262437e+00 + -3.9192654847005497e+00 -5.8656216278540896e-04 -4.1862857274636944e+00 + -4.1011951203866515e+00 -3.9935217261093214e-01 -4.2225709185467792e+00 + id 14889 + loc 8.7439745664596558e-01 9.3457973003387451e-01 405 + blend 0.0000000000000000e+00 + interp 4.6640684566995033e-01:4.6640218160149366e-01:5.4149354895301371e-01:3.5869664006166901e-01:9.8329314890938779e-01:2.7711406092588964e-01:1.5012277140526731e+00:3.0160653648090685e-01:2.7256795654662138e+00:3.1332132011244623e-01:3.9891493998698984e+00 + CVs 20 + 1.7540861361088406e-01 3.0543570347047733e-01 -2.9050130159584547e-03 + 2.3975414531321920e-01 4.8199164440189479e-01 -1.1364879927925411e-03 + 2.3929312533340519e-01 6.1916716288667661e-01 -7.8104272726235782e-03 + 2.5064371704819682e-01 7.4915075233201711e-01 -2.3901974514609743e-02 + 2.7042501941497415e-01 8.6708237241126507e-01 -4.5933140258490913e-02 + 2.9291913370304590e-01 9.6950773134329271e-01 -7.2016055921701377e-02 + 3.1158351953334112e-01 1.0563471269006155e+00 -1.0391634345113261e-01 + 3.2212485601844765e-01 1.1369169503269692e+00 -1.4737802389971766e-01 + 3.3474195773747056e-01 1.2304827354907453e+00 -1.9847132793762376e-01 + 3.7219680965746599e-01 1.3302330584550166e+00 -2.2259111791228897e-01 + 4.3339400349871615e-01 1.3943271729127573e+00 -1.9974650177276709e-01 + 5.0704449682518415e-01 1.4050389160274661e+00 -1.4633185172349675e-01 + 5.9001299522588135e-01 1.3652068263930937e+00 -8.0893861725023414e-02 + 6.7985787087056315e-01 1.2778449630575914e+00 -1.6432416767199809e-02 + 7.7241859065856466e-01 1.1431194308042549e+00 3.8503219829534877e-02 + 8.6733802323329701e-01 9.6434406422417329e-01 8.3117208057537653e-02 + 9.7025688227750995e-01 7.5390415113652542e-01 1.2376242228453774e-01 + 1.0868239990802036e+00 5.2874009680655232e-01 1.6584855781775781e-01 + 1.2053566189370399e+00 3.3627941559470709e-01 1.7773709031987539e-01 + id 14890 + loc 8.2905220985412598e-01 8.6927902698516846e-01 394 + blend 0.0000000000000000e+00 + interp 4.7973452531719724e-01:3.3520636356061406e-01:2.9335700418012478e-01:4.7972972797194408e-01:9.0292176111744915e-01:4.0501544917489335e-01:1.1438310163349046e+00:3.1335472545879772e-01:2.0384168142396994e+00:3.4499035084628399e-01:2.9889212211701777e+00:2.4456787550039294e-01:3.4773496370672889e+00 + CVs 20 + -1.6296940610336202e-01 1.9076480294755555e-01 -2.9666928891800093e-01 + -3.1438627464664742e-01 3.8402139126516310e-01 -5.6946300712349029e-01 + -4.4268328791544048e-01 5.8319809290220692e-01 -8.3331063805137129e-01 + -5.4671271481017292e-01 7.8737158493101655e-01 -1.0944507896296192e+00 + -6.3089452730252682e-01 9.9244714742838402e-01 -1.3531062641336762e+00 + -7.0177613093485458e-01 1.1962307506466079e+00 -1.6092163269373918e+00 + -7.6830829130376954e-01 1.3995586871124597e+00 -1.8638725027817853e+00 + -8.4009637142954940e-01 1.6033591886012266e+00 -2.1244987784510481e+00 + -9.2271183145006097e-01 1.8016905034977528e+00 -2.4063540609317999e+00 + -1.0163634028008053e+00 1.9807040293855529e+00 -2.7227583439217944e+00 + -1.1206658976645543e+00 2.1262841991535719e+00 -3.0722313356375781e+00 + -1.2356710325051021e+00 2.2310118027318815e+00 -3.4406091663633527e+00 + -1.3568199094135145e+00 2.2919777816202620e+00 -3.8201145570733317e+00 + -1.4703133272844160e+00 2.3025735857562655e+00 -4.2190760642465328e+00 + -1.5763374662913368e+00 2.2565441685079208e+00 -4.6503660920348731e+00 + -1.7097338302241210e+00 2.1506212137673737e+00 -5.1196492469153503e+00 + -1.8999493747624658e+00 1.9733494396949287e+00 -5.6028800586061243e+00 + -2.0950875816553833e+00 1.7208237234573867e+00 -6.0108030679028879e+00 + -2.1237656765436359e+00 1.5117004079524547e+00 -6.0837911927947887e+00 + id 14891 + loc 9.9540412425994873e-02 1.2255984544754028e-01 405 + blend 0.0000000000000000e+00 + interp 4.1918419244787264e-01:4.1918000060594818e-01:1.7651444180458387e-02:2.9153021666637285e-01:9.8810807186135519e-01:3.2002338770109073e-01:1.9841250269617940e+00:2.9782457254275263e-01:2.5470992285461849e+00:2.9420842634402872e-01:3.0525500103022623e+00 + CVs 20 + 8.9264348834241725e-02 1.1602600754565594e-01 -6.1112506022819757e-02 + 1.6471755483833755e-01 2.1001085118736623e-01 -6.6547903401707645e-02 + 2.4719562282910723e-01 2.6903285115822018e-01 -6.0285158892758206e-02 + 3.4310307824142916e-01 3.0485167871679741e-01 -4.6875840255774626e-02 + 4.4643936092369335e-01 3.1248045780501588e-01 -2.5065061250504256e-02 + 5.4992774167723857e-01 2.8836846841922853e-01 4.2955921093673355e-03 + 6.4711496787885481e-01 2.3289813895301087e-01 3.9580555959922506e-02 + 7.3441275080147939e-01 1.4988618460467729e-01 8.0127500215424252e-02 + 8.1200591089368213e-01 4.4663499637239687e-02 1.2677257594384950e-01 + 8.8390247185209836e-01 -7.7578832954768542e-02 1.8158859502762137e-01 + 9.5674261995450971e-01 -2.1284938121984151e-01 2.4749404799060076e-01 + 1.0386043628124619e+00 -3.5784198559720337e-01 3.2733983676692913e-01 + 1.1371936695835174e+00 -5.0915455830299328e-01 4.2247639690424110e-01 + 1.2566480022326625e+00 -6.6277476206854580e-01 5.3265689964465335e-01 + 1.3972598846064959e+00 -8.1343377766175085e-01 6.5550372935816137e-01 + 1.5561242337940633e+00 -9.5498641363181425e-01 7.8361793286527803e-01 + 1.7295215619856721e+00 -1.0823353394424133e+00 9.0575867711238600e-01 + 1.9096706366547267e+00 -1.1929153733895006e+00 1.0147268847991073e+00 + 2.0631820536711167e+00 -1.2728807913305731e+00 1.1487910191130664e+00 + id 14892 + loc 7.3273450136184692e-01 9.9343019723892212e-01 394 + blend 0.0000000000000000e+00 + interp 5.2108042668191212e-01:3.3392773787911739e-01:1.8833269672624608e-01:5.2107521587764538e-01:8.4479938601154259e-01:4.9764601712076850e-01:1.0935154162547682e+00:3.5772940988708773e-01:1.6967975989915214e+00:2.9531700857850368e-01:2.0906444832535618e+00:4.1804005431018748e-01:2.8872289968138296e+00:3.2137040417761054e-01:3.1916384216350098e+00 + CVs 20 + -2.0646485457157066e-01 1.4376014262233902e-01 -2.0362352692228899e-01 + -4.0188405000147948e-01 3.2159452351099399e-01 -4.4892255081291577e-01 + -5.9586291943594261e-01 5.0636172780315447e-01 -7.0676707202757727e-01 + -7.8442306618808888e-01 6.8252666164430109e-01 -9.6519196990606471e-01 + -9.6887268396166748e-01 8.4613506820532192e-01 -1.2234916610908826e+00 + -1.1501513185574925e+00 9.9454575808393075e-01 -1.4800451915181188e+00 + -1.3253260414462558e+00 1.1203568995086011e+00 -1.7351280268858134e+00 + -1.4884768908083139e+00 1.2094757764127462e+00 -1.9916932247910526e+00 + -1.6427203397170298e+00 1.2479693541107841e+00 -2.2518523840637479e+00 + -1.8013307840229991e+00 1.2223402387419291e+00 -2.5106497403579962e+00 + -1.9675392960518301e+00 1.1230489086121671e+00 -2.7511513390338926e+00 + -2.1306972302765033e+00 9.6137365589390722e-01 -2.9566175366010601e+00 + -2.2870816574297419e+00 7.6113735590580545e-01 -3.1247605205269231e+00 + -2.4437192411545947e+00 5.3807927007977652e-01 -3.2587483050070043e+00 + -2.5997781828569031e+00 3.0200003301514688e-01 -3.3582680511012013e+00 + -2.7399129745652808e+00 6.3668124101532220e-02 -3.4250332130940180e+00 + -2.8555895294285518e+00 -1.6454534170956525e-01 -3.4692618189729592e+00 + -2.9625052658339670e+00 -3.7104319822352871e-01 -3.5105443064460271e+00 + -3.1068119839761792e+00 -5.4142131024025475e-01 -3.5775052274574879e+00 + id 14893 + loc 7.4680942296981812e-01 7.6092642545700073e-01 405 + blend 0.0000000000000000e+00 + interp 3.2993271311005146e-01:3.2992941378292034e-01:4.7410368399202651e-01:2.7579298379845030e-01:1.1364972340656667e+00:3.1865705496598912e-01:2.0499224883239084e+00:2.8565090101219032e-01:2.9737048487239717e+00:2.7739698233553484e-01:3.6840542800093643e+00 + CVs 20 + 8.5839713529964973e-02 2.5349398214411761e-01 2.0938665430016334e-02 + 8.3769483441549192e-02 3.8896303432744678e-01 5.0111675564141853e-02 + 3.2905469619719352e-02 4.9813383968154712e-01 7.4036876930740958e-02 + -6.4176355752605385e-03 5.9398898767554364e-01 9.3406289513169094e-02 + -3.7121587292839375e-02 6.6578870856917782e-01 1.0668456803784392e-01 + -6.4639414407437756e-02 7.0334259675660005e-01 1.0423015296215593e-01 + -9.5715472721136619e-02 7.0616554788030117e-01 6.3780000478104032e-02 + -1.3467392446069887e-01 7.0602439248740056e-01 -3.0333687688411114e-02 + -1.7463972692290661e-01 7.4380006151190814e-01 -1.3210472536846452e-01 + -2.0224110903972695e-01 7.9715665029406502e-01 -1.7536094743946865e-01 + -2.0870725267140808e-01 8.2508612674841653e-01 -1.5578069909773762e-01 + -1.8844264312097458e-01 8.1480098803804346e-01 -9.8892411505337785e-02 + -1.3903475074960536e-01 7.6455511867296788e-01 -2.4132162617470421e-02 + -6.0307803752445294e-02 6.6462482227746489e-01 6.4182667570892984e-02 + 5.0384784973700997e-02 5.0520372558660820e-01 1.7012314105418835e-01 + 1.9994531621132600e-01 2.9811335831649011e-01 2.9447734597692787e-01 + 3.9260055159397073e-01 7.4953259051070184e-02 4.2568890181869096e-01 + 6.2389819774437050e-01 -1.3834843097580860e-01 5.4429423016079781e-01 + 8.4429268973130833e-01 -3.0472719142044202e-01 5.7550250908177691e-01 + id 14894 + loc 9.2073655128479004e-01 6.6779315471649170e-01 394 + blend 0.0000000000000000e+00 + interp 4.5960910232971119e-01:3.8230007522686354e-01:4.3901071649519552e-01:3.5703349088269287e-01:9.8812767925970046e-01:3.5957775185192886e-01:1.4048189688391832e+00:3.1691996384486382e-01:2.0025473896167170e+00:4.5960450623868793e-01:2.8829822650610120e+00:3.4267003293280784e-01:3.1541670561274007e+00:3.0779315702427085e-01:3.9998622636559160e+00 + CVs 20 + -2.5325946187068055e-01 2.1046599070312078e-01 -2.6397998102454101e-01 + -4.7687488852959958e-01 3.7421421208814137e-01 -5.0456304652461781e-01 + -6.7596107164846098e-01 5.0974840025127932e-01 -7.4841478866167355e-01 + -8.4813566510849081e-01 6.2361141896522165e-01 -1.0052292969155827e+00 + -9.8606346738032702e-01 7.1313010575617575e-01 -1.2747180912690816e+00 + -1.0861557998230618e+00 7.7803040551447677e-01 -1.5554239023159344e+00 + -1.1498873215316130e+00 8.2490861166727436e-01 -1.8388739780941921e+00 + -1.1783822647792292e+00 8.6451056161374251e-01 -2.1115280593872710e+00 + -1.1705543306177890e+00 9.0344348499155380e-01 -2.3754628825557225e+00 + -1.1312311761090850e+00 9.3887499809941311e-01 -2.6507501589420119e+00 + -1.0796706972228567e+00 9.5887569400849437e-01 -2.9461495413958287e+00 + -1.0360943536896634e+00 9.5144623774123049e-01 -3.2526273151004075e+00 + -1.0025891424248401e+00 9.0966269850707837e-01 -3.5782454136017039e+00 + -9.7431824474647155e-01 8.1928631263974983e-01 -3.9565212671943271e+00 + -9.6416724529809339e-01 6.7182992237472461e-01 -4.4023746503471539e+00 + -9.9907719261279804e-01 4.8733330156770371e-01 -4.8874509954303909e+00 + -1.0894703513376200e+00 2.6119484739341425e-01 -5.3634301244414404e+00 + -1.2122423055260558e+00 -7.3241137368778020e-02 -5.7561013611487972e+00 + -1.3094928591304087e+00 -5.3581503663801922e-01 -5.9301640354198817e+00 + id 14895 + loc 3.6593401432037354e-01 5.0924152135848999e-01 405 + blend 0.0000000000000000e+00 + interp 4.2248886736166819e-01:2.9924943217957850e-01:1.8154117930991742e-01:4.2248464247299461e-01:1.1656991227749165e+00:2.8100146033704626e-01:1.9984830607819875e+00:2.8984274315071795e-01:2.9586787400376613e+00:2.8313468573869438e-01:3.6131776368248012e+00 + CVs 20 + 9.2397715204971365e-02 2.4540904300093713e-01 -1.0368445089192508e-02 + 9.2319522455773295e-02 4.5504965928041380e-01 -1.3833085737063745e-02 + 8.4007521172573318e-02 6.3469753766749082e-01 3.8708760950059568e-03 + 7.8443229322032793e-02 8.0842412791577689e-01 5.4321059042321027e-02 + 7.3887435210287122e-02 9.7054506437771948e-01 1.4131827305220337e-01 + 7.2865238024664547e-02 1.1129028900455500e+00 2.6352640126055760e-01 + 8.1121511988282546e-02 1.2288311169752588e+00 4.1237879544137490e-01 + 1.0463730507561109e-01 1.3169742010449670e+00 5.7481893593633659e-01 + 1.4675598005909318e-01 1.3810872361590014e+00 7.3877827461274526e-01 + 2.0797600935706551e-01 1.4267802203449942e+00 8.9600362599182570e-01 + 2.8712147036324198e-01 1.4588820044879083e+00 1.0429424283845050e+00 + 3.8217423999130301e-01 1.4815166587794080e+00 1.1811005733962430e+00 + 4.8923011942513950e-01 1.4979595176627412e+00 1.3081730974704862e+00 + 5.9973570675997301e-01 1.5135763469439225e+00 1.4023939008798951e+00 + 6.9664817627934172e-01 1.5334031053839170e+00 1.4308249497619472e+00 + 7.5821402601782206e-01 1.5516964029086699e+00 1.3834801921643174e+00 + 7.7024356695596730e-01 1.5551265683813420e+00 1.2842695023632158e+00 + 7.3479793707014451e-01 1.5350812537545178e+00 1.1711616222542056e+00 + 7.9688306165055844e-01 1.5435475343101044e+00 1.2060235153104442e+00 + id 14896 + loc 9.8960506916046143e-01 2.3436288535594940e-01 394 + blend 0.0000000000000000e+00 + interp 4.4868727824042548e-01:2.2479761213898219e-01:9.9662436301873270e-01:3.3807460745633938e-01:1.5193750384932037e+00:4.4868279136764311e-01:2.3191109700152195e+00:3.0732474816663491e-01:2.9899300333824748e+00:2.2732346741792125e-01:3.9647258328971544e+00 + CVs 20 + 3.2414919965869382e-01 2.5050651196895096e-01 3.1777896200074568e-01 + 5.9454856521426025e-01 4.5113121596474814e-01 6.0572037967643200e-01 + 8.5653656305395642e-01 6.3332502725372919e-01 8.9296940461784247e-01 + 1.1275356333631454e+00 8.1419541379152371e-01 1.1916032708715338e+00 + 1.4046810655268334e+00 9.9231202133894003e-01 1.5011206474831056e+00 + 1.6921281160437018e+00 1.1642534214596925e+00 1.8221577919408336e+00 + 1.9990604154921328e+00 1.3246117202236010e+00 2.1515449892948419e+00 + 2.3332257788090205e+00 1.4615297395147702e+00 2.4846853824773580e+00 + 2.6995472006404659e+00 1.5550613355472880e+00 2.8208239766706651e+00 + 3.0997528935249115e+00 1.5834553009385284e+00 3.1550281121447332e+00 + 3.5289835614827609e+00 1.5337754288871250e+00 3.4669566520243564e+00 + 3.9762192837138448e+00 1.4083930736972436e+00 3.7305169690900346e+00 + 4.4285074167073164e+00 1.2192784909656758e+00 3.9319804114683672e+00 + 4.8699104694352648e+00 9.8289061916393550e-01 4.0668727577037691e+00 + 5.2825027501152046e+00 7.2085380616444183e-01 4.1311212895881750e+00 + 5.6555158952840721e+00 4.4953604603233632e-01 4.1284372085411727e+00 + 5.9819899858772310e+00 1.7386425652482940e-01 4.0698501251179193e+00 + 6.2477189573624763e+00 -1.0403898551914947e-01 3.9626029805610701e+00 + 6.4607243673734782e+00 -4.4125066257705159e-01 3.8027461416283370e+00 + id 14897 + loc 2.2149088978767395e-01 8.4501433372497559e-01 405 + blend 0.0000000000000000e+00 + interp 3.4876620859865343e-01:2.8094984708337528e-01:7.1428991373964856e-02:2.8702360530047677e-01:9.6379736273654870e-01:2.9578943078744685e-01:1.7945585601580492e+00:2.8076651063075875e-01:2.5077355390066378e+00:3.4876272093656746e-01:3.5940352124029227e+00 + CVs 20 + 1.9257501585245090e-01 2.6533502818966614e-01 5.6001702123580389e-02 + 2.5368021802876883e-01 4.2364077976277642e-01 9.4485486470034796e-02 + 2.7281859849835921e-01 5.4657837407618515e-01 1.3381765373652843e-01 + 3.0355967279759921e-01 6.5812806094182619e-01 1.7971719132094624e-01 + 3.4273725018780610e-01 7.5799069691910581e-01 2.3426283982080040e-01 + 3.8862651981752416e-01 8.4702300947466802e-01 3.0223661241728694e-01 + 4.4066070279447100e-01 9.2462055141802346e-01 3.9067997627664713e-01 + 4.9902996736471272e-01 9.8766572193441904e-01 5.0536731720836359e-01 + 5.6470131073786201e-01 1.0327423385092958e+00 6.4818830134502881e-01 + 6.3877851082817383e-01 1.0584978143813606e+00 8.1766732619818272e-01 + 7.2162952203699948e-01 1.0659739543982059e+00 1.0107521820793968e+00 + 8.1185987861586550e-01 1.0570137093743397e+00 1.2244169124800470e+00 + 9.0517945021882995e-01 1.0328403671779030e+00 1.4546256852767123e+00 + 9.9519892314917291e-01 9.9701633017469316e-01 1.6932047178604845e+00 + 1.0764479893324783e+00 9.5994646191215294e-01 1.9294043985457028e+00 + 1.1465214392958363e+00 9.3428240386540828e-01 2.1570214060808652e+00 + 1.2055682893237534e+00 9.2588018741144162e-01 2.3758935313624003e+00 + 1.2556246955247774e+00 9.3305153349546432e-01 2.5878543344394966e+00 + 1.3213679567226626e+00 9.4793044271895655e-01 2.8280108906217079e+00 + id 14898 + loc 5.5643570423126221e-01 1.8620461225509644e-02 394 + blend 0.0000000000000000e+00 + interp 5.0462952847579368e-01:3.1195270958504995e-01:1.5971384423931234e-01:4.5742064715281500e-01:9.1260014476416162e-01:5.0462448218050893e-01:1.0262921201521416e+00:3.0790891184879349e-01:1.8985754872453797e+00:4.3372727466767702e-01:2.4057560223745504e+00:3.9867125698223704e-01:2.9843612781902040e+00:3.8069273520664554e-01:3.3013370929692574e+00:4.1039622346159532e-01:3.9222895646558382e+00 + CVs 20 + 1.0144492349835471e-01 2.3043829736313898e-01 2.6548415901603895e-01 + 2.2295965217368363e-01 4.5197003399841990e-01 5.1036146079274047e-01 + 3.6263490712811614e-01 6.5581670703215500e-01 7.3850090609441832e-01 + 5.1888423654887650e-01 8.4300611872329467e-01 9.5362868670332912e-01 + 6.8439671553065162e-01 1.0197812682383804e+00 1.1535653560003776e+00 + 8.5590084901774421e-01 1.1939995739740790e+00 1.3452851277311733e+00 + 1.0394792053482342e+00 1.3605086136564746e+00 1.5400329716954388e+00 + 1.2412105590801523e+00 1.5067250301667801e+00 1.7478959180497351e+00 + 1.4593692833321450e+00 1.6237680587854653e+00 1.9783973166977571e+00 + 1.6869080727946137e+00 1.7044517993295178e+00 2.2388081114655489e+00 + 1.9160587496828843e+00 1.7390039904099133e+00 2.5206393524047672e+00 + 2.1404172539544550e+00 1.7173798659307022e+00 2.7976646935702405e+00 + 2.3577460648352191e+00 1.6239642499576032e+00 3.0458777433956659e+00 + 2.5740867982824938e+00 1.4259423097972970e+00 3.2580113871868264e+00 + 2.8044469955760842e+00 1.1007437858264562e+00 3.4389355150531582e+00 + 3.0694087124212772e+00 6.8414124418742039e-01 3.6084883858673491e+00 + 3.3871744877686578e+00 2.5147060741372140e-01 3.7827401633072624e+00 + 3.7581906124690061e+00 -1.1584461758307807e-01 3.9318942522720284e+00 + 4.0947303054295237e+00 -3.7296925700631700e-01 4.0031755218345451e+00 + id 14899 + loc 6.5395407378673553e-02 2.6342093944549561e-01 405 + blend 0.0000000000000000e+00 + interp 3.0308653041165051e-01:2.8159723394315295e-01:6.1295507683869843e-01:3.0167975697078553e-01:1.0940886005380734e+00:2.4911647717235341e-01:2.1778647732585825e+00:3.0308349954634639e-01:3.0188808026257892e+00:2.6784854668061214e-01:3.9864936797058457e+00 + CVs 20 + 1.3170383274205291e-01 1.5538773166144115e-01 -1.7904997369639311e-01 + 2.4770296530335317e-01 2.9521820569594504e-01 -2.8172752200605372e-01 + 3.6593589758110912e-01 3.7236824553989839e-01 -3.7576566559186808e-01 + 4.9727972979970753e-01 4.2575225231314440e-01 -4.6760085060234230e-01 + 6.4098472383980476e-01 4.5273362754076990e-01 -5.5112546369241200e-01 + 7.9516233308195139e-01 4.4952240257858606e-01 -6.2079854285890046e-01 + 9.5613214782680234e-01 4.1493038046047126e-01 -6.7270091857367453e-01 + 1.1190161871473896e+00 3.5204815736708417e-01 -7.0619816547102887e-01 + 1.2798983517596434e+00 2.6866804516896792e-01 -7.2481119315631792e-01 + 1.4382178560537568e+00 1.7591568887984893e-01 -7.3568022575919745e-01 + 1.5972258843125917e+00 8.4408541521491576e-02 -7.4658919913583177e-01 + 1.7621258843553869e+00 1.8921245442223844e-03 -7.6287840090340531e-01 + 1.9372302056410329e+00 -6.7712097761885803e-02 -7.8643321313179648e-01 + 2.1256482046605440e+00 -1.2435127093414028e-01 -8.1311625668731780e-01 + 2.3289126049070572e+00 -1.6981947190940638e-01 -8.3579288699928189e-01 + 2.5445227665801489e+00 -2.0473614937619961e-01 -8.5394770793021835e-01 + 2.7676730356967343e+00 -2.2342066314125153e-01 -8.7664250400704691e-01 + 2.9969369071536964e+00 -2.1699156568778705e-01 -9.0959109035474994e-01 + 3.2721766221812620e+00 -1.4994502538899468e-01 -8.7288231167362751e-01 + id 14900 + loc 9.8801106214523315e-01 5.4137308150529861e-02 394 + blend 0.0000000000000000e+00 + interp 4.2887092438053170e-01:2.5616627968951799e-01:8.5454373974045827e-01:3.8132271321102734e-01:1.5045624672474989e+00:4.2886663567128791e-01:1.9995165272680371e+00:3.2669402816985754e-01:2.9330255773384710e+00:3.2564517621780703e-01:3.5629850414727589e+00 + CVs 20 + 2.5583872585562006e-01 2.6451894281813920e-01 3.4921569118918921e-01 + 5.3710755615613692e-01 4.9872015958414351e-01 6.1777809964762131e-01 + 8.3666592483499658e-01 7.2179065917929330e-01 8.6645524616172120e-01 + 1.1501908754072221e+00 9.4802803309180961e-01 1.1319302843639272e+00 + 1.4678000184941644e+00 1.1758639843590868e+00 1.4299215698502437e+00 + 1.7799640584332617e+00 1.3916305112869281e+00 1.7737823846006815e+00 + 2.0789326069209553e+00 1.5727509136044246e+00 2.1723598712037395e+00 + 2.3518832402995562e+00 1.6947702187878739e+00 2.6251613028218710e+00 + 2.5835658377380266e+00 1.7394358605796261e+00 3.1151677564313141e+00 + 2.7675894996338344e+00 1.7011072468059258e+00 3.6118049932421972e+00 + 2.9038737013974458e+00 1.5785898573996011e+00 4.0848674090514443e+00 + 2.9908772649456168e+00 1.3745546735532637e+00 4.5089169980245192e+00 + 3.0272735088650995e+00 1.1057721913252232e+00 4.8663059847604249e+00 + 3.0223199566591941e+00 8.0849647813366632e-01 5.1626612524530326e+00 + 2.9939303172819178e+00 5.1860838931242004e-01 5.4241612251272624e+00 + 2.9596946321965882e+00 2.5449605864559643e-01 5.6668586064866560e+00 + 2.9375976870827731e+00 1.0259157574896705e-02 5.8986419439709739e+00 + 2.9458012110079519e+00 -2.3117827391896473e-01 6.1321545858760400e+00 + 2.9704686246428182e+00 -3.8483726882205804e-01 6.3098120783785241e+00 + id 14901 + loc 3.7858492136001587e-01 3.6843857169151306e-01 405 + blend 0.0000000000000000e+00 + interp 3.7994376201961483e-01:3.0997550759250886e-01:2.9509545907202561e-04:3.7993996258199464e-01:6.7277727763052786e-01:2.8351177631095076e-01:1.2967537954710482e+00:3.3700893720625658e-01:1.9999812550544123e+00:2.8339031957493188e-01:2.6776893325290922e+00:3.1521103692125058e-01:3.2056130379025851e+00 + CVs 20 + 4.0958879840241803e-02 1.6095819057592284e-01 -1.2296209057675991e-02 + 6.1151664485739575e-02 2.8762260641570692e-01 3.4878651332261534e-02 + 8.0078028559624093e-02 4.0003423969475577e-01 9.7556447217801601e-02 + 1.0818083370462384e-01 5.1098381646128432e-01 1.6685499261770226e-01 + 1.5081109581849458e-01 6.2052992939602580e-01 2.4729317648806115e-01 + 2.1397304624216404e-01 7.2790899987566726e-01 3.4191144389649242e-01 + 3.0330988579084300e-01 8.3167093910580892e-01 4.5204497388236203e-01 + 4.2383690679445823e-01 9.2998984711542876e-01 5.7738895684928615e-01 + 5.8020353544956116e-01 1.0206485329846775e+00 7.1600394009998114e-01 + 7.7685834586220093e-01 1.1007470693184409e+00 8.6431255903237492e-01 + 1.0178735762429290e+00 1.1656211847264857e+00 1.0174202735674753e+00 + 1.3046695884371502e+00 1.2082105757393957e+00 1.1692725920122240e+00 + 1.6311101010180058e+00 1.2249609219289403e+00 1.3108494526224610e+00 + 1.9827865679432635e+00 1.2287072321446839e+00 1.4281899444148478e+00 + 2.3459344050845110e+00 1.2480194193483820e+00 1.5053106577590190e+00 + 2.7134556574102762e+00 1.3050310664926963e+00 1.5309079729821322e+00 + 3.0780835026573934e+00 1.4060869058332426e+00 1.5026838192812946e+00 + 3.4247142030166433e+00 1.5481570072784943e+00 1.4356130547602346e+00 + 3.7601903993824877e+00 1.6576767916042323e+00 1.4166076829128160e+00 + id 14902 + loc 6.2758111953735352e-01 3.3271831274032593e-01 394 + blend 0.0000000000000000e+00 + interp 4.3453830007639044e-01:3.2661699391195292e-01:7.6123281419707456e-01:4.3453395469338968e-01:1.0441968843010403e+00:3.5268357516547122e-01:1.8321909925893476e+00:2.7283054181066690e-01:2.1140701277224054e+00:3.2631279274316533e-01:2.8886523576364618e+00:3.5467436880606451e-01:3.8361351511441342e+00 + CVs 20 + 3.4215789210428538e-01 2.6649073502732357e-01 2.3035448875508055e-01 + 6.2461888149063161e-01 4.8610523227134261e-01 4.3020492534541577e-01 + 8.7301658818879724e-01 6.9060300721445977e-01 6.2191297459875117e-01 + 1.0967334270682221e+00 8.9856098148445274e-01 8.1483357083199337e-01 + 1.2910292840053108e+00 1.1116084639214445e+00 1.0076037401967237e+00 + 1.4548941361086025e+00 1.3284298078058312e+00 1.2020569309732889e+00 + 1.5942365019551605e+00 1.5475198310785450e+00 1.4042404303028946e+00 + 1.7192489026429185e+00 1.7658141593578318e+00 1.6235793062743655e+00 + 1.8433649222762614e+00 1.9829446704729681e+00 1.8667894945118166e+00 + 1.9859648360894533e+00 2.2029250853086744e+00 2.1370844434991376e+00 + 2.1680601663986763e+00 2.4166198149059319e+00 2.4441963065245487e+00 + 2.3980348268912697e+00 2.5846152383821757e+00 2.8042501446484547e+00 + 2.6638122097199903e+00 2.6512217515121765e+00 3.2143049747042145e+00 + 2.9323912800941923e+00 2.5742334270326177e+00 3.6281764108387087e+00 + 3.1577992055931992e+00 2.3536363790866917e+00 3.9821044889042310e+00 + 3.3053832860738845e+00 2.0219166589940896e+00 4.2515710026510511e+00 + 3.3693548068634112e+00 1.6064122593148795e+00 4.4480917863483125e+00 + 3.4198951466843530e+00 1.1371486379737932e+00 4.5864811656252105e+00 + 3.6185129977704351e+00 7.7467899229145099e-01 4.6001154737626777e+00 + id 14903 + loc 2.7283486723899841e-01 3.6904191970825195e-01 405 + blend 0.0000000000000000e+00 + interp 3.4807001250334818e-01:2.9858168257725842e-01:6.2390512621005800e-01:2.7739668871126699e-01:1.7836979869915157e+00:3.4806653180322317e-01:2.6640835880300768e+00:2.9345338262518011e-01:3.3576866487073334e+00:3.3700893720625658e-01:3.9999538163864736e+00 + CVs 20 + 2.9398153853710540e-02 1.2660792115217789e-01 -2.7566999146595578e-03 + 3.0214243307262311e-02 2.2393637585751910e-01 4.2964993665954215e-02 + 2.8838577972229339e-02 3.2031997006349033e-01 1.1772411949550529e-01 + 4.1431803500830755e-02 4.2346117273613121e-01 2.0302915301323424e-01 + 7.4912017789934754e-02 5.3113255574142493e-01 3.0369193119222271e-01 + 1.3694610529910503e-01 6.3909101355662590e-01 4.2310263365936074e-01 + 2.3470129967368078e-01 7.4163004988272963e-01 5.6231413807441444e-01 + 3.7430656806198082e-01 8.3266056614923967e-01 7.2008170835223306e-01 + 5.6078441117799294e-01 9.0590527474389659e-01 8.9272451140268461e-01 + 7.9771923609832518e-01 9.5481766080075026e-01 1.0741514831792123e+00 + 1.0861244429059833e+00 9.7200699758459419e-01 1.2562459128872510e+00 + 1.4220263913752911e+00 9.4843650669400748e-01 1.4300270013337946e+00 + 1.7966380722448558e+00 8.7747271325448450e-01 1.5857907495033485e+00 + 2.2031328159836372e+00 7.6776533058180907e-01 1.7092880203235845e+00 + 2.6422095712222338e+00 6.4855624923852151e-01 1.7800597564951670e+00 + 3.1113255452225999e+00 5.4946334406505082e-01 1.7791793669748124e+00 + 3.5934789826274884e+00 4.8300153289024628e-01 1.6982236034721958e+00 + 4.0601618385820455e+00 4.4769193271703611e-01 1.5479692886626659e+00 + 4.4208695005215173e+00 3.3777770548437547e-01 1.4859144558730035e+00 + id 14904 + loc 2.4484254419803619e-01 2.5558340549468994e-01 394 + blend 0.0000000000000000e+00 + interp 4.2794084696338458e-01:3.1385271331718911e-01:9.5767831458816255e-01:3.2429223521679412e-01:2.0015523163559954e+00:2.7986806948041304e-01:2.8020275583938394e+00:4.2793656755491499e-01:3.1198616338014866e+00:3.4338994292511055e-01:3.9486636137875548e+00 + CVs 20 + -1.3966612442905116e-01 2.0359756228745940e-01 1.6306203199203684e-01 + -2.6504741730845505e-01 4.3317009186507449e-01 3.8125784443060362e-01 + -3.6793832260997084e-01 6.7655468527961449e-01 6.2959235672173763e-01 + -4.5139958306532685e-01 9.3550100394115721e-01 8.9771847302376917e-01 + -5.2868155323987986e-01 1.2141617173876438e+00 1.1825210033179188e+00 + -6.1947966639142438e-01 1.5061884977451792e+00 1.4858059278657172e+00 + -7.4722783588098352e-01 1.7982903446345295e+00 1.8159461815506681e+00 + -9.3196401459328815e-01 2.0725201832780500e+00 2.1761814952162544e+00 + -1.1811273860364373e+00 2.3020082209788288e+00 2.5585467396683059e+00 + -1.4809087067177313e+00 2.4514998765679703e+00 2.9486713186985076e+00 + -1.8011235381845250e+00 2.4866417346326228e+00 3.3326612506689548e+00 + -2.1050204204322758e+00 2.3829008445194639e+00 3.6958683706705582e+00 + -2.3540313172139911e+00 2.1558792782523502e+00 4.0222415165834615e+00 + -2.5515328246265465e+00 1.8821848068141573e+00 4.3130591523832269e+00 + -2.7377802477841779e+00 1.6428763185082687e+00 4.5816536758687167e+00 + -2.8927734268213539e+00 1.5199235355164089e+00 4.8218282103143491e+00 + -2.9355419162912844e+00 1.5631439960204441e+00 4.9981144094716967e+00 + -2.9198927980313267e+00 1.6532456920310290e+00 5.1108600662748227e+00 + -3.1457094216262274e+00 1.5037860857943550e+00 5.3489052011129008e+00 + id 14905 + loc 1.4230668544769287e-01 4.0015378594398499e-01 405 + blend 0.0000000000000000e+00 + interp 3.0375257456965088e-01:2.9333300001154300e-01:6.5709053897751057e-01:2.8212527917981250e-01:1.5343517620342972e+00:3.0374953704390517e-01:2.6935930055740442e+00:2.7650864656618646e-01:3.5992727538531004e+00 + CVs 20 + 7.4926831600397564e-02 1.3685735918368119e-01 -2.9830583103299932e-02 + 1.2719718260769058e-01 2.4207349004392326e-01 -8.7537147940534160e-03 + 1.8259746815268807e-01 3.3079293841522500e-01 3.3282274050215249e-02 + 2.5862635601147371e-01 4.1151873803064831e-01 7.2539794248947881e-02 + 3.5573839622230735e-01 4.8104746560974865e-01 1.0910076644783678e-01 + 4.7409662912743467e-01 5.3662702580143606e-01 1.4216868311015365e-01 + 6.1363922450971697e-01 5.7626499151503896e-01 1.6997183362034549e-01 + 7.7337136508374660e-01 5.9868862531956113e-01 1.8998126198205798e-01 + 9.5078685762733595e-01 6.0335759347747686e-01 1.9932411880944656e-01 + 1.1421587674012939e+00 5.9062049707934228e-01 1.9563423827602658e-01 + 1.3429213330251786e+00 5.6167846374593666e-01 1.7763609119044935e-01 + 1.5486682533377918e+00 5.1817525091634298e-01 1.4545358434352829e-01 + 1.7555053377259258e+00 4.6209097125056553e-01 9.9867594491698700e-02 + 1.9598005168390125e+00 3.9773685635714900e-01 4.0014937178795201e-02 + 2.1580668832843926e+00 3.3229927434412887e-01 -3.4451904029411062e-02 + 2.3469783375905351e+00 2.7295795026223013e-01 -1.1981713065253474e-01 + 2.5245573090811924e+00 2.2428481147083612e-01 -2.1186847246356261e-01 + 2.6916031925652484e+00 1.8584647687294717e-01 -3.0663578252321222e-01 + 2.9152616606939521e+00 1.3746162555541713e-01 -4.0192567580986460e-01 + id 14906 + loc 6.6252839565277100e-01 8.3827960491180420e-01 394 + blend 0.0000000000000000e+00 + interp 4.7973452531719724e-01:3.4143548147236269e-01:5.2659972496197360e-03:2.8205128869503920e-01:5.8484572965354387e-01:2.9722036601400664e-01:1.0293146951609098e+00:3.1360342699218446e-01:2.0711837049107986e+00:4.7972972797194408e-01:2.9079601815096363e+00:3.0459138413988518e-01:3.1957209607079120e+00 + CVs 20 + -1.5972665074088421e-01 1.9198590062288490e-01 -2.7987859695536260e-01 + -3.0505054403012111e-01 3.9006407620946981e-01 -5.6304804108701723e-01 + -4.2383218889608465e-01 5.8922621157119881e-01 -8.5317065757352284e-01 + -5.1316100040585966e-01 7.8443597083699612e-01 -1.1535745264781037e+00 + -5.7736122993725791e-01 9.7303749909105708e-01 -1.4674855037287822e+00 + -6.2563933740102051e-01 1.1556875240676114e+00 -1.7985221541681278e+00 + -6.6683210964833006e-01 1.3287135272134498e+00 -2.1481680469887250e+00 + -7.0489926795750302e-01 1.4763312450460102e+00 -2.5162286825197455e+00 + -7.4413593989062077e-01 1.5766779642061912e+00 -2.9054401249798598e+00 + -7.9659171890216540e-01 1.6118040217161975e+00 -3.3212342970124515e+00 + -8.7520800098721407e-01 1.5662896773574153e+00 -3.7583489551070715e+00 + -9.8078390004592486e-01 1.4314660461109385e+00 -4.1917436412928533e+00 + -1.1102438756897783e+00 1.2120169839928194e+00 -4.5971721807112678e+00 + -1.2781715826088635e+00 9.1213377546134788e-01 -4.9669669489270944e+00 + -1.5085886877406067e+00 5.2988664818978704e-01 -5.2860109838855820e+00 + -1.7879495662920071e+00 7.5050513643404759e-02 -5.5043387482471609e+00 + -2.0475013400581248e+00 -4.2018379557712526e-01 -5.5655527742745061e+00 + -2.2366166178127944e+00 -9.0265906554128028e-01 -5.4739922959752541e+00 + -2.4365711770177509e+00 -1.2662518132919538e+00 -5.4868143399992331e+00 + id 14907 + loc 7.6034450531005859e-01 9.2430096864700317e-01 405 + blend 0.0000000000000000e+00 + interp 4.7024295186926912e-01:2.7089484288401366e-01:9.8041595332852061e-01:4.3852054186151945e-01:1.7827954973939748e+00:2.9054659211022293e-01:2.3014971313969785e+00:3.5869664006166901e-01:2.9828472132260617e+00:4.7023824943975046e-01:3.3166418107806850e+00:2.6973053944625897e-01:3.9977131288138326e+00 + CVs 20 + 2.0678643399380209e-01 3.0777601732425225e-01 -2.0185965078680711e-02 + 2.7910742822314660e-01 4.6225463569457292e-01 -2.9181389100823359e-02 + 2.9249543482225454e-01 5.6293200962541823e-01 -4.1457042858778513e-02 + 3.0960034242077877e-01 6.4249100449425423e-01 -6.2975759438190379e-02 + 3.2388585634136141e-01 7.0195370826184278e-01 -1.0004930197598480e-01 + 3.2842254798947712e-01 7.4971769474828021e-01 -1.6599208825223422e-01 + 3.2136960698788847e-01 8.1250999423936365e-01 -2.7884752563979809e-01 + 3.2073269365975909e-01 9.3645507914504100e-01 -4.2989512827162429e-01 + 3.5675022298434594e-01 1.1204655224926485e+00 -5.4977650879816209e-01 + 4.2514678170845982e-01 1.2935624259612954e+00 -5.9351551469441444e-01 + 5.0828317035740822e-01 1.4185626703602896e+00 -5.8031663534829048e-01 + 6.0433356191502807e-01 1.4993320544422117e+00 -5.3302772587680580e-01 + 7.1299873241155942e-01 1.5386496323976013e+00 -4.6304701306945728e-01 + 8.2102189464309205e-01 1.5232991847475350e+00 -3.8281965129950679e-01 + 9.1178337145915089e-01 1.4436901425820090e+00 -3.0483356803192396e-01 + 9.8513573253082076e-01 1.3153374613506612e+00 -2.2697096421466423e-01 + 1.0554759615729452e+00 1.1675924941968017e+00 -1.3869128428763777e-01 + 1.1419175077052437e+00 1.0199391881005822e+00 -3.7407818581248170e-02 + 1.3211249384483448e+00 9.5337185910844902e-01 8.0052237380411839e-02 + id 14908 + loc 4.7364240884780884e-01 9.9812680482864380e-01 394 + blend 0.0000000000000000e+00 + interp 4.5688046798004495e-01:3.1318206769207591e-01:1.8181246006618912e-01:2.7755521875014355e-01:1.2062290398412003e+00:4.5687589917536514e-01:2.0338451212845317e+00:2.9050254094458100e-01:2.6192644592231802e+00:2.8541931710634222e-01:3.3891678234778335e+00 + CVs 20 + -2.1598847307974431e-01 2.6270341139784670e-01 -3.0741045093105335e-01 + -4.3989903888797233e-01 5.0437067152878301e-01 -6.0399315888380189e-01 + -6.7034194508751677e-01 7.2818261076292967e-01 -9.0314446472248089e-01 + -9.1166316249282686e-01 9.2910078728708811e-01 -1.2119779883101494e+00 + -1.1694758579428042e+00 1.0941568288083230e+00 -1.5288185307068942e+00 + -1.4468081928807632e+00 1.2055171558668105e+00 -1.8466508045927497e+00 + -1.7361500977076210e+00 1.2418921415684698e+00 -2.1540385836628984e+00 + -2.0213820708734636e+00 1.1884595991714413e+00 -2.4378442106684135e+00 + -2.2914583082079125e+00 1.0478998272679401e+00 -2.6866278842161391e+00 + -2.5486448975191891e+00 8.3843851966150784e-01 -2.8958429853101579e+00 + -2.7971348953980280e+00 5.8210725793411200e-01 -3.0714365469308325e+00 + -3.0333316072649339e+00 2.9776882240815650e-01 -3.2307752818291924e+00 + -3.2500152811716805e+00 -4.8507042053269611e-03 -3.3907105519424170e+00 + -3.4412027838794561e+00 -3.2506753981368952e-01 -3.5497709648401226e+00 + -3.6138846856409637e+00 -6.5681607342722614e-01 -3.7121252340184583e+00 + -3.8039890955700222e+00 -9.6987917204646346e-01 -3.9526082274739460e+00 + -4.0541445068000943e+00 -1.1545615568499974e+00 -4.4164942921011692e+00 + -4.3125698429114427e+00 -1.0221721339496810e+00 -5.0480171742294893e+00 + -4.5145085482798573e+00 -1.0889023613421671e+00 -5.3384494744324442e+00 + id 14909 + loc 3.6584950983524323e-02 1.8373517692089081e-01 405 + blend 0.0000000000000000e+00 + interp 4.1422193729126211e-01:2.9782457254275263e-01:5.4499854655212543e-01:2.8566710569616277e-01:1.1663908975271220e+00:2.8991277930396964e-01:1.9445448351794177e+00:4.1421779507188922e-01:2.8961997806235749e+00:3.0167975697078553e-01:3.0939955368474292e+00:2.7587896280707996e-01:3.9415882306380974e+00 + CVs 20 + 2.9322848871729056e-02 1.0626288389553050e-01 -3.2866858282998075e-02 + 3.0519983484145804e-02 1.7309583817206731e-01 -1.8547581491516835e-02 + 3.0429257018585183e-02 2.4438764775937988e-01 2.1163595194794146e-02 + 4.2773571989879598e-02 3.1680920275025981e-01 6.3608006663887259e-02 + 6.7108006747232357e-02 3.8587778366288444e-01 1.0965746268637036e-01 + 1.0257489889387288e-01 4.4772061664580598e-01 1.6040850762234646e-01 + 1.4880472830924793e-01 4.9899816069341979e-01 2.1703190106619757e-01 + 2.0632418162721888e-01 5.3679610567871494e-01 2.8077733338135136e-01 + 2.7688405623500267e-01 5.5831713099173141e-01 3.5294036808096224e-01 + 3.6400230428547831e-01 5.6077036365984889e-01 4.3464363159091285e-01 + 4.7243668324793203e-01 5.4139386687301805e-01 5.2598859329256420e-01 + 6.0653868437512393e-01 4.9778616322861158e-01 6.2529241333286156e-01 + 7.6850474423773518e-01 4.2893775310355664e-01 7.2948761184091970e-01 + 9.5510821790114708e-01 3.3628241706069073e-01 8.3563115895640039e-01 + 1.1583794981492115e+00 2.2435721975247158e-01 9.4295968609706038e-01 + 1.3721441104495458e+00 1.0042924490336480e-01 1.0527863279117069e+00 + 1.5953910429894527e+00 -2.7117554952942546e-02 1.1651081756944546e+00 + 1.8255631232399010e+00 -1.4995747386296865e-01 1.2777670734326039e+00 + 1.9929094895396509e+00 -2.4530330245791243e-01 1.4117599813427946e+00 + id 14910 + loc 3.2087561488151550e-01 1.0702168941497803e-01 394 + blend 0.0000000000000000e+00 + interp 5.4996240006655417e-01:3.2391943972794923e-01:2.1699456416122254e-02:3.8920505123476762e-01:6.1742539047339096e-01:3.1068990481809394e-01:1.0200384013368005e+00:3.7225098671328488e-01:2.0302718470978776e+00:2.6945380306660477e-01:2.8546987880047969e+00:5.4995690044255352e-01:3.5921222281667400e+00 + CVs 20 + -1.4436069524947398e-01 2.2327931152254873e-01 2.0622995996185128e-01 + -2.8526376731196151e-01 4.4977477240205443e-01 4.3198673561637896e-01 + -4.2523498291560669e-01 6.7500113113594340e-01 6.6637288107057202e-01 + -5.6883730907186236e-01 9.0083913423996398e-01 9.0261198515897179e-01 + -7.2220419034944960e-01 1.1267105479469981e+00 1.1328133978508790e+00 + -8.9252524732890481e-01 1.3432488078525249e+00 1.3529957919755777e+00 + -1.0863943073361972e+00 1.5354079858740255e+00 1.5684361315360091e+00 + -1.3051731853451032e+00 1.6882475871084193e+00 1.7839069621014430e+00 + -1.5419800818844560e+00 1.7902477504402503e+00 1.9970724409982052e+00 + -1.7815764156120177e+00 1.8342053233773763e+00 2.2015776258016624e+00 + -1.9997963701207042e+00 1.8192225087689182e+00 2.3897213586576065e+00 + -2.1708086987161908e+00 1.7549542749894373e+00 2.5538307648346952e+00 + -2.2906695340412644e+00 1.6526125759164159e+00 2.6988667258398631e+00 + -2.3907036578533019e+00 1.4947883752324540e+00 2.8520654134610330e+00 + -2.5004395584680146e+00 1.2529635709920472e+00 3.0414847869389634e+00 + -2.6274235913849422e+00 9.5776376143845221e-01 3.2757334300585947e+00 + -2.7556820846236350e+00 6.8782381406400273e-01 3.5402414037620629e+00 + -2.8503341189682816e+00 5.0315022887017591e-01 3.8024790318056274e+00 + -2.9083826140805096e+00 3.9903997146629688e-01 4.0810810018524464e+00 + id 14911 + loc 9.1782063245773315e-01 7.5695142149925232e-02 405 + blend 0.0000000000000000e+00 + interp 3.6969991551298542e-01:3.6969621851383033e-01:1.0355086079719567e-01:2.5958228846848591e-01:9.9269670229356277e-01:3.0486281222009831e-01:1.8945170096734900e+00:2.7556091335804489e-01:2.8588882239012348e+00:2.6000656447991577e-01:3.5944090128244155e+00 + CVs 20 + 9.6641329960446387e-02 6.4619552147788972e-02 1.6253416684912557e-02 + 1.9913681910801112e-01 1.1170484176500955e-01 2.0015901734963419e-02 + 3.0757139973122644e-01 1.4758125287833912e-01 2.5423439096896372e-02 + 4.1636257499809615e-01 1.7257982388173118e-01 3.6712938270023913e-02 + 5.2360517213120439e-01 1.8808726005623286e-01 5.2563653499416461e-02 + 6.2836827282006413e-01 1.9709924071211568e-01 7.2020787991671303e-02 + 7.3121947124008435e-01 2.0395825270998963e-01 9.4348370439063411e-02 + 8.3471520528684717e-01 2.1386748177705073e-01 1.1860150339438844e-01 + 9.4279693384688312e-01 2.3201053612909894e-01 1.4303249636874160e-01 + 1.0596392791206715e+00 2.6275899788922902e-01 1.6481941204231923e-01 + 1.1885592400370217e+00 3.0910938968677010e-01 1.8023708143988598e-01 + 1.3315828156136420e+00 3.7229149703068876e-01 1.8477196749274569e-01 + 1.4892325636002393e+00 4.5197940806268277e-01 1.7157914950822975e-01 + 1.6606593734013937e+00 5.4680127276262180e-01 1.3258508819634407e-01 + 1.8401430044697711e+00 6.5611150973921739e-01 6.2983540869062021e-02 + 2.0115045265859499e+00 7.8333346707561113e-01 -2.7697714388242201e-02 + 2.1570425479392519e+00 9.3397452170393402e-01 -1.1268924755105103e-01 + 2.2733503729174904e+00 1.1088763927891612e+00 -1.6706130682362361e-01 + 2.3425120723657291e+00 1.3254331659772212e+00 -1.7473091423768300e-01 + id 14912 + loc 3.1890997290611267e-01 9.5585697889328003e-01 394 + blend 0.0000000000000000e+00 + interp 3.7021646158786820e-01:3.2038296407126077e-01:1.5840653014936124e-01:2.5914099894591353e-01:9.9941226379690662e-01:2.3347060951336501e-01:1.9206549720607187e+00:3.7021275942325232e-01:2.2615834040601501e+00:3.1550154645652567e-01:3.0841719572679120e+00 + CVs 20 + -2.6249889065127974e-01 2.0036775934530138e-01 -1.0270397746248486e-01 + -5.1897099042414452e-01 3.9958471331353679e-01 -2.1847804450069347e-01 + -7.7584076534765545e-01 6.0112464280459488e-01 -3.5412268233244687e-01 + -1.0351120358780195e+00 8.0030859925066344e-01 -5.1613969192020626e-01 + -1.2949568717135882e+00 9.8411513924640726e-01 -7.0896539114958812e-01 + -1.5523780919442791e+00 1.1344498960590657e+00 -9.3356171975157531e-01 + -1.8033136596619905e+00 1.2320363385952160e+00 -1.1860168949764480e+00 + -2.0417177950784353e+00 1.2621669875698727e+00 -1.4571096755616195e+00 + -2.2610701098939239e+00 1.2185006897449870e+00 -1.7341117551145007e+00 + -2.4587680332412263e+00 1.1034770759218779e+00 -2.0051735134597934e+00 + -2.6356800195787322e+00 9.2665057097664949e-01 -2.2607939180920256e+00 + -2.7915220587668244e+00 7.0404262844400201e-01 -2.4942502191800893e+00 + -2.9245271104178281e+00 4.5520057143689230e-01 -2.7025658576406855e+00 + -3.0353435385775893e+00 1.9582588832647274e-01 -2.8829756213976148e+00 + -3.1344158574388814e+00 -7.0612823693463111e-02 -3.0397014243389506e+00 + -3.2483011636259587e+00 -3.6013015849530139e-01 -3.2135999501011456e+00 + -3.4127552816754498e+00 -6.7540431792497690e-01 -3.5109211978025021e+00 + -3.6239759510799723e+00 -8.8347884846774072e-01 -3.9971665980378086e+00 + -3.7478618633229899e+00 -9.7654327467107249e-01 -4.2333564498623986e+00 + id 14913 + loc 7.7963256835937500e-01 1.0983257740736008e-01 405 + blend 0.0000000000000000e+00 + interp 4.3246582568082670e-01:4.3246150102256992e-01:7.4249737192610965e-05:2.7008990354056200e-01:8.7632238619117864e-01:2.6664042707357055e-01:1.6175149760151313e+00:3.2748178832111036e-01:2.4153242179357792e+00:2.6126852486519009e-01:3.2630601291054817e+00 + CVs 20 + 1.1450849598101275e-01 8.0325007897832992e-02 1.3668522227314319e-02 + 2.4119609938200742e-01 1.4770960321524707e-01 1.4591590223834329e-02 + 3.7542245668715246e-01 2.0809196691718637e-01 3.7584351960458125e-03 + 5.1157459208596689e-01 2.6309986329487944e-01 -2.0754137241513912e-02 + 6.4631843461318361e-01 3.1185629933464820e-01 -6.2934580819705876e-02 + 7.7440953561307158e-01 3.5325572166200947e-01 -1.2615023399206993e-01 + 8.8892845634153117e-01 3.8659649403590451e-01 -2.1236239705704751e-01 + 9.8238395628019781e-01 4.1234235499393462e-01 -3.2146672214179284e-01 + 1.0471253181844911e+00 4.3209759513429724e-01 -4.5073919284632763e-01 + 1.0768388756794409e+00 4.4857705165653272e-01 -5.9495638473023749e-01 + 1.0666296907432107e+00 4.6470055313073999e-01 -7.4752236714859643e-01 + 1.0152942614810665e+00 4.8228754129966156e-01 -9.0110658092847318e-01 + 9.2628069082169362e-01 5.0329143373852037e-01 -1.0505084875139905e+00 + 8.0010976983037452e-01 5.3720067028028451e-01 -1.1892573409415261e+00 + 6.3069831263422704e-01 6.0600989059274468e-01 -1.2969043761592245e+00 + 4.1855861999390487e-01 7.2744457230764281e-01 -1.3347906676338810e+00 + 1.8542555720825779e-01 8.8683462795506185e-01 -1.2742285316576707e+00 + -4.0076854866883449e-02 1.0507667766025657e+00 -1.1299536438014723e+00 + -2.4700799065412271e-01 1.2058009475938256e+00 -1.2438295485545092e+00 + id 14914 + loc 8.0522245168685913e-01 4.2653501033782959e-01 394 + blend 0.0000000000000000e+00 + interp 4.3104795092031828e-01:4.3104364044080912e-01:2.0453653616788992e-01:3.1312670901593126e-01:7.5107742721390813e-01:3.4704132864197246e-01:1.4868535102523925e+00:3.0953800334037218e-01:2.5039818378663634e+00:2.7921672188267799e-01:3.1702896004425183e+00:4.2881685658411212e-01:3.9745922231033814e+00 + CVs 20 + 3.5035770834164892e-01 2.4664828261900523e-01 2.3220610203699121e-01 + 6.6009873679123876e-01 4.5977188395365853e-01 4.5903480423057408e-01 + 9.5595249163202856e-01 6.6083830282930300e-01 6.9699251398472639e-01 + 1.2437827440829974e+00 8.6373045560892137e-01 9.5721241043857641e-01 + 1.5151417139564991e+00 1.0708592753004611e+00 1.2428749335302598e+00 + 1.7691673201788589e+00 1.2842269456359223e+00 1.5549647535164532e+00 + 2.0131862236291180e+00 1.5048300024327728e+00 1.8951458792969829e+00 + 2.2572995719254783e+00 1.7255378250778586e+00 2.2699380737976513e+00 + 2.5141403265669275e+00 1.9282614967308389e+00 2.6901938745638274e+00 + 2.7994184328654970e+00 2.0877725065162944e+00 3.1628731638227596e+00 + 3.1228660446687231e+00 2.1786203240941151e+00 3.6815096810316930e+00 + 3.4802901166144018e+00 2.1875916414827223e+00 4.2255990564602079e+00 + 3.8620756071786086e+00 2.1116099114764491e+00 4.7733611838969940e+00 + 4.2717282863987203e+00 1.9452968752803153e+00 5.3041725160673927e+00 + 4.7235382725080317e+00 1.6720159715786802e+00 5.7937959531785932e+00 + 5.2226513553384244e+00 1.2525075260915788e+00 6.2149171935697600e+00 + 5.7394998097786143e+00 6.4859260445603972e-01 6.5253354488416324e+00 + 6.1965504593813847e+00 -6.7238267563902276e-02 6.6842090372046794e+00 + 6.4720136703694617e+00 -4.5131613880908539e-01 6.8094697700640499e+00 + id 14915 + loc 1.6448892652988434e-01 5.1562285423278809e-01 405 + blend 0.0000000000000000e+00 + interp 3.0075374283979811e-01:2.9113812185953042e-01:6.8827793645257418e-01:2.7846856280730015e-01:1.8010340804335361e+00:3.0075073530236973e-01:2.7340624920362764e+00:2.7829166202394373e-01:3.7442616551154062e+00 + CVs 20 + -4.0606263280986987e-03 8.5968056189874353e-02 1.0681667588672028e-01 + -5.4184758990050937e-02 1.0124252320279556e-01 1.5644058203836173e-01 + -1.4367742032595879e-01 1.1356837266096192e-01 1.8068287989240367e-01 + -2.2555789930840853e-01 1.3221610979524084e-01 1.9049684473560491e-01 + -3.0418741544422123e-01 1.6472310911869859e-01 1.9403724518400411e-01 + -3.8561250756411758e-01 2.1650807080788048e-01 2.0700448413041372e-01 + -4.7470539933209910e-01 2.8743394856630666e-01 2.4868805056037771e-01 + -5.7229578012074089e-01 3.7272207472303831e-01 3.3584981593121871e-01 + -6.7394754706275606e-01 4.6585257670225266e-01 4.7957393774782769e-01 + -7.7119831543859729e-01 5.6099003969354855e-01 6.8454058162718512e-01 + -8.5326701029609797e-01 6.5384750340450526e-01 9.4839052097703080e-01 + -9.1065765415516098e-01 7.3932824913532191e-01 1.2636765129798289e+00 + -9.3849144701795673e-01 8.0830713068545579e-01 1.6215660890833021e+00 + -9.3358910433061060e-01 8.5553608395124670e-01 2.0078124219586453e+00 + -8.9113959664149922e-01 8.9363889767590410e-01 2.3974992093019520e+00 + -8.0884944732747344e-01 9.4322238543878678e-01 2.7636365877972322e+00 + -6.9130003425678277e-01 1.0113415965402148e+00 3.0872322005608965e+00 + -5.5065324925025072e-01 1.0913242919213186e+00 3.3562171188189884e+00 + -4.0961473050805786e-01 1.1543773103123092e+00 3.5905252609301255e+00 + id 14916 + loc 2.7497125789523125e-02 2.9907722491770983e-03 394 + blend 0.0000000000000000e+00 + interp 6.2164618206702049e-01:4.4018608702995204e-01:2.6138164259819019e-01:2.7397898503209006e-01:9.9916819070830620e-01:3.4851910093212868e-01:2.0006813233999488e+00:3.6745724951715902e-01:2.4341149796963264e+00:3.7256661583315953e-01:3.0031239441840576e+00:6.2163996560519985e-01:3.7663668160033090e+00:5.8685467687613313e-01:3.9934124783531866e+00 + CVs 20 + -6.2142882979037181e-02 1.6572475718566027e-01 2.5770555082355934e-01 + -1.1280588731405176e-01 3.4847886199178757e-01 5.0506488493833857e-01 + -1.3369369078474627e-01 5.3706508121117613e-01 7.4066733350144087e-01 + -1.1289124153896407e-01 7.2927762636506532e-01 9.6289726101795015e-01 + -5.3261873225962930e-02 9.3519747305544609e-01 1.1621879656156695e+00 + 3.5736697499378800e-02 1.1692748892288296e+00 1.3396420462638834e+00 + 1.3411670513339152e-01 1.4397790243535535e+00 1.5189442222609779e+00 + 2.1684386210330509e-01 1.7440607882363408e+00 1.7236414247442449e+00 + 2.5851115025491861e-01 2.0760951648925094e+00 1.9594897444481525e+00 + 2.3535091515327677e-01 2.4308947604693558e+00 2.2214123758174940e+00 + 1.2843685771472668e-01 2.8044177981083012e+00 2.5165774413541784e+00 + -8.1141314125998787e-02 3.1702886150767715e+00 2.8761387515842873e+00 + -3.8046638239937836e-01 3.4349170932056907e+00 3.2982676781172819e+00 + -6.7552900724206599e-01 3.5202562365046952e+00 3.6813726097045358e+00 + -8.8901558762350963e-01 3.4808545246091258e+00 3.9262792488043132e+00 + -1.0487858500543208e+00 3.4079936959193668e+00 3.9967765284161678e+00 + -1.2350585130481817e+00 3.3412591540582159e+00 3.9089383153708557e+00 + -1.4550668861647404e+00 3.3016003181208697e+00 3.8233553609031228e+00 + -1.6102817852760039e+00 3.4045107126595018e+00 4.0354484575064493e+00 + id 14917 + loc 9.5703226327896118e-01 7.9119604825973511e-01 405 + blend 0.0000000000000000e+00 + interp 6.5415864197368789e-01:2.6727746393659030e-01:1.7222481925561062e-01:3.8018778522584534e-01:9.5560963794846976e-01:2.7748222124430283e-01:1.4498066468322242e+00:6.5415210038726823e-01:2.0011654555709311e+00:3.8413176452636583e-01:2.9400500596063686e+00:5.5568938022151715e-01:3.3093191575342682e+00:4.6431295074810769e-01:3.9358936525360946e+00 + CVs 20 + 1.0631989579892094e-01 2.5971375071183433e-01 1.4522874865655334e-02 + 1.2344427782502400e-01 4.0208877759764605e-01 7.6168154309425501e-02 + 7.4723255909862923e-02 5.1125606372518284e-01 1.4896636921769132e-01 + 3.1659638080513364e-02 6.0740811157293984e-01 2.3352373202822491e-01 + -6.6581154266308895e-03 6.7985491110270579e-01 3.2680376482058515e-01 + -4.7719814431052748e-02 7.1348522794908875e-01 4.2068489973954026e-01 + -1.0784065558049985e-01 6.8358318634748216e-01 4.9471175156393216e-01 + -2.2509495521179293e-01 5.5787509197368035e-01 4.8961174734042479e-01 + -4.6640565091623376e-01 3.6527533685669505e-01 2.5416928319190424e-01 + -7.8959328764697956e-01 3.7433310560006883e-01 -2.3852085130731276e-01 + -1.0155426551375555e+00 5.9264590912704418e-01 -5.8268983518520223e-01 + -1.1642600435952790e+00 7.6011448229061074e-01 -7.1788352401447397e-01 + -1.2825890360781926e+00 8.4222105573480710e-01 -7.6423320061847211e-01 + -1.3811630795789340e+00 8.5024563690675858e-01 -7.7110237303343820e-01 + -1.4595966429577378e+00 7.5162112949060800e-01 -7.3644239804550971e-01 + -1.5046258086361908e+00 5.0442991206130405e-01 -6.3787168459258703e-01 + -1.4824021685732933e+00 1.2485899990919358e-01 -4.5344801468497004e-01 + -1.3571289392010766e+00 -3.0936705753982396e-01 -1.8601907642079166e-01 + -1.2258903570658126e+00 -4.9934935726879914e-01 -1.1142052051033591e-01 + id 14918 + loc 2.3076745867729187e-01 5.5657297372817993e-01 394 + blend 0.0000000000000000e+00 + interp 4.7544964497096004e-01:2.8427474627606758e-01:7.9517010248575326e-01:2.7499215158478518e-01:1.2815839601627577e+00:4.7544489047451033e-01:2.0568444605477931e+00:3.1628411178698357e-01:2.7687364589639207e+00:3.4095194247085225e-01:3.1890745796822531e+00:3.0356928855236737e-01:3.9829416231628594e+00 + CVs 20 + -2.1263450409491882e-01 2.0042208343891774e-01 -1.5546596619556596e-01 + -4.2119472312549744e-01 4.0773876633879369e-01 -3.1484052314462657e-01 + -6.3133336876498003e-01 6.2934767323105023e-01 -4.7190115462274934e-01 + -8.4602018158205095e-01 8.6873917861458627e-01 -6.2580913782743552e-01 + -1.0619225421284675e+00 1.1201583444854573e+00 -7.8222472717813951e-01 + -1.2757983209987804e+00 1.3701771263986686e+00 -9.5163086672866448e-01 + -1.4851998726323181e+00 1.6005019036054169e+00 -1.1448513842581027e+00 + -1.6885325187538036e+00 1.7956279251958587e+00 -1.3646852302124501e+00 + -1.8850831787480931e+00 1.9470469036409246e+00 -1.6057031065269647e+00 + -2.0690268753763812e+00 2.0445483271891156e+00 -1.8608473163101378e+00 + -2.2223911326043249e+00 2.0718291841209400e+00 -2.1194985290033492e+00 + -2.3246069404842666e+00 2.0234918477132839e+00 -2.3626186622958643e+00 + -2.3712483826211379e+00 1.9157739746053064e+00 -2.5749615085005546e+00 + -2.3753429577451541e+00 1.7690845294125883e+00 -2.7622863908041468e+00 + -2.3563594506723691e+00 1.5873249479089817e+00 -2.9461842707443862e+00 + -2.3340840147798763e+00 1.3608173803840513e+00 -3.1412129438726071e+00 + -2.3430657370646957e+00 1.0703515348995372e+00 -3.3549612090268690e+00 + -2.4275953670939510e+00 7.1863296337071692e-01 -3.5805139161252111e+00 + -2.4648817360320807e+00 4.7162306518416153e-01 -3.7576280161948370e+00 + id 14919 + loc 1.0082822293043137e-01 6.5590345859527588e-01 405 + blend 0.0000000000000000e+00 + interp 2.9872139276674142e-01:2.9871840555281376e-01:8.4684422505469636e-01:2.9750036235283939e-01:1.7004468998543136e+00:2.7615242975200288e-01:2.8144497948768876e+00:2.6563651444107073e-01:3.9137700664013253e+00 + CVs 20 + 1.8783320632210010e-01 2.8530922378474521e-01 4.5079745077897374e-02 + 2.3475557604464173e-01 5.3686874901233550e-01 8.2287900850274653e-02 + 2.5748891251677708e-01 7.5332813532545240e-01 1.3990093423629968e-01 + 2.7557129976638606e-01 9.6453436890826350e-01 2.4385146595732968e-01 + 2.8589751746312114e-01 1.1600486190429460e+00 3.9817810475392568e-01 + 2.8838664502208444e-01 1.3290161449526348e+00 5.9843620402869824e-01 + 2.8553104721948996e-01 1.4653659917913067e+00 8.3319668650951462e-01 + 2.8118685252753339e-01 1.5697289824699494e+00 1.0892414786975630e+00 + 2.7879675135507764e-01 1.6476921106874927e+00 1.3557854408173757e+00 + 2.8076059762255745e-01 1.7060617127530113e+00 1.6255220321685715e+00 + 2.8840963033116107e-01 1.7488227576595019e+00 1.8947390988393693e+00 + 3.0208539372051202e-01 1.7765254514424580e+00 2.1624213402973518e+00 + 3.2289840160446159e-01 1.7904155311096233e+00 2.4229276587855253e+00 + 3.5243958048833524e-01 1.8008879699248195e+00 2.6547227733634626e+00 + 3.8839354155926964e-01 1.8222870165534593e+00 2.8288486243154436e+00 + 4.2427505084462902e-01 1.8537529109226298e+00 2.9363262831514270e+00 + 4.5568568219476591e-01 1.8810981976722563e+00 2.9930992242753653e+00 + 4.8295429652771871e-01 1.8933870148207641e+00 3.0197096757365158e+00 + 5.6890074405760394e-01 1.8889981070652972e+00 3.1211939056003728e+00 + id 14920 + loc 3.2670190930366516e-01 4.1882383823394775e-01 394 + blend 0.0000000000000000e+00 + interp 3.8875354084509273e-01:2.9778306610897581e-01:3.0948863298577745e-01:3.0971424612080251e-01:1.2304548059949107e+00:3.2589744846230329e-01:1.9881788536374132e+00:3.0217121549553305e-01:2.6137752856466840e+00:3.8874965330968431e-01:3.0479623574591184e+00:3.1781948195208565e-01:3.6616903077441316e+00 + CVs 20 + -1.9787216095575039e-01 7.0803242701324778e-02 2.5427309739420495e-01 + -3.8796735357551293e-01 1.1363518589080568e-01 4.8156813008868860e-01 + -5.8018228714701214e-01 1.5020216947278420e-01 7.0451429666886389e-01 + -7.7098922591700769e-01 1.9462934131835757e-01 9.3237482069809363e-01 + -9.4718816668531591e-01 2.4999604025395727e-01 1.1491452207037944e+00 + -1.0922835772080250e+00 3.1390882707364698e-01 1.3316539118727184e+00 + -1.2063787160214481e+00 3.8634589491581084e-01 1.4691904549145183e+00 + -1.3112043866266261e+00 4.7188509548733382e-01 1.5674863101071261e+00 + -1.4118790075605920e+00 5.7830683412106310e-01 1.6309614473599565e+00 + -1.4765054614336508e+00 7.2488113364938656e-01 1.6554926580248397e+00 + -1.4867995944492860e+00 9.4242218653417886e-01 1.6470923342947426e+00 + -1.4905085154889499e+00 1.2442632637170898e+00 1.6362310930518513e+00 + -1.5660466347135100e+00 1.5891717210398224e+00 1.6600968174103068e+00 + -1.7512053031015096e+00 1.8698991721895510e+00 1.7383795300093523e+00 + -2.0221297034254162e+00 1.9738008091126584e+00 1.8418192688631447e+00 + -2.3462943937465148e+00 1.8579267479251613e+00 1.9135086522166640e+00 + -2.7105847884761882e+00 1.5149871227150016e+00 1.9404803278201945e+00 + -3.0736024331445728e+00 1.0360774858473232e+00 2.0186351689241464e+00 + -3.2608880829455202e+00 8.3854525872045294e-01 2.2466433702649828e+00 + id 14921 + loc 7.3104298114776611e-01 2.9488626122474670e-01 405 + blend 0.0000000000000000e+00 + interp 3.6581619111935909e-01:3.6581253295744792e-01:5.0981575464856288e-01:3.6343570153566335e-01:1.0075236846821964e+00:2.5256891270374127e-01:1.7190194344166607e+00:2.7686527422548096e-01:2.9810295268672640e+00:2.6791076881148035e-01:3.9054828860893185e+00 + CVs 20 + -3.6690116993533591e-02 1.1282821821092426e-01 7.2239637897649478e-02 + -4.4827141341278257e-02 2.1410525380437573e-01 1.2822732823120500e-01 + -3.5365983231993220e-02 2.9101139105391094e-01 1.6668002018014777e-01 + -2.3190778022098402e-02 3.7039303870054441e-01 1.9397996235607259e-01 + -7.7209277795857179e-03 4.5414417760827219e-01 2.1343619613114784e-01 + 1.1559101032785679e-02 5.4247878481483836e-01 2.2831514490341492e-01 + 3.5143699888101787e-02 6.3421450839297966e-01 2.4098115846174101e-01 + 6.3217759532093243e-02 7.2602343529784608e-01 2.5184969551260705e-01 + 9.4592213019194626e-02 8.1323336894537068e-01 2.5965766654921274e-01 + 1.2549532555735277e-01 8.9052764766110859e-01 2.6135350723912520e-01 + 1.4993464229269188e-01 9.5463420985095582e-01 2.5384586840373669e-01 + 1.6015726046758411e-01 1.0077452248159964e+00 2.3273394791890811e-01 + 1.4858322519428274e-01 1.0520150496743501e+00 1.9490146712930684e-01 + 1.1397072217659077e-01 1.0776484578997203e+00 1.5025998522181078e-01 + 6.5869675824338170e-02 1.0658070506411716e+00 1.2493346097374797e-01 + 1.9678963201634092e-02 1.0081648420471634e+00 1.3893329659023188e-01 + -1.7042277947800111e-02 9.2188017349770934e-01 1.8244331886146900e-01 + -4.9844681905200749e-02 8.3729390082959976e-01 2.3298374160111338e-01 + -2.5409498692748278e-01 8.7528549396317434e-01 1.3652127726777125e-01 + id 14922 + loc 3.2459309697151184e-01 2.2801153361797333e-01 405 + blend 0.0000000000000000e+00 + interp 3.2506136903405075e-01:2.6389506403112351e-01:1.2832727595875071e-01:3.2505811842036042e-01:9.9629517400415823e-01:2.6365143150807402e-01:1.9978738678607670e+00:2.6879093900362755e-01:3.0078443983345613e+00 + CVs 20 + -3.7777538781987405e-02 3.8217408633099380e-02 4.9059133790148590e-02 + -1.0695629234511651e-01 6.2233882079845496e-02 1.0459289875978905e-01 + -1.9645297527670152e-01 1.0035950374582106e-01 1.9447230962085615e-01 + -2.8614945028331040e-01 1.5369926556085428e-01 3.0123627131755493e-01 + -3.6909543830753133e-01 2.2234319927466628e-01 4.3255187001970713e-01 + -4.3569702617045819e-01 3.0399327351105276e-01 5.9600384589297362e-01 + -4.7455737615402843e-01 3.9341073193587778e-01 7.9496459358072968e-01 + -4.7455204143747548e-01 4.8396860032991029e-01 1.0277937751086030e+00 + -4.2612087639324259e-01 5.6867311645175733e-01 1.2880196228621159e+00 + -3.2269741546735642e-01 6.4024905181971470e-01 1.5642513719406459e+00 + -1.6247649261769817e-01 6.9221725783237309e-01 1.8411607868293807e+00 + 4.9132014498905571e-02 7.2076274594052958e-01 2.0995685952669252e+00 + 3.0098771459702184e-01 7.2209909162671571e-01 2.3225251595185936e+00 + 5.8361625177607312e-01 6.8666427463572144e-01 2.5017801687294057e+00 + 8.9240103810192539e-01 6.0498181752369029e-01 2.6336287821758968e+00 + 1.2233991345241511e+00 4.8465398783935720e-01 2.7116778317898445e+00 + 1.5653867701286606e+00 3.5184656418702143e-01 2.7282456629285265e+00 + 1.8960805320736458e+00 2.3121747151491290e-01 2.6824022858450922e+00 + 2.0386822883603450e+00 1.7650511009457115e-01 2.5573442105992581e+00 + id 14923 + loc 1.7843408882617950e-01 8.6303764581680298e-01 394 + blend 0.0000000000000000e+00 + interp 4.2121825464411899e-01:4.2121404246157257e-01:3.9280643532515480e-02:3.2346527306413764e-01:5.7789007369676459e-01:3.2577376168512651e-01:1.0204105610280638e+00:2.8077854222979698e-01:1.8786869031819373e+00:3.0137191862752860e-01:2.8918129893894120e+00:3.9491514276364009e-01:3.8021138838728405e+00 + CVs 20 + -2.6133447709754226e-01 2.3162582329486714e-01 -1.5205566748718022e-01 + -5.1746930517596401e-01 4.6314676285249451e-01 -3.1620529554809274e-01 + -7.8392129241288511e-01 6.9664217531775052e-01 -4.8210884822993005e-01 + -1.0651240287944526e+00 9.2339710101307049e-01 -6.4848961557168339e-01 + -1.3565710725225890e+00 1.1267605952391133e+00 -8.2040843254637819e-01 + -1.6509272575853244e+00 1.2877251077614891e+00 -1.0035285391423967e+00 + -1.9421423313538464e+00 1.3930843180332018e+00 -1.2005076616941817e+00 + -2.2277072924377102e+00 1.4389101276859018e+00 -1.4091023678543357e+00 + -2.5056438643211685e+00 1.4275413445515697e+00 -1.6243567143256610e+00 + -2.7752128001725898e+00 1.3657424543929684e+00 -1.8435996601908022e+00 + -3.0385261145137399e+00 1.2627137600113525e+00 -2.0683043715098282e+00 + -3.2955708563254231e+00 1.1293697873510484e+00 -2.3014390539961602e+00 + -3.5407389684544928e+00 9.7743489125570582e-01 -2.5451389920903464e+00 + -3.7674418170198178e+00 8.1269335344820770e-01 -2.8006268408378707e+00 + -3.9713927351178016e+00 6.3757629739158217e-01 -3.0685606913575070e+00 + -4.1420058451779482e+00 4.8669615867507776e-01 -3.3409617850827491e+00 + -4.2481231978342340e+00 4.5816688661109684e-01 -3.5689014808794068e+00 + -4.2616092528612830e+00 5.6808987265063782e-01 -3.6656099775051731e+00 + -4.3489733065926455e+00 6.4960622766420717e-01 -3.9654280228378962e+00 + id 14924 + loc 8.7817031145095825e-01 5.3995037078857422e-01 405 + blend 0.0000000000000000e+00 + interp 3.1542532985130917e-01:2.6491664818287719e-01:1.2938948861212052e-02:2.9065017236972018e-01:9.9971415669952179e-01:2.6455286543739465e-01:1.9027982105059738e+00:3.1542217559801067e-01:2.5179999575190060e+00:2.5021673269539357e-01:3.1572770015737941e+00 + CVs 20 + 7.5441174401678274e-02 2.4187852584414726e-01 -7.5333946596058660e-02 + 5.9348134470651209e-02 4.3394919107888952e-01 -1.3993507144420744e-01 + 2.0550469873815369e-02 6.0446770649048309e-01 -1.9183188355553751e-01 + -2.1096493247739989e-02 7.7667596256672256e-01 -2.2837002125503272e-01 + -7.1004264967318875e-02 9.4415776922189232e-01 -2.3898394595209180e-01 + -1.3226672346613821e-01 1.0970603827493415e+00 -2.0957916029338292e-01 + -2.0142739735531345e-01 1.2169132057626089e+00 -1.2180167308201900e-01 + -2.5832080586603529e-01 1.2692927512220129e+00 3.6486571061016847e-02 + -2.6391243924272473e-01 1.2198251123921862e+00 2.3456131705709615e-01 + -2.0402366712023978e-01 1.0935714585441620e+00 3.9919386861589762e-01 + -1.1001900515219126e-01 9.4885060667045984e-01 5.0622005071193255e-01 + -9.6867317447230650e-03 8.0257505385500005e-01 5.7559116655396836e-01 + 8.8957479634805464e-02 6.5105674392086477e-01 6.2050421261495281e-01 + 1.9121198261902128e-01 5.0406219638050409e-01 6.4880553346587355e-01 + 3.0749250819213902e-01 3.7961542539328652e-01 6.7302015356955169e-01 + 4.4173342811180705e-01 2.8461258196545869e-01 7.0002572777370453e-01 + 5.8450287645562482e-01 2.0857138054779678e-01 7.2490940929637127e-01 + 7.2034894055305354e-01 1.3428888360283162e-01 7.4708949463244234e-01 + 7.8644033546709058e-01 -6.2970925031412550e-03 7.8577127485273646e-01 + id 14925 + loc 9.7692602872848511e-01 5.1806652545928955e-01 394 + blend 0.0000000000000000e+00 + interp 4.6205301291066458e-01:2.6722585850386693e-01:5.2303170954160549e-01:2.8757182125061770e-01:1.0173976781560923e+00:2.7020635004262145e-01:1.8157179457724144e+00:4.6204839238053552e-01:2.1772357918385068e+00:3.7450673770643583e-01:2.8080951201375228e+00:3.2714659001726037e-01:3.5550522790060533e+00 + CVs 20 + -2.6384663974616857e-01 2.4161152876329028e-01 -3.7764939040549644e-01 + -4.9524952071227257e-01 4.2539797206281299e-01 -7.2818486193586807e-01 + -7.1160380046461347e-01 5.7207250134204546e-01 -1.0738723003813111e+00 + -9.2367648060467744e-01 6.8982101382090799e-01 -1.4233171752851708e+00 + -1.1353982105453846e+00 7.7661548107247313e-01 -1.7719487024425580e+00 + -1.3562908769898063e+00 8.3397770268431226e-01 -2.1158102045489411e+00 + -1.5939342790854987e+00 8.6210718579153944e-01 -2.4465262731513553e+00 + -1.8453225167815663e+00 8.5553141636341090e-01 -2.7468807743545653e+00 + -2.1040484021146577e+00 8.1097853267761555e-01 -3.0008013290942293e+00 + -2.3669590450288673e+00 7.3473368983272591e-01 -3.1987951198043940e+00 + -2.6304079008764711e+00 6.4157304457092601e-01 -3.3363530160239314e+00 + -2.8917035412413932e+00 5.4810473376054847e-01 -3.4204220195914106e+00 + -3.1504792608184653e+00 4.6464423154691836e-01 -3.4686789209343880e+00 + -3.3960987632711652e+00 3.9984998981542486e-01 -3.4954897446114401e+00 + -3.6055579207469233e+00 3.6848820966253459e-01 -3.5106018188935586e+00 + -3.7652997322778914e+00 3.8863888182188910e-01 -3.5321400577701443e+00 + -3.8896468868838543e+00 4.6797977065640550e-01 -3.5933807967118541e+00 + -4.0070790841151371e+00 5.6476706083545070e-01 -3.7174937844626035e+00 + -4.1515522170549843e+00 4.0276924116105706e-01 -3.7427003084850359e+00 + id 14926 + loc 8.6203879117965698e-01 2.0926879346370697e-01 405 + blend 0.0000000000000000e+00 + interp 3.6650667515575736e-01:3.6650301008900582e-01:5.2895593636811267e-01:2.9238566993262743e-01:1.1367274651468462e+00:2.6138772238909325e-01:2.0017820792915240e+00:2.7241501286277464e-01:3.0758168216861996e+00:2.5763551868055590e-01:3.9844811108538098e+00 + CVs 20 + 2.9058367065833132e-02 1.0188999528535536e-01 5.3767866612053850e-02 + 8.9367099576372303e-02 1.8126946458361948e-01 1.0430231270475111e-01 + 1.6830700005521518e-01 2.3932532648065608e-01 1.5515513684431850e-01 + 2.5572312589735863e-01 2.8556906207102073e-01 2.1113528173883797e-01 + 3.5219578289883868e-01 3.1933530098068602e-01 2.7057464813894244e-01 + 4.5875697388166420e-01 3.4037173605149557e-01 3.3174338823500565e-01 + 5.7741407658519939e-01 3.4888558776550327e-01 3.9281126004572714e-01 + 7.1165021643842952e-01 3.4485001398416282e-01 4.5054754444717421e-01 + 8.6531469161041463e-01 3.2747585087676434e-01 4.9956695251609928e-01 + 1.0400270876994002e+00 2.9481833977313637e-01 5.3246890956110926e-01 + 1.2335463136762397e+00 2.4431627176793119e-01 5.4182098117428712e-01 + 1.4372868856145802e+00 1.7376503526374820e-01 5.2434562905309656e-01 + 1.6396011203661760e+00 8.1520898831776822e-02 4.8364025392961829e-01 + 1.8391154271526164e+00 -3.7075228499311996e-02 4.1573795234829303e-01 + 2.0458942466516201e+00 -1.9543617709390482e-01 2.8255197287331507e-01 + 2.2534951204199327e+00 -3.9880711431753280e-01 1.8787167638173452e-02 + 2.4191491108910919e+00 -6.0720327756803305e-01 -3.9901805677635815e-01 + 2.5026998845629120e+00 -7.6383326425855946e-01 -9.1335537358134156e-01 + 2.5832262512871575e+00 -8.9260770282366964e-01 -1.0672023194414297e+00 + id 14927 + loc 2.9127798043191433e-03 1.6487905383110046e-01 394 + blend 0.0000000000000000e+00 + interp 3.9920418639815158e-01:3.9920019435628762e-01:1.0016242886280475e+00:7.6845392508005927e-02:1.8698133443004399e+00:3.4225117592937448e-01:2.9993842827856598e+00:3.3004701002665093e-01:3.2956327979664888e+00:3.2430525388360892e-01:3.9867074780062772e+00 + CVs 20 + -4.9278120230742239e-02 2.8102783048333629e-01 2.0067489101263516e-01 + -1.1973313672807559e-01 5.9214311855559021e-01 4.0472384790578259e-01 + -1.9657438104237640e-01 9.1251249411808100e-01 5.9166620769833678e-01 + -2.7956769672102794e-01 1.2292163830839262e+00 7.5649615669749792e-01 + -3.7727546939896867e-01 1.5359524590997946e+00 9.0193861106072326e-01 + -4.9636108455538175e-01 1.8271711754951814e+00 1.0328757858448523e+00 + -6.4021737966836179e-01 2.0976072685350928e+00 1.1552411491481847e+00 + -8.0747301805285487e-01 2.3418365629768805e+00 1.2726744565280046e+00 + -9.9403708086561660e-01 2.5577443024176016e+00 1.3871622596145943e+00 + -1.1988258320005349e+00 2.7485664870311211e+00 1.5013346973510648e+00 + -1.4287687120643775e+00 2.9209024713182066e+00 1.6208179624076777e+00 + -1.6997988440978253e+00 3.0765790399452722e+00 1.7569779165745119e+00 + -2.0204663264039704e+00 3.1916218221091821e+00 1.9186022744155471e+00 + -2.3406806939899298e+00 3.2194970264883547e+00 2.0788079119156411e+00 + -2.5670833655812562e+00 3.1596019252820540e+00 2.1840912335231684e+00 + -2.6769628174871132e+00 3.0428613572002572e+00 2.2140169780268333e+00 + -2.7375856470993178e+00 2.8681487817434288e+00 2.1680884080152700e+00 + -2.8357029784374679e+00 2.6379703308681730e+00 2.0794290415897700e+00 + -2.9149071116301792e+00 2.5652669520752216e+00 2.1976474404929771e+00 + id 14928 + loc 5.3380572795867920e-01 2.9828023910522461e-01 405 + blend 0.0000000000000000e+00 + interp 3.4500430858196091e-01:2.7457825125990659e-01:3.0775857294555886e-01:3.4500085853887508e-01:1.0105065470842940e+00:2.7169231583140546e-01:2.0037381866412627e+00:2.7986692816027980e-01:2.9387126045047798e+00:2.9518372633450285e-01:3.6416741724226691e+00 + CVs 20 + 6.8297667434114806e-02 1.3694015945079660e-01 -2.3721033756563363e-02 + 1.7635227881950272e-01 2.3006094507625433e-01 -3.8966841023977072e-02 + 2.9875287617090351e-01 3.1104952614537540e-01 -5.6164230392023874e-02 + 4.2449728346541959e-01 3.7964250113297165e-01 -8.1105517101790744e-02 + 5.5468686472234419e-01 4.3300677571213653e-01 -1.1784353672498214e-01 + 6.8993694976196807e-01 4.7017766858218224e-01 -1.7069953103357022e-01 + 8.3107183875877066e-01 4.9197108924841815e-01 -2.4367692249705275e-01 + 9.7920383943507838e-01 5.0008672179297398e-01 -3.4073702884430279e-01 + 1.1344384335250752e+00 4.9543760522936359e-01 -4.6650073337980824e-01 + 1.2949531887259100e+00 4.7755772235704991e-01 -6.2569664592570517e-01 + 1.4565161376571505e+00 4.4378158056689576e-01 -8.2161896471295637e-01 + 1.6136184979053896e+00 3.8787709547894678e-01 -1.0524440513040894e+00 + 1.7612496223528993e+00 3.0377159564560563e-01 -1.3129339767740165e+00 + 1.8925378079138888e+00 1.9808751075292053e-01 -1.6076804221134715e+00 + 1.9933432960343827e+00 9.8004482580643204e-02 -1.9589321055095374e+00 + 2.0427784355487826e+00 4.1621261683556510e-02 -2.3858021609612119e+00 + 2.0248567896069045e+00 5.3563501655764734e-02 -2.8732299525283982e+00 + 1.9379734029061586e+00 1.3093976244058991e-01 -3.3765933201887717e+00 + 2.0151063289426148e+00 1.0588747933032883e-01 -3.7161978385097298e+00 + id 14929 + loc 6.7779606580734253e-01 1.6882164776325226e-01 394 + blend 0.0000000000000000e+00 + interp 4.0111636585386728e-01:2.5880604468045137e-01:4.2112729030958973e-02:3.0191037335828902e-01:7.8843225711665232e-01:2.5101064628618891e-01:1.1754513783980731e+00:4.0111235469020878e-01:1.9625838905984621e+00:3.5917651937876277e-01:2.4613812969780371e+00:2.6432479933255593e-01:3.0721615757123533e+00 + CVs 20 + 1.8674740908585485e-01 2.5284238264402420e-01 2.6480857450982886e-01 + 4.0196628940856943e-01 4.8409063535845326e-01 4.9228364670612135e-01 + 6.2805042996041283e-01 7.0016749820621083e-01 7.1017447330278727e-01 + 8.5765828879742501e-01 9.0920003282205075e-01 9.3373598233178390e-01 + 1.0855574595448871e+00 1.1125789633865906e+00 1.1679117043161451e+00 + 1.3096634483139922e+00 1.3036692830553898e+00 1.4177551259511636e+00 + 1.5339758530729852e+00 1.4705797594241554e+00 1.6878884473714120e+00 + 1.7606668207262663e+00 1.6018660024548270e+00 1.9798923286421719e+00 + 1.9857270659829109e+00 1.6886155883424205e+00 2.2893217340150844e+00 + 2.2035942503748704e+00 1.7248718498053153e+00 2.6042389870670775e+00 + 2.4118301012053003e+00 1.7079246656942286e+00 2.9078093688573832e+00 + 2.6096374017378210e+00 1.6361596086224817e+00 3.1849483985700831e+00 + 2.7987395256786423e+00 1.5009975595469049e+00 3.4341128206469094e+00 + 2.9871148316159761e+00 1.2828528899436811e+00 3.6690104268666452e+00 + 3.1865995546871595e+00 9.8542729401276397e-01 3.9062992443016848e+00 + 3.4103153924379921e+00 6.6990766562171666e-01 4.1554294391360154e+00 + 3.6658156435048772e+00 4.2522285773884727e-01 4.3922319234142293e+00 + 3.9491494219635586e+00 2.8800760258021141e-01 4.5797577340559705e+00 + 4.2968434695483477e+00 1.2041696133065605e-01 4.8181894095656288e+00 + id 14930 + loc 1.4854654669761658e-01 2.7173897624015808e-01 405 + blend 0.0000000000000000e+00 + interp 3.5034186496376474e-01:3.3967521850784432e-01:2.3434225694403299e-01:2.6747817193363399e-01:1.1165186473688558e+00:2.6784854668061214e-01:1.9869416387967311e+00:3.5033836154511511e-01:2.5918831663585378e+00:2.7151729554514453e-01:3.3221573662810635e+00 + CVs 20 + 2.6787197638605768e-03 1.2862446515812626e-01 -5.3837444224984148e-02 + -1.6436205741832442e-02 2.1038089953337241e-01 -4.4593603012284336e-02 + -3.9446772478500078e-02 2.9982188002361354e-01 -7.5545651397346814e-03 + -5.5964585932108846e-02 4.0218996514406602e-01 2.9032767607550442e-02 + -6.2876790260853674e-02 5.1631513849763899e-01 6.4440258885945650e-02 + -5.5832993269104583e-02 6.4092583744863296e-01 9.8301713637007321e-02 + -2.8888663158825417e-02 7.7349627575255453e-01 1.3122006325816971e-01 + 2.4423216356350530e-02 9.0919215597392045e-01 1.6553867095586300e-01 + 1.0860739981069643e-01 1.0408603800670819e+00 2.0497296266975784e-01 + 2.2500695471769633e-01 1.1615160577720072e+00 2.5270879659797646e-01 + 3.7388604955139093e-01 1.2670093462312844e+00 3.0910357680415973e-01 + 5.5607975792284781e-01 1.3555743844330954e+00 3.7087088433431875e-01 + 7.7295994862411399e-01 1.4261237890058436e+00 4.3156866277907296e-01 + 1.0229216499407212e+00 1.4768633896796737e+00 4.8353260831007322e-01 + 1.2994379740195325e+00 1.5053312066465208e+00 5.2110157004402224e-01 + 1.5940913779653116e+00 1.5092228612867638e+00 5.4167622160008255e-01 + 1.8990832128442601e+00 1.4877608180782582e+00 5.4453580293574255e-01 + 2.2032041382284273e+00 1.4430391527202171e+00 5.3017521638567489e-01 + 2.4318477440686546e+00 1.4064459548292445e+00 5.4465264543064107e-01 + id 14931 + loc 3.4457513689994812e-01 5.1322793960571289e-01 394 + blend 0.0000000000000000e+00 + interp 3.8875354084509273e-01:3.8874965330968431e-01:3.9057566493730156e-02:3.0791424771226322e-01:7.6743380152835239e-01:3.4095194247085225e-01:1.2016531520499476e+00:3.0177869056927387e-01:1.9931795462976512e+00:3.7674954002874189e-01:2.8643449182726597e+00:2.6052383043183286e-01:3.5352688078764518e+00 + CVs 20 + -2.5454763886704540e-01 1.9258492915216838e-01 -1.2317646042376620e-01 + -4.8928580399425525e-01 3.8532384915987261e-01 -2.5191860764507301e-01 + -7.1351366215484024e-01 5.9232676610234480e-01 -3.9076361264388237e-01 + -9.3179421653345118e-01 8.2399300764018246e-01 -5.4150500663449963e-01 + -1.1411436442033718e+00 1.0799731577605216e+00 -7.0565595758091160e-01 + -1.3414860423620327e+00 1.3503961717185122e+00 -8.9012811286995586e-01 + -1.5368208690579834e+00 1.6146248059597705e+00 -1.1063526031728668e+00 + -1.7322669564549666e+00 1.8508916791441896e+00 -1.3593870697995141e+00 + -1.9341675777426683e+00 2.0456610421696109e+00 -1.6445679419882255e+00 + -2.1449983964524351e+00 2.1829402894039269e+00 -1.9550028120839495e+00 + -2.3510835447667580e+00 2.2351183868406261e+00 -2.2810947738938228e+00 + -2.5257988267542153e+00 2.1803214878158497e+00 -2.6021482081680762e+00 + -2.6481464655451523e+00 2.0221408320337795e+00 -2.8889374884979824e+00 + -2.7119797412373998e+00 1.7861846463717390e+00 -3.1217467529600427e+00 + -2.7283092985279289e+00 1.4997729120811121e+00 -3.3027546263689960e+00 + -2.7282929185310008e+00 1.1712210318786682e+00 -3.4490069675800026e+00 + -2.7656411189714705e+00 7.9329991098332586e-01 -3.5777527037643022e+00 + -2.8788812637994674e+00 3.9366125534405083e-01 -3.6854282970135692e+00 + -2.9691444767463726e+00 7.8508684566406917e-02 -3.7427449208098813e+00 + id 14932 + loc 8.1088495254516602e-01 7.3423010110855103e-01 394 + blend 0.0000000000000000e+00 + interp 4.0057174385074240e-01:2.7859833970814513e-01:7.7993725862290475e-02:4.0056773813330393e-01:1.0048647449685533e+00:2.5124053249032757e-01:1.8429278434301022e+00:3.0624743456360887e-01:2.9183884588005204e+00:3.5957775185192886e-01:3.4058746760617851e+00 + CVs 20 + -2.3187484770448186e-01 1.8772052523662255e-01 -2.2315135587109147e-01 + -4.5835506902941781e-01 3.4456615361912751e-01 -4.2686919038414206e-01 + -6.8195346056741812e-01 4.8485276397187788e-01 -6.3047193433581927e-01 + -9.0088595486212719e-01 6.1534184786306911e-01 -8.4567488928404755e-01 + -1.1082758531575490e+00 7.3480114309610711e-01 -1.0789911741856391e+00 + -1.2985495021091460e+00 8.4187131507809709e-01 -1.3339447921186605e+00 + -1.4711573913465541e+00 9.3919351943520202e-01 -1.6095103292639348e+00 + -1.6247580097289740e+00 1.0262707619403542e+00 -1.9029023395532467e+00 + -1.7530971313536767e+00 1.0911710902028890e+00 -2.2150099786972852e+00 + -1.8545270475559632e+00 1.1165755908793038e+00 -2.5495762557361985e+00 + -1.9404591734302685e+00 1.0866425445020087e+00 -2.9083869074495694e+00 + -2.0216570051820910e+00 9.8972071361405600e-01 -3.2874930512047316e+00 + -2.0965189445032220e+00 8.2362274847890493e-01 -3.6782532131596399e+00 + -2.1666003609480420e+00 5.9205486573571164e-01 -4.0719232377134462e+00 + -2.2462070032623607e+00 2.9993045915448580e-01 -4.4522382508914458e+00 + -2.3391868569678635e+00 -4.1433739856272300e-02 -4.7820919085071889e+00 + -2.4266933857396680e+00 -4.1681142296286300e-01 -5.0261835683515486e+00 + -2.5059213854329281e+00 -8.2308391496005839e-01 -5.1914024487572519e+00 + -2.6194570446287342e+00 -1.2594670154087364e+00 -5.3647242372511066e+00 + id 14933 + loc 1.9689898192882538e-01 2.7698315680027008e-03 394 + blend 0.0000000000000000e+00 + interp 5.8686054548158795e-01:2.8956135502241853e-01:6.1587455470620389e-01:3.4196784590426227e-01:1.3015462990683804e+00:5.8685467687613313e-01:1.9781078654827398e+00:2.5606983825767887e-01:2.9495281188128919e+00:3.7681822964729333e-01:3.9256325369403573e+00 + CVs 20 + -3.3898996004038839e-02 3.4600311061081418e-01 2.7091718270222015e-01 + -7.8030652395983974e-02 6.8375129930801126e-01 5.7006074544785479e-01 + -1.2955729553514683e-01 1.0041341259999399e+00 8.8739787242415180e-01 + -1.9937465108438163e-01 1.3098627329149977e+00 1.2127416786972451e+00 + -3.0524637035355151e-01 1.5969098941901161e+00 1.5389270163673228e+00 + -4.6091183312947082e-01 1.8460131323490236e+00 1.8630163316423083e+00 + -6.6814391844900678e-01 2.0339585844701831e+00 2.1766455217155825e+00 + -9.1462404358493110e-01 2.1465077437503020e+00 2.4635667991163182e+00 + -1.1771688641060776e+00 2.1806716169918090e+00 2.7071013460582343e+00 + -1.4278002123086586e+00 2.1446919164861873e+00 2.8957346851533252e+00 + -1.6421165876182358e+00 2.0587093634600002e+00 3.0219608975595582e+00 + -1.8080992469207242e+00 1.9554506547312722e+00 3.0842428065532212e+00 + -1.9441716851777682e+00 1.8628404174265700e+00 3.1034327551765530e+00 + -2.0911136357296605e+00 1.7559098469676744e+00 3.1177742373720987e+00 + -2.2633524859570677e+00 1.5867532685703787e+00 3.1444220057755432e+00 + -2.4668099591124042e+00 1.3498071157753593e+00 3.1894799342477382e+00 + -2.7241800907963758e+00 1.0678915706889749e+00 3.2712763484926901e+00 + -3.0140237215643388e+00 8.0417395345620468e-01 3.4130162617537581e+00 + -3.1956120143576978e+00 7.2876419111322321e-01 3.5693239535322610e+00 + id 14934 + loc 4.1343170404434204e-01 1.4808909967541695e-02 394 + blend 0.0000000000000000e+00 + interp 3.9867524373467439e-01:3.0845747801714374e-01:8.7440735238092826e-01:2.8472489286902425e-01:2.0003608067745020e+00:3.8920505123476762e-01:2.6418350497468630e+00:2.7006048031171920e-01:3.1017349047953897e+00:3.9867125698223704e-01:3.9917477434736965e+00 + CVs 20 + -1.6165198885235521e-01 1.9720426017598669e-01 2.4577442595603233e-01 + -2.8952248863373886e-01 3.8316567560302550e-01 4.9048886183482637e-01 + -3.8801973036372123e-01 5.5738288058738394e-01 7.3423379546395617e-01 + -4.5957803197010749e-01 7.2571547081467702e-01 9.7858108189739923e-01 + -5.0355805171128554e-01 8.9561711600794913e-01 1.2171319371737488e+00 + -5.2334215753600111e-01 1.0752922533263378e+00 1.4460564129208264e+00 + -5.2969722702847144e-01 1.2686224548375493e+00 1.6780986419745356e+00 + -5.3709815082280832e-01 1.4746503758836365e+00 1.9322389476218331e+00 + -5.6010814302192524e-01 1.6921740993598939e+00 2.2157223063296487e+00 + -6.1151233327768562e-01 1.9208191807728330e+00 2.5201044731053690e+00 + -6.9875186391407440e-01 2.1639866360286590e+00 2.8367996623408418e+00 + -8.3294019917770823e-01 2.4220528454360348e+00 3.1737849719955875e+00 + -1.0261097615218544e+00 2.6497942746099827e+00 3.5423961666769461e+00 + -1.2388402910074128e+00 2.7407843880558547e+00 3.9131259350166152e+00 + -1.3884781603511707e+00 2.6371335046277791e+00 4.2262630340795262e+00 + -1.4639391499092484e+00 2.4048536753015854e+00 4.4421607357541477e+00 + -1.5143912605233119e+00 2.1726767603539225e+00 4.5113544599338695e+00 + -1.5854074147234223e+00 2.0081265769450067e+00 4.4425442577996161e+00 + -1.7316725490161733e+00 1.8693887389345436e+00 4.7517982544515931e+00 + id 14935 + loc 7.2457951307296753e-01 6.1017566919326782e-01 394 + blend 0.0000000000000000e+00 + interp 4.7697199774456722e-01:4.7696722802458980e-01:5.8630800816058060e-01:2.5832091321148887e-01:1.3056259225834670e+00:2.8251466994201913e-01:2.4309805119382450e+00:2.8325950065070404e-01:3.0168631986596672e+00:2.5510397726009576e-01:3.8551835592948271e+00 + CVs 20 + -2.6788112656835472e-01 1.9659484194164281e-01 -1.8724412247324468e-01 + -5.3069533429751137e-01 3.7566162181525775e-01 -3.6951621927622785e-01 + -7.9844820451029297e-01 5.4721245983550171e-01 -5.5835039076105586e-01 + -1.0735263793970113e+00 7.1735499246183865e-01 -7.6367953088988627e-01 + -1.3487178303083065e+00 8.8392608900853764e-01 -9.9120429335699312e-01 + -1.6194051321418084e+00 1.0430186571002307e+00 -1.2422018014795704e+00 + -1.8867510530038114e+00 1.1915989661067750e+00 -1.5158411706675192e+00 + -2.1526650753305967e+00 1.3225971466870377e+00 -1.8141084568925732e+00 + -2.4164706659315960e+00 1.4203280854799694e+00 -2.1398841462069118e+00 + -2.6787180420826395e+00 1.4664230198837975e+00 -2.4897708532958358e+00 + -2.9454393599291051e+00 1.4487710830503029e+00 -2.8590666826788178e+00 + -3.2210874861755725e+00 1.3618024707140273e+00 -3.2490793321591904e+00 + -3.5019637404373327e+00 1.2051912328562746e+00 -3.6573845967374083e+00 + -3.7869181182527818e+00 9.8381091704190293e-01 -4.0639497834522222e+00 + -4.0878040348828373e+00 7.0057146379242496e-01 -4.4354455360854708e+00 + -4.4105033001171394e+00 3.4050531449469768e-01 -4.7369505727740551e+00 + -4.7299168712413966e+00 -1.2415827075179742e-01 -4.9330735506684782e+00 + -5.0104022983035179e+00 -6.7441063335848517e-01 -5.0098276993544379e+00 + -5.3088715394999877e+00 -1.1056104899960704e+00 -5.1995911509838875e+00 + id 14936 + loc 6.3082642853260040e-02 3.1536233425140381e-01 394 + blend 0.0000000000000000e+00 + interp 4.2074343050260471e-01:2.7251213456673373e-01:5.1121048291275906e-01:3.9689629902918078e-01:1.0089059686795803e+00:3.9915519351974038e-01:1.3184411019629285e+00:2.2065873125747582e-01:2.0082650361198118e+00:4.2073922306829969e-01:2.2756694615014381e+00:3.4662029861377114e-01:3.4168747316209958e+00:3.7875168290969952e-01:3.9788602564487596e+00 + CVs 20 + -2.7762056785593819e-01 2.1107986123584474e-01 2.7278361618709240e-01 + -5.1400121814331723e-01 4.1446346319032856e-01 5.4987857535367812e-01 + -7.2687731800553823e-01 6.3472921584171471e-01 8.2495621081144743e-01 + -9.1418012350683742e-01 8.7519819260176690e-01 1.0879479078479599e+00 + -1.0847190101703206e+00 1.1349198882825700e+00 1.3416615993984280e+00 + -1.2804917569197676e+00 1.4213315915940119e+00 1.5989677838806631e+00 + -1.5451954692501628e+00 1.7404623963679824e+00 1.8584083234192703e+00 + -1.9027883130288594e+00 2.0908373764570949e+00 2.1053624571650946e+00 + -2.3644290382094626e+00 2.4590009934092887e+00 2.3360072479152576e+00 + -2.9363891895015213e+00 2.8135721187998506e+00 2.5617497952968793e+00 + -3.6162786013925619e+00 3.1022724420506438e+00 2.8022512636610846e+00 + -4.3838077817400567e+00 3.2588889853725069e+00 3.0765372731503557e+00 + -5.1932033518900571e+00 3.2161468093975984e+00 3.3892769800990639e+00 + -5.9622936766946975e+00 2.9380078888876646e+00 3.7249054444611991e+00 + -6.5850218768253210e+00 2.4595190869701375e+00 4.0515055087719078e+00 + -6.9882220218465720e+00 1.8889133027819236e+00 4.3266005367595115e+00 + -7.1857211929367253e+00 1.3427069196454764e+00 4.5372430942236948e+00 + -7.1945933538161562e+00 8.9508117207277405e-01 4.7247656366809601e+00 + -6.9338543714940188e+00 7.2786562449776815e-01 4.8917379498143054e+00 + id 14937 + loc 8.3084756135940552e-01 5.9555274248123169e-01 394 + blend 0.0000000000000000e+00 + interp 3.8230389826584621e-01:2.7096064853746071e-01:4.5170426591309887e-01:2.8325950065070404e-01:1.0148114860537314e+00:2.6746293735610199e-01:1.8673592362311564e+00:3.8230007522686354e-01:2.4558725437691171e+00:2.5780976592286520e-01:3.0100308387273760e+00:2.4240521220732236e-01:3.8837857674995275e+00 + CVs 20 + -2.6894583112701048e-01 2.1966810583875135e-01 -2.4335708802676462e-01 + -5.0806528736289625e-01 4.1133114997625642e-01 -4.7731978588652990e-01 + -7.2566375152998008e-01 5.8633373165153724e-01 -7.1856511426068992e-01 + -9.2211966737022832e-01 7.4794320118503932e-01 -9.7313110750061849e-01 + -1.0925404343553078e+00 8.9127177774706856e-01 -1.2386157522175245e+00 + -1.2373759012205170e+00 1.0137546219752664e+00 -1.5116460422142415e+00 + -1.3615037649541759e+00 1.1165887466410858e+00 -1.7857381222870858e+00 + -1.4691779564885681e+00 1.2024756222673587e+00 -2.0518384366760705e+00 + -1.5621417219840656e+00 1.2721415384007329e+00 -2.3083475607146506e+00 + -1.6422038297609072e+00 1.3212914148605170e+00 -2.5634137715551359e+00 + -1.7155152370291669e+00 1.3396380015073033e+00 -2.8182778024695665e+00 + -1.7894696446968497e+00 1.3157122582475853e+00 -3.0602886310612751e+00 + -1.8618105425164073e+00 1.2440302974860664e+00 -3.2835653647439007e+00 + -1.9189522903221463e+00 1.1223085145309175e+00 -3.5032188121138939e+00 + -1.9535641390551457e+00 9.5519300083374326e-01 -3.7348590480372126e+00 + -1.9776335832254821e+00 7.7342925295906850e-01 -3.9723991143381499e+00 + -2.0061960387090640e+00 6.1266534007858020e-01 -4.1973485618567494e+00 + -2.0395965900706976e+00 4.3452677743726564e-01 -4.3770987440161653e+00 + -2.0704014656763903e+00 2.1549535152259214e-02 -4.3419770351653639e+00 + id 14938 + loc 7.7417361736297607e-01 2.0393833518028259e-01 394 + blend 0.0000000000000000e+00 + interp 3.8423838096223806e-01:3.4219628265845881e-01:3.7981581678480758e-02:2.9086528051110239e-01:8.4964692975410872e-01:3.8423453857842843e-01:1.3526922661615053e+00:2.4725474418367338e-01:2.0199283259926810e+00:3.0191037335828902e-01:2.7707052375106134e+00:2.4352447394567348e-01:3.2034387090765049e+00 + CVs 20 + 2.8300098053166445e-01 3.0589393607826143e-01 2.6778262040566048e-01 + 5.9810421305626926e-01 5.8800798175537916e-01 4.7311883720711939e-01 + 9.2163453250844685e-01 8.6057088312269991e-01 6.7228980980344399e-01 + 1.2438472604084030e+00 1.1286477305129536e+00 8.9180080292066999e-01 + 1.5609220206376380e+00 1.3841077250594234e+00 1.1468682914263064e+00 + 1.8714646749107020e+00 1.6058289374693211e+00 1.4461073941260785e+00 + 2.1743051205436381e+00 1.7712720040922860e+00 1.7925305838535173e+00 + 2.4629954242051140e+00 1.8616345165473618e+00 2.1804605594003443e+00 + 2.7269228569695061e+00 1.8619043848537544e+00 2.5873638209105545e+00 + 2.9576786295981590e+00 1.7654693852730492e+00 2.9759360569134845e+00 + 3.1506464698998142e+00 1.5762830414502422e+00 3.3081831425341806e+00 + 3.3005360985081023e+00 1.3077666961614691e+00 3.5515937464279057e+00 + 3.4048847821450785e+00 9.8753384623742724e-01 3.6936563555636570e+00 + 3.4773706924774279e+00 6.3142747555435674e-01 3.7823606903551141e+00 + 3.5419688196529906e+00 2.2600344614869083e-01 3.8909559367043487e+00 + 3.6207730239043929e+00 -1.9638772177355079e-01 4.0465531409938666e+00 + 3.7312515349775044e+00 -5.5357206327345843e-01 4.2105235760017958e+00 + 3.8629655202755915e+00 -8.2673584625779428e-01 4.3466005204168860e+00 + 3.9650839349140075e+00 -1.1535560898793151e+00 4.5517717059484131e+00 + id 14939 + loc 2.1268238127231598e-01 4.1626268625259399e-01 394 + blend 0.0000000000000000e+00 + interp 4.0997120152570360e-01:2.9417489796821744e-01:6.3565545632211196e-01:4.0996710181368834e-01:1.0439612912290710e+00:3.0300189933514254e-01:1.6051748745591310e+00:3.8058197668124766e-01:2.3014086098413897e+00:3.0429262924189043e-01:3.1923151554155385e+00:3.2589744846230329e-01:3.9859524562382940e+00 + CVs 20 + -1.5724990926117355e-01 2.1772800300458467e-01 2.6581038467334805e-01 + -3.3100418337947896e-01 4.2697209457935237e-01 4.9629654512643295e-01 + -5.1660220816242775e-01 6.4151611376997075e-01 7.1235926223933888e-01 + -7.1065383935951321e-01 8.6731953713741894e-01 9.2427587247988907e-01 + -9.1157967433228126e-01 1.0986908133968607e+00 1.1305469109003701e+00 + -1.1192687267146761e+00 1.3229811068016217e+00 1.3298126717009202e+00 + -1.3359984934862217e+00 1.5270324615206143e+00 1.5247491797705988e+00 + -1.5634981511428361e+00 1.7036001739198998e+00 1.7237835894491667e+00 + -1.7954436532473321e+00 1.8466624744107962e+00 1.9338529373008939e+00 + -2.0156185349012210e+00 1.9430993364659681e+00 2.1485307514072902e+00 + -2.2085772071033438e+00 1.9794512654587908e+00 2.3510997614632654e+00 + -2.3695535600651532e+00 1.9536720345939960e+00 2.5340300925438779e+00 + -2.5010197954020787e+00 1.8696403538653554e+00 2.7046735029517626e+00 + -2.6075199365852093e+00 1.7277513883346431e+00 2.8766480248087252e+00 + -2.6941363867498058e+00 1.5243604124734715e+00 3.0653457185810433e+00 + -2.7559191488122101e+00 1.2721788136062340e+00 3.2836425546799899e+00 + -2.7767497079708647e+00 1.0212917985733920e+00 3.5424656882076500e+00 + -2.7421086271731983e+00 8.3824722826876119e-01 3.8315550845231572e+00 + -2.6796597090899255e+00 6.8274557450883999e-01 4.1501241240554627e+00 + id 14940 + loc 8.6723214387893677e-01 5.3284531831741333e-01 394 + blend 0.0000000000000000e+00 + interp 4.3104795092031828e-01:4.3104364044080912e-01:1.6989220529692328e-01:2.6613433916544682e-01:1.0104432894035360e+00:2.4240521220732236e-01:1.8837246793896987e+00:2.6656381908824911e-01:2.4254245798566338e+00:2.8757182125061770e-01:3.0241272228250202e+00:2.4066346553723569e-01:3.8708382464113815e+00 + CVs 20 + -2.9362228658260020e-01 2.0813029585279180e-01 -2.0213955406605372e-01 + -5.4663812204268669e-01 3.7461215610880327e-01 -3.6781577012826755e-01 + -7.8234494050503578e-01 5.2225457838096867e-01 -5.2013831853228065e-01 + -1.0122985865495930e+00 6.6471039122260112e-01 -6.7042726652032036e-01 + -1.2349625036736942e+00 8.0354965410589707e-01 -8.2440489332919487e-01 + -1.4472146241820081e+00 9.3850531268646575e-01 -9.8861245225668903e-01 + -1.6530166261980268e+00 1.0760148857767979e+00 -1.1665184839952578e+00 + -1.8613127860548979e+00 1.2260920695131601e+00 -1.3621596857140585e+00 + -2.0719321165146205e+00 1.3832292110641409e+00 -1.5874443084229197e+00 + -2.2755930734018257e+00 1.5229260342127295e+00 -1.8545314568612681e+00 + -2.4758425696467037e+00 1.6148120647893389e+00 -2.1621594504926476e+00 + -2.6873250272806248e+00 1.6312602721308738e+00 -2.4952036854725481e+00 + -2.9033835681286586e+00 1.5600320419486100e+00 -2.8367991168559734e+00 + -3.0942196574431913e+00 1.4095251086909517e+00 -3.1763980449522662e+00 + -3.2461555107421161e+00 1.2003226427892693e+00 -3.5054612989584593e+00 + -3.3766541780077430e+00 9.5845411463287533e-01 -3.8120272905939845e+00 + -3.4981444513313695e+00 6.9994720212081374e-01 -4.0760743913981345e+00 + -3.5960376313375435e+00 4.0336087634318529e-01 -4.2645279872706974e+00 + -3.6622167465220992e+00 -5.0801459469346444e-02 -4.2870121391809191e+00 + id 14941 + loc 6.2460385262966156e-02 8.7868982553482056e-01 394 + blend 0.0000000000000000e+00 + interp 5.1858311377955801e-01:4.5120021329236654e-01:2.7332160271229833e-01:5.1857792794842028e-01:9.9534770302246400e-01:2.4192956800701840e-01:1.4563139225291546e+00:3.1207257360551877e-01:2.5119602035612978e+00:3.2577376168512651e-01:3.0187454083513083e+00:2.6783616827192142e-01:3.9151008361956152e+00 + CVs 20 + -2.6430424275761627e-01 2.3994114051019769e-01 -1.2421827458707341e-01 + -5.1841535517480519e-01 4.9043263864605724e-01 -2.6120895204236827e-01 + -7.8072199734329473e-01 7.4922816091395061e-01 -3.9128699583243437e-01 + -1.0612112578626576e+00 1.0052450492976179e+00 -5.1013339723610573e-01 + -1.3645166782670404e+00 1.2405627596638407e+00 -6.2558942021962372e-01 + -1.6912803891365860e+00 1.4314792410592931e+00 -7.4963001639629989e-01 + -2.0361720500861988e+00 1.5542165434875064e+00 -8.9050046560549345e-01 + -2.3876044892906085e+00 1.5926655586198002e+00 -1.0445383480756303e+00 + -2.7296798871254637e+00 1.5426393278372108e+00 -1.2011976727816960e+00 + -3.0491514802703921e+00 1.4128844425789056e+00 -1.3508735841327815e+00 + -3.3403104823498730e+00 1.2206770513391845e+00 -1.4889171834381476e+00 + -3.6025626408604752e+00 9.8459724662913106e-01 -1.6162887747585457e+00 + -3.8333778002900787e+00 7.2163336633980024e-01 -1.7355055420513601e+00 + -4.0268392423623931e+00 4.4879121533347544e-01 -1.8444699860460032e+00 + -4.1900870272842790e+00 1.7261389440764274e-01 -1.9516404370353237e+00 + -4.3576246089979955e+00 -1.3746821237460471e-01 -2.1120983473752517e+00 + -4.5836297390259633e+00 -4.9374285324203826e-01 -2.4531595911215005e+00 + -4.8387639420800239e+00 -7.0606260985447511e-01 -2.9637354635307576e+00 + -4.9207280087362761e+00 -7.4030333916163205e-01 -3.1423930705769081e+00 + id 14942 + loc 6.0033339262008667e-01 2.6440900564193726e-01 394 + blend 0.0000000000000000e+00 + interp 2.7283327014336833e-01:2.7283054181066690e-01:1.2721777693214376e-01:2.4536820682195276e-01:1.0807458994385002e+00:2.6621201499748226e-01:2.0680864249332660e+00:2.6134929858940653e-01:3.3392341096160267e+00 + CVs 20 + 9.5974399539287769e-02 2.1092249561085152e-01 2.5849173462292863e-01 + 2.3116372673916838e-01 4.0533343992163368e-01 4.8241077052944842e-01 + 3.7865534585668914e-01 5.7964560836271228e-01 6.8612418547775333e-01 + 5.2820077654097131e-01 7.4050131727677115e-01 8.7857039196941678e-01 + 6.7293545982983705e-01 8.9662039230818880e-01 1.0592966276325531e+00 + 8.0632562352069470e-01 1.0550852259741581e+00 1.2306913539204074e+00 + 9.3196605500301999e-01 1.2161755002094972e+00 1.4011458613604122e+00 + 1.0552456151593814e+00 1.3761716702447173e+00 1.5826938187489972e+00 + 1.1726767997572418e+00 1.5322786432933899e+00 1.7882433132412427e+00 + 1.2772070832017843e+00 1.6819725442058497e+00 2.0279715411097086e+00 + 1.3706126150592364e+00 1.8196146150201642e+00 2.3038879305144500e+00 + 1.4633544962937244e+00 1.9287257942086042e+00 2.6153256711099360e+00 + 1.5607130074697610e+00 1.9493606726838881e+00 2.9641104239201326e+00 + 1.6563742840113420e+00 1.7911740637337614e+00 3.3270620149929870e+00 + 1.7536957450688546e+00 1.4498951959281334e+00 3.6821594415443402e+00 + 1.8761769209844732e+00 1.0144960640883105e+00 4.0562483856008864e+00 + 2.0626016776551346e+00 5.8437917249216120e-01 4.4669318300902159e+00 + 2.3492192639763529e+00 2.3809956873031135e-01 4.8650687877612446e+00 + 2.6652012625246480e+00 2.0900252823550680e-02 5.1696101181767027e+00 + id 14943 + loc 5.0127106904983521e-01 1.3389211893081665e-01 394 + blend 0.0000000000000000e+00 + interp 4.1040032746486993e-01:3.3739867370157145e-01:5.2103107727037745e-01:2.6240637658675542e-01:1.1489202928508069e+00:4.1039622346159532e-01:1.9063096869224316e+00:2.7530584652172629e-01:2.5194567372236287e+00:2.3850090955727835e-01:3.7866514018290491e+00 + CVs 20 + 2.3563999433371968e-01 2.7465075330890881e-01 1.8595675681706852e-01 + 4.9241348170826738e-01 5.3482674101224781e-01 3.4581561733921712e-01 + 7.5116063048610260e-01 7.8454536348830906e-01 5.0021228775435289e-01 + 1.0011191261241019e+00 1.0294971024346151e+00 6.6388016487646773e-01 + 1.2328918461820697e+00 1.2669211691108111e+00 8.4702055561835654e-01 + 1.4409624132448098e+00 1.4843533826746043e+00 1.0566349724323663e+00 + 1.6246910645957970e+00 1.6665857422547621e+00 1.2941901672958998e+00 + 1.7818379578637404e+00 1.8025193737261009e+00 1.5524096999133865e+00 + 1.9073282756529657e+00 1.8894353125726946e+00 1.8166306173353250e+00 + 1.9977674927033080e+00 1.9348107327344795e+00 2.0704340597796449e+00 + 2.0553385971109468e+00 1.9566150256481172e+00 2.2989879752026940e+00 + 2.0895918225781203e+00 1.9785636325676512e+00 2.4969457016982863e+00 + 2.1150755313453873e+00 1.9937415556518427e+00 2.6798330532487422e+00 + 2.1353264431833829e+00 1.9291227253878318e+00 2.8508790238010757e+00 + 2.1421729907055149e+00 1.7282721887059125e+00 2.9863849395966384e+00 + 2.1301421526562772e+00 1.4063918005541778e+00 3.1078744559571314e+00 + 2.0971315760306135e+00 1.0146741312658141e+00 3.2798000360424648e+00 + 2.0886983715580563e+00 6.4699834220571484e-01 3.5012307743916109e+00 + 2.2144763527295899e+00 5.3526263418263298e-01 3.5691476475735322e+00 + id 14944 + loc 9.6714299917221069e-01 3.0009996891021729e-01 394 + blend 0.0000000000000000e+00 + interp 5.5937416383588767e-01:5.5936857009424934e-01:2.5656962413420381e-01:4.7502409213763552e-01:7.1221935323431551e-01:3.3988950360675302e-01:1.3723919870664947e+00:2.2732346741792125e-01:1.9607752367770264e+00:3.6574138488745489e-01:2.5070168554848058e+00:2.3075053318794259e-01:3.5821749823176274e+00 + CVs 20 + 3.3075913187016825e-01 2.4412050807198735e-01 2.8431850900362116e-01 + 6.0152569915458043e-01 4.3349479372817579e-01 5.2264953108323442e-01 + 8.5509963299450842e-01 5.9784763589282675e-01 7.4438319752419946e-01 + 1.1119419902263048e+00 7.5446985796643029e-01 9.6248294131690226e-01 + 1.3736573372563818e+00 9.0562361002639458e-01 1.1805484418845027e+00 + 1.6437986683568369e+00 1.0526380543334461e+00 1.4054527243997166e+00 + 1.9297264780343109e+00 1.1981502604703471e+00 1.6419586709085301e+00 + 2.2398273034612846e+00 1.3430480630373489e+00 1.8946923734894376e+00 + 2.5774970100429346e+00 1.4764723867257210e+00 2.1743089201415544e+00 + 2.9382464960585315e+00 1.5749403190712714e+00 2.4887748796022975e+00 + 3.3155723127333019e+00 1.6155684354038593e+00 2.8289823691049585e+00 + 3.7033903737698113e+00 1.5865821599170125e+00 3.1732832338529939e+00 + 4.0883522088022355e+00 1.4905698925372546e+00 3.5042412055723942e+00 + 4.4485261097417608e+00 1.3434531147812363e+00 3.8120293872252913e+00 + 4.7697436772972930e+00 1.1671728660671157e+00 4.0909338461336837e+00 + 5.0625470823547234e+00 9.7524805367645628e-01 4.3440031829989767e+00 + 5.3504919335803294e+00 7.6569093002076150e-01 4.5766365157159168e+00 + 5.6338999955643638e+00 5.3504983285176477e-01 4.7742717567869200e+00 + 5.8188424299323724e+00 3.2577831272604785e-01 4.8264327184857967e+00 + id 14945 + loc 1.9225710630416870e-01 3.2007020711898804e-01 394 + blend 0.0000000000000000e+00 + interp 4.0997120152570360e-01:2.7986806948041304e-01:7.7563182256360852e-01:3.1043004496818871e-01:1.3814742742853563e+00:3.7875168290969952e-01:1.9867539054328061e+00:2.5829666343337282e-01:2.6873691307296608e+00:4.0996710181368834e-01:3.0548396533720932e+00:3.1160557857206939e-01:3.7375935295048239e+00 + CVs 20 + -1.3324252103554596e-01 1.8891267640807757e-01 3.0963506280772446e-01 + -2.7073601153039512e-01 3.6101772726405146e-01 5.9738929558751419e-01 + -4.0998083118968365e-01 5.3401269703256127e-01 8.9205473364901755e-01 + -5.4761789532057459e-01 7.1873785647505761e-01 1.2087346095668083e+00 + -6.8480843611244946e-01 9.1234626111605266e-01 1.5419002538927662e+00 + -8.2604936984503607e-01 1.1012266835400872e+00 1.8835228092459337e+00 + -9.7805671366410984e-01 1.2658230591922641e+00 2.2286633989980782e+00 + -1.1425363090547349e+00 1.3887482676234368e+00 2.5768445072784081e+00 + -1.3102676095453152e+00 1.4543963883717832e+00 2.9254776311404327e+00 + -1.4658246546357221e+00 1.4410256306911928e+00 3.2581222254089335e+00 + -1.5905037154270181e+00 1.3274675722187570e+00 3.5402664873254532e+00 + -1.6545050118855111e+00 1.1173637526560627e+00 3.7360505653149350e+00 + -1.6311427331902806e+00 8.5088684298179551e-01 3.8361203548712299e+00 + -1.5419203555861434e+00 5.6879554576559421e-01 3.8779605859970832e+00 + -1.4425962562610017e+00 2.6656813856526296e-01 3.9234170165667610e+00 + -1.3540262541571944e+00 -6.5062989779492986e-02 4.0227376141973554e+00 + -1.2657160389794604e+00 -3.9663068638848231e-01 4.2341686379752845e+00 + -1.1652068987789899e+00 -6.7922155884586699e-01 4.5682614732309679e+00 + -1.1476889188614146e+00 -1.0412959778140629e+00 4.8317583375791315e+00 + id 14946 + loc 1.9470220804214478e-01 1.3390074670314789e-01 394 + blend 0.0000000000000000e+00 + interp 5.4056867390083985e-01:3.7225098671328488e-01:2.6795528050843842e-02:4.9259419668958970e-01:5.6115470148154811e-01:2.8861961206815667e-01:1.1374401194709154e+00:2.6648007847770006e-01:2.1509757852412816e+00:5.4056326821410083e-01:2.9611008948805742e+00:3.2185027975853414e-01:3.6621102641967616e+00 + CVs 20 + -1.1798067004187646e-01 1.7831247617869539e-01 1.9846000205176276e-01 + -2.3690562904489587e-01 3.5507135608581414e-01 4.1166961879139463e-01 + -3.4590799808549522e-01 5.2139737853232737e-01 6.2486902891460461e-01 + -4.3676792274582932e-01 6.7730160351300683e-01 8.2963909825417081e-01 + -5.0421456477687221e-01 8.2816447168556895e-01 1.0163050702356400e+00 + -5.4462054665635562e-01 9.8092551236067171e-01 1.1751692158877245e+00 + -5.6231719952414738e-01 1.1439256704712686e+00 1.3120187959561438e+00 + -5.7017531187657233e-01 1.3229754238113001e+00 1.4417823991663321e+00 + -5.8214287962305766e-01 1.5223038308238626e+00 1.5721278633588867e+00 + -6.1272504825120655e-01 1.7473211579509136e+00 1.6994582000002501e+00 + -6.7566497222360755e-01 2.0058406311161274e+00 1.8200481095023349e+00 + -7.8711777924291970e-01 2.3039231850683608e+00 1.9457301220724377e+00 + -9.7076421515751243e-01 2.6042850526456771e+00 2.1008187828378562e+00 + -1.2086459389365434e+00 2.7794342799402605e+00 2.2798674522602171e+00 + -1.4104160523849834e+00 2.7164359715813213e+00 2.4331980711710712e+00 + -1.5399569026284128e+00 2.4350130484909616e+00 2.5311980839782833e+00 + -1.6621049247979474e+00 2.0239728398086791e+00 2.5648979779486383e+00 + -1.8331711207588923e+00 1.5782096836474644e+00 2.5674260206542812e+00 + -1.9193468230394966e+00 1.3382775126332653e+00 2.7921999593005431e+00 + id 14947 + loc 3.9770340919494629e-01 6.3526237010955811e-01 394 + blend 0.0000000000000000e+00 + interp 3.9236273700942914e-01:2.8815479396189475e-01:5.3285211515778808e-01:3.9235881338205908e-01:1.0810886989957320e+00:2.6387195247784534e-01:1.9883080981824341e+00:2.5733197226422949e-01:3.0076512199851209e+00:3.8876255689774919e-01:3.8122984879339112e+00 + CVs 20 + -1.7369240634422073e-01 2.1630038311476565e-01 -2.6440980361541166e-01 + -3.3982125184188838e-01 4.4080427166339742e-01 -5.2107773842259353e-01 + -4.9799424945873683e-01 6.8582895322520676e-01 -7.7015302015794473e-01 + -6.4614000980275310e-01 9.5236928459275916e-01 -1.0103096680804828e+00 + -7.8223745461577576e-01 1.2298484587794301e+00 -1.2418755091670268e+00 + -9.0834407938707540e-01 1.5024963717805060e+00 -1.4708232737902622e+00 + -1.0303499211574270e+00 1.7571684042946307e+00 -1.7039300907079054e+00 + -1.1558627519825200e+00 1.9879827298591601e+00 -1.9420911404023888e+00 + -1.2891126755498257e+00 2.1907229882806347e+00 -2.1806526762549336e+00 + -1.4289006952631167e+00 2.3599273433138026e+00 -2.4159583849327881e+00 + -1.5767263511334981e+00 2.4935769245904416e+00 -2.6551090284713039e+00 + -1.7387174083369807e+00 2.5861448431000302e+00 -2.9182062722837729e+00 + -1.9133953526982110e+00 2.6210456493103300e+00 -3.2138738116205632e+00 + -2.0866253150523026e+00 2.5900888455616222e+00 -3.5125147581561555e+00 + -2.2361366727003791e+00 2.5133715394042273e+00 -3.7703885906583681e+00 + -2.3191657105038024e+00 2.4201007857579331e+00 -3.9706925494641161e+00 + -2.2771180389064800e+00 2.3170824756567558e+00 -4.1249780264764526e+00 + -2.1613229873345308e+00 2.1899765088805840e+00 -4.2511621788722778e+00 + -2.2872845697040094e+00 2.1678677993142044e+00 -4.2796165361924627e+00 + id 14948 + loc 5.2121776342391968e-01 4.8546397686004639e-01 394 + blend 0.0000000000000000e+00 + interp 3.2857349911009265e-01:3.0504594828858705e-01:5.2725355223831194e-01:2.4764476344446970e-01:1.8360159192390924e+00:3.2857021337510156e-01:2.8633821338384773e+00:2.4396270810849760e-01:3.7163227939104773e+00 + CVs 20 + 3.5150398038383612e-01 2.8207503756753571e-01 2.1625403492338000e-01 + 6.8401323741607545e-01 5.4396168097966036e-01 4.0102419117564392e-01 + 1.0078672820641770e+00 8.1502728651157430e-01 5.7137612649393099e-01 + 1.3228081730210026e+00 1.1118423524495200e+00 7.3899551940679820e-01 + 1.6239352073035864e+00 1.4317728761595059e+00 9.1547368030059795e-01 + 1.9150275883041616e+00 1.7602000394450352e+00 1.1192600957075436e+00 + 2.2032107880112406e+00 2.0769171890456959e+00 1.3636164850612194e+00 + 2.4939013517720441e+00 2.3638787287745426e+00 1.6473226552997668e+00 + 2.7983974460786696e+00 2.6035922040074357e+00 1.9783191063585737e+00 + 3.1314030017240766e+00 2.7597941351921742e+00 2.3859784515299913e+00 + 3.4866714220635746e+00 2.7742726715116373e+00 2.8779900321879150e+00 + 3.8322915095061640e+00 2.6041956123636547e+00 3.4093577698363542e+00 + 4.1331814544920631e+00 2.2582484281653454e+00 3.9139606058236867e+00 + 4.3686439764708869e+00 1.8148284396452992e+00 4.3469814544951166e+00 + 4.5587021012389197e+00 1.3910806252697747e+00 4.7026262868835795e+00 + 4.7598689337256790e+00 1.1079609612350678e+00 4.9805439220347711e+00 + 4.9966936823663035e+00 1.0390146333135859e+00 5.1856349905588868e+00 + 5.2332805067237906e+00 1.0652059355964814e+00 5.3784995726460476e+00 + 5.4808420658065549e+00 8.5115813290237075e-01 5.6994573437940552e+00 + id 14949 + loc 8.9936655759811401e-01 8.2062798738479614e-01 394 + blend 0.0000000000000000e+00 + interp 3.7568085048620020e-01:3.7567709367769536e-01:9.1186237470519971e-01:2.4456787550039294e-01:1.4811362178853593e+00:2.6414459614149638e-01:2.4000436415750594e+00:3.2203044998427027e-01:2.9826632182903237e+00:2.5098754953806884e-01:3.9787666478020665e+00 + CVs 20 + -1.7115708801169668e-01 2.0308184307166155e-01 -3.4561371465064827e-01 + -3.3476576983296258e-01 3.8649374215403165e-01 -6.5609805203128102e-01 + -4.8324357570028581e-01 5.6255779176283260e-01 -9.5252541397045354e-01 + -6.1758194550900458e-01 7.3667734204233493e-01 -1.2447104109067009e+00 + -7.4233287377180313e-01 9.0919780322726695e-01 -1.5358444024004783e+00 + -8.6507287744379668e-01 1.0813814496591039e+00 -1.8293566482209733e+00 + -9.9423168766771286e-01 1.2529909548353693e+00 -2.1279187885336528e+00 + -1.1373968134310983e+00 1.4182830707193546e+00 -2.4387988346596980e+00 + -1.3013112903829149e+00 1.5630628547988881e+00 -2.7749036382242140e+00 + -1.4930888865964320e+00 1.6671365400331790e+00 -3.1420315322651460e+00 + -1.7192421338997845e+00 1.7117707451063351e+00 -3.5297788047257876e+00 + -1.9795098133844009e+00 1.6846229362637812e+00 -3.9205598739587977e+00 + -2.2662332027085705e+00 1.5822215141062292e+00 -4.2997160192861212e+00 + -2.5709308663697863e+00 1.4085401239349831e+00 -4.6501009842446024e+00 + -2.8915573901745315e+00 1.1709520900530856e+00 -4.9494737832239437e+00 + -3.2284344322710732e+00 8.6712464669533285e-01 -5.1782376172937106e+00 + -3.5660601294786316e+00 4.9229935259140989e-01 -5.3120673370547582e+00 + -3.8712462037816970e+00 7.9782723959528123e-02 -5.3323443177270065e+00 + -4.1311454231123594e+00 -2.9882228600783334e-01 -5.2978003019628872e+00 + id 14950 + loc 9.6127271652221680e-02 9.9208968877792358e-01 394 + blend 0.0000000000000000e+00 + interp 4.2205831532308158e-01:4.2205409473992839e-01:4.9291900272208189e-01:2.1147356277429449e-01:1.2615378850859740e+00:3.7556162578113306e-01:1.9718862569252680e+00:3.6649958082432271e-01:2.6861195031963012e+00:3.7387513429169095e-01:3.0951175355696980e+00:2.6478794158842850e-01:3.8428768760770389e+00 + CVs 20 + -2.4840128285391372e-01 2.1584221553656116e-01 -8.7869518860740445e-02 + -4.8816544305427778e-01 4.4041833921720536e-01 -2.0057324275845945e-01 + -7.2245059170229076e-01 6.7056317438676472e-01 -3.3029218708623126e-01 + -9.5663511210163621e-01 9.0088793409267010e-01 -4.7407778882542451e-01 + -1.1967647052185220e+00 1.1232743654160819e+00 -6.3447817191994316e-01 + -1.4472764062372341e+00 1.3244783728124598e+00 -8.1412626331144722e-01 + -1.7110988599797698e+00 1.4889111140185445e+00 -1.0154394621059317e+00 + -1.9918369899623747e+00 1.6022531079747924e+00 -1.2401433471668417e+00 + -2.2904877360214728e+00 1.6513406781601674e+00 -1.4869126697437445e+00 + -2.6048236180391822e+00 1.6272609615184890e+00 -1.7515740080762332e+00 + -2.9300912327690787e+00 1.5291818062292584e+00 -2.0286100069555397e+00 + -3.2569088001843167e+00 1.3665445025429162e+00 -2.3147073479660345e+00 + -3.5723202758917809e+00 1.1552165480995003e+00 -2.6140182631046409e+00 + -3.8668633266823695e+00 9.0129365819329155e-01 -2.9327953521439065e+00 + -4.1383449034500543e+00 6.0775697212893287e-01 -3.2692256990267738e+00 + -4.3918767725598205e+00 3.5129651777680704e-01 -3.6308095312805833e+00 + -4.6247584989926365e+00 3.7396361171860781e-01 -4.0314209149918865e+00 + -4.7752962869985875e+00 8.8754016352049936e-01 -4.2874670196782265e+00 + -5.0284807653708876e+00 9.4144244814570621e-01 -4.6437444601820248e+00 + id 14951 + loc 6.5452784299850464e-02 7.4348121881484985e-01 394 + blend 0.0000000000000000e+00 + interp 4.0228395960743346e-01:4.0227993676783741e-01:2.5135656158056019e-01:2.7472091263286863e-01:1.3774566939801096e+00:3.0978820669380863e-01:2.1012844292136830e+00:2.7496950262456732e-01:2.8927910939261832e+00:2.5891359808616776e-01:3.4689071097739688e+00 + CVs 20 + -1.8304948152461134e-01 1.4115468506413761e-01 -2.5827453687309473e-02 + -3.6143551277801067e-01 3.0116759933687837e-01 -5.6941018412189993e-02 + -5.2151074994666058e-01 4.7350907348736193e-01 -7.6567771719622257e-02 + -6.5929540110015994e-01 6.6223246592717033e-01 -7.4307527101510229e-02 + -7.7986779503889359e-01 8.8084464570998477e-01 -4.6042992364272561e-02 + -8.9440955453117499e-01 1.1480290423183312e+00 6.0859997993075177e-03 + -1.0116203720363137e+00 1.4670947805385621e+00 6.1989101560161852e-02 + -1.1312967776531875e+00 1.8179978454375956e+00 9.5769733029819171e-02 + -1.2689183328637883e+00 2.2017090956706538e+00 9.5262808624363760e-02 + -1.4841094180161529e+00 2.6608547976419969e+00 3.3730341205286396e-02 + -1.8384964210438430e+00 3.1986863663891336e+00 -1.7511132559442222e-01 + -2.3021517099983009e+00 3.6974100197073256e+00 -6.2407172414840439e-01 + -2.7712208892154031e+00 4.0028092006178140e+00 -1.2845329274246713e+00 + -3.1585035882989398e+00 4.0565015977994570e+00 -1.9944637473208666e+00 + -3.4179585541955477e+00 3.9490945673897619e+00 -2.5894557481543066e+00 + -3.5165898487895619e+00 3.8433105327871555e+00 -3.0101042531945605e+00 + -3.3912325873900340e+00 3.8671150473808091e+00 -3.2532454973123714e+00 + -3.0846115917068260e+00 3.9530731159269927e+00 -3.4059925967501457e+00 + -3.3134429229635356e+00 3.8238790166060168e+00 -3.6277221731858953e+00 + id 14952 + loc 5.8331962674856186e-02 2.2420148551464081e-01 394 + blend 0.0000000000000000e+00 + interp 3.9690026803186107e-01:2.7886373684991367e-01:7.5835421168209072e-01:3.3004701002665093e-01:1.3171109644843357e+00:1.9891081443536543e-01:2.1221747250861145e+00:3.9689629902918078e-01:3.0133079451888767e+00:3.0344745853412453e-01:3.5853024776813465e+00 + CVs 20 + -9.6957075235616738e-02 2.2568664962104612e-01 1.9027756805127605e-01 + -2.2011967062448964e-01 4.9917154386290624e-01 4.0812035427223137e-01 + -3.5444604351051956e-01 8.0327509683179554e-01 6.2160219994443278e-01 + -5.0006758815471841e-01 1.1262972820068473e+00 8.1737968428014596e-01 + -6.6841659095596817e-01 1.4585685932419323e+00 9.9206316401266204e-01 + -8.7114093039951601e-01 1.7868867089541749e+00 1.1481126131804940e+00 + -1.1167481851598291e+00 2.0978554157003200e+00 1.2932483412872602e+00 + -1.4072222722601442e+00 2.3779141026074861e+00 1.4335997464194401e+00 + -1.7398255066364952e+00 2.6111623285030952e+00 1.5740884355414371e+00 + -2.1107622225808340e+00 2.7761772698759097e+00 1.7239371408305968e+00 + -2.5147302426591143e+00 2.8389664192277291e+00 1.8950827103245544e+00 + -2.9325844056681625e+00 2.7548402992108358e+00 2.0893997185497293e+00 + -3.3169171538472488e+00 2.5279606659669609e+00 2.2900555210467273e+00 + -3.6404695025502680e+00 2.2752132062138428e+00 2.4877668596473428e+00 + -3.9215391104567652e+00 2.1182862436010543e+00 2.6954827559444925e+00 + -4.1557644018061701e+00 2.0924464911576699e+00 2.9249710720858517e+00 + -4.3174960404932259e+00 2.1681288689930822e+00 3.1790179020891465e+00 + -4.4148608212270517e+00 2.2857023046896847e+00 3.4332954019601667e+00 + -4.5451114025262234e+00 2.3332009694516791e+00 3.7026022872228141e+00 + id 14953 + loc 1.4361616969108582e-01 5.2919322252273560e-01 394 + blend 0.0000000000000000e+00 + interp 3.9242668119233270e-01:2.9404572523121947e-01:2.8017524172130870e-01:3.9242275692552081e-01:1.0465219520727247e+00:2.7530898873591497e-01:2.0049517559980528e+00:2.8427474627606758e-01:2.7921792797718195e+00:3.4001969580437674e-01:3.2537175154738454e+00 + CVs 20 + -2.4319418420485084e-01 1.7176508018912698e-01 -8.9606435676190532e-02 + -4.7769344794844060e-01 3.2151833232195526e-01 -1.9545833884953923e-01 + -7.0895771816936759e-01 4.5824947169808727e-01 -3.0857456570823216e-01 + -9.3976579664567716e-01 5.9048357848904265e-01 -4.2214962133381018e-01 + -1.1630938621199136e+00 7.1885264245116542e-01 -5.3038297677772905e-01 + -1.3697061191400604e+00 8.3977164861203757e-01 -6.2612873767417931e-01 + -1.5505374924431550e+00 9.4700622858038608e-01 -7.1017972588113265e-01 + -1.6991250135735880e+00 1.0343101616219341e+00 -7.9176140180096632e-01 + -1.8143615044062587e+00 1.1062388241010481e+00 -8.6373226592829111e-01 + -1.8969938759715501e+00 1.1903607130825309e+00 -8.9300194973974167e-01 + -1.9521765648320939e+00 1.3260262994384013e+00 -8.6104642226869921e-01 + -1.9910901854357621e+00 1.5346892298285244e+00 -8.0707462451542611e-01 + -2.0304025263943362e+00 1.7786451902211524e+00 -8.0413605593985205e-01 + -2.0698860770192233e+00 1.9435815247130699e+00 -8.9372216509747160e-01 + -2.0692222735227506e+00 1.9385061138588302e+00 -1.0575377139674487e+00 + -1.9890244849700254e+00 1.7366607624502095e+00 -1.2766146736804638e+00 + -1.8800084755344697e+00 1.3240124569571767e+00 -1.5461102614858819e+00 + -1.9079205432825805e+00 8.0327487798736585e-01 -1.8232276223209478e+00 + -2.1158491716959973e+00 4.8582571827262799e-01 -2.0127538799898916e+00 + id 14954 + loc 2.2548127174377441e-01 9.5804840326309204e-01 394 + blend 0.0000000000000000e+00 + interp 3.7387887308042173e-01:2.8138092980431340e-01:7.9886796157381967e-01:3.7387513429169095e-01:1.0989368737169523e+00:3.2478393353358925e-01:1.9763529976025305e+00:3.0065530862863771e-01:2.4110151985922941e+00:2.5914099894591353e-01:2.9992984206437345e+00:3.1627087590534098e-01:3.8254291639985256e+00 + CVs 20 + -2.6557563046747712e-01 2.2934876830765943e-01 -1.0481127584184360e-01 + -5.1501698674847174e-01 4.6757267527452118e-01 -2.2451977872027024e-01 + -7.5481180825681693e-01 7.1276691424069483e-01 -3.5778482733744382e-01 + -9.8756828712098954e-01 9.5904832203138901e-01 -5.0730040772273854e-01 + -1.2139796049794833e+00 1.1985538247480449e+00 -6.7833407335163221e-01 + -1.4366362214207360e+00 1.4228290377672854e+00 -8.7631916247564579e-01 + -1.6614171005882543e+00 1.6234369010057259e+00 -1.1070529179261388e+00 + -1.8955616565051632e+00 1.7918648661362981e+00 -1.3745210813767699e+00 + -2.1440453204525984e+00 1.9183464831718304e+00 -1.6783782918787089e+00 + -2.4068309431606103e+00 1.9939044382583515e+00 -2.0130424329824135e+00 + -2.6766700981090663e+00 2.0167605051198172e+00 -2.3647308769155777e+00 + -2.9408451779026477e+00 1.9975567261851648e+00 -2.7137742182462952e+00 + -3.1950453729473440e+00 1.9485298965115971e+00 -3.0543537989579894e+00 + -3.4451704827433955e+00 1.8645575651193433e+00 -3.4007197718280144e+00 + -3.6706902925071181e+00 1.7565231052784149e+00 -3.7247262902683622e+00 + -3.8045539939102322e+00 1.7259507858259697e+00 -3.8739251647382780e+00 + -3.7769089699021423e+00 1.8157154861287306e+00 -3.5953859410044910e+00 + -3.7110788912041484e+00 1.7655023284941245e+00 -3.1369288086936074e+00 + -3.8685927390577901e+00 1.9043667386868404e+00 -3.4322307150605456e+00 + id 14955 + loc 1.5636412799358368e-01 7.6192075014114380e-01 394 + blend 0.0000000000000000e+00 + interp 4.4289969751943670e-01:2.7660362942250855e-01:6.7816158923512893e-02:2.7496950262456732e-01:8.9493921601685789e-01:2.5973226143739714e-01:1.6182521355569475e+00:4.2121404246157257e-01:2.0430656636797089e+00:2.6581383467457576e-01:2.9545488339889454e+00:4.4289526852246153e-01:3.6400810906642267e+00 + CVs 20 + -1.2850071737723237e-01 1.9330889621729289e-01 -1.7121986602372707e-01 + -2.5708971081758375e-01 4.1135721339143888e-01 -3.3674793534920966e-01 + -3.7770266955663367e-01 6.5266092732959924e-01 -4.8148585951991840e-01 + -4.8885768174889543e-01 9.1258065865830451e-01 -5.9865036487109236e-01 + -5.9554382593424915e-01 1.1869024429185600e+00 -6.9158283898767059e-01 + -7.0541840579935544e-01 1.4718302151876270e+00 -7.7181985920464691e-01 + -8.2715901347839471e-01 1.7620923110049460e+00 -8.5712992686465872e-01 + -9.6721249808941956e-01 2.0478718968194038e+00 -9.6060539675896550e-01 + -1.1319599863124696e+00 2.3217914388202203e+00 -1.0853931546309841e+00 + -1.3340138400191108e+00 2.5844945421908396e+00 -1.2413744545969010e+00 + -1.5851950605160221e+00 2.8263887266347134e+00 -1.4597540141791527e+00 + -1.8748865725724346e+00 3.0050603790470394e+00 -1.7704263783188887e+00 + -2.1712177018427017e+00 3.0673596364625788e+00 -2.1587275072339911e+00 + -2.4446793071559569e+00 2.9952009593846776e+00 -2.5587106193952063e+00 + -2.6807707053641932e+00 2.8326628701933259e+00 -2.8896429871112526e+00 + -2.8759612496736580e+00 2.6637241343896179e+00 -3.1096202999414491e+00 + -2.9994125805027405e+00 2.5883882666306564e+00 -3.1980435606116737e+00 + -2.9813582489565529e+00 2.6569308362385513e+00 -3.1653170766653913e+00 + -3.1818590834455733e+00 2.5894373563923345e+00 -3.1601758818635401e+00 + id 14956 + loc 9.4154924154281616e-01 9.4437658786773682e-01 394 + blend 0.0000000000000000e+00 + interp 4.1114931703475843e-01:2.5998540783766072e-01:1.0007558562694991e+00:3.2700048363266582e-01:1.7760023297946859e+00:4.1114520554158812e-01:2.0396737590021736e+00:3.2680966480997703e-01:2.7011438605444691e+00:2.9987220483045390e-01:3.1708008389886779e+00:2.6088021092042735e-01:3.9902388820001069e+00 + CVs 20 + -2.3659379342520551e-01 1.0103199128659927e-01 -1.2566191059474630e-01 + -4.6871965992274545e-01 2.2219760073448491e-01 -2.8293864057063922e-01 + -6.9842834446035518e-01 3.5337404222161828e-01 -4.5676060567855259e-01 + -9.2713799564155253e-01 4.8791803347996765e-01 -6.4153079059362694e-01 + -1.1521410083808439e+00 6.2095184571537432e-01 -8.3722132506555424e-01 + -1.3722995743018611e+00 7.4824457337420403e-01 -1.0426383601206179e+00 + -1.5882215934972095e+00 8.6705336012344880e-01 -1.2575943921245114e+00 + -1.7997495869543694e+00 9.7147086236443259e-01 -1.4847784862697948e+00 + -2.0030744875135680e+00 1.0489239171608338e+00 -1.7253451951230971e+00 + -2.1942190899208907e+00 1.0842214178971983e+00 -1.9713938323007163e+00 + -2.3744335465897781e+00 1.0664573380158242e+00 -2.2094999985105908e+00 + -2.5485858260458860e+00 9.9176707595944369e-01 -2.4329095531152634e+00 + -2.7192757184261467e+00 8.6198627828058205e-01 -2.6417041112465247e+00 + -2.8857866646442316e+00 6.8321571516371971e-01 -2.8344221353036736e+00 + -3.0470079439615354e+00 4.6254975624357364e-01 -3.0075622043031673e+00 + -3.1993260697252479e+00 2.0411762190316329e-01 -3.1589174745704685e+00 + -3.3341643960904270e+00 -8.8631756726997857e-02 -3.2885372365959151e+00 + -3.4470758754290500e+00 -4.0658755509757927e-01 -3.4021625659738293e+00 + -3.5724984343917203e+00 -7.2448170925017163e-01 -3.5326142609192774e+00 + id 14957 + loc 5.8701407909393311e-01 7.9478991031646729e-01 394 + blend 0.0000000000000000e+00 + interp 5.0135244526253808e-01:2.7499973622931190e-01:3.4592020383124378e-01:5.0134743173808549e-01:1.0089348242619958e+00:2.4505198616729687e-01:1.9052355302852964e+00:2.8205128869503920e-01:2.5920881058287493e+00:2.4832764754901498e-01:3.4163319067648108e+00 + CVs 20 + -2.4478488012027064e-01 1.2366117856502101e-01 -4.3860403978577392e-02 + -5.0218680009318728e-01 2.5905022805660466e-01 -9.7110766877242682e-02 + -7.6786978940784201e-01 4.0757331707898964e-01 -1.6382366677089519e-01 + -1.0364309317326017e+00 5.6934537983106437e-01 -2.5139880505373402e-01 + -1.2947954968757971e+00 7.3758068309609803e-01 -3.6577147225462747e-01 + -1.5296425492202339e+00 9.0496133180125793e-01 -5.0510081469022794e-01 + -1.7425527559280496e+00 1.0792508334455664e+00 -6.6582366976882912e-01 + -1.9427520823063651e+00 1.2715837762997886e+00 -8.5002371425367285e-01 + -2.1270184161739669e+00 1.4704465870398287e+00 -1.0622428085690119e+00 + -2.2805299407914355e+00 1.6518492441638000e+00 -1.3011991739105075e+00 + -2.4017503403455378e+00 1.8005739366828801e+00 -1.5638131843973184e+00 + -2.5020589822422155e+00 1.9063061068765359e+00 -1.8483279120769052e+00 + -2.5767215900170140e+00 1.9663138767994650e+00 -2.1479363714357111e+00 + -2.6044032398023456e+00 1.9911562963754177e+00 -2.4588096922754428e+00 + -2.5912638368988063e+00 1.9918570808306320e+00 -2.7938353641782747e+00 + -2.5931954728567277e+00 1.9706125520594269e+00 -3.1697632504813607e+00 + -2.6573684810317064e+00 1.9086384155043765e+00 -3.5730656033985913e+00 + -2.7525712336734323e+00 1.7568125186920633e+00 -3.9358417133264698e+00 + -2.7721833122971367e+00 1.4596318620204385e+00 -4.0834399662809195e+00 +endObject +endPatches diff --git a/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png b/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png new file mode 100644 index 0000000000..59054de0a2 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/StrandAlbedo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42c7f063e1e87aef6293e08b0b9e6bdf205fc2f79a8fb2cb70db03524ac547d3 +size 143015 diff --git a/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png b/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png new file mode 100644 index 0000000000..3210503ad1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/test_hair_basecolor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df138ab3b88ce7678370ae589c8e28741e33f6f9aa9fba9f6c28705b0f3a02e7 +size 3626 diff --git a/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png b/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png new file mode 100644 index 0000000000..3210503ad1 --- /dev/null +++ b/Gems/AtomTressFX/Assets/TestData/test_hair_skin_basecolor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df138ab3b88ce7678370ae589c8e28741e33f6f9aa9fba9f6c28705b0f3a02e7 +size 3626 diff --git a/Gems/AtomTressFX/CMakeLists.txt b/Gems/AtomTressFX/CMakeLists.txt index 7a325ca97e..3138eb1ea0 100644 --- a/Gems/AtomTressFX/CMakeLists.txt +++ b/Gems/AtomTressFX/CMakeLists.txt @@ -5,3 +5,157 @@ # SPDX-License-Identifier: Apache-2.0 OR MIT # # + +if(PAL_TRAIT_BUILD_HOST_TOOLS) + + # Declare ATOMTRESSFX_EDITOR only when tools pipeline is built + # This is in order to allow AzToolsFramework to properly link across + # platforms that support editor mode, while in the rest, not include + # this module and avoide compiling the editor components. + set_source_files_properties( + Code/HairModule.cpp + Code/Components/EditorHairComponent.h + Code/Components/EditorHairComponent.cpp + PROPERTIES + COMPILE_DEFINITIONS + ATOMTRESSFX_EDITOR + ) + + ly_add_target( + NAME AtomTressFX.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + AZ::AzToolsFramework + Gem::LmbrCentral + Gem::Atom_RHI.Public + Gem::Atom_RPI.Public + Gem::Atom_Feature_Common.Static + Gem::AtomLyIntegration_CommonFeatures.Static + Gem::EMotionFXStaticLib + ) + + ly_add_target( + NAME AtomTressFX ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} + NAMESPACE Gem + FILES_CMAKE + Hair_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code/AssetPipeline + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + AZ::AzToolsFramework + Gem::Atom_Utils.Static + Gem::EMotionFXStaticLib + Gem::AtomTressFX.Static + ) + +else() + + ly_add_target( + NAME AtomTressFX.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + Gem::LmbrCentral + Gem::Atom_RHI.Public + Gem::Atom_RPI.Public + Gem::Atom_Feature_Common.Static + Gem::AtomLyIntegration_CommonFeatures.Static + Gem::EMotionFXStaticLib + ) + + ly_add_target( + NAME AtomTressFX ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} + NAMESPACE Gem + FILES_CMAKE + Hair_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code/AssetPipeline + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + AZ::AzCore + Gem::Atom_Utils.Static + Gem::EMotionFXStaticLib + Gem::AtomTressFX.Static + ) +endif() + +# Clients and servers use the AtomTressFX module +ly_create_alias(NAME AtomTressFX.Clients NAMESPACE Gem TARGETS Gem::AtomTressFX) +ly_create_alias(NAME AtomTressFX.Servers NAMESPACE Gem TARGETS Gem::AtomTressFX) + +if(PAL_TRAIT_BUILD_HOST_TOOLS) + + ly_add_target( + NAME AtomTressFX.Builders.Static STATIC + NAMESPACE Gem + FILES_CMAKE + Hair_builders_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PUBLIC + AZ::AssetBuilderSDK + Gem::AtomTressFX.Static + ) + + ly_add_target( + NAME AtomTressFX.Builders GEM_MODULE + NAMESPACE Gem + FILES_CMAKE + Hair_builders_shared_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Code + External + External/Code/src + PUBLIC + Code/Include + BUILD_DEPENDENCIES + PRIVATE + Gem::AtomTressFX.Builders.Static + ) + + # builders and tools use the AtomTressFX.Builders and AtomTressFX modules + ly_create_alias(NAME AtomTressFX.Tools NAMESPACE Gem TARGETS Gem::AtomTressFX Gem::AtomTressFX.Builders) + +endif() diff --git a/Gems/AtomTressFX/Code/Assets/HairAsset.cpp b/Gems/AtomTressFX/Code/Assets/HairAsset.cpp new file mode 100644 index 0000000000..f863ad1daa --- /dev/null +++ b/Gems/AtomTressFX/Code/Assets/HairAsset.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairAssetHandler::HairAssetHandler() + : AzFramework::GenericAssetHandler(HairAsset::DisplayName, HairAsset::Group, HairAsset::Extension) + { + } + + Data::AssetHandler::LoadResult HairAssetHandler::LoadAssetData( + const Data::Asset& asset, AZStd::shared_ptr stream, + [[maybe_unused]]const Data::AssetFilterCB& assetLoadFilterCB) + { + HairAsset* assetData = asset.GetAs(); + assetData->m_tressFXAsset.reset(new AMD::TressFXAsset()); + if(assetData->m_tressFXAsset->LoadCombinedHairData(stream.get())) + { + return Data::AssetHandler::LoadResult::LoadComplete; + } + else + { + assetData->m_tressFXAsset.release(); + } + return Data::AssetHandler::LoadResult::Error; + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Assets/HairAsset.h b/Gems/AtomTressFX/Code/Assets/HairAsset.h new file mode 100644 index 0000000000..7075983e8f --- /dev/null +++ b/Gems/AtomTressFX/Code/Assets/HairAsset.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! HairAsset is a simple AssetData wrapper around the TressFXAsset used by the AP. + //! Is comprises of the hair vertices data file, the hair bone skinning information file + //! and the collision data file. + //! The plan is to separate the collision data as it can have the relation of 1:1, 1:N or N:1 + //! meaning that the hair can have multiple collision handling (not only single mesh), and at + //! the other end multiple hairs can have the same collision (hairdo and fur for example). + class HairAsset final + : public AZ::Data::AssetData + { + public: + static constexpr inline const char* DisplayName = "HairAsset"; + static constexpr inline const char* Extension = "tfxhair"; + static constexpr inline const char* Group = "Hair"; + + AZ_RTTI(HairAsset, "{52842B73-8F75-4620-8231-31EBCC74DD85}", AZ::Data::AssetData); + AZ_CLASS_ALLOCATOR(HairAsset, AZ::SystemAllocator, 0); + + AZStd::unique_ptr m_tressFXAsset; + }; + + // HairAssetHandler + // This handler class help to load the .tfxhair file (which is a combined file of .tfx, .tfxbone and .tfxmesh) + // from an AssetDataStream. + class HairAssetHandler final + : public AzFramework::GenericAssetHandler + { + public: + HairAssetHandler(); + + private: + Data::AssetHandler::LoadResult LoadAssetData( + const Data::Asset& asset, AZStd::shared_ptr stream, + const Data::AssetFilterCB& assetLoadFilterCB) override; + }; + } + } +} diff --git a/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp new file mode 100644 index 0000000000..7629aedea3 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairAssetBuilder::RegisterBuilder() + { + // Setup the builder descriptor + AssetBuilderSDK::AssetBuilderDesc builderDesc; + builderDesc.m_name = "HairAssetBuilder"; + + builderDesc.m_patterns.emplace_back(AssetBuilderSDK::AssetBuilderPattern( + AZStd::string::format("*.%s", AMD::TFXFileExtension), AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard)); + builderDesc.m_busId = azrtti_typeid(); + builderDesc.m_version = 3; + builderDesc.m_createJobFunction = + AZStd::bind(&HairAssetBuilder::CreateJobs, this, AZStd::placeholders::_1, AZStd::placeholders::_2); + builderDesc.m_processJobFunction = + AZStd::bind(&HairAssetBuilder::ProcessJob, this, AZStd::placeholders::_1, AZStd::placeholders::_2); + + BusConnect(builderDesc.m_busId); + + AssetBuilderSDK::AssetBuilderBus::Broadcast( + &AssetBuilderSDK::AssetBuilderBusTraits::RegisterBuilderInformation, builderDesc); + } + + void HairAssetBuilder::ShutDown() + { + m_isShuttingDown = true; + } + + void HairAssetBuilder::CreateJobs( + const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) + { + if (m_isShuttingDown) + { + response.m_result = AssetBuilderSDK::CreateJobsResultCode::ShuttingDown; + return; + } + + for (const AssetBuilderSDK::PlatformInfo& info : request.m_enabledPlatforms) + { + AssetBuilderSDK::JobDescriptor descriptor; + descriptor.m_jobKey = AMD::TFXFileExtension; + descriptor.m_critical = false; + descriptor.SetPlatformIdentifier(info.m_identifier.c_str()); + response.m_createJobOutputs.push_back(descriptor); + } + + // Set the tfx bone and tfx mesh file as source dependency. This way when tfxbone or tfxmesh file reloaded it will + // also trigger the rebuild of the hair asset. + AssetBuilderSDK::SourceFileDependency sourceFileDependency; + sourceFileDependency.m_sourceFileDependencyPath = request.m_sourceFile; + AZ::StringFunc::Path::ReplaceExtension(sourceFileDependency.m_sourceFileDependencyPath, AMD::TFXBoneFileExtension); + response.m_sourceFileDependencyList.push_back(sourceFileDependency); + + sourceFileDependency.m_sourceFileDependencyPath = request.m_sourceFile; + AZ::StringFunc::Path::ReplaceExtension(sourceFileDependency.m_sourceFileDependencyPath, AMD::TFXMeshFileExtension); + response.m_sourceFileDependencyList.push_back(sourceFileDependency); + + response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; + } + + void HairAssetBuilder::ProcessJob( + const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response) + { + AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "HairAssetBuilder Starting Job for %s.\n", request.m_fullPath.c_str()); + + if (m_isShuttingDown) + { + AZ_TracePrintf( + AssetBuilderSDK::WarningWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Cancelled; + return; + } + + // There are 3 source files for TressFX asset - .tfx, .tfxbone and .tfxmesh. + // We read all the 3 source files and combine them to 1 output file .tfxhair in the cache. + AZStd::string tfxFileName; + AzFramework::StringFunc::Path::GetFullFileName(request.m_fullPath.c_str(), tfxFileName); + + // Create the path to the result .tfxhair file inside the tempDirPath. + AZStd::string destPath; + AzFramework::StringFunc::Path::ConstructFull(request.m_tempDirPath.c_str(), tfxFileName.c_str(), destPath, true); + AZ::StringFunc::Path::ReplaceExtension(destPath, AMD::TFXCombinedFileExtension); + + // Create and open the .tfxhair we are writing to. + AZ::IO::FileIOStream outStream(destPath.data(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeCreatePath); + if (!outStream.IsOpen()) + { + AZ_TracePrintf( + AssetBuilderSDK::ErrorWindow, "Error: Failed job %s because .tfxhair file cannot be created.\n", request.m_fullPath.c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; + return; + } + + // Write the .tfxhair file header as a placeholder + AMD::TressFXCombinedHairFileHeader header; + outStream.Write(sizeof(AMD::TressFXCombinedHairFileHeader), &header); + + // Combine .tfx, .tfxbone, .tfxmesh file into .tfxhair file + auto writeToStream = [](const AZStd::string& fullpath, AZ::IO::FileIOStream& outStream, bool required) { + IO::FileIOStream inStream; + if (!inStream.Open(fullpath.c_str(), IO::OpenMode::ModeRead)) + { + if (required) + { + AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, + "Error: Failed job %s because the file is either missing or cannot be opened.\n", fullpath.c_str()); + } + return (AZ::IO::SizeType)0; + } + const AZ::IO::SizeType dataSize = inStream.GetLength(); + AZStd::vector fileBuffer(dataSize); + inStream.Read(dataSize, fileBuffer.data()); + return outStream.Write(dataSize, fileBuffer.data()); + }; + + // Write .tfx file to the combined .tfxhair file. + AZStd::string sourcePath = request.m_fullPath; + const AZ::IO::SizeType tfxSize = writeToStream(sourcePath, outStream, true); + + // Move on to .tfxbone file. + AZ::StringFunc::Path::ReplaceExtension(sourcePath, AMD::TFXBoneFileExtension); + const AZ::IO::SizeType tfxBoneSize = writeToStream(sourcePath, outStream, true); + + // Move on to .tfxmesh file. + AZ::StringFunc::Path::ReplaceExtension(sourcePath, AMD::TFXMeshFileExtension); + writeToStream(sourcePath, outStream, false); + + if (tfxSize == 0 || tfxBoneSize == 0) + { + // Fail the job if the .tfx file or the .tfxbone file is missing. + AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, + "Error: Failed job %s because tfxSize=%d or tfxBoneSize=%d.\n", + request.m_fullPath.c_str(), tfxSize, tfxBoneSize); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; + return; + } + + // Write the header file with correct data + header.offsetTFX = sizeof(AMD::TressFXCombinedHairFileHeader); + header.offsetTFXBone = header.offsetTFX + tfxSize; + header.offsetTFXMesh = header.offsetTFXBone + tfxBoneSize; + outStream.Seek(0, AZ::IO::FileIOStream::SeekMode::ST_SEEK_BEGIN); + outStream.Write(sizeof(AMD::TressFXCombinedHairFileHeader), &header); + + // Send the .tfxhair as the final job product product. + AssetBuilderSDK::JobProduct jobProduct(destPath, azrtti_typeid(), 0); + jobProduct.m_dependenciesHandled = true; + response.m_outputProducts.push_back(jobProduct); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; + + AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "HairAssetBuilder successfully finished Job for %s.\n", request.m_fullPath.c_str()); + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h new file mode 100644 index 0000000000..1af2261a60 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairAssetBuilder.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairAssetBuilder final + : public AssetBuilderSDK::AssetBuilderCommandBus::Handler + { + public: + AZ_RTTI(AnimGraphBuilderWorker, "{7D77A133-115E-4A14-860D-C1DB9422C190}"); + + void RegisterBuilder(); + + //! AssetBuilderSDK::AssetBuilderCommandBus interface + void ShutDown() override; + + void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); + + void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response); + + private: + bool m_isShuttingDown = false; + }; + } + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp new file mode 100644 index 0000000000..f80261f4b5 --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairBuilderComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(1)->Attribute( + AZ::Edit::Attributes::SystemComponentTags, + AZStd::vector({AssetBuilderSDK::ComponentTags::AssetBuilder})); + ; + } + } + + void HairBuilderComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairBuilderService")); + } + + void HairBuilderComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairBuilderService")); + } + + void HairBuilderComponent::Activate() + { + m_hairAssetBuilder.RegisterBuilder(); + m_hairAssetHandler.Register(); + + // Add asset types and extensions to AssetCatalog. + auto assetCatalog = AZ::Data::AssetCatalogRequestBus::FindFirstHandler(); + if (assetCatalog) + { + assetCatalog->EnableCatalogForAsset(azrtti_typeid()); + assetCatalog->AddExtension(AMD::TFXCombinedFileExtension); + } + } + + void HairBuilderComponent::Deactivate() + { + m_hairAssetBuilder.BusDisconnect(); + m_hairAssetHandler.Unregister(); + } + } // namespace Hair + } // End Render namespace +} // End AZ namespace + diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h new file mode 100644 index 0000000000..fb5e7c20ad --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderComponent.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairBuilderComponent final + : public Component + { + public: + AZ_COMPONENT(HairBuilderComponent, "{88233F79-98DA-4DC6-A60B-0405BD810479}"); + HairBuilderComponent() = default; + ~HairBuilderComponent() = default; + + static void Reflect(ReflectContext* context); + + static void GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible); + + private: + HairBuilderComponent(const HairBuilderComponent&) = delete; + + //////////////////////////////////////////////////////////////////////// + // Component interface implementation + void Activate() override; + void Deactivate() override; + //////////////////////////////////////////////////////////////////////// + + HairAssetBuilder m_hairAssetBuilder; + HairAssetHandler m_hairAssetHandler; + }; + } // namespace Hair + } // End Render namespace +} // End AZ namespace diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp new file mode 100644 index 0000000000..3be0d53e0a --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairBuilderModule::HairBuilderModule() + : AZ::Module() + { + m_descriptors.push_back(HairBuilderComponent::CreateDescriptor()); + } + + AZ::ComponentTypeList HairBuilderModule::GetRequiredSystemComponents() const + { + return AZ::ComponentTypeList{azrtti_typeid()}; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h new file mode 100644 index 0000000000..ef90d88bcf --- /dev/null +++ b/Gems/AtomTressFX/Code/Builders/HairBuilderModule.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairBuilderModule : public AZ::Module + { + public: + AZ_RTTI(HairBuilderModule, "{44440BE8-48AC-46AA-9643-2BD866709E27}", AZ::Module); + AZ_CLASS_ALLOCATOR(HairBuilderModule, AZ::SystemAllocator, 0); + + HairBuilderModule(); + + //! Add required SystemComponents to the SystemEntity. + AZ::ComponentTypeList GetRequiredSystemComponents() const override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX_Builder, AZ::Render::Hair::HairBuilderModule) diff --git a/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp b/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp new file mode 100644 index 0000000000..9271400d2b --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/EditorHairComponent.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#if defined (ATOMTRESSFX_EDITOR) + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void EditorHairComponent::Reflect(AZ::ReflectContext* context) + { + BaseClass::Reflect(context); + + if (AZ::SerializeContext* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(1); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class( + "Atom Hair", "Controls Hair Properties") + ->ClassElement(Edit::ClassElements::EditorData, "") + ->Attribute(Edit::Attributes::Category, "Atom") + ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/Component_Placeholder.svg") + ->Attribute(AZ::Edit::Attributes::ViewportIcon, "editor/icons/components/viewport/component_placeholder.png") + ->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game", 0x232b318c)) + ->Attribute(Edit::Attributes::AutoExpand, true) + ->Attribute(Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/gems/reference/rendering/amd/atom-tressfx/") + ; + + editContext->Class( + "HairComponentController", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->DataElement(AZ::Edit::UIHandlers::Default, &HairComponentController::m_configuration, "Configuration", "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ; + + editContext->Class( + "HairComponentConfig", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_hairAsset, "Hair Asset", + "TressFX asset to be assigned to this entity.") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_simulationSettings, "TressFX Sim Settings", + "TressFX simulation settings to be applied on this entity.") + ->DataElement( + AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_renderingSettings, "TressFX Render Settings", + "TressFX rendering settings to be applied on this entity.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairComponentConfig::m_hairGlobalSettings) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &HairComponentConfig::OnHairGlobalSettingsChanged) + ; + } + } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class()->RequestBus("HairRequestsBus"); + + behaviorContext->ConstantProperty("EditorHairComponentTypeId", BehaviorConstant(Uuid(Hair::EditorHairComponentTypeId))) + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); + } + } + + EditorHairComponent::EditorHairComponent(const HairComponentConfig& config) + : BaseClass(config) + { + m_prevHairAssetId = config.m_hairAsset.GetId(); + } + + void EditorHairComponent::Activate() + { + BaseClass::Activate(); + AzFramework::EntityDebugDisplayEventBus::Handler::BusConnect(GetEntityId()); + } + + void EditorHairComponent::Deactivate() + { + BaseClass::Deactivate(); + AzFramework::EntityDebugDisplayEventBus::Handler::BusDisconnect(); + } + + u32 EditorHairComponent::OnConfigurationChanged() + { + // Since any of the hair config and hair asset change will trigger this call, we use the prev loaded hair assetId + // to check which config actually got changed. + // This is because an asset change is a heavy operation and we don't want to trigger that when it's not needed. + if (m_prevHairAssetId == m_controller.GetConfiguration().m_hairAsset.GetId()) + { + m_controller.OnHairConfigChanged(); + } + else + { + m_controller.OnHairAssetChanged(); + m_prevHairAssetId = m_controller.GetConfiguration().m_hairAsset.GetId(); + } + return Edit::PropertyRefreshLevels::AttributesAndValues; + } + + void EditorHairComponent::DisplayEntityViewport( + [[maybe_unused]] const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) + { + // Only render debug information when selected. + if (!IsSelected()) + { + return; + } + + // Only render debug information after render object got created. + if (!m_controller.m_renderObject) + { + return; + } + + float x = 40.0; + float y = 20.0f; + float size = 1.00f; + bool center = false; + + AZStd::string debugString = AZStd::string::format( + "Hair component stats:\n" + " Total number of hairs: %d\n" + " Total number of guide hairs: %d\n" + " Amount of follow hair per guide hair: %d\n", + m_controller.m_renderObject->GetNumTotalHairStrands(), + m_controller.m_renderObject->GetNumGuideHairs(), + m_controller.m_renderObject->GetNumFollowHairsPerGuideHair()); + + debugDisplay.Draw2dTextLabel(x, y, size, debugString.c_str(), center); + } + } // namespace Hair + } // namespace Render +} // namespace AZ + +#endif // ATOMTRESSFX_EDITOR diff --git a/Gems/AtomTressFX/Code/Components/EditorHairComponent.h b/Gems/AtomTressFX/Code/Components/EditorHairComponent.h new file mode 100644 index 0000000000..7af5f5ebaa --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/EditorHairComponent.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if defined (ATOMTRESSFX_EDITOR) + +#include +#include + +#include +#include +#include + + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! Visual editor representation of the hair that can be created for an entity + //! that have an Actor component. + //! The config data itself is held by the 'HairComponentConfig' that reflects the 'TressFXSettings' + //! and by the 'HairGlobalSettings' that mainly controls the shader options. + //! The hair data is held by the 'HairRenderObject' and the connection between the component + //! and the handling of the data is done by the 'HairComponentController'. + static constexpr const char* const EditorHairComponentTypeId = + "{822A8253-4662-41B1-8623-7B2D047A4D68}"; + + class EditorHairComponent final + : public AzToolsFramework::Components::EditorComponentAdapter + , private AzFramework::EntityDebugDisplayEventBus::Handler + { + public: + + using BaseClass = AzToolsFramework::Components::EditorComponentAdapter; + AZ_EDITOR_COMPONENT(AZ::Render::Hair::EditorHairComponent, Hair::EditorHairComponentTypeId, BaseClass); + + static void Reflect(AZ::ReflectContext* context); + + EditorHairComponent() = default; + EditorHairComponent(const HairComponentConfig& config); + + void Activate() override; + void Deactivate() override; + + // AzFramework::DebugDisplayRequestBus::Handler interface + void DisplayEntityViewport( + const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override; + private: + + //! EditorRenderComponentAdapter overrides... + AZ::u32 OnConfigurationChanged() override; + + Data::AssetId m_prevHairAssetId; // Previous loaded hair asset id. + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +#endif // ATOMTRESSFX_EDITOR diff --git a/Gems/AtomTressFX/Code/Components/HairBus.h b/Gems/AtomTressFX/Code/Components/HairBus.h new file mode 100644 index 0000000000..bf713c2638 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairBus.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + class HairRequests + : public ComponentBus + { + public: + AZ_RTTI(AZ::Render::HairRequests, "{923D6B94-C6AD-4B03-B8CC-DB7E708FB9F4}"); + + /// Overrides the default AZ::EBusTraits handler policy to allow one listener only. + static const EBusHandlerPolicy HandlerPolicy = EBusHandlerPolicy::Single; + virtual ~HairRequests() {} + + // Add required getter and setter functions - matching the interface methods + }; + + typedef AZ::EBus HairRequestsBus; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponent.cpp b/Gems/AtomTressFX/Code/Components/HairComponent.cpp new file mode 100644 index 0000000000..920b349ae4 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponent.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairComponent::HairComponent(const HairComponentConfig& config) + : BaseClass(config) + { + } + + HairComponent::~HairComponent() + { + } + + void HairComponent::Reflect(AZ::ReflectContext* context) + { + BaseClass::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class(); + } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class()->RequestBus("HairRequestsBus"); + + behaviorContext->ConstantProperty("HairComponentTypeId", BehaviorConstant(Uuid(Hair::HairComponentTypeId))) + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common); + } + } + + void HairComponent::Activate() + { + BaseClass::Activate(); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + + diff --git a/Gems/AtomTressFX/Code/Components/HairComponent.h b/Gems/AtomTressFX/Code/Components/HairComponent.h new file mode 100644 index 0000000000..6fd8555712 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponent.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +// Hair specific +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairRenderObject; + + static constexpr const char* const HairComponentTypeId = "{9556883B-6F3C-4010-BB3F-EBB480515D68}"; + + //! Parallel to the 'EditorHairComponent' this class is used in game mode. + class HairComponent final + : public AzFramework::Components::ComponentAdapter + { + public: + using BaseClass = AzFramework::Components::ComponentAdapter; + AZ_COMPONENT(AZ::Render::Hair::HairComponent, Hair::HairComponentTypeId, BaseClass); + + HairComponent() = default; + HairComponent(const HairComponentConfig& config); + ~HairComponent(); + + static void Reflect(AZ::ReflectContext* context); + + void Activate() override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp b/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp new file mode 100644 index 0000000000..3fa98ce95d --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentConfig.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + void HairComponentConfig::Reflect(ReflectContext* context) + { + AMD::TressFXSimulationSettings::Reflect(context); + AMD::TressFXRenderingSettings::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(4) + ->Field("HairAsset", &HairComponentConfig::m_hairAsset) + ->Field("SimulationSettings", &HairComponentConfig::m_simulationSettings) + ->Field("RenderingSettings", &HairComponentConfig::m_renderingSettings) + ->Field("HairGlobalSettings", &HairComponentConfig::m_hairGlobalSettings) + ; + } + } + + void HairComponentConfig::OnHairGlobalSettingsChanged() + { + HairGlobalSettingsRequestBus::Broadcast(&HairGlobalSettingsRequests::SetHairGlobalSettings, m_hairGlobalSettings); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Components/HairComponentConfig.h b/Gems/AtomTressFX/Code/Components/HairComponentConfig.h new file mode 100644 index 0000000000..8f0fe5ed66 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentConfig.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + class EditorHairComponent; + + //! Reflects the TressFX settings and configuration data of the current hair object. + class HairComponentConfig final : + public ComponentConfig + { + friend class EditorHairComponent; + + public: + AZ_RTTI(AZ::Render::HairComponentConfig, "{AF2C2F26-0C01-4EAD-A81C-4304BD751EDF}", AZ::ComponentConfig); + + static void Reflect(ReflectContext* context); + + void OnHairGlobalSettingsChanged(); + + void SetEnabled(bool value) + { + m_enabled = value; + } + bool GetIsEnabled() + { + return m_enabled; + } + + // TressFX settings + AMD::TressFXSimulationSettings m_simulationSettings; + AMD::TressFXRenderingSettings m_renderingSettings; + + Data::Asset m_hairAsset; + HairGlobalSettings m_hairGlobalSettings; + + private: + bool m_enabled = true; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentController.cpp b/Gems/AtomTressFX/Code/Components/HairComponentController.cpp new file mode 100644 index 0000000000..7097c48f14 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentController.cpp @@ -0,0 +1,374 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include + +#include + +#include +#include +#include +#include + +// Hair Specific +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairComponentController::~HairComponentController() + { + RemoveHairObject(); + } + + void HairComponentController::Reflect(ReflectContext* context) + { + HairComponentConfig::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(2) + ->Field("Configuration", &HairComponentController::m_configuration) + ; + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("HairRequestsBus") + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + + // Insert auto-gen behavior context here... + ; + } + } + + void HairComponentController::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairService")); + } + + void HairComponentController::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairService")); + } + + void HairComponentController::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required) + { + // Dependency in the Actor due to the need to get the bone / joint matrices + required.push_back(AZ_CRC_CE("EMotionFXActorService")); + } + + HairComponentController::HairComponentController(const HairComponentConfig& config) + : m_configuration(config) + { + } + + + void HairComponentController::Activate(EntityId entityId) + { + m_entityId = entityId; + + m_featureProcessor = RPI::Scene::GetFeatureProcessorForEntity(m_entityId); + if (m_featureProcessor) + { + m_featureProcessor->SetHairGlobalSettings(m_configuration.m_hairGlobalSettings); + if (!m_renderObject) + { + // Call this function if object doesn't exist to trigger the load of the existing asset + OnHairAssetChanged(); + } + } + + EMotionFX::Integration::ActorComponentNotificationBus::Handler::BusConnect(m_entityId); + HairRequestsBus::Handler::BusConnect(m_entityId); + TickBus::Handler::BusConnect(); + HairGlobalSettingsNotificationBus::Handler::BusConnect(); + } + + void HairComponentController::Deactivate() + { + HairRequestsBus::Handler::BusDisconnect(m_entityId); + EMotionFX::Integration::ActorComponentNotificationBus::Handler::BusDisconnect(m_entityId); + Data::AssetBus::MultiHandler::BusDisconnect(); + TickBus::Handler::BusDisconnect(); + HairGlobalSettingsNotificationBus::Handler::BusDisconnect(); + + RemoveHairObject(); + m_entityId.SetInvalid(); + } + + void HairComponentController::SetConfiguration(const HairComponentConfig& config) + { + m_configuration = config; + OnHairConfigChanged(); + } + + const HairComponentConfig& HairComponentController::GetConfiguration() const + { + return m_configuration; + } + + void HairComponentController::OnHairAssetChanged() + { + Data::AssetBus::MultiHandler::BusDisconnect(); + if (m_configuration.m_hairAsset.GetId().IsValid()) + { + Data::AssetBus::MultiHandler::BusConnect(m_configuration.m_hairAsset.GetId()); + m_configuration.m_hairAsset.QueueLoad(); + } + else + { + RemoveHairObject(); + } + } + + void HairComponentController::OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) + { + m_configuration.m_hairGlobalSettings = hairGlobalSettings; + } + + void HairComponentController::RemoveHairObject() + { + if (m_featureProcessor) + { + m_featureProcessor->RemoveHairRenderObject(m_renderObject); + } + m_renderObject.reset(); + } + + void HairComponentController::OnHairConfigChanged() + { + // The actual config change to render object happens in the onTick function. We do this to make sure it + // always happens pre-rendering. There is no need to do it before render object created, because the object + // will always be created with the updated configuration. + if (m_renderObject) + { + m_configChanged = true; + } + } + + void HairComponentController::OnAssetReady(Data::Asset asset) + { + if (asset.GetId() == m_configuration.m_hairAsset.GetId()) + { + m_configuration.m_hairAsset = asset; + CreateHairObject(); + } + } + + void HairComponentController::OnAssetReloaded(Data::Asset asset) + { + OnAssetReady(asset); + } + + void HairComponentController::OnActorInstanceCreated([[maybe_unused]]EMotionFX::ActorInstance* actorInstance) + { + CreateHairObject(); + } + + void HairComponentController::OnActorInstanceDestroyed([[maybe_unused]]EMotionFX::ActorInstance* actorInstance) + { + RemoveHairObject(); + } + + void HairComponentController::OnTick([[maybe_unused]]float deltaTime, [[maybe_unused]]AZ::ScriptTimePoint time) + { + if (!m_renderObject) + { + return; + } + + // Config change to renderObject happens on the OnTick, so we know the it occurs before render update. + if (m_configChanged) + { + const float MAX_SIMULATION_TIME_STEP = 0.033f; // Assuming minimal of 30 fps + float currentDeltaTime = AZStd::min(deltaTime, MAX_SIMULATION_TIME_STEP); + m_renderObject->UpdateSimulationParameters(&m_configuration.m_simulationSettings, currentDeltaTime); + + // [To Do] Hair - Allow update of the following settings to control dynamic LOD + const float distanceFromCamera = 1.0f; + const float updateShadows = false; + m_renderObject->UpdateRenderingParameters( + &m_configuration.m_renderingSettings, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); + m_configChanged = false; + + // Only load the image asset when the dirty flag has been set on the settings. + if (m_configuration.m_renderingSettings.m_imgDirty) + { + m_renderObject->LoadImageAsset(&m_configuration.m_renderingSettings); + m_configuration.m_renderingSettings.m_imgDirty = false; + } + } + + // Update the enable flag for hair render object + // The enable flag depends on the visibility of render actor instance and the flag of hair configuration. + bool actorVisible = false; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorVisible, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetRenderActorVisible); + m_renderObject->SetEnabled(actorVisible); + + UpdateActorMatrices(); + } + + int HairComponentController::GetTickOrder() + { + return AZ::TICK_PRE_RENDER; + } + + bool HairComponentController::UpdateActorMatrices() + { + if (!m_renderObject->IsEnabled()) + { + return false; + } + + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + if (!actorInstance) + { + return false; + } + + const EMotionFX::TransformData* transformData = actorInstance->GetTransformData(); + if (!transformData) + { + AZ_WarningOnce("Hair Gem", false, "Error getting the transformData from the actorInstance."); + return false; + } + + // In EMotionFX the skinning matrices is stored as a 3x4. The conversion to 4x4 matrices happens at the update bone matrices function. + // In here we use the boneIndexMap to find the correct EMotionFX bone index (also as the global bone index), and passing the + // matrices of those bones to the hair render object. We do this for both hair and collision bone matrices. + const AZ::Matrix3x4* matrices = transformData->GetSkinningMatrices(); + for (AZ::u32 tressFXBoneIndex = 0; tressFXBoneIndex < m_cachedHairBoneMatrices.size(); ++tressFXBoneIndex) + { + const AZ::u32 emfxBoneIndex = m_hairBoneIndexLookup[tressFXBoneIndex]; + m_cachedHairBoneMatrices[tressFXBoneIndex] = matrices[emfxBoneIndex]; + } + for (AZ::u32 tressFXBoneIndex = 0; tressFXBoneIndex < m_cachedCollisionBoneMatrices.size(); ++tressFXBoneIndex) + { + const AZ::u32 emfxBoneIndex = m_collisionBoneIndexLookup[tressFXBoneIndex]; + m_cachedCollisionBoneMatrices[tressFXBoneIndex] = matrices[emfxBoneIndex]; + } + + m_entityWorldMatrix = Matrix3x4::CreateFromTransform(actorInstance->GetWorldSpaceTransform().ToAZTransform()); + m_renderObject->UpdateBoneMatrices(m_entityWorldMatrix, m_cachedHairBoneMatrices); + return true; + } + + bool HairComponentController::GenerateLocalToGlobalBoneIndex( + EMotionFX::ActorInstance* actorInstance, AMD::TressFXAsset* hairAsset) + { + // Generate local TressFX to global EMFX bone index lookup. + AMD::BoneNameToIndexMap globalNameToIndexMap; + const EMotionFX::Skeleton* skeleton = actorInstance->GetActor()->GetSkeleton(); + if (!skeleton) + { + AZ_Error("Hair Gem", false, "Actor could not retrieve his skeleton."); + return false; + } + + const uint32_t numBones = uint32_t(skeleton->GetNumNodes()); + globalNameToIndexMap.reserve(size_t(numBones)); + for (uint32_t i = 0; i < numBones; ++i) + { + const char* boneName = skeleton->GetNode(i)->GetName(); + globalNameToIndexMap[boneName] = i; + } + + if (!hairAsset->GenerateLocaltoGlobalHairBoneIndexLookup(globalNameToIndexMap, m_hairBoneIndexLookup) || + !hairAsset->GenerateLocaltoGlobalCollisionBoneIndexLookup(globalNameToIndexMap, m_collisionBoneIndexLookup)) + { + AZ_Error("Hair Gem", false, "Cannot convert local bone index to global bone index. The hair asset may not be compatible with the actor."); + return false; + } + + return true; + } + + // The hair object will only be created if both conditions are met: + // 1. The hair asset is loaded + // 2. The actor instance is created + bool HairComponentController::CreateHairObject() + { + // Do not create a hairRenderObject when actor instance hasn't been created. + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + + if (!actorInstance) + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Error("Hair Gem", false, "Required feature processor does not exist yet"); + return false; + } + + if (!m_configuration.m_hairAsset.GetId().IsValid() || !m_configuration.m_hairAsset.IsReady()) + { + AZ_Warning("Hair Gem", false, "Hair Asset was not ready - second attempt will be made when ready"); + return false; + } + + AMD::TressFXAsset* hairAsset = m_configuration.m_hairAsset.Get()->m_tressFXAsset.get(); + if (!hairAsset) + { + AZ_Error("Hair Gem", false, "Hair asset could not be loaded"); + return false; + } + + if (!GenerateLocalToGlobalBoneIndex(actorInstance, hairAsset)) + { + return false; + } + + // First remove the existing hair object - this can happen if the configuration + // or the hair asset selected changes. + RemoveHairObject(); + + // create a new instance - will remove the old one. + m_renderObject.reset(new HairRenderObject()); + AZStd::string hairName; + AzFramework::StringFunc::Path::GetFileName(m_configuration.m_hairAsset.GetHint().c_str(), hairName); + if (!m_renderObject->Init( m_featureProcessor, hairName.c_str(), hairAsset, + &m_configuration.m_simulationSettings, &m_configuration.m_renderingSettings)) + { + AZ_Warning("Hair Gem", false, "Hair object was not initialize succesfully"); + m_renderObject.reset(); // no instancing yet - remove manually + return false; + } + + // Resize the bone matrices array. The size should equal to the number of bones in the tressFXAsset. + m_cachedHairBoneMatrices.resize(m_hairBoneIndexLookup.size()); + m_cachedCollisionBoneMatrices.resize(m_collisionBoneIndexLookup.size()); + + // Feature processor registration that will hold an instance. + // Remark: DO NOT remove the TressFX asset - it's data might be required for + // more instance hair objects. + m_featureProcessor->AddHairRenderObject(m_renderObject); + return true; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Components/HairComponentController.h b/Gems/AtomTressFX/Code/Components/HairComponentController.h new file mode 100644 index 0000000000..9520a28f57 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairComponentController.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include +#include + +// EMotionFX +#include + +namespace AMD +{ + class TressFXSimulationSettings; + class TressFXRenderingSettings; + class TressFXAsset; +} + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairFeatureProcessor; + + //! This is the controller class for both EditorComponent and in game Component. + //! It is responsible for the creation and activation of the hair object itself + //! and the update and synchronization of any changed configuration. + //! It also responsible to the connection with the entity's Actor to whom the hair + //! is associated and gets the skinning matrices and visibility. + class HairComponentController final + : public HairRequestsBus::Handler + , public HairGlobalSettingsNotificationBus::Handler + , private AZ::Data::AssetBus::MultiHandler + , private AZ::TickBus::Handler + , private EMotionFX::Integration::ActorComponentNotificationBus::Handler + { + public: + friend class EditorHairComponent; + + AZ_TYPE_INFO(AZ::Render::HairComponentController, "{81D3EA93-7EAC-44B7-B8CB-0B573DD8D634}"); + static void Reflect(AZ::ReflectContext* context); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); + + HairComponentController() = default; + HairComponentController(const HairComponentConfig& config); + ~HairComponentController(); + + void Activate(EntityId entityId); + void Deactivate(); + void SetConfiguration(const HairComponentConfig& config); + const HairComponentConfig& GetConfiguration() const; + + HairFeatureProcessor* GetFeatureProcessor() { return m_featureProcessor; } + + private: + AZ_DISABLE_COPY(HairComponentController); + + void OnHairConfigChanged(); + void OnHairAssetChanged(); + + // AZ::Render::Hair::HairGlobalSettingsNotificationBus Overrides + void OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) override; + + // AZ::Data::AssetBus::Handler + void OnAssetReady(AZ::Data::Asset asset) override; + void OnAssetReloaded(AZ::Data::Asset asset) override; + + // EMotionFX::Integration::ActorComponentNotificationBus::Handler + void OnActorInstanceCreated(EMotionFX::ActorInstance* actorInstance) override; + void OnActorInstanceDestroyed(EMotionFX::ActorInstance* actorInstance) override; + + // AZ::TickBus::Handler + void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; + int GetTickOrder() override; + + bool GenerateLocalToGlobalBoneIndex( EMotionFX::ActorInstance* actorInstance, AMD::TressFXAsset* hairAsset); + + bool CreateHairObject(); + void RemoveHairObject(); + + // Extract actor matrix from the actor instance. + bool UpdateActorMatrices(); + + HairFeatureProcessor* m_featureProcessor = nullptr; + + bool m_configChanged = false; // Flag used to defer the configuration change to onTick. + HairComponentConfig m_configuration; // Settings per hair component + + //! Hair render object for connecting to the skeleton and connecting to the feature processor. + Data::Instance m_renderObject; // unique to this component - this is the data source. + + EntityId m_entityId; + + // Store a cache of the bone index lookup we generated during the creation of hair object. + AMD::LocalToGlobalBoneIndexLookup m_hairBoneIndexLookup; + AMD::LocalToGlobalBoneIndexLookup m_collisionBoneIndexLookup; + + // Cache the bone matrices array to avoid frequent allocation. + AZStd::vector m_cachedHairBoneMatrices; + AZStd::vector m_cachedCollisionBoneMatrices; + + AZ::Matrix3x4 m_entityWorldMatrix; + }; + } // namespace Hair + } +} diff --git a/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp b/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp new file mode 100644 index 0000000000..66ac3d2e09 --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairSystemComponent.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairSystemComponent::HairSystemComponent() = default; + HairSystemComponent::~HairSystemComponent() = default; + + void HairSystemComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(0) + ; + } + + Hair::HairFeatureProcessor::Reflect(context); + } + + void HairSystemComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("HairService")); + } + + void HairSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("HairService")); + } + + void HairSystemComponent::GetRequiredServices([[maybe_unused]] ComponentDescriptor::DependencyArrayType& required) + { + required.push_back(AZ_CRC("ActorSystemService", 0x5e493d6c)); + required.push_back(AZ_CRC("EMotionFXAnimationService", 0x3f8a6369)); + } + + void HairSystemComponent::LoadPassTemplateMappings() + { + auto* passSystem = RPI::PassSystemInterface::Get(); + AZ_Assert(passSystem, "Cannot get the pass system."); + + const char* passTemplatesFile = "Passes/AtomTressFX_PassTemplates.azasset"; + passSystem->LoadPassTemplateMappings(passTemplatesFile); + } + + void HairSystemComponent::Init() + { + } + + void HairSystemComponent::Activate() + { + // Feature processor + AZ::RPI::FeatureProcessorFactory::Get()->RegisterFeatureProcessor(); + + auto* passSystem = RPI::PassSystemInterface::Get(); + AZ_Assert(passSystem, "Cannot get the pass system."); + + // Setup handler for load pass templates mappings + m_loadTemplatesHandler = RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler([this]() { this->LoadPassTemplateMappings(); }); + passSystem->ConnectEvent(m_loadTemplatesHandler); + + // Load the AtomTressFX pass classes + passSystem->AddPassCreator(Name("HairSkinningComputePass"), &HairSkinningComputePass::Create); + passSystem->AddPassCreator(Name("HairPPLLRasterPass"), &HairPPLLRasterPass::Create); + passSystem->AddPassCreator(Name("HairPPLLResolvePass"), &HairPPLLResolvePass::Create); + } + + void HairSystemComponent::Deactivate() + { + AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); + m_loadTemplatesHandler.Disconnect(); + } + } // namespace Hair + } // End Render namespace +} // End AZ namespace + diff --git a/Gems/AtomTressFX/Code/Components/HairSystemComponent.h b/Gems/AtomTressFX/Code/Components/HairSystemComponent.h new file mode 100644 index 0000000000..16ba0f5bae --- /dev/null +++ b/Gems/AtomTressFX/Code/Components/HairSystemComponent.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + class SharedBuffer; + + namespace Hair + { + class HairSystemComponent final + : public Component + { + public: + AZ_COMPONENT(HairSystemComponent, "{F3A56326-1D2F-462D-A9E8-0405A76601A5}"); + + HairSystemComponent(); + ~HairSystemComponent(); + + static void Reflect(ReflectContext* context); + + static void GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible); + static void GetRequiredServices(ComponentDescriptor::DependencyArrayType& required); + + private: + //! Loads the pass templates mapping file + void LoadPassTemplateMappings(); + + //////////////////////////////////////////////////////////////////////// + // Component interface implementation + void Init() override; + void Activate() override; + void Deactivate() override; + //////////////////////////////////////////////////////////////////////// + + //! Used for loading the pass templates of the hair gem. + RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler m_loadTemplatesHandler; + }; + } // namespace Hair + } // End Render namespace +} // End AZ namespace diff --git a/Gems/AtomTressFX/Code/HairModule.cpp b/Gems/AtomTressFX/Code/HairModule.cpp new file mode 100644 index 0000000000..21b2d188b1 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModule.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#if defined (ATOMTRESSFX_EDITOR) + #include +#endif // ATOMTRESSFX_EDITOR + +namespace AZ +{ + namespace Render + { + namespace Hair + { + HairModule::HairModule() + : AZ::Module() + { + m_descriptors.insert( + m_descriptors.end(), + { + HairSystemComponent::CreateDescriptor(), + HairComponent::CreateDescriptor(), +#if defined (ATOMTRESSFX_EDITOR) + // Prevent adding editor component when editor and tools are not built + EditorHairComponent::CreateDescriptor(), +#endif // ATOMTRESSFX_EDITOR + }); + } + + AZ::ComponentTypeList HairModule::GetRequiredSystemComponents() const + { + // add required SystemComponents to the SystemEntity + return AZ::ComponentTypeList{ + azrtti_typeid() + }; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/HairModule.h b/Gems/AtomTressFX/Code/HairModule.h new file mode 100644 index 0000000000..416398d445 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModule.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairModule + : public AZ::Module + { + public: + AZ_RTTI(HairModule, "{0EF06CF0-8011-4668-A31F-A6851583EBDC}", AZ::Module); + AZ_CLASS_ALLOCATOR(HairModule, AZ::SystemAllocator, 0); + + HairModule(); + + //! Add required SystemComponents to the SystemEntity. + AZ::ComponentTypeList GetRequiredSystemComponents() const override; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ + +AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX, AZ::Render::Hair::HairModule) + diff --git a/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp b/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp new file mode 100644 index 0000000000..b3b5ea7c06 --- /dev/null +++ b/Gems/AtomTressFX/Code/HairModuleUnsupported.cpp @@ -0,0 +1,11 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +//AZ_DECLARE_MODULE_CLASS(Gem_AtomTressFX, AZ::Module) + diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp new file mode 100644 index 0000000000..746a3c2640 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.cpp @@ -0,0 +1,320 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +//#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + // --- Creation & Initialization --- + RPI::Ptr HairPPLLRasterPass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairPPLLRasterPass(descriptor); + return pass; + } + + HairPPLLRasterPass::HairPPLLRasterPass(const RPI::PassDescriptor& descriptor) + : RasterPass(descriptor), + m_passDescriptor(descriptor) + { + } + + HairPPLLRasterPass::~HairPPLLRasterPass() + { + } + + bool HairPPLLRasterPass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Warning("Hair Gem", false, + "HairPPLLRasterPass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + return false; + } + return true; + } + + void HairPPLLRasterPass::InitializeInternal() + { + if (GetScene()) + { + RasterPass::InitializeInternal(); + } + } + + void HairPPLLRasterPass::BuildInternal() + { + RasterPass::BuildInternal(); + + if (!AcquireFeatureProcessor()) + { + return; + } + + if (!LoadShaderAndPipelineState()) + { + return; + } + + // Output + AttachBufferToSlot(Name{ "PerPixelLinkedList" }, m_featureProcessor->GetPerPixelListBuffer()); + } + + bool HairPPLLRasterPass::IsEnabled() const + { + return (RPI::RasterPass::IsEnabled() && m_initialized) ? true : false; + } + + bool HairPPLLRasterPass::LoadShaderAndPipelineState() + { + RPI::ShaderReloadNotificationBus::Handler::BusDisconnect(); + + const RPI::RasterPassData* passData = RPI::PassUtils::GetPassData(m_passDescriptor); + + // If we successfully retrieved our custom data, use it to set the DrawListTag + if (!passData) + { + AZ_Error("Hair Gem", false, "Missing pass raster data"); + return false; + } + + // Load Shader + const char* shaderFilePath = "Shaders/hairrenderingfillppll.azshader"; + Data::Asset shaderAsset = + RPI::AssetUtils::LoadAssetByProductPath(shaderFilePath, RPI::AssetUtils::TraceLevel::Error); + + if (!shaderAsset.GetId().IsValid()) + { + AZ_Error("Hair Gem", false, "Invalid shader asset for shader '%s'!", shaderFilePath); + return false; + } + + m_shader = RPI::Shader::FindOrCreate(shaderAsset); + if (m_shader == nullptr) + { + AZ_Error("Hair Gem", false, "Pass failed to load shader '%s'!", shaderFilePath); + return false; + } + + // Per Pass Srg + { + // Using 'PerPass' naming since currently RasterPass assumes that the pass Srg is always named 'PassSrg' + // [To Do] - RasterPass should use srg slot index and not name - currently this will + // result in a crash in one of the Atom existing MSAA passes that requires further dive. + // m_shaderResourceGroup = UtilityClass::CreateShaderResourceGroup(m_shader, "HairPerPassSrg", "Hair Gem"); + m_shaderResourceGroup = UtilityClass::CreateShaderResourceGroup(m_shader, "PassSrg", "Hair Gem"); + if (!m_shaderResourceGroup) + { + AZ_Error("Hair Gem", false, "Failed to create the per pass srg"); + return false; + } + } + + const RPI::ShaderVariant& shaderVariant = m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId); + RHI::PipelineStateDescriptorForDraw pipelineStateDescriptor; + shaderVariant.ConfigurePipelineState(pipelineStateDescriptor); + + RPI::Scene* scene = GetScene(); + if (!scene) + { + AZ_Error("Hair Gem", false, "Scene could not be acquired" ); + return false; + } + RHI::DrawListTag drawListTag = m_shader->GetDrawListTag(); + scene->ConfigurePipelineState(drawListTag, pipelineStateDescriptor); + + pipelineStateDescriptor.m_renderAttachmentConfiguration = GetRenderAttachmentConfiguration(); + pipelineStateDescriptor.m_inputStreamLayout.SetTopology(AZ::RHI::PrimitiveTopology::TriangleList); + pipelineStateDescriptor.m_inputStreamLayout.Finalize(); + + m_pipelineState = m_shader->AcquirePipelineState(pipelineStateDescriptor); + if (!m_pipelineState) + { + AZ_Error("Hair Gem", false, "Pipeline state could not be acquired"); + return false; + } + + RPI::ShaderReloadNotificationBus::Handler::BusConnect(shaderAsset.GetId()); + + m_initialized = true; + return true; + } + + void HairPPLLRasterPass::SchedulePacketBuild(HairRenderObject* hairObject) + { + m_newRenderObjects.insert(hairObject); + } + + bool HairPPLLRasterPass::BuildDrawPacket(HairRenderObject* hairObject) + { + if (!m_initialized) + { + return false; + } + + RHI::DrawPacketBuilder::DrawRequest drawRequest; + drawRequest.m_listTag = m_drawListTag; + drawRequest.m_pipelineState = m_pipelineState; +// drawRequest.m_streamBufferViews = // no explicit vertex buffer. shader is using the srg buffers + drawRequest.m_stencilRef = 0; + drawRequest.m_sortKey = 0; + + // Seems that the PerView and PerScene are gathered through RenderPass::CollectSrgs() + // The PerPass is gathered through the RasterPass::m_shaderResourceGroup + AZStd::lock_guard lock(m_mutex); + + return hairObject->BuildPPLLDrawPacket(drawRequest); + } + + bool HairPPLLRasterPass::AddDrawPackets(AZStd::list>& hairRenderObjects) + { + bool overallSuccess = true; + + if (!m_currentView && + (!(m_currentView = GetView()) || !m_currentView->HasDrawListTag(m_drawListTag))) + { + m_currentView = nullptr; // set it to nullptr to prevent further attempts this frame + AZ_Warning("Hair Gem", false, "HairPPLLRasterPass failed to acquire or match the DrawListTag - check that your pass and shader tag name match"); + return false; + } + + for (auto& renderObject : hairRenderObjects) + { + const RHI::DrawPacket* drawPacket = renderObject->GetFillDrawPacket(); + if (!drawPacket) + { // might not be an error - the object might have just been added and the DrawPacket is + // scheduled to be built when the render frame begins + AZ_Warning("Hair Gem", !m_newRenderObjects.empty(), "HairPPLLRasterPass - DrawPacket wasn't built"); + overallSuccess = false; + continue; + } + + m_currentView->AddDrawPacket(drawPacket); + } + return overallSuccess; + } + + void HairPPLLRasterPass::FrameBeginInternal(FramePrepareParams params) + { + { + AZStd::lock_guard lock(m_mutex); + if (!m_initialized && AcquireFeatureProcessor()) + { + LoadShaderAndPipelineState(); + m_featureProcessor->ForceRebuildRenderData(); + } + } + + if (!m_initialized) + { + return; + } + + // Bind the Per Object resources and trigger the RHI validation that will use attachment + // for its validation. The attachments are invalidated outside the render begin/end frame. + for (HairRenderObject* newObject : m_newRenderObjects) + { + newObject->BindPerObjectSrgForRaster(); + BuildDrawPacket(newObject); + } + + // Clear the new added objects - BuildDrawPacket should only be carried out once per + // object/shader lifetime + m_newRenderObjects.clear(); + + // Refresh current view every frame + if (!(m_currentView = GetView()) || !m_currentView->HasDrawListTag(m_drawListTag)) + { + m_currentView = nullptr; // set it to null if view exists but no tag match + AZ_Warning("Hair Gem", false, "HairPPLLRasterPass failed to acquire or match the DrawListTag - check that your pass and shader tag name match"); + return; + } + + RPI::RasterPass::FrameBeginInternal(params); + } + + void HairPPLLRasterPass::CompileResources(const RHI::FrameGraphCompileContext& context) + { + AZ_PROFILE_FUNCTION(AzRender); + + if (!m_featureProcessor) + { + return; + } + + // Compilation of remaining srgs will be done by the parent class + RPI::RasterPass::CompileResources(context); + } + + void HairPPLLRasterPass::BuildShaderAndRenderData() + { + AZStd::lock_guard lock(m_mutex); + m_initialized = false; // make sure we initialize it even if not in this frame + if (AcquireFeatureProcessor()) + { + LoadShaderAndPipelineState(); + m_featureProcessor->ForceRebuildRenderData(); + } + } + + void HairPPLLRasterPass::OnShaderReinitialized([[maybe_unused]] const RPI::Shader & shader) + { + BuildShaderAndRenderData(); + } + + void HairPPLLRasterPass::OnShaderAssetReinitialized([[maybe_unused]] const Data::Asset& shaderAsset) + { + BuildShaderAndRenderData(); + } + + void HairPPLLRasterPass::OnShaderVariantReinitialized([[maybe_unused]] const AZ::RPI::ShaderVariant& shaderVariant) + { + BuildShaderAndRenderData(); + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h new file mode 100644 index 0000000000..ef7167897f --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLRasterPass.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct DrawItem; + } + + namespace Render + { + namespace Hair + { + class HairRenderObject; + class HairFeatureProcessor; + + //! A HairPPLLRasterPass is used for the hair fragments fill render after the data + //! went through the skinning and simulation passes. + //! The output of this pass is the general list of fragment data that can now be + //! traversed for depth resolve and lighting. + //! The Fill pass uses the following Srgs: + //! - PerPassSrg shared by all hair passes for the shared dynamic buffer and the PPLL buffers + //! - PerMaterialSrg - used solely by this pass to alter the vertices and apply the visual + //! hair properties to each fragment. + //! - HairDynamicDataSrg (PerObjectSrg) - shared buffers views for this hair object only. + //! - PerViewSrg and PerSceneSrg - as per the data from Atom. + class HairPPLLRasterPass + : public RPI::RasterPass + , private RPI::ShaderReloadNotificationBus::Handler + { + AZ_RPI_PASS(HairPPLLRasterPass); + + public: + AZ_RTTI(HairPPLLRasterPass, "{6614D7DD-24EE-4A2B-B314-7C035E2FB3C4}", RasterPass); + AZ_CLASS_ALLOCATOR(HairPPLLRasterPass, SystemAllocator, 0); + virtual ~HairPPLLRasterPass(); + + //! Creates a HairPPLLRasterPass + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool AddDrawPackets(AZStd::list>& hairObjects); + + //! The following will be called when an object was added or shader has been compiled + void SchedulePacketBuild(HairRenderObject* hairObject); + + Data::Instance GetShader() { return m_shader; } + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + + virtual bool IsEnabled() const override; + protected: + // ShaderReloadNotificationBus::Handler overrides... + void OnShaderReinitialized(const RPI::Shader& shader) override; + void OnShaderAssetReinitialized(const Data::Asset& shaderAsset) override; + void OnShaderVariantReinitialized(const AZ::RPI::ShaderVariant& shaderVariant) override; + + private: + explicit HairPPLLRasterPass(const RPI::PassDescriptor& descriptor); + + bool LoadShaderAndPipelineState(); + bool AcquireFeatureProcessor(); + void BuildShaderAndRenderData(); + bool BuildDrawPacket(HairRenderObject* hairObject); + + // Pass behavior overrides + void InitializeInternal() override; + void BuildInternal() override; + void FrameBeginInternal(FramePrepareParams params) override; + + // Scope producer functions... + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + private: + HairFeatureProcessor* m_featureProcessor = nullptr; + + // The shader that will be used by the pass + Data::Instance m_shader = nullptr; + + // To help create the pipeline state + RPI::PassDescriptor m_passDescriptor; + + const RHI::PipelineState* m_pipelineState = nullptr; + RPI::ViewPtr m_currentView = nullptr; + + AZStd::mutex m_mutex; + + //! List of new render objects introduced this frame so that their + //! Per Object (dynamic) Srg should be bound to the resources. + //! Done once per every new object introduced / requires update. + AZStd::unordered_set m_newRenderObjects; + + bool m_initialized = false; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp new file mode 100644 index 0000000000..0dc3b62c45 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp @@ -0,0 +1,142 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + HairPPLLResolvePass::HairPPLLResolvePass(const RPI::PassDescriptor& descriptor) + : RPI::FullscreenTrianglePass(descriptor) + { + } + + void HairPPLLResolvePass::UpdateGlobalShaderOptions() + { + RPI::ShaderOptionGroup shaderOption = m_shader->CreateShaderOptionGroup(); + + m_featureProcessor->GetHairGlobalSettings(m_hairGlobalSettings); + + shaderOption.SetValue(AZ::Name("o_enableShadows"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableShadows }); + shaderOption.SetValue(AZ::Name("o_enableDirectionalLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableDirectionalLights }); + shaderOption.SetValue(AZ::Name("o_enablePunctualLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enablePunctualLights }); + shaderOption.SetValue(AZ::Name("o_enableAreaLights"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableAreaLights }); + shaderOption.SetValue(AZ::Name("o_enableIBL"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableIBL }); + shaderOption.SetValue(AZ::Name("o_hairLightingModel"), AZ::Name{ "HairLightingModel::" + AZStd::string(HairLightingModelNamespace::ToString(m_hairGlobalSettings.m_hairLightingModel)) }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_R"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_R }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_TRT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TRT }); + shaderOption.SetValue(AZ::Name("o_enableMarschner_TT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TT }); + shaderOption.SetValue(AZ::Name("o_enableDiffuseLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableDiffuseLobe }); + shaderOption.SetValue(AZ::Name("o_enableSpecularLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableSpecularLobe }); + shaderOption.SetValue(AZ::Name("o_enableTransmittanceLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableTransmittanceLobe }); + + m_shaderOptions = shaderOption.GetShaderVariantKeyFallbackValue(); + } + + RPI::Ptr HairPPLLResolvePass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairPPLLResolvePass(descriptor); + + return AZStd::move(pass); + } + + void HairPPLLResolvePass::InitializeInternal() + { + if (GetScene()) + { + FullscreenTrianglePass::InitializeInternal(); + } + } + + bool HairPPLLResolvePass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor || !m_featureProcessor->IsInitialized()) + { + AZ_Warning("Hair Gem", m_featureProcessor, + "HairPPLLResolvePass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + m_featureProcessor = nullptr; // set it as null if not initialized to repeat this check. + return false; + } + return true; + } + + void HairPPLLResolvePass::CompileResources(const RHI::FrameGraphCompileContext& context) + { + if (!m_shaderResourceGroup || !AcquireFeatureProcessor()) + { + AZ_Error("Hair Gem", m_shaderResourceGroup, "HairPPLLResolvePass: PPLL list data was not bound - missing Srg"); + return; // no error message due to FP - initialization not complete yet, wait for the next frame + } + + UpdateGlobalShaderOptions(); + + if (m_shaderResourceGroup->HasShaderVariantKeyFallbackEntry()) + { + m_shaderResourceGroup->SetShaderVariantKeyFallbackValue(m_shaderOptions); + } + + + SrgBufferDescriptor descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + PPLL_NODE_SIZE, RESERVED_PIXELS_FOR_OIT, + Name{ "LinkedListNodesPPLL" }, Name{ "m_linkedListNodes" }, 0, 0 + ); + if (!UtilityClass::BindBufferToSrg("Hair Gem", m_featureProcessor->GetPerPixelListBuffer(), descriptor, m_shaderResourceGroup)) + { + AZ_Error("Hair Gem", false, "HairPPLLResolvePass: PPLL list data could not be bound."); + } + + // Update the material array constant buffer within the per pass srg + descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXShadeParams), 1, + Name{ "HairMaterialsArray" }, Name{ "m_hairParams" }, 0, 0 + ); + + m_featureProcessor->GetMaterialsArray().UpdateGPUData(m_shaderResourceGroup, descriptor); + + // All remaining srgs should compile here + FullscreenTrianglePass::CompileResources(context); + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h new file mode 100644 index 0000000000..bf1a3f768e --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include +#include +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairFeatureProcessor; + + //! The hair PPLL resolve pass is a full screen pass that runs over the hair fragments list + //! that were computed in the raster fill pass and resolves their depth order, transparency + //! and lighting values to be output to display. + //! Each pixel on the screen will be processed only once and will iterate through the fragments + //! list associated with the pixel's location. + //! The full screen resolve pass is using the following Srgs: + //! - PerPassSrg: hair vertex data data, PPLL buffers and material array + //! shared by all passes. + class HairPPLLResolvePass final + : public RPI::FullscreenTrianglePass + { + AZ_RPI_PASS(HairPPLLResolvePass); + + public: + AZ_RTTI(HairPPLLResolvePass, "{240940C1-4A47-480D-8B16-176FF3359B01}", RPI::FullscreenTrianglePass); + AZ_CLASS_ALLOCATOR(HairPPLLResolvePass, SystemAllocator, 0); + ~HairPPLLResolvePass() = default; + + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool AcquireFeatureProcessor(); + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + + //! Override pass behavior methods + void InitializeInternal() override; + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + private: + HairPPLLResolvePass(const RPI::PassDescriptor& descriptor); + + private: + void UpdateGlobalShaderOptions(); + + HairGlobalSettings m_hairGlobalSettings; + HairFeatureProcessor* m_featureProcessor = nullptr; + AZ::RPI::ShaderVariantKey m_shaderOptions; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp b/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp new file mode 100644 index 0000000000..24cd6465dd --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairParentPass.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + HairParentPass::HairParentPass(const RPI::PassDescriptor& descriptor) + : Base(descriptor) + { + } + + HairParentPass::~HairParentPass() + { + } + + RPI::Ptr HairParentPass::Create(const RPI::PassDescriptor& descriptor) + { + return aznew HairParentPass(descriptor); + } + + // The following two methods are here as the mean to allow usage of different hair passes in + // the active pipeline due to different hair options activations. + // For example - one might want to use short resolve render method vs' the complete full buffers + // that is used currently (but cost much memory), or to enable/disable collisions by removing + // the collision passes. + // [To Do] - The parent pass class can be removed if this is not done. + void HairParentPass::UpdateChildren() + { + if (!m_updateChildren) + { + return; + } + m_updateChildren = false; + } + + void HairParentPass::BuildAttachmentsInternal() + { + UpdateChildren(); + + Base::BuildAttachmentsInternal(); + } + + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairParentPass.h b/Gems/AtomTressFX/Code/Passes/HairParentPass.h new file mode 100644 index 0000000000..e494e92e1d --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairParentPass.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + //! HairParentPass owns the hair passes. + //! Currently they are all defined via the pipeline configuration, making the HairParent + //! class somewhat redundant, but moving forward, such class can be required to control + //! passes activation and usage based on user activation options. + class HairParentPass final + : public RPI::ParentPass + { + using Base = RPI::ParentPass; + AZ_RPI_PASS(HairParentPass); + + public: + AZ_RTTI(HairParentPass, "80C7E869-2513-4201-8C1E-D2E39DDE1244", Base); + AZ_CLASS_ALLOCATOR(HairParentPass, SystemAllocator, 0); + + virtual ~HairParentPass(); + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + private: + HairParentPass() = delete; + explicit HairParentPass(const RPI::PassDescriptor& descriptor); + + // RPI::Pass overrides... + void BuildAttachmentsInternal() override; + + void UpdateChildren(); + + bool m_updateChildren = true; + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp new file mode 100644 index 0000000000..2be3d66c01 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.cpp @@ -0,0 +1,269 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Hair Specific +#include +#include +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + Data::Instance HairSkinningComputePass::GetShader() + { + return m_shader; + } + + bool HairSkinningComputePass::AcquireFeatureProcessor() + { + if (m_featureProcessor) + { + return true; + } + + RPI::Scene* scene = GetScene(); + if (scene) + { + m_featureProcessor = scene->GetFeatureProcessor(); + } + else + { + return false; + } + + if (!m_featureProcessor) + { + AZ_Warning("Hair Gem", false, + "HairSkinningComputePass [%s] - Failed to retrieve Hair feature processor from the scene", + GetName().GetCStr()); + return false; + } + return true; + } + + RPI::Ptr HairSkinningComputePass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew HairSkinningComputePass(descriptor); + return pass; + } + + HairSkinningComputePass::HairSkinningComputePass(const RPI::PassDescriptor& descriptor) + : RPI::ComputePass(descriptor) + { + } + + void HairSkinningComputePass::InitializeInternal() + { + if (GetScene()) + { + ComputePass::InitializeInternal(); + } + } + + void HairSkinningComputePass::BuildInternal() + { + ComputePass::BuildInternal(); + + if (!AcquireFeatureProcessor()) + { + return; + } + + // Output + // This is the buffer that is shared between all objects and dispatches and contains + // the dynamic data that can be changed between passes. + Name bufferName = Name{ "SkinnedHairSharedBuffer" }; + RPI::PassAttachmentBinding* localBinding = FindAttachmentBinding(bufferName); + if (localBinding && !localBinding->m_attachment) + { + AttachBufferToSlot(Name{ "SkinnedHairSharedBuffer" }, HairSharedBufferInterface::Get()->GetBuffer()); + } + } + + void HairSkinningComputePass::FrameBeginInternal(FramePrepareParams params) + { + if (m_buildShaderAndData) + { // Shader rebuild is required - the async callback did not succeed (missing FP?) + if (AcquireFeatureProcessor()) + { // FP exists or can be acquired + LoadShader(); // this will happen in this frame + // Flag the FP not to add any more dispatches until shader rebuild was done + m_featureProcessor->SetAddDispatchEnable(false); + // The following will force rebuild in the next frame keeping this frame clean. + m_featureProcessor->ForceRebuildRenderData(); + m_buildShaderAndData = false; + } + + // Clear the dispatch items, they will be re-populated next frame + m_dispatchItems.clear(); + } + + // This will bind the Per Object resources since the binding is triggering + // the RHI validation that will use attachment for its validation. The attachments + // are invalidated outside the render begin / end frame. + for (HairRenderObject* newObject : m_newRenderObjects) + { + newObject->BindPerObjectSrgForCompute(); + } + // Clear the objects, hence this is only done once per object/shader lifetime + m_newRenderObjects.clear(); + + RPI::ComputePass::FrameBeginInternal(params); + } + + void HairSkinningComputePass::CompileResources([[maybe_unused]] const RHI::FrameGraphCompileContext& context) + { + if (!m_featureProcessor) + { + return; + } + + // DON'T call the ComputePass:CompileResources as it will try to compile perDraw srg + // under the assumption that this is a single dispatch compute. Here we have dispatch + // per hair object and each has its own perDraw srg. + if (m_shaderResourceGroup != nullptr) + { + BindPassSrg(context, m_shaderResourceGroup); + m_shaderResourceGroup->Compile(); + } + } + + bool HairSkinningComputePass::IsEnabled() const + { + return RPI::ComputePass::IsEnabled();// (m_dispatchItems.size() ? true : false); + } + + bool HairSkinningComputePass::BuildDispatchItem(HairRenderObject* hairObject, DispatchLevel dispatchLevel) + { + m_newRenderObjects.insert(hairObject); + return hairObject->BuildDispatchItem(m_shader.get(), dispatchLevel); + } + + void HairSkinningComputePass::AddDispatchItems(AZStd::list>& hairRenderObjects) + { + // The following mutex is used for blocking the shader switch when a hot load occurs, hence ensuring + // the shader exists and the same shader, data and dispatch items are used across all hair objects + // during this frame. + // Several cases exist: + // 1. Hot reload was invoked first - either finished before this method or the mutex in this method + // is waited upon. The flag for hot reload was set already resulting in exit without add of dispatches. + // 2. Hot reload was invoked after this method - the BuildCommandListInternal will test for the flag and + // clear if required. + // 3. Hot reload was invoked after send to the GPU (BuildCommandListInternal) - the data sent is valid + // and it is safe to change the shader and create new dispatches. + // Remark: BuildCommandListInternal does not need to be synched as well since if the data was already + // inserted it is consistent and valid using the existing shader and data with instance counting. + AZStd::lock_guard lock(m_mutex); + + if (m_buildShaderAndData) + { // mutex was held by the hot reload and released - abort render until done. List is empty. + return; + } + + for (auto& renderObject : hairRenderObjects) + { + if (!renderObject->IsEnabled()) + { + continue; + } + + const RHI::DispatchItem* dispatchItem = renderObject->GetDispatchItem(m_shader.get()); + if (!dispatchItem) + { + continue; + } + + uint32_t iterations = m_allowSimIterations ? AZ::GetMax(renderObject->GetCPULocalShapeIterations(), 1) : 1; + for (uint32_t j = 0; j < iterations; ++j) + { + m_dispatchItems.insert(dispatchItem); + } + } + } + + void HairSkinningComputePass::BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) + { + if (m_buildShaderAndData) + { // Protect against shader and data async change that were not carried out + m_dispatchItems.clear(); + return; + } + + RHI::CommandList* commandList = context.GetCommandList(); + + // The following will bind all registered Srgs set in m_shaderResourceGroupsToBind + // and sends them to the command list ahead of the dispatch. + // This includes the PerView, PerScene and PerPass srgs (what about per draw?) + SetSrgsForDispatch(commandList); + + for (const RHI::DispatchItem* dispatchItem : m_dispatchItems) + { + commandList->Submit(*dispatchItem); + } + + // Clear the dispatch items. They will need to be re-populated next frame + m_dispatchItems.clear(); + } + + void HairSkinningComputePass::BuildShaderAndRenderData() + { + AZStd::lock_guard lock(m_mutex); + m_buildShaderAndData = true; + if (AcquireFeatureProcessor()) + { + // Flag the FP not to add any more dispatches until shader rebuild was done + m_featureProcessor->SetAddDispatchEnable(false); + } + } + + // Before reloading shaders, we want to wait for existing dispatches to finish + // so shader reloading does not interfere in any way. Because AP reloads are async, there might + // be a case where dispatch resources are destructed and will most certainly cause a GPU crash. + // If we flag the need for rebuild, the build will be made at the start of the next frame - at + // this stage the dispatch items should have been cleared - now we can load the shader and data. + void HairSkinningComputePass::OnShaderReinitialized([[maybe_unused]] const AZ::RPI::Shader& shader) + { + BuildShaderAndRenderData(); + } + + void HairSkinningComputePass::OnShaderAssetReinitialized([[maybe_unused]] const Data::Asset& shaderAsset) + { + BuildShaderAndRenderData(); + } + + void HairSkinningComputePass::OnShaderVariantReinitialized([[maybe_unused]] const AZ::RPI::ShaderVariant& shaderVariant) + { + BuildShaderAndRenderData(); + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h new file mode 100644 index 0000000000..35fcfe9c37 --- /dev/null +++ b/Gems/AtomTressFX/Code/Passes/HairSkinningComputePass.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include + +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct DispatchItem; + } + + namespace Render + { + namespace Hair + { + class HairDispatchItem; + class HairFeatureProcessor; + class HairRenderObject; + enum class DispatchLevel; + + // This pass class serves for all skinning and simulation hair compute passes. + //! The Skinning Compute passes are all using the following Srgs via the dispatchItem: + //! - PerPassSrg: shared by all hair passes for the shared dynamic buffer and the PPLL buffers + //! - HairGenerationSrg: dictates how to construct the hair vertices and skinning + //! - HairSimSrg: defines vertices and tangent data shared between all passes + class HairSkinningComputePass final + : public RPI::ComputePass + { + AZ_RPI_PASS(HairSkinningComputePass); + + public: + AZ_RTTI(HairSkinningComputePass, "{DC8D323E-41FF-4FED-89C6-A254FD6809FC}", RPI::ComputePass); + AZ_CLASS_ALLOCATOR(HairSkinningComputePass, SystemAllocator, 0); + ~HairSkinningComputePass() = default; + + // Creates a HairSkinningComputePass + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + bool BuildDispatchItem(HairRenderObject* hairObject, DispatchLevel dispatchLevel ); + + //! Thread-safe function for adding the frame's dispatch items + void AddDispatchItems(AZStd::list>& renderObjects); + + // Pass behavior overrides + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + + virtual bool IsEnabled() const override; + + //! Returns the shader held by the ComputePass + Data::Instance GetShader(); + + void SetFeatureProcessor(HairFeatureProcessor* featureProcessor) + { + m_featureProcessor = featureProcessor; + } + void SetAllowIterations(bool allowIterations) + { + m_allowSimIterations = allowIterations; + } + + protected: + HairSkinningComputePass(const RPI::PassDescriptor& descriptor); + + void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override; + + // Attach here all the pass buffers + void InitializeInternal() override; + void BuildInternal() override; + void FrameBeginInternal(FramePrepareParams params) override; + + // ShaderReloadNotificationBus::Handler overrides... + void OnShaderReinitialized(const AZ::RPI::Shader& shader) override; + void OnShaderAssetReinitialized(const Data::Asset& shaderAsset) override; + void OnShaderVariantReinitialized(const AZ::RPI::ShaderVariant& shaderVariant) override; + + bool AcquireFeatureProcessor(); + void BuildShaderAndRenderData(); + + private: + HairFeatureProcessor* m_featureProcessor = nullptr; + + bool m_allowSimIterations = false; + bool m_initialized = false; + bool m_buildShaderAndData = false; // If shader is updated, mark it for build + + AZStd::mutex m_mutex; + + //! list of dispatch items, each represents a single hair object that + //! will be used by the skinning compute shader. + AZStd::unordered_set m_dispatchItems; + + //! List of new render objects that their Per Object (dynamic) Srg should be bound + //! to the resources. Done once per pass per object only. + AZStd::unordered_set m_newRenderObjects; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h b/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h new file mode 100644 index 0000000000..31e3000a89 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairBuffersSemantics.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +namespace AZ +{ + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + namespace Hair + { + enum class HairDynamicBuffersSemantics : uint8_t + { + Position = 0, + PositionsPrev, + PositionsPrevPrev, + Tangent, + StrandLevelData, + NumBufferStreams + }; + + enum class HairGenerationBuffersSemantics : uint8_t + { + InitialHairPositions = 0, + HairRestLengthSRV, + HairStrandType, + FollowHairRootOffset, + BoneSkinningData, + TressFXSimulationConstantBuffer, + NumBufferStreams + }; + + enum class HairRenderBuffersSemantics : uint8_t + { + HairVertexRenderParams = 0, + HairTexCoords, + BaseAlbedo, + StrandAlbedo, + RenderCB, + StrandCB, + NumBufferStreams + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp new file mode 100644 index 0000000000..42fc2809fc --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp @@ -0,0 +1,195 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include + +// Hair specific +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + //!===================================================================================== + //! + //! Utility Functions + //! + //!===================================================================================== + + // [To Do] examine if most of these functions can become global in RPI + + //! Utility function to generate the Srg given the shader and the desired Srg name to be associated to. + //! If several shaders are sharing the same Srg (for example perView, perScene), it is enough to + //! create the Srg by associating it with a single shader and since the GPU signature and the data + //! are referring to the same shared description (preferable set in an [SrgDeclaration].aszli file) + //! The association with all shaders will work properly. + Data::Instance UtilityClass::CreateShaderResourceGroup( + Data::Instance shader, + const char* shaderResourceGroupId, + const char* moduleName) + { + Data::Instance srg = RPI::ShaderResourceGroup::Create(shader->GetAsset(), AZ::Name{ shaderResourceGroupId }); + if (!srg) + { + AZ_Error(moduleName, false, "Failed to create shader resource group"); + return nullptr; + } + return srg; + } + + + //! If srg is nullptr the index handle will NOT be set. + //! This can be useful when creating a constant buffer or an image. + Data::Instance UtilityClass::CreateBuffer( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + // If srg is provided, match the shader Srg bind index (returned via the descriptor) + if (srg) + { // Not always do we want to associate Srg when creating a buffer + bufferDesc.m_resourceShaderIndex = srg->FindShaderInputBufferIndex(bufferDesc.m_paramNameInSrg).GetIndex(); + if (bufferDesc.m_resourceShaderIndex == uint32_t(-1)) + { + AZ_Error(warningHeader, false, "Failed to find shader input index for [%s] in the SRG.", + bufferDesc.m_paramNameInSrg.GetCStr()); + return nullptr; + } + } + + // Descriptor setting + RPI::CommonBufferDescriptor desc; + desc.m_elementFormat = bufferDesc.m_elementFormat; + desc.m_poolType = bufferDesc.m_poolType;; + desc.m_elementSize = bufferDesc.m_elementSize; + desc.m_bufferName = bufferDesc.m_bufferName.GetCStr(); + desc.m_byteCount = (uint64_t)bufferDesc.m_elementCount * bufferDesc.m_elementSize; + desc.m_bufferData = nullptr; // set during asset load - use Update + + // Buffer creation + return RPI::BufferSystemInterface::Get()->CreateBufferFromCommonPool(desc); + } + + bool UtilityClass::BindBufferToSrg( + const char* warningHeader, + Data::Instance buffer, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + if (!buffer) + { + AZ_Error(warningHeader, false, "Trying to bind a null buffer"); + return false; + } + + RHI::ShaderInputBufferIndex bufferIndex = srg->FindShaderInputBufferIndex(bufferDesc.m_paramNameInSrg); + if (!bufferIndex.IsValid()) + { + AZ_Error(warningHeader, false, "Failed to find shader input index for [%s] in the SRG.", + bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!srg->SetBufferView(bufferIndex, buffer->GetBufferView())) + { + AZ_Error(warningHeader, false, "Failed to bind buffer view for [%s]", bufferDesc.m_bufferName.GetCStr()); + return false; + } + + return true; + } + + Data::Instance UtilityClass::CreateBufferAndBindToSrg( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg) + { + // Buffer creation + Data::Instance buffer = CreateBuffer(warningHeader, bufferDesc, srg); + + if (!BindBufferToSrg(warningHeader, buffer, bufferDesc, srg)) + { + return nullptr; + } + + return buffer; + } + + Data::Instance UtilityClass::CreateImagePool(RHI::ImagePoolDescriptor& imagePoolDesc) + { + RHI::Ptr device = RHI::GetRHIDevice(); + Data::Instance imagePool = RHI::Factory::Get().CreateImagePool(); + RHI::ResultCode result = imagePool->Init(*device, imagePoolDesc); + if (result != RHI::ResultCode::Success) + { + AZ_Error("CreateImagePool", false, "Failed to create or initialize image pool"); + return nullptr; + } + return imagePool; + } + + Data::Instance UtilityClass::CreateImage2D(RHI::ImagePool* imagePool, RHI::ImageDescriptor& imageDesc) + { + Data::Instance rhiImage = RHI::Factory::Get().CreateImage(); + RHI::ImageInitRequest request; + request.m_image = rhiImage.get(); + request.m_descriptor = imageDesc; + RHI::ResultCode result = imagePool->InitImage(request); + if (result != RHI::ResultCode::Success) + { + AZ_Error("CreateImage2D", false, "Failed to create or initialize image"); + return nullptr; + } + return rhiImage; + } + + Data::Instance UtilityClass::LoadStreamingImage( + const char* textureFilePath, [[maybe_unused]] const char* sampleName) + { + Data::AssetId streamingImageAssetId; + Data::AssetCatalogRequestBus::BroadcastResult( + streamingImageAssetId, &Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, + textureFilePath, azrtti_typeid(), false); + + if (!streamingImageAssetId.IsValid()) + { + AZ_Error(sampleName, false, "Failed to get streaming image asset id with path %s", textureFilePath); + return nullptr; + } + + auto streamingImageAsset = Data::AssetManager::Instance().GetAsset( + streamingImageAssetId, + Data::AssetLoadBehavior::PreLoad); + streamingImageAsset.BlockUntilLoadComplete(); + + if (!streamingImageAsset.IsReady()) + { + AZ_Error(sampleName, false, "Failed to get streaming image asset '%s'", textureFilePath); + return nullptr; + } + + auto image = RPI::StreamingImage::FindOrCreate(streamingImageAsset); + if (!image) + { + AZ_Error(sampleName, false, "Failed to find or create an image instance from image asset '%s'", textureFilePath); + return nullptr; + } + return image; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairCommon.h b/Gems/AtomTressFX/Code/Rendering/HairCommon.h new file mode 100644 index 0000000000..115fa73a2c --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairCommon.h @@ -0,0 +1,208 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +#include +#include +#include +#include + +// Hair specific +#include + +namespace AZ +{ + namespace RHI + { + class BufferAssetView; + } + + namespace RPI + { + class Buffer; + } + + namespace Data + { + /** + * This is an alias of intrusive_ptr designed for any class which inherits from + * InstanceData. You're not required to use Instance<> over AZStd::intrusive_ptr<>, + * but it provides symmetry with Asset<>. + */ + template + using Instance = AZStd::intrusive_ptr; + } + + namespace Render + { + namespace Hair + { + class UtilityClass + { + public: + UtilityClass() = default; + + static Data::Instance CreateShaderResourceGroup( + Data::Instance shader, + const char* shaderResourceGroupId, + const char* moduleName + ); + + static Data::Instance CreateBuffer( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg + ); + + static Data::Instance CreateBufferAndBindToSrg( + const char* warningHeader, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg + ); + + static bool BindBufferToSrg( + const char* warningHeader, + Data::Instance buffer, + SrgBufferDescriptor& bufferDesc, + Data::Instance srg=nullptr + ); + + static Data::Instance LoadStreamingImage( + const char* textureFilePath, [[maybe_unused]] const char* sampleName + ); + + static Data::Instance CreateImagePool( + RHI::ImagePoolDescriptor& imagePoolDesc); + + static Data::Instance CreateImage2D( + RHI::ImagePool* imagePool, RHI::ImageDescriptor& imageDesc); + }; + + //! The following class matches between a constant buffer structure in CPU and its counter + //! part on the GPU. It is the equivalent Atom class for TressFXUniformBuffer. + template + class HairUniformBuffer + { + public: + TYPE* operator->() + { + return &m_cpuBuffer; + } + + TYPE* get() + { + return &m_cpuBuffer; + } + + Render::SrgBufferDescriptor& GetBufferDescriptor() { return m_bufferDesc; } + + //! Use this method only if the buffer will be attached to a single Srg. + //! If this is not the case use InitForUndefinedSrg + bool InitForUniqueSrg( + Data::Instance srg, + Render::SrgBufferDescriptor& srgDesc) + { + m_srg = srg; + m_bufferDesc = srgDesc; + + AZ_Error("HairUniformBuffer", m_srg, "Critical Error - no Srg was provided to bind buffer to [%s]", + m_bufferDesc.m_bufferName.GetCStr()); + + RHI::ShaderInputConstantIndex indexHandle = m_srg->FindShaderInputConstantIndex(m_bufferDesc.m_paramNameInSrg); + if (indexHandle.IsNull()) + { + AZ_Error("HairUniformBuffer", false, + "Failed to find shader constant buffer index for [%s] in the SRG.", + m_bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + m_bufferDesc.m_resourceShaderIndex = indexHandle.GetIndex(); + return true; + } + + //! Updates and binds the data to the Srg and copies it to the GPU side. + //! Assumes that the buffer is uniquely attached to the saved srg. + bool UpdateGPUData() + { + if (!m_srg.get()) + { + AZ_Error("HairUniformBuffer", false, "Critical Error - no Srg was provided to bind buffer to [%s]", + m_bufferDesc.m_bufferName.GetCStr()); + return false; + } + + RHI::ShaderInputConstantIndex constantIndex = RHI::ShaderInputConstantIndex(m_bufferDesc.m_resourceShaderIndex); + if (constantIndex.IsNull()) + { + AZ_Error("HairUniformBuffer", false, "Critical Error - Srg index is not valide for [%s]", + m_bufferDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!m_srg->SetConstantRaw(constantIndex, &m_cpuBuffer, m_bufferDesc.m_elementSize)) + { + AZ_Error("HairUniformBuffer", false, "Failed to bind Constant Buffer for [%s]", m_bufferDesc.m_bufferName.GetCStr()); + return false; + } + return true; + } + + //! Updates Binds the data to the Srg and copies it to the GPU side. + //! Assumes that the buffer can be associated with various srgs. + bool UpdateGPUData( + Data::Instance srg, + Render::SrgBufferDescriptor& srgDesc) + { + if (!srg) + { + AZ_Error("HairUniformBuffer", srg, "Critical Error - no Srg was provided to bind buffer to [%s]", + srgDesc.m_bufferName.GetCStr()); + return false; + } + + RHI::ShaderInputConstantIndex indexHandle = srg->FindShaderInputConstantIndex(srgDesc.m_paramNameInSrg); + if (indexHandle.IsNull()) + { + AZ_Error("HairUniformBuffer", false, + "Failed to find shader constant buffer index for [%s] in the SRG.", + srgDesc.m_paramNameInSrg.GetCStr()); + return false; + } + + if (!srg->SetConstantRaw(indexHandle, &m_cpuBuffer, srgDesc.m_elementSize)) + { + AZ_Error("HairUniformBuffer", false, "Failed to bind Constant Buffer for [%s]", srgDesc.m_bufferName.GetCStr()); + return false; + } + return true; + } + + + private: + TYPE m_cpuBuffer; + + //! When this srg is set as nullptr, we assume that the buffer can be shared + //! between several passes (as done for PerView and PerScene). + Data::Instance m_srg = nullptr; + + Render::SrgBufferDescriptor m_bufferDesc = Render::SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, + RHI::Format::Unknown, sizeof(TYPE), 1, + Name{"BufferNameUndefined"}, Name{"BufferNameUndefined"}, 0, 0 + ); + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp new file mode 100644 index 0000000000..21dfaaafd6 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + + HairDispatchItem::~HairDispatchItem() + { + } + + // Reference in the code above that tackles handling of the different dispatches possible + // This one is targeting the per vertex dispatches for now. + void HairDispatchItem::InitSkinningDispatch( + RPI::Shader* shader, + RPI::ShaderResourceGroup* hairGenerationSrg, + RPI::ShaderResourceGroup* hairSimSrg, + uint32_t elementsAmount ) + { + m_shader = shader; + RHI::DispatchDirect dispatchArgs( + elementsAmount, 1, 1, + TRESSFX_SIM_THREAD_GROUP_SIZE, 1, 1 + ); + m_dispatchItem.m_arguments = dispatchArgs; + RHI::PipelineStateDescriptorForDispatch pipelineDesc; + m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId).ConfigurePipelineState(pipelineDesc); + m_dispatchItem.m_pipelineState = m_shader->AcquirePipelineState(pipelineDesc); + m_dispatchItem.m_shaderResourceGroupCount = 2; // the per pass will be added by each pass. + m_dispatchItem.m_shaderResourceGroups = { + hairGenerationSrg->GetRHIShaderResourceGroup(), // Static generation data + hairSimSrg->GetRHIShaderResourceGroup() // Dynamic data changed between passes + }; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h new file mode 100644 index 0000000000..aa63884444 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairDispatchItem.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace RHI + { + class BufferView; + class PipelineState; + } + + namespace RPI + { + class Buffer; + class ModelLod; + class Shader; + class ShaderResourceGroup; + } + + namespace Render + { + namespace Hair + { + class HairSkinningComputePass; + class HairRenderObject; + + enum class DispatchLevel + { + DISPATCHLEVEL_VERTEX, + DISPATCHLEVEL_STRAND + }; + + //! Holds and manages an RHI DispatchItem for a specific skinned mesh, and the resources that are + //! needed to build and maintain it. + class HairDispatchItem + : public Data::InstanceData + { + public: + AZ_CLASS_ALLOCATOR(HairDispatchItem, AZ::SystemAllocator, 0); + + HairDispatchItem() = default; + + //! One dispatch item per hair object per computer pass. + //! The amount of dispatches depends on the amount of vertices required to be created + + ~HairDispatchItem(); + + void InitSkinningDispatch( + RPI::Shader* shader, + RPI::ShaderResourceGroup* hairGenerationSrg, + RPI::ShaderResourceGroup* hairSimSrg, + uint32_t elementsAmount + ); + + RHI::DispatchItem* GetDispatchItem() { return &m_dispatchItem; } + + private: + RHI::DispatchItem m_dispatchItem; + RPI::Shader* m_shader; + }; + + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp new file mode 100644 index 0000000000..c56d4a3489 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -0,0 +1,532 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include +#include + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + uint32_t HairFeatureProcessor::s_instanceCount = 0; + + HairFeatureProcessor::HairFeatureProcessor() + { + HairParentPassName = Name{ "HairParentPass" }; + + HairPPLLRasterPassName = Name{ "HairPPLLRasterPass" }; + HairPPLLResolvePassName = Name{ "HairPPLLResolvePass" }; + + GlobalShapeConstraintsPassName = Name{ "HairGlobalShapeConstraintsComputePass" }; + CalculateStrandDataPassName = Name{ "HairCalculateStrandLevelDataComputePass" }; + VelocityShockPropagationPassName = Name{ "HairVelocityShockPropagationComputePass" }; + LocalShapeConstraintsPassName = Name{ "HairLocalShapeConstraintsComputePass" }; + LengthConstriantsWindAndCollisionPassName = Name{ "HairLengthConstraintsWindAndCollisionComputePass" }; + UpdateFollowHairPassName = Name{ "HairUpdateFollowHairComputePass" }; + + ++s_instanceCount; + + if (!CreatePerPassResources()) + { // this might not be an error - if the pass system is still empty / minimal + // and these passes are not part of the minimal pipeline, they will not + // be created. + AZ_Error("Hair Gem", false, "Failed to create the hair shared buffer resource"); + } + } + + HairFeatureProcessor::~HairFeatureProcessor() + { + m_linkedListNodesBuffer.reset(); + m_sharedDynamicBuffer.reset(); + } + + void HairFeatureProcessor::Reflect(ReflectContext* context) + { + HairGlobalSettings::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext + ->Class() + ->Version(0); + } + } + + void HairFeatureProcessor::Activate() + { + m_hairFeatureProcessorRegistryName = { "AZ::Render::Hair::HairFeatureProcessor" }; + + EnableSceneNotification(); + TickBus::Handler::BusConnect(); + HairGlobalSettingsRequestBus::Handler::BusConnect(); + } + + void HairFeatureProcessor::Deactivate() + { + DisableSceneNotification(); + TickBus::Handler::BusDisconnect(); + HairGlobalSettingsRequestBus::Handler::BusDisconnect(); + } + + void HairFeatureProcessor::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) + { + const float MAX_SIMULATION_TIME_STEP = 0.033f; // Assuming minimal of 30 fps + m_currentDeltaTime = AZStd::min(deltaTime, MAX_SIMULATION_TIME_STEP); + for (auto& object : m_hairRenderObjects) + { + object->SetFrameDeltaTime(m_currentDeltaTime); + } + } + + int HairFeatureProcessor::GetTickOrder() + { + return AZ::TICK_PRE_RENDER; + } + + void HairFeatureProcessor::AddHairRenderObject(Data::Instance renderObject) + { + if (!m_initialized) + { + Init(m_renderPipeline); + } + + m_hairRenderObjects.push_back(renderObject); + + BuildDispatchAndDrawItems(renderObject); + + EnablePasses(true); + } + + void HairFeatureProcessor::EnablePasses(bool enable) + { + for (auto& [passName, pass] : m_computePasses) + { + pass->SetEnabled(enable); + } + + m_hairPPLLRasterPass->SetEnabled(enable); + m_hairPPLLResolvePass->SetEnabled(enable); + } + + bool HairFeatureProcessor::RemoveHairRenderObject(Data::Instance renderObject) + { + for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter) + { + if (objIter->get() == renderObject) + { + m_hairRenderObjects.erase(objIter); + if (m_hairRenderObjects.empty()) + { + EnablePasses(false); + } + return true; + } + } + return false; + } + + void HairFeatureProcessor::UpdateHairSkinning() + { + // Copying CPU side m_SimCB content to the GPU buffer (matrices, wind parameters..) + + for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter) + { + if (!objIter->get()->IsEnabled()) + { + return; + } + objIter->get()->Update(); + } + } + + //! Assumption: the hair is being updated per object before this method is called and + //! therefore the parameters that were calculated per object can be directly copied + //! without need to recalculate as in the original code. + //! Make sure there are no more than (currently) 16 hair objects or update dynamic handling. + //! This DOES NOT do the srg binding since it can be shared but by pass itself when compiling resources. + void HairFeatureProcessor::FillHairMaterialsArray(std::vector& renderSettings) + { + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + AMD::ShadeParams& hairMaterial = m_hairObjectsMaterialsCB->HairShadeParams[i]; + hairMaterial.FiberRadius = renderSettings[i]->FiberRadius; + hairMaterial.ShadowAlpha = renderSettings[i]->ShadowAlpha; + hairMaterial.FiberSpacing = renderSettings[i]->FiberSpacing; + hairMaterial.HairEx2 = renderSettings[i]->HairEx2; + hairMaterial.HairKs2 = renderSettings[i]->HairKs2; + hairMaterial.MatKValue = renderSettings[i]->MatKValue; + hairMaterial.Roughness = renderSettings[i]->Roughness; + hairMaterial.CuticleTilt = renderSettings[i]->CuticleTilt; + } + } + + //========================================================================================== + void HairFeatureProcessor::Simulate(const FeatureProcessor::SimulatePacket& packet) + { + AZ_PROFILE_FUNCTION(AzRender); + AZ_ATOM_PROFILE_FUNCTION("Hair", "HairFeatureProcessor: Simulate"); + AZ_UNUSED(packet); + + if (m_hairRenderObjects.empty()) + { // there might not be are no render objects yet, indicating that scene data might not be ready + // to initialize just yet. + return; + } + + if (m_forceRebuildRenderData) + { + for (auto& hairRenderObject : m_hairRenderObjects) + { + BuildDispatchAndDrawItems(hairRenderObject); + } + m_forceRebuildRenderData = false; + m_addDispatchEnabled = true; + } + + // Prepare materials array for the per pass srg + std::vector hairObjectsRenderMaterials; + uint32_t obj = 0; + for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter, ++obj) + { + HairRenderObject* renderObject = objIter->get(); + if (!renderObject->IsEnabled()) + { + continue; + } + renderObject->Update(); + + // [To Do] Hair - update the following parameters for dynamic LOD control + // should change or when parameters are being changed on the editor side. +// float Distance = sqrtf( m_activeScene.scene->GetCameraPos().x * m_activeScene.scene->GetCameraPos().x + +// m_activeScene.scene->GetCameraPos().y * m_activeScene.scene->GetCameraPos().y + +// m_activeScene.scene->GetCameraPos().z * m_activeScene.scene->GetCameraPos().z); +// objIter->get()->UpdateRenderingParameters( +// renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance); + + // this will be used for the constant buffer + hairObjectsRenderMaterials.push_back(renderObject->GetHairRenderParams()); + } + FillHairMaterialsArray(hairObjectsRenderMaterials); + } + + + void HairFeatureProcessor::Render([[maybe_unused]] const FeatureProcessor::RenderPacket& packet) + { + AZ_PROFILE_FUNCTION(AzRender); + AZ_ATOM_PROFILE_FUNCTION("Hair", "HairFeatureProcessor: Render"); + + if (!m_initialized || !m_addDispatchEnabled) + { // Skip adding dispatches / Draw packets for this frame until initialized and the shaders are ready + return; + } + + // [To Do] - no culling scheme applied yet. + // Possibly setup the hair culling work group to be re-used for each view. + // See SkinnedMeshFeatureProcessor::Render for more details + + // Add dispatch per hair object per Compute passes + for (auto& [passName, pass] : m_computePasses) + { + pass->AddDispatchItems(m_hairRenderObjects); + } + + // Add all hair objects to the Render / Raster Pass + m_hairPPLLRasterPass->AddDrawPackets(m_hairRenderObjects); + } + + void HairFeatureProcessor::ClearPasses() + { + m_initialized = false; // Avoid simulation or render + m_computePasses.clear(); + m_hairPPLLRasterPass = nullptr; + m_hairPPLLResolvePass = nullptr; + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + m_forceClearRenderData = true; + } + + void HairFeatureProcessor::OnRenderPipelineAdded(RPI::RenderPipelinePtr renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline.get()->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + Init(renderPipeline.get()); + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + } + + void HairFeatureProcessor::OnRenderPipelineRemoved(RPI::RenderPipeline* renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + m_renderPipeline = nullptr; + ClearPasses(); + } + + void HairFeatureProcessor::OnRenderPipelinePassesChanged(RPI::RenderPipeline* renderPipeline) + { + // Proceed only if this is the main pipeline that contains the parent pass + if (!renderPipeline->GetRootPass()->FindPassByNameRecursive(HairParentPassName)) + { + return; + } + + Init(renderPipeline); + + // Mark for all passes to evacuate their render data and recreate it. + m_forceRebuildRenderData = true; + } + + bool HairFeatureProcessor::Init(RPI::RenderPipeline* renderPipeline) + { + m_renderPipeline = renderPipeline; + + ClearPasses(); + + // Compute Passes - populate the passes map + bool resultSuccess = InitComputePass(GlobalShapeConstraintsPassName); + resultSuccess &= InitComputePass(CalculateStrandDataPassName); + resultSuccess &= InitComputePass(VelocityShockPropagationPassName); + resultSuccess &= InitComputePass(LocalShapeConstraintsPassName, true); // restore shape over several iterations + resultSuccess &= InitComputePass(LengthConstriantsWindAndCollisionPassName); + resultSuccess &= InitComputePass(UpdateFollowHairPassName); + + // Rendering Passes + resultSuccess &= InitPPLLFillPass(); + resultSuccess &= InitPPLLResolvePass(); + + // Don't enable passes if no hair object was added yet (depending on activation order) + if (m_hairRenderObjects.empty()) + { + EnablePasses(false); + } + + m_initialized = resultSuccess; + + // this might not be an error - if the pass system is still empty / minimal + // and these passes are not part of the minimal pipeline, they will not + // be created. + AZ_Error("Hair Gem", resultSuccess, "Passes could not be retrieved."); + + return m_initialized; + } + + bool HairFeatureProcessor::CreatePerPassResources() + { + if (m_sharedResourcesCreated) + { + return true; + } + + SrgBufferDescriptor descriptor; + AZStd::string instanceNumber = AZStd::to_string(s_instanceCount); + + // Shared buffer - this is a persistent buffer that needs to be created manually. + { + AZStd::vector hairDynamicDescriptors; + DynamicHairData::PrepareSrgDescriptors(hairDynamicDescriptors, 1, 1); + Name sharedBufferName = Name{ "HairSharedDynamicBuffer" + instanceNumber }; + if (!HairSharedBufferInterface::Get()) + { // Since there can be several pipelines, allocate the shared buffer only for the + // first one and from that moment on it will be used through its interface + m_sharedDynamicBuffer = AZStd::make_unique(sharedBufferName.GetCStr(), hairDynamicDescriptors); + } + } + + // PPLL nodes buffer + { + descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + PPLL_NODE_SIZE, RESERVED_PIXELS_FOR_OIT, + Name{ "LinkedListNodesPPLL" + instanceNumber }, Name{ "m_linkedListNodes" }, 0, 0 + ); + m_linkedListNodesBuffer = UtilityClass::CreateBuffer("Hair Gem", descriptor, nullptr); + if (!m_linkedListNodesBuffer) + { + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", descriptor.m_bufferName.GetCStr()); + return false; + } + } + + m_sharedResourcesCreated = true; + return true; + } + + void HairFeatureProcessor::GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) + { + AZStd::lock_guard lock(m_hairGlobalSettingsMutex); + hairGlobalSettings = m_hairGlobalSettings; + } + + void HairFeatureProcessor::SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) + { + { + AZStd::lock_guard lock(m_hairGlobalSettingsMutex); + m_hairGlobalSettings = hairGlobalSettings; + } + HairGlobalSettingsNotificationBus::Broadcast(&HairGlobalSettingsNotifications::OnHairGlobalSettingsChanged, m_hairGlobalSettings); + } + + bool HairFeatureProcessor::InitComputePass(const Name& passName, bool allowIterations) + { + m_computePasses[passName] = nullptr; + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "%s does NOT have render pipeline set yet", passName.GetCStr()); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(passName); + if (desiredPass) + { + m_computePasses[passName] = static_cast(desiredPass.get()); + m_computePasses[passName]->SetFeatureProcessor(this); + m_computePasses[passName]->SetAllowIterations(allowIterations); + } + else + { + AZ_Error("Hair Gem", false, + "%s does not exist in this pipeline. Check your game project's .pass assets.", + passName.GetCStr()); + return false; + } + + return true; + } + + bool HairFeatureProcessor::InitPPLLFillPass() + { + m_hairPPLLRasterPass = nullptr; // reset it to null, just in case it fails to load the assets properly + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "Hair Fill Pass does NOT have render pipeline set yet"); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(HairPPLLRasterPassName); + if (desiredPass) + { + m_hairPPLLRasterPass = static_cast(desiredPass.get()); + m_hairPPLLRasterPass->SetFeatureProcessor(this); + } + else + { + AZ_Error("Hair Gem", false, "HairPPLLRasterPass does not have any valid passes. Check your game project's .pass assets."); + return false; + } + return true; + } + + bool HairFeatureProcessor::InitPPLLResolvePass() + { + m_hairPPLLResolvePass = nullptr; // reset it to null, just in case it fails to load the assets properly + if (!m_renderPipeline) + { + AZ_Error("Hair Gem", false, "Hair Fill Pass does NOT have render pipeline set yet"); + return false; + } + + RPI::Ptr desiredPass = m_renderPipeline->GetRootPass()->FindPassByNameRecursive(HairPPLLResolvePassName); + if (desiredPass) + { + m_hairPPLLResolvePass = static_cast(desiredPass.get()); + m_hairPPLLResolvePass->SetFeatureProcessor(this); + } + else + { + AZ_Error("Hair Gem", false, "HairPPLLResolvePassTemplate does not have valid passes. Check your game project's .pass assets."); + return false; + } + return true; + } + + void HairFeatureProcessor::BuildDispatchAndDrawItems(Data::Instance renderObject) + { + HairRenderObject* renderObjectPtr = renderObject.get(); + + // Dispatches for Compute passes + m_computePasses[GlobalShapeConstraintsPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[CalculateStrandDataPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_STRAND); + m_computePasses[VelocityShockPropagationPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[LocalShapeConstraintsPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_STRAND); + m_computePasses[LengthConstriantsWindAndCollisionPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + m_computePasses[UpdateFollowHairPassName]->BuildDispatchItem( + renderObjectPtr, DispatchLevel::DISPATCHLEVEL_VERTEX); + + // Render / Raster pass - adding the object will schedule Srgs binding + // and DrawItem build. + m_hairPPLLRasterPass->SchedulePacketBuild(renderObjectPtr); + } + + Data::Instance HairFeatureProcessor::GetHairSkinningComputegPass() + { + if (!m_computePasses[GlobalShapeConstraintsPassName]) + { + Init(m_renderPipeline); + } + return m_computePasses[GlobalShapeConstraintsPassName]; + } + + Data::Instance HairFeatureProcessor::GetHairPPLLRasterPass() + { + if (!m_hairPPLLRasterPass) + { + Init(m_renderPipeline); + } + return m_hairPPLLRasterPass; + } + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h new file mode 100644 index 0000000000..c56dc5c921 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +#include + +#include +#include + +// Hair specific +#include + +#include +#include +#include + +#include +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + struct ImageDescriptor; + } + + namespace Render + { + namespace Hair + { + //! The following lines dictate the overall memory consumption reserved for the + //! PPLL fragments. The memory consumption using this technique is quite large (can + //! grow far above 1GB in GPU/CPU data and in extreme cases of zoom up with dense hair + //! might still not be enough. For this reason it is recommended to utilize the + //! approximated lighting scheme originally suggested by Eidos Montreal and do OIT using + //! several frame buffer layers for storing closest fragments data. + //! Using the approximated technique, the OIT buffers will consume roughly 256MB for 4K + //! resolution render with 4 OIT layers. + static const size_t PPLL_NODE_SIZE = 16; + static const size_t AVE_FRAGS_PER_PIXEL = 24; + static const size_t SCREEN_WIDTH = 1920; + static const size_t SCREEN_HEIGHT = 1080; + static const size_t RESERVED_PIXELS_FOR_OIT = SCREEN_WIDTH * SCREEN_HEIGHT * AVE_FRAGS_PER_PIXEL; + + class HairSkinningPass; + class HairRenderObject; + + //! The HairFeatureProcessor (FP) is the glue between the various hair components / entities in + //! the scene and their passes / shaders. + //! The FP will keep track of all active hair objects, will run their skinning update iteration + //! and will then populate them into each of the passes to be computed and rendered. + //! The overall process involves update, skinning, collision, and simulation compute, fragment + //! raster fill, and final frame buffer OIT resolve. + //! The last part can be switched to support the smaller foot print pass version that instead + //! of fragments list (PPLL) will use fill screen buffers to approximate OIT layer resolve. + class HairFeatureProcessor final + : public RPI::FeatureProcessor + , public HairGlobalSettingsRequestBus::Handler + , private AZ::TickBus::Handler + { + Name HairParentPassName; + + Name HairPPLLRasterPassName; + Name HairPPLLResolvePassName; + + Name GlobalShapeConstraintsPassName; + Name CalculateStrandDataPassName; + Name VelocityShockPropagationPassName; + Name LocalShapeConstraintsPassName; + Name LengthConstriantsWindAndCollisionPassName; + Name UpdateFollowHairPassName; + + public: + AZ_RTTI(AZ::Render::Hair::HairFeatureProcessor, "{5F9DDA81-B43F-4E30-9E56-C7C3DC517A4C}", RPI::FeatureProcessor); + + static void Reflect(AZ::ReflectContext* context); + + HairFeatureProcessor(); + virtual ~HairFeatureProcessor(); + + + void UpdateHairSkinning(); + + bool Init(RPI::RenderPipeline* pipeline); + bool IsInitialized() { return m_initialized; } + + // FeatureProcessor overrides ... + void Activate() override; + void Deactivate() override; + void Simulate(const FeatureProcessor::SimulatePacket& packet) override; + void Render(const FeatureProcessor::RenderPacket& packet) override; + + // AZ::TickBus::Handler overrides + void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; + int GetTickOrder() override; + + void AddHairRenderObject(Data::Instance renderObject); + bool RemoveHairRenderObject(Data::Instance renderObject); + + // RPI::SceneNotificationBus overrides ... + void OnRenderPipelineAdded(RPI::RenderPipelinePtr renderPipeline) override; + void OnRenderPipelineRemoved(RPI::RenderPipeline* renderPipeline) override; + void OnRenderPipelinePassesChanged(RPI::RenderPipeline* renderPipeline) override; + + Data::Instance GetHairSkinningComputegPass(); + Data::Instance GetHairPPLLRasterPass(); + + //! Update the hair objects materials array. + void FillHairMaterialsArray(std::vector& renderSettings); + + Data::Instance GetPerPixelListBuffer() { return m_linkedListNodesBuffer; } + HairUniformBuffer& GetMaterialsArray() { return m_hairObjectsMaterialsCB; } + + void ForceRebuildRenderData() { m_forceRebuildRenderData = true; } + void SetAddDispatchEnable(bool enable) { m_addDispatchEnabled = enable; } + void SetEnable(bool enable) + { + m_isEnabled = enable; + EnablePasses(enable); + } + + bool CreatePerPassResources(); + + void GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) override; + void SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) override; + + private: + AZ_DISABLE_COPY_MOVE(HairFeatureProcessor); + + void ClearPasses(); + + bool InitPPLLFillPass(); + bool InitPPLLResolvePass(); + bool InitComputePass(const Name& passName, bool allowIterations = false); + + void BuildDispatchAndDrawItems(Data::Instance renderObject); + + void EnablePasses(bool enable); + + //! The following will serve to register the FP in the Thumbnail system + AZStd::vector m_hairFeatureProcessorRegistryName; + + //! The render pipeline is acquired and set when a pipeline is created or changed + //! and accordingly the passes and the feature processor are associated. + //! Notice that scene can contain several pipelines all using the same feature + //! processor. On the pass side, it will acquire the scene and request the FP, + //! but on the FP side, it will only associate to the latest pass hence such a case + //! might still be a problem. If needed, it can be resolved using a map for each + //! pass name per pipeline. + RPI::RenderPipeline* m_renderPipeline = nullptr; + + //! The Hair Objects in the scene (one per hair component) + AZStd::list> m_hairRenderObjects; + + //! Simulation Compute Passes + AZStd::unordered_map > m_computePasses; + + // Render Passes + Data::Instance m_hairPPLLRasterPass = nullptr; + Data::Instance m_hairPPLLResolvePass = nullptr; + + //-------------------------------------------------------------- + // Per Pass Resources + //-------------------------------------------------------------- + //! The shared buffer used by all dynamic buffer views for the hair skinning / simulation + AZStd::unique_ptr m_sharedDynamicBuffer; // used for the hair data changed between passes. + + //! The constant buffer structure containing an array of all hair objects materials + //! to be used by the full screen resolve pass. + HairUniformBuffer m_hairObjectsMaterialsCB; + + //! PPLL single buffer containing all the PPLL elements + Data::Instance m_linkedListNodesBuffer = nullptr; + //-------------------------------------------------------------- + + //! Per frame delta time for the physics simulation - updated every frame + float m_currentDeltaTime = 0.02f; + //! flag to disable/enable feature processor adding dispatch calls to compute passes. + bool m_addDispatchEnabled = true; + bool m_sharedResourcesCreated = false; + //! reload / pipeline changes force build dispatches and render items + bool m_forceRebuildRenderData = false; + bool m_forceClearRenderData = false; + bool m_initialized = false; + bool m_isEnabled = true; + static uint32_t s_instanceCount; + + HairGlobalSettings m_hairGlobalSettings; + AZStd::mutex m_hairGlobalSettingsMutex; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp new file mode 100644 index 0000000000..df8b6e6a37 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + void HairGlobalSettings::Reflect(ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(2) + ->Field("EnableShadows", &HairGlobalSettings::m_enableShadows) + ->Field("EnableDirectionalLights", &HairGlobalSettings::m_enableDirectionalLights) + ->Field("EnablePunctualLights", &HairGlobalSettings::m_enablePunctualLights) + ->Field("EnableAreaLights", &HairGlobalSettings::m_enableAreaLights) + ->Field("EnableIBL", &HairGlobalSettings::m_enableIBL) + ->Field("HairLightingModel", &HairGlobalSettings::m_hairLightingModel) + ->Field("EnableMarschner_R", &HairGlobalSettings::m_enableMarschner_R) + ->Field("EnableMarschner_TRT", &HairGlobalSettings::m_enableMarschner_TRT) + ->Field("EnableMarschner_TT", &HairGlobalSettings::m_enableMarschner_TT) + ->Field("EnableDiffuseLobe", &HairGlobalSettings::m_enableDiffuseLobe) + ->Field("EnableSpecularLobe", &HairGlobalSettings::m_enableSpecularLobe) + ->Field("EnableTransmittanceLobe", &HairGlobalSettings::m_enableTransmittanceLobe) + ; + + if (auto editContext = serializeContext->GetEditContext()) + { + editContext->Class("Hair Global Settings", "Shared settings across all hair components") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableShadows, "Enable Shadows", "Enable shadows for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableDirectionalLights, "Enable Directional Lights", "Enable directional lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enablePunctualLights, "Enable Punctual Lights", "Enable punctual lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableAreaLights, "Enable Area Lights", "Enable area lights for hair.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableIBL, "Enable IBL", "Enable imaged-based lighting for hair.") + ->DataElement(AZ::Edit::UIHandlers::ComboBox, &HairGlobalSettings::m_hairLightingModel, "Hair Lighting Model", "Determines which lighting equation to use") + ->EnumAttribute(Hair::HairLightingModel::GGX, "GGX") + ->EnumAttribute(Hair::HairLightingModel::Marschner, "Marschner") + ->EnumAttribute(Hair::HairLightingModel::Kajiya, "Kajiya") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_R, "Enable Marschner R", "Enable Marschner R.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TRT, "Enable Marschner TRT", "Enable Marschner TRT.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TT, "Enable Marschner TT", "Enable Marschner TT.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableDiffuseLobe, "Enable Diffuse Lobe", "Enable Diffuse Lobe.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableSpecularLobe, "Enable Specular Lobe", "Enable Specular Lobe.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableTransmittanceLobe, "Enable Transmittance Lobe", "Enable Transmittance Lobe.") + ; + } + } + } + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h new file mode 100644 index 0000000000..c7cf1e3bf4 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + //! Used by all hair components to control the shader options flags used by the hair + //! rendering for lighting and various display features such as the Marschner lighting + //! model components. + struct HairGlobalSettings + { + AZ_TYPE_INFO(AZ::Render::Hair::HairGlobalSettings, "{B4175C42-9F4D-4824-9563-457A84C4983D}"); + + static void Reflect(ReflectContext* context); + + bool m_enableShadows = true; + bool m_enableDirectionalLights = true; + bool m_enablePunctualLights = true; + bool m_enableAreaLights = true; + bool m_enableIBL = true; + HairLightingModel m_hairLightingModel = HairLightingModel::Marschner; + bool m_enableMarschner_R = true; + bool m_enableMarschner_TRT = true; + bool m_enableMarschner_TT = true; + bool m_enableDiffuseLobe = true; + bool m_enableSpecularLobe = true; + bool m_enableTransmittanceLobe = true; + }; + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h new file mode 100644 index 0000000000..e1fd815aea --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettingsBus.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + #pragma once + +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + class HairGlobalSettingsNotifications + : public AZ::EBusTraits + { + public: + // EBusTraits + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual void OnHairGlobalSettingsChanged(const HairGlobalSettings& hairGlobalSettings) = 0; + }; + + typedef AZ::EBus HairGlobalSettingsNotificationBus; + + class HairGlobalSettingsRequests + : public AZ::EBusTraits + { + public: + // EBusTraits + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual void GetHairGlobalSettings(HairGlobalSettings& hairGlobalSettings) = 0; + virtual void SetHairGlobalSettings(const HairGlobalSettings& hairGlobalSettings) = 0; + }; + + typedef AZ::EBus HairGlobalSettingsRequestBus; + } //namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h b/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h new file mode 100644 index 0000000000..4f42114c0c --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairLightingModels.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + AZ_ENUM(HairLightingModel, + GGX, + Marschner, + Kajiya); + } // namespace Hair + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp new file mode 100644 index 0000000000..f006df6afd --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp @@ -0,0 +1,1209 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include + +#include + +#include +#include + +#include + +// Hair Specific +#include +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + namespace Hair + { + uint32_t HairRenderObject::s_objectCounter = 0; + + AMD::float4 ToAMDFloat4(const AZ::Vector4& vec4) + { + AMD::float4 f4; + f4.x = vec4.GetX(); + f4.y = vec4.GetY(); + f4.z = vec4.GetZ(); + f4.w = vec4.GetW(); + return f4; + } + + AMD::float4 ToAMDFloat4(const AZ::Color& color) + { + AMD::float4 f4; + f4.x = color.GetR(); + f4.y = color.GetG(); + f4.z = color.GetB(); + f4.w = color.GetA(); + return f4; + } + + //!===================================================================================== + //! + //! DynamicHairData + //! + //!===================================================================================== + //! Preparation of the descriptors table of all the dynamic stream buffers within the class. + //! Do not call this method manually as it is called from CreateAndBindGPUResources. + void DynamicHairData::PrepareSrgDescriptors( + AZStd::vector& descriptorArray, + int32_t vertexCount, uint32_t strandsCount) + { + descriptorArray.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + + descriptorArray[uint8_t(HairDynamicBuffersSemantics::Position)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositions"}, Name{"m_hairVertexPositions"}, 0, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::PositionsPrev)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositionsPrev"}, Name{"m_hairVertexPositionsPrev"}, 1, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::PositionsPrevPrev)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexPositionsPrevPrev"}, Name{"m_hairVertexPositionsPrevPrev"}, 2, 0 + ); + descriptorArray[uint8_t(HairDynamicBuffersSemantics::Tangent)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"HairVertexTangents"}, Name{"m_hairVertexTangents"}, 3, 0 + ); + + // Notice the following Format::Unknown that indicates StructuredBuffer + // For more info review BufferViewDescriptor.h + descriptorArray[uint8_t(HairDynamicBuffersSemantics::StrandLevelData)] = + SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, + RHI::Format::Unknown, sizeof(TressFXStrandLevelData), strandsCount, + Name{"StrandLevelData"}, Name{"m_strandLevelData"}, 4, 0 + ); + } + + bool DynamicHairData::BindPerObjectSrgForRaster() + { + uint8_t streams[2] = { + uint8_t(HairDynamicBuffersSemantics::Position), + uint8_t(HairDynamicBuffersSemantics::Tangent) + }; + Name offsetNames[2] = { + Name("m_positionBufferOffset"), + Name("m_tangentBufferOffset") + }; + + m_readBuffersViews.resize(2); + + RHI::Buffer* rhiBuffer = SharedBuffer::Get()->GetBuffer()->GetRHIBuffer(); + for (uint8_t index = 0; index < 2 ; ++index) + { + // Buffer view creation from the shared buffer + uint8_t stream = streams[index]; + SrgBufferDescriptor streamDesc = m_dynamicBuffersDescriptors[stream]; + + streamDesc.m_viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[stream]->GetVirtualAddress().m_ptr); + AZ_Assert(streamDesc.m_viewOffsetInBytes % streamDesc.m_elementSize == 0, "Offset of buffer within The SharedBuffer is NOT aligned."); + const RHI::BufferViewDescriptor viewDescriptor = SharedBuffer::CreateResourceViewWithDifferentFormat( + streamDesc.m_viewOffsetInBytes, streamDesc.m_elementCount, streamDesc.m_elementSize, + streamDesc.m_elementFormat, RHI::BufferBindFlags::ShaderRead // No need for ReadWrite in the raster fill + ); + + m_readBuffersViews[index] = RHI::Factory::Get().CreateBufferView(); + RHI::ResultCode resultCode = m_readBuffersViews[index]->Init(*rhiBuffer, viewDescriptor); + if (resultCode != RHI::ResultCode::Success) + { + AZ_Error("Hair Gem", false, "Read BufferView could not be retrieved for [%s]", streamDesc.m_bufferName.GetCStr()); + return false; + } + + // Buffer binding into the raster srg + RHI::ShaderInputBufferIndex indexHandle = m_simSrgForRaster->FindShaderInputBufferIndex(streamDesc.m_paramNameInSrg); + if (!m_simSrgForRaster->SetBufferView(indexHandle, m_readBuffersViews[index].get())) + { + AZ_Error("Hair Gem", false, "Failed to bind raster buffer view for %s", streamDesc.m_bufferName.GetCStr()); + return false; + } + + // And now for the offsets (if using offsets rather than BufferView) + RHI::ShaderInputConstantIndex indexConstHandle = m_simSrgForRaster->FindShaderInputConstantIndex(offsetNames[index]); + if (!m_simSrgForRaster->SetConstant(indexConstHandle, streamDesc.m_viewOffsetInBytes)) + { + AZ_Error("Hair Gem", false, "Failed to bind Raster Constant [%s]", offsetNames[index].GetCStr()); + return false; + } + } + + return true; + } + + //! Matching between the buffers Srg and its buffers descriptors, this method fills the Srg with + //! the views of the buffers to be used by the hair instance. + //! Do not call this method manually as it is called from CreateAndBindGPUResources. + bool DynamicHairData::BindPerObjectSrgForCompute() + { + //! Get the SRG indices for each input stream and set it in the Srg. + //! There are two methods to use the shared buffer: + //! 1. Use a the same buffer with pass sync point and use offset to the data + //! structures inside. The problem there is offset overhead + complex conversions + //! 2. Use buffer views into the original shared buffer and treat them as buffers + //! with the desired data type. It seems that Atom still requires single shared buffer + //! usage within the shader in order to support the sync point. + + // In Atom the usage of BufferView is what permits the usage of different 'buffers' + // allocated from within the originally bound single buffer. + // This allows us to have a single sync point (barrier) between passes only for this + // buffer, while indirectly it is used as multiple buffers used by multiple objects in + // this pass. + for (uint8_t buffer = 0; buffer < uint8_t(HairDynamicBuffersSemantics::NumBufferStreams); ++buffer) + { + SrgBufferDescriptor& streamDesc = m_dynamicBuffersDescriptors[buffer]; + RHI::ShaderInputBufferIndex indexHandle = m_simSrgForCompute->FindShaderInputBufferIndex(streamDesc.m_paramNameInSrg); + streamDesc.m_resourceShaderIndex = indexHandle.GetIndex(); + + if (!m_simSrgForCompute->SetBufferView(indexHandle, m_dynamicBuffersViews[buffer].get())) + { + AZ_Error("Hair Gem", false, "Failed to bind compute buffer view for %s", streamDesc.m_bufferName.GetCStr()); + return false; + } + } + + // Setting the specific per object buffer offsets within the global shared buffer + Name offsetNames[5] = { + // Notice: order must match HairDynamicBuffersSemantics order + Name("m_positionBufferOffset"), + Name("m_positionPrevBufferOffset"), + Name("m_positionPrevPrevBufferOffset"), + Name("m_tangentBufferOffset"), + Name("m_strandLevelDataOffset") + }; + + for (uint8_t buffer=0 ; buffer < uint8_t(HairDynamicBuffersSemantics::NumBufferStreams) ; ++buffer) + { + uint32_t viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[buffer]->GetVirtualAddress().m_ptr); + RHI::ShaderInputConstantIndex indexHandle = m_simSrgForCompute->FindShaderInputConstantIndex(offsetNames[buffer]); + if (!m_simSrgForCompute->SetConstant(indexHandle, viewOffsetInBytes)) + { + AZ_Error("Hair Gem", false, "Failed to bind Compute Constant [%s]", offsetNames[buffer].GetCStr()); + return false; + } + } + + return true; + } + + //! Creates the GPU dynamic buffers of a single hair object + //! Equivalent to TressFXDynamicHairData::CreateGPUResources + bool DynamicHairData::CreateDynamicGPUResources( + Data::Instance computeShader, + Data::Instance rasterShader, + uint32_t vertexCount, uint32_t strandsCount ) + { + AZ_Assert(vertexCount <= std::numeric_limits().max(), "Hair vertex count exceeds uint32_t size."); + + // Create the dynamic shared buffers Srg. + m_simSrgForCompute = UtilityClass::CreateShaderResourceGroup(computeShader, "HairDynamicDataSrg", "Hair Gem"); + m_simSrgForRaster = UtilityClass::CreateShaderResourceGroup(rasterShader, "HairDynamicDataSrg", "Hair Gem"); + if (!m_simSrgForCompute || !m_simSrgForRaster) + { + AZ_Error("Hair Gem", false, "Failed to create the Per Object shader resource group [HairDynamicDataSrg]"); + return false; + } + + // Buffers preparation and creation. + // The shared buffer must already be created and initialized at this point. + PrepareSrgDescriptors(vertexCount, strandsCount); + + m_dynamicBuffersViews.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + m_dynamicViewAllocators.resize(uint8_t(HairDynamicBuffersSemantics::NumBufferStreams)); + + RHI::Buffer* rhiBuffer = SharedBuffer::Get()->GetBuffer()->GetRHIBuffer(); + for (int stream=0; stream< uint8_t(HairDynamicBuffersSemantics::NumBufferStreams) ; ++stream) + { + SrgBufferDescriptor& streamDesc = m_dynamicBuffersDescriptors[stream]; + size_t requiredSize = (uint64_t)streamDesc.m_elementCount * streamDesc.m_elementSize; + m_dynamicViewAllocators[stream] = HairSharedBufferInterface::Get()->Allocate(requiredSize); + if (!m_dynamicViewAllocators[stream]) + { + // Allocated memory will be cleared using the underlying allocator system and + // indirectly the garbage collection. + // Since the garbage collection is ran with delay of 3 frames due to CPU-GPU + // latency, this might result in over allocation at reset / back from game mode. + AZ_Error("Hair Gem", false, "Dynamic Buffer out of memory"); + return false; + } + + // Create the buffer view into the shared buffer - it will be used as a separate buffer + // by the PerObject Srg. + streamDesc.m_viewOffsetInBytes = uint32_t(m_dynamicViewAllocators[stream]->GetVirtualAddress().m_ptr); + AZ_Assert(streamDesc.m_viewOffsetInBytes % streamDesc.m_elementSize == 0, "Offset of buffer within The SharedBuffer is NOT aligned."); + const RHI::BufferViewDescriptor viewDescriptor = SharedBuffer::CreateResourceViewWithDifferentFormat( + streamDesc.m_viewOffsetInBytes, streamDesc.m_elementCount, streamDesc.m_elementSize, + streamDesc.m_elementFormat, RHI::BufferBindFlags::ShaderReadWrite + ); + + m_dynamicBuffersViews[stream] = RHI::Factory::Get().CreateBufferView(); + RHI::ResultCode resultCode = m_dynamicBuffersViews[stream]->Init(*rhiBuffer, viewDescriptor); + if (resultCode != RHI::ResultCode::Success) + { + AZ_Error("Hair Gem", false, "Dynamic BufferView could not be retrieved for [%s]", streamDesc.m_bufferName.GetCStr()); + return false; + } + } + + m_initialized = true; + return true; + } + + //! Data upload - copy the hair mesh asset data (positions and tangents) into the buffers. + //! This is equivalent to: TressFXDynamicHairData::UploadGPUData + bool DynamicHairData::UploadGPUData( + [[maybe_unused]] const char* name, [[maybe_unused]] void* positions, [[maybe_unused]] void* tangents) + { + AZ_Error("Hair Gem", m_initialized, "Attempt to load Hair dynamic data for [%s] without views being properly initilized", name); + + const SrgBufferDescriptor* streamDesc = &m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Position)]; + uint32_t requiredSize = streamDesc->m_elementSize * streamDesc->m_elementCount; + Data::Instance sharedBuffer = HairSharedBufferInterface::Get()->GetBuffer(); + AZ_Error("Hair Gem", sharedBuffer, "Attempt to load Hair dynamic data for [%s] without initialize shared buffer", name); + + bool uploadSuccess = true; + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Position)].m_viewOffsetInBytes); + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::PositionsPrev)].m_viewOffsetInBytes); + uploadSuccess &= sharedBuffer->UpdateData(positions, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::PositionsPrevPrev)].m_viewOffsetInBytes); + + streamDesc = &m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Tangent)]; + requiredSize = streamDesc->m_elementSize * streamDesc->m_elementCount; + uploadSuccess &= sharedBuffer->UpdateData(tangents, requiredSize, + m_dynamicBuffersDescriptors[uint8_t(HairDynamicBuffersSemantics::Tangent)].m_viewOffsetInBytes); + + return uploadSuccess; + } + + + //!===================================================================================== + //! + //! HairRenderObject - Equivalent to TressFXHairObject + //! + //!===================================================================================== + HairRenderObject::~HairRenderObject() + { + Release(); + } + + void HairRenderObject::Release() + { + + } + + void HairRenderObject::PrepareHairGenerationSrgDescriptors(uint32_t vertexCount, uint32_t strandsCount) + { + m_hairGenerationDescriptors.resize(uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)); + AZStd::string objectNumber = AZStd::to_string(s_objectCounter); + // static StructuredBuffers for the various hair strands and bones static data. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::InitialHairPositions)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), vertexCount, + Name{"InitialHairPositions" + objectNumber }, Name{"m_initialHairPositions"}, 0, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::HairRestLengthSRV)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_FLOAT, sizeof(float), vertexCount, + Name{"HairRestLengthSRV" + objectNumber }, Name{"m_hairRestLengthSRV"}, 1, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::HairStrandType)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_UINT, sizeof(uint32_t), strandsCount, + Name{"HairStrandType" + objectNumber }, Name{"m_hairStrandType"}, 2, 0 + }; + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::FollowHairRootOffset)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32B32A32_FLOAT, sizeof(AZ::Vector4), strandsCount, + Name{"FollowHairRootOffset" + objectNumber }, Name{"m_followHairRootOffset"}, 3, 0 + }; + // StructuredBuffer with strandsCount elements specifying hair blend bones and their weight + // Format set to Format::Unknown to avoid set size by type but follow the specified size. + // This is specifically required for StructuredBuffers. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::BoneSkinningData)] = { + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::Unknown, sizeof(AMD::TressFXBoneSkinningData), strandsCount, + Name{"BoneSkinningData" + objectNumber }, Name{"m_boneSkinningData"}, 4, 0 + }; + + // Constant Buffer. RHI::Format::Unknown will create is as structured buffer per + // 'BufferSystemInterface' and the pool type will set it as constant buffer. + m_hairGenerationDescriptors[uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)] = { + RPI::CommonBufferPoolType::Constant, + RHI::Format::Unknown, sizeof(AMD::TressFXSimulationParams), 1, + Name{"TressFXSimConstantBuffer" + objectNumber }, Name{"m_tressfxSimParameters"}, 5, 0 + }; + } + + bool HairRenderObject::CreateAndBindHairGenerationBuffers(uint32_t vertexCount, uint32_t strandsCount) + { + PrepareHairGenerationSrgDescriptors(vertexCount, strandsCount); + + m_hairGenerationBuffers.resize(uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)); + for (uint8_t buffer = 0; buffer < uint8_t(HairGenerationBuffersSemantics::NumBufferStreams); ++buffer) + { + SrgBufferDescriptor& bufferDesc = m_hairGenerationDescriptors[buffer]; + if (buffer == uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)) + { + if (!m_simCB.InitForUniqueSrg(m_hairGenerationSrg, bufferDesc)) + { + return false; + } + } + else + { + m_hairGenerationBuffers[buffer] = UtilityClass::CreateBufferAndBindToSrg("Hair Gem", bufferDesc, m_hairGenerationSrg); + if (!m_hairGenerationBuffers[buffer]) + { + return false; // No need for error message as it was done already. + } + } + } + return true; + } + + //! Updates the buffers data for the hair generation. + //! Notice: does not update the bone matrices that will be updated every frame. + bool HairRenderObject::UploadGPUData(const char* name, AMD::TressFXAsset* asset) + { + // The following must correlate the order in HairGenerationBuffersSemantics + void* buffersData[uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)] = { + (void*)asset->m_positions.data(), + (void*)asset->m_restLengths.data(), + (void*)asset->m_strandTypes.data(), + (void*)asset->m_followRootOffsets.data(), + (void*)asset->m_boneSkinningData.data(), + nullptr, // updated by the HairUniformBuffer class + }; + + // The data update of the constant buffer is NOT done here but via the class update + for (uint8_t buffer = 0; buffer < uint8_t(HairGenerationBuffersSemantics::NumBufferStreams) ; ++buffer) + { + const SrgBufferDescriptor& streamDesc = m_hairGenerationDescriptors[buffer]; + uint32_t requiredSize = streamDesc.m_elementSize * streamDesc.m_elementCount; + + if (buffer == uint8_t(HairGenerationBuffersSemantics::TressFXSimulationConstantBuffer)) + { + if (!m_simCB.UpdateGPUData()) + { + return false; + } + } + else + { + if (!m_hairGenerationBuffers[buffer]->UpdateData(buffersData[buffer], requiredSize, 0)) + { + AZ_Error("Hair Gem", false, "[%s] Failed to upload data to GPU buffer [%s]", name, streamDesc.m_bufferName.GetCStr()); + return false; + } + } + } + return true; + } + + void HairRenderObject::PrepareRenderSrgDescriptors() + { + AZ_Error("Hair Gem", m_hairRenderSrg, "Error - m_hairRenderSrg was not created yet"); + + m_hairRenderDescriptors.resize(uint8_t(HairRenderBuffersSemantics::NumBufferStreams)); + AZStd::string objectNumber = AZStd::to_string(s_objectCounter); + + // Rendering constant buffers creation + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::RenderCB)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXRenderParams), 1, + Name{ "TressFXRenderConstantBuffer" + objectNumber }, Name{ "m_tressFXRenderParameters" }, 0, 0 + ); + + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandCB)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Constant, RHI::Format::Unknown, + sizeof(AMD::TressFXStrandParams), 1, + Name{ "TressFXStrandConstantBuffer" + objectNumber}, Name{ "m_tressFXStrandParameters" }, 0, 0 + ); + + // Albedo texture Srg binding indices + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Invalid, RHI::Format::R32_UINT, sizeof(uint32_t), 1, + Name{"HairBaseAlbedo" + objectNumber}, Name{"m_baseAlbedoTexture"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputImageIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)].m_paramNameInSrg).GetIndex(); + + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::Invalid, RHI::Format::R32_UINT, sizeof(uint32_t), 1, + Name{"HairStrandAlbedo" + objectNumber}, Name{"m_strandAlbedoTexture"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputImageIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)].m_paramNameInSrg).GetIndex(); + + // Vertices Data creation and bind: vertex thickness and texture coordinates. + // Vertex thickness + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32_FLOAT, sizeof(float), m_NumTotalVertices, + Name{ "HairVertRenderParams" + objectNumber}, Name{ "m_hairThicknessCoeffs" }, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputBufferIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)].m_paramNameInSrg).GetIndex(); + + // Texture coordinates + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)] = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadOnly, + RHI::Format::R32G32_FLOAT, 2 * sizeof(float), m_NumTotalStrands, + Name{"HairTexCoords" + objectNumber}, Name{"m_hairStrandTexCd"}, 0, 0 + ); + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)].m_resourceShaderIndex = + m_hairRenderSrg->FindShaderInputBufferIndex(m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)].m_paramNameInSrg).GetIndex(); + } + + + //! This is the binding method - not the actual content update that will happen every frame update. + bool HairRenderObject::BindRenderSrgResources() + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + // Constant buffer structures - the bind and update come together. + bool bindSuccess = true; + + bindSuccess &= m_renderCB.UpdateGPUData(); + bindSuccess &= m_strandCB.UpdateGPUData(); + + // Albedo textures + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_baseAlbedo)) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_strandAlbedo)) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + + // Vertex streams: thickness and texture coordinates + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)]; + if (!m_hairRenderSrg->SetBufferView(RHI::ShaderInputBufferIndex(desc->m_resourceShaderIndex), m_hairVertexRenderParams->GetBufferView())) + { + bindSuccess = false; + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", desc->m_bufferName.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)]; + if (!m_hairRenderSrg->SetBufferView(RHI::ShaderInputBufferIndex(desc->m_resourceShaderIndex), m_hairTexCoords->GetBufferView())) + { + AZ_Error("Hair Gem", false, "Failed to bind buffer view for [%s]", desc->m_bufferName.GetCStr()); + bindSuccess = false; + } + return bindSuccess; + } + + + //! Creation of the render Srg m_hairRenderSrg, followed by creation and binding of the + //! GPU render resources: vertex thickness, vertex UV, hair albedo maps and two constant buffers. + bool HairRenderObject::CreateRenderingGPUResources( + Data::Instance shader, AMD::TressFXAsset& asset, const char* assetName) + { + //-------------------- Render Srg Creation --------------------- + m_hairRenderSrg = UtilityClass::CreateShaderResourceGroup(shader, "HairRenderingMaterialSrg", "Hair Gem"); + if (!m_hairRenderSrg) + { + AZ_Error("Hair Gem", false, + "Failed to create the hair render resource group [m_hairRenderSrg] for model [%s]", assetName ); + return false; + } + + //------------------- Resource Descriptors --------------------- + // Prepare descriptors for the various data creation including Srg index. + // This method should not bind the descriptors as binding will be done after we + // update the data (before the pass dispatch) + PrepareRenderSrgDescriptors(); + + //-------------------- Constant Buffers Creation ------------------- + // Remark: the albedo images will not be created here but during asset load. + // Constant buffer structures + bool bindSuccess = true; + bindSuccess &= m_renderCB.InitForUniqueSrg(m_hairRenderSrg, + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::RenderCB)]); + bindSuccess &= m_strandCB.InitForUniqueSrg(m_hairRenderSrg, + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandCB)]); + + if (!bindSuccess) + { + AZ_Error("Hair Gem", false, "Failed to InitForUniqueSrg hair render for model [%s]", assetName); + return false; + } + + // Vertices Data creation and bind: vertex thickness and texture coordinates. + m_hairVertexRenderParams = UtilityClass::CreateBuffer("Hair Gem", + m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)], nullptr); + if (!m_hairVertexRenderParams.get()) + { + AZ_Error("Hair Gem", false, "Failed to create hair vertex buffer for model [%s]", assetName); + return false; + } + + if (asset.m_strandUV.data()) + { + m_hairTexCoords = UtilityClass::CreateBuffer("Hair Gem", m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)], nullptr); + } + + //------------ Index Buffer ------------ + m_TotalIndices = asset.GetNumHairTriangleIndices(); + + RHI::BufferInitRequest request; + uint32_t indexBufferSize = m_TotalIndices * sizeof(uint32_t); + m_indexBuffer = RHI::Factory::Get().CreateBuffer(); + request.m_buffer = m_indexBuffer.get(); + request.m_descriptor = RHI::BufferDescriptor{ + RHI::BufferBindFlags::ShaderRead | RHI::BufferBindFlags::InputAssembly, + indexBufferSize + }; + request.m_initialData = (void*)asset.m_triangleIndices.data(); + + RHI::Ptr bufferPool = RPI::BufferSystemInterface::Get()->GetCommonBufferPool(RPI::CommonBufferPoolType::StaticInputAssembly); + if (!bufferPool) + { + AZ_Error("Hair Gem", false, "Common buffer pool for index buffer could not be created"); + return false; + } + + RHI::ResultCode result = bufferPool->InitBuffer(request); + AZ_Error("Hair Gem", result == RHI::ResultCode::Success, "Failed to initialize index buffer - error [%d]", result); + + // create index buffer view + m_indexBufferView = RHI::IndexBufferView(*m_indexBuffer.get(), 0, indexBufferSize, RHI::IndexFormat::Uint32 ); + + return true; + } + + + //! Bind Render Srg (m_hairRenderSrg) resources. No resources data update should be doe here + //! Notice that this also loads the images and is slower if a new asset is required. + //! If the image was not changed it should only bind without the retrieve operation. + bool HairRenderObject::PopulateDrawStrandsBindSet(AMD::TressFXRenderingSettings* pRenderSettings) + { + // First, Directly loading from the asset stored in the render settings. + if (pRenderSettings) + { + m_baseAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_baseAlbedoAsset); + m_strandAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_strandAlbedoAsset); + } + + // Fallback using the texture name stored in the render settings. + // This method should only called when there is an update in the parameters + // and / or reload textures only when it is specifically required! + if (!m_baseAlbedo) + { + AZStd::string baseAlbedoName = "defaultwhite.png.streamingimage"; + if (pRenderSettings && pRenderSettings->m_BaseAlbedoName != "") + { + baseAlbedoName = pRenderSettings->m_BaseAlbedoName; + } + m_baseAlbedo = UtilityClass::LoadStreamingImage(baseAlbedoName.c_str(), "Hair Gem"); + } + if (!m_strandAlbedo) + { + AZStd::string strandAlbedoName = "defaultwhite.png.streamingimage"; + if (pRenderSettings && pRenderSettings->m_StrandAlbedoName != "") + { + strandAlbedoName = pRenderSettings->m_StrandAlbedoName; + } + m_strandAlbedo = UtilityClass::LoadStreamingImage(strandAlbedoName.c_str(), "Hair Gem"); + } + + // Bind the Srg resources + return BindRenderSrgResources(); + } + + bool HairRenderObject::LoadImageAsset(AMD::TressFXRenderingSettings* pRenderSettings) + { + Data::Instance baseAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_baseAlbedoAsset); + Data::Instance strandAlbedo = RPI::StreamingImage::FindOrCreate(pRenderSettings->m_strandAlbedoAsset); + + // Protect Update and Render if on async threads. + AZStd::lock_guard lock(m_mutex); + + // Set albedo textures on shader resources. + m_baseAlbedo = baseAlbedo; + m_strandAlbedo = strandAlbedo; + + bool success = true; + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::BaseAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_baseAlbedo)) + { + success = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::StrandAlbedo)]; + if (!m_hairRenderSrg->SetImage(RHI::ShaderInputImageIndex(desc->m_resourceShaderIndex), m_strandAlbedo)) + { + success = false; + AZ_Error("Hair Gem", false, "Failed to bind SRG image for [%s]", desc->m_paramNameInSrg.GetCStr()); + } + return success; + } + + bool HairRenderObject::UploadRenderingGPUResources(AMD::TressFXAsset& asset) + { + bool updateSuccess = true; + + // When the CBs data is changed, this is updating the CPU memory - it will be reflected to the GPU + // only after binding and compiling stage in the pass. + updateSuccess &= m_renderCB.UpdateGPUData(); + updateSuccess &= m_strandCB.UpdateGPUData(); + + // This should be called once on creation and separate method should apply the CBs update. + // Vertex streams data update + if (asset.m_strandUV.data()) + { + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairTexCoords)]; + updateSuccess &= m_hairTexCoords->UpdateData( (void*)asset.m_strandUV.data(), desc->m_elementCount * desc->m_elementSize, 0); + } + + const SrgBufferDescriptor* desc = &m_hairRenderDescriptors[uint8_t(HairRenderBuffersSemantics::HairVertexRenderParams)]; + updateSuccess &= m_hairVertexRenderParams->UpdateData((void*)asset.m_thicknessCoeffs.data(), desc->m_elementCount * desc->m_elementSize, 0); + + // No need to update index buffer data unless we go to dynamic reduction + return updateSuccess; + } + + //!===================================================================================== + //! + //! Update Methods + //! + //!------------------------------------------------------------------------------------- + + // [To Do] Possibly move wind settings to Simulation Parameters or alike. + + // Wind is in a pyramid around the main wind direction. + // To add a random appearance, the shader will sample some direction + // within this cone based on the strand index. + // This function computes the vector for each edge of the pyramid. + // [To Do] Requires more testing + static void SetWindCorner( + Quaternion rotFromXAxisToWindDir, Vector3 rotAxis, + float angleToWideWindCone, float windMagnitude, AMD::float4& outVec) + { + static const Vector3 XAxis(1.0f, 0, 0); + Quaternion rot(rotAxis, angleToWideWindCone); + // original code: Vector3 newWindDir = rotFromXAxisToWindDir * rot * XAxis; + Vector3 newWindDir = (rotFromXAxisToWindDir * rot).TransformVector(XAxis); + outVec.x = newWindDir.GetX() * windMagnitude; + outVec.y = newWindDir.GetY() * windMagnitude; + outVec.z = newWindDir.GetZ() * windMagnitude; + outVec.w = 0; // unused. + } + + void HairRenderObject::SetWind(const Vector3& windDir, float windMag, int frame) + { + // Based on the original AMD code for pleasing wind rate simulation. + // [To Do] - production can add user control over velocity if required. + float windMagnitude = windMag * (pow(sin(frame * 0.01f), 2.0f) + 0.5f); + + Vector3 windDirN(windDir); + windDirN.Normalize(); + + Vector3 XAxis(1.0f, 0, 0); + Vector3 xCrossW = XAxis.Cross(windDirN); + + // Adi: this part is now using AZ::Quaternion - verify correctness + Quaternion rotFromXAxisToWindDir; + rotFromXAxisToWindDir.CreateIdentity(); + + float angle = asin(xCrossW.GetLength()); + + if (angle > 0.001) + { + // original code: rotFromXAxisToWindDir.SetRotation(xCrossW.Normalize(), angle); + rotFromXAxisToWindDir.CreateFromVector3AndValue(xCrossW.GetNormalized(), angle); + } + + const float angleToWideWindCone = AZ::DegToRad(40.f); + + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 1.0, 0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, -1.0, 0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind1); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 0, 1.0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind2); + SetWindCorner(rotFromXAxisToWindDir, Vector3(0, 0, -1.0), angleToWideWindCone, windMagnitude, m_simCB->m_Wind3); + // fourth component unused. (used to store frame number, but no longer used). + } + + void HairRenderObject::InitBoneMatricesPlaceHolder(int numBoneMatrices) + { + float identityValues[16] = { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; + int numMatrices = AZStd::min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + memcpy(m_simCB->m_BoneSkinningMatrix[i].m, identityValues, 16 * sizeof(float)); + } + } + + //! Updating the bone matrices in the simulation constant buffer. + void HairRenderObject::UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + int numMatrices = AZStd::min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + m_simCB->m_BoneSkinningMatrix[i] = pBoneMatricesInWS[i]; + } + } + + void HairRenderObject::UpdateBoneMatrices( + const AZ::Matrix3x4& entityWorldMatrix, + const AZStd::vector& boneMatrices + ) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + const int numMatrices = AZStd::min(static_cast(boneMatrices.size()), AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + AZ::Matrix3x4 boneMatrixWS = entityWorldMatrix * boneMatrices[i]; + + // [rhhong-TODO] - switch to AZ::Matrix4x4 later. + m_simCB->m_BoneSkinningMatrix[i].m[0] = boneMatrixWS(0, 0); + m_simCB->m_BoneSkinningMatrix[i].m[1] = boneMatrixWS(1, 0); + m_simCB->m_BoneSkinningMatrix[i].m[2] = boneMatrixWS(2, 0); + m_simCB->m_BoneSkinningMatrix[i].m[3] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[4] = boneMatrixWS(0, 1); + m_simCB->m_BoneSkinningMatrix[i].m[5] = boneMatrixWS(1, 1); + m_simCB->m_BoneSkinningMatrix[i].m[6] = boneMatrixWS(2, 1); + m_simCB->m_BoneSkinningMatrix[i].m[7] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[8] = boneMatrixWS(0, 2); + m_simCB->m_BoneSkinningMatrix[i].m[9] = boneMatrixWS(1, 2); + m_simCB->m_BoneSkinningMatrix[i].m[10] = boneMatrixWS(2, 2); + m_simCB->m_BoneSkinningMatrix[i].m[11] = 0.0f; + m_simCB->m_BoneSkinningMatrix[i].m[12] = boneMatrixWS(0, 3); + m_simCB->m_BoneSkinningMatrix[i].m[13] = boneMatrixWS(1, 3); + m_simCB->m_BoneSkinningMatrix[i].m[14] = boneMatrixWS(2, 3); + m_simCB->m_BoneSkinningMatrix[i].m[15] = 1.0f; + } + } + + // [To Do] Change only parameters that require per frame update such as time. + // The rest should be changed only when changed (per editor or script) + //! Update of simulation constant buffer. + //! The bone matrices are set elsewhere and should be updated before GPU submit. + void HairRenderObject::UpdateSimulationParameters(const AMD::TressFXSimulationSettings* settings, float timeStep) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + m_simCB->SetVelocityShockPropogation(settings->m_vspCoeff); + m_simCB->SetVSPAccelThreshold(settings->m_vspAccelThreshold); + m_simCB->SetDamping(settings->m_damping); + m_simCB->SetLocalStiffness(settings->m_localConstraintStiffness); + m_simCB->SetGlobalStiffness(settings->m_globalConstraintStiffness); + m_simCB->SetGlobalRange(settings->m_globalConstraintsRange); + m_simCB->SetGravity(settings->m_gravityMagnitude); + m_simCB->SetTimeStep(timeStep); + m_simCB->SetCollision(false); + m_simCB->SetVerticesPerStrand(m_NumVerticesPerStrand); + m_simCB->SetFollowHairsPerGuidHair(m_NumFollowHairsPerGuideHair); + m_simCB->SetTipSeperation(settings->m_tipSeparation); + + // use 1.0 for now, this needs to be maxVelocity * timestep + m_simCB->g_ClampPositionDelta = 20.0f; + + // Right now, we do all local constraint iterations on the CPU. + if (m_NumVerticesPerStrand >= TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION) + { + m_simCB->SetLocalIterations((int)settings->m_localConstraintsIterations); + m_CPULocalShapeIterations = 1; + } + else + { + m_simCB->SetLocalIterations(1); + m_CPULocalShapeIterations = (int)settings->m_localConstraintsIterations; + } + + m_simCB->SetLengthIterations((int)settings->m_lengthConstraintsIterations); + + // Set wind parameters + const Vector3& windDir = settings->m_windDirection; + float windMag = settings->m_windMagnitude; + SetWind(windDir, windMag, m_SimulationFrame); + +#if TRESSFX_COLLISION_CAPSULES + m_simCB->m_numCollisionCapsules.x = 0; + + // Below is an example showing how to pass capsule collision objects. + /* + mSimCB.m_numCollisionCapsules.x = 1; + mSimCB.m_centerAndRadius0[0] = { 0, 0.f, 0.f, 50.f }; + mSimCB.m_centerAndRadius1[0] = { 0, 100.f, 0, 10.f }; + */ +#endif + // make sure we start of with a correct pose + if (m_SimulationFrame < 2) + ResetPositions(); + } + + // [To Do] - Change only parameters that require per frame update such as distance. + // The rest should be changed only when changed (per editor or script) + void HairRenderObject::UpdateRenderingParameters( + const AMD::TressFXRenderingSettings* parameters, const int nodePoolSize, + float distance, bool shadowUpdate /*= false*/) + { + // Update Render Parameters + // If you alter FiberRadius make sure to change it also in the material properties + // passed by the Feature Processor for the shading. + m_renderCB->FiberRadius = parameters->m_FiberRadius; + + m_renderCB->ShadowAlpha = parameters->m_HairShadowAlpha; + m_renderCB->FiberSpacing = parameters->m_HairFiberSpacing; + + // original TressFX lighting parameters - two specular lobes approximating + // the Marschner R and and TRT lobes + diffuse component. + m_renderCB->MatKValue = {{{0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1}}}; + m_renderCB->HairKs2 = parameters->m_HairKSpec2; + m_renderCB->HairEx2 = parameters->m_HairSpecExp2; + + m_renderCB->CuticleTilt = parameters->m_HairCuticleTilt; + m_renderCB->Roughness = parameters->m_HairRoughness; + + m_renderCB->MaxShadowFibers = parameters->m_HairMaxShadowFibers; + + // Update Strand Parameters (per hair object) + m_strandCB->MatBaseColor = ToAMDFloat4(parameters->m_HairMatBaseColor); + m_strandCB->MatTipColor = ToAMDFloat4(parameters->m_HairMatTipColor); + m_strandCB->TipPercentage = parameters->m_TipPercentage; + m_strandCB->StrandUVTilingFactor = parameters->m_StrandUVTilingFactor; + m_strandCB->FiberRatio = parameters->m_FiberRatio; + + // Reset LOD hair density for the frame + m_LODHairDensity = 1.f; + + float FiberRadius = parameters->m_FiberRadius; + if (parameters->m_EnableHairLOD) + { + float MinLODDist = shadowUpdate ? + AZStd::min(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : + AZStd::min(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + float MaxLODDist = shadowUpdate ? + AZStd::max(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : + AZStd::max(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + + if (distance > MinLODDist) + { + float DistanceRatio = AZStd::min((distance - MinLODDist) / AZStd::max(MaxLODDist - MinLODDist, 0.00001f), 1.f); + + // Lerp: x + s(y-x) + float MaxLODFiberRadius = FiberRadius * (shadowUpdate ? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); + FiberRadius = FiberRadius + (DistanceRatio * (MaxLODFiberRadius - FiberRadius)); + + // Lerp: x + s(y-x) + m_LODHairDensity = 1.f + (DistanceRatio * ((shadowUpdate ? parameters->m_ShadowLODPercent : parameters->m_LODPercent) - 1.f)); + } + } + + m_strandCB->FiberRadius = FiberRadius; + + m_strandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Always constant + m_strandCB->EnableThinTip = parameters->m_EnableThinTip; + m_strandCB->NodePoolSize = nodePoolSize; + m_strandCB->RenderParamsIndex = m_RenderIndex; // Always constant + + m_strandCB->EnableStrandUV = parameters->m_EnableStrandUV; + m_strandCB->EnableStrandTangent = parameters->m_EnableStrandTangent; + } + + //!===================================================================================== + //! + //! Generic non tressFX Specific Methods + //! + //!------------------------------------------------------------------------------------- + //! This is the equivalent method to the TressFXObject constructor. + //! It prepares all dynamic and static buffers and load the data into them, then + //! creates all the Srgs associated with the buffers and the remaining structures + //! that drive skinning, simulation and rendering of the hair. + //!--------------------------------------------------------------------- + bool HairRenderObject::Init( + HairFeatureProcessor* featureProcessor, + const char* assetName, AMD::TressFXAsset* asset, + AMD::TressFXSimulationSettings* simSettings, AMD::TressFXRenderingSettings* renderSettings) + { + AZ_TRACE_METHOD(); + + ++s_objectCounter; + + AZ_Error("Hair Gem", featureProcessor, "Feature processor initialized as null hence preventing proper creation of hair"); + m_featureProcessor = featureProcessor; + + m_NumTotalVertices = asset->m_numTotalVertices; + m_NumTotalStrands = asset->m_numTotalStrands; + m_numGuideVertices = asset->m_numGuideVertices; + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + m_NumFollowHairsPerGuideHair = asset->m_numFollowStrandsPerGuide; + + // dummy method - replace with the bone matrices at init pose and the real bones amount + InitBoneMatricesPlaceHolder(AMD_TRESSFX_MAX_NUM_BONES); + + // First time around, make sure all parameters are properly filled + const float SIMULATION_TIME_STEP = 0.0166667f; // 60 fps to start with nominal step + UpdateSimulationParameters(simSettings, SIMULATION_TIME_STEP); + + // [To Do] Hair - change to be dynamically calculated + const float distanceFromCamera = 1.0; + const float updateShadows = false; + UpdateRenderingParameters(renderSettings, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); + + if (!GetShaders()) + { + return false; + } + + //------------------------------------- + // Dynamic buffers, data and Srg creation - shared between passes and changed on the GPU + if (!m_dynamicHairData.CreateDynamicGPUResources( + m_skinningShader, m_PPLLFillShader, + m_NumTotalVertices, m_NumTotalStrands)) + { + AZ_Error("Hair Gem", false, "Hair - Error creating dynamic resources [%s]", assetName ); + return false; + } + m_dynamicHairData.UploadGPUData(assetName, asset->m_positions.data(), asset->m_tangents.data()); + + //------------------------------------- + // Static buffer, data and Srg creation + + m_hairGenerationSrg = UtilityClass::CreateShaderResourceGroup(m_skinningShader, "HairGenerationSrg", "Hair Gem"); + if (!m_hairGenerationSrg) + { + AZ_Error("Hair Gem", false, "Failed to create the hair generation resource group [m_hairGenerationSrg]"); + return false; + } + + if (!CreateAndBindHairGenerationBuffers(m_NumTotalVertices, m_NumTotalStrands)) + { + AZ_Error("Hair Gem", false, "Hair - Error creating static resources for asset [%s]", assetName); + return false; + } + + if (!UploadGPUData(assetName, asset)) + { + AZ_Error("Hair Gem", false, "Hair - Error copying hair generation static buffers [%s]", assetName); + return false; + } + + // Set up with defaults. + ResetPositions(); + + // Rendering setup + bool renderResourcesSuccess; + renderResourcesSuccess = CreateRenderingGPUResources(m_PPLLFillShader, *asset, assetName); + renderResourcesSuccess &= PopulateDrawStrandsBindSet(renderSettings); + renderResourcesSuccess &= UploadRenderingGPUResources(*asset); + + return renderResourcesSuccess; + } + + bool HairRenderObject::GetShaders() + { + { + // The skinning shader is used for generating the shared per Object srg + // Unlike per pass Srg that is uniquely bound to its shader, the other srgs can be + // used by multiple shaders - for example PerView, PerMaterial and PerScene + Data::Instance skinningPass = m_featureProcessor->GetHairSkinningComputegPass(); + if (!skinningPass.get()) + { + AZ_Error("Hair Gem", false, "Failed to get Skinning Pass."); + return false; + } + + m_skinningShader = skinningPass->GetShader(); + if (!m_skinningShader) + { + AZ_Error("Hair Gem", false, "Failed to get hair skinning shader from skinning pass"); + return false; + } + } + + { + Data::Instance rasterPass = m_featureProcessor->GetHairPPLLRasterPass(); + if (!rasterPass.get()) + { + AZ_Error("Hair Gem", false, "Failed to get PPLL raster fill Pass."); + return false; + } + + m_PPLLFillShader = rasterPass->GetShader(); + if (!m_PPLLFillShader) + { + AZ_Error("Hair Gem", false, "Failed to get hair raster fill shader from raster pass"); + return false; + } + } + + return true; + } + + void HairRenderObject::SetFrameDeltaTime(float deltaTime) + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + m_frameDeltaTime = deltaTime; + m_simCB->SetTimeStep(deltaTime); + } + + bool HairRenderObject::Update() + { + bool updatedCB; + { + // Protect Update and Render if on async threads + AZStd::lock_guard lock(m_mutex); + + updatedCB = m_simCB.UpdateGPUData(); + updatedCB &= m_renderCB.UpdateGPUData(); + updatedCB &= m_strandCB.UpdateGPUData(); + } + + RPI::ShaderResourceGroup* simSrgForCompute = m_dynamicHairData.GetSimSrgForCompute().get(); + RPI::ShaderResourceGroup* simSrgForRaster= m_dynamicHairData.GetSimSrgForRaster().get(); + RPI::ShaderResourceGroup* generationSrg = m_hairGenerationSrg.get(); + RPI::ShaderResourceGroup* renderMaterialSrg = m_hairRenderSrg.get(); + if (!simSrgForCompute || !simSrgForRaster || !generationSrg || !renderMaterialSrg) + { + AZ_Error("Hair Gem", false, "Failed to get one of the Hair Object Srgs."); + return false; + } + + // Single compilation per frame + simSrgForCompute->Compile(); + simSrgForRaster->Compile(); + generationSrg->Compile(); + renderMaterialSrg->Compile(); + + IncreaseSimulationFrame(); + + return updatedCB; + } + + bool HairRenderObject::BuildPPLLDrawPacket(RHI::DrawPacketBuilder::DrawRequest& drawRequest) + { + RHI::DrawPacketBuilder drawPacketBuilder; + RHI::DrawIndexed drawIndexed; + + uint32_t numPrimsToRender = m_TotalIndices; + if (m_LODHairDensity < 1.0f) + { + numPrimsToRender /= 3; + numPrimsToRender = uint32_t(float(numPrimsToRender) * m_LODHairDensity); + + // Calculate a new number of Primitives to draw. Keep it aligned to number of primitives per strand (i.e. don't cut strands in half or anything) + uint32_t numPrimsPerStrand = (m_NumVerticesPerStrand - 1) * 2; + uint32_t remainderPrims = numPrimsToRender % numPrimsPerStrand; + + numPrimsToRender = (remainderPrims > 0) ? numPrimsToRender + numPrimsPerStrand - remainderPrims : numPrimsToRender; + + // Force prims to be on (guide hair + its follow hairs boundary... no partial groupings) + numPrimsToRender = numPrimsToRender - (numPrimsToRender % (numPrimsPerStrand * (m_NumFollowHairsPerGuideHair + 1))); + numPrimsToRender *= 3; + } + + drawIndexed.m_indexCount = numPrimsToRender; + drawIndexed.m_indexOffset = 0; + drawIndexed.m_vertexOffset = 0; + + drawPacketBuilder.Begin(nullptr); + drawPacketBuilder.SetDrawArguments(drawIndexed); + drawPacketBuilder.SetIndexBufferView(m_indexBufferView); + + RPI::ShaderResourceGroup* renderMaterialSrg = m_hairRenderSrg.get(); + RPI::ShaderResourceGroup* simSrg = m_dynamicHairData.GetSimSrgForRaster().get(); + + if (!renderMaterialSrg || !simSrg) + { + AZ_Error("Hair Gem", false, "Failed to get thre hair material Srg for the raster pass."); + return false; + } + // No need to compile the simSrg since it was compiled already by the Compute pass this frame + drawPacketBuilder.AddShaderResourceGroup(renderMaterialSrg->GetRHIShaderResourceGroup()); + drawPacketBuilder.AddShaderResourceGroup(simSrg->GetRHIShaderResourceGroup()); + drawPacketBuilder.AddDrawItem(drawRequest); + + if (m_fillDrawPacket) + { + delete m_fillDrawPacket; + } + m_fillDrawPacket = drawPacketBuilder.End(); + + if (!m_fillDrawPacket) + { + AZ_Error("Hair Gem", false, "Failed to build the hair DrawPacket."); + return false; + } + + return true; + } + + const RHI::DispatchItem* HairRenderObject::GetDispatchItem(RPI::Shader* computeShader) + { + auto dispatchIter = m_dispatchItems.find(computeShader); + if (dispatchIter == m_dispatchItems.end()) + { + AZ_Error("Hair Gem", false, "GetDispatchItem could not find the dispatch item based on the given shader resource group"); + return nullptr; + } + return dispatchIter->second->GetDispatchItem(); + } + + bool HairRenderObject::BuildDispatchItem(RPI::Shader* computeShader, DispatchLevel dispatchLevel) + { + RPI::ShaderResourceGroup* simSrg = m_dynamicHairData.GetSimSrgForCompute().get(); + RPI::ShaderResourceGroup* hairGenerationSrg = m_hairGenerationSrg.get(); + if (!simSrg || !hairGenerationSrg || !computeShader) + { + AZ_Error("Hair Gem", false, "Failed to get Skinning Pass or one of the Srgs."); + return false; + } + + uint32_t elementsAmount = + (dispatchLevel == DispatchLevel::DISPATCHLEVEL_VERTEX) ? + m_numGuideVertices : + m_NumTotalStrands; + + m_dispatchItems[computeShader] = aznew HairDispatchItem; + m_dispatchItems[computeShader]->InitSkinningDispatch( + computeShader, hairGenerationSrg, simSrg, elementsAmount ); + + return true; + } + + } // namespace Hair + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h new file mode 100644 index 0000000000..c81d2b9079 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h @@ -0,0 +1,388 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include + +// Hair specific +#include +#include +#include + +#include +#include +#include +#include + +#define TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION 64 + +namespace AMD +{ + struct float4x4; + + class TressFXAsset; + class TressFXRenderingSettings; + class TressFXSimulationSettings; +} + +namespace AZ +{ + namespace RHI + { + class DrawPacket; + } + + namespace RPI + { + class Model; + class Scene; + class Shader; + } + + namespace Render + { + + namespace Hair + { + class HairFeatureProcessor; + + //! TressFXStrandLevelData represents blended bone data per hair strand that once calculated + //! is passed between the skinning pass and the simulation shape constraints pass + struct TressFXStrandLevelData + { + AMD::float4 skinningQuat; + AMD::float4 vspQuat; + AMD::float4 vspTranslation; + }; + + //!----------------------------------------------------------------------------------------- + //! + //! DynamicHairData + //! + //!----------------------------------------------------------------------------------------- + //! Contains the writable data that is passed and used by 3 modules: + //! simulation, signed distance field (collisions), and rendering. + //! Rendering uses current position and tangent as SRVs in VS for computing creation and skinning. + //! Since this data is per object (hence per object dispatch) and requires sync point (barrier) between the + //! the passes, a single buffer is allocated and is shared by all hair objects and their 'streams' + //! where each have buffer view so that it points to its own portion of the original buffer's data. + //! The shared buffer is therefore declared in the pass Srg to result in an execution dependency + //! so that a barrier will be created. It also represents less overhead since we are using a single + //! coordinated / shared buffer sync point rather than many barriers (per object per buffer). + //!----------------------------------------------------------------------------------------- + class DynamicHairData + { + friend class HairRenderObject; + + public: + //! Creates the GPU dynamic buffers of a single hair object + //! Equivalent to TressFXDynamicHairData::CreateGPUResources + bool CreateDynamicGPUResources( + Data::Instance computeShader, + Data::Instance rasterShader, + uint32_t vertexCount, uint32_t strandsCount); + + //! Data upload - copy the hair mesh asset data (positions and tangents) into the buffers. + //! In the following line I assume that positions and tangents are of the same size. + //! Equivalent to: TressFXDynamicHairData::UploadGPUData + bool UploadGPUData(const char* name, void* positions, void* tangents); + + //! Preparation of the descriptors table of all the dynamic stream buffers within the class. + //! Do not call this method before calling CreateAndBindGPUResources as it is already called + //! from CreateAndBindGPUResources. + //! This method can be called also for retrieving the descriptors table (SharedBuffer) + static void PrepareSrgDescriptors( + AZStd::vector& descriptorArray, + int32_t vertexCount, uint32_t strandsCount); + + void PrepareSrgDescriptors(int32_t vertexCount, uint32_t strandsCount) + { + PrepareSrgDescriptors(m_dynamicBuffersDescriptors, vertexCount, strandsCount); + } + + Data::Instance GetSimSrgForCompute() { return m_simSrgForCompute; } + Data::Instance GetSimSrgForRaster() { return m_simSrgForRaster; } + + bool IsInitialized() { return m_initialized; } + + + private: + //! Matching between the buffers Srg and its buffers descriptors, this method fills the Srg with + //! the views of the buffers to be used by the hair instance. + bool BindPerObjectSrgForCompute(); + bool BindPerObjectSrgForRaster(); + + //! The descriptors required to allocate and associate the dynamic buffers with the SRGs + //! Each descriptor also contains the byte offsets of the sub-buffers in the global dynamic + //! array for the data copy. + AZStd::vector m_dynamicBuffersDescriptors; + + //! The following dynamic buffer views are views 'sub-buffers' located within a global large + //! dynamic buffer exposed and connected as an attachment between the passes and therefore + //! creates both dependency order between passes execution and sync point barrier. + //! This indirectly forces the sync to be applied to all 'sub-buffers' used by each of the + //! HairObjects / HairDispatches and therefore allows us to change their data in the shader + //! between passes. + AZStd::vector> m_dynamicBuffersViews; // RW used for the Compute + AZStd::vector> m_readBuffersViews; // Read only used for the Raster fill + + //! The following vector is required in order to keep the allocators 'alive' or + //! else they are cleared from the buffer via the reference mechanism. + AZStd::vector> m_dynamicViewAllocators; + + //------------------------------------------------------------------ + //! The following SRGs are the ones represented by this class' data. + //! These Srgs are required for the changed dynamic data passed between the + //! skinning, simulation and rendering passes / shaders. + //! It is the TressFX equivalent of the set: + //! - pSimPosTanLayout / m_pSimBindSets + //------------------------------------------------------------------ + Data::Instance m_simSrgForCompute; //! TressFX equivalent: pSimPosTanLayout / m_pSimBindSets + Data::Instance m_simSrgForRaster; //! Targeting only the Fill pass / shader + + bool m_initialized = false; + }; + + + //!----------------------------------------------------------------------------------------- + //! + //! HairRenderObject + //! + //!----------------------------------------------------------------------------------------- + //! This class is equivalent to TressFXHairObject and HairStrands (the later is mainly a wrapper). + //! This is the class that holds all the raw data used by all the hair passes and shaders. + //!----------------------------------------------------------------------------------------- + class HairRenderObject final + : public Data::InstanceData + { + friend HairFeatureProcessor; + + public: + AZ_RTTI(HairRenderObject, "{58F48A58-C5B9-4CAE-9AFD-9B3AF3A01C73}"); + HairRenderObject() = default; + ~HairRenderObject(); + + void Release(); + + bool Init( + HairFeatureProcessor* featureProcessor, const char* assetName, AMD::TressFXAsset* asset, + AMD::TressFXSimulationSettings* simSettings, AMD::TressFXRenderingSettings* renderSettings + ); + + //! Creates and fill the draw item associated with the PPLL render of the + //! current hair object + const RHI::DrawPacket* GetFillDrawPacket() + { + return m_fillDrawPacket; + } + + bool BuildPPLLDrawPacket(RHI::DrawPacketBuilder::DrawRequest& drawRequest); + + //! Creates and fill the dispatch item associated with the compute shader + bool BuildDispatchItem(RPI::Shader* computeShader, DispatchLevel dispatchLevel); + + const RHI::DispatchItem* GetDispatchItem(RPI::Shader* computeShader); + + void PrepareHairGenerationSrgDescriptors(uint32_t vertexCount, uint32_t numStrands); + + // Based on SkinnedMeshInputLod::CreateStaticBuffer + bool CreateAndBindHairGenerationBuffers(uint32_t vertexCount, uint32_t strandsCount); + + //! Updates the buffers data for the hair generation. + //! Does NOT update the bone matrices - they will be updated every frame. + bool UploadGPUData(const char* name, AMD::TressFXAsset* asset); + + Data::Instance GetHairGenerationSrg() + { + return m_hairGenerationSrg; + } + + bool BindPerObjectSrgForCompute() + { + return m_dynamicHairData.IsInitialized() ? m_dynamicHairData.BindPerObjectSrgForCompute() : false; + } + + bool BindPerObjectSrgForRaster() + { + return m_dynamicHairData.IsInitialized() ? m_dynamicHairData.BindPerObjectSrgForRaster() : false; + } + + //!----------------------------------------------------------------- + //! Methods partially imported from TressFXHairObject + //!----------------------------------------------------------------- + int GetNumTotalHairVertices() const { return m_NumTotalVertices; } + int GetNumTotalHairStrands() const { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() const { return m_NumVerticesPerStrand; } + int GetCPULocalShapeIterations() const { return m_CPULocalShapeIterations; } + int GetNumFollowHairsPerGuideHair() const { return m_NumFollowHairsPerGuideHair; } + int GetNumGuideHairs() const + { + return GetNumTotalHairStrands() / (GetNumFollowHairsPerGuideHair() + 1); + } + //! This method is mainly a wrapper around BindRenderSrgResources to keep the + //! connection in code to the TressFX method. + //! Bind Render Srg (m_hairRenderSrg) resources. No resources data update should be doe here + //! Notice that this also loads the images and is slower if a new asset is required. + //! If the image was not changed it should only bind without the retrieve operation. + bool PopulateDrawStrandsBindSet(AMD::TressFXRenderingSettings* pRenderSettings/*=nullptr*/); + + // This function will be called when the image asset changed for the component. + bool LoadImageAsset(AMD::TressFXRenderingSettings* pRenderSettings); + + bool UploadRenderingGPUResources(AMD::TressFXAsset& asset); + + //! Creation of the render Srg m_hairRenderSrg, followed by creation and binding of the + //! GPU render resources: vertex thickness, vertex UV, hair albedo maps and two constant buffers. + bool CreateRenderingGPUResources( + Data::Instance shader, AMD::TressFXAsset& asset, const char* assetName); + + bool Update(); + + //! This method needs to be called in order to fill the bone matrices before the skinning + void UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices); + //! update of the skinning matrices per frame. The matrices are in model / local space + //! which is why the entity world matrix is also passed. + void UpdateBoneMatrices(const AZ::Matrix3x4& entityWorldMatrix, const AZStd::vector& boneMatrices); + void InitBoneMatricesPlaceHolder(int numBoneMatrices); + + void SetFrameDeltaTime(float deltaTime); + //! Updating the bone matrices for the skinning in the simulation constant buffer. + //! pBoneMatricesInWS constraints array of column major bone matrices in world space. + void UpdateRenderingParameters( + const AMD::TressFXRenderingSettings* parameters, const int nodePoolSize, + float distance, bool shadowUpdate /*= false*/); + + AMD::TressFXRenderParams* GetHairRenderParams() { return m_renderCB.get(); }; + + //! Update of simulation constant buffer. + //! Notice that the bone matrices are set elsewhere and should be updated before GPU submit. + void UpdateSimulationParameters(const AMD::TressFXSimulationSettings* settings, float timeStep); + + void SetWind(const Vector3& windDir, float windMag, int frame); + + void ResetPositions() { m_simCB->g_ResetPositions = 1.0f; } + void IncreaseSimulationFrame() + { + m_simCB->g_ResetPositions = (m_SimulationFrame < 2) ? 1.0f : 0.0f; + m_SimulationFrame++; + } + + bool IsEnabled() + { + return m_enabled; + } + + void SetEnabled(bool enable) + { + m_enabled = enable; + } + //!----------------------------------------------------------------- + + private: + //----------------------- Private Methods -------------------------- + bool BindRenderSrgResources(); + void PrepareRenderSrgDescriptors(); + bool GetShaders(); + + //------------------------------ Data ------------------------------ + static uint32_t s_objectCounter; + + //! The feature processor is the centralized class that gathers all render nodes and + //! responsible for the various stages and passes' updates + HairFeatureProcessor* m_featureProcessor = nullptr; + + //! The dispatch item used for the skinning + HairDispatchItem m_skinningDispatchItem; + + //! Compute dispatch items map per the existing passes + AZStd::map> m_dispatchItems; + + //! Skinning compute shader used for creation of the compute Srgs and dispatch item + Data::Instance m_skinningShader = nullptr; + + //! PPLL fill shader used for creation of the raster Srgs and draw item + Data::Instance m_PPLLFillShader = nullptr; + + float m_frameDeltaTime = 0.02; + + //! Hair asset information + uint32_t m_TotalIndices = 0; + uint32_t m_NumTotalVertices = 0; + uint32_t m_numGuideVertices = 0; + uint32_t m_NumTotalStrands = 0; + uint32_t m_NumVerticesPerStrand = 0; + uint32_t m_CPULocalShapeIterations = 0; + uint32_t m_NumFollowHairsPerGuideHair = 0; + + // LOD calculations factor + float m_LODHairDensity = 1.0f; + + bool m_enabled = true; + + //! Controls reset / copy base hair state + uint32_t m_SimulationFrame = 0; + // [To Do] - verify if still required + uint32_t m_RenderIndex = 0; + + //!----------------------------------------------------------------- + //! The hair dynamic per instance buffers such as vertices, tangents, etc.. + //! The data of these buffers is read/write and will change between passes. + DynamicHairData m_dynamicHairData; + + //!----------------------------------------------------------------- + //! Static buffers & Srg: Initial position, bones transform skinning + //! data, physical hair properties.. + //!----------------------------------------------------------------- + AZStd::vector> m_hairGenerationBuffers; + AZStd::vector m_hairGenerationDescriptors; + //! The simulation parameters constant buffer. + HairUniformBuffer m_simCB; + Data::Instance m_hairGenerationSrg; + + //!----------------------------------------------------------------- + //! TressFXRenderParams Srg buffers and declarations + //! The rendering buffers and structures required for the render draw + //! calls and are sent to the GPU using TressFXRenderParams Srg. + //!----------------------------------------------------------------- + //! Vertex and UV buffers. + //! Naming was not changed to preserve correlation to TressFXHairObject.h + Data::Instance m_hairVertexRenderParams; + Data::Instance m_hairTexCoords; + + //! Base color of the hair root and per strand texture. + Data::Instance m_baseAlbedo; + Data::Instance m_strandAlbedo; + + HairUniformBuffer m_renderCB; + HairUniformBuffer m_strandCB; + + AZStd::vector m_hairRenderDescriptors; + // Equivalent to m_pRenderLayoutBindSet in TressFX. + Data::Instance m_hairRenderSrg; + + //! Index buffer for the render pass via draw calls - naming was kept + Data::Instance m_indexBuffer; + RHI::IndexBufferView m_indexBufferView; + + //! DrawPacket for the multi object raster fill pass. + const RHI::DrawPacket* m_fillDrawPacket = nullptr; + //------------------------------------------------------------------- + + AZStd::mutex m_mutex; + }; + + } // namespace Hair + + } // namespace Render + +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h b/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h new file mode 100644 index 0000000000..9b45e56742 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/HairSharedBufferInterface.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace AZ +{ + namespace RHI + { + class Buffer; + class BufferView; + } + + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + class HairSharedBufferAllocation; + + //! A class for allocating memory for skinning buffers + class HairSharedBufferInterface + { + public: + AZ_RTTI(AZ::Render::HairSharedBufferInterface, "{3CCB13CB-16FF-43F5-98DC-F36B2A9F8E5E}"); + + HairSharedBufferInterface() + { + Interface::Register(this); + } + + virtual ~HairSharedBufferInterface() + { + Interface::Unregister(this); + } + + static HairSharedBufferInterface* Get() + { + return Interface::Get(); + } + + //! Returns the shared buffer asset used for all Hair objects and passes + virtual Data::Asset GetBufferAsset() const = 0; + + //! Returns the buffer that is used for all skinned mesh outputs + virtual Data::Instance GetBuffer() = 0; + + //! If the allocation succeeds, returns a ref-counted pointer to a VirtualAddress which will be automatically freed if the ref-count drops to zero + //! If the allocation fails, returns nullptr + virtual AZStd::intrusive_ptr Allocate(size_t byteCount) = 0; + + //! Mark the memory as available and queue garbage collection to recycle it later (see RHI::Allocator::DeAllocate) + //! After garbage collection is done signal handlers that memory has been freed + virtual void DeAllocate(RHI::VirtualAddress allocation) = 0; + + //! Same as DeAllocate, but the signal after garbage collection is ignored + //! If multiple allocations succeeded before one failed, use this to release the successful allocations + //! without triggering new events indicating that new memory has been freed + virtual void DeAllocateNoSignal(RHI::VirtualAddress allocation) = 0; + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + virtual bool UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset = 0) = 0; + + // Note that you have to delete these for safety reasons, you will trip a static_assert if you do not + AZ_DISABLE_COPY_MOVE(HairSharedBufferInterface); + }; + + class HairSharedBufferNotifications + : public AZ::EBusTraits + { + public: + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + + //! This event will fire if memory is freed up, so a listener can wait for there to be free space + //! and attempt to allocate memory again if it failed initially + virtual void OnSharedBufferMemoryAvailable() = 0; + }; + using SharedBufferNotificationBus = AZ::EBus; + + //! An intrusive_ptr wrapper around an RHI::Allocation that will automatically free the memory + //! from the SharedBuffer when the ref count drops to zero + class HairSharedBufferAllocation + : public AZStd::intrusive_base + { + public: + AZ_CLASS_ALLOCATOR(HairSharedBufferAllocation, AZ::SystemAllocator, 0); + explicit HairSharedBufferAllocation(RHI::VirtualAddress virtualAddress) + : m_virtualAddress(virtualAddress) + {} + + ~HairSharedBufferAllocation() + { + if (!m_suppressSignalOnDeallocate) + { + HairSharedBufferInterface::Get()->DeAllocate(m_virtualAddress); + } + else + { + HairSharedBufferInterface::Get()->DeAllocateNoSignal(m_virtualAddress); + } + } + + //! If this function is called, the SharedBuffer will not signal when the memory is freed + void SuppressSignalOnDeallocate() { m_suppressSignalOnDeallocate = true; } + RHI::VirtualAddress GetVirtualAddress() const { return m_virtualAddress; } + private: + RHI::VirtualAddress m_virtualAddress; + bool m_suppressSignalOnDeallocate = false; + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp new file mode 100644 index 0000000000..dd5b23907e --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.cpp @@ -0,0 +1,258 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include +#include + +#include +#include + +namespace AZ +{ + namespace Render + { + //! Setting the constructor as private will create compile error to remind the developer to set + //! the buffer Init in the FeatureProcessor and initialize properly + + SharedBuffer::SharedBuffer() + { + AZ_Warning("SharedBuffer", false, "Missing information to properly create SharedBuffer. Init is required"); + } + + SharedBuffer::SharedBuffer(AZStd::string bufferName, AZStd::vector& buffersDescriptors) + { + m_bufferName = bufferName; + Init(bufferName, buffersDescriptors); + } + + SharedBuffer::~SharedBuffer() + { + m_bufferAsset = {}; + } + + //! Crucial method that will ensure that the alignment for the BufferViews is always kept. + //! This is important when requesting a BufferView as the offset needs to be aligned according + //! to the element type of the buffer. + void SharedBuffer::CalculateAlignment(AZStd::vector& buffersDescriptors) + { + m_alignment = 1; + for (uint8_t bufferIndex = 0; bufferIndex < buffersDescriptors.size() ; ++bufferIndex) + { + // Using the least common multiple enables resource views to be typed and ensures they can get + // an offset in bytes that is a multiple of an element count + m_alignment = std::lcm(m_alignment, buffersDescriptors[bufferIndex].m_elementSize); + } + } + + void SharedBuffer::InitAllocator() + { + RHI::FreeListAllocator::Descriptor allocatorDescriptor; + allocatorDescriptor.m_alignmentInBytes = m_alignment; + allocatorDescriptor.m_capacityInBytes = m_sizeInBytes; + allocatorDescriptor.m_policy = RHI::FreeListAllocatorPolicy::BestFit; + allocatorDescriptor.m_garbageCollectLatency = 0; + m_freeListAllocator.Init(allocatorDescriptor); + } + + void SharedBuffer::CreateBuffer() + { + SrgBufferDescriptor descriptor = SrgBufferDescriptor( + RPI::CommonBufferPoolType::ReadWrite, RHI::Format::Unknown, + sizeof(float), uint32_t(m_sizeInBytes / sizeof(float)), + Name{ "HairSharedDynamicBuffer" }, Name{ "m_skinnedHairSharedBuffer" }, 0, 0 + ); + m_buffer = Hair::UtilityClass::CreateBuffer("Hair Gem", descriptor, nullptr); + } + + void SharedBuffer::CreateBufferAsset() + { + // Create the shared buffer pool + { + auto bufferPoolDesc = AZStd::make_unique(); + // Output buffers are both written to during skinning and used as input assembly buffers + bufferPoolDesc->m_bindFlags = RHI::BufferBindFlags::ShaderReadWrite | RHI::BufferBindFlags::Indirect; + bufferPoolDesc->m_heapMemoryLevel = RHI::HeapMemoryLevel::Device; + bufferPoolDesc->m_hostMemoryAccess = RHI::HostMemoryAccess::Write; + + RPI::ResourcePoolAssetCreator creator; + creator.Begin(Uuid::CreateRandom()); + creator.SetPoolDescriptor(AZStd::move(bufferPoolDesc)); + creator.SetPoolName("SharedBufferPool"); + creator.End(m_bufferPoolAsset); + } + + // Create the shared buffer + { + RPI::BufferAssetCreator creator; + Uuid uuid = Uuid::CreateRandom(); + creator.Begin(uuid); + creator.SetBufferName(m_bufferName); + creator.SetPoolAsset(m_bufferPoolAsset); + + RHI::BufferDescriptor bufferDescriptor; + bufferDescriptor.m_bindFlags = RHI::BufferBindFlags::ShaderReadWrite | RHI::BufferBindFlags::Indirect; + bufferDescriptor.m_byteCount = m_sizeInBytes; + bufferDescriptor.m_alignment = m_alignment; + creator.SetBuffer(nullptr, 0, bufferDescriptor); + + RHI::BufferViewDescriptor viewDescriptor; + viewDescriptor.m_elementFormat = RHI::Format::Unknown; + + // [To Do] - set this as AZ::Vector4 for offset approach shader code optimization + viewDescriptor.m_elementSize = sizeof(float); + viewDescriptor.m_elementCount = aznumeric_cast(m_sizeInBytes) / sizeof(float); + viewDescriptor.m_elementOffset = 0; + creator.SetBufferViewDescriptor(viewDescriptor); + + creator.End(m_bufferAsset); + } + } + + void SharedBuffer::Init(AZStd::string bufferName, AZStd::vector& buffersDescriptors) + { + m_bufferName = bufferName; + // m_sizeInBytes = 256u * (1024u * 1024u); + // + // [To Do] replace this with max size request for allocation that can be given by the calling function + // This has the following problems: + // 1. The need to have this aggregated size in advance + // 2. The size might grow dynamically between frames + // 3. Due to having several stream buffers (position, tangent, structured), alignment padding + // size calculation must be added. + // Requirement: the buffer already has an assert on allocation beyond the memory. In the future it should + // support greedy memory allocation when memory has reached its end. This must not invalidate the buffer during + // the current frame, hence allocation of second buffer, fence and a copy must take place. + + CalculateAlignment(buffersDescriptors); + + InitAllocator(); + + CreateBuffer(); + + SystemTickBus::Handler::BusConnect(); + } + + AZStd::intrusive_ptr SharedBuffer::Allocate(size_t byteCount) + { + RHI::VirtualAddress result; + { + AZStd::lock_guard lock(m_allocatorMutex); + result = m_freeListAllocator.Allocate(byteCount, m_alignment); + } + + if (result.IsValid()) + { + return aznew HairSharedBufferAllocation(result); + } + + return nullptr; + } + + void SharedBuffer::DeAllocate(RHI::VirtualAddress allocation) + { + if (allocation.IsValid()) + { + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.DeAllocate(allocation); + } + + m_memoryWasFreed = true; + m_broadcastMemoryAvailableEvent = true; + } + } + + void SharedBuffer::DeAllocateNoSignal(RHI::VirtualAddress allocation) + { + if (allocation.IsValid()) + { + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.DeAllocate(allocation); + } + m_memoryWasFreed = true; + } + } + + Data::Asset SharedBuffer::GetBufferAsset() const + { + return m_bufferAsset; + } + + Data::Instance SharedBuffer::GetBuffer() + { + if (!m_buffer) + { + m_buffer = RPI::Buffer::FindOrCreate(m_bufferAsset); + } + return m_buffer; + } + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + bool SharedBuffer::UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset) + { + AZStd::lock_guard lock(m_allocatorMutex); + if (m_buffer.get()) + { + return m_buffer->UpdateData(sourceData, sourceDataSizeInBytes, bufferByteOffset); + } + AZ_Assert(false, "SharedBuffer error in data allocation - the buffer doesn't exist yet"); + return false; + } + + void SharedBuffer::OnSystemTick() + { + GarbageCollect(); + } + + void SharedBuffer::GarbageCollect() + { + if (m_memoryWasFreed) + { + m_memoryWasFreed = false; + { + AZStd::lock_guard lock(m_allocatorMutex); + m_freeListAllocator.GarbageCollect(); + } + if (m_broadcastMemoryAvailableEvent) + { + SharedBufferNotificationBus::Broadcast(&SharedBufferNotificationBus::Events::OnSharedBufferMemoryAvailable); + m_broadcastMemoryAvailableEvent = false; + } + } + } + + //! Utility function to create a resource view of different type than the shared buffer data. + //! Since this class is sub-buffer container, this method should be used after creating + //! a new allocation to be used as a sub-buffer. + //! Notice the alignment required according to the element size - this might need + RHI::BufferViewDescriptor SharedBuffer::CreateResourceViewWithDifferentFormat( + uint32_t offsetInBytes, uint32_t elementCount, uint32_t elementSize, + RHI::Format format, RHI::BufferBindFlags overrideBindFlags) + { + RHI::BufferViewDescriptor viewDescriptor; + + // In the following line I use the element size and not the size based of the + // element format since in the more interesting case of structured buffer, the + // size will result in an error. + uint32_t elementOffset = offsetInBytes / elementSize; + viewDescriptor.m_elementOffset = elementOffset; + viewDescriptor.m_elementCount = elementCount; + viewDescriptor.m_elementFormat = format; + viewDescriptor.m_elementSize = elementSize; + viewDescriptor.m_overrideBindFlags = overrideBindFlags; + return viewDescriptor; + } + + }// namespace Render +}// namespace AZ + diff --git a/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h new file mode 100644 index 0000000000..8cf6620d78 --- /dev/null +++ b/Gems/AtomTressFX/Code/Rendering/SharedBuffer.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include +#include +#include + +#include + +// Hair specific +#include + +namespace AZ +{ + namespace RPI + { + class BufferAsset; + class Buffer; + } + + namespace Render + { + //! This structure contains information regarding the naming of the buffer on both the CPU + //! and the GPU + //! This structure is also used to determine the maximum alignment required for the buffer + //! when allocating sub-buffers + struct SrgBufferDescriptor + { + //! Pool type to determine how a resource pool should be generated. + RPI::CommonBufferPoolType m_poolType; + //! The format used for the buffer + //! Should be Unknown for structured buffers, or R32 for raw buffers. + RHI::Format m_elementFormat; + //! The size in bytes of each element in the stream + uint32_t m_elementSize; + //! Amount of elements required to create the buffer + uint32_t m_elementCount; + //! The name used for the buffer view + Name m_bufferName; + //! The name used by the shader Srg in the GPU for this shader parameter + Name m_paramNameInSrg; + //! The assigned SRG slot in the CPU / GPU for this shader resource + uint32_t m_resourceShaderIndex; + //! If using a buffer view within a shared buffer, this represents + //! the view offset from the shared buffer origin in bytes. + uint32_t m_viewOffsetInBytes; + + SrgBufferDescriptor() = default; + SrgBufferDescriptor( + RPI::CommonBufferPoolType poolType, + RHI::Format elementFormat, + uint32_t elementSize, + uint32_t elementCount, + Name bufferName, + Name paramNameInSrg, + uint32_t resourceShaderIndex, + uint32_t viewOffsetInBytes + ) : m_poolType(poolType), m_elementFormat(elementFormat), + m_elementSize(elementSize), m_elementCount(elementCount), + m_bufferName(bufferName), m_paramNameInSrg(paramNameInSrg), + m_resourceShaderIndex(resourceShaderIndex), m_viewOffsetInBytes(viewOffsetInBytes) + {}; + }; + + //! This class represents a single RPI::Buffer used to allocate sub-buffers from the + //! existing buffer that can then be used per draw. In a way, this buffer is used as a memory + //! pool from which sub-buffers are being created. + //! This is very useful when we want to synchronize the use of these buffers via barriers + //! so we declare and pass the entire buffer between passes and therefore we are creating + //! a dependency and barrier for this single buffer, yet as a result all sub-buffers are + //! now getting synced between passes. + //! + // Adopted from SkinnedMeshOutputStreamManager in order to make it more generic and context free usage + class SharedBuffer + : public HairSharedBufferInterface + , private SystemTickBus::Handler + { + public: + SharedBuffer(); + SharedBuffer(AZStd::string bufferName, AZStd::vector& buffersDescriptors); + + AZ_RTTI(AZ::Render::SharedBuffer, "{D910C301-99F7-41B6-A2A6-D566F3B2C030}", AZ::Render::HairSharedBufferInterface); + + ~SharedBuffer(); + void Init(AZStd::string bufferName, AZStd::vector& buffersDescriptors); + + // SharedBufferInterface + AZStd::intrusive_ptr Allocate(size_t byteCount) override; + void DeAllocate(RHI::VirtualAddress allocation) override; + void DeAllocateNoSignal(RHI::VirtualAddress allocation) override; + Data::Asset GetBufferAsset() const override; + + Data::Instance GetBuffer() override; + + //! Update buffer's content with sourceData at an offset of bufferByteOffset + bool UpdateData(const void* sourceData, uint64_t sourceDataSizeInBytes, uint64_t bufferByteOffset = 0) override; + + //! Utility function to create a resource view of different type than the shared buffer data. + //! Since this class is sub-buffer container, this method should be used after creating + //! a new allocation to be used as a sub-buffer. + static RHI::BufferViewDescriptor CreateResourceViewWithDifferentFormat( + uint32_t offsetInBytes, uint32_t elementCount, uint32_t elementSize, + RHI::Format format, RHI::BufferBindFlags overrideBindFlags); + + private: + // SystemTickBus + void OnSystemTick() override; + + void GarbageCollect(); + void CalculateAlignment(AZStd::vector& buffersDescriptors); + void InitAllocator(); + void CreateBufferAsset(); + void CreateBuffer(); + + + AZStd::string m_bufferName = "GenericSharedBuffer"; + Data::Asset m_bufferPoolAsset; + Data::Instance m_buffer = nullptr; + Data::Asset m_bufferAsset = {}; + + RHI::FreeListAllocator m_freeListAllocator; + AZStd::mutex m_allocatorMutex; + uint64_t m_alignment = 16; // This will be overridden by the size of the largest allocated element + //! Currently the shared buffer size is fixed. Going towards dynamic size can be a better + //! solution but requires using re-allocations and proper synchronizing between all existing buffers. + //! This amount of memory should be enough for 2-3 very details cinematic hair or for 4-6 high + //! fidelity hair objects. + //! Additional attention should be given to the fact that because the buffers in Atom are NOT triple + //! buffered but instead they are delayed via garbage collection mechanism, during reallocation + //! the amount of memory required might reach close to double of the run-time. + size_t m_sizeInBytes = 256u * (1024u * 1024u); + bool m_memoryWasFreed = false; + bool m_broadcastMemoryAvailableEvent = false; + }; + } // namespace Render +} // namespace AZ + diff --git a/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt b/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt new file mode 100644 index 0000000000..1b5ce35bcf --- /dev/null +++ b/Gems/AtomTressFX/External/Assets/Objects/MissingAssets.txt @@ -0,0 +1,2 @@ +The assets in this folder (HairAsset and RatBoy folders) were removed and can be downloaded from GitHub: +https://github.com/GPUOpen-Effects/TressFX/tree/master/bin/Objects diff --git a/Gems/AtomTressFX/External/CMakeLists.txt b/Gems/AtomTressFX/External/CMakeLists.txt new file mode 100644 index 0000000000..e6ed29a910 --- /dev/null +++ b/Gems/AtomTressFX/External/CMakeLists.txt @@ -0,0 +1,2 @@ +#add_subdirectory(Code) + diff --git a/Gems/AtomTressFX/External/Code/CMakeLists.txt b/Gems/AtomTressFX/External/Code/CMakeLists.txt new file mode 100644 index 0000000000..002b099c88 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/CMakeLists.txt @@ -0,0 +1,8 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +#add_subdirectory(src) +#add_subdirectory(LYIntegration) diff --git a/Gems/AtomTressFX/External/Code/README.md b/Gems/AtomTressFX/External/Code/README.md new file mode 100644 index 0000000000..4f532b77b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/README.md @@ -0,0 +1,117 @@ +# AMD TressFX + +![AMD TressFX](http://gpuopen.com/GitHub_Media/TressFX4.1-wideshot1.jpg) + +The TressFX library is AMD's hair/fur rendering and simulation technology. TressFX is designed to use the GPU to simulate and render high-quality, realistic hair and fur. +The TressFX/Radeon® Cauldron sample is built on top of Radeon® Cauldron, which is an open sourced framework used at AMD for sample creation. It supports both DirectX® 12 and Vulkan® through a custom wrapper layer. For more information about Radeon® Cauldron, or to download the source/examples, please refer to https://gpuopen.com/gamingproduct/caudron-framework/. + +With this release we aim to make it easier for developers to integrate TressFX into an existing codebase. +Additionally, TressFX 4.1 provides some performance and feature updates compared to TressFX 4.0 including faster Velocity Shock Propagation, simplified Local Shape Constraints, a reorganization of dispatches, new rendering features, extensive documentation and tutorials as well as an updated TressFX Exporter for Autodesk® Maya®. + +This release also demonstrates TressFX integration with Epic Games Unreal Engine (4.22), a minimal integration but with multiple TressFX components, features, and rendering and simulation materials to help ease-of-use within Unreal engine. Developers wishing to further the integration or customize it for their own requirements should find this basic level of integration a helpful first step in that process. + +
+ Latest release +
+ +### Highlights include the following: +* Designed for optimized rendering and simulation +* Hair and fur support, with high quality anti-aliasing +* Animation/skinning support +* Epic Games Unreal 4.22 engine integration (engine patch available) +* TressFX/Radeon® Cauldron implementation +* Autodesk® Maya® plugin provided for hair/fur and collision authoring +* Full source code provided + +![AMD TressFX](http://gpuopen.com/GitHub_Media/TressFX4.1-wideshot2.jpg) + +### New in TressFX 4.1 +* TressFX/Radeon® Cauldron implementation with full source code (DirectX® 12 and Vulkan®) +* Optimized physics simulation shaders allowing more hair to be simulated in real-time + * faster Velocity Shock Propagation, simplified Local Shape Constraints, reorganization of dispatches +* New rendering features + * StrandUV and Hair Parameter Blending* +* New Level of Detail (LOD) system +* Extensive documentation and tutorials +* Updated Autodesk® Maya® Exporter with new UI and new features/error checking +* TressFX/Epic Games Unreal 4.22 engine integration (patch under Epic Games Unreal GitHub repository) (See https://github.com/GPUOpenSoftware/UnrealEngine/tree/TressFX-4.22) + +*Hair Parameter Blending currently only available under TressFX/Unreal. Please see included documentation for more details. + + +### New in TressFX 4.0 +* Hair is skinned directly, rather than through triangle stream-out. +* Signed distance field (SDF) collision, including compute shaders to generate the SDF from a dynamic mesh. +* New system for handling fast motion. +* Refactored to be more engine / API agnostic. +* Example code includes compute-based skinning and marching cubes generation. +* DirectX® 12 support + +### Integrating TressFX + +With this release we aim to provide two things: + +* A self-contained solution for hair simulation +* A reference renderer for hair + +This is to provide an easy starting point for developers that want to integrate TressFX with their own technology. To that end, this update iterates on the "Engine Interface" that was introduced with TressFX 4.0. Both the renderer and the simulation go through this interface. +Developers that wish to implement their own hair rendering solution can use this interface to integrate into their own pipeline. They can use the renderer we provide as a guide. The hair simulation consists of asset loading code and the TressFX compute shaders which should be self contained enough to be integrated into another codebase without substantial changes to the source files. +To do this, a developer can implement all necessary functions using our Engine Interface, or replace it with their own calls and data structures (the latter method would be similar to the AMD TressFX/Epic Games Unreal integration, which is tightly bound to Unreal engine architecture). + +For more information, please consult the included documentation (for both TressFX/Radeon® Cauldron and TressFX/Epic Games Unreal engine integration). + +### Prerequisites +* AMD Radeon™ GCN-based GPU (HD 7000 series or newer) or AMD Radeon™ RDNA-based GPU (5000 series or newer) + * Or other DirectX® 12 or Vulkan® compatible GPU with Shader Model 6** support +* 64-bit Windows® 7 (SP1 with the [Platform Update](https://msdn.microsoft.com/en-us/library/windows/desktop/jj863687.aspx)), Windows 8.1, or Windows 10 +* Visual Studio 2019 or Visual Studio 2017 +* Windows® 10 required for DirectX® 12 +* CMake 3.4 (for Cauldron compatibility) +* Vulkan® SDK 1.1.106 (for Cauldron compatibility) +* TressFX/Epic Games Unreal engine integration dependent upon Unreal 4.22 prerequisites (and will compile and run under DirectX® 11 and DirectX® 12) + + +** For the Cauldron framework to take advantage of DXIL support across DirectX® 12 and Vulkan®, Shader Model 6 was used. Shader Model 5 should work but was not explicitly tested. + +### Getting started + +#### Running the demo +* Install CMake 3.4 if you haven't already +* Install the Vulkan® SDK for the Vulkan solution +* Visual Studio solutions for VS2019, VS2017, DirectX® 12 or Vulkan®, can be generated by running "GenerateSolutions.bat" in the "build folder. +* Compile the solution +* Run `TressFX_DX12.exe` or `TressFX_VK.exe` in `bin`. + +#### Folder Structure +* src/ AMD Radeon® Cauldron specific TressFX code shared between DirectX® 12 and Vulkan® + * src/Math TressFX math libraries + * src/Shaders Shader sources in HLSL are here. Cauldron supports HLSL for both DirectX® 12 and Vulkan®. + * src/TressFX Platform agnostic TressFX files + * src/Common Cauldron specific, but rendering API agnostic, implementation + * src/VK Cauldron/Vulkan® specific code (contains an engine interface implementation for Vulkan®) + * src/DX12 Cauldron/DirectX® 12 specific code (contains an engine interface implementation for DirectX® 12) +* maya-plugin/ Contains the python Autodesk® Maya® plugin. It is identical to the Exporter plugin used in Unreal +* doc/ Contains documentation including developer guide (shared by AMD Radeon® Cauldron and Epic Games Unreal engine TressFX implementations) +* libs/cauldron/ Contains AMD Radeon® Cauldron open source library for demo creation + +### Previous releases +TressFX 4.1 is a substantial change from the prior TressFX 4.0 release. +A separate branch for TressFX 4.0 and 3.1.1 has been created for the convenience of users that have +been working with TressFX 3. +* [TressFX 4.0 branch](https://github.com/GPUOpen-Effects/TressFX/tree/4.0) +* [TressFX 3.1.1 branch](https://github.com/GPUOpen-Effects/TressFX/tree/3.1.1) + +  +  +  + +**© 2020 Advanced Micro Devices, Inc. All Rights Reserved.** + +### Attribution +* AMD, the AMD Arrow logo, AMD Radeon, and combinations thereof are trademarks of Advanced Micro Devices, Inc. +* Microsoft, Windows, DirectX, and combinations thereof are either trademarks or registered trademarks of Microsoft Corporation in the US and/or other countries. Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc. +* Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies. + +**Disclaimer** + +The information contained herein is for informational purposes only, and is subject to change without notice. While every precaution has been taken in the preparation of this document, it may contain technical inaccuracies, omissions and typographical errors, and AMD is under no obligation to update or otherwise correct this information. Advanced Micro Devices, Inc. makes no representations or warranties with respect to the accuracy or completeness of the contents of this document, and assumes no liability of any kind, including the implied warranties of noninfringement, merchantability or fitness for particular purposes, with respect to the operation or use of AMD hardware, software or other products described herein. No license, including implied or arising by estoppel, to any intellectual property rights is granted by this document. Terms and limitations applicable to the purchase or use of AMD’s products are as set forth in a signed agreement between the parties or in AMD's Standard Terms and Conditions of Sale. diff --git a/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt b/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt new file mode 100644 index 0000000000..8e47040460 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/libs/Cauldron - read me.txt @@ -0,0 +1,4 @@ +Library source files from: + https://github.com/GPUOpen-LibrariesAndSDKs/Cauldron/tree/5acc12602c55e469cc1f9181967dbcb122f8e6c7 + + \ No newline at end of file diff --git a/Gems/AtomTressFX/Code/license.txt b/Gems/AtomTressFX/External/Code/license.txt similarity index 100% rename from Gems/AtomTressFX/Code/license.txt rename to Gems/AtomTressFX/External/Code/license.txt diff --git a/Gems/AtomTressFX/External/Code/src/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/CMakeLists.txt new file mode 100644 index 0000000000..3d434ec948 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/CMakeLists.txt @@ -0,0 +1,8 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +#add_subdirectory(Math) +#add_subdirectory(TressFX) diff --git a/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt new file mode 100644 index 0000000000..7515a65979 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/CMakeLists.txt @@ -0,0 +1,5 @@ +project (TressFX_DX12) + +set(sources + DX12/DX12EngineInterfaceImpl.cpp + DX12/DX12EngineInterfaceImpl.h PARENT_SCOPE) \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp new file mode 100644 index 0000000000..188a8b7adb --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.cpp @@ -0,0 +1,1658 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#include "EngineInterface.h" + +#include +#include +using namespace DirectX; +#include "d3dcompiler.h" + +#include +#include "Base/ShaderCompilerHelper.h" +#include "Base/Helper.h" +#include "GLTF/GltfHelpers.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" +#include "Misc/Error.h" +#include "TressFXLayouts.h" + +// Inline operators for general state data +inline D3D12_COMPARISON_FUNC operator* (EI_CompareFunc Enum) +{ + if (Enum == EI_CompareFunc::Never) return D3D12_COMPARISON_FUNC_NEVER; + if (Enum == EI_CompareFunc::Less) return D3D12_COMPARISON_FUNC_LESS; + if (Enum == EI_CompareFunc::Equal) return D3D12_COMPARISON_FUNC_EQUAL; + if (Enum == EI_CompareFunc::LessEqual) return D3D12_COMPARISON_FUNC_LESS_EQUAL; + if (Enum == EI_CompareFunc::Greater) return D3D12_COMPARISON_FUNC_GREATER; + if (Enum == EI_CompareFunc::NotEqual) return D3D12_COMPARISON_FUNC_NOT_EQUAL; + if (Enum == EI_CompareFunc::GreaterEqual) return D3D12_COMPARISON_FUNC_GREATER_EQUAL; + if (Enum == EI_CompareFunc::Always) return D3D12_COMPARISON_FUNC_ALWAYS; + assert(false && "Using an EI_CompareFunc that has not been mapped to DX12 yet!"); + return D3D12_COMPARISON_FUNC_NEVER; +} + +inline D3D12_BLEND_OP operator* (EI_BlendOp Enum) +{ + if (Enum == EI_BlendOp::Add) return D3D12_BLEND_OP_ADD; + if (Enum == EI_BlendOp::Subtract) return D3D12_BLEND_OP_SUBTRACT; + if (Enum == EI_BlendOp::ReverseSubtract) return D3D12_BLEND_OP_REV_SUBTRACT; + if (Enum == EI_BlendOp::Min) return D3D12_BLEND_OP_MIN; + if (Enum == EI_BlendOp::Max) return D3D12_BLEND_OP_MAX; + assert(false && "Using an EI_BlendOp that has not been mapped to DX12 yet!"); + return D3D12_BLEND_OP_ADD; +}; + +inline D3D12_STENCIL_OP operator* (EI_StencilOp Enum) +{ + if (Enum == EI_StencilOp::Keep) return D3D12_STENCIL_OP_KEEP; + if (Enum == EI_StencilOp::Zero) return D3D12_STENCIL_OP_ZERO; + if (Enum == EI_StencilOp::Replace) return D3D12_STENCIL_OP_REPLACE; + if (Enum == EI_StencilOp::IncrementClamp) return D3D12_STENCIL_OP_INCR_SAT; + if (Enum == EI_StencilOp::DecrementClamp) return D3D12_STENCIL_OP_DECR_SAT; + if (Enum == EI_StencilOp::Invert) return D3D12_STENCIL_OP_INVERT; + if (Enum == EI_StencilOp::IncrementWrap) return D3D12_STENCIL_OP_INCR; + if (Enum == EI_StencilOp::DecrementWrap) return D3D12_STENCIL_OP_DECR; + assert(false && "Using an EI_StencilOp that has not been mapped to DX12 yet!"); + return D3D12_STENCIL_OP_KEEP; +} + +inline D3D12_BLEND operator* (EI_BlendFactor Enum) +{ + if (Enum == EI_BlendFactor::Zero) return D3D12_BLEND_ZERO; + if (Enum == EI_BlendFactor::One) return D3D12_BLEND_ONE; + if (Enum == EI_BlendFactor::SrcColor) return D3D12_BLEND_SRC_COLOR; + if (Enum == EI_BlendFactor::InvSrcColor) return D3D12_BLEND_INV_SRC_COLOR; + if (Enum == EI_BlendFactor::DstColor) return D3D12_BLEND_DEST_COLOR; + if (Enum == EI_BlendFactor::InvDstColor) return D3D12_BLEND_INV_DEST_COLOR; + if (Enum == EI_BlendFactor::SrcAlpha) return D3D12_BLEND_SRC_ALPHA; + if (Enum == EI_BlendFactor::InvSrcAlpha) return D3D12_BLEND_INV_SRC_ALPHA; + if (Enum == EI_BlendFactor::DstAlpha) return D3D12_BLEND_DEST_ALPHA; + if (Enum == EI_BlendFactor::InvDstAlpha) return D3D12_BLEND_INV_DEST_ALPHA; + assert(false && "Using an EI_BlendFactor that has not been mapped to DX12 yet!"); + return D3D12_BLEND_ZERO; +}; + +inline D3D12_PRIMITIVE_TOPOLOGY operator* (EI_Topology Enum) +{ + if (Enum == EI_Topology::TriangleList) return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + if (Enum == EI_Topology::TriangleStrip) return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; + assert(false && "Using an EI_Topology that has not been mapped to DX12 yet!"); + return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; +} + +EI_Device::EI_Device() : + m_currentImageIndex(0), + m_pFullscreenIndexBuffer() +{ +} + +EI_Device::~EI_Device() +{ +} + +void EI_Device::AllocateCPUVisibleView(CAULDRON_DX12::ResourceView* pResourceView) +{ + // Check that both heaps can be allocated into in general (worst case, we allocate 2 descriptors on a heap) + if (m_CPUDescriptorIndex + 1 >= 256) + { + assert(false && "AllocateResourceView: heap ran of memory, increase its size"); + } + + D3D12_CPU_DESCRIPTOR_HANDLE CPUView = m_CPUDescriptorHeap->GetCPUDescriptorHandleForHeapStart(); + CPUView.ptr += m_CPUDescriptorIndex * m_DescriptorSize; + + D3D12_GPU_DESCRIPTOR_HANDLE GPUView = m_CPUDescriptorHeap->GetGPUDescriptorHandleForHeapStart(); + GPUView.ptr += m_CPUDescriptorIndex * m_DescriptorSize; + + m_CPUDescriptorIndex++; + + // Override the resource view internal pointers + // This is a bit of a hack, but Cauldron doesn't currently support the ability to allocate descriptor handles from different heaps. + pResourceView->SetResourceView(1, m_DescriptorSize, CPUView, GPUView); +} + +struct DX12Resource +{ + DX12Resource(CAULDRON_DX12::Device* pDevice) : pDevice(pDevice) {} + + void CreateTex2D(DXGI_FORMAT Format, const int width, const int height, const int depthOrArray, const unsigned int flags, const char* name) + { + CD3DX12_RESOURCE_DESC desc = CD3DX12_RESOURCE_DESC::Tex2D(Format, width, height, depthOrArray, 1); + CreateResource(desc, flags, name); + } + void CreateBuffer(const int structSize, const int structCount, const unsigned int flags, const char* name) + { + m_structSize = structSize; + m_structCount = structCount; + m_totalMemSize = m_structSize * m_structCount; + + if (flags & EI_BF_UNIFORMBUFFER) + { + //size of DX12 constant buffers must be multiple of 256 + if (m_totalMemSize % 256 != 0) + m_totalMemSize += 256 - m_totalMemSize % 256; + } + + CD3DX12_RESOURCE_DESC desc = CD3DX12_RESOURCE_DESC::Buffer(m_totalMemSize); + CreateResource(desc, flags, name); + } + + void CreateResource(CD3DX12_RESOURCE_DESC desc, const unsigned int flags, const char* name) + { + D3D12_RESOURCE_FLAGS resourceFlags = D3D12_RESOURCE_FLAG_NONE; + D3D12_RESOURCE_STATES initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_COPY_DEST; + + + if (flags & EI_BF_NEEDSUAV) + { + resourceFlags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + initialState = (D3D12_RESOURCE_STATES)D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + + desc.Flags = resourceFlags; + m_ResourceDesc = desc; + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%S", name); + + if (flags & EI_BF_NEEDSCPUMEMORY) { + CD3DX12_RESOURCE_DESC cpuDesc = desc; + cpuDesc.Flags = D3D12_RESOURCE_FLAG_NONE; + ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), + D3D12_HEAP_FLAG_NONE, + &cpuDesc, + D3D12_RESOURCE_STATE_GENERIC_READ, + nullptr, + IID_PPV_ARGS(&cpuBuffer))); + + cpuBuffer->SetName(uniName); + } + + ThrowIfFailed(pDevice->GetDevice()->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT), + D3D12_HEAP_FLAG_NONE, + &desc, + initialState, + nullptr, + IID_PPV_ARGS(&gpuBuffer))); + + gpuBuffer->SetName(uniName); + + if (flags & EI_BF_INDEXBUFFER) + { + indexBufferView.BufferLocation = gpuBuffer->GetGPUVirtualAddress(); + indexBufferView.Format = DXGI_FORMAT_R32_UINT; + indexBufferView.SizeInBytes = m_totalMemSize; + } + } + + void FreeCPUMemory() + { + if (cpuBuffer) + cpuBuffer->Release(); + } + + void Free() { + FreeCPUMemory(); + if (gpuBuffer) + gpuBuffer->Release(); + } + + void CreateCBV(uint32_t index, CAULDRON_DX12::CBV_SRV_UAV* pRV) + { + // Describe and create a constant buffer view (CBV). + D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {}; + cbvDesc.BufferLocation = gpuBuffer->GetGPUVirtualAddress(); + cbvDesc.SizeInBytes = m_totalMemSize; + pDevice->GetDevice()->CreateConstantBufferView(&cbvDesc, pRV->GetCPU(index)); + } + + void CreateSRV(uint32_t index, CAULDRON_DX12::ResourceView* pRV) + { + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = m_ResourceDesc.Format; + srvDesc.ViewDimension = (m_ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) ? + D3D12_SRV_DIMENSION_BUFFER : + (m_ResourceDesc.DepthOrArraySize > 1) ? D3D12_SRV_DIMENSION_TEXTURE2DARRAY : D3D12_SRV_DIMENSION_TEXTURE2D; + + if (srvDesc.ViewDimension == D3D12_UAV_DIMENSION_BUFFER) + { + srvDesc.Buffer.FirstElement = 0; + srvDesc.Buffer.NumElements = m_structCount; + srvDesc.Buffer.StructureByteStride = m_structSize; + srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + } + else + { + if (m_ResourceDesc.DepthOrArraySize > 1) + { + srvDesc.Texture2DArray.ArraySize = m_ResourceDesc.DepthOrArraySize; + srvDesc.Texture2DArray.FirstArraySlice = 0; + srvDesc.Texture2DArray.MipLevels = m_ResourceDesc.MipLevels; + srvDesc.Texture2DArray.MostDetailedMip = 0; + } + else + { + srvDesc.Texture2D.MipLevels = m_ResourceDesc.MipLevels; + srvDesc.Texture2D.MostDetailedMip = 0; + } + } + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + // For SRV, we can use the existing mapping that was made from Cauldron + GetDevice()->GetDX12Device()->CreateShaderResourceView(gpuBuffer, &srvDesc, pRV->GetCPU(index)); + } + + void CreateUAV(uint32_t index, CAULDRON_DX12::ResourceView* pRV) + { + // Allocate CPU/GPU handles for the UAV + m_pUnorderedAccessView = std::unique_ptr(new CAULDRON_DX12::ResourceView); + GetDevice()->AllocateCPUVisibleView(m_pUnorderedAccessView.get()); + + D3D12_UNORDERED_ACCESS_VIEW_DESC UAViewDesc = {}; + UAViewDesc.Format = m_ResourceDesc.Format; + UAViewDesc.ViewDimension = (m_ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) ? + D3D12_UAV_DIMENSION_BUFFER : + (m_ResourceDesc.DepthOrArraySize > 1) ? D3D12_UAV_DIMENSION_TEXTURE2DARRAY : D3D12_UAV_DIMENSION_TEXTURE2D; + + if (UAViewDesc.ViewDimension == D3D12_UAV_DIMENSION_BUFFER) + { + UAViewDesc.Buffer.FirstElement = 0; + UAViewDesc.Buffer.NumElements = m_structCount; + UAViewDesc.Buffer.StructureByteStride = m_structSize; + UAViewDesc.Buffer.CounterOffsetInBytes = 0; + UAViewDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + } + else + { + if (m_ResourceDesc.DepthOrArraySize > 1) + { + UAViewDesc.Texture2DArray.ArraySize = m_ResourceDesc.DepthOrArraySize; + UAViewDesc.Texture2DArray.FirstArraySlice = 0; + UAViewDesc.Texture2DArray.MipSlice = 0; + } + else + { + UAViewDesc.Texture2D.MipSlice = 0; + } + } + + // For UAVs, we need one we can use to clear with that is CPU read/write, and one that will map back to what Cauldron expects (CPU write only) + pDevice->GetDevice()->CreateUnorderedAccessView(gpuBuffer, nullptr, &UAViewDesc, m_pUnorderedAccessView->GetCPU()); + pDevice->GetDevice()->CreateUnorderedAccessView(gpuBuffer, nullptr, &UAViewDesc, pRV->GetCPU(index)); + } + + int m_totalMemSize = 0; + int m_structCount = 0; + int m_structSize = 0; + CAULDRON_DX12::Device* pDevice = nullptr; + ID3D12Resource* cpuBuffer = nullptr; + ID3D12Resource* gpuBuffer = nullptr; + D3D12_INDEX_BUFFER_VIEW indexBufferView; + + CD3DX12_RESOURCE_DESC m_ResourceDesc; + std::unique_ptr m_pUnorderedAccessView; +}; + +void EI_Device::DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets) +{ + // Set everything + commandContext.BindSets(&pso, numBindSets, bindSets); + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pFullscreenIndexBuffer.get(); + drawParams.numIndices = 4; + drawParams.numInstances = 1; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +std::unique_ptr EI_Device::CreateBufferResource(int structSize, const int structCount, const unsigned int flags, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + res->m_pBuffer->CreateBuffer(structSize, structCount, flags | EI_BF_NEEDSCPUMEMORY, name); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateUint32Resource(const int width, const int height, const int arraySize, const char* name, uint32_t ClearValue /*= 0*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + + res->m_pBuffer->CreateTex2D(DXGI_FORMAT_R32_UINT, width, height, arraySize, EI_BF_NEEDSUAV, name); + + return std::unique_ptr(res); +} + +#ifdef TRESSFX_DEBUG_UAV +std::unique_ptr EI_Device::CreateDebugUAVResource(const int width, const int height, const size_t channels, const int arraySize, const char* name, float ClearValue /*= 0.f*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Buffer; + res->m_pBuffer = new DX12Resource(&m_device); + + DXGI_FORMAT format = DXGI_FORMAT_R32_UINT; + switch (channels) + { + case 4: + format = DXGI_FORMAT_R32G32B32A32_FLOAT; + break; + + default: + // Unsupported ... add whatever you need + assert(false); + break; + } + + res->m_pBuffer->CreateTex2D(format, width, height, arraySize, EI_BF_NEEDSUAV, name); + + return std::unique_ptr(res); +} +#endif // TRESSFX_DEBUG_UAV + +std::unique_ptr EI_Device::CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues /*= nullptr*/) +{ + EI_Resource* res = new EI_Resource; + + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + CD3DX12_RESOURCE_DESC resourceDesc = {}; + resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; + resourceDesc.Alignment = 0; + resourceDesc.Width = width; + resourceDesc.Height = height; + resourceDesc.DepthOrArraySize = 1; + resourceDesc.MipLevels = 1; + resourceDesc.SampleDesc.Count = 1; + resourceDesc.SampleDesc.Quality = 0; + resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; + resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + + if (channels == 1) + { + resourceDesc.Format = DXGI_FORMAT_R16_FLOAT; + } + else if (channels == 2) + { + resourceDesc.Format = DXGI_FORMAT_R16G16_FLOAT; + } + else if (channels == 4) + { + if (channelSize == 1) + resourceDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + else + resourceDesc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT; + } + + if (ClearValues) + { + D3D12_CLEAR_VALUE ClearParams; + ClearParams.Format = resourceDesc.Format; + ClearParams.Color[0] = ClearValues->x; + ClearParams.Color[1] = ClearValues->y; + ClearParams.Color[2] = ClearValues->z; + ClearParams.Color[3] = ClearValues->w; + + // Makes initial barriers easier to deal with + res->m_pTexture->Init(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_COMMON, &ClearParams); + } + else + res->m_pTexture->InitRenderTarget(&m_device, name, &resourceDesc, D3D12_RESOURCE_STATE_RENDER_TARGET); + + res->RTView = new CAULDRON_DX12::RTV(); + m_resourceViewHeaps.AllocRTVDescriptor(1, res->RTView); + res->m_pTexture->CreateRTV(0, res->RTView); + + res->SRView = new CAULDRON_DX12::CBV_SRV_UAV(); + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = resourceDesc.Format; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.TextureCube.MostDetailedMip = 0; + srvDesc.TextureCube.ResourceMinLODClamp = 0; + srvDesc.TextureCube.MipLevels = 1; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, res->SRView); + res->m_pTexture->CreateSRV(0, res->SRView, &srvDesc); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateDepthResource(const int width, const int height, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + res->m_pTexture->InitDepthStencil(&m_device, name, &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, width, height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + + res->DSView = new CAULDRON_DX12::DSV(); + m_resourceViewHeaps.AllocDSVDescriptor(1, res->DSView); + res->m_pTexture->CreateDSV(0, res->DSView); + + res->SRView = new CAULDRON_DX12::CBV_SRV_UAV(); + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = DXGI_FORMAT_R32_FLOAT; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.TextureCube.MostDetailedMip = 0; + srvDesc.TextureCube.ResourceMinLODClamp = 0; + srvDesc.TextureCube.MipLevels = 1; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, res->SRView); + res->m_pTexture->CreateSRV(0, res->SRView, &srvDesc); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateResourceFromFile(const char* szFilename, bool useSRGB/*= false*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_DX12::Texture(); + + res->m_pTexture->InitFromFile(GetDevice()->GetCauldronDevice(), &m_uploadHeap, szFilename, useSRGB); + + m_uploadHeap.FlushAndFinish(); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Sampler; + + D3D12_FILTER Filter; + + if (MinFilter == EI_Filter::Linear) + { + if (MaxFilter == EI_Filter::Linear) + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT; + } + else + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT; + } + } + else + { + if (MaxFilter == EI_Filter::Linear) + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + } + else + { + if (MipFilter == EI_Filter::Linear) + Filter = D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else + Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + } + } + + D3D12_SAMPLER_DESC SamplerDesc = {}; + SamplerDesc.Filter = Filter; + SamplerDesc.AddressU = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressV = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressW = (AddressMode == EI_AddressMode::Wrap) ? D3D12_TEXTURE_ADDRESS_MODE_WRAP : D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.MipLODBias = 0; + SamplerDesc.MaxAnisotropy = 1; + SamplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_NEVER; + SamplerDesc.BorderColor[0] = 0.f; + SamplerDesc.BorderColor[1] = 0.f; + SamplerDesc.BorderColor[2] = 0.f; + SamplerDesc.BorderColor[3] = 0.f; + SamplerDesc.MinLOD = 0.f; + SamplerDesc.MaxLOD = D3D12_FLOAT32_MAX; + + res->m_pSampler = new CAULDRON_DX12::SAMPLER(); + m_resourceViewHeaps.AllocSamplerDescriptor(1, res->m_pSampler); + + m_device.GetDevice()->CreateSampler(&SamplerDesc, res->m_pSampler->GetCPU()); + res->samplerDesc = SamplerDesc; + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateBindSet(EI_BindLayout* layout, EI_BindSetDescription& bindSet) +{ + EI_BindSet* result = new EI_BindSet; + assert(layout->layoutBindings.size() == bindSet.resources.size()); + + UINT numTotalSlotsNeededInDeScriptorTable = 0; + int numBindings = (int)layout->layoutBindings.size(); + + // On DX12, we can't mix samplers with other resource types, so validate that all resources in the bind set are all samplers, or all other + bool IsSamplerBindSet = (bindSet.resources[0]->m_ResourceType == EI_ResourceType::Sampler); + + for (int i = 0; i < numBindings; i++) + { + UINT numSlotsNeededInDeScriptorTable = layout->layoutBindings[i].BaseShaderRegister + layout->layoutBindings[i].NumDescriptors; + if (numSlotsNeededInDeScriptorTable > numTotalSlotsNeededInDeScriptorTable) + numTotalSlotsNeededInDeScriptorTable = numSlotsNeededInDeScriptorTable; + assert(!IsSamplerBindSet || (IsSamplerBindSet && bindSet.resources[i]->m_ResourceType == EI_ResourceType::Sampler) && "Samplers cannot be mixed with other resource types. Please re-organize your layout/bindset"); + } + + if (!IsSamplerBindSet) + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(numTotalSlotsNeededInDeScriptorTable, static_cast(&result->descriptorTable)); + else + m_resourceViewHeaps.AllocSamplerDescriptor(numTotalSlotsNeededInDeScriptorTable, static_cast(&result->descriptorTable)); + + for (int i = 0; i < numBindings; i++) + { + assert(layout->layoutBindings[i].NumDescriptors == 1); + UINT descriptorIdx = i; + switch (layout->description.resources[i].type) + { + case EI_RESOURCETYPE_BUFFER_RW: + bindSet.resources[i]->m_pBuffer->CreateUAV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_BUFFER_RO: + bindSet.resources[i]->m_pBuffer->CreateSRV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_IMAGE_RW: + if (bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer) + bindSet.resources[i]->m_pBuffer->CreateUAV(descriptorIdx, &result->descriptorTable); // Override the descriptor pointers used with our own which are properly allocated for clearing/writing + else + bindSet.resources[i]->m_pTexture->CreateUAV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_IMAGE_RO: + if (bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer) + bindSet.resources[i]->m_pBuffer->CreateSRV(descriptorIdx, &result->descriptorTable); // Override the descriptor pointers used with our own which are properly allocated for clearing/writing + else + bindSet.resources[i]->m_pTexture->CreateSRV(descriptorIdx, static_cast(&result->descriptorTable), 0); + break; + case EI_RESOURCETYPE_UNIFORM: + bindSet.resources[i]->m_pBuffer->CreateCBV(descriptorIdx, static_cast(&result->descriptorTable)); + break; + case EI_RESOURCETYPE_SAMPLER: + m_device.GetDevice()->CreateSampler(&bindSet.resources[i]->samplerDesc, static_cast(&result->descriptorTable)->GetCPU()); + break; + default: + assert(0); + break; + } + } + + return std::unique_ptr(result); +} + +EI_BindSet::~EI_BindSet() +{ + // Should we move the descriptor allocation/deallocation to the bindset? + //GetDevice()->GetResourceViewHeaps().FreeDescriptor(m_descriptorSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + assert(numResources < MaxRenderAttachments && "Number of resources exceeds maximum allowable. Please grow MaxRenderAttachments value."); + + // Create the render pass set + EI_RenderTargetSet* pNewRenderTargetSet = new EI_RenderTargetSet; + + int currentClearValueRef = 0; + for (uint32_t i = 0; i < numResources; i++) + { + // Check size consistency + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + // Setup a clear value if needed + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Clear) + { + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + pNewRenderTargetSet->m_ClearValues[i].DepthStencil.Depth = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].DepthStencil.Stencil = (uint32_t)clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Format = DXGI_FORMAT_D32_FLOAT; + pNewRenderTargetSet->m_HasDepth = true; + pNewRenderTargetSet->m_ClearDepth = true; + } + else + { + pNewRenderTargetSet->m_ClearValues[i].Color[0] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[1] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[2] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Color[3] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].Format = pResourceFormats[i]; + pNewRenderTargetSet->m_ClearColor[i] = true; + } + } + else if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + pNewRenderTargetSet->m_HasDepth = true; + + pNewRenderTargetSet->m_RenderResourceFormats[i] = pResourceFormats[i]; + } + + // Tag the number of resources this render pass set is setting/clearing + pNewRenderTargetSet->m_NumResources = numResources; + + return std::unique_ptr(pNewRenderTargetSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + std::vector FormatArray(numResources); + + for (uint32_t i = 0; i < numResources; ++i) + { + assert(pResourcesArray[i]->m_ResourceType == EI_ResourceType::Texture); + FormatArray[i] = pResourcesArray[i]->m_pTexture->GetFormat(); + if (FormatArray[i] == DXGI_FORMAT_R32_TYPELESS) + { + FormatArray[i] = DXGI_FORMAT_D32_FLOAT; + } + } + std::unique_ptr result = CreateRenderTargetSet(FormatArray.data(), numResources, AttachmentParams, clearValues); + result->SetResources(pResourcesArray); + return result; +} + +std::unique_ptr EI_Device::CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon) +{ + EI_GLTFTexturesAndBuffers* GLTFBuffersAndTextures = new CAULDRON_DX12::GLTFTexturesAndBuffers(); + GLTFBuffersAndTextures->OnCreate(GetCauldronDevice(), pGLTFCommon, &m_uploadHeap, &m_vidMemBufferPool, &m_constantBufferRing); + + return std::unique_ptr(GLTFBuffersAndTextures); +} + +std::unique_ptr EI_Device::CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfPbrPass* GLTFPbr = new CAULDRON_DX12::GltfPbrPass(); + GLTFPbr->OnCreate(GetCauldronDevice(), &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, + pGLTFTexturesAndBuffers, nullptr, false, GetColorBufferFormat(), 1); + + return std::unique_ptr(GLTFPbr); +} + +std::unique_ptr EI_Device::CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfDepthPass* GLTFDepth = new CAULDRON_DX12::GltfDepthPass(); + assert(renderTargetSet); + + GLTFDepth->OnCreate(GetCauldronDevice(), &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, + pGLTFTexturesAndBuffers); + + return std::unique_ptr(GLTFDepth); +} + +void EI_RenderTargetSet::SetResources(const EI_Resource** pResourcesArray) +{ + for (uint32_t i = 0; i < m_NumResources; ++i) + m_RenderResources[i] = pResourcesArray[i]; +} + +EI_RenderTargetSet::~EI_RenderTargetSet() +{ + // Nothing to clean up +} + +void EI_Device::BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderTargetSet, const wchar_t* pPassName, uint32_t width /*= 0*/, uint32_t height /*= 0*/) +{ + D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle[MaxRenderAttachments]; + D3D12_CPU_DESCRIPTOR_HANDLE* depthCpuHandle = nullptr; + uint32_t numRenderTargets = 0; + const D3D12_CLEAR_VALUE* pDepthClearValue = nullptr; + + using namespace DirectX::Detail; + UINT size = static_cast((wcslen(pPassName) + 1) * sizeof(wchar_t)); + commandContext.commandBuffer.Get()->BeginEvent(PIX_EVENT_UNICODE_VERSION, pPassName, size); + + assert(pRenderTargetSet->m_NumResources == 1 || (pRenderTargetSet->m_NumResources == 2 && pRenderTargetSet->m_HasDepth) && "Currently only support 1 render target with (or without) depth"); + + // This is a depth render + if (pRenderTargetSet->m_NumResources == 1 && pRenderTargetSet->m_HasDepth) + { + cpuHandle[0] = pRenderTargetSet->m_RenderResources[0]->DSView->GetCPU(); + depthCpuHandle = &cpuHandle[0]; + if (pRenderTargetSet->m_ClearDepth) + pDepthClearValue = &pRenderTargetSet->m_ClearValues[0]; + } + else + { + cpuHandle[0] = pRenderTargetSet->m_RenderResources[0]->RTView->GetCPU(); + ++numRenderTargets; + } + + if (pRenderTargetSet->m_HasDepth && pRenderTargetSet->m_NumResources > 1) + { + cpuHandle[1] = pRenderTargetSet->m_RenderResources[1]->DSView->GetCPU(); + depthCpuHandle = &cpuHandle[1]; + if (pRenderTargetSet->m_ClearDepth) + pDepthClearValue = &pRenderTargetSet->m_ClearValues[1]; + } + + commandContext.commandBuffer->OMSetRenderTargets(numRenderTargets, numRenderTargets? cpuHandle : nullptr, FALSE, depthCpuHandle); + + // Do we need to clear? + if (numRenderTargets && pRenderTargetSet->m_ClearColor[0]) + commandContext.commandBuffer->ClearRenderTargetView(cpuHandle[0], pRenderTargetSet->m_ClearValues[0].Color, 0, nullptr); + + if (depthCpuHandle && pDepthClearValue) + commandContext.commandBuffer->ClearDepthStencilView(*depthCpuHandle, D3D12_CLEAR_FLAG_DEPTH, pDepthClearValue->DepthStencil.Depth, pDepthClearValue->DepthStencil.Stencil, 0, nullptr); + + SetViewportAndScissor(commandContext, 0, 0, width ? width : m_width, height ? height : m_height); +} + +void EI_Device::EndRenderPass(EI_CommandContext& commandContext) +{ + // End of tracing event + commandContext.commandBuffer.Get()->EndEvent(); + + // Unset all OMS RenderTargets + GetDevice()->EndRenderPass(); +} + +void EI_Device::SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height) +{ + CAULDRON_DX12::SetViewportAndScissor(commandContext.commandBuffer.Get(), topX, topY, width, height); +} + +void EI_Device::OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName) +{ + // Create Device + m_device.OnCreate(appName, "TressFX 4.1 (DX12)", enableValidation, hWnd); + m_device.CreatePipelineCache(); + + //init the shader compiler + CAULDRON_DX12::CreateShaderCache(); + + // Create Swap chain + m_swapChain.OnCreate(&m_device, numBackBuffers, hWnd, CAULDRON_DX12::DISPLAYMODE_SDR); + + m_resourceViewHeaps.OnCreate(&m_device, 256, 256, 256, 256, 256, 256); + + // Create our own resource heaps (needed for more complex UAV behaviors) + m_CPUDescriptorIndex = 0; + m_DescriptorSize = m_device.GetDevice()->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + D3D12_DESCRIPTOR_HEAP_DESC descHeap; + descHeap.NumDescriptors = 256; + descHeap.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + descHeap.NodeMask = 0; + + // CPU read/write Descriptor heap + descHeap.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + ThrowIfFailed(m_device.GetDevice()->CreateDescriptorHeap(&descHeap, IID_PPV_ARGS(m_CPUDescriptorHeap.GetAddressOf()))); + m_CPUDescriptorHeap->SetName(L"DX12EngineInterface_CPUDescriptorHeap"); + + // Create a command list ring for the Direct queue + D3D12_COMMAND_QUEUE_DESC CommandQueueDesc = {}; + CommandQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; + CommandQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; + CommandQueueDesc.NodeMask = 0; + m_commandListRing.OnCreate(&m_device, numBackBuffers, 8, CommandQueueDesc); + // async compute + // Cauldron doesn't currently support a compute queue (TODO), so reuse the direct queue for these + CommandQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; + m_computeCommandListRing.OnCreate(&m_device, numBackBuffers, 8, CommandQueueDesc); + BeginNewCommandBuffer(); + + // Create fences + m_computeDoneFence.OnCreate(&m_device, "Compute Done Fence"); + m_lastFrameGraphicsCommandBufferFence.OnCreate(&m_device, "Last Frame Graphics Command Buffer Fence"); + + // Create a 'dynamic' constant buffers ring + m_constantBufferRing.OnCreate(&m_device, numBackBuffers, 20 * 1024 * 1024, &m_resourceViewHeaps); + + // Create a 'static' constant buffer pool + m_vidMemBufferPool.OnCreate(&m_device, 128 * 1024 * 1024, USE_VID_MEM, "StaticGeom"); + m_sysMemBufferPool.OnCreate(&m_device, 32 * 1024, false, "PostProcGeom"); + + // initialize the GPU time stamps module + m_gpuTimer.OnCreate(&m_device, numBackBuffers); + + // Quick helper to upload resources, it has it's own commandList and uses sub-allocation. + // for 4K textures we'll need 100Megs + m_uploadHeap.OnCreate(&m_device, 100 * 1024 * 1024); + + // Create tonemapping pass + m_toneMapping.OnCreate(&m_device, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, m_swapChain.GetFormat()); + + // Initialize UI rendering resources + m_ImGUI.OnCreate(&m_device, &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, DXGI_FORMAT_R8G8B8A8_UNORM); + + // Create a render pass for our main buffer as it's needed earlier than other stuff is created + //VkFormat backbufferFormats[] = { VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_D32_SFLOAT }; + + // Create index buffer for full screen passes + m_pFullscreenIndexBuffer = CreateBufferResource(sizeof(uint32_t), 4, EI_BF_INDEXBUFFER, "FullScreenIndexBuffer"); + + // Create shadow buffer. Because GLTF only allows us 1 buffer, we are going to create a HUGE one and divy it up as needed. + m_shadowBuffer = CreateDepthResource(4096, 4096, "Shadow Buffer"); + + // Create layout and PSO for resolve to swap chain + EI_LayoutDescription desc = { { {"ColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, }, EI_PS }; + m_pEndFrameResolveBindLayout = CreateLayout(desc); + + // Recreate a PSO for full screen resolve to swap chain + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::Always; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { m_pEndFrameResolveBindLayout.get() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = nullptr; // Will go to swap chain + m_pEndFrameResolvePSO = CreateGraphicsPSO("FullScreenRender.hlsl", "FullScreenVS", "FullScreenRender.hlsl", "FullScreenPS", psoParams); + + // Create default white texture to use + m_DefaultWhiteTexture = CreateResourceFromFile("DefaultWhite.png", true); + + // Create some samplers to use + m_LinearWrapSampler = CreateSampler(EI_Filter::Linear, EI_Filter::Linear, EI_Filter::Linear, EI_AddressMode::Wrap); + + // finish creating the index buffer + uint32_t indexArray[] = { 0, 1, 2, 3 }; + m_currentCommandBuffer.UpdateBuffer(m_pFullscreenIndexBuffer.get(), indexArray); + + EI_Barrier copyToResource[] = { + { m_pFullscreenIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(copyToResource), copyToResource); + +} + +void EI_Device::OnResize(uint32_t width, uint32_t height) +{ + m_width = width; + m_height = height; + + // if a previous resize event from this frame hasnt already opened a command buffer + if (!m_recording) + { + BeginNewCommandBuffer(); + } + + // If resizing but no minimizing + if (width > 0 && height > 0) + { + // Re/Create color buffer + m_colorBuffer = CreateRenderTargetResource(width, height, 4, 1, "Color Buffer"); + + m_depthBuffer = CreateDepthResource(width, height, "Depth Buffer"); + m_swapChain.OnCreateWindowSizeDependentResources(width, height, m_vSync, CAULDRON_DX12::DISPLAYMODE_SDR); + +#ifdef TRESSFX_DEBUG_UAV + m_pDebugUAV = CreateDebugUAVResource(width, height, 4, 2, "DebugUAV", 0.f); +#endif // TRESSFX_DEBUG_UAV + + // Create resources we need to resolve out render target back to swap chain + EI_BindSetDescription bindSet = { { m_colorBuffer.get() } }; + m_pEndFrameResolveBindSet = CreateBindSet(m_pEndFrameResolveBindLayout.get(), bindSet); + + // Create a bind set for any samplers we need (Doing it here because the layouts aren't yet initialized during OnCreate() call) + EI_BindSetDescription bindSetDesc = { { m_LinearWrapSampler.get(), } }; + m_pSamplerBindSet = CreateBindSet(GetSamplerLayout(), bindSetDesc); + + // update tonemapping + m_toneMapping.UpdatePipelines(m_swapChain.GetFormat()); + } +} + +void EI_Device::OnDestroy() +{ + m_device.GPUFlush(); + + // Remove linear wrap sampler + m_LinearWrapSampler.reset(); + + // Remove default white texture + m_DefaultWhiteTexture.reset(); + + // Wipe all the local resources we were using + m_pSamplerBindSet.reset(); + m_pEndFrameResolveBindSet.reset(); + m_pEndFrameResolvePSO.reset(); + m_pEndFrameResolveBindLayout.reset(); + + m_pFullscreenIndexBuffer.reset(); + + m_depthBuffer.reset(); + m_colorBuffer.reset(); + +#if TRESSFX_DEBUG_UAV + m_pDebugUAV.reset(); +#endif // TRESSFX_DEBUG_UAV + + m_toneMapping.OnDestroy(); + m_ImGUI.OnDestroy(); + + m_uploadHeap.OnDestroy(); + m_gpuTimer.OnDestroy(); + m_vidMemBufferPool.OnDestroy(); + m_sysMemBufferPool.OnDestroy(); + m_constantBufferRing.OnDestroy(); + m_resourceViewHeaps.OnDestroy(); + m_commandListRing.OnDestroy(); + m_computeCommandListRing.OnDestroy(); + + // Full screen state should always be false before exiting the app. + m_swapChain.SetFullScreen(false); + m_swapChain.OnDestroyWindowSizeDependentResources(); + m_swapChain.OnDestroy(); + + // shut down the shader compiler + DestroyShaderCache(&m_device); + m_device.DestroyPipelineCache(); + m_device.OnDestroy(); +} + +D3D12_SHADER_VISIBILITY GetShaderVisibility(EI_ShaderStage stage) +{ + switch (stage) + { + case EI_VS: + return D3D12_SHADER_VISIBILITY_VERTEX; + case EI_PS: + return D3D12_SHADER_VISIBILITY_PIXEL; + case EI_CS: + return D3D12_SHADER_VISIBILITY_ALL; + case EI_ALL: + return D3D12_SHADER_VISIBILITY_ALL; + default: + return D3D12_SHADER_VISIBILITY_ALL; + } +} + +std::unique_ptr EI_Device::CreateComputeShaderPSO(const char* shaderName, const char* entryPoint, EI_BindLayout** layouts, int numLayouts) +{ + EI_PSO* result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_DX12"] = "1"; + +#ifdef TRESSFX_DEBUG_UAV + defines["TRESSFX_DEBUG_UAV"] = "1"; +#endif // TRESSFX_DEBUG_UAV + + D3D12_SHADER_BYTECODE computeShader; + CAULDRON_DX12::CompileShaderFromFile(shaderName, &defines, entryPoint, "cs_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &computeShader); + + CD3DX12_ROOT_PARAMETER descSetLayouts[16]; + assert(numLayouts < 16); + for (int i = 0; i < numLayouts; ++i) + { + // i dont like this since it has a side effect on the layout that gets passed - i'd just get rid of the spaces + for (int j = 0; j < layouts[i]->layoutBindings.size(); ++j) + { + layouts[i]->layoutBindings[j].RegisterSpace = i; + } + descSetLayouts[i].InitAsDescriptorTable((uint32_t)layouts[i]->layoutBindings.size(), layouts[i]->layoutBindings.data(), GetShaderVisibility(layouts[i]->description.stage)); + } + + CD3DX12_ROOT_SIGNATURE_DESC descRootSignature = CD3DX12_ROOT_SIGNATURE_DESC(); + descRootSignature.NumParameters = numLayouts; + descRootSignature.pParameters = descSetLayouts; + descRootSignature.NumStaticSamplers = 0; + descRootSignature.pStaticSamplers = 0; + + // deny uneccessary access to certain pipeline stages + descRootSignature.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE + | D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT + | D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS; + + ID3DBlob* signature; + ID3DBlob* error; + HRESULT hr = D3D12SerializeRootSignature(&descRootSignature, D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error); + m_device.GetDevice()->CreateRootSignature( + 0, + signature->GetBufferPointer(), + signature->GetBufferSize(), + __uuidof(ID3D12RootSignature), + (void**)&result->m_pipelineLayout); + + signature->Release(); + if (error) + error->Release(); + + // Describe and create the compute pipeline state object (PSO). + D3D12_COMPUTE_PIPELINE_STATE_DESC computePsoDesc = {}; + computePsoDesc.pRootSignature = result-> m_pipelineLayout.Get(); + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(computeShader); + ThrowIfFailed(m_device.GetDevice()->CreateComputePipelineState(&computePsoDesc, IID_PPV_ARGS(&result->m_pipeline))); + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%hs%hs", shaderName, entryPoint); + result->m_pipelineLayout->SetName(uniName); + result->m_pipeline->SetName(uniName); + + result->m_bp = EI_BP_COMPUTE; + return std::unique_ptr(result); +} + +EI_PSO::~EI_PSO() +{ + // Everything will auto release when going out of scope +} + +std::unique_ptr EI_Device::CreateGraphicsPSO(const char* vertexShaderName, const char* vertexEntryPoint, const char* fragmentShaderName, const char* fragmentEntryPoint, EI_PSOParams& psoParams) +{ + EI_PSO* result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_DX12"] = "1"; + +#ifdef TRESSFX_DEBUG_UAV + defines["TRESSFX_DEBUG_UAV"] = "1"; +#endif // TRESSFX_DEBUG_UAV + + // Compile and create shaders + D3D12_SHADER_BYTECODE vertexShader, fragmentShader; + + CAULDRON_DX12::CompileShaderFromFile(vertexShaderName, &defines, vertexEntryPoint, "vs_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &vertexShader); + CAULDRON_DX12::CompileShaderFromFile(fragmentShaderName, &defines, fragmentEntryPoint, "ps_6_0", D3DCOMPILE_DEBUG | D3DCOMPILE_OPTIMIZATION_LEVEL0 | D3DCOMPILE_SKIP_OPTIMIZATION, &fragmentShader); + + CD3DX12_ROOT_PARAMETER descSetLayouts[16]; + for (int i = 0; i < psoParams.numLayouts; ++i) + { + // i dont like this since it has a side effect on the layout that gets passed - i'd just get rid of the spaces + for (int j = 0; j < psoParams.layouts[i]->layoutBindings.size(); ++j) + { + psoParams.layouts[i]->layoutBindings[j].RegisterSpace = i; + } + descSetLayouts[i].InitAsDescriptorTable((uint32_t)psoParams.layouts[i]->layoutBindings.size(), psoParams.layouts[i]->layoutBindings.data(), GetShaderVisibility(psoParams.layouts[i]->description.stage)); + } + + CD3DX12_ROOT_SIGNATURE_DESC descRootSignature = CD3DX12_ROOT_SIGNATURE_DESC(); + descRootSignature.NumParameters = psoParams.numLayouts; + descRootSignature.pParameters = descSetLayouts; + descRootSignature.NumStaticSamplers = 0; + descRootSignature.pStaticSamplers = 0; + + // deny uneccessary access to certain pipeline stages + descRootSignature.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE + | D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT + | D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS + | D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS; + + ID3DBlob* signature; + ID3DBlob* error; + HRESULT hr = D3D12SerializeRootSignature(&descRootSignature, D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error); + m_device.GetDevice()->CreateRootSignature( + 0, + signature->GetBufferPointer(), + signature->GetBufferSize(), + __uuidof(ID3D12RootSignature), + (void**)&result->m_pipelineLayout); + + signature->Release(); + if (error) + error->Release(); + + // Setup blending + D3D12_BLEND_DESC blendDesc; + blendDesc.AlphaToCoverageEnable = false; + blendDesc.IndependentBlendEnable = false; + blendDesc.RenderTarget[0].LogicOpEnable = false; + blendDesc.RenderTarget[0].BlendEnable = psoParams.colorBlendParams.colorBlendEnabled; + blendDesc.RenderTarget[0].SrcBlend = *psoParams.colorBlendParams.colorSrcBlend; + blendDesc.RenderTarget[0].DestBlend = *psoParams.colorBlendParams.colorDstBlend; + blendDesc.RenderTarget[0].BlendOp = *psoParams.colorBlendParams.colorBlendOp; + blendDesc.RenderTarget[0].SrcBlendAlpha = *psoParams.colorBlendParams.alphaSrcBlend; + blendDesc.RenderTarget[0].DestBlendAlpha = *psoParams.colorBlendParams.alphaDstBlend; + blendDesc.RenderTarget[0].BlendOpAlpha = *psoParams.colorBlendParams.alphaBlendOp; + blendDesc.RenderTarget[0].LogicOp = D3D12_LOGIC_OP_NOOP; + blendDesc.RenderTarget[0].RenderTargetWriteMask = psoParams.colorWriteEnable ? D3D12_COLOR_WRITE_ENABLE_ALL : 0; + + bool depthOnly = (psoParams.renderTargetSet && psoParams.renderTargetSet->m_NumResources == 1 && psoParams.renderTargetSet->m_HasDepth); + bool hasDepth = (psoParams.renderTargetSet && psoParams.renderTargetSet->m_HasDepth); + + // Describe and create the graphics pipeline state object (PSO). + D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {}; + psoDesc.InputLayout = { nullptr, 0 }; // Don't even need a vertex buffer right now + psoDesc.pRootSignature = result->m_pipelineLayout.Get(); + psoDesc.VS = vertexShader; + psoDesc.PS = fragmentShader; + psoDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT); + psoDesc.RasterizerState.FrontCounterClockwise = true; + // hack, the fullscreen quad doesnt show up without this even if i reverse the index order + if (psoParams.primitiveTopology == EI_Topology::TriangleStrip) + { + psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE; + } + psoDesc.BlendState = blendDesc; + psoDesc.DepthStencilState.DepthEnable = psoParams.depthTestEnable; + psoDesc.DepthStencilState.StencilEnable = psoParams.stencilTestEnable; + psoDesc.DepthStencilState.DepthFunc = *psoParams.depthCompareOp; + psoDesc.DepthStencilState.DepthWriteMask = psoParams.depthWriteEnable ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO; + psoDesc.DepthStencilState.StencilReadMask = psoParams.stencilReadMask; + psoDesc.DepthStencilState.StencilWriteMask = psoParams.stencilWriteMask; + psoDesc.DepthStencilState.BackFace.StencilDepthFailOp = *psoParams.backDepthFailOp; + psoDesc.DepthStencilState.BackFace.StencilFailOp = *psoParams.backFailOp; + psoDesc.DepthStencilState.BackFace.StencilFunc = *psoParams.backCompareOp; + psoDesc.DepthStencilState.BackFace.StencilPassOp = *psoParams.backPassOp; + psoDesc.DepthStencilState.FrontFace.StencilDepthFailOp = *psoParams.frontDepthFailOp; + psoDesc.DepthStencilState.FrontFace.StencilFailOp = *psoParams.frontFailOp; + psoDesc.DepthStencilState.FrontFace.StencilFunc = *psoParams.frontCompareOp; + psoDesc.DepthStencilState.FrontFace.StencilPassOp = *psoParams.frontPassOp; + psoDesc.SampleMask = UINT_MAX; + psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + psoDesc.NumRenderTargets = depthOnly ? 0 : 1; + psoDesc.RTVFormats[0] = (psoParams.renderTargetSet) ? ( depthOnly ? DXGI_FORMAT_UNKNOWN : psoParams.renderTargetSet->m_RenderResourceFormats[0] ) : m_swapChain.GetFormat(); + psoDesc.DSVFormat = hasDepth ? psoParams.renderTargetSet->m_RenderResourceFormats[psoParams.renderTargetSet->m_NumResources-1] : DXGI_FORMAT_UNKNOWN; + psoDesc.SampleDesc.Count = 1; + ThrowIfFailed(m_device.GetDevice()->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&result->m_pipeline))); + + // Store the prim type as well + result->m_primitiveTopology = *psoParams.primitiveTopology; + + wchar_t uniName[1024]; + swprintf(uniName, 1024, L"%hs%hs", vertexShaderName, vertexEntryPoint); + result->m_pipelineLayout->SetName(uniName); + result->m_pipeline->SetName(uniName); + + result->m_bp = EI_BP_GRAPHICS; + return std::unique_ptr(result); +} + +void EI_Device::WaitForCompute() +{ + m_computeDoneFence.GpuWaitForFence(m_device.GetGraphicsQueue()); +} + +void EI_Device::SignalComputeStart() +{ +} + +void EI_Device::WaitForLastFrameGraphics() +{ + m_lastFrameGraphicsCommandBufferFence.CpuWaitForFence(1); +} + +void EI_Device::SubmitComputeCommandList() +{ + m_currentComputeCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentComputeCommandBuffer.commandBuffer.Get() }; + m_device.GetComputeQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_computeDoneFence.IssueFence(m_device.GetComputeQueue()); +} + +void EI_CommandContext::DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams) +{ + commandBuffer->IASetIndexBuffer(&drawParams.pIndexBuffer->m_pBuffer->indexBufferView); + commandBuffer->IASetPrimitiveTopology(pso.m_primitiveTopology); + commandBuffer->SetPipelineState(pso.m_pipeline.Get()); + commandBuffer->DrawIndexedInstanced(drawParams.numIndices, 1, 0, 0, 0); +} + +void EI_CommandContext::DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams) +{ + commandBuffer->SetPipelineState(pso.m_pipeline.Get()); + commandBuffer->IASetPrimitiveTopology(pso.m_primitiveTopology); + commandBuffer->DrawInstanced(drawParams.numVertices, drawParams.numInstances, 0, 0); +} + +void EI_CommandContext::PushConstants(EI_PSO* pso, int size, void* data) +{ + assert(false && "Not yet implemented!"); + //vkCmdPushConstants(commandBuffer, pso->m_pipelineLayout, VK_SHADER_STAGE_ALL, 0, size, data); +} + +void EI_Device::BeginNewCommandBuffer() +{ + m_currentCommandBuffer.commandBuffer = m_commandListRing.GetNewCommandList(); + m_recording = true; +} + +void EI_Device::BeginNewComputeCommandBuffer() +{ + m_currentComputeCommandBuffer.commandBuffer = m_computeCommandListRing.GetNewCommandList(); +} + +void EI_Device::EndAndSubmitCommandBuffer() +{ + m_currentCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentCommandBuffer.commandBuffer.Get() }; + m_device.GetGraphicsQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_recording = false; +} + +void EI_Device::EndAndSubmitCommandBufferWithFence() +{ + m_currentCommandBuffer.commandBuffer->Close(); + + // Execute the command list. + ID3D12CommandList* ppCommandLists[] = { m_currentCommandBuffer.commandBuffer.Get() }; + m_device.GetGraphicsQueue()->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists); + m_lastFrameGraphicsCommandBufferFence.IssueFence(m_device.GetGraphicsQueue()); + m_recording = false; +} + +void EI_Device::BeginBackbufferRenderPass() +{ + using namespace DirectX::Detail; + const wchar_t pPassName[] = L"BackBufferRenderPass"; + UINT size = static_cast((wcslen(pPassName) + 1) * sizeof(wchar_t)); + m_currentCommandBuffer.commandBuffer.Get()->BeginEvent(PIX_EVENT_UNICODE_VERSION, pPassName, size); + + // First transition the current back buffer to render target from present resource + CD3DX12_RESOURCE_BARRIER barrier = CD3DX12_RESOURCE_BARRIER::Transition(m_swapChain.GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET); + m_currentCommandBuffer.commandBuffer->ResourceBarrier(1, &barrier); + + D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle[MaxRenderAttachments]; + + cpuHandle[0] = *m_swapChain.GetCurrentBackBufferRTV(); + cpuHandle[1] = m_depthBuffer->DSView->GetCPU(); + + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(1, cpuHandle, FALSE, &cpuHandle[1]); + + // Setup fast clear + D3D12_CLEAR_VALUE clearValues[2]; + clearValues[0].Format = m_swapChain.GetFormat(); + clearValues[0].Color[0] = 0.0f; + clearValues[0].Color[1] = 0.0f; + clearValues[0].Color[2] = 0.0f; + clearValues[0].Color[3] = 1.0f; + + clearValues[1].Format = DXGI_FORMAT_D32_FLOAT; + clearValues[1].DepthStencil.Depth = 1.0f; + clearValues[1].DepthStencil.Stencil = 0; + + // Do a clear before rendering everything out to the swap chain buffer + m_currentCommandBuffer.commandBuffer->ClearRenderTargetView(cpuHandle[0], clearValues[0].Color, 0, nullptr); + // Only clear depth as we don't currently have a stencil + m_currentCommandBuffer.commandBuffer->ClearDepthStencilView(cpuHandle[1], D3D12_CLEAR_FLAG_DEPTH, clearValues[1].DepthStencil.Depth, clearValues[1].DepthStencil.Stencil, 0, nullptr); + + CAULDRON_DX12::SetViewportAndScissor(m_currentCommandBuffer.commandBuffer.Get(), 0, 0, m_width, m_height); +} + +void EI_Device::EndRenderPass() +{ + // Unbind all render targets/depth/stencil buffers + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(0, nullptr, FALSE, nullptr); +} + +void EI_Device::GetTimeStamp(char* name) +{ + m_gpuTimer.GetTimeStamp(m_currentCommandBuffer.commandBuffer.Get(), name); +} + +D3D12_DESCRIPTOR_RANGE_TYPE GetDescriptorRangeType(EI_ResourceTypeEnum type) +{ + switch (type) + { + case EI_RESOURCETYPE_BUFFER_RW: + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + case EI_RESOURCETYPE_BUFFER_RO: + return D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + case EI_RESOURCETYPE_IMAGE_RW: + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + case EI_RESOURCETYPE_IMAGE_RO: + return D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + case EI_RESOURCETYPE_UNIFORM: + return D3D12_DESCRIPTOR_RANGE_TYPE_CBV; + case EI_RESOURCETYPE_SAMPLER: + return D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER; + default: + assert(0); + } + return D3D12_DESCRIPTOR_RANGE_TYPE_UAV; +} + +CD3DX12_DESCRIPTOR_RANGE DX12DescriptorSetBinding(int binding, EI_ShaderStage stage, EI_ResourceTypeEnum type) { + + CD3DX12_DESCRIPTOR_RANGE b; + D3D12_DESCRIPTOR_RANGE_TYPE rangeType; + + if (type == EI_RESOURCETYPE_BUFFER_RO) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + } + if (type == EI_RESOURCETYPE_BUFFER_RW) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + } + if (type == EI_RESOURCETYPE_IMAGE_RW) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV; + } + if (type == EI_RESOURCETYPE_IMAGE_RO) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV; + } + if (type == EI_RESOURCETYPE_UNIFORM) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_CBV; + } + if (type == EI_RESOURCETYPE_SAMPLER) + { + rangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER; + } + b.Init(rangeType, 1, binding, 0); + return b; +} + +std::unique_ptr EI_Device::CreateLayout(const EI_LayoutDescription& description) +{ + std::vector layoutBindings; + + EI_BindLayout* pLayout = new EI_BindLayout; + + int numResources = (int)description.resources.size(); + + for (int i = 0; i < numResources; ++i) + { + int binding = description.resources[i].binding; + if (binding >= 0) { + layoutBindings.push_back(DX12DescriptorSetBinding(binding, description.stage, description.resources[i].type)); + } + } + + pLayout->layoutBindings = layoutBindings; + pLayout->description = description; + return std::unique_ptr(pLayout); +} + +EI_BindLayout::~EI_BindLayout() +{ + // Nothing to do here ... +} + +void EI_Device::OnBeginFrame(bool bDoAsync) +{ + // This needs to be called prior to getting a command list because it's done differently on DX12 than Vulkan + if (bDoAsync) + m_computeCommandListRing.OnBeginFrame(); + + // Let our resource managers do some house keeping + m_constantBufferRing.OnBeginFrame(); + + // Timing values + UINT64 gpuTicksPerSecond; + m_device.GetGraphicsQueue()->GetTimestampFrequency(&gpuTicksPerSecond); + m_gpuTimer.OnBeginFrame(gpuTicksPerSecond, &m_timeStamps); + + // if a resize event already started a the command buffer - we need to do it this way, + // because multiple resizes in one frame could overflow the command buffer pool if we open a new + // command buffer everytime we resize + if (m_recording) + { + EndAndSubmitCommandBuffer(); + FlushGPU(); + } + + WaitForLastFrameGraphics(); + BeginNewCommandBuffer(); + + if (bDoAsync) + BeginNewComputeCommandBuffer(); + + std::map timeStampMap; + for (int i = 0; i < (int)m_timeStamps.size() - 1; ++i) + { + timeStampMap[m_timeStamps[i + 1].m_label] += m_timeStamps[i + 1].m_microseconds - m_timeStamps[i].m_microseconds; + } + int i = 0; + m_sortedTimeStamps.resize(timeStampMap.size()); + for (std::map::iterator it = timeStampMap.begin(); it != timeStampMap.end(); ++it) + { + m_sortedTimeStamps[i].m_label = it->first; + m_sortedTimeStamps[i].m_microseconds = it->second; + ++i; + } + if (m_timeStamps.size() > 0) + { + //scrolling data and average computing + static float values[128]; + values[127] = (float)(m_timeStamps.back().m_microseconds - m_timeStamps.front().m_microseconds); + float average = values[0]; + for (uint32_t i = 0; i < 128 - 1; i++) { values[i] = values[i + 1]; average += values[i]; } + average /= 128; + m_averageGpuTime = average; + } +} + +void EI_Device::OnEndFrame() +{ + // Transition the color buffer to read before rendering into the swapchain + EI_Barrier barrier = { m_colorBuffer.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }; + m_currentCommandBuffer.SubmitBarrier(1, &barrier); + + EndAndSubmitCommandBuffer(); + + m_swapChain.WaitForSwapChain(); + + m_commandListRing.OnBeginFrame(); + + BeginNewCommandBuffer(); + // Start by resolving render to swap chain + BeginBackbufferRenderPass(); + + // Tonemapping + { + m_currentCommandBuffer.commandBuffer->OMSetRenderTargets(1, m_swapChain.GetCurrentBackBufferRTV(), true, NULL); + + float exposure = 1.0f; + int toneMapper = 0; + m_toneMapping.Draw(m_currentCommandBuffer.commandBuffer.Get(), m_colorBuffer.get()->SRView, exposure, toneMapper); + GetTimeStamp("Tone mapping"); + } + + // Do UI render over top + RenderUI(); + + // Wrap up + EndRenderPass(); + + // When we are done, transition it back for the next frame + barrier = { m_colorBuffer.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }; + m_currentCommandBuffer.SubmitBarrier(1, &barrier); + + + // Make swap chain buffer presentable again + CD3DX12_RESOURCE_BARRIER presentBarrier = CD3DX12_RESOURCE_BARRIER::Transition(m_swapChain.GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT); + m_currentCommandBuffer.commandBuffer->ResourceBarrier(1, &presentBarrier); + + m_gpuTimer.OnEndFrame(); + // Get the stats from the GPU + m_gpuTimer.CollectTimings(m_currentCommandBuffer.commandBuffer.Get()); + + EndAndSubmitCommandBufferWithFence(); + + m_swapChain.Present(); +} + +void EI_Device::RenderUI() +{ + m_ImGUI.Draw(m_currentCommandBuffer.commandBuffer.Get()); +} + +static EI_Device* g_device = NULL; + +EI_Device* GetDevice() { + if (g_device == NULL) { + g_device = new EI_Device(); + } + return g_device; +} + +void EI_CommandContext::BindSets(EI_PSO* pso, int numBindSets, EI_BindSet** bindSets) +{ + assert(numBindSets < 8); + ID3D12DescriptorHeap* heaps[] = { GetDevice()->GetResourceViewHeaps().GetCBV_SRV_UAVHeap(), GetDevice()->GetResourceViewHeaps().GetSamplerHeap() }; + commandBuffer->SetDescriptorHeaps(2, heaps); + + if (pso->m_bp == EI_BP_GRAPHICS) + { + commandBuffer->SetGraphicsRootSignature(pso->m_pipelineLayout.Get()); + for (int i = 0; i < numBindSets; i++) + commandBuffer->SetGraphicsRootDescriptorTable(i, bindSets[i]->descriptorTable.GetGPU()); + } + else + { + commandBuffer->SetComputeRootSignature(pso->m_pipelineLayout.Get()); + + for (int i = 0; i < numBindSets; i++) + commandBuffer->SetComputeRootDescriptorTable(i, bindSets[i]->descriptorTable.GetGPU()); + } +} + +EI_Resource::EI_Resource() : + m_ResourceType(EI_ResourceType::Undefined), + m_pTexture(nullptr) +{ +} + +EI_Resource::~EI_Resource() +{ + if (m_ResourceType == EI_ResourceType::Buffer && m_pBuffer != nullptr) + { + m_pBuffer->Free(); + delete m_pBuffer; + } + else if (m_ResourceType == EI_ResourceType::Texture) + { + m_pTexture->OnDestroy(); + delete m_pTexture; + } + else if (m_ResourceType == EI_ResourceType::Sampler) + { + delete m_pSampler; + } + else + { + assert(false && "Trying to destroy an undefined resource"); + } +} + +D3D12_RESOURCE_STATES DX12AccessFlags(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_UNDEFINED: + return D3D12_RESOURCE_STATE_COMMON; + case EI_STATE_SRV: + return D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; + case EI_STATE_UAV: + return D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + case EI_STATE_COPY_DEST: + return D3D12_RESOURCE_STATE_COPY_DEST; + case EI_STATE_COPY_SOURCE: + return D3D12_RESOURCE_STATE_COPY_SOURCE; + case EI_STATE_RENDER_TARGET: + return D3D12_RESOURCE_STATE_RENDER_TARGET; + case EI_STATE_DEPTH_STENCIL: + return D3D12_RESOURCE_STATE_DEPTH_WRITE; + case EI_STATE_INDEX_BUFFER: + return D3D12_RESOURCE_STATE_INDEX_BUFFER; + case EI_STATE_CONSTANT_BUFFER: + return D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER; + default: + assert(0); + return D3D12_RESOURCE_STATE_COMMON; + } +} + +void EI_CommandContext::SubmitBarrier(int numBarriers, EI_Barrier* barriers) +{ + assert(numBarriers < 16); + CD3DX12_RESOURCE_BARRIER b[16]; + int actualNumBarriers = 0; + for (int i = 0; i < numBarriers; ++i) + { + ID3D12Resource* pResource = nullptr; + if (barriers[i].pResource->m_ResourceType == EI_ResourceType::Buffer) + pResource = barriers[i].pResource->m_pBuffer->gpuBuffer; + else + pResource = barriers[i].pResource->m_pTexture->GetResource(); + D3D12_RESOURCE_STATES from = DX12AccessFlags(barriers[i].from); + D3D12_RESOURCE_STATES to = DX12AccessFlags(barriers[i].to); + if (from != to) + { + b[actualNumBarriers++] = CD3DX12_RESOURCE_BARRIER::Transition(pResource, from, to); + } + else if (from == D3D12_RESOURCE_STATE_UNORDERED_ACCESS && to == D3D12_RESOURCE_STATE_UNORDERED_ACCESS) + { + b[actualNumBarriers++] = CD3DX12_RESOURCE_BARRIER::UAV(pResource); + } + } + if (actualNumBarriers != 0) + { + commandBuffer->ResourceBarrier(actualNumBarriers, b); + } +} + +void EI_CommandContext::BindPSO(EI_PSO* pso) +{ + commandBuffer->SetPipelineState(pso->m_pipeline.Get()); + if (pso->m_bp == EI_BP_GRAPHICS) + { + commandBuffer->IASetPrimitiveTopology(pso->m_primitiveTopology); + } +} + +void EI_CommandContext::Dispatch(int numGroups) +{ + commandBuffer->Dispatch(numGroups, 1, 1); +} + +void EI_CommandContext::UpdateBuffer(EI_Resource* res, void* data) +{ + D3D12_SUBRESOURCE_DATA subResData = {}; + subResData.pData = data; + subResData.RowPitch = res->m_pBuffer->m_totalMemSize; + subResData.SlicePitch = res->m_pBuffer->m_totalMemSize; + UpdateSubresources<1>(commandBuffer.Get(), res->m_pBuffer->gpuBuffer, res->m_pBuffer->cpuBuffer, 0, 0, 1, &subResData); +} + +void EI_CommandContext::ClearUint32Image(EI_Resource* res, uint32_t value) +{ + assert(res->m_ResourceType == EI_ResourceType::Buffer && "Trying to clear a non-UAV resource"); + + UINT32 values[4] = { value, value, value, value }; + commandBuffer->ClearUnorderedAccessViewUint(res->m_pBuffer->m_pUnorderedAccessView->GetGPU(), res->m_pBuffer->m_pUnorderedAccessView->GetCPU(), res->m_pBuffer->gpuBuffer, values, 0, nullptr); + } diff --git a/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h new file mode 100644 index 0000000000..94b30cd823 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/DX12/DX12EngineInterfaceImpl.h @@ -0,0 +1,338 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#ifndef DX12_ENGINE_INTERFACE_IMPL +#define DX12_ENGINE_INTERFACE_IMPL + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +// C RunTime Header Files +#include +#include +#include +#include +#include +#include + +#include "Base/Device.h" +#include "Base/SwapChain.h" +#include "Base/Texture.h" +#include "Base/StaticBufferPool.h" +#include "Base/DynamicBufferRing.h" +#include "Base/CommandListRing.h" +#include "Base/GPUTimestamps.h" +#include "Base/Imgui.h" +#include "Base/UserMarkers.h" + +#include "PostProc/Tonemapping.h" + +#include "EngineInterface.h" +#include "TressFXCommon.h" + +#include +#include + +// Enable to have access to debug UAV +//#define TRESSFX_DEBUG_UAV 1 +#define USE_VID_MEM true + +typedef DXGI_FORMAT EI_ResourceFormat; + +typedef CAULDRON_DX12::CBV_SRV_UAV EI_UAV; +typedef CAULDRON_DX12::CBV_SRV_UAV EI_SRV; +typedef CAULDRON_DX12::RTV EI_RTV; +typedef CAULDRON_DX12::DSV EI_DSV; +typedef CAULDRON_DX12::RTV EI_RTV; + +struct EI_BindEntry +{ + int Binding = 0; + EI_ResourceTypeEnum ResourceType = EI_ResourceTypeEnum::EI_RESOURCETYPE_UNDEFINED; + EI_Resource* pResource; +}; + +class EI_BindSet +{ +public: + ~EI_BindSet(); + CAULDRON_DX12::ResourceView descriptorTable; +}; + +class EI_CommandContext +{ +public: + void SubmitBarrier(int numBarriers, EI_Barrier* barriers); + void BindPSO(EI_PSO* pso); + void BindSets(EI_PSO* pso, int numBindSets, EI_BindSet** bindSets); + void Dispatch(int numGroups); + void UpdateBuffer(EI_Resource* res, void* data); + void ClearUint32Image(EI_Resource* res, uint32_t value); + void DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams); + void DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams); + void PushConstants(EI_PSO* pso, int size, void* data); + Microsoft::WRL::ComPtr commandBuffer = nullptr; +}; + +namespace CAULDRON_DX12 +{ + class GLTFTexturesAndBuffers; + class GltfPbrPass; + class GltfDepthPass; +} + +typedef CAULDRON_DX12::GLTFTexturesAndBuffers EI_GLTFTexturesAndBuffers; +typedef CAULDRON_DX12::GltfPbrPass EI_GltfPbrPass; +typedef CAULDRON_DX12::GltfDepthPass EI_GltfDepthPass; + +struct EI_RenderTargetSet; +class GLTFCommon; + +class EI_Marker +{ +public: + EI_Marker(EI_CommandContext& ctx, const char * string) : marker(ctx.commandBuffer.Get(), string) {} +private: + CAULDRON_DX12::UserMarker marker; +}; + +class EI_Device +{ +public: + EI_Device(); + ~EI_Device(); + // interface + EI_CommandContext& GetCurrentCommandContext() { return m_currentCommandBuffer; } + std::unique_ptr CreateBufferResource(const int structSize, const int structCount, const unsigned int flags, const char* name); + std::unique_ptr CreateUint32Resource(const int width, const int height, const int arraySize, const char* name, uint32_t ClearValue = 0); +#ifdef TRESSFX_DEBUG_UAV + std::unique_ptr CreateDebugUAVResource(const int width, const int height, const size_t channels, const int arraySize, const char* name, float ClearValue = 0.f); +#endif // TRESSFX_DEBUG_UAV + std::unique_ptr CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues = nullptr); + std::unique_ptr CreateDepthResource(const int width, const int height, const char* name); + std::unique_ptr CreateResourceFromFile(const char* szFilename, bool useSRGB = false); + std::unique_ptr CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode); + + std::unique_ptr CreateLayout(const EI_LayoutDescription& description); + + std::unique_ptr CreateBindSet(EI_BindLayout* layout, EI_BindSetDescription& bindSet); + + std::unique_ptr CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + std::unique_ptr CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + + std::unique_ptr CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon); + std::unique_ptr CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + std::unique_ptr CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + + void BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderPassSet, const wchar_t* pPassName, uint32_t width = 0, uint32_t height = 0); + void EndRenderPass(EI_CommandContext& commandContext); + void SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height); + + std::unique_ptr CreateComputeShaderPSO(const char* shaderName, const char* entryPoint, EI_BindLayout** layouts, int numLayouts); + std::unique_ptr CreateGraphicsPSO(const char* vertexShaderName, const char* vertexEntryPoint, const char* fragmentShaderName, const char* fragmentEntryPoint, EI_PSOParams& psoParams); + + /* async compute */ + EI_CommandContext& GetComputeCommandContext() { return m_currentComputeCommandBuffer; } + void WaitForCompute(); + void SignalComputeStart(); + void WaitForLastFrameGraphics(); + void SubmitComputeCommandList(); + /* /async compute */ + + // internals + void OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName); + void OnResize(uint32_t width, uint32_t height); + void FlushGPU() { m_device.GPUFlush(); } + void OnDestroy(); + void OnBeginFrame(bool bDoAsync); + void OnEndFrame(); + void BeginNewCommandBuffer(); + void BeginNewComputeCommandBuffer(); + void EndAndSubmitCommandBuffer(); + void BeginBackbufferRenderPass(); + void EndRenderPass(); + void RenderUI(); + + void SetVSync(bool vSync) { m_vSync = vSync; } + + CAULDRON_DX12::Device* GetCauldronDevice() { return &m_device; } + + CAULDRON_DX12::UploadHeap* GetUploadHeap() { return &m_uploadHeap; } + CAULDRON_DX12::StaticBufferPool* GetVidMemBufferPool() { return &m_vidMemBufferPool; } + CAULDRON_DX12::DynamicBufferRing* GetConstantBufferRing() { return &m_constantBufferRing; } + + // Find a better place to put this ... + EI_Resource* GetDepthBufferResource() { return m_depthBuffer.get(); } + EI_ResourceFormat GetDepthBufferFormat() { return DXGI_FORMAT_D32_FLOAT; } + EI_Resource* GetColorBufferResource() { return m_colorBuffer.get(); } + EI_ResourceFormat GetColorBufferFormat() { return DXGI_FORMAT_R8G8B8A8_UNORM; } + EI_Resource* GetShadowBufferResource() { return m_shadowBuffer.get(); } + EI_ResourceFormat GetShadowBufferFormat() { return GetDepthBufferFormat(); } + EI_Resource* GetDefaultWhiteTexture() { return m_DefaultWhiteTexture.get(); } + EI_BindSet* GetSamplerBindSet() { return m_pSamplerBindSet.get(); } + +#ifdef TRESSFX_DEBUG_UAV + EI_Resource* GetDebugUAVResource() { return m_pDebugUAV.get(); } +#endif // TRESSFX_DEBUG_UAV + + // for the client code to set timestamps + void GetTimeStamp(char* name); + int GetNumTimeStamps() { return (int)m_sortedTimeStamps.size(); } + const char* GetTimeStampName(const int i) { return m_sortedTimeStamps[i].m_label.c_str(); } + int GetTimeStampValue(const int i) { return (int)m_sortedTimeStamps[i].m_microseconds; } + void DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets); + float GetAverageGpuTime() const { return m_averageGpuTime; } + + // only to call by implementation internals + ID3D12Device* GetDX12Device() { return m_device.GetDevice(); } + CAULDRON_DX12::ResourceViewHeaps& GetResourceViewHeaps() { return m_resourceViewHeaps; } + + void AllocateCPUVisibleView(CAULDRON_DX12::ResourceView* pResourceView); +private: + void EndAndSubmitCommandBufferWithFence(); + CAULDRON_DX12::Device m_device; + CAULDRON_DX12::SwapChain m_swapChain; + int m_currentImageIndex; + + // We need to be able to get access to the depth buffer from within the demo + // so store as an agnostic resource. We will also store a color target for all our sample's works + std::unique_ptr m_depthBuffer; + std::unique_ptr m_colorBuffer; + std::unique_ptr m_shadowBuffer; + +#ifdef TRESSFX_DEBUG_UAV + std::unique_ptr m_pDebugUAV; // Debug UAV +#endif // TRESSFX_DEBUG_UAV + + // Default resource to use when a resource is missing + std::unique_ptr m_DefaultWhiteTexture; + + std::unique_ptr m_pEndFrameResolveBindLayout = nullptr; + std::unique_ptr m_pEndFrameResolveBindSet = nullptr; + std::unique_ptr m_pSamplerBindSet = nullptr; + std::unique_ptr m_pEndFrameResolvePSO = nullptr; + std::unique_ptr m_pFullscreenIndexBuffer; + + int m_width; + int m_height; + bool m_vSync = false; + + bool m_recording = false; + + CAULDRON_DX12::ToneMapping m_toneMapping; + + // vulkan specific imgui stuff + CAULDRON_DX12::ImGUI m_ImGUI; + + // resource allocators + CAULDRON_DX12::ResourceViewHeaps m_resourceViewHeaps; + CAULDRON_DX12::UploadHeap m_uploadHeap; + CAULDRON_DX12::StaticBufferPool m_vidMemBufferPool; + CAULDRON_DX12::StaticBufferPool m_sysMemBufferPool; + CAULDRON_DX12::DynamicBufferRing m_constantBufferRing; // "dynamic" uniform buffers + CAULDRON_DX12::CommandListRing m_commandListRing; + + CAULDRON_DX12::GPUTimestamps m_gpuTimer; + std::vector m_timeStamps; + std::vector m_sortedTimeStamps; + float m_averageGpuTime; + + EI_CommandContext m_currentCommandBuffer; + + // async compute + CAULDRON_DX12::CommandListRing m_computeCommandListRing; + EI_CommandContext m_currentComputeCommandBuffer; + + CAULDRON_DX12::Fence m_computeDoneFence; + CAULDRON_DX12::Fence m_lastFrameGraphicsCommandBufferFence; + std::unique_ptr m_LinearWrapSampler; + + // Need to manage discreet heaps ourselves + uint32_t m_DescriptorSize = 0; + Microsoft::WRL::ComPtr< ID3D12DescriptorHeap> m_CPUDescriptorHeap = nullptr; + uint32_t m_CPUDescriptorIndex = 0; +}; + +struct DX12Resource; + +class EI_Resource +{ +public: + // need this for automatic destruction + EI_Resource(); + ~EI_Resource(); + + int GetHeight() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetHeight() : 0; } + int GetWidth() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetWidth() : 0; } + + EI_ResourceType m_ResourceType = EI_ResourceType::Undefined; + + union + { + DX12Resource* m_pBuffer; + CAULDRON_DX12::Texture* m_pTexture; + CAULDRON_DX12::SAMPLER* m_pSampler; + }; + + // Needed since we will allocate samplers directly in the table range + D3D12_SAMPLER_DESC samplerDesc = {}; + + EI_RTV* RTView = nullptr; + EI_DSV* DSView = nullptr; + EI_SRV* SRView = nullptr; +private: +}; + +struct EI_BindLayout +{ + ~EI_BindLayout(); + + EI_LayoutDescription description; + std::vector layoutBindings; +}; + +const static int MaxRenderAttachments = 5; +struct EI_RenderTargetSet +{ + ~EI_RenderTargetSet(); + void SetResources(const EI_Resource** pResourcesArray); + + const EI_Resource* m_RenderResources[MaxRenderAttachments] = { nullptr }; + EI_ResourceFormat m_RenderResourceFormats[MaxRenderAttachments]; // Needed for PS0 creation when we don't have resources yet (i.e gltf) + D3D12_CLEAR_VALUE m_ClearValues[MaxRenderAttachments]; + bool m_ClearColor[MaxRenderAttachments] = { false }; + uint32_t m_NumResources = 0; + bool m_HasDepth = false; + bool m_ClearDepth = false; +}; + +class EI_PSO +{ +public: + ~EI_PSO(); + + Microsoft::WRL::ComPtr m_pipeline; + Microsoft::WRL::ComPtr m_pipelineLayout; + D3D12_PRIMITIVE_TOPOLOGY m_primitiveTopology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + EI_BindPoint m_bp; +}; + +EI_Device* GetDevice(); + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/EngineInterface.h b/Gems/AtomTressFX/External/Code/src/EngineInterface.h new file mode 100644 index 0000000000..e35b0a4d09 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/EngineInterface.h @@ -0,0 +1,286 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#pragma once + +#include "AMD_Types.h" +#include + +// tressfx gpu interface implementation +class EI_Device; // ID3D11Device +class EI_CommandContext; // ID3D11DeviceContext +class EI_Resource; // ID3D11Texture2D + UAV + SRV + RTV or ID3D11Buffer + UAV + SRV (see details below) +class EI_LayoutManager; // Anything you might use to assign shader slots. +struct EI_BindLayout; // Array of resources to bind. +class EI_PSO; // Pipeline state (raster state, etc) +struct EI_RenderTargetSet; // Render set + +enum EI_ShaderStage +{ + EI_UNINITIALIZED = 0, // we will always specify shader stage. "all" is never used. + EI_VS, + EI_PS, + EI_CS, + EI_ALL + }; + +enum EI_ResourceState +{ + EI_STATE_UNDEFINED, + EI_STATE_SRV, + EI_STATE_UAV, + EI_STATE_COPY_DEST, + EI_STATE_COPY_SOURCE, + EI_STATE_RENDER_TARGET, + EI_STATE_DEPTH_STENCIL, + EI_STATE_INDEX_BUFFER, + EI_STATE_CONSTANT_BUFFER, +}; + +enum EI_ResourceTypeEnum +{ + EI_RESOURCETYPE_UNDEFINED = 0, + EI_RESOURCETYPE_BUFFER_RW = 0x01, + EI_RESOURCETYPE_BUFFER_RO = 0x02, + EI_RESOURCETYPE_IMAGE_RW = 0x03, + EI_RESOURCETYPE_IMAGE_RO = 0x04, + EI_RESOURCETYPE_UNIFORM = 0x05, + EI_RESOURCETYPE_SAMPLER = 0x06, +}; + +struct EI_ResourceDescription { + const char * name; + int binding; + EI_ResourceTypeEnum type; +}; + +struct EI_LayoutDescription +{ + std::vector resources; + EI_ShaderStage stage; +}; + +struct EI_IndexedDrawParams +{ + EI_Resource* pIndexBuffer; + int numIndices; + int numInstances; +}; + +struct EI_DrawParams +{ + int numVertices; + int numInstances; +}; + +struct EI_Barrier +{ + EI_Resource* pResource; + EI_ResourceState from; + EI_ResourceState to; +}; + +struct EI_BindSetDescription +{ + std::vector resources; +}; + +// Add more pso control enums as necessary +enum class EI_CompareFunc +{ + Never = 0, + Less, + Equal, + LessEqual, + Greater, + NotEqual, + GreaterEqual, + Always, +}; + +enum class EI_BlendOp +{ + Add = 0, + Subtract, + ReverseSubtract, + Min, + Max +}; + +enum class EI_StencilOp +{ + Keep = 0, + Zero, + Replace, + IncrementClamp, + DecrementClamp, + Invert, + IncrementWrap, + DecrementWrap, +}; + +enum class EI_BlendFactor +{ + Zero = 0, + One, + SrcColor, + InvSrcColor, // 1 - SrcColor + DstColor, + InvDstColor, // 1 - DstColor + SrcAlpha, + InvSrcAlpha, // 1 - SrcAlpha + DstAlpha, + InvDstAlpha, // 1 - DstAlpha +}; + +enum class EI_Topology +{ + TriangleList = 0, + TriangleStrip, +}; + +struct EI_ColorBlendParams +{ + bool colorBlendEnabled = false; + EI_BlendOp colorBlendOp = EI_BlendOp::Add; + EI_BlendFactor colorSrcBlend = EI_BlendFactor::One; + EI_BlendFactor colorDstBlend = EI_BlendFactor::Zero; + EI_BlendOp alphaBlendOp = EI_BlendOp::Add; + EI_BlendFactor alphaSrcBlend = EI_BlendFactor::Zero; + EI_BlendFactor alphaDstBlend = EI_BlendFactor::One; +}; + +// Add as needed +enum EI_LayoutState { + Undefined = 0, + RenderColor, + RenderDepth, + ReadOnly, + Present, +}; + +enum EI_RenderPassFlags +{ + None = 0, + Load = 0x01, + Clear = 0x02, + Store = 0x04, + Depth = 0x08, +}; + +inline EI_RenderPassFlags operator| (EI_RenderPassFlags a, EI_RenderPassFlags b) +{ + return static_cast(static_cast(a) | static_cast(b)); +} + +struct EI_AttachmentParams +{ + EI_RenderPassFlags Flags = EI_RenderPassFlags::None; +}; + +enum class EI_ResourceType +{ + Undefined = 0, + Buffer, + Texture, + Sampler, +}; + +enum class EI_Filter +{ + Point = 0, + Linear, + // Add more as needed +}; + +enum class EI_AddressMode +{ + Wrap = 0, + ClampEdge, + // Add more as needed +}; + +struct EI_PSOParams +{ + EI_Topology primitiveTopology = EI_Topology::TriangleList; + bool colorWriteEnable = true; + bool depthTestEnable = false; + bool depthWriteEnable = false; + EI_CompareFunc depthCompareOp = EI_CompareFunc::Always; + + EI_ColorBlendParams colorBlendParams; + + bool stencilTestEnable = false; + EI_StencilOp backFailOp = EI_StencilOp::Keep; + EI_StencilOp backPassOp = EI_StencilOp::Keep; + EI_StencilOp backDepthFailOp = EI_StencilOp::Keep; + EI_CompareFunc backCompareOp = EI_CompareFunc::Always; + + EI_StencilOp frontFailOp = EI_StencilOp::Keep; + EI_StencilOp frontPassOp = EI_StencilOp::Keep; + EI_StencilOp frontDepthFailOp = EI_StencilOp::Keep; + EI_CompareFunc frontCompareOp = EI_CompareFunc::Always; + + uint32_t stencilReadMask = 0x00; + uint32_t stencilWriteMask = 0x00; + uint32_t stencilReference = 0x00; + + EI_BindLayout** layouts = nullptr; + int numLayouts = 0; + + EI_RenderTargetSet* renderTargetSet = nullptr; +}; + +enum EI_BindPoint { + EI_BP_COMPUTE, + EI_BP_GRAPHICS +}; + +enum EI_BufferFlags { + EI_BF_NEEDSUAV = 1u << 0, + EI_BF_NEEDSCPUMEMORY = 1u << 1, + EI_BF_UNIFORMBUFFER = 1u << 2, + EI_BF_VERTEXBUFFER = 1u << 3, + EI_BF_INDEXBUFFER = 1u << 4 +}; + +/////////////////////////////////////////////////////////////// +// We use 4 kinds of resources. +// 2D RW buffer +// Structured buffers. +// Index buffer. +// Constant buffers +// + +#ifndef TRESSFX_ASSERT +#include +#define TRESSFX_ASSERT assert +#endif + +#include + +#define EI_Read(ptr, size, pFile) fread(ptr, size, 1, pFile) +#define EI_Seek(pFile, offset) fseek(pFile, offset, SEEK_SET) +#define EI_LogWarning(msg) printf("%s", msg) + +#ifdef TRESSFX_VK + #include "VK/VKEngineInterfaceImpl.h" +#else + #include "DX12/DX12EngineInterfaceImpl.h" +#endif + +#include "SceneGLTFImpl.h" \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/HairStrands.cpp b/Gems/AtomTressFX/External/Code/src/HairStrands.cpp new file mode 100644 index 0000000000..8c7b9e2d02 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/HairStrands.cpp @@ -0,0 +1,103 @@ +//--------------------------------------------------------------------------------------- +// Example code that encapsulates three related objects. +// 1. The TressFXHairObject +// 2. An interface to get the current set of bones in world space that drive the hair object. +// 3. An interface to set up for drawing the strands, such as setting lighting parmeters, etc. +// +// Normally, you'd probably contain the TressFXObject in the engine wrapper, but we've arranged it this +// way to focus on the important aspects of integration. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "HairStrands.h" +#include "TressFXSimulation.h" +#include "TressFXHairObject.h" +#include "TressFXAsset.h" +#include "EngineInterface.h" +#include +using namespace DirectX; + +void HairStrands::TransitionSimToRendering(EI_CommandContext& context) +{ + m_pStrands->GetDynamicState().TransitionSimToRendering(context); +} + +void HairStrands::TransitionRenderingToSim(EI_CommandContext& context) +{ + m_pStrands->GetDynamicState().TransitionRenderingToSim(context); +} + +void HairStrands::UpdateBones(EI_CommandContext& context) +{ + std::vector boneMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + const AMD::float4x4* pBoneMatricesInWS = (const AMD::float4x4*)&boneMatrices[0]; + + // update bone matrices for bone skinning of first two vertices of hair strands + m_pStrands->UpdateBoneMatrices(pBoneMatricesInWS, (int)boneMatrices.size()); +} + +HairStrands::HairStrands( + EI_Scene * scene, + const char * tfxFilePath, + const char * tfxboneFilePath, + const char * hairObjectName, + int numFollowHairsPerGuideHair, + float tipSeparationFactor, + int skinNumber, + int renderIndex +) +{ + EI_Device* pDevice = GetDevice(); + EI_CommandContext& uploadCommandContext = pDevice->GetCurrentCommandContext(); + + TressFXAsset* asset = new TressFXAsset(); + size_t memOffset = 0; + + // Load *.tfx + FILE * fp = fopen(tfxFilePath, "rb"); + asset->LoadHairData(fp); + fclose(fp); + + asset->GenerateFollowHairs(numFollowHairsPerGuideHair, tipSeparationFactor, 0.012f); + asset->ProcessAsset(); + + // Load *.tfxbone + fp = fopen(tfxboneFilePath, "rb"); + asset->LoadBoneData(fp, skinNumber, scene); + fclose(fp); + + TressFXHairObject* hairObject = new TressFXHairObject(asset, pDevice, uploadCommandContext, hairObjectName, renderIndex); + + m_pStrands.reset(hairObject); + m_pScene = scene; + m_skinNumber = skinNumber; + + delete asset; +} + + + + + + + diff --git a/Gems/AtomTressFX/External/Code/src/HairStrands.h b/Gems/AtomTressFX/External/Code/src/HairStrands.h new file mode 100644 index 0000000000..f8753230b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/HairStrands.h @@ -0,0 +1,69 @@ + + +//--------------------------------------------------------------------------------------- +// Example code that encapsulates three related objects. +// 1. The TressFXHairObject +// 2. An interface to get the current set of bones in world space that drive the hair object. +// 3. An interface to set up for drawing the strands, such as setting lighting parmeters, etc. +// Normally, you'd probably contain the TressFXObject in the engine wrapper, but we've arranged it this +// way to focus on the important aspects of integration. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include "AMD_TressFX.h" + +#include + +class EngineTressFXObject; +class TressFXSimulation; +class EI_Scene; +class EI_Resource; +class EI_CommandContext; +class TressFXHairObject; + +class HairStrands +{ +public: + HairStrands( + EI_Scene * scene, + const char * tfxFilePath, + const char * tfxboneFilePath, + const char * hairObjectName, + int numFollowHairsPerGuideHair, + float tipSeparationFactor, + int skinNumber, + int renderIndex); + + TressFXHairObject* GetTressFXHandle() { return m_pStrands.get(); } + void TransitionSimToRendering(EI_CommandContext& context); + void TransitionRenderingToSim(EI_CommandContext& context); + void UpdateBones(EI_CommandContext& context); +private: + std::unique_ptr m_pStrands; + EI_Scene * m_pScene = nullptr; + int m_skinNumber; +}; + + diff --git a/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h b/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h new file mode 100644 index 0000000000..2712eabb5e --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/MarchingCubesTables.h @@ -0,0 +1,235 @@ +//--------------------------------------------------------------------------------------- +// MARCHING_CUBES_EDGE_TABLE[] and MARCHING_CUBES_TRIANGLE_TABLE[] from: +// http://paulbourke.net/geometry/polygonise/ +// http://paulbourke.net/geometry/polygonise/marchingsource.cpp (public domain) +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef MARCHING_CUBES_TABLES_H +#define MARCHING_CUBES_TABLES_H + +// Contains 12-bit numbers, with one bit for each edge of a cube +// For each bit: +// 0 == do not generate a vertex at that edge +// 1 == generate a vertex at that edge +static const int MARCHING_CUBES_EDGE_TABLE[256] = { + 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, + 0xd03, 0xe09, 0xf00, 0x190, 0x099, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, + 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x033, 0x13a, 0x636, 0x73f, 0x435, + 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0x0aa, + 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, + 0x569, 0x663, 0x76a, 0x066, 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, + 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0x0ff, 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, + 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x055, 0x15c, + 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, + 0x2cf, 0x1c5, 0x0cc, 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, + 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0x0cc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, + 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x055, 0x35f, 0x256, + 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, + 0x3f5, 0x0ff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, + 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x066, 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, + 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0x0aa, 0x1a3, 0x2a9, 0x3a0, + 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, + 0x033, 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, + 0x49f, 0x596, 0x29a, 0x393, 0x099, 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, + 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 +}; + +// Contains triangle indicies for the (at most 12) vertices generated from EDGE_TABLE +// each line is 16 elements, and contains up to 15 indicies, or 5 triangles +// -1 == invalid index +static const int MARCHING_CUBES_TRIANGLE_TABLE[256 * 16] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 3, 2, 10, 8, 10, 9, + 8, -1, -1, -1, -1, -1, -1, -1, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, + 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 10, 1, 0, 8, 10, 8, 11, + 10, -1, -1, -1, -1, -1, -1, -1, 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, + 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 7, 8, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 1, 9, 4, 7, 1, 7, 3, + 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 9, 0, 2, 8, 4, + 7, -1, -1, -1, -1, -1, -1, -1, 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, + 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 4, 7, 11, 2, 4, 2, 0, + 4, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, + 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, 3, 10, 1, 3, 11, 10, 7, 8, + 4, -1, -1, -1, -1, -1, -1, -1, 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, + 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, 4, 7, 11, 4, 11, 9, 9, 11, + 10, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 1, 5, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, + 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 10, 4, 9, + 5, -1, -1, -1, -1, -1, -1, -1, 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, + 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, 9, 5, 4, 2, 3, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, + 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 2, 1, 5, 2, 5, 8, 2, 8, + 11, 4, 8, 5, -1, -1, -1, -1, 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, + 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, 5, 4, 0, 5, 0, 11, 5, 11, + 10, 11, 0, 3, -1, -1, -1, -1, 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, + 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 3, 0, 9, 5, 3, 5, 7, + 3, -1, -1, -1, -1, -1, -1, -1, 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, + 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 9, 5, 7, 10, 1, + 2, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, + 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, 2, 10, 5, 2, 5, 3, 3, 5, + 7, -1, -1, -1, -1, -1, -1, -1, 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, 2, 3, 11, 0, 1, 8, 1, 7, + 8, 1, 5, 7, -1, -1, -1, -1, 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, + 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, 5, 7, 0, 5, 0, 9, 7, 11, + 0, 1, 0, 10, 11, 10, 0, -1, 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, + 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 1, 9, 8, 5, 10, + 6, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, 9, 6, 5, 9, 0, 6, 0, 2, + 6, -1, -1, -1, -1, -1, -1, -1, 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, + 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 0, 8, 11, 2, 0, 10, 6, + 5, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, + 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, 6, 3, 11, 6, 5, 3, 5, 1, + 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, + 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, 6, 5, 9, 6, 9, 11, 11, 9, + 8, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 5, 10, 6, 8, 4, + 7, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, + 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, 1, 2, 5, 5, 2, 6, 3, 0, + 4, 3, 4, 7, -1, -1, -1, -1, 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, + 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, 3, 11, 2, 7, 8, 4, 10, 6, + 5, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, + 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, 9, 2, 1, 9, 11, 2, 9, 4, + 11, 7, 11, 4, 5, 10, 6, -1, 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, + 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, 0, 5, 9, 0, 6, 5, 0, 3, + 6, 11, 6, 3, 8, 4, 7, -1, 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, + 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 10, 6, 4, 9, 10, 0, 8, + 3, -1, -1, -1, -1, -1, -1, -1, 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, + 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, 1, 4, 9, 1, 2, 4, 2, 6, + 4, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, + 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 3, 2, 8, 2, 4, 4, 2, + 6, -1, -1, -1, -1, -1, -1, -1, 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, + 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, 3, 11, 2, 0, 1, 6, 0, 6, + 4, 6, 1, 10, -1, -1, -1, -1, 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, + 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, 8, 11, 1, 8, 1, 0, 11, 6, + 1, 9, 1, 4, 6, 4, 1, -1, 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, + 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 10, 6, 7, 8, 10, 8, 9, + 10, -1, -1, -1, -1, -1, -1, -1, 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, + 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, 10, 6, 7, 10, 7, 1, 1, 7, + 3, -1, -1, -1, -1, -1, -1, -1, 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, + 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, 7, 8, 0, 7, 0, 6, 6, 0, + 2, -1, -1, -1, -1, -1, -1, -1, 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 0, 7, 2, 7, 11, 0, 9, + 7, 6, 7, 10, 9, 10, 7, -1, 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, + 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, 8, 9, 6, 8, 6, 7, 9, 1, + 6, 11, 6, 3, 1, 3, 6, -1, 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, 7, 11, 6, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 11, 7, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, + 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 8, 6, 11, + 7, -1, -1, -1, -1, -1, -1, -1, 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, + 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, 7, 2, 3, 6, 2, 7, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, + 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, 1, 6, 2, 1, 8, 6, 1, 9, + 8, 8, 7, 6, -1, -1, -1, -1, 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, + 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, 0, 3, 7, 0, 7, 10, 0, 10, + 9, 6, 10, 7, -1, -1, -1, -1, 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, + 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 3, 0, 6, 0, 4, + 6, -1, -1, -1, -1, -1, -1, -1, 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, + 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, 6, 8, 4, 6, 11, 8, 2, 10, + 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, + 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, 10, 9, 3, 10, 3, 2, 9, 4, + 3, 11, 3, 6, 4, 6, 3, -1, 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, + 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 4, 2, 4, + 6, 4, 3, 8, -1, -1, -1, -1, 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, + 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, 10, 1, 0, 10, 0, 6, 6, 0, + 4, -1, -1, -1, -1, -1, -1, -1, 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, + 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 7, 6, 11, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, + 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 11, 7, 6, 8, 3, 4, 3, 5, + 4, 3, 1, 5, -1, -1, -1, -1, 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, + 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, 7, 6, 11, 5, 4, 10, 4, 2, + 10, 4, 0, 2, -1, -1, -1, -1, 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, + 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 6, 0, 6, + 2, 6, 8, 7, -1, -1, -1, -1, 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, + 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, 9, 5, 4, 10, 1, 6, 1, 7, + 6, 1, 3, 7, -1, -1, -1, -1, 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, + 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, 7, 6, 10, 7, 10, 8, 5, 4, + 10, 4, 8, 10, -1, -1, -1, -1, 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, + 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, 0, 11, 8, 0, 5, 11, 0, 1, + 5, 5, 6, 11, -1, -1, -1, -1, 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, + 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, 0, 11, 3, 0, 6, 11, 0, 9, + 6, 5, 6, 9, 1, 2, 10, -1, 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, + 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, 5, 8, 9, 5, 2, 8, 5, 6, + 2, 3, 8, 2, -1, -1, -1, -1, 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, + 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, 1, 5, 6, 2, 1, 6, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, + 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, 0, 3, 8, 5, 6, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 11, 7, 5, 8, 3, + 0, -1, -1, -1, -1, -1, -1, -1, 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, + 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, 11, 1, 2, 11, 7, 1, 7, 5, + 1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, + 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, 7, 5, 2, 7, 2, 11, 5, 9, + 2, 3, 2, 8, 9, 8, 2, -1, 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, + 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, 9, 0, 1, 5, 10, 3, 5, 3, + 7, 3, 10, 2, -1, -1, -1, -1, 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, + 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 7, 0, 7, 1, 1, 7, + 5, -1, -1, -1, -1, -1, -1, -1, 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, + 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 8, 4, 5, 10, 8, 10, 11, + 8, -1, -1, -1, -1, -1, -1, -1, 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, + 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, 10, 11, 4, 10, 4, 5, 11, 3, + 4, 9, 4, 1, 3, 1, 4, -1, 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, + 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, 0, 2, 5, 0, 5, 9, 2, 11, + 5, 4, 5, 8, 11, 8, 5, -1, 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, 5, 10, 2, 5, 2, 4, 4, 2, + 0, -1, -1, -1, -1, -1, -1, -1, 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, + 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 3, 5, + 1, -1, -1, -1, -1, -1, -1, -1, 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, 9, 4, 5, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, + 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, 1, 10, 11, 1, 11, 4, 1, 4, + 0, 7, 4, 11, -1, -1, -1, -1, 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, + 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, 9, 7, 4, 9, 11, 7, 9, 1, + 11, 2, 11, 1, 0, 8, 3, -1, 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, + 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, 2, 9, 10, 2, 7, 9, 2, 3, + 7, 7, 4, 9, -1, -1, -1, -1, 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, + 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, 1, 10, 2, 8, 7, 4, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, 4, 0, 3, 7, 4, 3, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 11, 9, + 10, -1, -1, -1, -1, -1, -1, -1, 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, + 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 11, 1, 11, 9, 9, 11, + 8, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, + 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 11, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, + 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 0, 1, + 8, 1, 10, 8, -1, -1, -1, -1, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 9, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +#endif diff --git a/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt new file mode 100644 index 0000000000..54de3e9847 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/CMakeLists.txt @@ -0,0 +1,14 @@ +project (TressFX_${GFX_API}) + +set(math_sources + Math/Color.h + Math/Matrix33.h + Math/Matrix33.cpp + Math/Matrix44.h + Math/Matrix44.cpp + Math/Quaternion.h + Math/Quaternion.cpp + Math/Transform.h + Math/Transform.cpp + Math/Vector3D.h + Math/Vector3D.cpp PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/Math/Color.h b/Gems/AtomTressFX/External/Code/src/Math/Color.h new file mode 100644 index 0000000000..854621a69d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Color.h @@ -0,0 +1,70 @@ +//-------------------------------------------------------------------------------------- +// File: Color.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + + +#include + +class Color +{ +public: + union + { + struct + { + float m[4]; + }; // r, g, b, a + struct + { + float r, g, b, a; + }; + }; + + Color() : + r(0), g(0), b(0), a(1) + {} + + Color(float r, float g, float b, float a = 1.f) : + m{ r, g, b, a } + {} + + Color(const Color& other) : + m{ other.r, other.g, other.b, other.a } + {} + + ~Color(){} + + const float& operator[](unsigned int i) const { return m[i]; } + float& operator[](unsigned int i) { return m[i]; } + + Color& operator=(const Color& other) + { + r = other.r; g = other.g; + b = other.b; a = other.a; + return *this; + } +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp new file mode 100644 index 0000000000..ffbcc85dfa --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.cpp @@ -0,0 +1,378 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix33.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#include + +#include +#include + +namespace AMD +{ + const Matrix3 Matrix3::IDENTITY = + Matrix3(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); + const Matrix3 Matrix3::ZERO = + Matrix3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); + + Matrix3::Matrix3(void) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = 0; + } + + Matrix3::Matrix3(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = other.m[i][j]; + } + + Matrix3::Matrix3(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22) + { + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + } + + Matrix3::~Matrix3(void) {} + + void Matrix3::SetIdentity() + { + m[0][0] = 1.0; + m[0][1] = 0.0; + m[0][2] = 0.0; + + m[1][0] = 0.0; + m[1][1] = 1.0; + m[1][2] = 0.0; + + m[2][0] = 0.0; + m[2][1] = 0.0; + m[2][2] = 1.0; + } + + float Matrix3::GetElement(int i, int j) const + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + void Matrix3::SetElement(int i, int j, float val) + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + m[i][j] = val; + } + + void Matrix3::Set(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22) + { + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + } + + void Matrix3::SetRotation(const Vector3& axis, float ang) + { +#define vsin(x) ((1.0f) - cos(x)) + + float nx = axis.x; + float ny = axis.y; + float nz = axis.z; + + m[0][0] = nx * nx * vsin(ang) + cos(ang); + m[0][1] = nx * ny * vsin(ang) - nz * sin(ang); + m[0][2] = nx * nz * vsin(ang) + ny * sin(ang); + + m[1][0] = nx * ny * vsin(ang) + nz * sin(ang); + m[1][1] = ny * ny * vsin(ang) + cos(ang); + m[1][2] = ny * nz * vsin(ang) - nx * sin(ang); + + m[2][0] = nx * nz * vsin(ang) - ny * sin(ang); + m[2][1] = ny * nz * vsin(ang) + nx * sin(ang); + m[2][2] = nz * nz * vsin(ang) + cos(ang); + +#undef vsin + } + + void Matrix3::Inverse() + { + float det = m[0][0] * (m[2][2] * m[1][1] - m[2][1] * m[1][2]) - + m[1][0] * (m[2][2] * m[0][1] - m[2][1] * m[0][2]) + + m[2][0] * (m[1][2] * m[0][1] - m[1][1] * m[0][2]); + + m[0][0] = m[2][2] * m[1][1] - m[2][1] * m[1][2]; + m[0][1] = -m[2][2] * m[0][1] - m[2][1] * m[0][2]; + m[0][2] = m[1][2] * m[0][1] - m[1][1] * m[0][2]; + + m[1][0] = -m[2][2] * m[1][0] - m[2][0] * m[1][2]; + m[1][1] = m[2][2] * m[0][0] - m[2][0] * m[0][2]; + m[1][2] = -m[1][2] * m[0][0] - m[1][0] * m[0][2]; + + m[2][0] = m[2][1] * m[1][0] - m[2][0] * m[1][1]; + m[2][1] = -m[2][1] * m[0][0] - m[2][0] * m[0][1]; + m[2][2] = m[1][1] * m[0][0] - m[1][0] * m[0][1]; + + (*this) *= 1 / det; + } + + Matrix3 Matrix3::InverseOther() const + { + Matrix3 other(*this); + other.Inverse(); + return other; + } + + void Matrix3::Transpose() { *this = TransposeOther(); } + + Matrix3 Matrix3::TransposeOther() const + { + Matrix3 other; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + other.m[i][j] = m[j][i]; + + return other; + } + + Vector3 Matrix3::operator*(const Vector3& vec) const + { + Vector3 ret; + + ret.x = m[0][0] * vec.x + m[0][1] * vec.y + m[0][2] * vec.z; + ret.y = m[1][0] * vec.x + m[1][1] * vec.y + m[1][2] * vec.z; + ret.z = m[2][0] * vec.x + m[2][1] * vec.y + m[2][2] * vec.z; + + return ret; + } + + Matrix3 Matrix3::operator*(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = + m[i][0] * other.m[0][j] + m[i][1] * other.m[1][j] + m[i][2] * other.m[2][j]; + + return ret; + } + + Matrix3 Matrix3::operator+(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] + other.m[i][j]; + + return ret; + } + + Matrix3 Matrix3::operator-(const Matrix3& other) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] - other.m[i][j]; + + return ret; + } + + Matrix3 Matrix3::operator*(float val) const + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] * val; + + return ret; + } + + Matrix3 Matrix3::operator/(float val) const + { + Matrix3 ret; + + // assert(val != 0); + + float eps = 1e-10f; + + if (0 <= val && val <= eps) + val += eps; + else if (-eps <= val && val <= 0) + val -= eps; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = m[i][j] / val; + + return ret; + } + + Matrix3& Matrix3::operator*=(float val) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = val * m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator-=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = m[i][j] - other.m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator+=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = m[i][j] + other.m[i][j]; + + return (*this); + } + + Matrix3& Matrix3::operator=(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = other.m[i][j]; + + return (*this); + } + + // Matrix3& Matrix3::operator=(float a) + //{ + // for ( int i = 0; i < 3; i++ ) + // for ( int j = 0; j < 3; j++ ) + // m[i][j] = a; + // + // return (*this); + //} + + bool Matrix3::operator==(const Matrix3& other) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + { + if (m[i][j] != other.m[i][j]) + return false; + } + + return true; + } + + bool Matrix3::operator!=(const Matrix3& other) + { + return !(*this).operator==(other); + } + + bool Matrix3::operator==(float a) + { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + { + if (m[i][j] != a) + return false; + } + + return true; + } + + bool Matrix3::operator!=(float a) { return !(*this).operator==(a); } + + float& Matrix3::operator()(int i, int j) + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + const float& Matrix3::operator()(int i, int j) const + { + assert(0 <= i && i < 3); + assert(0 <= i && j < 3); + + return m[i][j]; + } + + Matrix3 operator*(float val, const Matrix3& other) { return other * val; } + + Matrix3 operator-(const Matrix3& other) + { + Matrix3 ret; + + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + ret.m[i][j] = -other.m[i][j]; + + return ret; + } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h new file mode 100644 index 0000000000..75d262ba65 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix33.h @@ -0,0 +1,103 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix33.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +namespace AMD +{ + class Vector3; + + class Matrix3 + { + friend class Vector3; + friend class Quaternion; + + public: + Matrix3(void); + Matrix3(const Matrix3& other); + Matrix3(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22); + ~Matrix3(void); + + private: + float m[3][3]; + + public: + static const Matrix3 IDENTITY; + static const Matrix3 ZERO; + + public: + void SetIdentity(); + void Set(float e00, + float e01, + float e02, + float e10, + float e11, + float e12, + float e20, + float e21, + float e22); + float GetElement(int i, int j) const; + void SetElement(int i, int j, float val); + void SetRotation(const Vector3& axis, float ang); + void Inverse(); + Matrix3 InverseOther() const; + void Transpose(); + Matrix3 TransposeOther() const; + + Vector3 operator*(const Vector3& vec) const; + Matrix3 operator*(const Matrix3& other) const; + Matrix3 operator*(float val) const; + Matrix3 operator+(const Matrix3& other) const; + Matrix3 operator-(const Matrix3& other) const; + Matrix3 operator/(float val) const; + Matrix3& operator*=(float val); + Matrix3& operator-=(const Matrix3& other); + Matrix3& operator+=(const Matrix3& other); + Matrix3& operator=(const Matrix3& other); + + bool operator==(const Matrix3& other); + bool operator!=(const Matrix3& other); + + bool operator==(float a); + bool operator!=(float a); + + float& operator()(int i, int j); + const float& operator()(int i, int j) const; + + friend Matrix3 operator*(float val, const Matrix3& other); + friend Matrix3 operator-(const Matrix3& other); + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp new file mode 100644 index 0000000000..5652c528b4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.cpp @@ -0,0 +1,244 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix44.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#include "Math/Matrix44.h" +#include "Math/Vector3D.h" +#include + +const Matrix4 Matrix4::IDENTITY = Matrix4(1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 1.0f); +const Matrix4 Matrix4::ZERO = Matrix4(0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f); + +Matrix4::Matrix4() +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = 0.0f; + } +} + +Matrix4::Matrix4(const Matrix4& other) +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = other.m[i][j]; + } +} + +Matrix4::Matrix4(float R1[4], float R2[4], float R3[4], float R4[4]) +{ + int i; + + for (i = 0; i < 4; i++) + { + m[0][i] = R1[i]; + } + + for (i = 0; i < 4; i++) + { + m[1][i] = R2[i]; + } + + for (i = 0; i < 4; i++) + { + m[2][i] = R3[i]; + } + + for (i = 0; i < 4; i++) + { + m[3][i] = R4[i]; + } +} + +Matrix4::Matrix4(float e00, + float e01, + float e02, + float e03, + float e10, + float e11, + float e12, + float e13, + float e20, + float e21, + float e22, + float e23, + float e30, + float e31, + float e32, + float e33) +{ + m[0][0] = e00; + m[0][1] = e01; + m[0][2] = e02; + m[0][3] = e03; + m[1][0] = e10; + m[1][1] = e11; + m[1][2] = e12; + m[1][3] = e13; + m[2][0] = e20; + m[2][1] = e21; + m[2][2] = e22; + m[2][3] = e23; + m[3][0] = e30; + m[3][1] = e31; + m[3][2] = e32; + m[3][3] = e33; +} + +Matrix4::~Matrix4() {} + +void Matrix4::SetIdentity() +{ + m[0][0] = 1.0f; + m[0][1] = 0.0f; + m[0][2] = 0.0f; + m[0][3] = 0.0f; + m[1][0] = 0.0f; + m[1][1] = 1.0f; + m[1][2] = 0.0f; + m[1][3] = 0.0f; + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = 1.0f; + m[2][3] = 0.0f; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[3][3] = 1.0f; +} + +void Matrix4::SetRotation(const Vector3& axis, float ang) +{ +#define vsin(x) ((1.0f) - cos(x)) + + float nx = axis.x; + float ny = axis.y; + float nz = axis.z; + + m[0][0] = nx * nx * vsin(ang) + cos(ang); + m[0][1] = nx * ny * vsin(ang) - nz * sin(ang); + m[0][2] = nx * nz * vsin(ang) + ny * sin(ang); + + m[1][0] = nx * ny * vsin(ang) + nz * sin(ang); + m[1][1] = ny * ny * vsin(ang) + cos(ang); + m[1][2] = ny * nz * vsin(ang) - nx * sin(ang); + + m[2][0] = nx * nz * vsin(ang) - ny * sin(ang); + m[2][1] = ny * nz * vsin(ang) + nx * sin(ang); + m[2][2] = nz * nz * vsin(ang) + cos(ang); + + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[3][3] = 1.0f; + +#undef vsin +} + +void Matrix4::SetTranslate(float x, float y, float z) +{ + m[0][3] = x; + m[1][3] = y; + m[2][3] = z; +} + +float Matrix4::GetElement(int i, int j) const { return m[i][j]; } + +Vector3 Matrix4::operator*(const Vector3& vec) const +{ + Vector3 retVal; + + retVal.x = m[0][0] * vec.x + m[0][1] * vec.y + m[0][2] * vec.z + m[0][3]; + retVal.y = m[1][0] * vec.x + m[1][1] * vec.y + m[1][2] * vec.z + m[1][3]; + retVal.z = m[2][0] * vec.x + m[2][1] * vec.y + m[2][2] * vec.z + m[2][3]; + + return retVal; +} + +Matrix4 Matrix4::operator*(const Matrix4& other) const +{ + Matrix4 retMat; + + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + retMat.m[i][j] = m[i][0] * other.m[0][j] + m[i][1] * other.m[1][j] + + m[i][2] * other.m[2][j] + m[i][3] * other.m[3][j]; + } + + return retMat; +} + +Matrix4& Matrix4::operator=(const Matrix4& other) +{ + int i = 0; + int j = 0; + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + m[i][j] = other.m[i][j]; + } + + return *this; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h new file mode 100644 index 0000000000..fe8d0e2c8d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Matrix44.h @@ -0,0 +1,79 @@ +//-------------------------------------------------------------------------------------- +// File: Matrix44.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +namespace AMD +{ + class Vector3; + + class Matrix4 + { + public: + Matrix4(); + Matrix4(const Matrix4& other); + Matrix4(float r1[4], float r2[4], float r3[4], float r4[4]); + Matrix4(float e00, + float e01, + float e02, + float e03, + float e10, + float e11, + float e12, + float e13, + float e20, + float e21, + float e22, + float e23, + float e30, + float e31, + float e32, + float e33); + ~Matrix4(); + + float m[4][4]; + + public: + static const Matrix4 IDENTITY; + static const Matrix4 ZERO; + + public: + void SetIdentity(); + void SetRotation(const Vector3& axis, float ang); + void SetTranslate(float x, float y, float z); + + float GetElement(int i, int j) const; + + Vector3 operator*(const Vector3& vec) const; + Matrix4 operator*(const Matrix4& other) const; + Matrix4& operator=(const Matrix4& other); + + operator float* () const { return (float*)m; } + operator const float* () const { return (const float*)m; } + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp new file mode 100644 index 0000000000..584c42a08a --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.cpp @@ -0,0 +1,291 @@ +//-------------------------------------------------------------------------------------- +// File: Quaternion.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#include +#include +#include +#include + +namespace AMD +{ + Quaternion::Quaternion(float x /* = 0.0*/, + float y /* = 0.0*/, + float z /* = 0.0*/, + float w /* = 1.0*/) + : x(x), y(y), z(z), w(w) + { + } + + Quaternion::~Quaternion(void) {} + + Quaternion::Quaternion(const Quaternion& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + } + + Quaternion::Quaternion(const Matrix3& rotMat) { SetRotation(rotMat); } + + Quaternion::Quaternion(const Vector3& axis, float angle_radian) + { + SetRotation(axis, angle_radian); + } + + Quaternion::Quaternion(float* xyz) { memcpy(m, xyz, sizeof(Quaternion)); } + + Quaternion& Quaternion::Normalize() + { + float n = w * w + x * x + y * y + z * z; + + if (n == 0) + { + w = 1; + return (*this); + } + + n = 1.0f / sqrt(n); + + w *= n; + x *= n; + y *= n; + z *= n; + + return (*this); + } + + void Quaternion::SetRotation(const Vector3& axis, float angle_radian) + { + // This function assumes that the axis vector has been normalized. + float halfAng = 0.5f * angle_radian; + float sinHalf = sin(halfAng); + w = cos(halfAng); + + x = sinHalf * axis.x; + y = sinHalf * axis.y; + z = sinHalf * axis.z; + } + + void Quaternion::SetRotation(const Matrix3& rotMat) + { + float fTrace = rotMat.m[0][0] + rotMat.m[1][1] + rotMat.m[2][2]; + float fRoot; + + if (fTrace > 0.0f) + { + // |w| > 1/2, may as well choose w > 1/2 + fRoot = sqrt(fTrace + 1.0f); // 2w + w = 0.5f * fRoot; + fRoot = 0.5f / fRoot; // 1/(4w) + x = (rotMat.m[2][1] - rotMat.m[1][2]) * fRoot; + y = (rotMat.m[0][2] - rotMat.m[2][0]) * fRoot; + z = (rotMat.m[1][0] - rotMat.m[0][1]) * fRoot; + } + else + { + // |w| <= 1/2 + static size_t s_iNext[3] = { 1, 2, 0 }; + size_t i = 0; + if (rotMat.m[1][1] > rotMat.m[0][0]) + { + i = 1; + } + if (rotMat.m[2][2] > rotMat.m[i][i]) + { + i = 2; + } + size_t j = s_iNext[i]; + size_t k = s_iNext[j]; + + fRoot = sqrt(rotMat.m[i][i] - rotMat.m[j][j] - rotMat.m[k][k] + 1.0f); + float* apkQuat[3] = { &x, &y, &z }; + *apkQuat[i] = 0.5f * fRoot; + fRoot = 0.5f / fRoot; + w = (rotMat.m[k][j] - rotMat.m[j][k]) * fRoot; + *apkQuat[j] = (rotMat.m[j][i] + rotMat.m[i][j]) * fRoot; + *apkQuat[k] = (rotMat.m[k][i] + rotMat.m[i][k]) * fRoot; + } + } + + void Quaternion::SetRotation(const Quaternion& quaternion) { *this = quaternion; } + + void Quaternion::GetRotation(Vector3* pAxis, float* pAngle_radian) const + { + *pAngle_radian = 2.0f * acos(w); + + float scale = sqrt(x * x + y * y + z * z); + + if (scale > 0) + { + pAxis->x = x / scale; + pAxis->y = y / scale; + pAxis->z = z / scale; + } + else + { + pAxis->x = 0; + pAxis->y = 0; + pAxis->z = 0; + } + } + + void Quaternion::GetRotation(Matrix3* pMat33) const + { + float nQ = x * x + y * y + z * z + w * w; + float s = 0.0; + + if (nQ > 0.0) + { + s = 2.0f / nQ; + } + + float xs = x * s; + float ys = y * s; + float zs = z * s; + float wxs = w * xs; + float wys = w * ys; + float wzs = w * zs; + float xxs = x * xs; + float xys = x * ys; + float xzs = x * zs; + float yys = y * ys; + float yzs = y * zs; + float zzs = z * zs; + + pMat33->Set(1.0f - yys - zzs, + xys - wzs, + xzs + wys, + xys + wzs, + 1.0f - xxs - zzs, + yzs - wxs, + xzs - wys, + yzs + wxs, + 1.0f - xxs - yys); + } + + Matrix3 Quaternion::GetMatrix33() const + { + Matrix3 mat; + GetRotation(&mat); + return mat; + } + + float Quaternion::Length() const { return sqrt(x * x + y * y + z * z + w * w); } + + void Quaternion::SetIdentity() + { + x = y = z = 0.0; + w = 1.0; + } + + void Quaternion::Inverse() + { + float lengthSqr = x * x + y * y + z * z + w * w; + + assert(lengthSqr != 0.0); + + x = -x / lengthSqr; + y = -y / lengthSqr; + z = -z / lengthSqr; + w = w / lengthSqr; + } + + Quaternion Quaternion::InverseOther() const + { + Quaternion q(*this); + q.Inverse(); + return q; + } + + Quaternion& Quaternion::operator=(const Quaternion& other) + { + w = other.w; + x = other.x; + y = other.y; + z = other.z; + + return (*this); + } + + Quaternion& Quaternion::operator=(float* xyz) + { + memcpy(m, xyz, sizeof(Quaternion)); + return *this; + } + + Quaternion Quaternion::operator+(const Quaternion& other) const + { + Quaternion q; + + q.w = w + other.w; + q.x = x + other.x; + q.y = y + other.y; + q.z = z + other.z; + + return q; + } + + Quaternion Quaternion::operator+(const Vector3& vec) const + { + Quaternion q; + + q.w = w; + q.x = x + vec.x; + q.y = y + vec.y; + q.z = z + vec.z; + + return q; + } + + Quaternion Quaternion::operator*(const Quaternion& other) const + { + Quaternion q(*this); + + q.w = w * other.w - x * other.x - y * other.y - z * other.z; + q.x = w * other.x + x * other.w + y * other.z - z * other.y; + q.y = w * other.y + y * other.w + z * other.x - x * other.z; + q.z = w * other.z + z * other.w + x * other.y - y * other.x; + + return q; + } + + Vector3 Quaternion::operator*(const Vector3& vec) const + { + Vector3 uv, uuv; + Vector3 qvec(x, y, z); + uv = qvec.Cross(vec); + uuv = qvec.Cross(uv); + uv *= (2.0f * w); + uuv *= 2.0f; + + return vec + uv + uuv; + } + + Vector3 operator*(const Vector3& vec, const Quaternion& q) { return q * vec; } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h new file mode 100644 index 0000000000..0d0b95e623 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Quaternion.h @@ -0,0 +1,90 @@ +//-------------------------------------------------------------------------------------- +// File: Quaternion.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +namespace AMD +{ + class Quaternion + { + public: + Quaternion(float x = 0.0, float y = 0.0, float z = 0.0, float w = 1.0); + Quaternion(const Quaternion& other); + Quaternion(const Matrix3& rotMat); + Quaternion(const Vector3& axis, float angle_radian); + Quaternion(float* xyz); + ~Quaternion(void); + + public: + union + { + struct + { + float m[4]; + }; // x, y, z, w + struct + { + float x, y, z, w; + }; + }; + + Quaternion& Normalize(); + + void SetRotation(const Vector3& axis, float angle_radian); + void SetRotation(const Matrix3& rotMat); + void SetRotation(const Quaternion& quaternion); + void GetRotation(Vector3* pAxis, float* pAngle_radian) const; + void GetRotation(Matrix3* pMat33) const; + Matrix3 GetMatrix33() const; + float Length() const; + + void SetIdentity(); + void Inverse(); + Quaternion InverseOther() const; + + Quaternion& operator=(const Quaternion& other); + Quaternion& operator=(float* xyz); + Quaternion operator+(const Quaternion& other) const; + Quaternion operator+(const Vector3& vec) const; + Quaternion operator*(const Quaternion& other) const; + Vector3 operator*(const Vector3& vec) const; + + friend Vector3 operator*(const Vector3& vec, const Quaternion& q); + }; + +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif diff --git a/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp b/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp new file mode 100644 index 0000000000..0e1af066c2 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Transform.cpp @@ -0,0 +1,86 @@ +//-------------------------------------------------------------------------------------- +// File: Transform.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#include + +namespace AMD +{ + TransformSet::TransformSet(void) {} + + TransformSet::TransformSet(const TransformSet& other) + { + m_Translation = other.m_Translation; + m_Rotation = other.m_Rotation; + } + + TransformSet::TransformSet(const Vector3& translation, + const Quaternion& rotation) + { + m_Translation = translation; + m_Rotation = rotation; + } + + TransformSet::~TransformSet(void) {} + + void TransformSet::Inverse() + { + m_Rotation.Inverse(); + m_Translation = m_Rotation * (-m_Translation); + } + + TransformSet TransformSet::InverseOther() const + { + TransformSet other(*this); + other.Inverse(); + return other; + } + + Vector3 TransformSet::operator*(const Vector3& vector) const + { + return m_Rotation * vector + m_Translation; + } + + TransformSet TransformSet::operator*(const TransformSet& transform) const + { + return TransformSet(m_Rotation * transform.GetTranslation() + m_Translation, + m_Rotation * transform.GetRotation()); + } + + TransformSet& TransformSet::operator=(const TransformSet& other) + { + if (this == &other) + { + return (*this); + } + + m_Translation = other.m_Translation; + m_Rotation = other.m_Rotation; + + return (*this); + } + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Transform.h b/Gems/AtomTressFX/External/Code/src/Math/Transform.h new file mode 100644 index 0000000000..e33752b2ea --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Transform.h @@ -0,0 +1,59 @@ +//-------------------------------------------------------------------------------------- +// File: Transform.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#include +#include + +namespace AMD +{ + class TransformSet + { + public: + TransformSet(void); + TransformSet(const TransformSet& other); + TransformSet(const Vector3& translation, const Quaternion& rotation); + ~TransformSet(void); + + private: + Vector3 m_Translation; + Quaternion m_Rotation; + + public: + const Vector3& GetTranslation() const { return m_Translation; } + const Quaternion& GetRotation() const { return m_Rotation; } + Vector3& GetTranslation() { return m_Translation; } + Quaternion& GetRotation() { return m_Rotation; } + void Inverse(); + TransformSet InverseOther() const; + + Vector3 operator*(const Vector3& vector) const; + TransformSet operator*(const TransformSet& transform) const; + TransformSet& operator=(const TransformSet& other); + }; +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp new file mode 100644 index 0000000000..e9795cff21 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.cpp @@ -0,0 +1,191 @@ +//-------------------------------------------------------------------------------------- +// File: Vector3D.cpp +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#include +#include +#include + +namespace AMD +{ + Vector3::Vector3(const Vector3& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + } + + Vector3::Vector3(const Vector3& begin, const Vector3& end) + { + x = end.x - begin.x; + y = end.y - begin.y; + z = end.z - begin.z; + } + + Vector3::Vector3(float* xyz) { memcpy(m, xyz, sizeof(Vector3)); } + + Vector3& Vector3::Normalize() + { + float d = sqrt(x * x + y * y + z * z); + + if (d == 0) + { + return *this; + } + + x = x / d; + y = y / d; + z = z / d; + + return *this; + } + + Vector3 Vector3::NormalizeOther() const + { + Vector3 n(*this); + return n.Normalize(); + } + + Vector3 Vector3::operator-(const Vector3& other) const + { + return Vector3(x - other.x, y - other.y, z - other.z); + } + + Vector3 Vector3::operator+(const Vector3& other) const + { + return Vector3(x + other.x, y + other.y, z + other.z); + } + + Vector3 Vector3::operator/(float val) const + { + if (val != 0.0f) + { + return Vector3(x / val, y / val, z / val); + } + else + { + return Vector3(0.0f, 0.0f, 0.0f); + } + } + + Vector3& Vector3::operator=(const Vector3& other) + { + x = other.x; + y = other.y; + z = other.z; + w = other.w; + + return *this; + } + + Vector3& Vector3::operator=(float val) + { + x = val; + y = val; + z = val; + + return *this; + } + + Vector3& Vector3::operator=(float* xyz) + { + memcpy(m, xyz, sizeof(Vector3)); + return *this; + } + + bool Vector3::operator<(float val) const { return (LengthSqr() < val * val); } + + bool Vector3::operator>(float val) const { return (LengthSqr() > val * val); } + + bool Vector3::operator!=(float val) const { return (x != val || y != val || z != val); } + + bool Vector3::operator==(float val) const { return (x == val && y == val && z == val); } + + bool Vector3::operator==(const Vector3& other) const + { + return (x == other.x && y == other.y && z == other.z); + } + + bool Vector3::operator!=(const Vector3& other) const + { + return (x != other.x || y != other.y || z != other.z); + } + + Vector3& Vector3::operator-=(const Vector3& other) + { + x -= other.x; + y -= other.y; + z -= other.z; + + return *this; + } + + Vector3& Vector3::operator+=(const Vector3& other) + { + x += other.x; + y += other.y; + z += other.z; + + return *this; + } + + Vector3& Vector3::operator*=(float val) + { + x *= val; + y *= val; + z *= val; + + return *this; + } + + Vector3 Vector3::operator*(float val) const + { + Vector3 vec(*this); + + vec.x *= val; + vec.y *= val; + vec.z *= val; + + return vec; + } + + float Vector3::operator*(const Vector3& other) const { return Dot(other); } + + + Vector3 operator*(float val, const Vector3& other) { return other * val; } + + Vector3 operator-(const Vector3& other) + { + Vector3 vec(other); + + vec.x = -vec.x; + vec.y = -vec.y; + vec.z = -vec.z; + + return vec; + } + +} // namespace AMD diff --git a/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h new file mode 100644 index 0000000000..e43699c14b --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Math/Vector3D.h @@ -0,0 +1,116 @@ +//-------------------------------------------------------------------------------------- +// File: Vector3D.h +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +//-------------------------------------------------------------------------------------- + +#pragma once + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +#include + +namespace AMD +{ + class Vector3 + { + public: + union + { + struct + { + float m[4]; + }; // x, y, z, w + struct + { + float x, y, z, w; + }; + }; + + Vector3() + { + x = y = z = 0; + w = 1.f; + } + + Vector3(float x, float y, float z) + { + m[0] = x; + m[1] = y; + m[2] = z; + }; + Vector3(float* xyz); + Vector3(const Vector3& other); + Vector3(const Vector3& begin, const Vector3& end); + ~Vector3() {}; + + public: + Vector3& Normalize(); + Vector3 NormalizeOther() const; + Vector3 Cross(const Vector3& v) const + { + return Vector3(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); + }; + float Dot(const Vector3& v) const { return x * v.x + y * v.y + z * v.z; }; + float Length() const { return sqrt(x * x + y * y + z * z); }; + float LengthSqr() const { return (x * x + y * y + z * z); }; + void Set(float xIn, float yIn, float zIn) + { + m[0] = xIn; + m[1] = yIn; + m[2] = zIn; + }; + + const float& operator[](unsigned int i) const { return m[i]; } + float& operator[](unsigned int i) { return m[i]; } + + Vector3& operator=(const Vector3& other); + Vector3& operator=(float val); + Vector3& operator=(float* xyz); + bool operator!=(float val) const; + bool operator<(float val) const; + bool operator>(float val) const; + bool operator==(float val) const; + bool operator==(const Vector3& other) const; + bool operator!=(const Vector3& other) const; + Vector3& operator-=(const Vector3& other); + Vector3& operator+=(const Vector3& other); + Vector3& operator*=(float val); + Vector3 operator-(const Vector3& other) const; + Vector3 operator+(const Vector3& other) const; + Vector3 operator/(float val) const; + Vector3 operator*(float val) const; + float operator*(const Vector3& other) const; + + friend Vector3 operator*(float val, const Vector3& other); + friend Vector3 operator-(const Vector3& other); + }; +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif + diff --git a/Gems/AtomTressFX/External/Code/src/SDF.cpp b/Gems/AtomTressFX/External/Code/src/SDF.cpp new file mode 100644 index 0000000000..e225461fb4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SDF.cpp @@ -0,0 +1,96 @@ + +///--------------------------------------------------------------------------------------- +// Example code for managing objects for signed-distance fields (SDFs) +// +// This includes the TressFXSDFCollision objects. Associated with each is a system +// for skinning the model on the GPU (since that is input to TressFXSDFCollision) and +// visualizing the SDFs using marching cubes. The GPU skinning and marching cubes +// systems could be packaged as library code as well, but are not there yet. +// +// The skinned meshes are loaded through this interface as well. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "SDF.h" + +#include "TressFXBoneSkinning.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXSDFCollision.h" +#include "EngineInterface.h" + +CollisionMesh::CollisionMesh( + EI_Scene * gltfImplementation, + EI_RenderTargetSet * renderPass, + const char * name, + const char * tfxmeshFilePath, + int numCellsInXAxis, + float SDFCollMargin, + int skinNumber, + const char * followBone) +{ + m_pBoneSkinning.reset(new TressFXBoneSkinning); + m_pSDFMachingCubes.reset(new TressFXSDFMarchingCubes); + + EI_Device* pDevice = GetDevice(); + EI_CommandContext& uploadCommandContext = GetDevice()->GetCurrentCommandContext(); + + m_pBoneSkinning->LoadTressFXCollisionMeshData(gltfImplementation, tfxmeshFilePath, skinNumber, followBone); + m_pBoneSkinning->Initialize(renderPass, pDevice, uploadCommandContext, name); + + m_pCollisionMesh.reset(new TressFXSDFCollision(pDevice, m_pBoneSkinning.get(), name, numCellsInXAxis, SDFCollMargin)); +#if ENABLE_MARCHING_CUBES + m_pSDFMachingCubes->SetSDF(m_pCollisionMesh.get()); + m_pSDFMachingCubes->SetSDFIsoLevel(m_pCollisionMesh->GetSDFCollisionMargin()); + m_pSDFMachingCubes->Initialize(name, gltfImplementation, renderPass); +#endif +} + +void CollisionMesh::SkinTheMesh(EI_CommandContext& context, double fTime) +{ + m_pBoneSkinning->Update(context, fTime); +} + +void CollisionMesh::AccumulateSDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem) +{ + m_pCollisionMesh->Update(context, sdfCollisionSystem); +} + +void CollisionMesh::ApplySDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem, TressFXHairObject* strands) +{ + m_pCollisionMesh->CollideWithHair(context, sdfCollisionSystem, *strands); +} + +void CollisionMesh::GenerateIsoSurface(EI_CommandContext& context) +{ + m_pSDFMachingCubes->Update(context); +} +void CollisionMesh::DrawIsoSurface(EI_CommandContext& context) +{ + (void)context; + m_pSDFMachingCubes->Draw(); +} + +void CollisionMesh::DrawMesh(EI_CommandContext& context) +{ + m_pBoneSkinning->DrawMesh(context); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/SDF.h b/Gems/AtomTressFX/External/Code/src/SDF.h new file mode 100644 index 0000000000..4adc343b49 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SDF.h @@ -0,0 +1,70 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing objects for signed-distance fields (SDFs) +// +// This includes the TressFXSDFCollision objects. Associated with each is a system +// for skinning the model on the GPU (since that is input to TressFXSDFCollision) and +// visualizing the SDFs using marching cubes. The GPU skinning and marching cubes +// systems could be packaged as library code as well, but are not there yet. +// +// The skinned meshes are loaded through this interface as well. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#define ENABLE_MARCHING_CUBES 1 + +#include "AMD_TressFX.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXBoneSkinning.h" + +class TressFXSDFCollisionSystem; +class TressFXSDFCollision; +class EI_Scene; +class TressFXHairObject; + +class CollisionMesh +{ +public: + CollisionMesh( + EI_Scene* gltfImplementation, + EI_RenderTargetSet* renderPass, + const char* name, + const char* tfxmeshFilePath, + int numCellsInXAxis, + float SDFCollMargin, + int skinNumber, + const char* followBone); + + void SkinTheMesh(EI_CommandContext& context, double fTime); + void AccumulateSDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem); + void ApplySDF(EI_CommandContext& context, TressFXSDFCollisionSystem& sdfCollisionSystem, TressFXHairObject* strands); + void GenerateIsoSurface(EI_CommandContext& context); + void DrawIsoSurface(EI_CommandContext& context); + void DrawMesh(EI_CommandContext& context); +private: + std::unique_ptr m_pCollisionMesh; + // Adi: this structure is required to for computing the per-frame SDF + std::unique_ptr m_pBoneSkinning; + std::unique_ptr m_pSDFMachingCubes; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp new file mode 100644 index 0000000000..6bcfcb08f8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.cpp @@ -0,0 +1,228 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#include "EngineInterface.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GltfHelpers.h" +#include + +void EI_Scene::OnCreate(EI_Device* pDevice, EI_RenderTargetSet * renderTargetSet, EI_RenderTargetSet* shadowRenderTargetSet, const std::string& path, const std::string& fileName, const std::string& bonePrefix, float startOffset) +{ + if (m_pGLTFCommon == nullptr) + { + m_pGLTFCommon = new GLTFCommon(); + m_pGLTFCommon->Load(path, fileName); + } + + m_pDevice = pDevice; + + m_startOffset = startOffset; + + m_pGLTFTexturesAndBuffers = m_pDevice->CreateGLTFTexturesAndBuffers(m_pGLTFCommon); + // here we are loading onto the GPU all the textures and the inverse matrices + // this data will be used to create the PBR and Depth passes + m_pGLTFTexturesAndBuffers->LoadTextures(); + + // same thing as above but for the PBR pass + m_gltfPBR = m_pDevice->CreateGLTFPbrPass(m_pGLTFTexturesAndBuffers.get(), renderTargetSet); + + m_pDevice->GetVidMemBufferPool()->UploadData(m_pDevice->GetUploadHeap()->GetCommandList()); + m_pDevice->GetUploadHeap()->FlushAndFinish(); + + // Create a depth GLTF pass to render shadows + m_gltfDepth = m_pDevice->CreateGLTFDepthPass(m_pGLTFTexturesAndBuffers.get(), shadowRenderTargetSet); + + m_pDevice->GetVidMemBufferPool()->UploadData(m_pDevice->GetUploadHeap()->GetCommandList()); + m_pDevice->GetUploadHeap()->FlushAndFinish(); + + // Init Camera, looking at the origin + m_roll = 0.0f; + m_pitch = 0.0f; + m_distance = 2.0f; + m_animationTime = 0.0f; + + // init GUI state + m_state.iblFactor = 2.0f; + m_state.emmisiveFactor = 1.0f; + + m_bonePrefix = bonePrefix; + m_state.camera.SetSpeed(0.5f); + ComputeGlobalIdxToSkinIdx(); +} + +void EI_Scene::OnDestroy() +{ + if (m_pGLTFTexturesAndBuffers) + m_pGLTFTexturesAndBuffers->OnDestroy(); + + if (m_pGLTFCommon) + { + delete m_pGLTFCommon; + m_pGLTFCommon = nullptr; + } + + if (m_gltfDepth) + m_gltfDepth->OnDestroy(); + + if (m_gltfPBR) + m_gltfPBR->OnDestroy(); +} + +void EI_Scene::OnBeginFrame(float deltaTime, float aspect) +{ + // update gltf data + m_animationTime += deltaTime; + m_animationTime = fmod(m_animationTime, m_pGLTFCommon->m_animations[0].m_duration - m_startOffset); + m_pGLTFCommon->SetAnimationTime(0, m_startOffset + m_animationTime); + m_pGLTFCommon->TransformScene(0, XMMatrixIdentity()); + + //m_ConstantBufferRing.OnBeginFrame(); + + const char * cameraControl[] = { "Animated", "WASD", "Orbit" }; + static int cameraControlSelected = 0; + ImGui::Combo("Camera", &cameraControlSelected, cameraControl, _countof(cameraControl)); + + ImGuiIO& io = ImGui::GetIO(); + // If the mouse was not used by the GUI then it's for the camera + // + if (io.WantCaptureMouse == false) + { + if ((io.KeyCtrl == false) && (io.MouseDown[0] == true)) + { + m_roll -= io.MouseDelta.x / 100.f; + m_pitch += io.MouseDelta.y / 100.f; + } + + // Choose camera movement depending on setting + // + if (cameraControlSelected == 0) + { + if (m_pGLTFCommon->m_cameras.size()) + { + XMMATRIX* pMats = m_pGLTFCommon->m_pCurrentFrameTransformedData->m_worldSpaceMats.data(); + XMMATRIX cameraMat = pMats[m_pGLTFCommon->m_cameras[0].m_nodeIndex]; + m_state.camera.SetMatrix(cameraMat); + m_state.camera.LookAt(m_state.camera.GetPosition(), m_state.camera.GetPosition() - DirectX::XMVector3Normalize(m_state.camera.GetDirection()) * m_distance); + m_pitch = m_state.camera.GetPitch(); + m_roll = m_state.camera.GetYaw(); + m_distance = m_state.camera.GetDistance(); + } + } + if (cameraControlSelected == 1) + { + // WASD + m_state.camera.UpdateCameraWASD(m_roll, m_pitch, io.KeysDown, io.DeltaTime); + } + else if (cameraControlSelected == 2) + { + // Orbiting + m_distance -= (float)io.MouseWheel * 0.5f; + m_distance = std::max(m_distance, 0.1f); + + bool panning = (io.KeyCtrl == true) && (io.MouseDown[0] == true); + + m_state.camera.LookAt(m_state.camera.GetPosition(), DirectX::XMVectorSet(-0.1f, 0.5f, 0.4f, 0.0f)); + m_state.camera.UpdateCameraPolar(m_roll, m_pitch, panning ? -io.MouseDelta.x / 100.0f : 0.0f, panning ? io.MouseDelta.y / 100.0f : 0.0f, m_distance); + } + } + + // transform geometry and skinning matrices + upload them as buffers -------------- + per_frame *pPerFrame = NULL; + if (m_pGLTFTexturesAndBuffers) + { + pPerFrame = m_pGLTFTexturesAndBuffers->m_pGLTFCommon->SetPerFrameData(0, 1280.0f / 720.0f); + pPerFrame->mCameraViewProj = m_state.camera.GetView() * m_state.camera.GetProjection(); + pPerFrame->cameraPos = m_state.camera.GetPosition(); + pPerFrame->iblFactor = m_state.iblFactor; + pPerFrame->emmisiveFactor = m_state.emmisiveFactor; + + // Store the light information for the frame (as it will be needed later) + if (pPerFrame->lightCount != m_SceneLightInfo.size()) + m_SceneLightInfo.resize(pPerFrame->lightCount); + + // For now, divide up the shadow map into 4 2k x 2k quadrants. This will change once we decide what shadow scheme we want to support + // Also, until we can get light exports working well, just support spots as shadow casters for now + uint32_t shadowMapIndex = 0; + for (uint32_t i = 0; i < pPerFrame->lightCount; i++) + { + assert(shadowMapIndex < 4 && "Too many shadows are enabled, ignoring all shadows after 4th shadow casting light."); + if ((shadowMapIndex < 4) && (pPerFrame->lights[i].type == LightType_Spot || pPerFrame->lights[i].type == LightType_Directional)) + pPerFrame->lights[i].shadowMapIndex = shadowMapIndex++; //set the shadow map index so the color pass knows which shadow map to use + else + pPerFrame->lights[i].shadowMapIndex = -1; + + // Store this information + m_SceneLightInfo[i] = pPerFrame->lights[i]; + } + + m_pGLTFTexturesAndBuffers->SetPerFrameConstants(); + m_pGLTFTexturesAndBuffers->SetSkinningMatricesForSkeletons(); + } +} + +void EI_Scene::OnRender() +{ +#if TRESSFX_VK + m_gltfPBR->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer); +#else + m_gltfPBR->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer.Get(), GetDevice()->GetShadowBufferResource()->SRView); +#endif // TRESSFX_VK +} + +void EI_Scene::OnRenderLight(uint32_t LightIndex) +{ + // Set per frame constant buffer values +#if TRESSFX_VK + CAULDRON_VK::GltfDepthPass::per_frame* cbPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbPerFrame->mViewProj = m_SceneLightInfo[LightIndex].mLightViewProj; + m_gltfDepth->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer); +#else + CAULDRON_DX12::GltfDepthPass::per_frame* cbPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbPerFrame->mViewProj = m_SceneLightInfo[LightIndex].mLightViewProj; + m_gltfDepth->Draw(GetDevice()->GetCurrentCommandContext().commandBuffer.Get()); +#endif // TRESSFX_VK +} + +void EI_Scene::OnResize(uint32_t width, uint32_t height) +{ + m_state.camera.SetFov(XM_PI / 4, width, height, 0.1f, 1000.0f); +} + +void EI_Scene::ComputeGlobalIdxToSkinIdx() +{ + m_globalIdxToSkinIdx.resize(m_pGLTFCommon->m_skins.size()); + for (int skin = 0; skin < m_pGLTFCommon->m_skins.size(); ++skin) + { + m_globalIdxToSkinIdx[skin].resize(m_pGLTFCommon->m_nodes.size()); + for (int i = 0; i < m_pGLTFCommon->m_skins[skin].m_jointsNodeIdx.size(); ++i) + { + m_globalIdxToSkinIdx[skin][m_pGLTFCommon->m_skins[skin].m_jointsNodeIdx[i]] = i; + } + } +} + +int EI_Scene::GetBoneIdByName(int skinNumber, const char * name) +{ + std::string completeString = m_bonePrefix + name; + for (int i = 0; i < m_pGLTFCommon->m_nodes.size(); ++i) + { + if (completeString == m_pGLTFCommon->m_nodes[i].m_name) { + return m_globalIdxToSkinIdx[skinNumber][i]; + } + } + return -1; +} diff --git a/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h new file mode 100644 index 0000000000..b4c84b1f6d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/SceneGLTFImpl.h @@ -0,0 +1,106 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + + +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +#include +using namespace DirectX; +class GLTFCommon; + +// C RunTime Header Files +#include +#include +#include +#include +#include +#include +#include +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "Base/DynamicBufferRing.h" +#include "Base/StaticBufferPool.h" +#include "Base/ShaderCompiler.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" + +#include "TressFXCommon.h" + +struct EI_RenderTargetSet; + +class EI_Scene +{ +public: + + struct State + { + float time; + Camera camera; + + float iblFactor; + float emmisiveFactor; + }; + + EI_Scene() : m_pGLTFTexturesAndBuffers(nullptr), m_pGLTFCommon(nullptr) {} + ~EI_Scene() { OnDestroy(); } + void OnCreate(EI_Device* device, EI_RenderTargetSet* renderTargetSet, EI_RenderTargetSet* shadowRenderTargetSet, const std::string& path, const std::string& fileName, const std::string& bonePrefix, float startOffset); + void OnDestroy(); + void OnBeginFrame(float deltaTime, float aspect); + void OnRender(); + void OnRenderLight(uint32_t LightIndex); + void OnResize(uint32_t width, uint32_t height); + + uint32_t GetSceneLightCount() const { return static_cast(m_SceneLightInfo.size()); } + const Light& GetSceneLightInfo(uint32_t Index) const { return m_SceneLightInfo[Index]; } + + AMD::float4x4 GetMV() const { return *(AMD::float4x4*)&m_state.camera.GetView(); } + AMD::float4x4 GetMVP() const { return *(AMD::float4x4*)&(m_state.camera.GetView() * m_state.camera.GetProjection()); } + AMD::float4x4 GetInvViewProjMatrix() const { return *(AMD::float4x4*) & (XMMatrixInverse(nullptr, m_state.camera.GetView() * m_state.camera.GetProjection())); } + AMD::float4 GetCameraPos() const { return *(AMD::float4*)&m_state.camera.GetPosition(); } + std::vector GetWorldSpaceSkeletonMats(int skinNumber) const { return m_pGLTFCommon->m_pCurrentFrameTransformedData->m_worldSpaceSkeletonMats[skinNumber]; } + + int GetBoneIdByName(int skinNumber, const char * name); + +private: + void ComputeGlobalIdxToSkinIdx(); + EI_Device* m_pDevice; + std::unique_ptr m_pGLTFTexturesAndBuffers; + + GLTFCommon* m_pGLTFCommon; + + std::unique_ptr m_gltfPBR; + std::unique_ptr m_gltfDepth; + + State m_state; + + std::string m_bonePrefix; + float m_startOffset = 0; + + // cache inverse index mapping because cauldron doesnt do that + std::vector> m_globalIdxToSkinIdx; + + std::vector m_SceneLightInfo; + + float m_animationTime; + float m_roll; + float m_pitch; + float m_distance; +}; diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl new file mode 100644 index 0000000000..b7eb3ae119 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/FullScreenRender.hlsl @@ -0,0 +1,61 @@ +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + + return output; +} + +////////////////////////////////////////////////////////////// +// FullScreen PS +[[vk::binding(0, 0)]] Texture2D ColorTexture : register(t0, space0); + +// Second pass of ShortCut. +// Full-screen pass that writes the farthest of the near depths for depth culling. +float4 FullScreenPS(VS_OUTPUT_SCREENQUAD input) : SV_Target0 +{ + // Output the color + return float4( ColorTexture[input.vPosition.xy].xyz, 1.f ); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl new file mode 100644 index 0000000000..99243ceafa --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinning.hlsl @@ -0,0 +1,140 @@ +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +// Adi: this shader file is only required for applying physics and and debug render. +// If physics is not applied (during first iterations) it is not used and can be skipped. + +[[vk::binding(3, 0)]] cbuffer ConstBufferCS_BoneMatrix : register(b3, space0) +{ + float4 cColor; + float4 vLightDir; + int4 g_NumMeshVertices; + float4x4 mMW; + float4x4 mMVP; + row_major float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +} + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +// UAVs +[[vk::binding(0, 0)]] RWStructuredBuffer bs_collMeshVertexPositions : register(u0, space0); + +// SRVs +[[vk::binding(1, 0)]] StructuredBuffer bs_boneSkinningData : register(t1, space0); +[[vk::binding(2, 0)]] StructuredBuffer bs_initialVertexPositions : register(t2, space0); + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void BoneSkinning(uint GIndex : SV_GroupIndex, uint3 GId : SV_GroupID, uint3 DTid : SV_DispatchThreadID) +{ + uint local_id = GIndex; + uint group_id = GId.x; + uint global_id = local_id + group_id * THREAD_GROUP_SIZE; + + if (global_id >= g_NumMeshVertices.x) + return; + + float3 pos = bs_initialVertexPositions[global_id].position.xyz; + float3 n = bs_initialVertexPositions[global_id].normal.xyz; + + // compute a bone skinning transform + BoneSkinningData skinning = bs_boneSkinningData[global_id]; + + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinning.boneIndex[0]] * skinning.boneWeight[0]; + float weight_sum = skinning.boneWeight[0]; + + // Each vertex gets influence from four bones. In case there are less than four bones, boneIndex and boneWeight would be zero. + // This number four was set in Maya exporter and also used in loader. So it should not be changed unless you have a very strong reason and are willing to go through all spots. + for (int i = 1; i < 4; i++) + { + if (skinning.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinning.boneIndex[i]] * skinning.boneWeight[i]; + weight_sum += skinning.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + + pos.xyz = mul(float4(pos.xyz, 1), bone_matrix).xyz; + n.xyz = mul(float4(n.xyz, 0), bone_matrix).xyz; + bs_collMeshVertexPositions[global_id].position.xyz = pos; + bs_collMeshVertexPositions[global_id].normal.xyz = n; +} + +// visualization + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput BoneSkinningVisualizationVS( uint vertexId : SV_VertexID ) +{ + VsOutput output; + + output.vNormal_ = mul(bs_collMeshVertexPositions[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(bs_collMeshVertexPositions[vertexId].position.xyz, 1.0); + + output.vPositionSS = mul(mMVP, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + return output; +} + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput BoneSkinningVisualizationPS(VsOutput input) : SV_Target +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7*saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} + +//EndHLSL \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl new file mode 100644 index 0000000000..479d99c661 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXBoneSkinningVisualization.hlsl @@ -0,0 +1,88 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to visualizing skining +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +[[vk::binding(0, 0)]] cbuffer boneSkinningVisualizationConstants { + float4x4 mMW; + float4x4 mWVP; + float3 cColor; + float3 vLightDir; + float3 g_vEye; +}; + +struct VertexData +{ + float3 position; + float3 normal; +}; + +[[vk::binding(1, 0)]] StructuredBuffer vertices; + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput BoneSkinningVisualizationVS( uint vertexId : SV_VertexID ) +{ + VsOutput output; + + output.vNormal_ = mul(vertices[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(vertices[vertexId].position.xyz, 1.0); + + float4 vPos = mul(mMW, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + output.vPositionSS = mul(mWVP, vPos); + return output; +} + + +struct PSInput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput BoneSkinningVisualizationPS(PSInput input) +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7*saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl new file mode 100644 index 0000000000..cdedd595c7 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXLighting.hlsl @@ -0,0 +1,303 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + + +// If you change this, you MUST also change TressFXLightParams in TressFXConstantBuffers.h +#define AMD_TRESSFX_MAX_LIGHTS 10 + +// These come from GltfCommon (just re-using them) +#define LightType_Directional 0 +#define LightType_Point 1 +#define LightType_Spot 2 + +struct LightParams +{ + // nLightShape (ignored) for volumes and stuff ... + // nLightIndex (not used in Sushi) + float LightIntensity; // fLightIntensity in Sushi + float LightOuterConeCos; // vLightConeAngles.x in Sushi + float LightInnerConeCos; // vLightConeAngles.y in Sushi + float LightRange; // vLightConeAngles.z in Sushi + + float4 LightPositionWS; // vLightPosWS in Sushi + float4 LightDirWS; // vLightDirWS in Sushi + float4 LightColor; // vLightColor in Sushi + + float4x4 ShadowProjection; + + float4 ShadowParams; // Bias, near, far, range + + // vScaleWS (not used) + int LightType; // vLightParams.x in Sushi + // vLightParams.y is falloff exponent and always 1.f in Sushi + // vLightParams.zw are Diffuse and Spec mask in Sushi and are always 1.f + // vLightOrientation (not used) + int ShadowMapIndex; + + int ShadowMapSize; // Dimension of the shadow slice we are sampling from + int Padding2; +}; + +[[vk::binding(0, 3)]] cbuffer LightConstants : register(b0, space3) +{ + int NumLights; + int UseDepthApproximation; + int Padding4; + int Padding5; + LightParams LightData[AMD_TRESSFX_MAX_LIGHTS]; +}; + +[[vk::binding(1, 3)]] Texture2D ShadowTexture : register(t1, space3); + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#inner-and-outer-cone-angles +float SpotAttenuation(float3 pointToLight, float3 spotDirection, float outerConeCos, float innerConeCos) +{ + float actualCos = dot(normalize(spotDirection), normalize(-pointToLight)); + if (actualCos > outerConeCos) + { + if (actualCos < innerConeCos) + { + return smoothstep(outerConeCos, innerConeCos, actualCos); + } + return 1.0; + } + return 0.0; +} + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#range-property +float RangeAttenuation(float range, float distance) +{ + if (range < 0.0) + { + // negative range means unlimited + return 1.0; + } + return max(lerp(1, 0, distance / range), 0);//max(min(1.0 - pow(distance / range, 4.0), 1.0), 0.0) / pow(distance, 2.0); +} + +// ============================================================================================================================= +// Reduces light to a direction and intensity (taking attenuation and light strength into account) +void GetLightParams(float3 WorldPosition, uint lightIndex, inout float3 LightVector, inout float LightIntensity, HairShadeParams params) +{ + LightIntensity = LightData[lightIndex].LightIntensity; + + // Spot and Directionals use the light direction directly + LightVector = LightData[lightIndex].LightDirWS; + if (LightData[lightIndex].LightType == LightType_Directional) + return; + + // Normalized light vector and squared distance for radial source calculations + float3 vLightVecWS = LightData[lightIndex].LightPositionWS - WorldPosition; + float distToLight = length(vLightVecWS); + + // Set the LightVector to actual direction to light + LightVector = normalize(vLightVecWS); + + // Calculate radial falloff + LightIntensity *= RangeAttenuation(LightData[lightIndex].LightRange, distToLight); + + // Modulate with spot falloff if needed + if (LightData[lightIndex].LightType == LightType_Spot) + { + // Need to inverse the direction going in (as it's direction to light) as Unreal with negate it again under the hood. + LightIntensity *= SpotAttenuation(LightVector, -LightData[lightIndex].LightDirWS, LightData[lightIndex].LightOuterConeCos, LightData[lightIndex].LightInnerConeCos); + } +} + +// Returns a float3 which is the scale for diffuse, spec term, and colored spec term. +// +// The diffuse term is from Kajiya. +// +// The spec term is what Marschner calls "R", reflecting directly off the surface of the hair, +// taking the color of the light like a dielectric specular term. This highlight is shifted +// towards the root of the hair. +// +// The colored spec term is caused by light passing through the hair, bouncing off the back, and +// coming back out. It therefore picks up the color of the light. +// Marschner refers to this term as the "TRT" term. This highlight is shifted towards the +// tip of the hair. +// +// vEyeDir, vLightDir and vTangentDir are all pointing out. +// coneAngleRadians explained below. +// +// +// hair has a tiled-conical shape along its lenght. Sort of like the following. +// +// \ / +// \ / +// \ / +// \ / +// +// The angle of the cone is the last argument, in radians. +// It's typically in the range of 5 to 10 degrees +float3 ComputeDiffuseSpecFactors(float3 vEyeDir, float3 vLightDir, float3 vTangentDir, HairShadeParams params, float coneAngleRadians = 10 * AMD_PI / 180) +{ + // in Kajiya's model: diffuse component: sin(t, l) + float cosTL = (dot(vTangentDir, vLightDir)); + float sinTL = sqrt(1 - cosTL * cosTL); + float diffuse = sinTL; // here sinTL is apparently larger than 0 + + float cosTRL = -cosTL; + float sinTRL = sinTL; + float cosTE = (dot(vTangentDir, vEyeDir)); + float sinTE = sqrt(1 - cosTE * cosTE); + + // primary highlight: reflected direction shift towards root (2 * coneAngleRadians) + float cosTRL_root = cosTRL * cos(2 * coneAngleRadians) - sinTRL * sin(2 * coneAngleRadians); + float sinTRL_root = sqrt(1 - cosTRL_root * cosTRL_root); + float specular_root = max(0, cosTRL_root * cosTE + sinTRL_root * sinTE); + + // secondary highlight: reflected direction shifted toward tip (3*coneAngleRadians) + float cosTRL_tip = cosTRL * cos(-3 * coneAngleRadians) - sinTRL * sin(-3 * coneAngleRadians); + float sinTRL_tip = sqrt(1 - cosTRL_tip * cosTRL_tip); + float specular_tip = max(0, cosTRL_tip * cosTE + sinTRL_tip * sinTE); + + return float3(params.Kd * diffuse, params.Ks1 * pow(specular_root, params.Ex1), params.Ks2 * pow(specular_tip, params.Ex2)); +} + +float LinearizeDepth(float depthNDC, float fNear, float fFar) +{ + return fNear * fFar / (fFar - depthNDC * (fFar - fNear)); +} + +// fDepthDistanceWS is the world space distance between the point on the surface and the point in the shadow map. +// fFiberSpacing is the assumed, average, world space distance between hair fibers. +// fFiberRadius in the assumed average hair radius. +// fHairAlpha is the alpha value for the hair (in terms of translucency, not coverage.) +// Output is a number between 0 (totally shadowed) and 1 (lets everything through) +float ComputeShadowAttenuation(float fDepthDistanceWS, float fFiberSpacing, float fFiberRadius, float fHairAlpha) +{ + float numFibers = fDepthDistanceWS / (fFiberSpacing * fFiberRadius); // fiberSpacing + fiberRadius is total distance from 1 fiber to another + + // if occluded by hair, there is at least one fiber + [flatten] if (fDepthDistanceWS > 1e-5) + numFibers = max(numFibers, 1); + + return pow(abs(1 - fHairAlpha), numFibers); +} + +float ComputeLightShadow(int lightIndex, float3 vPositionWS, in HairShadeParams params) +{ + if (LightData[lightIndex].ShadowMapIndex < 0) + return 1.f; + + float4 shadowTexCoord = MatrixMult( LightData[lightIndex].ShadowProjection, float4(vPositionWS, 1.f) ); + shadowTexCoord.xyz /= shadowTexCoord.w; + + // remember we are splitting the shadow map in 4 quarters + // and at this point, everything's in -1 to 1 + // So bring back to 0 -> 0.5 and flip the Y coordinate + shadowTexCoord.x = (1.0 + shadowTexCoord.x) * 0.25; + shadowTexCoord.y = (1.0 - shadowTexCoord.y) * 0.25; + + // Bias the depth value (note, we need better depth bias settings) + shadowTexCoord.z -= LightData[lightIndex].ShadowParams.x; + + float LinearZ = LinearizeDepth(shadowTexCoord.z, LightData[lightIndex].ShadowParams.y, LightData[lightIndex].ShadowParams.z); + + if ((shadowTexCoord.y < 0) || (shadowTexCoord.y > .5)) return 1.f; + if ((shadowTexCoord.x < 0) || (shadowTexCoord.x > .5)) return 1.f; + + // offsets of the center of the shadow map atlas + float offsetsX[4] = { 0.0, 1.0, 0.0, 1.0 }; + float offsetsY[4] = { 0.0, 0.0, 1.0, 1.0 }; + shadowTexCoord.x += offsetsX[LightData[lightIndex].ShadowMapIndex] * .5; + shadowTexCoord.y += offsetsY[LightData[lightIndex].ShadowMapIndex] * .5; + + // Sample shadow map + float shadow = 0.0; + + static const int kernelLevel = 2; + static const int kernelWidth = 2 * kernelLevel + 1; + [unroll] for (int i = -kernelLevel; i <= kernelLevel; i++) + { + [unroll] for (int j = -kernelLevel; j <= kernelLevel; j++) + { + float distToLight = ShadowTexture.Sample(LinearWrapSampler, shadowTexCoord.xy, int2(i, j)).r; + float LinearSample = LinearizeDepth(distToLight, LightData[lightIndex].ShadowParams.y, LightData[lightIndex].ShadowParams.z); + bool isLit = UseDepthApproximation ? LinearZ < LinearSample : shadowTexCoord.z < distToLight; + + if (isLit) + shadow += 1.f; + else + { + shadow += UseDepthApproximation ? ComputeShadowAttenuation(LinearZ - LinearSample, params.FiberSpacing, params.FiberRadius, params.HairShadowAlpha) : 0.f; + } + } + } + + // Average the values according to number of samples + shadow /= (kernelWidth * kernelWidth); + + return shadow; +} + +float3 AccumulateHairLight(float3 vTangent, float3 vPositionWS, float3 vViewDirWS, in HairShadeParams params, float3 vNDC) +{ + // Initialize information needed for all lights + float3 V = normalize(vViewDirWS); + float3 T = normalize(vTangent); + + float3 color = float3(0.0, 0.0, 0.0); + + // Needed for each light calculation + float3 LightVector; + float LightIntensity; + + // Start with non-shadowed lights + uint lightCount = min(NumLights, AMD_TRESSFX_MAX_LIGHTS); + for (uint i = 0; i < lightCount; i++) + { + GetLightParams(vPositionWS, i, LightVector, LightIntensity, params); + + if (LightIntensity) + { + // Compute shadow term (if we've got one) + float fShadowTerm = ComputeLightShadow(i, vPositionWS, params); + + if (fShadowTerm > 0.f) + { + float3 L = LightVector; + float3 LightColor = LightData[i].LightColor; + + float3 reflection = ComputeDiffuseSpecFactors(V, L, T, params); + + float3 ReflectedLight = reflection.x * LightColor * params.Color; + ReflectedLight += reflection.y * LightColor; + ReflectedLight += reflection.z * LightColor * params.Color; + ReflectedLight *= fShadowTerm * LightIntensity; + + color += max(float3(0, 0, 0), ReflectedLight); + } + } + } + + return color; +} + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl new file mode 100644 index 0000000000..3de9fb19c3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXMarchingCubes.hlsl @@ -0,0 +1,313 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to Marching Cubes +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + + +//StartHLSL TressFXMarchingCubesCS + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +[[vk::binding(5, 0)]] cbuffer ConstBuffer_MC : register(b5, space0) +{ + // rendering + float4x4 mMW; + float4x4 mWVP; + float4 cColor; + float4 vLightDir; + + //simulation + float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; +} + +//Actually contains floats; make sure to use asfloat() when accessing. uint is used to allow atomics. +[[vk::binding(0, 0)]] RWStructuredBuffer g_MarchingCubesSignedDistanceField : register(u0, space0); + +// UAV for MC +[[vk::binding(1, 0)]] RWStructuredBuffer g_MarchingCubesTriangleVertices : register(u1, space0); +[[vk::binding(2, 0)]] RWStructuredBuffer g_NumMarchingCubesVertices : register(u2, space0); + +// SRV for MC +[[vk::binding(3, 0)]] StructuredBuffer g_MarchingCubesEdgeTable : register(t3, space0); +[[vk::binding(4, 0)]] StructuredBuffer g_MarchingCubesTriangleTable : register(t4, space0); + +int3 GetSdfCellPositionFromIndex(uint sdfCellIndex) +{ + uint cellsPerLine = (uint)g_NumCellsX; + uint cellsPerPlane = (uint)(g_NumCellsX * g_NumCellsY); + + uint numPlanesZ = sdfCellIndex / cellsPerPlane; + uint remainder = sdfCellIndex % cellsPerPlane; + + uint numLinesY = remainder / cellsPerLine; + uint numCellsX = remainder % cellsPerLine; + + return int3((int)numCellsX, (int)numLinesY, (int)numPlanesZ); +} + +float3 GetSdfCellPosition(int3 gridPosition) +{ + float3 cellCenter = float3(gridPosition.x, gridPosition.y, gridPosition.z) * g_CellSize; + cellCenter += g_Origin.xyz; + + return cellCenter; +} + +int GetSdfCellIndex(int3 gridPosition) +{ + int cellsPerLine = g_NumCellsX; + int cellsPerPlane = g_NumCellsX * g_NumCellsY; + + return cellsPerPlane*gridPosition.z + cellsPerLine*gridPosition.y + gridPosition.x; +} + +//Relative vertex positions: +// +// 4-------5 +// /| /| +// / | / | +// 7-------6 | +// | 0----|--1 +// | / | / +// |/ |/ +// 3-------2 +struct MarchingCube +{ + float4 m_vertices[8]; + float m_scalars[8]; +}; + +float3 VertexLerp(float isolevel, float scalar1, float scalar2, float4 p1, float4 p2) +{ + //Given 2 points p1, p2 with associated values scalar1, scalar2, + //we want the linearly interpolated position of a point in between p1 and p2 with a value equal to isolevel. + //Isolevel should be between scalar1 and scalar2. + // + //p = p1 + (p2 - p1) * (isolevel - scalar1) / (scalar2 - scalar1) + + float interp = (isolevel - scalar1) / (scalar2 - scalar1); + return (p1 + (p2 - p1) * interp).xyz; +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void InitializeMCVertices(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int index = GId.x * THREAD_GROUP_SIZE + GIndex; + + if (index < g_MaxMarchingCubesVertices) + { + StandardVertex v; + v.position = float4(0, 0, 0, 0); + v.normal = float4(0, 0, 0, 0); + + g_MarchingCubesTriangleVertices[index] = v; + } + + if (index == 0) + g_NumMarchingCubesVertices[0] = 0; +} + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void RunMarchingCubesOnSdf(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + if(sdfCellIndex >= numSdfCells) + return; + + int3 gridPosition = GetSdfCellPositionFromIndex( (uint)sdfCellIndex ); + + if( !(0 <= gridPosition.x && gridPosition.x < g_NumCellsX - 1) + || !(0 <= gridPosition.y && gridPosition.y < g_NumCellsY - 1) + || !(0 <= gridPosition.z && gridPosition.z < g_NumCellsZ - 1) ) return; + + int3 offset[8]; + offset[0] = int3(0, 0, 0); + offset[1] = int3(1, 0, 0); + offset[2] = int3(1, 0, 1); + offset[3] = int3(0, 0, 1); + offset[4] = int3(0, 1, 0); + offset[5] = int3(1, 1, 0); + offset[6] = int3(1, 1, 1); + offset[7] = int3(0, 1, 1); + + int3 cellCoordinates[8]; + + for(int i = 0; i < 8; ++i) + cellCoordinates[i] = gridPosition + offset[i]; + + MarchingCube C; + + for(int j = 0; j < 8; ++j) + C.m_vertices[j].xyz = GetSdfCellPosition(cellCoordinates[j]); + + for(int k = 0; k < 8; ++k) + { + int sdfIndex = GetSdfCellIndex(cellCoordinates[k]); + float dist = asfloat(g_MarchingCubesSignedDistanceField[sdfIndex]); + + C.m_scalars[k] = dist; + } + + + //appendTrianglesMarchingCubes(C); + { + //Compare floats at vertices 0-7 with g_MarchingCubesIsolevel + //to determine which of the 256 possible configurations is present + uint cubeIndex = 0; + if( C.m_scalars[0] < g_MarchingCubesIsolevel ) cubeIndex |= 1; + if( C.m_scalars[1] < g_MarchingCubesIsolevel ) cubeIndex |= 2; + if( C.m_scalars[2] < g_MarchingCubesIsolevel ) cubeIndex |= 4; + if( C.m_scalars[3] < g_MarchingCubesIsolevel ) cubeIndex |= 8; + if( C.m_scalars[4] < g_MarchingCubesIsolevel ) cubeIndex |= 16; + if( C.m_scalars[5] < g_MarchingCubesIsolevel ) cubeIndex |= 32; + if( C.m_scalars[6] < g_MarchingCubesIsolevel ) cubeIndex |= 64; + if( C.m_scalars[7] < g_MarchingCubesIsolevel ) cubeIndex |= 128; + + if( !g_MarchingCubesEdgeTable[cubeIndex] ) + return; //All vertices are above or below isolevel + + //Generate vertices for edges 0-11; interpolate between the edge's vertices + float3 vertices[12]; + if( g_MarchingCubesEdgeTable[cubeIndex] & 1 ) vertices[0] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[0], C.m_scalars[1], C.m_vertices[0], C.m_vertices[1]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 2 ) vertices[1] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[1], C.m_scalars[2], C.m_vertices[1], C.m_vertices[2]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 4 ) vertices[2] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[2], C.m_scalars[3], C.m_vertices[2], C.m_vertices[3]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 8 ) vertices[3] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[3], C.m_scalars[0], C.m_vertices[3], C.m_vertices[0]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 16 ) vertices[4] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[4], C.m_scalars[5], C.m_vertices[4], C.m_vertices[5]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 32 ) vertices[5] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[5], C.m_scalars[6], C.m_vertices[5], C.m_vertices[6]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 64 ) vertices[6] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[6], C.m_scalars[7], C.m_vertices[6], C.m_vertices[7]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 128 ) vertices[7] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[7], C.m_scalars[4], C.m_vertices[7], C.m_vertices[4]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 256 ) vertices[8] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[0], C.m_scalars[4], C.m_vertices[0], C.m_vertices[4]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 512 ) vertices[9] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[1], C.m_scalars[5], C.m_vertices[1], C.m_vertices[5]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 1024 ) vertices[10] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[2], C.m_scalars[6], C.m_vertices[2], C.m_vertices[6]); + if( g_MarchingCubesEdgeTable[cubeIndex] & 2048 ) vertices[11] = VertexLerp(g_MarchingCubesIsolevel, C.m_scalars[3], C.m_scalars[7], C.m_vertices[3], C.m_vertices[7]); + + //Store triangles + uint numVerticesFromThisCube = 0; + + for(int i = 0; i < 16 && g_MarchingCubesTriangleTable[cubeIndex * 16 + i] != -1; ++i) + ++numVerticesFromThisCube; + + int vertexIndexOffset; + InterlockedAdd(g_NumMarchingCubesVertices[0], numVerticesFromThisCube, vertexIndexOffset); + + if(vertexIndexOffset + numVerticesFromThisCube < g_MaxMarchingCubesVertices) + { + uint numTriangles = numVerticesFromThisCube / 3; + + for(uint tri = 0; tri < numTriangles; ++tri) + { + uint offset0 = tri * 3 + 0; + uint offset1 = tri * 3 + 1; + uint offset2 = tri * 3 + 2; + + StandardVertex v0; + StandardVertex v1; + StandardVertex v2; + + v0.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset0] ], 0); + v1.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset1] ], 0); + v2.position = float4(vertices[ g_MarchingCubesTriangleTable[cubeIndex * 16 + offset2] ], 0); + + float3 normal = normalize( cross(v1.position.xyz - v0.position.xyz, v2.position.xyz - v0.position.xyz) ); + + v0.normal = float4(normal.xyz, 0); + v1.normal = float4(normal.xyz, 0); + v2.normal = float4(normal.xyz, 0); + + uint index0 = vertexIndexOffset + offset0; + uint index1 = vertexIndexOffset + offset1; + uint index2 = vertexIndexOffset + offset2; + + g_MarchingCubesTriangleVertices[index0] = v0; + g_MarchingCubesTriangleVertices[index1] = v1; + g_MarchingCubesTriangleVertices[index2] = v2; + } + } + } + +} + +//EndHLSL + +// rendering stuff ( from oSDF.sufx ) + +struct VsOutput +{ + float4 vPositionSS : SV_POSITION; + float3 vPos_ : vPos_; + float3 vNormal_ : vNormal_; +}; + +VsOutput MarchingCubesVS(uint vertexId : SV_VertexID) +{ + VsOutput output; + + output.vNormal_ = mul(g_MarchingCubesTriangleVertices[vertexId].normal.xyz, (float3x3)mMW); + float4 inputVertexPos = float4(g_MarchingCubesTriangleVertices[vertexId].position.xyz, 1.0); + + output.vPositionSS = mul(mWVP, float4(inputVertexPos.xyz, 1.0f)); + output.vPos_ = inputVertexPos.xyz; + return output; +} + +struct PSOutput +{ + float4 vColor : SV_TARGET; +}; + +PSOutput MarchingCubesPS(VsOutput input) +{ + PSOutput output = (PSOutput)0; + float4 vDiffuse = float4(cColor.xyz, 1.0); + float fAmbient = 0.2; + float3 vLightDir1 = float3(-1., 0., -1.); + + //float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)); + float fLighting = saturate(dot(normalize(vLightDir), input.vNormal_)) + 0.7 * saturate(dot(normalize(vLightDir1), input.vNormal_)); + fLighting = max(fLighting, fAmbient); + + output.vColor = vDiffuse * fLighting; + return output; +} diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl new file mode 100644 index 0000000000..8e6a2f5919 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXPPLL.hlsl @@ -0,0 +1,395 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to per-pixel linked lists. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +#define FRAGMENT_LIST_NULL 0xffffffff + +[[vk::binding(0, 2)]] cbuffer viewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS +PS_INPUT_HAIR RenderHairVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +struct PPLL_STRUCT +{ + uint depth; + uint data; + uint color; + uint uNext; +}; + +[[vk::binding(0, 3)]] RWTexture2D RWFragmentListHead : register(u0, space3); +[[vk::binding(1, 3)]] RWStructuredBuffer LinkedListUAV : register(u1, space3); +[[vk::binding(2, 3)]] RWStructuredBuffer LinkedListCounter : register(u2, space3); + +// Allocate a new fragment location in fragment color, depth, and link buffers +int AllocateFragment(int2 vScreenAddress) +{ + uint newAddress; + InterlockedAdd(LinkedListCounter[0], 1, newAddress); + + if (newAddress < 0 || newAddress >= NodePoolSize) + newAddress = FRAGMENT_LIST_NULL; + return newAddress; +} + +// Insert a new fragment at the head of the list. The old list head becomes the +// the second fragment in the list and so on. Return the address of the *old* head. +int MakeFragmentLink(int2 vScreenAddress, int nNewHeadAddress) +{ + int nOldHeadAddress; + InterlockedExchange(RWFragmentListHead[vScreenAddress], nNewHeadAddress, nOldHeadAddress); + return nOldHeadAddress; +} + +// Write fragment attributes to list location. +void WriteFragmentAttributes(int nAddress, int nPreviousLink, float4 vData, float3 vColor3, float fDepth) +{ + PPLL_STRUCT element; + element.data = PackFloat4IntoUint(vData); + element.color = PackFloat3ByteIntoUint(vColor3, RenderParamsIndex); + element.depth = asuint(saturate(fDepth)); + element.uNext = nPreviousLink; + LinkedListUAV[nAddress] = element; +} + +////////////////////////////////////////////////////////////// +// PPLL Fill PS +// First pass of PPLL implementation +// Builds up the linked list of hair fragments +[earlydepthstencil] +void PPLLFillPS(PS_INPUT_HAIR input) +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read from texture on vertex shader for base color; + //along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + // strandUV.y = (uv.y * StrandUVTilingFactor) % 1.f + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw - g_vViewport.xy); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float alpha = coverage; + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + alpha *= strandColor.w; + + // Early out + if (alpha < 1.f/255.f) + return; + + // Get the screen address + int2 vScreenAddress = int2(input.Position.xy); + + // Allocate a new fragment + int nNewFragmentAddress = AllocateFragment(vScreenAddress); + + int nOldFragmentAddress = MakeFragmentLink(vScreenAddress, nNewFragmentAddress); + WriteFragmentAttributes(nNewFragmentAddress, nOldFragmentAddress, float4(input.Tangent.xyz * 0.5 + float3(0.5, 0.5, 0.5), alpha), strandColor.xyz, input.Position.z); +} + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + return output; +} + +////////////////////////////////////////////////////////////// +// Bind data for PPLLResolvePS + +#include "TressFXLighting.hlsl" + +#define KBUFFER_SIZE 8 +#define MAX_FRAGMENTS 512 + +[[vk::binding(0, 0)]] Texture2D FragmentListHead : register(t0, space0); +[[vk::binding(1, 0)]] StructuredBuffer LinkedListNodes : register(t1, space0); + +#define NODE_DATA(x) LinkedListNodes[x].data +#define NODE_NEXT(x) LinkedListNodes[x].uNext +#define NODE_DEPTH(x) LinkedListNodes[x].depth +#define NODE_COLOR(x) LinkedListNodes[x].color + +#define GET_DEPTH_AT_INDEX(uIndex) kBuffer[uIndex].x +#define GET_DATA_AT_INDEX(uIndex) kBuffer[uIndex].y +#define GET_COLOR_AT_INDEX(uIndex) kBuffer[uIndex].z +#define STORE_DEPTH_AT_INDEX(uIndex, uValue) kBuffer[uIndex].x = uValue +#define STORE_DATA_AT_INDEX( uIndex, uValue) kBuffer[uIndex].y = uValue +#define STORE_COLOR_AT_INDEX( uIndex, uValue ) kBuffer[uIndex].z = uValue + +// If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h and ShadeParams in TressFXShortcut.hlsl +struct ShadeParams +{ + // General information + float FiberRadius; + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + // For lighting/shading + float HairEx2; + float4 MatKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2; + float fPadding0; + float fPadding1; + float fPadding2; +}; + +[[vk::binding(0, 1)]] cbuffer TressFXShadeParams : register(b0, space1) +{ + ShadeParams HairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; +}; + +float3 TressFXShading(float2 pixelCoord, float depth, float3 vTangentCoverage, float3 baseColor, int shaderParamIndex) +{ + float3 vNDC = ScreenPosToNDC(float3(pixelCoord, depth), g_vViewport); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float3 vViewDirWS = g_vEye - vPositionWS; + + // Need to expand the tangent that was compressed to store in the buffer + float3 vTangent = vTangentCoverage.xyz * 2.f - 1.f; + + HairShadeParams params; + params.Color = baseColor; + params.HairShadowAlpha = HairParams[shaderParamIndex].ShadowAlpha; + params.FiberRadius = HairParams[shaderParamIndex].FiberRadius; + params.FiberSpacing = HairParams[shaderParamIndex].FiberSpacing; + + params.Ka = HairParams[shaderParamIndex].MatKValue.x; + params.Kd = HairParams[shaderParamIndex].MatKValue.y; + params.Ks1 = HairParams[shaderParamIndex].MatKValue.z; + params.Ex1 = HairParams[shaderParamIndex].MatKValue.w; + params.Ks2 = HairParams[shaderParamIndex].HairKs2; + params.Ex2 = HairParams[shaderParamIndex].HairEx2; + + return AccumulateHairLight(vTangent, vPositionWS, vViewDirWS, params, vNDC); +} + +float4 GatherLinkedList(float2 vfScreenAddress) +{ + uint2 vScreenAddress = uint2(vfScreenAddress); + uint pointer = FragmentListHead[vScreenAddress]; + + if (pointer == FRAGMENT_LIST_NULL) + discard; + + uint4 kBuffer[KBUFFER_SIZE]; + + // Init kbuffer to large values + [unroll] + for (int t = 0; t < KBUFFER_SIZE; ++t) + { + STORE_DEPTH_AT_INDEX(t, asuint(100000.0)); + STORE_DATA_AT_INDEX(t, 0); + } + + // Get first K elements from the top (top to bottom) + // And store them in the kbuffer for later + for (int p = 0; p < KBUFFER_SIZE; ++p) + { + if (pointer != FRAGMENT_LIST_NULL) + { + STORE_DEPTH_AT_INDEX(p, NODE_DEPTH(pointer)); + STORE_DATA_AT_INDEX(p, NODE_DATA(pointer)); + STORE_COLOR_AT_INDEX(p, NODE_COLOR(pointer)); + pointer = NODE_NEXT(pointer); + } + } + + float4 fcolor = float4(0, 0, 0, 1); + + // Go through the remaining layers of hair + [allow_uav_condition] + for (int iFragment = 0; iFragment < MAX_FRAGMENTS && pointer != FRAGMENT_LIST_NULL; ++iFragment) + { + if (pointer == FRAGMENT_LIST_NULL) break; + + int id = 0; + float max_depth = 0; + + // Find the current furthest sample in the KBuffer + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (max_depth < fDepth) + { + max_depth = fDepth; + id = i; + } + } + + // Fetch the node data + uint data = NODE_DATA(pointer); + uint color = NODE_COLOR(pointer); + uint nodeDepth = NODE_DEPTH(pointer); + float fNodeDepth = asfloat(nodeDepth); + + // If the node in the linked list is nearer than the furthest one in the local array, exchange the node + // in the local array for the one in the linked list. + if (max_depth > fNodeDepth) + { + uint tmp = GET_DEPTH_AT_INDEX(id); + STORE_DEPTH_AT_INDEX(id, nodeDepth); + fNodeDepth = asfloat(tmp); + + tmp = GET_DATA_AT_INDEX(id); + STORE_DATA_AT_INDEX(id, data); + data = tmp; + + tmp = GET_COLOR_AT_INDEX(id); + STORE_COLOR_AT_INDEX(id, color); + color = tmp; + } + + // Calculate color contribution from whatever sample we are using + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; + uint shadeParamIndex; // So we know what settings to shade with + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + + // Shade the bottom hair layers (cheap shading, just uses scalp base color) + // Just blend in the color for cheap underhairs + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (vColor * alpha) * alpha; + fcolor.w *= (1.f - alpha); + + pointer = NODE_NEXT(pointer); + } + + // Make sure we are blending the correct number of strands (don't blend more than we have) + float maxAlpha = 0; + + // Blend the top-most entries + for (int j = 0; j < KBUFFER_SIZE; j++) + { + int id = 0; + float max_depth = 0; + + // find the furthest node in the array + for (int i = 0; i < KBUFFER_SIZE; i++) + { + float fDepth = asfloat(GET_DEPTH_AT_INDEX(i)); + if (max_depth < fDepth) + { + max_depth = fDepth; + id = i; + } + } + + // take this node out of the next search + uint nodeDepth = GET_DEPTH_AT_INDEX(id); + uint data = GET_DATA_AT_INDEX(id); + uint color = GET_COLOR_AT_INDEX(id); + + // take this node out of the next search + STORE_DEPTH_AT_INDEX(id, 0); + + // Use high quality shading for the nearest k fragments + float fDepth = asfloat(nodeDepth); + float4 vData = UnpackUintIntoFloat4(data); + float3 vTangent = vData.xyz; + float alpha = vData.w; + uint shadeParamIndex; // So we know what settings to shade with + float3 vColor = UnpackUintIntoFloat3Byte(color, shadeParamIndex); + float3 fragmentColor = TressFXShading(vfScreenAddress, fDepth, vTangent, vColor, shadeParamIndex); + + // Blend in the fragment color + fcolor.xyz = fcolor.xyz * (1.f - alpha) + (fragmentColor * alpha) * alpha; + fcolor.w *= (1.f - alpha); + } + + return fcolor; +} + +////////////////////////////////////////////////////////////// +// PPLL Resolve PS +// Full-screen pass that sorts through the written samples and shades the hair +[earlydepthstencil] +float4 PPLLResolvePS(VS_OUTPUT_SCREENQUAD input) : SV_Target +{ + return GatherLinkedList(input.vPosition.xy); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl new file mode 100644 index 0000000000..c28b95938f --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXRendering.hlsl @@ -0,0 +1,133 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to lighting and shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +// StartHLSL TressFXRendering +#define AMD_PI 3.1415926 +#define AMD_e 2.71828183 + +#define AMD_TRESSFX_KERNEL_SIZE 5 + +// We might break this down further. +// If you change this, you MUST also change TressFXRenderParams in TressFXConstantBuffers.h +// Binding (0-1, 0) are in TressFXStrands.hlsl +[[vk::binding(3, 0)]] cbuffer TressFXParameters : register(b3, space0) +{ + // General information + float HairFiberRadius; + + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + + // For lighting/shading + float HairKs2; + float HairEx2; + float3 fPadding0; + + float4 MatKValue; + + int MaxShadowFibers; + int3 iPadding0; +} + +// Separate strand params from pixel render params (so we can index for PPLL) +// If you change this, you MUST also change TressFXStrandParams in TressFXConstantBuffers.h +[[vk::binding(4, 0)]] cbuffer TressFXStrandParameters : register(b4, space0) +{ + float4 MatBaseColor; + float4 MatTipColor; + + float TipPercentage; + float StrandUVTilingFactor; + float FiberRatio; + float FiberRadius; + + int NumVerticesPerStrand; + int EnableThinTip; + int NodePoolSize; + int RenderParamsIndex; + + // Other params + int EnableStrandUV; + int EnableStrandTangent; + int2 iPadding1; +} + +// NOTE, we may have to split bindings to TressFXStrands and those to TressFXRendering when implementing PPLL +[[vk::binding(5, 0)]] Texture2D StrandAlbedoTexture : register(t5, space0); + +struct HairShadeParams +{ + float3 Color; + float HairShadowAlpha; + float FiberRadius; + float FiberSpacing; + float Ka; + float Kd; + float Ks1; + float Ex1; + float Ks2; + float Ex2; +}; + +//-------------------------------------------------------------------------------------- +// ComputeCoverage +// +// Calculate the pixel coverage of a hair strand by computing the hair width +//-------------------------------------------------------------------------------------- +float ComputeCoverage(float2 p0, float2 p1, float2 pixelLoc, float2 winSize) +{ + // p0, p1, pixelLoc are in d3d clip space (-1 to 1)x(-1 to 1) + + // Scale positions so 1.f = half pixel width + p0 *= winSize; + p1 *= winSize; + pixelLoc *= winSize; + + float p0dist = length(p0 - pixelLoc); + float p1dist = length(p1 - pixelLoc); + float hairWidth = length(p0 - p1); + + // will be 1.f if pixel outside hair, 0.f if pixel inside hair + float outside = any(float2(step(hairWidth, p0dist), step(hairWidth, p1dist))); + + // if outside, set sign to -1, else set sign to 1 + float sign = outside > 0.f ? -1.f : 1.f; + + // signed distance (positive if inside hair, negative if outside hair) + float relDist = sign * saturate(min(p0dist, p1dist)); + + // returns coverage based on the relative distance + // 0, if completely outside hair edge + // 1, if completely inside hair edge + return (relDist + 1.f) * 0.5f; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl new file mode 100644 index 0000000000..a2ed2413a8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSDFCollision.hlsl @@ -0,0 +1,717 @@ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +#define INITIAL_DISTANCE 1e10f +#define MARGIN g_CellSize +#define GRID_MARGIN int3(1, 1, 1) + +struct StandardVertex +{ + float4 position; + float4 normal; +}; + +[[vk::binding(3, 0)]] cbuffer ConstBuffer_SDF : register(b3, space0) +{ + //row_major float4x4 g_ModelTransformForHead; + //row_major float4x4 g_ModelInvTransformForHead; + + float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; + float g_CollisionMargin; + int g_NumHairVerticesPerStrand; + int g_NumTotalHairVertices; + float pad1; + float pad2; + float pad3; +} + +// bindsets: 0 -> GenerateSDFLayout +// 1 -> ApplySDFLayout +// 2 -> + +//Actually contains floats; make sure to use asfloat() when accessing. uint is used to allow atomics. +[[vk::binding(1, 0)]] RWStructuredBuffer g_SignedDistanceField : register(u1, space0); +[[vk::binding(0, 1)]] RWStructuredBuffer g_HairVertices : register(u0, space1); +[[vk::binding(1, 1)]] RWStructuredBuffer g_PrevHairVertices : register(u1, space1); + +//Triangle input to SDF builder +// [[vk::binding(0, 0)]] StructuredBuffer g_TrimeshVertices; +[[vk::binding(0, 0)]] StructuredBuffer g_TrimeshVertexIndices : register(t0, space0); +[[vk::binding(2, 0)]] RWStructuredBuffer collMeshVertexPositions : register(u2, space0); + +//When building the SDF we want to find the lowest distance at each SDF cell. In order to allow multiple threads to write to the same +//cells, it is necessary to use atomics. However, there is no support for atomics with 32-bit floats so we convert the float into unsigned int +//and use atomic_min() / InterlockedMin() as a workaround. +// +//When used with atomic_min, both FloatFlip2() and FloatFlip3() will store the float with the lowest magnitude. +//The difference is that FloatFlip2() will preper negative values ( InterlockedMin( FloatFlip2(1.0), FloatFlip2(-1.0) ) == -1.0 ), +//while FloatFlip3() prefers positive values ( InterlockedMin( FloatFlip3(1.0), FloatFlip3(-1.0) ) == 1.0 ). +//Using FloatFlip3() seems to result in a SDF with higher quality compared to FloatFlip2(). +uint FloatFlip2(float fl) +{ + uint f = asuint(fl); + return (f << 1) | (f >> 31 ^ 0x00000001); //Rotate sign bit to least significant and Flip sign bit so that (0 == negative) +} +uint IFloatFlip2(uint f2) +{ + return (f2 >> 1) | (f2 << 31 ^ 0x80000000); +} +uint FloatFlip3(float fl) +{ + uint f = asuint(fl); + return (f << 1) | (f >> 31); //Rotate sign bit to least significant +} +uint IFloatFlip3(uint f2) +{ + return (f2 >> 1) | (f2 << 31); +} + +// Get SDF cell index coordinates (x, y and z) from a point position in world space +int3 GetSdfCoordinates(float3 positionInWorld) +{ + float3 sdfPosition = (positionInWorld - g_Origin.xyz) / g_CellSize; + + int3 result; + result.x = (int)sdfPosition.x; + result.y = (int)sdfPosition.y; + result.z = (int)sdfPosition.z; + + return result; +} + +float3 GetSdfCellPosition(int3 gridPosition) +{ + float3 cellCenter = float3(gridPosition.x, gridPosition.y, gridPosition.z) * g_CellSize; + cellCenter += g_Origin.xyz; + + return cellCenter; +} + +int GetSdfCellIndex(int3 gridPosition) +{ + int cellsPerLine = g_NumCellsX; + int cellsPerPlane = g_NumCellsX * g_NumCellsY; + + return cellsPerPlane*gridPosition.z + cellsPerLine*gridPosition.y + gridPosition.x; +} + +float DistancePointToEdge2(float3 p, float3 x0, float3 x1, out float3 pointOnEdge) +{ + float3 x10 = x1 - x0; + + float t = dot(x1 - p, x10) / dot(x10, x10); + t = max( 0.0f, min(t, 1.0f) ); + + pointOnEdge = (t*x0 + (1.0f - t)*x1); + + float3 a = p - pointOnEdge; + float d = length(a); + float3 n = a / (d + 1e-30f); + + return d; +} + +float DistancePointToEdge(float3 p, float3 x0, float3 x1, out float3 n) +{ + float3 x10 = x1 - x0; + + float t = dot(x1 - p, x10) / dot(x10, x10); + t = max(0.0f, min(t, 1.0f)); + + float3 a = p - (t*x0 + (1.0f - t)*x1); + float d = length(a); + n = a / (d + 1e-30f); + + return d; +} + +// Check if p is in the positive or negative side of triangle (x0, x1, x2) +// Positive side is where the normal vector of triangle ( (x1-x0) x (x2-x0) ) is pointing to. +float SignedDistancePointToTriangle(float3 p, float3 x0, float3 x1, float3 x2) +{ + float d = 0; + float3 x02 = x0 - x2; + float l0 = length(x02) + 1e-30f; + x02 = x02 / l0; + float3 x12 = x1 - x2; + float l1 = dot(x12, x02); + x12 = x12 - l1*x02; + float l2 = length(x12) + 1e-30f; + x12 = x12 / l2; + float3 px2 = p - x2; + + float b = dot(x12, px2) / l2; + float a = (dot(x02, px2) - l1*b) / l0; + float c = 1 - a - b; + + // normal vector of triangle. Don't need to normalize this yet. + float3 nTri = cross((x1 - x0), (x2 - x0)); + float3 n; + + float tol = 1e-8f; + + if (a >= -tol && b >= -tol && c >= -tol) + { + n = p - (a*x0 + b*x1 + c*x2); + d = length(n); + + float3 n1 = n / d; + float3 n2 = nTri / (length(nTri) + 1e-30f); // if d == 0 + + n = (d > 0) ? n1 : n2; + } + else + { + float3 n_12; + float3 n_02; + d = DistancePointToEdge(p, x0, x1, n); + + float d12 = DistancePointToEdge(p, x1, x2, n_12); + float d02 = DistancePointToEdge(p, x0, x2, n_02); + + d = min(d, d12); + d = min(d, d02); + + n = (d == d12) ? n_12 : n; + n = (d == d02) ? n_02 : n; + } + + d = (dot(p - x0, nTri) < 0.f) ? -d : d; + + return d; +} + + +float SignedDistancePointToTriangle2(float3 p, float3 x0, float3 x1, float3 x2, + float3 vertexNormal0, float3 vertexNormal1, float3 vertexNormal2, + float3 edgeNormal01, float3 edgeNormal12, float3 edgeNormal20) +{ + float d = 0; + float3 x02 = x0 - x2; + float l0 = length(x02) + 1e-30f; + x02 = x02 / l0; + float3 x12 = x1 - x2; + float l1 = dot(x12, x02); + x12 = x12 - l1*x02; + float l2 = length(x12) + 1e-30f; + x12 = x12 / l2; + float3 px2 = p - x2; + + float b = dot(x12, px2) / l2; + float a = ( dot(x02, px2) - l1*b ) / l0; + float c = 1 - a - b; + + // normal vector of triangle. Don't need to normalize this yet. + float3 nTri = cross( (x1 - x0), (x2 - x0) ); + float3 n; + + float tol = 1e-8f; + + //Check if triangle is in the Voronoi face region + if ( a >= -tol && b >= -tol && c >= -tol ) + { + n = p - (a*x0 + b*x1 + c*x2); + d = length(n); + + float3 n1 = n / d; + float3 n2 = nTri / ( length(nTri) + 1e-30f ); // if d == 0 + + n = (d > 0) ? n1 : n2; + d = ( dot(p - x0, nTri) < 0.f ) ? -d : d; + } + else + { + //Otherwise find the nearest edge/vertex + float3 normals[6]; + normals[0] = vertexNormal0; + normals[1] = vertexNormal1; + normals[2] = vertexNormal2; + normals[3] = edgeNormal01; + normals[4] = edgeNormal12; + normals[5] = edgeNormal20; + + float3 nearestPoint[6]; + nearestPoint[0] = x0; + nearestPoint[1] = x1; + nearestPoint[2] = x2; + + float distances[6]; + distances[0] = length(p - x0); + distances[1] = length(p - x1); + distances[2] = length(p - x2); + distances[3] = DistancePointToEdge2(p, x0, x1, nearestPoint[3]); + distances[4] = DistancePointToEdge2(p, x1, x2, nearestPoint[4]); + distances[5] = DistancePointToEdge2(p, x0, x2, nearestPoint[5]); + + float minDistance = distances[0]; + for(int i = 1; i < 6; ++i) minDistance = min(minDistance, distances[i]); + + float3 pointOnPlane = nearestPoint[0]; + float3 normal = normals[0]; + + for(int j = 1; j < 6; ++j) + { + int isMin = (minDistance == distances[j]); + + pointOnPlane = (isMin) ? nearestPoint[j] : pointOnPlane; + normal = (isMin) ? normals[j] : normal; + } + + d = ( dot(p - pointOnPlane, normal) < 0.f ) ? -minDistance : minDistance; + } + + + return d; +} + +// One thread for each cell. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void InitializeSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + if(sdfCellIndex >= numSdfCells) return; + + g_SignedDistanceField[sdfCellIndex] = FloatFlip3(INITIAL_DISTANCE); +} + +int3 GetLocalCellPositionFromIndex(uint localCellIndex, int3 cellsPerDimensionLocal) +{ + uint cellsPerLine = (uint)cellsPerDimensionLocal.x; + uint cellsPerPlane = (uint)(cellsPerDimensionLocal.x * cellsPerDimensionLocal.y); + + uint numPlanesZ = localCellIndex / cellsPerPlane; + uint remainder = localCellIndex % cellsPerPlane; + + uint numLinesY = remainder / cellsPerLine; + uint numCellsX = remainder % cellsPerLine; + + return int3((int)numCellsX, (int)numLinesY, (int)numPlanesZ); +} + +// One thread per each triangle +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void ConstructSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int triangleIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + uint numTriangleIndices, stride; + g_TrimeshVertexIndices.GetDimensions(numTriangleIndices, stride); + uint numTriangles = numTriangleIndices / 3; + + if (triangleIndex >= (int)numTriangles) + return; + + uint index0 = g_TrimeshVertexIndices[triangleIndex * 3 + 0]; + uint index1 = g_TrimeshVertexIndices[triangleIndex * 3 + 1]; + uint index2 = g_TrimeshVertexIndices[triangleIndex * 3 + 2]; + + float3 tri0 = collMeshVertexPositions[index0].position; + float3 tri1 = collMeshVertexPositions[index1].position; + float3 tri2 = collMeshVertexPositions[index2].position; + + float3 aabbMin = min(tri0, min(tri1, tri2)) - float3(MARGIN, MARGIN, MARGIN); + float3 aabbMax = max(tri0, max(tri1, tri2)) + float3(MARGIN, MARGIN, MARGIN); + + int3 gridMin = GetSdfCoordinates(aabbMin) - GRID_MARGIN; + int3 gridMax = GetSdfCoordinates(aabbMax) + GRID_MARGIN; + + gridMin.x = max(0, min(gridMin.x, g_NumCellsX - 1)); + gridMin.y = max(0, min(gridMin.y, g_NumCellsY - 1)); + gridMin.z = max(0, min(gridMin.z, g_NumCellsZ - 1)); + + gridMax.x = max(0, min(gridMax.x, g_NumCellsX - 1)); + gridMax.y = max(0, min(gridMax.y, g_NumCellsY - 1)); + gridMax.z = max(0, min(gridMax.z, g_NumCellsZ - 1)); + + + + //for (int z = gridMin.z; z <= gridMax.z; ++z) + // for (int y = gridMin.y; y <= gridMax.y; ++y) + // for (int x = gridMin.x; x <= gridMax.x; ++x) + // { + // int3 gridCellCoordinate = int3(x, y, z); + + // int gridCellIndex = GetSdfCellIndex(gridCellCoordinate); + // float3 cellPosition = GetSdfCellPosition(gridCellCoordinate); + + // float distance = SignedDistancePointToTriangle(cellPosition, tri0, tri1, tri2); + // //distance -= MARGIN; + + // uint distanceAsUint = FloatFlip3(distance); + // InterlockedMin(g_SignedDistanceField[gridCellIndex], distanceAsUint); + // } + + + for (int z = gridMin.z; z <= gridMax.z; ++z) + for (int y = gridMin.y; y <= gridMax.y; ++y) + for (int x = gridMin.x; x <= gridMax.x; ++x) + { + int3 gridCellCoordinate = int3(x, y, z); + int gridCellIndex = GetSdfCellIndex(gridCellCoordinate); + float3 cellPosition = GetSdfCellPosition(gridCellCoordinate); + + float distance = SignedDistancePointToTriangle(cellPosition, tri0, tri1, tri2); + //distance -= MARGIN; + uint distanceAsUint = FloatFlip3(distance); + InterlockedMin(g_SignedDistanceField[gridCellIndex], distanceAsUint); + } +} + +// One thread per each cell. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void FinalizeSignedDistanceField(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int numSdfCells = g_NumCellsX * g_NumCellsY * g_NumCellsZ; + + int sdfCellIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + if (sdfCellIndex >= numSdfCells) return; + + uint distance = g_SignedDistanceField[sdfCellIndex]; + g_SignedDistanceField[sdfCellIndex] = IFloatFlip3(distance); +} + +float LinearInterpolate(float a, float b, float t) +{ + return a * (1.0f - t) + b * t; +} + +// bilinear interpolation +// +// p : 1-p +// c------------+----d +// | | | +// | | | +// | 1-q | | +// | | | +// | x | +// | | | +// | q | | +// a------------+----b +// p : 1-p +// +// x = BilinearInterpolate(a, b, c, d, p, q) +// = LinearInterpolate(LinearInterpolate(a, b, p), LinearInterpolate(c, d, p), q) +float BilinearInterpolate(float a, float b, float c, float d, float p, float q) +{ + return LinearInterpolate( LinearInterpolate(a, b, p), LinearInterpolate(c, d, p), q ); +} + +// trilinear interpolation +// +// c p 1-p d +// ------------------+---------- +// /| | /| +// / | / | +// / | |1-q / | +// / | / | +// / | | / | +// g ------------------+---------- h | +// | | | | | | +// | | + | | +// | | | r/| | | +// | | / |q | | +// | | | x | | | +// | a - - - - - - | / - + - |- - -| b +// | / |/1-r | / +// | + | / +// | / | | / +// | | | / +// |/ | | / +// ------------------+---------- +// e f +// +// x = TrilinearInterpolate(a, b, c, d, e, f, g, h, p, q, r) +// = LinearInterpolate(BilinearInterpolate(a, b, c, d, p, q), BilinearInterpolate(e, f, g, h, p, q), r) +float TrilinearInterpolate(float a, float b, float c, float d, float e, float f, float g, float h, float p, float q, float r) +{ + return LinearInterpolate(BilinearInterpolate(a, b, c, d, p, q), BilinearInterpolate(e, f, g, h, p, q), r); +} + +// Get signed distance at the position in world space +float GetSignedDistance(float3 positionInWorld) +{ + int3 gridCoords = GetSdfCoordinates(positionInWorld); + + if( !(0 <= gridCoords.x && gridCoords.x < g_NumCellsX - 2) + || !(0 <= gridCoords.y && gridCoords.y < g_NumCellsY - 2) + || !(0 <= gridCoords.z && gridCoords.z < g_NumCellsZ - 2) ) + return INITIAL_DISTANCE; + + int sdfIndices[8]; + { + int index = GetSdfCellIndex(gridCoords); + for(int i = 0; i < 8; ++i) sdfIndices[i] = index; + + int x = 1; + int y = g_NumCellsX; + int z = g_NumCellsY * g_NumCellsX; + + sdfIndices[1] += x; + sdfIndices[2] += y; + sdfIndices[3] += y + x; + + sdfIndices[4] += z; + sdfIndices[5] += z + x; + sdfIndices[6] += z + y; + sdfIndices[7] += z + y + x; + } + + float distances[8]; + + for(int j = 0; j < 8; ++j) + { + int sdfCellIndex = sdfIndices[j]; + float dist = asfloat(g_SignedDistanceField[sdfCellIndex]); + + if(dist == INITIAL_DISTANCE) + return INITIAL_DISTANCE; + + distances[j] = dist; + } + + float distance_000 = distances[0]; // X, Y, Z + float distance_100 = distances[1]; //+X, Y, Z + float distance_010 = distances[2]; // X, +Y, Z + float distance_110 = distances[3]; //+X, +Y, Z + float distance_001 = distances[4]; // X, Y, +Z + float distance_101 = distances[5]; //+X, Y, +Z + float distance_011 = distances[6]; // X, +Y, +Z + float distance_111 = distances[7]; //+X, +Y, +Z + + float3 cellPosition = GetSdfCellPosition(gridCoords); + float3 interp = (positionInWorld - cellPosition) / g_CellSize; + return TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z); +} + +//SDF-Hair collision using forward differences only +// One thread per one hair vertex +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CollideHairVerticesWithSdf_forward(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + int hairVertexGlobalIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + if(hairVertexGlobalIndex >= g_NumTotalHairVertices) + return; + + int hairVertexLocalIndex = hairVertexGlobalIndex % g_NumHairVerticesPerStrand; + + // We don't run collision check on the first two vertices in the strand. They are fixed on the skin mesh. + if (hairVertexLocalIndex == 0 || hairVertexLocalIndex == 1) + return; + + float4 hairVertex = g_HairVertices[hairVertexGlobalIndex]; + float4 vertexInSdfLocalSpace = hairVertex; + + float distance = GetSignedDistance(vertexInSdfLocalSpace.xyz); + + // early exit if the distance is larger than collision margin + if(distance > g_CollisionMargin) + return; + + // small displacement. + float h = 0.1f * g_CellSize; + + float3 sdfGradient; + { + //Compute gradient using forward difference + float3 offset[3]; + offset[0] = float3(1, 0, 0); + offset[1] = float3(0, 1, 0); + offset[2] = float3(0, 0, 1); + + float3 neighborCellPositions[3]; + + for(int i = 0; i < 3; ++i) + neighborCellPositions[i] = vertexInSdfLocalSpace.xyz + offset[i] * h; + + //Use trilinear interpolation to get distances + float neighborCellDistances[3]; + + for(int j = 0; j < 3; ++j) + neighborCellDistances[j] = GetSignedDistance(neighborCellPositions[j]); + + float3 forwardDistances; + forwardDistances.x = neighborCellDistances[0]; + forwardDistances.y = neighborCellDistances[1]; + forwardDistances.z = neighborCellDistances[2]; + + sdfGradient = ( forwardDistances - float3(distance, distance, distance) ) / h; + } + + //Project hair vertex out of SDF + float3 normal = normalize(sdfGradient); + + if(distance < g_CollisionMargin) + { + float3 projectedVertex = hairVertex.xyz + normal * (g_CollisionMargin - distance); + g_HairVertices[hairVertexGlobalIndex].xyz = projectedVertex; + g_PrevHairVertices[hairVertexGlobalIndex].xyz = projectedVertex; + } +} + +//Faster SDF-Hair collision mixing forward and backward differences +// One thread per one hair vertex +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CollideHairVerticesWithSdf(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + //When using forward differences to compute the SDF gradient, + //we need to use trilinear interpolation to look up 4 points in the SDF. + //In the worst case, this involves reading the distances in 4 different cubes (reading 32 floats from the SDF). + //In the ideal case, only 1 cube needs to be read (reading 8 floats from the SDF). + //The number of distance lookups varies depending on whether the 4 points cross cell boundaries. + // + //If we assume that (h < g_CellSize), where h is the distance between the points used for finite difference, + //we can mix forwards and backwards differences to ensure that the points never cross cell boundaries (always read 8 floats). + //By default we use forward differences, and switch to backwards differences for each dimension that crosses a cell boundary. + // + //This is much faster than using forward differences only, but it could also be less stable. + //In particular, it has the effect of making the gradient less accurate. The amount of inaccuracy is + //proportional to the size of h, so it is recommended keep h as low as possible. + + int hairVertexIndex = GId.x * THREAD_GROUP_SIZE + GIndex; + + uint numHairVertices, stride; + g_HairVertices.GetDimensions(numHairVertices, stride); + + if(hairVertexIndex >= (int)numHairVertices) + return; + + float4 hairVertex = g_HairVertices[hairVertexIndex]; + float4 vertexInSdfLocalSpace = hairVertex; + + int3 gridCoords = GetSdfCoordinates(vertexInSdfLocalSpace.xyz); + + if( !(0 <= gridCoords.x && gridCoords.x < g_NumCellsX - 2) + || !(0 <= gridCoords.y && gridCoords.y < g_NumCellsY - 2) + || !(0 <= gridCoords.z && gridCoords.z < g_NumCellsZ - 2) ) + return; + + // + float distances[8]; + { + int sdfIndices[8]; + { + int index = GetSdfCellIndex(gridCoords); + for(int i = 0; i < 8; ++i) sdfIndices[i] = index; + + int x = 1; + int y = g_NumCellsX; + int z = g_NumCellsY * g_NumCellsX; + + sdfIndices[1] += x; + sdfIndices[2] += y; + sdfIndices[3] += y + x; + + sdfIndices[4] += z; + sdfIndices[5] += z + x; + sdfIndices[6] += z + y; + sdfIndices[7] += z + y + x; + } + + for(int j = 0; j < 8; ++j) + { + int sdfCellIndex = sdfIndices[j]; + float dist = asfloat(g_SignedDistanceField[sdfCellIndex]); + if(dist == INITIAL_DISTANCE) return; + + distances[j] = dist; + } + } + + float distance_000 = distances[0]; // X, Y, Z + float distance_100 = distances[1]; //+X, Y, Z + float distance_010 = distances[2]; // X, +Y, Z + float distance_110 = distances[3]; //+X, +Y, Z + float distance_001 = distances[4]; // X, Y, +Z + float distance_101 = distances[5]; //+X, Y, +Z + float distance_011 = distances[6]; // X, +Y, +Z + float distance_111 = distances[7]; //+X, +Y, +Z + + float3 cellPosition = GetSdfCellPosition(gridCoords); + float3 interp = (vertexInSdfLocalSpace.xyz - cellPosition) / g_CellSize; + float distanceAtVertex = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z); + + //Compute gradient with finite differences + float3 sdfGradient; + { + float h = 0.1f * g_CellSize; + float3 direction; + direction.x = (interp.x + h < 1.0f) ? 1.0f : -1.0f; + direction.y = (interp.y + h < 1.0f) ? 1.0f : -1.0f; + direction.z = (interp.z + h < 1.0f) ? 1.0f : -1.0f; + + float3 neighborDistances; + neighborDistances.x = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x + h * direction.x, interp.y, interp.z); + neighborDistances.y = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y + h * direction.y, interp.z); + neighborDistances.z = TrilinearInterpolate(distance_000, distance_100, distance_010, distance_110, + distance_001, distance_101, distance_011, distance_111, + interp.x, interp.y, interp.z + h * direction.z); + + sdfGradient = ( direction * ( neighborDistances - float3(distanceAtVertex, distanceAtVertex, distanceAtVertex) ) ) / h; + } + + //Project hair vertex out of SDF + float3 normal = normalize(sdfGradient); + + if(distanceAtVertex < g_CollisionMargin) + { + float3 projectedVertex = hairVertex.xyz + normal * (g_CollisionMargin - distanceAtVertex); + g_HairVertices[hairVertexIndex].xyz = projectedVertex; + g_PrevHairVertices[hairVertexIndex].xyz = projectedVertex; + } +} + +// EndHLSL diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl new file mode 100644 index 0000000000..650db2ae72 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShadow.hlsl @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to shadowing for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +[[vk::binding(0, 2)]] cbuffer shadowViewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS (for depth alpha and color fill passes) +PS_INPUT_HAIR HairShadowVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXShadowVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + return Output; +} + +[earlydepthstencil] +void HairShadowPS(PS_INPUT_HAIR input) : SV_Target +{ +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl new file mode 100644 index 0000000000..9a3f30b0c0 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXShortCut.hlsl @@ -0,0 +1,281 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to TressFX Shortcut method +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXRendering.hlsl" +#include "TressFXStrands.hlsl" + +[[vk::binding(0, 2)]] cbuffer viewConstants : register(b0, space2) +{ + float4x4 g_mVP; + float4 g_vEye; + float4 g_vViewport; + float4x4 cInvViewProjMatrix; +}; + +// Hair input structure to Pixel shaders +struct PS_INPUT_HAIR +{ + float4 Position : SV_POSITION; + float4 Tangent : Tangent; + float4 p0p1 : TEXCOORD0; + float4 StrandColor : TEXCOORD1; +}; + +////////////////////////////////////////////////////////////// +// Hair Render VS (for depth alpha and color fill passes) +PS_INPUT_HAIR RenderHairDepthAlphaVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = float4(1, 1, 1, tressfxVert.Tangent.w); // Only need to preserve the Strand U coordinate as the tangent is not used in this pass. Operations should be compiled out + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = float4(1, 1, 1, tressfxVert.StrandColor.a); // Don't use the color as it's not needed. This way we can compile out the computation of strand color (Just need the Strand V coordinate) + + return Output; +} + +PS_INPUT_HAIR RenderHairColorVS(uint vertexId : SV_VertexID) +{ + TressFXVertex tressfxVert = GetExpandedTressFXVert(vertexId, g_vEye, g_vViewport.zw, g_mVP); + + PS_INPUT_HAIR Output; + + Output.Position = tressfxVert.Position; + Output.Tangent = tressfxVert.Tangent; + Output.p0p1 = tressfxVert.p0p1; + Output.StrandColor = tressfxVert.StrandColor; + + return Output; +} + +[[vk::binding(0, 3)]] RWTexture2DArray RWFragmentDepthsTexture : register(u0, space3); + +////////////////////////////////////////////////////////////// +// Depth Alpha PS +// First pass of ShortCut. +// Geometry pass that stores the 3 front fragment depths, and accumulates product of 1-alpha values in the render target. +[earlydepthstencil] +float DepthsAlphaPS(PS_INPUT_HAIR input) : SV_Target +{ + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw); + float alpha = coverage * MatBaseColor.a; + + if (alpha < SHORTCUT_MIN_ALPHA) + return 1.0; + + int2 vScreenAddress = int2(input.Position.xy); + + uint uDepth = asuint(input.Position.z); + uint uDepth0Prev, uDepth1Prev; + + // Min of depth 0 and input depth + // Original value is uDepth0Prev + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 0)], uDepth, uDepth0Prev); + + // Min of depth 1 and greater of the last compare + // If fragment opaque, always use input depth (don't need greater depths) + uDepth = (alpha > 0.98) ? uDepth : max(uDepth, uDepth0Prev); + + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 1)], uDepth, uDepth1Prev); + + uint uDepth2Prev; + + // Min of depth 2 and greater of the last compare + // If fragment opaque, always use input depth (don't need greater depths) + uDepth = (alpha > 0.98) ? uDepth : max(uDepth, uDepth1Prev); + + InterlockedMin(RWFragmentDepthsTexture[uint3(vScreenAddress, 2)], uDepth, uDepth2Prev); + + return 1.0 - alpha; +} + +////////////////////////////////////////////////////////////// +// Fullscreen Quad VS +struct VS_OUTPUT_SCREENQUAD +{ + float4 vPosition : SV_POSITION; + float2 vTex : TEXCOORD; +}; + +static const float2 Positions[] = { {-1, -1,}, {1, -1}, {-1, 1}, {1, 1} }; + +VS_OUTPUT_SCREENQUAD FullScreenVS(uint vertexID : SV_VertexID) +{ + VS_OUTPUT_SCREENQUAD output; + + // Output vert positions + output.vPosition = float4(Positions[vertexID].xy, 0, 1); + + // And tex-coords +#ifdef AMD_TRESSFX_DX12 + output.vTex = float2(Positions[vertexID].x, Positions[vertexID].y) * 0.5 + 0.5; +#else + output.vTex = float2(Positions[vertexID].x, -Positions[vertexID].y) * 0.5 + 0.5; +#endif // AMD_TRESSFX_DX12 + + return output; +} + +////////////////////////////////////////////////////////////// +// Resolve Depth PS +[[vk::binding(0, 0)]] Texture2DArray FragmentDepthsTexture : register(t0, space0); + +// Second pass of ShortCut. +// Full-screen pass that writes the farthest of the near depths for depth culling. +float ResolveDepthPS(VS_OUTPUT_SCREENQUAD input) : SV_Depth +{ + // Blend the layers of fragments from back to front + int2 vScreenAddress = int2(input.vPosition.xy); + + // Write farthest depth value for culling in the next pass. + // It may be the initial value of 1.0 if there were not enough fragments to write all depths, but then culling not important. + uint uDepth = FragmentDepthsTexture[uint3(vScreenAddress, 2)]; + + return asfloat(uDepth); +} + +////////////////////////////////////////////////////////////// +// HairColorPS + +#include "TressFXLighting.hlsl" + +// If you change this, you MUST also change TressFXShadeParams in TressFXConstantBuffers.h and ShadeParams in TressFXPPLL.hlsl +struct ShadeParams +{ + // General information + float FiberRadius; + // For deep approximated shadow lookup + float ShadowAlpha; + float FiberSpacing; + // For lighting/shading + float HairEx2; + float4 MatKValue; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2; + float fPadding0; + float fPadding1; + float fPadding2; +}; + +[[vk::binding(0, 5)]] cbuffer TressFXShadeParams : register(b0, space5) +{ + ShadeParams HairParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; +}; + +float3 TressFXShading(float3 WorldPos, float3 vNDC, float3 vTangentCoverage, float2 uv, float2 strandUV, float3 baseColor, PS_INPUT_HAIR input) +{ + float3 vTangent = vTangentCoverage.xyz; + float3 vPositionWS = WorldPos.xyz; + float3 vViewDirWS = g_vEye - vPositionWS; + + HairShadeParams params; + params.Color = baseColor; + params.HairShadowAlpha = HairParams[RenderParamsIndex].ShadowAlpha; + params.FiberRadius = HairParams[RenderParamsIndex].FiberRadius; + params.FiberSpacing = HairParams[RenderParamsIndex].FiberSpacing; + + params.Ka = HairParams[RenderParamsIndex].MatKValue.x; + params.Kd = HairParams[RenderParamsIndex].MatKValue.y; + params.Ks1 = HairParams[RenderParamsIndex].MatKValue.z; + params.Ex1 = HairParams[RenderParamsIndex].MatKValue.w; + params.Ks2 = HairParams[RenderParamsIndex].HairKs2; + params.Ex2 = HairParams[RenderParamsIndex].HairEx2; + + return AccumulateHairLight(vTangent, vPositionWS, vViewDirWS, params, vNDC); +} + +// Third pass of ShortCut. +// Geometry pass that shades pixels passing early depth test. Limited to near fragments due to previous depth write pass. +// Colors are accumulated in render target for a weighted average in final pass. +[earlydepthstencil] +float4 HairColorPS(PS_INPUT_HAIR input) : SV_Target +{ + // Strand Color read in is either the BaseMatColor, or BaseMatColor modulated with a color read from texture on vertex shader for base color; + //along with modulation by the tip color + float4 strandColor = float4(input.StrandColor.rgb, MatBaseColor.a); + + // Grab the uv in case we need it + float2 uv = float2(input.Tangent.w, input.StrandColor.w); + + // Apply StrandUVTiling + // strandUV.y = (uv.y * StrandUVTilingFactor) % 1.f + float2 strandUV = float2(uv.x, (uv.y * StrandUVTilingFactor) - floor(uv.y * StrandUVTilingFactor)); + + // If we are supporting strand UV texturing, further blend in the texture color/alpha + // Do this while computing NDC and coverage to hide latency from texture lookup + if (EnableStrandUV) + strandColor.rgb *= StrandAlbedoTexture.Sample(LinearWrapSampler, strandUV).rgb; + + float3 vNDC = ScreenPosToNDC(input.Position.xyz, g_vViewport); + float coverage = ComputeCoverage(input.p0p1.xy, input.p0p1.zw, vNDC.xy, g_vViewport.zw - g_vViewport.xy); + float3 vPositionWS = NDCToWorld(vNDC, cInvViewProjMatrix); + float alpha = coverage; + + // Update the alpha to have proper value (accounting for coverage, base alpha, and strand alpha) + alpha *= strandColor.w; + +#ifndef TRESSFX_DEBUG_UAV + + // Early out + if (alpha < SHORTCUT_MIN_ALPHA) + return float4(0, 0, 0, 0); + +#endif // TRESSFX_DEBUG_UAV + + float3 color = TressFXShading(vPositionWS, vNDC, input.Tangent.xyz, uv, strandUV, strandColor.rgb, input); + return float4(color * alpha, alpha); +} + +[[vk::binding(0, 0)]] Texture2D HaiColorTexture : register(t0, space0); +[[vk::binding(1, 0)]] Texture2D AccumInvAlpha : register(t1, space0); + +// Fourth pass of ShortCut. +// Full-screen pass that finalizes the weighted average, and blends using the accumulated 1-alpha product. +[earlydepthstencil] +float4 ResolveHairPS(VS_OUTPUT_SCREENQUAD input) : SV_Target +{ + int2 vScreenAddress = int2(input.vPosition.xy); + + float fInvAlpha = AccumInvAlpha[vScreenAddress]; + float fAlpha = 1.0 - fInvAlpha; + + if (fAlpha < SHORTCUT_MIN_ALPHA) + return float4(0, 0, 0, 1); + + float4 fcolor; + float colorSumX = HaiColorTexture[vScreenAddress].x; + float colorSumY = HaiColorTexture[vScreenAddress].y; + float colorSumZ = HaiColorTexture[vScreenAddress].z; + float colorSumW = HaiColorTexture[vScreenAddress].w; + fcolor.x = colorSumX / colorSumW; + fcolor.y = colorSumY / colorSumW; + fcolor.z = colorSumZ / colorSumW; + fcolor.xyz *= fAlpha; + fcolor.w = fInvAlpha; + return fcolor; +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl new file mode 100644 index 0000000000..b45a20d622 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXSimulation.hlsl @@ -0,0 +1,1199 @@ + +//--------------------------------------------------------------------------------------- +// Shader code related to simulating hair strands in compute. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +// This is code decoration for our sample. +// Remove this and the EndHLSL at the end of this file +// to turn this into valid HLSL + +// StartHLSL TressFXSimulationCS + +//-------------------------------------------------------------------------------------- +// File: TresFXSimulation.hlsl +// +// Physics simulation of hair using compute shaders +//-------------------------------------------------------------------------------------- + +#define USE_MESH_BASED_HAIR_TRANSFORM 0 + +// Whether bones are specified by dual quaternion. +// This option is not currently functional. +#define TRESSFX_DQ 0 + +// Toggle capsule collisions +#define TRESSFX_COLLISION_CAPSULES 0 + +//constants that change frame to frame +[[vk::binding(13, 0)]] cbuffer tressfxSimParameters : register( b13, space0 ) +{ + float4 g_Wind; + float4 g_Wind1; + float4 g_Wind2; + float4 g_Wind3; + + float4 g_Shape; // damping, local stiffness, global stiffness, global range. + float4 g_GravTimeTip; // gravity maginitude (assumed to be in negative y direction.) + int4 g_SimInts; // Length iterations, local iterations, collision flag. + int4 g_Counts; // num strands per thread group, num follow hairs per guid hair, num verts per strand. + float4 g_VSP; // VSP parmeters + + float g_ResetPositions; + float g_ClampPositionDelta; + float g_pad1; + float g_pad2; + +#if TRESSFX_DQ + float4 g_BoneSkinningDQ[AMD_TRESSFX_MAX_NUM_BONES * 2]; +#else + row_major float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +#endif + +#if TRESSFX_COLLISION_CAPSULES + float4 g_centerAndRadius0[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 g_centerAndRadius1[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + int4 g_numCollisionCapsules; +#endif + +} + +#define g_NumOfStrandsPerThreadGroup g_Counts.x +#define g_NumFollowHairsPerGuideHair g_Counts.y +#define g_NumVerticesPerStrand g_Counts.z + +#define g_NumLocalShapeMatchingIterations g_SimInts.y + +#define g_GravityMagnitude g_GravTimeTip.x +#define g_TimeStep g_GravTimeTip.y +#define g_TipSeparationFactor g_GravTimeTip.z + + +// We no longer support groups (indirection). +int GetStrandType(int globalThreadIndex) +{ + return 0; +} + +float GetDamping(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.x; +} + +float GetLocalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.y; +} + +float GetGlobalStiffness(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.z; +} + +float GetGlobalRange(int strandType) +{ + // strand type unused. + // In the future, we may create an array and use indirection. + return g_Shape.w; +} + +float GetVelocityShockPropogation() +{ + return g_VSP.x; +} + +float GetVSPAccelThreshold() +{ + return g_VSP.y; +} + +int GetLocalConstraintIterations() +{ + return (int)g_SimInts.y; +} + +int GetLengthConstraintIterations() +{ + return (int)g_SimInts.x; +} + +struct Transforms +{ + row_major float4x4 tfm; + float4 quat; +}; + +struct HairToTriangleMapping +{ + uint meshIndex; // index to the mesh + uint triangleIndex; // index to triangle in the skinned mesh that contains this hair + float3 barycentricCoord; // barycentric coordinate of the hair within the triangle + uint reserved; // for future use +}; + +struct BoneSkinningData +{ + float4 boneIndex; // x, y, z and w component are four bone indices per strand + float4 boneWeight; // x, y, z and w component are four bone weights per strand +}; + +struct StrandLevelData +{ + float4 skinningQuat; + float4 vspQuat; + float4 vspTranslation; +}; + +// UAVs +[[vk::binding(0, 1)]] RWStructuredBuffer g_HairVertexPositions : register(u0, space1); +[[vk::binding(1, 1)]] RWStructuredBuffer g_HairVertexPositionsPrev : register(u1, space1); +[[vk::binding(2, 1)]] RWStructuredBuffer g_HairVertexPositionsPrevPrev : register(u2, space1); +[[vk::binding(3, 1)]] RWStructuredBuffer g_HairVertexTangents : register(u3, space1); +[[vk::binding(4, 1)]] RWStructuredBuffer g_StrandLevelData : register(u4, space1); + +#if USE_MESH_BASED_HAIR_TRANSFORM == 1 +RWStructuredBuffer g_Transforms; +#endif + +// SRVs +[[vk::binding(4, 0)]] StructuredBuffer g_InitialHairPositions : register(t4, space0); +[[vk::binding(5, 0)]] StructuredBuffer g_HairRestLengthSRV : register(t5, space0); +[[vk::binding(6, 0)]] StructuredBuffer g_HairStrandType : register(t6, space0); +[[vk::binding(7, 0)]] StructuredBuffer g_FollowHairRootOffset : register(t7, space0); +[[vk::binding(10, 0)]] StructuredBuffer g_MeshVertices : register(t10, space0); +[[vk::binding(11, 0)]] StructuredBuffer g_TransformedVerts : register(t11, space0); +[[vk::binding(12, 0)]] StructuredBuffer g_BoneSkinningData : register(t12, space0); + +// If you change the value below, you must change it in TressFXAsset.h as well. +#ifndef THREAD_GROUP_SIZE +#define THREAD_GROUP_SIZE 64 +#endif + +groupshared float4 sharedPos[THREAD_GROUP_SIZE]; +groupshared float4 sharedTangent[THREAD_GROUP_SIZE]; +groupshared float sharedLength[THREAD_GROUP_SIZE]; + +//-------------------------------------------------------------------------------------- +// +// Helper Functions for the main simulation shaders +// +//-------------------------------------------------------------------------------------- +bool IsMovable(float4 particle) +{ + if ( particle.w > 0 ) + return true; + return false; +} + +float2 ConstraintMultiplier(float4 particle0, float4 particle1) +{ + if (IsMovable(particle0)) + { + if (IsMovable(particle1)) + return float2(0.5, 0.5); + else + return float2(1, 0); + } + else + { + if (IsMovable(particle1)) + return float2(0, 1); + else + return float2(0, 0); + } +} + +float4 MakeQuaternion(float angle_radian, float3 axis) +{ + // create quaternion using angle and rotation axis + float4 quaternion; + float halfAngle = 0.5f * angle_radian; + float sinHalf = sin(halfAngle); + + quaternion.w = cos(halfAngle); + quaternion.xyz = sinHalf * axis.xyz; + + return quaternion; +} + +// Makes a quaternion from a 4x4 column major rigid transform matrix. Rigid transform means that rotational 3x3 sub matrix is orthonormal. +// Note that this function does not check the orthonormality. +float4 MakeQuaternion(column_major float4x4 m) +{ + float4 q; + float trace = m[0][0] + m[1][1] + m[2][2]; + + if (trace > 0.0f) + { + float r = sqrt(trace + 1.0f); + q.w = 0.5 * r; + r = 0.5 / r; + q.x = (m[1][2] - m[2][1])*r; + q.y = (m[2][0] - m[0][2])*r; + q.z = (m[0][1] - m[1][0])*r; + } + else + { + int i = 0, j = 1, k = 2; + + if (m[1][1] > m[0][0]) + { + i = 1; j = 2; k = 0; + } + if (m[2][2] > m[i][i]) + { + i = 2; j = 0; k = 1; + } + + float r = sqrt(m[i][i] - m[j][j] - m[k][k] + 1.0f); + + float qq[4]; + + qq[i] = 0.5f * r; + r = 0.5f / r; + q.w = (m[j][k] - m[k][j])*r; + qq[j] = (m[j][i] + m[i][j])*r; + qq[k] = (m[k][i] + m[i][k])*r; + + q.x = qq[0]; q.y = qq[1]; q.z = qq[2]; + } + + return q; +} + +float4 InverseQuaternion(float4 q) +{ + float lengthSqr = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if ( lengthSqr < 0.001 ) + return float4(0, 0, 0, 1.0f); + + q.x = -q.x / lengthSqr; + q.y = -q.y / lengthSqr; + q.z = -q.z / lengthSqr; + q.w = q.w / lengthSqr; + + return q; +} + +float3 MultQuaternionAndVector(float4 q, float3 v) +{ + float3 uv, uuv; + float3 qvec = float3(q.x, q.y, q.z); + uv = cross(qvec, v); + uuv = cross(qvec, uv); + uv *= (2.0f * q.w); + uuv *= 2.0f; + + return v + uv + uuv; +} + +float4 MultQuaternionAndQuaternion(float4 qA, float4 qB) +{ + float4 q; + + q.w = qA.w * qB.w - qA.x * qB.x - qA.y * qB.y - qA.z * qB.z; + q.x = qA.w * qB.x + qA.x * qB.w + qA.y * qB.z - qA.z * qB.y; + q.y = qA.w * qB.y + qA.y * qB.w + qA.z * qB.x - qA.x * qB.z; + q.z = qA.w * qB.z + qA.z * qB.w + qA.x * qB.y - qA.y * qB.x; + + return q; +} + +float4 NormalizeQuaternion(float4 q) +{ + float4 qq = q; + float n = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if (n < 1e-10f) + { + qq.w = 1; + return qq; + } + + qq *= 1.0f / sqrt(n); + return qq; +} + +// Compute a quaternion which rotates u to v. u and v must be unit vector. +float4 QuatFromTwoUnitVectors(float3 u, float3 v) +{ + float r = 1.f + dot(u, v); + float3 n; + + // if u and v are parallel + if (r < 1e-7) + { + r = 0.0f; + n = abs(u.x) > abs(u.z) ? float3(-u.y, u.x, 0.f) : float3(0.f, -u.z, u.y); + } + else + { + n = cross(u, v); + } + + float4 q = float4(n.x, n.y, n.z, r); + return NormalizeQuaternion(q); +} + +// Make the inpute 4x4 matrix be identity +float4x4 MakeIdentity() +{ + float4x4 m; + m._m00 = 1; m._m01 = 0; m._m02 = 0; m._m03 = 0; + m._m10 = 0; m._m11 = 1; m._m12 = 0; m._m13 = 0; + m._m20 = 0; m._m21 = 0; m._m22 = 1; m._m23 = 0; + m._m30 = 0; m._m31 = 0; m._m32 = 0; m._m33 = 1; + + return m; +} + +void ApplyDistanceConstraint(inout float4 pos0, inout float4 pos1, float targetDistance, float stiffness = 1.0) +{ + float3 delta = pos1.xyz - pos0.xyz; + float distance = max(length(delta), 1e-7); + float stretching = 1 - targetDistance / distance; + delta = stretching * delta; + float2 multiplier = ConstraintMultiplier(pos0, pos1); + + pos0.xyz += multiplier[0] * delta * stiffness; + pos1.xyz -= multiplier[1] * delta * stiffness; +} + +void CalcIndicesInVertexLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInVertexLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint localStrandIndex, inout uint globalVertexIndex, inout uint localVertexIndex, inout uint numVerticesInTheStrand, inout uint indexForSharedMem, inout uint strandType) +{ + indexForSharedMem = local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + + localStrandIndex = local_id % g_NumOfStrandsPerThreadGroup; + globalStrandIndex = group_id * g_NumOfStrandsPerThreadGroup + localStrandIndex; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + localVertexIndex = (local_id - localStrandIndex) / g_NumOfStrandsPerThreadGroup; + + strandType = GetStrandType(globalStrandIndex); + globalVertexIndex = globalStrandIndex * numVerticesInTheStrand + localVertexIndex; +} + +void CalcIndicesInStrandLevelTotal(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +void CalcIndicesInStrandLevelMaster(uint local_id, uint group_id, inout uint globalStrandIndex, inout uint numVerticesInTheStrand, inout uint globalRootVertexIndex, inout uint strandType) +{ + globalStrandIndex = THREAD_GROUP_SIZE*group_id + local_id; + globalStrandIndex *= (g_NumFollowHairsPerGuideHair+1); + numVerticesInTheStrand = (THREAD_GROUP_SIZE / g_NumOfStrandsPerThreadGroup); + strandType = GetStrandType(globalStrandIndex); + globalRootVertexIndex = globalStrandIndex * numVerticesInTheStrand; +} + +//-------------------------------------------------------------------------------------- +// +// Integrate +// +// Uses Verlet integration to calculate the new position for the current time step +// +//-------------------------------------------------------------------------------------- +float3 Integrate(float3 curPosition, float3 oldPosition, float3 initialPos, float dampingCoeff = 1.0f) +{ + float3 force = g_GravityMagnitude * float3(0, -1.0f, 0); + // float decay = exp(-g_TimeStep/decayTime) + float decay = exp(-dampingCoeff * g_TimeStep * 60.0f); + return curPosition + decay * (curPosition - oldPosition) + force * g_TimeStep * g_TimeStep; +} + + +struct CollisionCapsule +{ + float4 p0; // xyz = position of capsule 0, w = radius 0 + float4 p1; // xyz = position of capsule 1, w = radius 1 +}; + +//-------------------------------------------------------------------------------------- +// +// CapsuleCollision +// +// Moves the position based on collision with capsule +// +//-------------------------------------------------------------------------------------- +bool CapsuleCollision(float4 curPosition, float4 oldPosition, inout float3 newPosition, CollisionCapsule cc, float friction = 0.4f) +{ + const float radius0 = cc.p0.w; + const float radius1 = cc.p1.w; + newPosition = curPosition.xyz; + + if ( !IsMovable(curPosition) ) + return false; + + float3 segment = cc.p1.xyz - cc.p0.xyz; + float3 delta0 = curPosition.xyz - cc.p0.xyz; + float3 delta1 = cc.p1.xyz - curPosition.xyz; + + float dist0 = dot(delta0, segment); + float dist1 = dot(delta1, segment); + + // colliding with sphere 1 + if (dist0 < 0.f ) + { + if ( dot(delta0, delta0) < radius0 * radius0) + { + float3 n = normalize(delta0); + newPosition = radius0 * n + cc.p0.xyz; + return true; + } + + return false; + } + + // colliding with sphere 2 + if (dist1 < 0.f ) + { + if ( dot(delta1, delta1) < radius1 * radius1) + { + float3 n = normalize(-delta1); + newPosition = radius1 * n + cc.p1.xyz; + return true; + } + + return false; + } + + // colliding with middle cylinder + float3 x = (dist0 * cc.p1.xyz + dist1 * cc.p0.xyz) / (dist0 + dist1); + float3 delta = curPosition.xyz - x; + + float radius_at_x = (dist0 * radius1 + dist1 * radius0) / (dist0 + dist1); + + if ( dot(delta, delta) < radius_at_x * radius_at_x) + { + float3 n = normalize(delta); + float3 vec = curPosition.xyz - oldPosition.xyz; + float3 segN = normalize(segment); + float3 vecTangent = dot(vec, segN) * segN; + float3 vecNormal = vec - vecTangent; + newPosition = oldPosition.xyz + friction * vecTangent + (vecNormal + radius_at_x * n - delta); + return true; + } + + return false; +} + +float3 ApplyVertexBoneSkinning(float3 vertexPos, BoneSkinningData skinningData, inout float4 bone_quat) +{ + float3 newVertexPos; + +#if TRESSFX_DQ + { + // weighted rotation part of dual quaternion + float4 nq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2] * skinningData.boneWeight.x + g_BoneSkinningDQ[skinningData.boneIndex.y * 2] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2] * skinningData.boneWeight.z + g_BoneSkinningDQ[skinningData.boneIndex.w * 2] * skinningData.boneWeight.w; + + // weighted tranlation part of dual quaternion + float4 dq = g_BoneSkinningDQ[skinningData.boneIndex.x * 2 + 1] * skinningData.boneWeight.x + g_BoneSkinningDQ[skinningData.boneIndex.y * 2 + 1] * skinningData.boneWeight.y + + g_BoneSkinningDQ[skinningData.boneIndex.z * 2 + 1] * skinningData.boneWeight.z + g_BoneSkinningDQ[skinningData.boneIndex.w * 2 + 1] * skinningData.boneWeight.w; + + float len = rsqrt(dot(nq, nq)); + nq *= len; + dq *= len; + + bone_quat = nq; + + //convert translation part of dual quaternion to translation vector: + float3 translation = (nq.w*dq.xyz - dq.w*nq.xyz + cross(nq.xyz, dq.xyz)) * 2; + + newVertexPos = MultQuaternionAndVector(nq, vertexPos) + translation.xyz; + } +#else + { + // Interpolate world space bone matrices using weights. + row_major float4x4 bone_matrix = g_BoneSkinningMatrix[skinningData.boneIndex[0]] * skinningData.boneWeight[0]; + float weight_sum = skinningData.boneWeight[0]; + + for (int i = 1; i < 4; i++) + { + if (skinningData.boneWeight[i] > 0) + { + bone_matrix += g_BoneSkinningMatrix[skinningData.boneIndex[i]] * skinningData.boneWeight[i]; + weight_sum += skinningData.boneWeight[i]; + } + } + + bone_matrix /= weight_sum; + bone_quat = MakeQuaternion(bone_matrix); + + newVertexPos = mul(float4(vertexPos, 1), bone_matrix).xyz; + } +#endif + + return newVertexPos; +} + +//-------------------------------------------------------------------------------------- +// +// UpdateFinalVertexPositions +// +// Updates the hair vertex positions based on the physics simulation +// +//-------------------------------------------------------------------------------------- +void UpdateFinalVertexPositions(float4 oldPosition, float4 newPosition, int globalVertexIndex, int localVertexIndex, int numVerticesInTheStrand) +{ + g_HairVertexPositionsPrevPrev[globalVertexIndex] = g_HairVertexPositionsPrev[globalVertexIndex]; + g_HairVertexPositionsPrev[globalVertexIndex] = oldPosition; + g_HairVertexPositions[globalVertexIndex] = newPosition; +} + + +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void TestShader(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + // Copy data into shared memory + g_HairVertexPositions[0] = g_InitialHairPositions[0]; // rest position + +} + +//------------------------------------------------------------------------------ +// Adi: this method will update the hair vertices according to the bone matrices +// and will not apply any physics interaction and response. +// Use for testing of a single pass. +//------------------------------------------------------------------------------ +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void SkinHairVerticesTest(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalVertexIndex]; // rest position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + float4 currentPos = float4(ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat), 1.0); // Apply bone skinning to initial position + +// UpdateFinalVertexPositions( g_HairVertexPositions[globalVertexIndex], currentPos, globalVertexIndex, localVertexIndex, numVerticesInTheStrand); + g_HairVertexPositions[globalVertexIndex] = currentPos; +// UpdateFinalVertexPositions( currentPos, currentPos, globalVertexIndex, localVertexIndex, numVerticesInTheStrand); + + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem] = g_HairVertexTangents[globalVertexIndex]; + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //------------------- + // Compute follow hair + //------------------- + // Adi - the following barrier might not be required + // GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor*g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} + + +//-------------------------------------------------------------------------------------- +// +// IntegrationAndGlobalShapeConstraints +// +// Compute shader to simulate the gravitational force with integration and to maintain the +// global shape constraints. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void IntegrationAndGlobalShapeConstraints(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + + // position when this step starts. In other words, a position from the last step. + float4 currentPos = sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + + GroupMemoryBarrierWithGroupSync(); + + // Integrate + float dampingCoeff = GetDamping(strandType); + float4 oldPos; + oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + // reset if we got teleported + if (g_ResetPositions != 0.0f) + { + currentPos = initialPos; + oldPos = initialPos; + } + + if ( IsMovable(currentPos) ) + sharedPos[indexForSharedMem].xyz = Integrate(currentPos.xyz, oldPos.xyz, initialPos.xyz, dampingCoeff); + else + sharedPos[indexForSharedMem] = initialPos; + + // Global Shape Constraints + float stiffnessForGlobalShapeMatching = GetGlobalStiffness(strandType); + float globalShapeMatchingEffectiveRange = GetGlobalRange(strandType); + + if ( stiffnessForGlobalShapeMatching > 0 && globalShapeMatchingEffectiveRange ) + { + if ( IsMovable(sharedPos[indexForSharedMem]) ) + { + if ( (float)localVertexIndex < globalShapeMatchingEffectiveRange * (float)numVerticesInTheStrand ) + { + float factor = stiffnessForGlobalShapeMatching; + float3 del = factor * (initialPos - sharedPos[indexForSharedMem]).xyz; + sharedPos[indexForSharedMem].xyz += del; + } + } + } + + // update global position buffers + UpdateFinalVertexPositions(currentPos, sharedPos[indexForSharedMem], globalVertexIndex, localVertexIndex, numVerticesInTheStrand); +} + +//-------------------------------------------------------------------------------------- +// +// Calculate Strand Level Data +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CalculateStrandLevelData(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + float4 pos_old_old[2]; // previous previous positions for vertex 0 (root) and vertex 1. + float4 pos_old[2]; // previous positions for vertex 0 (root) and vertex 1. + float4 pos_new[2]; // current positions for vertex 0 (root) and vertex 1. + + pos_old_old[0] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex]; + pos_old_old[1] = g_HairVertexPositionsPrevPrev[globalRootVertexIndex + 1]; + + pos_old[0] = g_HairVertexPositionsPrev[globalRootVertexIndex]; + pos_old[1] = g_HairVertexPositionsPrev[globalRootVertexIndex + 1]; + + pos_new[0] = g_HairVertexPositions[globalRootVertexIndex]; + pos_new[1] = g_HairVertexPositions[globalRootVertexIndex + 1]; + + float3 u = normalize(pos_old[1].xyz - pos_old[0].xyz); + float3 v = normalize(pos_new[1].xyz - pos_new[0].xyz); + + // Compute rotation and translation which transform pos_old to pos_new. + // Since the first two vertices are immovable, we can assume that there is no scaling during tranform. + float4 rot = QuatFromTwoUnitVectors(u, v); + float3 trans = pos_new[0].xyz - MultQuaternionAndVector(rot, pos_old[0].xyz); + + float vspCoeff = GetVelocityShockPropogation(); + float restLength0 = g_HairRestLengthSRV[globalRootVertexIndex]; + float vspAccelThreshold = GetVSPAccelThreshold(); + + // Increate the VSP coefficient by checking pseudo-acceleration to handle over-stretching when the character moves very fast + float accel = length(pos_new[1] - 2.0 * pos_old[1] + pos_old_old[1]); + + if (accel > vspAccelThreshold) // TODO: expose this value? + vspCoeff = 1.0f; + g_StrandLevelData[globalStrandIndex].vspQuat = rot; + g_StrandLevelData[globalStrandIndex].vspTranslation = float4(trans, vspCoeff); + + // skinning + + // Copy data into shared memory + float4 initialPos = g_InitialHairPositions[globalRootVertexIndex]; // rest position + + // Apply bone skinning to initial position + BoneSkinningData skinningData = g_BoneSkinningData[globalStrandIndex]; + float4 bone_quat; + initialPos.xyz = ApplyVertexBoneSkinning(initialPos.xyz, skinningData, bone_quat); + g_StrandLevelData[globalStrandIndex].skinningQuat = bone_quat; +} + +//-------------------------------------------------------------------------------------- +// +// VelocityShockPropagation +// +// Propagate velocity shock resulted by attached based mesh +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void VelocityShockPropagation(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + if (localVertexIndex < 2) + return; + + float4 vspQuat = g_StrandLevelData[globalStrandIndex].vspQuat; + float4 vspTrans = g_StrandLevelData[globalStrandIndex].vspTranslation; + float vspCoeff = vspTrans.w; + + float4 pos_new_n = g_HairVertexPositions[globalVertexIndex]; + float4 pos_old_n = g_HairVertexPositionsPrev[globalVertexIndex]; + + pos_new_n.xyz = (1.f - vspCoeff) * pos_new_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_new_n.xyz) + vspTrans.xyz); + pos_old_n.xyz = (1.f - vspCoeff) * pos_old_n.xyz + vspCoeff * (MultQuaternionAndVector(vspQuat, pos_old_n.xyz) + vspTrans.xyz); + + g_HairVertexPositions[globalVertexIndex].xyz = pos_new_n.xyz; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = pos_old_n.xyz; +} + +//-------------------------------------------------------------------------------------- +// +// LocalShapeConstraints +// +// Compute shader to maintain the local shape constraints. +// +// One thread computes one strand. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LocalShapeConstraints(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // stiffness for local shape constraints + float stiffnessForLocalShapeMatching = GetLocalStiffness(strandType); + + //1.0 for stiffness makes things unstable sometimes. + stiffnessForLocalShapeMatching = 0.5f*min(stiffnessForLocalShapeMatching, 0.95f); + + //-------------------------------------------- + // Local shape constraint for bending/twisting + //-------------------------------------------- + { + float4 boneQuat = g_StrandLevelData[globalStrandIndex].skinningQuat; + + // vertex 1 through n-1 + for (uint localVertexIndex = 1; localVertexIndex < numVerticesInTheStrand - 1; localVertexIndex++) + { + uint globalVertexIndex = globalRootVertexIndex + localVertexIndex; + + float4 pos = g_HairVertexPositions[globalVertexIndex]; + float4 pos_plus_one = g_HairVertexPositions[globalVertexIndex + 1]; + float4 pos_minus_one = g_HairVertexPositions[globalVertexIndex - 1]; + + float3 bindPos = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex].xyz); + float3 bindPos_plus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex + 1].xyz); + float3 bindPos_minus_one = MultQuaternionAndVector(boneQuat, g_InitialHairPositions[globalVertexIndex - 1].xyz); + + float3 lastVec = pos.xyz - pos_minus_one.xyz; + + float4 invBone = InverseQuaternion(boneQuat); + float3 vecBindPose = bindPos_plus_one - bindPos; + float3 lastVecBindPose = bindPos - bindPos_minus_one; + float4 rotGlobal = QuatFromTwoUnitVectors(normalize(lastVecBindPose), normalize(lastVec)); + + float3 orgPos_i_plus_1_InGlobalFrame = MultQuaternionAndVector(rotGlobal, vecBindPose) + pos.xyz; + float3 del = stiffnessForLocalShapeMatching * (orgPos_i_plus_1_InGlobalFrame - pos_plus_one.xyz); + + if (IsMovable(pos)) + pos.xyz -= del.xyz; + + if (IsMovable(pos_plus_one)) + pos_plus_one.xyz += del.xyz; + + + g_HairVertexPositions[globalVertexIndex].xyz = pos.xyz; + g_HairVertexPositions[globalVertexIndex + 1].xyz = pos_plus_one.xyz; + } + } + + return; +} + +// Resolve hair vs capsule collisions. To use this, set TRESSFX_COLLISION_CAPSULES to 1 in both hlsl and cpp sides. +bool ResolveCapsuleCollisions(inout float4 curPosition, float4 oldPos, float friction = 0.4f) +{ + bool bAnyColDetected = false; + +#if TRESSFX_COLLISION_CAPSULES + if (g_numCollisionCapsules.x > 0) + { + float3 newPos; + + for (int i = 0; i < g_numCollisionCapsules.x; i++) + { + float3 center0 = g_centerAndRadius0[i].xyz; + float3 center1 = g_centerAndRadius1[i].xyz; + + CollisionCapsule cc; + cc.p0.xyz = center0; + cc.p0.w = g_centerAndRadius0[i].w; + cc.p1.xyz = center1; + cc.p1.w = g_centerAndRadius1[i].w; + + bool bColDetected = CapsuleCollision(curPosition, oldPos, newPos, cc, friction); + + if (bColDetected) + curPosition.xyz = newPos; + + bAnyColDetected = bColDetected ? true : bAnyColDetected; + } + } +#endif + + return bAnyColDetected; +} + +//-------------------------------------------------------------------------------------- +// +// LengthConstriantsWindAndCollision +// +// Compute shader to move the vertex position based on wind, maintain the lenght constraints +// and handles collisions. +// +// One thread computes one vertex. +// +//-------------------------------------------------------------------------------------- +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void LengthConstriantsWindAndCollision(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + uint numOfStrandsPerThreadGroup = g_NumOfStrandsPerThreadGroup; + + //------------------------------ + // Copy data into shared memory + //------------------------------ + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedLength[indexForSharedMem] = g_HairRestLengthSRV[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + //------------ + // Wind + //------------ + if ( g_Wind.x != 0 || g_Wind.y != 0 || g_Wind.z != 0 ) + { + float4 force = float4(0, 0, 0, 0); + + float frame = g_Wind.w; + + if ( localVertexIndex >= 2 && localVertexIndex < numVerticesInTheStrand-1 ) + { + // combining four winds. + float a = ((float)(globalStrandIndex % 20))/20.0f; + float3 w = a*g_Wind.xyz + (1.0f-a)*g_Wind1.xyz + a*g_Wind2.xyz + (1.0f-a)*g_Wind3.xyz; + + uint sharedIndex = localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + float3 v = sharedPos[sharedIndex].xyz - sharedPos[sharedIndex+numOfStrandsPerThreadGroup].xyz; + float3 force = -cross(cross(v, w), v); + sharedPos[sharedIndex].xyz += force*g_TimeStep*g_TimeStep; + } + } + + GroupMemoryBarrierWithGroupSync(); + + //---------------------------- + // Enforce length constraints + //---------------------------- + uint a = floor(numVerticesInTheStrand/2.0f); + uint b = floor((numVerticesInTheStrand-1)/2.0f); + + int nLengthContraintIterations = GetLengthConstraintIterations(); + + for ( int iterationE=0; iterationE < nLengthContraintIterations; iterationE++ ) + { + uint sharedIndex = 2*localVertexIndex * numOfStrandsPerThreadGroup + localStrandIndex; + + if( localVertexIndex < a ) + ApplyDistanceConstraint(sharedPos[sharedIndex], sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedLength[sharedIndex].x); + + GroupMemoryBarrierWithGroupSync(); + + if( localVertexIndex < b ) + ApplyDistanceConstraint(sharedPos[sharedIndex+numOfStrandsPerThreadGroup], sharedPos[sharedIndex+numOfStrandsPerThreadGroup*2], sharedLength[sharedIndex+numOfStrandsPerThreadGroup].x); + + GroupMemoryBarrierWithGroupSync(); + } + + //------------------------------------------ + // Collision handling with capsule objects + //------------------------------------------ + float4 oldPos = g_HairVertexPositionsPrev[globalVertexIndex]; + + bool bAnyColDetected = ResolveCapsuleCollisions(sharedPos[indexForSharedMem], oldPos); + GroupMemoryBarrierWithGroupSync(); + + //------------------- + // Compute tangent + //------------------- + // If this is the last vertex in the strand, we can't get tangent from subtracting from the next vertex, need to use last vertex to current + uint indexForTangent = (localVertexIndex == numVerticesInTheStrand - 1) ? indexForSharedMem - numOfStrandsPerThreadGroup : indexForSharedMem; + float3 tangent = sharedPos[indexForTangent + numOfStrandsPerThreadGroup].xyz - sharedPos[indexForTangent].xyz; + g_HairVertexTangents[globalVertexIndex].xyz = normalize(tangent); + + //--------------------------------------- + // clamp velocities, rewrite history + //--------------------------------------- + float3 positionDelta = sharedPos[indexForSharedMem].xyz - oldPos; + float speedSqr = dot(positionDelta, positionDelta); + if (speedSqr > g_ClampPositionDelta * g_ClampPositionDelta) { + positionDelta *= g_ClampPositionDelta * g_ClampPositionDelta / speedSqr; + g_HairVertexPositionsPrev[globalVertexIndex].xyz = sharedPos[indexForSharedMem].xyz - positionDelta; + } + + //--------------------------------------- + // update global position buffers + //--------------------------------------- + g_HairVertexPositions[globalVertexIndex] = sharedPos[indexForSharedMem]; + + if (bAnyColDetected) + g_HairVertexPositionsPrev[globalVertexIndex] = sharedPos[indexForSharedMem]; + + return; +} + +// One thread computes one vertex. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void UpdateFollowHairVertices(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + sharedTangent[indexForSharedMem] = g_HairVertexTangents[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + int globalFollowStrandIndex = globalStrandIndex + i + 1; + float factor = g_TipSeparationFactor*((float)localVertexIndex / (float)numVerticesInTheStrand) + 1.0f; + float3 followPos = sharedPos[indexForSharedMem].xyz + factor*g_FollowHairRootOffset[globalFollowStrandIndex].xyz; + g_HairVertexPositions[globalFollowVertexIndex].xyz = followPos; + g_HairVertexTangents[globalFollowVertexIndex] = sharedTangent[indexForSharedMem]; + } + + return; +} + +// One thread computes one vertex. +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void PrepareFollowHairBeforeTurningIntoGuide(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) +{ + uint globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType; + CalcIndicesInVertexLevelMaster(GIndex, GId.x, globalStrandIndex, localStrandIndex, globalVertexIndex, localVertexIndex, numVerticesInTheStrand, indexForSharedMem, strandType); + + sharedPos[indexForSharedMem] = g_HairVertexPositions[globalVertexIndex]; + GroupMemoryBarrierWithGroupSync(); + + for ( uint i = 0; i < g_NumFollowHairsPerGuideHair; i++ ) + { + int globalFollowVertexIndex = globalVertexIndex + numVerticesInTheStrand * (i + 1); + g_HairVertexPositionsPrev[globalFollowVertexIndex].xyz = g_HairVertexPositions[globalFollowVertexIndex].xyz; + } + + return; +} + +//-------------------------------------------------------------------------------------- +// +// GenerateTransforms +// +// This was the method of fur in TressFX 3.x. It may no longer work, and is not +// currently supported. We're including it, because it should be possible to +// get it working again without a whole lot of trouble, assuming the need arises. +// +// In this TressFX 3.x method, each strand has a triangle index assigned on export from +// Maya. It derives its transform from the post-skinned triangle. The advantage of this +// approach is that it can work independently of skinning method, blendshapes, etc. +// +// It relies on the triangle index being correct at runtime, though, which can be tricky. +// The engine would need to either maintain the original Maya triangles, or a mapping from +// the original Maya triangles to the runtime set. +// +// It's also a bit more expensive, given that it must calculate a transform from the triangle. +// +//-------------------------------------------------------------------------------------- +#if USE_MESH_BASED_HAIR_TRANSFORM == 1 + [numthreads(THREAD_GROUP_SIZE, 1, 1)] + void GenerateTransforms(uint GIndex : SV_GroupIndex, + uint3 GId : SV_GroupID, + uint3 DTid : SV_DispatchThreadID) + { + uint local_id, group_id, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType; + CalcIndicesInStrandLevelMaster(GIndex, GId.x, globalStrandIndex, numVerticesInTheStrand, globalRootVertexIndex, strandType); + + // get the index for the mesh triangle + uint triangleIndex = g_HairToMeshMapping[globalStrandIndex].triangleIndex * 3; + + // get the barycentric coordinate for this hair strand + float a = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[0]; + float b = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[1]; + float c = g_HairToMeshMapping[globalStrandIndex].barycentricCoord[2]; + + // get the un-transformed triangle + float3 vert1 = g_MeshVertices[triangleIndex].xyz; + float3 vert2 = g_MeshVertices[triangleIndex+1].xyz; + float3 vert3 = g_MeshVertices[triangleIndex+2].xyz; + + // get the transfomed (skinned) triangle + float3 skinnedVert1 = g_TransformedVerts[triangleIndex].xyz; + float3 skinnedVert2 = g_TransformedVerts[triangleIndex+1].xyz; + float3 skinnedVert3 = g_TransformedVerts[triangleIndex+2].xyz; + + // calculate original hair position for the strand using the barycentric coordinate + //float3 pos = mul(a, vert1) + mul (b, vert2) + mul(c, vert3); + + // calculate the new hair position for the strand using the barycentric coordinate + float3 tfmPos = mul(a, skinnedVert1) + mul (b, skinnedVert2) + mul(c, skinnedVert3); + float3 initialPos = g_InitialHairPositions[globalRootVertexIndex].xyz; + + //------------------------------------------------- + // Calculate transformation matrix for the hair + //------------------------------------------------- + + // create a coordinate system from the untransformed triangle + // Note: this part only needs to be done once. We could pre-calculate it + // for every hair and save it in a buffer. + float3 normal; + float3 tangent = normalize(vert1 - vert3); + float3 tangent2 = vert2 - vert3; + normal = normalize(cross(tangent, tangent2)); + float3 binormal = normalize(cross(normal, tangent)); + + row_major float4x4 triangleMtx; + triangleMtx._m00 = tangent.x; triangleMtx._m01 = tangent.y; triangleMtx._m02 = tangent.z; triangleMtx._m03 = 0; + triangleMtx._m10 = normal.x; triangleMtx._m11 = normal.y; triangleMtx._m12 = normal.z; triangleMtx._m13 = 0; + triangleMtx._m20 = binormal.x; triangleMtx._m21 = binormal.y; triangleMtx._m22 = binormal.z; triangleMtx._m23 = 0; + triangleMtx._m30 = 0; triangleMtx._m31 = 0; triangleMtx._m32 = 0; triangleMtx._m33 = 1; + + // create a coordinate system from the transformed triangle + tangent = normalize(skinnedVert1 - skinnedVert3); + tangent2 = skinnedVert2 - skinnedVert3; + normal = normalize(cross(tangent, tangent2)); + binormal = normalize(cross(normal, tangent)); + + row_major float4x4 tfmTriangleMtx; + tfmTriangleMtx._m00 = tangent.x; tfmTriangleMtx._m01 = tangent.y; tfmTriangleMtx._m02 = tangent.z; tfmTriangleMtx._m03 = 0; + tfmTriangleMtx._m10 = normal.x; tfmTriangleMtx._m11 = normal.y; tfmTriangleMtx._m12 = normal.z; tfmTriangleMtx._m13 = 0; + tfmTriangleMtx._m20 = binormal.x; tfmTriangleMtx._m21 = binormal.y; tfmTriangleMtx._m22 = binormal.z; tfmTriangleMtx._m23 = 0; + tfmTriangleMtx._m30 = 0; tfmTriangleMtx._m31 = 0; tfmTriangleMtx._m32 = 0; tfmTriangleMtx._m33 = 1; + + // Find the rotation transformation from the untransformed triangle to the transformed triangle + // rotation = inverse(triangleMtx) x tfmTriangleMtx = transpose(triangleMtx) x tfmTriangleMtx, since triangelMtx is orthonormal + row_major float4x4 rotationMtx = mul(transpose(triangleMtx), tfmTriangleMtx); + + // translation matrix from hair to origin since we want to rotate the hair at it's root + row_major float4x4 translationMtx; + translationMtx._m00 = 1; translationMtx._m01 = 0; translationMtx._m02 = 0; translationMtx._m03 = 0; + translationMtx._m10 = 0; translationMtx._m11 = 1; translationMtx._m12 = 0; translationMtx._m13 = 0; + translationMtx._m20 = 0; translationMtx._m21 = 0; translationMtx._m22 = 1; translationMtx._m23 = 0; + translationMtx._m30 = -initialPos.x; translationMtx._m31 = -initialPos.y; translationMtx._m32 = -initialPos.z; translationMtx._m33 = 1; + + // final rotation matrix + rotationMtx = mul(translationMtx, rotationMtx); + + // translate back to the final position (as determined by the skinned mesh position) + translationMtx._m30 = tfmPos.x; translationMtx._m31 = tfmPos.y; translationMtx._m32 = tfmPos.z; translationMtx._m33 = 1; + + // combine the rotation and translation + row_major float4x4 tfmMtx = mul(rotationMtx, translationMtx); + + // apply the global transformation for the model + //tfmMtx = mul(tfmMtx, g_ModelTransformForHead); + + // calculate the quaternion from the matrix + float4 quaternion; + quaternion.w = sqrt(1 + tfmMtx._m00 + tfmMtx._m11 + tfmMtx._m22) / 2; + quaternion.x = (tfmMtx._m21 - tfmMtx._m12)/( 4 * quaternion.w); + quaternion.y = (tfmMtx._m02 - tfmMtx._m20)/( 4 * quaternion.w); + quaternion.z = (tfmMtx._m10 - tfmMtx._m01)/( 4 * quaternion.w); + + g_Transforms[globalStrandIndex].tfm = tfmMtx; + g_Transforms[globalStrandIndex].quat = quaternion; + return; + } +#endif +// EndHLSL diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl new file mode 100644 index 0000000000..255ff984c6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXStrands.hlsl @@ -0,0 +1,161 @@ +//--------------------------------------------------------------------------------------- +// Shader code related to hair strands in the graphics pipeline. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXUtilities.hlsl" + +//-------------------------------------------------------------------------------------- +// +// Structured buffers with hair vertex info +// Accessors to allow changes to how they are accessed. +// +//-------------------------------------------------------------------------------------- +[[vk::binding(0, 1)]] StructuredBuffer g_GuideHairVertexPositions : register(t0, space1); +[[vk::binding(1, 1)]] StructuredBuffer g_GuideHairVertexTangents : register(t1, space1); + +[[vk::binding(0, 0)]] StructuredBuffer g_HairThicknessCoeffs : register(t0, space0); +[[vk::binding(1, 0)]] StructuredBuffer g_HairStrandTexCd : register(t1, space0); +[[vk::binding(2, 0)]] Texture2D BaseAlbedoTexture : register(t2, space0); + +[[vk::binding(0, 4)]] SamplerState LinearWrapSampler : register(s0, space4); + + +inline float4 GetPosition(int index) +{ + return g_GuideHairVertexPositions[index]; +} +inline float4 GetTangent(int index) +{ + return g_GuideHairVertexTangents[index]; +} +inline float GetThickness(int index) +{ + return g_HairThicknessCoeffs[index]; +} + +float3 GetStrandColor(int index, float fractionOfStrand) +{ + float3 rootColor; + float3 tipColor; + + float2 texCd = g_HairStrandTexCd[index / NumVerticesPerStrand].xy; + rootColor = BaseAlbedoTexture.SampleLevel(LinearWrapSampler, texCd, 0).rgb; + tipColor = MatTipColor.rgb; + + // Multiply with Base Material color + rootColor *= MatBaseColor.rgb; + + // Update the color based on position along the strand (vertex level) and lerp between tip and root if within the tipPercentage requested + float rootRange = 1.f - TipPercentage; + return (fractionOfStrand > rootRange) ? lerp(rootColor, tipColor, fractionOfStrand) : rootColor; +} + +struct TressFXVertex +{ + float4 Position; + float4 Tangent; + float4 p0p1; + float4 StrandColor; +}; + +TressFXVertex GetExpandedTressFXVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result + float3 v = g_GuideHairVertexPositions[index].xyz; + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Gonna hi-jack Tangent.w (unused) and add a .w component to strand color to store a strand UV + float2 strandUV; + strandUV.x = (vertexId & 0x01) ? 0.f : 1.f; + strandUV.y = fractionOfStrand; + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + Output.Tangent = float4(t, strandUV.x); + Output.p0p1 = float4(hairEdgePositions[0].xy / max(hairEdgePositions[0].w, TRESSFX_FLOAT_EPSILON), hairEdgePositions[1].xy / max(hairEdgePositions[1].w, TRESSFX_FLOAT_EPSILON)); + Output.StrandColor = float4(GetStrandColor(index, fractionOfStrand), strandUV.y); + return Output; +} + +TressFXVertex GetExpandedTressFXShadowVert(uint vertexId, float3 eye, float2 winSize, float4x4 viewProj) +{ + + // Access the current line segment + uint index = vertexId / 2; // vertexId is actually the indexed vertex id when indexed triangles are used + // Get updated positions and tangents from simulation result + float3 v = g_GuideHairVertexPositions[index].xyz; + float3 t = g_GuideHairVertexTangents[index].xyz; + + // Get hair strand thickness + uint indexInStrand = index % NumVerticesPerStrand; + float fractionOfStrand = (float)indexInStrand / (NumVerticesPerStrand - 1); + float ratio = (EnableThinTip > 0) ? lerp(1.0, FiberRatio, fractionOfStrand) : 1.0; //need length of full strand vs the length of this point on the strand. + + // Calculate right and projected right vectors + float3 right = Safe_normalize(cross(t, Safe_normalize(v - eye))); + float2 proj_right = Safe_normalize(MatrixMult(viewProj, float4(right, 0)).xy); + + // We always to to expand for faster hair AA, we may want to gauge making this adjustable + float expandPixels = 1.f; // Disable for shadows 0.71; + + // Calculate the negative and positive offset screenspace positions + float4 hairEdgePositions[2]; // 0 is negative, 1 is positive + hairEdgePositions[0] = float4(v + -1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[1] = float4(v + 1.0 * right * ratio * FiberRadius, 1.0); + hairEdgePositions[0] = MatrixMult(viewProj, hairEdgePositions[0]); + hairEdgePositions[1] = MatrixMult(viewProj, hairEdgePositions[1]); + + // Write output data + TressFXVertex Output = (TressFXVertex)0; + float fDirIndex = (vertexId & 0x01) ? -1.0 : 1.0; + Output.Position = ((vertexId & 0x01) ? hairEdgePositions[0] : hairEdgePositions[1]) + fDirIndex * float4(proj_right * expandPixels / winSize.y, 0.0f, 0.0f) * ((vertexId & 0x01) ? hairEdgePositions[0].w : hairEdgePositions[1].w); + return Output; +} + +// EndHLSL + diff --git a/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl new file mode 100644 index 0000000000..39a25b46a8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Shaders/TressFXUtilities.hlsl @@ -0,0 +1,119 @@ +//--------------------------------------------------------------------------------------- +// Shader code utilities for TressFX +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +// Cutoff to not render hair +#define SHORTCUT_MIN_ALPHA 0.02 + +#define TRESSFX_FLOAT_EPSILON 1e-7 + +//-------------------------------------------------------------------------------------- +// +// Controls whether you do mul(M,v) or mul(v,M) +// i.e., row major vs column major +// +//-------------------------------------------------------------------------------------- +float4 MatrixMult(float4x4 m, float4 v) +{ + return mul(m, v); +} + +// Calculate screen UV from XY NDC pair +float2 NDCToScreenUV(float2 vNDC) +{ + float2 ScreenUV = (vNDC + 1) / 2; + ScreenUV.y = 1 - ScreenUV.y; + return ScreenUV; +} + +// Get world position from NDC coordinates +float3 NDCToWorld(float3 vNDC, float4x4 mInvViewProj) +{ + float4 pos = MatrixMult(mInvViewProj, float4(vNDC, 1)); + return pos.xyz / pos.w; +} + +// Get NDC from screen position (and depth) +float3 ScreenPosToNDC(float3 vScreenPos, float4 viewport) +{ + float2 xy = vScreenPos.xy; + + // add viewport offset. + xy += viewport.xy; + + // scale by viewport to put in 0 to 1 + xy /= viewport.zw; + + // shift and scale to put in -1 to 1. y is also being flipped. + xy.x = (2 * xy.x) - 1; + xy.y = 1 - (2 * xy.y); + + return float3(xy, vScreenPos.z); +} + +// Pack a float4 into an uint +uint PackFloat4IntoUint(float4 vValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | (uint)(vValue.w * 255); +} + +// Unpack a uint into a float4 value +float4 UnpackUintIntoFloat4(uint uValue) +{ + return float4(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0, ((uValue & 0x000000FF)) / 255.0); +} + +// Pack a float3 and a uint8 into an uint +uint PackFloat3ByteIntoUint(float3 vValue, uint uByteValue) +{ + return (((uint)(vValue.x * 255)) << 24) | (((uint)(vValue.y * 255)) << 16) | (((uint)(vValue.z * 255)) << 8) | uByteValue; +} + +// Unpack a uint into a float3 and a uint8 value +float3 UnpackUintIntoFloat3Byte(uint uValue, out uint uByteValue) +{ + uByteValue = uValue & 0x000000FF; + return float3(((uValue & 0xFF000000) >> 24) / 255.0, ((uValue & 0x00FF0000) >> 16) / 255.0, ((uValue & 0x0000FF00) >> 8) / 255.0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float2 +// +//-------------------------------------------------------------------------------------- +float2 Safe_normalize(float2 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float2(0, 0); +} + +//-------------------------------------------------------------------------------------- +// +// Safe_normalize-float3 +// +//-------------------------------------------------------------------------------------- +float3 Safe_normalize(float3 vec) +{ + float len = length(vec); + return len >= TRESSFX_FLOAT_EPSILON ? (vec * rcp(len)) : float3(0, 0, 0); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Simulation.cpp b/Gems/AtomTressFX/External/Code/src/Simulation.cpp new file mode 100644 index 0000000000..9d5ca9fd3d --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Simulation.cpp @@ -0,0 +1,146 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing simulation +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "Simulation.h" + +#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" +#include "TressFXSimulation.h" + +#include "HairStrands.h" +#include "SDF.h" + +#define DEFINE_TO_STRING(x) #x +#define DEFINE_VALUE_TO_STRING(x) DEFINE_TO_STRING(x) + +Simulation::Simulation() + : mSimulation() + , mSDFCollisionSystem() +{ + EI_Device* pDevice = GetDevice(); + + // mSimulation = new TressFXSimulation(); + mSimulation.Initialize(pDevice); + mSDFCollisionSystem.Initialize(pDevice); +} + +void Simulation::StartSimulation( + double fTime, + SimulationContext& ctx, + bool bUpdateCollMesh, + bool bSDFCollisionResponse, + bool bAsync + ) +{ + // When we are done submitting sim commands, we will restore this as the default command list. + // TODO Maybe pass this explicitly, rather than setting as default and retrieving from there. + EI_CommandContext* renderContext = &GetDevice()->GetCurrentCommandContext(); + + + // When running async, we are getting a command list for submission on the async compute queue. + // We are only accumulating commands for submission now. There will be a wait for actual + // submission after this. + EI_CommandContext* simContext = renderContext; + if (bAsync) + { + simContext = &GetDevice()->GetComputeCommandContext(); + } + + if (bUpdateCollMesh) + { + // Updates the skinned version of the mesh, + // which is input to SDF. + // We are using a compute-based skinning system here, + // which is not part of the TressFX library. + for (size_t i = 0; i < ctx.collisionMeshes.size(); i++) + ctx.collisionMeshes[i]->SkinTheMesh(*simContext, fTime); + + UpdateCollisionMesh(*simContext, ctx); + } + + RunSimulation(*simContext, ctx); + + if (bSDFCollisionResponse) + RunCollision(*simContext, ctx); + + + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + ctx.hairStrands[i]->TransitionSimToRendering(*renderContext); + + +} + +void Simulation::WaitOnSimulation() +{ + GetDevice()->WaitForCompute(); +} + +void Simulation::UpdateCollisionMesh(EI_CommandContext& simContext, SimulationContext& ctx) +{ + for (size_t i = 0; i < ctx.collisionMeshes.size(); i++) + ctx.collisionMeshes[i]->AccumulateSDF(simContext, mSDFCollisionSystem); +} + +void Simulation::RunCollision(EI_CommandContext& simContext, SimulationContext& ctx) +{ + // We will apply every collision mesh to every set of strands. + // This is of course not necessary in general - a BB check, for example, + // could check for overlaps first. + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + { + TressFXHairObject* pHair = ctx.hairStrands[i]->GetTressFXHandle(); + + for (size_t j = 0; j < ctx.collisionMeshes.size(); j++) + ctx.collisionMeshes[j]->ApplySDF(simContext, mSDFCollisionSystem, pHair); + } +} + +void Simulation::RunSimulation(EI_CommandContext& simContext, SimulationContext& ctx) +{ + std::vector hairObjects(ctx.hairStrands.size()); + // Adi: the following part is required for both simulation and render since it updates + // the skinning matrices + for (size_t i = 0; i < ctx.hairStrands.size(); i++) + { + // update bone matrices for bone skinning of first two vertices of hair strands + ctx.hairStrands[i]->UpdateBones(simContext); + hairObjects[i] = ctx.hairStrands[i]->GetTressFXHandle(); + } + +// Adi: use the skin method only for initial testing with single compute pass +#define _SKIN_HAIR_NO_PHYSICS_ +#ifdef _SKIN_HAIR_NO_PHYSICS_ + mSimulation.UpdateHairSkinning(simContext, hairObjects); +#else + // Adi: this part involves the physics simulation: gravity, collisions and response and + // runs the compute shaders for that. + // Since it also contains the initial skinning of the hair and the final stage of adding + // follow hair, it must be replaced (as per the above) if we want to skip the simulation + // part for now. + // Run simulation + mSimulation.Simulate(simContext, hairObjects); +#endif +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/Simulation.h b/Gems/AtomTressFX/External/Code/src/Simulation.h new file mode 100644 index 0000000000..ed7b3ef0b8 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/Simulation.h @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------------------- +// Example code for managing simulation +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include "TressFXSDFCollision.h" +#include "TressFXSimulation.h" +#include "EngineInterface.h" +#include + +class HairStrands; +class CollisionMesh; + +struct SimulationContext +{ + std::vector hairStrands; + std::vector collisionMeshes; +}; + +class Simulation +{ +public: + Simulation(); + void StartSimulation( + double fTime, + SimulationContext& ctx, + bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsync + ); + void WaitOnSimulation(); +private: + void UpdateCollisionMesh(EI_CommandContext& simContext, SimulationContext& ctx); + void RunCollision(EI_CommandContext& simContext, SimulationContext& ctx); + void RunSimulation(EI_CommandContext& simContext, SimulationContext& ctx); + + TressFXSimulation mSimulation; + TressFXSDFCollisionSystem mSDFCollisionSystem; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp new file mode 100644 index 0000000000..071600f970 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.cpp @@ -0,0 +1,37 @@ + +//--------------------------------------------------------------------------------------- +// Hooks interface to TressFX functionality. +// +// AMD_TressFX.h is the interface. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#if AMD_TRESSFX_COMPILE_DYNAMIC_LIB +#define AMD_DLL_EXPORTS +#endif + +#include "AMD_TressFX.h" + +#include "TressFXAsset.h" +#include "TressFXHairObject.h" + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h new file mode 100644 index 0000000000..9faec13520 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_TressFX.h @@ -0,0 +1,55 @@ +//--------------------------------------------------------------------------------------- +// Main header file for TressFX +// This will eventually contain the C interface to all functionality. +// +// In the meantime, users need to use the individual headers for the components they +// require. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once +//#ifndef AMD_TRESSFX_H +//#define AMD_TRESSFX_H + +#define AMD_TRESSFX_VERSION_MAJOR 4 +#define AMD_TRESSFX_VERSION_MINOR 0 +#define AMD_TRESSFX_VERSION_PATCH 0 + +#include + +#ifndef TRESSFX_ASSERT +#include +#define TRESSFX_ASSERT assert +#endif + +// Max number of bones in a skeleton +#ifndef AMD_TRESSFX_MAX_NUM_BONES + #define AMD_TRESSFX_MAX_NUM_BONES 512 +#endif + +// Max number of hair render groups (bump up as needed) +#ifndef AMD_TRESSFX_MAX_HAIR_GROUP_RENDER + #define AMD_TRESSFX_MAX_HAIR_GROUP_RENDER 16 +#endif + +//#endif // AMD_TRESSFX_H diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h new file mode 100644 index 0000000000..b2df762ae2 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/AMD_Types.h @@ -0,0 +1,91 @@ +//--------------------------------------------------------------------------------------- +// Type definitions and a few convenient macros +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once +//#ifndef AMD_LIB_TYPES_H +//#define AMD_LIB_TYPES_H + +namespace AMD +{ + typedef long long int64; + typedef int int32; + typedef short int16; + typedef char int8; + typedef char byte; + + typedef long long sint64; + typedef int sint32; + typedef short sint16; + typedef char sint8; + typedef int sint; + typedef short sshort; + typedef char sbyte; + typedef char schar; + + typedef unsigned long long uint64; + typedef unsigned int uint32; + typedef unsigned short uint16; + typedef unsigned char uint8; + + typedef float real32; + typedef double real64; + + typedef unsigned long long ulong; + typedef unsigned int uint; + typedef unsigned short ushort; + typedef unsigned char ubyte; + typedef unsigned char uchar; + + // The common return codes + typedef enum RETURN_CODE_t { + RETURN_CODE_SUCCESS, + RETURN_CODE_FAIL, + RETURN_CODE_INVALID_DEVICE, + RETURN_CODE_INVALID_DEVICE_CONTEXT, + RETURN_CODE_COUNT, + } RETURN_CODE; +} // namespace AMD + + +#define AMD_FUNCTION_WIDEN2(x) L##x +#define AMD_FUNCTION_WIDEN(x) AMD_FUNCTION_WIDEN2(x) +#define AMD_FUNCTION_WIDE_NAME AMD_FUNCTION_WIDEN(__FUNCTION__) +#define AMD_FUNCTION_NAME __FUNCTION__ + +#define AMD_PITCHED_SIZE(x, y) ((x + y - 1) / y) + +#define AMD_ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) + +#define AMD_PI 3.141592654f +#define AMD_ROT_ANGLE (AMD_PI / 180.f) + +#ifdef AMD_TRESSFX_DEBUG +#define AMD_COMPILE_TIME_ASSERT(condition, name) \ + unsigned char g_AMD_CompileTimeAssertExpression##name[(condition) ? 1 : -1]; +#else +#define AMD_COMPILE_TIME_ASSERT(condition, name) +#endif + +//#endif // AMD_LIB_TYPES_H diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt new file mode 100644 index 0000000000..b54fddca1e --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/CMakeLists.txt @@ -0,0 +1,29 @@ +project (TressFX_${GFX_API}) + +set(tressfx_sources + TressFX/AMD_TressFX.h + TressFX/AMD_TressFX.cpp + TressFX/AMD_Types.h + TressFX/TressFXAsset.h + TressFX/TressFXAsset.cpp + TressFX/TressFXCommon.h + TressFX/TressFXConstantBuffers.h + TressFX/TressFXFileFormat.h + TressFX/TressFXHairObject.h + TressFX/TressFXHairObject.cpp + TressFX/TressFXLayouts.h + TressFX/TressFXLayouts.cpp + TressFX/TressFXPPLL.h + TressFX/TressFXPPLL.cpp + TressFX/TressFXSDFCollision.cpp + TressFX/TressFXSDFCollision.h + TressFX/TressFXSDFInputMeshInterface.h + TressFX/TressFXSettings.h + TressFX/TressFXBoneSkinning.cpp + TressFX/TressFXBoneSkinning.h + TressFX/TressFXSDFMarchingCubes.cpp + TressFX/TressFXSDFMarchingCubes.h + TressFX/TressFXShortcut.h + TressFX/TressFXShortcut.cpp + TressFX/TressFXSimulation.cpp + TressFX/TressFXSimulation.h PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp new file mode 100644 index 0000000000..19bb491489 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp @@ -0,0 +1,986 @@ +//--------------------------------------------------------------------------------------- +// Loads and processes TressFX files. +// Inputs are binary files/streams/blobs +// Outputs are raw data that will mostly end up on the GPU. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +//#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace AMD +{ + static void GetTangentVectors(const Vector3& n, Vector3& t0, Vector3& t1) + { + if (fabsf(n[2]) > 0.707f) + { + float a = n[1] * n[1] + n[2] * n[2]; + float k = 1.0f / sqrtf(a); + t0[0] = 0; + t0[1] = -n[2] * k; + t0[2] = n[1] * k; + + t1[0] = a * k; + t1[1] = -n[0] * t0[2]; + t1[2] = n[0] * t0[1]; + } + else + { + float a = n[0] * n[0] + n[1] * n[1]; + float k = 1.0f / sqrtf(a); + t0[0] = -n[1] * k; + t0[1] = n[0] * k; + t0[2] = 0; + + t1[0] = -n[2] * t0[1]; + t1[1] = n[2] * t0[0]; + t1[2] = a * k; + } + } + + static float GetRandom(float Min, float Max) + { + return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min; + } + + // This function is mimicking LoadTressFXCollisionMeshData in TressFXBoneSkinning with a few tweaks. + // 1) It reads from an asset data stream instead of a std file stream. + // 2) Reading all data to an array of strings at once instead of reading line by line. + bool TressFXCollisionMesh::LoadMeshData(AZ::Data::AssetDataStream* stream) + { + if (!stream->IsOpen()) + { + return false; + } + + int numOfBones; + AZStd::vector boneNames; + + // Read the stream to a buffer and parse it line by line + AZStd::vector charBuffer; + charBuffer.resize_no_construct(stream->GetLength() + 1); + stream->Read(stream->GetLength(), charBuffer.data()); + + AZStd::vector sTokens; + AZStd::vector fileLines; + AzFramework::StringFunc::Tokenize(charBuffer.data(), fileLines, "\r\n"); + + for (int lineIdx = 0; lineIdx < fileLines.size(); ++lineIdx) + { + const AZStd::string& line = fileLines[lineIdx]; + + if (line.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (line[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(line.data(), sTokens, " "); + + AZStd::string token; + if (!sTokens.empty()) + { + token = sTokens[0]; + } + else + { + token = line; + } + + // Load bone names. + if (token.find("numOfBones") != std::string::npos) + { + numOfBones = atoi(sTokens[1].c_str()); + int countBone = 0; + + // Continue reading the file. + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // Next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + m_boneNames.push_back(sTokens[1].c_str()); + countBone++; + + if (countBone == numOfBones) + break; + } + } + + if (token.find("numOfVertices") != std::string::npos) // load bone indices and weights for each strand + { + const int numVertices = (AMD::uint32)atoi(sTokens[1].c_str()); + m_boneSkinningData.resize(numVertices); + m_vertices.resize(numVertices); + m_normals.resize(numVertices); + memset(m_boneSkinningData.data(), 0, sizeof(TressFXBoneSkinningData) * numVertices); + + // Continue reading the file. + int index = 0; + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // Next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + assert(sTokens.size() == 15); + + int vertexIndex = atoi(sTokens[0].c_str()); + AZ_UNUSED(vertexIndex); + assert(vertexIndex == index); + + AMD::float3& pos = m_vertices[index]; + pos.x = (float)atof(sTokens[1].c_str()); + pos.y = (float)atof(sTokens[2].c_str()); + pos.z = (float)atof(sTokens[3].c_str()); + + AMD::float3& normal = m_normals[index]; + normal.x = (float)atof(sTokens[4].c_str()); + normal.y = (float)atof(sTokens[5].c_str()); + normal.z = (float)atof(sTokens[6].c_str()); + + TressFXBoneSkinningData skinData; + + // Those indices stored in the skin data refer to local bones specific to this TressFX asset, not emotionFx/global bones. + // Bone indices are local to the skinning data (start from 0), while global bone indices are mapped to the entire skeleton. + int boneIndex = atoi(sTokens[7].c_str()); + skinData.boneIndex[0] = (float)boneIndex; + + boneIndex = atoi(sTokens[8].c_str()); + skinData.boneIndex[1] = (float)boneIndex; + + boneIndex = atoi(sTokens[9].c_str()); + skinData.boneIndex[2] = (float)boneIndex; + + boneIndex = atoi(sTokens[10].c_str()); + skinData.boneIndex[3] = (float)boneIndex; + + skinData.weight[0] = (float)atof(sTokens[11].c_str()); + skinData.weight[1] = (float)atof(sTokens[12].c_str()); + skinData.weight[2] = (float)atof(sTokens[13].c_str()); + skinData.weight[3] = (float)atof(sTokens[14].c_str()); + + m_boneSkinningData[index] = skinData; + + ++index; + + if (index == numVertices) + break; + } + } + else if (token.find("numOfTriangles") != std::string::npos) // triangle indices + { + const int numTriangles = atoi(sTokens[1].c_str()); + int numIndices = numTriangles * 3; + m_indices.resize(numIndices); + int index = 0; + + // Continue reading the file. + for (++lineIdx; lineIdx < fileLines.size(); ++lineIdx) + { + // next line + const AZStd::string& sLine = fileLines[lineIdx]; + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + AzFramework::StringFunc::Tokenize(sLine.data(), sTokens, " "); + assert(sTokens.size() == 4); + + int triangleIndex = atoi(sTokens[0].c_str()); + AZ_UNUSED(triangleIndex); + assert(triangleIndex == index); + + m_indices[index * 3 + 0] = atoi(sTokens[1].c_str()); + m_indices[index * 3 + 1] = atoi(sTokens[2].c_str()); + m_indices[index * 3 + 2] = atoi(sTokens[3].c_str()); + + ++index; + + if (index == numTriangles) + break; + } + } + } + + // [To Do] - check if the follow bone is required for the collision mesh. + // m_pScene = scene; + // m_followBone = scene->GetBoneIdByName(skinNumber, followBone); + + return true; + } + + TressFXAsset::TressFXAsset() + : m_numTotalStrands(0) + , m_numTotalVertices(0) + , m_numVerticesPerStrand(0) + , m_numGuideStrands(0) + , m_numGuideVertices(0) + , m_numFollowStrandsPerGuide(0) + { + } + + TressFXAsset::~TressFXAsset() + { + } + + bool TressFXAsset::LoadHairData(FILE* ioObject) + { + TressFXTFXFileHeader header = {}; + + // read the header + EI_Seek(ioObject, 0); // make sure the stream pos is at the beginning. + EI_Read((void*)&header, sizeof(TressFXTFXFileHeader), ioObject); + + // If the tfx version is lower than the current major version, exit. + if (header.version < AMD_TRESSFX_VERSION_MAJOR) + { + return false; + } + + unsigned int numStrandsInFile = header.numHairStrands; + + // We make the number of strands be multiple of TRESSFX_SIM_THREAD_GROUP_SIZE. + m_numGuideStrands = (numStrandsInFile - numStrandsInFile % TRESSFX_SIM_THREAD_GROUP_SIZE) + TRESSFX_SIM_THREAD_GROUP_SIZE; + + m_numVerticesPerStrand = header.numVerticesPerStrand; + + // Make sure number of vertices per strand is greater than two and less than or equal to + // thread group size (64). Also thread group size should be a mulitple of number of + // vertices per strand. So possible number is 4, 8, 16, 32 and 64. + TRESSFX_ASSERT(m_numVerticesPerStrand > 2 && m_numVerticesPerStrand <= TRESSFX_SIM_THREAD_GROUP_SIZE && TRESSFX_SIM_THREAD_GROUP_SIZE % m_numVerticesPerStrand == 0); + + m_numFollowStrandsPerGuide = 0; + m_numTotalStrands = m_numGuideStrands; // Until we call GenerateFollowHairs, the number of total strands is equal to the number of guide strands. + m_numGuideVertices = m_numGuideStrands * m_numVerticesPerStrand; + m_numTotalVertices = m_numGuideVertices; // Again, the total number of vertices is equal to the number of guide vertices here. + + TRESSFX_ASSERT(m_numTotalVertices % TRESSFX_SIM_THREAD_GROUP_SIZE == 0); // number of total vertices should be multiple of thread group size. + // This assert is actually redundant because we already made m_numGuideStrands + // and m_numTotalStrands are multiple of thread group size. + // Just demonstrating the requirement for number of vertices here in case + // you are to make your own loader. + + m_positions.resize(m_numTotalVertices); // size of m_positions = number of total vertices * sizeo of each position vector. + + // Read position data from the io stream. + EI_Seek(ioObject, header.offsetVertexPosition); + EI_Read((void*)m_positions.data(), numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), ioObject); // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs + // to generate follow hairs, m_positions will be re-allocated. + + // We need to make up some strands to fill up the buffer because the number of strands from stream is not necessarily multile of thread size. + AMD::int32 numStrandsToMakeUp = m_numGuideStrands - numStrandsInFile; + + for (AMD::int32 i = 0; i < numStrandsToMakeUp; ++i) + { + for (AMD::int32 j = 0; j < m_numVerticesPerStrand; ++j) + { + AMD::int32 indexLastVertex = (numStrandsInFile - 1) * m_numVerticesPerStrand + j; + AMD::int32 indexVertex = (numStrandsInFile + i) * m_numVerticesPerStrand + j; + m_positions[indexVertex] = m_positions[indexLastVertex]; + } + } + + // Read strand UVs + EI_Seek(ioObject, header.offsetStrandUV); + m_strandUV.resize(m_numTotalStrands); // If we call GenerateFollowHairs to generate follow hairs, + // m_strandUV will be re-allocated. + + EI_Read((void*)m_strandUV.data(), numStrandsInFile * sizeof(AMD::float2), ioObject); + + // Fill up the last empty space + AMD::int32 indexLastStrand = (numStrandsInFile - 1); + + for (int i = 0; i < numStrandsToMakeUp; ++i) + { + AMD::int32 indexStrand = (numStrandsInFile + i); + m_strandUV[indexStrand] = m_strandUV[indexLastStrand]; + } + + m_followRootOffsets.resize(m_numTotalStrands); + + // Fill m_followRootOffsets with zeros + memset(m_followRootOffsets.data(), 0, m_numTotalStrands * sizeof(AMD::float4)); + + return true; + } + + bool TressFXAsset::LoadHairData(AZ::Data::AssetDataStream* stream) + { + TressFXTFXFileHeader header = {}; + + // read the header + stream->Read(sizeof(TressFXTFXFileHeader), (void*)&header); + + // If the tfx version is lower than the current major version, exit. + if (header.version < AMD_TRESSFX_VERSION_MAJOR) + { + return false; + } + + unsigned int numStrandsInFile = header.numHairStrands; + + // We make the number of strands be multiple of TRESSFX_SIM_THREAD_GROUP_SIZE. + m_numGuideStrands = (numStrandsInFile - numStrandsInFile % TRESSFX_SIM_THREAD_GROUP_SIZE) + TRESSFX_SIM_THREAD_GROUP_SIZE; + + m_numVerticesPerStrand = header.numVerticesPerStrand; + + // Make sure number of vertices per strand is greater than two and less than or equal to + // thread group size (64). Also thread group size should be a mulitple of number of + // vertices per strand. So possible number is 4, 8, 16, 32 and 64. + TRESSFX_ASSERT( + m_numVerticesPerStrand > 2 && m_numVerticesPerStrand <= TRESSFX_SIM_THREAD_GROUP_SIZE && + TRESSFX_SIM_THREAD_GROUP_SIZE % m_numVerticesPerStrand == 0); + + m_numFollowStrandsPerGuide = 0; + m_numTotalStrands = + m_numGuideStrands; // Until we call GenerateFollowHairs, the number of total strands is equal to the number of guide strands. + m_numGuideVertices = m_numGuideStrands * m_numVerticesPerStrand; + m_numTotalVertices = m_numGuideVertices; // Again, the total number of vertices is equal to the number of guide vertices here. + + TRESSFX_ASSERT( + m_numTotalVertices % TRESSFX_SIM_THREAD_GROUP_SIZE == 0); // number of total vertices should be multiple of thread group size. + // This assert is actually redundant because we already made + // m_numGuideStrands and m_numTotalStrands are multiple of thread + // group size. Just demonstrating the requirement for number of + // vertices here in case you are to make your own loader. + + m_positions.resize(m_numTotalVertices); // size of m_positions = number of total vertices * sizeo of each position vector. + + // Read position data from the io stream. + stream->Seek(header.offsetVertexPosition + sizeof(TressFXCombinedHairFileHeader), AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + stream->Read(numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), (void*)m_positions.data()); + // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs + // to generate follow hairs, m_positions will be re-allocated. + + // We need to make up some strands to fill up the buffer because the number of strands from stream is not necessarily multile of + // thread size. + AMD::int32 numStrandsToMakeUp = m_numGuideStrands - numStrandsInFile; + + for (AMD::int32 i = 0; i < numStrandsToMakeUp; ++i) + { + for (AMD::int32 j = 0; j < m_numVerticesPerStrand; ++j) + { + AMD::int32 indexLastVertex = (numStrandsInFile - 1) * m_numVerticesPerStrand + j; + AMD::int32 indexVertex = (numStrandsInFile + i) * m_numVerticesPerStrand + j; + m_positions[indexVertex] = m_positions[indexLastVertex]; + } + } + + // Calculate bounding box and check if it exported in meters. + AZ::Aabb bbox = AZ::Aabb::CreateNull(); + for (AMD::int32 i = 0; i < m_numTotalVertices; ++i) + { + bbox.AddPoint(AZ::Vector3(m_positions[i].x, m_positions[i].y, m_positions[i].z)); + } + AZ_Error("TressFXAsset", bbox.GetXExtent() < s_hairBoundingBoxMaxExtent && + bbox.GetYExtent() < s_hairBoundingBoxMaxExtent && bbox.GetZExtent() < s_hairBoundingBoxMaxExtent, + "Hair units seem to be in cm, creating extremely large hair - please export again using meters"); + + // Read strand UVs + stream->Seek(header.offsetStrandUV + sizeof(TressFXCombinedHairFileHeader), AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + m_strandUV.resize(m_numTotalStrands); // If we call GenerateFollowHairs to generate follow hairs, + // m_strandUV will be re-allocated. + + stream->Read(numStrandsInFile * sizeof(AMD::float2), (void*)m_strandUV.data()); + + // Fill up the last empty space + AMD::int32 indexLastStrand = (numStrandsInFile - 1); + + for (int i = 0; i < numStrandsToMakeUp; ++i) + { + AMD::int32 indexStrand = (numStrandsInFile + i); + m_strandUV[indexStrand] = m_strandUV[indexLastStrand]; + } + + m_followRootOffsets.resize(m_numTotalStrands); + + // Fill m_followRootOffsets with zeros + memset(m_followRootOffsets.data(), 0, m_numTotalStrands * sizeof(AMD::float4)); + + return true; + } + + // This generates follow hairs around loaded guide hairs procedually with random distribution within the max radius input. + // Calling this is optional. + bool TressFXAsset::GenerateFollowHairs(int numFollowHairsPerGuideHair, float tipSeparationFactor, float maxRadiusAroundGuideHair) + { + TRESSFX_ASSERT(numFollowHairsPerGuideHair >= 0); + + m_numFollowStrandsPerGuide = numFollowHairsPerGuideHair; + + // Nothing to do, just exit. + if (numFollowHairsPerGuideHair == 0) + return false; + + // Recompute total number of hair strands and vertices with considering number of follow hairs per a guide hair. + m_numTotalStrands = m_numGuideStrands * (m_numFollowStrandsPerGuide + 1); + m_numTotalVertices = m_numTotalStrands * m_numVerticesPerStrand; + + // keep the old buffers until the end of this function. + std::vector positionsGuide = m_positions; + std::vector strandUVGuide = m_strandUV; + + // re-allocate all buffers + m_positions.resize(m_numTotalVertices); + m_strandUV.resize(m_numTotalStrands); + + m_followRootOffsets.resize(m_numTotalStrands); + + // type-cast to Vector3 to handle data easily. + Vector3* pos = m_positions.data(); + Vector3* followOffset = m_followRootOffsets.data(); + + // Generate follow hairs + for (int i = 0; i < m_numGuideStrands; i++) + { + int indexGuideStrand = i * (m_numFollowStrandsPerGuide + 1); + int indexRootVertMaster = indexGuideStrand * m_numVerticesPerStrand; + + memcpy(&pos[indexRootVertMaster], &positionsGuide[i * m_numVerticesPerStrand], sizeof(Vector3) * m_numVerticesPerStrand); + m_strandUV[indexGuideStrand] = strandUVGuide[i]; + + followOffset[indexGuideStrand].Set(0, 0, 0); + followOffset[indexGuideStrand].w = (float)indexGuideStrand; + Vector3 v01 = pos[indexRootVertMaster + 1] - pos[indexRootVertMaster]; + v01.Normalize(); + + // Find two orthogonal unit tangent vectors to v01 + Vector3 t0, t1; + GetTangentVectors(v01, t0, t1); + + for (int j = 0; j < m_numFollowStrandsPerGuide; j++) + { + int indexStrandFollow = indexGuideStrand + j + 1; + int indexRootVertFollow = indexStrandFollow * m_numVerticesPerStrand; + + m_strandUV[indexStrandFollow] = m_strandUV[indexGuideStrand]; + + // offset vector from the guide strand's root vertex position + Vector3 offset = GetRandom(-maxRadiusAroundGuideHair, maxRadiusAroundGuideHair) * t0 + GetRandom(-maxRadiusAroundGuideHair, maxRadiusAroundGuideHair) * t1; + followOffset[indexStrandFollow] = offset; + followOffset[indexStrandFollow].w = (float)indexGuideStrand; + + for (int k = 0; k < m_numVerticesPerStrand; k++) + { + const Vector3* guideVert = &pos[indexRootVertMaster + k]; + Vector3* followVert = &pos[indexRootVertFollow + k]; + + float factor = tipSeparationFactor * ((float)k / ((float)m_numVerticesPerStrand)) + 1.0f; + *followVert = *guideVert + offset * factor; + (*followVert).w = guideVert->w; + } + } + } + + return true; + } + + bool TressFXAsset::ProcessAsset() + { + m_strandTypes.resize(m_numTotalStrands); + m_tangents.resize(m_numTotalVertices); + m_restLengths.resize(m_numTotalVertices); + m_thicknessCoeffs.resize(m_numTotalVertices); + m_triangleIndices.resize(GetNumHairTriangleIndices()); + + // compute tangent vectors + ComputeStrandTangent(); + + // compute thickness coefficients + ComputeThicknessCoeffs(); + + // compute rest lengths + ComputeRestLengths(); + + // triangle index + FillTriangleIndexArray(); + + for (int i = 0; i < m_numTotalStrands; i++) + m_strandTypes[i] = 0; + + return true; + } + + void TressFXAsset::FillTriangleIndexArray() + { + TRESSFX_ASSERT(m_numTotalVertices == m_numTotalStrands * m_numVerticesPerStrand); + TRESSFX_ASSERT(m_triangleIndices.size() != 0); + + AMD::int32 id = 0; + int iCount = 0; + + for (int i = 0; i < m_numTotalStrands; i++) + { + for (int j = 0; j < m_numVerticesPerStrand - 1; j++) + { + m_triangleIndices[iCount++] = 2 * id; + m_triangleIndices[iCount++] = 2 * id + 1; + m_triangleIndices[iCount++] = 2 * id + 2; + m_triangleIndices[iCount++] = 2 * id + 2; + m_triangleIndices[iCount++] = 2 * id + 1; + m_triangleIndices[iCount++] = 2 * id + 3; + + id++; + } + + id++; + } + + TRESSFX_ASSERT(iCount == 6 * m_numTotalStrands * (m_numVerticesPerStrand - 1)); // iCount == GetNumHairTriangleIndices() + } + + void TressFXAsset::ComputeStrandTangent() + { + Vector3* pos = (Vector3*)m_positions.data(); + Vector3* tan = (Vector3*)m_tangents.data(); + + for (int iStrand = 0; iStrand < m_numTotalStrands; ++iStrand) + { + int indexRootVertMaster = iStrand * m_numVerticesPerStrand; + + // vertex 0 + { + Vector3& vert_0 = pos[indexRootVertMaster]; + Vector3& vert_1 = pos[indexRootVertMaster + 1]; + + Vector3 tangent = vert_1 - vert_0; + tangent.Normalize(); + tan[indexRootVertMaster] = tangent; + } + + // vertex 1 through n-1 + for (int i = 1; i < (int)m_numVerticesPerStrand - 1; i++) + { + Vector3& vert_i_minus_1 = pos[indexRootVertMaster + i - 1]; + Vector3& vert_i = pos[indexRootVertMaster + i]; + Vector3& vert_i_plus_1 = pos[indexRootVertMaster + i + 1]; + + Vector3 tangent_pre = vert_i - vert_i_minus_1; + tangent_pre.Normalize(); + + Vector3 tangent_next = vert_i_plus_1 - vert_i; + tangent_next.Normalize(); + + Vector3 tangent = tangent_pre + tangent_next; + tangent = tangent.Normalize(); + + tan[indexRootVertMaster + i] = tangent; + } + } + } + + void TressFXAsset::ComputeThicknessCoeffs() + { + Vector3* pos = (Vector3*)m_positions.data(); + + int index = 0; + + for (int iStrand = 0; iStrand < m_numTotalStrands; ++iStrand) + { + int indexRootVertMaster = iStrand * m_numVerticesPerStrand; + float strandLength = 0; + float tVal = 0; + + // vertex 1 through n + for (int i = 1; i < (int)m_numVerticesPerStrand; ++i) + { + Vector3& vert_i_minus_1 = pos[indexRootVertMaster + i - 1]; + Vector3& vert_i = pos[indexRootVertMaster + i]; + + Vector3 vec = vert_i - vert_i_minus_1; + float disSeg = vec.Length(); + + tVal += disSeg; + strandLength += disSeg; + } + + for (int i = 0; i < (int)m_numVerticesPerStrand; ++i) + { + tVal /= strandLength; + m_thicknessCoeffs[index++] = sqrt(1.f - tVal * tVal); + } + } + } + + void TressFXAsset::ComputeRestLengths() + { + Vector3* pos = (Vector3*)m_positions.data(); + float* restLen = (float*)m_restLengths.data(); + + int index = 0; + + // Calculate rest lengths + for (int i = 0; i < m_numTotalStrands; i++) + { + int indexRootVert = i * m_numVerticesPerStrand; + + for (int j = 0; j < m_numVerticesPerStrand - 1; j++) + { + restLen[index++] = + (pos[indexRootVert + j] - pos[indexRootVert + j + 1]).Length(); + } + + // Since number of edges are one less than number of vertices in hair strand, below + // line acts as a placeholder. + restLen[index++] = 0; + } + } + + void TressFXAsset::GetBonesNames(FILE* ioObject, std::vector& boneNames) + { + AMD::int32 numOfBones = 0; + EI_Seek(ioObject, 0); + EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + + // boneNames.reserve(numOfBones); + boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + + AMD::int32 charLen = 0; + EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + + char boneName[128]; + EI_Read(boneName, sizeof(char) * charLen, ioObject); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + boneNames[i] = std::string(boneName); + } + } + + void TressFXAsset::GetBonesNames(AZ::Data::AssetDataStream* stream, std::vector& boneNames) + { + AMD::int32 numOfBones = 0; + stream->Read(sizeof(AMD::int32), &numOfBones); + + boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + + AMD::int32 charLen = 0; + stream->Read(sizeof(AMD::int32), &charLen); // character length includes null termination already. + + char boneName[128]; + stream->Read(sizeof(char) * charLen, &boneName); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + boneNames[i] = std::string(boneName); + } + } + + + bool TressFXAsset::LoadBoneData(FILE* ioObject, std::vector skeletonBoneIndices) + { + m_boneSkinningData.resize(0); + + AMD::int32 numOfBones = 0; + EI_Seek(ioObject, 0); + EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + + if (skeletonBoneIndices.size() != numOfBones) + { + TRESSFX_ASSERT(skeletonBoneIndices.size() != numOfBones); + return false; + } + + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + + AMD::int32 charLen = 0; + EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + + char boneName[128]; + EI_Read(boneName, sizeof(char) * charLen, ioObject); + } + + // Reading the number of strands + AMD::int32 numOfStrandsInStream = 0; + EI_Read((char*)&numOfStrandsInStream, sizeof(AMD::int32), ioObject); + + //If the number of strands from the input stream (tfxbone) is bigger than what we already know from tfx, something is wrong. + if (m_numGuideStrands < numOfStrandsInStream) + return 0; + + m_boneSkinningData.resize(m_numTotalStrands); + + TressFXBoneSkinningData skinData = TressFXBoneSkinningData(); + for (int i = 0; i < numOfStrandsInStream; ++i) + { + AMD::int32 index = 0; // Well, we don't really use this here. + EI_Read((char*)&index, sizeof(AMD::int32), ioObject); + + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + AMD::int32 boneIndex; + EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + assert(boneIndex >= 0); + skinData.boneIndex[j] = (float)skeletonBoneIndices[boneIndex]; // Change the joint index to be what the engine wants + EI_Read((char*)&skinData.weight[j], sizeof(AMD::real32), ioObject); + } + + float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; + + AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); + assert(skinData.weight[0] != 0.0f); + + // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. + // This is safe because the corresponding weight should be zero anyway. + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + if (skinData.boneIndex[j] == -1.f) + { + skinData.boneIndex[j] = 0; + skinData.weight[j] = 0; + } + } + + // Setting the data for the leading strand of each group + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + // Once the entire skinning data was filled, fill skinning info for markup hair + // found at the end of the array + for (int i = numOfStrandsInStream; i < m_numGuideStrands; ++i) + { + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + return true; + } + + bool TressFXAsset::LoadBoneData(AZ::Data::AssetDataStream* stream) + { + m_boneSkinningData.resize(0); + + AMD::int32 numOfBones = 0; + stream->Read(sizeof(AMD::int32), &numOfBones); + + m_boneNames.resize(numOfBones); + for (int i = 0; i < numOfBones; i++) + { + int boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + + AMD::int32 charLen = 0; + stream->Read(sizeof(AMD::int32), &charLen); // character length includes null termination already. + + char boneName[128]; + stream->Read(sizeof(char) * charLen, &boneName); + boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. + m_boneNames[i] = std::string(boneName); + } + + // Reading the number of strands + AMD::int32 numOfStrandsInStream = 0; + stream->Read(sizeof(AMD::int32), &numOfStrandsInStream); + + // If the number of strands from the input stream (tfxbone) is bigger than what we already know from tfx, something is wrong. + if (m_numGuideStrands < numOfStrandsInStream) + return 0; + + //AMD::int32 boneSkinningMemSize = m_numTotalStrands * sizeof(TressFXBoneSkinningData); + m_boneSkinningData.resize(m_numTotalStrands); + + TressFXBoneSkinningData skinData = TressFXBoneSkinningData(); + for (int i = 0; i < numOfStrandsInStream; ++i) + { + AMD::int32 index = 0; // Well, we don't really use this here. + stream->Read(sizeof(AMD::int32), &index); + + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + AMD::int32 boneIndex; + stream->Read(sizeof(AMD::int32), &boneIndex); + assert(boneIndex >= 0); + skinData.boneIndex[j] = (float)boneIndex; // Stores the bone index from tfx directly + stream->Read(sizeof(AMD::real32), &skinData.weight[j]); + } + + float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; + + AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); + assert(skinData.weight[0] != 0.0f); + + // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. + // This is safe because the corresponding weight should be zero anyway. + for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) + { + if (skinData.boneIndex[j] == -1.f) + { + skinData.boneIndex[j] = 0; + skinData.weight[j] = 0; + } + } + + // Setting the data for the leading strand of each group + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + // Once the entire skinning data was filled, fill skinning info for markup hair + // found at the end of the array + for (int i = numOfStrandsInStream; i < m_numGuideStrands; ++i) + { + m_boneSkinningData[i * (m_numFollowStrandsPerGuide + 1)] = skinData; + } + + return true; + } + + bool TressFXAsset::LoadCombinedHairData(AZ::Data::AssetDataStream* stream) + { + // Seek to the beginning of the file + stream->Seek(0, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + + // Read the header of .tfxhair file + TressFXCombinedHairFileHeader header; + stream->Read(sizeof(TressFXCombinedHairFileHeader), (void*)&header); + + // Load the hair data + stream->Seek(header.offsetTFX, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + bool success = LoadHairData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Guide Hair asset data"); + return false; + } + + // Adi: Hack code + const int numFollowHairs = 2; + const float tipSeparationFactor = 2.0f; + const float maxRadiusAroundGuideHair = 0.012f; + + success = GenerateFollowHairs(numFollowHairs, tipSeparationFactor, maxRadiusAroundGuideHair); + success &= ProcessAsset(); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Follow Hair asset data"); + return false; + } + + // Seek to the beginning of tfxbone file + stream->Seek(header.offsetTFXBone, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + + // Load the bones data + success &= LoadBoneData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Error in Hair Bones asset data"); + return false; + } + + // Since the tfxmesh file could be optional, check if we need to export it. + if (header.offsetTFXMesh != stream->GetLength()) + { + // Seek to the beginning of tfxmesh file + stream->Seek(header.offsetTFXMesh, AZ::IO::GenericStream::SeekMode::ST_SEEK_BEGIN); + m_collisionMesh = std::make_unique(); + success &= m_collisionMesh->LoadMeshData(stream); + if (!success) + { + AZ_Warning("Hair Gem", false, "Loading: Possibly Error in Hair collision object data - this file is optional"); + return false; + } + } + + return true; + } + + bool TressFXAsset::GenerateLocaltoGlobalHairBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup) + { + return GenerateLocaltoGlobalBoneIndexLookup(globalBoneIndexMap, m_boneNames, outLookup); + } + + bool TressFXAsset::GenerateLocaltoGlobalCollisionBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup) + { + if (m_collisionMesh) + { + return GenerateLocaltoGlobalBoneIndexLookup(globalBoneIndexMap, m_collisionMesh->m_boneNames, outLookup); + } + return true; // do not touch outlookUp, simply return true if there is no associated collision mesh + } + + bool TressFXAsset::GenerateLocaltoGlobalBoneIndexLookup( const BoneNameToIndexMap& boneIndicesMap, + const std::vector& boneNames, LocalToGlobalBoneIndexLookup& outLookup) + { + uint32 numMismatchedBone = 0; + outLookup.resize(boneNames.size()); + for (int i = 0; i < m_boneNames.size(); ++i) + { + const std::string& boneName = m_boneNames[i]; + if (boneIndicesMap.find(boneName) == boneIndicesMap.end()) + { + // Error handling. + numMismatchedBone++; + continue; + } + outLookup[i] = boneIndicesMap.at(boneName); + } + + if (numMismatchedBone > 0) + { + AZ_Error( "Hair Gem", false, "%zu bones cannot be found under the emotionfx actor. " + "It is likely that the hair asset is incompatible with the actor asset.", numMismatchedBone); + return false; + } + return true; + } +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h new file mode 100644 index 0000000000..8d90b25e0b --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.h @@ -0,0 +1,187 @@ +//--------------------------------------------------------------------------------------- +// Loads and processes TressFX files. +// Inputs are binary files/streams/blobs +// Outputs are raw data that will mostly end up on the GPU. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +#pragma once + +#include +#include +#include + +#include + + +#include +#include +#include +#include +#include + +#include + +namespace AZ::Data +{ + class AssetDataStream; +} + +namespace AMD +{ +#define TRESSFX_MAX_INFLUENTIAL_BONE_COUNT 4 + + static constexpr char TFXFileExtension[] = "tfx"; // Contains the hair vertices data. + static constexpr char TFXBoneFileExtension[] = "tfxbone"; // Contains the hair skinning data. + static constexpr char TFXMeshFileExtension[] = "tfxmesh"; // Contains the hair collision object. + static constexpr char TFXCombinedFileExtension[] = "tfxhair"; // A container file with all the above data. + static constexpr float s_hairBoundingBoxMaxExtent = 10.0f; // Value used to check if the scale of the hair exceed usual. + + // The header struct for the .tfxhair file generated in cache. The .tfxhair file is a combined file of .tfx, .tfxbone + // and .tfxmesh. + struct TressFXCombinedHairFileHeader + { + uint64 offsetTFX = 0; + uint64 offsetTFXBone = 0; + uint64 offsetTFXMesh = 0; + }; + + struct TressFXBoneSkinningData + { // Possible improvement can be to use int 32 with high / low bits encoding + float boneIndex[TRESSFX_MAX_INFLUENTIAL_BONE_COUNT]; + float weight[TRESSFX_MAX_INFLUENTIAL_BONE_COUNT]; + }; + + #define EI_Read(ptr, size, pFile) fread(ptr, size, 1, pFile) + #define EI_Seek(pFile, offset) fseek(pFile, offset, SEEK_SET) + + using LocalToGlobalBoneIndexLookup = std::vector; // Index -> TressFX Bone Index (Local set of bones) + // Value -> EmotionFX Bone Index (Global set of bones) + using BoneNameToIndexMap = std::unordered_map; + + class TressFXCollisionMesh + { + public: + std::vector m_vertices; + std::vector m_normals; + std::vector m_indices; + + // The skinning for the collision mesh only. Do not confuse it with hair skinning or the object skinning. + std::vector m_boneSkinningData; + + std::vector m_boneNames; + + // This function is mimicking LoadTressFXCollisionMeshData in TressFXBoneSkinnin + bool LoadMeshData(AZ::Data::AssetDataStream* stream); + }; + + class TressFXAsset + { + public: + TressFXAsset(); + ~TressFXAsset(); + + // Hair data from *.tfx + std::vector m_positions; // Inspite of the confusing name, this is actually Vector4 with w=1.0 + std::vector m_strandUV; + std::vector m_tangents; + std::vector m_followRootOffsets; + std::vector m_strandTypes; + std::vector m_thicknessCoeffs; + std::vector m_restLengths; + std::vector m_triangleIndices; + + + // Bone skinning data from *.tfxbone - this represents the bones Id affecting hairs (not that actual bone structure) + std::vector m_boneSkinningData; + + // Stores a mapping of the bone index to actual bone names. + std::vector m_boneNames; + + // counts on hair data + AMD::int32 m_numTotalStrands; + AMD::int32 m_numTotalVertices; + AMD::int32 m_numVerticesPerStrand; + AMD::int32 m_numGuideStrands; + AMD::int32 m_numGuideVertices; + AMD::int32 m_numFollowStrandsPerGuide; + + // Currently we only deal with a single collision mesh assumed to be the skinned mesh. + // This might not always be the case and a new scheme might be required. + std::unique_ptr m_collisionMesh; + + // Loads *.tfx hair data + bool LoadHairData(FILE* ioObject); + + // Generates follow hairs procedurally. If numFollowHairsPerGuideHair is zero, then this function won't do anything. + bool GenerateFollowHairs(int numFollowHairsPerGuideHair = 0, float tipSeparationFactor = 0, float maxRadiusAroundGuideHair = 0); + + // Computes various parameters for simulation and rendering. After calling this function, data is ready to be passed to hair object. + bool ProcessAsset(); + + //! Given the *.tfxbon file that contains bones hair skinning data, this method returns + //! the used bones names array of the current hair object so it can be matched with + //! the skeleton bones names to get the indices in the global skeleton array. + void GetBonesNames(FILE* ioObject, std::vector& boneNames); + //! Given the bones hair skinning data file and the pairing local indices to skeleton indices array, + //! this method convert all bones indices per vertex and creates the skinning data array. + bool LoadBoneData(FILE* ioObject, std::vector skeletonBoneIndices); + + // This function load the combined hair data (.tfxhair file) generated in the cache using the custom builder. + // Inside the function it will call LoadHairData, LoadBoneData and LoadCollisionData function. The TressFX asset + // will be fully populated after this function return true. + bool LoadCombinedHairData(AZ::Data::AssetDataStream* stream); + + // Similar function to the above but read the assetDataStream instead. Those function will eventually replacing their counterpart. + // Notice: The loadCombineHairData will control the seek position of the stream, which guaranteed those stream will be at the correct + // position when entering those function. + bool LoadHairData(AZ::Data::AssetDataStream* stream); + void GetBonesNames(AZ::Data::AssetDataStream* stream, std::vector& boneNames); + bool LoadBoneData(AZ::Data::AssetDataStream* stream); + + inline AMD::uint32 GetNumHairSegments() { return m_numTotalStrands * (m_numVerticesPerStrand - 1); } + inline AMD::uint32 GetNumHairTriangleIndices() { return 6 * GetNumHairSegments(); } + inline AMD::uint32 GetNumHairLineIndices() { return 2 * GetNumHairSegments(); } + + // Generates a local to global bone index lookup for hair and collision. We are passing only a subset of the full bone information found in an + // emfx actor to the shader. The purpose of the index lookup is to map an emfx actor bone to the subset consisting of + // TressFX bones. Essentially, the full set of bones found in an emfx actor are the global bones, while the bones in a + // TressFX asset are the local bones. + bool GenerateLocaltoGlobalHairBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup); + bool GenerateLocaltoGlobalCollisionBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap, LocalToGlobalBoneIndexLookup& outLookup); + private: + + // Generates a local to global bone index lookup for specified bones only. This can be called if we only need information + // for certain bones such as ones contained in a collision mesh. + bool GenerateLocaltoGlobalBoneIndexLookup(const BoneNameToIndexMap& globalBoneIndexMap /*Global BoneNames to BoneIndex*/, + const std::vector& boneNames /*BoneNames used by this skinning data*/, LocalToGlobalBoneIndexLookup& outLookup); + + // Helper functions for ProcessAsset. + void ComputeThicknessCoeffs(); + void ComputeStrandTangent(); + void ComputeRestLengths(); + void FillTriangleIndexArray(); + }; + // #endif // AMD_TRESSFX_ASSET_H + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp new file mode 100644 index 0000000000..911ccf4719 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.cpp @@ -0,0 +1,522 @@ +// ---------------------------------------------------------------------------- +// Compute-based skinning. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXBoneSkinning.h" + +// TressFX +#include "EngineInterface.h" // Engine and GLTF API-specific implementation pull ins +#include "TressFXHairObject.h" +#include "TressFXLayouts.h" +#include +#include +#include + +int static SuStringTokenizer(const std::string& input, + const std::string& delimiter, + std::vector& results, + bool includeEmpties) +{ + int iPos = 0; + int newPos = -1; + int sizeS2 = (int)delimiter.length(); + int isize = (int)input.length(); + + if (isize == 0 || sizeS2 == 0) + return 0; + + std::vector positions; + newPos = (int)input.find(delimiter, 0); + + if (newPos == std::string::npos) + return 0; + + int numFound = 0; + + while (newPos >= iPos) + { + numFound++; + positions.push_back(newPos); + iPos = newPos; + newPos = (int)input.find(delimiter, iPos + sizeS2); + } + + if (numFound == 0) + return 0; + + for (int i = 0; i <= (int)positions.size(); ++i) + { + std::string s(""); + + if (i == 0) + { + s = input.c_str() + i; + s = s.substr(0, positions[i]); + } + else + { + int offset = positions[i - 1] + sizeS2; + + if (offset < isize) + { + if (i == (int)positions.size()) + s = input.c_str() + offset; + else if (i > 0) + { + s = input.c_str() + positions[i - 1] + sizeS2; + s = s.substr(0, positions[i] - positions[i - 1] - sizeS2); + } + } + } + + if (includeEmpties || (s.length() > 0)) + results.push_back(s); + } + + return ++numFound; +} + +bool TressFXBoneSkinning::LoadTressFXCollisionMeshData( + EI_Scene * scene, + const char* filePath, + int skinNumber, + const char* followBone) +{ + m_skinNumber = skinNumber; + + m_pTempIndices.clear(); + m_pTempNormals.clear(); + m_pTempVertices.clear(); + + std::ifstream stream(filePath); + + if (!stream.is_open()) + return false; + + std::string sLine; + std::vector sTokens; + + int numOfBones; + + std::vector boneNames; + while (std::getline(stream, sLine)) + { + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + + std::string token; + + if (numFound > 0) + { + token = sTokens[0]; + } + else + { + token = sLine; + } + + // load bone names. + if (token.find("numOfBones") != std::string::npos) + { + numOfBones = atoi(sTokens[1].c_str()); + int countBone = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + boneNames.push_back(sTokens[1]); + countBone++; + + if (countBone == numOfBones) + break; + } + } + if (token.find("numOfVertices") != std::string::npos) // load bone indices and weights for each strand + { + m_NumVertices = (AMD::uint32)atoi(sTokens[1].c_str()); + boneSkinningData.resize(m_NumVertices); + m_pTempVertices.resize(m_NumVertices); + m_pTempNormals.resize(m_NumVertices); + memset(boneSkinningData.data(), 0, sizeof(TressFXBoneSkinningData) * m_NumVertices); + + int index = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + assert(numFound == 15); + + int vertexIndex = atoi(sTokens[0].c_str()); + assert(vertexIndex == index); + + AMD::float3& pos = m_pTempVertices[index]; + pos.x = (float)atof(sTokens[1].c_str()); + pos.y = (float)atof(sTokens[2].c_str()); + pos.z = (float)atof(sTokens[3].c_str()); + + AMD::float3& normal = m_pTempNormals[index]; + normal.x = (float)atof(sTokens[4].c_str()); + normal.y = (float)atof(sTokens[5].c_str()); + normal.z = (float)atof(sTokens[6].c_str()); + + TressFXBoneSkinningData skinData; + + + int boneIndex = atoi(sTokens[7].c_str()); + int engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[0] = (float)engineIndex; + + boneIndex = atoi(sTokens[8].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[1] = (float)engineIndex; + + boneIndex = atoi(sTokens[9].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[2] = (float)engineIndex; + + boneIndex = atoi(sTokens[10].c_str()); + engineIndex = scene->GetBoneIdByName(m_skinNumber, boneNames[boneIndex].c_str()); + skinData.boneIndex[3] = (float)engineIndex; + + skinData.weight[0] = (float)atof(sTokens[11].c_str()); + skinData.weight[1] = (float)atof(sTokens[12].c_str()); + skinData.weight[2] = (float)atof(sTokens[13].c_str()); + skinData.weight[3] = (float)atof(sTokens[14].c_str()); + + boneSkinningData[index] = skinData; + + ++index; + + if (index == m_NumVertices) + break; + } + } + else if (token.find("numOfTriangles") != std::string::npos) // triangle indices + { + m_NumTriangles = atoi(sTokens[1].c_str()); + int numIndices = m_NumTriangles * 3; + m_pTempIndices.resize(numIndices); + int index = 0; + + while (1) + { + // next line + std::getline(stream, sLine); + + if (sLine.length() == 0) + continue; + + // If # is in the very first column in the line, it is a comment. + if (sLine[0] == '#') + continue; + + sTokens.clear(); + int numFound = SuStringTokenizer(sLine, " ", sTokens, false); + assert(numFound == 4); + + int triangleIndex = atoi(sTokens[0].c_str()); + assert(triangleIndex == index); + + m_pTempIndices[index * 3 + 0] = atoi(sTokens[1].c_str()); + m_pTempIndices[index * 3 + 1] = atoi(sTokens[2].c_str()); + m_pTempIndices[index * 3 + 2] = atoi(sTokens[3].c_str()); + + + ++index; + + if (index == m_NumTriangles) + break; + } + } + } + m_pScene = scene; + m_followBone = scene->GetBoneIdByName(skinNumber, followBone); + return true; +} + +void TressFXBoneSkinning::Initialize(EI_RenderTargetSet * renderTargetSet, EI_Device* pDevice, + EI_CommandContext& commandContext, const char * name) +{ + // TODO: Following code should be moved to TransarencyPlugin.cpp. + + // load an effect for rendering + EI_BindLayout * layouts[] = { GetBoneSkinningMeshLayout() }; + //std::vector inputs; + + EI_PSOParams psoParams; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = renderTargetSet; + m_pRenderEffect = pDevice->CreateGraphicsPSO("TressFXBoneSkinning.hlsl", "BoneSkinningVisualizationVS", "TressFXBoneSkinning.hlsl", "BoneSkinningVisualizationPS", psoParams); + + // create a vertex and normal buffer + size_t vertexBlockSize = GetSizeOfMeshElement(); + std::vector dataVB((AMD::uint32)(vertexBlockSize * m_NumVertices)); //position + normal + + for (size_t i = 0; i < m_NumVertices; ++i) + { + // position + memcpy(&dataVB[i * vertexBlockSize], &m_pTempVertices[i], sizeof(AMD::float3)); + + // normal + memcpy(&dataVB[i * vertexBlockSize + sizeof(AMD::float4)], &m_pTempNormals[i], sizeof(AMD::float3)); + } + + // create an index buffer + m_numIndices = (int)m_pTempIndices.size(); + m_pIndexBuffer = pDevice->CreateBufferResource(sizeof(AMD::int32), m_numIndices, EI_BF_INDEXBUFFER, "IndexBuffer"); + commandContext.UpdateBuffer(m_pIndexBuffer.get(), m_pTempIndices.data()); + + // UAV + m_CollMeshVertPositionsUAV = pDevice->CreateBufferResource((int)vertexBlockSize, (int)m_NumVertices, EI_BF_NEEDSUAV, "CollMesh"); + + EI_Barrier prepareMeshVertPositions[] = + { + { m_CollMeshVertPositionsUAV.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(prepareMeshVertPositions), prepareMeshVertPositions); + commandContext.UpdateBuffer(m_CollMeshVertPositionsUAV.get(), dataVB.data()); + + // SRV + { + m_BoneSkinningDataSRV = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningData), m_NumVertices, 0, "BoneSkinningData"); + commandContext.UpdateBuffer(m_BoneSkinningDataSRV.get(), boneSkinningData.data()); + + boneSkinningData.resize(0); + } + + { + m_InitialVertexPositionsSRV = pDevice->CreateBufferResource((AMD::uint32)vertexBlockSize, m_NumVertices, 0, "InitialVertexPositions"); + commandContext.UpdateBuffer(m_InitialVertexPositionsSRV.get(), dataVB.data()); + } + + { + m_TrimeshVertexIndicesSRV = pDevice->CreateBufferResource(sizeof(AMD::int32), (int)m_pTempIndices.size(), 0, "CSSkinningMeshIndices"); + commandContext.UpdateBuffer(m_TrimeshVertexIndicesSRV.get(), m_pTempIndices.data()); + } + + // constant buffer + m_pUniformBuffer = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningUniformBuffer), 1, EI_BF_UNIFORMBUFFER, "TressFXBoneSkinningUniformBuffer"); + + EI_Barrier finishUpload[] = + { + { m_CollMeshVertPositionsUAV.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_BoneSkinningDataSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_InitialVertexPositionsSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_TrimeshVertexIndicesSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(finishUpload), finishUpload); + + // Bind set + EI_BindSetDescription bindSet = { { m_BoneSkinningDataSRV.get(), m_InitialVertexPositionsSRV.get(), m_CollMeshVertPositionsUAV.get(), m_pUniformBuffer.get() } }; + m_pBindSet = pDevice->CreateBindSet(GetBoneSkinningMeshLayout(), bindSet); + + // update bbox + Vector3 center = Vector3(0.0f, 0.0f, 0.0f); + for (int i = 0; i < m_pTempVertices.size(); ++i) + { + center = center + Vector3(&m_pTempVertices[i].x); + } + center = center / (float)m_pTempVertices.size(); + float radius = 0.0f; + for (int i = 0; i < m_pTempVertices.size(); ++i) { + Vector3 distance = Vector3(&m_pTempVertices[i].x) - center; + radius = fmaxf(radius, distance.Length()); + } + m_bbMin = { center.x - radius, center.y - radius, center.z - radius }; + m_bbMax = { center.x + radius, center.y + radius, center.z + radius }; + + // release vertex and index arrays on CPU. + m_pTempVertices.clear(); + m_pTempNormals.clear(); + m_pTempIndices.clear(); + + // set color + m_MeshColor = { 1.f, 0.0f, 0.0f }; + + // load a compute shader + m_pComputeEffectSkinning = pDevice->CreateComputeShaderPSO("TressFXBoneSkinning.hlsl", "BoneSkinning", layouts, 1); +} + +Vector3 TressFXBoneSkinning::SkinPosition( int i ) +{ + int global_id = 0; + + AMD::float3 vert = m_pTempVertices[global_id]; + XMVECTOR pos = { vert.x, vert.y, vert.z, 1.0f }; + AMD::float3 normal = m_pTempNormals[global_id]; + XMVECTOR n = { normal.x, normal.y, normal.z, 0.0f }; + + // compute a bone skinning transform + TressFXBoneSkinningData skinning = boneSkinningData[global_id]; + + std::vector& skinningMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + // Interpolate world space bone matrices using weights. + XMMATRIX bone_matrix = skinningMatrices[(int)skinning.boneIndex[0]] * skinning.weight[0]; + float weight_sum = skinning.weight[0]; + + // Each vertex gets influence from four bones. In case there are less than four bones, boneIndex and boneWeight would be zero. + // This number four was set in Maya exporter and also used in loader. So it should not be changed unless you have a very strong reason and are willing to go through all spots. + for (int i = 1; i < 4; i++) + { + if (skinning.weight[i] > 0) + { + bone_matrix += skinningMatrices[(int)skinning.boneIndex[i]] * skinning.weight[i]; + weight_sum += skinning.weight[i]; + } + } + + bone_matrix /= weight_sum; + + pos = XMVector4Transform( pos, bone_matrix); + //n = mul(float4(n.xyz, 0), bone_matrix).xyz; + return Vector3(0.0f, 0.0f, 0.0f); +} + +void TressFXBoneSkinning::GetBoundingBox(Vector3& min, Vector3& max) +{ + XMMATRIX m = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber)[m_followBone]; // root matrix + XMVECTOR minvec = { m_bbMin.x, m_bbMin.y, m_bbMin.z, 1.0f }; + XMVECTOR maxvec = { m_bbMax.x, m_bbMax.y, m_bbMax.z, 1.0f }; + XMVECTOR center = (maxvec + minvec) / 2.0; + XMVECTOR newcenter = XMVector4Transform(center, m); + + minvec += newcenter - center; + maxvec += newcenter - center; + + XMStoreFloat3((XMFLOAT3*)&min, minvec); + XMStoreFloat3((XMFLOAT3*)&max, maxvec); +} + +void TressFXBoneSkinning::GetInitialBoundingBox(Vector3& min, Vector3& max) +{ + min = m_bbMin; + max = m_bbMax; +} + +void TressFXBoneSkinning::Update(EI_CommandContext& commandContext, double fTime) +{ + if (!m_pComputeEffectSkinning || !m_pScene || !m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber).size()) + return; + + EI_Marker marker(commandContext, "BoneSkinningUpdate"); + + // update animation model before getting the skinning matrices. + //m_pModel->UpdateObject(fTime); + std::vector boneMatrices = m_pScene->GetWorldSpaceSkeletonMats(m_skinNumber); + const float* pBoneMatricesInWS = (const float*)&boneMatrices[0]; + + //----------------------------- + // 1. BoneSkinning + //----------------------------- + //const SuArray& m_BoneMatricesPerFrame = m_pModel->GetSkinningMatrices(); + + for (int i = 0; i < boneMatrices.size(); ++i) + { + m_uniformBufferData.g_BoneSkinningMatrix[i] = *((AMD::float4x4*)&boneMatrices[i]); + } + m_uniformBufferData.g_NumMeshVertices = { (int)m_NumVertices, 0, 0, 0 }; + m_uniformBufferData.cColor = m_MeshColor; + m_uniformBufferData.vLightDir = { 1.0f, 1.0f, 1.0f }; + m_uniformBufferData.mMW = m_pScene->GetMV(); + m_uniformBufferData.mMVP = m_pScene->GetMVP(); + + commandContext.UpdateBuffer(m_pUniformBuffer.get(), &m_uniformBufferData); + + commandContext.BindPSO(m_pComputeEffectSkinning.get()); + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + commandContext.BindSets(m_pComputeEffectSkinning.get(), 1, bindSets); + + // Run BoneSkinning + { + int numDispatchSize = + (int)ceil((float)m_NumVertices / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("BoneSkinning"); + } + + // State transition for DX12 + EI_Barrier flushSkinnedVerts[] = { { m_CollMeshVertPositionsUAV.get(), EI_STATE_UAV, EI_STATE_UAV } }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(flushSkinnedVerts), flushSkinnedVerts); +} + +// Adi: this is only the mesh debug render - not the actual skinned mesh +void TressFXBoneSkinning::DrawMesh(EI_CommandContext& commandContext) +{ + // draw the collision mesh + if (m_NumVertices > 0) + { + EI_Marker marker(commandContext, "BoneSkinningDrawMesh"); + // commandContext.BindPSO(m_pRenderEffect); + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + commandContext.BindSets(m_pRenderEffect.get(), 1, bindSets); + EI_IndexedDrawParams drawParams; + drawParams.numIndices = m_numIndices; + drawParams.numInstances = 1; + drawParams.pIndexBuffer = m_pIndexBuffer.get(); + commandContext.DrawIndexedInstanced(*m_pRenderEffect.get(), drawParams); + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h new file mode 100644 index 0000000000..5d45655822 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXBoneSkinning.h @@ -0,0 +1,138 @@ +// ---------------------------------------------------------------------------- +// Compute-based skinning. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef TRESSFXBONESKINNING_H_ +#define TRESSFXBONESKINNING_H_ + +// TressFX interfaces +#include "TressFXSDFInputMeshInterface.h" + +// TressFX +#include "TressFXAsset.h" +#include "TressFXCommon.h" +#include "AMD_Types.h" + +#include + +class EI_Scene; + +struct TressFXBoneSkinningUniformBuffer { + AMD::float4 cColor; + AMD::float4 vLightDir; + AMD::sint4 g_NumMeshVertices; + AMD::float4x4 mMW; + AMD::float4x4 mMVP; + AMD::float4x4 g_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; +}; + +// Adi: this structure is required to for computing the per-frame SDF +class TressFXBoneSkinning : public TressFXSDFInputMeshInterface +{ +public: + + // Initialize effects and buffers. + void Initialize(EI_RenderTargetSet * renderPass, EI_Device* pDevice, EI_CommandContext& commandContext, const char * name); + + // Draw the mesh for debug purpose + void DrawMesh(EI_CommandContext& commandContext); + + // Update and animate the mesh + void Update(EI_CommandContext& commandContext, double fTime); + + Vector3 SkinPosition(int i); + + //inline SuAnimatedModel* GetModel() { return m_pModel; } + + bool LoadTressFXCollisionMeshData(EI_Scene * scene, const char* filePath, int skinNumber, const char* followBone); + + // TressFXSDFInputMeshInterface + virtual EI_Resource& GetMeshBuffer() { return *m_CollMeshVertPositionsUAV; } + virtual EI_Resource& GetTrimeshVertexIndicesBuffer() + { + return *m_TrimeshVertexIndicesSRV; + } + virtual int GetNumMeshVertices() { return m_NumVertices; } + virtual int GetNumMeshTriangle() { return m_NumTriangles; } + virtual void GetBoundingBox(Vector3& min, Vector3& max); + virtual void GetInitialBoundingBox(Vector3& min, Vector3& max); + virtual size_t GetSizeOfMeshElement() + { + return 4 * sizeof(float) + 4 * sizeof(float); + } // position + normal + +private: + EI_Scene * m_pScene; + + std::vector m_pTempVertices; + std::vector m_pTempNormals; + std::vector m_pTempIndices; + + std::vector boneSkinningData; + + // shader for rendering + //SuEffectPtr m_pRenderEffect; + std::unique_ptr m_pRenderEffect; + + // compute shader for bone skinning + std::unique_ptr m_pComputeEffectSkinning; + + // color to render the mesh for debug purpose + AMD::float4 m_MeshColor; + + // Stats for mesh topology + AMD::uint32 m_NumVertices; + AMD::uint32 m_NumTriangles; // the size of indices buffer is 3 time of this. + + // UAV + std::unique_ptr m_CollMeshVertPositionsUAV; + + // SRV + std::unique_ptr m_TrimeshVertexIndicesSRV; + std::unique_ptr m_BoneSkinningDataSRV; + std::unique_ptr m_InitialVertexPositionsSRV; + + // uniform buffers + std::unique_ptr m_pUniformBuffer; + TressFXBoneSkinningUniformBuffer m_uniformBufferData; + + // Binding + std::unique_ptr m_pBindSet; + + // bounding box + Vector3 m_bbMin; + Vector3 m_bbMax; + + // GPU buffers + std::unique_ptr m_pIndexBuffer; + int m_numIndices; + + int m_skinNumber; + int m_followBone; + + // animated model associated to this hair. + //SuAnimatedModel* m_pModel; +}; + +#endif // TRESSFXBONESKINNING_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h new file mode 100644 index 0000000000..76168515ee --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXCommon.h @@ -0,0 +1,258 @@ +//--------------------------------------------------------------------------------------- +// Constant buffer layouts. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +#pragma once + +//#ifndef TRESSFXCOMMON_H_ +//#define TRESSFXCOMMON_H_ + +#include + +#define TRESSFX_COLLISION_CAPSULES 0 +#define TRESSFX_MAX_NUM_COLLISION_CAPSULES 8 + +#define TRESSFX_SIM_THREAD_GROUP_SIZE 64 + +#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4201) // disable warning C4201: nonstandard extension used : nameless struct/union +#endif + +namespace AMD +{ + struct float2 + { + union + { + struct + { + float x, y; + }; + float v[2]; + }; + }; + struct float3 + { + union + { + struct + { + float x, y, z; + }; + float v[3]; + }; + }; + struct float4 + { + union + { + struct + { + float x, y, z, w; + }; + float v[4]; + }; + }; + struct float4x4 + { + union + { + float4 r[4]; + float m[16]; + }; + }; + struct uint2 + { + union + { + struct + { + unsigned int x, y; + }; + unsigned int v[2]; + }; + }; + struct uint3 + { + union + { + struct + { + unsigned int x, y, z; + }; + unsigned int v[3]; + }; + }; + struct uint4 + { + union + { + struct + { + unsigned int x, y, z, w; + }; + unsigned int v[4]; + }; + }; + struct sint2 + { + union + { + struct + { + int x, y; + }; + int v[2]; + }; + }; + struct sint3 + { + union + { + struct + { + int x, y, z; + }; + int v[3]; + }; + }; + struct sint4 + { + union + { + struct + { + int x, y, z, w; + }; + int v[4]; + }; + }; + struct sshort2 + { + union + { + struct + { + short x, y; + }; + short v[2]; + }; + }; + struct sshort3 + { + union + { + struct + { + short x, y, z; + }; + short v[3]; + }; + }; + struct sshort4 + { + union + { + struct + { + short x, y, z, w; + }; + short v[4]; + }; + }; + struct sbyte2 + { + union + { + struct + { + signed char x, y; + }; + signed char v[2]; + }; + }; + struct sbyte3 + { + union + { + struct + { + signed char x, y, z; + }; + signed char v[3]; + }; + }; + struct sbyte4 + { + union + { + struct + { + signed char x, y, z, w; + }; + signed char v[4]; + }; + }; + +} // namespace AMD + +#ifdef _MSC_VER + #pragma warning(pop) +#endif + +#ifdef TRESSFX_NON_COPYABLE_MODERN_CPP + +class TressFXNonCopyable +{ +public: + TressFXNonCopyable() = default; + ~TressFXNonCopyable() = default; + +protected: + TressFXNonCopyable(const TressFXNonCopyable&) = delete; + void operator=(const TressFXNonCopyable&) = delete; +}; + +#else + +class TressFXNonCopyable +{ +public: + TressFXNonCopyable() {} + ~TressFXNonCopyable() {} + + TressFXNonCopyable(TressFXNonCopyable const&) = delete; + TressFXNonCopyable& operator=(TressFXNonCopyable const&) = delete; +}; + +#endif + +/// Computes the minimum +template +inline Type TressFXMin(Type a, Type b) +{ + return (a < b) ? a : b; +} + +//#endif // TRESSFXCOMMON_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h new file mode 100644 index 0000000000..e434660ac6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXConstantBuffers.h @@ -0,0 +1,258 @@ +//--------------------------------------------------------------------------------------- +// Constant buffer layouts. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include +#include + +// Contains data typically passed through constant buffers. + +namespace AMD +{ + struct TressFXViewParams + { + float4x4 mVP; + float4 vEye; + float4 vViewport; + float4x4 mInvViewProj; + }; + + struct TressFXSimulationParams + { + float4 m_Wind; + float4 m_Wind1; + float4 m_Wind2; + float4 m_Wind3; + + float4 m_Shape; // damping, local stiffness, global stiffness, global range. + // float m_Damping; + // float m_StiffnessForLocalShapeMatching; + // float m_StiffnessForGlobalShapeMatching; + // float m_GlobalShapeMatchingEffectiveRange; + + float4 m_GravTimeTip; // gravity, time step size, + // float m_GravityMagnitude; + // float m_TimeStep; + // float m_TipSeparationFactor; + // float m_velocityShockPropogation; + + sint4 m_SimInts; // 4th component unused. + // int m_NumLengthConstraintIterations; + // int m_NumLocalShapeMatchingIterations; + // int m_bCollision; + // int m_CPULocalIterations; + + sint4 m_Counts; + // int m_NumOfStrandsPerThreadGroup; + // int m_NumFollowHairsPerGuideHair; + // int m_NumVerticesPerStrand; // should be 2^n (n is integer and greater than 2) and less than + // or equal to TRESSFX_SIM_THREAD_GROUP_SIZE. i.e. 8, 16, 32 or 64 + + float4 m_VSP; + + float g_ResetPositions; + float g_ClampPositionDelta; + float g_pad1; + float g_pad2; + + float4x4 m_BoneSkinningMatrix[AMD_TRESSFX_MAX_NUM_BONES]; + +#if TRESSFX_COLLISION_CAPSULES + float4 m_centerAndRadius0[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 m_centerAndRadius1[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + sint4 m_numCollisionCapsules; +#endif + + + void SetDamping(float d) { m_Shape.x = d; } + void SetLocalStiffness(float s) { m_Shape.y = s; } + void SetGlobalStiffness(float s) { m_Shape.z = s; } + void SetGlobalRange(float r) { m_Shape.w = r; } + + void SetGravity(float g) { m_GravTimeTip.x = g; } + void SetTimeStep(float dt) { m_GravTimeTip.y = dt; } + void SetTipSeperation(float ts) { m_GravTimeTip.z = ts; } + + void SetVelocityShockPropogation(float vsp) { m_VSP.x = vsp; } + void SetVSPAccelThreshold(float vspAccelThreshold) { m_VSP.y = vspAccelThreshold; } + + void SetLengthIterations(int i) { m_SimInts.x = i; } + void SetLocalIterations(int i) { m_SimInts.y = i; } + void SetCollision(bool on) { m_SimInts.z = on ? 1 : 0; } + + void SetVerticesPerStrand(int n) + { + m_Counts.x = TRESSFX_SIM_THREAD_GROUP_SIZE / n; + m_Counts.z = n; + } + void SetFollowHairsPerGuidHair(int n) { m_Counts.y = n; } + }; + + struct TressFXCapsuleCollisionConstantBuffer + { + float4 m_centerAndRadius[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + float4 m_centerAndRadiusSquared[TRESSFX_MAX_NUM_COLLISION_CAPSULES]; + int m_numCollisionCapsules; + }; + + struct TressFXSDFCollisionParams + { + float4 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_MaxMarchingCubesVertices; + float m_MarchingCubesIsolevel; + float m_CollisionMargin; + int m_NumHairVerticesPerStrand; + int m_NumTotalHairVertices; + float pad1; + float pad2; + float pad3; + }; + + // If you change this, you MUST also change TressFXParameters in HairRenderingSrgs.azsli + struct TressFXRenderParams // TressFXParameters + { + // General information + float FiberRadius = 0.0021f; + + // For deep approximated shadow lookup + float ShadowAlpha = 0.35f; + float FiberSpacing = 0.4f; + + // Original TressFX Kajiya lighting model parameters + float HairKs2 = 0.072f; + float HairEx2 = 11.80f; + float3 fPadding0; + + float4 MatKValue = {{{0.f, 0.07f, 0.0017f, 14.40f}}}; // KAmbient, KDiffuse, KSpec1, Exp1 + + int MaxShadowFibers = 50; + + // Marschner lighting model parameters + float Roughness; + float CuticleTilt; // tile angle in radians + + float fPadding1; + }; + + // If you change this, you MUST also change TressFXStrandParameters in HairRenderingSrgs.azsli + struct TressFXStrandParams // TressFXStrandParameters + { + // For lighting/shading + float4 MatBaseColor = {{{1.f, 1.f, 1.f, 0.63f}}}; + float4 MatTipColor = {{{0.5f, 0.5f, 1.f, 0.63f}}}; + + // General information + float TipPercentage = 0.5f; + float StrandUVTilingFactor = 1.f; + float FiberRatio = 0.463f; + float FiberRadius = 0.0021f; + + int NumVerticesPerStrand = 32; + int EnableThinTip = 0; + + // For PPLL + int NodePoolSize = 0; + int RenderParamsIndex = 0; + + // Other params + int EnableStrandUV = 0; + int EnableStrandTangent = 0; + sint2 iPadding1; + }; + + //-------------------------------------------------------------------------- + //! This structure is used as the per object material. + //! It is filled per hair object and set in an array that represents the + //! materials of all hair objects in the scene. + //! The per draw raster pass will write per pixel data with index of the + //! material so that the resolve pass can use it a lookup table to shade + //! the pixel per the hair object it belongs to. + struct ShadeParams + { + // General information + float FiberRadius = 0.002f; + // For deep approximated shadow lookup + float ShadowAlpha = 0.35f; + float FiberSpacing = 0.4f; + + // Original TressFX Kajiya lighting model parameters + float HairEx2 = 11.80f; + float4 MatKValue = {{{0.f, 0.07f, 0.0017f, 14.40f}}}; // KAmbient, KDiffuse, KSpec1, Exp1 + float HairKs2 = 0.072f; + + // Marschner lighting model parameters + float Roughness; + float CuticleTilt; // tile angle in radians + + float fPadding0; + }; + + //! Hair objects material array - passed as a constant structure used by + //! the resolve pass to shader hair pixels given the index via the PPLL. + struct TressFXShadeParams + { + ShadeParams HairShadeParams[AMD_TRESSFX_MAX_HAIR_GROUP_RENDER]; + }; + //-------------------------------------------------------------------------- + + + // If you change this, you MUST also change TressFXLightParameters in TressFXRendering.hlsl +#define AMD_TRESSFX_MAX_LIGHTS 10 + + struct LightParams + { + float LightIntensity = 1.f; // fLightIntensity in Sushi + float LightOuterConeCos = 0.70710678f; // vLightConeAngles.x in Sushi + float LightInnerConeCos = 0.70710678f; // vLightConeAngles.y in Sushi + float LightRange = 100.f; // vLightConeAngles.z in Sushi + + float4 LightPositionWS = {{{0.f, 0.f, 0.f, 0.f}}};// vLightPosWS in Sushi + float4 LightDirWS = {{{0.f, -1.f, 0.f, 0.f}}}; // vLightDirWS in Sushi + float4 LightColor = {{{1.f, 1.f, 1.f, 0.f}}}; // vLightColor in Sushi + + float4x4 ShadowProjection; + float4 ShadowParams = {{{0.0007f, 0.f, 0.f, 0.f}}}; + + int LightType = 3; // vLightParams.x in Sushi + int ShadowMapIndex = -1; + int ShadowMapSize = 2048; + int Padding; + }; + + struct TressFXLightParams + { + int NumLights; + int UseDepthApproximation; + sint2 Padding; + LightParams LightInfo[AMD_TRESSFX_MAX_LIGHTS]; + }; + +} // namespace AMD + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h new file mode 100644 index 0000000000..7e5f854c07 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXFileFormat.h @@ -0,0 +1,66 @@ +//--------------------------------------------------------------------------------------- +// Header file that defines the .tfx binary file format. This is the format that will +// be exported by authoring tools, and is the standard file format for hair data. The game +// can either read this file directly, or further procsessing can be done offline to improve +// load times. +//------------------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +namespace AMD +{ + // TressFXTFXFileHeader Structure + // + // This structure defines the header of the file. The actual vertex data follows this as specified by the offsets. + struct TressFXTFXFileHeader + { + float version; // Specifies TressFX version number + unsigned int numHairStrands; // Number of hair strands in this file. All strands in this file are guide strands. + // Follow hair strands are generated procedurally. + unsigned int numVerticesPerStrand; // From 4 to 64 inclusive (POW2 only). This should be a fixed value within tfx value. + // The total vertices from the tfx file is numHairStrands * numVerticesPerStrand. + + // Offsets to array data starts here. Offset values are in bytes, aligned on 8 bytes boundaries, + // and relative to beginning of the .tfx file + unsigned int offsetVertexPosition; // Array size: FLOAT4[numHairStrands] + unsigned int offsetStrandUV; // Array size: FLOAT2[numHairStrands], if 0 no texture coordinates + unsigned int offsetVertexUV; // Array size: FLOAT2[numHairStrands * numVerticesPerStrand], if 0, no per vertex texture coordinates + unsigned int offsetStrandThickness; // Array size: float[numHairStrands] + unsigned int offsetVertexColor; // Array size: FLOAT4[numHairStrands * numVerticesPerStrand], if 0, no vertex colors + + unsigned int reserved[32]; // Reserved for future versions + }; + + struct TressFXTFXBoneFileHeader + { + float version; + unsigned int numHairStrands; + unsigned int numInfluenceBones; + unsigned int offsetBoneNames; + unsigned int offsetSkinningData; + unsigned int reserved[32]; + }; +} // namespace AMD + + diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp new file mode 100644 index 0000000000..c4f6d55576 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.cpp @@ -0,0 +1,607 @@ +// ---------------------------------------------------------------------------- +// Interface to strands of hair. Both in terms of rendering, and the data +// required for simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXHairObject.h" + +// TressFX +#include "Math/Matrix44.h" +#include "Math/Vector3D.h" +#include "TressFXAsset.h" +#include "TressFXLayouts.h" +#include "EngineInterface.h" + +#include + +using namespace AMD; + +#define TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION 64 + +// Load simulation compute shader and create all buffers +// command context used to upload initial data. +TressFXHairObject::TressFXHairObject(TressFXAsset* asset, + EI_Device* pDevice, + EI_CommandContext& commandContext, + const char * name, int RenderIndex) : + m_NumTotalVertices(0), + m_NumTotalStrands(0), + m_NumVerticesPerStrand(0), + m_CPULocalShapeIterations(0), + m_SimulationFrame(0), + m_RenderIndex(RenderIndex), + m_pRenderLayoutBindSet(nullptr) +{ + m_NumTotalVertices = asset->m_numTotalVertices; + m_NumTotalStrands = asset->m_numTotalStrands; + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + + // Create buffers for simulation + { + m_DynamicState.CreateGPUResources(pDevice, m_NumTotalVertices, m_NumTotalStrands, name, asset); + + m_SimCB[0].CreateBufferResource("TressFXSimulationConstantBuffer"); + m_SimCB[1].CreateBufferResource("TressFXSimulationConstantBuffer"); + m_RenderCB.CreateBufferResource("TressFXRenderConstantBuffer"); + m_StrandCB.CreateBufferResource("TressFXStrandConstantBuffer"); + + // initial hair positions + m_InitialHairPositionsBuffer = + pDevice->CreateBufferResource( + sizeof(AMD::float4), + m_NumTotalVertices, + 0, + "InitialPosition" + ); + + // rest lengths + m_HairRestLengthSRVBuffer = + pDevice->CreateBufferResource( + sizeof(float), + m_NumTotalVertices, + 0, + "RestLength"); + + + + // strand types + m_HairStrandTypeBuffer = pDevice->CreateBufferResource( + sizeof(int), + m_NumTotalStrands, + 0, + "StrandType"); + + // follow hair root offsets + m_FollowHairRootOffsetBuffer = + pDevice->CreateBufferResource( + sizeof(AMD::float4), + m_NumTotalStrands, + 0, + "RootOffset"); + + + // bone skinning data + m_BoneSkinningDataBuffer = pDevice->CreateBufferResource(sizeof(TressFXBoneSkinningData), m_NumTotalStrands, 0, "SkinningData"); + + } + + // UPLOAD INITIAL DATA + // UAVs must first be transitioned for copy dest, since they start with UAV state. + // When done, we transition to appropriate state for start of first frame. + + m_DynamicState.UploadGPUData( + commandContext, asset->m_positions.data(), asset->m_tangents.data(), m_NumTotalVertices); + + commandContext.UpdateBuffer(m_InitialHairPositionsBuffer.get(), asset->m_positions.data()); + commandContext.UpdateBuffer(m_HairRestLengthSRVBuffer.get(), asset->m_restLengths.data()); + commandContext.UpdateBuffer(m_HairStrandTypeBuffer.get(), asset->m_strandTypes.data()); + commandContext.UpdateBuffer(m_FollowHairRootOffsetBuffer.get(), asset->m_followRootOffsets.data()); + commandContext.UpdateBuffer(m_BoneSkinningDataBuffer.get(), asset->m_boneSkinningData.data()); + + EI_Barrier copyBarriers[] = + { + { m_InitialHairPositionsBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_HairRestLengthSRVBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_HairStrandTypeBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_FollowHairRootOffsetBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_BoneSkinningDataBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(copyBarriers), (EI_Barrier*)copyBarriers); + + m_NumVerticesPerStrand = asset->m_numVerticesPerStrand; + m_NumFollowHairsPerGuideHair = asset->m_numFollowStrandsPerGuide; + + // Bind set + for (int i = 0; i < 2; ++i) + { + EI_BindSetDescription bindSet = + { + { + // SRVs + m_InitialHairPositionsBuffer.get(), + m_HairRestLengthSRVBuffer.get(), + m_HairStrandTypeBuffer.get(), + m_FollowHairRootOffsetBuffer.get(), + m_BoneSkinningDataBuffer.get(), + // CB + m_SimCB[i].GetBufferResource() + } + }; + + m_pSimBindSet[i] = pDevice->CreateBindSet(GetSimLayout(), bindSet); + + } + + // Set up with defaults. + ResetPositions(); + + // Rendering setup + CreateRenderingGPUResources(pDevice, *asset, name); + PopulateDrawStrandsBindSet(pDevice, nullptr); // Null at the beginning + UploadRenderingGPUResources(commandContext, *asset); + +} + +// TODO Move wind settings to Simulation Parameters or whatever. + +// Wind is in a pyramid around the main wind direction. +// To add a random appearance, the shader will sample some direction +// within this cone based on the strand index. +// This function computes the vector for each edge of the pyramid. +static void SetWindCorner(Quaternion rotFromXAxisToWindDir, + Vector3 rotAxis, + float angleToWideWindCone, + float wM, + AMD::float4& outVec) +{ + static const Vector3 XAxis(1.0f, 0, 0); + Quaternion rot(rotAxis, angleToWideWindCone); + Vector3 newWindDir = rotFromXAxisToWindDir * rot * XAxis; + outVec.x = newWindDir.x * wM; + outVec.y = newWindDir.y * wM; + outVec.z = newWindDir.z * wM; + outVec.w = 0; // unused. +} + +const float MATH_PI2 = 3.14159265359f; +#define DEG_TO_RAD2(d) (d * MATH_PI2 / 180) + + +void TressFXHairObject::SetWind(const Vector3& windDir, float windMag, int frame) +{ + float wM = windMag * (pow(sin(frame * 0.01f), 2.0f) + 0.5f); + + Vector3 windDirN(windDir); + windDirN.Normalize(); + + Vector3 XAxis(1.0f, 0, 0); + Vector3 xCrossW = XAxis.Cross(windDirN); + + Quaternion rotFromXAxisToWindDir; + rotFromXAxisToWindDir.SetIdentity(); + + float angle = asin(xCrossW.Length()); + + if (angle > 0.001) + { + rotFromXAxisToWindDir.SetRotation(xCrossW.Normalize(), angle); + } + + float angleToWideWindCone = DEG_TO_RAD2(40.f); + + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 1.0, 0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, -1.0, 0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind1); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 0, 1.0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind2); + SetWindCorner(rotFromXAxisToWindDir, + Vector3(0, 0, -1.0), + angleToWideWindCone, + wM, + m_SimCB[m_SimulationFrame % 2]->m_Wind3); + + // fourth component unused. (used to store frame number, but no longer used). +} + +void TressFXHairObject::UpdatePerObjectRenderParams(EI_CommandContext& commandContext) +{ + m_RenderCB.Update(commandContext); + m_StrandCB.Update(commandContext); +} + +void TressFXHairObject::DrawStrands(EI_CommandContext& commandContext, + EI_PSO& pso, + EI_BindSet** extraBindSets, + uint32_t numExtraBindSets) +{ + // at some point, should probably pass these in to EI_BindAndDrawIndexedInstanced. + static const uint32_t MaxSetsToBind = 10; // Grow as needed + EI_BindSet* sets[MaxSetsToBind]; + + // First 2 sets are always the RenderLayout and PosTanCollection + sets[0] = m_pRenderLayoutBindSet.get(); sets[1] = &m_DynamicState.GetRenderBindSet(); + + for (uint32_t i = 0; i < numExtraBindSets; ++i) + sets[2+i] = extraBindSets[i]; + + commandContext.BindSets(&pso, 2 + numExtraBindSets, sets); + AMD::uint32 nStrandCopies = 1; + + uint32_t NumPrimsToRender = (m_TotalIndices / 3); + + if (m_LODHairDensity != 1.f) + { + NumPrimsToRender = uint32_t(float(NumPrimsToRender) * m_LODHairDensity); + + // Calculate a new number of Primitives to draw. Keep it aligned to number of primitives per strand (i.e. don't cut strands in half or anything) + uint32 NumPrimsPerStrand = (m_NumVerticesPerStrand - 1) * 2; + uint32 RemainderPrims = NumPrimsToRender % NumPrimsPerStrand; + + NumPrimsToRender = (RemainderPrims > 0) ? NumPrimsToRender + NumPrimsPerStrand - RemainderPrims : NumPrimsToRender; + + // Force prims to be on (guide hair + its follow hairs boundary... no partial groupings) + NumPrimsToRender = NumPrimsToRender - (NumPrimsToRender % (NumPrimsPerStrand * (m_NumFollowHairsPerGuideHair + 1))); + } + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pIndexBuffer.get(); + drawParams.numIndices = NumPrimsToRender * 3; + drawParams.numInstances = nStrandCopies; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +void TressFXHairObject::CreateRenderingGPUResources(EI_Device* pDevice, + TressFXAsset& asset, + const char * name) +{ + // If rendering is seperated, we might be copying the asset count to the local member variable. + // But since this is currently loaded after simulation right now, we'll just make sure + // it's already set. + TRESSFX_ASSERT(asset.m_numTotalStrands == m_NumTotalStrands); + TRESSFX_ASSERT(asset.m_numTotalVertices == m_NumTotalVertices); + m_TotalIndices = asset.GetNumHairTriangleIndices(); // asset.GetNumHairTriangleIndices(); + + if (asset.m_strandUV.data()) + { + m_HairTexCoords = pDevice->CreateBufferResource( + 2 * sizeof(AMD::real32), + m_NumTotalStrands, + 0, + "TexCoords"); + } + + m_HairVertexRenderParams = pDevice->CreateBufferResource( + sizeof(AMD::real32), + m_NumTotalVertices, + 0, + "VertRenderParams"); + + // TODO seperate creation from upload. Go through a real interface. + m_pIndexBuffer = pDevice->CreateBufferResource( sizeof(AMD::int32), m_TotalIndices, EI_BF_INDEXBUFFER, name); +} + +void TressFXHairObject::UploadRenderingGPUResources(EI_CommandContext& commandContext, + TressFXAsset& asset) +{ + TRESSFX_ASSERT(asset.m_numTotalStrands == m_NumTotalStrands); + TRESSFX_ASSERT(asset.m_numTotalVertices == m_NumTotalVertices); + TRESSFX_ASSERT(m_TotalIndices == asset.GetNumHairTriangleIndices()); + + if (asset.m_strandUV.data()) + { + commandContext.UpdateBuffer(m_HairTexCoords.get(), asset.m_strandUV.data()); + } + + commandContext.UpdateBuffer(m_HairVertexRenderParams.get(), asset.m_thicknessCoeffs.data()); + commandContext.UpdateBuffer(m_pIndexBuffer.get(), asset.m_triangleIndices.data()); + + EI_Barrier copyToVS[] = + { + { m_HairTexCoords.get(), EI_STATE_COPY_DEST, EI_STATE_SRV}, + { m_HairVertexRenderParams.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_pIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(copyToVS), copyToVS); + +} + +void TressFXHairObject::PopulateDrawStrandsBindSet(EI_Device* pDevice, TressFXRenderingSettings* pRenderSettings/*=nullptr*/) +{ + if (pRenderSettings) + { + if (pRenderSettings->m_BaseAlbedoName != "") + { + m_BaseAlbedo = GetDevice()->CreateResourceFromFile(pRenderSettings->m_BaseAlbedoName.c_str(), true); + } + if (pRenderSettings->m_StrandAlbedoName != "") + { + m_StrandAlbedo = GetDevice()->CreateResourceFromFile(pRenderSettings->m_BaseAlbedoName.c_str(), true); + } + } + EI_BindSetDescription bindSetDesc = + { + { + m_HairVertexRenderParams.get(), + m_HairTexCoords.get(), + m_BaseAlbedo.get() ? m_BaseAlbedo.get() : pDevice->GetDefaultWhiteTexture(), + m_RenderCB.GetBufferResource(), + m_StrandCB.GetBufferResource(), + m_StrandAlbedo.get() ? m_StrandAlbedo.get() : pDevice->GetDefaultWhiteTexture(), + } + }; + m_pRenderLayoutBindSet = pDevice->CreateBindSet(GetTressFXParamLayout(), bindSetDesc); +} + +void TressFXHairObject::UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices) +{ + int numMatrices = min(numBoneMatrices, AMD_TRESSFX_MAX_NUM_BONES); + for (int i = 0; i < numMatrices; ++i) + { + m_SimCB[m_SimulationFrame%2]->m_BoneSkinningMatrix[i] = pBoneMatricesInWS[i]; + } +} + +void TressFXHairObject::UpdateConstantBuffer(EI_CommandContext& commandContext) +{ + m_SimCB[m_SimulationFrame%2].Update(commandContext); +} + +void TressFXHairObject::UpdateSimulationParameters(const TressFXSimulationSettings* settings, float timeStep) +{ + m_SimCB[m_SimulationFrame%2]->SetVelocityShockPropogation(settings->m_vspCoeff); + m_SimCB[m_SimulationFrame%2]->SetVSPAccelThreshold(settings->m_vspAccelThreshold); + m_SimCB[m_SimulationFrame%2]->SetDamping(settings->m_damping); + m_SimCB[m_SimulationFrame%2]->SetLocalStiffness(settings->m_localConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGlobalStiffness(settings->m_globalConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGlobalRange(settings->m_globalConstraintsRange); + m_SimCB[m_SimulationFrame%2]->SetLocalStiffness(settings->m_localConstraintStiffness); + m_SimCB[m_SimulationFrame%2]->SetGravity(settings->m_gravityMagnitude); + m_SimCB[m_SimulationFrame%2]->SetTimeStep(timeStep); + m_SimCB[m_SimulationFrame%2]->SetCollision(false); + m_SimCB[m_SimulationFrame%2]->SetVerticesPerStrand(m_NumVerticesPerStrand); + m_SimCB[m_SimulationFrame%2]->SetFollowHairsPerGuidHair(m_NumFollowHairsPerGuideHair); + m_SimCB[m_SimulationFrame%2]->SetTipSeperation(settings->m_tipSeparation); + + // use 1.0 for now, this needs to be maxVelocity * timestep + m_SimCB[m_SimulationFrame % 2]->g_ClampPositionDelta = 20.0f; + + // Right now, we do all local contraint iterations on the CPU. + // It's actually a bit faster to + + if (m_NumVerticesPerStrand >= TRESSFX_MIN_VERTS_PER_STRAND_FOR_GPU_ITERATION) + { + m_SimCB[m_SimulationFrame % 2]->SetLocalIterations((int)settings->m_localConstraintsIterations); + m_CPULocalShapeIterations = 1; + } + else + { + m_SimCB[m_SimulationFrame % 2]->SetLocalIterations(1); + m_CPULocalShapeIterations = (int)settings->m_localConstraintsIterations; + } + + m_SimCB[m_SimulationFrame % 2]->SetLengthIterations((int)settings->m_lengthConstraintsIterations); + + // Set wind parameters + Vector3 windDir( + settings->m_windDirection[0], settings->m_windDirection[1], settings->m_windDirection[2]); + float windMag = settings->m_windMagnitude; + SetWind(windDir, windMag, m_SimulationFrame); + + +#if TRESSFX_COLLISION_CAPSULES + m_SimCB.m_numCollisionCapsules.x = 0; + + // Below is an example showing how to pass capsule collision objects. + /* + mSimCB.m_numCollisionCapsules.x = 1; + mSimCB.m_centerAndRadius0[0] = { 0, 0.f, 0.f, 50.f }; + mSimCB.m_centerAndRadius1[0] = { 0, 100.f, 0, 10.f }; + */ +#endif + // make sure we start of with a correct pose + if (m_SimulationFrame < 2) + ResetPositions(); + + // Bone matrix set elsewhere. It is not dependent on the settings passed in here. +} + +void TressFXHairObject::UpdateRenderingParameters(const TressFXRenderingSettings* parameters, const int NodePoolSize, float timeStep, float Distance, bool ShadowUpdate /*= false*/) +{ + // Update Render Parameters + m_RenderCB->FiberRadius = parameters->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + + m_RenderCB->ShadowAlpha = parameters->m_HairShadowAlpha; + m_RenderCB->FiberSpacing = parameters->m_HairFiberSpacing; + + m_RenderCB->HairKs2 = parameters->m_HairKSpec2; + m_RenderCB->HairEx2 = parameters->m_HairSpecExp2; + m_RenderCB->MatKValue = { 0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1 }; // no ambient + + // Marschner lighting model parameters + m_RenderCB->Roughness = parameters->m_HairRoughness; + m_RenderCB->CuticleTilt = parameters->m_HairCuticleTilt; + + m_RenderCB->MaxShadowFibers = parameters->m_HairMaxShadowFibers; + + // Update Strand Parameters (per hair object) + m_StrandCB->MatBaseColor = parameters->m_HairMatBaseColor; + m_StrandCB->MatTipColor = parameters->m_HairMatTipColor; + m_StrandCB->TipPercentage = parameters->m_TipPercentage; + m_StrandCB->StrandUVTilingFactor = parameters->m_StrandUVTilingFactor; + m_StrandCB->FiberRatio = parameters->m_FiberRatio; + + // Reset LOD hair density for the frame + m_LODHairDensity = 1.f; + + float FiberRadius = parameters->m_FiberRadius; + if (parameters->m_EnableHairLOD) + { + float MinLODDist = ShadowUpdate? min(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : min(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + float MaxLODDist = ShadowUpdate? max(parameters->m_ShadowLODStartDistance, parameters->m_ShadowLODEndDistance) : max(parameters->m_LODStartDistance, parameters->m_LODEndDistance); + + if (Distance > MinLODDist) + { + float DistanceRatio = min((Distance - MinLODDist) / max(MaxLODDist - MinLODDist, 0.00001f), 1.f); + + // Lerp: x + s(y-x) + float MaxLODFiberRadius = FiberRadius * (ShadowUpdate? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); + FiberRadius = FiberRadius + (DistanceRatio * (MaxLODFiberRadius - FiberRadius)); + + // Lerp: x + s(y-x) + m_LODHairDensity = 1.f + (DistanceRatio * ((ShadowUpdate ? parameters->m_ShadowLODPercent : parameters->m_LODPercent) - 1.f)); + } + } + + m_StrandCB->FiberRadius = FiberRadius; + + m_StrandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Always constant + m_StrandCB->EnableThinTip = parameters->m_EnableThinTip; + m_StrandCB->NodePoolSize = NodePoolSize; + m_StrandCB->RenderParamsIndex = m_RenderIndex; // Always constant + + m_StrandCB->EnableStrandUV = parameters->m_EnableStrandUV; + m_StrandCB->EnableStrandTangent = parameters->m_EnableStrandTangent; +} + +// Positions and tangents are handled in the following order, from the point of view of each +// buffer. +// +// Positions updated from previous sim output by copy. (COPY_DEST) +// Simulate updates mPositions and mPositionsPrev (UAVs) also updates mTangents (this might move) +// SDF updates mPositions and mPositionsPrev (UAVs) +// Render with mPositions and mTangnets (PS SRVs) + +void TressFXDynamicState::CreateGPUResources(EI_Device* pDevice, int numVertices, int numStrands, const char * name, TressFXAsset* asset) +{ + m_PositionsPrev = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "PosPrev"); + m_PositionsPrevPrev = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "PosPrevPrev"); + m_Positions = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "Pos"); + m_Tangents = pDevice->CreateBufferResource(sizeof(AMD::float4), numVertices, EI_BF_NEEDSUAV, "Tan"); + m_StrandLevelData = pDevice->CreateBufferResource(sizeof(TressFXStrandLevelData), numStrands, EI_BF_NEEDSUAV, "StrandLevelData"); + + EI_BindSetDescription bindSet; + + bindSet = { + {m_Positions.get(), m_PositionsPrev.get(), m_PositionsPrevPrev.get(), m_Tangents.get(), m_StrandLevelData.get() } + }; + m_pSimBindSets = pDevice->CreateBindSet(GetSimPosTanLayout(), bindSet); + + bindSet = { + {m_Positions.get(), m_PositionsPrev.get()} + }; + m_pApplySDFBindSets = pDevice->CreateBindSet(GetApplySDFLayout(), bindSet); + + bindSet = { + {m_Positions.get(), m_Tangents.get()} + }; + m_pRenderBindSets = pDevice->CreateBindSet(GetRenderPosTanLayout(), bindSet); +} + +void TressFXDynamicState::UploadGPUData(EI_CommandContext& commandContext, void* pos, void* tan, int numVertices) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + TRESSFX_ASSERT(m_PositionsPrev != nullptr); + TRESSFX_ASSERT(m_PositionsPrevPrev != nullptr); + + EI_Barrier uavToUpload[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_Tangents.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PositionsPrev.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PositionsPrevPrev.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavToUpload), uavToUpload); + + + commandContext.UpdateBuffer(m_Positions.get(), pos); + commandContext.UpdateBuffer(m_Tangents.get(), tan); + commandContext.UpdateBuffer(m_PositionsPrev.get(), pos); + commandContext.UpdateBuffer(m_PositionsPrevPrev.get(), pos); + + EI_Barrier uploadToUAV[] = + { + { m_Positions.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_Tangents.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_PositionsPrev.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + { m_PositionsPrevPrev.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uploadToUAV), uploadToUAV); +} + +void TressFXDynamicState::TransitionSimToRendering(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + + EI_Barrier simToRender[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_Tangents.get(), EI_STATE_UAV, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(simToRender), simToRender); +} + +void TressFXDynamicState::TransitionRenderingToSim(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_Tangents != nullptr); + + EI_Barrier renderToSim[] = + { + { m_Positions.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_Tangents.get(), EI_STATE_SRV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(renderToSim), renderToSim); +} + +void TressFXDynamicState::UAVBarrier(EI_CommandContext& commandContext) +{ + TRESSFX_ASSERT(m_Positions != nullptr); + TRESSFX_ASSERT(m_PositionsPrev != nullptr); + TRESSFX_ASSERT(m_PositionsPrevPrev != nullptr); + + EI_Barrier uav[] = + { + { m_Positions.get(), EI_STATE_UAV, EI_STATE_UAV }, + { m_PositionsPrev.get(), EI_STATE_UAV, EI_STATE_UAV }, + { m_PositionsPrevPrev.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uav), uav); + + // Assuming tangent is only written by one kernel, so will get caught with transition to SRV + // for rendering. +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h new file mode 100644 index 0000000000..f5a1d60038 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXHairObject.h @@ -0,0 +1,193 @@ +// ---------------------------------------------------------------------------- +// Interface to strands of hair. Both in terms of rendering, and the data +// required for simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef TRESSFXHAIROBJECT_H_ +#define TRESSFXHAIROBJECT_H_ + +// AMD +#include "AMD_Types.h" + +// TressFX +#include "TressFXAsset.h" +#include "TressFXConstantBuffers.h" +#include "AMD_Types.h" +#include "AMD_TressFX.h" +#include "TressFXCommon.h" +#include "TressFXSettings.h" +#include "EngineInterface.h" + +// Contains the dynamic data +// which is used by 3 modules: +// simulation, sigend distance field, and rendering. +// Rendering uses current position and tangent as SRVs in VS. +class TressFXDynamicState +{ +public: + void CreateGPUResources(EI_Device* pDevice, int numVertices, int numStrands, const char * name, TressFXAsset* asset); + void UploadGPUData(EI_CommandContext& commandContext, void* pos, void* tan, int numVertices); + + // UAV Barriers on buffers used in simulation. + void UAVBarrier(EI_CommandContext& commandContext); + + // Transitions to move between simulation (UAV) and rendering (SRV). + void TransitionSimToRendering(EI_CommandContext& commandContext); + void TransitionRenderingToSim(EI_CommandContext& commandContext); + + EI_BindSet& GetSimBindSet() { return *m_pSimBindSets; } + EI_BindSet& GetApplySDFBindSet() + { + return *m_pApplySDFBindSets; + } + EI_BindSet& GetRenderBindSet() { return *m_pRenderBindSets; } + +private: + std::unique_ptr m_Positions; + std::unique_ptr m_Tangents; + std::unique_ptr m_PositionsPrev; + std::unique_ptr m_PositionsPrevPrev; + std::unique_ptr m_StrandLevelData; + + std::unique_ptr m_pSimBindSets; + std::unique_ptr m_pApplySDFBindSets; // updated by + std::unique_ptr m_pRenderBindSets; // used for rendering. +}; + +struct TressFXStrandLevelData +{ + AMD::float4 skinningQuat; + AMD::float4 vspQuat; + AMD::float4 vspTranslation; +}; + +class TressFXHairObject : private TressFXNonCopyable +{ +public: + TressFXHairObject(TressFXAsset* asset, + EI_Device* pDevice, + EI_CommandContext& commandContext, + const char * name, int RenderIndex); + + // pBoneMatricesInWS constains array of column major bone matrices in world space. + void UpdateBoneMatrices(const AMD::float4x4* pBoneMatricesInWS, int numBoneMatrices); + + void UpdateConstantBuffer(EI_CommandContext& commandContext); + + // update collision capsules + void UpdateCapsuleCollisions(); + + void UpdateSimulationParameters(const TressFXSimulationSettings* parameters, float timeStep); + void UpdateRenderingParameters(const TressFXRenderingSettings* parameters, const int NodePoolSize, float timeStep, float Distance, bool ShadowUpdate = false); + + void ResetPositions() { m_SimCB[m_SimulationFrame%2]->g_ResetPositions = 1.0f; } + + // Rendering + void DrawStrands(EI_CommandContext& commandContext, + EI_PSO& pso, + EI_BindSet** extraBindSets = nullptr, + uint32_t numExtraBindSets = 0); + + TressFXDynamicState& GetDynamicState() { return m_DynamicState; } + + int GetNumTotalHairVertices() const { return m_NumTotalVertices; } + int GetNumTotalHairStrands() const { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() const { return m_NumVerticesPerStrand; } + int GetCPULocalShapeIterations() const { return m_CPULocalShapeIterations; } + int GetNumFollowHairsPerGuideHair() const { return m_NumFollowHairsPerGuideHair; } + + EI_BindSet* GetRenderLayoutBindSet() const { return m_pRenderLayoutBindSet.get(); } + + // Get hair asset info + int GetNumTotalHairVertices() { return m_NumTotalVertices; } + int GetNumTotalHairStrands() { return m_NumTotalStrands; } + int GetNumVerticesPerStrand() { return m_NumVerticesPerStrand; } + + EI_BindSet * GetSimBindSet() { return m_pSimBindSet[m_SimulationFrame%2].get(); } + void UpdatePerObjectRenderParams(EI_CommandContext& commandContext); + void IncreaseSimulationFrame() { m_SimCB[m_SimulationFrame%2]->g_ResetPositions = 0.0f; m_SimulationFrame++; } + + void PopulateDrawStrandsBindSet(EI_Device* pDevice, TressFXRenderingSettings* pRenderSettings=nullptr); +private: + // Turn raw data into GPU resources for rendering. + void CreateRenderingGPUResources(EI_Device* pDevice, + TressFXAsset& asset, + const char * name); + void UploadRenderingGPUResources(EI_CommandContext& commandContext, TressFXAsset& asset); + + + // set wind parameters for simulation + void SetWind(const Vector3& windDir, float windMag, int frame); + + // hair asset information + int m_NumTotalVertices; + int m_NumTotalStrands; + int m_NumVerticesPerStrand; + int m_CPULocalShapeIterations; + int m_NumFollowHairsPerGuideHair; + + // frame counter for wind effect + int m_SimulationFrame; + + // for parameter indexing + int m_RenderIndex; + + // For LOD calculations + float m_LODHairDensity = 1.0f; + + // simulation control params + TressFXUniformBuffer m_SimCB[2]; + TressFXUniformBuffer m_RenderCB; + TressFXUniformBuffer m_StrandCB; + + // position and tangent + TressFXDynamicState m_DynamicState; + + std::unique_ptr m_InitialHairPositionsBuffer; + std::unique_ptr m_HairRestLengthSRVBuffer; + std::unique_ptr m_HairStrandTypeBuffer; + std::unique_ptr m_FollowHairRootOffsetBuffer; + std::unique_ptr m_BoneSkinningDataBuffer; + + // Textures + std::unique_ptr m_BaseAlbedo = nullptr; + std::unique_ptr m_StrandAlbedo = nullptr; + + // SRVs for rendering + std::unique_ptr m_HairVertexRenderParams; + std::unique_ptr m_HairTexCoords; + + + std::unique_ptr m_pRenderLayoutBindSet; + + // For simulation compute shader + std::unique_ptr m_pSimBindSet[2]; + + // index buffer + std::unique_ptr m_pIndexBuffer; + AMD::uint32 m_TotalIndices; + +}; + +#endif // TRESSFXHAIROBJECT_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp new file mode 100644 index 0000000000..7b15755da6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.cpp @@ -0,0 +1,332 @@ +// ---------------------------------------------------------------------------- +// Layouts describe resources for each type of shader in TressFX. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "TressFXLayouts.h" +#include "EngineInterface.h" + +using namespace AMD; + +// By default, app allocates space for each of these, and TressFX uses it. +// These are globals, because there should really just be one instance. +TressFXLayouts* g_TressFXLayouts = nullptr; + +void CreateSimPosTanLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexPositionsPrev", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexPositionsPrevPrev", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"g_HairVertexTangents", 3, EI_RESOURCETYPE_BUFFER_RW }, + {"g_StrandLevelData", 4, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_CS + }; + + g_TressFXLayouts->pSimPosTanLayout = pDevice->CreateLayout(desc); +} + +void CreateRenderPosTanLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_GuideHairVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_GuideHairVertexTangents", 1, EI_RESOURCETYPE_BUFFER_RO }, + }, + EI_ALL + }; + + g_TressFXLayouts->pRenderPosTanLayout = pDevice->CreateLayout(desc); +} + +void CreateRenderLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairThicknessCoeffs", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairStrandTexCd", 1, EI_RESOURCETYPE_BUFFER_RO }, + {"BaseAlbedoTexture", 2, EI_RESOURCETYPE_IMAGE_RO }, + {"TressFXParameters", 3, EI_RESOURCETYPE_UNIFORM }, + {"TressFXStrandParameters", 4, EI_RESOURCETYPE_UNIFORM }, + {"StrandAlbedoTexture", 5, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_ALL + }; + + g_TressFXLayouts->pTressFXParamLayout = pDevice->CreateLayout(desc); +} + +void CreateSamplerLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"LinearWrapSampler", 0, EI_RESOURCETYPE_SAMPLER }, + }, + EI_ALL + }; + + g_TressFXLayouts->pSamplerLayout = pDevice->CreateLayout(desc); +} + +void CreateGenerateSDFLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_TrimeshVertexIndices", 0, EI_RESOURCETYPE_BUFFER_RO }, + {"g_SignedDistanceField", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"collMeshVertexPositions", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBuffer_SDF", 3, EI_RESOURCETYPE_UNIFORM }, + }, + EI_CS + }; + + g_TressFXLayouts->pGenerateSDFLayout = pDevice->CreateLayout(desc); +} + +void CreateSimLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_InitialHairPositions", 4, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairRestLengthSRV", 5, EI_RESOURCETYPE_BUFFER_RO }, + {"g_HairStrandType", 6, EI_RESOURCETYPE_BUFFER_RO }, + {"g_FollowHairRootOffset", 7, EI_RESOURCETYPE_BUFFER_RO }, + {"g_BoneSkinningData", 12, EI_RESOURCETYPE_BUFFER_RO }, + {"tressfxSimParameters", 13, EI_RESOURCETYPE_UNIFORM }, + }, + EI_CS + }; + + g_TressFXLayouts->pSimLayout = pDevice->CreateLayout(desc); +} + +void CreateApplySDFLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_HairVertices", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_PrevHairVertices", 1, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_CS + }; + + g_TressFXLayouts->pApplySDFLayout = pDevice->CreateLayout(desc); +} + +void CreateBoneSkinningLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"bs_boneSkinningData", 1, EI_RESOURCETYPE_BUFFER_RO }, + {"bs_initialVertexPositions", 2, EI_RESOURCETYPE_BUFFER_RO }, + {"bs_collMeshVertexPositions", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBufferCS_BoneMatrix", 3, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pBoneSkinningLayout = pDevice->CreateLayout(desc); + +} + +void CreateSDFMarchingCubesLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"g_MarchingCubesEdgeTable", 3, EI_RESOURCETYPE_BUFFER_RO }, + {"g_MarchingCubesTriangleTable", 4, EI_RESOURCETYPE_BUFFER_RO }, + {"g_MarchingCubesSignedDistanceField", 0, EI_RESOURCETYPE_BUFFER_RW }, + {"g_MarchingCubesTriangleVertices", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"g_NumMarchingCubesVertices", 2, EI_RESOURCETYPE_BUFFER_RW }, + {"ConstBuffer_MC", 5, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pSDFMarchingCubesLayout = pDevice->CreateLayout(desc); +} + +void CreatePPLLFillLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"RWFragmentListHead", 0, EI_RESOURCETYPE_IMAGE_RW }, + {"LinkedListUAV", 1, EI_RESOURCETYPE_BUFFER_RW }, + {"LinkedListCounter", 2, EI_RESOURCETYPE_BUFFER_RW }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLFillLayout = pDevice->CreateLayout(desc); + } + +void CreatePPLLResolveLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"FragmentListHead", 0, EI_RESOURCETYPE_IMAGE_RO }, + {"LinkedListNodes", 1, EI_RESOURCETYPE_BUFFER_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLResolveLayout = pDevice->CreateLayout(desc); +} + +void CreatePPLLShadeParamLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"TressFXShadeParams", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_PS + }; + + g_TressFXLayouts->pPPLLShadeParamLayout = pDevice->CreateLayout(desc); +} + +void CreateShortcutDepthsAlphaLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"RWFragmentDepthsTexture", 0, EI_RESOURCETYPE_IMAGE_RW }, + }, + EI_PS + }; + g_TressFXLayouts->pShortcutDepthsAlphaLayout = pDevice->CreateLayout(desc); +} + +void CreateShortcutDepthReadLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"FragmentDepthsTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pShortcutDepthReadLayout = pDevice->CreateLayout(desc); +} + +void CreateShortCutShadeParamLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"TressFXShadeParams", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_PS + }; + + g_TressFXLayouts->pShortcutShadeParamLayout = pDevice->CreateLayout(desc); +} + +void CreateShortCutColorReadLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"HaiColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, + {"AccumInvAlpha", 1, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + g_TressFXLayouts->pShortCutColorReadLayout = pDevice->CreateLayout(desc); +} + +void CreateViewLayout(EI_Device * pDevice) +{ + EI_LayoutDescription desc = { + { + {"viewConstants", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pViewLayout = pDevice->CreateLayout(desc); +} + +void CreateShadowViewLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"shadowViewConstants", 0, EI_RESOURCETYPE_UNIFORM }, + }, + EI_ALL + }; + + g_TressFXLayouts->pShadowViewLayout = pDevice->CreateLayout(desc); +} + +void CreateLightLayout(EI_Device* pDevice) +{ + EI_LayoutDescription desc = { + { + {"LightConstants", 0, EI_RESOURCETYPE_UNIFORM }, + {"ShadowTexture", 1, EI_RESOURCETYPE_IMAGE_RO }, + }, + EI_PS + }; + + g_TressFXLayouts->pLightLayout = pDevice->CreateLayout(desc); +} + +void InitializeAllLayouts(EI_Device* pDevice) +{ + // See TressFXLayouts.h + // Global storage for layouts. + + if (g_TressFXLayouts == 0) + g_TressFXLayouts = new TressFXLayouts; + + CreateSimPosTanLayout(pDevice); + CreateRenderPosTanLayout(pDevice); + CreateRenderLayout(pDevice); + CreateSamplerLayout(pDevice); + CreateGenerateSDFLayout(pDevice); + CreateSimLayout(pDevice); + CreateApplySDFLayout(pDevice); + CreateBoneSkinningLayout(pDevice); + CreateSDFMarchingCubesLayout(pDevice); + + CreateShortcutDepthsAlphaLayout(pDevice); + CreateShortcutDepthReadLayout(pDevice); + CreateShortCutShadeParamLayout(pDevice); + CreateShortCutColorReadLayout(pDevice); + + CreatePPLLFillLayout(pDevice); + CreatePPLLResolveLayout(pDevice); + CreatePPLLShadeParamLayout(pDevice); + + CreateViewLayout(GetDevice()); + CreateShadowViewLayout(GetDevice()); + CreateLightLayout(GetDevice()); +} + +void DestroyAllLayouts(EI_Device* pDevice) +{ + if (g_TressFXLayouts != nullptr) + { + delete g_TressFXLayouts; + } +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h new file mode 100644 index 0000000000..e187fc3bb3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXLayouts.h @@ -0,0 +1,91 @@ +// ---------------------------------------------------------------------------- +// Layouts describe resources for each type of shader in TressFX. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include "EngineInterface.h" +#include "TressFXConstantBuffers.h" + +#define TRESSFX_GET_16BYTE_INDEX(s, m) (offsetof(s, m) / 16) + +struct TressFXLayouts +{ + std::unique_ptr pTressFXParamLayout = nullptr; + std::unique_ptr pRenderPosTanLayout = nullptr; + std::unique_ptr pSimPosTanLayout = nullptr; + std::unique_ptr pGenerateSDFLayout = nullptr; + std::unique_ptr pSimLayout = nullptr; + std::unique_ptr pApplySDFLayout = nullptr; + std::unique_ptr pBoneSkinningLayout = nullptr; + std::unique_ptr pSDFMarchingCubesLayout = nullptr; + + std::unique_ptr pShortcutDepthsAlphaLayout = nullptr; + std::unique_ptr pShortcutDepthReadLayout = nullptr; + std::unique_ptr pShortcutShadeParamLayout = nullptr; + std::unique_ptr pShortCutColorReadLayout = nullptr; + + std::unique_ptr pPPLLFillLayout = nullptr; + std::unique_ptr pPPLLResolveLayout = nullptr; + std::unique_ptr pPPLLShadeParamLayout = nullptr; + + std::unique_ptr pViewLayout = nullptr; + std::unique_ptr pShadowViewLayout = nullptr; + std::unique_ptr pLightLayout = nullptr; + std::unique_ptr pSamplerLayout = nullptr; +}; + +// by default, we just get layouts from a global. +// Layouts should be reusable for all instances. +// These should be allocated by the user. e.g g_TressFXSlots = new +// TressFXSlots::SlotArraysForAllLayouts; +extern TressFXLayouts* g_TressFXLayouts; + +void InitializeAllLayouts(EI_Device* pDevice); +void DestroyAllLayouts(EI_Device* pDevice); + +inline EI_BindLayout* GetSimPosTanLayout() { return g_TressFXLayouts->pSimPosTanLayout.get(); } +inline EI_BindLayout* GetRenderPosTanLayout() { return g_TressFXLayouts->pRenderPosTanLayout.get(); } +inline EI_BindLayout* GetTressFXParamLayout() { return g_TressFXLayouts->pTressFXParamLayout.get(); } +inline EI_BindLayout* GetGenerateSDFLayout() { return g_TressFXLayouts->pGenerateSDFLayout.get(); } +inline EI_BindLayout* GetApplySDFLayout() { return g_TressFXLayouts->pApplySDFLayout.get(); } +inline EI_BindLayout* GetSimLayout() { return g_TressFXLayouts->pSimLayout.get(); } +inline EI_BindLayout* GetBoneSkinningMeshLayout() { return g_TressFXLayouts->pBoneSkinningLayout.get(); } +inline EI_BindLayout* GetSDFMarchingCubesLayout() { return g_TressFXLayouts->pSDFMarchingCubesLayout.get(); } + +// Shortcut layouts +inline EI_BindLayout* GetShortCutDepthsAlphaLayout() { return g_TressFXLayouts->pShortcutDepthsAlphaLayout.get(); } +inline EI_BindLayout* GetShortCutDepthReadLayout() { return g_TressFXLayouts->pShortcutDepthReadLayout.get(); } +inline EI_BindLayout* GetShortCutShadeParamLayout() { return g_TressFXLayouts->pShortcutShadeParamLayout.get(); } +inline EI_BindLayout* GetShortCutColorReadLayout() { return g_TressFXLayouts->pShortCutColorReadLayout.get(); } + +// PPLL layouts +inline EI_BindLayout* GetPPLLFillLayout() { return g_TressFXLayouts->pPPLLFillLayout.get(); } +inline EI_BindLayout* GetPPLLResolveLayout() { return g_TressFXLayouts->pPPLLResolveLayout.get(); } +inline EI_BindLayout* GetPPLLShadeParamLayout() { return g_TressFXLayouts->pPPLLShadeParamLayout.get(); } + +inline EI_BindLayout* GetViewLayout() { return g_TressFXLayouts->pViewLayout.get(); } +inline EI_BindLayout* GetShadowViewLayout() { return g_TressFXLayouts->pShadowViewLayout.get(); } +inline EI_BindLayout* GetLightLayout() { return g_TressFXLayouts->pLightLayout.get(); } +inline EI_BindLayout* GetSamplerLayout() { return g_TressFXLayouts->pSamplerLayout.get(); } \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp new file mode 100644 index 0000000000..1d9a6fc9b6 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.cpp @@ -0,0 +1,315 @@ +// ---------------------------------------------------------------------------- +// Interface for TressFX OIT using per-pixel linked lists. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include + +//#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" +#include "TressFXPPLL.h" +#include "EngineInterface.h" +#include "HairStrands.h" +#include "TressFXHairObject.h" + +using namespace AMD; + +TressFXPPLL::TressFXPPLL() : + m_nScreenWidth(0), + m_nScreenHeight(0), + m_nNodes(0), + m_nNodeSize(0), + m_PPLLHeads(nullptr), + m_PPLLNodes(nullptr), + m_PPLLCounter(nullptr), + m_pPPLLFillBindSet(nullptr), + m_pPPLLResolveBindSet(nullptr), + m_PPLLRenderTargetSet(nullptr), + m_PPLLFillPSO(nullptr), + m_ShadeParamsBindSet(nullptr) +{ +} + +void TressFXPPLL::Initialize(int width, int height, int nNodes, int nodeSize) +{ + Create(GetDevice(), width, height, nNodes, nodeSize); + + // Create constant buffer and bind set + m_ShadeParamsConstantBuffer.CreateBufferResource("TressFXShadeParams"); + EI_BindSetDescription set = { { m_ShadeParamsConstantBuffer.GetBufferResource() } }; + m_ShadeParamsBindSet = GetDevice()->CreateBindSet(GetShortCutShadeParamLayout(), set); + + // Setup PSOs + + // Hair Fill Pass + { + //std::vector FillDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* HairColorLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetPPLLFillLayout(), GetSamplerLayout() }; + psoParams.layouts = HairColorLayouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_PPLLRenderTargetSet.get(); + + m_PPLLFillPSO = GetDevice()->CreateGraphicsPSO("TressFXPPLL.hlsl", "RenderHairVS", "TressFXPPLL.hlsl", "PPLLFillPS", psoParams); + } + + // Hair Resolve + { + //std::vector ResolveDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + // sushi code was: + /* + // Blending matches SDK Sample, which + // works in terms of (1-a) and otherwise premultiplied. + BlendEnable = true + SrcBlend = ONE + DstBlend = SRCALPHA + BlendOp = ADD + SrcBlendAlpha = ZERO + DstBlendAlpha = ZERO + BlendOpAlpha = ADD + */ + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; //::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcAlpha; //::SrcAlpha; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { GetPPLLResolveLayout(), GetPPLLShadeParamLayout(), GetViewLayout(), GetLightLayout(), GetSamplerLayout() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_PPLLRenderTargetSet.get(); + m_PPLLResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXPPLL.hlsl", "FullScreenVS", "TressFXPPLL.hlsl", "PPLLResolvePS", psoParams); + } +} + +bool TressFXPPLL::Create(EI_Device* pDevice, int width, int height, int nNodes, int nodeSize) +{ + m_nNodes = nNodes; + m_nNodeSize = nodeSize; + m_nScreenWidth = width; + m_nScreenHeight = height; + + // Create required resources + m_PPLLHeads = pDevice->CreateUint32Resource(width, height, 1, "PPLLHeads", TRESSFX_PPLL_NULL_PTR); + m_PPLLNodes = pDevice->CreateBufferResource(nodeSize, nNodes, EI_BF_NEEDSUAV, "PPLLNodes"); + m_PPLLCounter = pDevice->CreateBufferResource(sizeof(uint32_t), 1, EI_BF_NEEDSUAV, "PPLLNodes"); + + // Create bind sets + CreateFillBindSet(pDevice); + CreateResolveBindSet(pDevice); + + // Create RenderPasss sets + CreatePPLLRenderTargetSet(pDevice); + return true; +} + +// return the set? +void TressFXPPLL::CreateFillBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_PPLLHeads.get(), m_PPLLNodes.get(), m_PPLLCounter.get() } + }; + + m_pPPLLFillBindSet = pDevice->CreateBindSet(GetPPLLFillLayout(), bindSet); +} + +void TressFXPPLL::CreateResolveBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_PPLLHeads.get(), m_PPLLNodes.get() } + }; + + m_pPPLLResolveBindSet = pDevice->CreateBindSet(GetPPLLResolveLayout(), bindSet); +} + +void TressFXPPLL::CreatePPLLRenderTargetSet(EI_Device* pDevice) +{ + const EI_Resource* ResourceArray[] = { pDevice->GetColorBufferResource(), pDevice->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_PPLLRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, nullptr); +} + +void TressFXPPLL::Clear(EI_CommandContext& context) +{ + // Consider being explicit on values here. + // In DX, UAV counter clears are actually done when UAV is set, which makes this a bit weird, I + // suppose. + // Also try clearing in shader during fullscreen pass (although can't miss frames, and makes + // reads slower) + // or look at 0-based for fast clears. + + // Transition and clear any resources we need to + + if (m_firstRun) + { + // The first time we use the resource, we need to transition it out of UNDEFINED state to COPY_DEST. + // Doing from PS_SRV causes validation errors. + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_UNDEFINED, EI_STATE_COPY_DEST }, +#endif // TRESSFX_VK + { m_PPLLCounter.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + { m_PPLLNodes.get(), EI_STATE_UAV, EI_STATE_SRV }, // Just need to do this on the first frame so our usual transition doesn't bug out. + }; + + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + else + { + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_SRV, EI_STATE_COPY_DEST }, +#else + { m_PPLLHeads.get(), EI_STATE_SRV, EI_STATE_UAV }, +#endif // TRESSFX_VK + { m_PPLLCounter.get(), EI_STATE_UAV, EI_STATE_COPY_DEST }, + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + + context.ClearUint32Image(m_PPLLHeads.get(), TRESSFX_PPLL_NULL_PTR); + + uint32_t clearCounter = 0; + context.UpdateBuffer(m_PPLLCounter.get(), &clearCounter); +} + +void TressFXPPLL::BeginFill(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + EI_Barrier readToWrite[] = + { +#ifdef TRESSFX_VK + { m_PPLLHeads.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX_VK + { m_PPLLNodes.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_PPLLCounter.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_PPLLRenderTargetSet.get(), L"BeginFill Pass"); +} + +void TressFXPPLL::EndFill(EI_CommandContext& commandContext) +{ + // End the render pass so we can transition the UAVs + GetDevice()->EndRenderPass(commandContext); + + EI_Barrier writeToRead[] = + { + { m_PPLLHeads.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_PPLLNodes.get(), EI_STATE_UAV, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXPPLL::BeginResolve(EI_CommandContext& commandContext) +{ + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_PPLLRenderTargetSet.get(), L"BeginResolve Pass"); +} + +void TressFXPPLL::EndResolve(EI_CommandContext& commandContext) +{ + // End the PPLL render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXPPLL::DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets) +{ + // Loop through all hair strands and render them + for (size_t i = 0; i < numHairStrands; i++) + { + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(commandContext, *pPSO, extraBindSets, numExtraBindSets); + } +} + +void TressFXPPLL::Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet) +{ + // Clear out resources + Clear(commandContext); + + // Render the fill pass + BeginFill(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, m_pPPLLFillBindSet.get(), GetDevice()->GetSamplerBindSet() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_PPLLFillPSO.get(), ExtraBindSets, 3); + } + EndFill(commandContext); + GetDevice()->GetTimeStamp("PPLL Fill"); + + // Hair Resolve pass + BeginResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pPPLLResolveBindSet.get(), m_ShadeParamsBindSet.get(), viewBindSet, lightBindSet, GetDevice()->GetSamplerBindSet() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_PPLLResolvePSO, BindSets, 5); + } + EndResolve(commandContext); + GetDevice()->GetTimeStamp("PPLL Resolve"); + + m_firstRun = false; +} + +void TressFXPPLL::UpdateShadeParameters(std::vector& renderSettings) +{ + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberRadius = renderSettings[i]->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + m_ShadeParamsConstantBuffer->HairShadeParams[i].ShadowAlpha = renderSettings[i]->m_HairShadowAlpha; + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberSpacing = renderSettings[i]->m_HairFiberSpacing; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairEx2 = renderSettings[i]->m_HairSpecExp2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairKs2 = renderSettings[i]->m_HairKSpec2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].MatKValue = { 0.f, renderSettings[i]->m_HairKDiffuse, renderSettings[i]->m_HairKSpec1, renderSettings[i]->m_HairSpecExp1 }; // no ambient + } + + m_ShadeParamsConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h new file mode 100644 index 0000000000..5479fdc688 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXPPLL.h @@ -0,0 +1,98 @@ +// ---------------------------------------------------------------------------- +// Interface for TressFX OIT using per-pixel linked lists. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef AMD_TRESSFXPPLL_H +#define AMD_TRESSFXPPLL_H + +#include "EngineInterface.h" +#include "TressFXSettings.h" + +#include + +// By default, TressFX node sizes are 16 bytes. 4 bytes for each of: tangentcoverage, depth, +// baseColor, next pointer +#define TRESSFX_DEFAULT_NODE_SIZE 16 + +// The special value meaning "end of list" in the PPLL. +// So the UAV of head pointers gets cleared to this. +#define TRESSFX_PPLL_NULL_PTR 0xffffffff + +class HairStrands; + +class TressFXPPLL +{ +public: + TressFXPPLL(); + + void Initialize(int width, int height, int nNodes, int nodeSize); + void Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet); + + void UpdateShadeParameters(std::vector& renderSettings); + +private: + // Node size should include room for UINT next pointer. + void Clear(EI_CommandContext& context); + bool Create(EI_Device* pDevice, int width, int height, int nNodes, int nodeSize = TRESSFX_DEFAULT_NODE_SIZE); + + void DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets); + + // Begin/End for various stages of hair application/rendering + void BeginFill(EI_CommandContext& context); + void EndFill(EI_CommandContext& context); + + void BeginResolve(EI_CommandContext& context); + void EndResolve(EI_CommandContext& context); + + // Bind set creation functions + void CreateFillBindSet(EI_Device* pDevice); + void CreateResolveBindSet(EI_Device* pDevice); + + // RenderPass set creation functions + void CreatePPLLRenderTargetSet(EI_Device* pDevice); + + int m_nScreenWidth; + int m_nScreenHeight; + int m_nNodes; + int m_nNodeSize; + + bool m_firstRun = true; + + std::unique_ptr m_PPLLHeads; + std::unique_ptr m_PPLLNodes; + std::unique_ptr m_PPLLCounter; + + std::unique_ptr m_pPPLLFillBindSet; + std::unique_ptr m_pPPLLResolveBindSet; + + std::unique_ptr m_PPLLRenderTargetSet = nullptr; + + std::unique_ptr m_PPLLFillPSO = nullptr; + std::unique_ptr m_PPLLResolvePSO = nullptr; + + TressFXUniformBuffer m_ShadeParamsConstantBuffer; + std::unique_ptr m_ShadeParamsBindSet = nullptr; +}; + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp new file mode 100644 index 0000000000..dfbb40672c --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.cpp @@ -0,0 +1,221 @@ +// ---------------------------------------------------------------------------- +// This wraps a single signed distance field, used for TressFX collision. +// it provides the interface to generate the signed distance field, as well +// as apply that signed distance field to a TressFX simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + + +// TressFX +#include "TressFXAsset.h" +#include "TressFXHairObject.h" +#include "TressFXLayouts.h" +#include "TressFXSDFCollision.h" +#include "TressFXSDFInputMeshInterface.h" + +#include + +TressFXSDFCollision::TressFXSDFCollision( + EI_Device* pDevice, + TressFXSDFInputMeshInterface* pCollMesh, + const char * modelName, + int numCellsInX, + float collisionMargin) + : m_CollisionMargin(collisionMargin) + , m_NumCellsInXAxis(numCellsInX) + , m_GridAllocationMutliplier(1.4f) + , m_NumTotalCells(INT_MAX) + , m_pSimBindSet(nullptr) + +{ + m_pInputCollisionMesh = pCollMesh; + + // initialize SDF grid using the associated model's bounding box + Vector3 bmin, bmax; + m_pInputCollisionMesh->GetInitialBoundingBox(bmin, bmax); + m_CellSize = (bmax.x - bmin.x) / m_NumCellsInXAxis; + int numExtraPaddingCells = (int)(0.8f * (float)m_NumCellsInXAxis); + m_PaddingBoundary = numExtraPaddingCells * m_CellSize, numExtraPaddingCells * m_CellSize, + numExtraPaddingCells * m_CellSize; + + UpdateSDFGrid(bmin, bmax); + + bmin -= m_PaddingBoundary; + bmax += m_PaddingBoundary; + + m_NumCellsX = (int)((bmax.x - bmin.x) / m_CellSize); + m_NumCellsY = (int)((bmax.y - bmin.y) / m_CellSize); + m_NumCellsZ = (int)((bmax.z - bmin.z) / m_CellSize); + m_NumTotalCells = + TressFXMin(m_NumTotalCells, + (int)(m_GridAllocationMutliplier * m_NumCellsX * m_NumCellsY * m_NumCellsZ)); + + // UAV + m_SignedDistanceFieldUAV = + pDevice->CreateBufferResource(sizeof(int), m_NumTotalCells, EI_BF_NEEDSUAV, "SDF"); + + // constant buffer + m_pConstantBufferResource = pDevice->CreateBufferResource(sizeof(TressFXSDFCollisionParams), 1, EI_BF_UNIFORMBUFFER, "TressFXSDFCollisionConstantBuffer"); + + // Bind set + EI_BindSetDescription bindSet = + { + { &m_pInputCollisionMesh->GetTrimeshVertexIndicesBuffer(), m_SignedDistanceFieldUAV.get(), &m_pInputCollisionMesh->GetMeshBuffer(), m_pConstantBufferResource.get() } + }; + m_pSimBindSet = pDevice->CreateBindSet(GetGenerateSDFLayout(), bindSet); +} + +void TressFXSDFCollision::UpdateSDFGrid(const Vector3& tight_bbox_min, + const Vector3& tight_bbox_max) +{ + Vector3 bmin = tight_bbox_min - m_PaddingBoundary; + m_Origin = bmin; +} + +void TressFXSDFCollision::Update(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system) +{ + if (!m_pInputCollisionMesh) + return; + + EI_Marker marker(commandContext, "SDFUpdate"); + + // Update the grid data based on the current bounding box + Vector3 min, max; + m_pInputCollisionMesh->GetBoundingBox(min, max); + UpdateSDFGrid(min, max); + + // Set the constant buffer parameters + m_ConstBuffer.m_Origin.x = m_Origin.x; + m_ConstBuffer.m_Origin.y = m_Origin.y; + m_ConstBuffer.m_Origin.z = m_Origin.z; + m_ConstBuffer.m_Origin.w = 0; + m_ConstBuffer.m_CellSize = m_CellSize; + m_ConstBuffer.m_NumCellsX = m_NumCellsX; + m_ConstBuffer.m_NumCellsY = m_NumCellsY; + m_ConstBuffer.m_NumCellsZ = m_NumCellsZ; + + commandContext.UpdateBuffer(m_pConstantBufferResource.get(), &m_ConstBuffer); + + // Binding UAVs, SRVs and CBs + + // Run InitializeSignedDistanceField. One thread per one cell. + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_InitializeSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_InitializeSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("InitializeSignedDistanceField"); + } + + + EI_Barrier uavMeshAndSDF[] = + { + { & (m_pInputCollisionMesh->GetMeshBuffer()), EI_STATE_UAV, EI_STATE_UAV }, + { m_SignedDistanceFieldUAV.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); + + // Run ConstructSignedDistanceField. One thread per each triangle + { + int numDispatchSize = (int)ceil((float)m_pInputCollisionMesh->GetNumMeshTriangle() / + (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_ConstructSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_ConstructSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("ConstructSignedDistanceField"); + } + + // State transition for DX12 + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); + + // Run FinalizeSignedDistanceField. One thread per each triangle + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_FinalizeSignedDistanceFieldPSO.get()); + EI_BindSet* bindSets[] = { m_pSimBindSet.get() }; + commandContext.BindSets(system.m_FinalizeSignedDistanceFieldPSO.get(), 1, bindSets); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("FinalizeSignedDistanceField"); + } + + // State transition for DX12 + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavMeshAndSDF), uavMeshAndSDF); +} + +void TressFXSDFCollision::CollideWithHair(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system, + TressFXHairObject& hairObject) +{ + if (!m_pInputCollisionMesh) + return; + + EI_Marker marker(commandContext, "CollideWithHair"); + + int numTotalHairVertices = hairObject.GetNumTotalHairVertices(); + + // Get vertex buffers from the hair object. + TressFXDynamicState& state = hairObject.GetDynamicState(); + + // Set the constant buffer parameters + m_ConstBuffer.m_Origin.x = m_Origin.x; + m_ConstBuffer.m_Origin.y = m_Origin.y; + m_ConstBuffer.m_Origin.z = m_Origin.z; + m_ConstBuffer.m_Origin.w = 0; + m_ConstBuffer.m_CellSize = m_CellSize; + m_ConstBuffer.m_NumCellsX = m_NumCellsX; + m_ConstBuffer.m_NumCellsY = m_NumCellsY; + m_ConstBuffer.m_NumCellsZ = m_NumCellsZ; + m_ConstBuffer.m_CollisionMargin = m_CollisionMargin * m_CellSize; + m_ConstBuffer.m_NumTotalHairVertices = hairObject.GetNumTotalHairVertices(); + m_ConstBuffer.m_NumHairVerticesPerStrand = hairObject.GetNumVerticesPerStrand(); + + commandContext.UpdateBuffer(m_pConstantBufferResource.get(), &m_ConstBuffer); + + + // Run CollideHairVerticesWithSdf. One thread per one hair vertex. + { + int numDispatchSize = + (int)ceil((float)numTotalHairVertices / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(system.m_CollideHairVerticesWithSdfPSO.get()); + EI_BindSet * bindSets[] = { m_pSimBindSet.get(), &state.GetApplySDFBindSet() }; + commandContext.BindSets(system.m_CollideHairVerticesWithSdfPSO.get(), 2, bindSets ); + commandContext.Dispatch(numDispatchSize); + GetDevice()->GetTimeStamp("CollideHairVerticesWithSdf"); + } + + // State transition for DX12 + state.UAVBarrier(commandContext); + + //EI_SB_Transition(commandContext, m_SignedDistanceFieldUAV, EI_STATE_UAV, EI_STATE_UAV); + EI_Barrier uavSDF[] = + { + { m_SignedDistanceFieldUAV.get(), EI_STATE_UAV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(1, uavSDF); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h new file mode 100644 index 0000000000..753c8b9dc3 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFCollision.h @@ -0,0 +1,126 @@ +// ---------------------------------------------------------------------------- +// This wraps a single signed distance field, used for TressFX collision. +// it provides the interface to generate the signed distance field, as well +// as apply that signed distance field to a TressFX simulation. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef TRESSFXSDFCOLLIION_H_ +#define TRESSFXSDFCOLLIION_H_ + +#include "TressFXCommon.h" +#include "TressFXHairObject.h" +#include "EngineInterface.h" +#include "TressFXLayouts.h" + +class TressFXHairObject; +class TressFXAsset; +class TressFXSDFInputMeshInterface; + +class TressFXSDFCollisionSystem +{ +public: + void Initialize(EI_Device* pDevice) + { + EI_BindLayout * layouts[] = { GetGenerateSDFLayout(), GetApplySDFLayout() }; + m_InitializeSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "InitializeSignedDistanceField", layouts, 2); + m_ConstructSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "ConstructSignedDistanceField", layouts, 2); + m_FinalizeSignedDistanceFieldPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "FinalizeSignedDistanceField", layouts, 2); + m_CollideHairVerticesWithSdfPSO = pDevice->CreateComputeShaderPSO("TressFXSDFCollision.hlsl", "CollideHairVerticesWithSdf_forward", layouts, 2); + } + + std::unique_ptr m_InitializeSignedDistanceFieldPSO; + std::unique_ptr m_ConstructSignedDistanceFieldPSO; + std::unique_ptr m_FinalizeSignedDistanceFieldPSO; + std::unique_ptr m_CollideHairVerticesWithSdfPSO; +}; + +class TressFXSDFCollision : private TressFXNonCopyable +{ +public: + TressFXSDFCollision( + EI_Device* pDevice, + TressFXSDFInputMeshInterface* pCollMesh, + const char * modelName, + int numCellsInX, + float collisionMargin); + + // Update and animate the collision mesh + void Update(EI_CommandContext& commandContext, TressFXSDFCollisionSystem& system); + + // Run collision checking and response with hair + void CollideWithHair(EI_CommandContext& commandContext, + TressFXSDFCollisionSystem& system, + TressFXHairObject& hairObject); + + float GetSDFCollisionMargin() const { return m_CollisionMargin; } + + + const EI_Resource& GetSDFDataGPUBuffer() const { return *m_SignedDistanceFieldUAV; } + EI_Resource& GetSDFDataGPUBuffer() { return *m_SignedDistanceFieldUAV; } + + // Grid + float GetGridCellSize() const { return m_CellSize; } + Vector3 GetGridOrigin() const { return m_Origin; } + void GetGridNumCells(int& x, int& y, int& z) const + { + x = m_NumCellsX; + y = m_NumCellsY; + z = m_NumCellsZ; + } + int GetGridNumTotalCells() const { return m_NumTotalCells; } + + TressFXSDFCollisionParams& GetConstantBufferData() { return m_ConstBuffer; } +private: + TressFXSDFCollisionParams m_ConstBuffer; + std::unique_ptr m_pConstantBufferResource; + TressFXSDFInputMeshInterface* m_pInputCollisionMesh; + + // UAV + std::unique_ptr m_SignedDistanceFieldUAV; + + std::unique_ptr m_pSimBindSet; + + // SDF grid + Vector3 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_NumTotalCells; + Vector3 m_Min; + Vector3 m_Max; + Vector3 m_PaddingBoundary; + float m_GridAllocationMutliplier; + + // number of cells in X axis + int m_NumCellsInXAxis; + + // SDF collision margin. + float m_CollisionMargin; + + void UpdateSDFGrid(const Vector3& tight_bbox_min, + const Vector3& tight_bbox_max); +}; + +#endif // TRESSFXSDFCOLLIION_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h new file mode 100644 index 0000000000..adc0170310 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFInputMeshInterface.h @@ -0,0 +1,57 @@ +// ---------------------------------------------------------------------------- +// Signed distance fields are generated from triangle meshes. +// This is the interface to a triangle mesh for use by TressFXSDFCollision +// to generate the SDF. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include "Math/Vector3D.h" +#include "EngineInterface.h" + +class TressFXSDFInputMeshInterface +{ +public: + virtual ~TressFXSDFInputMeshInterface() {} + + // Returns the GPU buffer containing the mesh data. It will be an input to SDF generator. + virtual EI_Resource& GetMeshBuffer() = 0; + + // Return the GPU index buffer of the mesh. + virtual EI_Resource& GetTrimeshVertexIndicesBuffer() = 0; + + // Returns the number of vertices of the mesh + virtual int GetNumMeshVertices() = 0; + + // Returns the number of triangles of the mesh + virtual int GetNumMeshTriangle() = 0; + + // Returns the byte size of mesh buffer data element. + virtual size_t GetSizeOfMeshElement() = 0; + + // Returns the bounding box of the current mesh. + virtual void GetBoundingBox(Vector3& min, Vector3& max) = 0; + + virtual void GetInitialBoundingBox(Vector3& min, Vector3& max) = 0; +}; \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp new file mode 100644 index 0000000000..7bb210aed5 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.cpp @@ -0,0 +1,233 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "MarchingCubesTables.h" +#include "TressFXSDFMarchingCubes.h" +#include "TressFXSDFCollision.h" +#include "EngineInterface.h" + +TressFXSDFMarchingCubes::TressFXSDFMarchingCubes() + : m_MaxMarchingCubesVertices(128 * 1024) + , m_MarchingCubesTriangleVerticesUAV(nullptr) + , m_NumMarchingCubesVerticesUAV(nullptr) + , m_MarchingCubesEdgeTableSRV(nullptr) + , m_MarchingCubesTriangleTableSRV(nullptr) +{} + +void TressFXSDFMarchingCubes::Initialize(const char * name, EI_Scene* gltfImplementation, EI_RenderTargetSet * renderPass) +{ + m_pGLTFImplementation = gltfImplementation; + + EI_Device* pDevice = GetDevice(); + + // load a compute shader + EI_BindLayout * layouts[] = { GetSDFMarchingCubesLayout() }; + m_pComputeEffectInitializeMCVertices = GetDevice()->CreateComputeShaderPSO("TressFXMarchingCubes.hlsl", "InitializeMCVertices", layouts, 1); + m_pComputeEffectRunMarchingCubesOnSdf = GetDevice()->CreateComputeShaderPSO("TressFXMarchingCubes.hlsl", "RunMarchingCubesOnSdf", layouts, 1); + + EI_PSOParams psoParams; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = renderPass; + m_pRenderEffect = GetDevice()->CreateGraphicsPSO("TressFXMarchingCubes.hlsl", "MarchingCubesVS", "TressFXMarchingCubes.hlsl", "MarchingCubesPS", psoParams); + + AMD::uint32 vertexBlockSize = sizeof(VertexData); + const int NUM_ELEMENTS_EDGE_TABLE = 256; + const int NUM_ELEMENTS_TRI_TABLE = 256 * 16; + + m_MarchingCubesTriangleVerticesUAV = pDevice->CreateBufferResource(vertexBlockSize, m_MaxMarchingCubesVertices, EI_BF_NEEDSUAV, "MCTriVerts"); + m_NumMarchingCubesVerticesUAV = pDevice->CreateBufferResource(sizeof(int), 1, EI_BF_NEEDSUAV, "NumMCVerts"); + m_MarchingCubesEdgeTableSRV = pDevice->CreateBufferResource(sizeof(int), NUM_ELEMENTS_EDGE_TABLE, 0, "MCEdgeTable"); + m_MarchingCubesTriangleTableSRV = pDevice->CreateBufferResource(sizeof(int), NUM_ELEMENTS_TRI_TABLE, 0, "MCTriTable"); + + m_pUniformBuffer = pDevice->CreateBufferResource(sizeof(TressFXMarchingCubesUniformBuffer), 1, EI_BF_UNIFORMBUFFER, "ConstantBuffer_MC"); + //------------------ + // Initial data. + // + // Just need tables for generating marching cubes. + // edge and triangle table should probably be combined at some point. + //------------------ + + EI_CommandContext& commandContext = pDevice->GetCurrentCommandContext(); + + EI_Barrier uavToCopy[] = + { + { m_MarchingCubesTriangleVerticesUAV.get() , EI_STATE_UAV, EI_STATE_COPY_DEST}, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_UAV, EI_STATE_COPY_DEST } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uavToCopy), uavToCopy); + + // write zero for the number of vertices. + int zero = 0; + commandContext.UpdateBuffer(m_NumMarchingCubesVerticesUAV.get(), &zero); + + // Fill in the edge table. + commandContext.UpdateBuffer(m_MarchingCubesEdgeTableSRV.get(), (void*)MARCHING_CUBES_EDGE_TABLE); + + // Fill in the triangle table. + commandContext.UpdateBuffer(m_MarchingCubesTriangleTableSRV.get(), (void*)MARCHING_CUBES_TRIANGLE_TABLE); + + EI_Barrier uploadDone[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_MarchingCubesEdgeTableSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV }, + { m_MarchingCubesTriangleTableSRV.get(), EI_STATE_COPY_DEST, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(uploadDone), uploadDone); + + assert(m_pSDF); + // Create bindet + EI_Resource& sdfDataBuffer = m_pSDF->GetSDFDataGPUBuffer(); + EI_BindSetDescription desc = + { + { m_MarchingCubesEdgeTableSRV.get(), m_MarchingCubesTriangleTableSRV.get(), &sdfDataBuffer, m_MarchingCubesTriangleVerticesUAV.get(), m_NumMarchingCubesVerticesUAV.get(), m_pUniformBuffer.get() } + }; + m_pBindSet = pDevice->CreateBindSet(GetSDFMarchingCubesLayout(), desc); +} + +void TressFXSDFMarchingCubes::Draw() +{ + //---------------------------- + // Draw marching cubes mesh + //---------------------------- + m_uniformBufferData.cColor = { 1.0f, 1.0f, 0.0f }; + m_uniformBufferData.vLightDir = { 1.0f, 1.0f, 1.0f }; + m_uniformBufferData.mMW = m_pGLTFImplementation->GetMV(); + m_uniformBufferData.mMWP = m_pGLTFImplementation->GetMVP(); + + + EI_CommandContext& context = GetDevice()->GetCurrentCommandContext(); + + EI_BindSet* bindSets[] = { m_pBindSet.get() }; + context.BindSets(m_pRenderEffect.get(), 1, bindSets); + EI_DrawParams drawParams; + drawParams.numVertices = m_MaxMarchingCubesVertices; + drawParams.numInstances = 1; + context.DrawInstanced(*m_pRenderEffect, drawParams); +} + +void TressFXSDFMarchingCubes::DrawGrid() +{ + /* + // Render SDF grid + m_LineRenderer.SetColor(SuVector4(0.f, 0.f, 1.f, 0)); + + for (int j = 0; j <= m_NumCellsY; ++j) + { + for (int k = 0; k <= m_NumCellsZ; ++k) + { + SuVector3 p0 = m_Origin + SuVector3(0, j * m_CellSize, k * m_CellSize); + SuVector3 p1 = p0 + SuVector3(m_NumCellsX * m_CellSize, 0, 0); + + m_LineRenderer.DrawLine((SuPoint3&)p0, (SuPoint3&)p1); + } + + for (int i = 0; i <= m_NumCellsX; ++i) + { + SuVector3 p0 = m_Origin + SuVector3(i * m_CellSize, j * m_CellSize, 0); + SuVector3 p1 = p0 + SuVector3(0, 0, m_NumCellsZ * m_CellSize); + + m_LineRenderer.DrawLine((SuPoint3&)p0, (SuPoint3&)p1); + } + } + */ +} + +void TressFXSDFMarchingCubes::Update(EI_CommandContext& commandContext) +{ + assert(m_pSDF); + + m_Origin = { m_pSDF->GetGridOrigin().x, m_pSDF->GetGridOrigin().y, m_pSDF->GetGridOrigin().z }; + m_CellSize = m_pSDF->GetGridCellSize(); + m_pSDF->GetGridNumCells(m_NumCellsX, m_NumCellsY, m_NumCellsZ); + m_NumTotalCells = m_pSDF->GetGridNumTotalCells(); + + EI_Barrier barrier1[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_SRV, EI_STATE_UAV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_SRV, EI_STATE_UAV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(barrier1), barrier1); + + //------------------------------- + // RunMarchingCubesOnSdf + //------------------------------- + { + // Set the constant buffer parameters + TressFXMarchingCubesUniformBuffer& constBuffer = m_uniformBufferData; + constBuffer.g_MaxMarchingCubesVertices = m_MaxMarchingCubesVertices; + constBuffer.g_MarchingCubesIsolevel = m_CellSize * m_SDFIsoLevel; + + // Set the constant buffer parameters + constBuffer.g_Origin = { m_Origin.x, m_Origin.y, m_Origin.z, 0.0f }; + constBuffer.g_CellSize = m_CellSize; + constBuffer.g_NumCellsX = m_NumCellsX; + constBuffer.g_NumCellsY = m_NumCellsY; + constBuffer.g_NumCellsZ = m_NumCellsZ; + + commandContext.UpdateBuffer(m_pUniformBuffer.get(), &constBuffer); + + EI_Barrier copyToResource = { m_pUniformBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_CONSTANT_BUFFER }; + commandContext.SubmitBarrier(1, ©ToResource); + + EI_BindSet* bindSets = { m_pBindSet.get() }; + commandContext.BindSets(m_pComputeEffectInitializeMCVertices.get(), 1, &bindSets); + + // Run InitializeMCVertices. One thread per each cell + { + int numDispatchSize = (int)ceil((float)m_MaxMarchingCubesVertices / + (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(m_pComputeEffectInitializeMCVertices.get()); + commandContext.Dispatch(numDispatchSize); + } + + commandContext.BindSets(m_pComputeEffectRunMarchingCubesOnSdf.get(), 1, &bindSets); + + // Run RunMarchingCubesOnSdf. One thread per each cell + { + int numDispatchSize = + (int)ceil((float)m_NumTotalCells / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + commandContext.BindPSO(m_pComputeEffectRunMarchingCubesOnSdf.get()); + commandContext.Dispatch(numDispatchSize); + } + EI_Resource& sdfDataBuffer = m_pSDF->GetSDFDataGPUBuffer(); + } + EI_Barrier barrier[] = + { + { m_MarchingCubesTriangleVerticesUAV.get(), EI_STATE_UAV, EI_STATE_SRV }, + { m_NumMarchingCubesVerticesUAV.get(), EI_STATE_UAV, EI_STATE_SRV } + }; + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h new file mode 100644 index 0000000000..44da09ca71 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSDFMarchingCubes.h @@ -0,0 +1,119 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef TRESSFXSDFMARCHINGCUBES_H_ +#define TRESSFXSDFMARCHINGCUBES_H_ + +#include "TressFXCommon.h" +#include "EngineInterface.h" + +class TressFXSDFCollision; +class EI_Scene; + +struct TressFXMarchingCubesUniformBuffer { + AMD::float4x4 mMW; + AMD::float4x4 mMWP; + AMD::float4 cColor; + AMD::float4 vLightDir; + AMD::float4 g_Origin; + float g_CellSize; + int g_NumCellsX; + int g_NumCellsY; + int g_NumCellsZ; + int g_MaxMarchingCubesVertices; + float g_MarchingCubesIsolevel; +}; + +class TressFXSDFMarchingCubes : private TressFXNonCopyable +{ +public: + TressFXSDFMarchingCubes(); + + void Initialize(const char * name, EI_Scene* gltfImplementation, EI_RenderTargetSet * renderTargetSet); + + // Draw the SDF using marching cubes for debug purpose + void Draw(); + + // Draw the grid + void DrawGrid(); + + // Update mesh by running marching cubes + void Update(EI_CommandContext& commandContext); + + void SetSDF(TressFXSDFCollision* SDF) + { + assert(SDF); + m_pSDF = SDF; + } + + // Setting the SDF ISO level for drawing. + void SetSDFIsoLevel(float isoLevel) { m_SDFIsoLevel = isoLevel; } + +private: + // SDF grid + AMD::float3 m_Origin; + float m_CellSize; + int m_NumCellsX; + int m_NumCellsY; + int m_NumCellsZ; + int m_NumTotalCells; + + EI_Scene* m_pGLTFImplementation; + + TressFXSDFCollision* m_pSDF; + + TressFXMarchingCubesUniformBuffer m_uniformBufferData; + std::unique_ptr m_pUniformBuffer; + + std::unique_ptr m_pBindSet; + + // For drawing lines + // SuBatchLineRenderer m_LineRenderer; + + struct VertexData + { + float position[4]; + float normal[4]; + }; + + // SDF ISO level. This value will be multiplied with the cell size before be passed to the + // compute shader. + float m_SDFIsoLevel; + + const int m_MaxMarchingCubesVertices; + int m_NumMCVertices; + + std::unique_ptr m_MarchingCubesTriangleVerticesUAV; + std::unique_ptr m_NumMarchingCubesVerticesUAV; + + std::unique_ptr m_MarchingCubesEdgeTableSRV; + std::unique_ptr m_MarchingCubesTriangleTableSRV; + + // compute shader + std::unique_ptr m_pComputeEffectInitializeMCVertices; + std::unique_ptr m_pComputeEffectRunMarchingCubesOnSdf; + + // shader for rendering + std::unique_ptr m_pRenderEffect; +}; + +#endif // TRESSFXSDFMARCHINGCUBES_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp new file mode 100644 index 0000000000..42ba6c5cdc --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp @@ -0,0 +1,339 @@ +// ---------------------------------------------------------------------------- +// Wrappers for setting values that end up in constant buffers. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// +#include + +#include +#include + +namespace AMD +{ + void TressFXSimulationSettings::Reflect(AZ::ReflectContext* context) + { + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("vspCoeff", &TressFXSimulationSettings::m_vspCoeff) + ->Field("vspAccelThreshold", &TressFXSimulationSettings::m_vspAccelThreshold) + ->Field("localConstraintStiffness", &TressFXSimulationSettings::m_localConstraintStiffness) + ->Field("localConstraintsIterations", &TressFXSimulationSettings::m_localConstraintsIterations) + ->Field("globalConstraintStiffness", &TressFXSimulationSettings::m_globalConstraintStiffness) + ->Field("globalConstraintsRange", &TressFXSimulationSettings::m_globalConstraintsRange) + ->Field("lengthConstraintsIterations", &TressFXSimulationSettings::m_lengthConstraintsIterations) + ->Field("damping", &TressFXSimulationSettings::m_damping) + ->Field("gravityMagnitude", &TressFXSimulationSettings::m_gravityMagnitude) + ->Field("tipSeparation", &TressFXSimulationSettings::m_tipSeparation) + ->Field("windMagnitude", &TressFXSimulationSettings::m_windMagnitude) + ->Field("windDirection", &TressFXSimulationSettings::m_windDirection) + ->Field("windAngleRadians", &TressFXSimulationSettings::m_windAngleRadians) + ->Field("clampPositionDelta", &TressFXSimulationSettings::m_clampPositionDelta); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("TressFXSimulationSettings", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_vspCoeff, "Vsp Coeffs", + "VSP (Velocity Shock Propagation) value. VSP makes the root vertex velocity propagate through the rest " + "of vertices in the hair strand.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_vspAccelThreshold, "Vsp Accel Threshold", + "VSP acceleration threshold makes the VSP value increase when the pseudo-acceleration of the root " + "vertex is greater than the threshold value.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_localConstraintStiffness, "Local Constraint Stiffness", + "Controls the stiffness of a strand, meaning both global and local stiffness are used to keep the original " + "(imported) hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_localConstraintsIterations, + "Local Constraint Iterations", "Allocates more simulation time (iterations) toward keeping the local hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 1) + ->Attribute(AZ::Edit::Attributes::Max, 10) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_globalConstraintStiffness, + "Global Constraint Stiffness", "Controls the stiffness of a strand, meaning both global and local stiffness are used " + "to keep the original(imported) hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_globalConstraintsRange, "Global Constraint Range", + "Controls how much of the hair strand is affected by the global shape stiffness requirement.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_lengthConstraintsIterations, + "Length Constraint Iterations", "Allocates more simulation time (iterations) toward keeping the global hair shape.") + ->Attribute(AZ::Edit::Attributes::Min, 1) + ->Attribute(AZ::Edit::Attributes::Max, 10) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_damping, "Damping", + "Damping smooths out the motion of the hair. It also slows down the hair movement.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_gravityMagnitude, "Gravity Magnitude", + "Gravity pseudo value. A value of 10 closely approximates regular gravity in common game engine.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_tipSeparation, "Tip Separation", + "Forces the tips of the strands away from each other.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_windMagnitude, "Wind Magnitude", + "Wind multiplier value. It allows you to see the effect of wind on the hair.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXSimulationSettings::m_windDirection, "Wind Direction", + "xyz-vector (world space) for the wind direction.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->Attribute(AZ::Edit::Attributes::Step, 0.1f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_windAngleRadians, "Wind Angle Radians", + "Wind angle in radians") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXSimulationSettings::m_clampPositionDelta, "Clamp Velocity", + "To increase stability at low or unstable framerates, this parameter limits the displacement of hair segments per frame.") + ->Attribute(AZ::Edit::Attributes::Min, 1.0f) + ->Attribute(AZ::Edit::Attributes::Max, 24.0f) + ; + } + } + } + + void TressFXRenderingSettings::Reflect(AZ::ReflectContext* context) + { + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(3) + // Albedo assets + ->Field("BaseAlbedoAsset", &TressFXRenderingSettings::m_baseAlbedoAsset) + ->Field("StrandAlbedoAsset", &TressFXRenderingSettings::m_strandAlbedoAsset) + + // LOD Settings + ->Field("LODStartDistance", &TressFXRenderingSettings::m_LODStartDistance) + ->Field("LODEndDistance", &TressFXRenderingSettings::m_LODEndDistance) + ->Field("LODPercent", &TressFXRenderingSettings::m_LODPercent) + ->Field("LODWidthMultiplier", &TressFXRenderingSettings::m_LODWidthMultiplier) + + // General information + ->Field("FiberRadius", &TressFXRenderingSettings::m_FiberRadius) + ->Field("TipPercentage", &TressFXRenderingSettings::m_TipPercentage) + ->Field("StrandUVTilingFactor", &TressFXRenderingSettings::m_StrandUVTilingFactor) + ->Field("FiberRatio", &TressFXRenderingSettings::m_FiberRatio) + + // Lighting/shading - Original TressFX Kajiya lighting model + ->Field("HairMatBaseColor", &TressFXRenderingSettings::m_HairMatBaseColor) + ->Field("HairMatTipColor", &TressFXRenderingSettings::m_HairMatTipColor) + ->Field("HairKDiffuse", &TressFXRenderingSettings::m_HairKDiffuse) + ->Field("HairKSpec1", &TressFXRenderingSettings::m_HairKSpec1) + ->Field("HairSpecExp1", &TressFXRenderingSettings::m_HairSpecExp1) + ->Field("HairKSpec2", &TressFXRenderingSettings::m_HairKSpec2) + ->Field("HairSpecExp2", &TressFXRenderingSettings::m_HairSpecExp2) + // Lighting/shading - modified Marschner lighting model + ->Field("HairRoughness", &TressFXRenderingSettings::m_HairRoughness) + ->Field("HairCuticleTilt", &TressFXRenderingSettings::m_HairCuticleTilt) + + // shadow lookup + ->Field("HairShadowAlpha", &TressFXRenderingSettings::m_HairShadowAlpha) + ->Field("HairFiberSpacing", &TressFXRenderingSettings::m_HairFiberSpacing) + ->Field("HairMaxShadowFibers", &TressFXRenderingSettings::m_HairMaxShadowFibers) + ->Field("ShadowLODStartDistance", &TressFXRenderingSettings::m_ShadowLODStartDistance) + ->Field("ShadowLODEndDistance", &TressFXRenderingSettings::m_ShadowLODEndDistance) + ->Field("ShadowLODPercent", &TressFXRenderingSettings::m_ShadowLODPercent) + ->Field("ShadowLODWidthMultiplier", &TressFXRenderingSettings::m_ShadowLODWidthMultiplier) + + // others + ->Field("EnableStrandUV", &TressFXRenderingSettings::m_EnableStrandUV) + ->Field("EnableStrandTangent", &TressFXRenderingSettings::m_EnableStrandTangent) + ->Field("EnableThinTip", &TressFXRenderingSettings::m_EnableThinTip) + ->Field("EnableHairLOD", &TressFXRenderingSettings::m_EnableHairLOD) + ->Field("EnableShadowLOD", &TressFXRenderingSettings::m_EnableShadowLOD) + ; + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("TressFXRenderingSettings", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_baseAlbedoAsset, "Base Albedo Asset", + "This texture is the UV mapped color texture to use for the 'scalp'.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &TressFXRenderingSettings::OnImgChanged) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_strandAlbedoAsset, "Strand Albedo Asset", + "Albedo texture to use along the strand.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &TressFXRenderingSettings::OnImgChanged) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_LODStartDistance, "LOD Start Distance", + "Distance to begin LOD. Distance is in centimeters between the camera and hair.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_LODEndDistance, "LOD End Distance", + "Distance where LOD should be at its maximum reduction/multiplier values, in centimeters.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_LODPercent, "Max LOD Reduction", + "Maximum amount of reduction as a percentage of the original.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_LODWidthMultiplier, "Max LOD Strand Width Multiplier", + "Maximum amount the strand width would be multiplied by.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_FiberRadius, "Fiber Radius", "Diameter of the fiber.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_TipPercentage, "Tip Percentage", + "Dictates the amount of lerp blend between Base Scalp Albedo and Mat Tip Color.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_StrandUVTilingFactor, "Strand UVTiling Factor", + "Amount of tiling to use (1D) along the strand.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_FiberRatio, "Fiber ratio", + "Used with thin tip. Sets the extent to which the hair strand will taper.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Color, &TressFXRenderingSettings::m_HairMatBaseColor, "Base Color", + "RGB color to be used for the base color of the hair.") + ->Attribute(AZ_CRC("AlphaChannel", 0xa0cab5cf), true) + ->DataElement( + AZ::Edit::UIHandlers::Color, &TressFXRenderingSettings::m_HairMatTipColor, "Mat Tip Color", + "RGB color to use for a blend from root to tip.") + ->Attribute(AZ_CRC("AlphaChannel", 0xa0cab5cf), true) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_HairKDiffuse, "Hair Kdiffuse", + "Diffuse coefficient, think of it as a gain value. The Kajiya-Kay model diffuse component is proportional to " + "the sine between the light and tangent vectors.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairKSpec1, "Hair Ks1", + "Primary specular reflection coefficient (shifted toward the root).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairSpecExp1, "Hair Ex1", + "Specular power to use for the calculated specular root value (primary highlight that is shifted toward the root.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 100.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairKSpec2, "Hair Ks2", + "Secondary specular reflection coefficient (shifted toward the tip).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairSpecExp2, "Hair Ex2", + "Specular power to use for the calculated specular tip value.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 100.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairRoughness, "Hair Roughness", + "Roughness of the hair - effective value is between 0.5 and 0.7") + ->Attribute(AZ::Edit::Attributes::Min, 0.4f) + ->Attribute(AZ::Edit::Attributes::Max, 0.9f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairCuticleTilt, "Hair Cuticle Angle", + "Cutical angle in radians determeaning how the light refraction behaves. Suggested value is 5-8 degrees --> 0.07") + ->Attribute(AZ::Edit::Attributes::Min, -0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 0.15f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairShadowAlpha, "Hair Shadow Alpha", + "Used to attenuate hair shadows based on distance (depth into the strands of hair).") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairFiberSpacing, "Fiber Spacing", + "How much spacing between the fibers (should include fiber radius when setting this value). ") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_HairMaxShadowFibers, "Max Shadow Fibers", + "Used as a cutoff value for the shadow attenuation calculation.") + ->Attribute(AZ::Edit::Attributes::Min, 0) + ->Attribute(AZ::Edit::Attributes::Max, 100) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_ShadowLODStartDistance, "Shadow LOD Start Distance ", + "(Shadow)Distance to begin LOD.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TressFXRenderingSettings::m_ShadowLODEndDistance, "Shadow LOD End Distance", + "(Shadow)Distance where LOD should be at its maximum reduction/multiplier values.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_ShadowLODPercent, "Shadow Max LOD Reduction", + "Maximum amount of reduction as a percentage of the original. ") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::Slider, &TressFXRenderingSettings::m_ShadowLODWidthMultiplier, + "Shadow Max LOD Strand Width Multiplier", + "Maximum amount the shadow width cast by the strand would be multiplied by.") + ->Attribute(AZ::Edit::Attributes::Min, 0.0f) + ->Attribute(AZ::Edit::Attributes::Max, 10.0f) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableStrandUV, "Enable Strand UV", + "Turns on usage of Strand Albedo.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableStrandTangent, "Enable Strand Tangent", + "Turns on usage of Strand Tangent.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableThinTip, "Enable Thin Tip", + "If selected, the very end of the hair will narrow to a tip, otherwise it will stay squared.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableHairLOD, "Enable Hair LOD", + "Turn on Level of Detail usage for the hair.") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &TressFXRenderingSettings::m_EnableShadowLOD, "Enable Hair LOD(Shadow)", + "Turn on Level of Detail usage for the shadow fo the hair.") + ; + } + } + } + + void TressFXRenderingSettings::OnImgChanged() + { + m_imgDirty = true; + } +} // namespace AMD diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h new file mode 100644 index 0000000000..963e2165bf --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.h @@ -0,0 +1,146 @@ +// ---------------------------------------------------------------------------- +// Wrappers for setting values that end up in constant buffers. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + + +//#ifndef _TRESSFXSIMULATIONPARAMS_H_ +//#define _TRESSFXSIMULATIONPARAMS_H_ +/* +#pragma once +*/ +#include +#include +#include +#include +#include +#include + +// Atom +#include + +#include + +namespace AMD +{ + class TressFXSimulationSettings + { + public: + AZ_TYPE_INFO(AZ::Render::TressFXSimulationSettings, "{B16E92B3-C859-4421-9170-65C2C6A60062}"); + static void Reflect(AZ::ReflectContext* context); + + // VSPf + float m_vspCoeff = 0.758f; + float m_vspAccelThreshold = 1.208f; + + // local constraint + float m_localConstraintStiffness = 0.908f; + int m_localConstraintsIterations = 3; + + // global constraint + float m_globalConstraintStiffness = 0.408f; + float m_globalConstraintsRange = 0.308f; + + // length constraint + int m_lengthConstraintsIterations = 3; + + // damping + float m_damping = 0.08f; + + // gravity + float m_gravityMagnitude = 0.19f; + + // tip separation for follow hair from its guide + float m_tipSeparation = 0.1f; + + // wind + float m_windMagnitude = 0.0f; + AZ::Vector3 m_windDirection{1.0f, 0.0f, 0.0f}; + float m_windAngleRadians = 3.1415926f / 180.0f * 40.0f; + float m_clampPositionDelta = 20.0f; + }; + + class TressFXRenderingSettings + { + public: + AZ_TYPE_INFO(AZ::Render::TressFXRenderingSettings, "{7EFD9317-4DE8-455D-A2E5-B5B62FF1F5D7}"); + static void Reflect(AZ::ReflectContext* context); + + // LOD settings + float m_LODStartDistance = 1.f; + float m_LODEndDistance = 5.f; + float m_LODPercent = 0.5f; + float m_LODWidthMultiplier = 2.f; + + // General information + float m_FiberRadius = 0.002f; + float m_TipPercentage = 0.0f; + float m_StrandUVTilingFactor = 1.f; + float m_FiberRatio = 0.06f; + + // Original TressFX Kajiya lighting model parameters + AZ::Color m_HairMatBaseColor{ 1.f, 1.f, 1.f, 0.63f }; + AZ::Color m_HairMatTipColor{1.f, 1.f, 1.f, 0.63f}; + float m_HairKDiffuse = 0.22f; + float m_HairKSpec1 = 0.0012f; + float m_HairSpecExp1 = 14.40f; + + float m_HairKSpec2 = 0.136f; + float m_HairSpecExp2 = 11.80f; + + // Marschner lighting model parameters + float m_HairRoughness = 0.65f; + float m_HairCuticleTilt = 0.08; // Tilt angle in radians roughly 5-6 degrees tilt + + // For deep approximated shadow lookup + float m_HairShadowAlpha = 0.35f; + float m_HairFiberSpacing = 0.4f; + int m_HairMaxShadowFibers = 50; + float m_ShadowLODStartDistance = 1.f; + float m_ShadowLODEndDistance = 5.f; + float m_ShadowLODPercent = 0.5f; + float m_ShadowLODWidthMultiplier = 2.f; + + bool m_EnableStrandUV = false; + bool m_EnableStrandTangent = false; + bool m_EnableThinTip = true; + bool m_EnableHairLOD = false; + bool m_EnableShadowLOD = false; + + // Legacy settings, replaced by assets. Only reserved as a fallback option. + AZStd::string m_BaseAlbedoName = ""; + AZStd::string m_StrandAlbedoName = ""; + + AZ::Data::Asset m_baseAlbedoAsset; + AZ::Data::Asset m_strandAlbedoAsset; + bool m_imgDirty = false; // marks if the image assets require update + + private: + void OnImgChanged(); // Per image asset handling callback + }; + +} // namespace AMD + +//#endif // _TRESSFXSIMULATIONPARAMS_H_ diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp new file mode 100644 index 0000000000..4c84e5ba1a --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.cpp @@ -0,0 +1,488 @@ +// ---------------------------------------------------------------------------- +// Interface for the shortcut method. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include + +#include "EngineInterface.h" +#include "TressFXLayouts.h" +#include "TressFXShortCut.h" +#include "HairStrands.h" +#include "TressFXHairObject.h" + +using namespace AMD; + +TressFXShortCut::TressFXShortCut() : + m_nScreenWidth(0), + m_nScreenHeight(0), + m_pDepths(), + m_pInvAlpha(), + m_pColors(), + // Bind Sets + m_pShortCutDepthsAlphaBindSet(nullptr), + m_pShortCutDepthReadBindSet(nullptr), + m_pShortCutColorReadBindSet(nullptr), + // Render Pass Sets + m_pShortCutDepthsAlphaRenderTargetSet(nullptr), + m_pShortCutDepthResolveRenderTargetSet(nullptr), + m_pShortCutHairColorRenderTargetSet(nullptr), + m_pColorResolveRenderTargetSet(nullptr), + // PSOs + m_pDepthsAlphaPSO(nullptr), + m_pDepthResolvePSO(nullptr), + m_pHairColorPSO(nullptr), + m_pHairResolvePSO(nullptr), + // Bindsets + m_ShadeParamsBindSet(nullptr) +{ +} + +TressFXShortCut::~TressFXShortCut() +{ + m_ShadeParamsConstantBuffer.Reset(); +} + +void TressFXShortCut::Initialize(int width, int height) +{ + Create(GetDevice(), width, height); + + // Create constant buffer and bind set + m_ShadeParamsConstantBuffer.CreateBufferResource("TressFXShadeParams"); + EI_BindSetDescription set = { { m_ShadeParamsConstantBuffer.GetBufferResource() } }; + m_ShadeParamsBindSet = GetDevice()->CreateBindSet(GetShortCutShadeParamLayout(), set); + + // Depth Alpha Pass + { + //std::vector DepthAlphaDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcColor; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::SrcAlpha; + + EI_BindLayout* DepthAlphaLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetShortCutDepthsAlphaLayout(), GetSamplerLayout() }; + psoParams.layouts = DepthAlphaLayouts; + psoParams.numLayouts = 5; + psoParams.renderTargetSet = m_pShortCutDepthsAlphaRenderTargetSet.get(); + + m_pDepthsAlphaPSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "RenderHairDepthAlphaVS", "TressFXShortCut.hlsl", "DepthsAlphaPS", psoParams); + } + + // Depth resolve pass + { + //std::vector DepthResolveDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* DepthResolveLayouts[] = { GetShortCutDepthReadLayout() }; + psoParams.layouts = DepthResolveLayouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = m_pShortCutDepthResolveRenderTargetSet.get(); + + m_pDepthResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "FullScreenVS", "TressFXShortCut.hlsl", "ResolveDepthPS", psoParams); + } + + // Hair Color Pass + { + //std::vector HairColorDesc; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + + EI_BindLayout* HairColorLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetViewLayout(), GetLightLayout(), GetSamplerLayout(), GetShortCutShadeParamLayout() }; + psoParams.layouts = HairColorLayouts; + psoParams.numLayouts = 6; + psoParams.renderTargetSet = m_pShortCutHairColorRenderTargetSet.get(); + + m_pHairColorPSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "RenderHairColorVS", "TressFXShortCut.hlsl", "HairColorPS", psoParams); + } + + // Hair Resolve + { + //std::vector descs; + + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + + psoParams.colorBlendParams.colorBlendEnabled = true; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::SrcAlpha; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { GetShortCutColorReadLayout() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = m_pColorResolveRenderTargetSet.get(); + m_pHairResolvePSO = GetDevice()->CreateGraphicsPSO("TressFXShortCut.hlsl", "FullScreenVS", "TressFXShortCut.hlsl", "ResolveHairPS", psoParams); + } +} + +bool TressFXShortCut::Create(EI_Device* pDevice, int width, int height) +{ + m_nScreenWidth = width; + m_nScreenHeight = height; + + // Create required resources + m_pDepths = pDevice->CreateUint32Resource(width, height, TRESSFX_SHORTCUT_K, "ShortCutDepthsTexture", TRESSFX_SHORTCUT_INITIAL_DEPTH); + AMD::float4 clearValues = { 1.f, 1.f, 1.f, 1.f }; + m_pInvAlpha = pDevice->CreateRenderTargetResource(width, height, 1, 4, "ShortCutInvAlphaTexture", &clearValues); + clearValues = { 0.f, 0.f, 0.f, 1.f }; + m_pColors = pDevice->CreateRenderTargetResource(width, height, 4, 4, "ShortCutColorsTexture", &clearValues); + + // Create bind sets + CreateDepthsAlphaBindSet(pDevice); + CreateDepthReadBindSet(pDevice); + CreateColorReadBindSet(pDevice); + + // Create RenderPasss sets + CreateDepthsAlphaRenderTargetSet(pDevice); + CreateDepthResolveRenderTargetSet(pDevice); + CreateHairColorRenderTargetSet(pDevice); + CreateColorResolveRenderTargetSet(pDevice); + + return true; +} + +void TressFXShortCut::CreateDepthsAlphaBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pDepths.get() } + }; + m_pShortCutDepthsAlphaBindSet = pDevice->CreateBindSet(GetShortCutDepthsAlphaLayout(), bindSet); +} + +void TressFXShortCut::CreateDepthReadBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pDepths.get() } + }; + m_pShortCutDepthReadBindSet = pDevice->CreateBindSet(GetShortCutDepthReadLayout(), bindSet); +} + +void TressFXShortCut::CreateColorReadBindSet(EI_Device* pDevice) +{ + EI_BindSetDescription bindSet = + { + { m_pColors.get(), m_pInvAlpha.get() } + }; + m_pShortCutColorReadBindSet = pDevice->CreateBindSet(GetShortCutColorReadLayout(), bindSet); +} + +void TressFXShortCut::CreateDepthsAlphaRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut depth alpha render pass, we need InvAlphaTexture bound with Depth buffer. + const EI_Resource* ResourceArray[] = { m_pInvAlpha.get(), GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + + float clearValues[] = { 1.f, 1.f, 1.f, 1.f }; // Color + m_pShortCutDepthsAlphaRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, clearValues); +} + +void TressFXShortCut::CreateDepthResolveRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut depth resolve render pass, we just need the depth buffer bound + const EI_Resource* ResourceArray[] = { GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_pShortCutDepthResolveRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 1, AttachmentParams, nullptr); +} + +void TressFXShortCut::CreateHairColorRenderTargetSet(EI_Device* pDevice) +{ + // For shortcut hair color render pass, we need the color texture bound with Depth buffer. + const EI_Resource* ResourceArray[] = { m_pColors.get(), GetDevice()->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + + float clearValues[] = { 0.f, 0.f, 0.f, 1.f }; // Clear Color + m_pShortCutHairColorRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, clearValues); +} + +void TressFXShortCut::CreateColorResolveRenderTargetSet(EI_Device* pDevice) +{ + const EI_Resource* ResourceArray[] = { pDevice->GetColorBufferResource(), pDevice->GetDepthBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { {EI_RenderPassFlags::Load | EI_RenderPassFlags::Store}, + {EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store} }; + m_pColorResolveRenderTargetSet = pDevice->CreateRenderTargetSet(ResourceArray, 2, AttachmentParams, nullptr); +} + +void TressFXShortCut::Clear(EI_CommandContext& context) +{ + // Consider being explicit on values here. + // In DX, UAV counter clears are actually done when UAV is set, which makes this a bit weird, I + // suppose. + // Also try clearing in shader during fullscreen pass (although can't miss frames, and makes + // reads slower) + // or look at 0-based for fast clears. + + // Begin the render pass and transition any resources to write if needed + + if (m_firstRun) + { + // The first time we use the resource, we need to transition it out of UNDEFINED state to COPY_DEST. + // Doing from PS_SRV causes validation errors. +#ifdef TRESSFX_VK + EI_Barrier readToClear[] = + { + { m_pDepths.get(), EI_STATE_UNDEFINED, EI_STATE_COPY_DEST }, + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); +#endif // TRESSFX_VK + } + else + { + EI_Barrier readToClear[] = + { +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_SRV, EI_STATE_COPY_DEST }, +#else + { m_pDepths.get(), EI_STATE_SRV, EI_STATE_UAV }, +#endif // TRESSFX_VK + }; + context.SubmitBarrier(AMD_ARRAY_SIZE(readToClear), readToClear); + } + + context.ClearUint32Image(m_pDepths.get(), TRESSFX_SHORTCUT_INITIAL_DEPTH); +} + +void TressFXShortCut::BeginDepthsAlpha(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + if (m_firstRun) + { + EI_Barrier readToWrite[] = + { + { m_pInvAlpha.get(), EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }, +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + else + { + EI_Barrier readToWrite[] = + { + { m_pInvAlpha.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }, +#ifdef TRESSFX_VK + { m_pDepths.get(), EI_STATE_COPY_DEST, EI_STATE_UAV }, +#endif // TRESSFX + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutDepthsAlphaRenderTargetSet.get(), L"BeginDepthsAlpha Pass"); +} + +void TressFXShortCut::EndDepthsAlpha(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); + + EI_Barrier writeToRead[] = + { + { m_pInvAlpha.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }, + { m_pDepths.get(), EI_STATE_UAV, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXShortCut::BeginDepthResolve(EI_CommandContext& commandContext) +{ + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutDepthResolveRenderTargetSet.get(), L"BeginDepthResolve Pass"); +} + +void TressFXShortCut::EndDepthResolve(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXShortCut::BeginHairColor(EI_CommandContext& commandContext) +{ + // Begin the render pass and transition any resources to write if needed + if (m_firstRun) + { + EI_Barrier readToWrite[] = + { + { m_pColors.get(), EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + else + { + EI_Barrier readToWrite[] = + { + { m_pColors.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(readToWrite), readToWrite); + } + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pShortCutHairColorRenderTargetSet.get(), L"BeginHairColor Pass"); +} + +void TressFXShortCut::EndHairColor(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); + + // Transition resources to read for next pass + EI_Barrier writeToRead[] = + { + { m_pColors.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV }, + }; + + commandContext.SubmitBarrier(AMD_ARRAY_SIZE(writeToRead), writeToRead); +} + +void TressFXShortCut::BeginColorResolve(EI_CommandContext& commandContext) +{ + // Color/Depth should already be in a write state + // hair colors and inv alpha should also already be in a read state + + // Begin the render pass + GetDevice()->BeginRenderPass(commandContext, m_pColorResolveRenderTargetSet.get(), L"BeginColorResolve"); +} + +void TressFXShortCut::EndColorResolve(EI_CommandContext& commandContext) +{ + // End the render pass + GetDevice()->EndRenderPass(commandContext); +} + +void TressFXShortCut::DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets) +{ + // Loop through all hair strands and render them + for (size_t i = 0; i < numHairStrands; i++) + { + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(commandContext, *pPSO, extraBindSets, numExtraBindSets); + } +} + +void TressFXShortCut::Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet) +{ + // Clear out depth texture array + Clear(commandContext); + + // Render the DepthAlpha pass + BeginDepthsAlpha(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, m_pShortCutDepthsAlphaBindSet.get(), GetDevice()->GetSamplerBindSet() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_pDepthsAlphaPSO.get(), ExtraBindSets, 3); + } + EndDepthsAlpha(commandContext); + GetDevice()->GetTimeStamp("Shortcut DepthAlpha"); + + // Depth Resolve pass + BeginDepthResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pShortCutDepthReadBindSet.get() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_pDepthResolvePSO, BindSets, 1); + } + EndDepthResolve(commandContext); + GetDevice()->GetTimeStamp("Shortcut DepthAlpha Resolve"); + + // Render the color pass (hair render) + BeginHairColor(commandContext); + { + EI_BindSet* ExtraBindSets[] = { viewBindSet, lightBindSet, GetDevice()->GetSamplerBindSet(), m_ShadeParamsBindSet.get() }; + DrawHairStrands(commandContext, numHairStrands, hairStrands, m_pHairColorPSO.get(), ExtraBindSets, 4); + } + EndHairColor(commandContext); + GetDevice()->GetTimeStamp("Shortcut Hair Pass"); + + // Apply hair to main target + BeginColorResolve(commandContext); + { + EI_BindSet* BindSets[] = { m_pShortCutColorReadBindSet.get() }; + GetDevice()->DrawFullScreenQuad(commandContext, *m_pHairResolvePSO, BindSets, 1); + } + EndColorResolve(commandContext); + GetDevice()->GetTimeStamp("Shortcut Hair Apply"); + + m_firstRun = false; +} + +void TressFXShortCut::UpdateShadeParameters(std::vector& renderSettings) +{ + // Update Render Parameters + for (int i = 0; i < renderSettings.size(); ++i) + { + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberRadius = renderSettings[i]->m_FiberRadius; // Don't modify radius by LOD multiplier as this one is used to calculate shadowing and that calculation should remain unaffected + m_ShadeParamsConstantBuffer->HairShadeParams[i].ShadowAlpha = renderSettings[i]->m_HairShadowAlpha; + m_ShadeParamsConstantBuffer->HairShadeParams[i].FiberSpacing = renderSettings[i]->m_HairFiberSpacing; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairEx2 = renderSettings[i]->m_HairSpecExp2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].HairKs2 = renderSettings[i]->m_HairKSpec2; + m_ShadeParamsConstantBuffer->HairShadeParams[i].MatKValue = { 0.f, renderSettings[i]->m_HairKDiffuse, renderSettings[i]->m_HairKSpec1, renderSettings[i]->m_HairSpecExp1 }; // no ambient + } + + m_ShadeParamsConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); +} \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h new file mode 100644 index 0000000000..e1a8b425e1 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXShortCut.h @@ -0,0 +1,110 @@ + +// ---------------------------------------------------------------------------- +// Interface for the shortcut method. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef AMD_TRESSFXSHORTCUT_H +#define AMD_TRESSFXSHORTCUT_H + +#include "EngineInterface.h" +#include "TressFXConstantBuffers.h" +#include "TressFXSettings.h" + +#include + +#define TRESSFX_SHORTCUT_DEPTH_NODE_SIZE 4 +#define TRESSFX_SHORTCUT_K 3 +#define TRESSFX_SHORTCUT_INITIAL_DEPTH 0x3f800000 + +class HairStrands; + +class TressFXShortCut +{ +public: + TressFXShortCut(); + ~TressFXShortCut(); + + void Initialize(int width, int height); + void Draw(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_BindSet* viewBindSet, EI_BindSet* lightBindSet); + void UpdateShadeParameters(std::vector& renderSettings); + +private: + // node size should include room for UINT next pointer. + bool Create(EI_Device* pDevice, int width, int height); + void Clear(EI_CommandContext& context); + + void DrawHairStrands(EI_CommandContext& commandContext, int numHairStrands, HairStrands** hairStrands, EI_PSO* pPSO, EI_BindSet** extraBindSets, uint32_t numExtraBindSets); + + // Begin/End for various stages of hair application/rendering + void BeginDepthsAlpha(EI_CommandContext& context); + void EndDepthsAlpha(EI_CommandContext& context); + + void BeginDepthResolve(EI_CommandContext& context); + void EndDepthResolve(EI_CommandContext& context); + + void BeginHairColor(EI_CommandContext& context); + void EndHairColor(EI_CommandContext& context); + + void BeginColorResolve(EI_CommandContext& context); + void EndColorResolve(EI_CommandContext& context); + + // Bind set creation functions + void CreateDepthsAlphaBindSet(EI_Device* pDevice); + void CreateDepthReadBindSet(EI_Device* pDevice); + void CreateColorReadBindSet(EI_Device* pDevice); + + // RenderPass set creation functions + void CreateDepthsAlphaRenderTargetSet(EI_Device* pDevice); + void CreateDepthResolveRenderTargetSet(EI_Device* pDevice); + void CreateHairColorRenderTargetSet(EI_Device* pDevice); + void CreateColorResolveRenderTargetSet(EI_Device* pDevice); + + int m_nScreenWidth; + int m_nScreenHeight; + + bool m_firstRun = true; + + std::unique_ptr m_pDepths; + std::unique_ptr m_pInvAlpha; + std::unique_ptr m_pColors; + + std::unique_ptr m_pShortCutDepthsAlphaBindSet = nullptr; + std::unique_ptr m_pShortCutDepthReadBindSet = nullptr; + std::unique_ptr m_pShortCutColorReadBindSet = nullptr; + + std::unique_ptr m_pShortCutDepthsAlphaRenderTargetSet = nullptr; + std::unique_ptr m_pShortCutDepthResolveRenderTargetSet = nullptr; + std::unique_ptr m_pShortCutHairColorRenderTargetSet = nullptr; + std::unique_ptr m_pColorResolveRenderTargetSet = nullptr; + + std::unique_ptr m_pDepthsAlphaPSO = nullptr; + std::unique_ptr m_pDepthResolvePSO = nullptr; + std::unique_ptr m_pHairColorPSO = nullptr; + std::unique_ptr m_pHairResolvePSO = nullptr; + + TressFXUniformBuffer m_ShadeParamsConstantBuffer; + std::unique_ptr m_ShadeParamsBindSet = nullptr; +}; + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp new file mode 100644 index 0000000000..1862c7f7b7 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.cpp @@ -0,0 +1,141 @@ +// ---------------------------------------------------------------------------- +// Invokes simulation compute shaders. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "AMD_TressFX.h" +#include "TressFXSimulation.h" + +// TressFX +#include "TressFXLayouts.h" +#include "TressFXHairObject.h" +#include "EngineInterface.h" + +void TressFXSimulation::Initialize(EI_Device* pDevice) +{ + EI_BindLayout * layouts[] = { GetSimLayout(), GetSimPosTanLayout() }; + mVelocityShockPropagationPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "VelocityShockPropagation", layouts, 2); + mIntegrationAndGlobalShapeConstraintsPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "IntegrationAndGlobalShapeConstraints", layouts, 2); + mCalculateStrandLevelDataPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "CalculateStrandLevelData", layouts, 2); + mLocalShapeConstraintsPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "LocalShapeConstraints", layouts, 2); + mLengthConstriantsWindAndCollisionPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "LengthConstriantsWindAndCollision", layouts, 2); + mUpdateFollowHairVerticesPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "UpdateFollowHairVertices", layouts, 2); + + // Adi - skins the hair vertices and follow hair, avoids any simulation + mSkinHairVerticesTestPSO = pDevice->CreateComputeShaderPSO("TressFXSimulation.hlsl", "SkinHairVerticesOnly", layouts, 2); +} + +enum DispatchLevel +{ + DISPATCHLEVEL_VERTEX, + DISPATCHLEVEL_STRAND +}; + +void DispatchComputeShader(EI_CommandContext& ctx, EI_PSO * pso, DispatchLevel level, std::vector& hairObjects, const bool iterate = false) +{ + ctx.BindPSO(pso); + for (int i = 0; i < hairObjects.size(); ++i) + { + int numGroups = (int)((float)hairObjects[i]->GetNumTotalHairVertices() / (float)TRESSFX_SIM_THREAD_GROUP_SIZE); + if (level == DISPATCHLEVEL_STRAND) + { + numGroups = (int)(((float)(hairObjects[i]->GetNumTotalHairStrands()) / (float)TRESSFX_SIM_THREAD_GROUP_SIZE)); + } + EI_BindSet* bindSets[] = { hairObjects[i]->GetSimBindSet(), &hairObjects[i]->GetDynamicState().GetSimBindSet() }; + ctx.BindSets(pso, 2, bindSets); + + int iterations = 1; + if (iterate) + { + iterations = hairObjects[i]->GetCPULocalShapeIterations(); + } + for (int j = 0; j < iterations; ++j) + { + ctx.Dispatch(numGroups); + } + hairObjects[i]->GetDynamicState().UAVBarrier(ctx); + } +} + +// Adi: this method handles the skinning of the hair and update the follow hair. +// It avoid any physics and simulation response and should be used for initial integration testing +void TressFXSimulation::UpdateHairSkinning(EI_CommandContext& commandContext, std::vector& hairObjects) +{ + // Adi: binding the m_SimCB buffers (matrices, wind parameters..) to the GPU + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->UpdateConstantBuffer(commandContext); + } + + // Adi: only skin hair vertices without any physics. + DispatchComputeShader(commandContext, mSkinHairVerticesTestPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("SkinHairVerticesTestPSO"); + + + // UpdateFollowHairVertices - This part is embedded in the single pass shader +// DispatchComputeShader(commandContext, mUpdateFollowHairVerticesPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); +// GetDevice()->GetTimeStamp("UpdateFollowHairVertices"); + + // Adi: make sure the dual buffers are updated properly - advance the current frame + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->IncreaseSimulationFrame(); + } +} + +void TressFXSimulation::Simulate(EI_CommandContext& commandContext, std::vector& hairObjects) +{ + // Binding the bones' matrices + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->UpdateConstantBuffer(commandContext); + } + + // IntegrationAndGlobalShapeConstraints + DispatchComputeShader(commandContext, mIntegrationAndGlobalShapeConstraintsPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("IntegrationAndGlobalShapeContraints"); + + // Calculate Strand Level Data + DispatchComputeShader(commandContext, mCalculateStrandLevelDataPSO.get(), DISPATCHLEVEL_STRAND, hairObjects); + GetDevice()->GetTimeStamp("CalculateStrandLevelData"); + + // VelocityShockPropagation + DispatchComputeShader(commandContext, mVelocityShockPropagationPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("VelocityShockPropagation"); + + DispatchComputeShader(commandContext, mLocalShapeConstraintsPSO.get(), DISPATCHLEVEL_STRAND, hairObjects, true); + GetDevice()->GetTimeStamp("LocalShapeConstraints"); + + // LengthConstriantsWindAndCollision + DispatchComputeShader(commandContext, mLengthConstriantsWindAndCollisionPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("LengthConstriantsWindAndCollision"); + + // UpdateFollowHairVertices + DispatchComputeShader(commandContext, mUpdateFollowHairVerticesPSO.get(), DISPATCHLEVEL_VERTEX, hairObjects); + GetDevice()->GetTimeStamp("UpdateFollowHairVertices"); + + for (int i = 0; i < hairObjects.size(); ++i) + { + hairObjects[i]->IncreaseSimulationFrame(); + } +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h new file mode 100644 index 0000000000..793700a284 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSimulation.h @@ -0,0 +1,54 @@ +// ---------------------------------------------------------------------------- +// Invokes simulation compute shaders. +// ---------------------------------------------------------------------------- +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#ifndef TRESSFXSIMULATION_H_ +#define TRESSFXSIMULATION_H_ + +#include "TressFXCommon.h" +#include "EngineInterface.h" + +class TressFXHairObject; + +class TressFXSimulation : private TressFXNonCopyable +{ +public: + void Initialize(EI_Device* pDevice); + void Simulate(EI_CommandContext& commandContext, std::vector& hairObjects); + void UpdateHairSkinning(EI_CommandContext& commandContext, std::vector& hairObjects); + +private: + // Maybe these just need to be compute shader references. + std::unique_ptr mVelocityShockPropagationPSO; + std::unique_ptr mIntegrationAndGlobalShapeConstraintsPSO; + std::unique_ptr mCalculateStrandLevelDataPSO; + std::unique_ptr mLocalShapeConstraintsPSO; + std::unique_ptr mLengthConstriantsWindAndCollisionPSO; + std::unique_ptr mUpdateFollowHairVerticesPSO; + + // Adi: only skin the vertices - no physics is applied + std::unique_ptr mSkinHairVerticesTestPSO; +}; + +#endif // TRESSFXSIMULATION_H_ \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp b/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp new file mode 100644 index 0000000000..9356e946c5 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFXSample.cpp @@ -0,0 +1,960 @@ +// ---------------------------------------------------------------------------- +// Brings together all the TressFX components. +// ---------------------------------------------------------------------------- +// +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#include "stdafx.h" + +#include "TressFXSample.h" + +#include "TressFXPPLL.h" +#include "TressFXShortCut.h" + +#include "AMD_TressFX.h" + +#include "TressFXLayouts.h" + +#include "HairStrands.h" +#include "SDF.h" +#include "Simulation.h" +#include "Base/Imgui.h" +#include "Base/ImguiHelper.h" +#include "Misc/Misc.h" + +#include "EngineInterface.h" + +#include +#include + +const bool VALIDATION_ENABLED = false; +const uint32_t NUMBER_OF_BACK_BUFFERS = 3; + +// This could instead be retrieved as a variable from the +// script manager, or passed as an argument. +static const size_t AVE_FRAGS_PER_PIXEL = 12; +static const size_t PPLL_NODE_SIZE = 16; + +TressFXSample::TressFXSample(LPCSTR name) + : FrameworkWindows(name), + m_eOITMethod(OIT_METHOD_SHORTCUT), // OIT_METHOD_PPLL + m_nScreenWidth(0), + m_nScreenHeight(0), + m_nPPLLNodes(0) +{ + m_lastFrameTime = 0.0f; + m_time = 0; + m_deltaTime = 0.0f; + m_pShortCut = nullptr; + m_pPPLL = nullptr; + m_pSimulation = nullptr; +} + +void TressFXSample::Simulate(double fTime, bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsyncCompute) +{ + SimulationContext ctx; + ctx.hairStrands.resize(m_activeScene.objects.size()); + ctx.collisionMeshes.resize(m_activeScene.collisionMeshes.size()); + for (size_t i = 0; i < m_activeScene.objects.size(); ++i) + { + ctx.hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + } + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); ++i) + { + ctx.collisionMeshes[i] = m_activeScene.collisionMeshes[i].get(); + } + m_pSimulation->StartSimulation(fTime, ctx, bUpdateCollMesh, bSDFCollisionResponse, bAsyncCompute); +} + +void TressFXSample::WaitSimulateDone() +{ + m_pSimulation->WaitOnSimulation(); +} + +void TressFXSample::ToggleShortCut() +{ + OITMethod newMethod; + if (m_eOITMethod == OIT_METHOD_PPLL) + newMethod = OIT_METHOD_SHORTCUT; + else + newMethod = OIT_METHOD_PPLL; + SetOITMethod(newMethod); +} + +void TressFXSample::DrawCollisionMesh() +{ + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->DrawMesh(commandList); +} + +void TressFXSample::GenerateMarchingCubes() +{ +#if ENABLE_MARCHING_CUBES + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->GenerateIsoSurface(commandList); +#endif +} + +void TressFXSample::DrawSDF() +{ +#if ENABLE_MARCHING_CUBES + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + + for (size_t i = 0; i < m_activeScene.collisionMeshes.size(); i++) + m_activeScene.collisionMeshes[i]->DrawIsoSurface(commandList); +#endif +} + +void TressFXSample::InitializeLayouts() +{ + InitializeAllLayouts(GetDevice()); +} + +void TressFXSample::DestroyLayouts() +{ + DestroyAllLayouts(GetDevice()); +} + +// TODO: Loading asset function should be called from OnAssetReload? +void TressFXSample::LoadScene(TressFXSceneDescription& desc) +{ + // Since GLTF is the first thing we render, we want to clear on load + m_activeScene.scene->OnCreate(GetDevice(), m_pGLTFRenderTargetSet.get(), m_pShadowRenderTargetSet.get(), desc.gltfFilePath, desc.gltfFileName, desc.gltfBonePrefix, desc.startOffset); + + // TODO Why? + DestroyLayouts(); + + InitializeLayouts(); + + m_pPPLL.reset(new TressFXPPLL); + m_pShortCut.reset(new TressFXShortCut); + m_pSimulation.reset(new Simulation); + + EI_Device* pDevice = GetDevice(); + + // Used for uploading initial data + EI_CommandContext& uploadCommandContext = pDevice->GetCurrentCommandContext(); + + for (size_t i = 0; i < desc.objects.size(); ++i) + { + HairStrands* hair = new HairStrands( + m_activeScene.scene.get(), + desc.objects[i].tfxFilePath.c_str(), + desc.objects[i].tfxBoneFilePath.c_str(), + desc.objects[i].hairObjectName.c_str(), + desc.objects[i].numFollowHairs, + desc.objects[i].tipSeparationFactor, + desc.objects[i].mesh, (int)i); + hair->GetTressFXHandle()->PopulateDrawStrandsBindSet(GetDevice(), &desc.objects[i].initialRenderingSettings); + m_activeScene.objects.push_back({ std::unique_ptr(hair), desc.objects[i].initialSimulationSettings, desc.objects[i].initialRenderingSettings, desc.objects[i].name.c_str() }); + } + + for (size_t i = 0; i < desc.collisionMeshes.size(); ++i) + { + CollisionMesh* mesh = new CollisionMesh( + m_activeScene.scene.get(), m_pDebugRenderTargetSet.get(), + desc.collisionMeshes[i].name.c_str(), + desc.collisionMeshes[i].tfxMeshFilePath.c_str(), + desc.collisionMeshes[i].numCellsInXAxis, + desc.collisionMeshes[i].collisionMargin, + desc.collisionMeshes[i].mesh, + desc.collisionMeshes[i].followBone.c_str() + ); + m_activeScene.collisionMeshes.push_back(std::unique_ptr(mesh)); + } + } + +void TressFXSample::UpdateSimulationParameters() +{ + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateSimulationParameters(&m_activeScene.objects[i].simulationSettings, m_deltaTime); + } +} + +void TressFXSample::UpdateRenderingParameters() +{ + std::vector RenderSettings; + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + // For now, just using distance of camera to 0, 0, 0, but should be passing in a root position for the hair object we want to LOD + float Distance = sqrtf(m_activeScene.scene->GetCameraPos().x * m_activeScene.scene->GetCameraPos().x + m_activeScene.scene->GetCameraPos().y * m_activeScene.scene->GetCameraPos().y + m_activeScene.scene->GetCameraPos().z * m_activeScene.scene->GetCameraPos().z); + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateRenderingParameters(&m_activeScene.objects[i].renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance); + RenderSettings.push_back(&m_activeScene.objects[i].renderingSettings); + } + + // Update shade parameters for correct implementation + switch (m_eOITMethod) + { + case OIT_METHOD_SHORTCUT: + m_pShortCut->UpdateShadeParameters(RenderSettings); + break; + case OIT_METHOD_PPLL: + m_pPPLL->UpdateShadeParameters(RenderSettings); + break; + default: + break; + } +} + +void TressFXSample::UpdateRenderShadowParameters(AMD::float4& CameraPos) +{ + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + // For now, just using distance of camera to 0, 0, 0, but should be passing in a root position for the hair object we want to LOD + float Distance = sqrtf(CameraPos.x * CameraPos.x + CameraPos.y * CameraPos.y + CameraPos.z * CameraPos.z); + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdateRenderingParameters(&m_activeScene.objects[i].renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance, true); + } +} + +void TressFXSample::OnResize(uint32_t width, uint32_t height) +{ + if (m_nScreenWidth != width || m_nScreenHeight != height) + { + m_nScreenWidth = width; + m_nScreenHeight = height; + RecreateSizeDependentResources(); + } + EI_Device* pDevice = GetDevice(); + + // Create PSO for the hair shadow pass (doesn't matter if it's shortcut or PPLL) if it hasn't been done yet + if (!m_pHairShadowPSO) + { + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleList; + psoParams.colorWriteEnable = false; + psoParams.depthTestEnable = true; + psoParams.depthWriteEnable = true; + psoParams.depthCompareOp = EI_CompareFunc::LessEqual; + psoParams.colorBlendParams.colorBlendEnabled = false; + + EI_BindLayout* ShadowPassLayouts[] = { GetTressFXParamLayout(), GetRenderPosTanLayout(), GetShadowViewLayout() }; + psoParams.layouts = ShadowPassLayouts; + psoParams.numLayouts = 3; + psoParams.renderTargetSet = m_pShadowRenderTargetSet.get(); + + m_pHairShadowPSO = GetDevice()->CreateGraphicsPSO("TressFXShadow.hlsl", "HairShadowVS", "TressFXShadow.hlsl", "HairShadowPS", psoParams); + } +} + +void TressFXSample::RecreateSizeDependentResources() +{ + GetDevice()->FlushGPU(); + GetDevice()->OnResize(m_nScreenWidth, m_nScreenHeight); + + // Whenever there is a resize, we need to re-create on render pass set as it depends on + // the main color/depth buffers which get resized + const EI_Resource* ResourceArray[] = { GetDevice()->GetColorBufferResource(), GetDevice()->GetDepthBufferResource() }; + m_pGLTFRenderTargetSet->SetResources(ResourceArray); + m_pDebugRenderTargetSet->SetResources(ResourceArray); + + m_activeScene.scene->OnResize(m_nScreenWidth, m_nScreenHeight); + + // Needs to be created in OnResize in case we have debug buffers bound which vary by screen width/height + EI_BindSetDescription lightSet = + { + { m_activeScene.lightConstantBuffer.GetBufferResource(), GetDevice()->GetShadowBufferResource() } + }; + m_activeScene.lightBindSet = GetDevice()->CreateBindSet(GetLightLayout(), lightSet); + + // TressFX Usage + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_nPPLLNodes = m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL; + m_pPPLL.reset(new TressFXPPLL); + m_pPPLL->Initialize(m_nScreenWidth, m_nScreenHeight, m_nPPLLNodes, PPLL_NODE_SIZE); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut.reset(new TressFXShortCut); + m_pShortCut->Initialize(m_nScreenWidth, m_nScreenHeight); + break; + }; +} + +void TressFXSample::DrawHairShadows() +{ + int numHairStrands = (int)m_activeScene.objects.size(); + std::vector hairStrands(numHairStrands); + EI_BindSet* ExtraBindSets[] = { m_activeScene.shadowViewBindSet.get() }; + + for (int i = 0; i < numHairStrands; ++i) + { + hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + if (hairStrands[i]->GetTressFXHandle()) + hairStrands[i]->GetTressFXHandle()->DrawStrands(GetDevice()->GetCurrentCommandContext(), *m_pHairShadowPSO.get(), ExtraBindSets, 1); + } + EI_CommandContext& pRenderCommandList = GetDevice()->GetCurrentCommandContext(); +} + +void TressFXSample::DrawHair() +{ + int numHairStrands = (int)m_activeScene.objects.size(); + std::vector hairStrands(numHairStrands); + for (int i = 0; i < numHairStrands; ++i) + { + hairStrands[i] = m_activeScene.objects[i].hairStrands.get(); + } + + EI_CommandContext& pRenderCommandList = GetDevice()->GetCurrentCommandContext(); + + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_pPPLL->Draw(pRenderCommandList, numHairStrands, hairStrands.data(), m_activeScene.viewBindSet.get(), m_activeScene.lightBindSet.get()); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut->Draw(pRenderCommandList, numHairStrands, hairStrands.data(), m_activeScene.viewBindSet.get(), m_activeScene.lightBindSet.get()); + break; + }; + + for (size_t i = 0; i < hairStrands.size(); i++) + hairStrands[i]->TransitionRenderingToSim(pRenderCommandList); +} + +void TressFXSample::SetOITMethod(OITMethod method) +{ + if (method == m_eOITMethod) + return; + + // Flush the GPU before switching + GetDevice()->FlushGPU(); + + // Destroy old resources + DestroyOITResources(m_eOITMethod); + + m_eOITMethod = method; + RecreateSizeDependentResources(); +} + +void TressFXSample::DestroyOITResources(OITMethod method) +{ + // TressFX Usage + switch (m_eOITMethod) + { + case OIT_METHOD_PPLL: + m_pPPLL.reset(); + break; + case OIT_METHOD_SHORTCUT: + m_pShortCut.reset(); + break; + }; +} + +void TressFXSample::OnCreate(HWND hWnd) +{ + GetDevice()->SetVSync(m_vSync); + GetDevice()->OnCreate(hWnd, NUMBER_OF_BACK_BUFFERS, VALIDATION_ENABLED, "TressFX"); + + m_activeScene.scene.reset(new EI_Scene); + + // Create a renderpass for GLTF (needed for PSO creation) + const EI_ResourceFormat FormatArray[] = { GetDevice()->GetColorBufferFormat(), GetDevice()->GetDepthBufferFormat() }; + { + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store }, + { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store } }; + float ClearValues[] = { 0.f, 0.f, 0.f, 0.f, // Color + 1.f, 0.f }; // Depth + + m_pGLTFRenderTargetSet = GetDevice()->CreateRenderTargetSet(FormatArray, 2, AttachmentParams, ClearValues); + } + + // Create a renderpass for shadow rendering (needed for PSO creation) + { + const EI_Resource* ResourceArray[] = { GetDevice()->GetShadowBufferResource() }; + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Clear | EI_RenderPassFlags::Store } }; + float ClearValues[] = { 1.f, 0.f }; // Depth Clear + m_pShadowRenderTargetSet = GetDevice()->CreateRenderTargetSet(ResourceArray, 1, AttachmentParams, ClearValues); + } + // Create a debug render pass + { + const EI_AttachmentParams AttachmentParams[] = { { EI_RenderPassFlags::Load | EI_RenderPassFlags::Store }, + { EI_RenderPassFlags::Depth | EI_RenderPassFlags::Load | EI_RenderPassFlags::Store } }; + + m_pDebugRenderTargetSet = GetDevice()->CreateRenderTargetSet(FormatArray, 2, AttachmentParams, nullptr); + } + + // init GUI (non gfx stuff) + ImGUI_Init((void *)hWnd); + LoadScene(0); + + m_activeScene.viewConstantBuffer.CreateBufferResource("viewConstants"); + EI_BindSetDescription set = { { m_activeScene.viewConstantBuffer.GetBufferResource() } }; + m_activeScene.viewBindSet = GetDevice()->CreateBindSet(GetViewLayout(), set); + + m_activeScene.shadowViewConstantBuffer.CreateBufferResource("shadowViewConstants"); + EI_BindSetDescription shadowSet = { { m_activeScene.shadowViewConstantBuffer.GetBufferResource() } }; + m_activeScene.shadowViewBindSet = GetDevice()->CreateBindSet(GetViewLayout(), shadowSet); + + m_activeScene.lightConstantBuffer.CreateBufferResource("LightConstants"); + + GetDevice()->EndAndSubmitCommandBuffer(); + GetDevice()->FlushGPU(); +} + +void TressFXSample::LoadScene(int sceneNumber) +{ + TressFXSceneDescription sds[2]; + { + sds[0].gltfFilePath = "../../Assets/Objects/RatBoy/"; + sds[0].gltfFileName = "babylon.gltf"; + sds[0].gltfBonePrefix = ""; + sds[0].startOffset = 2.3f; + + // initialize settings with default settings + TressFXSimulationSettings mohawkSettings; + TressFXSimulationSettings furSettings; + mohawkSettings.m_vspCoeff = 0.758f; + mohawkSettings.m_vspAccelThreshold = 1.208f; + mohawkSettings.m_localConstraintStiffness = 0.908f; + mohawkSettings.m_localConstraintsIterations = 3; + mohawkSettings.m_globalConstraintStiffness = 0.408f; + mohawkSettings.m_globalConstraintsRange = 0.308f; + mohawkSettings.m_lengthConstraintsIterations = 3; + mohawkSettings.m_damping = 0.068f; + mohawkSettings.m_gravityMagnitude = 0.09f; + furSettings.m_vspCoeff = 0.758f; + furSettings.m_vspAccelThreshold = 1.208f; + furSettings.m_localConstraintStiffness = 0.908f; + furSettings.m_localConstraintsIterations = 2; + furSettings.m_globalConstraintStiffness = 0.408f; + furSettings.m_globalConstraintsRange = 0.308f; + furSettings.m_lengthConstraintsIterations = 2; + furSettings.m_damping = 0.068f; + furSettings.m_gravityMagnitude = 0.09f; + + TressFXRenderingSettings mohawkRenderSettings; + mohawkRenderSettings.m_BaseAlbedoName = "..\\..\\Assets\\Objects\\RatBoy\\ratBoySubstanceReady_main_BaseColor.png"; + mohawkRenderSettings.m_EnableThinTip = true; + mohawkRenderSettings.m_FiberRadius = 0.002f; + mohawkRenderSettings.m_FiberRatio = 0.06f; + mohawkRenderSettings.m_HairKDiffuse = 0.22f; + mohawkRenderSettings.m_HairKSpec1 = 0.012f; + mohawkRenderSettings.m_HairSpecExp1 = 14.40f; + mohawkRenderSettings.m_HairKSpec2 = 0.136f; + mohawkRenderSettings.m_HairSpecExp2 = 11.80f; + + TressFXRenderingSettings furRenderSettings; + furRenderSettings.m_BaseAlbedoName = "..\\..\\Assets\\Objects\\RatBoy\\ratBoySubstanceReady_main_BaseColor.png"; + furRenderSettings.m_EnableThinTip = true; + furRenderSettings.m_FiberRadius = 0.001f; + furRenderSettings.m_FiberRatio = 0.16f; + furRenderSettings.m_HairKDiffuse = 0.22f; + furRenderSettings.m_HairKSpec1 = 0.02f; + furRenderSettings.m_HairSpecExp1 = 14.40f; + furRenderSettings.m_HairKSpec2 = 0.3f; + furRenderSettings.m_HairSpecExp2 = 11.80f; + furRenderSettings.m_HairShadowAlpha = 0.034f; + + TressFXObjectDescription mohawkDesc = + { + "Mohawk", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_mohawk.tfx", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_mohawk.tfxbone", + "mohawk", + 2, // This is number of follow hairs per one guide hair. It could be zero if there is no follow hair at all. + 2.0f, + 0, // mesh number + mohawkSettings, + mohawkRenderSettings + }; + + TressFXObjectDescription furDesc = + { + "Fur", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_short.tfx", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_short.tfxbone", + "hairShort", + 1, // Filling out a little more fur. + 1.0f, + 0, + furSettings, + furRenderSettings + }; + sds[0].objects.push_back(mohawkDesc); + sds[0].objects.push_back(furDesc); + + TressFXCollisionMeshDescription collisionMeshBody = + { + "RatBoy_body", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_body.tfxmesh", + 50, + 0.0f, + 0, + "frenchHornMonster_root_JNT" + }; + TressFXCollisionMeshDescription collisionMeshLeftHand = + { + "RatBoy_left_hand", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_left_hand.tfxmesh", + 32, + 0.5f, + 0, + "frenchHornMonster_L_LowerArm_JNT" + }; + TressFXCollisionMeshDescription collisionMeshRightHand = + { + "RatBoy_right_hand", + "..\\..\\Assets\\Objects\\HairAsset\\Ratboy\\Ratboy_right_hand.tfxmesh", + 32, + 0.5f, + 0, + "frenchHornMonster_R_LowerArm_JNT" + }; + sds[0].collisionMeshes.push_back(collisionMeshBody); + sds[0].collisionMeshes.push_back(collisionMeshLeftHand); + sds[0].collisionMeshes.push_back(collisionMeshRightHand); + } + LoadScene(sds[sceneNumber]); +} + +void TressFXSample::OnDestroy() +{ + // Get everything out of the pipeline before we start nuking everything. + GetDevice()->FlushGPU(); + + // Destroy hair resources based on what method we are using + DestroyOITResources(m_eOITMethod); + + EI_Device* pDevice = GetDevice(); + m_activeScene.collisionMeshes.clear(); + m_activeScene.objects.clear(); + m_activeScene.scene.reset(); + m_activeScene.viewConstantBuffer.Reset(); + m_activeScene.viewBindSet.reset(); + m_activeScene.shadowViewConstantBuffer.Reset(); + m_activeScene.shadowViewBindSet.reset(); + m_activeScene.lightConstantBuffer.Reset(); + m_activeScene.lightBindSet.reset(); + + m_pPPLL.reset(); + m_pShortCut.reset(); + m_pSimulation.reset(); + + m_pGLTFRenderTargetSet.reset(); + m_pDebugRenderTargetSet.reset(); + m_pShadowRenderTargetSet.reset(); + + m_pHairShadowPSO.reset(); + + DestroyLayouts(); + + // Need to properly shut everything down + GetDevice()->OnDestroy(); +} + +bool TressFXSample::OnEvent(MSG msg) +{ + if (ImGUI_WndProcHandler(msg.hwnd, msg.message, msg.wParam, msg.lParam)) + return true; + return true; +} + +void TressFXSample::SetFullScreen(bool fullscreen) +{ +} + +void TressFXSample::DisplaySimulationParameters(const char* name, TressFXSimulationSettings* simulationSettings) +{ + // Rendering params + bool opened = true; + std::string title = std::string(name) + " Simulation Parameters"; + { + ImGui::SliderFloat("VSP Coefficient", &simulationSettings->m_vspCoeff, 0.0f, 1.0f); + ImGui::SliderFloat("VSP Threshold", &simulationSettings->m_vspAccelThreshold, 0.0f, 1.0f); + + ImGui::SliderFloat("Damping", &simulationSettings->m_damping, 0.0f, 1.0f); + ImGui::SliderFloat("Local Constraint Stiffness", &simulationSettings->m_localConstraintStiffness, 0.0f, 1.0f); + ImGui::SliderInt("Local Constraint Iterations", &simulationSettings->m_localConstraintsIterations, 1, 4); + ImGui::SliderFloat("Global Constraints Stiffness", &simulationSettings->m_globalConstraintStiffness, 0.0f, 1.0f); + ImGui::SliderFloat("Global Constraints Range", &simulationSettings->m_globalConstraintsRange, 0.0f, 1.0f); + + ImGui::SliderFloat("Gravity Magnitude", &simulationSettings->m_gravityMagnitude, 0.0f, 1.0f); + ImGui::SliderFloat("Tip Separation", &simulationSettings->m_tipSeparation, 0.0f, 2.0f); + ImGui::SliderFloat("Clamp Position Delta", &simulationSettings->m_clampPositionDelta, 0.0f, 20.0f); + } +} + +bool TextureSelectionButton(char* Title, std::string& DisplayString) +{ + bool HasChanged = false; + + if (ImGui::Button(Title)) + { + // Popup windows file selection dialog + OPENFILENAME ofn; + char fileName[1024]; + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = NULL; + ofn.lpstrFile = fileName; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = sizeof(fileName); + ofn.lpstrFilter = "Images\0*.png\0"; + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + if (GetOpenFileName(&ofn)) + { + // If we got a valid file name, try to load in the texture + DisplayString = fileName; + HasChanged = true; + } + } + ImGui::SameLine(); ImGui::Text(DisplayString.c_str()); + + return HasChanged; +} + +void TressFXSample::DisplayRenderingParameters(const char* name, TressFXHairObject * object, TressFXRenderingSettings* RenderSettings) +{ + // Rendering params + bool opened = true; + std::string title = std::string(name) + " Rendering Parameters"; + { + // Geometry + if (ImGui::CollapsingHeader("Geometry Params", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::Checkbox("Enable Hair LOD", &RenderSettings->m_EnableHairLOD); + ImGui::SliderFloat("LOD Start Distance", &RenderSettings->m_LODStartDistance, 0.0f, 25.0f); + ImGui::SliderFloat("LOD End Distance", &RenderSettings->m_LODEndDistance, 0.0f, 25.0f); + ImGui::SliderFloat("LOD Strand Reduction", &RenderSettings->m_LODPercent, 0.0f, 1.0f); + ImGui::SliderFloat("LOD Width Multiplier", &RenderSettings->m_LODWidthMultiplier, 1.0f, 5.0f); + + ImGui::SliderFloat("Fiber Radius", &RenderSettings->m_FiberRadius, 0.0005f, 0.005f); + ImGui::Checkbox("Enable Thin Tip", &RenderSettings->m_EnableThinTip); + ImGui::SliderFloat("Fiber Ratio", &RenderSettings->m_FiberRatio, 0.0f, 1.0f); + } + // Shading + if (ImGui::CollapsingHeader("Shading", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::ColorEdit4("Hair Base Color", RenderSettings->m_HairMatBaseColor.v, ImGuiColorEditFlags__OptionsDefault); + ImGui::ColorEdit4("Hair Tip Color", RenderSettings->m_HairMatTipColor.v, ImGuiColorEditFlags__OptionsDefault); + ImGui::SliderFloat("Tip Percentage", &RenderSettings->m_TipPercentage, 0.0f, 1.0f); + ImGui::SliderFloat("Diffuse Factor", &RenderSettings->m_HairKDiffuse, 0.0f, 1.0f); + ImGui::SliderFloat("Spec1 Factor", &RenderSettings->m_HairKSpec1, 0.0f, 1.0f); + ImGui::SliderFloat("Spec Exponent 1", &RenderSettings->m_HairSpecExp1, 1.0f, 32.0f, "%.1f", 1.f); + ImGui::SliderFloat("Spec2 Factor", &RenderSettings->m_HairKSpec2, 0.0f, 1.0f); + ImGui::SliderFloat("Spec Exponent 2", &RenderSettings->m_HairSpecExp2, 1.0f, 32, "%.1f", 1.f); + } + // Shadowing + if (ImGui::CollapsingHeader("Shadowing", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + ImGui::SliderFloat("Shadow Alpha", &RenderSettings->m_HairShadowAlpha, 0.0f, 1.0f); + ImGui::SliderFloat("Fiber Spacing", &RenderSettings->m_HairFiberSpacing, 0.000001f, 1.f, "%.6f", 2.f); + + ImGui::Checkbox("Enable Hair Shadow LOD", &RenderSettings->m_EnableShadowLOD); + ImGui::SliderFloat("Shadow LOD Start Distance", &RenderSettings->m_ShadowLODStartDistance, 0.0f, 25.0f); + ImGui::SliderFloat("Shadow LOD End Distance", &RenderSettings->m_ShadowLODEndDistance, 0.0f, 25.0f); + ImGui::SliderFloat("Shadow LOD Strand Reduction", &RenderSettings->m_ShadowLODPercent, 0.0f, 1.0f); + ImGui::SliderFloat("Shadow LOD Width Multiplier", &RenderSettings->m_ShadowLODWidthMultiplier, 1.0f, 5.0f); + } + // Texturing + if (ImGui::CollapsingHeader("Texturing", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Leaf)) + { + // Base Albedo texture picking + if (TextureSelectionButton("Base Albedo Texture", RenderSettings->m_BaseAlbedoName)) + { + GetDevice()->FlushGPU(); + object->PopulateDrawStrandsBindSet(GetDevice(), RenderSettings); + } + + ImGui::Checkbox("Enable Strand UV", &RenderSettings->m_EnableStrandUV); + ImGui::SliderFloat("Strand UV Tiling Factor", &RenderSettings->m_StrandUVTilingFactor, 0.0f, 30.0f); + + // Strand Albedo texture picking + if (TextureSelectionButton("Strand Albedo Texture", RenderSettings->m_StrandAlbedoName)) + { + GetDevice()->FlushGPU(); + object->PopulateDrawStrandsBindSet(GetDevice(), RenderSettings); + } + + ImGui::Checkbox("Enable Strand Tangent", &RenderSettings->m_EnableStrandTangent); + } + } +} + +void TressFXSample::OnRender() +{ + // Get timings + double timeNow = MillisecondsNow(); + if (m_lastFrameTime == 0.0f) + { + m_lastFrameTime = timeNow; + } + m_deltaTime = float(timeNow - m_lastFrameTime) / 1000.0f; + m_lastFrameTime = timeNow; + m_time += m_deltaTime; + // clamp deltatime so that sim doesnt freak out + m_deltaTime = std::min(m_deltaTime, 0.05f); + + ImGUI_UpdateIO(); + ImGui::NewFrame(); + + bool opened = false; + ImGui::Begin("Menu", &opened); + ImGui::Checkbox("Pause Animation", &m_PauseAnimation); + ImGui::Checkbox("Pause Simulation", &m_PauseSimulation); + ImGui::Checkbox("Draw Hair", &m_drawHair); + ImGui::Checkbox("Draw Model", &m_drawModel); + ImGui::Checkbox("Generate SDF", &m_generateSDF); + ImGui::Checkbox("Collision Response", &m_collisionResponse); + ImGui::Checkbox("Draw Collision Mesh", &m_drawCollisionMesh); + ImGui::Checkbox("Draw Marching Cubes", &m_drawMarchingCubes); + ImGui::Checkbox("Use Depth Approximation", &m_useDepthApproximation); + if (ImGui::Checkbox("Use Vsync", &m_vSync)) + { + GetDevice()->SetVSync(m_vSync); + RecreateSizeDependentResources(); + } + + if (ImGui::Button("Reset Positions")) + { + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->ResetPositions(); + } + } + + const char * drawingControl[] = { "ShortCut", "PPLL" }; + static int drawingControlSelected = 0; + int oldDrawingControlSelected = drawingControlSelected; + ImGui::Combo("Drawing Method", &drawingControlSelected, drawingControl, _countof(drawingControl)); + if (drawingControlSelected != oldDrawingControlSelected) { + ToggleShortCut(); + } + + GetDevice()->OnBeginFrame(m_AsyncCompute); + + // Set all the data to render out the scene + m_activeScene.scene->OnBeginFrame(m_PauseAnimation ? 0.f : m_deltaTime, (float)m_nScreenWidth / m_nScreenHeight); + + std::vector objectNames(m_activeScene.objects.size()); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + objectNames[i] = m_activeScene.objects[i].name.c_str(); + } + if (ImGui::CollapsingHeader("Rendering Parameters")) + { + static int objectSelected = 0; + ImGui::Combo("Object", &objectSelected, objectNames.data(), (int)objectNames.size()); + DisplayRenderingParameters(m_activeScene.objects[objectSelected].name.c_str(), m_activeScene.objects[objectSelected].hairStrands->GetTressFXHandle(), &m_activeScene.objects[objectSelected].renderingSettings); + } + if (ImGui::CollapsingHeader("Simulation Parameters")) + { + static int objectSelected = 0; + ImGui::Combo("Object", &objectSelected, objectNames.data(), (int)objectNames.size()); + DisplaySimulationParameters(m_activeScene.objects[objectSelected].name.c_str(), &m_activeScene.objects[objectSelected].simulationSettings); + } + + if (ImGui::CollapsingHeader("Stats", 0)) { + for (int i = 0; i < GetDevice()->GetNumTimeStamps(); ++i) { + ImGui::Text("%s: %.1f ms\n", GetDevice()->GetTimeStampName(i), (float)GetDevice()->GetTimeStampValue(i) / 1000.0f); + } + ImGui::Text("%s: %.1f ms", "TotalGPUTime", (float)GetDevice()->GetAverageGpuTime() / 1000.0f); + + { + static float values[16]; + for (uint32_t i = 0; i < 16 - 1; i++) { values[i] = values[i + 1]; } + values[15] = 1.0f / m_deltaTime; + float average = 0; + for (uint32_t i = 0; i < 16; i++) { average += values[i]; } + average /= 16.0f; + + ImGui::Text("Framerate: %.0f", average); + } + + } + ImGui::End(); + GetDevice()->GetTimeStamp("Gui Updates"); + + UpdateSimulationParameters(); + m_activeScene.viewConstantBuffer->vEye = m_activeScene.scene->GetCameraPos(); + m_activeScene.viewConstantBuffer->mVP = m_activeScene.scene->GetMVP(); + m_activeScene.viewConstantBuffer->mInvViewProj = m_activeScene.scene->GetInvViewProjMatrix(); + m_activeScene.viewConstantBuffer-> vViewport = { 0, 0, (float)m_nScreenWidth, (float)m_nScreenHeight }; + m_activeScene.viewConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Signal from graphics queue that compute can start. + // Must call before Simulate() and before submitting + // graphics commands to overlap with compute. + if (m_AsyncCompute) + GetDevice()->SignalComputeStart(); + + if (!m_PauseSimulation) { + Simulate(m_deltaTime, m_generateSDF, m_collisionResponse, m_AsyncCompute); + } + // Have compute work wait for signal from graphics queue that we can start + // issuing the sim commands. + if (m_AsyncCompute) + { + GetDevice()->SubmitComputeCommandList(); + WaitSimulateDone(); // Waiting on this to be done really defies the point of doing this on another queue. + // TODO: Double buffer needed resources to avoid synchronization issues in the middle of the frame + // and don't wait on the queue. + } + + // Update lighting constants for active scene + m_activeScene.lightConstantBuffer->NumLights = m_activeScene.scene->GetSceneLightCount(); + for (int i = 0; i < m_activeScene.lightConstantBuffer->NumLights; ++i) + { + const Light& lightInfo = m_activeScene.scene->GetSceneLightInfo(i); + m_activeScene.lightConstantBuffer->LightInfo[i].LightColor = { lightInfo.color[0], lightInfo.color[1], lightInfo.color[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightDirWS = { lightInfo.direction[0], lightInfo.direction[1], lightInfo.direction[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightInnerConeCos = lightInfo.innerConeCos; + m_activeScene.lightConstantBuffer->LightInfo[i].LightIntensity = lightInfo.intensity; + m_activeScene.lightConstantBuffer->LightInfo[i].LightOuterConeCos = lightInfo.outerConeCos; + m_activeScene.lightConstantBuffer->LightInfo[i].LightPositionWS = { lightInfo.position[0], lightInfo.position[1], lightInfo.position[2] }; + m_activeScene.lightConstantBuffer->LightInfo[i].LightRange = lightInfo.range; + m_activeScene.lightConstantBuffer->LightInfo[i].LightType = lightInfo.type; + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowMapIndex = lightInfo.shadowMapIndex; + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowProjection = *(AMD::float4x4*)&lightInfo.mLightViewProj; // ugh .. need a proper math library + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowParams = { lightInfo.depthBias, .1f, 100.0f, 0.f }; // Near and Far are currently hard-coded because we are hard-coding them elsewhere + m_activeScene.lightConstantBuffer->LightInfo[i].ShadowMapSize = GetDevice()->GetShadowBufferResource()->GetWidth() / 2; + m_activeScene.lightConstantBuffer->UseDepthApproximation = m_useDepthApproximation; + } + m_activeScene.lightConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Render shadow passes to shadow buffer (and clear) + uint32_t shadowMapIndex = 0; + uint32_t sceneLightCount = m_activeScene.scene->GetSceneLightCount(); + for (uint32_t i = 0; i < sceneLightCount; i++) + { + const Light& LightInfo = m_activeScene.scene->GetSceneLightInfo(i); + if (LightInfo.type != LightType_Spot && LightInfo.type != LightType_Directional &&(shadowMapIndex < 4)) + continue; + + uint32_t viewportOffsetsX[4] = { 0, 1, 0, 1 }; + uint32_t viewportOffsetsY[4] = { 0, 0, 1, 1 }; + uint32_t viewportWidth = GetDevice()->GetShadowBufferResource()->GetWidth() / 2; + uint32_t viewportHeight = GetDevice()->GetShadowBufferResource()->GetHeight() / 2; + + // Setup shadow constants for this light + m_activeScene.shadowViewConstantBuffer->vEye = { LightInfo.position[0], LightInfo.position[1], LightInfo.position[2], 0 }; + m_activeScene.shadowViewConstantBuffer->mVP = *(AMD::float4x4*) & LightInfo.mLightViewProj; + m_activeScene.shadowViewConstantBuffer->vViewport = { 0, 0, (float)viewportWidth, (float)viewportHeight }; + m_activeScene.shadowViewConstantBuffer.Update(GetDevice()->GetCurrentCommandContext()); + + // Update parameters (updates LOD shadow params) + AMD::float4 ShadowCam = { LightInfo.position[0], LightInfo.position[1], LightInfo.position[2], 0 }; + UpdateRenderShadowParameters(ShadowCam); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + if (m_activeScene.objects[i].hairStrands->GetTressFXHandle()) + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdatePerObjectRenderParams(GetDevice()->GetCurrentCommandContext()); + } + GetDevice()->BeginRenderPass(GetDevice()->GetCurrentCommandContext(), m_pShadowRenderTargetSet.get(), L"ShadowPass", GetDevice()->GetShadowBufferResource()->GetWidth(), GetDevice()->GetShadowBufferResource()->GetHeight()); + + // Set the RT's quadrant where to render the shadow map (these viewport offsets need to match the ones in shadowFiltering.h) + GetDevice()->SetViewportAndScissor(GetDevice()->GetCurrentCommandContext(), viewportOffsetsX[shadowMapIndex] * viewportWidth, viewportOffsetsY[shadowMapIndex] * viewportHeight, viewportWidth, viewportHeight); + + // Render GLTF + if (m_drawModel) + m_activeScene.scene->OnRenderLight(i); + + GetDevice()->GetTimeStamp("Render GLTF Shadows"); + + // Render Hair + if (m_drawHair) + DrawHairShadows(); + + GetDevice()->GetTimeStamp("Render Hair Shadows"); + + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + shadowMapIndex++; + } + + // Transition shadow map to read + EI_Barrier writeToRead = { GetDevice()->GetShadowBufferResource(), EI_STATE_DEPTH_STENCIL, EI_STATE_SRV }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &writeToRead); + + // Render GLTF passes to main render target (and clear) + GetDevice()->BeginRenderPass(GetDevice()->GetCurrentCommandContext(), m_pGLTFRenderTargetSet.get(), L"GLTFRender Pass"); + if (m_drawModel) + { + m_activeScene.scene->OnRender(); + } + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + GetDevice()->GetTimeStamp("glTF Render"); + + // Update rendering parameters (updates hair LOD params) + UpdateRenderingParameters(); + for (int i = 0; i < m_activeScene.objects.size(); ++i) + { + if (m_activeScene.objects[i].hairStrands->GetTressFXHandle()) + m_activeScene.objects[i].hairStrands->GetTressFXHandle()->UpdatePerObjectRenderParams(GetDevice()->GetCurrentCommandContext()); + } + + // Do hair draw - will pick correct render approach + if (m_drawHair) + { + DrawHair(); + } + // Render debug collision mesh if needed + EI_CommandContext& commandList = GetDevice()->GetCurrentCommandContext(); + + if (m_drawCollisionMesh || m_drawMarchingCubes) + { + if (m_drawMarchingCubes) + { + GenerateMarchingCubes(); + } + + GetDevice()->BeginRenderPass(commandList, m_pDebugRenderTargetSet.get(), L"DrawCollisionMesh Pass"); + if (m_drawCollisionMesh) + { + DrawCollisionMesh(); + } + if (m_drawMarchingCubes) + { + DrawSDF(); + } + GetDevice()->EndRenderPass(GetDevice()->GetCurrentCommandContext()); + } + + // Transition shadow map to write + EI_Barrier readToWrite = { GetDevice()->GetShadowBufferResource(), EI_STATE_SRV, EI_STATE_DEPTH_STENCIL }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &readToWrite); + GetDevice()->OnEndFrame(); +} + +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ +#if defined(TRESSFX_DX12) + LPCSTR Name = "TressFX v4.1 DX12"; +#else + LPCSTR Name = "TressFX v4.1 Vulkan"; +#endif + uint32_t Width = 1280; + uint32_t Height = 800; + + // create new DX sample + return RunFramework(hInstance, lpCmdLine, nCmdShow, Width, Height, new TressFXSample(Name)); +} diff --git a/Gems/AtomTressFX/External/Code/src/TressFXSample.h b/Gems/AtomTressFX/External/Code/src/TressFXSample.h new file mode 100644 index 0000000000..fe8a1d3078 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/TressFXSample.h @@ -0,0 +1,192 @@ +// +// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +// +// 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. +// + +#pragma once + +#include "Misc/FrameworkWindows.h" +#include "Misc/Camera.h" +#include "EngineInterface.h" +#include "GLTF/GltfCommon.h" + +#include "TressFXAsset.h" +#include "AMD_Types.h" +#include "AMD_TressFX.h" +#include "TressFXCommon.h" +#include "TressFXSDFCollision.h" +#include "TressFXSettings.h" + +#include + +class TressFXPPLL; +class TressFXShortCut; +class CollisionMesh; +class HairStrands; +class Simulation; +class EI_Scene; + +// scene description - no live objects +struct TressFXObjectDescription +{ + std::string name; + std::string tfxFilePath; + std::string tfxBoneFilePath; + std::string hairObjectName; + int numFollowHairs; + float tipSeparationFactor; + int mesh; + TressFXSimulationSettings initialSimulationSettings; + TressFXRenderingSettings initialRenderingSettings; +}; + +struct TressFXCollisionMeshDescription +{ + std::string name; + std::string tfxMeshFilePath; + int numCellsInXAxis; + float collisionMargin; + int mesh; + std::string followBone; +}; + +struct TressFXSceneDescription +{ + std::vector objects; + std::vector collisionMeshes; + + std::string gltfFilePath; + std::string gltfFileName; + std::string gltfBonePrefix; + + float startOffset; +}; + +// in-memory scene +struct TressFXObject +{ + std::unique_ptr hairStrands; + TressFXSimulationSettings simulationSettings; + TressFXRenderingSettings renderingSettings; + std::string name; +}; + +struct TressFXScene +{ + std::vector objects; + std::vector> collisionMeshes; + + TressFXUniformBuffer viewConstantBuffer; + std::unique_ptr viewBindSet; + + TressFXUniformBuffer shadowViewConstantBuffer; + std::unique_ptr shadowViewBindSet; + + TressFXUniformBuffer lightConstantBuffer; + std::unique_ptr lightBindSet; + + std::unique_ptr scene; +}; + +class TressFXSample : public FrameworkWindows +{ +public: + TressFXSample(LPCSTR name); + + void LoadScene(TressFXSceneDescription& desc); + + void DrawHairShadows(); + + void OnCreate(HWND hWnd); + void OnDestroy(); + void OnRender(); + bool OnEvent(MSG msg); + void OnResize(uint32_t Width, uint32_t Height); + void RecreateSizeDependentResources(); + void SetFullScreen(bool fullscreen); + void DrawHair(); + // Simulation and collision + void Simulate(double fTime, bool bUpdateCollMesh, bool bSDFCollisionResponse, bool bAsyncCompute); + void WaitSimulateDone(); + void SetSDFCollisionMargin(float collisionMargin); + void UpdateSimulationParameters(); + void UpdateRenderingParameters(); + void UpdateRenderShadowParameters(AMD::float4& CameraPos); + void ToggleShortCut(); + + // debug drawing + void DrawCollisionMesh(); + void DrawSDFGrid(); + void DrawSDF(); + void GenerateMarchingCubes(); + void SetSDFIsoLevel(float isoLevel); + + void LoadScene(int sceneNumber); + + int GetNumTressFXObjects() { return static_cast(m_activeScene.objects.size()); } +private: + void DisplayRenderingParameters(const char* name, TressFXHairObject * object, TressFXRenderingSettings* RenderSettings); + void DisplaySimulationParameters(const char* name, TressFXSimulationSettings* simulationSettings); + + // available scene descriptions (not necessary in memory) + std::vector m_scenes; + TressFXScene m_activeScene; + + std::unique_ptr m_pPPLL; + std::unique_ptr m_pShortCut; + std::unique_ptr m_pSimulation; + + std::unique_ptr m_pGLTFRenderTargetSet = nullptr; + std::unique_ptr m_pShadowRenderTargetSet = nullptr; + std::unique_ptr m_pDebugRenderTargetSet = nullptr; + + std::unique_ptr m_pHairShadowPSO = nullptr; + + enum OITMethod + { + OIT_METHOD_PPLL, + OIT_METHOD_SHORTCUT + }; + + OITMethod m_eOITMethod; + int m_nScreenWidth; + int m_nScreenHeight; + int m_nPPLLNodes; + + void InitializeLayouts(); + void DestroyLayouts(); + void SetOITMethod(OITMethod method); + void DestroyOITResources(OITMethod method); + + float m_time; // WallClock in seconds. + float m_deltaTime; // The elapsed time in milliseconds since the previous frame. + double m_lastFrameTime; + bool m_PauseAnimation = false; + bool m_PauseSimulation = false; + bool m_AsyncCompute = false; + bool m_drawHair = true; + bool m_drawModel = true; + bool m_drawCollisionMesh = false; + bool m_drawMarchingCubes = false; + bool m_generateSDF = true; + bool m_collisionResponse = true; + bool m_useDepthApproximation = true; + bool m_vSync = false; +}; diff --git a/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt b/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt new file mode 100644 index 0000000000..4300589522 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/CMakeLists.txt @@ -0,0 +1,5 @@ +project (TressFX_VK) + +set(sources + VK/VKEngineInterfaceImpl.cpp + VK/VKEngineInterfaceImpl.h PARENT_SCOPE) diff --git a/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp new file mode 100644 index 0000000000..3dd6f1ce31 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.cpp @@ -0,0 +1,1623 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#include "EngineInterface.h" + +#include +using namespace DirectX; + +#include +#include "Base/ShaderCompilerHelper.h" +#include "Base/Helper.h" +#include "GLTF/GltfHelpers.h" +#include "GLTF/GltfCommon.h" +#include "GLTF/GLTFTexturesAndBuffers.h" +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfDepthPass.h" +#include "TressFXLayouts.h" + +// Inline operators for general state data +inline VkCompareOp operator* (EI_CompareFunc Enum) +{ + if (Enum == EI_CompareFunc::Never) return VK_COMPARE_OP_NEVER; + if (Enum == EI_CompareFunc::Less) return VK_COMPARE_OP_LESS; + if (Enum == EI_CompareFunc::Equal) return VK_COMPARE_OP_EQUAL; + if (Enum == EI_CompareFunc::LessEqual) return VK_COMPARE_OP_LESS_OR_EQUAL; + if (Enum == EI_CompareFunc::Greater) return VK_COMPARE_OP_GREATER; + if (Enum == EI_CompareFunc::NotEqual) return VK_COMPARE_OP_NOT_EQUAL; + if (Enum == EI_CompareFunc::GreaterEqual) return VK_COMPARE_OP_GREATER_OR_EQUAL; + if (Enum == EI_CompareFunc::Always) return VK_COMPARE_OP_ALWAYS; + assert(false && "Using an EI_CompareFunc that has not been mapped to Vulkan yet!"); + return VK_COMPARE_OP_NEVER; +} + +inline VkBlendOp operator* (EI_BlendOp Enum) +{ + if (Enum == EI_BlendOp::Add) return VK_BLEND_OP_ADD; + if (Enum == EI_BlendOp::Subtract) return VK_BLEND_OP_SUBTRACT; + if (Enum == EI_BlendOp::ReverseSubtract) return VK_BLEND_OP_REVERSE_SUBTRACT; + if (Enum == EI_BlendOp::Min) return VK_BLEND_OP_MIN; + if (Enum == EI_BlendOp::Max) return VK_BLEND_OP_MAX; + assert(false && "Using an EI_BlendOp that has not been mapped to Vulkan yet!"); + return VK_BLEND_OP_ADD; +}; + +inline VkStencilOp operator* (EI_StencilOp Enum) +{ + if (Enum == EI_StencilOp::Keep) return VK_STENCIL_OP_KEEP; + if (Enum == EI_StencilOp::Zero) return VK_STENCIL_OP_ZERO; + if (Enum == EI_StencilOp::Replace) return VK_STENCIL_OP_REPLACE; + if (Enum == EI_StencilOp::IncrementClamp) return VK_STENCIL_OP_INCREMENT_AND_CLAMP; + if (Enum == EI_StencilOp::DecrementClamp) return VK_STENCIL_OP_DECREMENT_AND_CLAMP; + if (Enum == EI_StencilOp::Invert) return VK_STENCIL_OP_INVERT; + if (Enum == EI_StencilOp::IncrementWrap) return VK_STENCIL_OP_INCREMENT_AND_WRAP; + if (Enum == EI_StencilOp::DecrementWrap) return VK_STENCIL_OP_DECREMENT_AND_WRAP; + assert(false && "Using an EI_StencilOp that has not been mapped to Vulkan yet!"); + return VK_STENCIL_OP_KEEP; +} + +inline VkBlendFactor operator* (EI_BlendFactor Enum) +{ + if (Enum == EI_BlendFactor::Zero) return VK_BLEND_FACTOR_ZERO; + if (Enum == EI_BlendFactor::One) return VK_BLEND_FACTOR_ONE; + if (Enum == EI_BlendFactor::SrcColor) return VK_BLEND_FACTOR_SRC_COLOR; + if (Enum == EI_BlendFactor::InvSrcColor) return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR; + if (Enum == EI_BlendFactor::DstColor) return VK_BLEND_FACTOR_DST_COLOR; + if (Enum == EI_BlendFactor::InvDstColor) return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR; + if (Enum == EI_BlendFactor::SrcAlpha) return VK_BLEND_FACTOR_SRC_ALPHA; + if (Enum == EI_BlendFactor::InvSrcAlpha) return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + if (Enum == EI_BlendFactor::DstAlpha) return VK_BLEND_FACTOR_DST_ALPHA; + if (Enum == EI_BlendFactor::InvDstAlpha) return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA; + assert(false && "Using an EI_BlendFactor that has not been mapped to Vulkan yet!"); + return VK_BLEND_FACTOR_ZERO; +}; + +inline VkPrimitiveTopology operator* (EI_Topology Enum) +{ + if (Enum == EI_Topology::TriangleList) return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + if (Enum == EI_Topology::TriangleStrip) return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; + assert(false && "Using an EI_Topology that has not been mapped to Vulkan yet!"); + return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; +} + +inline VkImageLayout operator* (EI_LayoutState Enum) +{ + if (Enum == EI_LayoutState::Undefined) return VK_IMAGE_LAYOUT_UNDEFINED; + if (Enum == EI_LayoutState::RenderColor) return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + if (Enum == EI_LayoutState::RenderDepth) return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + if (Enum == EI_LayoutState::ReadOnly) return VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + if (Enum == EI_LayoutState::Present) return VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + assert(false && "Using an EI_LayoutState that has not been mapped to Vulkan yet!"); + return VK_IMAGE_LAYOUT_UNDEFINED; +}; + +EI_Device::EI_Device() : + m_currentImageIndex(0), + m_pFullscreenIndexBuffer() +{ +} + +EI_Device::~EI_Device() +{ + +} + +VkPipelineBindPoint VulkanBindPoint(EI_BindPoint bp) { + return (bp == EI_BP_COMPUTE) ? VK_PIPELINE_BIND_POINT_COMPUTE : VK_PIPELINE_BIND_POINT_GRAPHICS; +} + +struct VulkanBuffer +{ + VulkanBuffer(CAULDRON_VK::Device * pDevice) : pDevice(pDevice) {} + + void Create(const int structSize, const int structCount, const unsigned int flags, const char* name) { + + totalMemSize = structSize * structCount; + + VkBufferUsageFlags usage = 0; + if (flags & EI_BF_UNIFORMBUFFER) + usage |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + //if ( flags & EI_BF_NEEDSUAV) + usage |= VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; + if (flags & EI_BF_VERTEXBUFFER) + usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + if (flags & EI_BF_INDEXBUFFER) + usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + + if (flags & EI_BF_NEEDSCPUMEMORY) { + VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; + bufferInfo.size = totalMemSize; + bufferInfo.usage = usage | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; + + VmaAllocationCreateInfo allocInfo = {}; + allocInfo.usage = VMA_MEMORY_USAGE_CPU_TO_GPU; + allocInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT; + allocInfo.pUserData = (void*)name; + + vmaCreateBuffer(pDevice->GetAllocator(), &bufferInfo, &allocInfo, &cpuBuffer, &cpuBufferAlloc, nullptr); + vmaMapMemory(pDevice->GetAllocator(), cpuBufferAlloc, &cpuMappedMemory); + + } + + VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; + bufferInfo.size = totalMemSize; + bufferInfo.usage = usage | VK_BUFFER_USAGE_TRANSFER_DST_BIT; + + VmaAllocationCreateInfo allocInfo = {}; + allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; + allocInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT; + allocInfo.pUserData = (void*)name; + + vmaCreateBuffer(pDevice->GetAllocator(), &bufferInfo, &allocInfo, &gpuBuffer, &gpuBufferAlloc, nullptr); + + // fill descriptor info + info.buffer = gpuBuffer; + info.offset = 0; + info.range = totalMemSize; + } + + void FreeCPUMemory() + { + vmaUnmapMemory(pDevice->GetAllocator(), cpuBufferAlloc); + if (cpuBuffer != VK_NULL_HANDLE) + vmaDestroyBuffer(pDevice->GetAllocator(), cpuBuffer, cpuBufferAlloc); + } + + void Free() { + FreeCPUMemory(); + if ( gpuBuffer != VK_NULL_HANDLE) + vmaDestroyBuffer(pDevice->GetAllocator(), gpuBuffer, gpuBufferAlloc); + } + + int totalMemSize = 0; + CAULDRON_VK::Device *pDevice = nullptr; + VkDescriptorBufferInfo info = {}; + VkBuffer cpuBuffer = VK_NULL_HANDLE; + VkBuffer gpuBuffer = VK_NULL_HANDLE; + VmaAllocation cpuBufferAlloc = VK_NULL_HANDLE; + VmaAllocation gpuBufferAlloc = VK_NULL_HANDLE; + + void * cpuMappedMemory = nullptr; +}; + +void EI_Device::DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets) +{ + // Set everything + commandContext.BindSets(&pso, numBindSets, bindSets); + + EI_IndexedDrawParams drawParams; + drawParams.pIndexBuffer = m_pFullscreenIndexBuffer.get(); + drawParams.numIndices = 4; + drawParams.numInstances = 1; + + commandContext.DrawIndexedInstanced(pso, drawParams); +} + +std::unique_ptr EI_Device::CreateBufferResource(int structSize, const int structCount, const unsigned int flags, const char* name) +{ + EI_Resource* result = new EI_Resource; + result->m_ResourceType = EI_ResourceType::Buffer; + result->m_pBuffer = new VulkanBuffer(&m_device); + result->m_pBuffer->Create(structSize, structCount, flags | EI_BF_NEEDSCPUMEMORY, name); + + return std::unique_ptr(result); +} + +std::unique_ptr EI_Device::CreateUint32Resource(const int width, const int height, const size_t arraySize, const char* name, uint32_t ClearValue /* Ignored on Vulkan */) +{ + EI_Resource * res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkImageCreateInfo image_info = {}; + image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + image_info.pNext = NULL; + image_info.imageType = VK_IMAGE_TYPE_2D; + image_info.format = VK_FORMAT_R32_UINT; + image_info.extent.width = width; + image_info.extent.height = height; + image_info.extent.depth = 1; + image_info.mipLevels = 1; + image_info.arrayLayers = (uint32_t)arraySize; + image_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_info.queueFamilyIndexCount = 0; + image_info.pQueueFamilyIndices = NULL; + image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_info.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + image_info.flags = 0; + image_info.tiling = VK_IMAGE_TILING_OPTIMAL; + + + res->m_pTexture->Init(GetDevice()->GetCauldronDevice(), &image_info, const_cast(name)); // Note, Init should really be changed to take a const char* instead of char. + + // Need to make my own CreateSRV & RTV that will take an array (current functions only assume 2D Textures - hard coded) + res->m_pTexture->CreateSRV(&res->srv, 0); + res->m_pTexture->CreateRTV(&res->rtv, 0); + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues /*ignored in Vulkan*/) +{ + EI_Resource * res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkFormat format; + if (channels == 1) + { + format = VK_FORMAT_R16_SFLOAT; + } + else if (channels == 2) + { + format = VK_FORMAT_R16G16_SFLOAT; + } + else if (channels == 4) + { + if (channelSize == 1) + format = VK_FORMAT_R8G8B8A8_SRGB; + else + format = VK_FORMAT_R16G16B16A16_SFLOAT; + } + + res->m_pTexture->InitRendertarget(&m_device, width, height, format, VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, (char*)name); + res->m_pTexture->CreateSRV(&res->srv, 0); + res->m_pTexture->CreateRTV(&res->rtv, 0); + + EI_Barrier barrier = { res, EI_STATE_UNDEFINED, EI_STATE_RENDER_TARGET }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &barrier); + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateDepthResource(const int width, const int height, const char* name) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + VkImageCreateInfo image_info = {}; + image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + image_info.pNext = NULL; + image_info.imageType = VK_IMAGE_TYPE_2D; + image_info.format = VK_FORMAT_D32_SFLOAT; + image_info.extent.width = width; + image_info.extent.height = height; + image_info.extent.depth = 1; + image_info.mipLevels = 1; + image_info.arrayLayers = 1; + image_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_info.queueFamilyIndexCount = 0; + image_info.pQueueFamilyIndices = NULL; + image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_info.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; //TODO + image_info.flags = 0; + image_info.tiling = VK_IMAGE_TILING_OPTIMAL; // VK_IMAGE_TILING_LINEAR should never be used and will never be faster + + res->m_pTexture->Init(GetDevice()->GetCauldronDevice(), &image_info, const_cast(name)); // Note, Init should really be changed to take a const char* instead of char. + res->m_pTexture->CreateSRV(&res->srv); + res->m_pTexture->CreateDSV(&res->rtv); + + EI_Barrier barrier = { res, EI_STATE_UNDEFINED, EI_STATE_DEPTH_STENCIL }; + GetDevice()->GetCurrentCommandContext().SubmitBarrier(1, &barrier); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateResourceFromFile(const char* szFilename, bool useSRGB/*= false*/) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Texture; + res->m_pTexture = new CAULDRON_VK::Texture(); + + res->m_pTexture->InitFromFile(GetDevice()->GetCauldronDevice(), &m_uploadHeap, szFilename, useSRGB); + res->m_pTexture->CreateSRV(&res->srv, 0); + m_uploadHeap.FlushAndFinish(); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode) +{ + EI_Resource* res = new EI_Resource; + res->m_ResourceType = EI_ResourceType::Sampler; + res->m_pSampler = new VkSampler; + + VkSamplerCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + info.magFilter = (MinFilter == EI_Filter::Linear)? VK_FILTER_LINEAR : VK_FILTER_NEAREST; + info.minFilter = (MaxFilter == EI_Filter::Linear)? VK_FILTER_LINEAR : VK_FILTER_NEAREST;; + info.mipmapMode = (MipFilter == EI_Filter::Linear)? VK_SAMPLER_MIPMAP_MODE_LINEAR : VK_SAMPLER_MIPMAP_MODE_NEAREST; + info.addressModeU = (AddressMode == EI_AddressMode::Wrap)? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + info.addressModeV = (AddressMode == EI_AddressMode::Wrap) ? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;; + info.addressModeW = (AddressMode == EI_AddressMode::Wrap) ? VK_SAMPLER_ADDRESS_MODE_REPEAT : VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;; + info.minLod = -1000; + info.maxLod = 1000; + info.maxAnisotropy = 1.0f; + VkResult result = vkCreateSampler(GetCauldronDevice()->GetDevice(), &info, NULL, res->m_pSampler); + assert(result == VK_SUCCESS); + + return std::unique_ptr(res); +} + +std::unique_ptr EI_Device::CreateBindSet(EI_BindLayout * layout, EI_BindSetDescription& bindSet) +{ + EI_BindSet * result = new EI_BindSet; + m_resourceViewHeaps.AllocDescriptor(layout->m_descriptorSetLayout, &result->m_descriptorSet); + + std::vector writes; + std::vector> DescriptorImageInfos; + + int numResources = (int)bindSet.resources.size(); + for (int i = 0; i < numResources; ++i) + { + VkWriteDescriptorSet w = {}; + w.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + w.dstSet = result->m_descriptorSet; + w.dstBinding = layout->description.resources[i].binding; + w.dstArrayElement = 0; + w.descriptorCount = 1; + + switch (layout->description.resources[i].type) + { + case EI_RESOURCETYPE_BUFFER_RW: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_BUFFER_RO: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_IMAGE_RW: + { + w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Texture); + pImageInfo->imageView = bindSet.resources[i]->srv; + pImageInfo->imageLayout = VK_IMAGE_LAYOUT_GENERAL; + w.pImageInfo = pImageInfo; + break; + } + case EI_RESOURCETYPE_IMAGE_RO: + { + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Texture); + pImageInfo->imageView = bindSet.resources[i]->srv; + pImageInfo->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + w.pImageInfo = pImageInfo; + break; + } + case EI_RESOURCETYPE_UNIFORM: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Buffer); + w.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + w.pBufferInfo = &bindSet.resources[i]->m_pBuffer->info; + break; + } + case EI_RESOURCETYPE_SAMPLER: + { + assert(bindSet.resources[i]->m_ResourceType == EI_ResourceType::Sampler); + w.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + DescriptorImageInfos.push_back(std::make_unique()); + VkDescriptorImageInfo* pImageInfo = DescriptorImageInfos[DescriptorImageInfos.size() - 1].get(); + pImageInfo->sampler = *bindSet.resources[i]->m_pSampler; + w.pImageInfo = pImageInfo; + break; + } + default: + assert(0); + break; + } + writes.push_back(w); + } + + assert(writes.size() == layout->layoutBindings.size()); + + vkUpdateDescriptorSets(m_device.GetDevice(), (uint32_t)writes.size(), writes.data(), 0, nullptr); + + return std::unique_ptr(result); +} + +EI_BindSet::~EI_BindSet() +{ + GetDevice()->GetResourceViewHeaps()->FreeDescriptor(m_descriptorSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + // Create the render pass set + EI_RenderTargetSet* pNewRenderTargetSet = new EI_RenderTargetSet; + + int currentClearValueRef = 0; + for (uint32_t i = 0; i < numResources; i++) + { + // Check size consistency + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + // Setup a clear value if needed + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Clear) + { + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + pNewRenderTargetSet->m_ClearValues[i].depthStencil.depth = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].depthStencil.stencil = (uint32_t)clearValues[currentClearValueRef++]; + } + else + { + pNewRenderTargetSet->m_ClearValues[i].color.float32[0] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[1] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[2] = clearValues[currentClearValueRef++]; + pNewRenderTargetSet->m_ClearValues[i].color.float32[3] = clearValues[currentClearValueRef++]; + } + } + } + + // Tag the number of resources this render pass set is setting/clearing + pNewRenderTargetSet->m_NumResources = numResources; + + // Setup the render pass + pNewRenderTargetSet->m_RenderPass = CreateRenderPass(pResourceFormats, numResources, AttachmentParams); + + return std::unique_ptr(pNewRenderTargetSet); +} + +std::unique_ptr EI_Device::CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues) +{ + std::vector FormatArray(numResources); + + for (uint32_t i = 0; i < numResources; ++i) + { + assert(pResourcesArray[i]->m_ResourceType == EI_ResourceType::Texture); + FormatArray[i] = pResourcesArray[i]->m_pTexture->GetFormat(); + } + std::unique_ptr result = CreateRenderTargetSet(FormatArray.data(), numResources, AttachmentParams, clearValues); + result->SetResources(pResourcesArray); + return result; +} + +std::unique_ptr EI_Device::CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon) +{ + EI_GLTFTexturesAndBuffers* GLTFBuffersAndTextures = new CAULDRON_VK::GLTFTexturesAndBuffers(); + GLTFBuffersAndTextures->OnCreate(GetCauldronDevice(), pGLTFCommon, &m_uploadHeap, &m_vidMemBufferPool, &m_constantBufferRing); + + return std::unique_ptr(GLTFBuffersAndTextures); +} + +std::unique_ptr EI_Device::CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfPbrPass* GLTFPbr = new CAULDRON_VK::GltfPbrPass(); + GLTFPbr->OnCreate(GetCauldronDevice(), renderTargetSet != nullptr ? renderTargetSet->m_RenderPass : GetSwapChainRenderPass(), + &m_uploadHeap, &m_resourceViewHeaps, &m_constantBufferRing, &m_vidMemBufferPool, pGLTFTexturesAndBuffers, + NULL, GetShadowBufferResource()->srv, VK_SAMPLE_COUNT_1_BIT); + + return std::unique_ptr(GLTFPbr); +} + +std::unique_ptr EI_Device::CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet) +{ + EI_GltfDepthPass* GLTFDepth = new CAULDRON_VK::GltfDepthPass(); + assert(renderTargetSet); + + GLTFDepth->OnCreate(GetCauldronDevice(), renderTargetSet->m_RenderPass, &m_uploadHeap, &m_resourceViewHeaps, + &m_constantBufferRing, &m_vidMemBufferPool, pGLTFTexturesAndBuffers); + + return std::unique_ptr(GLTFDepth); +} + +void EI_RenderTargetSet::SetResources(const EI_Resource** pResourcesArray) +{ + if (m_FrameBuffer) { + + vkDestroyFramebuffer(GetDevice()->GetVulkanDevice(), m_FrameBuffer, nullptr); + } + + // Now setup up the needed frame buffers + VkImageView viewAttachments[MaxRenderAttachments]; + + // We need the SRVs for all the things ... + for (uint32_t i = 0; i < m_NumResources; ++i) + viewAttachments[i] = pResourcesArray[i]->rtv; + + VkFramebufferCreateInfo fb_info = {}; + fb_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + fb_info.pNext = NULL; + fb_info.renderPass = m_RenderPass; + fb_info.attachmentCount = m_NumResources; + fb_info.pAttachments = viewAttachments; + + // Use the width and height from the first entry (they should ALL be the same) + fb_info.width = pResourcesArray[0]->GetWidth(); + fb_info.height = pResourcesArray[0]->GetHeight(); + fb_info.layers = 1; + + vkCreateFramebuffer(GetDevice()->GetVulkanDevice(), &fb_info, nullptr, &m_FrameBuffer); +} + +VkRenderPass EI_Device::CreateRenderPass(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams) +{ + VkAttachmentDescription attachments[MaxRenderAttachments]; + VkAttachmentReference colorRefs[MaxRenderAttachments]; + VkAttachmentReference depthRef; + int numColorRefs = 0; + + assert(numResources < MaxRenderAttachments && "Creating a RenderPass with more attachments than currently supportable. Please increase MaxRenderAttachments static variable in VKEngineInterfaceImpl.cpp"); + + // Start by figuring out render pass buffers + for (uint32_t i = 0; i < numResources; ++i) + { + assert(!(AttachmentParams[i].Flags & EI_RenderPassFlags::Depth && (i != (numResources - 1))) && "Only the last attachment can be specified as depth target"); + + attachments[i].format = pResourceFormats[i]; + attachments[i].samples = VK_SAMPLE_COUNT_1_BIT; // We should probably find a better way to query/set this in the future + attachments[i].storeOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Store? VK_ATTACHMENT_STORE_OP_STORE : VK_ATTACHMENT_STORE_OP_DONT_CARE; + + VkImageLayout imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + imageLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + } + attachments[i].initialLayout = imageLayout; + attachments[i].finalLayout = imageLayout; + assert(attachments[i].initialLayout == attachments[i].finalLayout); + attachments[i].flags = 0; + VkAttachmentLoadOp loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Load ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Clear ? VK_ATTACHMENT_LOAD_OP_CLEAR : loadOp; + + if (AttachmentParams[i].Flags & EI_RenderPassFlags::Depth) + { + loadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Load ? VK_ATTACHMENT_LOAD_OP_LOAD : VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].stencilLoadOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Clear? VK_ATTACHMENT_LOAD_OP_CLEAR : loadOp; + attachments[i].stencilStoreOp = AttachmentParams[i].Flags & EI_RenderPassFlags::Store? VK_ATTACHMENT_STORE_OP_STORE : VK_ATTACHMENT_STORE_OP_DONT_CARE; + depthRef = { i, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL }; + } + else + { + attachments[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + attachments[i].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + colorRefs[numColorRefs++] = { i, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL }; + } + } + + VkSubpassDescription subpass = {}; + subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + subpass.flags = 0; + subpass.inputAttachmentCount = 0; + subpass.pInputAttachments = NULL; + subpass.colorAttachmentCount = numColorRefs; + subpass.pColorAttachments = colorRefs; + subpass.pResolveAttachments = NULL; + subpass.pDepthStencilAttachment = numColorRefs != numResources? &depthRef : nullptr; // If we don't have the same number of color resources as total resources, one is depth + subpass.preserveAttachmentCount = 0; + subpass.pPreserveAttachments = NULL; + + VkRenderPassCreateInfo rp_info = {}; + rp_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + rp_info.pNext = NULL; + rp_info.attachmentCount = numResources; + rp_info.pAttachments = attachments; + rp_info.subpassCount = 1; + rp_info.pSubpasses = &subpass; + rp_info.dependencyCount = 0; + rp_info.pDependencies = NULL; + + // Create the Vulkan render pass + VkRenderPass pass; + vkCreateRenderPass(m_device.GetDevice(), &rp_info, NULL, &pass); + return pass; +} + +EI_RenderTargetSet::~EI_RenderTargetSet() +{ + vkDestroyFramebuffer(GetDevice()->GetVulkanDevice(), m_FrameBuffer, nullptr); + vkDestroyRenderPass(GetDevice()->GetVulkanDevice(), m_RenderPass, nullptr); +} + +void EI_Device::BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderTargetSet, const wchar_t* pPassName, uint32_t width /*= 0*/, uint32_t height /*= 0*/) +{ + VkRenderPassBeginInfo rp_begin = {}; + + rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rp_begin.pNext = NULL; + rp_begin.renderPass = pRenderTargetSet->m_RenderPass; + rp_begin.framebuffer = pRenderTargetSet->m_FrameBuffer; + rp_begin.renderArea.offset.x = 0; + rp_begin.renderArea.offset.y = 0; + rp_begin.renderArea.extent.width = width? width : m_width; + rp_begin.renderArea.extent.height = height? height : m_height; + rp_begin.clearValueCount = pRenderTargetSet->m_NumResources; + rp_begin.pClearValues = pRenderTargetSet->m_ClearValues; + + vkCmdBeginRenderPass(commandContext.commandBuffer, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); + + // NOTE: This should probably in it's own stand-alone call + CAULDRON_VK::SetViewportAndScissor(commandContext.commandBuffer, 0, 0, width ? width : m_width, height ? height : m_height); +} + +void EI_Device::EndRenderPass(EI_CommandContext& commandContext) +{ + vkCmdEndRenderPass(commandContext.commandBuffer); +} + +void EI_Device::SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height) +{ + CAULDRON_VK::SetViewportAndScissor(commandContext.commandBuffer, topX, topY, width, height); +} + +void EI_Device::OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName) +{ + // Create Device + m_device.OnCreate(appName, "Cauldron", enableValidation, hWnd); + m_device.CreatePipelineCache(); + + //init the shader compiler + CAULDRON_VK::CreateShaderCache(); + + // Create Swapchain + m_swapChain.OnCreate(&m_device, numBackBuffers, hWnd, CAULDRON_VK::DISPLAYMODE_SDR); + + m_resourceViewHeaps.OnCreate(&m_device, 256, 256, 256, 256); + + // Create a commandlist ring for the Direct queue + m_commandListRing.OnCreate(&m_device, numBackBuffers, 8); + // async compute + m_computeCommandListRing.OnCreate(&m_device, numBackBuffers, 8, true); + BeginNewCommandBuffer(); + + VkFenceCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + info.flags = 0; + vkCreateFence(GetVulkanDevice(), &info, nullptr, &m_computeDoneFence); + + + // Create a 'dynamic' constant buffers ring + m_constantBufferRing.OnCreate(&m_device, numBackBuffers, 20 * 1024 * 1024, "Uniforms"); + + // Create a 'static' constant buffer pool + m_vidMemBufferPool.OnCreate(&m_device, 128 * 1024 * 1024, USE_VID_MEM, "StaticGeom"); + m_sysMemBufferPool.OnCreate(&m_device, 32 * 1024, false, "PostProcGeom"); + + // initialize the GPU time stamps module + m_gpuTimer.OnCreate(&m_device, numBackBuffers); + + // Quick helper to upload resources, it has it's own commandList and uses suballocation. + // for 4K textures we'll need 100Megs + m_uploadHeap.OnCreate(&m_device, 100 * 1024 * 1024); + + // Create tonemapping pass + m_toneMapping.OnCreate(&m_device, m_swapChain.GetRenderPass(), &m_resourceViewHeaps, &m_sysMemBufferPool, &m_constantBufferRing); + + // Initialize UI rendering resources + m_ImGUI.OnCreate(&m_device, m_swapChain.GetRenderPass(), &m_uploadHeap, &m_constantBufferRing); + + // Create a render pass for our main buffer as it's needed earlier than other stuff is created + VkFormat backbufferFormats[] = { VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_D32_SFLOAT }; + + // Create index buffer for full screen passes + m_pFullscreenIndexBuffer = CreateBufferResource(sizeof(uint32_t), 4, EI_BF_INDEXBUFFER, "FullScreenIndexBuffer"); + + // Create shadow buffer. Because GLTF only allows us 1 buffer, we are going to create a HUGE one and divy it up as needed. + m_shadowBuffer = CreateDepthResource(4096, 4096, "Shadow Buffer"); + + // Create layout and PSO for resolve to swap chain + EI_LayoutDescription desc = { { {"ColorTexture", 0, EI_RESOURCETYPE_IMAGE_RO }, }, EI_PS }; + m_pEndFrameResolveBindLayout = CreateLayout(desc); + + // Recreate a PSO for full screen resolve to swap chain + //std::vector descs; + EI_PSOParams psoParams; + psoParams.primitiveTopology = EI_Topology::TriangleStrip; + psoParams.colorWriteEnable = true; + psoParams.depthTestEnable = false; + psoParams.depthWriteEnable = false; + psoParams.depthCompareOp = EI_CompareFunc::Always; + + psoParams.colorBlendParams.colorBlendEnabled = false; + psoParams.colorBlendParams.colorBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.colorSrcBlend = EI_BlendFactor::Zero; + psoParams.colorBlendParams.colorDstBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaBlendOp = EI_BlendOp::Add; + psoParams.colorBlendParams.alphaSrcBlend = EI_BlendFactor::One; + psoParams.colorBlendParams.alphaDstBlend = EI_BlendFactor::Zero; + + EI_BindLayout* layouts[] = { m_pEndFrameResolveBindLayout.get() }; + psoParams.layouts = layouts; + psoParams.numLayouts = 1; + psoParams.renderTargetSet = nullptr; // Will go to swapchain + m_pEndFrameResolvePSO = CreateGraphicsPSO("FullScreenRender.hlsl", "FullScreenVS", "FullScreenRender.hlsl", "FullScreenPS", psoParams); + + // Create default white texture to use + m_DefaultWhiteTexture = CreateResourceFromFile("DefaultWhite.png", true); + + // Create some samplers to use + m_LinearWrapSampler = CreateSampler(EI_Filter::Linear, EI_Filter::Linear, EI_Filter::Linear, EI_AddressMode::Wrap); + + // finish creating the index buffer + uint32_t indexArray[] = { 0, 1, 2, 3 }; + m_currentCommandBuffer.UpdateBuffer(m_pFullscreenIndexBuffer.get(), indexArray); + + EI_Barrier copyToResource[] = { + { m_pFullscreenIndexBuffer.get(), EI_STATE_COPY_DEST, EI_STATE_INDEX_BUFFER } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(copyToResource), copyToResource); +} + +void EI_Device::OnResize(uint32_t width, uint32_t height) +{ + m_width = width; + m_height = height; + + // if a previous resize event from this frame hasnt already opened a command buffer + if (!m_recording) + { + BeginNewCommandBuffer(); + } + + // If resizing but no minimizing + if (width > 0 && height > 0) + { + // Re/Create color buffer + m_colorBuffer = CreateRenderTargetResource(width, height, 4, 1, "Color Buffer"); + m_depthBuffer = CreateDepthResource(width, height, "Depth Buffer"); + m_swapChain.OnCreateWindowSizeDependentResources(width, height, m_vSync, CAULDRON_VK::DISPLAYMODE_SDR); + + // Create resources we need to resolve out render target back to swap chain + EI_BindSetDescription bindSet = { { m_colorBuffer.get() } }; + m_pEndFrameResolveBindSet = CreateBindSet(m_pEndFrameResolveBindLayout.get(), bindSet); + + // Create a bind set for any samplers we need (Doing it here because the layouts aren't yet initialized during OnCreate() call) + EI_BindSetDescription bindSetDesc = { { m_LinearWrapSampler.get(), } }; + m_pSamplerBindSet = CreateBindSet(GetSamplerLayout(), bindSetDesc); + + // update tonemapping + m_toneMapping.UpdatePipelines(m_swapChain.GetRenderPass()); + } +} + +void EI_Device::OnDestroy() +{ + m_device.GPUFlush(); + + // Remove linear wrap sampler + m_LinearWrapSampler.reset(); + + // Remove default white texture + m_DefaultWhiteTexture.reset(); + + // Wipe all the local resources we were using + m_pSamplerBindSet.reset(); + m_pEndFrameResolveBindSet.reset(); + m_pEndFrameResolvePSO.reset(); + m_pEndFrameResolveBindLayout.reset(); + + m_pFullscreenIndexBuffer.reset(); + m_shadowBuffer.reset(); + m_depthBuffer.reset(); + m_colorBuffer.reset(); + +#if TRESSFX_DEBUG_UAV + m_pDebugUAV.reset(); +#endif // TRESSFX_DEBUG_UAV + + m_toneMapping.OnDestroy(); + m_ImGUI.OnDestroy(); + + m_uploadHeap.OnDestroy(); + m_gpuTimer.OnDestroy(); + m_vidMemBufferPool.OnDestroy(); + m_sysMemBufferPool.OnDestroy(); + m_constantBufferRing.OnDestroy(); + m_resourceViewHeaps.OnDestroy(); + m_commandListRing.OnDestroy(); + m_computeCommandListRing.OnDestroy(); + + // Fullscreen state should always be false before exiting the app. + m_swapChain.SetFullScreen(false); + m_swapChain.OnDestroyWindowSizeDependentResources(); + m_swapChain.OnDestroy(); + + // shut down the shader compiler + DestroyShaderCache(&m_device); + m_device.DestroyPipelineCache(); + vkDestroyFence(GetVulkanDevice(), m_computeDoneFence, nullptr); + + m_device.OnDestroy(); +} + +std::unique_ptr EI_Device::CreateComputeShaderPSO(const char * shaderName, const char * entryPoint, EI_BindLayout ** layouts, int numLayouts) +{ + EI_PSO * result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["AMD_TRESSFX_VULKAN"] = "1"; + + VkPipelineShaderStageCreateInfo computeShader; + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_COMPUTE_BIT, shaderName, entryPoint, &defines, &computeShader); + + VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {}; + + VkDescriptorSetLayout descSetLayouts[16]; + for (int i = 0; i < numLayouts; ++i) + { + descSetLayouts[i] = layouts[i]->m_descriptorSetLayout; + } + pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutCreateInfo.pSetLayouts = descSetLayouts; + pipelineLayoutCreateInfo.setLayoutCount = numLayouts; + vkCreatePipelineLayout(m_device.GetDevice(), &pipelineLayoutCreateInfo, nullptr, &result->m_pipelineLayout); + VkComputePipelineCreateInfo computePipelineCreateInfo = {}; + computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; + computePipelineCreateInfo.layout = result->m_pipelineLayout; + computePipelineCreateInfo.stage = computeShader; + vkCreateComputePipelines(m_device.GetDevice(), m_device.GetPipelineCache(), 1, &computePipelineCreateInfo, NULL, &result->m_pipeline); + + result->m_bp = EI_BP_COMPUTE; + return std::unique_ptr(result); +} + +EI_PSO::~EI_PSO() +{ + vkDestroyPipeline(GetDevice()->GetVulkanDevice(), m_pipeline, NULL); + vkDestroyPipelineLayout(GetDevice()->GetVulkanDevice(), m_pipelineLayout, NULL); +} + +std::unique_ptr EI_Device::CreateGraphicsPSO(const char * vertexShaderName, const char * vertexEntryPoint, const char * fragmentShaderName, const char * fragmentEntryPoint, EI_PSOParams& psoParams) +{ + EI_PSO * result = new EI_PSO; + + DefineList defines; + defines["AMD_TRESSFX_MAX_NUM_BONES"] = std::to_string(AMD_TRESSFX_MAX_NUM_BONES); + defines["AMD_TRESSFX_MAX_HAIR_GROUP_RENDER"] = std::to_string(AMD_TRESSFX_MAX_HAIR_GROUP_RENDER); + defines["TRESSFX_VULKAN"] = "1"; + + // Compile and create shaders + VkPipelineShaderStageCreateInfo vertexShader = {}, fragmentShader = {}; + + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_VERTEX_BIT, vertexShaderName, vertexEntryPoint, &defines, &vertexShader); + CAULDRON_VK::VKCompileFromFile(m_device.GetDevice(), VK_SHADER_STAGE_FRAGMENT_BIT, fragmentShaderName, fragmentEntryPoint, &defines, &fragmentShader); + + VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = {}; + + VkDescriptorSetLayout descSetLayouts[16]; + for (int i = 0; i < psoParams.numLayouts; ++i) + { + descSetLayouts[i] = psoParams.layouts[i]->m_descriptorSetLayout; + } + pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + pipelineLayoutCreateInfo.pSetLayouts = descSetLayouts; + pipelineLayoutCreateInfo.setLayoutCount = psoParams.numLayouts; + vkCreatePipelineLayout(m_device.GetDevice(), &pipelineLayoutCreateInfo, nullptr, &result->m_pipelineLayout); + + std::vector shaderStages = { vertexShader, fragmentShader }; + + // Create pipeline + + // vertex input state (never need any) + std::vector vi_binding(0); + + VkPipelineVertexInputStateCreateInfo vi = {}; + vi.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + vi.pNext = NULL; + vi.flags = 0; + vi.vertexBindingDescriptionCount = (uint32_t)vi_binding.size(); + vi.pVertexBindingDescriptions = vi_binding.data(); + vi.vertexAttributeDescriptionCount = 0; + vi.pVertexAttributeDescriptions = nullptr; + + // input assembly state + VkPipelineInputAssemblyStateCreateInfo ia; + ia.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + ia.pNext = NULL; + ia.flags = 0; + ia.primitiveRestartEnable = VK_FALSE; + ia.topology = *psoParams.primitiveTopology; + + // rasterizer state + VkPipelineRasterizationStateCreateInfo rs; + rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + rs.pNext = NULL; + rs.flags = 0; + rs.polygonMode = VK_POLYGON_MODE_FILL; + rs.cullMode = VK_CULL_MODE_BACK_BIT; + rs.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + rs.depthClampEnable = VK_FALSE; + rs.rasterizerDiscardEnable = VK_FALSE; + rs.depthBiasEnable = VK_FALSE; + rs.depthBiasConstantFactor = 0; + rs.depthBiasClamp = 0; + rs.depthBiasSlopeFactor = 0; + rs.lineWidth = 1.0f; + + VkPipelineColorBlendAttachmentState att_state[1]; + att_state[0].colorWriteMask = psoParams.colorWriteEnable ? VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT : 0; + att_state[0].blendEnable = psoParams.colorBlendParams.colorBlendEnabled; + att_state[0].colorBlendOp = *psoParams.colorBlendParams.colorBlendOp; + att_state[0].srcColorBlendFactor = *psoParams.colorBlendParams.colorSrcBlend; + att_state[0].dstColorBlendFactor = *psoParams.colorBlendParams.colorDstBlend; + att_state[0].alphaBlendOp = *psoParams.colorBlendParams.alphaBlendOp; + att_state[0].srcAlphaBlendFactor = *psoParams.colorBlendParams.alphaSrcBlend; + att_state[0].dstAlphaBlendFactor = *psoParams.colorBlendParams.alphaDstBlend; + + // Color blend state + VkPipelineColorBlendStateCreateInfo cb; + cb.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + cb.flags = 0; + cb.pNext = NULL; + cb.attachmentCount = 1; + cb.pAttachments = att_state; + cb.logicOpEnable = VK_FALSE; + cb.logicOp = VK_LOGIC_OP_NO_OP; + cb.blendConstants[0] = 0; + cb.blendConstants[1] = 0; + cb.blendConstants[2] = 0; + cb.blendConstants[3] = 0; + + std::vector dynamicStateEnables = { + VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR + }; + VkPipelineDynamicStateCreateInfo dynamicState = {}; + dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + dynamicState.pNext = NULL; + dynamicState.pDynamicStates = dynamicStateEnables.data(); + dynamicState.dynamicStateCount = (uint32_t)dynamicStateEnables.size(); + + // view port state + VkPipelineViewportStateCreateInfo vp = {}; + vp.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + vp.pNext = NULL; + vp.flags = 0; + vp.viewportCount = 1; + vp.scissorCount = 1; + vp.pScissors = NULL; + vp.pViewports = NULL; + + // depth stencil state + VkPipelineDepthStencilStateCreateInfo ds; + ds.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + ds.pNext = NULL; + ds.flags = 0; + ds.depthTestEnable = psoParams.depthTestEnable; + ds.depthWriteEnable = psoParams.depthWriteEnable; + ds.depthCompareOp = *psoParams.depthCompareOp; + ds.stencilTestEnable = psoParams.stencilTestEnable; + + ds.back.failOp = *psoParams.backFailOp; + ds.back.passOp = *psoParams.backPassOp; + ds.back.depthFailOp = *psoParams.backDepthFailOp; + ds.back.compareOp = *psoParams.backCompareOp; + + ds.front.failOp = *psoParams.frontFailOp; + ds.front.passOp = *psoParams.frontPassOp; + ds.front.depthFailOp = *psoParams.frontDepthFailOp; + ds.front.compareOp = *psoParams.frontCompareOp; + + ds.back.compareMask = ds.front.compareMask = psoParams.stencilReadMask; + ds.back.reference = ds.front.reference = psoParams.stencilReference; + ds.back.writeMask = ds.front.writeMask = psoParams.stencilWriteMask; + + ds.depthBoundsTestEnable = VK_FALSE; + ds.minDepthBounds = 0; + ds.maxDepthBounds = 0; + + // multi sample state + VkPipelineMultisampleStateCreateInfo ms; + ms.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + ms.pNext = NULL; + ms.flags = 0; + ms.pSampleMask = NULL; + ms.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + ms.sampleShadingEnable = VK_FALSE; + ms.alphaToCoverageEnable = VK_FALSE; + ms.alphaToOneEnable = VK_FALSE; + ms.minSampleShading = 0.0; + + // create pipeline + VkGraphicsPipelineCreateInfo pipeline = {}; + pipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipeline.pNext = NULL; + pipeline.layout = result->m_pipelineLayout; + pipeline.basePipelineHandle = VK_NULL_HANDLE; + pipeline.basePipelineIndex = 0; + pipeline.flags = 0; + pipeline.pVertexInputState = &vi; + pipeline.pInputAssemblyState = &ia; + pipeline.pRasterizationState = &rs; + pipeline.pColorBlendState = &cb; + pipeline.pTessellationState = NULL; + pipeline.pMultisampleState = &ms; + pipeline.pDynamicState = &dynamicState; + pipeline.pViewportState = &vp; + pipeline.pDepthStencilState = &ds; + pipeline.pStages = shaderStages.data(); + pipeline.stageCount = (uint32_t)shaderStages.size(); + pipeline.renderPass = psoParams.renderTargetSet != nullptr ? psoParams.renderTargetSet->m_RenderPass : GetSwapChainRenderPass(); + pipeline.subpass = 0; + + vkCreateGraphicsPipelines(m_device.GetDevice(), m_device.GetPipelineCache(), 1, &pipeline, NULL, &result->m_pipeline); + + result->m_bp = EI_BP_GRAPHICS; + return std::unique_ptr(result); +} + +void EI_Device::WaitForCompute() +{ + vkWaitForFences(GetVulkanDevice(), 1, &m_computeDoneFence, true, UINT64_MAX); +} + +void EI_Device::SignalComputeStart() +{ + // TODO + vkResetFences(GetVulkanDevice(), 1, &m_computeDoneFence); +} + +void EI_Device::WaitForLastFrameGraphics() +{ + // TODO - not sure if this is necessary + if ( m_lastFrameGraphicsCommandBufferFence != VK_NULL_HANDLE) + { + vkWaitForFences(GetVulkanDevice(), 1, &m_lastFrameGraphicsCommandBufferFence, true, UINT64_MAX); + } +} + +void EI_Device::SubmitComputeCommandList() +{ + vkEndCommandBuffer(m_currentComputeCommandBuffer.commandBuffer); + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentComputeCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 0; + submit_info.pWaitSemaphores = nullptr; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 0; + submit_info.pSignalSemaphores = nullptr; + + vkQueueSubmit(m_device.GetComputeQueue(), 1, &submit_info, m_computeDoneFence); +} + +void EI_CommandContext::DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams) +{ + assert(drawParams.pIndexBuffer->m_ResourceType == EI_ResourceType::Buffer); + vkCmdBindIndexBuffer(commandBuffer, drawParams.pIndexBuffer->m_pBuffer->gpuBuffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pso.m_pipeline); + vkCmdDrawIndexed(commandBuffer, drawParams.numIndices, 1, 0, 0, 0); +} + +void EI_CommandContext::DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams) +{ + vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pso.m_pipeline); + vkCmdDraw(commandBuffer, drawParams.numVertices, drawParams.numInstances, 0, 0); +} + +void EI_CommandContext::PushConstants(EI_PSO * pso, int size, void * data) +{ + vkCmdPushConstants(commandBuffer, pso->m_pipelineLayout, VK_SHADER_STAGE_ALL, 0, size, data); +} + +void EI_Device::BeginNewCommandBuffer() +{ + assert(m_recording == false); + m_currentCommandBuffer.commandBuffer = m_commandListRing.GetNewCommandList(); + + VkCommandBufferBeginInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + vkBeginCommandBuffer(m_currentCommandBuffer.commandBuffer, &info); + m_recording = true; +} + +void EI_Device::BeginNewComputeCommandBuffer() +{ + m_currentComputeCommandBuffer.commandBuffer = m_computeCommandListRing.GetNewCommandList(); + + VkCommandBufferBeginInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + vkBeginCommandBuffer(m_currentComputeCommandBuffer.commandBuffer, &info); +} + +void EI_Device::EndAndSubmitCommandBuffer() +{ + vkEndCommandBuffer(m_currentCommandBuffer.commandBuffer); + + // Close & Submit the command list + VkSemaphore imageAvailableSemaphore; + VkSemaphore renderFinishedSemaphore; + VkFence cmdBufExecutedFence; + m_swapChain.GetSemaphores(&imageAvailableSemaphore, &renderFinishedSemaphore, &cmdBufExecutedFence); + m_lastFrameGraphicsCommandBufferFence = cmdBufExecutedFence; + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 0; + submit_info.pWaitSemaphores = NULL; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 0; + submit_info.pSignalSemaphores = NULL; + + vkQueueSubmit(m_device.GetGraphicsQueue(), 1, &submit_info, VK_NULL_HANDLE); + m_recording = false; +} + +void EI_Device::EndAndSubmitCommandBufferWithFences() +{ + vkEndCommandBuffer(m_currentCommandBuffer.commandBuffer); + + // Close & Submit the command list + VkSemaphore imageAvailableSemaphore; + VkSemaphore renderFinishedSemaphore; + VkFence cmdBufExecutedFence; + m_swapChain.GetSemaphores(&imageAvailableSemaphore, &renderFinishedSemaphore, &cmdBufExecutedFence); + m_lastFrameGraphicsCommandBufferFence = cmdBufExecutedFence; + + VkPipelineStageFlags submitWaitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + const VkCommandBuffer cmd_bufs[] = { m_currentCommandBuffer.commandBuffer }; + VkSubmitInfo submit_info; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.pNext = NULL; + submit_info.waitSemaphoreCount = 1; + submit_info.pWaitSemaphores = &imageAvailableSemaphore; + submit_info.pWaitDstStageMask = &submitWaitStage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = cmd_bufs; + submit_info.signalSemaphoreCount = 1; + submit_info.pSignalSemaphores = &renderFinishedSemaphore; + + vkQueueSubmit(m_device.GetGraphicsQueue(), 1, &submit_info, cmdBufExecutedFence); + m_recording = false; +} + +void EI_Device::BeginBackbufferRenderPass() +{ + // THIS FUNCTION SHOULD ONLY EVER BE CALLED ONCE PER FRAME AT THE END OF THE FRAME + // AS IT RELIES ON A BUNCH OF HARDCODED THINGS SETUP IN THE SWAP CHAIN OF CAULDRON'S + // INITIALIZATION + VkClearValue ClearValues[2]; + + // Setup clear values + ClearValues[0].color.float32[0] = 0.0f; + ClearValues[0].color.float32[1] = 0.0f; + ClearValues[0].color.float32[2] = 0.0f; + ClearValues[0].color.float32[3] = 0.0f; + ClearValues[1].depthStencil.depth = 1.0f; + ClearValues[1].depthStencil.stencil = 0; + + VkRenderPassBeginInfo rp_begin = {}; + rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rp_begin.pNext = NULL; + rp_begin.renderPass = m_swapChain.GetRenderPass(); + rp_begin.framebuffer = m_swapChain.GetFramebuffer(m_currentImageIndex); + rp_begin.renderArea.offset.x = 0; + rp_begin.renderArea.offset.y = 0; + rp_begin.renderArea.extent.width = m_width; + rp_begin.renderArea.extent.height = m_height; + rp_begin.pClearValues = ClearValues; + rp_begin.clearValueCount = 2; + vkCmdBeginRenderPass(m_currentCommandBuffer.commandBuffer, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); + + CAULDRON_VK::SetViewportAndScissor(m_currentCommandBuffer.commandBuffer, 0, 0, m_width, m_height); +} + +void EI_Device::EndRenderPass() +{ + vkCmdEndRenderPass(m_currentCommandBuffer.commandBuffer); +} + +void EI_Device::GetTimeStamp(char * name) +{ + m_gpuTimer.GetTimeStamp(m_currentCommandBuffer.commandBuffer, name); +} + +VkDescriptorSetLayoutBinding VulkanDescriptorSetBinding(int binding, EI_ShaderStage stage, EI_ResourceTypeEnum type) { + + VkDescriptorSetLayoutBinding b; + + b.stageFlags = VK_SHADER_STAGE_ALL; + switch (stage) { + case EI_VS: + b.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + break; + case EI_PS: + b.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + break; + case EI_CS: + b.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; + break; + case EI_ALL: + b.stageFlags = VK_SHADER_STAGE_ALL; + default: + b.stageFlags = VK_SHADER_STAGE_ALL; + } + b.binding = binding; + if (type == EI_RESOURCETYPE_BUFFER_RO || type == EI_RESOURCETYPE_BUFFER_RW) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + } + if (type == EI_RESOURCETYPE_IMAGE_RW) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; + } + if (type == EI_RESOURCETYPE_IMAGE_RO) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; + } + if (type == EI_RESOURCETYPE_UNIFORM ) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + } + if (type == EI_RESOURCETYPE_SAMPLER) + { + b.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; + } + b.descriptorCount = 1; + b.pImmutableSamplers = nullptr; + return b; +} + +std::unique_ptr EI_Device::CreateLayout(const EI_LayoutDescription& description) +{ + std::vector layoutBindings; + + EI_BindLayout* pLayout = new EI_BindLayout; + + int numResources = (int)description.resources.size(); + + for (int i = 0; i < numResources; ++i) + { + int binding = description.resources[i].binding; + if (binding >= 0) { + layoutBindings.push_back(VulkanDescriptorSetBinding(binding, description.stage, description.resources[i].type)); + } + } + + VkDescriptorSetLayoutCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + info.bindingCount = (uint32_t)layoutBindings.size(); + info.pBindings = layoutBindings.data(); + vkCreateDescriptorSetLayout(m_device.GetDevice(), &info, NULL, &pLayout->m_descriptorSetLayout); + + pLayout->layoutBindings = layoutBindings; + pLayout->description = description; + return std::unique_ptr(pLayout); +} + +EI_BindLayout::~EI_BindLayout() +{ + vkDestroyDescriptorSetLayout(GetDevice()->GetVulkanDevice(), m_descriptorSetLayout, NULL); +} + +void EI_Device::OnBeginFrame(bool bDoAsync) +{ + // Let our resource managers do some house keeping + m_computeCommandListRing.OnBeginFrame(); + m_constantBufferRing.OnBeginFrame(); + + // if a resize event already started a the command buffer - we need to do it this way, + // because multiple resizes in one frame could overflow the command buffer pool if we open a new + // command buffer everytime we resize + if (m_recording) + { + EndAndSubmitCommandBuffer(); + FlushGPU(); + } + BeginNewCommandBuffer(); + + if (bDoAsync) + BeginNewComputeCommandBuffer(); + + m_gpuTimer.OnBeginFrame(m_currentCommandBuffer.commandBuffer, &m_timeStamps); + + std::map timeStampMap; + for (int i = 0; i < (int)m_timeStamps.size() - 1; ++i) + { + timeStampMap[m_timeStamps[i + 1].m_label] += m_timeStamps[i + 1].m_microseconds - m_timeStamps[i].m_microseconds; + } + int i = 0; + m_sortedTimeStamps.resize(timeStampMap.size()); + for (std::map::iterator it = timeStampMap.begin(); it != timeStampMap.end(); ++it) + { + m_sortedTimeStamps[i].m_label = it->first; + m_sortedTimeStamps[i].m_microseconds = it->second; + ++i; + } + + if (m_timeStamps.size() > 0) + { + //scrolling data and average computing + static float values[128]; + values[127] = (float)(m_timeStamps.back().m_microseconds - m_timeStamps.front().m_microseconds); + float average = values[0]; + for (uint32_t i = 0; i < 128 - 1; i++) { values[i] = values[i + 1]; average += values[i]; } + average /= 128; + m_averageGpuTime = average; + } +} + +void EI_Device::OnEndFrame() +{ + EI_Barrier barrier[] = { + { m_colorBuffer.get(), EI_STATE_RENDER_TARGET, EI_STATE_SRV } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); + + WaitForLastFrameGraphics(); + EndAndSubmitCommandBuffer(); + + m_currentImageIndex = m_swapChain.WaitForSwapChain(); + + m_commandListRing.OnBeginFrame(); + + BeginNewCommandBuffer(); + BeginBackbufferRenderPass(); + + // Tonemapping ------------------------------------------------------------------------ + { + float exposure = 1.0f; + int toneMapper = 0; + m_toneMapping.Draw(GetCurrentCommandContext().commandBuffer, m_colorBuffer.get()->srv, exposure, toneMapper, true); + GetTimeStamp("Tone Mapping"); + } + + // Start by resolving render to swap chain + // Do UI render over top + RenderUI(); + + // Wrap up + EndRenderPass(); + + { + EI_Barrier barrier[] = { + { m_colorBuffer.get(), EI_STATE_SRV, EI_STATE_RENDER_TARGET } + }; + m_currentCommandBuffer.SubmitBarrier(AMD_ARRAY_SIZE(barrier), barrier); + } + + m_gpuTimer.OnEndFrame(); + EndAndSubmitCommandBufferWithFences(); + m_swapChain.Present(); +} + +void EI_Device::RenderUI() +{ + m_ImGUI.Draw(m_currentCommandBuffer.commandBuffer); +} + +static EI_Device * g_device = NULL; + +EI_Device * GetDevice() { + if (g_device == NULL) { + g_device = new EI_Device(); + } + return g_device; +} + +void EI_CommandContext::BindSets(EI_PSO * pso, int numBindSets, EI_BindSet ** bindSets) +{ + assert(numBindSets < 8); + VkDescriptorSet descSets[8]; + for (int i = 0; i < numBindSets; ++i) { + descSets[i] = bindSets[i]->m_descriptorSet; + } + + vkCmdBindDescriptorSets(commandBuffer, VulkanBindPoint(pso->m_bp), pso->m_pipelineLayout, 0, numBindSets, descSets, 0, NULL); +} + +VkAccessFlags VulkanAccessFlags(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_SRV: + return VK_ACCESS_SHADER_READ_BIT; + case EI_STATE_UAV: + return VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; + case EI_STATE_COPY_DEST: + return VK_ACCESS_TRANSFER_WRITE_BIT; + case EI_STATE_COPY_SOURCE: + return VK_ACCESS_TRANSFER_READ_BIT; + case EI_STATE_RENDER_TARGET: + return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; + case EI_STATE_DEPTH_STENCIL: + return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + case EI_STATE_INDEX_BUFFER: + return VK_ACCESS_INDEX_READ_BIT; + case EI_STATE_CONSTANT_BUFFER: + return VK_ACCESS_SHADER_READ_BIT; + default: + assert(0); + return 0; + } +} + +EI_Resource::EI_Resource() : + m_ResourceType(EI_ResourceType::Undefined), + m_pBuffer(nullptr) +{ +} + +EI_Resource::~EI_Resource() +{ + if (m_ResourceType == EI_ResourceType::Buffer && m_pBuffer != nullptr) + { + m_pBuffer->Free(); + delete m_pBuffer; + } + else if (m_ResourceType == EI_ResourceType::Texture) + { + m_pTexture->OnDestroy(); + delete m_pTexture; + } + else if (m_ResourceType == EI_ResourceType::Sampler) + { + vkDestroySampler(GetDevice()->GetCauldronDevice()->GetDevice(), *m_pSampler, nullptr); + delete m_pSampler; + } + else + { + assert(false && "Trying to destroy an undefined resource"); + } +} + +VkImageLayout VulkanImageLayout(EI_ResourceState state) +{ + switch (state) + { + case EI_STATE_SRV: + return VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + case EI_STATE_UAV: + return VK_IMAGE_LAYOUT_GENERAL; + case EI_STATE_COPY_DEST: + return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + case EI_STATE_COPY_SOURCE: + return VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + case EI_STATE_RENDER_TARGET: + return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + case EI_STATE_DEPTH_STENCIL: + return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + case EI_STATE_UNDEFINED: + default: + return VK_IMAGE_LAYOUT_UNDEFINED; + } +} + +void EI_CommandContext::SubmitBarrier(int numBarriers, EI_Barrier * barriers) +{ + assert(numBarriers < 16); + VkBufferMemoryBarrier bb[16]; + VkImageMemoryBarrier ib[16]; + int numBufferBarriers = 0; + int numImageBarriers = 0; + for (int i = 0; i < numBarriers; ++i) + { + if (barriers[i].pResource->m_ResourceType == EI_ResourceType::Buffer) + { + bb[numBufferBarriers] = {}; + bb[numBufferBarriers].sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; + bb[numBufferBarriers].buffer = barriers[i].pResource->m_pBuffer->gpuBuffer; + bb[numBufferBarriers].srcAccessMask = VulkanAccessFlags(barriers[i].from); + bb[numBufferBarriers].dstAccessMask = VulkanAccessFlags(barriers[i].to); + bb[numBufferBarriers].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + bb[numBufferBarriers].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + bb[numBufferBarriers].offset = 0; + bb[numBufferBarriers].size = barriers[i].pResource->m_pBuffer->totalMemSize; + numBufferBarriers++; + } + else { + assert(barriers[i].pResource->m_ResourceType == EI_ResourceType::Texture); + ib[numImageBarriers] = {}; + ib[numImageBarriers].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + ib[numImageBarriers].image = barriers[i].pResource->m_pTexture->Resource(); + + // Resources NEED to be created as undefined, but we need to transition them out to actually use them + if (barriers[i].from == EI_STATE_UNDEFINED) + ib[numImageBarriers].srcAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; // VulkanAccessFlags(barriers[i].from); + else + ib[numImageBarriers].srcAccessMask = VulkanAccessFlags(barriers[i].from); + + ib[numImageBarriers].dstAccessMask = VulkanAccessFlags(barriers[i].to); + ib[numImageBarriers].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + ib[numImageBarriers].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + ib[numImageBarriers].oldLayout = VulkanImageLayout(barriers[i].from); + ib[numImageBarriers].newLayout = VulkanImageLayout(barriers[i].to); + + bool isDepthImage = barriers[i].pResource->m_pTexture->GetFormat() == VK_FORMAT_D32_SFLOAT; + + VkImageSubresourceRange subresourceRange = {}; + subresourceRange.aspectMask = isDepthImage ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + subresourceRange.baseMipLevel = 0; + subresourceRange.levelCount = 1; + subresourceRange.layerCount = barriers[i].pResource->m_pTexture->GetArraySize(); + + ib[numImageBarriers].subresourceRange = subresourceRange; + numImageBarriers++; + } + } + vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, numBufferBarriers, bb, numImageBarriers, ib); +} + +void EI_CommandContext::BindPSO( EI_PSO * pso) +{ + vkCmdBindPipeline(commandBuffer, VulkanBindPoint(pso->m_bp), pso->m_pipeline); +} + +void EI_CommandContext::Dispatch(int numGroups) +{ + vkCmdDispatch(commandBuffer, numGroups, 1, 1); +} + +void EI_CommandContext::UpdateBuffer(EI_Resource * res, void * data) +{ + assert(res->m_ResourceType == EI_ResourceType::Buffer); + memcpy(res->m_pBuffer->cpuMappedMemory, data, res->m_pBuffer->totalMemSize); + VkBufferCopy region; + region.srcOffset = 0; + region.dstOffset = 0; + region.size = res->m_pBuffer->totalMemSize; + + vkCmdCopyBuffer(commandBuffer, res->m_pBuffer->cpuBuffer, res->m_pBuffer->gpuBuffer, 1, ®ion); +} + +void EI_CommandContext::ClearUint32Image(EI_Resource* res, uint32_t value) +{ + assert(res->m_ResourceType == EI_ResourceType::Texture); + VkClearColorValue clearValue; + clearValue.uint32[0] = value; + clearValue.uint32[1] = value; + clearValue.uint32[2] = value; + clearValue.uint32[3] = value; + VkImageSubresourceRange range; + range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + range.baseArrayLayer = 0; + range.baseMipLevel = 0; + range.layerCount = res->m_pTexture->GetArraySize(); + range.levelCount = 1; + vkCmdClearColorImage(commandBuffer, res->m_pTexture->Resource(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue, 1, &range); +} + +void EI_CommandContext::ClearFloat32Image(EI_Resource* res, float value) +{ + assert(res->m_ResourceType == EI_ResourceType::Texture); + VkClearColorValue clearValue; + clearValue.float32[0] = value; + clearValue.float32[1] = value; + clearValue.float32[2] = value; + clearValue.float32[3] = value; + VkImageSubresourceRange range; + range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + range.baseArrayLayer = 0; + range.baseMipLevel = 0; + range.layerCount = res->m_pTexture->GetArraySize(); + range.levelCount = 1; + vkCmdClearColorImage(commandBuffer, res->m_pTexture->Resource(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearValue, 1, &range); +} diff --git a/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h new file mode 100644 index 0000000000..23dc06609c --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/VK/VKEngineInterfaceImpl.h @@ -0,0 +1,305 @@ +// Copyright(c) 2019 Advanced Micro Devices, Inc.All rights reserved. +// 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. + +#ifndef VKRENDERER_H +#define VKRENDERER_H + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include +// C RunTime Header Files +#include +#include +#include +#include +#include +#include + +#include "Base/Device.h" +#include "Base/SwapChain.h" +#include "Base/Texture.h" +#include "Base/StaticBufferPool.h" +#include "Base/DynamicBufferRing.h" +#include "Base/CommandListRing.h" +#include "Base/GPUTimestamps.h" +#include "Base/Imgui.h" +#include "Base/ExtDebugMarkers.h" + +#include "PostProc/Tonemapping.h" + +#include "EngineInterface.h" +#include "TressFXCommon.h" + +#define USE_VID_MEM true + +typedef VkFormat EI_ResourceFormat; + +class EI_BindSet +{ +public: + ~EI_BindSet(); + VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE; +}; + +class EI_CommandContext +{ +public: + void SubmitBarrier(int numBarriers, EI_Barrier * barriers); + void BindPSO(EI_PSO * pso); + void BindSets(EI_PSO * pso, int numBindSets, EI_BindSet ** bindSets); + void Dispatch(int numGroups); + void UpdateBuffer(EI_Resource * res, void * data); + void ClearUint32Image(EI_Resource* res, uint32_t value); + void ClearFloat32Image(EI_Resource* res, float value); + void DrawIndexedInstanced(EI_PSO& pso, EI_IndexedDrawParams& drawParams); + void DrawInstanced(EI_PSO& pso, EI_DrawParams& drawParams); + void PushConstants(EI_PSO * pso, int size, void * data); + VkCommandBuffer commandBuffer = VK_NULL_HANDLE; +}; + +namespace CAULDRON_VK +{ + class GLTFTexturesAndBuffers; + class GltfPbrPass; + class GltfDepthPass; +} + +typedef CAULDRON_VK::GLTFTexturesAndBuffers EI_GLTFTexturesAndBuffers; +typedef CAULDRON_VK::GltfPbrPass EI_GltfPbrPass; +typedef CAULDRON_VK::GltfDepthPass EI_GltfDepthPass; + +struct EI_RenderTargetSet; +class GLTFCommon; + +class EI_Marker +{ +public: + EI_Marker(EI_CommandContext& ctx, char * string) : m_ctx(ctx) + { + CAULDRON_VK::SetPerfMarkerBegin(ctx.commandBuffer, string); + } + ~EI_Marker() + { + CAULDRON_VK::SetPerfMarkerEnd(m_ctx.commandBuffer); + } +private: + EI_CommandContext& m_ctx; +}; + +class EI_Device +{ +public: + EI_Device(); + ~EI_Device(); + // interface + EI_CommandContext& GetCurrentCommandContext() { return m_currentCommandBuffer; } + std::unique_ptr CreateBufferResource(const int structSize, const int structCount, const unsigned int flags, const char* name); + std::unique_ptr CreateUint32Resource(const int width, const int height, const size_t arraySize, const char* name, uint32_t ClearValue = 0); + std::unique_ptr CreateRenderTargetResource(const int width, const int height, const size_t channels, const size_t channelSize, const char* name, AMD::float4* ClearValues = nullptr); + std::unique_ptr CreateDepthResource(const int width, const int height, const char* name); + std::unique_ptr CreateResourceFromFile(const char* szFilename, bool useSRGB = false); + std::unique_ptr CreateSampler(EI_Filter MinFilter, EI_Filter MaxFilter, EI_Filter MipFilter, EI_AddressMode AddressMode); + + std::unique_ptr CreateLayout(const EI_LayoutDescription& description); + + std::unique_ptr CreateBindSet(EI_BindLayout * layout, EI_BindSetDescription& bindSet); + + std::unique_ptr CreateRenderTargetSet(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + std::unique_ptr CreateRenderTargetSet(const EI_Resource** pResourcesArray, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams, float* clearValues); + + std::unique_ptr CreateGLTFTexturesAndBuffers(GLTFCommon* pGLTFCommon); + std::unique_ptr CreateGLTFPbrPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + std::unique_ptr CreateGLTFDepthPass(EI_GLTFTexturesAndBuffers* pGLTFTexturesAndBuffers, EI_RenderTargetSet* renderTargetSet); + + void BeginRenderPass(EI_CommandContext& commandContext, const EI_RenderTargetSet* pRenderPassSet, const wchar_t* pPassName, uint32_t width = 0, uint32_t height = 0); + void EndRenderPass(EI_CommandContext& commandContext); + void SetViewportAndScissor(EI_CommandContext& commandContext, uint32_t topX, uint32_t topY, uint32_t width, uint32_t height); + + std::unique_ptr CreateComputeShaderPSO(const char * shaderName, const char * entryPoint, EI_BindLayout ** layouts, int numLayouts); + std::unique_ptr CreateGraphicsPSO(const char * vertexShaderName, const char * vertexEntryPoint, const char * fragmentShaderName, const char * fragmentEntryPoint, EI_PSOParams& psoParams); + + /* async compute */ + EI_CommandContext& GetComputeCommandContext() { return m_currentComputeCommandBuffer; } + void WaitForCompute(); + void SignalComputeStart(); + void WaitForLastFrameGraphics(); + void SubmitComputeCommandList(); + /* /async compute */ + + // internals + void OnCreate(HWND hWnd, uint32_t numBackBuffers, bool enableValidation, const char* appName); + void OnResize(uint32_t width, uint32_t height); + void SetVSync(bool vSync) { m_vSync = vSync; } + void FlushGPU() { m_device.GPUFlush(); } + void OnDestroy(); + void OnBeginFrame(bool bDoAsync); + void OnEndFrame(); + void BeginNewCommandBuffer(); + void BeginNewComputeCommandBuffer(); + void BeginBackbufferRenderPass(); + void EndRenderPass(); + void RenderUI(); + + CAULDRON_VK::Device* GetCauldronDevice() { return &m_device; } + VkRenderPass GetSwapChainRenderPass() { return m_swapChain.GetRenderPass(); } + + CAULDRON_VK::UploadHeap* GetUploadHeap() { return &m_uploadHeap; } + CAULDRON_VK::StaticBufferPool* GetVidMemBufferPool() { return &m_vidMemBufferPool; } + CAULDRON_VK::DynamicBufferRing* GetConstantBufferRing() { return &m_constantBufferRing; } + + // Find a better place to put this ... + EI_Resource* GetDepthBufferResource() { return m_depthBuffer.get(); } + EI_ResourceFormat GetDepthBufferFormat() { return VK_FORMAT_D32_SFLOAT; } + EI_Resource* GetColorBufferResource() { return m_colorBuffer.get(); } + EI_ResourceFormat GetColorBufferFormat() { return VK_FORMAT_R8G8B8A8_SRGB; } + EI_Resource* GetShadowBufferResource() { return m_shadowBuffer.get(); } + EI_ResourceFormat GetShadowBufferFormat() { return GetDepthBufferFormat(); } + EI_Resource* GetDefaultWhiteTexture() { return m_DefaultWhiteTexture.get(); } + EI_BindSet* GetSamplerBindSet() { return m_pSamplerBindSet.get(); } + + // for the client code to set timestamps + void GetTimeStamp(char * name); + int GetNumTimeStamps() { return (int)m_sortedTimeStamps.size(); } + const char* GetTimeStampName(const int i) { return m_sortedTimeStamps[i].m_label.c_str(); } + int GetTimeStampValue(const int i) { return (int)m_sortedTimeStamps[i].m_microseconds; } + void DrawFullScreenQuad(EI_CommandContext& commandContext, EI_PSO& pso, EI_BindSet** bindSets, uint32_t numBindSets); + float GetAverageGpuTime() const { return m_averageGpuTime; } + + // only to call by implementation internals + VkDevice GetVulkanDevice() { return m_device.GetDevice(); } + CAULDRON_VK::ResourceViewHeaps* GetResourceViewHeaps() { return &m_resourceViewHeaps; } + void EndAndSubmitCommandBuffer(); +private: + VkRenderPass CreateRenderPass(const EI_ResourceFormat* pResourceFormats, const uint32_t numResources, const EI_AttachmentParams* AttachmentParams); + + void EndAndSubmitCommandBufferWithFences(); + CAULDRON_VK::Device m_device; + CAULDRON_VK::SwapChain m_swapChain; + int m_currentImageIndex; + + // We need to be able to get access to the depth buffer from within the demo + // so store as an agnostic resource. We will also store a color target for all our sample's works + std::unique_ptr m_depthBuffer; + std::unique_ptr m_colorBuffer; + std::unique_ptr m_shadowBuffer; + + // Default resource to use when a resource is missing + std::unique_ptr m_DefaultWhiteTexture; + + std::unique_ptr m_pEndFrameResolveBindLayout = nullptr; + std::unique_ptr m_pEndFrameResolveBindSet = nullptr; + std::unique_ptr m_pSamplerBindSet = nullptr; + std::unique_ptr m_pEndFrameResolvePSO = nullptr; + std::unique_ptr m_pFullscreenIndexBuffer; + + int m_width; + int m_height; + bool m_vSync = false; + + bool m_recording = false; + + CAULDRON_VK::ToneMapping m_toneMapping; + + // vulkan specific imgui stuff + CAULDRON_VK::ImGUI m_ImGUI; + + // resource allocators + CAULDRON_VK::ResourceViewHeaps m_resourceViewHeaps; + CAULDRON_VK::UploadHeap m_uploadHeap; + CAULDRON_VK::StaticBufferPool m_vidMemBufferPool; + CAULDRON_VK::StaticBufferPool m_sysMemBufferPool; + CAULDRON_VK::DynamicBufferRing m_constantBufferRing; // "dynamic" uniform buffers + CAULDRON_VK::CommandListRing m_commandListRing; + + CAULDRON_VK::GPUTimestamps m_gpuTimer; + std::vector m_timeStamps; + std::vector m_sortedTimeStamps; + float m_averageGpuTime; + + EI_CommandContext m_currentCommandBuffer; + + // async compute + CAULDRON_VK::CommandListRing m_computeCommandListRing; + EI_CommandContext m_currentComputeCommandBuffer; + VkFence m_computeDoneFence = VK_NULL_HANDLE; + VkFence m_lastFrameGraphicsCommandBufferFence = VK_NULL_HANDLE; + + std::unique_ptr m_LinearWrapSampler; +}; + +struct VulkanBuffer; + +class EI_Resource +{ +public: + // need this for automatic destruction + EI_Resource(); + ~EI_Resource(); + + int GetHeight() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetHeight() : 0; } + int GetWidth() const { return m_ResourceType == EI_ResourceType::Texture ? m_pTexture->GetWidth() : 0; } + + EI_ResourceType m_ResourceType = EI_ResourceType::Undefined; + + union + { + VulkanBuffer* m_pBuffer; + CAULDRON_VK::Texture* m_pTexture; + VkSampler* m_pSampler; + }; + + VkImageView srv = VK_NULL_HANDLE; + VkImageView rtv = VK_NULL_HANDLE; // This can be both RTV/DSV on Vulkan +private: +}; + +struct EI_BindLayout +{ + ~EI_BindLayout(); + + EI_LayoutDescription description; + std::vector layoutBindings; + VkDescriptorSetLayout m_descriptorSetLayout = VK_NULL_HANDLE; +}; + +const static int MaxRenderAttachments = 5; +struct EI_RenderTargetSet +{ + ~EI_RenderTargetSet(); + void SetResources(const EI_Resource** pResourcesArray); + + VkRenderPass m_RenderPass = VK_NULL_HANDLE; + VkFramebuffer m_FrameBuffer = VK_NULL_HANDLE; + VkClearValue m_ClearValues[MaxRenderAttachments]; + uint32_t m_NumResources = 0; +}; + +class EI_PSO +{ +public: + ~EI_PSO(); + + VkPipeline m_pipeline = VK_NULL_HANDLE; + VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE; + EI_BindPoint m_bp; +}; + +EI_Device * GetDevice(); + +#endif \ No newline at end of file diff --git a/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt b/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt new file mode 100644 index 0000000000..f7d8130bc4 --- /dev/null +++ b/Gems/AtomTressFX/External/Code/src/org_CMakeLists_org.txt @@ -0,0 +1,78 @@ +project (TressFX_${GFX_API}) + +add_subdirectory(Math) +add_subdirectory(TressFX) + +if(GFX_API STREQUAL DX12) + add_compile_definitions(TRESSFX_DX12) + add_subdirectory(DX12) +elseif(GFX_API STREQUAL VK) + add_compile_definitions(TRESSFX_VK) + find_package(Vulkan REQUIRED) + add_subdirectory(VK) +else() + message(STATUS "----------------------------------------------------------------------------------------") + message(STATUS "") + message(STATUS "** Almost there!!") + message(STATUS "") + message(STATUS " This framework supports DX12 or VULKAN, you need to invoke cmake in one of these ways:") + message(STATUS "") + message(STATUS " Examples:") + message(STATUS " cmake -DGFX_API=DX12") + message(STATUS " cmake -DGFX_API=VK") + message(STATUS "") + message(STATUS "----------------------------------------------------------------------------------------") + message(FATAL_ERROR "") +endif() + +set(common_sources + EngineInterface.h + SceneGLTFImpl.cpp + SceneGLTFImpl.h + TressFXSample.cpp + TressFXSample.h + Simulation.cpp + Simulation.h + HairStrands.cpp + HairStrands.h + SDF.cpp + SDF.h) + + + +set(shaders_sources + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/FullScreenRender.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXPPLL.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXLighting.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXRendering.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXSDFCollision.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXShadow.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXShortCut.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXSimulation.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXStrands.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXBoneSkinning.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXMarchingCubes.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/TressFXUtilities.hlsl) + +source_group("Math Sources" FILES ${math_sources}) +source_group("TressFX Sources" FILES ${tressfx_sources}) +source_group("Common Sources" FILES ${common_sources}) +source_group("${GFX_API} Sources" FILES ${sources}) +source_group("Shader Sources" FILES ${shaders_sources}) + +add_executable(${PROJECT_NAME} WIN32 ${sources} ${common_sources} ${tressfx_sources} ${math_sources} ${shaders_sources}) + +if(GFX_API STREQUAL DX12) + target_link_libraries (${PROJECT_NAME} LINK_PUBLIC Framework_${GFX_API} ImGUI amd_ags DXC d3dcompiler D3D12) +elseif(GFX_API STREQUAL VK) + target_link_libraries (${PROJECT_NAME} LINK_PUBLIC Framework_${GFX_API} ImGUI Vulkan::Vulkan) +endif() + +set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin") + +if(GFX_API STREQUAL DX12) + copyCommand("${shaders_sources}" ${CMAKE_HOME_DIRECTORY}/bin/ShaderLibDX) +elseif(GFX_API STREQUAL VK) + copyCommand("${shaders_sources}" ${CMAKE_HOME_DIRECTORY}/bin/ShaderLibVK) +endif() + diff --git a/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py b/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py new file mode 100644 index 0000000000..cffabcda47 --- /dev/null +++ b/Gems/AtomTressFX/External/Tools/Maya/TressFX_Exporter.py @@ -0,0 +1,2084 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +#------------------------------------------------------------------------------------- +# +# Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. +# +# 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. +# +#------------------------------------------------------------------------------------- +# +# 1. Copy tressFX_Exporter.py into Maya plug-in path. The easy place would be C:\Users\YOUR_USER_NAME\Documents\maya\plug-ins\ +# 2. If you want to install TressFX menu, go to Windows->Plug-in Managers menu and check Loaded and Auto load for TressFX_Exporter.py. +# 3. Then TressFX menu would appear in the top menu bar. +# 4. Within it, there should be export menu item. Click it and it will bring up TressFX Exporter window. +# 5. Alternatively, without loading TressFX plugin in Plug-in Managers, you can simply run the following python script commands in Script Editor +# and bring up TressFX Exporter window. +# +# import TressFX_Exporter +# reload(TressFX_Exporter) +# TressFX_Exporter.UI() +# +# Or, it's easy to run this method for loading from a script, from python (python tab of script editor) +# +# Following is a script to unload and load this plugin. It may be useful to reload the plugin quickly during the development. +# import maya.cmds as cmds +# cmds.unloadPlugin('TressFX_Exporter.py') +# cmds.loadPlugin('TressFX_Exporter.py') + +from functools import partial +import maya.cmds as cmds +import maya.OpenMaya as OpenMaya +import maya.OpenMayaAnim as OpenMayaAnim +import maya.OpenMayaMPx as OpenMayaMPx +import maya.mel as mel +import pymel.core as pymel +import ctypes +import random +import sys +import re +from maya.OpenMaya import MIntArray, MDagPathArray + + +selected_mesh_shape_name = '' +joint_sel_list_names = [] +singleItemGroup_Select = '' +customRootGroup_Select = '' +jointSubsetGroup_Select = '' +hairTab_Select_Joints = '' +hairTab_Custom_Root = '' +defaultJointRootIndex = 0 +defaultJointRootWeight = 0.0 +customUVRange_Select = '' +customUVRange_Values = '' + +tressfx_exporter_version = '4.1.23' + +# Don't change the following maximum joints per vertex value. It must match the one in TressFX loader and simulation +TRESSFX_MAX_INFLUENTIAL_BONE_COUNT = 4 + + +import TressFX_Exporter + +bReload = True +if(bReload): + reload(TressFX_Exporter) + +def InstallShelf(): + #---------------------- + # Add a shelf + #---------------------- + shelfName = "TressFX" + + layout = mel.eval('$tmp=$gShelfTopLevel') + + if cmds.shelfLayout(shelfName, query=True, exists=True): # If the shelf exists, delete buttons and delete shelf + for buttons in cmds.shelfLayout(shelfName, query=True, childArray=True) or []: + cmds.deleteUI(buttons) + + cmds.setParent(layout + '|' + shelfName) + else: # If the shelf doesn't exist, create a new one + cmds.setParent(layout) + cmds.shelfLayout(shelfName) + + # create a button + cmds.shelfButton( label='Export', + command='import TressFX_Exporter\nTressFX_Exporter.UI()', + #command='TressFX_Exporter.UI()', + sourceType='python', + annotation='Launch TressFX exporter', + #image='', # This empty icon image will cause a warning message like 'Pixmap file not found, using default.'. + style='textOnly') + + +def initializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject, "TressFX", tressfx_exporter_version, "Any") + + # install menu + gMainWindow = mel.eval('$temp1=$gMainWindow') + + if cmds.menu('TressFX', exists=True): + cmds.deleteUI('TressFX') + + tressfx_top_menu = cmds.menu('TressFX', parent=gMainWindow, tearOff=False, label='TressFX') + cmds.menuItem(parent = tressfx_top_menu, + label='Export Hair/Fur', + command = 'import TressFX_Exporter\nTressFX_Exporter.UI()') + cmds.menuItem(parent = tressfx_top_menu, + label='Export Collision Mesh', + command = 'import TressFX_Exporter\nTressFX_Exporter.CollisionUI()') + # install shelf + #InstallShelf() + +def uninitializePlugin(mobject): + mplugin = OpenMayaMPx.MFnPlugin(mobject) + try: + # Close TressFX plugin windows if it is already open. + if cmds.window("TressFXExporterUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + + if cmds.window("TressFXCollisionMeshUI", exists = True): + cmds.deleteUI("TressFXCollisionMeshUI") + + # uninstall menu + if cmds.menu('TressFX', exists=True): + cmds.deleteUI('TressFX') + + except: + sys.stderr.write("Failed to uninitialize TressFX plugin") + raise + + return + +# Helper class to show progress bar for lengthy process +class ProgressBar: + def __init__ (self,title,steps): + self.window = pymel.window(title, sizeable=False) + pymel.columnLayout() + + self.progressControls = [] + self.progressbar = pymel.progressBar(maxValue=steps, width=300) + pymel.showWindow( self.window ) + self.progressbar.step(0) + + def Kill(self): + pymel.deleteUI(self.window) + + def Increment(self): + self.progressbar.step(1) + +def GetAllDAGObjects(mFnType, maxDepth = 1): + #dagIterator = OpenMaya.MItDag( OpenMaya.MItDag.kBreadthFirst, OpenMaya.MFn.kJoint ) #could use kBreadthFirst to find top of each 'type' (curve, bones, xgen) + dagIterator = OpenMaya.MItDag( OpenMaya.MItDag.kBreadthFirst, mFnType ) #could use kBreadthFirst to find top of each 'type' (curve, bones, xgen) + + #todo: Notes for making it easier to use Xgen directly + # kJoint + #kNurbsCurve (parent is kTransform) + #kTransform for mesh (like sphere, and shpae is kPluginShape but not helpful since xgGuides are kTransform and kPluginShape too!) + #and xgen collection is kPluginTransformNode (depth1), description is kTransform again + #and the other sub items are both kTransform + # Will need to find better way to identify xgen, mesh/skinclusters, for joints + #perhaps joints have connection?? + + # This reference to the MFnDagNode function set will be needed + # to obtain information about the DAG objects. + dagNodeFn = OpenMaya.MFnDagNode() + + listOfDagNodes = [] + # Traverse the scene. + while( not dagIterator.isDone() ): + + # Obtain the current item. + dagObject = dagIterator.currentItem() + + # Extract the depth of the DAG object. + depth = dagIterator.depth() + + if depth > maxDepth: + return listOfDagNodes + else: + listOfDagNodes.append(dagObject) + + # Make our MFnDagNode function set operate on the current DAG object. + dagNodeFn.setObject( dagObject ) + + # Extract the DAG object's name. + name = dagNodeFn.name() + + #print name + ' (' + dagObject.apiTypeStr() + ') depth: ' + str( depth ) + + # Iterate to the next item. + dagIterator.next() + + return listOfDagNodes + +def GetNurbCurvesByGroup(): + return GetAllDAGObjects(OpenMaya.MFn.kNurbsCurve, 4) + +def GetAvailableRigs(): + return GetAllDAGObjects(OpenMaya.MFn.kJoint, 1) + +def GetSkinClustersByRig(): + return + +#currently undefined. Maya doesn't seem to have a python api for getting to the +#Utilities (tab) of Xgen, or rendering. both are needed to render out guides, +# then convert guides to nurbs curves. +#def GetXGenGroups(): +# return + +def GetSkinClusterInfluenceObjectsNames(): + #------------------------- + # Get skin cluster object + #------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: Cannot retrieve skin cluster, base mesh must be set.\n") + return + + skinClusterName = '' + skinClusters = cmds.listHistory(selected_mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ selected_mesh_shape_name) + return + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + skInfluenceNames = [] + + # get joint names + for i in range(dagPaths.length()): + influenceName = dagPaths[i].partialPathName() + skInfluenceNames.append(influenceName) #we want the partial path, even if it includes NS here (for comparision with user selected list) + + return skInfluenceNames + + +def UI(): + # prevents multiple windows + if cmds.window("TressFXExporterUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + global joint_sel_list_names + joint_sel_list_names = [] #clear joint list, can't guarantee clear() method will be present (need python 3.3 minimum) + + window_width = 550 + window_height = 525 + + windowTitle = 'TressFX Hair/Fur' + window = cmds.window("TressFXExporterUI", title = windowTitle, w=window_width, h = window_height, mnb=False, sizeable=False) + + mainLayout = cmds.columnLayout(columnAlign = 'center') # In case you want to see the area of the main layout, use backgroundColor = (1, 1, 1) as an argument + #cmds.separator(h=10) + mainTabs = cmds.tabLayout(imw = 5, imh = 5) + + #cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,10),(2,window_width-10) ]) + #cmds.separator(style='none', width=10) + + hairTab_SelectTarget = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + hairTab_SetOptions = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + hairTab_Export = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,300),(2,10),(3,170) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = mainTabs ) + cmds.tabLayout( mainTabs, edit=True, tabLabel=((hairTab_SelectTarget, 'Select Hair/Mesh/Rig'), (hairTab_SetOptions, 'Choose Options'), (hairTab_Export, 'Export Files')) ) + +#Selection tab items - selecting the rig, xgen, curves, skincluster/meshes + cmds.setParent(hairTab_SelectTarget) + global singleItemGroup_Select + singleItemGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = hairTab_SelectTarget) + + cmds.separator(style='none',h=50) + cmds.button(label="Set the base mesh", w=200, h=25, command=SetBaseMesh) + cmds.separator(style='none',h=20) + cmds.textField("MeshNameLabel", w=200, editable=False) + + cmds.separator(style='none',h=10) + global customRootGroup_Select + customRootGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Select) + cmds.checkBox("UseCustomJointRootLabel", label='Use Custom Joint Root', align='left', enable=False, changeCommand=UseCustomJointRoot, parent = customRootGroup_Select ) + + cmds.separator(style='none',h=10) #renormalize so weights add up to one + cmds.checkBox("RenormalizeFinalPairs", label='Re-Normalize Final Weights (sumMaxInfluences=1)', align='left', enable=False) + + cmds.separator(style='none',h=10) + global jointSubsetGroup_Select + jointSubsetGroup_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Select) + cmds.checkBox("UseJointSubsetLabel", label='Use Joints Subset Only', align='left', enable=False, changeCommand=UseJointSubset, parent = jointSubsetGroup_Select ) + + cmds.separator(style='none',h=10) + + +#Options tab items - vertices per strand, sampling, random, unreal/directx/special formats + #cmds.intField("numVerticesPerStrand", w=30, minValue=4, maxValue=64, value=16 ) + cmds.setParent(hairTab_SetOptions) + + cmds.separator(style='none',h=50) + cmds.separator(style='none',h=50) + cmds.separator(style='none',h=50) + + cmds.text(label='Number of vertices per strand:', align='left', parent = hairTab_SetOptions) + cmds.separator(style='none', width=10) + + cmds.optionMenu("numberOfStrandsOptionMenu", label='') + cmds.menuItem(label='4') + cmds.menuItem(label='8') + cmds.menuItem(label='16') + cmds.menuItem(label='32') + cmds.menuItem(label='64') + + cmds.text(label='Minimum curve length:', align='left') + cmds.separator(style='none',h=30) + cmds.floatField("minCurveLength", minValue=0, value=0, w=70) + + cmds.text(label='Sample every N curves:', align='left') + cmds.separator(style='none', width=10) + cmds.optionMenu("samplingOptionMenu", label='') + cmds.menuItem(label='1') + cmds.menuItem(label='2') + cmds.menuItem(label='4') + cmds.menuItem(label='8') + cmds.menuItem(label='16') + cmds.menuItem(label='32') + cmds.menuItem(label='64') + cmds.menuItem(label='128') + + cmds.text(label='Sample start offset[0-32]:', align='left') + cmds.separator(style='none',h=30) + cmds.intField("curveOffset", w=70, minValue=0, maxValue=32, value=0 ) + + cmds.text(label='Scale Scene:', align='left') + cmds.separator(style='none', width=10) + cmds.optionMenu('scalingOptionMenu', label='') #TressFX does not know about the auto-scaling an engine might do (such as FBX cm->m) but you can manually set scaling here to adjust for what the engine will want + cmds.menuItem(label='0.001') + cmds.menuItem(label='0.01') + cmds.menuItem(label='0.1') + cmds.menuItem(label='1.0') + cmds.menuItem(label='10.0') + cmds.menuItem(label='100.0') + cmds.menuItem(label='1000.0') + cmds.optionMenu('scalingOptionMenu', edit=True, value='1.0') + + singleItemGroup_Options = cmds.columnLayout(columnAlign = 'center', parent = hairTab_SetOptions) + + cmds.separator(style='none',h=50) + cmds.checkBox("bothEndsImmovable", label='Both ends immovable') + cmds.separator (style='none', width=10) + cmds.checkBox("InvertZ", label='Invert Z-axis of Hairs', value = False) + cmds.checkBox("randomStrandCheckBox", label='Randomize strands for LOD', value = False) + + + cmds.separator(style='none',h=30) + cmds.text(label='Unreal 4.x Options', align='center') + cmds.checkBox("useZUp", label='Make Z-Up Direction', value = True) #if user requests z-up, and maya not using Z (but Y as up), will swap y and z coordinates of point + + cmds.separator(style='none',h=30) + cmds.text(label='DirectX 11/12 Options', align='center') + cmds.checkBox("InvertYForUVs", label='Invert Y-axis of UV coordinates', value = True, changeCommand=AllowCustomUV ) + global customUVRange_Select + customUVRange_Select = cmds.columnLayout(columnAlign = 'center', parent = singleItemGroup_Options) + cmds.checkBox("useNonUniformUVRange", label='Using Non-Uniform UV Range', value = False, align='left', enable=True, changeCommand=UseCustomUV, parent = customUVRange_Select ) + cmds.separator(style='none',h=10) + + +#Export Specific Items + cmds.setParent(hairTab_Export) + singleItemGroup_Export = cmds.columnLayout(columnAlign = 'center', parent = hairTab_Export) + + cmds.separator(style='none',h=50) + cmds.text(label='Export (TressFX 4.x)', align='center') + cmds.checkBox("exportHairCheckBox", label='Export hair data (*.tfx)', value = True) + cmds.checkBox("exportBoneCheckBox", label='Export bone data (*.tfxbone)', value = True) + + cmds.separator(style='none',h=30) + + cmds.text(label='ErrorMode (TressFX 4.x)', align='center') + cmds.checkBox("ignoreUVErrorsCheckBox", label='ignore TFX UVcoord Errors', value = True) + cmds.checkBox("removeNamespace", label='remove Namespace from bones', value = True) #key when importing one .ma/.mb into another + + cmds.separator(style='none',h=30) + + cmds.text(label='Export (TressFX 3.0, deprecated)', align='center') + cmds.checkBox("exportSkinCheckBox", label='Export skin data (*.tfxskin)', value = False) + + cmds.separator(style='none',h=30) + cmds.button(label="Export!", w=300, h=50, command=DoExport) + + #cmds.separator(style='none',h=15) + #cmds.button(label="Export collision mesh", w=170, h=30, command=DoExportCollisionMesh) + + #cmds.button(label="Goto Bind Pose", w=220, h=30, command=GotoBindPose) + + cmds.separator(h=20) + + cmds.setParent(mainLayout) + version_text = 'v' + tressfx_exporter_version + cmds.text(label=version_text, width=window_width-25, align='right') + + cmds.separator(style='none',h=20) + + + global selected_mesh_shape_name + selected_mesh_shape_name = '' + + cmds.showWindow(window) + + # After showWindow, resize the window to enforce its size. This is a workaround of Maya's bug. + cmds.window(window, edit=True, widthHeight=(window_width, window_height)) + +def CollisionUI(): + # prevents multiple windows + if cmds.window("TressFXCollisionMeshUI", exists = True): + cmds.deleteUI("TressFXExporterUI") + + window_width = 320 + window_height = 300 + + windowTitle = 'TressFX Collision' + window = cmds.window("TressFXCollisionMeshUI", title = windowTitle, w=window_width, h = window_height, mnb=False, sizeable=False) + + mainLayout = cmds.columnLayout(columnAlign = 'center') # In case you want to see the area of the main layout, use backgroundColor = (1, 1, 1) as an argument + + cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,10),(2,window_width-20), (3, 10) ], rowSpacing = (1,10), parent=mainLayout) + + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.button(label="Set the collision mesh", w=120, h=25, command=partial(SetBaseMesh, True)) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.textField("MeshNameLabel", w=220, editable=False) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10, height=20) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + subwidth = (300 - 20)/4 + cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[ (1,10),(2, subwidth), (3, subwidth), (4, 10) ], rowSpacing = (1,10), parent=mainLayout) + cmds.separator(style='none', width=10) + cmds.text(label='Scale Scene:', align='left') + cmds.optionMenu('scalingCollisionOptionMenu', label='') #TressFX does not know about the auto-scaling an engine might do (such as FBX cm->m) but you can manually set scaling here to adjust for what the engine will want + cmds.menuItem(label='0.001') + cmds.menuItem(label='0.01') + cmds.menuItem(label='0.1') + cmds.menuItem(label='1.0') + cmds.menuItem(label='10.0') + cmds.menuItem(label='100.0') + cmds.menuItem(label='1000.0') + cmds.optionMenu('scalingCollisionOptionMenu', edit=True, value='1.0') + cmds.separator(style='none', width=10) + + #cmds.setParent('..') + #cmds.rowColumnLayout( numberOfColumns=1, columnWidth=[ (1,window_width-20) ], rowSpacing = (1,10), parent=mainLayout) + cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,10),(2,window_width-20), (3, 10) ], rowSpacing = (1,10), parent=mainLayout) + + cmds.separator(style='none', width=10, height=20) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.text(label='ErrorMode (TressFX 4.x)', align='center') + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.checkBox("removeNamespaceCM", label='remove Namespace from bones', value = True) + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + cmds.checkBox("RenormalizeFinalPairs", label='Re-Normalize Final Weights (sumMaxInfluences=1)', align='left', enable=True) + cmds.separator(style='none', width=10) + #cmds.checkBox("noDupBoneWts", label='test:no dup nonzero bone wts per vtx', value = False) #error checking. todo: may want this, or may not need it + + cmds.separator(style='none', width=10) + cmds.button(label="Export", w=170, h=30, command=DoExportCollisionMesh) + cmds.separator(style='none', width=10) + + cmds.separator(style='none', width=10) + cmds.separator(style='none', width=10) + + version_text = 'v' + tressfx_exporter_version + cmds.text(label=version_text, width=window_width-25, align='right', parent=mainLayout) + + global selected_mesh_shape_name + selected_mesh_shape_name = '' + + cmds.showWindow(window) + + # After showWindow, resize the window to enforce its size. This is a workaround of a Maya bug. + cmds.window(window, edit=True, widthHeight=(window_width, window_height)) + +def AllowCustomUV(*args): + bEnableCustomUV = cmds.checkBox("InvertYForUVs", q = True, v = True) + if (bEnableCustomUV): + cmds.checkBox("useNonUniformUVRange", edit = True, enable = True) + else: + cmds.checkBox("useNonUniformUVRange", edit = True, enable = False) + return + +def UseCustomUV(*args): + #if using DirectX invert-y option, means we are inverting the v of uv coordinates, and allow the user the option of specifying + #a custom uv range other than 0-1. This means that they have an actual non-uniform range. We do not check to see if that is true or not. + #mainly because I couldn't find a way for Maya to tell me that info + bUseCustomUV = cmds.checkBox("useNonUniformUVRange", q = True, v = True) + + global customUVRange_Values + if (bUseCustomUV): + if cmds.rowColumnLayout(customUVRange_Values, exists = True): + cmds.deleteUI(customUVRange_Values, layout=True) + + customUVRange_Values = cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[ (1,50),(2,80),(3,50),(4,80) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center'),(4,'center') ], parent = customUVRange_Select ) + cmds.setParent(customUVRange_Values) + cmds.text( "U min:", w=20) + cmds.floatField( "uMin", w=50, edit=False, pre=2, value = 0.0) + cmds.text( "U max:", w=20) + cmds.floatField( "uMax", w=50, edit=False, pre=2, value = 1.0) + + cmds.text( "V min:", w=20) + cmds.floatField( "vMin", w=50, edit=False, pre=2, value = 0.0) + cmds.text( "V max:", w=20) + cmds.floatField( "vMax", w=50, edit=False, pre=2, value = 1.0) + else: + if cmds.rowColumnLayout(customUVRange_Values, exists = True): + cmds.deleteUI(customUVRange_Values, layout=True) + + return + +def CreateCustomRootUI(jointNameRoot): + global defaultJointRootIndex + global defaultJointRootWeight + global hairTab_Custom_Root + + hairTab_Custom_Root = cmds.columnLayout(columnAlign = 'center', parent = customRootGroup_Select ) + hairTab_Custom_Root1 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root1) + cmds.button("Set Joint", w=50, h=25, enable=True, visible=True, command=SetRootJoint) + cmds.button("Clear Joint", w=50, h=25, enable=True, visible=True, command=ClearRootJoint) + + hairTab_Custom_Root2 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root2) + cmds.text( "New Root:", w=50) + cmds.text( "JointRootName", w=50, label=jointNameRoot) + + hairTab_Custom_Root3 = cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[ (1,100),(2,100) ], columnAlign = [ (1,'center'),(2,'center') ], parent = hairTab_Custom_Root ) + cmds.setParent(hairTab_Custom_Root2) + cmds.text( "Weight (0-1)", w=50) + cmds.floatField( "JointRootWeightFloat", w=50, edit=False, minValue = 0.0, maxValue = 1.0, pre=2, value = defaultJointRootWeight, changeCommand=SetRootWeight) + return + +def DeleteCustomRootUI(): + global hairTab_Custom_Root + #destroy the panel/float input with the root joint selection and weight (includes all children) + if cmds.columnLayout(hairTab_Custom_Root, exists = True): + cmds.deleteUI(hairTab_Custom_Root, layout=True) + return + +def UseCustomJointRoot(*args): + #todo: automatically add the custom root to the joint subset (only if a joint subset is being used) + #create UI for setting a custom root (joint) and its weight (only used when hit a 0-weight case) + bUseCustomRoot = cmds.checkBox("UseCustomJointRootLabel", q = True, v = True) + global defaultJointRootIndex + global defaultJointRootWeight + + if (bUseCustomRoot): + rootName = GetJointNameFromListByIndex(0) + CreateCustomRootUI(rootName) + else: + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + return + +def GetJointNameFromListByIndex(index): + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Could not retrieve joint name by index. Base mesh has no skin cluster influencers (check to see if skin is bound)") + return "none" + if (index < 0) or (index >= len(skinClusterJointList)): + cmds.warning("TressFX: Could not retrieve joint name by index. Index out of bounds.") + return "none" + return skinClusterJointList[index] + + +def GetJointIndexFromList(jointName): + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + jointIndex = 0 + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Could not retrieve joint index (ret joint index=0). Base mesh has no skin cluster influencers (check to see if skin is bound)") + + for i in range(len(skinClusterJointList)): + if (jointName == skinClusterJointList[i]): + jointIndex = i + return jointIndex + +def SetRootWeight(value): + global defaultJointRootWeight + defaultJointRootWeight = value #the value is already constrained to be between 0 and 1, when the user hits or eventually hits another button, etc to force a return, we get notified. + return + +def SetRootJoint(*args): + #------------------------------ + # Set joint to be used as the default 'root joint' used when there are 0 weights during influence (for hair strands) calculations + #------------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select custom root joint, base mesh must be set.\n") + return + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + if sel_list.length() > 1: + cmds.warning("TressFX: Can only select one joint to be *root*") + return + + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Base mesh has no skin cluster influencers (check to see if skin is bound)") + return + + dagPath = OpenMaya.MDagPath() + sel_list.getDagPath(0, dagPath) #index 0, first item in the selection list + jointFn = OpenMaya.MFnDagNode(dagPath) + joint_name = jointFn.name() + + if dagPath.apiType() != OpenMaya.MFn.kJoint: #must be a joint, nothing else + cmds.warning('TressFX: Not a joint, root must be a joint: objectname = ' + joint_name) + return + elif not (joint_name in skinClusterJointList): + cmds.warning('TressFX: Joint not in influencer list for skin cluster/base mesh: joint = ' + joint_name) + return + else: + global defaultJointRootIndex + global defaultJointRootWeight + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + + defaultJointRootIndex = GetJointIndexFromList(joint_name) + CreateCustomRootUI(joint_name) + cmds.showWindow("TressFXExporterUI") + return + +def ClearRootJoint(*args): + global defaultJointRootIndex + global defaultJointRootWeight + + DeleteCustomRootUI() + defaultJointRootIndex = 0 + defaultJointRootWeight = 0.0 + + defaultName = GetJointNameFromListByIndex(defaultJointRootIndex) + CreateCustomRootUI(defaultName) + cmds.showWindow("TressFXExporterUI") + return + +def CreateJointSubsetUI(): + #adds ability to only look at (allow) a subset of the joints for the hair influencers + # (good when you have a lot of joints that are 0, like facial weights, to prevent situation with a zero weight/hair that will not track) + global hairTab_Select_Joints + + hairTab_Select_Joints = cmds.columnLayout(columnAlign = 'center', parent = jointSubsetGroup_Select ) + hairTab_Select_Joints1 = cmds.rowColumnLayout( numberOfColumns=3, columnWidth=[ (1,100),(2,100),(3,100) ], columnAlign = [ (1,'center'),(2,'center'),(3,'center') ], parent = hairTab_Select_Joints ) + cmds.setParent(hairTab_Select_Joints1) + cmds.button("Add joints", w=50, h=25, enable=True, visible=True, command=AddJointSet) + cmds.button("Delete joints", w=50, h=25, enable=True, visible=True, command=DeleteJointSet) + cmds.button("Clear All joints", w=50, h=25, enable=True, visible=True, command=ClearJointSet) + + pane_list = cmds.paneLayout("JointNamePane", parent=hairTab_Select_Joints) + cmds.textScrollList( "JointNameScrollList", w=300, numberOfRows=8, e=False, allowMultiSelection=True, parent = pane_list, append=joint_sel_list_names) + + return + +def DeleteJointSubsetUI(): + #delete the UI, but not responsible for clearing the joints selected to joint_sel_list_names + global hairTab_Select_Joints + #destroy the panel/float input with the root subset selection controls (includes all children) + if cmds.columnLayout(hairTab_Select_Joints, exists = True): + cmds.deleteUI(hairTab_Select_Joints, layout=True) + return + +def UseJointSubset(*args): + bUseJointSubset = cmds.checkBox("UseJointSubsetLabel", q = True, v = True) + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select custom joint subset, base mesh must be set.\n") + bUseJointSubset = False + cmds.checkBox("UseJointSubsetLabel", editable=True, v=False) + return + + if (bUseJointSubset): + CreateJointSubsetUI() + cmds.warning("TressFX: Using a subset can result in loss of hair tracking accuracy.\n Use with caution and only on bones that should never have affect on that skin subsection. \n Useful for masking out dead weights and non-skin joints like weaponry.") + else: + #destroy the panels with the joints/controls and clear the joint set list + DeleteJointSubsetUI() + return + +def ClearJointSet(*args): + global joint_sel_list_names + joint_sel_list_names = [] + DeleteJointSubsetUI() + CreateJointSubsetUI() + return + +def DeleteJointSet(*args): + global joint_sel_list_names + + if cmds.columnLayout(hairTab_Select_Joints, exists = True): + numSelectedItems = cmds.textScrollList( "JointNameScrollList", query=True, nsi=True) + if numSelectedItems > 0: + selectedItems = cmds.textScrollList( "JointNameScrollList", query=True, si=True) + else: + print('TressFX: Nothing deleted: no joints selected from joint subset list') + return + for item in selectedItems: + if item in joint_sel_list_names: + joint_sel_list_names.remove(item) + DeleteJointSubsetUI() + CreateJointSubsetUI() + + return + + +def AddJointSet(*args): + #------------------------------ + # Create a list of joints to be used in the mapping (and exclude those not in this list) + #------------------------------- + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To select joint subset, base mesh must be set.\n") + return + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + skinClusterJointList = GetSkinClusterInfluenceObjectsNames() + #check to make sure we have joints (influencers) bound to mesh (skin) + if len(skinClusterJointList) == 0: + cmds.warning("TressFX: Base mesh has no skin cluster influencers (check to see if skin is bound)") + return + + # Create iterator through list of selected object + selection_iter = OpenMaya.MItSelectionList(sel_list) + obj = OpenMaya.MObject() + + # Loop though iterator objects + global joint_sel_list_names + while not selection_iter.isDone(): + selection_iter.getDependNode(obj) + dagPath = OpenMaya.MDagPath.getAPathTo(obj) + #print dagPath.fullPathName() + jointFn = OpenMaya.MFnDagNode(dagPath) + joint_name = jointFn.name() + if not (joint_name in skinClusterJointList): + cmds.warning('TressFX: Joint not in influencer list for skin cluster/base mesh: joint = ' + joint_name) + elif joint_name in joint_sel_list_names: + cmds.warning('TressFX: Joint already in list: joint = ' + joint_name) #skip it but continue iterating + elif dagPath.apiType() != OpenMaya.MFn.kJoint: #must be a joint, nothing else + cmds.warning('TressFX: Not a joint, can only add joints to this list: objectname = ' + joint_name) #skip it but continue iterating + else: + joint_sel_list_names.append(joint_name) + selection_iter.next() + + DeleteJointSubsetUI() + CreateJointSubsetUI() + cmds.showWindow("TressFXExporterUI") + return + + +def GetIndicesSubsetInfluenceObjects(skinFn, dagPaths ): + #get the joints, but if we are limiting to a subset of joints use that, otherwise use full joint set attached to skincluster + # we also will check the subset and reject any bones that are not contained in dagPaths (which lists the bones for that skincluster) + boneSubsetIndices = [] + numberItems = 0 + if len(joint_sel_list_names) != 0: + jointList = joint_sel_list_names + numberItems = len(joint_sel_list_names) + else: + cmds.warning("TressFX: Joint Subset Activated, but no items in subset. Using full joints.") + return boneSubsetIndices + + for k in range(numberItems): + influenceName = jointList[k] + for i in range(dagPaths.length()): + if (influenceName == dagPaths[i].partialPathName() ): + boneSubsetIndices.append(skinFn.indexForInfluenceObject(dagPaths[i])) + + return boneSubsetIndices + +def GetInfluenceObjects(dagPaths ): + #get all the joints (influence objects)..currently TressFX 4.x needs all the bone names and indices exported, not just a subset + boneNames = [] + #do we need to remove the namespace if present? + bRemoveNS = cmds.checkBox("removeNamespace", q = True, v = True) + + numberItems = 0 + jointList = dagPaths + numberItems = jointList.length() + + # get joint names + for i in range(numberItems): + influenceName = jointList[i].partialPathName() + if bRemoveNS: + influenceNameList = re.split("[:]", influenceName) + if len(influenceNameList) != 1: #has a namespace prefix + boneNames.append(influenceNameList[-1]) + else: + boneNames.append(influenceNameList[0]) + else: + boneNames.append(influenceName) # Need to remove namespace? + + return boneNames + +def SetBaseMesh(bCollision = False, *args): + #------------------------------ + # Find the selected mesh shape + #------------------------------- + #collision also uses this, need to differentiate (currently col should not have same options available) + # i.e. doesn't hide/disable controls like the Hair side + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + dagPath = OpenMaya.MDagPath() + sel_list.getDagPath(0, dagPath) + + if not dagPath.hasFn(OpenMaya.MFn.kMesh): #if the node along this path doesn't support kMesh, we reject it and let the user know + cmds.warning('TressFX: Selection not a kMesh') + #note: in this case, we are not resetting the base mesh or any controls from current values (empty or not) + return + + global selected_mesh_shape_name + + #is it already open and we are just changing base meshes? (Currently, export of hair only) + if (selected_mesh_shape_name != '') and not (bCollision == True): + #subcontrols may already be enabled, so reset them to defaults for this base mesh, or if the selected object isn't a mesh + cmds.checkBox("RenormalizeFinalPairs", edit=True, value=False) + cmds.checkBox("UseCustomJointRootLabel", edit=True, value =False) + cmds.checkBox("UseJointSubsetLabel", edit=True, value=False) + UseCustomJointRoot() + UseJointSubset() + + #proceed as normal to set the new mesh and get its name + cmds.textField("MeshNameLabel", edit=True, text='') + selected_mesh_shape_name = '' + dagPath.extendToShape() + meshFn = OpenMaya.MFnMesh(dagPath) + selected_mesh_shape_name = meshFn.name() + cmds.textField("MeshNameLabel", edit=True, text=meshFn.name()) + + #enable options + if not (bCollision == True): + cmds.checkBox("RenormalizeFinalPairs", edit=True, enable=True) + cmds.checkBox("UseCustomJointRootLabel", edit=True, enable=True) + cmds.checkBox("UseJointSubsetLabel", edit=True, enable=True) + + return + +def DoExport(*args): + # TODO: Set the time frame to the first one or go to the bind pose? + # first_frame = cmds.playbackOptions(minTime=True, query=True) + # cmds.currentTime(first_frame) + + bExportHairCheckBox = cmds.checkBox("exportHairCheckBox", q = True, v = True) + bExportSkinCheckBox = cmds.checkBox("exportSkinCheckBox", q = True, v = True) + bExportBoneCheckBox = cmds.checkBox("exportBoneCheckBox", q = True, v = True) + + #---------------------------------------- + # collect selected nurbs spline curves. + #---------------------------------------- + minCurveLength = cmds.floatField("minCurveLength",q = True, v = True) + curves = GetSelectedNurbsCurves(minCurveLength) + + if len(curves) == 0: + cmds.warning("TressFX: No nurbs curves were selected!") + return + else: + print("TressFX: %d curves were selected.\n" % len(curves)) + + #------------------------------- + # Find the selected mesh shape + #------------------------------- + meshShapedagPath = OpenMaya.MDagPath() + + if selected_mesh_shape_name == '': + meshShapedagPath = None + else: + allObject = cmds.ls(selected_mesh_shape_name) + cmds.select(allObject) # TODO: This selection makes hair curves unselected. This is not a problem but just inconvenient for users if they want to keep the curves selected. + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + meshShapedagPath = None + else: + sel_list.getDagPath(0, meshShapedagPath) + meshShapedagPath.extendToShape() # get mesh shape + + # if none of export checkboxes were selected, then exit. + if bExportHairCheckBox == 0 and bExportSkinCheckBox == 0 and bExportBoneCheckBox == 0: + cmds.warning("TressFX: Please select checkbox for exporting data") + return + + rootPositions = [] + + #------------------- + # Export a tfx file + #------------------- + if bExportHairCheckBox: + basicFilter = "*.tfx" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx binary file(*.tfx)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + bRandomize = cmds.checkBox("randomStrandCheckBox", q = True, v = True) + + if bRandomize: + random.shuffle(curves) + + rootPositions = SaveTFXBinaryFile(filepath[0], curves, meshShapedagPath) + + #------------------------------------------------------------------------------------ + # collect root positions for tfxskin or tfxbone in case SaveTFXBinaryFile was not run + #------------------------------------------------------------------------------------ + if bExportHairCheckBox == 0 and (bExportSkinCheckBox == 1 or bExportBoneCheckBox == 1): + for i in xrange(len(curves)): + curveFn = curves[i] + rootPos = OpenMaya.MPoint() + curveFn.getPointAtParam(0, rootPos, OpenMaya.MSpace.kObject) # kWorld? + rootPositions.append(rootPos) + + if bExportSkinCheckBox == 1 or bExportBoneCheckBox == 1: + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To export skin or bone data, base mesh must be set.\n") + return + + #-------------------- + # Save tfxskin file + #-------------------- + if bExportSkinCheckBox == 1: + basicFilter_tfxskin = "*.tfxskin" + filepath = cmds.fileDialog2(fileFilter=basicFilter_tfxskin, dialogStyle=2, caption="Save a tfxskin file(*.tfxskin)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + SaveTFXSkinBinaryFile(filepath[0], meshShapedagPath, rootPositions) + + #------------------------ + # Save the tfxbone file. + #------------------------ + if bExportBoneCheckBox == 1: + basicFilter = "*.tfxbone" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx bone file(*.tfxbone)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + #we will check for a joint subset in the save tfxbone function + SaveTFXBoneBinaryFile(filepath[0], selected_mesh_shape_name, meshShapedagPath, rootPositions) + + return + +# TODO: Do we need to enforce to go to the bind pose or let user do it? +def GotoBindPose(*args): + joints = cmds.ls(type='joint') + rootJoints = [] + + for j in joints: + while cmds.listRelatives(j, p=True): + parent = cmds.listRelatives(j, p=True) + j = parent[0] + rootJoints.append(j) + + rootJoints = set(rootJoints) + + for rootJoint in rootJoints: + cmds.select(rootJoint) + bindpose = cmds.dagPose(q=True, bindPose=True) + cmds.dagPose(bindpose[0] , restore=True) + cmds.select(cl=True) + + return + +class WeightJointIndexPair: + weight = 0 + joint_index = -1 + + # For sorting + def __lt__(self, other): + return self.weight > other.weight + +# vertexIndices is three vertex indices belong to one triangle +def GetSortedWeightsFromTriangleVertices(_maxJointsPerVertex, vertexIndices, jointIndexArray, weightArray, baryCoord): + final_pairs = [] + + for j in range(_maxJointsPerVertex): + for i in range(3): + vertex_index = vertexIndices[i] + bary = baryCoord[i] + + weight = weightArray[vertex_index*_maxJointsPerVertex + j] * bary + joint_index = jointIndexArray[vertex_index*_maxJointsPerVertex + j] + + bFound = False + for k in range(len(final_pairs)): + if final_pairs[k].joint_index == joint_index: + final_pairs[k].weight += weight + bFound = True + break + + if bFound == False: + pair = WeightJointIndexPair() + pair.weight = weight + pair.joint_index = joint_index + final_pairs.append(pair) + + # Set joint index zero if the weight is zero. (old way) + # User can now selected (new UI) to define their own 'root' joint and have it be non-zero (0-1 float range) + # (often if there is an issue with a strand anchoring and not moving (all weights 0) or if they + # are using a subset of joints and masking out the rest..and want a root from that group) + # Needed with complex real world skeletal rigs where you often have weights purposely set to 0 + # (like in a facial rig) on the main skincluster + final_pairs_sum = 0 + for i in xrange(len(final_pairs)): + final_pairs_sum += final_pairs[i].weight + if final_pairs[i].weight == 0: + final_pairs[i].joint_index = defaultJointRootIndex + final_pairs[i].weight = defaultJointRootWeight + + final_pairs.sort() + + # TODO: Is it needed to make the sum of weight equal to 1? + # New UI: now has checkbox option to let you re-normalize the weights to 1 (optional only) + bReNormalizeFinalPairs = cmds.checkBox("RenormalizeFinalPairs", q = True, v = True) + if (bReNormalizeFinalPairs == True) and (final_pairs_sum > 0): + for i in xrange(len(final_pairs)): + final_pairs[i].weight /= final_pairs_sum + + # number of elements of final_pairs could be more than _maxJointsPerVertex but it should be at least _maxJointsPerVertex. + # If you really want it to be exactly _maxJointsPerVertex, you can try to pop out elements. + return final_pairs + +# p0, p1, p2 are three vertices of a triangle and p is inside the triangle +def ComputeBarycentricCoordinates(p0, p1, p2, p): + v0 = p1 - p0 + v1 = p2 - p0 + v2 = p - p0 + + v00 = v0 * v0 + v01 = v0 * v1 + v11 = v1 * v1 + v20 = v2 * v0 + v21 = v2 * v1 + d = v00 * v11 - v01 * v01 + v = (v11 * v20 - v01 * v21) / d # TODO: Do I need to care about divide-by-zero case? + w = (v00 * v21 - v01 * v20) / d + u = 1.0 - v - w + + # make sure u, v, w are non-negative. It could happen sometimes. + u = max(u, 0) + v = max(v, 0) + w = max(w, 0) + + # normalize barycentric coordinates so that their sum is equal to 1 + sum = u + v + w + u /= sum + v /= sum + w /= sum + + return [u, v, w] + +def SaveTFXBoneBinaryFile(filepath, selected_mesh_shape_name, meshShapedagPath, rootPositions): + #--------------------------------------------------------------------------- + # Build a face/triangle index list to convert face index into triangle index + #--------------------------------------------------------------------------- + faceIter = OpenMaya.MItMeshPolygon(meshShapedagPath) + triangleCount = 0 + faceTriaIndexList = [] + index = 0 + + util = OpenMaya.MScriptUtil() + util.createFromInt(0) + + while not faceIter.isDone(): + faceTriaIndexList.append(triangleCount) + + if faceIter.hasValidTriangulation(): + numTrianglesPtr = util.asIntPtr() + faceIter.numTriangles(numTrianglesPtr) + numTriangles = util.getInt(numTrianglesPtr) + triangleCount += numTriangles + + faceIter.next() + + #print "TressFX: Triangle count:%d\n" % triangleCount + + #---------------------- + # Find the closest face + #---------------------- + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + triangleCounts = OpenMaya.MIntArray() + triangleVertexIndices = OpenMaya.MIntArray() # the size of this array is three times of the number of total triangles + meshFn.getTriangles(triangleCounts, triangleVertexIndices) + + vertexTriangleList = [] + + triangleIdForStrandsList = [] + baryCoordList = [] + uvCoordList = [] + pointOnMeshList = [] + + progressBar = ProgressBar('Collecting bone data', len(rootPositions)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find the closest point info + meshPt = OpenMaya.MPointOnMesh() + meshIntersector.getClosestPoint(rootPoint, meshPt) + pt = meshPt.getPoint() + + pointOnMesh = OpenMaya.MPoint() + pointOnMesh.x = pt.x + pointOnMesh.y = pt.y + pointOnMesh.z = pt.z + pointOnMeshList.append(pointOnMesh) + + # Find face index + faceId = meshPt.faceIndex() + + # Find triangle index + triangleId = faceTriaIndexList[faceId] + meshPt.triangleIndex() + + dummy = OpenMaya.MScriptUtil() + dummyIntPtr = dummy.asIntPtr() + triangleId_local = meshPt.triangleIndex() # This values is either 0 or 1. It is not a global triangle index. triangleId is the global triangle index. + pointArray = OpenMaya.MPointArray() + vertIdList = OpenMaya.MIntArray() + faceIter.setIndex(faceId, dummyIntPtr) + faceIter.getTriangle(triangleId_local, pointArray, vertIdList, OpenMaya.MSpace.kWorld ) + + vertexTriangleList.append((vertIdList[0], vertIdList[1], vertIdList[2])) + triangleIdForStrandsList.append(triangleId) + + # Find three vertex indices for the triangle. Following two lines should give us three correct vertex indices for the triangle. + # I haven't really verified though. + #vertexIndex = [triangleVertexIndices[triangleId*3], triangleVertexIndices[triangleId*3+1], triangleVertexIndices[triangleId*3+2]] + vertexIndex = [vertIdList[0], vertIdList[1], vertIdList[2]] + + # Find barycentric coordinates + uvw = OpenMaya.MPoint() + + # Somehow, below code gives me negative barycentric coordinates sometimes. + # uPtr = OpenMaya.MScriptUtil().asFloatPtr() + # vPtr = OpenMaya.MScriptUtil().asFloatPtr() + # meshPt.getBarycentricCoords(uPtr,vPtr) + # uvw.x = OpenMaya.MScriptUtil(uPtr).asFloat() + # uvw.y = OpenMaya.MScriptUtil(vPtr).asFloat() + # uvw.z = 1.0 - uvw.x - uvw.y + + # Instead getting barycentric coords from getBarycentricCoords, we compute it by the following function. + uvw_a = ComputeBarycentricCoordinates(pointArray[0], pointArray[1], pointArray[2], pointOnMesh) + + uvw.x = uvw_a[0] + uvw.y = uvw_a[1] + uvw.z = uvw_a[2] + + # barycentric coordinates should be non-zero + #uvw.x = max(uvw.x, 0) + #uvw.y = max(uvw.y, 0) + #uvw.z = max(uvw.z, 0) + + # normalize barycentric coordinates so that their sum is equal to 1 + #sum = uvw.x + uvw.y + uvw.z + #uvw.x /= sum + #uvw.y /= sum + #uvw.z /= sum + + baryCoordList.append(uvw) + + # Find UV coordinates - We don't really use UV coords for tfxbone file. + # util = OpenMaya.MScriptUtil() + # util.createFromList([0.0, 0.0], 2) + # uv_ptr = util.asFloat2Ptr() + # meshFn.getUVAtPoint(rootPoint, uv_ptr) + # u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + # v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + # uv_coord = OpenMaya.MPoint() + # uv_coord.x = u + # uv_coord.y = v + # uv_coord.z = 0 + # uvCoordList.append(uv_coord) + + # update progress gui + progressBar.Increment() + + progressBar.Kill() + + #------------------------- + # Get skin cluster object + #------------------------- + skinClusterName = '' + skinClusters = cmds.listHistory(selected_mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ selected_mesh_shape_name) + return + + #print skinClusterName + + #--------------------------------------------------------------------------------------------------- + # TODO: Try the following method. + # skins = filter(lambda skin: mesh.getShape() in skin.getOutputGeometry(), ls(type='skinCluster')) + + # if len(skins) > 0 : + # skin = skins[0] + # skinJoints = skin.influenceObjects(); + # root = skinJoints[0] + + # while root.getParent() : + # root = root.getParent() + + # skin.getWeights(mesh.verts[index]) + + # select(root, hierarchy=True, replace=True) + # joints = ls(selection=True, transforms=True, type='joint') + #--------------------------------------------------------------------------------------------------- + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + + # influence object is a joint + influenceObjectsNames = [] + influenceObjectsNames = GetInfluenceObjects(dagPaths) + + influenceSubsetIndices = [] + #check to see if using subset and got the indices to match + bUseJointSubset = cmds.checkBox("UseJointSubsetLabel", q = True, v = True) + if (bUseJointSubset == True): + influenceSubsetIndices = GetIndicesSubsetInfluenceObjects(skinFn, dagPaths ) + if (len(influenceSubsetIndices) == 0): + cmds.warning("TressFX: Joint Subset activated but failed to get matching indices, defaulting to full joint set") + bUseJointSubset = False + + + #do we have bones? + if (len(influenceObjectsNames) == 0): + cmds.warning('TressFX: NO INFLUENCES FOR SKINCLUSTER FOUND! ') + else: #how many bones? + numBonesNeeded = len(influenceObjectsNames) + cmds.warning('TressFX: NOTICE: Make sure TressFX Max Allowed Bones (in a skeleton) is set to greater than: ' + str(numBonesNeeded)) + + skinMeshes = cmds.skinCluster(skinClusterName, query=1, geometry=1) + geoIter = OpenMaya.MItGeometry(meshShapedagPath) + infCount = OpenMaya.MScriptUtil() + infCountPtr = infCount.asUintPtr() + numVertices = geoIter.count() + + weightArray = [0] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint weight array for all vertices. Each vertex will have TRESSFX_MAX_INFLUENTIAL_BONE_COUNT weights. + # It is initialized with zero for empty weight in case there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + jointIndexArray = [-1] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint index array for all vertices. It is initialized with -1 for an empty element in case + # there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + + # collect bone weights for all vertices in the mesh + index = 0 + while geoIter.isDone() == False: + weights = OpenMaya.MDoubleArray() + skinFn.getWeights(meshShapedagPath, geoIter.currentItem(), weights, infCountPtr) + weightJointIndexPairs = [] + + sumWtsThisVertex = 0.0 + + for i in range(len(weights)): + sumWtsThisVertex += weights[i] + + pair = WeightJointIndexPair() + pair.weight = weights[i] + if (bUseJointSubset == True) and (i not in influenceSubsetIndices) and (pair.weight > 0.0): + #print("JointSubset: Setting pair weight:%5.2f to zero for bone index: %d (%s)\n" % (pair.weight, i, influenceObjectsNames[i])) + pair.weight = 0.0 #don't use this weight, not in subset of joints we want + + pair.joint_index = i + weightJointIndexPairs.append(pair) + + weightJointIndexPairs.sort() + + a = 0 + sumWtAdjusted = 0.0 + for j in range(min(len(weightJointIndexPairs), TRESSFX_MAX_INFLUENTIAL_BONE_COUNT )): + weightArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].weight + jointIndexArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].joint_index + a += 1 + sumWtAdjusted += weightJointIndexPairs[j].weight + + index += 1 + geoIter.next() + + #------------------------ + # Save the tfxbone file. + #------------------------ + progressBar = ProgressBar('Saving a tfxbone file', len(influenceObjectsNames) + len(triangleIdForStrandsList)) + f = open(filepath, "wb") + # Number of Bones + f.write(ctypes.c_int(len(influenceObjectsNames))) + + # Write all bone (joint) names + for i in range(len(influenceObjectsNames)): + # Bone Joint Index + f.write(ctypes.c_int(i)) + # Size of the string, add 1 to leave room for the nullterminate. + f.write(ctypes.c_int(len(influenceObjectsNames[i]) + 1)) + # Print the characters of the string 1 by 1. + for j in range(len(influenceObjectsNames[i])): + f.write(ctypes.c_byte(ord(influenceObjectsNames[i][j]))) + # Add a zero to null terminate the string. + f.write(ctypes.c_byte(0)) + progressBar.Increment() + + # Number of Strands + f.write(ctypes.c_int(len(triangleIdForStrandsList))) + + for i in range(len(triangleIdForStrandsList)): + triangleId = triangleIdForStrandsList[i] + + # three vertex indices from one triangle - Following two lines should work equally but I haven't verified it yet. + #vertexIndices = [triangleVertexIndices[triangleId*3], triangleVertexIndices[triangleId*3+1], triangleVertexIndices[triangleId*3+2]] + vertexIndices = vertexTriangleList[i] + + baryCoord = baryCoordList[i] + #todo: Investigate if we are getting outlier case where a baryCoord is causing a strand to go to zero? + # We should be using sorted (i.e. of all weights, only top 4 and + # which will multiply barycoord against the weight and if we get a weight with 0 in the final four, it is set to the default root, + # which is joint0 at wt0 (which, if there are no other non-zero influences, would freeze the hair in place) + # This is why a custom root setting was added, with a settable weight (i.e. non zero), just in case we get tiny barycoords that force + # a resulting weight to zero (and have few bones influencing that hair, such that all the weight goes to zero) + + #get final pairs (post adjustment by baryCoord) + weightJointIndexPairs = GetSortedWeightsFromTriangleVertices(TRESSFX_MAX_INFLUENTIAL_BONE_COUNT , vertexIndices, jointIndexArray, weightArray, baryCoord) + + # Index, the rest should be self explanatory. + f.write(ctypes.c_int(i)) + for j in range(4): + joint_index = 0 + weight = 0.0 + + try: + joint_index = weightJointIndexPairs[j].joint_index + weight = weightJointIndexPairs[j].weight + except: + print("TressFX: Saving Bone file, exception getting joint_index/bone weight for triangleId %d in StrandsList" % i) #big error: throw exception to stop + pass + + f.write(ctypes.c_int(joint_index)) + f.write(ctypes.c_float(weight)) + progressBar.Increment() + + f.close() + progressBar.Kill() + return + +def RecursiveSearchCurve(curves, objNode, minCurveLength): + if objNode.hasFn(OpenMaya.MFn.kNurbsCurve): + curveFn = OpenMaya.MFnNurbsCurve(objNode) + curveLength = curveFn.length() + + # We only export open type curves. + if curveFn.form() == OpenMaya.MFnNurbsCurve.kOpen: + if curveLength >= minCurveLength: + curves.append(curveFn) + + elif objNode.hasFn(OpenMaya.MFn.kTransform): + objFn = OpenMaya.MFnTransform(objNode) + + for j in range(objFn.childCount()): + childObjNode = objFn.child(j) + RecursiveSearchCurve(curves, childObjNode, minCurveLength) + +def GetSelectedNurbsCurves(minCurveLength): + slist = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList( slist ) + iter = OpenMaya.MItSelectionList(slist) + curves = [] + + # Find all nurbs curves under the selected node recursively. + #TODO. Confirm that this should be doing a 'select hierarachy' so user doesn't have to... + for i in range(slist.length()): + selObj = OpenMaya.MObject() + slist.getDependNode(i, selObj) + RecursiveSearchCurve(curves, selObj, minCurveLength) + + return curves + +class TressFXTFXFileHeader(ctypes.Structure): + _fields_ = [('version', ctypes.c_float), + ('numHairStrands', ctypes.c_uint), + ('numVerticesPerStrand', ctypes.c_uint), + ('offsetVertexPosition', ctypes.c_uint), + ('offsetStrandUV', ctypes.c_uint), + ('offsetVertexUV', ctypes.c_uint), + ('offsetStrandThickness', ctypes.c_uint), + ('offsetVertexColor', ctypes.c_uint), + ('reserved', ctypes.c_uint * 32)] + +class tressfx_float4(ctypes.Structure): + _fields_ = [('x', ctypes.c_float), + ('y', ctypes.c_float), + ('z', ctypes.c_float), + ('w', ctypes.c_float)] + +class tressfx_float2(ctypes.Structure): + _fields_ = [('x', ctypes.c_float), + ('y', ctypes.c_float)] + +def SaveTFXBinaryFile(filepath, curves, meshShapedagPath): + numCurves = len(curves) + numVerticesPerStrand = cmds.optionMenu("numberOfStrandsOptionMenu", query=True, value=True) + numVerticesPerStrand = int(numVerticesPerStrand) + + #check to see if we need to scale the points + sceneScale = cmds.optionMenu('scalingOptionMenu', query=True, value=True) + sceneScale = float(sceneScale) + print("TressFX: Saving TFX Binary:scene scale multiplier = %f" % sceneScale) #todo: make sure scaling doesn't affect uv issues (if there is an issue, that is) + + #sampling options + curveSample = cmds.optionMenu("samplingOptionMenu", query=True, value=True) + curveSample = int(curveSample) + curveIndex_Offset = cmds.intField("curveOffset",q = True, v = True) + #sanity check + if curveIndex_Offset >= numCurves: + cmds.warning('TressFX: Curve Offset requested Greater or Equal to actual Number of Curves - Please Lower Offset Value') + return + + bothEndsImmovable = cmds.checkBox("bothEndsImmovable",q = True, v = True) + invertZ = cmds.checkBox("InvertZ",q = True, v = True) + useZUp = cmds.checkBox("useZUp",q = True, v = True) + bChangeUpToZ = False + if (useZUp == True): + #query current up axis in use + currentAxis = cmds.upAxis(q = True, axis = True) + if (currentAxis == 'y'): + bChangeUpToZ = True + cmds.warning("TressFX: Maya currently using Y axis as UP, Z up requested: doing y/z swap") + elif (currentAxis != 'z'): + cmds.warning("TressFX: Problem detected, attempt to detect Maya UP axis setting failed. No change to default UP axis (no y/z swap)") + + + ignoreUVErrors = cmds.checkBox("ignoreUVErrorsCheckBox", q = True, v = True) + + #useCurl = cmds.checkBox("useCurl",q = True, v = True) + rootPositions = [] + + tfxHeader = TressFXTFXFileHeader() + tfxHeader.version = 4.0 + tfxHeader.numHairStrands = int(numCurves//curveSample) #number of curves may be a subset if we are sampling a subset only + tfxHeader.numVerticesPerStrand = numVerticesPerStrand + tfxHeader.offsetVertexPosition = ctypes.sizeof(TressFXTFXFileHeader) + tfxHeader.offsetStrandUV = 0 + tfxHeader.offsetVertexUV = 0 + tfxHeader.offsetStrandThickness = 0 + tfxHeader.offsetVertexColor = 0 + + meshFn = None + meshIntersector = None + + #if sampling at a lower amount than the full curve set, div by sample over entire set, then mult by sample to jump + #if offseting, subtract offset amount from full range of loop, so when it's added to the index + #it won't overshoot the actual number of curves range + adjustedCurveRange = int(numCurves//curveSample) - curveIndex_Offset #floor division is // + #sanity check 2 + if curveIndex_Offset >= adjustedCurveRange: + cmds.warning('TressFX: Curve Offset requested Greater or Equal to subset:Sampled Curves - Please Lower Offset Value') + return + + # if meshShapedagPath is passed then let's get strand texture coords. To do this, we need MFnMesh and MMeshIntersector objects. + if meshShapedagPath != None: + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) +# tfxHeader.offsetStrandUV = tfxHeader.offsetVertexPosition + numCurves * numVerticesPerStrand * ctypes.sizeof(tressfx_float4) + tfxHeader.offsetStrandUV = tfxHeader.offsetVertexPosition + adjustedCurveRange * numVerticesPerStrand * ctypes.sizeof(tressfx_float4) + + bInvertYForUVs = cmds.checkBox("InvertYForUVs",q = True, v = True) + + + #totalProgress = numCurves*numVerticesPerStrand #old, non adjusted for sampling of curves + totalProgress = adjustedCurveRange*numVerticesPerStrand + + if meshFn != None: + #totalProgress = numCurves*numVerticesPerStrand + numCurves #old, non adjusted for sampling of curves + totalProgress = adjustedCurveRange*numVerticesPerStrand + adjustedCurveRange + + progressBar = ProgressBar('Saving a tfx file', totalProgress) + + f = open(filepath, "wb") + f.write(tfxHeader) + + #if sampling at a lower amount than the full curve set, div by sample over entire set, then mult by sample to jump + #if offseting, subtract offset amount from full range of loop, so when it's added to the index + #it won't overshoot the actual number of curves range + #adjustedCurveRange = int(numCurves//curveSample) - curveIndex_Offset #floor division is // + for i in xrange(adjustedCurveRange): + curveFn = curves[(i*curveSample) + curveIndex_Offset] #adjusted curve range to accomodate sampling and offsetting into the curve set + + # getting Min/Max value of the nurbs curve + min = OpenMaya.MScriptUtil() + min.createFromDouble(0) + minPtr = min.asDoublePtr() + max = OpenMaya.MScriptUtil() + max.createFromDouble(0) + maxPtr = max.asDoublePtr() + curveFn.getKnotDomain(minPtr, maxPtr) + min_val = OpenMaya.MScriptUtil(minPtr).asDouble() + max_val = OpenMaya.MScriptUtil(maxPtr).asDouble() + + for j in range(0, numVerticesPerStrand): + param = j/ float(numVerticesPerStrand-1) + pos = OpenMaya.MPoint() + + param = param * (max_val - min_val) + curveFn.getPointAtParam(param, pos, OpenMaya.MSpace.kObject) # kObject + + p = tressfx_float4() + p.x = pos.x + p.y = pos.y + + if invertZ: + p.z = -pos.z # flip in z-axis + else: + p.z = pos.z + + #if invertY: #no use case currently + # p.y = -pos.y + #else: + # p.y = pos.y + + if (bChangeUpToZ == True): #Unreal uses Z as up (not Y), and Maya is currently using Y (so we need to swap values) + temp = p.y + p.y = p.z + p.z = temp #not sure if can use p.yz = p.zy (or if supported on all possible python builds used with this exporter) so will use old fashioned way + + + # w component is an inverse mass + if j == 0 or j == 1: # the first two vertices are immovable always. + p.w = 0 + else: + p.w = 1.0 + + if j == (numVerticesPerStrand-1) and bothEndsImmovable: #fix the last vertice of strand + p.w = 0 + + if (sceneScale != 1.0): + #print('tfx scaling doing it...not 1.0') + p.x = p.x * sceneScale + p.y = p.y * sceneScale + p.z = p.z * sceneScale + + f.write(p) + progressBar.Increment() + + + # # find face index + rootPos = OpenMaya.MPoint() + curveFn.getPointAtParam(0, rootPos, OpenMaya.MSpace.kObject) # must be kObject + rootPositions.append(rootPos) + + + # if meshShapedagPath is passed then let's get strand texture coords by using raycasting to the mesh from each root position of hair strand. + if meshFn != None: + #last known good u,v + #in case we hit bad uv points, we can at least try to set them closer to the + #last u,v set (versus 0,0) + u_lkg = 0.0 + v_lkg = 0.0 + + uMin = 0.0 + uMax = 1.0 + vMin = 0.0 + vMax = 1.0 + #query to see if we have a user defined custom uv bounding box + bCustomUVRange = cmds.checkBox("useNonUniformUVRange",q = True, v = True) + if (bCustomUVRange == True) and (bInvertYForUVs == True): + #only need the min and max of v (currently) + uMin = cmds.floatField("uMin", q = True, v = True) + uMax = cmds.floatField("uMax", q = True, v = True) + vMin = cmds.floatField("vMin", q = True, v = True) + vMax = cmds.floatField("vMax", q = True, v = True) + cmds.warning("TressFX: Using custom UV range. This v range (%5.2f, %5.2f) will be used during DirectX y-flipping ('v' reflect) for uv coordinates." % (vMin, vMax)) + print ("TressFX: UV bounding box is: u[%5.2f, %5.2f], v[%5.2f, %5.2f]" % (uMin, uMax, vMin, vMax)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find UV coordinates + util = OpenMaya.MScriptUtil() + util.createFromList([0.0, 0.0], 2) + uv_ptr = util.asFloat2Ptr() + + try: + meshFn.getUVAtPoint(rootPoint, uv_ptr) + u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + u_lkg = u + v_lkg = v + except: + #if NOT strict mode' then ok to give point a default 0,0 uv point value, else kill the file + #cmds.warning('Exception Hit! meshFn.getUVAtPoint failed for rootPoint') + if ignoreUVErrors: + cmds.warning('TressFX: UV point error Exception (strict mode off): UV point failed for rootPoint->Ignoring Exception, using last known good (lkg) as uv instead') + u = u_lkg + v = v_lkg + else: + f.close() + progressBar.Kill() + cmds.warning('TressFX: UV point error Exception (strict mode on): UV point failed for rootPoint->Failing to create TFX. Deleting the open TFX file: ' + filepath) + cmds.sysFile(filepath, delete=True) #remove the damaged file + return + + uv_coord = tressfx_float2() + uv_coord.x = u + uv_coord.y = v + + if (bInvertYForUVs == True): + uv_coord.y = vMax - uv_coord.y + vMin #uv_coord.y = 1.0 - uv_coord.y # DirectX has it inverted, uniform means a typical bounding box of 0-1 u and v, so we would actually use 1- v + 0 to invert + + #print "uv:%g, %g\n" % (uv_coord.x, uv_coord.y) + f.write(uv_coord) + progressBar.Increment() + + f.close() + progressBar.Kill() + + return rootPositions + +class TressFXSkinFileObject(ctypes.Structure): + _fields_ = [('version', ctypes.c_uint), + ('numHairs', ctypes.c_uint), + ('numTriangles', ctypes.c_uint), + ('reserved1', ctypes.c_uint * 31), + ('hairToMeshMap_Offset', ctypes.c_uint), + ('perStrandUVCoordniate_Offset', ctypes.c_uint), + ('reserved1', ctypes.c_uint * 31)] + +class HairToTriangleMapping(ctypes.Structure): + _fields_ = [('mesh', ctypes.c_uint), + ('triangle', ctypes.c_uint), + ('barycentricCoord_x', ctypes.c_float), + ('barycentricCoord_y', ctypes.c_float), + ('barycentricCoord_z', ctypes.c_float), + ('reserved', ctypes.c_uint)] + +def SaveTFXSkinBinaryFile(filepath, meshShapedagPath, rootPositions): + #--------------------------------------------------------------------------- + # Build a face/triangle index list to convert face index into triangle index + #--------------------------------------------------------------------------- + faceIter = OpenMaya.MItMeshPolygon(meshShapedagPath) + triangleCount = 0 + faceTriaIndexList = [] + index = 0 + bInvertYForUVs = cmds.checkBox("InvertYForUVs",q = True, v = True) + + util = OpenMaya.MScriptUtil() + util.createFromInt(0) + + while not faceIter.isDone(): + faceTriaIndexList.append(triangleCount) + + if faceIter.hasValidTriangulation(): + numTrianglesPtr = util.asIntPtr() + faceIter.numTriangles(numTrianglesPtr) + numTriangles = util.getInt(numTrianglesPtr) + triangleCount += numTriangles + + faceIter.next() + + #---------------------- + # Find the closest face + #---------------------- + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + faceIdList = [] + baryCoordList = [] + uvCoordList = [] + progressBar = ProgressBar('Collecting skin data', len(rootPositions)) + + for i in range(len(rootPositions)): + rootPoint = rootPositions[i] + + # Find the closest point info + meshPt = OpenMaya.MPointOnMesh() + meshIntersector.getClosestPoint(rootPoint, meshPt) + pt = meshPt.getPoint() + + pointOnMesh = OpenMaya.MPoint() + pointOnMesh = pt + + # Find face index + faceId = meshPt.faceIndex() + + # Find triangle index + triangleId = faceTriaIndexList[faceId] + meshPt.triangleIndex() + faceIdList.append(triangleId) + + # Find barycentric coordinates + uPtr = OpenMaya.MScriptUtil().asFloatPtr() + vPtr = OpenMaya.MScriptUtil().asFloatPtr() + meshPt.getBarycentricCoords(uPtr,vPtr) + uvw = OpenMaya.MPoint() + uvw.x = OpenMaya.MScriptUtil(uPtr).asFloat() + uvw.y = OpenMaya.MScriptUtil(vPtr).asFloat() + uvw.z = 1.0 - uvw.x - uvw.y + baryCoordList.append(uvw) + + # TODO: Why are there negative barycentric coords? + #if uvw.x < 0 or uvw.y < 0 or uvw.z < 0: + # print 'uvw:', uvw.x, uvw.y, uvw.z + + # Find UV coordinates + util = OpenMaya.MScriptUtil() + util.createFromList([0.0, 0.0], 2) + uv_ptr = util.asFloat2Ptr() + meshFn.getUVAtPoint(rootPoint, uv_ptr) + u = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 0) + v = OpenMaya.MScriptUtil.getFloat2ArrayItem(uv_ptr, 0, 1) + uv_coord = OpenMaya.MPoint() + uv_coord.x = u + uv_coord.y = v + uv_coord.z = 0 + uvCoordList.append(uv_coord) + + # update progress gui + progressBar.Increment() + + progressBar.Kill() + + #-------------------- + # Save a tfxskin file + #-------------------- + tfxSkinObj = TressFXSkinFileObject() + tfxSkinObj.version = 1 + tfxSkinObj.numHairs = len(faceIdList) + tfxSkinObj.numTriangles = 0 + tfxSkinObj.hairToMeshMap_Offset = ctypes.sizeof(TressFXSkinFileObject) + tfxSkinObj.perStrandUVCoordniate_Offset = tfxSkinObj.hairToMeshMap_Offset + len(faceIdList) * ctypes.sizeof(HairToTriangleMapping) + + f = open(filepath, "wb") + f.write(tfxSkinObj) + + progressBar = ProgressBar('Saving a tfxskin file', len(faceIdList) + len(uvCoordList)) + + for i in xrange(len(faceIdList)): + mapping = HairToTriangleMapping() + mapping.mesh = 0 + mapping.triangle = faceIdList[i] + + uvw = baryCoordList[i] + mapping.barycentricCoord_x = uvw.x + mapping.barycentricCoord_y = uvw.y + mapping.barycentricCoord_z = uvw.z + + f.write(mapping) + progressBar.Increment() + + # per strand uv coordinate + for i in xrange(len(uvCoordList)): + uv_coord = uvCoordList[i] + p = Point() + p.x = uv_coord.x + + if bInvertYForUVs: + p.y = 1.0 - uv_coord.y # DirectX has it inverted + + p.z = uv_coord.z + f.write(p) + progressBar.Increment() + + f.close() + progressBar.Kill() + + return + +def GetSortedWeightsFromOneVertex(_maxJointsPerVertex, vertexIndex, jointIndexArray, weightArray): + final_pairs = [] + sumFinal = 0.0 + + #noDupNonzeroWts = cmds.checkBox("noDupBoneWts", q = True, v = True) + + for j in range(_maxJointsPerVertex): + weight = weightArray[vertexIndex*_maxJointsPerVertex + j] + joint_index = jointIndexArray[vertexIndex*_maxJointsPerVertex + j] + + bFound = False + for k in range(len(final_pairs)): + if final_pairs[k].joint_index == joint_index: + #if noDupNonzeroWts: + # if final_pairs[k].weight == 0: #no dup bones case + # final_pairs[k].weight += weight + #else: + # final_pairs[k].weight += weight + final_pairs[k].weight += weight + bFound = True + break + + if bFound == False: + pair = WeightJointIndexPair() + pair.weight = weight + pair.joint_index = joint_index + final_pairs.append(pair) + + #Set joint index to the user defined root/root weight (default is joint 0 with 0 weight) if the weight is zero. + for i in xrange(len(final_pairs)): + if final_pairs[i].weight == 0: + final_pairs[i].joint_index = defaultJointRootIndex + final_pairs[i].weight = defaultJointRootWeight + sumFinal += final_pairs[i].weight + + #Normalize so that the sum of the final pairs weight is 1.0 (must be done after we have a final summation of the total weight) + bNormalizeVtWts = cmds.checkBox("RenormalizeFinalPairs", q = True, v = True) + if (bNormalizeVtWts == True): + if (sumFinal > 0.0): + for i in xrange(len(final_pairs)): + final_pairs[i].weight /= sumFinal + else: + cmds.warning("TressFX: problem with final weights for vertex: %d, total weight <= 0.0: Try using joint subset + custom root joint/weight to compensate." % vertexIndex) + + final_pairs.sort() + + # number of elements of final_pairs could be more than _maxJointsPerVertex but it should be at least _maxJointsPerVertex. + # If you really want it to be exactly _maxJointsPerVertex, you can try to pop out elements. + return final_pairs + + +def is_match(regex, text): + pattern = re.compile(regex, text) + return pattern.search(text) is not None + +def ExportMesh(filepath, meshShapedagPath): + meshFn = OpenMaya.MFnMesh(meshShapedagPath) + meshIntersector = OpenMaya.MMeshIntersector() + meshIntersector.create(meshShapedagPath.node()) + + faceIdList = [] + baryCoordList = [] + + points = OpenMaya.MPointArray() + meshFn.getPoints(points, OpenMaya.MSpace.kWorld) + + normals = OpenMaya.MFloatVectorArray() + meshFn.getVertexNormals(False, normals, OpenMaya.MSpace.kWorld) + + triangleCounts = OpenMaya.MIntArray() + triangleVertexIndices = OpenMaya.MIntArray() # the size of this array is three times of the number of total triangles + meshFn.getTriangles(triangleCounts, triangleVertexIndices) + + #------------------------- + # Get skin cluster object + #------------------------- + skinClusterName = '' + mesh_shape_name = meshFn.name() + skinClusters = cmds.listHistory(mesh_shape_name) + skinClusters = cmds.ls(skinClusters, type="skinCluster") + if skinClusters: + skinClusterName = skinClusters[0] + else: + cmds.warning('TressFX: No skin cluster found on '+ mesh_shape_name) + return + + #print skinClusterName + + # get the MFnSkinCluster using skinClusterName + selList = OpenMaya.MSelectionList() + selList.add(skinClusterName) + skinClusterNode = OpenMaya.MObject() + selList.getDependNode(0, skinClusterNode) + skinFn = OpenMayaAnim.MFnSkinCluster(skinClusterNode) + + dagPaths = MDagPathArray() + skinFn.influenceObjects(dagPaths) + + # influence object is a joint + influenceObjectsNames = [] + + #do we need to remove the namespace if present? + bRemoveNSColMesh = cmds.checkBox("removeNamespaceCM", q = True, v = True) + + #check if we need to scale the points + sceneScaleCol = cmds.optionMenu('scalingCollisionOptionMenu', query=True, value=True) + sceneScaleCol = float(sceneScaleCol) + print("TressFX: Exporting Collision Mesh:scene scale multiplier = %f" % sceneScaleCol) #Scaling, must apply to collision and hair exporting + + + # get joint names + #currently a collision mesh will parse through all the joints for that skinCluster (no limiting to a subset at this time) + for i in range(dagPaths.length()): + influenceName = dagPaths[i].partialPathName() + if bRemoveNSColMesh: + influenceNameList = re.split("[:]", influenceName) + if len(influenceNameList) != 1: #has a namespace prefix + influenceObjectsNames.append(influenceNameList[-1]) + else: + influenceObjectsNames.append(influenceNameList[0]) + else: + influenceObjectsNames.append(influenceName) # Need to remove namespace? + #influenceObjectsNames.append(influenceName) # Need to remove namespace? + + skinMeshes = cmds.skinCluster(skinClusterName, query=1, geometry=1) + geoIter = OpenMaya.MItGeometry(meshShapedagPath) + infCount = OpenMaya.MScriptUtil() + infCountPtr = infCount.asUintPtr() + numVertices = geoIter.count() + + weightArray = [0] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint weight array for all vertices. Each vertex will have TRESSFX_MAX_INFLUENTIAL_BONE_COUNT weights. + # It is initialized with zero for empty weight in case there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + jointIndexArray = [-1] * TRESSFX_MAX_INFLUENTIAL_BONE_COUNT * numVertices # joint index array for all vertices. It is initialized with -1 for an empty element in case + # there are less weights than TRESSFX_MAX_INFLUENTIAL_BONE_COUNT . + + # collect bone weights for all vertices in the mesh + index = 0 + + progressBar = ProgressBar('Collect data', numVertices) + + while geoIter.isDone() == False: + weights = OpenMaya.MDoubleArray() + skinFn.getWeights(meshShapedagPath, geoIter.currentItem(), weights, infCountPtr) + + weightJointIndexPairs = [] + + for i in range(len(weights)): + pair = WeightJointIndexPair() + pair.weight = weights[i] + pair.joint_index = i + weightJointIndexPairs.append(pair) + + + weightJointIndexPairs.sort() + + a = 0 + + for j in range(min(len(weightJointIndexPairs), TRESSFX_MAX_INFLUENTIAL_BONE_COUNT )): + weightArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].weight + jointIndexArray[index*TRESSFX_MAX_INFLUENTIAL_BONE_COUNT + a] = weightJointIndexPairs[j].joint_index + a += 1 + + index += 1 + progressBar.Increment() + geoIter.next() + + progressBar.Kill() + + #---------------------------------------------------------- + # We collected all necessary data. Now save them in file. + #---------------------------------------------------------- + totalProgress = points.length() + triangleVertexIndices.length() / 3 + len(influenceObjectsNames) + progressBar = ProgressBar('Export collision mesh', totalProgress) + + f = open(filepath, "w") + f.write("# TressFX collision mesh exported by TressFX Exporter in Maya\n") + + # Write all bone (joint) names + f.write("numOfBones %g\n" % (len(influenceObjectsNames))) + f.write("# bone index, bone name\n") + for i in range(len(influenceObjectsNames)): + f.write("%d %s\n" % (i, influenceObjectsNames[i])) + progressBar.Increment() + + # write vertex positions and skinning data + f.write("numOfVertices %g\n" % (points.length())) + f.write("# vertex index, vertex position x, y, z, normal x, y, z, joint index 0, joint index 1, joint index 2, joint index 3, weight 0, weight 1, weight 2, weight 3\n") + for vertexIndex in xrange(points.length()): + point = points[vertexIndex] + #do we have any scaling? + if (sceneScaleCol != 1.0): + #print("export: doing scaling..not 1.0") + point.x = point.x * sceneScaleCol + point.y = point.y * sceneScaleCol + point.z = point.z * sceneScaleCol + + normal = normals[vertexIndex] + weightJointIndexPairs = GetSortedWeightsFromOneVertex(TRESSFX_MAX_INFLUENTIAL_BONE_COUNT , vertexIndex, jointIndexArray, weightArray) + f.write("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g\n" % (vertexIndex, point.x, point.y, point.z, normal.x, normal.y, normal.z, weightJointIndexPairs[0].joint_index, weightJointIndexPairs[1].joint_index, weightJointIndexPairs[2].joint_index, weightJointIndexPairs[3].joint_index, + weightJointIndexPairs[0].weight, weightJointIndexPairs[1].weight, weightJointIndexPairs[2].weight, weightJointIndexPairs[3].weight)) + #todo: make this error checking optional, most of the time, it is unneeded + sumWts = 0.0 + sumWts = weightJointIndexPairs[0].weight + weightJointIndexPairs[1].weight + weightJointIndexPairs[2].weight+ weightJointIndexPairs[3].weight + if sumWts <= 0.0: + cmds.warning('TressFX: this vertex(%d) has zero total weight or negative weights' % vertexIndex) + if sumWts > 1.001: #python seems to think 1 is greater than 1.0, so adding a threshold + cmds.warning('TressFX: this vertex(%d) has bone weights that total > 1 [%f]' % (vertexIndex, sumWts)) + + progressBar.Increment() + + # write triangle face indices + f.write("numOfTriangles %g\n" % (triangleVertexIndices.length() / 3)) + f.write("# triangle index, vertex index 0, vertex index 1, vertex index 2\n") + for i in range(triangleVertexIndices.length() / 3): + f.write("%g %d %d %d\n" % (i, triangleVertexIndices[i * 3 + 0], triangleVertexIndices[i * 3 + 1], triangleVertexIndices[i * 3 + 2])) + progressBar.Increment() + + f.close() + progressBar.Kill() + return + +def DoExportCollisionMesh(*args): + #------------------------------ + # Find the selected mesh shape + #------------------------------ + meshShapedagPath = OpenMaya.MDagPath() + + if selected_mesh_shape_name == '': + cmds.warning("TressFX: To export skin or bone data, base mesh must be set.\n") + return + + allObject = cmds.ls(selected_mesh_shape_name) + cmds.select(allObject) # TODO: This selection makes hair curves unselected. This is not a problem but just inconvenient for users if they want to keep the curves selected. + + sel_list = OpenMaya.MSelectionList() + OpenMaya.MGlobal.getActiveSelectionList(sel_list) + + if sel_list.length() == 0: + return + + sel_list.getDagPath(0, meshShapedagPath) + meshShapedagPath.extendToShape() # get mesh shape + + basicFilter = "*.tfxmesh" + filepath = cmds.fileDialog2(fileFilter=basicFilter, dialogStyle=2, caption="Save a tfx collision mesh file(*.tfxmesh)", fileMode=0) + + if filepath == None or len(filepath) == 0: + return + + ExportMesh(filepath[0], meshShapedagPath) + return + diff --git a/Gems/AtomTressFX/External/license.txt b/Gems/AtomTressFX/External/license.txt new file mode 100644 index 0000000000..6adade0178 --- /dev/null +++ b/Gems/AtomTressFX/External/license.txt @@ -0,0 +1,19 @@ +Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. + +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/Gems/AtomTressFX/Hair_builders_files.cmake b/Gems/AtomTressFX/Hair_builders_files.cmake new file mode 100644 index 0000000000..8245e93fdb --- /dev/null +++ b/Gems/AtomTressFX/Hair_builders_files.cmake @@ -0,0 +1,14 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Builders/HairAssetBuilder.h + Code/Builders/HairAssetBuilder.cpp + Code/Builders/HairBuilderComponent.h + Code/Builders/HairBuilderComponent.cpp +) diff --git a/Gems/AtomTressFX/Hair_builders_shared_files.cmake b/Gems/AtomTressFX/Hair_builders_shared_files.cmake new file mode 100644 index 0000000000..228f0130ed --- /dev/null +++ b/Gems/AtomTressFX/Hair_builders_shared_files.cmake @@ -0,0 +1,12 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Builders/HairBuilderModule.h + Code/Builders/HairBuilderModule.cpp +) diff --git a/Gems/AtomTressFX/Hair_files.cmake b/Gems/AtomTressFX/Hair_files.cmake new file mode 100644 index 0000000000..c726d931f7 --- /dev/null +++ b/Gems/AtomTressFX/Hair_files.cmake @@ -0,0 +1,149 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +#set(tressfx_sources +set(FILES + External/Code/src/Math/Vector3D.h + External/Code/src/Math/Vector3D.cpp + External/Code/src/Math/Transform.h + External/Code/src/Math/Transform.cpp + External/Code/src/Math/Quaternion.h + External/Code/src/Math/Quaternion.cpp + External/Code/src/Math/Matrix33.h + External/Code/src/Math/Matrix33.cpp + + External/Code/src/TressFX/AMD_Types.h + External/Code/src/TressFX/AMD_TressFX.h + External/Code/src/TressFX/TressFXCommon.h + External/Code/src/TressFX/TressFXAsset.h + External/Code/src/TressFX/TressFXAsset.cpp + External/Code/src/TressFX/TressFXConstantBuffers.h + External/Code/src/TressFX/TressFXFileFormat.h + External/Code/src/TressFX/TressFXSettings.h + External/Code/src/TressFX/TressFXSettings.cpp +# External/Code/src/Math/Quaternion.h +#) +# +#set(atom_hair_sources + Code/HairModule.h + Code/Rendering/HairCommon.h + Code/Rendering/HairCommon.cpp + Code/Rendering/HairDispatchItem.h + Code/Rendering/HairDispatchItem.cpp + Code/Rendering/HairFeatureProcessor.cpp + Code/Rendering/HairFeatureProcessor.h + Code/Rendering/HairRenderObject.cpp + Code/Rendering/HairRenderObject.h + Code/Rendering/SharedBuffer.cpp + Code/Rendering/SharedBuffer.h + Code/Rendering/HairLightingModels.h + Code/Rendering/HairGlobalSettings.h + Code/Rendering/HairGlobalSettings.cpp + Code/Rendering/HairGlobalSettingsBus.h +#) +# +#set(atom_hair_components + Code/Components/HairSystemComponent.h + Code/Components/HairSystemComponent.cpp + Code/Components/EditorHairComponent.h + Code/Components/EditorHairComponent.cpp + Code/Components/HairComponent.h + Code/Components/HairComponent.cpp + Code/Components/HairComponentController.h + Code/Components/HairComponentController.cpp + Code/Components/HairComponentConfig.h + Code/Components/HairComponentConfig.cpp +#) +# +#set(atom_hair_passes + Code/Passes/HairSkinningComputePass.h + Code/Passes/HairSkinningComputePass.cpp + Code/Passes/HairPPLLRasterPass.h + Code/Passes/HairPPLLRasterPass.cpp + Code/Passes/HairPPLLResolvePass.h + Code/Passes/HairPPLLResolvePass.cpp +#) +# +#set(atom_hair_interfaces + Code/Rendering/HairBuffersSemantics.h + Code/Rendering/HairSharedBufferInterface.h + Code/Components/HairBus.h + + Code/Assets/HairAsset.h + Code/Assets/HairAsset.cpp +#) +#set(shaders_sources + # Srgs and Utility files + Assets/Shaders/HairSrgs.azsli + Assets/Shaders/HairSimulationSrgs.azsli + Assets/Shaders/HairRenderingSrgs.azsli + Assets/Shaders/HairSimulationCommon.azsli + Assets/Shaders/HairStrands.azsli + Assets/Shaders/HairUtilities.azsli + Assets/Shaders/HairLighting.azsli + Assets/Shaders/HairLightingEquations.azsli + Assets/Shaders/HairLightTypes.azsli + Assets/Shaders/HairSurface.azsli + + # Simulation Compute shaders + Assets/Shaders/HairSimulationCompute.azsl + + # Collision shaders - to be included soon +# Assets/Shaders/HairCollisionPrepareSDF.azsl +# Assets/Shaders/HairCollisionWithSDF.azsl + + # Rendering shaders + Assets/Shaders/HairRenderingFillPPLL.azsl + Assets/Shaders/HairRenderingResolvePPLL.azsl + + # Simulation .shader files + Assets/Shaders/HairGlobalShapeConstraintsCompute.shader + Assets/Shaders/HairCalculateStrandLevelDataCompute.shader + Assets/Shaders/HairVelocityShockPropagationCompute.shader + Assets/Shaders/HairLocalShapeConstraintsCompute.shader + Assets/Shaders/HairLengthConstraintsWindAndCollisionCompute.shader + Assets/Shaders/HairUpdateFollowHairCompute.shader + + # Rendering .shader file + Assets/Shaders/HairRenderingFillPPLL.shader + Assets/Shaders/HairRenderingResolvePPLL.shader + + # Colisions .shader files - to be included soon +# Assets/Shaders/HairCollisionInitializeSDF.shader +# Assets/Shaders/HairCollisionConstructSDF.shader +# Assets/Shaders/HairCollisionFinalizeSDF.shader +# Assets/Shaders/HairCollisionWithSDF.shader +#) +# +#set(atom_hair_passes + Assets/Passes/HairParentPass.pass + Assets/Passes/HairGlobalShapeConstraintsCompute.pass + Assets/Passes/HairCalculateStrandLevelDataCompute.pass + Assets/Passes/HairVelocityShockPropagationCompute.pass + Assets/Passes/HairLocalShapeConstraintsCompute.pass + Assets/Passes/HairLengthConstraintsWindAndCollisionCompute.pass + Assets/Passes/HairUpdateFollowHairCompute.pass + Assets/Passes/HairFillPPLL.pass + Assets/Passes/HairResolvePPLL.pass +) + +set(SKIP_UNITY_BUILD_INCLUSION_FILES +#Add files that are in the shared here. +) + +#include_directories(src src/TressFX) +#add_subdirectory(src) + +source_group("Math Sources" FILES ${math_sources}) +source_group("TressFX Sources" FILES ${tressfx_sources}) +source_group("Atom Hair Sources" FILES ${atom_hair_sources}) +source_group("Atom Hair Components" FILES ${atom_hair_components}) +source_group("Atom Hair Passes" FILES ${atom_hair_passes}) +source_group("Atom Hair Interfaces" FILES ${atom_hair_interfaces}) +source_group("Common Sources" FILES ${common_sources}) +source_group("Shader Sources" FILES ${shaders_sources}) \ No newline at end of file diff --git a/Gems/AtomTressFX/Hair_shared_files.cmake b/Gems/AtomTressFX/Hair_shared_files.cmake new file mode 100644 index 0000000000..c5ae2861bd --- /dev/null +++ b/Gems/AtomTressFX/Hair_shared_files.cmake @@ -0,0 +1,17 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + Code/Rendering/HairBuffersSemantics.h + Code/Rendering/HairSharedBufferInterface.h + Code/Components/HairBus.h + Code/Components/HairSystemComponent.h + Code/HairModule.h + Code/HairModule.cpp + Code/HairModuleUnsupported.cpp +) diff --git a/Gems/AtomTressFX/Tools/Launch_Cmd.bat b/Gems/AtomTressFX/Tools/Launch_Cmd.bat new file mode 100644 index 0000000000..2a45d0cf2c --- /dev/null +++ b/Gems/AtomTressFX/Tools/Launch_Cmd.bat @@ -0,0 +1,43 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Set up and run project CMD prompt for TAtomTressFX Gem +:: Puts you in the CMD within the dev environment + +:: Set up window +TITLE AtomTressFX (Hair) Interface Cmd +:: Use obvious color to prevent confusion (Grey with Yellow Text) +COLOR 8E + +%~d0 +cd %~dp0 +PUSHD %~dp0 + +:: Keep changes local +SETLOCAL enableDelayedExpansion + +CALL %~dp0\Project_Env.bat + +echo. +echo _____________________________________________________________________ +echo. +echo ~ AtomTressFX (Hair) Interface CMD ... +echo _____________________________________________________________________ +echo. + +:: Create command prompt with environment +CALL %windir%\system32\cmd.exe + +ENDLOCAL + +:: Return to starting directory +POPD + +:END_OF_FILE \ No newline at end of file diff --git a/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat b/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat new file mode 100644 index 0000000000..d5b002851d --- /dev/null +++ b/Gems/AtomTressFX/Tools/Launch_Maya_2020.bat @@ -0,0 +1,80 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Launches maya with a bunch of local hooks for AtomTressFX (Hair) plugins +:: ToDo: move all of this to a .json data driven boostrapping system + +@echo off + +%~d0 +cd %~dp0 +PUSHD %~dp0 + +echo ________________________________ +echo ~ calling PROJ_Env.bat + +:: Keep changes local +SETLOCAL enableDelayedExpansion + +:: PY version Major +set DCCSI_PY_VERSION_MAJOR=2 +echo DCCSI_PY_VERSION_MAJOR = %DCCSI_PY_VERSION_MAJOR% + +:: PY version Major +set DCCSI_PY_VERSION_MINOR=7 +echo DCCSI_PY_VERSION_MINOR = %DCCSI_PY_VERSION_MINOR% + +:: Maya Version +set MAYA_VERSION=2020 +echo MAYA_VERSION = %MAYA_VERSION% + +:: if a local customEnv.bat exists, run it +IF EXIST "%~dp0Project_Env.bat" CALL %~dp0Project_Env.bat + +echo ________________________________ +echo Launching Maya %MAYA_VERSION% for Lumberyard... + +:::: Set Maya native project acess to this project +set MAYA_PROJECT=%LY_PROJECT_PATH% +echo MAYA_PROJECT = %LY_PROJECT_PATH% + +:: DX11 Viewport +Set MAYA_VP2_DEVICE_OVERRIDE = VirtualDeviceDx11 + +:: add plug-in path to AtomTressFX +set TRESSFX_PLUG_IN_PATH=%LY_DEV%\Gems\AtomTressFX\Tools\Maya +:: also attached to maya's built-it env var +set MAYA_PLUG_IN_PATH=%TRESSFX_PLUG_IN_PATH%;%MAYA_PLUG_IN_PATH% +echo MAYA_PLUG_IN_PATH = %MAYA_PLUG_IN_PATH% + +:: configure local xgen data so we can store it with test data +:: https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/ENU/Maya-CharEffEnvBuild/files/GUID-6ED517C7-7346-4A6E-A9CF-37D2B8511C36-htm.html +Set XGEN_CONFIG_PATH=%LY_PROJECT_PATH%\AssetData +echo XGEN_CONFIG_PATH = %XGEN_CONFIG_PATH% + +:: Default to the right version of Maya if we can detect it... and launch +IF EXIST "%MAYA_LOCATION%\bin\Maya.exe" ( + start "" "%MAYA_LOCATION%\bin\Maya.exe" %* +) ELSE ( + Where maya.exe 2> NUL + IF ERRORLEVEL 1 ( + echo Maya.exe could not be found + pause + ) ELSE ( + start "" Maya.exe %* + ) +) + +:: Return to starting directory +POPD + +:END_OF_FILE + +exit /b 0 \ No newline at end of file diff --git a/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py b/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py index 0af3729b69..c44eae2ec1 100755 --- a/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py +++ b/Gems/AtomTressFX/Tools/Maya/TressFX_Exporter.py @@ -1,7 +1,8 @@ -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. # -# SPDX-License-Identifier: Apache-2.0 OR MIT +# Modifications Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) AND MIT # # diff --git a/Gems/AtomTressFX/Tools/Project_Env.bat b/Gems/AtomTressFX/Tools/Project_Env.bat new file mode 100644 index 0000000000..69b71e2149 --- /dev/null +++ b/Gems/AtomTressFX/Tools/Project_Env.bat @@ -0,0 +1,82 @@ +@echo off + +REM +REM Copyright (c) Contributors to the Open 3D Engine Project. +REM For complete copyright and license terms please see the LICENSE at the root of this distribution. +REM +REM SPDX-License-Identifier: Apache-2.0 OR MIT +REM +REM + +:: Sets up local project env for AtomTressFX + +:: Store current dir +%~d0 +cd %~dp0 +PUSHD %~dp0 + +:: Put you project env vars and overrides here + +:: chanhe the relative path up to dev +set DEV_REL_PATH=../.. +set ABS_PATH=%~dp0 + +CD /D .. +set LY_PROJECT_PATH=%CD% +for %%a in (%CD%) do set LY_PROJECT=%%~na + +echo. +echo _____________________________________________________________________ +echo. +echo ~ %LY_PROJECT% Project Environment ... +echo _____________________________________________________________________ +echo. + +:: for this tool environment and it's assets this Gem is the Maya project +echo LY_PROJECT = %LY_PROJECT% +:: this Gem is the Maya project path +echo LY_PROJECT_PATH = %LY_PROJECT_PATH% + +:: Change to root Lumberyard dev dir +CD /D %LY_PROJECT_PATH%\%DEV_REL_PATH% +set LY_DEV=%CD% +echo LY_DEV = %LY_DEV% + +:: Override the default maya version +set MAYA_VERSION=2020 +echo MAYA_VERSION = %MAYA_VERSION% + +:: now runt the DCCsi env +CALL %LY_DEV%\Gems\AtomLyIntegration\TechnicalArt\DccScriptingInterface\Launchers\Windows\Env_Maya.bat + +rem :: Constant Vars (Global) +rem SET LYPY_GDEBUG=0 +rem echo LYPY_GDEBUG = %LYPY_GDEBUG% +rem SET LYPY_DEV_MODE=0 +rem echo LYPY_DEV_MODE = %LYPY_DEV_MODE% +rem SET LYPY_DEBUGGER=WING +rem echo LYPY_DEBUGGER = %LYPY_DEBUGGER% + +:: DCCsi Maya plugins access +:: set DCCSI_MAYA_PLUG_IN_PATH=%DCCSI_SDK_MAYA_PATH%\plugins +:: add plug-in path to AtomTressFX +set TRESSFX_PLUG_IN_PATH=%LY_PROJECT_PATH%\Tools\Maya +:: also attached to maya's built-it env var +set MAYA_PLUG_IN_PATH=%TRESSFX_PLUG_IN_PATH%;%MAYA_PLUG_IN_PATH% +echo MAYA_PLUG_IN_PATH = %MAYA_PLUG_IN_PATH% + +:: Restore original directory +popd + +:: Change to root dir +CD /D %ABS_PATH% + +:: if the user has set up a custom env call it +IF EXIST "%~dp0User_Env.bat" CALL %~dp0User_Env.bat + +GOTO END_OF_FILE + +:: Return to starting directory +POPD + +:END_OF_FILE \ No newline at end of file diff --git a/Gems/AtomTressFX/gem.json b/Gems/AtomTressFX/gem.json index f6ff2b41d5..d3e1294568 100644 --- a/Gems/AtomTressFX/gem.json +++ b/Gems/AtomTressFX/gem.json @@ -4,7 +4,7 @@ "license": "Apache-2.0 Or MIT", "origin": "Open 3D Engine - o3de.org", "type": "Code", - "summary": "The Atom TressFX Gem provides realistic hair and fur simulation and rendering in Atom and Open 3D Engine with AMD TressFX.", + "summary": "Atom TressFX Gem provides a cutting edge hair and fur simulation and rendering in Atom enhancing the AMD TressFX 4.1. The open source TressFX can be found here: https://github.com/GPUOpen-Effects/TressFX", "canonical_tags": ["Gem"], "user_tags": ["Rendering", "Physics", "Animation"], "requirements": "", diff --git a/Gems/AtomTressFX/workspace.mel b/Gems/AtomTressFX/workspace.mel new file mode 100644 index 0000000000..d7ebf26b04 --- /dev/null +++ b/Gems/AtomTressFX/workspace.mel @@ -0,0 +1,89 @@ +//Maya 2020 Project Definition + +workspace -fr "fluidCache" ""; +workspace -fr "images" ".maya_data/images"; +workspace -fr "JT_ATF" ""; +workspace -fr "offlineEdit" ".maya_data/scenes/edits"; +workspace -fr "STEP_ATF Export" ""; +workspace -fr "furShadowMap" ""; +workspace -fr "SVG" ""; +workspace -fr "scripts" "Tools/Maya/Scripts"; +workspace -fr "DAE_FBX" ""; +workspace -fr "shaders" "Tools/Maya/Shaders"; +workspace -fr "NX_ATF" ""; +workspace -fr "furFiles" ""; +workspace -fr "CATIAV5_ATF Export" ""; +workspace -fr "OBJ" ".maya_data/obj"; +workspace -fr "PARASOLID_ATF Export" ""; +workspace -fr "FBX export" "Assets/Objects"; +workspace -fr "furEqualMap" ""; +workspace -fr "textures" "Assets/textures"; +workspace -fr "BIF" ""; +workspace -fr "lights" ".maya_data/renderData/shaders"; +workspace -fr "DAE_FBX export" ""; +workspace -fr "aliasWire" ".maya_data/data"; +workspace -fr "CATIAV5_ATF" ""; +workspace -fr "SAT_ATF Export" ""; +workspace -fr "movie" ".maya_data/movies"; +workspace -fr "ASS Export" ""; +workspace -fr "autoSave" ".maya_data/autoSave"; +workspace -fr "move" ".maya_data/move"; +workspace -fr "mayaAscii" ""; +workspace -fr "NX_ATF Export" ""; +workspace -fr "sound" ".maya_data/sound"; +workspace -fr "mayaBinary" ""; +workspace -fr "timeEditor" ""; +workspace -fr "RIBexport" ".maya_data/data"; +workspace -fr "DWG_ATF" ""; +workspace -fr "mentalray" ".maya_data/renderData/mentalray"; +workspace -fr "Arnold-USD" ""; +workspace -fr "JT_ATF Export" ""; +workspace -fr "iprImages" ".maya_data/renderData/iprImages"; +workspace -fr "FBX" "Assets/Objects"; +workspace -fr "renderData" ".maya_data/renderData"; +workspace -fr "CATIAV4_ATF" ""; +workspace -fr "fileCache" ""; +workspace -fr "eps" ""; +workspace -fr "Fbx" "Assets/Objects"; +workspace -fr "IGESexport" ".maya_data/data"; +workspace -fr "3dPaintTextures" ".maya_data/3dPaintTextures"; +workspace -fr "translatorData" ""; +workspace -fr "mel" ".maya_data/mel"; +workspace -fr "DXF_ATF Export" ""; +workspace -fr "IGES" ".maya_data/data"; +workspace -fr "particles" ".maya_data/particles"; +workspace -fr "DXFexport" ".maya_data/data"; +workspace -fr "DXF_ATF" ""; +workspace -fr "scene" "Assets/Objects"; +workspace -fr "renderScenes" ".maya_data/renderScenes"; +workspace -fr "SAT_ATF" ""; +workspace -fr "PROE_ATF" ""; +workspace -fr "WIRE_ATF Export" ""; +workspace -fr "sourceImages" "ArtSource/Images"; +workspace -fr "RIB" ".maya_data/data"; +workspace -fr "furImages" ""; +workspace -fr "clips" ".maya_data/clips"; +workspace -fr "Adobe(R) Illustrator(R)" ".maya_data/data"; +workspace -fr "animExport" ".maya_data/data"; +workspace -fr "mentalRay" ".maya_data/mentalRay"; +workspace -fr "STEP_ATF" ""; +workspace -fr "DWG_ATF Export" ""; +workspace -fr "depth" ".maya_data/renderData/depth"; +workspace -fr "sceneAssembly" ""; +workspace -fr "IGES_ATF Export" ""; +workspace -fr "teClipExports" ""; +workspace -fr "IGES_ATF" ""; +workspace -fr "PARASOLID_ATF" ""; +workspace -fr "ASS" ""; +workspace -fr "Substance" ".maya_data/data"; +workspace -fr "audio" ".maya_data/sound"; +workspace -fr "EPS" ".maya_data/data"; +workspace -fr "Alembic" "Assets/Objects"; +workspace -fr "diskCache" ".maya_data/cache"; +workspace -fr "illustrator" ""; +workspace -fr "WIRE_ATF" ""; +workspace -fr "templates" "ArtSource/SceneTemplates"; +workspace -fr "animImport" ".maya_data/data"; +workspace -fr "OBJexport" "Assets/Objects"; +workspace -fr "furAttrMap" ""; +workspace -fr "DXF" ".maya_data/data"; diff --git a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h index 658f15786f..6000873db1 100644 --- a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h +++ b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h @@ -91,6 +91,7 @@ namespace EMotionFX /// Enables rendering of the actor. virtual bool GetRenderCharacter() const = 0; virtual void SetRenderCharacter(bool enable) = 0; + virtual bool GetRenderActorVisible() const = 0; /// Returns skinning method used by the actor. virtual SkinningMethod GetSkinningMethod() const = 0; diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp index ab55f909c2..206cae3f59 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.cpp @@ -212,6 +212,7 @@ namespace EMotionFX ->Event("DebugDrawRoot", &ActorComponentRequestBus::Events::DebugDrawRoot) ->Event("GetRenderCharacter", &ActorComponentRequestBus::Events::GetRenderCharacter) ->Event("SetRenderCharacter", &ActorComponentRequestBus::Events::SetRenderCharacter) + ->Event("GetRenderActorVisible", &ActorComponentRequestBus::Events::GetRenderActorVisible) ->VirtualProperty("RenderCharacter", "GetRenderCharacter", "SetRenderCharacter") ; @@ -367,6 +368,14 @@ namespace EMotionFX } ////////////////////////////////////////////////////////////////////////// + bool ActorComponent::GetRenderActorVisible() const + { + if (m_renderActorInstance) + { + return m_renderActorInstance->IsVisible(); + } + return false; + } SkinningMethod ActorComponent::GetSkinningMethod() const { return m_configuration.m_skinningMethod; diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h index f834456e45..b376fa891d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h @@ -119,6 +119,7 @@ namespace EMotionFX void DebugDrawRoot(bool enable) override; bool GetRenderCharacter() const override; void SetRenderCharacter(bool enable) override; + bool GetRenderActorVisible() const override; SkinningMethod GetSkinningMethod() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp index 94e52a172f..cf0ceab25d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.cpp @@ -244,6 +244,14 @@ namespace EMotionFX } ////////////////////////////////////////////////////////////////////////// + bool EditorActorComponent::GetRenderActorVisible() const + { + if (m_renderActorInstance) + { + return m_renderActorInstance->IsVisible(); + } + return false; + } size_t EditorActorComponent::GetNumJoints() const { const Actor* actor = m_actorAsset->GetActor(); diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h index 10c75860cf..e8f76bdd49 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h @@ -57,6 +57,7 @@ namespace EMotionFX ActorInstance* GetActorInstance() override { return m_actorInstance.get(); } bool GetRenderCharacter() const override; void SetRenderCharacter(bool enable) override; + bool GetRenderActorVisible() const override; size_t GetNumJoints() const override; SkinningMethod GetSkinningMethod() const override; From 66ab15a4b673b5f440a2d498648db9ceca7c758c Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Mon, 4 Oct 2021 09:39:35 -0700 Subject: [PATCH 072/226] Removing old EntityReplicationManager.h that got re-added, this has been moved to public includes Signed-off-by: kberg-amzn --- .../EntityReplicationManager.h | 213 ------------------ 1 file changed, 213 deletions(-) delete mode 100644 Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h deleted file mode 100644 index 28a0963a57..0000000000 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.h +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace AzNetworking -{ - class IConnection; - class IConnectionListener; -} - -namespace Multiplayer -{ - class IEntityDomain; - class EntityReplicator; - - //! @class EntityReplicationManager - //! @brief Handles replication of relevant entities for one connection. - class EntityReplicationManager final - { - public: - using EntityReplicatorMap = AZStd::map>; - - enum class Mode - { - Invalid, - LocalServerToRemoteClient, - LocalServerToRemoteServer, - LocalClientToRemoteServer, - }; - - EntityReplicationManager(AzNetworking::IConnection& connection, AzNetworking::IConnectionListener& connectionListener, Mode mode); - ~EntityReplicationManager() = default; - - void SetRemoteHostId(HostId hostId); - HostId GetRemoteHostId() const; - - void ActivatePendingEntities(); - void SendUpdates(AZ::TimeMs hostTimeMs); - void Clear(bool forMigration); - - bool SetEntityRebasing(NetworkEntityHandle& entityHandle); - - void MigrateAllEntities(); - void MigrateEntity(NetEntityId netEntityId); - bool CanMigrateEntity(const ConstNetworkEntityHandle& entityHandle) const; - - bool HasRemoteAuthority(const ConstNetworkEntityHandle& entityHandle) const; - - void SetEntityDomain(AZStd::unique_ptr entityDomain); - IEntityDomain* GetEntityDomain(); - void SetReplicationWindow(AZStd::unique_ptr replicationWindow); - IReplicationWindow* GetReplicationWindow(); - - void GetEntityReplicatorIdList(AZStd::list& outList); - uint32_t GetEntityReplicatorCount(NetEntityRole localNetworkRole); - - void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage); - - void AddAutonomousEntityReplicatorCreatedHandler(AZ::Event::Handler& handler); - - bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message); - bool HandleEntityDeleteMessage(EntityReplicator* entityReplicator, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); - bool HandleEntityUpdateMessage(AzNetworking::IConnection* invokingConnection, const AzNetworking::IPacketHeader& packetHeader, const NetworkEntityUpdateMessage& updateMessage); - bool HandleEntityRpcMessage(AzNetworking::IConnection* invokingConnection, NetworkEntityRpcMessage& message); - - AZ::TimeMs GetResendTimeoutTimeMs() const; - - void SetMaxRemoteEntitiesPendingCreationCount(uint32_t maxPendingEntities); - void SetEntityActivationTimeSliceMs(AZ::TimeMs timeSliceMs); - void SetEntityPendingRemovalMs(AZ::TimeMs entityPendingRemovalMs); - - AzNetworking::IConnection& GetConnection(); - AZ::TimeMs GetFrameTimeMs(); - - void AddReplicatorToPendingSend(const EntityReplicator& entityReplicator); - - bool IsUpdateModeToServerClient(); - - private: - AZ_DISABLE_COPY_MOVE(EntityReplicationManager); - - enum class UpdateValidationResult - { - HandleMessage, // Handle an entity update message - DropMessage, // Do not handle an entity update message, but don't disconnect (could be out of order/date and isn't relevant) - DropMessageAndDisconnect, // Do not handle the message, it is malformed and we should disconnect the connection - }; - - UpdateValidationResult ValidateUpdate(const NetworkEntityUpdateMessage& updateMessage, AzNetworking::PacketId packetId, EntityReplicator* entityReplicator); - - using RpcMessages = AZStd::list; - bool DispatchOrphanedRpc(NetworkEntityRpcMessage& message, EntityReplicator* entityReplicator); - - using EntityReplicatorList = AZStd::deque; - EntityReplicatorList GenerateEntityUpdateList(); - - void SendEntityUpdateMessages(EntityReplicatorList& replicatorList); - void SendEntityRpcs(RpcMessages& rpcMessages, bool reliable); - - void MigrateEntityInternal(NetEntityId entityId); - void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle); - void OnPostEntityMigration(const ConstNetworkEntityHandle& entityHandle, HostId remoteHostId, AzNetworking::ConnectionId connectionId); - - EntityReplicator* AddEntityReplicator(const ConstNetworkEntityHandle& entityHandle, NetEntityRole netEntityRole); - - const EntityReplicator* GetEntityReplicator(NetEntityId entityId) const; - EntityReplicator* GetEntityReplicator(NetEntityId entityId); - EntityReplicator* GetEntityReplicator(const ConstNetworkEntityHandle& entityHandle); - - void UpdateWindow(); - - bool HandlePropertyChangeMessage - ( - AzNetworking::IConnection* invokingConnection, - EntityReplicator* entityReplicator, - AzNetworking::PacketId packetId, - NetEntityId netEntityId, - NetEntityRole netEntityRole, - AzNetworking::ISerializer& serializer, - const PrefabEntityId& prefabEntityId - ); - - void AddReplicatorToPendingRemoval(const EntityReplicator& replicator); - void ClearRemovedReplicators(); - - class OrphanedEntityRpcs - : public AzNetworking::ITimeoutHandler - { - public: - OrphanedEntityRpcs(EntityReplicationManager& replicationManager); - virtual ~OrphanedEntityRpcs() = default; - void Update(); - bool DispatchOrphanedRpcs(EntityReplicator& entityReplicator); - void AddOrphanedRpc(NetEntityId entityId, NetworkEntityRpcMessage& entityRpcMessage); - AZStd::size_t Size() const { return m_entityRpcMap.size(); } - private: - AzNetworking::TimeoutResult HandleTimeout(AzNetworking::TimeoutQueue::TimeoutItem& item) override; - struct OrphanedRpcs - { - OrphanedRpcs() = default; - OrphanedRpcs(OrphanedRpcs&& rhs) - { - m_rpcMessages.swap(rhs.m_rpcMessages); - m_timeoutId = rhs.m_timeoutId; - rhs.m_timeoutId = AzNetworking::TimeoutId{ 0 }; - } - RpcMessages m_rpcMessages; - AzNetworking::TimeoutId m_timeoutId = AzNetworking::TimeoutId{ 0 }; - }; - typedef AZStd::unordered_map EntityRpcMap; - EntityRpcMap m_entityRpcMap; - AzNetworking::TimeoutQueue m_timeoutQueue; - EntityReplicationManager& m_replicationManager; - }; - OrphanedEntityRpcs m_orphanedEntityRpcs; - EntityReplicatorMap m_entityReplicatorMap; - - //! The set of entities that we have sent creation messages for, but have not received confirmation back that the create has occurred - AZStd::unordered_set m_remoteEntitiesPendingCreation; - AZStd::deque m_entitiesPendingActivation; - AZStd::set m_replicatorsPendingRemoval; - AZStd::unordered_set m_replicatorsPendingSend; - - // Deferred RPC Sends - RpcMessages m_deferredRpcMessagesReliable; - RpcMessages m_deferredRpcMessagesUnreliable; - - AZ::Event m_autonomousEntityReplicatorCreated; - EntityExitDomainEvent::Handler m_entityExitDomainEventHandler; - - AZ::ScheduledEvent m_clearRemovedReplicators; - AZ::ScheduledEvent m_updateWindow; - - AzNetworking::IConnectionListener& m_connectionListener; - AzNetworking::IConnection& m_connection; - AZStd::unique_ptr m_replicationWindow; - AZStd::unique_ptr m_remoteEntityDomain; - - AZ::TimeMs m_entityActivationTimeSliceMs = AZ::TimeMs{ 0 }; - AZ::TimeMs m_entityPendingRemovalMs = AZ::TimeMs{ 0 }; - AZ::TimeMs m_frameTimeMs = AZ::TimeMs{ 0 }; - HostId m_remoteHostId = InvalidHostId; - uint32_t m_maxRemoteEntitiesPendingCreationCount = AZStd::numeric_limits::max(); - uint32_t m_maxPayloadSize = 0; - Mode m_updateMode = Mode::Invalid; - - friend class EntityReplicator; - }; -} - From 9f209dceea9bf5f8e12971ca66247b7744ff8b2a Mon Sep 17 00:00:00 2001 From: kberg-amzn Date: Mon, 4 Oct 2021 09:43:43 -0700 Subject: [PATCH 073/226] Fix casing issue with client hierarchy tests Signed-off-by: kberg-amzn --- Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp index a58f23bae2..d6dd068c3f 100644 --- a/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp +++ b/Gems/Multiplayer/Code/Tests/ClientHierarchyTests.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include namespace Multiplayer { From 29b5f4c9e544a64ccbe852a2aea1f8626cd3b29e Mon Sep 17 00:00:00 2001 From: bosnichd Date: Mon, 4 Oct 2021 11:29:59 -0600 Subject: [PATCH 074/226] Added Floor, Ceil, and Round functions to AZ::Vector2/3/4 (#4470) https://github.com/o3de/o3de/issues/4216 Signed-off-by: bosnichd --- Code/Framework/AzCore/AzCore/Math/Vector2.h | 7 +++++++ Code/Framework/AzCore/AzCore/Math/Vector2.inl | 18 ++++++++++++++++++ Code/Framework/AzCore/AzCore/Math/Vector3.h | 7 +++++++ Code/Framework/AzCore/AzCore/Math/Vector3.inl | 18 ++++++++++++++++++ Code/Framework/AzCore/AzCore/Math/Vector4.h | 7 +++++++ Code/Framework/AzCore/AzCore/Math/Vector4.inl | 18 ++++++++++++++++++ 6 files changed, 75 insertions(+) diff --git a/Code/Framework/AzCore/AzCore/Math/Vector2.h b/Code/Framework/AzCore/AzCore/Math/Vector2.h index b2b1ceeb4d..7c37d74135 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector2.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector2.h @@ -180,6 +180,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector2& v) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector2. + //! @{ + Vector2 GetFloor() const; + Vector2 GetCeil() const; + Vector2 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector2. //! @{ Vector2 GetMin(const Vector2& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector2.inl b/Code/Framework/AzCore/AzCore/Math/Vector2.inl index 80b2a43475..086be2bbc3 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector2.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector2.inl @@ -398,6 +398,24 @@ namespace AZ } + AZ_MATH_INLINE Vector2 Vector2::GetFloor() const + { + return Vector2(Simd::Vec2::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector2 Vector2::GetCeil() const + { + return Vector2(Simd::Vec2::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector2 Vector2::GetRound() const + { + return Vector2(Simd::Vec2::Round(m_value)); + } + + AZ_MATH_INLINE Vector2 Vector2::GetMin(const Vector2& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR diff --git a/Code/Framework/AzCore/AzCore/Math/Vector3.h b/Code/Framework/AzCore/AzCore/Math/Vector3.h index 4bf0a18894..821dc8292c 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector3.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector3.h @@ -211,6 +211,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector3& rhs) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector3. + //! @{ + Vector3 GetFloor() const; + Vector3 GetCeil() const; + Vector3 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector3. //! @{ Vector3 GetMin(const Vector3& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector3.inl b/Code/Framework/AzCore/AzCore/Math/Vector3.inl index 56baac5aa1..879ade38cf 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector3.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector3.inl @@ -481,6 +481,24 @@ namespace AZ } + AZ_MATH_INLINE Vector3 Vector3::GetFloor() const + { + return Vector3(Simd::Vec3::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector3 Vector3::GetCeil() const + { + return Vector3(Simd::Vec3::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector3 Vector3::GetRound() const + { + return Vector3(Simd::Vec3::Round(m_value)); + } + + AZ_MATH_INLINE Vector3 Vector3::GetMin(const Vector3& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR diff --git a/Code/Framework/AzCore/AzCore/Math/Vector4.h b/Code/Framework/AzCore/AzCore/Math/Vector4.h index 6bd67e8831..eaa18bbaff 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector4.h +++ b/Code/Framework/AzCore/AzCore/Math/Vector4.h @@ -189,6 +189,13 @@ namespace AZ bool IsGreaterEqualThan(const Vector4& rhs) const; //! @} + //! Floor/Ceil/Round functions, operate on each component individually, result will be a new Vector4. + //! @{ + Vector4 GetFloor() const; + Vector4 GetCeil() const; + Vector4 GetRound() const; // Ties to even (banker's rounding) + //! @} + //! Min/Max functions, operate on each component individually, result will be a new Vector4. //! @{ Vector4 GetMin(const Vector4& v) const; diff --git a/Code/Framework/AzCore/AzCore/Math/Vector4.inl b/Code/Framework/AzCore/AzCore/Math/Vector4.inl index 4b4cf2f84f..001dfb6a4d 100644 --- a/Code/Framework/AzCore/AzCore/Math/Vector4.inl +++ b/Code/Framework/AzCore/AzCore/Math/Vector4.inl @@ -464,6 +464,24 @@ namespace AZ } + AZ_MATH_INLINE Vector4 Vector4::GetFloor() const + { + return Vector4(Simd::Vec4::Floor(m_value)); + } + + + AZ_MATH_INLINE Vector4 Vector4::GetCeil() const + { + return Vector4(Simd::Vec4::Ceil(m_value)); + } + + + AZ_MATH_INLINE Vector4 Vector4::GetRound() const + { + return Vector4(Simd::Vec4::Round(m_value)); + } + + AZ_MATH_INLINE Vector4 Vector4::GetMin(const Vector4& v) const { #if AZ_TRAIT_USE_PLATFORM_SIMD_SCALAR From 6c3ac70531d36d03590c004b2837337556ba7454 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Mon, 4 Oct 2021 13:09:21 -0500 Subject: [PATCH 075/226] Added the "external_subdirectories" array object to the Project Templates (#4460) Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- Templates/DefaultProject/Template/project.json | 3 ++- Templates/MinimalProject/Template/project.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Templates/DefaultProject/Template/project.json b/Templates/DefaultProject/Template/project.json index 7f6b5d3b78..b52b0baf27 100644 --- a/Templates/DefaultProject/Template/project.json +++ b/Templates/DefaultProject/Template/project.json @@ -11,5 +11,6 @@ "${Name}" ], "icon_path": "preview.png", - "engine": "o3de" + "engine": "o3de", + "external_subdirectories": [] } diff --git a/Templates/MinimalProject/Template/project.json b/Templates/MinimalProject/Template/project.json index 7f6b5d3b78..b52b0baf27 100644 --- a/Templates/MinimalProject/Template/project.json +++ b/Templates/MinimalProject/Template/project.json @@ -11,5 +11,6 @@ "${Name}" ], "icon_path": "preview.png", - "engine": "o3de" + "engine": "o3de", + "external_subdirectories": [] } From 6dcdb5787a933ebaf0f442fa09233d67241e3f99 Mon Sep 17 00:00:00 2001 From: Steve Pham <82231385+spham-amzn@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:57:39 -0700 Subject: [PATCH 076/226] Fix release build errors on Linux/Mac (#4474) * - Fix unused release warnings - Fixed compile errors from missing includes - Commented out missing AZ_ATOM_PROFILE_FUNCTION macro Signed-off-by: Steve Pham * Deleted AZ_ATOM_PROFILE_FUNCTION Signed-off-by: Steve Pham * Adding more unused errors from windows release build, and updates based on PR suggestions Signed-off-by: Steve Pham --- .../AzToolsFramework/Archive/ArchiveComponent.cpp | 2 +- .../AzToolsFramework/Prefab/PrefabSystemComponent.cpp | 2 +- Gems/AtomTressFX/Code/Assets/HairAsset.h | 1 + Gems/AtomTressFX/Code/Rendering/HairCommon.cpp | 6 +++--- Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp | 2 -- Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp | 6 +++--- .../External/Code/src/TressFX/TressFXAsset.cpp | 8 ++++++-- .../External/Code/src/TressFX/TressFXSettings.cpp | 2 ++ 8 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp index 8e07794c33..3d0299667c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/ArchiveComponent.cpp @@ -21,7 +21,7 @@ namespace AzToolsFramework { - constexpr const char s_traceName[] = "ArchiveComponent"; + [[maybe_unused]] constexpr const char s_traceName[] = "ArchiveComponent"; constexpr AZ::u32 s_compressionMethod = AZ::IO::INestedArchive::METHOD_DEFLATE; constexpr AZ::s32 s_compressionLevel = AZ::IO::INestedArchive::LEVEL_NORMAL; constexpr CompressionCodec::Codec s_compressionCodec = CompressionCodec::Codec::ZLIB; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 4f8f575a7b..896e40d929 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -927,7 +927,7 @@ namespace AzToolsFramework PrefabDomValue& instance = instanceIterator->value; AZ_Assert(instance.IsObject(), "Nested instance DOM provided is not a valid JSON object."); - PrefabDomValueReference sourceTemplateName = PrefabDomUtils::FindPrefabDomValue(instance, PrefabDomUtils::SourceName); + [[maybe_unused]] PrefabDomValueReference sourceTemplateName = PrefabDomUtils::FindPrefabDomValue(instance, PrefabDomUtils::SourceName); AZ_Assert(sourceTemplateName, "Couldn't find source template name in the DOM of the nested instance while creating a link."); AZ_Assert(sourceTemplateName->get() == sourceTemplate.GetFilePath().c_str(), "The name of the source template in the nested instance DOM does not match the name of the source template already loaded"); diff --git a/Gems/AtomTressFX/Code/Assets/HairAsset.h b/Gems/AtomTressFX/Code/Assets/HairAsset.h index 7075983e8f..b7dd94bda1 100644 --- a/Gems/AtomTressFX/Code/Assets/HairAsset.h +++ b/Gems/AtomTressFX/Code/Assets/HairAsset.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include diff --git a/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp index 42fc2809fc..9b5fbc9333 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairCommon.cpp @@ -39,7 +39,7 @@ namespace AZ Data::Instance UtilityClass::CreateShaderResourceGroup( Data::Instance shader, const char* shaderResourceGroupId, - const char* moduleName) + [[maybe_unused]] const char* moduleName) { Data::Instance srg = RPI::ShaderResourceGroup::Create(shader->GetAsset(), AZ::Name{ shaderResourceGroupId }); if (!srg) @@ -54,7 +54,7 @@ namespace AZ //! If srg is nullptr the index handle will NOT be set. //! This can be useful when creating a constant buffer or an image. Data::Instance UtilityClass::CreateBuffer( - const char* warningHeader, + [[maybe_unused]] const char* warningHeader, SrgBufferDescriptor& bufferDesc, Data::Instance srg) { @@ -84,7 +84,7 @@ namespace AZ } bool UtilityClass::BindBufferToSrg( - const char* warningHeader, + [[maybe_unused]] const char* warningHeader, Data::Instance buffer, SrgBufferDescriptor& bufferDesc, Data::Instance srg) diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp index c56d4a3489..04f71a79c8 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -201,7 +201,6 @@ namespace AZ void HairFeatureProcessor::Simulate(const FeatureProcessor::SimulatePacket& packet) { AZ_PROFILE_FUNCTION(AzRender); - AZ_ATOM_PROFILE_FUNCTION("Hair", "HairFeatureProcessor: Simulate"); AZ_UNUSED(packet); if (m_hairRenderObjects.empty()) @@ -250,7 +249,6 @@ namespace AZ void HairFeatureProcessor::Render([[maybe_unused]] const FeatureProcessor::RenderPacket& packet) { AZ_PROFILE_FUNCTION(AzRender); - AZ_ATOM_PROFILE_FUNCTION("Hair", "HairFeatureProcessor: Render"); if (!m_initialized || !m_addDispatchEnabled) { // Skip adding dispatches / Draw packets for this frame until initialized and the shaders are ready diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp index f006df6afd..a89a3eb1b8 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp @@ -387,7 +387,7 @@ namespace AZ //! Updates the buffers data for the hair generation. //! Notice: does not update the bone matrices that will be updated every frame. - bool HairRenderObject::UploadGPUData(const char* name, AMD::TressFXAsset* asset) + bool HairRenderObject::UploadGPUData([[maybe_unused]] const char* name, AMD::TressFXAsset* asset) { // The following must correlate the order in HairGenerationBuffersSemantics void* buffersData[uint8_t(HairGenerationBuffersSemantics::NumBufferStreams)] = { @@ -526,7 +526,7 @@ namespace AZ //! Creation of the render Srg m_hairRenderSrg, followed by creation and binding of the //! GPU render resources: vertex thickness, vertex UV, hair albedo maps and two constant buffers. bool HairRenderObject::CreateRenderingGPUResources( - Data::Instance shader, AMD::TressFXAsset& asset, const char* assetName) + Data::Instance shader, AMD::TressFXAsset& asset, [[maybe_unused]] const char* assetName) { //-------------------- Render Srg Creation --------------------- m_hairRenderSrg = UtilityClass::CreateShaderResourceGroup(shader, "HairRenderingMaterialSrg", "Hair Gem"); @@ -592,7 +592,7 @@ namespace AZ return false; } - RHI::ResultCode result = bufferPool->InitBuffer(request); + [[maybe_unused]] RHI::ResultCode result = bufferPool->InitBuffer(request); AZ_Error("Hair Gem", result == RHI::ResultCode::Success, "Failed to initialize index buffer - error [%d]", result); // create index buffer view diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp index 19bb491489..58c66c3b8c 100644 --- a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp @@ -776,9 +776,11 @@ namespace AMD EI_Read((char*)&skinData.weight[j], sizeof(AMD::real32), ioObject); } +#if defined(AZ_ENABLE_TRACING) float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; - AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); +#endif // AZ_ENABLE_TRACING + assert(skinData.weight[0] != 0.0f); // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. @@ -854,9 +856,11 @@ namespace AMD stream->Read(sizeof(AMD::real32), &skinData.weight[j]); } +#if defined(AZ_ENABLE_TRACING) float weightSum = skinData.weight[0] + skinData.weight[1] + skinData.weight[2] + skinData.weight[3]; - AZ_Assert(weightSum > 0.0f, "Weight sum should be greater than 0"); +#endif // AZ_ENABLE_TRACING + assert(skinData.weight[0] != 0.0f); // If bone index is -1, then it means that there is no bone associated to this. In this case we simply replace it with zero. diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp index 42ba6c5cdc..8c7e8a39cd 100644 --- a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXSettings.cpp @@ -27,6 +27,8 @@ #include #include +#include + namespace AMD { void TressFXSimulationSettings::Reflect(AZ::ReflectContext* context) From a52faa7340f7ed85e6de370db21462fe0f33e74d Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Mon, 4 Oct 2021 13:03:55 -0700 Subject: [PATCH 077/226] Fixed qthread error coming from file i/o thread Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Modifier.cpp | 41 ++++++++++++++----- .../View/Windows/Tools/UpgradeTool/Modifier.h | 5 +++ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp index 3c62670ef0..f3da1ba309 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.cpp @@ -203,6 +203,24 @@ namespace ScriptCanvasEditor ModifyNextAsset(); } + void Modifier::ReportSaveResult() + { + AZStd::lock_guard lock(m_mutex); + m_fileSaver.reset(); + + if (m_fileSaveResult.fileSaveError.empty()) + { + ReportModificationSuccess(); + } + else + { + ReportModificationError(m_fileSaveResult.fileSaveError); + } + + m_fileSaveResult = {}; + m_modifyState = ModifyState::Idle; + } + void Modifier::OnFileSaveComplete(const FileSaveResult& result) { if (!result.tempFileRemovalError.empty()) @@ -213,16 +231,10 @@ namespace ScriptCanvasEditor , result.tempFileRemovalError.c_str()); } + AZStd::lock_guard lock(m_mutex); + m_modifyState = ModifyState::ReportResult; m_fileSaver.reset(); - - if (result.fileSaveError.empty()) - { - ReportModificationSuccess(); - } - else - { - ReportModificationError(result.fileSaveError); - } + m_fileSaveResult = result; } void Modifier::OnSystemTick() @@ -328,9 +340,18 @@ namespace ScriptCanvasEditor } else { - if (m_modifyState == ModifyState::Idle) + AZStd::lock_guard lock(m_mutex); + + switch (m_modifyState) { + case ScriptCanvasEditor::VersionExplorer::Modifier::ModifyState::Idle: ModifyCurrentAsset(); + break; + case ScriptCanvasEditor::VersionExplorer::Modifier::ModifyState::ReportResult: + ReportSaveResult(); + break; + default: + break; } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h index 2a8a12e3cf..981a1eb746 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Modifier.h @@ -58,8 +58,11 @@ namespace ScriptCanvasEditor Idle, InProgress, Saving, + ReportResult }; + AZStd::recursive_mutex m_mutex; + // the two states reside in this class because the modification is only complete if the new source file saves out State m_state = State::GatheringDependencies; ModifyState m_modifyState = ModifyState::Idle; @@ -77,6 +80,7 @@ namespace ScriptCanvasEditor ModificationResult m_result; ModificationResults m_results; AZStd::unique_ptr m_fileSaver; + FileSaveResult m_fileSaveResult; void GatherDependencies(); const AZ::Data::AssetInfo& GetCurrentAsset() const; @@ -87,6 +91,7 @@ namespace ScriptCanvasEditor void ModificationComplete(const ModificationResult& result) override; void ReportModificationError(AZStd::string_view report); void ReportModificationSuccess(); + void ReportSaveResult(); void SaveModifiedGraph(const ModificationResult& result); void SortGraphsByDependencies(); void OnFileSaveComplete(const FileSaveResult& result); From c9608846a1de07481f374e777d835000fea8e9bf Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Mon, 4 Oct 2021 15:17:41 -0500 Subject: [PATCH 078/226] =?UTF-8?q?Updated=20the=20AssetProcessorManagerTe?= =?UTF-8?q?st=20LockFileTest=20to=20check=20the=20Source=E2=80=A6=20(#4459?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated the AsetProcessorManagerTest LockFileTest to check the SourceFileNotificationMessage If the SourceFileNotificationMessage indicates that the source file was removed, it triggers the callback to spin off a thread to remove the product file. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Changed SourceFileNotificationMessage cast to use azrtti_cast Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../assetmanager/AssetProcessorManagerTest.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp index 48a86dc5f6..da6e995c97 100644 --- a/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp +++ b/Code/Tools/AssetProcessor/native/tests/assetmanager/AssetProcessorManagerTest.cpp @@ -9,6 +9,7 @@ #include "AssetProcessorManagerTest.h" #include "native/AssetManager/PathDependencyManager.h" #include +#include #include #include @@ -4130,11 +4131,21 @@ struct LockedFileTest MOCK_METHOD2(SendResponse, size_t (unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&)); MOCK_METHOD1(RemoveResponseHandler, void (unsigned)); - size_t Send(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage&) override + size_t Send(unsigned, const AzFramework::AssetSystem::BaseAssetProcessorMessage& message) override { - if(m_callback) + using SourceFileNotificationMessage = AzToolsFramework::AssetSystem::SourceFileNotificationMessage; + switch (message.GetMessageType()) { - m_callback(); + case SourceFileNotificationMessage::MessageType: + if (const auto sourceFileMessage = azrtti_cast(&message); + sourceFileMessage != nullptr && sourceFileMessage->m_type == SourceFileNotificationMessage::NotificationType::FileRemoved + && m_callback) + { + m_callback(); + } + break; + default: + break; } return 0; From 555e95679de00b29e46e56529825c7a08ba807ee Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Mon, 4 Oct 2021 13:20:42 -0700 Subject: [PATCH 079/226] Open CMake GUI from Project Manager (#4360) This provides a fast way for engineers who want to configure -> generate -> open project in IDE -> build & run to do so without waiting for a potentially lengthy Project Manager build. Signed-off-by: AMZN-alexpete <26804013+AMZN-alexpete@users.noreply.github.com> --- .../Platform/Linux/ProjectUtils_linux.cpp | 42 +++++++++++++++-- .../Platform/Mac/ProjectUtils_mac.cpp | 33 +++++++++++++ .../Platform/Windows/ProjectUtils_windows.cpp | 33 ++++++++++++- .../Resources/ProjectManager.qss | 5 ++ .../ProjectManager/Resources/Warning.svg | 1 - .../Source/ProjectButtonWidget.cpp | 47 ++++++++++++++----- .../Source/ProjectButtonWidget.h | 5 +- .../ProjectManager/Source/ProjectUtils.cpp | 30 ++++++++++++ .../ProjectManager/Source/ProjectUtils.h | 2 + .../ProjectManager/Source/ProjectsScreen.cpp | 11 ++++- 10 files changed, 190 insertions(+), 19 deletions(-) diff --git a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp index 56feb9f70a..7867f6e5fd 100644 --- a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp +++ b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace O3DE::ProjectManager { @@ -18,7 +19,10 @@ namespace O3DE::ProjectManager AZ::Outcome GetCommandLineProcessEnvironment() { - return AZ::Success(QProcessEnvironment(QProcessEnvironment::systemEnvironment())); + QProcessEnvironment currentEnvironment(QProcessEnvironment::systemEnvironment()); + currentEnvironment.insert("CC", "clang-12"); + currentEnvironment.insert("CXX", "clang++-12"); + return AZ::Success(currentEnvironment); } AZ::Outcome FindSupportedCompilerForPlatform() @@ -27,7 +31,7 @@ namespace O3DE::ProjectManager auto whichCMakeResult = ProjectUtils::ExecuteCommandResult("which", QStringList{ProjectCMakeCommand}, QProcessEnvironment::systemEnvironment()); if (!whichCMakeResult.IsSuccess()) { - return AZ::Failure(QObject::tr("CMake not found. \n\n" + return AZ::Failure(QObject::tr("CMake not found.

" "Make sure that the minimum version of CMake is installed and available from the command prompt. " "Refer to the O3DE requirements page for more information.")); } @@ -45,10 +49,42 @@ namespace O3DE::ProjectManager return AZ::Success(supportClangCommand); } } - return AZ::Failure(QObject::tr("Clang not found. \n\n" + return AZ::Failure(QObject::tr("Clang not found.

" "Make sure that the clang is installed and available from the command prompt. " "Refer to the O3DE requirements page for more information.")); } + + + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + AZ::Outcome processEnvResult = GetCommandLineProcessEnvironment(); + if (!processEnvResult.IsSuccess()) + { + return AZ::Failure(processEnvResult.GetError()); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome projectBuildPathResult = GetProjectBuildPath(projectPath); + if (projectBuildPathResult.IsSuccess()) + { + projectBuildPath = projectBuildPathResult.GetValue(); + } + + QProcess process; + process.setProcessEnvironment(processEnvResult.GetValue()); + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + + process.setProgram("cmake-gui"); + process.setArguments({ "-S", projectPath, "-B", projectBuildPath }); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("Failed to start CMake GUI")); + } + + return AZ::Success(); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp index 0d150abc3b..b50039790d 100644 --- a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp +++ b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace O3DE::ProjectManager { @@ -61,5 +62,37 @@ namespace O3DE::ProjectManager return AZ::Success(xcodeBuilderVersionNumber); } + + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + const QString cmakeHelp = QObject::tr("Please verify you've installed CMake.app from " + "cmake.org or, if using HomeBrew, " + "have installed it with
brew install --cask cmake
"); + QString cmakeAppPath = QStandardPaths::locate(QStandardPaths::ApplicationsLocation, "CMake.app", QStandardPaths::LocateDirectory); + if (cmakeAppPath.isEmpty()) + { + return AZ::Failure(QObject::tr("CMake.app not found.") + cmakeHelp); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome result = GetProjectBuildPath(projectPath); + if (result.IsSuccess()) + { + projectBuildPath = result.GetValue(); + } + + QProcess process; + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + process.setProgram("open"); + process.setArguments({"-a", "CMake", "--args", "-S", projectPath, "-B", projectBuildPath}); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("CMake.app failed to open.") + cmakeHelp); + } + + return AZ::Success(); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp index d012ca8921..16b80c55e8 100644 --- a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp +++ b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp @@ -92,12 +92,43 @@ namespace O3DE::ProjectManager } } - return AZ::Failure(QObject::tr("Visual Studio 2019 version 16.9.2 or higher not found.\n\n" + return AZ::Failure(QObject::tr("Visual Studio 2019 version 16.9.2 or higher not found.

" "Visual Studio 2019 is required to build this project." " Install any edition of Visual Studio 2019" " or update to a newer version before proceeding to the next step." " While installing configure Visual Studio with these workloads.")); } + AZ::Outcome OpenCMakeGUI(const QString& projectPath) + { + AZ::Outcome processEnvResult = GetCommandLineProcessEnvironment(); + if (!processEnvResult.IsSuccess()) + { + return AZ::Failure(processEnvResult.GetError()); + } + + QString projectBuildPath = QDir(projectPath).filePath(ProjectBuildPathPostfix); + AZ::Outcome projectBuildPathResult = GetProjectBuildPath(projectPath); + if (projectBuildPathResult.IsSuccess()) + { + projectBuildPath = projectBuildPathResult.GetValue(); + } + + QProcess process; + process.setProcessEnvironment(processEnvResult.GetValue()); + + // if the project build path is relative, it should be relative to the project path + process.setWorkingDirectory(projectPath); + + process.setProgram("cmake-gui"); + process.setArguments({ "-S", projectPath, "-B", projectBuildPath }); + if(!process.startDetached()) + { + return AZ::Failure(QObject::tr("Failed to start CMake GUI")); + } + + return AZ::Success(); + } + } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Resources/ProjectManager.qss b/Code/Tools/ProjectManager/Resources/ProjectManager.qss index eeed316cbc..f91a597481 100644 --- a/Code/Tools/ProjectManager/Resources/ProjectManager.qss +++ b/Code/Tools/ProjectManager/Resources/ProjectManager.qss @@ -438,6 +438,11 @@ QTabBar::tab:focus { max-height:26px; } +#projectActionButton, #openEditorButton { + min-height:26px; + max-height:26px; +} + #labelButtonOverlay { background-color: rgba(50,50,50,200); min-width:210px; diff --git a/Code/Tools/ProjectManager/Resources/Warning.svg b/Code/Tools/ProjectManager/Resources/Warning.svg index 28f7bc5f42..a330c9163c 100644 --- a/Code/Tools/ProjectManager/Resources/Warning.svg +++ b/Code/Tools/ProjectManager/Resources/Warning.svg @@ -1,5 +1,4 @@ - diff --git a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp index 0f51524341..c425c344e1 100644 --- a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.cpp @@ -88,6 +88,7 @@ namespace O3DE::ProjectManager QHBoxLayout* horizontalButtonLayout = new QHBoxLayout(); horizontalButtonLayout->addSpacing(34); m_actionButton = new QPushButton(tr("Project Action"), this); + m_actionButton->setObjectName("projectActionButton"); m_actionButton->setVisible(false); horizontalButtonLayout->addWidget(m_actionButton); horizontalButtonLayout->addSpacing(34); @@ -198,6 +199,7 @@ namespace O3DE::ProjectManager QMenu* menu = new QMenu(this); menu->addAction(tr("Edit Project Settings..."), this, [this]() { emit EditProject(m_projectInfo.m_path); }); menu->addAction(tr("Build"), this, [this]() { emit BuildProject(m_projectInfo); }); + menu->addAction(tr("Open CMake GUI..."), this, [this]() { emit OpenCMakeGUI(m_projectInfo); }); menu->addSeparator(); menu->addAction(tr("Open Project folder..."), this, [this]() { @@ -259,15 +261,39 @@ namespace O3DE::ProjectManager } projectActionButton->setText(text); + projectActionButton->setMenu(nullptr); m_actionButtonConnection = connect(projectActionButton, &QPushButton::clicked, lambda); } - void ProjectButton::SetProjectBuildButtonAction() + void ProjectButton::ShowDefaultBuildButton() { - m_projectImageLabel->GetWarningLabel()->setText(tr("Building project required.")); - m_projectImageLabel->GetWarningIcon()->setVisible(true); - m_projectImageLabel->GetWarningLabel()->setVisible(true); - SetProjectButtonAction(tr("Build Project"), [this]() { emit BuildProject(m_projectInfo); }); + QPushButton* projectActionButton = m_projectImageLabel->GetActionButton(); + projectActionButton->setVisible(true); + projectActionButton->setText(tr("Build Project")); + disconnect(m_actionButtonConnection); + + QMenu* menu = new QMenu(this); + QAction* autoBuildAction = menu->addAction(tr("Build Now")); + connect( autoBuildAction, &QAction::triggered, this, [this](){ emit BuildProject(m_projectInfo); }); + + QAction* openCMakeAction = menu->addAction(tr("Open CMake GUI...")); + connect( openCMakeAction, &QAction::triggered, this, [this](){ emit OpenCMakeGUI(m_projectInfo); }); + + projectActionButton->setMenu(menu); + } + + void ProjectButton::ShowBuildRequired() + { + ShowWarning(true, tr("Building project required")); + ShowDefaultBuildButton(); + } + + void ProjectButton::ShowWarning(bool show, const QString& warning) + { + m_projectImageLabel->GetWarningLabel()->setTextInteractionFlags(Qt::LinksAccessibleByMouse); + m_projectImageLabel->GetWarningLabel()->setText(warning); + m_projectImageLabel->GetWarningLabel()->setVisible(show); + m_projectImageLabel->GetWarningIcon()->setVisible(show); } void ProjectButton::SetBuildLogsLink(const QUrl& logUrl) @@ -279,18 +305,15 @@ namespace O3DE::ProjectManager { if (!logUrl.isEmpty()) { - m_projectImageLabel->GetWarningLabel()->setText(tr("Failed to build. Click to view logs.")); + ShowWarning(show, tr("Failed to build. Click to view logs.")); } else { - m_projectImageLabel->GetWarningLabel()->setText(tr("Project failed to build.")); + ShowWarning(show, tr("Project failed to build.")); } - m_projectImageLabel->GetWarningLabel()->setTextInteractionFlags(Qt::LinksAccessibleByMouse); - m_projectImageLabel->GetWarningIcon()->setVisible(show); - m_projectImageLabel->GetWarningLabel()->setVisible(show); - m_projectImageLabel->SetLogUrl(logUrl); - SetProjectButtonAction(tr("Build Project"), [this]() { emit BuildProject(m_projectInfo); }); + SetBuildLogsLink(logUrl); + ShowDefaultBuildButton(); } void ProjectButton::SetProjectBuilding() diff --git a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h index 9f64b74eab..5e81dfc2d9 100644 --- a/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h +++ b/Code/Tools/ProjectManager/Source/ProjectButtonWidget.h @@ -82,9 +82,9 @@ namespace O3DE::ProjectManager void RestoreDefaultState(); void SetProjectButtonAction(const QString& text, AZStd::function lambda); - void SetProjectBuildButtonAction(); void SetBuildLogsLink(const QUrl& logUrl); void ShowBuildFailed(bool show, const QUrl& logUrl); + void ShowBuildRequired(); void SetProjectBuilding(); void SetLaunchButtonEnabled(bool enabled); @@ -99,10 +99,13 @@ namespace O3DE::ProjectManager void RemoveProject(const QString& projectName); void DeleteProject(const QString& projectName); void BuildProject(const ProjectInfo& projectInfo); + void OpenCMakeGUI(const ProjectInfo& projectInfo); private: void enterEvent(QEvent* event) override; void leaveEvent(QEvent* event) override; + void ShowWarning(bool show, const QString& warning); + void ShowDefaultBuildButton(); ProjectInfo m_projectInfo; diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp index 81eb70391d..e248613d1f 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -537,5 +539,33 @@ namespace O3DE::ProjectManager QString resultOutput = execProcess.readAllStandardOutput(); return AZ::Success(resultOutput); } + + AZ::Outcome GetProjectBuildPath(const QString& projectPath) + { + auto registry = AZ::SettingsRegistry::Get(); + + // the project_build_path should be in the user settings registry inside the project folder + AZ::IO::FixedMaxPath projectUserPath(projectPath.toUtf8().constData()); + projectUserPath /= AZ::SettingsRegistryInterface::DevUserRegistryFolder; + if (!QDir(projectUserPath.c_str()).exists()) + { + return AZ::Failure(QObject::tr("Failed to find the user registry folder %1").arg(projectUserPath.c_str())); + } + + AZ::SettingsRegistryInterface::Specializations specializations; + if(!registry->MergeSettingsFolder(projectUserPath.Native(), specializations, AZ_TRAIT_OS_PLATFORM_CODENAME)) + { + return AZ::Failure(QObject::tr("Failed to merge registry settings in user registry folder %1").arg(projectUserPath.c_str())); + } + + AZ::IO::FixedMaxPath projectBuildPath; + if (!registry->Get(projectBuildPath.Native(), AZ::SettingsRegistryMergeUtils::ProjectBuildPath)) + { + return AZ::Failure(QObject::tr("No project build path setting was found in the user registry folder %1").arg(projectUserPath.c_str())); + } + + return AZ::Success(QString(projectBuildPath.c_str())); + } + } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.h b/Code/Tools/ProjectManager/Source/ProjectUtils.h index 0866b57923..6dd46e3857 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.h +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.h @@ -42,6 +42,8 @@ namespace O3DE::ProjectManager int commandTimeoutSeconds = ProjectCommandLineTimeoutSeconds); AZ::Outcome GetCommandLineProcessEnvironment(); + AZ::Outcome GetProjectBuildPath(const QString& projectPath); + AZ::Outcome OpenCMakeGUI(const QString& projectPath); } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp index b313c05230..cf42da88fa 100644 --- a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp @@ -185,6 +185,15 @@ namespace O3DE::ProjectManager connect(projectButton, &ProjectButton::RemoveProject, this, &ProjectsScreen::HandleRemoveProject); connect(projectButton, &ProjectButton::DeleteProject, this, &ProjectsScreen::HandleDeleteProject); connect(projectButton, &ProjectButton::BuildProject, this, &ProjectsScreen::QueueBuildProject); + connect(projectButton, &ProjectButton::OpenCMakeGUI, this, + [this](const ProjectInfo& projectInfo) + { + AZ::Outcome result = ProjectUtils::OpenCMakeGUI(projectInfo.m_path); + if (!result) + { + QMessageBox::critical(this, tr("Failed to open CMake GUI"), result.GetError(), QMessageBox::Ok); + } + }); return projectButton; } @@ -308,7 +317,7 @@ namespace O3DE::ProjectManager } else { - projectIter.value()->SetProjectBuildButtonAction(); + projectIter.value()->ShowBuildRequired(); } } } From 9823d5cdf21d38c87c37c48a5e38050bbc4b19e7 Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Mon, 4 Oct 2021 13:30:45 -0700 Subject: [PATCH 080/226] LYN-6793 [iOS] [asset_profile] Assets fail to process for iOS due to timeouts (#4456) Signed-off-by: Qing Tao --- Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset | 2 ++ .../ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset | 2 ++ .../Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset | 2 ++ .../ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset | 2 ++ Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset | 2 ++ Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset | 2 ++ .../ImageProcessingAtom/Config/NormalsFromDisplacement.preset | 2 ++ .../ImageProcessingAtom/Config/NormalsWithSmoothness.preset | 2 ++ .../Config/NormalsWithSmoothness_Legacy.preset | 2 ++ Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset | 2 ++ Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset | 2 ++ .../Config/ReflectanceWithSmoothness_Legacy.preset | 2 ++ .../Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset | 2 ++ 13 files changed, 26 insertions(+) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset index e0d043cf20..fe2e7e0cb4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset @@ -40,6 +40,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { @@ -61,6 +62,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset index 8c196530e9..19d2b2bbe6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithGenericAlpha.preset @@ -37,6 +37,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -56,6 +57,7 @@ "_diffuse" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset index 638e31f838..d5acef34d6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset @@ -28,6 +28,7 @@ "_amb", "_ambientocclusion" ], + "MaxTextureSize": 2048, "PixelFormat": "ASTC_4x4" }, "ios": { @@ -41,6 +42,7 @@ "_amb", "_ambientocclusion" ], + "MaxTextureSize": 2048, "PixelFormat": "ASTC_4x4" }, "mac": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset index 628cd673e9..e2e009afc5 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Decal_AlbedoWithOpacity.preset @@ -25,6 +25,7 @@ "_decal" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -39,6 +40,7 @@ "_decal" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset index 8f21ad005b..28ac84d646 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset @@ -46,6 +46,7 @@ "_h" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "SizeReduceLevel": 3, @@ -71,6 +72,7 @@ "_h" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "DiscardAlpha": true, "IsPowerOf2": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset index 8f6c846e82..f5e3a79357 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset @@ -30,6 +30,7 @@ "_emit" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true }, "ios": { @@ -44,6 +45,7 @@ "_emit" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "DiscardAlpha": true }, "mac": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset index 46e97c3443..a960ae41b2 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset @@ -28,6 +28,7 @@ "_bump" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipRenormalize": true, "MipMapSetting": { @@ -43,6 +44,7 @@ "_bump" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipRenormalize": true, "MipMapSetting": { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset index b8f6e38ac1..2c66cf9190 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset @@ -39,6 +39,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "MipRenormalize": true, @@ -60,6 +61,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "MipRenormalize": true, diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset index 58bb02cd72..f7cba42886 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset @@ -32,6 +32,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "UseLegacyGloss": true, @@ -50,6 +51,7 @@ ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "GlossFromNormal": 1, "UseLegacyGloss": true, diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset index 8b66b30f28..53998583cc 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset @@ -45,6 +45,7 @@ "_blend" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -68,6 +69,7 @@ "_blend" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset index e9ea34060b..2ac88dca85 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset @@ -58,6 +58,7 @@ "_rough" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -87,6 +88,7 @@ "_rough" ], "PixelFormat": "ASTC_6x6", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset index e868a44096..7a0c137f07 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset @@ -23,6 +23,7 @@ "_spec" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -35,6 +36,7 @@ "_spec" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset index e52b616f48..f59fd594f4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset @@ -27,6 +27,7 @@ "_refl" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" @@ -41,6 +42,7 @@ "_refl" ], "PixelFormat": "ASTC_4x4", + "MaxTextureSize": 2048, "IsPowerOf2": true, "MipMapSetting": { "MipGenType": "Box" From 093f321b681f477f8d26e22cd2e0ea8dc6f313f9 Mon Sep 17 00:00:00 2001 From: Yaakuro Date: Mon, 4 Oct 2021 23:34:55 +0200 Subject: [PATCH 081/226] Fix issue that gives wrong results for running debugger (#4434) * Fix issue that gives wrong results for running debugger Signed-off-by: Yaakuro * Remove redundant part. Signed-off-by: Yaakuro --- .../Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp index e9c0234ffa..f4d7db802b 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Debug/Trace_UnixLike.cpp @@ -38,7 +38,7 @@ namespace AZ { return false; } - for (size_t i = tracerPidOffset; i < numRead; ++i) + for (size_t i = tracerPidOffset + tracerPidString.length(); i < numRead; ++i) { if (!::isspace(processStatusView[i])) { From 7052ccfa525fe8c3dc56addc82ca78ecf3f4dd32 Mon Sep 17 00:00:00 2001 From: Ken Pruiksma Date: Mon, 4 Oct 2021 16:35:22 -0500 Subject: [PATCH 082/226] Terrain detail and macro texture support (#4403) * Terrain feature processor improvements regarding material, mesh, and lod - Now using a material with pbr lighting for terrain. Removed some of the old shader code that wasn't needed anymore - Move heightmap image declaration to the material so it's not needed in the object SRG anymore - Added prototype code (commented out) for smoothing the terrain with a b-spline weighting function - Mesh data is all made with a proper mesh asset now. - Added basic LOD support (no continuous LOD yet, but it does pop between lod levels) - Moved RenderCommon to be accessible publicly. It contains stencil refs that should be public. Signed-off-by: Ken Pruiksma * Adding more material options to terrain shader Signed-off-by: Ken Pruiksma * Fixing terrain's per object srg because of changes in the default per object srg. Signed-off-by: Ken Pruiksma * Added more features to the terrain material. Shader & Material reloads are now handled. Signed-off-by: Ken Pruiksma * Added stub for terrain render max area setting in the renderer component. Added detail texture tiling setable from the material Signed-off-by: Ken Pruiksma * Missing change to material type from last commit Signed-off-by: Ken Pruiksma * Adding macro material in material type and support detail roughness. Signed-off-by: Ken Pruiksma * Fixing merge issues in terrain material type Signed-off-by: Ken Pruiksma * Adding more features to the terrain material - Macro color and normals - Detail layer fade out - Reoriented detail normals Signed-off-by: Ken Pruiksma * Remove line that unintentionally was added back during a rebase & merge. Signed-off-by: Ken Pruiksma * Fixing previously deleted unused static that came back after a merge. Fixed an issue with macro normals in the terrain shader. Signed-off-by: Ken Pruiksma --- .../Terrain/DefaultPbrTerrain.material | 23 +- .../Materials/Terrain/PbrTerrain.materialtype | 306 +++++++++++++++++- .../Shaders/Terrain/TerrainCommon.azsli | 56 +++- .../Terrain/TerrainPBR_ForwardPass.azsl | 49 ++- .../TerrainWorldRendererComponent.cpp | 47 ++- .../TerrainWorldRendererComponent.h | 19 +- .../EditorTerrainWorldRendererComponent.cpp | 8 +- .../TerrainFeatureProcessor.cpp | 53 +-- .../TerrainRenderer/TerrainFeatureProcessor.h | 12 +- 9 files changed, 519 insertions(+), 54 deletions(-) diff --git a/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material b/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material index 095fbba21a..c0de5969b2 100644 --- a/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material +++ b/Gems/Terrain/Assets/Materials/Terrain/DefaultPbrTerrain.material @@ -4,8 +4,27 @@ "parentMaterial": "", "propertyLayoutVersion": 1, "properties": { - "settings": { - "baseColor": [ 0.78, 0.59, 0.48 ] + "macroColor": { + "useTexture": false + }, + "macroNormal": { + "useTexture": false + }, + "baseColor": { + "color": [ 0.18, 0.18, 0.18 ], + "useTexture": false + }, + "normal": + { + "useTexture": false + }, + "roughness": + { + "useTexture": false + }, + "specularF0": + { + "useTexture": false } } } diff --git a/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype b/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype index bf6cbbb850..191fa7a731 100644 --- a/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype +++ b/Gems/Terrain/Assets/Materials/Terrain/PbrTerrain.materialtype @@ -100,25 +100,269 @@ } }, { - "id": "baseColor", - "displayName": "Base Color", + "id": "detailTextureMultiplier", + "displayName": "Detail Texture UV Multiplier", + "description": "How many times to repeat the detail texture per sector", + "type": "Float", + "defaultValue": 8.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailTextureMultiplier" + } + }, + { + "id": "detailFadeDistance", + "displayName": "Detail Fade Distance (meters)", + "description": "The distance in meters that the detail texture starts to fade", + "type": "Float", + "defaultValue": 100.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailFadeDistance" + } + }, + { + "id": "detailFadeLength", + "displayName": "Detail Fade Length", + "description": "How far beyond Detail Fade Distance where the detail texture no longer applies.", + "type": "Float", + "defaultValue": 50.0, + "connection": { + "type": "ShaderInput", + "id": "m_detailFadeLength" + } + } + ], + "macroColor": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Macro color texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_macroColorMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + + ], + "macroNormal": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Macro normal texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_macroNormalMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "flipX", + "displayName": "Flip X Channel", + "description": "Flip tangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipMacroNormalX" + } + }, + { + "id": "flipY", + "displayName": "Flip Y Channel", + "description": "Flip bitangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipMacroNormalY" + } + } + ], + "baseColor": [ + { + "id": "color", + "displayName": "Color", + "description": "Color is displayed as sRGB but the values are stored as linear color.", "type": "Color", - "defaultValue": [ 0.18, 0.18, 0.18 ], + "defaultValue": [ 1.0, 1.0, 1.0 ], "connection": { "type": "ShaderInput", "id": "m_baseColor" } }, { - "id": "roughness", - "displayName": "Roughness", + "id": "factor", + "displayName": "Factor", + "description": "Strength factor for scaling the base color values. Zero (0.0) is black, white (1.0) is full color.", + "type": "Float", + "defaultValue": 1.0, + "min": 0.0, + "max": 1.0, + "connection": { + "type": "ShaderInput", + "id": "m_baseColorFactor" + } + }, + { + "id": "textureMap", + "displayName": "Texture", + "description": "Base color texture map", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_baseColorMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "textureBlendMode", + "displayName": "Texture Blend Mode", + "description": "Selects the equation to use when combining Color, Factor, and Texture.", + "type": "Enum", + "enumValues": [ "Multiply", "LinearLight", "Lerp", "Overlay" ], + "defaultValue": "Overlay", + "connection": { + "type": "ShaderOption", + "id": "o_baseColorTextureBlendMode" + } + } + ], + "normal": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface normal direction.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_normalMap" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture, or just rely on vertex normals.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "flipX", + "displayName": "Flip X Channel", + "description": "Flip tangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipNormalX" + } + }, + { + "id": "flipY", + "displayName": "Flip Y Channel", + "description": "Flip bitangent direction for this normal map.", + "type": "Bool", + "defaultValue": false, + "connection": { + "type": "ShaderInput", + "id": "m_flipNormalY" + } + }, + { + "id": "factor", + "displayName": "Factor", + "description": "Strength factor for scaling the values", "type": "Float", "defaultValue": 1.0, "min": 0.0, + "softMax": 2.0, + "connection": { + "type": "ShaderInput", + "id": "m_normalFactor" + } + } + ], + "roughness": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface roughness.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_roughnessMap" + } + }, + { + "id": "useTexture", + "description": "Whether to use the texture, or just default to the Factor value.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "factor", + "displayName": "Factor", + "description": "Controls the roughness value", + "type": "Float", + "defaultValue": 1.0, + "min": 0.0, + "max": 1.0, + "connection": { + "type": "ShaderInput", + "id": "m_roughnessFactor" + } + } + ], + "specularF0": [ + { + "id": "textureMap", + "displayName": "Texture", + "description": "Texture for defining surface reflectance.", + "type": "Image", + "connection": { + "type": "ShaderInput", + "id": "m_specularF0Map" + } + }, + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture, or just default to the Factor value.", + "type": "Bool", + "defaultValue": true + }, + { + "id": "factor", + "displayName": "Factor", + "description": "The default IOR is 1.5, which gives you 0.04 (4% of light reflected at 0 degree angle for dielectric materials). F0 values lie in the range 0-0.08, so that is why the default F0 slider is set on 0.5.", + "type": "Float", + "defaultValue": 0.5, + "min": 0.0, "max": 1.0, "connection": { "type": "ShaderInput", - "id": "m_roughness" + "id": "m_specularF0Factor" } } ] @@ -136,5 +380,55 @@ } ], "functors": [ + { + "type": "UseTexture", + "args": { + "textureProperty": "macroColor.textureMap", + "useTextureProperty": "macroColor.useTexture", + "shaderOption": "o_macroColor_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "macroNormal.textureMap", + "useTextureProperty": "macroNormal.useTexture", + "shaderOption": "o_macroNormal_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "baseColor.textureMap", + "useTextureProperty": "baseColor.useTexture", + "dependentProperties": ["baseColor.textureBlendMode"], + "shaderOption": "o_baseColor_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "specularF0.textureMap", + "useTextureProperty": "specularF0.useTexture", + "shaderOption": "o_specularF0_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "normal.textureMap", + "useTextureProperty": "normal.useTexture", + "dependentProperties": ["normal.factor", "normal.flipX", "normal.flipY"], + "shaderOption": "o_normal_useTexture" + } + }, + { + "type": "UseTexture", + "args": { + "textureProperty": "roughness.textureMap", + "useTextureProperty": "roughness.useTexture", + "shaderOption": "o_roughness_useTexture" + } + } ] } diff --git a/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli b/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli index 9df7b35ce8..95d1a73bbd 100644 --- a/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli +++ b/Gems/Terrain/Assets/Shaders/Terrain/TerrainCommon.azsli @@ -7,6 +7,12 @@ #pragma once +#include <../Materials/Types/MaterialInputs/BaseColorInput.azsli> +#include <../Materials/Types/MaterialInputs/RoughnessInput.azsli> +#include <../Materials/Types/MaterialInputs/MetallicInput.azsli> +#include <../Materials/Types/MaterialInputs/SpecularInput.azsli> +#include <../Materials/Types/MaterialInputs/NormalInput.azsli> + ShaderResourceGroup ObjectSrg : SRG_PerObject { row_major float3x4 m_modelToWorld; @@ -70,7 +76,10 @@ ShaderResourceGroup ObjectSrg : SRG_PerObject ShaderResourceGroup TerrainMaterialSrg : SRG_PerMaterial { - Texture2D m_heightmapImage; + Texture2D m_heightmapImage; + float m_detailTextureMultiplier; + float m_detailFadeDistance; + float m_detailFadeLength; Sampler HeightmapSampler { @@ -82,11 +91,52 @@ ShaderResourceGroup TerrainMaterialSrg : SRG_PerMaterial AddressW = Clamp; }; + Sampler m_sampler + { + AddressU = Wrap; + AddressV = Wrap; + MinFilter = Linear; + MagFilter = Linear; + MipFilter = Linear; + MaxAnisotropy = 16; + }; + + // Macro Color + Texture2D m_macroColorMap; + + // Macro normal + Texture2D m_macroNormalMap; + bool m_flipMacroNormalX; + bool m_flipMacroNormalY; + + // Base Color float3 m_baseColor; - float m_roughness; + float m_baseColorFactor; + Texture2D m_baseColorMap; + + // Normal + Texture2D m_normalMap; + bool m_flipNormalX; + bool m_flipNormalY; + float m_normalFactor; + + // Roughness + Texture2D m_roughnessMap; + float m_roughnessFactor; + + // Specular + Texture2D m_specularF0Map; + float m_specularF0Factor; } option bool o_useTerrainSmoothing = false; +option bool o_macroColor_useTexture = true; +option bool o_macroNormal_useTexture = true; +option bool o_baseColor_useTexture = true; +option bool o_specularF0_useTexture = true; +option bool o_normal_useTexture = true; +option bool o_roughness_useTexture = true; +option TextureBlendMode o_baseColorTextureBlendMode = TextureBlendMode::Multiply; struct VertexInput { @@ -98,7 +148,7 @@ struct VertexInput // This function samples a 4x4 neighborhood around the uv. Normally this would take 16 samples, but by taking // advantage of bilinear filtering this can be done with 9 taps on the edges between pixels. The cost is further // reduced by dropping the diagonals. -float SampleBSpline5Tap(Texture2D texture, SamplerState textureSampler, float2 uv, float2 textureSize, float2 rcpTextureSize) +float SampleBSpline5Tap(Texture2D texture, SamplerState textureSampler, float2 uv, float2 textureSize, float2 rcpTextureSize) { // Think of sample locations in the 4x4 neighborhood as having a top left coordinate of 0,0 and // a bottom right coordinate of 3,3. diff --git a/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl index d77b944498..df2a801969 100644 --- a/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl +++ b/Gems/Terrain/Assets/Shaders/Terrain/TerrainPBR_ForwardPass.azsl @@ -71,18 +71,49 @@ ForwardPassOutput TerrainPBR_MainPassPS(VSOutput IN) Surface surface; - // Position, Normal, Roughness + // Position surface.position = IN.m_worldPosition.xyz; - surface.normal = normalize(IN.m_normal); - surface.roughnessLinear = TerrainMaterialSrg::m_roughness; - surface.CalculateRoughnessA(); + float viewDistance = length(ViewSrg::m_worldPosition - surface.position); + float detailFactor = saturate((viewDistance - TerrainMaterialSrg::m_detailFadeDistance) / max(TerrainMaterialSrg::m_detailFadeLength, EPSILON)); + + ObjectSrg::TerrainData terrainData = ObjectSrg::m_terrainData; + float2 origUv = lerp(terrainData.m_uvMin, terrainData.m_uvMax, IN.m_uv); + origUv.y = 1.0 - origUv.y; + float2 detailUv = IN.m_uv * TerrainMaterialSrg::m_detailTextureMultiplier; + + // ------- Normal ------- + float3 macroNormal = IN.m_normal; + if (o_macroNormal_useTexture) + { + macroNormal = GetNormalInputTS(TerrainMaterialSrg::m_macroNormalMap, TerrainMaterialSrg::m_sampler, + origUv, TerrainMaterialSrg::m_flipMacroNormalX, TerrainMaterialSrg::m_flipMacroNormalY, CreateIdentity3x3(), true, 1.0); + } + + float3 detailNormal = GetNormalInputTS(TerrainMaterialSrg::m_normalMap, TerrainMaterialSrg::m_sampler, + detailUv, TerrainMaterialSrg::m_flipNormalX, TerrainMaterialSrg::m_flipNormalY, CreateIdentity3x3(), o_normal_useTexture, TerrainMaterialSrg::m_normalFactor); + + detailNormal = ReorientTangentSpaceNormal(macroNormal, detailNormal); + surface.normal = lerp(detailNormal, macroNormal, detailFactor); + surface.normal = normalize(surface.normal); + + // ------- Macro Color ------- + float3 macroColor = GetBaseColorInput(TerrainMaterialSrg::m_macroColorMap, TerrainMaterialSrg::m_sampler, origUv, TerrainMaterialSrg::m_baseColor.rgb, o_baseColor_useTexture); - // Albedo, SpecularF0 - const float specularF0Factor = 0.5f; - float3 color = TerrainMaterialSrg::m_baseColor; - surface.SetAlbedoAndSpecularF0(color, specularF0Factor, 0.0); + // ------- Base Color ------- + float3 detailColor = GetBaseColorInput(TerrainMaterialSrg::m_baseColorMap, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_baseColor.rgb, o_baseColor_useTexture); + float3 blendedColor = BlendBaseColor(lerp(detailColor, TerrainMaterialSrg::m_baseColor.rgb, detailFactor), macroColor, TerrainMaterialSrg::m_baseColorFactor, o_baseColorTextureBlendMode, o_baseColor_useTexture); + + // ------- Specular ------- + float specularF0Factor = GetSpecularInput(TerrainMaterialSrg::m_specularF0Map, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_specularF0Factor, o_specularF0_useTexture); + specularF0Factor = lerp(specularF0Factor, 0.5, detailFactor); + surface.SetAlbedoAndSpecularF0(blendedColor, specularF0Factor, 0.0); + + // ------- Roughness ------- + surface.roughnessLinear = GetRoughnessInput(TerrainMaterialSrg::m_roughnessMap, TerrainMaterialSrg::m_sampler, detailUv, TerrainMaterialSrg::m_roughnessFactor, 0.0, 1.0, o_roughness_useTexture); + surface.roughnessLinear = lerp(surface.roughnessLinear, 1.0, detailFactor); + surface.CalculateRoughnessA(); - // Clear Coat, Transmission + // Clear Coat, Transmission (Not used for terrain) surface.clearCoat.InitializeToZero(); surface.transmission.InitializeToZero(); diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp index 3bf34fa019..f3eed41717 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp @@ -28,16 +28,27 @@ namespace Terrain AZ::SerializeContext* serialize = azrtti_cast(context); if (serialize) { - serialize->Class()->Version(1); + serialize->Class() + ->Version(1) + ->Field("WorldSize", &TerrainWorldRendererConfig::m_worldSize) + ; - AZ::EditContext* edit = serialize->GetEditContext(); - if (edit) + AZ::EditContext* editContext = serialize->GetEditContext(); + if (editContext) { - edit->Class("Terrain World Renderer Component", "Enables terrain rendering") + editContext->Class("Terrain World Renderer Component", "Enables terrain rendering") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true); + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->DataElement(AZ::Edit::UIHandlers::ComboBox, &TerrainWorldRendererConfig::m_worldSize, "Rendered world size", "The maximum amount of terrain that's rendered") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_512Meters, "512 Meters") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_1024Meters, "1 Kilometer") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_2048Meters, "2 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_4096Meters, "4 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_8192Meters, "8 Kilometers") + ->EnumAttribute(TerrainWorldRendererConfig::WorldSize::_16384Meters, "16 Kilometers") + ; } } } @@ -72,6 +83,28 @@ namespace Terrain TerrainWorldRendererComponent::TerrainWorldRendererComponent(const TerrainWorldRendererConfig& configuration) : m_configuration(configuration) { + switch (configuration.m_worldSize) + { + case TerrainWorldRendererConfig::WorldSize::_512Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(512.0f, 512.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_1024Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(1024.0f, 1024.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_2048Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(2048.0f, 2048.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_4096Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(4096.0f, 4096.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_8192Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(8192.0f, 8192.0f)); + break; + case TerrainWorldRendererConfig::WorldSize::_16384Meters: + m_terrainFeatureProcessor->SetWorldSize(AZ::Vector2(16384.0f, 16384.0f)); + break; + + } } TerrainWorldRendererComponent::~TerrainWorldRendererComponent() diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h index a1e9498be8..cd2a4ea5aa 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h @@ -27,13 +27,28 @@ namespace Terrain { class TerrainFeatureProcessor; - class TerrainWorldRendererConfig + struct TerrainWorldRendererConfig final : public AZ::ComponentConfig { - public: AZ_CLASS_ALLOCATOR(TerrainWorldRendererConfig, AZ::SystemAllocator, 0); AZ_RTTI(TerrainWorldRendererConfig, "{08C5863C-092D-4A69-8226-4978E4F6E343}", AZ::ComponentConfig); static void Reflect(AZ::ReflectContext* context); + + enum class WorldSize : uint8_t + { + Unknown, + + _512Meters, + _1024Meters, + _2048Meters, + _4096Meters, + _8192Meters, + _16384Meters, + + WorldSizeCount, + }; + + WorldSize m_worldSize; }; diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp index 2d42585fa5..3dd8d1e911 100644 --- a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainWorldRendererComponent.cpp @@ -29,10 +29,10 @@ namespace Terrain editContext->Class( "Terrain World Renderer", "") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Category, "Terrain") - ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/TerrainWorldRenderer.svg") - ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/TerrainWorldRenderer.svg") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) + ->Attribute(AZ::Edit::Attributes::Category, "Terrain") + ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/TerrainWorldRenderer.svg") + ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/TerrainWorldRenderer.svg") + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector({ AZ_CRC_CE("Level") })) ; } } diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp index 3e5f9a0608..59984a1b92 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp @@ -76,26 +76,24 @@ namespace Terrain void TerrainFeatureProcessor::Initialize() { - { - // Load the terrain material asynchronously - const AZStd::string materialFilePath = "Materials/Terrain/DefaultPbrTerrain.azmaterial"; - m_materialAssetLoader = AZStd::make_unique(); - *m_materialAssetLoader = AZ::RPI::AssetUtils::AsyncAssetLoader::Create(materialFilePath, 0u, - [&](AZ::Data::Asset assetData, bool success) -> void + // Load the terrain material asynchronously + const AZStd::string materialFilePath = "Materials/Terrain/DefaultPbrTerrain.azmaterial"; + m_materialAssetLoader = AZStd::make_unique(); + *m_materialAssetLoader = AZ::RPI::AssetUtils::AsyncAssetLoader::Create(materialFilePath, 0u, + [&](AZ::Data::Asset assetData, bool success) -> void + { + const AZ::Data::Asset& materialAsset = static_cast>(assetData); + if (success) { - const AZ::Data::Asset& materialAsset = static_cast>(assetData); - if (success) + m_materialInstance = AZ::RPI::Material::FindOrCreate(assetData); + AZ::RPI::MaterialReloadNotificationBus::Handler::BusConnect(materialAsset->GetId()); + if (!materialAsset->GetObjectSrgLayout()) { - m_materialInstance = AZ::RPI::Material::FindOrCreate(assetData); - if (!materialAsset->GetObjectSrgLayout()) - { - AZ_Error("TerrainFeatureProcessor", false, "No per-object ShaderResourceGroup found on terrain material."); - } + AZ_Error("TerrainFeatureProcessor", false, "No per-object ShaderResourceGroup found on terrain material."); } } - ); - } - + } + ); if (!InitializePatchModel()) { AZ_Error(TerrainFPName, false, "Failed to create Terrain render buffers!"); @@ -105,10 +103,9 @@ namespace Terrain void TerrainFeatureProcessor::Deactivate() { - DisableSceneNotification(); - m_patchModel = {}; m_areaData = {}; + AZ::RPI::MaterialReloadNotificationBus::Handler::BusDisconnect(); } void TerrainFeatureProcessor::Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) @@ -291,7 +288,7 @@ namespace Terrain AZ::Vector2 sectorCenterXY = AZ::Vector2(sectorData.m_aabb.GetCenter().GetX(), sectorData.m_aabb.GetCenter().GetY()); float sectorDistance = sectorCenterXY.GetDistance(cameraPositionXY); - float lodForCamera = ceilf(AZ::GetMax(0.0f, log2f(sectorDistance / (GridMeters * 4.0f)))); + float lodForCamera = floorf(AZ::GetMax(0.0f, log2f(sectorDistance / (GridMeters * 4.0f)))); lodChoice = AZ::GetMin(lodChoice, aznumeric_cast(lodForCamera)); } } @@ -317,6 +314,7 @@ namespace Terrain uint16_t gridVertices = gridSize + 1; // For m_gridSize quads, (m_gridSize + 1) vertices are needed. size_t size = gridVertices * gridVertices; + size *= size; patchdata.m_positions.reserve(size); patchdata.m_uvs.reserve(size); @@ -432,4 +430,21 @@ namespace Terrain return success; } + + void TerrainFeatureProcessor::OnMaterialReinitialized([[maybe_unused]] const AZ::Data::Instance& material) + { + for (auto& sectorData : m_sectorData) + { + for (auto& drawPacket : sectorData.m_drawPackets) + { + drawPacket.Update(*GetParentScene()); + } + } + } + + void TerrainFeatureProcessor::SetWorldSize([[maybe_unused]] AZ::Vector2 sizeInMeters) + { + // This will control the max rendering size. Actual terrain size can be much + // larger but this will limit how much is rendered. + } } diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h index 160d3113c2..32f88565c2 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h @@ -27,6 +27,7 @@ #include #include #include +#include namespace AZ::RPI { @@ -41,6 +42,7 @@ namespace Terrain { class TerrainFeatureProcessor final : public AZ::RPI::FeatureProcessor + , private AZ::RPI::MaterialReloadNotificationBus::Handler { public: AZ_RTTI(TerrainFeatureProcessor, "{D7DAC1F9-4A9F-4D3C-80AE-99579BF8AB1C}", AZ::RPI::FeatureProcessor); @@ -52,12 +54,18 @@ namespace Terrain TerrainFeatureProcessor() = default; ~TerrainFeatureProcessor() = default; - ////////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation + // AZ::Component overrides... void Activate() override; void Deactivate() override; + + // AZ::RPI::FeatureProcessor overrides... void Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) override; + // AZ::RPI::MaterialReloadNotificationBus::Handler overrides... + void OnMaterialReinitialized(const AZ::Data::Instance& material) override; + + void SetWorldSize(AZ::Vector2 sizeInMeters); + void UpdateTerrainData(const AZ::Transform& transform, const AZ::Aabb& worldBounds, float sampleSpacing, uint32_t width, uint32_t height, const AZStd::vector& heightData); From 0a8170f52a8006107450d57d4e7f173482252191 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Mon, 4 Oct 2021 16:36:54 -0500 Subject: [PATCH 083/226] Added IsDirectory function to SystemFile (#4454) * Added IsDirectory function to SystemFile This takes the implementation in LocalFileIO and uses it for SystemFile and then just has LocalFileIO call the SystemFile implementation Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed logic to detect the WinApi FILE_ATTRIBUTE_DIRECTORY attribute Updated the FileIO.cpp test to use AZ::IO::Path and removed direct uses of AZStd::string Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding googletest printers for string and Path classes Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the SystemFile_WinAPI functions to use AZStd::to_wstring This makes the the SystemFile function convert from UTF-8 to UTF-16 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../Framework/AzCore/AzCore/IO/SystemFile.cpp | 6 + Code/Framework/AzCore/AzCore/IO/SystemFile.h | 2 + .../Android/AzCore/IO/SystemFile_Android.cpp | 15 + .../AzCore/IO/SystemFile_UnixLikeDefault.cpp | 10 + .../WinAPI/AzCore/IO/SystemFile_WinAPI.cpp | 173 ++++----- .../AzFramework/IO/LocalFileIO.cpp | 8 + .../AzFramework/IO/LocalFileIO_Android.cpp | 20 -- .../AzFramework/IO/LocalFileIO_UnixLike.cpp | 13 - .../AzFramework/IO/LocalFileIO_WinAPI.cpp | 16 - Code/Framework/AzFramework/Tests/FileIO.cpp | 339 ++++++++---------- Code/Framework/AzTest/AzTest/Printers.cpp | 27 ++ Code/Framework/AzTest/AzTest/Printers.h | 40 +++ Code/Framework/AzTest/AzTest/Printers.inl | 34 ++ Code/Framework/AzTest/AzTest/Utils.h | 2 +- .../AzTest/AzTest/aztest_files.cmake | 3 + 15 files changed, 352 insertions(+), 356 deletions(-) create mode 100644 Code/Framework/AzTest/AzTest/Printers.cpp create mode 100644 Code/Framework/AzTest/AzTest/Printers.h create mode 100644 Code/Framework/AzTest/AzTest/Printers.inl diff --git a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp index 651abb89fe..ac12a59609 100644 --- a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp +++ b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp @@ -35,6 +35,7 @@ namespace Platform SystemFile::SizeType Length(FileHandleType handle, const SystemFile* systemFile); bool Exists(const char* fileName); + bool IsDirectory(const char* filePath); void FindFiles(const char* filter, SystemFile::FindFileCB cb); AZ::u64 ModificationTime(const char* fileName); SystemFile::SizeType Length(const char* fileName); @@ -235,6 +236,11 @@ bool SystemFile::Exists(const char* fileName) return Platform::Exists(fileName); } +bool SystemFile::IsDirectory(const char* filePath) +{ + return Platform::IsDirectory(filePath); +} + void SystemFile::FindFiles(const char* filter, FindFileCB cb) { Platform::FindFiles(filter, cb); diff --git a/Code/Framework/AzCore/AzCore/IO/SystemFile.h b/Code/Framework/AzCore/AzCore/IO/SystemFile.h index 551ce89ce7..39e44f86da 100644 --- a/Code/Framework/AzCore/AzCore/IO/SystemFile.h +++ b/Code/Framework/AzCore/AzCore/IO/SystemFile.h @@ -99,6 +99,8 @@ namespace AZ // Utility functions /// Check if a file or directory exists. static bool Exists(const char* path); + /// Check if path is a directory + static bool IsDirectory(const char* path); /// FindFiles typedef AZStd::function FindFileCB; static void FindFiles(const char* filter, FindFileCB cb); diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp index 001cd57ac5..b9a6cfef9a 100644 --- a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp +++ b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp @@ -368,6 +368,21 @@ namespace Platform return access(fileName, F_OK) == 0; } } + + bool IsDirectory(const char* filePath) + { + if (AZ::Android::Utils::IsApkPath(filePath)) + { + return AZ::Android::APKFileHandler::IsDirectory(AZ::Android::Utils::StripApkPrefix(filePath).c_str()); + } + + struct stat result; + if (stat(filePath, &result) == 0) + { + return S_ISDIR(result.st_mode); + } + return false; + } } // namespace AZ::IO::Platform } // namespace AZ::IO diff --git a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp index 3ca7a3fc76..88c47ed142 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp @@ -249,6 +249,16 @@ namespace Platform { return access(fileName, F_OK) == 0; } + + bool IsDirectory(const char* filePath) + { + struct stat result; + if (stat(filePath, &result) == 0) + { + return S_ISDIR(result.st_mode); + } + return false; + } } } // namespace AZ::IO diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp index 15d779017d..0fe32dcd4a 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -18,7 +19,7 @@ namespace AZ::IO { - + using FixedMaxPathWString = AZStd::fixed_wstring; namespace { //========================================================================= @@ -28,16 +29,9 @@ namespace //========================================================================= DWORD GetAttributes(const char* fileName) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - return GetFileAttributesW(fileNameW); - } - else - { - return INVALID_FILE_ATTRIBUTES; - } + FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + return GetFileAttributesW(fileNameW.c_str()); } //========================================================================= @@ -47,16 +41,9 @@ namespace //========================================================================= BOOL SetAttributes(const char* fileName, DWORD fileAttributes) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - return SetFileAttributesW(fileNameW, fileAttributes); - } - else - { - return FALSE; - } + FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + return SetFileAttributesW(fileNameW.c_str(), fileAttributes); } //========================================================================= @@ -68,9 +55,9 @@ namespace // * GetLastError() on Windows-like platforms // * errno on Unix platforms //========================================================================= - bool CreateDirRecursive(wchar_t* dirPath) + bool CreateDirRecursive(AZ::IO::FixedMaxPathWString& dirPath) { - if (CreateDirectoryW(dirPath, nullptr)) + if (CreateDirectoryW(dirPath.c_str(), nullptr)) { return true; // Created without error } @@ -78,28 +65,24 @@ namespace if (error == ERROR_PATH_NOT_FOUND) { // try to create our parent hierarchy - for (size_t i = wcslen(dirPath); i > 0; --i) + if (size_t i = dirPath.find_last_of(LR"(/\)"); i != FixedMaxPathWString::npos) { - if (dirPath[i] == L'/' || dirPath[i] == L'\\') + wchar_t delimiter = dirPath[i]; + dirPath[i] = 0; // null-terminate at the previous slash + const bool ret = CreateDirRecursive(dirPath); + dirPath[i] = delimiter; // restore slash + if (ret) { - wchar_t delimiter = dirPath[i]; - dirPath[i] = 0; // null-terminate at the previous slash - bool ret = CreateDirRecursive(dirPath); - dirPath[i] = delimiter; // restore slash - if (ret) - { - // now that our parent is created, try to create again - return CreateDirectoryW(dirPath, nullptr) != 0; - } - return false; + // now that our parent is created, try to create again + return CreateDirectoryW(dirPath.c_str(), nullptr) != 0; } } // if we reach here then there was no parent folder to create, so we failed for other reasons } else if (error == ERROR_ALREADY_EXISTS) { - DWORD attributes = GetFileAttributesW(dirPath); - return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + DWORD attributes = GetFileAttributesW(dirPath.c_str()); + return attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } return false; } @@ -152,13 +135,10 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) CreatePath(m_fileName.c_str()); } - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, m_fileName); m_handle = INVALID_HANDLE_VALUE; - if (mbstowcs_s(&numCharsConverted, fileNameW, m_fileName.c_str(), AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - m_handle = CreateFileW(fileNameW, dwDesiredAccess, dwShareMode, 0, dwCreationDisposition, dwFlagsAndAttributes, 0); - } + m_handle = CreateFileW(fileNameW.c_str(), dwDesiredAccess, dwShareMode, 0, dwCreationDisposition, dwFlagsAndAttributes, 0); if (m_handle == INVALID_HANDLE_VALUE) { @@ -350,6 +330,12 @@ namespace Platform return GetAttributes(fileName) != INVALID_FILE_ATTRIBUTES; } + bool IsDirectory(const char* filePath) + { + DWORD attributes = GetAttributes(filePath); + return attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + } + void FindFiles(const char* filter, SystemFile::FindFileCB cb) { @@ -357,35 +343,26 @@ namespace Platform HANDLE hFile; int lastError; - wchar_t filterW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; + AZ::IO::FixedMaxPathWString filterW; + AZStd::to_wstring(filterW, filter); hFile = INVALID_HANDLE_VALUE; - if (mbstowcs_s(&numCharsConverted, filterW, filter, AZ_ARRAY_SIZE(filterW) - 1) == 0) - { - hFile = FindFirstFile(filterW, &fd); - } + hFile = FindFirstFileW(filterW.c_str(), &fd); if (hFile != INVALID_HANDLE_VALUE) { const char* fileName; - char fileNameA[AZ_MAX_PATH_LEN]; - fileName = NULL; - if (wcstombs_s(&numCharsConverted, fileNameA, fd.cFileName, AZ_ARRAY_SIZE(fileNameA) - 1) == 0) - { - fileName = fileNameA; - } + AZ::IO::FixedMaxPathString fileNameUtf8; + AZStd::to_string(fileNameUtf8, fd.cFileName); + fileName = fileNameUtf8.c_str(); cb(fileName, (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0); // List all the other files in the directory. while (FindNextFileW(hFile, &fd) != 0) { - fileName = NULL; - if (wcstombs_s(&numCharsConverted, fileNameA, fd.cFileName, AZ_ARRAY_SIZE(fileNameA) - 1) == 0) - { - fileName = fileNameA; - } + AZStd::to_string(fileNameUtf8, fd.cFileName); + fileName = fileNameUtf8.c_str(); cb(fileName, (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0); } @@ -411,12 +388,9 @@ namespace Platform { HANDLE handle = nullptr; - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - handle = CreateFileW(fileNameW, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - } + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + handle = CreateFileW(fileNameW.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) { @@ -448,12 +422,9 @@ namespace Platform WIN32_FILE_ATTRIBUTE_DATA data = { 0 }; BOOL result = FALSE; - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - result = GetFileAttributesExW(fileNameW, GetFileExInfoStandard, &data); - } + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + result = GetFileAttributesExW(fileNameW.c_str(), GetFileExInfoStandard, &data); if (result) { @@ -473,18 +444,11 @@ namespace Platform bool Delete(const char* fileName) { - wchar_t fileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, fileNameW, fileName, AZ_ARRAY_SIZE(fileNameW) - 1) == 0) - { - if (DeleteFileW(fileNameW) == 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); - return false; - } - } - else + AZ::IO::FixedMaxPathWString fileNameW; + AZStd::to_wstring(fileNameW, fileName); + if (DeleteFileW(fileNameW.c_str()) == 0) { + EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); return false; } @@ -493,20 +457,13 @@ namespace Platform bool Rename(const char* sourceFileName, const char* targetFileName, bool overwrite) { - wchar_t sourceFileNameW[AZ_MAX_PATH_LEN]; - wchar_t targetFileNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, sourceFileNameW, sourceFileName, AZ_ARRAY_SIZE(sourceFileNameW) - 1) == 0 && - mbstowcs_s(&numCharsConverted, targetFileNameW, targetFileName, AZ_ARRAY_SIZE(targetFileNameW) - 1) == 0) - { - if (MoveFileExW(sourceFileNameW, targetFileNameW, overwrite ? MOVEFILE_REPLACE_EXISTING : 0) == 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, (int)GetLastError()); - return false; - } - } - else + AZ::IO::FixedMaxPathWString sourceFileNameW; + AZStd::to_wstring(sourceFileNameW, sourceFileName); + AZ::IO::FixedMaxPathWString targetFileNameW; + AZStd::to_wstring(targetFileNameW, targetFileName); + if (MoveFileExW(sourceFileNameW.c_str(), targetFileNameW.c_str(), overwrite ? MOVEFILE_REPLACE_EXISTING : 0) == 0) { + EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, (int)GetLastError()); return false; } @@ -543,17 +500,14 @@ namespace Platform { if (dirName) { - wchar_t dirPath[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, dirPath, dirName, AZ_ARRAY_SIZE(dirPath) - 1) == 0) + AZ::IO::FixedMaxPathWString dirNameW; + AZStd::to_wstring(dirNameW, dirName); + bool success = CreateDirRecursive(dirNameW); + if (!success) { - bool success = CreateDirRecursive(dirPath); - if (!success) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, (int)GetLastError()); - } - return success; + EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, (int)GetLastError()); } + return success; } return false; } @@ -562,12 +516,9 @@ namespace Platform { if (dirName) { - wchar_t dirNameW[AZ_MAX_PATH_LEN]; - size_t numCharsConverted; - if (mbstowcs_s(&numCharsConverted, dirNameW, dirName, AZ_ARRAY_SIZE(dirNameW) - 1) == 0) - { - return RemoveDirectory(dirNameW) != 0; - } + AZ::IO::FixedMaxPathWString dirNameW; + AZStd::to_wstring(dirNameW, dirName); + return RemoveDirectory(dirNameW.c_str()) != 0; } return false; diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp index 4072c17ea0..49e16dcb90 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp @@ -281,6 +281,14 @@ namespace AZ return SystemFile::Exists(resolvedPath); } + bool LocalFileIO::IsDirectory(const char* filePath) + { + char resolvedPath[AZ_MAX_PATH_LEN]; + ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + + return SystemFile::IsDirectory(resolvedPath); + } + void LocalFileIO::CheckInvalidWrite([[maybe_unused]] const char* path) { #if defined(AZ_ENABLE_TRACING) diff --git a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp index b88c7cf25b..b454755cd4 100644 --- a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp +++ b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp @@ -40,26 +40,6 @@ namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - ANDROID_IO_PROFILE_SECTION_ARGS("IsDir:%s", filePath); - - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - if (AZ::Android::Utils::IsApkPath(resolvedPath)) - { - return AZ::Android::APKFileHandler::IsDirectory(AZ::Android::Utils::StripApkPrefix(resolvedPath).c_str()); - } - - struct stat result; - if (stat(resolvedPath, &result) == 0) - { - return S_ISDIR(result.st_mode); - } - return false; - } - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { char resolvedSourcePath[AZ_MAX_PATH_LEN]; diff --git a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp index c9cbdfbe7d..844464681a 100644 --- a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp +++ b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp @@ -17,19 +17,6 @@ namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - struct stat result; - if (stat(resolvedPath, &result) == 0) - { - return S_ISDIR(result.st_mode); - } - return false; - } - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { char resolvedSourceFilePath[AZ_MAX_PATH_LEN] = {0}; diff --git a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp index 5a56a360a8..64787d4951 100644 --- a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp +++ b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp @@ -15,22 +15,6 @@ namespace AZ { namespace IO { - bool LocalFileIO::IsDirectory(const char* filePath) - { - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); - - wchar_t resolvedPathW[AZ_MAX_PATH_LEN]; - AZStd::to_wstring(resolvedPathW, AZ_MAX_PATH_LEN, resolvedPath); - DWORD fileAttributes = GetFileAttributesW(resolvedPathW); - if (fileAttributes == INVALID_FILE_ATTRIBUTES) - { - return false; - } - - return (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; - } - Result LocalFileIO::FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) { char resolvedPath[AZ_MAX_PATH_LEN]; diff --git a/Code/Framework/AzFramework/Tests/FileIO.cpp b/Code/Framework/AzFramework/Tests/FileIO.cpp index fb95512968..dbee109978 100644 --- a/Code/Framework/AzFramework/Tests/FileIO.cpp +++ b/Code/Framework/AzFramework/Tests/FileIO.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -30,21 +29,6 @@ using namespace AZ; using namespace AZ::IO; using namespace AZ::Debug; -namespace PathUtil -{ - AZStd::string AddSlash(const AZStd::string& path) - { - if (path.empty() || path[path.length() - 1] == '/') - { - return path; - } - if (path[path.length() - 1] == '\\') - { - return path.substr(0, path.length() - 1) + "/"; - } - return path + "/"; - } -} namespace UnitTest { @@ -161,15 +145,16 @@ namespace UnitTest : public ScopedAllocatorSetupFixture { public: - AZStd::string m_root; - AZStd::string folderName; - AZStd::string deepFolder; - AZStd::string extraFolder; - - AZStd::string fileRoot; - AZStd::string file01Name; - AZStd::string file02Name; - AZStd::string file03Name; + AZ::Test::ScopedAutoTempDirectory m_tempDir; + AZ::IO::Path m_root; + AZ::IO::Path m_folderName; + AZ::IO::Path m_deepFolder; + AZ::IO::Path m_extraFolder; + + AZ::IO::Path m_fileRoot; + AZ::IO::Path m_file01Name; + AZ::IO::Path m_file02Name; + AZ::IO::Path m_file03Name; int m_randomFolderKey = 0; FolderFixture() @@ -179,43 +164,13 @@ namespace UnitTest void ChooseRandomFolder() { - char currentDir[AZ_MAX_PATH_LEN]; - AZ::Utils::GetExecutableDirectory(currentDir, AZ_MAX_PATH_LEN); - - folderName = currentDir; - folderName.append("/temp"); - m_root = folderName; - if (folderName.size() > 0) - { - folderName = PathUtil::AddSlash(folderName); - } - - AZStd::string tempName = AZStd::string::format("tmp%08x", m_randomFolderKey); - folderName.append(tempName.c_str()); - folderName = PathUtil::AddSlash(folderName); - AZStd::replace(folderName.begin(), folderName.end(), '\\', '/'); - - // Make sure the drive letter is capitalized - if (folderName.size() > 2) - { - if (folderName[1] == ':') - { - folderName[0] = static_cast(toupper(folderName[0])); - } - } - - deepFolder = folderName; - deepFolder.append("test"); - - deepFolder = PathUtil::AddSlash(deepFolder); - deepFolder.append("subdir"); - - extraFolder = deepFolder; - extraFolder = PathUtil::AddSlash(extraFolder); - extraFolder.append("subdir2"); + m_root = m_tempDir.GetDirectory(); + m_folderName = m_root / AZStd::string::format("tmp%08x", m_randomFolderKey); + m_deepFolder = m_folderName / "test" / "subdir"; + m_extraFolder = m_deepFolder / "subdir2"; // make a couple files there, and in the root: - fileRoot = PathUtil::AddSlash(extraFolder); + m_fileRoot = m_extraFolder; } void SetUp() override @@ -229,37 +184,33 @@ namespace UnitTest { ChooseRandomFolder(); ++m_randomFolderKey; - } while (local.IsDirectory(fileRoot.c_str())); + } while (local.IsDirectory(m_fileRoot.c_str())); - file01Name = fileRoot + "file01.txt"; - file02Name = fileRoot + "file02.asdf"; - file03Name = fileRoot + "test123.wha"; + m_file01Name = m_fileRoot / "file01.txt"; + m_file02Name = m_fileRoot / "file02.asdf"; + m_file03Name = m_fileRoot / "test123.wha"; } void TearDown() override { - if ((!folderName.empty())&&(strstr(folderName.c_str(), "/temp") != nullptr)) - { - // cleanup! - LocalFileIO local; - local.DestroyPath(folderName.c_str()); - } } void CreateTestFiles() { + constexpr auto openMode = SystemFile::OpenMode::SF_OPEN_WRITE_ONLY + | SystemFile::OpenMode::SF_OPEN_CREATE + | SystemFile::OpenMode::SF_OPEN_CREATE_NEW; + constexpr AZStd::string_view testContent("this is just a test"); + LocalFileIO local; - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); - for (const AZStd::string& filename : { file01Name, file02Name, file03Name }) + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); + for (const AZ::IO::Path& filename : { m_file01Name, m_file02Name, m_file03Name }) { -#ifdef AZ_COMPILER_MSVC - FILE* tempFile; - fopen_s(&tempFile, filename.c_str(), "wb"); -#else - FILE* tempFile = fopen(filename.c_str(), "wb"); -#endif - fwrite("this is just a test", 1, 19, tempFile); - fclose(tempFile); + SystemFile tempFile; + tempFile.Open(filename.c_str(), openMode); + + tempFile.Write(testContent.data(), testContent.size()); + tempFile.Close(); } } }; @@ -272,28 +223,23 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(!local.Exists(folderName.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_folderName.c_str())); - AZStd::string longPathCreateTest = folderName; - longPathCreateTest.append("one"); - longPathCreateTest = PathUtil::AddSlash(longPathCreateTest); - longPathCreateTest.append("two"); - longPathCreateTest = PathUtil::AddSlash(longPathCreateTest); - longPathCreateTest.append("three"); + AZ::IO::Path longPathCreateTest = m_folderName / "one" / "two" / "three"; AZ_TEST_ASSERT(!local.Exists(longPathCreateTest.c_str())); AZ_TEST_ASSERT(!local.IsDirectory(longPathCreateTest.c_str())); AZ_TEST_ASSERT(local.CreatePath(longPathCreateTest.c_str())); AZ_TEST_ASSERT(local.IsDirectory(longPathCreateTest.c_str())); - AZ_TEST_ASSERT(!local.Exists(deepFolder.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(deepFolder.c_str())); - AZ_TEST_ASSERT(local.CreatePath(deepFolder.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(deepFolder.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_deepFolder.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_deepFolder.c_str())); - AZ_TEST_ASSERT(local.Exists(deepFolder.c_str())); - AZ_TEST_ASSERT(local.CreatePath(deepFolder.c_str())); - AZ_TEST_ASSERT(local.Exists(deepFolder.c_str())); + AZ_TEST_ASSERT(local.Exists(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_deepFolder.c_str())); + AZ_TEST_ASSERT(local.Exists(m_deepFolder.c_str())); } }; @@ -310,16 +256,19 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(!local.Exists(fileRoot.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(fileRoot.c_str())); - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); - - FILE* tempFile = nullptr; - azfopen(&tempFile, file01Name.c_str(), "wb"); + AZ_TEST_ASSERT(!local.Exists(m_fileRoot.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); - fwrite("this is just a test", 1, 19, tempFile); - fclose(tempFile); + constexpr auto openMode = SystemFile::OpenMode::SF_OPEN_WRITE_ONLY + | SystemFile::OpenMode::SF_OPEN_CREATE + | SystemFile::OpenMode::SF_OPEN_CREATE_NEW; + SystemFile tempFile; + tempFile.Open(m_file01Name.c_str(), openMode); + constexpr AZStd::string_view testContent("this is just a test"); + tempFile.Write(testContent.data(), testContent.size()); + tempFile.Close(); AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; AZ_TEST_ASSERT(!local.Open("", AZ::IO::OpenMode::ModeWrite, fileHandle)); @@ -327,12 +276,12 @@ namespace UnitTest // test size without opening: AZ::u64 fs = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), fs)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), fs)); AZ_TEST_ASSERT(fs == 19); fileHandle = AZ::IO::InvalidHandle; - AZ::u64 modTimeA = local.ModificationTime(file01Name.c_str()); + AZ::u64 modTimeA = local.ModificationTime(m_file01Name.c_str()); AZ_TEST_ASSERT(modTimeA != 0); // test invalid handle ops: @@ -344,14 +293,14 @@ namespace UnitTest AZ_TEST_ASSERT(!local.Read(fileHandle, nullptr, 0, false)); AZ_TEST_ASSERT(!local.Tell(fileHandle, fs)); - AZ_TEST_ASSERT(!local.Exists((file01Name + "notexist").c_str())); + AZ_TEST_ASSERT(!local.Exists((m_file01Name.Native() + "notexist").c_str())); - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(!local.IsReadOnly(file01Name.c_str())); - AZ_TEST_ASSERT(!local.IsDirectory(file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsReadOnly(m_file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsDirectory(m_file01Name.c_str())); // test reads and seeks. - AZ_TEST_ASSERT(local.Open(file01Name.c_str(), AZ::IO::OpenMode::ModeRead, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file01Name.c_str(), AZ::IO::OpenMode::ModeRead, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); // use this again later... @@ -368,7 +317,7 @@ namespace UnitTest // test size without opening, after its already open: fs = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), fs)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), fs)); AZ_TEST_ASSERT(fs == 19); AZ::u64 offs = 0; @@ -442,22 +391,22 @@ namespace UnitTest #if AZ_TRAIT_AZFRAMEWORKTEST_PERFORM_CHMOD_TEST #if AZ_TRAIT_USE_WINDOWS_FILE_API - _chmod(file01Name.c_str(), _S_IREAD); + _chmod(m_file01Name.c_str(), _S_IREAD); #else - chmod(file01Name.c_str(), S_IRUSR | S_IRGRP | S_IROTH); + chmod(m_file01Name.c_str(), S_IRUSR | S_IRGRP | S_IROTH); #endif - AZ_TEST_ASSERT(local.IsReadOnly(file01Name.c_str())); + AZ_TEST_ASSERT(local.IsReadOnly(m_file01Name.c_str())); #if AZ_TRAIT_USE_WINDOWS_FILE_API - _chmod(file01Name.c_str(), _S_IREAD | _S_IWRITE); + _chmod(m_file01Name.c_str(), _S_IREAD | _S_IWRITE); #else - chmod(file01Name.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + chmod(m_file01Name.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); #endif #endif - AZ_TEST_ASSERT(!local.IsReadOnly(file01Name.c_str())); + AZ_TEST_ASSERT(!local.IsReadOnly(m_file01Name.c_str())); } }; @@ -474,14 +423,14 @@ namespace UnitTest { LocalFileIO local; - AZ_TEST_ASSERT(local.CreatePath(fileRoot.c_str())); - AZ_TEST_ASSERT(local.IsDirectory(fileRoot.c_str())); + AZ_TEST_ASSERT(local.CreatePath(m_fileRoot.c_str())); + AZ_TEST_ASSERT(local.IsDirectory(m_fileRoot.c_str())); { #ifdef AZ_COMPILER_MSVC FILE* tempFile; - fopen_s(&tempFile, file01Name.c_str(), "wb"); + fopen_s(&tempFile, m_file01Name.c_str(), "wb"); #else - FILE* tempFile = fopen(file01Name.c_str(), "wb"); + FILE* tempFile = fopen(m_file01Name.c_str(), "wb"); #endif fwrite("this is just a test", 1, 19, tempFile); fclose(tempFile); @@ -489,47 +438,47 @@ namespace UnitTest // make sure attributes are copied (such as modtime) even if they're copied: AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - AZ_TEST_ASSERT(local.Copy(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(local.Copy(m_file01Name.c_str(), m_file02Name.c_str())); AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - AZ_TEST_ASSERT(local.Copy(file01Name.c_str(), file03Name.c_str())); - - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file02Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file03Name.c_str())); - AZ_TEST_ASSERT(!local.DestroyPath(file01Name.c_str())); // you may not destroy files. - AZ_TEST_ASSERT(!local.DestroyPath(file02Name.c_str())); - AZ_TEST_ASSERT(!local.DestroyPath(file03Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file01Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file02Name.c_str())); - AZ_TEST_ASSERT(local.Exists(file03Name.c_str())); + AZ_TEST_ASSERT(local.Copy(m_file01Name.c_str(), m_file03Name.c_str())); + + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file02Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file03Name.c_str())); + AZ_TEST_ASSERT(!local.DestroyPath(m_file01Name.c_str())); // you may not destroy files. + AZ_TEST_ASSERT(!local.DestroyPath(m_file02Name.c_str())); + AZ_TEST_ASSERT(!local.DestroyPath(m_file03Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file01Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file02Name.c_str())); + AZ_TEST_ASSERT(local.Exists(m_file03Name.c_str())); AZ::u64 f1s = 0; AZ::u64 f2s = 0; AZ::u64 f3s = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), f1s)); - AZ_TEST_ASSERT(local.Size(file02Name.c_str(), f2s)); - AZ_TEST_ASSERT(local.Size(file03Name.c_str(), f3s)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), f1s)); + AZ_TEST_ASSERT(local.Size(m_file02Name.c_str(), f2s)); + AZ_TEST_ASSERT(local.Size(m_file03Name.c_str(), f3s)); AZ_TEST_ASSERT(f1s == f2s); AZ_TEST_ASSERT(f1s == f3s); // Copying over top other files is allowed SystemFile file; - EXPECT_TRUE(file.Open(file01Name.c_str(), SystemFile::SF_OPEN_WRITE_ONLY)); + EXPECT_TRUE(file.Open(m_file01Name.c_str(), SystemFile::SF_OPEN_WRITE_ONLY)); file.Write("this is just a test that is longer", 34); file.Close(); // make sure attributes are copied (such as modtime) even if they're copied: AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); - EXPECT_TRUE(local.Copy(file01Name.c_str(), file02Name.c_str())); + EXPECT_TRUE(local.Copy(m_file01Name.c_str(), m_file02Name.c_str())); f1s = 0; f2s = 0; f3s = 0; - EXPECT_TRUE(local.Size(file01Name.c_str(), f1s)); - EXPECT_TRUE(local.Size(file02Name.c_str(), f2s)); - EXPECT_TRUE(local.Size(file03Name.c_str(), f3s)); + EXPECT_TRUE(local.Size(m_file01Name.c_str(), f1s)); + EXPECT_TRUE(local.Size(m_file02Name.c_str(), f2s)); + EXPECT_TRUE(local.Size(m_file03Name.c_str(), f3s)); EXPECT_EQ(f1s, f2s); EXPECT_NE(f1s, f3s); } @@ -552,37 +501,37 @@ namespace UnitTest AZ::u64 modTimeC = 0; AZ::u64 modTimeD = 0; - modTimeC = local.ModificationTime(file02Name.c_str()); - modTimeD = local.ModificationTime(file03Name.c_str()); + modTimeC = local.ModificationTime(m_file02Name.c_str()); + modTimeD = local.ModificationTime(m_file03Name.c_str()); // make sure modtimes are in ascending order (at least) AZ_TEST_ASSERT(modTimeD >= modTimeC); // now touch some of the files. This is also how we test append mode, and write mode. AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; - AZ_TEST_ASSERT(local.Open(file02Name.c_str(), AZ::IO::OpenMode::ModeAppend | AZ::IO::OpenMode::ModeBinary, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file02Name.c_str(), AZ::IO::OpenMode::ModeAppend | AZ::IO::OpenMode::ModeBinary, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); AZ_TEST_ASSERT(local.Write(fileHandle, "more", 4)); AZ_TEST_ASSERT(local.Close(fileHandle)); AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(1500)); // No-append-mode - AZ_TEST_ASSERT(local.Open(file03Name.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary, fileHandle)); + AZ_TEST_ASSERT(local.Open(m_file03Name.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary, fileHandle)); AZ_TEST_ASSERT(fileHandle != AZ::IO::InvalidHandle); AZ_TEST_ASSERT(local.Write(fileHandle, "more", 4)); AZ_TEST_ASSERT(local.Close(fileHandle)); - modTimeC = local.ModificationTime(file02Name.c_str()); - modTimeD = local.ModificationTime(file03Name.c_str()); + modTimeC = local.ModificationTime(m_file02Name.c_str()); + modTimeD = local.ModificationTime(m_file03Name.c_str()); AZ_TEST_ASSERT(modTimeD > modTimeC); AZ::u64 f1s = 0; AZ::u64 f2s = 0; AZ::u64 f3s = 0; - AZ_TEST_ASSERT(local.Size(file01Name.c_str(), f1s)); - AZ_TEST_ASSERT(local.Size(file02Name.c_str(), f2s)); - AZ_TEST_ASSERT(local.Size(file03Name.c_str(), f3s)); + AZ_TEST_ASSERT(local.Size(m_file01Name.c_str(), f1s)); + AZ_TEST_ASSERT(local.Size(m_file02Name.c_str(), f2s)); + AZ_TEST_ASSERT(local.Size(m_file03Name.c_str(), f3s)); AZ_TEST_ASSERT(f2s == f1s + 4); AZ_TEST_ASSERT(f3s == 4); } @@ -603,8 +552,8 @@ namespace UnitTest CreateTestFiles(); - AZStd::vector resultFiles; - bool foundOK = local.FindFiles(fileRoot.c_str(), "*", + AZStd::vector resultFiles; + bool foundOK = local.FindFiles(m_fileRoot.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -616,7 +565,7 @@ namespace UnitTest resultFiles.clear(); - foundOK = local.FindFiles(fileRoot.c_str(), "*", + foundOK = local.FindFiles(m_fileRoot.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -627,7 +576,7 @@ namespace UnitTest AZ_TEST_ASSERT(resultFiles.size() == 3); // note: following tests accumulate more files without clearing resultfiles. - foundOK = local.FindFiles(fileRoot.c_str(), "*.txt", + foundOK = local.FindFiles(m_fileRoot.c_str(), "*.txt", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -637,7 +586,7 @@ namespace UnitTest AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 4); - foundOK = local.FindFiles(fileRoot.c_str(), "file*.asdf", + foundOK = local.FindFiles(m_fileRoot.c_str(), "file*.asdf", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -647,7 +596,7 @@ namespace UnitTest AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 5); - foundOK = local.FindFiles(fileRoot.c_str(), "asaf.asdf", + foundOK = local.FindFiles(m_fileRoot.c_str(), "asaf.asdf", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -660,7 +609,7 @@ namespace UnitTest resultFiles.clear(); // test to make sure directories show up: - foundOK = local.FindFiles(deepFolder.c_str(), "*", + foundOK = local.FindFiles(m_deepFolder.c_str(), "*", [&](const char* filePath) -> bool { resultFiles.push_back(filePath); @@ -668,11 +617,11 @@ namespace UnitTest }); // canonicalize the name in the same way that find does. - //AZStd::replace() extraFolder.replace('\\', '/'); FIXME PPATEL + //AZStd::replace() m_extraFolder.replace('\\', '/'); FIXME PPATEL AZ_TEST_ASSERT(foundOK); AZ_TEST_ASSERT(resultFiles.size() == 1); - AZ_TEST_ASSERT(resultFiles[0] == extraFolder); + AZ_TEST_ASSERT(resultFiles[0] == m_extraFolder); resultFiles.clear(); foundOK = local.FindFiles("o:137787621!@#$%^&&**())_+[])_", "asaf.asdf", [&](const char* filePath) -> bool @@ -684,13 +633,13 @@ namespace UnitTest AZ_TEST_ASSERT(!foundOK); AZ_TEST_ASSERT(resultFiles.size() == 0); - AZStd::string file04Name = fileRoot + "test.wha"; + AZ::IO::Path file04Name = m_fileRoot / "test.wha"; // test rename - AZ_TEST_ASSERT(local.Rename(file03Name.c_str(), file04Name.c_str())); - AZ_TEST_ASSERT(!local.Rename(file03Name.c_str(), file04Name.c_str())); + AZ_TEST_ASSERT(local.Rename(m_file03Name.c_str(), file04Name.c_str())); + AZ_TEST_ASSERT(!local.Rename(m_file03Name.c_str(), file04Name.c_str())); AZ_TEST_ASSERT(local.Rename(file04Name.c_str(), file04Name.c_str())); // this is valid and ok AZ_TEST_ASSERT(local.Exists(file04Name.c_str())); - AZ_TEST_ASSERT(!local.Exists(file03Name.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_file03Name.c_str())); AZ_TEST_ASSERT(!local.IsDirectory(file04Name.c_str())); AZ::u64 f3s = 0; @@ -698,8 +647,8 @@ namespace UnitTest AZ_TEST_ASSERT(f3s == 19); // deep destroy directory: - AZ_TEST_ASSERT(local.DestroyPath(folderName.c_str())); - AZ_TEST_ASSERT(!local.Exists(folderName.c_str())); + AZ_TEST_ASSERT(local.DestroyPath(m_folderName.c_str())); + AZ_TEST_ASSERT(!local.Exists(m_folderName.c_str())); } }; @@ -715,7 +664,7 @@ namespace UnitTest AZ::IO::LocalFileIO local; // test aliases - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); const char* testDest1 = local.GetAlias("@test@"); AZ_TEST_ASSERT(testDest1 != nullptr); const char* testDest2 = local.GetAlias("@NOPE@"); @@ -725,18 +674,18 @@ namespace UnitTest // test resolving const char* aliasTestPath = "@test@\\some\\path\\somefile.txt"; - char aliasResolvedPath[AZ_MAX_PATH_LEN]; - bool resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, AZ_MAX_PATH_LEN); + char aliasResolvedPath[AZ::IO::MaxPathLength]; + bool resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(resolveDidWork); - AZStd::string expectedResolvedPath = folderName + "some/path/somefile.txt"; + AZ::IO::Path expectedResolvedPath = m_folderName / "some/path/somefile.txt"; AZ_TEST_ASSERT(aliasResolvedPath == expectedResolvedPath); // more resolve path tests with invalid inputs const char* testPath = nullptr; char* testResolvedPath = nullptr; - resolveDidWork = local.ResolvePath(testPath, aliasResolvedPath, AZ_MAX_PATH_LEN); + resolveDidWork = local.ResolvePath(testPath, aliasResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(!resolveDidWork); - resolveDidWork = local.ResolvePath(aliasTestPath, testResolvedPath, AZ_MAX_PATH_LEN); + resolveDidWork = local.ResolvePath(aliasTestPath, testResolvedPath, AZ::IO::MaxPathLength); AZ_TEST_ASSERT(!resolveDidWork); resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, 0); AZ_TEST_ASSERT(!resolveDidWork); @@ -751,7 +700,7 @@ namespace UnitTest // Test that sending in a too small output path fails, // if the output buffer is too small to hold the resolved path - size_t SMALLER_THAN_FINAL_RESOLVED_PATH = expectedResolvedPath.length() - 1; + size_t SMALLER_THAN_FINAL_RESOLVED_PATH = expectedResolvedPath.Native().length() - 1; AZ_TEST_START_TRACE_SUPPRESSION; resolveDidWork = local.ResolvePath(aliasTestPath, aliasResolvedPath, SMALLER_THAN_FINAL_RESOLVED_PATH); AZ_TEST_STOP_TRACE_SUPPRESSION(1); @@ -766,22 +715,23 @@ namespace UnitTest TEST_F(AliasTest, ResolvePath_PathViewOverload_Succeeds) { AZ::IO::LocalFileIO local; - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); AZ::IO::PathView aliasTestPath = "@test@\\some\\path\\somefile.txt"; AZ::IO::FixedMaxPath aliasResolvedPath; ASSERT_TRUE(local.ResolvePath(aliasResolvedPath, aliasTestPath)); - const auto expectedResolvedPath = AZ::IO::FixedMaxPathString::format("%ssome/path/somefile.txt", folderName.c_str()); - EXPECT_STREQ(expectedResolvedPath.c_str(), aliasResolvedPath.c_str()); + AZ::IO::Path expectedResolvedPath = m_folderName / "some" / "path" / "somefile.txt"; + + EXPECT_EQ(expectedResolvedPath, aliasResolvedPath); AZStd::optional optionalResolvedPath = local.ResolvePath(aliasTestPath); ASSERT_TRUE(optionalResolvedPath); - EXPECT_STREQ(expectedResolvedPath.c_str(), optionalResolvedPath->c_str()); + EXPECT_EQ(expectedResolvedPath, optionalResolvedPath.value()); } TEST_F(AliasTest, ResolvePath_PathViewOverloadWithEmptyPath_Fails) { AZ::IO::LocalFileIO local; - local.SetAlias("@test@", folderName.c_str()); + local.SetAlias("@test@", m_folderName.c_str()); AZ::IO::FixedMaxPath aliasResolvedPath; EXPECT_FALSE(local.ResolvePath(aliasResolvedPath, {})); } @@ -860,24 +810,23 @@ namespace UnitTest { LocalFileIO localFileIO; AZ::IO::FileIOBase::SetInstance(&localFileIO); - AZStd::string path; - AzFramework::StringFunc::Path::GetFullPath(file01Name.c_str(), path); + AZ::IO::Path path = m_file01Name.ParentPath(); AZ_TEST_ASSERT(localFileIO.CreatePath(path.c_str())); - AzFramework::StringFunc::Path::GetFullPath(file02Name.c_str(), path); + path = m_file01Name.ParentPath(); AZ_TEST_ASSERT(localFileIO.CreatePath(path.c_str())); AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); localFileIO.Write(fileHandle, "DummyFile", 9); localFileIO.Close(fileHandle); AZ::IO::HandleType fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle1); localFileIO.Write(fileHandle1, "TestFile", 8); localFileIO.Close(fileHandle1); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); static const size_t testStringLen = 256; char testString[testStringLen] = { 0 }; localFileIO.Read(fileHandle1, testString, testStringLen); @@ -885,50 +834,50 @@ namespace UnitTest AZ_TEST_ASSERT(strncmp(testString, "TestFile", 8) == 0); // try swapping files when none of the files are in use - AZ_TEST_ASSERT(AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); localFileIO.Close(fileHandle1); AZ_TEST_ASSERT(strncmp(testString, "DummyFile", 9) == 0); //try swapping files when source file is not present, this should fail - AZ_TEST_ASSERT(!AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(!AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeWrite | OpenMode::ModeText, fileHandle); localFileIO.Write(fileHandle, "TestFile", 8); localFileIO.Close(fileHandle); #if AZ_TRAIT_AZFRAMEWORKTEST_MOVE_WHILE_OPEN fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); // try swapping files when the destination file is open for read only, // since window is unable to move files that are open for read, this will fail. - AZ_TEST_ASSERT(!AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(!AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); localFileIO.Close(fileHandle1); #endif fileHandle = AZ::IO::InvalidHandle; - localFileIO.Open(file01Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle); + localFileIO.Open(m_file01Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle); // try swapping files when the source file is open for read only - AZ_TEST_ASSERT(AZ::IO::SmartMove(file01Name.c_str(), file02Name.c_str())); + AZ_TEST_ASSERT(AZ::IO::SmartMove(m_file01Name.c_str(), m_file02Name.c_str())); localFileIO.Close(fileHandle); fileHandle1 = AZ::IO::InvalidHandle; - localFileIO.Open(file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); + localFileIO.Open(m_file02Name.c_str(), OpenMode::ModeRead | OpenMode::ModeText, fileHandle1); testString[0] = '\0'; localFileIO.Read(fileHandle1, testString, testStringLen); AZ_TEST_ASSERT(strncmp(testString, "TestFile", 8) == 0); localFileIO.Close(fileHandle1); - localFileIO.Remove(file01Name.c_str()); - localFileIO.Remove(file02Name.c_str()); + localFileIO.Remove(m_file01Name.c_str()); + localFileIO.Remove(m_file02Name.c_str()); localFileIO.DestroyPath(m_root.c_str()); AZ::IO::FileIOBase::SetInstance(nullptr); diff --git a/Code/Framework/AzTest/AzTest/Printers.cpp b/Code/Framework/AzTest/AzTest/Printers.cpp new file mode 100644 index 0000000000..dc639d87d1 --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include + +namespace AZ::IO +{ + void PrintTo(const AZ::IO::PathView& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::Path(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } + + void PrintTo(const AZ::IO::Path& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::Path(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } + + void PrintTo(const AZ::IO::FixedMaxPath& path, ::std::ostream* os) + { + *os << "path: " << AZ::IO::FixedMaxPath(path.Native(), AZ::IO::PosixPathSeparator).MakePreferred().c_str(); + } +} diff --git a/Code/Framework/AzTest/AzTest/Printers.h b/Code/Framework/AzTest/AzTest/Printers.h new file mode 100644 index 0000000000..3615f7b576 --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +namespace AZStd +{ + template + class basic_string; + + template + class basic_string_view; + + template + class basic_fixed_string; + + template + void PrintTo(const AZStd::basic_string& value, ::std::ostream* os); + template + void PrintTo(const AZStd::basic_string_view& value, ::std::ostream* os); + template + void PrintTo(const AZStd::basic_fixed_string& value, ::std::ostream* os); +} + +namespace AZ::IO +{ + // Add Googletest printers for the AZ::IO::Path classes + void PrintTo(const AZ::IO::PathView& path, ::std::ostream* os); + void PrintTo(const AZ::IO::Path& path, ::std::ostream* os); + void PrintTo(const AZ::IO::FixedMaxPath& path, ::std::ostream* os); +} + +#include diff --git a/Code/Framework/AzTest/AzTest/Printers.inl b/Code/Framework/AzTest/AzTest/Printers.inl new file mode 100644 index 0000000000..265918e48f --- /dev/null +++ b/Code/Framework/AzTest/AzTest/Printers.inl @@ -0,0 +1,34 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZStd +{ + template + void PrintTo(const AZStd::basic_string& value, ::std::ostream* os) + { + *os << value.c_str(); + } + + template + void PrintTo(const AZStd::basic_string_view& value, ::std::ostream* os) + { + *os << ::std::string_view(value.data(), value.size()); + } + + template + void PrintTo(const AZStd::basic_fixed_string& value, ::std::ostream* os) + { + *os << value.c_str(); + } +} diff --git a/Code/Framework/AzTest/AzTest/Utils.h b/Code/Framework/AzTest/AzTest/Utils.h index fc3dbdd13c..2778e163b3 100644 --- a/Code/Framework/AzTest/AzTest/Utils.h +++ b/Code/Framework/AzTest/AzTest/Utils.h @@ -9,8 +9,8 @@ #include #include #include -#include #include +#include namespace AZ { namespace Test diff --git a/Code/Framework/AzTest/AzTest/aztest_files.cmake b/Code/Framework/AzTest/AzTest/aztest_files.cmake index 9a9b085337..0e89a5dfa2 100644 --- a/Code/Framework/AzTest/AzTest/aztest_files.cmake +++ b/Code/Framework/AzTest/AzTest/aztest_files.cmake @@ -11,6 +11,9 @@ set(FILES AzTest.cpp ColorizedOutput.cpp Platform.h + Printers.h + Printers.inl + Printers.cpp Utils.h Utils.cpp GemTestEnvironment.cpp From 1e4faca332e0fc5eb1f512c6807ba0876728ea36 Mon Sep 17 00:00:00 2001 From: Scott Romero <24445312+AMZN-ScottR@users.noreply.github.com> Date: Mon, 4 Oct 2021 14:49:16 -0700 Subject: [PATCH 084/226] [development] Revived the statistical profiler (#4378) - Removed unused RunningStatisticsManager.cpp - Updated stats profiler proxy to use budgets - Fixed and re-enabled stats profiler tests - Enabled StatisticalProfilerProxySystemComponent in runtime Signed-off-by: AMZN-ScottR 24445312+AMZN-ScottR@users.noreply.github.com --- Code/Framework/AzCore/AzCore/AzCoreModule.cpp | 9 ++ Code/Framework/AzCore/AzCore/Debug/Budget.cpp | 8 +- Code/Framework/AzCore/AzCore/Debug/Profiler.h | 6 +- .../Statistics/RunningStatisticsManager.cpp | 106 ------------------ .../AzCore/Statistics/StatisticalProfiler.h | 4 +- .../Statistics/StatisticalProfilerProxy.h | 64 ++++++----- .../AzCore/Tests/StatisticalProfiler.cpp | 95 ++++++++-------- .../AzCore/Tests/azcoretests_files.cmake | 1 + 8 files changed, 107 insertions(+), 186 deletions(-) delete mode 100644 Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp diff --git a/Code/Framework/AzCore/AzCore/AzCoreModule.cpp b/Code/Framework/AzCore/AzCore/AzCoreModule.cpp index ec45335f95..67123ed826 100644 --- a/Code/Framework/AzCore/AzCore/AzCoreModule.cpp +++ b/Code/Framework/AzCore/AzCore/AzCoreModule.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace AZ { @@ -44,6 +45,10 @@ namespace AZ EventSchedulerSystemComponent::CreateDescriptor(), TaskGraphSystemComponent::CreateDescriptor(), +#if !defined(_RELEASE) + Statistics::StatisticalProfilerProxySystemComponent::CreateDescriptor(), +#endif + #if !defined(AZCORE_EXCLUDE_LUA) ScriptSystemComponent::CreateDescriptor(), #endif // #if !defined(AZCORE_EXCLUDE_LUA) @@ -58,6 +63,10 @@ namespace AZ azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + +#if !defined(_RELEASE) + azrtti_typeid(), +#endif }; } } diff --git a/Code/Framework/AzCore/AzCore/Debug/Budget.cpp b/Code/Framework/AzCore/AzCore/Debug/Budget.cpp index f9fe7e462a..4a6f3ed114 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Budget.cpp +++ b/Code/Framework/AzCore/AzCore/Debug/Budget.cpp @@ -11,6 +11,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(Animation); AZ_DEFINE_BUDGET(Audio); @@ -30,8 +31,7 @@ namespace AZ::Debug }; Budget::Budget(const char* name) - : m_name{ name } - , m_crc{ Crc32(name) } + : Budget( name, Crc32(name) ) { } @@ -40,6 +40,10 @@ namespace AZ::Debug , m_crc{ crc } { m_impl = aznew BudgetImpl; + if (auto statsProfiler = Interface::Get(); statsProfiler) + { + statsProfiler->RegisterProfilerId(m_crc); + } } Budget::~Budget() diff --git a/Code/Framework/AzCore/AzCore/Debug/Profiler.h b/Code/Framework/AzCore/AzCore/Debug/Profiler.h index 56103e8314..6e86de2e93 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Profiler.h +++ b/Code/Framework/AzCore/AzCore/Debug/Profiler.h @@ -8,6 +8,7 @@ #pragma once #include +#include #ifdef USE_PIX #include @@ -44,7 +45,10 @@ #define AZ_PROFILE_INTERVAL_START(...) #define AZ_PROFILE_INTERVAL_START_COLORED(...) #define AZ_PROFILE_INTERVAL_END(...) -#define AZ_PROFILE_INTERVAL_SCOPED(...) +#define AZ_PROFILE_INTERVAL_SCOPED(budget, scopeNameId, ...) \ + static constexpr AZ::Crc32 AZ_JOIN(blockId, __LINE__)(scopeNameId); \ + AZ::Statistics::StatisticalProfilerProxy::TimedScope AZ_JOIN(scope, __LINE__)(AZ_CRC_CE(#budget), AZ_JOIN(blockId, __LINE__)); + #endif #ifndef AZ_PROFILE_DATAPOINT diff --git a/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp b/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp deleted file mode 100644 index 52085d98e7..0000000000 --- a/Code/Framework/AzCore/AzCore/Statistics/RunningStatisticsManager.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "RunningStatisticsManager.h" - -namespace AzFramework -{ - namespace Statistics - { - bool RunningStatisticsManager::ContainsStatistic(const AZStd::string& name) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - return iterator != m_statisticsNamesToIndexMap.end(); - } - - bool RunningStatisticsManager::AddStatistic(const AZStd::string& name, const AZStd::string& units) - { - if (ContainsStatistic(name)) - { - return false; - } - AddStatisticValidated(name, units); - return true; - } - - void RunningStatisticsManager::RemoveStatistic(const AZStd::string& name) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - if (iterator == m_statisticsNamesToIndexMap.end()) - { - return; - } - AZ::u32 itemIndex = iterator->second; - m_statistics.erase(m_statistics.begin() + itemIndex); - m_statisticsNamesToIndexMap.erase(iterator); - //Update the indices in m_statisticsNamesToIndexMap. - while (itemIndex < m_statistics.size()) - { - const AZStd::string& statName = m_statistics[itemIndex].GetName(); - m_statisticsNamesToIndexMap[statName] = itemIndex; - ++itemIndex; - } - } - - void RunningStatisticsManager::ResetStatistic(const AZStd::string& name) - { - NamedRunningStatistic* stat = GetStatistic(name); - if (!stat) - { - return; - } - stat->Reset(); - } - - void RunningStatisticsManager::ResetAllStatistics() - { - for (NamedRunningStatistic& stat : m_statistics) - { - stat.Reset(); - } - } - - void RunningStatisticsManager::PushSampleForStatistic(const AZStd::string& name, double value) - { - NamedRunningStatistic* stat = GetStatistic(name); - if (!stat) - { - return; - } - stat->PushSample(value); - } - - NamedRunningStatistic* RunningStatisticsManager::GetStatistic(const AZStd::string& name, AZ::u32* indexOut) - { - auto iterator = m_statisticsNamesToIndexMap.find(name); - if (iterator == m_statisticsNamesToIndexMap.end()) - { - return nullptr; - } - const AZ::u32 index = iterator->second; - if (indexOut) - { - *indexOut = index; - } - return &m_statistics[index]; - } - - const AZStd::vector& RunningStatisticsManager::GetAllStatistics() const - { - return m_statistics; - } - - void RunningStatisticsManager::AddStatisticValidated(const AZStd::string& name, const AZStd::string& units) - { - m_statistics.emplace_back(NamedRunningStatistic(name, units)); - const AZ::u32 itemIndex = static_cast(m_statistics.size() - 1); - m_statisticsNamesToIndexMap[name] = itemIndex; - } - - }//namespace Statistics -}//namespace AzFramework diff --git a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h index 681635cd1c..876898f8ba 100644 --- a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h +++ b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfiler.h @@ -8,7 +8,6 @@ #pragma once #include //Just to get AZ::NullMutex -#include #include #include #include @@ -37,8 +36,7 @@ namespace AZ //! are some things to consider when working with the StatisticalProfilerProxy: //! The StatisticalProfilerProxy OWNS an array of StatisticalProfiler. //! You can "manage" one of those StatisticalProfiler by getting a reference to it and - //! add Running statistics etc. See The TerrainProfilers mentioned above to see concrete use - //! cases on how to work with the StatisticalProfilerProxy. + //! add Running statistics etc. template class StatisticalProfiler { diff --git a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h index 33d835076f..278b2ecc98 100644 --- a/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h +++ b/Code/Framework/AzCore/AzCore/Statistics/StatisticalProfilerProxy.h @@ -7,27 +7,11 @@ */ #pragma once -#include -#include -#include -#include -#include #include #include -#include - - -#if defined(AZ_STATISTICAL_PROFILING_ENABLED) - -#if defined(AZ_PROFILE_SCOPE) -#undef AZ_PROFILE_SCOPE -#endif // #if defined(AZ_PROFILE_SCOPE) - -#define AZ_PROFILE_SCOPE(profiler, scopeNameId) \ - static const AZStd::string AZ_JOIN(blockName, __LINE__)(scopeNameId); \ - AZ::Statistics::StatisticalProfilerProxy::TimedScope AZ_JOIN(scope, __LINE__)(profiler, AZ_JOIN(blockName, __LINE__)); +#include +#include -#endif //#if defined(AZ_STATISTICAL_PROFILING_ENABLED) namespace AZ::Statistics { @@ -65,7 +49,7 @@ namespace AZ::Statistics public: AZ_TYPE_INFO(StatisticalProfilerProxy, "{1103D0EB-1C32-4854-B9D9-40A2D65BDBD2}"); - using StatIdType = AZStd::string; + using StatIdType = AZ::Crc32; using StatisticalProfilerType = StatisticalProfiler; //! A Convenience class used to measure time performance of scopes of code @@ -94,6 +78,7 @@ namespace AZ::Statistics } m_startTime = AZStd::chrono::high_resolution_clock::now(); } + ~TimedScope() { if (!m_profilerProxy) @@ -122,7 +107,6 @@ namespace AZ::Statistics StatisticalProfilerProxy() { - // TODO:BUDGETS Query available budgets at registration time and create an associated profiler per type AZ::Interface::Register(this); } @@ -135,30 +119,54 @@ namespace AZ::Statistics StatisticalProfilerProxy(StatisticalProfilerProxy&&) = delete; StatisticalProfilerProxy& operator=(StatisticalProfilerProxy&&) = delete; + void RegisterProfilerId(StatisticalProfilerId id) + { + m_profilers.try_emplace(id, ProfilerInfo()); + } + bool IsProfilerActive(StatisticalProfilerId id) const { - return m_activeProfilersFlag[static_cast(id)]; + auto iter = m_profilers.find(id); + return (iter != m_profilers.end()) ? iter->second.m_enabled : false; } StatisticalProfilerType& GetProfiler(StatisticalProfilerId id) { - return m_profilers[static_cast(id)]; + auto iter = m_profilers.try_emplace(id, ProfilerInfo()).first; + return iter->second.m_profiler; } - void ActivateProfiler(StatisticalProfilerId id, bool activate) + void ActivateProfiler(StatisticalProfilerId id, bool activate, bool autoCreate = true) { - m_activeProfilersFlag[static_cast(id)] = activate; + if (autoCreate) + { + auto iter = m_profilers.try_emplace(id, ProfilerInfo()).first; + iter->second.m_enabled = activate; + } + else if (auto iter = m_profilers.find(id); iter != m_profilers.end()) + { + iter->second.m_enabled = activate; + } } void PushSample(StatisticalProfilerId id, const StatIdType& statId, double value) { - m_profilers[static_cast(id)].PushSample(statId, value); + if (auto iter = m_profilers.find(id); iter != m_profilers.end()) + { + iter->second.m_profiler.PushSample(statId, value); + } } private: - // TODO:BUDGETS the number of bits allocated here must be based on the number of budgets available at profiler registration time - AZStd::bitset<128> m_activeProfilersFlag; - AZStd::vector m_profilers; + struct ProfilerInfo + { + StatisticalProfilerType m_profiler; + bool m_enabled{ false }; + }; + + using ProfilerMap = AZStd::unordered_map; + + ProfilerMap m_profilers; }; // class StatisticalProfilerProxy }; // namespace AZ::Statistics diff --git a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp index 04e70d92a5..fc5fe66c4b 100644 --- a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp +++ b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp @@ -30,6 +30,8 @@ namespace UnitTest { + constexpr AZ::u32 ProfilerProxyGroup = AZ_CRC_CE("StatisticalProfilerProxyTests"); + class StatisticalProfilerTest : public AllocatorsFixture { @@ -98,10 +100,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -175,10 +177,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -317,26 +319,26 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance = "PerformanceResult"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock = "Block"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdBlock, statNameBlock, "us") != nullptr); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); const int iter_count = 10; { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdPerformance) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdPerformance) int counter = 0; for (int i = 0; i < iter_count; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdBlock) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdBlock) counter++; } } @@ -348,7 +350,7 @@ namespace UnitTest EXPECT_EQ(profiler.GetStatistic(statIdBlock)->GetNumSamples(), iter_count); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); #undef CODE_PROFILER_PROXY_PUSH_TIME @@ -362,12 +364,12 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread1("simple_thread1"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread1_loop("simple_thread1_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread1); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread1); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread1_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread1_loop); counter++; } } @@ -377,12 +379,12 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread2("simple_thread2"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread2_loop("simple_thread2_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread2); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread2); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread2_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread2_loop); counter++; } } @@ -392,12 +394,13 @@ namespace UnitTest const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread3("simple_thread3"); const AZ::Statistics::StatisticalProfilerProxy::StatIdType simple_thread3_loop("simple_thread3_loop"); - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread3); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread3); static int counter = 0; for (int i = 0; i < loop_cnt; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, simple_thread3_loop); + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, simple_thread3_loop); + counter++; } } @@ -408,21 +411,21 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1 = "simple_thread1"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1("simple_thread1"); const AZStd::string statNameThread1("simple_thread1"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop = "simple_thread1_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop("simple_thread1_loop"); const AZStd::string statNameThread1Loop("simple_thread1_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2 = "simple_thread2"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2("simple_thread2"); const AZStd::string statNameThread2("simple_thread2"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop = "simple_thread2_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop("simple_thread2_loop"); const AZStd::string statNameThread2Loop("simple_thread2_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3 = "simple_thread3"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3("simple_thread3"); const AZStd::string statNameThread3("simple_thread3"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop = "simple_thread3_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop("simple_thread3_loop"); const AZStd::string statNameThread3Loop("simple_thread3_loop"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread1, statNameThread1, "us")); @@ -432,7 +435,7 @@ namespace UnitTest ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3, statNameThread3, "us")); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3Loop, statNameThread3Loop, "us")); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); //Let's kickoff the threads to see how much contention affects the profiler's performance. const int iter_count = 10; @@ -459,7 +462,7 @@ namespace UnitTest EXPECT_EQ(profiler.GetStatistic(statIdThread3Loop)->GetNumSamples(), iter_count); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } /** Trace message handler to track messages during tests @@ -566,10 +569,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -647,10 +650,10 @@ namespace UnitTest AZ::Statistics::StatisticalProfiler profiler; - const AZ::Crc32 statIdPerformance = AZ_CRC("PerformanceResult", 0xc1f29a10); + constexpr AZ::Crc32 statIdPerformance = AZ_CRC_CE("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Crc32 statIdBlock = AZ_CRC("Block", 0x831b9722); + constexpr AZ::Crc32 statIdBlock = AZ_CRC_CE("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); @@ -745,26 +748,26 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance = "PerformanceResult"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdPerformance("PerformanceResult"); const AZStd::string statNamePerformance("PerformanceResult"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock = "Block"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdBlock("Block"); const AZStd::string statNameBlock("Block"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdPerformance, statNamePerformance, "us") != nullptr); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdBlock, statNameBlock, "us") != nullptr); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); const int iter_count = 1000000; { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdPerformance) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdPerformance) int counter = 0; for (int i = 0; i < iter_count; i++) { - CODE_PROFILER_PROXY_PUSH_TIME(AZ::Debug::ProfileCategory::Terrain, statIdBlock) + CODE_PROFILER_PROXY_PUSH_TIME(ProfilerProxyGroup, statIdBlock) counter++; } } @@ -778,7 +781,7 @@ namespace UnitTest profiler.LogAndResetStats("StatisticalProfilerProxy"); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } #undef CODE_PROFILER_PROXY_PUSH_TIME @@ -788,21 +791,21 @@ namespace UnitTest AZ::Statistics::StatisticalProfilerProxy::TimedScope::ClearCachedProxy(); AZ::Statistics::StatisticalProfilerProxy profilerProxy; AZ::Statistics::StatisticalProfilerProxy* proxy = AZ::Interface::Get(); - AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(AZ::Debug::ProfileCategory::Terrain); + AZ::Statistics::StatisticalProfilerProxy::StatisticalProfilerType& profiler = proxy->GetProfiler(ProfilerProxyGroup); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1 = "simple_thread1"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1("simple_thread1"); const AZStd::string statNameThread1("simple_thread1"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop = "simple_thread1_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread1Loop("simple_thread1_loop"); const AZStd::string statNameThread1Loop("simple_thread1_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2 = "simple_thread2"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2("simple_thread2"); const AZStd::string statNameThread2("simple_thread2"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop = "simple_thread2_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread2Loop("simple_thread2_loop"); const AZStd::string statNameThread2Loop("simple_thread2_loop"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3 = "simple_thread3"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3("simple_thread3"); const AZStd::string statNameThread3("simple_thread3"); - const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop = "simple_thread3_loop"; + const AZ::Statistics::StatisticalProfilerProxy::StatIdType statIdThread3Loop("simple_thread3_loop"); const AZStd::string statNameThread3Loop("simple_thread3_loop"); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread1, statNameThread1, "us")); @@ -812,7 +815,7 @@ namespace UnitTest ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3, statNameThread3, "us")); ASSERT_TRUE(profiler.GetStatsManager().AddStatistic(statIdThread3Loop, statNameThread3Loop, "us")); - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, true); + proxy->ActivateProfiler(ProfilerProxyGroup, true); //Let's kickoff the threads to see how much contention affects the profiler's performance. const int iter_count = 1000000; @@ -841,7 +844,7 @@ namespace UnitTest profiler.LogAndResetStats("3_Threads_StatisticalProfilerProxy"); //Clean Up - proxy->ActivateProfiler(AZ::Debug::ProfileCategory::Terrain, false); + proxy->ActivateProfiler(ProfilerProxyGroup, false); } }//namespace UnitTest diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index a111af0353..e155594aa0 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -61,6 +61,7 @@ set(FILES Slice.cpp State.cpp Statistics.cpp + StatisticalProfiler.cpp StreamerTests.cpp StringFunc.cpp SystemFile.cpp From 91aafdcddef85d0adb128d10165d55fc622de112 Mon Sep 17 00:00:00 2001 From: puvvadar Date: Mon, 4 Oct 2021 15:17:01 -0700 Subject: [PATCH 085/226] Fix bad include in NetworkTransformTests Signed-off-by: puvvadar --- Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp index 94cb94e000..359c8003a4 100644 --- a/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp +++ b/Gems/Multiplayer/Code/Tests/NetworkTransformTests.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include namespace Multiplayer { From 7f75dc6dee8f3e7e34e0605187a5386868ad56aa Mon Sep 17 00:00:00 2001 From: Dennis Brakhane Date: Tue, 5 Oct 2021 02:41:35 +0200 Subject: [PATCH 086/226] Fix "index out of range" error in AssetProcessor (#4324) * Fix "index out of range" error When the parent is the tree root element, beginInsertRows must be called with an invalid (but legal) index. A QModelIndex with a row index of zero when the parent has no children is an illegal index and will result in "undefined behavior", like the "index out of range" one. Therefore, if our parent is the tree root element, we use QModelIndex() instead. Fixes #2343 Signed-off-by: Dennis Brakhane * Use QModelIndex() instead of createIndex(-1, -1) Both do the same, but the former is Qt best practise. Signed-off-by: Dennis Brakhane * add some sanity checks in debug mode Using illegal ModelIndices can result in hard to debug problems later on, so add a few checks to help spotting them sooner. Signed-off-by: Dennis Brakhane --- Code/Editor/UndoDropDown.cpp | 4 ++-- Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp | 8 ++++++-- .../AssetProcessor/native/ui/ProductAssetTreeModel.cpp | 9 +++++++-- .../AssetProcessor/native/ui/SourceAssetTreeModel.cpp | 10 +++++++--- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Code/Editor/UndoDropDown.cpp b/Code/Editor/UndoDropDown.cpp index 6bf807ebf4..4f346b57dd 100644 --- a/Code/Editor/UndoDropDown.cpp +++ b/Code/Editor/UndoDropDown.cpp @@ -101,13 +101,13 @@ public: if (fresh.size() < m_stackNames.size()) { - beginRemoveRows(createIndex(-1, -1), static_cast(fresh.size()), static_cast(m_stackNames.size() - 1)); + beginRemoveRows(QModelIndex(), static_cast(fresh.size()), static_cast(m_stackNames.size() - 1)); m_stackNames = fresh; endRemoveRows(); } else { - beginInsertRows(createIndex(-1, -1), static_cast(m_stackNames.size()), static_cast(fresh.size() - 1)); + beginInsertRows(QModelIndex(), static_cast(m_stackNames.size()), static_cast(fresh.size() - 1)); m_stackNames = fresh; endInsertRows(); } diff --git a/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp index 4c2f168d4a..8d889343f9 100644 --- a/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/AssetTreeModel.cpp @@ -168,7 +168,9 @@ namespace AssetProcessor if (childItem) { - return createIndex(row, column, childItem); + QModelIndex index = createIndex(row, column, childItem); + Q_ASSERT(checkIndex(index)); + return index; } return QModelIndex(); } @@ -197,7 +199,9 @@ namespace AssetProcessor { return QModelIndex(); } - return createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); + return parentIndex; } bool AssetTreeModel::hasChildren(const QModelIndex &parent) const diff --git a/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp index 0574f00961..3f3a6b7a65 100644 --- a/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/ProductAssetTreeModel.cpp @@ -92,6 +92,7 @@ namespace AssetProcessor } QModelIndex parentIndex = createIndex(parent->GetRow(), 0, parent); + Q_ASSERT(checkIndex(parentIndex)); beginRemoveRows(parentIndex, assetToRemove->GetRow(), assetToRemove->GetRow()); @@ -179,6 +180,8 @@ namespace AssetProcessor QModelIndex existingIndexStart = createIndex(existingEntry->second->GetRow(), 0, existingEntry->second); QModelIndex existingIndexEnd = createIndex(existingEntry->second->GetRow(), existingEntry->second->GetColumnCount() - 1, existingEntry->second); + Q_ASSERT(checkIndex(existingIndexStart)); + Q_ASSERT(checkIndex(existingIndexEnd)); dataChanged(existingIndexStart, existingIndexEnd); return; } @@ -205,7 +208,8 @@ namespace AssetProcessor { if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } nextParent = parentItem->CreateChild(ProductAssetTreeItemData::MakeShared(nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true, AZ::Uuid::CreateNull())); @@ -231,7 +235,8 @@ namespace AssetProcessor if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } diff --git a/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp b/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp index 88fbe5a204..eaebc57ca4 100644 --- a/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/SourceAssetTreeModel.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace AssetProcessor { @@ -102,7 +103,8 @@ namespace AssetProcessor { if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } nextParent = parentItem->CreateChild(SourceAssetTreeItemData::MakeShared(nullptr, nullptr, currentFullFolderPath.Native(), currentPath.c_str(), true)); @@ -118,7 +120,8 @@ namespace AssetProcessor if (!modelIsResetting) { - QModelIndex parentIndex = createIndex(parentItem->GetRow(), 0, parentItem); + QModelIndex parentIndex = parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->GetRow(), 0, parentItem); + Q_ASSERT(checkIndex(parentIndex)); beginInsertRows(parentIndex, parentItem->getChildCount(), parentItem->getChildCount()); } @@ -173,7 +176,8 @@ namespace AssetProcessor return; } - QModelIndex parentIndex = createIndex(parent->GetRow(), 0, parent); + QModelIndex parentIndex = parent == m_root.get() ? QModelIndex() : createIndex(parent->GetRow(), 0, parent); + Q_ASSERT(checkIndex(parentIndex)); beginRemoveRows(parentIndex, assetToRemove->GetRow(), assetToRemove->GetRow()); From 31b2fe427bccf509a20f2aeaa8b8160f1b95a4e5 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Mon, 4 Oct 2021 21:10:39 -0400 Subject: [PATCH 087/226] Added a helpful comment on hierarchy benchmark Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp index 6a404bfa01..f6f82ebe2b 100644 --- a/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp +++ b/Gems/Multiplayer/Code/Tests/ServerHierarchyBenchmarks.cpp @@ -14,6 +14,7 @@ namespace Multiplayer { /* * Hierarchy of 16 entities: Parent -> Child_2 -> .. -> Child_16 + * By default the maximum size of a hierarchy is defined by bg_hierarchyEntityMaxLimit (16). */ class ServerDeepHierarchyBenchmark : public HierarchyBenchmarkBase { From ca26599f93e27ee41cb014e6df26852f4f78e921 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Tue, 5 Oct 2021 09:58:43 +0100 Subject: [PATCH 088/226] Remove legacy sandbox picking - no longer used (#4472) Signed-off-by: hultonha --- .../SandboxIntegration.cpp | 59 +------------------ .../SandboxIntegration.h | 8 --- Code/Editor/Viewport.h | 2 +- .../API/ToolsApplicationAPI.h | 6 -- 4 files changed, 2 insertions(+), 73 deletions(-) diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp index 666700a874..b9e4878879 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp @@ -142,8 +142,7 @@ void GetSelectedEntitiesSetWithFlattenedHierarchy(AzToolsFramework::EntityIdSet& } SandboxIntegrationManager::SandboxIntegrationManager() - : m_inObjectPickMode(false) - , m_startedUndoRecordingNestingLevel(0) + : m_startedUndoRecordingNestingLevel(0) , m_dc(nullptr) , m_notificationWindowManager(new AzToolsFramework::SliceOverridesNotificationWindowManager()) { @@ -1000,62 +999,6 @@ void SandboxIntegrationManager::SetupSliceContextMenu_Modify(QMenu* menu, const revertAction->setEnabled(canRevert); } -void SandboxIntegrationManager::HandleObjectModeSelection(const AZ::Vector2& point, [[maybe_unused]] int flags, bool& handled) -{ - // Todo - Use a custom "edit tool". This will eliminate the need for this bus message entirely, which technically - // makes this feature less intrusive on Sandbox. - // UPDATE: This is now provided by EditorPickEntitySelection when the new Viewport Interaction Model changes are enabled. - if (m_inObjectPickMode) - { - CViewport* view = GetIEditor()->GetViewManager()->GetGameViewport(); - const QPoint viewPoint(static_cast(point.GetX()), static_cast(point.GetY())); - - HitContext hitInfo; - hitInfo.view = view; - if (view->HitTest(viewPoint, hitInfo)) - { - if (hitInfo.object && (hitInfo.object->GetType() == OBJTYPE_AZENTITY)) - { - CComponentEntityObject* entityObject = static_cast(hitInfo.object); - AzToolsFramework::EditorPickModeRequestBus::Broadcast( - &AzToolsFramework::EditorPickModeRequests::PickModeSelectEntity, entityObject->GetAssociatedEntityId()); - } - } - - AzToolsFramework::EditorPickModeRequestBus::Broadcast( - &AzToolsFramework::EditorPickModeRequests::StopEntityPickMode); - - handled = true; - } -} - -void SandboxIntegrationManager::UpdateObjectModeCursor(AZ::u32& cursorId, AZStd::string& cursorStr) -{ - if (m_inObjectPickMode) - { - cursorId = static_cast(STD_CURSOR_HAND); - cursorStr = "Pick an entity..."; - } -} - -void SandboxIntegrationManager::OnEntityPickModeStarted() -{ - m_inObjectPickMode = true; - - // Currently this object pick mode is activated only via PropertyEntityIdCtrl picker. - // When the picker button is clicked, we transfer focus to the viewport so the - // spacebar can still be used to activate selection helpers. - if (CViewport* view = GetIEditor()->GetViewManager()->GetGameViewport()) - { - view->SetFocus(); - } -} - -void SandboxIntegrationManager::OnEntityPickModeStopped() -{ - m_inObjectPickMode = false; -} - void SandboxIntegrationManager::CreateEditorRepresentation(AZ::Entity* entity) { IEditor* editor = GetIEditor(); diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h index 617c5cb2c8..40962409a3 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.h @@ -93,7 +93,6 @@ namespace AzToolsFramework class SandboxIntegrationManager : private AzToolsFramework::ToolsApplicationEvents::Bus::Handler , private AzToolsFramework::EditorRequests::Bus::Handler - , private AzToolsFramework::EditorPickModeNotificationBus::Handler , private AzToolsFramework::EditorContextMenuBus::Handler , private AzToolsFramework::EditorWindowRequests::Bus::Handler , private AzFramework::AssetCatalogEventBus::Handler @@ -140,8 +139,6 @@ private: QDockWidget* InstanceViewPane(const char* paneName) override; void CloseViewPane(const char* paneName) override; void BrowseForAssets(AzToolsFramework::AssetBrowser::AssetSelectionModel& selection) override; - void HandleObjectModeSelection(const AZ::Vector2& point, int flags, bool& handled) override; - void UpdateObjectModeCursor(AZ::u32& cursorId, AZStd::string& cursorStr) override; void CreateEditorRepresentation(AZ::Entity* entity) override; bool DestroyEditorRepresentation(AZ::EntityId entityId, bool deleteAZEntity) override; void CloneSelection(bool& handled) override; @@ -175,10 +172,6 @@ private: QWidget* GetAppMainWindow() override; ////////////////////////////////////////////////////////////////////////// - // EditorPickModeNotificationBus - void OnEntityPickModeStarted() override; - void OnEntityPickModeStopped() override; - ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::EditorContextMenu::Bus::Handler overrides void PopulateEditorGlobalContextMenu(QMenu* menu, const AZ::Vector2& point, int flags) override; @@ -281,7 +274,6 @@ private: private: AZ::Vector2 m_contextMenuViewPoint; - int m_inObjectPickMode; short m_startedUndoRecordingNestingLevel; // used in OnBegin/EndUndo to ensure we only accept undo's we started recording AzToolsFramework::SliceOverridesNotificationWindowManager* m_notificationWindowManager; diff --git a/Code/Editor/Viewport.h b/Code/Editor/Viewport.h index fdb8332479..7f8ccc4c4f 100644 --- a/Code/Editor/Viewport.h +++ b/Code/Editor/Viewport.h @@ -157,7 +157,7 @@ public: virtual Vec3 SnapToGrid(const Vec3& vec) = 0; - //! Get selection procision tolerance. + //! Get selection precision tolerance. virtual float GetSelectionTolerance() const = 0; ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h index c037747a08..9e29b9813c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ToolsApplicationAPI.h @@ -764,12 +764,6 @@ namespace AzToolsFramework //! Spawn asset browser for the appropriate asset types. virtual void BrowseForAssets(AssetBrowser::AssetSelectionModel& /*selection*/) = 0; - /// Allow interception of selection / left-mouse clicks in ObjectMode, for customizing selection behavior. - virtual void HandleObjectModeSelection(const AZ::Vector2& /*point*/, int /*flags*/, bool& /*handled*/) {} - - /// Allow interception of cursor, for customizing selection behavior. - virtual void UpdateObjectModeCursor(AZ::u32& /*cursorId*/, AZStd::string& /*cursorStr*/) {} - /// Creates editor-side representation of an underlying entity. virtual void CreateEditorRepresentation(AZ::Entity* /*entity*/) { } From 5cf6236bd9912b03bfe4c6fd04c52dafb55504ba Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Tue, 5 Oct 2021 08:46:48 -0400 Subject: [PATCH 089/226] Fixing development build break Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h index e0018e2f26..dd32e743e2 100644 --- a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h @@ -19,7 +19,7 @@ #include #include #include -#include +#include namespace Multiplayer { From c2a84de38c1531c9fa618de3822c603b92d2e813 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Tue, 5 Oct 2021 08:53:50 -0400 Subject: [PATCH 090/226] Updated mock-like interfaces for benchmarks Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../Code/Tests/CommonBenchmarkSetup.h | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h index dd32e743e2..7f98d22702 100644 --- a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h @@ -100,6 +100,11 @@ namespace Multiplayer { return {}; } + + AZ::TimeUs GetElapsedTimeUs() const override + { + return {}; + } }; class BenchmarkNetworkTime : public Multiplayer::INetworkTime @@ -215,7 +220,7 @@ namespace Multiplayer NetworkEntityTracker* GetNetworkEntityTracker() override { return &m_tracker; } NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override { return &m_authorityTracker; } MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override { return &m_multiplayerComponentRegistry; } - HostId GetHostId() const override { return {}; } + const HostId& GetHostId() const override { return m_hostId; } EntityList CreateEntitiesImmediate( [[maybe_unused]] const PrefabEntityId& prefabEntryId, [[maybe_unused]] NetEntityRole netEntityRole, @@ -271,7 +276,7 @@ namespace Multiplayer NetworkEntityHandle AddEntityToEntityMap(NetEntityId netEntityId, AZ::Entity* entity) override { m_networkEntityMap[netEntityId] = entity; - return NetworkEntityHandle(entity, netEntityId, &m_tracker); + return NetworkEntityHandle(entity, &m_tracker); } ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override @@ -300,9 +305,15 @@ namespace Multiplayer return {}; } + void Initialize([[maybe_unused]] const HostId& hostId, [[maybe_unused]] AZStd::unique_ptr entityDomain) override {} + bool IsInitialized() const override { return true; } + IEntityDomain* GetEntityDomain() const override { return nullptr; } + void DebugDraw() const override {} + NetworkEntityTracker m_tracker; NetworkEntityAuthorityTracker m_authorityTracker; MultiplayerComponentRegistry m_multiplayerComponentRegistry; + HostId m_hostId; }; class BenchmarkMultiplayer : public Multiplayer::IMultiplayer @@ -313,7 +324,7 @@ namespace Multiplayer MultiplayerAgentType GetAgentType() const override { return {}; } void InitializeMultiplayer([[maybe_unused]] MultiplayerAgentType state) override {} bool StartHosting([[maybe_unused]] uint16_t port, [[maybe_unused]] bool isDedicated) override { return {}; } - bool Connect([[maybe_unused]] AZStd::string remoteAddress, [[maybe_unused]] uint16_t port) override { return {}; } + bool Connect([[maybe_unused]] const AZStd::string& remoteAddress, [[maybe_unused]] uint16_t port) override { return {}; } void Terminate([[maybe_unused]] AzNetworking::DisconnectReason reason) override {} void AddClientDisconnectedHandler([[maybe_unused]] ClientDisconnectedEvent::Handler& handler) override {} void AddConnectionAcquiredHandler([[maybe_unused]] ConnectionAcquiredEvent::Handler& handler) override {} @@ -326,6 +337,14 @@ namespace Multiplayer INetworkEntityManager* GetNetworkEntityManager() override { return &m_manager; } void SetFilterEntityManager([[maybe_unused]] IFilterEntityManager* entityFilter) override {} IFilterEntityManager* GetFilterEntityManager() override { return {}; } + void AddClientMigrationStartEventHandler([[maybe_unused]] ClientMigrationStartEvent::Handler& handler) override {} + void AddClientMigrationEndEventHandler([[maybe_unused]] ClientMigrationEndEvent::Handler& handler) override {} + void AddNotifyClientMigrationHandler([[maybe_unused]] NotifyClientMigrationEvent::Handler& handler) override {} + void AddNotifyEntityMigrationEventHandler([[maybe_unused]] NotifyEntityMigrationEvent::Handler& handler) override {} + void SendNotifyClientMigrationEvent([[maybe_unused]] const HostId& hostId, [[maybe_unused]] uint64_t userIdentifier, [[maybe_unused]] ClientInputId lastClientInputId) override {} + void SendNotifyEntityMigrationEvent([[maybe_unused]] const ConstNetworkEntityHandle& entityHandle, [[maybe_unused]] const HostId& remoteHostId) override {} + void SetShouldSpawnNetworkEntities([[maybe_unused]] bool value) override {} + bool GetShouldSpawnNetworkEntities() const override { return true; } BenchmarkNetworkEntityManager& m_manager; }; From 365dd617787c098afd67406b89bffab259bd798f Mon Sep 17 00:00:00 2001 From: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:22:36 -0500 Subject: [PATCH 091/226] [LY-111998] Surface Tags didn't refresh immediately. (#4468) When adding or modifying surface tags to a surface tag list asset, the surface tag lists didn't immediately refresh in the Editor. There were a couple of bugs in the way the tag assets were getting loaded and monitored that are now fixed. Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> --- .../EditorSurfaceDataSystemComponent.cpp | 52 +++++++++---------- .../Editor/EditorSurfaceDataSystemComponent.h | 2 +- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp index e9f7861125..a5bf51d0fe 100644 --- a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp +++ b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.cpp @@ -163,65 +163,61 @@ namespace SurfaceData // AssetManager::FindOrCreateAsset, it's possible for those locks to get locked in reverse on a loading thread, causing a deadlock. for (auto& assetId : surfaceTagAssetIds) { - m_surfaceTagNameAssets[assetId] = AZ::Data::AssetManager::Instance().GetAsset( - assetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default); - - // If any assets are still loading (which they likely will be), listen for the OnAssetReady event and refresh the Editor - // UI as each one finishes loading. - if (!m_surfaceTagNameAssets[assetId].IsReady()) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); - } + LoadAsset(assetId); } } - void EditorSurfaceDataSystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) + void EditorSurfaceDataSystemComponent::LoadAsset(const AZ::Data::AssetId& assetId) { - AZ::Data::AssetInfo assetInfo; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, assetId); + m_surfaceTagNameAssets[assetId] = AZ::Data::AssetManager::Instance().GetAsset( + assetId, azrtti_typeid(), AZ::Data::AssetLoadBehavior::Default); - const auto assetType = azrtti_typeid(); - if (assetInfo.m_assetType == assetType) - { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); - } + // Connect to the bus for this asset so we can monitor for both OnAssetReady and OnAssetReloaded events + AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); } - void EditorSurfaceDataSystemComponent::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) + void EditorSurfaceDataSystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) { AZ::Data::AssetInfo assetInfo; AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, assetId); - const auto assetType = azrtti_typeid(); - if (assetInfo.m_assetType == assetType) + if (assetInfo.m_assetType == azrtti_typeid()) { - AZ::Data::AssetBus::MultiHandler::BusConnect(assetId); + // A new Surface Tag asset was added, so load it. + LoadAsset(assetId); } } - void EditorSurfaceDataSystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& /*assetInfo*/) + void EditorSurfaceDataSystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& assetInfo) { - m_surfaceTagNameAssets.erase(assetId); + if (assetInfo.m_assetType == azrtti_typeid()) + { + // A Surface Tag asset was removed, so stop listening for it and remove it from our set of loaded assets. + // Note: This case should never really happen in practice - we're keeping the asset loaded, so the file will remain + // locked while the Editor is running and shouldn't be able to be deleted. + AZ::Data::AssetBus::MultiHandler::BusDisconnect(assetId); + m_surfaceTagNameAssets.erase(assetId); + } } void EditorSurfaceDataSystemComponent::OnAssetReloaded(AZ::Data::Asset asset) { - OnAssetReady(asset); + AddAsset(asset); } void EditorSurfaceDataSystemComponent::OnAssetReady(AZ::Data::Asset asset) { - AZ::Data::AssetBus::MultiHandler::BusDisconnect(asset.GetId()); AddAsset(asset); } void EditorSurfaceDataSystemComponent::AddAsset(AZ::Data::Asset& asset) { - const auto assetType = azrtti_typeid(); - if (asset.GetType() == assetType) + if (asset.GetType() == azrtti_typeid()) { m_surfaceTagNameAssets[asset.GetId()] = asset; - AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); + AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast( + &AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, + AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); } } } diff --git a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h index f35cab56f4..603cffc56d 100644 --- a/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h +++ b/Gems/SurfaceData/Code/Source/Editor/EditorSurfaceDataSystemComponent.h @@ -48,6 +48,7 @@ namespace SurfaceData private: + void LoadAsset(const AZ::Data::AssetId& assetId); void AddAsset(AZ::Data::Asset& asset); //////////////////////////////////////////////////////////////////////// @@ -63,7 +64,6 @@ namespace SurfaceData //////////////////////////////////////////////////////////////////////// // AzFramework::AssetCatalogEventBus void OnCatalogLoaded(const char* /*catalogFile*/) override; - void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; void OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) override; void OnCatalogAssetRemoved(const AZ::Data::AssetId& assetId, const AZ::Data::AssetInfo& assetInfo) override; From 14474dbac72650c05eeea0927f6fdc5d2b98fe11 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:24:37 -0500 Subject: [PATCH 092/226] Swapped the order in which the engine.pak is searched (#4455) * Swapped the order in which the engine.pak is searched First the Project Cache Root folder is searched before falling back to the Executable Directory Removed the need for the engine.json and project.json in a project release layout when a "Cache" directory exist at the root. The project root uses the the first "Cache" directory it finds by scanning upwards as if fails to find a project.json, The engine root use the project root, if it fails to reconcile the engine path using project.json "engine" key and the o3de_manifest.json "engines_path" object. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed Generation of the engine.json and project.json in Release Install builds. The project and engine path can be determined based on the Cache directory location. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added missing space for enginePakOpened Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding missing endif() and bracket argument terminator. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../Settings/SettingsRegistryMergeUtils.cpp | 12 ++++++-- .../Application/GameApplication.cpp | 28 ++++++++++--------- cmake/Platform/Common/Install_common.cmake | 15 ---------- cmake/Projects.cmake | 5 +--- 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp index 113fdd433e..e1bd717e7b 100644 --- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp @@ -276,7 +276,9 @@ namespace AZ::SettingsRegistryMergeUtils return engineRoot; } - return {}; + // Fall back to using the project root as the engine root if the engine path could not be reconciled + // by checking the project.json "engine" string within o3de_manifest.json "engine_paths" object + return projectRoot; } AZ::IO::FixedMaxPath FindProjectRoot(SettingsRegistryInterface& settingsRegistry) @@ -309,7 +311,13 @@ namespace AZ::SettingsRegistryMergeUtils return projectRoot; } - return {}; + // Step 3 Check for a "Cache" directory by scanning upwards from the executable directory + if (auto candidateRoot = Internal::ScanUpRootLocator("Cache"); + !candidateRoot.empty() && AZ::IO::SystemFile::IsDirectory(candidateRoot.c_str())) + { + projectRoot = AZStd::move(candidateRoot); + } + return projectRoot; } AZStd::string_view ConfigParserSettings::DefaultCommentPrefixFilter(AZStd::string_view line) diff --git a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp index 475a7d5504..424132b624 100644 --- a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp +++ b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp @@ -28,20 +28,22 @@ namespace AzGameFramework // can read from the FileIOBase instance if available m_settingsRegistry->SetUseFileIO(true); - // Attempt to mount the engine pak from the Executable Directory - // at the Assets alias, otherwise to attempting to mount the engine pak - // from the Cache folder - AZ::IO::FixedMaxPath enginePakPath = AZ::Utils::GetExecutableDirectory(); - enginePakPath /= "engine.pak"; - if (!m_archive->OpenPack("@assets@", enginePakPath.Native())) + // Attempt to mount the engine pak to the project product asset alias + // Search Order: + // - Project Cache Root Directory + // - Executable Directory + bool enginePakOpened{}; + AZ::IO::FixedMaxPath enginePakPath; + if (m_settingsRegistry->Get(enginePakPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) { - enginePakPath.clear(); - if (m_settingsRegistry->Get(enginePakPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) - { - // fall back to checking Project Cache Root. - enginePakPath /= "engine.pak"; - m_archive->OpenPack("@assets@", enginePakPath.Native()); - } + // fall back to checking Project Cache Root. + enginePakPath /= "engine.pak"; + enginePakOpened = m_archive->OpenPack("@projectproductassets@", enginePakPath.Native()); + } + if (!enginePakOpened) + { + enginePakPath = AZ::IO::FixedMaxPath(AZ::Utils::GetExecutableDirectory()) / "engine.pak"; + m_archive->OpenPack("@projectproductassets@", enginePakPath.Native()); } } diff --git a/cmake/Platform/Common/Install_common.cmake b/cmake/Platform/Common/Install_common.cmake index 5fa7f21939..8fb2effe29 100644 --- a/cmake/Platform/Common/Install_common.cmake +++ b/cmake/Platform/Common/Install_common.cmake @@ -430,21 +430,6 @@ function(ly_setup_cmake_install) DESTINATION . COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} ) - string(CONFIGURE [=[ -if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$") - set(install_output_folder "${CMAKE_INSTALL_PREFIX}/@runtime_output_directory@") - file(WRITE ${install_output_folder}/engine.json -"{ - \"engine_name\": \"@LY_VERSION_ENGINE_NAME@\" -}") -endif() -]=] - install_engine_json_release - @ONLY - ) - install(CODE ${install_engine_json_release} - COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} # use the default for the time being - ) # Collect all Find files that were added with ly_add_external_target_path unset(additional_find_files) diff --git a/cmake/Projects.cmake b/cmake/Projects.cmake index 6109229e72..c09fe0fc6f 100644 --- a/cmake/Projects.cmake +++ b/cmake/Projects.cmake @@ -173,12 +173,9 @@ if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$") message(STATUS "${install_output_folder}/engine.pak generated") endif() endif() - file(WRITE ${install_output_folder}/project.json -"{ - \"project_name\": \"@project_name@\" -}") endif() ]=]) + string(CONFIGURE "${install_engine_pak_template}" install_engine_pak_code @ONLY) ly_install_run_code("${install_engine_pak_code}") From 36eac35bc35926fca3edfb75753b845d0a592eac Mon Sep 17 00:00:00 2001 From: jckand-amzn <82226555+jckand-amzn@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:38:38 -0500 Subject: [PATCH 093/226] Removing xfail from optimized Gradient Signal tests and disabling non-optimized suite (#4475) Signed-off-by: jckand-amzn --- .../Gem/PythonTests/largeworlds/CMakeLists.txt | 13 ------------- .../gradient_signal/TestSuite_Periodic_Optimized.py | 1 - 2 files changed, 14 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt index f1299ddc2d..d5c7fd5109 100644 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/CMakeLists.txt @@ -96,19 +96,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ## GradientSignal ## - ly_add_pytest( - NAME AutomatedTesting::GradientSignalTests_Periodic - TEST_SERIAL - TEST_SUITE periodic - PATH ${CMAKE_CURRENT_LIST_DIR}/gradient_signal/TestSuite_Periodic.py - RUNTIME_DEPENDENCIES - AZ::AssetProcessor - Legacy::Editor - AutomatedTesting.Assets - COMPONENT - LargeWorlds - ) - ly_add_pytest( NAME AutomatedTesting::GradientSignalTests_Periodic_Optimized TEST_SERIAL diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py index f996a1f8c3..514504d324 100644 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/gradient_signal/TestSuite_Periodic_Optimized.py @@ -10,7 +10,6 @@ import pytest from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite -@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.") @pytest.mark.SUITE_periodic @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("project", ["AutomatedTesting"]) From a870c6ad80a77a03a4869f79595c448f99b9091b Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 09:52:52 -0700 Subject: [PATCH 094/226] Fix explorer bugs and restore upgrade single option Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../ScriptCanvasBuilderWorkerUtility.cpp | 2 + .../Windows/Tools/UpgradeTool/Controller.cpp | 36 ++++++++------- .../Windows/Tools/UpgradeTool/Controller.h | 2 + .../View/Windows/Tools/UpgradeTool/Model.cpp | 24 +++++++++- .../Windows/Tools/UpgradeTool/ModelTraits.h | 2 +- .../Libraries/Core/ReceiveScriptEvent.cpp | 27 +++++------ .../Libraries/Core/ReceiveScriptEvent.h | 3 +- .../Libraries/Core/ScriptEventBase.cpp | 7 +-- .../ScriptCanvas/Translation/GraphToLua.cpp | 11 +++-- .../ScriptCanvas/Translation/GraphToX.cpp | 45 ++++++++++--------- .../ScriptCanvas/Translation/GraphToX.h | 5 ++- .../Translation/TranslationResult.cpp | 9 ++++ .../Translation/TranslationResult.h | 8 ++-- 13 files changed, 113 insertions(+), 68 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp index 0853789b19..665a481a17 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp @@ -113,6 +113,7 @@ namespace ScriptCanvasBuilder if (!isSuccessOutcome.IsSuccess()) { + // sanity check return AZ::Failure(isSuccessOutcome.TakeError()); } auto& translation = translationResult.m_translations.find(ScriptCanvas::Translation::TargetFlags::Lua)->second; @@ -481,6 +482,7 @@ namespace ScriptCanvasBuilder buildEntity->Activate(); } + AZ_Assert(buildEntity->GetState() == AZ::Entity::State::Active, "build entity not active"); return sourceGraph; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 4e4e842cb8..207f70aec1 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -131,6 +131,11 @@ namespace ScriptCanvasEditor } void Controller::OnButtonPressUpgrade() + { + OnButtonPressUpgradeImplementation({}); + } + + void Controller::OnButtonPressUpgradeImplementation(const AZ::Data::AssetInfo& assetInfo) { auto simpleUpdate = [this](AZ::Data::Asset asset) { @@ -202,12 +207,18 @@ namespace ScriptCanvasEditor SetLoggingPreferences(); ModifyConfiguration config; + config.modifySingleAsset = assetInfo; config.modification = simpleUpdate; config.onReadOnlyFile = onReadyOnlyFile; config.backupGraphBeforeModification = m_view->makeBackupCheckbox->isChecked(); ModelRequestsBus::Broadcast(&ModelRequestsTraits::Modify, config); } + void Controller::OnButtonPressUpgradeSingle(const AZ::Data::AssetInfo& assetInfo) + { + OnButtonPressUpgradeImplementation(assetInfo); + } + void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) { QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); @@ -325,7 +336,7 @@ namespace ScriptCanvasEditor OnScannedGraph(info, Filtered::Yes); } - void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, Filtered filtered) + void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, [[maybe_unused]] Filtered filtered) { m_view->tableWidget->insertRow(m_handledAssetCount); QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); @@ -338,19 +349,14 @@ namespace ScriptCanvasEditor rowGoToButton->setText("Upgrade"); rowGoToButton->setEnabled(false); SetRowBusy(m_handledAssetCount); -// \\ todo restore this -// connect(rowGoToButton, &QPushButton::clicked, [this, rowGoToButton, assetInfo] { -// -// // request upgrade of a single graph -// // AZ::SystemTickBus::QueueFunction([this, rowGoToButton, assetInfo]() { -// // // Queue the process state change because we can't connect to the SystemTick bus in a Qt lambda -// // UpgradeSingle(rowGoToButton, spinner, assetInfo); -// // }); -// // -// // AZ::SystemTickBus::ExecuteQueuedEvents(); -// -// }); - + connect + ( rowGoToButton + , &QPushButton::pressed + , this + , [this, assetInfo]() + { + this->OnButtonPressUpgradeSingle(assetInfo); + }); m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnAction), rowGoToButton); } @@ -424,7 +430,7 @@ namespace ScriptCanvasEditor } QString spinnerText = QStringLiteral("Upgrade in progress - "); - if (config.modifySingleAsset) + if (config.modifySingleAsset.m_assetId.IsValid()) { spinnerText.append(" single graph"); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index fd297832bb..23f35840be 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -64,6 +64,8 @@ namespace ScriptCanvasEditor void OnButtonPressClose(); void OnButtonPressScan(); void OnButtonPressUpgrade(); + void OnButtonPressUpgradeImplementation(const AZ::Data::AssetInfo& assetInfo); + void OnButtonPressUpgradeSingle(const AZ::Data::AssetInfo& assetInfo); void OnGraphUpgradeComplete(AZ::Data::Asset&, bool skipped) override; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index ed17293ab7..98edef54bf 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -101,11 +101,33 @@ namespace ScriptCanvasEditor return; } + auto results = m_scanner->TakeResult(); + if (modification.modifySingleAsset.m_assetId.IsValid()) + { + auto iter = AZStd::find_if + ( results.m_unfiltered.begin() + , results.m_unfiltered.end() + , [&modification](const auto& candidate) + { + return candidate.info.m_assetId == modification.modifySingleAsset.m_assetId; + }); + + if (iter == results.m_unfiltered.end()) + { + AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Requested upgrade graph not found in scanned list."); + return; + } + + WorkingAsset singleEntry = *iter; + results.m_unfiltered.clear(); + results.m_unfiltered.push_back(singleEntry); + } + m_modResults = {}; m_state = State::Modifying; m_log.Activate(); m_keepEditorAlive = AZStd::make_unique(); - auto results = m_scanner->TakeResult(); + m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); }); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h index 026748c344..01eb200542 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/ModelTraits.h @@ -26,7 +26,7 @@ namespace ScriptCanvasEditor { AZStd::function)> modification; AZStd::function onReadOnlyFile; - bool modifySingleAsset = false; + AZ::Data::AssetInfo modifySingleAsset; bool backupGraphBeforeModification = false; bool successfulDependencyUpgradeRequired = true; }; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp index 5a2eb80187..c548176af5 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp @@ -67,7 +67,7 @@ namespace ScriptCanvas void ReceiveScriptEvent::PopulateAsset(AZ::Data::Asset asset, SlotIdMapping& populationMapping) { - if (CreateHandler(asset)) + if (InitializeDefinition(asset)) { if (!CreateEbus()) { @@ -140,7 +140,6 @@ namespace ScriptCanvas } } - void ReceiveScriptEvent::InitializeEvent(AZ::Data::Asset asset, int eventIndex, SlotIdMapping& populationMapping) { if (!m_handler) @@ -353,6 +352,13 @@ namespace ScriptCanvas AZStd::optional ReceiveScriptEvent::GetEventIndex(AZStd::string eventName) const { + if (!m_handler) + { + const_cast(this)->InitializeDefinition(m_asset); + const_cast(this)->CreateEbus(); + } + + AZ_Error("ScriptCanvas", m_handler != nullptr, "GetEventIndex called and handler was not created"); return m_handler ? AZStd::optional(m_handler->GetFunctionIndex(eventName.c_str())) : AZStd::nullopt; } @@ -490,15 +496,10 @@ namespace ScriptCanvas return m_definition.IsAddressRequired() || (slot && slot->GetDataType().IsValid()); } - bool ReceiveScriptEvent::CreateHandler(AZ::Data::Asset asset) + bool ReceiveScriptEvent::InitializeDefinition(AZ::Data::Asset asset) { AZStd::lock_guard lock(m_mutex); - if (m_handler) - { - return true; - } - if (!asset) { return false; @@ -518,12 +519,11 @@ namespace ScriptCanvas } return true; - } void ReceiveScriptEvent::OnScriptEventReady(const AZ::Data::Asset& asset) { - if (CreateHandler(asset)) + if (InitializeDefinition(asset)) { CompleteInitialize(asset); } @@ -531,7 +531,7 @@ namespace ScriptCanvas bool ReceiveScriptEvent::CreateEbus() { - if (!m_ebus) + if (!m_ebus || !m_handler) { AZ::BehaviorContext* behaviorContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationBus::Events::GetBehaviorContext); @@ -547,13 +547,11 @@ namespace ScriptCanvas AZ_Assert(m_ebus, "Behavior Context EBus does not exist: %s", m_definition.GetName().c_str()); AZ_Assert(m_ebus->m_createHandler, "The ebus %s has no create handler!", m_definition.GetName().c_str()); AZ_Assert(m_ebus->m_destroyHandler, "The ebus %s has no destroy handler!", m_definition.GetName().c_str()); - AZ_Verify(m_ebus->m_createHandler->InvokeResult(m_handler, &m_definition), "Behavior Context EBus handler creation failed %s", m_definition.GetName().c_str()); - AZ_Assert(m_handler, "Ebus create handler failed %s", m_definition.GetName().c_str()); } - return true; + return m_ebus != nullptr && m_handler != nullptr; } bool ReceiveScriptEvent::IsOutOfDate(const VersionData& graphVersion) const @@ -597,7 +595,6 @@ namespace ScriptCanvas } } - AZStd::string ReceiveScriptEvent::GetUpdateString() const { if (m_ebus) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h index 0f8d673629..a41d0ba3f9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h @@ -101,7 +101,7 @@ namespace ScriptCanvas Internal::ScriptEventEntry ConfigureEbusEntry(const ScriptEvents::Method& methodDefinition, const AZ::BehaviorEBusHandler::BusForwarderEvent& event, SlotIdMapping& populationMapping); - bool CreateHandler(AZ::Data::Asset asset); + bool InitializeDefinition(AZ::Data::Asset asset); void CompleteInitialize(AZ::Data::Asset asset); void PopulateAsset(AZ::Data::Asset asset, SlotIdMapping& populationMapping); bool m_eventInitComplete = false; @@ -120,7 +120,6 @@ namespace ScriptCanvas bool m_autoConnectToGraphOwner = true; bool m_connected; - }; } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp index 3b01a8fa7c..e4cbfc94f7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ScriptEventBase.cpp @@ -122,11 +122,8 @@ namespace ScriptCanvas void ScriptEventBase::OnActivate() { - if (!m_asset || m_asset.GetStatus() == AZ::Data::AssetData::AssetStatus::NotLoaded) - { - m_asset = AZ::Data::AssetManager::Instance().GetAsset(m_scriptEventAssetId, AZ::Data::AssetLoadBehavior::PreLoad); - m_asset.BlockUntilLoadComplete(); - } + m_asset = AZ::Data::AssetManager::Instance().GetAsset(m_scriptEventAssetId, AZ::Data::AssetLoadBehavior::PreLoad); + m_asset.BlockUntilLoadComplete(); } void ScriptEventBase::OnAssetReady(AZ::Data::Asset asset) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index 9a1ef73126..ee7eb704bb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -246,8 +246,7 @@ namespace ScriptCanvas } else { - ErrorList errors = { AZStd::string("provide translation failure details") }; - return AZ::Failure(errors); + return AZ::Failure(translation.MoveErrors()); } } @@ -874,7 +873,13 @@ namespace ScriptCanvas AZStd::optional eventIndex = ebusHandling->m_node->GetEventIndex(nameAndEventThread.first); if (!eventIndex) { - AddError(nullptr, aznew Internal::ParseError(ebusHandling->m_node->GetEntityId(), AZStd::string::format("EBus handler did not return a valid index for event %s", nameAndEventThread.first.c_str()))); + AddError(nullptr, + aznew Internal::ParseError( + ebusHandling->m_node->GetEntityId() + , AZStd::string::format + ( "EBus Handler %s did not return a valid index for event %s" + , ebusHandling->m_ebusName.c_str() + , nameAndEventThread.first.c_str()))); return; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp index 09315ec4b0..d21fb354b1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.cpp @@ -107,27 +107,9 @@ namespace ScriptCanvas m_translationDuration = AZStd::chrono::microseconds(AZStd::chrono::system_clock::now() - m_translationStartTime).count(); } - AZStd::string GraphToX::ResolveScope(const AZStd::vector& namespaces) - { - AZStd::string resolution; - - if (!namespaces.empty()) - { - resolution = Grammar::ToIdentifier(namespaces[0]); - - for (size_t index = 1; index < namespaces.size(); ++index) - { - resolution += m_configuration.m_lexicalScopeDelimiter; - resolution += Grammar::ToIdentifier(namespaces[index]); - } - } - - return resolution; - } - - void GraphToX::SingleLineComment(Writer& writer) + AZStd::vector&& GraphToX::MoveErrors() { - writer.Write(m_configuration.m_singleLineComment); + return AZStd::move(m_errors); } void GraphToX::OpenBlockComment(Writer& writer) @@ -160,6 +142,29 @@ namespace ScriptCanvas writer.Indent(); } + AZStd::string GraphToX::ResolveScope(const AZStd::vector& namespaces) + { + AZStd::string resolution; + + if (!namespaces.empty()) + { + resolution = Grammar::ToIdentifier(namespaces[0]); + + for (size_t index = 1; index < namespaces.size(); ++index) + { + resolution += m_configuration.m_lexicalScopeDelimiter; + resolution += Grammar::ToIdentifier(namespaces[index]); + } + } + + return resolution; + } + + void GraphToX::SingleLineComment(Writer& writer) + { + writer.Write(m_configuration.m_singleLineComment); + } + void GraphToX::WriteCopyright(Writer& writer) { OpenBlockComment(writer); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h index 062a58efe1..c4e189679a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToX.h @@ -51,12 +51,13 @@ namespace ScriptCanvas AZStd::string_view GetGraphName() const; AZStd::string_view GetFullPath() const; AZStd::sys_time_t GetTranslationDuration() const; - AZStd::string ResolveScope(const AZStd::vector& namespaces); - void SingleLineComment(Writer& writer); + AZStd::vector&& MoveErrors(); void OpenBlockComment(Writer& writer); void OpenFunctionBlock(Writer& writer); void OpenNamespace(Writer& writer, AZStd::string_view ns); void OpenScope(Writer& writer); + AZStd::string ResolveScope(const AZStd::vector& namespaces); + void SingleLineComment(Writer& writer); void WriteCopyright(Writer& writer); void WriteDoNotModify(Writer& writer); void WriteLastWritten(Writer& writer); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp index dd8b42730d..c39cac13a3 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.cpp @@ -72,6 +72,15 @@ namespace ScriptCanvas resultString += entry->GetDescription(); } + for (const auto& errors : m_errors) + { + for (auto& entry : errors.second) + { + resultString += "* "; + resultString += entry->GetDescription(); + } + } + return resultString; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h index 0cde56d5dd..bd616fbfbb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationResult.h @@ -12,10 +12,11 @@ #include #include #include -#include #include -#include +#include +#include #include +#include namespace AZ { @@ -85,7 +86,7 @@ namespace ScriptCanvas AZStd::sys_time_t m_duration; }; - using ErrorList = AZStd::vector; + using ErrorList = AZStd::vector; using Errors = AZStd::unordered_map; using Translations = AZStd::unordered_map; @@ -102,7 +103,6 @@ namespace ScriptCanvas const AZStd::sys_time_t m_translationDuration; Result(AZStd::string invalidSourceInfo); - Result(Result&& source); Result(Grammar::AbstractCodeModelConstPtr model); Result(Grammar::AbstractCodeModelConstPtr model, Translations&& translations, Errors&& errors); From 4a4c93f8662e0cc69c178ebd23101bf27762e86d Mon Sep 17 00:00:00 2001 From: sphrose <82213493+sphrose@users.noreply.github.com> Date: Tue, 5 Oct 2021 17:53:05 +0100 Subject: [PATCH 095/226] Terrain/sphrose/surface gradient list component (#4409) * cherry-pick conflict fix Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * Missed include file Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * review changes. Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * cherry-pick merge fix Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * review changes. Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * bug fix Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * review changes. Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * compile fix Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> * compile fix Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> --- .../Terrain/TerrainDataRequestBus.h | 47 +++++- Gems/PhysX/Code/Tests/PhysXTestUtil.h | 4 + .../SurfaceData/SurfaceDataConstants.h | 3 +- .../Ebuses/TerrainAreaSurfaceRequestBus.h | 35 ++++ .../Ebuses/TerrainGradientSurfaceListBus.h | 34 ++++ .../TerrainSurfaceGradientListComponent.cpp | 157 ++++++++++++++++++ .../TerrainSurfaceGradientListComponent.h | 77 +++++++++ ...torTerrainSurfaceGradientListComponent.cpp | 22 +++ ...ditorTerrainSurfaceGradientListComponent.h | 32 ++++ .../Code/Source/EditorTerrainModule.cpp | 2 + Gems/Terrain/Code/Source/TerrainModule.cpp | 2 + .../Source/TerrainSystem/TerrainSystem.cpp | 135 +++++++++++++-- .../Code/Source/TerrainSystem/TerrainSystem.h | 30 +++- .../Code/terrain_editor_shared_files.cmake | 2 + Gems/Terrain/Code/terrain_files.cmake | 3 + 15 files changed, 563 insertions(+), 22 deletions(-) create mode 100644 Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h create mode 100644 Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h create mode 100644 Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp create mode 100644 Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h create mode 100644 Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp create mode 100644 Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h diff --git a/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h b/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h index 92eb28a110..3f6a8f0960 100644 --- a/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h +++ b/Code/Framework/AzFramework/AzFramework/Terrain/TerrainDataRequestBus.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include #include @@ -17,16 +18,38 @@ namespace AzFramework { namespace SurfaceData { + namespace Constants + { + static const char* s_unassignedTagName = "(unassigned)"; + } + struct SurfaceTagWeight { AZ_TYPE_INFO(SurfaceTagWeight, "{EA14018E-E853-4BF5-8E13-D83BB99A54CC}"); - AZ::Crc32 m_surfaceType; - float m_weight; //! A Value in the range [0.0f .. 1.0f] + AZ::Crc32 m_surfaceType = AZ::Crc32(Constants::s_unassignedTagName); + float m_weight = 0.0f; //! A Value in the range [0.0f .. 1.0f] //! Don't call this directly. TerrainDataRequests::Reflect is doing it already. static void Reflect(AZ::ReflectContext* context); }; + + struct SurfaceTagWeightComparator + { + bool operator()(const SurfaceTagWeight& tagWeight1, const SurfaceTagWeight& tagWeight2) const + { + if (!AZ::IsClose(tagWeight1.m_weight, tagWeight2.m_weight)) + { + return tagWeight1.m_weight > tagWeight2.m_weight; + } + else + { + return tagWeight1.m_surfaceType > tagWeight2.m_surfaceType; + } + } + }; + + using OrderedSurfaceTagWeightSet = AZStd::set; } //namespace SurfaceData namespace Terrain @@ -75,8 +98,28 @@ namespace AzFramework //! @terrainExists: Can be nullptr. If != nullptr then, if there's no terrain at location x,y or location x,y is inside a terrain HOLE then *terrainExistsPtr will be set to false, //! otherwise *terrainExistsPtr will be set to true. virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight(AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const = 0; + virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2(const AZ::Vector2& inPosition, Sampler sampleFilter = Sampler::DEFAULT, bool* terrainExistsPtr = nullptr) const = 0; virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats(float x, float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const = 0; + //! Given an XY coordinate, return the set of surface types and weights. The Vector3 input position version is defined to ignore + //! the input Z value. + virtual void GetSurfaceWeights( + const AZ::Vector3& inPosition, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + virtual void GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + virtual void GetSurfaceWeightsFromFloats( + float x, + float y, + SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const = 0; + //! Convenience function for low level systems that can't do a reverse lookup from Crc to string. Everyone else should use GetMaxSurfaceWeight or GetMaxSurfaceWeightFromFloats. //! Not available in the behavior context. //! Returns nullptr if the position is inside a hole or outside of the terrain boundaries. diff --git a/Gems/PhysX/Code/Tests/PhysXTestUtil.h b/Gems/PhysX/Code/Tests/PhysXTestUtil.h index 8e81b9cb89..1c86768de7 100644 --- a/Gems/PhysX/Code/Tests/PhysXTestUtil.h +++ b/Gems/PhysX/Code/Tests/PhysXTestUtil.h @@ -115,7 +115,11 @@ namespace PhysX } float GetHeightFromFloats(float, float, Sampler, bool*) const override { return {}; } AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight(AZ::Vector3, Sampler, bool*) const override { return {}; } + AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2(const AZ::Vector2&, Sampler, bool*) const override { return {}; } AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats(float, float, Sampler, bool*) const override { return {}; } + void GetSurfaceWeights(const AZ::Vector3&, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override {} + void GetSurfaceWeightsFromVector2(const AZ::Vector2&, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override{}; + void GetSurfaceWeightsFromFloats(float, float, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet&, Sampler, bool*) const override {} const char* GetMaxSurfaceName(AZ::Vector3, Sampler, bool*) const override { return {}; } bool GetIsHoleFromFloats(float, float, Sampler) const override { return {}; } AZ::Vector3 GetNormal(AZ::Vector3, Sampler, bool*) const override { return {}; } diff --git a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h index 9b18e4f9e7..3f4a1bb605 100644 --- a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h +++ b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataConstants.h @@ -9,12 +9,13 @@ #pragma once #include +#include namespace SurfaceData { namespace Constants { - static const char* s_unassignedTagName = "(unassigned)"; + static const char* s_unassignedTagName = AzFramework::SurfaceData::Constants::s_unassignedTagName; static const char* s_terrainHoleTagName = "terrainHole"; static const char* s_terrainTagName = "terrain"; diff --git a/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h new file mode 100644 index 0000000000..4c04cf1e42 --- /dev/null +++ b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +namespace Terrain +{ + + //! This bus provides retrieval of information from Terrain Surfaces. + class TerrainAreaSurfaceRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainAreaSurfaceRequests() = default; + + //! Get the surfaces and weights from a gradient at a given position sorted into descending order of weight. + virtual void GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const = 0; + }; + + using TerrainAreaSurfaceRequestBus = AZ::EBus; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h new file mode 100644 index 0000000000..5734a6e023 --- /dev/null +++ b/Gems/Terrain/Code/Include/Terrain/Ebuses/TerrainGradientSurfaceListBus.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +namespace Terrain +{ + + //! This bus provides retrieval of information from Terrain Surfaces. + class TerrainAreaSurfaceRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainAreaSurfaceRequests() = default; + + virtual void GetSurfaceWeights(const AZ::Vector3& inPosition, SurfaceData::SurfaceTagWeightMap& surfaceWeights) const = 0; + }; + + using TerrainAreaSurfaceRequestBus = AZ::EBus; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp new file mode 100644 index 0000000000..2fbd6a4814 --- /dev/null +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +#include + +namespace Terrain +{ + void TerrainSurfaceGradientMapping::Reflect(AZ::ReflectContext* context) + { + if (auto serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(1) + ->Field("Gradient Entity", &TerrainSurfaceGradientMapping::m_gradientEntityId) + ->Field("Surface Tag", &TerrainSurfaceGradientMapping::m_surfaceTag) + ; + + if (auto edit = serialize->GetEditContext()) + { + edit->Class("Terrain Surface Gradient Mapping", "Mapping between a gradient and a surface.") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Show) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_gradientEntityId, "Gradient Entity", "ID of Entity providing a gradient.") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) + ->UIElement("GradientPreviewer", "Previewer") + ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "") + ->Attribute(AZ_CRC_CE("GradientEntity"), &TerrainSurfaceGradientMapping::m_gradientEntityId) + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_surfaceTag, "Surface Tag", + "Surface type to map to this gradient.") + ; + } + } + } + + void TerrainSurfaceGradientListConfig::Reflect(AZ::ReflectContext* context) + { + TerrainSurfaceGradientMapping::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(1) + ->Field("Mappings", &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings) + ; + + AZ::EditContext* edit = serialize->GetEditContext(); + if (edit) + { + edit->Class( + "Terrain Surface Gradient List Component", "Provide mapping between gradients and surfaces.") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::Show) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings, "Gradient to Surface Mappings", "Maps Gradient Entities to Surfaces.") + ; + } + } + } + + void TerrainSurfaceGradientListComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainSurfaceProviderService")); + } + + void TerrainSurfaceGradientListComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainSurfaceProviderService")); + } + + void TerrainSurfaceGradientListComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC("TerrainAreaService")); + } + + void TerrainSurfaceGradientListComponent::Reflect(AZ::ReflectContext* context) + { + TerrainSurfaceGradientListConfig::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(0)->Field("Configuration", &TerrainSurfaceGradientListComponent::m_configuration) + ; + } + } + + TerrainSurfaceGradientListComponent::TerrainSurfaceGradientListComponent(const TerrainSurfaceGradientListConfig& configuration) + : m_configuration(configuration) + { + } + + void TerrainSurfaceGradientListComponent::Activate() + { + Terrain::TerrainAreaSurfaceRequestBus::Handler::BusConnect(GetEntityId()); + } + + void TerrainSurfaceGradientListComponent::Deactivate() + { + Terrain::TerrainAreaSurfaceRequestBus::Handler::BusDisconnect(); + } + + bool TerrainSurfaceGradientListComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig) + { + if (auto config = azrtti_cast(baseConfig)) + { + m_configuration = *config; + return true; + } + return false; + } + + bool TerrainSurfaceGradientListComponent::WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const + { + if (auto config = azrtti_cast(outBaseConfig)) + { + *config = m_configuration; + return true; + } + return false; + } + + void TerrainSurfaceGradientListComponent::GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const + { + outSurfaceWeights.clear(); + + const GradientSignal::GradientSampleParams params(AZ::Vector3(inPosition.GetX(), inPosition.GetY(), 0.0f)); + + for (const auto& mapping : m_configuration.m_gradientSurfaceMappings) + { + float weight = 0.0f; + GradientSignal::GradientRequestBus::EventResult(weight, mapping.m_gradientEntityId, &GradientSignal::GradientRequestBus::Events::GetValue, params); + + AzFramework::SurfaceData::SurfaceTagWeight tagWeight; + tagWeight.m_surfaceType = mapping.m_surfaceTag; + tagWeight.m_weight = weight; + outSurfaceWeights.emplace(tagWeight); + } + } +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h new file mode 100644 index 0000000000..799038354c --- /dev/null +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +#include + +namespace LmbrCentral +{ + template + class EditorWrappedComponentBase; +} + +namespace Terrain +{ + class TerrainSurfaceGradientMapping final + { + public: + AZ_CLASS_ALLOCATOR(TerrainSurfaceGradientMapping, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainSurfaceGradientMapping, "{473AD2CE-F22A-45A9-803F-2192F3D9F2BF}"); + static void Reflect(AZ::ReflectContext* context); + + AZ::EntityId m_gradientEntityId; + SurfaceData::SurfaceTag m_surfaceTag; + }; + + class TerrainSurfaceGradientListConfig : public AZ::ComponentConfig + { + public: + AZ_CLASS_ALLOCATOR(TerrainSurfaceGradientListConfig, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainSurfaceGradientListConfig, "{E9B083AD-8D30-47DA-8F8E-AA089BFA35E9}", AZ::ComponentConfig); + static void Reflect(AZ::ReflectContext* context); + + AZStd::vector m_gradientSurfaceMappings; + }; + + class TerrainSurfaceGradientListComponent + : public AZ::Component + , public Terrain::TerrainAreaSurfaceRequestBus::Handler + { + public: + template + friend class LmbrCentral::EditorWrappedComponentBase; + AZ_COMPONENT(TerrainSurfaceGradientListComponent, "{51F97C95-6B8A-4B06-B394-BD25BFCC8B7E}"); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void Reflect(AZ::ReflectContext* context); + + TerrainSurfaceGradientListComponent(const TerrainSurfaceGradientListConfig& configuration); + TerrainSurfaceGradientListComponent() = default; + ~TerrainSurfaceGradientListComponent() = default; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Component interface implementation + void Activate() override; + void Deactivate() override; + bool ReadInConfig(const AZ::ComponentConfig* baseConfig) override; + bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; + + // TerrainAreaSurfaceRequestBus + void GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const override; + + private: + TerrainSurfaceGradientListConfig m_configuration; + }; +} // namespace Terrain diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp new file mode 100644 index 0000000000..cf2c44225a --- /dev/null +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace Terrain +{ + void EditorTerrainSurfaceGradientListComponent::Reflect(AZ::ReflectContext* context) + { + BaseClassType::ReflectSubClass(context, 1, + &LmbrCentral::EditorWrappedComponentBaseVersionConverter + ); + } +} diff --git a/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h new file mode 100644 index 0000000000..e2c5f1b280 --- /dev/null +++ b/Gems/Terrain/Code/Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace Terrain +{ + class EditorTerrainSurfaceGradientListComponent + : public LmbrCentral::EditorWrappedComponentBase + { + public: + using BaseClassType = LmbrCentral::EditorWrappedComponentBase; + AZ_EDITOR_COMPONENT(EditorTerrainSurfaceGradientListComponent, "{49831E91-A11F-4EFF-A824-6D85C284B934}", BaseClassType); + static void Reflect(AZ::ReflectContext* context); + + static constexpr const char* const s_categoryName = "Terrain"; + static constexpr const char* const s_componentName = "Terrain Surface Gradient List"; + static constexpr const char* const s_componentDescription = "Provides a mapping between gradients and surface tags for use by the terrain system."; + static constexpr const char* const s_icon = "Editor/Icons/Components/TerrainLayerSpawner.svg"; + static constexpr const char* const s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainLayerSpawner.svg"; + static constexpr const char* const s_helpUrl = ""; + }; +} diff --git a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp index 5305087694..9107ea8541 100644 --- a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp +++ b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -23,6 +24,7 @@ namespace Terrain { Terrain::EditorTerrainHeightGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainLayerSpawnerComponent::CreateDescriptor(), + Terrain::EditorTerrainSurfaceGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainSystemComponent::CreateDescriptor(), Terrain::EditorTerrainWorldComponent::CreateDescriptor(), Terrain::EditorTerrainWorldDebuggerComponent::CreateDescriptor(), diff --git a/Gems/Terrain/Code/Source/TerrainModule.cpp b/Gems/Terrain/Code/Source/TerrainModule.cpp index 24b87b4ab3..6aeddc3cd5 100644 --- a/Gems/Terrain/Code/Source/TerrainModule.cpp +++ b/Gems/Terrain/Code/Source/TerrainModule.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include namespace Terrain @@ -30,6 +31,7 @@ namespace Terrain TerrainWorldRendererComponent::CreateDescriptor(), TerrainHeightGradientListComponent::CreateDescriptor(), TerrainLayerSpawnerComponent::CreateDescriptor(), + TerrainSurfaceGradientListComponent::CreateDescriptor(), TerrainSurfaceDataSystemComponent::CreateDescriptor(), }); } diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp index 46ac677dd1..821e0bd2e2 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.cpp @@ -8,10 +8,17 @@ #include #include +#include #include #include #include +#include +#include +#include + +#include + using namespace Terrain; bool TerrainLayerPriorityComparator::operator()(const AZ::EntityId& layer1id, const AZ::EntityId& layer2id) const @@ -201,6 +208,7 @@ float TerrainSystem::GetHeightSynchronous(float x, float y, Sampler sampler, boo break; } + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. if (terrainExistsPtr) { *terrainExistsPtr = terrainExists; @@ -291,50 +299,143 @@ AZ::Vector3 TerrainSystem::GetNormalFromFloats(float x, float y, Sampler sampler AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeight( - [[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const + const AZ::Vector3 position, Sampler sampleFilter, bool* terrainExistsPtr) const +{ + return GetMaxSurfaceWeightFromFloats(position.GetX(), position.GetY(), sampleFilter, terrainExistsPtr); +} + +AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromVector2(const AZ::Vector2& inPosition, Sampler sampleFilter, bool* terrainExistsPtr) const +{ + return GetMaxSurfaceWeightFromFloats(inPosition.GetX(), inPosition.GetY(), sampleFilter, terrainExistsPtr); +} + +AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromFloats( + const float x, const float y, Sampler sampleFilter, bool* terrainExistsPtr) const { if (terrainExistsPtr) { *terrainExistsPtr = true; } - return AzFramework::SurfaceData::SurfaceTagWeight(); + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet weightSet; + + GetOrderedSurfaceWeights(x, y, sampleFilter, weightSet, terrainExistsPtr); + + if (weightSet.empty()) + { + return {}; + } + + return *weightSet.begin(); } -AzFramework::SurfaceData::SurfaceTagWeight TerrainSystem::GetMaxSurfaceWeightFromFloats( - [[maybe_unused]] float x, - [[maybe_unused]] float y, - [[maybe_unused]] Sampler sampleFilter, - [[maybe_unused]] bool* terrainExistsPtr) const +AZ::EntityId TerrainSystem::FindBestAreaEntityAtPosition(float x, float y, AZ::Aabb& bounds) const +{ + AZ::Vector3 inPosition = AZ::Vector3(x, y, 0); + + // Find the highest priority layer that encompasses this position + AZStd::shared_lock lock(m_areaMutex); + + // The areas are sorted into priority order: the first area that contains inPosition is the most suitable. + for (const auto& [areaId, areaBounds] : m_registeredAreas) + { + inPosition.SetZ(areaBounds.GetMin().GetZ()); + if (areaBounds.Contains(inPosition)) + { + bounds = areaBounds; + return areaId; + } + } + + return AZ::EntityId(); +} + +void TerrainSystem::GetOrderedSurfaceWeights( + const float x, + const float y, + [[maybe_unused]] Sampler sampler, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + bool* terrainExistsPtr) const +{ + AZ::Aabb bounds; + AZ::EntityId bestAreaId = FindBestAreaEntityAtPosition(x, y, bounds); + + if (terrainExistsPtr) + { + GetHeightFromFloats(x, y, AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, terrainExistsPtr); + } + + outSurfaceWeights.clear(); + + if (!bestAreaId.IsValid()) + { + return; + } + + const AZ::Vector3 inPosition = AZ::Vector3(x, y, 0.0f); + + // Get all the surfaces with weights at the given point. + Terrain::TerrainAreaSurfaceRequestBus::Event( + bestAreaId, &Terrain::TerrainAreaSurfaceRequestBus::Events::GetSurfaceWeights, inPosition, outSurfaceWeights); +} + +void TerrainSystem::GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { if (terrainExistsPtr) { *terrainExistsPtr = true; } - return AzFramework::SurfaceData::SurfaceTagWeight(); + GetOrderedSurfaceWeights(inPosition.GetX(), inPosition.GetY(), sampleFilter, outSurfaceWeights, terrainExistsPtr); } -const char* TerrainSystem::GetMaxSurfaceName( - [[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const +void TerrainSystem::GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. if (terrainExistsPtr) { *terrainExistsPtr = true; } - return ""; + GetOrderedSurfaceWeights(inPosition.GetX(), inPosition.GetY(), sampleFilter, outSurfaceWeights, terrainExistsPtr); } -/* -void TerrainSystem::GetSurfaceWeights( - [[maybe_unused]] const AZ::Vector3& inPosition, - [[maybe_unused]] Sampler sampleFilter, - [[maybe_unused]] SurfaceData::SurfaceTagWeightMap& outSurfaceWeights) +void TerrainSystem::GetSurfaceWeightsFromFloats( + float x, + float y, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter, + bool* terrainExistsPtr) const { - // TODO: implement + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. + if (terrainExistsPtr) + { + *terrainExistsPtr = true; + } + + GetOrderedSurfaceWeights(x, y, sampleFilter, outSurfaceWeights, terrainExistsPtr); } +const char* TerrainSystem::GetMaxSurfaceName([[maybe_unused]] AZ::Vector3 position, [[maybe_unused]] Sampler sampleFilter, [[maybe_unused]] bool* terrainExistsPtr) const +{ + // For now, always set terrainExists to true, as we don't have a way to author data for terrain holes yet. + if (terrainExistsPtr) + { + *terrainExistsPtr = true; + } + + return ""; +} + +/* void TerrainSystem::GetSurfacePoint( const AZ::Vector3& inPosition, [[maybe_unused]] Sampler sampleFilter, SurfaceData::SurfacePoint& outSurfacePoint) { diff --git a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h index a9240e02a6..66c48850ef 100644 --- a/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h +++ b/Gems/Terrain/Code/Source/TerrainSystem/TerrainSystem.h @@ -70,9 +70,28 @@ namespace Terrain //! HOLE then *terrainExistsPtr will be set to false, //! otherwise *terrainExistsPtr will be set to true. AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight( - AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + const AZ::Vector3 position, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2( + const AZ::Vector2& inPosition, Sampler sampleFilter = Sampler::DEFAULT, bool* terrainExistsPtr = nullptr) const override; AzFramework::SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats( - float x, float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + const float x, const float y, Sampler sampleFilter = Sampler::BILINEAR, bool* terrainExistsPtr = nullptr) const override; + + void GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; + void GetSurfaceWeightsFromVector2( + const AZ::Vector2& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; + void GetSurfaceWeightsFromFloats( + float x, + float y, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + Sampler sampleFilter = Sampler::DEFAULT, + bool* terrainExistsPtr = nullptr) const override; //! Convenience function for low level systems that can't do a reverse lookup from Crc to string. Everyone else should use //! GetMaxSurfaceWeight or GetMaxSurfaceWeightFromFloats. Not available in the behavior context. Returns nullptr if the position is @@ -96,6 +115,13 @@ namespace Terrain private: void ClampPosition(float x, float y, AZ::Vector2& outPosition, AZ::Vector2& normalizedDelta) const; + AZ::EntityId FindBestAreaEntityAtPosition(float x, float y, AZ::Aabb& bounds) const; + void GetOrderedSurfaceWeights( + const float x, + const float y, + Sampler sampler, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights, + bool* terrainExistsPtr) const; float GetHeightSynchronous(float x, float y, Sampler sampler, bool* terrainExistsPtr) const; float GetTerrainAreaHeight(float x, float y, bool& terrainExists) const; AZ::Vector3 GetNormalSynchronous(float x, float y, Sampler sampler, bool* terrainExistsPtr) const; diff --git a/Gems/Terrain/Code/terrain_editor_shared_files.cmake b/Gems/Terrain/Code/terrain_editor_shared_files.cmake index d4719f46d5..efb68eca31 100644 --- a/Gems/Terrain/Code/terrain_editor_shared_files.cmake +++ b/Gems/Terrain/Code/terrain_editor_shared_files.cmake @@ -11,6 +11,8 @@ set(FILES Source/EditorComponents/EditorTerrainHeightGradientListComponent.h Source/EditorComponents/EditorTerrainLayerSpawnerComponent.cpp Source/EditorComponents/EditorTerrainLayerSpawnerComponent.h + Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.cpp + Source/EditorComponents/EditorTerrainSurfaceGradientListComponent.h Source/EditorComponents/EditorTerrainWorldComponent.cpp Source/EditorComponents/EditorTerrainWorldComponent.h Source/EditorComponents/EditorTerrainWorldDebuggerComponent.cpp diff --git a/Gems/Terrain/Code/terrain_files.cmake b/Gems/Terrain/Code/terrain_files.cmake index 2c013fa332..6d190b7d5e 100644 --- a/Gems/Terrain/Code/terrain_files.cmake +++ b/Gems/Terrain/Code/terrain_files.cmake @@ -7,12 +7,15 @@ # set(FILES + Include/Terrain/Ebuses/TerrainAreaSurfaceRequestBus.h Source/Components/TerrainHeightGradientListComponent.cpp Source/Components/TerrainHeightGradientListComponent.h Source/Components/TerrainLayerSpawnerComponent.cpp Source/Components/TerrainLayerSpawnerComponent.h Source/Components/TerrainSurfaceDataSystemComponent.cpp Source/Components/TerrainSurfaceDataSystemComponent.h + Source/Components/TerrainSurfaceGradientListComponent.cpp + Source/Components/TerrainSurfaceGradientListComponent.h Source/Components/TerrainSystemComponent.cpp Source/Components/TerrainSystemComponent.h Source/Components/TerrainWorldComponent.cpp From aef1f01de2b598758af06c52458d219a0f61db53 Mon Sep 17 00:00:00 2001 From: Tommy Walton <82672795+amzn-tommy@users.noreply.github.com> Date: Tue, 5 Oct 2021 09:58:54 -0700 Subject: [PATCH 096/226] Expose OnModelReady to behavior context for hydra automation (#4331) * Expose OnModelReady to behavior context for hydra automation Signed-off-by: amzn-tommy * Adding assets used by the hydra test to Atom/TestData Signed-off-by: amzn-tommy * Attempt to fix line ending Signed-off-by: amzn-tommy * Moving behavior context for mesh notification bus to the component controller Signed-off-by: amzn-tommy * Changed the AssetManager DispatchEvents function to continously pump the AssetBus of queued functions until empty. This replicates the old behavior of the EBusQueuePolicy::Execute function that would continue to execute functions if new ones were added during the execution of the current queue. Split the TestFixture class from the AssetHandler and EBus handler for the DynamicSliceInstanceSpawnerTests and PrefabInstanceSpawnerTest. This avoids the AssetMananager destructor from deleting the test fixture if the call to UnregisterHandler is ever removed. This also allows the memory allocators to get online earlier. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removing an incorrect [[maybe_unused]] Signed-off-by: amzn-tommy * Moving incorrectly placed [[maybe_unused]] Signed-off-by: amzn-tommy Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../DisplayVertexColor.material | 18 +++++++++++++ .../Objects/ModelHotReload/novertexcolor.fbx | 3 +++ .../Objects/ModelHotReload/sphere_5lods.fbx | 3 +++ .../Objects/ModelHotReload/vertexcolor.fbx | 3 +++ .../Source/Mesh/MeshComponentController.cpp | 25 ++++++++++++++++++- 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material create mode 100644 Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx create mode 100644 Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx create mode 100644 Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material new file mode 100644 index 0000000000..104d675387 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/DisplayVertexColor.material @@ -0,0 +1,18 @@ +{ + "description": "", + "materialType": "Materials/Types/StandardMultilayerPBR.materialtype", + "parentMaterial": "", + "propertyLayoutVersion": 3, + "properties": { + "blend": { + "blendSource": "BlendMaskVertexColors", + "debugDrawMode": "FinalBlendWeights", + "enableLayer2": true, + "enableLayer3": true, + "textureMap": "" + }, + "parallax": { + "enable": false + } + } +} diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx new file mode 100644 index 0000000000..abc518cf09 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/novertexcolor.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6d860c6fc3703914716a97910899eca2e66927688690646f697c6246ac310fb +size 317340 diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx new file mode 100644 index 0000000000..de03622834 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/sphere_5lods.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91b8153f93e4773d872478fef40ff00c1b8d5f1ef13101cf62f81956e1c30107 +size 68800 diff --git a/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx new file mode 100644 index 0000000000..3bbbc29a33 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Objects/ModelHotReload/vertexcolor.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cf646a0a977c2edc5ee2ab6351ef633f194ce60c59ea3cb8359f71648db668e +size 374492 diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp index 6cdb44a9e1..12b14d8162 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp @@ -32,6 +32,23 @@ namespace AZ { namespace Render { + namespace Internal + { + struct MeshComponentNotificationBusHandler final + : public MeshComponentNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + AZ_EBUS_BEHAVIOR_BINDER( + MeshComponentNotificationBusHandler, "{8B8F4977-817F-4C7C-9141-0E5FF899E1BC}", AZ::SystemAllocator, OnModelReady); + + void OnModelReady( + [[maybe_unused]] const Data::Asset& modelAsset, + [[maybe_unused]] const Data::Instance& model) override + { + Call(FN_OnModelReady); + } + }; + } // namespace Internal namespace MeshComponentControllerVersionUtility { @@ -173,6 +190,12 @@ namespace AZ ->VirtualProperty("MinimumScreenCoverage", "GetMinimumScreenCoverage", "SetMinimumScreenCoverage") ->VirtualProperty("QualityDecayRate", "GetQualityDecayRate", "SetQualityDecayRate") ; + + behaviorContext->EBus("MeshComponentNotificationBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "render") + ->Attribute(AZ::Script::Attributes::Module, "render") + ->Handler(); } } @@ -306,7 +329,7 @@ namespace AZ return model ? model->GetUvNames() : AZStd::unordered_set(); } - void MeshComponentController::OnMaterialsUpdated([[maybe_unused]] const MaterialAssignmentMap& materials) + void MeshComponentController::OnMaterialsUpdated(const MaterialAssignmentMap& materials) { if (m_meshFeatureProcessor) { From 256564a3e09a7fc677223fc47db9e0531b2981c6 Mon Sep 17 00:00:00 2001 From: Tommy Walton <82672795+amzn-tommy@users.noreply.github.com> Date: Tue, 5 Oct 2021 09:59:13 -0700 Subject: [PATCH 097/226] Model Hot-Reloading (#4304) * Added a ModelReloader class that handles reloading the hierarchy of assets in the correct order. A ModelReloaderSystem that is used to make sure there is only one ModelReloader at a time for a given asset. Modified the Model, ModelLodAsset, and Buffer assets to not automatically reload, and instead handle reloads manually via AssetCatalog events. Modified the MeshLoader to kick off a reload via the ModelReloaderSystem whenever a model asset is added or changed. Signed-off-by: amzn-tommy * Comment updates Signed-off-by: amzn-tommy * Minor naming and comment updates based on PR feedback Signed-off-by: amzn-tommy * Correcting previous commit. I flipped == to != when switching from count to find, when it should have stayed == Signed-off-by: amzn-tommy * Updating RenderCommon header Signed-off-by: amzn-tommy * Removing unneeded headers Signed-off-by: amzn-tommy * Reverting RayTracingFeatureProcessor change following Doug's guidance. This logic was tricky to get right initially, and leads to TDR when incorrect, so leaving as is. Signed-off-by: amzn-tommy * Removing a tab Signed-off-by: amzn-tommy * Added missing #include for AssetId Signed-off-by: amzn-tommy * Adding missing RTTI header Signed-off-by: amzn-tommy * Include ModelAsset definition intead of forward declaring it to avoid a static assert on Linux Signed-off-by: amzn-tommy --- .../Atom/Feature/Mesh/MeshFeatureProcessor.h | 15 ++ .../Mesh/ModelReloaderSystemInterface.h | 57 ++++++ .../Code/Source/CommonSystemComponent.cpp | 7 + .../Code/Source/CommonSystemComponent.h | 7 + .../Code/Source/Mesh/MeshFeatureProcessor.cpp | 68 ++++++- .../Common/Code/Source/Mesh/ModelReloader.cpp | 175 ++++++++++++++++++ .../Common/Code/Source/Mesh/ModelReloader.h | 74 ++++++++ .../Code/Source/Mesh/ModelReloaderSystem.cpp | 38 ++++ .../Code/Source/Mesh/ModelReloaderSystem.h | 50 +++++ .../Code/atom_feature_common_files.cmake | 5 + .../Include/Atom/RPI.Public/Model/Model.h | 4 + .../Atom/RPI.Reflect/Buffer/BufferAsset.h | 6 + .../Atom/RPI.Reflect/Model/ModelAsset.h | 6 + .../Atom/RPI.Reflect/Model/ModelLodAsset.h | 6 + .../Code/Source/RPI.Public/Model/Model.cpp | 22 +++ 15 files changed, 532 insertions(+), 8 deletions(-) create mode 100644 Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h create mode 100644 Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp create mode 100644 Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h create mode 100644 Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp create mode 100644 Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h index 389c5902f9..2ac184e2e0 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/MeshFeatureProcessor.h @@ -14,10 +14,14 @@ #include #include #include +#include #include #include #include #include +#include + +#include namespace AZ { @@ -38,6 +42,7 @@ namespace AZ private: class MeshLoader : private Data::AssetBus::Handler + , private AzFramework::AssetCatalogEventBus::Handler { public: using ModelChangedEvent = MeshFeatureProcessorInterface::ModelChangedEvent; @@ -52,6 +57,15 @@ namespace AZ void OnAssetReady(Data::Asset asset) override; void OnAssetError(Data::Asset asset) override; + // AssetCatalogEventBus::Handler overrides... + void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; + void OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) override; + + void OnModelReloaded(Data::Asset asset); + ModelReloadedEvent::Handler m_modelReloadedEventHandler { [&](Data::Asset modelAsset) + { + OnModelReloaded(modelAsset); + } }; MeshFeatureProcessorInterface::ModelChangedEvent m_modelChangedEvent; Data::Asset m_modelAsset; MeshDataInstance* m_parent = nullptr; @@ -61,6 +75,7 @@ namespace AZ void Init(Data::Instance model); void BuildDrawPacketList(size_t modelLodIndex); void SetRayTracingData(); + void RemoveRayTracingData(); void SetSortKey(RHI::DrawItemSortKey sortKey); RHI::DrawItemSortKey GetSortKey() const; void SetMeshLodConfiguration(RPI::Cullable::LodConfiguration meshLodConfig); diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h new file mode 100644 index 0000000000..bf0ca6a1a3 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + namespace Data + { + template + class Asset; + } + + namespace Render + { + using ModelReloadedEvent = Event>; + + //! A system that handles reloading the hierarchy of model assets in the correct order + class ModelReloaderSystemInterface + { + public: + AZ_RTTI(AZ::Render::ModelReloaderSystemInterface, "{E7E05B1F-8928-4A1B-B75D-3D5433E65BCA}"); + + ModelReloaderSystemInterface() + { + Interface::Register(this); + } + + virtual ~ModelReloaderSystemInterface() + { + Interface::Unregister(this); + } + + static ModelReloaderSystemInterface* Get() + { + return Interface::Get(); + } + + //! Requests a model reload and passes in a callback event handler for when the reload is finished + virtual void ReloadModel( + Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) = 0; + + // Note that you have to delete these for safety reasons, you will trip a static_assert if you do not + AZ_DISABLE_COPY_MOVE(ModelReloaderSystemInterface); + }; + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp index db49fba96f..22c5f37ff8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp @@ -103,11 +103,15 @@ #include #include #include +#include namespace AZ { namespace Render { + CommonSystemComponent::CommonSystemComponent() = default; + CommonSystemComponent::~CommonSystemComponent() = default; + void CommonSystemComponent::Reflect(ReflectContext* context) { AuxGeomFeatureProcessor::Reflect(context); @@ -292,10 +296,13 @@ namespace AZ // setup handler for load pass template mappings m_loadTemplatesHandler = RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler([this]() { this->LoadPassTemplateMappings(); }); RPI::PassSystemInterface::Get()->ConnectEvent(m_loadTemplatesHandler); + + m_modelReloaderSystem = AZStd::make_unique(); } void CommonSystemComponent::Deactivate() { + m_modelReloaderSystem.reset(); m_loadTemplatesHandler.Disconnect(); AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h index 766256dd36..b12ad3459c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.h @@ -20,12 +20,17 @@ namespace AZ { namespace Render { + class ModelReloaderSystem; + class CommonSystemComponent : public AZ::Component { public: AZ_COMPONENT(CommonSystemComponent, "{BFB8FE2B-C952-4D0C-8E32-4FE7C7A97757}"); + CommonSystemComponent(); + ~CommonSystemComponent(); + static void Reflect(AZ::ReflectContext* context); static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); @@ -44,6 +49,8 @@ namespace AZ RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler m_loadTemplatesHandler; + AZStd::unique_ptr m_modelReloaderSystem; + #if AZ_TRAIT_LUXCORE_SUPPORTED // LuxCore LuxCoreRenderer m_luxCore; diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp index cced38c3a7..c7fb19bc5d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -18,6 +19,8 @@ #include +#include + #include #include @@ -175,6 +178,7 @@ namespace AZ { if (meshHandle.IsValid()) { + meshHandle->m_meshLoader.reset(); meshHandle->DeInit(); m_transformService->ReleaseObjectId(meshHandle->m_objectId); @@ -487,10 +491,12 @@ namespace AZ } Data::AssetBus::Handler::BusConnect(modelAsset.GetId()); + AzFramework::AssetCatalogEventBus::Handler::BusConnect(); } MeshDataInstance::MeshLoader::~MeshLoader() { + AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); Data::AssetBus::Handler::BusDisconnect(); } @@ -533,6 +539,7 @@ namespace AZ if (model) { + m_parent->RemoveRayTracingData(); m_parent->Init(model); m_modelChangedEvent.Signal(AZStd::move(model)); } @@ -545,10 +552,51 @@ namespace AZ } } + + void MeshDataInstance::MeshLoader::OnModelReloaded(Data::Asset asset) + { + OnAssetReady(asset); + } + void MeshDataInstance::MeshLoader::OnAssetError(Data::Asset asset) { // Note: m_modelAsset and asset represents same asset, but only m_modelAsset contains the file path in its hint from serialization - AZ_Error("MeshDataInstance::MeshLoader", false, "Failed to load asset %s.", m_modelAsset.GetHint().c_str()); + AZ_Error( + "MeshDataInstance::MeshLoader", false, "Failed to load asset %s. It may be missing, or not be finished processing", + m_modelAsset.GetHint().c_str()); + + AzFramework::AssetSystemRequestBus::Broadcast( + &AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetByUuid, m_modelAsset.GetId().m_guid); + } + + void MeshDataInstance::MeshLoader::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) + { + if (assetId == m_modelAsset.GetId()) + { + Data::Asset modelAssetReference = m_modelAsset; + + // If the asset was modified, reload it + AZ::SystemTickBus::QueueFunction( + [=]() mutable + { + ModelReloaderSystemInterface::Get()->ReloadModel(modelAssetReference, m_modelReloadedEventHandler); + }); + } + } + + void MeshDataInstance::MeshLoader::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId) + { + if (assetId == m_modelAsset.GetId()) + { + Data::Asset modelAssetReference = m_modelAsset; + + // If the asset didn't exist in the catalog when it first attempted to load, we need to try loading it again + AZ::SystemTickBus::QueueFunction( + [=]() mutable + { + ModelReloaderSystemInterface::Get()->ReloadModel(modelAssetReference, m_modelReloadedEventHandler); + }); + } } // MeshDataInstance... @@ -557,14 +605,8 @@ namespace AZ { m_scene->GetCullingScene()->UnregisterCullable(m_cullable); - // remove from ray tracing - RayTracingFeatureProcessor* rayTracingFeatureProcessor = m_scene->GetFeatureProcessor(); - if (rayTracingFeatureProcessor) - { - rayTracingFeatureProcessor->RemoveMesh(m_objectId); - } + RemoveRayTracingData(); - m_meshLoader.reset(); m_drawPacketListsByLod.clear(); m_materialAssignments.clear(); m_shaderResourceGroup = {}; @@ -951,6 +993,16 @@ namespace AZ rayTracingFeatureProcessor->SetMesh(m_objectId, m_model->GetModelAsset()->GetId(), subMeshes); } + void MeshDataInstance::RemoveRayTracingData() + { + // remove from ray tracing + RayTracingFeatureProcessor* rayTracingFeatureProcessor = m_scene->GetFeatureProcessor(); + if (rayTracingFeatureProcessor) + { + rayTracingFeatureProcessor->RemoveMesh(m_objectId); + } + } + void MeshDataInstance::SetSortKey(RHI::DrawItemSortKey sortKey) { m_sortKey = sortKey; diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp new file mode 100644 index 0000000000..75df7c020b --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + ModelReloader::ModelReloader( + Data::Asset modelAsset, RemoveModelFromReloaderSystemEvent::Handler& removeReloaderFromSystemHandler) + { + m_modelAsset.push_back(modelAsset); + m_pendingDependencyListStatus.reset(); + removeReloaderFromSystemHandler.Connect(m_onRemoveReloaderFromSystem); + + // Iterate over the model and track the assets that need to be reloaded + for (auto& modelLodAsset : modelAsset->GetLodAssets()) + { + for (auto& mesh : modelLodAsset->GetMeshes()) + { + for (auto& streamBufferInfo : mesh.GetStreamBufferInfoList()) + { + InsertMeshDependencyIfUnique(streamBufferInfo.m_bufferAssetView.GetBufferAsset()); + + } + InsertMeshDependencyIfUnique(mesh.GetIndexBufferAssetView().GetBufferAsset()); + } + m_modelDependencies.push_back(modelLodAsset); + } + + AZ_Assert( + m_meshDependencies.size() <= m_pendingDependencyListStatus.size(), + "There are more buffers used by the model %s than are supported by the ModelReloader.", modelAsset.GetHint().c_str()); + + m_state = State::WaitingForMeshDependencies; + ReloadDependenciesAndWait(); + } + + void ModelReloader::ConnectOnReloadedEventHandler(ModelReloadedEvent::Handler& onReloadedEventHandler) + { + onReloadedEventHandler.Connect(m_onModelReloaded); + } + + void ModelReloader::OnAssetReloaded(AZ::Data::Asset asset) + { + DependencyList& pendingDependencies = GetPendingDependencyList(); + + const Data::AssetId& reloadedAssetId = asset.GetId(); + + // Find the index of the asset that was reloaded + const auto matchesId = [reloadedAssetId](const Data::Asset& asset){ return asset.GetId() == reloadedAssetId;}; + const auto& iter = AZStd::find_if(AZStd::begin(pendingDependencies), AZStd::end(pendingDependencies), matchesId); + AZ_Assert( + iter != AZStd::end(pendingDependencies), + "ModelReloader - handling an AssetReloaded event for an asset that is not part of the dependency list."); + size_t currentIndex = AZStd::distance(AZStd::begin(pendingDependencies), iter); + + // Keep a reference to the newly reloaded asset to prevent it from being immediately released + pendingDependencies[currentIndex] = asset; + Data::AssetBus::MultiHandler::BusDisconnect(reloadedAssetId); + + // Clear the bit, now that it has been reloaded + m_pendingDependencyListStatus.reset(currentIndex); + + if (m_pendingDependencyListStatus.none()) + { + AdvanceToNextLevelOfHierarchy(); + } + } + + void ModelReloader::OnAssetReloadError(Data::Asset asset) + { + // An error is actually okay/expected in some situations. + // For example, if the 2nd UV set was removed, and we tried to reload the second uv set, the reload would fail. + // We want to treat it as a success, and mark that dependency as 'up to date' + OnAssetReloaded(asset); + } + + void ModelReloader::InsertMeshDependencyIfUnique(Data::Asset asset) + { + if (AZStd::find(AZStd::begin(m_meshDependencies), AZStd::end(m_meshDependencies), asset) == AZStd::end(m_meshDependencies)) + { + // Multiple meshes may reference the same buffer, so only add the dependency if it is unique + m_meshDependencies.push_back(asset); + } + } + + void ModelReloader::ReloadDependenciesAndWait() + { + // Get the current list of dependencies depending on the current state + DependencyList& dependencies = GetPendingDependencyList(); + + if (!m_pendingDependencyListStatus.none()) + { + AZ_Assert( + m_pendingDependencyListStatus.none(), + "ModelReloader attempting to add new dependencies while still waiting for other dependencies in the hierarchy to " + "load."); + } + if (dependencies.empty()) + { + // If the original model asset failed to load, it won't have any dependencies to reload + AdvanceToNextLevelOfHierarchy(); + } + AZ_Assert( + dependencies.size() <= m_pendingDependencyListStatus.size(), + "ModelReloader has more dependencies than can fit in the bitset. The size of m_pendingDependencyListStatus needs to be increased."); + + // Set all bits to 1 + m_pendingDependencyListStatus.set(); + // Clear the least significant n-bits + m_pendingDependencyListStatus <<= dependencies.size(); + // Set the least significant n-bits to 1, and the rest to 0 + m_pendingDependencyListStatus.flip(); + + // Reload all the assets + for (Data::Asset& dependencyAsset : dependencies) + { + Data::AssetBus::MultiHandler::BusConnect(dependencyAsset.GetId()); + dependencyAsset.Reload(); + } + } + + void ModelReloader::AdvanceToNextLevelOfHierarchy() + { + switch (m_state) + { + case State::WaitingForMeshDependencies: + m_state = State::WaitingForModelDependencies; + ReloadDependenciesAndWait(); + break; + case State::WaitingForModelDependencies: + m_state = State::WaitingForModel; + ReloadDependenciesAndWait(); + break; + case State::WaitingForModel: + Data::AssetBus::MultiHandler::BusDisconnect(); + // Since the model asset is finished reloading, orphan model from the instance database + // so that all of the buffer instances are re-created with the latest data + RPI::Model::TEMPOrphanFromDatabase(m_modelAsset.front()); + // Signal that the model is ready + m_onModelReloaded.Signal(m_modelAsset.front()); + // Remove this reloader from the ModelReloaderSystem + m_onRemoveReloaderFromSystem.Signal(m_modelAsset.front().GetId()); + delete this; + break; + } + } + + ModelReloader::DependencyList& ModelReloader::GetPendingDependencyList() + { + switch (m_state) + { + case State::WaitingForMeshDependencies: + return m_meshDependencies; + break; + case State::WaitingForModelDependencies: + return m_modelDependencies; + break; + case State::WaitingForModel: + default: + return m_modelAsset; + break; + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h new file mode 100644 index 0000000000..6b4c493d52 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloader.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace AZ +{ + namespace RPI + { + class ModelAsset; + } + + namespace Render + { + //! ModelReloader takes care of reloading Buffer, ModelLod, and Model assets in the correct order + //! The ModelReloaderSystem should be used to reload a model, rather than using a ModelReloader directly + class ModelReloader + : private Data::AssetBus::MultiHandler + { + using DependencyList = AZStd::vector>; + public: + AZ_RTTI(AZ::Render::ModelReloader, "{99B75A6A-62B6-490A-9953-029BE7D69452}"); + + ModelReloader() = default; + + //! Reload a model asset + //! @param modelAsset - the asset to be reloaded + //! @param removeReloaderFromSystemHandler - an event that will tell the ModelReloaderSystem when to remove the reloader because it is finished + ModelReloader(Data::Asset modelAsset, RemoveModelFromReloaderSystemEvent::Handler& removeReloaderFromSystemHandler); + + //! Connects a handler that will handle an event when the model is finished reloading + void ConnectOnReloadedEventHandler(ModelReloadedEvent::Handler& onReloadedEventHandler); + + private: + enum class State + { + WaitingForMeshDependencies, + WaitingForModelDependencies, + WaitingForModel + }; + + // Data::AssetBus::MultiHandler overrides... + void OnAssetReloaded(AZ::Data::Asset asset) override; + void OnAssetReloadError(Data::Asset asset) override; + + void InsertMeshDependencyIfUnique(Data::Asset asset); + void ReloadDependenciesAndWait(); + void AdvanceToNextLevelOfHierarchy(); + DependencyList& GetPendingDependencyList(); + + ModelReloadedEvent m_onModelReloaded; + RemoveModelFromReloaderSystemEvent m_onRemoveReloaderFromSystem; + + // Keep track of all the asset references for each level of the hierarchy + DependencyList m_modelAsset; + DependencyList m_meshDependencies; + DependencyList m_modelDependencies; + + AZStd::bitset<1024> m_pendingDependencyListStatus; + State m_state; + }; + + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp new file mode 100644 index 0000000000..017f0f3419 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + void ModelReloaderSystem::ReloadModel(Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) + { + AZStd::scoped_lock lock(m_pendingReloadMutex); + if (m_pendingReloads.find(modelAsset.GetId()) == m_pendingReloads.end()) + { + ModelReloader* reloader = new ModelReloader(modelAsset, m_removeModelHandler); + m_pendingReloads[modelAsset.GetId()] = reloader; + } + + m_pendingReloads[modelAsset.GetId()]->ConnectOnReloadedEventHandler(onReloadedEventHandler); + } + + void ModelReloaderSystem::RemoveReloader(const Data::AssetId& assetId) + { + AZStd::scoped_lock lock(m_pendingReloadMutex); + // We don't delete the ModelReloader here, because its in the middle of signaling this RemoveReloader event. + // We only remove it from the pending reloads here. + // The ModelReloader will delete itself after it finishes firing this event. + m_pendingReloads.erase(assetId); + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h new file mode 100644 index 0000000000..dbdc6c77b1 --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/ModelReloaderSystem.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include +#include +#include + +namespace AZ +{ + namespace Render + { + class ModelReloader; + + using RemoveModelFromReloaderSystemEvent = Event; + + class ModelReloaderSystem + : public ModelReloaderSystemInterface + { + public: + AZ_RTTI(Render::ModelReloaderSystem, "{8C85ECCD-B6C8-4949-B26C-9C4F1020F2B8}", Render::ModelReloaderSystemInterface); + + void ReloadModel(Data::Asset modelAsset, ModelReloadedEvent::Handler& onReloadedEventHandler) override; + + private: + void RemoveReloader(const Data::AssetId& assetId); + + // Keep track of all the pending reloads so there are no duplicates + AZStd::unordered_map m_pendingReloads; + AZStd::mutex m_pendingReloadMutex; + + RemoveModelFromReloaderSystemEvent::Handler m_removeModelHandler{ + [&](const Data::AssetId& assetId) + { + RemoveReloader(assetId); + } }; + + friend class ModelReloader; + }; + + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake index 9372d6594a..18cdc273d2 100644 --- a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake +++ b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake @@ -26,6 +26,7 @@ set(FILES Include/Atom/Feature/ImageBasedLights/ImageBasedLightFeatureProcessor.h Include/Atom/Feature/LookupTable/LookupTableAsset.h Include/Atom/Feature/Mesh/MeshFeatureProcessor.h + Include/Atom/Feature/Mesh/ModelReloaderSystemInterface.h Include/Atom/Feature/PostProcessing/PostProcessingConstants.h Include/Atom/Feature/PostProcessing/SMAAFeatureProcessorInterface.h Include/Atom/Feature/PostProcess/PostFxLayerCategoriesConstants.h @@ -169,6 +170,10 @@ set(FILES Source/Math/MathFilter.cpp Source/Math/MathFilterDescriptor.h Source/Mesh/MeshFeatureProcessor.cpp + Source/Mesh/ModelReloader.cpp + Source/Mesh/ModelReloader.h + Source/Mesh/ModelReloaderSystem.cpp + Source/Mesh/ModelReloaderSystem.h Source/MorphTargets/MorphTargetComputePass.cpp Source/MorphTargets/MorphTargetComputePass.h Source/MorphTargets/MorphTargetDispatchItem.cpp diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h index b94d2169bf..91a9a2d009 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h @@ -37,6 +37,10 @@ namespace AZ static Data::Instance FindOrCreate(const Data::Asset& modelAsset); + //! Orphan the model, its lods, and all their buffers so that they can be replaced in the instance database + //! This is a temporary function, that will be removed once the Model/ModelAsset classes no longer need it + static void TEMPOrphanFromDatabase(const Data::Asset& modelAsset); + ~Model() = default; //! Blocks the CPU until the streaming upload is complete. Returns immediately if no diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h index 4f4b2b340d..e6fe68b21e 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h @@ -60,6 +60,12 @@ namespace AZ const AZStd::string& GetName() const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + // Called by asset creators to assign the asset to a ready state. void SetReady(); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h index dbcfc69d56..91d89ce719 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h @@ -77,6 +77,12 @@ namespace AZ float& distanceNormalized, AZ::Vector3& normal) const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + void SetReady(); AZ::Name m_name; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h index 8c8edddfe1..4b09cf8d91 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h @@ -149,6 +149,12 @@ namespace AZ const AZ::Aabb& GetAabb() const; private: + // AssetData overrides... + bool HandleAutoReload() override + { + return false; + } + AZStd::vector m_meshes; AZ::Aabb m_aabb = AZ::Aabb::CreateNull(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp index 1ba17deb91..6549255d7e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp @@ -31,6 +31,28 @@ namespace AZ modelAsset); } + + void Model::TEMPOrphanFromDatabase(const Data::Asset& modelAsset) + { + for (auto& modelLodAsset : modelAsset->GetLodAssets()) + { + for(auto& mesh : modelLodAsset->GetMeshes()) + { + for (auto& streamBufferInfo : mesh.GetStreamBufferInfoList()) + { + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(streamBufferInfo.m_bufferAssetView.GetBufferAsset().GetId())); + } + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(mesh.GetIndexBufferAssetView().GetBufferAsset().GetId())); + } + Data::InstanceDatabase::Instance().TEMPOrphan(Data::InstanceId::CreateFromAssetId(modelLodAsset.GetId())); + } + + Data::InstanceDatabase::Instance().TEMPOrphan( + Data::InstanceId::CreateFromAssetId(modelAsset.GetId())); + } + size_t Model::GetLodCount() const { return m_lods.size(); From 430b5682b7be05d63b8079c0d7a302a6315bb619 Mon Sep 17 00:00:00 2001 From: Junbo Liang <68558268+junbo75@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:03:53 -0700 Subject: [PATCH 098/226] Update the GameLift gem CDK application for supporting FlexMatch (#4335) Signed-off-by: Junbo Liang --- .../aws_gamelift/aws_gamelift_construct.py | 1 + .../cdk/aws_gamelift/flexmatch/__init__.py | 6 ++ .../flexmatch/flexmatch_configurations.py | 30 ++++++++++ .../cdk/aws_gamelift/flexmatch/matchmaking.py | 60 +++++++++++++++++++ .../game_session_queue/__init__.py | 6 ++ .../game_session_queue/game_session_queue.py | 43 +++++++++++++ .../cdk/aws_gamelift/gamelift_stack.py | 53 +++++----------- 7 files changed, 162 insertions(+), 37 deletions(-) create mode 100644 Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py create mode 100644 Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py create mode 100644 Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py create mode 100644 Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py create mode 100644 Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py index 69f74e709e..67fa2aa054 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py @@ -52,6 +52,7 @@ class AWSGameLift(core.Construct): stack_name=stack_name, fleet_configurations=fleet_configurations, create_game_session_queue=self.node.try_get_context('create_game_session_queue') == 'true', + flex_match=self.node.try_get_context('flex_match') == 'true', description=f'Contains resources for the AWS GameLift Gem stack as part of the {project_name} project', tags=tags, env=env diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py new file mode 100644 index 0000000000..50cbb262dd --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/__init__.py @@ -0,0 +1,6 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py new file mode 100644 index 0000000000..436089b2c0 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/flexmatch_configurations.py @@ -0,0 +1,30 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +# Matchmaking rule formatted as a JSON string. +# Comments are not allowed in JSON, but most elements support a description field. +# For instructions on designing Matchmaking rule sets, please check: +# https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-design-ruleset.html +RULE_SET_BODY = '{"ruleLanguageVersion":"1.0","teams":[{"name":"Players","maxPlayers":4,"minPlayers":2}]}' + +# A flag that determines whether a match that was created with this configuration +# must be accepted by the matched players. +ACCEPTANCE_REQUIRED = False + +# The maximum duration, in seconds, that a matchmaking ticket can remain in process before timing out. +# Requests that fail due to timing out can be resubmitted as needed. +REQUEST_TIMEOUT_SECONDS = 300 + +# The number of player slots in a match to keep open for future players. +# This parameter is not used if FlexMatchMode is set to STANDALONE. +ADDITIONAL_PLAYER_COUNT = 2 + +# The method used to backfill game sessions that are created with this matchmaking configuration. +# Specify MANUAL when your game manages backfill requests manually or does not use the match backfill feature. +# Specify AUTOMATIC to have GameLift create a StartMatchBackfill request whenever a game session has one or more +# open slots. +BACKFILL_MODE = 'AUTOMATIC' diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py new file mode 100644 index 0000000000..abdaef6713 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/flexmatch/matchmaking.py @@ -0,0 +1,60 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +import typing + +from aws_cdk import ( + core, + aws_gamelift as gamelift +) + +from . import flexmatch_configurations + +FLEX_MATCH_MODE = 'WITH_QUEUE' + + +class MatchmakingResoures: + """ + Create a matchmaking rule set and matchmaking configuration for Gamelift FlexMatch. + For more information about Gamelift FlexMatch, please check + https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-intro.html + """ + def __init__(self, stack: core.Stack, game_session_queue_arns: typing.List[str]): + rule_set = gamelift.CfnMatchmakingRuleSet( + scope=stack, + id='MatchmakingRuleSet', + name=f'{stack.stack_name}-MatchmakingRuleSet', + rule_set_body=flexmatch_configurations.RULE_SET_BODY + ) + + matchmaking_configuration = gamelift.CfnMatchmakingConfiguration( + scope=stack, + id='MatchmakingConfiguration', + acceptance_required=flexmatch_configurations.ACCEPTANCE_REQUIRED, + name=f'{stack.stack_name}-MatchmakingConfiguration', + request_timeout_seconds=flexmatch_configurations.REQUEST_TIMEOUT_SECONDS, + rule_set_name=rule_set.name, + additional_player_count=flexmatch_configurations.ADDITIONAL_PLAYER_COUNT, + backfill_mode=flexmatch_configurations.BACKFILL_MODE, + flex_match_mode=FLEX_MATCH_MODE, + game_session_queue_arns=game_session_queue_arns if len(game_session_queue_arns) else None + ) + matchmaking_configuration.node.add_dependency(rule_set) + + # Export the matchmaking rule set and configuration names as stack outputs + core.CfnOutput( + stack, + id='MatchmakingRuleSetName', + description='Name of the matchmaking rule set', + export_name=f'{stack.stack_name}:MatchmakingRuleSet', + value=rule_set.name) + core.CfnOutput( + stack, + id='MatchmakingConfigurationName', + description='Name of the matchmaking configuration', + export_name=f'{stack.stack_name}:MatchmakingConfiguration', + value=matchmaking_configuration.name) diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py new file mode 100644 index 0000000000..50cbb262dd --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/__init__.py @@ -0,0 +1,6 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py new file mode 100644 index 0000000000..3b06359b68 --- /dev/null +++ b/Gems/AWSGameLift/cdk/aws_gamelift/game_session_queue/game_session_queue.py @@ -0,0 +1,43 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" +import typing + +from aws_cdk import ( + core, + aws_gamelift as gamelift +) + + +class GameSessionQueueResources: + """ + Create a game session queue which fulfills game session placement requests using the fleets. + For more information about Gamelift game session queues, please check + https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html + """ + def __init__(self, stack: core.Stack, destinations: typing.List): + self._game_session_queue = gamelift.CfnGameSessionQueue( + scope=stack, + id=f'{stack.stack_name}-GameLiftQueue', + name=f'{stack.stack_name}-GameLiftQueue', + destinations=[ + gamelift.CfnGameSessionQueue.DestinationProperty( + destination_arn=resource_arn + ) for resource_arn in destinations + ] + ) + + # Export the game session queue name as a stack output + core.CfnOutput( + scope=stack, + id='GameSessionQueue', + description='Name of the game session queue', + export_name=f'{stack.stack_name}:GameSessionQueue', + value=self._game_session_queue.name) + + @property + def game_session_queue_arn(self) -> str: + return self._game_session_queue.attr_arn diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py index b6cfa44d8a..e2e115fe38 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py @@ -5,10 +5,13 @@ For complete copyright and license terms please see the LICENSE at the root of t SPDX-License-Identifier: Apache-2.0 OR MIT """ -import typing +from aws_cdk import ( + core, + aws_gamelift as gamelift +) -from aws_cdk import core -from aws_cdk import aws_gamelift as gamelift +from .flexmatch import matchmaking +from .game_session_queue import game_session_queue class GameLiftStack(core.Stack): @@ -19,7 +22,9 @@ class GameLiftStack(core.Stack): """ def __init__(self, scope: core.Construct, id_: str, stack_name: str, fleet_configurations: dict, - create_game_session_queue: bool, **kwargs) -> None: + create_game_session_queue: bool, + flex_match: bool, + **kwargs) -> None: super().__init__(scope, id_, **kwargs) self._stack_name = stack_name @@ -50,7 +55,7 @@ class GameLiftStack(core.Stack): queue_destinations.append(destination_arn) # Export the GameLift fleet ids as a stack output - fleets_output = core.CfnOutput( + core.CfnOutput( self, id='GameLiftFleets', description='List of GameLift fleet ids', @@ -58,17 +63,13 @@ class GameLiftStack(core.Stack): value=','.join(fleet_ids) ) - if create_game_session_queue: - # Create a game session queue which fulfills game session placement requests using the fleets - game_session_queue = self._create_game_session_queue(queue_destinations) + game_session_queue_arns = [] + if flex_match or create_game_session_queue: + queue = game_session_queue.GameSessionQueueResources(self, queue_destinations) + game_session_queue_arns.append(queue.game_session_queue_arn) - # Export the game session queue name as a stack output - game_session_queue_output = core.CfnOutput( - self, - id='GameSessionQueue', - description='Name of the game session queue', - export_name=f'{self._stack_name}:GameSessionQueue', - value=game_session_queue.name) + if flex_match: + matchmaking.MatchmakingResoures(self, game_session_queue_arns) def _create_fleet(self, fleet_configuration: dict, identifier: int) -> gamelift.CfnFleet: """ @@ -155,25 +156,3 @@ class GameLiftStack(core.Stack): ) return alias - - def _create_game_session_queue(self, destinations: typing.List) -> gamelift.CfnGameSessionQueue: - """ - Create a placement queue that processes requests for new game sessions. - :param destinations: Destinations of the queue. - :return: Generated GameLift game session queue. - """ - game_session_queue = gamelift.CfnGameSessionQueue( - self, - id=f'{self._stack_name}-GameLiftQueue', - name=f'{self._stack_name}-game-session-queue', - destinations=[ - gamelift.CfnGameSessionQueue.DestinationProperty( - destination_arn=resource_arn - ) for resource_arn in destinations - ] - ) - - return game_session_queue - - - From bf7ae12402a748bb2f053c2f28d3546db4404dc5 Mon Sep 17 00:00:00 2001 From: Adi Bar-Lev <82479970+Adi-Amazon@users.noreply.github.com> Date: Tue, 5 Oct 2021 14:14:08 -0400 Subject: [PATCH 099/226] Hair - Adding the Hair Gem to the automated testing (#4498) * Hair - Adding the Hair Gem to the automated testing Signed-off-by: Adi-Amazon * Hair - added FP protection when not initialized Signed-off-by: Adi-Amazon * Hair - renaming shader options for longtitude / azimuth contribution separation Signed-off-by: Adi-Amazon --- .../Config/shader_global_build_options.json | 12 +++++++++--- AutomatedTesting/Gem/Code/enabled_gems.cmake | 4 +--- .../Registry/assets_scan_folders.setreg | 8 ++++++++ .../Assets/Shaders/HairLightingEquations.azsli | 17 ++++++++--------- .../Code/Passes/HairPPLLResolvePass.cpp | 5 ++--- .../Code/Rendering/HairFeatureProcessor.cpp | 11 ++++++++--- .../Code/Rendering/HairGlobalSettings.cpp | 12 +++++------- .../Code/Rendering/HairGlobalSettings.h | 5 ++--- 8 files changed, 43 insertions(+), 31 deletions(-) diff --git a/AutomatedTesting/Config/shader_global_build_options.json b/AutomatedTesting/Config/shader_global_build_options.json index 08e4d7f502..1aacb05575 100644 --- a/AutomatedTesting/Config/shader_global_build_options.json +++ b/AutomatedTesting/Config/shader_global_build_options.json @@ -3,9 +3,15 @@ "Version": 1, "ClassName": "GlobalBuildOptions", "ClassData": { - "ShaderCompilerArguments" : { - "DefaultMatrixOrder" : "Row", - "AzslcAdditionalFreeArguments" : "--strip-unused-srgs" + "ShaderCompilerArguments": { + "DefaultMatrixOrder": "Row", + "AzslcAdditionalFreeArguments": "--strip-unused-srgs" + }, + "PreprocessorOptions": { + "predefinedMacros": [ "AZSL=17" ], + "projectIncludePaths": [ + "Gems/AtomTressFX/Assets/Shaders" + ] } } } \ No newline at end of file diff --git a/AutomatedTesting/Gem/Code/enabled_gems.cmake b/AutomatedTesting/Gem/Code/enabled_gems.cmake index bae8afabb1..0d281661b9 100644 --- a/AutomatedTesting/Gem/Code/enabled_gems.cmake +++ b/AutomatedTesting/Gem/Code/enabled_gems.cmake @@ -24,6 +24,7 @@ set(ENABLED_GEMS Camera EMotionFX + AtomTressFX PhysX CameraFramework StartingPointMovement @@ -52,9 +53,6 @@ set(ENABLED_GEMS AWSCore AWSClientAuth AWSMetrics - - - AudioSystem ) diff --git a/AutomatedTesting/Registry/assets_scan_folders.setreg b/AutomatedTesting/Registry/assets_scan_folders.setreg index 91061f3337..c74ba6703e 100644 --- a/AutomatedTesting/Registry/assets_scan_folders.setreg +++ b/AutomatedTesting/Registry/assets_scan_folders.setreg @@ -51,6 +51,14 @@ [ "Gems/UiBasics" ] + }, + "Hair": + { + "SourcePaths": + [ + "Gems/AtomTressFX/Assets", + "Gems/AtomTressFX/Assets/Passes" + ] } } } diff --git a/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli index cbab545c2d..83ebc04521 100644 --- a/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli +++ b/Gems/AtomTressFX/Assets/Shaders/HairLightingEquations.azsli @@ -57,9 +57,8 @@ option bool o_enableMarschner_R = true; option bool o_enableMarschner_TRT = true; option bool o_enableMarschner_TT = true; -option bool o_enableDiffuseLobe = true; -option bool o_enableSpecularLobe = true; -option bool o_enableTransmittanceLobe = true; +option bool o_enableLongtitudeCoeff = true; +option bool o_enableAzimuthCoeff = true; //------------------------------------------------------------------------------ // Longitudinal functions (M_R, M_TT, M_RTR) @@ -196,8 +195,8 @@ float3 HairMarschnerBSDF(Surface surface, LightingData lightingData, const float // R Path - single reflection from the hair towards the eye. if (o_enableMarschner_R) { - float lighting_R = o_enableDiffuseLobe ? M_R(surface, Lh, sinLiPlusSinLr) : 1.0f; - if (o_enableSpecularLobe) + float lighting_R = o_enableLongtitudeCoeff ? M_R(surface, Lh, sinLiPlusSinLr) : 1.0f; + if (o_enableAzimuthCoeff) lighting_R *= N_R(surface, cos_O2, Wi, Wr, f0); // The following lines are a cheap method to get occluded reflection by accoounting @@ -221,8 +220,8 @@ float3 HairMarschnerBSDF(Surface surface, LightingData lightingData, const float // on the average thickness. if (o_enableMarschner_TT) { - float3 lighting_TT = o_enableDiffuseLobe ? M_TT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); - if (o_enableSpecularLobe) + float3 lighting_TT = o_enableLongtitudeCoeff ? M_TT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableAzimuthCoeff) lighting_TT *= N_TT(surface, n2, cos_O, cos_O2, cos_Ld, f0); // Reduce back transmittance based on the thickness of the hair @@ -234,8 +233,8 @@ float3 HairMarschnerBSDF(Surface surface, LightingData lightingData, const float // the hair towards the eye. if (o_enableMarschner_TRT) { - float3 lighting_TRT = o_enableDiffuseLobe ? M_TRT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); - if (o_enableSpecularLobe) + float3 lighting_TRT = o_enableLongtitudeCoeff ? M_TRT(surface, Lh, sinLiPlusSinLr) : float3(1.0f, 1.0f, 1.0f); + if (o_enableAzimuthCoeff) lighting_TRT *= N_TRT(surface, cos_O, cos_Ld, f0); lighting += lighting_TRT; } diff --git a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp index 0dc3b62c45..fa643a5488 100644 --- a/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp +++ b/Gems/AtomTressFX/Code/Passes/HairPPLLResolvePass.cpp @@ -47,9 +47,8 @@ namespace AZ shaderOption.SetValue(AZ::Name("o_enableMarschner_R"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_R }); shaderOption.SetValue(AZ::Name("o_enableMarschner_TRT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TRT }); shaderOption.SetValue(AZ::Name("o_enableMarschner_TT"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableMarschner_TT }); - shaderOption.SetValue(AZ::Name("o_enableDiffuseLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableDiffuseLobe }); - shaderOption.SetValue(AZ::Name("o_enableSpecularLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableSpecularLobe }); - shaderOption.SetValue(AZ::Name("o_enableTransmittanceLobe"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableTransmittanceLobe }); + shaderOption.SetValue(AZ::Name("o_enableLongtitudeCoeff"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableLongtitudeCoeff }); + shaderOption.SetValue(AZ::Name("o_enableAzimuthCoeff"), AZ::RPI::ShaderOptionValue{ m_hairGlobalSettings.m_enableAzimuthCoeff }); m_shaderOptions = shaderOption.GetShaderVariantKeyFallbackValue(); } diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp index 04f71a79c8..e4f1b02a88 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -135,6 +135,11 @@ namespace AZ void HairFeatureProcessor::EnablePasses(bool enable) { + if (!m_initialized) + { + return; + } + for (auto& [passName, pass] : m_computePasses) { pass->SetEnabled(enable); @@ -339,14 +344,14 @@ namespace AZ resultSuccess &= InitPPLLFillPass(); resultSuccess &= InitPPLLResolvePass(); + m_initialized = resultSuccess; + // Don't enable passes if no hair object was added yet (depending on activation order) - if (m_hairRenderObjects.empty()) + if (m_initialized && m_hairRenderObjects.empty()) { EnablePasses(false); } - m_initialized = resultSuccess; - // this might not be an error - if the pass system is still empty / minimal // and these passes are not part of the minimal pipeline, they will not // be created. diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp index df8b6e6a37..d26ca12336 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.cpp @@ -21,7 +21,7 @@ namespace AZ if (auto serializeContext = azrtti_cast(context)) { serializeContext->Class() - ->Version(2) + ->Version(3) ->Field("EnableShadows", &HairGlobalSettings::m_enableShadows) ->Field("EnableDirectionalLights", &HairGlobalSettings::m_enableDirectionalLights) ->Field("EnablePunctualLights", &HairGlobalSettings::m_enablePunctualLights) @@ -31,9 +31,8 @@ namespace AZ ->Field("EnableMarschner_R", &HairGlobalSettings::m_enableMarschner_R) ->Field("EnableMarschner_TRT", &HairGlobalSettings::m_enableMarschner_TRT) ->Field("EnableMarschner_TT", &HairGlobalSettings::m_enableMarschner_TT) - ->Field("EnableDiffuseLobe", &HairGlobalSettings::m_enableDiffuseLobe) - ->Field("EnableSpecularLobe", &HairGlobalSettings::m_enableSpecularLobe) - ->Field("EnableTransmittanceLobe", &HairGlobalSettings::m_enableTransmittanceLobe) + ->Field("EnableLongtitudeCoeff", &HairGlobalSettings::m_enableLongtitudeCoeff) + ->Field("EnableAzimuthCoeff", &HairGlobalSettings::m_enableAzimuthCoeff) ; if (auto editContext = serializeContext->GetEditContext()) @@ -51,9 +50,8 @@ namespace AZ ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_R, "Enable Marschner R", "Enable Marschner R.") ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TRT, "Enable Marschner TRT", "Enable Marschner TRT.") ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableMarschner_TT, "Enable Marschner TT", "Enable Marschner TT.") - ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableDiffuseLobe, "Enable Diffuse Lobe", "Enable Diffuse Lobe.") - ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableSpecularLobe, "Enable Specular Lobe", "Enable Specular Lobe.") - ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableTransmittanceLobe, "Enable Transmittance Lobe", "Enable Transmittance Lobe.") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableLongtitudeCoeff, "Enable Longtitude", "Enable Longtitude Contribution") + ->DataElement(AZ::Edit::UIHandlers::Default, &HairGlobalSettings::m_enableAzimuthCoeff, "Enable Azimuth", "Enable Azimuth Contribution") ; } } diff --git a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h index c7cf1e3bf4..1297f8f1bc 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h +++ b/Gems/AtomTressFX/Code/Rendering/HairGlobalSettings.h @@ -35,9 +35,8 @@ namespace AZ bool m_enableMarschner_R = true; bool m_enableMarschner_TRT = true; bool m_enableMarschner_TT = true; - bool m_enableDiffuseLobe = true; - bool m_enableSpecularLobe = true; - bool m_enableTransmittanceLobe = true; + bool m_enableLongtitudeCoeff = true; + bool m_enableAzimuthCoeff = true; }; } // namespace Hair } // namespace Render From df419a09902a1abb9645764c440aeb138d66b365 Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:26:54 -0700 Subject: [PATCH 100/226] Run get_python script when Python fails to load (#4482) Signed-off-by: AMZN-alexpete <26804013+AMZN-alexpete@users.noreply.github.com> --- .../Linux/ProjectManagerDefs_linux.cpp | 1 + .../Platform/Linux/ProjectUtils_linux.cpp | 8 ++ .../Platform/Mac/ProjectManagerDefs_mac.cpp | 1 + .../Platform/Mac/ProjectUtils_mac.cpp | 10 ++ .../Windows/ProjectManagerDefs_windows.cpp | 1 + .../Platform/Windows/ProjectUtils_windows.cpp | 9 ++ .../ProjectManager/Source/Application.cpp | 45 +++++++-- .../Source/ProjectManagerDefs.h | 1 + .../ProjectManager/Source/ProjectUtils.cpp | 96 +++++++++++++++++++ .../ProjectManager/Source/ProjectUtils.h | 24 +++++ .../ProjectManager/Source/PythonBindings.cpp | 7 +- .../ProjectManager/Source/PythonBindings.h | 2 +- .../Source/PythonBindingsInterface.h | 8 ++ 13 files changed, 202 insertions(+), 11 deletions(-) diff --git a/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp b/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp index 5ccfbf8eff..f69e0f54ab 100644 --- a/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp +++ b/Code/Tools/ProjectManager/Platform/Linux/ProjectManagerDefs_linux.cpp @@ -11,5 +11,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/linux"; + const QString GetPythonScriptPath = "python/get_python.sh"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp index 7867f6e5fd..0d66009d90 100644 --- a/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp +++ b/Code/Tools/ProjectManager/Platform/Linux/ProjectUtils_linux.cpp @@ -86,5 +86,13 @@ namespace O3DE::ProjectManager return AZ::Success(); } + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + return ExecuteCommandResultModalDialog( + QString("%1/python/get_python.sh").arg(engineRoot), + {}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp b/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp index 01a7f9e375..f7d3e28bf1 100644 --- a/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp +++ b/Code/Tools/ProjectManager/Platform/Mac/ProjectManagerDefs_mac.cpp @@ -11,5 +11,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/mac_xcode"; + const QString GetPythonScriptPath = "python/get_python.sh"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp index b50039790d..e36f6cd0c8 100644 --- a/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp +++ b/Code/Tools/ProjectManager/Platform/Mac/ProjectUtils_mac.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace O3DE::ProjectManager { @@ -94,5 +95,14 @@ namespace O3DE::ProjectManager return AZ::Success(); } + + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + return ExecuteCommandResultModalDialog( + QString("%1/python/get_python.sh").arg(engineRoot), + {}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp b/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp index 6bd2194967..6b58458ccd 100644 --- a/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp +++ b/Code/Tools/ProjectManager/Platform/Windows/ProjectManagerDefs_windows.cpp @@ -10,5 +10,6 @@ namespace O3DE::ProjectManager { const QString ProjectBuildPathPostfix = ProjectBuildDirectoryName + "/windows_vs2019"; + const QString GetPythonScriptPath = "python/get_python.bat"; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp index 16b80c55e8..831529d5e4 100644 --- a/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp +++ b/Code/Tools/ProjectManager/Platform/Windows/ProjectUtils_windows.cpp @@ -130,5 +130,14 @@ namespace O3DE::ProjectManager return AZ::Success(); } + AZ::Outcome RunGetPythonScript(const QString& engineRoot) + { + const QString batPath = QString("%1/python/get_python.bat").arg(engineRoot); + return ExecuteCommandResultModalDialog( + "cmd.exe", + QStringList{"/c", batPath}, + QProcessEnvironment::systemEnvironment(), + QObject::tr("Running get_python script...")); + } } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/Application.cpp b/Code/Tools/ProjectManager/Source/Application.cpp index 9ca107dae5..a7e4805ce9 100644 --- a/Code/Tools/ProjectManager/Source/Application.cpp +++ b/Code/Tools/ProjectManager/Source/Application.cpp @@ -68,17 +68,46 @@ namespace O3DE::ProjectManager } m_pythonBindings = AZStd::make_unique(GetEngineRoot()); - if (!m_pythonBindings || !m_pythonBindings->PythonStarted()) + AZ_Assert(m_pythonBindings, "Failed to create PythonBindings"); + if (!m_pythonBindings->PythonStarted()) { - if (interactive) + if (!interactive) { - QMessageBox::critical(nullptr, QObject::tr("Failed to start Python"), - QObject::tr("This tool requires an O3DE engine with a Python runtime, " - "but either Python is missing or mis-configured. Please rename " - "your python/runtime folder to python/runtime_bak, then run " - "python/get_python.bat to restore the Python runtime folder.")); + return false; + } + + int result = QMessageBox::warning(nullptr, QObject::tr("Failed to start Python"), + QObject::tr("This tool requires an O3DE engine with a Python runtime, " + "but either Python is missing or mis-configured.

Press 'OK' to " + "run the %1 script automatically, or 'Cancel' " + " if you want to manually resolve the issue by renaming your " + " python/runtime folder and running %1 yourself.") + .arg(GetPythonScriptPath), + QMessageBox::Cancel, QMessageBox::Ok); + if (result == QMessageBox::Ok) + { + auto getPythonResult = ProjectUtils::RunGetPythonScript(GetEngineRoot()); + if (!getPythonResult.IsSuccess()) + { + QMessageBox::critical( + nullptr, QObject::tr("Failed to run %1 script").arg(GetPythonScriptPath), + QObject::tr("The %1 script failed, was canceled, or could not be run. " + "Please rename your python/runtime folder and then run " + "
%1
").arg(GetPythonScriptPath)); + } + else if (!m_pythonBindings->StartPython()) + { + QMessageBox::critical( + nullptr, QObject::tr("Failed to start Python"), + QObject::tr("Failed to start Python after running %1") + .arg(GetPythonScriptPath)); + } + } + + if (!m_pythonBindings->PythonStarted()) + { + return false; } - return false; } const AZ::CommandLine* commandLine = GetCommandLine(); diff --git a/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h b/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h index 264515652f..81320e3732 100644 --- a/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h +++ b/Code/Tools/ProjectManager/Source/ProjectManagerDefs.h @@ -18,6 +18,7 @@ namespace O3DE::ProjectManager static const QString ProjectBuildDirectoryName = "build"; extern const QString ProjectBuildPathPostfix; + extern const QString GetPythonScriptPath; static const QString ProjectBuildPathCmakeFiles = "CMakeFiles"; static const QString ProjectBuildErrorLogName = "CMakeProjectBuildError.log"; static const QString ProjectCacheDirectoryName = "Cache"; diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp index e248613d1f..bb2bcd070e 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.cpp @@ -23,6 +23,11 @@ #include #include #include +#include +#include +#include +#include +#include #include @@ -512,6 +517,97 @@ namespace O3DE::ProjectManager return ProjectManagerScreen::Invalid; } + AZ::Outcome ExecuteCommandResultModalDialog( + const QString& cmd, + const QStringList& arguments, + const QProcessEnvironment& processEnv, + const QString& title) + { + QString resultOutput; + QProcess execProcess; + execProcess.setProcessEnvironment(processEnv); + execProcess.setProcessChannelMode(QProcess::MergedChannels); + + QProgressDialog dialog(title, QObject::tr("Cancel"), /*minimum=*/0, /*maximum=*/0); + dialog.setMinimumWidth(500); + dialog.setAutoClose(false); + + QProgressBar* bar = new QProgressBar(&dialog); + bar->setTextVisible(false); + bar->setMaximum(0); // infinite + dialog.setBar(bar); + + QLabel* progressLabel = new QLabel(&dialog); + QVBoxLayout* layout = new QVBoxLayout(); + + // pre-fill the field with the title and command + const QString commandOutput = QString("%1
%2 %3
").arg(title).arg(cmd).arg(arguments.join(' ')); + + // replace the label with a scrollable text edit + QTextEdit* detailTextEdit = new QTextEdit(commandOutput, &dialog); + detailTextEdit->setReadOnly(true); + layout->addWidget(detailTextEdit); + layout->setMargin(0); + progressLabel->setLayout(layout); + progressLabel->setMinimumHeight(150); + dialog.setLabel(progressLabel); + + auto readConnection = QObject::connect(&execProcess, &QProcess::readyReadStandardOutput, + [&]() + { + QScrollBar* scrollBar = detailTextEdit->verticalScrollBar(); + bool autoScroll = scrollBar->value() == scrollBar->maximum(); + + QString output = execProcess.readAllStandardOutput(); + detailTextEdit->append(output); + resultOutput.append(output); + + if (autoScroll) + { + scrollBar->setValue(scrollBar->maximum()); + } + }); + + auto exitConnection = QObject::connect(&execProcess, + QOverload::of(&QProcess::finished), + [&](int exitCode, [[maybe_unused]] QProcess::ExitStatus exitStatus) + { + QScrollBar* scrollBar = detailTextEdit->verticalScrollBar(); + dialog.setMaximum(100); + dialog.setValue(dialog.maximum()); + if (exitCode == 0 && scrollBar->value() == scrollBar->maximum()) + { + dialog.close(); + } + else + { + // keep the dialog open so the user can look at the output + dialog.setCancelButtonText(QObject::tr("Continue")); + } + }); + + execProcess.start(cmd, arguments); + + dialog.exec(); + + QObject::disconnect(readConnection); + QObject::disconnect(exitConnection); + + if (execProcess.state() == QProcess::Running) + { + execProcess.kill(); + return AZ::Failure(QObject::tr("Process for command '%1' was canceled").arg(cmd)); + } + + int resultCode = execProcess.exitCode(); + if (resultCode != 0) + { + return AZ::Failure(QObject::tr("Process for command '%1' failed (result code %2").arg(cmd).arg(resultCode)); + } + + return AZ::Success(resultOutput); + } + AZ::Outcome ExecuteCommandResult( const QString& cmd, const QStringList& arguments, diff --git a/Code/Tools/ProjectManager/Source/ProjectUtils.h b/Code/Tools/ProjectManager/Source/ProjectUtils.h index 6dd46e3857..1fdf76913e 100644 --- a/Code/Tools/ProjectManager/Source/ProjectUtils.h +++ b/Code/Tools/ProjectManager/Source/ProjectUtils.h @@ -35,15 +35,39 @@ namespace O3DE::ProjectManager ProjectManagerScreen GetProjectManagerScreen(const QString& screen); + /** + * Execute a console command and return the result. + * @param cmd the command + * @param arguments the command argument list + * @param processEnv the environment + * @param commandTimeoutSeconds the amount of time in seconds to let the command run before terminating it + * @return AZ::Outcome with the command result on success + */ AZ::Outcome ExecuteCommandResult( const QString& cmd, const QStringList& arguments, const QProcessEnvironment& processEnv, int commandTimeoutSeconds = ProjectCommandLineTimeoutSeconds); + /** + * Execute a console command, display the progress in a modal dialog and return the result. + * @param cmd the command + * @param arguments the command argument list + * @param processEnv the environment + * @param commandTimeoutSeconds the amount of time in seconds to let the command run before terminating it + * @return AZ::Outcome with the command result on success + */ + AZ::Outcome ExecuteCommandResultModalDialog( + const QString& cmd, + const QStringList& arguments, + const QProcessEnvironment& processEnv, + const QString& title); + AZ::Outcome GetCommandLineProcessEnvironment(); AZ::Outcome GetProjectBuildPath(const QString& projectPath); AZ::Outcome OpenCMakeGUI(const QString& projectPath); + AZ::Outcome RunGetPythonScript(const QString& enginePath); + } // namespace ProjectUtils } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/PythonBindings.cpp b/Code/Tools/ProjectManager/Source/PythonBindings.cpp index b9369b5bb0..768e44ce15 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindings.cpp +++ b/Code/Tools/ProjectManager/Source/PythonBindings.cpp @@ -246,9 +246,11 @@ namespace O3DE::ProjectManager if (Py_IsInitialized()) { AZ_Warning("python", false, "Python is already active"); - return false; + return m_pythonStarted; } + m_pythonStarted = false; + // set PYTHON_HOME AZStd::string pyBasePath = Platform::GetPythonHomePath(PY_PACKAGE, m_enginePath.c_str()); if (!AZ::IO::SystemFile::Exists(pyBasePath.c_str())) @@ -304,7 +306,8 @@ namespace O3DE::ProjectManager // make sure the engine is registered RegisterThisEngine(); - return !PyErr_Occurred(); + m_pythonStarted = !PyErr_Occurred(); + return m_pythonStarted; } catch ([[maybe_unused]] const std::exception& e) { diff --git a/Code/Tools/ProjectManager/Source/PythonBindings.h b/Code/Tools/ProjectManager/Source/PythonBindings.h index 42f04ed6e6..5542fe146e 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindings.h +++ b/Code/Tools/ProjectManager/Source/PythonBindings.h @@ -31,6 +31,7 @@ namespace O3DE::ProjectManager // PythonBindings overrides bool PythonStarted() override; + bool StartPython() override; // Engine AZ::Outcome GetEngineInfo() override; @@ -70,7 +71,6 @@ namespace O3DE::ProjectManager ProjectInfo ProjectInfoFromPath(pybind11::handle path); ProjectTemplateInfo ProjectTemplateInfoFromPath(pybind11::handle path, pybind11::handle pyProjectPath); bool RegisterThisEngine(); - bool StartPython(); bool StopPython(); diff --git a/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h b/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h index 92139f3df5..589dfb604a 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h +++ b/Code/Tools/ProjectManager/Source/PythonBindingsInterface.h @@ -38,6 +38,14 @@ namespace O3DE::ProjectManager */ virtual bool PythonStarted() = 0; + /** + * Attempt to start Python. Normally, Python is started when the bindings are created, + * but this method allows you to attempt to retry starting Python in case the configuration + * has changed. + * @return true if Python was started successfully, false on failure + */ + virtual bool StartPython() = 0; + // Engine /** From bb8971a3addd11eb803cebb1287f9741c2ece612 Mon Sep 17 00:00:00 2001 From: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:48:27 -0700 Subject: [PATCH 101/226] LYN-5288 | Clicking on a Prefab in the viewport should select the entire Prefab and not an individual Entity (#4462) * Setup work for the ContainerEntity SystemComponent and Interface. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Introduce Container Entity Notification Bus Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Introduce a proxy model to control open/closed state of entity containers. Register prefab containers as entity containers. Profit. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Add open state to OnContainerEntityStatusChanged notification + improvements to comments. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Fix to notification trigger to include new arguments. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Fix issue where the Level container would not be expanded correctly. The Level container is now no longer a container entity (since we don't need to be able to close it). Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Revert the addition of an extra proxy layer (which was causing issues) and just move the container logic to the existing filter. Fix bug in the dataChanged signal. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Fix column count in dataChanged signal to correctly update all column and fix visual glitches. Limit container registration to the prefab WIP flag so that the changes can be submitted with an opt-in mechanism. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Add doubleclick behavior on Outliner items - enters focus mode when double clicking on prefab containers. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * override sourceModel() to store pointer to avoid dynamic casting at every filterAcceptsRow call. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Minor comment fixes and nits Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Move container selection logic to a helper function in the ContainerEntityInterface to simplify reusing it in the near future. Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> * Support lazy initialization for tests (since we do not load a level, the lazy initialization in OnEntityStreamLoadSuccess does not trigger) Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> --- .../Application/ToolsApplication.cpp | 2 + .../AzToolsFrameworkModule.cpp | 2 + .../ContainerEntityInterface.h | 61 +++++++++ .../ContainerEntityNotificationBus.h | 41 ++++++ .../ContainerEntitySystemComponent.cpp | 120 ++++++++++++++++++ .../ContainerEntitySystemComponent.h | 54 ++++++++ .../Prefab/PrefabFocusHandler.cpp | 72 ++++++++++- .../Prefab/PrefabFocusHandler.h | 17 ++- .../EditorEntityUiHandlerBase.cpp | 46 +++++-- .../EditorEntityUiHandlerBase.h | 3 + .../UI/Outliner/EntityOutlinerListModel.cpp | 25 +++- .../UI/Outliner/EntityOutlinerListModel.hxx | 5 + .../EntityOutlinerSortFilterProxyModel.cpp | 22 ++++ .../EntityOutlinerSortFilterProxyModel.hxx | 12 +- .../UI/Outliner/EntityOutlinerWidget.cpp | 9 +- .../UI/Outliner/EntityOutlinerWidget.hxx | 2 + .../UI/Prefab/PrefabIntegrationManager.cpp | 32 ++++- .../UI/Prefab/PrefabIntegrationManager.h | 3 + .../UI/Prefab/PrefabUiHandler.cpp | 15 +++ .../UI/Prefab/PrefabUiHandler.h | 3 +- .../ViewportSelection/EditorHelpers.cpp | 11 +- .../aztoolsframework_files.cmake | 4 + 22 files changed, 531 insertions(+), 30 deletions(-) create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp index 717e0c6f8a..c54735fe91 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -251,6 +252,7 @@ namespace AzToolsFramework azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp index b68d086892..05d67d9d71 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,7 @@ namespace AzToolsFramework Components::EditorSelectionAccentSystemComponent::CreateDescriptor(), EditorEntityContextComponent::CreateDescriptor(), EditorEntityFixupComponent::CreateDescriptor(), + ContainerEntitySystemComponent::CreateDescriptor(), FocusModeSystemComponent::CreateDescriptor(), SliceMetadataEntityContextComponent::CreateDescriptor(), SliceRequestComponent::CreateDescriptor(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h new file mode 100644 index 0000000000..45da3a9d8f --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityInterface.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzToolsFramework +{ + //! Outcome object that returns an error message in case of failure to allow caller to handle internal errors. + using ContainerEntityOperationResult = AZ::Outcome; + + //! ContainerEntityInterface + //! An entity registered as Container is just like a regular entity when open. If its state is changed + //! to closed, all descendants of the entity will be treated as part of the entity itself. Selecting any + //! descendant will result in the container being selected, and descendants will be hidden until the + //! container is opened. + class ContainerEntityInterface + { + public: + AZ_RTTI(ContainerEntityInterface, "{0A877C3A-726C-4FD2-BAFE-A2B9F1DE78E4}"); + + //! Registers the entity as a container. The container will be closed by default. + //! @param entityId The entityId that will be registered as a container. + virtual ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) = 0; + + //! Unregisters the entity as a container. + //! The system will retain the closed state in case the entity is registered again later, but + //! if queried the entity will no longer behave as a container. + //! @param entityId The entityId that will be unregistered as a container. + virtual ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) = 0; + + //! Returns whether the entity id provided is registered as a container. + virtual bool IsContainer(AZ::EntityId entityId) const = 0; + + //! Sets the open state of the container entity provided. + //! @param entityId The entityId whose open state will be set. + //! @param open True if the container should be opened, false if it should be closed. + //! @return An error message if the operation was invalid, success otherwise. + virtual ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) = 0; + + //! If the entity id provided is registered as a container, it returns whether it's open. + //! @note the default value for non-containers is true, so this function can be called without + //! verifying whether the entityId is registered as a container beforehand, since the container's + //! open behavior is exactly the same as the one of a regular entity. + //! @return False if the entityId is registered as a container, and its state is closed. True otherwise. + virtual bool IsContainerOpen(AZ::EntityId entityId) const = 0; + + //! Detects if one of the ancestors of entityId is a closed container entity. + //! @return The highest closed entity container id if any, or entityId otherwise. + virtual AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const = 0; + + }; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h new file mode 100644 index 0000000000..95608feefb --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +namespace AzToolsFramework +{ + //! Used to notify changes of state for Container Entities. + class ContainerEntityNotifications + : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; + using BusIdType = AzFramework::EntityContextId; + ////////////////////////////////////////////////////////////////////////// + + //! Triggered when a container entity status changes. + //! @param entityId The entity whose status has changed. + //! @param open The open state the container was changed to. + virtual void OnContainerEntityStatusChanged([[maybe_unused]] AZ::EntityId entityId, [[maybe_unused]] bool open) {} + + protected: + ~ContainerEntityNotifications() = default; + }; + + using ContainerEntityNotificationBus = AZ::EBus; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp new file mode 100644 index 0000000000..0ea2eeb5f6 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include + +namespace AzToolsFramework +{ + void ContainerEntitySystemComponent::Activate() + { + AZ::Interface::Register(this); + } + + void ContainerEntitySystemComponent::Deactivate() + { + AZ::Interface::Unregister(this); + } + + void ContainerEntitySystemComponent::Reflect([[maybe_unused]] AZ::ReflectContext* context) + { + } + + void ContainerEntitySystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("ContainerEntityService")); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::RegisterEntityAsContainer(AZ::EntityId entityId) + { + if (IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - trying to register entity as container twice.")); + } + + m_containers.insert(entityId); + + return AZ::Success(); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::UnregisterEntityAsContainer(AZ::EntityId entityId) + { + if (!IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - trying to unregister entity that is not a container.")); + } + + m_containers.erase(entityId); + + return AZ::Success(); + } + + bool ContainerEntitySystemComponent::IsContainer(AZ::EntityId entityId) const + { + return m_containers.contains(entityId); + } + + ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpenState(AZ::EntityId entityId, bool open) + { + if (!IsContainer(entityId)) + { + return AZ::Failure(AZStd::string( + "ContainerEntitySystemComponent error - cannot set open state of entity that was not registered as container.")); + } + + if(open) + { + m_openContainers.insert(entityId); + } + else + { + m_openContainers.erase(entityId); + } + + ContainerEntityNotificationBus::Broadcast(&ContainerEntityNotificationBus::Events::OnContainerEntityStatusChanged, entityId, open); + + return AZ::Success(); + } + + bool ContainerEntitySystemComponent::IsContainerOpen(AZ::EntityId entityId) const + { + // If the entity is not a container, it should behave as open. + if(!m_containers.contains(entityId)) + { + return true; + } + + // If the entity is a container, return its state. + return m_openContainers.contains(entityId); + } + + AZ::EntityId ContainerEntitySystemComponent::FindHighestSelectableEntity(AZ::EntityId entityId) const + { + AZ::EntityId highestSelectableEntityId = entityId; + + // Go up the hierarchy until you hit the root + while (entityId.IsValid()) + { + if (!IsContainerOpen(entityId)) + { + // If one of the ancestors is a container and it's closed, keep track of its id. + // We only return of the higher closed container in the hierarchy. + highestSelectableEntityId = entityId; + } + + AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId); + } + + return highestSelectableEntityId; + } + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h new file mode 100644 index 0000000000..18c0fb70c6 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ContainerEntity/ContainerEntitySystemComponent.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +namespace AzToolsFramework +{ + //! System Component to track Container Entity registration and open state. + //! An entity registered as Container is just like a regular entity when open. If its state is changed + //! to closed, all descendants of the entity will be treated as part of the entity itself. Selecting any + //! descendant will result in the container being selected, and descendants will be hidden until the + //! container is opened. + class ContainerEntitySystemComponent final + : public AZ::Component + , private ContainerEntityInterface + { + public: + AZ_COMPONENT(ContainerEntitySystemComponent, "{74349759-B36B-44A6-B89F-F45D7111DD11}"); + + ContainerEntitySystemComponent() = default; + virtual ~ContainerEntitySystemComponent() = default; + + // AZ::Component overrides ... + void Activate() override; + void Deactivate() override; + + static void Reflect(AZ::ReflectContext* context); + + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); + + // ContainerEntityInterface overrides ... + ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) override; + ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) override; + bool IsContainer(AZ::EntityId entityId) const override; + ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) override; + bool IsContainerOpen(AZ::EntityId entityId) const override; + AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const override; + + private: + AZStd::unordered_set m_containers; //!< All entities in this set are containers. + AZStd::unordered_set m_openContainers; //!< All entities in this set are open containers. + }; + +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp index 4e58bbdf05..9ffc18af5a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -35,6 +36,30 @@ namespace AzToolsFramework::Prefab EditorEntityContextNotificationBus::Handler::BusDisconnect(); } + void PrefabFocusHandler::Initialize() + { + m_containerEntityInterface = AZ::Interface::Get(); + AZ_Assert( + m_containerEntityInterface, + "Prefab - PrefabFocusHandler - " + "Container Entity Interface could not be found. " + "Check that it is being correctly initialized."); + + m_focusModeInterface = AZ::Interface::Get(); + AZ_Assert( + m_focusModeInterface, + "Prefab - PrefabFocusHandler - " + "Focus Mode Interface could not be found. " + "Check that it is being correctly initialized."); + + m_instanceEntityMapperInterface = AZ::Interface::Get(); + AZ_Assert( + m_instanceEntityMapperInterface, + "Prefab - PrefabFocusHandler - " + "Instance Entity Mapper Interface could not be found. " + "Check that it is being correctly initialized."); + } + PrefabFocusOperationResult PrefabFocusHandler::FocusOnOwningPrefab(AZ::EntityId entityId) { InstanceOptionalReference focusedInstance; @@ -44,7 +69,7 @@ namespace AzToolsFramework::Prefab PrefabEditorEntityOwnershipInterface* prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); - if(!prefabEditorEntityOwnershipInterface) + if (!prefabEditorEntityOwnershipInterface) { return AZ::Failure(AZStd::string("Could not focus on root prefab instance - internal error " "(PrefabEditorEntityOwnershipInterface unavailable).")); @@ -79,8 +104,16 @@ namespace AzToolsFramework::Prefab return AZ::Failure(AZStd::string("Prefab Focus Handler: invalid instance to focus on.")); } + if (!m_isInitialized) + { + Initialize(); + } + if (!m_focusedInstance.has_value() || &m_focusedInstance->get() != &focusedInstance->get()) { + // Close all container entities in the old path + CloseInstanceContainers(m_instanceFocusVector); + m_focusedInstance = focusedInstance; m_focusedTemplateId = focusedInstance->get().GetTemplateId(); @@ -103,12 +136,14 @@ namespace AzToolsFramework::Prefab } // Focus on the descendants of the container entity - if (FocusModeInterface* focusModeInterface = AZ::Interface::Get()) - { - focusModeInterface->SetFocusRoot(containerEntityId); - } + m_focusModeInterface->SetFocusRoot(containerEntityId); + // Refresh path variables RefreshInstanceFocusList(); + + // Open all container entities in the new path + OpenInstanceContainers(m_instanceFocusVector); + PrefabFocusNotificationBus::Broadcast(&PrefabFocusNotifications::OnPrefabFocusChanged); } @@ -156,6 +191,11 @@ namespace AzToolsFramework::Prefab void PrefabFocusHandler::OnEntityStreamLoadSuccess() { + if (!m_isInitialized) + { + Initialize(); + } + // Focus on the root prefab (AZ::EntityId() will default to it) FocusOnOwningPrefab(AZ::EntityId()); } @@ -184,4 +224,26 @@ namespace AzToolsFramework::Prefab } } + void PrefabFocusHandler::OpenInstanceContainers(const AZStd::vector& instances) const + { + for (const InstanceOptionalReference& instance : instances) + { + if (instance.has_value()) + { + m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), true); + } + } + } + + void PrefabFocusHandler::CloseInstanceContainers(const AZStd::vector& instances) const + { + for (const InstanceOptionalReference& instance : instances) + { + if (instance.has_value()) + { + m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), false); + } + } + } + } // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h index 2ccec36882..2f631f772d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.h @@ -15,6 +15,12 @@ #include #include +namespace AzToolsFramework +{ + class ContainerEntityInterface; + class FocusModeInterface; +} + namespace AzToolsFramework::Prefab { class InstanceEntityMapperInterface; @@ -30,6 +36,8 @@ namespace AzToolsFramework::Prefab PrefabFocusHandler(); ~PrefabFocusHandler(); + void Initialize(); + // PrefabFocusInterface overrides ... PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) override; PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) override; @@ -46,12 +54,19 @@ namespace AzToolsFramework::Prefab PrefabFocusOperationResult FocusOnPrefabInstance(InstanceOptionalReference focusedInstance); void RefreshInstanceFocusList(); + void OpenInstanceContainers(const AZStd::vector& instances) const; + void CloseInstanceContainers(const AZStd::vector& instances) const; + InstanceOptionalReference m_focusedInstance; TemplateId m_focusedTemplateId; AZStd::vector m_instanceFocusVector; AZ::IO::Path m_instanceFocusPath; - InstanceEntityMapperInterface* m_instanceEntityMapperInterface; + ContainerEntityInterface* m_containerEntityInterface = nullptr; + FocusModeInterface* m_focusModeInterface = nullptr; + InstanceEntityMapperInterface* m_instanceEntityMapperInterface = nullptr; + + bool m_isInitialized = false; }; } // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp index a0da20ebf0..3cdcade1b0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp @@ -37,51 +37,71 @@ namespace AzToolsFramework return m_handlerId; } - QString EditorEntityUiHandlerBase::GenerateItemInfoString(AZ::EntityId /*entityId*/) const + QString EditorEntityUiHandlerBase::GenerateItemInfoString([[maybe_unused]] AZ::EntityId entityId) const { return QString(); } - QString EditorEntityUiHandlerBase::GenerateItemTooltip(AZ::EntityId /*entityId*/) const + QString EditorEntityUiHandlerBase::GenerateItemTooltip([[maybe_unused]] AZ::EntityId entityId) const { return QString(); } - QIcon EditorEntityUiHandlerBase::GenerateItemIcon(AZ::EntityId /*entityId*/) const + QIcon EditorEntityUiHandlerBase::GenerateItemIcon([[maybe_unused]] AZ::EntityId entityId) const { return QIcon(); } - bool EditorEntityUiHandlerBase::CanToggleLockVisibility(AZ::EntityId /*entityId*/) const + bool EditorEntityUiHandlerBase::CanToggleLockVisibility([[maybe_unused]] AZ::EntityId entityId) const { return true; } - bool EditorEntityUiHandlerBase::CanRename(AZ::EntityId /*entityId*/) const + bool EditorEntityUiHandlerBase::CanRename([[maybe_unused]] AZ::EntityId entityId) const { return true; } - void EditorEntityUiHandlerBase::PaintItemBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const + void EditorEntityUiHandlerBase::PaintItemBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index) const { } - void EditorEntityUiHandlerBase::PaintDescendantBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/, - const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const { } - void EditorEntityUiHandlerBase::PaintDescendantBranchBackground(QPainter* /*painter*/, const QTreeView* /*view*/, const QRect& /*rect*/, - const QModelIndex& /*index*/, const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantBranchBackground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QTreeView* view, + [[maybe_unused]] const QRect& rect, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const { } - void EditorEntityUiHandlerBase::PaintItemForeground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const + void EditorEntityUiHandlerBase::PaintItemForeground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index) const { } - void EditorEntityUiHandlerBase::PaintDescendantForeground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/, - const QModelIndex& /*descendantIndex*/) const + void EditorEntityUiHandlerBase::PaintDescendantForeground( + [[maybe_unused]] QPainter* painter, + [[maybe_unused]] const QStyleOptionViewItem& option, + [[maybe_unused]] const QModelIndex& index, + [[maybe_unused]] const QModelIndex& descendantIndex) const + { + } + + void EditorEntityUiHandlerBase::OnDoubleClick([[maybe_unused]] AZ::EntityId entityId) const { } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h index c37b099272..9554ad01fc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h @@ -61,6 +61,9 @@ namespace AzToolsFramework virtual void PaintDescendantForeground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index, const QModelIndex& descendantIndex) const; + //! Triggered when the entity is double clicked in the Outliner. + virtual void OnDoubleClick(AZ::EntityId entityId) const; + private: EditorEntityUiHandlerId m_handlerId = 0; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index 2872c1bce3..234696ff2a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -88,6 +88,7 @@ namespace AzToolsFramework EntityOutlinerListModel::~EntityOutlinerListModel() { + ContainerEntityNotificationBus::Handler::BusDisconnect(); EditorEntityInfoNotificationBus::Handler::BusDisconnect(); EditorEntityContextNotificationBus::Handler::BusDisconnect(); ToolsApplicationEvents::Bus::Handler::BusDisconnect(); @@ -105,6 +106,12 @@ namespace AzToolsFramework EntityCompositionNotificationBus::Handler::BusConnect(); AZ::EntitySystemBus::Handler::BusConnect(); + AzFramework::EntityContextId editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + editorEntityContextId, &AzToolsFramework::EditorEntityContextRequestBus::Events::GetEditorEntityContextId); + + ContainerEntityNotificationBus::Handler::BusConnect(editorEntityContextId); + m_editorEntityUiInterface = AZ::Interface::Get(); AZ_Assert(m_editorEntityUiInterface != nullptr, "EntityOutlinerListModel requires a EditorEntityUiInterface instance on Initialize."); @@ -1333,12 +1340,26 @@ namespace AzToolsFramework emit EnableSelectionUpdates(true); } - void EntityOutlinerListModel::OnEntityRuntimeActivationChanged(AZ::EntityId entityId, bool activeOnStart) + void EntityOutlinerListModel::OnEntityRuntimeActivationChanged(AZ::EntityId entityId, [[maybe_unused]] bool activeOnStart) { - AZ_UNUSED(activeOnStart); QueueEntityUpdate(entityId); } + void EntityOutlinerListModel::OnContainerEntityStatusChanged(AZ::EntityId entityId, [[maybe_unused]] bool open) + { + QModelIndex changedIndex = GetIndexFromEntity(entityId); + + // Trigger a refresh of all direct children so that they can be shown or hidden appropriately. + int numChildren = rowCount(changedIndex); + if (numChildren > 0) + { + emit dataChanged(index(0, 0, changedIndex), index(numChildren - 1, ColumnCount - 1, changedIndex)); + } + + // Always expand containers + QueueEntityToExpand(entityId, true); + } + void EntityOutlinerListModel::OnEntityInfoUpdatedRemoveChildBegin([[maybe_unused]] AZ::EntityId parentId, [[maybe_unused]] AZ::EntityId childId) { //add/remove operations trigger selection change signals which assert and break undo/redo operations in progress in inspector etc. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx index 4b13aa6d27..7b946c6304 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -54,6 +55,7 @@ namespace AzToolsFramework , private EntityCompositionNotificationBus::Handler , private EditorEntityRuntimeActivationChangeNotificationBus::Handler , private AZ::EntitySystemBus::Handler + , private ContainerEntityNotificationBus::Handler { Q_OBJECT; @@ -216,6 +218,9 @@ namespace AzToolsFramework // EditorEntityRuntimeActivationChangeNotificationBus::Handler void OnEntityRuntimeActivationChanged(AZ::EntityId entityId, bool activeOnStart) override; + // ContainerEntityNotificationBus overrides ... + void OnContainerEntityStatusChanged(AZ::EntityId entityId, bool open) override; + // Drag/Drop of components from Component Palette. bool dropMimeDataComponentPalette(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp index 841a01f5e5..600ca284f4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.cpp @@ -11,6 +11,8 @@ #include #include +#include + #include "EntityOutlinerListModel.hxx" namespace AzToolsFramework @@ -19,6 +21,10 @@ namespace AzToolsFramework EntityOutlinerSortFilterProxyModel::EntityOutlinerSortFilterProxyModel(QObject* pParent) : QSortFilterProxyModel(pParent) { + m_containerEntityInterface = AZ::Interface::Get(); + AZ_Assert( + m_containerEntityInterface != nullptr, + "EntityOutlinerContainerProxyModel requires a ContainerEntityInterface instance on construction."); } void EntityOutlinerSortFilterProxyModel::UpdateFilter() @@ -26,8 +32,24 @@ namespace AzToolsFramework invalidateFilter(); } + void EntityOutlinerSortFilterProxyModel::setSourceModel(QAbstractItemModel* sourceModel) + { + QSortFilterProxyModel::setSourceModel(sourceModel); + + m_listModel = qobject_cast(sourceModel); + AZ_Assert(m_listModel != nullptr, "EntityOutlinerContainerProxyModel requires an EntityOutlinerListModel as its source ."); + } + bool EntityOutlinerSortFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const { + // Retrieve the entityId of the parent entity + AZ::EntityId parentEntityId = m_listModel->GetEntityFromIndex(sourceParent); + + if(!m_containerEntityInterface->IsContainerOpen(parentEntityId)) + { + return false; + } + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); QVariant visibilityData = sourceModel()->data(index, EntityOutlinerListModel::VisibilityRole); return visibilityData.isValid() ? visibilityData.toBool() : true; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx index b7e1a3f869..c6e1410688 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerSortFilterProxyModel.hxx @@ -19,11 +19,12 @@ namespace AzToolsFramework { + class ContainerEntityInterface; + class EntityOutlinerListModel; - /*! - * Enables the Outliner to filter entries based on search string. - * Enables the Outliner to do custom sorting on entries. - */ + //! Enables the Outliner to filter entries based on search string. + //! Enables the Outliner to do custom sorting on entries. + //! Enforces the correct rendering for container entities. class EntityOutlinerSortFilterProxyModel : public QSortFilterProxyModel { @@ -37,12 +38,15 @@ namespace AzToolsFramework void UpdateFilter(); // Qt overrides + void setSourceModel(QAbstractItemModel* sourceModel) override; bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; void sort(int column, Qt::SortOrder order) override; private: QString m_filterName; + EntityOutlinerListModel* m_listModel = nullptr; + ContainerEntityInterface* m_containerEntityInterface = nullptr; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 689e5b5dc4..8f90d2c0d7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -198,6 +198,7 @@ namespace AzToolsFramework m_proxyModel = aznew EntityOutlinerSortFilterProxyModel(this); m_proxyModel->setSourceModel(m_listModel); + m_gui->m_objectTree->setModel(m_proxyModel); // Link up signals for informing the model of tree changes using the proxy as an intermediary @@ -905,8 +906,12 @@ namespace AzToolsFramework } } - void EntityOutlinerWidget::OnTreeItemDoubleClicked(const QModelIndex& /*index*/) + void EntityOutlinerWidget::OnTreeItemDoubleClicked(const QModelIndex& index) { + if (AZ::EntityId entityId = GetEntityIdFromIndex(index); auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId)) + { + entityUiHandler->OnDoubleClick(entityId); + } } void EntityOutlinerWidget::OnTreeItemExpanded(const QModelIndex& index) @@ -1142,7 +1147,7 @@ namespace AzToolsFramework { QTimer::singleShot(1, this, [this]() { m_gui->m_objectTree->setUpdatesEnabled(true); - m_gui->m_objectTree->expand(m_proxyModel->index(0,0)); + m_gui->m_objectTree->expandToDepth(0); }); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index 78aced3587..78927359f2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -41,6 +41,7 @@ namespace AzToolsFramework { class EditorEntityUiInterface; class EntityOutlinerListModel; + class EntityOutlinerContainerProxyModel; class EntityOutlinerSortFilterProxyModel; namespace EntityOutliner @@ -117,6 +118,7 @@ namespace AzToolsFramework Ui::EntityOutlinerWidgetUI* m_gui; EntityOutlinerListModel* m_listModel; + EntityOutlinerContainerProxyModel* m_containerModel; EntityOutlinerSortFilterProxyModel* m_proxyModel; AZ::u64 m_selectionContextId; AZStd::vector m_selectedEntityIds; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 34152f8287..62842e18d5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -56,7 +57,7 @@ namespace AzToolsFramework { namespace Prefab { - + ContainerEntityInterface* PrefabIntegrationManager::s_containerEntityInterface = nullptr; EditorEntityUiInterface* PrefabIntegrationManager::s_editorEntityUiInterface = nullptr; PrefabFocusInterface* PrefabIntegrationManager::s_prefabFocusInterface = nullptr; PrefabLoaderInterface* PrefabIntegrationManager::s_prefabLoaderInterface = nullptr; @@ -89,6 +90,13 @@ namespace AzToolsFramework PrefabIntegrationManager::PrefabIntegrationManager() { + s_containerEntityInterface = AZ::Interface::Get(); + if (s_containerEntityInterface == nullptr) + { + AZ_Assert(false, "Prefab - could not get ContainerEntityInterface on PrefabIntegrationManager construction."); + return; + } + s_editorEntityUiInterface = AZ::Interface::Get(); if (s_editorEntityUiInterface == nullptr) { @@ -1057,6 +1065,7 @@ namespace AzToolsFramework void PrefabIntegrationManager::OnPrefabComponentActivate(AZ::EntityId entityId) { + // Register entity to appropriate UI Handler for UI overrides if (s_prefabPublicInterface->IsLevelInstanceContainerEntity(entityId)) { s_editorEntityUiInterface->RegisterEntity(entityId, m_levelRootUiHandler.GetHandlerId()); @@ -1064,11 +1073,32 @@ namespace AzToolsFramework else { s_editorEntityUiInterface->RegisterEntity(entityId, m_prefabUiHandler.GetHandlerId()); + + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled) + { + // Register entity as a container + s_containerEntityInterface->RegisterEntityAsContainer(entityId); + } } } void PrefabIntegrationManager::OnPrefabComponentDeactivate(AZ::EntityId entityId) { + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled && !s_prefabPublicInterface->IsLevelInstanceContainerEntity(entityId)) + { + // Unregister entity as a container + s_containerEntityInterface->UnregisterEntityAsContainer(entityId); + } + + // Unregister entity from UI Handler s_editorEntityUiInterface->UnregisterEntity(entityId); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h index 6f66b1f514..44e30b2013 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h @@ -26,6 +26,8 @@ namespace AzToolsFramework { + class ContainerEntityInterface; + namespace Prefab { class PrefabFocusInterface; @@ -134,6 +136,7 @@ namespace AzToolsFramework static const AZStd::string s_prefabFileExtension; + static ContainerEntityInterface* s_containerEntityInterface; static EditorEntityUiInterface* s_editorEntityUiInterface; static PrefabFocusInterface* s_prefabFocusInterface; static PrefabLoaderInterface* s_prefabLoaderInterface; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp index c802850c4b..7d1f3485aa 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.cpp @@ -8,6 +8,8 @@ #include +#include + #include #include #include @@ -317,4 +319,17 @@ namespace AzToolsFramework return Internal_GetLastVisibleChild(model, lastChild); } + + void PrefabUiHandler::OnDoubleClick(AZ::EntityId entityId) const + { + bool prefabWipFeaturesEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + prefabWipFeaturesEnabled, &AzFramework::ApplicationRequests::ArePrefabWipFeaturesEnabled); + + if (prefabWipFeaturesEnabled) + { + // Focus on this prefab + m_prefabFocusInterface->FocusOnOwningPrefab(entityId); + } + } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h index 547c100eb1..bb7168f409 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabUiHandler.h @@ -29,13 +29,14 @@ namespace AzToolsFramework PrefabUiHandler(); ~PrefabUiHandler() override = default; - // EditorEntityUiHandler... + // EditorEntityUiHandler overrides ... QString GenerateItemInfoString(AZ::EntityId entityId) const override; QString GenerateItemTooltip(AZ::EntityId entityId) const override; QIcon GenerateItemIcon(AZ::EntityId entityId) const override; void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; void PaintDescendantBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index, const QModelIndex& descendantIndex) const override; + void OnDoubleClick(AZ::EntityId entityId) const override; private: Prefab::PrefabFocusInterface* m_prefabFocusInterface = nullptr; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp index 57e6c9ff7a..3ce350287f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorHelpers.cpp @@ -13,8 +13,9 @@ #include #include #include -#include #include +#include +#include #include #include #include @@ -191,6 +192,14 @@ namespace AzToolsFramework return AZ::EntityId(); } + // Container Entity support - if the entity that is being selected is part of a closed container, + // change the selection to the container instead. + ContainerEntityInterface* containerEntityInterface = AZ::Interface::Get(); + if (containerEntityInterface) + { + return containerEntityInterface->FindHighestSelectableEntity(entityIdUnderCursor); + } + return entityIdUnderCursor; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index f09d4f9b72..0866b225c1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -114,6 +114,10 @@ set(FILES Component/EditorLevelComponentAPIBus.h Component/EditorLevelComponentAPIComponent.cpp Component/EditorLevelComponentAPIComponent.h + ContainerEntity/ContainerEntityInterface.h + ContainerEntity/ContainerEntityNotificationBus.h + ContainerEntity/ContainerEntitySystemComponent.cpp + ContainerEntity/ContainerEntitySystemComponent.h Editor/EditorContextMenuBus.h Editor/EditorSettingsAPIBus.h Entity/EditorEntityStartStatus.h From 643bd84739048fd18785dbfb881d01ba23655e90 Mon Sep 17 00:00:00 2001 From: galibzon <66021303+galibzon@users.noreply.github.com> Date: Tue, 5 Oct 2021 14:21:21 -0500 Subject: [PATCH 102/226] Create helper function for getting threads per (#4480) * Create helper function for getting threads per group from a compute shader Added GetComputeShaderNumThreads() functions to RPIUtils. By default the function returns 1, 1, 1 in case of errors. Updated existing code that was looking for 'numthreads' attribute data with the new GetComputeShaderNumThreads() API. Signed-off-by: garrieta --- .../DiffuseProbeGridBlendDistancePass.cpp | 23 +----- .../DiffuseProbeGridBlendIrradiancePass.cpp | 23 +----- .../DiffuseProbeGridBorderUpdatePass.cpp | 23 +----- .../DiffuseProbeGridClassificationPass.cpp | 23 +----- .../DiffuseProbeGridRelocationPass.cpp | 23 +----- .../MorphTargets/MorphTargetDispatchItem.cpp | 11 +-- .../SkinnedMesh/SkinnedMeshDispatchItem.cpp | 14 ++-- .../Code/Include/Atom/RPI.Public/RPIUtils.h | 18 +++++ .../Source/RPI.Public/Pass/ComputePass.cpp | 27 ++----- .../RPI/Code/Source/RPI.Public/RPIUtils.cpp | 74 +++++++++++++++++++ 10 files changed, 122 insertions(+), 137 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp index 69a4ecdee5..cf1897054a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendDistancePass.cpp @@ -54,27 +54,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeGridBlendDistancePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeGridBlendDistancePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp index 83ef312bf4..f4733c833a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBlendIrradiancePass.cpp @@ -54,27 +54,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeBlendIrradiancePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeBlendIrradiancePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp index b251526cb4..6c72f904b9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridBorderUpdatePass.cpp @@ -67,27 +67,10 @@ namespace AZ srgLayout = shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(shader->GetAsset(), dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeGridBorderUpdatePass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeGridBorderUpdatePass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp index 2690f90a7d..61540c3332 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridClassificationPass.cpp @@ -58,27 +58,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp index 67fb95a833..a1b236ed4d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridRelocationPass.cpp @@ -58,27 +58,10 @@ namespace AZ m_srgLayout = m_shader->FindShaderResourceGroupLayout(RPI::SrgBindingSlot::Pass); // retrieve the number of threads per thread group from the shader - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), m_dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[DiffuseProbeRelocationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); - return; - } - - m_dispatchArgs.m_threadsPerGroupX = static_cast(AZStd::any_cast(args[0])); - m_dispatchArgs.m_threadsPerGroupY = static_cast(AZStd::any_cast(args[1])); - m_dispatchArgs.m_threadsPerGroupZ = static_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[DiffuseProbeRelocationPass '%s']: Shader '%s' contains invalid numthreads arguments:\n%s", GetPathName().GetCStr(), shaderFilePath.c_str(), outcome.GetError().c_str()); } } diff --git a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp index 19f379b17d..fcf1402ae6 100644 --- a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetDispatchItem.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -79,15 +80,11 @@ namespace AZ m_dispatchItem.m_pipelineState = m_morphTargetShader->AcquirePipelineState(pipelineStateDescriptor); // Get the threads-per-group values from the compute shader [numthreads(x,y,z)] - const auto& numThreads = m_morphTargetShader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, AZ::Name{ "numthreads" }); auto& arguments = m_dispatchItem.m_arguments.m_direct; - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_morphTargetShader->GetAsset(), arguments); + if (!outcome.IsSuccess()) { - const auto& args = *numThreads; - // Check that the arguments are valid integers, and fall back to 1,1,1 if there is an error - arguments.m_threadsPerGroupX = static_cast(args[0].type() == azrtti_typeid() ? AZStd::any_cast(args[0]) : 1); - arguments.m_threadsPerGroupY = static_cast(args[1].type() == azrtti_typeid() ? AZStd::any_cast(args[1]) : 1); - arguments.m_threadsPerGroupZ = static_cast(args[2].type() == azrtti_typeid() ? AZStd::any_cast(args[2]) : 1); + AZ_Error("MorphTargetDispatchItem", false, outcome.GetError().c_str()); } arguments.m_totalNumberOfThreadsX = m_morphTargetMetaData.m_vertexCount; diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp index bfc533763e..5ec26cebde 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -199,17 +200,14 @@ namespace AZ m_instanceSrg->Compile(); m_dispatchItem.m_uniqueShaderResourceGroup = m_instanceSrg->GetRHIShaderResourceGroup(); m_dispatchItem.m_pipelineState = m_skinningShader->AcquirePipelineState(pipelineStateDescriptor); - - const auto& numThreads = m_skinningShader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, AZ::Name{ "numthreads" }); + auto& arguments = m_dispatchItem.m_arguments.m_direct; - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_skinningShader->GetAsset(), arguments); + if (!outcome.IsSuccess()) { - const auto& args = *numThreads; - arguments.m_threadsPerGroupX = static_cast(args[0].type() == azrtti_typeid() ? AZStd::any_cast(args[0]) : 1); - arguments.m_threadsPerGroupY = static_cast(args[1].type() == azrtti_typeid() ? AZStd::any_cast(args[1]) : 1); - arguments.m_threadsPerGroupZ = static_cast(args[2].type() == azrtti_typeid() ? AZStd::any_cast(args[2]) : 1); + AZ_Error("SkinnedMeshInputBuffers", false, outcome.GetError().c_str()); } - + arguments.m_totalNumberOfThreadsX = xThreads; arguments.m_totalNumberOfThreadsY = yThreads; arguments.m_totalNumberOfThreadsZ = 1; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h index a2972ff0fd..3e92542429 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h @@ -11,6 +11,7 @@ #include +#include #include #include #include @@ -40,6 +41,23 @@ namespace AZ //! Loads a streaming image asset for the given file path Data::Instance LoadStreamingTexture(AZStd::string_view path); + + //! Looks for a three arguments attribute named @attributeName in the given shader asset. + //! Assigns the value to each non-null output variables. + //! @param shaderAsset + //! @param attributeName + //! @param numThreadsX Can be NULL. If not NULL it takes the value of the 1st argument of the attribute. Becomes 1 on error. + //! @param numThreadsY Can be NULL. If not NULL it takes the value of the 2nd argument of the attribute. Becomes 1 on error. + //! @param numThreadsZ Can be NULL. If not NULL it takes the value of the 3rd argument of the attribute. Becomes 1 on error. + //! @returns An Outcome instance with error message in case of error. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, const AZ::Name& attributeName, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ); + + //! Same as above, but assumes the name of the attribute to be 'numthreads'. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ); + + //! Same as above. Provided as a convenience when all arguments of the 'numthreads' attributes should be assigned to RHI::DispatchDirect::m_threadsPerGroup* variables. + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, RHI::DispatchDirect& dispatchDirect); + } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp index 2505409c62..8bcf9b1b85 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ComputePass.cpp @@ -107,30 +107,13 @@ namespace AZ dispatchArgs.m_totalNumberOfThreadsY = passData->m_totalNumberOfThreadsY; dispatchArgs.m_totalNumberOfThreadsZ = passData->m_totalNumberOfThreadsZ; - const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); - if (numThreads) + const auto outcome = RPI::GetComputeShaderNumThreads(m_shader->GetAsset(), dispatchArgs); + if (!outcome.IsSuccess()) { - const RHI::ShaderStageAttributeArguments& args = *numThreads; - bool validArgs = args.size() == 3; - if (validArgs) - { - validArgs &= args[0].type() == azrtti_typeid(); - validArgs &= args[1].type() == azrtti_typeid(); - validArgs &= args[2].type() == azrtti_typeid(); - } - - if (!validArgs) - { - AZ_Error("PassSystem", false, "[ComputePass '%s']: Shader '%s' contains invalid numthreads arguments.", - GetPathName().GetCStr(), - passData->m_shaderReference.m_filePath.data()); - return; - } - - dispatchArgs.m_threadsPerGroupX = aznumeric_cast(AZStd::any_cast(args[0])); - dispatchArgs.m_threadsPerGroupY = aznumeric_cast(AZStd::any_cast(args[1])); - dispatchArgs.m_threadsPerGroupZ = aznumeric_cast(AZStd::any_cast(args[2])); + AZ_Error("PassSystem", false, "[ComputePass '%s']: Shader '%.*s' contains invalid numthreads arguments:\n%s", + GetPathName().GetCStr(), passData->m_shaderReference.m_filePath.size(), passData->m_shaderReference.m_filePath.data(), outcome.GetError().c_str()); } + m_dispatchItem.m_arguments = dispatchArgs; m_isFullscreenPass = passData->m_makeFullscreenPass; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp index 9173b47fad..e70885daa1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp @@ -143,5 +143,79 @@ namespace AZ return RPI::StreamingImage::FindOrCreate(streamingImageAsset); } + + //! A helper function for GetComputeShaderNumThreads(), to consolidate error messages, etc. + static bool GetAttributeArgumentByIndex(const Data::Asset& shaderAsset, const AZ::Name& attributeName, const RHI::ShaderStageAttributeArguments& args, const size_t argIndex, uint16_t* value, AZStd::string& errorMsg) + { + if (value) + { + const auto numArguments = args.size(); + if (numArguments > argIndex) + { + if (args[argIndex].type() == azrtti_typeid()) + { + *value = aznumeric_caster(AZStd::any_cast(args[argIndex])); + } + else + { + errorMsg = AZStd::string::format("Was expecting argument '%zu' in attribute '%s' to be of type 'int' from shader asset '%s'", argIndex, attributeName.GetCStr(), shaderAsset.GetHint().c_str()); + return false; + } + } + else + { + errorMsg = AZStd::string::format("Was expecting at least '%zu' arguments in attribute '%s' from shader asset '%s'", argIndex + 1, attributeName.GetCStr(), shaderAsset.GetHint().c_str()); + return false; + } + } + return true; + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, const AZ::Name& attributeName, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ) + { + // Set default 1, 1, 1 now. In case of errors later this is what the caller will get. + if (numThreadsX) + { + *numThreadsX = 1; + } + if (numThreadsY) + { + *numThreadsY = 1; + } + if (numThreadsZ) + { + *numThreadsZ = 1; + } + const auto numThreads = shaderAsset->GetAttribute(RHI::ShaderStage::Compute, attributeName); + if (!numThreads) + { + return AZ::Failure(AZStd::string::format("Couldn't find attribute '%s' in shader asset '%s'", attributeName.GetCStr(), shaderAsset.GetHint().c_str())); + } + const RHI::ShaderStageAttributeArguments& args = *numThreads; + AZStd::string errorMsg; + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 0, numThreadsX, errorMsg)) + { + return AZ::Failure(errorMsg); + } + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 1, numThreadsY, errorMsg)) + { + return AZ::Failure(errorMsg); + } + if (!GetAttributeArgumentByIndex(shaderAsset, attributeName, args, 2, numThreadsZ, errorMsg)) + { + return AZ::Failure(errorMsg); + } + return AZ::Success(); + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, uint16_t* numThreadsX, uint16_t* numThreadsY, uint16_t* numThreadsZ) + { + return GetComputeShaderNumThreads(shaderAsset, Name{ "numthreads" }, numThreadsX, numThreadsY, numThreadsZ); + } + + AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, RHI::DispatchDirect& dispatchDirect) + { + return GetComputeShaderNumThreads(shaderAsset, &dispatchDirect.m_threadsPerGroupX, &dispatchDirect.m_threadsPerGroupY, &dispatchDirect.m_threadsPerGroupZ); + } } } From f648cb1fd88ceeacada17e827d944bf124a195d0 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Tue, 5 Oct 2021 15:12:53 -0500 Subject: [PATCH 103/226] Update the FileIO Aliases (#4186) * Update the FileIOAlias naming to make the cache, project root and engine root paths more clear The alias of `@root@`, `@assets@`, and `@projectplatformcache@` has been collapsed to `@projectproductassets@` The alias of `@devroot@` and `@engroot@` has been collapsed to `@engroot@` The alias of `@devassets@` and `@projectroot@` has been collapsed to `@projectroot@` Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated use of devassets and devroot properties in python Those properties now use projectroot and engroot Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updating the alias @engroot@ alias path comment in each platform specific LocalFileIO_*.cpp file Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed hardcoded size of 9 for the product asset alias. The ResolvePath function now just appends the @projectproductassets@ alias with the input path Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Remove duplicate @projectproductassets@ check in ProcessFileTreeRequest Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fix for typos in Hydra python test Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated LocalFileIO::Copy call on Windows to use the Unicode aware CopyFileW API Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the AWSMetreicsGemAllocatorFixture to properly suppress asset cache write errors for Test file creation. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed unneeded call to set the @projectproductasstes@ alias at the bottom of the AssetSeedManagerTest SetUp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added a deprecated alias map to the FileIO System When a deprecated alias is accessed, the FileIO System logs an AZ_Error and indicates the alias that should be used Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated python test scripts to use the projectroot binding Retrieving the AutomatedTesting project path based on "/AutomatedTesting" has been removed. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated references to devroot and devgame within the codebase The GetAbsoluteDevGameFolderPath functions has been replaced with direct call to AZ::Utils::GetProjectPath The GetAbsoluteDevRootFolderPath functions has been replaced with direct calls to AZ::Utils::GetEnginePath Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated /AutomatedTesting references to projectroot Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced references that assumes the project path is /AutomatedTesting with in the AutomatedTesting python test Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Correct casing in emfxworkspace file Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed newly added AppendPathParts function Removed the Path constructors which accepts a PathIterable instance The PathIterable isn't safe to return to a user of the Path class as it might be referencing temporary paths supplied via PathView arguments Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed unused parameter warning Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Undid change to the LexicallyProximate function to set the path result to the base path. It needs to return the *this path if the pathResult is empty Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Moved the LocalFileIO ConvertToAbsolutePath implementations to AZ::Utils Fixed the ConvertToAbsolutePath implementation for Unix platforms to use a buffer that is size PATH_MAX(4096 on all our supported Unix platforms). Because the buffer before was AZ::IO::MaxPathLength which as a size of 1024, this was resulting in the Unix `realpath` function smashing the stack when it converts a path to an absolute path that is longer than 1024 characters Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the EditorCore.Tests to attach the AZ Environment to the EditorCore shared library that is statically loaded on launch. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed for DeprecatedAlaisesKeyVisitor Visit function causing the non string_view overloads being hidden causing a hidden base class function warning Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Changed the AWSMetricsGemMock to use a temporary for writing test assets Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the LocalFileIO::ResolvePath function to use HasRootPath to determine if a path starts with a root path such as "D:", "D:/" or "/" IsAbsolute was not the corect check as the path of "D:" is a relative path. To be absolute according to the Windows the path must have a root directory. i.e "D:/" or "D:\" Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed absolute path comment from LocalFile_UnixLike.cpp and LocalFile_Android.cpp FindFiles implementations Updated the ConvertToAlias to supply an AZ::IO::FixedMaxPath Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced usage of the @projectproductassets@ alias with @engroot@ when referring to the LmbrCentral source folder in the CopyDependencyBuilderTest and the SeedBuilderTests Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the ScriptCanvas Upgrade Tool to output backed up files to the Project User Path instead of the engine root Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed whitespacing issues in Application.cpp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Remove unnecessary creation of a FixedMaxPath in the UpgradeTool.cpp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Modified testSeedFolder variable in the SeedBuilderTests to use the @engroot@ alias instead of @projectproductassets@/.. alias when referring to the LmbrCentral Gem source path Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated references to the Project Asset Cache in the PythonTests. Those tests no longer use the logic `azlmbr.paths.projectroot / "Cache" / "pc"` to retrieve a path to the cache root but instead the `azlmbr.paths.projectproductassets` constant Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed the FileIO Deprecated Alias test on Windows Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removing @projectsourceassets@ alias, as it is only used once. Updated the PhysX EditorSystemComponent.cpp to query the ProjectPath form the SettingsRegistry. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced @projectproductassets@ alias with @products@ Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Rollback changes to the PhysX EditorSystemComponent.cpp The changes to use the ProjectPath from the SettingsRegistry has been implemented in PR #4497 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- Assets/Engine/exclude.filetag | 32 --- .../Atom/atom_utils/material_editor_utils.py | 2 +- ...ydra_AtomEditorComponents_AddedToEntity.py | 2 +- ...dra_AtomEditorComponents_LightComponent.py | 2 +- .../hydra_AtomMaterialEditor_BasicTests.py | 16 +- ...GPUTest_AtomFeatureIntegrationBenchmark.py | 2 +- .../tests/hydra_GPUTest_BasicLevelSetup.py | 2 +- .../tests/hydra_GPUTest_LightComponent.py | 2 +- .../EditorCommandLine_test.py | 1 - .../EditorCommandLine_test_case.py | 6 - .../ComponentUpdateListProperty_test_case.py | 2 +- .../LevelComponentCommands.cfg | 2 +- .../ViewportTitleDlgCommands.cfg | 2 +- ...ynamicSliceInstanceSpawner_Embedded_E2E.py | 2 +- ...ynamicSliceInstanceSpawner_External_E2E.py | 2 +- .../EditorScripts/LayerBlender_E2E_Editor.py | 2 +- .../editor_dynveg_test_helper.py | 6 +- .../cowboy.emfxworkspace | 2 +- .../ws.emfxworkspace | 2 +- Code/Editor/Controls/FolderTreeCtrl.cpp | 13 +- Code/Editor/Core/Tests/test_Main.cpp | 2 + Code/Editor/Core/Tests/test_PathUtil.cpp | 37 ++-- Code/Editor/CryEdit.cpp | 2 +- Code/Editor/CryEditDoc.cpp | 4 +- Code/Editor/Dialogs/PythonScriptsDialog.cpp | 2 +- Code/Editor/EditorFileMonitor.cpp | 36 +--- .../SandboxIntegration.cpp | 2 +- .../AssetImporterWindow.cpp | 79 +++---- .../SceneSerializationHandler.cpp | 25 +-- .../ProjectSettingsToolWindow.cpp | 1 - .../ProjectSettingsToolWindow.h | 1 - .../Plugins/ProjectSettingsTool/Utils.cpp | 34 ++- .../Plugins/ProjectSettingsTool/Utils.h | 2 +- Code/Editor/Settings.cpp | 5 +- .../TrackView/SequenceBatchRenderDialog.cpp | 26 +-- Code/Editor/Util/PathUtil.cpp | 200 +++--------------- Code/Editor/Util/PathUtil.h | 90 -------- Code/Framework/AzCore/AzCore/IO/FileIO.h | 15 +- Code/Framework/AzCore/AzCore/IO/IStreamer.h | 32 +-- Code/Framework/AzCore/AzCore/IO/Path/Path.h | 52 +++-- Code/Framework/AzCore/AzCore/IO/Path/Path.inl | 83 +++++--- .../AzCore/AzCore/IO/Path/PathIterable.inl | 2 +- .../Settings/SettingsRegistryMergeUtils.cpp | 6 +- .../AzCore/UnitTest/Mocks/MockFileIOBase.h | 1 + Code/Framework/AzCore/AzCore/Utils/Utils.cpp | 14 ++ Code/Framework/AzCore/AzCore/Utils/Utils.h | 1 + .../Android/AzCore/Utils/Utils_Android.cpp | 33 ++- .../UnixLike/AzCore/Utils/Utils_UnixLike.cpp | 31 ++- .../WinAPI/AzCore/Utils/Utils_WinAPI.cpp | 17 +- .../AzCore/Tests/FileIOBaseTestTypes.h | 4 + .../AzCore/Tests/IO/Path/PathTests.cpp | 2 +- .../AzFramework/Application/Application.cpp | 89 ++++++-- .../AzFramework/Archive/Archive.cpp | 6 +- .../AzFramework/Archive/ArchiveFileIO.cpp | 10 + .../AzFramework/Archive/ArchiveFileIO.h | 1 + .../AzFramework/Archive/ArchiveFindData.cpp | 18 +- .../AzFramework/Archive/MissingFileReport.cpp | 2 +- .../AzFramework/Asset/AssetCatalog.cpp | 2 +- .../AzFramework/AzFramework/Gem/GemInfo.cpp | 2 +- .../AzFramework/IO/LocalFileIO.cpp | 119 ++++++++--- .../AzFramework/AzFramework/IO/LocalFileIO.h | 6 +- .../AzFramework/IO/RemoteFileIO.cpp | 30 ++- .../AzFramework/AzFramework/IO/RemoteFileIO.h | 2 + .../AzFramework/IO/LocalFileIO_Android.cpp | 62 ++---- .../AzFramework/IO/LocalFileIO_UnixLike.cpp | 50 ++--- .../AzFramework/IO/LocalFileIO_WinAPI.cpp | 33 +-- .../AzFramework/IO/LocalFileIO_Windows.cpp | 32 ++- .../AzFramework/Tests/Application.cpp | 2 +- .../AzFramework/Tests/ArchiveTests.cpp | 62 +++--- Code/Framework/AzFramework/Tests/FileIO.cpp | 45 ++++ .../AzFramework/Tests/FileTagTests.cpp | 18 +- .../AzFramework/Tests/GenAppDescriptors.cpp | 110 ++++------ .../Application/GameApplication.cpp | 4 +- .../Utilities/EncryptionCommon.cpp | 2 +- .../API/EditorAssetSystemAPI.h | 8 - .../Asset/AssetSystemComponent.cpp | 20 -- .../Asset/AssetSystemComponent.h | 2 - .../AssetEditor/AssetEditorWidget.cpp | 2 +- .../AzToolsFramework/Debug/TraceContext.h | 2 +- .../AzToolsFramework/Logger/TraceLogger.cpp | 2 +- .../Slice/SliceRequestComponent.cpp | 9 +- .../Slice/SliceTransaction.cpp | 6 +- .../ToolsComponents/EditorLayerComponent.cpp | 4 +- .../UI/Prefab/PrefabIntegrationManager.cpp | 2 +- .../AzToolsFramework/Tests/ArchiveTests.cpp | 4 +- .../Tests/AssetSeedManager.cpp | 34 ++- .../AzToolsFramework/Tests/AssetSystemMocks.h | 2 - .../AzToolsFramework/Tests/EntityTestbed.h | 4 +- .../PlatformAddressedAssetCatalogTests.cpp | 8 +- .../SliceStabilityTestFramework.h | 2 - Code/Legacy/CryCommon/CryPath.h | 6 +- Code/Legacy/CrySystem/ConsoleBatchFile.cpp | 6 +- Code/Legacy/CrySystem/DebugCallStack.cpp | 2 +- .../CrySystem/LevelSystem/LevelSystem.cpp | 2 +- Code/Legacy/CrySystem/SystemCFG.cpp | 10 +- Code/Legacy/CrySystem/SystemInit.cpp | 9 +- .../Android/InitializeCerts_Android.cpp | 2 +- .../AssetBuilder/AssetBuilderComponent.cpp | 17 +- .../native/AssetManager/AssetCatalog.cpp | 46 ++-- .../native/AssetManager/AssetCatalog.h | 4 - .../AssetManager/assetProcessorManager.cpp | 9 +- .../AssetManager/assetProcessorManager.h | 2 - .../native/FileServer/fileServer.cpp | 16 +- .../AssetCatalog/AssetCatalogUnitTests.cpp | 4 +- .../unittests/RCcontrollerUnitTests.cpp | 26 +-- .../native/unittests/UnitTestRunner.h | 3 +- .../utilities/GUIApplicationManager.cpp | 9 +- .../CrashHandler/Tools/ToolsCrashHandler.cpp | 2 +- .../tests/ApplicationTests.cpp | 2 +- .../SceneCore/Export/MtlMaterialExporter.cpp | 13 +- .../SerializeContextTools/SliceConverter.cpp | 8 +- .../Configuration/AWSCoreConfiguration.cpp | 2 +- .../Source/Editor/UI/AWSCoreEditorMenu.cpp | 2 +- .../AWSCoreConfigurationTest.cpp | 6 +- .../Tests/Editor/UI/AWSCoreEditorMenuTest.cpp | 2 +- .../Code/Source/IdentityProvider.cpp | 2 +- .../AWSMetrics/Code/Tests/AWSMetricsGemMock.h | 40 ++-- .../Source/AssetValidationSystemComponent.cpp | 8 +- .../BuilderSettings/BuilderSettingManager.cpp | 2 +- .../Editor/ShaderVariantAssetBuilder.cpp | 50 ++--- Gems/Atom/RHI/Code/Tests/UtilsTests.cpp | 2 +- .../Include/Atom/RPI.Edit/Common/AssetUtils.h | 10 +- .../RPI/Code/Tests/Common/AssetSystemStub.cpp | 10 - .../RPI/Code/Tests/Common/AssetSystemStub.h | 2 - .../RPI/Code/Tests/Common/RPITestFixture.cpp | 6 +- .../Application/AtomToolsApplication.cpp | 6 +- .../CreateMaterialDialog.cpp | 2 +- .../MaterialEditorBrowserInteractions.cpp | 4 +- .../ViewportSettingsInspector.cpp | 2 +- .../Scripts/GenerateAllMaterialScreenshots.py | 6 +- .../GenerateShaderVariantListForMaterials.py | 2 +- .../AtomFont/Code/Source/AtomFont.cpp | 2 +- .../EditorDiffuseProbeGridComponent.cpp | 4 +- .../EditorMaterialComponentInspector.cpp | 2 +- .../EditorReflectionProbeComponent.cpp | 2 +- .../Builder/AudioControlBuilderWorker.cpp | 10 +- .../Source/Builder/WwiseBuilderWorker.cpp | 8 +- .../Tests/AudioEngineWwiseBuilderTest.cpp | 16 +- .../Code/Tests/AudioEngineWwiseTest.cpp | 20 +- .../Code/Source/Engine/ATLComponents.cpp | 2 +- .../Components/BlastSystemComponent.cpp | 4 +- .../Code/Source/DataSource/FileDataSource.cpp | 14 +- .../EMotionFX/Source/EMotionFXManager.cpp | 14 +- .../EMStudioSDK/Source/FileManager.cpp | 22 +- .../EMStudioSDK/Source/MainWindow.cpp | 28 +-- .../EMStudioSDK/Source/Workspace.cpp | 2 +- .../Integration/Assets/AnimGraphAsset.cpp | 14 +- .../Integration/Assets/MotionSetAsset.cpp | 20 +- .../Integration/System/SystemComponent.cpp | 6 +- ...MotionSetWhenSameMotionInTwoMotionSets.cpp | 6 +- .../Code/Tests/CommandRemoveMotionTests.cpp | 2 +- .../Code/Tests/EMotionFXBuilderTests.cpp | 16 +- .../Tests/Editor/MotionSetLoadEscalation.cpp | 2 +- .../Tests/Game/SamplePerformanceTests.cpp | 18 +- .../Code/Tests/Integration/CanAddActor.cpp | 2 +- .../Tests/Integration/PoseComparisonTests.cpp | 24 +-- .../AnimGraph/PreviewMotionFixture.cpp | 6 +- .../ProvidesUI/Menus/FileMenu/CanReset.cpp | 2 +- .../ProvidesUI/Motions/CanAddMotions.cpp | 2 +- .../Motions/MotionPlaybacksTests.cpp | 2 +- .../Code/Tests/UI/CanAutoSaveFile.cpp | 2 +- .../Code/Tests/UI/CanUseFileMenu.cpp | 2 +- .../Assets/release_notes.md | 2 +- .../Code/Source/PythonReflectionComponent.cpp | 12 +- .../Code/Source/PythonSystemComponent.cpp | 4 +- .../Code/Tests/PythonBindingLibTests.cpp | 8 +- .../Tests/PythonReflectionComponentTests.cpp | 13 +- .../Code/Tests/PythonTestingUtility.h | 1 - .../GameStateLevelLoading.inl | 2 +- .../GameStateSamples/GameStateLevelPaused.inl | 2 +- .../GameStateLevelRunning.inl | 2 +- .../GameStateLocalUserLobby.inl | 4 +- .../GameStateSamples/GameStateMainMenu.inl | 2 +- .../GameStateSamples/GameStateOptionsMenu.inl | 2 +- .../GameStatePrimaryUserSelection.inl | 2 +- .../GraphCanvas/Styling/StyleManager.cpp | 12 +- .../Android/InAppPurchasesAndroid.cpp | 10 +- .../EmfxWorkspaceBuilderWorker.cpp | 8 +- .../LevelBuilder/LevelBuilderWorker.cpp | 2 +- .../MaterialBuilderComponent.cpp | 48 ++--- .../Bundling/BundlingSystemComponent.cpp | 4 +- Gems/LmbrCentral/Code/Source/LmbrCentral.cpp | 2 +- .../Builders/CopyDependencyBuilderTest.cpp | 14 +- .../Code/Tests/Builders/LevelBuilderTest.cpp | 6 +- .../Code/Tests/Builders/LuaBuilderTests.cpp | 4 +- .../Tests/Builders/MaterialBuilderTests.cpp | 17 +- .../Code/Tests/Builders/SeedBuilderTests.cpp | 10 +- .../Tests/BundlingSystemComponentTests.cpp | 46 ++-- .../productdependencies.emfxworkspace | 2 +- .../Code/Tests/Materials/test_mat17.mtl | 2 +- Gems/LyShine/Code/Editor/EditorMenu.cpp | 10 +- Gems/LyShine/Code/Editor/UiSliceManager.cpp | 6 +- Gems/LyShine/Code/Source/UiCanvasManager.cpp | 12 +- Gems/LyShine/Code/Tests/LyShineEditorTest.cpp | 8 +- .../Code/Source/LyShineMessagePopup.cpp | 8 +- .../AnimationEditorFiles/Cowboy.emfxworkspace | 2 +- .../Source/QtForPythonSystemComponent.cpp | 3 - .../Tests/SceneBuilder/SceneBuilderTests.cpp | 15 +- .../ScriptCanvas/Assets/ScriptCanvasAsset.h | 2 +- .../CommonSettingsConfigurations.cpp | 19 +- .../Code/Editor/View/Windows/MainWindow.cpp | 133 ++++++------ .../Code/Editor/View/Windows/MainWindow.h | 2 +- .../Windows/Tools/UpgradeTool/UpgradeTool.cpp | 60 ++---- .../Windows/Tools/UpgradeTool/UpgradeTool.h | 3 +- .../Tools/UpgradeTool/VersionExplorer.cpp | 71 ++----- .../ScriptCanvas/Asset/ExecutionLogAsset.cpp | 2 +- .../Include/ScriptCanvas/Asset/RuntimeAsset.h | 4 +- .../Code/Source/EditorWhiteBoxComponent.cpp | 17 +- Registry/fileio.setreg | 26 +++ 209 files changed, 1367 insertions(+), 1680 deletions(-) create mode 100644 Registry/fileio.setreg diff --git a/Assets/Engine/exclude.filetag b/Assets/Engine/exclude.filetag index 52534a87d8..3528454ec4 100644 --- a/Assets/Engine/exclude.filetag +++ b/Assets/Engine/exclude.filetag @@ -125,17 +125,6 @@
- - - - - - - - - - - @@ -207,27 +196,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py index ef0a592df0..b21c74de19 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/material_editor_utils.py @@ -211,7 +211,7 @@ class Timeout: return time.time() > self.die_after -screenshotsFolder = os.path.join(azlmbr.paths.devroot, "AtomTest", "Cache" "pc", "Screenshots") +screenshotsFolder = os.path.join(azlmbr.paths.products, "Screenshots") class ScreenshotHelper: diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py index 602e7564b3..bbc8463152 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_AddedToEntity.py @@ -17,7 +17,7 @@ import azlmbr.legacy.general as general import azlmbr.editor as editor import azlmbr.render as render -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.utils import TestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py index 751f425916..7ecdc6859b 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_LightComponent.py @@ -14,7 +14,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from Atom.atom_utils.atom_constants import LIGHT_TYPES diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py index 88a1ef4c7b..9f8f6c44b2 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomMaterialEditor_BasicTests.py @@ -16,7 +16,7 @@ import time import azlmbr.math as math import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devassets, "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import Atom.atom_utils.material_editor_utils as material_editor @@ -27,10 +27,10 @@ TEST_MATERIAL_1 = "001_DefaultWhite.material" TEST_MATERIAL_2 = "002_BaseColorLerp.material" TEST_MATERIAL_3 = "003_MetalMatte.material" TEST_DATA_PATH = os.path.join( - azlmbr.paths.devroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases" + azlmbr.paths.engroot, "Gems", "Atom", "TestData", "TestData", "Materials", "StandardPbrTestCases" ) MATERIAL_TYPE_PATH = os.path.join( - azlmbr.paths.devroot, "Gems", "Atom", "Feature", "Common", "Assets", + azlmbr.paths.engroot, "Gems", "Atom", "Feature", "Common", "Assets", "Materials", "Types", "StandardPBR.materialtype", ) CACHE_FILE_EXTENSION = ".azmaterial" @@ -61,7 +61,7 @@ def run(): print(f"Material opened: {material_editor.is_open(document_id)}") # Verify if the test material exists initially - target_path = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL) + target_path = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL) print(f"Test asset doesn't exist initially: {not os.path.exists(target_path)}") # 2) Test Case: Creating a New Material Using Existing One @@ -109,10 +109,10 @@ def run(): # Assign new color to the material file and save the document as copy expected_color_1 = math.Color(0.5, 0.5, 0.5, 1.0) material_editor.set_property(document_id, property_name, expected_color_1) - target_path_1 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_1) + target_path_1 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_1) cache_file_name_1 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_1', '.material') cache_file_1 = f"{cache_file_name_1[0]}{CACHE_FILE_EXTENSION}" - target_path_1_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_1) + target_path_1_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_1) material_editor.save_document_as_copy(document_id, target_path_1) material_editor.wait_for_condition(lambda: os.path.exists(target_path_1_cache), 4.0) @@ -120,10 +120,10 @@ def run(): # Assign new color to the material file save the document as child expected_color_2 = math.Color(0.75, 0.75, 0.75, 1.0) material_editor.set_property(document_id, property_name, expected_color_2) - target_path_2 = os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Materials", NEW_MATERIAL_2) + target_path_2 = os.path.join(azlmbr.paths.projectroot, "Materials", NEW_MATERIAL_2) cache_file_name_2 = os.path.splitext(NEW_MATERIAL_1) # Example output: ('test_material_2', '.material') cache_file_2 = f"{cache_file_name_2[0]}{CACHE_FILE_EXTENSION}" - target_path_2_cache = os.path.join(azlmbr.paths.devassets, "Cache", "pc", "materials", cache_file_2) + target_path_2_cache = os.path.join(azlmbr.paths.products, "materials", cache_file_2) material_editor.save_document_as_child(document_id, target_path_2) material_editor.wait_for_condition(lambda: os.path.exists(target_path_2_cache), 4.0) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py index 4f7edeba75..92199bf196 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_AtomFeatureIntegrationBenchmark.py @@ -10,7 +10,7 @@ import sys import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py index 62a122a723..ac28e67fa1 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_BasicLevelSetup.py @@ -17,7 +17,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.editor as editor -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from editor_python_test_tools.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py index 4a3ae8c85d..1c3e6226c1 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_GPUTest_LightComponent.py @@ -14,7 +14,7 @@ import azlmbr.math as math import azlmbr.paths import azlmbr.legacy.general as general -sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) +sys.path.append(os.path.join(azlmbr.paths.projectroot, "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra from Atom.atom_utils import atom_component_helper, atom_constants, screenshot_utils diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py index 1d3ca11618..fcce6eab37 100755 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test.py @@ -42,7 +42,6 @@ class TestEditorAutomation(object): "editor command line arg bar", "editor command line arg baz", "editor engroot set", - "editor devroot set", "path resolved worked" ] diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py index bd8791fad6..c6ae65612f 100755 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorCommandLine_test_case.py @@ -20,12 +20,6 @@ if (engroot is not None and len(engroot) is not 0): print ('engroot is {}'.format(engroot)) print ('editor engroot set') -# make sure the @devroot@ exists as a azlmbr.paths property -devroot = azlmbr.paths.devroot -if (devroot is not None and len(devroot) != 0): - print ('devroot is {}'.format(devroot)) - print ('editor devroot set') - # resolving a basic path path = azlmbr.paths.resolve_path('@engroot@/engineassets/texturemsg/defaultsolids.mtl') if (len(path) != 0 and path.find('@engroot@') == -1): diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py index 5b7f2f42c1..c5ca4de603 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/EditorScripts/ComponentUpdateListProperty_test_case.py @@ -16,7 +16,7 @@ import azlmbr.entity as entity import azlmbr.math as math import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) +sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests')) from automatedtesting_shared.editor_test_helper import EditorTestHelper diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg index 3adc32d20a..ccc605cec9 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/LevelComponentCommands.cfg @@ -1,2 +1,2 @@ # this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test -pyRunFile @devroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done \ No newline at end of file +pyRunFile @engroot@/Tests/hydra/LevelComponentCommands_test_case.py exit_when_done \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg index 6230dfe0fa..3cbd84c1b5 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonBindings/ViewportTitleDlgCommands.cfg @@ -1,2 +1,2 @@ # this file is copied to $/dev/editor_autoexec.cfg so the the Editor automation runs for this Hydra test -pyRunFile @devroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py \ No newline at end of file +pyRunFile @engroot@/Tests/hydra/ViewportTitleDlgCommands_test_case.py \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py index e51be58ec6..84c661873c 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_Embedded_E2E.py @@ -109,7 +109,7 @@ def DynamicSliceInstanceSpawner_Embedded_E2E(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py index 7a0abdd969..de2554034f 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DynamicSliceInstanceSpawner_External_E2E.py @@ -131,7 +131,7 @@ def DynamicSliceInstanceSpawner_External_E2E(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py index f56c0b836e..bf6501f469 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/LayerBlender_E2E_Editor.py @@ -155,7 +155,7 @@ def LayerBlender_E2E_Editor(): # 6) Save and export to engine general.save_level() general.export_to_engine() - pak_path = os.path.join(paths.devroot, "AutomatedTesting", "cache", "pc", "levels", lvl_name, "level.pak") + pak_path = os.path.join(paths.products, "levels", lvl_name, "level.pak") Report.result(Tests.saved_and_exported, os.path.exists(pak_path)) diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py index 65ebf8e59e..957536fffb 100755 --- a/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py +++ b/AutomatedTesting/Gem/PythonTests/largeworlds/large_worlds_utils/editor_dynveg_test_helper.py @@ -17,7 +17,7 @@ import azlmbr.vegetation as vegetation import azlmbr.areasystem as areasystem import azlmbr.paths -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) +sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests')) import editor_python_test_tools.hydra_editor_utils as hydra @@ -25,7 +25,7 @@ def create_surface_entity(name, center_point, box_size_x, box_size_y, box_size_z # Create a "flat surface" entity to use as a plantable vegetation surface surface_entity = hydra.Entity(name) surface_entity.create_entity( - center_point, + center_point, ["Box Shape", "Shape Surface Tag Emitter"] ) if surface_entity.id.IsValid(): @@ -56,7 +56,7 @@ def create_vegetation_area(name, center_point, box_size_x, box_size_y, box_size_ # Create a vegetation area entity to use as our test vegetation spawner spawner_entity = hydra.Entity(name) spawner_entity.create_entity( - center_point, + center_point, ["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"] ) if spawner_entity.id.IsValid(): diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace index 188fee9f05..05140f340b 100644 --- a/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace +++ b/AutomatedTesting/Levels/Physics/Material_DefaultLibraryConsistentOnAllFeatures/cowboy.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n" +startScript="ImportActor -filename \"@products@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\n" diff --git a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace index e429d74a57..870b9a8579 100644 --- a/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace +++ b/AutomatedTesting/Levels/Physics/Material_DefaultMaterialLibraryChangesWork/ws.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@assets@/Levels/Physics/C15096734_PhysxMaterials_DefaultMaterialLibrary/rin_physics.animgraph\"\n" +startScript="ImportActor -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_skeleton_newgeo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/custom_motionset.motionset\"\nLoadAnimGraph -filename \"@products@/levels/physics/c15096734_physxmaterials_defaultmateriallibrary/rin_physics.animgraph\"\n" diff --git a/Code/Editor/Controls/FolderTreeCtrl.cpp b/Code/Editor/Controls/FolderTreeCtrl.cpp index b1cbb9414e..4088ab976f 100644 --- a/Code/Editor/Controls/FolderTreeCtrl.cpp +++ b/Code/Editor/Controls/FolderTreeCtrl.cpp @@ -278,17 +278,16 @@ void CFolderTreeCtrl::LoadTreeRec(const QString& currentFolder) void CFolderTreeCtrl::AddItem(const QString& path) { - QString folder; - QString fileNameWithoutExtension; - QString ext; - - Path::Split(path, folder, fileNameWithoutExtension, ext); + AZ::IO::FixedMaxPath folder{ AZ::IO::PathView(path.toUtf8().constData()) }; + AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Extension(); + folder = folder.ParentPath(); auto regex = QRegExp(m_fileNameSpec, Qt::CaseInsensitive, QRegExp::Wildcard); if (regex.exactMatch(path)) { - CTreeItem* folderTreeItem = CreateFolderItems(folder); - folderTreeItem->AddChild(fileNameWithoutExtension, path, eTreeImage_File); + CTreeItem* folderTreeItem = CreateFolderItems(QString::fromUtf8(folder.c_str(), static_cast(folder.Native().size()))); + folderTreeItem->AddChild(QString::fromUtf8(fileNameWithoutExtension.c_str(), + static_cast(fileNameWithoutExtension.Native().size())), path, eTreeImage_File); } } diff --git a/Code/Editor/Core/Tests/test_Main.cpp b/Code/Editor/Core/Tests/test_Main.cpp index 3d3e286f18..16b0aa92cf 100644 --- a/Code/Editor/Core/Tests/test_Main.cpp +++ b/Code/Editor/Core/Tests/test_Main.cpp @@ -33,6 +33,7 @@ public: protected: void SetupEnvironment() override { + AttachEditorCoreAZEnvironment(AZ::Environment::GetInstance()); m_allocatorScope.ActivateAllocators(); m_cryPak = new NiceMock(); @@ -49,6 +50,7 @@ protected: { delete m_cryPak; m_allocatorScope.DeactivateAllocators(); + DetachEditorCoreAZEnvironment(); } private: diff --git a/Code/Editor/Core/Tests/test_PathUtil.cpp b/Code/Editor/Core/Tests/test_PathUtil.cpp index 83e50a5947..cade19eb81 100644 --- a/Code/Editor/Core/Tests/test_PathUtil.cpp +++ b/Code/Editor/Core/Tests/test_PathUtil.cpp @@ -5,22 +5,29 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include "EditorDefs.h" -#include -#include "Util/PathUtil.h" -#include - -TEST(PathUtil, GamePathToFullPath_DoesNotBufferOverflow) +#include +#include +namespace UnitTest { - // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing - QString pngExtension(".png"); + class PathUtil + : public ScopedAllocatorSetupFixture + { + }; + + TEST_F(PathUtil, GamePathToFullPath_DoesNotBufferOverflow) + { + // There are no test assertions in this test because the purpose is just to verify that the test runs without crashing + QString pngExtension(".png"); - // Create a string of lenth AZ_MAX_PATH_LEN that ends in .png - QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x'); - longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension); - Path::GamePathToFullPath(longStringMaxPath); + // Create a string of length AZ_MAX_PATH_LEN that ends in .png + QString longStringMaxPath(AZ_MAX_PATH_LEN, 'x'); + longStringMaxPath.replace(longStringMaxPath.length() - pngExtension.length(), longStringMaxPath.length(), pngExtension); + AZ_TEST_START_TRACE_SUPPRESSION; + Path::GamePathToFullPath(longStringMaxPath); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; - QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x'); - longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension); - Path::GamePathToFullPath(longStringMaxPathPlusOne); + QString longStringMaxPathPlusOne(AZ_MAX_PATH_LEN + 1, 'x'); + longStringMaxPathPlusOne.replace(longStringMaxPathPlusOne.length() - pngExtension.length(), longStringMaxPathPlusOne.length(), pngExtension); + Path::GamePathToFullPath(longStringMaxPathPlusOne); + } } diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index b5eb4229df..4aa3d22114 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -2642,7 +2642,7 @@ void CCryEditApp::OnFileResaveSlices() sliceAssetInfos.reserve(5000); AZ::Data::AssetCatalogRequests::AssetEnumerationCB sliceCountCb = [&sliceAssetInfos]([[maybe_unused]] const AZ::Data::AssetId id, const AZ::Data::AssetInfo& info) { - // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @devroot@) + // Only add slices and nothing that has been temporarily added to the catalog with a macro in it (ie @engroot@) if (info.m_assetType == azrtti_typeid() && info.m_relativePath[0] != '@') { sliceAssetInfos.push_back(info); diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp index 07d946c609..75bd0ad270 100644 --- a/Code/Editor/CryEditDoc.cpp +++ b/Code/Editor/CryEditDoc.cpp @@ -1108,7 +1108,7 @@ bool CCryEditDoc::SaveLevel(const QString& filename) if (QFileInfo(filename).isRelative()) { // Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that. - fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@devassets@"))).absoluteFilePath(fullPathName)); + fullPathName = Path::ToUnixPath(QDir(QString::fromUtf8(gEnv->pFileIO->GetAlias("@projectroot@"))).absoluteFilePath(fullPathName)); } if (!CFileUtil::OverwriteFile(fullPathName)) @@ -2159,7 +2159,7 @@ bool CCryEditDoc::LoadXmlArchiveArray(TDocMultiArchive& arrXmlAr, const QString& xmlAr.bLoading = true; // bound to the level folder, as if it were the assets folder. - // this mounts (whateverlevelname.ly) as @assets@/Levels/whateverlevelname/ and thus it works... + // this mounts (whateverlevelname.ly) as @products@/Levels/whateverlevelname/ and thus it works... bool openLevelPakFileSuccess = pIPak->OpenPack(levelPath.toUtf8().data(), absoluteLevelPath.toUtf8().data()); if (!openLevelPakFileSuccess) { diff --git a/Code/Editor/Dialogs/PythonScriptsDialog.cpp b/Code/Editor/Dialogs/PythonScriptsDialog.cpp index e95fb90c0a..35047947ac 100644 --- a/Code/Editor/Dialogs/PythonScriptsDialog.cpp +++ b/Code/Editor/Dialogs/PythonScriptsDialog.cpp @@ -91,7 +91,7 @@ CPythonScriptsDialog::CPythonScriptsDialog(QWidget* parent) { AZ::IO::Path newSourcePath = jsonSourcePathPointer; // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; diff --git a/Code/Editor/EditorFileMonitor.cpp b/Code/Editor/EditorFileMonitor.cpp index 7feb9d32a8..311c42befa 100644 --- a/Code/Editor/EditorFileMonitor.cpp +++ b/Code/Editor/EditorFileMonitor.cpp @@ -14,6 +14,8 @@ // Editor #include "CryEdit.h" +#include + ////////////////////////////////////////////////////////////////////////// CEditorFileMonitor::CEditorFileMonitor() { @@ -177,26 +179,14 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange) // Make file relative to PrimaryCD folder. QString filename = rChange.filename; - // Remove game directory if present in path. - const QString rootPath = - QDir::fromNativeSeparators(QString::fromLatin1(Path::GetEditingRootFolder().c_str())); - if (filename.startsWith(rootPath, Qt::CaseInsensitive)) - { - filename = filename.right(filename.length() - rootPath.length()); - } - - // Make sure there is no leading slash - if (!filename.isEmpty() && (filename[0] == '\\' || filename[0] == '/')) - { - filename = filename.mid(1); - } + // Make path relative to the the project directory + AZ::IO::Path projectPath{ AZ::Utils::GetProjectPath() }; + AZ::IO::FixedMaxPath projectRelativeFilePath = AZ::IO::PathView(filename.toUtf8().constData()).LexicallyProximate( + projectPath); - if (!filename.isEmpty()) + if (!projectRelativeFilePath.empty()) { - //remove game name. Make it relative to the game folder - const QString filenameRelGame = RemoveGameName(filename); - const int extIndex = filename.lastIndexOf('.'); - const QString ext = filename.right(filename.length() - 1 - extIndex); + AZ::IO::PathView ext = projectRelativeFilePath.Extension(); // Check for File Monitor callback std::vector::iterator iter; @@ -207,15 +197,11 @@ void CEditorFileMonitor::OnFileMonitorChange(const SFileChangeInfo& rChange) // We compare against length of callback string, so we get directory matches as well as full filenames if (sCallback.pListener) { - if (sCallback.extension == "*" || ext.compare(sCallback.extension, Qt::CaseInsensitive) == 0) + if (sCallback.extension == "*" || AZ::IO::PathView(sCallback.extension.toUtf8().constData()) == ext) { - if (filenameRelGame.compare(sCallback.item, Qt::CaseInsensitive) == 0) - { - sCallback.pListener->OnFileChange(qPrintable(filenameRelGame), IFileChangeListener::EChangeType(rChange.changeType)); - } - else if (filename.compare(sCallback.item, Qt::CaseInsensitive) == 0) + if (AZ::IO::PathView(sCallback.item.toUtf8().constData()) == projectRelativeFilePath) { - sCallback.pListener->OnFileChange(qPrintable(filename), IFileChangeListener::EChangeType(rChange.changeType)); + sCallback.pListener->OnFileChange(qPrintable(projectRelativeFilePath.c_str()), IFileChangeListener::EChangeType(rChange.changeType)); } } } diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp index b9e4878879..41e950a058 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp @@ -1895,7 +1895,7 @@ void SandboxIntegrationManager::MakeSliceFromEntities(const AzToolsFramework::En AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants, &AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, entities); - const AZStd::string slicesAssetsPath = "@devassets@/Slices"; + const AZStd::string slicesAssetsPath = "@projectroot@/Slices"; if (!gEnv->pFileIO->Exists(slicesAssetsPath.c_str())) { diff --git a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp index 98bf228391..0ff9467f33 100644 --- a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp +++ b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterWindow.cpp @@ -30,6 +30,7 @@ class CXTPDockingPaneLayout; // Needed for settings.h #include #include #include +#include #include #include #include @@ -47,41 +48,6 @@ class CXTPDockingPaneLayout; // Needed for settings.h const char* AssetImporterWindow::s_documentationWebAddress = "http://docs.aws.amazon.com/lumberyard/latest/userguide/char-fbx-importer.html"; const AZ::Uuid AssetImporterWindow::s_browseTag = AZ::Uuid::CreateString("{C240D2E1-BFD2-4FFA-BB5B-CC0FA389A5D3}"); -void MakeUserFriendlySourceAssetPath(QString& out, const QString& sourcePath) -{ - char devAssetsRoot[AZ_MAX_PATH_LEN] = { 0 }; - if (!gEnv->pFileIO->ResolvePath("@devroot@", devAssetsRoot, AZ_MAX_PATH_LEN)) - { - out = sourcePath; - return; - } - - AZStd::replace(devAssetsRoot, devAssetsRoot + AZ_MAX_PATH_LEN- 1, AZ_WRONG_FILESYSTEM_SEPARATOR, AZ_CORRECT_FILESYSTEM_SEPARATOR); - - // Find if the sourcePathArray is a sub directory of the devAssets folder - // Keep reference to sourcePathArray long enough to use in PathView - QByteArray sourcePathArray = sourcePath.toUtf8(); - AZ::IO::PathView sourcePathRootView(sourcePathArray.data()); - AZ::IO::PathView devAssetsRootView(devAssetsRoot); - auto [sourcePathIter, devAssetsIter] = AZStd::mismatch(sourcePathRootView.begin(), sourcePathRootView.end(), - devAssetsRootView.begin(), devAssetsRootView.end()); - // If the devAssets path iterator is not equal to the end, then there was a mismistch while comparing it - // against the source path indicating that the source path is not a sub-directory - if (devAssetsIter != devAssetsRootView.end()) - { - out = sourcePath; - return; - } - - int offset = aznumeric_cast(strlen(devAssetsRoot)); - if (sourcePath.at(offset) == AZ_CORRECT_FILESYSTEM_SEPARATOR) - { - ++offset; - } - out = sourcePath.right(sourcePath.length() - offset); - -} - AssetImporterWindow::AssetImporterWindow() : AssetImporterWindow(nullptr) { @@ -102,7 +68,7 @@ AssetImporterWindow::AssetImporterWindow(QWidget* parent) AssetImporterWindow::~AssetImporterWindow() { - AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, + AZ_Assert(m_processingOverlayIndex == AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, "Processing overlay (and potentially background thread) still active at destruction."); AZ_Assert(!m_processingOverlay, "Processing overlay (and potentially background thread) still active at destruction."); } @@ -133,7 +99,7 @@ void AssetImporterWindow::OpenFile(const AZStd::string& filePath) QMessageBox::warning(this, "In progress", "Unable to close one or more windows at this time."); return; } - + OpenFileInternal(filePath); } @@ -146,7 +112,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) if (m_processingOverlay) { - AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, + AZ_Assert(m_processingOverlayIndex != AZ::SceneAPI::UI::OverlayWidget::s_invalidOverlayIndex, "Processing overlay present, but not the index in the overlay for it."); if (m_processingOverlay->HasProcessingCompleted()) { @@ -157,7 +123,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) } else { - QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.", + QMessageBox::critical(this, "Processing In Progress", "Unable to close the result window at this time.", QMessageBox::Ok, QMessageBox::Ok); ev->ignore(); return; @@ -165,7 +131,7 @@ void AssetImporterWindow::closeEvent(QCloseEvent* ev) } else { - QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.", + QMessageBox::critical(this, "Processing In Progress", "Please wait until processing has completed to try again.", QMessageBox::Ok, QMessageBox::Ok); ev->ignore(); return; @@ -199,7 +165,9 @@ void AssetImporterWindow::Init() // Load the style sheets AzQtComponents::StylesheetPreprocessor styleSheetProcessor(nullptr); - AZStd::string mainWindowQSSPath = Path::GetEditingRootFolder() + "\\Editor\\Styles\\AssetImporterWindow.qss"; + auto mainWindowQSSPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets"; + mainWindowQSSPath /= "Editor/Styles/AssetImporterWindow.qss"; + mainWindowQSSPath.MakePreferred(); QFile mainWindowStyleSheetFile(mainWindowQSSPath.c_str()); if (mainWindowStyleSheetFile.open(QFile::ReadOnly)) { @@ -212,7 +180,7 @@ void AssetImporterWindow::Init() { ui->m_actionInspect->setVisible(false); } - + ResetMenuAccess(WindowState::InitialNothingLoaded); // Setup the overlay system, and set the root to be the root display. The root display has the browse, @@ -220,7 +188,7 @@ void AssetImporterWindow::Init() m_overlay.reset(aznew AZ::SceneAPI::UI::OverlayWidget(this)); m_rootDisplay.reset(aznew ImporterRootDisplay(m_serializeContext)); connect(m_rootDisplay.data(), &ImporterRootDisplay::UpdateClicked, this, &AssetImporterWindow::UpdateClicked); - + connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerAdded, this, &AssetImporterWindow::OverlayLayerAdded); connect(m_overlay.data(), &AZ::SceneAPI::UI::OverlayWidget::LayerRemoved, this, &AssetImporterWindow::OverlayLayerRemoved); @@ -242,7 +210,7 @@ void AssetImporterWindow::Init() AZStd::string joinedExtensions; AzFramework::StringFunc::Join(joinedExtensions, extensions.begin(), extensions.end(), " or "); - AZStd::string firstLineText = + AZStd::string firstLineText = AZStd::string::format( "%s files are available for use after placing them in any folder within your game project. " "These files will automatically be processed and may be accessed via the Asset Browser. Learn more...", @@ -250,13 +218,13 @@ void AssetImporterWindow::Init() ui->m_initialPromptFirstLine->setText(firstLineText.c_str()); - AZStd::string secondLineText = + AZStd::string secondLineText = AZStd::string::format("To adjust the %s settings, right-click the file in the Asset Browser and select \"Edit Settings\" from the context menu.", joinedExtensions.c_str()); ui->m_initialPromptSecondLine->setText(secondLineText.c_str()); } else { - AZStd::string firstLineText = + AZStd::string firstLineText = AZStd::string::format( "Files are available for use after placing them in any folder within your game project. " "These files will automatically be processed and may be accessed via the Asset Browser. Learn more...", s_documentationWebAddress); @@ -282,12 +250,12 @@ void AssetImporterWindow::OpenFileInternal(const AZStd::string& filePath) auto asyncLoadHandler = AZStd::make_shared( s_browseTag, [this, filePath]() - { - m_assetImporterDocument->LoadScene(filePath); + { + m_assetImporterDocument->LoadScene(filePath); }, [this]() { - HandleAssetLoadingCompleted(); + HandleAssetLoadingCompleted(); }, this); m_processingOverlay.reset(new ProcessingOverlayWidget(m_overlay.data(), ProcessingOverlayWidget::Layout::Loading, s_browseTag)); @@ -304,7 +272,7 @@ bool AssetImporterWindow::IsAllowedToChangeSourceFile() return true; } - QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes", + QMessageBox messageBox(QMessageBox::Icon::NoIcon, "Unsaved changes", "You have unsaved changes. Do you want to discard those changes?", QMessageBox::StandardButton::Discard | QMessageBox::StandardButton::Cancel, this); messageBox.exec(); @@ -406,7 +374,7 @@ void AssetImporterWindow::OnSceneResetRequested() else { m_assetImporterDocument->ClearScene(); - AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'", + AZ_TracePrintf(ErrorWindow, "Manifest reset returned in '%s'", result.GetResult() == ProcessingResult::Failure ? "Failure" : "Ignored"); } }, @@ -456,7 +424,7 @@ void AssetImporterWindow::OnInspect() // make sure the inspector doesn't outlive the AssetImporterWindow, since we own the data it will be inspecting. auto* theInspectWidget = aznew AZ::SceneAPI::UI::SceneGraphInspectWidget(*m_assetImporterDocument->GetScene()); QObject::connect(this, &QObject::destroyed, theInspectWidget, [theInspectWidget]() { theInspectWidget->window()->close(); } ); - + m_overlay->PushLayer(label, theInspectWidget, "Scene Inspector", buttons); } @@ -483,7 +451,7 @@ void AssetImporterWindow::OverlayLayerRemoved() else { ResetMenuAccess(WindowState::InitialNothingLoaded); - + ui->m_initialBrowseContainer->show(); m_rootDisplay->hide(); } @@ -533,8 +501,9 @@ void AssetImporterWindow::HandleAssetLoadingCompleted() m_fullSourcePath = m_assetImporterDocument->GetScene()->GetSourceFilename(); SetTitle(m_fullSourcePath.c_str()); - QString userFriendlyFileName; - MakeUserFriendlySourceAssetPath(userFriendlyFileName, m_fullSourcePath.c_str()); + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + AZ::IO::FixedMaxPath relativeSourcePath = AZ::IO::PathView(m_fullSourcePath).LexicallyProximate(projectPath); + auto userFriendlyFileName = QString::fromUtf8(relativeSourcePath.c_str(), static_cast(relativeSourcePath.Native().size())); m_rootDisplay->SetSceneDisplay(userFriendlyFileName, m_assetImporterDocument->GetScene()); // Once we've browsed to something successfully, we need to hide the initial browse button layer and diff --git a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp index b1d07af41c..5ee54667b9 100644 --- a/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp +++ b/Code/Editor/Plugins/EditorAssetImporter/SceneSerializationHandler.cpp @@ -7,9 +7,11 @@ */ #include +#include #include #include #include +#include #include #include #include @@ -50,22 +52,15 @@ namespace AZ return nullptr; } - AZStd::string cleanPath = filePath; - if (AzFramework::StringFunc::Path::IsRelative(filePath.c_str())) + AZ::IO::Path enginePath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - const char* absolutePath = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(absolutePath, - &AzToolsFramework::AssetSystemRequestBus::Events::GetAbsoluteDevRootFolderPath); - AZ_Assert(absolutePath, "Unable to retrieve the dev folder path"); - AzFramework::StringFunc::Path::Join(absolutePath, cleanPath.c_str(), cleanPath); - } - else - { - // Normalizing is not needed if the path is relative as Join(...) will also normalize. - AzFramework::StringFunc::Path::Normalize(cleanPath); + settingsRegistry->Get(enginePath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder); } - auto sceneIt = m_scenes.find(cleanPath); + AZ::IO::Path cleanPath = (enginePath / filePath).LexicallyNormal(); + + auto sceneIt = m_scenes.find(cleanPath.Native()); if (sceneIt != m_scenes.end()) { AZStd::shared_ptr scene = sceneIt->second.lock(); @@ -98,14 +93,14 @@ namespace AZ } AZStd::shared_ptr scene = - AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath, sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid()); + AssetImportRequest::LoadSceneFromVerifiedPath(cleanPath.Native(), sceneSourceGuid, AssetImportRequest::RequestingApplication::Editor, SceneAPI::SceneCore::LoadingComponent::TYPEINFO_Uuid()); if (!scene) { AZ_TracePrintf(Utilities::ErrorWindow, "Failed to load the requested scene."); return nullptr; } - m_scenes.emplace(AZStd::move(cleanPath), scene); + m_scenes.emplace(AZStd::move(cleanPath.Native()), scene); return scene; } diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp index 6b454474be..a53ce966c4 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp +++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.cpp @@ -46,7 +46,6 @@ namespace ProjectSettingsTool , LastPathBus::Handler() , m_ui(new Ui::ProjectSettingsToolWidget()) , m_reconfigureProcess() - , m_devRoot(GetDevRoot()) , m_projectRoot(GetProjectRoot()) , m_projectName(GetProjectName()) , m_plistsInitVector( diff --git a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h index 1c9aa4b1bf..daa5bea27c 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h +++ b/Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsToolWindow.h @@ -147,7 +147,6 @@ namespace ProjectSettingsTool // The process used to reconfigure settings QProcess m_reconfigureProcess; - AZStd::string m_devRoot; AZStd::string m_projectRoot; AZStd::string m_projectName; diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp index 0e171adf04..d5b94469cc 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp +++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.cpp @@ -27,37 +27,31 @@ namespace } template - StringType GetAbsoluteDevRoot() + StringType GetAbsoluteEngineRoot() { - const char* devRoot = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - devRoot, - &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevRootFolderPath); + AZ::IO::FixedMaxPath engineRoot = AZ::Utils::GetEnginePath(); - if (!devRoot) + if (engineRoot.empty()) { return ""; } - StringType devRootString(devRoot); - ToUnixPath(devRootString); - return devRootString; + StringType engineRootString(engineRoot.c_str()); + ToUnixPath(engineRootString); + return engineRootString; } template StringType GetAbsoluteProjectRoot() { - const char* projectRoot = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - projectRoot, - &AzToolsFramework::AssetSystemRequestBus::Handler::GetAbsoluteDevGameFolderPath); + AZ::IO::FixedMaxPath projectRoot = AZ::Utils::GetProjectPath(); - if (!projectRoot) + if (projectRoot.empty()) { return ""; } - StringType projectRootString(projectRoot); + StringType projectRootString(projectRoot.c_str()); ToUnixPath(projectRootString); return projectRootString; } @@ -87,9 +81,9 @@ namespace ProjectSettingsTool return reinterpret_cast(func); } - AZStd::string GetDevRoot() + AZStd::string GetEngineRoot() { - return GetAbsoluteDevRoot(); + return GetAbsoluteEngineRoot(); } AZStd::string GetProjectRoot() { @@ -104,7 +98,7 @@ namespace ProjectSettingsTool QString SelectXmlFromFileDialog(const QString& currentFile) { // The selected file must be relative to this path - QString defaultPath = GetAbsoluteDevRoot(); + QString defaultPath = GetAbsoluteEngineRoot(); QString startPath; // Choose the starting path for file dialog @@ -139,7 +133,7 @@ namespace ProjectSettingsTool QString SelectImageFromFileDialog(const QString& currentFile) { - QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteDevRoot(), ::GetProjectName()); + QString defaultPath = QStringLiteral("%1Code%2/Resources/").arg(GetAbsoluteEngineRoot(), ::GetProjectName()); QString startPath; @@ -188,7 +182,7 @@ namespace ProjectSettingsTool // Android if (group <= ImageGroup::AndroidPortrait) { - root = GetDevRoot() + "/Code/Tools/Android/ProjectBuilder/app_"; + root = GetEngineRoot() + "/Code/Tools/Android/ProjectBuilder/app_"; } //Ios else diff --git a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h index 4226d534a6..050fb3b85b 100644 --- a/Code/Editor/Plugins/ProjectSettingsTool/Utils.h +++ b/Code/Editor/Plugins/ProjectSettingsTool/Utils.h @@ -17,7 +17,7 @@ namespace ProjectSettingsTool { void* ConvertFunctorToVoid(AZStd::pair(*func)(const QString&)); - AZStd::string GetDevRoot(); + AZStd::string GetEngineRoot(); AZStd::string GetProjectRoot(); AZStd::string GetProjectName(); diff --git a/Code/Editor/Settings.cpp b/Code/Editor/Settings.cpp index 05a6960695..47743d1c42 100644 --- a/Code/Editor/Settings.cpp +++ b/Code/Editor/Settings.cpp @@ -935,8 +935,9 @@ void SEditorSettings::LoadDefaultGamePaths() searchPaths[EDITOR_PATH_MATERIALS].push_back((Path::GetEditingGameDataFolder() + "/Materials").c_str()); } - AZStd::string iconsPath; - AZ::StringFunc::Path::Join(Path::GetEditingRootFolder().c_str(), "Editor/UI/Icons", iconsPath); + auto iconsPath = AZ::IO::Path(AZ::Utils::GetEnginePath()) / "Assets"; + iconsPath /= "Editor/UI/Icons"; + iconsPath.MakePreferred(); searchPaths[EDITOR_PATH_UI_ICONS].push_back(iconsPath.c_str()); } diff --git a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp index b510315995..d7901e338a 100644 --- a/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp +++ b/Code/Editor/TrackView/SequenceBatchRenderDialog.cpp @@ -269,7 +269,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange() // Enable/disable the 'remove'/'update' button properly. bool bNoSelection = !m_ui->m_renderList->selectionModel()->hasSelection(); m_ui->BATCH_RENDER_REMOVE_SEQ->setEnabled(bNoSelection ? false : true); - + CheckForEnableUpdateButton(); if (bNoSelection) @@ -360,7 +360,7 @@ void CSequenceBatchRenderDialog::OnRenderItemSelChange() cvarsText += item.cvars[static_cast(i)]; cvarsText += "\r\n"; } - m_ui->m_cvarsEdit->setPlainText(cvarsText); + m_ui->m_cvarsEdit->setPlainText(cvarsText); } void CSequenceBatchRenderDialog::CheckForEnableUpdateButton() @@ -494,7 +494,7 @@ void CSequenceBatchRenderDialog::OnSavePreset() } void CSequenceBatchRenderDialog::stashActiveViewportResolution() -{ +{ // stash active resolution in global vars activeViewportWidth = resolutions[0][0]; activeViewportHeight = resolutions[0][1]; @@ -502,7 +502,7 @@ void CSequenceBatchRenderDialog::stashActiveViewportResolution() if (activeViewport) { activeViewport->GetDimensions(&activeViewportWidth, &activeViewportHeight); - } + } } void CSequenceBatchRenderDialog::OnGo() @@ -640,7 +640,7 @@ void CSequenceBatchRenderDialog::OnResolutionSelected() int defaultH; const QString currentCustomResText = m_ui->m_resolutionCombo->currentText(); GetResolutionFromCustomResText(currentCustomResText.toStdString().c_str(), defaultW, defaultH); - + CCustomResolutionDlg resDlg(defaultW, defaultH, this); if (resDlg.exec() == QDialog::Accepted) { @@ -752,7 +752,7 @@ bool CSequenceBatchRenderDialog::LoadOutputOptions(const QString& pathname) { const QString customResText = resolutionNode->getContent(); m_ui->m_resolutionCombo->setItemText(curSel, customResText); - + GetResolutionFromCustomResText(customResText.toStdString().c_str(), m_customResW, m_customResH); } m_ui->m_resolutionCombo->setCurrentIndex(curSel); @@ -907,12 +907,12 @@ void CSequenceBatchRenderDialog::CaptureItemStart() folder += "/"; folder += itemText; - // If this is a relative path, prepend the @assets@ folder to match where the Renderer is going + // If this is a relative path, prepend the @products@ folder to match where the Renderer is going // to dump the frame buffer image captures. if (AzFramework::StringFunc::Path::IsRelative(folder.toUtf8().data())) { AZStd::string absolutePath; - AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string assetsRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::Path::Join(assetsRoot.c_str(), folder.toUtf8().data(), absolutePath); folder = absolutePath.c_str(); } @@ -962,7 +962,7 @@ void CSequenceBatchRenderDialog::CaptureItemStart() m_renderContext.cvarDisplayInfoBU = cvarDebugInfo->GetIVal(); if (renderItem.disableDebugInfo && cvarDebugInfo->GetIVal()) { - const int DISPLAY_INFO_OFF = 0; + const int DISPLAY_INFO_OFF = 0; cvarDebugInfo->Set(DISPLAY_INFO_OFF); } } @@ -1100,13 +1100,13 @@ void CSequenceBatchRenderDialog::OnUpdateEnd(IAnimSequence* sequence) sequence->SetActiveDirector(m_renderContext.pActiveDirectorBU); const auto imageFormat = m_ui->m_imageFormatCombo->currentText(); - + SRenderItem renderItem = m_renderItems[m_renderContext.currentItemIndex]; if (m_bFFMPEGCommandAvailable && renderItem.bCreateVideo) { // Create a video using the ffmpeg plug-in from captured images. m_renderContext.processingFFMPEG = true; - + AZStd::string outputFolder = m_renderContext.captureOptions.folder; auto future = QtConcurrent::run( [renderItem, outputFolder, imageFormat] @@ -1238,7 +1238,7 @@ void CSequenceBatchRenderDialog::OnKickIdleTimout() } void CSequenceBatchRenderDialog::OnKickIdle() -{ +{ if (m_renderContext.captureState == CaptureState::WarmingUpAfterResChange) { OnUpdateWarmingUpAfterResChange(); @@ -1254,7 +1254,7 @@ void CSequenceBatchRenderDialog::OnKickIdle() else if (m_renderContext.captureState == CaptureState::Capturing) { OnUpdateCapturing(); - } + } else if (m_renderContext.captureState == CaptureState::End) { OnUpdateEnd(m_renderContext.endingSequence); diff --git a/Code/Editor/Util/PathUtil.cpp b/Code/Editor/Util/PathUtil.cpp index c9e6823824..ca3481ddae 100644 --- a/Code/Editor/Util/PathUtil.cpp +++ b/Code/Editor/Util/PathUtil.cpp @@ -11,9 +11,9 @@ #include "PathUtil.h" -#include // for AZ_MAX_PATH_LEN +#include +#include #include // for ebus events -#include #include #include #include @@ -179,7 +179,7 @@ namespace Path EBUS_EVENT_RESULT(engineRoot, AzFramework::ApplicationRequests::Bus, GetEngineRoot); return QString(engineRoot); } - + ////////////////////////////////////////////////////////////////////////// QString& ReplaceFilename(const QString& strFilepath, const QString& strFilename, QString& strOutputFilename, bool bCallCaselessPath) { @@ -216,30 +216,21 @@ namespace Path ////////////////////////////////////////////////////////////////////////// QString GetResolvedUserSandboxFolder() { - char resolvedPath[AZ_MAX_PATH_LEN] = { 0 }; - gEnv->pFileIO->ResolvePath(GetUserSandboxFolder().toUtf8().data(), resolvedPath, AZ_MAX_PATH_LEN); - return QString::fromLatin1(resolvedPath); + AZ::IO::FixedMaxPath userSandboxFolderPath; + gEnv->pFileIO->ResolvePath(userSandboxFolderPath, GetUserSandboxFolder().toUtf8().constData()); + return QString::fromUtf8(userSandboxFolderPath.c_str(), static_cast(userSandboxFolderPath.Native().size())); } // internal function, you should use GetEditingGameDataFolder instead. AZStd::string GetGameAssetsFolder() { - const char* resultValue = nullptr; - EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevGameFolderPath); - if (!resultValue) - { - if ((gEnv) && (gEnv->pFileIO)) - { - resultValue = gEnv->pFileIO->GetAlias("@devassets@"); - } - } - - if (!resultValue) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - resultValue = "."; + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); } - return resultValue; + return projectPath.Native(); } /// Get the data folder @@ -258,26 +249,6 @@ namespace Path return str; } - //! Get the root folder (in source control or other writable assets) where you should save root data. - AZStd::string GetEditingRootFolder() - { - const char* resultValue = nullptr; - EBUS_EVENT_RESULT(resultValue, AzToolsFramework::AssetSystemRequestBus, GetAbsoluteDevRootFolderPath); - - if (!resultValue) - { - if ((gEnv) && (gEnv->pFileIO)) - { - resultValue = gEnv->pFileIO->GetAlias("@devassets@"); - } - } - if (!resultValue) - { - resultValue = "."; - } - return resultValue; - } - AZStd::string MakeModPathFromGamePath(const char* relGamePath) { @@ -335,165 +306,60 @@ namespace Path return ""; } - bool relPathfound = false; + bool relPathFound = false; AZStd::string relativePath; AZStd::string fullAssetPath(fullPath.toUtf8().data()); - EBUS_EVENT_RESULT(relPathfound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath); + EBUS_EVENT_RESULT(relPathFound, AzToolsFramework::AssetSystemRequestBus, GetRelativeProductPathFromFullSourceOrProductPath, fullAssetPath, relativePath); - if (relPathfound) + if (relPathFound) { // do not normalize this path, it will already be an appropriate asset ID. return CaselessPaths(relativePath.c_str()); } - char rootpath[_MAX_PATH] = { 0 }; - azstrcpy(rootpath, _MAX_PATH, Path::GetEditingRootFolder().c_str()); - - if (bRelativeToGameFolder) - { - azstrcpy(rootpath, _MAX_PATH, Path::GetEditingGameDataFolder().c_str()); - } - - QString rootPathNormalized(rootpath); - QString srcPathNormalized(fullPath); - -#if defined(AZ_PLATFORM_WINDOWS) - // avoid confusing PathRelativePathTo - rootPathNormalized.replace('/', '\\'); - srcPathNormalized.replace('/', '\\'); -#endif + AZ::IO::FixedMaxPath rootPath = bRelativeToGameFolder ? AZ::Utils::GetProjectPath() : AZ::Utils::GetEnginePath(); + AZ::IO::FixedMaxPath resolvedFullPath; + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedFullPath, fullPath.toUtf8().constData()); // Create relative path - char resolvedSrcPath[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(srcPathNormalized.toUtf8().data(), resolvedSrcPath, AZ_MAX_PATH_LEN); - QByteArray path = QDir(rootPathNormalized).relativeFilePath(resolvedSrcPath).toUtf8(); - if (path.isEmpty()) - { - return fullPath; - } - // The following code is required because the windows PathRelativePathTo function will always return "./SomePath" instead of just "SomePath" - // Only remove single dot (.) and slash parts of a path, never the double dot (..) - const char* pBuffer = path.data(); - bool bHasDot = false; - while (*pBuffer && pBuffer != path.end()) - { - switch (*pBuffer) - { - case '.': - if (bHasDot) - { - // Found a double dot, rewind and stop removing - pBuffer--; - break; - } - // Fall through intended - case '/': - case '\\': - bHasDot = (*pBuffer == '.'); - pBuffer++; - continue; - } - break; - } - - QString relPath = pBuffer; - return CaselessPaths(relPath); + return CaselessPaths(resolvedFullPath.LexicallyProximate(rootPath).MakePreferred().c_str()); } QString GamePathToFullPath(const QString& path) { using namespace AzToolsFramework; - AZ_Warning("GamePathToFullPath", path.size() <= AZ_MAX_PATH_LEN, "Path exceeds maximum path length of %d", AZ_MAX_PATH_LEN); - if ((gEnv) && (gEnv->pFileIO) && gEnv->pCryPak && path.size() <= AZ_MAX_PATH_LEN) + AZ_Warning("GamePathToFullPath", path.size() <= AZ::IO::MaxPathLength, "Path exceeds maximum path length of %zu", AZ::IO::MaxPathLength); + if (path.size() <= AZ::IO::MaxPathLength) { // first, adjust the file name for mods: - bool fullPathfound = false; - AZStd::string assetFullPath; - AZStd::string adjustedFilePath = path.toUtf8().data(); - AssetSystemRequestBus::BroadcastResult(fullPathfound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, adjustedFilePath, assetFullPath); - if (fullPathfound) + bool fullPathFound = false; + AZ::IO::Path assetFullPath; + AZ::IO::Path adjustedFilePath = path.toUtf8().constData(); + AssetSystemRequestBus::BroadcastResult(fullPathFound, &AssetSystemRequestBus::Events::GetFullSourcePathFromRelativeProductPath, + adjustedFilePath.Native(), assetFullPath.Native()); + if (fullPathFound) { - //if the bus message succeeds than normalize and lowercase the path - AzFramework::StringFunc::Path::Normalize(assetFullPath); - return assetFullPath.c_str(); + //if the bus message succeeds than normalize + return assetFullPath.LexicallyNormal().c_str(); } - // if the bus message didn't succeed, 'guess' the source assets: + // if the bus message didn't succeed, check if he path exist as a resolved path else { // Not all systems have been converted to use local paths. Some editor files save XML files directly, and a full or correctly aliased path is already passed in. // If the path passed in exists already, then return the resolved filepath if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(adjustedFilePath.c_str())) { - char resolvedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(adjustedFilePath.c_str(), resolvedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength); - return QString::fromUtf8(resolvedPath); + AZ::IO::FixedMaxPath resolvedPath; + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(resolvedPath, adjustedFilePath); + return QString::fromUtf8(resolvedPath.c_str(), static_cast(resolvedPath.Native().size())); } - // if we get here it means that the Asset Processor does not know about this file. most of the time we should never get here - // the rest of this code just does a bunch of heuristic guesses in case of missing files or if the user has hand-edited - // the asset cache by moving files in via some other means or external process. - if (adjustedFilePath[0] != '@') - { - const char* prefix = (adjustedFilePath[0] == '/' || adjustedFilePath[0] == '\\') ? "@devassets@" : "@devassets@/"; - adjustedFilePath = prefix + adjustedFilePath; - } - - char szAdjustedFile[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - gEnv->pFileIO->ResolvePath(adjustedFilePath.c_str(), szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile)); - - if ((azstrnicmp(szAdjustedFile, "@devassets@", 11) == 0) && ((szAdjustedFile[11] == '/') || (szAdjustedFile[11] == '\\'))) - { - if (!gEnv->pCryPak->IsFileExist(szAdjustedFile)) - { - AZStd::string newName(szAdjustedFile); - AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@/engine", false); - - if (gEnv->pCryPak->IsFileExist(newName.c_str())) - { - azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str()); - } - else - { - // getting tricky here, try @devroot@ alone, in case its 'editor' - AzFramework::StringFunc::Replace(newName, "@devassets@", "@devroot@", false); - if (gEnv->pCryPak->IsFileExist(szAdjustedFile)) - { - azstrcpy(szAdjustedFile, AZ_ARRAY_SIZE(szAdjustedFile), newName.c_str()); - } - // give up, best guess is just @devassets@ - } - } - } - - // we should very rarely actually get to this point in the code. - - // szAdjustedFile may contain an alias at this point. (@assets@/blah.whatever) - // there is a case in which the loose asset exists only within a pak file for some reason - // this is not recommended but it is possible.in that case, we want to return the original szAdjustedFile - // without touching it or resolving it so that crypak can open it successfully. - char adjustedPath[AZ_MAX_PATH_LEN + PathUtil::maxAliasLength] = { 0 }; - if (gEnv->pFileIO->ResolvePath(szAdjustedFile, adjustedPath, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength)) // resolve to full path - { - if ((gEnv->pCryPak->IsFileExist(adjustedPath)) || (!gEnv->pCryPak->IsFileExist(szAdjustedFile))) - { - // note that if we get here, then EITHER - // the file exists as a loose asset in the actual adjusted path - // OR the file does not exist in the original passed-in aliased name (like '@assets@/whatever') - // in which case we may as well just resolve the path to a full path and return it. - assetFullPath = adjustedPath; - AzFramework::StringFunc::Path::Normalize(assetFullPath); - azstrcpy(szAdjustedFile, AZ_MAX_PATH_LEN + PathUtil::maxAliasLength, assetFullPath.c_str()); - } - // if the above case succeeded then it means that the file does NOT exist loose - // but DOES exist in a pak, in which case we leave szAdjustedFile with the alias on the front of it, meaning - // fopens via crypak will actually succeed. - } - return szAdjustedFile; + return path; } } else { - return ""; + return QString{}; } } diff --git a/Code/Editor/Util/PathUtil.h b/Code/Editor/Util/PathUtil.h index 2c49031155..163d74e358 100644 --- a/Code/Editor/Util/PathUtil.h +++ b/Code/Editor/Util/PathUtil.h @@ -44,9 +44,6 @@ namespace Path //! always returns a full path EDITOR_CORE_API AZStd::string GetEditingGameDataFolder(); - //! Get the root folder (in source control or other writable assets) where you should save root data. - EDITOR_CORE_API AZStd::string GetEditingRootFolder(); - //! Set the current mod NAME for editing purposes. After doing this the above functions will take this into account //! name only, please! EDITOR_CORE_API void SetModName(const char* input); @@ -69,93 +66,6 @@ namespace Path return strPath; } - //! Split full file name to path and filename - //! @param filepath [IN] Full file name inclusing path. - //! @param path [OUT] Extracted file path. - //! @param file [OUT] Extracted file (with extension). - inline void Split(const QString& filepath, QString& path, QString& file) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); - path = path_buffer; - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext); -#else - _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); - path = path_buffer; - _makepath(path_buffer, 0, 0, fname, ext); -#endif - file = path_buffer; - } - inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& file) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), 0, 0, 0, 0); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); - path = path_buffer; - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), 0, 0, fname, ext); -#else - _splitpath(filepath.c_str(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); - path = path_buffer; - _makepath(path_buffer, 0, 0, fname, ext); -#endif - file = path_buffer; - } - - //! Split full file name to path and filename - //! @param filepath [IN] Full file name inclusing path. - //! @param path [OUT] Extracted file path. - //! @param filename [OUT] Extracted file (without extension). - //! @param ext [OUT] Extracted files extension. - inline void Split(const QString& filepath, QString& path, QString& filename, QString& fext) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.toUtf8().data(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); -#else - _splitpath(filepath.toUtf8().data(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); -#endif - path = path_buffer; - filename = fname; - fext = ext; - } - inline void Split(const AZStd::string& filepath, AZStd::string& path, AZStd::string& filename, AZStd::string& fext) - { - char path_buffer[_MAX_PATH]; - char drive[_MAX_DRIVE]; - char dir[_MAX_DIR]; - char fname[_MAX_FNAME]; - char ext[_MAX_EXT]; -#ifdef AZ_COMPILER_MSVC - _splitpath_s(filepath.c_str(), drive, AZ_ARRAY_SIZE(drive), dir, AZ_ARRAY_SIZE(dir), fname, AZ_ARRAY_SIZE(fname), ext, AZ_ARRAY_SIZE(ext)); - _makepath_s(path_buffer, AZ_ARRAY_SIZE(path_buffer), drive, dir, 0, 0); -#else - _splitpath(filepath.c_str(), drive, dir, fname, ext); - _makepath(path_buffer, drive, dir, 0, 0); -#endif - path = path_buffer; - filename = fname; - fext = ext; - } - //! Split path into segments //! @param filepath [IN] path inline QStringList SplitIntoSegments(const QString& path) diff --git a/Code/Framework/AzCore/AzCore/IO/FileIO.h b/Code/Framework/AzCore/AzCore/IO/FileIO.h index 6406025417..25dd422a47 100644 --- a/Code/Framework/AzCore/AzCore/IO/FileIO.h +++ b/Code/Framework/AzCore/AzCore/IO/FileIO.h @@ -148,7 +148,7 @@ namespace AZ virtual AZ::u64 ModificationTime(HandleType fileHandle) = 0; virtual AZ::u64 ModificationTime(const char* filePath) = 0; - /// Get the size of the file. Returns Success if we report size. + /// Get the size of the file. Returns Success if we report size. virtual Result Size(const char* filePath, AZ::u64& size) = 0; virtual Result Size(HandleType fileHandle, AZ::u64& size) = 0; @@ -198,7 +198,7 @@ namespace AZ /// note: the callback will contain the full concatenated path (filePath + slash + fileName) /// not just the individual file name found. /// note: if the file path of the found file corresponds to a registered ALIAS, the longest matching alias will be returned - /// so expect return values like @assets@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections. + /// so expect return values like @products@/textures/mytexture.dds instead of a full path. This is so that fileIO works over remote connections. /// note: if rootPath is specified the implementation has the option of substituting it for the current directory /// as would be the case on a file server. typedef AZStd::function FindFilesCallbackType; @@ -206,13 +206,18 @@ namespace AZ // Alias system - /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @root@, etc. + /// SetAlias - Adds an alias to the path resolution system, e.g. @user@, @products@, etc. virtual void SetAlias(const char* alias, const char* path) = 0; /// ClearAlias - Removes an alias from the path resolution system virtual void ClearAlias(const char* alias) = 0; /// GetAlias - Returns the destination path for a given alias, or nullptr if the alias does not exist virtual const char* GetAlias(const char* alias) const = 0; + /// SetDeprecateAlias - Adds a deprecated alias with path resolution which points to a new alias + /// When the DeprecatedAlias is used an Error is logged and the alias is resolved to the path + /// specified by the new alais + virtual void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) = 0; + /// Shorten the given path if it contains an alias. it will always pick the longest alias match. /// note that it re-uses the buffer, since the data can only get smaller and we don't want to internally allocate memory if we /// can avoid it. @@ -230,8 +235,8 @@ namespace AZ //! ResolvePath - Replaces any aliases in path with their values and stores the result in resolvedPath, //! also ensures that the path is absolute - //! NOTE: If the path does not start with an alias then the resolved value of the @assets@ is used - //! which has the effect of making the path relative to the @assets@/ folder + //! NOTE: If the path does not start with an alias then the resolved value of the @products@ is used + //! which has the effect of making the path relative to the @products@/ folder //! returns true if path was resolved, false otherwise //! note that all of the above file-finding and opening functions automatically resolve the path before operating //! so you should not need to call this except in very exceptional circumstances where you absolutely need to diff --git a/Code/Framework/AzCore/AzCore/IO/IStreamer.h b/Code/Framework/AzCore/AzCore/IO/IStreamer.h index d959fa716c..438384e687 100644 --- a/Code/Framework/AzCore/AzCore/IO/IStreamer.h +++ b/Code/Framework/AzCore/AzCore/IO/IStreamer.h @@ -42,8 +42,8 @@ namespace AZ::IO // These functions can't be called after a request has been queued. // - //! Creates a request to read a file. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! Creates a request to read a file. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes. //! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes. //! @param readSize The number of bytes to read from the file at the relative path. @@ -62,9 +62,9 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Sets a request to the read command. + //! Sets a request to the read command. //! @param request The request that will store the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param outputBuffer The buffer that will hold the loaded data. This must be able to at least hold "size" number of bytes. //! @param outputBufferSize The size of the buffer that will hold the loaded data. This must be equal or larger than "size" number of bytes. //! @param readSize The number of bytes to read from the file at the relative path. @@ -84,8 +84,8 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Creates a request to the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! Creates a request to the read command. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will //! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult //! to claim the pointer and use the provided allocator to release the memory at a later point. @@ -106,9 +106,9 @@ namespace AZ::IO IStreamerTypes::Priority priority = IStreamerTypes::s_priorityMedium, size_t offset = 0) = 0; - //! Sets a request to the read command. + //! Sets a request to the read command. //! @param request The request that will store the read command. - //! @param relativePath Relative path to the file to load. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to load. This can include aliases such as @products@. //! @param allocator The allocator used to reserve and release memory for the read request. Memory allocated this way will //! be automatically freed when there are no more references to the FileRequestPtr. To avoid this, use GetReadRequestResult //! to claim the pointer and use the provided allocator to release the memory at a later point. @@ -138,7 +138,7 @@ namespace AZ::IO //! @result A smart pointer to the newly created request with the cancel command. virtual FileRequestPtr Cancel(FileRequestPtr target) = 0; - //! Sets a request to the cancel command. + //! Sets a request to the cancel command. //! When this request completes it's not guaranteed to have canceled the target request. Not all requests can be canceled and requests //! that already processing may complete. It's recommended to let the target request handle the completion of the request as normal //! and handle cancellation by checking the status on the target request is set to IStreamerTypes::RequestStatus::Canceled. @@ -177,7 +177,7 @@ namespace AZ::IO //! DestroyDedicatedCache is called. Typical use of a dedicated cache is for files that have their own compression //! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This //! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches. - //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to create a dedicated cache. virtual FileRequestPtr CreateDedicatedCache(AZStd::string_view relativePath) = 0; @@ -186,25 +186,25 @@ namespace AZ::IO //! and are periodically visited to read a section, e.g. streaming video play or streaming audio banks. This //! request will fail if there are no nodes in Streamer's stack that deal with dedicated caches. //! @param request The request that will store the command to create a dedicated cache. - //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file to receive a dedicated cache. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& CreateDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; //! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details. - //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to destroy a dedicated cache. virtual FileRequestPtr DestroyDedicatedCache(AZStd::string_view relativePath) = 0; //! Destroy a dedicated cache created by CreateDedicatedCache. See CreateDedicatedCache for more details. //! @param request The request that will store the command to destroy a dedicated cache. - //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that got a dedicated cache. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& DestroyDedicatedCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; //! Clears a file from all caches in use by Streamer. //! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming //! processing. This can result in a noticeable interruption. - //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@. //! @return A smart pointer to the newly created request with the command to flush a file from all caches. virtual FileRequestPtr FlushCache(AZStd::string_view relativePath) = 0; @@ -212,7 +212,7 @@ namespace AZ::IO //! Flushing the cache will cause the streaming stack to pause processing until it's idle before issuing the flush and resuming //! processing. This can result in a noticeable interruption. //! @param request The request that will store the command to flush a file from all caches. - //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @assets@. + //! @param relativePath Relative path to the file that will be cleared from all caches. This can include aliases such as @products@. //! @return A reference to the provided request. virtual FileRequestPtr& FlushCache(FileRequestPtr& request, AZStd::string_view relativePath) = 0; @@ -334,7 +334,7 @@ namespace AZ::IO // //! Collect statistics from all the components that make up Streamer. - //! This is thread safe in the sense that it won't crash. + //! This is thread safe in the sense that it won't crash. //! Data is collected lockless from involved threads and might be slightly //! out of date in some cases. //! @param statistics The container where statistics will be added to. diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.h b/Code/Framework/AzCore/AzCore/IO/Path/Path.h index 24f26daa51..3b5c224957 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/Path.h +++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.h @@ -98,6 +98,11 @@ namespace AZ::IO //! made from the internal string constexpr AZStd::fixed_string FixedMaxPathString() const noexcept; + // as_posix + //! Replicates the behavior of the Python pathlib as_posix method + //! by replacing the Windows Path Separator with the Posix Path Seperator + constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept; + // decomposition //! Given a windows path of "C:\O3DE\foo\bar\name.txt" and a posix path of //! "/O3DE/foo/bar/name.txt" @@ -178,7 +183,7 @@ namespace AZ::IO //! Normalizes a path in a purely lexical manner. //! # Path separators are converted to their preferred path separator //! # Path parts of "." are collapsed to nothing empty - //! # Paths parts of ".." are removed if there is a preceding directory + //! # Paths parts of ".." are removed if there is a preceding directory //! The preceding directory is also removed //! # Runs of Two or more path separators are collapsed into one path separator //! unless the path begins with two path separators @@ -238,7 +243,7 @@ namespace AZ::IO // iterators //! Returns an iterator to the beginning of the path that can be used to traverse the path - //! according to the following + //! according to the following //! 1. Root name - (0 or 1) //! 2. Root directory - (0 or 1) //! 3. Filename - (0 or more) @@ -253,24 +258,23 @@ namespace AZ::IO template friend class BasicPath; friend struct AZStd::hash; + struct PathIterable; - template - static constexpr void MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base); + static constexpr void MakeRelativeTo(PathIterable& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept; - struct PathIterable; //! Returns a structure that provides a view of the path parts which can be used for iteration //! Only the path parts that correspond to creating an normalized path is returned //! This function is useful for returning a "view" into a normalized path without the need //! to allocate memory for the heap static constexpr PathIterable GetNormalPathParts(const AZ::IO::PathView& path) noexcept; - // joins the input path to the Path Iterable structure using similiar logic to Path::Append - // If the input path is absolute it will replace the current PathIterable otherwise - // the input path will be appended to the Path Iterable structure - // For example a PathIterable with parts = ['C:', '/', 'foo'] - // If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar'] - // If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar'] - // If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ] - // If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ] + //! joins the input path to the Path Iterable structure using similiar logic to Path::Append + //! If the input path is absolute it will replace the current PathIterable otherwise + //! the input path will be appended to the Path Iterable structure + //! For example a PathIterable with parts = ['C:', '/', 'foo'] + //! If the path input = 'bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar'] + //! If the path input = 'C:/bar', then the new PathIterable parts = [C:', '/', 'bar'] + //! If the path input = 'C:bar', then the new PathIterable parts = [C:', '/', 'foo', 'bar' ] + //! If the path input = 'D:bar', then the new PathIterable parts = [D:, 'bar' ] static constexpr void AppendNormalPathParts(PathIterable& pathIterableResult, const AZ::IO::PathView& path) noexcept; constexpr int ComparePathView(const PathView& other) const; @@ -325,32 +329,32 @@ namespace AZ::IO constexpr BasicPath(BasicPath&& other) = default; // Conversion constructor for other types of BasicPath instantiations - constexpr BasicPath(const PathView& other); + constexpr BasicPath(const PathView& other) noexcept; // String constructors //! Constructs a Path by copying the pathString to its internal string //! The preferred separator is to the OS default path separator constexpr BasicPath(const string_type& pathString) noexcept; //! Constructs a Path by copying the pathString to its internal string - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(const string_type& pathString, const char preferredSeparator) noexcept; //! Constructs a Path by moving the pathString to its internal string //! The preferred separator is to the OS default path separator constexpr BasicPath(string_type&& pathString) noexcept; //! Constructs a Path by copying the pathString to its internal string - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(string_type&& pathString, const char preferredSeparator) noexcept; //! Constructs a Path by constructing it's internal out of a string_view //! The preferred separator is to the OS default path separator constexpr BasicPath(AZStd::string_view src) noexcept; //! Constructs a Path by constructing it's internal out of a string_view - //! The preferred separators it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(AZStd::string_view src, const char preferredSeparator) noexcept; //! Constructs a Path by constructing it's internal out of a value_type* //! The preferred separator is to the OS default path separator constexpr BasicPath(const value_type* pathString) noexcept; //! Constructs a Path by constructing it's internal out of a value_type* - //! The preferred separator it set to the parameter + //! The preferred separator is set to the parameter constexpr BasicPath(const value_type* pathString, const char preferredSeparator) noexcept; //! Constructs a empty Path with the preferred separator set to the parameter explicit constexpr BasicPath(const char preferredSeparator) noexcept; @@ -371,7 +375,7 @@ namespace AZ::IO constexpr BasicPath& operator=(BasicPath&& other) = default; // conversion assignment operator - constexpr BasicPath& operator=(const PathView& pathView); + constexpr BasicPath& operator=(const PathView& pathView) noexcept; constexpr BasicPath& operator=(const string_type& str) noexcept; constexpr BasicPath& operator=(string_type&& str) noexcept; constexpr BasicPath& operator=(AZStd::string_view str) noexcept; @@ -477,6 +481,12 @@ namespace AZ::IO //! made from the internal string constexpr AZStd::fixed_string FixedMaxPathString() const; + // as_posix + //! Replicates the behavior of the Python pathlib as_posix method + //! by replacing the Windows Path Separator with the Posix Path Seperator + AZStd::string StringAsPosix() const; + constexpr AZStd::fixed_string FixedMaxPathStringAsPosix() const noexcept; + // compare //! Performs a compare of each of the path parts for equivalence //! Each part of the path is compare using string comparison @@ -574,7 +584,7 @@ namespace AZ::IO //! Normalizes a path in a purely lexical manner. //! # Path separators are converted to their preferred path separator //! # Path parts of "." are collapsed to nothing empty - //! # Paths parts of ".." are removed if there is a preceding directory + //! # Paths parts of ".." are removed if there is a preceding directory //! The preceding directory is also removed //! # Runs of Two or more path separators are collapsed into one path separator //! unless the path begins with two path separators @@ -616,7 +626,7 @@ namespace AZ::IO // iterators //! Returns an iterator to the beginning of the path that can be used to traverse the path - //! according to the following + //! according to the following //! 1. Root name - (0 or 1) //! 2. Root directory - (0 or 1) //! 3. Filename - (0 or more) diff --git a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl index 0147ad3356..1d654c1502 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/Path.inl +++ b/Code/Framework/AzCore/AzCore/IO/Path/Path.inl @@ -240,6 +240,14 @@ namespace AZ::IO return AZStd::fixed_string(m_path.begin(), m_path.end()); } + // as_posix + constexpr AZStd::fixed_string PathView::FixedMaxPathStringAsPosix() const noexcept + { + AZStd::fixed_string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), AZ::IO::WindowsPathSeparator, AZ::IO::PosixPathSeparator); + return resultPath; + } + // decomposition constexpr auto PathView::RootName() const -> PathView { @@ -473,8 +481,7 @@ namespace AZ::IO return lhs.Compare(rhs) >= 0; } - template - constexpr void PathView::MakeRelativeTo(PathResultType& pathResult, const AZ::IO::PathView& path, const AZ::IO::PathView& base) + constexpr void PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView& path, const AZ::IO::PathView& base) noexcept { const bool exactCaseCompare = path.m_preferred_separator == PosixPathSeparator || base.m_preferred_separator == PosixPathSeparator; @@ -492,13 +499,11 @@ namespace AZ::IO if (int res = Internal::ComparePathSegment(*pathParser, *pathParserBase, exactCaseCompare); res != 0) { - pathResult.m_path = AZStd::string_view{}; return; } } else if (CheckIterMismatchAtBase()) { - pathResult.m_path = AZStd::string_view{}; return; } @@ -512,7 +517,6 @@ namespace AZ::IO } if (CheckIterMismatchAtBase()) { - pathResult.m_path = AZStd::string_view{}; return; } } @@ -530,7 +534,7 @@ namespace AZ::IO // If there is no mismatch, return ".". if (!pathParser && !pathParserBase) { - pathResult.m_path = AZStd::string_view{ "." }; + pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot); return; } @@ -539,27 +543,25 @@ namespace AZ::IO int elemCount = parser::DetermineLexicalElementCount(pathParserBase); if (elemCount < 0) { - pathResult.m_path = AZStd::string_view{}; return; } // if elemCount == 0 and (pathParser == end() || pathParser->empty()), returns path("."); otherwise if (elemCount == 0 && (pathParser.AtEnd() || *pathParser == "")) { - pathResult.m_path = AZStd::string_view{ "." }; + pathIterable.emplace_back(".", parser::PathPartKind::PK_Dot); return; } // return a path constructed with 'n' dot-dot elements, followed by the // elements of '*this' after the mismatch. - pathResult = PathResultType(path.m_preferred_separator); while (elemCount--) { - pathResult /= ".."; + pathIterable.emplace_back("..", parser::PathPartKind::PK_DotDot); } for (; pathParser; ++pathParser) { - pathResult /= *pathParser; + pathIterable.emplace_back(*pathParser, parser::ClassifyPathPart(pathParser)); } } @@ -673,7 +675,7 @@ namespace AZ::IO // Basic Path implementation template - constexpr BasicPath::BasicPath(const PathView& other) + constexpr BasicPath::BasicPath(const PathView& other) noexcept : m_path(other.m_path) , m_preferred_separator(other.m_preferred_separator) {} @@ -726,6 +728,7 @@ namespace AZ::IO : m_path(first, last) , m_preferred_separator(preferredSeparator) {} + template constexpr BasicPath::operator PathView() const noexcept { @@ -733,7 +736,7 @@ namespace AZ::IO } template - constexpr auto BasicPath::operator=(const PathView& other) -> BasicPath& + constexpr auto BasicPath::operator=(const PathView& other) noexcept -> BasicPath& { m_path = other.m_path; m_preferred_separator = other.m_preferred_separator; @@ -974,13 +977,13 @@ namespace AZ::IO template constexpr auto BasicPath::MakePreferred() -> BasicPath& { - if (m_preferred_separator != '/') + if (m_preferred_separator != PosixPathSeparator) { - AZStd::replace(m_path.begin(), m_path.end(), '/', m_preferred_separator); + AZStd::replace(m_path.begin(), m_path.end(), PosixPathSeparator, m_preferred_separator); } else { - AZStd::replace(m_path.begin(), m_path.end(), '\\', m_preferred_separator); + AZStd::replace(m_path.begin(), m_path.end(), WindowsPathSeparator, m_preferred_separator); } return *this; } @@ -1033,6 +1036,24 @@ namespace AZ::IO return AZStd::fixed_string(m_path.begin(), m_path.end()); } + // as_posix + // Returns a copy of the path with the path separators converted to PosixPathSeparator + template + AZStd::string BasicPath::StringAsPosix() const + { + AZStd::string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator); + return resultPath; + } + + template + constexpr AZStd::fixed_string BasicPath::FixedMaxPathStringAsPosix() const noexcept + { + AZStd::fixed_string resultPath(m_path.begin(), m_path.end()); + AZStd::replace(resultPath.begin(), resultPath.end(), WindowsPathSeparator, PosixPathSeparator); + return resultPath; + } + template constexpr void BasicPath::swap(BasicPath& rhs) noexcept { @@ -1234,6 +1255,7 @@ namespace AZ::IO { pathResult /= pathPartView; } + return pathResult; } @@ -1241,7 +1263,13 @@ namespace AZ::IO constexpr auto BasicPath::LexicallyRelative(const PathView& base) const -> BasicPath { BasicPath pathResult(m_preferred_separator); - static_cast(*this).MakeRelativeTo(pathResult, *this, base); + PathView::PathIterable pathIterable; + PathView::MakeRelativeTo(pathIterable, *this, base); + for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable) + { + pathResult /= pathPartView; + } + return pathResult; } @@ -1355,7 +1383,7 @@ namespace AZ::IO return !basePathParts.empty() || !thisPathParts.IsAbsolute(); } - constexpr FixedMaxPath PathView::LexicallyNormal() const + constexpr auto PathView::LexicallyNormal() const -> FixedMaxPath { FixedMaxPath pathResult(m_preferred_separator); PathIterable pathIterable = GetNormalPathParts(*this); @@ -1367,21 +1395,28 @@ namespace AZ::IO return pathResult; } - constexpr FixedMaxPath PathView::LexicallyRelative(const PathView& base) const + constexpr auto PathView::LexicallyRelative(const PathView& base) const -> FixedMaxPath { FixedMaxPath pathResult(m_preferred_separator); - MakeRelativeTo(pathResult, *this, base); + PathIterable pathIterable; + MakeRelativeTo(pathIterable, *this, base); + for ([[maybe_unused]] auto [pathPartView, pathPartKind] : pathIterable) + { + pathResult /= pathPartView; + } + return pathResult; } - constexpr FixedMaxPath PathView::LexicallyProximate(const PathView& base) const + constexpr auto PathView::LexicallyProximate(const PathView& base) const -> FixedMaxPath { - FixedMaxPath result = LexicallyRelative(base); - if (result.empty()) + FixedMaxPath pathResult = LexicallyRelative(base); + if (pathResult.empty()) { return FixedMaxPath(*this); } - return result; + + return pathResult; } } diff --git a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl index a1faa29b31..e700ab0196 100644 --- a/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl +++ b/Code/Framework/AzCore/AzCore/IO/Path/PathIterable.inl @@ -49,8 +49,8 @@ namespace AZ::IO constexpr void clear() noexcept; - friend constexpr auto PathView::GetNormalPathParts(const AZ::IO::PathView&) noexcept -> PathIterable; friend constexpr auto PathView::AppendNormalPathParts(PathIterable& pathIterable, const AZ::IO::PathView&) noexcept -> void; + friend constexpr auto PathView::MakeRelativeTo(PathIterable& pathIterable, const AZ::IO::PathView&, const AZ::IO::PathView&) noexcept -> void; PartKindArray m_parts{}; size_t m_size{}; }; diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp index e1bd717e7b..36f66312d8 100644 --- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryMergeUtils.cpp @@ -546,7 +546,7 @@ namespace AZ::SettingsRegistryMergeUtils AZ::IO::FixedMaxPath path = AZ::Utils::GetExecutableDirectory(); registry.Set(FilePathKey_BinaryFolder, path.LexicallyNormal().Native()); - // Engine root folder - corresponds to the @engroot@ and @devroot@ aliases + // Engine root folder - corresponds to the @engroot@ and @engroot@ aliases AZ::IO::FixedMaxPath engineRoot = FindEngineRoot(registry); registry.Set(FilePathKey_EngineRootFolder, engineRoot.LexicallyNormal().Native()); @@ -570,7 +570,7 @@ namespace AZ::SettingsRegistryMergeUtils assetPlatform = AZ::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); } - // Project path - corresponds to the @devassets@ alias + // Project path - corresponds to the @projectroot@ alias // NOTE: Here we append to engineRoot, but if projectPathValue is absolute then engineRoot is discarded. path = engineRoot / projectPathValue; @@ -662,7 +662,7 @@ namespace AZ::SettingsRegistryMergeUtils } else { - // Cache: root - same as the @root@ alias, this is the starting path for cache files. + // Cache: root - same as the @products@ alias, this is the starting path for cache files. path = normalizedProjectPath / "Cache"; registry.Set(FilePathKey_CacheProjectRootFolder, path.LexicallyNormal().Native()); path /= assetPlatform; diff --git a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h index c9b7d44e1f..d7d0789c1a 100644 --- a/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h +++ b/Code/Framework/AzCore/AzCore/UnitTest/Mocks/MockFileIOBase.h @@ -52,6 +52,7 @@ namespace AZ MOCK_METHOD2(SetAlias, void(const char* alias, const char* path)); MOCK_METHOD1(ClearAlias, void(const char* alias)); MOCK_CONST_METHOD1(GetAlias, const char*(const char* alias)); + MOCK_METHOD2(SetDeprecatedAlias, void(AZStd::string_view, AZStd::string_view)); MOCK_CONST_METHOD2(ConvertToAlias, AZStd::optional(char* inOutBuffer, AZ::u64 bufferLength)); MOCK_CONST_METHOD2(ConvertToAlias, bool(AZ::IO::FixedMaxPath& aliasPath, const AZ::IO::PathView& path)); MOCK_CONST_METHOD3(ResolvePath, bool(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize)); diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp index c4dd24be35..2031d14d08 100644 --- a/Code/Framework/AzCore/AzCore/Utils/Utils.cpp +++ b/Code/Framework/AzCore/AzCore/Utils/Utils.cpp @@ -51,6 +51,20 @@ namespace AZ::Utils return executableDirectory; } + AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + { + AZ::IO::FixedMaxPathString absolutePath; + AZ::IO::FixedMaxPathString srcPath{ path }; + if (ConvertToAbsolutePath(srcPath.c_str(), absolutePath.data(), absolutePath.capacity())) + { + // Fix the size value of the fixed string by calculating the c-string length using char traits + absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); + return srcPath; + } + + return AZStd::nullopt; + } + AZ::IO::FixedMaxPathString GetEngineManifestPath() { AZ::IO::FixedMaxPath o3deManifestPath = GetO3deManifestDirectory(); diff --git a/Code/Framework/AzCore/AzCore/Utils/Utils.h b/Code/Framework/AzCore/AzCore/Utils/Utils.h index d8d4290f7f..c147e38bfb 100644 --- a/Code/Framework/AzCore/AzCore/Utils/Utils.h +++ b/Code/Framework/AzCore/AzCore/Utils/Utils.h @@ -104,6 +104,7 @@ namespace AZ // Attempts the supplied path to an absolute path. //! Returns nullopt if path cannot be converted to an absolute path AZStd::optional ConvertToAbsolutePath(AZStd::string_view path); + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 absolutePathMaxSize); //! Save a string to a file. Otherwise returns a failure with error message. AZ::Outcome WriteFile(AZStd::string_view content, AZStd::string_view filePath); diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp index 1333006c4c..9a3f825bfc 100644 --- a/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp +++ b/Code/Framework/AzCore/Platform/Android/AzCore/Utils/Utils_Android.cpp @@ -60,23 +60,34 @@ namespace AZ return writeStorage ? AZStd::make_optional(writeStorage) : AZStd::nullopt; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - if (AZ::Android::Utils::IsApkPath(srcPath.c_str())) + if (AZ::Android::Utils::IsApkPath(path)) { - return srcPath; + azstrcpy(absolutePath, maxLength, path); + return true; } - if(char* result = realpath(srcPath.c_str(), absolutePath.data()); result) +#ifdef PATH_MAX + static constexpr size_t UnixMaxPathLength = PATH_MAX; +#else + // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System + static constexpr size_t UnixMaxPathLength = 4096; +#endif + if (!AZ::IO::PathView(path).IsAbsolute()) { - // Fix the size value of the fixed string by calculating the c-string length using char traits - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - return absolutePath; + // note that realpath fails if the path does not exist and actually changes the return value + // to be the actual place that FAILED, which we don't want. + // if we fail, we'd prefer to fall through and at least use the original path. + char absolutePathBuffer[UnixMaxPathLength]; + if (const char* result = realpath(path, absolutePathBuffer); result != nullptr) + { + azstrcpy(absolutePath, maxLength, absolutePathBuffer); + return true; + } } - - return AZStd::nullopt; + azstrcpy(absolutePath, maxLength, path); + return AZ::IO::PathView(absolutePath).IsAbsolute(); } } } diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp index 2e31936057..7327c8f152 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/Utils/Utils_UnixLike.cpp @@ -47,23 +47,32 @@ namespace AZ AZ::IO::FixedMaxPath path{pass->pw_dir}; return path.Native(); } - + return {}; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - - if (char* result = realpath(srcPath.c_str(), absolutePath.data()); result) +#ifdef PATH_MAX + static constexpr size_t UnixMaxPathLength = PATH_MAX; +#else + // Fallback to 4096 if the PATH_MAX macro isn't defined on the Unix System + static constexpr size_t UnixMaxPathLength = 4096; +#endif + if (!AZ::IO::PathView(path).IsAbsolute()) { - // Fix the size value of the fixed string by calculating the c-string length using char traits - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - return absolutePath; + // note that realpath fails if the path does not exist and actually changes the return value + // to be the actual place that FAILED, which we don't want. + // if we fail, we'd prefer to fall through and at least use the original path. + char absolutePathBuffer[UnixMaxPathLength]; + if (const char* result = realpath(path, absolutePathBuffer); result != nullptr) + { + azstrcpy(absolutePath, maxLength, absolutePathBuffer); + return true; + } } - - return AZStd::nullopt; + azstrcpy(absolutePath, maxLength, path); + return AZ::IO::PathView(absolutePath).IsAbsolute(); } } // namespace Utils } // namespace AZ diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp index bcba24b768..24786e2bc9 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Utils/Utils_WinAPI.cpp @@ -67,19 +67,12 @@ namespace AZ return AZStd::nullopt; } - AZStd::optional ConvertToAbsolutePath(AZStd::string_view path) + bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) { - AZ::IO::FixedMaxPathString absolutePath; - AZ::IO::FixedMaxPathString srcPath{ path }; - char* result = _fullpath(absolutePath.data(), srcPath.c_str(), absolutePath.capacity()); - // Force update of the fixed_string size() value - absolutePath.resize_no_construct(AZStd::char_traits::length(absolutePath.data())); - if (result) - { - return absolutePath; - } - - return AZStd::nullopt; + char* result = _fullpath(absolutePath, path, maxLength); + return result != nullptr; } + + } } diff --git a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h index 26b3df55bb..5897b3aaee 100644 --- a/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h +++ b/Code/Framework/AzCore/Tests/FileIOBaseTestTypes.h @@ -426,6 +426,10 @@ public: return nullptr; } + void SetDeprecatedAlias(AZStd::string_view, AZStd::string_view) override + { + } + void ClearAlias(const char* ) override { } AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64) const override diff --git a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp index 34076a10f6..cf239a0821 100644 --- a/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp +++ b/Code/Framework/AzCore/Tests/IO/Path/PathTests.cpp @@ -698,7 +698,7 @@ AZ_POP_DISABLE_WARNING using PathViewLexicallyProximateFixture = PathLexicallyFixture; - TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPathIfNot) + TEST_P(PathViewLexicallyProximateFixture, LexicallyProximate_ReturnsRelativePathIfNotEmptyOrTestPath) { const auto& testParams = GetParam(); AZ::IO::PathView testPath(testParams.m_testPathString, testParams.m_preferredSeparator); diff --git a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp index e72e2de472..1f99a594fa 100644 --- a/Code/Framework/AzFramework/AzFramework/Application/Application.cpp +++ b/Code/Framework/AzFramework/AzFramework/Application/Application.cpp @@ -77,11 +77,15 @@ namespace AzFramework { + namespace ApplicationInternal { static constexpr const char s_prefabSystemKey[] = "/Amazon/Preferences/EnablePrefabSystem"; static constexpr const char s_prefabWipSystemKey[] = "/Amazon/Preferences/EnablePrefabSystemWipFeatures"; static constexpr const char s_legacySlicesAssertKey[] = "/Amazon/Preferences/ShouldAssertForLegacySlicesUsage"; + static constexpr const char* DeprecatedFileIOAliasesRoot = "/O3DE/AzCore/FileIO/DeprecatedAliases"; + static constexpr const char* DeprecatedFileIOAliasesOldAliasKey = "OldAlias"; + static constexpr const char* DeprecatedFileIOAliasesNewAliasKey = "NewAlias"; } Application::Application() @@ -563,6 +567,68 @@ namespace AzFramework } } + struct DeprecatedAliasesKeyVisitor + : AZ::SettingsRegistryInterface::Visitor + { + using VisitResponse = AZ::SettingsRegistryInterface::VisitResponse; + using VisitAction = AZ::SettingsRegistryInterface::VisitAction; + using Type = AZ::SettingsRegistryInterface::Type; + + using AZ::SettingsRegistryInterface::Visitor::Visit; + + VisitResponse Traverse(AZStd::string_view path, AZStd::string_view, + VisitAction action, Type type) override + { + if (action == AZ::SettingsRegistryInterface::VisitAction::Begin) + { + if (type == AZ::SettingsRegistryInterface::Type::Array) + { + m_parentArrayPath = path; + } + + // Strip off last path segment from json path and check if is a child element of the array + if (AZ::StringFunc::TokenizeLast(path, '/'); + m_parentArrayPath == path) + { + m_aliases.emplace_back(); + } + } + else if (action == AZ::SettingsRegistryInterface::VisitAction::End) + { + if (type == AZ::SettingsRegistryInterface::Type::Array) + { + m_parentArrayPath = AZStd::string{}; + } + } + + return AZ::SettingsRegistryInterface::VisitResponse::Continue; + } + + void Visit(AZStd::string_view, AZStd::string_view valueName, Type, AZStd::string_view value) override + { + if (!m_aliases.empty()) + { + if (valueName == ApplicationInternal::DeprecatedFileIOAliasesOldAliasKey) + { + m_aliases.back().m_oldAlias = value; + } + else if (valueName == ApplicationInternal::DeprecatedFileIOAliasesNewAliasKey) + { + m_aliases.back().m_newAlias = value; + } + } + } + + struct AliasPair + { + AZStd::string m_oldAlias; + AZStd::string m_newAlias; + }; + AZStd::vector m_aliases; + + private: + AZStd::string m_parentArrayPath; + }; static void CreateUserCache(const AZ::IO::FixedMaxPath& cacheUserPath, AZ::IO::FileIOBase& fileIoBase) { @@ -610,9 +676,8 @@ namespace AzFramework void Application::SetFileIOAliases() { - if (m_archiveFileIO) + if (auto fileIoBase = m_archiveFileIO.get(); fileIoBase) { - auto fileIoBase = m_archiveFileIO.get(); // Set up the default file aliases based on the settings registry fileIoBase->SetAlias("@engroot@", GetEngineRoot()); fileIoBase->SetAlias("@projectroot@", GetEngineRoot()); @@ -620,29 +685,20 @@ namespace AzFramework { AZ::IO::FixedMaxPath pathAliases; - if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheProjectRootFolder)) - { - fileIoBase->SetAlias("@projectcache@", pathAliases.c_str()); - } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder)) { - fileIoBase->SetAlias("@assets@", pathAliases.c_str()); - fileIoBase->SetAlias("@projectplatformcache@", pathAliases.c_str()); - fileIoBase->SetAlias("@root@", pathAliases.c_str()); // Deprecated Use @projectplatformcache@ + fileIoBase->SetAlias("@products@", pathAliases.c_str()); } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder)) { fileIoBase->SetAlias("@engroot@", pathAliases.c_str()); - fileIoBase->SetAlias("@devroot@", pathAliases.c_str()); // Deprecated - Use @engroot@ } pathAliases.clear(); if (m_settingsRegistry->Get(pathAliases.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) { - fileIoBase->SetAlias("@devassets@", pathAliases.c_str()); // Deprecated - Use @projectsourceassets@ fileIoBase->SetAlias("@projectroot@", pathAliases.c_str()); - fileIoBase->SetAlias("@projectsourceassets@", (pathAliases / "Assets").c_str()); } } @@ -663,6 +719,15 @@ namespace AzFramework } fileIoBase->SetAlias("@log@", projectLogPath.c_str()); fileIoBase->CreatePath(projectLogPath.c_str()); + + DeprecatedAliasesKeyVisitor visitor; + if (m_settingsRegistry->Visit(visitor, ApplicationInternal::DeprecatedFileIOAliasesRoot)) + { + for (const auto& [oldAlias, newAlias] : visitor.m_aliases) + { + fileIoBase->SetDeprecatedAlias(oldAlias, newAlias); + } + } } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp index 8064ba6669..e5a42aabbc 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp @@ -1121,7 +1121,7 @@ namespace AZ::IO if (AZ::IO::FixedMaxPath pathBindRoot; !AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, szBindRoot)) { - AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@assets@"); + AZ::IO::FileIOBase::GetDirectInstance()->ResolvePath(pathBindRoot, "@products@"); desc.m_pathBindRoot = pathBindRoot.LexicallyNormal().String(); } else @@ -1807,9 +1807,9 @@ namespace AZ::IO if (m_eRecordFileOpenList != IArchive::RFOM_Disabled) { // we only want to record ASSET access - // assets are identified as files that are relative to the resolved @assets@ alias path + // assets are identified as files that are relative to the resolved @products@ alias path auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); - const char* aliasValue = fileIoBase->GetAlias("@assets@"); + const char* aliasValue = fileIoBase->GetAlias("@products@"); if (AZ::IO::FixedMaxPath resolvedFilePath; fileIoBase->ResolvePath(resolvedFilePath, szFilename) diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp index 85ce0b6f9a..9e6e1034ea 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.cpp @@ -546,6 +546,16 @@ namespace AZ::IO realUnderlyingFileIO->GetAlias(alias); } + void ArchiveFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + FileIOBase* realUnderlyingFileIO = FileIOBase::GetDirectInstance(); + if (!realUnderlyingFileIO) + { + return; + } + realUnderlyingFileIO->SetDeprecatedAlias(oldAlias, newAlias); + } + AZStd::optional ArchiveFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const { if ((!inOutBuffer) || (bufferLength == 0)) diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h index 21cef18a7a..7fd4e15e3a 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFileIO.h @@ -63,6 +63,7 @@ namespace AZ::IO IO::Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override; void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp index d7a92efbf6..7b483dc5de 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ArchiveFindData.cpp @@ -186,8 +186,8 @@ namespace AZ::IO { // filter out the stuff which does not match. - // the problem here is that szDir might be something like "@assets@/levels/*" - // but our archive might be mounted at the root, or at some other folder at like "@assets@" or "@assets@/levels/mylevel" + // the problem here is that szDir might be something like "@products@/levels/*" + // but our archive might be mounted at the root, or at some other folder at like "@products@" or "@products@/levels/mylevel" // so there's really no way to filter out opening the pack and looking at the files inside. // however, the bind root is not part of the inner zip entry name either // and the ZipDir::FindFile actually expects just the chopped off piece. @@ -202,22 +202,22 @@ namespace AZ::IO // Example: - // "@assets@\\levels\\*" <--- szDir - // "@assets@\\" <--- mount point + // "@products@\\levels\\*" <--- szDir + // "@products@\\" <--- mount point // ~~~~~~~~~~~ Common part // "levels\\*" <---- remainder that is not in common // "" <--- mount point remainder. In this case, we should scan the contents of the pak for the remainder // Example: - // "@assets@\\levels\\*" <--- szDir - // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak) + // "@products@\\levels\\*" <--- szDir + // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak) // ~~~~~~~~~~~~~~~~~~ common part // "*" <---- remainder that is not in common // "mylevel\\" <--- mount point remainder. // example: - // "@assets@\\levels\\otherlevel\\*" <--- szDir - // "@assets@\\levels\\mylevel\\" <--- mount point (its level.pak) + // "@products@\\levels\\otherlevel\\*" <--- szDir + // "@products@\\levels\\mylevel\\" <--- mount point (its level.pak) // "otherlevel\\*" <---- remainder // "mylevel\\" <--- mount point remainder. @@ -249,7 +249,7 @@ namespace AZ::IO // which means we may search inside the pack. ScanInZip(it->pZip.get(), sourcePathRemainder.Native()); } - + } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp index 0a6116d313..4c6ed0363e 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/MissingFileReport.cpp @@ -94,7 +94,7 @@ namespace AZ::IO::Internal } AZStd::smatch matches; - const AZStd::regex lodRegex("@assets@\\\\(.*)_lod[0-9]+(\\.cgfm?)"); + const AZStd::regex lodRegex("@products@\\\\(.*)_lod[0-9]+(\\.cgfm?)"); if (!AZStd::regex_match(szPath, matches, lodRegex) || matches.size() != 3) { // The current file is not a valid LOD file diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp index 9b1946701c..e6b8211c28 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetCatalog.cpp @@ -725,7 +725,7 @@ namespace AzFramework if (!info.m_relativePath.empty()) { - const char* devAssetRoot = fileIO->GetAlias("@devassets@"); + const char* devAssetRoot = fileIO->GetAlias("@projectroot@"); if (devAssetRoot) { AZ::Data::AssetStreamInfo streamInfo; diff --git a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp index a7c6b18061..cc31df3dbc 100644 --- a/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp +++ b/Code/Framework/AzFramework/AzFramework/Gem/GemInfo.cpp @@ -61,7 +61,7 @@ namespace AzFramework AZ::IO::Path& gemAbsPath = gemInfo.m_absoluteSourcePaths.emplace_back(value); // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp index 49e16dcb90..c1b9c941bc 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.cpp @@ -12,10 +12,12 @@ #include #include #include +#include #include #include #include #include +#include #include namespace AZ @@ -292,7 +294,7 @@ namespace AZ void LocalFileIO::CheckInvalidWrite([[maybe_unused]] const char* path) { #if defined(AZ_ENABLE_TRACING) - const char* assetAliasPath = GetAlias("@assets@"); + const char* assetAliasPath = GetAlias("@products@"); if (path && assetAliasPath) { const AZ::IO::PathView pathView(path); @@ -478,17 +480,15 @@ namespace AZ return false; } - if (IsAbsolutePath(path)) + if (AZ::IO::PathView(path).HasRootPath()) { size_t pathLen = strlen(path); if (pathLen + 1 < resolvedPathSize) { azstrncpy(resolvedPath, resolvedPathSize, path, pathLen + 1); - //see if the absolute path uses @assets@ or @root@, if it does lowercase the relative part - [[maybe_unused]] bool lowercasePath = LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@assets@")) - || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@root@")) - || LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@projectplatformcache@")); + //see if the absolute path matches the resolved value of @products@, if it does lowercase the relative part + LowerIfBeginsWith(resolvedPath, resolvedPathSize, GetAlias("@products@")); ToUnixSlashes(resolvedPath, resolvedPathSize); return true; @@ -499,34 +499,39 @@ namespace AZ } } - char rootedPathBuffer[AZ_MAX_PATH_LEN] = {0}; + constexpr AZStd::string_view productAssetAlias = "@products@"; + // Add plus one for the path separator: / + constexpr size_t MaxPathSizeWithProductAssetAlias = AZ::IO::MaxPathLength + productAssetAlias.size() + 1; + using RootedPathString = AZStd::fixed_string; + RootedPathString rootedPathBuffer; const char* rootedPath = path; - // if the path does not begin with an alias, then it is assumed to begin with @assets@ + // if the path does not begin with an alias, then it is assumed to begin with @products@ if (path[0] != '@') { - if (GetAlias("@assets@")) + if (GetAlias("@products@")) { - const int rootLength = 9;// strlen("@assets@/") - azstrncpy(rootedPathBuffer, AZ_MAX_PATH_LEN, "@assets@/", rootLength); - size_t pathLen = strlen(path); - size_t rootedPathBufferlength = rootLength + pathLen + 1;// +1 for null terminator - if (rootedPathBufferlength > resolvedPathSize) + + if (const size_t requiredSize = productAssetAlias.size() + strlen(path) + 1; + requiredSize > rootedPathBuffer.capacity()) { - AZ_Assert(rootedPathBufferlength < resolvedPathSize, "Constructed path length is wrong:%s", rootedPathBuffer);//path constructed is wrong - size_t remainingSize = resolvedPathSize - rootLength - 1;// - 1 for null terminator - azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN, path, remainingSize); - rootedPathBuffer[resolvedPathSize - 1] = '\0'; + AZ_Error("FileIO", false, "Prepending the %.*s alias to the input path results in a path longer than the" + " AZ::IO::MaxPathLength + the alias size of %zu. The size of the potential failed path is %zu", + AZ_STRING_ARG(productAssetAlias), rootedPathBuffer.capacity(), requiredSize) } else { - azstrncpy(rootedPathBuffer + rootLength, AZ_MAX_PATH_LEN - rootLength, path, pathLen + 1); + rootedPathBuffer = RootedPathString::format("%.*s/%s", AZ_STRING_ARG(productAssetAlias), path); } } else { - ConvertToAbsolutePath(path, rootedPathBuffer, AZ_MAX_PATH_LEN); + if (ConvertToAbsolutePath(path, rootedPathBuffer.data(), rootedPathBuffer.capacity())) + { + // Recalculate the internal string length + rootedPathBuffer.resize_no_construct(AZStd::char_traits::length(rootedPathBuffer.data())); + } } - rootedPath = rootedPathBuffer; + rootedPath = rootedPathBuffer.c_str(); } if (ResolveAliases(rootedPath, resolvedPath, resolvedPathSize)) @@ -561,11 +566,57 @@ namespace AZ const char* LocalFileIO::GetAlias(const char* key) const { - const auto it = m_aliases.find(key); - if (it != m_aliases.end()) + if (const auto it = m_aliases.find(key); it != m_aliases.end()) { return it->second.c_str(); } + else if (const auto deprecatedIt = m_deprecatedAliases.find(key); + deprecatedIt != m_deprecatedAliases.end()) + { + AZ_Error("FileIO", false, R"(Alias "%s" is deprecated. Please use alias "%s" instead)", + key, deprecatedIt->second.c_str()); + AZStd::string_view aliasValue = deprecatedIt->second; + // Contains the list of aliases resolved so far + // If max_size is hit, than an error is logged and nullptr is returned + using VisitedAliasSet = AZStd::fixed_unordered_set; + VisitedAliasSet visitedAliasSet; + while (aliasValue.starts_with("@")) + { + if (visitedAliasSet.contains(aliasValue)) + { + AZ_Error("FileIO", false, "Cycle found with for alias %.*s when trying to resolve deprecated alias %s", + AZ_STRING_ARG(aliasValue), key); + return nullptr; + } + + if(visitedAliasSet.size() == visitedAliasSet.max_size()) + { + AZ_Error("FileIO", false, "Unable to resolve path to deprecated alias %s within %zu steps", + key, visitedAliasSet.max_size()); + return nullptr; + } + + // Add the current alias value to the visited set + visitedAliasSet.emplace(aliasValue); + + // Check if the alias value corresponds to another alias + if (auto resolvedIter = m_aliases.find(aliasValue); resolvedIter != m_aliases.end()) + { + aliasValue = resolvedIter->second; + } + else if (resolvedIter = m_deprecatedAliases.find(aliasValue); + resolvedIter != m_deprecatedAliases.end()) + { + aliasValue = resolvedIter->second; + } + else + { + return nullptr; + } + } + + return aliasValue.data(); + } return nullptr; } @@ -574,6 +625,11 @@ namespace AZ m_aliases.erase(key); } + void LocalFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + m_deprecatedAliases[oldAlias] = newAlias; + } + AZStd::optional LocalFileIO::ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const { size_t longestMatch = 0; @@ -675,7 +731,9 @@ namespace AZ : string_view_pair{}; size_t requiredResolvedPathSize = pathView.size() - aliasKey.size() + aliasValue.size() + 1; - AZ_Assert(path != resolvedPath && resolvedPathSize >= requiredResolvedPathSize, "Resolved path is incorrect"); + AZ_Assert(path != resolvedPath, "ResolveAliases does not support inplace update of the path"); + AZ_Assert(resolvedPathSize >= requiredResolvedPathSize, "Resolved path size %llu not large enough. It needs to be %zu", + resolvedPathSize, requiredResolvedPathSize); // we assert above, but we also need to properly handle the case when the resolvedPath buffer size // is too small to copy the source into. if (path == resolvedPath || (resolvedPathSize < requiredResolvedPathSize)) @@ -699,13 +757,9 @@ namespace AZ resolvedPath[resolvedPathLen] = '\0'; // If the path started with one of the "asset cache" path aliases, lowercase the path - const char* assetAliasPath = GetAlias("@assets@"); - const char* rootAliasPath = GetAlias("@root@"); - const char* projectPlatformCacheAliasPath = GetAlias("@projectplatformcache@"); + const char* projectPlatformCacheAliasPath = GetAlias("@products@"); - const bool lowercasePath = (assetAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, assetAliasPath)) || - (rootAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, rootAliasPath)) || - (projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath)); + const bool lowercasePath = projectPlatformCacheAliasPath != nullptr && AZ::StringFunc::StartsWith(resolvedPath, projectPlatformCacheAliasPath); if (lowercasePath) { @@ -822,5 +876,10 @@ namespace AZ return pathStr + "/"; } + + bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const + { + return AZ::Utils::ConvertToAbsolutePath(path, absolutePath, maxLength); + } } // namespace IO } // namespace AZ diff --git a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h index a9db55b320..a5ee1519a2 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/IO/LocalFileIO.h @@ -61,6 +61,8 @@ namespace AZ void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; const char* GetAlias(const char* alias) const override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; + AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; @@ -71,7 +73,7 @@ namespace AZ bool GetFilename(HandleType fileHandle, char* filename, AZ::u64 filenameSize) const override; bool ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const; - + private: SystemFile* GetFilePointerFromHandle(HandleType fileHandle); @@ -79,7 +81,6 @@ namespace AZ AZStd::optional ConvertToAliasBuffer(char* outBuffer, AZ::u64 outBufferLength, AZStd::string_view inBuffer) const; bool ResolveAliases(const char* path, char* resolvedPath, AZ::u64 resolvedPathSize) const; - bool IsAbsolutePath(const char* path) const; bool LowerIfBeginsWith(char* inOutBuffer, AZ::u64 bufferLen, const char* alias) const; @@ -91,6 +92,7 @@ namespace AZ AZStd::atomic m_nextHandle; AZStd::unordered_map m_openFiles; AZStd::unordered_map m_aliases; + AZStd::unordered_map m_deprecatedAliases; void CheckInvalidWrite(const char* path); }; diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp index 041e5baf4a..9e05cd5cb9 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp +++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.cpp @@ -49,14 +49,14 @@ namespace AZ s_IOLog.append(m_name); s_IOLog.append("\r\n"); } - + void Append(const char* line) { s_IOLog.append(AZStd::string::format("%u ", m_fileOperation)); s_IOLog.append(line); s_IOLog.append("\r\n"); } - + ~LogCall() { s_IOLog.append(AZStd::string::format("%u End ", m_fileOperation)); @@ -251,7 +251,7 @@ namespace AZ REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size request failed. return Error", filePath).c_str()); return ResultCode::Error; } - + size = response.m_size; REMOTEFILE_LOG_APPEND(AZStd::string::format("NetworkFileIO::Size(filePath=%s) size=%u. return Success", filePath, size).c_str()); return ResultCode::Success; @@ -793,6 +793,12 @@ namespace AZ REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ClearAlias(alias=%s)", alias?alias:"nullptr").c_str()); } + void NetworkFileIO::SetDeprecatedAlias([[maybe_unused]] AZStd::string_view oldAlias, [[maybe_unused]] AZStd::string_view newAlias) + { + REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::SetDeprecatedAlias(oldAlias=%.*s, newAlias=%.*s)", + AZ_STRING_ARG(oldAlias), AZ_STRING_ARG(newAlias)).c_str()); + } + AZStd::optional NetworkFileIO::ConvertToAlias(char* inOutBuffer, [[maybe_unused]] AZ::u64 bufferLength) const { REMOTEFILE_LOG_CALL(AZStd::string::format("NetworkFileIO()::ConvertToAlias(inOutBuffer=%s, bufferLength=%u)", inOutBuffer?inOutBuffer:"nullptr", bufferLength).c_str()); @@ -927,7 +933,7 @@ namespace AZ { m_cacheLookaheadPos = filePosition - CacheStartFilePosition(); } - + void RemoteFileCache::SyncCheck() { #ifdef REMOTEFILEIO_SYNC_CHECK @@ -955,7 +961,7 @@ namespace AZ AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle); REMOTEFILE_LOG_APPEND(AZStd::string::format("RemoteFileCache::SyncCheck(m_fileHandle=%u) tell request failed.", m_fileHandle).c_str()); } - + if (responce.m_offset != m_filePosition) { AZ_TracePrintf(RemoteFileCacheChannel, "RemoteFileCache::SyncCheck(m_fileHandle=%u) failed!!! m_filePosition=%u tell=%u", m_fileHandle, m_filePosition, responce.m_offset); @@ -1028,7 +1034,7 @@ namespace AZ { REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Close(fileHandle=%u)", fileHandle).c_str()); Result returnValue = NetworkFileIO::Close(fileHandle); - + if (returnValue == ResultCode::Success) { AZStd::lock_guard lock(m_remoteFileCacheGuard); @@ -1160,7 +1166,7 @@ namespace AZ REMOTEFILE_LOG_CALL(AZStd::string::format("RemoteFileIO()::Read(fileHandle=%u, buffer=OUT, size=%u, failOnFewerThanSizeBytesRead=%s, bytesRead=OUT)", fileHandle, size, failOnFewerThanSizeBytesRead ? "True" : "False").c_str()); AZStd::lock_guard lock(m_remoteFileCacheGuard); RemoteFileCache& cache = GetCache(fileHandle); - + AZ::u64 remainingBytesToRead = size; AZ::u64 bytesReadFromCache = 0; AZ::u64 remainingBytesInCache = cache.RemainingBytes(); @@ -1263,7 +1269,7 @@ namespace AZ RemoteFileCache& cache = GetCache(fileHandle); if (cache.m_cacheLookaheadBuffer.size() && cache.RemainingBytes()) { - // find out where we are + // find out where we are AZ::u64 seekPosition = cache.CacheFilePosition(); // note, seeks are predicted, and do not ask for a response. @@ -1361,6 +1367,14 @@ namespace AZ } } + void RemoteFileIO::SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) + { + if (m_excludedFileIO) + { + m_excludedFileIO->SetDeprecatedAlias(oldAlias, newAlias); + } + } + AZStd::optional RemoteFileIO::ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const { return m_excludedFileIO ? m_excludedFileIO->ConvertToAlias(inOutBuffer, bufferLength) : strlen(inOutBuffer); diff --git a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h index d91e59bebc..77e91e1978 100644 --- a/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h +++ b/Code/Framework/AzFramework/AzFramework/IO/RemoteFileIO.h @@ -102,6 +102,7 @@ namespace AZ Result FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) override; void SetAlias(const char* alias, const char* path) override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; @@ -194,6 +195,7 @@ namespace AZ void SetAlias(const char* alias, const char* path) override; const char* GetAlias(const char* alias) const override; void ClearAlias(const char* alias) override; + void SetDeprecatedAlias(AZStd::string_view oldAlias, AZStd::string_view newAlias) override; AZStd::optional ConvertToAlias(char* inOutBuffer, AZ::u64 bufferLength) const override; bool ConvertToAlias(AZ::IO::FixedMaxPath& convertedPath, const AZ::IO::PathView& path) const override; using FileIOBase::ConvertToAlias; diff --git a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp index b454755cd4..bd5ba39d76 100644 --- a/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp +++ b/Code/Framework/AzFramework/Platform/Android/AzFramework/IO/LocalFileIO_Android.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include @@ -42,10 +41,10 @@ namespace AZ { Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { - char resolvedSourcePath[AZ_MAX_PATH_LEN]; - char resolvedDestPath[AZ_MAX_PATH_LEN]; - ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN); - ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN); + char resolvedSourcePath[AZ::IO::MaxPathLength]; + char resolvedDestPath[AZ::IO::MaxPathLength]; + ResolvePath(sourceFilePath, resolvedSourcePath, AZ::IO::MaxPathLength); + ResolvePath(destinationFilePath, resolvedDestPath, AZ::IO::MaxPathLength); if (AZ::Android::Utils::IsApkPath(sourceFilePath) || AZ::Android::Utils::IsApkPath(destinationFilePath)) { @@ -77,18 +76,17 @@ namespace AZ { ANDROID_IO_PROFILE_SECTION_ARGS("FindFiles:%s", filePath); - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength]; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); AZStd::string pathWithoutSlash = RemoveTrailingSlash(resolvedPath); bool isInAPK = AZ::Android::Utils::IsApkPath(pathWithoutSlash.c_str()); + AZ::IO::FixedMaxPath tempBuffer; if (isInAPK) { AZ::IO::FixedMaxPath strippedPath = AZ::Android::Utils::StripApkPrefix(pathWithoutSlash.c_str()); - char tempBuffer[AZ_MAX_PATH_LEN] = {0}; - AZ::Android::APKFileHandler::ParseDirectory(strippedPath.c_str(), [&](const char* name) { AZStd::string_view filenameView = name; @@ -98,10 +96,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += name; // if aliased, de-alias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { return false; } @@ -115,10 +112,6 @@ namespace AZ if (dir != nullptr) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to - // use a static buffer here. - char tempBuffer[AZ_MAX_PATH_LEN]; - // clear the errno state so we can distinguish between errors and end of stream errno = 0; struct dirent* entry = readdir(dir); @@ -133,10 +126,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += entry->d_name; // if aliased, de-alias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { break; } @@ -163,8 +155,8 @@ namespace AZ Result LocalFileIO::CreatePath(const char* filePath) { - char resolvedPath[AZ_MAX_PATH_LEN]; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength]; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); if (AZ::Android::Utils::IsApkPath(resolvedPath)) { @@ -201,33 +193,5 @@ namespace AZ mkdir(pathBuffer.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - return path && path[0] == '/'; - } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - if (AZ::Android::Utils::IsApkPath(path)) - { - azstrncpy(absolutePath, maxLength, path, maxLength); - return true; - } - AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN"); - if (!IsAbsolutePath(path)) - { - // note that realpath fails if the path does not exist and actually changes the return value - // to be the actual place that FAILED, which we don't want. - // if we fail, we'd prefer to fall through and at least use the original path. - const char* result = realpath(path, absolutePath); - if (result) - { - return true; - } - } - azstrcpy(absolutePath, maxLength, path); - return IsAbsolutePath(absolutePath); - } } // namespace IO }//namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp index 844464681a..cbcf4a3f56 100644 --- a/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp +++ b/Code/Framework/AzFramework/Platform/Common/UnixLike/AzFramework/IO/LocalFileIO_UnixLike.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include namespace AZ @@ -19,11 +19,11 @@ namespace AZ { Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { - char resolvedSourceFilePath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ_MAX_PATH_LEN); + char resolvedSourceFilePath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(sourceFilePath, resolvedSourceFilePath, AZ::IO::MaxPathLength); - char resolvedDestinationFilePath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ_MAX_PATH_LEN); + char resolvedDestinationFilePath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(destinationFilePath, resolvedDestinationFilePath, AZ::IO::MaxPathLength); // Use standard C++ method of file copy. { @@ -45,17 +45,15 @@ namespace AZ Result LocalFileIO::FindFiles(const char* filePath, const char* filter, FindFilesCallbackType callback) { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); AZStd::string withoutSlash = RemoveTrailingSlash(resolvedPath); DIR* dir = opendir(withoutSlash.c_str()); if (dir != nullptr) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to - // use a static buffer here. - char tempBuffer[AZ_MAX_PATH_LEN]; + AZ::IO::FixedMaxPath tempBuffer; errno = 0; struct dirent* entry = readdir(dir); @@ -70,10 +68,9 @@ namespace AZ AZStd::string foundFilePath = CheckForTrailingSlash(resolvedPath); foundFilePath += entry->d_name; // if aliased, dealias! - azstrcpy(tempBuffer, AZ_MAX_PATH_LEN, foundFilePath.c_str()); - ConvertToAlias(tempBuffer, AZ_MAX_PATH_LEN); + ConvertToAlias(tempBuffer, AZ::IO::PathView{ foundFilePath }); - if (!callback(tempBuffer)) + if (!callback(tempBuffer.c_str())) { break; } @@ -92,8 +89,8 @@ namespace AZ Result LocalFileIO::CreatePath(const char* filePath) { - char resolvedPath[AZ_MAX_PATH_LEN] = {0}; - ResolvePath(filePath, resolvedPath, AZ_MAX_PATH_LEN); + char resolvedPath[AZ::IO::MaxPathLength] = {0}; + ResolvePath(filePath, resolvedPath, AZ::IO::MaxPathLength); // create all paths up to that directory. // its not an error if the path exists. @@ -125,28 +122,5 @@ namespace AZ mkdir(buf.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); return IsDirectory(resolvedPath) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - return path && path[0] == '/'; - } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - AZ_Assert(maxLength >= AZ_MAX_PATH_LEN, "Path length is larger than AZ_MAX_PATH_LEN"); - if (!IsAbsolutePath(path)) - { - // note that realpath fails if the path does not exist and actually changes the return value - // to be the actual place that FAILED, which we don't want. - // if we fail, we'd prefer to fall through and at least use the original path. - const char* result = realpath(path, absolutePath); - if (result) - { - return true; - } - } - azstrcpy(absolutePath, maxLength, path); - return IsAbsolutePath(absolutePath); - } } // namespace IO } // namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp index 64787d4951..7ff8a96c09 100644 --- a/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp +++ b/Code/Framework/AzFramework/Platform/Common/WinAPI/AzFramework/IO/LocalFileIO_WinAPI.cpp @@ -47,7 +47,7 @@ namespace AZ if (hFind != INVALID_HANDLE_VALUE) { - // because the absolute path might actually be SHORTER than the alias ("c:/r/dev" -> "@devroot@"), we need to + // because the absolute path might actually be SHORTER than the alias ("D:/o3de" -> "@engroot@"), we need to // use a static buffer here. char tempBuffer[AZ_MAX_PATH_LEN]; do @@ -133,36 +133,5 @@ namespace AZ return SystemFile::CreateDir(buf.c_str()) ? ResultCode::Success : ResultCode::Error; } - - bool LocalFileIO::ConvertToAbsolutePath(const char* path, char* absolutePath, AZ::u64 maxLength) const - { - char* result = _fullpath(absolutePath, path, maxLength); - size_t len = ::strlen(absolutePath); - if (len > 0) - { - // strip trailing slash - if (absolutePath[len - 1] == '/' || absolutePath[len - 1] == '\\') - { - absolutePath[len - 1] = 0; - } - - // For some reason, at least on windows, _fullpath returns a lowercase drive letter even though other systems like Qt, use upper case. - if (len > 2) - { - if (absolutePath[1] == ':') - { - absolutePath[0] = (char)toupper(absolutePath[0]); - } - } - } - return result != nullptr; - } - - bool LocalFileIO::IsAbsolutePath(const char* path) const - { - char drive[16] = { 0 }; - _splitpath_s(path, drive, 16, nullptr, 0, nullptr, 0, nullptr, 0); - return strlen(drive) > 0; - } } // namespace IO }//namespace AZ diff --git a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp index b8f62a2b77..173ec61263 100644 --- a/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp +++ b/Code/Framework/AzFramework/Platform/Windows/AzFramework/IO/LocalFileIO_Windows.cpp @@ -7,26 +7,24 @@ */ #include #include +#include +#include #include -namespace AZ +namespace AZ::IO { - namespace IO + Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) { + AZ::IO::FixedMaxPath resolvedSourcePath; + ResolvePath(resolvedSourcePath, sourceFilePath); + AZ::IO::FixedMaxPath resolvedDestPath; + ResolvePath(resolvedDestPath, destinationFilePath); - Result LocalFileIO::Copy(const char* sourceFilePath, const char* destinationFilePath) - { - char resolvedSourcePath[AZ_MAX_PATH_LEN]; - ResolvePath(sourceFilePath, resolvedSourcePath, AZ_MAX_PATH_LEN); - char resolvedDestPath[AZ_MAX_PATH_LEN]; - ResolvePath(destinationFilePath, resolvedDestPath, AZ_MAX_PATH_LEN); + AZStd::fixed_wstring resolvedSourcePathW; + AZStd::fixed_wstring resolvedDestPathW; + AZStd::to_wstring(resolvedSourcePathW, resolvedSourcePath.Native()); + AZStd::to_wstring(resolvedDestPathW, resolvedDestPath.Native()); - if (::CopyFileA(resolvedSourcePath, resolvedDestPath, false) == 0) - { - return ResultCode::Error; - } - - return ResultCode::Success; - } - } // namespace IO -}//namespace AZ + return ::CopyFileW(resolvedSourcePathW.c_str(), resolvedDestPathW.c_str(), false) != 0 ? ResultCode::Success : ResultCode::Error; + } +}//namespace AZ::IO diff --git a/Code/Framework/AzFramework/Tests/Application.cpp b/Code/Framework/AzFramework/Tests/Application.cpp index 313b5e3b56..9ad072cba5 100644 --- a/Code/Framework/AzFramework/Tests/Application.cpp +++ b/Code/Framework/AzFramework/Tests/Application.cpp @@ -26,7 +26,7 @@ protected: } if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { - fileIoBase->SetAlias("@assets@", m_tempDirectory.GetDirectory()); + fileIoBase->SetAlias("@products@", m_tempDirectory.GetDirectory()); } } diff --git a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp index 8e88ccfc39..37babb49a8 100644 --- a/Code/Framework/AzFramework/Tests/ArchiveTests.cpp +++ b/Code/Framework/AzFramework/Tests/ArchiveTests.cpp @@ -50,7 +50,7 @@ namespace UnitTest m_application->Start({}); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); } @@ -262,7 +262,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders.c_str())); - EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders.c_str())); + EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders.c_str())); EXPECT_TRUE(archive->IsFileExist(fileInArchiveFile)); } @@ -353,7 +353,7 @@ namespace UnitTest // and be able to IMMEDIATELY // * read the file in the subfolder // * enumerate the folders (including that subfolder) even though they are 'virtual', not real folders on physical media - // * all of the above even though the mount point for the archive is @assets@ wheras the physical pack lives in @usercache@ + // * all of the above even though the mount point for the archive is @products@ wheras the physical pack lives in @usercache@ // finally, we're going to repeat the above test but with files mounted with subfolders // so for example, the pack will contain levelinfo.xml at the root of it // but it will be mounted at a subfolder (levels/mylevel). @@ -388,7 +388,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders)); - EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders)); + EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders)); // ---- BARRAGE OF TESTS EXPECT_TRUE(archive->IsFileExist("levels\\mylevel\\levelinfo.xml")); EXPECT_TRUE(archive->IsFileExist("levels//mylevel//levelinfo.xml")); @@ -484,7 +484,7 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(testArchivePath_withMountPoint)); - EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2", testArchivePath_withMountPoint)); + EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2", testArchivePath_withMountPoint)); // ---- BARRAGE OF TESTS EXPECT_TRUE(archive->IsFileExist("uniquename\\mylevel2\\levelinfo.xml")); @@ -543,7 +543,7 @@ namespace UnitTest archive->ClosePack(testArchivePath_withMountPoint); // --- test to make sure that when you iterate only the first component is found, so bury it deep and ask for the root - EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint)); + EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint)); found_mylevel_folder = false; handle = archive->FindFirst("uniquename\\*"); @@ -574,9 +574,9 @@ namespace UnitTest found_mylevel_folder = false; // now make sure no red herrings appear - // for example, if a file is mounted at "@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4" - // and the file "@assets@\\somethingelse" is requested it should not be found - // in addition if the file "@assets@\\uniquename\\mylevel3" is requested it should not be found + // for example, if a file is mounted at "@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4" + // and the file "@products@\\somethingelse" is requested it should not be found + // in addition if the file "@products@\\uniquename\\mylevel3" is requested it should not be found handle = archive->FindFirst("somethingelse\\*"); EXPECT_FALSE(static_cast(handle)); @@ -610,7 +610,7 @@ namespace UnitTest cpfio.Remove(genericArchiveFileName); // create the asset alias directory - cpfio.CreatePath("@assets@"); + cpfio.CreatePath("@products@"); // create generic file @@ -635,11 +635,11 @@ namespace UnitTest pArchive.reset(); EXPECT_TRUE(IsPackValid(genericArchiveFileName)); - EXPECT_TRUE(archive->OpenPack("@assets@", genericArchiveFileName)); + EXPECT_TRUE(archive->OpenPack("@products@", genericArchiveFileName)); // ---- BARRAGE OF TESTS EXPECT_TRUE(cpfio.Exists("testfile.xml")); - EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); // this should be hte same file + EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); // this should be hte same file EXPECT_TRUE(!cpfio.Exists("@log@/testfile.xml")); EXPECT_TRUE(!cpfio.Exists("@usercache@/testfile.xml")); EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml")); @@ -685,9 +685,9 @@ namespace UnitTest EXPECT_EQ(ResultCode::Success, cpfio.Close(normalFileHandle)); EXPECT_TRUE(!cpfio.IsDirectory("testfile.xml")); - EXPECT_TRUE(cpfio.IsDirectory("@assets@")); + EXPECT_TRUE(cpfio.IsDirectory("@products@")); EXPECT_TRUE(cpfio.IsReadOnly("testfile.xml")); - EXPECT_TRUE(cpfio.IsReadOnly("@assets@/testfile.xml")); + EXPECT_TRUE(cpfio.IsReadOnly("@products@/testfile.xml")); EXPECT_TRUE(!cpfio.IsReadOnly("@log@/unittesttemp/realfileforunittest.xml")); @@ -714,10 +714,10 @@ namespace UnitTest // find files test. AZ::IO::FixedMaxPath resolvedTestFilePath; - EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@assets@/testfile.xml"))); + EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@products@/testfile.xml"))); bool foundIt = false; // note that this file exists only in the archive. - cpfio.FindFiles("@assets@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName) + cpfio.FindFiles("@products@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName) { AZ::IO::FixedMaxPath resolvedFoundPath; EXPECT_TRUE(cpfio.ResolvePath(resolvedFoundPath, AZ::IO::PathView(foundName))); @@ -734,10 +734,10 @@ namespace UnitTest // The following test is disabled because it will trigger an AZ_ERROR which will affect the outcome of this entire test - // EXPECT_NE(ResultCode::Success, cpfio.Remove("@assets@/testfile.xml")); // may not delete archive files + // EXPECT_NE(ResultCode::Success, cpfio.Remove("@products@/testfile.xml")); // may not delete archive files // make sure it works with and without alias: - EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); + EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); EXPECT_TRUE(cpfio.Exists("testfile.xml")); EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml")); @@ -788,22 +788,22 @@ namespace UnitTest EXPECT_TRUE(archive->ClosePack(realNameBuf)); // change its actual location: - EXPECT_TRUE(archive->OpenPack("@assets@", realNameBuf)); - EXPECT_TRUE(archive->IsFileExist("@assets@/foundit.dat")); + EXPECT_TRUE(archive->OpenPack("@products@", realNameBuf)); + EXPECT_TRUE(archive->IsFileExist("@products@/foundit.dat")); EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous location! - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); EXPECT_TRUE(archive->ClosePack(realNameBuf)); // try sub-folders - EXPECT_TRUE(archive->OpenPack("@assets@/mystuff", realNameBuf)); - EXPECT_TRUE(archive->IsFileExist("@assets@/mystuff/foundit.dat")); - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat")); // do not find it in the previous locations! + EXPECT_TRUE(archive->OpenPack("@products@/mystuff", realNameBuf)); + EXPECT_TRUE(archive->IsFileExist("@products@/mystuff/foundit.dat")); + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat")); // do not find it in the previous locations! EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous locations! - EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); - EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); // non-existent file - EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/notfoundit.dat")); // non-existent file + EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk)); + EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); // non-existent file + EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/notfoundit.dat")); // non-existent file EXPECT_TRUE(archive->ClosePack(realNameBuf)); } @@ -861,7 +861,7 @@ namespace UnitTest AZ::IO::FileIOBase* ioBase = AZ::IO::FileIOBase::GetInstance(); ASSERT_NE(nullptr, ioBase); - const char* assetsPath = ioBase->GetAlias("@assets@"); + const char* assetsPath = ioBase->GetAlias("@products@"); ASSERT_NE(nullptr, assetsPath); auto stringToAdd = AZ::IO::Path(assetsPath) / "textures" / "test.dds"; @@ -872,7 +872,7 @@ namespace UnitTest // it normalizes the string, so the slashes flip and everything is lowercased. AZ::IO::FixedMaxPath resolvedAddedPath; AZ::IO::FixedMaxPath resolvedResourcePath; - EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@assets@/textures/test.dds")); + EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@products@/textures/test.dds")); EXPECT_TRUE(ioBase->ReplaceAlias(resolvedResourcePath, reslist->GetFirst())); EXPECT_EQ(resolvedAddedPath, resolvedResourcePath); reslist->Clear(); diff --git a/Code/Framework/AzFramework/Tests/FileIO.cpp b/Code/Framework/AzFramework/Tests/FileIO.cpp index dbee109978..ca7c46b66c 100644 --- a/Code/Framework/AzFramework/Tests/FileIO.cpp +++ b/Code/Framework/AzFramework/Tests/FileIO.cpp @@ -802,6 +802,51 @@ namespace UnitTest AZ_TEST_STOP_TRACE_SUPPRESSION(1); } + TEST_F(AliasTest, GetAlias_LogsError_WhenAccessingDeprecatedAlias_Succeeds) + { + AZ::IO::LocalFileIO local; + + AZ::IO::FixedMaxPathString aliasFolder; + EXPECT_TRUE(local.ConvertToAbsolutePath("/temp", aliasFolder.data(), aliasFolder.capacity())); + aliasFolder.resize_no_construct(AZStd::char_traits::length(aliasFolder.data())); + + local.SetAlias("@test@", aliasFolder.c_str()); + local.SetDeprecatedAlias("@deprecated@", "@test@"); + local.SetDeprecatedAlias("@deprecatednonexistent@", "@nonexistent@"); + local.SetDeprecatedAlias("@deprecatedsecond@", "@deprecated@"); + local.SetDeprecatedAlias("@deprecatednonaliaspath@", aliasFolder); + + AZ_TEST_START_TRACE_SUPPRESSION; + const char* testAlias = local.GetAlias("@test@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(0); + + // Validate that accessing Deprecated Alias results in AZ_Error + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecated@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatednonexistent@"); + EXPECT_EQ(nullptr, testAlias); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatedsecond@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + + AZ_TEST_START_TRACE_SUPPRESSION; + testAlias = local.GetAlias("@deprecatednonaliaspath@"); + ASSERT_NE(nullptr, testAlias); + EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias)); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + } + class SmartMoveTests : public FolderFixture { diff --git a/Code/Framework/AzFramework/Tests/FileTagTests.cpp b/Code/Framework/AzFramework/Tests/FileTagTests.cpp index 134e7aad6d..2b09a5638c 100644 --- a/Code/Framework/AzFramework/Tests/FileTagTests.cpp +++ b/Code/Framework/AzFramework/Tests/FileTagTests.cpp @@ -27,7 +27,7 @@ namespace UnitTest const char DummyFile[] = "dummy.txt"; const char AnotherDummyFile[] = "Foo/Dummy.txt"; - + const char DummyPattern[] = R"(^(.+)_([a-z]+)\..+$)"; const char MatchingPatternFile[] = "Foo/dummy_abc.txt"; const char NonMatchingPatternFile[] = "Foo/dummy_a8c.txt"; @@ -75,7 +75,7 @@ namespace UnitTest : public AllocatorsFixture { public: - + void SetUp() override { AllocatorsFixture::SetUp(); @@ -89,7 +89,7 @@ namespace UnitTest const char* testAssetRoot = m_tempDirectory.GetDirectory(); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -98,7 +98,7 @@ namespace UnitTest AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(m_data->m_localFileIO.get()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", testAssetRoot); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", testAssetRoot); m_data->m_excludeFileQueryManager = AZStd::make_unique(FileTagType::Exclude); m_data->m_includeFileQueryManager = AZStd::make_unique(FileTagType::Include); @@ -114,7 +114,7 @@ namespace UnitTest AZStd::vector includedWildcardTags = { DummyFileTags[DummyFileTagIndex::GIdx] }; EXPECT_TRUE(m_data->m_fileTagManager.AddFilePatternTags(DummyWildcard, FilePatternType::Wildcard, FileTagType::Include, includedWildcardTags).IsSuccess()); - + AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", ExcludeFile, FileTagAsset::Extension()).c_str(), m_data->m_excludeFile); AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", IncludeFile, FileTagAsset::Extension()).c_str(), m_data->m_includeFile); @@ -184,7 +184,7 @@ namespace UnitTest TEST_F(FileTagTest, FileTags_QueryByAbsoluteFilePath_Valid) { AZStd::string absoluteDummyFilePath = DummyFile; - EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath)); + EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath)); AZStd::set tags = m_data->m_excludeFileQueryManager->GetTags(absoluteDummyFilePath); @@ -196,7 +196,7 @@ namespace UnitTest ASSERT_EQ(tags.size(), 0); AZStd::string absoluteAnotherDummyFilePath = AnotherDummyFile; - EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath)); + EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath)); tags = m_data->m_includeFileQueryManager->GetTags(absoluteAnotherDummyFilePath); ASSERT_EQ(tags.size(), 2); @@ -213,7 +213,7 @@ namespace UnitTest // Set the customized alias AZStd::string customizedAliasFilePath; - const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Join(assetsAlias, "foo", customizedAliasFilePath); AZ::IO::FileIOBase::GetInstance()->SetAlias("@customizedalias@", customizedAliasFilePath.c_str()); @@ -305,7 +305,7 @@ namespace UnitTest m_data->m_excludeFileQueryManager->ClearData(); EXPECT_TRUE(m_data->m_excludeFileQueryManager->Load(m_data->m_excludeFile)); - + AZStd::set outputTags = m_data->m_excludeFileQueryManager->GetTags(MatchingWildcardFile); EXPECT_EQ(outputTags.size(), 2); diff --git a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp index 169834249f..665c06b571 100644 --- a/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp +++ b/Code/Framework/AzFramework/Tests/GenAppDescriptors.cpp @@ -6,81 +6,19 @@ * */ +#include #include #include #include -#include -#include +#include +#include namespace UnitTest { - using namespace AZ; - - class FileIOBaseRAII - { - public: - FileIOBaseRAII(AZ::IO::FileIOBase& fileIO) - : m_prevFileIO(AZ::IO::FileIOBase::GetInstance()) - { - AZ::IO::FileIOBase::SetInstance(&fileIO); - } - - ~FileIOBaseRAII() - { - AZ::IO::FileIOBase::SetInstance(m_prevFileIO); - } - private: - AZ::IO::FileIOBase* m_prevFileIO; - }; - class GenAppDescriptors : public AllocatorsTestFixture { public: - - void run() - { - struct Config - { - const char* platformName; - const char* configName; - const char* libSuffix; - }; - - ComponentApplication app; - - SerializeContext serializeContext; - AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app); - AZ::Entity::Reflect(&serializeContext); - DynamicModuleDescriptor::Reflect(&serializeContext); - - AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity"); - - const Config config = {"Platform", "Config", "libSuffix"}; - - AZ::ComponentApplication::Descriptor descriptor; - - if (config.libSuffix && config.libSuffix[0]) - { - FakePopulateModules(descriptor, config.libSuffix); - } - - const AZStd::string filename = AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName); - - IO::FileIOStream stream(filename.c_str(), IO::OpenMode::ModeWrite); - ObjectStream* objStream = ObjectStream::Create(&stream, serializeContext, ObjectStream::ST_XML); - bool descWriteOk = objStream->WriteClass(&descriptor); - (void)descWriteOk; - AZ_Warning("ComponentApplication", descWriteOk, "Failed to write memory descriptor to application descriptor file %s!", filename.c_str()); - bool entityWriteOk = objStream->WriteClass(&dummySystemEntity); - (void)entityWriteOk; - AZ_Warning("ComponentApplication", entityWriteOk, "Failed to write system entity to application descriptor file %s!", filename.c_str()); - bool flushOk = objStream->Finalize(); - (void)flushOk; - AZ_Warning("ComponentApplication", flushOk, "Failed finalizing application descriptor file %s!", filename.c_str()); - - } - void FakePopulateModules(AZ::ComponentApplication::Descriptor& desc, const char* libSuffix) { static const char* modules[] = @@ -100,10 +38,44 @@ namespace UnitTest } }; - TEST_F(GenAppDescriptors, Test) + TEST_F(GenAppDescriptors, WriteDescriptor_ToXML_Succeeds) { - AZ::IO::LocalFileIO fileIO; - FileIOBaseRAII restoreFileIOScope(fileIO); - run(); + struct Config + { + const char* platformName; + const char* configName; + const char* libSuffix; + }; + + AzFramework::Application app; + + AZ::SerializeContext serializeContext; + AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app); + AZ::Entity::Reflect(&serializeContext); + AZ::DynamicModuleDescriptor::Reflect(&serializeContext); + + AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity"); + + const Config config = {"Platform", "Config", "libSuffix"}; + + AZ::ComponentApplication::Descriptor descriptor; + + if (config.libSuffix && config.libSuffix[0]) + { + FakePopulateModules(descriptor, config.libSuffix); + } + + AZ::Test::ScopedAutoTempDirectory tempDirectory; + const auto filename = AZ::IO::Path(tempDirectory.GetDirectory()) / + AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName); + + AZ::IO::FileIOStream stream(filename.c_str(), AZ::IO::OpenMode::ModeWrite); + auto objStream = AZ::ObjectStream::Create(&stream, serializeContext, AZ::ObjectStream::ST_XML); + const bool descWriteOk = objStream->WriteClass(&descriptor); + EXPECT_TRUE(descWriteOk) << "Failed to write memory descriptor to application descriptor file " << filename.c_str() << "!"; + const bool entityWriteOk = objStream->WriteClass(&dummySystemEntity); + EXPECT_TRUE(entityWriteOk) << "Failed to write system entity to application descriptor file " << filename.c_str() << "!"; + const bool flushOk = objStream->Finalize(); + EXPECT_TRUE(flushOk) << "Failed finalizing application descriptor file " << filename.c_str() << "!"; } } diff --git a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp index 424132b624..462de43262 100644 --- a/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp +++ b/Code/Framework/AzGameFramework/AzGameFramework/Application/GameApplication.cpp @@ -38,12 +38,12 @@ namespace AzGameFramework { // fall back to checking Project Cache Root. enginePakPath /= "engine.pak"; - enginePakOpened = m_archive->OpenPack("@projectproductassets@", enginePakPath.Native()); + enginePakOpened = m_archive->OpenPack("@products@", enginePakPath.Native()); } if (!enginePakOpened) { enginePakPath = AZ::IO::FixedMaxPath(AZ::Utils::GetExecutableDirectory()) / "engine.pak"; - m_archive->OpenPack("@projectproductassets@", enginePakPath.Native()); + m_archive->OpenPack("@products@", enginePakPath.Native()); } } diff --git a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp index 3fdfa042a5..9f496c3e0c 100644 --- a/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp +++ b/Code/Framework/AzNetworking/AzNetworking/Utilities/EncryptionCommon.cpp @@ -107,7 +107,7 @@ namespace AzNetworking if (AZ::IO::FileIOBase::GetInstance() != nullptr) { char buffer[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@assets@/", buffer, sizeof(buffer)); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@products@/", buffer, sizeof(buffer)); assetDir = AZStd::string(buffer); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h index eab2d5e1a0..c18ddc2f67 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorAssetSystemAPI.h @@ -47,14 +47,6 @@ namespace AzToolsFramework //! Retrieve the absolute path for the Asset Database Location virtual bool GetAbsoluteAssetDatabaseLocation(AZStd::string& /*result*/) { return false; } - - //! Retrieve the absolute folder path to the current game's source assets (the ones that go into source control) - //! This may include the current mod path, if a mod is being edited by the editor - virtual const char* GetAbsoluteDevGameFolderPath() = 0; - - //! Retrieve the absolute folder path to the current developer root ('dev'), which contains source artifacts - //! and is generally checked into source control. - virtual const char* GetAbsoluteDevRootFolderPath() = 0; /// Convert a full source path like "c:\\dev\\gamename\\blah\\test.tga" into a relative product path. /// asset paths never mention their alias and are relative to the asset cache root diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp index cc3153ed8e..86b32d4379 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.cpp @@ -354,26 +354,6 @@ namespace AzToolsFramework } } - const char* AssetSystemComponent::GetAbsoluteDevGameFolderPath() - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - if (fileIO) - { - return fileIO->GetAlias("@devassets@"); - } - return ""; - } - - const char* AssetSystemComponent::GetAbsoluteDevRootFolderPath() - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); - if (fileIO) - { - return fileIO->GetAlias("@devroot@"); - } - return ""; - } - void AssetSystemComponent::OnSystemTick() { AssetSystemBus::ExecuteQueuedEvents(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h index 4774b96be4..fcd697393c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Asset/AssetSystemComponent.h @@ -56,8 +56,6 @@ namespace AzToolsFramework ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystemRequestBus::Handler overrides bool GetAbsoluteAssetDatabaseLocation(AZStd::string& result) override; - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& outputPath) override; bool GenerateRelativeSourcePath( const AZStd::string& sourcePath, AZStd::string& outputPath, AZStd::string& watchFolder) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp index e09dd183f8..8856989911 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp @@ -137,7 +137,7 @@ namespace AzToolsFramework AssetEditorWidgetUserSettings::AssetEditorWidgetUserSettings() { char assetRoot[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", assetRoot, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", assetRoot, AZ_MAX_PATH_LEN); m_lastSavePath = assetRoot; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h index 988963eaca..3ba826804d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContext.h @@ -39,7 +39,7 @@ namespace AzToolsFramework // the TraceContextLogFormatter. // // Usage example: - // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@devassets@"); + // const char* gameFolder = m_context.pRC->GetSystemEnvironment()->pFileIO->GetAlias("@projectroot@"); // AZ_TraceContext("Game folder", gameFolder); // // for (int i=0; iSetAlias("@log@", logDirectory.c_str()); - fileIO->CreatePath("@root@"); + fileIO->CreatePath("@products@"); fileIO->CreatePath("@user@"); fileIO->CreatePath("@log@"); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp index 36f647e4c2..99d0768cf6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceRequestComponent.cpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -78,13 +79,9 @@ namespace AzToolsFramework AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(entitiesAndDescendants, &AzToolsFramework::ToolsApplicationRequestBus::Events::GatherEntitiesAndAllDescendents, AzToolsFramework::EntityIdList{ entityId }); - // Retrieve the game folder so we can use that as a root with the passed in relative path - const char* gameFolder = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameFolder, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - // Join our relative path with the game folder to get a full path to the desired asset - AZStd::string assetFullPath; - AzFramework::StringFunc::Path::Join(gameFolder, assetPath, assetFullPath); + AZ::IO::FixedMaxPath assetFullPath = AZ::Utils::GetProjectPath(); + assetFullPath /= assetPath; // Call SliceUtilities::MakeNewSlice with all user input prompts disabled bool success = AzToolsFramework::SliceUtilities::MakeNewSlice(entitiesAndDescendants, diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp index d8b5fe0a15..9d2c58a717 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Slice/SliceTransaction.cpp @@ -718,7 +718,7 @@ namespace AzToolsFramework if (!fullPathFound) { - assetFullPath = AZStd::string::format("@devassets@/%s", sliceAssetPath.c_str()); + assetFullPath = AZStd::string::format("@projectroot@/%s", sliceAssetPath.c_str()); } return Commit(assetFullPath.c_str(), preSaveCallback, postSaveCallback, sliceCommitFlags); @@ -1020,13 +1020,13 @@ namespace AzToolsFramework AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); AZ_Assert(fileIO, "File IO is not initialized."); - AZStd::string devAssetPath = fileIO->GetAlias("@devassets@"); + AZStd::string devAssetPath = fileIO->GetAlias("@projectroot@"); AZStd::string userPath = fileIO->GetAlias("@user@"); AZStd::string tempPath = fullPath; EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, devAssetPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, userPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, tempPath); - AzFramework::StringFunc::Replace(tempPath, "@devassets@", devAssetPath.c_str()); + AzFramework::StringFunc::Replace(tempPath, "@projectroot@", devAssetPath.c_str()); AzFramework::StringFunc::Replace(tempPath, devAssetPath.c_str(), userPath.c_str()); tempPath.append(".slicetemp"); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp index f58f273f11..01b1213473 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorLayerComponent.cpp @@ -378,11 +378,11 @@ namespace AzToolsFramework // If this layer is being loaded, it won't have a level save dependency yet, so clear that flag. m_mustSaveLevelWhenLayerSaves = false; QString fullPathName = levelPakFile; - if (fullPathName.contains("@devassets@")) + if (fullPathName.contains("@projectroot@")) { AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); // Resolving the path through resolvepath would normalize and lowcase it, and in this case, we don't want that. - fullPathName.replace("@devassets@", fileIO->GetAlias("@devassets@")); + fullPathName.replace("@projectroot@", fileIO->GetAlias("@projectroot@")); } QFileInfo fileNameInfo(fullPathName); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 62842e18d5..07dcd2ab20 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -315,7 +315,7 @@ namespace AzToolsFramework // temporarily null after QFileDialogs close, which we need in order to // be able to parent our message dialogs properly QWidget* activeWindow = QApplication::activeWindow(); - const AZStd::string prefabFilesPath = "@devassets@/Prefabs"; + const AZStd::string prefabFilesPath = "@projectroot@/Prefabs"; // Remove Level entity if it's part of the list diff --git a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp index 66520c804c..395e4c9049 100644 --- a/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/ArchiveTests.cpp @@ -131,13 +131,13 @@ namespace UnitTest m_app.reset(aznew ToolsTestApplication("ArchiveComponentTest")); m_app->Start(AzFramework::Application::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { - fileIoBase->SetAlias("@assets@", m_tempDir.GetDirectory()); + fileIoBase->SetAlias("@products@", m_tempDir.GetDirectory()); } } diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp index 24488f3ed3..827737f561 100644 --- a/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp +++ b/Code/Framework/AzToolsFramework/Tests/AssetSeedManager.cpp @@ -37,10 +37,10 @@ namespace // anonymous bool Search(const AzToolsFramework::AssetFileInfoList& assetList, const AZ::Data::AssetId& assetId) { - return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(), - [&](AzToolsFramework::AssetFileInfo fileInfo) - { - return fileInfo.m_assetId == assetId; + return AZStd::find_if(assetList.m_fileInfoList.begin(), assetList.m_fileInfoList.end(), + [&](AzToolsFramework::AssetFileInfo fileInfo) + { + return fileInfo.m_assetId == assetId; }); } } @@ -74,11 +74,11 @@ namespace UnitTest m_application->Start(AzFramework::Application::Descriptor()); - // By default @assets@ is setup to include the platform at the end. But this test is going to + // By default @products@ is setup to include the platform at the end. But this test is going to // loop over platforms and it will be included as part of the relative path of the file. // So the asset folder for these tests have to point to the cache project root folder, which // doesn't include the platform. - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str()); for (int idx = 0; idx < s_totalAssets; idx++) { @@ -158,17 +158,17 @@ namespace UnitTest m_assetRegistry->RegisterAssetDependency(assets[5], AZ::Data::ProductDependency(assets[6], 0)); m_assetRegistry->RegisterAssetDependency(assets[6], AZ::Data::ProductDependency(assets[7], 0)); - // asset8 -> asset6 + // asset8 -> asset6 m_assetRegistry->RegisterAssetDependency(assets[8], AZ::Data::ProductDependency(assets[6], 0)); - // asset10 -> asset11 + // asset10 -> asset11 m_assetRegistry->RegisterAssetDependency(assets[10], AZ::Data::ProductDependency(assets[11], 0)); - // asset11 -> asset10 + // asset11 -> asset10 m_assetRegistry->RegisterAssetDependency(assets[11], AZ::Data::ProductDependency(assets[10], 0)); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -203,10 +203,6 @@ namespace UnitTest const AZStd::string engroot = AZ::Test::GetEngineRootPath(); AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engroot.c_str()); - - AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); - assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); } void TearDown() override @@ -219,7 +215,7 @@ namespace UnitTest delete m_application; } - AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override + AZ::Data::AssetInfo GetAssetInfoById(const AZ::Data::AssetId& id) override { auto foundIter = m_assetRegistry->m_assetIdToInfo.find(id); if (foundIter != m_assetRegistry->m_assetIdToInfo.end()) @@ -540,7 +536,7 @@ namespace UnitTest EXPECT_TRUE(Search(assetList, assets[7])); EXPECT_TRUE(Search(assetList, assets[8])); - // Removing the android flag from the asset should still produce the same result + // Removing the android flag from the asset should still produce the same result m_assetSeedManager->RemoveSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID); assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::PC); @@ -564,7 +560,7 @@ namespace UnitTest EXPECT_TRUE(Search(assetList, assets[3])); EXPECT_TRUE(Search(assetList, assets[4])); - // Adding the android flag again to the asset + // Adding the android flag again to the asset m_assetSeedManager->AddSeedAsset(assets[8], AzFramework::PlatformFlags::Platform_ANDROID); assetList = m_assetSeedManager->GetDependencyList(AzFramework::PlatformId::ANDROID_ID); @@ -624,7 +620,7 @@ namespace UnitTest EXPECT_EQ(assetList1.m_fileInfoList[0].m_assetId, assetList2.m_fileInfoList[0].m_assetId); EXPECT_GE(assetList2.m_fileInfoList[0].m_modificationTime, assetList1.m_fileInfoList[0].m_modificationTime); // file mod time should change - + // file hash should not change for (int idx = 0; idx < 5; idx++) { @@ -680,7 +676,7 @@ namespace UnitTest m_assetSeedManager->AddSeedAsset(assets[validFileIndex], AzFramework::PlatformFlags::Platform_PC, m_assetsPath[invalidFileIndex]); const AzFramework::AssetSeedList& oldSeedList = m_assetSeedManager->GetAssetSeedList(); - + for (const auto& seedInfo : oldSeedList) { if (seedInfo.m_assetId == assets[validFileIndex]) diff --git a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h index 2678c2f57c..ba3e38ba8f 100644 --- a/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h +++ b/Code/Framework/AzToolsFramework/Tests/AssetSystemMocks.h @@ -18,8 +18,6 @@ namespace UnitTests { public: MOCK_METHOD1(GetAbsoluteAssetDatabaseLocation, bool(AZStd::string&)); - MOCK_METHOD0(GetAbsoluteDevGameFolderPath, const char* ()); - MOCK_METHOD0(GetAbsoluteDevRootFolderPath, const char* ()); MOCK_METHOD2(GetRelativeProductPathFromFullSourceOrProductPath, bool(const AZStd::string& fullPath, AZStd::string& relativeProductPath)); MOCK_METHOD3(GenerateRelativeSourcePath, bool(const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder)); diff --git a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h index 2128b3676a..1bf51045c0 100644 --- a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h +++ b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h @@ -181,8 +181,8 @@ namespace UnitTest const char* dir = m_componentApplication->GetExecutableFolder(); - m_localFileIO.SetAlias("@assets@", dir); - m_localFileIO.SetAlias("@devassets@", dir); + m_localFileIO.SetAlias("@products@", dir); + m_localFileIO.SetAlias("@projectroot@", dir); } void Destroy() diff --git a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp index 67d40be376..9c226cbb1b 100644 --- a/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/PlatformAddressedAssetCatalogTests.cpp @@ -22,7 +22,7 @@ #include #include -namespace +namespace { static const int s_totalAssets = 12; } @@ -53,15 +53,15 @@ namespace UnitTest m_application->Start(AzFramework::Application::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); - // By default @assets@ is setup to include the platform at the end. But this test is going to + // By default @products@ is setup to include the platform at the end. But this test is going to // loop over all platforms and it will be included as part of the relative path of the file. // So the asset folder for these tests have to point to the cache project root folder, which // doesn't include the platform. - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", cacheProjectRootFolder.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", cacheProjectRootFolder.c_str()); for (int platformNum = AzFramework::PlatformId::PC; platformNum < AzFramework::PlatformId::NumPlatformIds; ++platformNum) { diff --git a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h index 93e86374db..01b40fbb16 100644 --- a/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h +++ b/Code/Framework/AzToolsFramework/Tests/SliceStabilityTests/SliceStabilityTestFramework.h @@ -142,8 +142,6 @@ namespace UnitTest /* * AssetSystemRequestBus */ - const char* GetAbsoluteDevGameFolderPath() override { return ""; } - const char* GetAbsoluteDevRootFolderPath() override { return ""; } bool GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) override { return false; } bool GenerateRelativeSourcePath( [[maybe_unused]] const AZStd::string& sourcePath, [[maybe_unused]] AZStd::string& relativePath, diff --git a/Code/Legacy/CryCommon/CryPath.h b/Code/Legacy/CryCommon/CryPath.h index 197c9b2d56..51b379ac51 100644 --- a/Code/Legacy/CryCommon/CryPath.h +++ b/Code/Legacy/CryCommon/CryPath.h @@ -520,14 +520,14 @@ namespace PathUtil unsigned int index = 0; if (relativePath.length() && relativePath[index] == '@') // already aliased { - if (AZ::StringFunc::Equal(relativePath.c_str(), "@assets@/", false, 9)) + if (AZ::StringFunc::Equal(relativePath.c_str(), "@products@/", false, 9)) { return relativePath.substr(9); // assets is assumed. } return relativePath; } - const char* rootValue = gEnv->pFileIO->GetAlias("@root@"); + const char* rootValue = gEnv->pFileIO->GetAlias("@products@"); if (rootValue) { stack_string rootPath(ToUnixPath(rootValue)); @@ -538,7 +538,7 @@ namespace PathUtil ) { stack_string chopped_string = relativePath.substr(rootPath.size()); - stack_string rooted = stack_string("@root@") + chopped_string; + stack_string rooted = stack_string("@products@") + chopped_string; return rooted; } } diff --git a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp index bdc8d6de7d..5b96b943a7 100644 --- a/Code/Legacy/CrySystem/ConsoleBatchFile.cpp +++ b/Code/Legacy/CrySystem/ConsoleBatchFile.cpp @@ -59,10 +59,10 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename) AZStd::string filename; - if (sFilename[0] != '@') // console config files are actually by default in @root@ instead of @assets@ + if (sFilename[0] != '@') // console config files are actually by default in @products@ instead of @products@ { // However, if we've passed in a relative or absolute path that matches an existing file name, - // don't change it. Only change it to "@root@/filename" and strip off any relative paths + // don't change it. Only change it to "@products@/filename" and strip off any relative paths // if the given pattern *didn't* match a file. if (AZ::IO::FileIOBase::GetDirectInstance()->Exists(sFilename)) { @@ -70,7 +70,7 @@ bool CConsoleBatchFile::ExecuteConfigFile(const char* sFilename) } else { - filename = PathUtil::Make("@root@", PathUtil::GetFile(sFilename)); + filename = PathUtil::Make("@products@", PathUtil::GetFile(sFilename)); } } else diff --git a/Code/Legacy/CrySystem/DebugCallStack.cpp b/Code/Legacy/CrySystem/DebugCallStack.cpp index bea6c8c035..8018e46d69 100644 --- a/Code/Legacy/CrySystem/DebugCallStack.cpp +++ b/Code/Legacy/CrySystem/DebugCallStack.cpp @@ -372,7 +372,7 @@ void DebugCallStack::LogExceptionInfo(EXCEPTION_POINTERS* pex) const char* logAlias = gEnv->pFileIO->GetAlias("@log@"); if (!logAlias) { - logAlias = gEnv->pFileIO->GetAlias("@root@"); + logAlias = gEnv->pFileIO->GetAlias("@products@"); } if (logAlias) { diff --git a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp index 2e61760d8c..49af5080ec 100644 --- a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp @@ -306,7 +306,7 @@ void CLevelSystem::ScanFolder(const char* subfolder, bool modFolder) } AZStd::string levelContainerPakPath; - AZ::StringFunc::Path::Join("@assets@", m_levelsFolder.c_str(), levelContainerPakPath); + AZ::StringFunc::Path::Join("@products@", m_levelsFolder.c_str(), levelContainerPakPath); if (subfolder && subfolder[0]) { AZ::StringFunc::Path::Join(levelContainerPakPath.c_str(), subfolder, levelContainerPakPath); diff --git a/Code/Legacy/CrySystem/SystemCFG.cpp b/Code/Legacy/CrySystem/SystemCFG.cpp index c97345a518..7a643f2069 100644 --- a/Code/Legacy/CrySystem/SystemCFG.cpp +++ b/Code/Legacy/CrySystem/SystemCFG.cpp @@ -292,10 +292,10 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo // to either root or assets/config. this is done so that code can just request a simple file name and get its data if ( !(file.Open(filename.c_str(), "rb")) && - !(file.Open((AZStd::string("@root@/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/config/") + filename).c_str(), "rb")) && - !(file.Open((AZStd::string("@assets@/config/spec/") + filename).c_str(), "rb")) + !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/config/") + filename).c_str(), "rb")) && + !(file.Open((AZStd::string("@products@/config/spec/") + filename).c_str(), "rb")) ) { if (warnIfMissing) @@ -414,7 +414,7 @@ static bool ParseSystemConfig(const AZStd::string& strSysConfigFilePath, ILoadCo // replace '\\\\' with '\\' and '\\\"' with '\"' AZ::StringFunc::Replace(strValue, "\\\\", "\\"); AZ::StringFunc::Replace(strValue, "\\\"", "\""); - + pSink->OnLoadConfigurationEntry(strKey.c_str(), strValue.c_str(), strGroup.c_str()); } } diff --git a/Code/Legacy/CrySystem/SystemInit.cpp b/Code/Legacy/CrySystem/SystemInit.cpp index 3187095094..6de10f3855 100644 --- a/Code/Legacy/CrySystem/SystemInit.cpp +++ b/Code/Legacy/CrySystem/SystemInit.cpp @@ -796,7 +796,7 @@ void CSystem::OpenBasicPaks() bBasicPaksLoaded = true; // open pak files - constexpr AZStd::string_view paksFolder = "@assets@/*.pak"; // (@assets@ assumed) + constexpr AZStd::string_view paksFolder = "@products@/*.pak"; // (@products@ assumed) m_env.pCryPak->OpenPacks(paksFolder); InlineInitializationProcessing("CSystem::OpenBasicPaks OpenPacks( paksFolder.c_str() )"); @@ -805,7 +805,7 @@ void CSystem::OpenBasicPaks() // Open engine packs ////////////////////////////////////////////////////////////////////////// - const char* const assetsDir = "@assets@"; + const char* const assetsDir = "@products@"; // After game paks to have same search order as with files on disk m_env.pCryPak->OpenPack(assetsDir, "engine.pak"); @@ -874,7 +874,7 @@ void CSystem::OpenLanguageAudioPak([[maybe_unused]] const char* sLanguage) if (!AZ::StringFunc::Equal(sLocalizationFolder, "Languages", false)) { - sLocalizationFolder = "@assets@"; + sLocalizationFolder = "@products@"; } // load localized pak with crc32 filenames on consoles to save memory. @@ -1260,9 +1260,6 @@ AZ_POP_DISABLE_WARNING InlineInitializationProcessing("CSystem::Init Create console"); - // Need to load the engine.pak that includes the config files needed during initialization - m_env.pCryPak->OpenPack("@assets@", "engine.pak"); - InitFileSystem_LoadEngineFolders(startupParams); #if !defined(RELEASE) || defined(RELEASE_LOGGING) diff --git a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp index e0a6725ed4..24366498a5 100644 --- a/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp +++ b/Code/Tools/AWSNativeSDKInit/source/Platform/Android/InitializeCerts_Android.cpp @@ -27,7 +27,7 @@ namespace AWSNativeSDKInit void CopyCaCertBundle() { AZStd::vector contents; - AZStd::string certificatePath = "@assets@/certificates/aws/cacert.pem"; + AZStd::string certificatePath = "@products@/certificates/aws/cacert.pem"; AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); publicStoragePath.append("/certificates/aws/cacert.pem"); diff --git a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp index 42a43ef84e..78244ab02c 100644 --- a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderComponent.cpp @@ -683,31 +683,26 @@ void AssetBuilderComponent::ProcessJob(const AssetBuilderSDK::ProcessJobFunction AZ_Assert(settingsRegistry != nullptr, "SettingsRegistry must be ready for use in the AssetBuilder."); // The root path is the cache plus the platform name. - AZ::IO::FixedMaxPath newRoot(m_gameCache); + AZ::IO::FixedMaxPath newProjectCache(m_gameCache); // Check if the platform identifier is a valid "asset platform" // If so, use it, other wise use the OS default platform as a fail safe // This is to make sure the "debug platform" isn't added as a path segment - // the Cache Root folder + // the Cache ProjectCache folder if (AzFramework::PlatformHelper::GetPlatformIdFromName(request.m_platformInfo.m_identifier) != AzFramework::PlatformId::Invalid) { - newRoot /= request.m_platformInfo.m_identifier; + newProjectCache /= request.m_platformInfo.m_identifier; } else { - newRoot /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); + newProjectCache /= AzFramework::OSPlatformToDefaultAssetPlatform(AZ_TRAIT_OS_PLATFORM_CODENAME); } - // The asset path is root and the lower case game name. - AZ::IO::FixedMaxPath newAssets = newRoot; - // Now set the paths and run the job. { // Save out the prior paths. - ScopedAliasSetter assetAliasScope(*ioBase, "@assets@", newAssets.c_str()); - ScopedAliasSetter rootAliasScope(*ioBase, "@root@", newRoot.c_str()); - ScopedAliasSetter projectplatformCacheAliasScope(*ioBase, "@projectplatformcache@", newRoot.c_str()); + ScopedAliasSetter projectPlatformCacheAliasScope(*ioBase, "@products@", newProjectCache.c_str()); ScopedSettingsRegistrySetter cacheRootFolderScope(*settingsRegistry, - AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newRoot.Native()); + AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder, newProjectCache.Native()); // Invoke the Process Job function job(request, outResponse); diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp index 6eee3d6f2b..d7cdd30be8 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp +++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.cpp @@ -27,7 +27,7 @@ namespace AssetProcessor , m_registryBuiltOnce(false) , m_registriesMutex(QMutex::Recursive) { - + for (const AssetBuilderSDK::PlatformInfo& info : m_platformConfig->GetEnabledPlatforms()) { m_platforms.push_back(QString::fromUtf8(info.m_identifier.c_str())); @@ -38,17 +38,9 @@ namespace AssetProcessor // save 30mb for this. Really large projects do get this big (and bigger) // if you don't do this, things get fragmented very fast. - m_saveBuffer.reserve(1024 * 1024 * 30); - - m_absoluteDevFolderPath[0] = 0; - m_absoluteDevGameFolderPath[0] = 0; - - AZStd::string engineRoot; - AzFramework::ApplicationRequests::Bus::BroadcastResult(engineRoot, &AzFramework::ApplicationRequests::GetEngineRoot); - azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, engineRoot.c_str()); + m_saveBuffer.reserve(1024 * 1024 * 30); - AZStd::string gameFolderPath{AssetUtilities::ComputeProjectPath().toUtf8().constData()}; - azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, gameFolderPath.c_str()); + AssetUtilities::ComputeProjectPath(); AssetUtilities::ComputeProjectCacheRoot(m_cacheRootDir); @@ -359,7 +351,7 @@ namespace AssetProcessor [[maybe_unused]] bool makeDirResult = AZ::IO::SystemFile::CreateDir(absPath.toUtf8().constData()); AZ_Warning(AssetProcessor::ConsoleChannel, makeDirResult, "Failed create folder %s", platformCacheDir.toUtf8().constData()); } - + // if we succeeded in doing this, then use "rename" to move the file over the previous copy. bool moved = AssetUtilities::MoveFileWithTimeout(tempRegistryFile, actualRegistryFile, 3); allCatalogsSaved = allCatalogsSaved && moved; @@ -382,7 +374,7 @@ namespace AssetProcessor } } } - + { // scoped to minimize the duration of this mutex lock QMutexLocker locker(&m_savingRegistryMutex); @@ -605,7 +597,7 @@ namespace AssetProcessor AZStd::string nameForMap(relativeFilePath.toUtf8().constData()); AZStd::to_lower(nameForMap.begin(), nameForMap.end()); - + m_sourceNameToSourceUUIDMap.insert({ nameForMap, sourceUuid }); } @@ -627,16 +619,6 @@ namespace AssetProcessor ////////////////////////////////////////////////////////////////////////// - const char* AssetCatalog::GetAbsoluteDevGameFolderPath() - { - return m_absoluteDevGameFolderPath; - } - - const char* AssetCatalog::GetAbsoluteDevRootFolderPath() - { - return m_absoluteDevFolderPath; - } - bool AssetCatalog::GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullSourceOrProductPath, AZStd::string& relativeProductPath) { ProcessGetRelativeProductPathFromFullSourceOrProductPathRequest(fullSourceOrProductPath, relativeProductPath); @@ -976,7 +958,7 @@ namespace AssetProcessor // regardless of which way we come into this function we must always use ConvertToRelativePath // to convert from whatever the input format is to a database path (which may include output prefix) - QString databaseName; + QString databaseName; QString scanFolder; if (!AzFramework::StringFunc::Path::IsRelative(sourcePath)) { @@ -1163,7 +1145,7 @@ namespace AssetProcessor AZStd::string AssetCatalog::GetAssetPathById(const AZ::Data::AssetId& id) { return GetAssetInfoById(id).m_relativePath; - + } AZ::Data::AssetId AssetCatalog::GetAssetIdByPath(const char* path, const AZ::Data::AssetType& typeToRegister, bool autoRegisterIfNotFound) @@ -1175,7 +1157,7 @@ namespace AssetProcessor AZStd::string relProductPath; GetRelativeProductPathFromFullSourceOrProductPath(path, relProductPath); QString tempPlatformName = GetDefaultAssetPlatform(); - + AZ::Data::AssetId assetId; { QMutexLocker locker(&m_registriesMutex); @@ -1344,7 +1326,7 @@ namespace AssetProcessor //remove aliases if present normalisedAssetPath = AssetUtilities::NormalizeAndRemoveAlias(normalisedAssetPath); - if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@assets@/" + if (!normalisedAssetPath.isEmpty()) // this happens if it comes in as just for example "@products@/" { AZStd::lock_guard lock(m_databaseMutex); @@ -1439,7 +1421,7 @@ namespace AssetProcessor relativePath = entry.m_sourceName; watchFolder = scanEntry.m_scanFolder; - + return true; } @@ -1489,7 +1471,7 @@ namespace AssetProcessor { return foundIter->second; } - + // we did not find it - try the backup mapping! AssetId legacyMapping = registryToUse.GetAssetIdByLegacyAssetId(assetId); if (legacyMapping.IsValid()) @@ -1533,7 +1515,7 @@ namespace AssetProcessor return !assetInfo.m_relativePath.empty(); } - + // Asset isn't in the DB or in the APM queue, we don't know what this asset ID is return false; } @@ -1588,7 +1570,7 @@ namespace AssetProcessor AZStd::string sourceFileFullPath; AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), sourceFileFullPath); assetInfo.m_sizeBytes = AZ::IO::SystemFile::Length(sourceFileFullPath.c_str()); - + assetInfo.m_assetType = AZ::Uuid::CreateNull(); // most source files don't have a type! // Go through the list of source assets and see if this asset's file path matches any of the filters diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h index 84e96bcf3e..e876e259fb 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h +++ b/Code/Tools/AssetProcessor/native/AssetManager/AssetCatalog.h @@ -88,8 +88,6 @@ namespace AssetProcessor ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystem::AssetSystemRequestBus::Handler overrides - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override; //! Given a partial or full source file path, respond with its relative path and the watch folder it is relative to. @@ -215,8 +213,6 @@ namespace AssetProcessor AZStd::vector m_saveBuffer; // so that we don't realloc all the time - char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN]; - char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN]; QDir m_cacheRootDir; }; } diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp index 3a7bc6ef3e..4cd4489a4c 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp +++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.cpp @@ -56,15 +56,8 @@ namespace AssetProcessor // cache this up front. Note that it can fail here, and will retry later. InitializeCacheRoot(); - m_absoluteDevFolderPath[0] = 0; - m_absoluteDevGameFolderPath[0] = 0; - QDir assetRoot; - if (AssetUtilities::ComputeAssetRoot(assetRoot)) - { - azstrcpy(m_absoluteDevFolderPath, AZ_MAX_PATH_LEN, assetRoot.absolutePath().toUtf8().constData()); - azstrcpy(m_absoluteDevGameFolderPath, AZ_MAX_PATH_LEN, AssetUtilities::ComputeProjectPath().toUtf8().constData()); - } + AssetUtilities::ComputeAssetRoot(assetRoot); using namespace AZStd::placeholders; diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h index 376af5d773..891e091f91 100644 --- a/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h +++ b/Code/Tools/AssetProcessor/native/AssetManager/assetProcessorManager.h @@ -440,8 +440,6 @@ namespace AssetProcessor AZStd::mutex m_sourceUUIDToSourceInfoMapMutex; QString m_normalizedCacheRootPath; - char m_absoluteDevFolderPath[AZ_MAX_PATH_LEN]; - char m_absoluteDevGameFolderPath[AZ_MAX_PATH_LEN]; QDir m_cacheRootDir; bool m_isCurrentlyScanning = false; bool m_quitRequested = false; diff --git a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp index 30d8e5fada..c35f3a4b0f 100644 --- a/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp +++ b/Code/Tools/AssetProcessor/native/FileServer/fileServer.cpp @@ -95,7 +95,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection) Q_UNUSED(connection); // Connection has not completed negotiation yet, register to be notified - // when we know what platform is connected and map the @assets@ alias then + // when we know what platform is connected and map the @products@ alias then connect(connection, &Connection::AssetPlatformChanged, this, [this, connection]() { auto fileIO = m_fileIOs[connection->ConnectionId()]; @@ -114,8 +114,7 @@ void FileServer::ConnectionAdded(unsigned int connId, Connection* connection) projectCacheRoot = QDir(projectCacheRoot.absoluteFilePath(assetPlatform)); } const char* projectCachePath = projectCacheRoot.absolutePath().toUtf8().data(); - fileIO->SetAlias("@assets@", projectCachePath); - fileIO->SetAlias("@root@", projectCachePath); + fileIO->SetAlias("@products@", projectCachePath); if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { @@ -955,10 +954,10 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig FileTreeResponse::FolderList folders; AZStd::vector untestedFolders; - if (fileIO->IsDirectory("@assets@")) + if (fileIO->IsDirectory("@products@")) { - folders.push_back("@assets@"); - untestedFolders.push_back("@assets@"); + folders.push_back("@products@"); + untestedFolders.push_back("@products@"); } if (fileIO->IsDirectory("@usercache@")) { @@ -975,11 +974,6 @@ void FileServer::ProcessFileTreeRequest(unsigned int connId, unsigned int, unsig folders.push_back("@log@"); untestedFolders.push_back("@log@"); } - if (fileIO->IsDirectory("@root@")) - { - folders.push_back("@root@"); - untestedFolders.push_back("@root@"); - } AZ::IO::Result res = ResultCode::Success; diff --git a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp index 5d2d0e77d3..2a1c4e4755 100644 --- a/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp +++ b/Code/Tools/AssetProcessor/native/tests/AssetCatalog/AssetCatalogUnitTests.cpp @@ -766,7 +766,7 @@ namespace AssetProcessor TEST_F(AssetCatalogTest_GetFullSourcePath, AliasedCachePath_ReturnsAbsolutePathToSource) { //feed it a path with alias and asset id - QString fileToCheck = "@assets@/subfolder3/randomfileoutput.random1"; + QString fileToCheck = "@products@/subfolder3/randomfileoutput.random1"; EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random")); } @@ -787,7 +787,7 @@ namespace AssetProcessor TEST_F(AssetCatalogTest_GetFullSourcePath, InvalidSourcePathContainingCacheAlias_ReturnsAbsolutePathToSource) { //feed it a path with alias and input name - QString fileToCheck = "@assets@/somerandomfile.random"; + QString fileToCheck = "@products@/somerandomfile.random"; EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random")); } diff --git a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp index 5b15a6a552..a8bc714698 100644 --- a/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp +++ b/Code/Tools/AssetProcessor/native/unittests/RCcontrollerUnitTests.cpp @@ -47,7 +47,7 @@ void RCcontrollerUnitTests::Reset() m_rcController.m_RCJobListModel.m_jobs.clear(); m_rcController.m_RCJobListModel.m_jobsInFlight.clear(); m_rcController.m_RCJobListModel.m_jobsInQueueLookup.clear(); - + m_rcController.m_pendingCriticalJobsPerPlatform.clear(); m_rcController.m_jobsCountPerPlatform.clear(); @@ -56,7 +56,7 @@ void RCcontrollerUnitTests::Reset() m_rcController.m_RCQueueSortModel.AttachToModel(&m_rcController.m_RCJobListModel); m_rcController.m_RCQueueSortModel.m_currentJobRunKeyToJobEntries.clear(); m_rcController.m_RCQueueSortModel.m_currentlyConnectedPlatforms.clear(); -} +} void RCcontrollerUnitTests::StartTest() { @@ -183,11 +183,11 @@ void RCcontrollerUnitTests::RunRCControllerTests() QStringList tempJobNames; // Note that while this is an OS-SPECIFIC path, this test does not actually invoke the file system - // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the + // or file operators, so is purely doing in-memory testing. So the path does not actually matter and the // test should function on other operating systems too. // test - exact match - tempJobNames << "c:/somerandomfolder/dev/blah/test.dds"; + tempJobNames << "c:/somerandomfolder/dev/blah/test.dds"; tempJobNames << "c:/somerandomfolder/dev/blah/test.cre"; // must not match // test - NO MATCH @@ -218,7 +218,7 @@ void RCcontrollerUnitTests::RunRCControllerTests() QList createdJobs; - + for (QString name : tempJobNames) { @@ -270,7 +270,7 @@ void RCcontrollerUnitTests::RunRCControllerTests() // EXACT MATCH TEST (with prefixes and such) NetworkRequestID requestID(1, 1234); - m_rcController.OnRequestCompileGroup(requestID, "pc", "@assets@/blah/test.dds", AZ::Data::AssetId()); + m_rcController.OnRequestCompileGroup(requestID, "pc", "@products@/blah/test.dds", AZ::Data::AssetId()); QCoreApplication::processEvents(QEventLoop::AllEvents); // this should have matched exactly one item, and when we finish that item, it should terminate: @@ -626,9 +626,9 @@ void RCcontrollerUnitTests::RunRCControllerTests() jobdetailsB.m_jobEntry.m_watchFolderPath = scanFolderInfo.ScanPath(); jobdetailsB.m_jobEntry.m_jobKey = "TestJobB"; jobdetailsB.m_jobEntry.m_builderGuid = builderUuid; - + jobdetailsB.m_critical = true; //make jobB critical so that it will be analyzed first even though we want JobA to run first - + AssetBuilderSDK::SourceFileDependency sourceFileBDependency; sourceFileBDependency.m_sourceFileDependencyPath = "fileB.txt"; @@ -694,10 +694,10 @@ void RCcontrollerUnitTests::RunRCControllerTests() m_rcController.DispatchJobs(); UNIT_TEST_EXPECT_TRUE(UnitTestUtils::BlockUntil(allJobsCompleted, 5000)); - UNIT_TEST_EXPECT_TRUE(jobFinishedB); + UNIT_TEST_EXPECT_TRUE(jobFinishedB); - // Now test the use case where we have a cyclic dependency, - // although the order in which these job will start is not defined but we can ensure that + // Now test the use case where we have a cyclic dependency, + // although the order in which these job will start is not defined but we can ensure that // all the job finishes and RCController goes Idle allJobsCompleted = false; Reset(); @@ -728,8 +728,8 @@ void RCcontrollerUnitTests::RunRCControllerTests() jobdetailsD.m_jobEntry.m_builderGuid = builderUuid; AssetBuilderSDK::SourceFileDependency sourceFileDDependency; sourceFileDDependency.m_sourceFileDependencyPath = "fileD.txt"; - - //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other + + //creating cyclic job order dependencies i.e JobC and JobD have order job dependency on each other AssetBuilderSDK::JobDependency jobDependencyC("TestJobC", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileCDependency); AssetBuilderSDK::JobDependency jobDependencyD("TestJobD", "pc", AssetBuilderSDK::JobDependencyType::Order, sourceFileDDependency); jobdetailsC.m_jobDependencyList.push_back({ jobDependencyD }); diff --git a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h index f77c706421..c281b3050a 100644 --- a/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h +++ b/Code/Tools/AssetProcessor/native/unittests/UnitTestRunner.h @@ -262,11 +262,10 @@ namespace UnitTestUtils AZ::IO::FileIOBase::SetInstance(m_localFileIO); - m_localFileIO->SetAlias("@assets@", (newDir + QString("/ALIAS/assets")).toUtf8().constData()); + m_localFileIO->SetAlias("@products@", (newDir + QString("/ALIAS/assets")).toUtf8().constData()); m_localFileIO->SetAlias("@log@", (newDir + QString("/ALIAS/logs")).toUtf8().constData()); m_localFileIO->SetAlias("@usercache@", (newDir + QString("/ALIAS/cache")).toUtf8().constData()); m_localFileIO->SetAlias("@user@", (newDir + QString("/ALIAS/user")).toUtf8().constData()); - m_localFileIO->SetAlias("@root@", (newDir + QString("/ALIAS/root")).toUtf8().constData()); } ~ScopedDir() diff --git a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp index 6f974a0ff6..40d3bd3caa 100644 --- a/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/GUIApplicationManager.cpp @@ -104,17 +104,17 @@ ApplicationManager::BeforeRunStatus GUIApplicationManager::BeforeRun() // The build process may leave behind some temporaries, try to delete them RemoveTemporaries(); - QDir devRoot; - AssetUtilities::ComputeAssetRoot(devRoot); + QDir projectAssetRoot; + AssetUtilities::ComputeAssetRoot(projectAssetRoot); #if defined(EXTERNAL_CRASH_REPORTING) - CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", devRoot.absolutePath().toStdString()); + CrashHandler::ToolsCrashHandler::InitCrashHandler("AssetProcessor", projectAssetRoot.absolutePath().toStdString()); #endif AssetProcessor::MessageInfoBus::Handler::BusConnect(); // we have to monitor both the cache folder and the database file and restart AP if either of them gets deleted // It is important to note that we are monitoring the parent folder and not the actual cache folder itself since // we want to handle the use case on Mac OS if the user moves the cache folder to the trash. - m_qtFileWatcher.addPath(devRoot.absolutePath()); + m_qtFileWatcher.addPath(projectAssetRoot.absolutePath()); QDir projectCacheRoot; AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot); @@ -615,7 +615,6 @@ void GUIApplicationManager::DirectoryChanged([[maybe_unused]] QString path) void GUIApplicationManager::FileChanged(QString path) { - QDir devRoot = ApplicationManager::GetSystemRoot(); QDir projectCacheRoot; AssetUtilities::ComputeProjectCacheRoot(projectCacheRoot); QString assetDbPath = projectCacheRoot.filePath("assetdb.sqlite"); diff --git a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp index 527feac6b4..2cf7705e96 100644 --- a/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp +++ b/Code/Tools/CrashHandler/Tools/ToolsCrashHandler.cpp @@ -56,7 +56,7 @@ namespace CrashHandler if (fileIO) { // If our devroot alias is available, use that - const char* devAlias = fileIO->GetAlias("@devroot@"); + const char* devAlias = fileIO->GetAlias("@engroot@"); if (devAlias) { return devAlias; diff --git a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp index 91ca77fa7b..c7d85428b4 100644 --- a/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp +++ b/Code/Tools/PythonBindingsExample/tests/ApplicationTests.cpp @@ -87,7 +87,7 @@ namespace PythonBindingsExample TEST_F(PythonBindingsExampleTest, Application_ImportAzLmbrPaths_Works) { ApplicationParameters params; - params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot); print (azlmbr.paths.devroot)"; + params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot)"; EXPECT_TRUE(s_application->RunWithParameters(params)); } diff --git a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp index aaa76e5977..aa88dee90f 100644 --- a/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Export/MtlMaterialExporter.cpp @@ -14,8 +14,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -170,11 +172,14 @@ namespace AZ { using AzToolsFramework::AssetSystemRequestBus; - const char* path = nullptr; - AssetSystemRequestBus::BroadcastResult(path, &AssetSystemRequestBus::Events::GetAbsoluteDevGameFolderPath); - if (path) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - return path; + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + if (!projectPath.empty()) + { + return projectPath.Native(); } else { diff --git a/Code/Tools/SerializeContextTools/SliceConverter.cpp b/Code/Tools/SerializeContextTools/SliceConverter.cpp index c815af3b7a..6cfe072f80 100644 --- a/Code/Tools/SerializeContextTools/SliceConverter.cpp +++ b/Code/Tools/SerializeContextTools/SliceConverter.cpp @@ -38,7 +38,7 @@ // SliceConverter reads in a slice file (saved in an ObjectStream format), instantiates it, creates a prefab out of the data, // and saves the prefab in a JSON format. This can be used for one-time migrations of slices or slice-based levels to prefabs. -// +// // If the slice contains legacy data, it will print out warnings / errors about the data that couldn't be serialized. // The prefab will be generated without that data. @@ -56,7 +56,7 @@ namespace AZ AZ_Error("SerializeContextTools", false, "Command line not available."); return false; } - + JsonSerializerSettings convertSettings; convertSettings.m_keepDefaults = commandLine->HasSwitch("keepdefaults"); convertSettings.m_registrationContext = application.GetJsonRegistrationContext(); @@ -82,7 +82,7 @@ namespace AZ // Load the asset catalog so that we can find any nested assets successfully. We also need to tick the tick bus // so that the OnCatalogLoaded event gets processed now, instead of during application shutdown. AZ::Data::AssetCatalogRequestBus::Broadcast( - &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml"); + &AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml"); application.Tick(); AZStd::string logggingScratchBuffer; @@ -870,7 +870,7 @@ namespace AZ // Wait for the disconnect to finish. bool disconnected = false; - AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected, + AzFramework::AssetSystemRequestBus::BroadcastResult(disconnected, &AzFramework::AssetSystem::AssetSystemRequests::WaitUntilAssetProcessorDisconnected, AZStd::chrono::seconds(30)); AZ_Error("Convert-Slice", disconnected, "Asset Processor failed to disconnect successfully."); diff --git a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp index 4653975a52..d51539a471 100644 --- a/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp +++ b/Gems/AWSCore/Code/Source/Configuration/AWSCoreConfiguration.cpp @@ -64,7 +64,7 @@ namespace AWSCore void AWSCoreConfiguration::InitSourceProjectFolderPath() { - auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + auto sourceProjectFolder = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (!sourceProjectFolder) { AZ_Error(AWSCoreConfigurationName, false, ProjectSourceFolderNotFoundErrorMessage); diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index a2c89a5af3..0b485609ad 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -197,7 +197,7 @@ namespace AWSCore subMenu->addAction(AddExternalLinkAction( AWSMetricsAdvancedTopicsActionText, AWSMetricsAdvancedTopicsUrl, ":/Notifications/link.svg")); - AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@"); + AZStd::string priorAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@engroot@"); AZStd::string configFilePath = priorAlias + "\\Gems\\AWSMetrics\\Code\\" + AZ::SettingsRegistryInterface::RegistryFolder; AzFramework::StringFunc::Path::Normalize(configFilePath); diff --git a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp index 6bde2c2fbf..e54a55f728 100644 --- a/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp +++ b/Gems/AWSCore/Code/Tests/Configuration/AWSCoreConfigurationTest.cpp @@ -60,7 +60,7 @@ public: m_normalizedSourceProjectFolder.c_str(), AZ::SettingsRegistryInterface::RegistryFolder); AzFramework::StringFunc::Path::Normalize(m_normalizedSetRegFolderPath); - m_localFileIO->SetAlias("@devassets@", m_normalizedSourceProjectFolder.c_str()); + m_localFileIO->SetAlias("@projectroot@", m_normalizedSourceProjectFolder.c_str()); CreateTestSetRegFile(TEST_VALID_RESOURCE_MAPPING_SETREG); } @@ -122,7 +122,7 @@ private: TEST_F(AWSCoreConfigurationTest, InitConfig_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) { m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); - m_localFileIO->ClearAlias("@devassets@"); + m_localFileIO->ClearAlias("@projectroot@"); AZ_TEST_START_TRACE_SUPPRESSION; m_awsCoreConfiguration->InitConfig(); @@ -154,7 +154,7 @@ TEST_F(AWSCoreConfigurationTest, InitConfig_LoadValidSettingsRegistry_ReturnNonE TEST_F(AWSCoreConfigurationTest, ReloadConfiguration_NoSourceProjectFolderFound_ReturnEmptyConfigFilePath) { m_settingsRegistry->MergeSettingsFile(m_normalizedSetRegFilePath, AZ::SettingsRegistryInterface::Format::JsonMergePatch, {}); - m_localFileIO->ClearAlias("@devassets@"); + m_localFileIO->ClearAlias("@projectroot@"); m_awsCoreConfiguration->ReloadConfiguration(); auto actualConfigFilePath = m_awsCoreConfiguration->GetResourceMappingConfigFilePath(); diff --git a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp index 40ed5b53b5..e9453a4a0a 100644 --- a/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp +++ b/Gems/AWSCore/Code/Tests/Editor/UI/AWSCoreEditorMenuTest.cpp @@ -32,7 +32,7 @@ class AWSCoreEditorMenuTest { AWSCoreEditorUIFixture::SetUp(); AWSCoreFixture::SetUp(); - m_localFileIO->SetAlias("@devroot@", "dummy engine root"); + m_localFileIO->SetAlias("@engroot@", "dummy engine root"); } void TearDown() override diff --git a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp index 7e4ec05aba..bc8ff9a42e 100644 --- a/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp +++ b/Gems/AWSMetrics/Code/Source/IdentityProvider.cpp @@ -22,7 +22,7 @@ namespace AWSMetrics AZStd::string IdentityProvider::GetEngineVersion() { - static constexpr const char* EngineConfigFilePath = "@root@/engine.json"; + static constexpr const char* EngineConfigFilePath = "@products@/engine.json"; static constexpr const char* EngineVersionJsonKey = "O3DEVersion"; AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetDirectInstance(); diff --git a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h index 6b7c809601..b77f39c93c 100644 --- a/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h +++ b/Gems/AWSMetrics/Code/Tests/AWSMetricsGemMock.h @@ -16,8 +16,8 @@ #include #include #include +#include #include -#include namespace AWSMetrics { @@ -34,15 +34,22 @@ namespace AWSMetrics // Set up the file IO and alias m_localFileIO = aznew AZ::IO::LocalFileIO(); m_priorFileIO = AZ::IO::FileIOBase::GetInstance(); - // we need to set it to nullptr first because otherwise the + // we need to set it to nullptr first because otherwise the // underneath code assumes that we might be leaking the previous instance AZ::IO::FileIOBase::SetInstance(nullptr); AZ::IO::FileIOBase::SetInstance(m_localFileIO); - const AZStd::string engineRoot = AZ::Test::GetEngineRootPath(); - m_localFileIO->SetAlias("@devroot@", engineRoot.c_str()); - m_localFileIO->SetAlias("@root@", engineRoot.c_str()); - m_localFileIO->SetAlias("@user@", GetTestFolderPath().c_str()); + const AZ::IO::Path engineRoot = AZ::Test::GetEngineRootPath(); + const auto productAssetPath = GetTestFolderPath() / "Cache"; + const auto userPath = GetTestFolderPath() / "user"; + m_localFileIO->CreatePath(productAssetPath.c_str()); + m_localFileIO->CreatePath(userPath.c_str()); + m_localFileIO->SetAlias("@engroot@", engineRoot.c_str()); + m_localFileIO->SetAlias("@products@", productAssetPath.c_str()); + m_localFileIO->SetAlias("@user@", userPath.c_str()); + // Copy engine.json to the cache + EXPECT_TRUE(m_localFileIO->Copy((engineRoot / "engine.json").c_str(), "engine.json")); + m_serializeContext = AZStd::make_unique(); m_registrationContext = AZStd::make_unique(); @@ -69,6 +76,13 @@ namespace AWSMetrics m_serializeContext.reset(); m_registrationContext.reset(); + const auto productAssetPath = GetTestFolderPath() / "Cache"; + const auto userPath = GetTestFolderPath() / "user"; + // Clear the product asset cache alias to prevent cache write errors + m_localFileIO->ClearAlias("@products@"); + m_localFileIO->DestroyPath(userPath.c_str()); + m_localFileIO->DestroyPath(productAssetPath.c_str()); + AZ::IO::FileIOBase::SetInstance(nullptr); delete m_localFileIO; AZ::IO::FileIOBase::SetInstance(m_priorFileIO); @@ -97,22 +111,22 @@ namespace AWSMetrics bool CreateFile(const AZStd::string& filePath, const AZStd::string& content) { AZ::IO::HandleType fileHandle; + // Suppress errors about writing to product asset cache + AZ_TEST_START_TRACE_SUPPRESSION; if (!m_localFileIO->Open(filePath.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText, fileHandle)) { return false; } m_localFileIO->Write(fileHandle, content.c_str(), content.size()); + AZ_TEST_STOP_TRACE_SUPPRESSION_NO_COUNT; m_localFileIO->Close(fileHandle); return true; } AZStd::string GetDefaultTestFilePath() { - AZStd::string testFilePath = GetTestFolderPath(); - AzFramework::StringFunc::Path::Join(testFilePath.c_str(), "Test.json", testFilePath); - - return testFilePath; + return (GetTestFolderPath() / "Test.json").Native(); } bool RemoveFile(const AZStd::string& filePath) @@ -133,14 +147,16 @@ namespace AWSMetrics AZ::IO::FileIOBase* m_priorFileIO = nullptr; AZ::IO::FileIOBase* m_localFileIO = nullptr; + AZ::Test::ScopedAutoTempDirectory m_testDirectory; AZStd::unique_ptr m_serializeContext; AZStd::unique_ptr m_registrationContext; AZStd::unique_ptr m_settingsRegistry; private: - AZStd::string GetTestFolderPath() + AZ::IO::Path GetTestFolderPath() { - return AZ_TRAIT_TEST_ROOT_FOLDER; + AZ::IO::Path testPathString{ m_testDirectory.GetDirectory() }; + return testPathString; } }; } diff --git a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp index b4bf68bac1..56f28856af 100644 --- a/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp +++ b/Gems/AssetValidation/Code/Source/AssetValidationSystemComponent.cpp @@ -142,14 +142,14 @@ namespace AssetValidation system.GetIConsole()->AddCommand("addseedlist", ConsoleCommandAddSeedList); system.GetIConsole()->AddCommand("removeseedlist", ConsoleCommandRemoveSeedList); system.GetIConsole()->AddCommand("printexcluded", ConsoleCommandTogglePrintExcluded); - } + } bool AssetValidationSystemComponent::IsKnownAsset(const char* assetPath) { AZStd::string lowerAsset{ assetPath }; AZStd::replace(lowerAsset.begin(), lowerAsset.end(), AZ_WRONG_DATABASE_SEPARATOR, AZ_CORRECT_DATABASE_SEPARATOR); - const AZStd::vector prefixes = { "./", "@assets@/" }; + const AZStd::vector prefixes = { "./", "@products@/" }; for (const AZStd::string& prefix : prefixes) { if (lowerAsset.starts_with(prefix)) @@ -392,7 +392,7 @@ namespace AssetValidation AssetValidationRequestBus::Broadcast(&AssetValidationRequestBus::Events::AddSeedList, seedfilepath); } - bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) + bool AssetValidationSystemComponent::AddSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) { for (const AzFramework::SeedInfo& thisSeed : seedList) { @@ -401,7 +401,7 @@ namespace AssetValidation return true; } - bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) + bool AssetValidationSystemComponent::RemoveSeedsFor(const AzFramework::AssetSeedList& seedList, AZ::u32 seedId) { AssetValidationRequests::AssetSourceList removeList; for (const AzFramework::SeedInfo& thisSeed : seedList) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp index 3493099d4c..924c01b916 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp @@ -244,7 +244,7 @@ namespace ImageProcessingAtom } AZ::IO::FixedMaxPath projectConfigFolder; - if (auto sourceGameRoot = fileIoBase->ResolvePath("@devassets@"); sourceGameRoot.has_value()) + if (auto sourceGameRoot = fileIoBase->ResolvePath("@projectroot@"); sourceGameRoot.has_value()) { projectConfigFolder = *sourceGameRoot; projectConfigFolder /= s_projectConfigRelativeFolder; diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp index 7c5be89508..27ae90dcdc 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp @@ -139,16 +139,16 @@ namespace AZ //! Validates if a given .shadervariantlist file is located at the correct path for a given .shader full path. //! There are two valid paths: //! 1- Lower Precedence: The same folder where the .shader file is located. - //! 2- Higher Precedence: //ShaderVariants/. + //! 2- Higher Precedence: /ShaderVariants/. //! The "Higher Precedence" path gives the option to game projects to override what variants to generate. If this //! file exists then the "Lower Precedence" path is disregarded. //! A .shader full path is located under an AP scan folder. - //! Example: "/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader" - //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types". + //! Example: "/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shader" + //! - In this example the Scan Folder is "/Gems/Atom/Feature/Common/Assets", while the subfolder is "Materials/Types". //! The "Higher Precedence" expected valid location for the .shadervariantlist would be: - //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. + //! - //ShaderVariants/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. //! The "Lower Precedence" valid location would be: - //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. + //! - /Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.shadervariantlist. //! @shouldExitEarlyFromProcessJob [out] Set to true if ProcessJob should do no work but return successfully. //! Set to false if ProcessJob should do work and create assets. //! When @shaderVariantListFileFullPath is provided by a Gem/Feature instead of the Game Project @@ -169,17 +169,13 @@ namespace AZ AZStd::string shaderVariantListFileRelativePath = shaderProductFileRelativePath; AzFramework::StringFunc::Path::ReplaceExtension(shaderVariantListFileRelativePath, RPI::ShaderVariantListSourceData::Extension); - const char * gameProjectPath = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(gameProjectPath, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); + AZ::IO::FixedMaxPath gameProjectPath = AZ::Utils::GetProjectPath(); - AZStd::string expectedHigherPrecedenceFileFullPath; - AzFramework::StringFunc::Path::Join(gameProjectPath, RPI::ShaderVariantTreeAsset::CommonSubFolder, expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */); - AzFramework::StringFunc::Path::Join(expectedHigherPrecedenceFileFullPath.c_str(), shaderProductFileRelativePath.c_str(), expectedHigherPrecedenceFileFullPath, false /* handle directory overlap? */, false /* be case insensitive? */); - AzFramework::StringFunc::Path::ReplaceExtension(expectedHigherPrecedenceFileFullPath, AZ::RPI::ShaderVariantListSourceData::Extension); - AzFramework::StringFunc::Path::Normalize(expectedHigherPrecedenceFileFullPath); + auto expectedHigherPrecedenceFileFullPath = (gameProjectPath + / RPI::ShaderVariantTreeAsset::CommonSubFolder / shaderProductFileRelativePath).LexicallyNormal(); + expectedHigherPrecedenceFileFullPath.ReplaceExtension(AZ::RPI::ShaderVariantListSourceData::Extension); - AZStd::string normalizedShaderVariantListFileFullPath = shaderVariantListFileFullPath; - AzFramework::StringFunc::Path::Normalize(normalizedShaderVariantListFileFullPath); + auto normalizedShaderVariantListFileFullPath = AZ::IO::FixedMaxPath(shaderVariantListFileFullPath).LexicallyNormal(); if (expectedHigherPrecedenceFileFullPath == normalizedShaderVariantListFileFullPath) { @@ -203,23 +199,15 @@ namespace AZ } // Check the "Lower Precedence" case, .shader path == .shadervariantlist path. - AZStd::string normalizedShaderFileFullPath = shaderFileFullPath; - AzFramework::StringFunc::Path::Normalize(normalizedShaderFileFullPath); - - AZStd::string normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath; - AzFramework::StringFunc::Path::StripExtension(normalizedShaderFileFullPathWithoutExtension); - - AZStd::string normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath; - AzFramework::StringFunc::Path::StripExtension(normalizedShaderVariantListFileFullPathWithoutExtension); - -#if AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS - //In certain circumstances, the capitalization of the drive letter may not match - const bool caseSensitive = false; -#else - //On the other platforms there's no drive letter, so it should be a non-issue. - const bool caseSensitive = true; -#endif - if (!StringFunc::Equal(normalizedShaderFileFullPathWithoutExtension.c_str(), normalizedShaderVariantListFileFullPathWithoutExtension.c_str(), caseSensitive)) + AZ::IO::Path normalizedShaderFileFullPath = AZ::IO::Path(shaderFileFullPath).LexicallyNormal(); + + auto normalizedShaderFileFullPathWithoutExtension = normalizedShaderFileFullPath; + normalizedShaderFileFullPathWithoutExtension.ReplaceExtension(""); + + auto normalizedShaderVariantListFileFullPathWithoutExtension = normalizedShaderVariantListFileFullPath; + normalizedShaderVariantListFileFullPathWithoutExtension.ReplaceExtension(""); + + if (normalizedShaderFileFullPathWithoutExtension != normalizedShaderVariantListFileFullPathWithoutExtension) { AZ_Error(ShaderVariantAssetBuilderName, false, "For shader file at path [%s], the shader variant list [%s] is expected to be located at [%s.%s] or [%s]" , normalizedShaderFileFullPath.c_str(), normalizedShaderVariantListFileFullPath.c_str(), diff --git a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp index 8495e9b119..27336c8280 100644 --- a/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/UtilsTests.cpp @@ -28,7 +28,7 @@ namespace UnitTest m_application.reset(); } - static constexpr const char TestDataFolder[] = "@devroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/"; + static constexpr const char TestDataFolder[] = "@engroot@/Gems/Atom/RHI/Code/Tests/UtilsTestsData/"; AZStd::unique_ptr m_application; }; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h index 341824a84d..bd11965ffa 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Common/AssetUtils.h @@ -44,14 +44,14 @@ namespace AZ AZStd::string GetSourcePathByAssetId(const AZ::Data::AssetId& assetId); //! Tries to resolve a relative file reference, given the path of a referencing file. - //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root. + //! @param originatingSourceFilePath Path to the parent file that references referencedSourceFilePath. May be absolute or relative to asset-root. //! @param referencedSourceFilePath Path that the parent file references. May be relative to the parent file location or relative to asset-root. //! @return A full path for referencedSourceFilePath, if a full path was found. If a full path could not be constructed, returns referencedSourceFilePath unmodified. AZStd::string ResolvePathReference(const AZStd::string& originatingSourceFilePath, const AZStd::string& referencedSourceFilePath); - //! Returns the list of paths where a source asset file could possibly appear. + //! Returns the list of paths where a source asset file could possibly appear. //! This is intended for use by AssetBuilders when reporting dependencies, to support relative paths between source files. - //! When a source data file references another file using a relative path, the path might be relative to the originating + //! When a source data file references another file using a relative path, the path might be relative to the originating //! file or it might be a standard source asset path (i.e. relative to the logical asset-root). This function will help reporting //! dependencies on all possible locations where that file may appear at some point in the future. //! For example a file MyGem/Assets/Foo/a.json might reference another file as "Bar/b.json". In this case, calling @@ -94,9 +94,9 @@ namespace AZ template Outcome> LoadAsset(const AZ::Data::AssetId& assetId, [[maybe_unused]] const char* sourcePathForDebug) { - if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@")) + if (nullptr == AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@")) { - // The absence of "@assets@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it + // The absence of "@products@" is not necessarily the reason LoadAsset() can't be used in CreateJobs(), but it // is a symptom of calling LoadAsset() from CreateJobs() which is not supported. AZ_Assert(false, "It appears AssetUtils::LoadAsset() is being called in CreateJobs(). It can only be used in ProcessJob()."); return AZ::Failure(); diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp index 63a1524929..a5511edea1 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp +++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.cpp @@ -53,16 +53,6 @@ namespace UnitTest return false; } - const char* AssetSystemStub::GetAbsoluteDevGameFolderPath() - { - return nullptr; - } - - const char* AssetSystemStub::GetAbsoluteDevRootFolderPath() - { - return nullptr; - } - bool AssetSystemStub::GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) { return false; diff --git a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h index a73570e3c9..2dd810b1e6 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h +++ b/Gems/Atom/RPI/Code/Tests/Common/AssetSystemStub.h @@ -56,8 +56,6 @@ namespace UnitTest AZStd::unordered_map m_sourceInfoMap; bool GetSourceInfoBySourcePath(const char* sourcePath, AZ::Data::AssetInfo& assetInfo, AZStd::string& watchFolder) override; - const char* GetAbsoluteDevGameFolderPath() override; - const char* GetAbsoluteDevRootFolderPath() override; bool GetRelativeProductPathFromFullSourceOrProductPath(const AZStd::string& fullPath, AZStd::string& relativeProductPath) override; bool GenerateRelativeSourcePath( const AZStd::string& sourcePath, AZStd::string& relativePath, AZStd::string& watchFolder) override; diff --git a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp index aaa574a14a..5343c295d8 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp +++ b/Gems/Atom/RPI/Code/Tests/Common/RPITestFixture.cpp @@ -67,7 +67,7 @@ namespace UnitTest AZ::IO::Path assetPath = AZStd::string_view{ AZ::Utils::GetProjectPath() }; assetPath /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetPath.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetPath.c_str()); m_jsonRegistrationContext = AZStd::make_unique(); m_jsonSystemComponent = AZStd::make_unique(); @@ -90,7 +90,7 @@ namespace UnitTest JobManagerThreadDesc threadDesc; #if AZ_TRAIT_SET_JOB_PROCESSOR_ID threadDesc.m_cpuId = 0; // Don't set processors IDs on windows -#endif +#endif uint32_t numWorkerThreads = AZStd::thread::hardware_concurrency(); @@ -99,7 +99,7 @@ namespace UnitTest desc.m_workerThreads.push_back(threadDesc); #if AZ_TRAIT_SET_JOB_PROCESSOR_ID threadDesc.m_cpuId++; -#endif +#endif } m_jobManager = AZStd::make_unique(desc); diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp index 13b9a2ba27..3fae2ee7a3 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Application/AtomToolsApplication.cpp @@ -173,7 +173,7 @@ namespace AtomToolsFramework AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotificationBus::Broadcast( &AzToolsFramework::AssetBrowser::AssetDatabaseLocationNotifications::OnDatabaseInitialized); - AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@assets@/assetcatalog.xml"); + AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::LoadCatalog, "@products@/assetcatalog.xml"); if (!AZ::RPI::RPISystemInterface::Get()->IsInitialized()) { @@ -289,7 +289,7 @@ namespace AtomToolsFramework ExitMainLoop(); } } - + void AtomToolsApplication::SaveSettings() { if (m_activatedLocalUserSettings) @@ -378,7 +378,7 @@ namespace AtomToolsFramework ExitMainLoop(); } } - + bool AtomToolsApplication::LaunchLocalServer() { // Determine if this is the first launch of the tool by attempting to connect to a running server diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp index f27a08b08d..fd20716570 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp @@ -24,7 +24,7 @@ namespace MaterialEditor { CreateMaterialDialog::CreateMaterialDialog(QWidget* parent) - : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) + : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) { } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp index e6ffd2842f..d73737a2dc 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorBrowserInteractions.cpp @@ -106,7 +106,7 @@ namespace MaterialEditor menu->addAction("Create Material...", [entry]() { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); @@ -182,7 +182,7 @@ namespace MaterialEditor menu->addAction("Create Child Material...", [entry]() { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp index a00d3eec05..5721dfcc72 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.cpp @@ -346,7 +346,7 @@ namespace MaterialEditor AZStd::string ViewportSettingsInspector::GetDefaultUniqueSaveFilePath(const AZStd::string& baseName) const { - AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + AZStd::string savePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR; savePath += "Materials"; savePath += AZ_CORRECT_FILESYSTEM_SEPARATOR; diff --git a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py index 6708553e20..041e1a80c5 100755 --- a/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py +++ b/Gems/Atom/Tools/MaterialEditor/Scripts/GenerateAllMaterialScreenshots.py @@ -16,10 +16,10 @@ import sys import os.path import filecmp -g_devroot = azlmbr.paths.devroot -sys.path.append(os.path.join(g_devroot, 'Tests', 'Atom', 'Automated')) +g_engroot = azlmbr.paths.engroot +sys.path.append(os.path.join(g_engroot, 'Tests', 'Atom', 'Automated')) -g_materialTestFolder = os.path.join(g_devroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases') +g_materialTestFolder = os.path.join(g_engroot,'Gems','Atom','TestData','TestData','Materials','StandardPbrTestCases') # Change this to True to replace the expected screenshot images g_replaceExpectedScreenshots = False diff --git a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py index 7bd65568ed..c31047d347 100755 --- a/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py +++ b/Gems/Atom/Tools/ShaderManagementConsole/Scripts/GenerateShaderVariantListForMaterials.py @@ -135,7 +135,7 @@ def main(): # clean previously generated shader variant list file so they don't clash. pre, ext = os.path.splitext(shaderAssetInfo.relativePath) - projectShaderVariantListFilePath = os.path.join(azlmbr.paths.devassets, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist') + projectShaderVariantListFilePath = os.path.join(azlmbr.paths.projectroot, PROJECT_SHADER_VARIANTS_FOLDER, f'{pre}.shadervariantlist') pre, ext = os.path.splitext(filename) defaultShaderVariantListFilePath = f'{pre}.shadervariantlist' diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp index 5711e3ff6e..cdb941546d 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/AtomFont.cpp @@ -46,7 +46,7 @@ static void DumfontTexture(IConsoleCmdArgs* cmdArgs) if (fontName && *fontName && *fontName != '0') { - AZStd::string fontFilePath("@devroot@/"); + AZStd::string fontFilePath("@engroot@/"); fontFilePath += fontName; fontFilePath += ".bmp"; diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp index 7f676e4c10..4363ac1a62 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/EditorDiffuseProbeGridComponent.cpp @@ -389,7 +389,7 @@ namespace AZ // create the full paths char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); AZStd::string irradianceTextureFullPath; AzFramework::StringFunc::Path::Join(projectPath, irradianceTextureRelativePath.c_str(), irradianceTextureFullPath, true, true); @@ -481,7 +481,7 @@ namespace AZ AZStd::string fullPath; char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); if (!relativePath.empty()) { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp index 095c670e15..665adcd568 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Material/EditorMaterialComponentInspector.cpp @@ -529,7 +529,7 @@ namespace AZ bool MaterialPropertyInspector::SaveMaterial() const { const QString defaultPath = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + + QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp index d7fcd124d0..f325a20ac1 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/EditorReflectionProbeComponent.cpp @@ -321,7 +321,7 @@ namespace AZ } char projectPath[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", projectPath, AZ_MAX_PATH_LEN); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", projectPath, AZ_MAX_PATH_LEN); // retrieve the source cubemap path from the configuration // we need to make sure to use the same source cubemap for each bake diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp index a31885cc69..2fe5d749cf 100644 --- a/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp +++ b/Gems/AudioEngineWwise/Code/Source/Builder/AudioControlBuilderWorker.cpp @@ -105,7 +105,7 @@ namespace AudioControlBuilder Audio::ATLXmlTags::ATLPreloadRequestTag, "preload request")); } - // For each preload request in the control file, determine which config group is used for this platform and register each + // For each preload request in the control file, determine which config group is used for this platform and register each // bank listed in that preload request as a dependency. while (preloadRequestNode) { @@ -163,7 +163,7 @@ namespace AudioControlBuilder const AZ::rapidxml::xml_node* configGroupNode = configGroupMap[configGroupName]; if (!configGroupNode) { - // The config group this platform uses isn't defined in the control file. This might be intentional, so just + // The config group this platform uses isn't defined in the control file. This might be intentional, so just // generate a warning and keep going to the next preload node. AZ_TracePrintf("Audio Control Builder", "%s node for config group %s is not defined, so no banks are referenced.", Audio::ATLXmlTags::ATLConfigGroupTag, configGroupName.c_str()); @@ -188,7 +188,7 @@ namespace AudioControlBuilder } // Prepend the bank name with the relative path to the wwise sounds folder to get relative path to the bank from - // the @assets@ alias and push that into the list of banks referenced. + // the @products@ alias and push that into the list of banks referenced. AZStd::string soundsPrefix = Audio::Wwise::DefaultBanksPath; banksReferenced.emplace_back(soundsPrefix + bankNameAttribute->value()); @@ -496,7 +496,7 @@ namespace AudioControlBuilder pathDependencies.emplace(relativeBankPath, AssetBuilderSDK::ProductPathDependencyType::ProductFile); } - // For each bank figure out what events are included in the bank, then run through every event referenced in the file and + // For each bank figure out what events are included in the bank, then run through every event referenced in the file and // make sure it is in the list gathered from the banks. const auto triggersNode = node->first_node(Audio::ATLXmlTags::TriggersNodeTag); if (!triggersNode) @@ -520,7 +520,7 @@ namespace AudioControlBuilder AZStd::set wwiseEventsInReferencedBanks; - // Load all bankdeps files for all banks referenced and aggregate the list of events in those files. + // Load all bankdeps files for all banks referenced and aggregate the list of events in those files. for (const AZStd::string& relativeBankPath : banksReferenced) { // Create the full path to the bankdeps file from the bank file. diff --git a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp index 3a1916edc3..22fa4cab7d 100644 --- a/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp +++ b/Gems/AudioEngineWwise/Code/Source/Builder/WwiseBuilderWorker.cpp @@ -52,7 +52,7 @@ namespace WwiseBuilder { fileNames.push_back(dependenciesArray[dependencyIndex].GetString()); } - + // The dependency array is empty, which likely means it was modified by hand. However, every bank is dependent // on init.bnk (other than itself), so just force add it as a dependency here. and emit a warning. if (fileNames.size() == 0) @@ -93,7 +93,7 @@ namespace WwiseBuilder void WwiseBuilderWorker::Initialize() { - AZ::IO::Path configFile("@devassets@"); + AZ::IO::Path configFile("@projectroot@"); configFile /= Audio::Wwise::DefaultBanksPath; configFile /= Audio::Wwise::ConfigFile; @@ -180,7 +180,7 @@ namespace WwiseBuilder { AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Starting Job.\n"); AZ::IO::PathView fullPath(request.m_fullPath); - + if (m_isShuttingDown) { AZ_TracePrintf(AssetBuilderSDK::ErrorWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str()); @@ -204,7 +204,7 @@ namespace WwiseBuilder AZ::Outcome gatherProductDependenciesResponse = GatherProductDependencies(request.m_fullPath, request.m_sourceFile, dependencyPaths); if (!gatherProductDependenciesResponse.IsSuccess()) { - AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s", + AZ_Error(WwiseBuilderWindowName, false, "Dependency gathering for %s failed. %s", request.m_fullPath.c_str(), gatherProductDependenciesResponse.GetError().c_str()); } else diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp index 2387588f31..e65dbcce9f 100644 --- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp +++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseBuilderTest.cpp @@ -28,7 +28,7 @@ protected: { m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -39,7 +39,7 @@ protected: assetRoot /= "Cache"; AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override @@ -158,7 +158,7 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_InitBank_NoMetadata_NoDependencies) TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoMetadata_NoDependencies) { - // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank. + // Should generate a warning after trying to find metadata for the given bank, when the bank is not the init bank. // Warning should be about not being able to generate full dependency information without the metadata file. TestSuccessCaseNoDependencies("test_doesNotExist.bnk", true); } @@ -180,15 +180,15 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MultipleDependencies) TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_DependencyArrayNonexistent_NoDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does - // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but + // Should generate a warning when trying to get dependency info from metadata file, but the dependency field does + // not an empty array. Warning should be describing that a dependency on the init bank was added by default, but // the full dependency list could not be generated. TestSuccessCaseNoDependencies("test_bank7.bnk", true); } TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_NoDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is + // Should generate a warning when trying to get dependency info from metadata file, but the dependency field is // an empty array. Warning should be describing that a dependency on the init bank was added by default, but the // full dependency list could not be generated. TestSuccessCaseNoDependencies("test_bank8.bnk", true); @@ -196,8 +196,8 @@ TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_NoElementsInDependencyArray_N TEST_F(WwiseBuilderTests, WwiseBuilder_ContentBank_MissingInitBankDependency_MultipleDependencies) { - // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the - // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was + // Should generate a warning when trying to get dependency info from metadata file, but the dependency info in the + // metadata doesn't include the init bank. Warning should be describing that a dependency on the init bank was // added by default. AZStd::vector expectedPaths = { "Sounds/wwise/init.bnk", diff --git a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp index 3724069045..4ee816b048 100644 --- a/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp +++ b/Gems/AudioEngineWwise/Code/Tests/AudioEngineWwiseTest.cpp @@ -231,7 +231,7 @@ namespace UnitTest m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -253,10 +253,10 @@ namespace UnitTest AZ_TEST_ASSERT(serializeContext != nullptr); Audio::Wwise::ConfigurationSettings::Reflect(serializeContext); - // Set the @assets@ alias to the path where *this* cpp file lives. + // Set the @products@ alias to the path where *this* cpp file lives. AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath()); AZ::StringFunc::Path::Join(rootFolder.c_str(), "Test.Assets/Gems/AudioEngineWwise", rootFolder); - m_fileIO->SetAlias("@assets@", rootFolder.c_str()); + m_fileIO->SetAlias("@products@", rootFolder.c_str()); // So we don't have to compute it in each test... AZStd::string defaultBanksPath(Audio::Wwise::DefaultBanksPath); @@ -303,26 +303,12 @@ namespace UnitTest m_mapEntry.m_bankSubPath = "soundbanks"; config.m_platformMappings.push_back(m_mapEntry); - // Unfortunately we are writing to the config file that is simulated to be in the @assets@ subfolder - // This will cause an issue during save. Since 'm_configFilePath' is an absolute path, we need to - // reset the @assets@ alias to a meaningful assets path that does not contain any root of the m_configFilePath - // in order to write to the config file and proceed - //AZStd::string rootFolder(AZ::Test::GetCurrentExecutablePath()); - //AZ::IO::Path tempAssetPath(rootFolder); - //tempAssetPath /= "Cache"; - - //AZStd::string previousAlias = m_fileIO->GetAlias("@assets@"); - //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str()); - config.Save(m_configFilePath); - //m_fileIO->SetAlias("@assets@", previousAlias.c_str()); m_wwiseImpl.SetBankPaths(); - //m_fileIO->SetAlias("@assets@", tempAssetPath.c_str()); m_fileIO->Remove(m_configFilePath.c_str()); - //m_fileIO->SetAlias("@assets@", previousAlias.c_str()); EXPECT_STREQ(m_wwiseImpl.m_soundbankFolder.c_str(), "sounds/wwise/soundbanks/"); } diff --git a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp index 996a2a80b6..aa93a2bc12 100644 --- a/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp +++ b/Gems/AudioSystem/Code/Source/Engine/ATLComponents.cpp @@ -977,7 +977,7 @@ namespace Audio , m_rPreloadRequests(rPreloadRequests) , m_nTriggerImplIDCounter(AUDIO_TRIGGER_IMPL_ID_NUM_RESERVED) , m_rFileCacheMgr(rFileCacheMgr) - , m_rootPath("@assets@") + , m_rootPath("@products@") #if !defined(AUDIO_RELEASE) , m_pDebugNameStore(nullptr) #endif // !AUDIO_RELEASE diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp index 0c697f12b6..21ec1a4603 100644 --- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp +++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp @@ -292,7 +292,7 @@ namespace Blast void BlastSystemComponent::SaveConfiguration() { - auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (!assetRoot) { @@ -309,7 +309,7 @@ namespace Blast void BlastSystemComponent::CheckoutConfiguration() { - const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + const auto assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); AZStd::string fullPath; AzFramework::StringFunc::Path::Join(assetRoot, DefaultConfigurationPath, fullPath); diff --git a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp index 21b0b28c47..85c9c696a2 100644 --- a/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp +++ b/Gems/CertificateManager/Code/Source/DataSource/FileDataSource.cpp @@ -16,7 +16,7 @@ namespace CertificateManager { static bool ReadFileIntoString(const char* filename, AZStd::vector& outBuffer) { - AZStd::string certificatePath = "@assets@/certificates/"; + AZStd::string certificatePath = "@products@/certificates/"; certificatePath.append(filename); AZ::IO::FileIOBase* fileBase = AZ::IO::FileIOBase::GetInstance(); @@ -58,7 +58,7 @@ namespace CertificateManager return true; } - FileDataSource::FileDataSource() + FileDataSource::FileDataSource() : m_privateKeyPEM(nullptr) , m_certificatePEM(nullptr) , m_certificateAuthorityCertPEM(nullptr) @@ -73,13 +73,13 @@ namespace CertificateManager azfree(m_privateKeyPEM); azfree(m_certificatePEM); azfree(m_certificateAuthorityCertPEM); - } + } void FileDataSource::ConfigureDataSource(const char* keyPath, const char* certPath, const char* caPath) { ConfigurePrivateKey(keyPath); ConfigureCertificate(certPath); - ConfigureCertificateAuthority(caPath); + ConfigureCertificateAuthority(caPath); } void FileDataSource::ConfigurePrivateKey(const char* path) @@ -107,7 +107,7 @@ namespace CertificateManager if (path != nullptr) { LoadGenericFile(path,m_certificatePEM); - } + } } void FileDataSource::ConfigureCertificateAuthority(const char* path) @@ -133,7 +133,7 @@ namespace CertificateManager { return m_certificateAuthorityCertPEM; } - + bool FileDataSource::HasPublicKey() const { return m_certificatePEM != nullptr; @@ -143,7 +143,7 @@ namespace CertificateManager { return m_certificatePEM; } - + bool FileDataSource::HasPrivateKey() const { return m_privateKeyPEM != nullptr; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp index 300543c896..d5fa3867e0 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp @@ -50,7 +50,7 @@ namespace EMotionFX // Create EMotion FX allocators Allocators::Create(); - + // create the new object gEMFX = AZ::Environment::CreateVariable(kEMotionFXInstanceVarName); gEMFX.Set(EMotionFXManager::Create()); @@ -166,11 +166,11 @@ namespace EMotionFX delete m_debugDraw; m_debugDraw = nullptr; - + m_eventManager->Destroy(); m_eventManager = nullptr; - + // delete the thread datas for (uint32 i = 0; i < m_threadDatas.size(); ++i) { @@ -341,7 +341,7 @@ namespace EMotionFX void EMotionFXManager::InitAssetFolderPaths() { // Initialize the asset source folder path. - const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + const char* assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); if (assetSourcePath) { m_assetSourceFolder = assetSourcePath; @@ -361,12 +361,12 @@ namespace EMotionFX } else { - AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@devassets@'."); + AZ_Warning("EMotionFX", false, "Failed to set asset source path for alias '@projectroot@'."); } // Initialize the asset cache folder path. - const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + const char* assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); if (assetCachePath) { m_assetCacheFolder = assetCachePath; @@ -386,7 +386,7 @@ namespace EMotionFX } else { - AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@assets@'."); + AZ_Warning("EMotionFX", false, "Failed to set asset cache path for alias '@products@'."); } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp index 129d005f80..2d65a228b7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp @@ -72,13 +72,13 @@ namespace EMStudio { AZStd::string filename; - AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string assetCachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(assetCachePath); AZStd::string relativePath; EBUS_EVENT_RESULT(relativePath, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, assetId); AzFramework::StringFunc::AssetDatabasePath::Join(assetCachePath.c_str(), relativePath.c_str(), filename); - + return filename; } @@ -243,7 +243,7 @@ namespace EMStudio void FileManager::SourceFileChanged(AZStd::string relativePath, AZStd::string scanFolder, [[maybe_unused]] AZ::TypeId sourceTypeId) { AZStd::string filename; - AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); + AZStd::string assetSourcePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectroot@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), relativePath.c_str(), filename); @@ -373,7 +373,7 @@ namespace EMStudio const ProductAssetBrowserEntry* product = azrtti_cast(assetBrowserEntry); filename.clear(); - AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@"); + AZStd::string cachePath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@"); AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); AzFramework::StringFunc::AssetDatabasePath::Join(cachePath.c_str(), product->GetRelativePath().c_str(), filename); @@ -395,7 +395,7 @@ namespace EMStudio { return AZStd::string(); } - + return filenames[0]; } @@ -435,12 +435,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Actor successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Actor failed to save

%s", result.c_str()).c_str()); } } @@ -574,12 +574,12 @@ namespace EMStudio AZStd::string result; if (GetCommandManager()->ExecuteCommand(command, result) == false) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("MotionSet failed to save

%s", result.c_str()).c_str()); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "MotionSet successfully saved"); } } @@ -608,7 +608,7 @@ namespace EMStudio } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - + AZStd::string FileManager::LoadAnimGraphFileDialog([[maybe_unused]] QWidget* parent) { GetManager()->SetAvoidRendering(true); @@ -618,7 +618,7 @@ namespace EMStudio { return AZStd::string(); } - + return filenames[0]; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp index 06088790d9..002634ea90 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp @@ -378,7 +378,7 @@ namespace EMStudio // reset action m_resetAction = menu->addAction(tr("&Reset"), this, &MainWindow::OnReset, QKeySequence::New); m_resetAction->setObjectName("EMFX.MainWindow.ResetAction"); - + // save all m_saveAllAction = menu->addAction(tr("Save All..."), this, &MainWindow::OnSaveAll, QKeySequence::Save); m_saveAllAction->setObjectName("EMFX.MainWindow.SaveAllAction"); @@ -467,7 +467,7 @@ namespace EMStudio menu->addAction("Documentation", this, [] { QDesktopServices::openUrl(QUrl("https://o3de.org/docs/")); - }); + }); menu->addAction("Forums", this, [] { @@ -491,7 +491,7 @@ namespace EMStudio // load preferences PluginOptionsNotificationsBus::Router::BusRouterConnect(); - LoadPreferences(); + LoadPreferences(); m_autosaveTimer->setInterval(m_options.GetAutoSaveInterval() * 60 * 1000); // Create the dirty file manager and register the workspace callback. @@ -1072,7 +1072,7 @@ namespace EMStudio // get only the version number of EMotion FX AZStd::string emfxVersionString = EMotionFX::GetEMotionFX().GetVersionString(); AzFramework::StringFunc::Replace(emfxVersionString, "EMotion FX ", "", true /* case sensitive */); - + // set the window title // only set the EMotion FX version if the filename is empty AZStd::string windowTitle; @@ -1359,7 +1359,7 @@ namespace EMStudio void MainWindow::LoadCharacter(const AZ::Data::AssetId& actorAssetId, const AZ::Data::AssetId& animgraphId, const AZ::Data::AssetId& motionSetId) { m_characterFiles.clear(); - AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@"); + AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@"); AZStd::string filename; AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); @@ -1543,12 +1543,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Workspace successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Workspace failed to save

%s", result.c_str()).c_str()); } } @@ -1575,12 +1575,12 @@ namespace EMStudio AZStd::string result; if (EMStudio::GetCommandManager()->ExecuteCommand(command, result)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Workspace successfully saved"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Workspace failed to save

%s", result.c_str()).c_str()); } } @@ -1644,7 +1644,7 @@ namespace EMStudio Workspace* workspace = GetManager()->GetWorkspace(); workspace->SetDirtyFlag(true); - } + } void MainWindow::OnReset() { @@ -2312,7 +2312,7 @@ namespace EMStudio void MainWindow::Activate(const AZ::Data::AssetId& actorAssetId, const EMotionFX::AnimGraph* animGraph, const EMotionFX::MotionSet* motionSet) { - AZStd::string cachePath = gEnv->pFileIO->GetAlias("@assets@"); + AZStd::string cachePath = gEnv->pFileIO->GetAlias("@products@"); AZStd::string filename; AzFramework::StringFunc::AssetDatabasePath::Normalize(cachePath); @@ -2776,17 +2776,17 @@ namespace EMStudio AZStd::string result; if (GetCommandManager()->ExecuteCommandGroup(commandGroup, result, false)) { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_SUCCESS, "Autosave completed"); } else { - GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, + GetNotificationWindowManager()->CreateNotificationWindow(NotificationWindow::TYPE_ERROR, AZStd::string::format("Autosave failed

%s", result.c_str()).c_str()); } } - + void MainWindow::moveEvent(QMoveEvent* event) { MCORE_UNUSED(event); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp index 4cdf645b16..ea7c92b742 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Workspace.cpp @@ -428,7 +428,7 @@ namespace EMStudio continue; } - AzFramework::StringFunc::Replace(commands[i], "@assets@/", assetCacheFolder.c_str(), true /* case sensitive */); + AzFramework::StringFunc::Replace(commands[i], "@products@/", assetCacheFolder.c_str(), true /* case sensitive */); // add the command to the command group commandGroup->AddCommandString(commands[i]); diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp index 3e459d31d6..3593f58ff2 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp @@ -6,6 +6,8 @@ * */ +#include + #include #include #include @@ -66,14 +68,10 @@ namespace EMotionFX // through this method. Once EMotionFX is integrated to the asset system this can go away. AZStd::string assetFilename; EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId()); - const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - if (devAssetsPath) + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + if (!projectPath.empty()) { - AZStd::string assetSourcePath = devAssetsPath; - - AzFramework::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); - AZStd::string filename; - AzFramework::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename); + AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() }; assetData->m_emfxAnimGraph->SetFileName(filename.c_str()); } @@ -81,7 +79,7 @@ namespace EMotionFX { if (GetEMotionFX().GetIsInEditorMode()) { - AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str()); + AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str()); } assetData->m_emfxAnimGraph->SetFileName(assetFilename.c_str()); } diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp index 5ca9a34e72..280cedd06a 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,7 @@ namespace EMotionFX const char* motionFile = entry->GetFilename(); AZ::Data::AssetId motionAssetId; EBUS_EVENT_RESULT(motionAssetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, motionFile, azrtti_typeid(), false); - + // if it failed to find it, it might be still compiling - try forcing an immediate compile: if (!motionAssetId.IsValid()) { @@ -149,14 +150,11 @@ namespace EMotionFX // through this method. Once EMotionFX is integrated to the asset system this can go away. AZStd::string assetFilename; EBUS_EVENT_RESULT(assetFilename, AZ::Data::AssetCatalogRequestBus, GetAssetPathById, asset.GetId()); - const char* devAssetsPath = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - if (devAssetsPath) - { - AZStd::string assetSourcePath = devAssetsPath; - AZ::StringFunc::AssetDatabasePath::Normalize(assetSourcePath); - AZStd::string filename; - AZ::StringFunc::AssetDatabasePath::Join(assetSourcePath.c_str(), assetFilename.c_str(), filename); + AZ::IO::FixedMaxPath projectPath = AZ::Utils::GetProjectPath(); + if (!projectPath.empty()) + { + AZ::IO::FixedMaxPathString filename{ (projectPath / assetFilename).LexicallyNormal().FixedMaxPathStringAsPosix() }; assetData->m_emfxMotionSet->SetFilename(filename.c_str()); } @@ -164,11 +162,11 @@ namespace EMotionFX { if (GetEMotionFX().GetIsInEditorMode()) { - AZ_Warning("EMotionFX", false, "Failed to retrieve asset source path with alias '@devassets@'. Cannot set absolute filename for '%s'", assetFilename.c_str()); + AZ_Warning("EMotionFX", false, "Failed to retrieve project root path . Cannot set absolute filename for '%s'", assetFilename.c_str()); } assetData->m_emfxMotionSet->SetFilename(assetFilename.c_str()); } - + // now load them in: const EMotionFX::MotionSet::MotionEntries& motionEntries = assetData->m_emfxMotionSet->GetMotionEntries(); // Get the motions in the motion set. Escalate them to the top of the build queue first so that they can be done in parallel. @@ -179,7 +177,7 @@ namespace EMotionFX const char* motionFilename = motionEntry->GetFilename(); AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::EscalateAssetBySearchTerm, motionFilename); } - + // now that they're all escalated, the asset processor will be processing them across all threads, and we can request them one by one: for (const auto& item : motionEntries) { diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp index 0f87c488b9..08e99f97d0 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp @@ -487,9 +487,9 @@ namespace EMotionFX return; } - SetMediaRoot("@assets@"); - // \todo Right now we're pointing at the @devassets@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through - // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @assets@ cache, but write to the @devassets@ data/metadata. + SetMediaRoot("@products@"); + // \todo Right now we're pointing at the @projectroot@ location (source) and working from there, because .actor and .motion (motion) aren't yet processed through + // the scene pipeline. Once they are, we'll need to update various segments of the Tool to always read from the @products@ cache, but write to the @projectroot@ data/metadata. EMotionFX::GetEMotionFX().InitAssetFolderPaths(); // Register EMotionFX event handler diff --git a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp index 25cd840cda..44453ed70f 100644 --- a/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp +++ b/Gems/EMotionFX/Code/Tests/Bugs/CanDeleteMotionSetWhenSameMotionInTwoMotionSets.cpp @@ -25,11 +25,11 @@ namespace EMotionFX ExecuteCommands({ R"str(CreateMotionSet -name MotionSet0)str", R"str(CreateMotionSet -name MotionSet1)str", - R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", - R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", + R"str(MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", + R"str(MotionSetAddMotion -motionSetID 1 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle)str", R"str(MotionSetRemoveMotion -motionSetID 0 -motionIds rin_idle)str", R"str(RemoveMotionSet -motionSetID 0)str", - R"str(RemoveMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str", + R"str(RemoveMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion)str", }); EMStudio::MotionSetsWindowPlugin* motionSetsWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionSetsWindowPlugin::CLASS_ID)); diff --git a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp index ce0b586bfe..e4e58fa01d 100644 --- a/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp +++ b/Gems/EMotionFX/Code/Tests/CommandRemoveMotionTests.cpp @@ -33,7 +33,7 @@ namespace EMotionFX ASSERT_TRUE(motionSet) << "Motion set with id 0 does not exist"; motionSetsWindowPlugin->SetSelectedSet(motionSet); - const std::string filename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"; + const std::string filename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"; ExecuteCommands({ "ImportMotion -filename " + filename, "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds " + filename + ";rin_idle", diff --git a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp index 0155b38da2..7b9f23f094 100644 --- a/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp +++ b/Gems/EMotionFX/Code/Tests/EMotionFXBuilderTests.cpp @@ -55,7 +55,7 @@ namespace EMotionFX // By using this mock catalog, we can pretend to load the specific referenced assets without actually loading anything. UnitTest::MockLoadAssetCatalogAndHandler testAssetCatalog({ referencedAnimGraph, referencedMotionSet }); - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -68,7 +68,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_NoDependency_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/AnimGraphExampleNoDependency.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -78,7 +78,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_InvalidFilePath_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -88,7 +88,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestAnimGraphAsset_EmptyFile_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyAnimGraphExample.animgraph"; AZStd::vector productDependencies; EMotionFXBuilder::AnimGraphBuilderWorker builderWorker; @@ -100,7 +100,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_HasReferenceNode_OutputProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -112,7 +112,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_NoDependency_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExampleNoDependency.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -122,7 +122,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_InvalidFilePath_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/InvalidPathExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; @@ -132,7 +132,7 @@ namespace EMotionFX TEST_F(EMotionFXBuilderTests, TestMotionSetAsset_EmptyFile_OutputNoProductDependencies) { - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/EmptyMotionSetExample.motionset"; ProductPathDependencySet productDependencies; EMotionFXBuilder::MotionSetBuilderWorker builderWorker; diff --git a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp index b1650ce0c6..905c4a825b 100644 --- a/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp +++ b/Gems/EMotionFX/Code/Tests/Editor/MotionSetLoadEscalation.cpp @@ -124,7 +124,7 @@ namespace EMotionFX { using testing::_; - const AZStd::string fileName = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; + const AZStd::string fileName = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/EMotionFXBuilderTestAssets/MotionSetExample.motionset"; MockAssetSystemRequests assetSystem; EXPECT_CALL(assetSystem, CompileAssetSync(_)) diff --git a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp index ff7ead3800..36abf2b1d2 100644 --- a/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp +++ b/Gems/EMotionFX/Code/Tests/Game/SamplePerformanceTests.cpp @@ -302,7 +302,7 @@ namespace EMotionFX GetEMotionFX().SetMediaRootFolder(assetFolder.c_str()); GetEMotionFX().InitAssetFolderPaths(); - const char* actorFilename = "@assets@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor"; + const char* actorFilename = "@products@\\animationsamples\\advanced_rinlocomotion\\actor\\rinactor.actor"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -402,9 +402,9 @@ namespace EMotionFX // This path points to assets in the advance rin demo. // To test different assets, change the path here. - const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; - const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; - const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; + const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; + const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; + const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -714,9 +714,9 @@ namespace EMotionFX // This path points to assets in the advance rin demo. // To test different assets, change the path here. - const char* actorFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; - const char* motionSetFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; - const char* animGraphFilename = "@assets@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; + const char* actorFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\Actor\\rinActor.actor"; + const char* motionSetFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.motionset"; + const char* animGraphFilename = "@products@\\AnimationSamples\\Advanced_RinLocomotion\\AnimationEditorFiles\\Advanced_RinLocomotion.animgraph"; Importer* importer = GetEMotionFX().GetImporter(); importer->SetLoggingEnabled(false); @@ -772,13 +772,13 @@ namespace EMotionFX TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceNonUniform) { // Make sure that the motion is set to use NonUniform sampling! Change this in the scene settings! Otherwise you get wrong results. - TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion"); + TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_idle.motion"); } TEST_F(PerformanceTestFixture, DISABLED_MotionSamplingPerformanceUniform) { // Make sure that the motion is set to use Uniform sampling! Change this in the scene settings! Otherwise you get wrong results. - TestMotionSamplingPerformance("@assets@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion"); + TestMotionSamplingPerformance("@products@\\animationsamples\\advanced_rinlocomotion\\motions\\rin_walk_kick_01.motion"); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp index 9b18ca5862..31e1f75d29 100644 --- a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp +++ b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp @@ -33,7 +33,7 @@ namespace EMotionFX ASSERT_EQ(GetActorManager().GetNumActors(), 0); // Load an Actor - const char* actorCmd{ "ImportActor -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" }; + const char* actorCmd{ "ImportActor -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" }; { AZStd::string result; EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(actorCmd, result)) << result.c_str(); diff --git a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp index cccf744cfc..27692a90ff 100644 --- a/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp +++ b/Gems/EMotionFX/Code/Tests/Integration/PoseComparisonTests.cpp @@ -297,16 +297,16 @@ namespace EMotionFX INSTANTIATE_TEST_CASE_P(Integ_TestPoses, INTEG_PoseComparisonFixture, ::testing::Values( PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" ), PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Pendulum/pendulum.emfxrecording" ) ) ); @@ -314,10 +314,10 @@ namespace EMotionFX INSTANTIATE_TEST_CASE_P(Integ_TestPoseComparison, INTEG_TestPoseComparisonFixture, ::testing::Values( PoseComparisonFixtureParams ( - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", - "@assets@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.motionset", + "@products@/Test.Assets/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.emfxrecording" ) ) ); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp index 287c34723f..16b223914e 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/PreviewMotionFixture.cpp @@ -30,12 +30,12 @@ namespace EMotionFX motionSetsWindowPlugin->SetSelectedSet(motionSet); ExecuteCommands({ - "ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", - "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle" + "ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", + "MotionSetAddMotion -motionSetID 0 -motionFilenamesAndIds @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion;rin_idle" }); char resolvedPath[AZ::IO::MaxPathLength]; - EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath))); + EXPECT_TRUE(AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion", resolvedPath, AZ_ARRAY_SIZE(resolvedPath))); m_motionFileName = resolvedPath; AzFramework::ApplicationRequests::Bus::Broadcast([](AzFramework::ApplicationRequests* requests, AZStd::string& path) { requests->NormalizePathKeepCase(path); }, m_motionFileName); m_motionName = "rin_idle"; diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp index 1f9a78a413..d53ddcc924 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp @@ -44,7 +44,7 @@ namespace EMotionFX RecordProperty("test_case_id", "C16302179"); - const AZStd::string motionAsset("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + const AZStd::string motionAsset("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); const AZStd::string createAnimGraphCmd("CreateAnimGraph"); const AZStd::string motionSetName("TestMotionSet"); const AZStd::string createMotionSetCmd("CreateMotionSet -motionSetID 42 -name " + motionSetName); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp index 82bfeba557..bb8368b17e 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/CanAddMotions.cpp @@ -36,7 +36,7 @@ namespace EMotionFX RecordProperty("test_case_id", "C1559124"); const QString assetName = "rin_idle"; // Asset name to appear in table - const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + const AZStd::string motionCmd = AZStd::string::format("ImportMotion -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); auto motionWindowPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::MotionWindowPlugin::CLASS_ID)); ASSERT_TRUE(motionWindowPlugin) << "Could not find the Motion Window Plugin"; diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp index 6804d351cf..14d27ed60f 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Motions/MotionPlaybacksTests.cpp @@ -38,7 +38,7 @@ namespace EMotionFX EXPECT_EQ(table->rowCount(), 1) << "Expected the table to have no rows yet"; // Create actor and actor instance. - const char* actorFilename = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor"; + const char* actorFilename = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor"; AZStd::unique_ptr m_actor = EMotionFX::GetImporter().LoadActor(actorFilename); EXPECT_TRUE(m_actor.get() != nullptr) << "Actor not loaded."; EMotionFX::ActorInstance* m_actorInstance = ActorInstance::Create(m_actor.get()); diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp index 4eb44a54ab..bdbc50fe9c 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanAutoSaveFile.cpp @@ -26,7 +26,7 @@ namespace EMotionFX EMStudio::GetMainWindow()->ApplicationModeChanged("AnimGraph"); // Load Rin anim graph. - const char* rinGraph = "@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph"; + const char* rinGraph = "@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.animgraph"; const AZStd::string rinGraphPath = ResolvePath(rinGraph); AZStd::string command = AZStd::string::format("LoadAnimGraph -filename \"%s\"", rinGraphPath.c_str()); AZStd::string result; diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp index b24971bfde..73a0f1c865 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp @@ -551,7 +551,7 @@ namespace EMotionFX QString GetTestMotionFileName() const { - AZStd::string resolvedAssetPath = this->ResolvePath("@devroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); + AZStd::string resolvedAssetPath = this->ResolvePath("@engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin_idle.motion"); return QString::fromUtf8(resolvedAssetPath.data(), aznumeric_cast(resolvedAssetPath.size())); } diff --git a/Gems/EditorPythonBindings/Assets/release_notes.md b/Gems/EditorPythonBindings/Assets/release_notes.md index 4a4b5bc71f..59192e1fdc 100644 --- a/Gems/EditorPythonBindings/Assets/release_notes.md +++ b/Gems/EditorPythonBindings/Assets/release_notes.md @@ -59,7 +59,7 @@ The API: - ExecuteByString(string) – runs a string buffer in the Python VM; it returns no value - ExecuteByFilename(string) – loads a file off of the disk to execute in the Python VM; the call returns no value. The filename can contain an alias such as - ‘\@devroot\@’ to execute a project relative file inside the Editor + ‘\@projectroot\@’ to execute a project relative file inside the Editor #### New Console Commands diff --git a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp index 4ca40a5bab..81476bdd7f 100644 --- a/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp +++ b/Gems/EditorPythonBindings/Code/Source/PythonReflectionComponent.cpp @@ -38,7 +38,7 @@ namespace EditorPythonBindings static constexpr const char* s_default = "default"; static constexpr const char* s_globals = "globals"; - // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context + // a structure for pybind11 to bind to hold constants, properties, and enums from the Behavior Context struct StaticPropertyHolder final { AZ_CLASS_ALLOCATOR(StaticPropertyHolder, AZ::SystemAllocator, 0); @@ -54,7 +54,7 @@ namespace EditorPythonBindings if (m_behaviorContext == nullptr) { return false; - } + } m_fullName = PyModule_GetName(scope.ptr()); @@ -199,12 +199,10 @@ namespace EditorPythonBindings } }); - RegisterAliasIfExists(pathsModule, "@devroot@", "devroot"); RegisterAliasIfExists(pathsModule, "@engroot@", "engroot"); - RegisterAliasIfExists(pathsModule, "@assets@", "assets"); - RegisterAliasIfExists(pathsModule, "@devassets@", "devassets"); + RegisterAliasIfExists(pathsModule, "@products@", "products"); + RegisterAliasIfExists(pathsModule, "@projectroot@", "projectroot"); RegisterAliasIfExists(pathsModule, "@log@", "log"); - RegisterAliasIfExists(pathsModule, "@root@", "root"); const char* executableFolder = nullptr; AZ::ComponentApplicationBus::BroadcastResult(executableFolder, &AZ::ComponentApplicationBus::Events::GetExecutableFolder); @@ -363,7 +361,7 @@ namespace EditorPythonBindings m_staticPropertyHolderMap.reset(); EditorPythonBindings::EditorPythonBindingsNotificationBus::Handler::BusDisconnect(); } - + void PythonReflectionComponent::OnImportModule(PyObject* module) { pybind11::module parentModule = pybind11::cast(module); diff --git a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp index cecbf15c5a..876ef19803 100644 --- a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp +++ b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp @@ -524,7 +524,7 @@ namespace EditorPythonBindings { AZ::IO::Path newSourcePath = jsonSourcePathPointer; // Resolve any file aliases first - Do not use ResolvePath() as that assumes - // any relative path is underneath the @assets@ alias + // any relative path is underneath the @products@ alias if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr) { AZ::IO::FixedMaxPath replacedAliasPath; @@ -803,7 +803,7 @@ namespace EditorPythonBindings return Result::Error_InvalidFilename; } - // support the alias version of a script such as @devroot@/Editor/Scripts/select_story_anim_objects.py + // support the alias version of a script such as @engroot@/Editor/Scripts/select_story_anim_objects.py AZStd::string theFilename(filename); { char resolvedPath[AZ_MAX_PATH_LEN] = { 0 }; diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp index 12d7d696d3..5aa4921287 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp +++ b/Gems/EditorPythonBindings/Code/Tests/PythonBindingLibTests.cpp @@ -268,7 +268,7 @@ print ('entityId invalid is ' + str(entityId.id)) { Skip = 0, ImportModule, - TestCallHit, + TestCallHit, TestTypeDoCall1 }; @@ -302,7 +302,7 @@ print ('entityId invalid is ' + str(entityId.id)) pybind11::exec(R"( import sys, os import azlmbr.paths - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests')) from test_package import import_test as itest print('ImportModule') itest.test_call() @@ -401,8 +401,8 @@ print ('entityId invalid is ' + str(entityId.id)) pybind11::exec(R"( import sys, os import azlmbr.paths - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests')) - sys.path.append(os.path.join(azlmbr.paths.devroot,'Gems','EditorPythonBindings','Code','Tests','test_package')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests')) + sys.path.append(os.path.join(azlmbr.paths.engroot,'Gems','EditorPythonBindings','Code','Tests','test_package')) from test_package import import_many import_many.test_many_entity_id() diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp index f68bef1c93..96619997bc 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp +++ b/Gems/EditorPythonBindings/Code/Tests/PythonReflectionComponentTests.cpp @@ -161,7 +161,7 @@ namespace UnitTest ->Method("accept_vector_of_floats", &PythonReflectionContainerSimpleTypes::AcceptVectorOfFloats, nullptr, "") ->Method("return_vector_of_doubles", &PythonReflectionContainerSimpleTypes::ReturnVectorOfDoubles, nullptr, "") ->Method("accept_vector_of_doubles", &PythonReflectionContainerSimpleTypes::AcceptVectorOfDoubles, nullptr, "") - ->Property("vector_of_s8", + ->Property("vector_of_s8", [](PythonReflectionContainerSimpleTypes* self) { return self->m_s8ValueValues.ReturnValues(); }, [](PythonReflectionContainerSimpleTypes* self, const AZStd::vector& values) { return self->m_s8ValueValues.AcceptValues(values); }) ->Property("vector_of_u8", @@ -792,7 +792,7 @@ namespace UnitTest theAsset = reflectAny.access_any_ref() if( reflectAny.compare_asset_ids(theAsset,testObject.theAsset) ): print ('MutateAssetId') - + )"); } catch ([[maybe_unused]] const std::exception& e) @@ -1429,7 +1429,6 @@ namespace UnitTest { Skip = 0, EngrootIs, - DevrootIs, pathResolvedTo, }; @@ -1442,10 +1441,6 @@ namespace UnitTest { return static_cast(LogTypes::EngrootIs); } - else if (AzFramework::StringFunc::StartsWith(message, "devroot is ")) - { - return static_cast(LogTypes::DevrootIs); - } else if (AzFramework::StringFunc::StartsWith(message, "path resolved to ")) { return static_cast(LogTypes::pathResolvedTo); @@ -1470,9 +1465,6 @@ namespace UnitTest if (len(azlmbr.paths.engroot) != 0): print ('engroot is {}'.format(azlmbr.paths.engroot)) - if (len(azlmbr.paths.devroot) != 0): - print ('devroot is {}'.format(azlmbr.paths.devroot)) - path = azlmbr.paths.resolve_path('@engroot@/engineassets/texturemsg/defaultsolids.mtl') if (path.find('@engroot@') == -1): print ('path resolved to {}'.format(path)) @@ -1487,7 +1479,6 @@ namespace UnitTest e.Deactivate(); EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::EngrootIs], 1); - EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::DevrootIs], 1); EXPECT_EQ(m_testSink.m_evaluationMap[(int)LogTypes::pathResolvedTo], 1); } } diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h index a0109f8029..143863b4c8 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h +++ b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h @@ -81,7 +81,6 @@ namespace UnitTest } m_fileIOHelper = AZStd::make_unique(); - m_fileIOHelper->m_fileIO.SetAlias("@devroot@", m_engineRoot.c_str()); m_fileIOHelper->m_fileIO.SetAlias("@engroot@", m_engineRoot.c_str()); AzFramework::Application::Descriptor appDesc; diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl index 38747553a9..7dbe516aa5 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelLoading.inl @@ -27,7 +27,7 @@ namespace GameStateSamples IConsole* iConsole = iSystem ? iSystem->GetIConsole() : nullptr; if (iConsole) { - iConsole->GetCVar("level_load_screen_uicanvas_path")->Set("@assets@/ui/canvases/defaultlevelloadingscreen.uicanvas"); + iConsole->GetCVar("level_load_screen_uicanvas_path")->Set("@products@/ui/canvases/defaultlevelloadingscreen.uicanvas"); iConsole->GetCVar("level_load_screen_sequence_to_auto_play")->Set("DefaultLevelLoadingAnimatedSequence"); } } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl index 63fea35224..4227e45fe9 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelPaused.inl @@ -182,7 +182,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLevelPaused::GetPauseMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultpausemenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultpausemenuscreen.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl index f9ec19581c..a4af32feb8 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLevelRunning.inl @@ -206,6 +206,6 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLevelRunning::GetPauseButtonCanvasAssetPath() { - return "@assets@/ui/canvases/defaultpausebuttonfortouchscreens.uicanvas"; + return "@products@/ui/canvases/defaultpausebuttonfortouchscreens.uicanvas"; } } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl index dc658611b5..4a4fbac93a 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateLocalUserLobby.inl @@ -223,7 +223,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateLocalUserLobby::GetSignedInUserOverlayCanvasAssetPath() { - return "@assets@/ui/canvases/defaultsignedinusersoverlay.uicanvas"; + return "@products@/ui/canvases/defaultsignedinusersoverlay.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -282,7 +282,7 @@ namespace GameStateSamples } // ...sort them by index and then go through to check whether they have been - // assigned a local user id. If so, auto-assign their local user id into the + // assigned a local user id. If so, auto-assign their local user id into the // first available local player slot (unless they've already been assigned). AZStd::sort(gamepadInputDevices.begin(), gamepadInputDevices.end(), [](const AzFramework::InputDevice* lhs, const AzFramework::InputDevice* rhs) diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl index 41ee034844..98147756f4 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateMainMenu.inl @@ -257,7 +257,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateMainMenu::GetMainMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultmainmenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultmainmenuscreen.uicanvas"; } diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl index 64269d223f..4389f5f0b7 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStateOptionsMenu.inl @@ -215,7 +215,7 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStateOptionsMenu::GetOptionsMenuCanvasAssetPath() { - return "@assets@/ui/canvases/defaultoptionsmenuscreen.uicanvas"; + return "@products@/ui/canvases/defaultoptionsmenuscreen.uicanvas"; } //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl index bf50913ef9..42ad2290e1 100644 --- a/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl +++ b/Gems/GameStateSamples/Code/Include/GameStateSamples/GameStatePrimaryUserSelection.inl @@ -168,6 +168,6 @@ namespace GameStateSamples //////////////////////////////////////////////////////////////////////////////////////////////// inline const char* GameStatePrimaryUserSelection::GetPrimaryUserSelectionCanvasAssetPath() { - return "@assets@/ui/canvases/defaultprimaryuserselectionscreen.uicanvas"; + return "@products@/ui/canvases/defaultprimaryuserselectionscreen.uicanvas"; } } diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp index 56f6e84332..0b4691ecf5 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/StyleManager.cpp @@ -74,10 +74,10 @@ namespace m_paletteSwatches.push_back(QColor(0, 0, 0)); m_sourcePixmap = new QPixmap(16, 16); m_sourcePixmap->fill(Qt::transparent); - + QPainter painter(m_sourcePixmap); painter.setRenderHint(QPainter::RenderHint::Antialiasing); - + QPen pen; pen.setWidth(4); pen.setColor(QColor(0, 0, 0)); @@ -257,7 +257,7 @@ namespace GraphCanvas QBitmap mask = m_sourcePixmap->createMaskFromColor(m_paletteSwatches[i], Qt::MaskOutColor); painter.setClipRegion(QRegion(mask)); - QtDrawingUtils::FillArea(painter, drawRect, (*palettes[i%palettes.size()])); + QtDrawingUtils::FillArea(painter, drawRect, (*palettes[i%palettes.size()])); } return pixmap; @@ -317,7 +317,7 @@ namespace GraphCanvas void StyleManager::LoadStyleSheet() { - AZStd::string file = AZStd::string::format("@assets@/%s", m_assetPath.c_str()); + AZStd::string file = AZStd::string::format("@products@/%s", m_assetPath.c_str()); AZ::IO::FileIOBase* fileBase = AZ::IO::FileIOBase::GetInstance(); @@ -448,7 +448,7 @@ namespace GraphCanvas auto mapIter = m_dataPaletteMapping.find(dataType); if (mapIter == m_dataPaletteMapping.end()) - { + { return "ObjectDataColorPalette"; } else @@ -852,7 +852,7 @@ namespace GraphCanvas return icon; } - + void StyleManager::ClearStyles() { StyleManagerNotificationBus::Event(m_editorId, &StyleManagerNotifications::OnStylesUnloaded); diff --git a/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp b/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp index bd13e91dc6..d0d7160a73 100644 --- a/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp +++ b/Gems/InAppPurchases/Code/Source/Platform/Android/InAppPurchasesAndroid.cpp @@ -58,7 +58,7 @@ namespace InAppPurchases } PurchasedProductDetailsAndroid* purchasedProductDetails = new PurchasedProductDetailsAndroid(); - + purchasedProductDetails->SetProductId(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[0])))); purchasedProductDetails->SetOrderId(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[1])))); purchasedProductDetails->SetPackageName(AZ::Android::JNI::ConvertJstringToString(static_cast(env->GetObjectField(jpurchasedProduct, fid[2])))); @@ -75,7 +75,7 @@ namespace InAppPurchases int numProducts = env->GetArrayLength(jproductDetails); InAppPurchasesInterface::GetInstance()->GetCache()->ClearCachedProductDetails(); - + const int NUM_FIELDS_PRODUCTS = 7; jfieldID fid[NUM_FIELDS_PRODUCTS]; jclass cls; @@ -224,7 +224,7 @@ namespace InAppPurchases AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; AZ::u64 fileSize = 0; - if (!fileReader->Open("@assets@/product_ids.json", AZ::IO::OpenMode::ModeRead, fileHandle)) + if (!fileReader->Open("@products@/product_ids.json", AZ::IO::OpenMode::ModeRead, fileHandle)) { AZ_TracePrintf("LumberyardInAppBilling", "Unable to open file product_ids.json\n"); return; @@ -319,10 +319,10 @@ namespace InAppPurchases env->DeleteLocalRef(billingClass); } - + void InAppPurchasesAndroid::RestorePurchasedProducts() const { - + } void InAppPurchasesAndroid::ConsumePurchase(const AZStd::string& purchaseToken) const diff --git a/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp index 82c07f9f73..3dd7d5501e 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/CopyDependencyBuilder/EmfxWorkspaceBuilderWorker/EmfxWorkspaceBuilderWorker.cpp @@ -63,13 +63,13 @@ namespace CopyDependencyBuilder charBuffer.back() = 0; /* File Contents of EMFX Workspace file looks like - startScript="ImportActor -filename \"@assets@/animationsamples/advanced_rinlocomotion/actor/rinactor.actor\"\nCreateActorInstance + startScript="ImportActor -filename \"@products@/animationsamples/advanced_rinlocomotion/actor/rinactor.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.020660 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000, - 0.00000000,0.00000000,0.99997193\n LoadMotionSet -filename \"@assets@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.motionset\" - \nLoadAnimGraph -filename \"@assets@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.animgraph\" + 0.00000000,0.00000000,0.99997193\n LoadMotionSet -filename \"@products@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.motionset\" + \nLoadAnimGraph -filename \"@products@/AnimationSamples/Advanced_RinLocomotion/AnimationEditorFiles/Advanced_RinLocomotion.animgraph\" \nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" */ - AZStd::regex pathRegex(R"(\s+-filename\s+\\\"(?:@assets@\/)?(\S+)\\\")"); + AZStd::regex pathRegex(R"(\s+-filename\s+\\\"(?:@products@\/)?(\S+)\\\")"); AZStd::smatch matches; AZStd::string::const_iterator searchStart = charBuffer.begin(); while (AZStd::regex_search(searchStart, matches, pathRegex)) diff --git a/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp b/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp index 631bc41358..00e9eaf0fe 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/LevelBuilder/LevelBuilderWorker.cpp @@ -30,7 +30,7 @@ namespace LevelBuilder { const char s_materialExtension[] = ".mtl"; - const char s_audioControlFilesLevelPath[] = "@devassets@/libs/gameaudio/wwise/levels/%s"; + const char s_audioControlFilesLevelPath[] = "@projectroot@/libs/gameaudio/wwise/levels/%s"; const char s_audioControlFilter[] = "*.xml"; AZ::u64 readXmlDataLength(AZ::IO::GenericStream* stream, int& charSize) diff --git a/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp b/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp index c06b21337b..48973b2779 100644 --- a/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Builders/MaterialBuilder/MaterialBuilderComponent.cpp @@ -28,7 +28,7 @@ namespace MaterialBuilder const char g_nodeNameTexture[] = "Texture"; const char g_nodeNameTextures[] = "Textures"; const char g_attributeFileName[] = "File"; - + const int g_numSourceImageFormats = 9; const char* g_sourceImageFormats[g_numSourceImageFormats] = { ".tif", ".tiff", ".bmp", ".gif", ".jpg", ".jpeg", ".tga", ".png", ".dds" }; bool IsSupportedImageExtension(const AZStd::string& extension) @@ -66,7 +66,7 @@ namespace MaterialBuilder return actualFileName; } - // Parses the material XML for all texture paths + // Parses the material XML for all texture paths AZ::Outcome GetTexturePathsFromMaterial(AZ::rapidxml::xml_node* materialNode, AZStd::vector& paths) { AZ::Outcome resultOutcome = AZ::Failure(AZStd::string("")); @@ -94,7 +94,7 @@ namespace MaterialBuilder // do an initial clean-up of the path taken from the file, similar to MaterialHelpers::SetTexturesFromXml AZStd::string texturePath = CleanLegacyPathingFromTexturePath(rawTexturePath); paths.emplace_back(AZStd::move(texturePath)); - } + } textureNode = textureNode->next_sibling(g_nodeNameTexture); } while (textureNode); @@ -112,7 +112,7 @@ namespace MaterialBuilder return AZ::Failure(AZStd::string("SubMaterials node exists but does not have any child Material nodes.")); } - do + do { // grab the texture paths from the submaterial, or error out if necessary AZ::Outcome subMaterialTexturePathsResult = GetTexturePathsFromMaterial(subMaterialNode, paths); @@ -142,7 +142,7 @@ namespace MaterialBuilder } // find a sequence of digits with a string starting from lastDigitIndex, and try to parse that sequence to and int - // and store it in outAnimIndex. + // and store it in outAnimIndex. bool ParseFilePathForCompleteNumber(const AZStd::string& filePath, int& lastDigitIndex, int& outAnimIndex) { int firstAnimIndexDigit = lastDigitIndex; @@ -162,7 +162,7 @@ namespace MaterialBuilder AZ::Outcome GetAllTexturesInTextureSequence(const AZStd::string& path, AZStd::vector& texturesInSequence) { // Taken from CShaderMan::mfReadTexSequence - // All comments next to variable declarations in this function are the original variable names in + // All comments next to variable declarations in this function are the original variable names in // CShaderMan::mfReadTexSequence, to help keep track of how these variables relate to the original function AZStd::string prefix; AZStd::string postfix; @@ -172,7 +172,7 @@ namespace MaterialBuilder AzFramework::StringFunc::Path::GetExtension(filePath.c_str(), extension); AzFramework::StringFunc::Path::StripExtension(filePath); - // unsure if it is actually possible to enter here or the original version with '$' as the indicator + // unsure if it is actually possible to enter here or the original version with '$' as the indicator // for texture sequences, but they check for both just in case, so this will match the behavior. char separator = '#'; // chSep int firstSeparatorIndex = static_cast(filePath.find(separator)); @@ -186,7 +186,7 @@ namespace MaterialBuilder separator = '$'; } - // we don't actually care about getting the speed of the animation, so just remove everything from the + // we don't actually care about getting the speed of the animation, so just remove everything from the // end of the string starting with the last open parenthesis size_t speedStartIndex = filePath.find_last_of('('); if (speedStartIndex != AZStd::string::npos) @@ -195,7 +195,7 @@ namespace MaterialBuilder AzFramework::StringFunc::Append(filePath, '\0'); } - // try to find where the digits start after the separator (there can be any number of separators + // try to find where the digits start after the separator (there can be any number of separators // between the texture name prefix and where the digit range starts) int firstAnimIndexDigit = -1; // m int numSeparators = 0; // j @@ -219,7 +219,7 @@ namespace MaterialBuilder { return AZ::Failure(AZStd::string("Failed to find separator '#' or '$' in texture path.")); } - + // store off everything before the separator prefix = AZStd::move(filePath.substr(0, firstSeparatorIndex)); @@ -242,7 +242,7 @@ namespace MaterialBuilder // reset to the start of the next index ++lastDigitIndex; - + // find the length of the end index, then parse that to an int if (!ParseFilePathForCompleteNumber(filePath, lastDigitIndex, endAnimIndex)) { @@ -262,8 +262,8 @@ namespace MaterialBuilder return AZ::Success(); } - - // Determine which product path to use based on the path stored in the texture, and make it relative to + + // Determine which product path to use based on the path stored in the texture, and make it relative to // the cache. bool ResolveMaterialTexturePath(const AZStd::string& path, AZStd::string& outPath) { @@ -272,7 +272,7 @@ namespace MaterialBuilder //if its a source image format try to load the dds AZStd::string extension; bool hasExtension = AzFramework::StringFunc::Path::GetExtension(path.c_str(), extension); - + // Replace all supported extensions with DDS if it has an extension. If the extension exists but is not supported, fail out. if (hasExtension && IsSupportedImageExtension(extension)) { @@ -286,17 +286,17 @@ namespace MaterialBuilder AZStd::to_lower(aliasedPath.begin(), aliasedPath.end()); AzFramework::StringFunc::Path::Normalize(aliasedPath); - + AZStd::string currentFolderSpecifier = AZStd::string::format(".%c", AZ_CORRECT_FILESYSTEM_SEPARATOR); if (AzFramework::StringFunc::StartsWith(aliasedPath, currentFolderSpecifier)) { AzFramework::StringFunc::Strip(aliasedPath, currentFolderSpecifier.c_str(), false, true); } - + AZStd::string resolvedPath; char fullPathBuffer[AZ_MAX_PATH_LEN] = {}; - // if there is an alias already at the front of the path, resolve it, and try to make it relative to the - // cache (@assets@). If it can't, then error out. + // if there is an alias already at the front of the path, resolve it, and try to make it relative to the + // cache (@products@). If it can't, then error out. // This case handles the possibility of aliases existing in texture paths in materials that is still supported // by the legacy loading code, however it is not currently used, so the else path is always taken. if (aliasedPath[0] == '@') @@ -308,7 +308,7 @@ namespace MaterialBuilder } resolvedPath = fullPathBuffer; AzFramework::StringFunc::Path::Normalize(resolvedPath); - if (!AzFramework::StringFunc::Replace(resolvedPath, AZ::IO::FileIOBase::GetDirectInstance()->GetAlias("@assets@"), "")) + if (!AzFramework::StringFunc::Replace(resolvedPath, AZ::IO::FileIOBase::GetDirectInstance()->GetAlias("@products@"), "")) { AZ_Warning(s_materialBuilder, false, "Failed to resolve aliased texture path %s to be relative to the asset cache. Please make sure this alias resolves to a path within the asset cache.", aliasedPath.c_str()); return false; @@ -318,7 +318,7 @@ namespace MaterialBuilder { resolvedPath = AZStd::move(aliasedPath); } - + // AP deferred path resolution requires UNIX separators and no leading separators, so clean up and convert here if (AzFramework::StringFunc::StartsWith(resolvedPath, AZ_CORRECT_FILESYSTEM_SEPARATOR_STRING)) { @@ -357,7 +357,7 @@ namespace MaterialBuilder // (optimization) this builder does not emit source dependencies: builderDescriptor.m_flags |= AssetBuilderSDK::AssetBuilderDesc::BF_EmitsNoDependencies; - + m_materialBuilder.BusConnect(builderDescriptor.m_busId); EBUS_EVENT(AssetBuilderSDK::AssetBuilderBus, RegisterBuilderInformation, builderDescriptor); @@ -548,10 +548,10 @@ namespace MaterialBuilder } } - // for each texture in the file + // for each texture in the file for (const AZStd::string& texPath : texturePaths) { - // if the texture path starts with a '$' then it is a special runtime defined texture, so it it doesn't have + // if the texture path starts with a '$' then it is a special runtime defined texture, so it it doesn't have // an actual asset on disk to depend on. If the texture path doesn't have an extension, then it is a texture // that is determined at runtime (such as 'nearest_cubemap'), so also ignore those, as other things pull in // those dependencies. @@ -567,7 +567,7 @@ namespace MaterialBuilder AZ_Warning(s_materialBuilder, false, "Failed to resolve texture path %s to a product path when gathering dependencies for %s. Registering dependencies on this texture path will be skipped.", texPath.c_str(), path.c_str()); continue; } - + resolvedPaths.emplace_back(AZStd::move(resolvedPath)); } diff --git a/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp b/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp index 20386e0628..c9fc656488 100644 --- a/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Bundling/BundlingSystemComponent.cpp @@ -22,7 +22,7 @@ namespace LmbrCentral { - const char bundleRoot[] = "@assets@"; + const char bundleRoot[] = "@products@"; void BundlingSystemComponent::Activate() { @@ -178,7 +178,7 @@ namespace LmbrCentral // Not already opened, new entry m_openedBundles[bundleName] = AZStd::make_unique(); - AZStd::shared_ptr nextCatalog; // Not all bundles will have catalogs - some are legacy. + AZStd::shared_ptr nextCatalog; // Not all bundles will have catalogs - some are legacy. if (nextBundle == nullptr) { // Added to the end diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp index 31cf68e9a0..a5884ccce9 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp @@ -484,7 +484,7 @@ namespace LmbrCentral } // load the catalog from disk (supported over VFS). - EBUS_EVENT(AZ::Data::AssetCatalogRequestBus, LoadCatalog, AZStd::string::format("@assets@/%s", s_assetCatalogFilename).c_str()); + EBUS_EVENT(AZ::Data::AssetCatalogRequestBus, LoadCatalog, AZStd::string::format("@products@/%s", s_assetCatalogFilename).c_str()); } void LmbrCentralSystemComponent::OnCrySystemShutdown([[maybe_unused]] ISystem& system) diff --git a/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp b/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp index 65847a7fef..8b697f35f2 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/CopyDependencyBuilderTest.cpp @@ -69,7 +69,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); SerializeContext* serializeContext; ComponentApplicationBus::BroadcastResult(serializeContext, &ComponentApplicationRequests::GetSerializeContext); @@ -114,7 +114,7 @@ namespace UnitTest { AssetBuilderSDK::ProductPathDependencySet resolvedPaths; AZStd::vector productDependencies; - + AssetBuilderSDK::ProcessJobRequest request; request.m_fullPath = GetFullPath(fileName); request.m_sourceFile = fileName; @@ -211,8 +211,6 @@ namespace UnitTest ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::AssetSystem::AssetSystemRequestBus::Handler overrides - const char* GetAbsoluteDevGameFolderPath() override { return ""; } - const char* GetAbsoluteDevRootFolderPath() override { return ""; } bool GetRelativeProductPathFromFullSourceOrProductPath([[maybe_unused]] const AZStd::string& fullPath, [[maybe_unused]] AZStd::string& relativeProductPath) override { return true; } bool GenerateRelativeSourcePath( [[maybe_unused]] const AZStd::string& sourcePath, [[maybe_unused]] AZStd::string& relativePath, @@ -428,7 +426,7 @@ namespace UnitTest "Fonts/fontexample-bolditalic.font" }; - AZStd::string fileName = "Fonts/FontFamilyExample.fontfamily"; + AZStd::string fileName = "Fonts/FontFamilyExample.fontfamily"; FontBuilderWorker builderWorker; @@ -445,7 +443,7 @@ namespace UnitTest AZStd::string fileName = "Fonts/FontExample.font"; FontBuilderWorker builderWorker; - + TestSuccessCase(&builderWorker, fileName, "Fonts/FontExample.ttf"); } @@ -667,7 +665,7 @@ namespace UnitTest builderWorker.AddSchemaFileDirectory(GetFullPath("Xmls/Schema/WithoutVersionConstraints/OptionalAttribute")); AZStd::vector expectedProductDependencies; - + TestSuccessCase(&builderWorker, fileName, expectedPaths, expectedProductDependencies); } @@ -896,7 +894,7 @@ namespace UnitTest AssetBuilderSDK::CreateJobsResponse response; request.m_sourceFile = "Tests/Xmls/XmlExampleWithoutVersion.xml"; - request.m_watchFolder = "@root@/../Gems/LmbrCentral/Code/"; + request.m_watchFolder = "@engroot@/Gems/LmbrCentral/Code/"; XmlBuilderWorker builderWorker; builderWorker.AddSchemaFileDirectory(GetFullPath("Xmls/Schema/WithoutVersionConstraints/FullFeatured")); diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp index 1fd17e25ce..e50fbbe56c 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/LevelBuilderTest.cpp @@ -104,7 +104,7 @@ namespace UnitTest m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); AZ::Debug::TraceMessageBus::Handler::BusConnect(); @@ -114,7 +114,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); auto* serializeContext = m_app.GetSerializeContext(); @@ -142,7 +142,7 @@ namespace UnitTest AZStd::string GetTestFileAliasedPath(AZStd::string_view fileName) { - constexpr char testFileFolder[] = "@devroot@/Gems/LmbrCentral/Code/Tests/Levels/"; + constexpr char testFileFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Levels/"; return AZStd::string::format("%s%.*s", testFileFolder, aznumeric_cast(fileName.size()), fileName.data()); } diff --git a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp index 9e077c113c..a9b36d4624 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/LuaBuilderTests.cpp @@ -36,7 +36,7 @@ namespace UnitTest m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); @@ -45,7 +45,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override diff --git a/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp index 225168ecaa..3786ef7565 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/MaterialBuilderTests.cpp @@ -35,7 +35,7 @@ namespace UnitTest m_app.reset(aznew AzToolsFramework::ToolsApplication); m_app->Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); AZ::Debug::TraceMessageBus::Handler::BusConnect(); @@ -45,8 +45,7 @@ namespace UnitTest AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); } void TearDown() override @@ -128,8 +127,8 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_NoChildren_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling - // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when both a Textures node and a + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when both a Textures node and a // SubMaterials node are not found. No other AZ_Errors should be generated. TestFailureCase("test_mat2.mtl", 1); } @@ -141,7 +140,7 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_EmptySubMaterialNode_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when a SubMaterials node is present, // but has no children Material node. No other AZ_Errors should be generated. TestFailureCase("test_mat4.mtl", 1); @@ -154,9 +153,9 @@ namespace UnitTest TEST_F(MaterialBuilderTests, MaterialBuilder_MalformedMaterial_EmptyMaterialInSubMaterial_ExpectFailure) { - // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling + // Should fail in MaterialBuilderWorker::GetResolvedTexturePathsFromMaterial after calling // Internal::GetTexturePathsFromMaterial, which should return an AZ::Failure when a SubMaterials node is present, - // but a child Material node has no child Textures node and no child SubMaterials node. No other AZ_Errors should + // but a child Material node has no child Textures node and no child SubMaterials node. No other AZ_Errors should // be generated. TestFailureCase("test_mat6.mtl", 1); } @@ -235,7 +234,7 @@ namespace UnitTest AZStd::vector expectedPaths = { "engineassets/textures/hex.dds", // resolved from "/engineassets/textures/hex.dds" "engineassets/textures/hex_ddn.dds", // resolved from "./engineassets/textures/hex_ddn.dds" - "engineassets/textures/hex_spec.dds" // resolved from "@assets@/engineassets/textures/hex_spec.dds" + "engineassets/textures/hex_spec.dds" // resolved from "@products@/engineassets/textures/hex_spec.dds" }; TestSuccessCase("test_mat17.mtl", expectedPaths); } diff --git a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp index 0d70e34701..f679a3502d 100644 --- a/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/Builders/SeedBuilderTests.cpp @@ -24,16 +24,16 @@ class SeedBuilderTests AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_path"; registry->Set(projectPathKey, "AutomatedTesting"); AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry); - + m_app.Start(AZ::ComponentApplication::Descriptor()); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const char* dir = m_app.GetExecutableFolder(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", dir); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", dir); AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); } @@ -49,7 +49,7 @@ TEST_F(SeedBuilderTests, SeedBuilder_SourceDependency_Valid) { DependencyBuilder::SeedBuilderWorker seedBuilderWorker; AssetBuilderSDK::CreateJobsRequest request; - constexpr char testSeedFolder[] = "@root@/../Gems/LmbrCentral/Code/Tests/Seed"; + constexpr char testSeedFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Seed"; char resolvedPath[AZ_MAX_PATH_LEN]; AZ::IO::FileIOBase::GetInstance()->ResolvePath(testSeedFolder, resolvedPath, AZ_MAX_PATH_LEN); request.m_watchFolder = resolvedPath; @@ -78,7 +78,7 @@ TEST_F(SeedBuilderTests, SeedBuilder_EmptySourceDependency_Valid) { DependencyBuilder::SeedBuilderWorker seedBuilderWorker; AssetBuilderSDK::CreateJobsRequest request; - constexpr char testSeedFolder[] = "@root@/../Gems/LmbrCentral/Code/Tests/Seed"; + constexpr char testSeedFolder[] = "@engroot@/Gems/LmbrCentral/Code/Tests/Seed"; char resolvedPath[AZ_MAX_PATH_LEN]; AZ::IO::FileIOBase::GetInstance()->ResolvePath(testSeedFolder, resolvedPath, AZ_MAX_PATH_LEN); request.m_watchFolder = resolvedPath; diff --git a/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp b/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp index 08251eb716..7275909908 100644 --- a/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/BundlingSystemComponentTests.cpp @@ -52,7 +52,7 @@ namespace UnitTest { return false; } - + AZ::Data::AssetInfo assetInfo; AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); return assetInfo.m_relativePath == assetPath; @@ -61,7 +61,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, HasBundle_LoadBundles_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below const char testAssetPath[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -74,7 +74,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, HasBundle_LoadBundlesCatalogChecks_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testAssetPath[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -94,34 +94,34 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_SingleUnloadCheckCatalog_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; const char testCSVAssetPak[] = "test/bundle/staticdata.pak"; - // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak + // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak const char testDDSAsset[] = "textures/test/ping.dds"; const char testDDSAssetPak[] = "test/bundle/ping.pak"; EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testCSVAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testCSVAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testDDSAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); EXPECT_TRUE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testDDSAsset)); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testCSVAssetPak)); @@ -134,7 +134,7 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_SingleLoadAndBundleMode_Success) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; @@ -143,7 +143,7 @@ namespace UnitTest const char testMTLAssetPak[] = "test/TestMaterials.pak"; EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_FALSE(TestAssetId(testMTLAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testMTLAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testMTLAssetPak)); EXPECT_FALSE(TestAssetId(testCSVAsset)); EXPECT_TRUE(TestAssetId(testMTLAsset)); LmbrCentral::BundlingSystemRequestBus::Broadcast(&LmbrCentral::BundlingSystemRequestBus::Events::LoadBundles, "test/bundle", ".pak"); @@ -159,35 +159,35 @@ namespace UnitTest TEST_F(Integ_BundlingSystemComponentFixture, BundleSystemComponent_OpenClosePackCount_Match) { - // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our + // This asset lives only within LmbrCentral/Assets/Test/Bundle/staticdata.pak which is copied to our // cache as test/bundle/staticdata.pak and should be loaded below // The Pak has a catalog describing the contents which should automatically update our central asset catalog const char testCSVAsset[] = "staticdata/csv/bundlingsystemtestgameproperties.csv"; const char testCSVAssetPak[] = "test/bundle/staticdata.pak"; - // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak + // This asset lives only within LmbrCentral/Assets/Test/Bundle/ping.pak const char testDDSAssetPak[] = "test/bundle/ping.pak"; size_t bundleCount{ 0 }; LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount,&LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testCSVAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testCSVAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testCSVAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 1); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(gEnv->pCryPak->ClosePack(testCSVAssetPak)); @@ -208,7 +208,7 @@ namespace UnitTest LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testDDSAsset_split)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(TestAssetId(testDDSAsset_split)); @@ -217,7 +217,7 @@ namespace UnitTest EXPECT_EQ(bundleCount, 0); EXPECT_FALSE(TestAssetId(testDDSAsset_split)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testDDSAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testDDSAssetPak)); LmbrCentral::BundlingSystemRequestBus::BroadcastResult(bundleCount, &LmbrCentral::BundlingSystemRequestBus::Events::GetOpenedBundleCount); EXPECT_EQ(bundleCount, 2); EXPECT_TRUE(TestAssetId(testDDSAsset_split)); @@ -240,7 +240,7 @@ namespace UnitTest EXPECT_FALSE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testGamePropertiesAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testGamePropertiesAssetPak)); EXPECT_TRUE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); AZ::Data::AssetId testAssetId; @@ -253,7 +253,7 @@ namespace UnitTest EXPECT_NE(assetInfo.m_sizeBytes, 0); AZ::u64 assetSize1 = assetInfo.m_sizeBytes; - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testUserRequestAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testUserRequestAssetPak)); EXPECT_TRUE(TestAssetId(testGamePropertiesAsset)); EXPECT_TRUE(TestAssetId(testUserRequestAsset)); @@ -271,13 +271,13 @@ namespace UnitTest EXPECT_FALSE(TestAssetId(testGamePropertiesAsset)); EXPECT_FALSE(TestAssetId(testUserRequestAsset)); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testUserRequestAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testUserRequestAssetPak)); AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); AZ::u64 assetSize3 = assetInfo.m_sizeBytes; EXPECT_EQ(assetSize3, assetSize2); - EXPECT_TRUE(gEnv->pCryPak->OpenPack("@assets@", testGamePropertiesAssetPak)); + EXPECT_TRUE(gEnv->pCryPak->OpenPack("@products@", testGamePropertiesAssetPak)); AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, testAssetId); AZ::u64 assetSize4 = assetInfo.m_sizeBytes; EXPECT_EQ(assetSize4, assetSize1); diff --git a/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace b/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace index 6c7f7d3d87..0e92f9e83c 100644 --- a/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace +++ b/Gems/LmbrCentral/Code/Tests/EmfxWorkSpace/productdependencies.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/foo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00015891\nLoadMotionSet -filename \"@assets@/foo.motionset\"\nLoadAnimGraph -filename \"@assets@/foo.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" +startScript="ImportActor -filename \"@products@/foo.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00015891\nLoadMotionSet -filename \"@products@/foo.motionset\"\nLoadAnimGraph -filename \"@products@/foo.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" diff --git a/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl b/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl index 099e006f4c..c3d0ddcf61 100644 --- a/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl +++ b/Gems/LmbrCentral/Code/Tests/Materials/test_mat17.mtl @@ -2,7 +2,7 @@ - + diff --git a/Gems/LyShine/Code/Editor/EditorMenu.cpp b/Gems/LyShine/Code/Editor/EditorMenu.cpp index 8a6c93de6b..0eeec9a06e 100644 --- a/Gems/LyShine/Code/Editor/EditorMenu.cpp +++ b/Gems/LyShine/Code/Editor/EditorMenu.cpp @@ -606,7 +606,7 @@ void EditorWindow::AddMenu_View() [this]([[maybe_unused]] bool checked) { // Clear guides - AZStd::string canvasUndoXml = CanvasHelpers::BeginUndoableCanvasChange(GetCanvas()); + AZStd::string canvasUndoXml = CanvasHelpers::BeginUndoableCanvasChange(GetCanvas()); EBUS_EVENT_ID(GetCanvas(), UiEditorCanvasBus, RemoveAllGuides); CanvasHelpers::EndUndoableCanvasChange(this, "clear guides", canvasUndoXml); }); @@ -724,7 +724,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) // Iterate through the subdirectories of the localization folder. Each // directory corresponds to a different language containing localization // translations for that language. - AZStd::string fullLocPath(AZStd::string(gEnv->pFileIO->GetAlias("@assets@")) + "/" + AZStd::string(m_startupLocFolderName.toUtf8().constData())); + AZStd::string fullLocPath(AZStd::string(gEnv->pFileIO->GetAlias("@products@")) + "/" + AZStd::string(m_startupLocFolderName.toUtf8().constData())); QDir locDir(fullLocPath.c_str()); locDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); locDir.setSorting(QDir::Name); @@ -733,7 +733,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) { QString directoryName(subDirectory.fileName().toLower()); - // The loc system expects XML assets stored in a language-specific + // The loc system expects XML assets stored in a language-specific // folder with an "_xml" suffix in the name. Truncate the displayed // name so the user just sees the language name (this isn't required // though). @@ -754,7 +754,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) { // First try to locate the directory by name, without the "_xml" // suffix (in case it actually exists by this name). - QString fullLocPath(QString(gEnv->pFileIO->GetAlias("@assets@")) + "/" + m_startupLocFolderName + "/" + directoryName); + QString fullLocPath(QString(gEnv->pFileIO->GetAlias("@products@")) + "/" + m_startupLocFolderName + "/" + directoryName); QDir locDir(fullLocPath); // Try the directory with the expected suffix @@ -780,7 +780,7 @@ void EditorWindow::AddMenu_View_LanguageSetting(QMenu* viewMenu) "This used to be set to CSystem::OnLocalizationFolderCVarChanged but is now missing. " "UI Editor language-switching features are no longer working."); } - + // Update the language setting; this will allow font families to // load language-specific font assets ICVar* languageCvar = gEnv->pConsole->GetCVar("g_language"); diff --git a/Gems/LyShine/Code/Editor/UiSliceManager.cpp b/Gems/LyShine/Code/Editor/UiSliceManager.cpp index 97e9a51e11..a8fdad5343 100644 --- a/Gems/LyShine/Code/Editor/UiSliceManager.cpp +++ b/Gems/LyShine/Code/Editor/UiSliceManager.cpp @@ -138,7 +138,7 @@ void UiSliceManager::MakeSliceFromEntities(AzToolsFramework::EntityIdList& entit // expand the list of entities to include all child entities AzToolsFramework::EntityIdSet entitiesAndDescendants = GatherEntitiesAndAllDescendents(entities); - const AZStd::string slicesAssetsPath = "@devassets@/UI/Slices"; + const AZStd::string slicesAssetsPath = "@projectroot@/UI/Slices"; if (!gEnv->pFileIO->Exists(slicesAssetsPath.c_str())) { @@ -991,13 +991,13 @@ AZStd::string UiSliceManager::MakeTemporaryFilePathForSave(const char* targetFil AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); AZ_Assert(fileIO, "File IO is not initialized."); - AZStd::string devAssetPath = fileIO->GetAlias("@devassets@"); + AZStd::string devAssetPath = fileIO->GetAlias("@projectroot@"); AZStd::string userPath = fileIO->GetAlias("@user@"); AZStd::string tempPath = targetFilename; EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, devAssetPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, userPath); EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePath, tempPath); - AzFramework::StringFunc::Replace(tempPath, "@devassets@", devAssetPath.c_str()); + AzFramework::StringFunc::Replace(tempPath, "@projectroot@", devAssetPath.c_str()); AzFramework::StringFunc::Replace(tempPath, devAssetPath.c_str(), userPath.c_str()); tempPath.append(".slicetemp"); diff --git a/Gems/LyShine/Code/Source/UiCanvasManager.cpp b/Gems/LyShine/Code/Source/UiCanvasManager.cpp index a71c46d45e..f2397248b6 100644 --- a/Gems/LyShine/Code/Source/UiCanvasManager.cpp +++ b/Gems/LyShine/Code/Source/UiCanvasManager.cpp @@ -67,7 +67,7 @@ namespace // Check if extension needs to be fixed up const AZStd::string canvasExtension("uicanvas"); - bool validExtension = AzFramework::StringFunc::Path::IsExtension(assetPath.c_str(), canvasExtension.c_str(), true); + bool validExtension = AzFramework::StringFunc::Path::IsExtension(assetPath.c_str(), canvasExtension.c_str(), true); if (!validExtension) { // Fix extension @@ -79,7 +79,7 @@ namespace // Normalize path EBUS_EVENT(AzFramework::ApplicationRequests::Bus, NormalizePathKeepCase, assetPath); - // Check for any leading slashes as the specified path should be a relative path to the @assets@ alias. + // Check for any leading slashes as the specified path should be a relative path to the @products@ alias. // This eliminates inconsistencies between lower level file opens on different platforms int numCharsToErase = 0; for (; numCharsToErase < assetPath.length(); ++numCharsToErase) @@ -581,7 +581,7 @@ void UiCanvasManager::UpdateLoadedCanvases(float deltaTime) // Update all the canvases loaded in game. // It is unlikely this will call out to client code that could remove a canvas but we have no - // control over what custom components do so we increment the count that will defer all canvas deletion + // control over what custom components do so we increment the count that will defer all canvas deletion m_recursionGuardCount++; if (m_generateMousePositionInputEvent) { @@ -1087,7 +1087,7 @@ void UiCanvasManager::DebugDisplayCanvasData(int setting) const } const char* enabledString = isCanvasEnabled ? "Y" : "N"; totalEnabled += isCanvasEnabled ? 1 : 0; - + bool posEnabled = canvas->GetIsPositionalInputSupported(); const char* posEnabledString = posEnabled ? "Y" : "N"; totalPositionalInputs += posEnabled ? 1 : 0; @@ -1178,7 +1178,7 @@ void UiCanvasManager::DebugDisplayDrawCallData() const const AZ::Vector3 blue(0.3f,0.3f,1); const AZ::Vector3 green(0.3f,1,0.3f); const AZ::Vector3 yellow(0.7f,0.7f,0.2f); - + // local function to write a line of text (with a background rect) and increment Y offset AZStd::function WriteLine = [&](const char* buffer, const AZ::Vector3& color) { @@ -1191,7 +1191,7 @@ void UiCanvasManager::DebugDisplayDrawCallData() const draw2d->DrawText(buffer, AZ::Vector2(xOffset, yOffset), 16, textOpacity, &textOptions); yOffset += lineSpacing; }; - + char buffer[200]; sprintf_s(buffer, "NN: %20s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s %5s", diff --git a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp index ff4e054ac7..60074ac0a0 100644 --- a/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp +++ b/Gems/LyShine/Code/Tests/LyShineEditorTest.cpp @@ -60,7 +60,7 @@ AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); using namespace AZ; using ::testing::NiceMock; -class LyShineSystemTestComponent +class LyShineSystemTestComponent : public LyShine::LyShineSystemComponent { friend class LyShineEditorTest; @@ -90,18 +90,18 @@ protected: m_app.Start(m_descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const AZStd::string engineRoot = AZ::Test::GetEngineRootPath(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engineRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@engroot@", engineRoot.c_str()); AZ::IO::Path assetRoot(AZ::Utils::GetProjectPath()); assetRoot /= "Cache"; - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", assetRoot.c_str()); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", assetRoot.c_str()); AZ::SerializeContext* context = nullptr; ComponentApplicationBus::BroadcastResult(context, &ComponentApplicationBus::Events::GetSerializeContext); diff --git a/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp b/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp index 104118e4bf..40fed3448b 100644 --- a/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp +++ b/Gems/MessagePopup/Code/Source/LyShineMessagePopup.cpp @@ -127,21 +127,21 @@ namespace MessagePopup switch (_buttons) { case EPopupButtons::EPopupButtons_NoButtons: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup.uicanvas"); break; case EPopupButtons::EPopupButtons_Confirm: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup_confirm.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup_confirm.uicanvas"); isNavigationSupported = true; break; case EPopupButtons::EPopupButtons_YesNo: - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/defaultmessagepopup_yesno.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/defaultmessagepopup_yesno.uicanvas"); isNavigationSupported = true; break; } } else if (_kind == EPopupKind_Toaster) { - canvasEntityId = gEnv->pLyShine->LoadCanvas("@assets@/ui/canvases/toaster.uicanvas"); + canvasEntityId = gEnv->pLyShine->LoadCanvas("@products@/ui/canvases/toaster.uicanvas"); } if (canvasEntityId.IsValid()) diff --git a/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace b/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace index 1727656092..8bc507082c 100644 --- a/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace +++ b/Gems/PhysXSamples/Assets/Characters/Cowboy/AnimationEditorFiles/Cowboy.emfxworkspace @@ -1,3 +1,3 @@ [General] version=1 -startScript="ImportActor -filename \"@assets@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@assets@/Characters/Cowboy/AnimationEditorFiles/Cowboy.motionset\"\nLoadAnimGraph -filename \"@assets@/Characters/Cowboy/AnimationEditorFiles/Cowboy.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" +startScript="ImportActor -filename \"@products@/characters/cowboy/actor/cowboy_01.actor\"\nCreateActorInstance -actorID %LASTRESULT% -xPos 0.000000 -yPos 0.000000 -zPos 0.000000 -xScale 1.000000 -yScale 1.000000 -zScale 1.000000 -rot 0.00000000,0.00000000,0.00000000,1.00000000\nLoadMotionSet -filename \"@products@/Characters/Cowboy/AnimationEditorFiles/Cowboy.motionset\"\nLoadAnimGraph -filename \"@products@/Characters/Cowboy/AnimationEditorFiles/Cowboy.animgraph\"\nActivateAnimGraph -actorInstanceID %LASTRESULT3% -animGraphID %LASTRESULT1% -motionSetID %LASTRESULT2% -visualizeScale 1.000000\n" diff --git a/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp b/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp index a7bd193fd7..83a158dd18 100644 --- a/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp +++ b/Gems/QtForPython/Code/Source/QtForPythonSystemComponent.cpp @@ -202,9 +202,6 @@ namespace QtForPython QtBootstrapParameters QtForPythonSystemComponent::GetQtBootstrapParameters() const { QtBootstrapParameters params; - - char devroot[AZ_MAX_PATH_LEN]; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@", devroot, AZ_MAX_PATH_LEN); #if !defined(Q_OS_WIN) #error Unsupported OS platform for this QtForPython gem diff --git a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp index a4da836aeb..5d0105f080 100644 --- a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp +++ b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp @@ -36,13 +36,12 @@ protected: m_app.Start(AZ::ComponentApplication::Descriptor()); AZ::Debug::TraceMessageBus::Handler::BusConnect(); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is - // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash + // shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash // in the unit tests. AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); m_workingDirectory = m_app.GetExecutableFolder(); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", m_workingDirectory); - AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", m_workingDirectory); + AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", m_workingDirectory); } void TearDown() override @@ -78,7 +77,7 @@ protected: } void TestSuccessCase(const SceneAPI::Events::ExportProduct& exportProduct, - const AssetBuilderSDK::ProductPathDependency* expectedPathDependency = nullptr, + const AssetBuilderSDK::ProductPathDependency* expectedPathDependency = nullptr, const AZ::Uuid* expectedProductDependency = nullptr) { AssetBuilderSDK::ProductPathDependencySet expectedPathDependencies; @@ -86,13 +85,13 @@ protected: { expectedPathDependencies.emplace(*expectedPathDependency); } - + AZStd::vector expectedProductDependencies; if (expectedProductDependency) { expectedProductDependencies.push_back(*expectedProductDependency); } - + TestSuccessCase(exportProduct, expectedPathDependencies, expectedProductDependencies); } @@ -121,7 +120,7 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_PathDepen const char* absolutePathToFile = "/some/test/file.mtl"; #endif // AZ_TRAIT_OS_USE_WINDOWS_FILE_PATHS AssetBuilderSDK::ProductPathDependency expectedPathDependency(absolutePathToFile, AssetBuilderSDK::ProductPathDependencyType::SourceFile); - + SceneAPI::Events::ExportProduct product("testExportFile", AZ::Uuid::CreateRandom(), AZ::Data::AssetType::CreateNull(), u8(0), AZStd::nullopt); product.m_legacyPathDependencies.push_back(absolutePathToFile); TestSuccessCase(product, &expectedPathDependency); @@ -133,7 +132,7 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_PathDepen const char* relativeDependencyPathToFile = "some/test/file.mtl"; AssetBuilderSDK::ProductPathDependency expectedPathDependency(relativeDependencyPathToFile, AssetBuilderSDK::ProductPathDependencyType::ProductFile); - + SceneAPI::Events::ExportProduct product("testExportFile", AZ::Uuid::CreateRandom(), AZ::Data::AssetType::CreateNull(), u8(0), AZStd::nullopt); product.m_legacyPathDependencies.push_back(relativeDependencyPathToFile); diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h index fdc8cbc1d8..0fb0f567e8 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Assets/ScriptCanvasAsset.h @@ -41,7 +41,7 @@ namespace ScriptCanvasEditor azrtti_typeid(), "Script Canvas", "Script Canvas Graph Asset", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas", "Script Canvas", "Untitled-%i", diff --git a/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp b/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp index 15cbd12d7e..a7c39fbf0f 100644 --- a/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Utilities/CommonSettingsConfigurations.cpp @@ -9,27 +9,20 @@ #include "CommonSettingsConfigurations.h" #include +#include +#include #include namespace ScriptCanvasEditor { AZStd::string GetEditingGameDataFolder() { - const char* resultValue = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(resultValue, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - if (!resultValue) + AZ::IO::Path projectPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) { - if (AZ::IO::FileIOBase::GetInstance()) - { - resultValue = AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@"); - } + settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); } - if (!resultValue) - { - resultValue = "."; - } - - return resultValue; + return projectPath.Native(); } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index fbe03ffc0a..289643d59c 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include @@ -224,7 +225,7 @@ namespace ScriptCanvasEditor } } } // anonymous namespace. - + void Workspace::Save() { auto workspace = AZ::UserSettings::CreateFind(AZ_CRC("ScriptCanvasEditorWindowState", 0x10c47d36), AZ::UserSettings::CT_LOCAL); @@ -423,7 +424,7 @@ namespace ScriptCanvasEditor , m_queueCloseRequest(false) , m_hasQueuedClose(false) , m_isInAutomation(false) - , m_allowAutoSave(true) + , m_allowAutoSave(true) , m_systemTickActions(0) , m_closeCurrentGraphAfterSave(false) , m_styleManager(ScriptCanvasEditor::AssetEditorId, "ScriptCanvas/StyleSheet/graphcanvas_style.json") @@ -432,7 +433,7 @@ namespace ScriptCanvasEditor GraphCanvas::AssetEditorAutomationRequestBus::Handler::BusConnect(ScriptCanvasEditor::AssetEditorId); AZStd::array unresolvedPath; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@assets@/translation/scriptcanvas_en_us.qm", unresolvedPath.data(), unresolvedPath.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@products@/translation/scriptcanvas_en_us.qm", unresolvedPath.data(), unresolvedPath.size()); QString translationFilePath(unresolvedPath.data()); if ( m_translator.load(QLocale::Language::English, translationFilePath) ) @@ -541,7 +542,7 @@ namespace ScriptCanvasEditor m_editorToolbar->AddCustomAction(m_createFunctionOutput); connect(m_createFunctionOutput, &QToolButton::clicked, this, &MainWindow::CreateFunctionOutput); - + { m_validateGraphToolButton = new QToolButton(); @@ -553,7 +554,7 @@ namespace ScriptCanvasEditor m_editorToolbar->AddCustomAction(m_validateGraphToolButton); connect(m_validateGraphToolButton, &QToolButton::clicked, this, &MainWindow::OnValidateCurrentGraph); - + m_layout->addWidget(m_editorToolbar); // Tab bar @@ -578,7 +579,7 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); - m_commandLine->setObjectName("CommandLine"); + m_commandLine->setObjectName("CommandLine"); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); @@ -602,7 +603,7 @@ namespace ScriptCanvasEditor // in sync with the order we display under tools for consistency. { const bool isInContextMenu = false; - Widget::ScriptCanvasNodePaletteConfig nodePaletteConfig(m_nodePaletteModel, m_scriptEventsAssetModel, isInContextMenu); + Widget::ScriptCanvasNodePaletteConfig nodePaletteConfig(m_nodePaletteModel, m_scriptEventsAssetModel, isInContextMenu); m_nodePalette = aznew Widget::NodePaletteDockWidget(tr("Node Palette"), this, nodePaletteConfig); m_nodePalette->setObjectName("NodePalette"); @@ -734,21 +735,23 @@ namespace ScriptCanvasEditor message.append(QObject::tr("
%1 graph(s) that need manual corrections. You will be prompted to review them after you close this dialog.
").arg(assetsThatNeedManualInspection)); } - // Report - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZStd::string urlToReport = AZStd::string::format("For more information see the Upgrade Report.", resolvedBuffer); + auto settingsRegistry = AZ::SettingsRegistry::Get(); + + AZ::IO::Path outputFileName; + settingsRegistry->Get(outputFileName.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectLogPath); + outputFileName /= "ScriptCanvasUpgradeReport.html"; + // Report + AZStd::string urlToReport = AZStd::string::format("For more information see the Upgrade Report.", outputFileName.c_str()); message.append(QObject::tr("
%1").arg(urlToReport.c_str())); // Backup if (upgradeTool->HasBackup()) { - AZStd::string outputFileName2 = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP"); - - AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName2.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::IO::Path outputFileName2; + settingsRegistry->Get(outputFileName2.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectUserPath); + outputFileName2 /= "ScriptCanvas_BACKUP"; - AZStd::string backupPath = AZStd::string::format("
Open the Backup Folder.", resolvedBuffer); + AZStd::string backupPath = AZStd::string::format("
Open the Backup Folder.", outputFileName.c_str()); message.append(QObject::tr("%1").arg(backupPath.c_str())); } @@ -882,14 +885,14 @@ namespace ScriptCanvasEditor connect(ui->action_ViewVariableManager, &QAction::triggered, this, &MainWindow::OnVariableManager); connect(m_variableDockWidget, &QDockWidget::visibilityChanged, this, &MainWindow::OnViewVisibilityChanged); - + connect(ui->action_ViewLogWindow, &QAction::triggered, this, &MainWindow::OnViewLogWindow); connect(m_loggingWindow, &QDockWidget::visibilityChanged, this, &MainWindow::OnViewVisibilityChanged); connect(ui->action_ViewDebugger, &QAction::triggered, this, &MainWindow::OnViewDebugger); connect(ui->action_ViewCommandLine, &QAction::triggered, this, &MainWindow::OnViewCommandLine); connect(ui->action_ViewLog, &QAction::triggered, this, &MainWindow::OnViewLog); - + connect(ui->action_GraphValidation, &QAction::triggered, this, &MainWindow::OnViewGraphValidation); connect(ui->action_Debugging, &QAction::triggered, this, &MainWindow::OnViewDebuggingWindow); @@ -897,7 +900,7 @@ namespace ScriptCanvasEditor connect(ui->action_NodeStatistics, &QAction::triggered, this, &MainWindow::OnViewStatisticsPanel); connect(ui->action_PresetsEditor, &QAction::triggered, this, &MainWindow::OnViewPresetsEditor); - connect(ui->action_ViewRestoreDefaultLayout, &QAction::triggered, this, &MainWindow::OnRestoreDefaultLayout); + connect(ui->action_ViewRestoreDefaultLayout, &QAction::triggered, this, &MainWindow::OnRestoreDefaultLayout); } void MainWindow::SignalActiveSceneChanged(AZ::Data::AssetId assetId) @@ -920,7 +923,7 @@ namespace ScriptCanvasEditor // The paste action refreshes based on the scene's mimetype RefreshPasteAction(); - + bool enabled = false; if (graphId.IsValid()) @@ -1016,7 +1019,7 @@ namespace ScriptCanvasEditor QString tabName = m_tabBar->tabText(tabCounter); UnsavedChangesOptions shouldSaveResults = ShowSaveDialog(tabName); - + if (shouldSaveResults == UnsavedChangesOptions::SAVE) { Callbacks::OnSave saveCB = [this](bool isSuccessful, AZ::Data::AssetPtr, AZ::Data::AssetId) @@ -1041,7 +1044,7 @@ namespace ScriptCanvasEditor { m_processedClosedAssetIds.clear(); event->ignore(); - + return; } else if (shouldSaveResults == UnsavedChangesOptions::CONTINUE_WITHOUT_SAVING && @@ -1066,7 +1069,7 @@ namespace ScriptCanvasEditor } m_processedClosedAssetIds.clear(); - + event->accept(); } @@ -1232,7 +1235,7 @@ namespace ScriptCanvasEditor const Tracker::ScriptCanvasFileState& fileState = GetAssetFileState(memoryAssetId); if (fileState != Tracker::ScriptCanvasFileState::NEW) { - AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::UpdateFileState, memoryAssetId, Tracker::ScriptCanvasFileState::MODIFIED); + AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::UpdateFileState, memoryAssetId, Tracker::ScriptCanvasFileState::MODIFIED); } } } @@ -1734,12 +1737,12 @@ namespace ScriptCanvasEditor { currentTarget.SetInvalid(); } - } + } } return retVal; } - + void MainWindow::OnFileNew() { MakeNewFile(); @@ -1756,7 +1759,7 @@ namespace ScriptCanvasEditor m_tabBar->InsertGraphTab(tabIndex, assetId); if (!IsTabOpen(assetId, outTabIndex)) - { + { AZ_Assert(false, AZStd::string::format("Unable to open new Script Canvas Asset with id %s in the Script Canvas Editor", AssetHelpers::AssetIdToString(assetId).c_str()).c_str()); return -1; } @@ -1854,7 +1857,7 @@ namespace ScriptCanvasEditor } PrepareAssetForSave(inMemoryAssetId); - + AZStd::string suggestedFilename; AZStd::string suggestedFileFilter; GetSuggestedFullFilenameToSaveAs(inMemoryAssetId, suggestedFilename, suggestedFileFilter); @@ -1881,7 +1884,7 @@ namespace ScriptCanvasEditor AZStd::string assetRoot; AZStd::array assetRootChar; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devroot@", assetRootChar.data(), assetRootChar.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@", assetRootChar.data(), assetRootChar.size()); assetRoot = assetRootChar.data(); /* if (!AZ::StringFunc::StartsWith(filePath, assetRoot)) @@ -1906,7 +1909,7 @@ namespace ScriptCanvasEditor if (isValidFileName) { - AZStd::string internalStringFile = selectedFile.toUtf8().data(); + AZStd::string internalStringFile = selectedFile.toUtf8().data(); if (!AssetHelpers::IsValidSourceFile(internalStringFile, GetActiveScriptCanvasId())) { @@ -1923,7 +1926,7 @@ namespace ScriptCanvasEditor return true; } - + return false; } @@ -1965,7 +1968,7 @@ namespace ScriptCanvasEditor saveTabIndex = m_tabBar->FindTab(previousFileAssetId); } } - + AzFramework::StringFunc::Path::GetFileName(memoryAsset->GetAbsolutePath().c_str(), tabName); // Update the tab's assetId to the file asset Id (necessary when saving a new asset) @@ -2047,7 +2050,7 @@ namespace ScriptCanvasEditor } m_closeCurrentGraphAfterSave = false; - + EnableAssetView(memoryAsset); UnblockCloseRequests(); @@ -2071,7 +2074,7 @@ namespace ScriptCanvasEditor AZStd::invoke(onSave, saveSuccess, asset, previousAssetId); } }; - + AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::Save, assetId, onSaveCallback); UpdateSaveState(); @@ -2109,7 +2112,7 @@ namespace ScriptCanvasEditor // Disable the current view if we are saving. if (memoryAsset) { - DisableAssetView(memoryAsset); + DisableAssetView(memoryAsset); } BlockCloseRequests(); @@ -2126,7 +2129,7 @@ namespace ScriptCanvasEditor AZStd::string assetRoot; { AZStd::array assetRootChar; - AZ::IO::FileIOBase::GetInstance()->ResolvePath("@devassets@", assetRootChar.data(), assetRootChar.size()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath("@projectroot@", assetRootChar.data(), assetRootChar.size()); assetRoot = assetRootChar.data(); } @@ -2147,7 +2150,7 @@ namespace ScriptCanvasEditor AssetRegistryRequestBus::BroadcastResult(fileFilters, &AssetRegistryRequests::GetAssetHandlerFileFilters); QString filter; - + AZStd::set filterSet; auto aggregateFilters = fileFilters.values; for (auto aggregateFilters2 : fileFilters.values) @@ -2190,7 +2193,7 @@ namespace ScriptCanvasEditor dialog.setFileMode(QFileDialog::ExistingFiles); dialog.setNameFilters(nameFilters); - if (dialog.exec() == QDialog::Accepted) + if (dialog.exec() == QDialog::Accepted) { m_filesToOpen = dialog.selectedFiles(); @@ -2206,7 +2209,7 @@ namespace ScriptCanvasEditor ui->action_Paste->setShortcut(QKeySequence(QKeySequence::Paste)); ui->action_Delete->setShortcut(QKeySequence(QKeySequence::Delete)); - connect(ui->menuEdit, &QMenu::aboutToShow, this, &MainWindow::OnEditMenuShow); + connect(ui->menuEdit, &QMenu::aboutToShow, this, &MainWindow::OnEditMenuShow); // Edit Menu connect(ui->action_Undo, &QAction::triggered, this, &MainWindow::TriggerUndo); @@ -2215,8 +2218,8 @@ namespace ScriptCanvasEditor connect(ui->action_Copy, &QAction::triggered, this, &MainWindow::OnEditCopy); connect(ui->action_Paste, &QAction::triggered, this, &MainWindow::OnEditPaste); connect(ui->action_Duplicate, &QAction::triggered, this, &MainWindow::OnEditDuplicate); - connect(ui->action_Delete, &QAction::triggered, this, &MainWindow::OnEditDelete); - connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &MainWindow::RefreshPasteAction); + connect(ui->action_Delete, &QAction::triggered, this, &MainWindow::OnEditDelete); + connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &MainWindow::RefreshPasteAction); connect(ui->action_RemoveUnusedNodes, &QAction::triggered, this, &MainWindow::OnRemoveUnusedNodes); connect(ui->action_RemoveUnusedVariables, &QAction::triggered, this, &MainWindow::OnRemoveUnusedVariables); connect(ui->action_RemoveUnusedElements, &QAction::triggered, this, &MainWindow::OnRemoveUnusedElements); @@ -2246,7 +2249,7 @@ namespace ScriptCanvasEditor connect(ui->action_GotoEndOfChain, &QAction::triggered, this, &MainWindow::OnGotoEndOfChain); - connect(ui->action_GlobalPreferences, &QAction::triggered, [this]() + connect(ui->action_GlobalPreferences, &QAction::triggered, [this]() { ScriptCanvasEditor::SettingsDialog(ui->action_GlobalPreferences->text(), ScriptCanvas::ScriptCanvasId(), this).exec(); @@ -2372,7 +2375,7 @@ namespace ScriptCanvasEditor { AZ::EntityId graphCanvasGraphId = GetActiveGraphCanvasGraphId(); - GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::SelectAllRelative, GraphCanvas::ConnectionType::CT_Input); + GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::SelectAllRelative, GraphCanvas::ConnectionType::CT_Input); } void MainWindow::OnSelectOutputs() @@ -2635,8 +2638,8 @@ namespace ScriptCanvasEditor { ScriptCanvas::ScriptCanvasId scriptCanvasId; AssetTrackerRequestBus::BroadcastResult(scriptCanvasId, &AssetTrackerRequests::GetScriptCanvasId, assetId); - return scriptCanvasId; - } + return scriptCanvasId; + } ScriptCanvas::ScriptCanvasId MainWindow::GetScriptCanvasId(const GraphCanvas::GraphId& graphCanvasGraphId) const { @@ -2849,7 +2852,7 @@ namespace ScriptCanvasEditor AssetTrackerRequests::AssetList assets; AssetTrackerRequestBus::BroadcastResult(assets, &AssetTrackerRequests::GetAssets); - + for (auto asset : assets) { RemoveScriptCanvasAsset(asset->GetAsset().GetId()); @@ -2927,14 +2930,14 @@ namespace ScriptCanvasEditor } void MainWindow::SaveTab(int index) - { + { QVariant tabdata = m_tabBar->tabData(index); if (tabdata.isValid()) { auto assetId = tabdata.value(); SaveAssetImpl(assetId, nullptr); } - + } void MainWindow::CloseAllTabs() @@ -2955,7 +2958,7 @@ namespace ScriptCanvasEditor m_isClosingTabs = true; m_skipTabOnClose = assetId; CloseNextTab(); - } + } } void MainWindow::CopyPathToClipboard(int index) @@ -3051,7 +3054,7 @@ namespace ScriptCanvasEditor // The last tab has been removed. SetActiveAsset({}); } - + // Handling various close all events because the save is async need to deal with this in a bunch of different ways // Always want to trigger this, even if we don't have any active tabs to avoid doubling the clean-up // information @@ -3069,7 +3072,7 @@ namespace ScriptCanvasEditor for (const auto& slotId : outputDataSlotIds) { - + if (!IsInUndoRedo(graphCanvasGraphId) && !isPaste && CreateAzEventHandlerSlotMenuAction::FindBehaviorMethodWithAzEventReturn(graphCanvasGraphId, slotId)) { CreateAzEventHandlerSlotMenuAction eventHandlerAction(this); @@ -3195,7 +3198,7 @@ namespace ScriptCanvasEditor m_minimap->hide(); } */ - + resizeDocks( { m_nodePalette, m_propertyGrid }, { static_cast(size().width() * 0.15f), static_cast(size().width() * 0.2f) }, @@ -3204,7 +3207,7 @@ namespace ScriptCanvasEditor resizeDocks({ m_nodePalette, m_minimap }, { static_cast(size().height() * 0.70f), static_cast(size().height() * 0.30f) }, Qt::Vertical); - + resizeDocks({ m_propertyGrid, m_variableDockWidget }, { static_cast(size().height() * 0.70f), static_cast(size().height() * 0.30f) }, @@ -3229,7 +3232,7 @@ namespace ScriptCanvasEditor AZ::EntityId graphCanvasGraphId; EditorGraphRequestBus::EventResult(graphCanvasGraphId, scriptCanvasId, &EditorGraphRequests::GetGraphCanvasGraphId); - + bool hasCopiableSelection = false; bool hasSelection = false; @@ -3268,7 +3271,7 @@ namespace ScriptCanvasEditor ui->action_Duplicate->setEnabled(hasCopiableSelection); // Delete will work for anything that is selectable - ui->action_Delete->setEnabled(hasSelection); + ui->action_Delete->setEnabled(hasSelection); } void MainWindow::OnViewNodePalette() @@ -3470,7 +3473,7 @@ namespace ScriptCanvasEditor if (ui->action_Debugging->isChecked() != m_loggingWindow->isVisible()) { ui->action_Debugging->setChecked(m_loggingWindow->isVisible()); - } + } // Want these two elements to be mutually exclusive. if (m_statusWidget->isVisible() == m_validationDockWidget->isVisible()) @@ -3624,7 +3627,7 @@ namespace ScriptCanvasEditor if (m_isRestoringWorkspace) { m_isRestoringWorkspace = false; - + if (m_queuedFocusOverride.IsValid()) { SetActiveAsset(m_queuedFocusOverride); @@ -3701,7 +3704,7 @@ namespace ScriptCanvasEditor hasModifications = ( fileState == Tracker::ScriptCanvasFileState::MODIFIED || fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED); - + AssetTrackerRequestBus::BroadcastResult(isSaving, &AssetTrackerRequests::IsSaving, m_activeAssetId); } @@ -4084,7 +4087,7 @@ namespace ScriptCanvasEditor if (action == nullptr) { GraphCanvas::GraphCanvasMimeEvent* mimeEvent = m_sceneContextMenu->GetNodePalette()->GetContextMenuEvent(); - + NodeIdPair finalNode = ProcessCreateNodeMimeEvent(mimeEvent, graphCanvasGraphId, AZ::Vector2(aznumeric_cast(scenePoint.x()), aznumeric_cast(scenePoint.y()))); GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::ClearSelection); @@ -4436,7 +4439,7 @@ namespace ScriptCanvasEditor targetLayer = (*selectedEntityIdIter); - selectedEntityIdIter = selectedEntityIds.erase(selectedEntityIdIter); + selectedEntityIdIter = selectedEntityIds.erase(selectedEntityIdIter); } else { @@ -4456,7 +4459,7 @@ namespace ScriptCanvasEditor AZ::TransformBus::Event(createdId, &AZ::TransformBus::Events::SetParent, targetLayer); } } - + for (const AZ::EntityId& entityId : selectedEntityIds) { AssignGraphToEntityImpl(entityId); @@ -4515,7 +4518,7 @@ namespace ScriptCanvasEditor { usableRequestBus = firstRequestBus; } - + if (usableRequestBus == nullptr) { AzToolsFramework::EntityCompositionRequestBus::Broadcast(&EntityCompositionRequests::AddComponentsToEntities, AzToolsFramework::EntityIdList{ entityId } @@ -4681,7 +4684,7 @@ namespace ScriptCanvasEditor } bool MainWindow::IsNodeNudgingEnabled() const - { + { if (m_userSettings) { return m_userSettings->m_allowNodeNudging; @@ -4720,7 +4723,7 @@ namespace ScriptCanvasEditor return 0.03f; } - float MainWindow::GetShakeDeadZonePercent() const + float MainWindow::GetShakeDeadZonePercent() const { if (m_userSettings) { @@ -4730,7 +4733,7 @@ namespace ScriptCanvasEditor return 0.01f; } - float MainWindow::GetShakeStraightnessPercent() const + float MainWindow::GetShakeStraightnessPercent() const { if (m_userSettings) { diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h index ba5ff7f97f..30e84f3fa8 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h @@ -673,7 +673,7 @@ namespace ScriptCanvasEditor AZStd::array assetRootArray; if (!AZ::IO::FileIOBase::GetInstance()->ResolvePath(ScriptCanvas::AssetDescription::GetSuggestedSavePath(), assetRootArray.data(), assetRootArray.size())) { - AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @devassets@ path"); + AZ_ErrorOnce("Script Canvas", false, "Unable to resolve @projectroot@ path"); } AZStd::string assetPath; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp index 5e6858c993..f1832927c5 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.cpp @@ -13,7 +13,9 @@ #include #include +#include #include +#include #include #include @@ -169,10 +171,11 @@ namespace ScriptCanvasEditor QDateTime theTime = QDateTime::currentDateTime(); QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - m_backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(m_backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - m_backupPath = backupPathCStr; + auto settingsRegistry = AZ::SettingsRegistry::Get(); + m_backupPath.clear(); + settingsRegistry->Get(m_backupPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectUserPath); + + m_backupPath = m_backupPath / "ScriptCanvas_BACKUP" / subFolder.toUtf8().data(); if (!AZ::IO::FileIOBase::GetInstance()->Exists(m_backupPath.c_str())) { @@ -489,56 +492,25 @@ namespace ScriptCanvasEditor void UpgradeTool::BackupAsset(const AZ::Data::AssetInfo& assetInfo) { - - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; + AZ::IO::FixedMaxPath sourceFilePath; // Using this to get the watch folder AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo2; + AZ::Data::AssetInfo sourceFileAssetInfo; bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, assetInfo.m_relativePath.c_str(), assetInfo2, watchFolder); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, + &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, + assetInfo.m_relativePath.c_str(), sourceFileAssetInfo, watchFolder); if (sourceInfoFound) { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; + sourceFilePath = AZ::IO::FixedMaxPath(AZStd::string_view(watchFolder)) / sourceFileAssetInfo.m_relativePath; } - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); - - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string targetFilePath; - AzFramework::StringFunc::Path::Join(m_backupPath.c_str(), relativePath.c_str(), targetFilePath); + const auto targetFilePath = m_backupPath / sourceFileAssetInfo.m_relativePath; if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Error) { - AZStd::string filename; - AzFramework::StringFunc::Path::GetFileName(sourceFilePath.c_str(), filename); - AZ_TracePrintf("Script Canvas", "Backup: %s -> %s\n", filename.c_str(), targetFilePath.c_str()); + AZ_TracePrintf("Script Canvas", "Backup: %s -> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); } else { @@ -583,7 +555,7 @@ namespace ScriptCanvasEditor void UpgradeTool::SaveLog() { - AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html"); + AZStd::string outputFileName = AZStd::string::format("@log@/ScriptCanvasUpgradeReport.html"); char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; AZ::IO::FileIOBase::GetInstance()->ResolvePath(outputFileName.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h index be00198457..8a2034bf4f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/UpgradeTool.h @@ -27,6 +27,7 @@ AZ_POP_DISABLE_WARNING #include #include #include +#include #endif class QPushButton; @@ -135,7 +136,7 @@ namespace ScriptCanvasEditor AZ::Entity* m_scriptCanvasEntity = nullptr; - AZStd::string m_backupPath; + AZ::IO::Path m_backupPath; void FinalizeUpgrade(); void DisconnectBuses(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp index eb182ed291..f400f84d51 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorer.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -301,51 +302,37 @@ namespace ScriptCanvasEditor return ""; } + auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); + auto settingsRegistry = AZ::SettingsRegistry::Get(); + QDateTime theTime = QDateTime::currentDateTime(); QString subFolder = theTime.toString("yyyy-MM-dd [HH.mm.ss]"); - AZStd::string backupPath = AZStd::string::format("@devroot@/ScriptCanvas_BACKUP/%s", subFolder.toUtf8().data()); - char backupPathCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(backupPath.c_str(), backupPathCStr, AZ_MAX_PATH_LEN); - backupPath = backupPathCStr; + AZ::IO::FixedMaxPath projectUserPath; + settingsRegistry->Get(projectUserPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectUserPath); + + AZ::IO::FixedMaxPath backupPath = projectUserPath / "ScriptCanvas_BACKUP" / subFolder.toUtf8().data(); - if (!AZ::IO::FileIOBase::GetInstance()->Exists(backupPath.c_str())) + if (!fileIoBase->Exists(backupPath.c_str())) { - if (AZ::IO::FileIOBase::GetInstance()->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) + if (fileIoBase->CreatePath(backupPath.c_str()) != AZ::IO::ResultCode::Success) { AZ_Error(ScriptCanvas::k_VersionExplorerWindow.data(), false, "Failed to create backup folder %s", backupPath.c_str()); return "Failed to create backup folder"; } } - AZStd::string devRoot = "@devroot@"; - AZStd::string devAssets = "@devassets@"; - - char devRootCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devRoot.c_str(), devRootCStr, AZ_MAX_PATH_LEN); - - char devAssetsCStr[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(devAssets.c_str(), devAssetsCStr, AZ_MAX_PATH_LEN); - - AZStd::string relativePath = devAssetsCStr; - AzFramework::StringFunc::Replace(relativePath, devRootCStr, ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AZStd::string sourceFilePath; - AZStd::string watchFolder; AZ::Data::AssetInfo assetInfo; + + AZ::IO::FixedMaxPath sourceFilePath; bool sourceInfoFound{}; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, asset.GetHint().c_str(), assetInfo, watchFolder); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(sourceInfoFound, + &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, + asset.GetHint().c_str(), assetInfo, watchFolder); if (sourceInfoFound) { - AZStd::string assetPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), assetPath); - - sourceFilePath = assetPath; + sourceFilePath = AZ::IO::FixedMaxPath(AZStd::string_view(watchFolder)) / assetInfo.m_relativePath; } else { @@ -353,23 +340,9 @@ namespace ScriptCanvasEditor return "Failed to find source file"; } - devRoot = devRootCStr; - AzFramework::StringFunc::Path::Normalize(devRoot); + const AZ::IO::FixedMaxPath targetFilePath = backupPath / assetInfo.m_relativePath; - relativePath = sourceFilePath; - AzFramework::StringFunc::Replace(relativePath, devRoot.c_str(), ""); - if (relativePath.starts_with("/")) - { - relativePath = relativePath.substr(1, relativePath.size() - 1); - } - - AzFramework::StringFunc::Path::Normalize(relativePath); - AzFramework::StringFunc::Path::Normalize(backupPath); - - AZStd::string targetFilePath = backupPath; - targetFilePath += relativePath; - - if (AZ::IO::FileIOBase::GetInstance()->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) + if (fileIoBase->Copy(sourceFilePath.c_str(), targetFilePath.c_str()) != AZ::IO::ResultCode::Success) { AZ_Warning(ScriptCanvas::k_VersionExplorerWindow.data(), false, "VersionExplorer::BackupGraph: Error creating backup: %s ---> %s\n", sourceFilePath.c_str(), targetFilePath.c_str()); return "Failed to copy source file to backup location"; @@ -602,7 +575,7 @@ namespace ScriptCanvasEditor }); streamer->QueueRequest(flushRequest); } - } + } } void VersionExplorer::GraphUpgradeComplete @@ -816,7 +789,7 @@ namespace ScriptCanvasEditor } char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", asset.GetHint().c_str()); + AZStd::string path = AZStd::string::format("@engroot@/%s", asset.GetHint().c_str()); AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); AZ::StringFunc::Path::Normalize(path); @@ -873,7 +846,7 @@ namespace ScriptCanvasEditor m_state = ProcessState::Upgrade; AZ::SystemTickBus::Handler::BusConnect(); - } + } } } @@ -883,7 +856,7 @@ namespace ScriptCanvasEditor m_inProgress = false; m_ui->progressBar->setValue(aznumeric_cast(m_currentAssetRowIndex)); m_ui->scanButton->setEnabled(true); - + m_inspectingAsset = m_assetsToInspect.erase(m_inspectingAsset); FlushLogs(); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp index 51cb034f35..e1fe71d4d9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ExecutionLogAsset.cpp @@ -85,7 +85,7 @@ namespace ScriptCanvas const char* ExecutionLogAsset::GetDefaultDirectoryRoot() { - return AZ::IO::FileIOBase::GetInstance()->GetAlias("@devroot@"); + return AZ::IO::FileIOBase::GetInstance()->GetAlias("@engroot@"); } ExecutionLogAsset::ExecutionLogAsset(const AZ::Data::AssetId& assetId, AZ::Data::AssetData::AssetStatus status) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h index 037985d980..24c83b20a1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/RuntimeAsset.h @@ -36,7 +36,7 @@ namespace ScriptCanvas azrtti_typeid(), "Script Canvas Runtime", "Script Canvas Runtime Graph", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas_compiled", "Script Canvas Runtime", "Untitled-%i", @@ -177,7 +177,7 @@ namespace ScriptCanvas azrtti_typeid(), "Script Canvas Function Interface", "Script Canvas Function Interface", - "@devassets@/scriptcanvas", + "@projectroot@/scriptcanvas", ".scriptcanvas_fn_compiled", "Script Canvas Function Interface", "Untitled-Function-%i", diff --git a/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp b/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp index 849e2272a2..ee0052d5b9 100644 --- a/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp +++ b/Gems/WhiteBox/Code/Source/EditorWhiteBoxComponent.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -129,7 +130,7 @@ namespace WhiteBox AzToolsFramework::EditorPythonRunnerRequestBus::Broadcast( &AzToolsFramework::EditorPythonRunnerRequestBus::Events::ExecuteByFilenameWithArgs, - "@devroot@/Gems/WhiteBox/Editor/Scripts/default_shapes.py", scriptArgs); + "@engroot@/Gems/WhiteBox/Editor/Scripts/default_shapes.py", scriptArgs); EditorWhiteBoxComponentNotificationBus::Event( AZ::EntityComponentIdPair(GetEntityId(), GetId()), @@ -499,13 +500,13 @@ namespace WhiteBox static AZStd::string WhiteBoxPathAtProjectRoot(const AZStd::string_view name, const AZStd::string_view extension) { - const char* projectFolder = nullptr; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult( - projectFolder, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetAbsoluteDevGameFolderPath); - - return AZStd::string::format( - "%s\\%.*s_whitebox.%.*s", projectFolder, aznumeric_cast(name.size()), name.data(), - aznumeric_cast(extension.size()), extension.data()); + AZ::IO::Path whiteBoxPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(whiteBoxPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + whiteBoxPath /= AZ::IO::FixedMaxPathString::format("%.*s.%.*s", AZ_STRING_ARG(name), AZ_STRING_ARG(extension)); + return whiteBoxPath.Native(); } void EditorWhiteBoxComponent::ExportToFile() diff --git a/Registry/fileio.setreg b/Registry/fileio.setreg new file mode 100644 index 0000000000..d89e9f3f89 --- /dev/null +++ b/Registry/fileio.setreg @@ -0,0 +1,26 @@ +{ + "O3DE": { + "AzCore": { + "FileIO": { + "DeprecatedAliases": [ + { + "OldAlias": "@assets@", + "NewAlias": "@products@" + }, + { + "OldAlias": "@root@", + "NewAlias": "@products@" + }, + { + "OldAlias": "@devassets@", + "NewAlias": "@projectroot@" + }, + { + "OldAlias": "@devroot@", + "NewAlias": "@engroot@" + } + ] + } + } + } +} From 75b0b23fab66876d343edd33d38303ee208b9a33 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 13:40:21 -0700 Subject: [PATCH 104/226] allow multiple single upgrade requests Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Controller.cpp | 176 ++++++++++-------- .../Windows/Tools/UpgradeTool/Controller.h | 4 + .../View/Windows/Tools/UpgradeTool/Model.cpp | 26 ++- .../View/Windows/Tools/UpgradeTool/Model.h | 3 +- 4 files changed, 125 insertions(+), 84 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 207f70aec1..492759c341 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -88,6 +88,22 @@ namespace ScriptCanvasEditor LogBus::Broadcast(&LogTraits::Clear); } + void Controller::EnableAllUpgradeButtons() + { + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } + } + } + + QList Controller::FindTableItems(const AZ::Data::AssetInfo& info) + { + return m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + } + void Controller::OnButtonPressClose() { reject(); @@ -106,7 +122,7 @@ namespace ScriptCanvasEditor if (!scriptCanvasAsset) { AZ_Warning - ( ScriptCanvas::k_VersionExplorerWindow.data() + (ScriptCanvas::k_VersionExplorerWindow.data() , false , "InspectAsset: %s, AsestData failed to return ScriptCanvasAsset" , asset.GetHint().c_str()); @@ -184,7 +200,7 @@ namespace ScriptCanvasEditor if (graphComponent) { graphComponent->UpgradeGraph - ( asset + (asset , m_view->forceUpgrade->isChecked() ? Graph::UpgradeRequest::Forced : Graph::UpgradeRequest::IfOutOfDate , m_view->verbose->isChecked()); } @@ -195,7 +211,7 @@ namespace ScriptCanvasEditor { int result = QMessageBox::No; QMessageBox mb - ( QMessageBox::Warning + (QMessageBox::Warning , QObject::tr("Failed to Save Upgraded File") , QObject::tr("The upgraded file could not be saved because the file is read only.\n" "Do you want to make it writeable and overwrite it?") @@ -221,13 +237,14 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) { - QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); + QList items = FindTableItems(info); if (!items.isEmpty()) { for (auto* item : items) { int row = item->row(); SetRowBusy(row); + m_view->tableWidget->setCellWidget(row, ColumnAction, nullptr); } } } @@ -245,21 +262,23 @@ namespace ScriptCanvasEditor { VE_LOG("Failed to modify %s: %s", result.assetInfo.m_relativePath.c_str(), result.errorMessage.data()); } - - QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) + + QList items = FindTableItems(info); + for (auto* item : items) { - for (auto* item : items) + int row = item->row(); + + if (result.errorMessage.empty()) { - int row = item->row(); + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); - if (result.errorMessage.empty()) + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) { - SetRowSucceeded(row); - } - else - { - SetRowFailed(row, ""); + button->setEnabled(false); } } } @@ -305,15 +324,6 @@ namespace ScriptCanvasEditor { m_view->onlyShowOutdated->setEnabled(true); - // Enable all the Upgrade buttons - for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) - { - if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) - { - button->setEnabled(true); - } - } - QString spinnerText = QStringLiteral("Scan Complete"); spinnerText.append(QString::asprintf(" - Discovered: %zu, Failed: %zu, Upgradeable: %zu, Up-to-date: %zu" , result.m_catalogAssets.size() @@ -324,6 +334,7 @@ namespace ScriptCanvasEditor m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); m_view->progressBar->setVisible(false); + EnableAllUpgradeButtons(); if (!result.m_unfiltered.empty()) { @@ -338,59 +349,67 @@ namespace ScriptCanvasEditor void Controller::OnScannedGraph(const AZ::Data::AssetInfo& assetInfo, [[maybe_unused]] Filtered filtered) { - m_view->tableWidget->insertRow(m_handledAssetCount); - QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); - m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); - SetRowSucceeded(m_handledAssetCount); + const int rowIndex = m_view->tableWidget->rowCount(); - if (filtered == Filtered::No) + if (filtered == Filtered::No || !m_view->onlyShowOutdated->isChecked()) { - QPushButton* rowGoToButton = new QPushButton(this); - rowGoToButton->setText("Upgrade"); - rowGoToButton->setEnabled(false); - SetRowBusy(m_handledAssetCount); - connect - ( rowGoToButton - , &QPushButton::pressed - , this - , [this, assetInfo]() + m_view->tableWidget->insertRow(rowIndex); + QTableWidgetItem* rowName = new QTableWidgetItem(tr(assetInfo.m_relativePath.c_str())); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowSucceeded(rowIndex); + + if (filtered == Filtered::No) + { + QPushButton* upgradeButton = new QPushButton(this); + upgradeButton->setText("Upgrade"); + upgradeButton->setEnabled(false); + SetRowBusy(rowIndex); + + connect + ( upgradeButton + , &QPushButton::pressed + , this + , [this, assetInfo]() { this->OnButtonPressUpgradeSingle(assetInfo); }); - m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnAction), rowGoToButton); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnAction), upgradeButton); + } + + char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; + AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); + AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); + AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); + AZ::StringFunc::Path::Normalize(path); + + bool result = false; + AZ::Data::AssetInfo info; + AZStd::string watchFolder; + QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); + AzToolsFramework::AssetSystemRequestBus::BroadcastResult + ( result + , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath + , assetNameUtf8 + , info + , watchFolder); + AZ_Error + ( ScriptCanvas::k_VersionExplorerWindow.data() + , result + , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); + + QToolButton* browseButton = new QToolButton(this); + browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); + browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); + + QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); + connect(browseButton, &QPushButton::clicked, [absolutePath] { + AzQtComponents::ShowFileOnDesktop(absolutePath); + }); + + m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnBrowse), browseButton); } - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.m_relativePath.c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - - bool result = false; - AZ::Data::AssetInfo info; - AZStd::string watchFolder; - QByteArray assetNameUtf8 = assetInfo.m_relativePath.c_str(); - AzToolsFramework::AssetSystemRequestBus::BroadcastResult - ( result - , &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath - , assetNameUtf8 - , info - , watchFolder); - AZ_Error - ( ScriptCanvas::k_VersionExplorerWindow.data() - , result - , "Failed to locate asset info for '%s'.", assetNameUtf8.constData()); - - QToolButton* browseButton = new QToolButton(this); - browseButton->setToolTip(AzQtComponents::fileBrowserActionName()); - browseButton->setIcon(QIcon(":/stylesheet/img/UI20/browse-edit.svg")); - - QString absolutePath = QDir(watchFolder.c_str()).absoluteFilePath(info.m_relativePath.c_str()); - connect(browseButton, &QPushButton::clicked, [absolutePath] { - AzQtComponents::ShowFileOnDesktop(absolutePath); - }); - - m_view->tableWidget->setCellWidget(m_handledAssetCount, static_cast(ColumnBrowse), browseButton); OnScannedGraphResult(assetInfo); } @@ -403,11 +422,12 @@ namespace ScriptCanvasEditor void Controller::OnScanLoadFailure(const AZ::Data::AssetInfo& info) { - m_view->tableWidget->insertRow(m_handledAssetCount); + const int rowIndex = m_view->tableWidget->rowCount(); + m_view->tableWidget->insertRow(rowIndex); QTableWidgetItem* rowName = new QTableWidgetItem ( tr(AZStd::string::format("Load Error: %s", info.m_relativePath.c_str()).c_str())); - m_view->tableWidget->setItem(m_handledAssetCount, static_cast(ColumnAsset), rowName); - SetRowFailed(m_handledAssetCount, "Load failed"); + m_view->tableWidget->setItem(rowIndex, static_cast(ColumnAsset), rowName); + SetRowFailed(rowIndex, "Load failed"); OnScannedGraphResult(info); } @@ -425,8 +445,9 @@ namespace ScriptCanvasEditor if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) { button->setEnabled(false); - SetRowBusy(row); } + + SetRowBusy(row); } QString spinnerText = QStringLiteral("Upgrade in progress - "); @@ -464,6 +485,8 @@ namespace ScriptCanvasEditor m_view->spinner->SetText(spinnerText); SetSpinnerIsBusy(false); AddLogEntries(); + EnableAllUpgradeButtons(); + m_view->scanButton->setEnabled(true); } void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) @@ -483,6 +506,11 @@ namespace ScriptCanvasEditor { SetRowFailed(row, ""); } + + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); + } } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 23f35840be..ac18ff6cf5 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -22,6 +22,7 @@ AZ_POP_DISABLE_WARNING #endif class QPushButton; +class QTableWidgetItem; namespace Ui { @@ -61,6 +62,9 @@ namespace ScriptCanvasEditor int m_handledAssetCount = 0; void AddLogEntries(); + void EnableAllUpgradeButtons(); + QList FindTableItems(const AZ::Data::AssetInfo& assetInfo); + void OnButtonPressClose(); void OnButtonPressScan(); void OnButtonPressUpgrade(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp index 98edef54bf..d8d242adbb 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.cpp @@ -101,9 +101,9 @@ namespace ScriptCanvasEditor return; } - auto results = m_scanner->TakeResult(); if (modification.modifySingleAsset.m_assetId.IsValid()) { + const auto& results = m_scanner->GetResult(); auto iter = AZStd::find_if ( results.m_unfiltered.begin() , results.m_unfiltered.end() @@ -118,24 +118,32 @@ namespace ScriptCanvasEditor return; } - WorkingAsset singleEntry = *iter; - results.m_unfiltered.clear(); - results.m_unfiltered.push_back(singleEntry); + + m_state = State::ModifySingle; + m_modifier = AZStd::make_unique(modification, WorkingAssets{ *iter }, [this]() { OnModificationComplete(); }); + } + else + { + auto results = m_scanner->TakeResult(); + m_state = State::ModifyAll; + m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this]() { OnModificationComplete(); }); } m_modResults = {}; - m_state = State::Modifying; m_log.Activate(); - m_keepEditorAlive = AZStd::make_unique(); - - m_modifier = AZStd::make_unique(modification, AZStd::move(results.m_unfiltered), [this](){ OnModificationComplete(); }); + m_keepEditorAlive = AZStd::make_unique(); } void Model::OnModificationComplete() { ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeComplete, m_modifier->GetResult()); m_modifier.reset(); - m_scanner.reset(); + + if (m_state == State::ModifyAll) + { + m_scanner.reset(); + } + Idle(); } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index e11f8857e7..58ad9877be 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -54,7 +54,8 @@ namespace ScriptCanvasEditor { Idle, Scanning, - Modifying, + ModifyAll, + ModifySingle }; State m_state = State::Idle; From 09342694c92dd90386b24f3c2f78c0aa3ebdfd89 Mon Sep 17 00:00:00 2001 From: AMZN-Phil Date: Tue, 5 Oct 2021 13:49:27 -0700 Subject: [PATCH 105/226] Fix issues with adding a repo and make each object type optional in repo.json Signed-off-by: AMZN-Phil --- scripts/o3de/o3de/register.py | 7 +++-- scripts/o3de/o3de/repo.py | 58 +++++++++++++++++++++++++++++------ scripts/o3de/o3de/utils.py | 8 +++-- 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/scripts/o3de/o3de/register.py b/scripts/o3de/o3de/register.py index 7db09368ec..c3d201f23c 100644 --- a/scripts/o3de/o3de/register.py +++ b/scripts/o3de/o3de/register.py @@ -487,14 +487,14 @@ def register_repo(json_data: dict, if remove: logger.warn(f'Removing repo uri {repo_uri}.') return 0 - repo_sha256 = hashlib.sha256(url.encode()) cache_file = manifest.get_o3de_cache_folder() / str(repo_sha256.hexdigest() + '.json') - result = utils.download_file(url, cache_file) + result = utils.download_file(parsed_uri, cache_file) if result == 0: - json_data['repos'].insert(0, repo_uri.as_posix()) + json_data['repos'].insert(0, repo_uri) + repo_set = set() result = repo.process_add_o3de_repo(cache_file, repo_set) return result @@ -621,6 +621,7 @@ def register(engine_path: pathlib.Path = None, return 1 result = result or register_gem_path(json_data, gem_path, remove, external_subdir_engine_path, external_subdir_project_path) + if isinstance(external_subdir_path, pathlib.PurePath): if not external_subdir_path: logger.error(f'External Subdirectory path is None.') diff --git a/scripts/o3de/o3de/repo.py b/scripts/o3de/o3de/repo.py index 8492f391e5..39fe79bbc2 100644 --- a/scripts/o3de/o3de/repo.py +++ b/scripts/o3de/o3de/repo.py @@ -12,6 +12,7 @@ import pathlib import shutil import urllib.parse import urllib.request +import hashlib from o3de import manifest, utils, validation @@ -24,7 +25,6 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, file_name = pathlib.Path(file_name).resolve() if not validation.valid_o3de_repo_json(file_name): return 1 - cache_folder = manifest.get_o3de_cache_folder() with file_name.open('r') as f: @@ -34,11 +34,30 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, logger.error(f'{file_name} failed to load: {str(e)}') return 1 - for o3de_object_uris, manifest_json in [(repo_data['engines'], 'engine.json'), - (repo_data['projects'], 'project.json'), - (repo_data['gems'], 'gem.json'), - (repo_data['template'], 'template.json'), - (repo_data['restricted'], 'restricted.json')]: + # A repo may not contain all types of object. + manifest_download_list = [] + try: + manifest_download_list.append((repo_data['engines'], 'engine.json')) + except Exception: + pass + try: + manifest_download_list.append((repo_data['projects'], 'project.json')) + except Exception: + pass + try: + manifest_download_list.append((repo_data['gems'], 'gem.json')) + except Exception: + pass + try: + manifest_download_list.append((repo_data['templates'], 'template.json')) + except Exception: + pass + try: + manifest_download_list.append((repo_data['restricted'], 'restricted.json')) + except Exception: + pass + + for o3de_object_uris, manifest_json in manifest_download_list: for o3de_object_uri in o3de_object_uris: manifest_json_uri = f'{o3de_object_uri}/{manifest_json}' manifest_json_sha256 = hashlib.sha256(manifest_json_uri.encode()) @@ -49,7 +68,27 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, if download_file_result != 0: return download_file_result - repo_set |= repo_data['repos'] + # Having a repo is also optional + repo_list = [] + try: + repo_list.add(repo_data['repos']) + except Exception: + pass + + for repo in repo_list: + if repo not in repo_set: + repo_set.add(repo) + for o3de_object_uri in o3de_object_uris: + parsed_uri = urllib.parse.urlparse(f'{repo}/repo.json') + manifest_json_sha256 = hashlib.sha256(parsed_uri.geturl().encode()) + cache_file = cache_folder / str(manifest_json_sha256.hexdigest() + '.json') + if cache_file.is_file(): + cache_file.unlink() + download_file_result = utils.download_file(parsed_uri, cache_file) + if download_file_result != 0: + return download_file_result + + return process_add_o3de_repo(parsed_uri.geturl(), repo_set) return 0 @@ -70,11 +109,10 @@ def refresh_repos() -> int: if repo_uri not in repo_set: repo_set.add(repo_uri) - repo_uri = f'{repo_uri}/repo.json' - repo_sha256 = hashlib.sha256(repo_uri.encode()) + parsed_uri = urllib.parse.urlparse(f'{repo_uri}/repo.json') + repo_sha256 = hashlib.sha256(parsed_uri.geturl().encode()) cache_file = cache_folder / str(repo_sha256.hexdigest() + '.json') if not cache_file.is_file(): - parsed_uri = urllib.parse.urlparse(repo_uri) download_file_result = utils.download_file(parsed_uri, cache_file) if download_file_result != 0: return download_file_result diff --git a/scripts/o3de/o3de/utils.py b/scripts/o3de/o3de/utils.py index 18f80584cc..9f9c747390 100755 --- a/scripts/o3de/o3de/utils.py +++ b/scripts/o3de/o3de/utils.py @@ -13,6 +13,10 @@ import uuid import pathlib import shutil import urllib.request +import logging + +logger = logging.getLogger() +logging.basicConfig() def validate_identifier(identifier: str) -> bool: """ @@ -97,11 +101,11 @@ def download_file(parsed_uri, download_path: pathlib.Path) -> int: if download_path.is_file(): logger.warn(f'File already downloaded to {download_path}.') elif parsed_uri.scheme in ['http', 'https', 'ftp', 'ftps']: - with urllib.request.urlopen(url) as s: + with urllib.request.urlopen(parsed_uri.geturl()) as s: with download_path.open('wb') as f: shutil.copyfileobj(s, f) else: - origin_file = pathlib.Path(url).resolve() + origin_file = pathlib.Path(parsed_uri.geturl()).resolve() if not origin_file.is_file(): return 1 shutil.copy(origin_file, download_path) From e5a7315de439efbc58b65d8ad544a1b32fbe52f3 Mon Sep 17 00:00:00 2001 From: bosnichd Date: Tue, 5 Oct 2021 14:59:50 -0600 Subject: [PATCH 106/226] Auto-expand input mappings. (#4501) Signed-off-by: bosnichd --- .../AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp | 1 + .../AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp index 6837807f4e..a24860fd34 100644 --- a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp +++ b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingAnd.cpp @@ -35,6 +35,7 @@ namespace AzFramework ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &InputMappingAnd::Config::GetNameLabelOverride) ->DataElement(AZ::Edit::UIHandlers::Default, &Config::m_sourceInputChannelNames, "Source Input Channel Names", "The source input channel names that will be mapped to the output input channel name.") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ; } } diff --git a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp index bc47065c05..7c983766c8 100644 --- a/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp +++ b/Code/Framework/AzFramework/AzFramework/Input/Mappings/InputMappingOr.cpp @@ -35,6 +35,7 @@ namespace AzFramework ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &InputMappingOr::Config::GetNameLabelOverride) ->DataElement(AZ::Edit::UIHandlers::Default, &Config::m_sourceInputChannelNames, "Source Input Channel Names", "The source input channel names that will be mapped to the output input channel name.") + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ; } } From 64fa92c56dc36e156d437a55e756514cbdec6782 Mon Sep 17 00:00:00 2001 From: AMZN-Phil Date: Tue, 5 Oct 2021 14:41:20 -0700 Subject: [PATCH 107/226] Constrain exceptions to the type we are handling. Signed-off-by: AMZN-Phil --- scripts/o3de/o3de/repo.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/o3de/o3de/repo.py b/scripts/o3de/o3de/repo.py index 39fe79bbc2..52abfc3386 100644 --- a/scripts/o3de/o3de/repo.py +++ b/scripts/o3de/o3de/repo.py @@ -38,23 +38,23 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, manifest_download_list = [] try: manifest_download_list.append((repo_data['engines'], 'engine.json')) - except Exception: + except KeyError: pass try: manifest_download_list.append((repo_data['projects'], 'project.json')) - except Exception: + except KeyError: pass try: manifest_download_list.append((repo_data['gems'], 'gem.json')) - except Exception: + except KeyError: pass try: manifest_download_list.append((repo_data['templates'], 'template.json')) - except Exception: + except KeyError: pass try: manifest_download_list.append((repo_data['restricted'], 'restricted.json')) - except Exception: + except KeyError: pass for o3de_object_uris, manifest_json in manifest_download_list: @@ -72,7 +72,7 @@ def process_add_o3de_repo(file_name: str or pathlib.Path, repo_list = [] try: repo_list.add(repo_data['repos']) - except Exception: + except KeyError: pass for repo in repo_list: From ac836da605fe23e0322f8d95875d66a8f13c76b4 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 14:43:19 -0700 Subject: [PATCH 108/226] disable upgrade all button until disparity from single upgrade is discovered Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Windows/Tools/UpgradeTool/Controller.cpp | 75 ++++++++++--------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 492759c341..6fa0f1adfa 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -54,6 +54,7 @@ namespace ScriptCanvasEditor m_view->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); connect(m_view->scanButton, &QPushButton::pressed, this, &Controller::OnButtonPressScan); connect(m_view->closeButton, &QPushButton::pressed, this, &Controller::OnButtonPressClose); + m_view->upgradeAllButton->setVisible(false); connect(m_view->upgradeAllButton, &QPushButton::pressed, this, &Controller::OnButtonPressUpgrade); m_view->progressBar->setValue(0); m_view->progressBar->setVisible(false); @@ -237,15 +238,11 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeModificationBegin([[maybe_unused]] const ModifyConfiguration& config, const AZ::Data::AssetInfo& info) { - QList items = FindTableItems(info); - if (!items.isEmpty()) + for (auto* item : FindTableItems(info)) { - for (auto* item : items) - { - int row = item->row(); - SetRowBusy(row); - m_view->tableWidget->setCellWidget(row, ColumnAction, nullptr); - } + int row = item->row(); + SetRowBusy(row); + m_view->tableWidget->setCellWidget(row, ColumnAction, nullptr); } } @@ -263,8 +260,7 @@ namespace ScriptCanvasEditor VE_LOG("Failed to modify %s: %s", result.assetInfo.m_relativePath.c_str(), result.errorMessage.data()); } - QList items = FindTableItems(info); - for (auto* item : items) + for (auto* item : FindTableItems(info)) { int row = item->row(); @@ -440,23 +436,32 @@ namespace ScriptCanvasEditor ( const ModifyConfiguration& config , [[maybe_unused]] const WorkingAssets& assets) { - for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) - { - if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) - { - button->setEnabled(false); - } - - SetRowBusy(row); - } - QString spinnerText = QStringLiteral("Upgrade in progress - "); if (config.modifySingleAsset.m_assetId.IsValid()) { spinnerText.append(" single graph"); + + if (assets.size() == 1) + { + for (auto* item : FindTableItems(assets.front().info)) + { + int row = item->row(); + SetRowBusy(row); + } + } } else { + for (int row = 0; row < m_view->tableWidget->rowCount(); ++row) + { + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(false); + } + + SetRowBusy(row); + } + spinnerText.append(" all scanned graphs"); } @@ -491,26 +496,22 @@ namespace ScriptCanvasEditor void Controller::OnUpgradeDependenciesGathered(const AZ::Data::AssetInfo& info, Result result) { - QList items = m_view->tableWidget->findItems(info.m_relativePath.c_str(), Qt::MatchFlag::MatchExactly); - if (!items.isEmpty()) + for (auto* item : FindTableItems(info)) { - for (auto* item : items) - { - int row = item->row(); + int row = item->row(); - if (result == Result::Success) - { - SetRowSucceeded(row); - } - else - { - SetRowFailed(row, ""); - } + if (result == Result::Success) + { + SetRowSucceeded(row); + } + else + { + SetRowFailed(row, ""); + } - if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) - { - button->setEnabled(true); - } + if (QPushButton* button = qobject_cast(m_view->tableWidget->cellWidget(row, ColumnAction))) + { + button->setEnabled(true); } } From 84f28033a052553ebf69ca91d4efabff6d33f367 Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Tue, 5 Oct 2021 14:43:30 -0700 Subject: [PATCH 109/226] ATOM-16249 Adding draw srg caching to DynamicDrawContext since creating SRG can be expensive for some backend (#4491) * ATOM-16249 Adding draw srg caching to DynamicDrawContext since creating SRG can be expensive for some backend Signed-off-by: Qing Tao --- .../Atom/RHI/ShaderResourceGroupData.h | 4 +++ .../Source/RHI/ShaderResourceGroupData.cpp | 8 ++++++ .../DynamicDraw/DynamicDrawContext.h | 2 ++ .../RPI.Public/Shader/ShaderResourceGroup.h | 3 ++ .../DynamicDraw/DynamicDrawContext.cpp | 28 +++++++++++++++---- .../RPI.Public/Shader/ShaderResourceGroup.cpp | 5 ++++ 6 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h index 0ce43159f6..cbb0db53c8 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h @@ -166,6 +166,10 @@ namespace AZ AZStd::array_view> GetImageGroup() const; AZStd::array_view> GetBufferGroup() const; AZStd::array_view GetSamplerGroup() const; + + //! Reset image and buffer views setup for this ShaderResourceGroupData + //! So it won't hold references for any RHI resources + void ResetViews(); //! Returns the opaque constant data populated by calls to SetConstant and SetConstantData. //! diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp index da7697d8f2..18b292ac64 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp @@ -330,6 +330,14 @@ namespace AZ return m_samplers; } + void ShaderResourceGroupData::ResetViews() + { + m_imageViews.assign(m_imageViews.size(), nullptr); + m_bufferViews.assign(m_bufferViews.size(), nullptr); + m_imageViewsUnboundedArray.assign(m_imageViewsUnboundedArray.size(), nullptr); + m_bufferViewsUnboundedArray.assign(m_bufferViewsUnboundedArray.size(), nullptr); + } + AZStd::array_view ShaderResourceGroupData::GetConstantData() const { return m_constantsData.GetConstantData(); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h index 93e595243e..c35d0750a5 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h @@ -268,6 +268,8 @@ namespace AZ AZStd::vector m_cachedStreamBufferViews; AZStd::vector m_cachedIndexBufferViews; AZStd::vector> m_cachedDrawSrg; + + uint32_t m_nextDrawSrgIdx = 0; // structure includes DrawItem and stream and index buffer index using BufferViewIndexType = uint32_t; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h index b2cea448c1..99f1f5f598 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h @@ -133,6 +133,9 @@ namespace AZ /// Returns an array of RPI buffers associated with the buffer shader input index. AZStd::array_view> GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const; AZStd::array_view> GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const; + + //! Reset image and buffer views so that it won't hold references for any RHI resources + void ResetViews(); ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access of RHI Image types. diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp index 4da85823b3..3b3473a2da 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp @@ -518,7 +518,6 @@ namespace AZ if (drawSrg) { drawItem.m_uniqueShaderResourceGroup = drawSrg->GetRHIShaderResourceGroup(); - m_cachedDrawSrg.push_back(drawSrg); } // Set scissor per draw if scissor is enabled. @@ -608,7 +607,6 @@ namespace AZ if (drawSrg) { drawItem.m_uniqueShaderResourceGroup = drawSrg->GetRHIShaderResourceGroup(); - m_cachedDrawSrg.push_back(drawSrg); } // Set scissor per draw if scissor is enabled. @@ -635,7 +633,22 @@ namespace AZ { return nullptr; } - auto drawSrg = AZ::RPI::ShaderResourceGroup::Create(m_shader->GetAsset(), m_shader->GetSupervariantIndex(), m_drawSrgLayout->GetName()); + + Data::Instance drawSrg; + if (m_nextDrawSrgIdx == m_cachedDrawSrg.size()) + { + drawSrg = AZ::RPI::ShaderResourceGroup::Create(m_shader->GetAsset(), m_shader->GetSupervariantIndex(), m_drawSrgLayout->GetName()); + m_cachedDrawSrg.push_back(drawSrg); + } + else if (m_nextDrawSrgIdx < m_cachedDrawSrg.size()) + { + drawSrg = m_cachedDrawSrg[m_nextDrawSrgIdx]; + } + else + { + AZ_Assert(false, "Unexpected next draw srg index"); + } + m_nextDrawSrgIdx++; // Set fallback value for shader variant if draw srg contains constant for shader variant fallback if (m_hasShaderVariantKeyFallbackEntry) @@ -727,7 +740,7 @@ namespace AZ } for (auto& drawItemProperties : m_cachedDrawList) - { + { view->AddDrawItem(m_drawListTag, drawItemProperties); } } @@ -743,9 +756,14 @@ namespace AZ m_cachedDrawItems.clear(); m_cachedStreamBufferViews.clear(); m_cachedIndexBufferViews.clear(); - m_cachedDrawSrg.clear(); m_cachedDrawList.clear(); + m_nextDrawSrgIdx = 0; m_drawFinalized = false; + + for (auto srg:m_cachedDrawSrg) + { + srg->ResetViews(); + } } const RHI::PipelineState* DynamicDrawContext::GetCurrentPipelineState() diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp index 499365a9a9..f95c6abfcd 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp @@ -580,6 +580,11 @@ namespace AZ return {}; } + void ShaderResourceGroup::ResetViews() + { + m_data.ResetViews(); + } + const RHI::SamplerState& ShaderResourceGroup::GetSampler(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex) const { inputIndex.ValidateOrFindSamplerIndex(GetLayout()); From be166d68b8313397c8c79a36630f4f84bdc255d7 Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Wed, 29 Sep 2021 16:16:29 -0500 Subject: [PATCH 110/226] Reduce the default worker thread priority for the Job system, Job system is now aimed at long running or idle tasks Add cvars to control the number of worker threads created by the TaskGraph and Job systems. The cvars are scales on the hw concurrency of the cpu. Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com> --- .../Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp | 9 +++++++-- Code/Framework/AzCore/AzCore/Jobs/JobManagerDesc.h | 2 +- Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp | 4 ++-- .../AzCore/AzCore/Task/TaskGraphSystemComponent.cpp | 8 ++++++-- .../AzCore/std/parallel/internal/thread_UnixLike.cpp | 4 ++++ 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp index 25dfc7a493..2cd740bf9e 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp @@ -18,6 +18,11 @@ #include #include +#include + +AZ_CVAR(uint32_t, cl_numeratorJobThreads, 1, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine supports to create at initialization"); +AZ_CVAR(uint32_t, cl_denominatorJobThreads, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system divisor on the number of hw threads the machine supports to create at initialization"); + namespace AZ { //========================================================================= @@ -46,9 +51,9 @@ namespace AZ JobManagerThreadDesc threadDesc; int numberOfWorkerThreads = m_numberOfWorkerThreads; - if (numberOfWorkerThreads <= 0) + if (numberOfWorkerThreads <= 0) // spawn default number of threads { - numberOfWorkerThreads = AZ::GetMin(static_cast(desc.m_workerThreads.capacity()), AZStd::thread::hardware_concurrency()); + numberOfWorkerThreads = AZ::GetMin(static_cast(desc.m_workerThreads.capacity()), cl_numeratorJobThreads * AZStd::thread::hardware_concurrency() / cl_denominatorJobThreads); #if (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS) numberOfWorkerThreads = AZ::GetMin(numberOfWorkerThreads, AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS); #endif // (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS) diff --git a/Code/Framework/AzCore/AzCore/Jobs/JobManagerDesc.h b/Code/Framework/AzCore/AzCore/Jobs/JobManagerDesc.h index 5594d7aa15..94f84f27b3 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/JobManagerDesc.h +++ b/Code/Framework/AzCore/AzCore/Jobs/JobManagerDesc.h @@ -36,7 +36,7 @@ namespace AZ */ int m_stackSize; - JobManagerThreadDesc(int cpuId = -1, int priority = -100000, int stackSize = -1) + JobManagerThreadDesc(int cpuId = -1, int priority = 0, int stackSize = -1) : m_cpuId(cpuId) , m_priority(priority) , m_stackSize(stackSize) diff --git a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp index 7da04d7301..4097348798 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp @@ -308,11 +308,11 @@ namespace AZ void TaskExecutor::SetInstance(TaskExecutor* executor) { - if (!executor) + if (!executor) // allow unsetting the executor { s_executor.Reset(); } - else if (!s_executor) // ignore any calls to set after the first (this happens in unit tests that create new system entities) + else if (!s_executor) // ignore any extra executors after the first (this happens during unit tests) { s_executor = AZ::Environment::CreateVariable(s_executorName, executor); } diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp index eed461ecb4..198969dbce 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp @@ -14,6 +14,9 @@ // Create a cvar as a central location for experimentation with switching from the Job system to TaskGraph system. AZ_CVAR(bool, cl_activateTaskGraph, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Flag clients of TaskGraph to switch between jobs/taskgraph (Note does not disable task graph system)"); +AZ_CVAR(uint32_t, cl_numeratorTaskGraphThreads, 3, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph multiplier on the number of hw threads the machine supports to create at initialization"); +AZ_CVAR(uint32_t, cl_denominatorTaskGraphThreads, 4, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph divisor on the number of hw threads the machine supports to create at initialization"); + static constexpr uint32_t TaskExecutorServiceCrc = AZ_CRC_CE("TaskExecutorService"); namespace AZ @@ -24,9 +27,10 @@ namespace AZ if (Interface::Get() == nullptr) { - Interface::Register(this); - m_taskExecutor = aznew TaskExecutor(); + uint32_t numThreads = cl_numeratorTaskGraphThreads * AZStd::thread::hardware_concurrency() / cl_denominatorTaskGraphThreads; + m_taskExecutor = aznew TaskExecutor(numThreads); TaskExecutor::SetInstance(m_taskExecutor); + Interface::Register(this); } } diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp index 079f167408..b615f677f1 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp @@ -59,6 +59,10 @@ namespace AZStd { priority = desc->m_priority; } + else + { + priority = SCHED_OTHER; + } if (desc->m_name) { name = desc->m_name; From 502513f08112fd41e752756de4c9f376231af960 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 15:05:04 -0700 Subject: [PATCH 111/226] remove superflous comment Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp index 665a481a17..7d4cfec909 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp @@ -110,14 +110,12 @@ namespace ScriptCanvasBuilder const ScriptCanvas::Translation::Result translationResult = TranslateToLua(request); auto isSuccessOutcome = translationResult.IsSuccess(ScriptCanvas::Translation::TargetFlags::Lua); - if (!isSuccessOutcome.IsSuccess()) { - // sanity check return AZ::Failure(isSuccessOutcome.TakeError()); } - auto& translation = translationResult.m_translations.find(ScriptCanvas::Translation::TargetFlags::Lua)->second; + auto& translation = translationResult.m_translations.find(ScriptCanvas::Translation::TargetFlags::Lua)->second; AZ::Data::Asset asset; scriptAssetId.m_subId = AZ::ScriptAsset::CompiledAssetSubId; asset.Create(scriptAssetId); From 977d58e1a8f0a3b68a229191ef9c252814fc8538 Mon Sep 17 00:00:00 2001 From: Nicholas Lawson <70027408+lawsonamzn@users.noreply.github.com> Date: Tue, 5 Oct 2021 15:20:26 -0700 Subject: [PATCH 112/226] Update ZLIB min req osx ios and android to reasonable limits (#4473) This also updates the name of the zlib library to uppercase ZLIB which conforms to normal CMake standards . Signed-off-by: lawsonamzn <70027408+lawsonamzn@users.noreply.github.com> --- Code/Editor/CMakeLists.txt | 2 -- Code/Editor/Plugins/EditorCommon/CMakeLists.txt | 1 - Code/Framework/AzCore/CMakeLists.txt | 2 +- Code/Framework/AzFramework/CMakeLists.txt | 1 - Code/Framework/AzNetworking/CMakeLists.txt | 1 - Code/Legacy/CrySystem/CMakeLists.txt | 1 - cmake/3rdParty/BuiltInPackages.cmake | 11 ++++++++++- .../Platform/Android/BuiltInPackages_android.cmake | 2 +- .../Platform/Linux/BuiltInPackages_linux.cmake | 2 +- cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake | 2 +- .../Platform/Windows/BuiltInPackages_windows.cmake | 2 +- cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake | 2 +- 12 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Code/Editor/CMakeLists.txt b/Code/Editor/CMakeLists.txt index 5884795413..2ea0aa1a74 100644 --- a/Code/Editor/CMakeLists.txt +++ b/Code/Editor/CMakeLists.txt @@ -33,7 +33,6 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE Legacy::CryCommon - 3rdParty::zlib PUBLIC 3rdParty::Qt::Core 3rdParty::Qt::Gui @@ -105,7 +104,6 @@ ly_add_target( 3rdParty::Qt::Concurrent 3rdParty::tiff 3rdParty::squish-ccr - 3rdParty::zlib 3rdParty::AWSNativeSDK::STS Legacy::CryCommon Legacy::EditorCommon diff --git a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt index cd9f2e79c7..609482b581 100644 --- a/Code/Editor/Plugins/EditorCommon/CMakeLists.txt +++ b/Code/Editor/Plugins/EditorCommon/CMakeLists.txt @@ -39,7 +39,6 @@ ly_add_target( EDITOR_COMMON_IMPORTS BUILD_DEPENDENCIES PRIVATE - 3rdParty::zlib 3rdParty::Qt::Core 3rdParty::Qt::Widgets Legacy::CryCommon diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index 60c5f50594..96ed838ccc 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -39,7 +39,7 @@ ly_add_target( 3rdParty::Lua 3rdParty::RapidJSON 3rdParty::RapidXML - 3rdParty::zlib + 3rdParty::ZLIB 3rdParty::zstd 3rdParty::cityhash ${AZ_CORE_PIX_BUILD_DEPENDENCIES} diff --git a/Code/Framework/AzFramework/CMakeLists.txt b/Code/Framework/AzFramework/CMakeLists.txt index 59393d90a1..b22586162b 100644 --- a/Code/Framework/AzFramework/CMakeLists.txt +++ b/Code/Framework/AzFramework/CMakeLists.txt @@ -29,7 +29,6 @@ ly_add_target( AZ::AzCore PUBLIC AZ::GridMate - 3rdParty::zlib 3rdParty::zstd 3rdParty::lz4 ) diff --git a/Code/Framework/AzNetworking/CMakeLists.txt b/Code/Framework/AzNetworking/CMakeLists.txt index 7f9d856eb9..a0a3871201 100644 --- a/Code/Framework/AzNetworking/CMakeLists.txt +++ b/Code/Framework/AzNetworking/CMakeLists.txt @@ -25,7 +25,6 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE AZ::AzCore - 3rdParty::zlib 3rdParty::zstd 3rdParty::OpenSSL PUBLIC diff --git a/Code/Legacy/CrySystem/CMakeLists.txt b/Code/Legacy/CrySystem/CMakeLists.txt index 9e1cf92267..4c1f0d9b82 100644 --- a/Code/Legacy/CrySystem/CMakeLists.txt +++ b/Code/Legacy/CrySystem/CMakeLists.txt @@ -28,7 +28,6 @@ ly_add_target( 3rdParty::lz4 3rdParty::md5 3rdParty::tiff - 3rdParty::zlib 3rdParty::zstd Legacy::CryCommon Legacy::CrySystem.XMLBinary diff --git a/cmake/3rdParty/BuiltInPackages.cmake b/cmake/3rdParty/BuiltInPackages.cmake index c583774e3a..743e2e983e 100644 --- a/cmake/3rdParty/BuiltInPackages.cmake +++ b/cmake/3rdParty/BuiltInPackages.cmake @@ -18,4 +18,13 @@ set(LY_PAL_PACKAGE_FILE_NAME ${CMAKE_CURRENT_LIST_DIR}/${pal_dir}/BuiltInPackage include(${LY_PAL_PACKAGE_FILE_NAME}) # add the above file to the ALLFILES list, so that they show up in IDEs -set(ALLFILES ${ALLFILES} ${LY_PAL_PACKAGE_FILE_NAME}) \ No newline at end of file +set(ALLFILES ${ALLFILES} ${LY_PAL_PACKAGE_FILE_NAME}) + +# temporary compatibility: +# Some 3p libraries may still refer to zlib as "3rdParty::zlib" instead of +# the correct "3rdParty::ZLIB" (Case difference). Until those libraries are updated +# we alias the casing here. This also provides backward compatibility for Gems that use 3rdParty::zlib +# that are not part of the core O3DE repo. +ly_download_associated_package(ZLIB) +find_package(ZLIB) +add_library(3rdParty::zlib ALIAS 3rdParty::ZLIB) diff --git a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake index 5de2ad0253..4d17e4b20b 100644 --- a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake +++ b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake @@ -27,6 +27,6 @@ ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-android TARGETS Goo ly_associate_package(PACKAGE_NAME libpng-1.6.37-rev1-android TARGETS libpng PACKAGE_HASH 51d3ec1559c5595196c11e11674cf5745989d3073bf33dabc6697e3eee77a1cc) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-android TARGETS libsamplerate PACKAGE_HASH bf13662afe65d02bcfa16258a4caa9b875534978227d6f9f36c9cfa92b3fb12b) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-android TARGETS OpenSSL PACKAGE_HASH 4036d4019d722f0e1b7a1621bf60b5a17ca6a65c9c78fd8701cee1131eec8480) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-android TARGETS zlib PACKAGE_HASH 85b730b97176772538cfcacd6b6aaf4655fc2d368d134d6dd55e02f28f183826) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-android TARGETS ZLIB PACKAGE_HASH 73c9e88892c237a3fc6eafc04268ccd9d479e6d55f9df2ed58b236c8f9cf2cae) ly_associate_package(PACKAGE_NAME lz4-1.9.3-vcpkg-rev4-android TARGETS lz4 PACKAGE_HASH f5b22642d218dbbb442cae61e469e5b241c4740acd258c3e8678e60dec61ea93) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index e634cb19c5..fb02a80088 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -42,7 +42,7 @@ ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev2-linux ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-linux TARGETS DirectXShaderCompilerDxc PACKAGE_HASH 88c4a359325d749bc34090b9ac466424847f3b71ba0de15045cf355c17c07099) ly_associate_package(PACKAGE_NAME SPIRVCross-2021.04.29-rev1-linux TARGETS SPIRVCross PACKAGE_HASH 7889ee5460a688e9b910c0168b31445c0079d363affa07b25d4c8aeb608a0b80) ly_associate_package(PACKAGE_NAME azslc-1.7.23-rev2-linux TARGETS azslc PACKAGE_HASH 1ba84d8321a566d35a1e9aa7400211ba8e6d1c11c08e4be3c93e6e74b8f7aef1) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-linux TARGETS zlib PACKAGE_HASH 16f3b9e11cda525efb62144f354c1cfc30a5def9eff020dbe49cb00ee7d8234f) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-linux TARGETS ZLIB PACKAGE_HASH 9be5ea85722fc27a8645a9c8a812669d107c68e6baa2ca0740872eaeb6a8b0fc) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-linux TARGETS squish-ccr PACKAGE_HASH 85fecafbddc6a41a27c5f59ed4a5dfb123a94cb4666782cf26e63c0a4724c530) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-linux TARGETS astc-encoder PACKAGE_HASH 2ba97a06474d609945f0ab4419af1f6bbffdd294ca6b869f5fcebec75c573c0f) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-linux TARGETS ISPCTexComp PACKAGE_HASH 065fd12abe4247dde247330313763cf816c3375c221da030bdec35024947f259) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index fd46191015..e80956530a 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -40,7 +40,7 @@ ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-mac ly_associate_package(PACKAGE_NAME qt-5.15.2-rev5-mac TARGETS Qt PACKAGE_HASH 9d25918351898b308ded3e9e571fff6f26311b2071aeafd00dd5b249fdf53f7e) ly_associate_package(PACKAGE_NAME libpng-1.6.37-mac TARGETS libpng PACKAGE_HASH 1ad76cd038ccc1f288f83c5fe2859a0f35c5154e1fe7658e1230cc428d318a8b) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-mac TARGETS libsamplerate PACKAGE_HASH b912af40c0ac197af9c43d85004395ba92a6a859a24b7eacd920fed5854a97fe) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-mac TARGETS zlib PACKAGE_HASH 21714e8a6de4f2523ee92a7f52d51fbee29c5f37ced334e00dc3c029115b472e) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-mac TARGETS ZLIB PACKAGE_HASH b6fea9c79b8bf106d4703b67fecaa133f832ad28696c2ceef45fb5f20013c096) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-mac TARGETS squish-ccr PACKAGE_HASH 155bfbfa17c19a9cd2ef025de14c5db598f4290045d5b0d83ab58cb345089a77) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-mac TARGETS astc-encoder PACKAGE_HASH 96f6ea8c3e45ec7fe525230c7c53ca665c8300d8e28456cc19bb3159ce6f8dcc) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-mac TARGETS ISPCTexComp PACKAGE_HASH 8a4e93277b8face6ea2fd57c6d017bdb55643ed3d6387110bc5f6b3b884dd169) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 333c952051..7e112c405e 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -47,7 +47,7 @@ ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows ly_associate_package(PACKAGE_NAME civetweb-1.8-rev1-windows TARGETS civetweb PACKAGE_HASH 36d0e58a59bcdb4dd70493fb1b177aa0354c945b06c30416348fd326cf323dd4) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev2-windows TARGETS OpenSSL PACKAGE_HASH 9af1c50343f89146b4053101a7aeb20513319a3fe2f007e356d7ce25f9241040) ly_associate_package(PACKAGE_NAME Crashpad-0.8.0-rev1-windows TARGETS Crashpad PACKAGE_HASH d162aa3070147bc0130a44caab02c5fe58606910252caf7f90472bd48d4e31e2) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-windows TARGETS zlib PACKAGE_HASH 9afab1d67641ed8bef2fb38fc53942da47f2ab339d9e77d3d20704a48af2da0b) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-windows TARGETS ZLIB PACKAGE_HASH 8847112429744eb11d92c44026fc5fc53caa4a06709382b5f13978f3c26c4cbd) ly_associate_package(PACKAGE_NAME squish-ccr-deb557d-rev1-windows TARGETS squish-ccr PACKAGE_HASH 5c3d9fa491e488ccaf802304ad23b932268a2b2846e383f088779962af2bfa84) ly_associate_package(PACKAGE_NAME astc-encoder-3.2-rev1-windows TARGETS astc-encoder PACKAGE_HASH 3addc6fc1a7eb0d6b7f3d530e962af967e6d92b3825ef485da243346357cf78e) ly_associate_package(PACKAGE_NAME ISPCTexComp-36b80aa-rev1-windows TARGETS ISPCTexComp PACKAGE_HASH b6fa6ea28a2808a9a5524c72c37789c525925e435770f2d94eb2d387360fa2d0) diff --git a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake index 25df8101b4..c9de80c809 100644 --- a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake +++ b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake @@ -28,5 +28,5 @@ ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-ios TARGETS GoogleB ly_associate_package(PACKAGE_NAME libpng-1.6.37-ios TARGETS libpng PACKAGE_HASH 18a8217721083c4dc46514105be43ca764fa9c994a74aa0b57766ea6f8187e7b) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-ios TARGETS libsamplerate PACKAGE_HASH 7656b961697f490d4f9c35d2e61559f6fc38c32102e542a33c212cd618fc2119) ly_associate_package(PACKAGE_NAME OpenSSL-1.1.1b-rev1-ios TARGETS OpenSSL PACKAGE_HASH cd0dfce3086a7172777c63dadbaf0ac3695b676119ecb6d0614b5fb1da03462f) -ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev2-ios TARGETS zlib PACKAGE_HASH a59fc0f83a02c616b679799310e9d86fde84514c6d2acefa12c6def0ae4a880c) +ly_associate_package(PACKAGE_NAME zlib-1.2.11-rev5-ios TARGETS ZLIB PACKAGE_HASH c7f10b4d0fe63192054d926f53b08e852cdf472bc2b18e2f7be5aecac1869f7f) ly_associate_package(PACKAGE_NAME lz4-1.9.3-vcpkg-rev4-ios TARGETS lz4 PACKAGE_HASH 588ea05739caa9231a9a17a1e8cf64c5b9a265e16528bc05420af7e2534e86c1) From be29712e57e424686914458a464a961315d7e432 Mon Sep 17 00:00:00 2001 From: lsemp3d <58790905+lsemp3d@users.noreply.github.com> Date: Tue, 5 Oct 2021 16:35:04 -0700 Subject: [PATCH 113/226] Left aligned variable manager's header and data Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com> --- .../VariablePanel/GraphVariablesTableView.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp index 91f85ae36a..5f76820975 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp @@ -37,6 +37,8 @@ #include #include +#pragma optimize("", off) + namespace ScriptCanvasEditor { @@ -411,10 +413,7 @@ namespace ScriptCanvasEditor case Qt::TextAlignmentRole: { - if (index.column() == ColumnIndex::Type) - { - return QVariant(Qt::AlignLeft | Qt::AlignVCenter); - } + return QVariant(Qt::AlignLeft | Qt::AlignVCenter); } break; @@ -880,6 +879,11 @@ namespace ScriptCanvasEditor return tr(m_columnNames[section]); } + if (role == Qt::TextAlignmentRole) + { + return QVariant(Qt::AlignLeft | Qt::AlignVCenter); + } + return QAbstractItemModel::headerData(section, orientation, role); } @@ -1410,3 +1414,6 @@ namespace ScriptCanvasEditor #include } + + +#pragma optimize("", on) From 882e72dab34e0d1a206083791a174c1034cabe44 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 16:48:00 -0700 Subject: [PATCH 114/226] fix for late compilation errors on untyped input Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Grammar/AbstractCodeModel.cpp | 6 + .../Include/ScriptCanvas/Results/ErrorText.h | 1 + .../LY_SC_UnitTest_MultipleOut.scriptcanvas | 8465 +++++++---------- .../Tests/ScriptCanvas_RuntimeInterpreted.cpp | 4 +- 4 files changed, 3247 insertions(+), 5229 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp index 4509e7e907..7d76dbc27d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp @@ -4320,6 +4320,12 @@ namespace ScriptCanvas { AZ_Assert(execution->GetSymbol() != Symbol::FunctionDefinition, "Function definition input is not handled in AbstractCodeModel::ParseInputDatum"); + if (!input.GetDataType().IsValid()) + { + AddError(nullptr, aznew Internal::ParseError(execution->GetNodeId(), ParseErrors::InvalidDataTypeInInput)); + return; + } + auto nodes = execution->GetId().m_node->GetConnectedNodes(input); if (nodes.empty()) { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h index da9a1ebc1f..a803ea862e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Results/ErrorText.h @@ -41,6 +41,7 @@ namespace ScriptCanvas constexpr const char* InactiveGraph = "This graph defines no functions, it is never activated, and will never execute. Add a Start node or connect an event handler or define functions."; constexpr const char* InfiniteLoopWritingToVariable = "infinite loop when writing to variable"; constexpr const char* InfiniteSelfActivationLoop = "infinite loop when activating the entity that owns this graph"; + constexpr const char* InvalidDataTypeInInput = "invalid data type in input slot"; constexpr const char* MetaDataNeedsTupleTypeIdForEventCall = "Meta data needs an AzTypeId for Tuple if an EBus call returns multiple types to ScriptCanvas"; constexpr const char* MetaDataRequiredForEventCall = "Meta data is required for ACM node that is an EBus call"; constexpr const char* MissingFalseExecutionSlotOnIf = "A 'False' Execution output slot is required in an If branch node"; diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas index 1d316c4dc0..1770d0e6c2 100644 --- a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_MultipleOut.scriptcanvas @@ -1,5227 +1,3238 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "ScriptCanvasData", + "ClassData": { + "m_scriptCanvas": { + "Id": { + "id": 20005528169920 + }, + "Name": "LY_SC_UnitTest_MultipleOut", + "Components": { + "Component_[14476721853276197761]": { + "$type": "EditorGraphVariableManagerComponent", + "Id": 14476721853276197761, + "m_variableData": { + "m_nameVariableMap": [ + { + "Key": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "VariableName": "Exec 1" + } + }, + { + "Key": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 3.0, + "label": "Three" + }, + "VariableId": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + }, + "VariableName": "Three" + } + }, + { + "Key": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + "VariableId": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + }, + "VariableName": "counter" + } + }, + { + "Key": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "VariableName": "Exec 3" + } + }, + { + "Key": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "Value": { + "Datum": { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Boolean" + }, + "VariableId": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "VariableName": "Exec 2" + } + } + ] + } + }, + "Component_[16621147190561896838]": { + "$type": "{4D755CA9-AB92-462C-B24F-0B3376F19967} Graph", + "Id": 16621147190561896838, + "m_graphData": { + "m_nodes": [ + { + "Id": { + "id": 20044182875584 + }, + "Name": "SC-Node(Start)", + "Components": { + "Component_[10424525019465666117]": { + "$type": "Start", + "Id": 10424525019465666117, + "Slots": [ + { + "id": { + "m_id": "{25061884-0633-4061-B583-0796CDC9B215}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled when the entity that owns this graph is fully activated.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ] + } + } + }, + { + "Id": { + "id": 20014118104512 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20022708039104 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20061362744768 + }, + "Name": "SC-Node(OperatorAdd)", + "Components": { + "Component_[12328748346053958726]": { + "$type": "OperatorAdd", + "Id": 12328748346053958726, + "Slots": [ + { + "id": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B20F1E7F-B2BA-43E4-AD32-D58B8CFA5B57}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{265B8942-C187-4D83-A017-20BEE053B96D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{5B25184E-0BC4-44A8-9539-772AC75432B4}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 1.0, + "label": "Number" + } + ] + } + } + }, + { + "Id": { + "id": 20009823137216 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20065657712064 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20069952679360 + }, + "Name": "SC-Node(EqualTo)", + "Components": { + "Component_[13545476611799837370]": { + "$type": "EqualTo", + "Id": 13545476611799837370, + "Slots": [ + { + "id": { + "m_id": "{3A36FFEC-1706-4E84-AF24-9CA117ED9A08}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Result", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Signal to perform the evaluation when desired.", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "True", + "toolTip": "Signaled if the result of the operation is true.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F17CFAD4-F1FB-4E17-B466-DDEAE1D0C4D7}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "False", + "toolTip": "Signaled if the result of the operation is false.", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{F89D9F4D-8840-4420-BB13-A62BE5E0248C}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value A", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{69CFFC85-A02B-4538-8704-D5EB9D768BFA}" + } + }, + { + "id": { + "m_id": "{11C3CEF3-4EED-405E-88CB-B25B55C28D5D}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Value B", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 3545012108 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{2ACB3F3A-6D87-4EBC-AD66-F8702F8F62DD}" + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value A" + }, + { + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Value B" + } + ] + } + } + }, + { + "Id": { + "id": 20048477842880 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[14507547243373092664]": { + "$type": "SetVariableNode", + "Id": 14507547243373092664, + "Slots": [ + { + "id": { + "m_id": "{A23CADFC-70B4-45EB-8178-D9570EE659ED}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{69C4E25F-AD39-4CE9-9E19-87DC8C6B43AB}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{87AF01EE-69E7-441F-BE3D-8DBD95475AF9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{D0C36DFD-8ED8-4E64-8765-556123BAF3C1}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{DB5D6C5D-FD69-474C-BBBE-4984C5715FA8}" + }, + "m_variableDataInSlotId": { + "m_id": "{87AF01EE-69E7-441F-BE3D-8DBD95475AF9}" + }, + "m_variableDataOutSlotId": { + "m_id": "{D0C36DFD-8ED8-4E64-8765-556123BAF3C1}" + } + } + } + }, + { + "Id": { + "id": 20057067777472 + }, + "Name": "SC-Node(Print)", + "Components": { + "Component_[17364567436915815279]": { + "$type": "Print", + "Id": 17364567436915815279, + "Slots": [ + { + "id": { + "m_id": "{DE4E1FFE-8F36-4272-81AD-9973CC9DC197}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "Input signal", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "m_format": "Hello", + "m_unresolvedString": [ + "Hello" + ] + } + } + }, + { + "Id": { + "id": 20052772810176 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[18169977638437689378]": { + "$type": "SetVariableNode", + "Id": 18169977638437689378, + "Slots": [ + { + "id": { + "m_id": "{F65A6861-482D-4014-8532-31F31E9F64AC}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{D4DD8502-2960-4E11-81F5-3CCAC7FCFBCE}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{0E4216CC-2501-4ED7-8B85-343813337526}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{B150FE31-45A9-4E45-929A-AE9799BA8E31}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + }, + "m_variableDataInSlotId": { + "m_id": "{0E4216CC-2501-4ED7-8B85-343813337526}" + }, + "m_variableDataOutSlotId": { + "m_id": "{B150FE31-45A9-4E45-929A-AE9799BA8E31}" + } + } + } + }, + { + "Id": { + "id": 20018413071808 + }, + "Name": "SC Node(SetVariable)", + "Components": { + "Component_[2433126846967649500]": { + "$type": "SetVariableNode", + "Id": 2433126846967649500, + "Slots": [ + { + "id": { + "m_id": "{EA436CD0-DBC5-4DE6-B658-BA88DB2DD8FB}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the variable referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{EF2E6C1F-3960-45D1-AC20-B49B92785FF9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced variable has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{B2EB9354-2D69-4A25-990E-E321FDF0EDDA}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Boolean", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{FD662FEC-08F9-410B-BAA9-1AF2D8229766}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Boolean", + "DisplayDataType": { + "m_type": 0 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": true, + "label": "Boolean" + } + ], + "m_variableId": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + }, + "m_variableDataInSlotId": { + "m_id": "{B2EB9354-2D69-4A25-990E-E321FDF0EDDA}" + }, + "m_variableDataOutSlotId": { + "m_id": "{FD662FEC-08F9-410B-BAA9-1AF2D8229766}" + } + } + } + }, + { + "Id": { + "id": 20027003006400 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20035592940992 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{0D12DC58-0CED-4E69-9234-7B03F80A0008}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20039887908288 + }, + "Name": "SC-Node(Expect True)", + "Components": { + "Component_[4200368161720158321]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4200368161720158321, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{982114AA-80C2-479A-BB0E-040B8C119422}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{58E5597B-3073-45DD-86B7-E14097E3EC0B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Candidate", + "toolTip": "a value that must be true", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1, + "IsReference": true, + "VariableReference": { + "m_id": "{84E8E7E7-7A51-4DB2-8E03-ECEB4E448C2B}" + } + }, + { + "id": { + "m_id": "{232AB412-02EB-4201-BA96-BEC573A758EF}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 0 + }, + "isNullPointer": false, + "$type": "bool", + "value": false, + "label": "Candidate" + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Expect True", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + }, + { + "Id": { + "id": 20031297973696 + }, + "Name": "SC-Node(Mark Complete)", + "Components": { + "Component_[4383017650724706609]": { + "$type": "{E42861BD-1956-45AE-8DD7-CCFC1E3E5ACF} Method", + "Id": 4383017650724706609, + "Slots": [ + { + "isVisibile": false, + "id": { + "m_id": "{716C2DBF-F48F-48DC-A1B0-2A0D05ED2DC3}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "EntityID: 0", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{39BDE16A-0CBB-46D1-9C26-24F85A7183FC}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + null + ], + "slotName": "Report", + "toolTip": "additional notes for the test report", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{496BD222-4D88-4AD0-992E-3873EB3E51F9}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{AD0780F8-7FB5-480D-B7C0-9CC8208223C4}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 1 + }, + "isNullPointer": false, + "$type": "EntityId", + "value": { + "id": 4276206253 + } + }, + { + "scriptCanvasType": { + "m_type": 5 + }, + "isNullPointer": false, + "$type": "{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9} AZStd::string", + "value": "", + "label": "Report" + } + ], + "methodType": 2, + "methodName": "Mark Complete", + "className": "Unit Testing", + "resultSlotIDs": [ + {} + ], + "prettyClassName": "Unit Testing" + } + } + } + ], + "m_connections": [ + { + "Id": { + "id": 20074247646656 + }, + "Name": "srcEndpoint=(On Graph Start: Out), destEndpoint=(Print: In)", + "Components": { + "Component_[9544956642945817670]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 9544956642945817670, + "sourceEndpoint": { + "nodeId": { + "id": 20044182875584 + }, + "slotId": { + "m_id": "{25061884-0633-4061-B583-0796CDC9B215}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{DE4E1FFE-8F36-4272-81AD-9973CC9DC197}" + } + } + } + } + }, + { + "Id": { + "id": 20078542613952 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[5846765668694970625]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 5846765668694970625, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20052772810176 + }, + "slotId": { + "m_id": "{F65A6861-482D-4014-8532-31F31E9F64AC}" + } + } + } + } + }, + { + "Id": { + "id": 20082837581248 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[12462935459010319786]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 12462935459010319786, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20048477842880 + }, + "slotId": { + "m_id": "{A23CADFC-70B4-45EB-8178-D9570EE659ED}" + } + } + } + } + }, + { + "Id": { + "id": 20087132548544 + }, + "Name": "srcEndpoint=(Print: Out), destEndpoint=(Set Variable: In)", + "Components": { + "Component_[15367103920447716135]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 15367103920447716135, + "sourceEndpoint": { + "nodeId": { + "id": 20057067777472 + }, + "slotId": { + "m_id": "{32561DF2-D512-49DD-8DCC-5FB951122DF5}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20018413071808 + }, + "slotId": { + "m_id": "{EA436CD0-DBC5-4DE6-B658-BA88DB2DD8FB}" + } + } + } + } + }, + { + "Id": { + "id": 20091427515840 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[1770958354285950060]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 1770958354285950060, + "sourceEndpoint": { + "nodeId": { + "id": 20061362744768 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20009823137216 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20095722483136 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[15742434548170508999]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 15742434548170508999, + "sourceEndpoint": { + "nodeId": { + "id": 20014118104512 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20065657712064 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20100017450432 + }, + "Name": "srcEndpoint=(Add (+): Out), destEndpoint=(Equal To (==): In)", + "Components": { + "Component_[5888192785906240625]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 5888192785906240625, + "sourceEndpoint": { + "nodeId": { + "id": 20022708039104 + }, + "slotId": { + "m_id": "{5E73CCFA-3E3B-44B5-9E9E-FD9250FCE078}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20069952679360 + }, + "slotId": { + "m_id": "{71837FF2-8438-4225-AA73-B017D5097FE7}" + } + } + } + } + }, + { + "Id": { + "id": 20104312417728 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[14484850856034595321]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 14484850856034595321, + "sourceEndpoint": { + "nodeId": { + "id": 20048477842880 + }, + "slotId": { + "m_id": "{69C4E25F-AD39-4CE9-9E19-87DC8C6B43AB}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20014118104512 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20108607385024 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[13948374526923268574]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 13948374526923268574, + "sourceEndpoint": { + "nodeId": { + "id": 20052772810176 + }, + "slotId": { + "m_id": "{D4DD8502-2960-4E11-81F5-3CCAC7FCFBCE}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20061362744768 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20112902352320 + }, + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Add (+): In)", + "Components": { + "Component_[17650800042816564839]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 17650800042816564839, + "sourceEndpoint": { + "nodeId": { + "id": 20018413071808 + }, + "slotId": { + "m_id": "{EF2E6C1F-3960-45D1-AC20-B49B92785FF9}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20022708039104 + }, + "slotId": { + "m_id": "{AC7B582F-C1DE-4C3C-ACC9-D729BE959BF5}" + } + } + } + } + }, + { + "Id": { + "id": 20117197319616 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Expect True: In)", + "Components": { + "Component_[9927163777207365219]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 9927163777207365219, + "sourceEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20039887908288 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20121492286912 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Expect True: In)", + "Components": { + "Component_[6569354793892923961]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 6569354793892923961, + "sourceEndpoint": { + "nodeId": { + "id": 20039887908288 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20027003006400 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20125787254208 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[8734972779133126833]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 8734972779133126833, + "sourceEndpoint": { + "nodeId": { + "id": 20009823137216 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20130082221504 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[13233443675773627954]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 13233443675773627954, + "sourceEndpoint": { + "nodeId": { + "id": 20065657712064 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20134377188800 + }, + "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(Expect True: In)", + "Components": { + "Component_[8564488729834246542]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 8564488729834246542, + "sourceEndpoint": { + "nodeId": { + "id": 20069952679360 + }, + "slotId": { + "m_id": "{85BEF751-FEBE-457B-B73A-F9334E248174}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20035592940992 + }, + "slotId": { + "m_id": "{9E9BE7E3-A17F-4603-8F71-59130F2D0E7E}" + } + } + } + } + }, + { + "Id": { + "id": 20138672156096 + }, + "Name": "srcEndpoint=(Expect True: Out), destEndpoint=(Mark Complete: In)", + "Components": { + "Component_[17252410557193957278]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 17252410557193957278, + "sourceEndpoint": { + "nodeId": { + "id": 20027003006400 + }, + "slotId": { + "m_id": "{CAFD7A46-861D-4156-A15B-38E798044A36}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 20031297973696 + }, + "slotId": { + "m_id": "{496BD222-4D88-4AD0-992E-3873EB3E51F9}" + } + } + } + } + } + ] + }, + "m_assetType": "{3E2AC8CD-713F-453E-967F-29517F331784}", + "versionData": { + "_grammarVersion": 1, + "_runtimeVersion": 1, + "_fileVersion": 1 + }, + "m_variableCounter": 3, + "GraphCanvasData": [ + { + "Key": { + "id": 20005528169920 + }, + "Value": { + "ComponentData": { + "{5F84B500-8C45-40D1-8EFC-A5306B241444}": { + "$type": "SceneComponentSaveData", + "ViewParams": { + "Scale": 0.7164653965189688, + "AnchorX": -554.109130859375, + "AnchorY": -334.977783203125 + } + } + } + } + }, + { + "Key": { + "id": 20009823137216 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1520.0, + 80.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{4B494FF9-7CD7-496F-9778-8E01DAAE393B}" + } + } + } + }, + { + "Key": { + "id": 20014118104512 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 880.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{DF978315-8A60-40C7-8889-A1C2EF190012}" + } + } + } + }, + { + "Key": { + "id": 20018413071808 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 420.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{C1E23F0C-0829-4CBC-9176-29CF13B83640}" + } + } + } + }, + { + "Key": { + "id": 20022708039104 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 920.0, + 540.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{16FFB986-E605-47C3-8BAC-C5449F871465}" + } + } + } + }, + { + "Key": { + "id": 20027003006400 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2600.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{F5ACF848-9D4E-45DA-AA58-42DE9695AAB0}" + } + } + } + }, + { + "Key": { + "id": 20031297973696 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2900.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{456E2F70-A915-450F-B570-57C61FD8713C}" + } + } + } + }, + { + "Key": { + "id": 20035592940992 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1980.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{ED35AAD0-F976-4FA9-B6C7-08ED30452D33}" + } + } + } + }, + { + "Key": { + "id": 20039887908288 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MethodNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 2280.0, + 280.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".method" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{D2CF914D-DFC1-40B6-884F-85EBD5DF95B6}" + } + } + } + }, + { + "Key": { + "id": 20044182875584 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "TimeNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 0.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{8133F38D-4D68-4244-8999-BE5E019A24E0}" + } + } + } + }, + { + "Key": { + "id": 20048477842880 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{377A822F-6220-45A6-91CB-A3E5F8E9ACFB}" + } + } + } + }, + { + "Key": { + "id": 20052772810176 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "SetVariableNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 560.0, + 60.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData", + "SubStyle": ".setVariable" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{EF322638-4ADC-43B3-9398-105F49D40D96}" + } + } + } + }, + { + "Key": { + "id": 20057067777472 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "StringNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 200.0, + 260.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{6A6126C8-7C7E-48C1-A8A5-D26B9EA59578}" + } + } + } + }, + { + "Key": { + "id": 20061362744768 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 880.0, + 60.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{01CF2659-C0C0-4D6B-9C48-B47989D98148}" + } + } + } + }, + { + "Key": { + "id": 20065657712064 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1500.0, + 300.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{F8D64912-B290-443F-90A1-891A893D9F3D}" + } + } + } + }, + { + "Key": { + "id": 20069952679360 + }, + "Value": { + "ComponentData": { + "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { + "$type": "NodeSaveData" + }, + "{328FF15C-C302-458F-A43D-E1794DE0904E}": { + "$type": "GeneralNodeTitleComponentSaveData", + "PaletteOverride": "MathNodeTitlePalette" + }, + "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { + "$type": "GeometrySaveData", + "Position": [ + 1540.0, + 560.0 + ] + }, + "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { + "$type": "StylingComponentSaveData" + }, + "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { + "$type": "PersistentIdComponentSaveData", + "PersistentId": "{A380E8D9-CEA5-44CF-A9DC-69A3C0115256}" + } + } + } + } + ], + "StatisticsHelper": { + "InstanceCounter": [ + { + "Key": 1244476766431948410, + "Value": 3 + }, + { + "Key": 2150378447039925262, + "Value": 1 + }, + { + "Key": 3117476785392655547, + "Value": 3 + }, + { + "Key": 4199610336680704683, + "Value": 1 + }, + { + "Key": 8132426562032687196, + "Value": 1 + }, + { + "Key": 10204019744198319120, + "Value": 1 + }, + { + "Key": 10684225535275896474, + "Value": 1 + }, + { + "Key": 12033332465728181077, + "Value": 3 + }, + { + "Key": 12096037962474910421, + "Value": 1 + } + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 00705bfbaa..9d75d3ed9d 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -779,7 +779,7 @@ TEST_F(ScriptCanvasTestFixture, InterpretedPrintConnectedInput) TEST_F(ScriptCanvasTestFixture, InterpretedPrintFormatEmptyValue) { - RunUnitTestGraph("LY_SC_UnitTest_PrintFormatEmptyValue", ExecutionMode::Interpreted); + ExpectParseError("LY_SC_UnitTest_PrintFormatEmptyValue"); } TEST_F(ScriptCanvasTestFixture, InterpretedProperties) @@ -819,7 +819,7 @@ TEST_F(ScriptCanvasTestFixture, InterpretedStringFormat) TEST_F(ScriptCanvasTestFixture, InterpretedStringFormatEmptyValue) { - RunUnitTestGraph("LY_SC_UnitTest_StringFormatEmptyValue", ExecutionMode::Interpreted); + ExpectParseError("LY_SC_UnitTest_StringFormatEmptyValue"); } TEST_F(ScriptCanvasTestFixture, InterpretedStringFormatWithRepeatedValueName) From 5969c94d22b007812c5a29c2efbbf087c69d9b0a Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 5 Oct 2021 17:46:55 -0700 Subject: [PATCH 115/226] Renamed controller.ui --> view.ui, minor tweaks in response to PR Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Editor/View/Windows/Tools/UpgradeTool/Controller.cpp | 6 +++--- .../Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h | 5 +++-- .../Code/Editor/View/Windows/Tools/UpgradeTool/Model.h | 2 +- .../View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp | 5 ----- .../Windows/Tools/UpgradeTool/{Controller.ui => View.ui} | 4 ++-- Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake | 2 +- 6 files changed, 10 insertions(+), 14 deletions(-) rename Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/{Controller.ui => View.ui} (99%) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 6fa0f1adfa..138532be0f 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -34,8 +34,8 @@ #include #include -#include -#include +#include +// #include namespace ScriptCanvasEditor { @@ -43,7 +43,7 @@ namespace ScriptCanvasEditor { Controller::Controller(QWidget* parent) : AzQtComponents::StyledDialog(parent) - , m_view(new Ui::Controller()) + , m_view(new Ui::View()) { m_view->setupUi(this); m_view->tableWidget->horizontalHeader()->setVisible(false); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index ac18ff6cf5..298f755d56 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -11,6 +11,7 @@ #if !defined(Q_MOC_RUN) #include #include +#include #include #include #include @@ -26,7 +27,7 @@ class QTableWidgetItem; namespace Ui { - class Controller; + class View; } namespace AzQtComponents @@ -58,7 +59,7 @@ namespace ScriptCanvasEditor static constexpr int ColumnBrowse = 2; static constexpr int ColumnStatus = 3; - AZStd::unique_ptr m_view; + AZStd::unique_ptr m_view; int m_handledAssetCount = 0; void AddLogEntries(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h index 58ad9877be..ab0f710870 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Model.h @@ -21,7 +21,7 @@ namespace ScriptCanvasEditor { namespace VersionExplorer { - //!Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow + //! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow //! the upgrade tool to work even if the editor is not in the foreground class EditorKeepAlive { diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp index 6f856b9d4c..c1faedc3a3 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp @@ -8,11 +8,6 @@ #include -namespace LoggerCpp -{ - -} - namespace ScriptCanvasEditor { namespace VersionExplorer diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui similarity index 99% rename from Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui rename to Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui index fdeb701f33..f549c821d6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/View.ui @@ -1,7 +1,7 @@ - Controller - + View + Qt::WindowModal diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index b12c608fe5..609f7cd454 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -261,7 +261,6 @@ set(FILES Editor/View/Windows/ScriptCanvasEditorResources.qrc Editor/View/Windows/Tools/UpgradeTool/Controller.cpp Editor/View/Windows/Tools/UpgradeTool/Controller.h - Editor/View/Windows/Tools/UpgradeTool/Controller.ui Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp Editor/View/Windows/Tools/UpgradeTool/FileSaver.h Editor/View/Windows/Tools/UpgradeTool/LogTraits.h @@ -277,6 +276,7 @@ set(FILES Editor/View/Windows/Tools/UpgradeTool/UpgradeHelper.ui Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.cpp Editor/View/Windows/Tools/UpgradeTool/VersionExplorerLog.h + Editor/View/Windows/Tools/UpgradeTool/View.ui Editor/Framework/ScriptCanvasGraphUtilities.inl Editor/Framework/ScriptCanvasGraphUtilities.h Editor/Framework/ScriptCanvasTraceUtilities.h From b8bf5486a46b8d79797eb840b6c9c4d33f41d444 Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Tue, 5 Oct 2021 19:50:54 -0700 Subject: [PATCH 116/226] Removed the ScatterDistanceOutput texture from the EnvironmentCubeMapForwardMSAAPass. Removed unused Srgs from the ReflectionCompositePass. Signed-off-by: dmcdiar --- .../Passes/EnvironmentCubeMapForwardMSAA.pass | 40 ------------------- .../Reflections/ReflectionComposite.azsl | 3 -- 2 files changed, 43 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass b/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass index cd52ce946b..877ae489c0 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/EnvironmentCubeMapForwardMSAA.pass @@ -147,22 +147,6 @@ }, "LoadAction": "Clear" } - }, - { - "Name": "ScatterDistanceOutput", - "SlotType": "Output", - "ScopeAttachmentUsage": "RenderTarget", - "LoadStoreAction": { - "ClearValue": { - "Value": [ - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "LoadAction": "Clear" - } } ], "ImageAttachments": [ @@ -257,23 +241,6 @@ "AssetRef": { "FilePath": "Textures/BRDFTexture.attimage" } - }, - { - "Name": "ScatterDistanceImage", - "SizeSource": { - "Source": { - "Pass": "Parent", - "Attachment": "Output" - } - }, - "MultisampleSource": { - "Pass": "This", - "Attachment": "DepthStencilInputOutput" - }, - "ImageDescriptor": { - "Format": "R11G11B10_FLOAT", - "SharedQueueMask": "Graphics" - } } ], "Connections": [ @@ -318,13 +285,6 @@ "Pass": "This", "Attachment": "BRDFTexture" } - }, - { - "LocalSlot": "ScatterDistanceOutput", - "AttachmentRef": { - "Pass": "This", - "Attachment": "ScatterDistanceImage" - } } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl b/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl index 806337499c..207da9e857 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl +++ b/Gems/Atom/Feature/Common/Assets/Shaders/Reflections/ReflectionComposite.azsl @@ -15,7 +15,6 @@ // box-filtered from the MSAA sub-pixels of the reflection texture. #include -#include #include #include @@ -26,8 +25,6 @@ ShaderResourceGroup PassSrg : SRG_PerPass Texture2DMS m_reflection; } -#include - // Vertex Shader VSOutput MainVS(VSInput input) { From 02b6b1dbf4d9889b55d4c11e049aa5b1804c9897 Mon Sep 17 00:00:00 2001 From: jromnoa <80134229+jromnoa@users.noreply.github.com> Date: Tue, 5 Oct 2021 20:05:06 -0700 Subject: [PATCH 117/226] First in set of PRs for adding parallel GPU test runs to Atom tests. (#4276) * add remaining hydra code for test to run using new parallel test classes and interfaces * fix return value of Secondary Grid Spacing property test for Grid Entity * Add `or error_tracer.has_asserts` call for better error catching * make `Tests.viewport_set` test check a `Report.critical_result()` check instead of `Report.result()` check * add updates from PR feedback: makes constants for re-used component name strings, move test verifications into the Report() call instead of setting first then calling Report(), use builtin math.isclose function over custom function * remove after_level_load() and split it into several function calls, add screenshot check, cleanup the GPU script and fix the rendering not displaying by setting global_extra_cmdline_args = [] * fixes the viewport Test check and splits up the helper functions into multiple functions * add comment for global_extra_cmdline_args update in test and rename the zip file to f'screenshots_{formatted_timestamp}.zip' Signed-off-by: jromnoa Co-authored-by: smurly --- .../Gem/PythonTests/Atom/CMakeLists.txt | 14 + .../Atom/TestSuite_Main_GPU_Optimized.py | 43 +++ .../Atom/atom_utils/atom_component_helper.py | 50 ++- .../tests/hydra_AtomGPU_BasicLevelSetup.py | 292 ++++++++++++++++++ .../editor_entity_utils.py | 16 + .../editor_python_test_tools/utils.py | 55 +++- 6 files changed, 453 insertions(+), 17 deletions(-) create mode 100644 AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py create mode 100644 AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py diff --git a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt index 02aaa42597..0d6fe4c8fa 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt @@ -65,4 +65,18 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT COMPONENT Atom ) + ly_add_pytest( + NAME AutomatedTesting::Atom_TestSuite_Main_GPU_Optimized + TEST_SUITE main + TEST_REQUIRES gpu + TEST_SERIAL + TIMEOUT 1200 + PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main_GPU_Optimized.py + RUNTIME_DEPENDENCIES + AssetProcessor + AutomatedTesting.Assets + Editor + COMPONENT + Atom + ) endif() diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py new file mode 100644 index 0000000000..ef572d6e5c --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU_Optimized.py @@ -0,0 +1,43 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" +import os + +import pytest + +import ly_test_tools.environment.file_system as file_system +from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite +from ly_test_tools.image.screenshot_compare_qssim import qssim as compare_screenshots +from .atom_utils.atom_component_helper import create_screenshots_archive, golden_images_directory + +DEFAULT_SUBFOLDER_PATH = 'user/PythonTests/Automated/Screenshots' + + +@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.") +@pytest.mark.parametrize("project", ["AutomatedTesting"]) +@pytest.mark.parametrize("launcher_platform", ['windows_editor']) +class TestAutomation(EditorTestSuite): + # Remove -autotest_mode from global_extra_cmdline_args since we need rendering for these tests. + global_extra_cmdline_args = ["-BatchMode"] # Default is ["-BatchMode", "-autotest_mode"] + + class AtomGPU_BasicLevelSetup_SetsUpLevel(EditorSharedTest): + use_null_renderer = False # Default is True + screenshot_name = "AtomBasicLevelSetup.ppm" + test_screenshots = [] # Gets set by setup() + screenshot_directory = "" # Gets set by setup() + + # Clear existing test screenshots before starting test. + def setup(self, workspace): + screenshot_directory = os.path.join(workspace.paths.project(), DEFAULT_SUBFOLDER_PATH) + test_screenshots = [os.path.join(screenshot_directory, self.screenshot_name)] + file_system.delete(test_screenshots, True, True) + + from Atom.tests import hydra_AtomGPU_BasicLevelSetup as test_module + + golden_images = [os.path.join(golden_images_directory(), screenshot_name)] + for test_screenshot, golden_screenshot in zip(test_screenshots, golden_images): + compare_screenshots(test_screenshot, golden_screenshot) + create_screenshots_archive(screenshot_directory) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py index 58b72ef01a..821e0acfdb 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/atom_utils/atom_component_helper.py @@ -3,13 +3,54 @@ Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright SPDX-License-Identifier: Apache-2.0 OR MIT -File to assist with common hydra component functions used across various Atom tests. """ +import datetime import os +import zipfile -from editor_python_test_tools.editor_test_helper import EditorTestHelper -helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper") +def create_screenshots_archive(screenshot_path): + """ + Creates a new zip file archive at archive_path containing all files listed within archive_path. + :param screenshot_path: location containing the files to archive, the zip archive file will also be saved here. + :return: None, but creates a new zip file archive inside path containing all of the files inside archive_path. + """ + files_to_archive = [] + + # Search for .png and .ppm files to add to the zip archive file. + for (folder_name, sub_folders, file_names) in os.walk(screenshot_path): + for file_name in file_names: + if file_name.endswith(".png") or file_name.endswith(".ppm"): + file_path = os.path.join(folder_name, file_name) + files_to_archive.append(file_path) + + # Setup variables for naming the zip archive file. + timestamp = datetime.datetime.now().timestamp() + formatted_timestamp = datetime.datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d_%H-%M-%S") + screenshots_file = os.path.join(screenshot_path, f'screenshots_{formatted_timestamp}.zip') + + # Write all of the valid .png and .ppm files to the archive file. + with zipfile.ZipFile(screenshots_file, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) as zip_archive: + for file_path in files_to_archive: + file_name = os.path.basename(file_path) + zip_archive.write(file_path, file_name) + + +def golden_images_directory(): + """ + Uses this file location to return the valid location for golden image files. + :return: The path to the golden_images directory, but raises an IOError if the golden_images directory is missing. + """ + current_file_directory = os.path.join(os.path.dirname(__file__)) + golden_images_dir = os.path.join(current_file_directory, '..', 'golden_images') + + if not os.path.exists(golden_images_dir): + raise IOError( + f'golden_images" directory was not found at path "{golden_images_dir}"' + f'Please add a "golden_images" directory inside: "{current_file_directory}"' + ) + + return golden_images_dir def create_basic_atom_level(level_name): @@ -31,6 +72,9 @@ def create_basic_atom_level(level_name): import azlmbr.object import editor_python_test_tools.hydra_editor_utils as hydra + from editor_python_test_tools.editor_test_helper import EditorTestHelper + + helper = EditorTestHelper(log_prefix="Atom_EditorTestHelper") # Create a new level. new_level_name = level_name diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py new file mode 100644 index 0000000000..92c555127a --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomGPU_BasicLevelSetup.py @@ -0,0 +1,292 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + + +# fmt: off +class Tests : + camera_component_added = ("Camera component was added", "Camera component wasn't added") + camera_fov_set = ("Camera component FOV property set", "Camera component FOV property wasn't set") + directional_light_component_added = ("Directional Light component added", "Directional Light component wasn't added") + enter_game_mode = ("Entered game mode", "Failed to enter game mode") + exit_game_mode = ("Exited game mode", "Couldn't exit game mode") + global_skylight_component_added = ("Global Skylight (IBL) component added", "Global Skylight (IBL) component wasn't added") + global_skylight_diffuse_image_set = ("Global Skylight Diffuse Image property set", "Global Skylight Diffuse Image property wasn't set") + global_skylight_specular_image_set = ("Global Skylight Specular Image property set", "Global Skylight Specular Image property wasn't set") + ground_plane_material_asset_set = ("Ground Plane Material Asset was set", "Ground Plane Material Asset wasn't set") + ground_plane_material_component_added = ("Ground Plane Material component added", "Ground Plane Material component wasn't added") + ground_plane_mesh_asset_set = ("Ground Plane Mesh Asset property was set", "Ground Plane Mesh Asset property wasn't set") + hdri_skybox_component_added = ("HDRi Skybox component added", "HDRi Skybox component wasn't added") + hdri_skybox_cubemap_texture_set = ("HDRi Skybox Cubemap Texture property set", "HDRi Skybox Cubemap Texture property wasn't set") + mesh_component_added = ("Mesh component added", "Mesh component wasn't added") + no_assert_occurred = ("No asserts detected", "Asserts were detected") + no_error_occurred = ("No errors detected", "Errors were detected") + secondary_grid_spacing = ("Secondary Grid Spacing set", "Secondary Grid Spacing not set") + sphere_material_component_added = ("Sphere Material component added", "Sphere Material component wasn't added") + sphere_material_set = ("Sphere Material Asset was set", "Sphere Material Asset wasn't set") + sphere_mesh_asset_set = ("Sphere Mesh Asset was set", "Sphere Mesh Asset wasn't set") + viewport_set = ("Viewport set to correct size", "Viewport not set to correct size") +# fmt: on + + +def AtomGPU_BasicLevelSetup_SetsUpLevel(): + """ + Summary: + Sets up a level to match the AtomBasicLevelSetup.ppm golden image then takes a screenshot to verify the setup. + + Test setup: + - Wait for Editor idle loop. + - Open the "Base" level. + + Expected Behavior: + The scene can be setup for a basic level. + The test screenshot matches the appearance of the AtomBasicLevelSetup.ppm golden image. + + Test Steps: + 1. Close error windows and display helpers then update the viewport size. + 2. Create Default Level Entity. + 3. Create Grid Entity as a child entity of the Default Level Entity. + 4. Add Grid component to Grid Entity and set Secondary Grid Spacing. + 5. Create Global Skylight (IBL) Entity as a child entity of the Default Level Entity. + 6. Add HDRi Skybox component to the Global Skylight (IBL) Entity. + 7. Add Global Skylight (IBL) component to the Global Skylight (IBL) Entity. + 8. Set the Cubemap Texture property of the HDRi Skybox component. + 9. Set the Diffuse Image property of the Global Skylight (IBL) component. + 10. Set the Specular Image property of the Global Skylight (IBL) component. + 11. Create a Ground Plane Entity with a Material component that is a child entity of the Default Level Entity. + 12. Set the Material Asset property of the Material component for the Ground Plane Entity. + 13. Add the Mesh component to the Ground Plane Entity and set the Mesh component Mesh Asset property. + 14. Create a Directional Light Entity as a child entity of the Default Level Entity. + 15. Add Directional Light component to Directional Light Entity and set entity rotation. + 16. Create a Sphere Entity as a child entity of the Default Level Entity then add a Material component. + 17. Set the Material Asset property of the Material component for the Sphere Entity. + 18. Add Mesh component to Sphere Entity and set the Mesh Asset property for the Mesh component. + 19. Create a Camera Entity as a child entity of the Default Level Entity then add a Camera component. + 20. Set the Camera Entity rotation value and set the Camera component Field of View value. + 21. Enter game mode. + 22. Take screenshot. + 23. Exit game mode. + 24. Look for errors. + + :return: None + """ + + import os + from math import isclose + + import azlmbr.asset as asset + import azlmbr.bus as bus + import azlmbr.legacy.general as general + import azlmbr.math as math + import azlmbr.paths + + from editor_python_test_tools.editor_entity_utils import EditorEntity + from editor_python_test_tools.utils import Report, Tracer, TestHelper as helper + + from Atom.atom_utils.screenshot_utils import ScreenshotHelper + + MATERIAL_COMPONENT_NAME = "Material" + MESH_COMPONENT_NAME = "Mesh" + SCREENSHOT_NAME = "AtomBasicLevelSetup" + SCREEN_WIDTH = 1280 + SCREEN_HEIGHT = 720 + DEGREE_RADIAN_FACTOR = 0.0174533 + + def initial_viewport_setup(screen_width, screen_height): + general.set_viewport_size(screen_width, screen_height) + general.update_viewport() + result = isclose( + a=general.get_viewport_size().x, b=SCREEN_WIDTH, rel_tol=0.1) and isclose( + a=general.get_viewport_size().y, b=SCREEN_HEIGHT, rel_tol=0.1) + + return result + + with Tracer() as error_tracer: + # Test setup begins. + # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level. + helper.init_idle() + helper.open_level("", "Base") + + # Test steps begin. + # 1. Close error windows and display helpers then update the viewport size. + helper.close_error_windows() + helper.close_display_helpers() + general.update_viewport() + Report.critical_result(Tests.viewport_set, initial_viewport_setup(SCREEN_WIDTH, SCREEN_HEIGHT)) + + # 2. Create Default Level Entity. + default_level_entity_name = "Default Level" + default_level_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 0.0), default_level_entity_name) + + # 3. Create Grid Entity as a child entity of the Default Level Entity. + grid_name = "Grid" + grid_entity = EditorEntity.create_editor_entity(grid_name, default_level_entity.id) + + # 4. Add Grid component to Grid Entity and set Secondary Grid Spacing. + grid_component = grid_entity.add_component(grid_name) + secondary_grid_spacing_property = "Controller|Configuration|Secondary Grid Spacing" + secondary_grid_spacing_value = 1.0 + grid_component.set_component_property_value(secondary_grid_spacing_property, secondary_grid_spacing_value) + secondary_grid_spacing_set = grid_component.get_component_property_value( + secondary_grid_spacing_property) == secondary_grid_spacing_value + Report.result(Tests.secondary_grid_spacing, secondary_grid_spacing_set) + + # 5. Create Global Skylight (IBL) Entity as a child entity of the Default Level Entity. + global_skylight_name = "Global Skylight (IBL)" + global_skylight_entity = EditorEntity.create_editor_entity(global_skylight_name, default_level_entity.id) + + # 6. Add HDRi Skybox component to the Global Skylight (IBL) Entity. + hdri_skybox_name = "HDRi Skybox" + hdri_skybox_component = global_skylight_entity.add_component(hdri_skybox_name) + Report.result(Tests.hdri_skybox_component_added, global_skylight_entity.has_component(hdri_skybox_name)) + + # 7. Add Global Skylight (IBL) component to the Global Skylight (IBL) Entity. + global_skylight_component = global_skylight_entity.add_component(global_skylight_name) + Report.result(Tests.global_skylight_component_added, global_skylight_entity.has_component(global_skylight_name)) + + # 8. Set the Cubemap Texture property of the HDRi Skybox component. + global_skylight_image_asset_path = os.path.join( + "LightingPresets", "greenwich_park_02_4k_iblskyboxcm_iblspecular.exr.streamingimage") + global_skylight_image_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", global_skylight_image_asset_path, math.Uuid(), False) + hdri_skybox_cubemap_texture_property = "Controller|Configuration|Cubemap Texture" + hdri_skybox_component.set_component_property_value( + hdri_skybox_cubemap_texture_property, global_skylight_image_asset) + Report.result( + Tests.hdri_skybox_cubemap_texture_set, + hdri_skybox_component.get_component_property_value( + hdri_skybox_cubemap_texture_property) == global_skylight_image_asset) + + # 9. Set the Diffuse Image property of the Global Skylight (IBL) component. + # Re-use the same image that was used in the previous test step. + global_skylight_diffuse_image_property = "Controller|Configuration|Diffuse Image" + global_skylight_component.set_component_property_value( + global_skylight_diffuse_image_property, global_skylight_image_asset) + Report.result( + Tests.global_skylight_diffuse_image_set, + global_skylight_component.get_component_property_value( + global_skylight_diffuse_image_property) == global_skylight_image_asset) + + # 10. Set the Specular Image property of the Global Skylight (IBL) component. + # Re-use the same image that was used in the previous test step. + global_skylight_specular_image_property = "Controller|Configuration|Specular Image" + global_skylight_component.set_component_property_value( + global_skylight_specular_image_property, global_skylight_image_asset) + global_skylight_specular_image_set = global_skylight_component.get_component_property_value( + global_skylight_specular_image_property) + Report.result( + Tests.global_skylight_specular_image_set, global_skylight_specular_image_set == global_skylight_image_asset) + + # 11. Create a Ground Plane Entity with a Material component that is a child entity of the Default Level Entity. + ground_plane_name = "Ground Plane" + ground_plane_entity = EditorEntity.create_editor_entity(ground_plane_name, default_level_entity.id) + ground_plane_material_component = ground_plane_entity.add_component(MATERIAL_COMPONENT_NAME) + Report.result( + Tests.ground_plane_material_component_added, ground_plane_entity.has_component(MATERIAL_COMPONENT_NAME)) + + # 12. Set the Material Asset property of the Material component for the Ground Plane Entity. + ground_plane_entity.set_local_uniform_scale(32.0) + ground_plane_material_asset_path = os.path.join("Materials", "Presets", "PBR", "metal_chrome.azmaterial") + ground_plane_material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", ground_plane_material_asset_path, math.Uuid(), False) + ground_plane_material_asset_property = "Default Material|Material Asset" + ground_plane_material_component.set_component_property_value( + ground_plane_material_asset_property, ground_plane_material_asset) + Report.result( + Tests.ground_plane_material_asset_set, + ground_plane_material_component.get_component_property_value( + ground_plane_material_asset_property) == ground_plane_material_asset) + + # 13. Add the Mesh component to the Ground Plane Entity and set the Mesh component Mesh Asset property. + ground_plane_mesh_component = ground_plane_entity.add_component(MESH_COMPONENT_NAME) + Report.result(Tests.mesh_component_added, ground_plane_entity.has_component(MESH_COMPONENT_NAME)) + ground_plane_mesh_asset_path = os.path.join("Objects", "plane.azmodel") + ground_plane_mesh_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", ground_plane_mesh_asset_path, math.Uuid(), False) + ground_plane_mesh_asset_property = "Controller|Configuration|Mesh Asset" + ground_plane_mesh_component.set_component_property_value( + ground_plane_mesh_asset_property, ground_plane_mesh_asset) + Report.result( + Tests.ground_plane_mesh_asset_set, + ground_plane_mesh_component.get_component_property_value( + ground_plane_mesh_asset_property) == ground_plane_mesh_asset) + + # 14. Create a Directional Light Entity as a child entity of the Default Level Entity. + directional_light_name = "Directional Light" + directional_light_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 10.0), directional_light_name, default_level_entity.id) + + # 15. Add Directional Light component to Directional Light Entity and set entity rotation. + directional_light_entity.add_component(directional_light_name) + directional_light_entity_rotation = math.Vector3(DEGREE_RADIAN_FACTOR * -90.0, 0.0, 0.0) + directional_light_entity.set_local_rotation(directional_light_entity_rotation) + Report.result( + Tests.directional_light_component_added, directional_light_entity.has_component(directional_light_name)) + + # 16. Create a Sphere Entity as a child entity of the Default Level Entity then add a Material component. + sphere_entity = EditorEntity.create_editor_entity_at( + math.Vector3(0.0, 0.0, 1.0), "Sphere", default_level_entity.id) + sphere_material_component = sphere_entity.add_component(MATERIAL_COMPONENT_NAME) + Report.result(Tests.sphere_material_component_added, sphere_entity.has_component(MATERIAL_COMPONENT_NAME)) + + # 17. Set the Material Asset property of the Material component for the Sphere Entity. + sphere_material_asset_path = os.path.join("Materials", "Presets", "PBR", "metal_brass_polished.azmaterial") + sphere_material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", sphere_material_asset_path, math.Uuid(), False) + sphere_material_asset_property = "Default Material|Material Asset" + sphere_material_component.set_component_property_value(sphere_material_asset_property, sphere_material_asset) + Report.result(Tests.sphere_material_set, sphere_material_component.get_component_property_value( + sphere_material_asset_property) == sphere_material_asset) + + # 18. Add Mesh component to Sphere Entity and set the Mesh Asset property for the Mesh component. + sphere_mesh_component = sphere_entity.add_component(MESH_COMPONENT_NAME) + sphere_mesh_asset_path = os.path.join("Models", "sphere.azmodel") + sphere_mesh_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", sphere_mesh_asset_path, math.Uuid(), False) + sphere_mesh_asset_property = "Controller|Configuration|Mesh Asset" + sphere_mesh_component.set_component_property_value(sphere_mesh_asset_property, sphere_mesh_asset) + Report.result(Tests.sphere_mesh_asset_set, sphere_mesh_component.get_component_property_value( + sphere_mesh_asset_property) == sphere_mesh_asset) + + # 19. Create a Camera Entity as a child entity of the Default Level Entity then add a Camera component. + camera_name = "Camera" + camera_entity = EditorEntity.create_editor_entity_at( + math.Vector3(5.5, -12.0, 9.0), camera_name, default_level_entity.id) + camera_component = camera_entity.add_component(camera_name) + Report.result(Tests.camera_component_added, camera_entity.has_component(camera_name)) + + # 20. Set the Camera Entity rotation value and set the Camera component Field of View value. + camera_entity_rotation = math.Vector3( + DEGREE_RADIAN_FACTOR * -27.0, DEGREE_RADIAN_FACTOR * -12.0, DEGREE_RADIAN_FACTOR * 25.0) + camera_entity.set_local_rotation(camera_entity_rotation) + camera_fov_property = "Controller|Configuration|Field of view" + camera_fov_value = 60.0 + camera_component.set_component_property_value(camera_fov_property, camera_fov_value) + azlmbr.camera.EditorCameraViewRequestBus(azlmbr.bus.Event, "ToggleCameraAsActiveView", camera_entity.id) + Report.result(Tests.camera_fov_set, camera_component.get_component_property_value( + camera_fov_property) == camera_fov_value) + + # 21. Enter game mode. + helper.enter_game_mode(Tests.enter_game_mode) + helper.wait_for_condition(function=lambda: general.is_in_game_mode(), timeout_in_seconds=4.0) + + # 22. Take screenshot. + ScreenshotHelper(general.idle_wait_frames).capture_screenshot_blocking(f"{SCREENSHOT_NAME}.ppm") + + # 23. Exit game mode. + helper.exit_game_mode(Tests.exit_game_mode) + helper.wait_for_condition(function=lambda: not general.is_in_game_mode(), timeout_in_seconds=4.0) + + # 24. Look for errors. + helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0) + Report.result(Tests.no_assert_occurred, not error_tracer.has_asserts) + Report.result(Tests.no_error_occurred, not error_tracer.has_errors) + + +if __name__ == "__main__": + from editor_python_test_tools.utils import Report + Report.start_test(AtomGPU_BasicLevelSetup_SetsUpLevel) diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py index 154b5730d7..783f71e06c 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/editor_entity_utils.py @@ -361,3 +361,19 @@ class EditorEntity: :return: True if "isVisible" is enabled, False otherwise. """ return editor.EditorEntityInfoRequestBus(bus.Event, "IsVisible", self.id) + + def set_local_uniform_scale(self, scale_float) -> None: + """ + Sets the "SetLocalUniformScale" value on the entity. + :param scale_float: value for "SetLocalUniformScale" to set to. + :return: None + """ + azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalUniformScale", self.id, scale_float) + + def set_local_rotation(self, vector3_rotation) -> None: + """ + Sets the "SetLocalRotation" value on the entity. + :param vector3_rotation: The math.Vector3 value to use for rotation on the entity (uses radians). + :return: None + """ + azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalRotation", self.id, vector3_rotation) diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py index cc217f81da..ef3048d8d4 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py @@ -4,18 +4,18 @@ For complete copyright and license terms please see the LICENSE at the root of t SPDX-License-Identifier: Apache-2.0 OR MIT """ + +import json +import math import os import time -import math +import traceback +from typing import Callable, Tuple import azlmbr import azlmbr.legacy.general as general import azlmbr.debug -import json -import traceback - -from typing import Callable, Tuple class FailFast(Exception): """ @@ -127,6 +127,31 @@ class TestHelper: if ret: return True + @staticmethod + def close_error_windows(): + """ + Closes Error Report and Error Log windows that block focus if they are visible. + :return: None + """ + if general.is_pane_visible("Error Report"): + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): + general.close_pane("Error Log") + + @staticmethod + def close_display_helpers(): + """ + Closes helper gizmos, anti-aliasing, and FPS meters. + :return: None + """ + if general.is_helpers_shown(): + general.toggle_helpers() + general.idle_wait(1.0) + general.idle_wait(1.0) + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + general.idle_wait(1.0) + class Timeout: # type: (float) -> None @@ -149,6 +174,7 @@ class Timeout: def timed_out(self): return time.time() > self.die_after + class Report: _results = [] _exception = None @@ -290,8 +316,8 @@ class Report: Report.info(" x: {:.2f}, y: {:.2f}, z: {:.2f}".format(vector3.x, vector3.y, vector3.z)) if magnitude is not None: Report.info(" magnitude: {:.2f}".format(magnitude)) - - + + ''' Utility for scope tracing errors and warnings. Usage: @@ -303,7 +329,7 @@ Usage: Report.result(Tests.warnings_not_found_in_section, not section_tracer.has_warnings) -''' +''' class Tracer: def __init__(self): self.warnings = [] @@ -349,10 +375,10 @@ class Tracer: self.line = args[1] self.function = args[2] self.message = args[3] - + def __str__(self): return f"Assert: [{self.filename}:{self.function}:{self.line}]: {self.message}" - + def __repr__(self): return f"[Assert: {self.message}]" @@ -360,21 +386,21 @@ class Tracer: def __init__(self, args): self.window = args[0] self.message = args[1] - + def _on_warning(self, args): warningInfo = Tracer.WarningInfo(args) self.warnings.append(warningInfo) Report.info("Tracer caught Warning: %s" % warningInfo.message) self.has_warnings = True return False - + def _on_error(self, args): errorInfo = Tracer.ErrorInfo(args) self.errors.append(errorInfo) Report.info("Tracer caught Error: %s" % errorInfo.message) self.has_errors = True return False - + def _on_assert(self, args): assertInfo = Tracer.AssertInfo(args) self.asserts.append(assertInfo) @@ -436,6 +462,7 @@ class AngleHelper: def vector3_str(vector3): return "(x: {:.2f}, y: {:.2f}, z: {:.2f})".format(vector3.x, vector3.y, vector3.z) - + + def aabb_str(aabb): return "[Min: %s, Max: %s]" % (vector3_str(aabb.min), vector3_str(aabb.max)) From 0cd1f20d39493ab6bf37285f1a37a5de95b8835a Mon Sep 17 00:00:00 2001 From: Benjamin Jillich <43751992+amzn-jillich@users.noreply.github.com> Date: Wed, 6 Oct 2021 09:35:55 +0200 Subject: [PATCH 118/226] EMotion FX: Simple LOD Component to use Atom LOD override (#4464) The LOD level for skinned meshes is determined in the render phase, which is after the animation update and is also specific to the camera/target Atom renders to, which means that different render targets could end up using different LOD levels depending on how much screen space the character's bounding box takes. In order to make sure that all transformations are calculated by EMotion FX that the skinned mesh Atom wants to render are available, the Simple LOD Component takes ownership of the LOD level and uses the Atom LOD override. That way Atom adapts to the LOD level determined by the Simple LOD component and makes sure the skeletal matches with the geometry LOD levels. Signed-off-by: Benjamin Jillich --- Gems/EMotionFX/Code/CMakeLists.txt | 1 + .../Components/SimpleLODComponent.cpp | 42 +++++++++++++++++-- .../Components/SimpleLODComponent.h | 5 ++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/Gems/EMotionFX/Code/CMakeLists.txt b/Gems/EMotionFX/Code/CMakeLists.txt index ed5447ba25..dace02b2ae 100644 --- a/Gems/EMotionFX/Code/CMakeLists.txt +++ b/Gems/EMotionFX/Code/CMakeLists.txt @@ -36,6 +36,7 @@ ly_add_target( PUBLIC AZ::AtomCore Gem::Atom_RPI.Public + Gem::AtomLyIntegration_CommonFeatures.Static Gem::LmbrCentral COMPILE_DEFINITIONS PUBLIC diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp index 5db0fae842..aa17058adf 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.cpp @@ -142,12 +142,31 @@ namespace EMotionFX { ActorComponentNotificationBus::Handler::BusConnect(GetEntityId()); AZ::TickBus::Handler::BusConnect(); + + // Remember the lod type and level so that we can set it back to the previous one on deactivation of the component. + AZ::Render::MeshComponentRequestBus::EventResult(m_previousLodType, + GetEntityId(), + &AZ::Render::MeshComponentRequestBus::Events::GetLodType); + + if (m_actorInstance) + { + m_previousLodLevel = m_actorInstance->GetLODLevel(); + } } void SimpleLODComponent::Deactivate() { AZ::TickBus::Handler::BusDisconnect(); ActorComponentNotificationBus::Handler::BusDisconnect(); + + AZ::Render::MeshComponentRequestBus::Event(GetEntityId(), + &AZ::Render::MeshComponentRequestBus::Events::SetLodType, + m_previousLodType); + + if (m_actorInstance) + { + m_actorInstance->SetLODLevel(m_previousLodLevel); + } } void SimpleLODComponent::OnActorInstanceCreated(EMotionFX::ActorInstance* actorInstance) @@ -183,7 +202,7 @@ namespace EMotionFX return max - 1; } - void SimpleLODComponent::UpdateLodLevelByDistance(EMotionFX::ActorInstance * actorInstance, const Configuration& configuration, AZ::EntityId entityId) + void SimpleLODComponent::UpdateLodLevelByDistance(EMotionFX::ActorInstance* actorInstance, const Configuration& configuration, AZ::EntityId entityId) { if (actorInstance) { @@ -201,15 +220,30 @@ namespace EMotionFX AZ::RPI::ViewportContextPtr defaultViewportContext = viewportContextManager->GetViewportContextByName(viewportContextManager->GetDefaultViewportContextName()); const float distance = worldPos.GetDistance(defaultViewportContext->GetCameraTransform().GetTranslation()); - const size_t lodByDistance = GetLodByDistance(configuration.m_lodDistances, distance); - actorInstance->SetLODLevel(lodByDistance); + const size_t requestedLod = GetLodByDistance(configuration.m_lodDistances, distance); + actorInstance->SetLODLevel(requestedLod); if (configuration.m_enableLodSampling) { - const float animGraphSampleRate = configuration.m_lodSampleRates[lodByDistance]; + const float animGraphSampleRate = configuration.m_lodSampleRates[requestedLod]; const float updateRateInSeconds = animGraphSampleRate > 0.0f ? 1.0f / animGraphSampleRate : 0.0f; actorInstance->SetMotionSamplingRate(updateRateInSeconds); } + + // Disable the automatic mesh LOD level adjustment based on screen space in case a simple LOD component is present. + // The simple LOD component overrides the mesh LOD level and syncs the skeleton with the mesh LOD level. + AZ::Render::MeshComponentRequestBus::Event(entityId, + &AZ::Render::MeshComponentRequestBus::Events::SetLodType, + AZ::RPI::Cullable::LodType::SpecificLod); + + // When setting the actor instance LOD level, a change is just requested and with the next update it will get applied. + // This means that the current LOD level might differ from the requested one. We need to sync the Atom LOD level with the + // current LOD level of the actor instance to avoid skinning artifacts. The requested LOD level will be present and applied + // the following frame. + const size_t currentLod = actorInstance->GetLODLevel(); + AZ::Render::MeshComponentRequestBus::Event(entityId, + &AZ::Render::MeshComponentRequestBus::Events::SetLodOverride, + static_cast(currentLod)); } } } // namespace integration diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h index 96bebdc660..a00918e7c0 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/SimpleLODComponent.h @@ -17,7 +17,7 @@ #include #include - +#include namespace EMotionFX { @@ -93,6 +93,9 @@ namespace EMotionFX Configuration m_configuration; // Component configuration. EMotionFX::ActorInstance* m_actorInstance; // Associated actor instance (retrieved from Actor Component). + + AZ::RPI::Cullable::LodType m_previousLodType = AZ::RPI::Cullable::LodType::Default; + size_t m_previousLodLevel = 0; }; } // namespace Integration From 606ba45cf2c5d9902cd3d42a7bc99154894bceb4 Mon Sep 17 00:00:00 2001 From: moraaar Date: Wed, 6 Oct 2021 09:46:04 +0100 Subject: [PATCH 119/226] Fixed PhysX and Blast creation of default config files (#4497) - Avoid saving blast global configuration unnecessarily every time the editor is opened. - Fixed how to obtain the default physics material library. The relative path needs to be from the project folder, not the asset folder inside the project. It was also missing saving the physx configuration after a the default library is assigned to it. - Fixed asset id for physics material asset 'assets/physics/surfacetypemateriallibrary.physmaterial' Signed-off-by: moraaar moraaar@amazon.com --- ...llider_AddingNewGroupWorks.setreg_override | 2 +- ...er_CollisionGroupsWorkflow.setreg_override | 2 +- ...fCollidingLayersNotCollide.setreg_override | 2 +- ...onGroupSameLayerNotCollide.setreg_override | 2 +- ...roupSameCustomLayerCollide.setreg_override | 2 +- .../Registry/physxsystemconfiguration.setreg | 2 +- .../Components/BlastSystemComponent.cpp | 14 +++++++--- .../Source/Components/BlastSystemComponent.h | 1 + .../Components/EditorSystemComponent.cpp | 26 ++++++++++++++----- Gems/PhysX/Code/Source/System/PhysXSystem.cpp | 6 +++-- Gems/PhysX/Code/Source/SystemComponent.cpp | 24 ++++++++++++++--- 11 files changed, 63 insertions(+), 20 deletions(-) diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override index 7065f0dfeb..209e9a9feb 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_AddingNewGroupWorks.setreg_override @@ -109,7 +109,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_CollisionGroupsWorkflow.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_DiffCollisionGroupDiffCollidingLayersNotCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_NoneCollisionGroupSameLayerNotCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override b/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override index b82acaf0ae..65f15f8554 100644 --- a/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override +++ b/AutomatedTesting/Registry/physx_overrides/Collider_SameCollisionGroupSameCustomLayerCollide.setreg_override @@ -121,7 +121,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/AutomatedTesting/Registry/physxsystemconfiguration.setreg b/AutomatedTesting/Registry/physxsystemconfiguration.setreg index 83aad307a6..2ade83d769 100644 --- a/AutomatedTesting/Registry/physxsystemconfiguration.setreg +++ b/AutomatedTesting/Registry/physxsystemconfiguration.setreg @@ -103,7 +103,7 @@ }, "MaterialLibrary": { "assetId": { - "guid": "{62446378-67F8-5E49-AC31-761DD5942695}" + "guid": "{7CDF49C3-91A2-5C4E-B642-6D1AEC80E70E}" }, "loadBehavior": "QueueLoad", "assetHint": "assets/physics/surfacetypemateriallibrary.physmaterial" diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp index 21ec1a4603..b7ee805b3c 100644 --- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp +++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.cpp @@ -286,8 +286,11 @@ namespace Blast DefaultConfigurationPath, globalConfiguration); AZ_Warning("Blast", loaded, "Failed to load Blast configuration, initializing with default configs."); - SetGlobalConfiguration(globalConfiguration); - SaveConfiguration(); + ApplyGlobalConfiguration(globalConfiguration); + if (!loaded) + { + SaveConfiguration(); + } } void BlastSystemComponent::SaveConfiguration() @@ -394,8 +397,13 @@ namespace Blast void BlastSystemComponent::SetGlobalConfiguration(const BlastGlobalConfiguration& globalConfiguration) { - m_configuration = globalConfiguration; + ApplyGlobalConfiguration(globalConfiguration); SaveConfiguration(); + } + + void BlastSystemComponent::ApplyGlobalConfiguration(const BlastGlobalConfiguration& globalConfiguration) + { + m_configuration = globalConfiguration; { AZ::Data::Asset& materialLibrary = m_configuration.m_materialLibrary; diff --git a/Gems/Blast/Code/Source/Components/BlastSystemComponent.h b/Gems/Blast/Code/Source/Components/BlastSystemComponent.h index a43bc17aca..8f6c200870 100644 --- a/Gems/Blast/Code/Source/Components/BlastSystemComponent.h +++ b/Gems/Blast/Code/Source/Components/BlastSystemComponent.h @@ -93,6 +93,7 @@ namespace Blast void InitPhysics(); void DeactivatePhysics(); + void ApplyGlobalConfiguration(const BlastGlobalConfiguration& materialLibrary); void RegisterCommands(); // Internal helper functions & classes diff --git a/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp b/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp index f65768cec9..a5b6430591 100644 --- a/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp +++ b/Gems/PhysX/Code/Editor/Source/Components/EditorSystemComponent.cpp @@ -8,7 +8,9 @@ #include "EditorSystemComponent.h" #include +#include #include +#include #include #include #include @@ -23,7 +25,7 @@ namespace PhysX { - constexpr const char* DefaultAssetFilePath = "Physics/SurfaceTypeMaterialLibrary"; + constexpr const char* DefaultAssetFilePath = "Assets/Physics/SurfaceTypeMaterialLibrary"; constexpr const char* TemplateAssetFilename = "PhysX/TemplateMaterialLibrary"; static AZStd::optional> GetMaterialLibraryTemplate() @@ -67,7 +69,7 @@ namespace PhysX assetId, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, relativePath.c_str(), assetType, true /*autoRegisterIfNotFound*/); AZ::Data::Asset newAsset = - AZ::Data::AssetManager::Instance().GetAsset(assetId, assetType, AZ::Data::AssetLoadBehavior::Default); + AZ::Data::AssetManager::Instance().FindOrCreateAsset(assetId, assetType, AZ::Data::AssetLoadBehavior::Default); if (auto* newMaterialLibraryData = azrtti_cast(newAsset.GetData())) { @@ -138,6 +140,14 @@ namespace PhysX if (auto retrievedMaterialLibrary = RetrieveDefaultMaterialLibrary()) { physxSystem->UpdateMaterialLibrary(retrievedMaterialLibrary.value()); + + // After setting the default material library, save the physx configuration. + auto saveCallback = []([[maybe_unused]] const PhysXSystemConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the PhysX configuration after setting default material library."); + }; + physxSystem->GetSettingsRegistryManager().SaveSystemConfiguration(physxSystem->GetPhysXConfiguration(), saveCallback); } } } @@ -236,11 +246,15 @@ namespace PhysX if (!resultAssetId.IsValid()) { // No file for the default material library, create it - const char* assetRoot = AZ::IO::FileIOBase::GetInstance()->GetAlias("@projectsourceassets@"); - AZStd::string fullPath; - AzFramework::StringFunc::Path::ConstructFull(assetRoot, DefaultAssetFilePath, assetExtension.c_str(), fullPath); + AZ::IO::Path fullPath; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(fullPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); + } + fullPath /= DefaultAssetFilePath; + fullPath.ReplaceExtension(AZ::IO::PathView(assetExtension)); - if (auto materialLibraryOpt = CreateMaterialLibrary(fullPath, relativePath)) + if (auto materialLibraryOpt = CreateMaterialLibrary(fullPath.Native(), relativePath)) { return materialLibraryOpt; } diff --git a/Gems/PhysX/Code/Source/System/PhysXSystem.cpp b/Gems/PhysX/Code/Source/System/PhysXSystem.cpp index ebdfc5d417..cc21285f8c 100644 --- a/Gems/PhysX/Code/Source/System/PhysXSystem.cpp +++ b/Gems/PhysX/Code/Source/System/PhysXSystem.cpp @@ -511,10 +511,12 @@ namespace PhysX materialLibrary.BlockUntilLoadComplete(); - AZ_Warning("PhysX", (materialLibrary.GetData() != nullptr), + const bool loadedSuccessfully = materialLibrary.GetData() != nullptr && !materialLibrary.IsError(); + + AZ_Warning("PhysX", loadedSuccessfully, "LoadDefaultMaterialLibrary: Default Material Library asset data is invalid."); - return materialLibrary.GetData() != nullptr && !materialLibrary.IsError(); + return loadedSuccessfully; } //TEMP -- until these are fully moved over here diff --git a/Gems/PhysX/Code/Source/SystemComponent.cpp b/Gems/PhysX/Code/Source/SystemComponent.cpp index 42c78d2c1d..f56ad43079 100644 --- a/Gems/PhysX/Code/Source/SystemComponent.cpp +++ b/Gems/PhysX/Code/Source/SystemComponent.cpp @@ -458,7 +458,13 @@ namespace PhysX { const PhysXSystemConfiguration defaultConfig = PhysXSystemConfiguration::CreateDefault(); m_physXSystem->Initialize(&defaultConfig); - registryManager.SaveSystemConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const PhysXSystemConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default PhysX configuration."); + }; + registryManager.SaveSystemConfiguration(defaultConfig, saveCallback); } //Load the DefaultSceneConfig @@ -471,7 +477,13 @@ namespace PhysX { const AzPhysics::SceneConfiguration defaultConfig = AzPhysics::SceneConfiguration::CreateDefault(); m_physXSystem->UpdateDefaultSceneConfiguration(defaultConfig); - registryManager.SaveDefaultSceneConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const AzPhysics::SceneConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default Scene configuration."); + }; + registryManager.SaveDefaultSceneConfiguration(defaultConfig, saveCallback); } //load the debug configuration and initialize the PhysX debug interface @@ -486,7 +498,13 @@ namespace PhysX { const Debug::DebugConfiguration defaultConfig = Debug::DebugConfiguration::CreateDefault(); debug->Initialize(defaultConfig); - registryManager.SaveDebugConfiguration(defaultConfig, {}); + + auto saveCallback = []([[maybe_unused]] const Debug::DebugConfiguration& config, [[maybe_unused]] PhysXSettingsRegistryManager::Result result) + { + AZ_Warning("PhysX", result == PhysXSettingsRegistryManager::Result::Success, + "Unable to save the default PhysX Debug configuration."); + }; + registryManager.SaveDebugConfiguration(defaultConfig, saveCallback); } } } From 5308a0fbbb729c0355a4abee490cc5d4551d0cb7 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 6 Oct 2021 11:57:42 +0100 Subject: [PATCH 120/226] Remove redundant editor mode notifications. Signed-off-by: John --- Code/Editor/Core/LevelEditorMenuHandler.cpp | 48 ++++++++------ Code/Editor/Core/LevelEditorMenuHandler.h | 12 ++-- Code/Editor/Objects/ObjectManager.cpp | 37 ++++++----- Code/Editor/Objects/ObjectManager.h | 13 ++-- .../UI/Outliner/OutlinerWidget.cpp | 22 ++++--- .../UI/Outliner/OutlinerWidget.hxx | 12 ++-- Code/Editor/QtViewPaneManager.cpp | 59 ++++++++++++++--- Code/Editor/QtViewPaneManager.h | 8 +-- .../API/ComponentModeCollectionInterface.h | 28 +++++++++ ...ewportEditorModeTrackerNotificationBus.cpp | 27 ++++++++ ...ViewportEditorModeTrackerNotificationBus.h | 5 ++ .../ComponentMode/ComponentModeCollection.cpp | 20 ++---- .../ComponentMode/ComponentModeCollection.h | 5 ++ .../ComponentMode/ComponentModeDelegate.cpp | 16 +---- .../ComponentMode/EditorComponentModeBus.h | 42 ------------- .../UI/Outliner/EntityOutlinerWidget.cpp | 22 ++++--- .../UI/Outliner/EntityOutlinerWidget.hxx | 12 ++-- .../UI/PropertyEditor/ComponentEditor.hxx | 1 - .../PropertyEditor/EntityPropertyEditor.cpp | 63 ++++++++++++------- .../PropertyEditor/EntityPropertyEditor.hxx | 13 +++- .../UnitTest/AzToolsFrameworkTestHelpers.cpp | 20 ++++-- .../UnitTest/AzToolsFrameworkTestHelpers.h | 12 ++-- .../EditorDefaultSelection.cpp | 9 +++ .../EditorTransformComponentSelection.cpp | 32 ++++++---- .../EditorTransformComponentSelection.h | 10 +-- .../aztoolsframework_files.cmake | 2 + 26 files changed, 345 insertions(+), 205 deletions(-) create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp diff --git a/Code/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Editor/Core/LevelEditorMenuHandler.cpp index e568f05167..25467756ac 100644 --- a/Code/Editor/Core/LevelEditorMenuHandler.cpp +++ b/Code/Editor/Core/LevelEditorMenuHandler.cpp @@ -32,6 +32,7 @@ #include // AzToolsFramework +#include #include // AzQtComponents @@ -166,15 +167,14 @@ LevelEditorMenuHandler::LevelEditorMenuHandler(MainWindow* mainWindow, QtViewPan m_mainWindow->menuBar()->setNativeMenuBar(true); #endif - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect( - AzToolsFramework::GetEntityContextId()); + ViewportEditorModeNotificationsBus::Handler::BusConnect(GetEntityContextId()); EditorMenuRequestBus::Handler::BusConnect(); } LevelEditorMenuHandler::~LevelEditorMenuHandler() { EditorMenuRequestBus::Handler::BusDisconnect(); - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); + ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); } void LevelEditorMenuHandler::Initialize() @@ -1186,30 +1186,38 @@ void LevelEditorMenuHandler::AddDisableActionInSimModeListener(QAction* action) })); } -void LevelEditorMenuHandler::EnteredComponentMode(const AZStd::vector& /*componentModeTypes*/) +void LevelEditorMenuHandler::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); - if (!menuWrapper.isNull()) + if (mode == ViewportEditorMode::Component) { - // copy of menu actions - auto actions = menuWrapper.Get()->actions(); - // remove all non-reserved edit menu options - actions.erase( - std::remove_if(actions.begin(), actions.end(), [](QAction* action) - { - return !action->property("Reserved").toBool(); - }), - actions.end()); + auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); + if (!menuWrapper.isNull()) + { + // copy of menu actions + auto actions = menuWrapper.Get()->actions(); + // remove all non-reserved edit menu options + actions.erase( + std::remove_if(actions.begin(), actions.end(), [](QAction* action) + { + return !action->property("Reserved").toBool(); + }), + actions.end()); - // clear and update the menu with new actions - menuWrapper.Get()->clear(); - menuWrapper.Get()->addActions(actions); + // clear and update the menu with new actions + menuWrapper.Get()->clear(); + menuWrapper.Get()->addActions(actions); + } } } -void LevelEditorMenuHandler::LeftComponentMode(const AZStd::vector& /*componentModeTypes*/) +void LevelEditorMenuHandler::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - RestoreEditMenuToDefault(); + if (mode == ViewportEditorMode::Component) + { + RestoreEditMenuToDefault(); + } } void LevelEditorMenuHandler::AddEditMenuAction(QAction* action) diff --git a/Code/Editor/Core/LevelEditorMenuHandler.h b/Code/Editor/Core/LevelEditorMenuHandler.h index 5ac8e63786..ff03c7748c 100644 --- a/Code/Editor/Core/LevelEditorMenuHandler.h +++ b/Code/Editor/Core/LevelEditorMenuHandler.h @@ -18,7 +18,7 @@ #include #include "ActionManager.h" #include "QtViewPaneManager.h" -#include +#include #endif class MainWindow; @@ -28,7 +28,7 @@ struct QtViewPane; class LevelEditorMenuHandler : public QObject - , private AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler , private AzToolsFramework::EditorMenuRequestBus::Handler { Q_OBJECT @@ -88,9 +88,11 @@ private: void AddDisableActionInSimModeListener(QAction* action); - // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; // EditorMenuRequestBus void AddEditMenuAction(QAction* action) override; diff --git a/Code/Editor/Objects/ObjectManager.cpp b/Code/Editor/Objects/ObjectManager.cpp index f67cf24553..7057cc5b7b 100644 --- a/Code/Editor/Objects/ObjectManager.cpp +++ b/Code/Editor/Objects/ObjectManager.cpp @@ -30,6 +30,8 @@ #include "Plugins/ComponentEntityEditorPlugin/Objects/ComponentEntityObject.h" #include +#include +#include AZ_CVAR_EXTERNED(bool, ed_visibility_logTiming); @@ -107,14 +109,13 @@ CObjectManager::CObjectManager() m_objectsByName.reserve(1024); LoadRegistry(); - AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect( - AzToolsFramework::GetEntityContextId()); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(AzToolsFramework::GetEntityContextId()); } ////////////////////////////////////////////////////////////////////////// CObjectManager::~CObjectManager() { - AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); m_bExiting = true; SaveRegistry(); @@ -2306,25 +2307,33 @@ void CObjectManager::SelectObjectInRect(CBaseObject* pObj, CViewport* view, HitC } } -void CObjectManager::EnteredComponentMode(const AZStd::vector& /*componentModeTypes*/) +void CObjectManager::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - // hide current gizmo for entity (translate/rotate/scale) - IGizmoManager* gizmoManager = GetGizmoManager(); - const size_t gizmoCount = static_cast(gizmoManager->GetGizmoCount()); - for (size_t i = 0; i < gizmoCount; ++i) + if (mode == AzToolsFramework::ViewportEditorMode::Component) { - gizmoManager->RemoveGizmo(gizmoManager->GetGizmoByIndex(static_cast(i))); + // hide current gizmo for entity (translate/rotate/scale) + IGizmoManager* gizmoManager = GetGizmoManager(); + const size_t gizmoCount = static_cast(gizmoManager->GetGizmoCount()); + for (size_t i = 0; i < gizmoCount; ++i) + { + gizmoManager->RemoveGizmo(gizmoManager->GetGizmoByIndex(static_cast(i))); + } } } -void CObjectManager::LeftComponentMode(const AZStd::vector& /*componentModeTypes*/) +void CObjectManager::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - // show translate/rotate/scale gizmo again - if (IGizmoManager* gizmoManager = GetGizmoManager()) + if (mode == AzToolsFramework::ViewportEditorMode::Component) { - if (CBaseObject* selectedObject = GetIEditor()->GetSelectedObject()) + // show translate/rotate/scale gizmo again + if (IGizmoManager* gizmoManager = GetGizmoManager()) { - gizmoManager->AddGizmo(new CAxisGizmo(selectedObject)); + if (CBaseObject* selectedObject = GetIEditor()->GetSelectedObject()) + { + gizmoManager->AddGizmo(new CAxisGizmo(selectedObject)); + } } } } diff --git a/Code/Editor/Objects/ObjectManager.h b/Code/Editor/Objects/ObjectManager.h index 0ad5d8323e..7fb2342e40 100644 --- a/Code/Editor/Objects/ObjectManager.h +++ b/Code/Editor/Objects/ObjectManager.h @@ -20,8 +20,9 @@ #include "ObjectManagerEventBus.h" #include -#include +#include #include +#include #include // forward declarations. @@ -58,7 +59,7 @@ public: */ class CObjectManager : public IObjectManager - , private AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler { public: //! Selection functor callback. @@ -329,9 +330,11 @@ private: void FindDisplayableObjects(DisplayContext& dc, bool bDisplay); - // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; private: typedef std::map Objects; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.cpp index 9ed7c4a144..803deb3509 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -267,8 +268,7 @@ OutlinerWidget::OutlinerWidget(QWidget* pParent, Qt::WindowFlags flags) ToolsApplicationEvents::Bus::Handler::BusConnect(); AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusConnect(); AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusConnect(); - AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect( - AzToolsFramework::GetEntityContextId()); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusConnect(AzToolsFramework::GetEntityContextId()); AzToolsFramework::EditorEntityInfoNotificationBus::Handler::BusConnect(); AzToolsFramework::EditorWindowUIRequestBus::Handler::BusConnect(); } @@ -276,7 +276,7 @@ OutlinerWidget::OutlinerWidget(QWidget* pParent, Qt::WindowFlags flags) OutlinerWidget::~OutlinerWidget() { AzToolsFramework::EditorWindowUIRequestBus::Handler::BusDisconnect(); - AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); + AzToolsFramework::ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); AzToolsFramework::EditorEntityInfoNotificationBus::Handler::BusDisconnect(); AzToolsFramework::EditorPickModeNotificationBus::Handler::BusDisconnect(); EntityHighlightMessages::Bus::Handler::BusDisconnect(); @@ -1335,14 +1335,22 @@ void OutlinerWidget::SetEditorUiEnabled(bool enable) EnableUi(enable); } -void OutlinerWidget::EnteredComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) +void OutlinerWidget::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - EnableUi(false); + if (mode == AzToolsFramework::ViewportEditorMode::Component) + { + EnableUi(false); + } } -void OutlinerWidget::LeftComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) +void OutlinerWidget::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - EnableUi(true); + if (mode == AzToolsFramework::ViewportEditorMode::Component) + { + EnableUi(true); + } } void OutlinerWidget::OnSliceInstantiated(const AZ::Data::AssetId& /*sliceAssetId*/, AZ::SliceComponent::SliceInstanceAddress& sliceAddress, const AzFramework::SliceInstantiationTicket& /*ticket*/) diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.hxx b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.hxx index b29032a760..364ab05eb7 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.hxx +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/Outliner/OutlinerWidget.hxx @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include #include @@ -58,7 +58,7 @@ class OutlinerWidget , private AzToolsFramework::EditorEntityContextNotificationBus::Handler , private AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler , private AzToolsFramework::EditorEntityInfoNotificationBus::Handler - , private AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler , private AzToolsFramework::EditorWindowUIRequestBus::Handler { Q_OBJECT; @@ -105,9 +105,11 @@ private: void OnEntityInfoUpdatedAddChildEnd(AZ::EntityId /*parentId*/, AZ::EntityId /*childId*/) override; void OnEntityInfoUpdatedName(AZ::EntityId entityId, const AZStd::string& /*name*/) override; - // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; // EditorWindowUIRequestBus overrides void SetEditorUiEnabled(bool enable) override; diff --git a/Code/Editor/QtViewPaneManager.cpp b/Code/Editor/QtViewPaneManager.cpp index eff3a7331e..0f9fd480ca 100644 --- a/Code/Editor/QtViewPaneManager.cpp +++ b/Code/Editor/QtViewPaneManager.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -44,11 +45,54 @@ #include #include #include - #include #include "ShortcutDispatcher.h" +// Helper for EditorComponentModeNotifications to be used +// as a member instead of inheriting from EBus directly. +class ViewportEditorModeNotificationsBusImpl + : public AzToolsFramework::ViewportEditorModeNotificationsBus::Handler +{ + public: + /// Set the function to be called when entering ComponentMode. + void SetEnteredComponentModeFunc( + const AZStd::function& enteredComponentModeFunc) + { + m_enteredComponentModeFunc = enteredComponentModeFunc; + } + + /// Set the function to be called when leaving ComponentMode. + void SetLeftComponentModeFunc( + const AZStd::function& leftComponentModeFunc) + { + m_leftComponentModeFunc = leftComponentModeFunc; + } + + private: + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override + { + if (mode == AzToolsFramework::ViewportEditorMode::Component) + { + m_enteredComponentModeFunc(editorModeState); + } + } + + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override + { + if (mode == AzToolsFramework::ViewportEditorMode::Component) + { + m_leftComponentModeFunc(editorModeState); + } + } + + AZStd::function m_enteredComponentModeFunc; ///< Function to call when entering ComponentMode. + AZStd::function m_leftComponentModeFunc; ///< Function to call when leaving ComponentMode. +}; + struct ViewLayoutState { QVector viewPanes; @@ -519,16 +563,17 @@ QtViewPaneManager::QtViewPaneManager(QObject* parent) , m_settings(nullptr) , m_restoreInProgress(false) , m_advancedDockManager(nullptr) + , m_componentModeNotifications(AZStd::make_unique()) { qRegisterMetaTypeStreamOperators("ViewLayoutState"); qRegisterMetaTypeStreamOperators >("QVector"); // view pane manager is interested when we enter/exit ComponentMode - m_componentModeNotifications.BusConnect(AzToolsFramework::GetEntityContextId()); + m_componentModeNotifications->BusConnect(AzToolsFramework::GetEntityContextId()); m_windowRequest.BusConnect(); - m_componentModeNotifications.SetEnteredComponentModeFunc( - [this](const AZStd::vector& /*componentModeTypes*/) + m_componentModeNotifications->SetEnteredComponentModeFunc( + [this](const AzToolsFramework::ViewportEditorModesInterface&) { // gray out panels when entering ComponentMode SetDefaultActionsEnabled(false, m_registeredPanes, [](QWidget* widget, bool on) @@ -537,8 +582,8 @@ QtViewPaneManager::QtViewPaneManager(QObject* parent) }); }); - m_componentModeNotifications.SetLeftComponentModeFunc( - [this](const AZStd::vector& /*componentModeTypes*/) + m_componentModeNotifications->SetLeftComponentModeFunc( + [this](const AzToolsFramework::ViewportEditorModesInterface&) { // enable panels again when leaving ComponentMode SetDefaultActionsEnabled(true, m_registeredPanes, [](QWidget* widget, bool on) @@ -563,7 +608,7 @@ QtViewPaneManager::QtViewPaneManager(QObject* parent) QtViewPaneManager::~QtViewPaneManager() { m_windowRequest.BusDisconnect(); - m_componentModeNotifications.BusDisconnect(); + m_componentModeNotifications->BusDisconnect(); } static bool lessThan(const QtViewPane& v1, const QtViewPane& v2) diff --git a/Code/Editor/QtViewPaneManager.h b/Code/Editor/QtViewPaneManager.h index 3ad1cc9cf7..fe568e5438 100644 --- a/Code/Editor/QtViewPaneManager.h +++ b/Code/Editor/QtViewPaneManager.h @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -34,6 +33,7 @@ #endif class QMainWindow; +class ViewportEditorModeNotificationsBusImpl; struct ViewLayoutState; namespace AzQtComponents @@ -245,9 +245,9 @@ private: QPointer m_advancedDockManager; - using EditorComponentModeNotificationBusImpl = AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBusImpl; - EditorComponentModeNotificationBusImpl m_componentModeNotifications; //!< Helper for EditorComponentModeNotificationBus so - //!< QtViewPaneManager does not need to inherit directly from it. */ + AZStd::unique_ptr + m_componentModeNotifications; //!< Helper for EditorComponentModeNotificationBus so + //!< QtViewPaneManager does not need to inherit directly from it. */ using EditorWindowRequestBusImpl = AzToolsFramework::EditorWindowRequestBusImpl; EditorWindowRequestBusImpl m_windowRequest; //!< Helper for EditorWindowRequestBus so diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h new file mode 100644 index 0000000000..39cd6bd6a3 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AzToolsFramework +{ + //! The AZ::Interface for component mode collection queries. + class ComponentModeCollectionInterface + { + public: + AZ_RTTI(ComponentModeCollectionInterface, "{DFAA4450-BBCD-47C0-9B91-FEA2DBD9B152}"); + + virtual ~ComponentModeCollectionInterface() = default; + + //! Retrieves the list of all Component types (usually one). + virtual const AZStd::vector& GetComponentTypes() const = 0; + }; +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp new file mode 100644 index 0000000000..278f9db950 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace AzToolsFramework +{ + void ViewportEditorModeNotifications::Reflect(AZ::ReflectContext* context) + { + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("ViewportEditorModeNotificationsBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation) + ->Attribute(AZ::Script::Attributes::Category, "Editor") + ->Attribute(AZ::Script::Attributes::Module, "editor") + ->Event("OnEditorModeActivated", &ViewportEditorModeNotifications::OnEditorModeActivated) + ->Event("OnEditorModeDeactivated", &ViewportEditorModeNotifications::OnEditorModeDeactivated) + ; + } + } +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h index 4fcb891e61..4fb4191d45 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.h @@ -34,6 +34,8 @@ namespace AzToolsFramework class ViewportEditorModesInterface { public: + AZ_RTTI(ViewportEditorModesInterface, "{2421496C-4A46-41C9-8AEF-AE2B6E43E6CF}"); + virtual ~ViewportEditorModesInterface() = default; //! Returns true if the specified editor mode is active, otherwise false. @@ -52,6 +54,9 @@ namespace AzToolsFramework using BusIdType = ViewportEditorModeTrackerInfo::IdType; ////////////////////////////////////////////////////////////////////////// + AZ_RTTI(ViewportEditorModeNotifications, "{9469DE39-6C21-423C-94FA-EF3A9616B14F}", AZ::EBusTraits); + static void Reflect(AZ::ReflectContext* context); + //! Notifies subscribers of the a given viewport to the activation of the specified editor mode. virtual void OnEditorModeActivated([[maybe_unused]] const ViewportEditorModesInterface& editorModeState, [[maybe_unused]] ViewportEditorMode mode) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index df93e924b8..e816c0ce4c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -203,6 +203,11 @@ namespace AzToolsFramework } } + const AZStd::vector& ComponentModeCollection::GetComponentTypes() const + { + return m_activeComponentTypes; + } + void ComponentModeCollection::BeginComponentMode() { m_selectedComponentModeIndex = 0; @@ -211,13 +216,6 @@ namespace AzToolsFramework // notify listeners the editor has entered ComponentMode - listeners may // wish to modify state to indicate this (e.g. appearance, functionality etc.) - EditorComponentModeNotificationBus::Event( - GetEntityContextId(), &EditorComponentModeNotifications::EnteredComponentMode, - m_activeComponentTypes); - - // this call to activate the component mode editor state should eventually replace the bus call in - // ComponentModeCollection::BeginComponentMode() to EditorComponentModeNotifications::EnteredComponentMode - // such that all of the notifications for activating/deactivating the different editor modes are in a central location m_viewportEditorModeTracker->ActivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // enable actions for the first/primary ComponentMode @@ -288,14 +286,6 @@ namespace AzToolsFramework // notify listeners the editor has left ComponentMode - listeners may // wish to modify state to indicate this (e.g. appearance, functionality etc.) - EditorComponentModeNotificationBus::Event( - GetEntityContextId(), - &EditorComponentModeNotifications::LeftComponentMode, - m_activeComponentTypes); - - // this call to deactivate the component mode editor state should eventually replace the bus call in - // ComponentModeCollection::EndComponentMode() to EditorComponentModeNotifications::LeftComponentMode - // such that all of the notifications for activating/deactivating the different editor modes are in a central location m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Component); // clear stored modes and builders for this ComponentMode diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h index 9e299d2323..fb35ca8971 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include @@ -21,6 +22,7 @@ namespace AzToolsFramework { /// Manages all individual ComponentModes for a single instance of Editor wide ComponentMode. class ComponentModeCollection + : public ComponentModeCollectionInterface { public: AZ_CLASS_ALLOCATOR_DECL @@ -89,6 +91,9 @@ namespace AzToolsFramework /// Called once each time a ComponentMode is added. void PopulateViewportUi(); + // ComponentModeCollectionInterface overrides ... + const AZStd::vector& GetComponentTypes() const override; + private: // Internal helper used by Select[|Prev|Next]ActiveComponentMode bool ActiveComponentModeChanged(const AZ::Uuid& previousComponentType); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeDelegate.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeDelegate.cpp index 325fc3909b..f0baeaea7e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeDelegate.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeDelegate.cpp @@ -24,18 +24,8 @@ namespace AzToolsFramework : public EditorComponentModeNotificationBus::Handler , public AZ::BehaviorEBusHandler { - AZ_EBUS_BEHAVIOR_BINDER(EditorComponentModeNotificationBusHandler, "{AD2F4204-0913-4FC9-9A10-492538F60C70}", AZ::SystemAllocator, - EnteredComponentMode, LeftComponentMode, ActiveComponentModeChanged); - - void EnteredComponentMode(const AZStd::vector& componentTypes) override - { - Call(FN_EnteredComponentMode, componentTypes); - } - - void LeftComponentMode(const AZStd::vector& componentTypes) override - { - Call(FN_LeftComponentMode, componentTypes); - } + AZ_EBUS_BEHAVIOR_BINDER( + EditorComponentModeNotificationBusHandler, "{AD2F4204-0913-4FC9-9A10-492538F60C70}", AZ::SystemAllocator, ActiveComponentModeChanged); void ActiveComponentModeChanged(const AZ::Uuid& componentType) override { @@ -171,8 +161,6 @@ namespace AzToolsFramework ->Attribute(AZ::Script::Attributes::Category, "Editor") ->Attribute(AZ::Script::Attributes::Module, "editor") ->Handler() - ->Event("EnteredComponentMode", &EditorComponentModeNotifications::EnteredComponentMode) - ->Event("LeftComponentMode", &EditorComponentModeNotifications::LeftComponentMode) ->Event("ActiveComponentModeChanged", &EditorComponentModeNotifications::ActiveComponentModeChanged) ; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorComponentModeBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorComponentModeBus.h index 5be535e1ed..67a8291e22 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorComponentModeBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/EditorComponentModeBus.h @@ -238,12 +238,6 @@ namespace AzToolsFramework using BusIdType = AzFramework::EntityContextId; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - /// Called when Editor enters ComponentMode - pass the list of all Component types (usually one). - virtual void EnteredComponentMode(const AZStd::vector& componentTypes) = 0; - - /// Called when Editor leaves ComponentMode - pass the list of all Component types (usually one). - virtual void LeftComponentMode(const AZStd::vector& componentTypes) = 0; - /// Called when Tab is pressed to cycle the 'selected' ComponentMode (which shortcuts/actions are active). /// Also called when directly selecting a Component in the EntityOutliner. virtual void ActiveComponentModeChanged(const AZ::Uuid& /*componentType*/) {} @@ -255,42 +249,6 @@ namespace AzToolsFramework /// Type to inherit to implement EditorComponentModeNotifications. using EditorComponentModeNotificationBus = AZ::EBus; - /// Helper for EditorComponentModeNotifications to be used - /// as a member instead of inheriting from EBus directly. - class EditorComponentModeNotificationBusImpl - : public EditorComponentModeNotificationBus::Handler - { - public: - /// Set the function to be called when entering ComponentMode. - void SetEnteredComponentModeFunc( - const AZStd::function&)>& enteredComponentModeFunc) - { - m_enteredComponentModeFunc = enteredComponentModeFunc; - } - - /// Set the function to be called when leaving ComponentMode. - void SetLeftComponentModeFunc( - const AZStd::function&)>& leftComponentModeFunc) - { - m_leftComponentModeFunc = leftComponentModeFunc; - } - - private: - // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override - { - m_enteredComponentModeFunc(componentModeTypes); - } - - void LeftComponentMode(const AZStd::vector& componentModeTypes) override - { - m_leftComponentModeFunc(componentModeTypes); - } - - AZStd::function&)> m_enteredComponentModeFunc; ///< Function to call when entering ComponentMode. - AZStd::function&)> m_leftComponentModeFunc; ///< Function to call when leaving ComponentMode. - }; - /// Helper to answer if the Editor is in ComponentMode or not. inline bool InComponentMode() { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 689e5b5dc4..347057d9ba 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -291,8 +292,7 @@ namespace AzToolsFramework EntityOutlinerModelNotificationBus::Handler::BusConnect(); ToolsApplicationEvents::Bus::Handler::BusConnect(); EditorEntityContextNotificationBus::Handler::BusConnect(); - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect( - GetEntityContextId()); + ViewportEditorModeNotificationsBus::Handler::BusConnect(GetEntityContextId()); EditorEntityInfoNotificationBus::Handler::BusConnect(); Prefab::PrefabPublicNotificationBus::Handler::BusConnect(); EditorWindowUIRequestBus::Handler::BusConnect(); @@ -302,7 +302,7 @@ namespace AzToolsFramework { EditorWindowUIRequestBus::Handler::BusDisconnect(); Prefab::PrefabPublicNotificationBus::Handler::BusDisconnect(); - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); + ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); EditorEntityInfoNotificationBus::Handler::BusDisconnect(); EditorPickModeNotificationBus::Handler::BusDisconnect(); EntityHighlightMessages::Bus::Handler::BusDisconnect(); @@ -1123,14 +1123,22 @@ namespace AzToolsFramework EnableUi(enable); } - void EntityOutlinerWidget::EnteredComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) + void EntityOutlinerWidget::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - EnableUi(false); + if (mode == ViewportEditorMode::Component) + { + EnableUi(false); + } } - void EntityOutlinerWidget::LeftComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) + void EntityOutlinerWidget::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - EnableUi(true); + if (mode == ViewportEditorMode::Component) + { + EnableUi(true); + } } void EntityOutlinerWidget::OnPrefabInstancePropagationBegin() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index 78aced3587..dcf23b19c0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include @@ -58,7 +58,7 @@ namespace AzToolsFramework , private ToolsApplicationEvents::Bus::Handler , private EditorEntityContextNotificationBus::Handler , private EditorEntityInfoNotificationBus::Handler - , private ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private ViewportEditorModeNotificationsBus::Handler , private Prefab::PrefabPublicNotificationBus::Handler , private EditorWindowUIRequestBus::Handler { @@ -100,9 +100,11 @@ namespace AzToolsFramework void OnEntityInfoUpdatedAddChildEnd(AZ::EntityId /*parentId*/, AZ::EntityId /*childId*/) override; void OnEntityInfoUpdatedName(AZ::EntityId entityId, const AZStd::string& /*name*/) override; - // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; // PrefabPublicNotificationBus void OnPrefabInstancePropagationBegin() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ComponentEditor.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ComponentEditor.hxx index b2140868da..f450ec7ac9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ComponentEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ComponentEditor.hxx @@ -90,7 +90,6 @@ namespace AzToolsFramework void SetComponentOverridden(const bool overridden); - // Calls match EditorComponentModeNotificationBus - called from EntityPropertyEditor void EnteredComponentMode(const AZStd::vector& componentModeTypes); void LeftComponentMode(const AZStd::vector& componentModeTypes); void ActiveComponentModeChanged(const AZ::Uuid& componentType); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp index 87527502dd..ad62614770 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp @@ -33,6 +33,7 @@ AZ_POP_DISABLE_WARNING #include #include #include +#include #include #include #include @@ -486,8 +487,12 @@ namespace AzToolsFramework , m_isSystemEntityEditor(false) , m_isLevelEntityEditor(isLevelEntityEditor) { + initEntityPropertyEditorResources(); + m_componentModeCollection = AZ::Interface::Get(); + AZ_Assert(m_componentModeCollection, "Could not retrieve component mode collection."); + m_prefabPublicInterface = AZ::Interface::Get(); AZ_Assert(m_prefabPublicInterface != nullptr, "EntityPropertyEditor requires a PrefabPublicInterface instance on Initialize."); @@ -5698,39 +5703,49 @@ namespace AzToolsFramework SaveComponentEditorState(); } - void EntityPropertyEditor::EnteredComponentMode(const AZStd::vector& componentModeTypes) + void EntityPropertyEditor::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - DisableComponentActions(this, m_entityComponentActions); - SetPropertyEditorState(m_gui, false); - m_disabled = true; - - if (!componentModeTypes.empty()) + if (mode == AzToolsFramework::ViewportEditorMode::Component) { - m_componentEditorLastSelectedIndex = GetComponentEditorIndexFromType(componentModeTypes.front()); - } + DisableComponentActions(this, m_entityComponentActions); + SetPropertyEditorState(m_gui, false); + const auto& componentModeTypes = m_componentModeCollection->GetComponentTypes(); + m_disabled = true; + + if (!componentModeTypes.empty()) + { + m_componentEditorLastSelectedIndex = GetComponentEditorIndexFromType(componentModeTypes.front()); + } - for (auto componentEditor : m_componentEditors) - { - componentEditor->EnteredComponentMode(componentModeTypes); - } + for (auto componentEditor : m_componentEditors) + { + componentEditor->EnteredComponentMode(componentModeTypes); + } - // record the selected state after entering component mode - SaveComponentEditorState(); + // record the selected state after entering component mode + SaveComponentEditorState(); + } } - void EntityPropertyEditor::LeftComponentMode(const AZStd::vector& componentModeTypes) + void EntityPropertyEditor::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - EnableComponentActions(this, m_entityComponentActions); - SetPropertyEditorState(m_gui, true); - m_disabled = false; - - for (auto componentEditor : m_componentEditors) + if (mode == AzToolsFramework::ViewportEditorMode::Component) { - componentEditor->LeftComponentMode(componentModeTypes); - } + EnableComponentActions(this, m_entityComponentActions); + SetPropertyEditorState(m_gui, true); + const auto& componentModeTypes = m_componentModeCollection->GetComponentTypes(); + m_disabled = false; - // record the selected state after leaving component mode - SaveComponentEditorState(); + for (auto componentEditor : m_componentEditors) + { + componentEditor->LeftComponentMode(componentModeTypes); + } + + // record the selected state after leaving component mode + SaveComponentEditorState(); + } } void EntityPropertyEditor::ActiveComponentModeChanged(const AZ::Uuid& componentType) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx index 83b275b81a..5279cefa9f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -59,6 +60,7 @@ namespace AzToolsFramework { class ComponentEditor; class ComponentPaletteWidget; + class ComponentModeCollectionInterface; struct SourceControlFileInfo; namespace AssetBrowser @@ -108,6 +110,7 @@ namespace AzToolsFramework , public AzToolsFramework::EditorEntityContextNotificationBus::Handler , public AzToolsFramework::EntityPropertyEditorRequestBus::Handler , public AzToolsFramework::PropertyEditorEntityChangeNotificationBus::MultiHandler + , private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler , public EditorInspectorComponentNotificationBus::MultiHandler , private AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler , public AZ::EntitySystemBus::Handler @@ -231,10 +234,14 @@ namespace AzToolsFramework ////////////////////////////////////////////////////////////////////////// // EditorComponentModeNotificationBus - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; void ActiveComponentModeChanged(const AZ::Uuid& componentType) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + // EntityPropertEditorRequestBus void GetSelectedAndPinnedEntities(EntityIdList& selectedEntityIds) override; void GetSelectedEntities(EntityIdList& selectedEntityIds) override; @@ -627,6 +634,8 @@ namespace AzToolsFramework float m_moveFadeSecondsRemaining; AZStd::vector m_indexMapOfMovedRow; + AzToolsFramework::ComponentModeCollectionInterface* m_componentModeCollection = nullptr; + // When m_initiatingPropertyChangeNotification is set to true, it means this EntityPropertyEditor is // broadcasting a change to all listeners about a property change for a given entity. This is needed // so that we don't update the values twice for this inspector diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.cpp index 8d30359562..a0d02f47e7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.cpp @@ -129,7 +129,7 @@ namespace UnitTest using AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus; AzToolsFramework::EditorActionRequestBus::Handler::BusConnect(); - EditorComponentModeNotificationBus::Handler::BusConnect(GetEntityContextId()); + ViewportEditorModeNotificationsBus::Handler::BusConnect(GetEntityContextId()); m_defaultWidget.setFocus(); } @@ -137,18 +137,26 @@ namespace UnitTest { using AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus; - EditorComponentModeNotificationBus::Handler::BusDisconnect(); + ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); AzToolsFramework::EditorActionRequestBus::Handler::BusDisconnect(); } - void TestEditorActions::EnteredComponentMode([[maybe_unused]] const AZStd::vector& componentTypes) + void TestEditorActions::OnEditorModeActivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - m_componentModeWidget.setFocus(); + if (mode == ViewportEditorMode::Component) + { + m_componentModeWidget.setFocus(); + } } - void TestEditorActions::LeftComponentMode([[maybe_unused]] const AZStd::vector& componentTypes) + void TestEditorActions::OnEditorModeDeactivated( + [[maybe_unused]] const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) { - m_defaultWidget.setFocus(); + if (mode == ViewportEditorMode::Component) + { + m_defaultWidget.setFocus(); + } } void TestEditorActions::AddActionViaBus(int id, QAction* action) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h index c4aefecce5..4a7039423c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h @@ -23,9 +23,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -103,7 +103,7 @@ namespace UnitTest /// component mode editing. class TestEditorActions : private AzToolsFramework::EditorActionRequestBus::Handler - , private AzToolsFramework::ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private AzToolsFramework::ViewportEditorModeNotificationsBus::Handler { // EditorActionRequestBus ... void AddActionViaBus(int id, QAction* action) override; @@ -114,9 +114,11 @@ namespace UnitTest void AttachOverride(QWidget* /*object*/) override {} void DetachOverride() override {} - // EditorComponentModeNotificationBus ... - void EnteredComponentMode(const AZStd::vector& componentTypes) override; - void LeftComponentMode(const AZStd::vector& componentTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; + void OnEditorModeDeactivated( + const AzToolsFramework::ViewportEditorModesInterface& editorModeState, AzToolsFramework::ViewportEditorMode mode) override; public: void Connect(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp index 1ad0ee8ff3..fafa1b3198 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp @@ -27,6 +27,10 @@ namespace AzToolsFramework , m_viewportEditorModeTracker(viewportEditorModeTracker) , m_componentModeCollection(viewportEditorModeTracker) { + AZ_Assert( + AZ::Interface::Get() == nullptr, "Unexpected registration of component mode collection.") + AZ::Interface::Register(&m_componentModeCollection); + ActionOverrideRequestBus::Handler::BusConnect(GetEntityContextId()); ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusConnect(); @@ -40,6 +44,11 @@ namespace AzToolsFramework ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusDisconnect(); ActionOverrideRequestBus::Handler::BusDisconnect(); m_viewportEditorModeTracker->DeactivateMode({ GetEntityContextId() }, ViewportEditorMode::Default); + + AZ_Assert( + AZ::Interface::Get() != nullptr, + "Unexpected unregistration of component mode collection.") + AZ::Interface::Unregister(&m_componentModeCollection); } void EditorDefaultSelection::SetOverridePhantomWidget(QWidget* phantomOverrideWidget) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index ccb72e1d50..4c1fefc622 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -1027,7 +1027,7 @@ namespace AzToolsFramework EditorTransformComponentSelectionRequestBus::Handler::BusConnect(entityContextId); ToolsApplicationNotificationBus::Handler::BusConnect(); Camera::EditorCameraNotificationBus::Handler::BusConnect(); - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect(entityContextId); + ViewportEditorModeNotificationsBus::Handler::BusConnect(entityContextId); EditorEntityContextNotificationBus::Handler::BusConnect(); EditorEntityVisibilityNotificationBus::Router::BusRouterConnect(); EditorEntityLockComponentNotificationBus::Router::BusRouterConnect(); @@ -1075,7 +1075,7 @@ namespace AzToolsFramework EditorEntityLockComponentNotificationBus::Router::BusRouterDisconnect(); EditorEntityVisibilityNotificationBus::Router::BusRouterDisconnect(); EditorEntityContextNotificationBus::Handler::BusDisconnect(); - ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); + ViewportEditorModeNotificationsBus::Handler::BusDisconnect(); Camera::EditorCameraNotificationBus::Handler::BusDisconnect(); ToolsApplicationNotificationBus::Handler::BusDisconnect(); EditorTransformComponentSelectionRequestBus::Handler::BusDisconnect(); @@ -3707,22 +3707,30 @@ namespace AzToolsFramework m_selectedEntityIdsAndManipulatorsDirty = true; } - void EditorTransformComponentSelection::EnteredComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) + void EditorTransformComponentSelection::OnEditorModeActivated( + [[maybe_unused]] const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) { - SetAllViewportUiVisible(false); + if (mode == ViewportEditorMode::Component) + { + SetAllViewportUiVisible(false); - EditorEntityLockComponentNotificationBus::Router::BusRouterDisconnect(); - EditorEntityVisibilityNotificationBus::Router::BusRouterDisconnect(); - ToolsApplicationNotificationBus::Handler::BusDisconnect(); + EditorEntityLockComponentNotificationBus::Router::BusRouterDisconnect(); + EditorEntityVisibilityNotificationBus::Router::BusRouterDisconnect(); + ToolsApplicationNotificationBus::Handler::BusDisconnect(); + } } - void EditorTransformComponentSelection::LeftComponentMode([[maybe_unused]] const AZStd::vector& componentModeTypes) + void EditorTransformComponentSelection::OnEditorModeDeactivated( + [[maybe_unused]] const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) { - SetAllViewportUiVisible(true); + if (mode == ViewportEditorMode::Component) + { + SetAllViewportUiVisible(true); - ToolsApplicationNotificationBus::Handler::BusConnect(); - EditorEntityVisibilityNotificationBus::Router::BusRouterConnect(); - EditorEntityLockComponentNotificationBus::Router::BusRouterConnect(); + ToolsApplicationNotificationBus::Handler::BusConnect(); + EditorEntityVisibilityNotificationBus::Router::BusRouterConnect(); + EditorEntityLockComponentNotificationBus::Router::BusRouterConnect(); + } } void EditorTransformComponentSelection::CreateEntityManipulatorDeselectCommand(ScopedUndoBatch& undoBatch) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h index a0e87d9d6f..1e1cc6d2e1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.h @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include #include @@ -153,7 +153,7 @@ namespace AzToolsFramework , private EditorTransformComponentSelectionRequestBus::Handler , private ToolsApplicationNotificationBus::Handler , private Camera::EditorCameraNotificationBus::Handler - , private ComponentModeFramework::EditorComponentModeNotificationBus::Handler + , private ViewportEditorModeNotificationsBus::Handler , private EditorEntityContextNotificationBus::Handler , private EditorEntityVisibilityNotificationBus::Router , private EditorEntityLockComponentNotificationBus::Router @@ -286,9 +286,9 @@ namespace AzToolsFramework // EditorContextLockComponentNotificationBus overrides ... void OnEntityLockChanged(bool locked) override; - // EditorComponentModeNotificationBus overrides ... - void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; - void LeftComponentMode(const AZStd::vector& componentModeTypes) override; + // ViewportEditorModeNotificationsBus overrides ... + void OnEditorModeActivated(const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) override; + void OnEditorModeDeactivated(const ViewportEditorModesInterface& editorModeState, ViewportEditorMode mode) override; // EditorEntityContextNotificationBus overrides ... void OnStartPlayInEditor() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index f09d4f9b72..74c5db3f5e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -30,12 +30,14 @@ set(FILES API/AssetDatabaseBus.h API/ComponentEntityObjectBus.h API/ComponentEntitySelectionBus.h + API/ComponentModeCollectionInterface.h API/EditorCameraBus.h API/EditorCameraBus.cpp API/EditorAnimationSystemRequestBus.h API/EditorEntityAPI.h API/EditorLevelNotificationBus.h API/ViewportEditorModeTrackerNotificationBus.h + API/ViewportEditorModeTrackerNotificationBus.cpp API/EditorVegetationRequestsBus.h API/EditorPythonConsoleBus.h API/EditorPythonRunnerRequestsBus.h From 317d624f6ca7b6ed867cde5c841d3abea90ab63d Mon Sep 17 00:00:00 2001 From: John Date: Wed, 6 Oct 2021 13:01:49 +0100 Subject: [PATCH 121/226] Minor formatting. Signed-off-by: John --- Code/Editor/QtViewPaneManager.cpp | 4 ++-- .../ViewportSelection/EditorDefaultSelection.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Editor/QtViewPaneManager.cpp b/Code/Editor/QtViewPaneManager.cpp index 0f9fd480ca..1ac4b9cfe3 100644 --- a/Code/Editor/QtViewPaneManager.cpp +++ b/Code/Editor/QtViewPaneManager.cpp @@ -55,14 +55,14 @@ class ViewportEditorModeNotificationsBusImpl : public AzToolsFramework::ViewportEditorModeNotificationsBus::Handler { public: - /// Set the function to be called when entering ComponentMode. + // Set the function to be called when entering ComponentMode. void SetEnteredComponentModeFunc( const AZStd::function& enteredComponentModeFunc) { m_enteredComponentModeFunc = enteredComponentModeFunc; } - /// Set the function to be called when leaving ComponentMode. + // Set the function to be called when leaving ComponentMode. void SetLeftComponentModeFunc( const AZStd::function& leftComponentModeFunc) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp index fafa1b3198..1541d4678e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorDefaultSelection.cpp @@ -29,7 +29,7 @@ namespace AzToolsFramework { AZ_Assert( AZ::Interface::Get() == nullptr, "Unexpected registration of component mode collection.") - AZ::Interface::Register(&m_componentModeCollection); + AZ::Interface::Register(&m_componentModeCollection); ActionOverrideRequestBus::Handler::BusConnect(GetEntityContextId()); ComponentModeFramework::ComponentModeSystemRequestBus::Handler::BusConnect(); From 5cee9b43b7a6413b5459dac6ce3e52e6d37c9a97 Mon Sep 17 00:00:00 2001 From: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed, 6 Oct 2021 07:14:38 -0500 Subject: [PATCH 122/226] Squashed commit of Procedural Prefab work (#4481) * Squashed commit of the following: commit 964a45ead662f502ff0d63ae3528a9aa18a760f4 Merge: 8d4c1dee78 799ab8585b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Oct 1 16:16:47 2021 -0500 Merge branch 'development' into Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h commit 8d4c1dee782a1b82ded14d11f7fe879c865980a7 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 15:49:22 2021 -0500 fixing non-unity build Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit e83431b3be58f36a875b5187c03cd67368d91726 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 12:42:38 2021 -0500 fixing Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp:172:28: error: member access into incomplete type 'AZ::BehaviorContext' Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit b0523867d9605aff67710f4ab6030f327cd5558f Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 10:23:56 2021 -0500 fix for error: unused variable 'targetInstanceRef' Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 387c42ac1a4268ff8b2701c0c914e384b355e629 Merge: d87b41997e 0fb821a44b Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 10:00:46 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' of https://github.com/aws-lumberyard-dev/o3de into Feature_LY-5384_ProceduralPrefabs commit d87b41997eec9a6b0d03c1040901904d68b873fb Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 18:03:38 2021 -0500 fixing non-unity build Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0fb821a44b788ab1cca61dce7c1fbdbedc2f37c0 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 15:43:50 2021 -0500 adding header for validation Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 30f5135f63286ce8f752df5787937f9543589cb5 Merge: 2d9e1b9f16 103dc6cfcf Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 11:20:15 2021 -0500 Merge branch 'development' into Feature_LY-5384_ProceduralPrefabs added a few headers as well # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 2d9e1b9f16f8861df92c58f0f83974859e615b1f Merge: 39ee7a8a80 af84e71638 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 14:22:39 2021 -0500 Merge pull request #244 from aws-lumberyard-dev/feature_lyn5880_procprefab_tooling_updates {lyn5880} adding Instantiate Procedural Prefab to the Editor commit af84e716384de048c8555fe5ccdc293e885896f9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 14:21:09 2021 -0500 updated based on feeback Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 9c83f6086203e14becb60af5ae937e8e609eb9ed Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 11:35:30 2021 -0500 small include tweak Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 11ac99a87097621796af79329bf9d9344155049e Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 10:08:53 2021 -0500 moved the seg reg key to the CPP file removed the Queue Load Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 39ee7a8a803a032652b122b73fba7007abbdbf88 Merge: 0fc7d5f361 8b4f5ded51 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 08:24:57 2021 -0500 Merge pull request #241 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_PythonExample Add example prefab script and FBX with 2 meshes to test it commit 941f6a00d1a6222f10acfcd55a2017be6352f723 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 16:07:47 2021 -0500 make sure the AZ::IO::SystemFile::Exists() before returning fullPath Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 8b4f5ded510d8c6ef47a2d2380fa49c7f6e1fd4e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 28 14:03:11 2021 -0500 Move sceneJobHandler reset out of exception block. Add more info to error messages Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0c82937fcd90d0c606c330f6d3e4cec8eca7edb3 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 13:04:37 2021 -0500 {lyn5880} adding Instantiate Procedural Prefab to the Editor Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0fc7d5f3610f95dcdd97614a282b9f4eabfc93dc Merge: ea90e321d7 8ca6acc67d Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 09:23:54 2021 -0500 Merge pull request #235 from aws-lumberyard-dev/feature_lyn5394_procprefab_asset {ly5395} adding asset loading logic for procedural prefabs commit 8ca6acc67dcbd375df9813acbf0062a8a5c7809a Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Mon Sep 27 13:52:21 2021 -0500 added AZ::Prefab::PrefabGroupAssetHandler::s_Extension optimized headers Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit e446aaa4e9951e474f832299f8149142dbf6e85f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 27 09:12:40 2021 -0500 Remove some whitespace Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ea90e321d737cd7bafbe617f9b5fbbeae3c4a7e9 Merge: f4c9fc50c3 5ae3c67cc7 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 27 09:04:58 2021 -0500 Merge pull request #238 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_PythonScript Fixes to support writing a python script to generate a prefab commit b69ebbae17826b59f3f4fb675c57be5582acf628 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 17:51:17 2021 -0500 Use raise_error instead of print Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 407b8d804841f0ba87a0c82405c9d1319435e2da Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 17:47:20 2021 -0500 Add scene_mesh_to_prefab.py example ProceduralPrefab script and multiple_mesh_one_material FBX which uses the script Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 5ae3c67cc70603ec70f53c03ee716982b55b759a Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:50:47 2021 -0500 Test entity cleanup Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 55da78dda5ef9bc558b65bf99d551ffebd38acef Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:50:28 2021 -0500 Make CastWithTypeName only return true if the object can be successfully cast Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 9f2e85bb691a86910d14477f94b9e631ee343e0b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:49:28 2021 -0500 Remove RemoveAllTemplates API from scripting API and use prefab system interface version instead Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 41d46d1f00a16243d3fffda32186fcd7964db78a Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 13:19:51 2021 -0500 Store watch folder in scene so source relative path can be calculated Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f4c9fc50c3ac4c3fc68e98d78b72c4f1f571b516 Merge: de2612b3b9 8bd3c0acdd Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 23 14:10:31 2021 -0500 Merge pull request #239 from aws-lumberyard-dev/fix_LY5384_script_processing_rule {ly5384} script processing rule behavior more stateless commit 8bd3c0acdd874d6421d25cc77c80da9906afefc2 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 22 15:19:30 2021 -0500 {ly5384} script processing rule beahvior more stateless Made the script processing rule beahvior more stateless so that the script name needs to be discovered each time. Disconnet from the bus after each scene script builder usage. Before it would be possible that the same script can be run more than once for each asset. Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 7afd9d4a9911adb1dc665361a09486e6852ba4f8 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 22 13:27:12 2021 -0500 Update scene_data.py to latest PrefabGroup format Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 74d1ba8853d62b75786d68a6bdeb1bfb2ca52346 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 22 13:26:27 2021 -0500 Fix GetNodeContent to return a GraphObjectProxy wrapping a nullptr instead of just returning a nullptr which causes issues for python Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ca4127353e139f9d853784ca6a74e5deeb82d6f9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 17:48:15 2021 -0500 AZ::JsonSerializationUtils update Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 30a76be51c37c1718e9b215f33b172a10bd74f08 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 17:21:52 2021 -0500 revert odd README.md merge issue added alias for PrefabBuilder.Tools Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 6c83d47d51898bcdc17c10578f0198bccd09c834 Merge: 46cb4c2a87 de2612b3b9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:52:58 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5394_procprefab_asset # Conflicts: # Gems/Prefab/PrefabBuilder/CMakeLists.txt Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 46cb4c2a8711f1adad22be24420922365707c409 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:43:19 2021 -0500 added ProceduralPrefabAssetTest to cover basics for ProceduralPrefabAsset Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit de2612b3b9a28ef130fc92d1c9d68c90790cf132 Merge: f03bbb236e 3117c54657 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:28:59 2021 -0500 Merge pull request #232 from aws-lumberyard-dev/fix_ly5384_ProceduralPrefabs_linux_compile {ly5384} Fixing Linux build issues. commit 3117c54657cb21ae2ef200dbfd1cd046c617089d Merge: 15fddd1795 f03bbb236e Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:28:48 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into fix_ly5384_ProceduralPrefabs_linux_compile commit f03bbb236eab3458fc433d35f9fb84dae88922d6 Merge: f297aa232a fccf900982 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 15:52:07 2021 -0500 Merge pull request #233 from aws-lumberyard-dev/fix_ly5384_ProceduralPrefabs_merge_fix fixing an API merge compile error commit fccf9009829b182254064ba17ab3b6e7d44919fa Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 15:50:58 2021 -0500 fixing an API merge compile error Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 762743b54744258007d8f124be95654ee6f18533 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:10:46 2021 -0500 Make sure EntityUtilityComponent is loaded in AssetBuilderApplication Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 8c4ab65598e3ebb3a0ae621feb22ef5b57e7de27 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:09:03 2021 -0500 Clean up entities and templates after python script is done Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 50a1f2a1a4f09cbd3e6256a210cd14a0fdb5b815 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 20 14:05:12 2021 -0500 ScriptProcessorRuleBehavior resets entity context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 51a6af053d95e90e582a25ae51c5730a7e2b0973 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:40:37 2021 -0500 Add add_prefab_group Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f297aa232a2cd9ad5583b3e2b4aa1ce793c07d92 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 11:53:25 2021 -0500 Fix merge compile issue Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit fc40f5e75efbb87382bf6227966f2f905ccf6d75 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 11:18:44 2021 -0500 {ly5395} adding asset loading logic for procedural prefabs * enabling the Prefab gem for tool work * enabling prefab gem for AutomatedTesting * AssetTypeInfoHandler for procedural prefab * EnableCatalogForAsset for procedural prefab * RegisterHandler for AssetManager Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 7a2250db337fbfc693e3cf57458eb56f419b32d6 Merge: c1f3e14304 751a0fab4f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:32:37 2021 -0500 Merge remote-tracking branch 'origin/Feature_LY-5384_ProceduralPrefabs' into origin_Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 12440233ccd987d41c248df57cee913ebb2ae2f6 Merge: 751a0fab4f f8d39e2671 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:25:50 2021 -0500 Merge remote-tracking branch 'origin' into feature_lyn5394_procprefab_asset commit c1f3e143048a914ab2d89146685ca5fe409dda27 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 20 14:03:53 2021 -0500 Fix merge issue Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 1990ec370df81d4b77b4646553c2b13dce18c638 Merge: 23d02ed416 fc8697edd5 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:21:10 2021 -0500 Merge branch 'development' into origin_Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp commit 751a0fab4f932ec3d7683e2d46a187eefc7addbf Merge: 23d02ed416 7b8d5629dd Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:10:06 2021 -0500 Merge pull request #229 from aws-lumberyard-dev/feature_lyn5394_procprefab_asset {lyn5394} adding ProceduralPrefabAsset to AZ Tools Framework commit 15fddd1795ff07e8d6ce8840a2d675713b63655c Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:04:06 2021 -0500 {ly5384} Fixing Linux build issues. * symbols "struct FindComponent" and "AZ::Component* FindComponent()" defined in the same scope, renamed function to FindComponentHelper * wrapped the AZ::ComponentId return for both cases Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 23d02ed4165a1db9e738057aad0b7613be8105da Merge: 0a31e39a25 0f3680a996 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 09:44:30 2021 -0500 Merge pull request #228 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_Misc Reflect Prefab/Entity constants and add failure unit tests commit 7b8d5629dd04ca1ed75c9828dbb0949f12eb2ca3 Merge: 78fe2cec6f 0a31e39a25 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 17:37:29 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5394_procprefab_asset commit 78fe2cec6fbcea9217d0b23ec056e19f144fc9a9 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 17:27:57 2021 -0500 Updated PrefabBuilder to point to new asset type for the procedural prefab Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 4da4e026582c8e7bf0fe9c7c7b39f15189c67b78 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:56:13 2021 -0500 {lyn5394} adding Prefab/Procedural/ProceduralPrefabAsset to AZ Tools Framework Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit c2fb7b9ccb4b7d4e8080b8830d4ceeb66cd3972c Merge: 30de326dfb a56daadc45 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:45:03 2021 -0500 Merge pull request #210 from aws-lumberyard-dev/feature_lyn5393_proc_prefab_behavior {LYN5393} Adding Prefab Group Behavior to output Procedural Prefab Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 0a31e39a25d36c63827424adc883e873aee20b71 Merge: 30de326dfb a56daadc45 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:45:03 2021 -0500 Merge pull request #210 from aws-lumberyard-dev/feature_lyn5393_proc_prefab_behavior {LYN5393} Adding Prefab Group Behavior to output Procedural Prefab commit 0f3680a9968cbbbcb9558811f8dbd287a97447ae Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 13:53:22 2021 -0500 Add failure tests and some test cleanup Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 834eab4c4bf151dfb9e49eb0a5e1f20486b6c05c Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 13:34:03 2021 -0500 Reflect InvalidTemplateId, fix reflection for InvalidComponentId Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 30de326dfbc28bbb9481bf282eb35c427469c847 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:55:16 2021 -0500 Fix merge issues Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 4bcf6b7b4f2d6285f244226b065bff65ba565094 Merge: 20c5cd7259 28fec42242 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:28:26 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs_EntityManagement' into Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 20c5cd7259235d26f1aa11e2d61ac6b8a57b8638 Merge: 050e26d609 6845942fa4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:24:44 2021 -0500 Merge pull request #200 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_CreatePrefab API Update: Wrap PrefabSystemComponentInterface behavior commit 6845942fa419b2b6d5a0103f8d30e6515948310e Merge: 58a51c738e 65da78dcc2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:07:33 2021 -0500 Merge pull request #208 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_SavePrefabToString API Update: AzToolsFramework::Prefab::PrefabLoaderInterface commit 65da78dcc22c4251696ebb75680928ecf83d6733 Merge: e0c5e060ab 58a51c738e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:07:06 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs_CreatePrefab' into Feature_LY-5384_ProceduralPrefabs_SavePrefabToString Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp # Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp commit 28fec422426640540bd21b2275c7b7a90e4f8e71 Merge: c1b8b5190f d825305202 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 09:58:36 2021 -0500 Merge pull request #212 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_ComponentManagement API Update: Editor Entity Component Functions commit d825305202d5a02d60dd20fb5d0cc0ecb73f562a Merge: c280964b98 88fa6983d1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 09:58:09 2021 -0500 Merge pull request #218 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_ComponentExplore API Update: Editor Component JSON Helper Functions commit a56daadc45e5ad8511aa5160c3afc245ca10fb83 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:48:41 2021 -0500 m_prefabGroupBehavior.release() -> m_prefabGroupBehavior.reset() adding error messages for the prefab processing fixed typo Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit c1a03351f55f9e8f5161c0ef0288c8e64050e399 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:32:42 2021 -0500 reduced the JSON for the testing framework to tree types only Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0008866baa7882ec106e134049e2bd7b95113796 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:25:00 2021 -0500 enable ProceduralPrefabAsset JsonRegistrationContext Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 58a51c738e1bbd5bcad27cf1c0add4760bb8cffa Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 14:31:59 2021 -0500 Remove unneeded include Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e0c5e060ab8a9cb2cfce4c083f276ab064aa08ea Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 14:20:04 2021 -0500 Cleanup whitespace Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 88fa6983d19ac3a0d7c4073ea390c36794d2603b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 13:49:20 2021 -0500 FindMatchingComponents now returns a vector of ComponentDetails which includes base class info (non-recursive) Fixed a memory leak Moved const to header Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit b57a9d4261aea85a8ddb1036307d8ad296cac859 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 10:49:32 2021 -0500 updated the DOM logic for the asset loading sake Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit f55ee9f5eabbeac998028f027e1c8adf55419a9d Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 13:23:13 2021 -0500 Update CreateStringPermissive to stop when enough data has been collected. Update unit tests. Fixed out of bounds behavior in EntityUtilityComponent usage of CreateStringPermissive. Updated AssetTreeFilterModel to cap the string length Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 6d6707dea8cd072261d65e0a508d1179df3892d4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 10:55:38 2021 -0500 Rename GetComponentJson to GetComponentDefaultJson. Clean up GetComponentTypeIdFromName Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f4380d37a40ada353f7156b0d06b7ab60b72a151 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 10:29:04 2021 -0500 Move scripting ebus and handler into separate files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 572cb58f854aa2368b18f8cf70154d471dfac047 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 20:27:41 2021 -0400 Renamed SearchComponents to FindMatchingComponents Added missing printf formatting Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 050e26d60931700e226a4d1a5d02d6a1d4c69915 Merge: 542bdfc5d7 c1b8b5190f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 09:31:08 2021 -0400 Merge pull request #201 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_EntityManagement API Update: Editor Entity Management - Add some comments and error handling commit 875d5dc466b65d893a44e11aa9467c45cf7994e9 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 09:13:43 2021 -0400 Move bus and handler code into separate files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit a2d94e24fb2cd1993835f17e7129000c00926cf7 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 17:25:35 2021 -0400 Add comments Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 16f507377f4f04c88028833f69327bd11b401b87 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 17:16:33 2021 -0400 Add error messages Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 2e6d7d40dc731989128fbe829141057b3558c88b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 16:54:20 2021 -0400 Cleanup code Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 963891eaeb8d616bb071f2a7b50cdabd994241a2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 10:48:40 2021 -0500 Add and update unit tests Reflect APIs to behavior context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 664be8eca54293407e5ce2d631375d907c1bb2f6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 2 13:00:02 2021 -0500 Add Search and Component json output APIs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e94fe64f366009d06b889954d292c37ea4f96fe2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 13:37:44 2021 -0400 Make bus handler private Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 345a1b0d5edef99d5a8ea2bce2f4f3478652a4f1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 12:30:13 2021 -0400 Address feedback Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit c280964b983635bed9e8bbfb94b2188403287d4c Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 10:12:49 2021 -0500 Address feedback Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 3b819ee827fc4c19312f2d2bc5788e2cc36de4f4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 16:06:10 2021 -0500 Update unit test to verify components on saved prefab Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0b63c0e316ec621ed17edf36109b7cd1d50ef606 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 12:52:46 2021 -0500 Expand test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ea59416626d9b43599cf8847585e599f8fa5fd22 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 17:32:14 2021 -0500 Add error handling Add component creation Add error testing Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 9d0f2ae33eadba0216bd245157b94692792b1a86 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:31:28 2021 -0500 enabling ProductDependencies test again Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 15d1e4730df31e71e7e3ee6d4914f19b233c1b7f Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:23:26 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5393_proc_prefab_behavior # Conflicts: # Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp # Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake # Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit ce2e4602bde26fbb34b43c73f820a97b9e229b5a Merge: 5ad0aac747 542bdfc5d7 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:14:07 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5393_proc_prefab_behavior # Conflicts: # Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp # Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake # Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 542bdfc5d762c07938f9a0f8e729070f1df9edfc Merge: 3e7564c944 4899f67986 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:09:10 2021 -0500 Merge pull request #207 from aws-lumberyard-dev/feature_lyn5392_proc_prefab_group {lyn5392} Adding PrefabGroup scene manifest rule commit 4899f67986992b7eeb5cc3b750493ed21ec7b4f3 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 16:33:24 2021 -0500 removing unneeded AZStd::move() calls Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 5ad0aac7472d24bb85990d36399a466288ecfdbc Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 16:17:52 2021 -0500 cleaned up the code finalized the unit tests fixed the code based on the tests... FTW! Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 24f289dd31292c4b9f5e5848ddc94efd986b4341 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 13:06:20 2021 -0500 Add FindComponentByTypeName and UpdateComponentForEntity APIs Add unit tests Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit c1b8b5190f973d2429731308f50c7c962d64301e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 14:02:17 2021 -0500 Fix bus connect that should have been a bus disconnect Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit fde870d6c92e131875ec6aadda2365203a538379 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 12:57:04 2021 -0500 Fix up includes Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 8ceddd0efc90d33bc34b5287176497356e57abf9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 08:43:23 2021 -0500 WIP Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 3cc9135d87efde24430dbf1cd112bcf9b95ecaa0 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Aug 31 14:44:37 2021 -0500 Rename files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f056b3d9578ae2f49dbc172a5929306047620be6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Aug 31 14:14:34 2021 -0500 Remove 'editor' from bus/component name Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0fb7a0788e879eb9dc241291f05f0acffc0b0156 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Aug 31 09:18:37 2021 -0500 {lyn5392} Adding PrefabGroup scene manifest rule * Adding PrefabGroup abstraction and concrete classes to fill out in a scene manifest * has reflections for serialization & behavior * testing the behavior using Lua * testing the serialization using JSON Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit b1756307bff9f86ae0ae1354bae8f470d19b4487 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 17:52:18 2021 -0500 Reflect SaveTemplateToString Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ddd2bb89041c5fb8b6add2cfc02c454baab9a7d6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 12:46:17 2021 -0500 Add warning/error messages, update module Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e839c1cbcc340859fc6ee5cff2d802660944194b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 11:17:25 2021 -0500 Add some comments and error handling Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 347f787cc88405541889e842151de81a70598dd1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 17:16:45 2021 -0500 Fix line endings Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit be26ab1cb16221ba879c10652b430ea31547d868 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 15:28:00 2021 -0500 Add CreatePrefabTemplate Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 3e7564c944497b7b6cce94dbce486ed8c4561f33 Merge: 5a3c289fac 07841ee749 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 10:20:20 2021 -0500 Merge pull request #199 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_EntityManagement Add editor entity creation and unit test commit 07841ee749d2a1bc22352cbec3076ac087348676 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 16:44:57 2021 -0500 Fix line endings Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 35bc3b89cd1fcc126114ea7d61cdd21e88699080 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 15:03:35 2021 -0500 Setup CreateEditorReadyEntity to use a custom entity context Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 82519b15510a4ec1b2daf4d883a2c4c3d9c0a347 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 09:29:20 2021 -0500 Add EditorEntityUtilityComponent for managing entities from the behavior context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f8d39e267162db5fb2091982a7e54bc57ed108bb Merge: 43603cad5e 575faa4443 Author: Chris Galvan Date: Wed Aug 11 15:29:33 2021 -0500 Merge pull request #3049 from aws-lumberyard-dev/cgalvan/gitflow_210811 Merged stabilization/2106 to main commit 575faa4443823ed239d609692847fbd781beebcb Merge: 43603cad5e 4b817a6483 Author: Chris Galvan Date: Wed Aug 11 14:13:27 2021 -0500 Merge remote-tracking branch 'upstream/stabilization/2106' into cgalvan/gitflow_210811 Signed-off-by: Chris Galvan commit 43603cad5e715aadef47b76e24867dd41347d163 Merge: d9cce28a53 bb52475ce8 Author: Terry Michaels Date: Mon Jul 19 14:55:51 2021 -0500 Merge pull request #2271 from aws-lumberyard-dev/Foundation/miterenc/ContributingUpdate Updating CONTRIBUTING.md commit bb52475ce8c37c29b35c81b379befe5a75db1de7 Author: Terry Michaels Date: Mon Jul 19 14:55:14 2021 -0500 Updated text to be more descriptive Signed-off-by: Terry Michaels commit 697dfad486c69beb5ef40cbf6478d6ccd8753cd7 Author: Terry Michaels Date: Mon Jul 19 14:27:24 2021 -0500 Fixed typo Signed-off-by: Terry Michaels commit 650e1ab44d86664b6deab7f6cebeda40c3e1361e Author: Terry Michaels Date: Mon Jul 19 14:19:46 2021 -0500 Updating CONTRIBUTING.md Signed-off-by: Terry Michaels commit d9cce28a5387c7f5b59041869086547905f1e345 Merge: e7f787572e 486ba58628 Author: Chris Galvan Date: Mon Jul 12 14:06:57 2021 -0500 Merge pull request #2096 from aws-lumberyard-dev/cgalvan/gitflow_210712_main Merged stabilization/2106 to main commit 486ba58628488c211a6140f26caa421c38be3f0f Merge: e7f787572e 7cfde884d9 Author: Chris Galvan Date: Mon Jul 12 11:12:41 2021 -0500 Merged stabilization/2106 to development; Resolved merge conflicts Signed-off-by: Chris Galvan commit e7f787572e805c413115265e5873fb2425e2f41b Author: Nicholas Lawson <70027408+lawsonamzn@users.noreply.github.com> Date: Tue Jul 6 08:03:35 2021 -0700 Updates licenses to APACHE-2.0 OR MIT (#1685) Not to be committed before 7/6/2021 Signed-off-by: lawsonamzn <70027408+lawsonamzn@users.noreply.github.com> commit 837e1c737059a819d01ef4ebed7fadae42248dd8 Merge: d30de01752 efcbe2c4a1 Author: Chris Galvan Date: Fri Jul 2 12:11:27 2021 -0500 Merge pull request #1764 from aws-lumberyard-dev/cgalvan/gitflow_210702 Merged stabilization/2106 to main commit efcbe2c4a1e909182dfbd5394f9322513ba91115 Merge: d30de01752 0c43493e29 Author: Chris Galvan Date: Fri Jul 2 10:20:42 2021 -0500 Merge remote-tracking branch 'upstream/stabilization/2106' into cgalvan/gitflow_210702 Signed-off-by: Chris Galvan commit d30de01752b7eaed1f16e2163b1a75c915f061eb Author: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Mon Jun 28 11:20:36 2021 -0700 Updating LFS config to new endpoint (#1624) Signed-off-by: AMZN-alexpete Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> * fix for "warning C4100: 'outputValueTypeId': unreferenced formal" Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * Material Editor: Added alternate skybox toggle to the toolbar Signed-off-by: Guthrie Adams Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * Squashed commit of the following: commit 964a45ead662f502ff0d63ae3528a9aa18a760f4 Merge: 8d4c1dee78 799ab8585b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Oct 1 16:16:47 2021 -0500 Merge branch 'development' into Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h commit 8d4c1dee782a1b82ded14d11f7fe879c865980a7 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 15:49:22 2021 -0500 fixing non-unity build Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit e83431b3be58f36a875b5187c03cd67368d91726 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 12:42:38 2021 -0500 fixing Gems/Multiplayer/Code/Source/Components/NetworkCharacterComponent.cpp:172:28: error: member access into incomplete type 'AZ::BehaviorContext' Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit b0523867d9605aff67710f4ab6030f327cd5558f Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 10:23:56 2021 -0500 fix for error: unused variable 'targetInstanceRef' Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 387c42ac1a4268ff8b2701c0c914e384b355e629 Merge: d87b41997e 0fb821a44b Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Fri Oct 1 10:00:46 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' of https://github.com/aws-lumberyard-dev/o3de into Feature_LY-5384_ProceduralPrefabs commit d87b41997eec9a6b0d03c1040901904d68b873fb Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 18:03:38 2021 -0500 fixing non-unity build Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0fb821a44b788ab1cca61dce7c1fbdbedc2f37c0 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 15:43:50 2021 -0500 adding header for validation Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 30f5135f63286ce8f752df5787937f9543589cb5 Merge: 2d9e1b9f16 103dc6cfcf Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 30 11:20:15 2021 -0500 Merge branch 'development' into Feature_LY-5384_ProceduralPrefabs added a few headers as well # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 2d9e1b9f16f8861df92c58f0f83974859e615b1f Merge: 39ee7a8a80 af84e71638 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 14:22:39 2021 -0500 Merge pull request #244 from aws-lumberyard-dev/feature_lyn5880_procprefab_tooling_updates {lyn5880} adding Instantiate Procedural Prefab to the Editor commit af84e716384de048c8555fe5ccdc293e885896f9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 14:21:09 2021 -0500 updated based on feeback Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 9c83f6086203e14becb60af5ae937e8e609eb9ed Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 11:35:30 2021 -0500 small include tweak Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 11ac99a87097621796af79329bf9d9344155049e Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 29 10:08:53 2021 -0500 moved the seg reg key to the CPP file removed the Queue Load Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 39ee7a8a803a032652b122b73fba7007abbdbf88 Merge: 0fc7d5f361 8b4f5ded51 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 08:24:57 2021 -0500 Merge pull request #241 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_PythonExample Add example prefab script and FBX with 2 meshes to test it commit 941f6a00d1a6222f10acfcd55a2017be6352f723 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 16:07:47 2021 -0500 make sure the AZ::IO::SystemFile::Exists() before returning fullPath Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 8b4f5ded510d8c6ef47a2d2380fa49c7f6e1fd4e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 28 14:03:11 2021 -0500 Move sceneJobHandler reset out of exception block. Add more info to error messages Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0c82937fcd90d0c606c330f6d3e4cec8eca7edb3 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 13:04:37 2021 -0500 {lyn5880} adding Instantiate Procedural Prefab to the Editor Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0fc7d5f3610f95dcdd97614a282b9f4eabfc93dc Merge: ea90e321d7 8ca6acc67d Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 28 09:23:54 2021 -0500 Merge pull request #235 from aws-lumberyard-dev/feature_lyn5394_procprefab_asset {ly5395} adding asset loading logic for procedural prefabs commit 8ca6acc67dcbd375df9813acbf0062a8a5c7809a Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Mon Sep 27 13:52:21 2021 -0500 added AZ::Prefab::PrefabGroupAssetHandler::s_Extension optimized headers Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit e446aaa4e9951e474f832299f8149142dbf6e85f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 27 09:12:40 2021 -0500 Remove some whitespace Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ea90e321d737cd7bafbe617f9b5fbbeae3c4a7e9 Merge: f4c9fc50c3 5ae3c67cc7 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 27 09:04:58 2021 -0500 Merge pull request #238 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_PythonScript Fixes to support writing a python script to generate a prefab commit b69ebbae17826b59f3f4fb675c57be5582acf628 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 17:51:17 2021 -0500 Use raise_error instead of print Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 407b8d804841f0ba87a0c82405c9d1319435e2da Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 17:47:20 2021 -0500 Add scene_mesh_to_prefab.py example ProceduralPrefab script and multiple_mesh_one_material FBX which uses the script Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 5ae3c67cc70603ec70f53c03ee716982b55b759a Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:50:47 2021 -0500 Test entity cleanup Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 55da78dda5ef9bc558b65bf99d551ffebd38acef Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:50:28 2021 -0500 Make CastWithTypeName only return true if the object can be successfully cast Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 9f2e85bb691a86910d14477f94b9e631ee343e0b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 14:49:28 2021 -0500 Remove RemoveAllTemplates API from scripting API and use prefab system interface version instead Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 41d46d1f00a16243d3fffda32186fcd7964db78a Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 24 13:19:51 2021 -0500 Store watch folder in scene so source relative path can be calculated Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f4c9fc50c3ac4c3fc68e98d78b72c4f1f571b516 Merge: de2612b3b9 8bd3c0acdd Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 23 14:10:31 2021 -0500 Merge pull request #239 from aws-lumberyard-dev/fix_LY5384_script_processing_rule {ly5384} script processing rule behavior more stateless commit 8bd3c0acdd874d6421d25cc77c80da9906afefc2 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 22 15:19:30 2021 -0500 {ly5384} script processing rule beahvior more stateless Made the script processing rule beahvior more stateless so that the script name needs to be discovered each time. Disconnet from the bus after each scene script builder usage. Before it would be possible that the same script can be run more than once for each asset. Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 7afd9d4a9911adb1dc665361a09486e6852ba4f8 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 22 13:27:12 2021 -0500 Update scene_data.py to latest PrefabGroup format Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 74d1ba8853d62b75786d68a6bdeb1bfb2ca52346 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 22 13:26:27 2021 -0500 Fix GetNodeContent to return a GraphObjectProxy wrapping a nullptr instead of just returning a nullptr which causes issues for python Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ca4127353e139f9d853784ca6a74e5deeb82d6f9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 17:48:15 2021 -0500 AZ::JsonSerializationUtils update Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 30a76be51c37c1718e9b215f33b172a10bd74f08 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 17:21:52 2021 -0500 revert odd README.md merge issue added alias for PrefabBuilder.Tools Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 6c83d47d51898bcdc17c10578f0198bccd09c834 Merge: 46cb4c2a87 de2612b3b9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:52:58 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5394_procprefab_asset # Conflicts: # Gems/Prefab/PrefabBuilder/CMakeLists.txt Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 46cb4c2a8711f1adad22be24420922365707c409 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:43:19 2021 -0500 added ProceduralPrefabAssetTest to cover basics for ProceduralPrefabAsset Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit de2612b3b9a28ef130fc92d1c9d68c90790cf132 Merge: f03bbb236e 3117c54657 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:28:59 2021 -0500 Merge pull request #232 from aws-lumberyard-dev/fix_ly5384_ProceduralPrefabs_linux_compile {ly5384} Fixing Linux build issues. commit 3117c54657cb21ae2ef200dbfd1cd046c617089d Merge: 15fddd1795 f03bbb236e Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 16:28:48 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into fix_ly5384_ProceduralPrefabs_linux_compile commit f03bbb236eab3458fc433d35f9fb84dae88922d6 Merge: f297aa232a fccf900982 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 15:52:07 2021 -0500 Merge pull request #233 from aws-lumberyard-dev/fix_ly5384_ProceduralPrefabs_merge_fix fixing an API merge compile error commit fccf9009829b182254064ba17ab3b6e7d44919fa Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 15:50:58 2021 -0500 fixing an API merge compile error Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 762743b54744258007d8f124be95654ee6f18533 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:10:46 2021 -0500 Make sure EntityUtilityComponent is loaded in AssetBuilderApplication Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 8c4ab65598e3ebb3a0ae621feb22ef5b57e7de27 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:09:03 2021 -0500 Clean up entities and templates after python script is done Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 50a1f2a1a4f09cbd3e6256a210cd14a0fdb5b815 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 20 14:05:12 2021 -0500 ScriptProcessorRuleBehavior resets entity context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 51a6af053d95e90e582a25ae51c5730a7e2b0973 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:40:37 2021 -0500 Add add_prefab_group Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f297aa232a2cd9ad5583b3e2b4aa1ce793c07d92 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 11:53:25 2021 -0500 Fix merge compile issue Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit fc40f5e75efbb87382bf6227966f2f905ccf6d75 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 11:18:44 2021 -0500 {ly5395} adding asset loading logic for procedural prefabs * enabling the Prefab gem for tool work * enabling prefab gem for AutomatedTesting * AssetTypeInfoHandler for procedural prefab * EnableCatalogForAsset for procedural prefab * RegisterHandler for AssetManager Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 7a2250db337fbfc693e3cf57458eb56f419b32d6 Merge: c1f3e14304 751a0fab4f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:32:37 2021 -0500 Merge remote-tracking branch 'origin/Feature_LY-5384_ProceduralPrefabs' into origin_Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 12440233ccd987d41c248df57cee913ebb2ae2f6 Merge: 751a0fab4f f8d39e2671 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:25:50 2021 -0500 Merge remote-tracking branch 'origin' into feature_lyn5394_procprefab_asset commit c1f3e143048a914ab2d89146685ca5fe409dda27 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Sep 20 14:03:53 2021 -0500 Fix merge issue Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 1990ec370df81d4b77b4646553c2b13dce18c638 Merge: 23d02ed416 fc8697edd5 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 10:21:10 2021 -0500 Merge branch 'development' into origin_Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp commit 751a0fab4f932ec3d7683e2d46a187eefc7addbf Merge: 23d02ed416 7b8d5629dd Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:10:06 2021 -0500 Merge pull request #229 from aws-lumberyard-dev/feature_lyn5394_procprefab_asset {lyn5394} adding ProceduralPrefabAsset to AZ Tools Framework commit 15fddd1795ff07e8d6ce8840a2d675713b63655c Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Sep 21 10:04:06 2021 -0500 {ly5384} Fixing Linux build issues. * symbols "struct FindComponent" and "AZ::Component* FindComponent()" defined in the same scope, renamed function to FindComponentHelper * wrapped the AZ::ComponentId return for both cases Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 23d02ed4165a1db9e738057aad0b7613be8105da Merge: 0a31e39a25 0f3680a996 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 21 09:44:30 2021 -0500 Merge pull request #228 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_Misc Reflect Prefab/Entity constants and add failure unit tests commit 7b8d5629dd04ca1ed75c9828dbb0949f12eb2ca3 Merge: 78fe2cec6f 0a31e39a25 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 17:37:29 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5394_procprefab_asset commit 78fe2cec6fbcea9217d0b23ec056e19f144fc9a9 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 17:27:57 2021 -0500 Updated PrefabBuilder to point to new asset type for the procedural prefab Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 4da4e026582c8e7bf0fe9c7c7b39f15189c67b78 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:56:13 2021 -0500 {lyn5394} adding Prefab/Procedural/ProceduralPrefabAsset to AZ Tools Framework Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit c2fb7b9ccb4b7d4e8080b8830d4ceeb66cd3972c Merge: 30de326dfb a56daadc45 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:45:03 2021 -0500 Merge pull request #210 from aws-lumberyard-dev/feature_lyn5393_proc_prefab_behavior {LYN5393} Adding Prefab Group Behavior to output Procedural Prefab Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 0a31e39a25d36c63827424adc883e873aee20b71 Merge: 30de326dfb a56daadc45 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Thu Sep 16 16:45:03 2021 -0500 Merge pull request #210 from aws-lumberyard-dev/feature_lyn5393_proc_prefab_behavior {LYN5393} Adding Prefab Group Behavior to output Procedural Prefab commit 0f3680a9968cbbbcb9558811f8dbd287a97447ae Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 13:53:22 2021 -0500 Add failure tests and some test cleanup Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 834eab4c4bf151dfb9e49eb0a5e1f20486b6c05c Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 13:34:03 2021 -0500 Reflect InvalidTemplateId, fix reflection for InvalidComponentId Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 30de326dfbc28bbb9481bf282eb35c427469c847 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:55:16 2021 -0500 Fix merge issues Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 4bcf6b7b4f2d6285f244226b065bff65ba565094 Merge: 20c5cd7259 28fec42242 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:28:26 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs_EntityManagement' into Feature_LY-5384_ProceduralPrefabs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 20c5cd7259235d26f1aa11e2d61ac6b8a57b8638 Merge: 050e26d609 6845942fa4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:24:44 2021 -0500 Merge pull request #200 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_CreatePrefab API Update: Wrap PrefabSystemComponentInterface behavior commit 6845942fa419b2b6d5a0103f8d30e6515948310e Merge: 58a51c738e 65da78dcc2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:07:33 2021 -0500 Merge pull request #208 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_SavePrefabToString API Update: AzToolsFramework::Prefab::PrefabLoaderInterface commit 65da78dcc22c4251696ebb75680928ecf83d6733 Merge: e0c5e060ab 58a51c738e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 10:07:06 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs_CreatePrefab' into Feature_LY-5384_ProceduralPrefabs_SavePrefabToString Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp # Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp commit 28fec422426640540bd21b2275c7b7a90e4f8e71 Merge: c1b8b5190f d825305202 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 09:58:36 2021 -0500 Merge pull request #212 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_ComponentManagement API Update: Editor Entity Component Functions commit d825305202d5a02d60dd20fb5d0cc0ecb73f562a Merge: c280964b98 88fa6983d1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 16 09:58:09 2021 -0500 Merge pull request #218 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_ComponentExplore API Update: Editor Component JSON Helper Functions commit a56daadc45e5ad8511aa5160c3afc245ca10fb83 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:48:41 2021 -0500 m_prefabGroupBehavior.release() -> m_prefabGroupBehavior.reset() adding error messages for the prefab processing fixed typo Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit c1a03351f55f9e8f5161c0ef0288c8e64050e399 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:32:42 2021 -0500 reduced the JSON for the testing framework to tree types only Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 0008866baa7882ec106e134049e2bd7b95113796 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 16:25:00 2021 -0500 enable ProceduralPrefabAsset JsonRegistrationContext Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 58a51c738e1bbd5bcad27cf1c0add4760bb8cffa Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 14:31:59 2021 -0500 Remove unneeded include Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e0c5e060ab8a9cb2cfce4c083f276ab064aa08ea Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 14:20:04 2021 -0500 Cleanup whitespace Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 88fa6983d19ac3a0d7c4073ea390c36794d2603b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 15 13:49:20 2021 -0500 FindMatchingComponents now returns a vector of ComponentDetails which includes base class info (non-recursive) Fixed a memory leak Moved const to header Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit b57a9d4261aea85a8ddb1036307d8ad296cac859 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 15 10:49:32 2021 -0500 updated the DOM logic for the asset loading sake Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit f55ee9f5eabbeac998028f027e1c8adf55419a9d Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 13:23:13 2021 -0500 Update CreateStringPermissive to stop when enough data has been collected. Update unit tests. Fixed out of bounds behavior in EntityUtilityComponent usage of CreateStringPermissive. Updated AssetTreeFilterModel to cap the string length Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 6d6707dea8cd072261d65e0a508d1179df3892d4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 10:55:38 2021 -0500 Rename GetComponentJson to GetComponentDefaultJson. Clean up GetComponentTypeIdFromName Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f4380d37a40ada353f7156b0d06b7ab60b72a151 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Sep 14 10:29:04 2021 -0500 Move scripting ebus and handler into separate files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 572cb58f854aa2368b18f8cf70154d471dfac047 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 20:27:41 2021 -0400 Renamed SearchComponents to FindMatchingComponents Added missing printf formatting Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 050e26d60931700e226a4d1a5d02d6a1d4c69915 Merge: 542bdfc5d7 c1b8b5190f Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 09:31:08 2021 -0400 Merge pull request #201 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_EntityManagement API Update: Editor Entity Management - Add some comments and error handling commit 875d5dc466b65d893a44e11aa9467c45cf7994e9 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 10 09:13:43 2021 -0400 Move bus and handler code into separate files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit a2d94e24fb2cd1993835f17e7129000c00926cf7 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 17:25:35 2021 -0400 Add comments Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 16f507377f4f04c88028833f69327bd11b401b87 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 17:16:33 2021 -0400 Add error messages Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 2e6d7d40dc731989128fbe829141057b3558c88b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 16:54:20 2021 -0400 Cleanup code Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 963891eaeb8d616bb071f2a7b50cdabd994241a2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 10:48:40 2021 -0500 Add and update unit tests Reflect APIs to behavior context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 664be8eca54293407e5ce2d631375d907c1bb2f6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 2 13:00:02 2021 -0500 Add Search and Component json output APIs Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e94fe64f366009d06b889954d292c37ea4f96fe2 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 13:37:44 2021 -0400 Make bus handler private Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 345a1b0d5edef99d5a8ea2bce2f4f3478652a4f1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 12:30:13 2021 -0400 Address feedback Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit c280964b983635bed9e8bbfb94b2188403287d4c Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 9 10:12:49 2021 -0500 Address feedback Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 3b819ee827fc4c19312f2d2bc5788e2cc36de4f4 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 16:06:10 2021 -0500 Update unit test to verify components on saved prefab Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0b63c0e316ec621ed17edf36109b7cd1d50ef606 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Sep 3 12:52:46 2021 -0500 Expand test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ea59416626d9b43599cf8847585e599f8fa5fd22 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 17:32:14 2021 -0500 Add error handling Add component creation Add error testing Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 9d0f2ae33eadba0216bd245157b94692792b1a86 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:31:28 2021 -0500 enabling ProductDependencies test again Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 15d1e4730df31e71e7e3ee6d4914f19b233c1b7f Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:23:26 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5393_proc_prefab_behavior # Conflicts: # Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp # Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake # Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit ce2e4602bde26fbb34b43c73f820a97b9e229b5a Merge: 5ad0aac747 542bdfc5d7 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:14:07 2021 -0500 Merge branch 'Feature_LY-5384_ProceduralPrefabs' into feature_lyn5393_proc_prefab_behavior # Conflicts: # Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp # Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake # Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 542bdfc5d762c07938f9a0f8e729070f1df9edfc Merge: 3e7564c944 4899f67986 Author: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 17:09:10 2021 -0500 Merge pull request #207 from aws-lumberyard-dev/feature_lyn5392_proc_prefab_group {lyn5392} Adding PrefabGroup scene manifest rule commit 4899f67986992b7eeb5cc3b750493ed21ec7b4f3 Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 16:33:24 2021 -0500 removing unneeded AZStd::move() calls Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 5ad0aac7472d24bb85990d36399a466288ecfdbc Author: Jackson <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 16:17:52 2021 -0500 cleaned up the code finalized the unit tests fixed the code based on the tests... FTW! Signed-off-by: Jackson <23512001+jackalbe@users.noreply.github.com> commit 24f289dd31292c4b9f5e5848ddc94efd986b4341 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 13:06:20 2021 -0500 Add FindComponentByTypeName and UpdateComponentForEntity APIs Add unit tests Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit c1b8b5190f973d2429731308f50c7c962d64301e Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 14:02:17 2021 -0500 Fix bus connect that should have been a bus disconnect Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit fde870d6c92e131875ec6aadda2365203a538379 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 1 12:57:04 2021 -0500 Fix up includes Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 8ceddd0efc90d33bc34b5287176497356e57abf9 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Wed Sep 1 08:43:23 2021 -0500 WIP Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit 3cc9135d87efde24430dbf1cd112bcf9b95ecaa0 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Aug 31 14:44:37 2021 -0500 Rename files Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f056b3d9578ae2f49dbc172a5929306047620be6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Tue Aug 31 14:14:34 2021 -0500 Remove 'editor' from bus/component name Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 0fb7a0788e879eb9dc241291f05f0acffc0b0156 Author: jackalbe <23512001+jackalbe@users.noreply.github.com> Date: Tue Aug 31 09:18:37 2021 -0500 {lyn5392} Adding PrefabGroup scene manifest rule * Adding PrefabGroup abstraction and concrete classes to fill out in a scene manifest * has reflections for serialization & behavior * testing the behavior using Lua * testing the serialization using JSON Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> commit b1756307bff9f86ae0ae1354bae8f470d19b4487 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 17:52:18 2021 -0500 Reflect SaveTemplateToString Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ddd2bb89041c5fb8b6add2cfc02c454baab9a7d6 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 12:46:17 2021 -0500 Add warning/error messages, update module Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit e839c1cbcc340859fc6ee5cff2d802660944194b Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 11:17:25 2021 -0500 Add some comments and error handling Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 347f787cc88405541889e842151de81a70598dd1 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 17:16:45 2021 -0500 Fix line endings Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit be26ab1cb16221ba879c10652b430ea31547d868 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 15:28:00 2021 -0500 Add CreatePrefabTemplate Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 3e7564c944497b7b6cce94dbce486ed8c4561f33 Merge: 5a3c289fac 07841ee749 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Aug 30 10:20:20 2021 -0500 Merge pull request #199 from aws-lumberyard-dev/Feature_LY-5384_ProceduralPrefabs_EntityManagement Add editor entity creation and unit test commit 07841ee749d2a1bc22352cbec3076ac087348676 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 16:44:57 2021 -0500 Fix line endings Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 35bc3b89cd1fcc126114ea7d61cdd21e88699080 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 15:03:35 2021 -0500 Setup CreateEditorReadyEntity to use a custom entity context Add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 82519b15510a4ec1b2daf4d883a2c4c3d9c0a347 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Aug 27 09:29:20 2021 -0500 Add EditorEntityUtilityComponent for managing entities from the behavior context Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit f8d39e267162db5fb2091982a7e54bc57ed108bb Merge: 43603cad5e 575faa4443 Author: Chris Galvan Date: Wed Aug 11 15:29:33 2021 -0500 Merge pull request #3049 from aws-lumberyard-dev/cgalvan/gitflow_210811 Merged stabilization/2106 to main commit 575faa4443823ed239d609692847fbd781beebcb Merge: 43603cad5e 4b817a6483 Author: Chris Galvan Date: Wed Aug 11 14:13:27 2021 -0500 Merge remote-tracking branch 'upstream/stabilization/2106' into cgalvan/gitflow_210811 Signed-off-by: Chris Galvan commit 43603cad5e715aadef47b76e24867dd41347d163 Merge: d9cce28a53 bb52475ce8 Author: Terry Michaels Date: Mon Jul 19 14:55:51 2021 -0500 Merge pull request #2271 from aws-lumberyard-dev/Foundation/miterenc/ContributingUpdate Updating CONTRIBUTING.md commit bb52475ce8c37c29b35c81b379befe5a75db1de7 Author: Terry Michaels Date: Mon Jul 19 14:55:14 2021 -0500 Updated text to be more descriptive Signed-off-by: Terry Michaels commit 697dfad486c69beb5ef40cbf6478d6ccd8753cd7 Author: Terry Michaels Date: Mon Jul 19 14:27:24 2021 -0500 Fixed typo Signed-off-by: Terry Michaels commit 650e1ab44d86664b6deab7f6cebeda40c3e1361e Author: Terry Michaels Date: Mon Jul 19 14:19:46 2021 -0500 Updating CONTRIBUTING.md Signed-off-by: Terry Michaels commit d9cce28a5387c7f5b59041869086547905f1e345 Merge: e7f787572e 486ba58628 Author: Chris Galvan Date: Mon Jul 12 14:06:57 2021 -0500 Merge pull request #2096 from aws-lumberyard-dev/cgalvan/gitflow_210712_main Merged stabilization/2106 to main commit 486ba58628488c211a6140f26caa421c38be3f0f Merge: e7f787572e 7cfde884d9 Author: Chris Galvan Date: Mon Jul 12 11:12:41 2021 -0500 Merged stabilization/2106 to development; Resolved merge conflicts Signed-off-by: Chris Galvan commit e7f787572e805c413115265e5873fb2425e2f41b Author: Nicholas Lawson <70027408+lawsonamzn@users.noreply.github.com> Date: Tue Jul 6 08:03:35 2021 -0700 Updates licenses to APACHE-2.0 OR MIT (#1685) Not to be committed before 7/6/2021 Signed-off-by: lawsonamzn <70027408+lawsonamzn@users.noreply.github.com> commit 837e1c737059a819d01ef4ebed7fadae42248dd8 Merge: d30de01752 efcbe2c4a1 Author: Chris Galvan Date: Fri Jul 2 12:11:27 2021 -0500 Merge pull request #1764 from aws-lumberyard-dev/cgalvan/gitflow_210702 Merged stabilization/2106 to main commit efcbe2c4a1e909182dfbd5394f9322513ba91115 Merge: d30de01752 0c43493e29 Author: Chris Galvan Date: Fri Jul 2 10:20:42 2021 -0500 Merge remote-tracking branch 'upstream/stabilization/2106' into cgalvan/gitflow_210702 Signed-off-by: Chris Galvan commit d30de01752b7eaed1f16e2163b1a75c915f061eb Author: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Mon Jun 28 11:20:36 2021 -0700 Updating LFS config to new endpoint (#1624) Signed-off-by: AMZN-alexpete Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * fix for "warning C4100: 'outputValueTypeId': unreferenced formal" Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * Squashed commit of the following: commit dbd3526517bcb6553402cbc0af1f02e1f68e0707 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Mon Oct 4 14:30:56 2021 -0500 Increased scene manifest max size to size_t::max to match default json size limit Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit ea4a9ffd23feb3beeadc9bf6ca765c96980e9e6d Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Oct 1 19:15:25 2021 -0500 Switch to querying cache location from Settings Registry Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 1c197996132625b8e26856fc92a30f9862d9dfdb Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Fri Oct 1 14:42:32 2021 -0500 Update to look in cache for generated manifest instead of source folder Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit cf3c32791fd71dc48066f9783c8859d386370b95 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Thu Sep 30 11:09:40 2021 -0500 Added generated manifest to dependency tracking. Updated unit tests Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 56cb0d27982e61c2cf123b765def8b5c9e21b021 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 15:51:52 2021 -0500 Moved manifest size const to header and used that in scene builder Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 7c8016a0ba6000090b29371f253b7906c9f3d141 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 15:21:06 2021 -0500 Add doc comment Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit 45fd5473f5ed6fe4fe93f8d629857852bcbe5e03 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 15:11:36 2021 -0500 Clean up code and add unit test Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> commit d0e610cad380e2278bc18552a4d1c71c64a5d339 Author: amzn-mike <80125227+amzn-mike@users.noreply.github.com> Date: Wed Sep 29 13:21:58 2021 -0500 Source dependency reporting WIP Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> # Conflicts: # Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp (cherry picked from commit d6464dcee20ea4e6f2d40f0d3301f24be5f4dee6) Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> * Add comment on unit test globals, fix indentation Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> * Cleaned up scene_mesh_to_prefab.py Added comments Removed raise_error function Made mesh_group_name cleanup more comprehensive Signed-off-by: amzn-mike <80125227+amzn-mike@users.noreply.github.com> * fix for "warning C4100: 'message': unreferenced formal" Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> Co-authored-by: jackalbe <23512001+jackalbe@users.noreply.github.com> Co-authored-by: Guthrie Adams --- .../Editor/Scripts/scene_mesh_to_prefab.py | 162 ++++++++ AutomatedTesting/Gem/Code/enabled_gems.cmake | 3 +- .../FBXTestTexture.png | 3 + .../multiple_mesh_one_material.fbx | 3 + .../multiple_mesh_one_material.fbx.assetinfo | 8 + Code/Framework/AzCore/AzCore/Math/Uuid.cpp | 12 +- Code/Framework/AzCore/AzCore/Math/Uuid.h | 3 +- Code/Framework/AzCore/Tests/UUIDTests.cpp | 23 ++ .../AzFramework/Entity/BehaviorEntity.cpp | 2 + .../Application/ToolsApplication.cpp | 4 +- .../AzToolsFrameworkModule.cpp | 2 + .../Entity/EntityUtilityComponent.cpp | 351 ++++++++++++++++++ .../Entity/EntityUtilityComponent.h | 90 +++++ .../FocusMode/FocusModeInterface.h | 1 + .../AzToolsFramework/Prefab/PrefabLoader.cpp | 44 ++- .../AzToolsFramework/Prefab/PrefabLoader.h | 3 + .../Prefab/PrefabLoaderInterface.h | 1 - .../Prefab/PrefabLoaderScriptingBus.h | 45 +++ .../Prefab/PrefabSystemComponent.cpp | 20 +- .../Prefab/PrefabSystemComponent.h | 7 +- .../Prefab/PrefabSystemComponentInterface.h | 3 +- .../Prefab/PrefabSystemScriptingBus.h | 38 ++ .../Prefab/PrefabSystemScriptingHandler.cpp | 75 ++++ .../Prefab/PrefabSystemScriptingHandler.h | 39 ++ .../Procedural/ProceduralPrefabAsset.cpp | 144 +++++++ .../Prefab/Procedural/ProceduralPrefabAsset.h | 90 +++++ .../Prefab/ScriptingPrefabLoader.cpp | 37 ++ .../Prefab/ScriptingPrefabLoader.h | 42 +++ .../UI/Prefab/PrefabIntegrationManager.cpp | 73 ++++ .../UI/Prefab/PrefabIntegrationManager.h | 2 + .../aztoolsframework_files.cmake | 10 + .../Entity/EntityUtilityComponentTests.cpp | 252 +++++++++++++ .../Tests/Prefab/PrefabScriptingTests.cpp | 173 +++++++++ .../Prefab/ProceduralPrefabAssetTests.cpp | 135 +++++++ .../Tests/aztoolsframeworktests_files.cmake | 3 + .../AssetBuilder/AssetBuilderApplication.cpp | 2 + .../native/ui/AssetTreeFilterModel.cpp | 5 +- .../SceneCore/Containers/GraphObjectProxy.cpp | 2 +- .../SceneAPI/SceneCore/Containers/Scene.cpp | 11 + .../SceneAPI/SceneCore/Containers/Scene.h | 4 + .../SceneCore/Containers/SceneGraph.cpp | 2 +- .../SceneCore/Containers/SceneManifest.cpp | 3 +- .../SceneCore/Containers/SceneManifest.h | 2 + .../SceneCore/Events/AssetImportRequest.cpp | 27 +- .../SceneCore/Events/AssetImportRequest.h | 19 + .../Import/ManifestImportRequestHandler.cpp | 8 +- .../Import/ManifestImportRequestHandler.h | 1 + .../Behaviors/ScriptProcessorRuleBehavior.cpp | 117 +++--- .../Behaviors/ScriptProcessorRuleBehavior.h | 8 +- Gems/Prefab/PrefabBuilder/CMakeLists.txt | 9 +- .../PrefabBuilder/PrefabBuilderModule.cpp | 4 +- .../Prefab/PrefabBuilder/PrefabBuilderTests.h | 1 + .../PrefabBuilder/PrefabGroup/IPrefabGroup.h | 25 ++ .../PrefabGroup/PrefabBehaviorTests.cpp | 161 ++++++++ .../PrefabGroup/PrefabBehaviorTests.inl | 104 ++++++ .../PrefabBuilder/PrefabGroup/PrefabGroup.cpp | 136 +++++++ .../PrefabBuilder/PrefabGroup/PrefabGroup.h | 64 ++++ .../PrefabGroup/PrefabGroupBehavior.cpp | 251 +++++++++++++ .../PrefabGroup/PrefabGroupBehavior.h | 55 +++ .../PrefabGroup/PrefabGroupTests.cpp | 161 ++++++++ .../PrefabGroup/ProceduralAssetHandler.cpp | 185 +++++++++ .../PrefabGroup/ProceduralAssetHandler.h | 39 ++ .../Prefab/PrefabBuilder/PrefabGroupTests.cpp | 162 ++++++++ .../PrefabBuilder/prefabbuilder_files.cmake | 7 + .../prefabbuilder_tests_files.cmake | 3 + .../Editor/Scripts/scene_api/scene_data.py | 9 + .../SceneBuilder/SceneBuilderWorker.cpp | 96 +++++ .../Source/SceneBuilder/SceneBuilderWorker.h | 5 + .../Tests/SceneBuilder/SceneBuilderTests.cpp | 200 ++++++++++ 69 files changed, 3696 insertions(+), 95 deletions(-) create mode 100644 AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py create mode 100644 AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png create mode 100644 AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx create mode 100644 AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h create mode 100644 Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp create mode 100644 Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp create mode 100644 Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h create mode 100644 Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp diff --git a/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py b/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py new file mode 100644 index 0000000000..d5a7acfe91 --- /dev/null +++ b/AutomatedTesting/Editor/Scripts/scene_mesh_to_prefab.py @@ -0,0 +1,162 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# +import os, traceback, binascii, sys, json, pathlib +import azlmbr.math +import azlmbr.bus + +# +# SceneAPI Processor +# + + +def log_exception_traceback(): + exc_type, exc_value, exc_tb = sys.exc_info() + data = traceback.format_exception(exc_type, exc_value, exc_tb) + print(str(data)) + +def get_mesh_node_names(sceneGraph): + import azlmbr.scene as sceneApi + import azlmbr.scene.graph + from scene_api import scene_data as sceneData + + meshDataList = [] + node = sceneGraph.get_root() + children = [] + paths = [] + + while node.IsValid(): + # store children to process after siblings + if sceneGraph.has_node_child(node): + children.append(sceneGraph.get_node_child(node)) + + nodeName = sceneData.SceneGraphName(sceneGraph.get_node_name(node)) + paths.append(nodeName.get_path()) + + # store any node that has mesh data content + nodeContent = sceneGraph.get_node_content(node) + if nodeContent.CastWithTypeName('MeshData'): + if sceneGraph.is_node_end_point(node) is False: + if (len(nodeName.get_path())): + meshDataList.append(sceneData.SceneGraphName(sceneGraph.get_node_name(node))) + + # advance to next node + if sceneGraph.has_node_sibling(node): + node = sceneGraph.get_node_sibling(node) + elif children: + node = children.pop() + else: + node = azlmbr.scene.graph.NodeIndex() + + return meshDataList, paths + +def update_manifest(scene): + import json + import uuid, os + import azlmbr.scene as sceneApi + import azlmbr.scene.graph + from scene_api import scene_data as sceneData + + graph = sceneData.SceneGraph(scene.graph) + # Get a list of all the mesh nodes, as well as all the nodes + mesh_name_list, all_node_paths = get_mesh_node_names(graph) + scene_manifest = sceneData.SceneManifest() + + clean_filename = scene.sourceFilename.replace('.', '_') + + # Compute the filename of the scene file + source_basepath = scene.watchFolder + source_relative_path = os.path.dirname(os.path.relpath(clean_filename, source_basepath)) + source_filename_only = os.path.basename(clean_filename) + + created_entities = [] + + # Loop every mesh node in the scene + for activeMeshIndex in range(len(mesh_name_list)): + mesh_name = mesh_name_list[activeMeshIndex] + mesh_path = mesh_name.get_path() + # Create a unique mesh group name using the filename + node name + mesh_group_name = '{}_{}'.format(source_filename_only, mesh_name.get_name()) + # Remove forbidden filename characters from the name since this will become a file on disk later + mesh_group_name = "".join(char for char in mesh_group_name if char not in "|<>:\"/?*\\") + # Add the MeshGroup to the manifest and give it a unique ID + mesh_group = scene_manifest.add_mesh_group(mesh_group_name) + mesh_group['id'] = '{' + str(uuid.uuid5(uuid.NAMESPACE_DNS, source_filename_only + mesh_path)) + '}' + # Set our current node as the only node that is included in this MeshGroup + scene_manifest.mesh_group_select_node(mesh_group, mesh_path) + + # Explicitly remove all other nodes to prevent implicit inclusions + for node in all_node_paths: + if node != mesh_path: + scene_manifest.mesh_group_unselect_node(mesh_group, node) + + # Create an editor entity + entity_id = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "CreateEditorReadyEntity", mesh_group_name) + # Add an EditorMeshComponent to the entity + editor_mesh_component = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "GetOrAddComponentByTypeName", entity_id, "AZ::Render::EditorMeshComponent") + # Set the ModelAsset assetHint to the relative path of the input asset + the name of the MeshGroup we just created + the azmodel extension + # The MeshGroup we created will be output as a product in the asset's path named mesh_group_name.azmodel + # The assetHint will be converted to an AssetId later during prefab loading + json_update = json.dumps({ + "Controller": { "Configuration": { "ModelAsset": { + "assetHint": os.path.join(source_relative_path, mesh_group_name) + ".azmodel" }}} + }); + # Apply the JSON above to the component we created + result = azlmbr.entity.EntityUtilityBus(azlmbr.bus.Broadcast, "UpdateComponentForEntity", entity_id, editor_mesh_component, json_update) + + if not result: + raise RuntimeError("UpdateComponentForEntity failed") + + # Keep track of the entity we set up, we'll add them all to the prefab we're creating later + created_entities.append(entity_id) + + # Create a prefab with all our entities + prefab_filename = source_filename_only + ".prefab" + created_template_id = azlmbr.prefab.PrefabSystemScriptingBus(azlmbr.bus.Broadcast, "CreatePrefab", created_entities, prefab_filename) + + if created_template_id == azlmbr.prefab.InvalidTemplateId: + raise RuntimeError("CreatePrefab {} failed".format(prefab_filename)) + + # Convert the prefab to a JSON string + output = azlmbr.prefab.PrefabLoaderScriptingBus(azlmbr.bus.Broadcast, "SaveTemplateToString", created_template_id) + + if output.IsSuccess(): + jsonString = output.GetValue() + uuid = azlmbr.math.Uuid_CreateRandom().ToString() + jsonResult = json.loads(jsonString) + # Add a PrefabGroup to the manifest and store the JSON on it + scene_manifest.add_prefab_group(source_filename_only, uuid, jsonResult) + else: + raise RuntimeError("SaveTemplateToString failed for template id {}, prefab {}".format(created_template_id, prefab_filename)) + + # Convert the manifest to a JSON string and return it + new_manifest = scene_manifest.export() + + return new_manifest + +sceneJobHandler = None + +def on_update_manifest(args): + try: + scene = args[0] + return update_manifest(scene) + except RuntimeError as err: + print (f'ERROR - {err}') + log_exception_traceback() + + global sceneJobHandler + sceneJobHandler = None + +# try to create SceneAPI handler for processing +try: + import azlmbr.scene as sceneApi + if (sceneJobHandler == None): + sceneJobHandler = sceneApi.ScriptBuildingNotificationBusHandler() + sceneJobHandler.connect() + sceneJobHandler.add_callback('OnUpdateManifest', on_update_manifest) +except: + sceneJobHandler = None diff --git a/AutomatedTesting/Gem/Code/enabled_gems.cmake b/AutomatedTesting/Gem/Code/enabled_gems.cmake index 0d281661b9..30740a489d 100644 --- a/AutomatedTesting/Gem/Code/enabled_gems.cmake +++ b/AutomatedTesting/Gem/Code/enabled_gems.cmake @@ -21,7 +21,6 @@ set(ENABLED_GEMS QtForPython PythonAssetBuilder Metastream - Camera EMotionFX AtomTressFX @@ -53,6 +52,6 @@ set(ENABLED_GEMS AWSCore AWSClientAuth AWSMetrics - + PrefabBuilder AudioSystem ) diff --git a/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png b/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png new file mode 100644 index 0000000000..4f52364cb3 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/FBXTestTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:827a63985273229050bf4f63030bcc666f045091fe81cf8157a9ca23b40074b6 +size 3214 diff --git a/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx new file mode 100644 index 0000000000..d9deb899f0 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8d24963e6e8765205bc79cbe2304fc39f1245ee75249e2834a71c96c3cab824 +size 22700 diff --git a/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo new file mode 100644 index 0000000000..fe18a16cb5 --- /dev/null +++ b/AutomatedTesting/multiple_mesh_one_material/multiple_mesh_one_material.fbx.assetinfo @@ -0,0 +1,8 @@ +{ + "values": [ + { + "$type": "ScriptProcessorRule", + "scriptFilename": "Editor/Scripts/scene_mesh_to_prefab.py" + } + ] +} \ No newline at end of file diff --git a/Code/Framework/AzCore/AzCore/Math/Uuid.cpp b/Code/Framework/AzCore/AzCore/Math/Uuid.cpp index d875e28a1e..410d235a37 100644 --- a/Code/Framework/AzCore/AzCore/Math/Uuid.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Uuid.cpp @@ -135,18 +135,12 @@ namespace AZ { stringLength = strlen(uuidString); } - if (stringLength > MaxPermissiveStringSize) - { - if (!skipWarnings) - { - AZ_Warning("Math", false, "Can't create UUID from string length %zu over maximum %zu", stringLength, MaxPermissiveStringSize); - } - return Uuid::CreateNull(); - } + size_t newLength{ 0 }; char createString[MaxPermissiveStringSize]; - for (size_t curPos = 0; curPos < stringLength; ++curPos) + // Loop until we get to the end of the string OR stop once we've accumulated a full UUID string worth of data + for (size_t curPos = 0; curPos < stringLength && newLength < ValidUuidStringLength; ++curPos) { char curChar = uuidString[curPos]; switch (curChar) diff --git a/Code/Framework/AzCore/AzCore/Math/Uuid.h b/Code/Framework/AzCore/AzCore/Math/Uuid.h index ea920e45c8..6b77e7ec3e 100644 --- a/Code/Framework/AzCore/AzCore/Math/Uuid.h +++ b/Code/Framework/AzCore/AzCore/Math/Uuid.h @@ -42,8 +42,9 @@ namespace AZ //VER_AZ_RANDOM_CRC32 = 6, // 0 1 1 0 }; + static constexpr int ValidUuidStringLength = 32; /// Number of characters (data only, no extra formatting) in a valid UUID string static const size_t MaxStringBuffer = 39; /// 32 Uuid + 4 dashes + 2 brackets + 1 terminate - + Uuid() {} Uuid(const char* string, size_t stringLength = 0) { *this = CreateString(string, stringLength); } diff --git a/Code/Framework/AzCore/Tests/UUIDTests.cpp b/Code/Framework/AzCore/Tests/UUIDTests.cpp index a18dc33c4f..64b9048a62 100644 --- a/Code/Framework/AzCore/Tests/UUIDTests.cpp +++ b/Code/Framework/AzCore/Tests/UUIDTests.cpp @@ -247,4 +247,27 @@ namespace UnitTest Uuid right = Uuid::CreateStringPermissive(permissiveStr1); EXPECT_EQ(left, right); } + + TEST_F(UuidTests, CreateStringPermissive_StringWithExtraData_Succeeds) + { + const char uuidStr[] = "{34D44249-E599-4B30-811F-4215C2DEA269}"; + Uuid left = Uuid::CreateString(uuidStr); + + const char permissiveStr[] = "0x34D44249-0xE5994B30-0x811F4215-0xC2DEA269 Hello World"; + Uuid right = Uuid::CreateStringPermissive(permissiveStr); + EXPECT_EQ(left, right); + + } + + TEST_F(UuidTests, CreateStringPermissive_StringWithLotsOfExtraData_Succeeds) + { + const char uuidStr[] = "{34D44249-E599-4B30-811F-4215C2DEA269}"; + Uuid left = Uuid::CreateString(uuidStr); + + const char permissiveStr[] = "0x34D44249-0xE5994B30-0x811F4215-0xC2DEA269 Hello World this is a really long string " + "with lots of extra data to make sure we can parse a long string without failing as long as the uuid is in " + "the beginning of the string then we should succeed"; + Uuid right = Uuid::CreateStringPermissive(permissiveStr); + EXPECT_EQ(left, right); + } } diff --git a/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp b/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp index 725f71a3c9..5d82cf488a 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp +++ b/Code/Framework/AzFramework/AzFramework/Entity/BehaviorEntity.cpp @@ -133,6 +133,8 @@ namespace AzFramework behaviorContext->Class("Entity") ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) ->Attribute(AZ::Script::Attributes::ConstructorOverride, &Internal::BehaviorEntityScriptConstructor) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "entity") ->Constructor() ->Constructor() ->Constructor() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp index c54735fe91..fbd066ec6e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Application/ToolsApplication.cpp @@ -69,6 +69,7 @@ #include #include #include +#include #include AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // 4251: 'QFileInfo::d_ptr': class 'QSharedDataPointer' needs to have dll-interface to be used by clients of class 'QFileInfo' @@ -271,7 +272,8 @@ namespace AzToolsFramework azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), - azrtti_typeid() + azrtti_typeid(), + azrtti_typeid() }); return components; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp index 05d67d9d71..d2a88df544 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFrameworkModule.cpp @@ -53,6 +53,7 @@ #include #include #include +#include AZ_DEFINE_BUDGET(AzToolsFramework); @@ -71,6 +72,7 @@ namespace AzToolsFramework Components::EditorSelectionAccentSystemComponent::CreateDescriptor(), EditorEntityContextComponent::CreateDescriptor(), EditorEntityFixupComponent::CreateDescriptor(), + EntityUtilityComponent::CreateDescriptor(), ContainerEntitySystemComponent::CreateDescriptor(), FocusModeSystemComponent::CreateDescriptor(), SliceMetadataEntityContextComponent::CreateDescriptor(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp new file mode 100644 index 0000000000..7fb998f012 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.cpp @@ -0,0 +1,351 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + void ComponentDetails::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Field("TypeInfo", &ComponentDetails::m_typeInfo) + ->Field("BaseClasses", &ComponentDetails::m_baseClasses); + + serializeContext->RegisterGenericType>(); + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "entity") + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Property("TypeInfo", BehaviorValueProperty(&ComponentDetails::m_typeInfo)) + ->Property("BaseClasses", BehaviorValueProperty(&ComponentDetails::m_baseClasses)) + ->Method("__repr__", [](const ComponentDetails& obj) + { + std::ostringstream result; + bool first = true; + + for (const auto& baseClass : obj.m_baseClasses) + { + if (!first) + { + result << ", "; + } + + first = false; + result << baseClass.c_str(); + } + + return AZStd::string::format("%s, Base Classes: <%s>", obj.m_typeInfo.c_str(), result.str().c_str()); + }) + ->Attribute(AZ::Script::Attributes::Operator, AZ::Script::Attributes::OperatorType::ToString); + } + } + + AZ::EntityId EntityUtilityComponent::CreateEditorReadyEntity(const AZStd::string& entityName) + { + auto* newEntity = m_entityContext->CreateEntity(entityName.c_str()); + + if (!newEntity) + { + AZ_Error("EditorEntityUtility", false, "Failed to create new entity %s", entityName.c_str()); + return AZ::EntityId(); + } + + AzToolsFramework::EditorEntityContextRequestBus::Broadcast( + &AzToolsFramework::EditorEntityContextRequestBus::Events::AddRequiredComponents, *newEntity); + + newEntity->Init(); + auto newEntityId = newEntity->GetId(); + + m_createdEntities.emplace_back(newEntityId); + + return newEntityId; + } + + AZ::TypeId GetComponentTypeIdFromName(const AZStd::string& typeName) + { + // Try to create a TypeId first. We won't show any warnings if this fails as the input might be a class name instead + AZ::TypeId typeId = AZ::TypeId::CreateStringPermissive(typeName.data()); + + // If the typeId is null, try a lookup by class name + if (typeId.IsNull()) + { + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + auto typeNameCrc = AZ::Crc32(typeName.data()); + auto typeUuidList = serializeContext->FindClassId(typeNameCrc); + + // TypeId is invalid or class name is invalid + if (typeUuidList.empty()) + { + AZ_Error("EntityUtilityComponent", false, "Provided type %s is either an invalid TypeId or does not match any class names", typeName.c_str()); + return AZ::TypeId::CreateNull(); + } + + typeId = typeUuidList[0]; + } + + return typeId; + } + + AZ::Component* FindComponentHelper(AZ::EntityId entityId, const AZ::TypeId& typeId, AZ::ComponentId componentId, bool createComponent = false) + { + AZ::Entity* entity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, entityId); + + if (!entity) + { + AZ_Error("EntityUtilityComponent", false, "Invalid entityId %s", entityId.ToString().c_str()); + return nullptr; + } + + AZ::Component* component = nullptr; + if (componentId != AZ::InvalidComponentId) + { + component = entity->FindComponent(componentId); + } + else + { + component = entity->FindComponent(typeId); + } + + if (!component && createComponent) + { + component = entity->CreateComponent(typeId); + } + + if (!component) + { + AZ_Error( + "EntityUtilityComponent", false, "Failed to find component (%s) on entity %s (%s)", + componentId != AZ::InvalidComponentId ? AZStd::to_string(componentId).c_str() + : typeId.ToString().c_str(), + entityId.ToString().c_str(), + entity->GetName().c_str()); + return nullptr; + } + + return component; + } + + AzFramework::BehaviorComponentId EntityUtilityComponent::GetOrAddComponentByTypeName(AZ::EntityId entityId, const AZStd::string& typeName) + { + AZ::TypeId typeId = GetComponentTypeIdFromName(typeName); + + if (typeId.IsNull()) + { + return AzFramework::BehaviorComponentId(AZ::InvalidComponentId); + } + + AZ::Component* component = FindComponentHelper(entityId, typeId, AZ::InvalidComponentId, true); + + return component ? AzFramework::BehaviorComponentId(component->GetId()) : + AzFramework::BehaviorComponentId(AZ::InvalidComponentId); + } + + bool EntityUtilityComponent::UpdateComponentForEntity(AZ::EntityId entityId, AzFramework::BehaviorComponentId componentId, const AZStd::string& json) + { + if (!componentId.IsValid()) + { + AZ_Error("EntityUtilityComponent", false, "Invalid componentId passed to UpdateComponentForEntity"); + return false; + } + + AZ::Component* component = FindComponentHelper(entityId, AZ::TypeId::CreateNull(), componentId); + + if (!component) + { + return false; + } + + using namespace AZ::JsonSerializationResult; + + AZ::JsonDeserializerSettings settings = AZ::JsonDeserializerSettings{}; + settings.m_reporting = []([[maybe_unused]] AZStd::string_view message, ResultCode result, AZStd::string_view) -> auto + { + if (result.GetProcessing() == Processing::Halted) + { + AZ_Error("EntityUtilityComponent", false, "JSON %s\n", message.data()); + } + else if (result.GetOutcome() > Outcomes::PartialDefaults) + { + AZ_Warning("EntityUtilityComponent", false, "JSON %s\n", message.data()); + } + return result; + }; + + rapidjson::Document doc; + doc.Parse(json.data(), json.size()); + ResultCode resultCode = AZ::JsonSerialization::Load(*component, doc, settings); + + return resultCode.GetProcessing() != Processing::Halted; + } + + AZStd::string EntityUtilityComponent::GetComponentDefaultJson(const AZStd::string& typeName) + { + AZ::TypeId typeId = GetComponentTypeIdFromName(typeName); + + if (typeId.IsNull()) + { + // GetComponentTypeIdFromName already does error handling + return ""; + } + + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(typeId); + + if (!classData) + { + AZ_Error("EntityUtilityComponent", false, "Failed to find ClassData for typeId %s (%s)", typeId.ToString().c_str(), typeName.c_str()); + return ""; + } + + void* component = classData->m_factory->Create("Component"); + rapidjson::Document document; + AZ::JsonSerializerSettings settings; + settings.m_keepDefaults = true; + + auto resultCode = AZ::JsonSerialization::Store(document, document.GetAllocator(), component, nullptr, typeId, settings); + + // Clean up the allocated component ASAP, we don't need it anymore + classData->m_factory->Destroy(component); + + if (resultCode.GetProcessing() == AZ::JsonSerializationResult::Processing::Halted) + { + AZ_Error("EntityUtilityComponent", false, "Failed to serialize component to json (%s): %s", + typeName.c_str(), resultCode.ToString(typeName).c_str()) + return ""; + } + + AZStd::string jsonString; + AZ::Outcome outcome = AZ::JsonSerializationUtils::WriteJsonString(document, jsonString); + + if (!outcome.IsSuccess()) + { + AZ_Error("EntityUtilityComponent", false, "Failed to write component json to string: %s", outcome.GetError().c_str()); + return ""; + } + + return jsonString; + } + + AZStd::vector EntityUtilityComponent::FindMatchingComponents(const AZStd::string& searchTerm) + { + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + if (m_typeInfo.empty()) + { + serializeContext->EnumerateDerived( + [this, serializeContext](const AZ::SerializeContext::ClassData* classData, const AZ::Uuid& /*typeId*/) + { + auto& typeInfo = m_typeInfo.emplace_back(classData->m_typeId, classData->m_name, AZStd::vector{}); + + serializeContext->EnumerateBase( + [&typeInfo](const AZ::SerializeContext::ClassData* classData, const AZ::Uuid&) + { + if (classData) + { + AZStd::get<2>(typeInfo).emplace_back(classData->m_name); + } + return true; + }, + classData->m_typeId); + + return true; + }); + } + + AZStd::vector matches; + + for (const auto& [typeId, typeName, baseClasses] : m_typeInfo) + { + if (AZStd::wildcard_match(searchTerm, typeName)) + { + ComponentDetails details; + details.m_typeInfo = AZStd::string::format("%s %s", typeId.ToString().c_str(), typeName.c_str()); + details.m_baseClasses = baseClasses; + + matches.emplace_back(AZStd::move(details)); + } + } + + return matches; + } + + void EntityUtilityComponent::ResetEntityContext() + { + for (AZ::EntityId entityId : m_createdEntities) + { + m_entityContext->DestroyEntityById(entityId); + } + + m_createdEntities.clear(); + m_entityContext->ResetContext(); + } + + void EntityUtilityComponent::Reflect(AZ::ReflectContext* context) + { + ComponentDetails::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context)) + { + serializeContext->Class(); + } + + if (auto* behaviorContext = azrtti_cast(context)) + { + behaviorContext->ConstantProperty("InvalidComponentId", BehaviorConstant(AZ::InvalidComponentId)) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "Entity") + ->Attribute(AZ::Script::Attributes::Module, "entity"); + + behaviorContext->EBus("EntityUtilityBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Attribute(AZ::Script::Attributes::Category, "Entity") + ->Attribute(AZ::Script::Attributes::Module, "entity") + ->Event("CreateEditorReadyEntity", &EntityUtilityBus::Events::CreateEditorReadyEntity) + ->Event("GetOrAddComponentByTypeName", &EntityUtilityBus::Events::GetOrAddComponentByTypeName) + ->Event("UpdateComponentForEntity", &EntityUtilityBus::Events::UpdateComponentForEntity) + ->Event("FindMatchingComponents", &EntityUtilityBus::Events::FindMatchingComponents) + ->Event("GetComponentDefaultJson", &EntityUtilityBus::Events::GetComponentDefaultJson) + ; + } + } + + void EntityUtilityComponent::Activate() + { + m_entityContext = AZStd::make_unique(UtilityEntityContextId); + m_entityContext->InitContext(); + EntityUtilityBus::Handler::BusConnect(); + } + + void EntityUtilityComponent::Deactivate() + { + EntityUtilityBus::Handler::BusDisconnect(); + m_entityContext = nullptr; + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h new file mode 100644 index 0000000000..af7c353163 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/EntityUtilityComponent.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + struct ComponentDetails + { + AZ_TYPE_INFO(AzToolsFramework::ComponentDetails, "{107D8379-4AD4-4547-BEE1-184B120F23E9}"); + + static void Reflect(AZ::ReflectContext* context); + + AZStd::string m_typeInfo; + AZStd::vector m_baseClasses; + }; + + // This ebus is intended to provide behavior-context friendly APIs to create and manage entities + struct EntityUtilityTraits : AZ::EBusTraits + { + AZ_RTTI(AzToolsFramework::EntityUtilityTraits, "{A6305CAE-C825-43F9-A44D-E503910912AF}"); + + virtual ~EntityUtilityTraits() = default; + + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + + // Creates an entity with the default editor components attached and initializes the entity + virtual AZ::EntityId CreateEditorReadyEntity(const AZStd::string& entityName) = 0; + + virtual AzFramework::BehaviorComponentId GetOrAddComponentByTypeName(AZ::EntityId entity, const AZStd::string& typeName) = 0; + + virtual bool UpdateComponentForEntity(AZ::EntityId entity, AzFramework::BehaviorComponentId component, const AZStd::string& json) = 0; + + // Gets a JSON string containing describing the default serialization state of the specified component + virtual AZStd::string GetComponentDefaultJson(const AZStd::string& typeName) = 0; + + // Returns a list of matching component type names. Supports wildcard search terms + virtual AZStd::vector FindMatchingComponents(const AZStd::string& searchTerm) = 0; + + virtual void ResetEntityContext() = 0; + }; + + using EntityUtilityBus = AZ::EBus; + + struct EntityUtilityComponent : AZ::Component + , EntityUtilityBus::Handler + { + inline const static AZ::Uuid UtilityEntityContextId = AZ::Uuid("{9C277B88-E79E-4F8A-BAFF-A4C175BD565F}"); + + AZ_COMPONENT(EntityUtilityComponent, "{47205907-A0EA-4FFF-A620-04D20C04A379}"); + + AZ::EntityId CreateEditorReadyEntity(const AZStd::string& entityName) override; + AzFramework::BehaviorComponentId GetOrAddComponentByTypeName(AZ::EntityId entity, const AZStd::string& typeName) override; + bool UpdateComponentForEntity(AZ::EntityId entity, AzFramework::BehaviorComponentId component, const AZStd::string& json) override; + AZStd::string GetComponentDefaultJson(const AZStd::string& typeName) override; + AZStd::vector FindMatchingComponents(const AZStd::string& searchTerm) override; + void ResetEntityContext() override; + + static void Reflect(AZ::ReflectContext* context); + + protected: + void Activate() override; + void Deactivate() override; + + // Our own entity context. This API is intended mostly for use in Asset Builders where there is no editor context + // Additionally, an entity context is needed when using the Behavior Entity class + AZStd::unique_ptr m_entityContext; + + // TypeId, TypeName, Vector + AZStd::vector>> m_typeInfo; + + // Keep track of the entities we create so they can be reset + AZStd::vector m_createdEntities; + }; +}; // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h index 75e3bab60f..5455e8d773 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h @@ -10,6 +10,7 @@ #include #include +#include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp index 09439724cd..07bda45c8a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.cpp @@ -50,17 +50,19 @@ namespace AzToolsFramework auto settingsRegistry = AZ::SettingsRegistry::Get(); AZ_Assert(settingsRegistry, "Settings registry is not set"); - + [[maybe_unused]] bool result = settingsRegistry->Get(m_projectPathWithOsSeparator.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath); AZ_Warning("Prefab", result, "Couldn't retrieve project root path"); m_projectPathWithSlashSeparator = AZ::IO::Path(m_projectPathWithOsSeparator.Native(), '/').MakePreferred(); AZ::Interface::Register(this); + m_scriptingPrefabLoader.Connect(this); } void PrefabLoader::UnregisterPrefabLoaderInterface() { + m_scriptingPrefabLoader.Disconnect(); AZ::Interface::Unregister(this); } @@ -568,7 +570,7 @@ namespace AzToolsFramework (pathStr.find_first_of(AZ_FILESYSTEM_INVALID_CHARACTERS) == AZStd::string::npos) && (pathStr.back() != '\\' && pathStr.back() != '/'); } - + AZ::IO::Path PrefabLoader::GetFullPath(AZ::IO::PathView path) { AZ::IO::Path pathWithOSSeparator = AZ::IO::Path(path).MakePreferred(); @@ -596,26 +598,38 @@ namespace AzToolsFramework { // The asset system provided us with a valid root folder and relative path, so return it. fullPath = AZ::IO::Path(rootFolder) / assetInfo.m_relativePath; + return fullPath; } else { - // If for some reason the Asset system couldn't provide a relative path, provide some fallback logic. + // attempt to find the absolute from the Cache folder + AZStd::string assetRootFolder; + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Get(assetRootFolder, AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder); + } + fullPath = AZ::IO::Path(assetRootFolder) / path; + if (fullPath.IsAbsolute() && AZ::IO::SystemFile::Exists(fullPath.c_str())) + { + return fullPath; + } + } - // Check to see if the AssetProcessor is ready. If it *is* and we didn't get a path, print an error then follow - // the fallback logic. If it's *not* ready, we're probably either extremely early in a tool startup flow or inside - // a unit test, so just execute the fallback logic without an error. - [[maybe_unused]] bool assetProcessorReady = false; - AzFramework::AssetSystemRequestBus::BroadcastResult( - assetProcessorReady, &AzFramework::AssetSystemRequestBus::Events::AssetProcessorIsReady); + // If for some reason the Asset system couldn't provide a relative path, provide some fallback logic. - AZ_Error( - "Prefab", !assetProcessorReady, "Full source path for '%.*s' could not be determined. Using fallback logic.", - AZ_STRING_ARG(path.Native())); + // Check to see if the AssetProcessor is ready. If it *is* and we didn't get a path, print an error then follow + // the fallback logic. If it's *not* ready, we're probably either extremely early in a tool startup flow or inside + // a unit test, so just execute the fallback logic without an error. + [[maybe_unused]] bool assetProcessorReady = false; + AzFramework::AssetSystemRequestBus::BroadcastResult( + assetProcessorReady, &AzFramework::AssetSystemRequestBus::Events::AssetProcessorIsReady); - // If a relative path was passed in, make it relative to the project root. - fullPath = AZ::IO::Path(m_projectPathWithOsSeparator).Append(pathWithOSSeparator); - } + AZ_Error( + "Prefab", !assetProcessorReady, "Full source path for '%.*s' could not be determined. Using fallback logic.", + AZ_STRING_ARG(path.Native())); + // If a relative path was passed in, make it relative to the project root. + fullPath = AZ::IO::Path(m_projectPathWithOsSeparator).Append(pathWithOSSeparator); return fullPath; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h index 15f201e027..da2c3f3161 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoader.h @@ -15,6 +15,7 @@ #include #include #include +#include namespace AZ { @@ -114,6 +115,7 @@ namespace AzToolsFramework void SetSaveAllPrefabsPreference(SaveAllPrefabsPreference saveAllPrefabsPreference) override; private: + /** * Copies the template dom provided and manipulates it into the proper format to be saved to disk. * @param templateRef The template whose dom we want to transform into the proper format to be saved to disk. @@ -177,6 +179,7 @@ namespace AzToolsFramework AZStd::optional> StoreTemplateIntoFileFormat(TemplateId templateId); PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; + ScriptingPrefabLoader m_scriptingPrefabLoader; AZ::IO::Path m_projectPathWithOsSeparator; AZ::IO::Path m_projectPathWithSlashSeparator; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h index a428f8a7b9..b4586ad5bf 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderInterface.h @@ -99,7 +99,6 @@ namespace AzToolsFramework // Generates a new path static AZ::IO::Path GeneratePath(); }; - } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h new file mode 100644 index 0000000000..6e9d64b147 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabLoaderScriptingBus.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + // Ebus for script-friendly APIs for the prefab loader + struct PrefabLoaderScriptingTraits : AZ::EBusTraits + { + AZ_TYPE_INFO(PrefabLoaderScriptingTraits, "{C344B7D8-8299-48C9-8450-26E1332EA011}"); + + virtual ~PrefabLoaderScriptingTraits() = default; + + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + + /** + * Saves a Prefab Template into the provided output string. + * Converts Prefab Template form into .prefab form by collapsing nested Template info + * into a source path and patches. + * @param templateId Id of the template to be saved + * @return Will contain the serialized template json on success + */ + virtual AZ::Outcome SaveTemplateToString(TemplateId templateId) = 0; + }; + + using PrefabLoaderScriptingBus = AZ::EBus; + + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 896e40d929..b1fdf9784d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -36,12 +37,14 @@ namespace AzToolsFramework m_instanceToTemplatePropagator.RegisterInstanceToTemplateInterface(); m_prefabPublicHandler.RegisterPrefabPublicHandlerInterface(); m_prefabPublicRequestHandler.Connect(); + m_prefabSystemScriptingHandler.Connect(this); AZ::SystemTickBus::Handler::BusConnect(); } void PrefabSystemComponent::Deactivate() { AZ::SystemTickBus::Handler::BusDisconnect(); + m_prefabSystemScriptingHandler.Disconnect(); m_prefabPublicRequestHandler.Disconnect(); m_prefabPublicHandler.UnregisterPrefabPublicHandlerInterface(); m_instanceToTemplatePropagator.UnregisterInstanceToTemplateInterface(); @@ -58,13 +61,24 @@ namespace AzToolsFramework AzToolsFramework::Prefab::PrefabConversionUtils::EditorInfoRemover::Reflect(context); PrefabPublicRequestHandler::Reflect(context); PrefabLoader::Reflect(context); + PrefabSystemScriptingHandler::Reflect(context); - AZ::SerializeContext* serialize = azrtti_cast(context); - if (serialize) + if (AZ::SerializeContext* serialize = azrtti_cast(context)) { serialize->Class()->Version(1); } + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + + behaviorContext->EBus("PrefabLoaderScriptingBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab") + ->Event("SaveTemplateToString", &PrefabLoaderScriptingBus::Events::SaveTemplateToString); + ; + } + AZ::JsonRegistrationContext* jsonRegistration = azrtti_cast(context); if (jsonRegistration) { @@ -145,7 +159,7 @@ namespace AzToolsFramework newInstance->SetTemplateId(newTemplateId); } } - + void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, bool immediate, InstanceOptionalReference instanceToExclude) { UpdatePrefabInstances(templateId, immediate, instanceToExclude); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h index f640eb2f1b..480bb83121 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.h @@ -27,6 +27,7 @@ #include #include #include +#include namespace AZ { @@ -219,7 +220,7 @@ namespace AzToolsFramework const AZStd::vector& entities, AZStd::vector>&& instancesToConsume, AZ::IO::PathView filePath, AZStd::unique_ptr containerEntity = nullptr, InstanceOptionalReference parent = AZStd::nullopt, bool shouldCreateLinks = true) override; - + PrefabDom& FindTemplateDom(TemplateId templateId) override; /** @@ -244,7 +245,7 @@ namespace AzToolsFramework private: AZ_DISABLE_COPY_MOVE(PrefabSystemComponent); - + /** * Builds a new Prefab Template out of entities and instances and returns the first instance comprised of * these entities and instances. @@ -412,6 +413,8 @@ namespace AzToolsFramework // Handler of the public Prefab requests. PrefabPublicRequestHandler m_prefabPublicRequestHandler; + + PrefabSystemScriptingHandler m_prefabSystemScriptingHandler; }; } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h index 54ca951841..66d85ccee9 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponentInterface.h @@ -78,8 +78,7 @@ namespace AzToolsFramework AZStd::unique_ptr containerEntity = nullptr, InstanceOptionalReference parent = AZStd::nullopt, bool shouldCreateLinks = true) = 0; }; - - + } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h new file mode 100644 index 0000000000..f83bd2c6f1 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingBus.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + // Bus that exposes a script-friendly interface to the PrefabSystemComponent + struct PrefabSystemScriptingEbusTraits : AZ::EBusTraits + { + using MutexType = AZ::NullMutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + virtual TemplateId CreatePrefabTemplate( + const AZStd::vector& entityIds, const AZStd::string& filePath) = 0; + }; + + using PrefabSystemScriptingBus = AZ::EBus; + + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp new file mode 100644 index 0000000000..d34e2cfc92 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include + +namespace AzToolsFramework::Prefab +{ + void PrefabSystemScriptingHandler::Reflect(AZ::ReflectContext* context) + { + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->ConstantProperty("InvalidTemplateId", BehaviorConstant(InvalidTemplateId)) + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab"); + + behaviorContext->EBus("PrefabSystemScriptingBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Module, "prefab") + ->Attribute(AZ::Script::Attributes::Category, "Prefab") + ->Event("CreatePrefab", &PrefabSystemScriptingBus::Events::CreatePrefabTemplate); + } + } + + void PrefabSystemScriptingHandler::Connect(PrefabSystemComponentInterface* prefabSystemComponentInterface) + { + AZ_Assert(prefabSystemComponentInterface != nullptr, "prefabSystemComponentInterface must not be null"); + m_prefabSystemComponentInterface = prefabSystemComponentInterface; + PrefabSystemScriptingBus::Handler::BusConnect(); + } + + void PrefabSystemScriptingHandler::Disconnect() + { + PrefabSystemScriptingBus::Handler::BusDisconnect(); + } + + TemplateId PrefabSystemScriptingHandler::CreatePrefabTemplate(const AZStd::vector& entityIds, const AZStd::string& filePath) + { + AZStd::vector entities; + + for (const auto& entityId : entityIds) + { + AZ::Entity* entity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, entityId); + + AZ_Warning( + "PrefabSystemComponent", entity, "EntityId %s was not found and will not be added to the prefab", + entityId.ToString().c_str()); + + if (entity) + { + entities.push_back(entity); + } + } + + auto prefab = m_prefabSystemComponentInterface->CreatePrefab(entities, {}, AZ::IO::PathView(AZStd::string_view(filePath))); + + if (!prefab) + { + AZ_Error("PrefabSystemComponenent", false, "Failed to create prefab %s", filePath.c_str()); + return InvalidTemplateId; + } + + return prefab->GetTemplateId(); + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h new file mode 100644 index 0000000000..809690bf35 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemScriptingHandler.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + class PrefabSystemScriptingHandler + : PrefabSystemScriptingBus::Handler + { + public: + static void Reflect(AZ::ReflectContext* context); + + PrefabSystemScriptingHandler() = default; + + void Connect(PrefabSystemComponentInterface* prefabSystemComponentInterface); + void Disconnect(); + + private: + AZ_DISABLE_COPY(PrefabSystemScriptingHandler); + + ////////////////////////////////////////////////////////////////////////// + // PrefabSystemScriptingBus implementation + TemplateId CreatePrefabTemplate(const AZStd::vector& entityIds, const AZStd::string& filePath) override; + ////////////////////////////////////////////////////////////////////////// + + PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; + }; + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp new file mode 100644 index 0000000000..465d83e94b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include +#include +#include +#include +#include + +namespace AZ::Prefab +{ + static constexpr const char s_useProceduralPrefabsKey[] = "/O3DE/Preferences/Prefabs/UseProceduralPrefabs"; + + // ProceduralPrefabAsset + + ProceduralPrefabAsset::ProceduralPrefabAsset(const AZ::Data::AssetId& assetId) + : AZ::Data::AssetData(assetId) + , m_templateId(AzToolsFramework::Prefab::InvalidTemplateId) + { + } + + void ProceduralPrefabAsset::Reflect(AZ::ReflectContext* context) + { + PrefabDomData::Reflect(context); + + if (auto* serializeContext = azrtti_cast(context); serializeContext != nullptr) + { + serializeContext->Class() + ->Version(1) + ->Field("Template Name", &ProceduralPrefabAsset::m_templateName) + ->Field("Template ID", &ProceduralPrefabAsset::m_templateId); + } + } + + const AZStd::string& ProceduralPrefabAsset::GetTemplateName() const + { + return m_templateName; + } + + void ProceduralPrefabAsset::SetTemplateName(AZStd::string templateName) + { + m_templateName = AZStd::move(templateName); + } + + AzToolsFramework::Prefab::TemplateId ProceduralPrefabAsset::GetTemplateId() const + { + return m_templateId; + } + + void ProceduralPrefabAsset::SetTemplateId(AzToolsFramework::Prefab::TemplateId templateId) + { + m_templateId = templateId; + } + + bool ProceduralPrefabAsset::UseProceduralPrefabs() + { + bool useProceduralPrefabs = false; + bool result = AZ::SettingsRegistry::Get()->GetObject(useProceduralPrefabs, s_useProceduralPrefabsKey); + return result && useProceduralPrefabs; + } + + // PrefabDomData + + void PrefabDomData::Reflect(AZ::ReflectContext* context) + { + if (auto* jsonContext = azrtti_cast(context)) + { + jsonContext->Serializer()->HandlesType(); + } + + AZ::SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class() + ->Version(1); + } + } + + void PrefabDomData::CopyValue(const rapidjson::Value& inputValue) + { + m_prefabDom.CopyFrom(inputValue, m_prefabDom.GetAllocator()); + } + + const AzToolsFramework::Prefab::PrefabDom& PrefabDomData::GetValue() const + { + return m_prefabDom; + } + + // PrefabDomDataJsonSerializer + + AZ::JsonSerializationResult::Result PrefabDomDataJsonSerializer::Load( + void* outputValue, + [[maybe_unused]] const AZ::Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, + AZ::JsonDeserializerContext& context) + { + AZ_Assert(outputValueTypeId == azrtti_typeid(), + "PrefabDomDataJsonSerializer Load against output typeID that was not PrefabDomData"); + AZ_Assert(outputValue, "PrefabDomDataJsonSerializer Load against null output"); + + namespace JSR = AZ::JsonSerializationResult; + JSR::ResultCode result(JSR::Tasks::ReadField); + + if (inputValue.IsObject() == false) + { + result.Combine(context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Missing, "Missing object")); + return context.Report(result, "Prefab should be an object."); + } + + if (inputValue.MemberCount() < 1) + { + result.Combine(context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Missing, "Missing members")); + return context.Report(result, "Prefab should have multiple members."); + } + + auto* outputVariable = reinterpret_cast(outputValue); + outputVariable->CopyValue(inputValue); + return context.Report(result, "Loaded procedural prefab"); + } + + AZ::JsonSerializationResult::Result PrefabDomDataJsonSerializer::Store( + rapidjson::Value& outputValue, + const void* inputValue, + [[maybe_unused]] const void* defaultValue, + [[maybe_unused]] const AZ::Uuid& valueTypeId, + AZ::JsonSerializerContext& context) + { + AZ_Assert(inputValue, "Input value for PrefabDomDataJsonSerializer can't be null."); + AZ_Assert(azrtti_typeid() == valueTypeId, + "Unable to Serialize because the provided type is not PrefabGroup::PrefabDomData."); + + const PrefabDomData* prefabDomData = reinterpret_cast(inputValue); + + namespace JSR = AZ::JsonSerializationResult; + JSR::ResultCode result(JSR::Tasks::WriteValue); + outputValue.SetObject(); + outputValue.CopyFrom(prefabDomData->GetValue(), context.GetJsonAllocator()); + return context.Report(result, "Stored procedural prefab"); + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h new file mode 100644 index 0000000000..dd57389b7b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZ::Prefab +{ + //! A wrapper around the JSON DOM type so that the assets can read in and write out + //! JSON directly since Prefabs are JSON serialized entity-component data + class PrefabDomData final + { + public: + AZ_RTTI(PrefabDomData, "{C73A3360-D772-4D41-9118-A039BF9340C1}"); + AZ_CLASS_ALLOCATOR(PrefabDomData, AZ::SystemAllocator, 0); + + PrefabDomData() = default; + ~PrefabDomData() = default; + + static void Reflect(AZ::ReflectContext* context); + + void CopyValue(const rapidjson::Value& inputValue); + const AzToolsFramework::Prefab::PrefabDom& GetValue() const; + + private: + AzToolsFramework::Prefab::PrefabDom m_prefabDom; + }; + + //! Registered to help read/write JSON for the PrefabDomData::m_prefabDom + class PrefabDomDataJsonSerializer final + : public AZ::BaseJsonSerializer + { + public: + AZ_RTTI(PrefabDomDataJsonSerializer, "{9FC48652-A00B-4EFA-8FD9-345A8E625439}", BaseJsonSerializer); + AZ_CLASS_ALLOCATOR(PrefabDomDataJsonSerializer, AZ::SystemAllocator, 0); + + ~PrefabDomDataJsonSerializer() override = default; + + AZ::JsonSerializationResult::Result Load( + void* outputValue, + const AZ::Uuid& outputValueTypeId, + const rapidjson::Value& inputValue, + AZ::JsonDeserializerContext& context) override; + + AZ::JsonSerializationResult::Result Store( + rapidjson::Value& outputValue, + const void* inputValue, + const void* defaultValue, + const AZ::Uuid& valueTypeId, + AZ::JsonSerializerContext& context) override; + }; + + //! An asset type to register templates into the Prefab system so that they + //! can instantiate like Authored Prefabs + class ProceduralPrefabAsset + : public AZ::Data::AssetData + { + public: + AZ_CLASS_ALLOCATOR(ProceduralPrefabAsset, AZ::SystemAllocator, 0); + AZ_RTTI(ProceduralPrefabAsset, "{9B7C8459-471E-4EAD-A363-7990CC4065A9}", AZ::Data::AssetData); + + static bool UseProceduralPrefabs(); + + ProceduralPrefabAsset(const AZ::Data::AssetId& assetId = AZ::Data::AssetId()); + ~ProceduralPrefabAsset() override = default; + ProceduralPrefabAsset(const ProceduralPrefabAsset& rhs) = delete; + ProceduralPrefabAsset& operator=(const ProceduralPrefabAsset& rhs) = delete; + + const AZStd::string& GetTemplateName() const; + void SetTemplateName(AZStd::string templateName); + + AzToolsFramework::Prefab::TemplateId GetTemplateId() const; + void SetTemplateId(AzToolsFramework::Prefab::TemplateId templateId); + + static void Reflect(AZ::ReflectContext* context); + + private: + AZStd::string m_templateName; + AzToolsFramework::Prefab::TemplateId m_templateId; + }; + +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp new file mode 100644 index 0000000000..bee8a8bc3b --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace AzToolsFramework::Prefab +{ + void ScriptingPrefabLoader::Connect(PrefabLoaderInterface* prefabLoaderInterface) + { + AZ_Assert(prefabLoaderInterface, "prefabLoaderInterface must not be null"); + + m_prefabLoaderInterface = prefabLoaderInterface; + PrefabLoaderScriptingBus::Handler::BusConnect(); + } + + void ScriptingPrefabLoader::Disconnect() + { + PrefabLoaderScriptingBus::Handler::BusDisconnect(); + } + + AZ::Outcome ScriptingPrefabLoader::SaveTemplateToString(TemplateId templateId) + { + AZStd::string json; + + if (m_prefabLoaderInterface->SaveTemplateToString(templateId, json)) + { + return AZ::Success(json); + } + + return AZ::Failure(); + } +} // namespace AzToolsFramework::Prefab diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h new file mode 100644 index 0000000000..ec6219909e --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/ScriptingPrefabLoader.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + /** + * The Scripting Prefab Loader handles scripting-friendly API requests for the prefab loader + */ + class ScriptingPrefabLoader + : private PrefabLoaderScriptingBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(ScriptingPrefabLoader, AZ::SystemAllocator, 0); + AZ_RTTI(ScriptingPrefabLoader, "{ABC3C989-4D4F-41E7-B25B-B0FEF97177E6}"); + + void Connect(PrefabLoaderInterface* prefabLoaderInterface); + void Disconnect(); + + private: + + ////////////////////////////////////////////////////////////////////////// + // PrefabLoaderRequestBus implementation + AZ::Outcome SaveTemplateToString(TemplateId templateId) override; + ////////////////////////////////////////////////////////////////////////// + + PrefabLoaderInterface* m_prefabLoaderInterface = nullptr; + }; + } // namespace Prefab +} // namespace AzToolsFramework + diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 07dcd2ab20..d4b227c4ff 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -25,6 +26,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -218,6 +222,16 @@ namespace AzToolsFramework instantiateAction, &QAction::triggered, instantiateAction, [] { ContextMenu_InstantiatePrefab(); }); } + // Instantiate Procedural Prefab + if (AZ::Prefab::ProceduralPrefabAsset::UseProceduralPrefabs()) + { + QAction* action = menu->addAction(QObject::tr("Instantiate Procedural Prefab...")); + action->setToolTip(QObject::tr("Instantiates a procedural prefab file in a prefab.")); + + QObject::connect( + action, &QAction::triggered, action, [] { ContextMenu_InstantiateProceduralPrefab(); }); + } + menu->addSeparator(); bool itemWasShown = false; @@ -435,6 +449,38 @@ namespace AzToolsFramework } } + void PrefabIntegrationManager::ContextMenu_InstantiateProceduralPrefab() + { + AZStd::string prefabAssetPath; + bool hasUserForProceduralPrefabAsset = QueryUserForProceduralPrefabAsset(prefabAssetPath); + + if (hasUserForProceduralPrefabAsset) + { + AZ::EntityId parentId; + AZ::Vector3 position = AZ::Vector3::CreateZero(); + + EntityIdList selectedEntities; + ToolsApplicationRequestBus::BroadcastResult(selectedEntities, &ToolsApplicationRequests::GetSelectedEntities); + if (selectedEntities.size() == 1) + { + parentId = selectedEntities.front(); + AZ::TransformBus::EventResult(position, parentId, &AZ::TransformInterface::GetWorldTranslation); + } + else + { + // otherwise return since it needs to be inside an authored prefab + return; + } + + // Instantiating from context menu always puts the instance at the root level + auto createPrefabOutcome = s_prefabPublicInterface->InstantiatePrefab(prefabAssetPath, parentId, position); + if (!createPrefabOutcome.IsSuccess()) + { + WarnUserOfError("Prefab Instantiation Error", createPrefabOutcome.GetError()); + } + } + } + void PrefabIntegrationManager::ContextMenu_EditPrefab(AZ::EntityId containerEntity) { s_prefabFocusInterface->FocusOnOwningPrefab(containerEntity); @@ -690,6 +736,33 @@ namespace AzToolsFramework return true; } + bool PrefabIntegrationManager::QueryUserForProceduralPrefabAsset(AZStd::string& outPrefabAssetPath) + { + using namespace AzToolsFramework; + auto selection = AssetBrowser::AssetSelectionModel::AssetTypeSelection(azrtti_typeid()); + EditorRequests::Bus::Broadcast(&AzToolsFramework::EditorRequests::BrowseForAssets, selection); + + if (!selection.IsValid()) + { + return false; + } + + auto product = azrtti_cast(selection.GetResult()); + if (product == nullptr) + { + return false; + } + + outPrefabAssetPath = product->GetRelativePath(); + + auto asset = AZ::Data::AssetManager::Instance().GetAsset( + product->GetAssetId(), + azrtti_typeid(), + AZ::Data::AssetLoadBehavior::Default); + + return asset.BlockUntilLoadComplete() != AZ::Data::AssetData::AssetStatus::Error; + } + void PrefabIntegrationManager::WarnUserOfError(AZStd::string_view title, AZStd::string_view message) { QWidget* activeWindow = QApplication::activeWindow(); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h index 44e30b2013..696c05991c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h @@ -91,6 +91,7 @@ namespace AzToolsFramework // Context menu item handlers static void ContextMenu_CreatePrefab(AzToolsFramework::EntityIdList selectedEntities); static void ContextMenu_InstantiatePrefab(); + static void ContextMenu_InstantiateProceduralPrefab(); static void ContextMenu_EditPrefab(AZ::EntityId containerEntity); static void ContextMenu_SavePrefab(AZ::EntityId containerEntity); static void ContextMenu_DeleteSelected(); @@ -101,6 +102,7 @@ namespace AzToolsFramework const AZStd::string& suggestedName, const char* initialTargetDirectory, AZ::u32 prefabUserSettingsId, QWidget* activeWindow, AZStd::string& outPrefabName, AZStd::string& outPrefabFilePath); static bool QueryUserForPrefabFilePath(AZStd::string& outPrefabFilePath); + static bool QueryUserForProceduralPrefabAsset(AZStd::string& outPrefabAssetPath); static void WarnUserOfError(AZStd::string_view title, AZStd::string_view message); // Path and filename generation diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 0866b225c1..ff7fe58f1e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -152,6 +152,8 @@ set(FILES Entity/SliceEditorEntityOwnershipService.h Entity/SliceEditorEntityOwnershipService.cpp Entity/SliceEditorEntityOwnershipServiceBus.h + Entity/EntityUtilityComponent.h + Entity/EntityUtilityComponent.cpp Fingerprinting/TypeFingerprinter.h Fingerprinting/TypeFingerprinter.cpp FocusMode/FocusModeInterface.h @@ -646,9 +648,15 @@ set(FILES Prefab/PrefabLoader.h Prefab/PrefabLoader.cpp Prefab/PrefabLoaderInterface.h + Prefab/PrefabLoaderScriptingBus.h + Prefab/ScriptingPrefabLoader.h + Prefab/ScriptingPrefabLoader.cpp Prefab/PrefabSystemComponent.h Prefab/PrefabSystemComponent.cpp Prefab/PrefabSystemComponentInterface.h + Prefab/PrefabSystemScriptingBus.h + Prefab/PrefabSystemScriptingHandler.h + Prefab/PrefabSystemScriptingHandler.cpp Prefab/Instance/Instance.h Prefab/Instance/Instance.cpp Prefab/Instance/InstanceSerializer.h @@ -671,6 +679,8 @@ set(FILES Prefab/Instance/TemplateInstanceMapperInterface.h Prefab/Link/Link.h Prefab/Link/Link.cpp + Prefab/Procedural/ProceduralPrefabAsset.h + Prefab/Procedural/ProceduralPrefabAsset.cpp Prefab/PrefabPublicHandler.h Prefab/PrefabPublicHandler.cpp Prefab/PrefabPublicInterface.h diff --git a/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp new file mode 100644 index 0000000000..fce44d4833 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Entity/EntityUtilityComponentTests.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include + +namespace UnitTest +{ + // Global variables for communicating between Lua test code and C++ + AZ::EntityId g_globalEntityId = AZ::EntityId{}; + AZStd::string g_globalString = ""; + AzFramework::BehaviorComponentId g_globalComponentId = {}; + AZStd::vector g_globalComponentDetails = {}; + bool g_globalBool = false; + + class EntityUtilityComponentTests + : public ToolsApplicationFixture + { + void InitProperties() + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + ASSERT_NE(componentApplicationRequests, nullptr); + + auto behaviorContext = componentApplicationRequests->GetBehaviorContext(); + + ASSERT_NE(behaviorContext, nullptr); + + behaviorContext->Property("g_globalEntityId", BehaviorValueProperty(&g_globalEntityId)); + behaviorContext->Property("g_globalString", BehaviorValueProperty(&g_globalString)); + behaviorContext->Property("g_globalComponentId", BehaviorValueProperty(&g_globalComponentId)); + behaviorContext->Property("g_globalBool", BehaviorValueProperty(&g_globalBool)); + behaviorContext->Property("g_globalComponentDetails", BehaviorValueProperty(&g_globalComponentDetails)); + + g_globalEntityId = AZ::EntityId{}; + g_globalString = AZStd::string{}; + g_globalComponentId = AzFramework::BehaviorComponentId{}; + g_globalBool = false; + g_globalComponentDetails = AZStd::vector{}; + } + + void SetUpEditorFixtureImpl() override + { + InitProperties(); + } + + void TearDownEditorFixtureImpl() override + { + g_globalString.set_capacity(0); // Free all memory + g_globalComponentDetails.set_capacity(0); + } + }; + + TEST_F(EntityUtilityComponentTests, CreateEntity) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + my_entity = Entity(g_globalEntityId) + g_globalString = my_entity:GetName() + )LUA"); + + EXPECT_NE(g_globalEntityId, AZ::EntityId{}); + EXPECT_STREQ(g_globalString.c_str(), "test"); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_NE(entity, nullptr); + + // Test cleaning up, make sure the entity is destroyed + AzToolsFramework::EntityUtilityBus::Broadcast(&AzToolsFramework::EntityUtilityBus::Events::ResetEntityContext); + + entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_EQ(entity, nullptr); + } + + TEST_F(EntityUtilityComponentTests, CreateEntityEmptyName) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("") + )LUA"); + + EXPECT_NE(g_globalEntityId, AZ::EntityId{}); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + ASSERT_NE(entity, nullptr); + } + + TEST_F(EntityUtilityComponentTests, FindComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0 TransformComponent") + )LUA"); + + EXPECT_TRUE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, InvalidComponentName) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "ThisIsNotAComponent-Error") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); + EXPECT_FALSE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, InvalidComponentId) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "{1234-hello-world-this-is-not-an-id}") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); // Should get 1 error stating the type id is not valid + EXPECT_FALSE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, CreateComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + ent_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + g_globalComponentId = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(ent_id, "ScriptEditorComponent") + )LUA"); + + EXPECT_TRUE(g_globalComponentId.IsValid()); + } + + TEST_F(EntityUtilityComponentTests, UpdateComponent) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalEntityId = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + comp_id = EntityUtilityBus.Broadcast.GetOrAddComponentByTypeName(g_globalEntityId, "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent") + json_update = [[ + { + "Transform Data": { "Rotate": [0.0, 0.1, 180.0] } + } + ]] + g_globalBool = EntityUtilityBus.Broadcast.UpdateComponentForEntity(g_globalEntityId, comp_id, json_update); + )LUA"); + + EXPECT_TRUE(g_globalBool); + EXPECT_NE(g_globalEntityId, AZ::EntityId(AZ::EntityId::InvalidEntityId)); + + AZ::Entity* entity = AZ::Interface::Get()->FindEntity(g_globalEntityId); + + auto* transformComponent = entity->FindComponent(); + + ASSERT_NE(transformComponent, nullptr); + + AZ::Vector3 localRotation = transformComponent->GetLocalRotationQuaternion().GetEulerDegrees(); + + EXPECT_EQ(localRotation, AZ::Vector3(.0f, 0.1f, 180.0f)); + } + + TEST_F(EntityUtilityComponentTests, GetComponentJson) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalString = EntityUtilityBus.Broadcast.GetComponentDefaultJson("ScriptEditorComponent") + )LUA"); + + EXPECT_STRNE(g_globalString.c_str(), ""); + } + + TEST_F(EntityUtilityComponentTests, GetComponentJsonDoesNotExist) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + g_globalString = EntityUtilityBus.Broadcast.GetComponentDefaultJson("404") + )LUA"); + AZ_TEST_STOP_TRACE_SUPPRESSION(1); // 1 error: Failed to find component id for type name 404 + + EXPECT_STREQ(g_globalString.c_str(), ""); + } + + TEST_F(EntityUtilityComponentTests, SearchComponents) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalComponentDetails = EntityUtilityBus.Broadcast.FindMatchingComponents("Transform*") + )LUA"); + + // There should be 2 transform components + EXPECT_EQ(g_globalComponentDetails.size(), 2); + } + + TEST_F(EntityUtilityComponentTests, SearchComponentsNotFound) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + g_globalComponentDetails = EntityUtilityBus.Broadcast.FindMatchingComponents("404") + )LUA"); + + EXPECT_EQ(g_globalComponentDetails.size(), 0); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp new file mode 100644 index 0000000000..7e61c50629 --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabScriptingTests.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include + +namespace UnitTest +{ + TemplateId g_globalTemplateId = {}; + AZStd::string g_globalPrefabString = ""; + + class PrefabScriptingTest : public PrefabTestFixture + { + void InitProperties() const + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + ASSERT_NE(componentApplicationRequests, nullptr); + + auto behaviorContext = componentApplicationRequests->GetBehaviorContext(); + + ASSERT_NE(behaviorContext, nullptr); + + behaviorContext->Property("g_globalTemplateId", BehaviorValueProperty(&g_globalTemplateId)); + behaviorContext->Property("g_globalPrefabString", BehaviorValueProperty(&g_globalPrefabString)); + + g_globalTemplateId = TemplateId{}; + g_globalPrefabString = AZStd::string{}; + } + + void SetUpEditorFixtureImpl() override + { + InitProperties(); + } + + void TearDownEditorFixtureImpl() override + { + g_globalPrefabString.set_capacity(0); // Free all memory + } + }; + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + entities:push_back(my_id) + g_globalTemplateId = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + )LUA"); + + EXPECT_NE(g_globalTemplateId, TemplateId{}); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + + ASSERT_NE(prefabSystemComponentInterface, nullptr); + + TemplateReference templateRef = prefabSystemComponentInterface->FindTemplate(g_globalTemplateId); + + EXPECT_TRUE(templateRef); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab_NoEntities) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + g_globalTemplateId = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + )LUA"); + + EXPECT_NE(g_globalTemplateId, TemplateId{}); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + + ASSERT_NE(prefabSystemComponentInterface, nullptr); + + TemplateReference templateRef = prefabSystemComponentInterface->FindTemplate(g_globalTemplateId); + + EXPECT_TRUE(templateRef); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_CreatePrefab_NoPath) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + AZ_TEST_START_TRACE_SUPPRESSION; + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + template_id = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "") + )LUA"); + /* + error: PrefabSystemComponent::CreateTemplateFromInstance - Attempted to create a prefab template from an instance without a source file path. Unable to proceed. + error: Failed to create a Template associated with file path during CreatePrefab. + error: Failed to create prefab + */ + AZ_TEST_STOP_TRACE_SUPPRESSION(3); + } + + TEST_F(PrefabScriptingTest, PrefabScripting_SaveToString) + { + AZ::ScriptContext sc; + auto behaviorContext = AZ::Interface::Get()->GetBehaviorContext(); + + sc.BindTo(behaviorContext); + sc.Execute(R"LUA( + my_id = EntityUtilityBus.Broadcast.CreateEditorReadyEntity("test") + entities = vector_EntityId() + entities:push_back(my_id) + template_id = PrefabSystemScriptingBus.Broadcast.CreatePrefab(entities, "test.prefab") + my_result = PrefabLoaderScriptingBus.Broadcast.SaveTemplateToString(template_id) + + if my_result:IsSuccess() then + g_globalPrefabString = my_result:GetValue() + end + )LUA"); + + auto prefabSystemComponentInterface = AZ::Interface::Get(); + prefabSystemComponentInterface->RemoveAllTemplates(); + + EXPECT_STRNE(g_globalPrefabString.c_str(), ""); + TemplateId templateFromString = AZ::Interface::Get()->LoadTemplateFromString(g_globalPrefabString); + + EXPECT_NE(templateFromString, InvalidTemplateId); + + // Create another entity for comparison purposes + AZ::EntityId entityId; + AzToolsFramework::EntityUtilityBus::BroadcastResult( + entityId, &AzToolsFramework::EntityUtilityBus::Events::CreateEditorReadyEntity, "test"); + + AZ::Entity* testEntity = AZ::Interface::Get()->FindEntity(entityId); + + // Instantiate the prefab we saved + AZStd::unique_ptr instance = prefabSystemComponentInterface->InstantiatePrefab(templateFromString); + + EXPECT_NE(instance, nullptr); + + AZStd::vector loadedEntities; + + // Get the entities from the instance + instance->GetConstEntities( + [&loadedEntities](const AZ::Entity& entity) + { + loadedEntities.push_back(&entity); + return true; + }); + + // Make sure the instance has an entity with the same number of components as our test entity + EXPECT_EQ(loadedEntities.size(), 1); + EXPECT_EQ(loadedEntities[0]->GetComponents().size(), testEntity->GetComponents().size()); + + g_globalPrefabString.set_capacity(0); // Free all memory + } + +} diff --git a/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp b/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp new file mode 100644 index 0000000000..0b9e73bbac --- /dev/null +++ b/Code/Framework/AzToolsFramework/Tests/Prefab/ProceduralPrefabAssetTests.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include + +namespace UnitTest +{ + class ProceduralPrefabAssetTest + : public PrefabTestFixture + { + void SetUpEditorFixtureImpl() override + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + ASSERT_NE(componentApplicationRequests, nullptr); + + auto* behaviorContext = componentApplicationRequests->GetBehaviorContext(); + ASSERT_NE(behaviorContext, nullptr); + + auto* jsonRegistrationContext = componentApplicationRequests->GetJsonRegistrationContext(); + ASSERT_NE(jsonRegistrationContext, nullptr); + + auto* serializeContext = componentApplicationRequests->GetSerializeContext(); + ASSERT_NE(serializeContext, nullptr); + + AZ::Prefab::ProceduralPrefabAsset::Reflect(serializeContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(behaviorContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(jsonRegistrationContext); + } + + void TearDownEditorFixtureImpl() override + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + componentApplicationRequests->GetJsonRegistrationContext()->EnableRemoveReflection(); + AZ::Prefab::ProceduralPrefabAsset::Reflect(componentApplicationRequests->GetJsonRegistrationContext()); + } + }; + + TEST_F(ProceduralPrefabAssetTest, ReflectContext_AccessMethods_Works) + { + AZ::ComponentApplicationRequests* componentApplicationRequests = AZ::Interface::Get(); + + auto* serializeContext = componentApplicationRequests->GetSerializeContext(); + EXPECT_TRUE(!serializeContext->CreateAny(azrtti_typeid()).empty()); + EXPECT_TRUE(!serializeContext->CreateAny(azrtti_typeid()).empty()); + + auto* jsonRegistrationContext = componentApplicationRequests->GetJsonRegistrationContext(); + EXPECT_TRUE(jsonRegistrationContext->GetSerializerForSerializerType(azrtti_typeid())); + } + + TEST_F(ProceduralPrefabAssetTest, ProceduralPrefabAsset_AccessMethods_Works) + { + const auto templateId = TemplateId(1); + const auto prefabString = "fake.prefab"; + + AZ::Prefab::ProceduralPrefabAsset asset{}; + asset.SetTemplateId(templateId); + EXPECT_EQ(asset.GetTemplateId(), templateId); + + asset.SetTemplateName(prefabString); + EXPECT_EQ(asset.GetTemplateName(), prefabString); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomData_AccessMethods_Works) + { + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("boolValue", true, dom.GetAllocator()); + + AZ::Prefab::PrefabDomData prefabDomData; + prefabDomData.CopyValue(dom); + + const AzToolsFramework::Prefab::PrefabDom& result = prefabDomData.GetValue(); + EXPECT_TRUE(result.HasMember("boolValue")); + EXPECT_TRUE(result.FindMember("boolValue")->value.GetBool()); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomDataJsonSerializer_Load_Works) + { + AZ::Prefab::PrefabDomData prefabDomData; + + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("member", "value", dom.GetAllocator()); + + AZ::Prefab::PrefabDomDataJsonSerializer prefabDomDataJsonSerializer; + AZ::JsonDeserializerSettings settings; + settings.m_reporting = [](auto, auto, auto) + { + AZ::JsonSerializationResult::ResultCode result(AZ::JsonSerializationResult::Tasks::ReadField); + return result; + }; + AZ::JsonDeserializerContext context{ settings }; + + auto result = prefabDomDataJsonSerializer.Load(&prefabDomData, azrtti_typeid(prefabDomData), dom, context); + EXPECT_EQ(result.GetResultCode().GetOutcome(), AZ::JsonSerializationResult::Outcomes::DefaultsUsed); + EXPECT_TRUE(prefabDomData.GetValue().HasMember("member")); + EXPECT_STREQ(prefabDomData.GetValue().FindMember("member")->value.GetString(), "value"); + } + + TEST_F(ProceduralPrefabAssetTest, PrefabDomDataJsonSerializer_Store_Works) + { + AzToolsFramework::Prefab::PrefabDom dom; + dom.SetObject(); + dom.AddMember("member", "value", dom.GetAllocator()); + + AZ::Prefab::PrefabDomData prefabDomData; + prefabDomData.CopyValue(dom); + + AZ::Prefab::PrefabDomDataJsonSerializer prefabDomDataJsonSerializer; + AzToolsFramework::Prefab::PrefabDom outputValue; + AZ::JsonSerializerSettings settings; + settings.m_reporting = [](auto, auto, auto) + { + AZ::JsonSerializationResult::ResultCode result(AZ::JsonSerializationResult::Tasks::WriteValue); + return result; + }; + AZ::JsonSerializerContext context{ settings, outputValue.GetAllocator() }; + auto result = prefabDomDataJsonSerializer.Store(outputValue, &prefabDomData, nullptr, azrtti_typeid(prefabDomData), context); + EXPECT_EQ(result.GetResultCode().GetOutcome(), AZ::JsonSerializationResult::Outcomes::DefaultsUsed); + EXPECT_TRUE(outputValue.HasMember("member")); + EXPECT_STREQ(outputValue.FindMember("member")->value.GetString(), "value"); + } +} diff --git a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake index 11ea5a0b38..87d522c4a6 100644 --- a/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake +++ b/Code/Framework/AzToolsFramework/Tests/aztoolsframeworktests_files.cmake @@ -27,6 +27,7 @@ set(FILES Entity/EditorEntityHelpersTests.cpp Entity/EditorEntitySearchComponentTests.cpp Entity/EditorEntitySelectionTests.cpp + Entity/EntityUtilityComponentTests.cpp EntityIdQLabelTests.cpp EntityInspectorTests.cpp EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp @@ -91,6 +92,8 @@ set(FILES Prefab/SpawnableSortEntitiesTestFixture.cpp Prefab/SpawnableSortEntitiesTestFixture.h Prefab/SpawnableSortEntitiesTests.cpp + Prefab/PrefabScriptingTests.cpp + Prefab/ProceduralPrefabAssetTests.cpp PropertyIntCtrlCommonTests.h PropertyIntSliderCtrlTests.cpp PropertyIntSpinCtrlTests.cpp diff --git a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp index 9c9c517020..da2edcc51f 100644 --- a/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilder/AssetBuilderApplication.cpp @@ -36,6 +36,7 @@ #include #include #include +#include namespace AssetBuilder { @@ -80,6 +81,7 @@ AZ::ComponentTypeList AssetBuilderApplication::GetRequiredSystemComponents() con azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), + azrtti_typeid(), }); return components; diff --git a/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp b/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp index 50a472c44d..c33fc59d97 100644 --- a/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp +++ b/Code/Tools/AssetProcessor/native/ui/AssetTreeFilterModel.cpp @@ -62,7 +62,10 @@ namespace AssetProcessor { searchStr = searchStr.mid(0, subidPos); } - AZ::Uuid filterAsUuid = AZ::Uuid::CreateStringPermissive(searchStr.toUtf8(), 0); + + // Cap the string to some reasonable length, we don't want to try parsing an entire book + size_t cappedStringLength = searchStr.length() > 60 ? 60 : searchStr.length(); + AZ::Uuid filterAsUuid = AZ::Uuid::CreateStringPermissive(searchStr.toUtf8(), cappedStringLength); return DescendantMatchesFilter(*assetTreeItem, filter, filterAsUuid); } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp index ab260eba4d..1efec493c1 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/GraphObjectProxy.cpp @@ -194,8 +194,8 @@ namespace AZ if (baseClass) { m_behaviorClass = behaviorClass; + return true; } - return true; } return false; } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp index b6c7eef90f..31b74405d2 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp @@ -47,6 +47,16 @@ namespace AZ return m_sourceGuid; } + void Scene::SetWatchFolder(const AZStd::string& watchFolder) + { + m_watchFolder = watchFolder; + } + + const AZStd::string& Scene::GetWatchFolder() const + { + return m_watchFolder; + } + void Scene::SetManifestFilename(const AZStd::string& name) { m_manifestFilename = name; @@ -111,6 +121,7 @@ namespace AZ ->Property("sourceGuid", BehaviorValueGetter(&Scene::m_sourceGuid), nullptr) ->Property("graph", BehaviorValueGetter(&Scene::m_graph), nullptr) ->Property("manifest", BehaviorValueGetter(&Scene::m_manifest), nullptr) + ->Property("watchFolder", BehaviorValueGetter(&Scene::m_watchFolder), nullptr) ->Constant("SceneOrientation_YUp", BehaviorConstant(SceneOrientation::YUp)) ->Constant("SceneOrientation_ZUp", BehaviorConstant(SceneOrientation::ZUp)) ->Constant("SceneOrientation_XUp", BehaviorConstant(SceneOrientation::XUp)) diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h index 49320c4592..0185c23178 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h +++ b/Code/Tools/SceneAPI/SceneCore/Containers/Scene.h @@ -34,6 +34,9 @@ namespace AZ const AZStd::string& GetSourceFilename() const; const Uuid& GetSourceGuid() const; + void SetWatchFolder(const AZStd::string& watchFolder); + const AZStd::string& GetWatchFolder() const; + void SetManifestFilename(const AZStd::string& name); void SetManifestFilename(AZStd::string&& name); const AZStd::string& GetManifestFilename() const; @@ -59,6 +62,7 @@ namespace AZ AZStd::string m_name; AZStd::string m_manifestFilename; AZStd::string m_sourceFilename; + AZStd::string m_watchFolder; Uuid m_sourceGuid; SceneGraph m_graph; SceneManifest m_manifest; diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp index cae0dc45d5..3d00dccec3 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneGraph.cpp @@ -97,7 +97,7 @@ namespace AZ GraphObjectProxy* proxy = aznew GraphObjectProxy(graphObject); return proxy; } - return nullptr; + return aznew GraphObjectProxy(nullptr); }); } } diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp index 664c5f1272..8e3f06b4cb 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.cpp @@ -36,8 +36,7 @@ namespace AZ { namespace Containers { - //! Protects from allocating too much memory. The choice of a 5MB threshold is arbitrary. - const size_t MaxSceneManifestFileSizeInBytes = 5 * 1024 * 1024; + const char ErrorWindowName[] = "SceneManifest"; diff --git a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h index 4386d4fd8c..f3838096ad 100644 --- a/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h +++ b/Code/Tools/SceneAPI/SceneCore/Containers/SceneManifest.h @@ -41,6 +41,8 @@ namespace AZ AZ_RTTI(SceneManifest, "{9274AD17-3212-4651-9F3B-7DCCB080E467}"); + static constexpr size_t MaxSceneManifestFileSizeInBytes = AZStd::numeric_limits::max(); + virtual ~SceneManifest(); static AZStd::shared_ptr SceneManifestConstDataConverter( diff --git a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp index a182e4f02d..c98fa63916 100644 --- a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -73,6 +74,10 @@ namespace AZ { } + void AssetImportRequest::GetGeneratedManifestExtension(AZStd::string& /*result*/) + { + } + void AssetImportRequest::GetSupportedFileExtensions(AZStd::unordered_set& /*extensions*/) { } @@ -103,14 +108,34 @@ namespace AZ AZ_UNUSED(value); } + void AssetImportRequest::GetManifestDependencyPaths(AZStd::vector&) + { + } + AZStd::shared_ptr AssetImportRequest::LoadSceneFromVerifiedPath(const AZStd::string& assetFilePath, const Uuid& sourceGuid, - RequestingApplication requester, const Uuid& loadingComponentUuid) + RequestingApplication requester, const Uuid& loadingComponentUuid) { AZStd::string sceneName; AzFramework::StringFunc::Path::GetFileName(assetFilePath.c_str(), sceneName); AZStd::shared_ptr scene = AZStd::make_shared(AZStd::move(sceneName)); AZ_Assert(scene, "Unable to create new scene for asset importing."); + Data::AssetInfo assetInfo; + AZStd::string watchFolder; + bool result = false; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(result, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourceUUID, sourceGuid, assetInfo, watchFolder); + + if (result) + { + scene->SetWatchFolder(watchFolder); + } + else + { + AZ_Error( + "AssetImportRequest", false, "Failed to get watch folder for source %s", + sourceGuid.ToString().c_str()); + } + // Unique pointer, will deactivate and clean up once going out of scope. SceneCore::EntityConstructor::EntityPointer loaders = SceneCore::EntityConstructor::BuildEntity("Scene Loading", loadingComponentUuid); diff --git a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h index 8b6e119f99..a2446c5ff8 100644 --- a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h +++ b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.h @@ -78,6 +78,8 @@ namespace AZ virtual void GetSupportedFileExtensions(AZStd::unordered_set& extensions); //! Gets the file extension for the manifest. virtual void GetManifestExtension(AZStd::string& result); + //! Gets the file extension for the generated manifest. + virtual void GetGeneratedManifestExtension(AZStd::string& result); //! Before asset loading starts this is called to allow for any required initialization. virtual ProcessingResult PrepareForAssetLoading(Containers::Scene& scene, RequestingApplication requester); @@ -97,6 +99,23 @@ namespace AZ // Get scene processing project setting: UseCustomNormal virtual void AreCustomNormalsUsed(bool & value); + /*! + Optional method for reporting source file dependencies that may exist in the scene manifest + Paths is a vector of JSON Path strings, relative to the IRule object + For example, the following path: /scriptFilename + Would match with this manifest: + + { + "values": [ + { + "$type": "Test", + "scriptFilename": "file.py" + } + ] + } + */ + virtual void GetManifestDependencyPaths(AZStd::vector& paths); + //! Utility function to load an asset and manifest from file by using the EBus functions above. //! @param assetFilePath The absolute path to the source file (not the manifest). //! @param sourceGuid The guid assigned to the source file (not the manifest). diff --git a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp index 39045da5b9..f7d3f073b9 100644 --- a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.cpp @@ -56,8 +56,14 @@ namespace AZ result = s_extension; } + void ManifestImportRequestHandler::GetGeneratedManifestExtension(AZStd::string& result) + { + result = s_extension; + result.append(s_generated); + } + Events::LoadingResult ManifestImportRequestHandler::LoadAsset(Containers::Scene& scene, const AZStd::string& path, - const Uuid& /*guid*/, RequestingApplication /*requester*/) + const Uuid& /*guid*/, RequestingApplication /*requester*/) { AZStd::string manifestPath = path + s_extension; diff --git a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h index 7659f6908f..00c802cb6b 100644 --- a/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h +++ b/Code/Tools/SceneAPI/SceneCore/Import/ManifestImportRequestHandler.h @@ -31,6 +31,7 @@ namespace AZ static void Reflect(ReflectContext* context); void GetManifestExtension(AZStd::string& result) override; + void GetGeneratedManifestExtension(AZStd::string& result) override; Events::LoadingResult LoadAsset(Containers::Scene& scene, const AZStd::string& path, const Uuid& guid, RequestingApplication requester) override; diff --git a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp index 2e6503d195..8d413b6038 100644 --- a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp +++ b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp @@ -19,6 +19,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -99,6 +102,7 @@ namespace AZ::SceneAPI::Behaviors { AZStd::string result; CallResult(result, FN_OnUpdateManifest, scene); + ScriptBuildingNotificationBusHandler::BusDisconnect(); return result; } @@ -110,6 +114,7 @@ namespace AZ::SceneAPI::Behaviors { ExportProductList result; CallResult(result, FN_OnPrepareForExport, scene, outputDirectory, platformIdentifier, productList); + ScriptBuildingNotificationBusHandler::BusDisconnect(); return result; } @@ -168,21 +173,9 @@ namespace AZ::SceneAPI::Behaviors UnloadPython(); } - bool ScriptProcessorRuleBehavior::LoadPython(const AZ::SceneAPI::Containers::Scene& scene) + bool ScriptProcessorRuleBehavior::LoadPython(const AZ::SceneAPI::Containers::Scene& scene, AZStd::string& scriptPath) { - if (m_editorPythonEventsInterface && !m_scriptFilename.empty()) - { - return true; - } - - // get project folder - auto settingsRegistry = AZ::SettingsRegistry::Get(); - AZ::IO::FixedMaxPath projectPath; - if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) - { - return false; - } - + int scriptDiscoveryAttempts = 0; const AZ::SceneAPI::Containers::SceneManifest& manifest = scene.GetManifest(); auto view = Containers::MakeDerivedFilterView(manifest.GetValueStorage()); for (const auto& scriptItem : view) @@ -194,9 +187,21 @@ namespace AZ::SceneAPI::Behaviors continue; } + ++scriptDiscoveryAttempts; + // check for file exist via absolute path if (!IO::FileIOBase::GetInstance()->Exists(scriptFilename.c_str())) { + // get project folder + auto settingsRegistry = AZ::SettingsRegistry::Get(); + AZ::IO::FixedMaxPath projectPath; + if (!settingsRegistry->Get(projectPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_ProjectPath)) + { + AZ_Error("scene", false, "With (%s) could not find Project Path during script discovery.", + scene.GetManifestFilename().c_str()); + return false; + } + // check for script in the project folder AZ::IO::FixedMaxPath projectScriptPath = projectPath / scriptFilename; if (!IO::FileIOBase::GetInstance()->Exists(projectScriptPath.c_str())) @@ -209,32 +214,47 @@ namespace AZ::SceneAPI::Behaviors scriptFilename = AZStd::move(projectScriptPath); } - // lazy load the Python interface - auto editorPythonEventsInterface = AZ::Interface::Get(); - if (editorPythonEventsInterface->IsPythonActive() == false) - { - const bool silenceWarnings = false; - if (editorPythonEventsInterface->StartPython(silenceWarnings) == false) - { - editorPythonEventsInterface = nullptr; - } - } + scriptPath = scriptFilename.c_str(); + break; + } - // both Python and the script need to be ready - if (editorPythonEventsInterface == nullptr || scriptFilename.empty()) - { - AZ_Warning("scene", false,"The scene manifest (%s) attempted to use script(%s) but Python is not enabled;" - "please add the EditorPythonBinding gem & PythonAssetBuilder gem to your project.", - scene.GetManifestFilename().c_str(), scriptFilename.c_str()); + if (scriptPath.empty()) + { + AZ_Warning("scene", scriptDiscoveryAttempts == 0, + "The scene manifest (%s) attempted to use script rule, but no script file path could be found.", + scene.GetManifestFilename().c_str()); + return false; + } + + // already prepared the Python VM? + if (m_editorPythonEventsInterface) + { + return true; + } - return false; + // lazy load the Python interface + auto editorPythonEventsInterface = AZ::Interface::Get(); + if (editorPythonEventsInterface->IsPythonActive() == false) + { + const bool silenceWarnings = false; + if (editorPythonEventsInterface->StartPython(silenceWarnings) == false) + { + editorPythonEventsInterface = nullptr; } + } - m_editorPythonEventsInterface = editorPythonEventsInterface; - m_scriptFilename = scriptFilename.c_str(); - return true; + // both Python and the script need to be ready + if (editorPythonEventsInterface == nullptr) + { + AZ_Warning("scene", false, + "The scene manifest (%s) attempted to prepare Python but Python can not start", + scene.GetManifestFilename().c_str()); + + return false; } - return false; + + m_editorPythonEventsInterface = editorPythonEventsInterface; + return true; } void ScriptProcessorRuleBehavior::UnloadPython() @@ -251,11 +271,13 @@ namespace AZ::SceneAPI::Behaviors { using namespace AzToolsFramework; - auto executeCallback = [this, &context]() + AZStd::string scriptPath; + + auto executeCallback = [&context, &scriptPath]() { // set up script's hook callback EditorPythonRunnerRequestBus::Broadcast(&EditorPythonRunnerRequestBus::Events::ExecuteByFilename, - m_scriptFilename.c_str()); + scriptPath.c_str()); // call script's callback to allow extra products ExportProductList extraProducts; @@ -279,7 +301,7 @@ namespace AZ::SceneAPI::Behaviors } }; - if (LoadPython(context.GetScene())) + if (LoadPython(context.GetScene(), scriptPath)) { EditorPythonConsoleNotificationHandler logger; m_editorPythonEventsInterface->ExecuteWithLock(executeCallback); @@ -306,23 +328,19 @@ namespace AZ::SceneAPI::Behaviors { using namespace AzToolsFramework; - // This behavior persists on the same AssetBuilder. Clear the script file name so that if - // this builder processes a scene file with a script file name, and then later processes - // a scene without a script file name, it won't run the old script on the new scene. - m_scriptFilename.clear(); - if (action != ManifestAction::Update) { return Events::ProcessingResult::Ignored; } - if (LoadPython(scene)) + AZStd::string scriptPath; + if (LoadPython(scene, scriptPath)) { AZStd::string manifestUpdate; - auto executeCallback = [this, &scene, &manifestUpdate]() + auto executeCallback = [&scene, &manifestUpdate, &scriptPath]() { EditorPythonRunnerRequestBus::Broadcast(&EditorPythonRunnerRequestBus::Events::ExecuteByFilename, - m_scriptFilename.c_str()); + scriptPath.c_str()); ScriptBuildingNotificationBus::BroadcastResult(manifestUpdate, &ScriptBuildingNotificationBus::Events::OnUpdateManifest, scene); @@ -331,6 +349,9 @@ namespace AZ::SceneAPI::Behaviors EditorPythonConsoleNotificationHandler logger; m_editorPythonEventsInterface->ExecuteWithLock(executeCallback); + EntityUtilityBus::Broadcast(&EntityUtilityBus::Events::ResetEntityContext); + AZ::Interface::Get()->RemoveAllTemplates(); + // attempt to load the manifest string back to a JSON-scene-manifest auto sceneManifestLoader = AZStd::make_unique(); auto loadOutcome = sceneManifestLoader->LoadFromString(manifestUpdate); @@ -347,4 +368,8 @@ namespace AZ::SceneAPI::Behaviors return Events::ProcessingResult::Ignored; } + void ScriptProcessorRuleBehavior::GetManifestDependencyPaths(AZStd::vector& paths) + { + paths.emplace_back("/scriptFilename"); + } } // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h index fa70a12b0d..a9ddf88df9 100644 --- a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h +++ b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.h @@ -37,6 +37,7 @@ namespace AZ::SceneAPI::Behaviors , public Events::AssetImportRequestBus::Handler { public: + AZ_COMPONENT(ScriptProcessorRuleBehavior, "{24054E73-1B92-43B0-AC13-174B2F0E3F66}", SceneCore::BehaviorComponent); ~ScriptProcessorRuleBehavior() override = default; @@ -44,22 +45,21 @@ namespace AZ::SceneAPI::Behaviors SCENE_DATA_API void Activate() override; SCENE_DATA_API void Deactivate() override; static void Reflect(ReflectContext* context); - + // AssetImportRequestBus::Handler SCENE_DATA_API Events::ProcessingResult UpdateManifest( Containers::Scene& scene, ManifestAction action, RequestingApplication requester) override; - + SCENE_DATA_API void GetManifestDependencyPaths(AZStd::vector& paths) override; protected: - bool LoadPython(const AZ::SceneAPI::Containers::Scene& scene); + bool LoadPython(const AZ::SceneAPI::Containers::Scene& scene, AZStd::string& scriptPath); void UnloadPython(); bool DoPrepareForExport(Events::PreExportEventContext& context); private: AzToolsFramework::EditorPythonEventsInterface* m_editorPythonEventsInterface = nullptr; - AZStd::string m_scriptFilename; struct ExportEventHandler; AZStd::shared_ptr m_exportEventHandler; diff --git a/Gems/Prefab/PrefabBuilder/CMakeLists.txt b/Gems/Prefab/PrefabBuilder/CMakeLists.txt index 450b8d0408..9aedbd3d99 100644 --- a/Gems/Prefab/PrefabBuilder/CMakeLists.txt +++ b/Gems/Prefab/PrefabBuilder/CMakeLists.txt @@ -13,6 +13,9 @@ endif() ly_add_target( NAME PrefabBuilder.Static STATIC NAMESPACE Gem + INCLUDE_DIRECTORIES + PRIVATE + . FILES_CMAKE prefabbuilder_files.cmake BUILD_DEPENDENCIES @@ -20,6 +23,9 @@ ly_add_target( AZ::AzCore AZ::AzToolsFramework AZ::AssetBuilderSDK + AZ::SceneCore + AZ::SceneData + 3rdParty::RapidJSON ) ly_add_target( @@ -35,7 +41,8 @@ ly_add_target( Gem::PrefabBuilder.Static ) -# the prefab builder only needs to be active in builders +# create an alias for the tool version +ly_create_alias(NAME PrefabBuilder.Tools NAMESPACE Gem TARGETS Gem::PrefabBuilder.Builders) # we automatically add this gem, if it is present, to all our known set of builder applications: ly_enable_gems(GEMS PrefabBuilder) diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp b/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp index 762f459d9d..2bf7026549 100644 --- a/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp +++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderModule.cpp @@ -8,6 +8,7 @@ #include #include +#include namespace AZ::Prefab { @@ -22,7 +23,8 @@ namespace AZ::Prefab : Module() { m_descriptors.insert(m_descriptors.end(), { - PrefabBuilderComponent::CreateDescriptor() + PrefabBuilderComponent::CreateDescriptor(), + AZ::SceneAPI::Behaviors::PrefabGroupBehavior::CreateDescriptor() }); } }; diff --git a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h index 3aea173ba4..2aec317e69 100644 --- a/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h +++ b/Gems/Prefab/PrefabBuilder/PrefabBuilderTests.h @@ -13,6 +13,7 @@ #include #include #include +#include namespace UnitTest { diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h new file mode 100644 index 0000000000..c2f8313b95 --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/IPrefabGroup.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include + +namespace AZ::SceneAPI::DataTypes +{ + class IPrefabGroup + : public ISceneNodeGroup + { + public: + AZ_RTTI(IPrefabGroup, "{7E50FAEF-3379-4521-99C5-B428FDEE3B7B}", ISceneNodeGroup); + + ~IPrefabGroup() override = default; + virtual AzToolsFramework::Prefab::PrefabDomConstReference GetPrefabDomRef() const = 0; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp new file mode 100644 index 0000000000..856aba979b --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace UnitTest +{ + class PrefabBehaviorTests + : public PrefabBuilderTests + { + public: + static void SetUpTestCase() + { + // Allocator needed by SceneCore + if (!AZ::AllocatorInstance().IsReady()) + { + AZ::AllocatorInstance().Create(); + } + AZ::SceneAPI::SceneCoreStandaloneAllocator::Initialize(AZ::Environment::GetInstance()); + } + + static void TearDownTestCase() + { + AZ::SceneAPI::SceneCoreStandaloneAllocator::TearDown(); + AZ::AllocatorInstance().Destroy(); + } + + void SetUp() override + { + PrefabBuilderTests::SetUp(); + m_prefabGroupBehavior = AZStd::make_unique(); + m_prefabGroupBehavior->Activate(); + + // Mocking the asset system replacing the AssetSystem::AssetSystemComponent + AZ::Entity* systemEntity = m_app.FindEntity(AZ::SystemEntityId); + systemEntity->FindComponent()->Deactivate(); + using namespace testing; + ON_CALL(m_assetSystemRequestMock, GetSourceInfoBySourcePath(_, _, _)).WillByDefault([](auto* path, auto& info, auto&) + { + return PrefabBehaviorTests::OnGetSourceInfoBySourcePath(path, info); + }); + m_assetSystemRequestMock.BusConnect(); + } + + void TearDown() override + { + m_assetSystemRequestMock.BusDisconnect(); + + m_prefabGroupBehavior->Deactivate(); + m_prefabGroupBehavior.reset(); + + PrefabBuilderTests::TearDown(); + } + + static bool OnGetSourceInfoBySourcePath(AZStd::string_view sourcePath, AZ::Data::AssetInfo& assetInfo) + { + if (sourcePath == AZStd::string_view("mock")) + { + assetInfo.m_assetId = AZ::Uuid::CreateRandom(); + assetInfo.m_assetType = azrtti_typeid(); + assetInfo.m_relativePath = "mock/path"; + assetInfo.m_sizeBytes = 0; + } + return true; + } + + struct TestPreExportEventContext + { + TestPreExportEventContext() + : m_scene("test_context") + { + using namespace AZ::SceneAPI::Events; + m_preExportEventContext = AZStd::make_unique(m_productList, m_outputDirectory, m_scene, "mock"); + } + + void SetOutputDirectory(AZStd::string outputDirectory) + { + using namespace AZ::SceneAPI::Events; + m_outputDirectory = AZStd::move(outputDirectory); + m_preExportEventContext = AZStd::make_unique(m_productList, m_outputDirectory, m_scene, "mock"); + } + + AZStd::unique_ptr m_preExportEventContext; + AZ::SceneAPI::Events::ExportProductList m_productList; + AZStd::string m_outputDirectory; + AZ::SceneAPI::Containers::Scene m_scene; + }; + + AZStd::unique_ptr m_prefabGroupBehavior; + testing::NiceMock m_assetSystemRequestMock; + }; + + TEST_F(PrefabBehaviorTests, PrefabBehavior_EmptyContextIgnored_Works) + { + auto context = TestPreExportEventContext{}; + + auto result = AZ::SceneAPI::Events::ProcessingResult::Failure; + AZ::SceneAPI::Events::CallProcessorBus::BroadcastResult( + result, + &AZ::SceneAPI::Events::CallProcessorBus::Events::Process, + context.m_preExportEventContext.get()); + + EXPECT_EQ(result, AZ::SceneAPI::Events::ProcessingResult::Ignored); + } + + TEST_F(PrefabBehaviorTests, PrefabBehavior_SimplePrefab_Works) + { + auto context = TestPreExportEventContext{}; + + // check for the file at /mock/fake_prefab.procprefab + AZ::Test::ScopedAutoTempDirectory tempDir; + context.SetOutputDirectory(tempDir.GetDirectory()); + + auto jsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(Data::jsonPrefab); + ASSERT_TRUE(jsonOutcome); + + auto prefabGroup = AZStd::make_shared(); + prefabGroup.get()->SetId(AZ::Uuid::CreateRandom()); + prefabGroup.get()->SetName("fake_prefab"); + prefabGroup.get()->SetPrefabDom(AZStd::move(jsonOutcome.GetValue())); + context.m_scene.GetManifest().AddEntry(prefabGroup); + context.m_scene.SetSource("mock", AZ::Uuid::CreateRandom()); + + auto result = AZ::SceneAPI::Events::ProcessingResult::Failure; + AZ::SceneAPI::Events::CallProcessorBus::BroadcastResult( + result, + &AZ::SceneAPI::Events::CallProcessorBus::Events::Process, + context.m_preExportEventContext.get()); + + EXPECT_EQ(result, AZ::SceneAPI::Events::ProcessingResult::Success); + + AZStd::string pathStr; + AzFramework::StringFunc::Path::ConstructFull(tempDir.GetDirectory(), "mock/fake_prefab.procprefab", pathStr, true); + if (!AZ::IO::SystemFile::Exists(pathStr.c_str())) + { + AZ_Warning("testing", false, "The product asset (%s) is missing", pathStr.c_str()); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl new file mode 100644 index 0000000000..b39f782a1e --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabBehaviorTests.inl @@ -0,0 +1,104 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +namespace UnitTest +{ + namespace Data + { + const char* jsonPrefab = R"JSON( + { + "ContainerEntity": { + "Id": "ContainerEntity", + "Name": "test_template_1", + "Components": { + "Component_[12122553907433030840]": { + "$type": "EditorVisibilityComponent", + "Id": 12122553907433030840 + }, + "Component_[5666150279650800686]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 5666150279650800686, + "Parent Entity": "" + }, + "Component_[8790726658974076423]": { + "$type": "EditorOnlyEntityComponent", + "Id": 8790726658974076423 + } + } + }, + "Entities": { + "Entity_[1588652751483]": { + "Id": "Entity_[1588652751483]", + "Name": "root", + "Components": { + "Component_[11872748096995986607]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 11872748096995986607, + "Parent Entity": "ContainerEntity", + "Transform Data": { + "Rotate": [ + 0.0, + 0.10000000149011612, + 180.0 + ] + } + }, + "Component_[12138841758570858610]": { + "$type": "EditorVisibilityComponent", + "Id": 12138841758570858610 + }, + "Component_[15735658354806796004]": { + "$type": "EditorOnlyEntityComponent", + "Id": 15735658354806796004 + } + } + }, + "Entity_[1592947718779]": { + "Id": "Entity_[1592947718779]", + "Name": "cube", + "Components": { + "Component_[2505301170249328189]": { + "$type": "EditorOnlyEntityComponent", + "Id": 2505301170249328189 + }, + "Component_[3716170894544198343]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 3716170894544198343, + "Parent Entity": "Entity_[1588652751483]" + }, + "Component_[5862175558847453681]": { + "$type": "EditorVisibilityComponent", + "Id": 5862175558847453681 + } + } + }, + "Entity_[1597242686075]": { + "Id": "Entity_[1597242686075]", + "Name": "cubeKid", + "Components": { + "Component_[10128771992421174485]": { + "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent", + "Id": 10128771992421174485, + "Parent Entity": "Entity_[1592947718779]" + }, + "Component_[14936165953779771344]": { + "$type": "EditorVisibilityComponent", + "Id": 14936165953779771344 + }, + "Component_[403416213715997356]": { + "$type": "EditorOnlyEntityComponent", + "Id": 403416213715997356 + } + } + } + } + } + )JSON"; + + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp new file mode 100644 index 0000000000..f4dd37b86c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::SceneAPI::SceneData +{ + // PrefabGroup + + PrefabGroup::PrefabGroup() + : m_id(Uuid::CreateNull()) + , m_name() + { + } + + const AZStd::string& PrefabGroup::GetName() const + { + return m_name; + } + + void PrefabGroup::SetName(AZStd::string name) + { + m_name = AZStd::move(name); + } + + const Uuid& PrefabGroup::GetId() const + { + return m_id; + } + + void PrefabGroup::SetId(Uuid id) + { + m_id = AZStd::move(id); + } + + Containers::RuleContainer& PrefabGroup::GetRuleContainer() + { + return m_rules; + } + + const Containers::RuleContainer& PrefabGroup::GetRuleContainerConst() const + { + return m_rules; + } + + DataTypes::ISceneNodeSelectionList& PrefabGroup::GetSceneNodeSelectionList() + { + return m_nodeSelectionList; + } + + const DataTypes::ISceneNodeSelectionList& PrefabGroup::GetSceneNodeSelectionList() const + { + return m_nodeSelectionList; + } + + void PrefabGroup::SetPrefabDom(AzToolsFramework::Prefab::PrefabDom prefabDom) + { + m_prefabDomData = AZStd::make_shared(); + m_prefabDomData->CopyValue(prefabDom); + } + + AzToolsFramework::Prefab::PrefabDomConstReference PrefabGroup::GetPrefabDomRef() const + { + if (m_prefabDomData) + { + return m_prefabDomData->GetValue(); + } + return {}; + } + + void PrefabGroup::Reflect(ReflectContext* context) + { + SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class() + ->Version(1); + + serializeContext->Class() + ->Version(1) + ->Field("name", &PrefabGroup::m_name) + ->Field("nodeSelectionList", &PrefabGroup::m_nodeSelectionList) + ->Field("rules", &PrefabGroup::m_rules) + ->Field("id", &PrefabGroup::m_id) + ->Field("prefabDomData", &PrefabGroup::m_prefabDomData); + } + + BehaviorContext* behaviorContext = azrtti_cast(context); + if (behaviorContext) + { + auto setPrefabDomData = [](PrefabGroup& self, const AZStd::string& json) + { + auto jsonOutcome = JsonSerializationUtils::ReadJsonString(json); + if (jsonOutcome.IsSuccess()) + { + self.SetPrefabDom(AZStd::move(jsonOutcome.GetValue())); + return true; + } + AZ_Error("prefab", false, "Set PrefabDom failed (%s)", jsonOutcome.GetError().c_str()); + return false; + }; + + auto getPrefabDomData = [](const PrefabGroup& self) -> AZStd::string + { + if (self.GetPrefabDomRef().has_value() == false) + { + return {}; + } + AZStd::string buffer; + JsonSerializationUtils::WriteJsonString(self.GetPrefabDomRef().value(), buffer); + return buffer; + }; + + behaviorContext->Class() + ->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::All) + ->Attribute(Script::Attributes::Scope, Script::Attributes::ScopeFlags::Common) + ->Attribute(Script::Attributes::Module, "prefab") + ->Property("name", BehaviorValueProperty(&PrefabGroup::m_name)) + ->Property("id", BehaviorValueProperty(&PrefabGroup::m_id)) + ->Property("prefabDomData", getPrefabDomData, setPrefabDomData); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h new file mode 100644 index 0000000000..e5c47186eb --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroup.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AZ::SceneAPI::Containers +{ + class Scene; +} + +namespace AZ::SceneAPI::SceneData +{ + class PrefabGroup final + : public DataTypes::IPrefabGroup + { + public: + AZ_RTTI(PrefabGroup, "{99FE3C6F-5B55-4D8B-8013-2708010EC715}", DataTypes::IPrefabGroup); + AZ_CLASS_ALLOCATOR(PrefabGroup, SystemAllocator, 0); + + static void Reflect(AZ::ReflectContext* context); + + PrefabGroup(); + ~PrefabGroup() override = default; + + // DataTypes::IPrefabGroup + AzToolsFramework::Prefab::PrefabDomConstReference GetPrefabDomRef() const override; + const AZStd::string& GetName() const override; + const Uuid& GetId() const override; + Containers::RuleContainer& GetRuleContainer() override; + const Containers::RuleContainer& GetRuleContainerConst() const override; + DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() override; + const DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() const override; + + // Concrete API + void SetId(Uuid id); + void SetName(AZStd::string name); + void SetPrefabDom(AzToolsFramework::Prefab::PrefabDom prefabDom); + + private: + SceneNodeSelectionList m_nodeSelectionList; + Containers::RuleContainer m_rules; + AZStd::string m_name; + Uuid m_id; + AZStd::shared_ptr m_prefabDomData; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp new file mode 100644 index 0000000000..13828e5f8c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.cpp @@ -0,0 +1,251 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::SceneAPI::Behaviors +{ + // + // ExportEventHandler + // + + struct PrefabGroupBehavior::ExportEventHandler final + : public AZ::SceneAPI::SceneCore::ExportingComponent + { + using PreExportEventContextFunction = AZStd::function; + PreExportEventContextFunction m_preExportEventContextFunction; + AZ::Prefab::PrefabGroupAssetHandler m_prefabGroupAssetHandler; + + ExportEventHandler() = delete; + + ExportEventHandler(PreExportEventContextFunction function) + : m_preExportEventContextFunction(AZStd::move(function)) + { + BindToCall(&ExportEventHandler::PrepareForExport); + AZ::SceneAPI::SceneCore::ExportingComponent::Activate(); + } + + ~ExportEventHandler() + { + AZ::SceneAPI::SceneCore::ExportingComponent::Deactivate(); + } + + Events::ProcessingResult PrepareForExport(Events::PreExportEventContext& context) + { + return m_preExportEventContextFunction(context); + } + }; + + // + // PrefabGroupBehavior + // + + void PrefabGroupBehavior::Activate() + { + m_exportEventHandler = AZStd::make_shared([this](auto& context) + { + return this->OnPrepareForExport(context); + }); + } + + void PrefabGroupBehavior::Deactivate() + { + m_exportEventHandler.reset(); + } + + AZStd::unique_ptr PrefabGroupBehavior::CreateProductAssetData(const SceneData::PrefabGroup* prefabGroup) const + { + using namespace AzToolsFramework::Prefab; + + auto* prefabLoaderInterface = AZ::Interface::Get(); + if (!prefabLoaderInterface) + { + AZ_Error("prefab", false, "Could not get PrefabLoaderInterface"); + return {}; + } + + // write to a UTF-8 string buffer + auto prefabDomRef = prefabGroup->GetPrefabDomRef(); + if (!prefabDomRef) + { + AZ_Error("prefab", false, "PrefabGroup(%s) missing PrefabDom", prefabGroup->GetName().c_str()); + return {}; + } + + const AzToolsFramework::Prefab::PrefabDom& prefabDom = prefabDomRef.value(); + rapidjson::StringBuffer sb; + rapidjson::Writer> writer(sb); + if (prefabDom.Accept(writer) == false) + { + AZ_Error("prefab", false, "Could not write PrefabGroup(%s) to JSON", prefabGroup->GetName().c_str()); + return {}; + } + + // validate the PrefabDom will make a valid Prefab template instance + auto templateId = prefabLoaderInterface->LoadTemplateFromString(sb.GetString(), prefabGroup->GetName().c_str()); + if (templateId == InvalidTemplateId) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not write load template", prefabGroup->GetName().c_str()); + return {}; + } + + auto* prefabSystemComponentInterface = AZ::Interface::Get(); + if (!prefabSystemComponentInterface) + { + AZ_Error("prefab", false, "Could not get PrefabSystemComponentInterface"); + return {}; + } + + // create instance to update the asset hints + auto instance = prefabSystemComponentInterface->InstantiatePrefab(templateId); + if (!instance) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not instantiate prefab", prefabGroup->GetName().c_str()); + return {}; + } + + auto* instanceToTemplateInterface = AZ::Interface::Get(); + if (!instanceToTemplateInterface) + { + AZ_Error("prefab", false, "Could not get InstanceToTemplateInterface"); + return {}; + } + + // fill out a JSON DOM + auto proceduralPrefab = AZStd::make_unique(rapidjson::kObjectType); + instanceToTemplateInterface->GenerateDomForInstance(*proceduralPrefab.get(), *instance.get()); + return proceduralPrefab; + } + + bool PrefabGroupBehavior::WriteOutProductAsset( + Events::PreExportEventContext& context, + const SceneData::PrefabGroup* prefabGroup, + const rapidjson::Document& doc) const + { + // Retrieve source asset info so we can get a string with the relative path to the asset + bool assetInfoResult; + Data::AssetInfo info; + AZStd::string watchFolder; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult( + assetInfoResult, + &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, + context.GetScene().GetSourceFilename().c_str(), + info, + watchFolder); + + AZ::IO::FixedMaxPath assetPath(info.m_relativePath); + assetPath.ReplaceFilename(prefabGroup->GetName().c_str()); + + AZStd::string filePath = AZ::SceneAPI::Utilities::FileUtilities::CreateOutputFileName( + assetPath.c_str(), + context.GetOutputDirectory(), + AZ::Prefab::PrefabGroupAssetHandler::s_Extension); + + AZ::IO::FileIOStream fileStream(filePath.c_str(), AZ::IO::OpenMode::ModeWrite); + if (fileStream.IsOpen() == false) + { + AZ_Error("prefab", false, "File path(%s) could not open for write", filePath.c_str()); + return false; + } + + // write to a UTF-8 string buffer + rapidjson::StringBuffer sb; + rapidjson::Writer> writer(sb); + if (doc.Accept(writer) == false) + { + AZ_Error("prefab", false, "PrefabGroup(%s) Could not buffer JSON", prefabGroup->GetName().c_str()); + return false; + } + + const auto bytesWritten = fileStream.Write(sb.GetSize(), sb.GetString()); + if (bytesWritten > 1) + { + AZ::u32 subId = AZ::Crc32(filePath.c_str()); + context.GetProductList().AddProduct( + filePath, + context.GetScene().GetSourceGuid(), + azrtti_typeid(), + {}, + AZStd::make_optional(subId)); + + return true; + } + return false; + } + + Events::ProcessingResult PrefabGroupBehavior::OnPrepareForExport(Events::PreExportEventContext& context) const + { + AZStd::vector prefabGroupCollection; + const Containers::SceneManifest& manifest = context.GetScene().GetManifest(); + + for (size_t i = 0; i < manifest.GetEntryCount(); ++i) + { + const auto* group = azrtti_cast(manifest.GetValue(i).get()); + if (group) + { + prefabGroupCollection.push_back(group); + } + } + + if (prefabGroupCollection.empty()) + { + return AZ::SceneAPI::Events::ProcessingResult::Ignored; + } + + for (const auto* prefabGroup : prefabGroupCollection) + { + auto result = CreateProductAssetData(prefabGroup); + if (!result) + { + return Events::ProcessingResult::Failure; + } + + if (WriteOutProductAsset(context, prefabGroup, *result.get()) == false) + { + return Events::ProcessingResult::Failure; + } + } + + return Events::ProcessingResult::Success; + } + + void PrefabGroupBehavior::Reflect(ReflectContext* context) + { + AZ::SceneAPI::SceneData::PrefabGroup::Reflect(context); + Prefab::ProceduralPrefabAsset::Reflect(context); + + SerializeContext* serializeContext = azrtti_cast(context); + if (serializeContext) + { + serializeContext->Class()->Version(1); + } + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h new file mode 100644 index 0000000000..b57d30695a --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupBehavior.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AZ::SceneAPI::Events +{ + class PreExportEventContext; +} + +namespace AZ::SceneAPI::Behaviors +{ + class PrefabGroupBehavior + : public SceneCore::BehaviorComponent + { + public: + AZ_COMPONENT(PrefabGroupBehavior, "{13DC2819-CAC2-4977-91D7-C870087072AB}", SceneCore::BehaviorComponent); + + ~PrefabGroupBehavior() override = default; + + void Activate() override; + void Deactivate() override; + static void Reflect(ReflectContext* context); + + private: + Events::ProcessingResult OnPrepareForExport(Events::PreExportEventContext& context) const; + AZStd::unique_ptr CreateProductAssetData(const SceneData::PrefabGroup* prefabGroup) const; + + bool WriteOutProductAsset( + Events::PreExportEventContext& context, + const SceneData::PrefabGroup* prefabGroup, + const rapidjson::Document& doc) const; + + struct ExportEventHandler; + AZStd::shared_ptr m_exportEventHandler; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp new file mode 100644 index 0000000000..9fb935ce9f --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/PrefabGroupTests.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include + +namespace UnitTest +{ + TEST_F(PrefabBuilderTests, PrefabGroup_FindsRequiredReflection_True) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + + auto findElementWithName = [](const AZ::SerializeContext::ClassData* classData, const char* name) + { + auto it = AZStd::find_if(classData->m_elements.begin(), classData->m_elements.end(), [name](const auto& element) + { + return strcmp(element.m_name, name) == 0; + }); + return it != classData->m_elements.end(); + }; + + auto* prefabGroupClassData = serializeContext->FindClassData(azrtti_typeid()); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "name")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "nodeSelectionList")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "rules")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "id")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "prefabDomData")); + + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_JsonWithPrefabArbitraryPrefab_Works) + { + namespace JSR = AZ::JsonSerializationResult; + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + AZ::Prefab::ProceduralPrefabAsset::Reflect(serializeContext); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + AZ::Prefab::ProceduralPrefabAsset::Reflect(m_app.GetJsonRegistrationContext()); + + // fill out a PrefabGroup using JSON + AZStd::string_view input = R"JSON( + { + "name" : "tester", + "id" : "{49698DBC-B447-49EF-9B56-25BB29342AFB}", + "prefabDomData" : {"foo": "bar"} + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + ASSERT_FALSE(document.HasParseError()); + + SceneData::PrefabGroup instancePrefabGroup; + EXPECT_EQ(AZ::JsonSerialization::Load(instancePrefabGroup, document).GetOutcome(), JSR::Outcomes::PartialDefaults); + + ASSERT_TRUE(instancePrefabGroup.GetPrefabDomRef().has_value()); + const AzToolsFramework::Prefab::PrefabDom& dom = instancePrefabGroup.GetPrefabDomRef().value(); + EXPECT_TRUE(dom.IsObject()); + EXPECT_TRUE(dom.GetObject().HasMember("foo")); + EXPECT_STREQ(dom.GetObject().FindMember("foo")->value.GetString(), "bar"); + EXPECT_STREQ(instancePrefabGroup.GetName().c_str(), "tester"); + EXPECT_STREQ(instancePrefabGroup.GetId().ToString().c_str(), "{49698DBC-B447-49EF-9B56-25BB29342AFB}"); + + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + AZ::Prefab::ProceduralPrefabAsset::Reflect(m_app.GetJsonRegistrationContext()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJson_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view input = R"JSON( + { + bad json that will not parse + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZ::Uuid::CreateRandom()); + prefabGroup.SetName("tester"); + prefabGroup.SetPrefabDom(AZStd::move(document)); + + const AzToolsFramework::Prefab::PrefabDom& dom = prefabGroup.GetPrefabDomRef().value(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + struct PrefabBuilderBehaviorTests + : public PrefabBuilderTests + { + void SetUp() override + { + using namespace AZ::SceneAPI; + + PrefabBuilderTests::SetUp(); + SceneData::PrefabGroup::Reflect(m_app.GetSerializeContext()); + SceneData::PrefabGroup::Reflect(m_app.GetBehaviorContext()); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + m_scriptContext = AZStd::make_unique(); + m_scriptContext->BindTo(m_app.GetBehaviorContext()); + } + + void TearDown() override + { + using namespace AZ::SceneAPI; + m_app.GetJsonRegistrationContext()->EnableRemoveReflection(); + SceneData::PrefabGroup::Reflect(m_app.GetJsonRegistrationContext()); + + m_scriptContext.reset(); + PrefabBuilderTests::TearDown(); + } + + void ExpectExecute(AZStd::string_view script) + { + EXPECT_TRUE(m_scriptContext->Execute(script.data())); + } + + AZStd::unique_ptr m_scriptContext; + }; + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupClass_Exists) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("assert(group)"); + ExpectExecute("assert(group.name)"); + ExpectExecute("assert(group.id)"); + ExpectExecute("assert(group.prefabDomData)"); + } + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupAssignment_Works) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("group.name = 'tester'"); + ExpectExecute("group.id = Uuid.CreateString('{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}', 0)"); + ExpectExecute("group.prefabDomData = '{\"foo\": \"bar\"}'"); + ExpectExecute("assert(group.name == 'tester')"); + ExpectExecute("assert(tostring(group.id) == '{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}')"); + ExpectExecute("assert(group.prefabDomData == '{\\n \"foo\": \"bar\"\\n}')"); + } +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp new file mode 100644 index 0000000000..17ed4d9c0c --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ::Prefab +{ + // AssetTypeInfoHandler + + class PrefabGroupAssetHandler::AssetTypeInfoHandler final + : public AZ::AssetTypeInfoBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(AssetTypeInfoHandler, AZ::SystemAllocator, 0); + AssetTypeInfoHandler(); + ~AssetTypeInfoHandler() override; + AZ::Data::AssetType GetAssetType() const override; + const char* GetAssetTypeDisplayName() const override; + const char* GetGroup() const override; + const char* GetBrowserIcon() const override; + void GetAssetTypeExtensions(AZStd::vector& extensions) override; + }; + + PrefabGroupAssetHandler::AssetTypeInfoHandler::AssetTypeInfoHandler() + { + AZ::AssetTypeInfoBus::Handler::BusConnect(azrtti_typeid()); + } + + PrefabGroupAssetHandler::AssetTypeInfoHandler::~AssetTypeInfoHandler() + { + AZ::AssetTypeInfoBus::Handler::BusDisconnect(azrtti_typeid()); + } + + AZ::Data::AssetType PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetType() const + { + return azrtti_typeid(); + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetTypeDisplayName() const + { + return "Procedural Prefab"; + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetGroup() const + { + return "Prefab"; + } + + const char* PrefabGroupAssetHandler::AssetTypeInfoHandler::GetBrowserIcon() const + { + return "Icons/Components/Box.png"; + } + + void PrefabGroupAssetHandler::AssetTypeInfoHandler::GetAssetTypeExtensions(AZStd::vector& extensions) + { + extensions.push_back(PrefabGroupAssetHandler::s_Extension); + } + + // PrefabGroupAssetHandler + + AZStd::string_view PrefabGroupAssetHandler::s_Extension{ "procprefab" }; + + PrefabGroupAssetHandler::PrefabGroupAssetHandler() + { + auto assetCatalog = AZ::Data::AssetCatalogRequestBus::FindFirstHandler(); + if (assetCatalog) + { + assetCatalog->EnableCatalogForAsset(azrtti_typeid()); + assetCatalog->AddExtension(s_Extension.data()); + } + if (AZ::Data::AssetManager::IsReady()) + { + AZ::Data::AssetManager::Instance().RegisterHandler(this, azrtti_typeid()); + } + m_assetTypeInfoHandler = AZStd::make_shared(); + } + + PrefabGroupAssetHandler::~PrefabGroupAssetHandler() + { + m_assetTypeInfoHandler.reset(); + if (AZ::Data::AssetManager::IsReady()) + { + AZ::Data::AssetManager::Instance().UnregisterHandler(this); + } + } + + AZ::Data::AssetData* PrefabGroupAssetHandler::CreateAsset([[maybe_unused]] const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) + { + if (type != azrtti_typeid()) + { + AZ_Error("prefab", false, "Invalid asset type! Only handle 'ProceduralPrefabAsset'"); + return nullptr; + } + return aznew ProceduralPrefabAsset{}; + } + + void PrefabGroupAssetHandler::DestroyAsset(AZ::Data::AssetData* ptr) + { + // Note: the PrefabLoaderInterface will handle the lifetime of the Prefab Template + delete ptr; + } + + void PrefabGroupAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) + { + assetTypes.push_back(azrtti_typeid()); + } + + AZ::Data::AssetHandler::LoadResult PrefabGroupAssetHandler::LoadAssetData( + const AZ::Data::Asset& asset, + AZStd::shared_ptr stream, + [[maybe_unused]] const AZ::Data::AssetFilterCB& assetLoadFilterCB) + { + using namespace AzToolsFramework::Prefab; + + auto* proceduralPrefabAsset = asset.GetAs(); + if (!proceduralPrefabAsset) + { + AZ_Error("prefab", false, "This should be a ProceduralPrefabAsset type, as this is the only type we process!"); + return LoadResult::Error; + } + + AZStd::string buffer; + buffer.resize(stream->GetLoadedSize()); + stream->Read(stream->GetLoadedSize(), buffer.data()); + + auto jsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(buffer); + if (jsonOutcome.IsSuccess() == false) + { + AZ_Error("prefab", false, "Asset JSON failed to compile %s", jsonOutcome.GetError().c_str()); + return LoadResult::Error; + } + const auto& jsonDoc = jsonOutcome.GetValue(); + + if (jsonDoc.IsObject() == false) + { + return LoadResult::Error; + } + + if (jsonDoc.FindMember("Source") == jsonDoc.MemberEnd()) + { + return LoadResult::Error; + } + const auto& templateName = jsonDoc["Source"]; + + AZStd::string stringJson; + auto stringOutcome = AZ::JsonSerializationUtils::WriteJsonString(jsonDoc, stringJson); + if (stringOutcome.IsSuccess() == false) + { + AZ_Error("prefab", false, "Could not write to JSON string %s", stringOutcome.GetError().c_str()); + return LoadResult::Error; + } + + // prepare the template + auto* prefabLoaderInterface = AZ::Interface::Get(); + if (!prefabLoaderInterface) + { + return LoadResult::Error; + } + + auto templateId = prefabLoaderInterface->LoadTemplateFromString(stringJson.data(), templateName.GetString()); + if (templateId == InvalidTemplateId) + { + return LoadResult::Error; + } + + proceduralPrefabAsset->SetTemplateId(templateId); + proceduralPrefabAsset->SetTemplateName(templateName.GetString()); + return LoadResult::LoadComplete; + } + + AZStd::unique_ptr s_PrefabGroupAssetHandler; +} + diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h new file mode 100644 index 0000000000..301f8a467a --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroup/ProceduralAssetHandler.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include +#include +#include + +namespace AZ::Prefab +{ + class PrefabGroupAssetHandler final + : public AZ::Data::AssetHandler + { + public: + AZ_CLASS_ALLOCATOR(PrefabGroupAssetHandler, AZ::SystemAllocator, 0); + PrefabGroupAssetHandler(); + ~PrefabGroupAssetHandler() override; + + static AZStd::string_view s_Extension; + + protected: + AZ::Data::AssetData* CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) override; + void DestroyAsset(AZ::Data::AssetData* ptr) override; + void GetHandledAssetTypes(AZStd::vector& assetTypes) override; + AZ::Data::AssetHandler::LoadResult LoadAssetData( + const AZ::Data::Asset& asset, + AZStd::shared_ptr stream, + const AZ::Data::AssetFilterCB& assetLoadFilterCB) override; + + class AssetTypeInfoHandler; + AZStd::shared_ptr m_assetTypeInfoHandler; + }; +} diff --git a/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp b/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp new file mode 100644 index 0000000000..a63c0caa69 --- /dev/null +++ b/Gems/Prefab/PrefabBuilder/PrefabGroupTests.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace UnitTest +{ + TEST_F(PrefabBuilderTests, PrefabGroup_FindsRequiredReflection_True) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + ASSERT_NE(nullptr, serializeContext->FindClassData(azrtti_typeid())); + + auto findElementWithName = [](const AZ::SerializeContext::ClassData* classData, const char* name) + { + auto it = AZStd::find_if(classData->m_elements.begin(), classData->m_elements.end(), [name](const auto& element) + { + return strcmp(element.m_name, name) == 0; + }); + return it != classData->m_elements.end(); + }; + + auto* prefabGroupClassData = serializeContext->FindClassData(azrtti_typeid()); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "name")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "nodeSelectionList")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "rules")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "id")); + EXPECT_TRUE(findElementWithName(prefabGroupClassData, "prefabDomBuffer")); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_JsonWithPrefabArbitraryPrefab_Works) + { + using namespace AZ::SceneAPI; + auto* serializeContext = m_app.GetSerializeContext(); + ASSERT_NE(nullptr, serializeContext); + SceneData::PrefabGroup::Reflect(serializeContext); + + // fill out a PrefabGroup using JSON + AZStd::string_view input = R"JSON( + { + "name" : "tester", + "id" : "{49698DBC-B447-49EF-9B56-25BB29342AFB}", + "prefabDomBuffer" : "{\"foo\":\"bar\"}" + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + ASSERT_FALSE(document.HasParseError()); + + SceneData::PrefabGroup instancePrefabGroup; + AZ::JsonSerialization::Load(instancePrefabGroup, document); + + const auto& dom = instancePrefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.GetObject().HasMember("foo")); + EXPECT_STREQ(dom.GetObject().FindMember("foo")->value.GetString(), "bar"); + EXPECT_STREQ(instancePrefabGroup.GetName().c_str(), "tester"); + EXPECT_STREQ( + instancePrefabGroup.GetId().ToString().c_str(), + "{49698DBC-B447-49EF-9B56-25BB29342AFB}"); + EXPECT_TRUE(instancePrefabGroup.GetPrefabDom().IsObject()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJson_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view input = R"JSON( + { + bad json that will not parse + })JSON"; + + rapidjson::Document document; + document.Parse(input.data(), input.size()); + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZStd::move(AZ::Uuid::CreateRandom())); + prefabGroup.SetName(AZStd::move("tester")); + prefabGroup.SetPrefabDom(AZStd::move(document)); + + const auto& dom = prefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + TEST_F(PrefabBuilderTests, PrefabGroup_InvalidPrefabJsonBuffer_Detected) + { + using namespace AZ::SceneAPI; + + AZStd::string_view inputJson = R"JSON( + { + bad json that will not parse + })JSON"; + + SceneData::PrefabGroup prefabGroup; + prefabGroup.SetId(AZStd::move(AZ::Uuid::CreateRandom())); + prefabGroup.SetName(AZStd::move("tester")); + prefabGroup.SetPrefabDomBuffer(std::move(inputJson)); + + const auto& dom = prefabGroup.GetPrefabDom(); + EXPECT_TRUE(dom.IsNull()); + EXPECT_STREQ("tester", prefabGroup.GetName().c_str()); + } + + struct PrefabBuilderBehaviorTests + : public PrefabBuilderTests + { + void SetUp() override + { + using namespace AZ::SceneAPI; + + PrefabBuilderTests::SetUp(); + SceneData::PrefabGroup::Reflect(m_app.GetSerializeContext()); + SceneData::PrefabGroup::Reflect(m_app.GetBehaviorContext()); + m_scriptContext = AZStd::make_unique(); + m_scriptContext->BindTo(m_app.GetBehaviorContext()); + } + + void TearDown() override + { + m_scriptContext.reset(); + PrefabBuilderTests::TearDown(); + } + + void ExpectExecute(AZStd::string_view script) + { + EXPECT_TRUE(m_scriptContext->Execute(script.data())); + } + + AZStd::unique_ptr m_scriptContext; + }; + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupClass_Exists) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("assert(group)"); + ExpectExecute("assert(group.name)"); + ExpectExecute("assert(group.id)"); + ExpectExecute("assert(group.prefabDomBuffer)"); + } + + TEST_F(PrefabBuilderBehaviorTests, PrefabGroup_PrefabGroupAssignment_Works) + { + ExpectExecute("group = PrefabGroup()"); + ExpectExecute("group.name = 'tester'"); + ExpectExecute("group.id = Uuid.CreateString('{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}', 0)"); + ExpectExecute("group.prefabDomBuffer = '{}'"); + ExpectExecute("assert(group.name == 'tester')"); + ExpectExecute("assert(tostring(group.id) == '{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}')"); + ExpectExecute("assert(group.prefabDomBuffer == '{}')"); + } +} diff --git a/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake b/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake index 9cdf90d951..4f3bf860be 100644 --- a/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake +++ b/Gems/Prefab/PrefabBuilder/prefabbuilder_files.cmake @@ -9,4 +9,11 @@ set(FILES PrefabBuilderComponent.h PrefabBuilderComponent.cpp + PrefabGroup/IPrefabGroup.h + PrefabGroup/PrefabGroup.cpp + PrefabGroup/PrefabGroup.h + PrefabGroup/PrefabGroupBehavior.cpp + PrefabGroup/PrefabGroupBehavior.h + PrefabGroup/ProceduralAssetHandler.cpp + PrefabGroup/ProceduralAssetHandler.h ) diff --git a/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake b/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake index 3f1ae0388b..faf2f88b5e 100644 --- a/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake +++ b/Gems/Prefab/PrefabBuilder/prefabbuilder_tests_files.cmake @@ -9,4 +9,7 @@ set(FILES PrefabBuilderTests.h PrefabBuilderTests.cpp + PrefabGroup/PrefabGroupTests.cpp + PrefabGroup/PrefabBehaviorTests.cpp + PrefabGroup/PrefabBehaviorTests.inl ) diff --git a/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py b/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py index 2c63e5f90c..2578efeae2 100755 --- a/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py +++ b/Gems/PythonAssetBuilder/Editor/Scripts/scene_api/scene_data.py @@ -104,6 +104,15 @@ class SceneManifest(): self.manifest['values'].append(meshGroup) return meshGroup + def add_prefab_group(self, name, id, json) -> dict: + prefabGroup = {} + prefabGroup['$type'] = '{99FE3C6F-5B55-4D8B-8013-2708010EC715} PrefabGroup' + prefabGroup['name'] = name + prefabGroup['id'] = id + prefabGroup['prefabDomData'] = json + self.manifest['values'].append(prefabGroup) + return prefabGroup + def mesh_group_select_node(self, meshGroup, nodeName): meshGroup['nodeSelectionList']['selectedNodes'].append(nodeName) diff --git a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp index c1a1252c6b..1d3cd60e49 100644 --- a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp +++ b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,9 @@ #include #include +#include +#include +#include #include #include @@ -81,6 +85,93 @@ namespace SceneBuilder return m_cachedFingerprint.c_str(); } + void SceneBuilderWorker::PopulateSourceDependencies(const AZStd::string& manifestJson, AZStd::vector& sourceFileDependencies) + { + auto readJsonOutcome = AZ::JsonSerializationUtils::ReadJsonString(manifestJson); + AZStd::string errorMsg; + if (!readJsonOutcome.IsSuccess()) + { + // This may be an old format xml file. We don't have any dependencies in the old format so there's no point trying to parse an xml + return; + } + + rapidjson::Document document = readJsonOutcome.TakeValue(); + + auto manifestObject = document.GetObject(); + auto valuesIterator = manifestObject.FindMember("values"); + auto valuesArray = valuesIterator->value.GetArray(); + + AZStd::vector paths; + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetManifestDependencyPaths, paths); + + for (const auto& value : valuesArray) + { + auto object = value.GetObject(); + + for (const auto& path : paths) + { + rapidjson::Pointer pointer(path.c_str()); + + auto dependencyValue = pointer.Get(object); + + if (dependencyValue && dependencyValue->IsString()) + { + AZStd::string dependency = dependencyValue->GetString(); + + sourceFileDependencies.emplace_back(AssetBuilderSDK::SourceFileDependency( + dependency, AZ::Uuid::CreateNull(), AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Absolute)); + } + } + } + } + + bool SceneBuilderWorker::ManifestDependencyCheck(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) + { + AZStd::string manifestExtension; + AZStd::string generatedManifestExtension; + + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetManifestExtension, manifestExtension); + AZ::SceneAPI::Events::AssetImportRequestBus::Broadcast( + &AZ::SceneAPI::Events::AssetImportRequestBus::Events::GetGeneratedManifestExtension, generatedManifestExtension); + + if (manifestExtension.empty() || generatedManifestExtension.empty()) + { + AZ_Error("SceneBuilderWorker", false, "Failed to get scene manifest extension"); + return false; + } + + AZ::SettingsRegistryInterface::FixedValueString assetCacheRoot; + AZ::SettingsRegistry::Get()->Get(assetCacheRoot, AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder); + + auto manifestPath = (AZ::IO::Path(request.m_watchFolder) / (request.m_sourceFile + manifestExtension)); + auto generatedManifestPath = (AZ::IO::Path(assetCacheRoot) / (request.m_sourceFile + generatedManifestExtension)); + + auto populateDependenciesFunc = [&response](const AZStd::string& path) + { + auto readFileOutcome = AZ::Utils::ReadFile(path, AZ::SceneAPI::Containers::SceneManifest::MaxSceneManifestFileSizeInBytes); + if (!readFileOutcome.IsSuccess()) + { + AZ_Error("SceneBuilderWorker", false, "%s", readFileOutcome.GetError().c_str()); + return; + } + + PopulateSourceDependencies(readFileOutcome.TakeValue(), response.m_sourceFileDependencyList); + }; + + if (AZ::IO::FileIOBase::GetInstance()->Exists(manifestPath.Native().c_str())) + { + populateDependenciesFunc(manifestPath.Native()); + } + else if (AZ::IO::FileIOBase::GetInstance()->Exists(generatedManifestPath.Native().c_str())) + { + populateDependenciesFunc(generatedManifestPath.Native()); + } + + return true; + } + void SceneBuilderWorker::CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response) { // Check for shutdown @@ -118,6 +209,11 @@ namespace SceneBuilder sourceFileDependencyInfo.m_sourceDependencyType = AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Wildcards; response.m_sourceFileDependencyList.push_back(sourceFileDependencyInfo); + if (!ManifestDependencyCheck(request, response)) + { + return; + } + response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success; } diff --git a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h index 3ecc657a3a..32456f9b2d 100644 --- a/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h +++ b/Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace AssetBuilderSDK { @@ -45,11 +46,15 @@ namespace SceneBuilder public: ~SceneBuilderWorker() override = default; + void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response); void ShutDown() override; const char* GetFingerprint() const; + static void PopulateSourceDependencies( + const AZStd::string& manifestJson, AZStd::vector& sourceFileDependencies); + static bool ManifestDependencyCheck(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response); static AZ::Uuid GetUUID(); void PopulateProductDependencies(const AZ::SceneAPI::Events::ExportProduct& exportProduct, const char* watchFolder, AssetBuilderSDK::JobProduct& jobProduct) const; diff --git a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp index 5d0105f080..ba1a186e5a 100644 --- a/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp +++ b/Gems/SceneProcessing/Code/Tests/SceneBuilder/SceneBuilderTests.cpp @@ -11,11 +11,14 @@ #include #include #include +#include #include #include #include +#include #include #include +#include using namespace AZ; using namespace SceneBuilder; @@ -193,3 +196,200 @@ TEST_F(SceneBuilderTests, SceneBuilderWorker_ExportProductDependencies_ProductAn TestSuccessCase(exportProduct, expectedPathDependencies, { dependencyId }); } + +struct ImportHandler + : SceneAPI::Events::AssetImportRequestBus::Handler +{ + ImportHandler() + { + BusConnect(); + } + + ~ImportHandler() override + { + BusDisconnect(); + } + + void GetManifestDependencyPaths(AZStd::vector& paths) override + { + paths.emplace_back("/scriptFilename"); + paths.emplace_back("/layer1/layer2/0/target"); + } + + void GetManifestExtension(AZStd::string& result) override + { + result = ".test"; + } + + void GetGeneratedManifestExtension(AZStd::string& result) override + { + result = ".test.gen"; + } +}; + +using SourceDependencyTests = UnitTest::ScopedAllocatorSetupFixture; + +namespace SourceDependencyJson +{ + constexpr const char* TestJson = R"JSON( +{ + "values": [ + { + "$type": "Test1", + "scriptFilename": "a/test/path.png" + }, + { + "$type": "Test2", + "layer1" : { + "layer2" : [ + { + "target": "value.png", + "otherData": "value2.png" + }, + { + "target" : "wrong.png" + } + ] + } + } + ] +} + )JSON"; +} + +TEST_F(SourceDependencyTests, SourceDependencyTest) +{ + ImportHandler handler; + AZStd::vector dependencies; + + SceneBuilderWorker::PopulateSourceDependencies(SourceDependencyJson::TestJson, dependencies); + + ASSERT_EQ(dependencies.size(), 2); + ASSERT_STREQ(dependencies[0].m_sourceFileDependencyPath.c_str(), "a/test/path.png"); + ASSERT_STREQ(dependencies[1].m_sourceFileDependencyPath.c_str(), "value.png"); +} + +struct SettingsRegistryMock : AZ::Interface::Registrar +{ + bool Get(FixedValueString& result, AZStd::string_view) const override + { + result = "cache"; + return true; + } + + void SetApplyPatchSettings(const AZ::JsonApplyPatchSettings& /*applyPatchSettings*/) override{} + void GetApplyPatchSettings(AZ::JsonApplyPatchSettings& /*applyPatchSettings*/) override{} + + MOCK_CONST_METHOD1(GetType, Type (AZStd::string_view)); + MOCK_CONST_METHOD2(Visit, bool (Visitor&, AZStd::string_view)); + MOCK_CONST_METHOD2(Visit, bool (const VisitorCallback&, AZStd::string_view)); + MOCK_METHOD1(RegisterNotifier, NotifyEventHandler (const NotifyCallback&)); + MOCK_METHOD1(RegisterNotifier, NotifyEventHandler (NotifyCallback&&)); + MOCK_METHOD1(RegisterPreMergeEvent, PreMergeEventHandler (const PreMergeEventCallback&)); + MOCK_METHOD1(RegisterPreMergeEvent, PreMergeEventHandler (PreMergeEventCallback&&)); + MOCK_METHOD1(RegisterPostMergeEvent, PostMergeEventHandler (const PostMergeEventCallback&)); + MOCK_METHOD1(RegisterPostMergeEvent, PostMergeEventHandler (PostMergeEventCallback&&)); + MOCK_CONST_METHOD2(Get, bool (bool&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (s64&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (u64&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (double&, AZStd::string_view)); + MOCK_CONST_METHOD2(Get, bool (AZStd::string&, AZStd::string_view)); + MOCK_CONST_METHOD3(GetObject, bool (void*, Uuid, AZStd::string_view)); + MOCK_METHOD2(Set, bool (AZStd::string_view, bool)); + MOCK_METHOD2(Set, bool (AZStd::string_view, s64)); + MOCK_METHOD2(Set, bool (AZStd::string_view, u64)); + MOCK_METHOD2(Set, bool (AZStd::string_view, double)); + MOCK_METHOD2(Set, bool (AZStd::string_view, AZStd::string_view)); + MOCK_METHOD2(Set, bool (AZStd::string_view, const char*)); + MOCK_METHOD3(SetObject, bool (AZStd::string_view, const void*, Uuid)); + MOCK_METHOD1(Remove, bool (AZStd::string_view)); + MOCK_METHOD3(MergeCommandLineArgument, bool (AZStd::string_view, AZStd::string_view, const CommandLineArgumentSettings&)); + MOCK_METHOD2(MergeSettings, bool (AZStd::string_view, Format)); + MOCK_METHOD4(MergeSettingsFile, bool (AZStd::string_view, Format, AZStd::string_view, AZStd::vector*)); + MOCK_METHOD5(MergeSettingsFolder, bool (AZStd::string_view, const Specializations&, AZStd::string_view, AZStd::string_view, AZStd::vector*)); + MOCK_METHOD1(SetUseFileIO, void (bool)); +}; + +struct SourceDependencyMockedIOTests : UnitTest::ScopedAllocatorSetupFixture + , UnitTest::SetRestoreFileIOBaseRAII +{ + SourceDependencyMockedIOTests() + : UnitTest::SetRestoreFileIOBaseRAII(m_ioMock) + { + + } + + void SetUp() override + { + using namespace ::testing; + + ON_CALL(m_ioMock, Open(_, _, _)) + .WillByDefault(Invoke( + [](auto, auto, IO::HandleType& handle) + { + handle = 1234; + return AZ::IO::Result(AZ::IO::ResultCode::Success); + })); + + ON_CALL(m_ioMock, Size(An(), _)).WillByDefault(Invoke([](auto, AZ::u64& size) + { + size = strlen(SourceDependencyJson::TestJson); + return AZ::IO::ResultCode::Success; + })); + + EXPECT_CALL(m_ioMock, Read(_, _, _, _, _)) + .WillRepeatedly(Invoke( + [](auto, void* buffer, auto, auto, AZ::u64* bytesRead) + { + memcpy(buffer, SourceDependencyJson::TestJson, strlen(SourceDependencyJson::TestJson)); + *bytesRead = strlen(SourceDependencyJson::TestJson); + return AZ::IO::ResultCode::Success; + })); + + EXPECT_CALL(m_ioMock, Close(_)).WillRepeatedly(Return(AZ::IO::ResultCode::Success)); + } + + IO::NiceFileIOBaseMock m_ioMock; +}; + +TEST_F(SourceDependencyMockedIOTests, RegularManifestHasPriority) +{ + ImportHandler handler; + SettingsRegistryMock settingsRegistry; + + AssetBuilderSDK::CreateJobsRequest request; + AssetBuilderSDK::CreateJobsResponse response; + + request.m_sourceFile = "file.fbx"; + + using namespace ::testing; + + AZStd::string genPath = AZStd::string("cache").append(1, AZ_TRAIT_OS_PATH_SEPARATOR).append("file.fbx.test.gen"); + + EXPECT_CALL(m_ioMock, Exists(StrEq("file.fbx.test"))).WillRepeatedly(Return(true)); + EXPECT_CALL(m_ioMock, Exists(StrEq(genPath.c_str()))).Times(Exactly(0)); + + ASSERT_TRUE(SceneBuilderWorker::ManifestDependencyCheck(request, response)); + ASSERT_EQ(response.m_sourceFileDependencyList.size(), 2); +} + +TEST_F(SourceDependencyMockedIOTests, GeneratedManifestTest) +{ + ImportHandler handler; + SettingsRegistryMock settingsRegistry; + + AssetBuilderSDK::CreateJobsRequest request; + AssetBuilderSDK::CreateJobsResponse response; + + request.m_sourceFile = "file.fbx"; + + using namespace ::testing; + + AZStd::string genPath = AZStd::string("cache").append(1, AZ_TRAIT_OS_PATH_SEPARATOR).append("file.fbx.test.gen"); + + EXPECT_CALL(m_ioMock, Exists(StrEq("file.fbx.test"))).WillRepeatedly(Return(false)); + EXPECT_CALL(m_ioMock, Exists(StrEq(genPath.c_str()))).WillRepeatedly(Return(true)); + + ASSERT_TRUE(SceneBuilderWorker::ManifestDependencyCheck(request, response)); + ASSERT_EQ(response.m_sourceFileDependencyList.size(), 2); +} From a40af98394c543d2ad736fd76f5325028351f9c2 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:52:59 +0100 Subject: [PATCH 123/226] Add focus camera and custom camera input (#4493) * add focus camera and custom camera input Signed-off-by: hultonha * very minor tidy before publishing PR Signed-off-by: hultonha * small updates after PR feedback Signed-off-by: hultonha --- .../EditorModularViewportCameraComposer.cpp | 43 +++++++-- .../EditorModularViewportCameraComposer.h | 2 + .../EditorPreferencesPageViewportCamera.cpp | 12 ++- .../EditorPreferencesPageViewportCamera.h | 1 + Code/Editor/EditorViewportSettings.cpp | 11 +++ Code/Editor/EditorViewportSettings.h | 3 + .../AzFramework/Viewport/CameraInput.cpp | 90 +++++++++++++++++-- .../AzFramework/Viewport/CameraInput.h | 54 +++++++++++ 8 files changed, 197 insertions(+), 19 deletions(-) diff --git a/Code/Editor/EditorModularViewportCameraComposer.cpp b/Code/Editor/EditorModularViewportCameraComposer.cpp index 29cf348ab5..c492010336 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.cpp +++ b/Code/Editor/EditorModularViewportCameraComposer.cpp @@ -95,6 +95,7 @@ namespace SandboxEditor cameras.AddCamera(m_firstPersonPanCamera); cameras.AddCamera(m_firstPersonTranslateCamera); cameras.AddCamera(m_firstPersonScrollCamera); + cameras.AddCamera(m_firstPersonFocusCamera); cameras.AddCamera(m_pivotCamera); }); @@ -111,6 +112,7 @@ namespace SandboxEditor viewportId, &AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Events::BeginCursorCapture); } }; + const auto showCursor = [viewportId = m_viewportId] { if (SandboxEditor::CameraCaptureCursorForLook()) @@ -172,19 +174,34 @@ namespace SandboxEditor return SandboxEditor::CameraScrollSpeed(); }; + const auto pivotFn = [] + { + // use the manipulator transform as the pivot point + AZStd::optional entityPivot; + AzToolsFramework::EditorTransformComponentSelectionRequestBus::EventResult( + entityPivot, AzToolsFramework::GetEntityContextId(), + &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); + + if (entityPivot.has_value()) + { + return entityPivot->GetTranslation(); + } + + // otherwise just use the identity + return AZ::Vector3::CreateZero(); + }; + + m_firstPersonFocusCamera = + AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusLook); + + m_firstPersonFocusCamera->SetPivotFn(pivotFn); + m_pivotCamera = AZStd::make_shared(SandboxEditor::CameraPivotChannelId()); m_pivotCamera->SetPivotFn( - []([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) + [pivotFn]([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) { - // use the manipulator transform as the pivot point - AZStd::optional entityPivot; - AzToolsFramework::EditorTransformComponentSelectionRequestBus::EventResult( - entityPivot, AzToolsFramework::GetEntityContextId(), - &AzToolsFramework::EditorTransformComponentSelectionRequestBus::Events::GetManipulatorTransform); - - // otherwise just use the identity - return entityPivot.value_or(AZ::Transform::CreateIdentity()).GetTranslation(); + return pivotFn(); }); m_pivotRotateCamera = AZStd::make_shared(SandboxEditor::CameraPivotLookChannelId()); @@ -244,11 +261,17 @@ namespace SandboxEditor return SandboxEditor::CameraPanInvertedY(); }; + m_pivotFocusCamera = + AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusPivot); + + m_pivotFocusCamera->SetPivotFn(pivotFn); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotRotateCamera); m_pivotCamera->m_pivotCameras.AddCamera(m_pivotTranslateCamera); m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyScrollCamera); m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyMoveCamera); m_pivotCamera->m_pivotCameras.AddCamera(m_pivotPanCamera); + m_pivotCamera->m_pivotCameras.AddCamera(m_pivotFocusCamera); } void EditorModularViewportCameraComposer::OnEditorModularViewportCameraComposerSettingsChanged() @@ -257,12 +280,14 @@ namespace SandboxEditor m_firstPersonTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); m_firstPersonPanCamera->SetPanInputChannelId(SandboxEditor::CameraFreePanChannelId()); m_firstPersonRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraFreeLookChannelId()); + m_firstPersonFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); m_pivotCamera->SetPivotInputChannelId(SandboxEditor::CameraPivotChannelId()); m_pivotTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); m_pivotPanCamera->SetPanInputChannelId(SandboxEditor::CameraPivotPanChannelId()); m_pivotRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraPivotLookChannelId()); m_pivotDollyMoveCamera->SetDollyInputChannelId(SandboxEditor::CameraPivotDollyChannelId()); + m_pivotFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); } void EditorModularViewportCameraComposer::OnViewportViewEntityChanged(const AZ::EntityId& viewEntityId) diff --git a/Code/Editor/EditorModularViewportCameraComposer.h b/Code/Editor/EditorModularViewportCameraComposer.h index e691ca1c89..90103dba43 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.h +++ b/Code/Editor/EditorModularViewportCameraComposer.h @@ -42,12 +42,14 @@ namespace SandboxEditor AZStd::shared_ptr m_firstPersonPanCamera; AZStd::shared_ptr m_firstPersonTranslateCamera; AZStd::shared_ptr m_firstPersonScrollCamera; + AZStd::shared_ptr m_firstPersonFocusCamera; AZStd::shared_ptr m_pivotCamera; AZStd::shared_ptr m_pivotRotateCamera; AZStd::shared_ptr m_pivotTranslateCamera; AZStd::shared_ptr m_pivotDollyScrollCamera; AZStd::shared_ptr m_pivotDollyMoveCamera; AZStd::shared_ptr m_pivotPanCamera; + AZStd::shared_ptr m_pivotFocusCamera; AzFramework::ViewportId m_viewportId; }; diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.cpp b/Code/Editor/EditorPreferencesPageViewportCamera.cpp index 55b631e1f6..b632163186 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.cpp +++ b/Code/Editor/EditorPreferencesPageViewportCamera.cpp @@ -91,7 +91,8 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Field("FreePan", &CameraInputSettings::m_freePanChannelId) ->Field("PivotLook", &CameraInputSettings::m_pivotLookChannelId) ->Field("PivotDolly", &CameraInputSettings::m_pivotDollyChannelId) - ->Field("PivotPan", &CameraInputSettings::m_pivotPanChannelId); + ->Field("PivotPan", &CameraInputSettings::m_pivotPanChannelId) + ->Field("Focus", &CameraInputSettings::m_focusChannelId); serialize.Class() ->Version(1) @@ -206,14 +207,17 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->DataElement( AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotPanChannelId, "Pivot Pan", "Key/button to begin camera pivot pan") + ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) + ->DataElement( + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_focusChannelId, "Focus", "Key/button to focus camera pivot") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames); editContext->Class("Viewport Preferences", "Viewport Preferences") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) ->DataElement( - AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraMovementSettings, - "Camera Movement Settings", "Camera Movement Settings") + AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraMovementSettings, "Camera Movement Settings", + "Camera Movement Settings") ->DataElement( AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportCamera::m_cameraInputSettings, "Camera Input Settings", "Camera Input Settings"); @@ -281,6 +285,7 @@ void CEditorPreferencesPage_ViewportCamera::OnApply() SandboxEditor::SetCameraPivotLookChannelId(m_cameraInputSettings.m_pivotLookChannelId); SandboxEditor::SetCameraPivotDollyChannelId(m_cameraInputSettings.m_pivotDollyChannelId); SandboxEditor::SetCameraPivotPanChannelId(m_cameraInputSettings.m_pivotPanChannelId); + SandboxEditor::SetCameraFocusChannelId(m_cameraInputSettings.m_focusChannelId); SandboxEditor::EditorModularViewportCameraComposerNotificationBus::Broadcast( &SandboxEditor::EditorModularViewportCameraComposerNotificationBus::Events::OnEditorModularViewportCameraComposerSettingsChanged); @@ -316,4 +321,5 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings() m_cameraInputSettings.m_pivotLookChannelId = SandboxEditor::CameraPivotLookChannelId().GetName(); m_cameraInputSettings.m_pivotDollyChannelId = SandboxEditor::CameraPivotDollyChannelId().GetName(); m_cameraInputSettings.m_pivotPanChannelId = SandboxEditor::CameraPivotPanChannelId().GetName(); + m_cameraInputSettings.m_focusChannelId = SandboxEditor::CameraFocusChannelId().GetName(); } diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.h b/Code/Editor/EditorPreferencesPageViewportCamera.h index 01dc4664f6..cd31141c4a 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.h +++ b/Code/Editor/EditorPreferencesPageViewportCamera.h @@ -86,6 +86,7 @@ private: AZStd::string m_pivotLookChannelId; AZStd::string m_pivotDollyChannelId; AZStd::string m_pivotPanChannelId; + AZStd::string m_focusChannelId; }; CameraMovementSettings m_cameraMovementSettings; diff --git a/Code/Editor/EditorViewportSettings.cpp b/Code/Editor/EditorViewportSettings.cpp index fe8efecd17..c2539b008c 100644 --- a/Code/Editor/EditorViewportSettings.cpp +++ b/Code/Editor/EditorViewportSettings.cpp @@ -50,6 +50,7 @@ namespace SandboxEditor constexpr AZStd::string_view CameraPivotLookIdSetting = "/Amazon/Preferences/Editor/Camera/PivotLookId"; constexpr AZStd::string_view CameraPivotDollyIdSetting = "/Amazon/Preferences/Editor/Camera/PivotDollyId"; constexpr AZStd::string_view CameraPivotPanIdSetting = "/Amazon/Preferences/Editor/Camera/PivotPanId"; + constexpr AZStd::string_view CameraFocusIdSetting = "/Amazon/Preferences/Editor/Camera/FocusId"; template void SetRegistry(const AZStd::string_view setting, T&& value) @@ -462,4 +463,14 @@ namespace SandboxEditor { SetRegistry(CameraPivotPanIdSetting, cameraPivotPanId); } + + AzFramework::InputChannelId CameraFocusChannelId() + { + return AzFramework::InputChannelId(GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str()); + } + + void SetCameraFocusChannelId(AZStd::string_view cameraFocusId) + { + SetRegistry(CameraFocusIdSetting, cameraFocusId); + } } // namespace SandboxEditor diff --git a/Code/Editor/EditorViewportSettings.h b/Code/Editor/EditorViewportSettings.h index d1271017c6..0253b01621 100644 --- a/Code/Editor/EditorViewportSettings.h +++ b/Code/Editor/EditorViewportSettings.h @@ -136,4 +136,7 @@ namespace SandboxEditor SANDBOX_API AzFramework::InputChannelId CameraPivotPanChannelId(); SANDBOX_API void SetCameraPivotPanChannelId(AZStd::string_view cameraPivotPanId); + + SANDBOX_API AzFramework::InputChannelId CameraFocusChannelId(); + SANDBOX_API void SetCameraFocusChannelId(AZStd::string_view cameraFocusId); } // namespace SandboxEditor diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp index a3eb4d8329..13f5303eaf 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp @@ -623,15 +623,24 @@ namespace AzFramework { Camera nextCamera = targetCamera; - const auto pivotDirection = targetCamera.m_offset.GetNormalized(); - nextCamera.m_offset -= pivotDirection * delta; - const auto pivotDot = targetCamera.m_offset.Dot(nextCamera.m_offset); - const auto distance = nextCamera.m_offset.GetLength() * AZ::GetSign(pivotDot); + // handle case where pivot and offset may be the same to begin with + // choose negative y-axis for offset to default to moving the camera backwards from the pivot (standard centered pivot behavior) + const auto pivotDirection = [&targetCamera] + { + if (const auto offsetLength = targetCamera.m_offset.GetLength(); AZ::IsCloseMag(offsetLength, 0.0f)) + { + return -AZ::Vector3::CreateAxisY(); + } + else + { + return targetCamera.m_offset / offsetLength; + } + }(); - const auto minDistance = 0.01f; - if (distance < minDistance || pivotDot < 0.0f) + nextCamera.m_offset -= pivotDirection * delta; + if (pivotDirection.Dot(nextCamera.m_offset) < 0.0f) { - nextCamera.m_offset = pivotDirection * minDistance; + nextCamera.m_offset = pivotDirection * 0.001f; } return nextCamera; @@ -771,6 +780,73 @@ namespace AzFramework return camera; } + FocusCameraInput::FocusCameraInput(const InputChannelId& focusChannelId, FocusOffsetFn offsetFn) + : m_focusChannelId(focusChannelId) + , m_offsetFn(offsetFn) + { + } + + bool FocusCameraInput::HandleEvents( + const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] float scrollDelta) + { + if (const auto* input = AZStd::get_if(&event)) + { + if (input->m_channelId == m_focusChannelId && input->m_state == InputChannel::State::Began) + { + BeginActivation(); + } + } + + return !Idle(); + } + + Camera FocusCameraInput::StepCamera( + const Camera& targetCamera, + [[maybe_unused]] const ScreenVector& cursorDelta, + [[maybe_unused]] float scrollDelta, + [[maybe_unused]] float deltaTime) + { + if (Beginning()) + { + // as the camera starts, record the camera we would like to end up as + m_nextCamera.m_offset = m_offsetFn(m_pivotFn().GetDistance(targetCamera.Translation())); + const auto angles = + EulerAngles(AZ::Matrix3x3::CreateFromMatrix3x4(AZ::Matrix3x4::CreateLookAt(targetCamera.Translation(), m_pivotFn()))); + m_nextCamera.m_pitch = angles.GetX(); + m_nextCamera.m_yaw = angles.GetZ(); + m_nextCamera.m_pivot = targetCamera.m_pivot; + } + + // end the behavior when the camera is in alignment + if (AZ::IsCloseMag(targetCamera.m_pitch, m_nextCamera.m_pitch) && AZ::IsCloseMag(targetCamera.m_yaw, m_nextCamera.m_yaw)) + { + EndActivation(); + } + + return m_nextCamera; + } + + void FocusCameraInput::SetPivotFn(PivotFn pivotFn) + { + m_pivotFn = AZStd::move(pivotFn); + } + + void FocusCameraInput::SetFocusInputChannelId(const InputChannelId& focusChannelId) + { + m_focusChannelId = focusChannelId; + } + + bool CustomCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) + { + return m_handleEventsFn(*this, event, cursorDelta, scrollDelta); + } + + Camera CustomCameraInput::StepCamera( + const Camera& targetCamera, const ScreenVector& cursorDelta, const float scrollDelta, const float deltaTime) + { + return m_stepCameraFn(*this, targetCamera, cursorDelta, scrollDelta, deltaTime); + } + InputEvent BuildInputEvent(const InputChannel& inputChannel, const WindowSize& windowSize) { const auto& inputChannelId = inputChannel.GetInputChannelId(); diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h index c44d951292..9b1988f5ec 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h @@ -617,6 +617,60 @@ namespace AzFramework return true; } + //! Callback to use for FocusCameraInput when a free look camera is being used. + //! @note This is when offset is zero. + inline AZ::Vector3 FocusLook(float) + { + return AZ::Vector3::CreateZero(); + } + + //! Callback to use for FocusCameraInput when a pivot camera is being used. + //! @note This is when offset is non zero. + inline AZ::Vector3 FocusPivot(const float length) + { + return AZ::Vector3::CreateAxisY(-length); + } + + using FocusOffsetFn = AZStd::function; + + //! A focus behavior to align the camera view to the position returned by the pivot function. + //! @note This only alters the camera orientation, the translation is unaffected. + class FocusCameraInput : public CameraInput + { + public: + using PivotFn = AZStd::function; + + FocusCameraInput(const InputChannelId& focusChannelId, FocusOffsetFn offsetFn); + + // CameraInput overrides ... + bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; + Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; + + //! Override the default behavior for how a pivot point is calculated. + void SetPivotFn(PivotFn pivotFn); + + void SetFocusInputChannelId(const InputChannelId& focusChannelId); + + private: + InputChannelId m_focusChannelId; //!< Input channel to begin the focus camera input. + Camera m_nextCamera; + PivotFn m_pivotFn; + FocusOffsetFn m_offsetFn; + }; + + //! Provides a CameraInput type that can be implemented without needing to create a new type deriving from CameraInput. + //! This can be very useful for specific use cases that are less generally applicable. + class CustomCameraInput : public CameraInput + { + public: + // CameraInput overrides ... + bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; + Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; + + AZStd::function m_handleEventsFn; + AZStd::function m_stepCameraFn; + }; + //! Map from a generic InputChannel event to a camera specific InputEvent. InputEvent BuildInputEvent(const InputChannel& inputChannel, const WindowSize& windowSize); } // namespace AzFramework From 79bd15aabd4d3cc017903928c4c52c5383c4f3aa Mon Sep 17 00:00:00 2001 From: John Date: Wed, 6 Oct 2021 15:45:51 +0100 Subject: [PATCH 124/226] Disable TIAF job Signed-off-by: John --- scripts/build/Platform/Windows/build_config.json | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index c607c3d821..7c39661273 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -31,7 +31,6 @@ ], "steps": [ "profile_vs2019", - "test_impact_analysis_profile_vs2019", "asset_profile_vs2019", "test_cpu_profile_vs2019" ] From 9ecbf4b8e6ddcdc7ad21034ef27144d58cc8c693 Mon Sep 17 00:00:00 2001 From: lsemp3d <58790905+lsemp3d@users.noreply.github.com> Date: Wed, 6 Oct 2021 07:56:07 -0700 Subject: [PATCH 125/226] Removed debugging pragmas Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com> --- .../View/Widgets/VariablePanel/GraphVariablesTableView.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp index 5f76820975..5b78c62bac 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/GraphVariablesTableView.cpp @@ -37,8 +37,6 @@ #include #include -#pragma optimize("", off) - namespace ScriptCanvasEditor { @@ -1414,6 +1412,3 @@ namespace ScriptCanvasEditor #include } - - -#pragma optimize("", on) From 032939d395696754b3bfd74752fc7c48976ab734 Mon Sep 17 00:00:00 2001 From: Steve Pham <82231385+spham-amzn@users.noreply.github.com> Date: Wed, 6 Oct 2021 08:42:17 -0700 Subject: [PATCH 126/226] Fix AtomTressFX shader compile error Case Sensitivity (#4513) Signed-off-by: Steve Pham --- Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl index f8d178206a..496aa5c7da 100644 --- a/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl +++ b/Gems/AtomTressFX/Assets/Shaders/HairSimulationCompute.azsl @@ -31,7 +31,7 @@ // THE SOFTWARE. // //-------------------------------------------------------------------------------------- -#include +#include #include //-------------------------------------------------------------------------------------- From 4b6c93f2893388cbad57a3ebeae8fd59d52e215a Mon Sep 17 00:00:00 2001 From: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> Date: Wed, 6 Oct 2021 10:48:01 -0500 Subject: [PATCH 127/226] Bugfixes for terrain surface data. (#4508) * Bugfixes for terrain surface data. 1. Changed the TerrainSurfaceDataSystem component to query for all the surface types, now that we have them. 2. Added dependency tracking to the TerrainSurfaceGradientList component so that it will refresh terrain data when any of its data changes. Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> * Addressed PR feedback Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> --- .../TerrainSurfaceDataSystemComponent.cpp | 10 +++++ .../TerrainSurfaceGradientListComponent.cpp | 44 +++++++++++++++++-- .../TerrainSurfaceGradientListComponent.h | 8 ++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp index 04c94b24d6..0346ff7281 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceDataSystemComponent.cpp @@ -156,9 +156,19 @@ namespace Terrain point.m_entityId = GetEntityId(); point.m_position = AZ::Vector3(inPosition.GetX(), inPosition.GetY(), terrainHeight); point.m_normal = terrain->GetNormal(inPosition); + + // Always add a "terrain" or "terrainHole" tag. const AZ::Crc32 terrainTag = isHole ? SurfaceData::Constants::s_terrainHoleTagCrc : SurfaceData::Constants::s_terrainTagCrc; SurfaceData::AddMaxValueForMasks(point.m_masks, terrainTag, 1.0f); + + // Add all of the surface tags that the terrain has at this point. + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet surfaceWeights; + terrain->GetSurfaceWeights(point.m_position, surfaceWeights); + for (auto& tag : surfaceWeights) + { + SurfaceData::AddMaxValueForMasks(point.m_masks, tag.m_surfaceType, tag.m_weight); + } surfacePointList.push_back(point); } // Only one handler should exist. diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp index 2fbd6a4814..958e175cf3 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.cpp @@ -12,6 +12,7 @@ #include #include +#include namespace Terrain { @@ -33,7 +34,8 @@ namespace Terrain ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->DataElement( - AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_gradientEntityId, "Gradient Entity", "ID of Entity providing a gradient.") + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientMapping::m_gradientEntityId, + "Gradient Entity", "ID of Entity providing a gradient.") ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) ->UIElement("GradientPreviewer", "Previewer") ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "") @@ -68,7 +70,8 @@ namespace Terrain ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ->DataElement( - AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings, "Gradient to Surface Mappings", "Maps Gradient Entities to Surfaces.") + AZ::Edit::UIHandlers::Default, &TerrainSurfaceGradientListConfig::m_gradientSurfaceMappings, + "Gradient to Surface Mappings", "Maps Gradient Entities to Surfaces.") ; } } @@ -109,12 +112,36 @@ namespace Terrain void TerrainSurfaceGradientListComponent::Activate() { + LmbrCentral::DependencyNotificationBus::Handler::BusConnect(GetEntityId()); Terrain::TerrainAreaSurfaceRequestBus::Handler::BusConnect(GetEntityId()); + + // Make sure we get update notifications whenever this entity or any dependent gradient entity changes in any way. + // We'll use that to notify the terrain system that the surface information needs to be refreshed. + m_dependencyMonitor.Reset(); + m_dependencyMonitor.ConnectOwner(GetEntityId()); + m_dependencyMonitor.ConnectDependency(GetEntityId()); + + for (auto& surfaceMapping : m_configuration.m_gradientSurfaceMappings) + { + if (surfaceMapping.m_gradientEntityId != GetEntityId()) + { + m_dependencyMonitor.ConnectDependency(surfaceMapping.m_gradientEntityId); + } + } + + // Notify that the area has changed. + OnCompositionChanged(); } void TerrainSurfaceGradientListComponent::Deactivate() { + m_dependencyMonitor.Reset(); + Terrain::TerrainAreaSurfaceRequestBus::Handler::BusDisconnect(); + LmbrCentral::DependencyNotificationBus::Handler::BusDisconnect(); + + // Since this surface data will no longer exist, notify the terrain system to refresh the area. + OnCompositionChanged(); } bool TerrainSurfaceGradientListComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig) @@ -137,7 +164,9 @@ namespace Terrain return false; } - void TerrainSurfaceGradientListComponent::GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const + void TerrainSurfaceGradientListComponent::GetSurfaceWeights( + const AZ::Vector3& inPosition, + AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const { outSurfaceWeights.clear(); @@ -146,7 +175,8 @@ namespace Terrain for (const auto& mapping : m_configuration.m_gradientSurfaceMappings) { float weight = 0.0f; - GradientSignal::GradientRequestBus::EventResult(weight, mapping.m_gradientEntityId, &GradientSignal::GradientRequestBus::Events::GetValue, params); + GradientSignal::GradientRequestBus::EventResult(weight, + mapping.m_gradientEntityId, &GradientSignal::GradientRequestBus::Events::GetValue, params); AzFramework::SurfaceData::SurfaceTagWeight tagWeight; tagWeight.m_surfaceType = mapping.m_surfaceTag; @@ -154,4 +184,10 @@ namespace Terrain outSurfaceWeights.emplace(tagWeight); } } + + void TerrainSurfaceGradientListComponent::OnCompositionChanged() + { + TerrainSystemServiceRequestBus::Broadcast(&TerrainSystemServiceRequestBus::Events::RefreshArea, GetEntityId()); + } + } // namespace Terrain diff --git a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h index 799038354c..bb30029f35 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h +++ b/Gems/Terrain/Code/Source/Components/TerrainSurfaceGradientListComponent.h @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include @@ -47,6 +49,7 @@ namespace Terrain class TerrainSurfaceGradientListComponent : public AZ::Component , public Terrain::TerrainAreaSurfaceRequestBus::Handler + , private LmbrCentral::DependencyNotificationBus::Handler { public: template @@ -72,6 +75,11 @@ namespace Terrain void GetSurfaceWeights(const AZ::Vector3& inPosition, AzFramework::SurfaceData::OrderedSurfaceTagWeightSet& outSurfaceWeights) const override; private: + ////////////////////////////////////////////////////////////////////////// + // LmbrCentral::DependencyNotificationBus + void OnCompositionChanged() override; + TerrainSurfaceGradientListConfig m_configuration; + LmbrCentral::DependencyMonitor m_dependencyMonitor; }; } // namespace Terrain From 49dd0d633196f55f0d83113b609dc58054317410 Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Wed, 6 Oct 2021 11:06:28 -0500 Subject: [PATCH 128/226] Update with PR feedback. Use direct ratio on hardware concurrency with a set min and an a number excluded for O3DE threads Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com> --- .../AzCore/AzCore/Jobs/JobManagerComponent.cpp | 11 ++++++++--- .../AzCore/Task/TaskGraphSystemComponent.cpp | 15 ++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp index 2cd740bf9e..e98711049c 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp @@ -20,8 +20,9 @@ #include -AZ_CVAR(uint32_t, cl_numeratorJobThreads, 1, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine supports to create at initialization"); -AZ_CVAR(uint32_t, cl_denominatorJobThreads, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system divisor on the number of hw threads the machine supports to create at initialization"); +AZ_CVAR(float, cl_jobThreadsConcurrencyRatio, 0.5f, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine creates at initialization"); +AZ_CVAR(uint32_t, cl_jobThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system number of hardware threads that are reserved for O3DE system threads"); +AZ_CVAR(uint32_t, cl_jobThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system minimum number of worker threads to create after scaling the number of hw threads"); namespace AZ { @@ -53,7 +54,11 @@ namespace AZ int numberOfWorkerThreads = m_numberOfWorkerThreads; if (numberOfWorkerThreads <= 0) // spawn default number of threads { - numberOfWorkerThreads = AZ::GetMin(static_cast(desc.m_workerThreads.capacity()), cl_numeratorJobThreads * AZStd::thread::hardware_concurrency() / cl_denominatorJobThreads); + // calc number of job threads = cl_jobThreadsConcurrencyRatio * (number of hardware threads - cl_jobThreadsNumReserved), + // min = cl_jobThreadsMinNumber, + // max = number of hardware threads - cl_jobThreadsNumReserved + uint32_t scaledHardwareThreads = AZ::GetMax( cl_jobThreadsMinNumber, static_cast(AZStd::floor( 0.5f + AZ::GetClamp(cl_jobThreadsConcurrencyRatio, 0.0f, 1.0f) * static_cast(AZStd::thread::hardware_concurrency() - cl_jobThreadsNumReserved)))); + numberOfWorkerThreads = AZ::GetMin(static_cast(desc.m_workerThreads.capacity()), scaledHardwareThreads); #if (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS) numberOfWorkerThreads = AZ::GetMin(numberOfWorkerThreads, AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS); #endif // (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS) diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp index 198969dbce..6548d9d162 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp @@ -11,11 +11,13 @@ #include #include #include +#include // Create a cvar as a central location for experimentation with switching from the Job system to TaskGraph system. AZ_CVAR(bool, cl_activateTaskGraph, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Flag clients of TaskGraph to switch between jobs/taskgraph (Note does not disable task graph system)"); -AZ_CVAR(uint32_t, cl_numeratorTaskGraphThreads, 3, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph multiplier on the number of hw threads the machine supports to create at initialization"); -AZ_CVAR(uint32_t, cl_denominatorTaskGraphThreads, 4, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph divisor on the number of hw threads the machine supports to create at initialization"); +AZ_CVAR(float, cl_taskGraphThreadsConcurrencyRatio, 0.75f, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph calculate the number of worker threads to spawn by scaling the number of hw threads, value is clamped between 0.0f and 1.0f"); +AZ_CVAR(uint32_t, cl_taskGraphThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph number of hardware threads that are reserved for O3DE system threads"); +AZ_CVAR(uint32_t, cl_taskGraphThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph minimum number of worker threads to create after scaling the number of hw threads"); static constexpr uint32_t TaskExecutorServiceCrc = AZ_CRC_CE("TaskExecutorService"); @@ -27,10 +29,13 @@ namespace AZ if (Interface::Get() == nullptr) { - uint32_t numThreads = cl_numeratorTaskGraphThreads * AZStd::thread::hardware_concurrency() / cl_denominatorTaskGraphThreads; - m_taskExecutor = aznew TaskExecutor(numThreads); + // calc number of worker threads = cl_taskGraphThreadsConcurrencyRatio * (number of hardware threads - cl_taskGraphThreadsNumReserved), + // min = cl_taskGraphThreadsMinNumber, + // max = number of hardware threads - cl_taskGraphThreadsNumReserved + uint32_t scaledHardwareThreads = AZ::GetMax( cl_taskGraphThreadsMinNumber, static_cast(AZStd::floor( 0.5f + AZ::GetClamp(cl_taskGraphThreadsConcurrencyRatio, 0.0f, 1.0f) * static_cast(AZStd::thread::hardware_concurrency() - cl_taskGraphThreadsNumReserved)))); + m_taskExecutor = aznew TaskExecutor(scaledHardwareThreads); TaskExecutor::SetInstance(m_taskExecutor); - Interface::Register(this); + Interface::Register(this); } } From 8f1a589fcff92f6953dc6a9e5b41658cac8a0e43 Mon Sep 17 00:00:00 2001 From: Shirang Jia Date: Wed, 6 Oct 2021 09:27:20 -0700 Subject: [PATCH 129/226] Send message to post_ar_build SNS topic after build finished (#4442) * Send message to post_ar_build SNS topic after build finished Signed-off-by: shiranj * Add build number to SNS message Signed-off-by: shiranj --- scripts/build/Jenkins/Jenkinsfile | 35 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 5fe19ddf46..ffca69a14f 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -793,27 +793,32 @@ catch(Exception e) { } finally { try { - if(env.SNS_TOPIC) { - snsPublish( - topicArn: env.SNS_TOPIC, - subject:'Build Result', - message:"${currentBuild.currentResult}:${BUILD_URL}:${env.RECREATE_VOLUME}:${env.CLEAN_OUTPUT_DIRECTORY}:${env.CLEAN_ASSETS}" - ) - } node('controller') { if("${currentBuild.currentResult}" == "SUCCESS") { + buildFailure = "" emailBody = "${BUILD_URL}\nSuccess!" } else { buildFailure = tm('${BUILD_FAILURE_ANALYZER}') emailBody = "${BUILD_URL}\n${buildFailure}!" - if(env.SNS_TOPIC_BUILD_FAILURE) { - message_json = ["build_url":env.BUILD_URL, "repository_name":env.REPOSITORY_NAME, "branch_name":env.BRANCH_NAME, "build_failure":buildFailure] - snsPublish( - topicArn: env.SNS_TOPIC_BUILD_FAILURE, - subject:'Build Failure', - message:JsonOutput.toJson(message_json) - ) - } + + } + if(env.POST_AR_BUILD_SNS_TOPIC) { + message_json = [ + "build_url": env.BUILD_URL, + "build_number": env.BUILD_NUMBER, + "repository_name": env.REPOSITORY_NAME, + "branch_name": env.BRANCH_NAME, + "build_result": "${currentBuild.currentResult}", + "build_failure": buildFailure, + "recreate_volume": env.RECREATE_VOLUME, + "clean_output_directory": env.CLEAN_OUTPUT_DIRECTORY, + "clean_assets": env.CLEAN_ASSETS + ] + snsPublish( + topicArn: env.POST_AR_BUILD_SNS_TOPIC, + subject:'Build Result', + message:JsonOutput.toJson(message_json) + ) } emailext ( body: "${emailBody}", From 15ecf3c65aa1a8123d08bbbf39fb707403f9083b Mon Sep 17 00:00:00 2001 From: Adi Bar-Lev <82479970+Adi-Amazon@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:41:51 -0400 Subject: [PATCH 130/226] Hair - fixing per object UI control per object (#4507) - Deferred material array index was not passed every frame (the objects' material array is built during the frame) Signed-off-by: Adi-Amazon --- .../Code/Rendering/HairFeatureProcessor.cpp | 22 +++++++++----- .../Code/Rendering/HairRenderObject.cpp | 30 +++++++++++-------- .../Code/Rendering/HairRenderObject.h | 7 ++++- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp index e4f1b02a88..7c8ce74f8e 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -226,27 +226,34 @@ namespace AZ // Prepare materials array for the per pass srg std::vector hairObjectsRenderMaterials; - uint32_t obj = 0; - for (auto objIter = m_hairRenderObjects.begin(); objIter != m_hairRenderObjects.end(); ++objIter, ++obj) + uint32_t objectIndex = 0; + for (auto& renderObject : m_hairRenderObjects) { - HairRenderObject* renderObject = objIter->get(); if (!renderObject->IsEnabled()) { continue; } - renderObject->Update(); + + renderObject->SetRenderIndex(objectIndex); // [To Do] Hair - update the following parameters for dynamic LOD control // should change or when parameters are being changed on the editor side. // float Distance = sqrtf( m_activeScene.scene->GetCameraPos().x * m_activeScene.scene->GetCameraPos().x + // m_activeScene.scene->GetCameraPos().y * m_activeScene.scene->GetCameraPos().y + // m_activeScene.scene->GetCameraPos().z * m_activeScene.scene->GetCameraPos().z); -// objIter->get()->UpdateRenderingParameters( -// renderingSettings, m_nScreenWidth * m_nScreenHeight * AVE_FRAGS_PER_PIXEL, m_deltaTime, Distance); + const float distanceFromCamera = 1.0f; // fixed distance until LOD mechanism is worked on + const float updateShadows = false; // same here - currently cheap self shadow approx + renderObject->UpdateRenderingParameters( nullptr, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); - // this will be used for the constant buffer + // this will be used in the constant buffer to set the material array used by the resolve pass hairObjectsRenderMaterials.push_back(renderObject->GetHairRenderParams()); + + // The data update for the GPU bind - this should be the very last thing done after the + // data has been read and / or altered on the CPU side. + renderObject->Update(); + ++objectIndex; } + FillHairMaterialsArray(hairObjectsRenderMaterials); } @@ -532,4 +539,3 @@ namespace AZ } // namespace Hair } // namespace Render } // namespace AZ - diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp index a89a3eb1b8..baf986daf6 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp @@ -878,6 +878,11 @@ namespace AZ const AMD::TressFXRenderingSettings* parameters, const int nodePoolSize, float distance, bool shadowUpdate /*= false*/) { + if (!parameters) + { + parameters = m_renderSettings; + } + // Update Render Parameters // If you alter FiberRadius make sure to change it also in the material properties // passed by the Feature Processor for the shading. @@ -888,7 +893,7 @@ namespace AZ // original TressFX lighting parameters - two specular lobes approximating // the Marschner R and and TRT lobes + diffuse component. - m_renderCB->MatKValue = {{{0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1}}}; + m_renderCB->MatKValue = { {{0.f, parameters->m_HairKDiffuse, parameters->m_HairKSpec1, parameters->m_HairSpecExp1}} }; m_renderCB->HairKs2 = parameters->m_HairKSpec2; m_renderCB->HairEx2 = parameters->m_HairSpecExp2; @@ -903,11 +908,13 @@ namespace AZ m_strandCB->TipPercentage = parameters->m_TipPercentage; m_strandCB->StrandUVTilingFactor = parameters->m_StrandUVTilingFactor; m_strandCB->FiberRatio = parameters->m_FiberRatio; + m_strandCB->EnableThinTip = parameters->m_EnableThinTip; + m_strandCB->EnableStrandUV = parameters->m_EnableStrandUV; // Reset LOD hair density for the frame m_LODHairDensity = 1.f; + float fiberRadius = parameters->m_FiberRadius; - float FiberRadius = parameters->m_FiberRadius; if (parameters->m_EnableHairLOD) { float MinLODDist = shadowUpdate ? @@ -922,23 +929,18 @@ namespace AZ float DistanceRatio = AZStd::min((distance - MinLODDist) / AZStd::max(MaxLODDist - MinLODDist, 0.00001f), 1.f); // Lerp: x + s(y-x) - float MaxLODFiberRadius = FiberRadius * (shadowUpdate ? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); - FiberRadius = FiberRadius + (DistanceRatio * (MaxLODFiberRadius - FiberRadius)); + float MaxLODFiberRadius = fiberRadius * (shadowUpdate ? parameters->m_ShadowLODWidthMultiplier : parameters->m_LODWidthMultiplier); + fiberRadius = fiberRadius + (DistanceRatio * (MaxLODFiberRadius - fiberRadius)); // Lerp: x + s(y-x) m_LODHairDensity = 1.f + (DistanceRatio * ((shadowUpdate ? parameters->m_ShadowLODPercent : parameters->m_LODPercent) - 1.f)); } } - m_strandCB->FiberRadius = FiberRadius; - - m_strandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Always constant - m_strandCB->EnableThinTip = parameters->m_EnableThinTip; + m_strandCB->FiberRadius = fiberRadius; + m_strandCB->NumVerticesPerStrand = m_NumVerticesPerStrand; // Constant through the run per object m_strandCB->NodePoolSize = nodePoolSize; - m_strandCB->RenderParamsIndex = m_RenderIndex; // Always constant - - m_strandCB->EnableStrandUV = parameters->m_EnableStrandUV; - m_strandCB->EnableStrandTangent = parameters->m_EnableStrandTangent; + m_strandCB->RenderParamsIndex = m_RenderIndex; // Per Objects specific according to its index in the FP } //!===================================================================================== @@ -977,8 +979,10 @@ namespace AZ UpdateSimulationParameters(simSettings, SIMULATION_TIME_STEP); // [To Do] Hair - change to be dynamically calculated - const float distanceFromCamera = 1.0; + const float distanceFromCamera = 1.0f; const float updateShadows = false; + m_renderSettings = renderSettings; + m_simSettings = simSettings; UpdateRenderingParameters(renderSettings, RESERVED_PIXELS_FOR_OIT, distanceFromCamera, updateShadows); if (!GetShaders()) diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h index c81d2b9079..fa4095eed0 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.h @@ -269,6 +269,7 @@ namespace AZ void UpdateSimulationParameters(const AMD::TressFXSimulationSettings* settings, float timeStep); void SetWind(const Vector3& windDir, float windMag, int frame); + void SetRenderIndex(uint32_t renderIndex) { m_RenderIndex = renderIndex; } void ResetPositions() { m_simCB->g_ResetPositions = 1.0f; } void IncreaseSimulationFrame() @@ -315,6 +316,10 @@ namespace AZ float m_frameDeltaTime = 0.02; + //! The following are the configuration settings that might be required during the update. + AMD::TressFXSimulationSettings* m_simSettings = nullptr; + AMD::TressFXRenderingSettings* m_renderSettings = nullptr; + //! Hair asset information uint32_t m_TotalIndices = 0; uint32_t m_NumTotalVertices = 0; @@ -331,7 +336,7 @@ namespace AZ //! Controls reset / copy base hair state uint32_t m_SimulationFrame = 0; - // [To Do] - verify if still required + //! The index used as a look up into the material array during the resolve pass uint32_t m_RenderIndex = 0; //!----------------------------------------------------------------- From 8928c90cc47428ef7cded1af95b483653964bbb2 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 6 Oct 2021 10:13:49 -0700 Subject: [PATCH 131/226] Makes Editor depend on LuaIDE (#4514) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Tools/Standalone/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Code/Tools/Standalone/CMakeLists.txt b/Code/Tools/Standalone/CMakeLists.txt index 78047dd6cf..12bdb8f453 100644 --- a/Code/Tools/Standalone/CMakeLists.txt +++ b/Code/Tools/Standalone/CMakeLists.txt @@ -38,3 +38,5 @@ ly_add_target( PRIVATE STANDALONETOOLS_ENABLE_LUA_IDE ) + +ly_add_dependencies(Editor LuaIDE) From 0848a9cdf958c430f2a7ec68a6462688d0588b93 Mon Sep 17 00:00:00 2001 From: allisaurus <34254888+allisaurus@users.noreply.github.com> Date: Wed, 6 Oct 2021 10:26:51 -0700 Subject: [PATCH 132/226] Add field names, tooltips to AWSClientAuth gem AuthenticationProviderScriptCanvasRequestBus nodes (#4451) Signed-off-by: Stanko --- .../Source/AWSClientAuthSystemComponent.cpp | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp b/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp index 198f29ebf7..dbde19aad6 100644 --- a/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp +++ b/Gems/AWSClientAuth/Code/Source/AWSClientAuthSystemComponent.cpp @@ -33,7 +33,7 @@ namespace AWSClientAuth AZ::SerializeContext* serialize = azrtti_cast(context); if (serialize) { - serialize->Class()->Version(0); + serialize->Class()->Version(1); if (AZ::EditContext* ec = serialize->GetEditContext()) { @@ -55,26 +55,44 @@ namespace AWSClientAuth ->Enum<(int)ProviderNameEnum::AWSCognitoIDP>("ProviderNameEnum_AWSCognitoIDP") ->Enum<(int)ProviderNameEnum::LoginWithAmazon>("ProviderNameEnum_LoginWithAmazon") ->Enum<(int)ProviderNameEnum::Google>("ProviderNameEnum_Google"); - behaviorContext->EBus("AuthenticationProviderRequestBus") ->Attribute(AZ::Script::Attributes::Category, SerializeComponentName) ->Event("Initialize", &AuthenticationProviderScriptCanvasRequestBus::Events::Initialize) - ->Event("IsSignedIn", &AuthenticationProviderScriptCanvasRequestBus::Events::IsSignedIn) - ->Event("GetAuthenticationTokens", &AuthenticationProviderScriptCanvasRequestBus::Events::GetAuthenticationTokens) + ->Event("IsSignedIn", &AuthenticationProviderScriptCanvasRequestBus::Events::IsSignedIn, + { { { "Provider name", "The identity provider name" } } }) + ->Event("GetAuthenticationTokens", &AuthenticationProviderScriptCanvasRequestBus::Events::GetAuthenticationTokens, + { { { "Provider name", "The identity provider name" } } }) ->Event( "PasswordGrantSingleFactorSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantSingleFactorSignInAsync) + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantSingleFactorSignInAsync, + { { { "Provider name", "The identity provider" }, { "Username", "The client's username" }, { "Password", "The client's password" } } }) ->Event( "PasswordGrantMultiFactorSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorSignInAsync) + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorSignInAsync, + { { { "Provider name", "The identity provider name" }, + { "Username", "The client's username" }, + { "Password", "The client's password" } } }) ->Event( "PasswordGrantMultiFactorConfirmSignInAsync", - &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorConfirmSignInAsync) - ->Event("DeviceCodeGrantSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantSignInAsync) - ->Event("DeviceCodeGrantConfirmSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantConfirmSignInAsync) - ->Event("RefreshTokensAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::RefreshTokensAsync) - ->Event("GetTokensWithRefreshAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::GetTokensWithRefreshAsync) - ->Event("SignOut", &AuthenticationProviderScriptCanvasRequestBus::Events::SignOut); + &AuthenticationProviderScriptCanvasRequestBus::Events::PasswordGrantMultiFactorConfirmSignInAsync, + { { { "Provider name", "The identity provider name" }, + { "Username", "The client's username" }, + { "Confirmation code", "The client's confirmation code" } } }) + ->Event( + "DeviceCodeGrantSignInAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantSignInAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "DeviceCodeGrantConfirmSignInAsync", + &AuthenticationProviderScriptCanvasRequestBus::Events::DeviceCodeGrantConfirmSignInAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "RefreshTokensAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::RefreshTokensAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event("GetTokensWithRefreshAsync", &AuthenticationProviderScriptCanvasRequestBus::Events::GetTokensWithRefreshAsync, + { { { "Provider name", "The identity provider name" } } }) + ->Event( + "SignOut", &AuthenticationProviderScriptCanvasRequestBus::Events::SignOut, + { { { "Provider name", "The identity provider name" } } }); behaviorContext->EBus("AWSCognitoAuthorizationRequestBus") ->Attribute(AZ::Script::Attributes::Category, SerializeComponentName) From 46ae0d3f1ca824690ca0cfd6a8741be1186ffab0 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Wed, 6 Oct 2021 10:39:31 -0700 Subject: [PATCH 133/226] fix linux build error on unique_ptr deletion Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com> --- .../Editor/View/Windows/Tools/UpgradeTool/Controller.cpp | 6 +++++- .../Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 138532be0f..dbcd176ee5 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -35,7 +35,6 @@ #include #include -// #include namespace ScriptCanvasEditor { @@ -63,6 +62,11 @@ namespace ScriptCanvasEditor ModelNotificationsBus::Handler::BusConnect(); } + Controller::~Controller() + { + delete m_view; + } + void Controller::AddLogEntries() { const AZStd::vector* logs = nullptr; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h index 298f755d56..9842ea3da4 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.h @@ -52,6 +52,7 @@ namespace ScriptCanvasEditor AZ_CLASS_ALLOCATOR(Controller, AZ::SystemAllocator, 0); explicit Controller(QWidget* parent = nullptr); + ~Controller(); private: static constexpr int ColumnAsset = 0; @@ -59,7 +60,7 @@ namespace ScriptCanvasEditor static constexpr int ColumnBrowse = 2; static constexpr int ColumnStatus = 3; - AZStd::unique_ptr m_view; + Ui::View* m_view = nullptr; int m_handledAssetCount = 0; void AddLogEntries(); From 4f51b53558d88d59993f305fad84c352b33ba2e6 Mon Sep 17 00:00:00 2001 From: Junbo Liang <68558268+junbo75@users.noreply.github.com> Date: Wed, 6 Oct 2021 10:56:49 -0700 Subject: [PATCH 134/226] [GameLift][FlexMatch] Update session interface for clients to make matchmaking requests (#4450) * [GameLift][FlexMatch] Update session interface for clients to make matchmaking requests Signed-off-by: Junbo Liang --- .../Matchmaking/IMatchmakingRequests.h | 63 ++++++++++ .../Matchmaking/MatchmakingNotifications.h | 62 ++++++++++ .../Matchmaking/MatchmakingRequests.cpp | 78 ++++++++++++ .../Matchmaking/MatchmakingRequests.h | 66 ++++++++++ .../AzFramework/Session/ISessionRequests.h | 89 +------------- ...essionRequests.cpp => SessionRequests.cpp} | 3 +- .../AzFramework/Session/SessionRequests.h | 107 +++++++++++++++++ .../AzFramework/azframework_files.cmake | 7 +- .../Request/AWSGameLiftAcceptMatchRequest.h | 29 +++++ .../AWSGameLiftCreateSessionOnQueueRequest.h | 2 +- .../Request/AWSGameLiftCreateSessionRequest.h | 2 +- .../Request/AWSGameLiftJoinSessionRequest.h | 2 +- .../AWSGameLiftSearchSessionsRequest.h | 2 +- .../AWSGameLiftStartMatchmakingRequest.h | 59 +++++++++ .../AWSGameLiftStopMatchmakingRequest.h | 29 +++++ .../Include/Request/IAWSGameLiftRequests.h | 23 ++++ .../Source/AWSGameLiftClientManager.cpp | 32 +++++ .../Source/AWSGameLiftClientManager.h | 62 ++++++++++ .../AWSGameLiftClientSystemComponent.cpp | 113 ++++++++++++------ .../Source/AWSGameLiftClientSystemComponent.h | 3 + .../Request/AWSGameLiftAcceptMatchRequest.cpp | 43 +++++++ .../AWSGameLiftStartMatchmakingRequest.cpp | 93 ++++++++++++++ .../AWSGameLiftStopMatchmakingRequest.cpp | 41 +++++++ .../awsgamelift_client_files.cmake | 6 + 24 files changed, 885 insertions(+), 131 deletions(-) create mode 100644 Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h create mode 100644 Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h create mode 100644 Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp create mode 100644 Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h rename Code/Framework/AzFramework/AzFramework/Session/{ISessionRequests.cpp => SessionRequests.cpp} (98%) create mode 100644 Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h new file mode 100644 index 0000000000..22b65f8340 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/IMatchmakingRequests.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AzFramework +{ + //! IMatchmakingRequests + //! Pure virtual session interface class to abstract the details of session handling from application code. + class IMatchmakingRequests + { + public: + AZ_RTTI(IMatchmakingRequests, "{BC0B74DA-A448-4F40-9B50-9D73142829D5}"); + + IMatchmakingRequests() = default; + virtual ~IMatchmakingRequests() = default; + + // Registers a player's acceptance or rejection of a proposed matchmaking. + // @param acceptMatchRequest The request of AcceptMatch operation + virtual void AcceptMatch(const AcceptMatchRequest& acceptMatchRequest) = 0; + + // Create a game match for a group of players. + // @param startMatchmakingRequest The request of StartMatchmaking operation + // @return A unique identifier for a matchmaking ticket + virtual AZStd::string StartMatchmaking(const StartMatchmakingRequest& startMatchmakingRequest) = 0; + + // Cancels a matchmaking ticket that is currently being processed. + // @param stopMatchmakingRequest The request of StopMatchmaking operation + virtual void StopMatchmaking(const StopMatchmakingRequest& stopMatchmakingRequest) = 0; + }; + + //! IMatchmakingAsyncRequests + //! Async version of IMatchmakingRequests + class IMatchmakingAsyncRequests + { + public: + AZ_RTTI(ISessionAsyncRequests, "{53513480-2D02-493C-B44E-96AA27F42429}"); + + IMatchmakingAsyncRequests() = default; + virtual ~IMatchmakingAsyncRequests() = default; + + // AcceptMatch Async + // @param acceptMatchRequest The request of AcceptMatch operation + virtual void AcceptMatchAsync(const AcceptMatchRequest& acceptMatchRequest) = 0; + + // StartMatchmaking Async + // @param startMatchmakingRequest The request of StartMatchmaking operation + virtual void StartMatchmakingAsync(const StartMatchmakingRequest& startMatchmakingRequest) = 0; + + // StopMatchmaking Async + // @param stopMatchmakingRequest The request of StopMatchmaking operation + virtual void StopMatchmakingAsync(const StopMatchmakingRequest& stopMatchmakingRequest) = 0; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h new file mode 100644 index 0000000000..ad61971a11 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingNotifications.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AzFramework +{ + //! MatchmakingAsyncRequestNotifications + //! The notifications correspond to matchmaking async requests + class MatchmakingAsyncRequestNotifications + : public AZ::EBusTraits + { + public: + // Safeguard handler for multi-threaded use case + using MutexType = AZStd::recursive_mutex; + + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + // OnAcceptMatchAsyncComplete is fired once AcceptMatchAsync completes + virtual void OnAcceptMatchAsyncComplete() = 0; + + // OnStartMatchmakingAsyncComplete is fired once StartMatchmakingAsync completes + // @param matchmakingTicketId The unique identifier for the matchmaking ticket + virtual void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) = 0; + + // OnStopMatchmakingAsyncComplete is fired once StopMatchmakingAsync completes + virtual void OnStopMatchmakingAsyncComplete() = 0; + }; + using MatchmakingAsyncRequestNotificationBus = AZ::EBus; + + //! MatchmakingNotifications + //! The matchmaking notifications to listen for performing required operations + class MatchAcceptanceNotifications + : public AZ::EBusTraits + { + public: + // Safeguard handler for multi-threaded use case + using MutexType = AZStd::recursive_mutex; + + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + // OnMatchAcceptance is fired when DescribeMatchmaking ticket status is REQUIRES_ACCEPTANCE + virtual void OnMatchAcceptance() = 0; + }; + using MatchAcceptanceNotificationBus = AZ::EBus; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp new file mode 100644 index 0000000000..b6c8c55fa4 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace AzFramework +{ + void AcceptMatchRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("acceptMatch", &AcceptMatchRequest::m_acceptMatch) + ->Field("playerIds", &AcceptMatchRequest::m_playerIds) + ->Field("ticketId", &AcceptMatchRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AcceptMatchRequest", "The container for AcceptMatch request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_acceptMatch, "AcceptMatch", + "Player response to accept or reject match") + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_playerIds, "PlayerIds", + "A list of unique identifiers for players delivering the response") + ->DataElement(AZ::Edit::UIHandlers::Default, &AcceptMatchRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } + + void StartMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("ticketId", &StartMatchmakingRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("StartMatchmakingRequest", "The container for StartMatchmaking request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &StartMatchmakingRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } + + void StopMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("ticketId", &StopMatchmakingRequest::m_ticketId); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("StopMatchmakingRequest", "The container for StopMatchmaking request parameters") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &StopMatchmakingRequest::m_ticketId, "TicketId", + "A unique identifier for a matchmaking ticket"); + } + } + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h new file mode 100644 index 0000000000..58e335696f --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Matchmaking/MatchmakingRequests.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AzFramework +{ + //! AcceptMatchRequest + //! The container for AcceptMatch request parameters. + struct AcceptMatchRequest + { + AZ_RTTI(AcceptMatchRequest, "{AD289D76-CEE2-424F-847E-E62AA83B7D79}"); + static void Reflect(AZ::ReflectContext* context); + + AcceptMatchRequest() = default; + virtual ~AcceptMatchRequest() = default; + + // Player response to accept or reject match + bool m_acceptMatch; + // A list of unique identifiers for players delivering the response + AZStd::vector m_playerIds; + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; + + //! StartMatchmakingRequest + //! The container for StartMatchmaking request parameters. + struct StartMatchmakingRequest + { + AZ_RTTI(StartMatchmakingRequest, "{70B47776-E8E7-4993-BEC3-5CAEC3D48E47}"); + static void Reflect(AZ::ReflectContext* context); + + StartMatchmakingRequest() = default; + virtual ~StartMatchmakingRequest() = default; + + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; + + //! StopMatchmakingRequest + //! The container for StopMatchmaking request parameters. + struct StopMatchmakingRequest + { + AZ_RTTI(StopMatchmakingRequest, "{6132E293-65EF-4DC2-A8A0-00269697229D}"); + static void Reflect(AZ::ReflectContext* context); + + StopMatchmakingRequest() = default; + virtual ~StopMatchmakingRequest() = default; + + // A unique identifier for a matchmaking ticket + AZStd::string m_ticketId; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h b/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h index 0323686442..bdc3fe1444 100644 --- a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h +++ b/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.h @@ -10,98 +10,11 @@ #include #include -#include #include -#include +#include namespace AzFramework { - struct SessionConfig; - - //! CreateSessionRequest - //! The container for CreateSession request parameters. - struct CreateSessionRequest - { - AZ_RTTI(CreateSessionRequest, "{E39C2A45-89C9-4CFB-B337-9734DC798930}"); - static void Reflect(AZ::ReflectContext* context); - - CreateSessionRequest() = default; - virtual ~CreateSessionRequest() = default; - - // A unique identifier for a player or entity creating the session. - AZStd::string m_creatorId; - - // A collection of custom properties for a session. - AZStd::unordered_map m_sessionProperties; - - // A descriptive label that is associated with a session. - AZStd::string m_sessionName; - - // The maximum number of players that can be connected simultaneously to the session. - uint64_t m_maxPlayer = 0; - }; - - //! SearchSessionsRequest - //! The container for SearchSessions request parameters. - struct SearchSessionsRequest - { - AZ_RTTI(SearchSessionsRequest, "{B49207A8-8549-4ADB-B7D9-D7A4932F9B4B}"); - static void Reflect(AZ::ReflectContext* context); - - SearchSessionsRequest() = default; - virtual ~SearchSessionsRequest() = default; - - // String containing the search criteria for the session search. If no filter expression is included, the request returns results - // for all active sessions. - AZStd::string m_filterExpression; - - // Instructions on how to sort the search results. If no sort expression is included, the request returns results in random order. - AZStd::string m_sortExpression; - - // The maximum number of results to return. - uint8_t m_maxResult = 0; - - // A token that indicates the start of the next sequential page of results. - AZStd::string m_nextToken; - }; - - //! SearchSessionsResponse - //! The container for SearchSession request results. - struct SearchSessionsResponse - { - AZ_RTTI(SearchSessionsResponse, "{F93DE7DC-D381-4E08-8A3B-0B08F7C38714}"); - static void Reflect(AZ::ReflectContext* context); - - SearchSessionsResponse() = default; - virtual ~SearchSessionsResponse() = default; - - // A collection of sessions that match the search criteria and sorted in specific order. - AZStd::vector m_sessionConfigs; - - // A token that indicates the start of the next sequential page of results. - AZStd::string m_nextToken; - }; - - //! JoinSessionRequest - //! The container for JoinSession request parameters. - struct JoinSessionRequest - { - AZ_RTTI(JoinSessionRequest, "{519769E8-3CDE-4385-A0D7-24DBB3685657}"); - static void Reflect(AZ::ReflectContext* context); - - JoinSessionRequest() = default; - virtual ~JoinSessionRequest() = default; - - // A unique identifier for the session. - AZStd::string m_sessionId; - - // A unique identifier for a player. Player IDs are developer-defined. - AZStd::string m_playerId; - - // Developer-defined information related to a player. - AZStd::string m_playerData; - }; - //! ISessionRequests //! Pure virtual session interface class to abstract the details of session handling from application code. class ISessionRequests diff --git a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp similarity index 98% rename from Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp rename to Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp index 5536d9a47d..a7ffaa2491 100644 --- a/Code/Framework/AzFramework/AzFramework/Session/ISessionRequests.cpp +++ b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.cpp @@ -6,9 +6,10 @@ * */ +#include #include #include -#include +#include #include namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h new file mode 100644 index 0000000000..1ae018e1ef --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Session/SessionRequests.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AZ +{ + class ReflectContext; +} + +namespace AzFramework +{ + struct SessionConfig; + + //! CreateSessionRequest + //! The container for CreateSession request parameters. + struct CreateSessionRequest + { + AZ_RTTI(CreateSessionRequest, "{E39C2A45-89C9-4CFB-B337-9734DC798930}"); + static void Reflect(AZ::ReflectContext* context); + + CreateSessionRequest() = default; + virtual ~CreateSessionRequest() = default; + + // A unique identifier for a player or entity creating the session. + AZStd::string m_creatorId; + + // A collection of custom properties for a session. + AZStd::unordered_map m_sessionProperties; + + // A descriptive label that is associated with a session. + AZStd::string m_sessionName; + + // The maximum number of players that can be connected simultaneously to the session. + uint64_t m_maxPlayer = 0; + }; + + //! SearchSessionsRequest + //! The container for SearchSessions request parameters. + struct SearchSessionsRequest + { + AZ_RTTI(SearchSessionsRequest, "{B49207A8-8549-4ADB-B7D9-D7A4932F9B4B}"); + static void Reflect(AZ::ReflectContext* context); + + SearchSessionsRequest() = default; + virtual ~SearchSessionsRequest() = default; + + // String containing the search criteria for the session search. If no filter expression is included, the request returns results + // for all active sessions. + AZStd::string m_filterExpression; + + // Instructions on how to sort the search results. If no sort expression is included, the request returns results in random order. + AZStd::string m_sortExpression; + + // The maximum number of results to return. + uint8_t m_maxResult = 0; + + // A token that indicates the start of the next sequential page of results. + AZStd::string m_nextToken; + }; + + //! SearchSessionsResponse + //! The container for SearchSession request results. + struct SearchSessionsResponse + { + AZ_RTTI(SearchSessionsResponse, "{F93DE7DC-D381-4E08-8A3B-0B08F7C38714}"); + static void Reflect(AZ::ReflectContext* context); + + SearchSessionsResponse() = default; + virtual ~SearchSessionsResponse() = default; + + // A collection of sessions that match the search criteria and sorted in specific order. + AZStd::vector m_sessionConfigs; + + // A token that indicates the start of the next sequential page of results. + AZStd::string m_nextToken; + }; + + //! JoinSessionRequest + //! The container for JoinSession request parameters. + struct JoinSessionRequest + { + AZ_RTTI(JoinSessionRequest, "{519769E8-3CDE-4385-A0D7-24DBB3685657}"); + static void Reflect(AZ::ReflectContext* context); + + JoinSessionRequest() = default; + virtual ~JoinSessionRequest() = default; + + // A unique identifier for the session. + AZStd::string m_sessionId; + + // A unique identifier for a player. Player IDs are developer-defined. + AZStd::string m_playerId; + + // Developer-defined information related to a player. + AZStd::string m_playerData; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index e752e5ae04..c5616d84c0 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -167,6 +167,10 @@ set(FILES Logging/MissingAssetLogger.cpp Logging/MissingAssetLogger.h Logging/MissingAssetNotificationBus.h + Matchmaking/IMatchmakingRequests.h + Matchmaking/MatchmakingRequests.cpp + Matchmaking/MatchmakingRequests.h + Matchmaking/MatchmakingNotifications.h Scene/Scene.h Scene/Scene.inl Scene/Scene.cpp @@ -181,8 +185,9 @@ set(FILES Script/ScriptRemoteDebugging.cpp Script/ScriptRemoteDebugging.h Session/ISessionHandlingRequests.h - Session/ISessionRequests.cpp Session/ISessionRequests.h + Session/SessionRequests.cpp + Session/SessionRequests.h Session/SessionConfig.cpp Session/SessionConfig.h Session/SessionNotifications.h diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h new file mode 100644 index 0000000000..415550b6bc --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftAcceptMatchRequest.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftAcceptMatchRequest + //! GameLift accept match request which corresponds to Amazon GameLift + //! Registers a player's acceptance or rejection of a proposed FlexMatch match. + //! AcceptMatchRequest + struct AWSGameLiftAcceptMatchRequest + : public AzFramework::AcceptMatchRequest + { + public: + AZ_RTTI(AWSGameLiftAcceptMatchRequest, "{8372B297-88E8-4C13-B31D-BE87236CA416}", AzFramework::AcceptMatchRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftAcceptMatchRequest() = default; + virtual ~AWSGameLiftAcceptMatchRequest() = default; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h index be2c766d7e..a9b06c5bc9 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h index 75440868c9..4fab16ca70 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftCreateSessionRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h index 32f549c7d5..07d6da3870 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftJoinSessionRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h index 655c83252e..bfc2dc630e 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftSearchSessionsRequest.h @@ -8,7 +8,7 @@ #pragma once -#include +#include namespace AWSGameLift { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h new file mode 100644 index 0000000000..cd30bc45ab --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStartMatchmakingRequest.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftPlayerInformation + //! Information on each player to be matched + //! This information must include a player ID, and may contain player attributes and latency data to be used in the matchmaking process + //! After a successful match, Player objects contain the name of the team the player is assigned to + struct AWSGameLiftPlayerInformation + { + AZ_RTTI(AWSGameLiftPlayerInformation, "{B62C118E-C55D-4903-8ECB-E58E8CA613C4}"); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftPlayerInformation() = default; + virtual ~AWSGameLiftPlayerInformation() = default; + + // A map of region names to latencies in millseconds, that indicates + // the amount of latency that a player experiences when connected to AWS Regions + AZStd::unordered_map m_latencyInMs; + // A collection of key:value pairs containing player information for use in matchmaking + // Player attribute keys must match the playerAttributes used in a matchmaking rule set + // Example: {"skill": "{\"N\": \"23\"}", "gameMode": "{\"S\": \"deathmatch\"}"} + AZStd::unordered_map m_playerAttributes; + // A unique identifier for a player + AZStd::string m_playerId; + // Name of the team that the player is assigned to in a match + AZStd::string m_team; + }; + + //! AWSGameLiftStartMatchmakingRequest + //! GameLift start matchmaking request which corresponds to Amazon GameLift + //! Uses FlexMatch to create a game match for a group of players based on custom matchmaking rules + //! StartMatchmakingRequest + struct AWSGameLiftStartMatchmakingRequest + : public AzFramework::StartMatchmakingRequest + { + public: + AZ_RTTI(AWSGameLiftStartMatchmakingRequest, "{D273DF71-9C55-48C1-95F9-8D7B66B9CF3E}", AzFramework::StartMatchmakingRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftStartMatchmakingRequest() = default; + virtual ~AWSGameLiftStartMatchmakingRequest() = default; + + // Name of the matchmaking configuration to use for this request + AZStd::string m_configurationName; + // Information on each player to be matched + AZStd::vector m_players; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h new file mode 100644 index 0000000000..81d811d32d --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/AWSGameLiftStopMatchmakingRequest.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AWSGameLift +{ + //! AWSGameLiftStopMatchmakingRequest + //! GameLift stop matchmaking request which corresponds to Amazon GameLift + //! Cancels a matchmaking ticket or match backfill ticket that is currently being processed. + //! StopMatchmakingRequest + struct AWSGameLiftStopMatchmakingRequest + : public AzFramework::StopMatchmakingRequest + { + public: + AZ_RTTI(AWSGameLiftStopMatchmakingRequest, "{2766BC03-9F84-4346-A52B-49129BBAF38B}", AzFramework::StopMatchmakingRequest); + static void Reflect(AZ::ReflectContext* context); + + AWSGameLiftStopMatchmakingRequest() = default; + virtual ~AWSGameLiftStopMatchmakingRequest() = default; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h index 25445553f4..10269dc8c3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Include/Request/IAWSGameLiftRequests.h @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace AWSGameLift @@ -71,4 +72,26 @@ namespace AWSGameLift static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; }; using AWSGameLiftSessionRequestBus = AZ::EBus; + + // IMatchmakingAsyncRequests EBus wrapper for scripting + class AWSGameLiftMatchmakingAsyncRequests + : public AZ::EBusTraits + { + public: + using MutexType = AZStd::recursive_mutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + }; + using AWSGameLiftMatchmakingAsyncRequestBus = AZ::EBus; + + // IMatchmakingRequests EBus wrapper for scripting + class AWSGameLiftMatchmakingRequests + : public AZ::EBusTraits + { + public: + using MutexType = AZStd::recursive_mutex; + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + }; + using AWSGameLiftMatchmakingRequestBus = AZ::EBus; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp index f9249d1ad2..ae4fb162d6 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp @@ -112,6 +112,16 @@ namespace AWSGameLift return AZ::Uuid::CreateRandom().ToString(includeBrackets, includeDashes); } + void AWSGameLiftClientManager::AcceptMatch(const AzFramework::AcceptMatchRequest& acceptMatchRequest) + { + AZ_UNUSED(acceptMatchRequest); + } + + void AWSGameLiftClientManager::AcceptMatchAsync(const AzFramework::AcceptMatchRequest& acceptMatchRequest) + { + AZ_UNUSED(acceptMatchRequest); + } + AZStd::string AWSGameLiftClientManager::CreateSession(const AzFramework::CreateSessionRequest& createSessionRequest) { AZStd::string result = ""; @@ -349,6 +359,28 @@ namespace AWSGameLift return response; } + AZStd::string AWSGameLiftClientManager::StartMatchmaking(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) + { + AZ_UNUSED(startMatchmakingRequest); + + return AZStd::string{}; + } + + void AWSGameLiftClientManager::StartMatchmakingAsync(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) + { + AZ_UNUSED(startMatchmakingRequest); + } + + void AWSGameLiftClientManager::StopMatchmaking(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) + { + AZ_UNUSED(stopMatchmakingRequest); + } + + void AWSGameLiftClientManager::StopMatchmakingAsync(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) + { + AZ_UNUSED(stopMatchmakingRequest); + } + void AWSGameLiftClientManager::SetGameLiftClient(AZStd::shared_ptr gameliftClient) { m_gameliftClient.swap(gameliftClient); diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h index 1b9296d20a..d7211d0472 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h @@ -9,6 +9,8 @@ #pragma once #include +#include + #include namespace Aws @@ -26,6 +28,54 @@ namespace AWSGameLift struct AWSGameLiftJoinSessionRequest; struct AWSGameLiftSearchSessionsRequest; + // MatchAcceptanceNotificationBus EBus handler for scripting + class AWSGameLiftMatchAcceptanceNotificationBusHandler + : public AzFramework::MatchAcceptanceNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + public: + AZ_EBUS_BEHAVIOR_BINDER( + AWSGameLiftMatchAcceptanceNotificationBusHandler, + "{CBE057D3-F5CE-46D3-B02D-8A6A1446B169}", + AZ::SystemAllocator, + OnMatchAcceptance); + + void OnMatchAcceptance() override + { + Call(FN_OnMatchAcceptance); + } + }; + + // MatchmakingAsyncRequestNotificationBus EBus handler for scripting + class AWSGameLiftMatchmakingAsyncRequestNotificationBusHandler + : public AzFramework::MatchmakingAsyncRequestNotificationBus::Handler + , public AZ::BehaviorEBusHandler + { + public: + AZ_EBUS_BEHAVIOR_BINDER( + AWSGameLiftMatchmakingAsyncRequestNotificationBusHandler, + "{2045EE8F-2AB7-4ED0-9614-3496A1A43677}", + AZ::SystemAllocator, + OnAcceptMatchAsyncComplete, + OnStartMatchmakingAsyncComplete, + OnStopMatchmakingAsyncComplete); + + void OnAcceptMatchAsyncComplete() override + { + Call(FN_OnAcceptMatchAsyncComplete); + } + + void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) override + { + Call(FN_OnStartMatchmakingAsyncComplete, matchmakingTicketId); + } + + void OnStopMatchmakingAsyncComplete() override + { + Call(FN_OnStopMatchmakingAsyncComplete); + } + }; + // SessionAsyncRequestNotificationBus EBus handler for scripting class AWSGameLiftSessionAsyncRequestNotificationBusHandler : public AzFramework::SessionAsyncRequestNotificationBus::Handler @@ -66,6 +116,8 @@ namespace AWSGameLift //! GameLift client manager to support game and player session related client requests class AWSGameLiftClientManager : public AWSGameLiftRequestBus::Handler + , public AWSGameLiftMatchmakingAsyncRequestBus::Handler + , public AWSGameLiftMatchmakingRequestBus::Handler , public AWSGameLiftSessionAsyncRequestBus::Handler , public AWSGameLiftSessionRequestBus::Handler { @@ -91,12 +143,22 @@ namespace AWSGameLift bool ConfigureGameLiftClient(const AZStd::string& region) override; AZStd::string CreatePlayerId(bool includeBrackets, bool includeDashes) override; + // AWSGameLiftMatchmakingAsyncRequestBus interface implementation + void AcceptMatchAsync(const AzFramework::AcceptMatchRequest& acceptMatchRequest) override; + void StartMatchmakingAsync(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) override; + void StopMatchmakingAsync(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) override; + // AWSGameLiftSessionAsyncRequestBus interface implementation void CreateSessionAsync(const AzFramework::CreateSessionRequest& createSessionRequest) override; void JoinSessionAsync(const AzFramework::JoinSessionRequest& joinSessionRequest) override; void SearchSessionsAsync(const AzFramework::SearchSessionsRequest& searchSessionsRequest) const override; void LeaveSessionAsync() override; + // AWSGameLiftMatchmakingRequestBus interface implementation + void AcceptMatch(const AzFramework::AcceptMatchRequest& acceptMatchRequest) override; + AZStd::string StartMatchmaking(const AzFramework::StartMatchmakingRequest& startMatchmakingRequest) override; + void StopMatchmaking(const AzFramework::StopMatchmakingRequest& stopMatchmakingRequest) override; + // AWSGameLiftSessionRequestBus interface implementation AZStd::string CreateSession(const AzFramework::CreateSessionRequest& createSessionRequest) override; bool JoinSession(const AzFramework::JoinSessionRequest& joinSessionRequest) override; diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp index ceb7376b85..db201920f6 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp @@ -13,10 +13,13 @@ #include #include +#include #include #include #include #include +#include +#include #include @@ -29,18 +32,13 @@ namespace AWSGameLift void AWSGameLiftClientSystemComponent::Reflect(AZ::ReflectContext* context) { - ReflectCreateSessionRequest(context); - AWSGameLiftCreateSessionOnQueueRequest::Reflect(context); - AWSGameLiftCreateSessionRequest::Reflect(context); - AWSGameLiftJoinSessionRequest::Reflect(context); - AWSGameLiftSearchSessionsRequest::Reflect(context); - ReflectSearchSessionsResponse(context); + ReflectGameLiftMatchmaking(context); + ReflectGameLiftSession(context); if (AZ::SerializeContext* serialize = azrtti_cast(context)) { serialize->Class() - ->Version(0) - ; + ->Version(1); if (AZ::EditContext* editContext = serialize->GetEditContext()) { @@ -50,8 +48,7 @@ namespace AWSGameLift "Create the GameLift client manager that handles communication between game clients and the GameLift service.") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System")) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ; + ->Attribute(AZ::Edit::Attributes::AutoExpand, true); } } @@ -63,33 +60,7 @@ namespace AWSGameLift {{{"Region", ""}}}) ->Event("CreatePlayerId", &AWSGameLiftRequestBus::Events::CreatePlayerId, {{{"IncludeBrackets", ""}, - {"IncludeDashes", ""}}}) - ; - behaviorContext->EBus("AWSGameLiftSessionAsyncRequestBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Event("CreateSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::CreateSessionAsync, - {{{"CreateSessionRequest", ""}}}) - ->Event("JoinSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::JoinSessionAsync, - {{{"JoinSessionRequest", ""}}}) - ->Event("SearchSessionsAsync", &AWSGameLiftSessionAsyncRequestBus::Events::SearchSessionsAsync, - {{{"SearchSessionsRequest", ""}}}) - ->Event("LeaveSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::LeaveSessionAsync) - ; - behaviorContext - ->EBus("AWSGameLiftSessionAsyncRequestNotificationBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Handler() - ; - behaviorContext->EBus("AWSGameLiftSessionRequestBus") - ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") - ->Event("CreateSession", &AWSGameLiftSessionRequestBus::Events::CreateSession, - {{{"CreateSessionRequest", ""}}}) - ->Event("JoinSession", &AWSGameLiftSessionRequestBus::Events::JoinSession, - {{{"JoinSessionRequest", ""}}}) - ->Event("SearchSessions", &AWSGameLiftSessionRequestBus::Events::SearchSessions, - {{{"SearchSessionsRequest", ""}}}) - ->Event("LeaveSession", &AWSGameLiftSessionRequestBus::Events::LeaveSession) - ; + {"IncludeDashes", ""}}}); } } @@ -126,6 +97,74 @@ namespace AWSGameLift { m_gameliftClientManager->DeactivateManager(); } + + void AWSGameLiftClientSystemComponent::ReflectGameLiftMatchmaking(AZ::ReflectContext* context) + { + AWSGameLiftAcceptMatchRequest::Reflect(context); + AWSGameLiftStartMatchmakingRequest::Reflect(context); + AWSGameLiftStopMatchmakingRequest::Reflect(context); + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("AWSGameLiftMatchmakingAsyncRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("AcceptMatchAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::AcceptMatchAsync, + { { { "AcceptMatchRequest", "" } } }) + ->Event("StartMatchmakingAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::StartMatchmakingAsync, + { { { "StartMatchmakingRequest", "" } } }) + ->Event("StopMatchmakingAsync", &AWSGameLiftMatchmakingAsyncRequestBus::Events::StopMatchmakingAsync, + { { { "StopMatchmakingRequest", "" } } }); + + behaviorContext->EBus("AWSGameLiftMatchmakingAsyncRequestNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + + behaviorContext->EBus("AWSGameLiftMatchmakingRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("AcceptMatch", &AWSGameLiftMatchmakingRequestBus::Events::AcceptMatch, { { { "AcceptMatchRequest", "" } } }) + ->Event("StartMatchmaking", &AWSGameLiftMatchmakingRequestBus::Events::StartMatchmaking, + { { { "StartMatchmakingRequest", "" } } }) + ->Event("StopMatchmaking", &AWSGameLiftMatchmakingRequestBus::Events::StopMatchmaking, + { { { "StopMatchmakingRequest", "" } } }); + + behaviorContext->EBus("AWSGameLiftMatchAcceptanceNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + } + } + + void AWSGameLiftClientSystemComponent::ReflectGameLiftSession(AZ::ReflectContext* context) + { + ReflectCreateSessionRequest(context); + AWSGameLiftCreateSessionOnQueueRequest::Reflect(context); + AWSGameLiftCreateSessionRequest::Reflect(context); + AWSGameLiftJoinSessionRequest::Reflect(context); + AWSGameLiftSearchSessionsRequest::Reflect(context); + ReflectSearchSessionsResponse(context); + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("AWSGameLiftSessionAsyncRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("CreateSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::CreateSessionAsync, + { { { "CreateSessionRequest", "" } } }) + ->Event("JoinSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::JoinSessionAsync, { { { "JoinSessionRequest", "" } } }) + ->Event("SearchSessionsAsync", &AWSGameLiftSessionAsyncRequestBus::Events::SearchSessionsAsync, + { { { "SearchSessionsRequest", "" } } }) + ->Event("LeaveSessionAsync", &AWSGameLiftSessionAsyncRequestBus::Events::LeaveSessionAsync); + + behaviorContext->EBus("AWSGameLiftSessionAsyncRequestNotificationBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Handler(); + + behaviorContext->EBus("AWSGameLiftSessionRequestBus") + ->Attribute(AZ::Script::Attributes::Category, "AWSGameLift") + ->Event("CreateSession", &AWSGameLiftSessionRequestBus::Events::CreateSession, { { { "CreateSessionRequest", "" } } }) + ->Event("JoinSession", &AWSGameLiftSessionRequestBus::Events::JoinSession, { { { "JoinSessionRequest", "" } } }) + ->Event("SearchSessions", &AWSGameLiftSessionRequestBus::Events::SearchSessions, { { { "SearchSessionsRequest", "" } } }) + ->Event("LeaveSession", &AWSGameLiftSessionRequestBus::Events::LeaveSession); + } + } void AWSGameLiftClientSystemComponent::ReflectCreateSessionRequest(AZ::ReflectContext* context) { diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h index bac24d44fa..f54461b918 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h @@ -43,6 +43,9 @@ namespace AWSGameLift void SetGameLiftClientManager(AZStd::unique_ptr gameliftClientManager); private: + static void ReflectGameLiftMatchmaking(AZ::ReflectContext* context); + static void ReflectGameLiftSession(AZ::ReflectContext* context); + static void ReflectCreateSessionRequest(AZ::ReflectContext* context); static void ReflectSearchSessionsResponse(AZ::ReflectContext* context); diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp new file mode 100644 index 0000000000..8a8327b92b --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftAcceptMatchRequest.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftAcceptMatchRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::AcceptMatchRequest::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftAcceptMatchRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftAcceptMatchRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("AcceptMatch", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_acceptMatch)) + ->Property("PlayerIds", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_playerIds)) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftAcceptMatchRequest::m_ticketId)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp new file mode 100644 index 0000000000..03d802fd36 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStartMatchmakingRequest.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftPlayerInformation::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("latencyInMs", &AWSGameLiftPlayerInformation::m_latencyInMs) + ->Field("playerAttributes", &AWSGameLiftPlayerInformation::m_playerAttributes) + ->Field("playerId", &AWSGameLiftPlayerInformation::m_playerId) + ->Field("team", &AWSGameLiftPlayerInformation::m_team); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftPlayerInformation", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_latencyInMs, "LatencyInMs", + "A set of values, expressed in milliseconds, that indicates the amount of latency that" + "a player experiences when connected to AWS Regions") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_playerAttributes, "PlayerAttributes", + "A collection of key:value pairs containing player information for use in matchmaking") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_playerId, "PlayerId", + "A unique identifier for a player") + ->DataElement( + AZ::Edit::UIHandlers::Default, &AWSGameLiftPlayerInformation::m_team, "Team", + "Name of the team that the player is assigned to in a match"); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftPlayerInformation") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("LatencyInMs", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_latencyInMs)) + ->Property("PlayerAttributes", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_playerAttributes)) + ->Property("PlayerId", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_playerId)) + ->Property("Team", BehaviorValueProperty(&AWSGameLiftPlayerInformation::m_team)); + } + } + + void AWSGameLiftStartMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::StartMatchmakingRequest::Reflect(context); + AWSGameLiftPlayerInformation::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0) + ->Field("configurationName", &AWSGameLiftStartMatchmakingRequest::m_configurationName) + ->Field("players", &AWSGameLiftStartMatchmakingRequest::m_players); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftStartMatchmakingRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->DataElement(AZ::Edit::UIHandlers::Default, &AWSGameLiftStartMatchmakingRequest::m_configurationName, "ConfigurationName", + "Name of the matchmaking configuration to use for this request") + ->DataElement(AZ::Edit::UIHandlers::Default, &AWSGameLiftStartMatchmakingRequest::m_players, "Players", + "Information on each player to be matched."); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftStartMatchmakingRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_ticketId)) + ->Property("ConfigurationName", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_configurationName)) + ->Property("Players", BehaviorValueProperty(&AWSGameLiftStartMatchmakingRequest::m_players)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp new file mode 100644 index 0000000000..bcea1fa8fe --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/AWSGameLiftStopMatchmakingRequest.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include + +namespace AWSGameLift +{ + void AWSGameLiftStopMatchmakingRequest::Reflect(AZ::ReflectContext* context) + { + AzFramework::StopMatchmakingRequest::Reflect(context); + + if (auto serializeContext = azrtti_cast(context)) + { + serializeContext->Class() + ->Version(0); + + if (AZ::EditContext* editContext = serializeContext->GetEditContext()) + { + editContext->Class("AWSGameLiftStopMatchmakingRequest", "") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly); + } + } + + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->Class("AWSGameLiftStopMatchmakingRequest") + ->Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value) + ->Property("TicketId", BehaviorValueProperty(&AWSGameLiftStopMatchmakingRequest::m_ticketId)); + } + } +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake index 771bdf0c08..0c7ca68eea 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake @@ -7,10 +7,13 @@ # set(FILES + Include/Request/AWSGameLiftAcceptMatchRequest.h Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h Include/Request/AWSGameLiftCreateSessionRequest.h Include/Request/AWSGameLiftJoinSessionRequest.h Include/Request/AWSGameLiftSearchSessionsRequest.h + Include/Request/AWSGameLiftStartMatchmakingRequest.h + Include/Request/AWSGameLiftStopMatchmakingRequest.h Include/Request/IAWSGameLiftRequests.h Source/Activity/AWSGameLiftActivityUtils.cpp Source/Activity/AWSGameLiftActivityUtils.h @@ -28,8 +31,11 @@ set(FILES Source/AWSGameLiftClientManager.h Source/AWSGameLiftClientSystemComponent.cpp Source/AWSGameLiftClientSystemComponent.h + Source/Request/AWSGameLiftAcceptMatchRequest.cpp Source/Request/AWSGameLiftCreateSessionOnQueueRequest.cpp Source/Request/AWSGameLiftCreateSessionRequest.cpp Source/Request/AWSGameLiftJoinSessionRequest.cpp Source/Request/AWSGameLiftSearchSessionsRequest.cpp + Source/Request/AWSGameLiftStartMatchmakingRequest.cpp + Source/Request/AWSGameLiftStopMatchmakingRequest.cpp ) From ee5ab1770bdd4d6beeae1117a763934affd13617 Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Mon, 4 Oct 2021 15:54:50 -0700 Subject: [PATCH 135/226] [XCB] Respond to keyboard state changes This allows the keyboard to correctly store modifier keys, as the keyboard state changes. Signed-off-by: Chris Burel --- .../AzFramework/XcbInputDeviceKeyboard.cpp | 103 ++++++++++++++---- .../Xcb/AzFramework/XcbInputDeviceKeyboard.h | 5 + 2 files changed, 89 insertions(+), 19 deletions(-) diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp index c971c3b793..d9db239522 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp @@ -20,6 +20,15 @@ namespace AzFramework { + // xcb-xkb does not provide a generic event type, so we define our own. + // These fields are enough to get to the xkbType field, which can then be + // read to typecast the event to the right concrete type. + struct XcbXkbGenericEventT + { + uint8_t response_type; + uint8_t xkbType; + }; + XcbInputDeviceKeyboard::XcbInputDeviceKeyboard(InputDeviceKeyboard& inputDevice) : InputDeviceKeyboard::Implementation(inputDevice) { @@ -39,19 +48,22 @@ namespace AzFramework return; } - XcbStdFreePtr xkbUseExtensionReply{ - xcb_xkb_use_extension_reply(connection, xcb_xkb_use_extension(connection, 1, 0), nullptr) - }; - if (!xkbUseExtensionReply) + int initializeXkbExtensionSuccess = xkb_x11_setup_xkb_extension( + connection, + 1, + 0, + XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, + nullptr, + nullptr, + &m_xkbEventCode, + nullptr + ); + + if (!initializeXkbExtensionSuccess) { AZ_Warning("ApplicationLinux", false, "Failed to initialize the xkb extension"); return; } - if (!xkbUseExtensionReply->supported) - { - AZ_Warning("ApplicationLinux", false, "The X server does not support the xkb extension"); - return; - } m_coreDeviceId = xkb_x11_get_core_keyboard_device_id(connection); @@ -59,6 +71,43 @@ namespace AzFramework m_xkbKeymap.reset(xkb_x11_keymap_new_from_device(m_xkbContext.get(), connection, m_coreDeviceId, XKB_KEYMAP_COMPILE_NO_FLAGS)); m_xkbState.reset(xkb_x11_state_new_from_device(m_xkbKeymap.get(), connection, m_coreDeviceId)); + const uint16_t affectMap = + XCB_XKB_MAP_PART_KEY_TYPES + | XCB_XKB_MAP_PART_KEY_SYMS + | XCB_XKB_MAP_PART_MODIFIER_MAP + | XCB_XKB_MAP_PART_EXPLICIT_COMPONENTS + | XCB_XKB_MAP_PART_KEY_ACTIONS + | XCB_XKB_MAP_PART_KEY_BEHAVIORS + | XCB_XKB_MAP_PART_VIRTUAL_MODS + | XCB_XKB_MAP_PART_VIRTUAL_MOD_MAP + ; + + const uint16_t selectedEvents = + XCB_XKB_EVENT_TYPE_NEW_KEYBOARD_NOTIFY + | XCB_XKB_EVENT_TYPE_MAP_NOTIFY + | XCB_XKB_EVENT_TYPE_STATE_NOTIFY + ; + + XcbStdFreePtr error{xcb_request_check( + connection, + xcb_xkb_select_events( + connection, + /* deviceSpec = */ XCB_XKB_ID_USE_CORE_KBD, + /* affectWhich = */ selectedEvents, + /* clear = */ 0, + /* selectAll = */ selectedEvents, + /* affectMap = */ affectMap, + /* map = */ affectMap, + /* details = */ nullptr + ) + )}; + + if (error) + { + AZ_Warning("ApplicationLinux", false, "failed to select notify events from XKB"); + return; + } + m_initialized = true; } @@ -93,30 +142,38 @@ namespace AzFramework return; } - switch (event->response_type & ~0x80) + const auto responseType = event->response_type & ~0x80; + if (responseType == XCB_KEY_PRESS) { - case XCB_KEY_PRESS: - { - auto* keyPress = reinterpret_cast(event); + const auto* keyPress = reinterpret_cast(event); - const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail); - if (key) + if (const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail)) { QueueRawKeyEvent(*key, true); } - break; } - case XCB_KEY_RELEASE: + else if (responseType == XCB_KEY_RELEASE) { - auto* keyRelease = reinterpret_cast(event); + const auto* keyRelease = reinterpret_cast(event); const InputChannelId* key = InputChannelFromKeyEvent(keyRelease->detail); if (key) { QueueRawKeyEvent(*key, false); } - break; } + else if (responseType == m_xkbEventCode) + { + const auto* xkbEvent = reinterpret_cast(event); + switch (xkbEvent->xkbType) + { + case XCB_XKB_STATE_NOTIFY: + { + const auto* stateNotifyEvent = reinterpret_cast(event); + UpdateState(stateNotifyEvent); + break; + } + } } } @@ -268,4 +325,12 @@ namespace AzFramework default: return nullptr; } } + + void XcbInputDeviceKeyboard::UpdateState(const xcb_xkb_state_notify_event_t* state) + { + if (m_initialized) + { + xkb_state_update_mask(m_xkbState.get(), state->baseMods, state->latchedMods, state->lockedMods, state->baseGroup, state->latchedGroup, state->lockedGroup); + } + } } // namespace AzFramework diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h index de65941a67..9adc9ad758 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h @@ -13,6 +13,8 @@ #include #include +struct xcb_xkb_state_notify_event_t; + namespace AzFramework { class XcbInputDeviceKeyboard @@ -37,10 +39,13 @@ namespace AzFramework private: [[nodiscard]] const InputChannelId* InputChannelFromKeyEvent(xcb_keycode_t code) const; + void UpdateState(const xcb_xkb_state_notify_event_t* state); + XcbUniquePtr m_xkbContext; XcbUniquePtr m_xkbKeymap; XcbUniquePtr m_xkbState; int m_coreDeviceId{-1}; + uint8_t m_xkbEventCode{0}; bool m_initialized{false}; }; } // namespace AzFramework From ba4842675065fde92054af9f17f39033d797549d Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Mon, 4 Oct 2021 15:56:04 -0700 Subject: [PATCH 136/226] [XCB] Generate raw text events as well as key press events Fixes LYN-6997 Signed-off-by: Chris Burel --- .../AzFramework/XcbInputDeviceKeyboard.cpp | 28 ++++++++++++++++++- .../Xcb/AzFramework/XcbInputDeviceKeyboard.h | 3 ++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp index d9db239522..454313ec5b 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp @@ -119,15 +119,17 @@ namespace AzFramework bool XcbInputDeviceKeyboard::HasTextEntryStarted() const { - return false; + return m_hasTextEntryStarted; } void XcbInputDeviceKeyboard::TextEntryStart(const InputDeviceKeyboard::VirtualKeyboardOptions& options) { + m_hasTextEntryStarted = true; } void XcbInputDeviceKeyboard::TextEntryStop() { + m_hasTextEntryStarted = false; } void XcbInputDeviceKeyboard::TickInputDevice() @@ -147,6 +149,8 @@ namespace AzFramework { const auto* keyPress = reinterpret_cast(event); + QueueRawTextEvent(TextFromKeycode(m_xkbState.get(), keyPress->detail)); + if (const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail)) { QueueRawKeyEvent(*key, true); @@ -326,6 +330,28 @@ namespace AzFramework } } + AZStd::string XcbInputDeviceKeyboard::TextFromKeycode(xkb_state* state, xkb_keycode_t code) + { + // Find out how much of a buffer we need + const size_t size = xkb_state_key_get_utf8(state, code, nullptr, 0); + if (!size) + { + return {}; + } + // xkb_state_key_get_utf8 will null-terminate the resulting string, and + // will truncate the result to `size - 1` if there is not enough space + // for the null byte. The first call returns the size of the resulting + // string without including the null byte. AZStd::string internally + // includes space for the null byte, but that is not included in its + // `size()`. xkb_state_key_get_utf8 will always set `buf[size - 1] = + // 0`, so add 1 to `chars.size()` to include that internal null byte in + // the string. + AZStd::string chars; + chars.resize_no_construct(size); + xkb_state_key_get_utf8(state, code, chars.data(), chars.size() + 1); + return chars; + } + void XcbInputDeviceKeyboard::UpdateState(const xcb_xkb_state_notify_event_t* state) { if (m_initialized) diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h index 9adc9ad758..00383abf6c 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h @@ -39,6 +39,8 @@ namespace AzFramework private: [[nodiscard]] const InputChannelId* InputChannelFromKeyEvent(xcb_keycode_t code) const; + static AZStd::string TextFromKeycode(xkb_state* state, xkb_keycode_t code); + void UpdateState(const xcb_xkb_state_notify_event_t* state); XcbUniquePtr m_xkbContext; @@ -47,5 +49,6 @@ namespace AzFramework int m_coreDeviceId{-1}; uint8_t m_xkbEventCode{0}; bool m_initialized{false}; + bool m_hasTextEntryStarted{false}; }; } // namespace AzFramework From b1b52c201f085afcf8c472a2ea3f2225311918e2 Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Tue, 5 Oct 2021 12:12:40 -0700 Subject: [PATCH 137/226] [XCB] Add test fixtures for xcb connection and keyboard setup Signed-off-by: Chris Burel --- .../Platform/Common/Xcb/MockXcbInterface.cpp | 38 +++++- .../Platform/Common/Xcb/MockXcbInterface.h | 17 ++- .../Common/Xcb/XcbBaseTestFixture.cpp | 25 ++++ .../Platform/Common/Xcb/XcbBaseTestFixture.h | 29 +++++ .../Xcb/XcbInputDeviceKeyboardTests.cpp | 121 +++++++++++------- .../Xcb/azframework_xcb_tests_files.cmake | 2 + 6 files changed, 177 insertions(+), 55 deletions(-) create mode 100644 Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp create mode 100644 Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp index 64c3967fdc..4797f1133d 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp @@ -28,6 +28,10 @@ xcb_generic_event_t* xcb_poll_for_event(xcb_connection_t* c) { return MockXcbInterface::Instance()->xcb_poll_for_event(c); } +xcb_generic_error_t* xcb_request_check(xcb_connection_t* c, xcb_void_cookie_t cookie) +{ + return MockXcbInterface::Instance()->xcb_request_check(c, cookie); +} // ---------------------------------------------------------------------------- // xcb-xkb @@ -39,6 +43,10 @@ xcb_xkb_use_extension_reply_t* xcb_xkb_use_extension_reply(xcb_connection_t* c, { return MockXcbInterface::Instance()->xcb_xkb_use_extension_reply(c, cookie, e); } +xcb_void_cookie_t xcb_xkb_select_events(xcb_connection_t* c, xcb_xkb_device_spec_t deviceSpec, uint16_t affectWhich, uint16_t clear, uint16_t selectAll, uint16_t affectMap, uint16_t map, const void* details) +{ + return MockXcbInterface::Instance()->xcb_xkb_select_events(c, deviceSpec, affectWhich, clear, selectAll, affectMap, map, details); +} // ---------------------------------------------------------------------------- // xkb-x11 @@ -46,7 +54,7 @@ int32_t xkb_x11_get_core_keyboard_device_id(xcb_connection_t* connection) { return MockXcbInterface::Instance()->xkb_x11_get_core_keyboard_device_id(connection); } -struct xkb_keymap* xkb_x11_keymap_new_from_device(struct xkb_context* context, xcb_connection_t* connection, int32_t device_id, enum xkb_keymap_compile_flags flags) +xkb_keymap* xkb_x11_keymap_new_from_device(xkb_context* context, xcb_connection_t* connection, int32_t device_id, xkb_keymap_compile_flags flags) { return MockXcbInterface::Instance()->xkb_x11_keymap_new_from_device(context, connection, device_id, flags); } @@ -54,28 +62,46 @@ xkb_state* xkb_x11_state_new_from_device(xkb_keymap* keymap, xcb_connection_t* c { return MockXcbInterface::Instance()->xkb_x11_state_new_from_device(keymap, connection, device_id); } +int xkb_x11_setup_xkb_extension( + xcb_connection_t* connection, + uint16_t major_xkb_version, + uint16_t minor_xkb_version, + xkb_x11_setup_xkb_extension_flags flags, + uint16_t* major_xkb_version_out, + uint16_t* minor_xkb_version_out, + uint8_t* base_event_out, + uint8_t* base_error_out) +{ + return MockXcbInterface::Instance()->xkb_x11_setup_xkb_extension( + connection, major_xkb_version, minor_xkb_version, flags, major_xkb_version_out, minor_xkb_version_out, base_event_out, + base_error_out); +} // ---------------------------------------------------------------------------- // xkbcommon -xkb_context* xkb_context_new(enum xkb_context_flags flags) +xkb_context* xkb_context_new(xkb_context_flags flags) { return MockXcbInterface::Instance()->xkb_context_new(flags); } -void xkb_context_unref(xkb_context *context) +void xkb_context_unref(xkb_context* context) { return MockXcbInterface::Instance()->xkb_context_unref(context); } -void xkb_keymap_unref(xkb_keymap *keymap) +void xkb_keymap_unref(xkb_keymap* keymap) { return MockXcbInterface::Instance()->xkb_keymap_unref(keymap); } -void xkb_state_unref(xkb_state *state) +void xkb_state_unref(xkb_state* state) { return MockXcbInterface::Instance()->xkb_state_unref(state); } -xkb_keysym_t xkb_state_key_get_one_sym(xkb_state *state, xkb_keycode_t key) +xkb_keysym_t xkb_state_key_get_one_sym(xkb_state* state, xkb_keycode_t key) { return MockXcbInterface::Instance()->xkb_state_key_get_one_sym(state, key); } +int xkb_state_key_get_utf8(xkb_state* state, xkb_keycode_t key, char* buffer, size_t size) +{ + return MockXcbInterface::Instance()->xkb_state_key_get_utf8(state, key, buffer, size); +} } diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h index ecda005830..4adb73caeb 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h @@ -17,6 +17,7 @@ #include #undef explicit #include +#include #include "Printers.h" @@ -35,6 +36,14 @@ struct xkb_keymap struct xkb_state { + enum class Modifier + { + None = 0, + Shift = 1, + Ctrl = 1 << 1, + Alt = 1 << 2, + }; + Modifier m_modifiers; }; class MockXcbInterface @@ -48,7 +57,7 @@ public: MockXcbInterface(MockXcbInterface&&) = delete; MockXcbInterface& operator=(const MockXcbInterface&) = delete; MockXcbInterface& operator=(MockXcbInterface&&) = delete; - ~MockXcbInterface() + virtual ~MockXcbInterface() { self = nullptr; } @@ -59,22 +68,26 @@ public: MOCK_CONST_METHOD2(xcb_connect, xcb_connection_t*(const char* displayname, int* screenp)); MOCK_CONST_METHOD1(xcb_disconnect, void(xcb_connection_t* c)); MOCK_CONST_METHOD1(xcb_poll_for_event, xcb_generic_event_t*(xcb_connection_t* c)); + MOCK_CONST_METHOD2(xcb_request_check, xcb_generic_error_t*(xcb_connection_t* c, xcb_void_cookie_t cookie)); // xcb-xkb MOCK_CONST_METHOD3(xcb_xkb_use_extension, xcb_xkb_use_extension_cookie_t(xcb_connection_t* c, uint16_t wantedMajor, uint16_t wantedMinor)); MOCK_CONST_METHOD3(xcb_xkb_use_extension_reply, xcb_xkb_use_extension_reply_t*(xcb_connection_t* c, xcb_xkb_use_extension_cookie_t cookie, xcb_generic_error_t** e)); + MOCK_CONST_METHOD8(xcb_xkb_select_events, xcb_void_cookie_t(xcb_connection_t* c, xcb_xkb_device_spec_t deviceSpec, uint16_t affectWhich, uint16_t clear, uint16_t selectAll, uint16_t affectMap, uint16_t map, const void* details)); // xkb-x11 MOCK_CONST_METHOD1(xkb_x11_get_core_keyboard_device_id, int32_t(xcb_connection_t* connection)); MOCK_CONST_METHOD4(xkb_x11_keymap_new_from_device, xkb_keymap*(xkb_context* context, xcb_connection_t* connection, int32_t device_id, xkb_keymap_compile_flags flags)); MOCK_CONST_METHOD3(xkb_x11_state_new_from_device, xkb_state*(xkb_keymap* keymap, xcb_connection_t* connection, int32_t device_id)); + MOCK_CONST_METHOD8(xkb_x11_setup_xkb_extension, int(xcb_connection_t* connection, uint16_t major_xkb_version, uint16_t minor_xkb_version, xkb_x11_setup_xkb_extension_flags flags, uint16_t* major_xkb_version_out, uint16_t* minor_xkb_version_out, uint8_t* base_event_out, uint8_t* base_error_out)); // xkbcommon MOCK_CONST_METHOD1(xkb_context_new, xkb_context*(xkb_context_flags flags)); MOCK_CONST_METHOD1(xkb_context_unref, void(xkb_context* context)); MOCK_CONST_METHOD1(xkb_keymap_unref, void(xkb_keymap* keymap)); MOCK_CONST_METHOD1(xkb_state_unref, void(xkb_state* state)); - MOCK_CONST_METHOD2(xkb_state_key_get_one_sym, xkb_keysym_t(xkb_state *state, xkb_keycode_t key)); + MOCK_CONST_METHOD2(xkb_state_key_get_one_sym, xkb_keysym_t(xkb_state* state, xkb_keycode_t key)); + MOCK_CONST_METHOD4(xkb_state_key_get_utf8, int(struct xkb_state* state, xkb_keycode_t key, char* buffer, size_t size)); private: static inline MockXcbInterface* self = nullptr; diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp new file mode 100644 index 0000000000..937cb04e14 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "XcbBaseTestFixture.h" + +namespace AzFramework +{ + void XcbBaseTestFixture::SetUp() + { + using testing::Return; + using testing::_; + + testing::Test::SetUp(); + + EXPECT_CALL(m_interface, xcb_connect(_, _)) + .WillOnce(Return(&m_connection)); + EXPECT_CALL(m_interface, xcb_disconnect(&m_connection)) + .Times(1); + } +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h new file mode 100644 index 0000000000..8e9b008fc1 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include "MockXcbInterface.h" + +namespace AzFramework +{ + // Sets up mock behavior for the xcb library, providing an xcb_connection_t that is returned from a call to xcb_connect + class XcbBaseTestFixture + : public testing::Test + { + public: + void SetUp() override; + + protected: + testing::NiceMock m_interface; + xcb_connection_t m_connection{}; + }; +} // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp index 1b494c9525..9eb93fb4ae 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include @@ -15,6 +16,7 @@ #include #include "MockXcbInterface.h" #include "Actions.h" +#include "XcbBaseTestFixture.h" template xcb_generic_event_t MakeEvent(T event) @@ -24,26 +26,74 @@ xcb_generic_event_t MakeEvent(T event) namespace AzFramework { - TEST(XcbInputDeviceKeyboard, InputChannelsUpdateStateFromXcbEvents) + // Sets up default behavior for mock keyboard responses to xcb methods + class XcbInputDeviceKeyboardTests + : public XcbBaseTestFixture { - using testing::Return; + void SetUp() override + { + using testing::Return; + using testing::SetArgPointee; + using testing::_; + + XcbBaseTestFixture::SetUp(); + EXPECT_CALL(m_interface, xkb_context_new(XKB_CONTEXT_NO_FLAGS)) + .WillOnce(Return(&m_xkbContext)); + EXPECT_CALL(m_interface, xkb_context_unref(&m_xkbContext)) + .Times(1); + + EXPECT_CALL(m_interface, xkb_x11_keymap_new_from_device(&m_xkbContext, &m_connection, s_coreDeviceId, XKB_KEYMAP_COMPILE_NO_FLAGS)) + .WillOnce(Return(&m_xkbKeymap)); + EXPECT_CALL(m_interface, xkb_keymap_unref(&m_xkbKeymap)) + .Times(1); + + EXPECT_CALL(m_interface, xkb_x11_state_new_from_device(&m_xkbKeymap, &m_connection, s_coreDeviceId)) + .WillOnce(Return(&m_xkbState)); + EXPECT_CALL(m_interface, xkb_state_unref(&m_xkbState)) + .Times(1); + + ON_CALL(m_interface, xkb_x11_setup_xkb_extension(&m_connection, 1, 0, XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, _, _, _, _)) + .WillByDefault(DoAll( + SetArgPointee<6>(s_xkbEventCode), // Set the "base_event_out" argument to the xkbEventCode, the value to identify XKB events + Return(1) + )); + + constexpr unsigned int xcbXkbSelectEventsSequence = 1; + ON_CALL(m_interface, xcb_xkb_select_events(&m_connection, _, _, _, _, _, _, _)) + .WillByDefault(Return(xcb_void_cookie_t{/*.sequence = */ xcbXkbSelectEventsSequence})); + ON_CALL(m_interface, xcb_request_check(&m_connection, testing::Field(&xcb_void_cookie_t::sequence, testing::Eq(xcbXkbSelectEventsSequence)))) + .WillByDefault(Return(nullptr)); // indicates success + + ON_CALL(m_interface, xkb_x11_get_core_keyboard_device_id(&m_connection)) + .WillByDefault(Return(s_coreDeviceId)); + + ON_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) + .WillByDefault(Return(XKB_KEY_a)) + ; + } + + protected: + xkb_context m_xkbContext{}; + xkb_keymap m_xkbKeymap{}; + xkb_state m_xkbState{}; + static constexpr int32_t s_coreDeviceId{1}; + static constexpr uint8_t s_xkbEventCode{85}; + static constexpr xcb_keycode_t s_keycodeForAKey{38}; + }; + + TEST_F(XcbInputDeviceKeyboardTests, InputChannelsUpdateStateFromXcbEvents) + { + using testing::DoAll; using testing::Eq; + using testing::Return; + using testing::SetArgPointee; using testing::_; - MockXcbInterface interface; - - xcb_connection_t connection{}; - xkb_context xkbContext{}; - xkb_keymap xkbKeymap{}; - xkb_state xkbState{}; - const int32_t coreDeviceId{1}; - - constexpr xcb_keycode_t keycodeForAKey = 38; const AZStd::array events { MakeEvent(xcb_key_press_event_t{ /*.response_type = */ XCB_KEY_PRESS, - /*.detail = */ keycodeForAKey, + /*.detail = */ s_keycodeForAKey, /*.sequence = */ 0, /*.time = */ 0, /*.root = */ 0, @@ -59,7 +109,7 @@ namespace AzFramework }), MakeEvent(xcb_key_release_event_t{ /*.response_type = */ XCB_KEY_RELEASE, - /*.detail = */ keycodeForAKey, + /*.detail = */ s_keycodeForAKey, /*.sequence = */ 0, /*.time = */ 0, /*.root = */ 0, @@ -75,51 +125,28 @@ namespace AzFramework }), }; - EXPECT_CALL(interface, xcb_connect(_, _)) - .WillOnce(Return(&connection)); - EXPECT_CALL(interface, xcb_disconnect(&connection)) - .Times(1); - - EXPECT_CALL(interface, xkb_context_new(XKB_CONTEXT_NO_FLAGS)) - .WillOnce(Return(&xkbContext)); - EXPECT_CALL(interface, xkb_context_unref(&xkbContext)) - .Times(1); - - EXPECT_CALL(interface, xkb_x11_keymap_new_from_device(&xkbContext, &connection, coreDeviceId, XKB_KEYMAP_COMPILE_NO_FLAGS)) - .WillOnce(Return(&xkbKeymap)); - EXPECT_CALL(interface, xkb_keymap_unref(&xkbKeymap)) - .Times(1); - - EXPECT_CALL(interface, xkb_x11_state_new_from_device(&xkbKeymap, &connection, coreDeviceId)) - .WillOnce(Return(&xkbState)); - EXPECT_CALL(interface, xkb_state_unref(&xkbState)) - .Times(1); - - EXPECT_CALL(interface, xcb_xkb_use_extension(&connection, 1, 0)); - EXPECT_CALL(interface, xcb_xkb_use_extension_reply(&connection, _, _)) - .WillOnce(ReturnMalloc( - /* .response_type =*/static_cast(XCB_XKB_USE_EXTENSION), - /* .supported =*/ static_cast(1)) - ); - EXPECT_CALL(interface, xkb_x11_get_core_keyboard_device_id(&connection)) - .WillRepeatedly(Return(coreDeviceId)); - // Set the expectations for the events that will be generated // nullptr entries represent when the event queue is empty, and will cause // PumpSystemEventLoopUntilEmpty to return // event pointers are freed by the calling code, so we malloc new copies // here - EXPECT_CALL(interface, xcb_poll_for_event(&connection)) + EXPECT_CALL(m_interface, xcb_poll_for_event(&m_connection)) .WillOnce(ReturnMalloc(events[0])) .WillOnce(Return(nullptr)) .WillOnce(ReturnMalloc(events[1])) .WillOnce(Return(nullptr)) ; - EXPECT_CALL(interface, xkb_state_key_get_one_sym(&xkbState, keycodeForAKey)) - .WillOnce(Return(XKB_KEY_a)) - .WillOnce(Return(XKB_KEY_a)) - ; + EXPECT_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) + .Times(2); + + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) + .WillRepeatedly(Return(1)); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, _, 2)) + .WillRepeatedly(DoAll( + SetArgPointee<2>('a'), + Return(1) + )); Application application; application.Start({}, {}); diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake index aebd28222b..0ba1ece9c7 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake @@ -13,5 +13,7 @@ set(FILES MockXcbInterface.h Printers.cpp Printers.h + XcbBaseTestFixture.cpp + XcbBaseTestFixture.h XcbInputDeviceKeyboardTests.cpp ) From 3e0535e2110538fdf2376b1aae3edd19551daf37 Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Tue, 5 Oct 2021 15:38:24 -0700 Subject: [PATCH 138/226] [XCB] Add tests to cover text events from key presses Signed-off-by: Chris Burel --- .../Tests/Platform/Common/Xcb/Matchers.h | 17 ++ .../Platform/Common/Xcb/MockXcbInterface.cpp | 12 + .../Platform/Common/Xcb/MockXcbInterface.h | 12 +- .../Xcb/XcbInputDeviceKeyboardTests.cpp | 237 +++++++++++++++++- .../Xcb/azframework_xcb_tests_files.cmake | 1 + 5 files changed, 261 insertions(+), 18 deletions(-) create mode 100644 Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h new file mode 100644 index 0000000000..77acb1c3e4 --- /dev/null +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/Matchers.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +inline testing::PolymorphicMatcher> StrEq(const AZStd::string& str) +{ + return ::testing::MakePolymorphicMatcher(testing::internal::StrEqualityMatcher(str, true, true)); +} diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp index 4797f1133d..b15809a4c6 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.cpp @@ -103,5 +103,17 @@ int xkb_state_key_get_utf8(xkb_state* state, xkb_keycode_t key, char* buffer, si { return MockXcbInterface::Instance()->xkb_state_key_get_utf8(state, key, buffer, size); } +xkb_state_component xkb_state_update_mask( + xkb_state* state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout) +{ + return MockXcbInterface::Instance()->xkb_state_update_mask( + state, depressed_mods, latched_mods, locked_mods, depressed_layout, latched_layout, locked_layout); +} } diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h index 4adb73caeb..b57751344e 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/MockXcbInterface.h @@ -36,14 +36,7 @@ struct xkb_keymap struct xkb_state { - enum class Modifier - { - None = 0, - Shift = 1, - Ctrl = 1 << 1, - Alt = 1 << 2, - }; - Modifier m_modifiers; + xkb_mod_mask_t m_modifiers{}; }; class MockXcbInterface @@ -87,7 +80,8 @@ public: MOCK_CONST_METHOD1(xkb_keymap_unref, void(xkb_keymap* keymap)); MOCK_CONST_METHOD1(xkb_state_unref, void(xkb_state* state)); MOCK_CONST_METHOD2(xkb_state_key_get_one_sym, xkb_keysym_t(xkb_state* state, xkb_keycode_t key)); - MOCK_CONST_METHOD4(xkb_state_key_get_utf8, int(struct xkb_state* state, xkb_keycode_t key, char* buffer, size_t size)); + MOCK_CONST_METHOD4(xkb_state_key_get_utf8, int(xkb_state* state, xkb_keycode_t key, char* buffer, size_t size)); + MOCK_CONST_METHOD7(xkb_state_update_mask, xkb_state_component(xkb_state* state, xkb_mod_mask_t depressed_mods, xkb_mod_mask_t latched_mods, xkb_mod_mask_t locked_mods, xkb_layout_index_t depressed_layout, xkb_layout_index_t latched_layout, xkb_layout_index_t locked_layout)); private: static inline MockXcbInterface* self = nullptr; diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp index 9eb93fb4ae..c01cf1e7cd 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp @@ -14,7 +14,9 @@ #include #include +#include #include "MockXcbInterface.h" +#include "Matchers.h" #include "Actions.h" #include "XcbBaseTestFixture.h" @@ -58,7 +60,7 @@ namespace AzFramework Return(1) )); - constexpr unsigned int xcbXkbSelectEventsSequence = 1; + constexpr unsigned int xcbXkbSelectEventsSequence = 342; ON_CALL(m_interface, xcb_xkb_select_events(&m_connection, _, _, _, _, _, _, _)) .WillByDefault(Return(xcb_void_cookie_t{/*.sequence = */ xcbXkbSelectEventsSequence})); ON_CALL(m_interface, xcb_request_check(&m_connection, testing::Field(&xcb_void_cookie_t::sequence, testing::Eq(xcbXkbSelectEventsSequence)))) @@ -70,15 +72,64 @@ namespace AzFramework ON_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) .WillByDefault(Return(XKB_KEY_a)) ; + ON_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForShiftLKey)) + .WillByDefault(Return(XKB_KEY_Shift_L)) + ; + + ON_CALL(m_interface, xkb_state_update_mask(&m_xkbState, _, _, _, _, _, _)) + .WillByDefault(testing::Invoke(this, &XcbInputDeviceKeyboardTests::UpdateStateMask)); + + ON_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) + .WillByDefault(Return(1)); + ON_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithoutShift, s_keycodeForAKey, _, 2)) + .WillByDefault(DoAll( + SetArgPointee<2>('a'), + Return(1) + )); + ON_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithShift, s_keycodeForAKey, _, 2)) + .WillByDefault(DoAll( + SetArgPointee<2>('A'), + Return(1) + )); + } + + private: + xkb_state_component UpdateStateMask( + xkb_state* state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout) + { + state->m_modifiers = depressed_mods | locked_mods; + return {}; } protected: xkb_context m_xkbContext{}; xkb_keymap m_xkbKeymap{}; xkb_state m_xkbState{}; + const testing::Matcher m_matchesStateWithoutShift = testing::AllOf(&m_xkbState, testing::Field(&xkb_state::m_modifiers, 0)); + const testing::Matcher m_matchesStateWithShift = testing::AllOf(&m_xkbState, testing::Field(&xkb_state::m_modifiers, XCB_MOD_MASK_SHIFT)); + static constexpr int32_t s_coreDeviceId{1}; static constexpr uint8_t s_xkbEventCode{85}; + static constexpr xcb_keycode_t s_keycodeForAKey{38}; + static constexpr xcb_keycode_t s_keycodeForShiftLKey{50}; + }; + + class InputTextNotificationListener + : public InputTextNotificationBus::Handler + { + public: + InputTextNotificationListener() + { + BusConnect(); + } + MOCK_METHOD2(OnInputTextEvent, void(const AZStd::string& /*textUTF8*/, bool& /*o_hasBeenConsumed*/)); }; TEST_F(XcbInputDeviceKeyboardTests, InputChannelsUpdateStateFromXcbEvents) @@ -140,14 +191,6 @@ namespace AzFramework EXPECT_CALL(m_interface, xkb_state_key_get_one_sym(&m_xkbState, s_keycodeForAKey)) .Times(2); - EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) - .WillRepeatedly(Return(1)); - EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, _, 2)) - .WillRepeatedly(DoAll( - SetArgPointee<2>('a'), - Return(1) - )); - Application application; application.Start({}, {}); @@ -169,4 +212,180 @@ namespace AzFramework application.Stop(); } + + TEST_F(XcbInputDeviceKeyboardTests, TextEnteredFromXcbKeyPressEvents) + { + using testing::DoAll; + using testing::Eq; + using testing::Return; + using testing::SetArgPointee; + using testing::_; + + // press a + // release a + // press shift + // press a + // release a + // release shift + const AZStd::array events + { + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_xkb_state_notify_event_t{ + /*.response_type = */ s_xkbEventCode, + /*.xkbType = */ XCB_XKB_STATE_NOTIFY, + /*.sequence = */ 0, + /*.time = */ 0, + /*.deviceID = */ s_coreDeviceId, + /*.mods = */ XCB_MOD_MASK_SHIFT, + /*.baseMods = */ XCB_MOD_MASK_SHIFT, + /*.latchedMods = */ 0, + /*.lockedMods = */ 0, + /*.group = */ 0, + /*.baseGroup = */ 0, + /*.latchedGroup = */ 0, + /*.lockedGroup = */ 0, + /*.compatState = */ XCB_MOD_MASK_SHIFT, + /*.grabMods = */ XCB_MOD_MASK_SHIFT, + /*.compatGrabMods = */ XCB_MOD_MASK_SHIFT, + /*.lookupMods = */ XCB_MOD_MASK_SHIFT, + /*.compatLoockupMods = */ XCB_MOD_MASK_SHIFT, + /*.ptrBtnState = */ 0, + /*.changed = */ 0, + /*.keycode = */ s_keycodeForShiftLKey, + /*.eventType = */ XCB_KEY_PRESS, + /*.requestMajor = */ 0, + /*.requestMinor = */ 0, + }), + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForAKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), + MakeEvent(xcb_xkb_state_notify_event_t{ + /*.response_type = */ s_xkbEventCode, + /*.xkbType = */ XCB_XKB_STATE_NOTIFY, + /*.sequence = */ 0, + /*.time = */ 0, + /*.deviceID = */ s_coreDeviceId, + /*.mods = */ 0, + /*.baseMods = */ 0, + /*.latchedMods = */ 0, + /*.lockedMods = */ 0, + /*.group = */ 0, + /*.baseGroup = */ 0, + /*.latchedGroup = */ 0, + /*.lockedGroup = */ 0, + /*.compatState = */ 0, + /*.grabMods = */ 0, + /*.compatGrabMods = */ 0, + /*.lookupMods = */ 0, + /*.compatLoockupMods = */ 0, + /*.ptrBtnState = */ 0, + /*.changed = */ 0, + /*.keycode = */ s_keycodeForShiftLKey, + /*.eventType = */ XCB_KEY_RELEASE, + /*.requestMajor = */ 0, + /*.requestMinor = */ 0, + }), + }; + + // Set the expectations for the events that will be generated + // nullptr entries represent when the event queue is empty, and will cause + // PumpSystemEventLoopUntilEmpty to return + // event pointers are freed by the calling code, so we malloc new copies + // here + EXPECT_CALL(m_interface, xcb_poll_for_event(&m_connection)) + .WillOnce(ReturnMalloc(events[0])) + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[1])) + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[2])) + .WillOnce(ReturnMalloc(events[3])) + .WillOnce(Return(nullptr)) + .WillOnce(ReturnMalloc(events[4])) + .WillOnce(ReturnMalloc(events[5])) + .WillRepeatedly(Return(nullptr)) + ; + + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForAKey, nullptr, 0)) + .Times(2); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithoutShift, s_keycodeForAKey, _, 2)) + .Times(1); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithShift, s_keycodeForAKey, _, 2)) + .Times(1); + + InputTextNotificationListener textListener; + EXPECT_CALL(textListener, OnInputTextEvent(StrEq("a"), _)).Times(1); + EXPECT_CALL(textListener, OnInputTextEvent(StrEq("A"), _)).Times(1); + + Application application; + application.Start({}, {}); + + for (int i = 0; i < 4; ++i) + { + application.PumpSystemEventLoopUntilEmpty(); + application.TickSystem(); + application.Tick(); + } + + application.Stop(); + } } // namespace AzFramework diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake index 0ba1ece9c7..762d5d74fe 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/azframework_xcb_tests_files.cmake @@ -9,6 +9,7 @@ set(FILES Actions.h Main.cpp + Matchers.h MockXcbInterface.cpp MockXcbInterface.h Printers.cpp From 8668d8b2fe9c4e2f7c7c4f057b3ea4c25b58fddd Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Wed, 6 Oct 2021 09:09:05 -0700 Subject: [PATCH 139/226] [XCB] Avoid emitting text events when a key press does not generate text Many keys will generate key press events but return an empty string from `xkb_state_key_get_utf8`, like modifier keys, arrow keys, function keys, etc. This checks if the string retrieved from such a key press is empty before emitting an associated text event for it, to avoid notifying a potentially large number of listeners about an empty string. Signed-off-by: Chris Burel --- .../AzFramework/XcbInputDeviceKeyboard.cpp | 9 +++- .../Xcb/XcbInputDeviceKeyboardTests.cpp | 54 ++++++++++++++++--- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp index 454313ec5b..de326df200 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.cpp @@ -148,8 +148,13 @@ namespace AzFramework if (responseType == XCB_KEY_PRESS) { const auto* keyPress = reinterpret_cast(event); - - QueueRawTextEvent(TextFromKeycode(m_xkbState.get(), keyPress->detail)); + { + auto text = TextFromKeycode(m_xkbState.get(), keyPress->detail); + if (!text.empty()) + { + QueueRawTextEvent(AZStd::move(text)); + } + } if (const InputChannelId* key = InputChannelFromKeyEvent(keyPress->detail)) { diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp index c01cf1e7cd..3abbcdc564 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp @@ -91,6 +91,9 @@ namespace AzFramework SetArgPointee<2>('A'), Return(1) )); + + ON_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForShiftLKey, nullptr, 0)) + .WillByDefault(Return(0)); } private: @@ -261,6 +264,24 @@ namespace AzFramework /*.same_screen = */ 0, /*.pad0 = */ 0 }), + // Pressing a modifier key will generate a key press event followed + // by a state notify event + MakeEvent(xcb_key_press_event_t{ + /*.response_type = */ XCB_KEY_PRESS, + /*.detail = */ s_keycodeForShiftLKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), MakeEvent(xcb_xkb_state_notify_event_t{ /*.response_type = */ s_xkbEventCode, /*.xkbType = */ XCB_XKB_STATE_NOTIFY, @@ -319,6 +340,22 @@ namespace AzFramework /*.same_screen = */ 0, /*.pad0 = */ 0 }), + MakeEvent(xcb_key_release_event_t{ + /*.response_type = */ XCB_KEY_RELEASE, + /*.detail = */ s_keycodeForShiftLKey, + /*.sequence = */ 0, + /*.time = */ 0, + /*.root = */ 0, + /*.event = */ 0, + /*.child = */ 0, + /*.root_x = */ 0, + /*.root_y = */ 0, + /*.event_x = */ 0, + /*.event_y = */ 0, + /*.state = */ 0, + /*.same_screen = */ 0, + /*.pad0 = */ 0 + }), MakeEvent(xcb_xkb_state_notify_event_t{ /*.response_type = */ s_xkbEventCode, /*.xkbType = */ XCB_XKB_STATE_NOTIFY, @@ -353,15 +390,17 @@ namespace AzFramework // event pointers are freed by the calling code, so we malloc new copies // here EXPECT_CALL(m_interface, xcb_poll_for_event(&m_connection)) - .WillOnce(ReturnMalloc(events[0])) + .WillOnce(ReturnMalloc(events[0])) // press a .WillOnce(Return(nullptr)) - .WillOnce(ReturnMalloc(events[1])) + .WillOnce(ReturnMalloc(events[1])) // release a .WillOnce(Return(nullptr)) - .WillOnce(ReturnMalloc(events[2])) - .WillOnce(ReturnMalloc(events[3])) + .WillOnce(ReturnMalloc(events[2])) // press shift + .WillOnce(ReturnMalloc(events[3])) // state notify shift is down + .WillOnce(ReturnMalloc(events[4])) // press a .WillOnce(Return(nullptr)) - .WillOnce(ReturnMalloc(events[4])) - .WillOnce(ReturnMalloc(events[5])) + .WillOnce(ReturnMalloc(events[5])) // release a + .WillOnce(ReturnMalloc(events[6])) // release shift + .WillOnce(ReturnMalloc(events[7])) // state notify shift is up .WillRepeatedly(Return(nullptr)) ; @@ -372,6 +411,9 @@ namespace AzFramework EXPECT_CALL(m_interface, xkb_state_key_get_utf8(m_matchesStateWithShift, s_keycodeForAKey, _, 2)) .Times(1); + EXPECT_CALL(m_interface, xkb_state_key_get_utf8(&m_xkbState, s_keycodeForShiftLKey, nullptr, 0)) + .Times(1); + InputTextNotificationListener textListener; EXPECT_CALL(textListener, OnInputTextEvent(StrEq("a"), _)).Times(1); EXPECT_CALL(textListener, OnInputTextEvent(StrEq("A"), _)).Times(1); From 39cf3f51cc27f62458f8db7c915e35f8bfb4b16a Mon Sep 17 00:00:00 2001 From: AMZN-Phil Date: Wed, 6 Oct 2021 11:43:41 -0700 Subject: [PATCH 140/226] Update wix installer folders to match the new binary locations. Signed-off-by: AMZN-Phil --- .../Platform/Windows/Packaging/Bootstrapper.wxs | 2 +- cmake/Platform/Windows/Packaging/Shortcuts.wxs | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/cmake/Platform/Windows/Packaging/Bootstrapper.wxs b/cmake/Platform/Windows/Packaging/Bootstrapper.wxs index 079c20e212..f3af199bc2 100644 --- a/cmake/Platform/Windows/Packaging/Bootstrapper.wxs +++ b/cmake/Platform/Windows/Packaging/Bootstrapper.wxs @@ -20,7 +20,7 @@ + Value="[InstallFolder]\bin\Windows\profile\Default\o3de.exe"/> diff --git a/cmake/Platform/Windows/Packaging/Shortcuts.wxs b/cmake/Platform/Windows/Packaging/Shortcuts.wxs index fefd15294a..fbfa174d06 100644 --- a/cmake/Platform/Windows/Packaging/Shortcuts.wxs +++ b/cmake/Platform/Windows/Packaging/Shortcuts.wxs @@ -18,7 +18,9 @@ - + + + @@ -52,18 +54,18 @@ From f68d2676a0caaf9ef31b6daf8ecd01df6ffa45af Mon Sep 17 00:00:00 2001 From: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:51:28 -0500 Subject: [PATCH 141/226] Terrain/mbalfour/terrain macro material component (#4500) * Initial TerrainMacroMaterial Component. The APIs will likely need to be adjusted once it gets hooked up to the renderer. It also would benefit from better UX to prevent users from selecting the wrong material types, but there are separate tickets for the Editor to add features to allow for that. Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> * Addressed PR feedback. Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> * More PR feedback - add create/destroy notifications. Signed-off-by: Mike Balfour <82224783+mbalfour-amzn@users.noreply.github.com> --- .../DefaultTerrainMacroMaterial.material | 8 + .../Terrain/TerrainMacroMaterial.materialtype | 46 +++ .../Code/Source/EditorTerrainModule.cpp | 2 + Gems/Terrain/Code/Source/TerrainModule.cpp | 2 + .../TerrainMacroMaterialComponent.cpp | 287 ++++++++++++++++++ .../TerrainMacroMaterialComponent.h | 92 ++++++ .../EditorTerrainMacroMaterialComponent.cpp | 52 ++++ .../EditorTerrainMacroMaterialComponent.h | 32 ++ .../TerrainRenderer/TerrainMacroMaterialBus.h | 78 +++++ .../Code/terrain_editor_shared_files.cmake | 2 + Gems/Terrain/Code/terrain_files.cmake | 3 + 11 files changed, 604 insertions(+) create mode 100644 Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material create mode 100644 Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h diff --git a/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material b/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material new file mode 100644 index 0000000000..afaf7e1947 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/DefaultTerrainMacroMaterial.material @@ -0,0 +1,8 @@ +{ + "description": "", + "materialType": "TerrainMacroMaterial.materialtype", + "parentMaterial": "", + "propertyLayoutVersion": 1, + "properties": { + } +} diff --git a/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype b/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype new file mode 100644 index 0000000000..0a4f6d0229 --- /dev/null +++ b/Gems/Terrain/Assets/Materials/Terrain/TerrainMacroMaterial.materialtype @@ -0,0 +1,46 @@ +{ + "description": "A material for providing terrain with low-fidelity color and normals. This material will get blended with surface detail materials.", + "propertyLayout": { + "version": 1, + "groups": [ + { + "id": "settings", + "displayName": "Settings" + } + ], + "properties": { + "macroColor": [ + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + + ], + "macroNormal": [ + { + "id": "useTexture", + "displayName": "Use Texture", + "description": "Whether to use the texture.", + "type": "Bool", + "defaultValue": true + } + ] + } + }, + "shaders": [ + { + "file": "../../Shaders/Terrain/TerrainPBR_ForwardPass.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_Shadowmap.shader" + }, + { + "file": "../../Shaders/Terrain/Terrain_DepthPass.shader" + } + ], + "functors": [ + ] +} diff --git a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp index 9107ea8541..94c6f5c3c6 100644 --- a/Gems/Terrain/Code/Source/EditorTerrainModule.cpp +++ b/Gems/Terrain/Code/Source/EditorTerrainModule.cpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace Terrain { @@ -24,6 +25,7 @@ namespace Terrain { Terrain::EditorTerrainHeightGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainLayerSpawnerComponent::CreateDescriptor(), + Terrain::EditorTerrainMacroMaterialComponent::CreateDescriptor(), Terrain::EditorTerrainSurfaceGradientListComponent::CreateDescriptor(), Terrain::EditorTerrainSystemComponent::CreateDescriptor(), Terrain::EditorTerrainWorldComponent::CreateDescriptor(), diff --git a/Gems/Terrain/Code/Source/TerrainModule.cpp b/Gems/Terrain/Code/Source/TerrainModule.cpp index 6aeddc3cd5..878c6b44c8 100644 --- a/Gems/Terrain/Code/Source/TerrainModule.cpp +++ b/Gems/Terrain/Code/Source/TerrainModule.cpp @@ -18,6 +18,7 @@ #include #include #include +#include namespace Terrain { @@ -31,6 +32,7 @@ namespace Terrain TerrainWorldRendererComponent::CreateDescriptor(), TerrainHeightGradientListComponent::CreateDescriptor(), TerrainLayerSpawnerComponent::CreateDescriptor(), + TerrainMacroMaterialComponent::CreateDescriptor(), TerrainSurfaceGradientListComponent::CreateDescriptor(), TerrainSurfaceDataSystemComponent::CreateDescriptor(), }); diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp new file mode 100644 index 0000000000..55653c64fa --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp @@ -0,0 +1,287 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace Terrain +{ + AZ::Data::AssetId TerrainMacroMaterialConfig::s_macroMaterialTypeAssetId{}; + + void TerrainMacroMaterialConfig::Reflect(AZ::ReflectContext* context) + { + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(1) + ->Field("MacroMaterial", &TerrainMacroMaterialConfig::m_materialAsset) + ; + + // The edit context for this appears in EditorTerrainMacroMaterialComponent.cpp. + } + } + + AZ::Data::AssetId TerrainMacroMaterialConfig::GetTerrainMacroMaterialTypeAssetId() + { + // Get the Asset ID for the TerrainMacroMaterial material type and store it in a class static so that we don't have to look it + // up again. + if (!s_macroMaterialTypeAssetId.IsValid()) + { + AZ::Data::AssetCatalogRequestBus::BroadcastResult( + s_macroMaterialTypeAssetId, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, TerrainMacroMaterialTypeAsset, + azrtti_typeid(), false); + AZ_Assert(s_macroMaterialTypeAssetId.IsValid(), "The asset '%s' couldn't be found.", TerrainMacroMaterialTypeAsset); + } + + return s_macroMaterialTypeAssetId; + } + + bool TerrainMacroMaterialConfig::IsMaterialTypeCorrect(const AZ::Data::AssetId& assetId) + { + // We'll verify that whatever material we try to load has this material type as a dependency, as a way to implicitly detect + // that we're only trying to use terrain macro materials even before we load the asset. + auto macroMaterialTypeAssetId = GetTerrainMacroMaterialTypeAssetId(); + + // Get the dependencies for the requested asset. + AZ::Outcome, AZStd::string> result; + AZ::Data::AssetCatalogRequestBus::BroadcastResult( + result, &AZ::Data::AssetCatalogRequestBus::Events::GetDirectProductDependencies, assetId); + + // If any of the dependencies match the TerrainMacroMaterial materialtype asset, then this should be the correct type of material. + if (result) + { + for (auto& dependency : result.GetValue()) + { + if (dependency.m_assetId == macroMaterialTypeAssetId) + { + return true; + } + } + } + + // Didn't have the expected dependency, so it must not be the right material type. + return false; + } + + AZ::Outcome TerrainMacroMaterialConfig::ValidateMaterialAsset(void* newValue, const AZ::Uuid& valueType) + { + if (azrtti_typeid>() != valueType) + { + AZ_Assert(false, "Unexpected value type"); + return AZ::Failure(AZStd::string("Unexpectedly received something other than a material asset for the MacroMaterial!")); + } + + auto newMaterialAsset = *static_cast*>(newValue); + + if (!IsMaterialTypeCorrect(newMaterialAsset.GetId())) + { + return AZ::Failure(AZStd::string::format( + "The selected MacroMaterial ('%s') needs to use the TerrainMacroMaterial material type.", + newMaterialAsset.GetHint().c_str())); + } + + return AZ::Success(); + } + + + void TerrainMacroMaterialComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainMacroMaterialProviderService")); + } + + void TerrainMacroMaterialComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("TerrainMacroMaterialProviderService")); + } + + void TerrainMacroMaterialComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services) + { + services.push_back(AZ_CRC_CE("AxisAlignedBoxShapeService")); + } + + void TerrainMacroMaterialComponent::Reflect(AZ::ReflectContext* context) + { + TerrainMacroMaterialConfig::Reflect(context); + + AZ::SerializeContext* serialize = azrtti_cast(context); + if (serialize) + { + serialize->Class() + ->Version(0) + ->Field("Configuration", &TerrainMacroMaterialComponent::m_configuration) + ; + } + } + + TerrainMacroMaterialComponent::TerrainMacroMaterialComponent(const TerrainMacroMaterialConfig& configuration) + : m_configuration(configuration) + { + } + + void TerrainMacroMaterialComponent::Activate() + { + // Clear out our shape bounds and make sure the material is queued to load. + m_cachedShapeBounds = AZ::Aabb::CreateNull(); + m_configuration.m_materialAsset.QueueLoad(); + + // Don't mark our material as active until it's finished loading and is valid. + m_macroMaterialActive = false; + + // Listen for the material asset to complete loading. + AZ::Data::AssetBus::Handler::BusConnect(m_configuration.m_materialAsset.GetId()); + } + + void TerrainMacroMaterialComponent::Deactivate() + { + TerrainMacroMaterialRequestBus::Handler::BusDisconnect(); + + AZ::Data::AssetBus::Handler::BusDisconnect(); + m_configuration.m_materialAsset.Release(); + + m_macroMaterialInstance.reset(); + + // Send out any notifications as appropriate based on the macro material destruction. + HandleMaterialStateChange(); + } + + bool TerrainMacroMaterialComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig) + { + if (auto config = azrtti_cast(baseConfig)) + { + m_configuration = *config; + return true; + } + return false; + } + + bool TerrainMacroMaterialComponent::WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const + { + if (auto config = azrtti_cast(outBaseConfig)) + { + *config = m_configuration; + return true; + } + return false; + } + + void TerrainMacroMaterialComponent::OnShapeChanged([[maybe_unused]] ShapeComponentNotifications::ShapeChangeReasons reasons) + { + // This should only get called while the macro material is active. If it gets called while the macro material isn't active, + // we've got a bug where we haven't managed the bus connections properly. + AZ_Assert(m_macroMaterialActive, "The ShapeComponentNotificationBus connection is out of sync with the material load."); + + AZ::Aabb oldShapeBounds = m_cachedShapeBounds; + + LmbrCentral::ShapeComponentRequestsBus::EventResult( + m_cachedShapeBounds, GetEntityId(), &LmbrCentral::ShapeComponentRequestsBus::Events::GetEncompassingAabb); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialRegionChanged, + GetEntityId(), oldShapeBounds, m_cachedShapeBounds); + } + + void TerrainMacroMaterialComponent::HandleMaterialStateChange() + { + // We only want our component to appear active during the time that the macro material is loaded and valid. The logic below + // will handle all transition possibilities to notify if we've become active, inactive, or just changed. We'll also only + // keep a valid up-to-date copy of the shape bounds while the material is valid, since we don't need it any other time. + + bool wasPreviouslyActive = m_macroMaterialActive; + bool isNowActive = (m_macroMaterialInstance != nullptr); + + // Set our state to active or inactive, based on whether or not the macro material instance is now valid. + m_macroMaterialActive = isNowActive; + + // Handle the different inactive/active transition possibilities. + + if (!wasPreviouslyActive && !isNowActive) + { + // Do nothing, we haven't yet successfully loaded a valid material. + } + else if (!wasPreviouslyActive && isNowActive) + { + // We've transitioned from inactive to active, so send out a message saying that we've been created and start tracking the + // overall shape bounds. + + // Get the current shape bounds. + LmbrCentral::ShapeComponentRequestsBus::EventResult( + m_cachedShapeBounds, GetEntityId(), &LmbrCentral::ShapeComponentRequestsBus::Events::GetEncompassingAabb); + + // Start listening for terrain macro material requests. + TerrainMacroMaterialRequestBus::Handler::BusConnect(GetEntityId()); + + // Start listening for shape changes. + LmbrCentral::ShapeComponentNotificationsBus::Handler::BusConnect(GetEntityId()); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialCreated, GetEntityId(), m_macroMaterialInstance, + m_cachedShapeBounds); + } + else if (wasPreviouslyActive && !isNowActive) + { + // Stop listening to macro material requests or shape changes, and send out a notification that we no longer have a valid + // macro material. + + TerrainMacroMaterialRequestBus::Handler::BusDisconnect(); + LmbrCentral::ShapeComponentNotificationsBus::Handler::BusDisconnect(); + + m_cachedShapeBounds = AZ::Aabb::CreateNull(); + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialDestroyed, GetEntityId()); + } + else + { + // We were active both before and after, so just send out a material changed event. + + TerrainMacroMaterialNotificationBus::Broadcast( + &TerrainMacroMaterialNotificationBus::Events::OnTerrainMacroMaterialChanged, GetEntityId(), m_macroMaterialInstance); + } + } + + void TerrainMacroMaterialComponent::OnAssetReady(AZ::Data::Asset asset) + { + m_configuration.m_materialAsset = asset; + + if (m_configuration.m_materialAsset.Get()->GetMaterialTypeAsset().GetId() == + TerrainMacroMaterialConfig::GetTerrainMacroMaterialTypeAssetId()) + { + m_macroMaterialInstance = AZ::RPI::Material::FindOrCreate(m_configuration.m_materialAsset); + } + else + { + AZ_Error("Terrain", false, "Material '%s' has the wrong material type.", m_configuration.m_materialAsset.GetHint().c_str()); + m_macroMaterialInstance.reset(); + } + + // Clear the material asset reference to make sure we don't prevent hot-reloading. + m_configuration.m_materialAsset.Release(); + + HandleMaterialStateChange(); + } + + void TerrainMacroMaterialComponent::OnAssetReloaded(AZ::Data::Asset asset) + { + OnAssetReady(asset); + } + + void TerrainMacroMaterialComponent::GetTerrainMacroMaterialData( + AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) + { + macroMaterial = m_macroMaterialInstance; + macroMaterialRegion = m_cachedShapeBounds; + } +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h new file mode 100644 index 0000000000..b60f6b2a94 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + + +namespace LmbrCentral +{ + template + class EditorWrappedComponentBase; +} + +namespace Terrain +{ + class TerrainMacroMaterialConfig + : public AZ::ComponentConfig + { + public: + AZ_CLASS_ALLOCATOR(TerrainMacroMaterialConfig, AZ::SystemAllocator, 0); + AZ_RTTI(TerrainMacroMaterialConfig, "{9DBAFFF0-FD20-4594-8884-E3266D8CCAC8}", AZ::ComponentConfig); + static void Reflect(AZ::ReflectContext* context); + + AZ::Data::Asset m_materialAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; + + static AZ::Data::AssetId GetTerrainMacroMaterialTypeAssetId(); + static bool IsMaterialTypeCorrect(const AZ::Data::AssetId&); + AZ::Outcome ValidateMaterialAsset(void* newValue, const AZ::Uuid& valueType); + + private: + static inline constexpr const char* TerrainMacroMaterialTypeAsset = "materials/terrain/terrainmacromaterial.azmaterialtype"; + static AZ::Data::AssetId s_macroMaterialTypeAssetId; + + }; + + class TerrainMacroMaterialComponent + : public AZ::Component + , public TerrainMacroMaterialRequestBus::Handler + , private LmbrCentral::ShapeComponentNotificationsBus::Handler + , private AZ::Data::AssetBus::Handler + { + public: + template + friend class LmbrCentral::EditorWrappedComponentBase; + AZ_COMPONENT(TerrainMacroMaterialComponent, "{F82379FB-E2AE-4F75-A6F4-1AE5F5DA42E8}"); + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& services); + static void Reflect(AZ::ReflectContext* context); + + TerrainMacroMaterialComponent(const TerrainMacroMaterialConfig& configuration); + TerrainMacroMaterialComponent() = default; + ~TerrainMacroMaterialComponent() = default; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Component interface implementation + void Activate() override; + void Deactivate() override; + bool ReadInConfig(const AZ::ComponentConfig* baseConfig) override; + bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; + + void GetTerrainMacroMaterialData(AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) override; + + private: + //////////////////////////////////////////////////////////////////////// + // ShapeComponentNotificationsBus + void OnShapeChanged(ShapeComponentNotifications::ShapeChangeReasons reasons) override; + + ////////////////////////////////////////////////////////////////////////// + // AZ::Data::AssetBus::Handler + void OnAssetReady(AZ::Data::Asset asset) override; + void OnAssetReloaded(AZ::Data::Asset asset) override; + + void HandleMaterialStateChange(); + + TerrainMacroMaterialConfig m_configuration; + AZ::Aabb m_cachedShapeBounds; + AZ::Data::Instance m_macroMaterialInstance; + bool m_macroMaterialActive{ false }; + }; +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp new file mode 100644 index 0000000000..07472d1b85 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +namespace Terrain +{ + void EditorTerrainMacroMaterialComponent::Reflect(AZ::ReflectContext* context) + { + BaseClassType::ReflectSubClass( + context, 1, + &LmbrCentral::EditorWrappedComponentBaseVersionConverter + ); + + AZ::SerializeContext* serializeContext = azrtti_cast(context); + + if (serializeContext) + { + AZ::EditContext* editContext = serializeContext->GetEditContext(); + + // The edit context for TerrainMacroMaterialConfig is specified here to make it easier to add custom filtering to the + // asset picker for the material asset so that we can eventually only display materials that inherit from the proper + // material type. + if (editContext) + { + editContext + ->Class( + "Terrain Macro Material Component", "Provide a terrain macro material for a region of the world") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + + ->DataElement( + AZ::Edit::UIHandlers::Default, &TerrainMacroMaterialConfig::m_materialAsset, "Macro Material", + "Terrain macro material for use by any terrain inside the bounding box on this entity.") + // This is disabled until ChangeValidate can support the Asset type. :( + //->Attribute(AZ::Edit::Attributes::ChangeValidate, &TerrainMacroMaterialConfig::ValidateMaterialAsset) + ; + } + } + + } +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h new file mode 100644 index 0000000000..a2fddf5768 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace Terrain +{ + class EditorTerrainMacroMaterialComponent + : public LmbrCentral::EditorWrappedComponentBase + { + public: + using BaseClassType = LmbrCentral::EditorWrappedComponentBase; + AZ_EDITOR_COMPONENT(EditorTerrainMacroMaterialComponent, "{24D87D5F-6845-4F1F-81DC-05B4CEBA3EF4}", BaseClassType); + static void Reflect(AZ::ReflectContext* context); + + static constexpr const char* const s_categoryName = "Terrain"; + static constexpr const char* const s_componentName = "Terrain Macro Material"; + static constexpr const char* const s_componentDescription = "Provides a macro material for a region to the terrain renderer"; + static constexpr const char* const s_icon = "Editor/Icons/Components/TerrainLayerRenderer.svg"; + static constexpr const char* const s_viewportIcon = "Editor/Icons/Components/Viewport/TerrainLayerRenderer.svg"; + static constexpr const char* const s_helpUrl = ""; + }; +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h new file mode 100644 index 0000000000..c0618a7f66 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainMacroMaterialBus.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +#include + +namespace Terrain +{ + /** + * Request terrain macro material data. + */ + class TerrainMacroMaterialRequests + : public AZ::ComponentBus + { + public: + //////////////////////////////////////////////////////////////////////// + // EBusTraits + using MutexType = AZStd::recursive_mutex; + //////////////////////////////////////////////////////////////////////// + + virtual ~TerrainMacroMaterialRequests() = default; + + // Get the terrain macro material and the region that it covers. + virtual void GetTerrainMacroMaterialData(AZ::Data::Instance& macroMaterial, AZ::Aabb& macroMaterialRegion) = 0; + }; + + using TerrainMacroMaterialRequestBus = AZ::EBus; + + /** + * Notifications for when the terrain macro material data changes. + */ + class TerrainMacroMaterialNotifications : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + ////////////////////////////////////////////////////////////////////////// + + virtual void OnTerrainMacroMaterialCreated( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] AZ::Data::Instance macroMaterial, + [[maybe_unused]] const AZ::Aabb& macroMaterialRegion) + { + } + + virtual void OnTerrainMacroMaterialChanged( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] AZ::Data::Instance macroMaterial) + { + } + + virtual void OnTerrainMacroMaterialRegionChanged( + [[maybe_unused]] AZ::EntityId macroMaterialEntity, + [[maybe_unused]] const AZ::Aabb& oldRegion, + [[maybe_unused]] const AZ::Aabb& newRegion) + { + } + + virtual void OnTerrainMacroMaterialDestroyed([[maybe_unused]] AZ::EntityId macroMaterialEntity) + { + } + }; + using TerrainMacroMaterialNotificationBus = AZ::EBus; + +} diff --git a/Gems/Terrain/Code/terrain_editor_shared_files.cmake b/Gems/Terrain/Code/terrain_editor_shared_files.cmake index efb68eca31..2db46dc264 100644 --- a/Gems/Terrain/Code/terrain_editor_shared_files.cmake +++ b/Gems/Terrain/Code/terrain_editor_shared_files.cmake @@ -25,4 +25,6 @@ set(FILES Source/EditorTerrainModule.h Source/TerrainModule.cpp Source/TerrainModule.h + Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.cpp + Source/TerrainRenderer/EditorComponents/EditorTerrainMacroMaterialComponent.h ) diff --git a/Gems/Terrain/Code/terrain_files.cmake b/Gems/Terrain/Code/terrain_files.cmake index 6d190b7d5e..5739ed6079 100644 --- a/Gems/Terrain/Code/terrain_files.cmake +++ b/Gems/Terrain/Code/terrain_files.cmake @@ -24,8 +24,11 @@ set(FILES Source/Components/TerrainWorldDebuggerComponent.h Source/Components/TerrainWorldRendererComponent.cpp Source/Components/TerrainWorldRendererComponent.h + Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.cpp + Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h Source/TerrainRenderer/TerrainFeatureProcessor.cpp Source/TerrainRenderer/TerrainFeatureProcessor.h + Source/TerrainRenderer/TerrainMacroMaterialBus.h Source/TerrainSystem/TerrainSystem.cpp Source/TerrainSystem/TerrainSystem.h Source/TerrainSystem/TerrainSystemBus.h From 0657f6f7ec0b9f571e4852b6621bd9eff8a163e6 Mon Sep 17 00:00:00 2001 From: Vincent Liu <5900509+onecent1101@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:01:52 -0700 Subject: [PATCH 142/226] [LYN-7050] Add matchmaking ticket tracker component (#4485) Signed-off-by: onecent1101 --- .../AWSGameLiftClientLocalTicketTracker.cpp | 169 +++++++++ .../AWSGameLiftClientLocalTicketTracker.h | 62 +++ .../Source/AWSGameLiftClientManager.cpp | 31 +- .../Source/AWSGameLiftClientManager.h | 18 +- .../AWSGameLiftClientSystemComponent.cpp | 38 +- .../Source/AWSGameLiftClientSystemComponent.h | 15 +- .../Request/IAWSGameLiftInternalRequests.h | 43 +++ .../IAWSGameLiftMatchmakingInternalRequests.h | 39 ++ ...WSGameLiftClientLocalTicketTrackerTest.cpp | 353 ++++++++++++++++++ .../Tests/AWSGameLiftClientManagerTest.cpp | 89 +++-- .../Tests/AWSGameLiftClientMocks.h | 3 + .../AWSGameLiftClientSystemComponentTest.cpp | 27 +- .../awsgamelift_client_files.cmake | 5 + .../awsgamelift_client_tests_files.cmake | 1 + .../Source/AWSGameLiftSessionConstants.h | 1 + 15 files changed, 799 insertions(+), 95 deletions(-) create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h create mode 100644 Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp new file mode 100644 index 0000000000..9ae168aea9 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +namespace AWSGameLift +{ + AWSGameLiftClientLocalTicketTracker::AWSGameLiftClientLocalTicketTracker() + : m_status(TicketTrackerStatus::Idle) + , m_pollingPeriodInMS(AWSGameLiftClientDefaultPollingPeriodInMS) + { + } + + void AWSGameLiftClientLocalTicketTracker::ActivateTracker() + { + AZ::Interface::Register(this); + } + + void AWSGameLiftClientLocalTicketTracker::DeactivateTracker() + { + AZ::Interface::Unregister(this); + StopPolling(); + } + + void AWSGameLiftClientLocalTicketTracker::StartPolling( + const AZStd::string& ticketId, const AZStd::string& playerId) + { + AZStd::lock_guard lock(m_trackerMutex); + if (m_status == TicketTrackerStatus::Running) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket tracker is running."); + return; + } + m_status = TicketTrackerStatus::Running; + m_trackerThread = AZStd::thread(AZStd::bind( + &AWSGameLiftClientLocalTicketTracker::ProcessPolling, this, ticketId, playerId)); + } + + void AWSGameLiftClientLocalTicketTracker::StopPolling() + { + AZStd::lock_guard lock(m_trackerMutex); + m_status = TicketTrackerStatus::Idle; + if (m_trackerThread.joinable()) + { + m_trackerThread.join(); + } + } + + void AWSGameLiftClientLocalTicketTracker::ProcessPolling( + const AZStd::string& ticketId, const AZStd::string& playerId) + { + while (m_status == TicketTrackerStatus::Running) + { + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); + if (gameliftClient) + { + Aws::GameLift::Model::DescribeMatchmakingRequest request; + request.AddTicketIds(ticketId.c_str()); + + auto describeMatchmakingOutcome = gameliftClient->DescribeMatchmaking(request); + if (describeMatchmakingOutcome.IsSuccess()) + { + if (describeMatchmakingOutcome.GetResult().GetTicketList().size() == 1) + { + auto ticket = describeMatchmakingOutcome.GetResult().GetTicketList().front(); + if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED) + { + m_status = TicketTrackerStatus::Idle; + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Matchmaking ticket %s is complete.", ticket.GetTicketId().c_str()); + RequestPlayerJoinMatch(ticket, playerId); + return; + } + else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::TIMED_OUT || + ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::FAILED || + ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::CANCELLED) + { + m_status = TicketTrackerStatus::Idle; + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, "Matchmaking ticket %s is not complete, %s", + ticket.GetTicketId().c_str(), ticket.GetStatusReason().c_str()); + return; + } + else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::REQUIRES_ACCEPTANCE) + { + // broadcast acceptance requires to player + } + else + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket %s is processing, %s.", + ticket.GetTicketId().c_str(), ticket.GetStatusReason().c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, "Unable to find expected ticket with id %s", ticketId.c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, AWSGameLiftErrorMessageTemplate, + describeMatchmakingOutcome.GetError().GetExceptionName().c_str(), + describeMatchmakingOutcome.GetError().GetMessage().c_str()); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, AWSGameLiftClientMissingErrorMessage); + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(m_pollingPeriodInMS)); + } + } + + void AWSGameLiftClientLocalTicketTracker::RequestPlayerJoinMatch( + const Aws::GameLift::Model::MatchmakingTicket& ticket, const AZStd::string& playerId) + { + auto connectionInfo = ticket.GetGameSessionConnectionInfo(); + AzFramework::SessionConnectionConfig sessionConnectionConfig; + sessionConnectionConfig.m_ipAddress = connectionInfo.GetIpAddress().c_str(); + for (auto matchedPlayer : connectionInfo.GetMatchedPlayerSessions()) + { + if (playerId.compare(matchedPlayer.GetPlayerId().c_str()) == 0) + { + sessionConnectionConfig.m_playerSessionId = matchedPlayer.GetPlayerSessionId().c_str(); + break; + } + } + sessionConnectionConfig.m_port = static_cast(connectionInfo.GetPort()); + + if (!sessionConnectionConfig.m_playerSessionId.empty()) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Requesting and validating player session %s to connect to the match ...", + sessionConnectionConfig.m_playerSessionId.c_str()); + bool result = + AZ::Interface::Get()->RequestPlayerJoinSession(sessionConnectionConfig); + if (result) + { + AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, + "Started connection process, and connection validation is in process."); + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, + "Failed to start connection process."); + } + } + else + { + AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, + "Player session id is missing for player % to join the match.", playerId.c_str()); + } + } +} diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h new file mode 100644 index 0000000000..7b317a0485 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include + +#include + +#include + +namespace AWSGameLift +{ + enum TicketTrackerStatus + { + Idle, + Running + }; + + //! AWSGameLiftClientLocalTicketTracker + //! GameLift client ticket tracker to describe submitted matchmaking ticket periodically, + //! and join player to the match once matchmaking ticket is complete. + //! For use in production, please see GameLifts guidance about matchmaking at volume. + //! The continuous polling approach here is only suitable for low volume matchmaking and is meant to aid with development only + class AWSGameLiftClientLocalTicketTracker + : public IAWSGameLiftMatchmakingInternalRequests + { + public: + static constexpr const char AWSGameLiftClientLocalTicketTrackerName[] = "AWSGameLiftClientLocalTicketTracker"; + // Set ticket polling period to 10 seconds + // https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html#match-client-track + static constexpr const uint64_t AWSGameLiftClientDefaultPollingPeriodInMS = 10000; + + AWSGameLiftClientLocalTicketTracker(); + virtual ~AWSGameLiftClientLocalTicketTracker() = default; + + virtual void ActivateTracker(); + virtual void DeactivateTracker(); + + // IAWSGameLiftMatchmakingInternalRequests interface implementation + void StartPolling(const AZStd::string& ticketId, const AZStd::string& playerId) override; + void StopPolling() override; + + protected: + // For testing friendly access + uint64_t m_pollingPeriodInMS; + TicketTrackerStatus m_status; + + private: + void ProcessPolling(const AZStd::string& ticketId, const AZStd::string& playerId); + void RequestPlayerJoinMatch(const Aws::GameLift::Model::MatchmakingTicket& ticket, const AZStd::string& playerId); + + AZStd::mutex m_trackerMutex; + AZStd::thread m_trackerThread; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp index ae4fb162d6..ee731993aa 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.cpp @@ -17,11 +17,13 @@ #include #include +#include #include #include #include #include #include +#include #include @@ -31,11 +33,6 @@ namespace AWSGameLift AZ_CVAR(AZ::CVarFixedString, cl_gameliftLocalEndpoint, "", nullptr, AZ::ConsoleFunctorFlags::Null, "The local endpoint to test with GameLiftLocal SDK."); #endif - AWSGameLiftClientManager::AWSGameLiftClientManager() - { - m_gameliftClient.reset(); - } - void AWSGameLiftClientManager::ActivateManager() { AZ::Interface::Register(this); @@ -62,8 +59,7 @@ namespace AWSGameLift bool AWSGameLiftClientManager::ConfigureGameLiftClient(const AZStd::string& region) { - m_gameliftClient.reset(); - + AZ::Interface::Get()->SetGameLiftClient(nullptr); Aws::Client::ClientConfiguration clientConfig; // Set up client endpoint or region AZStd::string localEndpoint = ""; @@ -103,7 +99,8 @@ namespace AWSGameLift AZ_Error(AWSGameLiftClientManagerName, false, AWSGameLiftClientCredentialMissingErrorMessage); return false; } - m_gameliftClient = AZStd::make_shared(credentialResult.result, clientConfig); + AZ::Interface::Get()->SetGameLiftClient( + AZStd::make_shared(credentialResult.result, clientConfig)); return true; } @@ -194,15 +191,15 @@ namespace AWSGameLift AZStd::string AWSGameLiftClientManager::CreateSessionHelper( const AWSGameLiftCreateSessionRequest& createSessionRequest) { - AZStd::shared_ptr gameLiftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AZStd::string result = ""; - if (!gameLiftClient) + if (!gameliftClient) { AZ_Error(AWSGameLiftClientManagerName, false, AWSGameLiftClientMissingErrorMessage); } else { - result = CreateSessionActivity::CreateSession(*gameLiftClient, createSessionRequest); + result = CreateSessionActivity::CreateSession(*gameliftClient, createSessionRequest); } return result; } @@ -210,7 +207,7 @@ namespace AWSGameLift AZStd::string AWSGameLiftClientManager::CreateSessionOnQueueHelper( const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest) { - AZStd::shared_ptr gameliftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AZStd::string result; if (!gameliftClient) { @@ -265,7 +262,7 @@ namespace AWSGameLift bool AWSGameLiftClientManager::JoinSessionHelper(const AWSGameLiftJoinSessionRequest& joinSessionRequest) { - AZStd::shared_ptr gameliftClient = m_gameliftClient; + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); bool result = false; if (!gameliftClient) { @@ -345,8 +342,7 @@ namespace AWSGameLift AzFramework::SearchSessionsResponse AWSGameLiftClientManager::SearchSessionsHelper( const AWSGameLiftSearchSessionsRequest& searchSessionsRequest) const { - AZStd::shared_ptr gameliftClient = m_gameliftClient; - + auto gameliftClient = AZ::Interface::Get()->GetGameLiftClient(); AzFramework::SearchSessionsResponse response; if (!gameliftClient) { @@ -380,9 +376,4 @@ namespace AWSGameLift { AZ_UNUSED(stopMatchmakingRequest); } - - void AWSGameLiftClientManager::SetGameLiftClient(AZStd::shared_ptr gameliftClient) - { - m_gameliftClient.swap(gameliftClient); - } } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h index d7211d0472..fbdc1d6104 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientManager.h @@ -13,14 +13,6 @@ #include -namespace Aws -{ - namespace GameLift - { - class GameLiftClient; - } -} - namespace AWSGameLift { struct AWSGameLiftCreateSessionRequest; @@ -127,13 +119,11 @@ namespace AWSGameLift "Missing AWS region for GameLift client."; static constexpr const char AWSGameLiftClientCredentialMissingErrorMessage[] = "Missing AWS credential for GameLift client."; - static constexpr const char AWSGameLiftClientMissingErrorMessage[] = - "GameLift client is not configured yet."; static constexpr const char AWSGameLiftCreateSessionRequestInvalidErrorMessage[] = "Invalid GameLift CreateSession or CreateSessionOnQueue request."; - AWSGameLiftClientManager(); + AWSGameLiftClientManager() = default; virtual ~AWSGameLiftClientManager() = default; virtual void ActivateManager(); @@ -165,16 +155,10 @@ namespace AWSGameLift AzFramework::SearchSessionsResponse SearchSessions(const AzFramework::SearchSessionsRequest& searchSessionsRequest) const override; void LeaveSession() override; - protected: - // Use for automation tests only to inject mock objects. - void SetGameLiftClient(AZStd::shared_ptr gameliftClient); - private: AZStd::string CreateSessionHelper(const AWSGameLiftCreateSessionRequest& createSessionRequest); AZStd::string CreateSessionOnQueueHelper(const AWSGameLiftCreateSessionOnQueueRequest& createSessionOnQueueRequest); bool JoinSessionHelper(const AWSGameLiftJoinSessionRequest& joinSessionRequest); AzFramework::SearchSessionsResponse SearchSessionsHelper(const AWSGameLiftSearchSessionsRequest& searchSessionsRequest) const; - - AZStd::shared_ptr m_gameliftClient; }; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp index db201920f6..ea5fff99a3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -27,7 +28,8 @@ namespace AWSGameLift { AWSGameLiftClientSystemComponent::AWSGameLiftClientSystemComponent() { - m_gameliftClientManager = AZStd::make_unique(); + m_gameliftManager = AZStd::make_unique(); + m_gameliftTicketTracker = AZStd::make_unique(); } void AWSGameLiftClientSystemComponent::Reflect(AZ::ReflectContext* context) @@ -90,12 +92,20 @@ namespace AWSGameLift void AWSGameLiftClientSystemComponent::Activate() { - m_gameliftClientManager->ActivateManager(); + AZ::Interface::Register(this); + + m_gameliftClient.reset(); + m_gameliftManager->ActivateManager(); + m_gameliftTicketTracker->ActivateTracker(); } void AWSGameLiftClientSystemComponent::Deactivate() { - m_gameliftClientManager->DeactivateManager(); + m_gameliftTicketTracker->DeactivateTracker(); + m_gameliftManager->DeactivateManager(); + m_gameliftClient.reset(); + + AZ::Interface::Unregister(this); } void AWSGameLiftClientSystemComponent::ReflectGameLiftMatchmaking(AZ::ReflectContext* context) @@ -213,9 +223,25 @@ namespace AWSGameLift } } - void AWSGameLiftClientSystemComponent::SetGameLiftClientManager(AZStd::unique_ptr gameliftClientManager) + AZStd::shared_ptr AWSGameLiftClientSystemComponent::GetGameLiftClient() const + { + return m_gameliftClient; + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + m_gameliftClient.swap(gameliftClient); + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClientManager(AZStd::unique_ptr gameliftManager) + { + m_gameliftManager.reset(); + m_gameliftManager = AZStd::move(gameliftManager); + } + + void AWSGameLiftClientSystemComponent::SetGameLiftClientTicketTracker(AZStd::unique_ptr gameliftTicketTracker) { - m_gameliftClientManager.reset(); - m_gameliftClientManager = AZStd::move(gameliftClientManager); + m_gameliftTicketTracker.reset(); + m_gameliftTicketTracker = AZStd::move(gameliftTicketTracker); } } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h index f54461b918..30d4ee0106 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientSystemComponent.h @@ -11,6 +11,9 @@ #include #include +#include +#include + namespace AWSGameLift { class AWSGameLiftClientManager; @@ -18,6 +21,7 @@ namespace AWSGameLift //! Gem client system component. Responsible for creating the gamelift client manager. class AWSGameLiftClientSystemComponent : public AZ::Component + , public IAWSGameLiftInternalRequests { public: AZ_COMPONENT(AWSGameLiftClientSystemComponent, "{d481c15c-732a-4eea-9853-4965ed1bc2be}"); @@ -32,6 +36,10 @@ namespace AWSGameLift static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); + // IAWSGameLiftInternalRequests interface implementation + AZStd::shared_ptr GetGameLiftClient() const override; + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) override; + protected: //////////////////////////////////////////////////////////////////////// // AZ::Component interface implementation @@ -40,7 +48,8 @@ namespace AWSGameLift void Deactivate() override; //////////////////////////////////////////////////////////////////////// - void SetGameLiftClientManager(AZStd::unique_ptr gameliftClientManager); + void SetGameLiftClientManager(AZStd::unique_ptr gameliftManager); + void SetGameLiftClientTicketTracker(AZStd::unique_ptr gameliftTicketTracker); private: static void ReflectGameLiftMatchmaking(AZ::ReflectContext* context); @@ -49,7 +58,9 @@ namespace AWSGameLift static void ReflectCreateSessionRequest(AZ::ReflectContext* context); static void ReflectSearchSessionsResponse(AZ::ReflectContext* context); - AZStd::unique_ptr m_gameliftClientManager; + AZStd::shared_ptr m_gameliftClient; + AZStd::unique_ptr m_gameliftManager; + AZStd::unique_ptr m_gameliftTicketTracker; }; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h new file mode 100644 index 0000000000..dbac9a798a --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftInternalRequests.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace Aws +{ + namespace GameLift + { + class GameLiftClient; + } +} // namespace Aws + +namespace AWSGameLift +{ + //! IAWSGameLiftRequests + //! GameLift Gem internal interface which is used to fetch gem global GameLift client + class IAWSGameLiftInternalRequests + { + public: + AZ_RTTI(IAWSGameLiftInternalRequests, "{DC0CC1C4-21EE-4A41-B428-D12D697F88A2}"); + + IAWSGameLiftInternalRequests() = default; + virtual ~IAWSGameLiftInternalRequests() = default; + + //! GetGameLiftClient + //! Get GameLift client to interact with Amazon GameLift service + //! @return Shared pointer to the GameLift client + virtual AZStd::shared_ptr GetGameLiftClient() const = 0; + + //! SetGameLiftClient + //! Set GameLift client to provided GameLift client + //! @param gameliftClient Input new GameLift client + virtual void SetGameLiftClient(AZStd::shared_ptr gameliftClient) = 0; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h new file mode 100644 index 0000000000..81d04314af --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/Request/IAWSGameLiftMatchmakingInternalRequests.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +namespace AWSGameLift +{ + //! IAWSGameLiftMatchmakingInternalRequests + //! GameLift Gem matchmaking internal interfaces which is used to communicate + //! with client side ticket tracker to sync matchmaking ticket data and join + //! player to the match + class IAWSGameLiftMatchmakingInternalRequests + { + public: + AZ_RTTI(IAWSGameLiftMatchmakingInternalRequests, "{C2DA440E-74E0-411E-813D-5880B50B0C9E}"); + + IAWSGameLiftMatchmakingInternalRequests() = default; + virtual ~IAWSGameLiftMatchmakingInternalRequests() = default; + + //! StartPolling + //! Request to start process for polling matchmaking ticket based on given ticket id and player id + //! @param ticketId The requested matchmaking ticket id + //! @param playerId The requested matchmaking player id + virtual void StartPolling(const AZStd::string& ticketId, const AZStd::string& playerId) = 0; + + //! StopPolling + //! Request to stop process for polling matchmaking ticket + virtual void StopPolling() = 0; + }; +} // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp new file mode 100644 index 0000000000..6e688b28e3 --- /dev/null +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp @@ -0,0 +1,353 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include + +#include + +using namespace AWSGameLift; + +static constexpr const uint64_t TEST_RACKER_POLLING_PERIOD_MS = 100; +static constexpr const uint64_t TEST_WAIT_BUFFER_TIME_MS = 10; +static constexpr const uint64_t TEST_WAIT_MAXIMUM_TIME_MS = 10000; + +class TestAWSGameLiftClientLocalTicketTracker + : public AWSGameLiftClientLocalTicketTracker +{ +public: + TestAWSGameLiftClientLocalTicketTracker() = default; + virtual ~TestAWSGameLiftClientLocalTicketTracker() = default; + + void SetUp() + { + ActivateTracker(); + m_pollingPeriodInMS = TEST_RACKER_POLLING_PERIOD_MS; + } + + void TearDown() + { + DeactivateTracker(); + } + + bool IsTrackerIdle() + { + return m_status == TicketTrackerStatus::Idle; + } +}; + +class AWSGameLiftClientLocalTicketTrackerTest + : public AWSGameLiftClientFixture + , public IAWSGameLiftInternalRequests +{ +protected: + void SetUp() override + { + AWSGameLiftClientFixture::SetUp(); + + AZ::Interface::Register(this); + + m_gameliftClientMockPtr = AZStd::make_shared(); + m_gameliftClientTicketTracker = AZStd::make_unique(); + m_gameliftClientTicketTracker->SetUp(); + } + + void TearDown() override + { + m_gameliftClientTicketTracker->TearDown(); + m_gameliftClientTicketTracker.reset(); + m_gameliftClientMockPtr.reset(); + + AZ::Interface::Unregister(this); + + AWSGameLiftClientFixture::TearDown(); + } + + AZStd::shared_ptr GetGameLiftClient() const + { + return m_gameliftClientMockPtr; + } + + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + AZ_UNUSED(gameliftClient); + m_gameliftClientMockPtr.reset(); + } + + void WaitForProcessFinish(uint64_t expectedNum) + { + int processingTime = 0; + while (processingTime < TEST_WAIT_MAXIMUM_TIME_MS) + { + if (::UnitTest::TestRunner::Instance().m_numAssertsFailed == expectedNum) + { + AZ_TEST_STOP_TRACE_SUPPRESSION(expectedNum); + return; + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(TEST_WAIT_BUFFER_TIME_MS)); + processingTime += TEST_WAIT_BUFFER_TIME_MS; + } + } + + void WaitForProcessFinish() + { + int processingTime = 0; + while (processingTime < TEST_WAIT_MAXIMUM_TIME_MS) + { + if (m_gameliftClientTicketTracker->IsTrackerIdle()) + { + return; + } + AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(TEST_WAIT_BUFFER_TIME_MS)); + processingTime += TEST_WAIT_BUFFER_TIME_MS; + } + } + +public: + AZStd::unique_ptr m_gameliftClientTicketTracker; + AZStd::shared_ptr m_gameliftClientMockPtr; +}; + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithoutClientSetup_GetExpectedErrors) +{ + AZ::Interface::Get()->SetGameLiftClient(nullptr); + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_MultipleCallsWithoutClientSetup_GetExpectedErrors) +{ + AZ::Interface::Get()->SetGameLiftClient(nullptr); + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButWithFailedOutcome_GetExpectedErrors) +{ + Aws::Client::AWSError error; + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(error); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithMoreThanOneTicket_GetExpectedErrors) +{ + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(Aws::GameLift::Model::MatchmakingTicket()); + result.AddTicketList(Aws::GameLift::Model::MatchmakingTicket()); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_FALSE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallWithCompleteStatus_ProcessStopsAndGetExpectedResult) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(true)); + + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButNoPlayerSession_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButFailedToJoinMatch_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(false)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketTimeOut_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::TIMED_OUT); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketFailed_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::FAILED); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallButTicketCancelled_ProcessStopsAndGetExpectedError) +{ + Aws::GameLift::Model::MatchmakingTicket ticket; + ticket.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::CANCELLED); + + Aws::GameLift::Model::DescribeMatchmakingResult result; + result.AddTicketList(ticket); + + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome(result); + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(outcome)); + + AZ_TEST_START_TRACE_SUPPRESSION; + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(1); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} + +TEST_F(AWSGameLiftClientLocalTicketTrackerTest, StartPolling_CallAndTicketCompleteAtLast_ProcessContinuesAndStop) +{ + Aws::GameLift::Model::MatchmakingTicket ticket1; + ticket1.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::QUEUED); + + Aws::GameLift::Model::DescribeMatchmakingResult result1; + result1.AddTicketList(ticket1); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome1(result1); + + Aws::GameLift::Model::GameSessionConnectionInfo connectionInfo; + connectionInfo.SetIpAddress("DummyIpAddress"); + connectionInfo.SetPort(123); + connectionInfo.AddMatchedPlayerSessions( + Aws::GameLift::Model::MatchedPlayerSession() + .WithPlayerId("player1") + .WithPlayerSessionId("playersession1")); + + Aws::GameLift::Model::MatchmakingTicket ticket2; + ticket2.SetStatus(Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED); + ticket2.SetGameSessionConnectionInfo(connectionInfo); + + Aws::GameLift::Model::DescribeMatchmakingResult result2; + result2.AddTicketList(ticket2); + Aws::GameLift::Model::DescribeMatchmakingOutcome outcome2(result2); + + EXPECT_CALL(*m_gameliftClientMockPtr, DescribeMatchmaking(::testing::_)) + .WillOnce(::testing::Return(outcome1)) + .WillOnce(::testing::Return(outcome2)); + + SessionHandlingClientRequestsMock handlerMock; + EXPECT_CALL(handlerMock, RequestPlayerJoinSession(::testing::_)) + .Times(1) + .WillOnce(::testing::Return(true)); + + m_gameliftClientTicketTracker->StartPolling("ticket1", "player1"); + WaitForProcessFinish(); + ASSERT_TRUE(m_gameliftClientTicketTracker->IsTrackerIdle()); +} diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp index caa5113a25..e7612618ee 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientManagerTest.cpp @@ -23,8 +23,7 @@ #include #include #include - -#include +#include using namespace AWSGameLift; @@ -117,38 +116,19 @@ public: MOCK_METHOD0(GetDefaultConfig, AWSCore::AwsApiJobConfig*()); }; -class TestAWSGameLiftClientManager - : public AWSGameLiftClientManager -{ -public: - TestAWSGameLiftClientManager() - { - m_gameliftClientMockPtr = nullptr; - } - ~TestAWSGameLiftClientManager() - { - m_gameliftClientMockPtr = nullptr; - } - - void SetUpMockClient() - { - m_gameliftClientMockPtr = AZStd::make_shared(); - SetGameLiftClient(m_gameliftClientMockPtr); - } - - AZStd::shared_ptr m_gameliftClientMockPtr; -}; - class AWSGameLiftClientManagerTest : public AWSGameLiftClientFixture + , public IAWSGameLiftInternalRequests { protected: void SetUp() override { AWSGameLiftClientFixture::SetUp(); - m_gameliftClientManager = AZStd::make_unique(); - m_gameliftClientManager->SetUpMockClient(); + AZ::Interface::Register(this); + + m_gameliftClientMockPtr = AZStd::make_shared(); + m_gameliftClientManager = AZStd::make_unique(); m_gameliftClientManager->ActivateManager(); } @@ -156,10 +136,24 @@ protected: { m_gameliftClientManager->DeactivateManager(); m_gameliftClientManager.reset(); + m_gameliftClientMockPtr.reset(); + + AZ::Interface::Unregister(this); AWSGameLiftClientFixture::TearDown(); } + AZStd::shared_ptr GetGameLiftClient() const + { + return m_gameliftClientMockPtr; + } + + void SetGameLiftClient(AZStd::shared_ptr gameliftClient) + { + AZ_UNUSED(gameliftClient); + m_gameliftClientMockPtr.reset(); + } + AWSGameLiftSearchSessionsRequest GetValidSearchSessionsRequest() { AWSGameLiftSearchSessionsRequest request; @@ -230,7 +224,8 @@ protected: } public: - AZStd::unique_ptr m_gameliftClientManager; + AZStd::unique_ptr m_gameliftClientManager; + AZStd::shared_ptr m_gameliftClientMockPtr; }; TEST_F(AWSGameLiftClientManagerTest, ConfigureGameLiftClient_CallWithoutRegion_GetFalseAsResult) @@ -319,7 +314,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSession_CallWithValidRequest_GetSucce Aws::GameLift::Model::CreateGameSessionResult result; result.SetGameSession(Aws::GameLift::Model::GameSession()); Aws::GameLift::Model::CreateGameSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); m_gameliftClientManager->CreateSession(request); @@ -331,7 +326,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSession_CallWithValidRequest_GetError request.m_aliasId = "dummyAlias"; Aws::Client::AWSError error; Aws::GameLift::Model::CreateGameSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -357,7 +352,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionAsync_CallWithValidRequest_Get Aws::GameLift::Model::CreateGameSessionResult result; result.SetGameSession(Aws::GameLift::Model::GameSession()); Aws::GameLift::Model::CreateGameSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -373,7 +368,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionAsync_CallWithValidRequest_Get request.m_aliasId = "dummyAlias"; Aws::Client::AWSError error; Aws::GameLift::Model::CreateGameSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreateGameSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreateGameSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -403,7 +398,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueue_CallWithValidRequest_G Aws::GameLift::Model::StartGameSessionPlacementResult result; result.SetGameSessionPlacement(Aws::GameLift::Model::GameSessionPlacement()); Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); m_gameliftClientManager->CreateSession(request); @@ -416,7 +411,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueue_CallWithValidRequest_G request.m_placementId = "dummyPlacementId"; Aws::Client::AWSError error; Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -434,7 +429,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueueAsync_CallWithValidRequ Aws::GameLift::Model::StartGameSessionPlacementResult result; result.SetGameSessionPlacement(Aws::GameLift::Model::GameSessionPlacement()); Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -451,7 +446,7 @@ TEST_F(AWSGameLiftClientManagerTest, CreateSessionOnQueueAsync_CallWithValidRequ request.m_placementId = "dummyPlacementId"; Aws::Client::AWSError error; Aws::GameLift::Model::StartGameSessionPlacementOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), StartGameSessionPlacement(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, StartGameSessionPlacement(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -489,7 +484,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestButNoReques Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -505,7 +500,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequest_GetErrorOu request.m_playerId = "dummyPlayerId"; Aws::Client::AWSError error; Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); AZ_TEST_START_TRACE_SUPPRESSION; @@ -524,7 +519,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestAndRequestH Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); auto response = m_gameliftClientManager->JoinSession(request); @@ -541,7 +536,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSession_CallWithValidRequestAndRequestH Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); auto response = m_gameliftClientManager->JoinSession(request); @@ -567,7 +562,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestButNoR Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -586,7 +581,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequest_GetEr request.m_playerId = "dummyPlayerId"; Aws::Client::AWSError error; Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -608,7 +603,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestAndReq Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -628,7 +623,7 @@ TEST_F(AWSGameLiftClientManagerTest, JoinSessionAsync_CallWithValidRequestAndReq Aws::GameLift::Model::CreatePlayerSessionResult result; result.SetPlayerSession(Aws::GameLift::Model::PlayerSession()); Aws::GameLift::Model::CreatePlayerSessionOutcome outcome(result); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), CreatePlayerSession(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, CreatePlayerSession(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); SessionAsyncRequestNotificationsHandlerMock sessionHandlerMock; @@ -642,7 +637,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessions_CallWithValidRequestAndError Aws::Client::AWSError error; Aws::GameLift::Model::SearchGameSessionsOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -657,7 +652,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessions_CallWithValidRequestAndSucce AWSGameLiftSearchSessionsRequest request = GetValidSearchSessionsRequest(); Aws::GameLift::Model::SearchGameSessionsOutcome outcome = GetValidSearchGameSessionsOutcome(); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -703,7 +698,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessionsAsync_CallWithValidRequestAnd Aws::Client::AWSError error; Aws::GameLift::Model::SearchGameSessionsOutcome outcome(error); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); @@ -724,7 +719,7 @@ TEST_F(AWSGameLiftClientManagerTest, SearchSessionsAsync_CallWithValidRequestAnd EXPECT_CALL(coreHandlerMock, GetDefaultJobContext()).Times(1).WillOnce(::testing::Return(m_jobContext.get())); Aws::GameLift::Model::SearchGameSessionsOutcome outcome = GetValidSearchGameSessionsOutcome(); - EXPECT_CALL(*(m_gameliftClientManager->m_gameliftClientMockPtr), SearchGameSessions(::testing::_)) + EXPECT_CALL(*m_gameliftClientMockPtr, SearchGameSessions(::testing::_)) .Times(1) .WillOnce(::testing::Return(outcome)); diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h index a161168159..5c09f43e08 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientMocks.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,6 +41,7 @@ public: MOCK_CONST_METHOD1(CreateGameSession, Model::CreateGameSessionOutcome(const Model::CreateGameSessionRequest&)); MOCK_CONST_METHOD1(CreatePlayerSession, Model::CreatePlayerSessionOutcome(const Model::CreatePlayerSessionRequest&)); + MOCK_CONST_METHOD1(DescribeMatchmaking, Model::DescribeMatchmakingOutcome(const Model::DescribeMatchmakingRequest&)); MOCK_CONST_METHOD1(SearchGameSessions, Model::SearchGameSessionsOutcome(const Model::SearchGameSessionsRequest&)); MOCK_CONST_METHOD1(StartGameSessionPlacement, Model::StartGameSessionPlacementOutcome(const Model::StartGameSessionPlacementRequest&)); }; diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp index df6fb0d666..096a182819 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientSystemComponentTest.cpp @@ -13,10 +13,9 @@ #include #include +#include #include -#include - using namespace AWSGameLift; class AWSGameLiftClientManagerMock @@ -30,6 +29,17 @@ public: MOCK_METHOD0(DeactivateManager, void()); }; +class AWSGameLiftClientLocalTicketTrackerMock + : public AWSGameLiftClientLocalTicketTracker +{ +public: + AWSGameLiftClientLocalTicketTrackerMock() = default; + ~AWSGameLiftClientLocalTicketTrackerMock() = default; + + MOCK_METHOD0(ActivateTracker, void()); + MOCK_METHOD0(DeactivateTracker, void()); +}; + class TestAWSGameLiftClientSystemComponent : public AWSGameLiftClientSystemComponent { @@ -37,20 +47,29 @@ public: TestAWSGameLiftClientSystemComponent() { m_gameliftClientManagerMockPtr = nullptr; + m_gameliftClientTicketTrackerMockPtr = nullptr; } ~TestAWSGameLiftClientSystemComponent() { m_gameliftClientManagerMockPtr = nullptr; + m_gameliftClientTicketTrackerMockPtr = nullptr; } void SetUpMockManager() { - AZStd::unique_ptr gameliftClientManagerMock = AZStd::make_unique(); + AZStd::unique_ptr gameliftClientManagerMock = + AZStd::make_unique(); m_gameliftClientManagerMockPtr = gameliftClientManagerMock.get(); SetGameLiftClientManager(AZStd::move(gameliftClientManagerMock)); + + AZStd::unique_ptr gameliftClientTicketTrackerMock = + AZStd::make_unique(); + m_gameliftClientTicketTrackerMockPtr = gameliftClientTicketTrackerMock.get(); + SetGameLiftClientTicketTracker(AZStd::move(gameliftClientTicketTrackerMock)); } AWSGameLiftClientManagerMock* m_gameliftClientManagerMockPtr; + AWSGameLiftClientLocalTicketTrackerMock* m_gameliftClientTicketTrackerMockPtr; }; class AWSCoreSystemComponentMock @@ -145,8 +164,10 @@ TEST_F(AWSGameLiftClientSystemComponentTest, ActivateDeactivate_Call_GameLiftCli { m_entity->Init(); EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientManagerMockPtr), ActivateManager()).Times(1); + EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientTicketTrackerMockPtr), ActivateTracker()).Times(1); m_entity->Activate(); EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientManagerMockPtr), DeactivateManager()).Times(1); + EXPECT_CALL(*(m_gameliftClientSystemComponent->m_gameliftClientTicketTrackerMockPtr), DeactivateTracker()).Times(1); m_entity->Deactivate(); } diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake index 0c7ca68eea..d3b9d8d1b9 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_files.cmake @@ -7,6 +7,7 @@ # set(FILES + ../AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h Include/Request/AWSGameLiftAcceptMatchRequest.h Include/Request/AWSGameLiftCreateSessionOnQueueRequest.h Include/Request/AWSGameLiftCreateSessionRequest.h @@ -27,6 +28,8 @@ set(FILES Source/Activity/AWSGameLiftLeaveSessionActivity.h Source/Activity/AWSGameLiftSearchSessionsActivity.cpp Source/Activity/AWSGameLiftSearchSessionsActivity.h + Source/AWSGameLiftClientLocalTicketTracker.cpp + Source/AWSGameLiftClientLocalTicketTracker.h Source/AWSGameLiftClientManager.cpp Source/AWSGameLiftClientManager.h Source/AWSGameLiftClientSystemComponent.cpp @@ -38,4 +41,6 @@ set(FILES Source/Request/AWSGameLiftSearchSessionsRequest.cpp Source/Request/AWSGameLiftStartMatchmakingRequest.cpp Source/Request/AWSGameLiftStopMatchmakingRequest.cpp + Source/Request/IAWSGameLiftInternalRequests.h + Source/Request/IAWSGameLiftMatchmakingInternalRequests.h ) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake index 6614eabb46..130ed28e4e 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/awsgamelift_client_tests_files.cmake @@ -12,6 +12,7 @@ set(FILES Tests/Activity/AWSGameLiftJoinSessionActivityTest.cpp Tests/Activity/AWSGameLiftSearchSessionsActivityTest.cpp Tests/AWSGameLiftClientFixture.h + Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp Tests/AWSGameLiftClientManagerTest.cpp Tests/AWSGameLiftClientMocks.h Tests/AWSGameLiftClientSystemComponentTest.cpp diff --git a/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h b/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h index 588bd51380..e29df324d3 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftCommon/Source/AWSGameLiftSessionConstants.h @@ -17,4 +17,5 @@ namespace AWSGameLift static const char* AWSGameLiftSessionStatusReasons[2] = { "NotSet", "Interrupted" }; static constexpr const char AWSGameLiftErrorMessageTemplate[] = "Exception: %s, Message: %s"; + static constexpr const char AWSGameLiftClientMissingErrorMessage[] = "GameLift client is not configured yet."; } // namespace AWSGameLift From ba107c06b618dfdf933ccefd6f7de2ce7bf0d3d7 Mon Sep 17 00:00:00 2001 From: Vincent Liu <5900509+onecent1101@users.noreply.github.com> Date: Wed, 6 Oct 2021 14:02:28 -0700 Subject: [PATCH 143/226] [LYN-6779] AWSNativeSDK update and AWSCore platform cmake update (#4231) Signed-off-by: onecent1101 --- Gems/AWSCore/Code/CMakeLists.txt | 16 ++--- .../Public/Framework/AWSApiJobConfig.h | 7 ++ .../Android/AWSCoreEditor_Traits_Android.h | 0 .../Android/AWSCoreEditor_Traits_Platform.h | 0 .../Platform/Android/AWSCore_Traits_Android.h | 10 +++ .../Android/AWSCore_Traits_Platform.h | 10 +++ .../Platform/Android/GetCertsPath_Android.cpp | 66 +++++++++---------- .../platform_android_editor_files.cmake} | 0 ...platform_android_editor_tests_files.cmake} | 0 .../Android/platform_android_files.cmake | 13 ++++ .../Platform/Common/GetCertsPath_Null.cpp | 56 ++++++++-------- .../Linux/AWSCoreEditor_Traits_Linux.h | 0 .../Linux/AWSCoreEditor_Traits_Platform.h | 0 .../Platform/Linux/AWSCore_Traits_Linux.h | 10 +++ .../Platform/Linux/AWSCore_Traits_Platform.h | 10 +++ .../Linux/platform_linux_editor_files.cmake} | 0 .../platform_linux_editor_tests_files.cmake} | 0 .../Linux/platform_linux_files.cmake} | 2 + .../Platform/Mac/AWSCoreEditor_Traits_Mac.h | 0 .../Mac/AWSCoreEditor_Traits_Platform.h | 0 .../Code/Platform/Mac/AWSCore_Traits_Mac.h | 10 +++ .../Platform/Mac/AWSCore_Traits_Platform.h | 10 +++ .../Mac/platform_mac_editor_files.cmake} | 0 .../platform_mac_editor_tests_files.cmake} | 3 +- .../Platform/Mac/platform_mac_files.cmake | 2 + .../Windows/AWSCoreEditor_Traits_Platform.h | 0 .../Windows/AWSCoreEditor_Traits_Windows.h | 0 .../Windows/AWSCore_Traits_Platform.h | 10 +++ .../Platform/Windows/AWSCore_Traits_Windows.h | 10 +++ .../platform_windows_editor_files.cmake} | 0 .../platform_windows_editor_tests_files.cmake | 19 ++++++ .../Windows/platform_windows_files.cmake | 13 ++++ .../iOS/AWSCoreEditor_Traits_Platform.h | 0 .../Platform/iOS/AWSCoreEditor_Traits_iOS.h | 0 .../Platform/iOS/AWSCore_Traits_Platform.h | 10 +++ .../Code/Platform/iOS/AWSCore_Traits_iOS.h | 10 +++ .../iOS/platform_ios_editor_files.cmake} | 0 .../platform_ios_editor_tests_files.cmake} | 3 +- .../Platform/iOS/platform_ios_files.cmake | 2 + .../Source/Editor/UI/AWSCoreEditorMenu.cpp | 2 +- .../Code/Source/Framework/AWSApiJobConfig.cpp | 10 --- .../awscore_editor_tests_windows_files.cmake | 19 ------ .../Android/BuiltInPackages_android.cmake | 2 +- .../Platform/iOS/BuiltInPackages_ios.cmake | 2 +- 44 files changed, 232 insertions(+), 105 deletions(-) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Android/AWSCoreEditor_Traits_Android.h (100%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Android/AWSCoreEditor_Traits_Platform.h (100%) create mode 100644 Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h create mode 100644 Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h rename Gems/AWSCore/Code/{Source/Framework => }/Platform/Android/GetCertsPath_Android.cpp (97%) rename Gems/AWSCore/Code/{Include/Private/Editor/Platform/Android/platform_android_files.cmake => Platform/Android/platform_android_editor_files.cmake} (100%) rename Gems/AWSCore/Code/{Tests/Editor/Platform/Linux/awscore_editor_tests_linux_files.cmake => Platform/Android/platform_android_editor_tests_files.cmake} (100%) create mode 100644 Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake rename Gems/AWSCore/Code/{Source/Framework => }/Platform/Common/GetCertsPath_Null.cpp (97%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Linux/AWSCoreEditor_Traits_Linux.h (100%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Linux/AWSCoreEditor_Traits_Platform.h (100%) create mode 100644 Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h create mode 100644 Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h rename Gems/AWSCore/Code/{Include/Private/Editor/Platform/Linux/platform_linux_files.cmake => Platform/Linux/platform_linux_editor_files.cmake} (100%) rename Gems/AWSCore/Code/{Tests/Editor/Platform/Mac/awscore_editor_tests_mac_files.cmake => Platform/Linux/platform_linux_editor_tests_files.cmake} (100%) rename Gems/AWSCore/Code/{Source/Framework/Platform/Windows/platform_windows_files.cmake => Platform/Linux/platform_linux_files.cmake} (82%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Mac/AWSCoreEditor_Traits_Mac.h (100%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Mac/AWSCoreEditor_Traits_Platform.h (100%) create mode 100644 Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h create mode 100644 Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h rename Gems/AWSCore/Code/{Include/Private/Editor/Platform/Mac/platform_mac_files.cmake => Platform/Mac/platform_mac_editor_files.cmake} (100%) rename Gems/AWSCore/Code/{Source/Framework/Platform/Android/platform_android_files.cmake => Platform/Mac/platform_mac_editor_tests_files.cmake} (84%) rename Gems/AWSCore/Code/{Source/Framework => }/Platform/Mac/platform_mac_files.cmake (82%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Windows/AWSCoreEditor_Traits_Platform.h (100%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/Windows/AWSCoreEditor_Traits_Windows.h (100%) create mode 100644 Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h create mode 100644 Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h rename Gems/AWSCore/Code/{Include/Private/Editor/Platform/Windows/platform_windows_files.cmake => Platform/Windows/platform_windows_editor_files.cmake} (100%) create mode 100644 Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake create mode 100644 Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/iOS/AWSCoreEditor_Traits_Platform.h (100%) rename Gems/AWSCore/Code/{Include/Private/Editor => }/Platform/iOS/AWSCoreEditor_Traits_iOS.h (100%) create mode 100644 Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h create mode 100644 Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h rename Gems/AWSCore/Code/{Include/Private/Editor/Platform/iOS/platform_ios_files.cmake => Platform/iOS/platform_ios_editor_files.cmake} (100%) rename Gems/AWSCore/Code/{Source/Framework/Platform/Linux/platform_linux_files.cmake => Platform/iOS/platform_ios_editor_tests_files.cmake} (82%) rename Gems/AWSCore/Code/{Source/Framework => }/Platform/iOS/platform_ios_files.cmake (82%) delete mode 100644 Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake diff --git a/Gems/AWSCore/Code/CMakeLists.txt b/Gems/AWSCore/Code/CMakeLists.txt index 808436b7fd..7559f4720b 100644 --- a/Gems/AWSCore/Code/CMakeLists.txt +++ b/Gems/AWSCore/Code/CMakeLists.txt @@ -6,18 +6,18 @@ # # -ly_get_list_relative_pal_filename(pal_editor_include_dir ${CMAKE_CURRENT_LIST_DIR}/Include/Private/Editor/Platform/${PAL_PLATFORM_NAME}) -ly_get_list_relative_pal_filename(pal_cafile_include_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Framework/Platform/${PAL_PLATFORM_NAME}) +ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) ly_add_target( NAME AWSCore.Static STATIC NAMESPACE Gem FILES_CMAKE awscore_files.cmake - ${pal_cafile_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake INCLUDE_DIRECTORIES PUBLIC Include/Public + ${pal_dir} PRIVATE Include/Private BUILD_DEPENDENCIES @@ -65,11 +65,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS) NAMESPACE Gem FILES_CMAKE awscore_editor_files.cmake - ${pal_editor_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_files.cmake INCLUDE_DIRECTORIES PRIVATE Include/Private - ${pal_editor_include_dir} + ${pal_dir} PUBLIC Include/Public BUILD_DEPENDENCIES @@ -164,12 +164,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NAMESPACE Gem FILES_CMAKE awscore_editor_tests_files.cmake - ${pal_editor_include_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - Tests/Editor/Platform/${PAL_PLATFORM_NAME}/awscore_editor_tests_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_files.cmake + ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_editor_tests_files.cmake INCLUDE_DIRECTORIES PRIVATE Include/Private - ${pal_editor_include_dir} + ${pal_dir} Include/Public Tests COMPILE_DEFINITIONS diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h index 9d8b0a5e93..0f25c648d0 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h @@ -13,12 +13,15 @@ #include #include +#include + // The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. // AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in C++17. // Use std::allocator_traits instead of accessing these members directly. // You can define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received this warning. AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include #include #include #include @@ -136,7 +139,11 @@ namespace AWSCore Override> writeRateLimiter; Override> readRateLimiter; Override httpLibOverride; +#if AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE + Override followRedirects; +#else Override followRedirects; +#endif Override caFile; /// Applys settings changes made after first use. diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Android.h b/Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Android.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Android.h rename to Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Android.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Android/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h new file mode 100644 index 0000000000..2cacfb0d34 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Android.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 1 diff --git a/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..6beeb3442d --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp b/Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp similarity index 97% rename from Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp rename to Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp index 9dbacce2dd..557e29c3b6 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Android/GetCertsPath_Android.cpp +++ b/Gems/AWSCore/Code/Platform/Android/GetCertsPath_Android.cpp @@ -1,33 +1,33 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in -// C++17. Use std::allocator_traits instead of accessing these members directly. You can define -// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received -// this warning. -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING -#include -#include - -namespace AWSCore -{ - namespace Platform - { - Aws::String GetCaCertBundlePath() - { - AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); - publicStoragePath.append("/certificates/aws/cacert.pem"); - - return publicStoragePath.c_str(); - } - } // namespace Platform -} +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. +// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in +// C++17. Use std::allocator_traits instead of accessing these members directly. You can define +// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received +// this warning. +AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING +#include +#include + +namespace AWSCore +{ + namespace Platform + { + Aws::String GetCaCertBundlePath() + { + AZStd::string publicStoragePath = AZ::Android::Utils::GetAppPublicStoragePath(); + publicStoragePath.append("/certificates/aws/cacert.pem"); + + return publicStoragePath.c_str(); + } + } // namespace Platform +} diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Android/platform_android_files.cmake rename to Gems/AWSCore/Code/Platform/Android/platform_android_editor_files.cmake diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Linux/awscore_editor_tests_linux_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_editor_tests_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Tests/Editor/Platform/Linux/awscore_editor_tests_linux_files.cmake rename to Gems/AWSCore/Code/Platform/Android/platform_android_editor_tests_files.cmake diff --git a/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake new file mode 100644 index 0000000000..e5b02beeac --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Android/platform_android_files.cmake @@ -0,0 +1,13 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Android.h + GetCertsPath_Android.cpp +) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp b/Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp similarity index 97% rename from Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp rename to Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp index 5731327fb2..45bb45000f 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Common/GetCertsPath_Null.cpp +++ b/Gems/AWSCore/Code/Platform/Common/GetCertsPath_Null.cpp @@ -1,28 +1,28 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in -// C++17. Use std::allocator_traits instead of accessing these members directly. You can define -// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received -// this warning. -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - -namespace AWSCore -{ - namespace Platform - { - Aws::String GetCaCertBundlePath() - { - return ""; // no-op - } - } // namespace Platform -} // namespace GridMate +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. +// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in +// C++17. Use std::allocator_traits instead of accessing these members directly. You can define +// _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received +// this warning. +AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") +#include +AZ_POP_DISABLE_WARNING + +namespace AWSCore +{ + namespace Platform + { + Aws::String GetCaCertBundlePath() + { + return ""; // no-op + } + } // namespace Platform +} // namespace GridMate diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Linux.h b/Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Linux.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Linux.h rename to Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Linux.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Linux/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Linux.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..d6ef9ceb4d --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Linux/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/platform_linux_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Linux/platform_linux_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_files.cmake diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Mac/awscore_editor_tests_mac_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_tests_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Tests/Editor/Platform/Mac/awscore_editor_tests_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_editor_tests_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake rename to Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake index 0abbd1adb8..1661434740 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Windows/platform_windows_files.cmake +++ b/Gems/AWSCore/Code/Platform/Linux/platform_linux_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Linux.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Mac.h b/Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Mac.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Mac.h rename to Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Mac.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Mac/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Mac.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..2d33c834f9 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Mac/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/platform_mac_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Mac/platform_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake similarity index 84% rename from Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake index 278e4a1c9d..07f96644ab 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Android/platform_android_files.cmake +++ b/Gems/AWSCore/Code/Platform/Mac/platform_mac_editor_tests_files.cmake @@ -6,6 +6,5 @@ # # -set(FILES - GetCertsPath_Android.cpp +set(FILES ) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake b/Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake rename to Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake index 0abbd1adb8..3e5e99cc05 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Mac/platform_mac_files.cmake +++ b/Gems/AWSCore/Code/Platform/Mac/platform_mac_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Mac.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Windows.h b/Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Windows.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/AWSCoreEditor_Traits_Windows.h rename to Gems/AWSCore/Code/Platform/Windows/AWSCoreEditor_Traits_Windows.h diff --git a/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..f6ccf10b88 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/AWSCore_Traits_Windows.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/Windows/platform_windows_files.cmake rename to Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_files.cmake diff --git a/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake new file mode 100644 index 0000000000..3b87d2f3bb --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/platform_windows_editor_tests_files.cmake @@ -0,0 +1,19 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + ../../Tests/Editor/AWSCoreEditorSystemComponentTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionMetricTest.cpp + ../../Tests/Editor/Attribution/AWSCoreAttributionSystemComponentTest.cpp + ../../Tests/Editor/Attribution/AWSAttributionServiceApiTest.cpp + ../../Tests/Editor/UI/AWSCoreEditorMenuTest.cpp + ../../Tests/Editor/UI/AWSCoreEditorUIFixture.h + ../../Tests/Editor/UI/AWSCoreResourceMappingToolActionTest.cpp + ../../Tests/Editor/AWSCoreEditorManagerTest.cpp +) diff --git a/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake b/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake new file mode 100644 index 0000000000..aa0119d042 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/Windows/platform_windows_files.cmake @@ -0,0 +1,13 @@ +# +# Copyright (c) Contributors to the Open 3D Engine Project. +# For complete copyright and license terms please see the LICENSE at the root of this distribution. +# +# SPDX-License-Identifier: Apache-2.0 OR MIT +# +# + +set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_Windows.h + ../Common/GetCertsPath_Null.cpp +) diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_Platform.h b/Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_Platform.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_Platform.h rename to Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_Platform.h diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_iOS.h b/Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_iOS.h similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/AWSCoreEditor_Traits_iOS.h rename to Gems/AWSCore/Code/Platform/iOS/AWSCoreEditor_Traits_iOS.h diff --git a/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h new file mode 100644 index 0000000000..7384900938 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h new file mode 100644 index 0000000000..d7b1f32461 --- /dev/null +++ b/Gems/AWSCore/Code/Platform/iOS/AWSCore_Traits_iOS.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AWSCORE_BACKWARD_INCOMPATIBLE_CHANGE 0 diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/platform_ios_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_files.cmake similarity index 100% rename from Gems/AWSCore/Code/Include/Private/Editor/Platform/iOS/platform_ios_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_files.cmake diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake index 0abbd1adb8..07f96644ab 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/Linux/platform_linux_files.cmake +++ b/Gems/AWSCore/Code/Platform/iOS/platform_ios_editor_tests_files.cmake @@ -6,6 +6,5 @@ # # -set(FILES - ../Common/GetCertsPath_Null.cpp +set(FILES ) diff --git a/Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake b/Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake similarity index 82% rename from Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake rename to Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake index 0abbd1adb8..c73796afe3 100644 --- a/Gems/AWSCore/Code/Source/Framework/Platform/iOS/platform_ios_files.cmake +++ b/Gems/AWSCore/Code/Platform/iOS/platform_ios_files.cmake @@ -7,5 +7,7 @@ # set(FILES + AWSCore_Traits_Platform.h + AWSCore_Traits_iOS.h ../Common/GetCertsPath_Null.cpp ) diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index 0b485609ad..d55510930e 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -78,7 +78,7 @@ namespace AWSCore void AWSCoreEditorMenu::InitializeResourceMappingToolAction() { -#ifdef AWSCORE_EDITOR_RESOURCE_MAPPING_TOOL_ENABLED +#if AWSCORE_EDITOR_RESOURCE_MAPPING_TOOL_ENABLED AWSCoreResourceMappingToolAction* resourceMappingTool = new AWSCoreResourceMappingToolAction(QObject::tr(AWSResourceMappingToolActionText), this); QObject::connect(resourceMappingTool, &QAction::triggered, this, diff --git a/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp b/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp index cc51213e09..0f15c862d5 100644 --- a/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp +++ b/Gems/AWSCore/Code/Source/Framework/AWSApiJobConfig.cpp @@ -12,16 +12,6 @@ #include #include -// The AWS Native SDK AWSAllocator triggers a warning due to accessing members of std::allocator directly. -// AWSAllocator.h(70): warning C4996: 'std::allocator::pointer': warning STL4010: Various members of std::allocator are deprecated in C++17. -// Use std::allocator_traits instead of accessing these members directly. -// You can define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have received this warning. - -AZ_PUSH_DISABLE_WARNING(4251 4996, "-Wunknown-warning-option") -#include -AZ_POP_DISABLE_WARNING - - namespace AWSCore { void AwsApiJobConfig::ApplySettings() diff --git a/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake b/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake deleted file mode 100644 index 0d47bbe795..0000000000 --- a/Gems/AWSCore/Code/Tests/Editor/Platform/Windows/awscore_editor_tests_windows_files.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - ../../AWSCoreEditorSystemComponentTest.cpp - ../../Attribution/AWSCoreAttributionManagerTest.cpp - ../../Attribution/AWSCoreAttributionMetricTest.cpp - ../../Attribution/AWSCoreAttributionSystemComponentTest.cpp - ../../Attribution/AWSAttributionServiceApiTest.cpp - ../../UI/AWSCoreEditorMenuTest.cpp - ../../UI/AWSCoreEditorUIFixture.h - ../../UI/AWSCoreResourceMappingToolActionTest.cpp - ../../AWSCoreEditorManagerTest.cpp -) diff --git a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake index 4d17e4b20b..c1a770d1ff 100644 --- a/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake +++ b/cmake/3rdParty/Platform/Android/BuiltInPackages_android.cmake @@ -18,7 +18,7 @@ ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux # platform-specific: ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev2-android TARGETS tiff PACKAGE_HASH 252b99e5886ec59fdccf38603c1399dd3fc02d878641aba35a7f8d2504065a06) ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-android TARGETS freetype PACKAGE_HASH df9e4d559ea0f03b0666b48c79813b1cd4d9624429148a249865de9f5c2c11cd) -ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev6-android TARGETS AWSNativeSDK PACKAGE_HASH 1624ba9aaf03d001ed0ffc57d2f945ff82590e75a7ea868de35043cf673e82fb) +ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.9.50-rev1-android TARGETS AWSNativeSDK PACKAGE_HASH 33771499f9080cbaab613459927e52911e68f94fa356397885e85005efbd1490) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-android TARGETS Lua PACKAGE_HASH 1f638e94a17a87fe9e588ea456d5893876094b4db191234380e4c4eb9e06c300) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-android TARGETS PhysX PACKAGE_HASH b8cb6aa46b2a21671f6cb1f6a78713a3ba88824d0447560ff5ce6c01014b9f43) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-android TARGETS mikkelsen PACKAGE_HASH 075e8e4940884971063b5a9963014e2e517246fa269c07c7dc55b8cf2cd99705) diff --git a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake index c9de80c809..abfba29e5a 100644 --- a/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake +++ b/cmake/3rdParty/Platform/iOS/BuiltInPackages_ios.cmake @@ -19,7 +19,7 @@ ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux # platform-specific: ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev2-ios TARGETS tiff PACKAGE_HASH d864beb0c955a55f28c2a993843afb2ecf6e01519ddfc857cedf34fc5db68d49) ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-ios TARGETS freetype PACKAGE_HASH 3ac3c35e056ae4baec2e40caa023d76a7a3320895ef172b6655e9261b0dc2e29) -ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev3-ios TARGETS AWSNativeSDK PACKAGE_HASH 1246219a213ccfff76b526011febf521586d44dbc1753e474f8fb5fd861654a4) +ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev4-ios TARGETS AWSNativeSDK PACKAGE_HASH d10e7496ca705577032821011beaf9f2507689f23817bfa0ed4d2a2758afcd02) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-ios TARGETS Lua PACKAGE_HASH c2d3c4e67046c293049292317a7d60fdb8f23effeea7136aefaef667163e5ffe) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-ios TARGETS PhysX PACKAGE_HASH b1bbc1fc068d2c6e1eb18eecd4e8b776adc516833e8da3dcb1970cef2a8f0cbd) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-ios TARGETS mikkelsen PACKAGE_HASH 976aaa3ccd8582346132a10af253822ccc5d5bcc9ea5ba44d27848f65ee88a8a) From 8fc8baa5792cbdabfdc8581db994c203556c52b9 Mon Sep 17 00:00:00 2001 From: Ken Pruiksma Date: Wed, 6 Oct 2021 17:03:03 -0500 Subject: [PATCH 144/226] Terrain FP now pulls data from Terrain system (#4492) * Feature processor now pulls data instead of the render component pushing it. This results in fewer and cheaper heightmap rebuilds. The feature processor can also handle dirty regions correctly now, although it doesn't seem like they are being passed in correctly yet. Signed-off-by: Ken Pruiksma * Fixing issues with initialization, dirty region tracking, and total rendered world size. Signed-off-by: Ken Pruiksma * Fixing bug with resizing the world Signed-off-by: Ken Pruiksma * Decreasing the scope of a mutex Signed-off-by: Ken Pruiksma * Fixes from PR review Signed-off-by: Ken Pruiksma * Fixed a math issue with float rounding. Fixed static AZ::Name usage. Signed-off-by: Ken Pruiksma * Removing unused variable Signed-off-by: Ken Pruiksma --- .../TerrainWorldRendererComponent.cpp | 71 -------- .../TerrainWorldRendererComponent.h | 5 - .../TerrainFeatureProcessor.cpp | 163 +++++++++++++----- .../TerrainRenderer/TerrainFeatureProcessor.h | 49 ++---- 4 files changed, 142 insertions(+), 146 deletions(-) diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp index f3eed41717..9cd9ce9fb2 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.cpp @@ -13,8 +13,6 @@ #include #include -#include - #include #include #include @@ -135,17 +133,13 @@ namespace Terrain { m_terrainFeatureProcessor = scene->EnableFeatureProcessor(); } - - AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusConnect(); m_terrainRendererActive = true; } void TerrainWorldRendererComponent::Deactivate() { // On component deactivation, unregister the feature processor and remove it from the default scene. - m_terrainRendererActive = false; - AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusDisconnect(); if (AZ::RPI::Scene* scene = GetScene(); scene) { @@ -178,69 +172,4 @@ namespace Terrain } return false; } - - void TerrainWorldRendererComponent::OnTerrainDataDestroyBegin() - { - // If the terrain is being destroyed, remove all existing terrain data from the feature processor. - - if (m_terrainFeatureProcessor) - { - m_terrainFeatureProcessor->RemoveTerrainData(); - } - } - - void TerrainWorldRendererComponent::OnTerrainDataChanged([[maybe_unused]] const AZ::Aabb& dirtyRegion, [[maybe_unused]] TerrainDataChangedMask dataChangedMask) - { - // Block other threads from accessing the surface data bus while we are in GetValue (which may call into the SurfaceData bus). - // We lock our surface data mutex *before* checking / setting "isRequestInProgress" so that we prevent race conditions - // that create false detection of cyclic dependencies when multiple requests occur on different threads simultaneously. - // (One case where this was previously able to occur was in rapid updating of the Preview widget on the - // GradientSurfaceDataComponent in the Editor when moving the threshold sliders back and forth rapidly) - auto& surfaceDataContext = SurfaceData::SurfaceDataSystemRequestBus::GetOrCreateContext(false); - typename SurfaceData::SurfaceDataSystemRequestBus::Context::DispatchLockGuard scopeLock(surfaceDataContext.m_contextMutex); - - AZ::Vector2 queryResolution = AZ::Vector2(1.0f); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - queryResolution, &AzFramework::Terrain::TerrainDataRequests::GetTerrainHeightQueryResolution); - - AZ::Aabb worldBounds = AZ::Aabb::CreateNull(); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - worldBounds, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - - - AZ::Transform transform = AZ::Transform::CreateTranslation(worldBounds.GetCenter()); - - uint32_t width = aznumeric_cast( - (float)worldBounds.GetXExtent() / queryResolution.GetX()); - uint32_t height = aznumeric_cast( - (float)worldBounds.GetYExtent() / queryResolution.GetY()); - AZStd::vector pixels; - pixels.resize_no_construct(width * height); - const uint32_t pixelDataSize = width * height * sizeof(float); - memset(pixels.data(), 0, pixelDataSize); - - for (uint32_t y = 0; y < height; y++) - { - for (uint32_t x = 0; x < width; x++) - { - bool terrainExists = true; - float terrainHeight = 0.0f; - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( - terrainHeight, &AzFramework::Terrain::TerrainDataRequests::GetHeightFromFloats, - (x * queryResolution.GetX()) + worldBounds.GetMin().GetX(), - (y * queryResolution.GetY()) + worldBounds.GetMin().GetY(), - AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, - &terrainExists); - - pixels[(y * width) + x] = - (terrainHeight - worldBounds.GetMin().GetZ()) / worldBounds.GetExtents().GetZ(); - } - } - - if (m_terrainFeatureProcessor) - { - m_terrainFeatureProcessor->UpdateTerrainData(transform, worldBounds, queryResolution.GetX(), width, height, pixels); - } - } - } diff --git a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h index cd2a4ea5aa..354b2fde34 100644 --- a/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h +++ b/Gems/Terrain/Code/Source/Components/TerrainWorldRendererComponent.h @@ -9,8 +9,6 @@ #pragma once #include -#include -#include namespace LmbrCentral { @@ -54,7 +52,6 @@ namespace Terrain class TerrainWorldRendererComponent : public AZ::Component - , public AzFramework::Terrain::TerrainDataNotificationBus::Handler { public: template @@ -77,8 +74,6 @@ namespace Terrain bool WriteOutConfig(AZ::ComponentConfig* outBaseConfig) const override; protected: - void OnTerrainDataDestroyBegin() override; - void OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) override; AZ::RPI::Scene* GetScene() const; diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp index 59984a1b92..560fe1eb60 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.cpp @@ -10,40 +10,41 @@ #include #include +#include #include #include +#include #include #include -#include +#include + #include #include #include #include -#include -#include #include #include -#include +#include #include #include + #include #include #include #include -#include -#include -#include -#include -#include + #include +#include + namespace Terrain { namespace { [[maybe_unused]] const char* TerrainFPName = "TerrainFeatureProcessor"; + const char* TerrainHeightmapChars = "TerrainHeightmap"; } namespace MaterialInputs @@ -71,7 +72,9 @@ namespace Terrain void TerrainFeatureProcessor::Activate() { m_areaData = {}; + m_dirtyRegion = AZ::Aabb::CreateNull(); Initialize(); + AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusConnect(); } void TerrainFeatureProcessor::Initialize() @@ -99,13 +102,16 @@ namespace Terrain AZ_Error(TerrainFPName, false, "Failed to create Terrain render buffers!"); return; } + OnTerrainDataChanged(AZ::Aabb::CreateNull(), TerrainDataChangedMask::HeightData); } void TerrainFeatureProcessor::Deactivate() { + AzFramework::Terrain::TerrainDataNotificationBus::Handler::BusDisconnect(); + AZ::RPI::MaterialReloadNotificationBus::Handler::BusDisconnect(); + m_patchModel = {}; m_areaData = {}; - AZ::RPI::MaterialReloadNotificationBus::Handler::BusDisconnect(); } void TerrainFeatureProcessor::Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) @@ -113,51 +119,126 @@ namespace Terrain ProcessSurfaces(packet); } - void TerrainFeatureProcessor::UpdateTerrainData( - const AZ::Transform& transform, - const AZ::Aabb& worldBounds, - float sampleSpacing, - uint32_t width, uint32_t height, const AZStd::vector& heightData) + void TerrainFeatureProcessor::OnTerrainDataDestroyBegin() { - if (!worldBounds.IsValid()) + m_areaData = {}; + } + + void TerrainFeatureProcessor::OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) + { + if (dataChangedMask != TerrainDataChangedMask::HeightData && dataChangedMask != TerrainDataChangedMask::Settings) { return; } + AZ::Aabb worldBounds = AZ::Aabb::CreateNull(); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + worldBounds, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); + + const AZ::Aabb& regionToUpdate = dirtyRegion.IsValid() ? dirtyRegion : worldBounds; + + m_dirtyRegion.AddAabb(regionToUpdate); + m_dirtyRegion.Clamp(worldBounds); + + AZ::Transform transform = AZ::Transform::CreateTranslation(worldBounds.GetCenter()); + + AZ::Vector2 queryResolution = AZ::Vector2(1.0f); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + queryResolution, &AzFramework::Terrain::TerrainDataRequests::GetTerrainHeightQueryResolution); + m_areaData.m_transform = transform; m_areaData.m_heightScale = worldBounds.GetZExtent(); m_areaData.m_terrainBounds = worldBounds; - m_areaData.m_heightmapImageHeight = height; - m_areaData.m_heightmapImageWidth = width; - m_areaData.m_sampleSpacing = sampleSpacing; + m_areaData.m_heightmapImageWidth = aznumeric_cast(worldBounds.GetXExtent() / queryResolution.GetX()); + m_areaData.m_heightmapImageHeight = aznumeric_cast(worldBounds.GetYExtent() / queryResolution.GetY()); + m_areaData.m_updateWidth = aznumeric_cast(m_dirtyRegion.GetXExtent() / queryResolution.GetX()); + m_areaData.m_updateHeight = aznumeric_cast(m_dirtyRegion.GetYExtent() / queryResolution.GetY()); + // Currently query resolution is multidimensional but the rendering system only supports this changing in one dimension. + m_areaData.m_sampleSpacing = queryResolution.GetX(); + m_areaData.m_propertiesDirty = true; + } + + void TerrainFeatureProcessor::UpdateTerrainData() + { + static const AZ::Name TerrainHeightmapName = AZ::Name(TerrainHeightmapChars); + + uint32_t width = m_areaData.m_updateWidth; + uint32_t height = m_areaData.m_updateHeight; + const AZ::Aabb& worldBounds = m_areaData.m_terrainBounds; + float queryResolution = m_areaData.m_sampleSpacing; + + AZ::RHI::Size worldSize = AZ::RHI::Size(m_areaData.m_heightmapImageWidth, m_areaData.m_heightmapImageHeight, 1); + + if (!m_areaData.m_heightmapImage || m_areaData.m_heightmapImage->GetDescriptor().m_size != worldSize) + { + // World size changed, so the whole world needs updating. + width = worldSize.m_width; + height = worldSize.m_height; + m_dirtyRegion = worldBounds; + + AZ::Data::Instance imagePool = AZ::RPI::ImageSystemInterface::Get()->GetSystemAttachmentPool(); + AZ::RHI::ImageDescriptor imageDescriptor = AZ::RHI::ImageDescriptor::Create2D( + AZ::RHI::ImageBindFlags::ShaderRead, width, height, AZ::RHI::Format::R16_UNORM + ); + m_areaData.m_heightmapImage = AZ::RPI::AttachmentImage::Create(*imagePool.get(), imageDescriptor, TerrainHeightmapName, nullptr, nullptr); + AZ_Error(TerrainFPName, m_areaData.m_heightmapImage, "Failed to initialize the heightmap image!"); + } + + AZStd::vector pixels; + pixels.reserve(width * height); - // Create heightmap image data { - m_areaData.m_propertiesDirty = true; + // Block other threads from accessing the surface data bus while we are in GetHeightFromFloats (which may call into the SurfaceData bus). + // We lock our surface data mutex *before* checking / setting "isRequestInProgress" so that we prevent race conditions + // that create false detection of cyclic dependencies when multiple requests occur on different threads simultaneously. + // (One case where this was previously able to occur was in rapid updating of the Preview widget on the + // GradientSurfaceDataComponent in the Editor when moving the threshold sliders back and forth rapidly) - AZ::RHI::Size imageSize; - imageSize.m_width = width; - imageSize.m_height = height; + auto& surfaceDataContext = SurfaceData::SurfaceDataSystemRequestBus::GetOrCreateContext(false); + typename SurfaceData::SurfaceDataSystemRequestBus::Context::DispatchLockGuard scopeLock(surfaceDataContext.m_contextMutex); - AZStd::vector uint16Heights; - uint16Heights.reserve(heightData.size()); - for (float sampleHeight : heightData) + for (uint32_t y = 0; y < height; y++) { - float clampedSample = AZ::GetClamp(sampleHeight, 0.0f, 1.0f); - constexpr uint16_t MaxUint16 = 0xFFFF; - uint16Heights.push_back(aznumeric_cast(clampedSample * MaxUint16)); + for (uint32_t x = 0; x < width; x++) + { + bool terrainExists = true; + float terrainHeight = 0.0f; + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult( + terrainHeight, &AzFramework::Terrain::TerrainDataRequests::GetHeightFromFloats, + (x * queryResolution) + m_dirtyRegion.GetMin().GetX(), + (y * queryResolution) + m_dirtyRegion.GetMin().GetY(), + AzFramework::Terrain::TerrainDataRequests::Sampler::EXACT, + &terrainExists); + + float clampedHeight = AZ::GetClamp((terrainHeight - worldBounds.GetMin().GetZ()) / worldBounds.GetExtents().GetZ(), 0.0f, 1.0f); + float expandedHeight = AZStd::roundf(clampedHeight * AZStd::numeric_limits::max()); + uint16_t uint16Height = aznumeric_cast(expandedHeight); + + pixels.push_back(uint16Height); + } } - - AZ::Data::Instance streamingImagePool = AZ::RPI::ImageSystemInterface::Get()->GetSystemStreamingPool(); - m_areaData.m_heightmapImage = AZ::RPI::StreamingImage::CreateFromCpuData(*streamingImagePool, - AZ::RHI::ImageDimension::Image2D, - imageSize, - AZ::RHI::Format::R16_UNORM, - (uint8_t*)uint16Heights.data(), - heightData.size() * sizeof(uint16_t)); - AZ_Error(TerrainFPName, m_areaData.m_heightmapImage, "Failed to initialize the heightmap image!"); } + if (m_areaData.m_heightmapImage) + { + const float left = (m_dirtyRegion.GetMin().GetX() - worldBounds.GetMin().GetX()) / queryResolution; + const float top = (m_dirtyRegion.GetMin().GetY() - worldBounds.GetMin().GetY()) / queryResolution; + AZ::RHI::ImageUpdateRequest imageUpdateRequest; + imageUpdateRequest.m_imageSubresourcePixelOffset.m_left = aznumeric_cast(left); + imageUpdateRequest.m_imageSubresourcePixelOffset.m_top = aznumeric_cast(top); + imageUpdateRequest.m_sourceSubresourceLayout.m_bytesPerRow = width * sizeof(uint16_t); + imageUpdateRequest.m_sourceSubresourceLayout.m_bytesPerImage = width * height * sizeof(uint16_t); + imageUpdateRequest.m_sourceSubresourceLayout.m_rowCount = height; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_width = width; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_height = height; + imageUpdateRequest.m_sourceSubresourceLayout.m_size.m_depth = 1; + imageUpdateRequest.m_sourceData = pixels.data(); + imageUpdateRequest.m_image = m_areaData.m_heightmapImage->GetRHIImage(); + + m_areaData.m_heightmapImage->UpdateImageContents(imageUpdateRequest); + } + + m_dirtyRegion = AZ::Aabb::CreateNull(); } void TerrainFeatureProcessor::ProcessSurfaces(const FeatureProcessor::RenderPacket& process) @@ -169,8 +250,10 @@ namespace Terrain return; } - if (m_areaData.m_propertiesDirty && m_materialInstance) + if (m_areaData.m_propertiesDirty && m_materialInstance && m_materialInstance->CanCompile()) { + UpdateTerrainData(); + m_areaData.m_propertiesDirty = false; m_sectorData.clear(); diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h index 32f88565c2..d8df9b328c 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h +++ b/Gems/Terrain/Code/Source/TerrainRenderer/TerrainFeatureProcessor.h @@ -9,24 +9,12 @@ #pragma once #include -#include -#include -#include -#include -#include -#include +#include -#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include namespace AZ::RPI @@ -35,6 +23,7 @@ namespace AZ::RPI { class AsyncAssetLoader; } + class Material; class Model; } @@ -43,6 +32,7 @@ namespace Terrain class TerrainFeatureProcessor final : public AZ::RPI::FeatureProcessor , private AZ::RPI::MaterialReloadNotificationBus::Handler + , private AzFramework::Terrain::TerrainDataNotificationBus::Handler { public: AZ_RTTI(TerrainFeatureProcessor, "{D7DAC1F9-4A9F-4D3C-80AE-99579BF8AB1C}", AZ::RPI::FeatureProcessor); @@ -54,26 +44,13 @@ namespace Terrain TerrainFeatureProcessor() = default; ~TerrainFeatureProcessor() = default; - // AZ::Component overrides... + // AZ::RPI::FeatureProcessor overrides... void Activate() override; void Deactivate() override; - - // AZ::RPI::FeatureProcessor overrides... void Render(const AZ::RPI::FeatureProcessor::RenderPacket& packet) override; - // AZ::RPI::MaterialReloadNotificationBus::Handler overrides... - void OnMaterialReinitialized(const AZ::Data::Instance& material) override; - void SetWorldSize(AZ::Vector2 sizeInMeters); - void UpdateTerrainData(const AZ::Transform& transform, const AZ::Aabb& worldBounds, float sampleSpacing, - uint32_t width, uint32_t height, const AZStd::vector& heightData); - - void RemoveTerrainData() - { - m_areaData = {}; - } - private: struct ShaderTerrainData // Must align with struct in Object Srg @@ -104,10 +81,19 @@ namespace Terrain AZStd::vector m_indices; }; + // AZ::RPI::MaterialReloadNotificationBus::Handler overrides... + void OnMaterialReinitialized(const AZ::Data::Instance& material) override; + + // AzFramework::Terrain::TerrainDataNotificationBus overrides... + void OnTerrainDataDestroyBegin() override; + void OnTerrainDataChanged(const AZ::Aabb& dirtyRegion, TerrainDataChangedMask dataChangedMask) override; + void Initialize(); void InitializeTerrainPatch(uint16_t gridSize, float gridSpacing, PatchData& patchdata); bool InitializePatchModel(); + void UpdateTerrainData(); + void ProcessSurfaces(const FeatureProcessor::RenderPacket& process); AZ::Outcome> CreateBufferAsset( @@ -132,14 +118,17 @@ namespace Terrain AZ::Transform m_transform{ AZ::Transform::CreateIdentity() }; AZ::Aabb m_terrainBounds{ AZ::Aabb::CreateNull() }; float m_heightScale{ 0.0f }; - AZ::Data::Instance m_heightmapImage; + AZ::Data::Instance m_heightmapImage; uint32_t m_heightmapImageWidth{ 0 }; uint32_t m_heightmapImageHeight{ 0 }; + uint32_t m_updateWidth{ 0 }; + uint32_t m_updateHeight{ 0 }; bool m_propertiesDirty{ true }; float m_sampleSpacing{ 0.0f }; }; TerrainAreaData m_areaData; + AZ::Aabb m_dirtyRegion{ AZ::Aabb::CreateNull() }; struct SectorData { From 029ad32c84117536f04d7b9c12d779df26081171 Mon Sep 17 00:00:00 2001 From: Pip Potter <61438964+lmbr-pip@users.noreply.github.com> Date: Wed, 6 Oct 2021 15:24:21 -0700 Subject: [PATCH 145/226] lyn7131: Ensure AWS credential Cvars are not logged or shown in plain text (#4519) Signed-off-by: rppotter --- .../Private/Credential/AWSCVarCredentialHandler.h | 2 +- .../Source/Credential/AWSCVarCredentialHandler.cpp | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h b/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h index 542177dcc4..388f8eefd5 100644 --- a/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h +++ b/Gems/AWSCore/Code/Include/Private/Credential/AWSCVarCredentialHandler.h @@ -21,7 +21,7 @@ namespace AWSCore { public: AWSCVarCredentialHandler() = default; - ~AWSCVarCredentialHandler() = default; + ~AWSCVarCredentialHandler() override = default; //! Activate handler and its credentials provider, make sure activation //! invoked after AWSNativeSDK init to avoid memory leak diff --git a/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp b/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp index 83487f665d..8102efa2f8 100644 --- a/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp +++ b/Gems/AWSCore/Code/Source/Credential/AWSCVarCredentialHandler.cpp @@ -5,15 +5,14 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ - #include #include namespace AWSCore { - AZ_CVAR(AZ::CVarFixedString, cl_awsAccessKey, "", nullptr, AZ::ConsoleFunctorFlags::Null, "Override AWS access key"); - AZ_CVAR(AZ::CVarFixedString, cl_awsSecretKey, "", nullptr, AZ::ConsoleFunctorFlags::Null, "Override AWS secret key"); + AZ_CVAR(AZ::CVarFixedString, cl_awsAccessKey, "", nullptr, AZ::ConsoleFunctorFlags::IsInvisible, "Override AWS access key"); + AZ_CVAR(AZ::CVarFixedString, cl_awsSecretKey, "", nullptr, AZ::ConsoleFunctorFlags::IsInvisible, "Override AWS secret key"); static constexpr char AWSCVARCREDENTIALHANDLER_ALLOC_TAG[] = "AWSCVarCredentialHandler"; @@ -36,12 +35,12 @@ namespace AWSCore std::shared_ptr AWSCVarCredentialHandler::GetCredentialsProvider() { - auto accessKey = static_cast(cl_awsAccessKey); - auto secretKey = static_cast(cl_awsSecretKey); + const auto accessKey = static_cast(cl_awsAccessKey); + const auto secretKey = static_cast(cl_awsSecretKey); if (!accessKey.empty() && !secretKey.empty()) { - AZStd::lock_guard credentialsLock{m_credentialMutex}; + AZStd::lock_guard credentialsLock{ m_credentialMutex }; m_cvarCredentialsProvider = Aws::MakeShared( AWSCVARCREDENTIALHANDLER_ALLOC_TAG, accessKey.c_str(), secretKey.c_str()); return m_cvarCredentialsProvider; @@ -52,7 +51,7 @@ namespace AWSCore void AWSCVarCredentialHandler::ResetCredentialsProvider() { // Must reset credential provider after AWSNativeSDKs init or before AWSNativeSDKs shutdown - AZStd::lock_guard credentialsLock{m_credentialMutex}; + AZStd::lock_guard credentialsLock{ m_credentialMutex }; m_cvarCredentialsProvider.reset(); } } // namespace AWSCore From d36041d1b74060b9cd69a74e0d880e3c624791db Mon Sep 17 00:00:00 2001 From: Gene Walters Date: Wed, 6 Oct 2021 15:48:54 -0700 Subject: [PATCH 146/226] Update based on feedback. Adding event to MPSystemComponent for receiving a server acceptance packet. The editor system component subscribes to this event and tells the server we're ready for entity updates Signed-off-by: Gene Walters --- .../Code/Include/Multiplayer/IMultiplayer.h | 5 ++++ .../MultiplayerEditorSystemComponent.cpp | 10 +++++++ .../Editor/MultiplayerEditorSystemComponent.h | 7 +++++ .../Source/MultiplayerSystemComponent.cpp | 27 ++++++++----------- .../Code/Source/MultiplayerSystemComponent.h | 2 ++ 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index e32b6188eb..e32a5bd0f3 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -44,6 +44,7 @@ namespace Multiplayer using ClientDisconnectedEvent = AZ::Event<>; using ConnectionAcquiredEvent = AZ::Event; + using ServerAcceptanceReceivedEvent = AZ::Event<>; using SessionInitEvent = AZ::Event; using SessionShutdownEvent = AZ::Event; @@ -102,6 +103,10 @@ namespace Multiplayer //! @param handler The ConnectionAcquiredEvent Handler to add virtual void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) = 0; + //! Adds a ServerAcceptanceReceived Handler which is invoked when the client receives the accept packet from the server. + //! @param handler The ServerAcceptanceReceived Handler to add + virtual void AddServerAcceptanceReceivedHandler(ServerAcceptanceReceivedEvent::Handler& handler) = 0; + //! Adds a SessionInitEvent Handler which is invoked when a new network session starts. //! @param handler The SessionInitEvent Handler to add virtual void AddSessionInitHandler(SessionInitEvent::Handler& handler) = 0; diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp index d13c6538db..3a48135bc3 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp @@ -62,6 +62,7 @@ namespace Multiplayer } MultiplayerEditorSystemComponent::MultiplayerEditorSystemComponent() + : m_serverAcceptanceReceivedHandler([this](){OnServerAcceptanceReceived();}) { ; } @@ -70,6 +71,7 @@ namespace Multiplayer { AzFramework::GameEntityContextEventBus::Handler::BusConnect(); AzToolsFramework::EditorEvents::Bus::Handler::BusConnect(); + AZ::Interface::Get()->AddServerAcceptanceReceivedHandler(m_serverAcceptanceReceivedHandler); } void MultiplayerEditorSystemComponent::Deactivate() @@ -245,4 +247,12 @@ namespace Multiplayer void MultiplayerEditorSystemComponent::OnGameEntitiesReset() { } + + void MultiplayerEditorSystemComponent::OnServerAcceptanceReceived() + { + // We're now accepting the connection to the EditorServer. + // In normal game clients SendReadyForEntityUpdates will be enabled once the appropriate level's root spawnable is loaded, + // but since we're in Editor, we're already in the level. + AZ::Interface::Get()->SendReadyForEntityUpdates(true); + } } diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h index 6a9e6a79b6..b1e9335697 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h @@ -8,6 +8,8 @@ #pragma once +#include "Multiplayer/IMultiplayer.h" + #include #include @@ -45,6 +47,9 @@ namespace Multiplayer MultiplayerEditorSystemComponent(); ~MultiplayerEditorSystemComponent() override = default; + //! Called once the editor receives the server's accept packet + void OnServerAcceptanceReceived(); + //! AZ::Component overrides. //! @{ void Activate() override; @@ -71,5 +76,7 @@ namespace Multiplayer IEditor* m_editor = nullptr; AzFramework::ProcessWatcher* m_serverProcess = nullptr; AzNetworking::ConnectionId m_editorConnId; + + ServerAcceptanceReceivedEvent::Handler m_serverAcceptanceReceivedHandler; }; } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index 9b04cd98d4..d05139cb41 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -489,23 +489,13 @@ namespace Multiplayer { m_didHandshake = true; - // If this is an Editor then we're now accepting the connection to the EditorServer. - // In normal game clients SendReadyForEntityUpdates will be enabled once the appropriate level's root spawnable is loaded, - // but since we're in Editor, we're already in the level. - AZ::ApplicationTypeQuery applicationType; - AZ::ComponentApplicationBus::Broadcast(&AZ::ComponentApplicationRequests::QueryApplicationType, applicationType); - if (applicationType.IsEditor()) - { - SendReadyForEntityUpdates(true); - } - else - { - AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); - AZ::Interface::Get()->PerformCommand(commandString.c_str()); + AZ::CVarFixedString commandString = "sv_map " + packet.GetMap(); + AZ::Interface::Get()->PerformCommand(commandString.c_str()); - AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); - AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); - } + AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap(); + AZ::Interface::Get()->PerformCommand(loadLevelString.c_str()); + + m_serverAcceptanceReceivedEvent.Signal(); return true; } @@ -800,6 +790,11 @@ namespace Multiplayer handler.Connect(m_connAcquiredEvent); } + void MultiplayerSystemComponent::AddServerAcceptanceReceivedHandler(ServerAcceptanceReceivedEvent::Handler& handler) + { + handler.Connect(m_serverAcceptanceReceivedEvent); + } + void MultiplayerSystemComponent::AddSessionInitHandler(SessionInitEvent::Handler& handler) { handler.Connect(m_initEvent); diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index ba014f814a..4a4cdd4265 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -111,6 +111,7 @@ namespace Multiplayer void AddConnectionAcquiredHandler(ConnectionAcquiredEvent::Handler& handler) override; void AddSessionInitHandler(SessionInitEvent::Handler& handler) override; void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; + void AddServerAcceptanceReceivedHandler(ServerAcceptanceReceivedEvent::Handler& handler) override; bool StartHosting(uint16_t port, bool isDedicated = true) override; bool Connect(AZStd::string remoteAddress, uint16_t port) override; void Terminate(AzNetworking::DisconnectReason reason) override; @@ -151,6 +152,7 @@ namespace Multiplayer SessionInitEvent m_initEvent; SessionShutdownEvent m_shutdownEvent; ConnectionAcquiredEvent m_connAcquiredEvent; + ServerAcceptanceReceivedEvent m_serverAcceptanceReceivedEvent; ClientDisconnectedEvent m_clientDisconnectedEvent; AZStd::queue m_pendingConnectionTickets; From 50fe8bc04dcc652cb5bec4334d6c740400acfa55 Mon Sep 17 00:00:00 2001 From: Gene Walters Date: Wed, 6 Oct 2021 16:35:21 -0700 Subject: [PATCH 147/226] pass in AZ::Utils::GetProjectPath().c_str() directly since converting projectpath is not needed Signed-off-by: Gene Walters --- .../Code/Source/Editor/MultiplayerEditorSystemComponent.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp index 3a48135bc3..55a05e33a7 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp @@ -144,13 +144,11 @@ namespace Multiplayer } // Start the configured server if it's available - AZStd::string projectPath(AZ::Utils::GetProjectPath().c_str()); - AZStd::replace(projectPath.begin(), projectPath.end(), AZ::IO::WindowsPathSeparator, AZ::IO::PosixPathSeparator); AzFramework::ProcessLauncher::ProcessLaunchInfo processLaunchInfo; processLaunchInfo.m_commandlineParameters = AZStd::string::format( R"("%s" --project-path "%s" --editorsv_isDedicated true --sv_defaultPlayerSpawnAsset "%s")", serverPath.c_str(), - projectPath.c_str(), + AZ::Utils::GetProjectPath().c_str(), static_cast(sv_defaultPlayerSpawnAsset).c_str()); processLaunchInfo.m_showWindow = true; processLaunchInfo.m_processPriority = AzFramework::ProcessPriority::PROCESSPRIORITY_NORMAL; From 7e6d35b046fc640ea95ccec04448510b8c99fb09 Mon Sep 17 00:00:00 2001 From: Gene Walters Date: Wed, 6 Oct 2021 20:11:29 -0700 Subject: [PATCH 148/226] small fix to include using <> Signed-off-by: Gene Walters --- .../Code/Source/Editor/MultiplayerEditorSystemComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h index b1e9335697..4e4c6b677f 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.h @@ -8,7 +8,7 @@ #pragma once -#include "Multiplayer/IMultiplayer.h" +#include #include From 3f2881ea4688285e8dc4685af2b6947cf68882a5 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:00:18 +0100 Subject: [PATCH 149/226] Simplify viewport interaction model reset functionality (#4524) * simplify entity reset functionality Signed-off-by: hultonha * remove reference to removed shortcuts Signed-off-by: hultonha --- Code/Editor/Core/LevelEditorMenuHandler.cpp | 2 - .../EditorTransformComponentSelection.cpp | 44 +------------------ ...torTransformComponentSelectionRequestBus.h | 2 - 3 files changed, 2 insertions(+), 46 deletions(-) diff --git a/Code/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Editor/Core/LevelEditorMenuHandler.cpp index e568f05167..b53076361e 100644 --- a/Code/Editor/Core/LevelEditorMenuHandler.cpp +++ b/Code/Editor/Core/LevelEditorMenuHandler.cpp @@ -487,8 +487,6 @@ void LevelEditorMenuHandler::PopulateEditMenu(ActionManager::MenuWrapper& editMe editMenu.AddAction(AzToolsFramework::EditPivot); editMenu.AddAction(AzToolsFramework::EditReset); editMenu.AddAction(AzToolsFramework::EditResetManipulator); - editMenu.AddAction(AzToolsFramework::EditResetLocal); - editMenu.AddAction(AzToolsFramework::EditResetWorld); // Hide Selection editMenu.AddAction(AzToolsFramework::HideSelection); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index ccb72e1d50..dacae038d4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -103,10 +103,6 @@ namespace AzToolsFramework static const char* const ResetEntityTransformDesc = "Reset transform based on manipulator mode"; static const char* const ResetManipulatorTitle = "Reset Manipulator"; static const char* const ResetManipulatorDesc = "Reset the manipulator to recenter it on the selected entity"; - static const char* const ResetTransformLocalTitle = "Reset Transform (Local)"; - static const char* const ResetTransformLocalDesc = "Reset transform to local space"; - static const char* const ResetTransformWorldTitle = "Reset Transform (World)"; - static const char* const ResetTransformWorldDesc = "Reset transform to world space"; static const char* const EntityBoxSelectUndoRedoDesc = "Box Select Entities"; static const char* const EntityDeselectUndoRedoDesc = "Deselect Entity"; @@ -2424,45 +2420,9 @@ namespace AzToolsFramework AddAction( m_actions, { QKeySequence(Qt::CTRL + Qt::Key_R) }, EditResetManipulator, ResetManipulatorTitle, ResetManipulatorDesc, - AZStd::bind(AZStd::mem_fn(&EditorTransformComponentSelection::DelegateClearManipulatorOverride), this)); - - AddAction( - m_actions, { QKeySequence(Qt::ALT + Qt::Key_R) }, EditResetLocal, ResetTransformLocalTitle, ResetTransformLocalDesc, - [this]() - { - switch (m_mode) - { - case Mode::Rotation: - ResetOrientationForSelectedEntitiesLocal(); - break; - case Mode::Scale: - CopyScaleToSelectedEntitiesIndividualWorld(1.0f); - break; - case Mode::Translation: - // do nothing - break; - } - }); - - AddAction( - m_actions, { QKeySequence(Qt::SHIFT + Qt::Key_R) }, EditResetWorld, ResetTransformWorldTitle, ResetTransformWorldDesc, - [this]() + [this] { - switch (m_mode) - { - case Mode::Rotation: - { - // begin an undo batch so operations inside CopyOrientation... and - // DelegateClear... are grouped into a single undo/redo - ScopedUndoBatch undoBatch{ ResetTransformWorldTitle }; - CopyOrientationToSelectedEntitiesIndividual(AZ::Quaternion::CreateIdentity()); - ClearManipulatorOrientationOverride(); - } - break; - case Mode::Scale: - case Mode::Translation: - break; - } + DelegateClearManipulatorOverride(); }); AddAction( diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h index d0c106a15e..35f5b0ba99 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelectionRequestBus.h @@ -31,8 +31,6 @@ namespace AzToolsFramework constexpr inline AZ::Crc32 EditPivot = AZ_CRC_CE("com.o3de.action.editortransform.editpivot"); constexpr inline AZ::Crc32 EditReset = AZ_CRC_CE("com.o3de.action.editortransform.editreset"); constexpr inline AZ::Crc32 EditResetManipulator = AZ_CRC_CE("com.o3de.action.editortransform.editresetmanipulator"); - constexpr inline AZ::Crc32 EditResetLocal = AZ_CRC_CE("com.o3de.action.editortransform.editresetlocal"); - constexpr inline AZ::Crc32 EditResetWorld = AZ_CRC_CE("com.o3de.action.editortransform.editresetworld"); constexpr inline AZ::Crc32 ViewportUiVisible = AZ_CRC_CE("com.o3de.action.editortransform.viewportuivisible"); //@} From 3d1ec83f78e66e36e931a9ee50508b1397d14dbc Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:01:30 +0100 Subject: [PATCH 150/226] Update naming to CameraInput types (#4527) * rename public facing Pivot cameras to Orbit - previous rename was a mistake Signed-off-by: hultonha * some more comment and naming updates to improve camera documentation Signed-off-by: hultonha --- .../EditorModularViewportCameraComposer.cpp | 76 +++++++++---------- .../EditorModularViewportCameraComposer.h | 16 ++-- .../EditorPreferencesPageViewportCamera.cpp | 52 ++++++------- .../EditorPreferencesPageViewportCamera.h | 10 +-- Code/Editor/EditorViewportSettings.cpp | 50 ++++++------ Code/Editor/EditorViewportSettings.h | 20 ++--- .../AzFramework/Viewport/CameraInput.cpp | 46 +++++------ .../AzFramework/Viewport/CameraInput.h | 73 +++++++++++------- .../AzFramework/Tests/CameraInputTests.cpp | 50 ++++++------ 9 files changed, 204 insertions(+), 189 deletions(-) diff --git a/Code/Editor/EditorModularViewportCameraComposer.cpp b/Code/Editor/EditorModularViewportCameraComposer.cpp index c492010336..ce4a0a2e33 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.cpp +++ b/Code/Editor/EditorModularViewportCameraComposer.cpp @@ -96,7 +96,7 @@ namespace SandboxEditor cameras.AddCamera(m_firstPersonTranslateCamera); cameras.AddCamera(m_firstPersonScrollCamera); cameras.AddCamera(m_firstPersonFocusCamera); - cameras.AddCamera(m_pivotCamera); + cameras.AddCamera(m_orbitCamera); }); return controller; @@ -135,7 +135,7 @@ namespace SandboxEditor m_firstPersonRotateCamera->SetActivationEndedFn(showCursor); m_firstPersonPanCamera = AZStd::make_shared( - SandboxEditor::CameraFreePanChannelId(), AzFramework::LookPan, AzFramework::TranslatePivot); + SandboxEditor::CameraFreePanChannelId(), AzFramework::LookPan, AzFramework::TranslatePivotLook); m_firstPersonPanCamera->m_panSpeedFn = [] { @@ -155,7 +155,7 @@ namespace SandboxEditor const auto translateCameraInputChannelIds = BuildTranslateCameraInputChannelIds(); m_firstPersonTranslateCamera = AZStd::make_shared( - translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivotLook); m_firstPersonTranslateCamera->m_translateSpeedFn = [] { @@ -167,7 +167,7 @@ namespace SandboxEditor return SandboxEditor::CameraBoostMultiplier(); }; - m_firstPersonScrollCamera = AZStd::make_shared(); + m_firstPersonScrollCamera = AZStd::make_shared(); m_firstPersonScrollCamera->m_scrollSpeedFn = [] { @@ -196,82 +196,82 @@ namespace SandboxEditor m_firstPersonFocusCamera->SetPivotFn(pivotFn); - m_pivotCamera = AZStd::make_shared(SandboxEditor::CameraPivotChannelId()); + m_orbitCamera = AZStd::make_shared(SandboxEditor::CameraOrbitChannelId()); - m_pivotCamera->SetPivotFn( + m_orbitCamera->SetPivotFn( [pivotFn]([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) { return pivotFn(); }); - m_pivotRotateCamera = AZStd::make_shared(SandboxEditor::CameraPivotLookChannelId()); + m_orbitRotateCamera = AZStd::make_shared(SandboxEditor::CameraOrbitLookChannelId()); - m_pivotRotateCamera->m_rotateSpeedFn = [] + m_orbitRotateCamera->m_rotateSpeedFn = [] { return SandboxEditor::CameraRotateSpeed(); }; - m_pivotRotateCamera->m_invertYawFn = [] + m_orbitRotateCamera->m_invertYawFn = [] { - return SandboxEditor::CameraPivotYawRotationInverted(); + return SandboxEditor::CameraOrbitYawRotationInverted(); }; - m_pivotTranslateCamera = AZStd::make_shared( - translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslateOffset); + m_orbitTranslateCamera = AZStd::make_shared( + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslateOffsetOrbit); - m_pivotTranslateCamera->m_translateSpeedFn = [] + m_orbitTranslateCamera->m_translateSpeedFn = [] { return SandboxEditor::CameraTranslateSpeed(); }; - m_pivotTranslateCamera->m_boostMultiplierFn = [] + m_orbitTranslateCamera->m_boostMultiplierFn = [] { return SandboxEditor::CameraBoostMultiplier(); }; - m_pivotDollyScrollCamera = AZStd::make_shared(); + m_orbitDollyScrollCamera = AZStd::make_shared(); - m_pivotDollyScrollCamera->m_scrollSpeedFn = [] + m_orbitDollyScrollCamera->m_scrollSpeedFn = [] { return SandboxEditor::CameraScrollSpeed(); }; - m_pivotDollyMoveCamera = AZStd::make_shared(SandboxEditor::CameraPivotDollyChannelId()); + m_orbitDollyMoveCamera = AZStd::make_shared(SandboxEditor::CameraOrbitDollyChannelId()); - m_pivotDollyMoveCamera->m_motionSpeedFn = [] + m_orbitDollyMoveCamera->m_motionSpeedFn = [] { return SandboxEditor::CameraDollyMotionSpeed(); }; - m_pivotPanCamera = AZStd::make_shared( - SandboxEditor::CameraPivotPanChannelId(), AzFramework::LookPan, AzFramework::TranslateOffset); + m_orbitPanCamera = AZStd::make_shared( + SandboxEditor::CameraOrbitPanChannelId(), AzFramework::LookPan, AzFramework::TranslateOffsetOrbit); - m_pivotPanCamera->m_panSpeedFn = [] + m_orbitPanCamera->m_panSpeedFn = [] { return SandboxEditor::CameraPanSpeed(); }; - m_pivotPanCamera->m_invertPanXFn = [] + m_orbitPanCamera->m_invertPanXFn = [] { return SandboxEditor::CameraPanInvertedX(); }; - m_pivotPanCamera->m_invertPanYFn = [] + m_orbitPanCamera->m_invertPanYFn = [] { return SandboxEditor::CameraPanInvertedY(); }; - m_pivotFocusCamera = - AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusPivot); + m_orbitFocusCamera = + AZStd::make_shared(SandboxEditor::CameraFocusChannelId(), AzFramework::FocusOrbit); - m_pivotFocusCamera->SetPivotFn(pivotFn); + m_orbitFocusCamera->SetPivotFn(pivotFn); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotRotateCamera); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotTranslateCamera); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyScrollCamera); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotDollyMoveCamera); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotPanCamera); - m_pivotCamera->m_pivotCameras.AddCamera(m_pivotFocusCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitRotateCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitTranslateCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitDollyScrollCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitDollyMoveCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitPanCamera); + m_orbitCamera->m_orbitCameras.AddCamera(m_orbitFocusCamera); } void EditorModularViewportCameraComposer::OnEditorModularViewportCameraComposerSettingsChanged() @@ -282,12 +282,12 @@ namespace SandboxEditor m_firstPersonRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraFreeLookChannelId()); m_firstPersonFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); - m_pivotCamera->SetPivotInputChannelId(SandboxEditor::CameraPivotChannelId()); - m_pivotTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); - m_pivotPanCamera->SetPanInputChannelId(SandboxEditor::CameraPivotPanChannelId()); - m_pivotRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraPivotLookChannelId()); - m_pivotDollyMoveCamera->SetDollyInputChannelId(SandboxEditor::CameraPivotDollyChannelId()); - m_pivotFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); + m_orbitCamera->SetOrbitInputChannelId(SandboxEditor::CameraOrbitChannelId()); + m_orbitTranslateCamera->SetTranslateCameraInputChannelIds(translateCameraInputChannelIds); + m_orbitPanCamera->SetPanInputChannelId(SandboxEditor::CameraOrbitPanChannelId()); + m_orbitRotateCamera->SetRotateInputChannelId(SandboxEditor::CameraOrbitLookChannelId()); + m_orbitDollyMoveCamera->SetDollyInputChannelId(SandboxEditor::CameraOrbitDollyChannelId()); + m_orbitFocusCamera->SetFocusInputChannelId(SandboxEditor::CameraFocusChannelId()); } void EditorModularViewportCameraComposer::OnViewportViewEntityChanged(const AZ::EntityId& viewEntityId) diff --git a/Code/Editor/EditorModularViewportCameraComposer.h b/Code/Editor/EditorModularViewportCameraComposer.h index 90103dba43..9cfd6f3554 100644 --- a/Code/Editor/EditorModularViewportCameraComposer.h +++ b/Code/Editor/EditorModularViewportCameraComposer.h @@ -41,15 +41,15 @@ namespace SandboxEditor AZStd::shared_ptr m_firstPersonRotateCamera; AZStd::shared_ptr m_firstPersonPanCamera; AZStd::shared_ptr m_firstPersonTranslateCamera; - AZStd::shared_ptr m_firstPersonScrollCamera; + AZStd::shared_ptr m_firstPersonScrollCamera; AZStd::shared_ptr m_firstPersonFocusCamera; - AZStd::shared_ptr m_pivotCamera; - AZStd::shared_ptr m_pivotRotateCamera; - AZStd::shared_ptr m_pivotTranslateCamera; - AZStd::shared_ptr m_pivotDollyScrollCamera; - AZStd::shared_ptr m_pivotDollyMoveCamera; - AZStd::shared_ptr m_pivotPanCamera; - AZStd::shared_ptr m_pivotFocusCamera; + AZStd::shared_ptr m_orbitCamera; + AZStd::shared_ptr m_orbitRotateCamera; + AZStd::shared_ptr m_orbitTranslateCamera; + AZStd::shared_ptr m_orbitDollyScrollCamera; + AZStd::shared_ptr m_orbitDollyMoveCamera; + AZStd::shared_ptr m_orbitPanCamera; + AZStd::shared_ptr m_orbitFocusCamera; AzFramework::ViewportId m_viewportId; }; diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.cpp b/Code/Editor/EditorPreferencesPageViewportCamera.cpp index b632163186..16176bc241 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.cpp +++ b/Code/Editor/EditorPreferencesPageViewportCamera.cpp @@ -73,7 +73,7 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Field("TranslateSmoothing", &CameraMovementSettings::m_translateSmoothing) ->Field("TranslateSmoothness", &CameraMovementSettings::m_translateSmoothness) ->Field("CaptureCursorLook", &CameraMovementSettings::m_captureCursorLook) - ->Field("PivotYawRotationInverted", &CameraMovementSettings::m_pivotYawRotationInverted) + ->Field("OrbitYawRotationInverted", &CameraMovementSettings::m_orbitYawRotationInverted) ->Field("PanInvertedX", &CameraMovementSettings::m_panInvertedX) ->Field("PanInvertedY", &CameraMovementSettings::m_panInvertedY); @@ -86,12 +86,12 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Field("TranslateUp", &CameraInputSettings::m_translateUpChannelId) ->Field("TranslateDown", &CameraInputSettings::m_translateDownChannelId) ->Field("Boost", &CameraInputSettings::m_boostChannelId) - ->Field("Pivot", &CameraInputSettings::m_pivotChannelId) + ->Field("Orbit", &CameraInputSettings::m_orbitChannelId) ->Field("FreeLook", &CameraInputSettings::m_freeLookChannelId) ->Field("FreePan", &CameraInputSettings::m_freePanChannelId) - ->Field("PivotLook", &CameraInputSettings::m_pivotLookChannelId) - ->Field("PivotDolly", &CameraInputSettings::m_pivotDollyChannelId) - ->Field("PivotPan", &CameraInputSettings::m_pivotPanChannelId) + ->Field("OrbitLook", &CameraInputSettings::m_orbitLookChannelId) + ->Field("OrbitDolly", &CameraInputSettings::m_orbitDollyChannelId) + ->Field("OrbitPan", &CameraInputSettings::m_orbitPanChannelId) ->Field("Focus", &CameraInputSettings::m_focusChannelId); serialize.Class() @@ -144,8 +144,8 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial ->Attribute(AZ::Edit::Attributes::Min, minValue) ->Attribute(AZ::Edit::Attributes::Visibility, &CameraMovementSettings::TranslateSmoothingVisibility) ->DataElement( - AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_pivotYawRotationInverted, "Camera Pivot Yaw Inverted", - "Inverted yaw rotation while pivoting") + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_orbitYawRotationInverted, "Camera Orbit Yaw Inverted", + "Inverted yaw rotation while orbiting") ->DataElement( AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_panInvertedX, "Invert Pan X", "Invert direction of pan in local X axis") @@ -186,8 +186,8 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial "Key/button to move the camera more quickly") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotChannelId, "Pivot", - "Key/button to begin the camera pivot behavior") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitChannelId, "Orbit", + "Key/button to begin the camera orbit behavior") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_freeLookChannelId, "Free Look", @@ -197,19 +197,19 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_freePanChannelId, "Free Pan", "Key/button to begin camera free pan") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotLookChannelId, "Pivot Look", - "Key/button to begin camera pivot look") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitLookChannelId, "Orbit Look", + "Key/button to begin camera orbit look") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotDollyChannelId, "Pivot Dolly", - "Key/button to begin camera pivot dolly") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitDollyChannelId, "Orbit Dolly", + "Key/button to begin camera orbit dolly") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_pivotPanChannelId, "Pivot Pan", - "Key/button to begin camera pivot pan") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_orbitPanChannelId, "Orbit Pan", + "Key/button to begin camera orbit pan") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames) ->DataElement( - AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_focusChannelId, "Focus", "Key/button to focus camera pivot") + AZ::Edit::UIHandlers::ComboBox, &CameraInputSettings::m_focusChannelId, "Focus", "Key/button to focus camera orbit") ->Attribute(AZ::Edit::Attributes::StringList, &GetEditorInputNames); editContext->Class("Viewport Preferences", "Viewport Preferences") @@ -268,7 +268,7 @@ void CEditorPreferencesPage_ViewportCamera::OnApply() SandboxEditor::SetCameraTranslateSmoothness(m_cameraMovementSettings.m_translateSmoothness); SandboxEditor::SetCameraTranslateSmoothingEnabled(m_cameraMovementSettings.m_translateSmoothing); SandboxEditor::SetCameraCaptureCursorForLook(m_cameraMovementSettings.m_captureCursorLook); - SandboxEditor::SetCameraPivotYawRotationInverted(m_cameraMovementSettings.m_pivotYawRotationInverted); + SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_orbitYawRotationInverted); SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_panInvertedX); SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_panInvertedY); @@ -279,12 +279,12 @@ void CEditorPreferencesPage_ViewportCamera::OnApply() SandboxEditor::SetCameraTranslateUpChannelId(m_cameraInputSettings.m_translateUpChannelId); SandboxEditor::SetCameraTranslateDownChannelId(m_cameraInputSettings.m_translateDownChannelId); SandboxEditor::SetCameraTranslateBoostChannelId(m_cameraInputSettings.m_boostChannelId); - SandboxEditor::SetCameraPivotChannelId(m_cameraInputSettings.m_pivotChannelId); + SandboxEditor::SetCameraOrbitChannelId(m_cameraInputSettings.m_orbitChannelId); SandboxEditor::SetCameraFreeLookChannelId(m_cameraInputSettings.m_freeLookChannelId); SandboxEditor::SetCameraFreePanChannelId(m_cameraInputSettings.m_freePanChannelId); - SandboxEditor::SetCameraPivotLookChannelId(m_cameraInputSettings.m_pivotLookChannelId); - SandboxEditor::SetCameraPivotDollyChannelId(m_cameraInputSettings.m_pivotDollyChannelId); - SandboxEditor::SetCameraPivotPanChannelId(m_cameraInputSettings.m_pivotPanChannelId); + SandboxEditor::SetCameraOrbitLookChannelId(m_cameraInputSettings.m_orbitLookChannelId); + SandboxEditor::SetCameraOrbitDollyChannelId(m_cameraInputSettings.m_orbitDollyChannelId); + SandboxEditor::SetCameraOrbitPanChannelId(m_cameraInputSettings.m_orbitPanChannelId); SandboxEditor::SetCameraFocusChannelId(m_cameraInputSettings.m_focusChannelId); SandboxEditor::EditorModularViewportCameraComposerNotificationBus::Broadcast( @@ -304,7 +304,7 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings() m_cameraMovementSettings.m_translateSmoothness = SandboxEditor::CameraTranslateSmoothness(); m_cameraMovementSettings.m_translateSmoothing = SandboxEditor::CameraTranslateSmoothingEnabled(); m_cameraMovementSettings.m_captureCursorLook = SandboxEditor::CameraCaptureCursorForLook(); - m_cameraMovementSettings.m_pivotYawRotationInverted = SandboxEditor::CameraPivotYawRotationInverted(); + m_cameraMovementSettings.m_orbitYawRotationInverted = SandboxEditor::CameraOrbitYawRotationInverted(); m_cameraMovementSettings.m_panInvertedX = SandboxEditor::CameraPanInvertedX(); m_cameraMovementSettings.m_panInvertedY = SandboxEditor::CameraPanInvertedY(); @@ -315,11 +315,11 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings() m_cameraInputSettings.m_translateUpChannelId = SandboxEditor::CameraTranslateUpChannelId().GetName(); m_cameraInputSettings.m_translateDownChannelId = SandboxEditor::CameraTranslateDownChannelId().GetName(); m_cameraInputSettings.m_boostChannelId = SandboxEditor::CameraTranslateBoostChannelId().GetName(); - m_cameraInputSettings.m_pivotChannelId = SandboxEditor::CameraPivotChannelId().GetName(); + m_cameraInputSettings.m_orbitChannelId = SandboxEditor::CameraOrbitChannelId().GetName(); m_cameraInputSettings.m_freeLookChannelId = SandboxEditor::CameraFreeLookChannelId().GetName(); m_cameraInputSettings.m_freePanChannelId = SandboxEditor::CameraFreePanChannelId().GetName(); - m_cameraInputSettings.m_pivotLookChannelId = SandboxEditor::CameraPivotLookChannelId().GetName(); - m_cameraInputSettings.m_pivotDollyChannelId = SandboxEditor::CameraPivotDollyChannelId().GetName(); - m_cameraInputSettings.m_pivotPanChannelId = SandboxEditor::CameraPivotPanChannelId().GetName(); + m_cameraInputSettings.m_orbitLookChannelId = SandboxEditor::CameraOrbitLookChannelId().GetName(); + m_cameraInputSettings.m_orbitDollyChannelId = SandboxEditor::CameraOrbitDollyChannelId().GetName(); + m_cameraInputSettings.m_orbitPanChannelId = SandboxEditor::CameraOrbitPanChannelId().GetName(); m_cameraInputSettings.m_focusChannelId = SandboxEditor::CameraFocusChannelId().GetName(); } diff --git a/Code/Editor/EditorPreferencesPageViewportCamera.h b/Code/Editor/EditorPreferencesPageViewportCamera.h index cd31141c4a..fdc86b0f89 100644 --- a/Code/Editor/EditorPreferencesPageViewportCamera.h +++ b/Code/Editor/EditorPreferencesPageViewportCamera.h @@ -54,7 +54,7 @@ private: float m_translateSmoothness; bool m_translateSmoothing; bool m_captureCursorLook; - bool m_pivotYawRotationInverted; + bool m_orbitYawRotationInverted; bool m_panInvertedX; bool m_panInvertedY; @@ -80,12 +80,12 @@ private: AZStd::string m_translateUpChannelId; AZStd::string m_translateDownChannelId; AZStd::string m_boostChannelId; - AZStd::string m_pivotChannelId; + AZStd::string m_orbitChannelId; AZStd::string m_freeLookChannelId; AZStd::string m_freePanChannelId; - AZStd::string m_pivotLookChannelId; - AZStd::string m_pivotDollyChannelId; - AZStd::string m_pivotPanChannelId; + AZStd::string m_orbitLookChannelId; + AZStd::string m_orbitDollyChannelId; + AZStd::string m_orbitPanChannelId; AZStd::string m_focusChannelId; }; diff --git a/Code/Editor/EditorViewportSettings.cpp b/Code/Editor/EditorViewportSettings.cpp index c2539b008c..2354c6d63a 100644 --- a/Code/Editor/EditorViewportSettings.cpp +++ b/Code/Editor/EditorViewportSettings.cpp @@ -28,7 +28,7 @@ namespace SandboxEditor constexpr AZStd::string_view CameraRotateSpeedSetting = "/Amazon/Preferences/Editor/Camera/RotateSpeed"; constexpr AZStd::string_view CameraScrollSpeedSetting = "/Amazon/Preferences/Editor/Camera/DollyScrollSpeed"; constexpr AZStd::string_view CameraDollyMotionSpeedSetting = "/Amazon/Preferences/Editor/Camera/DollyMotionSpeed"; - constexpr AZStd::string_view CameraPivotYawRotationInvertedSetting = "/Amazon/Preferences/Editor/Camera/YawRotationInverted"; + constexpr AZStd::string_view CameraOrbitYawRotationInvertedSetting = "/Amazon/Preferences/Editor/Camera/YawRotationInverted"; constexpr AZStd::string_view CameraPanInvertedXSetting = "/Amazon/Preferences/Editor/Camera/PanInvertedX"; constexpr AZStd::string_view CameraPanInvertedYSetting = "/Amazon/Preferences/Editor/Camera/PanInvertedY"; constexpr AZStd::string_view CameraPanSpeedSetting = "/Amazon/Preferences/Editor/Camera/PanSpeed"; @@ -44,12 +44,12 @@ namespace SandboxEditor constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId"; constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId"; constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId"; - constexpr AZStd::string_view CameraPivotIdSetting = "/Amazon/Preferences/Editor/Camera/PivotId"; + constexpr AZStd::string_view CameraOrbitIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitId"; constexpr AZStd::string_view CameraFreeLookIdSetting = "/Amazon/Preferences/Editor/Camera/FreeLookId"; constexpr AZStd::string_view CameraFreePanIdSetting = "/Amazon/Preferences/Editor/Camera/FreePanId"; - constexpr AZStd::string_view CameraPivotLookIdSetting = "/Amazon/Preferences/Editor/Camera/PivotLookId"; - constexpr AZStd::string_view CameraPivotDollyIdSetting = "/Amazon/Preferences/Editor/Camera/PivotDollyId"; - constexpr AZStd::string_view CameraPivotPanIdSetting = "/Amazon/Preferences/Editor/Camera/PivotPanId"; + constexpr AZStd::string_view CameraOrbitLookIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitLookId"; + constexpr AZStd::string_view CameraOrbitDollyIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitDollyId"; + constexpr AZStd::string_view CameraOrbitPanIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitPanId"; constexpr AZStd::string_view CameraFocusIdSetting = "/Amazon/Preferences/Editor/Camera/FocusId"; template @@ -240,14 +240,14 @@ namespace SandboxEditor SetRegistry(CameraDollyMotionSpeedSetting, speed); } - bool CameraPivotYawRotationInverted() + bool CameraOrbitYawRotationInverted() { - return GetRegistry(CameraPivotYawRotationInvertedSetting, false); + return GetRegistry(CameraOrbitYawRotationInvertedSetting, false); } - void SetCameraPivotYawRotationInverted(const bool inverted) + void SetCameraOrbitYawRotationInverted(const bool inverted) { - SetRegistry(CameraPivotYawRotationInvertedSetting, inverted); + SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted); } bool CameraPanInvertedX() @@ -404,14 +404,14 @@ namespace SandboxEditor SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId); } - AzFramework::InputChannelId CameraPivotChannelId() + AzFramework::InputChannelId CameraOrbitChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraPivotIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); } - void SetCameraPivotChannelId(AZStd::string_view cameraPivotId) + void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId) { - SetRegistry(CameraPivotIdSetting, cameraPivotId); + SetRegistry(CameraOrbitIdSetting, cameraOrbitId); } AzFramework::InputChannelId CameraFreeLookChannelId() @@ -434,34 +434,34 @@ namespace SandboxEditor SetRegistry(CameraFreePanIdSetting, cameraFreePanId); } - AzFramework::InputChannelId CameraPivotLookChannelId() + AzFramework::InputChannelId CameraOrbitLookChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraPivotLookIdSetting, AZStd::string("mouse_button_left")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); } - void SetCameraPivotLookChannelId(AZStd::string_view cameraPivotLookId) + void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId) { - SetRegistry(CameraPivotLookIdSetting, cameraPivotLookId); + SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId); } - AzFramework::InputChannelId CameraPivotDollyChannelId() + AzFramework::InputChannelId CameraOrbitDollyChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraPivotDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); } - void SetCameraPivotDollyChannelId(AZStd::string_view cameraPivotDollyId) + void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId) { - SetRegistry(CameraPivotDollyIdSetting, cameraPivotDollyId); + SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId); } - AzFramework::InputChannelId CameraPivotPanChannelId() + AzFramework::InputChannelId CameraOrbitPanChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraPivotPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); + return AzFramework::InputChannelId(GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); } - void SetCameraPivotPanChannelId(AZStd::string_view cameraPivotPanId) + void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId) { - SetRegistry(CameraPivotPanIdSetting, cameraPivotPanId); + SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId); } AzFramework::InputChannelId CameraFocusChannelId() diff --git a/Code/Editor/EditorViewportSettings.h b/Code/Editor/EditorViewportSettings.h index 0253b01621..c1394f7404 100644 --- a/Code/Editor/EditorViewportSettings.h +++ b/Code/Editor/EditorViewportSettings.h @@ -71,8 +71,8 @@ namespace SandboxEditor SANDBOX_API float CameraDollyMotionSpeed(); SANDBOX_API void SetCameraDollyMotionSpeed(float speed); - SANDBOX_API bool CameraPivotYawRotationInverted(); - SANDBOX_API void SetCameraPivotYawRotationInverted(bool inverted); + SANDBOX_API bool CameraOrbitYawRotationInverted(); + SANDBOX_API void SetCameraOrbitYawRotationInverted(bool inverted); SANDBOX_API bool CameraPanInvertedX(); SANDBOX_API void SetCameraPanInvertedX(bool inverted); @@ -119,8 +119,8 @@ namespace SandboxEditor SANDBOX_API AzFramework::InputChannelId CameraTranslateBoostChannelId(); SANDBOX_API void SetCameraTranslateBoostChannelId(AZStd::string_view cameraTranslateBoostId); - SANDBOX_API AzFramework::InputChannelId CameraPivotChannelId(); - SANDBOX_API void SetCameraPivotChannelId(AZStd::string_view cameraPivotId); + SANDBOX_API AzFramework::InputChannelId CameraOrbitChannelId(); + SANDBOX_API void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId); SANDBOX_API AzFramework::InputChannelId CameraFreeLookChannelId(); SANDBOX_API void SetCameraFreeLookChannelId(AZStd::string_view cameraFreeLookId); @@ -128,14 +128,14 @@ namespace SandboxEditor SANDBOX_API AzFramework::InputChannelId CameraFreePanChannelId(); SANDBOX_API void SetCameraFreePanChannelId(AZStd::string_view cameraFreePanId); - SANDBOX_API AzFramework::InputChannelId CameraPivotLookChannelId(); - SANDBOX_API void SetCameraPivotLookChannelId(AZStd::string_view cameraPivotLookId); + SANDBOX_API AzFramework::InputChannelId CameraOrbitLookChannelId(); + SANDBOX_API void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId); - SANDBOX_API AzFramework::InputChannelId CameraPivotDollyChannelId(); - SANDBOX_API void SetCameraPivotDollyChannelId(AZStd::string_view cameraPivotDollyId); + SANDBOX_API AzFramework::InputChannelId CameraOrbitDollyChannelId(); + SANDBOX_API void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId); - SANDBOX_API AzFramework::InputChannelId CameraPivotPanChannelId(); - SANDBOX_API void SetCameraPivotPanChannelId(AZStd::string_view cameraPivotPanId); + SANDBOX_API AzFramework::InputChannelId CameraOrbitPanChannelId(); + SANDBOX_API void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId); SANDBOX_API AzFramework::InputChannelId CameraFocusChannelId(); SANDBOX_API void SetCameraFocusChannelId(AZStd::string_view cameraFocusId); diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp index 13f5303eaf..ddee63e191 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.cpp @@ -533,8 +533,8 @@ namespace AzFramework m_translateCameraInputChannelIds = translateCameraInputChannelIds; } - PivotCameraInput::PivotCameraInput(const InputChannelId& pivotChannelId) - : m_pivotChannelId(pivotChannelId) + OrbitCameraInput::OrbitCameraInput(const InputChannelId& orbitChannelId) + : m_orbitChannelId(orbitChannelId) { m_pivotFn = []([[maybe_unused]] const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) { @@ -542,11 +542,11 @@ namespace AzFramework }; } - bool PivotCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) + bool OrbitCameraInput::HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, const float scrollDelta) { if (const auto* input = AZStd::get_if(&event)) { - if (input->m_channelId == m_pivotChannelId) + if (input->m_channelId == m_orbitChannelId) { if (input->m_state == InputChannel::State::Began) { @@ -561,13 +561,13 @@ namespace AzFramework if (Active()) { - return m_pivotCameras.HandleEvents(event, cursorDelta, scrollDelta); + return m_orbitCameras.HandleEvents(event, cursorDelta, scrollDelta); } return !Idle(); } - Camera PivotCameraInput::StepCamera( + Camera OrbitCameraInput::StepCamera( const Camera& targetCamera, const ScreenVector& cursorDelta, const float scrollDelta, const float deltaTime) { Camera nextCamera = targetCamera; @@ -581,12 +581,12 @@ namespace AzFramework if (Active()) { MovePivotDetached(nextCamera, m_pivotFn(targetCamera.Translation(), targetCamera.Rotation().GetBasisY())); - nextCamera = m_pivotCameras.StepCamera(nextCamera, cursorDelta, scrollDelta, deltaTime); + nextCamera = m_orbitCameras.StepCamera(nextCamera, cursorDelta, scrollDelta, deltaTime); } if (Ending()) { - m_pivotCameras.Reset(); + m_orbitCameras.Reset(); nextCamera.m_pivot = nextCamera.Translation(); nextCamera.m_offset = AZ::Vector3::CreateZero(); @@ -595,12 +595,12 @@ namespace AzFramework return nextCamera; } - void PivotCameraInput::SetPivotInputChannelId(const InputChannelId& pivotChanneId) + void OrbitCameraInput::SetOrbitInputChannelId(const InputChannelId& orbitChanneId) { - m_pivotChannelId = pivotChanneId; + m_orbitChannelId = orbitChanneId; } - PivotDollyScrollCameraInput::PivotDollyScrollCameraInput() + OrbitDollyScrollCameraInput::OrbitDollyScrollCameraInput() { m_scrollSpeedFn = []() constexpr { @@ -608,7 +608,7 @@ namespace AzFramework }; } - bool PivotDollyScrollCameraInput::HandleEvents( + bool OrbitDollyScrollCameraInput::HandleEvents( const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta) { if (const auto* scroll = AZStd::get_if(&event)) @@ -619,7 +619,7 @@ namespace AzFramework return !Idle(); } - static Camera PivotDolly(const Camera& targetCamera, const float delta) + static Camera OrbitDolly(const Camera& targetCamera, const float delta) { Camera nextCamera = targetCamera; @@ -646,18 +646,18 @@ namespace AzFramework return nextCamera; } - Camera PivotDollyScrollCameraInput::StepCamera( + Camera OrbitDollyScrollCameraInput::StepCamera( const Camera& targetCamera, [[maybe_unused]] const ScreenVector& cursorDelta, const float scrollDelta, [[maybe_unused]] const float deltaTime) { - const auto nextCamera = PivotDolly(targetCamera, aznumeric_cast(scrollDelta) * m_scrollSpeedFn()); + const auto nextCamera = OrbitDolly(targetCamera, aznumeric_cast(scrollDelta) * m_scrollSpeedFn()); EndActivation(); return nextCamera; } - PivotDollyMotionCameraInput::PivotDollyMotionCameraInput(const InputChannelId& dollyChannelId) + OrbitDollyMotionCameraInput::OrbitDollyMotionCameraInput(const InputChannelId& dollyChannelId) : m_dollyChannelId(dollyChannelId) { m_motionSpeedFn = []() constexpr @@ -666,28 +666,28 @@ namespace AzFramework }; } - bool PivotDollyMotionCameraInput::HandleEvents( + bool OrbitDollyMotionCameraInput::HandleEvents( const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta) { HandleActivationEvents(event, m_dollyChannelId, cursorDelta, m_clickDetector, *this); return CameraInputUpdatingAfterMotion(*this); } - Camera PivotDollyMotionCameraInput::StepCamera( + Camera OrbitDollyMotionCameraInput::StepCamera( const Camera& targetCamera, const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta, [[maybe_unused]] const float deltaTime) { - return PivotDolly(targetCamera, aznumeric_cast(cursorDelta.m_y) * m_motionSpeedFn()); + return OrbitDolly(targetCamera, aznumeric_cast(cursorDelta.m_y) * m_motionSpeedFn()); } - void PivotDollyMotionCameraInput::SetDollyInputChannelId(const InputChannelId& dollyChannelId) + void OrbitDollyMotionCameraInput::SetDollyInputChannelId(const InputChannelId& dollyChannelId) { m_dollyChannelId = dollyChannelId; } - ScrollTranslationCameraInput::ScrollTranslationCameraInput() + LookScrollTranslationCameraInput::LookScrollTranslationCameraInput() { m_scrollSpeedFn = []() constexpr { @@ -695,7 +695,7 @@ namespace AzFramework }; } - bool ScrollTranslationCameraInput::HandleEvents( + bool LookScrollTranslationCameraInput::HandleEvents( const InputEvent& event, [[maybe_unused]] const ScreenVector& cursorDelta, [[maybe_unused]] const float scrollDelta) { if (const auto* scroll = AZStd::get_if(&event)) @@ -706,7 +706,7 @@ namespace AzFramework return !Idle(); } - Camera ScrollTranslationCameraInput::StepCamera( + Camera LookScrollTranslationCameraInput::StepCamera( const Camera& targetCamera, [[maybe_unused]] const ScreenVector& cursorDelta, const float scrollDelta, diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h index 9b1988f5ec..2b7cc3ea9e 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/CameraInput.h @@ -30,8 +30,11 @@ namespace AzFramework AZ::Vector3 EulerAngles(const AZ::Matrix3x3& orientation); //! A simple camera representation using spherical coordinates as input (pitch, yaw, pivot and offset). - //! The cameras transform and view can be obtained through accessor functions that use the internal + //! The camera's transform and view can be obtained through accessor functions that use the internal //! spherical coordinates to calculate the position and orientation. + //! @note Modifying m_pivot directly and leaving m_offset as zero will produce a free look camera effect, giving + //! m_offset a value (e.g. in negative Y only) will produce an orbit camera effect, modifying X and Z of m_offset + //! will further alter the camera translation in relation to m_pivot so it appears off center. struct Camera { AZ::Vector3 m_pivot = AZ::Vector3::CreateZero(); //!< Pivot point to rotate about (modified in world space). @@ -291,7 +294,7 @@ namespace AzFramework Cameras m_cameras; //!< Represents a collection of camera inputs that together provide a camera controller. private: - ScreenVector m_motionDelta; //!< The delta used for look/pivot/pan (rotation + translation) - two dimensional. + ScreenVector m_motionDelta; //!< The delta used for look/orbit/pan (rotation + translation) - two dimensional. CursorState m_cursorState; //!< The current and previous position of the cursor (used to calculate movement delta). float m_scrollDelta = 0.0f; //!< The delta used for dolly/movement (translation) - one dimensional. bool m_handlingEvents = false; //!< Is the camera system currently handling events (events are consumed and not propagated). @@ -316,7 +319,7 @@ namespace AzFramework return AZStd::fmod(yaw + AZ::Constants::TwoPi, AZ::Constants::TwoPi); } - //! A camera input to handle motion deltas that can rotate or pivot the camera. + //! A camera input to handle motion deltas that can change the orientation of the camera (update pitch and yaw). class RotateCameraInput : public CameraInput { public: @@ -348,15 +351,16 @@ namespace AzFramework //! PanAxes build function that will return a pair of pan axes depending on the camera orientation. using PanAxesFn = AZStd::function; - //! PanAxes to use while in 'look' camera behavior (free look). + //! PanAxes to use while in 'look' or 'orbit' camera behavior. inline PanAxes LookPan(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); return { orientation.GetBasisX(), orientation.GetBasisZ() }; } - //! PanAxes to use while in 'pivot' camera behavior. - inline PanAxes PivotPan(const Camera& camera) + //! Optional PanAxes to use while in 'orbit' camera behavior. + //! @note This will move the camera in the local X/Y plane instead of usual X/Z plane. + inline PanAxes OrbitPan(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); @@ -370,14 +374,23 @@ namespace AzFramework return { basisX, basisY }; } + //! TranslationDeltaFn is used by PanCameraInput and TranslateCameraInput + //! @note Choose the appropriate function if the behavior should be operating as a free look camera (TranslatePivotLook) + //! or an orbit camera (TranslateOffsetOrbit). using TranslationDeltaFn = AZStd::function; - inline void TranslatePivot(Camera& camera, const AZ::Vector3& delta) + //! Update the pivot camera position. + //! @note delta will need to have been transformed to world space, e.g. To move the camera right, (1, 0, 0) must + //! first be transformed by the orientation of the camera before being applied to m_pivot. + inline void TranslatePivotLook(Camera& camera, const AZ::Vector3& delta) { camera.m_pivot += delta; } - inline void TranslateOffset(Camera& camera, const AZ::Vector3& delta) + //! Update the offset camera position. + //! @note delta still needs to be transformed to world space (as with TranslatePivotLook) but internally this is undone + //! to be performed in local space when being applied to m_offset. + inline void TranslateOffsetOrbit(Camera& camera, const AZ::Vector3& delta) { camera.m_offset += camera.View().TransformVector(delta); } @@ -409,7 +422,7 @@ namespace AzFramework //! Axes to use while translating the camera. using TranslationAxesFn = AZStd::function; - //! TranslationAxes to use while in 'look' camera behavior (free look). + //! TranslationAxes to use while in 'look' or 'orbit' camera behavior. inline AZ::Matrix3x3 LookTranslation(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); @@ -421,8 +434,8 @@ namespace AzFramework return AZ::Matrix3x3::CreateFromColumns(basisX, basisY, basisZ); } - //! TranslationAxes to use while in 'pivot' camera behavior. - inline AZ::Matrix3x3 PivotTranslation(const Camera& camera) + //! Optional TranslationAxes to use while in 'orbit' camera behavior. + inline AZ::Matrix3x3 OrbitTranslation(const Camera& camera) { const AZ::Matrix3x3 orientation = camera.Rotation(); @@ -535,11 +548,11 @@ namespace AzFramework bool m_boost = false; //!< Is the translation speed currently being multiplied/scaled upwards. }; - //! A camera input to handle discrete scroll events that can modify the camera pivot distance. - class PivotDollyScrollCameraInput : public CameraInput + //! A camera input to handle discrete scroll events that can modify the camera offset. + class OrbitDollyScrollCameraInput : public CameraInput { public: - PivotDollyScrollCameraInput(); + OrbitDollyScrollCameraInput(); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -548,11 +561,11 @@ namespace AzFramework AZStd::function m_scrollSpeedFn; }; - //! A camera input to handle motion deltas that can modify the camera pivot distance. - class PivotDollyMotionCameraInput : public CameraInput + //! A camera input to handle motion deltas that can modify the camera offset. + class OrbitDollyMotionCameraInput : public CameraInput { public: - explicit PivotDollyMotionCameraInput(const InputChannelId& dollyChannelId); + explicit OrbitDollyMotionCameraInput(const InputChannelId& dollyChannelId); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -569,10 +582,10 @@ namespace AzFramework }; //! A camera input to handle discrete scroll events that can scroll (translate) the camera along its forward axis. - class ScrollTranslationCameraInput : public CameraInput + class LookScrollTranslationCameraInput : public CameraInput { public: - ScrollTranslationCameraInput(); + LookScrollTranslationCameraInput(); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; @@ -583,36 +596,36 @@ namespace AzFramework //! A camera input that doubles as its own set of camera inputs. //! It is 'exclusive', so does not overlap with other sibling camera inputs - it runs its own set of camera inputs as 'children'. - class PivotCameraInput : public CameraInput + class OrbitCameraInput : public CameraInput { public: using PivotFn = AZStd::function; - explicit PivotCameraInput(const InputChannelId& pivotChannelId); + explicit OrbitCameraInput(const InputChannelId& orbitChannelId); // CameraInput overrides ... bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; bool Exclusive() const override; - void SetPivotInputChannelId(const InputChannelId& pivotChanneId); + void SetOrbitInputChannelId(const InputChannelId& orbitChanneId); - Cameras m_pivotCameras; //!< The camera inputs to run when this camera input is active (only these will run as it is exclusive). + Cameras m_orbitCameras; //!< The camera inputs to run when this camera input is active (only these will run as it is exclusive). //! Override the default behavior for how a pivot point is calculated. void SetPivotFn(PivotFn pivotFn); private: - InputChannelId m_pivotChannelId; //!< Input channel to begin the pivot camera input. - PivotFn m_pivotFn; //!< The pivot position to use for this pivot camera (how is the pivot point calculated/retrieved). + InputChannelId m_orbitChannelId; //!< Input channel to begin the orbit camera input. + PivotFn m_pivotFn; //!< The pivot position to use for this orbit camera (how is the pivot point calculated/retrieved). }; - inline void PivotCameraInput::SetPivotFn(PivotFn pivotFn) + inline void OrbitCameraInput::SetPivotFn(PivotFn pivotFn) { m_pivotFn = AZStd::move(pivotFn); } - inline bool PivotCameraInput::Exclusive() const + inline bool OrbitCameraInput::Exclusive() const { return true; } @@ -624,9 +637,9 @@ namespace AzFramework return AZ::Vector3::CreateZero(); } - //! Callback to use for FocusCameraInput when a pivot camera is being used. + //! Callback to use for FocusCameraInput when a orbit camera is being used. //! @note This is when offset is non zero. - inline AZ::Vector3 FocusPivot(const float length) + inline AZ::Vector3 FocusOrbit(const float length) { return AZ::Vector3::CreateAxisY(-length); } @@ -667,7 +680,9 @@ namespace AzFramework bool HandleEvents(const InputEvent& event, const ScreenVector& cursorDelta, float scrollDelta) override; Camera StepCamera(const Camera& targetCamera, const ScreenVector& cursorDelta, float scrollDelta, float deltaTime) override; + //! HandleEvents delegates directly to m_handleEventsFn. AZStd::function m_handleEventsFn; + //! StepCamera delegates directly to m_stepCameraFn. AZStd::function m_stepCameraFn; }; diff --git a/Code/Framework/AzFramework/Tests/CameraInputTests.cpp b/Code/Framework/AzFramework/Tests/CameraInputTests.cpp index 1e0c805587..a89fb0bd84 100644 --- a/Code/Framework/AzFramework/Tests/CameraInputTests.cpp +++ b/Code/Framework/AzFramework/Tests/CameraInputTests.cpp @@ -53,31 +53,31 @@ namespace UnitTest }; m_firstPersonTranslateCamera = AZStd::make_shared( - m_translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); + m_translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivotLook); - m_pivotCamera = AZStd::make_shared(m_pivotChannelId); - m_pivotCamera->SetPivotFn( + m_orbitCamera = AZStd::make_shared(m_orbitChannelId); + m_orbitCamera->SetPivotFn( [this](const AZ::Vector3&, const AZ::Vector3&) { return m_pivot; }); - auto pivotRotateCamera = AZStd::make_shared(AzFramework::InputDeviceMouse::Button::Left); + auto orbitRotateCamera = AZStd::make_shared(AzFramework::InputDeviceMouse::Button::Left); // set rotate speed to be a value that will scale motion delta (pixels moved) by a thousandth. - pivotRotateCamera->m_rotateSpeedFn = []() + orbitRotateCamera->m_rotateSpeedFn = []() { return 0.001f; }; - auto pivotTranslateCamera = AZStd::make_shared( - m_translateCameraInputChannelIds, AzFramework::PivotTranslation, AzFramework::TranslateOffset); + auto orbitTranslateCamera = AZStd::make_shared( + m_translateCameraInputChannelIds, AzFramework::OrbitTranslation, AzFramework::TranslateOffsetOrbit); - m_pivotCamera->m_pivotCameras.AddCamera(pivotRotateCamera); - m_pivotCamera->m_pivotCameras.AddCamera(pivotTranslateCamera); + m_orbitCamera->m_orbitCameras.AddCamera(orbitRotateCamera); + m_orbitCamera->m_orbitCameras.AddCamera(orbitTranslateCamera); m_cameraSystem->m_cameras.AddCamera(m_firstPersonRotateCamera); m_cameraSystem->m_cameras.AddCamera(m_firstPersonTranslateCamera); - m_cameraSystem->m_cameras.AddCamera(m_pivotCamera); + m_cameraSystem->m_cameras.AddCamera(m_orbitCamera); // these tests rely on using motion delta, not cursor positions (default is true) AzFramework::ed_cameraSystemUseCursor = false; @@ -87,7 +87,7 @@ namespace UnitTest { AzFramework::ed_cameraSystemUseCursor = true; - m_pivotCamera.reset(); + m_orbitCamera.reset(); m_firstPersonRotateCamera.reset(); m_firstPersonTranslateCamera.reset(); @@ -97,11 +97,11 @@ namespace UnitTest AllocatorsTestFixture::TearDown(); } - AzFramework::InputChannelId m_pivotChannelId = AzFramework::InputChannelId("keyboard_key_modifier_alt_l"); + AzFramework::InputChannelId m_orbitChannelId = AzFramework::InputChannelId("keyboard_key_modifier_alt_l"); AzFramework::TranslateCameraInputChannelIds m_translateCameraInputChannelIds; AZStd::shared_ptr m_firstPersonRotateCamera; AZStd::shared_ptr m_firstPersonTranslateCamera; - AZStd::shared_ptr m_pivotCamera; + AZStd::shared_ptr m_orbitCamera; AZ::Vector3 m_pivot = AZ::Vector3::CreateZero(); //! This is approximately Pi/2 * 1000 - this can be used to rotate the camera 90 degrees (pitch or yaw based @@ -109,17 +109,17 @@ namespace UnitTest inline static const int PixelMotionDelta = 1570; }; - TEST_F(CameraInputFixture, BeginAndEndPivotCameraInputConsumesCorrectEvents) + TEST_F(CameraInputFixture, BeginAndEndOrbitCameraInputConsumesCorrectEvents) { - // begin pivot camera + // begin orbit camera const bool consumed1 = HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceKeyboard::Key::ModifierAltL, AzFramework::InputChannel::State::Began }); - // begin listening for pivot rotate (click detector) - event is not consumed + // begin listening for orbit rotate (click detector) - event is not consumed const bool consumed2 = HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); - // begin pivot rotate (mouse has moved sufficient distance to initiate) + // begin orbit rotate (mouse has moved sufficient distance to initiate) const bool consumed3 = HandleEventAndUpdate(AzFramework::HorizontalMotionEvent{ 5 }); - // end pivot (mouse up) - event is not consumed + // end orbit (mouse up) - event is not consumed const bool consumed4 = HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Ended }); @@ -260,10 +260,10 @@ namespace UnitTest EXPECT_TRUE(activationEnded); } - TEST_F(CameraInputFixture, PivotCameraInputHandlesLookAtPointAndSelfAtSamePositionWhenPivoting) + TEST_F(CameraInputFixture, OrbitCameraInputHandlesLookAtPointAndSelfAtSamePositionWhenOrbiting) { // create pathological lookAtFn that just returns the same position as the camera - m_pivotCamera->SetPivotFn( + m_orbitCamera->SetPivotFn( [](const AZ::Vector3& position, [[maybe_unused]] const AZ::Vector3& direction) { return position; @@ -275,7 +275,7 @@ namespace UnitTest AZ::Transform::CreateFromQuaternionAndTranslation( AZ::Quaternion::CreateFromEulerAnglesDegrees(AZ::Vector3(0.0f, 0.0f, 90.0f)), expectedCameraPosition)); - HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_orbitChannelId, AzFramework::InputChannel::State::Began }); // verify the camera yaw has not changed and pivot point matches the expected camera position using ::testing::FloatNear; @@ -321,14 +321,14 @@ namespace UnitTest EXPECT_THAT(m_camera.m_offset, IsClose(AZ::Vector3::CreateZero())); } - TEST_F(CameraInputFixture, PivotRotateCameraInputRotatesPitchOffsetByNinetyDegreesWithRequiredPixelDelta) + TEST_F(CameraInputFixture, OrbitRotateCameraInputRotatesPitchOffsetByNinetyDegreesWithRequiredPixelDelta) { const auto cameraStartingPosition = AZ::Vector3::CreateAxisY(-20.0f); m_targetCamera.m_pivot = cameraStartingPosition; m_pivot = AZ::Vector3::CreateAxisY(-10.0f); - HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_orbitChannelId, AzFramework::InputChannel::State::Began }); HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); HandleEventAndUpdate(AzFramework::VerticalMotionEvent{ PixelMotionDelta }); @@ -344,14 +344,14 @@ namespace UnitTest EXPECT_THAT(m_camera.Translation(), IsCloseTolerance(expectedCameraEndingPosition, 0.01f)); } - TEST_F(CameraInputFixture, PivotRotateCameraInputRotatesYawOffsetByNinetyDegreesWithRequiredPixelDelta) + TEST_F(CameraInputFixture, OrbitRotateCameraInputRotatesYawOffsetByNinetyDegreesWithRequiredPixelDelta) { const auto cameraStartingPosition = AZ::Vector3(15.0f, -20.0f, 0.0f); m_targetCamera.m_pivot = cameraStartingPosition; m_pivot = AZ::Vector3(10.0f, -10.0f, 0.0f); - HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_pivotChannelId, AzFramework::InputChannel::State::Began }); + HandleEventAndUpdate(AzFramework::DiscreteInputEvent{ m_orbitChannelId, AzFramework::InputChannel::State::Began }); HandleEventAndUpdate( AzFramework::DiscreteInputEvent{ AzFramework::InputDeviceMouse::Button::Left, AzFramework::InputChannel::State::Began }); HandleEventAndUpdate(AzFramework::HorizontalMotionEvent{ -PixelMotionDelta }); From 77c23b6c8f59aa1a0ee9026c670be36981f664c7 Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Thu, 7 Oct 2021 08:27:48 -0400 Subject: [PATCH 151/226] Hierarchy imgui debugger, first take Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../MultiplayerDebugHierarchyReporter.cpp | 200 ++++++++++++++++++ .../Debug/MultiplayerDebugHierarchyReporter.h | 52 +++++ .../Debug/MultiplayerDebugSystemComponent.cpp | 24 +++ .../Debug/MultiplayerDebugSystemComponent.h | 5 + .../Code/multiplayer_debug_files.cmake | 2 + 5 files changed, 283 insertions(+) create mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp create mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp new file mode 100644 index 0000000000..32e9a776a4 --- /dev/null +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp @@ -0,0 +1,200 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "MultiplayerDebugHierarchyReporter.h" + +#include +#include +#include +#include + +#if defined(IMGUI_ENABLED) +#include +#endif + +#pragma optimize("", off) + +namespace Multiplayer +{ + MultiplayerDebugHierarchyReporter::MultiplayerDebugHierarchyReporter() + : m_updateDebugOverlay([this]() { UpdateDebugOverlay(); }, AZ::Name("UpdateHierarchyDebug")) + { + CollectHierarchyRoots(); + + AZ::EntitySystemBus::Handler::BusConnect(); + m_updateDebugOverlay.Enqueue(AZ::TimeMs{ 0 }, true); + } + + MultiplayerDebugHierarchyReporter::~MultiplayerDebugHierarchyReporter() + { + AZ::EntitySystemBus::Handler::BusDisconnect(); + } + + // -------------------------------------------------------------------------------------------- + void MultiplayerDebugHierarchyReporter::OnImGuiUpdate() + { +#if defined(IMGUI_ENABLED) + for (const auto& root : m_hierarchyRoots) + { + if (const auto* rootComponent = root.second.m_rootComponent) + { + if (rootComponent->IsHierarchicalRoot()) + { + const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); + + if (ImGui::TreeNode(rootComponent->GetEntity()->GetName().c_str(), + "Hierarchy, Root entity name [%s]: %4zu members", + rootComponent->GetEntity()->GetName().c_str(), + hierarchicalChildren.size())) + { + ImGui::Separator(); + ImGui::Columns(4, "hierarchy_columns"); + ImGui::Text("EntityId"); + ImGui::NextColumn(); + ImGui::Text("NetEntityId"); + ImGui::NextColumn(); + ImGui::Text("Entity Name"); + ImGui::NextColumn(); + ImGui::Text("Role"); + ImGui::NextColumn(); + + ImGui::Separator(); + ImGui::Columns(4, "hierarchy child info"); + + bool firstEntity = true; + for (const AZ::Entity* entity : hierarchicalChildren) + { + ImGui::Text("%s", entity->GetId().ToString().c_str()); + ImGui::NextColumn(); + ImGui::Text("%u", GetMultiplayer()->GetNetworkEntityManager()->GetNetEntityIdById(entity->GetId())); + ImGui::NextColumn(); + ImGui::Text("%s", entity->GetName().c_str()); + ImGui::NextColumn(); + + if (firstEntity) + { + ImGui::Text("Root node"); + } + else if (entity->FindComponent()) + { + ImGui::Text("Inner root node"); + } + else if (entity->FindComponent()) + { + ImGui::Text("Child node"); + } + ImGui::NextColumn(); + + firstEntity = false; + } + + ImGui::Columns(1); + ImGui::TreePop(); + } + } + } + } +#endif + } + + + void MultiplayerDebugHierarchyReporter::UpdateDebugOverlay() + { + if (!m_hierarchyRoots.empty()) + { + if (m_debugDisplay == nullptr) + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + m_debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + } + + const AZ::u32 stateBefore = m_debugDisplay->GetState(); + m_debugDisplay->SetColor(AZ::Colors::White); + + for (const auto& root : m_hierarchyRoots) + { + if (const auto* rootComponent = root.second.m_rootComponent) + { + if (rootComponent->IsHierarchicalRoot()) + { + const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); + + azsprintf(m_statusBuffer, "Hierarchy [%s] %u members", rootComponent->GetEntity()->GetName().c_str(), + aznumeric_cast(hierarchicalChildren.size())); + + AZ::Vector3 entityPosition = rootComponent->GetEntity()->GetTransform()->GetWorldTranslation(); + constexpr bool centerText = true; + m_debugDisplay->DrawTextLabel(entityPosition, 1.0f, m_statusBuffer, centerText, 0, 0); + } + } + } + + m_debugDisplay->SetState(stateBefore); + } + } + + void MultiplayerDebugHierarchyReporter::OnEntityActivated(const AZ::EntityId& entityId) + { + if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) + { + if (auto* rootComponent = childEntity->FindComponent()) + { + HierarchyRootInfo info; + info.m_rootComponent = rootComponent; + rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); + rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); + + m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + } + } + } + + void MultiplayerDebugHierarchyReporter::OnEntityDeactivated(const AZ::EntityId& entityId) + { + if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) + { + if (auto* rootComponent = childEntity->FindComponent()) + { + m_hierarchyRoots.erase(rootComponent); + } + } + } + + void MultiplayerDebugHierarchyReporter::CollectHierarchyRoots() + { + AZStd::vector gatheredEntries; + const AZ::Sphere awarenessSphere = AZ::Sphere(AZ::Vector3::CreateZero(), 1000.f); + AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(awarenessSphere, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) + { + gatheredEntries.reserve(gatheredEntries.size() + nodeData.m_entries.size()); + for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) + { + if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) + { + gatheredEntries.push_back(visEntry); + } + } + } + ); + + for (const AzFramework::VisibilityEntry* entry : gatheredEntries) + { + const AZ::Entity* entity = static_cast(entry->m_userData); + if (auto* rootComponent = entity->FindComponent()) + { + HierarchyRootInfo info; + info.m_rootComponent = rootComponent; + rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); + rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); + + m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + } + } + } +} diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h new file mode 100644 index 0000000000..98a131614c --- /dev/null +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace Multiplayer +{ + class MultiplayerDebugHierarchyReporter + : public AZ::EntitySystemBus::Handler + { + public: + MultiplayerDebugHierarchyReporter(); + ~MultiplayerDebugHierarchyReporter() override; + + //! main update loop + void OnImGuiUpdate(); + + //! Draws bandwidth text over entities + void UpdateDebugOverlay(); + + //! EntitySystemBus overrides. + void OnEntityActivated(const AZ::EntityId& entityId) override; + void OnEntityDeactivated(const AZ::EntityId& entityId) override; + + private: + AZ::ScheduledEvent m_updateDebugOverlay; + + AzFramework::DebugDisplayRequests* m_debugDisplay = nullptr; + + struct HierarchyRootInfo + { + NetworkHierarchyRootComponent* m_rootComponent = nullptr; + NetworkHierarchyChangedEvent::Handler m_changedEvent; + NetworkHierarchyLeaveEvent::Handler m_leaveEvent; + }; + + AZStd::unordered_map m_hierarchyRoots; + void CollectHierarchyRoots(); + + char m_statusBuffer[100] = {}; + }; +} diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.cpp b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.cpp index 422b2f0cae..b23bc677f0 100644 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.cpp @@ -71,6 +71,7 @@ namespace Multiplayer ImGui::Checkbox("Networking Stats", &m_displayNetworkingStats); ImGui::Checkbox("Multiplayer Stats", &m_displayMultiplayerStats); ImGui::Checkbox("Multiplayer Entity Stats", &m_displayPerEntityStats); + ImGui::Checkbox("Multiplayer Hierarchy Debugger", &m_displayHierarchyDebugger); ImGui::EndMenu(); } } @@ -464,6 +465,29 @@ namespace Multiplayer } } } + + if (m_displayHierarchyDebugger) + { + if (ImGui::Begin("Multiplayer Hierarchy Debugger", &m_displayHierarchyDebugger)) + { + if (m_hierarchyDebugger == nullptr) + { + m_hierarchyDebugger = AZStd::make_unique(); + } + + if (m_hierarchyDebugger) + { + m_hierarchyDebugger->OnImGuiUpdate(); + } + } + } + else + { + if (m_hierarchyDebugger) + { + m_hierarchyDebugger.reset(); + } + } } #endif } diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.h b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.h index 7b3c852f58..9becf1543c 100644 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugSystemComponent.h @@ -8,6 +8,8 @@ #pragma once +#include "MultiplayerDebugHierarchyReporter.h" + #include #include #include @@ -62,5 +64,8 @@ namespace Multiplayer bool m_displayPerEntityStats = false; AZStd::unique_ptr m_reporter; + + bool m_displayHierarchyDebugger = false; + AZStd::unique_ptr m_hierarchyDebugger; }; } diff --git a/Gems/Multiplayer/Code/multiplayer_debug_files.cmake b/Gems/Multiplayer/Code/multiplayer_debug_files.cmake index 37a1c91640..1d85dd8149 100644 --- a/Gems/Multiplayer/Code/multiplayer_debug_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_debug_files.cmake @@ -9,6 +9,8 @@ set(FILES Source/Debug/MultiplayerDebugByteReporter.cpp Source/Debug/MultiplayerDebugByteReporter.h + Source/Debug/MultiplayerDebugHierarchyReporter.cpp + Source/Debug/MultiplayerDebugHierarchyReporter.h Source/Debug/MultiplayerDebugPerEntityReporter.cpp Source/Debug/MultiplayerDebugPerEntityReporter.h Source/Debug/MultiplayerDebugModule.cpp From d1947c68c96e3b042851a20ad027266f44edc809 Mon Sep 17 00:00:00 2001 From: AMZN-AlexOteiza <82234181+AMZN-AlexOteiza@users.noreply.github.com> Date: Thu, 7 Oct 2021 13:29:09 +0100 Subject: [PATCH 152/226] Added extra output and callstack information for improving debugging automated tests (#4528) Signed-off-by: AMZN-AlexOteiza --- Code/Editor/CryEdit.cpp | 2 ++ Code/Framework/AzCore/AzCore/Debug/Trace.cpp | 2 ++ Code/Legacy/CrySystem/DebugCallStack.cpp | 3 +++ 3 files changed, 7 insertions(+) diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index 4aa3d22114..abba2bb9c6 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -2124,6 +2124,8 @@ bool CCryEditApp::FixDanglingSharedMemory(const QString& sharedMemName) const int CCryEditApp::ExitInstance(int exitCode) { + AZ_TracePrintf("Exit", "Called ExitInstance() with exit code: 0x%x", exitCode); + if (m_pEditor) { m_pEditor->OnBeginShutdownSequence(); diff --git a/Code/Framework/AzCore/AzCore/Debug/Trace.cpp b/Code/Framework/AzCore/AzCore/Debug/Trace.cpp index 14504cc282..3edcbaa273 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Trace.cpp +++ b/Code/Framework/AzCore/AzCore/Debug/Trace.cpp @@ -224,6 +224,8 @@ namespace AZ void Debug::Trace::Terminate(int exitCode) { + AZ_TracePrintf("Exit", "Called Terminate() with exit code: 0x%x", exitCode); + AZ::Debug::Trace::PrintCallstack("Exit"); Platform::Terminate(exitCode); } diff --git a/Code/Legacy/CrySystem/DebugCallStack.cpp b/Code/Legacy/CrySystem/DebugCallStack.cpp index 8018e46d69..19fe4ce8df 100644 --- a/Code/Legacy/CrySystem/DebugCallStack.cpp +++ b/Code/Legacy/CrySystem/DebugCallStack.cpp @@ -222,6 +222,9 @@ void UpdateFPExceptionsMaskForThreads() ////////////////////////////////////////////////////////////////////////// int DebugCallStack::handleException(EXCEPTION_POINTERS* exception_pointer) { + AZ_TracePrintf("Exit", "Exception with exit code: 0x%x", exception_pointer->ExceptionRecord->ExceptionCode); + AZ::Debug::Trace::PrintCallstack("Exit"); + if (gEnv == NULL) { return EXCEPTION_EXECUTE_HANDLER; From a2c16fa24fb1f0f9509542b9f0404e2204454e1d Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:51:22 -0500 Subject: [PATCH 153/226] adjust the default number of worker threads created by the TaskGraph & Job systems Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp | 2 +- .../Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp index e98711049c..59f9c5f6a2 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp @@ -20,7 +20,7 @@ #include -AZ_CVAR(float, cl_jobThreadsConcurrencyRatio, 0.5f, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine creates at initialization"); +AZ_CVAR(float, cl_jobThreadsConcurrencyRatio, 0.6f, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine creates at initialization"); AZ_CVAR(uint32_t, cl_jobThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system number of hardware threads that are reserved for O3DE system threads"); AZ_CVAR(uint32_t, cl_jobThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system minimum number of worker threads to create after scaling the number of hw threads"); diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp index 6548d9d162..5ae0fb0394 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp @@ -15,7 +15,7 @@ // Create a cvar as a central location for experimentation with switching from the Job system to TaskGraph system. AZ_CVAR(bool, cl_activateTaskGraph, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Flag clients of TaskGraph to switch between jobs/taskgraph (Note does not disable task graph system)"); -AZ_CVAR(float, cl_taskGraphThreadsConcurrencyRatio, 0.75f, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph calculate the number of worker threads to spawn by scaling the number of hw threads, value is clamped between 0.0f and 1.0f"); +AZ_CVAR(float, cl_taskGraphThreadsConcurrencyRatio, 1.0f, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph calculate the number of worker threads to spawn by scaling the number of hw threads, value is clamped between 0.0f and 1.0f"); AZ_CVAR(uint32_t, cl_taskGraphThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph number of hardware threads that are reserved for O3DE system threads"); AZ_CVAR(uint32_t, cl_taskGraphThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph minimum number of worker threads to create after scaling the number of hw threads"); @@ -33,7 +33,7 @@ namespace AZ // min = cl_taskGraphThreadsMinNumber, // max = number of hardware threads - cl_taskGraphThreadsNumReserved uint32_t scaledHardwareThreads = AZ::GetMax( cl_taskGraphThreadsMinNumber, static_cast(AZStd::floor( 0.5f + AZ::GetClamp(cl_taskGraphThreadsConcurrencyRatio, 0.0f, 1.0f) * static_cast(AZStd::thread::hardware_concurrency() - cl_taskGraphThreadsNumReserved)))); - m_taskExecutor = aznew TaskExecutor(scaledHardwareThreads); + m_taskExecutor = aznew TaskExecutor(scaledHardwareThreads); TaskExecutor::SetInstance(m_taskExecutor); Interface::Register(this); } From 863a7c8382d484378ffc648324cb993eb7e8fd2a Mon Sep 17 00:00:00 2001 From: John Date: Thu, 7 Oct 2021 17:19:22 +0100 Subject: [PATCH 154/226] Address PR comments. Signed-off-by: John --- Code/Editor/Core/LevelEditorMenuHandler.cpp | 12 ++++++------ Code/Editor/QtViewPaneManager.h | 2 +- .../API/ComponentModeCollectionInterface.h | 3 ++- .../API/ViewportEditorModeTrackerNotificationBus.cpp | 2 +- .../ComponentMode/ComponentModeCollection.cpp | 5 +++-- .../ComponentMode/ComponentModeCollection.h | 2 +- .../UI/PropertyEditor/EntityPropertyEditor.cpp | 4 ++-- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/Code/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Editor/Core/LevelEditorMenuHandler.cpp index 25467756ac..ec92622f02 100644 --- a/Code/Editor/Core/LevelEditorMenuHandler.cpp +++ b/Code/Editor/Core/LevelEditorMenuHandler.cpp @@ -1191,8 +1191,8 @@ void LevelEditorMenuHandler::OnEditorModeActivated( { if (mode == ViewportEditorMode::Component) { - auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); - if (!menuWrapper.isNull()) + if (auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); + !menuWrapper.isNull()) { // copy of menu actions auto actions = menuWrapper.Get()->actions(); @@ -1222,8 +1222,8 @@ void LevelEditorMenuHandler::OnEditorModeDeactivated( void LevelEditorMenuHandler::AddEditMenuAction(QAction* action) { - auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); - if (!menuWrapper.isNull()) + if (auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); + !menuWrapper.isNull()) { menuWrapper.Get()->addAction(action); } @@ -1247,8 +1247,8 @@ void LevelEditorMenuHandler::AddMenuAction(AZStd::string_view categoryId, QActio void LevelEditorMenuHandler::RestoreEditMenuToDefault() { - auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); - if (!menuWrapper.isNull()) + if (auto menuWrapper = m_actionManager->FindMenu(s_editMenuId); + !menuWrapper.isNull()) { menuWrapper.Get()->clear(); PopulateEditMenu(menuWrapper); diff --git a/Code/Editor/QtViewPaneManager.h b/Code/Editor/QtViewPaneManager.h index fe568e5438..0515ae726e 100644 --- a/Code/Editor/QtViewPaneManager.h +++ b/Code/Editor/QtViewPaneManager.h @@ -247,7 +247,7 @@ private: AZStd::unique_ptr m_componentModeNotifications; //!< Helper for EditorComponentModeNotificationBus so - //!< QtViewPaneManager does not need to inherit directly from it. */ + //!< QtViewPaneManager does not need to inherit directly from it. */ using EditorWindowRequestBusImpl = AzToolsFramework::EditorWindowRequestBusImpl; EditorWindowRequestBusImpl m_windowRequest; //!< Helper for EditorWindowRequestBus so diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h index 39cd6bd6a3..4f9d72cb4d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ComponentModeCollectionInterface.h @@ -23,6 +23,7 @@ namespace AzToolsFramework virtual ~ComponentModeCollectionInterface() = default; //! Retrieves the list of all Component types (usually one). - virtual const AZStd::vector& GetComponentTypes() const = 0; + //! @note If called outside of component mode, an empty vector will be returned. + virtual AZStd::vector GetComponentTypes() const = 0; }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp index 278f9db950..a61ea088d0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/API/ViewportEditorModeTrackerNotificationBus.cpp @@ -13,7 +13,7 @@ namespace AzToolsFramework { void ViewportEditorModeNotifications::Reflect(AZ::ReflectContext* context) { - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + if (auto* behaviorContext = azrtti_cast(context)) { behaviorContext->EBus("ViewportEditorModeNotificationsBus") ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp index e816c0ce4c..1768cb5920 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.cpp @@ -203,9 +203,10 @@ namespace AzToolsFramework } } - const AZStd::vector& ComponentModeCollection::GetComponentTypes() const + AZStd::vector ComponentModeCollection::GetComponentTypes() const { - return m_activeComponentTypes; + // If in component mode, return the active component types, otherwise return an empty vector + return InComponentMode() ? m_activeComponentTypes : AZStd::vector{}; } void ComponentModeCollection::BeginComponentMode() diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h index fb35ca8971..3b7690b969 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ComponentMode/ComponentModeCollection.h @@ -92,7 +92,7 @@ namespace AzToolsFramework void PopulateViewportUi(); // ComponentModeCollectionInterface overrides ... - const AZStd::vector& GetComponentTypes() const override; + AZStd::vector GetComponentTypes() const override; private: // Internal helper used by Select[|Prev|Next]ActiveComponentMode diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp index ad62614770..9ffe8021e3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp @@ -5710,7 +5710,7 @@ namespace AzToolsFramework { DisableComponentActions(this, m_entityComponentActions); SetPropertyEditorState(m_gui, false); - const auto& componentModeTypes = m_componentModeCollection->GetComponentTypes(); + const auto componentModeTypes = m_componentModeCollection->GetComponentTypes(); m_disabled = true; if (!componentModeTypes.empty()) @@ -5735,7 +5735,7 @@ namespace AzToolsFramework { EnableComponentActions(this, m_entityComponentActions); SetPropertyEditorState(m_gui, true); - const auto& componentModeTypes = m_componentModeCollection->GetComponentTypes(); + const auto componentModeTypes = m_componentModeCollection->GetComponentTypes(); m_disabled = false; for (auto componentEditor : m_componentEditors) From a114077e726c95fbb21721ce4c7eb4fb2b7145ce Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Thu, 7 Oct 2021 12:53:33 -0400 Subject: [PATCH 155/226] Final touches on the first pass of imgui hierarchy debugger Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../MultiplayerDebugHierarchyDebugger.cpp | 198 ++++++++++++++++++ .../Debug/MultiplayerDebugHierarchyDebugger.h | 55 +++++ .../MultiplayerDebugHierarchyReporter.cpp | 45 +++- .../Debug/MultiplayerDebugHierarchyReporter.h | 13 +- 4 files changed, 298 insertions(+), 13 deletions(-) create mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp create mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp new file mode 100644 index 0000000000..393f67474b --- /dev/null +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp @@ -0,0 +1,198 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include "MultiplayerDebugHierarchyDebugger.h" + +#include +#include +#include +#include + +#if defined(IMGUI_ENABLED) +#include +#endif + +namespace Multiplayer +{ + MultiplayerDebugHierarchyReporter::MultiplayerDebugHierarchyReporter() + : m_updateDebugOverlay([this]() { UpdateDebugOverlay(); }, AZ::Name("UpdateHierarchyDebug")) + { + CollectHierarchyRoots(); + + AZ::EntitySystemBus::Handler::BusConnect(); + m_updateDebugOverlay.Enqueue(AZ::TimeMs{ 0 }, true); + } + + MultiplayerDebugHierarchyReporter::~MultiplayerDebugHierarchyReporter() + { + AZ::EntitySystemBus::Handler::BusDisconnect(); + } + + // -------------------------------------------------------------------------------------------- + void MultiplayerDebugHierarchyReporter::OnImGuiUpdate() + { +#if defined(IMGUI_ENABLED) + for (const auto& root : m_hierarchyRoots) + { + if (const auto* rootComponent = root.second.m_rootComponent) + { + if (rootComponent->IsHierarchicalRoot()) + { + const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); + + if (ImGui::TreeNode(rootComponent->GetEntity()->GetName().c_str(), + "Hierarchy, Root entity name [%s]: %4zu members", + rootComponent->GetEntity()->GetName().c_str(), + hierarchicalChildren.size())) + { + ImGui::Separator(); + ImGui::Columns(4, "hierarchy_columns"); + ImGui::Text("EntityId"); + ImGui::NextColumn(); + ImGui::Text("NetEntityId"); + ImGui::NextColumn(); + ImGui::Text("Entity Name"); + ImGui::NextColumn(); + ImGui::Text("Role"); + ImGui::NextColumn(); + + ImGui::Separator(); + ImGui::Columns(4, "hierarchy child info"); + + bool firstEntity = true; + for (const AZ::Entity* entity : hierarchicalChildren) + { + ImGui::Text("%s", entity->GetId().ToString().c_str()); + ImGui::NextColumn(); + ImGui::Text("%u", GetMultiplayer()->GetNetworkEntityManager()->GetNetEntityIdById(entity->GetId())); + ImGui::NextColumn(); + ImGui::Text("%s", entity->GetName().c_str()); + ImGui::NextColumn(); + + if (firstEntity) + { + ImGui::Text("Root node"); + } + else if (entity->FindComponent()) + { + ImGui::Text("Inner root node"); + } + else if (entity->FindComponent()) + { + ImGui::Text("Child node"); + } + ImGui::NextColumn(); + + firstEntity = false; + } + + ImGui::Columns(1); + ImGui::TreePop(); + } + } + } + } +#endif + } + + + void MultiplayerDebugHierarchyReporter::UpdateDebugOverlay() + { + if (!m_hierarchyRoots.empty()) + { + if (m_debugDisplay == nullptr) + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); + m_debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + } + + const AZ::u32 stateBefore = m_debugDisplay->GetState(); + m_debugDisplay->SetColor(AZ::Colors::White); + + for (const auto& root : m_hierarchyRoots) + { + if (const auto* rootComponent = root.second.m_rootComponent) + { + if (rootComponent->IsHierarchicalRoot()) + { + const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); + + azsprintf(m_statusBuffer, "Hierarchy [%s] %u members", rootComponent->GetEntity()->GetName().c_str(), + aznumeric_cast(hierarchicalChildren.size())); + + AZ::Vector3 entityPosition = rootComponent->GetEntity()->GetTransform()->GetWorldTranslation(); + constexpr bool centerText = true; + m_debugDisplay->DrawTextLabel(entityPosition, 1.0f, m_statusBuffer, centerText, 0, 0); + } + } + } + + m_debugDisplay->SetState(stateBefore); + } + } + + void MultiplayerDebugHierarchyReporter::OnEntityActivated(const AZ::EntityId& entityId) + { + if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) + { + if (auto* rootComponent = childEntity->FindComponent()) + { + HierarchyRootInfo info; + info.m_rootComponent = rootComponent; + rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); + rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); + + m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + } + } + } + + void MultiplayerDebugHierarchyReporter::OnEntityDeactivated(const AZ::EntityId& entityId) + { + if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) + { + if (auto* rootComponent = childEntity->FindComponent()) + { + m_hierarchyRoots.erase(rootComponent); + } + } + } + + void MultiplayerDebugHierarchyReporter::CollectHierarchyRoots() + { + AZStd::vector gatheredEntries; + const AZ::Sphere awarenessSphere = AZ::Sphere(AZ::Vector3::CreateZero(), 1000.f); + AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(awarenessSphere, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) + { + gatheredEntries.reserve(gatheredEntries.size() + nodeData.m_entries.size()); + for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) + { + if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) + { + gatheredEntries.push_back(visEntry); + } + } + } + ); + + for (const AzFramework::VisibilityEntry* entry : gatheredEntries) + { + const AZ::Entity* entity = static_cast(entry->m_userData); + if (auto* rootComponent = entity->FindComponent()) + { + HierarchyRootInfo info; + info.m_rootComponent = rootComponent; + rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); + rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); + + m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + } + } + } +} diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h new file mode 100644 index 0000000000..978664b96b --- /dev/null +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include +#include + +namespace Multiplayer +{ + /** + * \brief Reports hierarchy information in the scene. + */ + class MultiplayerDebugHierarchyReporter + : public AZ::EntitySystemBus::Handler + { + public: + MultiplayerDebugHierarchyReporter(); + ~MultiplayerDebugHierarchyReporter() override; + + //! main update loop + void OnImGuiUpdate(); + + //! Draws hierarchy information over hierarchy root entities + void UpdateDebugOverlay(); + + //! EntitySystemBus overrides. + void OnEntityActivated(const AZ::EntityId& entityId) override; + void OnEntityDeactivated(const AZ::EntityId& entityId) override; + + private: + AZ::ScheduledEvent m_updateDebugOverlay; + + AzFramework::DebugDisplayRequests* m_debugDisplay = nullptr; + + struct HierarchyRootInfo + { + NetworkHierarchyRootComponent* m_rootComponent = nullptr; + NetworkHierarchyChangedEvent::Handler m_changedEvent; + NetworkHierarchyLeaveEvent::Handler m_leaveEvent; + }; + + AZStd::unordered_map m_hierarchyRoots; + void CollectHierarchyRoots(); + + char m_statusBuffer[100] = {}; + }; +} diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp index 32e9a776a4..7c38a340eb 100644 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.cpp @@ -8,6 +8,8 @@ #include "MultiplayerDebugHierarchyReporter.h" +#include +#include #include #include #include @@ -17,8 +19,6 @@ #include #endif -#pragma optimize("", off) - namespace Multiplayer { MultiplayerDebugHierarchyReporter::MultiplayerDebugHierarchyReporter() @@ -39,6 +39,9 @@ namespace Multiplayer void MultiplayerDebugHierarchyReporter::OnImGuiUpdate() { #if defined(IMGUI_ENABLED) + ImGui::Text("Hierarchies"); + ImGui::Separator(); + for (const auto& root : m_hierarchyRoots) { if (const auto* rootComponent = root.second.m_rootComponent) @@ -48,7 +51,7 @@ namespace Multiplayer const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); if (ImGui::TreeNode(rootComponent->GetEntity()->GetName().c_str(), - "Hierarchy, Root entity name [%s]: %4zu members", + "[%s] %4zu members", rootComponent->GetEntity()->GetName().c_str(), hierarchicalChildren.size())) { @@ -99,6 +102,16 @@ namespace Multiplayer } } } + + ImGui::Separator(); + if (ImGui::InputFloat("Awareness Radius", &m_awarenessRadius)) + { + CollectHierarchyRoots(); + } + if (ImGui::Button("Refresh")) + { + CollectHierarchyRoots(); + } #endif } @@ -168,9 +181,18 @@ namespace Multiplayer void MultiplayerDebugHierarchyReporter::CollectHierarchyRoots() { + m_hierarchyRoots.clear(); + AZ::Sphere awarenessSphere(AZ::Vector3::CreateZero(), m_awarenessRadius); + + const auto viewportContextManager = AZ::Interface::Get(); + if (const auto viewportContext = viewportContextManager->GetDefaultViewportContext()) + { + awarenessSphere.SetCenter(viewportContext->GetCameraTransform().GetTranslation()); + } + AZStd::vector gatheredEntries; - const AZ::Sphere awarenessSphere = AZ::Sphere(AZ::Vector3::CreateZero(), 1000.f); - AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(awarenessSphere, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) + AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(awarenessSphere, + [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { gatheredEntries.reserve(gatheredEntries.size() + nodeData.m_entries.size()); for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) @@ -188,12 +210,15 @@ namespace Multiplayer const AZ::Entity* entity = static_cast(entry->m_userData); if (auto* rootComponent = entity->FindComponent()) { - HierarchyRootInfo info; - info.m_rootComponent = rootComponent; - rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); - rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); + if (awarenessSphere.GetCenter().GetDistanceEstimate(entity->GetTransform()->GetWorldTranslation()) < m_awarenessRadius) + { + HierarchyRootInfo info; + info.m_rootComponent = rootComponent; + rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); + rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); - m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); + } } } } diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h index 98a131614c..2ce7e055a0 100644 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h +++ b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyReporter.h @@ -15,6 +15,9 @@ namespace Multiplayer { + /** + * /brief Provides ImGui and debug draw hierarchy information at runtime. + */ class MultiplayerDebugHierarchyReporter : public AZ::EntitySystemBus::Handler { @@ -22,15 +25,17 @@ namespace Multiplayer MultiplayerDebugHierarchyReporter(); ~MultiplayerDebugHierarchyReporter() override; - //! main update loop + //! Main update loop. void OnImGuiUpdate(); - //! Draws bandwidth text over entities + //! Draws hierarchy information over hierarchy root entities. void UpdateDebugOverlay(); //! EntitySystemBus overrides. + //! @{ void OnEntityActivated(const AZ::EntityId& entityId) override; void OnEntityDeactivated(const AZ::EntityId& entityId) override; + //! @} private: AZ::ScheduledEvent m_updateDebugOverlay; @@ -46,7 +51,9 @@ namespace Multiplayer AZStd::unordered_map m_hierarchyRoots; void CollectHierarchyRoots(); - + char m_statusBuffer[100] = {}; + + float m_awarenessRadius = 1000.f; }; } From ecd358a53e76a2d66f538d24975142900d1a0b1a Mon Sep 17 00:00:00 2001 From: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> Date: Thu, 7 Oct 2021 12:56:44 -0400 Subject: [PATCH 156/226] Cleaning up Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com> --- .../MultiplayerDebugHierarchyDebugger.cpp | 198 ------------------ .../Debug/MultiplayerDebugHierarchyDebugger.h | 55 ----- 2 files changed, 253 deletions(-) delete mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp delete mode 100644 Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp deleted file mode 100644 index 393f67474b..0000000000 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "MultiplayerDebugHierarchyDebugger.h" - -#include -#include -#include -#include - -#if defined(IMGUI_ENABLED) -#include -#endif - -namespace Multiplayer -{ - MultiplayerDebugHierarchyReporter::MultiplayerDebugHierarchyReporter() - : m_updateDebugOverlay([this]() { UpdateDebugOverlay(); }, AZ::Name("UpdateHierarchyDebug")) - { - CollectHierarchyRoots(); - - AZ::EntitySystemBus::Handler::BusConnect(); - m_updateDebugOverlay.Enqueue(AZ::TimeMs{ 0 }, true); - } - - MultiplayerDebugHierarchyReporter::~MultiplayerDebugHierarchyReporter() - { - AZ::EntitySystemBus::Handler::BusDisconnect(); - } - - // -------------------------------------------------------------------------------------------- - void MultiplayerDebugHierarchyReporter::OnImGuiUpdate() - { -#if defined(IMGUI_ENABLED) - for (const auto& root : m_hierarchyRoots) - { - if (const auto* rootComponent = root.second.m_rootComponent) - { - if (rootComponent->IsHierarchicalRoot()) - { - const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); - - if (ImGui::TreeNode(rootComponent->GetEntity()->GetName().c_str(), - "Hierarchy, Root entity name [%s]: %4zu members", - rootComponent->GetEntity()->GetName().c_str(), - hierarchicalChildren.size())) - { - ImGui::Separator(); - ImGui::Columns(4, "hierarchy_columns"); - ImGui::Text("EntityId"); - ImGui::NextColumn(); - ImGui::Text("NetEntityId"); - ImGui::NextColumn(); - ImGui::Text("Entity Name"); - ImGui::NextColumn(); - ImGui::Text("Role"); - ImGui::NextColumn(); - - ImGui::Separator(); - ImGui::Columns(4, "hierarchy child info"); - - bool firstEntity = true; - for (const AZ::Entity* entity : hierarchicalChildren) - { - ImGui::Text("%s", entity->GetId().ToString().c_str()); - ImGui::NextColumn(); - ImGui::Text("%u", GetMultiplayer()->GetNetworkEntityManager()->GetNetEntityIdById(entity->GetId())); - ImGui::NextColumn(); - ImGui::Text("%s", entity->GetName().c_str()); - ImGui::NextColumn(); - - if (firstEntity) - { - ImGui::Text("Root node"); - } - else if (entity->FindComponent()) - { - ImGui::Text("Inner root node"); - } - else if (entity->FindComponent()) - { - ImGui::Text("Child node"); - } - ImGui::NextColumn(); - - firstEntity = false; - } - - ImGui::Columns(1); - ImGui::TreePop(); - } - } - } - } -#endif - } - - - void MultiplayerDebugHierarchyReporter::UpdateDebugOverlay() - { - if (!m_hierarchyRoots.empty()) - { - if (m_debugDisplay == nullptr) - { - AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; - AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, AzFramework::g_defaultSceneEntityDebugDisplayId); - m_debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); - } - - const AZ::u32 stateBefore = m_debugDisplay->GetState(); - m_debugDisplay->SetColor(AZ::Colors::White); - - for (const auto& root : m_hierarchyRoots) - { - if (const auto* rootComponent = root.second.m_rootComponent) - { - if (rootComponent->IsHierarchicalRoot()) - { - const AZStd::vector& hierarchicalChildren = rootComponent->GetHierarchicalEntities(); - - azsprintf(m_statusBuffer, "Hierarchy [%s] %u members", rootComponent->GetEntity()->GetName().c_str(), - aznumeric_cast(hierarchicalChildren.size())); - - AZ::Vector3 entityPosition = rootComponent->GetEntity()->GetTransform()->GetWorldTranslation(); - constexpr bool centerText = true; - m_debugDisplay->DrawTextLabel(entityPosition, 1.0f, m_statusBuffer, centerText, 0, 0); - } - } - } - - m_debugDisplay->SetState(stateBefore); - } - } - - void MultiplayerDebugHierarchyReporter::OnEntityActivated(const AZ::EntityId& entityId) - { - if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) - { - if (auto* rootComponent = childEntity->FindComponent()) - { - HierarchyRootInfo info; - info.m_rootComponent = rootComponent; - rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); - rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); - - m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); - } - } - } - - void MultiplayerDebugHierarchyReporter::OnEntityDeactivated(const AZ::EntityId& entityId) - { - if (const AZ::Entity* childEntity = AZ::Interface::Get()->FindEntity(entityId)) - { - if (auto* rootComponent = childEntity->FindComponent()) - { - m_hierarchyRoots.erase(rootComponent); - } - } - } - - void MultiplayerDebugHierarchyReporter::CollectHierarchyRoots() - { - AZStd::vector gatheredEntries; - const AZ::Sphere awarenessSphere = AZ::Sphere(AZ::Vector3::CreateZero(), 1000.f); - AZ::Interface::Get()->GetDefaultVisibilityScene()->Enumerate(awarenessSphere, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) - { - gatheredEntries.reserve(gatheredEntries.size() + nodeData.m_entries.size()); - for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries) - { - if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity) - { - gatheredEntries.push_back(visEntry); - } - } - } - ); - - for (const AzFramework::VisibilityEntry* entry : gatheredEntries) - { - const AZ::Entity* entity = static_cast(entry->m_userData); - if (auto* rootComponent = entity->FindComponent()) - { - HierarchyRootInfo info; - info.m_rootComponent = rootComponent; - rootComponent->BindNetworkHierarchyChangedEventHandler(info.m_changedEvent); - rootComponent->BindNetworkHierarchyLeaveEventHandler(info.m_leaveEvent); - - m_hierarchyRoots.insert(AZStd::make_pair(rootComponent, info)); - } - } - } -} diff --git a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h b/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h deleted file mode 100644 index 978664b96b..0000000000 --- a/Gems/Multiplayer/Code/Source/Debug/MultiplayerDebugHierarchyDebugger.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include -#include - -namespace Multiplayer -{ - /** - * \brief Reports hierarchy information in the scene. - */ - class MultiplayerDebugHierarchyReporter - : public AZ::EntitySystemBus::Handler - { - public: - MultiplayerDebugHierarchyReporter(); - ~MultiplayerDebugHierarchyReporter() override; - - //! main update loop - void OnImGuiUpdate(); - - //! Draws hierarchy information over hierarchy root entities - void UpdateDebugOverlay(); - - //! EntitySystemBus overrides. - void OnEntityActivated(const AZ::EntityId& entityId) override; - void OnEntityDeactivated(const AZ::EntityId& entityId) override; - - private: - AZ::ScheduledEvent m_updateDebugOverlay; - - AzFramework::DebugDisplayRequests* m_debugDisplay = nullptr; - - struct HierarchyRootInfo - { - NetworkHierarchyRootComponent* m_rootComponent = nullptr; - NetworkHierarchyChangedEvent::Handler m_changedEvent; - NetworkHierarchyLeaveEvent::Handler m_leaveEvent; - }; - - AZStd::unordered_map m_hierarchyRoots; - void CollectHierarchyRoots(); - - char m_statusBuffer[100] = {}; - }; -} From cdca77acd1f5d5f9748d1ac0fc9fce2874c08cfc Mon Sep 17 00:00:00 2001 From: smurly Date: Thu, 7 Oct 2021 10:56:10 -0700 Subject: [PATCH 157/226] Reflection Probe component test for parallel execution (#4532) Signed-off-by: Scott Murray --- .../Atom/TestSuite_Main_Optimized.py | 3 + ...omEditorComponents_ReflectionProbeAdded.py | 194 ++++++++++++++++++ 2 files changed, 197 insertions(+) create mode 100644 AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py index 47b2204d56..f5ac411a01 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py @@ -42,5 +42,8 @@ class TestAutomation(EditorTestSuite): class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module + class AtomEditorComponents_ReflectionProbeAdded(EditorSharedTest): + from Atom.tests import hydra_AtomEditorComponents_ReflectionProbeAdded as test_module + class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest): from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py new file mode 100644 index 0000000000..9b13eb2c7e --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_ReflectionProbeAdded.py @@ -0,0 +1,194 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +class Tests: + creation_undo = ( + "UNDO Entity creation success", + "UNDO Entity creation failed") + creation_redo = ( + "REDO Entity creation success", + "REDO Entity creation failed") + reflection_probe_creation = ( + "Reflection Probe Entity successfully created", + "Reflection Probe Entity failed to be created") + reflection_probe_component = ( + "Entity has a Reflection Probe component", + "Entity failed to find Reflection Probe component") + reflection_probe_disabled = ( + "Reflection Probe component disabled", + "Reflection Probe component was not disabled.") + reflection_map_generated = ( + "Reflection Probe cubemap generated", + "Reflection Probe cubemap not generated") + box_shape_component = ( + "Entity has a Box Shape component", + "Entity did not have a Box Shape component") + reflection_probe_enabled = ( + "Reflection Probe component enabled", + "Reflection Probe component was not enabled.") + enter_game_mode = ( + "Entered game mode", + "Failed to enter game mode") + exit_game_mode = ( + "Exited game mode", + "Couldn't exit game mode") + is_visible = ( + "Entity is visible", + "Entity was not visible") + is_hidden = ( + "Entity is hidden", + "Entity was not hidden") + entity_deleted = ( + "Entity deleted", + "Entity was not deleted") + deletion_undo = ( + "UNDO deletion success", + "UNDO deletion failed") + deletion_redo = ( + "REDO deletion success", + "REDO deletion failed") + + +def AtomEditorComponents_ReflectionProbe_AddedToEntity(): + """ + Summary: + Tests the Reflection Probe component can be added to an entity and has the expected functionality. + + Test setup: + - Wait for Editor idle loop. + - Open the "Base" level. + + Expected Behavior: + The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components. + Creation and deletion undo/redo should also work. + + Test Steps: + 1) Create a Reflection Probe entity with no components. + 2) Add a Reflection Probe component to Reflection Probe entity. + 3) UNDO the entity creation and component addition. + 4) REDO the entity creation and component addition. + 5) Verify Reflection Probe component not enabled. + 6) Add Shape component since it is required by the Reflection Probe component. + 7) Verify Reflection Probe component is enabled. + 8) Enter/Exit game mode. + 9) Test IsHidden. + 10) Test IsVisible. + 11) Verify cubemap generation + 12) Delete Reflection Probe entity. + 13) UNDO deletion. + 14) REDO deletion. + 15) Look for errors. + + :return: None + """ + + import azlmbr.legacy.general as general + import azlmbr.math as math + import azlmbr.render as render + + from editor_python_test_tools.editor_entity_utils import EditorEntity + from editor_python_test_tools.utils import Report, Tracer, TestHelper as helper + + with Tracer() as error_tracer: + # Test setup begins. + # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level. + helper.init_idle() + helper.open_level("", "Base") + + # Test steps begin. + # 1. Create a Reflection Probe entity with no components. + reflection_probe_name = "Reflection Probe" + reflection_probe_entity = EditorEntity.create_editor_entity_at( + math.Vector3(512.0, 512.0, 34.0), reflection_probe_name) + Report.critical_result(Tests.reflection_probe_creation, reflection_probe_entity.exists()) + + # 2. Add a Reflection Probe component to Reflection Probe entity. + reflection_probe_component = reflection_probe_entity.add_component(reflection_probe_name) + Report.critical_result( + Tests.reflection_probe_component, + reflection_probe_entity.has_component(reflection_probe_name)) + + # 3. UNDO the entity creation and component addition. + # -> UNDO component addition. + general.undo() + # -> UNDO naming entity. + general.undo() + # -> UNDO selecting entity. + general.undo() + # -> UNDO entity creation. + general.undo() + general.idle_wait_frames(1) + Report.result(Tests.creation_undo, not reflection_probe_entity.exists()) + + # 4. REDO the entity creation and component addition. + # -> REDO entity creation. + general.redo() + # -> REDO selecting entity. + general.redo() + # -> REDO naming entity. + general.redo() + # -> REDO component addition. + general.redo() + general.idle_wait_frames(1) + Report.result(Tests.creation_redo, reflection_probe_entity.exists()) + + # 5. Verify Reflection Probe component not enabled. + Report.result(Tests.reflection_probe_disabled, not reflection_probe_component.is_enabled()) + + # 6. Add Box Shape component since it is required by the Reflection Probe component. + box_shape = "Box Shape" + reflection_probe_entity.add_component(box_shape) + Report.result(Tests.box_shape_component, reflection_probe_entity.has_component(box_shape)) + + # 7. Verify Reflection Probe component is enabled. + Report.result(Tests.reflection_probe_enabled, reflection_probe_component.is_enabled()) + + # 8. Enter/Exit game mode. + helper.enter_game_mode(Tests.enter_game_mode) + general.idle_wait_frames(1) + helper.exit_game_mode(Tests.exit_game_mode) + + # 9. Test IsHidden. + reflection_probe_entity.set_visibility_state(False) + Report.result(Tests.is_hidden, reflection_probe_entity.is_hidden() is True) + + # 10. Test IsVisible. + reflection_probe_entity.set_visibility_state(True) + general.idle_wait_frames(1) + Report.result(Tests.is_visible, reflection_probe_entity.is_visible() is True) + + # 11. Verify cubemap generation + render.EditorReflectionProbeBus(azlmbr.bus.Event, "BakeReflectionProbe", reflection_probe_entity.id) + Report.result( + Tests.reflection_map_generated, + helper.wait_for_condition( + lambda: reflection_probe_component.get_component_property_value("Cubemap|Baked Cubemap Path") != "", + 20.0)) + + # 12. Delete Reflection Probe entity. + reflection_probe_entity.delete() + Report.result(Tests.entity_deleted, not reflection_probe_entity.exists()) + + # 13. UNDO deletion. + general.undo() + Report.result(Tests.deletion_undo, reflection_probe_entity.exists()) + + # 14. REDO deletion. + general.redo() + Report.result(Tests.deletion_redo, not reflection_probe_entity.exists()) + + # 15. Look for errors or asserts. + helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0) + for error_info in error_tracer.errors: + Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}") + for assert_info in error_tracer.asserts: + Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}") + + +if __name__ == "__main__": + from editor_python_test_tools.utils import Report + Report.start_test(AtomEditorComponents_ReflectionProbe_AddedToEntity) From 5f83485a1d51100dd5662a821a5485b38f5ffd4a Mon Sep 17 00:00:00 2001 From: jiaweig <51759646+jiaweig-amzn@users.noreply.github.com> Date: Thu, 7 Oct 2021 11:00:28 -0700 Subject: [PATCH 158/226] PALify driver info. No warnings if info is empty. (#4533) Signed-off-by: jiaweig --- .../RHI.Reflect/PhysicalDeviceDescriptor.cpp | 7 ++++++ .../Android/PhysicalDeviceDriverInfo.setreg | 23 +++++++++++++++++++ .../Linux/PhysicalDeviceDriverInfo.setreg | 23 +++++++++++++++++++ .../Mac/PhysicalDeviceDriverInfo.setreg | 23 +++++++++++++++++++ .../Windows}/PhysicalDeviceDriverInfo.setreg | 0 .../iOS/PhysicalDeviceDriverInfo.setreg | 23 +++++++++++++++++++ 6 files changed, 99 insertions(+) create mode 100644 Gems/Atom/RHI/Registry/Platform/Android/PhysicalDeviceDriverInfo.setreg create mode 100644 Gems/Atom/RHI/Registry/Platform/Linux/PhysicalDeviceDriverInfo.setreg create mode 100644 Gems/Atom/RHI/Registry/Platform/Mac/PhysicalDeviceDriverInfo.setreg rename Gems/Atom/RHI/Registry/{ => Platform/Windows}/PhysicalDeviceDriverInfo.setreg (100%) create mode 100644 Gems/Atom/RHI/Registry/Platform/iOS/PhysicalDeviceDriverInfo.setreg diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/PhysicalDeviceDescriptor.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/PhysicalDeviceDescriptor.cpp index 17819ab1f5..9da4f583ac 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/PhysicalDeviceDescriptor.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/PhysicalDeviceDescriptor.cpp @@ -86,6 +86,13 @@ namespace AZ PhysicalDeviceDriverValidator::ValidationResult PhysicalDeviceDriverValidator::ValidateDriverVersion(const PhysicalDeviceDescriptor& descriptor) const { + // [GFX TODO] Add driver info for other platforms besides Windows. Currently, avoid spamming warnings. + // ATOM-14967 [RHI][Metal] - Address driver version validator for Mac + if (m_driverInfo.size() == 0) + { + return ValidationResult::MissingInfo; + } + auto iter = m_driverInfo.find(descriptor.m_vendorId); if (iter == m_driverInfo.end()) diff --git a/Gems/Atom/RHI/Registry/Platform/Android/PhysicalDeviceDriverInfo.setreg b/Gems/Atom/RHI/Registry/Platform/Android/PhysicalDeviceDriverInfo.setreg new file mode 100644 index 0000000000..a0df86c923 --- /dev/null +++ b/Gems/Atom/RHI/Registry/Platform/Android/PhysicalDeviceDriverInfo.setreg @@ -0,0 +1,23 @@ +// +// Copyright (c) Contributors to the Open 3D Engine Project. +// For complete copyright and license terms please see the LICENSE at the root of this distribution. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// +// + +{ + "O3DE": + { + "Atom": + { + "RHI": + { + "PhysicalDeviceDriverInfo": + { + } + } + } + } +} diff --git a/Gems/Atom/RHI/Registry/Platform/Linux/PhysicalDeviceDriverInfo.setreg b/Gems/Atom/RHI/Registry/Platform/Linux/PhysicalDeviceDriverInfo.setreg new file mode 100644 index 0000000000..a0df86c923 --- /dev/null +++ b/Gems/Atom/RHI/Registry/Platform/Linux/PhysicalDeviceDriverInfo.setreg @@ -0,0 +1,23 @@ +// +// Copyright (c) Contributors to the Open 3D Engine Project. +// For complete copyright and license terms please see the LICENSE at the root of this distribution. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// +// + +{ + "O3DE": + { + "Atom": + { + "RHI": + { + "PhysicalDeviceDriverInfo": + { + } + } + } + } +} diff --git a/Gems/Atom/RHI/Registry/Platform/Mac/PhysicalDeviceDriverInfo.setreg b/Gems/Atom/RHI/Registry/Platform/Mac/PhysicalDeviceDriverInfo.setreg new file mode 100644 index 0000000000..a0df86c923 --- /dev/null +++ b/Gems/Atom/RHI/Registry/Platform/Mac/PhysicalDeviceDriverInfo.setreg @@ -0,0 +1,23 @@ +// +// Copyright (c) Contributors to the Open 3D Engine Project. +// For complete copyright and license terms please see the LICENSE at the root of this distribution. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// +// + +{ + "O3DE": + { + "Atom": + { + "RHI": + { + "PhysicalDeviceDriverInfo": + { + } + } + } + } +} diff --git a/Gems/Atom/RHI/Registry/PhysicalDeviceDriverInfo.setreg b/Gems/Atom/RHI/Registry/Platform/Windows/PhysicalDeviceDriverInfo.setreg similarity index 100% rename from Gems/Atom/RHI/Registry/PhysicalDeviceDriverInfo.setreg rename to Gems/Atom/RHI/Registry/Platform/Windows/PhysicalDeviceDriverInfo.setreg diff --git a/Gems/Atom/RHI/Registry/Platform/iOS/PhysicalDeviceDriverInfo.setreg b/Gems/Atom/RHI/Registry/Platform/iOS/PhysicalDeviceDriverInfo.setreg new file mode 100644 index 0000000000..a0df86c923 --- /dev/null +++ b/Gems/Atom/RHI/Registry/Platform/iOS/PhysicalDeviceDriverInfo.setreg @@ -0,0 +1,23 @@ +// +// Copyright (c) Contributors to the Open 3D Engine Project. +// For complete copyright and license terms please see the LICENSE at the root of this distribution. +// +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// +// + +{ + "O3DE": + { + "Atom": + { + "RHI": + { + "PhysicalDeviceDriverInfo": + { + } + } + } + } +} From a1380940270920ba659c15a89ba811922db9d7a0 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 7 Oct 2021 14:34:29 -0500 Subject: [PATCH 159/226] Updated create-template logic to prefer the SanitizedCppName when running replacements on cpp file contents. Signed-off-by: Chris Galvan --- scripts/o3de/o3de/engine_template.py | 39 +++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/scripts/o3de/o3de/engine_template.py b/scripts/o3de/o3de/engine_template.py index 802641bd3a..06fab8752e 100755 --- a/scripts/o3de/o3de/engine_template.py +++ b/scripts/o3de/o3de/engine_template.py @@ -402,7 +402,7 @@ def create_template(source_path: pathlib.Path, # if no template path, error if not template_path: logger.info(f'Template path empty. Using source name {source_name}') - template_path = source_name + template_path = pathlib.Path(source_name) if not template_path.is_absolute(): default_templates_folder = manifest.get_registered(default_folder='templates') template_path = default_templates_folder / template_path @@ -518,21 +518,52 @@ def create_template(source_path: pathlib.Path, replacements.append((source_name.upper(), '${NameUpper}')) replacements.append((source_name, '${Name}')) replacements.append((sanitized_source_name, '${SanitizedCppName}')) + sanitized_name_index = len(replacements) - 1 - def _transform_into_template(s_data: object) -> (bool, str): + def _is_cpp_file(file_path: pathlib.Path) -> bool: + """ + Internal helper method to check if a file is a C++ file based + on its extension, so we can determine if we need to prefer + the ${SanitizedCppName} + :param file_path: The input file path + :return: bool: Whether or not the input file path has a C++ extension + """ + name, ext = os.path.splitext(file_path) + + return ext == ".h" or ext == ".hpp" or ext == ".inl" or ext == ".cpp" or ext == ".hxx" + + def _transform_into_template(s_data: object, + prefer_sanitized_name: bool = False) -> (bool, str): """ Internal function to transform any data into templated data :param s_data: the input data, this could be file data or file name data + :param prefer_sanitized_name: Optionally swap the sanitized name with the normal name + This can be necessary when creating the template, the source + name and sanitized source name might be the same, but C++ + files will need to prefer the sanitized version, or else + there might be compile errors (e.g. '-' characters in the name) :return: bool: whether or not the returned data MAY need to be transformed to instantiate it t_data: potentially transformed data 0 for success or non 0 failure code """ + def swap_sanitized_name_and_normal(): + replacements[sanitized_name_index-1], replacements[sanitized_name_index] = \ + replacements[sanitized_name_index], replacements[sanitized_name_index-1] + # copy the src data to the transformed data, then operate only on transformed data t_data = str(s_data) + # If we need to prefer the sanitized name, then swap it for the normal + if prefer_sanitized_name: + swap_sanitized_name_and_normal() + # run all the replacements for replacement in replacements: t_data = t_data.replace(replacement[0], replacement[1]) + # Once we are done running the replacements, reset the list if we had modified it + if prefer_sanitized_name: + swap_sanitized_name_and_normal() + if not keep_license_text: t_data = _replace_license_text(t_data) @@ -704,7 +735,7 @@ def create_template(source_path: pathlib.Path, # open the file and attempt to transform it with open(entry_abs, 'r') as s: source_data = s.read() - templated, source_data = _transform_into_template(source_data) + templated, source_data = _transform_into_template(source_data, _is_cpp_file(entry_abs)) # if the file type is a file that we expect to fins license header and we don't find any # warn that the we didn't find the license info, this makes it easy to make sure we didn't @@ -840,7 +871,7 @@ def create_template(source_path: pathlib.Path, # open the file and attempt to transform it with open(entry_abs, 'r') as s: source_data = s.read() - templated, source_data = _transform_into_template(source_data) + templated, source_data = _transform_into_template(source_data, _is_cpp_file(entry_abs)) # if the file type is a file that we expect to fins license header and we don't find any # warn that the we didn't find the license info, this makes it easy to make sure we didn't From 9b86749a838334e5065e9a4bcd574d8edd6a12ef Mon Sep 17 00:00:00 2001 From: Gene Walters Date: Thu, 7 Oct 2021 13:01:05 -0700 Subject: [PATCH 160/226] Making sure unit tests using iMultiplayers implement the new AddServerAcceptance events; misc cleanup Signed-off-by: Gene Walters --- Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h | 1 + Gems/Multiplayer/Code/Tests/MockInterfaces.h | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h index 7f98d22702..5a528ed497 100644 --- a/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h +++ b/Gems/Multiplayer/Code/Tests/CommonBenchmarkSetup.h @@ -328,6 +328,7 @@ namespace Multiplayer void Terminate([[maybe_unused]] AzNetworking::DisconnectReason reason) override {} void AddClientDisconnectedHandler([[maybe_unused]] ClientDisconnectedEvent::Handler& handler) override {} void AddConnectionAcquiredHandler([[maybe_unused]] ConnectionAcquiredEvent::Handler& handler) override {} + void AddServerAcceptanceReceivedHandler([[maybe_unused]] ServerAcceptanceReceivedEvent::Handler& handler) override {} void AddSessionInitHandler([[maybe_unused]] SessionInitEvent::Handler& handler) override {} void AddSessionShutdownHandler([[maybe_unused]] SessionShutdownEvent::Handler& handler) override {} void SendReadyForEntityUpdates([[maybe_unused]] bool readyForEntityUpdates) override {} diff --git a/Gems/Multiplayer/Code/Tests/MockInterfaces.h b/Gems/Multiplayer/Code/Tests/MockInterfaces.h index 44024f67ab..527aeb51bc 100644 --- a/Gems/Multiplayer/Code/Tests/MockInterfaces.h +++ b/Gems/Multiplayer/Code/Tests/MockInterfaces.h @@ -29,9 +29,10 @@ namespace UnitTest MOCK_METHOD1(AddClientDisconnectedHandler, void(AZ::Event<>::Handler&)); MOCK_METHOD1(AddNotifyClientMigrationHandler, void(Multiplayer::NotifyClientMigrationEvent::Handler&)); MOCK_METHOD1(AddNotifyEntityMigrationEventHandler, void(Multiplayer::NotifyEntityMigrationEvent::Handler&)); - MOCK_METHOD1(AddConnectionAcquiredHandler, void(AZ::Event::Handler&)); - MOCK_METHOD1(AddSessionInitHandler, void(AZ::Event::Handler&)); - MOCK_METHOD1(AddSessionShutdownHandler, void(AZ::Event::Handler&)); + MOCK_METHOD1(AddConnectionAcquiredHandler, void(Multiplayer::ConnectionAcquiredEvent::Handler&)); + MOCK_METHOD1(AddServerAcceptanceReceivedHandler, void(Multiplayer::ServerAcceptanceReceivedEvent::Handler&)); + MOCK_METHOD1(AddSessionInitHandler, void(Multiplayer::SessionInitEvent::Handler&)); + MOCK_METHOD1(AddSessionShutdownHandler, void(Multiplayer::SessionShutdownEvent::Handler&)); MOCK_METHOD3(SendNotifyClientMigrationEvent, void(const Multiplayer::HostId&, uint64_t, Multiplayer::ClientInputId)); MOCK_METHOD2(SendNotifyEntityMigrationEvent, void(const Multiplayer::ConstNetworkEntityHandle&, const Multiplayer::HostId&)); MOCK_METHOD1(SendReadyForEntityUpdates, void(bool)); From 5f52664026774c549d1fefbf4141be884873b8d4 Mon Sep 17 00:00:00 2001 From: allisaurus <34254888+allisaurus@users.noreply.github.com> Date: Thu, 7 Oct 2021 13:04:10 -0700 Subject: [PATCH 161/226] Add missing field labels to AWSMetrics node SubmitMetrics (#4534) * Add missing field labels to AWSMetrics node SubmitMetrics * Add periods to tooltips to be consistent w/ other metrics nodes Signed-off-by: Stanko --- Gems/AWSMetrics/Code/Source/AWSMetricsSystemComponent.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Gems/AWSMetrics/Code/Source/AWSMetricsSystemComponent.cpp b/Gems/AWSMetrics/Code/Source/AWSMetricsSystemComponent.cpp index 6850fe694b..7f320f398a 100644 --- a/Gems/AWSMetrics/Code/Source/AWSMetricsSystemComponent.cpp +++ b/Gems/AWSMetrics/Code/Source/AWSMetricsSystemComponent.cpp @@ -74,7 +74,12 @@ namespace AWSMetrics { behaviorContext->EBus("AWSMetricsRequestBus", "Generate and submit metrics to the metrics analytics pipeline") ->Attribute(AZ::Script::Attributes::Category, "AWSMetrics") - ->Event("SubmitMetrics", &AWSMetricsRequestBus::Events::SubmitMetrics) + ->Event( + "SubmitMetrics", &AWSMetricsRequestBus::Events::SubmitMetrics, + { { { "Metrics Attributes list", "The list of metrics attributes to submit." }, + { "Event priority", "Priority of the event. Defaults to 0, which is highest priority." }, + { "Event source override", "Event source used to override the default, 'AWSMetricGem'." }, + { "Buffer metrics", "Whether to buffer metrics and send them in a batch." } } }) ->Event("FlushMetrics", &AWSMetricsRequestBus::Events::FlushMetrics) ; From e1c02cc146a0e0ccb2b2e25d0068237a8c1bae6b Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 7 Oct 2021 15:32:57 -0500 Subject: [PATCH 162/226] Updated cpp file extension check per PR feedback. Signed-off-by: Chris Galvan --- scripts/o3de/o3de/engine_template.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/o3de/o3de/engine_template.py b/scripts/o3de/o3de/engine_template.py index 06fab8752e..cba7539aaa 100755 --- a/scripts/o3de/o3de/engine_template.py +++ b/scripts/o3de/o3de/engine_template.py @@ -59,6 +59,14 @@ binary_file_ext = { '.motionset' } +cpp_file_ext = { + '.cpp', + '.h', + '.hpp', + '.hxx', + '.inl' +} + expect_license_info_ext = { '.cpp', '.h', @@ -530,7 +538,7 @@ def create_template(source_path: pathlib.Path, """ name, ext = os.path.splitext(file_path) - return ext == ".h" or ext == ".hpp" or ext == ".inl" or ext == ".cpp" or ext == ".hxx" + return ext.lower() in cpp_file_ext def _transform_into_template(s_data: object, prefer_sanitized_name: bool = False) -> (bool, str): From 42e748760d501ea8472e89abd4f8c9681b1037be Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 16 Aug 2021 21:43:49 -0700 Subject: [PATCH 163/226] Loading actor in editor using asset system. Signed-off-by: rhhong --- .../CommandSystem/Source/ActorCommands.cpp | 11 +- .../CommandSystem/Source/ImporterCommands.cpp | 46 +++----- .../Source/SelectionCommands.cpp | 15 --- .../RCExt/Actor/ActorGroupExporter.cpp | 1 - .../Pipeline/RCExt/Actor/ActorGroupExporter.h | 3 +- .../EMotionFX/Code/EMotionFX/Source/Actor.cpp | 22 ---- Gems/EMotionFX/Code/EMotionFX/Source/Actor.h | 9 -- .../Code/EMotionFX/Source/ActorManager.cpp | 103 +++++++++++------ .../Code/EMotionFX/Source/ActorManager.h | 21 ++-- .../EMotionFX/Source/AutoRegisteredActor.h | 109 ------------------ .../EMStudioSDK/Source/FileManager.cpp | 4 - .../EMStudioSDK/Source/MainWindow.cpp | 5 - .../Source/RenderPlugin/RenderPlugin.cpp | 4 +- .../Source/ResetSettingsDialog.cpp | 3 +- .../Source/SceneManager/ActorsWindow.cpp | 6 - .../Code/EMotionFX/emotionfx_files.cmake | 1 - .../Source/Integration/Assets/ActorAsset.cpp | 3 - .../Source/Integration/Assets/ActorAsset.h | 4 +- 18 files changed, 108 insertions(+), 262 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Source/AutoRegisteredActor.h diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp index 85bb726822..57e206560a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp @@ -22,6 +22,7 @@ #include "CommandManager.h" #include #include +#include namespace CommandSystem @@ -729,7 +730,8 @@ namespace CommandSystem m_oldWorkspaceDirtyFlag = GetCommandManager()->GetWorkspaceDirtyFlag(); // get rid of the actor - EMotionFX::GetActorManager().UnregisterActor(EMotionFX::GetActorManager().FindSharedActorByID(actor->GetID())); + const AZ::Data::AssetId actorAssetId = EMotionFX::GetActorManager().FindAssetIdByActorId(actor->GetID()); + EMotionFX::GetActorManager().UnregisterActor(actorAssetId); // mark the workspace as dirty GetCommandManager()->SetWorkspaceDirtyFlag(true); @@ -818,7 +820,6 @@ namespace CommandSystem { continue; } - // ignore visualization actor instances if (actorInstance->GetIsUsedForVisualization()) { @@ -849,12 +850,6 @@ namespace CommandSystem // get the current actor EMotionFX::Actor* actor = EMotionFX::GetActorManager().GetActor(i); - // ignore runtime-owned actors - if (actor->GetIsOwnedByRuntime()) - { - continue; - } - // ignore visualization actors if (actor->GetIsUsedForVisualization()) { diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp index 168de93e38..4b23bd2e0a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp @@ -17,6 +17,7 @@ #include #include "CommandManager.h" #include +#include namespace CommandSystem @@ -65,35 +66,24 @@ namespace CommandSystem filename = EMotionFX::EMotionFXManager::ResolvePath(filename.c_str()); } + AZ::Data::AssetId actorAssetId; + EBUS_EVENT_RESULT( + actorAssetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, filename.c_str(), AZ::Data::s_invalidAssetType, false); + // check if we have already loaded the actor - EMotionFX::Actor* actorFromManager = EMotionFX::GetActorManager().FindActorByFileName(filename.c_str()); - if (actorFromManager) + const size_t actorIndex = EMotionFX::GetActorManager().FindActorIndex(actorAssetId); + if (actorIndex != InvalidIndex) { - AZStd::to_string(outResult, actorFromManager->GetID()); return true; } - // init the settings - EMotionFX::Importer::ActorSettings settings; - - // extract default values from the command syntax automatically, if they aren't specified explicitly - settings.m_loadLimits = parameters.GetValueAsBool("loadLimits", this); - settings.m_loadMorphTargets = parameters.GetValueAsBool("loadMorphTargets", this); - settings.m_loadSkeletalLoDs = parameters.GetValueAsBool("loadSkeletalLODs", this); - settings.m_dualQuatSkinning = parameters.GetValueAsBool("dualQuatSkinning", this); - - // try to load the actor - AZStd::shared_ptr actor {EMotionFX::GetImporter().LoadActor(filename.c_str(), &settings)}; - if (!actor) - { - outResult = AZStd::string::format("Failed to load actor from '%s'. File may not exist at this path or may have incorrect permissions", filename.c_str()); - return false; - } - - // Because the actor is directly loaded from disk (without going through an actor asset), we need to ask for a blocking - // load for the asset that actor is depend on. - actor->Finalize(EMotionFX::Actor::LoadRequirement::RequireBlockingLoad); + // Do a blocking load of the asset. + AZ::Data::Asset actorAsset = + AZ::Data::AssetManager::Instance().GetAsset( + actorAssetId, AZ::Data::AssetLoadBehavior::Default); + actorAsset.BlockUntilLoadComplete(); + EMotionFX::Actor* actor = actorAsset->GetActor(); // set the actor id in case we have specified it as parameter if (actorID != MCORE_INVALIDINDEX32) { @@ -113,7 +103,6 @@ namespace CommandSystem GetCommandManager()->ExecuteCommandInsideCommand(AZStd::string::format("Select -actorID %i", actor->GetID()).c_str(), outResult); } - // mark the workspace as dirty m_oldWorkspaceDirtyFlag = GetCommandManager()->GetWorkspaceDirtyFlag(); GetCommandManager()->SetWorkspaceDirtyFlag(true); @@ -121,7 +110,8 @@ namespace CommandSystem // return the id of the newly created actor AZStd::to_string(outResult, actor->GetID()); - EMotionFX::GetActorManager().RegisterActor(AZStd::move(actor)); + // Register actor asset. + EMotionFX::GetActorManager().RegisterActor(actorAsset); return true; } @@ -145,14 +135,14 @@ namespace CommandSystem } // find the actor based on the given id - AZStd::shared_ptr actor = EMotionFX::GetActorManager().FindSharedActorByID(actorID); - if (actor == nullptr) + AZ::Data::AssetId actorAssetId = EMotionFX::GetActorManager().FindAssetIdByActorId(actorID); + if (!actorAssetId.IsValid()) { outResult = AZStd::string::format("Cannot remove actor. Actor ID %i is not valid.", actorID); return false; } - EMotionFX::GetActorManager().UnregisterActor(actor); + EMotionFX::GetActorManager().UnregisterActor(actorAssetId); // update our render actors AZStd::string updateRenderActorsResult; diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp index bcc9769c44..7e1a9fe0f5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp @@ -183,11 +183,6 @@ namespace CommandSystem for (size_t i = 0; i < numActors; ++i) { EMotionFX::Actor* actor = EMotionFX::GetActorManager().GetActor(i); - - if (actor->GetIsOwnedByRuntime()) - { - continue; - } if (unselect == false) { @@ -211,11 +206,6 @@ namespace CommandSystem return false; } - if (actor->GetIsOwnedByRuntime()) - { - return false; - } - if (unselect == false) { selection.AddActor(actor); @@ -244,11 +234,6 @@ namespace CommandSystem { EMotionFX::Actor* actor = EMotionFX::GetActorManager().GetActor(i); - if (actor->GetIsOwnedByRuntime()) - { - continue; - } - if (AzFramework::StringFunc::Equal(valueString.c_str(), actor->GetName(), false /* no case */)) { if (unselect == false) diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.cpp index 4cba50138a..3d5e4fa413 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.h b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.h index e94137b317..d2db7d91c5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.h +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/ActorGroupExporter.h @@ -8,7 +8,6 @@ #pragma once #include -#include #include #include #include @@ -44,7 +43,7 @@ namespace EMotionFX static AZStd::optional GetFirstProductByType( const ActorGroupExportContext& context, AZ::Data::AssetType type); - AutoRegisteredActor m_actor; + AZStd::shared_ptr m_actor; AZStd::vector m_actorMaterialReferences; }; } // namespace Pipeline diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp index 3e592113b1..861271fdb3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp @@ -91,9 +91,6 @@ namespace EMotionFX m_simulatedObjectSetup = AZStd::make_shared(this); m_optimizeSkeleton = false; -#if defined(EMFX_DEVELOPMENT_BUILD) - m_isOwnedByRuntime = false; -#endif // EMFX_DEVELOPMENT_BUILD // make sure we have at least allocated the first LOD of materials and facial setups m_materials.reserve(4); // reserve space for 4 lods @@ -2074,25 +2071,6 @@ namespace EMotionFX return m_usedForVisualization; } - void Actor::SetIsOwnedByRuntime(bool isOwnedByRuntime) - { -#if defined(EMFX_DEVELOPMENT_BUILD) - m_isOwnedByRuntime = isOwnedByRuntime; -#else - AZ_UNUSED(isOwnedByRuntime); -#endif - } - - - bool Actor::GetIsOwnedByRuntime() const - { -#if defined(EMFX_DEVELOPMENT_BUILD) - return m_isOwnedByRuntime; -#else - return true; -#endif - } - const AZ::Aabb& Actor::GetStaticAabb() const { return m_staticAabb; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h index aa5c5df45c..dc83972d40 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h @@ -720,12 +720,6 @@ namespace EMotionFX void SetIsUsedForVisualization(bool flag); bool GetIsUsedForVisualization() const; - /** - * Marks the actor as used by the engine runtime, as opposed to the tool suite. - */ - void SetIsOwnedByRuntime(bool isOwnedByRuntime); - bool GetIsOwnedByRuntime() const; - /** * Recursively find the parent bone that is enabled in a given LOD, starting from a given node. * For example if you have a finger bone, while the finger bones are disabled in the skeletal LOD, this function will return the index to the hand bone. @@ -940,8 +934,5 @@ namespace EMotionFX bool m_usedForVisualization; /**< Indicates if the actor is used for visualization specific things and is not used as a normal in-game actor. */ bool m_optimizeSkeleton; /**< Indicates if we should perform/ */ bool m_isReady = false; /**< If actor as well as its dependent files are fully loaded and initialized.*/ -#if defined(EMFX_DEVELOPMENT_BUILD) - bool m_isOwnedByRuntime; /**< Set if the actor is used/owned by the engine runtime. */ -#endif // EMFX_DEVELOPMENT_BUILD }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index 681efb6039..d20d0cf11c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -31,7 +31,7 @@ namespace EMotionFX SetScheduler(MultiThreadScheduler::Create()); // reserve memory - m_actors.reserve(512); + m_actorAssets.reserve(32); m_actorInstances.reserve(1024); m_rootActorInstances.reserve(1024); } @@ -111,20 +111,23 @@ namespace EMotionFX // register the actor - void ActorManager::RegisterActor(AZStd::shared_ptr actor) + void ActorManager::RegisterActor(ActorAssetData actorAsset) { LockActors(); // check if we already registered - if (FindActorIndex(actor.get()) != InvalidIndex) + if (FindActorIndex(actorAsset.GetId()) != InvalidIndex) { - MCore::LogWarning("EMotionFX::ActorManager::RegisterActor() - The actor at location 0x%x has already been registered as actor, most likely already by the LoadActor of the importer.", actor.get()); + MCore::LogWarning( + "EMotionFX::ActorManager::RegisterActor() - The actor at location 0x%x has already been registered as actor, most likely " + "already by the LoadActor of the importer.", + actorAsset.GetAs()->GetActor()); UnlockActors(); return; } // register it - m_actors.emplace_back(AZStd::move(actor)); + m_actorAssets.emplace_back(AZStd::move(actorAsset)); UnlockActors(); } @@ -146,60 +149,82 @@ namespace EMotionFX Actor* ActorManager::FindActorByName(const char* actorName) const { // get the number of actors and iterate through them - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [actorName](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [actorName](const ActorAssetData& a) { - return a->GetNameString() == actorName; + return a.GetAs()->GetActor()->GetNameString() == actorName; }); - return (found != m_actors.end()) ? found->get() : nullptr; + return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; } // find the actor for a given filename Actor* ActorManager::FindActorByFileName(const char* fileName) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [fileName](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [fileName](const ActorAssetData& a) { - return AzFramework::StringFunc::Equal(a->GetFileNameString().c_str(), fileName, false /* no case */); + return AzFramework::StringFunc::Equal( + a.GetAs()->GetActor()->GetFileNameString().c_str(), fileName, false /* no case */); }); - return (found != m_actors.end()) ? found->get() : nullptr; + return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; } // find the leader actor record for a given actor - size_t ActorManager::FindActorIndex(Actor* actor) const + size_t ActorManager::FindActorIndex(AZ::Data::AssetId assetId) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [actor](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [assetId](const ActorAssetData& a) { - return a.get() == actor; + return a.GetId() == assetId; }); - return (found != m_actors.end()) ? AZStd::distance(m_actors.begin(), found) : InvalidIndex; + return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; } + size_t ActorManager::FindActorIndex(const Actor* actor) const + { + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [actor](const ActorAssetData& a) + { + return a.GetAs()->GetActor() == actor; + }); + + return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; + } // find the actor for a given actor name size_t ActorManager::FindActorIndexByName(const char* actorName) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [actorName](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [actorName](const ActorAssetData& a) { - return a->GetNameString() == actorName; + return a.GetAs()->GetActor()->GetNameString() == actorName; }); - return (found != m_actors.end()) ? AZStd::distance(m_actors.begin(), found) : InvalidIndex; + return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; } // find the actor for a given actor filename size_t ActorManager::FindActorIndexByFileName(const char* filename) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [filename](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [filename](const ActorAssetData& a) { - return a->GetFileNameString() == filename; + return a.GetAs()->GetActor()->GetFileNameString() == filename; }); - return (found != m_actors.end()) ? AZStd::distance(m_actors.begin(), found) : InvalidIndex; + return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; } @@ -237,22 +262,26 @@ namespace EMotionFX // find the actor by the identification number Actor* ActorManager::FindActorByID(uint32 id) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [id](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [id](const ActorAssetData& a) { - return a->GetID() == id; + return a.GetAs()->GetActor()->GetID() == id; }); - return (found != m_actors.end()) ? found->get() : nullptr; + return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; } - AZStd::shared_ptr ActorManager::FindSharedActorByID(uint32 id) const + AZ::Data::AssetId ActorManager::FindAssetIdByActorId(uint32 id) const { - const auto found = AZStd::find_if(m_actors.begin(), m_actors.end(), [id](const AZStd::shared_ptr& a) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [id](const ActorAssetData& a) { - return a->GetID() == id; + return a.GetAs()->GetActor()->GetID() == id; }); - return (found != m_actors.end()) ? *found : nullptr; + return (found != m_actorAssets.end()) ? found->GetId() : AZ::Data::AssetId(); } @@ -264,14 +293,20 @@ namespace EMotionFX // unregister an actor - void ActorManager::UnregisterActor(const AZStd::shared_ptr& actor) + void ActorManager::UnregisterActor(AZ::Data::AssetId actorAssetID) { LockActors(); - auto result = AZStd::find(m_actors.begin(), m_actors.end(), actor); - if (result != m_actors.end()) + const auto found = AZStd::find_if( + m_actorAssets.begin(), m_actorAssets.end(), + [actorAssetID](const ActorAssetData& a) + { + return a.GetId() == actorAssetID; + }); + if (found != m_actorAssets.end()) { - m_actors.erase(result); + m_actorAssets.erase(found); } + UnlockActors(); } @@ -297,7 +332,7 @@ namespace EMotionFX LockActors(); // clear all actors - m_actors.clear(); + m_actorAssets.clear(); // TODO: what if there are still references to the actors inside the list of registered actor instances? UnlockActors(); @@ -390,7 +425,7 @@ namespace EMotionFX Actor* ActorManager::GetActor(size_t nr) const { - return m_actors[nr].get(); + return m_actorAssets[nr].GetAs()->GetActor(); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h index ff78250141..e4ce0d6c94 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h @@ -16,7 +16,8 @@ #include #include #include - +#include +#include namespace EMotionFX { @@ -41,13 +42,14 @@ namespace EMotionFX friend class EMotionFXManager; public: + using ActorAssetData = AZ::Data::Asset; static ActorManager* Create(); /** * Register an actor. * @param actor The actor to register. */ - void RegisterActor(AZStd::shared_ptr actor); + void RegisterActor(ActorAssetData actorAsset); /** * Unregister all actors. @@ -60,14 +62,14 @@ namespace EMotionFX * Unregister a specific actor. * @param actor The actor you passed to the RegisterActor function sometime before. */ - void UnregisterActor(const AZStd::shared_ptr& actor); + void UnregisterActor(AZ::Data::AssetId actorAssetID); /** * Get the number of registered actors. * This does not include the clones that have been optionally created. * @result The number of registered actors. */ - MCORE_INLINE size_t GetNumActors() const { return m_actors.size(); } + MCORE_INLINE size_t GetNumActors() const { return m_actorAssets.size(); } /** * Get a given actor. @@ -99,7 +101,8 @@ namespace EMotionFX * @param actor The actor object you once passed to RegisterActor. * @result Returns the actor number, which is in range of [0..GetNumActors()-1], or returns MCORE_INVALIDINDEX32 when not found. */ - size_t FindActorIndex(Actor* actor) const; + size_t FindActorIndex(AZ::Data::AssetId assetId) const; + size_t FindActorIndex(const Actor* actor) const; /** * Find the actor number for a given actor name. @@ -160,7 +163,7 @@ namespace EMotionFX */ Actor* FindActorByID(uint32 id) const; - AZStd::shared_ptr FindSharedActorByID(uint32 id) const; + AZ::Data::AssetId FindAssetIdByActorId(uint32 id) const; /** * Check if the given actor instance is registered. @@ -255,9 +258,9 @@ namespace EMotionFX void UnlockActors(); private: - AZStd::vector m_actorInstances; /**< The registered actor instances. */ - AZStd::vector> m_actors; /**< The registered actors. */ - AZStd::vector m_rootActorInstances; /**< Root actor instances (roots of all attachment chains). */ + AZStd::vector m_actorInstances; /**< The registered actor instances. */ + AZStd::vector m_actorAssets; + AZStd::vector m_rootActorInstances; /**< Root actor instances (roots of all attachment chains). */ ActorUpdateScheduler* m_scheduler; /**< The update scheduler to use. */ MCore::MutexRecursive m_actorLock; /**< The multithread lock for touching the actors array. */ MCore::MutexRecursive m_actorInstanceLock; /**< The multithread lock for touching the actor instances array. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AutoRegisteredActor.h b/Gems/EMotionFX/Code/EMotionFX/Source/AutoRegisteredActor.h deleted file mode 100644 index 8304976b15..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AutoRegisteredActor.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include - -namespace EMotionFX -{ - class Actor; - - /** - * @brief An Actor pointer that unregisters itself when it goes out of - * scope - * - * This class allows for simple functionality of automatically registering - * and unregistering an actor from the manager. Its primary use case is the - * ActorAsset, that shares ownership with the manager. But it can also be - * used anywhere that needs to make an Actor that needs to be in the - * Manager for a given period of time. A good example of this is anything - * that needs Actor commands to work on an actor that is made in a given - * scope. One main place where this happens is in the Actor asset processor - * code. - */ - class AutoRegisteredActor - { - public: - AutoRegisteredActor() = default; - - template - AutoRegisteredActor(AZStd::shared_ptr actor) - : m_actor(AZStd::move(actor)) - { - Register(m_actor); - } - template - AutoRegisteredActor(AZStd::unique_ptr actor) - : m_actor(AZStd::move(actor)) - { - Register(m_actor); - } - - // This class is not copyable, because a given actor cannot be - // registered with the manager multiple times - AutoRegisteredActor(const AutoRegisteredActor&) = delete; - AutoRegisteredActor& operator=(const AutoRegisteredActor&) = delete; - - AutoRegisteredActor(AutoRegisteredActor&& other) noexcept - { - *this = AZStd::move(other); - } - - AutoRegisteredActor& operator=(AutoRegisteredActor&& other) noexcept - { - if (this != &other) - { - Unregister(m_actor); - m_actor = AZStd::move(other.m_actor); - } - return *this; - } - - ~AutoRegisteredActor() - { - Unregister(m_actor); - } - - Actor* operator->() const - { - return m_actor.operator->(); - } - - operator bool() const - { - return static_cast(m_actor); - } - - Actor* get() const - { - return m_actor.get(); - } - - private: - void Register(const AZStd::shared_ptr& actor) - { - if (actor) - { - GetActorManager().RegisterActor(actor); - } - } - - void Unregister(const AZStd::shared_ptr& actor) - { - if (actor) - { - GetActorManager().UnregisterActor(actor); - } - } - - AZStd::shared_ptr m_actor; - }; -} // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp index 2d65a228b7..17438dd59a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.cpp @@ -112,10 +112,6 @@ namespace EMStudio for (size_t i = 0; i < actorCount; ++i) { EMotionFX::Actor* actor = EMotionFX::GetActorManager().GetActor(i); - if (actor->GetIsOwnedByRuntime()) - { - continue; - } if (AzFramework::StringFunc::Equal(filename, actor->GetFileName())) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp index 002634ea90..b75fb71060 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp @@ -1792,11 +1792,6 @@ namespace EMStudio { EMotionFX::Actor* actor = selectionList.GetActorInstance(i)->GetActor(); - if (actor->GetIsOwnedByRuntime()) - { - continue; - } - if (AZStd::find(savingActors.begin(), savingActors.end(), actor) == savingActors.end()) { savingActors.push_back(actor); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp index db0c355002..c74cb3cb0f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp @@ -389,7 +389,7 @@ namespace EMStudio // get the current actor and the number of clones EMotionFX::Actor* actor = EMotionFX::GetActorManager().GetActor(i); - if (actor->GetIsOwnedByRuntime() || !actor->IsReady()) + if (!actor->IsReady()) { continue; } @@ -421,7 +421,7 @@ namespace EMStudio // At this point the render actor could point to an already deleted actor. // In case the actor got deleted we might get an unexpected flag as result. - if (!found || (found && actor->GetIsOwnedByRuntime()) || (!actor->IsReady())) + if (!found || (!actor->IsReady())) { DestroyEMStudioActor(actor); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/ResetSettingsDialog.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/ResetSettingsDialog.cpp index 2f45a89ea2..5c15f4b6be 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/ResetSettingsDialog.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/ResetSettingsDialog.cpp @@ -65,8 +65,7 @@ namespace EMStudio m_actorCheckbox = new QCheckBox("Actors"); m_actorCheckbox->setObjectName("EMFX.ResetSettingsDialog.Actors"); - const bool hasActors = HasEntityInEditor( - EMotionFX::GetActorManager(), &EMotionFX::ActorManager::GetNumActors, &EMotionFX::ActorManager::GetActor); + const bool hasActors = EMotionFX::GetActorManager().GetNumActors() > 0; m_actorCheckbox->setChecked(hasActors); m_actorCheckbox->setDisabled(!hasActors); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorsWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorsWindow.cpp index 5012ee2578..c1e35967ec 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorsWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorsWindow.cpp @@ -123,12 +123,6 @@ namespace EMStudio continue; } - // ignore engine actors - if (actor->GetIsOwnedByRuntime()) - { - continue; - } - // create a tree item for the new attachment QTreeWidgetItem* newItem = new QTreeWidgetItem(m_treeWidget); diff --git a/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake b/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake index b12cbe102f..9947850471 100644 --- a/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake @@ -25,7 +25,6 @@ set(FILES Source/AttachmentNode.h Source/AttachmentSkin.cpp Source/AttachmentSkin.h - Source/AutoRegisteredActor.h Source/BaseObject.cpp Source/BaseObject.h Source/CompressedKeyFrames.h diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp index 5082d4b739..5b546c1155 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include #include @@ -64,8 +63,6 @@ namespace EMotionFX &actorSettings, ""); - // Set the is owned by runtime flag before finalizing the actor, as that uses the flag already. - assetData->m_emfxActor->SetIsOwnedByRuntime(true); assetData->m_emfxActor->Finalize(); // Clear out the EMFX raw asset data. diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h index 8732c6a448..3bd2c38640 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h @@ -15,7 +15,7 @@ #include #include -#include +//#include namespace EMotionFX @@ -58,7 +58,7 @@ namespace EMotionFX void InitRenderActor(); private: - AutoRegisteredActor m_emfxActor; ///< Pointer to shared EMotionFX actor + AZStd::shared_ptr m_emfxActor; AZStd::unique_ptr m_renderActor; }; From bc88d2b3819765f227cd95376e2b067535e6a123 Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 17 Aug 2021 11:54:42 -0700 Subject: [PATCH 164/226] Address feedback from Chris. Simplified get asset call and etc. Signed-off-by: rhhong --- .../CommandSystem/Source/ImporterCommands.cpp | 2 +- .../Code/EMotionFX/Source/ActorManager.cpp | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp index 4b23bd2e0a..80ef93c331 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp @@ -111,7 +111,7 @@ namespace CommandSystem AZStd::to_string(outResult, actor->GetID()); // Register actor asset. - EMotionFX::GetActorManager().RegisterActor(actorAsset); + EMotionFX::GetActorManager().RegisterActor(AZStd::move(actorAsset)); return true; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index d20d0cf11c..0779e55f85 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -121,7 +121,7 @@ namespace EMotionFX MCore::LogWarning( "EMotionFX::ActorManager::RegisterActor() - The actor at location 0x%x has already been registered as actor, most likely " "already by the LoadActor of the importer.", - actorAsset.GetAs()->GetActor()); + actorAsset->GetActor()); UnlockActors(); return; } @@ -153,10 +153,10 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [actorName](const ActorAssetData& a) { - return a.GetAs()->GetActor()->GetNameString() == actorName; + return a->GetActor()->GetNameString() == actorName; }); - return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; + return (found != m_actorAssets.end()) ? (*found)->GetActor() : nullptr; } @@ -168,10 +168,10 @@ namespace EMotionFX [fileName](const ActorAssetData& a) { return AzFramework::StringFunc::Equal( - a.GetAs()->GetActor()->GetFileNameString().c_str(), fileName, false /* no case */); + a->GetActor()->GetFileNameString().c_str(), fileName, false /* no case */); }); - return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; + return (found != m_actorAssets.end()) ? (*found)->GetActor() : nullptr; } @@ -194,7 +194,7 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [actor](const ActorAssetData& a) { - return a.GetAs()->GetActor() == actor; + return a->GetActor() == actor; }); return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; @@ -207,7 +207,7 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [actorName](const ActorAssetData& a) { - return a.GetAs()->GetActor()->GetNameString() == actorName; + return a->GetActor()->GetNameString() == actorName; }); return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; @@ -221,7 +221,7 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [filename](const ActorAssetData& a) { - return a.GetAs()->GetActor()->GetFileNameString() == filename; + return a->GetActor()->GetFileNameString() == filename; }); return (found != m_actorAssets.end()) ? AZStd::distance(m_actorAssets.begin(), found) : InvalidIndex; @@ -266,10 +266,10 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [id](const ActorAssetData& a) { - return a.GetAs()->GetActor()->GetID() == id; + return a->GetActor()->GetID() == id; }); - return (found != m_actorAssets.end()) ? found->GetAs()->GetActor() : nullptr; + return (found != m_actorAssets.end()) ? (*found)->GetActor() : nullptr; } AZ::Data::AssetId ActorManager::FindAssetIdByActorId(uint32 id) const @@ -278,7 +278,7 @@ namespace EMotionFX m_actorAssets.begin(), m_actorAssets.end(), [id](const ActorAssetData& a) { - return a.GetAs()->GetActor()->GetID() == id; + return a->GetActor()->GetID() == id; }); return (found != m_actorAssets.end()) ? found->GetId() : AZ::Data::AssetId(); @@ -425,7 +425,7 @@ namespace EMotionFX Actor* ActorManager::GetActor(size_t nr) const { - return m_actorAssets[nr].GetAs()->GetActor(); + return m_actorAssets[nr]->GetActor(); } From bf38f0748097b981a8fa06aa3785c88fac9eeacb Mon Sep 17 00:00:00 2001 From: Yuriy Toporovskyy Date: Mon, 13 Sep 2021 11:59:08 -0400 Subject: [PATCH 165/226] Allow buffer to take any size, including 0 Signed-off-by: Yuriy Toporovskyy --- .../Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp index f3744fe119..8bf518e277 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshOutputStreamManager.cpp @@ -74,6 +74,9 @@ namespace AZ creator.End(m_bufferAsset); } + + // default value of 256mb supports roughly 42 character instances at 100,000 vertices per character x 64 bytes per vertex (12 byte position + 12 byte previous frame position + 12 byte normal + 16 byte tangent + 12 byte bitangent) + // This includes only the output of the skinning compute shader, not the input buffers or bone transforms AZ_CVAR( int, r_skinnedMeshInstanceMemoryPoolSize, @@ -95,10 +98,8 @@ namespace AZ } m_needsInit = false; - // 256mb supports roughly 42 character instances at 100,000 vertices per character x 64 bytes per vertex (12 byte position + 12 byte previous frame position + 12 byte normal + 16 byte tangent + 12 byte bitangent) - // This includes only the output of the skinning compute shader, not the input buffers or bone transforms const AZ::u64 sizeInMb = r_skinnedMeshInstanceMemoryPoolSize; - m_sizeInBytes = AZ::GetMax(sizeInMb, 256ull) * (1024u * 1024u); + m_sizeInBytes = sizeInMb * (1024u * 1024u); CalculateAlignment(); From 7650683902d01ea5d66c6c2d44c6cf9107af02a8 Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 17 Aug 2021 16:17:27 -0700 Subject: [PATCH 166/226] Defer the nodeWindowPlugin reinit to main thread update. Set the actor file name through actor asset. Signed-off-by: rhhong --- .../Source/NodeWindow/NodeWindowPlugin.cpp | 11 ++++++++++- .../Source/NodeWindow/NodeWindowPlugin.h | 4 ++++ .../Code/Source/Integration/Assets/ActorAsset.cpp | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp index 6b7beb20de..4629e8dc54 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp @@ -327,7 +327,16 @@ namespace EMStudio void NodeWindowPlugin::OnActorReady([[maybe_unused]] EMotionFX::Actor* actor) { - ReInit(); + m_reinitRequested = true; + } + + void NodeWindowPlugin::ProcessFrame([[maybe_unused]] float timePassedInSeconds) + { + if (m_reinitRequested) + { + ReInit(); + m_reinitRequested = false; + } } //----------------------------------------------------------------------------------------- diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h index 157486df10..4c530fffdc 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h @@ -60,6 +60,8 @@ namespace EMStudio EMStudioPlugin* Clone() override; void ReInit(); + void ProcessFrame(float timePassedInSeconds) override; + public slots: void OnNodeChanged(); void VisibilityChanged(bool isVisible); @@ -87,5 +89,7 @@ namespace EMStudio AZStd::unique_ptr m_actorInfo; AZStd::unique_ptr m_nodeInfo; + + bool m_reinitRequested = false; }; } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp index 5b546c1155..64117fa814 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp @@ -63,6 +63,7 @@ namespace EMotionFX &actorSettings, ""); + assetData->m_emfxActor->SetFileName(asset.GetHint().c_str()); assetData->m_emfxActor->Finalize(); // Clear out the EMFX raw asset data. From 0b49cc38a74d772d5b55fda1d08e31db9e6edb8c Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 17 Aug 2021 18:19:14 -0700 Subject: [PATCH 167/226] fix broken build Signed-off-by: rhhong --- .../EMotionFX/Code/Source/Integration/System/SystemComponent.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp index 08e99f97d0..cf2f9beaa4 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include From 5369df41953403b4fd0cb66bd3edb8e28461ad94 Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 23 Aug 2021 21:30:46 -0700 Subject: [PATCH 168/226] remove extra line Signed-off-by: rhhong --- Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h index 3bd2c38640..c256fa5283 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h @@ -15,7 +15,6 @@ #include #include -//#include namespace EMotionFX From 4767d2a8917f84a72916248a4f7966e39089011a Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 24 Aug 2021 11:36:13 -0700 Subject: [PATCH 169/226] Fix unit test Signed-off-by: rhhong --- .../CommandSystem/Source/ImporterCommands.cpp | 5 + Gems/EMotionFX/Code/Tests/ActorFixture.cpp | 17 ++- Gems/EMotionFX/Code/Tests/ActorFixture.h | 7 +- .../Tests/AdditiveMotionSamplingTests.cpp | 16 +-- .../Code/Tests/AnimGraphDeferredInitTests.cpp | 1 + .../Code/Tests/BlendTreeRagdollNodeTests.cpp | 2 +- .../Code/Tests/ColliderCommandTests.cpp | 107 ++++++++++-------- .../Code/Tests/Integration/CanAddActor.cpp | 14 +-- .../Code/Tests/MotionExtractionBusTests.cpp | 1 + .../Code/Tests/MultiThreadSchedulerTests.cpp | 2 + .../AnimGraph/AnimGraphActivateTests.cpp | 8 +- .../AnimGraph/AnimGraphModelTests.cpp | 9 +- .../ProvidesUI/Menus/FileMenu/CanReset.cpp | 9 +- .../Ragdoll/CanCopyPasteColliders.cpp | 10 +- .../Ragdoll/CanCopyPasteJointLimits.cpp | 6 +- .../Code/Tests/RagdollCommandTests.cpp | 58 +++++----- .../Tests/SimulatedObjectCommandTests.cpp | 92 +++++++-------- .../Code/Tests/SimulatedObjectModelTests.cpp | 8 +- .../Tests/SimulatedObjectSerializeTests.cpp | 6 +- .../EMotionFX/Code/Tests/SkeletalLODTests.cpp | 4 +- .../Tests/TestAssetCode/TestActorAssets.cpp | 3 +- .../Tests/TestAssetCode/TestActorAssets.h | 12 ++ .../Code/Tests/UI/CanAddJointAndChildren.cpp | 9 +- .../Code/Tests/UI/CanAddSimulatedObject.cpp | 85 ++++++++------ .../Code/Tests/UI/CanAddToSimulatedObject.cpp | 17 ++- .../CanChangeParametersInSimulatedObject.cpp | 8 +- .../Code/Tests/UI/CanUseFileMenu.cpp | 25 ++-- .../Code/Tests/UI/CanUseLayoutMenu.cpp | 1 - .../Code/Tests/UI/ClothColliderTests.cpp | 5 +- .../Code/Tests/UI/LODSkinnedMeshTests.cpp | 17 +-- .../Code/Tests/UI/RagdollEditTests.cpp | 9 +- 31 files changed, 341 insertions(+), 232 deletions(-) diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp index 80ef93c331..ea3f816e86 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ImporterCommands.cpp @@ -69,6 +69,11 @@ namespace CommandSystem AZ::Data::AssetId actorAssetId; EBUS_EVENT_RESULT( actorAssetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, filename.c_str(), AZ::Data::s_invalidAssetType, false); + if (!actorAssetId.IsValid()) + { + outResult = AZStd::string::format("Cannot import actor. Cannot find asset at path %s.", filename.c_str()); + return false; + } // check if we have already loaded the actor const size_t actorIndex = EMotionFX::GetActorManager().FindActorIndex(actorAssetId); diff --git a/Gems/EMotionFX/Code/Tests/ActorFixture.cpp b/Gems/EMotionFX/Code/Tests/ActorFixture.cpp index e77df103e0..31c3a0c721 100644 --- a/Gems/EMotionFX/Code/Tests/ActorFixture.cpp +++ b/Gems/EMotionFX/Code/Tests/ActorFixture.cpp @@ -10,12 +10,15 @@ #include #include #include +#include #include #include #include #include #include +#include + namespace EMotionFX { @@ -23,8 +26,9 @@ namespace EMotionFX { SystemComponentFixture::SetUp(); - m_actor = ActorFactory::CreateAndInit(); - m_actorInstance = ActorInstance::Create(m_actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId); + m_actorInstance = ActorInstance::Create(m_actorAsset->GetActor()); } void ActorFixture::TearDown() @@ -35,6 +39,7 @@ namespace EMotionFX m_actorInstance = nullptr; } + GetEMotionFX().GetActorManager()->UnregisterAllActors(); SystemComponentFixture::TearDown(); } @@ -71,7 +76,7 @@ namespace EMotionFX AZ::ObjectStream::FilterDescriptor loadFilter(nullptr, AZ::ObjectStream::FILTERFLAG_IGNORE_UNKNOWN_CLASSES); SimulatedObjectSetup* setup = AZ::Utils::LoadObjectFromBuffer(data.data(), data.size(), serializeContext, loadFilter); - setup->InitAfterLoad(m_actor.get()); + setup->InitAfterLoad(m_actorAsset->GetActor()); return setup; } @@ -80,4 +85,10 @@ namespace EMotionFX { return { "Bip01__pelvis", "l_upLeg", "l_loLeg", "l_ankle" }; } + + + Actor* ActorFixture::GetActor() + { + return m_actorAsset->GetActor(); + } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/ActorFixture.h b/Gems/EMotionFX/Code/Tests/ActorFixture.h index 9fee056292..fad6a2c463 100644 --- a/Gems/EMotionFX/Code/Tests/ActorFixture.h +++ b/Gems/EMotionFX/Code/Tests/ActorFixture.h @@ -9,8 +9,7 @@ #pragma once #include "SystemComponentFixture.h" -#include - +#include namespace EMotionFX { @@ -31,7 +30,9 @@ namespace EMotionFX AZStd::vector GetTestJointNames() const; protected: - AutoRegisteredActor m_actor{}; + Actor* GetActor(); + + AZ::Data::Asset m_actorAsset; ActorInstance* m_actorInstance = nullptr; }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/AdditiveMotionSamplingTests.cpp b/Gems/EMotionFX/Code/Tests/AdditiveMotionSamplingTests.cpp index 4171598801..114d5c08fb 100644 --- a/Gems/EMotionFX/Code/Tests/AdditiveMotionSamplingTests.cpp +++ b/Gems/EMotionFX/Code/Tests/AdditiveMotionSamplingTests.cpp @@ -26,7 +26,7 @@ namespace EMotionFX public: void CreateSubMotionLikeBindPose(const std::string& name) { - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); size_t jointIndex = InvalidIndex; const Node* node = skeleton->FindNodeAndIndexByName(name.c_str(), jointIndex); ASSERT_NE(node, nullptr); @@ -40,7 +40,7 @@ namespace EMotionFX void CreateSubMotion(const std::string& name, const Transform& transform) { // Find and store the joint index. - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); size_t jointIndex = InvalidIndex; const Node* node = skeleton->FindNodeAndIndexByName(name.c_str(), jointIndex); ASSERT_NE(node, nullptr); @@ -55,7 +55,7 @@ namespace EMotionFX ActorFixture::SetUp(); // Get the joint that isn't in the motion data. - Node* footNode = m_actor->GetSkeleton()->FindNodeAndIndexByName("l_ball", m_footIndex); + Node* footNode = GetActor()->GetSkeleton()->FindNodeAndIndexByName("l_ball", m_footIndex); ASSERT_NE(footNode, nullptr); ASSERT_NE(m_footIndex, InvalidIndex32); @@ -98,7 +98,7 @@ namespace EMotionFX TEST_F(MotionSamplingFixture, SampleAdditiveJoint) { - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); // Sample the joints that exist in our actor skeleton as well as inside the motion data. const Pose* bindPose = m_actorInstance->GetTransformData()->GetBindPose(); @@ -106,7 +106,7 @@ namespace EMotionFX { // Sample the motion. Transform transform = Transform::CreateZero(); // Set all to Zero, not identity as this methods might return identity and we want to verify that. - m_motion->CalcNodeTransform(m_motionInstance, &transform, m_actor.get(), skeleton->GetNode(jointIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); + m_motion->CalcNodeTransform(m_motionInstance, &transform, GetActor(), skeleton->GetNode(jointIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); const Transform& bindTransform = bindPose->GetLocalSpaceTransform(jointIndex); EXPECT_THAT(transform, IsClose(bindTransform)); @@ -114,7 +114,7 @@ namespace EMotionFX // Sample the motion for the foot node. Transform footTransform = Transform::CreateZero(); // Set all to Zero, not identity as this methods might return identity and we want to verify that. - m_motion->CalcNodeTransform(m_motionInstance, &footTransform, m_actor.get(), skeleton->GetNode(m_footIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); + m_motion->CalcNodeTransform(m_motionInstance, &footTransform, GetActor(), skeleton->GetNode(m_footIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); // Make sure we get an identity transform back as we try to sample a node that doesn't have a submotion in an additive motion. EXPECT_THAT(footTransform, IsClose(Transform::CreateIdentity())); @@ -125,7 +125,7 @@ namespace EMotionFX // Make sure we do not get an identity transform back now that it is a non-additive motion. footTransform.Zero(); // Set all to Zero, not identity as this methods might return identity and we want to verify that. const Transform& expectedFootTransform = m_actorInstance->GetTransformData()->GetCurrentPose()->GetLocalSpaceTransform(m_footIndex); - m_motion->CalcNodeTransform(m_motionInstance, &footTransform, m_actor.get(), skeleton->GetNode(m_footIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); + m_motion->CalcNodeTransform(m_motionInstance, &footTransform, GetActor(), skeleton->GetNode(m_footIndex), /*timeValue=*/0.0f, /*enableRetargeting=*/false); EXPECT_THAT(footTransform, IsClose(expectedFootTransform)); } @@ -134,7 +134,7 @@ namespace EMotionFX // Sample a pose from the motion. Pose pose; pose.LinkToActorInstance(m_actorInstance); - pose.InitFromBindPose(m_actor.get()); + pose.InitFromBindPose(GetActor()); pose.Zero(); m_motion->Update(&pose, &pose, m_motionInstance); diff --git a/Gems/EMotionFX/Code/Tests/AnimGraphDeferredInitTests.cpp b/Gems/EMotionFX/Code/Tests/AnimGraphDeferredInitTests.cpp index 0449005659..4448deff27 100644 --- a/Gems/EMotionFX/Code/Tests/AnimGraphDeferredInitTests.cpp +++ b/Gems/EMotionFX/Code/Tests/AnimGraphDeferredInitTests.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Tests/BlendTreeRagdollNodeTests.cpp b/Gems/EMotionFX/Code/Tests/BlendTreeRagdollNodeTests.cpp index a01d333e95..4608917523 100644 --- a/Gems/EMotionFX/Code/Tests/BlendTreeRagdollNodeTests.cpp +++ b/Gems/EMotionFX/Code/Tests/BlendTreeRagdollNodeTests.cpp @@ -105,7 +105,7 @@ namespace EMotionFX TEST_P(RagdollRootNodeFixture, RagdollRootNodeIsSimulatedTests) { - Physics::RagdollConfiguration& ragdollConfig = m_actor->GetPhysicsSetup()->GetRagdollConfig(); + Physics::RagdollConfiguration& ragdollConfig = GetActor()->GetPhysicsSetup()->GetRagdollConfig(); AZStd::vector& ragdollNodes = ragdollConfig.m_nodes; const RagdollRootNodeParam& param = GetParam(); const AZStd::string ragdollRootNodeName = param.m_ragdollRootNode.c_str(); diff --git a/Gems/EMotionFX/Code/Tests/ColliderCommandTests.cpp b/Gems/EMotionFX/Code/Tests/ColliderCommandTests.cpp index 6314253eee..a6cadc5c2f 100644 --- a/Gems/EMotionFX/Code/Tests/ColliderCommandTests.cpp +++ b/Gems/EMotionFX/Code/Tests/ColliderCommandTests.cpp @@ -24,13 +24,13 @@ namespace EMotionFX CommandSystem::CommandManager commandManager; MCore::CommandGroup commandGroup; - const AZ::u32 actorId = m_actor->GetID(); + const AZ::u32 actorId = GetActor()->GetID(); const AZStd::vector jointNames = GetTestJointNames(); const size_t jointCount = jointNames.size(); // 1. Add colliders - const AZStd::string serializedBeforeAdd = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeAdd = SerializePhysicsSetup(GetActor()); for (const AZStd::string& jointName : jointNames) { CommandColliderHelpers::AddCollider(actorId, jointName, PhysicsSetup::HitDetection, azrtti_typeid(), &commandGroup); @@ -39,23 +39,27 @@ namespace EMotionFX } EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedAfterAdd = SerializePhysicsSetup(m_actor.get()); - EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(jointCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); + const AZStd::string serializedAfterAdd = SerializePhysicsSetup(GetActor()); + EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ( + jointCount, + PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/ false, Physics::ShapeType::Box)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(serializedBeforeAdd, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(serializedBeforeAdd, SerializePhysicsSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(jointCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); - EXPECT_EQ(serializedAfterAdd, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ( + jointCount, + PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/ false, Physics::ShapeType::Box)); + EXPECT_EQ(serializedAfterAdd, SerializePhysicsSetup(GetActor())); // 2. Remove colliders commandGroup.RemoveAllCommands(); - const AZStd::string serializedBeforeRemove = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeRemove = SerializePhysicsSetup(GetActor()); size_t colliderIndexToRemove = 1; for (const AZStd::string& jointName : jointNames) @@ -64,18 +68,24 @@ namespace EMotionFX } EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedAfterRemove = SerializePhysicsSetup(m_actor.get()); - EXPECT_EQ(jointCount * 2, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Capsule)); + const AZStd::string serializedAfterRemove = SerializePhysicsSetup(GetActor()); + EXPECT_EQ(jointCount * 2, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ( + 0, + PhysicsSetupUtils::CountColliders( + GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/ false, Physics::ShapeType::Capsule)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(serializedBeforeRemove, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(jointCount * 3, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(serializedBeforeRemove, SerializePhysicsSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(jointCount * 2, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Capsule)); - EXPECT_EQ(serializedAfterRemove, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(jointCount * 2, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ( + 0, + PhysicsSetupUtils::CountColliders( + GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/ false, Physics::ShapeType::Capsule)); + EXPECT_EQ(serializedAfterRemove, SerializePhysicsSetup(GetActor())); } TEST_F(ColliderCommandTests, AddRemove1000Colliders) @@ -84,11 +94,11 @@ namespace EMotionFX CommandSystem::CommandManager commandManager; MCore::CommandGroup commandGroup; - const AZ::u32 actorId = m_actor->GetID(); + const AZ::u32 actorId = GetActor()->GetID(); const AZStd::string jointName = "Bip01__pelvis"; // 1. Add colliders - const AZStd::string serializedBeforeAdd = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeAdd = SerializePhysicsSetup(GetActor()); const size_t colliderCount = 1000; for (AZ::u32 i = 0; i < colliderCount; ++i) { @@ -96,51 +106,51 @@ namespace EMotionFX } EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedAfterAdd = SerializePhysicsSetup(m_actor.get()); - EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); + const AZStd::string serializedAfterAdd = SerializePhysicsSetup(GetActor()); + EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(serializedBeforeAdd, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(serializedBeforeAdd, SerializePhysicsSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); - EXPECT_EQ(serializedAfterAdd, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); + EXPECT_EQ(serializedAfterAdd, SerializePhysicsSetup(GetActor())); // 2. Clear colliders commandGroup.RemoveAllCommands(); - const AZStd::string serializedBeforeRemove = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeRemove = SerializePhysicsSetup(GetActor()); CommandColliderHelpers::ClearColliders(actorId, jointName, PhysicsSetup::HitDetection, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedAfterRemove = SerializePhysicsSetup(m_actor.get()); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); + const AZStd::string serializedAfterRemove = SerializePhysicsSetup(GetActor()); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(serializedBeforeRemove, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(colliderCount, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(serializedBeforeRemove, SerializePhysicsSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection)); - EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); - EXPECT_EQ(serializedAfterRemove, SerializePhysicsSetup(m_actor.get())); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection)); + EXPECT_EQ(0, PhysicsSetupUtils::CountColliders(GetActor(), PhysicsSetup::HitDetection, /*ignoreShapeType*/false, Physics::ShapeType::Box)); + EXPECT_EQ(serializedAfterRemove, SerializePhysicsSetup(GetActor())); } TEST_F(ColliderCommandTests, AutoSizingColliders) { CommandSystem::CommandManager commandManager; - const AZ::u32 actorId = m_actor->GetID(); + const AZ::u32 actorId = GetActor()->GetID(); const AZStd::vector jointNames = GetTestJointNames(); ASSERT_TRUE(jointNames.size() > 0) << "The joint names test data needs at least one joint for this test."; const AZStd::string& jointName = jointNames[0]; CommandColliderHelpers::AddCollider(actorId, jointName, PhysicsSetup::HitDetection, azrtti_typeid()); - const AZStd::shared_ptr& physicsSetup = m_actor->GetPhysicsSetup(); + const AZStd::shared_ptr& physicsSetup = GetActor()->GetPhysicsSetup(); Physics::CharacterColliderConfiguration* colliderConfig = physicsSetup->GetColliderConfigByType(PhysicsSetup::HitDetection); EXPECT_NE(colliderConfig, nullptr) << "Collider config should be valid after we added a collider to it."; @@ -184,11 +194,11 @@ namespace EMotionFX const PhysicsSetup::ColliderConfigType m_configType = PhysicsSetup::ColliderConfigType::HitDetection; // Add collider to the given joint first. - const AZStd::shared_ptr& physicsSetup = m_actor->GetPhysicsSetup(); - EXPECT_TRUE(CommandColliderHelpers::AddCollider(m_actor->GetID(), m_jointName, m_configType, param.m_shapeType)); + const AZStd::shared_ptr& physicsSetup = GetActor()->GetPhysicsSetup(); + EXPECT_TRUE(CommandColliderHelpers::AddCollider(GetActor()->GetID(), m_jointName, m_configType, param.m_shapeType)); Physics::CharacterColliderConfiguration* characterColliderConfig = physicsSetup->GetColliderConfigByType(m_configType); ASSERT_TRUE(characterColliderConfig != nullptr); - Physics::CharacterColliderNodeConfiguration* nodeConfig = CommandColliderHelpers::GetCreateNodeConfig(m_actor.get(), m_jointName, *characterColliderConfig, result); + Physics::CharacterColliderNodeConfiguration* nodeConfig = CommandColliderHelpers::GetCreateNodeConfig(GetActor(), m_jointName, *characterColliderConfig, result); ASSERT_TRUE(nodeConfig != nullptr); EXPECT_EQ(nodeConfig->m_shapes.size(), 1); @@ -200,7 +210,8 @@ namespace EMotionFX // Create the adjust collider command and using the data from the test parameter. MCore::Command* orgCommand = CommandSystem::GetCommandManager()->FindCommand(CommandAdjustCollider::s_commandName); - CommandAdjustCollider* command = aznew CommandAdjustCollider(m_actor->GetID(), m_jointName, m_configType, /*colliderIndex=*/0, orgCommand); + CommandAdjustCollider* command = + aznew CommandAdjustCollider(GetActor()->GetID(), m_jointName, m_configType, /*colliderIndex=*/0, orgCommand); command->SetOldIsTrigger(colliderConfig->m_isTrigger); command->SetIsTrigger(param.m_isTrigger); command->SetOldPosition(colliderConfig->m_position); @@ -223,9 +234,9 @@ namespace EMotionFX } // Check execute. - const AZStd::string serializedBeforeExecute = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeExecute = SerializePhysicsSetup(GetActor()); EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(command, result)); - const AZStd::string serializedAfterExecute = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedAfterExecute = SerializePhysicsSetup(GetActor()); EXPECT_EQ(colliderConfig->m_isTrigger, param.m_isTrigger); EXPECT_EQ(colliderConfig->m_position, param.m_position); @@ -243,12 +254,12 @@ namespace EMotionFX // Check undo. EXPECT_TRUE(CommandSystem::GetCommandManager()->Undo(result)); - const AZStd::string serializedAfterUndo = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedAfterUndo = SerializePhysicsSetup(GetActor()); EXPECT_EQ(serializedAfterUndo, serializedBeforeExecute); // Check redo. EXPECT_TRUE(CommandSystem::GetCommandManager()->Redo(result)); - const AZStd::string serializedAfterRedo = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedAfterRedo = SerializePhysicsSetup(GetActor()); EXPECT_EQ(serializedAfterRedo, serializedAfterExecute); } diff --git a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp index 31e1f75d29..0c3228567e 100644 --- a/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp +++ b/Gems/EMotionFX/Code/Tests/Integration/CanAddActor.cpp @@ -13,9 +13,11 @@ #include #include +#include +#include #include #include -#include +#include namespace EMotionFX { @@ -33,14 +35,12 @@ namespace EMotionFX ASSERT_EQ(GetActorManager().GetNumActors(), 0); // Load an Actor - const char* actorCmd{ "ImportActor -filename @engroot@/Gems/EMotionFX/Code/Tests/TestAssets/Rin/rin.actor" }; - { - AZStd::string result; - EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(actorCmd, result)) << result.c_str(); - } + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, "Jack"); // Ensure the Actor is correct - ASSERT_TRUE(GetActorManager().FindActorByName("rinActor")); + ASSERT_TRUE(GetActorManager().FindActorByName("Jack")); EXPECT_EQ(GetActorManager().GetNumActors(), 1); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/MotionExtractionBusTests.cpp b/Gems/EMotionFX/Code/Tests/MotionExtractionBusTests.cpp index 170f4d2d75..347d8f93a8 100644 --- a/Gems/EMotionFX/Code/Tests/MotionExtractionBusTests.cpp +++ b/Gems/EMotionFX/Code/Tests/MotionExtractionBusTests.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Tests/MultiThreadSchedulerTests.cpp b/Gems/EMotionFX/Code/Tests/MultiThreadSchedulerTests.cpp index 180da46746..02622ecd67 100644 --- a/Gems/EMotionFX/Code/Tests/MultiThreadSchedulerTests.cpp +++ b/Gems/EMotionFX/Code/Tests/MultiThreadSchedulerTests.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphActivateTests.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphActivateTests.cpp index 78cac409a6..dea332b40e 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphActivateTests.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphActivateTests.cpp @@ -19,11 +19,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include namespace EMotionFX @@ -78,7 +80,8 @@ namespace EMotionFX EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommandGroup(group, commandResult)) << commandResult.c_str(); // Create temp Actor - m_actor = ActorFactory::CreateAndInit(1, "tempActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 1, "tempActor"); // Cache some local poitners. m_animGraphPlugin = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMStudio::AnimGraphPlugin::CLASS_ID)); @@ -90,6 +93,7 @@ namespace EMotionFX void TearDown() override { + GetEMotionFX().GetActorManager()->UnregisterAllActors(); QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); delete m_animGraph; UIFixture::TearDown(); @@ -104,7 +108,7 @@ namespace EMotionFX AZStd::string m_entryNodeName = "testEntry"; AnimGraph* m_animGraph = nullptr; EMStudio::AnimGraphPlugin* m_animGraphPlugin = nullptr; - AutoRegisteredActor m_actor; + AZ::Data::Asset m_actorAsset; }; TEST_F(PopulatedAnimGraphFixture, CanActivateValidGraph) diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphModelTests.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphModelTests.cpp index 4ffc9e0097..b9b96bb59c 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphModelTests.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/AnimGraph/AnimGraphModelTests.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -43,6 +42,7 @@ #include #include #include +#include #include namespace EMotionFX @@ -423,7 +423,10 @@ namespace EMotionFX using testing::Eq; using testing::Not; - AutoRegisteredActor actor = EMotionFX::ActorFactory::CreateAndInit(1); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 1); + auto motionSet = AZStd::make_unique(); { @@ -432,7 +435,7 @@ namespace EMotionFX } auto* animGraph = EMotionFX::GetAnimGraphManager().FindAnimGraphByID(0); - auto* actorInstance = EMotionFX::ActorInstance::Create(actor.get()); + auto* actorInstance = EMotionFX::ActorInstance::Create(actorAsset->GetActor()); auto* animGraphInstance = EMotionFX::AnimGraphInstance::Create(animGraph, actorInstance, motionSet.get()); actorInstance->SetAnimGraphInstance(animGraphInstance); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp index d53ddcc924..c374938590 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Menus/FileMenu/CanReset.cpp @@ -24,12 +24,11 @@ #include #include -#include #include #include +#include #include - namespace EMotionFX { @@ -58,8 +57,10 @@ namespace EMotionFX ASSERT_EQ(GetMotionManager().GetNumMotions(), 0) << "Expected exactly zero motions"; // Create Actor, AnimGraph, Motionset and Motion - AutoRegisteredActor actor = ActorFactory::CreateAndInit(2, "SampleActor"); - ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 2, "SampleActor"); + ActorInstance::Create(actorAsset->GetActor()); { AZStd::string result; ASSERT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand(createAnimGraphCmd, result)) << result.c_str(); diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteColliders.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteColliders.cpp index 4f43e7dae5..17f07b2180 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteColliders.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteColliders.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include namespace EMotionFX @@ -79,7 +80,11 @@ namespace EMotionFX TEST_F(CopyPasteRagdollCollidersFixture, CanCopyCollider) #endif // AZ_TRAIT_DISABLE_FAILED_EMOTION_FX_EDITOR_TESTS { - AutoRegisteredActor actor{ActorFactory::CreateAndInit(4)}; + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 4); + const Actor* actor = actorAsset->GetActor(); + const Physics::RagdollConfiguration& ragdollConfig = actor->GetPhysicsSetup()->GetRagdollConfig(); const Physics::CharacterColliderConfiguration& simulatedObjectConfig = actor->GetPhysicsSetup()->GetSimulatedObjectColliderConfig(); @@ -104,8 +109,7 @@ namespace EMotionFX { AZStd::string result; - EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand( - "Select -actorId " + AZStd::to_string(actor->GetID()), + EXPECT_TRUE(CommandSystem::GetCommandManager()->ExecuteCommand("Select -actorId " + AZStd::to_string(actor->GetID()), result)) << result.c_str(); } diff --git a/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteJointLimits.cpp b/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteJointLimits.cpp index 8e4fba0dd6..3f475c7916 100644 --- a/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteJointLimits.cpp +++ b/Gems/EMotionFX/Code/Tests/ProvidesUI/Ragdoll/CanCopyPasteJointLimits.cpp @@ -14,7 +14,6 @@ #include #include -#include #include #include #include @@ -25,6 +24,7 @@ #include #include #include +#include #include namespace EMotionFX @@ -76,7 +76,9 @@ namespace EMotionFX return AZStd::make_unique(); }); - AutoRegisteredActor actor {ActorFactory::CreateAndInit(4)}; + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 4); + const Actor* actor = actorAsset->GetActor(); { AZStd::string result; diff --git a/Gems/EMotionFX/Code/Tests/RagdollCommandTests.cpp b/Gems/EMotionFX/Code/Tests/RagdollCommandTests.cpp index e9a4cc0c26..1004b0a1f6 100644 --- a/Gems/EMotionFX/Code/Tests/RagdollCommandTests.cpp +++ b/Gems/EMotionFX/Code/Tests/RagdollCommandTests.cpp @@ -99,28 +99,28 @@ namespace EMotionFX "l_hand", }; - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_shldr"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_shldr"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftShoulder ) ); - const AZStd::string serializedBeforeHandAdded = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeHandAdded = SerializePhysicsSetup(GetActor()); // Adding l_hand should add l_upArm and l_loArm as well commandGroup.RemoveAllCommands(); - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_hand"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_hand"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); - const AZStd::string serializedAfterHandAdded = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedAfterHandAdded = SerializePhysicsSetup(GetActor()); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftHand @@ -129,23 +129,23 @@ namespace EMotionFX EXPECT_TRUE(commandManager.Undo(result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftShoulder ) ); - EXPECT_THAT(SerializePhysicsSetup(m_actor.get()), StrEq(serializedBeforeHandAdded)); + EXPECT_THAT(SerializePhysicsSetup(GetActor()), StrEq(serializedBeforeHandAdded)); EXPECT_TRUE(commandManager.Redo(result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftHand ) ); - EXPECT_THAT(SerializePhysicsSetup(m_actor.get()), StrEq(serializedAfterHandAdded)); + EXPECT_THAT(SerializePhysicsSetup(GetActor()), StrEq(serializedAfterHandAdded)); } TEST_F(RagdollCommandTests, AddJointHigherInHierarchy) @@ -166,10 +166,10 @@ namespace EMotionFX "l_hand", }; - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_hand"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_hand"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftHand @@ -178,10 +178,10 @@ namespace EMotionFX // l_shldr should already be in the ragdoll, so adding it should do nothing commandGroup.RemoveAllCommands(); - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_shldr"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_shldr"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftHand @@ -190,11 +190,11 @@ namespace EMotionFX // Undo here undoes the addition of l_hand EXPECT_TRUE(commandManager.Undo(result)) << result.c_str(); - EXPECT_TRUE(GetRagdollJointNames(m_actor.get()).empty()); + EXPECT_TRUE(GetRagdollJointNames(GetActor()).empty()); EXPECT_TRUE(commandManager.Redo(result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise( StrEq(), jointsToLeftHand @@ -221,16 +221,16 @@ namespace EMotionFX }; // Add a joint to the ragdoll that does not make a chain all the way to the root - EXPECT_TRUE(commandManager.ExecuteCommand(aznew CommandAddRagdollJoint(m_actor->GetID(), "l_shldr"), result)) << result.c_str(); + EXPECT_TRUE(commandManager.ExecuteCommand(aznew CommandAddRagdollJoint(GetActor()->GetID(), "l_shldr"), result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise(StrEq(), AZStd::vector{"l_shldr"}) ); - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_hand"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_hand"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise(StrEq(), jointsToLeftHand) ); } @@ -250,17 +250,17 @@ namespace EMotionFX }; // Add joints from the root to the left hand - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_hand"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_hand"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); // Removing the left shoulder should remove the elbow, wrist, and hand // as well commandGroup.RemoveAllCommands(); - CommandRagdollHelpers::RemoveJointsFromRagdoll(m_actor->GetID(), {"l_shldr"}, &commandGroup); + CommandRagdollHelpers::RemoveJointsFromRagdoll(GetActor()->GetID(), {"l_shldr"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); EXPECT_THAT( - GetRagdollJointNames(m_actor.get()), + GetRagdollJointNames(GetActor()), testing::UnorderedPointwise(StrEq(), jointsToSpine3) ); } @@ -271,24 +271,24 @@ namespace EMotionFX CommandSystem::CommandManager commandManager; MCore::CommandGroup commandGroup; - CommandRagdollHelpers::AddJointsToRagdoll(m_actor->GetID(), {"l_hand"}, &commandGroup); + CommandRagdollHelpers::AddJointsToRagdoll(GetActor()->GetID(), {"l_hand"}, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)) << result.c_str(); - const AZStd::string serializedBeforeSphereAdded = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedBeforeSphereAdded = SerializePhysicsSetup(GetActor()); - CommandColliderHelpers::AddCollider(m_actor->GetID(), "l_hand", + CommandColliderHelpers::AddCollider(GetActor()->GetID(), "l_hand", PhysicsSetup::Ragdoll, azrtti_typeid()); - const AZStd::string serializedAfterSphereAdded = SerializePhysicsSetup(m_actor.get()); + const AZStd::string serializedAfterSphereAdded = SerializePhysicsSetup(GetActor()); EXPECT_THAT(serializedAfterSphereAdded, ::testing::Not(StrEq(serializedBeforeSphereAdded))); EXPECT_TRUE(commandManager.Undo(result)) << result.c_str(); - EXPECT_THAT(SerializePhysicsSetup(m_actor.get()), StrEq(serializedBeforeSphereAdded)); + EXPECT_THAT(SerializePhysicsSetup(GetActor()), StrEq(serializedBeforeSphereAdded)); EXPECT_TRUE(commandManager.Redo(result)) << result.c_str(); - EXPECT_THAT(SerializePhysicsSetup(m_actor.get()), StrEq(serializedAfterSphereAdded)); + EXPECT_THAT(SerializePhysicsSetup(GetActor()), StrEq(serializedAfterSphereAdded)); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/SimulatedObjectCommandTests.cpp b/Gems/EMotionFX/Code/Tests/SimulatedObjectCommandTests.cpp index 4bac70c13d..dab761f649 100644 --- a/Gems/EMotionFX/Code/Tests/SimulatedObjectCommandTests.cpp +++ b/Gems/EMotionFX/Code/Tests/SimulatedObjectCommandTests.cpp @@ -55,25 +55,25 @@ namespace EMotionFX CommandSystem::CommandManager commandManager; MCore::CommandGroup commandGroup; - const uint32 actorId = m_actor->GetID(); + const uint32 actorId = GetActor()->GetID(); const AZStd::vector jointNames = GetTestJointNames(); // 1. Add simulated object. - const AZStd::string serializedBeforeAdd = SerializeSimulatedObjectSetup(m_actor.get()); + const AZStd::string serializedBeforeAdd = SerializeSimulatedObjectSetup(GetActor()); CommandSimulatedObjectHelpers::AddSimulatedObject(actorId, AZStd::nullopt, &commandGroup); CommandSimulatedObjectHelpers::AddSimulatedObject(actorId, AZStd::nullopt, &commandGroup); CommandSimulatedObjectHelpers::AddSimulatedObject(actorId, AZStd::nullopt, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedAfterAdd = SerializeSimulatedObjectSetup(m_actor.get()); - EXPECT_EQ(3, CountSimulatedObjects(m_actor.get())); + const AZStd::string serializedAfterAdd = SerializeSimulatedObjectSetup(GetActor()); + EXPECT_EQ(3, CountSimulatedObjects(GetActor())); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(0, CountSimulatedObjects(m_actor.get())); - EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedObjects(GetActor())); + EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(3, CountSimulatedObjects(m_actor.get())); - EXPECT_EQ(serializedAfterAdd, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(3, CountSimulatedObjects(GetActor())); + EXPECT_EQ(serializedAfterAdd, SerializeSimulatedObjectSetup(GetActor())); // 2. Remove simulated object. commandGroup.RemoveAllCommands(); @@ -81,22 +81,22 @@ namespace EMotionFX CommandSimulatedObjectHelpers::RemoveSimulatedObject(actorId, 0, &commandGroup); CommandSimulatedObjectHelpers::RemoveSimulatedObject(actorId, 0, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - EXPECT_EQ(0, CountSimulatedObjects(m_actor.get())); - EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedObjects(GetActor())); + EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(3, CountSimulatedObjects(m_actor.get())); - EXPECT_EQ(serializedAfterAdd, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(3, CountSimulatedObjects(GetActor())); + EXPECT_EQ(serializedAfterAdd, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(0, CountSimulatedObjects(m_actor.get())); - EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedObjects(GetActor())); + EXPECT_EQ(serializedBeforeAdd, SerializeSimulatedObjectSetup(GetActor())); // 3. Add simulated joints. // 3.1 Add a simulated object first to put in the simulated joints. commandGroup.RemoveAllCommands(); CommandSimulatedObjectHelpers::AddSimulatedObject(actorId); - const AZStd::string serialized3_1 = SerializeSimulatedObjectSetup(m_actor.get()); + const AZStd::string serialized3_1 = SerializeSimulatedObjectSetup(GetActor()); // 3.2 Add simulated joints. // Joint hierarchy as follow: @@ -105,7 +105,7 @@ namespace EMotionFX // --l_loLeg // --l_ankle // --l_ball - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); const size_t l_upLegIdx = skeleton->FindNodeByName("l_upLeg")->GetNodeIndex(); const size_t l_upLegRollIdx = skeleton->FindNodeByName("l_upLegRoll")->GetNodeIndex(); const size_t l_loLegIdx = skeleton->FindNodeByName("l_loLeg")->GetNodeIndex(); @@ -113,33 +113,33 @@ namespace EMotionFX const size_t l_ballIdx = skeleton->FindNodeByName("l_ball")->GetNodeIndex(); CommandSimulatedObjectHelpers::AddSimulatedJoints(actorId, {l_upLegIdx, l_upLegRollIdx, l_loLegIdx, l_ankleIdx, l_ballIdx}, 0, false, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serialized3_2 = SerializeSimulatedObjectSetup(m_actor.get()); - EXPECT_EQ(5, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(2, CountChildJoints(m_actor.get(), 0, l_upLegIdx)); - EXPECT_EQ(0, CountChildJoints(m_actor.get(), 0, l_upLegRollIdx)); - EXPECT_EQ(1, CountChildJoints(m_actor.get(), 0, l_loLegIdx)); + const AZStd::string serialized3_2 = SerializeSimulatedObjectSetup(GetActor()); + EXPECT_EQ(5, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(2, CountChildJoints(GetActor(), 0, l_upLegIdx)); + EXPECT_EQ(0, CountChildJoints(GetActor(), 0, l_upLegRollIdx)); + EXPECT_EQ(1, CountChildJoints(GetActor(), 0, l_loLegIdx)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(0, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(5, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(5, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(GetActor())); // 4 Remove simulated joints. // 4.1 Test sparse chain. - EXPECT_EQ(1, CountRootJoints(m_actor.get(), 0)); + EXPECT_EQ(1, CountRootJoints(GetActor(), 0)); commandGroup.RemoveAllCommands(); CommandSimulatedObjectHelpers::RemoveSimulatedJoints(actorId, {l_loLegIdx}, 0, false, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - EXPECT_EQ(2, CountRootJoints(m_actor.get(), 0)); + EXPECT_EQ(2, CountRootJoints(GetActor(), 0)); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(1, CountRootJoints(m_actor.get(), 0)); + EXPECT_EQ(1, CountRootJoints(GetActor(), 0)); EXPECT_TRUE(commandManager.Redo(result)); - EXPECT_EQ(2, CountRootJoints(m_actor.get(), 0)); + EXPECT_EQ(2, CountRootJoints(GetActor(), 0)); EXPECT_TRUE(commandManager.Undo(result)); @@ -147,23 +147,23 @@ namespace EMotionFX commandGroup.RemoveAllCommands(); CommandSimulatedObjectHelpers::RemoveSimulatedJoints(actorId, { l_upLegIdx, l_upLegRollIdx, l_loLegIdx, l_ankleIdx, l_ballIdx }, 0, false, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - EXPECT_EQ(0, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(5, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(5, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(GetActor())); // 4.3 Test removing the root joint and children. commandGroup.RemoveAllCommands(); CommandSimulatedObjectHelpers::RemoveSimulatedJoints(actorId, { l_upLegIdx }, 0, true, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - EXPECT_EQ(0, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_1, SerializeSimulatedObjectSetup(GetActor())); EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(5, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(5, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serialized3_2, SerializeSimulatedObjectSetup(GetActor())); } TEST_F(SimulatedObjectCommandTests, SimulatedObjectCommands_UndoRemoveJointTest) @@ -172,35 +172,35 @@ namespace EMotionFX CommandSystem::CommandManager commandManager; MCore::CommandGroup commandGroup; - const uint32 actorId = m_actor->GetID(); + const uint32 actorId = GetActor()->GetID(); const AZStd::vector jointNames = GetTestJointNames(); // 1. Add simulated object CommandSimulatedObjectHelpers::AddSimulatedObject(actorId, AZStd::nullopt, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - const AZStd::string serializedBase = SerializeSimulatedObjectSetup(m_actor.get()); + const AZStd::string serializedBase = SerializeSimulatedObjectSetup(GetActor()); const size_t simulatedObjectIndex = 0; // 2. Add r_upLeg simulated joints - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); const size_t r_upLegIdx = skeleton->FindNodeByName("r_upLeg")->GetNodeIndex(); const size_t r_loLegIdx = skeleton->FindNodeByName("r_loLeg")->GetNodeIndex(); CommandSimulatedObjectHelpers::AddSimulatedJoints(actorId, { r_upLegIdx, r_loLegIdx }, 0, false); - EXPECT_EQ(2, CountSimulatedJoints(m_actor.get(), 0)); - const AZStd::string serializedUpLeg = SerializeSimulatedObjectSetup(m_actor.get()); + EXPECT_EQ(2, CountSimulatedJoints(GetActor(), 0)); + const AZStd::string serializedUpLeg = SerializeSimulatedObjectSetup(GetActor()); // 3. Remove the r_loLeg simulated joint AZStd::vector jointsToBeRemoved; commandGroup.RemoveAllCommands(); CommandSimulatedObjectHelpers::RemoveSimulatedJoints(actorId, { r_upLegIdx }, simulatedObjectIndex, true, &commandGroup); EXPECT_TRUE(commandManager.ExecuteCommandGroup(commandGroup, result)); - EXPECT_EQ(0, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serializedBase, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(0, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serializedBase, SerializeSimulatedObjectSetup(GetActor())); // 4. Undo // This recreates r_loLeg and r_loLeg but won't add all other children recursively as only these two joints got aded in step 3. EXPECT_TRUE(commandManager.Undo(result)); - EXPECT_EQ(2, CountSimulatedJoints(m_actor.get(), 0)); - EXPECT_EQ(serializedUpLeg, SerializeSimulatedObjectSetup(m_actor.get())); + EXPECT_EQ(2, CountSimulatedJoints(GetActor(), 0)); + EXPECT_EQ(serializedUpLeg, SerializeSimulatedObjectSetup(GetActor())); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/SimulatedObjectModelTests.cpp b/Gems/EMotionFX/Code/Tests/SimulatedObjectModelTests.cpp index 41269cec77..85da96412b 100644 --- a/Gems/EMotionFX/Code/Tests/SimulatedObjectModelTests.cpp +++ b/Gems/EMotionFX/Code/Tests/SimulatedObjectModelTests.cpp @@ -22,17 +22,21 @@ #include #include #include +#include namespace EMotionFX { using SimulatedObjectModelTestsFixture = UIFixture; TEST_F(SimulatedObjectModelTestsFixture, CanUndoAddSimulatedObjectAndSimulatedJointWithChildren) { - AutoRegisteredActor actor = ActorFactory::CreateAndInit(3, "simulatedObjectModelTestActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 3, "simulatedObjectModelTestActor"); + const Actor* actor = actorAsset->GetActor(); EMotionFX::SimulatedObjectWidget* simulatedObjectWidget = static_cast(EMStudio::GetPluginManager()->FindActivePlugin(EMotionFX::SimulatedObjectWidget::CLASS_ID)); ASSERT_TRUE(simulatedObjectWidget) << "Simulated Object plugin not loaded"; - simulatedObjectWidget->ActorSelectionChanged(actor.get()); + simulatedObjectWidget->ActorSelectionChanged(actorAsset->GetActor()); SimulatedObjectModel* model = simulatedObjectWidget->GetSimulatedObjectModel(); diff --git a/Gems/EMotionFX/Code/Tests/SimulatedObjectSerializeTests.cpp b/Gems/EMotionFX/Code/Tests/SimulatedObjectSerializeTests.cpp index c261f63bc1..e5c2c5ce4f 100644 --- a/Gems/EMotionFX/Code/Tests/SimulatedObjectSerializeTests.cpp +++ b/Gems/EMotionFX/Code/Tests/SimulatedObjectSerializeTests.cpp @@ -20,7 +20,7 @@ namespace EMotionFX TEST_F(SimulatedObjectSerializeTests, SerializeTest) { - SimulatedObjectSetup* setup = m_actor->GetSimulatedObjectSetup().get(); + SimulatedObjectSetup* setup = GetActor()->GetSimulatedObjectSetup().get(); // Build some setup. SimulatedObject* object = setup->AddSimulatedObject(); @@ -29,7 +29,7 @@ namespace EMotionFX object->SetGravityFactor(3.0f); object->SetStiffnessFactor(4.0f); const AZStd::vector jointNames = { "l_upArm", "l_loArm", "l_hand" }; - Skeleton* skeleton = m_actor->GetSkeleton(); + Skeleton* skeleton = GetActor()->GetSkeleton(); for (const AZStd::string& name : jointNames) { size_t skeletonJointIndex; @@ -50,7 +50,7 @@ namespace EMotionFX object->GetSimulatedJoint(0)->SetPinned(true); // Serialize it and deserialize it. - const AZStd::string serialized = SerializeSimulatedObjectSetup(m_actor.get()); + const AZStd::string serialized = SerializeSimulatedObjectSetup(GetActor()); AZStd::unique_ptr loadedSetup(DeserializeSimulatedObjectSetup(serialized)); // Verify some of the contents of the deserialized version. diff --git a/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp b/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp index 1252eb36ae..54a81cb559 100644 --- a/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp +++ b/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp @@ -22,13 +22,13 @@ namespace EMotionFX void SetUp() { ActorFixture::SetUp(); - m_actor->AddLODLevel(); + GetActor()->AddLODLevel(); DisableJointsForLOD(m_disabledJointNames, 1); } void DisableJointsForLOD(const std::vector& jointNames, size_t lodLevel) { - const Skeleton* skeleton = m_actor->GetSkeleton(); + const Skeleton* skeleton = GetActor()->GetSkeleton(); for (const std::string& jointName : jointNames) { Node* joint = skeleton->FindNodeByName(jointName.c_str()); diff --git a/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.cpp b/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.cpp index 6375d48c6b..bb3c4f76e2 100644 --- a/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.cpp +++ b/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.cpp @@ -10,9 +10,10 @@ #include #include #include -#include #include #include +#include +#include namespace EMotionFX { diff --git a/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.h b/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.h index 3a041fcf34..5b75ddf590 100644 --- a/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.h +++ b/Gems/EMotionFX/Code/Tests/TestAssetCode/TestActorAssets.h @@ -10,6 +10,9 @@ #include #include +#include +#include +#include namespace EMotionFX { @@ -18,5 +21,14 @@ namespace EMotionFX public: static AZStd::string FileToBase64(const char* filePath); static AZ::Data::Asset GetAssetFromActor(const AZ::Data::AssetId& assetId, AZStd::unique_ptr&& actor); + + template + static AZ::Data::Asset CreateActorAssetAndRegister(const AZ::Data::AssetId& assetId, Args&&... args) + { + AZStd::unique_ptr actor = ActorFactory::CreateAndInit(AZStd::forward(args)...); + AZ::Data::Asset actorAsset = TestActorAssets::GetAssetFromActor(assetId, AZStd::move(actor)); + GetEMotionFX().GetActorManager()->RegisterActor(actorAsset); + return AZStd::move(actorAsset); + } }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAddJointAndChildren.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAddJointAndChildren.cpp index 59506a9d43..32240ba409 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanAddJointAndChildren.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanAddJointAndChildren.cpp @@ -16,13 +16,13 @@ #include #include -#include #include #include #include #include #include +#include namespace EMotionFX { @@ -37,8 +37,11 @@ namespace EMotionFX RecordProperty("test_case_id", "C13048819"); // Create an actor - AutoRegisteredActor actor = ActorFactory::CreateAndInit(5, "SimpleActor"); - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 5, "SimpleActor"); + ActorInstance* actorInstance = ActorInstance::Create(actorAsset->GetActor()); + const Actor* actor = actorAsset->GetActor(); // Open simulated objects layout EMStudio::GetMainWindow()->ApplicationModeChanged("SimulatedObjects"); diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAddSimulatedObject.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAddSimulatedObject.cpp index e1c4525a9e..0820895db8 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanAddSimulatedObject.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanAddSimulatedObject.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -27,6 +26,7 @@ #include #include +#include #include #include @@ -81,9 +81,9 @@ namespace EMotionFX inputDialog->accept(); // There is one and only one simulated objects - ASSERT_EQ(m_actor->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 1); + ASSERT_EQ(m_actorAsset->GetActor()->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 1); // Check it has the correct name - EXPECT_STREQ(m_actor->GetSimulatedObjectSetup()->GetSimulatedObject(0)->GetName().c_str(), objectName); + EXPECT_STREQ(m_actorAsset->GetActor()->GetSimulatedObjectSetup()->GetSimulatedObject(0)->GetName().c_str(), objectName); } @@ -112,14 +112,16 @@ namespace EMotionFX }); ASSERT_NE(addCapsuleColliderAction, addSelectedColliderMenuActions.end()); - size_t numCapsuleColliders = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + size_t numCapsuleColliders = PhysicsSetupUtils::CountColliders( + m_actorAsset->GetActor(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); (*addCapsuleColliderAction)->trigger(); // Delete the context menu, otherwise there it will still be around during this frame as the Qt event loop has not been run. delete contextMenu; - const size_t numCapsuleCollidersAfterAdd = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + const size_t numCapsuleCollidersAfterAdd = PhysicsSetupUtils::CountColliders( + m_actorAsset->GetActor(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); ASSERT_EQ(numCapsuleCollidersAfterAdd, numCapsuleColliders + 1); @@ -127,7 +129,7 @@ namespace EMotionFX } protected: - AutoRegisteredActor m_actor; + AZ::Data::Asset m_actorAsset; EMotionFX::SimulatedObjectWidget* m_simulatedObjectWidget = nullptr; EMotionFX::SkeletonOutlinerPlugin* m_skeletonOutliner = nullptr; @@ -144,7 +146,8 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048820"); - m_actor = ActorFactory::CreateAndInit(1, "CanAddSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 1, "CanAddSimulatedObjectActor"); CreateSimulateObject("New simulated object"); } @@ -153,9 +156,11 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048818"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(2, "CanAddSimulatedObjectWithJointsActor"); - - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 2, "CanAddSimulatedObjectWithJointsActor"); + Actor* actor = actorAsset->GetActor(); + ActorInstance* actorInstance = ActorInstance::Create(actor); EMStudio::GetMainWindow()->ApplicationModeChanged("SimulatedObjects"); @@ -216,7 +221,9 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048820a"); - m_actor = ActorFactory::CreateAndInit(5, "CanAddSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 5, "CanAddSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); CreateSimulateObject("sim1"); @@ -261,8 +268,8 @@ namespace EMotionFX inputDialog->SetText("sim2"); inputDialog->accept(); - ASSERT_EQ(m_actor->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 2); - const auto simulatedObject = m_actor->GetSimulatedObjectSetup()->GetSimulatedObject(1); + ASSERT_EQ(actor->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 2); + const auto simulatedObject = actor->GetSimulatedObjectSetup()->GetSimulatedObject(1); EXPECT_STREQ(simulatedObject->GetName().c_str(), "sim2"); } @@ -270,7 +277,9 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048816"); - m_actor = ActorFactory::CreateAndInit(5, "CanAddSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 5, "CanAddSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); CreateSimulateObject("sim1"); @@ -301,25 +310,25 @@ namespace EMotionFX QAction* addCapsuleColliderAction; ASSERT_TRUE(UIFixture::GetActionFromContextMenu(addCapsuleColliderAction, addSelectedColliderMenu, "Capsule")); - size_t numCapsuleColliders = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + size_t numCapsuleColliders = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); EXPECT_EQ(numCapsuleColliders, 0); addCapsuleColliderAction->trigger(); // Check that a collider has been added. - size_t numCollidersAfterAddCapsule = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + size_t numCollidersAfterAddCapsule = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); ASSERT_EQ(numCollidersAfterAddCapsule, numCapsuleColliders + 1) << "Capsule collider not added."; QAction* addSphereColliderAction; ASSERT_TRUE(UIFixture::GetActionFromContextMenu(addSphereColliderAction, addSelectedColliderMenu, "Sphere")); - const size_t numSphereColliders = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); + const size_t numSphereColliders = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); EXPECT_EQ(numSphereColliders, 0); addSphereColliderAction->trigger(); // Check that a second collider has been added. - const size_t numCollidersAfterAddSphere = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); + const size_t numCollidersAfterAddSphere = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); ASSERT_EQ(numCollidersAfterAddSphere, numSphereColliders + 1) << "Sphere collider not added."; } @@ -327,7 +336,9 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048821"); - m_actor = ActorFactory::CreateAndInit(1, "CanRemoveSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 1, "CanRemoveSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); CreateSimulateObject("TestObject1"); @@ -350,14 +361,16 @@ namespace EMotionFX ASSERT_TRUE(UIFixture::GetActionFromContextMenu(removeObjectAction, contextMenu, "Remove object")); removeObjectAction->trigger(); - ASSERT_EQ(m_actor->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 0); + ASSERT_EQ(actor->GetSimulatedObjectSetup()->GetNumSimulatedObjects(), 0); } TEST_F(CanAddSimulatedObjectFixture, CanAddColliderToSimulatedObjectFromInspector) { RecordProperty("test_case_id", "C20385259"); - - m_actor = ActorFactory::CreateAndInit(5, "CanAddSimulatedObjectActor"); + + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 5, "CanAddSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); CreateSimulateObject("sim1"); @@ -380,10 +393,12 @@ namespace EMotionFX // Send the left button click directly to the button QTest::mouseClick(addColliderButton, Qt::LeftButton); - const size_t numCapsuleColliders = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + const size_t numCapsuleColliders = + PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); EXPECT_EQ(numCapsuleColliders, 0); - const size_t numSphereColliders = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); + const size_t numSphereColliders = + PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); EXPECT_EQ(numSphereColliders, 0); QMenu* contextMenu = addColliderButton->findChild("EMFX.AddColliderButton.ContextMenu"); @@ -392,13 +407,15 @@ namespace EMotionFX QAction* addCapsuleAction; ASSERT_TRUE(UIFixture::GetActionFromContextMenu(addCapsuleAction, contextMenu, "Add capsule")); addCapsuleAction->trigger(); - const size_t numCollidersAfterAddCapsule = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); + const size_t numCollidersAfterAddCapsule = + PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Capsule); ASSERT_EQ(numCollidersAfterAddCapsule, numCapsuleColliders + 1) << "Capsule collider not added."; QAction* addSphereAction; ASSERT_TRUE(UIFixture::GetActionFromContextMenu(addSphereAction, contextMenu, "Add sphere")); addSphereAction->trigger(); - const size_t numCollidersAfterAddSphere = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); + const size_t numCollidersAfterAddSphere = + PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider, false, Physics::ShapeType::Sphere); ASSERT_EQ(numCollidersAfterAddSphere, numSphereColliders + 1) << "Sphere collider not added."; } @@ -406,7 +423,9 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048818"); - m_actor = ActorFactory::CreateAndInit(7, "CanAddSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 7, "CanAddSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); CreateSimulateObject("ANY"); @@ -442,7 +461,7 @@ namespace EMotionFX messageBoxPopupHandler.WaitForPopupPressDialogButton(QDialogButtonBox::No); newSimulatedObjectAction->trigger(); - const EMotionFX::SimulatedObject* simulatedObject = m_actor->GetSimulatedObjectSetup()->GetSimulatedObject(0); + const EMotionFX::SimulatedObject* simulatedObject = actor->GetSimulatedObjectSetup()->GetSimulatedObject(0); EXPECT_EQ(simulatedObject->GetNumSimulatedRootJoints(), 1); EXPECT_EQ(simulatedObject->GetNumSimulatedJoints(), 3); } @@ -450,7 +469,9 @@ namespace EMotionFX { RecordProperty("test_case_id", "C13048817"); - m_actor = ActorFactory::CreateAndInit(5, "CanAddSimulatedObjectActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 5, "CanAddSimulatedObjectActor"); + Actor* actor = m_actorAsset->GetActor(); EMStudio::GetMainWindow()->ApplicationModeChanged("SimulatedObjects"); @@ -470,7 +491,7 @@ namespace EMotionFX AddCapsuleColliderToJointIndex(3); AddCapsuleColliderToJointIndex(4); - const size_t numCollidersAfterAdd = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider); + const size_t numCollidersAfterAdd = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider); EXPECT_EQ(numCollidersAfterAdd, 2); m_indexList.clear(); @@ -498,7 +519,7 @@ namespace EMotionFX removeAction->trigger(); // Check that one of the colliders is now gone. - const size_t numCollidersAfterFirstRemove = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider); + const size_t numCollidersAfterFirstRemove = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider); ASSERT_EQ(numCollidersAfterFirstRemove, numCollidersAfterAdd - 1) << "RemoveCollider action in Simulated Object Inspector failed."; // Now do the same thing using the Simulated Object Inspector context menu. @@ -536,7 +557,7 @@ namespace EMotionFX delAction->trigger(); // Check that we have the number of colliders we started we expect. - const size_t numCollidersAfterSecondRemove = PhysicsSetupUtils::CountColliders(m_actor.get(), PhysicsSetup::SimulatedObjectCollider); + const size_t numCollidersAfterSecondRemove = PhysicsSetupUtils::CountColliders(actor, PhysicsSetup::SimulatedObjectCollider); ASSERT_EQ(numCollidersAfterSecondRemove, numCollidersAfterAdd - 2); } diff --git a/Gems/EMotionFX/Code/Tests/UI/CanAddToSimulatedObject.cpp b/Gems/EMotionFX/Code/Tests/UI/CanAddToSimulatedObject.cpp index e27d558664..a10ba352d2 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanAddToSimulatedObject.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanAddToSimulatedObject.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -52,9 +53,11 @@ namespace EMotionFX { RecordProperty("test_case_id", "C14603914"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(7, "CanAddToSimulatedObjectActor"); - - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 7, "CanAddToSimulatedObjectActor"); + Actor* actor = actorAsset->GetActor(); + ActorInstance* actorInstance = ActorInstance::Create(actor); // Change the Editor mode to Simulated Objects EMStudio::GetMainWindow()->ApplicationModeChanged("SimulatedObjects"); @@ -165,9 +168,11 @@ namespace EMotionFX }); RecordProperty("test_case_id", "C13291807"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(7, "CanAddToSimulatedObjectActor"); - - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 7, "CanAddToSimulatedObjectActor"); + Actor* actor = actorAsset->GetActor(); + ActorInstance* actorInstance = ActorInstance::Create(actor); // Change the Editor mode to Physics EMStudio::GetMainWindow()->ApplicationModeChanged("Physics"); diff --git a/Gems/EMotionFX/Code/Tests/UI/CanChangeParametersInSimulatedObject.cpp b/Gems/EMotionFX/Code/Tests/UI/CanChangeParametersInSimulatedObject.cpp index 510bfb2d83..108a637412 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanChangeParametersInSimulatedObject.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanChangeParametersInSimulatedObject.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -37,9 +38,10 @@ namespace EMotionFX { RecordProperty("test_case_id", "C14519563"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(7, "CanAddToSimulatedObjectActor"); - - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 7, "CanAddToSimulatedObjectActor"); + ActorInstance* actorInstance = ActorInstance::Create(actorAsset->GetActor()); // Change the Editor mode to Simulated Objects EMStudio::GetMainWindow()->ApplicationModeChanged("SimulatedObjects"); diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp index 73a0f1c865..2af3329203 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanUseFileMenu.cpp @@ -24,10 +24,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -141,8 +143,10 @@ namespace EMotionFX { if (EMotionFX::GetActorManager().GetNumActorInstances() == 0) { - AutoRegisteredActor actor = ActorFactory::CreateAndInit(2, "CanAddSimulatedObjectWithJointsActor"); - ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, 2, "CanAddSimulatedObjectWithJointsActor"); + ActorInstance::Create(actorAsset->GetActor()); EXPECT_EQ(EMotionFX::GetActorManager().GetNumActorInstances(), 1) << "Failed to create actor set for reset test."; } @@ -152,15 +156,16 @@ namespace EMotionFX { if (EMotionFX::GetActorManager().GetNumActorInstances() == 0) { - AutoRegisteredActor actor = ActorFactory::CreateAndInit(2, "CanAddSimulatedObjectWithJointsActor"); - ActorInstance::Create(actor.get()); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = TestActorAssets::CreateActorAssetAndRegister( + actorAssetId, 2, "CanAddSimulatedObjectWithJointsActor"); + ActorInstance::Create(actorAsset->GetActor()); EXPECT_EQ(EMotionFX::GetActorManager().GetNumActorInstances(), 1) << "Failed to create actor set for reset test."; - - actor->SetFileName(filename); + actorAsset->GetActor()->SetFileName(filename); AZStd::string stringFilename = filename; - ExporterLib::SaveActor(stringFilename, actor.get(), MCore::Endian::ENDIAN_LITTLE); + ExporterLib::SaveActor(stringFilename, actorAsset->GetActor(), MCore::Endian::ENDIAN_LITTLE); } } @@ -239,7 +244,6 @@ namespace EMotionFX // Load the actor we just saved, with replaceScene set to true to represent a load. LoadActor(actorFilename.toUtf8().data(), true); - ASSERT_EQ(EMotionFX::GetActorManager().GetNumActorInstances(), 1) << "Failed to load Actor."; // Do it again to verify that number of actors stays the same when replaceScene is true. @@ -696,7 +700,10 @@ namespace EMotionFX TestResetMenuItem(fileMenu); - TestActorMenus(fileMenu); + // Temporarily disable loading actor test. + // This is because the importer command now load actor asset instead of reading from disk. We do not want to add dependency to the asset processor + // in this test. + // TestActorMenus(fileMenu); TestSaveAllMenuItem(fileMenu); } diff --git a/Gems/EMotionFX/Code/Tests/UI/CanUseLayoutMenu.cpp b/Gems/EMotionFX/Code/Tests/UI/CanUseLayoutMenu.cpp index 6fbaf3a028..e615d3c9e0 100644 --- a/Gems/EMotionFX/Code/Tests/UI/CanUseLayoutMenu.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/CanUseLayoutMenu.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/Tests/UI/ClothColliderTests.cpp b/Gems/EMotionFX/Code/Tests/UI/ClothColliderTests.cpp index 6428a11e6d..d87c35a4fa 100644 --- a/Gems/EMotionFX/Code/Tests/UI/ClothColliderTests.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/ClothColliderTests.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include namespace EMotionFX @@ -102,7 +103,9 @@ namespace EMotionFX const int lastIndex = 6; RecordProperty("test_case_id", "C18970351"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(numJoints, "RagdollEditTestsActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, numJoints, "RagdollEditTestsActor"); CreateSkeletonAndModelIndices(); EXPECT_EQ(m_indexList.size(), numJoints); diff --git a/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp b/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp index 6e5e14e9fc..def8bdab58 100644 --- a/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp @@ -80,11 +80,14 @@ namespace EMotionFX DataMembers m_data; }; - AZStd::unique_ptr CreateLODActor(int numLODs) + AZ::Data::Asset CreateLODActor(int numLODs) { - AZStd::unique_ptr actor = ActorFactory::CreateAndInit("LODSkinnedMeshTestsActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, "LODSkinnedMeshTestsActor"); // Modify the actor to have numLODs LOD levels. + Actor* actor = actorAsset->GetActor(); Mesh* lodMesh = actor->GetMesh(0, 0); StandardMaterial* dummyMat = StandardMaterial::Create("Dummy Material"); actor->AddMaterial(0, dummyMat); // owns the material @@ -97,7 +100,7 @@ namespace EMotionFX actor->AddMaterial(i, dummyMat->Clone()); } - return actor; + return AZStd::move(actorAsset); } class LODPropertyRowWidget @@ -112,9 +115,8 @@ namespace EMotionFX const int numLODs = GetParam(); RecordProperty("test_case_id", "C29202698"); - AutoRegisteredActor actor = CreateLODActor(numLODs); - - ActorInstance* actorInstance = ActorInstance::Create(actor.get()); + AZ::Data::Asset actorAsset = CreateLODActor(numLODs); + ActorInstance* actorInstance = ActorInstance::Create(actorAsset->GetActor()); // Change the Editor mode to Character EMStudio::GetMainWindow()->ApplicationModeChanged("Character"); @@ -166,8 +168,7 @@ namespace EMotionFX gameEntity->SetId(entityId); AZ::Data::AssetId actorAssetId("{85D3EF54-7400-43F8-8A40-F6BCBF534E54}"); - AZStd::unique_ptr actor = CreateLODActor(numLODs); - AZ::Data::Asset actorAsset = TestActorAssets::GetAssetFromActor(actorAssetId, AZStd::move(actor)); + AZ::Data::Asset actorAsset = CreateLODActor(numLODs); gameEntity->CreateComponent(); Integration::ActorComponent::Configuration actorConf; diff --git a/Gems/EMotionFX/Code/Tests/UI/RagdollEditTests.cpp b/Gems/EMotionFX/Code/Tests/UI/RagdollEditTests.cpp index 1c39cde5b6..d097e67d15 100644 --- a/Gems/EMotionFX/Code/Tests/UI/RagdollEditTests.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/RagdollEditTests.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -110,7 +111,9 @@ namespace EMotionFX const int numJoints = 6; RecordProperty("test_case_id", "C3122249"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(numJoints, "RagdollEditTestsActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, numJoints, "RagdollEditTestsActor"); CreateSkeletonAndModelIndices(); @@ -138,7 +141,9 @@ namespace EMotionFX const int numJoints = 8; RecordProperty("test_case_id", "C3122248"); - AutoRegisteredActor actor = ActorFactory::CreateAndInit(numJoints, "RagdollEditTestsActor"); + AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); + AZ::Data::Asset actorAsset = + TestActorAssets::CreateActorAssetAndRegister(actorAssetId, numJoints, "RagdollEditTestsActor"); CreateSkeletonAndModelIndices(); EXPECT_EQ(m_indexList.size(), numJoints); From 975589c0c4cb7bd1c3e544b72d26c8f502daa76d Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 10 Aug 2021 22:28:42 -0700 Subject: [PATCH 170/226] Add skeleton class for atom render plugin Signed-off-by: rhhong --- .../Source/AtomRender/AtomRenderPlugin.cpp | 27 +++++++ .../Source/AtomRender/AtomRenderPlugin.h | 72 +++++++++++++++++++ .../RenderPlugins/renderplugins_files.cmake | 2 + .../Integration/System/SystemComponent.cpp | 2 + 4 files changed, 103 insertions(+) create mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp create mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp new file mode 100644 index 0000000000..6b64afd50b --- /dev/null +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace EMStudio +{ + AtomRenderPlugin::AtomRenderPlugin() + { + + } + + AtomRenderPlugin::~AtomRenderPlugin() + { + + } + + bool AtomRenderPlugin::Init() + { + return true; + } +} diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h new file mode 100644 index 0000000000..59aabce3c3 --- /dev/null +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace EMStudio +{ + class AtomRenderPlugin + : public DockWidgetPlugin + { + Q_OBJECT // AUTOMOC + + public: + enum + { + CLASS_ID = 0x32b0c04d + }; + AtomRenderPlugin(); + ~AtomRenderPlugin(); + + // Plugin information + const char* GetCompileDate() const override + { + return MCORE_DATE; + } + const char* GetName() const override + { + return "Atom Render Window"; + } + uint32 GetClassID() const override + { + return static_cast(AtomRenderPlugin::CLASS_ID); + } + const char* GetCreatorName() const override + { + return "O3DE"; + } + float GetVersion() const override + { + return 1.0f; + } + bool GetIsClosable() const override + { + return true; + } + bool GetIsFloatable() const override + { + return true; + } + bool GetIsVertical() const override + { + return false; + } + + bool Init(); + EMStudioPlugin* Clone() + { + return new AtomRenderPlugin(); + } + EMStudioPlugin::EPluginType GetPluginType() const override + { + return EMStudioPlugin::PLUGINTYPE_RENDERING; + } + }; +} diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake index 3bce07c3c4..339052823d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake @@ -11,4 +11,6 @@ set(FILES Source/OpenGLRender/GLWidget.cpp Source/OpenGLRender/OpenGLRenderPlugin.h Source/OpenGLRender/OpenGLRenderPlugin.cpp + Source/AtomRender/AtomRenderPlugin.h + Source/AtomRender/AtomRenderPlugin.cpp ) diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp index cf2f9beaa4..c3823f15ed 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp @@ -88,6 +88,7 @@ # include # include # include +# include # include # include # include @@ -794,6 +795,7 @@ namespace EMotionFX pluginManager->RegisterPlugin(new EMStudio::NodeGroupsPlugin()); pluginManager->RegisterPlugin(new EMStudio::AnimGraphPlugin()); pluginManager->RegisterPlugin(new EMStudio::OpenGLRenderPlugin()); + pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); pluginManager->RegisterPlugin(new EMotionFX::HitDetectionJointInspectorPlugin()); pluginManager->RegisterPlugin(new EMotionFX::SkeletonOutlinerPlugin()); pluginManager->RegisterPlugin(new EMotionFX::RagdollNodeInspectorPlugin()); From a96b091d3fffead19d545d868e9cbf368cd1c8e5 Mon Sep 17 00:00:00 2001 From: rhhong Date: Wed, 11 Aug 2021 22:49:59 -0700 Subject: [PATCH 171/226] Add skeleton class for animviewportwidget. Signed-off-by: rhhong --- Gems/EMotionFX/Code/CMakeLists.txt | 2 ++ .../Source/AtomRender/AnimViewportWidget.cpp | 18 +++++++++++++++++ .../Source/AtomRender/AnimViewportWidget.h | 20 +++++++++++++++++++ .../Source/AtomRender/AtomRenderPlugin.cpp | 13 +++++++++++- .../Source/AtomRender/AtomRenderPlugin.h | 10 +++++++++- .../RenderPlugins/renderplugins_files.cmake | 2 ++ 6 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp create mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h diff --git a/Gems/EMotionFX/Code/CMakeLists.txt b/Gems/EMotionFX/Code/CMakeLists.txt index dace02b2ae..67d0ba6d85 100644 --- a/Gems/EMotionFX/Code/CMakeLists.txt +++ b/Gems/EMotionFX/Code/CMakeLists.txt @@ -109,6 +109,8 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS) AZ::AzToolsFramework Legacy::Editor.Headers 3rdParty::OpenGLInterface + Gem::AtomToolsFramework.Static + Gem::AtomToolsFramework.Editor COMPILE_DEFINITIONS PUBLIC EMFX_EMSTUDIOLYEMBEDDED diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp new file mode 100644 index 0000000000..df8edeb324 --- /dev/null +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace EMStudio +{ + AnimViewportWidget::AnimViewportWidget(QWidget* parent) + : AtomToolsFramework::RenderViewportWidget(parent) + { + + } +} diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h new file mode 100644 index 0000000000..59ea5c6680 --- /dev/null +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +namespace EMStudio +{ + class AnimViewportWidget + : public AtomToolsFramework::RenderViewportWidget + { + public: + AnimViewportWidget(QWidget* parent = nullptr); + }; +} diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp index 6b64afd50b..6a95b83433 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp @@ -7,12 +7,13 @@ */ #include +#include namespace EMStudio { AtomRenderPlugin::AtomRenderPlugin() + : DockWidgetPlugin() { - } AtomRenderPlugin::~AtomRenderPlugin() @@ -22,6 +23,16 @@ namespace EMStudio bool AtomRenderPlugin::Init() { + m_innerWidget = new QWidget(); + m_dock->setWidget(m_innerWidget); + + QVBoxLayout* verticalLayout = new QVBoxLayout(m_innerWidget); + verticalLayout->setSizeConstraint(QLayout::SetNoConstraint); + verticalLayout->setSpacing(1); + verticalLayout->setMargin(0); + + m_animViewportWidget = new AnimViewportWidget(m_innerWidget); + return true; } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h index 59aabce3c3..d7605e276a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h @@ -8,7 +8,11 @@ #pragma once +#if !defined(Q_MOC_RUN) #include +#include +#include +#endif namespace EMStudio { @@ -59,7 +63,7 @@ namespace EMStudio return false; } - bool Init(); + bool Init() override; EMStudioPlugin* Clone() { return new AtomRenderPlugin(); @@ -68,5 +72,9 @@ namespace EMStudio { return EMStudioPlugin::PLUGINTYPE_RENDERING; } + + private: + QWidget* m_innerWidget; + AnimViewportWidget* m_animViewportWidget; }; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake index 339052823d..c184f708f2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake @@ -13,4 +13,6 @@ set(FILES Source/OpenGLRender/OpenGLRenderPlugin.cpp Source/AtomRender/AtomRenderPlugin.h Source/AtomRender/AtomRenderPlugin.cpp + Source/AtomRender/AnimViewportWidget.h + Source/AtomRender/AnimViewportWidget.cpp ) From f2b449c4b97091525848910ca6df3195ed594c3a Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 30 Aug 2021 17:57:45 -0700 Subject: [PATCH 172/226] Registering an empty atom render plugin in the emfxatom gem. Signed-off-by: rhhong --- .../EMotionFXAtom/Code/CMakeLists.txt | 7 ++ .../EMotionFXAtom/Code/Source/ActorModule.cpp | 11 ++- .../Source/Editor/EditorSystemComponent.cpp | 42 +++++++++++ .../Source/Editor/EditorSystemComponent.h | 35 ++++++++++ .../Tools/EMStudio}/AnimViewportWidget.cpp | 2 +- .../Code/Tools/EMStudio}/AnimViewportWidget.h | 0 .../Code/Tools/EMStudio}/AtomRenderPlugin.cpp | 2 +- .../Code/Tools/EMStudio}/AtomRenderPlugin.h | 4 +- .../Code/emotionfx_atom_editor_files.cmake | 6 ++ .../EMStudioSDK/Source/EMStudioManager.cpp | 44 +++--------- .../EMStudioSDK/Source/EMStudioManager.h | 70 +++++++++++-------- .../EMStudioSDK/Source/MainWindow.h | 6 +- .../RenderPlugins/renderplugins_files.cmake | 4 -- .../Code/Include/Integration/AnimationBus.h | 3 + .../Integration/System/SystemComponent.cpp | 10 +-- .../Integration/System/SystemComponent.h | 5 ++ 16 files changed, 173 insertions(+), 78 deletions(-) create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h rename Gems/{EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender => AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio}/AnimViewportWidget.cpp (81%) rename Gems/{EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender => AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio}/AnimViewportWidget.h (100%) rename Gems/{EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender => AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio}/AtomRenderPlugin.cpp (90%) rename Gems/{EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender => AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio}/AtomRenderPlugin.h (92%) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt b/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt index 5a08bab4fa..dc22c8ee93 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt @@ -54,11 +54,18 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) INCLUDE_DIRECTORIES PRIVATE Source + Tools BUILD_DEPENDENCIES PRIVATE AZ::AzCore Gem::EMotionFX_Atom.Static + Gem::EMotionFX.Editor.Static + Gem::AtomToolsFramework.Static + Gem::AtomToolsFramework.Editor RUNTIME_DEPENDENCIES Gem::EMotionFX.Editor + COMPILE_DEFINITIONS + PUBLIC + EMOTIONFXATOM_EDITOR ) endif() diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorModule.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorModule.cpp index 49c2e52c1a..93481c1da6 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorModule.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorModule.cpp @@ -11,6 +11,9 @@ #include #include #include +#ifdef EMOTIONFXATOM_EDITOR +#include +#endif namespace AZ { @@ -28,7 +31,10 @@ namespace AZ : Module() { m_descriptors.insert(m_descriptors.end(), { - ActorSystemComponent::CreateDescriptor() + ActorSystemComponent::CreateDescriptor(), +#ifdef EMOTIONFXATOM_EDITOR + EMotionFXAtom::EditorSystemComponent::CreateDescriptor(), +#endif }); } @@ -39,6 +45,9 @@ namespace AZ { return ComponentTypeList{ azrtti_typeid(), +#ifdef EMOTIONFXATOM_EDITOR + azrtti_typeid(), +#endif }; } }; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp new file mode 100644 index 0000000000..86a9c36c56 --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include + +namespace AZ +{ + namespace EMotionFXAtom + { + void EditorSystemComponent::Reflect(ReflectContext* context) + { + if (SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class()->Version(0); + } + } + + void EditorSystemComponent::Activate() + { + EMotionFX::Integration::SystemNotificationBus::Handler::BusConnect(); + } + + void EditorSystemComponent::Deactivate() + { + EMotionFX::Integration::SystemNotificationBus::Handler::BusDisconnect(); + } + + void EditorSystemComponent::OnRegisterPlugin() + { + EMStudio::PluginManager* pluginManager = EMStudio::EMStudioManager::GetInstance()->GetPluginManager(); + pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); + } + } +} // namespace AZ diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h new file mode 100644 index 0000000000..6121912481 --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include +#include + +namespace AZ +{ + namespace EMotionFXAtom + { + class EditorSystemComponent + : public Component + , private EMotionFX::Integration::SystemNotificationBus::Handler + { + public: + AZ_COMPONENT(EditorSystemComponent, "{1FAEC046-255D-4664-8F12-D16503C34431}"); + + static void Reflect(ReflectContext* context); + + protected: + // AZ::Component + void Activate() override; + void Deactivate() override; + + // SystemNotificationBus::OnRegisterPlugin + void OnRegisterPlugin() override; + }; + } // namespace EMotionFXAtom +} // namespace AZ diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp similarity index 81% rename from Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp rename to Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index df8edeb324..2b961e6e7b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -6,7 +6,7 @@ * */ -#include +#include namespace EMStudio { diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h similarity index 100% rename from Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AnimViewportWidget.h rename to Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp similarity index 90% rename from Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp rename to Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 6a95b83433..f7da1d19a9 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -6,7 +6,7 @@ * */ -#include +#include #include namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h similarity index 92% rename from Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h rename to Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index d7605e276a..910b5283cd 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/AtomRender/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -9,8 +9,8 @@ #pragma once #if !defined(Q_MOC_RUN) -#include -#include +#include +#include #include #endif diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake index 6401beb232..37e69739d0 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake @@ -8,4 +8,10 @@ set(FILES Source/ActorModule.cpp + Source/Editor/EditorSystemComponent.h + Source/Editor/EditorSystemComponent.cpp + Tools/EMStudio/AtomRenderPlugin.h + Tools/EMStudio/AtomRenderPlugin.cpp + Tools/EMStudio/AnimViewportWidget.h + Tools/EMStudio/AnimViewportWidget.cpp ) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp index 2321d7c71b..432a351edf 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp @@ -46,15 +46,10 @@ AZ_POP_DISABLE_WARNING namespace EMStudio { - //-------------------------------------------------------------------------- - // globals - //-------------------------------------------------------------------------- - EMStudioManager* gEMStudioMgr = nullptr; - - //-------------------------------------------------------------------------- // class EMStudioManager //-------------------------------------------------------------------------- + AZ_CLASS_ALLOCATOR_IMPL(EMStudioManager, AZ::SystemAllocator, 0) // constructor EMStudioManager::EMStudioManager(QApplication* app, [[maybe_unused]] int& argc, [[maybe_unused]] char* argv[]) @@ -105,6 +100,8 @@ namespace EMStudio // log some information LogInfo(); + + AZ::Interface::Register(this); } @@ -130,6 +127,8 @@ namespace EMStudio delete m_commandManager; AZ::AllocatorInstance::Destroy(); + + AZ::Interface::Unregister(this); } MainWindow* EMStudioManager::GetMainWindow() @@ -422,6 +421,12 @@ namespace EMStudio } + EMStudioManager* EMStudioManager::GetInstance() + { + return AZ::Interface().Get(); + } + + // function to add a gizmo to the manager MCommon::TransformationManipulator* EMStudioManager::AddTransformationManipulator(MCommon::TransformationManipulator* manipulator) { @@ -493,31 +498,4 @@ namespace EMStudio path.addText(textPos, font, text); painter.drawPath(path); } - - //-------------------------------------------------------------------------- - // class Initializer - //-------------------------------------------------------------------------- - // initialize EMotion Studio - bool Initializer::Init(QApplication* app, int& argc, char* argv[]) - { - // do nothing if we already have initialized - if (gEMStudioMgr) - { - return true; - } - - // create the new EMStudio object - gEMStudioMgr = new EMStudioManager(app, argc, argv); - - // return success - return true; - } - - - // the shutdown function - void Initializer::Shutdown() - { - delete gEMStudioMgr; - gEMStudioMgr = nullptr; - } } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h index 909f0231f3..8828253ea2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h @@ -53,9 +53,10 @@ namespace EMStudio class EMSTUDIO_API EMStudioManager : private EMotionFX::SkeletonOutlinerNotificationBus::Handler { - MCORE_MEMORYOBJECTCATEGORY(EMStudioManager, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK) - public: + AZ_RTTI(EMStudio::EMStudioManager, "{D45E95CF-0C7B-44F1-A9D4-99A1E12A5AB5}") + AZ_CLASS_ALLOCATOR_DECL + EMStudioManager(QApplication* app, int& argc, char* argv[]); ~EMStudioManager(); @@ -72,6 +73,9 @@ namespace EMStudio AZStd::string GetRecoverFolder() const; AZStd::string GetAutosavesFolder() const; + // Singleton pattern + static EMStudioManager* GetInstance(); + // text rendering helper function static void RenderText(QPainter& painter, const QString& text, const QColor& textColor, const QFont& font, const QFontMetrics& fontMetrics, Qt::Alignment textAlignment, const QRect& rect); @@ -153,31 +157,41 @@ namespace EMStudio EventProcessingCallback* m_eventProcessingCallback; }; - - /** - * - * - * - */ - class EMSTUDIO_API Initializer - { - public: - static bool MCORE_CDECL Init(QApplication* app, int& argc, char* argv[]); - static void MCORE_CDECL Shutdown(); - }; - - - // the global manager - extern EMSTUDIO_API EMStudioManager* gEMStudioMgr; - // shortcuts - MCORE_INLINE QApplication* GetApp() { return gEMStudioMgr->GetApp(); } - MCORE_INLINE EMStudioManager* GetManager() { return gEMStudioMgr; } - MCORE_INLINE bool HasMainWindow() { return gEMStudioMgr->HasMainWindow(); } - MCORE_INLINE MainWindow* GetMainWindow() { return gEMStudioMgr->GetMainWindow(); } - MCORE_INLINE PluginManager* GetPluginManager() { return gEMStudioMgr->GetPluginManager(); } - MCORE_INLINE LayoutManager* GetLayoutManager() { return gEMStudioMgr->GetLayoutManager(); } - MCORE_INLINE NotificationWindowManager* GetNotificationWindowManager() { return gEMStudioMgr->GetNotificationWindowManager(); } - MCORE_INLINE MotionEventPresetManager* GetEventPresetManager() { return gEMStudioMgr->GetEventPresetManger(); } - MCORE_INLINE CommandSystem::CommandManager* GetCommandManager() { return gEMStudioMgr->GetCommandManager(); } + MCORE_INLINE QApplication* GetApp() + { + return EMStudioManager::GetInstance()->GetApp(); + } + MCORE_INLINE EMStudioManager* GetManager() + { + return EMStudioManager::GetInstance(); + } + MCORE_INLINE bool HasMainWindow() + { + return EMStudioManager::GetInstance()->HasMainWindow(); + } + MCORE_INLINE MainWindow* GetMainWindow() + { + return EMStudioManager::GetInstance()->GetMainWindow(); + } + MCORE_INLINE PluginManager* GetPluginManager() + { + return EMStudioManager::GetInstance()->GetPluginManager(); + } + MCORE_INLINE LayoutManager* GetLayoutManager() + { + return EMStudioManager::GetInstance()->GetLayoutManager(); + } + MCORE_INLINE NotificationWindowManager* GetNotificationWindowManager() + { + return EMStudioManager::GetInstance()->GetNotificationWindowManager(); + } + MCORE_INLINE MotionEventPresetManager* GetEventPresetManager() + { + return EMStudioManager::GetInstance()->GetEventPresetManger(); + } + MCORE_INLINE CommandSystem::CommandManager* GetCommandManager() + { + return EMStudioManager::GetInstance()->GetCommandManager(); + } } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h index 585101f7d2..1aa8676352 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h @@ -10,9 +10,9 @@ #if !defined(Q_MOC_RUN) #include -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake index c184f708f2..3bce07c3c4 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/renderplugins_files.cmake @@ -11,8 +11,4 @@ set(FILES Source/OpenGLRender/GLWidget.cpp Source/OpenGLRender/OpenGLRenderPlugin.h Source/OpenGLRender/OpenGLRenderPlugin.cpp - Source/AtomRender/AtomRenderPlugin.h - Source/AtomRender/AtomRenderPlugin.cpp - Source/AtomRender/AnimViewportWidget.h - Source/AtomRender/AnimViewportWidget.cpp ) diff --git a/Gems/EMotionFX/Code/Include/Integration/AnimationBus.h b/Gems/EMotionFX/Code/Include/Integration/AnimationBus.h index 1b9eb55216..474ac1b6d5 100644 --- a/Gems/EMotionFX/Code/Include/Integration/AnimationBus.h +++ b/Gems/EMotionFX/Code/Include/Integration/AnimationBus.h @@ -46,6 +46,9 @@ namespace EMotionFX public: static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; + + // Use this bus to register custom EMotionFX plugin. + virtual void OnRegisterPlugin() = 0; }; using SystemNotificationBus = AZ::EBus; diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp index c3823f15ed..38af4232ba 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.cpp @@ -46,6 +46,7 @@ #include #include +#include #include #include #include @@ -70,7 +71,6 @@ # include # include # include -# include # include # include // EMStudio plugins @@ -88,7 +88,6 @@ # include # include # include -# include # include # include # include @@ -530,7 +529,7 @@ namespace EMotionFX if (EMStudio::GetManager()) { - EMStudio::Initializer::Shutdown(); + m_emstudioManager.reset(); MysticQt::Initializer::Shutdown(); } @@ -795,12 +794,13 @@ namespace EMotionFX pluginManager->RegisterPlugin(new EMStudio::NodeGroupsPlugin()); pluginManager->RegisterPlugin(new EMStudio::AnimGraphPlugin()); pluginManager->RegisterPlugin(new EMStudio::OpenGLRenderPlugin()); - pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); pluginManager->RegisterPlugin(new EMotionFX::HitDetectionJointInspectorPlugin()); pluginManager->RegisterPlugin(new EMotionFX::SkeletonOutlinerPlugin()); pluginManager->RegisterPlugin(new EMotionFX::RagdollNodeInspectorPlugin()); pluginManager->RegisterPlugin(new EMotionFX::ClothJointInspectorPlugin()); pluginManager->RegisterPlugin(new EMotionFX::SimulatedObjectWidget()); + + SystemNotificationBus::Broadcast(&SystemNotificationBus::Events::OnRegisterPlugin); } ////////////////////////////////////////////////////////////////////////// @@ -816,7 +816,7 @@ namespace EMotionFX char** argv = nullptr; MysticQt::Initializer::Init("", editorAssetsPath.c_str()); - EMStudio::Initializer::Init(qApp, argc, argv); + m_emstudioManager = AZStd::make_unique(qApp, argc, argv); InitializeEMStudioPlugins(); diff --git a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h index 5e30820ca3..3ef626c947 100644 --- a/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/System/SystemComponent.h @@ -24,6 +24,7 @@ # include # include # include +# include #endif // EMOTIONFXANIMATION_EDITOR namespace AZ @@ -126,6 +127,10 @@ namespace EMotionFX AZStd::vector > m_assetHandlers; AZStd::unique_ptr m_eventHandler; AZStd::unique_ptr m_renderBackendManager; + +#if defined(EMOTIONFXANIMATION_EDITOR) + AZStd::unique_ptr m_emstudioManager; +#endif // EMOTIONFXANIMATION_EDITOR }; } } From af9448d4ea10c248ac73b0724d402ab18ee1bdbb Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 30 Aug 2021 22:22:19 -0700 Subject: [PATCH 173/226] delete auto moc header Signed-off-by: rhhong --- .../EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index 910b5283cd..b3e47df91c 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -19,8 +19,6 @@ namespace EMStudio class AtomRenderPlugin : public DockWidgetPlugin { - Q_OBJECT // AUTOMOC - public: enum { From c4a3162c8543eedc7c8ea20adca737e104269dbc Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 31 Aug 2021 12:23:05 -0700 Subject: [PATCH 174/226] CR feedback - code cleaning Signed-off-by: rhhong --- .../Source/Editor/EditorSystemComponent.cpp | 39 +++++++-------- .../Source/Editor/EditorSystemComponent.h | 33 ++++++------ .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 45 +++++++++++++++++ .../Code/Tools/EMStudio/AtomRenderPlugin.h | 50 ++++--------------- .../EMStudioSDK/Source/EMStudioManager.cpp | 46 ++++++++++++++++- .../EMStudioSDK/Source/EMStudioManager.h | 47 ++++------------- 6 files changed, 142 insertions(+), 118 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp index 86a9c36c56..64f7f2dd97 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp @@ -11,32 +11,29 @@ #include -namespace AZ +namespace AZ::EMotionFXAtom { - namespace EMotionFXAtom + void EditorSystemComponent::Reflect(ReflectContext* context) { - void EditorSystemComponent::Reflect(ReflectContext* context) + if (SerializeContext* serialize = azrtti_cast(context)) { - if (SerializeContext* serialize = azrtti_cast(context)) - { - serialize->Class()->Version(0); - } + serialize->Class()->Version(0); } + } - void EditorSystemComponent::Activate() - { - EMotionFX::Integration::SystemNotificationBus::Handler::BusConnect(); - } + void EditorSystemComponent::Activate() + { + EMotionFX::Integration::SystemNotificationBus::Handler::BusConnect(); + } - void EditorSystemComponent::Deactivate() - { - EMotionFX::Integration::SystemNotificationBus::Handler::BusDisconnect(); - } + void EditorSystemComponent::Deactivate() + { + EMotionFX::Integration::SystemNotificationBus::Handler::BusDisconnect(); + } - void EditorSystemComponent::OnRegisterPlugin() - { - EMStudio::PluginManager* pluginManager = EMStudio::EMStudioManager::GetInstance()->GetPluginManager(); - pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); - } + void EditorSystemComponent::OnRegisterPlugin() + { + EMStudio::PluginManager* pluginManager = EMStudio::EMStudioManager::GetInstance()->GetPluginManager(); + pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); } -} // namespace AZ +} // namespace AZ::EMotionFXAtom diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h index 6121912481..9da98bcf42 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h @@ -10,26 +10,23 @@ #include #include -namespace AZ +namespace AZ::EMotionFXAtom { - namespace EMotionFXAtom + class EditorSystemComponent + : public Component + , private EMotionFX::Integration::SystemNotificationBus::Handler { - class EditorSystemComponent - : public Component - , private EMotionFX::Integration::SystemNotificationBus::Handler - { - public: - AZ_COMPONENT(EditorSystemComponent, "{1FAEC046-255D-4664-8F12-D16503C34431}"); + public: + AZ_COMPONENT(EditorSystemComponent, "{1FAEC046-255D-4664-8F12-D16503C34431}"); - static void Reflect(ReflectContext* context); + static void Reflect(ReflectContext* context); - protected: - // AZ::Component - void Activate() override; - void Deactivate() override; + protected: + // AZ::Component + void Activate() override; + void Deactivate() override; - // SystemNotificationBus::OnRegisterPlugin - void OnRegisterPlugin() override; - }; - } // namespace EMotionFXAtom -} // namespace AZ + // SystemNotificationBus::OnRegisterPlugin + void OnRegisterPlugin() override; + }; +} // namespace AZ::EMotionFXAtom diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index f7da1d19a9..c7e2178366 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -21,6 +21,51 @@ namespace EMStudio } + const char* AtomRenderPlugin::GetName() const + { + return "Atom Render Window"; + } + + uint32 AtomRenderPlugin::GetClassID() const + { + return static_cast(AtomRenderPlugin::CLASS_ID); + } + + const char* AtomRenderPlugin::GetCreatorName() const + { + return "O3DE"; + } + + float AtomRenderPlugin::GetVersion() const + { + return 1.0f; + } + + bool AtomRenderPlugin::GetIsClosable() const + { + return true; + } + + bool AtomRenderPlugin::GetIsFloatable() const + { + return true; + } + + bool AtomRenderPlugin::GetIsVertical() const + { + return false; + } + + EMStudioPlugin* AtomRenderPlugin::Clone() + { + return new AtomRenderPlugin(); + } + + EMStudioPlugin::EPluginType AtomRenderPlugin::GetPluginType() const + { + return EMStudioPlugin::PLUGINTYPE_RENDERING; + } + bool AtomRenderPlugin::Init() { m_innerWidget = new QWidget(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index b3e47df91c..0fb1443a96 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -28,48 +28,16 @@ namespace EMStudio ~AtomRenderPlugin(); // Plugin information - const char* GetCompileDate() const override - { - return MCORE_DATE; - } - const char* GetName() const override - { - return "Atom Render Window"; - } - uint32 GetClassID() const override - { - return static_cast(AtomRenderPlugin::CLASS_ID); - } - const char* GetCreatorName() const override - { - return "O3DE"; - } - float GetVersion() const override - { - return 1.0f; - } - bool GetIsClosable() const override - { - return true; - } - bool GetIsFloatable() const override - { - return true; - } - bool GetIsVertical() const override - { - return false; - } - + const char* GetName() const override; + uint32 GetClassID() const override; + const char* GetCreatorName() const override; + float GetVersion() const override; + bool GetIsClosable() const override; + bool GetIsFloatable() const override; + bool GetIsVertical() const override; bool Init() override; - EMStudioPlugin* Clone() - { - return new AtomRenderPlugin(); - } - EMStudioPlugin::EPluginType GetPluginType() const override - { - return EMStudioPlugin::PLUGINTYPE_RENDERING; - } + EMStudioPlugin* Clone(); + EMStudioPlugin::EPluginType GetPluginType() const override; private: QWidget* m_innerWidget; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp index 432a351edf..b385de62be 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp @@ -104,7 +104,6 @@ namespace EMStudio AZ::Interface::Register(this); } - // destructor EMStudioManager::~EMStudioManager() { @@ -498,4 +497,49 @@ namespace EMStudio path.addText(textPos, font, text); painter.drawPath(path); } + + // shortcuts + QApplication* GetApp() + { + return EMStudioManager::GetInstance()->GetApp(); + } + EMStudioManager* GetManager() + { + return EMStudioManager::GetInstance(); + } + + bool HasMainWindow() + { + return EMStudioManager::GetInstance()->HasMainWindow(); + } + + MainWindow* GetMainWindow() + { + return EMStudioManager::GetInstance()->GetMainWindow(); + } + + PluginManager* GetPluginManager() + { + return EMStudioManager::GetInstance()->GetPluginManager(); + } + + LayoutManager* GetLayoutManager() + { + return EMStudioManager::GetInstance()->GetLayoutManager(); + } + + NotificationWindowManager* GetNotificationWindowManager() + { + return EMStudioManager::GetInstance()->GetNotificationWindowManager(); + } + + MotionEventPresetManager* GetEventPresetManager() + { + return EMStudioManager::GetInstance()->GetEventPresetManger(); + } + + CommandSystem::CommandManager* GetCommandManager() + { + return EMStudioManager::GetInstance()->GetCommandManager(); + } } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h index 8828253ea2..e7a9397b22 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h @@ -157,41 +157,14 @@ namespace EMStudio EventProcessingCallback* m_eventProcessingCallback; }; - // shortcuts - MCORE_INLINE QApplication* GetApp() - { - return EMStudioManager::GetInstance()->GetApp(); - } - MCORE_INLINE EMStudioManager* GetManager() - { - return EMStudioManager::GetInstance(); - } - MCORE_INLINE bool HasMainWindow() - { - return EMStudioManager::GetInstance()->HasMainWindow(); - } - MCORE_INLINE MainWindow* GetMainWindow() - { - return EMStudioManager::GetInstance()->GetMainWindow(); - } - MCORE_INLINE PluginManager* GetPluginManager() - { - return EMStudioManager::GetInstance()->GetPluginManager(); - } - MCORE_INLINE LayoutManager* GetLayoutManager() - { - return EMStudioManager::GetInstance()->GetLayoutManager(); - } - MCORE_INLINE NotificationWindowManager* GetNotificationWindowManager() - { - return EMStudioManager::GetInstance()->GetNotificationWindowManager(); - } - MCORE_INLINE MotionEventPresetManager* GetEventPresetManager() - { - return EMStudioManager::GetInstance()->GetEventPresetManger(); - } - MCORE_INLINE CommandSystem::CommandManager* GetCommandManager() - { - return EMStudioManager::GetInstance()->GetCommandManager(); - } + // Shortcuts + QApplication* GetApp(); + EMStudioManager* GetManager(); + bool HasMainWindow(); + MainWindow* GetMainWindow(); + PluginManager* GetPluginManager(); + LayoutManager* GetLayoutManager(); + NotificationWindowManager* GetNotificationWindowManager(); + MotionEventPresetManager* GetEventPresetManager(); + CommandSystem::CommandManager* GetCommandManager(); } // namespace EMStudio From cda2bb9d4d080e874cecac5ce0a4345be946b8fd Mon Sep 17 00:00:00 2001 From: rhhong Date: Thu, 9 Sep 2021 21:36:52 -0700 Subject: [PATCH 175/226] Add anim viewport renderer Signed-off-by: rhhong --- .../EMotionFXAtom/Code/CMakeLists.txt | 3 + .../Tools/EMStudio/AnimViewportRenderer.cpp | 279 ++++++++++++++++++ .../Tools/EMStudio/AnimViewportRenderer.h | 79 +++++ .../Tools/EMStudio/AnimViewportWidget.cpp | 13 + .../Code/Tools/EMStudio/AnimViewportWidget.h | 5 + .../Code/emotionfx_atom_editor_files.cmake | 2 + 6 files changed, 381 insertions(+) create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt b/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt index dc22c8ee93..cc71e4f237 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/CMakeLists.txt @@ -62,6 +62,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) Gem::EMotionFX.Editor.Static Gem::AtomToolsFramework.Static Gem::AtomToolsFramework.Editor + Gem::Atom_Component_DebugCamera.Static + Gem::Atom_Feature_Common.Static + Gem::AtomLyIntegration_CommonFeatures.Static RUNTIME_DEPENDENCIES Gem::EMotionFX.Editor COMPILE_DEFINITIONS diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp new file mode 100644 index 0000000000..96fae3cdaf --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -0,0 +1,279 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#pragma optimize("", off) + +namespace EMStudio +{ + static constexpr float DepthNear = 0.01f; + + AnimViewportRenderer::AnimViewportRenderer(AZStd::shared_ptr windowContext) + : m_windowContext(windowContext) + { + // Create a new entity context + m_entityContext = AZStd::make_unique(); + m_entityContext->InitContext(); + + // Create the scene + auto sceneSystem = AzFramework::SceneSystemInterface::Get(); + AZ_Assert(sceneSystem, "Unable to retrieve scene system."); + AZ::Outcome, AZStd::string> createSceneOutcome = sceneSystem->CreateScene("AnimViewport"); + AZ_Assert(createSceneOutcome, "%s", createSceneOutcome.GetError().data()); + m_frameworkScene = createSceneOutcome.TakeValue(); + m_frameworkScene->SetSubsystem(m_entityContext.get()); + + // Create and register a scene with all available feature processors + // TODO: We don't need every procesors. + AZ::RPI::SceneDescriptor sceneDesc; + m_scene = AZ::RPI::Scene::CreateScene(sceneDesc); + m_scene->EnableAllFeatureProcessors(); + + // Link our RPI::Scene to the AzFramework::Scene + m_frameworkScene->SetSubsystem(m_scene); + + // Create a render pipeline from the specified asset for the window context and add the pipeline to the scene + AZStd::string defaultPipelineAssetPath = "passes/MainRenderPipeline.azasset"; + AZ::Data::Asset pipelineAsset = AZ::RPI::AssetUtils::LoadAssetByProductPath( + defaultPipelineAssetPath.c_str(), AZ::RPI::AssetUtils::TraceLevel::Error); + m_renderPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineAsset, *m_windowContext.get()); + pipelineAsset.Release(); + m_scene->AddRenderPipeline(m_renderPipeline); + + // As part of our initialization we need to create the BRDF texture generation pipeline + /* + AZ::RPI::RenderPipelineDescriptor pipelineDesc; + pipelineDesc.m_mainViewTagName = "MainCamera"; + pipelineDesc.m_name = "BRDFTexturePipeline"; + pipelineDesc.m_rootPassTemplate = "BRDFTexturePipeline"; + pipelineDesc.m_executeOnce = true; + + AZ::RPI::RenderPipelinePtr brdfTexturePipeline = AZ::RPI::RenderPipeline::CreateRenderPipeline(pipelineDesc); + m_scene->AddRenderPipeline(brdfTexturePipeline); + */ + + // Currently the scene has to be activated after render pipeline was added so some feature processors (i.e. imgui) can be + // initialized properly + // with pipeline's pass information. + m_scene->Activate(); + AZ::RPI::RPISystemInterface::Get()->RegisterScene(m_scene); + + AzFramework::EntityContextId entityContextId = m_entityContext->GetContextId(); + + // Configure camera + AzFramework::EntityContextRequestBus::EventResult( + m_cameraEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "Cameraentity"); + AZ_Assert(m_cameraEntity != nullptr, "Failed to create camera entity."); + + // Add debug camera and controller components + AZ::Debug::CameraComponentConfig cameraConfig(m_windowContext); + cameraConfig.m_fovY = AZ::Constants::HalfPi; + cameraConfig.m_depthNear = DepthNear; + m_cameraComponent = m_cameraEntity->CreateComponent(azrtti_typeid()); + m_cameraComponent->SetConfiguration(cameraConfig); + m_cameraEntity->CreateComponent(azrtti_typeid()); + m_cameraEntity->CreateComponent(azrtti_typeid()); + m_cameraEntity->Init(); + m_cameraEntity->Activate(); + + // Connect camera to pipeline's default view after camera entity activated + m_renderPipeline->SetDefaultViewFromEntity(m_cameraEntity->GetId()); + + // Get the FeatureProcessors + m_meshFeatureProcessor = m_scene->GetFeatureProcessor(); + // Helper function to load meshes + /* + const auto LoadMesh = [this](const char* modelPath) -> AZ::Render::MeshFeatureProcessorInterface::MeshHandle + { + AZ_Assert(m_meshFeatureProcessor, "Cannot find mesh feature processor on scene"); + + auto meshAsset = AZ::RPI::AssetUtils::GetAssetByProductPath(modelPath, AZ::RPI::AssetUtils::TraceLevel::Assert); + auto materialAsset = + AZ::RPI::AssetUtils::LoadAssetByProductPath("materials/defaultpbr.azmaterial", AZ::RPI::AssetUtils::TraceLevel::Assert); + auto material = AZ::RPI::Material::FindOrCreate(materialAsset); + AZ::Render::MeshFeatureProcessorInterface::MeshHandle meshHandle = + m_meshFeatureProcessor->AcquireMesh(AZ::Render::MeshHandleDescriptor{ meshAsset }, material); + + return meshHandle; + }; + LoadMesh("objects/shaderball_simple.azmodel"); + */ + + // Configure tone mapper + AzFramework::EntityContextRequestBus::EventResult( + m_postProcessEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "postProcessEntity"); + AZ_Assert(m_postProcessEntity != nullptr, "Failed to create post process entity."); + + m_postProcessEntity->CreateComponent(AZ::Render::PostFxLayerComponentTypeId); + m_postProcessEntity->CreateComponent(AZ::Render::ExposureControlComponentTypeId); + m_postProcessEntity->CreateComponent(azrtti_typeid()); + m_postProcessEntity->Activate(); + + // Init directional light processor + m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor(); + + // Init display mapper processor + m_displayMapperFeatureProcessor = m_scene->GetFeatureProcessor(); + + // Init Skybox + m_skyboxFeatureProcessor = m_scene->GetFeatureProcessor(); + m_skyboxFeatureProcessor->Enable(true); + m_skyboxFeatureProcessor->SetSkyboxMode(AZ::Render::SkyBoxMode::Cubemap); + + // Create IBL + AzFramework::EntityContextRequestBus::EventResult( + m_iblEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "IblEntity"); + AZ_Assert(m_iblEntity != nullptr, "Failed to create ibl entity."); + + m_iblEntity->CreateComponent(AZ::Render::ImageBasedLightComponentTypeId); + m_iblEntity->CreateComponent(azrtti_typeid()); + m_iblEntity->Activate(); + + // Temp: Load light preset + AZ::Data::Asset lightingPresetAsset = AZ::RPI::AssetUtils::LoadAssetByProductPath( + "lightingpresets/default.lightingpreset.azasset", AZ::RPI::AssetUtils::TraceLevel::Warning); + const AZ::Render::LightingPreset* preset = lightingPresetAsset->GetDataAs(); + SetLightingPreset(preset); + + // Create model + AzFramework::EntityContextRequestBus::EventResult( + m_modelEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportModel"); + AZ_Assert(m_modelEntity != nullptr, "Failed to create model entity."); + + m_modelEntity->CreateComponent(AZ::Render::MeshComponentTypeId); + m_modelEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); + m_modelEntity->CreateComponent(azrtti_typeid()); + m_modelEntity->Activate(); + + // Create grid + AzFramework::EntityContextRequestBus::EventResult( + m_gridEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportGrid"); + AZ_Assert(m_gridEntity != nullptr, "Failed to create grid entity."); + + AZ::Render::GridComponentConfig gridConfig; + gridConfig.m_gridSize = 4.0f; + gridConfig.m_axisColor = AZ::Color(0.5f, 0.5f, 0.5f, 1.0f); + gridConfig.m_primaryColor = AZ::Color(0.3f, 0.3f, 0.3f, 1.0f); + gridConfig.m_secondaryColor = AZ::Color(0.5f, 0.1f, 0.1f, 1.0f); + auto gridComponent = m_gridEntity->CreateComponent(AZ::Render::GridComponentTypeId); + gridComponent->SetConfiguration(gridConfig); + + m_gridEntity->CreateComponent(azrtti_typeid()); + m_gridEntity->Activate(); + + Reset(); + AZ::TickBus::Handler::BusConnect(); + } + + AnimViewportRenderer::~AnimViewportRenderer() + { + AZ::TickBus::Handler::BusDisconnect(); + } + + void AnimViewportRenderer::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) + { + // m_renderPipeline->AddToRenderTickOnce(); + } + + void AnimViewportRenderer::Reset() + { + // Reset environment + AZ::Transform iblTransform = AZ::Transform::CreateIdentity(); + AZ::TransformBus::Event(m_iblEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, iblTransform); + + const AZ::Matrix4x4 rotationMatrix = AZ::Matrix4x4::CreateIdentity(); + AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); + auto skyBoxFeatureProcessorInterface = scene->GetFeatureProcessor(); + skyBoxFeatureProcessorInterface->SetCubemapRotationMatrix(rotationMatrix); + + // Reset model + AZ::Transform modelTransform = AZ::Transform::CreateIdentity(); + modelTransform.SetTranslation(AZ::Vector3(1.0f, 2.0f, 0.5f)); + modelTransform.SetUniformScale(3.3f); + // modelTransform.SetUniformScale(50.0f); + AZ::TransformBus::Event(m_modelEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, modelTransform); + + auto modelAsset = AZ::RPI::AssetUtils::GetAssetByProductPath( + "objects/shaderball_simple.azmodel", AZ::RPI::AssetUtils::TraceLevel::Assert); + AZ::Render::MeshComponentRequestBus::Event( + m_modelEntity->GetId(), &AZ::Render::MeshComponentRequestBus::Events::SetModelAsset, modelAsset); + + Camera::Configuration cameraConfig; + Camera::CameraRequestBus::EventResult( + cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); + + // Reset the camera position + static constexpr float StartingDistanceMultiplier = 2.0f; + static constexpr float StartingRotationAngle = AZ::Constants::QuarterPi / 2.0f; + + AZ::Vector3 targetPosition = modelTransform.GetTranslation(); + const float distance = 1.0f * StartingDistanceMultiplier; + const AZ::Quaternion cameraRotation = AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisZ(), StartingRotationAngle); + AZ::Vector3 cameraPosition(targetPosition.GetX(), targetPosition.GetY() - distance, targetPosition.GetZ()); + cameraPosition = cameraRotation.TransformVector(cameraPosition); + AZ::Transform cameraTransform = AZ::Transform::CreateFromQuaternionAndTranslation(cameraRotation, cameraPosition); + AZ::TransformBus::Event(m_cameraEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, cameraTransform); + + // Setup primary camera controls + AZ::Debug::CameraControllerRequestBus::Event( + m_cameraEntity->GetId(), &AZ::Debug::CameraControllerRequestBus::Events::Enable, azrtti_typeid()); + } + + void AnimViewportRenderer::SetLightingPreset(const AZ::Render::LightingPreset* preset) + { + if (!preset) + { + AZ_Warning("MaterialViewportRenderer", false, "Attempting to set invalid lighting preset."); + return; + } + + AZ::Render::ImageBasedLightFeatureProcessorInterface* iblFeatureProcessor = + m_scene->GetFeatureProcessor(); + AZ::Render::PostProcessFeatureProcessorInterface* postProcessFeatureProcessor = + m_scene->GetFeatureProcessor(); + + AZ::Render::ExposureControlSettingsInterface* exposureControlSettingInterface = + postProcessFeatureProcessor->GetOrCreateSettingsInterface(m_postProcessEntity->GetId()) + ->GetOrCreateExposureControlSettingsInterface(); + + Camera::Configuration cameraConfig; + Camera::CameraRequestBus::EventResult( + cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); + + bool enableAlternateSkybox = false; + + AZStd::vector lightHandles; + preset->ApplyLightingPreset( + iblFeatureProcessor, m_skyboxFeatureProcessor, exposureControlSettingInterface, m_directionalLightFeatureProcessor, + cameraConfig, lightHandles, nullptr, AZ::RPI::MaterialPropertyIndex::Null, enableAlternateSkybox); + } +} // namespace EMStudio diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h new file mode 100644 index 0000000000..9bf92aeff9 --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +namespace AZ +{ + class Entity; + class Component; + + namespace Render + { + class DisplayMapperFeatureProcessorInterface; + class DirectionalLightFeatureProcessorInterface; + class MeshFeatureProcessorInterface; + } + + namespace RPI + { + class WindowContext; + } +} + +namespace EMStudio +{ + //! + //! + class AnimViewportRenderer + : public AZ::TickBus::Handler + { + public: + AZ_CLASS_ALLOCATOR(AnimViewportRenderer, AZ::SystemAllocator, 0); + + AnimViewportRenderer(AZStd::shared_ptr windowContext); + ~AnimViewportRenderer(); + + private: + // AZ::TickBus::Handler interface overrides... + void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; + + void Reset(); + void SetLightingPreset(const AZ::Render::LightingPreset* preset); + + AZStd::shared_ptr m_windowContext; + AZStd::unique_ptr m_entityContext; + AZStd::shared_ptr m_frameworkScene; + AZ::RPI::ScenePtr m_scene; + AZ::RPI::RenderPipelinePtr m_renderPipeline; + AZ::Render::DirectionalLightFeatureProcessorInterface* m_directionalLightFeatureProcessor = nullptr; + AZ::Render::DisplayMapperFeatureProcessorInterface* m_displayMapperFeatureProcessor = nullptr; + AZ::Render::SkyBoxFeatureProcessorInterface* m_skyboxFeatureProcessor = nullptr; + AZ::Render::MeshFeatureProcessorInterface* m_meshFeatureProcessor = nullptr; + + AZ::Entity* m_postProcessEntity = nullptr; + AZ::Entity* m_iblEntity = nullptr; + + AZ::Entity* m_cameraEntity = nullptr; + AZ::Component* m_cameraComponent = nullptr; + + AZ::Entity* m_modelEntity = nullptr; + AZ::Data::AssetId m_modelAssetId; + + AZ::Entity* m_gridEntity = nullptr; + }; +} diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index 2b961e6e7b..39b45507da 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -6,13 +6,26 @@ * */ +#include + #include +#include namespace EMStudio { AnimViewportWidget::AnimViewportWidget(QWidget* parent) : AtomToolsFramework::RenderViewportWidget(parent) { + setObjectName(QString::fromUtf8("AtomViewportWidget")); + resize(869, 574); + QSizePolicy qSize(QSizePolicy::Preferred, QSizePolicy::Preferred); + qSize.setHorizontalStretch(0); + qSize.setVerticalStretch(0); + qSize.setHeightForWidth(sizePolicy().hasHeightForWidth()); + setSizePolicy(qSize); + setAutoFillBackground(false); + setStyleSheet(QString::fromUtf8("")); + m_renderer = AZStd::make_unique(GetViewportContext()->GetWindowContext()); } } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 59ea5c6680..26bb9838b3 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -11,10 +11,15 @@ namespace EMStudio { + class AnimViewportRenderer; + class AnimViewportWidget : public AtomToolsFramework::RenderViewportWidget { public: AnimViewportWidget(QWidget* parent = nullptr); + + private: + AZStd::unique_ptr m_renderer; }; } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake index 37e69739d0..5c8728a8e9 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake @@ -14,4 +14,6 @@ set(FILES Tools/EMStudio/AtomRenderPlugin.cpp Tools/EMStudio/AnimViewportWidget.h Tools/EMStudio/AnimViewportWidget.cpp + Tools/EMStudio/AnimViewportRenderer.h + Tools/EMStudio/AnimViewportRenderer.cpp ) From d1853389789888e8661e2b6a95b357aec1b127e9 Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 13 Sep 2021 21:17:06 -0700 Subject: [PATCH 176/226] Code clean Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportRenderer.cpp | 83 ++++++++----------- .../Tools/EMStudio/AnimViewportRenderer.h | 11 +-- 2 files changed, 38 insertions(+), 56 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index 96fae3cdaf..89050cc643 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -53,7 +53,7 @@ namespace EMStudio m_frameworkScene->SetSubsystem(m_entityContext.get()); // Create and register a scene with all available feature processors - // TODO: We don't need every procesors. + // TODO: We don't need every procesors, only register the processor we are going to use. AZ::RPI::SceneDescriptor sceneDesc; m_scene = AZ::RPI::Scene::CreateScene(sceneDesc); m_scene->EnableAllFeatureProcessors(); @@ -69,21 +69,8 @@ namespace EMStudio pipelineAsset.Release(); m_scene->AddRenderPipeline(m_renderPipeline); - // As part of our initialization we need to create the BRDF texture generation pipeline - /* - AZ::RPI::RenderPipelineDescriptor pipelineDesc; - pipelineDesc.m_mainViewTagName = "MainCamera"; - pipelineDesc.m_name = "BRDFTexturePipeline"; - pipelineDesc.m_rootPassTemplate = "BRDFTexturePipeline"; - pipelineDesc.m_executeOnce = true; - - AZ::RPI::RenderPipelinePtr brdfTexturePipeline = AZ::RPI::RenderPipeline::CreateRenderPipeline(pipelineDesc); - m_scene->AddRenderPipeline(brdfTexturePipeline); - */ - // Currently the scene has to be activated after render pipeline was added so some feature processors (i.e. imgui) can be - // initialized properly - // with pipeline's pass information. + // initialized properly with pipeline's pass information. m_scene->Activate(); AZ::RPI::RPISystemInterface::Get()->RegisterScene(m_scene); @@ -110,23 +97,6 @@ namespace EMStudio // Get the FeatureProcessors m_meshFeatureProcessor = m_scene->GetFeatureProcessor(); - // Helper function to load meshes - /* - const auto LoadMesh = [this](const char* modelPath) -> AZ::Render::MeshFeatureProcessorInterface::MeshHandle - { - AZ_Assert(m_meshFeatureProcessor, "Cannot find mesh feature processor on scene"); - - auto meshAsset = AZ::RPI::AssetUtils::GetAssetByProductPath(modelPath, AZ::RPI::AssetUtils::TraceLevel::Assert); - auto materialAsset = - AZ::RPI::AssetUtils::LoadAssetByProductPath("materials/defaultpbr.azmaterial", AZ::RPI::AssetUtils::TraceLevel::Assert); - auto material = AZ::RPI::Material::FindOrCreate(materialAsset); - AZ::Render::MeshFeatureProcessorInterface::MeshHandle meshHandle = - m_meshFeatureProcessor->AcquireMesh(AZ::Render::MeshHandleDescriptor{ meshAsset }, material); - - return meshHandle; - }; - LoadMesh("objects/shaderball_simple.azmodel"); - */ // Configure tone mapper AzFramework::EntityContextRequestBus::EventResult( @@ -158,13 +128,14 @@ namespace EMStudio m_iblEntity->CreateComponent(azrtti_typeid()); m_iblEntity->Activate(); - // Temp: Load light preset + // Load light preset AZ::Data::Asset lightingPresetAsset = AZ::RPI::AssetUtils::LoadAssetByProductPath( "lightingpresets/default.lightingpreset.azasset", AZ::RPI::AssetUtils::TraceLevel::Warning); const AZ::Render::LightingPreset* preset = lightingPresetAsset->GetDataAs(); SetLightingPreset(preset); - // Create model + // Create a static model. + // TODO: Replace this with actor component. AzFramework::EntityContextRequestBus::EventResult( m_modelEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportModel"); AZ_Assert(m_modelEntity != nullptr, "Failed to create model entity."); @@ -191,17 +162,39 @@ namespace EMStudio m_gridEntity->Activate(); Reset(); - AZ::TickBus::Handler::BusConnect(); } AnimViewportRenderer::~AnimViewportRenderer() { - AZ::TickBus::Handler::BusDisconnect(); - } + const AzFramework::EntityContextId entityContextId = m_entityContext->GetContextId(); + // Destory all the entities we created. + auto DestoryEntity = [](AZ::Entity* entity, AzFramework::EntityContextId contextId) + { + AzFramework::EntityContextRequestBus::Event(contextId, &AzFramework::EntityContextRequestBus::Events::DestroyEntity, entity); + entity = nullptr; + }; + DestoryEntity(m_iblEntity, entityContextId); + DestoryEntity(m_postProcessEntity, entityContextId); + DestoryEntity(m_cameraEntity, entityContextId); + DestoryEntity(m_modelEntity, entityContextId); + DestoryEntity(m_gridEntity, entityContextId); + m_entityContext->DestroyContext(); + + for (AZ::Render::DirectionalLightFeatureProcessorInterface::LightHandle& handle : m_lightHandles) + { + m_directionalLightFeatureProcessor->ReleaseLight(handle); + } + m_lightHandles.clear(); - void AnimViewportRenderer::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) - { - // m_renderPipeline->AddToRenderTickOnce(); + m_frameworkScene->UnsetSubsystem(m_scene); + + auto sceneSystem = AzFramework::SceneSystemInterface::Get(); + AZ_Assert(sceneSystem, "AtomViewportRenderer was unable to get the scene system during destruction."); + bool removeSuccess = sceneSystem->RemoveScene("AnimViewport"); + AZ_Assert(removeSuccess, "AtomViewportRenderer should be removed."); + + AZ::RPI::RPISystemInterface::Get()->UnregisterScene(m_scene); + m_scene = nullptr; } void AnimViewportRenderer::Reset() @@ -217,9 +210,6 @@ namespace EMStudio // Reset model AZ::Transform modelTransform = AZ::Transform::CreateIdentity(); - modelTransform.SetTranslation(AZ::Vector3(1.0f, 2.0f, 0.5f)); - modelTransform.SetUniformScale(3.3f); - // modelTransform.SetUniformScale(50.0f); AZ::TransformBus::Event(m_modelEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, modelTransform); auto modelAsset = AZ::RPI::AssetUtils::GetAssetByProductPath( @@ -252,7 +242,7 @@ namespace EMStudio { if (!preset) { - AZ_Warning("MaterialViewportRenderer", false, "Attempting to set invalid lighting preset."); + AZ_Warning("AnimViewportRenderer", false, "Attempting to set invalid lighting preset."); return; } @@ -269,11 +259,8 @@ namespace EMStudio Camera::CameraRequestBus::EventResult( cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); - bool enableAlternateSkybox = false; - - AZStd::vector lightHandles; preset->ApplyLightingPreset( iblFeatureProcessor, m_skyboxFeatureProcessor, exposureControlSettingInterface, m_directionalLightFeatureProcessor, - cameraConfig, lightHandles, nullptr, AZ::RPI::MaterialPropertyIndex::Null, enableAlternateSkybox); + cameraConfig, m_lightHandles, nullptr, AZ::RPI::MaterialPropertyIndex::Null, false); } } // namespace EMStudio diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h index 9bf92aeff9..85538fd568 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -15,6 +15,7 @@ #include #include #include +#include #include namespace AZ @@ -37,10 +38,7 @@ namespace AZ namespace EMStudio { - //! - //! class AnimViewportRenderer - : public AZ::TickBus::Handler { public: AZ_CLASS_ALLOCATOR(AnimViewportRenderer, AZ::SystemAllocator, 0); @@ -49,8 +47,6 @@ namespace EMStudio ~AnimViewportRenderer(); private: - // AZ::TickBus::Handler interface overrides... - void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; void Reset(); void SetLightingPreset(const AZ::Render::LightingPreset* preset); @@ -67,13 +63,12 @@ namespace EMStudio AZ::Entity* m_postProcessEntity = nullptr; AZ::Entity* m_iblEntity = nullptr; - AZ::Entity* m_cameraEntity = nullptr; AZ::Component* m_cameraComponent = nullptr; - AZ::Entity* m_modelEntity = nullptr; AZ::Data::AssetId m_modelAssetId; - AZ::Entity* m_gridEntity = nullptr; + + AZStd::vector m_lightHandles; }; } From b7900bf646a9c74b1ce1382d4dd4db0beaf6b411 Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 21 Sep 2021 09:51:27 -0700 Subject: [PATCH 177/226] render an actor Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportRenderer.cpp | 22 ++++++++++++++++++ .../Tools/EMStudio/AnimViewportRenderer.h | 1 + .../Assets/Editor/Layouts/Character2.layout | Bin 0 -> 5388 bytes .../Include/Integration/ActorComponentBus.h | 6 ++++- 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index 89050cc643..4db69cf8d9 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -9,6 +9,8 @@ #include #include +#include +#include #include #include #include @@ -145,6 +147,18 @@ namespace EMStudio m_modelEntity->CreateComponent(azrtti_typeid()); m_modelEntity->Activate(); + // Create an actor. + // TODO: Support multiple actors. + AzFramework::EntityContextRequestBus::EventResult( + m_actorEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportModel"); + AZ_Assert(m_actorEntity != nullptr, "Failed to create model entity."); + + static constexpr const char* const ActorComponentTypeId = "{BDC97E7F-A054-448B-A26F-EA2B5D78E377}"; + m_actorEntity->CreateComponent(ActorComponentTypeId); + m_actorEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); + m_actorEntity->CreateComponent(azrtti_typeid()); + m_actorEntity->Activate(); + // Create grid AzFramework::EntityContextRequestBus::EventResult( m_gridEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportGrid"); @@ -177,6 +191,7 @@ namespace EMStudio DestoryEntity(m_postProcessEntity, entityContextId); DestoryEntity(m_cameraEntity, entityContextId); DestoryEntity(m_modelEntity, entityContextId); + DestoryEntity(m_actorEntity, entityContextId); DestoryEntity(m_gridEntity, entityContextId); m_entityContext->DestroyContext(); @@ -217,6 +232,13 @@ namespace EMStudio AZ::Render::MeshComponentRequestBus::Event( m_modelEntity->GetId(), &AZ::Render::MeshComponentRequestBus::Events::SetModelAsset, modelAsset); + // Reset the actor asset + AZ::TransformBus::Event(m_actorEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, modelTransform); + auto actorAsset = AZ::RPI::AssetUtils::GetAssetByProductPath( + "objects/characters/jack/jack.actor", AZ::RPI::AssetUtils::TraceLevel::Assert); + EMotionFX::Integration::ActorComponentRequestBus::Event( + m_actorEntity->GetId(), &EMotionFX::Integration::ActorComponentRequestBus::Events::SetActorAsset, actorAsset); + Camera::Configuration cameraConfig; Camera::CameraRequestBus::EventResult( cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h index 85538fd568..eb590f8d71 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -66,6 +66,7 @@ namespace EMStudio AZ::Entity* m_cameraEntity = nullptr; AZ::Component* m_cameraComponent = nullptr; AZ::Entity* m_modelEntity = nullptr; + AZ::Entity* m_actorEntity = nullptr; AZ::Data::AssetId m_modelAssetId; AZ::Entity* m_gridEntity = nullptr; diff --git a/Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout b/Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout new file mode 100644 index 0000000000000000000000000000000000000000..a97581727fce4261825b056591394bf56be2044d GIT binary patch literal 5388 zcmc&&U1%It6h7Ha(^?RV4cHgUDxxAp=HB@Sg`_HJOOh7bDuPhA$(k;jov_(dtkTd2 zt*w+65g`wvAc#VRs?p~@_$FdsguVz3DEOo(;!D=V@4GX1li8Y(hqQCToqOlbIp==o zyXV}Q>@%ZBMuuKEbnK{z^rBIQW+yA!t7u0nDdB#;N96Js7k^rs6T#5POIId;<2{A_ z;JY$MJu4j2kE>EYf6k}+S2Klc_pY3w{$Xp-)myz!v-usJ=YJTx`L{29^Cadf=hFVy zrTcz2INH5C>DTJp=bvSI*3GHydyM|&Z2s=uH>z#KVf~8SW1e4MSy-gM#iecL-rC!K z*R?Ot^7;Oo3yY7FEXWGPnfuzcM3aX1ZjssUY$_cgaN)bGa zB@?yEa5I^mo{{2sP}+|Jr9&^!j<3T4@?kV-PM@qCtu`lXtr;mQA3R5eq4Gm7@}(Fa zhFY!a_{phS11uEBgNu>~a6km1uY4&Y9}XtKByp$Vy$pisvwGj z0_tL@l}vSgJrwZ$pj51*F!J1ZK)G7SfrAf;0XGaB3`6olxn18;d+wt5-4{jr#xOA7 zUjJfXzf<{C+Pv#o!sTf>E;X5wL|RhEwShuv$*fG6yBYMaK%?@%e_9;TNO%|CO7Fwj z6*&DH;|ugIvVB>k+%{`%Yh!9JZ}H?2en7XOASF&i`cS>{gPA5WGo5M6cdOb2{4oBb z7?EQ#EC*yv0=$QOfMB1FB8+`e^bRRsN_&Ky4mP(EVNyzqxV*fIivSMh0C3qD03z@Z zi6<`Z1~BJhPGcN^BRxSu^};ttQQNGmOzP!?>NL>saL5bUpklg+ZRF7)%i(BMlL;hn^`BiU;d* z4F+#mYf#pA3e>%WcBHet$M>M|(!eykj}0@s|F9C6C=TVh%2NHpji`nUx%rvp$cHeu)bC%!qL1D$IHoP5Mg* z`!3OBXJd`_U<)_UWwM_7YE@|&?ivOsqe$qcPcrY #include #include - +#include namespace EMotionFX { @@ -96,6 +96,10 @@ namespace EMotionFX /// Returns skinning method used by the actor. virtual SkinningMethod GetSkinningMethod() const = 0; + // Use this to alter the actor asset. + virtual void SetActorAsset(AZ::Data::Asset actorAsset) = 0; + // virtual AZ::Data::Asset GetAsset() const = 0; + static const size_t s_invalidJointIndex = std::numeric_limits::max(); }; From c463721b52efbb216897d3b7d7d46f26bcad5cc7 Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 21 Sep 2021 09:51:52 -0700 Subject: [PATCH 178/226] move the function setactorasset Signed-off-by: rhhong --- .../Code/Source/Integration/Components/ActorComponent.h | 3 +-- .../Integration/Editor/Components/EditorActorComponent.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h index b376fa891d..15d9736f34 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/ActorComponent.h @@ -121,6 +121,7 @@ namespace EMotionFX void SetRenderCharacter(bool enable) override; bool GetRenderActorVisible() const override; SkinningMethod GetSkinningMethod() const override; + void SetActorAsset(AZ::Data::Asset actorAsset) override; ////////////////////////////////////////////////////////////////////////// // ActorComponentNotificationBus::Handler @@ -178,8 +179,6 @@ namespace EMotionFX void OnAssetReloaded(AZ::Data::Asset asset) override; bool IsPhysicsSceneSimulationFinishEventConnected() const; - - void SetActorAsset(AZ::Data::Asset actorAsset); AZ::Data::Asset GetActorAsset() const { return m_configuration.m_actorAsset; } private: diff --git a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h index e8f76bdd49..1d682b47d4 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Editor/Components/EditorActorComponent.h @@ -60,6 +60,7 @@ namespace EMotionFX bool GetRenderActorVisible() const override; size_t GetNumJoints() const override; SkinningMethod GetSkinningMethod() const override; + void SetActorAsset(AZ::Data::Asset actorAsset) override; // EditorActorComponentRequestBus overrides ... const AZ::Data::AssetId& GetActorAssetId() override; @@ -79,8 +80,6 @@ namespace EMotionFX void OnAssetReady(AZ::Data::Asset asset) override; void OnAssetReloaded(AZ::Data::Asset asset) override; - void SetActorAsset(AZ::Data::Asset actorAsset); - // BoundsRequestBus overrides ... AZ::Aabb GetWorldBounds() override; AZ::Aabb GetLocalBounds() override; From 82bfbd5c9819bf29a3d3e65ba5d378cd93169586 Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 27 Sep 2021 16:27:32 -0700 Subject: [PATCH 179/226] Add ability to load actor from the ui Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportRenderer.cpp | 149 +++++++++++------- .../Tools/EMStudio/AnimViewportRenderer.h | 17 +- .../Code/Tools/EMStudio/AnimViewportWidget.h | 2 + .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 43 ++++- .../Code/Tools/EMStudio/AtomRenderPlugin.h | 12 ++ .../Code/EMotionFX/Source/ActorManager.cpp | 6 + .../Code/EMotionFX/Source/ActorManager.h | 1 + 7 files changed, 170 insertions(+), 60 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index 4db69cf8d9..f3294ddc09 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -9,8 +9,8 @@ #include #include -#include #include +#include #include #include #include @@ -32,12 +32,15 @@ #include #include +#include +#include #include -#pragma optimize("", off) + namespace EMStudio { static constexpr float DepthNear = 0.01f; + static constexpr const char* const s_actorComponentTypeId = "{BDC97E7F-A054-448B-A26F-EA2B5D78E377}"; AnimViewportRenderer::AnimViewportRenderer(AZStd::shared_ptr windowContext) : m_windowContext(windowContext) @@ -136,29 +139,6 @@ namespace EMStudio const AZ::Render::LightingPreset* preset = lightingPresetAsset->GetDataAs(); SetLightingPreset(preset); - // Create a static model. - // TODO: Replace this with actor component. - AzFramework::EntityContextRequestBus::EventResult( - m_modelEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportModel"); - AZ_Assert(m_modelEntity != nullptr, "Failed to create model entity."); - - m_modelEntity->CreateComponent(AZ::Render::MeshComponentTypeId); - m_modelEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); - m_modelEntity->CreateComponent(azrtti_typeid()); - m_modelEntity->Activate(); - - // Create an actor. - // TODO: Support multiple actors. - AzFramework::EntityContextRequestBus::EventResult( - m_actorEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportModel"); - AZ_Assert(m_actorEntity != nullptr, "Failed to create model entity."); - - static constexpr const char* const ActorComponentTypeId = "{BDC97E7F-A054-448B-A26F-EA2B5D78E377}"; - m_actorEntity->CreateComponent(ActorComponentTypeId); - m_actorEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); - m_actorEntity->CreateComponent(azrtti_typeid()); - m_actorEntity->Activate(); - // Create grid AzFramework::EntityContextRequestBus::EventResult( m_gridEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "ViewportGrid"); @@ -175,24 +155,21 @@ namespace EMStudio m_gridEntity->CreateComponent(azrtti_typeid()); m_gridEntity->Activate(); - Reset(); + Reinit(); } AnimViewportRenderer::~AnimViewportRenderer() { - const AzFramework::EntityContextId entityContextId = m_entityContext->GetContextId(); - // Destory all the entities we created. - auto DestoryEntity = [](AZ::Entity* entity, AzFramework::EntityContextId contextId) + // Destroy all the entity we created. + m_entityContext->DestroyEntity(m_iblEntity); + m_entityContext->DestroyEntity(m_postProcessEntity); + m_entityContext->DestroyEntity(m_cameraEntity); + m_entityContext->DestroyEntity(m_gridEntity); + for (AZ::Entity* entity : m_actorEntities) { - AzFramework::EntityContextRequestBus::Event(contextId, &AzFramework::EntityContextRequestBus::Events::DestroyEntity, entity); - entity = nullptr; - }; - DestoryEntity(m_iblEntity, entityContextId); - DestoryEntity(m_postProcessEntity, entityContextId); - DestoryEntity(m_cameraEntity, entityContextId); - DestoryEntity(m_modelEntity, entityContextId); - DestoryEntity(m_actorEntity, entityContextId); - DestoryEntity(m_gridEntity, entityContextId); + m_entityContext->DestroyEntity(entity); + } + m_actorEntities.clear(); m_entityContext->DestroyContext(); for (AZ::Render::DirectionalLightFeatureProcessorInterface::LightHandle& handle : m_lightHandles) @@ -212,7 +189,13 @@ namespace EMStudio m_scene = nullptr; } - void AnimViewportRenderer::Reset() + void AnimViewportRenderer::Reinit() + { + ReinitActorEntities(); + ResetEnvironment(); + } + + void AnimViewportRenderer::ResetEnvironment() { // Reset environment AZ::Transform iblTransform = AZ::Transform::CreateIdentity(); @@ -223,22 +206,6 @@ namespace EMStudio auto skyBoxFeatureProcessorInterface = scene->GetFeatureProcessor(); skyBoxFeatureProcessorInterface->SetCubemapRotationMatrix(rotationMatrix); - // Reset model - AZ::Transform modelTransform = AZ::Transform::CreateIdentity(); - AZ::TransformBus::Event(m_modelEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, modelTransform); - - auto modelAsset = AZ::RPI::AssetUtils::GetAssetByProductPath( - "objects/shaderball_simple.azmodel", AZ::RPI::AssetUtils::TraceLevel::Assert); - AZ::Render::MeshComponentRequestBus::Event( - m_modelEntity->GetId(), &AZ::Render::MeshComponentRequestBus::Events::SetModelAsset, modelAsset); - - // Reset the actor asset - AZ::TransformBus::Event(m_actorEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, modelTransform); - auto actorAsset = AZ::RPI::AssetUtils::GetAssetByProductPath( - "objects/characters/jack/jack.actor", AZ::RPI::AssetUtils::TraceLevel::Assert); - EMotionFX::Integration::ActorComponentRequestBus::Event( - m_actorEntity->GetId(), &EMotionFX::Integration::ActorComponentRequestBus::Events::SetActorAsset, actorAsset); - Camera::Configuration cameraConfig; Camera::CameraRequestBus::EventResult( cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); @@ -247,7 +214,7 @@ namespace EMStudio static constexpr float StartingDistanceMultiplier = 2.0f; static constexpr float StartingRotationAngle = AZ::Constants::QuarterPi / 2.0f; - AZ::Vector3 targetPosition = modelTransform.GetTranslation(); + AZ::Vector3 targetPosition = iblTransform.GetTranslation(); const float distance = 1.0f * StartingDistanceMultiplier; const AZ::Quaternion cameraRotation = AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisZ(), StartingRotationAngle); AZ::Vector3 cameraPosition(targetPosition.GetX(), targetPosition.GetY() - distance, targetPosition.GetZ()); @@ -260,6 +227,75 @@ namespace EMStudio m_cameraEntity->GetId(), &AZ::Debug::CameraControllerRequestBus::Events::Enable, azrtti_typeid()); } + void AnimViewportRenderer::ReinitActorEntities() + { + // 1. Destroy all the entities that does not point to any actorAsset anymore. + AZStd::set assetLookup; + AzFramework::EntityContext* entityContext = m_entityContext.get(); + const size_t numActors = EMotionFX::GetActorManager().GetNumActors(); + for (size_t i = 0; i < numActors; ++i) + { + assetLookup.emplace(EMotionFX::GetActorManager().GetActorAsset(i).GetId()); + } + m_actorEntities.erase( + AZStd::remove_if( + m_actorEntities.begin(), m_actorEntities.end(), + [&assetLookup, entityContext](AZ::Entity* entity) + { + EMotionFX::Integration::ActorComponent* actorComponent = + entity->FindComponent(); + if (assetLookup.find(actorComponent->GetActorAsset().GetId()) == assetLookup.end()) + { + entityContext->DestroyEntity(entity); + return true; + } + return false; + }), + m_actorEntities.end()); + + // 2. Create an entity for every actorAsset stored in actor manager. + for (size_t i = 0; i < numActors; ++i) + { + AZ::Data::Asset actorAsset = EMotionFX::GetActorManager().GetActorAsset(i); + if (!actorAsset->IsReady()) + { + continue; + } + + AZ::Entity* entity = FindActorEntity(actorAsset); + if (!entity) + { + m_actorEntities.emplace_back(CreateActorEntity(actorAsset)); + } + } + } + + AZ::Entity* AnimViewportRenderer::FindActorEntity(AZ::Data::Asset actorAsset) const + { + const auto foundEntity = AZStd::find_if( + begin(m_actorEntities), end(m_actorEntities), + [match = actorAsset](const AZ::Entity* entity) + { + EMotionFX::Integration::ActorComponent* actorComponent = entity->FindComponent(); + return actorComponent->GetActorAsset() == match; + }); + return foundEntity != end(m_actorEntities) ? (*foundEntity) : nullptr; + } + + AZ::Entity* AnimViewportRenderer::CreateActorEntity(AZ::Data::Asset actorAsset) + { + AZ::Entity* actorEntity = m_entityContext->CreateEntity(actorAsset->GetActor()->GetName()); + actorEntity->CreateComponent(s_actorComponentTypeId); + actorEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); + actorEntity->CreateComponent(azrtti_typeid()); + actorEntity->Activate(); + + EMotionFX::Integration::ActorComponent* actorComponent = actorEntity->FindComponent(); + actorComponent->SetActorAsset(actorAsset); + + return actorEntity; + } + void AnimViewportRenderer::SetLightingPreset(const AZ::Render::LightingPreset* preset) { if (!preset) @@ -272,7 +308,6 @@ namespace EMStudio m_scene->GetFeatureProcessor(); AZ::Render::PostProcessFeatureProcessorInterface* postProcessFeatureProcessor = m_scene->GetFeatureProcessor(); - AZ::Render::ExposureControlSettingsInterface* exposureControlSettingInterface = postProcessFeatureProcessor->GetOrCreateSettingsInterface(m_postProcessEntity->GetId()) ->GetOrCreateExposureControlSettingsInterface(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h index eb590f8d71..c131605caa 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -46,9 +47,21 @@ namespace EMStudio AnimViewportRenderer(AZStd::shared_ptr windowContext); ~AnimViewportRenderer(); + void Reinit(); + private: - void Reset(); + // This function reset the light, camera and other environment settings. + void ResetEnvironment(); + + // This function create in-editor entities for all the actor asset stored in the actor manager, + // and delete all the actor entities that no longer has an actor asset in the actor manager. + // Those entities are used in atom render viewport to visualize actors in animation editor. + void ReinitActorEntities(); + + AZ::Entity* CreateActorEntity(AZ::Data::Asset actorAsset); + + AZ::Entity* FindActorEntity(AZ::Data::Asset actorAsset) const; void SetLightingPreset(const AZ::Render::LightingPreset* preset); AZStd::shared_ptr m_windowContext; @@ -66,9 +79,9 @@ namespace EMStudio AZ::Entity* m_cameraEntity = nullptr; AZ::Component* m_cameraComponent = nullptr; AZ::Entity* m_modelEntity = nullptr; - AZ::Entity* m_actorEntity = nullptr; AZ::Data::AssetId m_modelAssetId; AZ::Entity* m_gridEntity = nullptr; + AZStd::vector m_actorEntities; AZStd::vector m_lightHandles; }; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 26bb9838b3..9e074c1d2c 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -9,6 +9,7 @@ #include + namespace EMStudio { class AnimViewportRenderer; @@ -18,6 +19,7 @@ namespace EMStudio { public: AnimViewportWidget(QWidget* parent = nullptr); + AnimViewportRenderer* GetAnimViewportRenderer() { return m_renderer.get();} private: AZStd::unique_ptr m_renderer; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index c7e2178366..735c90d762 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -7,6 +7,11 @@ */ #include +#include + +#include +#include +#include #include namespace EMStudio @@ -66,6 +71,11 @@ namespace EMStudio return EMStudioPlugin::PLUGINTYPE_RENDERING; } + void AtomRenderPlugin::ReinitRenderer() + { + m_animViewportWidget->GetAnimViewportRenderer()->Reinit(); + } + bool AtomRenderPlugin::Init() { m_innerWidget = new QWidget(); @@ -75,9 +85,40 @@ namespace EMStudio verticalLayout->setSizeConstraint(QLayout::SetNoConstraint); verticalLayout->setSpacing(1); verticalLayout->setMargin(0); - m_animViewportWidget = new AnimViewportWidget(m_innerWidget); + // Register command callbacks. + m_createActorInstanceCallback = new CreateActorInstanceCallback(false); + EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("CreateActorInstance", m_createActorInstanceCallback); + + return true; + } + + // Command callbacks + bool ReinitAtomRenderPlugin() + { + EMStudioPlugin* plugin = EMStudio::GetPluginManager()->FindActivePlugin(static_cast(AtomRenderPlugin::CLASS_ID)); + if (!plugin) + { + AZ_Error("AtomRenderPlugin", false, "Cannot execute command callback. Atom render plugin does not exist."); + return false; + } + + AtomRenderPlugin* atomRenderPlugin = static_cast(plugin); + atomRenderPlugin->ReinitRenderer(); + return true; } + + bool AtomRenderPlugin::CreateActorInstanceCallback::Execute( + [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) + { + return ReinitAtomRenderPlugin(); + } + bool AtomRenderPlugin::CreateActorInstanceCallback::Undo( + [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) + { + return ReinitAtomRenderPlugin(); + } + } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index 0fb1443a96..9e5b3b6937 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -9,11 +9,18 @@ #pragma once #if !defined(Q_MOC_RUN) +#include #include + #include #include #endif +namespace AZ +{ + class Entity; +} + namespace EMStudio { class AtomRenderPlugin @@ -39,7 +46,12 @@ namespace EMStudio EMStudioPlugin* Clone(); EMStudioPlugin::EPluginType GetPluginType() const override; + void ReinitRenderer(); + private: + MCORE_DEFINECOMMANDCALLBACK(CreateActorInstanceCallback); + CreateActorInstanceCallback* m_createActorInstanceCallback; + QWidget* m_innerWidget; AnimViewportWidget* m_animViewportWidget; }; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index 0779e55f85..0593575623 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -429,6 +429,12 @@ namespace EMotionFX } + ActorManager::ActorAssetData ActorManager::GetActorAsset(size_t nr) const + { + return m_actorAssets[nr]; + } + + const AZStd::vector& ActorManager::GetActorInstanceArray() const { return m_actorInstances; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h index e4ce0d6c94..e8bbf40661 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h @@ -80,6 +80,7 @@ namespace EMotionFX * @result A reference to the actor object that contains the array of Actor objects. */ Actor* GetActor(size_t nr) const; + ActorAssetData GetActorAsset(size_t nr) const; /** * Find the given actor by name. From 09f9e5c6c35a04327e35a663282df16f3082906e Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 28 Sep 2021 22:48:14 -0700 Subject: [PATCH 180/226] CR feedback Signed-off-by: rhhong --- .../Code/Tools/EMStudio/AnimViewportRenderer.cpp | 5 ++--- .../Code/Tools/EMStudio/AnimViewportRenderer.h | 6 +++--- .../Code/Tools/EMStudio/AnimViewportWidget.h | 2 +- .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 13 +++++++++++++ .../Code/Tools/EMStudio/AtomRenderPlugin.h | 2 ++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index f3294ddc09..c98a244d8f 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -40,7 +40,6 @@ namespace EMStudio { static constexpr float DepthNear = 0.01f; - static constexpr const char* const s_actorComponentTypeId = "{BDC97E7F-A054-448B-A26F-EA2B5D78E377}"; AnimViewportRenderer::AnimViewportRenderer(AZStd::shared_ptr windowContext) : m_windowContext(windowContext) @@ -229,7 +228,7 @@ namespace EMStudio void AnimViewportRenderer::ReinitActorEntities() { - // 1. Destroy all the entities that does not point to any actorAsset anymore. + // 1. Destroy all the entities that do not point to any actorAsset anymore. AZStd::set assetLookup; AzFramework::EntityContext* entityContext = m_entityContext.get(); const size_t numActors = EMotionFX::GetActorManager().GetNumActors(); @@ -285,7 +284,7 @@ namespace EMStudio AZ::Entity* AnimViewportRenderer::CreateActorEntity(AZ::Data::Asset actorAsset) { AZ::Entity* actorEntity = m_entityContext->CreateEntity(actorAsset->GetActor()->GetName()); - actorEntity->CreateComponent(s_actorComponentTypeId); + actorEntity->CreateComponent(azrtti_typeid()); actorEntity->CreateComponent(AZ::Render::MaterialComponentTypeId); actorEntity->CreateComponent(azrtti_typeid()); actorEntity->Activate(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h index c131605caa..8671068199 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -51,11 +51,11 @@ namespace EMStudio private: - // This function reset the light, camera and other environment settings. + // This function resets the light, camera and other environment settings. void ResetEnvironment(); - // This function create in-editor entities for all the actor asset stored in the actor manager, - // and delete all the actor entities that no longer has an actor asset in the actor manager. + // This function creates in-editor entities for all actor assets stored in the actor manager, + // and deletes all the actor entities that no longer has an actor asset in the actor manager. // Those entities are used in atom render viewport to visualize actors in animation editor. void ReinitActorEntities(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 9e074c1d2c..6d1d91ac0d 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -19,7 +19,7 @@ namespace EMStudio { public: AnimViewportWidget(QWidget* parent = nullptr); - AnimViewportRenderer* GetAnimViewportRenderer() { return m_renderer.get();} + AnimViewportRenderer* GetAnimViewportRenderer() { return m_renderer.get(); } private: AZStd::unique_ptr m_renderer; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 735c90d762..1f35212b8b 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -89,7 +89,9 @@ namespace EMStudio // Register command callbacks. m_createActorInstanceCallback = new CreateActorInstanceCallback(false); + m_removeActorInstanceCallback = new RemoveActorInstanceCallback(false); EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("CreateActorInstance", m_createActorInstanceCallback); + EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("RemoveActorInstance", m_removeActorInstanceCallback); return true; } @@ -121,4 +123,15 @@ namespace EMStudio return ReinitAtomRenderPlugin(); } + bool AtomRenderPlugin::RemoveActorInstanceCallback::Execute( + [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) + { + return ReinitAtomRenderPlugin(); + } + bool AtomRenderPlugin::RemoveActorInstanceCallback::Undo( + [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) + { + return ReinitAtomRenderPlugin(); + } + } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index 9e5b3b6937..475fd34180 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -50,7 +50,9 @@ namespace EMStudio private: MCORE_DEFINECOMMANDCALLBACK(CreateActorInstanceCallback); + MCORE_DEFINECOMMANDCALLBACK(RemoveActorInstanceCallback); CreateActorInstanceCallback* m_createActorInstanceCallback; + RemoveActorInstanceCallback* m_removeActorInstanceCallback; QWidget* m_innerWidget; AnimViewportWidget* m_animViewportWidget; From 47a2240fc3cd3d64c54ef93ca27e5eee99298ab8 Mon Sep 17 00:00:00 2001 From: rhhong Date: Fri, 1 Oct 2021 15:38:50 -0700 Subject: [PATCH 181/226] Using modular camera system to replace the camera entity. Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportRenderer.cpp | 62 +++------ .../Tools/EMStudio/AnimViewportRenderer.h | 4 +- .../Tools/EMStudio/AnimViewportWidget.cpp | 122 +++++++++++++++++- .../Code/Tools/EMStudio/AnimViewportWidget.h | 8 +- .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 3 +- 5 files changed, 146 insertions(+), 53 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index c98a244d8f..c475ad8948 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -32,17 +32,19 @@ #include #include +#include #include #include -#include +#include +#include namespace EMStudio { static constexpr float DepthNear = 0.01f; - AnimViewportRenderer::AnimViewportRenderer(AZStd::shared_ptr windowContext) - : m_windowContext(windowContext) + AnimViewportRenderer::AnimViewportRenderer(AZ::RPI::ViewportContextPtr viewportContext) + : m_windowContext(viewportContext->GetWindowContext()) { // Create a new entity context m_entityContext = AZStd::make_unique(); @@ -72,33 +74,14 @@ namespace EMStudio m_renderPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineAsset, *m_windowContext.get()); pipelineAsset.Release(); m_scene->AddRenderPipeline(m_renderPipeline); + m_renderPipeline->SetDefaultView(viewportContext->GetDefaultView()); // Currently the scene has to be activated after render pipeline was added so some feature processors (i.e. imgui) can be // initialized properly with pipeline's pass information. m_scene->Activate(); AZ::RPI::RPISystemInterface::Get()->RegisterScene(m_scene); - AzFramework::EntityContextId entityContextId = m_entityContext->GetContextId(); - // Configure camera - AzFramework::EntityContextRequestBus::EventResult( - m_cameraEntity, entityContextId, &AzFramework::EntityContextRequestBus::Events::CreateEntity, "Cameraentity"); - AZ_Assert(m_cameraEntity != nullptr, "Failed to create camera entity."); - - // Add debug camera and controller components - AZ::Debug::CameraComponentConfig cameraConfig(m_windowContext); - cameraConfig.m_fovY = AZ::Constants::HalfPi; - cameraConfig.m_depthNear = DepthNear; - m_cameraComponent = m_cameraEntity->CreateComponent(azrtti_typeid()); - m_cameraComponent->SetConfiguration(cameraConfig); - m_cameraEntity->CreateComponent(azrtti_typeid()); - m_cameraEntity->CreateComponent(azrtti_typeid()); - m_cameraEntity->Init(); - m_cameraEntity->Activate(); - - // Connect camera to pipeline's default view after camera entity activated - m_renderPipeline->SetDefaultViewFromEntity(m_cameraEntity->GetId()); - // Get the FeatureProcessors m_meshFeatureProcessor = m_scene->GetFeatureProcessor(); @@ -162,7 +145,7 @@ namespace EMStudio // Destroy all the entity we created. m_entityContext->DestroyEntity(m_iblEntity); m_entityContext->DestroyEntity(m_postProcessEntity); - m_entityContext->DestroyEntity(m_cameraEntity); + //m_entityContext->DestroyEntity(m_cameraEntity); m_entityContext->DestroyEntity(m_gridEntity); for (AZ::Entity* entity : m_actorEntities) { @@ -204,26 +187,6 @@ namespace EMStudio AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); auto skyBoxFeatureProcessorInterface = scene->GetFeatureProcessor(); skyBoxFeatureProcessorInterface->SetCubemapRotationMatrix(rotationMatrix); - - Camera::Configuration cameraConfig; - Camera::CameraRequestBus::EventResult( - cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); - - // Reset the camera position - static constexpr float StartingDistanceMultiplier = 2.0f; - static constexpr float StartingRotationAngle = AZ::Constants::QuarterPi / 2.0f; - - AZ::Vector3 targetPosition = iblTransform.GetTranslation(); - const float distance = 1.0f * StartingDistanceMultiplier; - const AZ::Quaternion cameraRotation = AZ::Quaternion::CreateFromAxisAngle(AZ::Vector3::CreateAxisZ(), StartingRotationAngle); - AZ::Vector3 cameraPosition(targetPosition.GetX(), targetPosition.GetY() - distance, targetPosition.GetZ()); - cameraPosition = cameraRotation.TransformVector(cameraPosition); - AZ::Transform cameraTransform = AZ::Transform::CreateFromQuaternionAndTranslation(cameraRotation, cameraPosition); - AZ::TransformBus::Event(m_cameraEntity->GetId(), &AZ::TransformBus::Events::SetLocalTM, cameraTransform); - - // Setup primary camera controls - AZ::Debug::CameraControllerRequestBus::Event( - m_cameraEntity->GetId(), &AZ::Debug::CameraControllerRequestBus::Events::Enable, azrtti_typeid()); } void AnimViewportRenderer::ReinitActorEntities() @@ -292,6 +255,13 @@ namespace EMStudio EMotionFX::Integration::ActorComponent* actorComponent = actorEntity->FindComponent(); actorComponent->SetActorAsset(actorAsset); + // Since this entity belongs to the animation editor, we need to set the isOwnByRuntime flag to false. + actorComponent->GetActorInstance()->SetIsOwnedByRuntime(false); + // Selet the actor instance in the command manager after it has been created. + AZStd::string outResult; + EMStudioManager::GetInstance()->GetCommandManager()->ExecuteCommandInsideCommand( + AZStd::string::format("Select -actorInstanceID %i", actorComponent->GetActorInstance()->GetID()).c_str(), outResult); + return actorEntity; } @@ -312,8 +282,8 @@ namespace EMStudio ->GetOrCreateExposureControlSettingsInterface(); Camera::Configuration cameraConfig; - Camera::CameraRequestBus::EventResult( - cameraConfig, m_cameraEntity->GetId(), &Camera::CameraRequestBus::Events::GetCameraConfiguration); + cameraConfig.m_fovRadians = AZ::Constants::HalfPi; + cameraConfig.m_nearClipDistance = DepthNear; preset->ApplyLightingPreset( iblFeatureProcessor, m_skyboxFeatureProcessor, exposureControlSettingInterface, m_directionalLightFeatureProcessor, diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h index 8671068199..dd420c175c 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.h @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include @@ -44,7 +44,7 @@ namespace EMStudio public: AZ_CLASS_ALLOCATOR(AnimViewportRenderer, AZ::SystemAllocator, 0); - AnimViewportRenderer(AZStd::shared_ptr windowContext); + AnimViewportRenderer(AZ::RPI::ViewportContextPtr viewportContext); ~AnimViewportRenderer(); void Reinit(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index 39b45507da..81678d477e 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -6,7 +6,11 @@ * */ +#include +#include +#include #include +#include #include #include @@ -17,7 +21,6 @@ namespace EMStudio : AtomToolsFramework::RenderViewportWidget(parent) { setObjectName(QString::fromUtf8("AtomViewportWidget")); - resize(869, 574); QSizePolicy qSize(QSizePolicy::Preferred, QSizePolicy::Preferred); qSize.setHorizontalStretch(0); qSize.setVerticalStretch(0); @@ -26,6 +29,119 @@ namespace EMStudio setAutoFillBackground(false); setStyleSheet(QString::fromUtf8("")); - m_renderer = AZStd::make_unique(GetViewportContext()->GetWindowContext()); + m_renderer = AZStd::make_unique(GetViewportContext()); + + SetupCameras(); + SetupCameraController(); + } + + template + AZStd::remove_cvref_t GetRegistry(const AZStd::string_view setting, T&& defaultValue) + { + AZStd::remove_cvref_t value = AZStd::forward(defaultValue); + if (const auto* registry = AZ::SettingsRegistry::Get()) + { + T potentialValue; + if (registry->Get(potentialValue, setting)) + { + value = AZStd::move(potentialValue); + } + } + + return value; + } + + // TODO: TranslateCameraInput should have a way to initiate with default channel id setup. + static AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds() + { + constexpr AZStd::string_view CameraTranslateForwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateForwardId"; + constexpr AZStd::string_view CameraTranslateBackwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateBackwardId"; + constexpr AZStd::string_view CameraTranslateLeftIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateLeftId"; + constexpr AZStd::string_view CameraTranslateRightIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateRightId"; + constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId"; + constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId"; + constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId"; + + AzFramework::TranslateCameraInputChannelIds translateCameraInputChannelIds; + translateCameraInputChannelIds.m_leftChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); + translateCameraInputChannelIds.m_rightChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); + translateCameraInputChannelIds.m_forwardChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); + translateCameraInputChannelIds.m_backwardChannelId = AzFramework::InputChannelId( + GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); + translateCameraInputChannelIds.m_upChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); + translateCameraInputChannelIds.m_downChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); + translateCameraInputChannelIds.m_boostChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); + + return translateCameraInputChannelIds; + } + + void AnimViewportWidget::SetupCameras() + { + constexpr AZStd::string_view CameraOrbitIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitId"; + constexpr AZStd::string_view CameraOrbitLookIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitLookId"; + + m_orbitRotateCamera = AZStd::make_shared( + AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str())); + + const auto translateCameraInputChannelIds = BuildTranslateCameraInputChannelIds(); + m_orbitTranslateCamera = + AZStd::make_shared(AzFramework::OrbitTranslation, translateCameraInputChannelIds); + m_orbitDollyScrollCamera = AZStd::make_shared(); + } + + void AnimViewportWidget::SetupCameraController() + { + auto controller = AZStd::make_shared(); + controller->SetCameraViewportContextBuilderCallback( + [viewportId = + GetViewportContext()->GetId()](AZStd::unique_ptr& cameraViewportContext) + { + cameraViewportContext = AZStd::make_unique(viewportId); + }); + + controller->SetCameraPriorityBuilderCallback( + [](AtomToolsFramework::CameraControllerPriorityFn& cameraControllerPriorityFn) + { + cameraControllerPriorityFn = AtomToolsFramework::DefaultCameraControllerPriority; + }); + + controller->SetCameraPropsBuilderCallback( + [](AzFramework::CameraProps& cameraProps) + { + cameraProps.m_rotateSmoothnessFn = [] + { + return 5.0f; + }; + + cameraProps.m_translateSmoothnessFn = [] + { + return 5.0f; + }; + + cameraProps.m_rotateSmoothingEnabledFn = [] + { + return true; + }; + + cameraProps.m_translateSmoothingEnabledFn = [] + { + return true; + }; + }); + + controller->SetCameraListBuilderCallback( + [this](AzFramework::Cameras& cameras) + { + cameras.AddCamera(m_orbitRotateCamera); + cameras.AddCamera(m_orbitTranslateCamera); + cameras.AddCamera(m_orbitDollyScrollCamera); + }); + GetControllerList()->Add(controller); } -} +} // namespace EMStudio diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 6d1d91ac0d..64bf4cd5dd 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -8,7 +8,7 @@ #pragma once #include - +#include namespace EMStudio { @@ -22,6 +22,12 @@ namespace EMStudio AnimViewportRenderer* GetAnimViewportRenderer() { return m_renderer.get(); } private: + void SetupCameras(); + void SetupCameraController(); + AZStd::unique_ptr m_renderer; + AZStd::shared_ptr m_orbitRotateCamera; + AZStd::shared_ptr m_orbitTranslateCamera; + AZStd::shared_ptr m_orbitDollyScrollCamera; }; } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 1f35212b8b..948006e2b5 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -28,7 +28,7 @@ namespace EMStudio const char* AtomRenderPlugin::GetName() const { - return "Atom Render Window"; + return "Atom Render Window (Preview)"; } uint32 AtomRenderPlugin::GetClassID() const @@ -86,6 +86,7 @@ namespace EMStudio verticalLayout->setSpacing(1); verticalLayout->setMargin(0); m_animViewportWidget = new AnimViewportWidget(m_innerWidget); + verticalLayout->addWidget(m_animViewportWidget); // Register command callbacks. m_createActorInstanceCallback = new CreateActorInstanceCallback(false); From ffa637d115903758beecf05ce43ba21e5edbeb1c Mon Sep 17 00:00:00 2001 From: rhhong Date: Fri, 1 Oct 2021 16:04:49 -0700 Subject: [PATCH 182/226] Code cleanup Signed-off-by: rhhong --- .../EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index c475ad8948..a75095568f 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -145,7 +145,6 @@ namespace EMStudio // Destroy all the entity we created. m_entityContext->DestroyEntity(m_iblEntity); m_entityContext->DestroyEntity(m_postProcessEntity); - //m_entityContext->DestroyEntity(m_cameraEntity); m_entityContext->DestroyEntity(m_gridEntity); for (AZ::Entity* entity : m_actorEntities) { From 10febe2a4baa4309de50ffcebfc09ffacdfc7bc5 Mon Sep 17 00:00:00 2001 From: rhhong Date: Mon, 4 Oct 2021 18:52:11 -0700 Subject: [PATCH 183/226] Move some utility class and settings to a setting file. Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportSettings.cpp | 73 +++++++++++++++++++ .../Tools/EMStudio/AnimViewportSettings.h | 37 ++++++++++ .../Tools/EMStudio/AnimViewportWidget.cpp | 63 ++-------------- .../Code/emotionfx_atom_editor_files.cmake | 2 + 4 files changed, 119 insertions(+), 56 deletions(-) create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.h diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp new file mode 100644 index 0000000000..99bfae91fd --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#include + +namespace EMStudio::ViewportUtil +{ + constexpr AZStd::string_view CameraRotateSmoothnessSetting = "/Amazon/Preferences/Editor/Camera/RotateSmoothness"; + constexpr AZStd::string_view CameraTranslateSmoothnessSetting = "/Amazon/Preferences/Editor/Camera/TranslateSmoothness"; + constexpr AZStd::string_view CameraTranslateSmoothingSetting = "/Amazon/Preferences/Editor/Camera/TranslateSmoothing"; + constexpr AZStd::string_view CameraRotateSmoothingSetting = "/Amazon/Preferences/Editor/Camera/RotateSmoothing"; + + constexpr AZStd::string_view CameraOrbitLookIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitLookId"; + constexpr AZStd::string_view CameraTranslateForwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateForwardId"; + constexpr AZStd::string_view CameraTranslateBackwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateBackwardId"; + constexpr AZStd::string_view CameraTranslateLeftIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateLeftId"; + constexpr AZStd::string_view CameraTranslateRightIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateRightId"; + constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId"; + constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId"; + constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId"; + + AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds() + { + AzFramework::TranslateCameraInputChannelIds translateCameraInputChannelIds; + translateCameraInputChannelIds.m_leftChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); + translateCameraInputChannelIds.m_rightChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); + translateCameraInputChannelIds.m_forwardChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); + translateCameraInputChannelIds.m_backwardChannelId = AzFramework::InputChannelId( + GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); + translateCameraInputChannelIds.m_upChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); + translateCameraInputChannelIds.m_downChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); + translateCameraInputChannelIds.m_boostChannelId = + AzFramework::InputChannelId(GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); + + return translateCameraInputChannelIds; + } + + float CameraRotateSmoothness() + { + return aznumeric_cast(GetRegistry(CameraRotateSmoothnessSetting, 5.0)); + } + + float CameraTranslateSmoothness() + { + return aznumeric_cast(GetRegistry(CameraTranslateSmoothnessSetting, 5.0)); + } + + bool CameraRotateSmoothingEnabled() + { + return GetRegistry(CameraRotateSmoothingSetting, true); + } + + bool CameraTranslateSmoothingEnabled() + { + return GetRegistry(CameraTranslateSmoothingSetting, true); + } + + AzFramework::InputChannelId BuildRotateCameraInputId() + { + AzFramework::InputChannelId inputChannelId( + EMStudio::ViewportUtil::GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); + return inputChannelId; + } +} diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.h new file mode 100644 index 0000000000..5fa14a8aae --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once +#include +#include + +namespace EMStudio::ViewportUtil +{ + template + AZStd::remove_cvref_t GetRegistry(const AZStd::string_view setting, T&& defaultValue) + { + AZStd::remove_cvref_t value = AZStd::forward(defaultValue); + if (const auto* registry = AZ::SettingsRegistry::Get()) + { + T potentialValue; + if (registry->Get(potentialValue, setting)) + { + value = AZStd::move(potentialValue); + } + } + + return value; + } + + float CameraRotateSmoothness(); + float CameraTranslateSmoothness(); + bool CameraRotateSmoothingEnabled(); + bool CameraTranslateSmoothingEnabled(); + + AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds(); + AzFramework::InputChannelId BuildRotateCameraInputId(); +} diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index 81678d477e..2a5006767a 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -14,6 +14,7 @@ #include #include +#include namespace EMStudio { @@ -35,61 +36,11 @@ namespace EMStudio SetupCameraController(); } - template - AZStd::remove_cvref_t GetRegistry(const AZStd::string_view setting, T&& defaultValue) - { - AZStd::remove_cvref_t value = AZStd::forward(defaultValue); - if (const auto* registry = AZ::SettingsRegistry::Get()) - { - T potentialValue; - if (registry->Get(potentialValue, setting)) - { - value = AZStd::move(potentialValue); - } - } - - return value; - } - - // TODO: TranslateCameraInput should have a way to initiate with default channel id setup. - static AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds() - { - constexpr AZStd::string_view CameraTranslateForwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateForwardId"; - constexpr AZStd::string_view CameraTranslateBackwardIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateBackwardId"; - constexpr AZStd::string_view CameraTranslateLeftIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateLeftId"; - constexpr AZStd::string_view CameraTranslateRightIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateRightId"; - constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId"; - constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId"; - constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId"; - - AzFramework::TranslateCameraInputChannelIds translateCameraInputChannelIds; - translateCameraInputChannelIds.m_leftChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); - translateCameraInputChannelIds.m_rightChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); - translateCameraInputChannelIds.m_forwardChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); - translateCameraInputChannelIds.m_backwardChannelId = AzFramework::InputChannelId( - GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); - translateCameraInputChannelIds.m_upChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); - translateCameraInputChannelIds.m_downChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); - translateCameraInputChannelIds.m_boostChannelId = - AzFramework::InputChannelId(GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); - - return translateCameraInputChannelIds; - } - void AnimViewportWidget::SetupCameras() { - constexpr AZStd::string_view CameraOrbitIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitId"; - constexpr AZStd::string_view CameraOrbitLookIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitLookId"; - - m_orbitRotateCamera = AZStd::make_shared( - AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str())); + m_orbitRotateCamera = AZStd::make_shared(EMStudio::ViewportUtil::BuildRotateCameraInputId()); - const auto translateCameraInputChannelIds = BuildTranslateCameraInputChannelIds(); + const auto translateCameraInputChannelIds = EMStudio::ViewportUtil::BuildTranslateCameraInputChannelIds(); m_orbitTranslateCamera = AZStd::make_shared(AzFramework::OrbitTranslation, translateCameraInputChannelIds); m_orbitDollyScrollCamera = AZStd::make_shared(); @@ -116,22 +67,22 @@ namespace EMStudio { cameraProps.m_rotateSmoothnessFn = [] { - return 5.0f; + return EMStudio::ViewportUtil::CameraRotateSmoothness(); }; cameraProps.m_translateSmoothnessFn = [] { - return 5.0f; + return EMStudio::ViewportUtil::CameraTranslateSmoothness(); }; cameraProps.m_rotateSmoothingEnabledFn = [] { - return true; + return EMStudio::ViewportUtil::CameraRotateSmoothingEnabled(); }; cameraProps.m_translateSmoothingEnabledFn = [] { - return true; + return EMStudio::ViewportUtil::CameraTranslateSmoothingEnabled(); }; }); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake index 5c8728a8e9..a88581099f 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/emotionfx_atom_editor_files.cmake @@ -16,4 +16,6 @@ set(FILES Tools/EMStudio/AnimViewportWidget.cpp Tools/EMStudio/AnimViewportRenderer.h Tools/EMStudio/AnimViewportRenderer.cpp + Tools/EMStudio/AnimViewportSettings.h + Tools/EMStudio/AnimViewportSettings.cpp ) From 646369c1b5b27baab176838ba0e4904d55b4ddfa Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 5 Oct 2021 13:03:22 -0700 Subject: [PATCH 184/226] update camera naming and behavior after the merge in Signed-off-by: rhhong --- .../Tools/EMStudio/AnimViewportSettings.cpp | 4 +--- .../Tools/EMStudio/AnimViewportWidget.cpp | 19 ++++++++++++------- .../Code/Tools/EMStudio/AnimViewportWidget.h | 6 +++--- .../Source/RenderPlugin/RenderViewWidget.cpp | 4 ++-- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp index 99bfae91fd..347e077af3 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportSettings.cpp @@ -66,8 +66,6 @@ namespace EMStudio::ViewportUtil AzFramework::InputChannelId BuildRotateCameraInputId() { - AzFramework::InputChannelId inputChannelId( - EMStudio::ViewportUtil::GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); - return inputChannelId; + return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); } } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index 2a5006767a..d3fd719d38 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -38,12 +38,17 @@ namespace EMStudio void AnimViewportWidget::SetupCameras() { - m_orbitRotateCamera = AZStd::make_shared(EMStudio::ViewportUtil::BuildRotateCameraInputId()); + m_pivotRotateCamera = AZStd::make_shared(EMStudio::ViewportUtil::BuildRotateCameraInputId()); const auto translateCameraInputChannelIds = EMStudio::ViewportUtil::BuildTranslateCameraInputChannelIds(); - m_orbitTranslateCamera = - AZStd::make_shared(AzFramework::OrbitTranslation, translateCameraInputChannelIds); - m_orbitDollyScrollCamera = AZStd::make_shared(); + m_pivotTranslateCamera = AZStd::make_shared( + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); + m_pivotTranslateCamera.get()->m_translateSpeedFn = [] + { + return 3.0f; + }; + + m_pivotDollyScrollCamera = AZStd::make_shared(); } void AnimViewportWidget::SetupCameraController() @@ -89,9 +94,9 @@ namespace EMStudio controller->SetCameraListBuilderCallback( [this](AzFramework::Cameras& cameras) { - cameras.AddCamera(m_orbitRotateCamera); - cameras.AddCamera(m_orbitTranslateCamera); - cameras.AddCamera(m_orbitDollyScrollCamera); + cameras.AddCamera(m_pivotRotateCamera); + cameras.AddCamera(m_pivotTranslateCamera); + cameras.AddCamera(m_pivotDollyScrollCamera); }); GetControllerList()->Add(controller); } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 64bf4cd5dd..70b4e1e667 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -26,8 +26,8 @@ namespace EMStudio void SetupCameraController(); AZStd::unique_ptr m_renderer; - AZStd::shared_ptr m_orbitRotateCamera; - AZStd::shared_ptr m_orbitTranslateCamera; - AZStd::shared_ptr m_orbitDollyScrollCamera; + AZStd::shared_ptr m_pivotRotateCamera; + AZStd::shared_ptr m_pivotTranslateCamera; + AZStd::shared_ptr m_pivotDollyScrollCamera; }; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp index 93a6dd3019..fe8fb61f02 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp @@ -155,12 +155,12 @@ namespace EMStudio cameraMenu->addAction("Reset Camera", [this]() { this->OnResetCamera(); }); QAction* showSelectedAction = cameraMenu->addAction("Show Selected", this, &RenderViewWidget::OnShowSelected); - showSelectedAction->setShortcut(Qt::Key_S); + showSelectedAction->setShortcut(QKeySequence(Qt::Key_S + Qt::SHIFT)); GetMainWindow()->GetShortcutManager()->RegisterKeyboardShortcut(showSelectedAction, RenderPlugin::s_renderWindowShortcutGroupName, true); addAction(showSelectedAction); QAction* showEntireSceneAction = cameraMenu->addAction("Show Entire Scene", this, &RenderViewWidget::OnShowEntireScene); - showEntireSceneAction->setShortcut(Qt::Key_A); + showEntireSceneAction->setShortcut(QKeySequence(Qt::Key_A + Qt::SHIFT)); GetMainWindow()->GetShortcutManager()->RegisterKeyboardShortcut(showEntireSceneAction, RenderPlugin::s_renderWindowShortcutGroupName, true); addAction(showEntireSceneAction); From 88970403157ee9df0952d5dbf9ef5dae1ddf8f91 Mon Sep 17 00:00:00 2001 From: rhhong Date: Tue, 5 Oct 2021 18:08:02 -0700 Subject: [PATCH 185/226] Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout Signed-off-by: rhhong --- .../Assets/Editor/Layouts/Character2.layout | Bin 5388 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout diff --git a/Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout b/Gems/EMotionFX/Assets/Editor/Layouts/Character2.layout deleted file mode 100644 index a97581727fce4261825b056591394bf56be2044d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5388 zcmc&&U1%It6h7Ha(^?RV4cHgUDxxAp=HB@Sg`_HJOOh7bDuPhA$(k;jov_(dtkTd2 zt*w+65g`wvAc#VRs?p~@_$FdsguVz3DEOo(;!D=V@4GX1li8Y(hqQCToqOlbIp==o zyXV}Q>@%ZBMuuKEbnK{z^rBIQW+yA!t7u0nDdB#;N96Js7k^rs6T#5POIId;<2{A_ z;JY$MJu4j2kE>EYf6k}+S2Klc_pY3w{$Xp-)myz!v-usJ=YJTx`L{29^Cadf=hFVy zrTcz2INH5C>DTJp=bvSI*3GHydyM|&Z2s=uH>z#KVf~8SW1e4MSy-gM#iecL-rC!K z*R?Ot^7;Oo3yY7FEXWGPnfuzcM3aX1ZjssUY$_cgaN)bGa zB@?yEa5I^mo{{2sP}+|Jr9&^!j<3T4@?kV-PM@qCtu`lXtr;mQA3R5eq4Gm7@}(Fa zhFY!a_{phS11uEBgNu>~a6km1uY4&Y9}XtKByp$Vy$pisvwGj z0_tL@l}vSgJrwZ$pj51*F!J1ZK)G7SfrAf;0XGaB3`6olxn18;d+wt5-4{jr#xOA7 zUjJfXzf<{C+Pv#o!sTf>E;X5wL|RhEwShuv$*fG6yBYMaK%?@%e_9;TNO%|CO7Fwj z6*&DH;|ugIvVB>k+%{`%Yh!9JZ}H?2en7XOASF&i`cS>{gPA5WGo5M6cdOb2{4oBb z7?EQ#EC*yv0=$QOfMB1FB8+`e^bRRsN_&Ky4mP(EVNyzqxV*fIivSMh0C3qD03z@Z zi6<`Z1~BJhPGcN^BRxSu^};ttQQNGmOzP!?>NL>saL5bUpklg+ZRF7)%i(BMlL;hn^`BiU;d* z4F+#mYf#pA3e>%WcBHet$M>M|(!eykj}0@s|F9C6C=TVh%2NHpji`nUx%rvp$cHeu)bC%!qL1D$IHoP5Mg* z`!3OBXJd`_U<)_UWwM_7YE@|&?ivOsqe$qcPcrY Date: Wed, 6 Oct 2021 22:28:18 -0700 Subject: [PATCH 186/226] CR feedback Signed-off-by: rhhong --- .../Source/Editor/EditorSystemComponent.cpp | 2 +- .../Source/Editor/EditorSystemComponent.h | 2 +- .../Tools/EMStudio/AnimViewportRenderer.cpp | 1 - .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 20 +++++++++++-------- .../Code/Tools/EMStudio/AtomRenderPlugin.h | 10 ++++++---- .../Code/EMotionFX/Source/ActorManager.cpp | 3 +-- .../Code/EMotionFX/Source/ActorManager.h | 1 - .../Source/NodeWindow/NodeWindowPlugin.h | 1 + .../Include/Integration/ActorComponentBus.h | 1 - .../Source/Integration/Assets/ActorAsset.h | 2 ++ 10 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp index 64f7f2dd97..edd2f074fe 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.cpp @@ -34,6 +34,6 @@ namespace AZ::EMotionFXAtom void EditorSystemComponent::OnRegisterPlugin() { EMStudio::PluginManager* pluginManager = EMStudio::EMStudioManager::GetInstance()->GetPluginManager(); - pluginManager->RegisterPlugin(new EMStudio::AtomRenderPlugin()); + pluginManager->RegisterPlugin(aznew EMStudio::AtomRenderPlugin()); } } // namespace AZ::EMotionFXAtom diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h index 9da98bcf42..80ff7b0b8d 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/Editor/EditorSystemComponent.h @@ -22,7 +22,7 @@ namespace AZ::EMotionFXAtom static void Reflect(ReflectContext* context); protected: - // AZ::Component + // AZ::Component overrides void Activate() override; void Deactivate() override; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index a75095568f..08f85ab1be 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -59,7 +59,6 @@ namespace EMStudio m_frameworkScene->SetSubsystem(m_entityContext.get()); // Create and register a scene with all available feature processors - // TODO: We don't need every procesors, only register the processor we are going to use. AZ::RPI::SceneDescriptor sceneDesc; m_scene = AZ::RPI::Scene::CreateScene(sceneDesc); m_scene->EnableAllFeatureProcessors(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 948006e2b5..90f6d54466 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -11,11 +11,14 @@ #include #include +#include #include #include namespace EMStudio { + AZ_CLASS_ALLOCATOR_IMPL(AtomRenderPlugin, EMotionFX::EditorAllocator, 0); + AtomRenderPlugin::AtomRenderPlugin() : DockWidgetPlugin() { @@ -74,6 +77,7 @@ namespace EMStudio void AtomRenderPlugin::ReinitRenderer() { m_animViewportWidget->GetAnimViewportRenderer()->Reinit(); + m_animViewportWidget->ResetCameraPosition(); } bool AtomRenderPlugin::Init() @@ -89,10 +93,10 @@ namespace EMStudio verticalLayout->addWidget(m_animViewportWidget); // Register command callbacks. - m_createActorInstanceCallback = new CreateActorInstanceCallback(false); - m_removeActorInstanceCallback = new RemoveActorInstanceCallback(false); - EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("CreateActorInstance", m_createActorInstanceCallback); - EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("RemoveActorInstance", m_removeActorInstanceCallback); + m_importActorCallback = new ImportActorCallback(false); + m_removeActorCallback = new RemoveActorCallback(false); + EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("ImportActor", m_importActorCallback); + EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("RemoveActor", m_removeActorCallback); return true; } @@ -113,23 +117,23 @@ namespace EMStudio return true; } - bool AtomRenderPlugin::CreateActorInstanceCallback::Execute( + bool AtomRenderPlugin::ImportActorCallback::Execute( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } - bool AtomRenderPlugin::CreateActorInstanceCallback::Undo( + bool AtomRenderPlugin::ImportActorCallback::Undo( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } - bool AtomRenderPlugin::RemoveActorInstanceCallback::Execute( + bool AtomRenderPlugin::RemoveActorCallback::Execute( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } - bool AtomRenderPlugin::RemoveActorInstanceCallback::Undo( + bool AtomRenderPlugin::RemoveActorCallback::Undo( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index 475fd34180..e890f9aa4b 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -27,6 +27,8 @@ namespace EMStudio : public DockWidgetPlugin { public: + AZ_CLASS_ALLOCATOR_DECL + enum { CLASS_ID = 0x32b0c04d @@ -49,10 +51,10 @@ namespace EMStudio void ReinitRenderer(); private: - MCORE_DEFINECOMMANDCALLBACK(CreateActorInstanceCallback); - MCORE_DEFINECOMMANDCALLBACK(RemoveActorInstanceCallback); - CreateActorInstanceCallback* m_createActorInstanceCallback; - RemoveActorInstanceCallback* m_removeActorInstanceCallback; + MCORE_DEFINECOMMANDCALLBACK(ImportActorCallback); + MCORE_DEFINECOMMANDCALLBACK(RemoveActorCallback); + ImportActorCallback* m_importActorCallback; + RemoveActorCallback* m_removeActorCallback; QWidget* m_innerWidget; AnimViewportWidget* m_animViewportWidget; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index 0593575623..be3ac10d45 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -31,7 +31,6 @@ namespace EMotionFX SetScheduler(MultiThreadScheduler::Create()); // reserve memory - m_actorAssets.reserve(32); m_actorInstances.reserve(1024); m_rootActorInstances.reserve(1024); } @@ -429,7 +428,7 @@ namespace EMotionFX } - ActorManager::ActorAssetData ActorManager::GetActorAsset(size_t nr) const + ActorAssetData ActorManager::GetActorAsset(size_t nr) const { return m_actorAssets[nr]; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h index e8bbf40661..003153b36c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h @@ -42,7 +42,6 @@ namespace EMotionFX friend class EMotionFXManager; public: - using ActorAssetData = AZ::Data::Asset; static ActorManager* Create(); /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h index 4c530fffdc..59c9f78719 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.h @@ -90,6 +90,7 @@ namespace EMStudio AZStd::unique_ptr m_actorInfo; AZStd::unique_ptr m_nodeInfo; + // Use this flag to defer the reinit function to main thread. bool m_reinitRequested = false; }; } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h index 325191af81..4161b3c77d 100644 --- a/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h +++ b/Gems/EMotionFX/Code/Include/Integration/ActorComponentBus.h @@ -98,7 +98,6 @@ namespace EMotionFX // Use this to alter the actor asset. virtual void SetActorAsset(AZ::Data::Asset actorAsset) = 0; - // virtual AZ::Data::Asset GetAsset() const = 0; static const size_t s_invalidJointIndex = std::numeric_limits::max(); }; diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h index c256fa5283..4b13603ed5 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.h @@ -80,6 +80,8 @@ namespace EMotionFX const char* GetBrowserIcon() const override; }; } // namespace Integration + + using ActorAssetData = AZ::Data::Asset; } // namespace EMotionFX namespace AZ From 265d3792f07b3f557a1739a8421a5aeaff5e6133 Mon Sep 17 00:00:00 2001 From: rhhong Date: Wed, 6 Oct 2021 22:36:19 -0700 Subject: [PATCH 187/226] fix broken build Signed-off-by: rhhong --- .../Code/Tools/EMStudio/AnimViewportRenderer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp index 08f85ab1be..ab54b1fa38 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportRenderer.cpp @@ -163,7 +163,10 @@ namespace EMStudio auto sceneSystem = AzFramework::SceneSystemInterface::Get(); AZ_Assert(sceneSystem, "AtomViewportRenderer was unable to get the scene system during destruction."); bool removeSuccess = sceneSystem->RemoveScene("AnimViewport"); - AZ_Assert(removeSuccess, "AtomViewportRenderer should be removed."); + if (!removeSuccess) + { + AZ_Assert(false, "AtomViewportRenderer should be removed."); + } AZ::RPI::RPISystemInterface::Get()->UnregisterScene(m_scene); m_scene = nullptr; From a448caea7ceca018b045971d60329a3c784b9629 Mon Sep 17 00:00:00 2001 From: rhhong Date: Thu, 7 Oct 2021 08:55:52 -0700 Subject: [PATCH 188/226] fix broken build Signed-off-by: rhhong --- .../EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 90f6d54466..b51a90587f 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -77,7 +77,6 @@ namespace EMStudio void AtomRenderPlugin::ReinitRenderer() { m_animViewportWidget->GetAnimViewportRenderer()->Reinit(); - m_animViewportWidget->ResetCameraPosition(); } bool AtomRenderPlugin::Init() From 4d2f65c4d88fbb1c57a74a06339dce83b8437dc9 Mon Sep 17 00:00:00 2001 From: rhhong Date: Thu, 7 Oct 2021 11:48:09 -0700 Subject: [PATCH 189/226] code review feedback 2 Signed-off-by: rhhong --- .../Code/Tools/EMStudio/AtomRenderPlugin.cpp | 3 +-- .../Code/Tools/EMStudio/AtomRenderPlugin.h | 11 +++++------ Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp | 4 ++-- .../EMStudioSDK/Source/EMStudioManager.h | 2 +- Gems/EMotionFX/Code/Tests/ActorFixture.cpp | 6 +++--- Gems/EMotionFX/Code/Tests/ActorFixture.h | 2 +- 6 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index b51a90587f..91a34e16cd 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -137,5 +137,4 @@ namespace EMStudio { return ReinitAtomRenderPlugin(); } - -} +}// namespace EMStudio diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index e890f9aa4b..1516b45e77 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -53,10 +53,9 @@ namespace EMStudio private: MCORE_DEFINECOMMANDCALLBACK(ImportActorCallback); MCORE_DEFINECOMMANDCALLBACK(RemoveActorCallback); - ImportActorCallback* m_importActorCallback; - RemoveActorCallback* m_removeActorCallback; - - QWidget* m_innerWidget; - AnimViewportWidget* m_animViewportWidget; + ImportActorCallback* m_importActorCallback = nullptr; + RemoveActorCallback* m_removeActorCallback = nullptr; + QWidget* m_innerWidget = nullptr; + AnimViewportWidget* m_animViewportWidget = nullptr; }; -} +}// namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index be3ac10d45..184aac6e2c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -118,9 +118,9 @@ namespace EMotionFX if (FindActorIndex(actorAsset.GetId()) != InvalidIndex) { MCore::LogWarning( - "EMotionFX::ActorManager::RegisterActor() - The actor at location 0x%x has already been registered as actor, most likely " + "EMotionFX::ActorManager::RegisterActor() - The actor %s has already been registered as actor, most likely " "already by the LoadActor of the importer.", - actorAsset->GetActor()); + actorAsset->GetActor()->GetName()); UnlockActors(); return; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h index e7a9397b22..4c3139b77a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h @@ -154,7 +154,7 @@ namespace EMStudio void OnRemoveCommand(size_t historyIndex) override { MCORE_UNUSED(historyIndex); } void OnSetCurrentCommand(size_t index) override { MCORE_UNUSED(index); } }; - EventProcessingCallback* m_eventProcessingCallback; + EventProcessingCallback* m_eventProcessingCallback = nullptr; }; // Shortcuts diff --git a/Gems/EMotionFX/Code/Tests/ActorFixture.cpp b/Gems/EMotionFX/Code/Tests/ActorFixture.cpp index 31c3a0c721..33c26ca11e 100644 --- a/Gems/EMotionFX/Code/Tests/ActorFixture.cpp +++ b/Gems/EMotionFX/Code/Tests/ActorFixture.cpp @@ -28,7 +28,7 @@ namespace EMotionFX AZ::Data::AssetId actorAssetId("{5060227D-B6F4-422E-BF82-41AAC5F228A5}"); m_actorAsset = TestActorAssets::CreateActorAssetAndRegister(actorAssetId); - m_actorInstance = ActorInstance::Create(m_actorAsset->GetActor()); + m_actorInstance = ActorInstance::Create(GetActor()); } void ActorFixture::TearDown() @@ -76,7 +76,7 @@ namespace EMotionFX AZ::ObjectStream::FilterDescriptor loadFilter(nullptr, AZ::ObjectStream::FILTERFLAG_IGNORE_UNKNOWN_CLASSES); SimulatedObjectSetup* setup = AZ::Utils::LoadObjectFromBuffer(data.data(), data.size(), serializeContext, loadFilter); - setup->InitAfterLoad(m_actorAsset->GetActor()); + setup->InitAfterLoad(GetActor()); return setup; } @@ -87,7 +87,7 @@ namespace EMotionFX } - Actor* ActorFixture::GetActor() + Actor* ActorFixture::GetActor() const { return m_actorAsset->GetActor(); } diff --git a/Gems/EMotionFX/Code/Tests/ActorFixture.h b/Gems/EMotionFX/Code/Tests/ActorFixture.h index fad6a2c463..569d55cf47 100644 --- a/Gems/EMotionFX/Code/Tests/ActorFixture.h +++ b/Gems/EMotionFX/Code/Tests/ActorFixture.h @@ -30,7 +30,7 @@ namespace EMotionFX AZStd::vector GetTestJointNames() const; protected: - Actor* GetActor(); + Actor* GetActor() const; AZ::Data::Asset m_actorAsset; ActorInstance* m_actorInstance = nullptr; From 4b92aa34b7edde709ed7c5422043379eb6a42a43 Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Thu, 7 Oct 2021 15:24:51 -0500 Subject: [PATCH 190/226] Updated with PR feedback. Created a common function to calculate the number of worker threads. Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com> --- .../AzCore/Jobs/JobManagerComponent.cpp | 7 +++--- .../AzCore/Task/TaskGraphSystemComponent.cpp | 11 +++----- .../AzCore/AzCore/Threading/ThreadUtils.cpp | 25 +++++++++++++++++++ .../AzCore/AzCore/Threading/ThreadUtils.h | 22 ++++++++++++++++ .../AzCore/AzCore/azcore_files.cmake | 2 ++ 5 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 Code/Framework/AzCore/AzCore/Threading/ThreadUtils.cpp create mode 100644 Code/Framework/AzCore/AzCore/Threading/ThreadUtils.h diff --git a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp index 59f9c5f6a2..6f5ccc93e4 100644 --- a/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Jobs/JobManagerComponent.cpp @@ -20,6 +20,8 @@ #include +#include + AZ_CVAR(float, cl_jobThreadsConcurrencyRatio, 0.6f, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system multiplier on the number of hw threads the machine creates at initialization"); AZ_CVAR(uint32_t, cl_jobThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system number of hardware threads that are reserved for O3DE system threads"); AZ_CVAR(uint32_t, cl_jobThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "Legacy Job system minimum number of worker threads to create after scaling the number of hw threads"); @@ -54,10 +56,7 @@ namespace AZ int numberOfWorkerThreads = m_numberOfWorkerThreads; if (numberOfWorkerThreads <= 0) // spawn default number of threads { - // calc number of job threads = cl_jobThreadsConcurrencyRatio * (number of hardware threads - cl_jobThreadsNumReserved), - // min = cl_jobThreadsMinNumber, - // max = number of hardware threads - cl_jobThreadsNumReserved - uint32_t scaledHardwareThreads = AZ::GetMax( cl_jobThreadsMinNumber, static_cast(AZStd::floor( 0.5f + AZ::GetClamp(cl_jobThreadsConcurrencyRatio, 0.0f, 1.0f) * static_cast(AZStd::thread::hardware_concurrency() - cl_jobThreadsNumReserved)))); + uint32_t scaledHardwareThreads = Threading::CalcNumWorkerThreads(cl_jobThreadsConcurrencyRatio, cl_jobThreadsMinNumber, cl_jobThreadsNumReserved); numberOfWorkerThreads = AZ::GetMin(static_cast(desc.m_workerThreads.capacity()), scaledHardwareThreads); #if (AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS) numberOfWorkerThreads = AZ::GetMin(numberOfWorkerThreads, AZ_TRAIT_MAX_JOB_MANAGER_WORKER_THREADS); diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp index 5ae0fb0394..56b56e96a1 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraphSystemComponent.cpp @@ -12,11 +12,12 @@ #include #include #include +#include // Create a cvar as a central location for experimentation with switching from the Job system to TaskGraph system. AZ_CVAR(bool, cl_activateTaskGraph, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Flag clients of TaskGraph to switch between jobs/taskgraph (Note does not disable task graph system)"); AZ_CVAR(float, cl_taskGraphThreadsConcurrencyRatio, 1.0f, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph calculate the number of worker threads to spawn by scaling the number of hw threads, value is clamped between 0.0f and 1.0f"); -AZ_CVAR(uint32_t, cl_taskGraphThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph number of hardware threads that are reserved for O3DE system threads"); +AZ_CVAR(uint32_t, cl_taskGraphThreadsNumReserved, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph number of hardware threads that are reserved for O3DE system threads. Value is clamped between 0 and the number of logical cores in the system"); AZ_CVAR(uint32_t, cl_taskGraphThreadsMinNumber, 2, nullptr, AZ::ConsoleFunctorFlags::Null, "TaskGraph minimum number of worker threads to create after scaling the number of hw threads"); static constexpr uint32_t TaskExecutorServiceCrc = AZ_CRC_CE("TaskExecutorService"); @@ -29,13 +30,9 @@ namespace AZ if (Interface::Get() == nullptr) { - // calc number of worker threads = cl_taskGraphThreadsConcurrencyRatio * (number of hardware threads - cl_taskGraphThreadsNumReserved), - // min = cl_taskGraphThreadsMinNumber, - // max = number of hardware threads - cl_taskGraphThreadsNumReserved - uint32_t scaledHardwareThreads = AZ::GetMax( cl_taskGraphThreadsMinNumber, static_cast(AZStd::floor( 0.5f + AZ::GetClamp(cl_taskGraphThreadsConcurrencyRatio, 0.0f, 1.0f) * static_cast(AZStd::thread::hardware_concurrency() - cl_taskGraphThreadsNumReserved)))); - m_taskExecutor = aznew TaskExecutor(scaledHardwareThreads); + Interface::Register(this); // small window that another thread can try to use taskgraph between this line and the set instance. + m_taskExecutor = aznew TaskExecutor(Threading::CalcNumWorkerThreads(cl_taskGraphThreadsConcurrencyRatio, cl_taskGraphThreadsMinNumber, cl_taskGraphThreadsNumReserved)); TaskExecutor::SetInstance(m_taskExecutor); - Interface::Register(this); } } diff --git a/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.cpp b/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.cpp new file mode 100644 index 0000000000..93eba9cc3f --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +namespace AZ::Threading +{ + uint32_t CalcNumWorkerThreads(float workerThreadsRatio, uint32_t minNumWorkerThreads, uint32_t reservedNumThreads) + { + const uint32_t maxHardwareThreads = AZStd::thread::hardware_concurrency(); + const uint32_t numReservedThreads = AZ::GetMin(reservedNumThreads, maxHardwareThreads); // protect against num reserved being bigger than the number of hw threads + const uint32_t maxWorkerThreads = maxHardwareThreads - numReservedThreads; + const float requestedWorkerThreads = AZ::GetClamp(workerThreadsRatio, 0.0f, 1.0f) * static_cast(maxWorkerThreads); + const uint32_t requestedWorkerThreadsRounded = AZStd::lround(requestedWorkerThreads); + const uint32_t numWorkerThreads = AZ::GetMax(minNumWorkerThreads, requestedWorkerThreadsRounded); + return numWorkerThreads; + } +}; diff --git a/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.h b/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.h new file mode 100644 index 0000000000..505d900289 --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Threading/ThreadUtils.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AZ::Threading +{ + //! Calculates the number of worker threads a system should use based on the number of hardware threads a device has. + //! result = max (minNumWorkerThreads, workerThreadsRatio * (num_hardware_threads - reservedNumThreads)) + //! @param workerThreadsRatio scale applied to the calculated maximum number of threads available after reserved threads have been accounted for. Clamped between 0 and 1. + //! @param minNumWorkerThreads minimum value that will be returned. Value is unclamped and can be more than num_hardware_threads. + //! @param reservedNumThreads number of hardware threads to reserve for O3DE system threads. Value clamped to num_hardware_threads. + //! @return number of worker threads for the calling system to allocate + uint32_t CalcNumWorkerThreads(float workerThreadsRatio, uint32_t minNumWorkerThreads, uint32_t reservedNumThreads); +}; diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index 14579cbf33..010c748402 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -639,6 +639,8 @@ set(FILES Threading/ThreadSafeDeque.inl Threading/ThreadSafeObject.h Threading/ThreadSafeObject.inl + Threading/ThreadUtils.h + Threading/ThreadUtils.cpp Time/ITime.h Time/TimeSystemComponent.cpp Time/TimeSystemComponent.h From 38efd581738e7a8789734f6122cff1a3e2c93496 Mon Sep 17 00:00:00 2001 From: rhhong Date: Thu, 7 Oct 2021 14:54:30 -0700 Subject: [PATCH 191/226] Fix merging issue with camera input Signed-off-by: rhhong --- .../Code/Tools/EMStudio/AnimViewportWidget.cpp | 16 ++++++++-------- .../Code/Tools/EMStudio/AnimViewportWidget.h | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp index d3fd719d38..6a6c9df901 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.cpp @@ -38,17 +38,17 @@ namespace EMStudio void AnimViewportWidget::SetupCameras() { - m_pivotRotateCamera = AZStd::make_shared(EMStudio::ViewportUtil::BuildRotateCameraInputId()); + m_rotateCamera = AZStd::make_shared(EMStudio::ViewportUtil::BuildRotateCameraInputId()); const auto translateCameraInputChannelIds = EMStudio::ViewportUtil::BuildTranslateCameraInputChannelIds(); - m_pivotTranslateCamera = AZStd::make_shared( - translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivot); - m_pivotTranslateCamera.get()->m_translateSpeedFn = [] + m_translateCamera = AZStd::make_shared( + translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivotLook); + m_translateCamera.get()->m_translateSpeedFn = [] { return 3.0f; }; - m_pivotDollyScrollCamera = AZStd::make_shared(); + m_orbitDollyScrollCamera = AZStd::make_shared(); } void AnimViewportWidget::SetupCameraController() @@ -94,9 +94,9 @@ namespace EMStudio controller->SetCameraListBuilderCallback( [this](AzFramework::Cameras& cameras) { - cameras.AddCamera(m_pivotRotateCamera); - cameras.AddCamera(m_pivotTranslateCamera); - cameras.AddCamera(m_pivotDollyScrollCamera); + cameras.AddCamera(m_rotateCamera); + cameras.AddCamera(m_translateCamera); + cameras.AddCamera(m_orbitDollyScrollCamera); }); GetControllerList()->Add(controller); } diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h index 70b4e1e667..7c2e085f84 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportWidget.h @@ -26,8 +26,8 @@ namespace EMStudio void SetupCameraController(); AZStd::unique_ptr m_renderer; - AZStd::shared_ptr m_pivotRotateCamera; - AZStd::shared_ptr m_pivotTranslateCamera; - AZStd::shared_ptr m_pivotDollyScrollCamera; + AZStd::shared_ptr m_rotateCamera; + AZStd::shared_ptr m_translateCamera; + AZStd::shared_ptr m_orbitDollyScrollCamera; }; } From 437a4d2d63c2af67ba9148b09341e9a0c950bec0 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 7 Oct 2021 17:38:54 -0500 Subject: [PATCH 192/226] Updated engine template unit tests. Signed-off-by: Chris Galvan --- .../o3de/tests/unit_test_engine_template.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/o3de/tests/unit_test_engine_template.py b/scripts/o3de/tests/unit_test_engine_template.py index 16ac24d74c..ed1c8258d3 100755 --- a/scripts/o3de/tests/unit_test_engine_template.py +++ b/scripts/o3de/tests/unit_test_engine_template.py @@ -31,17 +31,17 @@ TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE = """ #include #include -namespace ${Name} +namespace ${SanitizedCppName} { - class ${Name}Requests + class ${SanitizedCppName}Requests { public: - AZ_RTTI(${Name}Requests, "{${Random_Uuid}}"); - virtual ~${Name}Requests() = default; + AZ_RTTI(${SanitizedCppName}Requests, "{${Random_Uuid}}"); + virtual ~${SanitizedCppName}Requests() = default; // Put your public methods here }; - class ${Name}BusTraits + class ${SanitizedCppName}BusTraits : public AZ::EBusTraits { public: @@ -52,31 +52,31 @@ namespace ${Name} ////////////////////////////////////////////////////////////////////////// }; - using ${Name}RequestBus = AZ::EBus<${Name}Requests, ${Name}BusTraits>; - using ${Name}Interface = AZ::Interface<${Name}Requests>; + using ${SanitizedCppName}RequestBus = AZ::EBus<${SanitizedCppName}Requests, ${SanitizedCppName}BusTraits>; + using ${SanitizedCppName}Interface = AZ::Interface<${SanitizedCppName}Requests>; -} // namespace ${Name} +} // namespace ${SanitizedCppName} """ TEST_TEMPLATED_CONTENT_WITH_LICENSE = CPP_LICENSE_TEXT + TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE TEST_CONCRETE_TESTTEMPLATE_CONTENT_WITHOUT_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'Name': "TestTemplate"}) + TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'SanitizedCppName': "TestTemplate"}) TEST_CONCRETE_TESTTEMPLATE_CONTENT_WITH_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'Name': "TestTemplate"}) + TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'SanitizedCppName': "TestTemplate"}) TEST_CONCRETE_TESTPROJECT_TEMPLATE_CONTENT_WITHOUT_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'Name': "TestProject"}) + TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'SanitizedCppName': "TestProject"}) TEST_CONCRETE_TESTPROJECT_TEMPLATE_CONTENT_WITH_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'Name': "TestProject"}) + TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'SanitizedCppName': "TestProject"}) TEST_CONCRETE_TESTGEM_TEMPLATE_CONTENT_WITHOUT_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'Name': "TestGem"}) + TEST_TEMPLATED_CONTENT_WITHOUT_LICENSE).safe_substitute({'SanitizedCppName': "TestGem"}) TEST_CONCRETE_TESTGEM_TEMPLATE_CONTENT_WITH_LICENSE = string.Template( - TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'Name': "TestGem"}) + TEST_TEMPLATED_CONTENT_WITH_LICENSE).safe_substitute({'SanitizedCppName': "TestGem"}) TEST_TEMPLATE_JSON_CONTENTS = """\ { From e64b9d3536ccdbb9bcbbda8228522c940c91784b Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Thu, 7 Oct 2021 16:23:13 -0700 Subject: [PATCH 193/226] ATOM-16320 Remove PVRTC and ETC compressor (#4557) Signed-off-by: Qing Tao --- .../AzToolsFramework/Tests/LogLines.cpp | 2 +- .../ImageProcessingAtom/Code/CMakeLists.txt | 3 - .../Atom/ImageProcessing/PixelFormats.h | 12 +- .../Source/BuilderSettings/PresetSettings.cpp | 7 - .../Code/Source/Compressors/Compressor.cpp | 22 - .../Code/Source/Compressors/ETC2.cpp | 233 --------- .../Code/Source/Compressors/ETC2.h | 31 -- .../Code/Source/Compressors/PVRTC.cpp | 338 ------------- .../Code/Source/Compressors/PVRTC.h | 30 -- .../Code/Source/Editor/PresetInfoPopup.cpp | 1 - .../Code/Source/ImageLoader/DdsLoader.cpp | 443 +----------------- .../Code/Source/ImageLoader/ImageLoaders.h | 5 - .../Source/Platform/Mac/platform_mac.cmake | 5 - .../Code/Source/Processing/DDSHeader.h | 14 +- .../Source/Processing/PixelFormatInfo.cpp | 58 --- .../Code/Source/Processing/PixelFormatInfo.h | 8 - .../Code/Source/Processing/Utils.cpp | 42 -- .../Code/Tests/ImageProcessing_Test.cpp | 142 +----- .../Code/imageprocessing_files.cmake | 4 - .../Code/Source/Editor/AtlasBuilderWorker.cpp | 4 +- .../Linux/BuiltInPackages_linux.cmake | 2 - .../Platform/Mac/BuiltInPackages_mac.cmake | 2 - .../Windows/BuiltInPackages_windows.cmake | 2 - 23 files changed, 12 insertions(+), 1398 deletions(-) delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h diff --git a/Code/Framework/AzToolsFramework/Tests/LogLines.cpp b/Code/Framework/AzToolsFramework/Tests/LogLines.cpp index 5af6513720..1c69e855ee 100644 --- a/Code/Framework/AzToolsFramework/Tests/LogLines.cpp +++ b/Code/Framework/AzToolsFramework/Tests/LogLines.cpp @@ -25,7 +25,7 @@ namespace UnitTest R"X(Executing RC.EXE: '"E:\lyengine\dev\windows\bin\profile\rc.exe" "E:/Directory/File.tga")X", R"X(Executing RC.EXE with working directory : '')X", R"X(ResourceCompiler 64 - bit DEBUG)X", - R"X(Platform support : PC, PowerVR, etc2Comp)X", + R"X(Platform support : PC, PowerVR)X", R"X(Version 1.1.8.6 Nov 5 2018 13 : 28 : 28)X" }; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt b/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt index 1463124e27..836f173632 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt @@ -63,13 +63,10 @@ ly_add_target( 3rdParty::Qt::Widgets 3rdParty::Qt::Gui 3rdParty::astc-encoder - 3rdParty::etc2comp - 3rdParty::PVRTexTool 3rdParty::squish-ccr 3rdParty::tiff 3rdParty::ISPCTexComp 3rdParty::ilmbase - Legacy::CryCommon AZ::AzFramework AZ::AzToolsFramework AZ::AzQtComponents diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/PixelFormats.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/PixelFormats.h index fbde69abb2..4da996dbde 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/PixelFormats.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Include/Atom/ImageProcessing/PixelFormats.h @@ -39,16 +39,7 @@ namespace ImageProcessingAtom ePixelFormat_ASTC_10x8, ePixelFormat_ASTC_10x10, ePixelFormat_ASTC_12x10, - ePixelFormat_ASTC_12x12, - //Formats supported by PowerVR GPU. Mainly for ios devices. - ePixelFormat_PVRTC2, //2bpp - ePixelFormat_PVRTC4, //4bpp - //formats for opengl and opengles 3.0 (android devices) - ePixelFormat_EAC_R11, //one channel unsigned data - ePixelFormat_EAC_RG11, //two channel unsigned data - ePixelFormat_ETC2, //Compresses RGB888 data, it taks 4x4 groups of pixel data and compresses each into a 64-bit - ePixelFormat_ETC2a1, //Compresses RGB888A1 data, it taks 4x4 groups of pixel data and compresses each into a 64-bit - ePixelFormat_ETC2a, //Compresses RGBA8888 data with full alpha support + ePixelFormat_ASTC_12x12, // Standardized Compressed DXGI Formats (DX10+) // Data in these compressed formats is hardware decodable on all DX10 chips, and manageable with the DX10-API. @@ -88,7 +79,6 @@ namespace ImageProcessingAtom }; bool IsASTCFormat(EPixelFormat fmt); - bool IsETCFormat(EPixelFormat fmt); } // namespace ImageProcessingAtom namespace AZ diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.cpp index 7ffabc45a9..3812b86026 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.cpp @@ -109,13 +109,6 @@ namespace ImageProcessingAtom ->Value("ASTC_10x10", EPixelFormat::ePixelFormat_ASTC_10x10) ->Value("ASTC_12x10", EPixelFormat::ePixelFormat_ASTC_12x10) ->Value("ASTC_12x12", EPixelFormat::ePixelFormat_ASTC_12x12) - ->Value("PVRTC2", EPixelFormat::ePixelFormat_PVRTC2) - ->Value("PVRTC4", EPixelFormat::ePixelFormat_PVRTC4) - ->Value("EAC_R11", EPixelFormat::ePixelFormat_EAC_R11) - ->Value("EAC_RG11", EPixelFormat::ePixelFormat_EAC_RG11) - ->Value("ETC2", EPixelFormat::ePixelFormat_ETC2) - ->Value("ETC2a1", EPixelFormat::ePixelFormat_ETC2a1) - ->Value("ETC2a", EPixelFormat::ePixelFormat_ETC2a) ->Value("BC1", EPixelFormat::ePixelFormat_BC1) ->Value("BC1a", EPixelFormat::ePixelFormat_BC1a) ->Value("BC3", EPixelFormat::ePixelFormat_BC3) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp index 1dd18faaf3..ac5340eaab 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/Compressor.cpp @@ -10,8 +10,6 @@ #include #include #include -#include -#include #include namespace ImageProcessingAtom @@ -42,26 +40,6 @@ namespace ImageProcessingAtom } } - // Both ETC2Compressor and PVRTCCompressor can process ETC formats - // According to Mobile team, Etc2Com is faster than PVRTexLib, so we check with ETC2Compressor before PVRTCCompressor - // Note: with the test I have done, I found out it cost similar time for both Etc2Com and PVRTexLib to compress - // a 2048x2048 test texture to EAC_R11 and EAC_RG11. It was around 7 minutes for EAC_R11 and 14 minutes for EAC_RG11 - if (ETC2Compressor::IsCompressedPixelFormatSupported(fmt)) - { - if (isCompressing || (!isCompressing && ETC2Compressor::DoesSupportDecompress(fmt))) - { - return ICompressorPtr(new ETC2Compressor()); - } - } - - if (PVRTCCompressor::IsCompressedPixelFormatSupported(fmt)) - { - if (isCompressing || (!isCompressing && PVRTCCompressor::DoesSupportDecompress(fmt))) - { - return ICompressorPtr(new PVRTCCompressor()); - } - } - return nullptr; } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp deleted file mode 100644 index 73108d5502..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.cpp +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace ImageProcessingAtom -{ - //limited to 1 thread because AP requires so. We may change to n when AP allocate n thread to a job in the furture - static const int MAX_COMP_JOBS = 1; - static const int MIN_COMP_JOBS = 1; - static const float ETC_LOW_EFFORT_LEVEL = 25.0f; - static const float ETC_MED_EFFORT_LEVEL = 40.0f; - static const float ETC_HIGH_EFFORT_LEVEL = 80.0f; - - //Grab the Etc2Comp specific pixel format enum - static Etc::Image::Format FindEtc2PixelFormat(EPixelFormat fmt) - { - switch (fmt) - { - case ePixelFormat_EAC_RG11: - return Etc::Image::Format::RG11; - case ePixelFormat_EAC_R11: - return Etc::Image::Format::R11; - case ePixelFormat_ETC2: - return Etc::Image::Format::RGB8; - case ePixelFormat_ETC2a1: - return Etc::Image::Format::RGB8A1; - case ePixelFormat_ETC2a: - return Etc::Image::Format::RGBA8; - default: - return Etc::Image::Format::FORMATS; - } - } - - //Get the errmetric required for the compression - static Etc::ErrorMetric FindErrMetric(Etc::Image::Format fmt) - { - switch (fmt) - { - case Etc::Image::Format::RG11: - return Etc::ErrorMetric::NORMALXYZ; - case Etc::Image::Format::R11: - return Etc::ErrorMetric::NUMERIC; - case Etc::Image::Format::RGB8: - return Etc::ErrorMetric::RGBX; - case Etc::Image::Format::RGBA8: - case Etc::Image::Format::RGB8A1: - return Etc::ErrorMetric::RGBA; - default: - return Etc::ErrorMetric::ERROR_METRICS; - } - } - - //Convert to sRGB format - static Etc::Image::Format FindGammaEtc2PixelFormat(Etc::Image::Format fmt) - { - switch (fmt) - { - case Etc::Image::Format::RGB8: - return Etc::Image::Format::SRGB8; - case Etc::Image::Format::RGBA8: - return Etc::Image::Format::SRGBA8; - case Etc::Image::Format::RGB8A1: - return Etc::Image::Format::SRGB8A1; - default: - return Etc::Image::Format::FORMATS; - } - } - - bool ETC2Compressor::IsCompressedPixelFormatSupported(EPixelFormat fmt) - { - return (FindEtc2PixelFormat(fmt) != Etc::Image::Format::FORMATS); - } - - bool ETC2Compressor::IsUncompressedPixelFormatSupported(EPixelFormat fmt) - { - //for uncompress format - if (fmt == ePixelFormat_R8G8B8A8) - { - return true; - } - return false; - } - - EPixelFormat ETC2Compressor::GetSuggestedUncompressedFormat([[maybe_unused]] EPixelFormat compressedfmt, [[maybe_unused]] EPixelFormat uncompressedfmt) const - { - return ePixelFormat_R8G8B8A8; - } - - bool ETC2Compressor::DoesSupportDecompress([[maybe_unused]] EPixelFormat fmtDst) - { - return false; - } - - ColorSpace ETC2Compressor::GetSupportedColorSpace([[maybe_unused]] EPixelFormat compressFormat) const - { - return ColorSpace::autoSelect; - } - - const char* ETC2Compressor::GetName() const - { - return "ETC2Compressor"; - } - - IImageObjectPtr ETC2Compressor::CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, - const CompressOption* compressOption) const - { - //validate input - EPixelFormat fmtSrc = srcImage->GetPixelFormat(); - - //src format need to be uncompressed and dst format need to compressed. - if (!IsUncompressedPixelFormatSupported(fmtSrc) || !IsCompressedPixelFormatSupported(fmtDst)) - { - return nullptr; - } - - IImageObjectPtr dstImage(srcImage->AllocateImage(fmtDst)); - - //determinate compression quality - ICompressor::EQuality quality = ICompressor::eQuality_Normal; - //get setting from compression option - if (compressOption) - { - quality = compressOption->compressQuality; - } - - float qualityEffort = 0.0f; - switch (quality) - { - case eQuality_Preview: - case eQuality_Fast: - { - qualityEffort = ETC_LOW_EFFORT_LEVEL; - break; - } - case eQuality_Normal: - { - qualityEffort = ETC_MED_EFFORT_LEVEL; - break; - } - default: - { - qualityEffort = ETC_HIGH_EFFORT_LEVEL; - } - } - - Etc::Image::Format dstEtc2Format = FindEtc2PixelFormat(fmtDst); - if (srcImage->GetImageFlags() & EIF_SRGBRead) - { - dstEtc2Format = FindGammaEtc2PixelFormat(dstEtc2Format); - } - - //use to read pixel data from src image - IPixelOperationPtr pixelOp = CreatePixelOperation(fmtSrc); - //get count of bytes per pixel for images - AZ::u32 pixelBytes = CPixelFormats::GetInstance().GetPixelFormatInfo(fmtSrc)->bitsPerBlock / 8; - - const AZ::u32 mipCount = dstImage->GetMipCount(); - for (AZ::u32 mip = 0; mip < mipCount; ++mip) - { - const AZ::u32 width = srcImage->GetWidth(mip); - const AZ::u32 height = srcImage->GetHeight(mip); - - // Prepare source data - AZ::u8* srcMem; - AZ::u32 srcPitch; - srcImage->GetImagePointer(mip, srcMem, srcPitch); - const AZ::u32 pixelCount = srcImage->GetPixelCount(mip); - - Etc::ColorFloatRGBA* rgbaPixels = new Etc::ColorFloatRGBA[pixelCount]; - Etc::ColorFloatRGBA* rgbaPixelPtr = rgbaPixels; - float r, g, b, a; - for (AZ::u32 pixelIdx = 0; pixelIdx < pixelCount; pixelIdx++, srcMem += pixelBytes, rgbaPixelPtr++) - { - pixelOp->GetRGBA(srcMem, r, g, b, a); - rgbaPixelPtr->fA = a; - rgbaPixelPtr->fR = r; - rgbaPixelPtr->fG = g; - rgbaPixelPtr->fB = b; - } - - //Call into etc2Comp lib to compress. https://medium.com/@duhroach/building-a-blazing-fast-etc2-compressor-307f3e9aad99 - Etc::ErrorMetric errMetric = FindErrMetric(dstEtc2Format); - unsigned char* paucEncodingBits; - unsigned int uiEncodingBitsBytes; - unsigned int uiExtendedWidth; - unsigned int uiExtendedHeight; - int iEncodingTime_ms; - - Etc::Encode(reinterpret_cast(rgbaPixels), - width, height, - dstEtc2Format, - errMetric, - qualityEffort, - MIN_COMP_JOBS, - MAX_COMP_JOBS, - &paucEncodingBits, &uiEncodingBitsBytes, - &uiExtendedWidth, &uiExtendedHeight, - &iEncodingTime_ms); - - AZ::u8* dstMem; - AZ::u32 dstPitch; - dstImage->GetImagePointer(mip, dstMem, dstPitch); - - memcpy(dstMem, paucEncodingBits, uiEncodingBitsBytes); - delete[] rgbaPixels; - } - - return dstImage; - } - - IImageObjectPtr ETC2Compressor::DecompressImage(IImageObjectPtr srcImage, [[maybe_unused]] EPixelFormat fmtDst) const - { - //etc2Comp doesn't support decompression - //Since PVRTexLib support ETC formats too. It may take over the decompression. - return nullptr; - } -} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h deleted file mode 100644 index 9ab5a164a5..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/ETC2.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include - -namespace ImageProcessingAtom -{ - class ETC2Compressor - : public ICompressor - { - public: - static bool IsCompressedPixelFormatSupported(EPixelFormat fmt); - static bool IsUncompressedPixelFormatSupported(EPixelFormat fmt); - static bool DoesSupportDecompress(EPixelFormat fmtDst); - - IImageObjectPtr CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, const CompressOption* compressOption) const override; - IImageObjectPtr DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const override; - - EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const override; - ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; - const char* GetName() const final; - - }; -} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp deleted file mode 100644 index f3a630e8c1..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include -#include -#include - -#include -#include - - -namespace ImageProcessingAtom -{ - // Note: PVRTexLib supports ETC formats, PVRTC formats and BC formats - // We haven't tested the performace to compress BC formats compare to CTSquisher - // For PVRTC formats, we only added PVRTC 1 support for now - // The compression for ePVRTPF_EAC_R11 and ePVRTPF_EAC_RG11 are very slow. It takes 7 and 14 minutes for a 2048x2048 texture. - EPVRTPixelFormat FindPvrPixelFormat(EPixelFormat fmt) - { - switch (fmt) - { - case ePixelFormat_PVRTC2: - return ePVRTPF_PVRTCI_2bpp_RGBA; - case ePixelFormat_PVRTC4: - return ePVRTPF_PVRTCI_4bpp_RGBA; - case ePixelFormat_EAC_R11: - return ePVRTPF_EAC_R11; - case ePixelFormat_EAC_RG11: - return ePVRTPF_EAC_RG11; - case ePixelFormat_ETC2: - return ePVRTPF_ETC2_RGB; - case ePixelFormat_ETC2a1: - return ePVRTPF_ETC2_RGB_A1; - case ePixelFormat_ETC2a: - return ePVRTPF_ETC2_RGBA; - default: - return ePVRTPF_NumCompressedPFs; - } - } - - bool PVRTCCompressor::IsCompressedPixelFormatSupported(EPixelFormat fmt) - { - return (FindPvrPixelFormat(fmt) != ePVRTPF_NumCompressedPFs); - } - - bool PVRTCCompressor::IsUncompressedPixelFormatSupported(EPixelFormat fmt) - { - //for uncompress format - if (fmt == ePixelFormat_R8G8B8A8) - { - return true; - } - return false; - } - - EPixelFormat PVRTCCompressor::GetSuggestedUncompressedFormat([[maybe_unused]] EPixelFormat compressedfmt, [[maybe_unused]] EPixelFormat uncompressedfmt) const - { - return ePixelFormat_R8G8B8A8; - } - - ColorSpace PVRTCCompressor::GetSupportedColorSpace([[maybe_unused]] EPixelFormat compressFormat) const - { - return ColorSpace::autoSelect; - } - - const char* PVRTCCompressor::GetName() const - { - return "PVRTCCompressor"; - } - - bool PVRTCCompressor::DoesSupportDecompress([[maybe_unused]] EPixelFormat fmtDst) - { - return true; - } - - IImageObjectPtr PVRTCCompressor::CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, - const CompressOption* compressOption) const - { - //validate input - EPixelFormat fmtSrc = srcImage->GetPixelFormat(); - - //src format need to be uncompressed and dst format need to compressed. - if (!IsUncompressedPixelFormatSupported(fmtSrc) || !IsCompressedPixelFormatSupported(fmtDst)) - { - return nullptr; - } - - IImageObjectPtr dstImage(srcImage->AllocateImage(fmtDst)); - - //determinate compression quality - pvrtexture::ECompressorQuality internalQuality = pvrtexture::eETCFast; - ICompressor::EQuality quality = ICompressor::eQuality_Normal; - AZ::Vector3 uniformWeights = AZ::Vector3(0.3333f, 0.3334f, 0.3333f); - AZ::Vector3 weights = uniformWeights; - bool isUniform = true; - //get setting from compression option - if (compressOption) - { - quality = compressOption->compressQuality; - weights = compressOption->rgbWeight; - isUniform = (weights == uniformWeights); - } - - if (IsETCFormat(fmtDst)) - { - if ((quality <= eQuality_Normal) && isUniform) - { - internalQuality = pvrtexture::eETCFast; - } - else if (quality <= eQuality_Normal) - { - internalQuality = pvrtexture::eETCNormal; - } - else if (isUniform) - { - internalQuality = pvrtexture::eETCSlow; - } - else - { - internalQuality = pvrtexture::eETCSlow; - } - } - else - { - if (quality == eQuality_Preview) - { - internalQuality = pvrtexture::ePVRTCFastest; - } - else if (quality == eQuality_Fast) - { - internalQuality = pvrtexture::ePVRTCFast; - } - else if (quality == eQuality_Normal) - { - internalQuality = pvrtexture::ePVRTCNormal; - } - else - { - internalQuality = pvrtexture::ePVRTCHigh; - } - } - - // setup color space - EPVRTColourSpace cspace = ePVRTCSpacelRGB; - if (srcImage->GetImageFlags() & EIF_SRGBRead) - { - cspace = ePVRTCSpacesRGB; - } - - //setup src texture for compression - const pvrtexture::PixelType srcPixelType('r', 'g', 'b', 'a', 8, 8, 8, 8); - const AZ::u32 dstMips = dstImage->GetMipCount(); - for (AZ::u32 mip = 0; mip < dstMips; ++mip) - { - const AZ::u32 width = srcImage->GetWidth(mip); - const AZ::u32 height = srcImage->GetHeight(mip); - - // Prepare source data - AZ::u8* srcMem; - uint32 srcPitch; - srcImage->GetImagePointer(mip, srcMem, srcPitch); - - const pvrtexture::CPVRTextureHeader srcHeader( - srcPixelType.PixelTypeID, // AZ::u64 u64PixelFormat, - width, // uint32 u32Height=1, - height, // uint32 u32Width=1, - 1, // uint32 u32Depth=1, - 1, // uint32 u32NumMipMaps=1, - 1, // uint32 u32NumArrayMembers=1, - 1, // uint32 u32NumFaces=1, - cspace, // EPVRTColourSpace eColourSpace=ePVRTCSpacelRGB, - ePVRTVarTypeUnsignedByteNorm, // EPVRTVariableType eChannelType=ePVRTVarTypeUnsignedByteNorm, - false); // bool bPreMultiplied=false); - - pvrtexture::CPVRTexture compressTexture(srcHeader, srcMem); - - //compressing - bool isSuccess = false; -#if AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - try -#endif // AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - { - isSuccess = pvrtexture::Transcode( - compressTexture, - pvrtexture::PixelType(FindPvrPixelFormat(fmtDst)), - ePVRTVarTypeUnsignedByteNorm, - cspace, - internalQuality); - } -#if AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - catch (...) - { - AZ_Error("Image Processing", false, "Unknown exception in PVRTexLib"); - return nullptr; - } -#endif // AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - - if (!isSuccess) - { - AZ_Error("Image Processing", false, "Failed to compress image with PVRTexLib."); - return nullptr; - } - - // Getting compressed data - const void* const compressedData = compressTexture.getDataPtr(); - if (!compressedData) - { - AZ_Error("Image Processing", false, "Failed to obtain compressed image data by using PVRTexLib"); - return nullptr; - } - - const AZ::u32 compressedDataSize = compressTexture.getDataSize(); - if (dstImage->GetMipBufSize(mip) != compressedDataSize) - { - AZ_Error("Image Processing", false, "Compressed image data size mismatch while using PVRTexLib"); - return nullptr; - } - - //save compressed data to dst image - AZ::u8* dstMem; - AZ::u32 dstPitch; - dstImage->GetImagePointer(mip, dstMem, dstPitch); - memcpy(dstMem, compressedData, compressedDataSize); - } - - return dstImage; - } - - IImageObjectPtr PVRTCCompressor::DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const - { - //validate input - EPixelFormat fmtSrc = srcImage->GetPixelFormat(); //compressed - - if (!IsCompressedPixelFormatSupported(fmtSrc) || !IsUncompressedPixelFormatSupported(fmtDst)) - { - return nullptr; - } - - EPVRTColourSpace colorSpace = ePVRTCSpacelRGB; - if (srcImage->GetImageFlags() & EIF_SRGBRead) - { - colorSpace = ePVRTCSpacesRGB; - } - - IImageObjectPtr dstImage(srcImage->AllocateImage(fmtDst)); - - const AZ::u32 mipCount = dstImage->GetMipCount(); - for (AZ::u32 mip = 0; mip < mipCount; ++mip) - { - const AZ::u32 width = srcImage->GetWidth(mip); - const AZ::u32 height = srcImage->GetHeight(mip); - - // Preparing source compressed data - const pvrtexture::CPVRTextureHeader compressedHeader( - FindPvrPixelFormat(fmtSrc), // AZ::u64 u64PixelFormat, - width, // uint32 u32Height=1, - height, // uint32 u32Width=1, - 1, // uint32 u32Depth=1, - 1, // uint32 u32NumMipMaps=1, - 1, // uint32 u32NumArrayMembers=1, - 1, // uint32 u32NumFaces=1, - colorSpace, // EPVRTColourSpace eColourSpace=ePVRTCSpacelRGB, - ePVRTVarTypeUnsignedByteNorm, // EPVRTVariableType eChannelType=ePVRTVarTypeUnsignedByteNorm, - false); // bool bPreMultiplied=false); - - const AZ::u32 compressedDataSize = compressedHeader.getDataSize(); - if (srcImage->GetMipBufSize(mip) != compressedDataSize) - { - AZ_Error("Image Processing", false, "Decompressed image data size mismatch while using PVRTexLib"); - return nullptr; - } - - AZ::u8* srcMem; - AZ::u32 srcPitch; - srcImage->GetImagePointer(mip, srcMem, srcPitch); - pvrtexture::CPVRTexture cTexture(compressedHeader, srcMem); - - // Decompress - bool bOk = false; -#if AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - try - { -#endif // AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - bOk = pvrtexture::Transcode( - cTexture, - pvrtexture::PVRStandard8PixelType, - ePVRTVarTypeUnsignedByteNorm, - colorSpace, - pvrtexture::ePVRTCHigh); - -#if AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - } - catch (...) - { - AZ_Error("Image Processing", false, "Unknown exception in PVRTexLib when decompressing"); - return nullptr; - } -#endif // AZ_TRAIT_IMAGEPROCESSING_SUPPORT_TRY_CATCH - - if (!bOk) - { - AZ_Error("Image Processing", false, "Failed to decompress an image by using PVRTexLib"); - return nullptr; - } - - // Getting decompressed data - const void* const pDecompressedData = cTexture.getDataPtr(); - if (!pDecompressedData) - { - AZ_Error("Image Processing", false, "Failed to obtain decompressed image data by using PVRTexLib"); - return nullptr; - } - - const AZ::u32 decompressedDataSize = cTexture.getDataSize(); - if (dstImage->GetMipBufSize(mip) != decompressedDataSize) - { - AZ_Error("Image Processing", false, "Decompressed image data size mismatch while using PVRTexLib"); - return nullptr; - } - - //save decompressed image to dst image - AZ::u8* dstMem; - AZ::u32 dstPitch; - dstImage->GetImagePointer(mip, dstMem, dstPitch); - memcpy(dstMem, pDecompressedData, decompressedDataSize); - } - - return dstImage; - } -} //namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h deleted file mode 100644 index cedd6d6643..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Compressors/PVRTC.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include - -namespace ImageProcessingAtom -{ - class PVRTCCompressor - : public ICompressor - { - public: - static bool IsCompressedPixelFormatSupported(EPixelFormat fmt); - static bool IsUncompressedPixelFormatSupported(EPixelFormat fmt); - static bool DoesSupportDecompress(EPixelFormat fmtDst); - - IImageObjectPtr CompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst, const CompressOption* compressOption) const override; - IImageObjectPtr DecompressImage(IImageObjectPtr srcImage, EPixelFormat fmtDst) const override; - - EPixelFormat GetSuggestedUncompressedFormat(EPixelFormat compressedfmt, EPixelFormat uncompressedfmt) const override; - ColorSpace GetSupportedColorSpace(EPixelFormat compressFormat) const final; - const char* GetName() const final; - }; -} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp index daaac5176b..2d5c89e8f5 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp @@ -82,7 +82,6 @@ namespace ImageProcessingAtomEditor presetInfoText += "\n"; presetInfoText += QString("Suppress Engine Reduce: %1\n").arg(presetSettings->m_suppressEngineReduce ? "True" : "False"); presetInfoText += QString("Discard Alpha: %1\n").arg(presetSettings->m_discardAlpha ? "True" : "False"); - presetInfoText += QString("Is Power Of 2: %1\n").arg(presetSettings->m_isPowerOf2 ? "True" : "False"); presetInfoText += QString("Is Color Chart: %1\n").arg(presetSettings->m_isColorChart ? "True" : "False"); presetInfoText += QString("High Pass Mip: %1\n").arg(presetSettings->m_highPassMip); presetInfoText += QString("Gloss From Normal: %1\n").arg(presetSettings->m_glossFromNormals); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/DdsLoader.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/DdsLoader.cpp index 20367227bd..d7f36398e3 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/DdsLoader.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/DdsLoader.cpp @@ -24,201 +24,6 @@ namespace ImageProcessingAtom { namespace DdsLoader { - IImageObject* CreateImageFromHeaderLegacy(DDS_HEADER_LEGACY& header, DDS_HEADER_DXT10& exthead) - { - EPixelFormat eFormat = ePixelFormat_Unknown; - AZ::u32 dwWidth, dwMips, dwHeight; - AZ::u32 imageFlags = header.dwReserved1; - AZ::Color colMinARGB, colMaxARGB; - - dwWidth = header.dwWidth; - dwHeight = header.dwHeight; - dwMips = 1; - if (header.dwHeaderFlags & DDS_HEADER_FLAGS_MIPMAP) - { - dwMips = header.dwMipMapCount; - } - if ((header.dwSurfaceFlags & DDS_SURFACE_FLAGS_CUBEMAP) && (header.dwCubemapFlags & DDS_CUBEMAP_ALLFACES)) - { - AZ_Assert(header.dwReserved1 & EIF_Cubemap, "Image flag should have cubemap flag"); - dwHeight *= 6; - } - - colMinARGB = AZ::Color(header.cMinColor[0], header.cMinColor[1], header.cMinColor[2], header.cMinColor[3]); - colMaxARGB = AZ::Color(header.cMaxColor[0], header.cMaxColor[1], header.cMaxColor[2], header.cMaxColor[3]); - - //get pixel format - { - // DX10 formats - if (header.ddspf.dwFourCC == FOURCC_DX10) - { - AZ::u32 dxgiFormat = exthead.dxgiFormat; - - //remove the SRGB from dxgi format and add sRGB to image flag - if (dxgiFormat == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) - { - dxgiFormat = DXGI_FORMAT_R8G8B8A8_UNORM; - } - else if (dxgiFormat == DXGI_FORMAT_BC1_UNORM_SRGB) - { - dxgiFormat = DXGI_FORMAT_BC1_UNORM; - } - else if (dxgiFormat == DXGI_FORMAT_BC2_UNORM_SRGB) - { - dxgiFormat = DXGI_FORMAT_BC2_UNORM; - } - else if (dxgiFormat == DXGI_FORMAT_BC3_UNORM_SRGB) - { - dxgiFormat = DXGI_FORMAT_BC3_UNORM; - } - else if (dxgiFormat == DXGI_FORMAT_BC7_UNORM_SRGB) - { - dxgiFormat = DXGI_FORMAT_BC7_UNORM; - } - - //add rgb flag if the dxgiformat was changed (which means it was sRGB format) above - if (dxgiFormat != exthead.dxgiFormat) - { - AZ_Assert(imageFlags & EIF_SRGBRead, "Image flags should have SRGBRead flag"); - imageFlags |= EIF_SRGBRead; - } - - //check all the pixel formats and find matching one - if (dxgiFormat != DXGI_FORMAT_UNKNOWN) - { - int i = 0; - for (; i < ePixelFormat_Count; i++) - { - const PixelFormatInfo* info = CPixelFormats::GetInstance().GetPixelFormatInfo((EPixelFormat)i); - if (static_cast(info->d3d10Format) == dxgiFormat) - { - eFormat = (EPixelFormat)i; - break; - } - } - if (i == ePixelFormat_Count) - { - AZ_Error("Image Processing", false, "Unhandled d3d10 format: %d", dxgiFormat); - return nullptr; - } - } - } - else - { - //for non-dx10 formats, use fourCC to find out its pixel formats - //go through all pixel formats and find a match with the fourcc - for (AZ::u32 formatIdx = 0; formatIdx < ePixelFormat_Count; formatIdx++) - { - const PixelFormatInfo* info = CPixelFormats::GetInstance().GetPixelFormatInfo((EPixelFormat)formatIdx); - if (header.ddspf.dwFourCC == info->fourCC) - { - eFormat = (EPixelFormat)formatIdx; - break; - } - } - - //legacy formats. This section is only used for load dds files converted by RC.exe - //our save to dds file function won't use any of these fourcc - if (eFormat == ePixelFormat_Unknown) - { - if (header.ddspf.dwFourCC == FOURCC_DXT1) - { - eFormat = ePixelFormat_BC1; - } - else if (header.ddspf.dwFourCC == FOURCC_DXT5) - { - eFormat = ePixelFormat_BC3; - } - else if (header.ddspf.dwFourCC == FOURCC_3DCP) - { - eFormat = ePixelFormat_BC4; - } - else if (header.ddspf.dwFourCC == FOURCC_3DC) - { - eFormat = ePixelFormat_BC5; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_R32F) - { - eFormat = ePixelFormat_R32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_G32R32F) - { - eFormat = ePixelFormat_R32G32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A32B32G32R32F) - { - eFormat = ePixelFormat_R32G32B32A32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_R16F) - { - eFormat = ePixelFormat_R16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_G16R16F) - { - eFormat = ePixelFormat_R16G16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A16B16G16R16F) - { - eFormat = ePixelFormat_R16G16B16A16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A16B16G16R16) - { - eFormat = ePixelFormat_R16G16B16A16; - } - else if ((header.ddspf.dwFlags == DDS_RGBA || header.ddspf.dwFlags == DDS_RGB) - && header.ddspf.dwRGBBitCount == 32) - { - if (header.ddspf.dwRBitMask == 0x00ff0000) - { - eFormat = ePixelFormat_B8G8R8A8; - } - else - { - eFormat = ePixelFormat_R8G8B8A8; - } - } - else if (header.ddspf.dwFlags == DDS_LUMINANCEA && header.ddspf.dwRGBBitCount == 8) - { - eFormat = ePixelFormat_R8G8; - } - else if (header.ddspf.dwFlags == DDS_LUMINANCE && header.ddspf.dwRGBBitCount == 8) - { - eFormat = ePixelFormat_A8; - } - else if ((header.ddspf.dwFlags == DDS_A || header.ddspf.dwFlags == DDS_A_ONLY || header.ddspf.dwFlags == (DDS_A | DDS_A_ONLY)) && header.ddspf.dwRGBBitCount == 8) - { - eFormat = ePixelFormat_A8; - } - } - } - } - - if (eFormat == ePixelFormat_Unknown) - { - AZ_Error("Image Processing", false, "Unhandled dds pixel format fourCC: %d, flags: %d", - header.ddspf.dwFourCC, header.ddspf.dwFlags); - return nullptr; - } - - IImageObject* newImage = IImageObject::CreateImage(dwWidth, dwHeight, dwMips, eFormat); - - if (dwMips != newImage->GetMipCount()) - { - AZ_Error("Image Processing", false, "Mipcount from image data doesn't match image size and pixelformat"); - delete newImage; - return nullptr; - } - - //set properties - newImage->SetImageFlags(imageFlags); - newImage->SetAverageBrightness(header.fAvgBrightness); - newImage->SetColorRange(colMinARGB, colMaxARGB); - newImage->SetNumPersistentMips(header.bNumPersistentMips); - - return newImage; - } - - bool IsExtensionSupported(const char* extension) { QString ext = QString(extension).toLower(); @@ -226,215 +31,6 @@ namespace ImageProcessingAtom return ext == "dds"; } - IImageObject* LoadImageFromFileLegacy(const AZStd::string& filename) - { - AZ::IO::SystemFile file; - file.Open(filename.c_str(), AZ::IO::SystemFile::SF_OPEN_READ_ONLY); - - AZ::IO::SystemFileStream fileLoadStream(&file, true); - if (!fileLoadStream.IsOpen()) - { - AZ_Warning("Image Processing", false, "%s: failed to open file %s", __FUNCTION__, filename.c_str()); - return nullptr; - } - - AZStd::string ext = ""; - AzFramework::StringFunc::Path::GetExtension(filename.c_str(), ext, false); - bool isAlphaImage = (ext == "a"); - - IImageObject* imageObj = LoadImageFromFileStreamLegacy(fileLoadStream); - - //load mips from seperated files if it's splitted - if (imageObj && imageObj->HasImageFlags(EIF_Splitted)) - { - AZStd::string baseName; - if (isAlphaImage) - { - baseName = filename.substr(0, filename.size() - 2); - } - else - { - baseName = filename; - } - - AZ::u32 externalMipCount = 0; - if (imageObj->GetNumPersistentMips() < imageObj->GetMipCount()) - { - externalMipCount = imageObj->GetMipCount() - imageObj->GetNumPersistentMips(); - } - //load other mips from files with number extensions - for (AZ::u32 mipIdx = 1; mipIdx <= externalMipCount; mipIdx++) - { - AZ::u32 mip = externalMipCount - mipIdx; - AZStd::string mipFileName = AZStd::string::format("%s.%d%s", baseName.c_str(), mipIdx, isAlphaImage ? "a" : ""); - - AZ::IO::SystemFile mipFile; - mipFile.Open(mipFileName.c_str(), AZ::IO::SystemFile::SF_OPEN_READ_ONLY); - - AZ::IO::SystemFileStream mipFileLoadStream(&mipFile, true); - - if (!mipFileLoadStream.IsOpen()) - { - AZ_Warning("Image Processing", false, "%s: failed to open mip file %s", __FUNCTION__, mipFileName.c_str()); - break; - } - - AZ::u32 pitch; - AZ::u8* mem; - imageObj->GetImagePointer(mip, mem, pitch); - AZ::u32 bufSize = imageObj->GetMipBufSize(mip); - mipFileLoadStream.Read(bufSize, mem); - } - } - - return imageObj; - } - - IImageObject* LoadImageFromFileStreamLegacy(AZ::IO::SystemFileStream& fileLoadStream) - { - if (fileLoadStream.GetLength() - fileLoadStream.GetCurPos() < sizeof(DDS_FILE_DESC_LEGACY)) - { - AZ_Error("Image Processing", false, "%s: Trying to load a none-DDS file", __FUNCTION__); - return nullptr; - } - - DDS_FILE_DESC_LEGACY desc; - DDS_HEADER_DXT10 exthead; - - AZ::IO::SizeType startPos = fileLoadStream.GetCurPos(); - fileLoadStream.Read(sizeof(desc.dwMagic), &desc.dwMagic); - - if (desc.dwMagic != FOURCC_DDS) - { - desc.dwMagic = FOURCC_DDS; - //the old cry .a file doesn't have "DDS " in the beginning of the file. - //so reset to previous position - fileLoadStream.Seek(startPos, AZ::IO::GenericStream::ST_SEEK_BEGIN); - } - - fileLoadStream.Read(sizeof(desc.header), &desc.header); - - if (!desc.IsValid()) - { - AZ_Error("Image Processing", false, "%s: Trying to load a none-DDS file", __FUNCTION__); - return nullptr; - } - - if (desc.header.IsDX10Ext()) - { - fileLoadStream.Read(sizeof(exthead), &exthead); - } - - IImageObject* outImage = CreateImageFromHeaderLegacy(desc.header, exthead); - - if (outImage == nullptr) - { - return nullptr; - } - - //load mip data - AZ::u32 mipStart = 0; - //There are at least three lowest mips are in the file if it was splitted. This is to load splitted dds file exported by legacy rc.exe - int numPersistentMips = outImage->GetNumPersistentMips(); - if (numPersistentMips == 0 && outImage->HasImageFlags(EIF_Splitted)) - { - outImage->SetNumPersistentMips(3); - } - - if (outImage->HasImageFlags(EIF_Splitted) - && outImage->GetMipCount() > outImage->GetNumPersistentMips()) - { - mipStart = outImage->GetMipCount() - outImage->GetNumPersistentMips(); - } - - AZ::u32 faces = 1; - if (outImage->HasImageFlags(EIF_Cubemap)) - { - faces = 6; - } - - for (AZ::u32 face = 0; face < faces; face++) - { - for (AZ::u32 mip = mipStart; mip < outImage->GetMipCount(); ++mip) - { - AZ::u32 pitch; - AZ::u8* mem; - outImage->GetImagePointer(mip, mem, pitch); - AZ::u32 faceBufSize = outImage->GetMipBufSize(mip) / faces; - fileLoadStream.Read(faceBufSize, mem + faceBufSize * face); - } - } - - return outImage; - } - - IImageObject* LoadAttachedImageFromDdsFileLegacy(const AZStd::string& filename, IImageObjectPtr originImage) - { - if (originImage == nullptr) - { - return nullptr; - } - - AZ_Assert(originImage->HasImageFlags(EIF_AttachedAlpha), - "this function should only be called for origin image loaded from same file with attached alpha flag"); - - AZ::IO::SystemFile file; - file.Open(filename.c_str(), AZ::IO::SystemFile::SF_OPEN_READ_ONLY); - - AZ::IO::SystemFileStream fileLoadStream(&file, true); - if (!fileLoadStream.IsOpen()) - { - AZ_Warning("Image Processing", false, "%s: failed to open file %s", __FUNCTION__, filename.c_str()); - return nullptr; - } - - DDS_FILE_DESC_LEGACY desc; - DDS_HEADER_DXT10 exthead; - - fileLoadStream.Read(sizeof(desc), &desc); - if (desc.dwMagic != FOURCC_DDS) - { - AZ_Error("Image Processing", false, "%s:Trying to load a none-DDS file", __FUNCTION__); - return nullptr; - } - - if (desc.header.IsDX10Ext()) - { - fileLoadStream.Read(sizeof(exthead), &exthead); - } - - //skip size for originImage's mip data - for (AZ::u32 mip = 0; mip < originImage->GetMipCount(); ++mip) - { - AZ::u32 bufSize = originImage->GetMipBufSize(mip); - fileLoadStream.Seek(bufSize, AZ::IO::GenericStream::ST_SEEK_CUR); - } - - IImageObject* alphaImage = nullptr; - - AZ::u32 marker = 0; - fileLoadStream.Read(4, &marker); - if (marker == FOURCC_CExt) // marker for the start of O3DE Extended data - { - fileLoadStream.Read(4, &marker); - if (FOURCC_AttC == marker) // Attached Channel chunk - { - AZ::u32 size = 0; - fileLoadStream.Read(4, &size); - - alphaImage = LoadImageFromFileStreamLegacy(fileLoadStream); - fileLoadStream.Read(4, &marker); - } - - if (FOURCC_CEnd == marker) // marker for the end of O3DE Extended data - { - fileLoadStream.Read(4, &marker); - } - } - - return alphaImage; - } - // Create an image object from standard dds header IImageObject* CreateImageFromHeader(DDS_HEADER& header, DDS_HEADER_DXT10& exthead) { @@ -526,45 +122,14 @@ namespace ImageProcessingAtom { format = ePixelFormat_BC1; } - else if (header.ddspf.dwFourCC == FOURCC_DXT5) + else if (header.ddspf.dwFourCC == FOURCC_DXT5 || header.ddspf.dwFourCC == FOURCC_DXT4) { format = ePixelFormat_BC3; } - else if (header.ddspf.dwFourCC == FOURCC_3DCP) - { - format = ePixelFormat_BC4; - } - else if (header.ddspf.dwFourCC == FOURCC_3DC) - { - format = ePixelFormat_BC5; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_R32F) - { - format = ePixelFormat_R32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_G32R32F) - { - format = ePixelFormat_R32G32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A32B32G32R32F) - { - format = ePixelFormat_R32G32B32A32F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_R16F) - { - format = ePixelFormat_R16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_G16R16F) - { - format = ePixelFormat_R16G16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A16B16G16R16F) - { - format = ePixelFormat_R16G16B16A16F; - } - else if (header.ddspf.dwFourCC == DDS_FOURCC_A16B16G16R16) + else { - format = ePixelFormat_R16G16B16A16; + AZ_Error("Image Processing", false, "unsupported fourCC format: 0x%x", header.ddspf.dwFourCC); + return nullptr; } } else diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/ImageLoaders.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/ImageLoaders.h index 587c9b551b..b860e82631 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/ImageLoaders.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageLoader/ImageLoaders.h @@ -44,11 +44,6 @@ namespace ImageProcessingAtom { bool IsExtensionSupported(const char* extension); IImageObject* LoadImageFromFile(const AZStd::string& filename); - - // These functions are for loading legacy O3DE dds files - IImageObject* LoadImageFromFileLegacy(const AZStd::string& filename); - IImageObject* LoadImageFromFileStreamLegacy(AZ::IO::SystemFileStream& fileLoadStream); - IImageObject* LoadAttachedImageFromDdsFileLegacy(const AZStd::string& filename, IImageObjectPtr originImage); };// namespace DdsLoader // Load .exr files to an image object diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/platform_mac.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/platform_mac.cmake index 7008b352a8..7a325ca97e 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/platform_mac.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Platform/Mac/platform_mac.cmake @@ -5,8 +5,3 @@ # SPDX-License-Identifier: Apache-2.0 OR MIT # # - -set(LY_COMPILE_OPTIONS - PRIVATE - -fexceptions #ImageLoader/ExrLoader.cpp and PVRTC.cpp uses exceptions -) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/DDSHeader.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/DDSHeader.h index 785424a9b1..0f953897c9 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/DDSHeader.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/DDSHeader.h @@ -237,14 +237,8 @@ namespace ImageProcessingAtom const static AZ::u32 FOURCC_CEnd = IMAGE_BUIDER_MAKEFOURCC('C', 'E', 'n', 'd'); // O3DE extension end const static AZ::u32 FOURCC_AttC = IMAGE_BUIDER_MAKEFOURCC('A', 't', 't', 'C'); // Chunk Attached Channel - //Fourcc for pixel formats which aren't supported by dx10, such as astc formats, etc formats, pvrtc formats + //Fourcc for pixel formats which aren't supported by dx10, such as astc formats //They are used for dwFourCC of dds header's DDS_PIXELFORMAT to identify non-dx10 pixel formats - const static AZ::u32 FOURCC_EAC_R11 = IMAGE_BUIDER_MAKEFOURCC('E', 'A', 'R', ' '); - const static AZ::u32 FOURCC_EAC_RG11 = IMAGE_BUIDER_MAKEFOURCC('E', 'A', 'R', 'G'); - const static AZ::u32 FOURCC_ETC2 = IMAGE_BUIDER_MAKEFOURCC('E', 'T', '2', ' '); - const static AZ::u32 FOURCC_ETC2A = IMAGE_BUIDER_MAKEFOURCC('E', 'T', '2', 'A'); - const static AZ::u32 FOURCC_PVRTC2 = IMAGE_BUIDER_MAKEFOURCC('P', 'V', 'R', '2'); - const static AZ::u32 FOURCC_PVRTC4 = IMAGE_BUIDER_MAKEFOURCC('P', 'V', 'R', '4'); const static AZ::u32 FOURCC_ASTC_4x4 = IMAGE_BUIDER_MAKEFOURCC('A', 'S', '4', '4'); const static AZ::u32 FOURCC_ASTC_5x4 = IMAGE_BUIDER_MAKEFOURCC('A', 'S', '5', '4'); const static AZ::u32 FOURCC_ASTC_5x5 = IMAGE_BUIDER_MAKEFOURCC('A', 'S', '5', '5'); @@ -260,10 +254,10 @@ namespace ImageProcessingAtom const static AZ::u32 FOURCC_ASTC_12x10 = IMAGE_BUIDER_MAKEFOURCC('A', 'S', 'C', 'A'); const static AZ::u32 FOURCC_ASTC_12x12 = IMAGE_BUIDER_MAKEFOURCC('A', 'S', 'C', 'C'); - //legacy formats names. they are only used for load rc.exe's dds formats + //legacy formats names. they are only used for load old dds formats. const static AZ::u32 FOURCC_DXT1 = IMAGE_BUIDER_MAKEFOURCC('D', 'X', 'T', '1'); + const static AZ::u32 FOURCC_DXT2 = IMAGE_BUIDER_MAKEFOURCC('D', 'X', 'T', '2'); const static AZ::u32 FOURCC_DXT3 = IMAGE_BUIDER_MAKEFOURCC('D', 'X', 'T', '3'); + const static AZ::u32 FOURCC_DXT4 = IMAGE_BUIDER_MAKEFOURCC('D', 'X', 'T', '4'); const static AZ::u32 FOURCC_DXT5 = IMAGE_BUIDER_MAKEFOURCC('D', 'X', 'T', '5'); - const static AZ::u32 FOURCC_3DCP = IMAGE_BUIDER_MAKEFOURCC('A', 'T', 'I', '1'); - const static AZ::u32 FOURCC_3DC = IMAGE_BUIDER_MAKEFOURCC('A', 'T', 'I', '2'); } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.cpp index 94fce9bc1f..8a741d6637 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.cpp @@ -52,19 +52,6 @@ namespace ImageProcessingAtom return false; } - bool IsETCFormat(EPixelFormat fmt) - { - if (fmt == ePixelFormat_ETC2 - || fmt == ePixelFormat_ETC2a - || fmt == ePixelFormat_ETC2a1 - || fmt == ePixelFormat_EAC_R11 - || fmt == ePixelFormat_EAC_RG11) - { - return true; - } - return false; - } - PixelFormatInfo::PixelFormatInfo( uint32_t a_bitsPerPixel, uint32_t a_Channels, @@ -96,7 +83,6 @@ namespace ImageProcessingAtom , fourCC(a_fourCC) , eSampleType(a_eSampleType) , szName(a_szName) - , szLegacyName(a_szName) , szDescription(a_szDescription) , bCompressed(a_bCompressed) , bSelectable(a_bSelectable) @@ -122,15 +108,6 @@ namespace ImageProcessingAtom CPixelFormats::CPixelFormats() { InitPixelFormats(); - - m_removedLegacyFormats["DXT1"] = ePixelFormat_BC1; - m_removedLegacyFormats["DXT1a"] = ePixelFormat_BC1a; - m_removedLegacyFormats["DXT3"] = ePixelFormat_BC3; - m_removedLegacyFormats["DXT3t"] = ePixelFormat_BC3t; - m_removedLegacyFormats["DXT5"] = ePixelFormat_BC3; - m_removedLegacyFormats["DXT5t"] = ePixelFormat_BC3t; - m_removedLegacyFormats["3DCp"] = ePixelFormat_BC4; - m_removedLegacyFormats["3DC"] = ePixelFormat_BC5; } void CPixelFormats::InitPixelFormat(EPixelFormat format, const PixelFormatInfo& formatInfo) @@ -176,13 +153,6 @@ namespace ImageProcessingAtom InitPixelFormat(ePixelFormat_ASTC_10x10, PixelFormatInfo(0, 4, true, "?", 16, 16, 10, 10, 128, false, DXGI_FORMAT_UNKNOWN, FOURCC_ASTC_10x10, ESampleType::eSampleType_Compressed, "ASTC_10x10", "ASTC 10x10 compressed texture format", true, false)); InitPixelFormat(ePixelFormat_ASTC_12x10, PixelFormatInfo(0, 4, true, "?", 16, 16, 12, 10, 128, false, DXGI_FORMAT_UNKNOWN, FOURCC_ASTC_12x10, ESampleType::eSampleType_Compressed, "ASTC_12x10", "ASTC 12x10 compressed texture format", true, false)); InitPixelFormat(ePixelFormat_ASTC_12x12, PixelFormatInfo(0, 4, true, "?", 16, 16, 12, 12, 128, false, DXGI_FORMAT_UNKNOWN, FOURCC_ASTC_12x12, ESampleType::eSampleType_Compressed, "ASTC_12x12", "ASTC 12x12 compressed texture format", true, false)); - InitPixelFormat(ePixelFormat_PVRTC2, PixelFormatInfo(2, 4, true, "2", 16, 16, 8, 4, 64, true, DXGI_FORMAT_UNKNOWN, FOURCC_PVRTC2, ESampleType::eSampleType_Compressed, "PVRTC2", "POWERVR 2 bpp compressed texture format", true, false)); - InitPixelFormat(ePixelFormat_PVRTC4, PixelFormatInfo(4, 4, true, "2", 8, 8, 4, 4, 64, true, DXGI_FORMAT_UNKNOWN, FOURCC_PVRTC4, ESampleType::eSampleType_Compressed, "PVRTC4", "POWERVR 4 bpp compressed texture format", true, false)); - InitPixelFormat(ePixelFormat_EAC_R11, PixelFormatInfo(4, 1, true, "4", 4, 4, 4, 4, 64, false, DXGI_FORMAT_UNKNOWN, FOURCC_EAC_R11, ESampleType::eSampleType_Compressed, "EAC_R11", "EAC 4 bpp single channel texture format", true, false)); - InitPixelFormat(ePixelFormat_EAC_RG11, PixelFormatInfo(8, 2, false, "0", 4, 4, 4, 4, 128, false, DXGI_FORMAT_UNKNOWN, FOURCC_EAC_RG11, ESampleType::eSampleType_Compressed, "EAC_RG11", "EAC 8 bpp dual channel texture format", true, false)); - InitPixelFormat(ePixelFormat_ETC2, PixelFormatInfo(4, 3, false, "0", 4, 4, 4, 4, 64, false, DXGI_FORMAT_UNKNOWN, FOURCC_ETC2, ESampleType::eSampleType_Compressed, "ETC2", "ETC2 RGB 4 bpp compressed texture format", true, false)); - InitPixelFormat(ePixelFormat_ETC2a, PixelFormatInfo(8, 4, true, "4", 4, 4, 4, 4, 128, false, DXGI_FORMAT_UNKNOWN, FOURCC_ETC2A, ESampleType::eSampleType_Compressed, "ETC2a", "ETC2 RGBA 8 bpp compressed texture format", true, false)); - InitPixelFormat(ePixelFormat_ETC2a1, PixelFormatInfo(4, 4, true, "1", 4, 4, 4, 4, 64, false, DXGI_FORMAT_UNKNOWN, FOURCC_ETC2A, ESampleType::eSampleType_Compressed, "ETC2a1", "ETC2 RGBA1 8 bpp compressed texture format", true, false)); // Standardized Compressed DXGI Formats (DX10+) // Data in these compressed formats is hardware decodable on all DX10 chips, and manageable with the DX10-API. @@ -216,17 +186,6 @@ namespace ImageProcessingAtom InitPixelFormat(ePixelFormat_R32, PixelFormatInfo(32, 1, false, "0", 1, 1, 1, 1, 32, false, DXGI_FORMAT_FORCE_UINT, FOURCC_DX10, ESampleType::eSampleType_Uint32, "R32", "32-bit red only", false, false)); - //Set legacy name it can be used for convertion - m_pixelFormatInfo[ePixelFormat_R8G8B8A8].szLegacyName = "A8R8G8B8"; - m_pixelFormatInfo[ePixelFormat_R8G8B8X8].szLegacyName = "X8R8G8B8"; - m_pixelFormatInfo[ePixelFormat_R8G8].szLegacyName = "G8R8"; - m_pixelFormatInfo[ePixelFormat_R16G16B16A16].szLegacyName = "A16B16G16R16"; - m_pixelFormatInfo[ePixelFormat_R16G16].szLegacyName = "G16R16"; - m_pixelFormatInfo[ePixelFormat_R32G32B32A32F].szLegacyName = "A32B32G32R32F"; - m_pixelFormatInfo[ePixelFormat_R32G32F].szLegacyName = "G32R32F"; - m_pixelFormatInfo[ePixelFormat_R16G16B16A16F].szLegacyName = "A16B16G16R16F"; - m_pixelFormatInfo[ePixelFormat_R16G16F].szLegacyName = "G16R16F"; - //validate all pixel formats are proper initialized for (int i = 0; i < ePixelFormat_Count; ++i) { @@ -249,23 +208,6 @@ namespace ImageProcessingAtom return ePixelFormat_Unknown; } - EPixelFormat CPixelFormats::FindPixelFormatByLegacyName(const char* name) - { - if (m_removedLegacyFormats.find(name) != m_removedLegacyFormats.end()) - { - return m_removedLegacyFormats[name]; - } - - for (int i = 0; i < ePixelFormat_Count; ++i) - { - if (azstricmp(m_pixelFormatInfo[i].szLegacyName, name) == 0) - { - return (EPixelFormat)i; - } - } - return ePixelFormat_Unknown; - } - const PixelFormatInfo* CPixelFormats::GetPixelFormatInfo(EPixelFormat format) { AZ_Assert((format >= 0) && (format < ePixelFormat_Count), "Unsupport pixel format: %d", format); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.h index ec1ec1bfaf..92c4bdd99e 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/PixelFormatInfo.h @@ -119,7 +119,6 @@ namespace ImageProcessingAtom bool bSquarePow2; // whether the pixel format requires image size be square and power of 2. DXGI_FORMAT d3d10Format; // the mapping d3d10 pixel format ESampleType eSampleType; // the data type used to present pixel - const char* szLegacyName; // name used for cryEngine const char* szName; // name for showing in editors const char* szDescription; // description for showing in editors bool bCompressed; // if it's a compressed format @@ -173,10 +172,6 @@ namespace ImageProcessingAtom bool IsFormatSigned(EPixelFormat fmt); bool IsFormatFloatingPoint(EPixelFormat fmt, bool bFullPrecision); - //find the pixel format for name used by Cry's RC.ini - //returns ePixelFormat_Unknown if the name was not found in registed format list - EPixelFormat FindPixelFormatByLegacyName(const char* name); - //find pixel format by its name EPixelFormat FindPixelFormatByName(const char* name); @@ -208,9 +203,6 @@ namespace ImageProcessingAtom //pixel format name to pixel format enum AZStd::map m_pixelFormatNameMap; - - // some formats from cryEngine were removed. using this name-pixelFormat mapping to look for new format - AZStd::map m_removedLegacyFormats; }; template diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp index d282e9b02b..29ba8c3351 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp @@ -102,32 +102,6 @@ namespace ImageProcessingAtom case AZ::RHI::Format::ASTC_12x12_UNORM: return ePixelFormat_ASTC_12x12; - case AZ::RHI::Format::PVRTC2_UNORM_SRGB: - isSRGB = true; - case AZ::RHI::Format::PVRTC2_UNORM: - return ePixelFormat_PVRTC2; - case AZ::RHI::Format::PVRTC4_UNORM_SRGB: - isSRGB = true; - case AZ::RHI::Format::PVRTC4_UNORM: - return ePixelFormat_PVRTC4; - - case AZ::RHI::Format::EAC_R11_UNORM: - return ePixelFormat_EAC_R11; - case AZ::RHI::Format::EAC_RG11_UNORM: - return ePixelFormat_EAC_RG11; - case AZ::RHI::Format::ETC2_UNORM_SRGB: - isSRGB = true; - case AZ::RHI::Format::ETC2_UNORM: - return ePixelFormat_ETC2; - case AZ::RHI::Format::ETC2A_UNORM_SRGB: - isSRGB = true; - case AZ::RHI::Format::ETC2A_UNORM: - return ePixelFormat_ETC2a; - case AZ::RHI::Format::ETC2A1_UNORM_SRGB: - isSRGB = true; - case AZ::RHI::Format::ETC2A1_UNORM: - return ePixelFormat_ETC2a1; - case AZ::RHI::Format::BC1_UNORM_SRGB: isSRGB = true; case AZ::RHI::Format::BC1_UNORM: @@ -225,22 +199,6 @@ namespace ImageProcessingAtom case ePixelFormat_ASTC_12x12: return isSrgb ? RHI::Format::ASTC_12x12_UNORM_SRGB : RHI::Format::ASTC_12x12_UNORM; - case ePixelFormat_PVRTC2: - return isSrgb ? RHI::Format::PVRTC2_UNORM_SRGB : RHI::Format::PVRTC2_UNORM; - case ePixelFormat_PVRTC4: - return isSrgb ? RHI::Format::PVRTC4_UNORM_SRGB : RHI::Format::PVRTC4_UNORM; - - case ePixelFormat_EAC_R11: - return RHI::Format::EAC_R11_UNORM; - case ePixelFormat_EAC_RG11: - return RHI::Format::EAC_RG11_UNORM; - case ePixelFormat_ETC2: - return isSrgb ? RHI::Format::ETC2_UNORM_SRGB : RHI::Format::ETC2_UNORM; - case ePixelFormat_ETC2a: - return isSrgb ? RHI::Format::ETC2A_UNORM_SRGB : RHI::Format::ETC2A_UNORM; - case ePixelFormat_ETC2a1: - return isSrgb ? RHI::Format::ETC2A1_UNORM_SRGB : RHI::Format::ETC2A1_UNORM; - case ePixelFormat_BC1: case ePixelFormat_BC1a: return isSrgb ? RHI::Format::BC1_UNORM_SRGB : RHI::Format::BC1_UNORM; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp index c72e1dc309..9e4aa83908 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp @@ -426,60 +426,6 @@ namespace UnitTest return isDifferent; } - - bool CompareDDSImage(const QString& imagePath1, const QString& imagePath2, QString& output) - { - IImageObjectPtr image1, alphaImage1, image2, alphaImage2; - - - image1 = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(imagePath1.toUtf8().constData())); - if (image1 && image1->HasImageFlags(EIF_AttachedAlpha)) - { - if (image1->HasImageFlags(EIF_Splitted)) - { - alphaImage1 = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(QString(imagePath1 + ".a").toUtf8().constData())); - } - else - { - alphaImage1 = IImageObjectPtr(DdsLoader::LoadAttachedImageFromDdsFileLegacy(imagePath1.toUtf8().constData(), image1)); - } - } - - image2 = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(imagePath2.toUtf8().constData())); - if (image2 && image2->HasImageFlags(EIF_AttachedAlpha)) - { - if (image2->HasImageFlags(EIF_Splitted)) - { - alphaImage2 = IImageObjectPtr(DdsLoader::LoadImageFromFileLegacy(QString(imagePath2 + ".a").toUtf8().constData())); - } - else - { - alphaImage2 = IImageObjectPtr(DdsLoader::LoadAttachedImageFromDdsFileLegacy(imagePath2.toUtf8().constData(), image2)); - } - } - - if (!image1 && !image2) - { - output += "Cannot load both image file! "; - return false; - } - bool isDifferent = false; - - isDifferent = GetComparisonResult(image1, image2, output); - - - QFileInfo fi(imagePath1); - AZStd::string imageName = fi.baseName().toUtf8().constData(); - SaveImageToFile(image1, imageName + "_new"); - SaveImageToFile(image2, imageName + "_old"); - - if (alphaImage1 || alphaImage2) - { - isDifferent |= GetComparisonResult(alphaImage1, alphaImage2, output); - } - - return isDifferent; - } }; // test CPixelFormats related functions @@ -487,34 +433,6 @@ namespace UnitTest { CPixelFormats& pixelFormats = CPixelFormats::GetInstance(); - //verify names which was used for legacy rc.ini - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC7t") == ePixelFormat_BC7t); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("ETC2A") == ePixelFormat_ETC2a); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("PVRTC4") == ePixelFormat_PVRTC4); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC1") == ePixelFormat_BC1); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("ETC2") == ePixelFormat_ETC2); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC1a") == ePixelFormat_BC1a); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC3") == ePixelFormat_BC3); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC7") == ePixelFormat_BC7); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC5s") == ePixelFormat_BC5s); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("EAC_RG11") == ePixelFormat_EAC_RG11); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC4") == ePixelFormat_BC4); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("EAC_R11") == ePixelFormat_EAC_R11); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("A8R8G8B8") == ePixelFormat_R8G8B8A8); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("BC6UH") == ePixelFormat_BC6UH); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("R9G9B9E5") == ePixelFormat_R9G9B9E5); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("X8R8G8B8") == ePixelFormat_R8G8B8X8); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("A16B16G16R16F") == ePixelFormat_R16G16B16A16F); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("G8R8") == ePixelFormat_R8G8); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("G16R16") == ePixelFormat_R16G16); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("G16R16F") == ePixelFormat_R16G16F); - - //some legacy format need to be mapping to new format. - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("DXT1") == ePixelFormat_BC1); - ASSERT_TRUE(pixelFormats.FindPixelFormatByLegacyName("DXT5") == ePixelFormat_BC3); - - //calculate mipmap count. no cubemap support at this moment - //for all the non-compressed textures, if there minimum required texture size is 1x1 for (uint32 i = 0; i < ePixelFormat_Count; i++) { @@ -543,13 +461,6 @@ namespace UnitTest } //check function IsImageSizeValid && EvaluateImageDataSize function - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 2, 1, false) == false); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 4, 4, false) == false); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 16, 16, false) == true); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 16, 32, false) == false); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 34, 34, false) == false); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_PVRTC4, 256, 256, false) == true); - ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_BC1, 2, 1, false) == false); ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_BC1, 16, 16, false) == true); ASSERT_TRUE(pixelFormats.IsImageSizeValid(ePixelFormat_BC1, 16, 32, false) == true); @@ -834,9 +745,7 @@ namespace UnitTest if (formatInfo->bCompressed) { // skip ASTC formats which are tested in TestConvertASTCCompressor - if (!IsASTCFormat(pixelFormat) - && pixelFormat != ePixelFormat_PVRTC2 && pixelFormat != ePixelFormat_PVRTC4 - && !IsETCFormat(pixelFormat)) // skip ETC since it's very slow + if (!IsASTCFormat(pixelFormat)) { compressedFormats.push_back(pixelFormat); } @@ -1112,55 +1021,6 @@ namespace UnitTest } } - TEST_F(ImageProcessingTest, DISABLED_CompareOutputImage) - { - AZStd::string curretTextureFolder = "../TestAssets/TextureAssets/assets_new/textures"; - AZStd::string oldTextureFolder = "../TestAssets/TextureAssets/assets_old/textures"; - bool outputOnlyDifferent = false; - QDirIterator it(curretTextureFolder.c_str(), QStringList() << "*.dds", QDir::Files, QDirIterator::Subdirectories); - QFile f("../texture_comparison_output.csv"); - f.open(QIODevice::ReadWrite | QIODevice::Truncate); - // Write a header for csv file - f.write("Texture Name, Path, Mip new/old, MipDiff, Format new/old, Flag new/old, MemSize new/old, MemDiff, Error, AlphaMip new/old, AlphaMipDiff, AlphaFormat new/old, AlphaFlag new/old, AlphaMemSize new/old, AlphaMemDiff, AlphaError\r\n"); - int i = 0; - while (it.hasNext()) - { - i++; - it.next(); - - QString fileName = it.fileName(); - QString newFilePath = it.filePath(); - QString sharedPath = QString(newFilePath).remove(curretTextureFolder.c_str()); - QString oldFilePath = QString(oldTextureFolder.c_str()) + sharedPath; - QString output; - if (QFile::exists(oldFilePath)) - { - bool isDifferent = CompareDDSImage(newFilePath, oldFilePath, output); - if (outputOnlyDifferent && !isDifferent) - { - continue; - } - else - { - f.write(fileName.toUtf8().constData()); - f.write(","); - f.write(sharedPath.toUtf8().constData()); - f.write(output.toUtf8().constData()); - } - } - else - { - f.write(fileName.toUtf8().constData()); - f.write(","); - f.write(sharedPath.toUtf8().constData()); - output += ",No old file for comparison!"; - f.write(output.toUtf8().constData()); - } - f.write("\r\n"); - } - f.close(); - } - TEST_F(ImageProcessingTest, TextureSettingReflect_SerializingModernDataInAndOut_WritesAndParsesFileAccurately) { AZStd::string filepath = "test.xml"; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake index ba9e9f29b7..aad400518d 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake @@ -120,10 +120,6 @@ set(FILES Source/Compressors/Compressor.cpp Source/Compressors/CTSquisher.h Source/Compressors/CTSquisher.cpp - Source/Compressors/PVRTC.cpp - Source/Compressors/PVRTC.h - Source/Compressors/ETC2.cpp - Source/Compressors/ETC2.h Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4f.cpp Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4s.cpp Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4c.cpp diff --git a/Gems/TextureAtlas/Code/Source/Editor/AtlasBuilderWorker.cpp b/Gems/TextureAtlas/Code/Source/Editor/AtlasBuilderWorker.cpp index abcdce99b9..f6e6a1254c 100644 --- a/Gems/TextureAtlas/Code/Source/Editor/AtlasBuilderWorker.cpp +++ b/Gems/TextureAtlas/Code/Source/Editor/AtlasBuilderWorker.cpp @@ -757,9 +757,7 @@ namespace TextureAtlasBuilder if (input.m_presetName.empty()) { - // Default to the TextureAtlas preset which is currently set to use compression for all platforms except for iOS. - // Currently the only fully supported compression for iOS is PVRTC which requires the texture to be square and a power of 2. - // Due to this limitation, we default to using no compression for iOS until ASTC is fully supported + // Default to the TextureAtlas preset which is currently set to use compression const AZStd::string defaultPresetName = "UserInterface_Compressed"; input.m_presetName = defaultPresetName; } diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index fb02a80088..8e4a3ef828 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -20,7 +20,6 @@ ly_associate_package(PACKAGE_NAME SQLite-3.32.2-rev3-multiplatform ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform TARGETS glad PACKAGE_HASH ff97ee9664e97d0854b52a3734c2289329d9f2b4cd69478df6d0ca1f1c9392ee) ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux_core PACKAGE_HASH c8c13cf7bc351643e1abd294d0841b24dee60e51647dff13db7aec396ad1e0b5) ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) -ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) # platform-specific: ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-linux TARGETS AWSGameLiftServerSDK PACKAGE_HASH a8149a95bd100384af6ade97e2b21a56173740d921e6c3da8188cd51554d39af) @@ -29,7 +28,6 @@ ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-linux ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev6-linux TARGETS AWSNativeSDK PACKAGE_HASH 490291e4c8057975c3ab86feb971b8a38871c58bac5e5d86abdd1aeb7141eec4) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-linux TARGETS Lua PACKAGE_HASH 1adc812abe3dd0dbb2ca9756f81d8f0e0ba45779ac85bf1d8455b25c531a38b0) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-linux TARGETS PhysX PACKAGE_HASH a110249cbef4f266b0002c4ee9a71f59f373040cefbe6b82f1e1510c811edde6) -ly_associate_package(PACKAGE_NAME etc2comp-9cd0f9cae0-rev1-linux TARGETS etc2comp PACKAGE_HASH 9283aa5db5bb7fb90a0ddb7a9f3895317c8ebe8044943124bbb3673a41407430) ly_associate_package(PACKAGE_NAME mcpp-2.7.2_az.2-rev1-linux TARGETS mcpp PACKAGE_HASH df7a998d0bc3fedf44b5bdebaf69ddad6033355b71a590e8642445ec77bc6c41) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-linux TARGETS mikkelsen PACKAGE_HASH 5973b1e71a64633588eecdb5b5c06ca0081f7be97230f6ef64365cbda315b9c8) ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-linux TARGETS googletest PACKAGE_HASH 7b7ad330f369450c316a4c4592d17fbb4c14c731c95bd8f37757203e8c2bbc1b) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index e80956530a..631c42784a 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -21,7 +21,6 @@ ly_associate_package(PACKAGE_NAME azslc-1.7.23-rev1-multiplatform ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform TARGETS glad PACKAGE_HASH ff97ee9664e97d0854b52a3734c2289329d9f2b4cd69478df6d0ca1f1c9392ee) ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux_core PACKAGE_HASH c8c13cf7bc351643e1abd294d0841b24dee60e51647dff13db7aec396ad1e0b5) ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) -ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) # platform-specific: ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-mac TARGETS DirectXShaderCompilerDxc PACKAGE_HASH 3f77367dbb0342136ec4ebbd44bc1fedf7198089a0f83c5631248530769b2be6) @@ -31,7 +30,6 @@ ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-mac ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev5-mac TARGETS AWSNativeSDK PACKAGE_HASH ffb890bd9cf23afb429b9214ad9bac1bf04696f07a0ebb93c42058c482ab2f01) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev6-mac TARGETS Lua PACKAGE_HASH b9079fd35634774c9269028447562c6b712dbc83b9c64975c095fd423ff04c08) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-mac TARGETS PhysX PACKAGE_HASH 5e092a11d5c0a50c4dd99bb681a04b566a4f6f29aa08443d9bffc8dc12c27c8e) -ly_associate_package(PACKAGE_NAME etc2comp-9cd0f9cae0-rev1-mac TARGETS etc2comp PACKAGE_HASH 1966ab101c89db7ecf30984917e0a48c0d02ee0e4d65b798743842b9469c0818) ly_associate_package(PACKAGE_NAME mcpp-2.7.2_az.2-rev1-mac TARGETS mcpp PACKAGE_HASH be9558905c9c49179ef3d7d84f0a5472415acdf7fe2d76eb060d9431723ddf2e) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-mac TARGETS mikkelsen PACKAGE_HASH 83af99ca8bee123684ad254263add556f0cf49486c0b3e32e6d303535714e505) ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-mac TARGETS googletest PACKAGE_HASH cbf020d5ef976c5db8b6e894c6c63151ade85ed98e7c502729dd20172acae5a8) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 7e112c405e..428e5e9526 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -21,7 +21,6 @@ ly_associate_package(PACKAGE_NAME azslc-1.7.23-rev1-multiplatform ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform TARGETS glad PACKAGE_HASH ff97ee9664e97d0854b52a3734c2289329d9f2b4cd69478df6d0ca1f1c9392ee) ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux_core PACKAGE_HASH c8c13cf7bc351643e1abd294d0841b24dee60e51647dff13db7aec396ad1e0b5) ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) -ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) # platform-specific: ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-windows TARGETS AWSGameLiftServerSDK PACKAGE_HASH a0586b006e4def65cc25f388de17dc475e417dc1e6f9d96749777c88aa8271b0) @@ -32,7 +31,6 @@ ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-windows ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev4-windows TARGETS AWSNativeSDK PACKAGE_HASH a900e80f7259e43aed5c847afee2599ada37f29db70505481397675bcbb6c76c) ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev5-windows TARGETS Lua PACKAGE_HASH 136faccf1f73891e3fa3b95f908523187792e56f5b92c63c6a6d7e72d1158d40) ly_associate_package(PACKAGE_NAME PhysX-4.1.2.29882248-rev3-windows TARGETS PhysX PACKAGE_HASH 0c5ffbd9fa588e5cf7643721a7cfe74d0fe448bf82252d39b3a96d06dfca2298) -ly_associate_package(PACKAGE_NAME etc2comp-9cd0f9cae0-rev1-windows TARGETS etc2comp PACKAGE_HASH fc9ae937b2ec0d42d5e7d0e9e8c80e5e4d257673fb33bc9b7d6db76002117123) ly_associate_package(PACKAGE_NAME mcpp-2.7.2_az.2-rev1-windows TARGETS mcpp PACKAGE_HASH 794789aba639bfe2f4e8fcb4424d679933dd6290e523084aa0a4e287ac44acb2) ly_associate_package(PACKAGE_NAME mikkelsen-1.0.0.4-windows TARGETS mikkelsen PACKAGE_HASH 872c4d245a1c86139aa929f2b465b63ea4ea55b04ced50309135dd4597457a4e) ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-windows TARGETS googletest PACKAGE_HASH 7e8f03ae8a01563124e3daa06386f25a2b311c10bb95bff05cae6c41eff83837) From 2fb4a9d2c391b20dfc92b1aaac0b330dff0579f9 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Fri, 8 Oct 2021 13:13:52 +0100 Subject: [PATCH 194/226] Add xfail to test that failed in an unrelated development build (#4569) Signed-off-by: hultonha --- AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py index 4c5716d365..b148ffdcdb 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py @@ -25,6 +25,7 @@ TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests") class TestAtomEditorComponentsMain(object): """Holds tests for Atom components.""" + @pytest.mark.xfail(reason="This test is being marked xfail as it failed during an unrelated development run. See LYN-7530 for more details.") def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): """ Please review the hydra script run by this test for more specific test info. From 591854c384f10ffe1e2461378bcb4134e6bdb0c6 Mon Sep 17 00:00:00 2001 From: FiniteStateGit <31811688+FiniteStateGit@users.noreply.github.com> Date: Fri, 8 Oct 2021 06:05:24 -0700 Subject: [PATCH 195/226] Edit help menu lua documentation link (#4520) --- Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp b/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp index c88ea59bdb..33d8373487 100644 --- a/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp +++ b/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp @@ -395,7 +395,7 @@ namespace LUAEditor void LUAEditorMainWindow::OnLuaDocumentation() { - QDesktopServices::openUrl(QUrl("http://docs.aws.amazon.com/lumberyard/latest/developerguide/lua-scripting-intro.html")); + QDesktopServices::openUrl(QUrl("https://o3de.org/docs/user-guide/scripting/lua/")); } void LUAEditorMainWindow::OnMenuCloseCurrentWindow() From dcadfe6e1f0138d8e1bb210c6c6f9f8352591787 Mon Sep 17 00:00:00 2001 From: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Fri, 8 Oct 2021 09:20:17 -0500 Subject: [PATCH 196/226] Feature json assetloading assethints (#4554) * capture assets using SerializedAssetTracker in LoadInstanceFromPrefabDom() assign assets using asset hints where the asset ID is not valid switch up SerializedAssetTracker to store pointers instead of copies of Asset<> Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * PoC for the AssetFixUp strategy Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * clean up of PoC Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> --- .../AzCore/Asset/AssetJsonSerializer.cpp | 17 +++++++++- .../AzCore/AzCore/Asset/AssetJsonSerializer.h | 7 +++- .../Prefab/PrefabDomUtils.cpp | 32 +++++++++++++++++-- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.cpp b/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.cpp index 3a83aa5d1c..3fa3b39ca5 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.cpp @@ -173,6 +173,7 @@ namespace AZ if (assetTracker) { + assetTracker->FixUpAsset(*instance); assetTracker->AddAsset(*instance); } @@ -185,7 +186,20 @@ namespace AZ return context.Report(result, message); } - void SerializedAssetTracker::AddAsset(Asset& asset) + void SerializedAssetTracker::SetAssetFixUp(AssetFixUp assetFixUpCallback) + { + m_assetFixUpCallback = AZStd::move(assetFixUpCallback); + } + + void SerializedAssetTracker::FixUpAsset(Asset& asset) + { + if (m_assetFixUpCallback) + { + m_assetFixUpCallback(asset); + } + } + + void SerializedAssetTracker::AddAsset(Asset asset) { m_serializedAssets.emplace_back(asset); } @@ -199,5 +213,6 @@ namespace AZ { return m_serializedAssets; } + } // namespace Data } // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.h b/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.h index 879952c82d..e1b8cda00d 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.h +++ b/Code/Framework/AzCore/AzCore/Asset/AssetJsonSerializer.h @@ -39,13 +39,18 @@ namespace AZ { public: AZ_RTTI(SerializedAssetTracker, "{1E067091-8C0A-44B1-A455-6E97663F6963}"); + using AssetFixUp = AZStd::function& asset)>; - void AddAsset(Asset& asset); + void SetAssetFixUp(AssetFixUp assetFixUpCallback); + void FixUpAsset(Asset& asset); + + void AddAsset(Asset asset); AZStd::vector>& GetTrackedAssets(); const AZStd::vector>& GetTrackedAssets() const; private: AZStd::vector> m_serializedAssets; + AssetFixUp m_assetFixUpCallback; }; } // namespace Data } // namespace AZ diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp index f60759f77e..ea0fa55256 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp @@ -224,6 +224,7 @@ namespace AzToolsFramework return false; } + AZ::Data::SerializedAssetTracker* assetTracker = settings.m_metadata.Find(); referencedAssets = AZStd::move(assetTracker->GetTrackedAssets()); @@ -245,6 +246,30 @@ namespace AzToolsFramework entityIdMapper.SetEntityIdGenerationApproach(InstanceEntityIdMapper::EntityIdGenerationApproach::Random); } + // some assets may come in from the JSON serialzier with no AssetID, but have an asset hint + // this attempts to fix up the assets using the assetHint field + auto fixUpInvalidAssets = [](AZ::Data::Asset& asset) + { + if (!asset.GetId().IsValid() && !asset.GetHint().empty()) + { + AZ::Data::AssetId assetId; + AZ::Data::AssetCatalogRequestBus::BroadcastResult( + assetId, + &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, + asset.GetHint().c_str(), + AZ::Data::s_invalidAssetType, + false); + + if (assetId.IsValid()) + { + asset.Create(assetId, true); + } + } + }; + + auto tracker = AZ::Data::SerializedAssetTracker{}; + tracker.SetAssetFixUp(fixUpInvalidAssets); + AZ::JsonDeserializerSettings settings; // The InstanceEntityIdMapper is registered twice because it's used in several places during deserialization where one is // specific for the InstanceEntityIdMapper and once for the generic JsonEntityIdMapper. Because the Json Serializer's meta @@ -252,16 +277,17 @@ namespace AzToolsFramework settings.m_metadata.Add(static_cast(&entityIdMapper)); settings.m_metadata.Add(&entityIdMapper); settings.m_metadata.Create(newlyAddedEntities); + settings.m_metadata.Add(tracker); AZStd::string scratchBuffer; auto issueReportingCallback = [&scratchBuffer]( - AZStd::string_view message, AZ::JsonSerializationResult::ResultCode result, - AZStd::string_view path) -> AZ::JsonSerializationResult::ResultCode + AZStd::string_view message, AZ::JsonSerializationResult::ResultCode result, + AZStd::string_view path) -> AZ::JsonSerializationResult::ResultCode { return Internal::JsonIssueReporter(scratchBuffer, message, result, path); }; settings.m_reporting = AZStd::move(issueReportingCallback); - + AZ::JsonSerializationResult::ResultCode result = AZ::JsonSerialization::Load(instance, prefabDom, settings); AZ::Data::AssetManager::Instance().ResumeAssetRelease(); From c562f0a80719b7ddc73544d5f6fd0cd03d5a23f8 Mon Sep 17 00:00:00 2001 From: greerdv Date: Fri, 8 Oct 2021 16:56:53 +0100 Subject: [PATCH 197/226] small improvements to triangle mesh rigid body warning Signed-off-by: greerdv --- .../Components/Widgets/CardNotification.cpp | 3 +++ .../Code/Source/EditorColliderComponent.cpp | 17 +++++++++++++---- .../Code/Source/EditorRigidBodyComponent.cpp | 12 ++++++++++-- .../Code/Source/EditorRigidBodyComponent.h | 2 ++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/CardNotification.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/CardNotification.cpp index d9451949ea..d2144457c8 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/CardNotification.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/CardNotification.cpp @@ -33,6 +33,9 @@ namespace AzQtComponents titleLabel->setObjectName("Title"); titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); titleLabel->setWordWrap(true); + titleLabel->setTextFormat(Qt::RichText); + titleLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + titleLabel->setOpenExternalLinks(true); QHBoxLayout* headerLayout = new QHBoxLayout(headerFrame); headerLayout->setSizeConstraint(QLayout::SetMinimumSize); diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp index 7c07ca207c..7cc69caeb7 100644 --- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -791,6 +792,7 @@ namespace PhysX if (shapes.empty()) { m_componentWarnings.clear(); + AzToolsFramework::ToolsApplicationEvents::Bus::Broadcast( &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, AzToolsFramework::Refresh_EntireTree); return; @@ -824,9 +826,16 @@ namespace PhysX } m_componentWarnings.push_back(AZStd::string::format( - "The Physics Asset \"%s\" is a Triangle Mesh, it is not compatible with a Dynamic Rigidbody, either:\n" - "Change the PhysicsAsset to Convex Mesh or set the Rigidbody to kinematic.", + "The asset \"%s\" contains one or more triangle meshes, which are not compatible with non-kinematic dynamic " + "rigid bodies. To make the collider compatible, you can export the asset as a primitive or convex mesh, use mesh " + "decomposition when exporting the asset, or set the rigid body to kinematic. Learn more about " + "colliders.", assetPath.c_str())); + + // make sure the entity inspector scrolls so the warning is visible by marking this component as having + // new content + AzToolsFramework::EntityPropertyEditorRequestBus::Broadcast( + &AzToolsFramework::EntityPropertyEditorRequests::SetNewComponentId, GetId()); } else { @@ -839,8 +848,8 @@ namespace PhysX } AzToolsFramework::ToolsApplicationEvents::Bus::Broadcast( - &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, AzToolsFramework::Refresh_EntireTree); - + &AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, + m_componentWarnings.empty() ? AzToolsFramework::Refresh_EntireTree : AzToolsFramework::Refresh_EntireTree_NewContent); } void EditorColliderComponent::OnAssetReloaded(AZ::Data::Asset asset) diff --git a/Gems/PhysX/Code/Source/EditorRigidBodyComponent.cpp b/Gems/PhysX/Code/Source/EditorRigidBodyComponent.cpp index 447c2755c6..24b2586c9e 100644 --- a/Gems/PhysX/Code/Source/EditorRigidBodyComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorRigidBodyComponent.cpp @@ -103,7 +103,6 @@ namespace PhysX } } // namespace Internal - void EditorRigidBodyConfiguration::Reflect(AZ::ReflectContext* context) { auto serializeContext = azrtti_cast(context); @@ -310,6 +309,15 @@ namespace PhysX } } + void EditorRigidBodyComponent::OnConfigurationChanged() + { + CreateEditorWorldRigidBody(); + + // required in case the kinematic setting has changed + PhysX::EditorColliderValidationRequestBus::Event( + GetEntityId(), &PhysX::EditorColliderValidationRequestBus::Events::ValidateRigidBodyMeshGeometryType); + } + void EditorRigidBodyComponent::Reflect(AZ::ReflectContext* context) { EditorRigidBodyConfiguration::Reflect(context); @@ -336,7 +344,7 @@ namespace PhysX ->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://o3de.org/docs/user-guide/components/reference/physx/rigid-body-physics/") ->DataElement(0, &EditorRigidBodyComponent::m_config, "Configuration", "Configuration for rigid body physics.") ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorRigidBodyComponent::CreateEditorWorldRigidBody) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorRigidBodyComponent::OnConfigurationChanged) ; } } diff --git a/Gems/PhysX/Code/Source/EditorRigidBodyComponent.h b/Gems/PhysX/Code/Source/EditorRigidBodyComponent.h index 5d63ec9705..ed147ad8cb 100644 --- a/Gems/PhysX/Code/Source/EditorRigidBodyComponent.h +++ b/Gems/PhysX/Code/Source/EditorRigidBodyComponent.h @@ -120,6 +120,8 @@ namespace PhysX void InitPhysicsTickHandler(); void PrePhysicsTick(); + void OnConfigurationChanged(); + Debug::DebugDisplayDataChangedEvent::Handler m_debugDisplayDataChangeHandler; EditorRigidBodyConfiguration m_config; From e256df3f05c778d7ddad16471b18aa87fb504a54 Mon Sep 17 00:00:00 2001 From: brianherrera Date: Fri, 8 Oct 2021 10:05:50 -0700 Subject: [PATCH 198/226] Add retry config to boto3 clients This change makes the inc_build_util script more resilient against transient network issues and issues encountered during node boot-up. Signed-off-by: brianherrera --- .../build/bootstrap/incremental_build_util.py | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index 101e31b5db..5c77559085 100644 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -18,6 +18,8 @@ from contextlib import contextmanager import threading import _thread +from botocore.config import Config + DEFAULT_REGION = 'us-west-2' DEFAULT_DISK_SIZE = 300 DEFAULT_DISK_TYPE = 'gp2' @@ -173,10 +175,27 @@ def get_region_name(): def get_ec2_client(region): - client = boto3.client('ec2', region_name=region) + client_config = Config( + region_name=region, + retries={ + 'mode': 'standard' + } + ) + client = boto3.client('ec2', config=client_config) return client +def get_ec2_resource(region): + resource_config = Config( + region_name=region, + retries={ + 'mode': 'standard' + } + ) + resource = boto3.resource('ec2', config=resource_config) + return resource + + def get_ec2_instance_id(): try: instance_id = urllib.request.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read() @@ -395,14 +414,11 @@ def detach_volume_from_ec2_instance(volume, ec2_instance_id, force, timeout_dura def mount_ebs(snapshot_hint, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): - session = boto3.session.Session() - region = session.region_name - if region is None: - region = DEFAULT_REGION + region = get_region_name() ec2_client = get_ec2_client(region) ec2_instance_id = get_ec2_instance_id() ec2_availability_zone = get_availability_zone() - ec2_resource = boto3.resource('ec2', region_name=region) + ec2_resource = get_ec2_resource(region) ec2_instance = ec2_resource.Instance(ec2_instance_id) for volume in ec2_instance.volumes.all(): @@ -469,7 +485,7 @@ def mount_ebs(snapshot_hint, repository_name, project, pipeline, branch, platfor def unmount_ebs(): region = get_region_name() ec2_instance_id = get_ec2_instance_id() - ec2_resource = boto3.resource('ec2', region_name=region) + ec2_resource = get_ec2_resource(region) ec2_instance = ec2_resource.Instance(ec2_instance_id) if os.path.isfile('envinject.properties'): From a5cd1b55e4c19b133f6c55fd858c27298cb9c282 Mon Sep 17 00:00:00 2001 From: Junbo Liang <68558268+junbo75@users.noreply.github.com> Date: Fri, 8 Oct 2021 10:37:50 -0700 Subject: [PATCH 199/226] Make the access log bucket optional in the AWSCore CDK application (#4553) * Make the access log bucket optional in the AWSCore CDK application Signed-off-by: Junbo Liang --- Gems/AWSCore/cdk/README.md | 10 +++++ Gems/AWSCore/cdk/app.py | 5 ++- Gems/AWSCore/cdk/core/core_stack.py | 37 ++++++++++--------- .../cdk/example/example_resources_stack.py | 18 +++++---- .../Windows/deploy_cdk_applications.cmd | 2 +- 5 files changed, 44 insertions(+), 28 deletions(-) diff --git a/Gems/AWSCore/cdk/README.md b/Gems/AWSCore/cdk/README.md index e4c0335c9c..d50ca40279 100644 --- a/Gems/AWSCore/cdk/README.md +++ b/Gems/AWSCore/cdk/README.md @@ -64,6 +64,16 @@ To add additional dependencies, for example other CDK libraries, just add them to your `setup.py` file and rerun the `pip install -r requirements.txt` command. +## Optional Features +Server access logging is enabled by default. To disable the feature, use the following commands to synthesize and deploy this CDK application. + +``` +$ cdk synth -c disable_access_log=true --all +$ cdk deploy -c disable_access_log=true --all +``` + +See https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html for more information about server access logging. + ## Useful commands * `cdk ls` list all stacks in the app diff --git a/Gems/AWSCore/cdk/app.py b/Gems/AWSCore/cdk/app.py index 16773b5f69..9a401033ef 100755 --- a/Gems/AWSCore/cdk/app.py +++ b/Gems/AWSCore/cdk/app.py @@ -57,8 +57,9 @@ example_stack = ExampleResources( tags={Constants.O3DE_PROJECT_TAG_NAME: PROJECT_NAME, Constants.O3DE_FEATURE_TAG_NAME: FEATURE_NAME}, env=env ) -# -# Add the common stack as a dependency of the feature stack + +# Add the core stack as a dependency of the feature stack since the feature stack +# requires the core stack outputs for deployment. example_stack.add_dependency(core_construct.common_stack) app.synth() diff --git a/Gems/AWSCore/cdk/core/core_stack.py b/Gems/AWSCore/cdk/core/core_stack.py index fc1b4cf8d8..c124cb72ab 100755 --- a/Gems/AWSCore/cdk/core/core_stack.py +++ b/Gems/AWSCore/cdk/core/core_stack.py @@ -60,17 +60,6 @@ class CoreStack(core.Stack): type='TAG_FILTERS_1_0') ) - # Create an S3 bucket for Amazon S3 server access logging - # See https://docs.aws.amazon.com/AmazonS3/latest/dev/security-best-practices.html - self._server_access_logs_bucket = s3.Bucket( - self, - f'{self._project_name}-{self._feature_name}-Access-Log-Bucket', - block_public_access=s3.BlockPublicAccess.BLOCK_ALL, - encryption=s3.BucketEncryption.S3_MANAGED, - access_control=s3.BucketAccessControl.LOG_DELIVERY_WRITE - ) - self._server_access_logs_bucket.grant_read(self._admin_group) - # Define exports # Export resource group self._resource_group_output = core.CfnOutput( @@ -94,10 +83,22 @@ class CoreStack(core.Stack): export_name=f"{self._project_name}:AdminGroup", value=self._admin_group.group_arn) - # Export access log bucket name - self._server_access_logs_bucket_output = core.CfnOutput( - self, - id=f'ServerAccessLogsBucketOutput', - description='Name of the S3 bucket for storing server access logs generated by the sample CDK application(s)', - export_name=f"{self._project_name}:ServerAccessLogsBucket", - value=self._server_access_logs_bucket.bucket_name) + # Create an S3 bucket for Amazon S3 server access logging + # See https://docs.aws.amazon.com/AmazonS3/latest/dev/security-best-practices.html + if self.node.try_get_context('disable_access_log') != 'true': + self._server_access_logs_bucket = s3.Bucket( + self, + f'{self._project_name}-{self._feature_name}-Access-Log-Bucket', + block_public_access=s3.BlockPublicAccess.BLOCK_ALL, + encryption=s3.BucketEncryption.S3_MANAGED, + access_control=s3.BucketAccessControl.LOG_DELIVERY_WRITE + ) + self._server_access_logs_bucket.grant_read(self._admin_group) + + # Export access log bucket name + self._server_access_logs_bucket_output = core.CfnOutput( + self, + id=f'ServerAccessLogsBucketOutput', + description='Name of the S3 bucket for storing server access logs generated by the sample CDK application(s)', + export_name=f"{self._project_name}:ServerAccessLogsBucket", + value=self._server_access_logs_bucket.bucket_name) diff --git a/Gems/AWSCore/cdk/example/example_resources_stack.py b/Gems/AWSCore/cdk/example/example_resources_stack.py index 23bc78d8fc..ac229cb313 100755 --- a/Gems/AWSCore/cdk/example/example_resources_stack.py +++ b/Gems/AWSCore/cdk/example/example_resources_stack.py @@ -118,19 +118,23 @@ class ExampleResources(core.Stack): # https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html # 3. Enable Amazon S3 server access logging # https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html - server_access_logs_bucket = s3.Bucket.from_bucket_name( - self, - f'{self._project_name}-{self._feature_name}-ImportedAccessLogsBucket', - core.Fn.import_value(f"{self._project_name}:ServerAccessLogsBucket") - ) + server_access_logs_bucket = None + if self.node.try_get_context('disable_access_log') != 'true': + server_access_logs_bucket = s3.Bucket.from_bucket_name( + self, + f'{self._project_name}-{self._feature_name}-ImportedAccessLogsBucket', + core.Fn.import_value(f"{self._project_name}:ServerAccessLogsBucket") + ) example_bucket = s3.Bucket( self, f'{self._project_name}-{self._feature_name}-Example-S3bucket', block_public_access=s3.BlockPublicAccess.BLOCK_ALL, encryption=s3.BucketEncryption.S3_MANAGED, - server_access_logs_bucket=server_access_logs_bucket, - server_access_logs_prefix=f'{self._project_name}-{self._feature_name}-{self.region}-AccessLogs' + server_access_logs_bucket= + server_access_logs_bucket if server_access_logs_bucket else None, + server_access_logs_prefix= + f'{self._project_name}-{self._feature_name}-{self.region}-AccessLogs' if server_access_logs_bucket else None ) s3_deployment.BucketDeployment( diff --git a/scripts/build/Platform/Windows/deploy_cdk_applications.cmd b/scripts/build/Platform/Windows/deploy_cdk_applications.cmd index 2845707923..54a2485360 100644 --- a/scripts/build/Platform/Windows/deploy_cdk_applications.cmd +++ b/scripts/build/Platform/Windows/deploy_cdk_applications.cmd @@ -57,7 +57,7 @@ IF ERRORLEVEL 1 ( exit /b 1 ) -CALL :DeployCDKApplication AWSCore --all +CALL :DeployCDKApplication AWSCore --all "-c disable_access_log=true" IF ERRORLEVEL 1 ( exit /b 1 ) From 960edf857da0fce5f57ab7f0049b56fcf394c439 Mon Sep 17 00:00:00 2001 From: Pip Potter <61438964+lmbr-pip@users.noreply.github.com> Date: Fri, 8 Oct 2021 11:20:09 -0700 Subject: [PATCH 200/226] LYN-4831: AWCore code cleanup pass, fixing issues with ResolvePath (#4538) Signed-off-by: rppotter --- .../Code/Include/Private/AWSCoreModule.h | 2 +- .../Configuration/AWSCoreConfiguration.h | 2 +- .../Credential/AWSDefaultCredentialHandler.h | 2 +- .../AWSCoreAttributionConsentDialog.h | 7 ++-- .../Attribution/AWSCoreAttributionConstant.h | 2 +- .../Private/Editor/UI/AWSCoreEditorMenu.h | 2 +- .../AWSResourceMappingManager.h | 2 +- .../Public/Framework/AWSApiClientJobConfig.h | 9 ++---- .../Code/Include/Public/Framework/AWSApiJob.h | 7 ++-- .../Public/Framework/AWSApiJobConfig.h | 7 ++-- .../Public/Framework/AWSApiRequestJob.h | 6 ++-- .../Public/Framework/HttpClientComponent.h | 4 +-- .../Include/Public/Framework/HttpRequestJob.h | 2 +- .../Public/Framework/JsonObjectHandler.h | 8 ++--- .../Include/Public/Framework/JsonWriter.h | 4 +-- .../Include/Public/Framework/RequestBuilder.h | 2 +- .../Public/Framework/ServiceClientJobConfig.h | 7 ++-- .../Public/Framework/ServiceRequestJob.h | 8 ++--- .../Framework/ServiceRequestJobConfig.h | 3 -- .../Source/AWSCoreEditorSystemComponent.cpp | 4 +-- .../AWSCoreAttributionConsentDialog.cpp | 3 +- .../Attribution/AWSCoreAttributionManager.cpp | 32 +++++++++++-------- .../Source/Editor/UI/AWSCoreEditorMenu.cpp | 4 +-- .../Code/Source/Framework/AWSApiJob.cpp | 4 --- .../Source/Framework/MultipartFormData.cpp | 2 +- .../Code/Source/Framework/RequestBuilder.cpp | 4 +++ .../AWSResourceMappingManager.cpp | 3 +- .../AWSScriptBehaviorDynamoDB.cpp | 2 +- .../Code/Tests/AWSCoreSystemComponentTest.cpp | 2 +- .../AWSCVarCredentialHandlerTest.cpp | 2 +- .../Tests/Credential/AWSCredentialBusTest.cpp | 16 +++++----- .../AWSDefaultCredentialHandlerTest.cpp | 2 +- .../Framework/AWSApiClientJobConfigTest.cpp | 5 +++ .../Framework/ServiceClientJobConfigTest.cpp | 2 +- .../AWSResourceMappingManagerTest.cpp | 4 +-- .../AWSResourceMappingUtilsTest.cpp | 6 ++-- .../AWSScriptBehaviorDynamoDBTest.cpp | 2 +- .../AWSScriptBehaviorLambdaTest.cpp | 2 +- .../ScriptCanvas/AWSScriptBehaviorS3Test.cpp | 2 +- .../Code/Tests/TestFramework/AWSCoreFixture.h | 4 +-- 40 files changed, 91 insertions(+), 102 deletions(-) diff --git a/Gems/AWSCore/Code/Include/Private/AWSCoreModule.h b/Gems/AWSCore/Code/Include/Private/AWSCoreModule.h index ae5b424e69..f03579a0dd 100644 --- a/Gems/AWSCore/Code/Include/Private/AWSCoreModule.h +++ b/Gems/AWSCore/Code/Include/Private/AWSCoreModule.h @@ -24,7 +24,7 @@ namespace AWSCore /** * Add required SystemComponents to the SystemEntity. */ - virtual AZ::ComponentTypeList GetRequiredSystemComponents() const override; + AZ::ComponentTypeList GetRequiredSystemComponents() const override; }; } diff --git a/Gems/AWSCore/Code/Include/Private/Configuration/AWSCoreConfiguration.h b/Gems/AWSCore/Code/Include/Private/Configuration/AWSCoreConfiguration.h index 9834f9ca38..dd9f22f04d 100644 --- a/Gems/AWSCore/Code/Include/Private/Configuration/AWSCoreConfiguration.h +++ b/Gems/AWSCore/Code/Include/Private/Configuration/AWSCoreConfiguration.h @@ -42,7 +42,7 @@ namespace AWSCore AWSCoreConfiguration(); - ~AWSCoreConfiguration() = default; + ~AWSCoreConfiguration() override = default; void ActivateConfig(); void DeactivateConfig(); diff --git a/Gems/AWSCore/Code/Include/Private/Credential/AWSDefaultCredentialHandler.h b/Gems/AWSCore/Code/Include/Private/Credential/AWSDefaultCredentialHandler.h index 7f021f5748..068addfc24 100644 --- a/Gems/AWSCore/Code/Include/Private/Credential/AWSDefaultCredentialHandler.h +++ b/Gems/AWSCore/Code/Include/Private/Credential/AWSDefaultCredentialHandler.h @@ -23,7 +23,7 @@ namespace AWSCore { public: AWSDefaultCredentialHandler(); - ~AWSDefaultCredentialHandler() = default; + ~AWSDefaultCredentialHandler() override = default; //! Activate handler and its credentials provider, make sure activation //! invoked after AWSNativeSDK init to avoid memory leak diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConsentDialog.h b/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConsentDialog.h index c2194ccfb4..8a3445c742 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConsentDialog.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConsentDialog.h @@ -15,13 +15,12 @@ namespace AWSCore { //! Defines AWSCoreAttributionConsent QT dialog as QT message box. - class AWSCoreAttributionConsentDialog : - public QMessageBox + class AWSCoreAttributionConsentDialog + : public QMessageBox { public: AZ_CLASS_ALLOCATOR(AWSCoreAttributionConsentDialog, AZ::SystemAllocator, 0); AWSCoreAttributionConsentDialog(); - virtual ~AWSCoreAttributionConsentDialog() = default; - + ~AWSCoreAttributionConsentDialog() override = default; }; } // namespace AWSCore diff --git a/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConstant.h b/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConstant.h index e8a034e8e9..49c533cef5 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConstant.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/Attribution/AWSCoreAttributionConstant.h @@ -18,4 +18,4 @@ namespace AWSCore static constexpr char AwsAttributionAttributeKeyActiveAWSGems[] = "aws_gems"; static constexpr char AwsAttributionAttributeKeyTimestamp[] = "timestamp"; -} // namespace AWSCOre +} // namespace AWSCore diff --git a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h index 39e96517a7..62f91d36ef 100644 --- a/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h +++ b/Gems/AWSCore/Code/Include/Private/Editor/UI/AWSCoreEditorMenu.h @@ -34,7 +34,7 @@ namespace AWSCore "Failed to launch Resource Mapping Tool, please check logs for details."; AWSCoreEditorMenu(const QString& text); - ~AWSCoreEditorMenu(); + ~AWSCoreEditorMenu() override; private: QAction* AddExternalLinkAction(const AZStd::string& name, const AZStd::string& url, const AZStd::string& icon = ""); diff --git a/Gems/AWSCore/Code/Include/Private/ResourceMapping/AWSResourceMappingManager.h b/Gems/AWSCore/Code/Include/Private/ResourceMapping/AWSResourceMappingManager.h index fbc37622bf..27ff275630 100644 --- a/Gems/AWSCore/Code/Include/Private/ResourceMapping/AWSResourceMappingManager.h +++ b/Gems/AWSCore/Code/Include/Private/ResourceMapping/AWSResourceMappingManager.h @@ -71,7 +71,7 @@ namespace AWSCore }; AWSResourceMappingManager(); - ~AWSResourceMappingManager() = default; + ~AWSResourceMappingManager() override = default; void ActivateManager(); void DeactivateManager(); diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiClientJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiClientJobConfig.h index e991b2af7e..d14509550e 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiClientJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiClientJobConfig.h @@ -64,9 +64,6 @@ namespace AWSCore /// Initialize an AwsApiClientJobConfig object. /// - /// \param DefaultConfigType - the type of the config object from which - /// default values will be taken. - /// /// \param defaultConfig - the config object that provides values when /// no override has been set in this object. The default is nullptr, which /// will cause a default value to be used. @@ -83,10 +80,10 @@ namespace AWSCore } } - virtual ~AwsApiClientJobConfig() = default; + ~AwsApiClientJobConfig() override = default; /// Gets a client initialized used currently applied settings. If - /// any settings change after first use, code must call + /// any settings change after first use, code must call /// ApplySettings before those changes will take effect. std::shared_ptr GetClient() override { @@ -112,7 +109,7 @@ namespace AWSCore } else { - // If no explict credenitals are provided then AWS C++ SDK will perform standard search + // If no explicit credentials are provided then AWS C++ SDK will perform standard search return std::make_shared(Aws::Auth::AWSCredentials(), GetClientConfiguration()); } } diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJob.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJob.h index 00949011cb..93fc75feed 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJob.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJob.h @@ -14,14 +14,12 @@ namespace AWSCore { - - /// Base class for all AWS jobs. Primarily exists so that + /// Base class for all AWS jobs. Primarily exists so that /// AwsApiJob::s_config can be used for settings that apply to /// all AWS jobs. class AwsApiJob : public AZ::Job { - public: // To use a different allocator, extend this class and use this macro. AZ_CLASS_ALLOCATOR(AwsApiJob, AZ::SystemAllocator, 0); @@ -33,11 +31,10 @@ namespace AWSCore protected: AwsApiJob(bool isAutoDelete, IConfig* config = GetDefaultConfig()); - virtual ~AwsApiJob(); + ~AwsApiJob() override = default; /// Used for error messages. static const char* COMPONENT_DISPLAY_NAME; - }; } // namespace AWSCore diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h index 0f25c648d0..516b42c0dd 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiJobConfig.h @@ -96,9 +96,6 @@ namespace AWSCore /// Initialize an AwsApiClientJobConfig object. /// - /// \param DefaultConfigType - the type of the config object from which - /// default values will be taken. - /// /// \param defaultConfig - the config object that provides values when /// no override has been set in this object. The default is nullptr, which /// will cause a default value to be used. @@ -146,7 +143,7 @@ namespace AWSCore #endif Override caFile; - /// Applys settings changes made after first use. + /// Applies settings changes made after first use. virtual void ApplySettings(); ////////////////////////////////////////////////////////////////////////// @@ -217,7 +214,7 @@ namespace AWSCore : protected AWSCoreNotificationsBus::Handler { public: - ~AwsApiJobConfigHolder() + ~AwsApiJobConfigHolder() override { AWSCoreNotificationsBus::Handler::BusDisconnect(); } diff --git a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiRequestJob.h b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiRequestJob.h index c189e94f22..80ac6657ed 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/AWSApiRequestJob.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/AWSApiRequestJob.h @@ -145,10 +145,10 @@ namespace AWSCore AWS_API_REQUEST_TRAITS_TEMPLATE_DEFINITION_HELPER typename AWS_API_REQUEST_TRAITS_TEMPLATE_INSTANCE_HELPER::AsyncFunctionType AWS_API_REQUEST_TRAITS_TEMPLATE_INSTANCE_HELPER::AsyncFunction = _AsyncFunction; - /// Macro that simplifies the declaration of an AwsRequstJob that has a result. + /// Macro that simplifies the declaration of an AwsRequestJob that has a result. #define AWS_API_REQUEST_JOB(SERVICE, REQUEST) AWSCore::AwsApiRequestJob -/// Macro that simplifies the declaration of an AwsRequstJob that has no result. +/// Macro that simplifies the declaration of an AwsRequestJob that has no result. #define AWS_API_REQUEST_JOB_NO_RESULT(SERVICE, REQUEST) AWSCore::AwsApiRequestJob /// An Az::Job that that executes a specific AWS request. @@ -257,7 +257,7 @@ namespace AWSCore /// of request data until your running on the job's worker thread, /// instead of setting the request data before calling Start. /// - /// \param true if the request should be made. + /// \return true if the request should be made. virtual bool PrepareRequest() { return true; diff --git a/Gems/AWSCore/Code/Include/Public/Framework/HttpClientComponent.h b/Gems/AWSCore/Code/Include/Public/Framework/HttpClientComponent.h index f936e7f107..48b59cc56a 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/HttpClientComponent.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/HttpClientComponent.h @@ -39,7 +39,7 @@ namespace AWSCore : public AZ::ComponentBus { public: - virtual ~HttpClientComponentNotifications() {} + ~HttpClientComponentNotifications() override = default; virtual void OnHttpRequestSuccess(int responseCode, AZStd::string responseBody) {} virtual void OnHttpRequestFailure(int responseCode) {} }; @@ -55,7 +55,7 @@ namespace AWSCore { public: AZ_COMPONENT(HttpClientComponent, "{23ECDBDF-129A-4670-B9B4-1E0B541ACD61}"); - virtual ~HttpClientComponent() = default; + ~HttpClientComponent() override = default; void Init() override; void Activate() override; diff --git a/Gems/AWSCore/Code/Include/Public/Framework/HttpRequestJob.h b/Gems/AWSCore/Code/Include/Public/Framework/HttpRequestJob.h index 60bb0ffd34..b277340be9 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/HttpRequestJob.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/HttpRequestJob.h @@ -178,7 +178,7 @@ namespace AWSCore }; /// Override to process the response to the HTTP request before callbacks are fired. - /// WARNING: This gets called on the job's thread, so observe thread safety precations. + /// WARNING: This gets called on the job's thread, so observe thread safety precautions. virtual void ProcessResponse(const std::shared_ptr& response) { AZ_UNUSED(response); diff --git a/Gems/AWSCore/Code/Include/Public/Framework/JsonObjectHandler.h b/Gems/AWSCore/Code/Include/Public/Framework/JsonObjectHandler.h index 57eabe3593..e86db54bbf 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/JsonObjectHandler.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/JsonObjectHandler.h @@ -29,24 +29,24 @@ namespace AWSCore Ch Peek() const { int c = m_is.peek(); - return c == std::char_traits::eof() ? '\0' : (Ch)c; + return c == std::char_traits::eof() ? '\0' : static_cast(c); } Ch Take() { int c = m_is.get(); - return c == std::char_traits::eof() ? '\0' : (Ch)c; + return c == std::char_traits::eof() ? '\0' : static_cast(c); } size_t Tell() const { - return (size_t)m_is.tellg(); + return static_cast(m_is.tellg()); } Ch* PutBegin() { AZ_Assert(false, "Not Implemented"); - return 0; + return nullptr; } void Put(Ch) diff --git a/Gems/AWSCore/Code/Include/Public/Framework/JsonWriter.h b/Gems/AWSCore/Code/Include/Public/Framework/JsonWriter.h index 8b3f4d55b2..261907b7ec 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/JsonWriter.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/JsonWriter.h @@ -161,7 +161,7 @@ namespace AWSCore } /// Write JSON format content directly to the writer's output stream. - /// This can be used to efficently output static content. + /// This can be used to efficiently output static content. bool WriteJson(const Ch* json) { if (json) @@ -182,7 +182,7 @@ namespace AWSCore } /// Write an object. The object can implement a WriteJson function - /// or you can provide an GobalWriteJson template function + /// or you can provide an GlobalWriteJson template function /// specialization. template bool Object(const ObjectType& obj) diff --git a/Gems/AWSCore/Code/Include/Public/Framework/RequestBuilder.h b/Gems/AWSCore/Code/Include/Public/Framework/RequestBuilder.h index 1e4b7c34c2..c12e8b1d5c 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/RequestBuilder.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/RequestBuilder.h @@ -36,7 +36,7 @@ namespace AWSCore class RequestBuilder { public: - RequestBuilder() = default; + RequestBuilder(); /// Converts the provided object to JSON and sends it as the /// body of the request. The object can implement the following diff --git a/Gems/AWSCore/Code/Include/Public/Framework/ServiceClientJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/ServiceClientJobConfig.h index 9082498e96..89141bb492 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/ServiceClientJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/ServiceClientJobConfig.h @@ -20,7 +20,7 @@ namespace AWSCore { public: - virtual const AZStd::string GetServiceUrl() = 0; + virtual AZStd::string GetServiceUrl() = 0; }; /// Encapsulates what code needs to know about a service in order to @@ -81,9 +81,6 @@ namespace AWSCore /// Initialize an ServiceClientJobConfig object. /// - /// \param DefaultConfigType - the type of the config object from which - /// default values will be taken. - /// /// \param defaultConfig - the config object that provides values when /// no override has been set in this object. The default is nullptr, which /// will cause a default value to be used. @@ -102,7 +99,7 @@ namespace AWSCore /// This implementation assumes the caller will cache this value as /// needed. See it's use in ServiceRequestJobConfig. - const AZStd::string GetServiceUrl() override + AZStd::string GetServiceUrl() override { if (endpointOverride.has_value()) { diff --git a/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJob.h b/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJob.h index cd0686c2d0..c24387a7ba 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJob.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJob.h @@ -119,7 +119,7 @@ namespace AWSCore Error error; /// Determines if the AWS credentials, as supplied by the credentialsProvider from - /// the ServiceReqestJobConfig object (which defaults to the user's credentials), + /// the ServiceRequestJobConfig object (which defaults to the user's credentials), /// are used to sign the request. The default is true. Override this and return false /// if calling a public API and want to avoid the overhead of signing requests. bool UseAWSCredentials() { @@ -565,13 +565,11 @@ namespace AWSCore } AZStd::string requestContent; - AZStd::string responseContent; - - std::istreambuf_iterator eos; std::shared_ptr requestStream = response->GetOriginatingRequest().GetContentBody(); if (requestStream) { + std::istreambuf_iterator eos; requestStream->clear(); requestStream->seekg(0); requestContent = AZStd::string{ std::istreambuf_iterator(*requestStream.get()),eos }; @@ -584,7 +582,7 @@ namespace AWSCore Aws::IOStream& responseStream = response->GetResponseBody(); responseStream.clear(); responseStream.seekg(0); - responseContent = AZStd::string{ std::istreambuf_iterator(responseStream),responseEos }; + AZStd::string responseContent = AZStd::string{ std::istreambuf_iterator(responseStream), responseEos }; responseContent = EscapePercentCharsInString(responseContent); responseStream.seekg(0); diff --git a/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJobConfig.h b/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJobConfig.h index 10b14ed5af..6c4e884f49 100644 --- a/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJobConfig.h +++ b/Gems/AWSCore/Code/Include/Public/Framework/ServiceRequestJobConfig.h @@ -44,9 +44,6 @@ namespace AWSCore /// Initialize an ServiceRequestJobConfig object. /// - /// \param DefaultConfigType - the type of the config object from which - /// default values will be taken. - /// /// \param defaultConfig - the config object that provides values when /// no override has been set in this object. The default is nullptr, which /// will cause a default value to be used. diff --git a/Gems/AWSCore/Code/Source/AWSCoreEditorSystemComponent.cpp b/Gems/AWSCore/Code/Source/AWSCoreEditorSystemComponent.cpp index f4420cb40a..a522f71084 100644 --- a/Gems/AWSCore/Code/Source/AWSCoreEditorSystemComponent.cpp +++ b/Gems/AWSCore/Code/Source/AWSCoreEditorSystemComponent.cpp @@ -79,7 +79,7 @@ namespace AWSCore QMenuBar* menuBar = mainWindow->menuBar(); QList actionList = menuBar->actions(); QAction* insertPivot = nullptr; - for (QList::iterator itr = actionList.begin(); itr != actionList.end(); itr++) + for (QList::iterator itr = actionList.begin(); itr != actionList.end(); ++itr) { if (QString::compare((*itr)->text(), EDITOR_HELP_MENU_TEXT) == 0) { @@ -88,7 +88,7 @@ namespace AWSCore } } - auto menu = m_awsCoreEditorManager->GetAWSCoreEditorMenu(); + const auto menu = m_awsCoreEditorManager->GetAWSCoreEditorMenu(); if (insertPivot) { menuBar->insertMenu(insertPivot, menu); diff --git a/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionConsentDialog.cpp b/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionConsentDialog.cpp index 85912616c2..7ec9f9ea4f 100644 --- a/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionConsentDialog.cpp +++ b/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionConsentDialog.cpp @@ -35,8 +35,7 @@ namespace AWSCore this->setDefaultButton(QMessageBox::Save); this->button(QMessageBox::Cancel)->hide(); this->setIcon(QMessageBox::Information); - QGridLayout* layout = (QGridLayout*)this->layout(); - if (layout) + if (QGridLayout* layout = static_cast(this->layout())) { layout->setVerticalSpacing(20); layout->setHorizontalSpacing(10); diff --git a/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionManager.cpp b/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionManager.cpp index 712c083e7a..3b9352d250 100644 --- a/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionManager.cpp +++ b/Gems/AWSCore/Code/Source/Editor/Attribution/AWSCoreAttributionManager.cpp @@ -68,19 +68,19 @@ namespace AWSCore AZ_Assert(fileIO, "File IO is not initialized."); // Resolve path to editor_aws_preferences.setreg - AZStd::string editorAWSPreferencesFilePath = + const AZStd::string editorAWSPreferencesFilePath = AZStd::string::format("@user@/%s/%s", AZ::SettingsRegistryInterface::RegistryFolder, EditorAWSPreferencesFileName); - AZStd::array resolvedPathAWSPreference{}; - if (!fileIO->ResolvePath(editorAWSPreferencesFilePath.c_str(), resolvedPathAWSPreference.data(), resolvedPathAWSPreference.size())) + AZ::IO::FixedMaxPath resolvedPathAWSPreference; + if (!fileIO->ResolvePath(resolvedPathAWSPreference, AZ::IO::PathView(editorAWSPreferencesFilePath))) { - AZ_Warning("AWSAttributionManager", false, "Error resolving path %s", resolvedPathAWSPreference.data()); + AZ_Warning("AWSAttributionManager", false, "Error resolving path %s", resolvedPathAWSPreference.c_str()); return; } - if (fileIO->Exists(resolvedPathAWSPreference.data())) + if (fileIO->Exists(resolvedPathAWSPreference.c_str())) { m_settingsRegistry->MergeSettingsFile( - resolvedPathAWSPreference.data(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, ""); + resolvedPathAWSPreference.String(), AZ::SettingsRegistryInterface::Format::JsonMergePatch, ""); } } @@ -136,8 +136,8 @@ namespace AWSCore return true; } - AZStd::chrono::seconds lastSendTimeStamp = AZStd::chrono::seconds(lastSendTimeStampSeconds); - AZStd::chrono::seconds secondsSinceLastSend = + const AZStd::chrono::seconds lastSendTimeStamp = AZStd::chrono::seconds(lastSendTimeStampSeconds); + const AZStd::chrono::seconds secondsSinceLastSend = AZStd::chrono::duration_cast(AZStd::chrono::system_clock::now().time_since_epoch()) - lastSendTimeStamp; if (static_cast(secondsSinceLastSend.count()) >= delayInSeconds) { @@ -154,7 +154,7 @@ namespace AWSCore if (credentialResult.result) { std::shared_ptr provider = credentialResult.result; - auto creds = provider->GetAWSCredentials(); + const auto creds = provider->GetAWSCredentials(); if (!creds.IsEmpty()) { return true; @@ -200,9 +200,13 @@ namespace AWSCore AZ_Assert(fileIO, "File IO is not initialized."); // Resolve path to editor_aws_preferences.setreg - AZStd::string editorPreferencesFilePath = AZStd::string::format("@user@/%s/%s", AZ::SettingsRegistryInterface::RegistryFolder, EditorAWSPreferencesFileName); - AZStd::array resolvedPath {}; - fileIO->ResolvePath(editorPreferencesFilePath.c_str(), resolvedPath.data(), resolvedPath.size()); + const AZStd::string editorPreferencesFilePath = AZStd::string::format("@user@/%s/%s", AZ::SettingsRegistryInterface::RegistryFolder, EditorAWSPreferencesFileName); + AZ::IO::FixedMaxPath resolvedPathAWSPreference; + if (!fileIO->ResolvePath(resolvedPathAWSPreference, AZ::IO::PathView(editorPreferencesFilePath))) + { + AZ_Warning("AWSAttributionManager", false, "Error resolving path %s", editorPreferencesFilePath.c_str()); + return; + } AZ::SettingsRegistryMergeUtils::DumperSettings dumperSettings; dumperSettings.m_prettifyOutput = true; @@ -215,14 +219,14 @@ namespace AWSCore { AZ_Warning( "AWSAttributionManager", false, R"(Unable to save changes to the Editor AWS Preferences registry file at "%s"\n)", - resolvedPath.data()); + resolvedPathAWSPreference.c_str()); return; } bool saved {}; constexpr auto configurationMode = AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY; - if (AZ::IO::SystemFile outputFile; outputFile.Open(resolvedPath.data(), configurationMode)) + if (AZ::IO::SystemFile outputFile; outputFile.Open(resolvedPathAWSPreference.c_str(), configurationMode)) { saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size(); } diff --git a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp index d55510930e..6391dd94ee 100644 --- a/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp +++ b/Gems/AWSCore/Code/Source/Editor/UI/AWSCoreEditorMenu.cpp @@ -54,7 +54,7 @@ namespace AWSCore { if (m_resourceMappingToolWatcher->IsProcessRunning()) { - m_resourceMappingToolWatcher->TerminateProcess(AZ::u32(-1)); + m_resourceMappingToolWatcher->TerminateProcess(static_cast(-1)); } m_resourceMappingToolWatcher.reset(); } @@ -214,7 +214,7 @@ namespace AWSCore QMenu* AWSCoreEditorMenu::SetAWSFeatureSubMenu(const AZStd::string& menuText) { auto actionList = this->actions(); - for (QList::iterator itr = actionList.begin(); itr != actionList.end(); itr++) + for (QList::iterator itr = actionList.begin(); itr != actionList.end(); ++itr) { if (QString::compare((*itr)->text(), menuText.c_str()) == 0) { diff --git a/Gems/AWSCore/Code/Source/Framework/AWSApiJob.cpp b/Gems/AWSCore/Code/Source/Framework/AWSApiJob.cpp index f203506edd..34581e00ff 100644 --- a/Gems/AWSCore/Code/Source/Framework/AWSApiJob.cpp +++ b/Gems/AWSCore/Code/Source/Framework/AWSApiJob.cpp @@ -22,10 +22,6 @@ namespace AWSCore { } - AwsApiJob::~AwsApiJob() - { - } - AwsApiJob::Config* AwsApiJob::GetDefaultConfig() { static AwsApiJobConfigHolder s_configHolder{}; diff --git a/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp b/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp index ff4668a62b..47059ac156 100644 --- a/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp +++ b/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp @@ -49,7 +49,7 @@ namespace AWSCore { m_fileFields.emplace_back(FileField{ std::move(fieldName), std::move(fileName) , AZStd::vector{} }); m_fileFields.back().m_fileData.reserve(length); - m_fileFields.back().m_fileData.assign((const char*)bytes, (const char*)bytes + length); + m_fileFields.back().m_fileData.assign(static_cast(bytes), static_cast(bytes) + length); } void MultipartFormData::SetCustomBoundary(AZStd::string boundary) diff --git a/Gems/AWSCore/Code/Source/Framework/RequestBuilder.cpp b/Gems/AWSCore/Code/Source/Framework/RequestBuilder.cpp index 16a5163fc7..d32ec9d039 100644 --- a/Gems/AWSCore/Code/Source/Framework/RequestBuilder.cpp +++ b/Gems/AWSCore/Code/Source/Framework/RequestBuilder.cpp @@ -10,6 +10,10 @@ namespace AWSCore { + RequestBuilder::RequestBuilder() + : m_httpMethod(Aws::Http::HttpMethod::HTTP_GET) + { + } bool RequestBuilder::SetPathParameterUnescaped(const char* key, const char* value) { diff --git a/Gems/AWSCore/Code/Source/ResourceMapping/AWSResourceMappingManager.cpp b/Gems/AWSCore/Code/Source/ResourceMapping/AWSResourceMappingManager.cpp index c3d87bff86..faec07b19e 100644 --- a/Gems/AWSCore/Code/Source/ResourceMapping/AWSResourceMappingManager.cpp +++ b/Gems/AWSCore/Code/Source/ResourceMapping/AWSResourceMappingManager.cpp @@ -26,7 +26,6 @@ namespace AWSCore : m_status(Status::NotLoaded) , m_defaultAccountId("") , m_defaultRegion("") - , m_resourceMappings() { } @@ -164,7 +163,7 @@ namespace AWSCore m_defaultRegion = jsonDocument.FindMember(ResourceMappingRegionKeyName)->value.GetString(); auto resourceMappings = jsonDocument.FindMember(ResourceMappingResourcesKeyName)->value.GetObject(); - for (auto mappingIter = resourceMappings.MemberBegin(); mappingIter != resourceMappings.MemberEnd(); mappingIter++) + for (auto mappingIter = resourceMappings.MemberBegin(); mappingIter != resourceMappings.MemberEnd(); ++mappingIter) { auto mappingValue = mappingIter->value.GetObject(); if (mappingValue.MemberCount() != 0) diff --git a/Gems/AWSCore/Code/Source/ScriptCanvas/AWSScriptBehaviorDynamoDB.cpp b/Gems/AWSCore/Code/Source/ScriptCanvas/AWSScriptBehaviorDynamoDB.cpp index 4467cc5db7..4183997d4a 100644 --- a/Gems/AWSCore/Code/Source/ScriptCanvas/AWSScriptBehaviorDynamoDB.cpp +++ b/Gems/AWSCore/Code/Source/ScriptCanvas/AWSScriptBehaviorDynamoDB.cpp @@ -71,7 +71,7 @@ namespace AWSCore [](DynamoDBGetItemRequestJob* job) // OnSuccess handler { auto item = job->result.GetItem(); - if (item.size() > 0) + if (!item.empty()) { DynamoDBAttributeValueMap result; for (const auto& itermPair : item) diff --git a/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp b/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp index f9fff631f4..648648e945 100644 --- a/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp +++ b/Gems/AWSCore/Code/Tests/AWSCoreSystemComponentTest.cpp @@ -40,7 +40,7 @@ public: AWSCoreNotificationsBus::Handler::BusConnect(); } - ~AWSCoreNotificationsBusMock() + ~AWSCoreNotificationsBusMock() override { AWSCoreNotificationsBus::Handler::BusDisconnect(); } diff --git a/Gems/AWSCore/Code/Tests/Credential/AWSCVarCredentialHandlerTest.cpp b/Gems/AWSCore/Code/Tests/Credential/AWSCVarCredentialHandlerTest.cpp index 73120d4adc..244c945af9 100644 --- a/Gems/AWSCore/Code/Tests/Credential/AWSCVarCredentialHandlerTest.cpp +++ b/Gems/AWSCore/Code/Tests/Credential/AWSCVarCredentialHandlerTest.cpp @@ -18,7 +18,7 @@ class AWSCVarCredentialHandlerTest { public: AWSCVarCredentialHandlerTest() = default; - virtual ~AWSCVarCredentialHandlerTest() = default; + ~AWSCVarCredentialHandlerTest() override = default; void SetUp() override { diff --git a/Gems/AWSCore/Code/Tests/Credential/AWSCredentialBusTest.cpp b/Gems/AWSCore/Code/Tests/Credential/AWSCredentialBusTest.cpp index 238b5c819c..82c8c84b81 100644 --- a/Gems/AWSCore/Code/Tests/Credential/AWSCredentialBusTest.cpp +++ b/Gems/AWSCore/Code/Tests/Credential/AWSCredentialBusTest.cpp @@ -36,14 +36,14 @@ public: m_credentialsProvider.reset(); } - int GetCredentialHandlerOrder() const + int GetCredentialHandlerOrder() const override { return 1; } - std::shared_ptr GetCredentialsProvider() + std::shared_ptr GetCredentialsProvider() override { - m_handlerCounter++; + ++m_handlerCounter; return m_credentialsProvider; } @@ -72,14 +72,14 @@ public: m_credentialsProvider.reset(); } - int GetCredentialHandlerOrder() const + int GetCredentialHandlerOrder() const override { return 2; } - std::shared_ptr GetCredentialsProvider() + std::shared_ptr GetCredentialsProvider() override { - m_handlerCounter++; + ++m_handlerCounter; return m_credentialsProvider; } @@ -115,10 +115,10 @@ public: TEST_F(AWSCredentialBusTest, GetCredentialsProvider_CallFromMultithread_GetExpectedCredentialsProviderAndNumberOfCalls) { - int testThreadNumber = 10; + constexpr int testThreadNumber = 10; AZStd::atomic actualEbusCalls = 0; AZStd::vector testThreadPool; - for (int index = 0; index < testThreadNumber; index++) + for (int index = 0; index < testThreadNumber; ++index) { testThreadPool.emplace_back(AZStd::thread([&]() { AWSCredentialResult result; diff --git a/Gems/AWSCore/Code/Tests/Credential/AWSDefaultCredentialHandlerTest.cpp b/Gems/AWSCore/Code/Tests/Credential/AWSDefaultCredentialHandlerTest.cpp index b3e2ec5738..af03afb337 100644 --- a/Gems/AWSCore/Code/Tests/Credential/AWSDefaultCredentialHandlerTest.cpp +++ b/Gems/AWSCore/Code/Tests/Credential/AWSDefaultCredentialHandlerTest.cpp @@ -49,7 +49,7 @@ class AWSDefaultCredentialHandlerTest { public: AWSDefaultCredentialHandlerTest() = default; - virtual ~AWSDefaultCredentialHandlerTest() = default; + ~AWSDefaultCredentialHandlerTest() override = default; void SetUp() override { diff --git a/Gems/AWSCore/Code/Tests/Framework/AWSApiClientJobConfigTest.cpp b/Gems/AWSCore/Code/Tests/Framework/AWSApiClientJobConfigTest.cpp index b49cdc6a71..db433062ad 100644 --- a/Gems/AWSCore/Code/Tests/Framework/AWSApiClientJobConfigTest.cpp +++ b/Gems/AWSCore/Code/Tests/Framework/AWSApiClientJobConfigTest.cpp @@ -23,6 +23,11 @@ class AWSApiClientJobConfigTest , public AWSCredentialRequestBus::Handler { public: + AWSApiClientJobConfigTest() + : m_credentialHandlerCounter(0) + { + } + void SetUp() override { AWSNativeSDKInit::InitializationManager::InitAwsApi(); diff --git a/Gems/AWSCore/Code/Tests/Framework/ServiceClientJobConfigTest.cpp b/Gems/AWSCore/Code/Tests/Framework/ServiceClientJobConfigTest.cpp index 7a45ffb739..9bc43482cd 100644 --- a/Gems/AWSCore/Code/Tests/Framework/ServiceClientJobConfigTest.cpp +++ b/Gems/AWSCore/Code/Tests/Framework/ServiceClientJobConfigTest.cpp @@ -84,7 +84,7 @@ class ServiceClientJobConfigTest void ReloadConfigFile(bool reloadConfigFileName = false) override { AZ_UNUSED(reloadConfigFileName); - }; + } }; TEST_F(ServiceClientJobConfigTest, GetServiceUrl_CreateServiceWithServiceNameOnly_GetExpectedFeatureServiceUrl) diff --git a/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingManagerTest.cpp b/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingManagerTest.cpp index d438a99f83..fb03dea4c0 100644 --- a/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingManagerTest.cpp +++ b/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingManagerTest.cpp @@ -217,7 +217,7 @@ TEST_F(AWSResourceMappingManagerTest, ActivateManager_ParseValidConfigFile_Confi CreateTestConfigFile(TEST_VALID_RESOURCE_MAPPING_CONFIG_FILE); m_resourceMappingManager->ActivateManager(); - int testThreadNumber = 10; + constexpr int testThreadNumber = 10; AZStd::atomic actualEbusCalls = 0; AZStd::vector testThreadPool; for (int index = 0; index < testThreadNumber; index++) @@ -226,7 +226,7 @@ TEST_F(AWSResourceMappingManagerTest, ActivateManager_ParseValidConfigFile_Confi AZStd::string actualAccountId; AWSResourceMappingRequestBus::BroadcastResult(actualAccountId, &AWSResourceMappingRequests::GetDefaultAccountId); EXPECT_FALSE(actualAccountId.empty()); - actualEbusCalls++; + ++actualEbusCalls; })); } diff --git a/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingUtilsTest.cpp b/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingUtilsTest.cpp index 9c23615917..f1a90aa2ae 100644 --- a/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingUtilsTest.cpp +++ b/Gems/AWSCore/Code/Tests/ResourceMapping/AWSResourceMappingUtilsTest.cpp @@ -44,19 +44,19 @@ TEST_F(AWSResourceMappingUtilsTest, FormatRESTApiUrl_PassingInvalidRESTApiId_Ret { auto actualUrl = AWSResourceMappingUtils::FormatRESTApiUrl("", TEST_VALID_RESTAPI_REGION, TEST_VALID_RESTAPI_STAGE); - EXPECT_TRUE(actualUrl == ""); + EXPECT_TRUE(actualUrl.empty()); } TEST_F(AWSResourceMappingUtilsTest, FormatRESTApiUrl_PassingInvalidRESTApiRegion_ReturnEmptyResult) { auto actualUrl = AWSResourceMappingUtils::FormatRESTApiUrl(TEST_VALID_RESTAPI_ID, "", TEST_VALID_RESTAPI_STAGE); - EXPECT_TRUE(actualUrl == ""); + EXPECT_TRUE(actualUrl.empty()); } TEST_F(AWSResourceMappingUtilsTest, FormatRESTApiUrl_PassingInvalidRESTApiStage_ReturnEmptyResult) { auto actualUrl = AWSResourceMappingUtils::FormatRESTApiUrl(TEST_VALID_RESTAPI_ID, TEST_VALID_RESTAPI_REGION, ""); - EXPECT_TRUE(actualUrl == ""); + EXPECT_TRUE(actualUrl.empty()); } diff --git a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorDynamoDBTest.cpp b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorDynamoDBTest.cpp index 52b91c306d..e42e270bc2 100644 --- a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorDynamoDBTest.cpp +++ b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorDynamoDBTest.cpp @@ -23,7 +23,7 @@ public: AWSScriptBehaviorDynamoDBNotificationBus::Handler::BusConnect(); } - ~AWSScriptBehaviorDynamoDBNotificationBusHandlerMock() + ~AWSScriptBehaviorDynamoDBNotificationBusHandlerMock() override { AWSScriptBehaviorDynamoDBNotificationBus::Handler::BusDisconnect(); } diff --git a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorLambdaTest.cpp b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorLambdaTest.cpp index 299f4a95d6..42ccd6eddc 100644 --- a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorLambdaTest.cpp +++ b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorLambdaTest.cpp @@ -22,7 +22,7 @@ public: AWSScriptBehaviorLambdaNotificationBus::Handler::BusConnect(); } - ~AWSScriptBehaviorLambdaNotificationBusHandlerMock() + ~AWSScriptBehaviorLambdaNotificationBusHandlerMock() override { AWSScriptBehaviorLambdaNotificationBus::Handler::BusDisconnect(); } diff --git a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorS3Test.cpp b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorS3Test.cpp index 118174576c..34a0166e32 100644 --- a/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorS3Test.cpp +++ b/Gems/AWSCore/Code/Tests/ScriptCanvas/AWSScriptBehaviorS3Test.cpp @@ -24,7 +24,7 @@ public: AWSScriptBehaviorS3NotificationBus::Handler::BusConnect(); } - ~AWSScriptBehaviorS3NotificationBusHandlerMock() + ~AWSScriptBehaviorS3NotificationBusHandlerMock() override { AWSScriptBehaviorS3NotificationBus::Handler::BusDisconnect(); } diff --git a/Gems/AWSCore/Code/Tests/TestFramework/AWSCoreFixture.h b/Gems/AWSCore/Code/Tests/TestFramework/AWSCoreFixture.h index a5c2bf6475..1d14484387 100644 --- a/Gems/AWSCore/Code/Tests/TestFramework/AWSCoreFixture.h +++ b/Gems/AWSCore/Code/Tests/TestFramework/AWSCoreFixture.h @@ -107,8 +107,8 @@ class AWSCoreFixture : public UnitTest::ScopedAllocatorSetupFixture { public: - AWSCoreFixture() {} - virtual ~AWSCoreFixture() = default; + AWSCoreFixture() = default; + ~AWSCoreFixture() override = default; void SetUp() override { From 73f8537030aaa5efd126c991e28e61c803fc560e Mon Sep 17 00:00:00 2001 From: Steve Pham <82231385+spham-amzn@users.noreply.github.com> Date: Fri, 8 Oct 2021 11:41:46 -0700 Subject: [PATCH 201/226] Fix Issue saving new assets in Asset Editor on Linux (#4537) * Add helper function to apply a selected file filter from a file dialog to the result filename if needed * Add platform traits to restrict the use of the helper function on platforms that need to apply it * Fix building of file filters of multiple extensions for a file type Signed-off-by: Steve Pham --- .../Components/Widgets/FileDialog.cpp | 92 ++++++++++++++++++- .../Components/Widgets/FileDialog.h | 6 ++ .../Platform/Linux/platform_linux_files.cmake | 2 + .../Platform/Mac/platform_mac_files.cmake | 2 + .../Windows/platform_windows_files.cmake | 2 + .../AzQtComponents/Tests/FileDialogTests.cpp | 65 +++++++++++++ .../azqtcomponents_testing_files.cmake | 1 + Code/Framework/AzQtComponents/CMakeLists.txt | 5 + .../AzQtComponents_Traits_Linux.h | 11 +++ .../AzQtComponents_Traits_Platform.h | 10 ++ .../AzQtComponents_Traits_Mac.h | 11 +++ .../AzQtComponents_Traits_Platform.h | 10 ++ .../AzQtComponents_Traits_Platform.h | 10 ++ .../AzQtComponents_Traits_Windows.h | 11 +++ .../AssetEditor/AssetEditorWidget.cpp | 2 +- 15 files changed, 234 insertions(+), 6 deletions(-) create mode 100644 Code/Framework/AzQtComponents/AzQtComponents/Tests/FileDialogTests.cpp create mode 100644 Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Linux.h create mode 100644 Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Platform.h create mode 100644 Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Mac.h create mode 100644 Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Platform.h create mode 100644 Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Platform.h create mode 100644 Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Windows.h diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.cpp index d2d773ff93..3061ceedd5 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.cpp @@ -6,10 +6,11 @@ * */ +#include #include #include -#include +#include namespace AzQtComponents { @@ -24,7 +25,12 @@ namespace AzQtComponents // Trigger Qt's save filename dialog // If filePath isn't empty, it means we are prompting again because the filename was invalid, // so pass it instead of the directory so the filename is pre-filled in for the user - filePath = QFileDialog::getSaveFileName(parent, caption, (filePath.isEmpty()) ? dir : filePath, filter, selectedFilter, options); + QString localSelectedFilter; + filePath = QFileDialog::getSaveFileName(parent, caption, (filePath.isEmpty()) ? dir : filePath, filter, &localSelectedFilter, options); + if (selectedFilter) + { + *selectedFilter = localSelectedFilter; + } if (!filePath.isEmpty()) { @@ -32,15 +38,39 @@ namespace AzQtComponents QString fileName = fileInfo.fileName(); // Check if the filename has any invalid characters - QRegExp validFileNameRegex("^[a-zA-Z0-9_\\-./]*$"); - shouldPromptAgain = !validFileNameRegex.exactMatch(fileName); + QRegularExpression validFileNameRegex("^[a-zA-Z0-9_\\-./]*$"); + QRegularExpressionMatch validFileNameMatch = validFileNameRegex.match(fileName); // If the filename had invalid characters, then show a warning message and then we will re-prompt the save filename dialog - if (shouldPromptAgain) + if (!validFileNameMatch.hasMatch()) { QMessageBox::warning(parent, QObject::tr("Invalid filename"), QObject::tr("O3DE assets are restricted to alphanumeric characters, hyphens (-), underscores (_), and dots (.)\n\n%1").arg(fileName)); + shouldPromptAgain = true; + continue; + } + else + { + shouldPromptAgain = false; + } +#if AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_APPLY_MISSING_EXTENSION + // If a filter was selected, then make sure that the resulting filename ends with that extension. On systems that use the default QFileDialog, + // the extension is not guaranteed to be set in the resulting filename + if (FileDialog::ApplyMissingExtension(localSelectedFilter, filePath)) + { + // If an extension had to be applied, then the file dialog did not handle the case of overwriting existing files. + // We need to check that condition before we proceed + QFileInfo updatedFilePath(filePath); + + if (updatedFilePath.exists()) + { + QMessageBox::StandardButton overwriteSelection = QMessageBox::question(parent, + QObject::tr("File exists"), + QObject::tr("%1 exists. Do you want to overwrite the existing file?").arg(updatedFilePath.fileName())); + shouldPromptAgain = (overwriteSelection == QMessageBox::No); + } } +#endif // AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_APPLY_MISSING_EXTENSION } else { @@ -51,4 +81,56 @@ namespace AzQtComponents return filePath; } + + bool FileDialog::ApplyMissingExtension(const QString& selectedFilter, QString& filePath) + { + if (selectedFilter.isEmpty()) + { + return false; + } + + // According to the QT documentation for QFileDialog, the selected filter will come in the form + // ( .. ) + // + // For example: + // "Images (*.gif *.png *.jpg)" + // + // Extract the contents of the (s) inside the parenthesis and split them based on a whitespace or comma + const QRegularExpression filterContent(".*\\((?[^\\)]+)\\)"); + QRegularExpressionMatch filterContentMatch = filterContent.match(selectedFilter); + if (!filterContentMatch.hasMatch()) + { + return false; + } + QString filterExtensionsString = filterContentMatch.captured("filters"); + QStringList filterExtensionsFull = filterExtensionsString.split(" ", Qt::SkipEmptyParts); + if (filterExtensionsFull.length() <= 0) + { + return false; + } + + // If there are multiple suffixes in the selected filter, then default to the first one if a suffix needs to be appended + QString defaultSuffix = filterExtensionsFull[0].mid(1); + + // Iterate through the filter patterns to see if the current filename matches + QFileInfo fileInfo(filePath); + bool extensionNeeded = true; + for (const QString& filterExtensionFull : filterExtensionsFull) + { + QString wildcardExpression = QRegularExpression::wildcardToRegularExpression(filterExtensionFull); + QRegularExpression filterPattern(wildcardExpression, AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_FILTER_CASE_SENSITIVITY); + QRegularExpressionMatch filterPatternMatch = filterPattern.match(fileInfo.fileName()); + if (filterPatternMatch.hasMatch()) + { + // The filename matches one of the filter patterns already, the extension does not need to be added to the filename + extensionNeeded = false; + } + } + if (extensionNeeded) + { + // If the current (if any) suffix does not match, automatically add the default suffix for the selected filter + filePath.append(defaultSuffix); + } + return extensionNeeded; + } } // namespace AzQtComponents diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.h b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.h index 6b63404949..9f27431400 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.h +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/FileDialog.h @@ -24,6 +24,12 @@ namespace AzQtComponents static QString GetSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(), const QString& dir = QString(), const QString& filter = QString(), QString* selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options()); + + //! Helper method that parses a selected filter from Qt's QFileDialog::getSaveFileName and applies the + //! selected filter's extension to the filePath if it doesnt already have the extension. This is needed + //! on platforms that do not have a default file dialog (These platforms uses Qt's custom file dialog which will + //! not apply the filter's extension automatically on user entered filenames) + static bool ApplyMissingExtension(const QString& selectedFilter, QString& filePath); }; } // namespace AzQtComponents diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Linux/platform_linux_files.cmake b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Linux/platform_linux_files.cmake index 7f204e5022..ec71d7b508 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Linux/platform_linux_files.cmake +++ b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Linux/platform_linux_files.cmake @@ -12,4 +12,6 @@ set(FILES ../../Utilities/QtWindowUtilities_linux.cpp ../../Utilities/ScreenGrabber_linux.cpp ../../../Platform/Linux/AzQtComponents/Components/StyledDockWidget_Linux.cpp + ../../../Platform/Linux/AzQtComponents/AzQtComponents_Traits_Linux.h + ../../../Platform/Linux/AzQtComponents/AzQtComponents_Traits_Platform.h ) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Mac/platform_mac_files.cmake b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Mac/platform_mac_files.cmake index 50084d7a1e..18f9479289 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Mac/platform_mac_files.cmake +++ b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Mac/platform_mac_files.cmake @@ -12,4 +12,6 @@ set(FILES ../../Utilities/QtWindowUtilities_mac.mm ../../Utilities/ScreenGrabber_mac.mm ../../../Platform/Mac/AzQtComponents/Components/StyledDockWidget_Mac.cpp + ../../../Platform/Mac/AzQtComponents/AzQtComponents_Traits_Mac.h + ../../../Platform/Mac/AzQtComponents/AzQtComponents_Traits_Platform.h ) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Windows/platform_windows_files.cmake b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Windows/platform_windows_files.cmake index 37d1d0f390..ca4145ef35 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Platform/Windows/platform_windows_files.cmake +++ b/Code/Framework/AzQtComponents/AzQtComponents/Platform/Windows/platform_windows_files.cmake @@ -17,4 +17,6 @@ set(FILES ../../Components/TitleBarOverdrawScreenHandler_win.h ../../Components/TitleBarOverdrawScreenHandler_win.cpp ../../../Platform/Windows/AzQtComponents/Components/StyledDockWidget_Windows.cpp + ../../../Platform/Windows/AzQtComponents/AzQtComponents_Traits_Windows.h + ../../../Platform/Windows/AzQtComponents/AzQtComponents_Traits_Platform.h ) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Tests/FileDialogTests.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Tests/FileDialogTests.cpp new file mode 100644 index 0000000000..e3dc4b4f0d --- /dev/null +++ b/Code/Framework/AzQtComponents/AzQtComponents/Tests/FileDialogTests.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +TEST(AzQtComponents, ApplyMissingExtension_UpdateMissingExtension_Success) +{ + const QString textFiler{"Text Files (*.txt)"}; + QString testPath{"testFile"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_TRUE(result); + EXPECT_STRCASEEQ("testFile.txt", testPath.toUtf8().constData()); +} + +TEST(AzQtComponents, ApplyMissingExtension_NoUpdateExistingExtension_Success) +{ + const QString textFiler{"Text Files (*.txt)"}; + QString testPath{"testFile.txt"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_FALSE(result); + EXPECT_STRCASEEQ("testFile.txt", testPath.toUtf8().constData()); +} + +TEST(AzQtComponents, ApplyMissingExtension_UpdateMissingExtensionMultipleExtensionFilter_Success) +{ + const QString textFiler{"Image Files (*.jpg *.bmp *.png)"}; + QString testPath{"testFile"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_TRUE(result); + EXPECT_STRCASEEQ("testFile.jpg", testPath.toUtf8().constData()); +} + +TEST(AzQtComponents, ApplyMissingExtension_NoUpdateMissingExtensionMultipleExtensionFilter_Success) +{ + const QString textFiler{"Image Files (*.jpg *.bmp *.png)"}; + QString testPath{"testFile.png"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_FALSE(result); + EXPECT_STRCASEEQ("testFile.png", testPath.toUtf8().constData()); +} + +TEST(AzQtComponents, ApplyMissingExtension_NoUpdateMissingExtensionEmptyFilter_Success) +{ + const QString textFiler{""}; + QString testPath{"testFile"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_FALSE(result); + EXPECT_STRCASEEQ("testFile", testPath.toUtf8().constData()); +} + +TEST(AzQtComponents, ApplyMissingExtension_NoUpdateMissingExtensionInvalidFilter_Success) +{ + const QString textFiler{"Bad Filter!!"}; + QString testPath{"testFile"}; + bool result = AzQtComponents::FileDialog::ApplyMissingExtension(textFiler, testPath); + EXPECT_FALSE(result); + EXPECT_STRCASEEQ("testFile", testPath.toUtf8().constData()); +} diff --git a/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_testing_files.cmake b/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_testing_files.cmake index 2611063305..b4ab487c79 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_testing_files.cmake +++ b/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_testing_files.cmake @@ -9,6 +9,7 @@ set(FILES Tests/AzQtComponentTests.cpp Tests/ColorControllerTests.cpp + Tests/FileDialogTests.cpp Tests/FloatToStringConversionTests.cpp Tests/HexParsingTests.cpp Tests/StyleSheetCacheTests.cpp diff --git a/Code/Framework/AzQtComponents/CMakeLists.txt b/Code/Framework/AzQtComponents/CMakeLists.txt index dd217a7be2..a24b68bcd7 100644 --- a/Code/Framework/AzQtComponents/CMakeLists.txt +++ b/Code/Framework/AzQtComponents/CMakeLists.txt @@ -10,6 +10,8 @@ if(NOT PAL_TRAIT_BUILD_HOST_TOOLS) return() endif() +ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) + ly_add_target( NAME AzQtComponents SHARED NAMESPACE AZ @@ -26,6 +28,7 @@ ly_add_target( AzQtComponents PUBLIC . + ${pal_dir} COMPILE_DEFINITIONS PRIVATE AZ_QT_COMPONENTS_EXPORT_SYMBOLS @@ -53,6 +56,7 @@ ly_add_target( . AzQtComponents AzQtComponents/Gallery + ${pal_dir} BUILD_DEPENDENCIES PRIVATE 3rdParty::Qt::Svg @@ -86,6 +90,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) PRIVATE Tests AzQtComponents + ${pal_dir} BUILD_DEPENDENCIES PRIVATE AZ::AzQtComponents diff --git a/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Linux.h b/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Linux.h new file mode 100644 index 0000000000..685ac4dfed --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Linux.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_APPLY_MISSING_EXTENSION 1 +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_FILTER_CASE_SENSITIVITY QRegularExpression::NoPatternOption diff --git a/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Platform.h b/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Platform.h new file mode 100644 index 0000000000..101fe3a494 --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Linux/AzQtComponents/AzQtComponents_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Mac.h b/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Mac.h new file mode 100644 index 0000000000..1cb91ec09e --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Mac.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_APPLY_MISSING_EXTENSION 0 +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_FILTER_CASE_SENSITIVITY QRegularExpression::NoPatternOption diff --git a/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Platform.h b/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Platform.h new file mode 100644 index 0000000000..9b285476c1 --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Mac/AzQtComponents/AzQtComponents_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Platform.h b/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Platform.h new file mode 100644 index 0000000000..2c3efc5e6c --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Platform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include diff --git a/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Windows.h b/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Windows.h new file mode 100644 index 0000000000..edba0043b4 --- /dev/null +++ b/Code/Framework/AzQtComponents/Platform/Windows/AzQtComponents/AzQtComponents_Traits_Windows.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_APPLY_MISSING_EXTENSION 0 +#define AZ_TRAIT_AZQTCOMPONENTS_FILE_DIALOG_FILTER_CASE_SENSITIVITY QRegularExpression::CaseInsensitiveOption diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp index 8856989911..a159882f72 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetEditor/AssetEditorWidget.cpp @@ -410,7 +410,7 @@ namespace AzToolsFramework filter.append(ext); if (i < n - 1) { - filter.append(", "); + filter.append(" "); } } filter.append(")"); From b7c2401056ba31bd7cea0b5609bc08195479dd51 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:14:22 -0500 Subject: [PATCH 202/226] Added a ThreadDispatch Policy to the EBus code (#4405) * Added a ThreadDispatch Policy to the EBus code The ThreadDispatch Policy can be configured by authors of an EBusTraits to invoke a callback function after an EBus has finished it's dispatching mechanism on a specific thread. It takes into account recursive calls as well and will only invoke the PostDispatch callback after all callstack entries for the current thread are cleared. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Clang build fix The Traits type is dependent on the template parameter, therefore the compiler needs to be told that the ThreadDispatchPolicy is a type and not a value. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed DispatchLockGuard cxall in the TerrainWorldRendererComponent.cpp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added EBusTrait for configuring the DispatchLockGuard Removed the ThreadPolicy trait, now that the DispatchLockGuard for the EBus Context can be configured. Used the DispatchLockGuard template along with the IsInDispatchThisThread function to determine when an EBus has finished dispatching on thread and released it's Context Mutex. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Tweaked comment format for the IsInDispatch function Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed explicit GetContext call from ThreadDispatchTestBus. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Clang EBus Test fix for DispatchLockGuard trait Due to the clang compiler evalating constants within templates at the time of declaration, the LocklessDispatch value supplied to the template was always false resulting in the LocklessDispatch feature always locking. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/EBus/BusImpl.h | 26 ++- Code/Framework/AzCore/AzCore/EBus/EBus.h | 35 +++- Code/Framework/AzCore/Tests/EBus.cpp | 201 +++++++++++++++++++- 3 files changed, 243 insertions(+), 19 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/EBus/BusImpl.h b/Code/Framework/AzCore/AzCore/EBus/BusImpl.h index 8e655c0525..e2b1c2e92b 100644 --- a/Code/Framework/AzCore/AzCore/EBus/BusImpl.h +++ b/Code/Framework/AzCore/AzCore/EBus/BusImpl.h @@ -160,8 +160,8 @@ namespace AZ /** * Locking primitive that is used when executing events in the event queue. */ - using EventQueueMutexType = typename AZStd::Utils::if_c::value, // if EventQueueMutexType==NullMutex use MutexType otherwise EventQueueMutexType - MutexType, typename Traits::EventQueueMutexType>::type; + using EventQueueMutexType = AZStd::conditional_t::value, // if EventQueueMutexType==NullMutex use MutexType otherwise EventQueueMutexType + MutexType, typename Traits::EventQueueMutexType>; /** * Pointer to an address on the bus. @@ -180,14 +180,22 @@ namespace AZ * `::ExecuteQueuedEvents()`. * By default, the event queue is disabled. */ - static const bool EnableEventQueue = Traits::EnableEventQueue; - static const bool EventQueueingActiveByDefault = Traits::EventQueueingActiveByDefault; - static const bool EnableQueuedReferences = Traits::EnableQueuedReferences; + static constexpr bool EnableEventQueue = Traits::EnableEventQueue; + static constexpr bool EventQueueingActiveByDefault = Traits::EventQueueingActiveByDefault; + static constexpr bool EnableQueuedReferences = Traits::EnableQueuedReferences; /** * True if the EBus supports more than one address. Otherwise, false. */ - static const bool HasId = Traits::AddressPolicy != EBusAddressPolicy::Single; + static constexpr bool HasId = Traits::AddressPolicy != EBusAddressPolicy::Single; + + /** + * Template Lock Guard class that wraps around the Mutex + * The EBus uses for Dispatching Events. + * This is not the EBus Context Mutex if LocklessDispatch is true + */ + template + using DispatchLockGuard = typename Traits::template DispatchLockGuard; }; /** @@ -460,7 +468,7 @@ namespace AZ using BusPtr = typename Traits::BusPtr; /** - * Helper to queue an event by BusIdType only when function queueing is enabled + * Helper to queue an event by BusIdType only when function queueing is enabled * @param id Address ID. Handlers that are connected to this ID will receive the event. * @param func Function pointer of the event to dispatch. * @param args Function arguments that are passed to each handler. @@ -581,7 +589,7 @@ namespace AZ , public EBusBroadcaster , public EBusEventer , public EBusEventEnumerator - , public AZStd::Utils::if_c, EBusNullQueue>::type + , public AZStd::conditional_t, EBusNullQueue> { }; @@ -599,7 +607,7 @@ namespace AZ : public EventDispatcher , public EBusBroadcaster , public EBusBroadcastEnumerator - , public AZStd::Utils::if_c, EBusNullQueue>::type + , public AZStd::conditional_t, EBusNullQueue> { }; diff --git a/Code/Framework/AzCore/AzCore/EBus/EBus.h b/Code/Framework/AzCore/AzCore/EBus/EBus.h index da8c880963..a3dc10b103 100644 --- a/Code/Framework/AzCore/AzCore/EBus/EBus.h +++ b/Code/Framework/AzCore/AzCore/EBus/EBus.h @@ -236,6 +236,17 @@ namespace AZ * code before or after an event. */ using EventProcessingPolicy = EBusEventProcessingPolicy; + + /** + * Template Lock Guard class that wraps around the Mutex + * The EBus Context uses the LockGuard when dispatching + * (either AZStd::scoped_lock or NullLockGuard) + * The IsLocklessDispatch bool is there to defer evaluation of the LocklessDispatch constant + * Otherwise the value above in EBusTraits.h is always used and not the value + * that the derived trait class sets. + */ + template + using DispatchLockGuard = AZStd::conditional_t, AZStd::scoped_lock>; }; namespace Internal @@ -496,6 +507,14 @@ namespace AZ */ static const bool HasId = Traits::AddressPolicy != EBusAddressPolicy::Single; + /** + * Template Lock Guard class that wraps around the Mutex + * The EBus uses for Dispatching Events. + * This is not EBus Context Mutex when LocklessDispatch is set + */ + template + using DispatchLockGuard = typename ImplTraits::template DispatchLockGuard; + ////////////////////////////////////////////////////////////////////////// // Check to help identify common mistakes /// @cond EXCLUDE_DOCS @@ -620,11 +639,11 @@ namespace AZ using ContextMutexType = AZStd::conditional_t, AZStd::shared_mutex, MutexType>; /** - * The scoped lock guard to use (either AZStd::scoped_lock or NullLockGuard + * The scoped lock guard to use * during broadcast/event dispatch. * @see EBusTraits::LocklessDispatch */ - using DispatchLockGuard = AZStd::conditional_t, AZStd::scoped_lock>; + using DispatchLockGuard = DispatchLockGuard; /** * The scoped lock guard to use during connection. Some specialized policies execute handler methods which @@ -704,6 +723,11 @@ namespace AZ static Context& GetOrCreateContext(bool trackCallstack=true); static bool IsInDispatch(Context* context = GetContext(false)); + + /** + * Returns whether the EBus context is in the middle of a dispatch on the current thread + */ + static bool IsInDispatchThisThread(Context* context = GetContext(false)); /// @cond EXCLUDE_DOCS struct RouterCallstackEntry : public CallstackEntry @@ -1208,6 +1232,13 @@ AZ_POP_DISABLE_WARNING return context != nullptr && context->m_dispatches > 0; } + template + bool EBus::IsInDispatchThisThread(Context* context) + { + return context != nullptr && context->s_callstack != nullptr + && context->s_callstack->m_prev != nullptr; + } + //========================================================================= template EBus::RouterCallstackEntry::RouterCallstackEntry(Iterator it, const BusIdType* busId, bool isQueued, bool isReverse) diff --git a/Code/Framework/AzCore/Tests/EBus.cpp b/Code/Framework/AzCore/Tests/EBus.cpp index 10216a0485..9acf0f8a05 100644 --- a/Code/Framework/AzCore/Tests/EBus.cpp +++ b/Code/Framework/AzCore/Tests/EBus.cpp @@ -2088,7 +2088,7 @@ namespace UnitTest DisconnectNextHandlerByIdImpl multiHandler2; multiHandler2.BusConnect(DisconnectNextHandlerByIdImpl::firstBusAddress); multiHandler2.BusConnect(DisconnectNextHandlerByIdImpl::secondBusAddress); - + // Set the first handler m_nextHandler field to point to the second handler multiHandler1.m_nextHandler = &multiHandler2; @@ -2807,7 +2807,7 @@ namespace UnitTest AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(m_val % m_maxSleep)); } } - + void DoConnect() override { MyEventGroupBus::Handler::BusConnect(m_id); @@ -2854,7 +2854,7 @@ namespace UnitTest } MyEventGroupBus::Event(id, &MyEventGroupBus::Events::Calculate, i, i * 2, i << 4); - + LocklessConnectorBus::Event(id, &LocklessConnectorBus::Events::DoDisconnect); bool failed = (AZStd::find_if(&sentinel[0], end, [](char s) { return s != 0; }) != end); @@ -2891,7 +2891,7 @@ namespace UnitTest { MyEventGroupImpl() { - + } ~MyEventGroupImpl() override @@ -3614,7 +3614,7 @@ namespace UnitTest { AZStd::this_thread::yield(); } - + EXPECT_GE(AZStd::chrono::system_clock::now(), endTime); }; AZStd::thread connectThread([&connectHandler, &waitHandler]() @@ -3813,7 +3813,7 @@ namespace UnitTest struct LastHandlerDisconnectHandler : public LastHandlerDisconnectBus::Handler { - void OnEvent() override + void OnEvent() override { ++m_numOnEvents; BusDisconnect(); @@ -3854,7 +3854,7 @@ namespace UnitTest struct DisconnectAssertHandler : public DisconnectAssertBus::Handler { - + }; TEST_F(EBus, HandlerDestroyedWithoutDisconnect_Asserts) @@ -3995,6 +3995,191 @@ namespace UnitTest idTestRequest.Disconnect(); } + + // IsInDispatchThisThread + struct IsInThreadDispatchRequests + : AZ::EBusTraits + { + using MutexType = AZStd::recursive_mutex; + }; + + using IsInThreadDispatchBus = AZ::EBus; + + class IsInThreadDispatchHandler + : public IsInThreadDispatchBus::Handler + {}; + + TEST_F(EBus, InvokingIsInThisThread_ReturnsSuccess_OnlyIfThreadIsInDispatch) + { + IsInThreadDispatchHandler handler; + handler.BusConnect(); + + auto ThreadDispatcher = [](IsInThreadDispatchRequests*) + { + EXPECT_TRUE(IsInThreadDispatchBus::IsInDispatchThisThread()); + auto PerThreadBusDispatch = []() + { + EXPECT_FALSE(IsInThreadDispatchBus::IsInDispatchThisThread()); + }; + AZStd::array threads{ AZStd::thread(PerThreadBusDispatch), AZStd::thread(PerThreadBusDispatch) }; + for (AZStd::thread& thread : threads) + { + thread.join(); + } + }; + + static constexpr size_t ThreadDispatcherIterations = 4; + for (size_t iteration = 0; iteration < ThreadDispatcherIterations; ++iteration) + { + EXPECT_FALSE(IsInThreadDispatchBus::IsInDispatchThisThread()); + IsInThreadDispatchBus::Broadcast(ThreadDispatcher); + EXPECT_FALSE(IsInThreadDispatchBus::IsInDispatchThisThread()); + } + } + + // Thread Dispatch Policy + struct ThreadDispatchTestBusTraits + : AZ::EBusTraits + { + using MutexType = AZStd::recursive_mutex; + + struct PostThreadDispatchTestInvoker + { + ~PostThreadDispatchTestInvoker(); + }; + + template + struct ThreadDispatchTestLockGuard + { + ThreadDispatchTestLockGuard(DispatchMutex& contextMutex) + : m_lock{ contextMutex } + {} + ThreadDispatchTestLockGuard(DispatchMutex& contextMutex, AZStd::adopt_lock_t adopt_lock) + : m_lock{ contextMutex, adopt_lock } + {} + ThreadDispatchTestLockGuard(const ThreadDispatchTestLockGuard&) = delete; + ThreadDispatchTestLockGuard& operator=(const ThreadDispatchTestLockGuard&) = delete; + private: + PostThreadDispatchTestInvoker m_threadPolicyInvoker; + using LockType = AZStd::conditional_t, AZStd::scoped_lock>; + LockType m_lock; + }; + + template + using DispatchLockGuard = ThreadDispatchTestLockGuard; + + static inline AZStd::atomic s_threadPostDispatchCalls; + }; + + class ThreadDispatchTestRequests + { + public: + virtual void FirstCall() = 0; + virtual void SecondCall() = 0; + virtual void ThirdCall() = 0; + }; + + using ThreadDispatchTestBus = AZ::EBus; + + ThreadDispatchTestBusTraits::PostThreadDispatchTestInvoker::~PostThreadDispatchTestInvoker() + { + if (!ThreadDispatchTestBus::IsInDispatchThisThread()) + { + ++s_threadPostDispatchCalls; + } + } + + class ThreadDispatchTestHandler + : public ThreadDispatchTestBus::Handler + { + public: + void Connect() + { + ThreadDispatchTestBus::Handler::BusConnect(); + } + void Disconnect() + { + ThreadDispatchTestBus::Handler::BusDisconnect(); + } + + void FirstCall() override + { + ThreadDispatchTestBus::Broadcast(&ThreadDispatchTestBus::Events::SecondCall); + } + void SecondCall() override + { + ThreadDispatchTestBus::Broadcast(&ThreadDispatchTestBus::Events::ThirdCall); + } + void ThirdCall() override + { + } + }; + + template + class EBusParamFixture + : public ScopedAllocatorSetupFixture + , public ::testing::WithParamInterface + {}; + + struct ThreadDispatchParams + { + size_t m_threadCount{}; + size_t m_handlerCount{}; + }; + + using ThreadDispatchParamFixture = EBusParamFixture; + + INSTANTIATE_TEST_CASE_P( + ThreadDispatch, + ThreadDispatchParamFixture, + ::testing::Values( + ThreadDispatchParams{ 1, 1 }, + ThreadDispatchParams{ 2, 1 }, + ThreadDispatchParams{ 1, 2 }, + ThreadDispatchParams{ 2, 2 }, + ThreadDispatchParams{ 16, 8 } + ) + ); + + TEST_P(ThreadDispatchParamFixture, CustomDispatchLockGuard_InvokesPostDispatchFunction_AfterThreadHasFinishedDispatch) + { + ThreadDispatchTestBusTraits::s_threadPostDispatchCalls = 0; + ThreadDispatchParams threadDispatchParams = GetParam(); + AZStd::vector testThreads; + AZStd::vector testHandlers(threadDispatchParams.m_handlerCount); + for (ThreadDispatchTestHandler& testHandler : testHandlers) + { + testHandler.Connect(); + } + + static constexpr size_t DispatchThreadCalls = 3; + const size_t totalThreadDispatchCalls = threadDispatchParams.m_threadCount * DispatchThreadCalls; + + auto DispatchThreadWorker = []() + { + ThreadDispatchTestBus::Broadcast(&ThreadDispatchTestBus::Events::FirstCall); + ThreadDispatchTestBus::Broadcast(&ThreadDispatchTestBus::Events::SecondCall); + ThreadDispatchTestBus::Broadcast(&ThreadDispatchTestBus::Events::ThirdCall); + }; + + for (size_t threadIndex = 0; threadIndex < threadDispatchParams.m_threadCount; ++threadIndex) + { + testThreads.emplace_back(DispatchThreadWorker); + } + + for (AZStd::thread& thread : testThreads) + { + thread.join(); + } + + for (ThreadDispatchTestHandler& testHandler : testHandlers) + { + testHandler.Disconnect(); + } + + EXPECT_EQ(totalThreadDispatchCalls, ThreadDispatchTestBusTraits::s_threadPostDispatchCalls); + ThreadDispatchTestBusTraits::s_threadPostDispatchCalls = 0; + } } // namespace UnitTest #if defined(HAVE_BENCHMARK) @@ -4370,7 +4555,7 @@ namespace Benchmark Bus::ExecuteQueuedEvents(); } s_benchmarkEBusEnv.Disconnect(state); - + } BUS_BENCHMARK_REGISTER_ALL(BM_EBus_ExecuteBroadcast); From de41653d26e87eed74f1d8d71009a2d44715b40c Mon Sep 17 00:00:00 2001 From: jromnoa <80134229+jromnoa@users.noreply.github.com> Date: Fri, 8 Oct 2021 13:36:46 -0700 Subject: [PATCH 203/226] remove LY_PROJECTS check in Atom test registrations so that the targets build in project centric builds (#4581) Signed-off-by: jromnoa --- AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt index 0d6fe4c8fa..ff3cd5c465 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/Atom/CMakeLists.txt @@ -6,12 +6,7 @@ # # -################################################################################ -# Atom Renderer: Automated Tests -# Runs EditorPythonBindings (hydra) scripts inside the Editor to verify test results for the Atom renderer. -################################################################################ - -if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) +if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED) ly_add_pytest( NAME AutomatedTesting::Atom_TestSuite_Main TEST_SUITE main From cef41261004e1b76171882115a38be4872e4b7fe Mon Sep 17 00:00:00 2001 From: smurly Date: Fri, 8 Oct 2021 13:49:51 -0700 Subject: [PATCH 204/226] Mesh component parallel test automation P0 (#4562) * Mesh component P0 automation for parallel testing Signed-off-by: Scott Murray * Remove unused imports Signed-off-by: Scott Murray * Decorating test classes with test_case_id to corresponding testrail cases Signed-off-by: Scott Murray --- .../Atom/TestSuite_Main_Optimized.py | 14 ++ .../hydra_AtomEditorComponents_MeshAdded.py | 171 ++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py index f5ac411a01..90436fbe27 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py @@ -14,36 +14,50 @@ from ly_test_tools.o3de.editor_test import EditorSharedTest, EditorTestSuite @pytest.mark.parametrize("launcher_platform", ['windows_editor']) class TestAutomation(EditorTestSuite): + @pytest.mark.test_case_id("C32078118") class AtomEditorComponents_DecalAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_DecalAdded as test_module + @pytest.mark.test_case_id("C32078119") class AtomEditorComponents_DepthOfFieldAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_DepthOfFieldAdded as test_module + @pytest.mark.test_case_id("C32078120") class AtomEditorComponents_DirectionalLightAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_DirectionalLightAdded as test_module + @pytest.mark.test_case_id("C32078121") class AtomEditorComponents_ExposureControlAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_ExposureControlAdded as test_module + @pytest.mark.test_case_id("C32078115") class AtomEditorComponents_GlobalSkylightIBLAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_GlobalSkylightIBLAdded as test_module + @pytest.mark.test_case_id("C32078125") class AtomEditorComponents_PhysicalSkyAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_PhysicalSkyAdded as test_module + @pytest.mark.test_case_id("C32078131") class AtomEditorComponents_PostFXRadiusWeightModifierAdded(EditorSharedTest): from Atom.tests import ( hydra_AtomEditorComponents_PostFXRadiusWeightModifierAdded as test_module) + @pytest.mark.test_case_id("C32078117") class AtomEditorComponents_LightAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_LightAdded as test_module + @pytest.mark.test_case_id("C36525660") class AtomEditorComponents_DisplayMapperAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_DisplayMapperAdded as test_module + @pytest.mark.test_case_id("C32078128") class AtomEditorComponents_ReflectionProbeAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_ReflectionProbeAdded as test_module + @pytest.mark.test_case_id("C32078124") + class AtomEditorComponents_MeshAdded(EditorSharedTest): + from Atom.tests import hydra_AtomEditorComponents_MeshAdded as test_module + class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest): from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py new file mode 100644 index 0000000000..fbf5c987d1 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MeshAdded.py @@ -0,0 +1,171 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +class Tests: + creation_undo = ( + "UNDO Entity creation success", + "UNDO Entity creation failed") + creation_redo = ( + "REDO Entity creation success", + "REDO Entity creation failed") + mesh_entity_creation = ( + "Mesh Entity successfully created", + "Mesh Entity failed to be created") + mesh_component_added = ( + "Entity has a Mesh component", + "Entity failed to find Mesh component") + mesh_asset_specified = ( + "Mesh asset set", + "Mesh asset not set") + enter_game_mode = ( + "Entered game mode", + "Failed to enter game mode") + exit_game_mode = ( + "Exited game mode", + "Couldn't exit game mode") + is_visible = ( + "Entity is visible", + "Entity was not visible") + is_hidden = ( + "Entity is hidden", + "Entity was not hidden") + entity_deleted = ( + "Entity deleted", + "Entity was not deleted") + deletion_undo = ( + "UNDO deletion success", + "UNDO deletion failed") + deletion_redo = ( + "REDO deletion success", + "REDO deletion failed") + + +def AtomEditorComponents_Mesh_AddedToEntity(): + """ + Summary: + Tests the Mesh component can be added to an entity and has the expected functionality. + + Test setup: + - Wait for Editor idle loop. + - Open the "Base" level. + + Expected Behavior: + The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components. + Creation and deletion undo/redo should also work. + + Test Steps: + 1) Create a Mesh entity with no components. + 2) Add a Mesh component to Mesh entity. + 3) UNDO the entity creation and component addition. + 4) REDO the entity creation and component addition. + 5) Specify the Mesh component asset + 6) Enter/Exit game mode. + 7) Test IsHidden. + 8) Test IsVisible. + 9) Delete Mesh entity. + 10) UNDO deletion. + 11) REDO deletion. + 12) Look for errors. + + :return: None + """ + + import os + + import azlmbr.legacy.general as general + + from editor_python_test_tools.asset_utils import Asset + from editor_python_test_tools.editor_entity_utils import EditorEntity + from editor_python_test_tools.utils import Report, Tracer, TestHelper as helper + + with Tracer() as error_tracer: + # Test setup begins. + # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level. + helper.init_idle() + helper.open_level("", "Base") + + # Test steps begin. + # 1. Create a Mesh entity with no components. + mesh_name = "Mesh" + mesh_entity = EditorEntity.create_editor_entity(mesh_name) + Report.critical_result(Tests.mesh_entity_creation, mesh_entity.exists()) + + # 2. Add a Mesh component to Mesh entity. + mesh_component = mesh_entity.add_component(mesh_name) + Report.critical_result( + Tests.mesh_component_added, + mesh_entity.has_component(mesh_name)) + + # 3. UNDO the entity creation and component addition. + # -> UNDO component addition. + general.undo() + # -> UNDO naming entity. + general.undo() + # -> UNDO selecting entity. + general.undo() + # -> UNDO entity creation. + general.undo() + general.idle_wait_frames(1) + Report.result(Tests.creation_undo, not mesh_entity.exists()) + + # 4. REDO the entity creation and component addition. + # -> REDO entity creation. + general.redo() + # -> REDO selecting entity. + general.redo() + # -> REDO naming entity. + general.redo() + # -> REDO component addition. + general.redo() + general.idle_wait_frames(1) + Report.result(Tests.creation_redo, mesh_entity.exists()) + + # 5. Set Mesh component asset property + mesh_property_asset = 'Controller|Configuration|Mesh Asset' + model_path = os.path.join('Objects', 'shaderball', 'shaderball_default_1m.azmodel') + model = Asset.find_asset_by_path(model_path) + mesh_component.set_component_property_value(mesh_property_asset, model.id) + Report.result(Tests.mesh_asset_specified, + mesh_component.get_component_property_value(mesh_property_asset) == model.id) + + # 6. Enter/Exit game mode. + helper.enter_game_mode(Tests.enter_game_mode) + general.idle_wait_frames(1) + helper.exit_game_mode(Tests.exit_game_mode) + + # 7. Test IsHidden. + mesh_entity.set_visibility_state(False) + Report.result(Tests.is_hidden, mesh_entity.is_hidden() is True) + + # 8. Test IsVisible. + mesh_entity.set_visibility_state(True) + general.idle_wait_frames(1) + Report.result(Tests.is_visible, mesh_entity.is_visible() is True) + + # 9. Delete Mesh entity. + mesh_entity.delete() + Report.result(Tests.entity_deleted, not mesh_entity.exists()) + + # 10. UNDO deletion. + general.undo() + Report.result(Tests.deletion_undo, mesh_entity.exists()) + + # 11. REDO deletion. + general.redo() + Report.result(Tests.deletion_redo, not mesh_entity.exists()) + + # 12. Look for errors or asserts. + helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0) + for error_info in error_tracer.errors: + Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}") + for assert_info in error_tracer.asserts: + Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}") + + +if __name__ == "__main__": + from editor_python_test_tools.utils import Report + Report.start_test(AtomEditorComponents_Mesh_AddedToEntity) From d3f6898ad6e617d5f40e7f45bc7098a1ce098569 Mon Sep 17 00:00:00 2001 From: jromnoa <80134229+jromnoa@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:01:20 -0700 Subject: [PATCH 205/226] Fixes test_MaterialEditorLaunch_AllRHIOptionsSucceed() test by searching for RHI log lines (#4511) * double test timeout from 60 seconds to 120 seconds in attempt to fix it for nightly GPU runs Signed-off-by: jromnoa * add a file to launch with the test to ensure we get a full viewport load completed Signed-off-by: jromnoa * fix import error Signed-off-by: jromnoa * remove python error checks Signed-off-by: jromnoa * add new log line specific to each RHI to check for Signed-off-by: jromnoa * remove the new test script as it is no longer needed with our improved log lines check - the viewport logs don't show up in AR for some reason Signed-off-by: jromnoa --- .../Gem/PythonTests/Atom/TestSuite_Main_GPU.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py index 3403d8e9b1..220623af8b 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_GPU.py @@ -220,20 +220,18 @@ class TestPerformanceBenchmarkSuite(object): @pytest.mark.system class TestMaterialEditor(object): - @pytest.mark.parametrize("cfg_args", ["-rhi=dx12", "-rhi=Vulkan"]) + @pytest.mark.parametrize("cfg_args,expected_lines", [ + pytest.param("-rhi=dx12", ["Registering dx12 RHI"]), + pytest.param("-rhi=Vulkan", ["Registering vulkan RHI"]) + ]) @pytest.mark.parametrize("exe_file_name", ["MaterialEditor"]) def test_MaterialEditorLaunch_AllRHIOptionsSucceed( - self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args): + self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args, + expected_lines): """ Tests each valid RHI option (Null RHI excluded) can be launched with the MaterialEditor. - Checks for the "Finished loading viewport configurations." success message post launch. + Checks for the specific expected_lines messaging for each RHI type. """ - expected_lines = ["Finished loading viewport configurations."] - unexpected_lines = [ - # "Trace::Assert", - # "Trace::Error", - "Traceback (most recent call last):", - ] hydra.launch_and_validate_results( request, @@ -243,7 +241,7 @@ class TestMaterialEditor(object): run_python="--runpython", timeout=60, expected_lines=expected_lines, - unexpected_lines=unexpected_lines, + unexpected_lines=[], halt_on_unexpected=False, null_renderer=False, cfg_args=[cfg_args], From e4d3ab118c02071d5533ea90525cb8b43589ea62 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Fri, 8 Oct 2021 17:59:57 -0500 Subject: [PATCH 206/226] Console changes: Added a new SettingsRegistry root key for executing (#4567) console commands. The new key is "/O3DE/Autoexec/ConsoleCommands" and the only difference with the "/Amazon/AzCore/Runtime/ConosleCommands" key is that it isn't excluded by the SettingsRegistryBuilder. Due to not being excluded by the SettingsRegistryBuilder this key can be used to forward console commands to the aggregate `bootstrap.game...setreg` files. For GameLauncher specific console commands it is recommend to be put them in .setreg file that uses the "game" specialization, such as "autoexec.game.setreg". Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../AzCore/AzCore/Console/Console.cpp | 32 +++++++++++++------ .../AzCore/AzCore/Console/IConsole.h | 3 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Console/Console.cpp b/Code/Framework/AzCore/AzCore/Console/Console.cpp index a1b8a1759d..9f207d9afd 100644 --- a/Code/Framework/AzCore/AzCore/Console/Console.cpp +++ b/Code/Framework/AzCore/AzCore/Console/Console.cpp @@ -476,15 +476,16 @@ namespace AZ // Responsible for using the Json Serialization Issue Callback system // to determine when a JSON Patch or JSON Merge Patch modifies a value - // at a path underneath the IConsole::ConsoleRootCommandKey JSON pointer + // at a path underneath the IConsole::ConsoleRuntimeCommandKey JSON pointer JsonSerializationResult::ResultCode operator()(AZStd::string_view message, JsonSerializationResult::ResultCode result, AZStd::string_view path) { - AZ::IO::PathView consoleRootCommandKey{ IConsole::ConsoleRootCommandKey, AZ::IO::PosixPathSeparator }; + constexpr AZ::IO::PathView consoleRootCommandKey{ IConsole::ConsoleRuntimeCommandKey, AZ::IO::PosixPathSeparator }; + constexpr AZ::IO::PathView consoleAutoexecCommandKey{ IConsole::ConsoleAutoexecCommandKey, AZ::IO::PosixPathSeparator }; AZ::IO::PathView inputKey{ path, AZ::IO::PosixPathSeparator }; if (result.GetTask() == JsonSerializationResult::Tasks::Merge && result.GetProcessing() == JsonSerializationResult::Processing::Completed - && inputKey.IsRelativeTo(consoleRootCommandKey)) + && (inputKey.IsRelativeTo(consoleRootCommandKey) || inputKey.IsRelativeTo(consoleAutoexecCommandKey))) { if (auto type = m_settingsRegistry.GetType(path); type != SettingsRegistryInterface::Type::NoType) { @@ -510,12 +511,24 @@ namespace AZ { using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString; - AZ::IO::PathView consoleRootCommandKey{ IConsole::ConsoleRootCommandKey, AZ::IO::PosixPathSeparator }; + constexpr AZ::IO::PathView consoleRuntimeCommandKey{ IConsole::ConsoleRuntimeCommandKey, AZ::IO::PosixPathSeparator }; + constexpr AZ::IO::PathView consoleAutoexecCommandKey{ IConsole::ConsoleAutoexecCommandKey, AZ::IO::PosixPathSeparator }; AZ::IO::PathView inputKey{ path, AZ::IO::PosixPathSeparator }; - // The ConsoleRootComamndKey is not a command itself so strictly children keys are being examined - if (inputKey.IsRelativeTo(consoleRootCommandKey) && inputKey != consoleRootCommandKey) + + // Abuses the IsRelativeToFuncton function of the path class to extract the console + // command from the settings registry objects + FixedValueString command; + if (inputKey != consoleRuntimeCommandKey && inputKey.IsRelativeTo(consoleRuntimeCommandKey)) + { + command = inputKey.LexicallyRelative(consoleRuntimeCommandKey).Native(); + } + else if (inputKey != consoleAutoexecCommandKey && inputKey.IsRelativeTo(consoleAutoexecCommandKey)) + { + command = inputKey.LexicallyRelative(consoleAutoexecCommandKey).Native(); + } + + if (!command.empty()) { - FixedValueString command = inputKey.LexicallyRelative(consoleRootCommandKey).Native(); ConsoleCommandContainer commandArgs; // Argument string which stores the value from the Settings Registry long enough // to pass into the PerformCommand. The ConsoleCommandContainer stores string_views @@ -603,9 +616,10 @@ namespace AZ void Console::RegisterCommandInvokerWithSettingsRegistry(AZ::SettingsRegistryInterface& settingsRegistry) { - // Make sure the there is a JSON object at the path of AZ::IConsole::ConsoleRootCommandKey + // Make sure the there is a JSON object at the ConsoleRuntimeCommandKey or ConsoleAutoexecKey // So that JSON Patch is able to add values underneath that object (JSON Patch doesn't create intermediate objects) - settingsRegistry.MergeSettings(R"({ "Amazon": { "AzCore": { "Runtime": { "ConsoleCommands": {} } }}})", + settingsRegistry.MergeSettings(R"({ "Amazon": { "AzCore": { "Runtime": { "ConsoleCommands": {} } } })" + R"(,"O3DE": { "Autoexec": { "ConsoleCommands": {} } } })", SettingsRegistryInterface::Format::JsonMergePatch); m_consoleCommandKeyHandler = settingsRegistry.RegisterNotifier(ConsoleCommandKeyNotificationHandler{ settingsRegistry, *this }); diff --git a/Code/Framework/AzCore/AzCore/Console/IConsole.h b/Code/Framework/AzCore/AzCore/Console/IConsole.h index dafc284ce3..73d17ac65a 100644 --- a/Code/Framework/AzCore/AzCore/Console/IConsole.h +++ b/Code/Framework/AzCore/AzCore/Console/IConsole.h @@ -31,7 +31,8 @@ namespace AZ using FunctorVisitor = AZStd::function; - inline static constexpr AZStd::string_view ConsoleRootCommandKey = "/Amazon/AzCore/Runtime/ConsoleCommands"; + inline static constexpr AZStd::string_view ConsoleRuntimeCommandKey = "/Amazon/AzCore/Runtime/ConsoleCommands"; + inline static constexpr AZStd::string_view ConsoleAutoexecCommandKey = "/O3DE/Autoexec/ConsoleCommands"; IConsole() = default; virtual ~IConsole() = default; From 7b1dd01d1d648b2e449dba283d051bcae2414483 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Fri, 8 Oct 2021 20:09:22 -0500 Subject: [PATCH 207/226] Implemented a deferred LoadLevel queue for the SpawnableLevelSystem (#4561) * Moved the SettingsRegistryTests.cpp and SettingsRegistryMergeUtilsTests.cpp to the Settings folder Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Implemented a deferred level load queue, that allows the SpawnableLevelSystem to re-run the last LoadLevel command that occured before it was constructed. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added SettingsRegistryVisitorUtils to reduce Array and Object visitor boilerplate. The VisitArray and VisitObject functions allows iteration over each element of array and object respectively via a callback. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed the queuing logic for levels that attempt to load before the SpawnableLevelSystem is available Only the last level name that could not load is stored off and deferred until the SpawnableLevelsystem is created. Made the FieldVisitor AggregateTypes constructor protected and added a comment specifying the expected values. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Bring in the SettingsRegistry::Visitor::Visit functions into scope to fix MSVC compilation errors. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Changed the list of supported SettingsRegistry types to visit to an enum to constrain the values to Array and/or Object. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../AzCore/AzCore/Settings/SettingsRegistry.h | 4 +- .../Settings/SettingsRegistryVisitorUtils.cpp | 136 ++++++++++++ .../Settings/SettingsRegistryVisitorUtils.h | 83 ++++++++ .../AzCore/AzCore/azcore_files.cmake | 2 + .../SettingsRegistryMergeUtilsTests.cpp | 0 .../{ => Settings}/SettingsRegistryTests.cpp | 0 .../SettingsRegistryVisitorUtilsTests.cpp | 196 ++++++++++++++++++ .../AzCore/Tests/azcoretests_files.cmake | 5 +- .../LevelSystem/SpawnableLevelSystem.cpp | 35 +++- Registry/setregbuilder.assetprocessor.setreg | 3 +- 10 files changed, 456 insertions(+), 8 deletions(-) create mode 100644 Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.cpp create mode 100644 Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.h rename Code/Framework/AzCore/Tests/{ => Settings}/SettingsRegistryMergeUtilsTests.cpp (100%) rename Code/Framework/AzCore/Tests/{ => Settings}/SettingsRegistryTests.cpp (100%) create mode 100644 Code/Framework/AzCore/Tests/Settings/SettingsRegistryVisitorUtilsTests.cpp diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistry.h b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistry.h index 3dc1be87c5..40022bdc04 100644 --- a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistry.h +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistry.h @@ -204,14 +204,14 @@ namespace AZ [[nodiscard]] virtual PreMergeEventHandler RegisterPreMergeEvent(const PreMergeEventCallback& callback) = 0; //! Register a function that will be called before a file is merged. //! @callback The function to call before a file is merged. - [[nodiscard]] virtual PreMergeEventHandler RegisterPreMergeEvent (PreMergeEventCallback&& callback) = 0; + [[nodiscard]] virtual PreMergeEventHandler RegisterPreMergeEvent(PreMergeEventCallback&& callback) = 0; //! Register a function that will be called after a file is merged. //! @callback The function to call after a file is merged. [[nodiscard]] virtual PostMergeEventHandler RegisterPostMergeEvent(const PostMergeEventCallback& callback) = 0; //! Register a function that will be called after a file is merged. //! @callback The function to call after a file is merged. - [[nodiscard]] virtual PostMergeEventHandler RegisterPostMergeEvent (PostMergeEventCallback&& callback) = 0; + [[nodiscard]] virtual PostMergeEventHandler RegisterPostMergeEvent(PostMergeEventCallback&& callback) = 0; //! Gets the boolean value at the provided path. //! @param result The target to write the result to. diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.cpp b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.cpp new file mode 100644 index 0000000000..9456616024 --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + + +namespace AZ::SettingsRegistryVisitorUtils +{ + // Field Visitor implementation + FieldVisitor::FieldVisitor() = default; + FieldVisitor::FieldVisitor(VisitFieldType visitFieldType) + : m_visitFieldType{ visitFieldType } + { + } + + auto FieldVisitor::Traverse(AZStd::string_view path, AZStd::string_view valueName, + VisitAction action, Type type) -> VisitResponse + { + // A default response skip prevents visiting grand children(depth 2 or lower) + VisitResponse visitResponse = VisitResponse::Skip; + if (action == VisitAction::Begin) + { + // Invoke FieldVisitor override if the root path has been set + if (m_rootPath.has_value()) + { + Visit(path, valueName, type); + } + // To make sure only the direct children are visited(depth 1) + // set the root path once and set the VisitReponsoe + // to Continue to recurse into is fields + if (!m_rootPath.has_value()) + { + bool visitableFieldType{}; + switch (m_visitFieldType) + { + case VisitFieldType::Array: + visitableFieldType = type == Type::Array; + break; + case VisitFieldType::Object: + visitableFieldType = type == Type::Object; + break; + case VisitFieldType::ArrayOrObject: + visitableFieldType = type == Type::Array || type ==Type::Object; + break; + default: + AZ_Error("FieldVisitor", false, "The field visitation type value is invalid"); + break; + } + + if (visitableFieldType) + { + m_rootPath = path; + visitResponse = VisitResponse::Continue; + } + } + } + else if (action == VisitAction::Value) + { + // Invoke FieldVisitor override if the root path has been set + if (m_rootPath.has_value()) + { + Visit(path, valueName, type); + } + } + else if (action == VisitAction::End) + { + // Reset m_rootPath back to null when the root path has finished being visited + if (m_rootPath.has_value() && *m_rootPath == path) + { + m_rootPath = AZStd::nullopt; + } + } + + + return visitResponse; + } + + // Array Visitor implementation + ArrayVisitor::ArrayVisitor() + : FieldVisitor(VisitFieldType::Array) + { + } + + // Object Visitor implementation + ObjectVisitor::ObjectVisitor() + : FieldVisitor(VisitFieldType::Object) + { + } + + // Generic VisitField Callback implemention + template + bool VisitFieldCallback(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path) + { + struct VisitFieldVisitor + : BaseVisitor + { + using BaseVisitor::Visit; + VisitFieldVisitor(const VisitorCallback& visitCallback) + : m_visitCallback{ visitCallback } + {} + + void Visit(AZStd::string_view path, AZStd::string_view fieldIndex, typename BaseVisitor::Type type) override + { + m_visitCallback(path, fieldIndex, type); + } + + const VisitorCallback& m_visitCallback; + }; + + VisitFieldVisitor visitor{ visitCallback }; + return settingsRegistry.Visit(visitor, path); + } + + // VisitField implementation + bool VisitField(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path) + { + return VisitFieldCallback(settingsRegistry, visitCallback, path); + } + + // VisitArray implementation + bool VisitArray(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path) + { + return VisitFieldCallback(settingsRegistry, visitCallback, path); + } + + // VisitObject implementation + bool VisitObject(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path) + { + return VisitFieldCallback(settingsRegistry, visitCallback, path); + } +} diff --git a/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.h b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.h new file mode 100644 index 0000000000..a45712521f --- /dev/null +++ b/Code/Framework/AzCore/AzCore/Settings/SettingsRegistryVisitorUtils.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + + +namespace AZ::SettingsRegistryVisitorUtils +{ + //! Interface for visiting the fields of an array or object + //! To access the values, use the SettingsRegistryInterface Get/GetObject methods + struct FieldVisitor + : public AZ::SettingsRegistryInterface::Visitor + { + using VisitResponse = AZ::SettingsRegistryInterface::VisitResponse; + using VisitAction = AZ::SettingsRegistryInterface::VisitAction; + using Type = AZ::SettingsRegistryInterface::Type; + + FieldVisitor(); + + // Bring the base class visitor functions into scope + using AZ::SettingsRegistryInterface::Visitor::Visit; + virtual void Visit(AZStd::string_view path, AZStd::string_view arrayIndex, Type type) = 0; + + protected: + // VisitFieldType is used for filtering the type of referenced by the root path + enum class VisitFieldType + { + Array, + Object, + ArrayOrObject + }; + FieldVisitor(const VisitFieldType visitFieldType); + private: + VisitResponse Traverse(AZStd::string_view path, AZStd::string_view valueName, + VisitAction action, Type type) override; + + VisitFieldType m_visitFieldType{ VisitFieldType::ArrayOrObject }; + AZStd::optional m_rootPath; + }; + + //! Interface for visiting the fields of an array + //! To access the values, use the SettingsRegistryInterface Get/GetObject methods + struct ArrayVisitor + : public FieldVisitor + { + ArrayVisitor(); + }; + + //! Interface for visiting the fields of an object + //! To access the values, use the SettingsRegistryInterface Get/GetObject methods + struct ObjectVisitor + : public FieldVisitor + { + ObjectVisitor(); + }; + + //! Signature of callback funcition invoked when visiting an element of an array or object + using VisitorCallback = AZStd::function; + + //! Invokes the visitor callback for each element of either the array or object at @path + //! If @path is not an array or object, then no elements are visited + //! This function will not recurse into children of elements + //! @visitCallback functor that is invoked for each array or object element found + bool VisitField(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path); + //! Invokes the visitor callback for each element of the array at @path + //! If @path is not an array, then no elements are visited + //! This function will not recurse into children of elements + //! @visitCallback functor that is invoked for each array element found + bool VisitArray(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path); + //! Invokes the visitor callback for each element of the object at @path + //! If @path is not an object, then no elements are visited + //! This function will not recurse into children of elements + //! @visitCallback functor that is invoked for each object element found + bool VisitObject(AZ::SettingsRegistryInterface& settingsRegistry, const VisitorCallback& visitCallback, AZStd::string_view path); +} diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index 010c748402..6675958247 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -566,6 +566,8 @@ set(FILES Settings/SettingsRegistryMergeUtils.h Settings/SettingsRegistryScriptUtils.cpp Settings/SettingsRegistryScriptUtils.h + Settings/SettingsRegistryVisitorUtils.cpp + Settings/SettingsRegistryVisitorUtils.h State/HSM.cpp State/HSM.h Statistics/NamedRunningStatistic.h diff --git a/Code/Framework/AzCore/Tests/SettingsRegistryMergeUtilsTests.cpp b/Code/Framework/AzCore/Tests/Settings/SettingsRegistryMergeUtilsTests.cpp similarity index 100% rename from Code/Framework/AzCore/Tests/SettingsRegistryMergeUtilsTests.cpp rename to Code/Framework/AzCore/Tests/Settings/SettingsRegistryMergeUtilsTests.cpp diff --git a/Code/Framework/AzCore/Tests/SettingsRegistryTests.cpp b/Code/Framework/AzCore/Tests/Settings/SettingsRegistryTests.cpp similarity index 100% rename from Code/Framework/AzCore/Tests/SettingsRegistryTests.cpp rename to Code/Framework/AzCore/Tests/Settings/SettingsRegistryTests.cpp diff --git a/Code/Framework/AzCore/Tests/Settings/SettingsRegistryVisitorUtilsTests.cpp b/Code/Framework/AzCore/Tests/Settings/SettingsRegistryVisitorUtilsTests.cpp new file mode 100644 index 0000000000..15f346ee93 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Settings/SettingsRegistryVisitorUtilsTests.cpp @@ -0,0 +1,196 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + + +#include +#include +#include +#include +#include +#include + +namespace SettingsRegistryVisitorUtilsTests +{ + struct VisitCallbackParams + { + AZStd::string_view m_inputJsonDocument; + using VisitFieldFunction = bool(*)(AZ::SettingsRegistryInterface&, + const AZ::SettingsRegistryVisitorUtils::VisitorCallback&, + AZStd::string_view); + + static inline constexpr size_t MaxFieldCount = 10; + using ObjectFields = AZStd::fixed_vector, MaxFieldCount>; + using ArrayFields = AZStd::fixed_vector; + ObjectFields m_objectFields; + ArrayFields m_arrayFields; + }; + + template + class SettingsRegistryVisitorUtilsParamFixture + : public UnitTest::ScopedAllocatorSetupFixture + , public ::testing::WithParamInterface + { + public: + + void SetUp() override + { + m_registry = AZStd::make_unique(); + } + + void TearDown() override + { + m_registry.reset(); + } + + AZStd::unique_ptr m_registry; + }; + + using SettingsRegistryVisitCallbackFixture = SettingsRegistryVisitorUtilsParamFixture; + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitFieldsOfArrayType_ReturnsFields) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector testArrayFields; + auto visitorCallback = [this, &testArrayFields](AZStd::string_view path, AZStd::string_view, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testArrayFields.emplace_back(AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitField(*m_registry, visitorCallback, "/Test/Array"); + + const AZStd::fixed_vector expectedFields{ + visitParams.m_arrayFields.begin(), visitParams.m_arrayFields.end() }; + EXPECT_THAT(testArrayFields, ::testing::ContainerEq(expectedFields)); + } + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitFieldsOfObjectType_ReturnsFields) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector, VisitCallbackParams::MaxFieldCount> testObjectFields; + auto visitorCallback = [this, &testObjectFields](AZStd::string_view path, AZStd::string_view fieldName, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testObjectFields.emplace_back(fieldName, AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitField(*m_registry, visitorCallback, "/Test/Object"); + + const AZStd::fixed_vector, VisitCallbackParams::MaxFieldCount> expectedFields{ + visitParams.m_objectFields.begin(), visitParams.m_objectFields.end() }; + EXPECT_THAT(testObjectFields, ::testing::ContainerEq(expectedFields)); + } + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitArrayOfArrayType_ReturnsFields) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector testArrayFields; + auto visitorCallback = [this, &testArrayFields](AZStd::string_view path, AZStd::string_view, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testArrayFields.emplace_back(AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitArray(*m_registry, visitorCallback, "/Test/Array"); + + const AZStd::fixed_vector expectedArrayFields{ + visitParams.m_arrayFields.begin(), visitParams.m_arrayFields.end() }; + EXPECT_THAT(testArrayFields, ::testing::ContainerEq(expectedArrayFields)); + } + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitArrayOfObjectType_ReturnsEmpty) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector testArrayFields; + auto visitorCallback = [this, &testArrayFields](AZStd::string_view path, AZStd::string_view, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testArrayFields.emplace_back(AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitArray(*m_registry, visitorCallback, "/Test/Object"); + + EXPECT_TRUE(testArrayFields.empty()); + } + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitObjectOfArrayType_ReturnsEmpty) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector, VisitCallbackParams::MaxFieldCount> testObjectFields; + auto visitorCallback = [this, &testObjectFields](AZStd::string_view path, AZStd::string_view fieldName, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testObjectFields.emplace_back(fieldName, AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitObject(*m_registry, visitorCallback, "/Test/Array"); + + EXPECT_TRUE(testObjectFields.empty()); + } + + TEST_P(SettingsRegistryVisitCallbackFixture, VisitFunction_VisitObjectOfObjectType_ReturnsFields) + { + const VisitCallbackParams& visitParams = GetParam(); + + ASSERT_TRUE(m_registry->MergeSettings(visitParams.m_inputJsonDocument, AZ::SettingsRegistryInterface::Format::JsonMergePatch)); + + AZStd::fixed_vector, VisitCallbackParams::MaxFieldCount> testObjectFields; + auto visitorCallback = [this, &testObjectFields](AZStd::string_view path, AZStd::string_view fieldName, AZ::SettingsRegistryInterface::Type) + { + AZStd::string fieldValue; + EXPECT_TRUE(m_registry->Get(fieldValue, path)); + testObjectFields.emplace_back(fieldName, AZStd::move(fieldValue)); + }; + + AZ::SettingsRegistryVisitorUtils::VisitObject(*m_registry, visitorCallback, "/Test/Object"); + + const AZStd::fixed_vector, VisitCallbackParams::MaxFieldCount> expectedObjectFields{ + visitParams.m_objectFields.begin(), visitParams.m_objectFields.end() }; + EXPECT_THAT(testObjectFields, ::testing::ContainerEq(expectedObjectFields)); + } + + + INSTANTIATE_TEST_CASE_P( + VisitField, + SettingsRegistryVisitCallbackFixture, + ::testing::Values( + VisitCallbackParams + { + R"({)" "\n" + R"( "Test":)" "\n" + R"( {)" "\n" + R"( "Array": [ "Hello", "World" ],)" "\n" + R"( "Object": { "Foo": "Hello", "Bar": "World"})" "\n" + R"( })" "\n" + R"(})" "\n", + VisitCallbackParams::ObjectFields{{"Foo", "Hello"}, {"Bar", "World"}}, + VisitCallbackParams::ArrayFields{"Hello", "World"} + } + ) + ); +} diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index e155594aa0..d738711a4f 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -75,11 +75,12 @@ set(FILES Name/NameJsonSerializerTests.cpp Name/NameTests.cpp RTTI/TypeSafeIntegralTests.cpp - SettingsRegistryTests.cpp - SettingsRegistryMergeUtilsTests.cpp Settings/CommandLineTests.cpp + Settings/SettingsRegistryTests.cpp Settings/SettingsRegistryConsoleUtilsTests.cpp + Settings/SettingsRegistryMergeUtilsTests.cpp Settings/SettingsRegistryScriptUtilsTests.cpp + Settings/SettingsRegistryVisitorUtilsTests.cpp Streamer/BlockCacheTests.cpp Streamer/DedicatedCacheTests.cpp Streamer/FullDecompressorTests.cpp diff --git a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp index a82c4a6914..b2b67c3b75 100644 --- a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp @@ -22,22 +22,33 @@ #include #include #include +#include #include #include namespace LegacyLevelSystem { + constexpr AZStd::string_view DeferredLoadLevelKey = "/O3DE/Runtime/SpawnableLevelSystem/DeferredLoadLevel"; //------------------------------------------------------------------------ static void LoadLevel(const AZ::ConsoleCommandContainer& arguments) { AZ_Error("SpawnableLevelSystem", !arguments.empty(), "LoadLevel requires a level file name to be provided."); AZ_Error("SpawnableLevelSystem", arguments.size() == 1, "LoadLevel requires a single level file name to be provided."); - if (!arguments.empty() && gEnv->pSystem && gEnv->pSystem->GetILevelSystem() && !gEnv->IsEditor()) + if (!arguments.empty() && gEnv && gEnv->pSystem && gEnv->pSystem->GetILevelSystem() && !gEnv->IsEditor()) { gEnv->pSystem->GetILevelSystem()->LoadLevel(arguments[0].data()); } + else if (!arguments.empty()) + { + // The SpawnableLevelSystem isn't available yet. + // Defer the level load until later by storing it in the SettingsRegistry + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + settingsRegistry->Set(DeferredLoadLevelKey, arguments.front()); + } + } } //------------------------------------------------------------------------ @@ -45,7 +56,7 @@ namespace LegacyLevelSystem { AZ_Warning("SpawnableLevelSystem", !arguments.empty(), "UnloadLevel doesn't use any arguments."); - if (gEnv->pSystem && gEnv->pSystem->GetILevelSystem() && !gEnv->IsEditor()) + if (gEnv && gEnv->pSystem && gEnv->pSystem->GetILevelSystem() && !gEnv->IsEditor()) { gEnv->pSystem->GetILevelSystem()->UnloadLevel(); } @@ -73,6 +84,24 @@ namespace LegacyLevelSystem } AzFramework::RootSpawnableNotificationBus::Handler::BusConnect(); + + // If there were LoadLevel command invocations before the creation of the level system + // then those invocations were queued. + // load the last level in the queue, since only one level can be loaded at a time + if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr) + { + if (AZ::SettingsRegistryInterface::FixedValueString deferredLevelName; + settingsRegistry->Get(deferredLevelName, DeferredLoadLevelKey) && !deferredLevelName.empty()) + { + // since this is the constructor any derived classes vtables aren't setup yet + // call this class LoadLevel function + AZ_TracePrintf("SpawnableLevelSystem", "The Level System is now available." + " Loading level %s which could not be loaded earlier\n", deferredLevelName.c_str()); + SpawnableLevelSystem::LoadLevel(deferredLevelName.c_str()); + // Delete the key with the deferred level name + settingsRegistry->Remove(DeferredLoadLevelKey); + } + } } //------------------------------------------------------------------------ @@ -173,7 +202,7 @@ namespace LegacyLevelSystem } // Make sure a spawnable level exists that matches levelname - AZStd::string validLevelName = ""; + AZStd::string validLevelName; AZ::Data::AssetId rootSpawnableAssetId; AZ::Data::AssetCatalogRequestBus::BroadcastResult( rootSpawnableAssetId, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, levelName, nullptr, false); diff --git a/Registry/setregbuilder.assetprocessor.setreg b/Registry/setregbuilder.assetprocessor.setreg index 25b51470bf..00e6e2f7f8 100644 --- a/Registry/setregbuilder.assetprocessor.setreg +++ b/Registry/setregbuilder.assetprocessor.setreg @@ -20,7 +20,8 @@ "Excludes": [ "/Amazon/AzCore/Runtime", - "/Amazon/AzCore/Bootstrap/project_path" + "/Amazon/AzCore/Bootstrap/project_path", + "/O3DE/Runtime", ] } } From c3ff1e0cd3e6a3c9145a9972d2090d802d8bdba2 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 11 Oct 2021 11:15:55 +0100 Subject: [PATCH 208/226] feedback from PR Signed-off-by: greerdv --- Gems/PhysX/Code/Source/EditorColliderComponent.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp index 7cc69caeb7..f8d0adf156 100644 --- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp @@ -826,9 +826,9 @@ namespace PhysX } m_componentWarnings.push_back(AZStd::string::format( - "The asset \"%s\" contains one or more triangle meshes, which are not compatible with non-kinematic dynamic " - "rigid bodies. To make the collider compatible, you can export the asset as a primitive or convex mesh, use mesh " - "decomposition when exporting the asset, or set the rigid body to kinematic. Learn more about " + "The physics asset \"%s\" was exported using triangle mesh geometry, which is not compatible with non-kinematic " + "dynamic rigid bodies. To make the collider compatible, you can export the asset using primitive or convex mesh " + "geometry, use mesh decomposition when exporting the asset, or set the rigid body to kinematic. Learn more about " "colliders.", assetPath.c_str())); From b91d503a824a18b14ad8e724cd11cb805aec7e44 Mon Sep 17 00:00:00 2001 From: Artur K <96597+nemerle@users.noreply.github.com> Date: Mon, 11 Oct 2021 12:55:24 +0200 Subject: [PATCH 209/226] Add AZStd::lerp math function, based on C++20 (#3468) * Add AZStd::lerp math function, based on c++20 Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Add unit test for AZStd::lerp, based on libc++ ones Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * written a reduced set of lerp tests, but now the license is correct Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Update Code/Framework/AzCore/AzCore/std/math.h Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Update Code/Framework/AzCore/Tests/AZStd/Math.cpp Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * fix the github suggestion merge Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Copy some AZ::Lerp tests to std::lerp test suite + clang-format Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Cleanup lerp test cases Remove comments that suggested very heavy tests that required things like `for every t1..` Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Fix unit test compilation issues Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * fix whitespace issue Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Use `TypeParam` in TYPED_TEST Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * Remove unneeded new-lines Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> * remove unused infinity Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com> Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/std/math.h | 45 ++++++++++++++++++ Code/Framework/AzCore/Tests/AZStd/Math.cpp | 46 +++++++++++++++++++ .../AzCore/Tests/azcoretests_files.cmake | 1 + 3 files changed, 92 insertions(+) create mode 100644 Code/Framework/AzCore/Tests/AZStd/Math.cpp diff --git a/Code/Framework/AzCore/AzCore/std/math.h b/Code/Framework/AzCore/AzCore/std/math.h index 03f12e6e08..042dcca657 100644 --- a/Code/Framework/AzCore/AzCore/std/math.h +++ b/Code/Framework/AzCore/AzCore/std/math.h @@ -30,4 +30,49 @@ namespace AZStd using std::sqrt; using std::tan; using std::trunc; + +} // namespace AZStd + +// from c++20 standard +namespace AZStd::Internal +{ + template + constexpr T lerp(T a, T b, T t) noexcept + { + if ((a <= 0 && b >= 0) || (a >= 0 && b <= 0)) + { + return t * b + (1 - t) * a; + } + if (t == 1) + { + return b; + } + const T x = a + t * (b - a); + if ((t > 1) == (b > a)) + { + return b < x ? x : b; + } + else + { + return x < b ? x : b; + } + } +} // namespace AZStd::Internal + +namespace AZStd +{ + constexpr float lerp(float a, float b, float t) noexcept + { + return Internal::lerp(a, b, t); + } + + constexpr double lerp(double a, double b, double t) noexcept + { + return Internal::lerp(a, b, t); + } + + constexpr long double lerp(long double a, long double b, long double t) noexcept + { + return Internal::lerp(a, b, t); + } } // namespace AZStd diff --git a/Code/Framework/AzCore/Tests/AZStd/Math.cpp b/Code/Framework/AzCore/Tests/AZStd/Math.cpp new file mode 100644 index 0000000000..5379c9946b --- /dev/null +++ b/Code/Framework/AzCore/Tests/AZStd/Math.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include + +namespace UnitTest +{ + template + class StdMathTest : public ::testing::Test + { + }; + + using MathTestConfigs = ::testing::Types; + TYPED_TEST_CASE(StdMathTest, MathTestConfigs); + + TYPED_TEST(StdMathTest, LerpOperations) + { + using AZStd::lerp; + using ::testing::Eq; + using T = TypeParam; + + constexpr T maxNumber = AZStd::numeric_limits::max(); + constexpr T eps = AZStd::numeric_limits::epsilon(); + constexpr T a{ 42 }; + + // exactness: lerp(a,b,0)==a && lerp(a,b,1)==b + EXPECT_THAT(lerp(eps, maxNumber, T(0)), Eq(eps)); + EXPECT_THAT(lerp(eps, maxNumber, T(1)), Eq(maxNumber)); + + // consistency: lerp(a,a,t)==a + EXPECT_THAT(lerp(a, a, T(0.5)), Eq(a)); + EXPECT_THAT(lerp(eps, eps, T(0.5)), Eq(eps)); + + // a few generic tests taken from MathUtilTests.cpp + EXPECT_EQ(T(2.5), lerp(T(2), T(4), T(0.25))); + EXPECT_EQ(T(6.0), lerp(T(2), T(4), T(2.0))); + EXPECT_EQ(T(3.5), lerp(T(2), T(4), T(0.75))); + EXPECT_EQ(T(0.0), lerp(T(2), T(4), T(-1.0))); + } +} // namespace UnitTest diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index d738711a4f..6ba9944f7d 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -195,6 +195,7 @@ set(FILES AZStd/LockFreeQueues.cpp AZStd/LockFreeStacks.cpp AZStd/LockTests.cpp + AZStd/Math.cpp AZStd/Numeric.cpp AZStd/Ordered.cpp AZStd/Optional.cpp From f84bd9829a82e2b131ae913fcf134cc35fe32ad3 Mon Sep 17 00:00:00 2001 From: amzn-sean <75276488+amzn-sean@users.noreply.github.com> Date: Mon, 11 Oct 2021 13:01:14 +0100 Subject: [PATCH 210/226] remove some flackyness in physx automated tests (#4547) Signed-off-by: amzn-sean <75276488+amzn-sean@users.noreply.github.com> --- .../PythonTests/Physics/TestSuite_Periodic.py | 4 - ...egion_SplineRegionWithModifiedTransform.py | 2 +- .../ForceRegion_ZeroPointForceDoesNothing.py | 2 +- .../Physics/tests/joints/JointsHelper.py | 11 +- .../joints/Joints_FixedLeadFollowerCollide.py | 92 ----- .../RigidBody_KinematicModeWorks.py | 30 +- .../Joints_FixedLeadFollowerCollide.ly | 3 - .../filelist.xml | 6 - .../Joints_FixedLeadFollowerCollide/level.pak | 3 - .../leveldata/Environment.xml | 14 - .../leveldata/TerrainTexture.xml | 7 - .../leveldata/TimeOfDay.xml | 356 ------------------ .../leveldata/VegetationMap.dat | 3 - .../Joints_FixedLeadFollowerCollide/tags.txt | 12 - .../terraintexture.pak | 3 - .../Joints_HingeNoLimitsConstrained.ly | 4 +- .../RigidBody_KinematicModeWorks.ly | 4 +- 17 files changed, 30 insertions(+), 526 deletions(-) delete mode 100644 AutomatedTesting/Gem/PythonTests/Physics/tests/joints/Joints_FixedLeadFollowerCollide.py delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/Joints_FixedLeadFollowerCollide.ly delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/filelist.xml delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/level.pak delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/Environment.xml delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/tags.txt delete mode 100644 AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/terraintexture.pak diff --git a/AutomatedTesting/Gem/PythonTests/Physics/TestSuite_Periodic.py b/AutomatedTesting/Gem/PythonTests/Physics/TestSuite_Periodic.py index da89316993..e5dd9adbb9 100755 --- a/AutomatedTesting/Gem/PythonTests/Physics/TestSuite_Periodic.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/TestSuite_Periodic.py @@ -525,10 +525,6 @@ class TestAutomation(TestAutomationBase): from .tests.joints import Joints_BallNoLimitsConstrained as test_module self._run_test(request, workspace, editor, test_module) - def test_Joints_FixedLeadFollowerCollide(self, request, workspace, editor, launcher_platform): - from .tests.joints import Joints_FixedLeadFollowerCollide as test_module - self._run_test(request, workspace, editor, test_module) - def test_Joints_GlobalFrameConstrained(self, request, workspace, editor, launcher_platform): from .tests.joints import Joints_GlobalFrameConstrained as test_module self._run_test(request, workspace, editor, test_module) diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_SplineRegionWithModifiedTransform.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_SplineRegionWithModifiedTransform.py index abc58779a2..e949d2d8f9 100644 --- a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_SplineRegionWithModifiedTransform.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_SplineRegionWithModifiedTransform.py @@ -82,7 +82,7 @@ def ForceRegion_SplineRegionWithModifiedTransform(): import azlmbr.bus as bus # region Constants - TIMEOUT = 5.0 + TIMEOUT = 10.0 MIN_TRIGGER_DISTANCE = 2.0 # endregion diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_ZeroPointForceDoesNothing.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_ZeroPointForceDoesNothing.py index 91190f83e5..6582628ff9 100644 --- a/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_ZeroPointForceDoesNothing.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/force_region/ForceRegion_ZeroPointForceDoesNothing.py @@ -77,7 +77,7 @@ def ForceRegion_ZeroPointForceDoesNothing(): helper.init_idle() - TIMEOUT_SECONDS = 3.0 + TIMEOUT_SECONDS = 5.0 X_Y_Z_TOLERANCE = 1.5 REGION_HEIGHT = 3.0 TERRAIN_HEIGHT = 32.0 diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/JointsHelper.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/JointsHelper.py index 6226f42534..a85e460659 100644 --- a/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/JointsHelper.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/JointsHelper.py @@ -45,8 +45,13 @@ class JointEntity: # Entity class that sets a flag when an instance receives collision events. class JointEntityCollisionAware(JointEntity): def on_collision_begin(self, args): - if not self.collided: - self.collided = True + self.collided = True + + def on_collision_persist(self, args): + self.collided = True + + def on_collision_end(self, args): + self.collided = True def __init__(self, name): self.id = general.find_game_entity(name) @@ -58,3 +63,5 @@ class JointEntityCollisionAware(JointEntity): self.handler = azlmbr.physics.CollisionNotificationBusHandler() self.handler.connect(self.id) self.handler.add_callback("OnCollisionBegin", self.on_collision_begin) + self.handler.add_callback("OnCollisionPresist", self.on_collision_persist) + self.handler.add_callback("OnCollisionEnd", self.on_collision_end) diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/Joints_FixedLeadFollowerCollide.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/Joints_FixedLeadFollowerCollide.py deleted file mode 100644 index e142941c5a..0000000000 --- a/AutomatedTesting/Gem/PythonTests/Physics/tests/joints/Joints_FixedLeadFollowerCollide.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -Copyright (c) Contributors to the Open 3D Engine Project. -For complete copyright and license terms please see the LICENSE at the root of this distribution. - -SPDX-License-Identifier: Apache-2.0 OR MIT -""" - -# Test case ID : C18243582 -# Test Case Title : Check that fixed joint allows lead-follower collision - - -# fmt: off -class Tests: - enter_game_mode = ("Entered game mode", "Failed to enter game mode") - exit_game_mode = ("Exited game mode", "Couldn't exit game mode") - lead_found = ("Found lead", "Did not find lead") - follower_found = ("Found follower", "Did not find follower") - check_collision_happened = ("Lead and follower collided", "Lead and follower did not collide") -# fmt: on - - -def Joints_FixedLeadFollowerCollide(): - """ - Summary: Check that fixed joint allows lead-follower collision - - Level Description: - lead - Starts above follower entity - follower - Starts below lead entity. Constrained to lead entity with fixed joint. Starts with initial velocity of (5, 0, 0) in positive X direction. - - Expected Behavior: - The follower entity moves in the positive X direction and the lead entity is dragged along towards the positive X direction. - The x position of the lead entity is incremented from its original. - The lead and follower entities are kept apart at a distance of approximately 1.0 due to collision. - - Test Steps: - 1) Open Level - 2) Enter Game Mode - 3) Create and Validate Entities - 4) Wait for several seconds - 5) Check to see if lead and follower behaved as expected. - 6) Exit Game Mode - 7) Close Editor - - Note: - - This test file must be called from the Open 3D Engine Editor command terminal - - Any passed and failed tests are written to the Editor.log file. - Parsing the file or running a log_monitor are required to observe the test results. - - :return: None - """ - import os - import sys - from editor_python_test_tools.utils import Report - from editor_python_test_tools.utils import TestHelper as helper - - import azlmbr.legacy.general as general - import azlmbr.bus - - from JointsHelper import JointEntityCollisionAware - - # Helper Entity class - self.collided flag is set when instance receives collision event. - class Entity(JointEntityCollisionAware): - def criticalEntityFound(self): # Override function to use local Test dictionary - Report.critical_result(Tests.__dict__[self.name + "_found"], self.id.isValid()) - - # Main Script - helper.init_idle() - - # 1) Open Level - helper.open_level("Physics", "Joints_FixedLeadFollowerCollide") - - # 2) Enter Game Mode - helper.enter_game_mode(Tests.enter_game_mode) - - # 3) Create and Validate Entities - lead = Entity("lead") - follower = Entity("follower") - - # 4) Wait for several seconds - general.idle_wait(2.0) # wait for lead and follower to move - - # 5) Check to see if lead entity and follower collided - Report.critical_result(Tests.check_collision_happened, lead.collided and follower.collided) - - # 6) Exit Game Mode - helper.exit_game_mode(Tests.exit_game_mode) - - - -if __name__ == "__main__": - from editor_python_test_tools.utils import Report - Report.start_test(Joints_FixedLeadFollowerCollide) diff --git a/AutomatedTesting/Gem/PythonTests/Physics/tests/rigid_body/RigidBody_KinematicModeWorks.py b/AutomatedTesting/Gem/PythonTests/Physics/tests/rigid_body/RigidBody_KinematicModeWorks.py index 1c53854bab..05671389c2 100644 --- a/AutomatedTesting/Gem/PythonTests/Physics/tests/rigid_body/RigidBody_KinematicModeWorks.py +++ b/AutomatedTesting/Gem/PythonTests/Physics/tests/rigid_body/RigidBody_KinematicModeWorks.py @@ -80,6 +80,20 @@ def RigidBody_KinematicModeWorks(): ramp_id = general.find_game_entity("Ramp") Report.result(Tests.find_ramp, ramp_id.IsValid()) + # 2.1) setup collision handler + class RampTouched: + value = False + + def on_collision_begin(args): + other_id = args[0] + if other_id.Equal(ramp_id): + Report.info("Box touched ramp") + RampTouched.value = True + + handler = azlmbr.physics.CollisionNotificationBusHandler() + handler.connect(box_id) + handler.add_callback("OnCollisionBegin", on_collision_begin) + # 3) Check for kinematic ramp and not kinematic box box_kinematic = azlmbr.physics.RigidBodyRequestBus(azlmbr.bus.Event, "IsKinematic", box_id) Report.result(Tests.box_is_not_kinematic, not box_kinematic) @@ -98,21 +112,7 @@ def RigidBody_KinematicModeWorks(): ramp_pos_start = azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", ramp_id) Report.info("Ramp's initial position: {}".format(ramp_pos_start)) - # 6) Check to see that the box hits the ramp - class RampTouched: - value = False - - def on_collision_begin(args): - other_id = args[0] - if other_id.Equal(ramp_id): - Report.info("Box touched ramp") - RampTouched.value = True - - handler = azlmbr.physics.CollisionNotificationBusHandler() - handler.connect(box_id) - handler.add_callback("OnCollisionBegin", on_collision_begin) - - # 6.5) Wait for the box to touch the ramp or timeout + # 6) Wait for the box to touch the ramp or timeout helper.wait_for_condition(lambda: RampTouched.value, TIME_OUT) Report.result(Tests.box_touched_ramp, RampTouched.value) diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/Joints_FixedLeadFollowerCollide.ly b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/Joints_FixedLeadFollowerCollide.ly deleted file mode 100644 index 0c3ac9e668..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/Joints_FixedLeadFollowerCollide.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3093fee5317ba6fb353a435c09f43f13c5e722421aae62a297f699c202d6129e -size 6699 diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/filelist.xml b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/filelist.xml deleted file mode 100644 index d0960f8154..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/level.pak b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/level.pak deleted file mode 100644 index 532be2c1bd..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1daa050e732ff0594601bbfca8ac9ed05972c2f9fa3e43dbc8645e802ed2730 -size 7959 diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/Environment.xml b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/Environment.xml deleted file mode 100644 index 4ba36f66ae..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TimeOfDay.xml deleted file mode 100644 index 456d609b8a..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/leveldata/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/tags.txt b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/terraintexture.pak b/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/terraintexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/Physics/Joints_FixedLeadFollowerCollide/terraintexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly index 3d17ae7ccc..86dd941423 100644 --- a/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly +++ b/AutomatedTesting/Levels/Physics/Joints_HingeNoLimitsConstrained/Joints_HingeNoLimitsConstrained.ly @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:012caffa9354f6253d2e626ba183b44eb02a74eba286fde0430227ef024411e2 -size 8961 +oid sha256:817bd8dd22e185136418b60fba5b3552993687515d3d5ae96791f2c3be907b92 +size 7233 diff --git a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly index 92e6788bf0..d6052ffa7c 100644 --- a/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly +++ b/AutomatedTesting/Levels/Physics/RigidBody_KinematicModeWorks/RigidBody_KinematicModeWorks.ly @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:619bcf0c2a2b08f4ffe05e60858c479828fe39d5530f4e488b9c0ec8a585ccb7 -size 7735 +oid sha256:cb97ada674d123c67d7a32eb65e81fa66472cf51f748054c4a4297649f2a0f40 +size 5568 From 9baf76beab35c190eee3044e2d57b4b70421e5a3 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 11 Oct 2021 13:28:33 +0100 Subject: [PATCH 211/226] Add missing header for non-unity builds on Linux. Signed-off-by: John --- Code/Editor/MainWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Editor/MainWindow.cpp b/Code/Editor/MainWindow.cpp index 05477bb0c7..ed72cd9170 100644 --- a/Code/Editor/MainWindow.cpp +++ b/Code/Editor/MainWindow.cpp @@ -98,6 +98,7 @@ AZ_POP_DISABLE_WARNING #include "ActionManager.h" #include +#include #include using namespace AZ; From 6c8441713d91a0237fe002a687b43847d92c8ab0 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 11 Oct 2021 14:02:56 +0100 Subject: [PATCH 212/226] Fix another missing header for Linux non-unity. Signed-off-by: John --- Code/Editor/GameExporter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Editor/GameExporter.cpp b/Code/Editor/GameExporter.cpp index 9315505e08..0324629877 100644 --- a/Code/Editor/GameExporter.cpp +++ b/Code/Editor/GameExporter.cpp @@ -28,6 +28,7 @@ #include "Objects/EntityObject.h" #include +#include ////////////////////////////////////////////////////////////////////////// #define MUSIC_LEVEL_LIBRARY_FILE "Music.xml" From e26d1f9ec564d3eed9412d6e65d6345daada6bd9 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 11 Oct 2021 14:17:46 +0100 Subject: [PATCH 213/226] Linux non-unity header fix (again). Signed-off-by: John --- Code/Editor/Viewport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Editor/Viewport.cpp b/Code/Editor/Viewport.cpp index 5b4f4a4df3..44c41fef2f 100644 --- a/Code/Editor/Viewport.cpp +++ b/Code/Editor/Viewport.cpp @@ -18,6 +18,7 @@ #include #include +#include #include // Editor From 3ef24d3a05400dbf6a1ba8d964f9cc1c37d7968a Mon Sep 17 00:00:00 2001 From: John Date: Mon, 11 Oct 2021 14:28:27 +0100 Subject: [PATCH 214/226] Header fix. Signed-off-by: John --- Code/Editor/Viewport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Editor/Viewport.cpp b/Code/Editor/Viewport.cpp index 44c41fef2f..c8f2e268d9 100644 --- a/Code/Editor/Viewport.cpp +++ b/Code/Editor/Viewport.cpp @@ -18,8 +18,8 @@ #include #include -#include #include +#include // Editor #include "ViewManager.h" From 2d7dfe5047bef70e3dcf4fcf77a8fab080eb3516 Mon Sep 17 00:00:00 2001 From: bosnichd Date: Mon, 11 Oct 2021 08:36:07 -0600 Subject: [PATCH 215/226] Increase the max time in the iOS run loop from DBL_EPSILON to one millisecond to address issue where the virtual keyboard is sluggish. (#4580) Signed-off-by: bosnichd --- .../Platform/iOS/AzFramework/Application/Application_iOS.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzFramework/Platform/iOS/AzFramework/Application/Application_iOS.mm b/Code/Framework/AzFramework/Platform/iOS/AzFramework/Application/Application_iOS.mm index 41bba124c7..36d920085b 100644 --- a/Code/Framework/AzFramework/Platform/iOS/AzFramework/Application/Application_iOS.mm +++ b/Code/Framework/AzFramework/Platform/iOS/AzFramework/Application/Application_iOS.mm @@ -112,9 +112,10 @@ namespace AzFramework void ApplicationIos::PumpSystemEventLoopUntilEmpty() { SInt32 result; + const CFTimeInterval MaxSecondsInRunLoop = 0.001; // One millisecond do { - result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, DBL_EPSILON, TRUE); + result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, MaxSecondsInRunLoop, TRUE); } while (result == kCFRunLoopRunHandledSource); } From 3b89f7e1cd0c259642d6b70de5b96a4a734267f9 Mon Sep 17 00:00:00 2001 From: Allen Jackson <23512001+jackalbe@users.noreply.github.com> Date: Mon, 11 Oct 2021 09:55:28 -0500 Subject: [PATCH 216/226] {lyn7283} added test for assetHint Json Serialzier callback logic (#4586) * {lyn7283} adding unit test for the assetHint Json Serialzier callback logic AssetTracker_Callback_Works will regress the functionality Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> * clean up of the jsonRegistrationContext Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com> --- .../AzCore/Tests/AssetJsonSerializerTests.cpp | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp b/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp index e04c5190f9..e3a2c5c23b 100644 --- a/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp +++ b/Code/Framework/AzCore/Tests/AssetJsonSerializerTests.cpp @@ -64,6 +64,91 @@ namespace JsonSerializationTests }; + class TestSerializedAssetTracker + : public BaseJsonSerializerFixture + { + public: + void SetUp() override + { + BaseJsonSerializerFixture::SetUp(); + + AZ::AllocatorInstance::Create(); + AZ::AllocatorInstance::Create(); + + // Set up the Job Manager with 1 thread so that the Asset Manager is able to load assets. + AZ::JobManagerDesc jobDesc; + AZ::JobManagerThreadDesc threadDesc; + jobDesc.m_workerThreads.push_back(threadDesc); + m_jobManager = aznew AZ::JobManager(jobDesc); + m_jobContext = aznew AZ::JobContext(*m_jobManager); + AZ::JobContext::SetGlobalContext(m_jobContext); + + AZ::Data::AssetManager::Descriptor descriptor; + AZ::Data::AssetManager::Create(descriptor); + AZ::Data::AssetManager::Instance().RegisterHandler(&m_assetHandler, azrtti_typeid()); + + m_serializeContext->RegisterGenericType>(); + m_jsonRegistrationContext->Serializer()->HandlesType(); + } + + void TearDown() override + { + m_jsonRegistrationContext->EnableRemoveReflection(); + m_jsonRegistrationContext->Serializer()->HandlesType(); + m_jsonRegistrationContext->DisableRemoveReflection(); + + AZ::Data::AssetManager::Instance().UnregisterHandler(&m_assetHandler); + AZ::Data::AssetManager::Destroy(); + + AZ::JobContext::SetGlobalContext(nullptr); + delete m_jobContext; + delete m_jobManager; + + AZ::AllocatorInstance::Destroy(); + AZ::AllocatorInstance::Destroy(); + + BaseJsonSerializerFixture::TearDown(); + } + + private: + TestAssetHandler m_assetHandler; + AZ::JobManager* m_jobManager{ nullptr }; + AZ::JobContext* m_jobContext{ nullptr }; + }; + + TEST_F(TestSerializedAssetTracker, AssetTracker_Callback_Works) + { + auto assetCallback = [](AZ::Data::Asset& asset) + { + if (!asset.GetId().IsValid() && !asset.GetHint().empty()) + { + if (asset.GetHint() == "test/path/foo.asset") + { + asset.SetHint("passed"); + } + } + }; + auto tracker = AZ::Data::SerializedAssetTracker{}; + tracker.SetAssetFixUp(assetCallback); + + AZ::JsonDeserializerSettings settings; + settings.m_metadata.Add(tracker); + settings.m_registrationContext = this->m_jsonRegistrationContext.get(); + settings.m_serializeContext = this->m_serializeContext.get(); + + AZStd::string_view assetHintOnlyTestAsset = R"( + { + "assetHint" : "test/path/foo.asset" + })"; + rapidjson::Document jsonDom; + jsonDom.Parse(assetHintOnlyTestAsset.data()); + + AZ::Data::Asset instance; + auto result = AZ::JsonSerialization::Load(instance, jsonDom, settings); + EXPECT_NE(result.GetProcessing(), AZ::JsonSerializationResult::Processing::Halted); + EXPECT_STREQ(instance.GetHint().c_str(), "passed"); + } + class AssetSerializerTestDescription final : public JsonSerializerConformityTestDescriptor> { From 5c859cb13493e0c4e42984099c342a7fb9c0b104 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Mon, 11 Oct 2021 16:23:24 +0100 Subject: [PATCH 217/226] Fix camera drift issues (#4576) * remove some unused code in RenderViewportWidget and make viewing devicePixelRatioF easier Signed-off-by: hultonha * updates to how cursor positions are calculate to handle the viewport widget moving Signed-off-by: hultonha * remove optional for previous position Signed-off-by: hultonha * add test to capture error with moving the widget Signed-off-by: hultonha * minor comment updates before publishing PR Signed-off-by: hultonha --- .../test_ModularViewportCameraController.cpp | 48 +++++++++++++++++++ .../Input/QtEventToAzInputManager.cpp | 20 ++++---- .../Input/QtEventToAzInputManager.h | 6 +-- .../Viewport/RenderViewportWidget.h | 15 +++--- .../Source/Viewport/RenderViewportWidget.cpp | 11 ++--- 5 files changed, 71 insertions(+), 29 deletions(-) diff --git a/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp b/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp index 157291cfc2..ea3653f663 100644 --- a/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp +++ b/Code/Editor/Lib/Tests/test_ModularViewportCameraController.cpp @@ -69,6 +69,7 @@ namespace UnitTest m_rootWidget = AZStd::make_unique(); m_rootWidget->setFixedSize(WidgetSize); + m_rootWidget->move(0, 0); // explicitly set the widget to be in the upper left corner m_controllerList = AZStd::make_shared(); m_controllerList->RegisterViewportContext(TestViewportId); @@ -344,4 +345,51 @@ namespace UnitTest // Clean-up HaltCollaborators(); } + + // test to verify deltas and cursor positions are handled correctly when the widget is moved + TEST_F(ModularViewportCameraControllerFixture, CameraDoesNotStutterAfterWidgetIsMoved) + { + // Given + PrepareCollaborators(); + SandboxEditor::SetCameraCaptureCursorForLook(true); + + const float deltaTime = 1.0f / 60.0f; + + // When + // move cursor to the center of the screen + auto start = QPoint(WidgetSize.width() / 2, WidgetSize.height() / 2); + MouseMove(m_rootWidget.get(), start, QPoint(0, 0)); + m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(deltaTime), AZ::ScriptTimePoint() }); + + // move camera right + const auto mouseDelta = QPoint(200, 0); + MousePressAndMove(m_rootWidget.get(), start, mouseDelta, Qt::MouseButton::RightButton); + m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(deltaTime), AZ::ScriptTimePoint() }); + + QTest::mouseRelease(m_rootWidget.get(), Qt::MouseButton::RightButton, Qt::NoModifier, start + mouseDelta); + + // update the position of the widget + const auto offset = QPoint(500, 500); + m_rootWidget->move(offset); + + // move cursor back to widget center + MouseMove(m_rootWidget.get(), start, QPoint(0, 0)); + m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(deltaTime), AZ::ScriptTimePoint() }); + + // move camera left + MousePressAndMove(m_rootWidget.get(), start, -mouseDelta, Qt::MouseButton::RightButton); + m_controllerList->UpdateViewport({ TestViewportId, AzFramework::FloatSeconds(deltaTime), AZ::ScriptTimePoint() }); + + // Then + // ensure the camera rotation has returned to the identity + const AZ::Quaternion cameraRotation = m_cameraViewportContextView->GetCameraTransform().GetRotation(); + const auto eulerAngles = AzFramework::EulerAngles(AZ::Matrix3x3::CreateFromQuaternion(cameraRotation)); + + using ::testing::FloatNear; + EXPECT_THAT(eulerAngles.GetX(), FloatNear(0.0f, 0.001f)); + EXPECT_THAT(eulerAngles.GetZ(), FloatNear(0.0f, 0.001f)); + + // Clean-up + HaltCollaborators(); + } } // namespace UnitTest diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp index 5fcf7e11d3..18acccf049 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.cpp @@ -261,10 +261,10 @@ namespace AzToolsFramework // ensures cursor positions are refreshed correctly with context menu focus changes) if (eventType == QEvent::FocusIn) { - const auto widgetCursorPosition = m_sourceWidget->mapFromGlobal(QCursor::pos()); - if (m_sourceWidget->geometry().contains(widgetCursorPosition)) + const auto globalCursorPosition = QCursor::pos(); + if (m_sourceWidget->geometry().contains(globalCursorPosition)) { - HandleMouseMoveEvent(widgetCursorPosition); + HandleMouseMoveEvent(globalCursorPosition); } } } @@ -290,7 +290,7 @@ namespace AzToolsFramework else if (eventType == QEvent::Type::MouseMove) { auto mouseEvent = static_cast(event); - HandleMouseMoveEvent(mouseEvent->pos()); + HandleMouseMoveEvent(mouseEvent->globalPos()); } // Map wheel events to the mouse Z movement channel. else if (eventType == QEvent::Type::Wheel) @@ -370,11 +370,12 @@ namespace AzToolsFramework return QPoint{ denormalizedX, denormalizedY }; } - void QtEventToAzInputMapper::HandleMouseMoveEvent(const QPoint& cursorPosition) + void QtEventToAzInputMapper::HandleMouseMoveEvent(const QPoint& globalCursorPosition) { - const QPoint cursorDelta = cursorPosition - m_previousCursorPosition; + const QPoint cursorDelta = globalCursorPosition - m_previousGlobalCursorPosition; - m_mouseDevice->m_cursorPositionData2D->m_normalizedPosition = WidgetPositionToNormalizedPosition(cursorPosition); + m_mouseDevice->m_cursorPositionData2D->m_normalizedPosition = + WidgetPositionToNormalizedPosition(m_sourceWidget->mapFromGlobal(globalCursorPosition)); m_mouseDevice->m_cursorPositionData2D->m_normalizedPositionDelta = WidgetPositionToNormalizedPosition(cursorDelta); ProcessPendingMouseEvents(cursorDelta); @@ -382,12 +383,11 @@ namespace AzToolsFramework if (m_capturingCursor) { // Reset our cursor position to the previous point - const QPoint screenCursorPosition = m_sourceWidget->mapToGlobal(m_previousCursorPosition); - AzQtComponents::SetCursorPos(screenCursorPosition); + AzQtComponents::SetCursorPos(m_previousGlobalCursorPosition); } else { - m_previousCursorPosition = cursorPosition; + m_previousGlobalCursorPosition = globalCursorPosition; } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.h index aaf3fb6295..5add24ad84 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Input/QtEventToAzInputManager.h @@ -129,7 +129,7 @@ namespace AzToolsFramework // Handle mouse click events. void HandleMouseButtonEvent(QMouseEvent* mouseEvent); // Handle mouse move events. - void HandleMouseMoveEvent(const QPoint& cursorPosition); + void HandleMouseMoveEvent(const QPoint& globalCursorPosition); // Handles key press / release events (or ShortcutOverride events for keys listed in m_highPriorityKeys). void HandleKeyEvent(QKeyEvent* keyEvent); // Handles mouse wheel events. @@ -156,8 +156,8 @@ namespace AzToolsFramework AZStd::unordered_set m_highPriorityKeys; // A lookup table for AZ input channel ID -> physical input channel on our mouse or keyboard device. AZStd::unordered_map m_channels; - // Where the position of the mouse cursor was at the last cursor event. - QPoint m_previousCursorPosition; + // Where the mouse cursor was at the last cursor event. + QPoint m_previousGlobalCursorPosition; // The source widget to map events from, used to calculate the relative mouse position within the widget bounds. QWidget* m_sourceWidget; // Flags whether or not Qt events should currently be processed. diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h index 623d759c9f..b407aa2b4c 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Viewport/RenderViewportWidget.h @@ -90,7 +90,7 @@ namespace AtomToolsFramework //! Input processing is enabled by default. void SetInputProcessingEnabled(bool enabled); - // AzToolsFramework::ViewportInteraction::ViewportInteractionRequestBus::Handler ... + // AzToolsFramework::ViewportInteraction::ViewportInteractionRequestBus::Handler overrides ... AzFramework::CameraState GetCameraState() override; AzFramework::ScreenPoint ViewportWorldToScreen(const AZ::Vector3& worldPosition) override; AZStd::optional ViewportScreenToWorld(const AzFramework::ScreenPoint& screenPosition, float depth) override; @@ -98,12 +98,12 @@ namespace AtomToolsFramework const AzFramework::ScreenPoint& screenPosition) override; float DeviceScalingFactor() override; - // AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Handler ... + // AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Handler overrides ... void BeginCursorCapture() override; void EndCursorCapture() override; bool IsMouseOver() const override; - // AzFramework::WindowRequestBus::Handler ... + // AzFramework::WindowRequestBus::Handler overrides ... void SetWindowTitle(const AZStd::string& title) override; AzFramework::WindowSize GetClientAreaSize() const override; void ResizeClientArea(AzFramework::WindowSize clientAreaSize) override; @@ -116,18 +116,17 @@ namespace AtomToolsFramework uint32_t GetDisplayRefreshRate() const override; protected: - // AzFramework::InputChannelEventListener ... + // AzFramework::InputChannelEventListener overrides ... bool OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) override; - // AZ::TickBus::Handler ... + // AZ::TickBus::Handler overrides ... void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; - // QWidget ... + // QWidget overrides ... void resizeEvent(QResizeEvent *event) override; bool event(QEvent* event) override; void enterEvent(QEvent* event) override; void leaveEvent(QEvent* event) override; - void mouseMoveEvent(QMouseEvent* event) override; private: void SendWindowResizeEvent(); @@ -143,8 +142,6 @@ namespace AtomToolsFramework AZ::RPI::AuxGeomDrawPtr m_auxGeom; // Tracks whether the cursor is currently over our viewport, used for mouse input event book-keeping. bool m_mouseOver = false; - // The last recorded mouse position, in local viewport screen coordinates. - QPointF m_mousePosition; // Captures the time between our render events to give controllers a time delta. QElapsedTimer m_renderTimer; // The time of the last recorded tick event from the system tick bus. diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index 7192afebf7..83926ecc79 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -214,20 +214,17 @@ namespace AtomToolsFramework m_mouseOver = false; } - void RenderViewportWidget::mouseMoveEvent(QMouseEvent* event) - { - m_mousePosition = event->localPos(); - } - void RenderViewportWidget::SendWindowResizeEvent() { // Scale the size by the DPI of the platform to // get the proper size in pixels. + const auto pixelRatio = devicePixelRatioF(); const QSize uiWindowSize = size(); - const QSize windowSize = uiWindowSize * devicePixelRatioF(); + const QSize windowSize = uiWindowSize * pixelRatio; const AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); - AzFramework::WindowNotificationBus::Event(windowId, &AzFramework::WindowNotifications::OnWindowResized, windowSize.width(), windowSize.height()); + AzFramework::WindowNotificationBus::Event( + windowId, &AzFramework::WindowNotifications::OnWindowResized, windowSize.width(), windowSize.height()); } AZ::Name RenderViewportWidget::GetCurrentContextName() const From 189aa5f3acc225a66763cece9bd5efc8dea37228 Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Mon, 11 Oct 2021 08:50:05 -0700 Subject: [PATCH 218/226] Disable the creation of the UserSettings.xml file in Xcb tests (#4593) Signed-off-by: Chris Burel --- .../Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp index 3abbcdc564..2b1f21ede7 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbInputDeviceKeyboardTests.cpp @@ -12,6 +12,7 @@ #include +#include #include #include #include @@ -196,6 +197,7 @@ namespace AzFramework Application application; application.Start({}, {}); + AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const InputChannel* inputChannel = InputChannelRequests::FindInputChannel(InputDeviceKeyboard::Key::AlphanumericA); ASSERT_TRUE(inputChannel); @@ -420,6 +422,7 @@ namespace AzFramework Application application; application.Start({}, {}); + AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); for (int i = 0; i < 4; ++i) { From 091b729183fbcf7e0041aeb0b28cc8724d38e321 Mon Sep 17 00:00:00 2001 From: Tobias Alexander Franke Date: Mon, 11 Oct 2021 18:48:28 +0200 Subject: [PATCH 219/226] Do not run SSAO pass when disabled (#3826) * Define fallback slots when shader is disabled * Disable SSAO parent pass depending on the settings * Move SSAO modulation pass into SsaoParent pass so it can be disabled with the rest of SSAO * Enable SSAO by default Co-authored-by: Tobias Alexander Franke --- .../Common/Assets/Passes/OpaqueParent.pass | 29 ++------------- .../Common/Assets/Passes/SsaoCompute.pass | 8 +++- .../Common/Assets/Passes/SsaoParent.pass | 37 ++++++++++++++++++- .../Code/Source/PostProcessing/SsaoPasses.cpp | 27 +++++++++++++- 4 files changed, 72 insertions(+), 29 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/Passes/OpaqueParent.pass b/Gems/Atom/Feature/Common/Assets/Passes/OpaqueParent.pass index f45f5c8b07..752d565234 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/OpaqueParent.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/OpaqueParent.pass @@ -472,36 +472,15 @@ "Pass": "Parent", "Attachment": "DepthLinear" } - } - ] - }, - { - "Name": "ModulateWithSsao", - "TemplateName": "ModulateTextureTemplate", - "Enabled": true, - "Connections": [ - { - "LocalSlot": "Input", - "AttachmentRef": { - "Pass": "Ssao", - "Attachment": "Output" - } }, { - "LocalSlot": "InputOutput", + "LocalSlot": "Modulate", "AttachmentRef": { "Pass": "SubsurfaceScatteringPass", "Attachment": "Output" } } - ], - "PassData": { - "$type": "ComputePassData", - "ShaderAsset": { - "FilePath": "Shaders/PostProcessing/ModulateTexture.shader" - }, - "Make Fullscreen Pass": true - } + ] }, { "Name": "DiffuseSpecularMergePass", @@ -510,8 +489,8 @@ { "LocalSlot": "InputDiffuse", "AttachmentRef": { - "Pass": "ModulateWithSsao", - "Attachment": "InputOutput" + "Pass": "Ssao", + "Attachment": "Output" } }, { diff --git a/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass b/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass index 034b4359b4..3c4a8c76f1 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass @@ -51,7 +51,13 @@ }, "Make Fullscreen Pass": true, "PipelineViewTag": "MainCamera" - } + }, + "FallbackConnections": [ + { + "Input": "LinearDepth", + "Output": "Output" + } + ] } } } diff --git a/Gems/Atom/Feature/Common/Assets/Passes/SsaoParent.pass b/Gems/Atom/Feature/Common/Assets/Passes/SsaoParent.pass index b94ca4ab38..111518706f 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/SsaoParent.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/SsaoParent.pass @@ -12,6 +12,11 @@ "SlotType": "Input", "ScopeAttachmentUsage": "Shader" }, + { + "Name": "Modulate", + "SlotType": "Input", + "ScopeAttachmentUsage": "Shader" + }, { "Name": "Output", "SlotType": "Output", @@ -22,8 +27,8 @@ { "LocalSlot": "Output", "AttachmentRef": { - "Pass": "Upsample", - "Attachment": "Output" + "Pass": "ModulateWithSsao", + "Attachment": "InputOutput" } } ], @@ -103,6 +108,34 @@ } } ] + }, + { + "Name": "ModulateWithSsao", + "TemplateName": "ModulateTextureTemplate", + "Enabled": true, + "Connections": [ + { + "LocalSlot": "Input", + "AttachmentRef": { + "Pass": "Upsample", + "Attachment": "Output" + } + }, + { + "LocalSlot": "InputOutput", + "AttachmentRef": { + "Pass": "Parent", + "Attachment": "Modulate" + } + } + ], + "PassData": { + "$type": "ComputePassData", + "ShaderAsset": { + "FilePath": "Shaders/PostProcessing/ModulateTexture.shader" + }, + "Make Fullscreen Pass": true + } } ] } diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SsaoPasses.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SsaoPasses.cpp index 5e6d4b2ad9..15f7f52338 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SsaoPasses.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SsaoPasses.cpp @@ -34,7 +34,32 @@ namespace AZ bool SsaoParentPass::IsEnabled() const { - return ParentPass::IsEnabled(); + if (!ParentPass::IsEnabled()) + { + return false; + } + const RPI::Scene* scene = GetScene(); + if (!scene) + { + return false; + } + PostProcessFeatureProcessor* fp = scene->GetFeatureProcessor(); + const RPI::ViewPtr view = GetRenderPipeline()->GetDefaultView(); + if (!fp) + { + return true; + } + PostProcessSettings* postProcessSettings = fp->GetLevelSettingsFromView(view); + if (!postProcessSettings) + { + return true; + } + const SsaoSettings* ssaoSettings = postProcessSettings->GetSsaoSettings(); + if (!ssaoSettings) + { + return true; + } + return ssaoSettings->GetEnabled(); } void SsaoParentPass::InitializeInternal() From c759bc9cd02e5a05fc418728ef5d023f4c79ef91 Mon Sep 17 00:00:00 2001 From: Junbo Liang <68558268+junbo75@users.noreply.github.com> Date: Mon, 11 Oct 2021 10:52:00 -0700 Subject: [PATCH 220/226] Update the Jenkins script to disable access log during AWSI deployment (#4579) Signed-off-by: Junbo Liang --- scripts/build/Platform/Windows/deploy_cdk_applications.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/Platform/Windows/deploy_cdk_applications.cmd b/scripts/build/Platform/Windows/deploy_cdk_applications.cmd index 54a2485360..006e0158c0 100644 --- a/scripts/build/Platform/Windows/deploy_cdk_applications.cmd +++ b/scripts/build/Platform/Windows/deploy_cdk_applications.cmd @@ -57,7 +57,7 @@ IF ERRORLEVEL 1 ( exit /b 1 ) -CALL :DeployCDKApplication AWSCore --all "-c disable_access_log=true" +CALL :DeployCDKApplication AWSCore "-c disable_access_log=true --all" IF ERRORLEVEL 1 ( exit /b 1 ) From ef3470b0a91c1f0f11becc6dcad487d07addb2b1 Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Mon, 11 Oct 2021 12:04:44 -0700 Subject: [PATCH 221/226] Dependency confirmation screen and URL display fix Signed-off-by: AMZN-alexpete <26804013+AMZN-alexpete@users.noreply.github.com> --- .../Resources/ProjectManager.qss | 23 +++- .../Source/CreateProjectCtrl.cpp | 6 +- .../Source/GemCatalog/GemCatalogScreen.cpp | 27 +++-- .../Source/GemCatalog/GemCatalogScreen.h | 9 +- .../GemCatalog/GemDependenciesDialog.cpp | 80 ++++++++++++++ .../Source/GemCatalog/GemDependenciesDialog.h | 27 +++++ .../Source/GemCatalog/GemItemDelegate.cpp | 102 +++++++++++++++--- .../Source/GemCatalog/GemItemDelegate.h | 3 + .../Source/GemCatalog/GemListView.cpp | 21 ---- .../Source/GemCatalog/GemModel.cpp | 14 +++ .../Source/GemCatalog/GemModel.h | 1 + .../GemCatalog/GemRequirementDelegate.cpp | 47 ++++++-- .../GemCatalog/GemRequirementDelegate.h | 3 + .../GemCatalog/GemRequirementDialog.cpp | 29 ++--- .../Source/GemCatalog/GemRequirementDialog.h | 12 +-- .../GemRequirementFilterProxyModel.cpp | 21 +--- .../GemRequirementFilterProxyModel.h | 5 +- .../GemCatalog/GemRequirementListView.cpp | 1 - .../Tools/ProjectManager/Source/TagWidget.cpp | 79 ++++---------- Code/Tools/ProjectManager/Source/TagWidget.h | 6 -- .../Source/UpdateProjectCtrl.cpp | 6 +- .../project_manager_files.cmake | 2 + 22 files changed, 341 insertions(+), 183 deletions(-) create mode 100644 Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.cpp create mode 100644 Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.h diff --git a/Code/Tools/ProjectManager/Resources/ProjectManager.qss b/Code/Tools/ProjectManager/Resources/ProjectManager.qss index f91a597481..5f7826dbac 100644 --- a/Code/Tools/ProjectManager/Resources/ProjectManager.qss +++ b/Code/Tools/ProjectManager/Resources/ProjectManager.qss @@ -496,13 +496,34 @@ QProgressBar::chunk { background-color: #333333; } -/************** Filter tag widget **************/ +#GemDependenciesDialog QLabel { + margin-bottom:10px; +} + +#GemDependenciesDialog QCheckBox { + background-color: #333333; + border-radius: 3px; + spacing:3px; + margin-right:5px; + padding:4px; + margin-top:5px; +} + +/************** Filter Tag widget **************/ #FilterTagWidgetTextLabel { color: #94D2FF; font-size: 10px; } +#TagWidget { + background-color: #333333; + padding:3px; + font-size:12px; + border-radius: 3px; + margin-right: 3px; +} + /************** Gems SubWidget **************/ #gemSubWidgetTitleLabel { diff --git a/Code/Tools/ProjectManager/Source/CreateProjectCtrl.cpp b/Code/Tools/ProjectManager/Source/CreateProjectCtrl.cpp index f098518fd3..84b931cb30 100644 --- a/Code/Tools/ProjectManager/Source/CreateProjectCtrl.cpp +++ b/Code/Tools/ProjectManager/Source/CreateProjectCtrl.cpp @@ -238,9 +238,13 @@ namespace O3DE::ProjectManager PythonBindingsInterface::Get()->AddProject(projectInfo.m_path); #ifdef TEMPLATE_GEM_CONFIGURATION_ENABLED - if (!m_gemCatalogScreen->EnableDisableGemsForProject(projectInfo.m_path)) + const GemCatalogScreen::EnableDisableGemsResult gemResult = m_gemCatalogScreen->EnableDisableGemsForProject(m_projectInfo.m_path); + if (gemResult == GemCatalogScreen::EnableDisableGemsResult::Failed) { QMessageBox::critical(this, tr("Failed to configure gems"), tr("Failed to configure gems for template.")); + } + if (gemResult != GemCatalogScreen::EnableDisableGemsResult::Success) + { return; } #endif // TEMPLATE_GEM_CONFIGURATION_ENABLED diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp index a41a81b448..945878768d 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -134,7 +135,7 @@ namespace O3DE::ProjectManager } } - bool GemCatalogScreen::EnableDisableGemsForProject(const QString& projectPath) + GemCatalogScreen::EnableDisableGemsResult GemCatalogScreen::EnableDisableGemsForProject(const QString& projectPath) { IPythonBindings* pythonBindings = PythonBindingsInterface::Get(); QVector toBeAdded = m_gemModel->GatherGemsToBeAdded(); @@ -142,13 +143,23 @@ namespace O3DE::ProjectManager if (m_gemModel->DoGemsToBeAddedHaveRequirements()) { - GemRequirementDialog* confirmRequirementsDialog = new GemRequirementDialog(m_gemModel, toBeAdded, this); - confirmRequirementsDialog->exec(); + GemRequirementDialog* confirmRequirementsDialog = new GemRequirementDialog(m_gemModel, this); + if(confirmRequirementsDialog->exec() == QDialog::Rejected) + { + return EnableDisableGemsResult::Cancel; + } + } - if (confirmRequirementsDialog->GetButtonResult() != QDialogButtonBox::ApplyRole) + if (m_gemModel->HasDependentGemsToRemove()) + { + GemDependenciesDialog* dependenciesDialog = new GemDependenciesDialog(m_gemModel, this); + if(dependenciesDialog->exec() == QDialog::Rejected) { - return false; + return EnableDisableGemsResult::Cancel; } + + toBeAdded = m_gemModel->GatherGemsToBeAdded(); + toBeRemoved = m_gemModel->GatherGemsToBeRemoved(); } for (const QModelIndex& modelIndex : toBeAdded) @@ -160,7 +171,7 @@ namespace O3DE::ProjectManager QMessageBox::critical(nullptr, "Operation failed", QString("Cannot add gem %1 to project.\n\nError:\n%2").arg(GemModel::GetDisplayName(modelIndex), result.GetError().c_str())); - return false; + return EnableDisableGemsResult::Failed; } } @@ -173,11 +184,11 @@ namespace O3DE::ProjectManager QMessageBox::critical(nullptr, "Operation failed", QString("Cannot remove gem %1 from project.\n\nError:\n%2").arg(GemModel::GetDisplayName(modelIndex), result.GetError().c_str())); - return false; + return EnableDisableGemsResult::Failed; } } - return true; + return EnableDisableGemsResult::Success; } ProjectManagerScreen GemCatalogScreen::GetScreenEnum() diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.h index 5b48b2f90e..72e8d44f65 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemCatalogScreen.h @@ -29,7 +29,14 @@ namespace O3DE::ProjectManager ProjectManagerScreen GetScreenEnum() override; void ReinitForProject(const QString& projectPath); - bool EnableDisableGemsForProject(const QString& projectPath); + + enum class EnableDisableGemsResult + { + Failed = 0, + Success, + Cancel + }; + EnableDisableGemsResult EnableDisableGemsForProject(const QString& projectPath); GemModel* GetGemModel() const { return m_gemModel; } diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.cpp new file mode 100644 index 0000000000..98aebd8fab --- /dev/null +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include +#include +#include + +#include +#include +#include +#include + +namespace O3DE::ProjectManager +{ + GemDependenciesDialog::GemDependenciesDialog(GemModel* gemModel, QWidget *parent) + : QDialog(parent) + { + setWindowTitle(tr("Dependent Gems")); + setObjectName("GemDependenciesDialog"); + setAttribute(Qt::WA_DeleteOnClose); + setModal(true); + + QVBoxLayout* layout = new QVBoxLayout(); + // layout margin/alignment cannot be set with qss + layout->setMargin(15); + layout->setAlignment(Qt::AlignTop); + setLayout(layout); + + // message + QLabel* instructionLabel = new QLabel( + tr("The following gem dependencies are no longer needed and will be deactivated.

" + "To keep these Gems enabled, select the checkbox next to it.")); + layout->addWidget(instructionLabel); + + // checkboxes + FlowLayout* flowLayout = new FlowLayout(); + QVector gemsToRemove = gemModel->GatherGemsToBeRemoved(/*includeDependencies=*/true); + for (const QModelIndex& gem : gemsToRemove) + { + if (GemModel::WasPreviouslyAddedDependency(gem)) + { + QCheckBox* checkBox = new QCheckBox(GemModel::GetName(gem)); + connect(checkBox, &QCheckBox::stateChanged, this, + [=](int state) + { + GemModel::SetIsAdded(*gemModel, gem, /*isAdded=*/state == Qt::Checked); + }); + flowLayout->addWidget(checkBox); + } + } + layout->addLayout(flowLayout); + + layout->addSpacing(10); + layout->addStretch(1); + + // buttons + QDialogButtonBox* dialogButtons = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok); + connect(dialogButtons, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(dialogButtons, &QDialogButtonBox::rejected, this, + [=]() + { + // de-select any Gems the user selected because they're canceling + for (const QModelIndex& gem : gemsToRemove) + { + if (GemModel::WasPreviouslyAddedDependency(gem) && GemModel::IsAdded(gem)) + { + GemModel::SetIsAdded(*gemModel, gem, /*isAdded=*/false); + } + } + + reject(); + }); + layout->addWidget(dialogButtons); + } +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.h new file mode 100644 index 0000000000..df8ca6f8a2 --- /dev/null +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemDependenciesDialog.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#if !defined(Q_MOC_RUN) +#include +#endif + +namespace O3DE::ProjectManager +{ + QT_FORWARD_DECLARE_CLASS(GemModel) + + class GemDependenciesDialog + : public QDialog + { + Q_OBJECT // AUTOMOC + public: + explicit GemDependenciesDialog(GemModel* gemModel, QWidget *parent = nullptr); + ~GemDependenciesDialog() = default; + }; +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.cpp index dc24c13009..2c7f17db32 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -16,6 +17,9 @@ #include #include #include +#include +#include +#include namespace O3DE::ProjectManager { @@ -104,22 +108,11 @@ namespace O3DE::ProjectManager painter->drawText(gemCreatorRect, Qt::TextSingleLine, gemCreator); // Gem summary - - // In case there are feature tags displayed at the bottom, decrease the size of the summary text field. const QStringList featureTags = GemModel::GetFeatures(modelIndex); - const int featureTagAreaHeight = 30; - const int summaryHeight = contentRect.height() - (!featureTags.empty() * featureTagAreaHeight); - - const int additionalSummarySpacing = s_itemMargins.right() * 3; - const QSize summarySize = QSize(contentRect.width() - s_summaryStartX - s_buttonWidth - additionalSummarySpacing, - summaryHeight); - const QRect summaryRect = QRect(/*topLeft=*/QPoint(contentRect.left() + s_summaryStartX, contentRect.top()), summarySize); - - painter->setFont(standardFont); - painter->setPen(m_textColor); - + const bool hasTags = !featureTags.isEmpty(); const QString summary = GemModel::GetSummary(modelIndex); - painter->drawText(summaryRect, Qt::AlignLeft | Qt::TextWordWrap, summary); + const QRect summaryRect = CalcSummaryRect(contentRect, hasTags); + DrawText(summary, painter, summaryRect, standardFont); DrawButton(painter, contentRect, modelIndex); DrawPlatformIcons(painter, contentRect, modelIndex); @@ -128,6 +121,17 @@ namespace O3DE::ProjectManager painter->restore(); } + QRect GemItemDelegate::CalcSummaryRect(const QRect& contentRect, bool hasTags) const + { + const int featureTagAreaHeight = 30; + const int summaryHeight = contentRect.height() - (hasTags * featureTagAreaHeight); + + const int additionalSummarySpacing = s_itemMargins.right() * 3; + const QSize summarySize = QSize(contentRect.width() - s_summaryStartX - s_buttonWidth - additionalSummarySpacing, + summaryHeight); + return QRect(QPoint(contentRect.left() + s_summaryStartX, contentRect.top()), summarySize); + } + QSize GemItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& modelIndex) const { QStyleOptionViewItem options(option); @@ -154,7 +158,7 @@ namespace O3DE::ProjectManager return true; } } - else if (event->type() == QEvent::MouseButtonPress ) + else if (event->type() == QEvent::MouseButtonPress) { QMouseEvent* mouseEvent = static_cast(event); @@ -168,6 +172,21 @@ namespace O3DE::ProjectManager GemModel::SetIsAdded(*model, modelIndex, !isAdded); return true; } + + // we must manually handle html links because we aren't using QLabels + const QStringList featureTags = GemModel::GetFeatures(modelIndex); + const bool hasTags = !featureTags.isEmpty(); + const QRect summaryRect = CalcSummaryRect(contentRect, hasTags); + if (summaryRect.contains(mouseEvent->pos())) + { + const QString html = GemModel::GetSummary(modelIndex); + QString anchor = anchorAt(html, mouseEvent->pos(), summaryRect); + if (!anchor.isEmpty()) + { + QDesktopServices::openUrl(QUrl(anchor)); + return true; + } + } } return QStyledItemDelegate::editorEvent(event, model, option, modelIndex); @@ -321,6 +340,44 @@ namespace O3DE::ProjectManager } } + AZStd::unique_ptr GetTextDocument(const QString& text, int width) + { + // using unique_ptr as a workaround for QTextDocument having a private copy constructor + auto doc = AZStd::make_unique(); + QTextOption textOption(doc->defaultTextOption()); + textOption.setWrapMode(QTextOption::WordWrap); + doc->setDefaultTextOption(textOption); + doc->setHtml(text); + doc->setTextWidth(width); + return doc; + } + + void GemItemDelegate::DrawText(const QString& text, QPainter* painter, const QRect& rect, const QFont& standardFont) const + { + painter->save(); + + if (text.contains('<')) + { + painter->translate(rect.topLeft()); + + // use QTextDocument because drawText does not support rich text or html + QAbstractTextDocumentLayout::PaintContext paintContext; + paintContext.clip = QRect(0, 0, rect.width(), rect.height()); + paintContext.palette.setColor(QPalette::Text, painter->pen().color()); + + AZStd::unique_ptr textDocument = GetTextDocument(text, rect.width()); + textDocument->documentLayout()->draw(painter, paintContext); + } + else + { + painter->setFont(standardFont); + painter->setPen(m_textColor); + painter->drawText(rect, Qt::AlignLeft | Qt::TextWordWrap, text); + } + + painter->restore(); + } + void GemItemDelegate::DrawButton(QPainter* painter, const QRect& contentRect, const QModelIndex& modelIndex) const { painter->save(); @@ -355,4 +412,19 @@ namespace O3DE::ProjectManager painter->restore(); } + + QString GemItemDelegate::anchorAt(const QString& html, const QPoint& position, const QRect& rect) + { + if (!html.isEmpty()) + { + AZStd::unique_ptr doc = GetTextDocument(html, rect.width()); + QAbstractTextDocumentLayout* layout = doc->documentLayout(); + if (layout) + { + return layout->anchorAt(position - rect.topLeft()); + } + } + + return QString(); + } } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.h index d842f63ae7..52b5a4f58e 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemItemDelegate.h @@ -30,6 +30,7 @@ namespace O3DE::ProjectManager void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& modelIndex) const override; QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& modelIndex) const override; + virtual QString anchorAt(const QString& html, const QPoint& position, const QRect& rect); // Colors const QColor m_textColor = QColor("#FFFFFF"); @@ -71,9 +72,11 @@ namespace O3DE::ProjectManager void CalcRects(const QStyleOptionViewItem& option, QRect& outFullRect, QRect& outItemRect, QRect& outContentRect) const; QRect GetTextRect(QFont& font, const QString& text, qreal fontSize) const; QRect CalcButtonRect(const QRect& contentRect) const; + QRect CalcSummaryRect(const QRect& contentRect, bool hasTags) const; void DrawPlatformIcons(QPainter* painter, const QRect& contentRect, const QModelIndex& modelIndex) const; void DrawButton(QPainter* painter, const QRect& contentRect, const QModelIndex& modelIndex) const; void DrawFeatureTags(QPainter* painter, const QRect& contentRect, const QStringList& featureTags, const QFont& standardFont, const QRect& summaryRect) const; + void DrawText(const QString& text, QPainter* painter, const QRect& rect, const QFont& standardFont) const; QAbstractItemModel* m_model = nullptr; diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemListView.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemListView.cpp index afdb9697c9..f5b54a364b 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemListView.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemListView.cpp @@ -8,27 +8,9 @@ #include #include -#include -#include namespace O3DE::ProjectManager { - class GemListViewProxyStyle : public QProxyStyle - { - public: - using QProxyStyle::QProxyStyle; - int styleHint(StyleHint hint, const QStyleOption* option = nullptr, const QWidget* widget = nullptr, QStyleHintReturn* returnData = nullptr) const override - { - if (hint == QStyle::SH_ToolTip_WakeUpDelay || hint == QStyle::SH_ToolTip_FallAsleepDelay) - { - // no delay - return 0; - } - - return QProxyStyle::styleHint(hint, option, widget, returnData); - } - }; - GemListView::GemListView(QAbstractItemModel* model, QItemSelectionModel* selectionModel, QWidget* parent) : QListView(parent) { @@ -38,8 +20,5 @@ namespace O3DE::ProjectManager setModel(model); setSelectionModel(selectionModel); setItemDelegate(new GemItemDelegate(model, this)); - - // use a custom proxy style so we get immediate tooltips for gem radio buttons - setStyle(new GemListViewProxyStyle(this->style())); } } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.cpp index 0941541793..c8911de360 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.cpp @@ -391,6 +391,20 @@ namespace O3DE::ProjectManager return false; } + bool GemModel::HasDependentGemsToRemove() const + { + for (int row = 0; row < rowCount(); ++row) + { + const QModelIndex modelIndex = index(row, 0); + if (GemModel::NeedsToBeRemoved(modelIndex, /*includeDependencies=*/true) && + GemModel::WasPreviouslyAddedDependency(modelIndex)) + { + return true; + } + } + return false; + } + QVector GemModel::GatherGemDependencies(const QModelIndex& modelIndex) const { QVector result; diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.h index 0591094c11..ef2d1a903d 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemModel.h @@ -66,6 +66,7 @@ namespace O3DE::ProjectManager static void UpdateDependencies(QAbstractItemModel& model, const QModelIndex& modelIndex); bool DoGemsToBeAddedHaveRequirements() const; + bool HasDependentGemsToRemove() const; QVector GatherGemDependencies(const QModelIndex& modelIndex) const; QVector GatherDependentGems(const QModelIndex& modelIndex, bool addedOnly = false) const; diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.cpp index 0ca5ca836f..f4a7148d46 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.cpp @@ -10,6 +10,8 @@ #include #include +#include +#include namespace O3DE::ProjectManager { @@ -38,7 +40,6 @@ namespace O3DE::ProjectManager standardFont.setPixelSize(static_cast(s_fontSize)); QFontMetrics standardFontMetrics(standardFont); - painter->save(); painter->setClipping(true); painter->setClipRect(fullRect); painter->setFont(options.font); @@ -65,25 +66,51 @@ namespace O3DE::ProjectManager painter->drawText(gemNameRect, Qt::TextSingleLine, gemName); // Gem requirement - const QSize requirementSize = QSize(contentRect.width() - s_summaryStartX - s_itemMargins.right(), contentRect.height()); - const QRect requirementRect = QRect(QPoint(contentRect.left() + s_summaryStartX, contentRect.top()), requirementSize); - - painter->setFont(standardFont); - painter->setPen(m_textColor); - + const QRect requirementRect = CalcRequirementRect(contentRect); const QString requirement = GemModel::GetRequirement(modelIndex); - painter->drawText(requirementRect, Qt::AlignLeft | Qt::TextWordWrap, requirement); + DrawText(requirement, painter, requirementRect, standardFont); painter->restore(); } + QRect GemRequirementDelegate::CalcRequirementRect(const QRect& contentRect) const + { + const QSize requirementSize = QSize(contentRect.width() - s_summaryStartX - s_itemMargins.right(), contentRect.height()); + return QRect(QPoint(contentRect.left() + s_summaryStartX, contentRect.top()), requirementSize); + } + bool GemRequirementDelegate::editorEvent( [[maybe_unused]] QEvent* event, [[maybe_unused]] QAbstractItemModel* model, [[maybe_unused]] const QStyleOptionViewItem& option, [[maybe_unused]] const QModelIndex& modelIndex) { - // Do nothing here - return false; + if (!modelIndex.isValid()) + { + return false; + } + + if (event->type() == QEvent::MouseButtonPress) + { + QMouseEvent* mouseEvent = static_cast(event); + + QRect fullRect, itemRect, contentRect; + CalcRects(option, fullRect, itemRect, contentRect); + + const QRect requirementsRect = CalcRequirementRect(contentRect); + if (requirementsRect.contains(mouseEvent->pos())) + { + const QString html = GemModel::GetRequirement(modelIndex); + QString anchor = anchorAt(html, mouseEvent->pos(), requirementsRect); + if (!anchor.isEmpty()) + { + QDesktopServices::openUrl(QUrl(anchor)); + return true; + } + } + } + + return QStyledItemDelegate::editorEvent(event, model, option, modelIndex); } + } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.h index a23b999ca0..e9001df7fa 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDelegate.h @@ -29,5 +29,8 @@ namespace O3DE::ProjectManager const QColor m_backgroundColor = QColor("#444444"); // Outside of the actual gem item const QColor m_itemBackgroundColor = QColor("#393939"); // Background color of the gem item + + private: + QRect CalcRequirementRect(const QRect& contentRect) const; }; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.cpp index 4740d29344..23bb776c29 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.cpp @@ -19,11 +19,12 @@ namespace O3DE::ProjectManager { - GemRequirementDialog::GemRequirementDialog(GemModel* model, const QVector& gemsToAdd, QWidget* parent) + GemRequirementDialog::GemRequirementDialog(GemModel* model, QWidget* parent) : QDialog(parent) { setWindowTitle(tr("Manual setup is required")); setModal(true); + setAttribute(Qt::WA_DeleteOnClose); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->setMargin(0); @@ -51,7 +52,7 @@ namespace O3DE::ProjectManager vLayout->addSpacing(20); - GemRequirementFilterProxyModel* proxModel = new GemRequirementFilterProxyModel(model, gemsToAdd, this); + GemRequirementFilterProxyModel* proxModel = new GemRequirementFilterProxyModel(model, this); GemRequirementListView* m_gemListView = new GemRequirementListView(proxModel, proxModel->GetSelectionModel(), this); vLayout->addWidget(m_gemListView); @@ -62,27 +63,9 @@ namespace O3DE::ProjectManager QPushButton* cancelButton = dialogButtons->addButton(tr("Cancel"), QDialogButtonBox::RejectRole); cancelButton->setProperty("secondary", true); - QPushButton* continueButton = dialogButtons->addButton(tr("Continue"), QDialogButtonBox::ApplyRole); + QPushButton* continueButton = dialogButtons->addButton(tr("Continue"), QDialogButtonBox::AcceptRole); - connect(cancelButton, &QPushButton::clicked, this, &GemRequirementDialog::CancelButtonPressed); - connect(continueButton, &QPushButton::clicked, this, &GemRequirementDialog::ContinueButtonPressed); + connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject); + connect(continueButton, &QPushButton::clicked, this, &QDialog::accept); } - - QDialogButtonBox::ButtonRole GemRequirementDialog::GetButtonResult() - { - return m_buttonResult; - } - - void GemRequirementDialog::CancelButtonPressed() - { - m_buttonResult = QDialogButtonBox::RejectRole; - close(); - } - - void GemRequirementDialog::ContinueButtonPressed() - { - m_buttonResult = QDialogButtonBox::ApplyRole; - close(); - } - } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.h index 22f6977332..af8b1e2cc9 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementDialog.h @@ -10,8 +10,6 @@ #if !defined(Q_MOC_RUN) #include - -#include #endif namespace O3DE::ProjectManager @@ -23,15 +21,7 @@ namespace O3DE::ProjectManager { Q_OBJECT // AUTOMOC public: - explicit GemRequirementDialog(GemModel* model, const QVector& gemsToAdd, QWidget *parent = nullptr); + explicit GemRequirementDialog(GemModel* model, QWidget *parent = nullptr); ~GemRequirementDialog() = default; - - QDialogButtonBox::ButtonRole GetButtonResult(); - - private: - void CancelButtonPressed(); - void ContinueButtonPressed(); - - QDialogButtonBox::ButtonRole m_buttonResult = QDialogButtonBox::RejectRole; }; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.cpp index 50639b7936..e89de82c6c 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.cpp @@ -13,10 +13,8 @@ namespace O3DE::ProjectManager { - GemRequirementFilterProxyModel::GemRequirementFilterProxyModel(GemModel* sourceModel, const QVector& addedGems, QObject* parent) + GemRequirementFilterProxyModel::GemRequirementFilterProxyModel(GemModel* sourceModel, QObject* parent) : QSortFilterProxyModel(parent) - , m_sourceModel(sourceModel) - , m_addedGems(addedGems) { setSourceModel(sourceModel); m_selectionProxyModel = new AzQtComponents::SelectionProxyModel(sourceModel->GetSelectionModel(), this, parent); @@ -26,22 +24,7 @@ namespace O3DE::ProjectManager { // Do not use sourceParent->child because an invalid parent does not produce valid children (which our index function does) QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent); - if (!sourceIndex.isValid()) - { - return false; - } - - if (!m_addedGems.contains(sourceIndex)) - { - return false; - } - - if (!m_sourceModel->HasRequirement(sourceIndex)) - { - return false; - } - - return true; + return GemModel::IsAdded(sourceIndex) && GemModel::HasRequirement(sourceIndex); } } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.h b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.h index a40eed9fb4..7df75f7d94 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.h +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementFilterProxyModel.h @@ -25,16 +25,13 @@ namespace O3DE::ProjectManager Q_OBJECT // AUTOMOC public: - GemRequirementFilterProxyModel(GemModel* sourceModel, const QVector& addedGems, QObject* parent = nullptr); + GemRequirementFilterProxyModel(GemModel* sourceModel, QObject* parent = nullptr); AzQtComponents::SelectionProxyModel* GetSelectionModel() const { return m_selectionProxyModel; } bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override; private: - GemModel* m_sourceModel = nullptr; AzQtComponents::SelectionProxyModel* m_selectionProxyModel = nullptr; - - QVector m_addedGems; }; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementListView.cpp b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementListView.cpp index daed5764ff..fd7d22cbfc 100644 --- a/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementListView.cpp +++ b/Code/Tools/ProjectManager/Source/GemCatalog/GemRequirementListView.cpp @@ -8,7 +8,6 @@ #include #include -#include namespace O3DE::ProjectManager { diff --git a/Code/Tools/ProjectManager/Source/TagWidget.cpp b/Code/Tools/ProjectManager/Source/TagWidget.cpp index 8f433f420f..ace9d72d8f 100644 --- a/Code/Tools/ProjectManager/Source/TagWidget.cpp +++ b/Code/Tools/ProjectManager/Source/TagWidget.cpp @@ -8,87 +8,44 @@ #include #include +#include namespace O3DE::ProjectManager { TagWidget::TagWidget(const QString& text, QWidget* parent) : QLabel(text, parent) { - setFixedHeight(24); - setMargin(5); - setStyleSheet("font-size: 12px; background-color: #333333; border-radius: 3px;"); + setObjectName("TagWidget"); } TagContainerWidget::TagContainerWidget(QWidget* parent) : QWidget(parent) { - m_layout = new QVBoxLayout(); - m_layout->setAlignment(Qt::AlignTop); - m_layout->setMargin(0); - setLayout(m_layout); + setObjectName("TagWidgetContainer"); + setLayout(new FlowLayout(this)); + + // layout margins cannot be set via qss + constexpr int verticalMargin = 10; + constexpr int horizontalMargin = 0; + layout()->setContentsMargins(horizontalMargin, verticalMargin, horizontalMargin, verticalMargin); + + setAttribute(Qt::WA_StyledBackground, true); } void TagContainerWidget::Update(const QStringList& tags) { - QWidget* parentWidget = qobject_cast(parent()); - int width = 200; - if (parentWidget) - { - width = parentWidget->width(); - } + FlowLayout* flowLayout = static_cast(layout()); - if (m_widget) + // remove old tags + QLayoutItem* layoutItem = nullptr; + while ((layoutItem = layout()->takeAt(0)) != nullptr) { - // Hide the old widget and request deletion. - m_widget->hide(); - m_widget->deleteLater(); + layoutItem->widget()->deleteLater(); } - QVBoxLayout* vLayout = new QVBoxLayout(); - m_widget = new QWidget(this); - m_widget->setLayout(vLayout); - m_layout->addWidget(m_widget); - - vLayout->setAlignment(Qt::AlignTop); - vLayout->setMargin(0); - - QHBoxLayout* hLayout = nullptr; - int usedSpaceInRow = 0; - const int numTags = tags.count(); - - for (int i = 0; i < numTags; ++i) + foreach (const QString& tag, tags) { - // Create the new tag widget. - TagWidget* tagWidget = new TagWidget(tags[i]); - const int tagWidgetWidth = tagWidget->minimumSizeHint().width(); - - // Calculate the width we're currently using in the current row. Does the new tag still fit in the current row? - const bool isRowFull = width - usedSpaceInRow - tagWidgetWidth < 0; - if (isRowFull || i == 0) - { - // Add a spacer widget after the last tag widget in a row to push the tag widgets to the left. - if (i > 0) - { - QWidget* spacerWidget = new QWidget(); - spacerWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - hLayout->addWidget(spacerWidget); - } - - // Add a new row for the current tag widget. - hLayout = new QHBoxLayout(); - hLayout->setAlignment(Qt::AlignLeft); - hLayout->setMargin(0); - vLayout->addLayout(hLayout); - - // Reset the used space in the row. - usedSpaceInRow = 0; - } - - // Calculate the width of the tag widgets including the spacing between them of the current row. - usedSpaceInRow += tagWidgetWidth + hLayout->spacing(); - - // Add the tag widget to the current row. - hLayout->addWidget(tagWidget); + flowLayout->addWidget(new TagWidget(tag)); } } } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/TagWidget.h b/Code/Tools/ProjectManager/Source/TagWidget.h index 16eca28fc1..0dad7468eb 100644 --- a/Code/Tools/ProjectManager/Source/TagWidget.h +++ b/Code/Tools/ProjectManager/Source/TagWidget.h @@ -14,8 +14,6 @@ #include #endif -QT_FORWARD_DECLARE_CLASS(QVBoxLayout) - namespace O3DE::ProjectManager { // Single tag @@ -40,9 +38,5 @@ namespace O3DE::ProjectManager ~TagContainerWidget() = default; void Update(const QStringList& tags); - - private: - QVBoxLayout* m_layout = nullptr; - QWidget* m_widget = nullptr; }; } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp b/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp index 08ad7f24d9..e952ada57a 100644 --- a/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp +++ b/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp @@ -137,9 +137,13 @@ namespace O3DE::ProjectManager else if (m_stack->currentIndex() == ScreenOrder::Gems && m_gemCatalogScreen) { // Enable or disable the gems that got adjusted in the gem catalog and apply them to the given project. - if (!m_gemCatalogScreen->EnableDisableGemsForProject(m_projectInfo.m_path)) + const GemCatalogScreen::EnableDisableGemsResult result = m_gemCatalogScreen->EnableDisableGemsForProject(m_projectInfo.m_path); + if (result == GemCatalogScreen::EnableDisableGemsResult::Failed) { QMessageBox::critical(this, tr("Failed to configure gems"), tr("Failed to configure gems for project.")); + } + if (result != GemCatalogScreen::EnableDisableGemsResult::Success) + { return; } diff --git a/Code/Tools/ProjectManager/project_manager_files.cmake b/Code/Tools/ProjectManager/project_manager_files.cmake index 544fa2537b..fd8389ca4f 100644 --- a/Code/Tools/ProjectManager/project_manager_files.cmake +++ b/Code/Tools/ProjectManager/project_manager_files.cmake @@ -92,6 +92,8 @@ set(FILES Source/GemCatalog/GemListHeaderWidget.cpp Source/GemCatalog/GemModel.h Source/GemCatalog/GemModel.cpp + Source/GemCatalog/GemDependenciesDialog.h + Source/GemCatalog/GemDependenciesDialog.cpp Source/GemCatalog/GemRequirementDialog.h Source/GemCatalog/GemRequirementDialog.cpp Source/GemCatalog/GemRequirementDelegate.h From 843f993fc950c0324e303bbd1d03d2bf8c3b2624 Mon Sep 17 00:00:00 2001 From: Vincent Liu <5900509+onecent1101@users.noreply.github.com> Date: Mon, 11 Oct 2021 13:17:07 -0700 Subject: [PATCH 222/226] Improve ticket tracker workflow for testing (#4610) * Improve ticket tracker workflow for testing Signed-off-by: onecent1101 --- .../AWSGameLiftClientLocalTicketTracker.cpp | 16 +++++++++++++--- .../Source/AWSGameLiftClientLocalTicketTracker.h | 2 ++ .../AWSGameLiftClientLocalTicketTrackerTest.cpp | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp index 9ae168aea9..b619a10d4a 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.cpp @@ -47,6 +47,15 @@ namespace AWSGameLift AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket tracker is running."); return; } + + // Make sure thread and wait event are both in clean state before starting new one + m_waitEvent.release(); + if (m_trackerThread.joinable()) + { + m_trackerThread.join(); + } + m_waitEvent.acquire(); + m_status = TicketTrackerStatus::Running; m_trackerThread = AZStd::thread(AZStd::bind( &AWSGameLiftClientLocalTicketTracker::ProcessPolling, this, ticketId, playerId)); @@ -56,6 +65,7 @@ namespace AWSGameLift { AZStd::lock_guard lock(m_trackerMutex); m_status = TicketTrackerStatus::Idle; + m_waitEvent.release(); if (m_trackerThread.joinable()) { m_trackerThread.join(); @@ -81,19 +91,19 @@ namespace AWSGameLift auto ticket = describeMatchmakingOutcome.GetResult().GetTicketList().front(); if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::COMPLETED) { - m_status = TicketTrackerStatus::Idle; AZ_TracePrintf(AWSGameLiftClientLocalTicketTrackerName, "Matchmaking ticket %s is complete.", ticket.GetTicketId().c_str()); RequestPlayerJoinMatch(ticket, playerId); + m_status = TicketTrackerStatus::Idle; return; } else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::TIMED_OUT || ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::FAILED || ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::CANCELLED) { - m_status = TicketTrackerStatus::Idle; AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, "Matchmaking ticket %s is not complete, %s", ticket.GetTicketId().c_str(), ticket.GetStatusReason().c_str()); + m_status = TicketTrackerStatus::Idle; return; } else if (ticket.GetStatus() == Aws::GameLift::Model::MatchmakingConfigurationStatus::REQUIRES_ACCEPTANCE) @@ -122,7 +132,7 @@ namespace AWSGameLift { AZ_Error(AWSGameLiftClientLocalTicketTrackerName, false, AWSGameLiftClientMissingErrorMessage); } - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(m_pollingPeriodInMS)); + m_waitEvent.try_acquire_for(AZStd::chrono::milliseconds(m_pollingPeriodInMS)); } } diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h index 7b317a0485..23083e9fd9 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientLocalTicketTracker.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include @@ -58,5 +59,6 @@ namespace AWSGameLift AZStd::mutex m_trackerMutex; AZStd::thread m_trackerThread; + AZStd::binary_semaphore m_waitEvent; }; } // namespace AWSGameLift diff --git a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp index 6e688b28e3..6506d70704 100644 --- a/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp +++ b/Gems/AWSGameLift/Code/AWSGameLiftClient/Tests/AWSGameLiftClientLocalTicketTrackerTest.cpp @@ -16,7 +16,7 @@ using namespace AWSGameLift; -static constexpr const uint64_t TEST_RACKER_POLLING_PERIOD_MS = 100; +static constexpr const uint64_t TEST_RACKER_POLLING_PERIOD_MS = 1000; static constexpr const uint64_t TEST_WAIT_BUFFER_TIME_MS = 10; static constexpr const uint64_t TEST_WAIT_MAXIMUM_TIME_MS = 10000; From d3c2e288e92db7de43ab66676977f917648b42b3 Mon Sep 17 00:00:00 2001 From: jromnoa <80134229+jromnoa@users.noreply.github.com> Date: Mon, 11 Oct 2021 13:30:27 -0700 Subject: [PATCH 223/226] sandbox the Reflection Probe portion of the test, remove xfail marker - Reflection Probe will be re-added in the parallel test approach (#4584) Signed-off-by: jromnoa --- .../Gem/PythonTests/Atom/TestSuite_Main.py | 18 ------ .../Gem/PythonTests/Atom/TestSuite_Sandbox.py | 55 ++++++++++++++++++- 2 files changed, 53 insertions(+), 20 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py index b148ffdcdb..e4a77ca4ec 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main.py @@ -3,8 +3,6 @@ Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. SPDX-License-Identifier: Apache-2.0 OR MIT - -Main suite tests for the Atom renderer. """ import logging import os @@ -25,7 +23,6 @@ TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests") class TestAtomEditorComponentsMain(object): """Holds tests for Atom components.""" - @pytest.mark.xfail(reason="This test is being marked xfail as it failed during an unrelated development run. See LYN-7530 for more details.") def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): """ Please review the hydra script run by this test for more specific test info. @@ -162,21 +159,6 @@ class TestAtomEditorComponentsMain(object): "Display Mapper_test: Entity deleted: True", "Display Mapper_test: UNDO entity deletion works: True", "Display Mapper_test: REDO entity deletion works: True", - # Reflection Probe Component - "Reflection Probe Entity successfully created", - "Reflection Probe_test: Component added to the entity: True", - "Reflection Probe_test: Component removed after UNDO: True", - "Reflection Probe_test: Component added after REDO: True", - "Reflection Probe_test: Entered game mode: True", - "Reflection Probe_test: Exit game mode: True", - "Reflection Probe_test: Entity disabled initially: True", - "Reflection Probe_test: Entity enabled after adding required components: True", - "Reflection Probe_test: Cubemap is generated: True", - "Reflection Probe_test: Entity is hidden: True", - "Reflection Probe_test: Entity is shown: True", - "Reflection Probe_test: Entity deleted: True", - "Reflection Probe_test: UNDO entity deletion works: True", - "Reflection Probe_test: REDO entity deletion works: True", ] unexpected_lines = [ diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py index 05401c0059..79caf26784 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Sandbox.py @@ -3,12 +3,17 @@ Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. SPDX-License-Identifier: Apache-2.0 OR MIT - -Sandbox suite tests for the Atom renderer. """ +import logging +import os import pytest +import editor_python_test_tools.hydra_test_utils as hydra + +logger = logging.getLogger(__name__) +TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests") + @pytest.mark.parametrize("project", ["AutomatedTesting"]) @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @@ -18,3 +23,49 @@ class TestAtomEditorComponentsSandbox(object): # It requires at least one test def test_Dummy(self, request, editor, level, workspace, project, launcher_platform): pass + + @pytest.mark.parametrize("project", ["AutomatedTesting"]) + @pytest.mark.parametrize("launcher_platform", ['windows_editor']) + @pytest.mark.parametrize("level", ["auto_test"]) + class TestAtomEditorComponentsMain(object): + """Holds tests for Atom components.""" + + def test_AtomEditorComponents_ReflectionProbeAddedToEntity( + self, request, editor, level, workspace, project, launcher_platform): + """ + Please review the hydra script run by this test for more specific test info. + Tests the following Atom components and verifies all "expected_lines" appear in Editor.log: + 1. Reflection Probe + """ + cfg_args = [level] + + expected_lines = [ + # Reflection Probe Component + "Reflection Probe Entity successfully created", + "Reflection Probe_test: Component added to the entity: True", + "Reflection Probe_test: Component removed after UNDO: True", + "Reflection Probe_test: Component added after REDO: True", + "Reflection Probe_test: Entered game mode: True", + "Reflection Probe_test: Exit game mode: True", + "Reflection Probe_test: Entity disabled initially: True", + "Reflection Probe_test: Entity enabled after adding required components: True", + "Reflection Probe_test: Cubemap is generated: True", + "Reflection Probe_test: Entity is hidden: True", + "Reflection Probe_test: Entity is shown: True", + "Reflection Probe_test: Entity deleted: True", + "Reflection Probe_test: UNDO entity deletion works: True", + "Reflection Probe_test: REDO entity deletion works: True", + ] + + hydra.launch_and_validate_results( + request, + TEST_DIRECTORY, + editor, + "hydra_AtomEditorComponents_AddedToEntity.py", + timeout=120, + expected_lines=expected_lines, + unexpected_lines=[], + halt_on_unexpected=True, + null_renderer=True, + cfg_args=cfg_args, + ) From a95c609bd8e86c84226672f6ce4296cd443d60c4 Mon Sep 17 00:00:00 2001 From: Scott Romero <24445312+AMZN-ScottR@users.noreply.github.com> Date: Mon, 11 Oct 2021 14:00:42 -0700 Subject: [PATCH 224/226] [development] Migrate Atom CPU timing stats tracking to use global stats profiler (#4549) This change is a preparation for moving the CPU profiler/visualization system from Atom into its own Gem by removing the dependency on local time tracking object AZ::RHI::CpuTimingStatistics Full changes include: - Removed all usage of AZ::RHI::CpuTimingStatistics -- Replaced with pushing to AZ::Statistics::StatisticalProfilerProxy global instance - Promoted VariableTimer from AZ::RHI to AZ::Debug - Removed now unused CpuTimingStatistics.h Signed-off-by: AMZN-ScottR 24445312+AMZN-ScottR@users.noreply.github.com --- Code/Framework/AzCore/AzCore/Debug/Timer.h | 18 +++++ .../ProfilingCaptureSystemComponent.cpp | 14 +--- .../RHI/Code/Include/Atom/RHI.Reflect/Base.h | 1 + .../Atom/RHI.Reflect/CpuTimingStatistics.h | 77 ------------------- Gems/Atom/RHI/Code/Include/Atom/RHI/Device.h | 13 ++-- .../Code/Include/Atom/RHI/FrameScheduler.h | 6 +- .../RHI/Code/Include/Atom/RHI/RHISystem.h | 2 +- .../Include/Atom/RHI/RHISystemInterface.h | 3 +- .../Atom/RHI/Code/Source/RHI/CommandQueue.cpp | 17 ++++ .../RHI/Code/Source/RHI/CpuProfilerImpl.cpp | 6 ++ Gems/Atom/RHI/Code/Source/RHI/Device.cpp | 4 +- .../RHI/Code/Source/RHI/FrameScheduler.cpp | 34 ++++++-- Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp | 4 +- Gems/Atom/RHI/Code/Tests/Device.h | 2 +- .../RHI/Code/atom_rhi_reflect_files.cmake | 1 - .../RHI/DX12/Code/Source/RHI/CommandQueue.cpp | 8 +- .../Code/Source/RHI/CommandQueueContext.cpp | 22 +++--- .../Code/Source/RHI/CommandQueueContext.h | 7 +- Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp | 4 +- Gems/Atom/RHI/DX12/Code/Source/RHI/Device.h | 2 +- .../Metal/Code/Source/RHI/CommandQueue.cpp | 9 ++- .../Code/Source/RHI/CommandQueueContext.cpp | 24 +++--- .../Code/Source/RHI/CommandQueueContext.h | 2 +- .../Atom/RHI/Metal/Code/Source/RHI/Device.cpp | 4 +- Gems/Atom/RHI/Metal/Code/Source/RHI/Device.h | 2 +- Gems/Atom/RHI/Null/Code/Source/RHI/Device.h | 2 +- .../Vulkan/Code/Source/RHI/CommandQueue.cpp | 9 ++- .../Code/Source/RHI/CommandQueueContext.cpp | 22 +++--- .../Code/Source/RHI/CommandQueueContext.h | 7 +- .../RHI/Vulkan/Code/Source/RHI/Device.cpp | 4 +- Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.h | 2 +- Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h | 2 +- .../Viewport/PerformanceMonitorComponent.cpp | 7 +- .../Include/Atom/Utils/ImGuiCpuProfiler.h | 22 +++--- .../Include/Atom/Utils/ImGuiCpuProfiler.inl | 65 +++++++++++----- .../Source/AtomImGuiToolsSystemComponent.cpp | 6 +- 36 files changed, 213 insertions(+), 221 deletions(-) delete mode 100644 Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/CpuTimingStatistics.h diff --git a/Code/Framework/AzCore/AzCore/Debug/Timer.h b/Code/Framework/AzCore/AzCore/Debug/Timer.h index 47bd3e1b95..6585fe7468 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Timer.h +++ b/Code/Framework/AzCore/AzCore/Debug/Timer.h @@ -46,5 +46,23 @@ namespace AZ private: AZStd::sys_time_t m_timeStamp; }; + + //! Utility type that updates the given variable with the lifetime of the object in cycles. + //! Useful for quick scope based timing. + struct ScopedTimer + { + explicit ScopedTimer(AZStd::sys_time_t& variable) + : m_variable(variable) + { + m_timer.Stamp(); + } + ~ScopedTimer() + { + m_variable = m_timer.GetDeltaTimeInTicks(); + } + + AZStd::sys_time_t& m_variable; + Timer m_timer; + }; } } diff --git a/Gems/Atom/Feature/Common/Code/Source/ProfilingCaptureSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/ProfilingCaptureSystemComponent.cpp index a476b5b839..4accbf0bba 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ProfilingCaptureSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ProfilingCaptureSystemComponent.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -457,17 +456,8 @@ namespace AZ JsonSerializerSettings serializationSettings; serializationSettings.m_keepDefaults = true; - double frameTime = 0.0; - const AZ::RHI::CpuTimingStatistics* stats = AZ::RHI::RHISystemInterface::Get()->GetCpuTimingStatistics(); - if (stats) - { - frameTime = stats->GetFrameToFrameTimeMilliseconds(); - } - else - { - AZStd::string warning = AZStd::string::format("Failed to get Cpu frame time"); - AZ_Warning("ProfilingCaptureSystemComponent", false, warning.c_str()); - } + double frameTime = AZ::RHI::RHISystemInterface::Get()->GetCpuFrameTime(); + AZ_Warning("ProfilingCaptureSystemComponent", frameTime > 0, "Failed to get Cpu frame time"); CpuFrameTimeSerializer serializer(frameTime); const auto saveResult = JsonSerializationUtils::SaveObjectToFile(&serializer, diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Base.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Base.h index 9e1ec4585e..977c2c9ce8 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Base.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Base.h @@ -16,6 +16,7 @@ #include AZ_DECLARE_BUDGET(RHI); +inline static constexpr AZ::Crc32 rhiMetricsId = AZ_CRC_CE("RHI"); namespace UnitTest { diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/CpuTimingStatistics.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/CpuTimingStatistics.h deleted file mode 100644 index 2ab23def08..0000000000 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/CpuTimingStatistics.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -#include -#include -#include -#include - -namespace AZ -{ - namespace RHI - { - //! Container and helper type for storing per frame CPU timing data. - //! Users can queue up generic timings in Scopes or add to specific timing data. - struct CpuTimingStatistics - { - struct QueueStatistics - { - //! The display name of the queue the statistics are for. - Name m_queueName; - - //! Time spent executing queued work. - AZStd::sys_time_t m_executeDuration{}; - }; - - //! Statistics for each command queue. - AZStd::vector m_queueStatistics; - - //! The amount of time spent between two calls to EndFrame. - AZStd::sys_time_t m_frameToFrameTime{}; - - //! The amount of time spent presenting (vsync can affect this). - AZStd::sys_time_t m_presentDuration{}; - - void Reset() - { - m_queueStatistics.clear(); - } - - double GetFrameToFrameTimeMilliseconds() const - { - return (m_frameToFrameTime * 1000) / aznumeric_cast(AZStd::GetTimeTicksPerSecond()); - } - }; - - //! Utility type that updates the given variable with the lifetime of the object in cycles. - //! Useful for quick scope based timing. - struct VariableTimer - { - VariableTimer() = delete; - VariableTimer(AZStd::sys_time_t& variable) - : m_variable(variable) - { - m_timer.Stamp(); - } - ~VariableTimer() - { - m_variable = m_timer.GetDeltaTimeInTicks(); - } - - AZStd::sys_time_t& m_variable; - AZ::Debug::Timer m_timer; - }; - } -} - -//! Utility for timing a section of code and writing the timing (in cycles) to the given variable. -#define AZ_PROFILE_RHI_VARIABLE(variable) \ - AZ::RHI::VariableTimer AZ_JOIN(variableTimer, __LINE__)(variable); diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/Device.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/Device.h index fb4082bb25..358fdcb4c4 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/Device.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/Device.h @@ -27,9 +27,6 @@ namespace AZ { namespace RHI { - struct CpuTimingStatistics; - - //! The Device is a context for managing GPU state and memory on a physical device. The user creates //! a device instance from a PhysicalDevice. Each device has its own capabilities and limits, and can //! be configured to buffer a specific number of frames. @@ -91,10 +88,10 @@ namespace AZ //! scope. Otherwise, an error code is returned. ResultCode CompileMemoryStatistics(MemoryStatistics& memoryStatistics, MemoryStatisticsReportFlags reportFlags); - //! Fills the provided data structure with cpu timing statistics specific to this device. This - //! method can only be called on an initialized device, and outside of the BeginFrame / EndFrame - //! scope. Otherwise, an error code is returned. - ResultCode UpdateCpuTimingStatistics(CpuTimingStatistics& cpuTimingStatistics) const; + //! Pushes internally recorded timing statistics upwards into the global stats profiler, under the RHI section. + //! This method can only be called on an initialized device, and outside of the BeginFrame / EndFrame scope. + //! Otherwise, an error code is returned. + ResultCode UpdateCpuTimingStatistics() const; //! Returns the physical device associated with this device. const PhysicalDevice& GetPhysicalDevice() const; @@ -186,7 +183,7 @@ namespace AZ virtual void CompileMemoryStatisticsInternal(MemoryStatisticsBuilder& builder) = 0; //! Called when the device is reporting cpu timing statistics. - virtual void UpdateCpuTimingStatisticsInternal(CpuTimingStatistics& cpuTimingStatistics) const = 0; + virtual void UpdateCpuTimingStatisticsInternal() const = 0; //! Fills the capabilities for each format. virtual void FillFormatsCapabilitiesInternal(FormatCapabilitiesList& formatsCapabilities) = 0; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h index 48e7e0f339..eb2b0b5b0c 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameScheduler.h @@ -7,7 +7,6 @@ */ #pragma once -#include #include #include #include @@ -168,8 +167,8 @@ namespace AZ /// Returns the timing statistics for the previous frame. const TransientAttachmentStatistics* GetTransientAttachmentStatistics() const; - /// Returns cpu timing statistics for the previous frame. - const CpuTimingStatistics* GetCpuTimingStatistics() const; + /// Returns current CPU frame to frame time in milliseconds. + double GetCpuFrameTime() const; /// Returns memory statistics for the previous frame. const MemoryStatistics* GetMemoryStatistics() const; @@ -216,7 +215,6 @@ namespace AZ Ptr m_transientAttachmentPool; - CpuTimingStatistics m_cpuTimingStatistics; AZStd::sys_time_t m_lastFrameEndTime{}; MemoryStatistics m_memoryStatistics; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystem.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystem.h index 599108654a..52a44c0903 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystem.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystem.h @@ -48,7 +48,7 @@ namespace AZ RHI::PipelineStateCache* GetPipelineStateCache() override; const RHI::FrameSchedulerCompileRequest& GetFrameSchedulerCompileRequest() const override; void ModifyFrameSchedulerStatisticsFlags(RHI::FrameSchedulerStatisticsFlags statisticsFlags, bool enableFlags) override; - const RHI::CpuTimingStatistics* GetCpuTimingStatistics() const override; + double GetCpuFrameTime() const override; const RHI::TransientAttachmentStatistics* GetTransientAttachmentStatistics() const override; const RHI::MemoryStatistics* GetMemoryStatistics() const override; const RHI::TransientAttachmentPoolDescriptor* GetTransientAttachmentPoolDescriptor() const override; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h index 6a9650e0a1..19ba1cb762 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h @@ -27,7 +27,6 @@ namespace AZ class PipelineStateCache; class PlatformLimitsDescriptor; class RayTracingShaderTable; - struct CpuTimingStatistics; struct FrameSchedulerCompileRequest; struct TransientAttachmentStatistics; struct TransientAttachmentPoolDescriptor; @@ -55,7 +54,7 @@ namespace AZ virtual void ModifyFrameSchedulerStatisticsFlags(RHI::FrameSchedulerStatisticsFlags statisticsFlags, bool enableFlags) = 0; - virtual const RHI::CpuTimingStatistics* GetCpuTimingStatistics() const = 0; + virtual double GetCpuFrameTime() const = 0; virtual const RHI::TransientAttachmentStatistics* GetTransientAttachmentStatistics() const = 0; diff --git a/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp b/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp index f65c36f2ed..a365b23e94 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/CommandQueue.cpp @@ -32,6 +32,23 @@ namespace AZ return ResultCode::InvalidOperation; } #endif + + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + + static constexpr AZStd::string_view presentStatName("Present"); + static constexpr AZ::Crc32 presentStatId(presentStatName); + rhiMetrics.GetStatsManager().AddStatistic(presentStatId, presentStatName, /*units=*/"clocks", /*failIfExist=*/false); + + if (!GetName().IsEmpty()) + { + const AZStd::string commandQueueName(GetName().GetCStr()); + const AZ::Crc32 commandQueueId(GetName().GetHash()); + rhiMetrics.GetStatsManager().AddStatistic(commandQueueId, commandQueueName, /*units=*/"clocks", /*failIfExist=*/false); + } + } + const ResultCode resultCode = InitInternal(device, descriptor); if (resultCode == ResultCode::Success) diff --git a/Gems/Atom/RHI/Code/Source/RHI/CpuProfilerImpl.cpp b/Gems/Atom/RHI/Code/Source/RHI/CpuProfilerImpl.cpp index 1bc17adb22..826e0b6aa3 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/CpuProfilerImpl.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/CpuProfilerImpl.cpp @@ -12,6 +12,7 @@ #include #include +#include #include namespace AZ @@ -73,6 +74,11 @@ namespace AZ m_initialized = true; SystemTickBus::Handler::BusConnect(); m_continuousCaptureData.set_capacity(10); + + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + statsProfiler->ActivateProfiler(AZ_CRC_CE("RHI"), true); + } } void CpuProfilerImpl::Shutdown() diff --git a/Gems/Atom/RHI/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Code/Source/RHI/Device.cpp index 2f4ca297a1..c8497cf7b1 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Device.cpp @@ -160,11 +160,11 @@ namespace AZ return ResultCode::InvalidOperation; } - ResultCode Device::UpdateCpuTimingStatistics(CpuTimingStatistics& cpuTimingStatistics) const + ResultCode Device::UpdateCpuTimingStatistics() const { if (ValidateIsNotInFrame()) { - UpdateCpuTimingStatisticsInternal(cpuTimingStatistics); + UpdateCpuTimingStatisticsInternal(); return ResultCode::Success; } return ResultCode::InvalidOperation; diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp index 0d3ac8216b..a15db9e24b 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp @@ -35,6 +35,9 @@ namespace AZ { namespace RHI { + static constexpr const char* frameTimeMetricName = "Frame to Frame Time"; + static constexpr AZ::Crc32 frameTimeMetricId = AZ_CRC_CE(frameTimeMetricName); + ResultCode FrameScheduler::Init(Device& device, const FrameSchedulerDescriptor& descriptor) { ResultCode resultCode = ResultCode::Success; @@ -81,6 +84,12 @@ namespace AZ m_taskGraphActive = AZ::Interface::Get(); + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + rhiMetrics.GetStatsManager().AddStatistic(frameTimeMetricId, frameTimeMetricName, /*units=*/"clocks", /*failIfExist=*/false); + } + m_lastFrameEndTime = AZStd::GetTimeNowTicks(); return ResultCode::Success; @@ -278,7 +287,7 @@ namespace AZ AZ::TaskDescriptor srgCompileEndDesc{"SrgCompileEnd", "Graphics"}; auto srgCompileEndTask = taskGraph.AddTask( - srgCompileEndDesc, + srgCompileEndDesc, [srgPool]() { srgPool->CompileGroupsEnd(); @@ -449,7 +458,7 @@ namespace AZ m_device->CompileMemoryStatistics(m_memoryStatistics, MemoryStatisticsReportFlags::Detail); } - m_device->UpdateCpuTimingStatistics(m_cpuTimingStatistics); + m_device->UpdateCpuTimingStatistics(); m_scopeProducers.clear(); m_scopeProducerLookup.clear(); @@ -460,7 +469,10 @@ namespace AZ } const AZStd::sys_time_t timeNowTicks = AZStd::GetTimeNowTicks(); - m_cpuTimingStatistics.m_frameToFrameTime = timeNowTicks - m_lastFrameEndTime; + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + statsProfiler->PushSample(rhiMetricsId, frameTimeMetricId, static_cast(timeNowTicks - m_lastFrameEndTime)); + } m_lastFrameEndTime = timeNowTicks; return ResultCode::Success; @@ -588,12 +600,18 @@ namespace AZ : nullptr; } - const CpuTimingStatistics* FrameScheduler::GetCpuTimingStatistics() const + double FrameScheduler::GetCpuFrameTime() const { - return - CheckBitsAny(m_compileRequest.m_statisticsFlags, FrameSchedulerStatisticsFlags::GatherCpuTimingStatistics) - ? &m_cpuTimingStatistics - : nullptr; + if (CheckBitsAny(m_compileRequest.m_statisticsFlags, FrameSchedulerStatisticsFlags::GatherCpuTimingStatistics)) + { + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + const auto* frameTimeStat = rhiMetrics.GetStatistic(frameTimeMetricId); + return (frameTimeStat->GetMostRecentSample() * 1000) / aznumeric_cast(AZStd::GetTimeTicksPerSecond()); + } + } + return 0; } ScopeId FrameScheduler::GetRootScopeId() const diff --git a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp index 744b688c60..b40ad3e11a 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp @@ -254,9 +254,9 @@ namespace AZ : RHI::ResetBits(m_compileRequest.m_statisticsFlags, statisticsFlags); } - const RHI::CpuTimingStatistics* RHISystem::GetCpuTimingStatistics() const + double RHISystem::GetCpuFrameTime() const { - return m_frameScheduler.GetCpuTimingStatistics(); + return m_frameScheduler.GetCpuFrameTime(); } const RHI::TransientAttachmentStatistics* RHISystem::GetTransientAttachmentStatistics() const diff --git a/Gems/Atom/RHI/Code/Tests/Device.h b/Gems/Atom/RHI/Code/Tests/Device.h index d3177fc823..2b6a81face 100644 --- a/Gems/Atom/RHI/Code/Tests/Device.h +++ b/Gems/Atom/RHI/Code/Tests/Device.h @@ -47,7 +47,7 @@ namespace UnitTest void CompileMemoryStatisticsInternal(AZ::RHI::MemoryStatisticsBuilder&) override {} - void UpdateCpuTimingStatisticsInternal([[maybe_unused]] AZ::RHI::CpuTimingStatistics& cpuTimingStatistics) const override {} + void UpdateCpuTimingStatisticsInternal() const override {} AZStd::chrono::microseconds GpuTimestampToMicroseconds([[maybe_unused]] uint64_t gpuTimestamp, [[maybe_unused]] AZ::RHI::HardwareQueueClass queueClass) const override { diff --git a/Gems/Atom/RHI/Code/atom_rhi_reflect_files.cmake b/Gems/Atom/RHI/Code/atom_rhi_reflect_files.cmake index e211462eeb..9a2b6e8765 100644 --- a/Gems/Atom/RHI/Code/atom_rhi_reflect_files.cmake +++ b/Gems/Atom/RHI/Code/atom_rhi_reflect_files.cmake @@ -112,7 +112,6 @@ set(FILES Source/RHI.Reflect/ShaderResourceGroupLayout.cpp Source/RHI.Reflect/ShaderResourceGroupLayoutDescriptor.cpp Source/RHI.Reflect/ShaderResourceGroupPoolDescriptor.cpp - Include/Atom/RHI.Reflect/CpuTimingStatistics.h Include/Atom/RHI.Reflect/MemoryStatistics.h Include/Atom/RHI.Reflect/TransientAttachmentStatistics.h Include/Atom/RHI.Reflect/SwapChainDescriptor.h diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueue.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueue.cpp index 0cde6aeb09..7ab2b07b03 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueue.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueue.cpp @@ -10,8 +10,8 @@ #include #include #include -#include -#include + +#include namespace AZ { @@ -139,7 +139,7 @@ namespace AZ QueueCommand([=](void* commandQueue) { AZ_PROFILE_SCOPE(RHI, "ExecuteWork"); - AZ_PROFILE_RHI_VARIABLE(m_lastExecuteDuration); + AZ::Debug::ScopedTimer executionTimer(m_lastExecuteDuration); static const uint32_t CommandListCountMax = 128; ID3D12CommandQueue* dx12CommandQueue = static_cast(commandQueue); @@ -185,7 +185,7 @@ namespace AZ dx12CommandQueue->Signal(fence->Get(), fence->GetPendingValue()); } - AZ_PROFILE_RHI_VARIABLE(m_lastPresentDuration); + AZ::Debug::ScopedTimer presentTimer(m_lastPresentDuration); for (RHI::SwapChain* swapChain : request.m_swapChainsToPresent) { swapChain->Present(); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp index 012784d3fc..5692809443 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -183,17 +182,22 @@ namespace AZ return *m_commandQueues[static_cast(hardwareQueueClass)]; } - void CommandQueueContext::UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const + void CommandQueueContext::UpdateCpuTimingStatistics() const { - cpuTimingStatistics.Reset(); - - AZStd::sys_time_t presentDuration = 0; - for (const RHI::Ptr& commandQueue : m_commandQueues) + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) { - cpuTimingStatistics.m_queueStatistics.push_back({ commandQueue->GetName(), commandQueue->GetLastExecuteDuration() }); - presentDuration += commandQueue->GetLastPresentDuration(); + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + + AZStd::sys_time_t presentDuration = 0; + for (const RHI::Ptr& commandQueue : m_commandQueues) + { + const AZ::Crc32 commandQueueId(commandQueue->GetName().GetHash()); + rhiMetrics.PushSample(commandQueueId, static_cast(commandQueue->GetLastExecuteDuration())); + presentDuration += commandQueue->GetLastPresentDuration(); + } + + rhiMetrics.PushSample(AZ_CRC_CE("Present"), static_cast(presentDuration)); } - cpuTimingStatistics.m_presentDuration = presentDuration; } const FenceSet& CommandQueueContext::GetCompiledFences() diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.h index cf820026aa..dff1741109 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.h @@ -14,11 +14,6 @@ namespace AZ { - namespace RHI - { - struct CpuTimingStatistics; - } - namespace DX12 { class CommandQueueContext @@ -49,7 +44,7 @@ namespace AZ RHI::HardwareQueueClass hardwareQueueClass, const ExecuteWorkRequest& request); - void UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const; + void UpdateCpuTimingStatistics() const; // Fences across all queues that are compiled by the frame graph compilation phase const FenceSet& GetCompiledFences(); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp index 6f614499d2..3d44e56953 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp @@ -184,9 +184,9 @@ namespace AZ m_stagingMemoryAllocator.ReportMemoryUsage(builder); } - void Device::UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const + void Device::UpdateCpuTimingStatisticsInternal() const { - m_commandQueueContext.UpdateCpuTimingStatistics(cpuTimingStatistics); + m_commandQueueContext.UpdateCpuTimingStatistics(); } void Device::EndFrameInternal() diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.h index 40e26db891..29e006fca0 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.h @@ -147,7 +147,7 @@ namespace AZ void ShutdownInternal() override; void CompileMemoryStatisticsInternal(RHI::MemoryStatisticsBuilder& builder) override; - void UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const override; + void UpdateCpuTimingStatisticsInternal() const override; void BeginFrameInternal() override; void EndFrameInternal() override; void WaitForIdleInternal() override; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueue.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueue.cpp index d151a11ec1..a1f4616147 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueue.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueue.cpp @@ -5,14 +5,15 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include -#include + #include #include #include #include #include +#include + namespace AZ { namespace Metal @@ -115,7 +116,7 @@ namespace AZ @autoreleasepool { AZ_PROFILE_SCOPE(RHI, "ExecuteWork"); - AZ_PROFILE_RHI_VARIABLE(m_lastExecuteDuration); + AZ::Debug::ScopedTimer executionTimer(m_lastExecuteDuration); if (request.m_signalFenceValue > 0) { @@ -128,7 +129,7 @@ namespace AZ } { - AZ_PROFILE_RHI_VARIABLE(m_lastPresentDuration); + AZ::Debug::ScopedTimer presentTimer(m_lastPresentDuration); for (RHI::SwapChain* swapChain : request.m_swapChainsToPresent) { diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp index e4c651c2b1..37f8a8bab8 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -135,18 +134,23 @@ namespace AZ m_commandQueues[hardwareQueueIdx]->QueueGpuSignal(fence); } } - - void CommandQueueContext::UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const - { - cpuTimingStatistics.Reset(); - AZStd::sys_time_t presentDuration = 0; - for (const RHI::Ptr& commandQueue : m_commandQueues) + void CommandQueueContext::UpdateCpuTimingStatistics() const + { + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) { - cpuTimingStatistics.m_queueStatistics.push_back({ commandQueue->GetName(), commandQueue->GetLastExecuteDuration() }); - presentDuration += commandQueue->GetLastPresentDuration(); + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + + AZStd::sys_time_t presentDuration = 0; + for (const RHI::Ptr& commandQueue : m_commandQueues) + { + const AZ::Crc32 commandQueueId(commandQueue->GetName().GetHash()); + rhiMetrics.PushSample(commandQueueId, static_cast(commandQueue->GetLastExecuteDuration())); + presentDuration += commandQueue->GetLastPresentDuration(); + } + + rhiMetrics.PushSample(AZ_CRC_CE("Present"), static_cast(presentDuration)); } - cpuTimingStatistics.m_presentDuration = presentDuration; } } } diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.h b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.h index 747667e1a3..41c0f63189 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.h +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.h @@ -40,7 +40,7 @@ namespace AZ /// Fences across all queues that are compiled by the frame graph compilation phase const FenceSet& GetCompiledFences(); - void UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const; + void UpdateCpuTimingStatistics() const; private: AZStd::array, RHI::HardwareQueueClassCount> m_commandQueues; FenceSet m_compiledFences; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp index 782ea7174b..76af1ecab1 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp @@ -245,9 +245,9 @@ namespace AZ { } - void Device::UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const + void Device::UpdateCpuTimingStatisticsInternal() const { - m_commandQueueContext.UpdateCpuTimingStatistics(cpuTimingStatistics); + m_commandQueueContext.UpdateCpuTimingStatistics(); } void Device::FillFormatsCapabilitiesInternal(FormatCapabilitiesList& formatsCapabilities) diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.h b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.h index 90dd4ff4a0..8a8ef662f9 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.h +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.h @@ -161,7 +161,7 @@ namespace AZ RHI::ResultCode InitInternal(RHI::PhysicalDevice& physicalDevice) override; void ShutdownInternal() override; void CompileMemoryStatisticsInternal(RHI::MemoryStatisticsBuilder& builder) override; - void UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const override; + void UpdateCpuTimingStatisticsInternal() const override; void BeginFrameInternal() override; void EndFrameInternal() override; void WaitForIdleInternal() override; diff --git a/Gems/Atom/RHI/Null/Code/Source/RHI/Device.h b/Gems/Atom/RHI/Null/Code/Source/RHI/Device.h index 27873887d4..73e1cd9119 100644 --- a/Gems/Atom/RHI/Null/Code/Source/RHI/Device.h +++ b/Gems/Atom/RHI/Null/Code/Source/RHI/Device.h @@ -32,7 +32,7 @@ namespace AZ RHI::ResultCode InitInternal([[maybe_unused]] RHI::PhysicalDevice& physicalDevice) override { return RHI::ResultCode::Success; } void ShutdownInternal() override {} void CompileMemoryStatisticsInternal([[maybe_unused]] RHI::MemoryStatisticsBuilder& builder) override {} - void UpdateCpuTimingStatisticsInternal([[maybe_unused]] RHI::CpuTimingStatistics& cpuTimingStatistics) const override {} + void UpdateCpuTimingStatisticsInternal() const override {} void BeginFrameInternal() override {} void EndFrameInternal() override {} void WaitForIdleInternal() override {} diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueue.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueue.cpp index c712099172..6a43b66474 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueue.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueue.cpp @@ -5,13 +5,14 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include + #include #include #include #include #include -#include + +#include namespace AZ { @@ -46,7 +47,7 @@ namespace AZ QueueCommand([=](void* queue) { AZ_PROFILE_SCOPE(RHI, "ExecuteWork"); - AZ_PROFILE_RHI_VARIABLE(m_lastExecuteDuration); + AZ::Debug::ScopedTimer executionTimer(m_lastExecuteDuration); Queue* vulkanQueue = static_cast(queue); @@ -80,7 +81,7 @@ namespace AZ } { - AZ_PROFILE_RHI_VARIABLE(m_lastPresentDuration); + AZ::Debug::ScopedTimer presentTimer(m_lastPresentDuration); // present the image of the current frame. for (RHI::SwapChain* swapChain : request.m_swapChainsToPresent) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp index ec7311cd6e..9cf6dce77b 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp @@ -13,7 +13,6 @@ #include #include #include -#include namespace AZ { @@ -363,17 +362,22 @@ namespace AZ return queueSelection.m_familyIndex != InvalidFamilyIndex; } - void CommandQueueContext::UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const + void CommandQueueContext::UpdateCpuTimingStatistics() const { - cpuTimingStatistics.Reset(); - - AZStd::sys_time_t presentDuration = 0; - for (const RHI::Ptr& commandQueue : m_commandQueues) + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) { - cpuTimingStatistics.m_queueStatistics.push_back({ commandQueue->GetName(), commandQueue->GetLastExecuteDuration() }); - presentDuration += commandQueue->GetLastPresentDuration(); + auto& rhiMetrics = statsProfiler->GetProfiler(rhiMetricsId); + + AZStd::sys_time_t presentDuration = 0; + for (const RHI::Ptr& commandQueue : m_commandQueues) + { + const AZ::Crc32 commandQueueId(commandQueue->GetName().GetHash()); + rhiMetrics.PushSample(commandQueueId, static_cast(commandQueue->GetLastExecuteDuration())); + presentDuration += commandQueue->GetLastPresentDuration(); + } + + rhiMetrics.PushSample(AZ_CRC_CE("Present"), static_cast(presentDuration)); } - cpuTimingStatistics.m_presentDuration = presentDuration; } } } diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.h index 8528185686..61e9b46d9f 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.h @@ -16,11 +16,6 @@ namespace AZ { - namespace RHI - { - struct CpuTimingStatistics; - } - namespace Vulkan { class Device; @@ -62,7 +57,7 @@ namespace AZ AZStd::vector GetQueueFamilyIndices(const RHI::HardwareQueueClassMask hardwareQueueClassMask) const; VkPipelineStageFlags GetSupportedPipelineStages(uint32_t queueFamilyIndex) const; - void UpdateCpuTimingStatistics(RHI::CpuTimingStatistics& cpuTimingStatistics) const; + void UpdateCpuTimingStatistics() const; private: Descriptor m_descriptor; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp index 35bc966d1d..132f9929c1 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp @@ -547,9 +547,9 @@ namespace AZ physicalDevice.CompileMemoryStatistics(builder); } - void Device::UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const + void Device::UpdateCpuTimingStatisticsInternal() const { - m_commandQueueContext.UpdateCpuTimingStatistics(cpuTimingStatistics); + m_commandQueueContext.UpdateCpuTimingStatistics(); } AZStd::vector Device::GetValidSwapChainImageFormats(const RHI::WindowHandle& windowHandle) const diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.h index 13ccf9367b..9c21103929 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.h @@ -126,7 +126,7 @@ namespace AZ void EndFrameInternal() override; void WaitForIdleInternal() override; void CompileMemoryStatisticsInternal(RHI::MemoryStatisticsBuilder& builder) override; - void UpdateCpuTimingStatisticsInternal(RHI::CpuTimingStatistics& cpuTimingStatistics) const override; + void UpdateCpuTimingStatisticsInternal() const override; AZStd::vector GetValidSwapChainImageFormats(const RHI::WindowHandle& windowHandle) const override; AZStd::chrono::microseconds GpuTimestampToMicroseconds(uint64_t gpuTimestamp, RHI::HardwareQueueClass queueClass) const override; void FillFormatsCapabilitiesInternal(FormatCapabilitiesList& formatsCapabilities) override; diff --git a/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h b/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h index 2ed2875cad..b8d1cfa050 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h +++ b/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h @@ -61,7 +61,7 @@ namespace UnitTest void EndFrameInternal() override {} void WaitForIdleInternal() override {} void CompileMemoryStatisticsInternal(AZ::RHI::MemoryStatisticsBuilder&) override {} - void UpdateCpuTimingStatisticsInternal([[maybe_unused]] AZ::RHI::CpuTimingStatistics& cpuTimingStatistics) const override {} + void UpdateCpuTimingStatisticsInternal() const override {} AZStd::chrono::microseconds GpuTimestampToMicroseconds([[maybe_unused]] uint64_t gpuTimestamp, [[maybe_unused]] AZ::RHI::HardwareQueueClass queueClass) const override { return AZStd::chrono::microseconds(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/PerformanceMonitorComponent.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/PerformanceMonitorComponent.cpp index 5598d894ff..c3bb13d1d2 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/PerformanceMonitorComponent.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Viewport/PerformanceMonitorComponent.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include #include @@ -96,10 +95,10 @@ namespace MaterialEditor ResetStats(); } - const AZ::RHI::CpuTimingStatistics* stats = AZ::RHI::RHISystemInterface::Get()->GetCpuTimingStatistics(); - if (stats) + double frameTime = AZ::RHI::RHISystemInterface::Get()->GetCpuFrameTime(); + if (frameTime > 0) { - m_cpuFrameTimeMs.PushSample(stats->GetFrameToFrameTimeMilliseconds()); + m_cpuFrameTimeMs.PushSample(frameTime); } AZ::RHI::Ptr rootPass = AZ::RPI::PassSystemInterface::Get()->GetRootPass(); diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.h index a649fcf0f7..4a326660dd 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.h @@ -12,17 +12,11 @@ #include #include -#include #include namespace AZ { - namespace RHI - { - struct CpuTimingStatistics; - } - namespace Render { //! Stores all the data associated with a row in the table. @@ -88,11 +82,17 @@ namespace AZ using GroupRegionName = AZ::RHI::CachedTimeRegion::GroupRegionName; public: + struct CpuTimingEntry + { + const AZStd::string& m_name; + double m_executeDuration; + }; + ImGuiCpuProfiler() = default; ~ImGuiCpuProfiler() = default; //! Draws the overall CPU profiling window, defaults to the statistical view - void Draw(bool& keepDrawing, const AZ::RHI::CpuTimingStatistics& cpuTimingStatistics); + void Draw(bool& keepDrawing); private: static constexpr float RowHeight = 35.0; @@ -121,11 +121,14 @@ namespace AZ // Sort the table by a given column, rearranges the pointers in m_tableData. void SortTable(ImGuiTableSortSpecs* sortSpecs); + // gather the latest timing statistics + void CacheCpuTimingStatistics(); + // Get the profiling data from the last frame, only called when the profiler is not paused. void CollectFrameData(); // Cull old data from internal storage, only called when profiler is not paused. - void CullFrameData(const AZ::RHI::CpuTimingStatistics& currentCpuTimingStatistics); + void CullFrameData(); // Draws a single block onto the timeline into the specified row void DrawBlock(const TimeRegion& block, u64 targetRow); @@ -204,7 +207,8 @@ namespace AZ bool m_enableVisualizer = false; // Last captured CPU timing statistics - AZ::RHI::CpuTimingStatistics m_cpuTimingStatisticsWhenPause; + AZStd::vector m_cpuTimingStatisticsWhenPause; + AZStd::sys_time_t m_frameToFrameTime{}; AZStd::string m_lastCapturedFilePath; diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.inl b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.inl index a573e3019a..daf6eca5c0 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.inl +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImGuiCpuProfiler.inl @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -16,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -31,7 +31,7 @@ namespace AZ { namespace CpuProfilerImGuiHelper { - inline float TicksToMs(AZStd::sys_time_t ticks) + inline float TicksToMs(double ticks) { // Note: converting to microseconds integer before converting to milliseconds float const AZStd::sys_time_t ticksPerSecond = AZStd::GetTimeTicksPerSecond(); @@ -39,6 +39,11 @@ namespace AZ return static_cast((ticks * 1000) / (ticksPerSecond / 1000)) / 1000.0f; } + inline float TicksToMs(AZStd::sys_time_t ticks) + { + return TicksToMs(static_cast(ticks)); + } + using DeserializedCpuData = AZStd::vector; inline Outcome LoadSavedCpuProfilingStatistics(const AZStd::string& capturePath) { @@ -108,7 +113,9 @@ namespace AZ } } // namespace CpuProfilerImGuiHelper - inline void ImGuiCpuProfiler::Draw(bool& keepDrawing, const AZ::RHI::CpuTimingStatistics& currentCpuTimingStatistics) + + + inline void ImGuiCpuProfiler::Draw(bool& keepDrawing) { // Cache the value to detect if it was changed by ImGui(user pressed 'x') const bool cachedShowCpuProfiler = keepDrawing; @@ -121,10 +128,10 @@ namespace AZ if (!m_paused) { // Update region map and cache the input cpu timing statistics when the profiling is not paused - m_cpuTimingStatisticsWhenPause = currentCpuTimingStatistics; + CacheCpuTimingStatistics(); CollectFrameData(); - CullFrameData(currentCpuTimingStatistics); + CullFrameData(); // Only listen to system ticks when the profiler is active if (!SystemTickBus::Handler::BusIsConnected()) @@ -354,19 +361,12 @@ namespace AZ { DrawCommonHeader(); - const AZ::RHI::CpuTimingStatistics& cpuTimingStatistics = m_cpuTimingStatisticsWhenPause; - - const auto ShowTimeInMs = [](AZStd::sys_time_t duration) - { - ImGui::Text("%.2f ms", CpuProfilerImGuiHelper::TicksToMs(duration)); - }; - - const auto ShowRow = [&ShowTimeInMs](const char* regionLabel, AZStd::sys_time_t duration) + const auto ShowRow = [](const char* regionLabel, double duration) { ImGui::Text("%s", regionLabel); ImGui::NextColumn(); - ShowTimeInMs(duration); + ImGui::Text("%.2f ms", CpuProfilerImGuiHelper::TicksToMs(duration)); ImGui::NextColumn(); }; @@ -377,11 +377,9 @@ namespace AZ ImGui::SetColumnWidth(0, 660.0f); ImGui::SetColumnWidth(1, 100.0f); - ShowRow("Frame to Frame Time", cpuTimingStatistics.m_frameToFrameTime); - ShowRow("Present Time", cpuTimingStatistics.m_presentDuration); - for (const auto& queueStatistics : cpuTimingStatistics.m_queueStatistics) + for (const auto& queueStatistics : m_cpuTimingStatisticsWhenPause) { - ShowRow(queueStatistics.m_queueName.GetCStr(), queueStatistics.m_executeDuration); + ShowRow(queueStatistics.m_name.c_str(), queueStatistics.m_executeDuration); } ImGui::Separator(); @@ -653,6 +651,32 @@ namespace AZ ImGui::EndChild(); } + inline void ImGuiCpuProfiler::CacheCpuTimingStatistics() + { + using namespace AZ::Statistics; + + m_cpuTimingStatisticsWhenPause.clear(); + if (auto statsProfiler = AZ::Interface::Get(); statsProfiler) + { + auto& rhiMetrics = statsProfiler->GetProfiler(AZ_CRC_CE("RHI")); + + const NamedRunningStatistic* frameTimeMetric = rhiMetrics.GetStatistic(AZ_CRC_CE("Frame to Frame Time")); + if (frameTimeMetric) + { + m_frameToFrameTime = static_cast(frameTimeMetric->GetMostRecentSample()); + } + + AZStd::vector statistics; + rhiMetrics.GetStatsManager().GetAllStatistics(statistics); + + for (NamedRunningStatistic* stat : statistics) + { + m_cpuTimingStatisticsWhenPause.push_back({ stat->GetName(), stat->GetMostRecentSample() }); + stat->Reset(); + } + } + } + inline void ImGuiCpuProfiler::CollectFrameData() { // We maintain separate datastores for the visualizer and the statistical view because they require different @@ -721,10 +745,9 @@ namespace AZ } } - inline void ImGuiCpuProfiler::CullFrameData(const AZ::RHI::CpuTimingStatistics& currentCpuTimingStatistics) + inline void ImGuiCpuProfiler::CullFrameData() { - const AZStd::sys_time_t frameToFrameTime = currentCpuTimingStatistics.m_frameToFrameTime; - const AZStd::sys_time_t deleteBeforeTick = AZStd::GetTimeNowTicks() - frameToFrameTime * m_framesToCollect; + const AZStd::sys_time_t deleteBeforeTick = AZStd::GetTimeNowTicks() - m_frameToFrameTime * m_framesToCollect; // Remove old frame boundary data auto firstBoundaryToKeepItr = AZStd::upper_bound(m_frameEndTicks.begin(), m_frameEndTicks.end(), deleteBeforeTick); diff --git a/Gems/AtomLyIntegration/AtomImGuiTools/Code/Source/AtomImGuiToolsSystemComponent.cpp b/Gems/AtomLyIntegration/AtomImGuiTools/Code/Source/AtomImGuiToolsSystemComponent.cpp index ec18997a01..b369ab2ee2 100644 --- a/Gems/AtomLyIntegration/AtomImGuiTools/Code/Source/AtomImGuiToolsSystemComponent.cpp +++ b/Gems/AtomLyIntegration/AtomImGuiTools/Code/Source/AtomImGuiToolsSystemComponent.cpp @@ -86,11 +86,7 @@ namespace AtomImGuiTools } if (m_showCpuProfiler) { - const AZ::RHI::CpuTimingStatistics* stats = AZ::RHI::RHISystemInterface::Get()->GetCpuTimingStatistics(); - if (stats) - { - m_imguiCpuProfiler.Draw(m_showCpuProfiler, *stats); - } + m_imguiCpuProfiler.Draw(m_showCpuProfiler); } if (m_showTransientAttachmentProfiler) { From 89e6df1c7fc6105ab6fac70964415af283768912 Mon Sep 17 00:00:00 2001 From: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com> Date: Mon, 11 Oct 2021 15:18:39 -0700 Subject: [PATCH 225/226] ATOM-16575 clean up image builder presets files (#4611) ATOM-16575 clean up image builder presets files Removed unused image builder presets Deprecating preset UUID and use preset name as unique id Delete all .exportsettings file which were only used for legacy imageProcessing gem. Signed-off-by: Qing Tao --- .../Materials/Stripes.tif.exportsettings | 1 - .../Materials/voxel_editor.png.exportsettings | 1 - .../AverageMemoryUsage.TIF.exportsettings | 1 - .../Icons/HighMemoryUsage.TIF.exportsettings | 1 - .../LevelShaderCacheMiss.tif.exportsettings | 1 - .../Icons/LivePreview.TIF.exportsettings | 1 - .../Icons/LowMemoryUsage.TIF.exportsettings | 1 - .../NavigationProcessing.tif.exportsettings | 1 - .../Icons/NullSoundSystem.tif.exportsettings | 1 - .../Icons/ShaderCompiling.tif.exportsettings | 1 - .../Icons/Streaming.tif.exportsettings | 1 - .../Icons/StreamingTerrain.tif.exportsettings | 1 - .../textures/default_icon.png.exportsettings | 1 - .../grass_atlas_diff.tif.exportsettings | 1 - .../grass_atlas_sss.tif.exportsettings | 1 - ...est_texture_sequence000.png.exportsettings | 1 - .../ProxyGray_ddna.tif.exportsettings | 1 - .../lights/flare01.tif.exportsettings | 1 - .../milestone2/AMA_Grey_01.tif.exportsettings | 1 - .../milestone2/AMA_Grey_02.tif.exportsettings | 1 - .../milestone2/AMA_Grey_03.tif.exportsettings | 1 - ..._LauncherMuzzleFront_01.tif.exportsettings | 1 - ...X_LauncherMuzzleRing_01.tif.exportsettings | 1 - .../BuilderSettings/BuilderSettingManager.cpp | 78 +++++------ .../BuilderSettings/BuilderSettingManager.h | 24 ++-- .../Source/BuilderSettings/CubemapSettings.h | 8 +- .../BuilderSettings/ImageProcessingDefines.h | 4 +- .../Source/BuilderSettings/PresetSettings.h | 3 +- .../BuilderSettings/TextureSettings.cpp | 27 ++-- .../Source/BuilderSettings/TextureSettings.h | 7 +- .../Code/Source/Editor/EditorCommon.cpp | 25 ++-- .../Code/Source/Editor/EditorCommon.h | 2 +- .../Code/Source/Editor/PresetInfoPopup.cpp | 6 +- .../Editor/ResolutionSettingItemWidget.cpp | 2 +- .../Editor/ResolutionSettingItemWidget.h | 2 +- .../Editor/TexturePresetSelectionWidget.cpp | 20 +-- .../Editor/TexturePresetSelectionWidget.h | 2 +- .../Code/Source/ImageBuilderComponent.cpp | 8 +- .../Code/Source/Processing/ImageConvert.cpp | 18 ++- .../Code/Source/Processing/ImageConvert.h | 2 +- .../Code/Source/Processing/ImagePreview.cpp | 2 +- .../Code/Tests/ImageProcessing_Test.cpp | 11 +- .../1024x1024_24bit.tif.exportsettings | 1 - .../Config/AlbedoWithOpacity.preset | 104 --------------- .../Config/CloudShadows.preset | 44 ------ .../Config/ColorChart.preset | 64 --------- ...etail_MergedAlbedoNormalsSmoothness.preset | 79 ----------- ...gedAlbedoNormalsSmoothness_Lossless.preset | 74 ---------- .../Config/IBLGlobal.preset | 4 +- .../Config/IBLSkybox.preset | 20 +-- .../Config/ImageBuilder.settings | 42 +++--- .../Config/LensOptics.preset | 34 ----- .../Config/LightProjector.preset | 59 -------- .../Config/LoadingScreen.preset | 34 ----- .../ImageProcessingAtom/Config/Minimap.preset | 64 --------- .../Config/MuzzleFlash.preset | 59 -------- .../ImageProcessingAtom/Config/Normals.preset | 5 + .../Config/NormalsFromDisplacement.preset | 86 ------------ .../NormalsWithSmoothness_Legacy.preset | 101 -------------- .../ReflectanceWithSmoothness_Legacy.preset | 71 ---------- .../Config/Reflectance_Linear.preset | 81 ----------- .../ImageProcessingAtom/Config/SF_Font.preset | 49 ------- .../Config/SF_Gradient.preset | 49 ------- .../Config/SF_Image.preset | 54 -------- .../Config/SF_Image_nonpower2.preset | 49 ------- .../Config/Terrain_Albedo.preset | 69 ---------- .../Config/Terrain_Albedo_HighPassed.preset | 64 --------- .../Config/Uncompressed.preset | 54 -------- .../Actor/chicken_diff.png.imagesettings | 65 --------- .../Textures/Cowboy_01_ddna.tif.imagesettings | 126 ------------------ .../Textures/Cowboy_01_spec.tif.imagesettings | 126 ------------------ ...amepad_button_a_pressed.tif.exportsettings | 1 - ...epad_button_a_unpressed.tif.exportsettings | 1 - ...amepad_button_b_pressed.tif.exportsettings | 1 - ...epad_button_b_unpressed.tif.exportsettings | 1 - ...amepad_button_x_pressed.tif.exportsettings | 1 - ...epad_button_x_unpressed.tif.exportsettings | 1 - ...amepad_button_y_pressed.tif.exportsettings | 1 - ...epad_button_y_unpressed.tif.exportsettings | 1 - ...mepad_thumbstick_centre.tif.exportsettings | 1 - ...mepad_thumbstick_radial.tif.exportsettings | 1 - 81 files changed, 159 insertions(+), 1856 deletions(-) delete mode 100644 Assets/Editor/Materials/Stripes.tif.exportsettings delete mode 100644 Assets/Editor/Materials/voxel_editor.png.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/AverageMemoryUsage.TIF.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/HighMemoryUsage.TIF.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/LevelShaderCacheMiss.tif.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/LivePreview.TIF.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/LowMemoryUsage.TIF.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/NavigationProcessing.tif.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/NullSoundSystem.tif.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/ShaderCompiling.tif.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/Streaming.tif.exportsettings delete mode 100644 Assets/Engine/EngineAssets/Icons/StreamingTerrain.tif.exportsettings delete mode 100644 Assets/Engine/textures/default_icon.png.exportsettings delete mode 100644 AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_diff.tif.exportsettings delete mode 100644 AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_sss.tif.exportsettings delete mode 100644 AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/assets/C30936451/test_texture_sequence000.png.exportsettings delete mode 100644 AutomatedTesting/Objects/LumberTank/ProxyGray_ddna.tif.exportsettings delete mode 100644 AutomatedTesting/textures/lights/flare01.tif.exportsettings delete mode 100644 AutomatedTesting/textures/milestone2/AMA_Grey_01.tif.exportsettings delete mode 100644 AutomatedTesting/textures/milestone2/AMA_Grey_02.tif.exportsettings delete mode 100644 AutomatedTesting/textures/milestone2/AMA_Grey_03.tif.exportsettings delete mode 100644 AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleFront_01.tif.exportsettings delete mode 100644 AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleRing_01.tif.exportsettings delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/1024x1024_24bit.tif.exportsettings delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithOpacity.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/CloudShadows.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/ColorChart.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness_Lossless.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/LensOptics.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/LightProjector.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/LoadingScreen.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Minimap.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/MuzzleFlash.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Font.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Gradient.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image_nonpower2.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo_HighPassed.preset delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Config/Uncompressed.preset delete mode 100644 Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken_diff.png.imagesettings delete mode 100644 Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_ddna.tif.imagesettings delete mode 100644 Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_spec.tif.imagesettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_pressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_unpressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_pressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_unpressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_pressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_unpressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_pressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_unpressed.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_centre.tif.exportsettings delete mode 100644 Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_radial.tif.exportsettings diff --git a/Assets/Editor/Materials/Stripes.tif.exportsettings b/Assets/Editor/Materials/Stripes.tif.exportsettings deleted file mode 100644 index 0653bb85eb..0000000000 --- a/Assets/Editor/Materials/Stripes.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Diffuse_lowQ \ No newline at end of file diff --git a/Assets/Editor/Materials/voxel_editor.png.exportsettings b/Assets/Editor/Materials/voxel_editor.png.exportsettings deleted file mode 100644 index d19ae00148..0000000000 --- a/Assets/Editor/Materials/voxel_editor.png.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /mipmaps=0 /preset=AlbedoWithGenericAlpha /reduce=-1 \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/AverageMemoryUsage.TIF.exportsettings b/Assets/Engine/EngineAssets/Icons/AverageMemoryUsage.TIF.exportsettings deleted file mode 100644 index c48fb8632a..0000000000 --- a/Assets/Engine/EngineAssets/Icons/AverageMemoryUsage.TIF.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/HighMemoryUsage.TIF.exportsettings b/Assets/Engine/EngineAssets/Icons/HighMemoryUsage.TIF.exportsettings deleted file mode 100644 index c48fb8632a..0000000000 --- a/Assets/Engine/EngineAssets/Icons/HighMemoryUsage.TIF.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/LevelShaderCacheMiss.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/LevelShaderCacheMiss.tif.exportsettings deleted file mode 100644 index c48fb8632a..0000000000 --- a/Assets/Engine/EngineAssets/Icons/LevelShaderCacheMiss.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/LivePreview.TIF.exportsettings b/Assets/Engine/EngineAssets/Icons/LivePreview.TIF.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/LivePreview.TIF.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/LowMemoryUsage.TIF.exportsettings b/Assets/Engine/EngineAssets/Icons/LowMemoryUsage.TIF.exportsettings deleted file mode 100644 index c48fb8632a..0000000000 --- a/Assets/Engine/EngineAssets/Icons/LowMemoryUsage.TIF.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/NavigationProcessing.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/NavigationProcessing.tif.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/NavigationProcessing.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/NullSoundSystem.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/NullSoundSystem.tif.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/NullSoundSystem.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/ShaderCompiling.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/ShaderCompiling.tif.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/ShaderCompiling.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/Streaming.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/Streaming.tif.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/Streaming.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/EngineAssets/Icons/StreamingTerrain.tif.exportsettings b/Assets/Engine/EngineAssets/Icons/StreamingTerrain.tif.exportsettings deleted file mode 100644 index 8da27c31a4..0000000000 --- a/Assets/Engine/EngineAssets/Icons/StreamingTerrain.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=Uncompressed \ No newline at end of file diff --git a/Assets/Engine/textures/default_icon.png.exportsettings b/Assets/Engine/textures/default_icon.png.exportsettings deleted file mode 100644 index 89ea1ac93f..0000000000 --- a/Assets/Engine/textures/default_icon.png.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /mipmaps=0 /preset=Albedo /reduce=-1 /ser=1 \ No newline at end of file diff --git a/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_diff.tif.exportsettings b/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_diff.tif.exportsettings deleted file mode 100644 index b65133fbb0..0000000000 --- a/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_diff.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=AlbedoWithGenericAlpha /reduce="android:2,ios:2,mac:0,pc:0,provo:0" \ No newline at end of file diff --git a/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_sss.tif.exportsettings b/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_sss.tif.exportsettings deleted file mode 100644 index e8da408b36..0000000000 --- a/AutomatedTesting/Assets/Objects/Foliage/Textures/grass_atlas_sss.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Albedo /reduce="android:3,ios:3,mac:0,pc:0,provo:0" \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/assets/C30936451/test_texture_sequence000.png.exportsettings b/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/assets/C30936451/test_texture_sequence000.png.exportsettings deleted file mode 100644 index a8fbf72992..0000000000 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/asset_processor_tests/assets/C30936451/test_texture_sequence000.png.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Terrain_Albedo_HighPassed /reduce=0 \ No newline at end of file diff --git a/AutomatedTesting/Objects/LumberTank/ProxyGray_ddna.tif.exportsettings b/AutomatedTesting/Objects/LumberTank/ProxyGray_ddna.tif.exportsettings deleted file mode 100644 index a4e1a9a3c5..0000000000 --- a/AutomatedTesting/Objects/LumberTank/ProxyGray_ddna.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /M=50,50,0,50,50,50 /preset=NormalsWithSmoothness /reduce="android:1,ios:1,mac:0,pc:0,provo:0" \ No newline at end of file diff --git a/AutomatedTesting/textures/lights/flare01.tif.exportsettings b/AutomatedTesting/textures/lights/flare01.tif.exportsettings deleted file mode 100644 index 4fee4cfc4b..0000000000 --- a/AutomatedTesting/textures/lights/flare01.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=LensOptics /reduce=-1 \ No newline at end of file diff --git a/AutomatedTesting/textures/milestone2/AMA_Grey_01.tif.exportsettings b/AutomatedTesting/textures/milestone2/AMA_Grey_01.tif.exportsettings deleted file mode 100644 index 2d1dccbf99..0000000000 --- a/AutomatedTesting/textures/milestone2/AMA_Grey_01.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Albedo /reduce=0 \ No newline at end of file diff --git a/AutomatedTesting/textures/milestone2/AMA_Grey_02.tif.exportsettings b/AutomatedTesting/textures/milestone2/AMA_Grey_02.tif.exportsettings deleted file mode 100644 index a8fbf72992..0000000000 --- a/AutomatedTesting/textures/milestone2/AMA_Grey_02.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Terrain_Albedo_HighPassed /reduce=0 \ No newline at end of file diff --git a/AutomatedTesting/textures/milestone2/AMA_Grey_03.tif.exportsettings b/AutomatedTesting/textures/milestone2/AMA_Grey_03.tif.exportsettings deleted file mode 100644 index a8fbf72992..0000000000 --- a/AutomatedTesting/textures/milestone2/AMA_Grey_03.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=Terrain_Albedo_HighPassed /reduce=0 \ No newline at end of file diff --git a/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleFront_01.tif.exportsettings b/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleFront_01.tif.exportsettings deleted file mode 100644 index be29bd9bc0..0000000000 --- a/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleFront_01.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=AlbedoWithOpacity /reduce=0 \ No newline at end of file diff --git a/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleRing_01.tif.exportsettings b/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleRing_01.tif.exportsettings deleted file mode 100644 index be29bd9bc0..0000000000 --- a/AutomatedTesting/textures/milestone2/particles/FX_LauncherMuzzleRing_01.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /preset=AlbedoWithOpacity /reduce=0 \ No newline at end of file diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp index 924c01b916..a4ba846f1b 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp @@ -137,25 +137,6 @@ namespace ImageProcessingAtom return nullptr; } - const PresetSettings* BuilderSettingManager::GetPreset(const AZ::Uuid presetId, const PlatformName& platform, AZStd::string_view* settingsFilePathOut) - { - AZStd::lock_guard lock(m_presetMapLock); - - for (const auto& namePreset : m_presets) - { - if (namePreset.second.m_multiPreset.GetPresetId() == presetId) - { - if (settingsFilePathOut) - { - *settingsFilePathOut = namePreset.second.m_presetFilePath; - } - return namePreset.second.m_multiPreset.GetPreset(platform); - } - } - - return nullptr; - } - const BuilderSettings* BuilderSettingManager::GetBuilderSetting(const PlatformName& platform) { if (m_builderSettings.find(platform) != m_builderSettings.end()) @@ -180,26 +161,12 @@ namespace ImageProcessingAtom return platforms; } - const AZStd::map >& BuilderSettingManager::GetPresetFilterMap() + const AZStd::map >& BuilderSettingManager::GetPresetFilterMap() { AZStd::lock_guard lock(m_presetMapLock); return m_presetFilterMap; } - const AZ::Uuid BuilderSettingManager::GetPresetIdFromName(const PresetName& presetName) - { - AZStd::lock_guard lock(m_presetMapLock); - - auto itr = m_presets.find(presetName); - - if (itr != m_presets.end()) - { - return itr->second.m_multiPreset.GetPresetId(); - } - - return AZ::Uuid::CreateNull(); - } - const PresetName BuilderSettingManager::GetPresetNameFromId(const AZ::Uuid& presetId) { AZStd::lock_guard lock(m_presetMapLock); @@ -212,7 +179,7 @@ namespace ImageProcessingAtom } } - return "Unknown"; + return {}; } void BuilderSettingManager::ClearSettings() @@ -296,7 +263,7 @@ namespace ImageProcessingAtom AZ_Warning("Image Processing", presetName == preset.GetPresetName(), "Preset file name '%s' is not" " same as preset name '%s'. Using preset file name as preset name", - filePath.toUtf8().data(), preset.GetPresetName().c_str()); + filePath.toUtf8().data(), preset.GetPresetName().GetCStr()); preset.SetPresetName(presetName); @@ -442,8 +409,20 @@ namespace ImageProcessingAtom return AZStd::string(); } - AZ::Uuid BuilderSettingManager::GetSuggestedPreset(AZStd::string_view imageFilePath, IImageObjectPtr imageFromFile) + bool BuilderSettingManager::IsValidPreset(PresetName presetName) const + { + if (presetName.IsEmpty()) + { + return false; + } + + return m_presets.find(presetName) != m_presets.end(); + } + + PresetName BuilderSettingManager::GetSuggestedPreset(AZStd::string_view imageFilePath, IImageObjectPtr imageFromFile) { + PresetName emptyPreset; + //load the image to get its size for later use IImageObjectPtr image = imageFromFile; //if the input image is empty we will try to load it from the path @@ -454,34 +433,37 @@ namespace ImageProcessingAtom if (image == nullptr) { - return AZ::Uuid::CreateNull(); + return emptyPreset; } //get file mask of this image file AZStd::string fileMask = GetFileMask(imageFilePath); - AZ::Uuid outPreset = AZ::Uuid::CreateNull(); + PresetName outPreset = emptyPreset; //check default presets for some file masks if (m_defaultPresetByFileMask.find(fileMask) != m_defaultPresetByFileMask.end()) { outPreset = m_defaultPresetByFileMask[fileMask]; + if (!IsValidPreset(outPreset)) + { + outPreset = emptyPreset; + } } //use the preset filter map to find - if (outPreset.IsNull() && !fileMask.empty()) + if (outPreset.IsEmpty() && !fileMask.empty()) { auto& presetFilterMap = GetPresetFilterMap(); if (presetFilterMap.find(fileMask) != presetFilterMap.end()) { - AZStd::string presetName = *(presetFilterMap.find(fileMask)->second.begin()); - outPreset = GetPresetIdFromName(presetName); + outPreset = *(presetFilterMap.find(fileMask)->second.begin()); } } const PresetSettings* presetInfo = nullptr; - if (!outPreset.IsNull()) + if (!outPreset.IsEmpty()) { presetInfo = GetPreset(outPreset); @@ -491,12 +473,12 @@ namespace ImageProcessingAtom // If it's not a latitude-longitude map or it doesn't match any cubemap layouts then reset its preset if (!IsValidLatLongMap(image) && CubemapLayout::GetCubemapLayoutInfo(image) == nullptr) { - outPreset = AZ::Uuid::CreateNull(); + outPreset = emptyPreset; } } } - if (outPreset.IsNull()) + if (outPreset == emptyPreset) { if (image->GetAlphaContent() == EAlphaContent::eAlphaContent_Absent) { @@ -521,7 +503,7 @@ namespace ImageProcessingAtom } else { - AZ_Warning("Image Processing", false, "Image dimensions are not compatible with preset '%s'. The default preset will be used.", presetInfo->m_name.c_str()); + AZ_Warning("Image Processing", false, "Image dimensions are not compatible with preset '%s'. The default preset will be used.", presetInfo->m_name.GetCStr()); } } @@ -540,7 +522,7 @@ namespace ImageProcessingAtom for (const auto& element : m_presets) { const PresetEntry& presetEntry = element.second; - AZStd::string fileName = AZStd::string::format("%s.preset", presetEntry.m_multiPreset.GetDefaultPreset().m_name.c_str()); + AZStd::string fileName = AZStd::string::format("%s.preset", presetEntry.m_multiPreset.GetDefaultPreset().m_name.GetCStr()); AZStd::string filePath; if (!AzFramework::StringFunc::Path::Join(outputFolder.data(), fileName.c_str(), filePath)) { @@ -552,7 +534,7 @@ namespace ImageProcessingAtom if (!result.IsSuccess()) { AZ_Warning("Image Processing", false, "Failed to save preset '%s' to file '%s'. Error: %s", - presetEntry.m_multiPreset.GetDefaultPreset().m_name.c_str(), filePath.c_str(), result.GetError().c_str()); + presetEntry.m_multiPreset.GetDefaultPreset().m_name.GetCStr(), filePath.c_str(), result.GetError().c_str()); } } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.h index b0a7e103be..3bbb71ea43 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.h @@ -49,7 +49,6 @@ namespace ImageProcessingAtom static void DestroyInstance(); static void Reflect(AZ::ReflectContext* context); - const PresetSettings* GetPreset(const AZ::Uuid presetId, const PlatformName& platform = "", AZStd::string_view* settingsFilePathOut = nullptr); const PresetSettings* GetPreset(const PresetName& presetName, const PlatformName& platform = "", AZStd::string_view* settingsFilePathOut = nullptr); const BuilderSettings* GetBuilderSetting(const PlatformName& platform); @@ -60,10 +59,7 @@ namespace ImageProcessingAtom //! Return A map of preset settings based on their filemasks. //! @key filemask string, empty string means no filemask //! @value set of preset setting names supporting the specified filemask - const AZStd::map>& GetPresetFilterMap(); - - //!Find preset id list based on the preset name. - const AZ::Uuid GetPresetIdFromName(const PresetName& presetName); + const AZStd::map>& GetPresetFilterMap(); //! Find preset name based on the preset id. const PresetName GetPresetNameFromId(const AZ::Uuid& presetId); @@ -84,8 +80,10 @@ namespace ImageProcessingAtom //! Find a suitable preset a given image file. //! @param imageFilePath: Filepath string of the image file. The function may load the image from the path for better detection //! @param image: an optional image object which can be used for preset selection if there is no match based file mask. - //! @return suggested preset uuid. - AZ::Uuid GetSuggestedPreset(AZStd::string_view imageFilePath, IImageObjectPtr image = nullptr); + //! @return suggested preset name. + PresetName GetSuggestedPreset(AZStd::string_view imageFilePath, IImageObjectPtr image = nullptr); + + bool IsValidPreset(PresetName presetName) const; bool DoesSupportPlatform(AZStd::string_view platformId); @@ -131,27 +129,27 @@ namespace ImageProcessingAtom // Builder settings for each platform AZStd::map m_builderSettings; - AZStd::map m_presets; + AZStd::unordered_map m_presets; // Cached list of presets mapped by their file masks. // @Key file mask, use empty string to indicate all presets without filtering // @Value set of preset names that matches the file mask - AZStd::map > m_presetFilterMap; + AZStd::map > m_presetFilterMap; // A mutex to protect when modifying any map in this manager AZStd::recursive_mutex m_presetMapLock; // Default presets for certain file masks - AZStd::map m_defaultPresetByFileMask; + AZStd::map m_defaultPresetByFileMask; // Default preset for none power of two image - AZ::Uuid m_defaultPresetNonePOT; + PresetName m_defaultPresetNonePOT; // Default preset for power of two - AZ::Uuid m_defaultPreset; + PresetName m_defaultPreset; // Default preset for power of two with alpha - AZ::Uuid m_defaultPresetAlpha; + PresetName m_defaultPresetAlpha; // Image builder's version AZStd::string m_analysisFingerprint; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/CubemapSettings.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/CubemapSettings.h index 281075b80c..9135a0f4d1 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/CubemapSettings.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/CubemapSettings.h @@ -43,14 +43,14 @@ namespace ImageProcessingAtom // generate an IBL specular cubemap bool m_generateIBLSpecular = false; - // the UUID of the preset to be used for generating the IBL specular cubemap - AZ::Uuid m_iblSpecularPreset = AZ::Uuid::CreateNull(); + // the name of the preset to be used for generating the IBL specular cubemap + PresetName m_iblSpecularPreset; // generate an IBL diffuse cubemap bool m_generateIBLDiffuse = false; - // the UUID of the preset to be used for generating the IBL diffuse cubemap - AZ::Uuid m_iblDiffusePreset = AZ::Uuid::CreateNull(); + // the name of the preset to be used for generating the IBL diffuse cubemap + PresetName m_iblDiffusePreset; // "cm_requiresconvolve", convolve the cubemap mips bool m_requiresConvolve = true; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/ImageProcessingDefines.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/ImageProcessingDefines.h index d735608db5..e421715995 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/ImageProcessingDefines.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/ImageProcessingDefines.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include @@ -38,7 +39,8 @@ namespace ImageProcessingAtom #define STRING_OUTCOME_ERROR(error) AZ::Failure(AZStd::string(error)) // Common typedefs (with dependent forward-declarations) - typedef AZStd::string PlatformName, PresetName, FileMask; + typedef AZStd::string PlatformName, FileMask; + typedef AZ::Name PresetName; typedef AZStd::vector PlatformNameVector; typedef AZStd::list PlatformNameList; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.h index b7ef72753e..941437bbf4 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/PresetSettings.h @@ -31,7 +31,8 @@ namespace ImageProcessingAtom bool operator== (const PresetSettings& other) const; static void Reflect(AZ::ReflectContext* context); - //unique id for the preset + // unique id for the preset + // this uuid will be deprecated. The preset name will be used as an unique id for the preset AZ::Uuid m_uuid = 0; PresetName m_name; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.cpp index 863b3358c5..29d9b21775 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.cpp @@ -23,7 +23,7 @@ namespace ImageProcessingAtom const char* TextureSettings::ExtensionName = ".assetinfo"; TextureSettings::TextureSettings() - : m_preset(0) + : m_presetId(0) , m_sizeReduceLevel(0) , m_suppressEngineReduce(false) , m_enableMipmap(true) @@ -45,8 +45,9 @@ namespace ImageProcessingAtom if (serialize) { serialize->Class() - ->Version(1) - ->Field("PresetID", &TextureSettings::m_preset) + ->Version(2) + ->Field("PresetID", &TextureSettings::m_presetId) + ->Field("Preset", &TextureSettings::m_preset) ->Field("SizeReduceLevel", &TextureSettings::m_sizeReduceLevel) ->Field("EngineReduce", &TextureSettings::m_suppressEngineReduce) ->Field("EnableMipmap", &TextureSettings::m_enableMipmap) @@ -169,9 +170,9 @@ namespace ImageProcessingAtom return 0.5f - fVal / 100.0f; } - void TextureSettings::ApplyPreset(AZ::Uuid presetId) + void TextureSettings::ApplyPreset(PresetName presetName) { - const PresetSettings* presetSetting = BuilderSettingManager::Instance()->GetPreset(presetId); + const PresetSettings* presetSetting = BuilderSettingManager::Instance()->GetPreset(presetName); if (presetSetting != nullptr) { m_sizeReduceLevel = presetSetting->m_sizeReduceLevel; @@ -181,11 +182,11 @@ namespace ImageProcessingAtom m_mipGenType = presetSetting->m_mipmapSetting->m_type; } - m_preset = presetId; + m_preset = presetName; } else { - AZ_Error("Image Processing", false, "Cannot set an invalid preset %s!", presetId.ToString().c_str()); + AZ_Error("Image Processing", false, "Cannot set an invalid preset %s!", presetName.GetCStr()); } } @@ -199,6 +200,14 @@ namespace ImageProcessingAtom } textureSettingPtrOut = *loadedTextureSettingPtr; + + // In old format, the preset name doesn't exist. Using preset id to get preset name + // We can remove this when we fully deprecate the preset uuid + if (textureSettingPtrOut.m_preset.IsEmpty()) + { + textureSettingPtrOut.m_preset = BuilderSettingManager::Instance()->GetPresetNameFromId(textureSettingPtrOut.m_presetId); + } + return AZ::Success(AZStd::string()); } @@ -216,7 +225,7 @@ namespace ImageProcessingAtom { MultiplatformTextureSettings settings; PlatformNameList platformsList = BuilderSettingManager::Instance()->GetPlatformList(); - AZ::Uuid suggestedPreset = BuilderSettingManager::Instance()->GetSuggestedPreset(imageFilepath); + PresetName suggestedPreset = BuilderSettingManager::Instance()->GetSuggestedPreset(imageFilepath); for (PlatformName& platform : platformsList) { TextureSettings textureSettings; @@ -234,7 +243,7 @@ namespace ImageProcessingAtom if (overrideIter == baseTextureSettings.m_platfromOverrides.end()) { return STRING_OUTCOME_ERROR(AZStd::string::format("TextureSettings preset [%s] does not have override for platform [%s]", - baseTextureSettings.m_preset.ToString().c_str(), platformName.c_str())); + baseTextureSettings.m_preset.GetCStr(), platformName.c_str())); } AZ::DataPatch& platformOverride = const_cast(overrideIter->second); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.h index 5bf4fa0d86..24a2f07bfb 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/TextureSettings.h @@ -43,7 +43,7 @@ namespace ImageProcessingAtom /** * Apply value of some preset settings to this texture settings */ - void ApplyPreset(AZ::Uuid presetId); + void ApplyPreset(PresetName presetName); /** * Performs a comprehensive comparison between two TextureSettings instances. @@ -116,7 +116,10 @@ namespace ImageProcessingAtom static const size_t s_MaxMipMaps = 6; // uuid of selected preset for this texture - AZ::Uuid m_preset; + // We are deprecating preset UUID and switching to preset name as an unique id + AZ::Uuid m_presetId; + + PresetName m_preset; // texture size reduce level. the value of this variable will override the same variable in PresetSettings unsigned int m_sizeReduceLevel; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.cpp index c6f1398703..067faf3dab 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.cpp @@ -165,17 +165,17 @@ namespace ImageProcessingAtomEditor // Get the preset id from one platform. The preset id for each platform should always be same AZ_Assert(m_settingsMap.size() > 0, "There is no platform information"); - AZ::Uuid presetId = m_settingsMap.begin()->second.m_preset; - const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(presetId); + PresetName presetName = m_settingsMap.begin()->second.m_preset; + const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(presetName); if (!preset) { - AZ_Warning("Texture Editor", false, "Cannot find preset %s! Will assign a suggested one for the texture.", presetId.ToString().c_str()); - presetId = BuilderSettingManager::Instance()->GetSuggestedPreset(m_fullPath, m_img); + AZ_Warning("Texture Editor", false, "Cannot find preset %s! Will assign a suggested one for the texture.", presetName.GetCStr()); + presetName = BuilderSettingManager::Instance()->GetSuggestedPreset(m_fullPath, m_img); for (auto& settingIter : m_settingsMap) { - settingIter.second.ApplyPreset(presetId); + settingIter.second.ApplyPreset(presetName); } } } @@ -198,25 +198,18 @@ namespace ImageProcessingAtomEditor } else { - AZ_Error("Texture Editor", false, "Texture Preset %s is not found!", textureSetting.m_preset.ToString().c_str()); + AZ_Error("Texture Editor", false, "Texture Preset %s is not found!", textureSetting.m_preset.GetCStr()); } } } - void EditorTextureSetting::SetToPreset(const AZStd::string& presetName) + void EditorTextureSetting::SetToPreset(const PresetName& presetName) { m_overrideFromPreset = false; - AZ::Uuid presetId = BuilderSettingManager::Instance()->GetPresetIdFromName(presetName); - if (presetId.IsNull()) - { - AZ_Error("Texture Editor", false, "Texture Preset %s has no associated UUID.", presetName.c_str()); - return; - } - for (auto& settingIter : m_settingsMap) { - settingIter.second.ApplyPreset(presetId); + settingIter.second.ApplyPreset(presetName); } } @@ -305,7 +298,7 @@ namespace ImageProcessingAtomEditor { it.second.m_enableMipmap = false; enabled = false; - AZ_Error("Texture Editor", false, "Preset %s does not support mipmap!", preset->m_name.c_str()); + AZ_Error("Texture Editor", false, "Preset %s does not support mipmap!", preset->m_name.GetCStr()); } } else diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.h index 24efb7a70a..78bc403906 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/EditorCommon.h @@ -62,7 +62,7 @@ namespace ImageProcessingAtomEditor void SetIsOverrided(); - void SetToPreset(const AZStd::string& presetName); + void SetToPreset(const ImageProcessingAtom::PresetName& presetName); //Get the texture setting on certain platform ImageProcessingAtom::TextureSettings& GetMultiplatformTextureSetting(const AZStd::string& platform = ""); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp index 2d5c89e8f5..a5b942fa58 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/PresetInfoPopup.cpp @@ -66,7 +66,7 @@ namespace ImageProcessingAtomEditor } presetInfoText += QString("UUID: %1\n").arg(presetSettings->m_uuid.ToString().c_str()); - presetInfoText += QString("Name: %1\n").arg(presetSettings->m_name.c_str()); + presetInfoText += QString("Name: %1\n").arg(presetSettings->m_name.GetCStr()); presetInfoText += QString("Generate IBL Only: %1\n").arg(presetSettings->m_generateIBLOnly ? "True" : "False"); presetInfoText += QString("RGB Weight: %1\n").arg(RGBWeightToString(presetSettings->m_rgbWeight)); presetInfoText += QString("Source ColorSpace: %1\n").arg(ColorSpaceToString(presetSettings->m_srcColorSpace)); @@ -98,9 +98,9 @@ namespace ImageProcessingAtomEditor presetInfoText += QString("Mip Slope: %1\n").arg(presetSettings->m_cubemapSetting->m_mipSlope); presetInfoText += QString("Edge Fixup: %1\n").arg(presetSettings->m_cubemapSetting->m_edgeFixup); presetInfoText += QString("Generate IBL Specular: %1\n").arg(presetSettings->m_cubemapSetting->m_generateIBLSpecular ? "True" : "False"); - presetInfoText += QString("IBL Specular Preset: %1\n").arg(presetSettings->m_cubemapSetting->m_iblSpecularPreset.ToString().c_str()); + presetInfoText += QString("IBL Specular Preset: %1\n").arg(presetSettings->m_cubemapSetting->m_iblSpecularPreset.GetCStr()); presetInfoText += QString("Generate IBL Diffuse: %1\n").arg(presetSettings->m_cubemapSetting->m_generateIBLDiffuse ? "True" : "False"); - presetInfoText += QString("IBL Diffuse Preset: %1\n").arg(presetSettings->m_cubemapSetting->m_iblDiffusePreset.ToString().c_str()); + presetInfoText += QString("IBL Diffuse Preset: %1\n").arg(presetSettings->m_cubemapSetting->m_iblDiffusePreset.GetCStr()); presetInfoText += QString("Requires Convolve: %1\n").arg(presetSettings->m_cubemapSetting->m_requiresConvolve ? "True" : "False"); presetInfoText += QString("SubId: %1\n").arg(presetSettings->m_cubemapSetting->m_subId); } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.cpp index 6df7b8f3df..43f99c4b60 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.cpp @@ -104,7 +104,7 @@ namespace ImageProcessingAtomEditor } } - QString ResolutionSettingItemWidget::GetFinalFormat([[maybe_unused]] const AZ::Uuid& presetId) + QString ResolutionSettingItemWidget::GetFinalFormat([[maybe_unused]] const ImageProcessingAtom::PresetName& preset) { if (m_preset && m_preset->m_pixelFormat >= 0 && m_preset->m_pixelFormat < ePixelFormat_Count) { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.h index dde3a0e32c..ce66ee1cd9 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/ResolutionSettingItemWidget.h @@ -60,7 +60,7 @@ namespace ImageProcessingAtomEditor void SetupFormatComboBox(); void SetupResolutionInfo(); void RefreshUI(); - QString GetFinalFormat(const AZ::Uuid& presetId); + QString GetFinalFormat(const ImageProcessingAtom::PresetName& preset); QScopedPointer m_ui; ResoultionWidgetType m_type; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.cpp index 5b34133f96..e50d95b907 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.cpp @@ -29,7 +29,7 @@ namespace ImageProcessingAtomEditor m_presetList.clear(); auto& presetFilterMap = BuilderSettingManager::Instance()->GetPresetFilterMap(); - AZStd::set noFilterPresetList; + AZStd::unordered_set noFilterPresetList; // Check if there is any filtered preset list first for(auto& presetFilter : presetFilterMap) @@ -40,7 +40,7 @@ namespace ImageProcessingAtomEditor } else if (IsMatchingWithFileMask(m_textureSetting->m_textureName, presetFilter.first)) { - for(const AZStd::string& presetName : presetFilter.second) + for(const auto& presetName : presetFilter.second) { m_presetList.insert(presetName); } @@ -52,18 +52,18 @@ namespace ImageProcessingAtomEditor m_presetList = noFilterPresetList; } - foreach (const AZStd::string& presetName, m_presetList) + foreach (const auto& presetName, m_presetList) { - m_ui->presetComboBox->addItem(QString(presetName.c_str())); + m_ui->presetComboBox->addItem(QString(presetName.GetCStr())); } // Set current preset - const AZ::Uuid& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; + const auto& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; const PresetSettings* presetSetting = BuilderSettingManager::Instance()->GetPreset(currPreset); if (presetSetting) { - m_ui->presetComboBox->setCurrentText(presetSetting->m_name.c_str()); + m_ui->presetComboBox->setCurrentText(presetSetting->m_name.GetCStr()); QObject::connect(m_ui->presetComboBox, static_cast(&QComboBox::currentIndexChanged), this, &TexturePresetSelectionWidget::OnChangePreset); // Suppress engine reduction checkbox @@ -109,20 +109,20 @@ namespace ImageProcessingAtomEditor void TexturePresetSelectionWidget::OnRestButton() { - m_textureSetting->SetToPreset(AZStd::string(m_ui->presetComboBox->currentText().toUtf8().data())); + m_textureSetting->SetToPreset(PresetName(m_ui->presetComboBox->currentText().toUtf8().data())); EditorInternalNotificationBus::Broadcast(&EditorInternalNotificationBus::Events::OnEditorSettingsChanged, true, BuilderSettingManager::s_defaultPlatform); } void TexturePresetSelectionWidget::OnChangePreset(int index) { QString text = m_ui->presetComboBox->itemText(index); - m_textureSetting->SetToPreset(AZStd::string(text.toUtf8().data())); + m_textureSetting->SetToPreset(PresetName(text.toUtf8().data())); EditorInternalNotificationBus::Broadcast(&EditorInternalNotificationBus::Events::OnEditorSettingsChanged, true, BuilderSettingManager::s_defaultPlatform); } void ImageProcessingAtomEditor::TexturePresetSelectionWidget::OnPresetInfoButton() { - const AZ::Uuid& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; + const auto& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; const PresetSettings* presetSetting = BuilderSettingManager::Instance()->GetPreset(currPreset); m_presetPopup.reset(new PresetInfoPopup(presetSetting, this)); m_presetPopup->installEventFilter(this); @@ -136,7 +136,7 @@ namespace ImageProcessingAtomEditor bool oldState = m_ui->serCheckBox->blockSignals(true); m_ui->serCheckBox->setChecked(m_textureSetting->GetMultiplatformTextureSetting().m_suppressEngineReduce); // If the preset's SER is true, texture setting should not override - const AZ::Uuid& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; + const auto& currPreset = m_textureSetting->GetMultiplatformTextureSetting().m_preset; const PresetSettings* presetSetting = BuilderSettingManager::Instance()->GetPreset(currPreset); if (presetSetting) { diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.h index bbb6e6e7df..ad819840f9 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Editor/TexturePresetSelectionWidget.h @@ -49,7 +49,7 @@ namespace ImageProcessingAtomEditor private: QScopedPointer m_ui; - AZStd::set m_presetList; + AZStd::unordered_set m_presetList; EditorTextureSetting* m_textureSetting; QScopedPointer m_presetPopup; bool IsMatchingWithFileMask(const AZStd::string& filename, const AZStd::string& fileMask); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp index c688b0b20c..a489c8da5e 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp @@ -74,7 +74,7 @@ namespace ImageProcessingAtom builderDescriptor.m_busId = azrtti_typeid(); builderDescriptor.m_createJobFunction = AZStd::bind(&ImageBuilderWorker::CreateJobs, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); builderDescriptor.m_processJobFunction = AZStd::bind(&ImageBuilderWorker::ProcessJob, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); - builderDescriptor.m_version = 24; // [SPEC-7821] + builderDescriptor.m_version = 25; // [ATOM-16575] builderDescriptor.m_analysisFingerprint = ImageProcessingAtom::BuilderSettingManager::Instance()->GetAnalysisFingerprint(); m_imageBuilder.BusConnect(builderDescriptor.m_busId); AssetBuilderSDK::AssetBuilderBus::Broadcast(&AssetBuilderSDK::AssetBuilderBusTraits::RegisterBuilderInformation, builderDescriptor); @@ -164,7 +164,7 @@ namespace ImageProcessingAtom AZStd::vector outProducts; AZStd::string_view presetFilePath; - const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(presetName, platformName, &presetFilePath); + const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(PresetName(presetName), platformName, &presetFilePath); if (preset == nullptr) { AZ_Assert(false, "Cannot find preset with name %s.", presetName.c_str()); @@ -173,7 +173,7 @@ namespace ImageProcessingAtom AZStd::unique_ptr desc = AZStd::make_unique(); TextureSettings& textureSettings = desc->m_textureSetting; - textureSettings.m_preset = preset->m_uuid; + textureSettings.m_preset = preset->m_name; desc->m_inputImage = imageObject; desc->m_presetSetting = *preset; desc->m_isPreview = false; @@ -204,7 +204,7 @@ namespace ImageProcessingAtom bool BuilderPluginComponent::IsPresetFormatSquarePow2(const AZStd::string& presetName, const AZStd::string& platformName) { AZStd::string_view filePath; - const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(presetName, platformName, &filePath); + const PresetSettings* preset = BuilderSettingManager::Instance()->GetPreset(PresetName(presetName), platformName, &filePath); if (preset == nullptr) { AZ_Assert(false, "Cannot find preset with name %s.", presetName.c_str()); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp index 5995146c59..977359e4f6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.cpp @@ -186,12 +186,12 @@ namespace ImageProcessingAtom { // check and generate IBL specular and diffuse, if necessary AZStd::unique_ptr& cubemapSettings = m_input->m_presetSetting.m_cubemapSetting; - if (cubemapSettings->m_generateIBLSpecular && !cubemapSettings->m_iblSpecularPreset.IsNull()) + if (cubemapSettings->m_generateIBLSpecular && !cubemapSettings->m_iblSpecularPreset.IsEmpty()) { CreateIBLCubemap(cubemapSettings->m_iblSpecularPreset, SpecularCubemapSuffix, m_iblSpecularCubemapImage); } - if (cubemapSettings->m_generateIBLDiffuse && !cubemapSettings->m_iblDiffusePreset.IsNull()) + if (cubemapSettings->m_generateIBLDiffuse && !cubemapSettings->m_iblDiffusePreset.IsEmpty()) { CreateIBLCubemap(cubemapSettings->m_iblDiffusePreset, DiffuseCubemapSuffix, m_iblDiffuseCubemapImage); } @@ -367,7 +367,7 @@ namespace ImageProcessingAtom else { AZ_TracePrintf("Image Processing", "Image converted with preset [%s] [%s] and saved to [%s] (%d bytes) taking %f seconds\n", - m_input->m_presetSetting.m_name.c_str(), + m_input->m_presetSetting.m_name.GetCStr(), m_input->m_filePath.c_str(), m_input->m_outputFolder.c_str(), sizeTotal, m_processTime); } @@ -834,7 +834,7 @@ namespace ImageProcessingAtom // if get textureSetting failed, use the default texture setting, and find suitable preset for this file // in very rare user case, an old texture setting file may not have a preset. We fix it over here too. - if (textureSettings.m_preset.IsNull()) + if (textureSettings.m_preset.IsEmpty()) { textureSettings.m_preset = BuilderSettingManager::Instance()->GetSuggestedPreset(imageFilePath, srcImage); } @@ -845,9 +845,7 @@ namespace ImageProcessingAtom if (preset == nullptr) { - AZStd::string uuidStr; - textureSettings.m_preset.ToString(uuidStr); - AZ_Assert(false, "%s cannot find image preset with ID %s.", imageFilePath.c_str(), uuidStr.c_str()); + AZ_Assert(false, "%s cannot find image preset %s.", imageFilePath.c_str(), textureSettings.m_preset.GetCStr()); return nullptr; } @@ -875,11 +873,11 @@ namespace ImageProcessingAtom return process; } - void ImageConvertProcess::CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr& cubemapImage) + void ImageConvertProcess::CreateIBLCubemap(PresetName preset, const char* fileNameSuffix, IImageObjectPtr& cubemapImage) { const AZStd::string& platformId = m_input->m_platform; AZStd::string_view filePath; - const PresetSettings* presetSettings = BuilderSettingManager::Instance()->GetPreset(presetUUID, platformId, &filePath); + const PresetSettings* presetSettings = BuilderSettingManager::Instance()->GetPreset(preset, platformId, &filePath); if (presetSettings == nullptr) { AZ_Error("Image Processing", false, "Couldn't find preset for IBL cubemap generation"); @@ -900,7 +898,7 @@ namespace ImageProcessingAtom // the diffuse irradiance cubemap is generated with a separate ImageConvertProcess TextureSettings textureSettings = m_input->m_textureSetting; - textureSettings.m_preset = presetUUID; + textureSettings.m_preset = preset; AZStd::unique_ptr desc = AZStd::make_unique(); desc->m_presetSetting = *presetSettings; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h index 6ab866ee09..eaf05c3280 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImageConvert.h @@ -163,7 +163,7 @@ namespace ImageProcessingAtom bool FillCubemapMipmaps(); //IBL cubemap generation, this creates a separate ImageConvertProcess - void CreateIBLCubemap(AZ::Uuid presetUUID, const char* fileNameSuffix, IImageObjectPtr& cubemapImage); + void CreateIBLCubemap(PresetName preset, const char* fileNameSuffix, IImageObjectPtr& cubemapImage); //convert color space to linear with pixel format rgba32f bool ConvertToLinear(); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImagePreview.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImagePreview.cpp index b73157744c..f51741eba9 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImagePreview.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/ImagePreview.cpp @@ -43,7 +43,7 @@ namespace ImageProcessingAtom m_inputImage = IImageObjectPtr(LoadImageFromFile(m_imageFileName)); } // Get preset if the setting in texture is changed - if (m_presetSetting == nullptr || m_presetSetting->m_uuid != m_textureSetting->m_preset) + if (m_presetSetting == nullptr || m_presetSetting->m_name != m_textureSetting->m_preset) { m_presetSetting = BuilderSettingManager::Instance()->GetPreset(m_textureSetting->m_preset); } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp index 9e4aa83908..3e0bbd89eb 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/ImageProcessing_Test.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -145,6 +146,8 @@ namespace UnitTest AZ::Data::AssetManager::Descriptor desc; AZ::Data::AssetManager::Create(desc); + AZ::NameDictionary::Create(); + m_assetHandlers.emplace_back(AZ::RPI::MakeAssetHandler()); m_assetHandlers.emplace_back(AZ::RPI::MakeAssetHandler()); m_assetHandlers.emplace_back(AZ::RPI::MakeAssetHandler()); @@ -153,6 +156,7 @@ namespace UnitTest //prepare reflection m_context = AZStd::make_unique(); + AZ::Name::Reflect(m_context.get()); BuilderPluginComponent::Reflect(m_context.get()); AZ::DataPatch::Reflect(m_context.get()); AZ::RHI::ReflectSystemComponent::Reflect(m_context.get()); @@ -164,6 +168,7 @@ namespace UnitTest m_jsonRegistrationContext = AZStd::make_unique(); m_jsonSystemComponent = AZStd::make_unique(); m_jsonSystemComponent->Reflect(m_jsonRegistrationContext.get()); + AZ::Name::Reflect(m_jsonRegistrationContext.get()); BuilderPluginComponent::Reflect(m_jsonRegistrationContext.get()); // Setup job context for job system @@ -227,14 +232,18 @@ namespace UnitTest m_jsonRegistrationContext->EnableRemoveReflection(); m_jsonSystemComponent->Reflect(m_jsonRegistrationContext.get()); BuilderPluginComponent::Reflect(m_jsonRegistrationContext.get()); + AZ::Name::Reflect(m_jsonRegistrationContext.get()); m_jsonRegistrationContext->DisableRemoveReflection(); m_jsonRegistrationContext.reset(); m_jsonSystemComponent.reset(); m_context.reset(); BuilderSettingManager::DestroyInstance(); + CPixelFormats::DestroyInstance(); + AZ::NameDictionary::Destroy(); + AZ::Data::AssetManager::Destroy(); AZ::AllocatorInstance::Destroy(); @@ -1027,7 +1036,7 @@ namespace UnitTest // Fill-in structure with test data TextureSettings fakeTextureSettings; - fakeTextureSettings.m_preset = AZ::Uuid::CreateRandom(); + fakeTextureSettings.m_preset = "testPreset"; fakeTextureSettings.m_sizeReduceLevel = 0; fakeTextureSettings.m_suppressEngineReduce = true; fakeTextureSettings.m_enableMipmap = false; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/1024x1024_24bit.tif.exportsettings b/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/1024x1024_24bit.tif.exportsettings deleted file mode 100644 index 7bce3041b9..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Tests/TestAssets/1024x1024_24bit.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /bumptype=none /M=62,18,32,83,50,50 /preset=Diffuse_highQ /mipgentype=kaiser /reduce="android:0,ios:3,mac:0,pc:4,provo:1" /ser=0 diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithOpacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithOpacity.preset deleted file mode 100644 index 346f0f8cac..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AlbedoWithOpacity.preset +++ /dev/null @@ -1,104 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{7BB7BC6C-D3DA-4184-AC42-BCD8C57DE565}", - "Name": "AlbedoWithOpacity", - "RGB_Weight": "CIEXYZ", - "FileMasks": [ - "_diff", - "_color", - "_albedo", - "_alb", - "_basecolor", - "_bc", - "_diffuse" - ], - "PixelFormat": "BC7t", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{7BB7BC6C-D3DA-4184-AC42-BCD8C57DE565}", - "Name": "AlbedoWithOpacity", - "RGB_Weight": "CIEXYZ", - "FileMasks": [ - "_diff", - "_color", - "_albedo", - "_alb", - "_basecolor", - "_bc", - "_diffuse" - ], - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{7BB7BC6C-D3DA-4184-AC42-BCD8C57DE565}", - "Name": "AlbedoWithOpacity", - "RGB_Weight": "CIEXYZ", - "FileMasks": [ - "_diff", - "_color", - "_albedo", - "_alb", - "_basecolor", - "_bc", - "_diffuse" - ], - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{7BB7BC6C-D3DA-4184-AC42-BCD8C57DE565}", - "Name": "AlbedoWithOpacity", - "RGB_Weight": "CIEXYZ", - "FileMasks": [ - "_diff", - "_color", - "_albedo", - "_alb", - "_basecolor", - "_bc", - "_diffuse" - ], - "PixelFormat": "BC3", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{7BB7BC6C-D3DA-4184-AC42-BCD8C57DE565}", - "Name": "AlbedoWithOpacity", - "RGB_Weight": "CIEXYZ", - "FileMasks": [ - "_diff", - "_color", - "_albedo", - "_alb", - "_basecolor", - "_bc", - "_diffuse" - ], - "PixelFormat": "BC7t", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/CloudShadows.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/CloudShadows.preset deleted file mode 100644 index 8d1105cdfc..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/CloudShadows.preset +++ /dev/null @@ -1,44 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{884B5F7C-44AC-4E9E-8B8A-559D098BE2C7}", - "Name": "CloudShadows", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true - }, - "PlatformsPresets": { - "android": { - "UUID": "{884B5F7C-44AC-4E9E-8B8A-559D098BE2C7}", - "Name": "CloudShadows", - "DestColor": "Linear", - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true - }, - "ios": { - "UUID": "{884B5F7C-44AC-4E9E-8B8A-559D098BE2C7}", - "Name": "CloudShadows", - "DestColor": "Linear", - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true - }, - "mac": { - "UUID": "{884B5F7C-44AC-4E9E-8B8A-559D098BE2C7}", - "Name": "CloudShadows", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true - }, - "provo": { - "UUID": "{884B5F7C-44AC-4E9E-8B8A-559D098BE2C7}", - "Name": "CloudShadows", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/ColorChart.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/ColorChart.preset deleted file mode 100644 index 5f0480cee7..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/ColorChart.preset +++ /dev/null @@ -1,64 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "Name": "ColorChart", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_cch" - ], - "PixelFormat": "R8G8B8X8", - "IsColorChart": true - }, - "PlatformsPresets": { - "android": { - "UUID": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "Name": "ColorChart", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_cch" - ], - "PixelFormat": "R8G8B8X8", - "IsColorChart": true - }, - "ios": { - "UUID": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "Name": "ColorChart", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_cch" - ], - "PixelFormat": "R8G8B8X8", - "IsColorChart": true - }, - "mac": { - "UUID": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "Name": "ColorChart", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_cch" - ], - "PixelFormat": "R8G8B8X8", - "IsColorChart": true - }, - "provo": { - "UUID": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "Name": "ColorChart", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_cch" - ], - "PixelFormat": "R8G8B8X8", - "IsColorChart": true - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness.preset deleted file mode 100644 index 5bfea9a376..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness.preset +++ /dev/null @@ -1,79 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{5096FC7B-0B2D-4466-9943-AD59922968E8}", - "Name": "Detail_MergedAlbedoNormalsSmoothness", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "PixelFormat": "BC7", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{5096FC7B-0B2D-4466-9943-AD59922968E8}", - "Name": "Detail_MergedAlbedoNormalsSmoothness", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{5096FC7B-0B2D-4466-9943-AD59922968E8}", - "Name": "Detail_MergedAlbedoNormalsSmoothness", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{5096FC7B-0B2D-4466-9943-AD59922968E8}", - "Name": "Detail_MergedAlbedoNormalsSmoothness", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "PixelFormat": "BC3", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{5096FC7B-0B2D-4466-9943-AD59922968E8}", - "Name": "Detail_MergedAlbedoNormalsSmoothness", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "PixelFormat": "BC7", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness_Lossless.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness_Lossless.preset deleted file mode 100644 index fec11218e8..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Detail_MergedAlbedoNormalsSmoothness_Lossless.preset +++ /dev/null @@ -1,74 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{B6FC1AEF-907C-4157-9A1A-D9960F0E5B9A}", - "Name": "Detail_MergedAlbedoNormalsSmoothness_Lossless", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{B6FC1AEF-907C-4157-9A1A-D9960F0E5B9A}", - "Name": "Detail_MergedAlbedoNormalsSmoothness_Lossless", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{B6FC1AEF-907C-4157-9A1A-D9960F0E5B9A}", - "Name": "Detail_MergedAlbedoNormalsSmoothness_Lossless", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{B6FC1AEF-907C-4157-9A1A-D9960F0E5B9A}", - "Name": "Detail_MergedAlbedoNormalsSmoothness_Lossless", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{B6FC1AEF-907C-4157-9A1A-D9960F0E5B9A}", - "Name": "Detail_MergedAlbedoNormalsSmoothness_Lossless", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_detail" - ], - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLGlobal.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLGlobal.preset index eb829c3120..717157f2aa 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLGlobal.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLGlobal.preset @@ -15,9 +15,9 @@ ], "CubemapSettings": { "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset index 402fc470eb..eee9af4cea 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset @@ -20,9 +20,9 @@ "CubemapSettings": { "RequiresConvolve": false, "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } }, "PlatformsPresets": { @@ -42,9 +42,9 @@ "CubemapSettings": { "RequiresConvolve": false, "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } }, "ios": { @@ -63,9 +63,9 @@ "CubemapSettings": { "RequiresConvolve": false, "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } }, "mac": { @@ -84,9 +84,9 @@ "CubemapSettings": { "RequiresConvolve": false, "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } }, "provo": { @@ -105,9 +105,9 @@ "CubemapSettings": { "RequiresConvolve": false, "GenerateIBLSpecular": true, - "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", + "IBLSpecularPreset": "IBLSpecular", "GenerateIBLDiffuse": true, - "IBLDiffusePreset": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}" + "IBLDiffusePreset": "IBLDiffuse" } } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/ImageBuilder.settings b/Gems/Atom/Asset/ImageProcessingAtom/Config/ImageBuilder.settings index c513e05a97..466ac4b71d 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/ImageBuilder.settings +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/ImageBuilder.settings @@ -43,29 +43,25 @@ } }, "DefaultPresetsByFileMask": { - "_basecolor": "{08A95286-ADB2-41E4-96EB-DB48F4726D6A}", - "_cch": "{0A17A85F-07EE-48A0-8BF8-D42F0A5E0B3C}", - "_ccm": "{2174E04B-73BB-4DF1-8961-4900DC3C9D72}", - "_cm": "{A13B2FCE-2F6A-4634-B112-5A0A912B50CE}", - "_ddn": "{508B21D5-5250-4003-97EC-1CF28D571ACF}", - "_ddna": "{6EE749F4-846E-4F7A-878C-F211F85EA59F}", - "_diff": "{08A95286-ADB2-41E4-96EB-DB48F4726D6A}", - "_diffuse": "{08A95286-ADB2-41E4-96EB-DB48F4726D6A}", - "_glossness": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}", - "_ibldiffusecm": "{E3706342-BF21-4D9C-AE28-9670EB3EF3C5}", - "_iblskyboxcm": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", - "_iblglobalcm": "{A13B2FCE-2F6A-4634-B112-5A0A912B50CE}", - "_iblspecularcm": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", - "_metallic": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}", - "_normal": "{508B21D5-5250-4003-97EC-1CF28D571ACF}", - "_refl": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}", - "_roughness": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}", - "_skyboxcm": "{F359CD3B-37E6-4627-B4F6-2DFC2C0E3C1C}", - "_spec": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}", - "_specular": "{7A3CC95E-0A0C-4CA1-8357-5712B028B77D}" + "_basecolor": "Albedo", + "_diff": "Albedo", + "_diffuse": "Albedo", + "_ddn": "Normals", + "_normal": "Normals", + "_ddna": "NormalsWithSmoothness", + "_glossness": "Reflectance", + "_spec": "Reflectance", + "_specular": "Reflectance", + "_metallic": "Reflectance", + "_refl": "Reflectance", + "_roughness": "Reflectance", + "_ibldiffusecm": "IBLDiffuse", + "_iblskyboxcm": "IBLSkybox", + "_iblspecularcm": "IBLSpecular", + "_skyboxcm": "Skybox" }, - "DefaultPreset": "{08A95286-ADB2-41E4-96EB-DB48F4726D6A}", - "DefaultPresetAlpha": "{5D9ECB52-4CD9-4CB8-80E3-10CAE5EFB8A2}", - "DefaultPresetNonePOT": "{C659D222-F56B-4B61-A2F8-C1FA547F3C39}" + "DefaultPreset": "Albedo", + "DefaultPresetAlpha": "AlbedoWithGenericAlpha", + "DefaultPresetNonePOT": "ReferenceImage" } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/LensOptics.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/LensOptics.preset deleted file mode 100644 index d277785151..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/LensOptics.preset +++ /dev/null @@ -1,34 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{3000A993-0A04-4E08-A813-DFB1A47A0980}", - "Name": "LensOptics", - "PixelFormat": "BC1" - }, - "PlatformsPresets": { - "android": { - "UUID": "{3000A993-0A04-4E08-A813-DFB1A47A0980}", - "Name": "LensOptics", - "PixelFormat": "ASTC_4x4" - }, - "ios": { - "UUID": "{3000A993-0A04-4E08-A813-DFB1A47A0980}", - "Name": "LensOptics", - "PixelFormat": "ASTC_4x4" - }, - "mac": { - "UUID": "{3000A993-0A04-4E08-A813-DFB1A47A0980}", - "Name": "LensOptics", - "PixelFormat": "BC1" - }, - "provo": { - "UUID": "{3000A993-0A04-4E08-A813-DFB1A47A0980}", - "Name": "LensOptics", - "PixelFormat": "BC1" - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/LightProjector.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/LightProjector.preset deleted file mode 100644 index 4de95427d6..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/LightProjector.preset +++ /dev/null @@ -1,59 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{1DFEF41A-D97F-40FB-99D3-C142A3E5225E}", - "Name": "LightProjector", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{1DFEF41A-D97F-40FB-99D3-C142A3E5225E}", - "Name": "LightProjector", - "DestColor": "Linear", - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{1DFEF41A-D97F-40FB-99D3-C142A3E5225E}", - "Name": "LightProjector", - "DestColor": "Linear", - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{1DFEF41A-D97F-40FB-99D3-C142A3E5225E}", - "Name": "LightProjector", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{1DFEF41A-D97F-40FB-99D3-C142A3E5225E}", - "Name": "LightProjector", - "DestColor": "Linear", - "PixelFormat": "BC4", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/LoadingScreen.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/LoadingScreen.preset deleted file mode 100644 index ad0e2ddf06..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/LoadingScreen.preset +++ /dev/null @@ -1,34 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{9ED87726-12AB-4BE0-9397-AD62AE56D9E2}", - "Name": "LoadingScreen", - "PixelFormat": "R8G8B8X8" - }, - "PlatformsPresets": { - "android": { - "UUID": "{9ED87726-12AB-4BE0-9397-AD62AE56D9E2}", - "Name": "LoadingScreen", - "PixelFormat": "R8G8B8X8" - }, - "ios": { - "UUID": "{9ED87726-12AB-4BE0-9397-AD62AE56D9E2}", - "Name": "LoadingScreen", - "PixelFormat": "R8G8B8X8" - }, - "mac": { - "UUID": "{9ED87726-12AB-4BE0-9397-AD62AE56D9E2}", - "Name": "LoadingScreen", - "PixelFormat": "R8G8B8X8" - }, - "provo": { - "UUID": "{9ED87726-12AB-4BE0-9397-AD62AE56D9E2}", - "Name": "LoadingScreen", - "PixelFormat": "R8G8B8X8" - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Minimap.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Minimap.preset deleted file mode 100644 index 79dda1977e..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Minimap.preset +++ /dev/null @@ -1,64 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{0D2F4C31-A665-4862-9C63-9E49A58E9A37}", - "Name": "Minimap", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "SizeReduceLevel": 1, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{0D2F4C31-A665-4862-9C63-9E49A58E9A37}", - "Name": "Minimap", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "SizeReduceLevel": 1, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{0D2F4C31-A665-4862-9C63-9E49A58E9A37}", - "Name": "Minimap", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "SizeReduceLevel": 1, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{0D2F4C31-A665-4862-9C63-9E49A58E9A37}", - "Name": "Minimap", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "SizeReduceLevel": 1, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{0D2F4C31-A665-4862-9C63-9E49A58E9A37}", - "Name": "Minimap", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "SizeReduceLevel": 1, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/MuzzleFlash.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/MuzzleFlash.preset deleted file mode 100644 index b02227b454..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/MuzzleFlash.preset +++ /dev/null @@ -1,59 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{8BCC23A5-D08E-458E-B0B3-087C65FA1D31}", - "Name": "MuzzleFlash", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{8BCC23A5-D08E-458E-B0B3-087C65FA1D31}", - "Name": "MuzzleFlash", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{8BCC23A5-D08E-458E-B0B3-087C65FA1D31}", - "Name": "MuzzleFlash", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{8BCC23A5-D08E-458E-B0B3-087C65FA1D31}", - "Name": "MuzzleFlash", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{8BCC23A5-D08E-458E-B0B3-087C65FA1D31}", - "Name": "MuzzleFlash", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Normals.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Normals.preset index 04307eada4..eee0b88686 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Normals.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Normals.preset @@ -11,6 +11,7 @@ "FileMasks": [ "_ddn", "_normal", + "_normalmap", "_normals", "_norm", "_nor", @@ -35,6 +36,7 @@ "FileMasks": [ "_ddn", "_normal", + "_normalmap", "_normals", "_norm", "_nor", @@ -59,6 +61,7 @@ "FileMasks": [ "_ddn", "_normal", + "_normalmap", "_normals", "_norm", "_nor", @@ -83,6 +86,7 @@ "FileMasks": [ "_ddn", "_normal", + "_normalmap", "_normals", "_norm", "_nor", @@ -106,6 +110,7 @@ "FileMasks": [ "_ddn", "_normal", + "_normalmap", "_normals", "_norm", "_nor", diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset deleted file mode 100644 index a960ae41b2..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsFromDisplacement.preset +++ /dev/null @@ -1,86 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{8AE5D8D7-ECF8-4B7D-91DE-8F787E3B4210}", - "Name": "NormalsFromDisplacement", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_bump" - ], - "PixelFormat": "BC5s", - "IsPowerOf2": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{8AE5D8D7-ECF8-4B7D-91DE-8F787E3B4210}", - "Name": "NormalsFromDisplacement", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_bump" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{8AE5D8D7-ECF8-4B7D-91DE-8F787E3B4210}", - "Name": "NormalsFromDisplacement", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_bump" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{8AE5D8D7-ECF8-4B7D-91DE-8F787E3B4210}", - "Name": "NormalsFromDisplacement", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_bump" - ], - "PixelFormat": "BC5s", - "IsPowerOf2": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{8AE5D8D7-ECF8-4B7D-91DE-8F787E3B4210}", - "Name": "NormalsFromDisplacement", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_bump" - ], - "PixelFormat": "BC5s", - "IsPowerOf2": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset deleted file mode 100644 index f7cba42886..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness_Legacy.preset +++ /dev/null @@ -1,101 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{A92541B8-2E70-4EF1-BA88-1DC1EA2A2341}", - "Name": "NormalsWithSmoothness_Legacy", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_ddna" - ], - "PixelFormat": "BC5s", - "PixelFormatAlpha": "BC4", - "IsPowerOf2": true, - "GlossFromNormal": 1, - "UseLegacyGloss": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{A92541B8-2E70-4EF1-BA88-1DC1EA2A2341}", - "Name": "NormalsWithSmoothness_Legacy", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_ddna" - ], - "PixelFormat": "ASTC_4x4", - "PixelFormatAlpha": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "GlossFromNormal": 1, - "UseLegacyGloss": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{A92541B8-2E70-4EF1-BA88-1DC1EA2A2341}", - "Name": "NormalsWithSmoothness_Legacy", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_ddna" - ], - "PixelFormat": "ASTC_4x4", - "PixelFormatAlpha": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "GlossFromNormal": 1, - "UseLegacyGloss": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{A92541B8-2E70-4EF1-BA88-1DC1EA2A2341}", - "Name": "NormalsWithSmoothness_Legacy", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_ddna" - ], - "PixelFormat": "BC5s", - "PixelFormatAlpha": "BC4", - "IsPowerOf2": true, - "GlossFromNormal": 1, - "UseLegacyGloss": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{A92541B8-2E70-4EF1-BA88-1DC1EA2A2341}", - "Name": "NormalsWithSmoothness_Legacy", - "SourceColor": "Linear", - "DestColor": "Linear", - "FileMasks": [ - "_ddna" - ], - "PixelFormat": "BC5s", - "PixelFormatAlpha": "BC4", - "IsPowerOf2": true, - "GlossFromNormal": 1, - "UseLegacyGloss": true, - "MipRenormalize": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset deleted file mode 100644 index 7a0c137f07..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/ReflectanceWithSmoothness_Legacy.preset +++ /dev/null @@ -1,71 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{851128B5-7454-42C4-83CE-FCFE071834C5}", - "Name": "ReflectanceWithSmoothness_Legacy", - "FileMasks": [ - "_spec" - ], - "PixelFormat": "BC7", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{851128B5-7454-42C4-83CE-FCFE071834C5}", - "Name": "ReflectanceWithSmoothness_Legacy", - "FileMasks": [ - "_spec" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{851128B5-7454-42C4-83CE-FCFE071834C5}", - "Name": "ReflectanceWithSmoothness_Legacy", - "FileMasks": [ - "_spec" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{851128B5-7454-42C4-83CE-FCFE071834C5}", - "Name": "ReflectanceWithSmoothness_Legacy", - "FileMasks": [ - "_spec" - ], - "PixelFormat": "BC3", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{851128B5-7454-42C4-83CE-FCFE071834C5}", - "Name": "ReflectanceWithSmoothness_Legacy", - "FileMasks": [ - "_spec" - ], - "PixelFormat": "BC7", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset deleted file mode 100644 index f59fd594f4..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance_Linear.preset +++ /dev/null @@ -1,81 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{9B2114F5-118A-4B3A-9CFE-97FA01EC8CFE}", - "Name": "Reflectance_Linear", - "DestColor": "Linear", - "FileMasks": [ - "_spec", - "_refl" - ], - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{9B2114F5-118A-4B3A-9CFE-97FA01EC8CFE}", - "Name": "Reflectance_Linear", - "DestColor": "Linear", - "FileMasks": [ - "_spec", - "_refl" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{9B2114F5-118A-4B3A-9CFE-97FA01EC8CFE}", - "Name": "Reflectance_Linear", - "DestColor": "Linear", - "FileMasks": [ - "_spec", - "_refl" - ], - "PixelFormat": "ASTC_4x4", - "MaxTextureSize": 2048, - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{9B2114F5-118A-4B3A-9CFE-97FA01EC8CFE}", - "Name": "Reflectance_Linear", - "DestColor": "Linear", - "FileMasks": [ - "_spec", - "_refl" - ], - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{9B2114F5-118A-4B3A-9CFE-97FA01EC8CFE}", - "Name": "Reflectance_Linear", - "DestColor": "Linear", - "FileMasks": [ - "_spec", - "_refl" - ], - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Font.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Font.preset deleted file mode 100644 index f76741148c..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Font.preset +++ /dev/null @@ -1,49 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{F34E3711-5F34-4DBC-8F5D-6340D3989F4B}", - "Name": "SF_Font", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "PlatformsPresets": { - "android": { - "UUID": "{F34E3711-5F34-4DBC-8F5D-6340D3989F4B}", - "Name": "SF_Font", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "ios": { - "UUID": "{F34E3711-5F34-4DBC-8F5D-6340D3989F4B}", - "Name": "SF_Font", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "mac": { - "UUID": "{F34E3711-5F34-4DBC-8F5D-6340D3989F4B}", - "Name": "SF_Font", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "provo": { - "UUID": "{F34E3711-5F34-4DBC-8F5D-6340D3989F4B}", - "Name": "SF_Font", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Gradient.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Gradient.preset deleted file mode 100644 index aff25dc83d..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Gradient.preset +++ /dev/null @@ -1,49 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{E7F9DF56-DCB0-4683-96EE-F04DA547BE24}", - "Name": "SF_Gradient", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "PlatformsPresets": { - "android": { - "UUID": "{E7F9DF56-DCB0-4683-96EE-F04DA547BE24}", - "Name": "SF_Gradient", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "ios": { - "UUID": "{E7F9DF56-DCB0-4683-96EE-F04DA547BE24}", - "Name": "SF_Gradient", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "mac": { - "UUID": "{E7F9DF56-DCB0-4683-96EE-F04DA547BE24}", - "Name": "SF_Gradient", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - }, - "provo": { - "UUID": "{E7F9DF56-DCB0-4683-96EE-F04DA547BE24}", - "Name": "SF_Gradient", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "IsPowerOf2": true - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image.preset deleted file mode 100644 index 191425bb92..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image.preset +++ /dev/null @@ -1,54 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{189A42CB-AEE3-4B80-B276-0FDB0ECA140C}", - "Name": "SF_Image", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true - }, - "PlatformsPresets": { - "android": { - "UUID": "{189A42CB-AEE3-4B80-B276-0FDB0ECA140C}", - "Name": "SF_Image", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true - }, - "ios": { - "UUID": "{189A42CB-AEE3-4B80-B276-0FDB0ECA140C}", - "Name": "SF_Image", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_4x4", - "IsPowerOf2": true - }, - "mac": { - "UUID": "{189A42CB-AEE3-4B80-B276-0FDB0ECA140C}", - "Name": "SF_Image", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true - }, - "provo": { - "UUID": "{189A42CB-AEE3-4B80-B276-0FDB0ECA140C}", - "Name": "SF_Image", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1", - "IsPowerOf2": true - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image_nonpower2.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image_nonpower2.preset deleted file mode 100644 index 9b1a9c7c45..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/SF_Image_nonpower2.preset +++ /dev/null @@ -1,49 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{C456B8AB-C360-4822-BCDD-225252D0E697}", - "Name": "SF_Image_nonpower2", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1" - }, - "PlatformsPresets": { - "android": { - "UUID": "{C456B8AB-C360-4822-BCDD-225252D0E697}", - "Name": "SF_Image_nonpower2", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_4x4" - }, - "ios": { - "UUID": "{C456B8AB-C360-4822-BCDD-225252D0E697}", - "Name": "SF_Image_nonpower2", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "ASTC_4x4" - }, - "mac": { - "UUID": "{C456B8AB-C360-4822-BCDD-225252D0E697}", - "Name": "SF_Image_nonpower2", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1" - }, - "provo": { - "UUID": "{C456B8AB-C360-4822-BCDD-225252D0E697}", - "Name": "SF_Image_nonpower2", - "SourceColor": "Linear", - "DestColor": "Linear", - "SuppressEngineReduce": true, - "PixelFormat": "BC1" - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo.preset deleted file mode 100644 index 8b12a08465..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo.preset +++ /dev/null @@ -1,69 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{88D07159-2FC0-4CBE-82CC-A9DC258C9351}", - "Name": "Terrain_Albedo", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "HighPassMip": 5, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{88D07159-2FC0-4CBE-82CC-A9DC258C9351}", - "Name": "Terrain_Albedo", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "HighPassMip": 5, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{88D07159-2FC0-4CBE-82CC-A9DC258C9351}", - "Name": "Terrain_Albedo", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "HighPassMip": 5, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{88D07159-2FC0-4CBE-82CC-A9DC258C9351}", - "Name": "Terrain_Albedo", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "HighPassMip": 5, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{88D07159-2FC0-4CBE-82CC-A9DC258C9351}", - "Name": "Terrain_Albedo", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "HighPassMip": 5, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo_HighPassed.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo_HighPassed.preset deleted file mode 100644 index d24531858f..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Terrain_Albedo_HighPassed.preset +++ /dev/null @@ -1,64 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{7827AA52-0A7B-43E7-8CD4-55E0BC513AF1}", - "Name": "Terrain_Albedo_HighPassed", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{7827AA52-0A7B-43E7-8CD4-55E0BC513AF1}", - "Name": "Terrain_Albedo_HighPassed", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{7827AA52-0A7B-43E7-8CD4-55E0BC513AF1}", - "Name": "Terrain_Albedo_HighPassed", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "ASTC_6x6", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{7827AA52-0A7B-43E7-8CD4-55E0BC513AF1}", - "Name": "Terrain_Albedo_HighPassed", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{7827AA52-0A7B-43E7-8CD4-55E0BC513AF1}", - "Name": "Terrain_Albedo_HighPassed", - "SourceColor": "Linear", - "DestColor": "Linear", - "PixelFormat": "BC1", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Uncompressed.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Uncompressed.preset deleted file mode 100644 index 6e28cafe11..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Uncompressed.preset +++ /dev/null @@ -1,54 +0,0 @@ -{ - "Type": "JsonSerialization", - "Version": 1, - "ClassName": "MultiplatformPresetSettings", - "ClassData": { - "DefaultPreset": { - "UUID": "{E996A696-991C-4FFC-B270-F5AD408B0618}", - "Name": "Uncompressed", - "PixelFormat": "R8G8B8X8", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "PlatformsPresets": { - "android": { - "UUID": "{E996A696-991C-4FFC-B270-F5AD408B0618}", - "Name": "Uncompressed", - "PixelFormat": "R8G8B8X8", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "ios": { - "UUID": "{E996A696-991C-4FFC-B270-F5AD408B0618}", - "Name": "Uncompressed", - "PixelFormat": "R8G8B8X8", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "mac": { - "UUID": "{E996A696-991C-4FFC-B270-F5AD408B0618}", - "Name": "Uncompressed", - "PixelFormat": "R8G8B8X8", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - }, - "provo": { - "UUID": "{E996A696-991C-4FFC-B270-F5AD408B0618}", - "Name": "Uncompressed", - "PixelFormat": "R8G8B8X8", - "IsPowerOf2": true, - "MipMapSetting": { - "MipGenType": "Box" - } - } - } - } -} diff --git a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken_diff.png.imagesettings b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken_diff.png.imagesettings deleted file mode 100644 index adbf7d20f9..0000000000 --- a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken_diff.png.imagesettings +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_ddna.tif.imagesettings b/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_ddna.tif.imagesettings deleted file mode 100644 index 9da169c456..0000000000 --- a/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_ddna.tif.imagesettings +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_spec.tif.imagesettings b/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_spec.tif.imagesettings deleted file mode 100644 index 43410a50df..0000000000 --- a/Gems/PhysXSamples/Assets/Characters/Cowboy/Actor/Textures/Cowboy_01_spec.tif.imagesettings +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_pressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_pressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_pressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_unpressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_unpressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_a_unpressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_pressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_pressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_pressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_unpressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_unpressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_b_unpressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_pressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_pressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_pressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_unpressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_unpressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_x_unpressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_pressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_pressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_pressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_unpressed.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_unpressed.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_button_y_unpressed.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_centre.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_centre.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_centre.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 diff --git a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_radial.tif.exportsettings b/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_radial.tif.exportsettings deleted file mode 100644 index 1415bea891..0000000000 --- a/Gems/VirtualGamepad/Assets/UI/Textures/VirtualGamepad/virtual_gamepad_thumbstick_radial.tif.exportsettings +++ /dev/null @@ -1 +0,0 @@ -/autooptimizefile=0 /dns=1 /preset=ReferenceImage_Linear /reduce=0 /ser=0 From 9dee92a7089a53e057e9a5c26700368dd6b6f479 Mon Sep 17 00:00:00 2001 From: smurly Date: Mon, 11 Oct 2021 16:09:11 -0700 Subject: [PATCH 226/226] Mateiral component P0 tests editor script (#4585) Signed-off-by: Scott Murray --- .../Atom/TestSuite_Main_Optimized.py | 4 + ...ydra_AtomEditorComponents_MaterialAdded.py | 205 ++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py diff --git a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py index 90436fbe27..ec3d76758c 100644 --- a/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py +++ b/AutomatedTesting/Gem/PythonTests/Atom/TestSuite_Main_Optimized.py @@ -59,5 +59,9 @@ class TestAutomation(EditorTestSuite): class AtomEditorComponents_MeshAdded(EditorSharedTest): from Atom.tests import hydra_AtomEditorComponents_MeshAdded as test_module + @pytest.mark.test_case_id("C32078123") + class AtomEditorComponents_MaterialAdded(EditorSharedTest): + from Atom.tests import hydra_AtomEditorComponents_MaterialAdded as test_module + class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest): from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module diff --git a/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py new file mode 100644 index 0000000000..32cd5471f2 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/Atom/tests/hydra_AtomEditorComponents_MaterialAdded.py @@ -0,0 +1,205 @@ +""" +Copyright (c) Contributors to the Open 3D Engine Project. +For complete copyright and license terms please see the LICENSE at the root of this distribution. + +SPDX-License-Identifier: Apache-2.0 OR MIT +""" + +class Tests: + creation_undo = ( + "UNDO Entity creation success", + "UNDO Entity creation failed") + creation_redo = ( + "REDO Entity creation success", + "REDO Entity creation failed") + material_creation = ( + "Material Entity successfully created", + "Material Entity failed to be created") + material_component = ( + "Entity has a Material component", + "Entity failed to find Material component") + material_disabled = ( + "Material component disabled", + "Material component was not disabled.") + actor_component = ( + "Entity has an Actor component", + "Entity did not have an Actor component") + actor_undo = ( + "Entity Actor component gone", + "Entity Actor component add failed to undo") + mesh_component = ( + "Entity has a Mesh component", + "Entity did not have a Mesh component") + material_enabled = ( + "Material component enabled", + "Material component was not enabled.") + enter_game_mode = ( + "Entered game mode", + "Failed to enter game mode") + exit_game_mode = ( + "Exited game mode", + "Couldn't exit game mode") + is_visible = ( + "Entity is visible", + "Entity was not visible") + is_hidden = ( + "Entity is hidden", + "Entity was not hidden") + entity_deleted = ( + "Entity deleted", + "Entity was not deleted") + deletion_undo = ( + "UNDO deletion success", + "UNDO deletion failed") + deletion_redo = ( + "REDO deletion success", + "REDO deletion failed") + + +def AtomEditorComponents_Material_AddedToEntity(): + """ + Summary: + Tests the Material component can be added to an entity and has the expected functionality. + + Test setup: + - Wait for Editor idle loop. + - Open the "Base" level. + + Expected Behavior: + The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components. + Creation and deletion undo/redo should also work. + + Test Steps: + 1) Create a Material entity with no components. + 2) Add a Material component to Material entity. + 3) UNDO the entity creation and component addition. + 4) REDO the entity creation and component addition. + 5) Verify Material component not enabled. + 6) Add Actor component since it is required by the Material component. + 7) Verify Material component is enabled. + 8) UNDO add Actor component + 9) Verify Material component not enabled. + 10) Add Mesh component since it is required by the Material component. + 11) Verify Material component is enabled. + 12) Enter/Exit game mode. + 13) Test IsHidden. + 14) Test IsVisible. + 15) Delete Material entity. + 16) UNDO deletion. + 17) REDO deletion. + 18) Look for errors. + + :return: None + """ + + import azlmbr.legacy.general as general + + from editor_python_test_tools.editor_entity_utils import EditorEntity + from editor_python_test_tools.utils import Report, Tracer, TestHelper + + with Tracer() as error_tracer: + # Test setup begins. + # Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level. + TestHelper.init_idle() + TestHelper.open_level("", "Base") + + # Test steps begin. + # 1. Create a Material entity with no components. + material_name = "Material" + material_entity = EditorEntity.create_editor_entity(material_name) + Report.critical_result(Tests.material_creation, material_entity.exists()) + + # 2. Add a Material component to Material entity. + material_component = material_entity.add_component(material_name) + Report.critical_result( + Tests.material_component, + material_entity.has_component(material_name)) + + # 3. UNDO the entity creation and component addition. + # -> UNDO component addition. + general.undo() + # -> UNDO naming entity. + general.undo() + # -> UNDO selecting entity. + general.undo() + # -> UNDO entity creation. + general.undo() + general.idle_wait_frames(1) + Report.result(Tests.creation_undo, not material_entity.exists()) + + # 4. REDO the entity creation and component addition. + # -> REDO entity creation. + general.redo() + # -> REDO selecting entity. + general.redo() + # -> REDO naming entity. + general.redo() + # -> REDO component addition. + general.redo() + general.idle_wait_frames(1) + Report.result(Tests.creation_redo, material_entity.exists()) + + # 5. Verify Material component not enabled. + Report.result(Tests.material_disabled, not material_component.is_enabled()) + + # 6. Add Actor component since it is required by the Material component. + actor_name = "Actor" + material_entity.add_component(actor_name) + Report.result(Tests.actor_component, material_entity.has_component(actor_name)) + + # 7. Verify Material component is enabled. + Report.result(Tests.material_enabled, material_component.is_enabled()) + + # 8. UNDO component addition. + general.undo() + general.idle_wait_frames(1) + Report.result(Tests.actor_undo, not material_entity.has_component(actor_name)) + + # 9. Verify Material component not enabled. + Report.result(Tests.material_disabled, not material_component.is_enabled()) + + # 10. Add Mesh component since it is required by the Material component. + mesh_name = "Mesh" + material_entity.add_component(mesh_name) + Report.result(Tests.mesh_component, material_entity.has_component(mesh_name)) + + # 11. Verify Material component is enabled. + Report.result(Tests.material_enabled, material_component.is_enabled()) + + # 12. Enter/Exit game mode. + TestHelper.enter_game_mode(Tests.enter_game_mode) + general.idle_wait_frames(1) + TestHelper.exit_game_mode(Tests.exit_game_mode) + + # 13. Test IsHidden. + material_entity.set_visibility_state(False) + Report.result(Tests.is_hidden, material_entity.is_hidden() is True) + + # 14. Test IsVisible. + material_entity.set_visibility_state(True) + general.idle_wait_frames(1) + Report.result(Tests.is_visible, material_entity.is_visible() is True) + + # 15. Delete Material entity. + material_entity.delete() + Report.result(Tests.entity_deleted, not material_entity.exists()) + + # 16. UNDO deletion. + general.undo() + Report.result(Tests.deletion_undo, material_entity.exists()) + + # 17. REDO deletion. + general.redo() + Report.result(Tests.deletion_redo, not material_entity.exists()) + + # 18. Look for errors or asserts. + TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0) + for error_info in error_tracer.errors: + Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}") + for assert_info in error_tracer.asserts: + Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}") + + +if __name__ == "__main__": + from editor_python_test_tools.utils import Report + Report.start_test(AtomEditorComponents_Material_AddedToEntity)